From 04eae09f6c1a2287e50a13ee4616366ae6960afa Mon Sep 17 00:00:00 2001 From: Eisenbach Date: Mon, 26 Mar 2018 14:08:23 -0400 Subject: [PATCH] initial version --- .gitignore | 16 + BUILDING_with_libxc | 11 + CBLAS/Makefile | 196 + CBLAS/Makefile.ALPHA | 50 + CBLAS/Makefile.HPPA | 50 + CBLAS/Makefile.LINUX | 49 + CBLAS/Makefile.SGI64 | 50 + CBLAS/Makefile.SUN4 | 50 + CBLAS/Makefile.SUN4SOL2 | 50 + CBLAS/Makefile.in | 52 + CBLAS/README | 62 + CBLAS/examples/Makefile | 15 + CBLAS/examples/cblas_example1.c | 69 + CBLAS/examples/cblas_example2.c | 72 + CBLAS/include/cblas.h | 575 + CBLAS/include/cblas_f77.h | 701 + CBLAS/lib/.gitkeep | 0 CBLAS/lib/README | 2 + CBLAS/src/Makefile | 247 + CBLAS/src/cblas_caxpy.c | 22 + CBLAS/src/cblas_ccopy.c | 22 + CBLAS/src/cblas_cdotc_sub.c | 23 + CBLAS/src/cblas_cdotu_sub.c | 23 + CBLAS/src/cblas_cgbmv.c | 165 + CBLAS/src/cblas_cgemm.c | 109 + CBLAS/src/cblas_cgemv.c | 162 + CBLAS/src/cblas_cgerc.c | 84 + CBLAS/src/cblas_cgeru.c | 45 + CBLAS/src/cblas_chbmv.c | 159 + CBLAS/src/cblas_chemm.c | 106 + CBLAS/src/cblas_chemv.c | 160 + CBLAS/src/cblas_cher.c | 116 + CBLAS/src/cblas_cher2.c | 152 + CBLAS/src/cblas_cher2k.c | 111 + CBLAS/src/cblas_cherk.c | 105 + CBLAS/src/cblas_chpmv.c | 160 + CBLAS/src/cblas_chpr.c | 115 + CBLAS/src/cblas_chpr2.c | 149 + CBLAS/src/cblas_cscal.c | 21 + CBLAS/src/cblas_csscal.c | 21 + CBLAS/src/cblas_cswap.c | 22 + CBLAS/src/cblas_csymm.c | 106 + CBLAS/src/cblas_csyr2k.c | 108 + CBLAS/src/cblas_csyrk.c | 108 + CBLAS/src/cblas_ctbmv.c | 158 + CBLAS/src/cblas_ctbsv.c | 162 + CBLAS/src/cblas_ctpmv.c | 152 + CBLAS/src/cblas_ctpsv.c | 157 + CBLAS/src/cblas_ctrmm.c | 144 + CBLAS/src/cblas_ctrmv.c | 155 + CBLAS/src/cblas_ctrsm.c | 155 + CBLAS/src/cblas_ctrsv.c | 156 + CBLAS/src/cblas_dasum.c | 23 + CBLAS/src/cblas_daxpy.c | 22 + CBLAS/src/cblas_dcopy.c | 22 + CBLAS/src/cblas_ddot.c | 25 + CBLAS/src/cblas_dgbmv.c | 81 + CBLAS/src/cblas_dgemm.c | 109 + CBLAS/src/cblas_dgemv.c | 78 + CBLAS/src/cblas_dger.c | 47 + CBLAS/src/cblas_dnrm2.c | 23 + CBLAS/src/cblas_drot.c | 23 + CBLAS/src/cblas_drotg.c | 14 + CBLAS/src/cblas_drotm.c | 14 + CBLAS/src/cblas_drotmg.c | 15 + CBLAS/src/cblas_dsbmv.c | 77 + CBLAS/src/cblas_dscal.c | 21 + CBLAS/src/cblas_dsdot.c | 25 + CBLAS/src/cblas_dspmv.c | 76 + CBLAS/src/cblas_dspr.c | 70 + CBLAS/src/cblas_dspr2.c | 70 + CBLAS/src/cblas_dswap.c | 22 + CBLAS/src/cblas_dsymm.c | 106 + CBLAS/src/cblas_dsymv.c | 76 + CBLAS/src/cblas_dsyr.c | 71 + CBLAS/src/cblas_dsyr2.c | 76 + CBLAS/src/cblas_dsyr2k.c | 109 + CBLAS/src/cblas_dsyrk.c | 108 + CBLAS/src/cblas_dtbmv.c | 122 + CBLAS/src/cblas_dtbsv.c | 122 + CBLAS/src/cblas_dtpmv.c | 117 + CBLAS/src/cblas_dtpsv.c | 118 + CBLAS/src/cblas_dtrmm.c | 148 + CBLAS/src/cblas_dtrmv.c | 122 + CBLAS/src/cblas_dtrsm.c | 153 + CBLAS/src/cblas_dtrsv.c | 121 + CBLAS/src/cblas_dzasum.c | 23 + CBLAS/src/cblas_dznrm2.c | 23 + CBLAS/src/cblas_globals.c | 2 + CBLAS/src/cblas_icamax.c | 23 + CBLAS/src/cblas_idamax.c | 23 + CBLAS/src/cblas_isamax.c | 23 + CBLAS/src/cblas_izamax.c | 23 + CBLAS/src/cblas_sasum.c | 23 + CBLAS/src/cblas_saxpy.c | 23 + CBLAS/src/cblas_scasum.c | 23 + CBLAS/src/cblas_scnrm2.c | 23 + CBLAS/src/cblas_scopy.c | 22 + CBLAS/src/cblas_sdot.c | 25 + CBLAS/src/cblas_sdsdot.c | 25 + CBLAS/src/cblas_sgbmv.c | 83 + CBLAS/src/cblas_sgemm.c | 110 + CBLAS/src/cblas_sgemv.c | 78 + CBLAS/src/cblas_sger.c | 46 + CBLAS/src/cblas_snrm2.c | 23 + CBLAS/src/cblas_srot.c | 22 + CBLAS/src/cblas_srotg.c | 14 + CBLAS/src/cblas_srotm.c | 22 + CBLAS/src/cblas_srotmg.c | 15 + CBLAS/src/cblas_ssbmv.c | 76 + CBLAS/src/cblas_sscal.c | 21 + CBLAS/src/cblas_sspmv.c | 73 + CBLAS/src/cblas_sspr.c | 72 + CBLAS/src/cblas_sspr2.c | 71 + CBLAS/src/cblas_sswap.c | 22 + CBLAS/src/cblas_ssymm.c | 108 + CBLAS/src/cblas_ssymv.c | 76 + CBLAS/src/cblas_ssyr.c | 70 + CBLAS/src/cblas_ssyr2.c | 76 + CBLAS/src/cblas_ssyr2k.c | 111 + CBLAS/src/cblas_ssyrk.c | 110 + CBLAS/src/cblas_stbmv.c | 122 + CBLAS/src/cblas_stbsv.c | 122 + CBLAS/src/cblas_stpmv.c | 118 + CBLAS/src/cblas_stpsv.c | 118 + CBLAS/src/cblas_strmm.c | 148 + CBLAS/src/cblas_strmv.c | 122 + CBLAS/src/cblas_strsm.c | 143 + CBLAS/src/cblas_strsv.c | 121 + CBLAS/src/cblas_xerbla.c | 68 + CBLAS/src/cblas_zaxpy.c | 22 + CBLAS/src/cblas_zcopy.c | 22 + CBLAS/src/cblas_zdotc_sub.c | 24 + CBLAS/src/cblas_zdotu_sub.c | 24 + CBLAS/src/cblas_zdscal.c | 21 + CBLAS/src/cblas_zgbmv.c | 166 + CBLAS/src/cblas_zgemm.c | 109 + CBLAS/src/cblas_zgemv.c | 164 + CBLAS/src/cblas_zgerc.c | 84 + CBLAS/src/cblas_zgeru.c | 44 + CBLAS/src/cblas_zhbmv.c | 159 + CBLAS/src/cblas_zhemm.c | 106 + CBLAS/src/cblas_zhemv.c | 160 + CBLAS/src/cblas_zher.c | 110 + CBLAS/src/cblas_zher2.c | 153 + CBLAS/src/cblas_zher2k.c | 110 + CBLAS/src/cblas_zherk.c | 105 + CBLAS/src/cblas_zhpmv.c | 160 + CBLAS/src/cblas_zhpr.c | 115 + CBLAS/src/cblas_zhpr2.c | 150 + CBLAS/src/cblas_zscal.c | 21 + CBLAS/src/cblas_zswap.c | 22 + CBLAS/src/cblas_zsymm.c | 106 + CBLAS/src/cblas_zsyr2k.c | 108 + CBLAS/src/cblas_zsyrk.c | 107 + CBLAS/src/cblas_ztbmv.c | 158 + CBLAS/src/cblas_ztbsv.c | 162 + CBLAS/src/cblas_ztpmv.c | 152 + CBLAS/src/cblas_ztpsv.c | 157 + CBLAS/src/cblas_ztrmm.c | 149 + CBLAS/src/cblas_ztrmv.c | 156 + CBLAS/src/cblas_ztrsm.c | 155 + CBLAS/src/cblas_ztrsv.c | 156 + CBLAS/src/cdotcsub.f | 15 + CBLAS/src/cdotusub.f | 15 + CBLAS/src/dasumsub.f | 15 + CBLAS/src/ddotsub.f | 15 + CBLAS/src/dnrm2sub.f | 15 + CBLAS/src/dsdotsub.f | 15 + CBLAS/src/dzasumsub.f | 15 + CBLAS/src/dznrm2sub.f | 15 + CBLAS/src/icamaxsub.f | 15 + CBLAS/src/idamaxsub.f | 15 + CBLAS/src/isamaxsub.f | 15 + CBLAS/src/izamaxsub.f | 15 + CBLAS/src/sasumsub.f | 15 + CBLAS/src/scasumsub.f | 15 + CBLAS/src/scnrm2sub.f | 15 + CBLAS/src/sdotsub.f | 15 + CBLAS/src/sdsdotsub.f | 15 + CBLAS/src/snrm2sub.f | 15 + CBLAS/src/xerbla.c | 47 + CBLAS/src/zdotcsub.f | 15 + CBLAS/src/zdotusub.f | 15 + CBLAS/testing/Makefile | 134 + CBLAS/testing/auxiliary.c | 38 + CBLAS/testing/c_c2chke.c | 826 + CBLAS/testing/c_c3chke.c | 1706 ++ CBLAS/testing/c_cblas1.c | 74 + CBLAS/testing/c_cblas2.c | 807 + CBLAS/testing/c_cblas3.c | 564 + CBLAS/testing/c_cblat1.f | 682 + CBLAS/testing/c_cblat2.f | 2932 +++ CBLAS/testing/c_cblat3.f | 2786 +++ CBLAS/testing/c_d2chke.c | 789 + CBLAS/testing/c_d3chke.c | 1271 + CBLAS/testing/c_dblas1.c | 83 + CBLAS/testing/c_dblas2.c | 583 + CBLAS/testing/c_dblas3.c | 333 + CBLAS/testing/c_dblat1.f | 728 + CBLAS/testing/c_dblat2.f | 2907 +++ CBLAS/testing/c_dblat3.f | 2475 ++ CBLAS/testing/c_s2chke.c | 789 + CBLAS/testing/c_s3chke.c | 1273 + CBLAS/testing/c_sblas1.c | 82 + CBLAS/testing/c_sblas2.c | 579 + CBLAS/testing/c_sblas3.c | 330 + CBLAS/testing/c_sblat1.f | 728 + CBLAS/testing/c_sblat2.f | 2907 +++ CBLAS/testing/c_sblat3.f | 2479 ++ CBLAS/testing/c_xerbla.c | 125 + CBLAS/testing/c_z2chke.c | 826 + CBLAS/testing/c_z3chke.c | 1706 ++ CBLAS/testing/c_zblas1.c | 74 + CBLAS/testing/c_zblas2.c | 807 + CBLAS/testing/c_zblas3.c | 564 + CBLAS/testing/c_zblat1.f | 682 + CBLAS/testing/c_zblat2.f | 2939 +++ CBLAS/testing/c_zblat3.f | 2791 +++ CBLAS/testing/cblas_test.h | 513 + CBLAS/testing/cin2 | 34 + CBLAS/testing/cin3 | 22 + CBLAS/testing/din2 | 33 + CBLAS/testing/din3 | 19 + CBLAS/testing/sin2 | 33 + CBLAS/testing/sin3 | 19 + CBLAS/testing/zin2 | 34 + CBLAS/testing/zin3 | 22 + Makefile | 60 + Test/Co/Co_v | 1542 ++ Test/Co/i_lsms | 165 + Test/Co/v_co.0 | 1542 ++ Test/Cu/Cu_v | 395 + Test/Cu/i_lsms | 155 + Test/Cu/v_cu.0 | 395 + Test/Fe1024/i_lsms | 155 + Test/Fe1024/v_fe2.0 | 1542 ++ Test/Fe1024/v_fe2.1 | 1542 ++ Test/Fe16/WLrestart.jsn | 1862 ++ Test/Fe16/i_lsms | 155 + Test/Fe16/v_fe2.0 | 1542 ++ Test/Fe16/v_fe2.1 | 1542 ++ Test/Fe16_non_collinear/i_lsms | 183 + Test/Fe16_non_collinear/v_fe16.0 | 1542 ++ Test/Fe16_non_collinear/v_fe16.1 | 1542 ++ Test/Fe16_non_collinear/v_fe16.10 | 1542 ++ Test/Fe16_non_collinear/v_fe16.11 | 1542 ++ Test/Fe16_non_collinear/v_fe16.12 | 1542 ++ Test/Fe16_non_collinear/v_fe16.13 | 1542 ++ Test/Fe16_non_collinear/v_fe16.14 | 1542 ++ Test/Fe16_non_collinear/v_fe16.15 | 1542 ++ Test/Fe16_non_collinear/v_fe16.2 | 1542 ++ Test/Fe16_non_collinear/v_fe16.3 | 1542 ++ Test/Fe16_non_collinear/v_fe16.4 | 1542 ++ Test/Fe16_non_collinear/v_fe16.5 | 1542 ++ Test/Fe16_non_collinear/v_fe16.6 | 1542 ++ Test/Fe16_non_collinear/v_fe16.7 | 1542 ++ Test/Fe16_non_collinear/v_fe16.8 | 1542 ++ Test/Fe16_non_collinear/v_fe16.9 | 1542 ++ Test/Fe2/i_lsms | 161 + Test/Fe2/v_fe2.0 | 1542 ++ Test/Fe2/v_fe2.1 | 1542 ++ .../Fe2_rewl-lsms_potentialShift/WL_start.jsn | 7 + .../WL_start2.jsn | 14 + Test/Fe2_rewl-lsms_potentialShift/i_lsms | 157 + Test/Fe2_rewl-lsms_potentialShift/run | 22 + Test/Fe2_rewl-lsms_potentialShift/runRestart | 22 + Test/Fe2_rewl-lsms_potentialShift/v_fe2 | Bin 0 -> 89416 bytes Test/Fe2_rewl-lsms_potentialShift/v_fe2.0 | Bin 0 -> 123551 bytes Test/Fe2_rewl-lsms_potentialShift/v_fe2.1 | Bin 0 -> 123551 bytes Test/Fe2_wl-lsms/i_lsms | 150 + Test/Fe2_wl-lsms/run | 22 + Test/Fe2_wl-lsms/v_fe2 | Bin 0 -> 89416 bytes Test/Fe2_wl-lsms/v_fe2.0 | 1534 ++ Test/Fe2_wl-lsms/v_fe2.1 | 1534 ++ Test/Ni4/Ni_v | 1546 ++ Test/Ni4/copyWtoV.sh | 7 + Test/Ni4/i_lsms | 80 + Test/Ni4/i_lsms_nc | 82 + Test/Ni4/q_lsms | 19 + Test/Ni4/v_ni4.0 | 1554 ++ Test/Ni4/v_ni4.1 | 1554 ++ Test/Ni4/v_ni4.2 | 1554 ++ Test/Ni4/v_ni4.3 | 1554 ++ Test/Summit-Acceptance/Fe/i_lsms | 77 + Test/Summit-Acceptance/Fe/i_lsms_template | 77 + Test/Summit-Acceptance/Fe/q_lsms | 23 + Test/Summit-Acceptance/Fe/q_lsms_titan | 25 + .../Fe/run-lsms-summitdev.sh | 49 + .../Fe/run-lsms-summitdev_128.sh | 49 + .../Fe/set_device_and_bind.sh | 101 + Test/Summit-Acceptance/Fe/v_fe2.0 | 1542 ++ Test/Summit-Acceptance/FePt/i_lsms | 91 + Test/Summit-Acceptance/FePt/i_lsms_restart | 91 + Test/Summit-Acceptance/FePt/i_lsms_start | 91 + Test/Summit-Acceptance/FePt/k.out_reference | 30 + Test/Summit-Acceptance/FePt/q_lsms | 15 + Test/Summit-Acceptance/FePt/q_lsms_restart | 25 + .../FePt/run-lsms-summitdev.sh | 60 + .../FePt/set_device_and_bind.sh | 101 + Test/Summit-Acceptance/FePt/v_fept.0 | 1534 ++ Test/Summit-Acceptance/FePt/v_fept.1 | 812 + Test/Summit-Acceptance/README | 51 + Test/Summit-Acceptance/WL-Fe/i_lsms | 77 + Test/Summit-Acceptance/WL-Fe/i_lsms_template | 77 + Test/Summit-Acceptance/WL-Fe/q_lsms | 34 + Test/Summit-Acceptance/WL-Fe/v_fe2.0 | 1542 ++ Tools/Makefile | 9 + Tools/kkrmat_compare/kkrmat_compare.f | 60 + Tools/wltool/Makefile | 8 + Tools/wltool/wltool.cpp | 137 + Tools/xyz2i/README | 11 + Tools/xyz2i/xyz2i.py | 170 + architecture/nccs_yona | 27 + architecture/nccs_yona_nogpu | 25 + architecture/nccs_yona_vampir | 29 + architecture/osx-gfortran | 51 + architecture/osx-gfortran-markus | 54 + architecture/smoky-gfortran | 39 + architecture/summitdev-gnu-cublas | 40 + architecture/summitdev-gnu-cuda_c | 40 + architecture/summitdev-gnu-nogpu | 29 + architecture/summitdev-pgi-cuda_c | 31 + architecture/summitdev-pgi-nogpu | 29 + architecture/xk6-cray-nogpu | 14 + architecture/xk6-gnu-cuda_c | 30 + architecture/xk6-gnu-cula | 24 + architecture/xk6-gnu-libsci | 22 + architecture/xk6-gnu-nogpu | 22 + architecture/xk6-pgi-nogpu | 22 + architecture/xt5-pgi | 22 + bin/README | 3 + boost/LICENSE_1_0.txt | 23 + boost/config.hpp | 70 + boost/config/compiler/gcc.hpp | 149 + boost/config/compiler/pgi.hpp | 25 + boost/config/no_tr1/utility.hpp | 28 + boost/config/platform/aix.hpp | 33 + boost/config/platform/bsd.hpp | 86 + boost/config/platform/cygwin.hpp | 51 + boost/config/platform/linux.hpp | 98 + boost/config/platform/macos.hpp | 86 + boost/config/platform/solaris.hpp | 28 + boost/config/posix_features.hpp | 95 + boost/config/select_compiler_config.hpp | 115 + boost/config/select_platform_config.hpp | 90 + boost/config/select_stdlib_config.hpp | 68 + boost/config/stdlib/libstdcpp3.hpp | 73 + boost/config/stdlib/stlport.hpp | 201 + boost/config/suffix.hpp | 566 + boost/config/user.hpp | 124 + boost/cstdint.hpp | 446 + boost/detail/workaround.hpp | 202 + boost/integer_traits.hpp | 236 + boost/limits.hpp | 146 + boost/random.hpp | 72 + boost/random/additive_combine.hpp | 125 + boost/random/bernoulli_distribution.hpp | 80 + boost/random/binomial_distribution.hpp | 81 + boost/random/cauchy_distribution.hpp | 89 + boost/random/detail/const_mod.hpp | 359 + boost/random/detail/pass_through_engine.hpp | 98 + boost/random/detail/ptr_helper.hpp | 94 + boost/random/detail/signed_unsigned_tools.hpp | 164 + boost/random/detail/uniform_int_float.hpp | 84 + boost/random/discard_block.hpp | 121 + boost/random/exponential_distribution.hpp | 81 + boost/random/gamma_distribution.hpp | 133 + boost/random/geometric_distribution.hpp | 97 + boost/random/inversive_congruential.hpp | 128 + boost/random/lagged_fibonacci.hpp | 464 + boost/random/linear_congruential.hpp | 258 + boost/random/linear_feedback_shift.hpp | 145 + boost/random/lognormal_distribution.hpp | 114 + boost/random/mersenne_twister.hpp | 302 + boost/random/normal_distribution.hpp | 111 + boost/random/poisson_distribution.hpp | 99 + boost/random/random_number_generator.hpp | 56 + boost/random/ranlux.hpp | 50 + boost/random/shuffle_output.hpp | 175 + boost/random/subtract_with_carry.hpp | 445 + boost/random/triangle_distribution.hpp | 101 + boost/random/uniform_01.hpp | 97 + boost/random/uniform_int.hpp | 161 + boost/random/uniform_on_sphere.hpp | 86 + boost/random/uniform_real.hpp | 83 + boost/random/uniform_smallint.hpp | 236 + boost/random/variate_generator.hpp | 133 + boost/random/xor_combine.hpp | 130 + boost/static_assert.hpp | 122 + build_libxc | 9 + doc/Doxyfile | 1551 ++ doc/Makefile | 14 + doc/html/Makefile | 12 + doc/latex/Makefile | 21 + doc/latex/doxygen.sty | 480 + doc/manual/Makefile | 14 + doc/manual/constrained_moment.tex | 12 + doc/manual/input_format.tex | 157 + doc/manual/instalation.tex | 25 + doc/manual/lsms_manual.tex | 31 + doc/manual/units.tex | 12 + html/doxygen.css | 545 + html/doxygen.png | Bin 0 -> 1281 bytes html/index.html | 57 + html/installdox | 117 + html/search/close.png | Bin 0 -> 273 bytes html/search/nomatches.html | 12 + html/search/search.css | 200 + html/search/search.js | 724 + html/search/search.png | Bin 0 -> 527 bytes html/tab_b.gif | Bin 0 -> 35 bytes html/tab_l.gif | Bin 0 -> 706 bytes html/tab_r.gif | Bin 0 -> 2585 bytes html/tabs.css | 105 + include/Array3d.hpp | 240 + include/BLAS.hpp | 939 + include/Complex.hpp | 8 + include/LAPACK.hpp | 62 + include/Matrix.hpp | 285 + include/PhysicalConstants.hpp | 7 + include/Real.hpp | 54 + include/TypeTraits.hpp | 7 + include/lapack.h | 14 + latex/Makefile | 19 + latex/doxygen.sty | 350 + latex/refman.tex | 53 + lib/Makefile | 4 + libxc-2.2.0/AUTHORS | 12 + libxc-2.2.0/COPYING | 165 + libxc-2.2.0/ChangeLog | 6485 +++++ libxc-2.2.0/INSTALL | 365 + libxc-2.2.0/Makefile.am | 40 + libxc-2.2.0/Makefile.in | 880 + libxc-2.2.0/NEWS | 8 + libxc-2.2.0/PACKAGING | 21 + libxc-2.2.0/README | 73 + libxc-2.2.0/TODO | 59 + libxc-2.2.0/aclocal.m4 | 1081 + libxc-2.2.0/build/Makefile.am | 29 + libxc-2.2.0/build/Makefile.in | 506 + libxc-2.2.0/build/libxc.pc.in | 11 + libxc-2.2.0/build/libxc.spec.in | 72 + libxc-2.2.0/compile | 347 + libxc-2.2.0/config.guess | 1535 ++ libxc-2.2.0/config.h.in | 141 + libxc-2.2.0/config.sub | 1790 ++ libxc-2.2.0/configure | 20133 ++++++++++++++++ libxc-2.2.0/configure.ac | 165 + libxc-2.2.0/depcomp | 791 + libxc-2.2.0/install-sh | 527 + libxc-2.2.0/ltmain.sh | 9655 ++++++++ libxc-2.2.0/m4/ac_prog_sed.m4 | 172 + libxc-2.2.0/m4/ax_f90_module_extension.m4 | 45 + libxc-2.2.0/m4/fc_integer.m4 | 90 + libxc-2.2.0/m4/fcflags.m4 | 100 + libxc-2.2.0/m4/fortran.m4 | 144 + libxc-2.2.0/m4/libtool.m4 | 7992 ++++++ libxc-2.2.0/m4/ltoptions.m4 | 384 + libxc-2.2.0/m4/ltsugar.m4 | 123 + libxc-2.2.0/m4/ltversion.m4 | 23 + libxc-2.2.0/m4/lt~obsolete.m4 | 98 + libxc-2.2.0/missing | 215 + libxc-2.2.0/src/Makefile.am | 175 + libxc-2.2.0/src/Makefile.in | 1266 + libxc-2.2.0/src/bessel.c | 263 + libxc-2.2.0/src/expint_e1.c | 124 + libxc-2.2.0/src/functionals.c | 195 + libxc-2.2.0/src/get_funcs.pl | 118 + libxc-2.2.0/src/gga.c | 247 + libxc-2.2.0/src/gga_c_am05.c | 125 + libxc-2.2.0/src/gga_c_ft97.c | 321 + libxc-2.2.0/src/gga_c_lm.c | 162 + libxc-2.2.0/src/gga_c_lyp.c | 233 + libxc-2.2.0/src/gga_c_op.c | 217 + libxc-2.2.0/src/gga_c_optc.c | 159 + libxc-2.2.0/src/gga_c_p86.c | 163 + libxc-2.2.0/src/gga_c_pbe.c | 497 + libxc-2.2.0/src/gga_c_pw91.c | 331 + libxc-2.2.0/src/gga_c_q2d.c | 191 + libxc-2.2.0/src/gga_c_sogga11.c | 207 + libxc-2.2.0/src/gga_c_tca.c | 177 + libxc-2.2.0/src/gga_c_wi.c | 129 + libxc-2.2.0/src/gga_c_wl.c | 95 + libxc-2.2.0/src/gga_k_dk.c | 228 + libxc-2.2.0/src/gga_k_meyer.c | 69 + libxc-2.2.0/src/gga_k_ol1.c | 61 + libxc-2.2.0/src/gga_k_ol2.c | 90 + libxc-2.2.0/src/gga_k_pearson.c | 64 + libxc-2.2.0/src/gga_k_tflw.c | 320 + libxc-2.2.0/src/gga_x_2d_b86.c | 68 + libxc-2.2.0/src/gga_x_2d_b86_mgc.c | 70 + libxc-2.2.0/src/gga_x_2d_b88.c | 100 + libxc-2.2.0/src/gga_x_2d_pbe.c | 82 + libxc-2.2.0/src/gga_x_airy.c | 162 + libxc-2.2.0/src/gga_x_ak13.c | 88 + libxc-2.2.0/src/gga_x_am05.c | 151 + libxc-2.2.0/src/gga_x_b86.c | 71 + libxc-2.2.0/src/gga_x_b86_mgc.c | 77 + libxc-2.2.0/src/gga_x_b88.c | 238 + libxc-2.2.0/src/gga_x_bayesian.c | 81 + libxc-2.2.0/src/gga_x_bpccac.c | 89 + libxc-2.2.0/src/gga_x_c09x.c | 73 + libxc-2.2.0/src/gga_x_dk87.c | 96 + libxc-2.2.0/src/gga_x_ft97.c | 114 + libxc-2.2.0/src/gga_x_g96.c | 61 + libxc-2.2.0/src/gga_x_herman.c | 61 + libxc-2.2.0/src/gga_x_hjs.c | 308 + libxc-2.2.0/src/gga_x_htbs.c | 147 + libxc-2.2.0/src/gga_x_ityh.c | 123 + libxc-2.2.0/src/gga_x_kt.c | 125 + libxc-2.2.0/src/gga_x_lb.c | 202 + libxc-2.2.0/src/gga_x_lg93.c | 88 + libxc-2.2.0/src/gga_x_lv_rpw86.c | 111 + libxc-2.2.0/src/gga_x_mpbe.c | 74 + libxc-2.2.0/src/gga_x_n12.c | 157 + libxc-2.2.0/src/gga_x_optx.c | 110 + libxc-2.2.0/src/gga_x_pbe.c | 514 + libxc-2.2.0/src/gga_x_pbea.c | 66 + libxc-2.2.0/src/gga_x_pw86.c | 123 + libxc-2.2.0/src/gga_x_pw91.c | 206 + libxc-2.2.0/src/gga_x_q2d.c | 101 + libxc-2.2.0/src/gga_x_rpbe.c | 104 + libxc-2.2.0/src/gga_x_sfat.c | 129 + libxc-2.2.0/src/gga_x_sogga11.c | 140 + libxc-2.2.0/src/gga_x_ssb_sw.c | 190 + libxc-2.2.0/src/gga_x_vmt.c | 201 + libxc-2.2.0/src/gga_x_wc.c | 94 + libxc-2.2.0/src/gga_x_wpbeh.c | 557 + libxc-2.2.0/src/gga_xc_1w.c | 115 + libxc-2.2.0/src/gga_xc_b97.c | 679 + libxc-2.2.0/src/gga_xc_edf1.c | 151 + libxc-2.2.0/src/gga_xc_oblyp_d.c | 98 + libxc-2.2.0/src/gga_xc_th.c | 512 + libxc-2.2.0/src/hyb_gga_xc_b1wc.c | 214 + libxc-2.2.0/src/hyb_gga_xc_b3lyp.c | 196 + libxc-2.2.0/src/hyb_gga_xc_b97.c | 209 + libxc-2.2.0/src/hyb_gga_xc_cam_b3lyp.c | 80 + libxc-2.2.0/src/hyb_gga_xc_camy_blyp.c | 58 + libxc-2.2.0/src/hyb_gga_xc_hse.c | 195 + libxc-2.2.0/src/hyb_gga_xc_o3lyp.c | 89 + libxc-2.2.0/src/hyb_gga_xc_pbeh.c | 82 + libxc-2.2.0/src/hyb_mgga_xc_m05.c | 437 + libxc-2.2.0/src/hyb_mgga_xc_tpssh.c | 88 + libxc-2.2.0/src/integrate.c | 1144 + libxc-2.2.0/src/lda.c | 236 + libxc-2.2.0/src/lda_c_1d_csc.c | 217 + libxc-2.2.0/src/lda_c_1d_loos.c | 96 + libxc-2.2.0/src/lda_c_2d_amgb.c | 208 + libxc-2.2.0/src/lda_c_2d_prm.c | 145 + libxc-2.2.0/src/lda_c_gombas.c | 76 + libxc-2.2.0/src/lda_c_hl.c | 178 + libxc-2.2.0/src/lda_c_ml1.c | 118 + libxc-2.2.0/src/lda_c_pw.c | 301 + libxc-2.2.0/src/lda_c_pz.c | 251 + libxc-2.2.0/src/lda_c_rc04.c | 129 + libxc-2.2.0/src/lda_c_rpa.c | 69 + libxc-2.2.0/src/lda_c_vwn.c | 466 + libxc-2.2.0/src/lda_c_wigner.c | 69 + libxc-2.2.0/src/lda_k_tf.c | 127 + libxc-2.2.0/src/lda_x.c | 410 + libxc-2.2.0/src/lda_x_1d.c | 169 + libxc-2.2.0/src/lda_x_2d.c | 91 + libxc-2.2.0/src/lda_xc_teter93.c | 173 + libxc-2.2.0/src/libxc.f90 | 535 + libxc-2.2.0/src/libxc_funcs.f90 | 325 + libxc-2.2.0/src/libxc_master.F90 | 538 + libxc-2.2.0/src/mgga.c | 212 + libxc-2.2.0/src/mgga_c_bc95.c | 142 + libxc-2.2.0/src/mgga_c_cc06.c | 111 + libxc-2.2.0/src/mgga_c_cs.c | 104 + libxc-2.2.0/src/mgga_c_m08.c | 287 + libxc-2.2.0/src/mgga_c_pkzb.c | 332 + libxc-2.2.0/src/mgga_c_vsxc.c | 350 + libxc-2.2.0/src/mgga_x_2d_prhg07.c | 168 + libxc-2.2.0/src/mgga_x_br89.c | 316 + libxc-2.2.0/src/mgga_x_gvt4.c | 84 + libxc-2.2.0/src/mgga_x_lta.c | 59 + libxc-2.2.0/src/mgga_x_m05.c | 154 + libxc-2.2.0/src/mgga_x_m06l.c | 185 + libxc-2.2.0/src/mgga_x_m08.c | 274 + libxc-2.2.0/src/mgga_x_mk00.c | 103 + libxc-2.2.0/src/mgga_x_mn12.c | 191 + libxc-2.2.0/src/mgga_x_ms.c | 226 + libxc-2.2.0/src/mgga_x_pkzb.c | 94 + libxc-2.2.0/src/mgga_x_tau_hcth.c | 103 + libxc-2.2.0/src/mgga_x_tpss.c | 362 + libxc-2.2.0/src/mgga_xc_otpss_d.c | 47 + libxc-2.2.0/src/mix_func.c | 157 + libxc-2.2.0/src/special_functions.c | 100 + libxc-2.2.0/src/stoll.c | 194 + libxc-2.2.0/src/string_f.h | 94 + libxc-2.2.0/src/util.c | 198 + libxc-2.2.0/src/util.h | 266 + libxc-2.2.0/src/version.c | 31 + libxc-2.2.0/src/work_gga_c.c | 363 + libxc-2.2.0/src/work_gga_x.c | 244 + libxc-2.2.0/src/work_lda.c | 141 + libxc-2.2.0/src/work_mgga_c.c | 205 + libxc-2.2.0/src/work_mgga_x.c | 186 + libxc-2.2.0/src/xc-info.c | 116 + libxc-2.2.0/src/xc.h | 255 + libxc-2.2.0/src/xc_config.h | 69 + libxc-2.2.0/src/xc_f.c | 421 + libxc-2.2.0/src/xc_s.h | 28 + libxc-2.2.0/src/xc_unconfig.h | 18 + libxc-2.2.0/test-driver | 127 + libxc-2.2.0/testsuite/Makefile.am | 45 + libxc-2.2.0/testsuite/Makefile.in | 1061 + libxc-2.2.0/testsuite/df_repo/gga_c_lyp.data | 601 + libxc-2.2.0/testsuite/df_repo/gga_c_p86.data | 601 + libxc-2.2.0/testsuite/df_repo/gga_c_pbe.data | 601 + libxc-2.2.0/testsuite/df_repo/gga_c_pw91.data | 600 + libxc-2.2.0/testsuite/df_repo/gga_x_b88.data | 601 + .../testsuite/df_repo/gga_x_ft97_b.data | 601 + libxc-2.2.0/testsuite/df_repo/gga_x_pbe.data | 600 + libxc-2.2.0/testsuite/df_repo/gga_x_pw91.data | 601 + libxc-2.2.0/testsuite/df_repo/gga_xc_b97.data | 597 + .../testsuite/df_repo/gga_xc_b97_1.data | 597 + .../testsuite/df_repo/gga_xc_b97_2.data | 597 + .../testsuite/df_repo/gga_xc_edf1.data | 600 + .../testsuite/df_repo/gga_xc_hcth_120.data | 600 + .../testsuite/df_repo/gga_xc_hcth_147.data | 600 + .../testsuite/df_repo/gga_xc_hcth_407.data | 600 + .../testsuite/df_repo/gga_xc_hcth_93.data | 600 + .../testsuite/df_repo/hyb_gga_xc_b3lyp.data | 600 + libxc-2.2.0/testsuite/df_repo/lda_c_pw.data | 601 + libxc-2.2.0/testsuite/df_repo/lda_c_pz.data | 600 + libxc-2.2.0/testsuite/df_repo/lda_c_vwn.data | 600 + .../testsuite/df_repo/lda_c_vwn_rpa.data | 600 + libxc-2.2.0/testsuite/df_repo/lda_x.data | 600 + libxc-2.2.0/testsuite/input/BrOH | 91 + libxc-2.2.0/testsuite/input/BrOH+ | 91 + libxc-2.2.0/testsuite/input/H | 31 + libxc-2.2.0/testsuite/input/Li | 31 + libxc-2.2.0/testsuite/input/README | 15 + .../testsuite/regression/lda_x.pol.bz2 | Bin 0 -> 4455 bytes .../testsuite/regression/lda_x.unpol.bz2 | Bin 0 -> 2393 bytes libxc-2.2.0/testsuite/xc-consistency.c | 454 + libxc-2.2.0/testsuite/xc-error.c | 241 + libxc-2.2.0/testsuite/xc-get_data.c | 282 + libxc-2.2.0/testsuite/xc-reference.pl | 185 + libxc-2.2.0/testsuite/xc-regression.c | 516 + libxc-2.2.0/testsuite/xc-run_testsuite | 55 + libxc-2.2.0/xc_version.h | 34 + libxc-2.2.0/xc_version.h.in | 34 + libxc/AUTHORS | 12 + libxc/COPYING | 165 + libxc/ChangeLog | 6485 +++++ libxc/INSTALL | 365 + libxc/Makefile.am | 40 + libxc/Makefile.in | 880 + libxc/NEWS | 8 + libxc/PACKAGING | 21 + libxc/README | 73 + libxc/TODO | 59 + libxc/aclocal.m4 | 1081 + libxc/build/Makefile.am | 29 + libxc/build/Makefile.in | 506 + libxc/build/libxc.pc.in | 11 + libxc/build/libxc.spec.in | 72 + libxc/compile | 347 + libxc/config.guess | 1535 ++ libxc/config.h.in | 141 + libxc/config.sub | 1790 ++ libxc/configure | 20133 ++++++++++++++++ libxc/configure.ac | 165 + libxc/depcomp | 791 + libxc/install-sh | 527 + libxc/ltmain.sh | 9655 ++++++++ libxc/m4/ac_prog_sed.m4 | 172 + libxc/m4/ax_f90_module_extension.m4 | 45 + libxc/m4/fc_integer.m4 | 90 + libxc/m4/fcflags.m4 | 100 + libxc/m4/fortran.m4 | 144 + libxc/m4/libtool.m4 | 7992 ++++++ libxc/m4/ltoptions.m4 | 384 + libxc/m4/ltsugar.m4 | 123 + libxc/m4/ltversion.m4 | 23 + libxc/m4/lt~obsolete.m4 | 98 + libxc/missing | 215 + libxc/src/Makefile.am | 175 + libxc/src/Makefile.in | 1266 + libxc/src/bessel.c | 263 + libxc/src/expint_e1.c | 124 + libxc/src/functionals.c | 195 + libxc/src/get_funcs.pl | 118 + libxc/src/gga.c | 247 + libxc/src/gga_c_am05.c | 125 + libxc/src/gga_c_ft97.c | 321 + libxc/src/gga_c_lm.c | 162 + libxc/src/gga_c_lyp.c | 233 + libxc/src/gga_c_op.c | 217 + libxc/src/gga_c_optc.c | 159 + libxc/src/gga_c_p86.c | 163 + libxc/src/gga_c_pbe.c | 497 + libxc/src/gga_c_pw91.c | 331 + libxc/src/gga_c_q2d.c | 191 + libxc/src/gga_c_sogga11.c | 207 + libxc/src/gga_c_tca.c | 177 + libxc/src/gga_c_wi.c | 129 + libxc/src/gga_c_wl.c | 95 + libxc/src/gga_k_dk.c | 228 + libxc/src/gga_k_meyer.c | 69 + libxc/src/gga_k_ol1.c | 61 + libxc/src/gga_k_ol2.c | 90 + libxc/src/gga_k_pearson.c | 64 + libxc/src/gga_k_tflw.c | 320 + libxc/src/gga_x_2d_b86.c | 68 + libxc/src/gga_x_2d_b86_mgc.c | 70 + libxc/src/gga_x_2d_b88.c | 100 + libxc/src/gga_x_2d_pbe.c | 82 + libxc/src/gga_x_airy.c | 162 + libxc/src/gga_x_ak13.c | 88 + libxc/src/gga_x_am05.c | 151 + libxc/src/gga_x_b86.c | 71 + libxc/src/gga_x_b86_mgc.c | 77 + libxc/src/gga_x_b88.c | 238 + libxc/src/gga_x_bayesian.c | 81 + libxc/src/gga_x_bpccac.c | 89 + libxc/src/gga_x_c09x.c | 73 + libxc/src/gga_x_dk87.c | 96 + libxc/src/gga_x_ft97.c | 114 + libxc/src/gga_x_g96.c | 61 + libxc/src/gga_x_herman.c | 61 + libxc/src/gga_x_hjs.c | 308 + libxc/src/gga_x_htbs.c | 147 + libxc/src/gga_x_ityh.c | 123 + libxc/src/gga_x_kt.c | 125 + libxc/src/gga_x_lb.c | 202 + libxc/src/gga_x_lg93.c | 88 + libxc/src/gga_x_lv_rpw86.c | 111 + libxc/src/gga_x_mpbe.c | 74 + libxc/src/gga_x_n12.c | 157 + libxc/src/gga_x_optx.c | 110 + libxc/src/gga_x_pbe.c | 514 + libxc/src/gga_x_pbea.c | 66 + libxc/src/gga_x_pw86.c | 123 + libxc/src/gga_x_pw91.c | 206 + libxc/src/gga_x_q2d.c | 101 + libxc/src/gga_x_rpbe.c | 104 + libxc/src/gga_x_sfat.c | 129 + libxc/src/gga_x_sogga11.c | 140 + libxc/src/gga_x_ssb_sw.c | 190 + libxc/src/gga_x_vmt.c | 201 + libxc/src/gga_x_wc.c | 94 + libxc/src/gga_x_wpbeh.c | 557 + libxc/src/gga_xc_1w.c | 115 + libxc/src/gga_xc_b97.c | 679 + libxc/src/gga_xc_edf1.c | 151 + libxc/src/gga_xc_oblyp_d.c | 98 + libxc/src/gga_xc_th.c | 512 + libxc/src/hyb_gga_xc_b1wc.c | 214 + libxc/src/hyb_gga_xc_b3lyp.c | 196 + libxc/src/hyb_gga_xc_b97.c | 209 + libxc/src/hyb_gga_xc_cam_b3lyp.c | 80 + libxc/src/hyb_gga_xc_camy_blyp.c | 58 + libxc/src/hyb_gga_xc_hse.c | 195 + libxc/src/hyb_gga_xc_o3lyp.c | 89 + libxc/src/hyb_gga_xc_pbeh.c | 82 + libxc/src/hyb_mgga_xc_m05.c | 437 + libxc/src/hyb_mgga_xc_tpssh.c | 88 + libxc/src/integrate.c | 1144 + libxc/src/lda.c | 236 + libxc/src/lda_c_1d_csc.c | 217 + libxc/src/lda_c_1d_loos.c | 96 + libxc/src/lda_c_2d_amgb.c | 208 + libxc/src/lda_c_2d_prm.c | 145 + libxc/src/lda_c_gombas.c | 76 + libxc/src/lda_c_hl.c | 178 + libxc/src/lda_c_ml1.c | 118 + libxc/src/lda_c_pw.c | 301 + libxc/src/lda_c_pz.c | 251 + libxc/src/lda_c_rc04.c | 129 + libxc/src/lda_c_rpa.c | 69 + libxc/src/lda_c_vwn.c | 466 + libxc/src/lda_c_wigner.c | 69 + libxc/src/lda_k_tf.c | 127 + libxc/src/lda_x.c | 410 + libxc/src/lda_x_1d.c | 169 + libxc/src/lda_x_2d.c | 91 + libxc/src/lda_xc_teter93.c | 173 + libxc/src/libxc.f90 | 535 + libxc/src/libxc_funcs.f90 | 325 + libxc/src/libxc_master.F90 | 538 + libxc/src/mgga.c | 212 + libxc/src/mgga_c_bc95.c | 142 + libxc/src/mgga_c_cc06.c | 111 + libxc/src/mgga_c_cs.c | 104 + libxc/src/mgga_c_m08.c | 287 + libxc/src/mgga_c_pkzb.c | 332 + libxc/src/mgga_c_vsxc.c | 350 + libxc/src/mgga_x_2d_prhg07.c | 168 + libxc/src/mgga_x_br89.c | 316 + libxc/src/mgga_x_gvt4.c | 84 + libxc/src/mgga_x_lta.c | 59 + libxc/src/mgga_x_m05.c | 154 + libxc/src/mgga_x_m06l.c | 185 + libxc/src/mgga_x_m08.c | 274 + libxc/src/mgga_x_mk00.c | 103 + libxc/src/mgga_x_mn12.c | 191 + libxc/src/mgga_x_ms.c | 226 + libxc/src/mgga_x_pkzb.c | 94 + libxc/src/mgga_x_tau_hcth.c | 103 + libxc/src/mgga_x_tpss.c | 362 + libxc/src/mgga_xc_otpss_d.c | 47 + libxc/src/mix_func.c | 157 + libxc/src/special_functions.c | 100 + libxc/src/stoll.c | 194 + libxc/src/string_f.h | 94 + libxc/src/util.c | 198 + libxc/src/util.h | 266 + libxc/src/version.c | 31 + libxc/src/work_gga_c.c | 363 + libxc/src/work_gga_x.c | 244 + libxc/src/work_lda.c | 141 + libxc/src/work_mgga_c.c | 205 + libxc/src/work_mgga_x.c | 186 + libxc/src/xc-info.c | 116 + libxc/src/xc.h | 255 + libxc/src/xc_config.h | 69 + libxc/src/xc_f.c | 421 + libxc/src/xc_s.h | 28 + libxc/src/xc_unconfig.h | 18 + libxc/test-driver | 127 + libxc/testsuite/Makefile.am | 45 + libxc/testsuite/Makefile.in | 1061 + libxc/testsuite/df_repo/gga_c_lyp.data | 601 + libxc/testsuite/df_repo/gga_c_p86.data | 601 + libxc/testsuite/df_repo/gga_c_pbe.data | 601 + libxc/testsuite/df_repo/gga_c_pw91.data | 600 + libxc/testsuite/df_repo/gga_x_b88.data | 601 + libxc/testsuite/df_repo/gga_x_ft97_b.data | 601 + libxc/testsuite/df_repo/gga_x_pbe.data | 600 + libxc/testsuite/df_repo/gga_x_pw91.data | 601 + libxc/testsuite/df_repo/gga_xc_b97.data | 597 + libxc/testsuite/df_repo/gga_xc_b97_1.data | 597 + libxc/testsuite/df_repo/gga_xc_b97_2.data | 597 + libxc/testsuite/df_repo/gga_xc_edf1.data | 600 + libxc/testsuite/df_repo/gga_xc_hcth_120.data | 600 + libxc/testsuite/df_repo/gga_xc_hcth_147.data | 600 + libxc/testsuite/df_repo/gga_xc_hcth_407.data | 600 + libxc/testsuite/df_repo/gga_xc_hcth_93.data | 600 + libxc/testsuite/df_repo/hyb_gga_xc_b3lyp.data | 600 + libxc/testsuite/df_repo/lda_c_pw.data | 601 + libxc/testsuite/df_repo/lda_c_pz.data | 600 + libxc/testsuite/df_repo/lda_c_vwn.data | 600 + libxc/testsuite/df_repo/lda_c_vwn_rpa.data | 600 + libxc/testsuite/df_repo/lda_x.data | 600 + libxc/testsuite/input/BrOH | 91 + libxc/testsuite/input/BrOH+ | 91 + libxc/testsuite/input/H | 31 + libxc/testsuite/input/Li | 31 + libxc/testsuite/input/README | 15 + libxc/testsuite/regression/lda_x.pol.bz2 | Bin 0 -> 4455 bytes libxc/testsuite/regression/lda_x.unpol.bz2 | Bin 0 -> 2393 bytes libxc/testsuite/xc-consistency.c | 454 + libxc/testsuite/xc-error.c | 241 + libxc/testsuite/xc-get_data.c | 282 + libxc/testsuite/xc-reference.pl | 185 + libxc/testsuite/xc-regression.c | 516 + libxc/testsuite/xc-run_testsuite | 55 + libxc/xc_version.h | 34 + libxc/xc_version.h.in | 34 + lua-5.2.4/Makefile | 116 + lua-5.2.4/README | 6 + lua-5.2.4/bin/README | 3 + lua-5.2.4/doc/contents.html | 608 + lua-5.2.4/doc/logo.gif | Bin 0 -> 4232 bytes lua-5.2.4/doc/lua.1 | 116 + lua-5.2.4/doc/lua.css | 106 + lua-5.2.4/doc/luac.1 | 118 + lua-5.2.4/doc/manual.css | 27 + lua-5.2.4/doc/manual.html | 10508 ++++++++ lua-5.2.4/doc/osi-certified-72x60.png | Bin 0 -> 3774 bytes lua-5.2.4/doc/readme.html | 417 + lua-5.2.4/lib/README | 3 + lua-5.2.4/src/Makefile | 187 + lua-5.2.4/src/lapi.c | 1284 + lua-5.2.4/src/lapi.h | 24 + lua-5.2.4/src/lauxlib.c | 959 + lua-5.2.4/src/lauxlib.h | 212 + lua-5.2.4/src/lbaselib.c | 458 + lua-5.2.4/src/lbitlib.c | 212 + lua-5.2.4/src/lcode.c | 881 + lua-5.2.4/src/lcode.h | 83 + lua-5.2.4/src/lcorolib.c | 155 + lua-5.2.4/src/lctype.c | 52 + lua-5.2.4/src/lctype.h | 95 + lua-5.2.4/src/ldblib.c | 408 + lua-5.2.4/src/ldebug.c | 610 + lua-5.2.4/src/ldebug.h | 34 + lua-5.2.4/src/ldo.c | 681 + lua-5.2.4/src/ldo.h | 46 + lua-5.2.4/src/ldump.c | 173 + lua-5.2.4/src/lfunc.c | 161 + lua-5.2.4/src/lfunc.h | 33 + lua-5.2.4/src/lgc.c | 1220 + lua-5.2.4/src/lgc.h | 157 + lua-5.2.4/src/linit.c | 67 + lua-5.2.4/src/liolib.c | 666 + lua-5.2.4/src/llex.c | 530 + lua-5.2.4/src/llex.h | 78 + lua-5.2.4/src/llimits.h | 309 + lua-5.2.4/src/lmathlib.c | 279 + lua-5.2.4/src/lmem.c | 99 + lua-5.2.4/src/lmem.h | 57 + lua-5.2.4/src/loadlib.c | 725 + lua-5.2.4/src/lobject.c | 287 + lua-5.2.4/src/lobject.h | 607 + lua-5.2.4/src/lopcodes.c | 107 + lua-5.2.4/src/lopcodes.h | 288 + lua-5.2.4/src/loslib.c | 323 + lua-5.2.4/src/lparser.c | 1638 ++ lua-5.2.4/src/lparser.h | 119 + lua-5.2.4/src/lstate.c | 323 + lua-5.2.4/src/lstate.h | 228 + lua-5.2.4/src/lstring.c | 185 + lua-5.2.4/src/lstring.h | 46 + lua-5.2.4/src/lstrlib.c | 1019 + lua-5.2.4/src/ltable.c | 588 + lua-5.2.4/src/ltable.h | 45 + lua-5.2.4/src/ltablib.c | 285 + lua-5.2.4/src/ltm.c | 77 + lua-5.2.4/src/ltm.h | 57 + lua-5.2.4/src/lua.c | 497 + lua-5.2.4/src/lua.h | 444 + lua-5.2.4/src/lua.hpp | 9 + lua-5.2.4/src/luac.c | 432 + lua-5.2.4/src/luaconf.h | 551 + lua-5.2.4/src/lualib.h | 55 + lua-5.2.4/src/lundump.c | 258 + lua-5.2.4/src/lundump.h | 28 + lua-5.2.4/src/lvm.c | 867 + lua-5.2.4/src/lvm.h | 44 + lua-5.2.4/src/lzio.c | 76 + lua-5.2.4/src/lzio.h | 65 + mjson/Makefile | 11 + mjson/json.c | 3608 +++ mjson/json.h | 304 + mjson/json_helper.c | 72 + mjson/json_helper.h | 27 + mjson/rstring.c | 684 + mjson/rstring.h | 262 + scripts/GridTest.lua | 10 + src/Accelerator/Accelerator.cpp | 36 + src/Accelerator/Accelerator.hpp | 14 + src/Accelerator/CULA_Common.h | 9 + src/Accelerator/DeviceArray3d.hpp | 121 + src/Accelerator/DeviceMatrix.hpp | 118 + src/Accelerator/DeviceStorage.cu | 210 + src/Accelerator/DeviceStorage.hpp | 61 + src/Accelerator/DeviceVector.hpp | 90 + src/Accelerator/Makefile | 58 + src/Accelerator/accelerator_finalize.F | 23 + src/Accelerator/accelerator_initialize.F | 64 + src/Accelerator/accelerator_interface.c | 3 + src/Accelerator/associatedLegendreTest.cu | 41 + src/Accelerator/buildKKRMatrix_gpu.cu | 417 + src/Accelerator/buildKKRMatrix_gpu.hpp | 48 + src/Accelerator/buildKKRMatrix_kernels.cu | 299 + src/Accelerator/cudaCheckError.hpp | 22 + src/Accelerator/cudaDoubleComplex.hpp | 93 + src/Accelerator/fortran.c | 1671 ++ src/Accelerator/fortran.h | 616 + src/Accelerator/fortran_common.h | 400 + src/Accelerator/fortran_thunking.c | 6488 +++++ src/Accelerator/fortran_thunking.h | 542 + src/Accelerator/inverse.cu | 11450 +++++++++ src/Accelerator/inverse.h | 154 + src/Accelerator/makebgij_device.hpp | 261 + src/Accelerator/no_gpu_buildKKRMatrix.cpp | 2 + .../no_gpu_kernel_buildKKRMatrix.cpp | 2 + src/Accelerator/operations.h | 193 + src/Accelerator/plglmax_device.hpp | 170 + src/Accelerator/zblock_lu_cuda_c.cu | 342 + src/Communication/LSMSCommunication.cpp | 470 + src/Communication/LSMSCommunication.hpp | 95 + src/Communication/Makefile | 14 + src/Communication/REWLCommunication.cpp | 9 + src/Communication/REWLCommunication.hpp | 70 + src/Communication/distributeAtoms.cpp | 44 + src/Communication/distributeAtoms.hpp | 9 + src/Core/CoreStates.hpp | 38 + src/Core/Makefile | 20 + src/Core/calculateCoreStates.cpp | 71 + src/Core/corslv_c.f | 206 + src/Core/corslv_c_htest.f | 225 + src/Core/deepst_c.f | 254 + src/Core/getcor_c.f | 252 + src/Core/invals_c.f | 132 + src/Core/inwhnk_c.f | 99 + src/Core/inws_c.f | 120 + src/Core/makefile.lsms_1.9 | 58 + src/Core/manifest | 9 + src/Core/outws_c.f | 227 + src/Core/richnk_c.f | 68 + src/Core/se.f | 280 + src/Core/semcst_c.f | 266 + src/Core/srcore.f | 159 + src/LuaInterface/LuaInterface.cpp | 11 + src/LuaInterface/LuaSupport.cpp | 172 + src/LuaInterface/LuaSupport.hpp | 26 + src/LuaInterface/Makefile | 15 + src/LuaInterface/RadialGrid_lua.cpp | 167 + src/LuaInterface/RadialPotential_lua.cpp | 140 + src/Madelung/Madelung.hpp | 32 + src/Madelung/Makefile | 21 + src/Madelung/bessj.f | 69 + src/Madelung/cal_madelung_matrix.f | 138 + src/Madelung/cal_madelung_matrix_j.f | 228 + src/Madelung/calculateMadelungMatrices.cpp | 39 + src/Madelung/getgijmad.f | 274 + src/Madelung/getkncut.f | 81 + src/Madelung/getrscut.f | 79 + src/Madelung/getstruc.f | 149 + src/Madelung/interf.f | 87 + src/Madelung/interfsmr.f | 105 + src/Madelung/lattice.f | 117 + src/Madelung/lmfacts.f | 39 + src/Madelung/madelung.h | 16 + src/Madelung/madewd.f | 172 + src/Madelung/madewdj.f | 399 + src/Madelung/madsum.f | 86 + src/Madelung/ord3v.f | 66 + src/Madelung/pqintg_c.f | 66 + src/Main/AlloyBankIO.cpp | 145 + src/Main/EnergyContourIntegration.hpp | 18 + src/Main/EvecGenerator.h | 224 + src/Main/ExhaustiveIsing.h | 384 + src/Main/Graph1d.hpp | 340 + src/Main/Graph1dMoments.hpp | 179 + src/Main/Graph1dMoments_new.hpp | 179 + src/Main/Graph1d_new.hpp | 307 + src/Main/Graph2d.hpp | 460 + src/Main/HDF5io.hpp | 143 + src/Main/Makefile | 46 + src/Main/PotentialIO.cpp | 267 + src/Main/PotentialIO.hpp | 13 + src/Main/ReplicaExchangeWL.cpp | 139 + src/Main/ReplicaExchangeWL.hpp | 48 + src/Main/SystemParameters.cpp | 111 + src/Main/SystemParameters.hpp | 191 + src/Main/WangLandau.h | 1603 ++ src/Main/WangLandau.hpp | 1335 + src/Main/WangLandau2d.h | 817 + src/Main/WangLandau_REWL.h | 1729 ++ src/Main/buildLIZandCommLists.cpp | 308 + src/Main/calculateChemPot.cpp | 131 + src/Main/calculateChemPot.hpp | 10 + src/Main/calculateDensities.cpp | 244 + src/Main/calculateDensities.hpp | 21 + src/Main/calculateEvec.cpp | 125 + src/Main/calculateEvec.hpp | 12 + src/Main/calculateTrPxTau.cpp | 11 + src/Main/checkConsistency.cpp | 23 + src/Main/checkConsistency.hpp | 10 + src/Main/energyContourIntegration.cpp | 455 + src/Main/global.hpp | 4 + src/Main/initializeAtom.cpp | 519 + src/Main/initializeAtom.hpp | 12 + src/Main/lsms.cpp | 559 + src/Main/lsmsClass.cpp | 1088 + src/Main/lsmsClass.hpp | 117 + src/Main/lsms_inter.cpp | 32 + src/Main/mixing.cpp | 556 + src/Main/mixing.hpp | 386 + src/Main/random_evec.h | 95 + src/Main/read_input.cpp | 577 + src/Main/rewl_lsms.cpp | 876 + src/Main/rotateToGlobal.cpp | 113 + src/Main/solveSingleScatterers.cpp | 104 + src/Main/wl_lsms.cpp | 1226 + src/Main/wl_lsms_new_noPotentialShift.cpp | 804 + src/Main/writeInfoEvec.cpp | 112 + src/Main/zblock_lu_cuda_driver.cpp | 148 + src/Makefile | 54 + src/Misc/Coeficients.hpp | 134 + src/Misc/Gaunt.hpp | 188 + src/Misc/Gaunt_gmp.hpp | 179 + src/Misc/Indices.hpp | 40 + src/Misc/Makefile | 32 + src/Misc/associatedLegendreFunction.cpp | 28 + src/Misc/associatedLegendreFunction.hpp | 89 + src/Misc/bulirschStoerIntegrator.cpp | 147 + src/Misc/bulirschStoerIntegrator.hpp | 243 + src/Misc/bulirsch_stoer.f | 120 + src/Misc/calculateGauntCoeficients.cpp | 54 + src/Misc/calculateGaussLegendrePoints.hpp | 80 + src/Misc/cgaunt_c.f | 109 + src/Misc/cgc.h | 6 + src/Misc/cinterp.f | 50 + src/Misc/clebsch.f | 101 + src/Misc/clock_time.c | 9 + src/Misc/cmtruni.f | 29 + src/Misc/cnewint.f | 90 + src/Misc/congauss_c.f | 124 + src/Misc/constraint.f | 130 + src/Misc/dfv.f | 71 + src/Misc/dfv_new.f | 71 + src/Misc/essl_workaround.f | 2077 ++ src/Misc/fit.f | 141 + src/Misc/fitpot.f | 88 + src/Misc/fnpi.f | 17 + src/Misc/fstop.f | 25 + src/Misc/gaunt.f | 119 + src/Misc/getclm.f | 64 + src/Misc/ifacts_c.f | 72 + src/Misc/initwave.f | 109 + src/Misc/integrateOneDim.cpp | 153 + src/Misc/interp.f | 29 + src/Misc/matr.f | 68 + src/Misc/matrot1.f | 103 + src/Misc/mbeqa.f | 16 + src/Misc/mod_midpoint.f | 38 + src/Misc/newder.f | 41 + src/Misc/newint.f | 83 + src/Misc/plglmax.f | 122 + src/Misc/quadrature.cpp | 14 + src/Misc/rationalFit.hpp | 313 + src/Misc/readLastLine.cpp | 60 + src/Misc/readLastLine.hpp | 9 + src/Misc/ricbes.f | 85 + src/Misc/rotmat.f | 65 + src/Misc/rsimp.f | 28 + src/Misc/rwave.f | 242 + src/Misc/rzextr.f | 48 + src/Misc/spin_trafo.f | 59 + src/Misc/stop_with_backtrace.cpp | 38 + src/Misc/trltog.f | 76 + src/Misc/u_sigma_u.f | 40 + src/Misc/v_plus_minus.f | 32 + src/Misc/wrtmtx.f | 40 + src/Misc/ylag.f | 72 + src/Misc/zeroout.f | 20 + src/Misc/zsphbes.f | 51 + src/Misc/zsphbesj.f | 51 + src/Misc/zsphbesjh.f | 45 + src/MultipleScattering/Makefile | 25 + src/MultipleScattering/Makefile.LSMS_1 | 79 + src/MultipleScattering/MultipleScattering.hpp | 42 + src/MultipleScattering/block_inverse.cpp | 106 + .../block_inverse_fortran.f | 148 + src/MultipleScattering/calculateTauMatrix.cpp | 574 + src/MultipleScattering/cmtrins.f | 46 + src/MultipleScattering/find_sym.f | 165 + src/MultipleScattering/gafill.f | 88 + src/MultipleScattering/gen_test_mat.f | 17 + src/MultipleScattering/gettaucl_c.f | 536 + src/MultipleScattering/gettaucl_c_bu.f | 566 + src/MultipleScattering/gf_local.f | 170 + src/MultipleScattering/gfill.f | 223 + src/MultipleScattering/gfill.h | 25 + src/MultipleScattering/green_function.f | 197 + src/MultipleScattering/green_function_rel.f | 309 + src/MultipleScattering/int_zz_zj.f | 273 + src/MultipleScattering/inv_scale_tau00.f | 36 + src/MultipleScattering/lmsmtrx.f | 44 + src/MultipleScattering/magnet.f | 151 + src/MultipleScattering/magnetic_dens.f | 138 + src/MultipleScattering/makegij_c.f | 290 + src/MultipleScattering/manifest | 11 + src/MultipleScattering/mdosms_c.f | 58 + src/MultipleScattering/mgreen_c.f | 68 + src/MultipleScattering/new_dens.f | 101 + src/MultipleScattering/relmtrx.f | 42 + src/MultipleScattering/scale_tau00.f | 36 + src/MultipleScattering/setgij.f | 58 + src/MultipleScattering/tau_inv_postproc.f | 130 + src/MultipleScattering/trgtol.f | 110 + src/MultipleScattering/wasinv.f | 228 + src/MultipleScattering/wasinv_p.f | 182 + src/MultipleScattering/write_kkrmat.f | 20 + src/MultipleScattering/zaxpby.f | 170 + src/MultipleScattering/zblock_lu.F | 32 + src/MultipleScattering/zblock_lu_CPU.f | 82 + src/MultipleScattering/zblock_lu_CULA.F | 191 + src/MultipleScattering/zblock_lu_LIBSCI.f | 109 + src/MultipleScattering/zblock_lu_cpp.cpp | 175 + src/MultipleScattering/zblock_lu_cray.f | 116 + src/MultipleScattering/zblock_lu_cublas.cpp | 132 + src/MultipleScattering/zblock_lu_cuda_c.f | 22 + src/MultipleScattering/zmar1.f | 161 + src/MultipleScattering/zrandn.f | 82 + src/MultipleScattering/zucpx.f | 436 + src/MultipleScattering/zuqmx.f | 507 + src/MultipleScattering/zutfx.f | 381 + src/Potential/Makefile | 19 + src/Potential/PotentialShifter.hpp | 43 + src/Potential/alpha2_c.f | 231 + src/Potential/calculateChargesPotential.cpp | 882 + src/Potential/calculateChargesPotential.hpp | 55 + src/Potential/epcorr.f | 145 + src/Potential/getXCName.cpp | 35 + src/Potential/getXCName.hpp | 9 + src/Potential/getqm_mt.f | 65 + src/Potential/getvmt.cpp | 75 + src/Potential/getvmt.hpp | 8 + src/Potential/interpolatePotential.cpp | 72 + src/Potential/interpolatePotential.hpp | 14 + src/Potential/libxcInterface.cpp | 128 + src/Potential/libxcInterface.hpp | 34 + src/Potential/newexchg.f | 68 + src/Potential/newpot_c.f | 100 + src/Potential/rs.f | 52 + src/RadialGrid/Atom.hpp | 71 + src/RadialGrid/Makefile | 11 + src/RadialGrid/RadialGrid.cpp | 19 + src/RadialGrid/RadialGrid.hpp | 17 + src/RadialGrid/RadialPotential.hpp | 17 + src/RadialGrid/single_pot_read.f | 249 + src/SingleSite/AtomData.hpp | 403 + .../F_readSingleAtomData_bigcell.f90 | 95 + .../F_writeSingleAtomData_bigcell.f90 | 91 + src/SingleSite/Makefile | 24 + src/SingleSite/SingleSiteScattering.cpp | 130 + src/SingleSite/SingleSiteScattering.hpp | 132 + src/SingleSite/brmat.f | 81 + .../checkAntiFerromagneticStatus.cpp | 30 + .../checkAntiFerromagneticStatus.hpp | 12 + src/SingleSite/csbf.f | 47 + src/SingleSite/dirmag1-op.f | 387 + src/SingleSite/dirmag2-op.f | 573 + src/SingleSite/gjinv.f | 58 + src/SingleSite/manifest | 11 + src/SingleSite/matops.f | 324 + src/SingleSite/readSingleAtomData.hpp | 43 + src/SingleSite/readSingleAtomData_bigcell.cpp | 21 + src/SingleSite/readSingleAtomData_hdf5.cpp | 86 + src/SingleSite/replms.f | 40 + src/SingleSite/scalar_m.f | 572 + src/SingleSite/semrel_c.f | 228 + src/SingleSite/semrel_c_mesh_test.f | 225 + src/SingleSite/single_scatterer_nonrel.f | 122 + src/SingleSite/single_scatterer_rel.f | 171 + src/SingleSite/single_site_tmat.f | 195 + src/SingleSite/spzwafu.f | 324 + src/SingleSite/writeSingleAtomData.hpp | 22 + .../writeSingleAtomData_bigcell.cpp | 23 + src/SingleSite/writeSingleAtomData_hdf5.cpp | 64 + src/Test/Makefile | 13 + src/Test/WriteTMats.cpp | 150 + src/Test/buildKKRMatrixTest/LIZ_pos.h | 344 + src/Test/buildKKRMatrixTest/Makefile | 72 + src/Test/buildKKRMatrixTest/Real.hpp | 56 + .../buildKKRMatrixTest/TestStructures.hpp | 90 + src/Test/buildKKRMatrixTest/TypeTraits.hpp | 7 + .../associatedLegendreFunction.cpp | 29 + .../associatedLegendreFunction.hpp | 90 + .../buildKKRMatrixTest/buildKKRMatrixTest.cpp | 164 + .../buildKKRMatrix_nrel_ns2.cpp | 379 + .../buildKKRMatrix_original.cpp | 273 + .../calculateGaussLegendrePoints.hpp | 80 + src/Test/buildKKRMatrixTest/makegij_c.f | 293 + src/Test/buildKKRMatrixTest/makegij_new.cpp | 299 + src/Test/buildKKRMatrixTest/plglmax_new.cpp | 131 + src/Test/buildKKRMatrixTest/plglmax_test.cpp | 35 + src/Test/buildKKRMatrixTest/quadrature.cpp | 14 + src/Test/buildKKRMatrixTest/setgij.f | 58 + .../buildKKRMatrixTest_cuda/DeviceArray3d.hpp | 121 + .../buildKKRMatrixTest_cuda/DeviceMatrix.hpp | 118 + .../buildKKRMatrixTest_cuda/DeviceVector.hpp | 90 + src/Test/buildKKRMatrixTest_cuda/LIZ_pos.h | 344 + src/Test/buildKKRMatrixTest_cuda/Makefile | 64 + src/Test/buildKKRMatrixTest_cuda/Real.hpp | 54 + .../TestStructures.hpp | 90 + .../buildKKRMatrixTest_cuda/TypeTraits.hpp | 7 + .../associatedLegendreFunction.cpp | 28 + .../associatedLegendreFunction.hpp | 90 + .../buildKKRMatrixTest | Bin 0 -> 78536 bytes .../buildKKRMatrixTest.cpp | 184 + .../buildKKRMatrix_gpu.cu | 397 + .../buildKKRMatrix_gpu.hpp | 48 + .../buildKKRMatrix_kernels.cu | 299 + .../buildKKRMatrix_nrel_ns2.cpp | 375 + .../buildKKRMatrix_original.cpp | 273 + .../calculateGaussLegendrePoints.hpp | 80 + .../cudaCheckError.hpp | 22 + src/Test/buildKKRMatrixTest_cuda/makegij_c.f | 291 + .../buildKKRMatrixTest_cuda/makegij_new.cpp | 297 + .../buildKKRMatrixTest_cuda/plglmax_new.cpp | 131 + .../buildKKRMatrixTest_cuda/plglmax_test.cpp | 35 + .../buildKKRMatrixTest_cuda/quadrature.cpp | 14 + src/Test/buildKKRMatrixTest_cuda/setgij.f | 58 + src/Test/buildKKRMatrixTest_kokkos/LIZ_pos.h | 344 + src/Test/buildKKRMatrixTest_kokkos/Makefile | 84 + src/Test/buildKKRMatrixTest_kokkos/Real.hpp | 54 + .../TestStructures.hpp | 90 + .../buildKKRMatrixTest_kokkos/TypeTraits.hpp | 7 + .../associatedLegendreFunction.cpp | 29 + .../associatedLegendreFunction.hpp | 90 + .../buildKKRMatrixTest.cpp | 188 + .../buildKKRMatrix_kokkos.cpp | 343 + .../buildKKRMatrix_nrel_ns2.cpp | 319 + .../buildKKRMatrix_nrel_ns2.cpp_original | 319 + .../buildKKRMatrix_original.cpp | 273 + .../calculateGaussLegendrePoints.hpp | 80 + .../buildKKRMatrixTest_kokkos/makegij_c.f | 293 + .../buildKKRMatrixTest_kokkos/makegij_new.cpp | 242 + .../makegij_new.cpp_original | 300 + .../buildKKRMatrixTest_kokkos/plglmax_new.cpp | 131 + .../plglmax_test.cpp | 35 + .../buildKKRMatrixTest_kokkos/quadrature.cpp | 14 + src/Test/buildKKRMatrixTest_kokkos/setgij.f | 58 + src/Test/buildKKRMatrixTest_openacc/LIZ_pos.h | 344 + src/Test/buildKKRMatrixTest_openacc/Makefile | 85 + src/Test/buildKKRMatrixTest_openacc/Real.hpp | 54 + .../TestStructures.hpp | 90 + .../buildKKRMatrixTest_openacc/TypeTraits.hpp | 7 + .../arch-minsky-pgi | 30 + .../associatedLegendreFunction.cpp | 28 + .../associatedLegendreFunction.hpp | 90 + .../buildKKRMatrixTest.cpp | 172 + .../buildKKRMatrix_nrel_ns2.cpp | 425 + .../buildKKRMatrix_original.cpp | 273 + .../buildKKRMatrixTest_openacc/c_kkrmat.c | 312 + .../calculateGaussLegendrePoints.hpp | 80 + .../kkrmat_acc-mix.cpp | 38 + .../buildKKRMatrixTest_openacc/makegij_c.f | 291 + .../makegij_new.cpp | 297 + .../plglmax_new.cpp | 131 + .../buildKKRMatrixTest_openacc/quadrature.cpp | 14 + src/Test/buildKKRMatrixTest_openacc/setgij.f | 58 + src/Test/testPotentialShift.cpp | 224 + src/TotalEnergy/Makefile | 19 + src/TotalEnergy/calculateTotalEnergy.cpp | 181 + src/TotalEnergy/calculateTotalEnergy.hpp | 19 + src/TotalEnergy/janake_c.f | 384 + src/TotalEnergy/localTotalEnergy.cpp | 199 + src/TotalEnergy/zeropt_c.f | 62 + src/VORPOL/Makefile | 22 + src/VORPOL/VORPOL.hpp | 48 + src/VORPOL/calsig.f | 195 + src/VORPOL/caltnode.f | 137 + src/VORPOL/celbnd.f | 42 + src/VORPOL/chkbnd.f | 83 + src/VORPOL/chkedge.f | 126 + src/VORPOL/filter_edge.f | 68 + src/VORPOL/inter.f | 84 + src/VORPOL/inter_dip.f | 62 + src/VORPOL/interstitial.f | 160 + src/VORPOL/intphi.f | 157 + src/VORPOL/intpl0.f | 55 + src/VORPOL/invm3.f | 46 + src/VORPOL/polyhedron.f | 159 + src/VORPOL/rcritpts.f | 76 + src/VORPOL/setupVorpol.cpp | 105 + src/VORPOL/setup_boundary.f | 304 + src/VORPOL/setup_vorpol.f | 181 + src/VORPOL/sigma.f | 30 + src/VORPOL/sort.f | 56 + src/VORPOL/sortidx.f | 66 + src/VORPOL/stepyll.f | 181 + src/VORPOL/volvor.f | 179 + 1354 files changed, 449269 insertions(+) create mode 100644 .gitignore create mode 100644 BUILDING_with_libxc create mode 100644 CBLAS/Makefile create mode 100644 CBLAS/Makefile.ALPHA create mode 100644 CBLAS/Makefile.HPPA create mode 100644 CBLAS/Makefile.LINUX create mode 100644 CBLAS/Makefile.SGI64 create mode 100644 CBLAS/Makefile.SUN4 create mode 100644 CBLAS/Makefile.SUN4SOL2 create mode 100644 CBLAS/Makefile.in create mode 100644 CBLAS/README create mode 100644 CBLAS/examples/Makefile create mode 100644 CBLAS/examples/cblas_example1.c create mode 100644 CBLAS/examples/cblas_example2.c create mode 100644 CBLAS/include/cblas.h create mode 100644 CBLAS/include/cblas_f77.h create mode 100644 CBLAS/lib/.gitkeep create mode 100644 CBLAS/lib/README create mode 100644 CBLAS/src/Makefile create mode 100644 CBLAS/src/cblas_caxpy.c create mode 100644 CBLAS/src/cblas_ccopy.c create mode 100644 CBLAS/src/cblas_cdotc_sub.c create mode 100644 CBLAS/src/cblas_cdotu_sub.c create mode 100644 CBLAS/src/cblas_cgbmv.c create mode 100644 CBLAS/src/cblas_cgemm.c create mode 100644 CBLAS/src/cblas_cgemv.c create mode 100644 CBLAS/src/cblas_cgerc.c create mode 100644 CBLAS/src/cblas_cgeru.c create mode 100644 CBLAS/src/cblas_chbmv.c create mode 100644 CBLAS/src/cblas_chemm.c create mode 100644 CBLAS/src/cblas_chemv.c create mode 100644 CBLAS/src/cblas_cher.c create mode 100644 CBLAS/src/cblas_cher2.c create mode 100644 CBLAS/src/cblas_cher2k.c create mode 100644 CBLAS/src/cblas_cherk.c create mode 100644 CBLAS/src/cblas_chpmv.c create mode 100644 CBLAS/src/cblas_chpr.c create mode 100644 CBLAS/src/cblas_chpr2.c create mode 100644 CBLAS/src/cblas_cscal.c create mode 100644 CBLAS/src/cblas_csscal.c create mode 100644 CBLAS/src/cblas_cswap.c create mode 100644 CBLAS/src/cblas_csymm.c create mode 100644 CBLAS/src/cblas_csyr2k.c create mode 100644 CBLAS/src/cblas_csyrk.c create mode 100644 CBLAS/src/cblas_ctbmv.c create mode 100644 CBLAS/src/cblas_ctbsv.c create mode 100644 CBLAS/src/cblas_ctpmv.c create mode 100644 CBLAS/src/cblas_ctpsv.c create mode 100644 CBLAS/src/cblas_ctrmm.c create mode 100644 CBLAS/src/cblas_ctrmv.c create mode 100644 CBLAS/src/cblas_ctrsm.c create mode 100644 CBLAS/src/cblas_ctrsv.c create mode 100644 CBLAS/src/cblas_dasum.c create mode 100644 CBLAS/src/cblas_daxpy.c create mode 100644 CBLAS/src/cblas_dcopy.c create mode 100644 CBLAS/src/cblas_ddot.c create mode 100644 CBLAS/src/cblas_dgbmv.c create mode 100644 CBLAS/src/cblas_dgemm.c create mode 100644 CBLAS/src/cblas_dgemv.c create mode 100644 CBLAS/src/cblas_dger.c create mode 100644 CBLAS/src/cblas_dnrm2.c create mode 100644 CBLAS/src/cblas_drot.c create mode 100644 CBLAS/src/cblas_drotg.c create mode 100644 CBLAS/src/cblas_drotm.c create mode 100644 CBLAS/src/cblas_drotmg.c create mode 100644 CBLAS/src/cblas_dsbmv.c create mode 100644 CBLAS/src/cblas_dscal.c create mode 100644 CBLAS/src/cblas_dsdot.c create mode 100644 CBLAS/src/cblas_dspmv.c create mode 100644 CBLAS/src/cblas_dspr.c create mode 100644 CBLAS/src/cblas_dspr2.c create mode 100644 CBLAS/src/cblas_dswap.c create mode 100644 CBLAS/src/cblas_dsymm.c create mode 100644 CBLAS/src/cblas_dsymv.c create mode 100644 CBLAS/src/cblas_dsyr.c create mode 100644 CBLAS/src/cblas_dsyr2.c create mode 100644 CBLAS/src/cblas_dsyr2k.c create mode 100644 CBLAS/src/cblas_dsyrk.c create mode 100644 CBLAS/src/cblas_dtbmv.c create mode 100644 CBLAS/src/cblas_dtbsv.c create mode 100644 CBLAS/src/cblas_dtpmv.c create mode 100644 CBLAS/src/cblas_dtpsv.c create mode 100644 CBLAS/src/cblas_dtrmm.c create mode 100644 CBLAS/src/cblas_dtrmv.c create mode 100644 CBLAS/src/cblas_dtrsm.c create mode 100644 CBLAS/src/cblas_dtrsv.c create mode 100644 CBLAS/src/cblas_dzasum.c create mode 100644 CBLAS/src/cblas_dznrm2.c create mode 100644 CBLAS/src/cblas_globals.c create mode 100644 CBLAS/src/cblas_icamax.c create mode 100644 CBLAS/src/cblas_idamax.c create mode 100644 CBLAS/src/cblas_isamax.c create mode 100644 CBLAS/src/cblas_izamax.c create mode 100644 CBLAS/src/cblas_sasum.c create mode 100644 CBLAS/src/cblas_saxpy.c create mode 100644 CBLAS/src/cblas_scasum.c create mode 100644 CBLAS/src/cblas_scnrm2.c create mode 100644 CBLAS/src/cblas_scopy.c create mode 100644 CBLAS/src/cblas_sdot.c create mode 100644 CBLAS/src/cblas_sdsdot.c create mode 100644 CBLAS/src/cblas_sgbmv.c create mode 100644 CBLAS/src/cblas_sgemm.c create mode 100644 CBLAS/src/cblas_sgemv.c create mode 100644 CBLAS/src/cblas_sger.c create mode 100644 CBLAS/src/cblas_snrm2.c create mode 100644 CBLAS/src/cblas_srot.c create mode 100644 CBLAS/src/cblas_srotg.c create mode 100644 CBLAS/src/cblas_srotm.c create mode 100644 CBLAS/src/cblas_srotmg.c create mode 100644 CBLAS/src/cblas_ssbmv.c create mode 100644 CBLAS/src/cblas_sscal.c create mode 100644 CBLAS/src/cblas_sspmv.c create mode 100644 CBLAS/src/cblas_sspr.c create mode 100644 CBLAS/src/cblas_sspr2.c create mode 100644 CBLAS/src/cblas_sswap.c create mode 100644 CBLAS/src/cblas_ssymm.c create mode 100644 CBLAS/src/cblas_ssymv.c create mode 100644 CBLAS/src/cblas_ssyr.c create mode 100644 CBLAS/src/cblas_ssyr2.c create mode 100644 CBLAS/src/cblas_ssyr2k.c create mode 100644 CBLAS/src/cblas_ssyrk.c create mode 100644 CBLAS/src/cblas_stbmv.c create mode 100644 CBLAS/src/cblas_stbsv.c create mode 100644 CBLAS/src/cblas_stpmv.c create mode 100644 CBLAS/src/cblas_stpsv.c create mode 100644 CBLAS/src/cblas_strmm.c create mode 100644 CBLAS/src/cblas_strmv.c create mode 100644 CBLAS/src/cblas_strsm.c create mode 100644 CBLAS/src/cblas_strsv.c create mode 100644 CBLAS/src/cblas_xerbla.c create mode 100644 CBLAS/src/cblas_zaxpy.c create mode 100644 CBLAS/src/cblas_zcopy.c create mode 100644 CBLAS/src/cblas_zdotc_sub.c create mode 100644 CBLAS/src/cblas_zdotu_sub.c create mode 100644 CBLAS/src/cblas_zdscal.c create mode 100644 CBLAS/src/cblas_zgbmv.c create mode 100644 CBLAS/src/cblas_zgemm.c create mode 100644 CBLAS/src/cblas_zgemv.c create mode 100644 CBLAS/src/cblas_zgerc.c create mode 100644 CBLAS/src/cblas_zgeru.c create mode 100644 CBLAS/src/cblas_zhbmv.c create mode 100644 CBLAS/src/cblas_zhemm.c create mode 100644 CBLAS/src/cblas_zhemv.c create mode 100644 CBLAS/src/cblas_zher.c create mode 100644 CBLAS/src/cblas_zher2.c create mode 100644 CBLAS/src/cblas_zher2k.c create mode 100644 CBLAS/src/cblas_zherk.c create mode 100644 CBLAS/src/cblas_zhpmv.c create mode 100644 CBLAS/src/cblas_zhpr.c create mode 100644 CBLAS/src/cblas_zhpr2.c create mode 100644 CBLAS/src/cblas_zscal.c create mode 100644 CBLAS/src/cblas_zswap.c create mode 100644 CBLAS/src/cblas_zsymm.c create mode 100644 CBLAS/src/cblas_zsyr2k.c create mode 100644 CBLAS/src/cblas_zsyrk.c create mode 100644 CBLAS/src/cblas_ztbmv.c create mode 100644 CBLAS/src/cblas_ztbsv.c create mode 100644 CBLAS/src/cblas_ztpmv.c create mode 100644 CBLAS/src/cblas_ztpsv.c create mode 100644 CBLAS/src/cblas_ztrmm.c create mode 100644 CBLAS/src/cblas_ztrmv.c create mode 100644 CBLAS/src/cblas_ztrsm.c create mode 100644 CBLAS/src/cblas_ztrsv.c create mode 100644 CBLAS/src/cdotcsub.f create mode 100644 CBLAS/src/cdotusub.f create mode 100644 CBLAS/src/dasumsub.f create mode 100644 CBLAS/src/ddotsub.f create mode 100644 CBLAS/src/dnrm2sub.f create mode 100644 CBLAS/src/dsdotsub.f create mode 100644 CBLAS/src/dzasumsub.f create mode 100644 CBLAS/src/dznrm2sub.f create mode 100644 CBLAS/src/icamaxsub.f create mode 100644 CBLAS/src/idamaxsub.f create mode 100644 CBLAS/src/isamaxsub.f create mode 100644 CBLAS/src/izamaxsub.f create mode 100644 CBLAS/src/sasumsub.f create mode 100644 CBLAS/src/scasumsub.f create mode 100644 CBLAS/src/scnrm2sub.f create mode 100644 CBLAS/src/sdotsub.f create mode 100644 CBLAS/src/sdsdotsub.f create mode 100644 CBLAS/src/snrm2sub.f create mode 100644 CBLAS/src/xerbla.c create mode 100644 CBLAS/src/zdotcsub.f create mode 100644 CBLAS/src/zdotusub.f create mode 100644 CBLAS/testing/Makefile create mode 100644 CBLAS/testing/auxiliary.c create mode 100644 CBLAS/testing/c_c2chke.c create mode 100644 CBLAS/testing/c_c3chke.c create mode 100644 CBLAS/testing/c_cblas1.c create mode 100644 CBLAS/testing/c_cblas2.c create mode 100644 CBLAS/testing/c_cblas3.c create mode 100644 CBLAS/testing/c_cblat1.f create mode 100644 CBLAS/testing/c_cblat2.f create mode 100644 CBLAS/testing/c_cblat3.f create mode 100644 CBLAS/testing/c_d2chke.c create mode 100644 CBLAS/testing/c_d3chke.c create mode 100644 CBLAS/testing/c_dblas1.c create mode 100644 CBLAS/testing/c_dblas2.c create mode 100644 CBLAS/testing/c_dblas3.c create mode 100644 CBLAS/testing/c_dblat1.f create mode 100644 CBLAS/testing/c_dblat2.f create mode 100644 CBLAS/testing/c_dblat3.f create mode 100644 CBLAS/testing/c_s2chke.c create mode 100644 CBLAS/testing/c_s3chke.c create mode 100644 CBLAS/testing/c_sblas1.c create mode 100644 CBLAS/testing/c_sblas2.c create mode 100644 CBLAS/testing/c_sblas3.c create mode 100644 CBLAS/testing/c_sblat1.f create mode 100644 CBLAS/testing/c_sblat2.f create mode 100644 CBLAS/testing/c_sblat3.f create mode 100644 CBLAS/testing/c_xerbla.c create mode 100644 CBLAS/testing/c_z2chke.c create mode 100644 CBLAS/testing/c_z3chke.c create mode 100644 CBLAS/testing/c_zblas1.c create mode 100644 CBLAS/testing/c_zblas2.c create mode 100644 CBLAS/testing/c_zblas3.c create mode 100644 CBLAS/testing/c_zblat1.f create mode 100644 CBLAS/testing/c_zblat2.f create mode 100644 CBLAS/testing/c_zblat3.f create mode 100644 CBLAS/testing/cblas_test.h create mode 100644 CBLAS/testing/cin2 create mode 100644 CBLAS/testing/cin3 create mode 100644 CBLAS/testing/din2 create mode 100644 CBLAS/testing/din3 create mode 100644 CBLAS/testing/sin2 create mode 100644 CBLAS/testing/sin3 create mode 100644 CBLAS/testing/zin2 create mode 100644 CBLAS/testing/zin3 create mode 100644 Makefile create mode 100644 Test/Co/Co_v create mode 100644 Test/Co/i_lsms create mode 100644 Test/Co/v_co.0 create mode 100644 Test/Cu/Cu_v create mode 100644 Test/Cu/i_lsms create mode 100644 Test/Cu/v_cu.0 create mode 100644 Test/Fe1024/i_lsms create mode 100755 Test/Fe1024/v_fe2.0 create mode 100755 Test/Fe1024/v_fe2.1 create mode 100644 Test/Fe16/WLrestart.jsn create mode 100644 Test/Fe16/i_lsms create mode 100755 Test/Fe16/v_fe2.0 create mode 100755 Test/Fe16/v_fe2.1 create mode 100644 Test/Fe16_non_collinear/i_lsms create mode 100755 Test/Fe16_non_collinear/v_fe16.0 create mode 100755 Test/Fe16_non_collinear/v_fe16.1 create mode 100755 Test/Fe16_non_collinear/v_fe16.10 create mode 100755 Test/Fe16_non_collinear/v_fe16.11 create mode 100755 Test/Fe16_non_collinear/v_fe16.12 create mode 100755 Test/Fe16_non_collinear/v_fe16.13 create mode 100755 Test/Fe16_non_collinear/v_fe16.14 create mode 100755 Test/Fe16_non_collinear/v_fe16.15 create mode 100755 Test/Fe16_non_collinear/v_fe16.2 create mode 100755 Test/Fe16_non_collinear/v_fe16.3 create mode 100755 Test/Fe16_non_collinear/v_fe16.4 create mode 100755 Test/Fe16_non_collinear/v_fe16.5 create mode 100755 Test/Fe16_non_collinear/v_fe16.6 create mode 100755 Test/Fe16_non_collinear/v_fe16.7 create mode 100755 Test/Fe16_non_collinear/v_fe16.8 create mode 100755 Test/Fe16_non_collinear/v_fe16.9 create mode 100644 Test/Fe2/i_lsms create mode 100755 Test/Fe2/v_fe2.0 create mode 100755 Test/Fe2/v_fe2.1 create mode 100644 Test/Fe2_rewl-lsms_potentialShift/WL_start.jsn create mode 100644 Test/Fe2_rewl-lsms_potentialShift/WL_start2.jsn create mode 100644 Test/Fe2_rewl-lsms_potentialShift/i_lsms create mode 100644 Test/Fe2_rewl-lsms_potentialShift/run create mode 100644 Test/Fe2_rewl-lsms_potentialShift/runRestart create mode 100644 Test/Fe2_rewl-lsms_potentialShift/v_fe2 create mode 100644 Test/Fe2_rewl-lsms_potentialShift/v_fe2.0 create mode 100644 Test/Fe2_rewl-lsms_potentialShift/v_fe2.1 create mode 100644 Test/Fe2_wl-lsms/i_lsms create mode 100755 Test/Fe2_wl-lsms/run create mode 100644 Test/Fe2_wl-lsms/v_fe2 create mode 100755 Test/Fe2_wl-lsms/v_fe2.0 create mode 100755 Test/Fe2_wl-lsms/v_fe2.1 create mode 100644 Test/Ni4/Ni_v create mode 100755 Test/Ni4/copyWtoV.sh create mode 100644 Test/Ni4/i_lsms create mode 100644 Test/Ni4/i_lsms_nc create mode 100644 Test/Ni4/q_lsms create mode 100644 Test/Ni4/v_ni4.0 create mode 100644 Test/Ni4/v_ni4.1 create mode 100644 Test/Ni4/v_ni4.2 create mode 100644 Test/Ni4/v_ni4.3 create mode 100644 Test/Summit-Acceptance/Fe/i_lsms create mode 100644 Test/Summit-Acceptance/Fe/i_lsms_template create mode 100644 Test/Summit-Acceptance/Fe/q_lsms create mode 100644 Test/Summit-Acceptance/Fe/q_lsms_titan create mode 100755 Test/Summit-Acceptance/Fe/run-lsms-summitdev.sh create mode 100755 Test/Summit-Acceptance/Fe/run-lsms-summitdev_128.sh create mode 100755 Test/Summit-Acceptance/Fe/set_device_and_bind.sh create mode 100755 Test/Summit-Acceptance/Fe/v_fe2.0 create mode 100644 Test/Summit-Acceptance/FePt/i_lsms create mode 100644 Test/Summit-Acceptance/FePt/i_lsms_restart create mode 100644 Test/Summit-Acceptance/FePt/i_lsms_start create mode 100644 Test/Summit-Acceptance/FePt/k.out_reference create mode 100644 Test/Summit-Acceptance/FePt/q_lsms create mode 100644 Test/Summit-Acceptance/FePt/q_lsms_restart create mode 100755 Test/Summit-Acceptance/FePt/run-lsms-summitdev.sh create mode 100755 Test/Summit-Acceptance/FePt/set_device_and_bind.sh create mode 100755 Test/Summit-Acceptance/FePt/v_fept.0 create mode 100755 Test/Summit-Acceptance/FePt/v_fept.1 create mode 100644 Test/Summit-Acceptance/README create mode 100644 Test/Summit-Acceptance/WL-Fe/i_lsms create mode 100644 Test/Summit-Acceptance/WL-Fe/i_lsms_template create mode 100644 Test/Summit-Acceptance/WL-Fe/q_lsms create mode 100755 Test/Summit-Acceptance/WL-Fe/v_fe2.0 create mode 100644 Tools/Makefile create mode 100644 Tools/kkrmat_compare/kkrmat_compare.f create mode 100644 Tools/wltool/Makefile create mode 100644 Tools/wltool/wltool.cpp create mode 100644 Tools/xyz2i/README create mode 100644 Tools/xyz2i/xyz2i.py create mode 100755 architecture/nccs_yona create mode 100755 architecture/nccs_yona_nogpu create mode 100755 architecture/nccs_yona_vampir create mode 100644 architecture/osx-gfortran create mode 100644 architecture/osx-gfortran-markus create mode 100644 architecture/smoky-gfortran create mode 100644 architecture/summitdev-gnu-cublas create mode 100644 architecture/summitdev-gnu-cuda_c create mode 100644 architecture/summitdev-gnu-nogpu create mode 100644 architecture/summitdev-pgi-cuda_c create mode 100644 architecture/summitdev-pgi-nogpu create mode 100644 architecture/xk6-cray-nogpu create mode 100644 architecture/xk6-gnu-cuda_c create mode 100644 architecture/xk6-gnu-cula create mode 100644 architecture/xk6-gnu-libsci create mode 100644 architecture/xk6-gnu-nogpu create mode 100644 architecture/xk6-pgi-nogpu create mode 100644 architecture/xt5-pgi create mode 100644 bin/README create mode 100644 boost/LICENSE_1_0.txt create mode 100644 boost/config.hpp create mode 100644 boost/config/compiler/gcc.hpp create mode 100644 boost/config/compiler/pgi.hpp create mode 100644 boost/config/no_tr1/utility.hpp create mode 100644 boost/config/platform/aix.hpp create mode 100644 boost/config/platform/bsd.hpp create mode 100644 boost/config/platform/cygwin.hpp create mode 100644 boost/config/platform/linux.hpp create mode 100644 boost/config/platform/macos.hpp create mode 100644 boost/config/platform/solaris.hpp create mode 100644 boost/config/posix_features.hpp create mode 100644 boost/config/select_compiler_config.hpp create mode 100644 boost/config/select_platform_config.hpp create mode 100644 boost/config/select_stdlib_config.hpp create mode 100644 boost/config/stdlib/libstdcpp3.hpp create mode 100644 boost/config/stdlib/stlport.hpp create mode 100644 boost/config/suffix.hpp create mode 100644 boost/config/user.hpp create mode 100644 boost/cstdint.hpp create mode 100644 boost/detail/workaround.hpp create mode 100644 boost/integer_traits.hpp create mode 100644 boost/limits.hpp create mode 100644 boost/random.hpp create mode 100644 boost/random/additive_combine.hpp create mode 100644 boost/random/bernoulli_distribution.hpp create mode 100644 boost/random/binomial_distribution.hpp create mode 100644 boost/random/cauchy_distribution.hpp create mode 100644 boost/random/detail/const_mod.hpp create mode 100644 boost/random/detail/pass_through_engine.hpp create mode 100644 boost/random/detail/ptr_helper.hpp create mode 100644 boost/random/detail/signed_unsigned_tools.hpp create mode 100644 boost/random/detail/uniform_int_float.hpp create mode 100644 boost/random/discard_block.hpp create mode 100644 boost/random/exponential_distribution.hpp create mode 100644 boost/random/gamma_distribution.hpp create mode 100644 boost/random/geometric_distribution.hpp create mode 100644 boost/random/inversive_congruential.hpp create mode 100644 boost/random/lagged_fibonacci.hpp create mode 100644 boost/random/linear_congruential.hpp create mode 100644 boost/random/linear_feedback_shift.hpp create mode 100644 boost/random/lognormal_distribution.hpp create mode 100644 boost/random/mersenne_twister.hpp create mode 100644 boost/random/normal_distribution.hpp create mode 100644 boost/random/poisson_distribution.hpp create mode 100644 boost/random/random_number_generator.hpp create mode 100644 boost/random/ranlux.hpp create mode 100644 boost/random/shuffle_output.hpp create mode 100644 boost/random/subtract_with_carry.hpp create mode 100644 boost/random/triangle_distribution.hpp create mode 100644 boost/random/uniform_01.hpp create mode 100644 boost/random/uniform_int.hpp create mode 100644 boost/random/uniform_on_sphere.hpp create mode 100644 boost/random/uniform_real.hpp create mode 100644 boost/random/uniform_smallint.hpp create mode 100644 boost/random/variate_generator.hpp create mode 100644 boost/random/xor_combine.hpp create mode 100644 boost/static_assert.hpp create mode 100644 build_libxc create mode 100644 doc/Doxyfile create mode 100644 doc/Makefile create mode 100644 doc/html/Makefile create mode 100644 doc/latex/Makefile create mode 100644 doc/latex/doxygen.sty create mode 100644 doc/manual/Makefile create mode 100644 doc/manual/constrained_moment.tex create mode 100644 doc/manual/input_format.tex create mode 100644 doc/manual/instalation.tex create mode 100644 doc/manual/lsms_manual.tex create mode 100644 doc/manual/units.tex create mode 100644 html/doxygen.css create mode 100644 html/doxygen.png create mode 100644 html/index.html create mode 100755 html/installdox create mode 100644 html/search/close.png create mode 100644 html/search/nomatches.html create mode 100644 html/search/search.css create mode 100644 html/search/search.js create mode 100644 html/search/search.png create mode 100644 html/tab_b.gif create mode 100644 html/tab_l.gif create mode 100644 html/tab_r.gif create mode 100644 html/tabs.css create mode 100755 include/Array3d.hpp create mode 100755 include/BLAS.hpp create mode 100644 include/Complex.hpp create mode 100755 include/LAPACK.hpp create mode 100755 include/Matrix.hpp create mode 100644 include/PhysicalConstants.hpp create mode 100644 include/Real.hpp create mode 100644 include/TypeTraits.hpp create mode 100644 include/lapack.h create mode 100644 latex/Makefile create mode 100644 latex/doxygen.sty create mode 100644 latex/refman.tex create mode 100644 lib/Makefile create mode 100644 libxc-2.2.0/AUTHORS create mode 100644 libxc-2.2.0/COPYING create mode 100644 libxc-2.2.0/ChangeLog create mode 100644 libxc-2.2.0/INSTALL create mode 100644 libxc-2.2.0/Makefile.am create mode 100644 libxc-2.2.0/Makefile.in create mode 100644 libxc-2.2.0/NEWS create mode 100644 libxc-2.2.0/PACKAGING create mode 100644 libxc-2.2.0/README create mode 100644 libxc-2.2.0/TODO create mode 100644 libxc-2.2.0/aclocal.m4 create mode 100644 libxc-2.2.0/build/Makefile.am create mode 100644 libxc-2.2.0/build/Makefile.in create mode 100644 libxc-2.2.0/build/libxc.pc.in create mode 100644 libxc-2.2.0/build/libxc.spec.in create mode 100755 libxc-2.2.0/compile create mode 100755 libxc-2.2.0/config.guess create mode 100644 libxc-2.2.0/config.h.in create mode 100755 libxc-2.2.0/config.sub create mode 100755 libxc-2.2.0/configure create mode 100644 libxc-2.2.0/configure.ac create mode 100755 libxc-2.2.0/depcomp create mode 100755 libxc-2.2.0/install-sh create mode 100644 libxc-2.2.0/ltmain.sh create mode 100644 libxc-2.2.0/m4/ac_prog_sed.m4 create mode 100644 libxc-2.2.0/m4/ax_f90_module_extension.m4 create mode 100644 libxc-2.2.0/m4/fc_integer.m4 create mode 100644 libxc-2.2.0/m4/fcflags.m4 create mode 100644 libxc-2.2.0/m4/fortran.m4 create mode 100644 libxc-2.2.0/m4/libtool.m4 create mode 100644 libxc-2.2.0/m4/ltoptions.m4 create mode 100644 libxc-2.2.0/m4/ltsugar.m4 create mode 100644 libxc-2.2.0/m4/ltversion.m4 create mode 100644 libxc-2.2.0/m4/lt~obsolete.m4 create mode 100755 libxc-2.2.0/missing create mode 100644 libxc-2.2.0/src/Makefile.am create mode 100644 libxc-2.2.0/src/Makefile.in create mode 100644 libxc-2.2.0/src/bessel.c create mode 100644 libxc-2.2.0/src/expint_e1.c create mode 100644 libxc-2.2.0/src/functionals.c create mode 100755 libxc-2.2.0/src/get_funcs.pl create mode 100644 libxc-2.2.0/src/gga.c create mode 100644 libxc-2.2.0/src/gga_c_am05.c create mode 100644 libxc-2.2.0/src/gga_c_ft97.c create mode 100644 libxc-2.2.0/src/gga_c_lm.c create mode 100644 libxc-2.2.0/src/gga_c_lyp.c create mode 100644 libxc-2.2.0/src/gga_c_op.c create mode 100644 libxc-2.2.0/src/gga_c_optc.c create mode 100644 libxc-2.2.0/src/gga_c_p86.c create mode 100644 libxc-2.2.0/src/gga_c_pbe.c create mode 100644 libxc-2.2.0/src/gga_c_pw91.c create mode 100644 libxc-2.2.0/src/gga_c_q2d.c create mode 100644 libxc-2.2.0/src/gga_c_sogga11.c create mode 100644 libxc-2.2.0/src/gga_c_tca.c create mode 100644 libxc-2.2.0/src/gga_c_wi.c create mode 100644 libxc-2.2.0/src/gga_c_wl.c create mode 100644 libxc-2.2.0/src/gga_k_dk.c create mode 100644 libxc-2.2.0/src/gga_k_meyer.c create mode 100644 libxc-2.2.0/src/gga_k_ol1.c create mode 100644 libxc-2.2.0/src/gga_k_ol2.c create mode 100644 libxc-2.2.0/src/gga_k_pearson.c create mode 100644 libxc-2.2.0/src/gga_k_tflw.c create mode 100644 libxc-2.2.0/src/gga_x_2d_b86.c create mode 100644 libxc-2.2.0/src/gga_x_2d_b86_mgc.c create mode 100644 libxc-2.2.0/src/gga_x_2d_b88.c create mode 100644 libxc-2.2.0/src/gga_x_2d_pbe.c create mode 100644 libxc-2.2.0/src/gga_x_airy.c create mode 100644 libxc-2.2.0/src/gga_x_ak13.c create mode 100644 libxc-2.2.0/src/gga_x_am05.c create mode 100644 libxc-2.2.0/src/gga_x_b86.c create mode 100644 libxc-2.2.0/src/gga_x_b86_mgc.c create mode 100644 libxc-2.2.0/src/gga_x_b88.c create mode 100644 libxc-2.2.0/src/gga_x_bayesian.c create mode 100644 libxc-2.2.0/src/gga_x_bpccac.c create mode 100644 libxc-2.2.0/src/gga_x_c09x.c create mode 100644 libxc-2.2.0/src/gga_x_dk87.c create mode 100644 libxc-2.2.0/src/gga_x_ft97.c create mode 100644 libxc-2.2.0/src/gga_x_g96.c create mode 100644 libxc-2.2.0/src/gga_x_herman.c create mode 100644 libxc-2.2.0/src/gga_x_hjs.c create mode 100644 libxc-2.2.0/src/gga_x_htbs.c create mode 100644 libxc-2.2.0/src/gga_x_ityh.c create mode 100644 libxc-2.2.0/src/gga_x_kt.c create mode 100644 libxc-2.2.0/src/gga_x_lb.c create mode 100644 libxc-2.2.0/src/gga_x_lg93.c create mode 100644 libxc-2.2.0/src/gga_x_lv_rpw86.c create mode 100644 libxc-2.2.0/src/gga_x_mpbe.c create mode 100644 libxc-2.2.0/src/gga_x_n12.c create mode 100644 libxc-2.2.0/src/gga_x_optx.c create mode 100644 libxc-2.2.0/src/gga_x_pbe.c create mode 100644 libxc-2.2.0/src/gga_x_pbea.c create mode 100644 libxc-2.2.0/src/gga_x_pw86.c create mode 100644 libxc-2.2.0/src/gga_x_pw91.c create mode 100644 libxc-2.2.0/src/gga_x_q2d.c create mode 100644 libxc-2.2.0/src/gga_x_rpbe.c create mode 100644 libxc-2.2.0/src/gga_x_sfat.c create mode 100644 libxc-2.2.0/src/gga_x_sogga11.c create mode 100644 libxc-2.2.0/src/gga_x_ssb_sw.c create mode 100644 libxc-2.2.0/src/gga_x_vmt.c create mode 100644 libxc-2.2.0/src/gga_x_wc.c create mode 100644 libxc-2.2.0/src/gga_x_wpbeh.c create mode 100644 libxc-2.2.0/src/gga_xc_1w.c create mode 100644 libxc-2.2.0/src/gga_xc_b97.c create mode 100644 libxc-2.2.0/src/gga_xc_edf1.c create mode 100644 libxc-2.2.0/src/gga_xc_oblyp_d.c create mode 100644 libxc-2.2.0/src/gga_xc_th.c create mode 100644 libxc-2.2.0/src/hyb_gga_xc_b1wc.c create mode 100644 libxc-2.2.0/src/hyb_gga_xc_b3lyp.c create mode 100644 libxc-2.2.0/src/hyb_gga_xc_b97.c create mode 100644 libxc-2.2.0/src/hyb_gga_xc_cam_b3lyp.c create mode 100644 libxc-2.2.0/src/hyb_gga_xc_camy_blyp.c create mode 100644 libxc-2.2.0/src/hyb_gga_xc_hse.c create mode 100644 libxc-2.2.0/src/hyb_gga_xc_o3lyp.c create mode 100644 libxc-2.2.0/src/hyb_gga_xc_pbeh.c create mode 100644 libxc-2.2.0/src/hyb_mgga_xc_m05.c create mode 100644 libxc-2.2.0/src/hyb_mgga_xc_tpssh.c create mode 100644 libxc-2.2.0/src/integrate.c create mode 100644 libxc-2.2.0/src/lda.c create mode 100644 libxc-2.2.0/src/lda_c_1d_csc.c create mode 100644 libxc-2.2.0/src/lda_c_1d_loos.c create mode 100644 libxc-2.2.0/src/lda_c_2d_amgb.c create mode 100644 libxc-2.2.0/src/lda_c_2d_prm.c create mode 100644 libxc-2.2.0/src/lda_c_gombas.c create mode 100644 libxc-2.2.0/src/lda_c_hl.c create mode 100644 libxc-2.2.0/src/lda_c_ml1.c create mode 100644 libxc-2.2.0/src/lda_c_pw.c create mode 100644 libxc-2.2.0/src/lda_c_pz.c create mode 100644 libxc-2.2.0/src/lda_c_rc04.c create mode 100644 libxc-2.2.0/src/lda_c_rpa.c create mode 100644 libxc-2.2.0/src/lda_c_vwn.c create mode 100644 libxc-2.2.0/src/lda_c_wigner.c create mode 100644 libxc-2.2.0/src/lda_k_tf.c create mode 100644 libxc-2.2.0/src/lda_x.c create mode 100644 libxc-2.2.0/src/lda_x_1d.c create mode 100644 libxc-2.2.0/src/lda_x_2d.c create mode 100644 libxc-2.2.0/src/lda_xc_teter93.c create mode 100644 libxc-2.2.0/src/libxc.f90 create mode 100644 libxc-2.2.0/src/libxc_funcs.f90 create mode 100644 libxc-2.2.0/src/libxc_master.F90 create mode 100644 libxc-2.2.0/src/mgga.c create mode 100644 libxc-2.2.0/src/mgga_c_bc95.c create mode 100644 libxc-2.2.0/src/mgga_c_cc06.c create mode 100644 libxc-2.2.0/src/mgga_c_cs.c create mode 100644 libxc-2.2.0/src/mgga_c_m08.c create mode 100644 libxc-2.2.0/src/mgga_c_pkzb.c create mode 100644 libxc-2.2.0/src/mgga_c_vsxc.c create mode 100644 libxc-2.2.0/src/mgga_x_2d_prhg07.c create mode 100644 libxc-2.2.0/src/mgga_x_br89.c create mode 100644 libxc-2.2.0/src/mgga_x_gvt4.c create mode 100644 libxc-2.2.0/src/mgga_x_lta.c create mode 100644 libxc-2.2.0/src/mgga_x_m05.c create mode 100644 libxc-2.2.0/src/mgga_x_m06l.c create mode 100644 libxc-2.2.0/src/mgga_x_m08.c create mode 100644 libxc-2.2.0/src/mgga_x_mk00.c create mode 100644 libxc-2.2.0/src/mgga_x_mn12.c create mode 100644 libxc-2.2.0/src/mgga_x_ms.c create mode 100644 libxc-2.2.0/src/mgga_x_pkzb.c create mode 100644 libxc-2.2.0/src/mgga_x_tau_hcth.c create mode 100644 libxc-2.2.0/src/mgga_x_tpss.c create mode 100644 libxc-2.2.0/src/mgga_xc_otpss_d.c create mode 100644 libxc-2.2.0/src/mix_func.c create mode 100644 libxc-2.2.0/src/special_functions.c create mode 100644 libxc-2.2.0/src/stoll.c create mode 100644 libxc-2.2.0/src/string_f.h create mode 100644 libxc-2.2.0/src/util.c create mode 100644 libxc-2.2.0/src/util.h create mode 100644 libxc-2.2.0/src/version.c create mode 100644 libxc-2.2.0/src/work_gga_c.c create mode 100644 libxc-2.2.0/src/work_gga_x.c create mode 100644 libxc-2.2.0/src/work_lda.c create mode 100644 libxc-2.2.0/src/work_mgga_c.c create mode 100644 libxc-2.2.0/src/work_mgga_x.c create mode 100644 libxc-2.2.0/src/xc-info.c create mode 100644 libxc-2.2.0/src/xc.h create mode 100644 libxc-2.2.0/src/xc_config.h create mode 100644 libxc-2.2.0/src/xc_f.c create mode 100644 libxc-2.2.0/src/xc_s.h create mode 100644 libxc-2.2.0/src/xc_unconfig.h create mode 100755 libxc-2.2.0/test-driver create mode 100644 libxc-2.2.0/testsuite/Makefile.am create mode 100644 libxc-2.2.0/testsuite/Makefile.in create mode 100644 libxc-2.2.0/testsuite/df_repo/gga_c_lyp.data create mode 100644 libxc-2.2.0/testsuite/df_repo/gga_c_p86.data create mode 100644 libxc-2.2.0/testsuite/df_repo/gga_c_pbe.data create mode 100644 libxc-2.2.0/testsuite/df_repo/gga_c_pw91.data create mode 100644 libxc-2.2.0/testsuite/df_repo/gga_x_b88.data create mode 100644 libxc-2.2.0/testsuite/df_repo/gga_x_ft97_b.data create mode 100644 libxc-2.2.0/testsuite/df_repo/gga_x_pbe.data create mode 100644 libxc-2.2.0/testsuite/df_repo/gga_x_pw91.data create mode 100644 libxc-2.2.0/testsuite/df_repo/gga_xc_b97.data create mode 100644 libxc-2.2.0/testsuite/df_repo/gga_xc_b97_1.data create mode 100644 libxc-2.2.0/testsuite/df_repo/gga_xc_b97_2.data create mode 100644 libxc-2.2.0/testsuite/df_repo/gga_xc_edf1.data create mode 100644 libxc-2.2.0/testsuite/df_repo/gga_xc_hcth_120.data create mode 100644 libxc-2.2.0/testsuite/df_repo/gga_xc_hcth_147.data create mode 100644 libxc-2.2.0/testsuite/df_repo/gga_xc_hcth_407.data create mode 100644 libxc-2.2.0/testsuite/df_repo/gga_xc_hcth_93.data create mode 100644 libxc-2.2.0/testsuite/df_repo/hyb_gga_xc_b3lyp.data create mode 100644 libxc-2.2.0/testsuite/df_repo/lda_c_pw.data create mode 100644 libxc-2.2.0/testsuite/df_repo/lda_c_pz.data create mode 100644 libxc-2.2.0/testsuite/df_repo/lda_c_vwn.data create mode 100644 libxc-2.2.0/testsuite/df_repo/lda_c_vwn_rpa.data create mode 100644 libxc-2.2.0/testsuite/df_repo/lda_x.data create mode 100644 libxc-2.2.0/testsuite/input/BrOH create mode 100644 libxc-2.2.0/testsuite/input/BrOH+ create mode 100644 libxc-2.2.0/testsuite/input/H create mode 100644 libxc-2.2.0/testsuite/input/Li create mode 100644 libxc-2.2.0/testsuite/input/README create mode 100644 libxc-2.2.0/testsuite/regression/lda_x.pol.bz2 create mode 100644 libxc-2.2.0/testsuite/regression/lda_x.unpol.bz2 create mode 100644 libxc-2.2.0/testsuite/xc-consistency.c create mode 100644 libxc-2.2.0/testsuite/xc-error.c create mode 100644 libxc-2.2.0/testsuite/xc-get_data.c create mode 100755 libxc-2.2.0/testsuite/xc-reference.pl create mode 100644 libxc-2.2.0/testsuite/xc-regression.c create mode 100755 libxc-2.2.0/testsuite/xc-run_testsuite create mode 100644 libxc-2.2.0/xc_version.h create mode 100644 libxc-2.2.0/xc_version.h.in create mode 100644 libxc/AUTHORS create mode 100644 libxc/COPYING create mode 100644 libxc/ChangeLog create mode 100644 libxc/INSTALL create mode 100644 libxc/Makefile.am create mode 100644 libxc/Makefile.in create mode 100644 libxc/NEWS create mode 100644 libxc/PACKAGING create mode 100644 libxc/README create mode 100644 libxc/TODO create mode 100644 libxc/aclocal.m4 create mode 100644 libxc/build/Makefile.am create mode 100644 libxc/build/Makefile.in create mode 100644 libxc/build/libxc.pc.in create mode 100644 libxc/build/libxc.spec.in create mode 100755 libxc/compile create mode 100755 libxc/config.guess create mode 100644 libxc/config.h.in create mode 100755 libxc/config.sub create mode 100755 libxc/configure create mode 100644 libxc/configure.ac create mode 100755 libxc/depcomp create mode 100755 libxc/install-sh create mode 100644 libxc/ltmain.sh create mode 100644 libxc/m4/ac_prog_sed.m4 create mode 100644 libxc/m4/ax_f90_module_extension.m4 create mode 100644 libxc/m4/fc_integer.m4 create mode 100644 libxc/m4/fcflags.m4 create mode 100644 libxc/m4/fortran.m4 create mode 100644 libxc/m4/libtool.m4 create mode 100644 libxc/m4/ltoptions.m4 create mode 100644 libxc/m4/ltsugar.m4 create mode 100644 libxc/m4/ltversion.m4 create mode 100644 libxc/m4/lt~obsolete.m4 create mode 100755 libxc/missing create mode 100644 libxc/src/Makefile.am create mode 100644 libxc/src/Makefile.in create mode 100644 libxc/src/bessel.c create mode 100644 libxc/src/expint_e1.c create mode 100644 libxc/src/functionals.c create mode 100755 libxc/src/get_funcs.pl create mode 100644 libxc/src/gga.c create mode 100644 libxc/src/gga_c_am05.c create mode 100644 libxc/src/gga_c_ft97.c create mode 100644 libxc/src/gga_c_lm.c create mode 100644 libxc/src/gga_c_lyp.c create mode 100644 libxc/src/gga_c_op.c create mode 100644 libxc/src/gga_c_optc.c create mode 100644 libxc/src/gga_c_p86.c create mode 100644 libxc/src/gga_c_pbe.c create mode 100644 libxc/src/gga_c_pw91.c create mode 100644 libxc/src/gga_c_q2d.c create mode 100644 libxc/src/gga_c_sogga11.c create mode 100644 libxc/src/gga_c_tca.c create mode 100644 libxc/src/gga_c_wi.c create mode 100644 libxc/src/gga_c_wl.c create mode 100644 libxc/src/gga_k_dk.c create mode 100644 libxc/src/gga_k_meyer.c create mode 100644 libxc/src/gga_k_ol1.c create mode 100644 libxc/src/gga_k_ol2.c create mode 100644 libxc/src/gga_k_pearson.c create mode 100644 libxc/src/gga_k_tflw.c create mode 100644 libxc/src/gga_x_2d_b86.c create mode 100644 libxc/src/gga_x_2d_b86_mgc.c create mode 100644 libxc/src/gga_x_2d_b88.c create mode 100644 libxc/src/gga_x_2d_pbe.c create mode 100644 libxc/src/gga_x_airy.c create mode 100644 libxc/src/gga_x_ak13.c create mode 100644 libxc/src/gga_x_am05.c create mode 100644 libxc/src/gga_x_b86.c create mode 100644 libxc/src/gga_x_b86_mgc.c create mode 100644 libxc/src/gga_x_b88.c create mode 100644 libxc/src/gga_x_bayesian.c create mode 100644 libxc/src/gga_x_bpccac.c create mode 100644 libxc/src/gga_x_c09x.c create mode 100644 libxc/src/gga_x_dk87.c create mode 100644 libxc/src/gga_x_ft97.c create mode 100644 libxc/src/gga_x_g96.c create mode 100644 libxc/src/gga_x_herman.c create mode 100644 libxc/src/gga_x_hjs.c create mode 100644 libxc/src/gga_x_htbs.c create mode 100644 libxc/src/gga_x_ityh.c create mode 100644 libxc/src/gga_x_kt.c create mode 100644 libxc/src/gga_x_lb.c create mode 100644 libxc/src/gga_x_lg93.c create mode 100644 libxc/src/gga_x_lv_rpw86.c create mode 100644 libxc/src/gga_x_mpbe.c create mode 100644 libxc/src/gga_x_n12.c create mode 100644 libxc/src/gga_x_optx.c create mode 100644 libxc/src/gga_x_pbe.c create mode 100644 libxc/src/gga_x_pbea.c create mode 100644 libxc/src/gga_x_pw86.c create mode 100644 libxc/src/gga_x_pw91.c create mode 100644 libxc/src/gga_x_q2d.c create mode 100644 libxc/src/gga_x_rpbe.c create mode 100644 libxc/src/gga_x_sfat.c create mode 100644 libxc/src/gga_x_sogga11.c create mode 100644 libxc/src/gga_x_ssb_sw.c create mode 100644 libxc/src/gga_x_vmt.c create mode 100644 libxc/src/gga_x_wc.c create mode 100644 libxc/src/gga_x_wpbeh.c create mode 100644 libxc/src/gga_xc_1w.c create mode 100644 libxc/src/gga_xc_b97.c create mode 100644 libxc/src/gga_xc_edf1.c create mode 100644 libxc/src/gga_xc_oblyp_d.c create mode 100644 libxc/src/gga_xc_th.c create mode 100644 libxc/src/hyb_gga_xc_b1wc.c create mode 100644 libxc/src/hyb_gga_xc_b3lyp.c create mode 100644 libxc/src/hyb_gga_xc_b97.c create mode 100644 libxc/src/hyb_gga_xc_cam_b3lyp.c create mode 100644 libxc/src/hyb_gga_xc_camy_blyp.c create mode 100644 libxc/src/hyb_gga_xc_hse.c create mode 100644 libxc/src/hyb_gga_xc_o3lyp.c create mode 100644 libxc/src/hyb_gga_xc_pbeh.c create mode 100644 libxc/src/hyb_mgga_xc_m05.c create mode 100644 libxc/src/hyb_mgga_xc_tpssh.c create mode 100644 libxc/src/integrate.c create mode 100644 libxc/src/lda.c create mode 100644 libxc/src/lda_c_1d_csc.c create mode 100644 libxc/src/lda_c_1d_loos.c create mode 100644 libxc/src/lda_c_2d_amgb.c create mode 100644 libxc/src/lda_c_2d_prm.c create mode 100644 libxc/src/lda_c_gombas.c create mode 100644 libxc/src/lda_c_hl.c create mode 100644 libxc/src/lda_c_ml1.c create mode 100644 libxc/src/lda_c_pw.c create mode 100644 libxc/src/lda_c_pz.c create mode 100644 libxc/src/lda_c_rc04.c create mode 100644 libxc/src/lda_c_rpa.c create mode 100644 libxc/src/lda_c_vwn.c create mode 100644 libxc/src/lda_c_wigner.c create mode 100644 libxc/src/lda_k_tf.c create mode 100644 libxc/src/lda_x.c create mode 100644 libxc/src/lda_x_1d.c create mode 100644 libxc/src/lda_x_2d.c create mode 100644 libxc/src/lda_xc_teter93.c create mode 100644 libxc/src/libxc.f90 create mode 100644 libxc/src/libxc_funcs.f90 create mode 100644 libxc/src/libxc_master.F90 create mode 100644 libxc/src/mgga.c create mode 100644 libxc/src/mgga_c_bc95.c create mode 100644 libxc/src/mgga_c_cc06.c create mode 100644 libxc/src/mgga_c_cs.c create mode 100644 libxc/src/mgga_c_m08.c create mode 100644 libxc/src/mgga_c_pkzb.c create mode 100644 libxc/src/mgga_c_vsxc.c create mode 100644 libxc/src/mgga_x_2d_prhg07.c create mode 100644 libxc/src/mgga_x_br89.c create mode 100644 libxc/src/mgga_x_gvt4.c create mode 100644 libxc/src/mgga_x_lta.c create mode 100644 libxc/src/mgga_x_m05.c create mode 100644 libxc/src/mgga_x_m06l.c create mode 100644 libxc/src/mgga_x_m08.c create mode 100644 libxc/src/mgga_x_mk00.c create mode 100644 libxc/src/mgga_x_mn12.c create mode 100644 libxc/src/mgga_x_ms.c create mode 100644 libxc/src/mgga_x_pkzb.c create mode 100644 libxc/src/mgga_x_tau_hcth.c create mode 100644 libxc/src/mgga_x_tpss.c create mode 100644 libxc/src/mgga_xc_otpss_d.c create mode 100644 libxc/src/mix_func.c create mode 100644 libxc/src/special_functions.c create mode 100644 libxc/src/stoll.c create mode 100644 libxc/src/string_f.h create mode 100644 libxc/src/util.c create mode 100644 libxc/src/util.h create mode 100644 libxc/src/version.c create mode 100644 libxc/src/work_gga_c.c create mode 100644 libxc/src/work_gga_x.c create mode 100644 libxc/src/work_lda.c create mode 100644 libxc/src/work_mgga_c.c create mode 100644 libxc/src/work_mgga_x.c create mode 100644 libxc/src/xc-info.c create mode 100644 libxc/src/xc.h create mode 100644 libxc/src/xc_config.h create mode 100644 libxc/src/xc_f.c create mode 100644 libxc/src/xc_s.h create mode 100644 libxc/src/xc_unconfig.h create mode 100755 libxc/test-driver create mode 100644 libxc/testsuite/Makefile.am create mode 100644 libxc/testsuite/Makefile.in create mode 100644 libxc/testsuite/df_repo/gga_c_lyp.data create mode 100644 libxc/testsuite/df_repo/gga_c_p86.data create mode 100644 libxc/testsuite/df_repo/gga_c_pbe.data create mode 100644 libxc/testsuite/df_repo/gga_c_pw91.data create mode 100644 libxc/testsuite/df_repo/gga_x_b88.data create mode 100644 libxc/testsuite/df_repo/gga_x_ft97_b.data create mode 100644 libxc/testsuite/df_repo/gga_x_pbe.data create mode 100644 libxc/testsuite/df_repo/gga_x_pw91.data create mode 100644 libxc/testsuite/df_repo/gga_xc_b97.data create mode 100644 libxc/testsuite/df_repo/gga_xc_b97_1.data create mode 100644 libxc/testsuite/df_repo/gga_xc_b97_2.data create mode 100644 libxc/testsuite/df_repo/gga_xc_edf1.data create mode 100644 libxc/testsuite/df_repo/gga_xc_hcth_120.data create mode 100644 libxc/testsuite/df_repo/gga_xc_hcth_147.data create mode 100644 libxc/testsuite/df_repo/gga_xc_hcth_407.data create mode 100644 libxc/testsuite/df_repo/gga_xc_hcth_93.data create mode 100644 libxc/testsuite/df_repo/hyb_gga_xc_b3lyp.data create mode 100644 libxc/testsuite/df_repo/lda_c_pw.data create mode 100644 libxc/testsuite/df_repo/lda_c_pz.data create mode 100644 libxc/testsuite/df_repo/lda_c_vwn.data create mode 100644 libxc/testsuite/df_repo/lda_c_vwn_rpa.data create mode 100644 libxc/testsuite/df_repo/lda_x.data create mode 100644 libxc/testsuite/input/BrOH create mode 100644 libxc/testsuite/input/BrOH+ create mode 100644 libxc/testsuite/input/H create mode 100644 libxc/testsuite/input/Li create mode 100644 libxc/testsuite/input/README create mode 100644 libxc/testsuite/regression/lda_x.pol.bz2 create mode 100644 libxc/testsuite/regression/lda_x.unpol.bz2 create mode 100644 libxc/testsuite/xc-consistency.c create mode 100644 libxc/testsuite/xc-error.c create mode 100644 libxc/testsuite/xc-get_data.c create mode 100755 libxc/testsuite/xc-reference.pl create mode 100644 libxc/testsuite/xc-regression.c create mode 100755 libxc/testsuite/xc-run_testsuite create mode 100644 libxc/xc_version.h create mode 100644 libxc/xc_version.h.in create mode 100644 lua-5.2.4/Makefile create mode 100644 lua-5.2.4/README create mode 100644 lua-5.2.4/bin/README create mode 100644 lua-5.2.4/doc/contents.html create mode 100644 lua-5.2.4/doc/logo.gif create mode 100644 lua-5.2.4/doc/lua.1 create mode 100644 lua-5.2.4/doc/lua.css create mode 100644 lua-5.2.4/doc/luac.1 create mode 100644 lua-5.2.4/doc/manual.css create mode 100644 lua-5.2.4/doc/manual.html create mode 100644 lua-5.2.4/doc/osi-certified-72x60.png create mode 100644 lua-5.2.4/doc/readme.html create mode 100644 lua-5.2.4/lib/README create mode 100644 lua-5.2.4/src/Makefile create mode 100644 lua-5.2.4/src/lapi.c create mode 100644 lua-5.2.4/src/lapi.h create mode 100644 lua-5.2.4/src/lauxlib.c create mode 100644 lua-5.2.4/src/lauxlib.h create mode 100644 lua-5.2.4/src/lbaselib.c create mode 100644 lua-5.2.4/src/lbitlib.c create mode 100644 lua-5.2.4/src/lcode.c create mode 100644 lua-5.2.4/src/lcode.h create mode 100644 lua-5.2.4/src/lcorolib.c create mode 100644 lua-5.2.4/src/lctype.c create mode 100644 lua-5.2.4/src/lctype.h create mode 100644 lua-5.2.4/src/ldblib.c create mode 100644 lua-5.2.4/src/ldebug.c create mode 100644 lua-5.2.4/src/ldebug.h create mode 100644 lua-5.2.4/src/ldo.c create mode 100644 lua-5.2.4/src/ldo.h create mode 100644 lua-5.2.4/src/ldump.c create mode 100644 lua-5.2.4/src/lfunc.c create mode 100644 lua-5.2.4/src/lfunc.h create mode 100644 lua-5.2.4/src/lgc.c create mode 100644 lua-5.2.4/src/lgc.h create mode 100644 lua-5.2.4/src/linit.c create mode 100644 lua-5.2.4/src/liolib.c create mode 100644 lua-5.2.4/src/llex.c create mode 100644 lua-5.2.4/src/llex.h create mode 100644 lua-5.2.4/src/llimits.h create mode 100644 lua-5.2.4/src/lmathlib.c create mode 100644 lua-5.2.4/src/lmem.c create mode 100644 lua-5.2.4/src/lmem.h create mode 100644 lua-5.2.4/src/loadlib.c create mode 100644 lua-5.2.4/src/lobject.c create mode 100644 lua-5.2.4/src/lobject.h create mode 100644 lua-5.2.4/src/lopcodes.c create mode 100644 lua-5.2.4/src/lopcodes.h create mode 100644 lua-5.2.4/src/loslib.c create mode 100644 lua-5.2.4/src/lparser.c create mode 100644 lua-5.2.4/src/lparser.h create mode 100644 lua-5.2.4/src/lstate.c create mode 100644 lua-5.2.4/src/lstate.h create mode 100644 lua-5.2.4/src/lstring.c create mode 100644 lua-5.2.4/src/lstring.h create mode 100644 lua-5.2.4/src/lstrlib.c create mode 100644 lua-5.2.4/src/ltable.c create mode 100644 lua-5.2.4/src/ltable.h create mode 100644 lua-5.2.4/src/ltablib.c create mode 100644 lua-5.2.4/src/ltm.c create mode 100644 lua-5.2.4/src/ltm.h create mode 100644 lua-5.2.4/src/lua.c create mode 100644 lua-5.2.4/src/lua.h create mode 100644 lua-5.2.4/src/lua.hpp create mode 100644 lua-5.2.4/src/luac.c create mode 100644 lua-5.2.4/src/luaconf.h create mode 100644 lua-5.2.4/src/lualib.h create mode 100644 lua-5.2.4/src/lundump.c create mode 100644 lua-5.2.4/src/lundump.h create mode 100644 lua-5.2.4/src/lvm.c create mode 100644 lua-5.2.4/src/lvm.h create mode 100644 lua-5.2.4/src/lzio.c create mode 100644 lua-5.2.4/src/lzio.h create mode 100644 mjson/Makefile create mode 100644 mjson/json.c create mode 100644 mjson/json.h create mode 100644 mjson/json_helper.c create mode 100644 mjson/json_helper.h create mode 100644 mjson/rstring.c create mode 100644 mjson/rstring.h create mode 100644 scripts/GridTest.lua create mode 100644 src/Accelerator/Accelerator.cpp create mode 100644 src/Accelerator/Accelerator.hpp create mode 100644 src/Accelerator/CULA_Common.h create mode 100755 src/Accelerator/DeviceArray3d.hpp create mode 100755 src/Accelerator/DeviceMatrix.hpp create mode 100644 src/Accelerator/DeviceStorage.cu create mode 100644 src/Accelerator/DeviceStorage.hpp create mode 100755 src/Accelerator/DeviceVector.hpp create mode 100644 src/Accelerator/Makefile create mode 100644 src/Accelerator/accelerator_finalize.F create mode 100644 src/Accelerator/accelerator_initialize.F create mode 100644 src/Accelerator/accelerator_interface.c create mode 100644 src/Accelerator/associatedLegendreTest.cu create mode 100755 src/Accelerator/buildKKRMatrix_gpu.cu create mode 100755 src/Accelerator/buildKKRMatrix_gpu.hpp create mode 100755 src/Accelerator/buildKKRMatrix_kernels.cu create mode 100644 src/Accelerator/cudaCheckError.hpp create mode 100755 src/Accelerator/cudaDoubleComplex.hpp create mode 100644 src/Accelerator/fortran.c create mode 100644 src/Accelerator/fortran.h create mode 100644 src/Accelerator/fortran_common.h create mode 100644 src/Accelerator/fortran_thunking.c create mode 100644 src/Accelerator/fortran_thunking.h create mode 100644 src/Accelerator/inverse.cu create mode 100644 src/Accelerator/inverse.h create mode 100755 src/Accelerator/makebgij_device.hpp create mode 100644 src/Accelerator/no_gpu_buildKKRMatrix.cpp create mode 100644 src/Accelerator/no_gpu_kernel_buildKKRMatrix.cpp create mode 100644 src/Accelerator/operations.h create mode 100755 src/Accelerator/plglmax_device.hpp create mode 100644 src/Accelerator/zblock_lu_cuda_c.cu create mode 100644 src/Communication/LSMSCommunication.cpp create mode 100644 src/Communication/LSMSCommunication.hpp create mode 100644 src/Communication/Makefile create mode 100644 src/Communication/REWLCommunication.cpp create mode 100644 src/Communication/REWLCommunication.hpp create mode 100644 src/Communication/distributeAtoms.cpp create mode 100644 src/Communication/distributeAtoms.hpp create mode 100644 src/Core/CoreStates.hpp create mode 100755 src/Core/Makefile create mode 100644 src/Core/calculateCoreStates.cpp create mode 100755 src/Core/corslv_c.f create mode 100755 src/Core/corslv_c_htest.f create mode 100755 src/Core/deepst_c.f create mode 100755 src/Core/getcor_c.f create mode 100755 src/Core/invals_c.f create mode 100755 src/Core/inwhnk_c.f create mode 100755 src/Core/inws_c.f create mode 100755 src/Core/makefile.lsms_1.9 create mode 100755 src/Core/manifest create mode 100755 src/Core/outws_c.f create mode 100755 src/Core/richnk_c.f create mode 100755 src/Core/se.f create mode 100755 src/Core/semcst_c.f create mode 100755 src/Core/srcore.f create mode 100644 src/LuaInterface/LuaInterface.cpp create mode 100644 src/LuaInterface/LuaSupport.cpp create mode 100644 src/LuaInterface/LuaSupport.hpp create mode 100644 src/LuaInterface/Makefile create mode 100644 src/LuaInterface/RadialGrid_lua.cpp create mode 100644 src/LuaInterface/RadialPotential_lua.cpp create mode 100644 src/Madelung/Madelung.hpp create mode 100755 src/Madelung/Makefile create mode 100755 src/Madelung/bessj.f create mode 100755 src/Madelung/cal_madelung_matrix.f create mode 100755 src/Madelung/cal_madelung_matrix_j.f create mode 100644 src/Madelung/calculateMadelungMatrices.cpp create mode 100755 src/Madelung/getgijmad.f create mode 100755 src/Madelung/getkncut.f create mode 100755 src/Madelung/getrscut.f create mode 100755 src/Madelung/getstruc.f create mode 100755 src/Madelung/interf.f create mode 100755 src/Madelung/interfsmr.f create mode 100755 src/Madelung/lattice.f create mode 100755 src/Madelung/lmfacts.f create mode 100755 src/Madelung/madelung.h create mode 100755 src/Madelung/madewd.f create mode 100755 src/Madelung/madewdj.f create mode 100755 src/Madelung/madsum.f create mode 100755 src/Madelung/ord3v.f create mode 100755 src/Madelung/pqintg_c.f create mode 100644 src/Main/AlloyBankIO.cpp create mode 100644 src/Main/EnergyContourIntegration.hpp create mode 100644 src/Main/EvecGenerator.h create mode 100644 src/Main/ExhaustiveIsing.h create mode 100644 src/Main/Graph1d.hpp create mode 100644 src/Main/Graph1dMoments.hpp create mode 100644 src/Main/Graph1dMoments_new.hpp create mode 100644 src/Main/Graph1d_new.hpp create mode 100644 src/Main/Graph2d.hpp create mode 100644 src/Main/HDF5io.hpp create mode 100644 src/Main/Makefile create mode 100644 src/Main/PotentialIO.cpp create mode 100644 src/Main/PotentialIO.hpp create mode 100644 src/Main/ReplicaExchangeWL.cpp create mode 100644 src/Main/ReplicaExchangeWL.hpp create mode 100644 src/Main/SystemParameters.cpp create mode 100644 src/Main/SystemParameters.hpp create mode 100644 src/Main/WangLandau.h create mode 100644 src/Main/WangLandau.hpp create mode 100644 src/Main/WangLandau2d.h create mode 100644 src/Main/WangLandau_REWL.h create mode 100644 src/Main/buildLIZandCommLists.cpp create mode 100644 src/Main/calculateChemPot.cpp create mode 100644 src/Main/calculateChemPot.hpp create mode 100644 src/Main/calculateDensities.cpp create mode 100644 src/Main/calculateDensities.hpp create mode 100644 src/Main/calculateEvec.cpp create mode 100644 src/Main/calculateEvec.hpp create mode 100644 src/Main/calculateTrPxTau.cpp create mode 100644 src/Main/checkConsistency.cpp create mode 100644 src/Main/checkConsistency.hpp create mode 100644 src/Main/energyContourIntegration.cpp create mode 100644 src/Main/global.hpp create mode 100644 src/Main/initializeAtom.cpp create mode 100644 src/Main/initializeAtom.hpp create mode 100644 src/Main/lsms.cpp create mode 100644 src/Main/lsmsClass.cpp create mode 100644 src/Main/lsmsClass.hpp create mode 100644 src/Main/lsms_inter.cpp create mode 100644 src/Main/mixing.cpp create mode 100644 src/Main/mixing.hpp create mode 100644 src/Main/random_evec.h create mode 100644 src/Main/read_input.cpp create mode 100644 src/Main/rewl_lsms.cpp create mode 100644 src/Main/rotateToGlobal.cpp create mode 100644 src/Main/solveSingleScatterers.cpp create mode 100644 src/Main/wl_lsms.cpp create mode 100644 src/Main/wl_lsms_new_noPotentialShift.cpp create mode 100644 src/Main/writeInfoEvec.cpp create mode 100644 src/Main/zblock_lu_cuda_driver.cpp create mode 100644 src/Makefile create mode 100644 src/Misc/Coeficients.hpp create mode 100644 src/Misc/Gaunt.hpp create mode 100644 src/Misc/Gaunt_gmp.hpp create mode 100644 src/Misc/Indices.hpp create mode 100755 src/Misc/Makefile create mode 100644 src/Misc/associatedLegendreFunction.cpp create mode 100644 src/Misc/associatedLegendreFunction.hpp create mode 100644 src/Misc/bulirschStoerIntegrator.cpp create mode 100644 src/Misc/bulirschStoerIntegrator.hpp create mode 100644 src/Misc/bulirsch_stoer.f create mode 100755 src/Misc/calculateGauntCoeficients.cpp create mode 100644 src/Misc/calculateGaussLegendrePoints.hpp create mode 100755 src/Misc/cgaunt_c.f create mode 100755 src/Misc/cgc.h create mode 100755 src/Misc/cinterp.f create mode 100755 src/Misc/clebsch.f create mode 100755 src/Misc/clock_time.c create mode 100755 src/Misc/cmtruni.f create mode 100755 src/Misc/cnewint.f create mode 100755 src/Misc/congauss_c.f create mode 100755 src/Misc/constraint.f create mode 100755 src/Misc/dfv.f create mode 100755 src/Misc/dfv_new.f create mode 100644 src/Misc/essl_workaround.f create mode 100755 src/Misc/fit.f create mode 100755 src/Misc/fitpot.f create mode 100755 src/Misc/fnpi.f create mode 100755 src/Misc/fstop.f create mode 100755 src/Misc/gaunt.f create mode 100755 src/Misc/getclm.f create mode 100755 src/Misc/ifacts_c.f create mode 100755 src/Misc/initwave.f create mode 100644 src/Misc/integrateOneDim.cpp create mode 100755 src/Misc/interp.f create mode 100755 src/Misc/matr.f create mode 100755 src/Misc/matrot1.f create mode 100755 src/Misc/mbeqa.f create mode 100644 src/Misc/mod_midpoint.f create mode 100755 src/Misc/newder.f create mode 100755 src/Misc/newint.f create mode 100755 src/Misc/plglmax.f create mode 100644 src/Misc/quadrature.cpp create mode 100644 src/Misc/rationalFit.hpp create mode 100644 src/Misc/readLastLine.cpp create mode 100644 src/Misc/readLastLine.hpp create mode 100755 src/Misc/ricbes.f create mode 100755 src/Misc/rotmat.f create mode 100755 src/Misc/rsimp.f create mode 100755 src/Misc/rwave.f create mode 100755 src/Misc/rzextr.f create mode 100755 src/Misc/spin_trafo.f create mode 100644 src/Misc/stop_with_backtrace.cpp create mode 100755 src/Misc/trltog.f create mode 100755 src/Misc/u_sigma_u.f create mode 100755 src/Misc/v_plus_minus.f create mode 100755 src/Misc/wrtmtx.f create mode 100755 src/Misc/ylag.f create mode 100755 src/Misc/zeroout.f create mode 100755 src/Misc/zsphbes.f create mode 100755 src/Misc/zsphbesj.f create mode 100755 src/Misc/zsphbesjh.f create mode 100755 src/MultipleScattering/Makefile create mode 100755 src/MultipleScattering/Makefile.LSMS_1 create mode 100644 src/MultipleScattering/MultipleScattering.hpp create mode 100644 src/MultipleScattering/block_inverse.cpp create mode 100755 src/MultipleScattering/block_inverse_fortran.f create mode 100644 src/MultipleScattering/calculateTauMatrix.cpp create mode 100755 src/MultipleScattering/cmtrins.f create mode 100755 src/MultipleScattering/find_sym.f create mode 100755 src/MultipleScattering/gafill.f create mode 100644 src/MultipleScattering/gen_test_mat.f create mode 100755 src/MultipleScattering/gettaucl_c.f create mode 100755 src/MultipleScattering/gettaucl_c_bu.f create mode 100755 src/MultipleScattering/gf_local.f create mode 100755 src/MultipleScattering/gfill.f create mode 100755 src/MultipleScattering/gfill.h create mode 100755 src/MultipleScattering/green_function.f create mode 100755 src/MultipleScattering/green_function_rel.f create mode 100755 src/MultipleScattering/int_zz_zj.f create mode 100755 src/MultipleScattering/inv_scale_tau00.f create mode 100755 src/MultipleScattering/lmsmtrx.f create mode 100755 src/MultipleScattering/magnet.f create mode 100755 src/MultipleScattering/magnetic_dens.f create mode 100755 src/MultipleScattering/makegij_c.f create mode 100755 src/MultipleScattering/manifest create mode 100755 src/MultipleScattering/mdosms_c.f create mode 100755 src/MultipleScattering/mgreen_c.f create mode 100755 src/MultipleScattering/new_dens.f create mode 100755 src/MultipleScattering/relmtrx.f create mode 100755 src/MultipleScattering/scale_tau00.f create mode 100755 src/MultipleScattering/setgij.f create mode 100644 src/MultipleScattering/tau_inv_postproc.f create mode 100755 src/MultipleScattering/trgtol.f create mode 100755 src/MultipleScattering/wasinv.f create mode 100755 src/MultipleScattering/wasinv_p.f create mode 100644 src/MultipleScattering/write_kkrmat.f create mode 100755 src/MultipleScattering/zaxpby.f create mode 100755 src/MultipleScattering/zblock_lu.F create mode 100755 src/MultipleScattering/zblock_lu_CPU.f create mode 100644 src/MultipleScattering/zblock_lu_CULA.F create mode 100755 src/MultipleScattering/zblock_lu_LIBSCI.f create mode 100644 src/MultipleScattering/zblock_lu_cpp.cpp create mode 100644 src/MultipleScattering/zblock_lu_cray.f create mode 100644 src/MultipleScattering/zblock_lu_cublas.cpp create mode 100644 src/MultipleScattering/zblock_lu_cuda_c.f create mode 100755 src/MultipleScattering/zmar1.f create mode 100755 src/MultipleScattering/zrandn.f create mode 100755 src/MultipleScattering/zucpx.f create mode 100755 src/MultipleScattering/zuqmx.f create mode 100755 src/MultipleScattering/zutfx.f create mode 100755 src/Potential/Makefile create mode 100644 src/Potential/PotentialShifter.hpp create mode 100755 src/Potential/alpha2_c.f create mode 100644 src/Potential/calculateChargesPotential.cpp create mode 100644 src/Potential/calculateChargesPotential.hpp create mode 100755 src/Potential/epcorr.f create mode 100644 src/Potential/getXCName.cpp create mode 100644 src/Potential/getXCName.hpp create mode 100755 src/Potential/getqm_mt.f create mode 100644 src/Potential/getvmt.cpp create mode 100644 src/Potential/getvmt.hpp create mode 100644 src/Potential/interpolatePotential.cpp create mode 100644 src/Potential/interpolatePotential.hpp create mode 100644 src/Potential/libxcInterface.cpp create mode 100644 src/Potential/libxcInterface.hpp create mode 100755 src/Potential/newexchg.f create mode 100755 src/Potential/newpot_c.f create mode 100755 src/Potential/rs.f create mode 100644 src/RadialGrid/Atom.hpp create mode 100644 src/RadialGrid/Makefile create mode 100644 src/RadialGrid/RadialGrid.cpp create mode 100644 src/RadialGrid/RadialGrid.hpp create mode 100644 src/RadialGrid/RadialPotential.hpp create mode 100755 src/RadialGrid/single_pot_read.f create mode 100644 src/SingleSite/AtomData.hpp create mode 100644 src/SingleSite/F_readSingleAtomData_bigcell.f90 create mode 100755 src/SingleSite/F_writeSingleAtomData_bigcell.f90 create mode 100755 src/SingleSite/Makefile create mode 100644 src/SingleSite/SingleSiteScattering.cpp create mode 100644 src/SingleSite/SingleSiteScattering.hpp create mode 100755 src/SingleSite/brmat.f create mode 100644 src/SingleSite/checkAntiFerromagneticStatus.cpp create mode 100644 src/SingleSite/checkAntiFerromagneticStatus.hpp create mode 100755 src/SingleSite/csbf.f create mode 100755 src/SingleSite/dirmag1-op.f create mode 100755 src/SingleSite/dirmag2-op.f create mode 100755 src/SingleSite/gjinv.f create mode 100755 src/SingleSite/manifest create mode 100755 src/SingleSite/matops.f create mode 100644 src/SingleSite/readSingleAtomData.hpp create mode 100644 src/SingleSite/readSingleAtomData_bigcell.cpp create mode 100644 src/SingleSite/readSingleAtomData_hdf5.cpp create mode 100755 src/SingleSite/replms.f create mode 100755 src/SingleSite/scalar_m.f create mode 100755 src/SingleSite/semrel_c.f create mode 100755 src/SingleSite/semrel_c_mesh_test.f create mode 100755 src/SingleSite/single_scatterer_nonrel.f create mode 100755 src/SingleSite/single_scatterer_rel.f create mode 100755 src/SingleSite/single_site_tmat.f create mode 100755 src/SingleSite/spzwafu.f create mode 100644 src/SingleSite/writeSingleAtomData.hpp create mode 100644 src/SingleSite/writeSingleAtomData_bigcell.cpp create mode 100644 src/SingleSite/writeSingleAtomData_hdf5.cpp create mode 100644 src/Test/Makefile create mode 100644 src/Test/WriteTMats.cpp create mode 100644 src/Test/buildKKRMatrixTest/LIZ_pos.h create mode 100644 src/Test/buildKKRMatrixTest/Makefile create mode 100644 src/Test/buildKKRMatrixTest/Real.hpp create mode 100644 src/Test/buildKKRMatrixTest/TestStructures.hpp create mode 100644 src/Test/buildKKRMatrixTest/TypeTraits.hpp create mode 100644 src/Test/buildKKRMatrixTest/associatedLegendreFunction.cpp create mode 100644 src/Test/buildKKRMatrixTest/associatedLegendreFunction.hpp create mode 100644 src/Test/buildKKRMatrixTest/buildKKRMatrixTest.cpp create mode 100644 src/Test/buildKKRMatrixTest/buildKKRMatrix_nrel_ns2.cpp create mode 100644 src/Test/buildKKRMatrixTest/buildKKRMatrix_original.cpp create mode 100644 src/Test/buildKKRMatrixTest/calculateGaussLegendrePoints.hpp create mode 100755 src/Test/buildKKRMatrixTest/makegij_c.f create mode 100644 src/Test/buildKKRMatrixTest/makegij_new.cpp create mode 100644 src/Test/buildKKRMatrixTest/plglmax_new.cpp create mode 100644 src/Test/buildKKRMatrixTest/plglmax_test.cpp create mode 100644 src/Test/buildKKRMatrixTest/quadrature.cpp create mode 100755 src/Test/buildKKRMatrixTest/setgij.f create mode 100755 src/Test/buildKKRMatrixTest_cuda/DeviceArray3d.hpp create mode 100755 src/Test/buildKKRMatrixTest_cuda/DeviceMatrix.hpp create mode 100755 src/Test/buildKKRMatrixTest_cuda/DeviceVector.hpp create mode 100644 src/Test/buildKKRMatrixTest_cuda/LIZ_pos.h create mode 100644 src/Test/buildKKRMatrixTest_cuda/Makefile create mode 100644 src/Test/buildKKRMatrixTest_cuda/Real.hpp create mode 100644 src/Test/buildKKRMatrixTest_cuda/TestStructures.hpp create mode 100644 src/Test/buildKKRMatrixTest_cuda/TypeTraits.hpp create mode 100644 src/Test/buildKKRMatrixTest_cuda/associatedLegendreFunction.cpp create mode 100644 src/Test/buildKKRMatrixTest_cuda/associatedLegendreFunction.hpp create mode 100755 src/Test/buildKKRMatrixTest_cuda/buildKKRMatrixTest create mode 100644 src/Test/buildKKRMatrixTest_cuda/buildKKRMatrixTest.cpp create mode 100755 src/Test/buildKKRMatrixTest_cuda/buildKKRMatrix_gpu.cu create mode 100755 src/Test/buildKKRMatrixTest_cuda/buildKKRMatrix_gpu.hpp create mode 100755 src/Test/buildKKRMatrixTest_cuda/buildKKRMatrix_kernels.cu create mode 100644 src/Test/buildKKRMatrixTest_cuda/buildKKRMatrix_nrel_ns2.cpp create mode 100644 src/Test/buildKKRMatrixTest_cuda/buildKKRMatrix_original.cpp create mode 100644 src/Test/buildKKRMatrixTest_cuda/calculateGaussLegendrePoints.hpp create mode 100644 src/Test/buildKKRMatrixTest_cuda/cudaCheckError.hpp create mode 100755 src/Test/buildKKRMatrixTest_cuda/makegij_c.f create mode 100644 src/Test/buildKKRMatrixTest_cuda/makegij_new.cpp create mode 100644 src/Test/buildKKRMatrixTest_cuda/plglmax_new.cpp create mode 100644 src/Test/buildKKRMatrixTest_cuda/plglmax_test.cpp create mode 100644 src/Test/buildKKRMatrixTest_cuda/quadrature.cpp create mode 100755 src/Test/buildKKRMatrixTest_cuda/setgij.f create mode 100644 src/Test/buildKKRMatrixTest_kokkos/LIZ_pos.h create mode 100644 src/Test/buildKKRMatrixTest_kokkos/Makefile create mode 100644 src/Test/buildKKRMatrixTest_kokkos/Real.hpp create mode 100644 src/Test/buildKKRMatrixTest_kokkos/TestStructures.hpp create mode 100644 src/Test/buildKKRMatrixTest_kokkos/TypeTraits.hpp create mode 100644 src/Test/buildKKRMatrixTest_kokkos/associatedLegendreFunction.cpp create mode 100644 src/Test/buildKKRMatrixTest_kokkos/associatedLegendreFunction.hpp create mode 100644 src/Test/buildKKRMatrixTest_kokkos/buildKKRMatrixTest.cpp create mode 100644 src/Test/buildKKRMatrixTest_kokkos/buildKKRMatrix_kokkos.cpp create mode 100644 src/Test/buildKKRMatrixTest_kokkos/buildKKRMatrix_nrel_ns2.cpp create mode 100644 src/Test/buildKKRMatrixTest_kokkos/buildKKRMatrix_nrel_ns2.cpp_original create mode 100644 src/Test/buildKKRMatrixTest_kokkos/buildKKRMatrix_original.cpp create mode 100644 src/Test/buildKKRMatrixTest_kokkos/calculateGaussLegendrePoints.hpp create mode 100755 src/Test/buildKKRMatrixTest_kokkos/makegij_c.f create mode 100644 src/Test/buildKKRMatrixTest_kokkos/makegij_new.cpp create mode 100644 src/Test/buildKKRMatrixTest_kokkos/makegij_new.cpp_original create mode 100644 src/Test/buildKKRMatrixTest_kokkos/plglmax_new.cpp create mode 100644 src/Test/buildKKRMatrixTest_kokkos/plglmax_test.cpp create mode 100644 src/Test/buildKKRMatrixTest_kokkos/quadrature.cpp create mode 100755 src/Test/buildKKRMatrixTest_kokkos/setgij.f create mode 100644 src/Test/buildKKRMatrixTest_openacc/LIZ_pos.h create mode 100644 src/Test/buildKKRMatrixTest_openacc/Makefile create mode 100644 src/Test/buildKKRMatrixTest_openacc/Real.hpp create mode 100644 src/Test/buildKKRMatrixTest_openacc/TestStructures.hpp create mode 100644 src/Test/buildKKRMatrixTest_openacc/TypeTraits.hpp create mode 100644 src/Test/buildKKRMatrixTest_openacc/arch-minsky-pgi create mode 100644 src/Test/buildKKRMatrixTest_openacc/associatedLegendreFunction.cpp create mode 100644 src/Test/buildKKRMatrixTest_openacc/associatedLegendreFunction.hpp create mode 100644 src/Test/buildKKRMatrixTest_openacc/buildKKRMatrixTest.cpp create mode 100644 src/Test/buildKKRMatrixTest_openacc/buildKKRMatrix_nrel_ns2.cpp create mode 100644 src/Test/buildKKRMatrixTest_openacc/buildKKRMatrix_original.cpp create mode 100644 src/Test/buildKKRMatrixTest_openacc/c_kkrmat.c create mode 100644 src/Test/buildKKRMatrixTest_openacc/calculateGaussLegendrePoints.hpp create mode 100644 src/Test/buildKKRMatrixTest_openacc/kkrmat_acc-mix.cpp create mode 100644 src/Test/buildKKRMatrixTest_openacc/makegij_c.f create mode 100644 src/Test/buildKKRMatrixTest_openacc/makegij_new.cpp create mode 100644 src/Test/buildKKRMatrixTest_openacc/plglmax_new.cpp create mode 100644 src/Test/buildKKRMatrixTest_openacc/quadrature.cpp create mode 100644 src/Test/buildKKRMatrixTest_openacc/setgij.f create mode 100644 src/Test/testPotentialShift.cpp create mode 100755 src/TotalEnergy/Makefile create mode 100644 src/TotalEnergy/calculateTotalEnergy.cpp create mode 100644 src/TotalEnergy/calculateTotalEnergy.hpp create mode 100644 src/TotalEnergy/janake_c.f create mode 100644 src/TotalEnergy/localTotalEnergy.cpp create mode 100755 src/TotalEnergy/zeropt_c.f create mode 100755 src/VORPOL/Makefile create mode 100644 src/VORPOL/VORPOL.hpp create mode 100755 src/VORPOL/calsig.f create mode 100755 src/VORPOL/caltnode.f create mode 100755 src/VORPOL/celbnd.f create mode 100755 src/VORPOL/chkbnd.f create mode 100755 src/VORPOL/chkedge.f create mode 100755 src/VORPOL/filter_edge.f create mode 100755 src/VORPOL/inter.f create mode 100755 src/VORPOL/inter_dip.f create mode 100755 src/VORPOL/interstitial.f create mode 100755 src/VORPOL/intphi.f create mode 100755 src/VORPOL/intpl0.f create mode 100755 src/VORPOL/invm3.f create mode 100755 src/VORPOL/polyhedron.f create mode 100755 src/VORPOL/rcritpts.f create mode 100644 src/VORPOL/setupVorpol.cpp create mode 100755 src/VORPOL/setup_boundary.f create mode 100755 src/VORPOL/setup_vorpol.f create mode 100755 src/VORPOL/sigma.f create mode 100755 src/VORPOL/sort.f create mode 100755 src/VORPOL/sortidx.f create mode 100755 src/VORPOL/stepyll.f create mode 100755 src/VORPOL/volvor.f diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..1a42181d7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +*.o +*.lo +*.dSYM +*.a +architecture.h +lsms +wl-lsms +rewl-lsms + +lua +luac + +*.aux +*.log +*.toc +lsms_manual.pdf diff --git a/BUILDING_with_libxc b/BUILDING_with_libxc new file mode 100644 index 000000000..f4c59999c --- /dev/null +++ b/BUILDING_with_libxc @@ -0,0 +1,11 @@ +Using libxc: +To use libxc, [http://www.tddft.org/programs/octopus/wiki/index.php/Libxc] + +the script 'build_libxc' will build and install the version of libxc included with LSMS + +configure libxc with --prefix=[LSMS_3 top directory]/opt +compile libxc and install + +to build LSMS: +set USE_LIBXC in the appropriate architecture file +build LSMS diff --git a/CBLAS/Makefile b/CBLAS/Makefile new file mode 100644 index 000000000..ea1344a24 --- /dev/null +++ b/CBLAS/Makefile @@ -0,0 +1,196 @@ +dlvl = ./. +include $(dlvl)/Makefile.in +include ../architecture.h + +all: alllib alltst + +help: + @ echo "Make sure you are using correct Makefile.in for your system." + @ echo "At this level, assuming you have downloded all necessary " + @ echo "files and made an archive file of BLAS routines for your " + @ echo "system." + @ echo " " + @ echo "The Makefile compiles the routines of CBLAS (C interface of " + @ echo "BLAS) and testers for all the precisions. " + @ echo "If there is no directory for archives in CBLAS/lib, it " + @ echo "creates new directory with the name of the platform of your " + @ echo "machine." + @ echo " " + @ echo "To compile, you have to type as follows" + @ echo "make " + @ echo " where is one of:" + @ echo "slib1 --- make an archive of level 1 REAL." + @ echo "dlib1 --- make an archive of level 1 DOUBLE PRECISION." + @ echo "clib1 --- make an archive of level 1 COMPLEX." + @ echo "zlib1 --- make an archive of level 1 COMPLEX*16." + @ echo "alllib1 - make an archive of level 1 all precisions." + @ echo " " + @ echo "slib2 --- make an archive of level 2 REAL." + @ echo "dlib2 --- make an archive of level 2 DOUBLE PRECSION." + @ echo "clib2 --- make an archive of level 2 COMPLEX." + @ echo "zlib2 --- make an archive of level 2 COMPLEX*16." + @ echo "alllib2 - make an archive of level 2 all precisions." + @ echo " " + @ echo "slib3 --- make an archive of level 3 REAL." + @ echo "dlib3 --- make an archive of level 3 DOUBLE PRECISION ." + @ echo "clib3 --- make an archive of level 3 COMPLEX." + @ echo "zlib3 --- make an archive of level 3 COMPLEX*16." + @ echo "alllib3 - make an archive of level 3 all precisions." + @ echo " " + @ echo "alllib -- make an archive for all precisions." + @ echo " " + @ echo "stest1 -- Compiles the tester for level 1 REAL." + @ echo "dtest1 -- Compiles the tester for level 1 DOUBLE PRECISION. " + @ echo "ctest1 -- Compiles the tester for level 1 COMPLEX." + @ echo "ztest1 -- Compiles the tester for level 1 COMPLEX*16." + @ echo "alltst1 - Compiles testers for all precisions of level 1." + @ echo " " + @ echo "stest2 -- Compiles the tester for level 2 REAL." + @ echo "dtest2 -- Compiles the tester for level 2 DOUBLE PRECISION. " + @ echo "ctest2 -- Compiles the tester for level 2 COMPLEX." + @ echo "ztest2 -- Compiles the tester for level 2 COMPLEX*16." + @ echo "alltst2 - Compiles testers for all precisions of level 2." + @ echo " " + @ echo "stest3 -- Compiles the tester for level 3 REAL." + @ echo "dtest3 -- Compiles the tester for level 3 DOUBLE PRECISON. " + @ echo "ctest3 -- Compiles the tester for level 3 COMPLEX." + @ echo "ztest3 -- Compiles the tester for level 3 COMPLEX*16." + @ echo "alltst3 - Compiles testers for all precisions of level 3." + @ echo " " + @ echo "alltst -- Compiles testers for all CBLAS routines." + @ echo "runtst -- Execute testers for all CBLAS routines." + @ echo " " + @ echo "all ----- Creates a library and testers for ALL." + @ echo " " + @ echo "clean --- Erase all the .o and excutable files" + @ echo "cleanlib -- Erase all the .o files" + @ echo "cleanexe -- Erase all the excutable files" + @ echo "rmlib --- Remove a library file." + @ echo " " + @ echo "example -- Creates example1 and example2" + @ echo "example1 -- A small example to exercise the interface " + @ echo "example2 -- Test that cblas_xerbla() is working correctly" + @ echo " " + @ echo " ------- Warning ------- " + @ echo "If you want just to make a tester, make sure you have" + @ echo "already made an archive file out of CBLAS routines." + @ echo " " + @ echo "Written by Keita Teranishi" + @ echo "3/4/98 " + + +# In general, the Makefile call other Makefiles in the sub-directories. + + +clean: + ( cd testing && make clean ) + ( cd src && make clean ) + rm -f *.o cblas_ex1 cblas_ex2 + +cleanobj: + ( cd testing && make cleanobj ) + ( cd src && make clean ) + +cleanexe: + ( cd testing && make cleanexe ) + +rmlib: + ( rm -f $(CBLIB) ) +slib1: sreal1 +dlib1: dreal1 +clib1: scplx1 +zlib1: dcplx1 +slib2: sreal2 +dlib2: dreal2 +clib2: scplx2 +zlib2: dcplx2 +slib3: sreal3 +dlib3: dreal3 +clib3: scplx3 +zlib3: dcplx3 +alllib1: allprecision1 +alllib2: allprecision2 +alllib3: allprecision3 +alllib: allprecision + + +sreal1: + ( cd src && make slib1) +dreal1: + ( cd src && make dlib1) +scplx1: + ( cd src && make clib1) +dcplx1: + ( cd src && make zlib1) +allprecision1: + ( cd src && make all1) +sreal2: + ( cd src && make slib2) +dreal2: + ( cd src && make dlib2) +scplx2: + ( cd src && make clib2) +dcplx2: + ( cd src && make zlib2) +allprecision2: + ( cd src && make all2) +sreal3: + ( cd src && make slib3) +dreal3: + ( cd src && make dlib3) +scplx3: + ( cd src && make clib3) +dcplx3: + ( cd src && make zlib3) +allprecision3: + ( cd src && make all3) +allprecision: + ( cd src && make all) + +stest1: + ( cd testing && make stest1 ) +dtest1: + ( cd testing && make dtest1 ) +ctest1: + ( cd testing && make ctest1 ) +ztest1: + ( cd testing && make ztest1 ) +alltst1: + ( cd testing && make all1 ) +stest2: + ( cd testing && make stest2 ) +dtest2: + ( cd testing && make dtest2 ) +ctest2: + ( cd testing && make ctest2 ) +ztest2: + ( cd testing && make ztest2 ) +alltst2: + ( cd testing && make all2 ) +stest3: + ( cd testing && make stest3 ) +dtest3: + ( cd testing && make dtest3 ) +ctest3: + ( cd testing && make ctest3 ) +ztest3: + ( cd testing && make ztest3 ) +alltst3: + ( cd testing && make all3 ) +alltst: + ( cd testing && make all ) +runtst: + ( cd testing && make run ) + +example: alllib + ( cd examples && make all ) +example1: alllib + ( cd examples && make example1 ) +example2: alllib + ( cd examples && make example1 ) + + +cleanall: + ( cd src && rm -f a.out core *.o $(CBLIB) ) + ( cd testing && rm -f *.out core *.o x[sdcz]cblat[123] ) + ( cd examples && rm -f *.o cblas_ex1 cblas_ex2 ) diff --git a/CBLAS/Makefile.ALPHA b/CBLAS/Makefile.ALPHA new file mode 100644 index 000000000..9cf05f72e --- /dev/null +++ b/CBLAS/Makefile.ALPHA @@ -0,0 +1,50 @@ +# +# Makefile.ALPHA +# +# +# If you compile, change the name to Makefile.in. +# +# + +#----------------------------------------------------------------------------- +# Shell +#----------------------------------------------------------------------------- + +SHELL = /bin/sh + +#----------------------------------------------------------------------------- +# Platform +#----------------------------------------------------------------------------- + +PLAT = ALPHA + +#----------------------------------------------------------------------------- +# Libraries and includs +#----------------------------------------------------------------------------- + +BLLIB = libblas.a +CBLIB = ../lib/cblas_$(PLAT).a + +#----------------------------------------------------------------------------- +# Compilers +#----------------------------------------------------------------------------- + +CC = cc +FC = f77 +LOADER = $(FC) + +#----------------------------------------------------------------------------- +# Flags for Compilers +#----------------------------------------------------------------------------- + +CFLAGS = -std1 -I/usr/include -assume aligned_objects -DADD_ +FFLAGS = -f -u +LOADFLAGS = + +#----------------------------------------------------------------------------- +# Archive programs and flags +#----------------------------------------------------------------------------- + +ARCH = ar +ARCHFLAGS = r +RANLIB = ranlib diff --git a/CBLAS/Makefile.HPPA b/CBLAS/Makefile.HPPA new file mode 100644 index 000000000..b3ceb9bc1 --- /dev/null +++ b/CBLAS/Makefile.HPPA @@ -0,0 +1,50 @@ +# +# Makefile.ALPHA +# +# +# If you compile, change the name to Makefile.in. +# +# + +#----------------------------------------------------------------------------- +# Shell +#----------------------------------------------------------------------------- + +SHELL = /bin/sh + +#----------------------------------------------------------------------------- +# Platform +#----------------------------------------------------------------------------- + +PLAT = HPPA + +#----------------------------------------------------------------------------- +# Libraries and includs +#----------------------------------------------------------------------------- + +BLLIB = libblas.a +CBLIB = ../lib/cblas_$(PLAT).a + +#----------------------------------------------------------------------------- +# Compilers +#----------------------------------------------------------------------------- + +CC = cc +FC = f77 +LOADER = $(FC) + +#----------------------------------------------------------------------------- +# Flags for Compilers +#----------------------------------------------------------------------------- + +CFLAGS = +O4 -Aa -DNOCHANGE +e +FFLAGS = +O4 +LOADFLAGS = + +#----------------------------------------------------------------------------- +# Archive programs and flags +#----------------------------------------------------------------------------- + +ARCH = ar +ARCHFLAGS = r +RANLIB = echo diff --git a/CBLAS/Makefile.LINUX b/CBLAS/Makefile.LINUX new file mode 100644 index 000000000..9dcfbaa7e --- /dev/null +++ b/CBLAS/Makefile.LINUX @@ -0,0 +1,49 @@ +# +# Makefile.LINUX +# +# +# If you compile, change the name to Makefile.in. +# +# + +#----------------------------------------------------------------------------- +# Shell +#----------------------------------------------------------------------------- + +SHELL = /bin/sh + +#----------------------------------------------------------------------------- +# Platform +#----------------------------------------------------------------------------- + +PLAT = LINUX + +#----------------------------------------------------------------------------- +# Libraries and includs +#----------------------------------------------------------------------------- + +BLLIB = libblas.a +CBLIB = ../lib/cblas_$(PLAT).a + +#----------------------------------------------------------------------------- +# Compilers +#----------------------------------------------------------------------------- + +CC = gcc +FC = gfortran +LOADER = $(FC) + +#----------------------------------------------------------------------------- +# Flags for Compilers +#----------------------------------------------------------------------------- + +CFLAGS = -O3 -DADD_ +FFLAGS = -O3 + +#----------------------------------------------------------------------------- +# Archive programs and flags +#----------------------------------------------------------------------------- + +ARCH = ar +ARCHFLAGS = r +RANLIB = echo diff --git a/CBLAS/Makefile.SGI64 b/CBLAS/Makefile.SGI64 new file mode 100644 index 000000000..9790da6fc --- /dev/null +++ b/CBLAS/Makefile.SGI64 @@ -0,0 +1,50 @@ +# +# Makefile.SGI64 +# +# +# If you compile, change the name to Makefile.in. +# +# + +#----------------------------------------------------------------------------- +# Shell +#----------------------------------------------------------------------------- + +SHELL = /bin/sh + +#----------------------------------------------------------------------------- +# Platform +#----------------------------------------------------------------------------- + +PLAT = SGI64 + +#----------------------------------------------------------------------------- +# Libraries and includs +#----------------------------------------------------------------------------- + +BLLIB = libblas.a +CBLIB = ../lib/cblas_$(PLAT).a + +#----------------------------------------------------------------------------- +# Compilers +#----------------------------------------------------------------------------- + +CC = cc +FC = f77 +LOADER = $(FC) + +#----------------------------------------------------------------------------- +# Flags for Compilers +#----------------------------------------------------------------------------- + +CFLAGS = -O3 -DADD_ -64 -mips4 -r10000 +FFLAGS = -O3 -64 -mips4 -r10000 +LOADFLAGS = -64 -mips4 -r10000 + +#----------------------------------------------------------------------------- +# Archive programs and flags +#----------------------------------------------------------------------------- + +ARCH = ar +ARCHFLAGS = cr +RANLIB = echo diff --git a/CBLAS/Makefile.SUN4 b/CBLAS/Makefile.SUN4 new file mode 100644 index 000000000..d7b481400 --- /dev/null +++ b/CBLAS/Makefile.SUN4 @@ -0,0 +1,50 @@ +# +# Makefile.SUN4 +# +# +# If you compile, change the name to Makefile.in. +# +# + +#----------------------------------------------------------------------------- +# Shell +#----------------------------------------------------------------------------- + +SHELL = /bin/sh + +#----------------------------------------------------------------------------- +# Platform +#----------------------------------------------------------------------------- + +PLAT = SUN4 + +#----------------------------------------------------------------------------- +# Libraries and includs +#----------------------------------------------------------------------------- + +BLLIB = libblas.a +CBLIB = ../lib/cblas_$(PLAT).a + +#----------------------------------------------------------------------------- +# Compilers +#----------------------------------------------------------------------------- + +CC = gcc +FC = f77 +LOADER = $(FC) + +#----------------------------------------------------------------------------- +# Flags for Compilers +#----------------------------------------------------------------------------- + +CFLAGS = -g -DADD_ +FFLAGS = -g -u +LOADFLAGS = + +#----------------------------------------------------------------------------- +# Archive programs and flags +#----------------------------------------------------------------------------- + +ARCH = ar +ARCHFLAGS = r +RANLIB = ranlib diff --git a/CBLAS/Makefile.SUN4SOL2 b/CBLAS/Makefile.SUN4SOL2 new file mode 100644 index 000000000..9897233af --- /dev/null +++ b/CBLAS/Makefile.SUN4SOL2 @@ -0,0 +1,50 @@ +# +# Makefile.SUN4SOL2 +# +# +# If you compile, change the name to Makefile.in. +# +# + +#----------------------------------------------------------------------------- +# Shell +#----------------------------------------------------------------------------- + +SHELL = /bin/sh + +#----------------------------------------------------------------------------- +# Platform +#----------------------------------------------------------------------------- + +PLAT = SUN4SOL2 + +#----------------------------------------------------------------------------- +# Libraries and includs +#----------------------------------------------------------------------------- + +BLLIB = libblas.a +CBLIB = ../lib/cblas_$(PLAT).a + +#----------------------------------------------------------------------------- +# Compilers +#----------------------------------------------------------------------------- + +CC = gcc +FC = f77 +LOADER = $(FC) + +#----------------------------------------------------------------------------- +# Flags for Compilers +#----------------------------------------------------------------------------- + +CFLAGS = -g -DADD_ -ansi -pedantic -Wall +FFLAGS = -g -u +LOADFLAGS = + +#----------------------------------------------------------------------------- +# Archive programs and flags +#----------------------------------------------------------------------------- + +ARCH = ar +ARCHFLAGS = r +RANLIB = echo diff --git a/CBLAS/Makefile.in b/CBLAS/Makefile.in new file mode 100644 index 000000000..e00db1015 --- /dev/null +++ b/CBLAS/Makefile.in @@ -0,0 +1,52 @@ +# +# Makefile.LINUX +# +# +# If you compile, change the name to Makefile.in. +# +# + +#----------------------------------------------------------------------------- +# Shell +#----------------------------------------------------------------------------- + +SHELL = /bin/sh + +#----------------------------------------------------------------------------- +# Platform +#----------------------------------------------------------------------------- + +PLAT = LINUX + +#----------------------------------------------------------------------------- +# Libraries and includes +#----------------------------------------------------------------------------- + +BLLIB = /Users/julie/Documents/Boulot/lapack-dev/lapack/trunk/blas_LINUX.a +CBLIB = ../lib/libcblas_$(PLAT).a + +#----------------------------------------------------------------------------- +# Compilers +#----------------------------------------------------------------------------- + +#CC = gcc +#FC = gfortran +#CC = cc -hwp -hpl=$(TOP_DIR)/hpl.cce +#FC = ftn -hwp -hpl=$(TOP_DIR)/hpl.cce +FC=$(F77) +LOADER = $(FC) + +#----------------------------------------------------------------------------- +# Flags for Compilers +#----------------------------------------------------------------------------- + +CFLAGS += -O3 -DADD_ +FFLAGS += -O3 + +#----------------------------------------------------------------------------- +# Archive programs and flags +#----------------------------------------------------------------------------- + +ARCH = ar +ARCHFLAGS = cr +RANLIB = ranlib diff --git a/CBLAS/README b/CBLAS/README new file mode 100644 index 000000000..25492793a --- /dev/null +++ b/CBLAS/README @@ -0,0 +1,62 @@ +INSTALLATION + + Please execute the following first: + + prompt> ln -s Makefile.ARCH Makefile.in + + where ARCH is one of ALPHA, HPPA, LINUX, SGI64, SUN4, SUN4SOL2, or + your own version (which should be trivial to do for other architectures). + Make sure to set these variables appropriately in your Makefile.ARCH: + + CBDIR is the directory where you unpacked the tar file + BLLIB is your Legacy BLAS library + + Then type: + + prompt> make help + + which will give you a detailed listing of targets to make. + +EXECUTING THE TESTERS + + Type: + +./testing/xscblat1 +./testing/xdcblat1 +./testing/xccblat1 +./testing/xzcblat1 +./testing/xscblat2 < testing/sin2 +./testing/xdcblat2 < testing/din2 +./testing/xccblat2 < testing/cin2 +./testing/xzcblat2 < testing/zin2 +./testing/xscblat3 < testing/sin3 +./testing/xdcblat3 < testing/din3 +./testing/xccblat3 < testing/cin3 +./testing/xzcblat3 < testing/zin3 +_______________________________________________________________________________ + + This package contains C interface to Legacy BLAS. + If you want to know how to use makefile, type 'make help.' + +Written by Keita Teranishi (5/20/98) +_______________________________________________________________________________ + + This release updates an inconsistency between the BLAST document and + the interface. According to the document, the enumerated types for + the C interface to the BLAS are not typedef'ed. + + It also updates the Level 2 and 3 testers which check for correct + exiting of routines when called with bad arguments. This is done by + overriding the Legacy BLAS library's implementation of xerbla(). If + this cannot be done ( for instance one cannot override some calls + to xerbla() in Sun's Performance library), then correct error + exiting cannot be checked. + +Updated by Jeff Horner (3/15/99) +_______________________________________________________________________________ + +Updated by R. Clint Whaley (2/23/03): + +Fixed the i?amax error that I reported three years ago: standard dictates +IAMAX return vals in range 0 <= iamax < N, but reference was mistakenly +returning like F77: 0 < iamax <= N. diff --git a/CBLAS/examples/Makefile b/CBLAS/examples/Makefile new file mode 100644 index 000000000..507990563 --- /dev/null +++ b/CBLAS/examples/Makefile @@ -0,0 +1,15 @@ +dlvl = ./. +include $(dlvl)/../Makefile.in + +all: example1 example2 + +example1: + $(CC) -c $(CFLAGS) -I../src cblas_example1.c + $(LOADER) -o cblas_ex1 cblas_example1.o $(CBLIB) $(BLLIB) + +example2: + $(CC) -c $(CFLAGS) -I../src cblas_example2.c + $(LOADER) -o cblas_ex2 cblas_example2.o $(CBLIB) $(BLLIB) + +cleanall: + rm -f *.o cblas_ex1 cblas_ex2 diff --git a/CBLAS/examples/cblas_example1.c b/CBLAS/examples/cblas_example1.c new file mode 100644 index 000000000..2d91f33f4 --- /dev/null +++ b/CBLAS/examples/cblas_example1.c @@ -0,0 +1,69 @@ +/* cblas_example.c */ + +#include +#include +#include "cblas.h" + +int main ( ) +{ + enum CBLAS_ORDER order; + enum CBLAS_TRANSPOSE transa; + + double *a, *x, *y; + double alpha, beta; + int m, n, lda, incx, incy, i; + + order = CblasColMajor; + transa = CblasNoTrans; + + m = 4; /* Size of Column ( the number of rows ) */ + n = 4; /* Size of Row ( the number of columns ) */ + lda = 4; /* Leading dimension of 5 * 4 matrix is 5 */ + incx = 1; + incy = 1; + alpha = 1; + beta = 0; + + a = (double *)malloc(sizeof(double)*m*n); + x = (double *)malloc(sizeof(double)*n); + y = (double *)malloc(sizeof(double)*n); + /* The elements of the first column */ + a[0] = 1; + a[1] = 2; + a[2] = 3; + a[3] = 4; + /* The elements of the second column */ + a[m] = 1; + a[m+1] = 1; + a[m+2] = 1; + a[m+3] = 1; + /* The elements of the third column */ + a[m*2] = 3; + a[m*2+1] = 4; + a[m*2+2] = 5; + a[m*2+3] = 6; + /* The elements of the fourth column */ + a[m*3] = 5; + a[m*3+1] = 6; + a[m*3+2] = 7; + a[m*3+3] = 8; + /* The elemetns of x and y */ + x[0] = 1; + x[1] = 2; + x[2] = 1; + x[3] = 1; + y[0] = 0; + y[1] = 0; + y[2] = 0; + y[3] = 0; + + cblas_dgemv( order, transa, m, n, alpha, a, lda, x, incx, beta, + y, incy ); + /* Print y */ + for( i = 0; i < n; i++ ) + printf(" y%d = %f\n", i, y[i]); + free(a); + free(x); + free(y); + return 1; +} diff --git a/CBLAS/examples/cblas_example2.c b/CBLAS/examples/cblas_example2.c new file mode 100644 index 000000000..b5a464c05 --- /dev/null +++ b/CBLAS/examples/cblas_example2.c @@ -0,0 +1,72 @@ +/* cblas_example2.c */ + +#include +#include +#include "cblas.h" +#include "cblas_f77.h" + +#define INVALID -1 + +int main (int argc, char **argv ) +{ + int rout=-1,info=0,m,n,k,lda,ldb,ldc; + double A[2] = {0.0,0.0}, + B[2] = {0.0,0.0}, + C[2] = {0.0,0.0}, + ALPHA=0.0, BETA=0.0; + + if (argc > 2){ + rout = atoi(argv[1]); + info = atoi(argv[2]); + } + + if (rout == 1) { + if (info==0) { + printf("Checking if cblas_dgemm fails on parameter 4\n"); + cblas_dgemm( CblasRowMajor, CblasTrans, CblasNoTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + } + if (info==1) { + printf("Checking if cblas_dgemm fails on parameter 5\n"); + cblas_dgemm( CblasRowMajor, CblasNoTrans, CblasTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + } + if (info==2) { + printf("Checking if cblas_dgemm fails on parameter 9\n"); + cblas_dgemm( CblasRowMajor, CblasNoTrans, CblasNoTrans, 0, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 2 ); + } + if (info==3) { + printf("Checking if cblas_dgemm fails on parameter 11\n"); + cblas_dgemm( CblasRowMajor, CblasNoTrans, CblasNoTrans, 0, 2, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + } + } else { + if (info==0) { + printf("Checking if F77_dgemm fails on parameter 3\n"); + m=INVALID; n=0; k=0; lda=1; ldb=1; ldc=1; + F77_dgemm( "T", "N", &m, &n, &k, + &ALPHA, A, &lda, B, &ldb, &BETA, C, &ldc ); + } + if (info==1) { + m=0; n=INVALID; k=0; lda=1; ldb=1; ldc=1; + printf("Checking if F77_dgemm fails on parameter 4\n"); + F77_dgemm( "N", "T", &m, &n, &k, + &ALPHA, A, &lda, B, &ldb, &BETA, C, &ldc ); + } + if (info==2) { + printf("Checking if F77_dgemm fails on parameter 8\n"); + m=2; n=0; k=0; lda=1; ldb=1; ldc=2; + F77_dgemm( "N", "N" , &m, &n, &k, + &ALPHA, A, &lda, B, &ldb, &BETA, C, &ldc ); + } + if (info==3) { + printf("Checking if F77_dgemm fails on parameter 10\n"); + m=0; n=0; k=2; lda=1; ldb=1; ldc=1; + F77_dgemm( "N", "N" , &m, &n, &k, + &ALPHA, A, &lda, B, &ldb, &BETA, C, &ldc ); + } + } + + return 1; +} diff --git a/CBLAS/include/cblas.h b/CBLAS/include/cblas.h new file mode 100644 index 000000000..f91557e74 --- /dev/null +++ b/CBLAS/include/cblas.h @@ -0,0 +1,575 @@ +#ifndef CBLAS_H +#define CBLAS_H +#include + +/* + * Enumerated and derived types + */ +#define CBLAS_INDEX size_t /* this may vary between platforms */ + +enum CBLAS_ORDER {CblasRowMajor=101, CblasColMajor=102}; +enum CBLAS_TRANSPOSE {CblasNoTrans=111, CblasTrans=112, CblasConjTrans=113}; +enum CBLAS_UPLO {CblasUpper=121, CblasLower=122}; +enum CBLAS_DIAG {CblasNonUnit=131, CblasUnit=132}; +enum CBLAS_SIDE {CblasLeft=141, CblasRight=142}; + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * =========================================================================== + * Prototypes for level 1 BLAS functions (complex are recast as routines) + * =========================================================================== + */ +float cblas_sdsdot(const int N, const float alpha, const float *X, + const int incX, const float *Y, const int incY); +double cblas_dsdot(const int N, const float *X, const int incX, const float *Y, + const int incY); +float cblas_sdot(const int N, const float *X, const int incX, + const float *Y, const int incY); +double cblas_ddot(const int N, const double *X, const int incX, + const double *Y, const int incY); + +/* + * Functions having prefixes Z and C only + */ +void cblas_cdotu_sub(const int N, const void *X, const int incX, + const void *Y, const int incY, void *dotu); +void cblas_cdotc_sub(const int N, const void *X, const int incX, + const void *Y, const int incY, void *dotc); + +void cblas_zdotu_sub(const int N, const void *X, const int incX, + const void *Y, const int incY, void *dotu); +void cblas_zdotc_sub(const int N, const void *X, const int incX, + const void *Y, const int incY, void *dotc); + + +/* + * Functions having prefixes S D SC DZ + */ +float cblas_snrm2(const int N, const float *X, const int incX); +float cblas_sasum(const int N, const float *X, const int incX); + +double cblas_dnrm2(const int N, const double *X, const int incX); +double cblas_dasum(const int N, const double *X, const int incX); + +float cblas_scnrm2(const int N, const void *X, const int incX); +float cblas_scasum(const int N, const void *X, const int incX); + +double cblas_dznrm2(const int N, const void *X, const int incX); +double cblas_dzasum(const int N, const void *X, const int incX); + + +/* + * Functions having standard 4 prefixes (S D C Z) + */ +CBLAS_INDEX cblas_isamax(const int N, const float *X, const int incX); +CBLAS_INDEX cblas_idamax(const int N, const double *X, const int incX); +CBLAS_INDEX cblas_icamax(const int N, const void *X, const int incX); +CBLAS_INDEX cblas_izamax(const int N, const void *X, const int incX); + +/* + * =========================================================================== + * Prototypes for level 1 BLAS routines + * =========================================================================== + */ + +/* + * Routines with standard 4 prefixes (s, d, c, z) + */ +void cblas_sswap(const int N, float *X, const int incX, + float *Y, const int incY); +void cblas_scopy(const int N, const float *X, const int incX, + float *Y, const int incY); +void cblas_saxpy(const int N, const float alpha, const float *X, + const int incX, float *Y, const int incY); + +void cblas_dswap(const int N, double *X, const int incX, + double *Y, const int incY); +void cblas_dcopy(const int N, const double *X, const int incX, + double *Y, const int incY); +void cblas_daxpy(const int N, const double alpha, const double *X, + const int incX, double *Y, const int incY); + +void cblas_cswap(const int N, void *X, const int incX, + void *Y, const int incY); +void cblas_ccopy(const int N, const void *X, const int incX, + void *Y, const int incY); +void cblas_caxpy(const int N, const void *alpha, const void *X, + const int incX, void *Y, const int incY); + +void cblas_zswap(const int N, void *X, const int incX, + void *Y, const int incY); +void cblas_zcopy(const int N, const void *X, const int incX, + void *Y, const int incY); +void cblas_zaxpy(const int N, const void *alpha, const void *X, + const int incX, void *Y, const int incY); + + +/* + * Routines with S and D prefix only + */ +void cblas_srotg(float *a, float *b, float *c, float *s); +void cblas_srotmg(float *d1, float *d2, float *b1, const float b2, float *P); +void cblas_srot(const int N, float *X, const int incX, + float *Y, const int incY, const float c, const float s); +void cblas_srotm(const int N, float *X, const int incX, + float *Y, const int incY, const float *P); + +void cblas_drotg(double *a, double *b, double *c, double *s); +void cblas_drotmg(double *d1, double *d2, double *b1, const double b2, double *P); +void cblas_drot(const int N, double *X, const int incX, + double *Y, const int incY, const double c, const double s); +void cblas_drotm(const int N, double *X, const int incX, + double *Y, const int incY, const double *P); + + +/* + * Routines with S D C Z CS and ZD prefixes + */ +void cblas_sscal(const int N, const float alpha, float *X, const int incX); +void cblas_dscal(const int N, const double alpha, double *X, const int incX); +void cblas_cscal(const int N, const void *alpha, void *X, const int incX); +void cblas_zscal(const int N, const void *alpha, void *X, const int incX); +void cblas_csscal(const int N, const float alpha, void *X, const int incX); +void cblas_zdscal(const int N, const double alpha, void *X, const int incX); + +/* + * =========================================================================== + * Prototypes for level 2 BLAS + * =========================================================================== + */ + +/* + * Routines with standard 4 prefixes (S, D, C, Z) + */ +void cblas_sgemv(const enum CBLAS_ORDER order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const float alpha, const float *A, const int lda, + const float *X, const int incX, const float beta, + float *Y, const int incY); +void cblas_sgbmv(const enum CBLAS_ORDER order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const int KL, const int KU, const float alpha, + const float *A, const int lda, const float *X, + const int incX, const float beta, float *Y, const int incY); +void cblas_strmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const float *A, const int lda, + float *X, const int incX); +void cblas_stbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const float *A, const int lda, + float *X, const int incX); +void cblas_stpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const float *Ap, float *X, const int incX); +void cblas_strsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const float *A, const int lda, float *X, + const int incX); +void cblas_stbsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const float *A, const int lda, + float *X, const int incX); +void cblas_stpsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const float *Ap, float *X, const int incX); + +void cblas_dgemv(const enum CBLAS_ORDER order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const double alpha, const double *A, const int lda, + const double *X, const int incX, const double beta, + double *Y, const int incY); +void cblas_dgbmv(const enum CBLAS_ORDER order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const int KL, const int KU, const double alpha, + const double *A, const int lda, const double *X, + const int incX, const double beta, double *Y, const int incY); +void cblas_dtrmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const double *A, const int lda, + double *X, const int incX); +void cblas_dtbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const double *A, const int lda, + double *X, const int incX); +void cblas_dtpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const double *Ap, double *X, const int incX); +void cblas_dtrsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const double *A, const int lda, double *X, + const int incX); +void cblas_dtbsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const double *A, const int lda, + double *X, const int incX); +void cblas_dtpsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const double *Ap, double *X, const int incX); + +void cblas_cgemv(const enum CBLAS_ORDER order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const void *alpha, const void *A, const int lda, + const void *X, const int incX, const void *beta, + void *Y, const int incY); +void cblas_cgbmv(const enum CBLAS_ORDER order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const int KL, const int KU, const void *alpha, + const void *A, const int lda, const void *X, + const int incX, const void *beta, void *Y, const int incY); +void cblas_ctrmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *A, const int lda, + void *X, const int incX); +void cblas_ctbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const void *A, const int lda, + void *X, const int incX); +void cblas_ctpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *Ap, void *X, const int incX); +void cblas_ctrsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *A, const int lda, void *X, + const int incX); +void cblas_ctbsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const void *A, const int lda, + void *X, const int incX); +void cblas_ctpsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *Ap, void *X, const int incX); + +void cblas_zgemv(const enum CBLAS_ORDER order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const void *alpha, const void *A, const int lda, + const void *X, const int incX, const void *beta, + void *Y, const int incY); +void cblas_zgbmv(const enum CBLAS_ORDER order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const int KL, const int KU, const void *alpha, + const void *A, const int lda, const void *X, + const int incX, const void *beta, void *Y, const int incY); +void cblas_ztrmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *A, const int lda, + void *X, const int incX); +void cblas_ztbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const void *A, const int lda, + void *X, const int incX); +void cblas_ztpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *Ap, void *X, const int incX); +void cblas_ztrsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *A, const int lda, void *X, + const int incX); +void cblas_ztbsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const void *A, const int lda, + void *X, const int incX); +void cblas_ztpsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *Ap, void *X, const int incX); + + +/* + * Routines with S and D prefixes only + */ +void cblas_ssymv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const float *A, + const int lda, const float *X, const int incX, + const float beta, float *Y, const int incY); +void cblas_ssbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const int K, const float alpha, const float *A, + const int lda, const float *X, const int incX, + const float beta, float *Y, const int incY); +void cblas_sspmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const float *Ap, + const float *X, const int incX, + const float beta, float *Y, const int incY); +void cblas_sger(const enum CBLAS_ORDER order, const int M, const int N, + const float alpha, const float *X, const int incX, + const float *Y, const int incY, float *A, const int lda); +void cblas_ssyr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const float *X, + const int incX, float *A, const int lda); +void cblas_sspr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const float *X, + const int incX, float *Ap); +void cblas_ssyr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const float *X, + const int incX, const float *Y, const int incY, float *A, + const int lda); +void cblas_sspr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const float *X, + const int incX, const float *Y, const int incY, float *A); + +void cblas_dsymv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const double *A, + const int lda, const double *X, const int incX, + const double beta, double *Y, const int incY); +void cblas_dsbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const int K, const double alpha, const double *A, + const int lda, const double *X, const int incX, + const double beta, double *Y, const int incY); +void cblas_dspmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const double *Ap, + const double *X, const int incX, + const double beta, double *Y, const int incY); +void cblas_dger(const enum CBLAS_ORDER order, const int M, const int N, + const double alpha, const double *X, const int incX, + const double *Y, const int incY, double *A, const int lda); +void cblas_dsyr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const double *X, + const int incX, double *A, const int lda); +void cblas_dspr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const double *X, + const int incX, double *Ap); +void cblas_dsyr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const double *X, + const int incX, const double *Y, const int incY, double *A, + const int lda); +void cblas_dspr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const double *X, + const int incX, const double *Y, const int incY, double *A); + + +/* + * Routines with C and Z prefixes only + */ +void cblas_chemv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const void *alpha, const void *A, + const int lda, const void *X, const int incX, + const void *beta, void *Y, const int incY); +void cblas_chbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const int K, const void *alpha, const void *A, + const int lda, const void *X, const int incX, + const void *beta, void *Y, const int incY); +void cblas_chpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const void *alpha, const void *Ap, + const void *X, const int incX, + const void *beta, void *Y, const int incY); +void cblas_cgeru(const enum CBLAS_ORDER order, const int M, const int N, + const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *A, const int lda); +void cblas_cgerc(const enum CBLAS_ORDER order, const int M, const int N, + const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *A, const int lda); +void cblas_cher(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const void *X, const int incX, + void *A, const int lda); +void cblas_chpr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const void *X, + const int incX, void *A); +void cblas_cher2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, + const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *A, const int lda); +void cblas_chpr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, + const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *Ap); + +void cblas_zhemv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const void *alpha, const void *A, + const int lda, const void *X, const int incX, + const void *beta, void *Y, const int incY); +void cblas_zhbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const int K, const void *alpha, const void *A, + const int lda, const void *X, const int incX, + const void *beta, void *Y, const int incY); +void cblas_zhpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const void *alpha, const void *Ap, + const void *X, const int incX, + const void *beta, void *Y, const int incY); +void cblas_zgeru(const enum CBLAS_ORDER order, const int M, const int N, + const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *A, const int lda); +void cblas_zgerc(const enum CBLAS_ORDER order, const int M, const int N, + const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *A, const int lda); +void cblas_zher(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const void *X, const int incX, + void *A, const int lda); +void cblas_zhpr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const void *X, + const int incX, void *A); +void cblas_zher2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, + const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *A, const int lda); +void cblas_zhpr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, + const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *Ap); + +/* + * =========================================================================== + * Prototypes for level 3 BLAS + * =========================================================================== + */ + +/* + * Routines with standard 4 prefixes (S, D, C, Z) + */ +void cblas_sgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_TRANSPOSE TransB, const int M, const int N, + const int K, const float alpha, const float *A, + const int lda, const float *B, const int ldb, + const float beta, float *C, const int ldc); +void cblas_ssymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const int M, const int N, + const float alpha, const float *A, const int lda, + const float *B, const int ldb, const float beta, + float *C, const int ldc); +void cblas_ssyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const float alpha, const float *A, const int lda, + const float beta, float *C, const int ldc); +void cblas_ssyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const float alpha, const float *A, const int lda, + const float *B, const int ldb, const float beta, + float *C, const int ldc); +void cblas_strmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const float alpha, const float *A, const int lda, + float *B, const int ldb); +void cblas_strsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const float alpha, const float *A, const int lda, + float *B, const int ldb); + +void cblas_dgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_TRANSPOSE TransB, const int M, const int N, + const int K, const double alpha, const double *A, + const int lda, const double *B, const int ldb, + const double beta, double *C, const int ldc); +void cblas_dsymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const int M, const int N, + const double alpha, const double *A, const int lda, + const double *B, const int ldb, const double beta, + double *C, const int ldc); +void cblas_dsyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const double alpha, const double *A, const int lda, + const double beta, double *C, const int ldc); +void cblas_dsyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const double alpha, const double *A, const int lda, + const double *B, const int ldb, const double beta, + double *C, const int ldc); +void cblas_dtrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const double alpha, const double *A, const int lda, + double *B, const int ldb); +void cblas_dtrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const double alpha, const double *A, const int lda, + double *B, const int ldb); + +void cblas_cgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_TRANSPOSE TransB, const int M, const int N, + const int K, const void *alpha, const void *A, + const int lda, const void *B, const int ldb, + const void *beta, void *C, const int ldc); +void cblas_csymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const int M, const int N, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const void *beta, + void *C, const int ldc); +void cblas_csyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const void *alpha, const void *A, const int lda, + const void *beta, void *C, const int ldc); +void cblas_csyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const void *beta, + void *C, const int ldc); +void cblas_ctrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const void *alpha, const void *A, const int lda, + void *B, const int ldb); +void cblas_ctrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const void *alpha, const void *A, const int lda, + void *B, const int ldb); + +void cblas_zgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_TRANSPOSE TransB, const int M, const int N, + const int K, const void *alpha, const void *A, + const int lda, const void *B, const int ldb, + const void *beta, void *C, const int ldc); +void cblas_zsymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const int M, const int N, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const void *beta, + void *C, const int ldc); +void cblas_zsyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const void *alpha, const void *A, const int lda, + const void *beta, void *C, const int ldc); +void cblas_zsyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const void *beta, + void *C, const int ldc); +void cblas_ztrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const void *alpha, const void *A, const int lda, + void *B, const int ldb); +void cblas_ztrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const void *alpha, const void *A, const int lda, + void *B, const int ldb); + + +/* + * Routines with prefixes C and Z only + */ +void cblas_chemm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const int M, const int N, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const void *beta, + void *C, const int ldc); +void cblas_cherk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const float alpha, const void *A, const int lda, + const float beta, void *C, const int ldc); +void cblas_cher2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const float beta, + void *C, const int ldc); + +void cblas_zhemm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const int M, const int N, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const void *beta, + void *C, const int ldc); +void cblas_zherk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const double alpha, const void *A, const int lda, + const double beta, void *C, const int ldc); +void cblas_zher2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const double beta, + void *C, const int ldc); + +void cblas_xerbla(int p, const char *rout, const char *form, ...); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/CBLAS/include/cblas_f77.h b/CBLAS/include/cblas_f77.h new file mode 100644 index 000000000..18435cd30 --- /dev/null +++ b/CBLAS/include/cblas_f77.h @@ -0,0 +1,701 @@ +/* + * cblas_f77.h + * Written by Keita Teranishi + * + * Updated by Jeff Horner + * Merged cblas_f77.h and cblas_fortran_header.h + */ + +#ifndef CBLAS_F77_H +#define CBLAS_f77_H + +#ifdef CRAY + #include + #define F77_CHAR _fcd + #define C2F_CHAR(a) ( _cptofcd( (a), 1 ) ) + #define C2F_STR(a, i) ( _cptofcd( (a), (i) ) ) + #define F77_STRLEN(a) (_fcdlen) +#endif + +#ifdef WeirdNEC + #define F77_INT long +#endif + +#ifdef F77_CHAR + #define FCHAR F77_CHAR +#else + #define FCHAR char * +#endif + +#ifdef F77_INT + #define FINT const F77_INT * + #define FINT2 F77_INT * +#else + #define FINT const int * + #define FINT2 int * +#endif + +#if defined(ADD_) +/* + * Level 1 BLAS + */ +#define F77_xerbla xerbla_ + #define F77_srotg srotg_ + #define F77_srotmg srotmg_ + #define F77_srot srot_ + #define F77_srotm srotm_ + #define F77_drotg drotg_ + #define F77_drotmg drotmg_ + #define F77_drot drot_ + #define F77_drotm drotm_ + #define F77_sswap sswap_ + #define F77_scopy scopy_ + #define F77_saxpy saxpy_ + #define F77_isamax_sub isamaxsub_ + #define F77_dswap dswap_ + #define F77_dcopy dcopy_ + #define F77_daxpy daxpy_ + #define F77_idamax_sub idamaxsub_ + #define F77_cswap cswap_ + #define F77_ccopy ccopy_ + #define F77_caxpy caxpy_ + #define F77_icamax_sub icamaxsub_ + #define F77_zswap zswap_ + #define F77_zcopy zcopy_ + #define F77_zaxpy zaxpy_ + #define F77_izamax_sub izamaxsub_ + #define F77_sdot_sub sdotsub_ + #define F77_ddot_sub ddotsub_ + #define F77_dsdot_sub dsdotsub_ + #define F77_sscal sscal_ + #define F77_dscal dscal_ + #define F77_cscal cscal_ + #define F77_zscal zscal_ + #define F77_csscal csscal_ + #define F77_zdscal zdscal_ + #define F77_cdotu_sub cdotusub_ + #define F77_cdotc_sub cdotcsub_ + #define F77_zdotu_sub zdotusub_ + #define F77_zdotc_sub zdotcsub_ + #define F77_snrm2_sub snrm2sub_ + #define F77_sasum_sub sasumsub_ + #define F77_dnrm2_sub dnrm2sub_ + #define F77_dasum_sub dasumsub_ + #define F77_scnrm2_sub scnrm2sub_ + #define F77_scasum_sub scasumsub_ + #define F77_dznrm2_sub dznrm2sub_ + #define F77_dzasum_sub dzasumsub_ + #define F77_sdsdot_sub sdsdotsub_ +/* + * Level 2 BLAS + */ + #define F77_ssymv ssymv_ + #define F77_ssbmv ssbmv_ + #define F77_sspmv sspmv_ + #define F77_sger sger_ + #define F77_ssyr ssyr_ + #define F77_sspr sspr_ + #define F77_ssyr2 ssyr2_ + #define F77_sspr2 sspr2_ + #define F77_dsymv dsymv_ + #define F77_dsbmv dsbmv_ + #define F77_dspmv dspmv_ + #define F77_dger dger_ + #define F77_dsyr dsyr_ + #define F77_dspr dspr_ + #define F77_dsyr2 dsyr2_ + #define F77_dspr2 dspr2_ + #define F77_chemv chemv_ + #define F77_chbmv chbmv_ + #define F77_chpmv chpmv_ + #define F77_cgeru cgeru_ + #define F77_cgerc cgerc_ + #define F77_cher cher_ + #define F77_chpr chpr_ + #define F77_cher2 cher2_ + #define F77_chpr2 chpr2_ + #define F77_zhemv zhemv_ + #define F77_zhbmv zhbmv_ + #define F77_zhpmv zhpmv_ + #define F77_zgeru zgeru_ + #define F77_zgerc zgerc_ + #define F77_zher zher_ + #define F77_zhpr zhpr_ + #define F77_zher2 zher2_ + #define F77_zhpr2 zhpr2_ + #define F77_sgemv sgemv_ + #define F77_sgbmv sgbmv_ + #define F77_strmv strmv_ + #define F77_stbmv stbmv_ + #define F77_stpmv stpmv_ + #define F77_strsv strsv_ + #define F77_stbsv stbsv_ + #define F77_stpsv stpsv_ + #define F77_dgemv dgemv_ + #define F77_dgbmv dgbmv_ + #define F77_dtrmv dtrmv_ + #define F77_dtbmv dtbmv_ + #define F77_dtpmv dtpmv_ + #define F77_dtrsv dtrsv_ + #define F77_dtbsv dtbsv_ + #define F77_dtpsv dtpsv_ + #define F77_cgemv cgemv_ + #define F77_cgbmv cgbmv_ + #define F77_ctrmv ctrmv_ + #define F77_ctbmv ctbmv_ + #define F77_ctpmv ctpmv_ + #define F77_ctrsv ctrsv_ + #define F77_ctbsv ctbsv_ + #define F77_ctpsv ctpsv_ + #define F77_zgemv zgemv_ + #define F77_zgbmv zgbmv_ + #define F77_ztrmv ztrmv_ + #define F77_ztbmv ztbmv_ + #define F77_ztpmv ztpmv_ + #define F77_ztrsv ztrsv_ + #define F77_ztbsv ztbsv_ + #define F77_ztpsv ztpsv_ +/* + * Level 3 BLAS + */ + #define F77_chemm chemm_ + #define F77_cherk cherk_ + #define F77_cher2k cher2k_ + #define F77_zhemm zhemm_ + #define F77_zherk zherk_ + #define F77_zher2k zher2k_ + #define F77_sgemm sgemm_ + #define F77_ssymm ssymm_ + #define F77_ssyrk ssyrk_ + #define F77_ssyr2k ssyr2k_ + #define F77_strmm strmm_ + #define F77_strsm strsm_ + #define F77_dgemm dgemm_ + #define F77_dsymm dsymm_ + #define F77_dsyrk dsyrk_ + #define F77_dsyr2k dsyr2k_ + #define F77_dtrmm dtrmm_ + #define F77_dtrsm dtrsm_ + #define F77_cgemm cgemm_ + #define F77_csymm csymm_ + #define F77_csyrk csyrk_ + #define F77_csyr2k csyr2k_ + #define F77_ctrmm ctrmm_ + #define F77_ctrsm ctrsm_ + #define F77_zgemm zgemm_ + #define F77_zsymm zsymm_ + #define F77_zsyrk zsyrk_ + #define F77_zsyr2k zsyr2k_ + #define F77_ztrmm ztrmm_ + #define F77_ztrsm ztrsm_ +#elif defined(UPCASE) +/* + * Level 1 BLAS + */ +#define F77_xerbla XERBLA + #define F77_srotg SROTG + #define F77_srotmg SROTMG + #define F77_srot SROT + #define F77_srotm SROTM + #define F77_drotg DROTG + #define F77_drotmg DROTMG + #define F77_drot DROT + #define F77_drotm DROTM + #define F77_sswap SSWAP + #define F77_scopy SCOPY + #define F77_saxpy SAXPY + #define F77_isamax_sub ISAMAXSUB + #define F77_dswap DSWAP + #define F77_dcopy DCOPY + #define F77_daxpy DAXPY + #define F77_idamax_sub IDAMAXSUB + #define F77_cswap CSWAP + #define F77_ccopy CCOPY + #define F77_caxpy CAXPY + #define F77_icamax_sub ICAMAXSUB + #define F77_zswap ZSWAP + #define F77_zcopy ZCOPY + #define F77_zaxpy ZAXPY + #define F77_izamax_sub IZAMAXSUB + #define F77_sdot_sub SDOTSUB + #define F77_ddot_sub DDOTSUB + #define F77_dsdot_sub DSDOTSUB + #define F77_sscal SSCAL + #define F77_dscal DSCAL + #define F77_cscal CSCAL + #define F77_zscal ZSCAL + #define F77_csscal CSSCAL + #define F77_zdscal ZDSCAL + #define F77_cdotu_sub CDOTUSUB + #define F77_cdotc_sub CDOTCSUB + #define F77_zdotu_sub ZDOTUSUB + #define F77_zdotc_sub ZDOTCSUB + #define F77_snrm2_sub SNRM2SUB + #define F77_sasum_sub SASUMSUB + #define F77_dnrm2_sub DNRM2SUB + #define F77_dasum_sub DASUMSUB + #define F77_scnrm2_sub SCNRM2SUB + #define F77_scasum_sub SCASUMSUB + #define F77_dznrm2_sub DZNRM2SUB + #define F77_dzasum_sub DZASUMSUB + #define F77_sdsdot_sub SDSDOTSUB +/* + * Level 2 BLAS + */ + #define F77_ssymv SSYMV + #define F77_ssbmv SSBMV + #define F77_sspmv SSPMV + #define F77_sger SGER + #define F77_ssyr SSYR + #define F77_sspr SSPR + #define F77_ssyr2 SSYR2 + #define F77_sspr2 SSPR2 + #define F77_dsymv DSYMV + #define F77_dsbmv DSBMV + #define F77_dspmv DSPMV + #define F77_dger DGER + #define F77_dsyr DSYR + #define F77_dspr DSPR + #define F77_dsyr2 DSYR2 + #define F77_dspr2 DSPR2 + #define F77_chemv CHEMV + #define F77_chbmv CHBMV + #define F77_chpmv CHPMV + #define F77_cgeru CGERU + #define F77_cgerc CGERC + #define F77_cher CHER + #define F77_chpr CHPR + #define F77_cher2 CHER2 + #define F77_chpr2 CHPR2 + #define F77_zhemv ZHEMV + #define F77_zhbmv ZHBMV + #define F77_zhpmv ZHPMV + #define F77_zgeru ZGERU + #define F77_zgerc ZGERC + #define F77_zher ZHER + #define F77_zhpr ZHPR + #define F77_zher2 ZHER2 + #define F77_zhpr2 ZHPR2 + #define F77_sgemv SGEMV + #define F77_sgbmv SGBMV + #define F77_strmv STRMV + #define F77_stbmv STBMV + #define F77_stpmv STPMV + #define F77_strsv STRSV + #define F77_stbsv STBSV + #define F77_stpsv STPSV + #define F77_dgemv DGEMV + #define F77_dgbmv DGBMV + #define F77_dtrmv DTRMV + #define F77_dtbmv DTBMV + #define F77_dtpmv DTPMV + #define F77_dtrsv DTRSV + #define F77_dtbsv DTBSV + #define F77_dtpsv DTPSV + #define F77_cgemv CGEMV + #define F77_cgbmv CGBMV + #define F77_ctrmv CTRMV + #define F77_ctbmv CTBMV + #define F77_ctpmv CTPMV + #define F77_ctrsv CTRSV + #define F77_ctbsv CTBSV + #define F77_ctpsv CTPSV + #define F77_zgemv ZGEMV + #define F77_zgbmv ZGBMV + #define F77_ztrmv ZTRMV + #define F77_ztbmv ZTBMV + #define F77_ztpmv ZTPMV + #define F77_ztrsv ZTRSV + #define F77_ztbsv ZTBSV + #define F77_ztpsv ZTPSV +/* + * Level 3 BLAS + */ + #define F77_chemm CHEMM + #define F77_cherk CHERK + #define F77_cher2k CHER2K + #define F77_zhemm ZHEMM + #define F77_zherk ZHERK + #define F77_zher2k ZHER2K + #define F77_sgemm SGEMM + #define F77_ssymm SSYMM + #define F77_ssyrk SSYRK + #define F77_ssyr2k SSYR2K + #define F77_strmm STRMM + #define F77_strsm STRSM + #define F77_dgemm DGEMM + #define F77_dsymm DSYMM + #define F77_dsyrk DSYRK + #define F77_dsyr2k DSYR2K + #define F77_dtrmm DTRMM + #define F77_dtrsm DTRSM + #define F77_cgemm CGEMM + #define F77_csymm CSYMM + #define F77_csyrk CSYRK + #define F77_csyr2k CSYR2K + #define F77_ctrmm CTRMM + #define F77_ctrsm CTRSM + #define F77_zgemm ZGEMM + #define F77_zsymm ZSYMM + #define F77_zsyrk ZSYRK + #define F77_zsyr2k ZSYR2K + #define F77_ztrmm ZTRMM + #define F77_ztrsm ZTRSM +#elif defined(NOCHANGE) +/* + * Level 1 BLAS + */ +#define F77_xerbla xerbla + #define F77_srotg srotg + #define F77_srotmg srotmg + #define F77_srot srot + #define F77_srotm srotm + #define F77_drotg drotg + #define F77_drotmg drotmg + #define F77_drot drot + #define F77_drotm drotm + #define F77_sswap sswap + #define F77_scopy scopy + #define F77_saxpy saxpy + #define F77_isamax_sub isamaxsub + #define F77_dswap dswap + #define F77_dcopy dcopy + #define F77_daxpy daxpy + #define F77_idamax_sub idamaxsub + #define F77_cswap cswap + #define F77_ccopy ccopy + #define F77_caxpy caxpy + #define F77_icamax_sub icamaxsub + #define F77_zswap zswap + #define F77_zcopy zcopy + #define F77_zaxpy zaxpy + #define F77_izamax_sub izamaxsub + #define F77_sdot_sub sdotsub + #define F77_ddot_sub ddotsub + #define F77_dsdot_sub dsdotsub + #define F77_sscal sscal + #define F77_dscal dscal + #define F77_cscal cscal + #define F77_zscal zscal + #define F77_csscal csscal + #define F77_zdscal zdscal + #define F77_cdotu_sub cdotusub + #define F77_cdotc_sub cdotcsub + #define F77_zdotu_sub zdotusub + #define F77_zdotc_sub zdotcsub + #define F77_snrm2_sub snrm2sub + #define F77_sasum_sub sasumsub + #define F77_dnrm2_sub dnrm2sub + #define F77_dasum_sub dasumsub + #define F77_scnrm2_sub scnrm2sub + #define F77_scasum_sub scasumsub + #define F77_dznrm2_sub dznrm2sub + #define F77_dzasum_sub dzasumsub + #define F77_sdsdot_sub sdsdotsub +/* + * Level 2 BLAS + */ + #define F77_ssymv ssymv + #define F77_ssbmv ssbmv + #define F77_sspmv sspmv + #define F77_sger sger + #define F77_ssyr ssyr + #define F77_sspr sspr + #define F77_ssyr2 ssyr2 + #define F77_sspr2 sspr2 + #define F77_dsymv dsymv + #define F77_dsbmv dsbmv + #define F77_dspmv dspmv + #define F77_dger dger + #define F77_dsyr dsyr + #define F77_dspr dspr + #define F77_dsyr2 dsyr2 + #define F77_dspr2 dspr2 + #define F77_chemv chemv + #define F77_chbmv chbmv + #define F77_chpmv chpmv + #define F77_cgeru cgeru + #define F77_cgerc cgerc + #define F77_cher cher + #define F77_chpr chpr + #define F77_cher2 cher2 + #define F77_chpr2 chpr2 + #define F77_zhemv zhemv + #define F77_zhbmv zhbmv + #define F77_zhpmv zhpmv + #define F77_zgeru zgeru + #define F77_zgerc zgerc + #define F77_zher zher + #define F77_zhpr zhpr + #define F77_zher2 zher2 + #define F77_zhpr2 zhpr2 + #define F77_sgemv sgemv + #define F77_sgbmv sgbmv + #define F77_strmv strmv + #define F77_stbmv stbmv + #define F77_stpmv stpmv + #define F77_strsv strsv + #define F77_stbsv stbsv + #define F77_stpsv stpsv + #define F77_dgemv dgemv + #define F77_dgbmv dgbmv + #define F77_dtrmv dtrmv + #define F77_dtbmv dtbmv + #define F77_dtpmv dtpmv + #define F77_dtrsv dtrsv + #define F77_dtbsv dtbsv + #define F77_dtpsv dtpsv + #define F77_cgemv cgemv + #define F77_cgbmv cgbmv + #define F77_ctrmv ctrmv + #define F77_ctbmv ctbmv + #define F77_ctpmv ctpmv + #define F77_ctrsv ctrsv + #define F77_ctbsv ctbsv + #define F77_ctpsv ctpsv + #define F77_zgemv zgemv + #define F77_zgbmv zgbmv + #define F77_ztrmv ztrmv + #define F77_ztbmv ztbmv + #define F77_ztpmv ztpmv + #define F77_ztrsv ztrsv + #define F77_ztbsv ztbsv + #define F77_ztpsv ztpsv +/* + * Level 3 BLAS + */ + #define F77_chemm chemm + #define F77_cherk cherk + #define F77_cher2k cher2k + #define F77_zhemm zhemm + #define F77_zherk zherk + #define F77_zher2k zher2k + #define F77_sgemm sgemm + #define F77_ssymm ssymm + #define F77_ssyrk ssyrk + #define F77_ssyr2k ssyr2k + #define F77_strmm strmm + #define F77_strsm strsm + #define F77_dgemm dgemm + #define F77_dsymm dsymm + #define F77_dsyrk dsyrk + #define F77_dsyr2k dsyr2k + #define F77_dtrmm dtrmm + #define F77_dtrsm dtrsm + #define F77_cgemm cgemm + #define F77_csymm csymm + #define F77_csyrk csyrk + #define F77_csyr2k csyr2k + #define F77_ctrmm ctrmm + #define F77_ctrsm ctrsm + #define F77_zgemm zgemm + #define F77_zsymm zsymm + #define F77_zsyrk zsyrk + #define F77_zsyr2k zsyr2k + #define F77_ztrmm ztrmm + #define F77_ztrsm ztrsm +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + void F77_xerbla(FCHAR, void *); +/* + * Level 1 Fortran Prototypes + */ + +/* Single Precision */ + + void F77_srot(FINT, float *, FINT, float *, FINT, const float *, const float *); + void F77_srotg(float *,float *,float *,float *); + void F77_srotm( FINT, float *, FINT, float *, FINT, const float *); + void F77_srotmg(float *,float *,float *,const float *, float *); + void F77_sswap( FINT, float *, FINT, float *, FINT); + void F77_scopy( FINT, const float *, FINT, float *, FINT); + void F77_saxpy( FINT, const float *, const float *, FINT, float *, FINT); + void F77_sdot_sub(FINT, const float *, FINT, const float *, FINT, float *); + void F77_sdsdot_sub( FINT, const float *, const float *, FINT, const float *, FINT, float *); + void F77_sscal( FINT, const float *, float *, FINT); + void F77_snrm2_sub( FINT, const float *, FINT, float *); + void F77_sasum_sub( FINT, const float *, FINT, float *); + void F77_isamax_sub( FINT, const float * , FINT, FINT2); + +/* Double Precision */ + + void F77_drot(FINT, double *, FINT, double *, FINT, const double *, const double *); + void F77_drotg(double *,double *,double *,double *); + void F77_drotm( FINT, double *, FINT, double *, FINT, const double *); + void F77_drotmg(double *,double *,double *,const double *, double *); + void F77_dswap( FINT, double *, FINT, double *, FINT); + void F77_dcopy( FINT, const double *, FINT, double *, FINT); + void F77_daxpy( FINT, const double *, const double *, FINT, double *, FINT); + void F77_dswap( FINT, double *, FINT, double *, FINT); + void F77_dsdot_sub(FINT, const float *, FINT, const float *, FINT, double *); + void F77_ddot_sub( FINT, const double *, FINT, const double *, FINT, double *); + void F77_dscal( FINT, const double *, double *, FINT); + void F77_dnrm2_sub( FINT, const double *, FINT, double *); + void F77_dasum_sub( FINT, const double *, FINT, double *); + void F77_idamax_sub( FINT, const double * , FINT, FINT2); + +/* Single Complex Precision */ + + void F77_cswap( FINT, void *, FINT, void *, FINT); + void F77_ccopy( FINT, const void *, FINT, void *, FINT); + void F77_caxpy( FINT, const void *, const void *, FINT, void *, FINT); + void F77_cswap( FINT, void *, FINT, void *, FINT); + void F77_cdotc_sub( FINT, const void *, FINT, const void *, FINT, void *); + void F77_cdotu_sub( FINT, const void *, FINT, const void *, FINT, void *); + void F77_cscal( FINT, const void *, void *, FINT); + void F77_icamax_sub( FINT, const void *, FINT, FINT2); + void F77_csscal( FINT, const float *, void *, FINT); + void F77_scnrm2_sub( FINT, const void *, FINT, float *); + void F77_scasum_sub( FINT, const void *, FINT, float *); + +/* Double Complex Precision */ + + void F77_zswap( FINT, void *, FINT, void *, FINT); + void F77_zcopy( FINT, const void *, FINT, void *, FINT); + void F77_zaxpy( FINT, const void *, const void *, FINT, void *, FINT); + void F77_zswap( FINT, void *, FINT, void *, FINT); + void F77_zdotc_sub( FINT, const void *, FINT, const void *, FINT, void *); + void F77_zdotu_sub( FINT, const void *, FINT, const void *, FINT, void *); + void F77_zdscal( FINT, const double *, void *, FINT); + void F77_zscal( FINT, const void *, void *, FINT); + void F77_dznrm2_sub( FINT, const void *, FINT, double *); + void F77_dzasum_sub( FINT, const void *, FINT, double *); + void F77_izamax_sub( FINT, const void *, FINT, FINT2); + +/* + * Level 2 Fortran Prototypes + */ + +/* Single Precision */ + + void F77_sgemv(FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT); + void F77_sgbmv(FCHAR, FINT, FINT, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT); + void F77_ssymv(FCHAR, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT); + void F77_ssbmv(FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT); + void F77_sspmv(FCHAR, FINT, const float *, const float *, const float *, FINT, const float *, float *, FINT); + void F77_strmv( FCHAR, FCHAR, FCHAR, FINT, const float *, FINT, float *, FINT); + void F77_stbmv( FCHAR, FCHAR, FCHAR, FINT, FINT, const float *, FINT, float *, FINT); + void F77_strsv( FCHAR, FCHAR, FCHAR, FINT, const float *, FINT, float *, FINT); + void F77_stbsv( FCHAR, FCHAR, FCHAR, FINT, FINT, const float *, FINT, float *, FINT); + void F77_stpmv( FCHAR, FCHAR, FCHAR, FINT, const float *, float *, FINT); + void F77_stpsv( FCHAR, FCHAR, FCHAR, FINT, const float *, float *, FINT); + void F77_sger( FINT, FINT, const float *, const float *, FINT, const float *, FINT, float *, FINT); + void F77_ssyr(FCHAR, FINT, const float *, const float *, FINT, float *, FINT); + void F77_sspr(FCHAR, FINT, const float *, const float *, FINT, float *); + void F77_sspr2(FCHAR, FINT, const float *, const float *, FINT, const float *, FINT, float *); + void F77_ssyr2(FCHAR, FINT, const float *, const float *, FINT, const float *, FINT, float *, FINT); + +/* Double Precision */ + + void F77_dgemv(FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT); + void F77_dgbmv(FCHAR, FINT, FINT, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT); + void F77_dsymv(FCHAR, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT); + void F77_dsbmv(FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT); + void F77_dspmv(FCHAR, FINT, const double *, const double *, const double *, FINT, const double *, double *, FINT); + void F77_dtrmv( FCHAR, FCHAR, FCHAR, FINT, const double *, FINT, double *, FINT); + void F77_dtbmv( FCHAR, FCHAR, FCHAR, FINT, FINT, const double *, FINT, double *, FINT); + void F77_dtrsv( FCHAR, FCHAR, FCHAR, FINT, const double *, FINT, double *, FINT); + void F77_dtbsv( FCHAR, FCHAR, FCHAR, FINT, FINT, const double *, FINT, double *, FINT); + void F77_dtpmv( FCHAR, FCHAR, FCHAR, FINT, const double *, double *, FINT); + void F77_dtpsv( FCHAR, FCHAR, FCHAR, FINT, const double *, double *, FINT); + void F77_dger( FINT, FINT, const double *, const double *, FINT, const double *, FINT, double *, FINT); + void F77_dsyr(FCHAR, FINT, const double *, const double *, FINT, double *, FINT); + void F77_dspr(FCHAR, FINT, const double *, const double *, FINT, double *); + void F77_dspr2(FCHAR, FINT, const double *, const double *, FINT, const double *, FINT, double *); + void F77_dsyr2(FCHAR, FINT, const double *, const double *, FINT, const double *, FINT, double *, FINT); + +/* Single Complex Precision */ + + void F77_cgemv(FCHAR, FINT, FINT, const void *, const void *, FINT, const void *, FINT, const void *, void *, FINT); + void F77_cgbmv(FCHAR, FINT, FINT, FINT, FINT, const void *, const void *, FINT, const void *, FINT, const void *, void *, FINT); + void F77_chemv(FCHAR, FINT, const void *, const void *, FINT, const void *, FINT, const void *, void *, FINT); + void F77_chbmv(FCHAR, FINT, FINT, const void *, const void *, FINT, const void *, FINT, const void *, void *, FINT); + void F77_chpmv(FCHAR, FINT, const void *, const void *, const void *, FINT, const void *, void *, FINT); + void F77_ctrmv( FCHAR, FCHAR, FCHAR, FINT, const void *, FINT, void *, FINT); + void F77_ctbmv( FCHAR, FCHAR, FCHAR, FINT, FINT, const void *, FINT, void *, FINT); + void F77_ctpmv( FCHAR, FCHAR, FCHAR, FINT, const void *, void *, FINT); + void F77_ctrsv( FCHAR, FCHAR, FCHAR, FINT, const void *, FINT, void *, FINT); + void F77_ctbsv( FCHAR, FCHAR, FCHAR, FINT, FINT, const void *, FINT, void *, FINT); + void F77_ctpsv( FCHAR, FCHAR, FCHAR, FINT, const void *, void *,FINT); + void F77_cgerc( FINT, FINT, const void *, const void *, FINT, const void *, FINT, void *, FINT); + void F77_cgeru( FINT, FINT, const void *, const void *, FINT, const void *, FINT, void *, FINT); + void F77_cher(FCHAR, FINT, const float *, const void *, FINT, void *, FINT); + void F77_cher2(FCHAR, FINT, const void *, const void *, FINT, const void *, FINT, void *, FINT); + void F77_chpr(FCHAR, FINT, const float *, const void *, FINT, void *); + void F77_chpr2(FCHAR, FINT, const float *, const void *, FINT, const void *, FINT, void *); + +/* Double Complex Precision */ + + void F77_zgemv(FCHAR, FINT, FINT, const void *, const void *, FINT, const void *, FINT, const void *, void *, FINT); + void F77_zgbmv(FCHAR, FINT, FINT, FINT, FINT, const void *, const void *, FINT, const void *, FINT, const void *, void *, FINT); + void F77_zhemv(FCHAR, FINT, const void *, const void *, FINT, const void *, FINT, const void *, void *, FINT); + void F77_zhbmv(FCHAR, FINT, FINT, const void *, const void *, FINT, const void *, FINT, const void *, void *, FINT); + void F77_zhpmv(FCHAR, FINT, const void *, const void *, const void *, FINT, const void *, void *, FINT); + void F77_ztrmv( FCHAR, FCHAR, FCHAR, FINT, const void *, FINT, void *, FINT); + void F77_ztbmv( FCHAR, FCHAR, FCHAR, FINT, FINT, const void *, FINT, void *, FINT); + void F77_ztpmv( FCHAR, FCHAR, FCHAR, FINT, const void *, void *, FINT); + void F77_ztrsv( FCHAR, FCHAR, FCHAR, FINT, const void *, FINT, void *, FINT); + void F77_ztbsv( FCHAR, FCHAR, FCHAR, FINT, FINT, const void *, FINT, void *, FINT); + void F77_ztpsv( FCHAR, FCHAR, FCHAR, FINT, const void *, void *,FINT); + void F77_zgerc( FINT, FINT, const void *, const void *, FINT, const void *, FINT, void *, FINT); + void F77_zgeru( FINT, FINT, const void *, const void *, FINT, const void *, FINT, void *, FINT); + void F77_zher(FCHAR, FINT, const double *, const void *, FINT, void *, FINT); + void F77_zher2(FCHAR, FINT, const void *, const void *, FINT, const void *, FINT, void *, FINT); + void F77_zhpr(FCHAR, FINT, const double *, const void *, FINT, void *); + void F77_zhpr2(FCHAR, FINT, const double *, const void *, FINT, const void *, FINT, void *); + +/* + * Level 3 Fortran Prototypes + */ + +/* Single Precision */ + + void F77_sgemm(FCHAR, FCHAR, FINT, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT); + void F77_ssymm(FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT); + void F77_ssyrk(FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, float *, FINT); + void F77_ssyr2k(FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT); + void F77_strmm(FCHAR, FCHAR, FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, float *, FINT); + void F77_strsm(FCHAR, FCHAR, FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, float *, FINT); + +/* Double Precision */ + + void F77_dgemm(FCHAR, FCHAR, FINT, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT); + void F77_dsymm(FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT); + void F77_dsyrk(FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, double *, FINT); + void F77_dsyr2k(FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT); + void F77_dtrmm(FCHAR, FCHAR, FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, double *, FINT); + void F77_dtrsm(FCHAR, FCHAR, FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, double *, FINT); + +/* Single Complex Precision */ + + void F77_cgemm(FCHAR, FCHAR, FINT, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT); + void F77_csymm(FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT); + void F77_chemm(FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT); + void F77_csyrk(FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, float *, FINT); + void F77_cherk(FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, float *, FINT); + void F77_csyr2k(FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT); + void F77_cher2k(FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT); + void F77_ctrmm(FCHAR, FCHAR, FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, float *, FINT); + void F77_ctrsm(FCHAR, FCHAR, FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, float *, FINT); + +/* Double Complex Precision */ + + void F77_zgemm(FCHAR, FCHAR, FINT, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT); + void F77_zsymm(FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT); + void F77_zhemm(FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT); + void F77_zsyrk(FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, double *, FINT); + void F77_zherk(FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, double *, FINT); + void F77_zsyr2k(FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT); + void F77_zher2k(FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT); + void F77_ztrmm(FCHAR, FCHAR, FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, double *, FINT); + void F77_ztrsm(FCHAR, FCHAR, FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, double *, FINT); + +#ifdef __cplusplus +} +#endif + +#endif /* CBLAS_F77_H */ diff --git a/CBLAS/lib/.gitkeep b/CBLAS/lib/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/CBLAS/lib/README b/CBLAS/lib/README new file mode 100644 index 000000000..793d67af1 --- /dev/null +++ b/CBLAS/lib/README @@ -0,0 +1,2 @@ +This directory will contain the CBLAS libraries. + diff --git a/CBLAS/src/Makefile b/CBLAS/src/Makefile new file mode 100644 index 000000000..65f7cc602 --- /dev/null +++ b/CBLAS/src/Makefile @@ -0,0 +1,247 @@ +# This Makefile compiles the CBLAS routines +# +dlvl = ../. +include $(dlvl)/Makefile.in + +# +# Erase all object and archive files +# +clean: + rm -f *.o a.out core + +# Error handling routines for level 2 & 3 + +errhand = cblas_globals.o cblas_xerbla.o xerbla.o + +# Object files of all routines +alev = $(alev1) $(alev2) $(alev3) $(errhand) +# +# +# CBLAS routines +# +# Level 1 +# +# + +# +# All object files for single real precision +# +slev1 = cblas_srotg.o cblas_srotmg.o cblas_srot.o cblas_srotm.o \ + cblas_sswap.o cblas_sscal.o cblas_scopy.o cblas_saxpy.o \ + cblas_sdot.o cblas_sdsdot.o cblas_snrm2.o cblas_sasum.o \ + cblas_isamax.o sdotsub.o sdsdotsub.o snrm2sub.o sasumsub.o \ + isamaxsub.o +# +# All object files for double real precision +# +dlev1 = cblas_drotg.o cblas_drotmg.o cblas_drot.o cblas_drotm.o \ + cblas_dswap.o cblas_dscal.o cblas_dcopy.o cblas_daxpy.o \ + cblas_ddot.o cblas_dsdot.o cblas_dnrm2.o cblas_dasum.o \ + cblas_idamax.o ddotsub.o dsdotsub.o dnrm2sub.o \ + dasumsub.o idamaxsub.o + +# +# All object files for single complex precision +# +clev1 = cblas_cswap.o cblas_cscal.o cblas_csscal.o cblas_ccopy.o \ + cblas_caxpy.o cblas_cdotu_sub.o cblas_cdotc_sub.o \ + cblas_icamax.o cdotcsub.o cdotusub.o icamaxsub.o + +# +# All object files for double complex precision +# +zlev1 = cblas_zswap.o cblas_zscal.o cblas_zdscal.o cblas_zcopy.o \ + cblas_zaxpy.o cblas_zdotu_sub.o cblas_zdotc_sub.o cblas_dznrm2.o \ + cblas_dzasum.o cblas_izamax.o zdotcsub.o zdotusub.o \ + dzasumsub.o dznrm2sub.o izamaxsub.o + +# +# Common files for single / complex precision +# +sclev1 = cblas_scasum.o scasumsub.o cblas_scnrm2.o scnrm2sub.o + +# +# All object files +# +alev1 = $(slev1) $(dlev1) $(clev1) $(zlev1) $(sclev1) + + +# +# Make an archive file +# + +# Single real precision +slib1: $(slev1) $(sclev1) + $(ARCH) $(ARCHFLAGS) $(CBLIB) $(slev1) $(sclev1) + $(RANLIB) $(CBLIB) + +# Double real precision +dlib1: $(dlev1) + $(ARCH) $(ARCHFLAGS) $(CBLIB) $(dlev1) + $(RANLIB) $(CBLIB) + +# Single complex precision +clib1: $(clev1) $(sclev1) + $(ARCH) $(ARCHFLAGS) $(CBLIB) $(clev1) $(sclev1) + $(RANLIB) $(CBLIB) + +# Double complex precision +zlib1: $(zlev1) + $(ARCH) $(ARCHFLAGS) $(CBLIB) $(zlev1) + $(RANLIB) $(CBLIB) + +# All precisions +all1: $(alev1) + $(ARCH) $(ARCHFLAGS) $(CBLIB) $(alev1) + $(RANLIB) $(CBLIB) + +# +# +# CBLAS routines +# +# Level 2 +# +# + +# +# All object files for single real precision +# +slev2 = cblas_sgemv.o cblas_sgbmv.o cblas_sger.o cblas_ssbmv.o cblas_sspmv.o \ + cblas_sspr.o cblas_sspr2.o cblas_ssymv.o cblas_ssyr.o cblas_ssyr2.o \ + cblas_stbmv.o cblas_stbsv.o cblas_stpmv.o cblas_stpsv.o cblas_strmv.o \ + cblas_strsv.o + +# +# All object files for double real precision +# +dlev2 = cblas_dgemv.o cblas_dgbmv.o cblas_dger.o cblas_dsbmv.o cblas_dspmv.o \ + cblas_dspr.o cblas_dspr2.o cblas_dsymv.o cblas_dsyr.o cblas_dsyr2.o \ + cblas_dtbmv.o cblas_dtbsv.o cblas_dtpmv.o cblas_dtpsv.o cblas_dtrmv.o \ + cblas_dtrsv.o + +# +# All object files for single complex precision +# +clev2 = cblas_cgemv.o cblas_cgbmv.o cblas_chemv.o cblas_chbmv.o cblas_chpmv.o \ + cblas_ctrmv.o cblas_ctbmv.o cblas_ctpmv.o cblas_ctrsv.o cblas_ctbsv.o \ + cblas_ctpsv.o cblas_cgeru.o cblas_cgerc.o cblas_cher.o cblas_cher2.o \ + cblas_chpr.o cblas_chpr2.o + +# +# All object files for double complex precision +# +zlev2 = cblas_zgemv.o cblas_zgbmv.o cblas_zhemv.o cblas_zhbmv.o cblas_zhpmv.o \ + cblas_ztrmv.o cblas_ztbmv.o cblas_ztpmv.o cblas_ztrsv.o cblas_ztbsv.o \ + cblas_ztpsv.o cblas_zgeru.o cblas_zgerc.o cblas_zher.o cblas_zher2.o \ + cblas_zhpr.o cblas_zhpr2.o +# +# All object files +# +alev2 = $(slev2) $(dlev2) $(clev2) $(zlev2) + +# +# Make an archive file +# + +# Single real precision +slib2: $(slev2) $(errhand) + $(ARCH) $(ARCHFLAGS) $(CBLIB) $(slev2) $(errhand) + $(RANLIB) $(CBLIB) + +# Double real precision +dlib2: $(dlev2) $(errhand) + $(ARCH) $(ARCHFLAGS) $(CBLIB) $(dlev2) $(errhand) + $(RANLIB) $(CBLIB) + +# Single complex precision +clib2: $(clev2) $(errhand) + $(ARCH) $(ARCHFLAGS) $(CBLIB) $(clev2) $(errhand) + $(RANLIB) $(CBLIB) + +# Double complex precision +zlib2: $(zlev2) $(errhand) + $(ARCH) $(ARCHFLAGS) $(CBLIB) $(zlev2) $(errhand) + $(RANLIB) $(CBLIB) + +# All precisions +all2: $(alev2) $(errhand) + $(ARCH) $(ARCHFLAGS) $(CBLIB) $(alev2) $(errhand) + $(RANLIB) $(CBLIB) +# +# +# CBLAS routines +# +# Level 3 +# +# + +# +# All object files for single real precision +# +slev3 = cblas_sgemm.o cblas_ssymm.o cblas_ssyrk.o cblas_ssyr2k.o cblas_strmm.o\ + cblas_strsm.o + +# +# All object files for double real precision +# +dlev3 = cblas_dgemm.o cblas_dsymm.o cblas_dsyrk.o cblas_dsyr2k.o cblas_dtrmm.o\ + cblas_dtrsm.o + +# +# All object files for single complex precision +# +clev3 = cblas_cgemm.o cblas_csymm.o cblas_chemm.o cblas_cherk.o\ + cblas_cher2k.o cblas_ctrmm.o cblas_ctrsm.o cblas_csyrk.o\ + cblas_csyr2k.o +# +# All object files for double complex precision +# +zlev3 = cblas_zgemm.o cblas_zsymm.o cblas_zhemm.o cblas_zherk.o\ + cblas_zher2k.o cblas_ztrmm.o cblas_ztrsm.o cblas_zsyrk.o\ + cblas_zsyr2k.o +# +# All object files +# +alev3 = $(slev3) $(dlev3) $(clev3) $(zlev3) + +# +# Make an archive file +# + +# Single real precision +slib3: $(slev3) $(errhand) + $(ARCH) $(ARCHFLAGS) $(CBLIB) $(slev3) $(errhand) + $(RANLIB) $(CBLIB) + +# Double real precision +dlib3: $(dlev3) $(errhand) + $(ARCH) $(ARCHFLAGS) $(CBLIB) $(dlev3) $(errhand) + $(RANLIB) $(CBLIB) + +# Single complex precision +clib3: $(clev3) $(errhand) + $(ARCH) $(ARCHFLAGS) $(CBLIB) $(clev3) $(errhand) + $(RANLIB) $(CBLIB) + +# Single complex precision +zlib3: $(zlev3) $(errhand) + $(ARCH) $(ARCHFLAGS) $(CBLIB) $(zlev3) $(errhand) + $(RANLIB) $(CBLIB) + +# All precisions +all3: $(alev3) $(errhand) + $(ARCH) $(ARCHFLAGS) $(CBLIB) $(alev3) + $(RANLIB) $(CBLIB) + +# All levels and precisions +all: $(alev) + $(ARCH) $(ARCHFLAGS) $(CBLIB) $(alev) + $(RANLIB) $(CBLIB) + + +.SUFFIXES: .o .c .f + +.c.o: + $(CC) $(CFLAGS) -I../include -c $*.c +.f.o: + $(FC) $(FFLAGS) -c $*.f diff --git a/CBLAS/src/cblas_caxpy.c b/CBLAS/src/cblas_caxpy.c new file mode 100644 index 000000000..7579aa707 --- /dev/null +++ b/CBLAS/src/cblas_caxpy.c @@ -0,0 +1,22 @@ +/* + * cblas_caxpy.c + * + * The program is a C interface to caxpy. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_caxpy( const int N, const void *alpha, const void *X, + const int incX, void *Y, const int incY) +{ +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY +#endif + F77_caxpy( &F77_N, alpha, X, &F77_incX, Y, &F77_incY); +} diff --git a/CBLAS/src/cblas_ccopy.c b/CBLAS/src/cblas_ccopy.c new file mode 100644 index 000000000..b7bc42847 --- /dev/null +++ b/CBLAS/src/cblas_ccopy.c @@ -0,0 +1,22 @@ +/* + * cblas_ccopy.c + * + * The program is a C interface to ccopy. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_ccopy( const int N, const void *X, + const int incX, void *Y, const int incY) +{ +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY +#endif + F77_ccopy( &F77_N, X, &F77_incX, Y, &F77_incY); +} diff --git a/CBLAS/src/cblas_cdotc_sub.c b/CBLAS/src/cblas_cdotc_sub.c new file mode 100644 index 000000000..d6086814e --- /dev/null +++ b/CBLAS/src/cblas_cdotc_sub.c @@ -0,0 +1,23 @@ +/* + * cblas_cdotc_sub.c + * + * The program is a C interface to cdotc. + * It calls the fortran wrapper before calling cdotc. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_cdotc_sub( const int N, const void *X, const int incX, + const void *Y, const int incY,void *dotc) +{ +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY +#endif + F77_cdotc_sub( &F77_N, X, &F77_incX, Y, &F77_incY, dotc); +} diff --git a/CBLAS/src/cblas_cdotu_sub.c b/CBLAS/src/cblas_cdotu_sub.c new file mode 100644 index 000000000..d06e4e5fa --- /dev/null +++ b/CBLAS/src/cblas_cdotu_sub.c @@ -0,0 +1,23 @@ +/* + * cblas_cdotu_sub.f + * + * The program is a C interface to cdotu. + * It calls the forteran wrapper before calling cdotu. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_cdotu_sub( const int N, const void *X, + const int incX, const void *Y, const int incY,void *dotu) +{ +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY +#endif + F77_cdotu_sub( &F77_N, X, &F77_incX, Y, &F77_incY, dotu); +} diff --git a/CBLAS/src/cblas_cgbmv.c b/CBLAS/src/cblas_cgbmv.c new file mode 100644 index 000000000..e61a31a4a --- /dev/null +++ b/CBLAS/src/cblas_cgbmv.c @@ -0,0 +1,165 @@ +/* + * cblas_cgbmv.c + * The program is a C interface of cgbmv + * + * Keita Teranishi 5/20/98 + * + */ +#include +#include +#include "cblas.h" +#include "cblas_f77.h" +void cblas_cgbmv(const enum CBLAS_ORDER order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const int KL, const int KU, + const void *alpha, const void *A, const int lda, + const void *X, const int incX, const void *beta, + void *Y, const int incY) +{ + char TA; +#ifdef F77_CHAR + F77_CHAR F77_TA; +#else + #define F77_TA &TA +#endif +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_incX=incX, F77_incY=incY; + F77_INT F77_KL=KL,F77_KU=KU; +#else + #define F77_M M + #define F77_N N + #define F77_lda lda + #define F77_KL KL + #define F77_KU KU + #define F77_incX incx + #define F77_incY incY +#endif + int n=0, i=0, incx=incX; + const float *xx= (float *)X, *alp= (float *)alpha, *bet = (float *)beta; + float ALPHA[2],BETA[2]; + int tincY, tincx; + float *x=(float *)X, *y=(float *)Y, *st=0, *tx=0; + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(2, "cblas_cgbmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_TA = C2F_CHAR(&TA); + #endif + F77_cgbmv(F77_TA, &F77_M, &F77_N, &F77_KL, &F77_KU, alpha, + A, &F77_lda, X, &F77_incX, beta, Y, &F77_incY); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) + { + ALPHA[0]= *alp; + ALPHA[1]= -alp[1]; + BETA[0]= *bet; + BETA[1]= -bet[1]; + TA = 'N'; + if (M > 0) + { + n = M << 1; + x = malloc(n*sizeof(float)); + tx = x; + + if( incX > 0 ) { + i = incX << 1 ; + tincx = 2; + st= x+n; + } else { + i = incX *(-2); + tincx = -2; + st = x-2; + x +=(n-2); + } + do + { + *x = *xx; + x[1] = -xx[1]; + x += tincx ; + xx += i; + } + while (x != st); + x=tx; + + #ifdef F77_INT + F77_incX = 1; + #else + incx = 1; + #endif + + if( incY > 0 ) + tincY = incY; + else + tincY = -incY; + + y++; + + if (N > 0) + { + i = tincY << 1; + n = i * N ; + st = y + n; + do { + *y = -(*y); + y += i; + } while(y != st); + y -= n; + } + } + else x = (float *) X; + + + } + else + { + cblas_xerbla(2, "cblas_cgbmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_TA = C2F_CHAR(&TA); + #endif + if (TransA == CblasConjTrans) + F77_cgbmv(F77_TA, &F77_N, &F77_M, &F77_KU, &F77_KL, ALPHA, + A ,&F77_lda, x,&F77_incX, BETA, Y, &F77_incY); + else + F77_cgbmv(F77_TA, &F77_N, &F77_M, &F77_KU, &F77_KL, alpha, + A ,&F77_lda, x,&F77_incX, beta, Y, &F77_incY); + if (TransA == CblasConjTrans) + { + if (x != X) free(x); + if (N > 0) + { + do + { + *y = -(*y); + y += i; + } + while (y != st); + } + } + } + else cblas_xerbla(1, "cblas_cgbmv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; +} diff --git a/CBLAS/src/cblas_cgemm.c b/CBLAS/src/cblas_cgemm.c new file mode 100644 index 000000000..dee4696ee --- /dev/null +++ b/CBLAS/src/cblas_cgemm.c @@ -0,0 +1,109 @@ +/* + * + * cblas_cgemm.c + * This program is a C interface to cgemm. + * Written by Keita Teranishi + * 4/8/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_cgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_TRANSPOSE TransB, const int M, const int N, + const int K, const void *alpha, const void *A, + const int lda, const void *B, const int ldb, + const void *beta, void *C, const int ldc) +{ + char TA, TB; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_TB; +#else + #define F77_TA &TA + #define F77_TB &TB +#endif + +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_K=K, F77_lda=lda, F77_ldb=ldb; + F77_INT F77_ldc=ldc; +#else + #define F77_M M + #define F77_N N + #define F77_K K + #define F77_lda lda + #define F77_ldb ldb + #define F77_ldc ldc +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + + if( Order == CblasColMajor ) + { + if(TransA == CblasTrans) TA='T'; + else if ( TransA == CblasConjTrans ) TA='C'; + else if ( TransA == CblasNoTrans ) TA='N'; + else + { + cblas_xerbla(2, "cblas_cgemm", "Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if(TransB == CblasTrans) TB='T'; + else if ( TransB == CblasConjTrans ) TB='C'; + else if ( TransB == CblasNoTrans ) TB='N'; + else + { + cblas_xerbla(3, "cblas_cgemm", "Illegal TransB setting, %d\n", TransB); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_TA = C2F_CHAR(&TA); + F77_TB = C2F_CHAR(&TB); + #endif + + F77_cgemm(F77_TA, F77_TB, &F77_M, &F77_N, &F77_K, alpha, A, + &F77_lda, B, &F77_ldb, beta, C, &F77_ldc); + } else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + if(TransA == CblasTrans) TB='T'; + else if ( TransA == CblasConjTrans ) TB='C'; + else if ( TransA == CblasNoTrans ) TB='N'; + else + { + cblas_xerbla(2, "cblas_cgemm", "Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if(TransB == CblasTrans) TA='T'; + else if ( TransB == CblasConjTrans ) TA='C'; + else if ( TransB == CblasNoTrans ) TA='N'; + else + { + cblas_xerbla(2, "cblas_cgemm", "Illegal TransB setting, %d\n", TransB); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_TA = C2F_CHAR(&TA); + F77_TB = C2F_CHAR(&TB); + #endif + + F77_cgemm(F77_TA, F77_TB, &F77_N, &F77_M, &F77_K, alpha, B, + &F77_ldb, A, &F77_lda, beta, C, &F77_ldc); + } + else cblas_xerbla(1, "cblas_cgemm", "Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_cgemv.c b/CBLAS/src/cblas_cgemv.c new file mode 100644 index 000000000..5e4509a4f --- /dev/null +++ b/CBLAS/src/cblas_cgemv.c @@ -0,0 +1,162 @@ +/* + * cblas_cgemv.c + * The program is a C interface of cgemv + * + * Keita Teranishi 5/20/98 + * + */ +#include +#include +#include "cblas.h" +#include "cblas_f77.h" +void cblas_cgemv(const enum CBLAS_ORDER order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const void *alpha, const void *A, const int lda, + const void *X, const int incX, const void *beta, + void *Y, const int incY) +{ + char TA; +#ifdef F77_CHAR + F77_CHAR F77_TA; +#else + #define F77_TA &TA +#endif +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_incX=incX, F77_incY=incY; +#else + #define F77_M M + #define F77_N N + #define F77_lda lda + #define F77_incX incx + #define F77_incY incY +#endif + + int n=0, i=0, incx=incX; + const float *xx= (const float *)X; + float ALPHA[2],BETA[2]; + int tincY, tincx; + float *x=(float *)X, *y=(float *)Y, *st=0, *tx=0; + const float *stx = x; + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + + if (order == CblasColMajor) + { + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(2, "cblas_cgemv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_TA = C2F_CHAR(&TA); + #endif + F77_cgemv(F77_TA, &F77_M, &F77_N, alpha, A, &F77_lda, X, &F77_incX, + beta, Y, &F77_incY); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) + { + ALPHA[0]= *( (const float *) alpha ); + ALPHA[1]= -( *( (const float *) alpha+1) ); + BETA[0]= *( (const float *) beta ); + BETA[1]= -( *( (const float *) beta+1 ) ); + TA = 'N'; + if (M > 0) + { + n = M << 1; + x = malloc(n*sizeof(float)); + tx = x; + if( incX > 0 ) { + i = incX << 1 ; + tincx = 2; + st= x+n; + } else { + i = incX *(-2); + tincx = -2; + st = x-2; + x +=(n-2); + } + + do + { + *x = *xx; + x[1] = -xx[1]; + x += tincx ; + xx += i; + } + while (x != st); + x=tx; + + F77_incX = 1; + + if(incY > 0) + tincY = incY; + else + tincY = -incY; + + y++; + + if (N > 0) + { + i = tincY << 1; + n = i * N ; + st = y + n; + do { + *y = -(*y); + y += i; + } while(y != st); + y -= n; + } + stx = x; + } + else stx = (const float *)X; + } + else + { + cblas_xerbla(2, "cblas_cgemv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_TA = C2F_CHAR(&TA); + #endif + if (TransA == CblasConjTrans) + F77_cgemv(F77_TA, &F77_N, &F77_M, ALPHA, A, &F77_lda, stx, + &F77_incX, BETA, Y, &F77_incY); + else + F77_cgemv(F77_TA, &F77_N, &F77_M, alpha, A, &F77_lda, x, + &F77_incX, beta, Y, &F77_incY); + + if (TransA == CblasConjTrans) + { + if (x != (const float *)X) free(x); + if (N > 0) + { + do + { + *y = -(*y); + y += i; + } + while (y != st); + } + } + } + else cblas_xerbla(1, "cblas_cgemv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_cgerc.c b/CBLAS/src/cblas_cgerc.c new file mode 100644 index 000000000..29ccde63a --- /dev/null +++ b/CBLAS/src/cblas_cgerc.c @@ -0,0 +1,84 @@ +/* + * cblas_cgerc.c + * The program is a C interface to cgerc. + * + * Keita Teranishi 5/20/98 + * + */ +#include +#include +#include "cblas.h" +#include "cblas_f77.h" +void cblas_cgerc(const enum CBLAS_ORDER order, const int M, const int N, + const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *A, const int lda) +{ +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_incX=incX, F77_incY=incY; +#else + #define F77_M M + #define F77_N N + #define F77_incX incX + #define F77_incY incy + #define F77_lda lda +#endif + + int n, i, tincy, incy=incY; + float *y=(float *)Y, *yy=(float *)Y, *ty, *st; + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + F77_cgerc( &F77_M, &F77_N, alpha, X, &F77_incX, Y, &F77_incY, A, + &F77_lda); + } else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (N > 0) + { + n = N << 1; + y = malloc(n*sizeof(float)); + + ty = y; + if( incY > 0 ) { + i = incY << 1; + tincy = 2; + st= y+n; + } else { + i = incY *(-2); + tincy = -2; + st = y-2; + y +=(n-2); + } + do + { + *y = *yy; + y[1] = -yy[1]; + y += tincy ; + yy += i; + } + while (y != st); + y = ty; + + #ifdef F77_INT + F77_incY = 1; + #else + incy = 1; + #endif + } + else y = (float *) Y; + + F77_cgeru( &F77_N, &F77_M, alpha, y, &F77_incY, X, &F77_incX, A, + &F77_lda); + if(Y!=y) + free(y); + + } else cblas_xerbla(1, "cblas_cgerc", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_cgeru.c b/CBLAS/src/cblas_cgeru.c new file mode 100644 index 000000000..549eae3cf --- /dev/null +++ b/CBLAS/src/cblas_cgeru.c @@ -0,0 +1,45 @@ +/* + * cblas_cgeru.c + * The program is a C interface to cgeru. + * + * Keita Teranishi 5/20/98 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_cgeru(const enum CBLAS_ORDER order, const int M, const int N, + const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *A, const int lda) +{ +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_incX=incX, F77_incY=incY; +#else + #define F77_M M + #define F77_N N + #define F77_incX incX + #define F77_incY incY + #define F77_lda lda +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + + if (order == CblasColMajor) + { + F77_cgeru( &F77_M, &F77_N, alpha, X, &F77_incX, Y, &F77_incY, A, + &F77_lda); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + F77_cgeru( &F77_N, &F77_M, alpha, Y, &F77_incY, X, &F77_incX, A, + &F77_lda); + } + else cblas_xerbla(1, "cblas_cgeru","Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_chbmv.c b/CBLAS/src/cblas_chbmv.c new file mode 100644 index 000000000..3f33e69c2 --- /dev/null +++ b/CBLAS/src/cblas_chbmv.c @@ -0,0 +1,159 @@ +/* + * cblas_chbmv.c + * The program is a C interface to chbmv + * + * Keita Teranishi 5/18/98 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +#include +#include +void cblas_chbmv(const enum CBLAS_ORDER order, + const enum CBLAS_UPLO Uplo,const int N,const int K, + const void *alpha, const void *A, const int lda, + const void *X, const int incX, const void *beta, + void *Y, const int incY) +{ + char UL; +#ifdef F77_CHAR + F77_CHAR F77_UL; +#else + #define F77_UL &UL +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_K=K, F77_lda=lda, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_K K + #define F77_lda lda + #define F77_incX incx + #define F77_incY incY +#endif + int n, i=0, incx=incX; + const float *xx= (float *)X, *alp= (float *)alpha, *bet = (float *)beta; + float ALPHA[2],BETA[2]; + int tincY, tincx; + float *x=(float *)X, *y=(float *)Y, *st=0, *tx; + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasLower) UL = 'L'; + else if (Uplo == CblasUpper) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_chbmv","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_chbmv(F77_UL, &F77_N, &F77_K, alpha, A, &F77_lda, X, + &F77_incX, beta, Y, &F77_incY); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + ALPHA[0]= *alp; + ALPHA[1]= -alp[1]; + BETA[0]= *bet; + BETA[1]= -bet[1]; + + if (N > 0) + { + n = N << 1; + x = malloc(n*sizeof(float)); + + tx = x; + if( incX > 0 ) { + i = incX << 1 ; + tincx = 2; + st= x+n; + } else { + i = incX *(-2); + tincx = -2; + st = x-2; + x +=(n-2); + } + + do + { + *x = *xx; + x[1] = -xx[1]; + x += tincx ; + xx += i; + } + while (x != st); + x=tx; + + + #ifdef F77_INT + F77_incX = 1; + #else + incx = 1; + #endif + + if(incY > 0) + tincY = incY; + else + tincY = -incY; + y++; + + i = tincY << 1; + n = i * N ; + st = y + n; + do { + *y = -(*y); + y += i; + } while(y != st); + y -= n; + } else + x = (float *) X; + + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_chbmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_chbmv(F77_UL, &F77_N, &F77_K, ALPHA, + A ,&F77_lda, x,&F77_incX, BETA, Y, &F77_incY); + } + else + { + cblas_xerbla(1, "cblas_chbmv","Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if ( order == CblasRowMajor ) + { + RowMajorStrg = 1; + if(X!=x) + free(x); + if (N > 0) + { + do + { + *y = -(*y); + y += i; + } + while (y != st); + } + } + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_chemm.c b/CBLAS/src/cblas_chemm.c new file mode 100644 index 000000000..89b80f5dc --- /dev/null +++ b/CBLAS/src/cblas_chemm.c @@ -0,0 +1,106 @@ +/* + * + * cblas_chemm.c + * This program is a C interface to chemm. + * Written by Keita Teranishi + * 4/8/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_chemm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const int M, const int N, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const void *beta, + void *C, const int ldc) +{ + char SD, UL; +#ifdef F77_CHAR + F77_CHAR F77_SD, F77_UL; +#else + #define F77_SD &SD + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_ldb=ldb; + F77_INT F77_ldc=ldc; +#else + #define F77_M M + #define F77_N N + #define F77_lda lda + #define F77_ldb ldb + #define F77_ldc ldc +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + + if( Order == CblasColMajor ) + { + if( Side == CblasRight) SD='R'; + else if ( Side == CblasLeft ) SD='L'; + else + { + cblas_xerbla(2, "cblas_chemm", "Illegal Side setting, %d\n", Side); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Uplo == CblasUpper) UL='U'; + else if ( Uplo == CblasLower ) UL='L'; + else + { + cblas_xerbla(3, "cblas_chemm", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_SD = C2F_CHAR(&SD); + #endif + + F77_chemm(F77_SD, F77_UL, &F77_M, &F77_N, alpha, A, &F77_lda, + B, &F77_ldb, beta, C, &F77_ldc); + } else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + if( Side == CblasRight) SD='L'; + else if ( Side == CblasLeft ) SD='R'; + else + { + cblas_xerbla(2, "cblas_chemm", "Illegal Side setting, %d\n", Side); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Uplo == CblasUpper) UL='L'; + else if ( Uplo == CblasLower ) UL='U'; + else + { + cblas_xerbla(3, "cblas_chemm", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_SD = C2F_CHAR(&SD); + #endif + + F77_chemm(F77_SD, F77_UL, &F77_N, &F77_M, alpha, A, + &F77_lda, B, &F77_ldb, beta, C, &F77_ldc); + } + else cblas_xerbla(1, "cblas_chemm", "Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_chemv.c b/CBLAS/src/cblas_chemv.c new file mode 100644 index 000000000..f36a00d78 --- /dev/null +++ b/CBLAS/src/cblas_chemv.c @@ -0,0 +1,160 @@ +/* + * cblas_chemv.c + * The program is a C interface to chemv + * + * Keita Teranishi 5/18/98 + * + */ +#include +#include +#include "cblas.h" +#include "cblas_f77.h" +void cblas_chemv(const enum CBLAS_ORDER order, + const enum CBLAS_UPLO Uplo, const int N, + const void *alpha, const void *A, const int lda, + const void *X, const int incX, const void *beta, + void *Y, const int incY) +{ + char UL; +#ifdef F77_CHAR + F77_CHAR F77_UL; +#else + #define F77_UL &UL +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_lda=lda, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_lda lda + #define F77_incX incx + #define F77_incY incY +#endif + int n=0, i=0, incx=incX; + const float *xx= (float *)X, *alp= (float *)alpha, *bet = (float *)beta; + float ALPHA[2],BETA[2]; + int tincY, tincx; + float *x=(float *)X, *y=(float *)Y, *st=0, *tx; + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_chemv","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_chemv(F77_UL, &F77_N, alpha, A, &F77_lda, X, &F77_incX, + beta, Y, &F77_incY); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + ALPHA[0]= *alp; + ALPHA[1]= -alp[1]; + BETA[0]= *bet; + BETA[1]= -bet[1]; + + if (N > 0) + { + n = N << 1; + x = malloc(n*sizeof(float)); + + tx = x; + if( incX > 0 ) { + i = incX << 1 ; + tincx = 2; + st= x+n; + } else { + i = incX *(-2); + tincx = -2; + st = x-2; + x +=(n-2); + } + + do + { + *x = *xx; + x[1] = -xx[1]; + x += tincx ; + xx += i; + } + while (x != st); + x=tx; + + + #ifdef F77_INT + F77_incX = 1; + #else + incx = 1; + #endif + + if(incY > 0) + tincY = incY; + else + tincY = -incY; + y++; + + i = tincY << 1; + n = i * N ; + st = y + n; + do { + *y = -(*y); + y += i; + } while(y != st); + y -= n; + } else + x = (float *) X; + + + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_chemv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_chemv(F77_UL, &F77_N, ALPHA, A, &F77_lda, x, &F77_incX, + BETA, Y, &F77_incY); + } + else + { + cblas_xerbla(1, "cblas_chemv","Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if ( order == CblasRowMajor ) + { + RowMajorStrg = 1; + if ( X != x ) + free(x); + if (N > 0) + { + do + { + *y = -(*y); + y += i; + } + while (y != st); + } + } + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_cher.c b/CBLAS/src/cblas_cher.c new file mode 100644 index 000000000..3332868ad --- /dev/null +++ b/CBLAS/src/cblas_cher.c @@ -0,0 +1,116 @@ +/* + * cblas_cher.c + * The program is a C interface to cher. + * + * Keita Teranishi 5/20/98 + * + */ +#include +#include +#include "cblas.h" +#include "cblas_f77.h" +void cblas_cher(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const void *X, const int incX + ,void *A, const int lda) +{ + char UL; +#ifdef F77_CHAR + F77_CHAR F77_UL; +#else + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_N=N, F77_lda=lda, F77_incX=incX; +#else + #define F77_N N + #define F77_lda lda + #define F77_incX incx +#endif + int n, i, tincx, incx=incX; + float *x=(float *)X, *xx=(float *)X, *tx, *st; + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasLower) UL = 'L'; + else if (Uplo == CblasUpper) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_cher","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + + F77_cher(F77_UL, &F77_N, &alpha, X, &F77_incX, A, &F77_lda); + + } else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_cher","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + if (N > 0) + { + n = N << 1; + x = malloc(n*sizeof(float)); + tx = x; + if( incX > 0 ) { + i = incX << 1 ; + tincx = 2; + st= x+n; + } else { + i = incX *(-2); + tincx = -2; + st = x-2; + x +=(n-2); + } + do + { + *x = *xx; + x[1] = -xx[1]; + x += tincx ; + xx += i; + } + while (x != st); + x=tx; + + #ifdef F77_INT + F77_incX = 1; + #else + incx = 1; + #endif + } + else x = (float *) X; + F77_cher(F77_UL, &F77_N, &alpha, x, &F77_incX, A, &F77_lda); + } else + { + cblas_xerbla(1, "cblas_cher","Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if(X!=x) + free(x); + + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_cher2.c b/CBLAS/src/cblas_cher2.c new file mode 100644 index 000000000..1bcdd3a6d --- /dev/null +++ b/CBLAS/src/cblas_cher2.c @@ -0,0 +1,152 @@ +/* + * cblas_cher2.c + * The program is a C interface to cher2. + * + * Keita Teranishi 3/23/98 + * + */ +#include +#include +#include "cblas.h" +#include "cblas_f77.h" +void cblas_cher2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *A, const int lda) +{ + char UL; +#ifdef F77_CHAR + F77_CHAR F77_UL; +#else + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_N=N, F77_lda=lda, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_lda lda + #define F77_incX incx + #define F77_incY incy +#endif + int n, i, j, tincx, tincy, incx=incX, incy=incY; + float *x=(float *)X, *xx=(float *)X, *y=(float *)Y, + *yy=(float *)Y, *tx, *ty, *stx, *sty; + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasLower) UL = 'L'; + else if (Uplo == CblasUpper) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_cher2","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + + F77_cher2(F77_UL, &F77_N, alpha, X, &F77_incX, + Y, &F77_incY, A, &F77_lda); + + } else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_cher2","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + if (N > 0) + { + n = N << 1; + x = malloc(n*sizeof(float)); + y = malloc(n*sizeof(float)); + tx = x; + ty = y; + if( incX > 0 ) { + i = incX << 1 ; + tincx = 2; + stx= x+n; + } else { + i = incX *(-2); + tincx = -2; + stx = x-2; + x +=(n-2); + } + + if( incY > 0 ) { + j = incY << 1; + tincy = 2; + sty= y+n; + } else { + j = incY *(-2); + tincy = -2; + sty = y-2; + y +=(n-2); + } + + do + { + *x = *xx; + x[1] = -xx[1]; + x += tincx ; + xx += i; + } + while (x != stx); + + do + { + *y = *yy; + y[1] = -yy[1]; + y += tincy ; + yy += j; + } + while (y != sty); + + x=tx; + y=ty; + + #ifdef F77_INT + F77_incX = 1; + F77_incY = 1; + #else + incx = 1; + incy = 1; + #endif + } else + { + x = (float *) X; + y = (float *) Y; + } + F77_cher2(F77_UL, &F77_N, alpha, y, &F77_incY, x, + &F77_incX, A, &F77_lda); + } else + { + cblas_xerbla(1, "cblas_cher2","Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if(X!=x) + free(x); + if(Y!=y) + free(y); + + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_cher2k.c b/CBLAS/src/cblas_cher2k.c new file mode 100644 index 000000000..b4082ef23 --- /dev/null +++ b/CBLAS/src/cblas_cher2k.c @@ -0,0 +1,111 @@ +/* + * + * cblas_cher2k.c + * This program is a C interface to cher2k. + * Written by Keita Teranishi + * 4/8/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_cher2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const float beta, + void *C, const int ldc) +{ + char UL, TR; +#ifdef F77_CHAR + F77_CHAR F77_TR, F77_UL; +#else + #define F77_TR &TR + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_N=N, F77_K=K, F77_lda=lda, F77_ldb=ldb; + F77_INT F77_ldc=ldc; +#else + #define F77_N N + #define F77_K K + #define F77_lda lda + #define F77_ldb ldb + #define F77_ldc ldc +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + float ALPHA[2]; + const float *alp=(float *)alpha; + + CBLAS_CallFromC = 1; + RowMajorStrg = 0; + + if( Order == CblasColMajor ) + { + + if( Uplo == CblasUpper) UL='U'; + else if ( Uplo == CblasLower ) UL='L'; + else + { + cblas_xerbla(2, "cblas_cher2k", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Trans == CblasTrans) TR ='T'; + else if ( Trans == CblasConjTrans ) TR='C'; + else if ( Trans == CblasNoTrans ) TR='N'; + else + { + cblas_xerbla(3, "cblas_cher2k", "Illegal Trans setting, %d\n", Trans); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TR = C2F_CHAR(&TR); + #endif + + F77_cher2k(F77_UL, F77_TR, &F77_N, &F77_K, alpha, A, &F77_lda, B, &F77_ldb, &beta, C, &F77_ldc); + } else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + + if( Uplo == CblasUpper) UL='L'; + else if ( Uplo == CblasLower ) UL='U'; + else + { + cblas_xerbla(2, "cblas_cher2k", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if( Trans == CblasTrans) TR ='N'; + else if ( Trans == CblasConjTrans ) TR='N'; + else if ( Trans == CblasNoTrans ) TR='C'; + else + { + cblas_xerbla(3, "cblas_cher2k", "Illegal Trans setting, %d\n", Trans); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TR = C2F_CHAR(&TR); + #endif + + ALPHA[0]= *alp; + ALPHA[1]= -alp[1]; + F77_cher2k(F77_UL,F77_TR, &F77_N, &F77_K, ALPHA, A, &F77_lda, B, &F77_ldb, &beta, C, &F77_ldc); + } + else cblas_xerbla(1, "cblas_cher2k", "Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_cherk.c b/CBLAS/src/cblas_cherk.c new file mode 100644 index 000000000..fd0e09b43 --- /dev/null +++ b/CBLAS/src/cblas_cherk.c @@ -0,0 +1,105 @@ +/* + * + * cblas_cherk.c + * This program is a C interface to cherk. + * Written by Keita Teranishi + * 4/8/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_cherk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const float alpha, const void *A, const int lda, + const float beta, void *C, const int ldc) +{ + char UL, TR; +#ifdef F77_CHAR + F77_CHAR F77_TR, F77_UL; +#else + #define F77_TR &TR + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_N=N, F77_K=K, F77_lda=lda; + F77_INT F77_ldc=ldc; +#else + #define F77_N N + #define F77_K K + #define F77_lda lda + #define F77_ldc ldc +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + + if( Order == CblasColMajor ) + { + if( Uplo == CblasUpper) UL='U'; + else if ( Uplo == CblasLower ) UL='L'; + else + { + cblas_xerbla(2, "cblas_cherk", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Trans == CblasTrans) TR ='T'; + else if ( Trans == CblasConjTrans ) TR='C'; + else if ( Trans == CblasNoTrans ) TR='N'; + else + { + cblas_xerbla(3, "cblas_cherk", "Illegal Trans setting, %d\n", Trans); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TR = C2F_CHAR(&TR); + #endif + + F77_cherk(F77_UL, F77_TR, &F77_N, &F77_K, &alpha, A, &F77_lda, + &beta, C, &F77_ldc); + } else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + if( Uplo == CblasUpper) UL='L'; + else if ( Uplo == CblasLower ) UL='U'; + else + { + cblas_xerbla(3, "cblas_cherk", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if( Trans == CblasTrans) TR ='N'; + else if ( Trans == CblasConjTrans ) TR='N'; + else if ( Trans == CblasNoTrans ) TR='C'; + else + { + cblas_xerbla(3, "cblas_cherk", "Illegal Trans setting, %d\n", Trans); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_SD = C2F_CHAR(&SD); + #endif + + F77_cherk(F77_UL, F77_TR, &F77_N, &F77_K, &alpha, A, &F77_lda, + &beta, C, &F77_ldc); + } + else cblas_xerbla(1, "cblas_cherk", "Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_chpmv.c b/CBLAS/src/cblas_chpmv.c new file mode 100644 index 000000000..c805756eb --- /dev/null +++ b/CBLAS/src/cblas_chpmv.c @@ -0,0 +1,160 @@ +/* + * cblas_chpmv.c + * The program is a C interface of chpmv + * + * Keita Teranishi 5/18/98 + * + */ +#include +#include +#include "cblas.h" +#include "cblas_f77.h" +void cblas_chpmv(const enum CBLAS_ORDER order, + const enum CBLAS_UPLO Uplo,const int N, + const void *alpha, const void *AP, + const void *X, const int incX, const void *beta, + void *Y, const int incY) +{ + char UL; +#ifdef F77_CHAR + F77_CHAR F77_UL; +#else + #define F77_UL &UL +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_K=K, F77_lda=lda, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incx + #define F77_incY incY +#endif + int n, i=0, incx=incX; + const float *xx= (float *)X, *alp= (float *)alpha, *bet = (float *)beta; + float ALPHA[2],BETA[2]; + int tincY, tincx; + float *x=(float *)X, *y=(float *)Y, *st=0, *tx; + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasLower) UL = 'L'; + else if (Uplo == CblasUpper) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_chpmv","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_chpmv(F77_UL, &F77_N, alpha, AP, X, + &F77_incX, beta, Y, &F77_incY); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + ALPHA[0]= *alp; + ALPHA[1]= -alp[1]; + BETA[0]= *bet; + BETA[1]= -bet[1]; + + if (N > 0) + { + n = N << 1; + x = malloc(n*sizeof(float)); + + tx = x; + if( incX > 0 ) { + i = incX << 1; + tincx = 2; + st= x+n; + } else { + i = incX *(-2); + tincx = -2; + st = x-2; + x +=(n-2); + } + + do + { + *x = *xx; + x[1] = -xx[1]; + x += tincx ; + xx += i; + } + while (x != st); + x=tx; + + + #ifdef F77_INT + F77_incX = 1; + #else + incx = 1; + #endif + + if(incY > 0) + tincY = incY; + else + tincY = -incY; + y++; + + i = tincY << 1; + n = i * N ; + st = y + n; + do { + *y = -(*y); + y += i; + } while(y != st); + y -= n; + } else + x = (float *) X; + + + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_chpmv","Illegal Uplo setting, %d\n", Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + + F77_chpmv(F77_UL, &F77_N, ALPHA, + AP, x, &F77_incX, BETA, Y, &F77_incY); + } + else + { + cblas_xerbla(1, "cblas_chpmv","Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if ( order == CblasRowMajor ) + { + RowMajorStrg = 1; + if(X!=x) + free(x); + if (N > 0) + { + do + { + *y = -(*y); + y += i; + } + while (y != st); + } + } + + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_chpr.c b/CBLAS/src/cblas_chpr.c new file mode 100644 index 000000000..9b39f38bd --- /dev/null +++ b/CBLAS/src/cblas_chpr.c @@ -0,0 +1,115 @@ +/* + * cblas_chpr.c + * The program is a C interface to chpr. + * + * Keita Teranishi 3/23/98 + * + */ +#include +#include +#include "cblas.h" +#include "cblas_f77.h" +void cblas_chpr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const void *X, + const int incX, void *A) +{ + char UL; +#ifdef F77_CHAR + F77_CHAR F77_UL; +#else + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incx +#endif + int n, i, tincx, incx=incX; + float *x=(float *)X, *xx=(float *)X, *tx, *st; + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasLower) UL = 'L'; + else if (Uplo == CblasUpper) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_chpr","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + + F77_chpr(F77_UL, &F77_N, &alpha, X, &F77_incX, A); + + } else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_chpr","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + if (N > 0) + { + n = N << 1; + x = malloc(n*sizeof(float)); + tx = x; + if( incX > 0 ) { + i = incX << 1; + tincx = 2; + st= x+n; + } else { + i = incX *(-2); + tincx = -2; + st = x-2; + x +=(n-2); + } + do + { + *x = *xx; + x[1] = -xx[1]; + x += tincx ; + xx += i; + } + while (x != st); + x=tx; + #ifdef F77_INT + F77_incX = 1; + #else + incx = 1; + #endif + } + else x = (float *) X; + + F77_chpr(F77_UL, &F77_N, &alpha, x, &F77_incX, A); + + } else + { + cblas_xerbla(1, "cblas_chpr","Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if(X!=x) + free(x); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_chpr2.c b/CBLAS/src/cblas_chpr2.c new file mode 100644 index 000000000..e43077db6 --- /dev/null +++ b/CBLAS/src/cblas_chpr2.c @@ -0,0 +1,149 @@ +/* + * cblas_chpr2.c + * The program is a C interface to chpr2. + * + * Keita Teranishi 5/20/98 + * + */ +#include +#include +#include "cblas.h" +#include "cblas_f77.h" +void cblas_chpr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N,const void *alpha, const void *X, + const int incX,const void *Y, const int incY, void *Ap) + +{ + char UL; +#ifdef F77_CHAR + F77_CHAR F77_UL; +#else + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incx + #define F77_incY incy +#endif + int n, i, j, tincx, tincy, incx=incX, incy=incY; + float *x=(float *)X, *xx=(float *)X, *y=(float *)Y, + *yy=(float *)Y, *tx, *ty, *stx, *sty; + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasLower) UL = 'L'; + else if (Uplo == CblasUpper) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_chpr2","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + + F77_chpr2(F77_UL, &F77_N, alpha, X, &F77_incX, Y, &F77_incY, Ap); + + } else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_chpr2","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + if (N > 0) + { + n = N << 1; + x = malloc(n*sizeof(float)); + y = malloc(n*sizeof(float)); + tx = x; + ty = y; + if( incX > 0 ) { + i = incX << 1 ; + tincx = 2; + stx= x+n; + } else { + i = incX *(-2); + tincx = -2; + stx = x-2; + x +=(n-2); + } + + if( incY > 0 ) { + j = incY << 1; + tincy = 2; + sty= y+n; + } else { + j = incY *(-2); + tincy = -2; + sty = y-2; + y +=(n-2); + } + + do + { + *x = *xx; + x[1] = -xx[1]; + x += tincx ; + xx += i; + } + while (x != stx); + do + { + *y = *yy; + y[1] = -yy[1]; + y += tincy ; + yy += j; + } + while (y != sty); + + x=tx; + y=ty; + + #ifdef F77_INT + F77_incX = 1; + F77_incY = 1; + #else + incx = 1; + incy = 1; + #endif + + } else + { + x = (float *) X; + y = (void *) Y; + } + F77_chpr2(F77_UL, &F77_N, alpha, y, &F77_incY, x, &F77_incX, Ap); + } else + { + cblas_xerbla(1, "cblas_chpr2","Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if(X!=x) + free(x); + if(Y!=y) + free(y); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_cscal.c b/CBLAS/src/cblas_cscal.c new file mode 100644 index 000000000..a23e6ee57 --- /dev/null +++ b/CBLAS/src/cblas_cscal.c @@ -0,0 +1,21 @@ +/* + * cblas_cscal.c + * + * The program is a C interface to cscal.f. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_cscal( const int N, const void *alpha, void *X, + const int incX) +{ +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incX +#endif + F77_cscal( &F77_N, alpha, X, &F77_incX); +} diff --git a/CBLAS/src/cblas_csscal.c b/CBLAS/src/cblas_csscal.c new file mode 100644 index 000000000..39983fe07 --- /dev/null +++ b/CBLAS/src/cblas_csscal.c @@ -0,0 +1,21 @@ +/* + * cblas_csscal.c + * + * The program is a C interface to csscal. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_csscal( const int N, const float alpha, void *X, + const int incX) +{ +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incX +#endif + F77_csscal( &F77_N, &alpha, X, &F77_incX); +} diff --git a/CBLAS/src/cblas_cswap.c b/CBLAS/src/cblas_cswap.c new file mode 100644 index 000000000..127282072 --- /dev/null +++ b/CBLAS/src/cblas_cswap.c @@ -0,0 +1,22 @@ +/* + * cblas_cswap.c + * + * The program is a C interface to cswap. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_cswap( const int N, void *X, const int incX, void *Y, + const int incY) +{ +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY +#endif + F77_cswap( &F77_N, X, &F77_incX, Y, &F77_incY); +} diff --git a/CBLAS/src/cblas_csymm.c b/CBLAS/src/cblas_csymm.c new file mode 100644 index 000000000..4db34e346 --- /dev/null +++ b/CBLAS/src/cblas_csymm.c @@ -0,0 +1,106 @@ +/* + * + * cblas_csymm.c + * This program is a C interface to csymm. + * Written by Keita Teranishi + * 4/8/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_csymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const int M, const int N, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const void *beta, + void *C, const int ldc) +{ + char SD, UL; +#ifdef F77_CHAR + F77_CHAR F77_SD, F77_UL; +#else + #define F77_SD &SD + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_ldb=ldb; + F77_INT F77_ldc=ldc; +#else + #define F77_M M + #define F77_N N + #define F77_lda lda + #define F77_ldb ldb + #define F77_ldc ldc +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + + if( Order == CblasColMajor ) + { + if( Side == CblasRight) SD='R'; + else if ( Side == CblasLeft ) SD='L'; + else + { + cblas_xerbla(2, "cblas_csymm", "Illegal Side setting, %d\n", Side); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Uplo == CblasUpper) UL='U'; + else if ( Uplo == CblasLower ) UL='L'; + else + { + cblas_xerbla(3, "cblas_csymm", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_SD = C2F_CHAR(&SD); + #endif + + F77_csymm(F77_SD, F77_UL, &F77_M, &F77_N, alpha, A, &F77_lda, + B, &F77_ldb, beta, C, &F77_ldc); + } else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + if( Side == CblasRight) SD='L'; + else if ( Side == CblasLeft ) SD='R'; + else + { + cblas_xerbla(2, "cblas_csymm", "Illegal Side setting, %d\n", Side); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Uplo == CblasUpper) UL='L'; + else if ( Uplo == CblasLower ) UL='U'; + else + { + cblas_xerbla(3, "cblas_csymm", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_SD = C2F_CHAR(&SD); + #endif + + F77_csymm(F77_SD, F77_UL, &F77_N, &F77_M, alpha, A, &F77_lda, + B, &F77_ldb, beta, C, &F77_ldc); + } + else cblas_xerbla(1, "cblas_csymm", "Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_csyr2k.c b/CBLAS/src/cblas_csyr2k.c new file mode 100644 index 000000000..5ca3f34cd --- /dev/null +++ b/CBLAS/src/cblas_csyr2k.c @@ -0,0 +1,108 @@ +/* + * + * cblas_csyr2k.c + * This program is a C interface to csyr2k. + * Written by Keita Teranishi + * 4/8/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_csyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const void *beta, + void *C, const int ldc) +{ + char UL, TR; +#ifdef F77_CHAR + F77_CHAR F77_TR, F77_UL; +#else + #define F77_TR &TR + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_N=N, F77_K=K, F77_lda=lda, F77_ldb=ldb; + F77_INT F77_ldc=ldc; +#else + #define F77_N N + #define F77_K K + #define F77_lda lda + #define F77_ldb ldb + #define F77_ldc ldc +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + + if( Order == CblasColMajor ) + { + + if( Uplo == CblasUpper) UL='U'; + else if ( Uplo == CblasLower ) UL='L'; + else + { + cblas_xerbla(2, "cblas_csyr2k", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Trans == CblasTrans) TR ='T'; + else if ( Trans == CblasConjTrans ) TR='C'; + else if ( Trans == CblasNoTrans ) TR='N'; + else + { + cblas_xerbla(3, "cblas_csyr2k", "Illegal Trans setting, %d\n", Trans); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TR = C2F_CHAR(&TR); + #endif + + F77_csyr2k(F77_UL, F77_TR, &F77_N, &F77_K, alpha, A, &F77_lda, + B, &F77_ldb, beta, C, &F77_ldc); + } else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + if( Uplo == CblasUpper) UL='L'; + else if ( Uplo == CblasLower ) UL='U'; + else + { + cblas_xerbla(3, "cblas_csyr2k", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if( Trans == CblasTrans) TR ='N'; + else if ( Trans == CblasConjTrans ) TR='N'; + else if ( Trans == CblasNoTrans ) TR='T'; + else + { + cblas_xerbla(3, "cblas_csyr2k", "Illegal Trans setting, %d\n", Trans); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TR = C2F_CHAR(&TR); + #endif + + F77_csyr2k(F77_UL, F77_TR, &F77_N, &F77_K, alpha, A, &F77_lda, B, &F77_ldb, beta, C, &F77_ldc); + } + else cblas_xerbla(1, "cblas_csyr2k", "Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_csyrk.c b/CBLAS/src/cblas_csyrk.c new file mode 100644 index 000000000..3f0bb07ea --- /dev/null +++ b/CBLAS/src/cblas_csyrk.c @@ -0,0 +1,108 @@ +/* + * + * cblas_csyrk.c + * This program is a C interface to csyrk. + * Written by Keita Teranishi + * 4/8/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_csyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const void *alpha, const void *A, const int lda, + const void *beta, void *C, const int ldc) +{ + char UL, TR; +#ifdef F77_CHAR + F77_CHAR F77_TR, F77_UL; +#else + #define F77_TR &TR + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_N=N, F77_K=K, F77_lda=lda; + F77_INT F77_ldc=ldc; +#else + #define F77_N N + #define F77_K K + #define F77_lda lda + #define F77_ldc ldc +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + + if( Order == CblasColMajor ) + { + + if( Uplo == CblasUpper) UL='U'; + else if ( Uplo == CblasLower ) UL='L'; + else + { + cblas_xerbla(2, "cblas_csyrk", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Trans == CblasTrans) TR ='T'; + else if ( Trans == CblasConjTrans ) TR='C'; + else if ( Trans == CblasNoTrans ) TR='N'; + else + { + cblas_xerbla(3, "cblas_csyrk", "Illegal Trans setting, %d\n", Trans); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TR = C2F_CHAR(&TR); + #endif + + F77_csyrk(F77_UL, F77_TR, &F77_N, &F77_K, alpha, A, &F77_lda, + beta, C, &F77_ldc); + } else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + if( Uplo == CblasUpper) UL='L'; + else if ( Uplo == CblasLower ) UL='U'; + else + { + cblas_xerbla(3, "cblas_csyrk", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if( Trans == CblasTrans) TR ='N'; + else if ( Trans == CblasConjTrans ) TR='N'; + else if ( Trans == CblasNoTrans ) TR='T'; + else + { + cblas_xerbla(3, "cblas_csyrk", "Illegal Trans setting, %d\n", Trans); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TR = C2F_CHAR(&TR); + #endif + + F77_csyrk(F77_UL, F77_TR, &F77_N, &F77_K, alpha, A, &F77_lda, + beta, C, &F77_ldc); + } + else cblas_xerbla(1, "cblas_csyrk", "Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} + diff --git a/CBLAS/src/cblas_ctbmv.c b/CBLAS/src/cblas_ctbmv.c new file mode 100644 index 000000000..7845cc828 --- /dev/null +++ b/CBLAS/src/cblas_ctbmv.c @@ -0,0 +1,158 @@ +/* + * cblas_ctbmv.c + * The program is a C interface to ctbmv. + * + * Keita Teranishi 5/20/98 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_ctbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const void *A, const int lda, + void *X, const int incX) +{ + char TA; + char UL; + char DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_DI &DI +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_lda=lda, F77_K=K, F77_incX=incX; +#else + #define F77_N N + #define F77_K K + #define F77_lda lda + #define F77_incX incX +#endif + int n, i=0, tincX; + float *st=0, *x=(float *)X; + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_ctbmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(3, "cblas_ctbmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_ctbmv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_ctbmv( F77_UL, F77_TA, F77_DI, &F77_N, &F77_K, A, &F77_lda, X, + &F77_incX); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_ctbmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) + { + TA = 'N'; + if ( N > 0) + { + if(incX > 0) + tincX = incX; + else + tincX = -incX; + i = tincX << 1; + n = i * N; + x++; + st = x + n; + do + { + *x = -(*x); + x+= i; + } + while (x != st); + x -= n; + } + } + else + { + cblas_xerbla(3, "cblas_ctbmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_ctbmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + + F77_ctbmv( F77_UL, F77_TA, F77_DI, &F77_N, &F77_K, A, &F77_lda, X, + &F77_incX); + + if (TransA == CblasConjTrans) + { + if (N > 0) + { + do + { + *x = -(*x); + x += i; + } + while (x != st); + } + } + } + else cblas_xerbla(1, "cblas_ctbmv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_ctbsv.c b/CBLAS/src/cblas_ctbsv.c new file mode 100644 index 000000000..ab4646b54 --- /dev/null +++ b/CBLAS/src/cblas_ctbsv.c @@ -0,0 +1,162 @@ +/* + * cblas_ctbsv.c + * The program is a C interface to ctbsv. + * + * Keita Teranishi 3/23/98 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_ctbsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const void *A, const int lda, + void *X, const int incX) +{ + char TA; + char UL; + char DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_DI &DI +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_lda=lda, F77_K=K, F77_incX=incX; +#else + #define F77_N N + #define F77_K K + #define F77_lda lda + #define F77_incX incX +#endif + int n, i=0, tincX; + float *st=0,*x=(float *)X; + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_ctbsv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(3, "cblas_ctbsv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_ctbsv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_ctbsv( F77_UL, F77_TA, F77_DI, &F77_N, &F77_K, A, &F77_lda, X, + &F77_incX); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_ctbsv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) + { + TA = 'N'; + if ( N > 0) + { + if ( incX > 0 ) + tincX = incX; + else + tincX = -incX; + + n = N*2*(tincX); + + x++; + + st=x+n; + + i = tincX << 1; + do + { + *x = -(*x); + x+=i; + } + while (x != st); + x -= n; + } + } + else + { + cblas_xerbla(3, "cblas_ctbsv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_ctbsv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + + F77_ctbsv( F77_UL, F77_TA, F77_DI, &F77_N, &F77_K, A, &F77_lda, X, + &F77_incX); + + if (TransA == CblasConjTrans) + { + if (N > 0) + { + do + { + *x = -(*x); + x+= i; + } + while (x != st); + } + } + } + else cblas_xerbla(1, "cblas_ctbsv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_ctpmv.c b/CBLAS/src/cblas_ctpmv.c new file mode 100644 index 000000000..7a4d63af2 --- /dev/null +++ b/CBLAS/src/cblas_ctpmv.c @@ -0,0 +1,152 @@ +/* + * cblas_ctpmv.c + * The program is a C interface to ctpmv. + * + * Keita Teranishi 5/20/98 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_ctpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *Ap, void *X, const int incX) +{ + char TA; + char UL; + char DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_DI &DI +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incX +#endif + int n, i=0, tincX; + float *st=0,*x=(float *)X; + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_ctpmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(3, "cblas_ctpmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_ctpmv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_ctpmv( F77_UL, F77_TA, F77_DI, &F77_N, Ap, X, &F77_incX); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_ctpmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) + { + TA = 'N'; + if ( N > 0) + { + if(incX > 0) + tincX = incX; + else + tincX = -incX; + i = tincX << 1; + n = i * N; + x++; + st = x + n; + do + { + *x = -(*x); + x += i; + } + while (x != st); + x -= n; + } + } + else + { + cblas_xerbla(3, "cblas_ctpmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_ctpmv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + + F77_ctpmv( F77_UL, F77_TA, F77_DI, &F77_N, Ap, X,&F77_incX); + if (TransA == CblasConjTrans) + { + if (N > 0) + { + do + { + *x = -(*x); + x += i; + } + while (x != st); + } + } + } + else cblas_xerbla(1, "cblas_ctpmv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_ctpsv.c b/CBLAS/src/cblas_ctpsv.c new file mode 100644 index 000000000..d39687cbf --- /dev/null +++ b/CBLAS/src/cblas_ctpsv.c @@ -0,0 +1,157 @@ +/* + * cblas_ctpsv.c + * The program is a C interface to ctpsv. + * + * Keita Teranishi 3/23/98 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_ctpsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *Ap, void *X, const int incX) +{ + char TA; + char UL; + char DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_DI &DI +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incX +#endif + int n, i=0, tincX; + float *st=0, *x=(float*)X; + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_ctpsv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(3, "cblas_ctpsv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_ctpsv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_ctpsv( F77_UL, F77_TA, F77_DI, &F77_N, Ap, X, &F77_incX); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_ctpsv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) + { + TA = 'N'; + if ( N > 0) + { + if ( incX > 0 ) + tincX = incX; + else + tincX = -incX; + + n = N*2*(tincX); + + x++; + + st=x+n; + + i = tincX << 1; + do + { + *x = -(*x); + x+=i; + } + while (x != st); + x -= n; + } + } + else + { + cblas_xerbla(3, "cblas_ctpsv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_ctpsv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + + F77_ctpsv( F77_UL, F77_TA, F77_DI, &F77_N, Ap, X,&F77_incX); + + if (TransA == CblasConjTrans) + { + if (N > 0) + { + do + { + *x = -(*x); + x += i; + } + while (x != st); + } + } + } + else cblas_xerbla(1, "cblas_ctpsv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_ctrmm.c b/CBLAS/src/cblas_ctrmm.c new file mode 100644 index 000000000..d70bfd308 --- /dev/null +++ b/CBLAS/src/cblas_ctrmm.c @@ -0,0 +1,144 @@ +/* + * + * cblas_ctrmm.c + * This program is a C interface to ctrmm. + * Written by Keita Teranishi + * 4/8/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_ctrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const void *alpha, const void *A, const int lda, + void *B, const int ldb) +{ + char UL, TA, SD, DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_SD, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_SD &SD + #define F77_DI &DI +#endif + +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_ldb=ldb; +#else + #define F77_M M + #define F77_N N + #define F77_lda lda + #define F77_ldb ldb +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + + if( Order == CblasColMajor ) + { + if( Side == CblasRight ) SD='R'; + else if ( Side == CblasLeft ) SD='L'; + else + { + cblas_xerbla(2, "cblas_ctrmm", "Illegal Side setting, %d\n", Side); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if( Uplo == CblasUpper ) UL='U'; + else if ( Uplo == CblasLower ) UL='L'; + else + { + cblas_xerbla(3, "cblas_ctrmm", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( TransA == CblasTrans ) TA ='T'; + else if ( TransA == CblasConjTrans ) TA='C'; + else if ( TransA == CblasNoTrans ) TA='N'; + else + { + cblas_xerbla(4, "cblas_ctrmm", "Illegal Trans setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Diag == CblasUnit ) DI='U'; + else if ( Diag == CblasNonUnit ) DI='N'; + else cblas_xerbla(5, "cblas_ctrmm", + "Illegal Diag setting, %d\n", Diag); + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_SD = C2F_CHAR(&SD); + F77_DI = C2F_CHAR(&DI); + #endif + + F77_ctrmm(F77_SD, F77_UL, F77_TA, F77_DI, &F77_M, &F77_N, alpha, A, &F77_lda, B, &F77_ldb); + } else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + if( Side == CblasRight ) SD='L'; + else if ( Side == CblasLeft ) SD='R'; + else + { + cblas_xerbla(2, "cblas_ctrmm", "Illegal Side setting, %d\n", Side); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Uplo == CblasUpper ) UL='L'; + else if ( Uplo == CblasLower ) UL='U'; + else + { + cblas_xerbla(3, "cblas_ctrmm", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( TransA == CblasTrans ) TA ='T'; + else if ( TransA == CblasConjTrans ) TA='C'; + else if ( TransA == CblasNoTrans ) TA='N'; + else + { + cblas_xerbla(4, "cblas_ctrmm", "Illegal Trans setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Diag == CblasUnit ) DI='U'; + else if ( Diag == CblasNonUnit ) DI='N'; + else + { + cblas_xerbla(5, "cblas_ctrmm", "Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_SD = C2F_CHAR(&SD); + F77_DI = C2F_CHAR(&DI); + #endif + + F77_ctrmm(F77_SD, F77_UL, F77_TA, F77_DI, &F77_N, &F77_M, alpha, A, &F77_lda, B, &F77_ldb); + } + else cblas_xerbla(1, "cblas_ctrmm", "Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_ctrmv.c b/CBLAS/src/cblas_ctrmv.c new file mode 100644 index 000000000..3d284388c --- /dev/null +++ b/CBLAS/src/cblas_ctrmv.c @@ -0,0 +1,155 @@ +/* + * cblas_ctrmv.c + * The program is a C interface to ctrmv. + * + * Keita Teranishi 3/23/98 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_ctrmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *A, const int lda, + void *X, const int incX) + +{ + char TA; + char UL; + char DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_DI &DI +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_lda=lda, F77_incX=incX; +#else + #define F77_N N + #define F77_lda lda + #define F77_incX incX +#endif + int n, i=0, tincX; + float *st=0,*x=(float *)X; + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_ctrmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(3, "cblas_ctrmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_ctrmv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_ctrmv( F77_UL, F77_TA, F77_DI, &F77_N, A, &F77_lda, X, + &F77_incX); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_ctrmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) + { + TA = 'N'; + if ( N > 0) + { + if(incX > 0) + tincX = incX; + else + tincX = -incX; + i = tincX << 1; + n = i * N; + st = x + n; + do + { + x[1] = -x[1]; + x+= i; + } + while (x != st); + x -= n; + } + } + else + { + cblas_xerbla(3, "cblas_ctrmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_ctrmv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_ctrmv( F77_UL, F77_TA, F77_DI, &F77_N, A, &F77_lda, X, + &F77_incX); + if (TransA == CblasConjTrans) + { + if (N > 0) + { + do + { + x[1] = -x[1]; + x += i; + } + while (x != st); + } + } + } + else cblas_xerbla(1, "cblas_ctrmv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_ctrsm.c b/CBLAS/src/cblas_ctrsm.c new file mode 100644 index 000000000..00c592d56 --- /dev/null +++ b/CBLAS/src/cblas_ctrsm.c @@ -0,0 +1,155 @@ +/* + * + * cblas_ctrsm.c + * This program is a C interface to ctrsm. + * Written by Keita Teranishi + * 4/8/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_ctrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const void *alpha, const void *A, const int lda, + void *B, const int ldb) +{ + char UL, TA, SD, DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_SD, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_SD &SD + #define F77_DI &DI +#endif + +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_ldb=ldb; +#else + #define F77_M M + #define F77_N N + #define F77_lda lda + #define F77_ldb ldb +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + + if( Order == CblasColMajor ) + { + + if( Side == CblasRight) SD='R'; + else if ( Side == CblasLeft ) SD='L'; + else + { + cblas_xerbla(2, "cblas_ctrsm", "Illegal Side setting, %d\n", Side); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Uplo == CblasUpper) UL='U'; + else if ( Uplo == CblasLower ) UL='L'; + else + { + cblas_xerbla(3, "cblas_ctrsm", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( TransA == CblasTrans) TA ='T'; + else if ( TransA == CblasConjTrans ) TA='C'; + else if ( TransA == CblasNoTrans ) TA='N'; + else + { + cblas_xerbla(4, "cblas_ctrsm", "Illegal Trans setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Diag == CblasUnit ) DI='U'; + else if ( Diag == CblasNonUnit ) DI='N'; + else + { + cblas_xerbla(5, "cblas_ctrsm", "Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_SD = C2F_CHAR(&SD); + F77_DI = C2F_CHAR(&DI); + #endif + + F77_ctrsm(F77_SD, F77_UL, F77_TA, F77_DI, &F77_M, &F77_N, alpha, A, + &F77_lda, B, &F77_ldb); + } else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + + if( Side == CblasRight) SD='L'; + else if ( Side == CblasLeft ) SD='R'; + else + { + cblas_xerbla(2, "cblas_ctrsm", "Illegal Side setting, %d\n", Side); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Uplo == CblasUpper) UL='L'; + else if ( Uplo == CblasLower ) UL='U'; + else + { + cblas_xerbla(3, "cblas_ctrsm", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( TransA == CblasTrans) TA ='T'; + else if ( TransA == CblasConjTrans ) TA='C'; + else if ( TransA == CblasNoTrans ) TA='N'; + else + { + cblas_xerbla(4, "cblas_ctrsm", "Illegal Trans setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Diag == CblasUnit ) DI='U'; + else if ( Diag == CblasNonUnit ) DI='N'; + else + { + cblas_xerbla(5, "cblas_ctrsm", "Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_SD = C2F_CHAR(&SD); + F77_DI = C2F_CHAR(&DI); + #endif + + + F77_ctrsm(F77_SD, F77_UL, F77_TA, F77_DI, &F77_N, &F77_M, alpha, A, + &F77_lda, B, &F77_ldb); + } + else cblas_xerbla(1, "cblas_ctrsm", "Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_ctrsv.c b/CBLAS/src/cblas_ctrsv.c new file mode 100644 index 000000000..39ff644cb --- /dev/null +++ b/CBLAS/src/cblas_ctrsv.c @@ -0,0 +1,156 @@ +/* + * cblas_ctrsv.c + * The program is a C interface to ctrsv. + * + * Keita Teranishi 3/23/98 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_ctrsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *A, const int lda, void *X, + const int incX) +{ + char TA; + char UL; + char DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_DI &DI +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_lda=lda, F77_incX=incX; +#else + #define F77_N N + #define F77_lda lda + #define F77_incX incX +#endif + int n, i=0, tincX; + float *st=0,*x=(float *)X; + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_ctrsv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(3, "cblas_ctrsv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_ctrsv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_ctrsv( F77_UL, F77_TA, F77_DI, &F77_N, A, &F77_lda, X, + &F77_incX); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_ctrsv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) + { + TA = 'N'; + if ( N > 0) + { + if ( incX > 0 ) + tincX = incX; + else + tincX = -incX; + + n = N*2*(tincX); + x++; + st=x+n; + i = tincX << 1; + do + { + *x = -(*x); + x+=i; + } + while (x != st); + x -= n; + } + } + else + { + cblas_xerbla(3, "cblas_ctrsv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_ctrsv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_ctrsv( F77_UL, F77_TA, F77_DI, &F77_N, A, &F77_lda, X, + &F77_incX); + if (TransA == CblasConjTrans) + { + if (N > 0) + { + do + { + *x = -(*x); + x += i; + } + while (x != st); + } + } + } + else cblas_xerbla(1, "cblas_ctrsv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_dasum.c b/CBLAS/src/cblas_dasum.c new file mode 100644 index 000000000..1a3667f2d --- /dev/null +++ b/CBLAS/src/cblas_dasum.c @@ -0,0 +1,23 @@ +/* + * cblas_dasum.c + * + * The program is a C interface to dasum. + * It calls the fortran wrapper before calling dasum. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +double cblas_dasum( const int N, const double *X, const int incX) +{ + double asum; +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incX +#endif + F77_dasum_sub( &F77_N, X, &F77_incX, &asum); + return asum; +} diff --git a/CBLAS/src/cblas_daxpy.c b/CBLAS/src/cblas_daxpy.c new file mode 100644 index 000000000..3678137fb --- /dev/null +++ b/CBLAS/src/cblas_daxpy.c @@ -0,0 +1,22 @@ +/* + * cblas_daxpy.c + * + * The program is a C interface to daxpy. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_daxpy( const int N, const double alpha, const double *X, + const int incX, double *Y, const int incY) +{ +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY +#endif + F77_daxpy( &F77_N, &alpha, X, &F77_incX, Y, &F77_incY); +} diff --git a/CBLAS/src/cblas_dcopy.c b/CBLAS/src/cblas_dcopy.c new file mode 100644 index 000000000..422a55e51 --- /dev/null +++ b/CBLAS/src/cblas_dcopy.c @@ -0,0 +1,22 @@ +/* + * cblas_dcopy.c + * + * The program is a C interface to dcopy. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_dcopy( const int N, const double *X, + const int incX, double *Y, const int incY) +{ +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY +#endif + F77_dcopy( &F77_N, X, &F77_incX, Y, &F77_incY); +} diff --git a/CBLAS/src/cblas_ddot.c b/CBLAS/src/cblas_ddot.c new file mode 100644 index 000000000..d77343403 --- /dev/null +++ b/CBLAS/src/cblas_ddot.c @@ -0,0 +1,25 @@ +/* + * cblas_ddot.c + * + * The program is a C interface to ddot. + * It calls the fortran wrapper before calling ddot. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +double cblas_ddot( const int N, const double *X, + const int incX, const double *Y, const int incY) +{ + double dot; +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY +#endif + F77_ddot_sub( &F77_N, X, &F77_incX, Y, &F77_incY, &dot); + return dot; +} diff --git a/CBLAS/src/cblas_dgbmv.c b/CBLAS/src/cblas_dgbmv.c new file mode 100644 index 000000000..33c481db1 --- /dev/null +++ b/CBLAS/src/cblas_dgbmv.c @@ -0,0 +1,81 @@ +/* + * + * cblas_dgbmv.c + * This program is a C interface to dgbmv. + * Written by Keita Teranishi + * 4/6/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_dgbmv(const enum CBLAS_ORDER order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const int KL, const int KU, + const double alpha, const double *A, const int lda, + const double *X, const int incX, const double beta, + double *Y, const int incY) +{ + char TA; +#ifdef F77_CHAR + F77_CHAR F77_TA; +#else + #define F77_TA &TA +#endif +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_incX=incX, F77_incY=incY; + F77_INT F77_KL=KL,F77_KU=KU; +#else + #define F77_M M + #define F77_N N + #define F77_lda lda + #define F77_KL KL + #define F77_KU KU + #define F77_incX incX + #define F77_incY incY +#endif + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(2, "cblas_dgbmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_TA = C2F_CHAR(&TA); + #endif + F77_dgbmv(F77_TA, &F77_M, &F77_N, &F77_KL, &F77_KU, &alpha, + A, &F77_lda, X, &F77_incX, &beta, Y, &F77_incY); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) TA = 'N'; + else + { + cblas_xerbla(2, "cblas_dgbmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_TA = C2F_CHAR(&TA); + #endif + F77_dgbmv(F77_TA, &F77_N, &F77_M, &F77_KU, &F77_KL, &alpha, + A ,&F77_lda, X,&F77_incX, &beta, Y, &F77_incY); + } + else cblas_xerbla(1, "cblas_dgbmv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; +} diff --git a/CBLAS/src/cblas_dgemm.c b/CBLAS/src/cblas_dgemm.c new file mode 100644 index 000000000..d02ac16b3 --- /dev/null +++ b/CBLAS/src/cblas_dgemm.c @@ -0,0 +1,109 @@ +/* + * + * cblas_dgemm.c + * This program is a C interface to dgemm. + * Written by Keita Teranishi + * 4/8/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_dgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_TRANSPOSE TransB, const int M, const int N, + const int K, const double alpha, const double *A, + const int lda, const double *B, const int ldb, + const double beta, double *C, const int ldc) +{ + char TA, TB; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_TB; +#else + #define F77_TA &TA + #define F77_TB &TB +#endif + +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_K=K, F77_lda=lda, F77_ldb=ldb; + F77_INT F77_ldc=ldc; +#else + #define F77_M M + #define F77_N N + #define F77_K K + #define F77_lda lda + #define F77_ldb ldb + #define F77_ldc ldc +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + + if( Order == CblasColMajor ) + { + if(TransA == CblasTrans) TA='T'; + else if ( TransA == CblasConjTrans ) TA='C'; + else if ( TransA == CblasNoTrans ) TA='N'; + else + { + cblas_xerbla(2, "cblas_dgemm","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if(TransB == CblasTrans) TB='T'; + else if ( TransB == CblasConjTrans ) TB='C'; + else if ( TransB == CblasNoTrans ) TB='N'; + else + { + cblas_xerbla(3, "cblas_dgemm","Illegal TransB setting, %d\n", TransB); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_TA = C2F_CHAR(&TA); + F77_TB = C2F_CHAR(&TB); + #endif + + F77_dgemm(F77_TA, F77_TB, &F77_M, &F77_N, &F77_K, &alpha, A, + &F77_lda, B, &F77_ldb, &beta, C, &F77_ldc); + } else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + if(TransA == CblasTrans) TB='T'; + else if ( TransA == CblasConjTrans ) TB='C'; + else if ( TransA == CblasNoTrans ) TB='N'; + else + { + cblas_xerbla(2, "cblas_dgemm","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if(TransB == CblasTrans) TA='T'; + else if ( TransB == CblasConjTrans ) TA='C'; + else if ( TransB == CblasNoTrans ) TA='N'; + else + { + cblas_xerbla(2, "cblas_dgemm","Illegal TransB setting, %d\n", TransB); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_TA = C2F_CHAR(&TA); + F77_TB = C2F_CHAR(&TB); + #endif + + F77_dgemm(F77_TA, F77_TB, &F77_N, &F77_M, &F77_K, &alpha, B, + &F77_ldb, A, &F77_lda, &beta, C, &F77_ldc); + } + else cblas_xerbla(1, "cblas_dgemm", "Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_dgemv.c b/CBLAS/src/cblas_dgemv.c new file mode 100644 index 000000000..9062f3eed --- /dev/null +++ b/CBLAS/src/cblas_dgemv.c @@ -0,0 +1,78 @@ +/* + * + * cblas_dgemv.c + * This program is a C interface to dgemv. + * Written by Keita Teranishi + * 4/6/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_dgemv(const enum CBLAS_ORDER order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const double alpha, const double *A, const int lda, + const double *X, const int incX, const double beta, + double *Y, const int incY) +{ + char TA; +#ifdef F77_CHAR + F77_CHAR F77_TA; +#else + #define F77_TA &TA +#endif +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_incX=incX, F77_incY=incY; +#else + #define F77_M M + #define F77_N N + #define F77_lda lda + #define F77_incX incX + #define F77_incY incY +#endif + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(2, "cblas_dgemv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_TA = C2F_CHAR(&TA); + #endif + F77_dgemv(F77_TA, &F77_M, &F77_N, &alpha, A, &F77_lda, X, &F77_incX, + &beta, Y, &F77_incY); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) TA = 'N'; + else + { + cblas_xerbla(2, "cblas_dgemv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_TA = C2F_CHAR(&TA); + #endif + F77_dgemv(F77_TA, &F77_N, &F77_M, &alpha, A, &F77_lda, X, + &F77_incX, &beta, Y, &F77_incY); + } + else cblas_xerbla(1, "cblas_dgemv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_dger.c b/CBLAS/src/cblas_dger.c new file mode 100644 index 000000000..b2b805b4f --- /dev/null +++ b/CBLAS/src/cblas_dger.c @@ -0,0 +1,47 @@ +/* + * + * cblas_dger.c + * This program is a C interface to dger. + * Written by Keita Teranishi + * 4/6/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_dger(const enum CBLAS_ORDER order, const int M, const int N, + const double alpha, const double *X, const int incX, + const double *Y, const int incY, double *A, const int lda) +{ +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_incX=incX, F77_incY=incY; +#else + #define F77_M M + #define F77_N N + #define F77_incX incX + #define F77_incY incY + #define F77_lda lda +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + F77_dger( &F77_M, &F77_N, &alpha, X, &F77_incX, Y, &F77_incY, A, + &F77_lda); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + F77_dger( &F77_N, &F77_M ,&alpha, Y, &F77_incY, X, &F77_incX, A, + &F77_lda); + + } + else cblas_xerbla(1, "cblas_dger", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_dnrm2.c b/CBLAS/src/cblas_dnrm2.c new file mode 100644 index 000000000..fe46ad484 --- /dev/null +++ b/CBLAS/src/cblas_dnrm2.c @@ -0,0 +1,23 @@ +/* + * cblas_dnrm2.c + * + * The program is a C interface to dnrm2. + * It calls the fortranwrapper before calling dnrm2. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +double cblas_dnrm2( const int N, const double *X, const int incX) +{ + double nrm2; +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incX +#endif + F77_dnrm2_sub( &F77_N, X, &F77_incX, &nrm2); + return nrm2; +} diff --git a/CBLAS/src/cblas_drot.c b/CBLAS/src/cblas_drot.c new file mode 100644 index 000000000..51dc4ad5e --- /dev/null +++ b/CBLAS/src/cblas_drot.c @@ -0,0 +1,23 @@ +/* + * cblas_drot.c + * + * The program is a C interface to drot. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_drot(const int N, double *X, const int incX, + double *Y, const int incY, const double c, const double s) +{ +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY +#endif + F77_drot(&F77_N, X, &F77_incX, Y, &F77_incY, &c, &s); + return; +} diff --git a/CBLAS/src/cblas_drotg.c b/CBLAS/src/cblas_drotg.c new file mode 100644 index 000000000..0cbbd8bc0 --- /dev/null +++ b/CBLAS/src/cblas_drotg.c @@ -0,0 +1,14 @@ +/* + * cblas_drotg.c + * + * The program is a C interface to drotg. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_drotg( double *a, double *b, double *c, double *s) +{ + F77_drotg(a,b,c,s); +} diff --git a/CBLAS/src/cblas_drotm.c b/CBLAS/src/cblas_drotm.c new file mode 100644 index 000000000..ebe20ad62 --- /dev/null +++ b/CBLAS/src/cblas_drotm.c @@ -0,0 +1,14 @@ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_drotm( const int N, double *X, const int incX, double *Y, + const int incY, const double *P) +{ +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY +#endif + F77_drotm( &F77_N, X, &F77_incX, Y, &F77_incY, P); +} diff --git a/CBLAS/src/cblas_drotmg.c b/CBLAS/src/cblas_drotmg.c new file mode 100644 index 000000000..13a2208e5 --- /dev/null +++ b/CBLAS/src/cblas_drotmg.c @@ -0,0 +1,15 @@ +/* + * cblas_drotmg.c + * + * The program is a C interface to drotmg. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_drotmg( double *d1, double *d2, double *b1, + const double b2, double *p) +{ + F77_drotmg(d1,d2,b1,&b2,p); +} diff --git a/CBLAS/src/cblas_dsbmv.c b/CBLAS/src/cblas_dsbmv.c new file mode 100644 index 000000000..95b61820f --- /dev/null +++ b/CBLAS/src/cblas_dsbmv.c @@ -0,0 +1,77 @@ +/* + * + * cblas_dsbmv.c + * This program is a C interface to dsbmv. + * Written by Keita Teranishi + * 4/6/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_dsbmv(const enum CBLAS_ORDER order, + const enum CBLAS_UPLO Uplo, const int N, const int K, + const double alpha, const double *A, const int lda, + const double *X, const int incX, const double beta, + double *Y, const int incY) +{ + char UL; +#ifdef F77_CHAR + F77_CHAR F77_UL; +#else + #define F77_UL &UL +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_K=K, F77_lda=lda, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_K K + #define F77_lda lda + #define F77_incX incX + #define F77_incY incY +#endif + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_dsbmv","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_dsbmv(F77_UL, &F77_N, &F77_K, &alpha, A, &F77_lda, X, + &F77_incX, &beta, Y, &F77_incY); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_dsbmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_dsbmv(F77_UL, &F77_N, &F77_K, &alpha, + A ,&F77_lda, X,&F77_incX, &beta, Y, &F77_incY); + } + else cblas_xerbla(1, "cblas_dsbmv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_dscal.c b/CBLAS/src/cblas_dscal.c new file mode 100644 index 000000000..bd04de77d --- /dev/null +++ b/CBLAS/src/cblas_dscal.c @@ -0,0 +1,21 @@ +/* + * cblas_dscal.c + * + * The program is a C interface to dscal. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_dscal( const int N, const double alpha, double *X, + const int incX) +{ +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incX +#endif + F77_dscal( &F77_N, &alpha, X, &F77_incX); +} diff --git a/CBLAS/src/cblas_dsdot.c b/CBLAS/src/cblas_dsdot.c new file mode 100644 index 000000000..52cd877a2 --- /dev/null +++ b/CBLAS/src/cblas_dsdot.c @@ -0,0 +1,25 @@ +/* + * cblas_dsdot.c + * + * The program is a C interface to dsdot. + * It calls fthe fortran wrapper before calling dsdot. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +double cblas_dsdot( const int N, const float *X, + const int incX, const float *Y, const int incY) +{ + double dot; +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY +#endif + F77_dsdot_sub( &F77_N, X, &F77_incX, Y, &F77_incY, &dot); + return dot; +} diff --git a/CBLAS/src/cblas_dspmv.c b/CBLAS/src/cblas_dspmv.c new file mode 100644 index 000000000..dd1544f9c --- /dev/null +++ b/CBLAS/src/cblas_dspmv.c @@ -0,0 +1,76 @@ +/* + * + * cblas_dspmv.c + * This program is a C interface to dspmv. + * Written by Keita Teranishi + * 4/6/1998 + * + */ + + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_dspmv(const enum CBLAS_ORDER order, + const enum CBLAS_UPLO Uplo, const int N, + const double alpha, const double *AP, + const double *X, const int incX, const double beta, + double *Y, const int incY) +{ + char UL; +#ifdef F77_CHAR + F77_CHAR F77_UL; +#else + #define F77_UL &UL +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY +#endif + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_dspmv","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_dspmv(F77_UL, &F77_N, &alpha, AP, X, + &F77_incX, &beta, Y, &F77_incY); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_dspmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_dspmv(F77_UL, &F77_N, &alpha, + AP, X,&F77_incX, &beta, Y, &F77_incY); + } + else cblas_xerbla(1, "cblas_dspmv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_dspr.c b/CBLAS/src/cblas_dspr.c new file mode 100644 index 000000000..c6300391c --- /dev/null +++ b/CBLAS/src/cblas_dspr.c @@ -0,0 +1,70 @@ +/* + * + * cblas_dspr.c + * This program is a C interface to dspr. + * Written by Keita Teranishi + * 4/6/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_dspr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const double *X, + const int incX, double *Ap) +{ + char UL; +#ifdef F77_CHAR + F77_CHAR F77_UL; +#else + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incX +#endif + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasLower) UL = 'L'; + else if (Uplo == CblasUpper) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_dspr","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + + F77_dspr(F77_UL, &F77_N, &alpha, X, &F77_incX, Ap); + + } else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasLower) UL = 'U'; + else if (Uplo == CblasUpper) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_dspr","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_dspr(F77_UL, &F77_N, &alpha, X, &F77_incX, Ap); + } else cblas_xerbla(1, "cblas_dspr", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_dspr2.c b/CBLAS/src/cblas_dspr2.c new file mode 100644 index 000000000..4f1e7805a --- /dev/null +++ b/CBLAS/src/cblas_dspr2.c @@ -0,0 +1,70 @@ +/* + * cblas_dspr2.c + * The program is a C interface to dspr2. + * + * Keita Teranishi 5/20/98 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_dspr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const double *X, + const int incX, const double *Y, const int incY, double *A) +{ + char UL; +#ifdef F77_CHAR + F77_CHAR F77_UL; +#else + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasLower) UL = 'L'; + else if (Uplo == CblasUpper) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_dspr2","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + + F77_dspr2(F77_UL, &F77_N, &alpha, X, &F77_incX, Y, &F77_incY, A); + + } else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasLower) UL = 'U'; + else if (Uplo == CblasUpper) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_dspr2","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_dspr2(F77_UL, &F77_N, &alpha, X, &F77_incX, Y, &F77_incY, A); + } else cblas_xerbla(1, "cblas_dspr2", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_dswap.c b/CBLAS/src/cblas_dswap.c new file mode 100644 index 000000000..9ae5bb93c --- /dev/null +++ b/CBLAS/src/cblas_dswap.c @@ -0,0 +1,22 @@ +/* + * cblas_dswap.c + * + * The program is a C interface to dswap. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_dswap( const int N, double *X, const int incX, double *Y, + const int incY) +{ +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY +#endif + F77_dswap( &F77_N, X, &F77_incX, Y, &F77_incY); +} diff --git a/CBLAS/src/cblas_dsymm.c b/CBLAS/src/cblas_dsymm.c new file mode 100644 index 000000000..8b50e9a40 --- /dev/null +++ b/CBLAS/src/cblas_dsymm.c @@ -0,0 +1,106 @@ +/* + * + * cblas_dsymm.c + * This program is a C interface to dsymm. + * Written by Keita Teranishi + * 4/8/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_dsymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const int M, const int N, + const double alpha, const double *A, const int lda, + const double *B, const int ldb, const double beta, + double *C, const int ldc) +{ + char SD, UL; +#ifdef F77_CHAR + F77_CHAR F77_SD, F77_UL; +#else + #define F77_SD &SD + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_ldb=ldb; + F77_INT F77_ldc=ldc; +#else + #define F77_M M + #define F77_N N + #define F77_lda lda + #define F77_ldb ldb + #define F77_ldc ldc +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + + if( Order == CblasColMajor ) + { + if( Side == CblasRight) SD='R'; + else if ( Side == CblasLeft ) SD='L'; + else + { + cblas_xerbla(2, "cblas_dsymm","Illegal Side setting, %d\n", Side); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Uplo == CblasUpper) UL='U'; + else if ( Uplo == CblasLower ) UL='L'; + else + { + cblas_xerbla(3, "cblas_dsymm","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_SD = C2F_CHAR(&SD); + #endif + + F77_dsymm(F77_SD, F77_UL, &F77_M, &F77_N, &alpha, A, &F77_lda, + B, &F77_ldb, &beta, C, &F77_ldc); + } else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + if( Side == CblasRight) SD='L'; + else if ( Side == CblasLeft ) SD='R'; + else + { + cblas_xerbla(2, "cblas_dsymm","Illegal Side setting, %d\n", Side); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Uplo == CblasUpper) UL='L'; + else if ( Uplo == CblasLower ) UL='U'; + else + { + cblas_xerbla(3, "cblas_dsymm","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_SD = C2F_CHAR(&SD); + #endif + + F77_dsymm(F77_SD, F77_UL, &F77_N, &F77_M, &alpha, A, &F77_lda, B, + &F77_ldb, &beta, C, &F77_ldc); + } + else cblas_xerbla(1, "cblas_dsymm","Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_dsymv.c b/CBLAS/src/cblas_dsymv.c new file mode 100644 index 000000000..020adc91d --- /dev/null +++ b/CBLAS/src/cblas_dsymv.c @@ -0,0 +1,76 @@ +/* + * + * cblas_dsymv.c + * This program is a C interface to dsymv. + * Written by Keita Teranishi + * 4/6/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_dsymv(const enum CBLAS_ORDER order, + const enum CBLAS_UPLO Uplo, const int N, + const double alpha, const double *A, const int lda, + const double *X, const int incX, const double beta, + double *Y, const int incY) +{ + char UL; +#ifdef F77_CHAR + F77_CHAR F77_UL; +#else + #define F77_UL &UL +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_lda=lda, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_lda lda + #define F77_incX incX + #define F77_incY incY +#endif + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_dsymv","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_dsymv(F77_UL, &F77_N, &alpha, A, &F77_lda, X, + &F77_incX, &beta, Y, &F77_incY); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_dsymv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_dsymv(F77_UL, &F77_N, &alpha, + A ,&F77_lda, X,&F77_incX, &beta, Y, &F77_incY); + } + else cblas_xerbla(1, "cblas_dsymv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_dsyr.c b/CBLAS/src/cblas_dsyr.c new file mode 100644 index 000000000..0d2008348 --- /dev/null +++ b/CBLAS/src/cblas_dsyr.c @@ -0,0 +1,71 @@ +/* + * + * cblas_dsyr.c + * This program is a C interface to dsyr. + * Written by Keita Teranishi + * 4/6/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_dsyr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const double *X, + const int incX, double *A, const int lda) +{ + char UL; +#ifdef F77_CHAR + F77_CHAR F77_UL; +#else + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_lda=lda; +#else + #define F77_N N + #define F77_incX incX + #define F77_lda lda +#endif + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasLower) UL = 'L'; + else if (Uplo == CblasUpper) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_dsyr","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + + F77_dsyr(F77_UL, &F77_N, &alpha, X, &F77_incX, A, &F77_lda); + + } else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasLower) UL = 'U'; + else if (Uplo == CblasUpper) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_dsyr","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_dsyr(F77_UL, &F77_N, &alpha, X, &F77_incX, A, &F77_lda); + } else cblas_xerbla(1, "cblas_dsyr", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_dsyr2.c b/CBLAS/src/cblas_dsyr2.c new file mode 100644 index 000000000..fe4a2920e --- /dev/null +++ b/CBLAS/src/cblas_dsyr2.c @@ -0,0 +1,76 @@ +/* + * + * cblas_dsyr2.c + * This program is a C interface to dsyr2. + * Written by Keita Teranishi + * 4/6/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_dsyr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const double *X, + const int incX, const double *Y, const int incY, double *A, + const int lda) +{ + char UL; +#ifdef F77_CHAR + F77_CHAR F77_UL; +#else + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY, F77__lda=lda; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY + #define F77_lda lda +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasLower) UL = 'L'; + else if (Uplo == CblasUpper) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_dsyr2","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + + F77_dsyr2(F77_UL, &F77_N, &alpha, X, &F77_incX, Y, &F77_incY, A, + &F77_lda); + + } else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasLower) UL = 'U'; + else if (Uplo == CblasUpper) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_dsyr2","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_dsyr2(F77_UL, &F77_N, &alpha, X, &F77_incX, Y, &F77_incY, A, + &F77_lda); + } else cblas_xerbla(1, "cblas_dsyr2", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_dsyr2k.c b/CBLAS/src/cblas_dsyr2k.c new file mode 100644 index 000000000..e50dc11cc --- /dev/null +++ b/CBLAS/src/cblas_dsyr2k.c @@ -0,0 +1,109 @@ +/* + * + * cblas_dsyr2k.c + * This program is a C interface to dsyr2k. + * Written by Keita Teranishi + * 4/6/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_dsyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const double alpha, const double *A, const int lda, + const double *B, const int ldb, const double beta, + double *C, const int ldc) +{ + char UL, TR; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL; +#else + #define F77_TR &TR + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_N=N, F77_K=K, F77_lda=lda, F77_ldb=ldb; + F77_INT F77_ldc=ldc; +#else + #define F77_N N + #define F77_K K + #define F77_lda lda + #define F77_ldb ldb + #define F77_ldc ldc +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + + if( Order == CblasColMajor ) + { + + if( Uplo == CblasUpper) UL='U'; + else if ( Uplo == CblasLower ) UL='L'; + else + { + cblas_xerbla(2, "cblas_dsyr2k","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Trans == CblasTrans) TR ='T'; + else if ( Trans == CblasConjTrans ) TR='C'; + else if ( Trans == CblasNoTrans ) TR='N'; + else + { + cblas_xerbla(3, "cblas_dsyr2k","Illegal Trans setting, %d\n", Trans); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TR = C2F_CHAR(&TR); + #endif + + F77_dsyr2k(F77_UL, F77_TR, &F77_N, &F77_K, &alpha, A, &F77_lda, + B, &F77_ldb, &beta, C, &F77_ldc); + } else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + if( Uplo == CblasUpper) UL='L'; + else if ( Uplo == CblasLower ) UL='U'; + else + { + cblas_xerbla(3, "cblas_dsyr2k","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if( Trans == CblasTrans) TR ='N'; + else if ( Trans == CblasConjTrans ) TR='N'; + else if ( Trans == CblasNoTrans ) TR='T'; + else + { + cblas_xerbla(3, "cblas_dsyr2k","Illegal Trans setting, %d\n", Trans); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TR = C2F_CHAR(&TR); + #endif + + F77_dsyr2k(F77_UL, F77_TR, &F77_N, &F77_K, &alpha, A, &F77_lda, B, + &F77_ldb, &beta, C, &F77_ldc); + } + else cblas_xerbla(1, "cblas_dsyr2k","Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_dsyrk.c b/CBLAS/src/cblas_dsyrk.c new file mode 100644 index 000000000..469f930df --- /dev/null +++ b/CBLAS/src/cblas_dsyrk.c @@ -0,0 +1,108 @@ +/* + * + * cblas_dsyrk.c + * This program is a C interface to dsyrk. + * Written by Keita Teranishi + * 4/8/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_dsyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const double alpha, const double *A, const int lda, + const double beta, double *C, const int ldc) +{ + char UL, TR; +#ifdef F77_CHAR + F77_CHAR F77_TR, F77_UL; +#else + #define F77_TR &TR + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_N=N, F77_K=K, F77_lda=lda; + F77_INT F77_ldc=ldc; +#else + #define F77_N N + #define F77_K K + #define F77_lda lda + #define F77_ldc ldc +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + + if( Order == CblasColMajor ) + { + + if( Uplo == CblasUpper) UL='U'; + else if ( Uplo == CblasLower ) UL='L'; + else + { + cblas_xerbla(2, "cblas_dsyrk","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Trans == CblasTrans) TR ='T'; + else if ( Trans == CblasConjTrans ) TR='C'; + else if ( Trans == CblasNoTrans ) TR='N'; + else + { + cblas_xerbla(3, "cblas_dsyrk","Illegal Trans setting, %d\n", Trans); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TR = C2F_CHAR(&TR); + #endif + + F77_dsyrk(F77_UL, F77_TR, &F77_N, &F77_K, &alpha, A, &F77_lda, + &beta, C, &F77_ldc); + } else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + if( Uplo == CblasUpper) UL='L'; + else if ( Uplo == CblasLower ) UL='U'; + else + { + cblas_xerbla(3, "cblas_dsyrk","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if( Trans == CblasTrans) TR ='N'; + else if ( Trans == CblasConjTrans ) TR='N'; + else if ( Trans == CblasNoTrans ) TR='T'; + else + { + cblas_xerbla(3, "cblas_dsyrk","Illegal Trans setting, %d\n", Trans); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TR = C2F_CHAR(&TR); + #endif + + F77_dsyrk(F77_UL, F77_TR, &F77_N, &F77_K, &alpha, A, &F77_lda, + &beta, C, &F77_ldc); + } + else cblas_xerbla(1, "cblas_dsyrk","Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} + diff --git a/CBLAS/src/cblas_dtbmv.c b/CBLAS/src/cblas_dtbmv.c new file mode 100644 index 000000000..491f11d47 --- /dev/null +++ b/CBLAS/src/cblas_dtbmv.c @@ -0,0 +1,122 @@ +/* + * cblas_dtbmv.c + * The program is a C interface to dtbmv. + * + * Keita Teranishi 5/20/98 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_dtbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const double *A, const int lda, + double *X, const int incX) +{ + char TA; + char UL; + char DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_DI &DI +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_lda=lda, F77_K=K, F77_incX=incX; +#else + #define F77_N N + #define F77_K K + #define F77_lda lda + #define F77_incX incX +#endif + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_dtbmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(3, "cblas_dtbmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_dtbmv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_dtbmv( F77_UL, F77_TA, F77_DI, &F77_N, &F77_K, A, &F77_lda, X, + &F77_incX); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_dtbmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) TA = 'N'; + else + { + cblas_xerbla(3, "cblas_dtbmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_dtbmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + + F77_dtbmv( F77_UL, F77_TA, F77_DI, &F77_N, &F77_K, A, &F77_lda, X, + &F77_incX); + + } + else cblas_xerbla(1, "cblas_dtbmv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; +} diff --git a/CBLAS/src/cblas_dtbsv.c b/CBLAS/src/cblas_dtbsv.c new file mode 100644 index 000000000..664822fea --- /dev/null +++ b/CBLAS/src/cblas_dtbsv.c @@ -0,0 +1,122 @@ +/* + * cblas_dtbsv.c + * The program is a C interface to dtbsv. + * + * Keita Teranishi 5/20/98 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_dtbsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const double *A, const int lda, + double *X, const int incX) +{ + char TA; + char UL; + char DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_DI &DI +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_lda=lda, F77_K=K, F77_incX=incX; +#else + #define F77_N N + #define F77_K K + #define F77_lda lda + #define F77_incX incX +#endif + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_dtbsv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(3, "cblas_dtbsv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_dtbsv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_dtbsv( F77_UL, F77_TA, F77_DI, &F77_N, &F77_K, A, &F77_lda, X, + &F77_incX); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_dtbsv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) TA = 'N'; + else + { + cblas_xerbla(3, "cblas_dtbsv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_dtbsv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + + F77_dtbsv( F77_UL, F77_TA, F77_DI, &F77_N, &F77_K, A, &F77_lda, X, + &F77_incX); + } + else cblas_xerbla(1, "cblas_dtbsv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_dtpmv.c b/CBLAS/src/cblas_dtpmv.c new file mode 100644 index 000000000..5b96a2b49 --- /dev/null +++ b/CBLAS/src/cblas_dtpmv.c @@ -0,0 +1,117 @@ +/* + * cblas_dtpmv.c + * The program is a C interface to dtpmv. + * + * Keita Teranishi 5/20/98 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_dtpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const double *Ap, double *X, const int incX) +{ + char TA; + char UL; + char DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_DI &DI +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incX +#endif + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_dtpmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(3, "cblas_dtpmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_dtpmv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_dtpmv( F77_UL, F77_TA, F77_DI, &F77_N, Ap, X, &F77_incX); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_dtpmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) TA = 'N'; + else + { + cblas_xerbla(3, "cblas_dtpmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_dtpmv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + + F77_dtpmv( F77_UL, F77_TA, F77_DI, &F77_N, Ap, X,&F77_incX); + } + else cblas_xerbla(1, "cblas_dtpmv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_dtpsv.c b/CBLAS/src/cblas_dtpsv.c new file mode 100644 index 000000000..5555c2174 --- /dev/null +++ b/CBLAS/src/cblas_dtpsv.c @@ -0,0 +1,118 @@ +/* + * cblas_dtpsv.c + * The program is a C interface to dtpsv. + * + * Keita Teranishi 5/20/98 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_dtpsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const double *Ap, double *X, const int incX) +{ + char TA; + char UL; + char DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_DI &DI +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incX +#endif + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_dtpsv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(3, "cblas_dtpsv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_dtpsv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_dtpsv( F77_UL, F77_TA, F77_DI, &F77_N, Ap, X, &F77_incX); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_dtpsv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) TA = 'N'; + else + { + cblas_xerbla(3, "cblas_dtpsv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_dtpsv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + + F77_dtpsv( F77_UL, F77_TA, F77_DI, &F77_N, Ap, X,&F77_incX); + + } + else cblas_xerbla(1, "cblas_dtpsv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_dtrmm.c b/CBLAS/src/cblas_dtrmm.c new file mode 100644 index 000000000..32a5d2bc9 --- /dev/null +++ b/CBLAS/src/cblas_dtrmm.c @@ -0,0 +1,148 @@ +/* + * + * cblas_dtrmm.c + * This program is a C interface to dtrmm. + * Written by Keita Teranishi + * 4/6/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_dtrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const double alpha, const double *A, const int lda, + double *B, const int ldb) +{ + char UL, TA, SD, DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_SD, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_SD &SD + #define F77_DI &DI +#endif + +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_ldb=ldb; +#else + #define F77_M M + #define F77_N N + #define F77_lda lda + #define F77_ldb ldb +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + + if( Order == CblasColMajor ) + { + if( Side == CblasRight) SD='R'; + else if ( Side == CblasLeft ) SD='L'; + else + { + cblas_xerbla(2, "cblas_dtrmm","Illegal Side setting, %d\n", Side); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if( Uplo == CblasUpper) UL='U'; + else if ( Uplo == CblasLower ) UL='L'; + else + { + cblas_xerbla(3, "cblas_dtrmm","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( TransA == CblasTrans) TA ='T'; + else if ( TransA == CblasConjTrans ) TA='C'; + else if ( TransA == CblasNoTrans ) TA='N'; + else + { + cblas_xerbla(4, "cblas_dtrmm","Illegal Trans setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Diag == CblasUnit ) DI='U'; + else if ( Diag == CblasNonUnit ) DI='N'; + else + { + cblas_xerbla(5, "cblas_dtrmm","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_SD = C2F_CHAR(&SD); + F77_DI = C2F_CHAR(&DI); + #endif + + F77_dtrmm(F77_SD, F77_UL, F77_TA, F77_DI, &F77_M, &F77_N, &alpha, A, &F77_lda, B, &F77_ldb); + } else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + if( Side == CblasRight) SD='L'; + else if ( Side == CblasLeft ) SD='R'; + else + { + cblas_xerbla(2, "cblas_dtrmm","Illegal Side setting, %d\n", Side); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Uplo == CblasUpper) UL='L'; + else if ( Uplo == CblasLower ) UL='U'; + else + { + cblas_xerbla(3, "cblas_dtrmm","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( TransA == CblasTrans) TA ='T'; + else if ( TransA == CblasConjTrans ) TA='C'; + else if ( TransA == CblasNoTrans ) TA='N'; + else + { + cblas_xerbla(4, "cblas_dtrmm","Illegal Trans setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Diag == CblasUnit ) DI='U'; + else if ( Diag == CblasNonUnit ) DI='N'; + else + { + cblas_xerbla(5, "cblas_dtrmm","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_SD = C2F_CHAR(&SD); + F77_DI = C2F_CHAR(&DI); + #endif + F77_dtrmm(F77_SD, F77_UL, F77_TA, F77_DI, &F77_N, &F77_M, &alpha, A, &F77_lda, B, &F77_ldb); + } + else cblas_xerbla(1, "cblas_dtrmm", "Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_dtrmv.c b/CBLAS/src/cblas_dtrmv.c new file mode 100644 index 000000000..cce150709 --- /dev/null +++ b/CBLAS/src/cblas_dtrmv.c @@ -0,0 +1,122 @@ +/* + * + * cblas_dtrmv.c + * This program is a C interface to sgemv. + * Written by Keita Teranishi + * 4/6/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_dtrmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const double *A, const int lda, + double *X, const int incX) + +{ + char TA; + char UL; + char DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_DI &DI +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_lda=lda, F77_incX=incX; +#else + #define F77_N N + #define F77_lda lda + #define F77_incX incX +#endif + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_dtrmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(3, "cblas_dtrmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_dtrmv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_dtrmv( F77_UL, F77_TA, F77_DI, &F77_N, A, &F77_lda, X, + &F77_incX); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_dtrmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) TA = 'N'; + else + { + cblas_xerbla(3, "cblas_dtrmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_dtrmv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_dtrmv( F77_UL, F77_TA, F77_DI, &F77_N, A, &F77_lda, X, + &F77_incX); + } else cblas_xerbla(1, "cblas_dtrmv", "Illegal order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_dtrsm.c b/CBLAS/src/cblas_dtrsm.c new file mode 100644 index 000000000..4f47cb193 --- /dev/null +++ b/CBLAS/src/cblas_dtrsm.c @@ -0,0 +1,153 @@ +/* + * + * cblas_dtrsm.c + * This program is a C interface to dtrsm. + * Written by Keita Teranishi + * 4/6/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_dtrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const double alpha, const double *A, const int lda, + double *B, const int ldb) + +{ + char UL, TA, SD, DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_SD, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_SD &SD + #define F77_DI &DI +#endif + +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_ldb=ldb; +#else + #define F77_M M + #define F77_N N + #define F77_lda lda + #define F77_ldb ldb +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + + if( Order == CblasColMajor ) + { + if ( Side == CblasRight) SD='R'; + else if ( Side == CblasLeft ) SD='L'; + else + { + cblas_xerbla(2, "cblas_dtrsm","Illegal Side setting, %d\n", Side); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if ( Uplo == CblasUpper) UL='U'; + else if ( Uplo == CblasLower) UL='L'; + else + { + cblas_xerbla(3, "cblas_dtrsm","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if ( TransA == CblasTrans ) TA='T'; + else if ( TransA == CblasConjTrans) TA='C'; + else if ( TransA == CblasNoTrans ) TA='N'; + else + { + cblas_xerbla(4, "cblas_dtrsm","Illegal Trans setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if ( Diag == CblasUnit ) DI='U'; + else if ( Diag == CblasNonUnit) DI='N'; + else + { + cblas_xerbla(5, "cblas_dtrsm","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_SD = C2F_CHAR(&SD); + F77_DI = C2F_CHAR(&DI); + #endif + + F77_dtrsm(F77_SD, F77_UL, F77_TA, F77_DI, &F77_M, &F77_N, &alpha, + A, &F77_lda, B, &F77_ldb); + } + else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + if ( Side == CblasRight) SD='L'; + else if ( Side == CblasLeft ) SD='R'; + else + { + cblas_xerbla(2, "cblas_dtrsm","Illegal Side setting, %d\n", Side); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if ( Uplo == CblasUpper) UL='L'; + else if ( Uplo == CblasLower) UL='U'; + else + { + cblas_xerbla(3, "cblas_dtrsm","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if ( TransA == CblasTrans ) TA='T'; + else if ( TransA == CblasConjTrans) TA='C'; + else if ( TransA == CblasNoTrans ) TA='N'; + else + { + cblas_xerbla(4, "cblas_dtrsm","Illegal Trans setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if ( Diag == CblasUnit ) DI='U'; + else if ( Diag == CblasNonUnit) DI='N'; + else + { + cblas_xerbla(5, "cblas_dtrsm","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_SD = C2F_CHAR(&SD); + F77_DI = C2F_CHAR(&DI); + #endif + + F77_dtrsm(F77_SD, F77_UL, F77_TA, F77_DI, &F77_N, &F77_M, &alpha, A, + &F77_lda, B, &F77_ldb); + } + else cblas_xerbla(1, "cblas_dtrsm","Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_dtrsv.c b/CBLAS/src/cblas_dtrsv.c new file mode 100644 index 000000000..7299d17d5 --- /dev/null +++ b/CBLAS/src/cblas_dtrsv.c @@ -0,0 +1,121 @@ +/* + * cblas_dtrsv.c + * The program is a C interface to dtrsv. + * + * Keita Teranishi 5/20/98 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_dtrsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const double *A, const int lda, double *X, + const int incX) + +{ + char TA; + char UL; + char DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_DI &DI +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_lda=lda, F77_incX=incX; +#else + #define F77_N N + #define F77_lda lda + #define F77_incX incX +#endif + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_dtrsv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(3, "cblas_dtrsv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_dtrsv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_dtrsv( F77_UL, F77_TA, F77_DI, &F77_N, A, &F77_lda, X, + &F77_incX); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_dtrsv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) TA = 'N'; + else + { + cblas_xerbla(3, "cblas_dtrsv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_dtrsv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_dtrsv( F77_UL, F77_TA, F77_DI, &F77_N, A, &F77_lda, X, + &F77_incX); + } + else cblas_xerbla(1, "cblas_dtrsv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_dzasum.c b/CBLAS/src/cblas_dzasum.c new file mode 100644 index 000000000..b32f573e5 --- /dev/null +++ b/CBLAS/src/cblas_dzasum.c @@ -0,0 +1,23 @@ +/* + * cblas_dzasum.c + * + * The program is a C interface to dzasum. + * It calls the fortran wrapper before calling dzasum. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +double cblas_dzasum( const int N, const void *X, const int incX) +{ + double asum; +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incX +#endif + F77_dzasum_sub( &F77_N, X, &F77_incX, &asum); + return asum; +} diff --git a/CBLAS/src/cblas_dznrm2.c b/CBLAS/src/cblas_dznrm2.c new file mode 100644 index 000000000..dfa2bfc83 --- /dev/null +++ b/CBLAS/src/cblas_dznrm2.c @@ -0,0 +1,23 @@ +/* + * cblas_dznrm2.c + * + * The program is a C interface to dznrm2. + * It calls the fortran wrapper before calling dznrm2. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +double cblas_dznrm2( const int N, const void *X, const int incX) +{ + double nrm2; +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incX +#endif + F77_dznrm2_sub( &F77_N, X, &F77_incX, &nrm2); + return nrm2; +} diff --git a/CBLAS/src/cblas_globals.c b/CBLAS/src/cblas_globals.c new file mode 100644 index 000000000..ebcd74db3 --- /dev/null +++ b/CBLAS/src/cblas_globals.c @@ -0,0 +1,2 @@ +int CBLAS_CallFromC=0; +int RowMajorStrg=0; diff --git a/CBLAS/src/cblas_icamax.c b/CBLAS/src/cblas_icamax.c new file mode 100644 index 000000000..f0cdbdb3e --- /dev/null +++ b/CBLAS/src/cblas_icamax.c @@ -0,0 +1,23 @@ +/* + * cblas_icamax.c + * + * The program is a C interface to icamax. + * It calls the fortran wrapper before calling icamax. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +CBLAS_INDEX cblas_icamax( const int N, const void *X, const int incX) +{ + int iamax; +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incX +#endif + F77_icamax_sub( &F77_N, X, &F77_incX, &iamax); + return iamax ? iamax-1 : 0; +} diff --git a/CBLAS/src/cblas_idamax.c b/CBLAS/src/cblas_idamax.c new file mode 100644 index 000000000..abb70b53c --- /dev/null +++ b/CBLAS/src/cblas_idamax.c @@ -0,0 +1,23 @@ +/* + * cblas_idamax.c + * + * The program is a C interface to idamax. + * It calls the fortran wrapper before calling idamax. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +CBLAS_INDEX cblas_idamax( const int N, const double *X, const int incX) +{ + int iamax; +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incX +#endif + F77_idamax_sub( &F77_N, X, &F77_incX, &iamax); + return iamax ? iamax-1 : 0; +} diff --git a/CBLAS/src/cblas_isamax.c b/CBLAS/src/cblas_isamax.c new file mode 100644 index 000000000..bfd74e8f9 --- /dev/null +++ b/CBLAS/src/cblas_isamax.c @@ -0,0 +1,23 @@ +/* + * cblas_isamax.c + * + * The program is a C interface to isamax. + * It calls the fortran wrapper before calling isamax. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +CBLAS_INDEX cblas_isamax( const int N, const float *X, const int incX) +{ + int iamax; +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incX +#endif + F77_isamax_sub( &F77_N, X, &F77_incX, &iamax); + return iamax ? iamax-1 : 0; +} diff --git a/CBLAS/src/cblas_izamax.c b/CBLAS/src/cblas_izamax.c new file mode 100644 index 000000000..21fdc396f --- /dev/null +++ b/CBLAS/src/cblas_izamax.c @@ -0,0 +1,23 @@ +/* + * cblas_izamax.c + * + * The program is a C interface to izamax. + * It calls the fortran wrapper before calling izamax. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +CBLAS_INDEX cblas_izamax( const int N, const void *X, const int incX) +{ + int iamax; +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incX +#endif + F77_izamax_sub( &F77_N, X, &F77_incX, &iamax); + return (iamax ? iamax-1 : 0); +} diff --git a/CBLAS/src/cblas_sasum.c b/CBLAS/src/cblas_sasum.c new file mode 100644 index 000000000..7d4c32cf9 --- /dev/null +++ b/CBLAS/src/cblas_sasum.c @@ -0,0 +1,23 @@ +/* + * cblas_sasum.c + * + * The program is a C interface to sasum. + * It calls the fortran wrapper before calling sasum. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +float cblas_sasum( const int N, const float *X, const int incX) +{ + float asum; +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incX +#endif + F77_sasum_sub( &F77_N, X, &F77_incX, &asum); + return asum; +} diff --git a/CBLAS/src/cblas_saxpy.c b/CBLAS/src/cblas_saxpy.c new file mode 100644 index 000000000..2eee8e06e --- /dev/null +++ b/CBLAS/src/cblas_saxpy.c @@ -0,0 +1,23 @@ +/* + * cblas_saxpy.c + * + * The program is a C interface to saxpy. + * It calls the fortran wrapper before calling saxpy. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_saxpy( const int N, const float alpha, const float *X, + const int incX, float *Y, const int incY) +{ +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY +#endif + F77_saxpy( &F77_N, &alpha, X, &F77_incX, Y, &F77_incY); +} diff --git a/CBLAS/src/cblas_scasum.c b/CBLAS/src/cblas_scasum.c new file mode 100644 index 000000000..e1fa53090 --- /dev/null +++ b/CBLAS/src/cblas_scasum.c @@ -0,0 +1,23 @@ +/* + * cblas_scasum.c + * + * The program is a C interface to scasum. + * It calls the fortran wrapper before calling scasum. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +float cblas_scasum( const int N, const void *X, const int incX) +{ + float asum; +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incX +#endif + F77_scasum_sub( &F77_N, X, &F77_incX, &asum); + return asum; +} diff --git a/CBLAS/src/cblas_scnrm2.c b/CBLAS/src/cblas_scnrm2.c new file mode 100644 index 000000000..fa48454ed --- /dev/null +++ b/CBLAS/src/cblas_scnrm2.c @@ -0,0 +1,23 @@ +/* + * cblas_scnrm2.c + * + * The program is a C interface to scnrm2. + * It calls the fortran wrapper before calling scnrm2. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +float cblas_scnrm2( const int N, const void *X, const int incX) +{ + float nrm2; +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incX +#endif + F77_scnrm2_sub( &F77_N, X, &F77_incX, &nrm2); + return nrm2; +} diff --git a/CBLAS/src/cblas_scopy.c b/CBLAS/src/cblas_scopy.c new file mode 100644 index 000000000..7796959f3 --- /dev/null +++ b/CBLAS/src/cblas_scopy.c @@ -0,0 +1,22 @@ +/* + * cblas_scopy.c + * + * The program is a C interface to scopy. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_scopy( const int N, const float *X, + const int incX, float *Y, const int incY) +{ +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY +#endif + F77_scopy( &F77_N, X, &F77_incX, Y, &F77_incY); +} diff --git a/CBLAS/src/cblas_sdot.c b/CBLAS/src/cblas_sdot.c new file mode 100644 index 000000000..baf859272 --- /dev/null +++ b/CBLAS/src/cblas_sdot.c @@ -0,0 +1,25 @@ +/* + * cblas_sdot.c + * + * The program is a C interface to sdot. + * It calls the fortran wrapper before calling sdot. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +float cblas_sdot( const int N, const float *X, + const int incX, const float *Y, const int incY) +{ + float dot; +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY +#endif + F77_sdot_sub( &F77_N, X, &F77_incX, Y, &F77_incY, &dot); + return dot; +} diff --git a/CBLAS/src/cblas_sdsdot.c b/CBLAS/src/cblas_sdsdot.c new file mode 100644 index 000000000..b824849b9 --- /dev/null +++ b/CBLAS/src/cblas_sdsdot.c @@ -0,0 +1,25 @@ +/* + * cblas_sdsdot.c + * + * The program is a C interface to sdsdot. + * It calls the fortran wrapper before calling sdsdot. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +float cblas_sdsdot( const int N, const float alpha, const float *X, + const int incX, const float *Y, const int incY) +{ + float dot; +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY +#endif + F77_sdsdot_sub( &F77_N, &alpha, X, &F77_incX, Y, &F77_incY, &dot); + return dot; +} diff --git a/CBLAS/src/cblas_sgbmv.c b/CBLAS/src/cblas_sgbmv.c new file mode 100644 index 000000000..0af607f20 --- /dev/null +++ b/CBLAS/src/cblas_sgbmv.c @@ -0,0 +1,83 @@ +/* + * + * cblas_sgbmv.c + * This program is a C interface to sgbmv. + * Written by Keita Teranishi + * 4/6/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_sgbmv(const enum CBLAS_ORDER order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const int KL, const int KU, + const float alpha, const float *A, const int lda, + const float *X, const int incX, const float beta, + float *Y, const int incY) +{ + char TA; +#ifdef F77_CHAR + F77_CHAR F77_TA; +#else + #define F77_TA &TA +#endif +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_incX=incX, F77_incY=incY; + F77_INT F77_KL=KL,F77_KU=KU; +#else + #define F77_M M + #define F77_N N + #define F77_lda lda + #define F77_KL KL + #define F77_KU KU + #define F77_incX incX + #define F77_incY incY +#endif + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(2, "cblas_sgbmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_TA = C2F_CHAR(&TA); + #endif + F77_sgbmv(F77_TA, &F77_M, &F77_N, &F77_KL, &F77_KU, &alpha, + A, &F77_lda, X, &F77_incX, &beta, Y, &F77_incY); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) TA = 'N'; + else + { + cblas_xerbla(2, "cblas_sgbmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_TA = C2F_CHAR(&TA); + #endif + F77_sgbmv(F77_TA, &F77_N, &F77_M, &F77_KU, &F77_KL, &alpha, + A ,&F77_lda, X, &F77_incX, &beta, Y, &F77_incY); + } + else cblas_xerbla(1, "cblas_sgbmv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_sgemm.c b/CBLAS/src/cblas_sgemm.c new file mode 100644 index 000000000..73a06e5e1 --- /dev/null +++ b/CBLAS/src/cblas_sgemm.c @@ -0,0 +1,110 @@ +/* + * + * cblas_sgemm.c + * This program is a C interface to sgemm. + * Written by Keita Teranishi + * 4/8/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_sgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_TRANSPOSE TransB, const int M, const int N, + const int K, const float alpha, const float *A, + const int lda, const float *B, const int ldb, + const float beta, float *C, const int ldc) +{ + char TA, TB; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_TB; +#else + #define F77_TA &TA + #define F77_TB &TB +#endif + +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_K=K, F77_lda=lda, F77_ldb=ldb; + F77_INT F77_ldc=ldc; +#else + #define F77_M M + #define F77_N N + #define F77_K K + #define F77_lda lda + #define F77_ldb ldb + #define F77_ldc ldc +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + if( Order == CblasColMajor ) + { + if(TransA == CblasTrans) TA='T'; + else if ( TransA == CblasConjTrans ) TA='C'; + else if ( TransA == CblasNoTrans ) TA='N'; + else + { + cblas_xerbla(2, "cblas_sgemm", + "Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if(TransB == CblasTrans) TB='T'; + else if ( TransB == CblasConjTrans ) TB='C'; + else if ( TransB == CblasNoTrans ) TB='N'; + else + { + cblas_xerbla(3, "cblas_sgemm", + "Illegal TransB setting, %d\n", TransB); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_TA = C2F_CHAR(&TA); + F77_TB = C2F_CHAR(&TB); + #endif + + F77_sgemm(F77_TA, F77_TB, &F77_M, &F77_N, &F77_K, &alpha, A, &F77_lda, B, &F77_ldb, &beta, C, &F77_ldc); + } else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + if(TransA == CblasTrans) TB='T'; + else if ( TransA == CblasConjTrans ) TB='C'; + else if ( TransA == CblasNoTrans ) TB='N'; + else + { + cblas_xerbla(2, "cblas_sgemm", + "Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if(TransB == CblasTrans) TA='T'; + else if ( TransB == CblasConjTrans ) TA='C'; + else if ( TransB == CblasNoTrans ) TA='N'; + else + { + cblas_xerbla(2, "cblas_sgemm", + "Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_TA = C2F_CHAR(&TA); + F77_TB = C2F_CHAR(&TB); + #endif + + F77_sgemm(F77_TA, F77_TB, &F77_N, &F77_M, &F77_K, &alpha, B, &F77_ldb, A, &F77_lda, &beta, C, &F77_ldc); + } else + cblas_xerbla(1, "cblas_sgemm", + "Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; +} diff --git a/CBLAS/src/cblas_sgemv.c b/CBLAS/src/cblas_sgemv.c new file mode 100644 index 000000000..45b719648 --- /dev/null +++ b/CBLAS/src/cblas_sgemv.c @@ -0,0 +1,78 @@ +/* + * + * cblas_sgemv.c + * This program is a C interface to sgemv. + * Written by Keita Teranishi + * 4/6/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_sgemv(const enum CBLAS_ORDER order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const float alpha, const float *A, const int lda, + const float *X, const int incX, const float beta, + float *Y, const int incY) +{ + char TA; +#ifdef F77_CHAR + F77_CHAR F77_TA; +#else + #define F77_TA &TA +#endif +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_incX=incX, F77_incY=incY; +#else + #define F77_M M + #define F77_N N + #define F77_lda lda + #define F77_incX incX + #define F77_incY incY +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(2, "cblas_sgemv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + } + #ifdef F77_CHAR + F77_TA = C2F_CHAR(&TA); + #endif + F77_sgemv(F77_TA, &F77_M, &F77_N, &alpha, A, &F77_lda, X, &F77_incX, + &beta, Y, &F77_incY); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) TA = 'N'; + else + { + cblas_xerbla(2, "cblas_sgemv", "Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_TA = C2F_CHAR(&TA); + #endif + F77_sgemv(F77_TA, &F77_N, &F77_M, &alpha, A, &F77_lda, X, + &F77_incX, &beta, Y, &F77_incY); + } + else cblas_xerbla(1, "cblas_sgemv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_sger.c b/CBLAS/src/cblas_sger.c new file mode 100644 index 000000000..368940c74 --- /dev/null +++ b/CBLAS/src/cblas_sger.c @@ -0,0 +1,46 @@ +/* + * + * cblas_sger.c + * This program is a C interface to sger. + * Written by Keita Teranishi + * 4/6/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_sger(const enum CBLAS_ORDER order, const int M, const int N, + const float alpha, const float *X, const int incX, + const float *Y, const int incY, float *A, const int lda) +{ +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_incX=incX, F77_incY=incY; +#else + #define F77_M M + #define F77_N N + #define F77_incX incX + #define F77_incY incY + #define F77_lda lda +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + F77_sger( &F77_M, &F77_N, &alpha, X, &F77_incX, Y, &F77_incY, A, + &F77_lda); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + F77_sger( &F77_N, &F77_M, &alpha, Y, &F77_incY, X, &F77_incX, A, + &F77_lda); + } + else cblas_xerbla(1, "cblas_sger", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_snrm2.c b/CBLAS/src/cblas_snrm2.c new file mode 100644 index 000000000..18161b4fa --- /dev/null +++ b/CBLAS/src/cblas_snrm2.c @@ -0,0 +1,23 @@ +/* + * cblas_snrm2.c + * + * The program is a C interface to snrm2. + * It calls the fortran wrapper before calling snrm2. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +float cblas_snrm2( const int N, const float *X, const int incX) +{ + float nrm2; +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incX +#endif + F77_snrm2_sub( &F77_N, X, &F77_incX, &nrm2); + return nrm2; +} diff --git a/CBLAS/src/cblas_srot.c b/CBLAS/src/cblas_srot.c new file mode 100644 index 000000000..cbd1c8c90 --- /dev/null +++ b/CBLAS/src/cblas_srot.c @@ -0,0 +1,22 @@ +/* + * cblas_srot.c + * + * The program is a C interface to srot. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_srot( const int N, float *X, const int incX, float *Y, + const int incY, const float c, const float s) +{ +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY +#endif + F77_srot(&F77_N, X, &F77_incX, Y, &F77_incY, &c, &s); +} diff --git a/CBLAS/src/cblas_srotg.c b/CBLAS/src/cblas_srotg.c new file mode 100644 index 000000000..f6460048d --- /dev/null +++ b/CBLAS/src/cblas_srotg.c @@ -0,0 +1,14 @@ +/* + * cblas_srotg.c + * + * The program is a C interface to srotg. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_srotg( float *a, float *b, float *c, float *s) +{ + F77_srotg(a,b,c,s); +} diff --git a/CBLAS/src/cblas_srotm.c b/CBLAS/src/cblas_srotm.c new file mode 100644 index 000000000..496746454 --- /dev/null +++ b/CBLAS/src/cblas_srotm.c @@ -0,0 +1,22 @@ +/* + * cblas_srotm.c + * + * The program is a C interface to srotm. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_srotm( const int N, float *X, const int incX, float *Y, + const int incY, const float *P) +{ +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY +#endif + F77_srotm( &F77_N, X, &F77_incX, Y, &F77_incY, P); +} diff --git a/CBLAS/src/cblas_srotmg.c b/CBLAS/src/cblas_srotmg.c new file mode 100644 index 000000000..04f978b40 --- /dev/null +++ b/CBLAS/src/cblas_srotmg.c @@ -0,0 +1,15 @@ +/* + * cblas_srotmg.c + * + * The program is a C interface to srotmg. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_srotmg( float *d1, float *d2, float *b1, + const float b2, float *p) +{ + F77_srotmg(d1,d2,b1,&b2,p); +} diff --git a/CBLAS/src/cblas_ssbmv.c b/CBLAS/src/cblas_ssbmv.c new file mode 100644 index 000000000..7a18630b6 --- /dev/null +++ b/CBLAS/src/cblas_ssbmv.c @@ -0,0 +1,76 @@ +/* + * + * cblas_ssbmv.c + * This program is a C interface to ssbmv. + * Written by Keita Teranishi + * 4/6/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_ssbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const int K, const float alpha, const float *A, + const int lda, const float *X, const int incX, + const float beta, float *Y, const int incY) +{ + char UL; +#ifdef F77_CHAR + F77_CHAR F77_UL; +#else + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_N=N, F77_K=K, F77_lda=lda, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_K K + #define F77_lda lda + #define F77_incX incX + #define F77_incY incY +#endif + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_ssbmv","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_ssbmv(F77_UL, &F77_N, &F77_K, &alpha, A, &F77_lda, X, + &F77_incX, &beta, Y, &F77_incY); + }else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_ssbmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_ssbmv(F77_UL, &F77_N, &F77_K, &alpha, A, &F77_lda, X, + &F77_incX, &beta, Y, &F77_incY); + } + else cblas_xerbla(1, "cblas_ssbmv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_sscal.c b/CBLAS/src/cblas_sscal.c new file mode 100644 index 000000000..1f09abe7a --- /dev/null +++ b/CBLAS/src/cblas_sscal.c @@ -0,0 +1,21 @@ +/* + * cblas_sscal.c + * + * The program is a C interface to sscal. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_sscal( const int N, const float alpha, float *X, + const int incX) +{ +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incX +#endif + F77_sscal( &F77_N, &alpha, X, &F77_incX); +} diff --git a/CBLAS/src/cblas_sspmv.c b/CBLAS/src/cblas_sspmv.c new file mode 100644 index 000000000..aa4a287eb --- /dev/null +++ b/CBLAS/src/cblas_sspmv.c @@ -0,0 +1,73 @@ +/* + * + * cblas_sspmv.c + * This program is a C interface to sspmv. + * Written by Keita Teranishi + * 4/6/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_sspmv(const enum CBLAS_ORDER order, + const enum CBLAS_UPLO Uplo, const int N, + const float alpha, const float *AP, + const float *X, const int incX, const float beta, + float *Y, const int incY) +{ + char UL; +#ifdef F77_CHAR + F77_CHAR F77_UL; +#else + #define F77_UL &UL +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY +#endif + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_sspmv","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_sspmv(F77_UL, &F77_N, &alpha, AP, X, + &F77_incX, &beta, Y, &F77_incY); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_sspmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_sspmv(F77_UL, &F77_N, &alpha, + AP, X,&F77_incX, &beta, Y, &F77_incY); + } + else cblas_xerbla(1, "cblas_sspmv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; +} diff --git a/CBLAS/src/cblas_sspr.c b/CBLAS/src/cblas_sspr.c new file mode 100644 index 000000000..c8517ac1c --- /dev/null +++ b/CBLAS/src/cblas_sspr.c @@ -0,0 +1,72 @@ +/* + * + * cblas_sspr.c + * This program is a C interface to sspr. + * Written by Keita Teranishi + * 4/6/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_sspr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const float *X, + const int incX, float *Ap) +{ + char UL; +#ifdef F77_CHAR + F77_CHAR F77_UL; +#else + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incX +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasLower) UL = 'L'; + else if (Uplo == CblasUpper) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_sspr","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + + F77_sspr(F77_UL, &F77_N, &alpha, X, &F77_incX, Ap); + + } else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasLower) UL = 'U'; + else if (Uplo == CblasUpper) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_sspr","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_sspr(F77_UL, &F77_N, &alpha, X, &F77_incX, Ap); + } else cblas_xerbla(1, "cblas_sspr", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_sspr2.c b/CBLAS/src/cblas_sspr2.c new file mode 100644 index 000000000..4f5afcd85 --- /dev/null +++ b/CBLAS/src/cblas_sspr2.c @@ -0,0 +1,71 @@ +/* + * + * cblas_sspr2.c + * This program is a C interface to sspr2. + * Written by Keita Teranishi + * 4/6/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_sspr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const float *X, + const int incX, const float *Y, const int incY, float *A) +{ + char UL; +#ifdef F77_CHAR + F77_CHAR F77_UL; +#else + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasLower) UL = 'L'; + else if (Uplo == CblasUpper) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_sspr2","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + + F77_sspr2(F77_UL, &F77_N, &alpha, X, &F77_incX, Y, &F77_incY, A); + + } else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasLower) UL = 'U'; + else if (Uplo == CblasUpper) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_sspr2","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_sspr2(F77_UL, &F77_N, &alpha, X, &F77_incX, Y, &F77_incY, A); + } else cblas_xerbla(1, "cblas_sspr2", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; +} diff --git a/CBLAS/src/cblas_sswap.c b/CBLAS/src/cblas_sswap.c new file mode 100644 index 000000000..b74d8469c --- /dev/null +++ b/CBLAS/src/cblas_sswap.c @@ -0,0 +1,22 @@ +/* + * cblas_sswap.c + * + * The program is a C interface to sswap. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_sswap( const int N, float *X, const int incX, float *Y, + const int incY) +{ +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY +#endif + F77_sswap( &F77_N, X, &F77_incX, Y, &F77_incY); +} diff --git a/CBLAS/src/cblas_ssymm.c b/CBLAS/src/cblas_ssymm.c new file mode 100644 index 000000000..a3b160105 --- /dev/null +++ b/CBLAS/src/cblas_ssymm.c @@ -0,0 +1,108 @@ +/* + * + * cblas_ssymm.c + * This program is a C interface to ssymm. + * Written by Keita Teranishi + * 4/8/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_ssymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const int M, const int N, + const float alpha, const float *A, const int lda, + const float *B, const int ldb, const float beta, + float *C, const int ldc) +{ + char SD, UL; +#ifdef F77_CHAR + F77_CHAR F77_SD, F77_UL; +#else + #define F77_SD &SD + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_ldb=ldb; + F77_INT F77_ldc=ldc; +#else + #define F77_M M + #define F77_N N + #define F77_lda lda + #define F77_ldb ldb + #define F77_ldc ldc +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + + if( Order == CblasColMajor ) + { + if( Side == CblasRight) SD='R'; + else if ( Side == CblasLeft ) SD='L'; + else + { + cblas_xerbla(2, "cblas_ssymm", + "Illegal Side setting, %d\n", Side); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Uplo == CblasUpper) UL='U'; + else if ( Uplo == CblasLower ) UL='L'; + else + { + cblas_xerbla(3, "cblas_ssymm", + "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_SD = C2F_CHAR(&SD); + #endif + + F77_ssymm(F77_SD, F77_UL, &F77_M, &F77_N, &alpha, A, &F77_lda, B, &F77_ldb, &beta, C, &F77_ldc); + } else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + if( Side == CblasRight) SD='L'; + else if ( Side == CblasLeft ) SD='R'; + else + { + cblas_xerbla(2, "cblas_ssymm", + "Illegal Side setting, %d\n", Side); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Uplo == CblasUpper) UL='L'; + else if ( Uplo == CblasLower ) UL='U'; + else + { + cblas_xerbla(3, "cblas_ssymm", + "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_SD = C2F_CHAR(&SD); + #endif + + F77_ssymm(F77_SD, F77_UL, &F77_N, &F77_M, &alpha, A, &F77_lda, B, &F77_ldb, &beta, C, &F77_ldc); + } else cblas_xerbla(1, "cblas_ssymm", + "Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_ssymv.c b/CBLAS/src/cblas_ssymv.c new file mode 100644 index 000000000..89f5cc0cc --- /dev/null +++ b/CBLAS/src/cblas_ssymv.c @@ -0,0 +1,76 @@ +/* + * + * cblas_ssymv.c + * This program is a C interface to ssymv. + * Written by Keita Teranishi + * 4/6/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_ssymv(const enum CBLAS_ORDER order, + const enum CBLAS_UPLO Uplo, const int N, + const float alpha, const float *A, const int lda, + const float *X, const int incX, const float beta, + float *Y, const int incY) +{ + char UL; +#ifdef F77_CHAR + F77_CHAR F77_UL; +#else + #define F77_UL &UL +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_lda=lda, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_lda lda + #define F77_incX incX + #define F77_incY incY +#endif + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_ssymv","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_ssymv(F77_UL, &F77_N, &alpha, A, &F77_lda, X, + &F77_incX, &beta, Y, &F77_incY); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_ssymv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_ssymv(F77_UL, &F77_N, &alpha, + A ,&F77_lda, X,&F77_incX, &beta, Y, &F77_incY); + } + else cblas_xerbla(1, "cblas_ssymv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_ssyr.c b/CBLAS/src/cblas_ssyr.c new file mode 100644 index 000000000..4e58dba41 --- /dev/null +++ b/CBLAS/src/cblas_ssyr.c @@ -0,0 +1,70 @@ +/* + * + * cblas_ssyr.c + * This program is a C interface to ssyr. + * Written by Keita Teranishi + * 4/6/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_ssyr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const float *X, + const int incX, float *A, const int lda) +{ + char UL; +#ifdef F77_CHAR + F77_CHAR F77_UL; +#else + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_lda=lda; +#else + #define F77_N N + #define F77_incX incX + #define F77_lda lda +#endif + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasLower) UL = 'L'; + else if (Uplo == CblasUpper) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_ssyr","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + + F77_ssyr(F77_UL, &F77_N, &alpha, X, &F77_incX, A, &F77_lda); + + } else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasLower) UL = 'U'; + else if (Uplo == CblasUpper) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_ssyr","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_ssyr(F77_UL, &F77_N, &alpha, X, &F77_incX, A, &F77_lda); + } else cblas_xerbla(1, "cblas_ssyr", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_ssyr2.c b/CBLAS/src/cblas_ssyr2.c new file mode 100644 index 000000000..1d990cd41 --- /dev/null +++ b/CBLAS/src/cblas_ssyr2.c @@ -0,0 +1,76 @@ +/* + * + * cblas_ssyr2.c + * This program is a C interface to ssyr2. + * Written by Keita Teranishi + * 4/6/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_ssyr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const float *X, + const int incX, const float *Y, const int incY, float *A, + const int lda) +{ + char UL; +#ifdef F77_CHAR + F77_CHAR F77_UL; +#else + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY, F77__lda=lda; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY + #define F77_lda lda +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasLower) UL = 'L'; + else if (Uplo == CblasUpper) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_ssyr2","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + + F77_ssyr2(F77_UL, &F77_N, &alpha, X, &F77_incX, Y, &F77_incY, A, + &F77_lda); + + } else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasLower) UL = 'U'; + else if (Uplo == CblasUpper) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_ssyr2","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_ssyr2(F77_UL, &F77_N, &alpha, X, &F77_incX, Y, &F77_incY, A, + &F77_lda); + } else cblas_xerbla(1, "cblas_ssyr2", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_ssyr2k.c b/CBLAS/src/cblas_ssyr2k.c new file mode 100644 index 000000000..871dd21a1 --- /dev/null +++ b/CBLAS/src/cblas_ssyr2k.c @@ -0,0 +1,111 @@ +/* + * + * cblas_ssyr2k.c + * This program is a C interface to ssyr2k. + * Written by Keita Teranishi + * 4/6/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_ssyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const float alpha, const float *A, const int lda, + const float *B, const int ldb, const float beta, + float *C, const int ldc) +{ + char UL, TR; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL; +#else + #define F77_TR &TR + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_N=N, F77_K=K, F77_lda=lda, F77_ldb=ldb; + F77_INT F77_ldc=ldc; +#else + #define F77_N N + #define F77_K K + #define F77_lda lda + #define F77_ldb ldb + #define F77_ldc ldc +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + + if( Order == CblasColMajor ) + { + + if( Uplo == CblasUpper) UL='U'; + else if ( Uplo == CblasLower ) UL='L'; + else + { + cblas_xerbla(2, "cblas_ssyr2k", + "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Trans == CblasTrans) TR ='T'; + else if ( Trans == CblasConjTrans ) TR='C'; + else if ( Trans == CblasNoTrans ) TR='N'; + else + { + cblas_xerbla(3, "cblas_ssyr2k", + "Illegal Trans setting, %d\n", Trans); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TR = C2F_CHAR(&TR); + #endif + + F77_ssyr2k(F77_UL, F77_TR, &F77_N, &F77_K, &alpha, A, &F77_lda, B, &F77_ldb, &beta, C, &F77_ldc); + } else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + if( Uplo == CblasUpper) UL='L'; + else if ( Uplo == CblasLower ) UL='U'; + else + { + cblas_xerbla(3, "cblas_ssyr2k", + "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if( Trans == CblasTrans) TR ='N'; + else if ( Trans == CblasConjTrans ) TR='N'; + else if ( Trans == CblasNoTrans ) TR='T'; + else + { + cblas_xerbla(3, "cblas_ssyr2k", + "Illegal Trans setting, %d\n", Trans); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TR = C2F_CHAR(&TR); + #endif + + F77_ssyr2k(F77_UL, F77_TR, &F77_N, &F77_K, &alpha, A, &F77_lda, B, &F77_ldb, &beta, C, &F77_ldc); + } else cblas_xerbla(1, "cblas_ssyr2k", + "Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_ssyrk.c b/CBLAS/src/cblas_ssyrk.c new file mode 100644 index 000000000..4992c9b26 --- /dev/null +++ b/CBLAS/src/cblas_ssyrk.c @@ -0,0 +1,110 @@ +/* + * + * cblas_ssyrk.c + * This program is a C interface to ssyrk. + * Written by Keita Teranishi + * 4/8/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_ssyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const float alpha, const float *A, const int lda, + const float beta, float *C, const int ldc) +{ + char UL, TR; +#ifdef F77_CHAR + F77_CHAR F77_TR, F77_UL; +#else + #define F77_TR &TR + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_N=N, F77_K=K, F77_lda=lda; + F77_INT F77_ldc=ldc; +#else + #define F77_N N + #define F77_K K + #define F77_lda lda + #define F77_ldc ldc +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + + if( Order == CblasColMajor ) + { + + if( Uplo == CblasUpper) UL='U'; + else if ( Uplo == CblasLower ) UL='L'; + else + { + cblas_xerbla(2, "cblas_ssyrk", + "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Trans == CblasTrans) TR ='T'; + else if ( Trans == CblasConjTrans ) TR='C'; + else if ( Trans == CblasNoTrans ) TR='N'; + else + { + cblas_xerbla(3, "cblas_ssyrk", + "Illegal Trans setting, %d\n", Trans); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TR = C2F_CHAR(&TR); + #endif + + F77_ssyrk(F77_UL, F77_TR, &F77_N, &F77_K, &alpha, A, &F77_lda, &beta, C, &F77_ldc); + } else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + if( Uplo == CblasUpper) UL='L'; + else if ( Uplo == CblasLower ) UL='U'; + else + { + cblas_xerbla(3, "cblas_ssyrk", + "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if( Trans == CblasTrans) TR ='N'; + else if ( Trans == CblasConjTrans ) TR='N'; + else if ( Trans == CblasNoTrans ) TR='T'; + else + { + cblas_xerbla(3, "cblas_ssyrk", + "Illegal Trans setting, %d\n", Trans); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TR = C2F_CHAR(&TR); + #endif + + F77_ssyrk(F77_UL, F77_TR, &F77_N, &F77_K, &alpha, A, &F77_lda, &beta, C, &F77_ldc); + } else cblas_xerbla(1, "cblas_ssyrk", + "Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} + diff --git a/CBLAS/src/cblas_stbmv.c b/CBLAS/src/cblas_stbmv.c new file mode 100644 index 000000000..9e84bc019 --- /dev/null +++ b/CBLAS/src/cblas_stbmv.c @@ -0,0 +1,122 @@ +/* + * cblas_stbmv.c + * This program is a C interface to stbmv. + * Written by Keita Teranishi + * 3/3/1998 + */ +#include "cblas.h" +#include "cblas_f77.h" + +void cblas_stbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const float *A, const int lda, + float *X, const int incX) +{ + char TA; + char UL; + char DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_DI &DI +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_lda=lda, F77_K=K, F77_incX=incX; +#else + #define F77_N N + #define F77_K K + #define F77_lda lda + #define F77_incX incX +#endif + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_stbmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(3, "cblas_stbmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_stbmv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_stbmv( F77_UL, F77_TA, F77_DI, &F77_N, &F77_K, A, &F77_lda, X, + &F77_incX); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_stbmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) TA = 'N'; + else + { + cblas_xerbla(3, "cblas_stbmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_stbmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + + F77_stbmv( F77_UL, F77_TA, F77_DI, &F77_N, &F77_K, A, &F77_lda, X, + &F77_incX); + } + else cblas_xerbla(1, "cblas_stbmv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_stbsv.c b/CBLAS/src/cblas_stbsv.c new file mode 100644 index 000000000..fc1908970 --- /dev/null +++ b/CBLAS/src/cblas_stbsv.c @@ -0,0 +1,122 @@ +/* + * cblas_stbsv.c + * The program is a C interface to stbsv. + * + * Keita Teranishi 5/20/98 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_stbsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const float *A, const int lda, + float *X, const int incX) +{ + char TA; + char UL; + char DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_DI &DI +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_lda=lda, F77_K=K, F77_incX=incX; +#else + #define F77_N N + #define F77_K K + #define F77_lda lda + #define F77_incX incX +#endif + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_stbsv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(3, "cblas_stbsv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_stbsv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_stbsv( F77_UL, F77_TA, F77_DI, &F77_N, &F77_K, A, &F77_lda, X, + &F77_incX); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_stbsv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) TA = 'N'; + else + { + cblas_xerbla(3, "cblas_stbsv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_stbsv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + + F77_stbsv( F77_UL, F77_TA, F77_DI, &F77_N, &F77_K, A, &F77_lda, X, + &F77_incX); + } + else cblas_xerbla(1, "cblas_stbsv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_stpmv.c b/CBLAS/src/cblas_stpmv.c new file mode 100644 index 000000000..8f7fd6acd --- /dev/null +++ b/CBLAS/src/cblas_stpmv.c @@ -0,0 +1,118 @@ +/* + * + * cblas_stpmv.c + * This program is a C interface to stpmv. + * Written by Keita Teranishi + * 4/6/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_stpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const float *Ap, float *X, const int incX) +{ + char TA; + char UL; + char DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_DI &DI +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incX +#endif + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_stpmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(3, "cblas_stpmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_stpmv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_stpmv( F77_UL, F77_TA, F77_DI, &F77_N, Ap, X, &F77_incX); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_stpmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) TA = 'N'; + else + { + cblas_xerbla(3, "cblas_stpmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_stpmv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + + F77_stpmv( F77_UL, F77_TA, F77_DI, &F77_N, Ap, X,&F77_incX); + } + else cblas_xerbla(1, "cblas_stpmv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_stpsv.c b/CBLAS/src/cblas_stpsv.c new file mode 100644 index 000000000..acc5f1d5c --- /dev/null +++ b/CBLAS/src/cblas_stpsv.c @@ -0,0 +1,118 @@ +/* + * cblas_stpsv.c + * The program is a C interface to stpsv. + * + * Keita Teranishi 5/20/98 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_stpsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const float *Ap, float *X, const int incX) +{ + char TA; + char UL; + char DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_DI &DI +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incX +#endif + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_stpsv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(3, "cblas_stpsv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_stpsv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_stpsv( F77_UL, F77_TA, F77_DI, &F77_N, Ap, X, &F77_incX); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_stpsv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) TA = 'N'; + else + { + cblas_xerbla(3, "cblas_stpsv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_stpsv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + + F77_stpsv( F77_UL, F77_TA, F77_DI, &F77_N, Ap, X,&F77_incX); + + } + else cblas_xerbla(1, "cblas_stpsv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_strmm.c b/CBLAS/src/cblas_strmm.c new file mode 100644 index 000000000..9f8ce198d --- /dev/null +++ b/CBLAS/src/cblas_strmm.c @@ -0,0 +1,148 @@ +/* + * + * cblas_strmm.c + * This program is a C interface to strmm. + * Written by Keita Teranishi + * 4/6/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_strmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const float alpha, const float *A, const int lda, + float *B, const int ldb) +{ + char UL, TA, SD, DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_SD, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_SD &SD + #define F77_DI &DI +#endif + +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_ldb=ldb; +#else + #define F77_M M + #define F77_N N + #define F77_lda lda + #define F77_ldb ldb +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + + if( Order == CblasColMajor ) + { + if( Side == CblasRight) SD='R'; + else if ( Side == CblasLeft ) SD='L'; + else + { + cblas_xerbla(2, "cblas_strmm","Illegal Side setting, %d\n", Side); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if( Uplo == CblasUpper) UL='U'; + else if ( Uplo == CblasLower ) UL='L'; + else + { + cblas_xerbla(3, "cblas_strmm","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( TransA == CblasTrans) TA ='T'; + else if ( TransA == CblasConjTrans ) TA='C'; + else if ( TransA == CblasNoTrans ) TA='N'; + else + { + cblas_xerbla(4, "cblas_strmm","Illegal Trans setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Diag == CblasUnit ) DI='U'; + else if ( Diag == CblasNonUnit ) DI='N'; + else + { + cblas_xerbla(5, "cblas_strmm", "Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_SD = C2F_CHAR(&SD); + F77_DI = C2F_CHAR(&DI); + #endif + + F77_strmm(F77_SD, F77_UL, F77_TA, F77_DI, &F77_M, &F77_N, &alpha, A, &F77_lda, B, &F77_ldb); + } else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + if( Side == CblasRight) SD='L'; + else if ( Side == CblasLeft ) SD='R'; + else + { + cblas_xerbla(2, "cblas_strmm","Illegal Side setting, %d\n", Side); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Uplo == CblasUpper) UL='L'; + else if ( Uplo == CblasLower ) UL='U'; + else + { + cblas_xerbla(3, "cblas_strmm", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( TransA == CblasTrans) TA ='T'; + else if ( TransA == CblasConjTrans ) TA='C'; + else if ( TransA == CblasNoTrans ) TA='N'; + else + { + cblas_xerbla(4, "cblas_strmm", "Illegal Trans setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Diag == CblasUnit ) DI='U'; + else if ( Diag == CblasNonUnit ) DI='N'; + else + { + cblas_xerbla(5, "cblas_strmm","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } +#ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_SD = C2F_CHAR(&SD); + F77_DI = C2F_CHAR(&DI); +#endif + F77_strmm(F77_SD, F77_UL, F77_TA, F77_DI, &F77_N, &F77_M, &alpha, A, + &F77_lda, B, &F77_ldb); + } + else cblas_xerbla(1, "cblas_strmm", "Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_strmv.c b/CBLAS/src/cblas_strmv.c new file mode 100644 index 000000000..5a85b1daf --- /dev/null +++ b/CBLAS/src/cblas_strmv.c @@ -0,0 +1,122 @@ +/* + * + * cblas_strmv.c + * This program is a C interface to strmv. + * Written by Keita Teranishi + * 4/6/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_strmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const float *A, const int lda, + float *X, const int incX) + +{ + char TA; + char UL; + char DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_DI &DI +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_lda=lda, F77_incX=incX; +#else + #define F77_N N + #define F77_lda lda + #define F77_incX incX +#endif + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_strmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(3, "cblas_strmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_strmv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_strmv( F77_UL, F77_TA, F77_DI, &F77_N, A, &F77_lda, X, + &F77_incX); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_strmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) TA = 'N'; + else + { + cblas_xerbla(3, "cblas_strmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_strmv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_strmv( F77_UL, F77_TA, F77_DI, &F77_N, A, &F77_lda, X, + &F77_incX); + } + else cblas_xerbla(1, "cblas_strmv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_strsm.c b/CBLAS/src/cblas_strsm.c new file mode 100644 index 000000000..5dc3e0bc0 --- /dev/null +++ b/CBLAS/src/cblas_strsm.c @@ -0,0 +1,143 @@ +/* + * + * cblas_strsm.c + * This program is a C interface to strsm. + * Written by Keita Teranishi + * 4/6/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_strsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const float alpha, const float *A, const int lda, + float *B, const int ldb) + +{ + char UL, TA, SD, DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_SD, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_SD &SD + #define F77_DI &DI +#endif + +#ifdef F77_INT + F77_INT F77_N=M, F77_N=N, F77_lda=lda, F77_ldb=ldb; +#else + #define F77_M M + #define F77_N N + #define F77_lda lda + #define F77_ldb ldb +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + + if( Order == CblasColMajor ) + { + if( Side == CblasRight) SD='R'; + else if ( Side == CblasLeft ) SD='L'; + else + { + cblas_xerbla(2, "cblas_strsm", "Illegal Side setting, %d\n", Side); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if( Uplo == CblasUpper) UL='U'; + else if ( Uplo == CblasLower ) UL='L'; + else + { + cblas_xerbla(3, "cblas_strsm", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if( TransA == CblasTrans) TA ='T'; + else if ( TransA == CblasConjTrans ) TA='C'; + else if ( TransA == CblasNoTrans ) TA='N'; + else + { + cblas_xerbla(4, "cblas_strsm", "Illegal Trans setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if( Diag == CblasUnit ) DI='U'; + else if ( Diag == CblasNonUnit ) DI='N'; + else + { + cblas_xerbla(5, "cblas_strsm", "Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_SD = C2F_CHAR(&SD); + F77_DI = C2F_CHAR(&DI); + #endif + + F77_strsm(F77_SD, F77_UL, F77_TA, F77_DI, &F77_M, &F77_N, &alpha, A, &F77_lda, B, &F77_ldb); + } else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + if( Side == CblasRight) SD='L'; + else if ( Side == CblasLeft ) SD='R'; + else + { + cblas_xerbla(2, "cblas_strsm", "Illegal Side setting, %d\n", Side); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if( Uplo == CblasUpper) UL='L'; + else if ( Uplo == CblasLower ) UL='U'; + else + { + cblas_xerbla(3, "cblas_strsm", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if( TransA == CblasTrans) TA ='T'; + else if ( TransA == CblasConjTrans ) TA='C'; + else if ( TransA == CblasNoTrans ) TA='N'; + else + { + cblas_xerbla(4, "cblas_strsm", "Illegal Trans setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if( Diag == CblasUnit ) DI='U'; + else if ( Diag == CblasNonUnit ) DI='N'; + else + { + cblas_xerbla(5, "cblas_strsm", "Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_SD = C2F_CHAR(&SD); + F77_DI = C2F_CHAR(&DI); + #endif + + F77_strsm(F77_SD, F77_UL, F77_TA, F77_DI, &F77_N, &F77_M, &alpha, A, &F77_lda, B, &F77_ldb); + } + else cblas_xerbla(1, "cblas_strsm", "Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_strsv.c b/CBLAS/src/cblas_strsv.c new file mode 100644 index 000000000..a0509aebd --- /dev/null +++ b/CBLAS/src/cblas_strsv.c @@ -0,0 +1,121 @@ +/* + * cblas_strsv.c + * The program is a C interface to strsv. + * + * Keita Teranishi 5/20/98 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_strsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const float *A, const int lda, float *X, + const int incX) + +{ + char TA; + char UL; + char DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_DI &DI +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_lda=lda, F77_incX=incX; +#else + #define F77_N N + #define F77_lda lda + #define F77_incX incX +#endif + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_strsv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(3, "cblas_strsv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_strsv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_strsv( F77_UL, F77_TA, F77_DI, &F77_N, A, &F77_lda, X, + &F77_incX); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_strsv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) TA = 'N'; + else + { + cblas_xerbla(3, "cblas_strsv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_strsv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_strsv( F77_UL, F77_TA, F77_DI, &F77_N, A, &F77_lda, X, + &F77_incX); + } + else cblas_xerbla(1, "cblas_strsv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_xerbla.c b/CBLAS/src/cblas_xerbla.c new file mode 100644 index 000000000..3a2bfe6e3 --- /dev/null +++ b/CBLAS/src/cblas_xerbla.c @@ -0,0 +1,68 @@ +#include +#include +#include +#include +#include "cblas.h" +#include "cblas_f77.h" + +void cblas_xerbla(int info, const char *rout, const char *form, ...) +{ + extern int RowMajorStrg; + char empty[1] = ""; + va_list argptr; + + va_start(argptr, form); + + if (RowMajorStrg) + { + if (strstr(rout,"gemm") != 0) + { + if (info == 5 ) info = 4; + else if (info == 4 ) info = 5; + else if (info == 11) info = 9; + else if (info == 9 ) info = 11; + } + else if (strstr(rout,"symm") != 0 || strstr(rout,"hemm") != 0) + { + if (info == 5 ) info = 4; + else if (info == 4 ) info = 5; + } + else if (strstr(rout,"trmm") != 0 || strstr(rout,"trsm") != 0) + { + if (info == 7 ) info = 6; + else if (info == 6 ) info = 7; + } + else if (strstr(rout,"gemv") != 0) + { + if (info == 4) info = 3; + else if (info == 3) info = 4; + } + else if (strstr(rout,"gbmv") != 0) + { + if (info == 4) info = 3; + else if (info == 3) info = 4; + else if (info == 6) info = 5; + else if (info == 5) info = 6; + } + else if (strstr(rout,"ger") != 0) + { + if (info == 3) info = 2; + else if (info == 2) info = 3; + else if (info == 8) info = 6; + else if (info == 6) info = 8; + } + else if ( (strstr(rout,"her2") != 0 || strstr(rout,"hpr2") != 0) + && strstr(rout,"her2k") == 0 ) + { + if (info == 8) info = 6; + else if (info == 6) info = 8; + } + } + if (info) + fprintf(stderr, "Parameter %d to routine %s was incorrect\n", info, rout); + vfprintf(stderr, form, argptr); + va_end(argptr); + if (info && !info) + F77_xerbla(empty, &info); /* Force link of our F77 error handler */ + exit(-1); +} diff --git a/CBLAS/src/cblas_zaxpy.c b/CBLAS/src/cblas_zaxpy.c new file mode 100644 index 000000000..f63c4c39b --- /dev/null +++ b/CBLAS/src/cblas_zaxpy.c @@ -0,0 +1,22 @@ +/* + * cblas_zaxpy.c + * + * The program is a C interface to zaxpy. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_zaxpy( const int N, const void *alpha, const void *X, + const int incX, void *Y, const int incY) +{ +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY +#endif + F77_zaxpy( &F77_N, alpha, X, &F77_incX, Y, &F77_incY); +} diff --git a/CBLAS/src/cblas_zcopy.c b/CBLAS/src/cblas_zcopy.c new file mode 100644 index 000000000..a16be28e7 --- /dev/null +++ b/CBLAS/src/cblas_zcopy.c @@ -0,0 +1,22 @@ +/* + * cblas_zcopy.c + * + * The program is a C interface to zcopy. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_zcopy( const int N, const void *X, + const int incX, void *Y, const int incY) +{ +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY +#endif + F77_zcopy( &F77_N, X, &F77_incX, Y, &F77_incY); +} diff --git a/CBLAS/src/cblas_zdotc_sub.c b/CBLAS/src/cblas_zdotc_sub.c new file mode 100644 index 000000000..29dec6c57 --- /dev/null +++ b/CBLAS/src/cblas_zdotc_sub.c @@ -0,0 +1,24 @@ +/* + * cblas_zdotc_sub.c + * + * The program is a C interface to zdotc. + * It calls the fortran wrapper before calling zdotc. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_zdotc_sub( const int N, const void *X, const int incX, + const void *Y, const int incY, void *dotc) +{ +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY +#endif + F77_zdotc_sub( &F77_N, X, &F77_incX, Y, &F77_incY, dotc); + return; +} diff --git a/CBLAS/src/cblas_zdotu_sub.c b/CBLAS/src/cblas_zdotu_sub.c new file mode 100644 index 000000000..48a14bf3d --- /dev/null +++ b/CBLAS/src/cblas_zdotu_sub.c @@ -0,0 +1,24 @@ +/* + * cblas_zdotu_sub.c + * + * The program is a C interface to zdotu. + * It calls the fortran wrapper before calling zdotu. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_zdotu_sub( const int N, const void *X, const int incX, + const void *Y, const int incY, void *dotu) +{ +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY +#endif + F77_zdotu_sub( &F77_N, X, &F77_incX, Y, &F77_incY, dotu); + return; +} diff --git a/CBLAS/src/cblas_zdscal.c b/CBLAS/src/cblas_zdscal.c new file mode 100644 index 000000000..788365bef --- /dev/null +++ b/CBLAS/src/cblas_zdscal.c @@ -0,0 +1,21 @@ +/* + * cblas_zdscal.c + * + * The program is a C interface to zdscal. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_zdscal( const int N, const double alpha, void *X, + const int incX) +{ +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incX +#endif + F77_zdscal( &F77_N, &alpha, X, &F77_incX); +} diff --git a/CBLAS/src/cblas_zgbmv.c b/CBLAS/src/cblas_zgbmv.c new file mode 100644 index 000000000..fb3cabb40 --- /dev/null +++ b/CBLAS/src/cblas_zgbmv.c @@ -0,0 +1,166 @@ +/* + * cblas_zgbmv.c + * The program is a C interface of zgbmv + * + * Keita Teranishi 5/20/98 + * + */ +#include +#include +#include "cblas.h" +#include "cblas_f77.h" +void cblas_zgbmv(const enum CBLAS_ORDER order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const int KL, const int KU, + const void *alpha, const void *A, const int lda, + const void *X, const int incX, const void *beta, + void *Y, const int incY) +{ + char TA; +#ifdef F77_CHAR + F77_CHAR F77_TA; +#else + #define F77_TA &TA +#endif +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_incX=incX, F77_incY=incY; + F77_INT F77_KL=KL,F77_KU=KU; +#else + #define F77_M M + #define F77_N N + #define F77_lda lda + #define F77_KL KL + #define F77_KU KU + #define F77_incX incx + #define F77_incY incY +#endif + int n, i=0, incx=incX; + const double *xx= (double *)X, *alp= (double *)alpha, *bet = (double *)beta; + double ALPHA[2],BETA[2]; + int tincY, tincx; + double *x=(double *)X, *y=(double *)Y, *st=0, *tx; + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(2, "cblas_zgbmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_TA = C2F_CHAR(&TA); + #endif + F77_zgbmv(F77_TA, &F77_M, &F77_N, &F77_KL, &F77_KU, alpha, + A, &F77_lda, X, &F77_incX, beta, Y, &F77_incY); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) + { + ALPHA[0]= *alp; + ALPHA[1]= -alp[1]; + BETA[0]= *bet; + BETA[1]= -bet[1]; + TA = 'N'; + if (M > 0) + { + n = M << 1; + x = malloc(n*sizeof(double)); + tx = x; + + if( incX > 0 ) { + i = incX << 1 ; + tincx = 2; + st= x+n; + } else { + i = incX *(-2); + tincx = -2; + st = x-2; + x +=(n-2); + } + do + { + *x = *xx; + x[1] = -xx[1]; + x += tincx ; + xx += i; + } + while (x != st); + x=tx; + + #ifdef F77_INT + F77_incX = 1; + #else + incx = 1; + #endif + + if( incY > 0 ) + tincY = incY; + else + tincY = -incY; + + y++; + + if (N > 0) + { + i = tincY << 1; + n = i * N ; + st = y + n; + do { + *y = -(*y); + y += i; + } while(y != st); + y -= n; + } + } + else x = (double *) X; + + + } + else + { + cblas_xerbla(2, "cblas_zgbmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_TA = C2F_CHAR(&TA); + #endif + if (TransA == CblasConjTrans) + F77_zgbmv(F77_TA, &F77_N, &F77_M, &F77_KU, &F77_KL, ALPHA, + A ,&F77_lda, x,&F77_incX, BETA, Y, &F77_incY); + else + F77_zgbmv(F77_TA, &F77_N, &F77_M, &F77_KU, &F77_KL, alpha, + A ,&F77_lda, x,&F77_incX, beta, Y, &F77_incY); + if (TransA == CblasConjTrans) + { + if (x != X) free(x); + if (N > 0) + { + do + { + *y = -(*y); + y += i; + } + while (y != st); + } + } + } + else cblas_xerbla(1, "cblas_zgbmv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_zgemm.c b/CBLAS/src/cblas_zgemm.c new file mode 100644 index 000000000..f344d8387 --- /dev/null +++ b/CBLAS/src/cblas_zgemm.c @@ -0,0 +1,109 @@ +/* + * + * cblas_zgemm.c + * This program is a C interface to zgemm. + * Written by Keita Teranishi + * 4/8/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_zgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_TRANSPOSE TransB, const int M, const int N, + const int K, const void *alpha, const void *A, + const int lda, const void *B, const int ldb, + const void *beta, void *C, const int ldc) +{ + char TA, TB; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_TB; +#else + #define F77_TA &TA + #define F77_TB &TB +#endif + +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_K=K, F77_lda=lda, F77_ldb=ldb; + F77_INT F77_ldc=ldc; +#else + #define F77_M M + #define F77_N N + #define F77_K K + #define F77_lda lda + #define F77_ldb ldb + #define F77_ldc ldc +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + + if( Order == CblasColMajor ) + { + if(TransA == CblasTrans) TA='T'; + else if ( TransA == CblasConjTrans ) TA='C'; + else if ( TransA == CblasNoTrans ) TA='N'; + else + { + cblas_xerbla(2, "cblas_zgemm","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if(TransB == CblasTrans) TB='T'; + else if ( TransB == CblasConjTrans ) TB='C'; + else if ( TransB == CblasNoTrans ) TB='N'; + else + { + cblas_xerbla(3, "cblas_zgemm","Illegal TransB setting, %d\n", TransB); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_TA = C2F_CHAR(&TA); + F77_TB = C2F_CHAR(&TB); + #endif + + F77_zgemm(F77_TA, F77_TB, &F77_M, &F77_N, &F77_K, alpha, A, + &F77_lda, B, &F77_ldb, beta, C, &F77_ldc); + } else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + if(TransA == CblasTrans) TB='T'; + else if ( TransA == CblasConjTrans ) TB='C'; + else if ( TransA == CblasNoTrans ) TB='N'; + else + { + cblas_xerbla(2, "cblas_zgemm","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if(TransB == CblasTrans) TA='T'; + else if ( TransB == CblasConjTrans ) TA='C'; + else if ( TransB == CblasNoTrans ) TA='N'; + else + { + cblas_xerbla(2, "cblas_zgemm","Illegal TransB setting, %d\n", TransB); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_TA = C2F_CHAR(&TA); + F77_TB = C2F_CHAR(&TB); + #endif + + F77_zgemm(F77_TA, F77_TB, &F77_N, &F77_M, &F77_K, alpha, B, + &F77_ldb, A, &F77_lda, beta, C, &F77_ldc); + } + else cblas_xerbla(1, "cblas_zgemm", "Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_zgemv.c b/CBLAS/src/cblas_zgemv.c new file mode 100644 index 000000000..355d7ef30 --- /dev/null +++ b/CBLAS/src/cblas_zgemv.c @@ -0,0 +1,164 @@ +/* + * cblas_zgemv.c + * The program is a C interface of zgemv + * + * Keita Teranishi 5/20/98 + * + */ +#include +#include +#include "cblas.h" +#include "cblas_f77.h" +void cblas_zgemv(const enum CBLAS_ORDER order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const void *alpha, const void *A, const int lda, + const void *X, const int incX, const void *beta, + void *Y, const int incY) +{ + char TA; +#ifdef F77_CHAR + F77_CHAR F77_TA; +#else + #define F77_TA &TA +#endif +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_incX=incX, F77_incY=incY; +#else + #define F77_M M + #define F77_N N + #define F77_lda lda + #define F77_incX incx + #define F77_incY incY +#endif + + int n, i=0, incx=incX; + const double *xx= (double *)X, *alp= (double *)alpha, *bet = (double *)beta; + double ALPHA[2],BETA[2]; + int tincY, tincx; + double *x=(double *)X, *y=(double *)Y, *st=0, *tx; + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + + if (order == CblasColMajor) + { + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(2, "cblas_zgemv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_TA = C2F_CHAR(&TA); + #endif + F77_zgemv(F77_TA, &F77_M, &F77_N, alpha, A, &F77_lda, X, &F77_incX, + beta, Y, &F77_incY); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) + { + ALPHA[0]= *alp; + ALPHA[1]= -alp[1]; + BETA[0]= *bet; + BETA[1]= -bet[1]; + TA = 'N'; + if (M > 0) + { + n = M << 1; + x = malloc(n*sizeof(double)); + tx = x; + if( incX > 0 ) { + i = incX << 1 ; + tincx = 2; + st= x+n; + } else { + i = incX *(-2); + tincx = -2; + st = x-2; + x +=(n-2); + } + + do + { + *x = *xx; + x[1] = -xx[1]; + x += tincx ; + xx += i; + } + while (x != st); + x=tx; + + #ifdef F77_INT + F77_incX = 1; + #else + incx = 1; + #endif + + if(incY > 0) + tincY = incY; + else + tincY = -incY; + + y++; + + if (N > 0) + { + i = tincY << 1; + n = i * N ; + st = y + n; + do { + *y = -(*y); + y += i; + } while(y != st); + y -= n; + } + } + else x = (double *) X; + } + else + { + cblas_xerbla(2, "cblas_zgemv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_TA = C2F_CHAR(&TA); + #endif + if (TransA == CblasConjTrans) + F77_zgemv(F77_TA, &F77_N, &F77_M, ALPHA, A, &F77_lda, x, + &F77_incX, BETA, Y, &F77_incY); + else + F77_zgemv(F77_TA, &F77_N, &F77_M, alpha, A, &F77_lda, x, + &F77_incX, beta, Y, &F77_incY); + + if (TransA == CblasConjTrans) + { + if (x != (double *)X) free(x); + if (N > 0) + { + do + { + *y = -(*y); + y += i; + } + while (y != st); + } + } + } + else cblas_xerbla(1, "cblas_zgemv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_zgerc.c b/CBLAS/src/cblas_zgerc.c new file mode 100644 index 000000000..2acde748e --- /dev/null +++ b/CBLAS/src/cblas_zgerc.c @@ -0,0 +1,84 @@ +/* + * cblas_zgerc.c + * The program is a C interface to zgerc. + * + * Keita Teranishi 5/20/98 + * + */ +#include +#include +#include "cblas.h" +#include "cblas_f77.h" +void cblas_zgerc(const enum CBLAS_ORDER order, const int M, const int N, + const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *A, const int lda) +{ +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_incX=incX, F77_incY=incY; +#else + #define F77_M M + #define F77_N N + #define F77_incX incX + #define F77_incY incy + #define F77_lda lda +#endif + + int n, i, tincy, incy=incY; + double *y=(double *)Y, *yy=(double *)Y, *ty, *st; + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + F77_zgerc( &F77_M, &F77_N, alpha, X, &F77_incX, Y, &F77_incY, A, + &F77_lda); + } else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (N > 0) + { + n = N << 1; + y = malloc(n*sizeof(double)); + + ty = y; + if( incY > 0 ) { + i = incY << 1; + tincy = 2; + st= y+n; + } else { + i = incY *(-2); + tincy = -2; + st = y-2; + y +=(n-2); + } + do + { + *y = *yy; + y[1] = -yy[1]; + y += tincy ; + yy += i; + } + while (y != st); + y = ty; + + #ifdef F77_INT + F77_incY = 1; + #else + incy = 1; + #endif + } + else y = (double *) Y; + + F77_zgeru( &F77_N, &F77_M, alpha, y, &F77_incY, X, &F77_incX, A, + &F77_lda); + if(Y!=y) + free(y); + + } else cblas_xerbla(1, "cblas_zgerc", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_zgeru.c b/CBLAS/src/cblas_zgeru.c new file mode 100644 index 000000000..464ca1539 --- /dev/null +++ b/CBLAS/src/cblas_zgeru.c @@ -0,0 +1,44 @@ +/* + * cblas_zgeru.c + * The program is a C interface to zgeru. + * + * Keita Teranishi 5/20/98 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_zgeru(const enum CBLAS_ORDER order, const int M, const int N, + const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *A, const int lda) +{ +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_incX=incX, F77_incY=incY; +#else + #define F77_M M + #define F77_N N + #define F77_incX incX + #define F77_incY incY + #define F77_lda lda +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + + if (order == CblasColMajor) + { + F77_zgeru( &F77_M, &F77_N, alpha, X, &F77_incX, Y, &F77_incY, A, + &F77_lda); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + F77_zgeru( &F77_N, &F77_M, alpha, Y, &F77_incY, X, &F77_incX, A, + &F77_lda); + } + else cblas_xerbla(1, "cblas_zgeru", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_zhbmv.c b/CBLAS/src/cblas_zhbmv.c new file mode 100644 index 000000000..de4b96a9b --- /dev/null +++ b/CBLAS/src/cblas_zhbmv.c @@ -0,0 +1,159 @@ +/* + * cblas_zhbmv.c + * The program is a C interface to zhbmv + * + * Keita Teranishi 5/18/98 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +#include +#include +void cblas_zhbmv(const enum CBLAS_ORDER order, + const enum CBLAS_UPLO Uplo,const int N,const int K, + const void *alpha, const void *A, const int lda, + const void *X, const int incX, const void *beta, + void *Y, const int incY) +{ + char UL; +#ifdef F77_CHAR + F77_CHAR F77_UL; +#else + #define F77_UL &UL +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_K=K, F77_lda=lda, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_K K + #define F77_lda lda + #define F77_incX incx + #define F77_incY incY +#endif + int n, i=0, incx=incX; + const double *xx= (double *)X, *alp= (double *)alpha, *bet = (double *)beta; + double ALPHA[2],BETA[2]; + int tincY, tincx; + double *x=(double *)X, *y=(double *)Y, *st=0, *tx; + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasLower) UL = 'L'; + else if (Uplo == CblasUpper) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_zhbmv","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_zhbmv(F77_UL, &F77_N, &F77_K, alpha, A, &F77_lda, X, + &F77_incX, beta, Y, &F77_incY); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + ALPHA[0]= *alp; + ALPHA[1]= -alp[1]; + BETA[0]= *bet; + BETA[1]= -bet[1]; + + if (N > 0) + { + n = N << 1; + x = malloc(n*sizeof(double)); + + tx = x; + if( incX > 0 ) { + i = incX << 1 ; + tincx = 2; + st= x+n; + } else { + i = incX *(-2); + tincx = -2; + st = x-2; + x +=(n-2); + } + + do + { + *x = *xx; + x[1] = -xx[1]; + x += tincx ; + xx += i; + } + while (x != st); + x=tx; + + + #ifdef F77_INT + F77_incX = 1; + #else + incx = 1; + #endif + + if(incY > 0) + tincY = incY; + else + tincY = -incY; + y++; + + i = tincY << 1; + n = i * N ; + st = y + n; + do { + *y = -(*y); + y += i; + } while(y != st); + y -= n; + } else + x = (double *) X; + + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_zhbmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_zhbmv(F77_UL, &F77_N, &F77_K, ALPHA, + A ,&F77_lda, x,&F77_incX, BETA, Y, &F77_incY); + } + else + { + cblas_xerbla(1, "cblas_zhbmv","Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if ( order == CblasRowMajor ) + { + RowMajorStrg = 1; + if(X!=x) + free(x); + if (N > 0) + { + do + { + *y = -(*y); + y += i; + } + while (y != st); + } + } + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_zhemm.c b/CBLAS/src/cblas_zhemm.c new file mode 100644 index 000000000..2eb0951d2 --- /dev/null +++ b/CBLAS/src/cblas_zhemm.c @@ -0,0 +1,106 @@ +/* + * + * cblas_zhemm.c + * This program is a C interface to zhemm. + * Written by Keita Teranishi + * 4/8/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_zhemm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const int M, const int N, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const void *beta, + void *C, const int ldc) +{ + char SD, UL; +#ifdef F77_CHAR + F77_CHAR F77_SD, F77_UL; +#else + #define F77_SD &SD + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_ldb=ldb; + F77_INT F77_ldc=ldc; +#else + #define F77_M M + #define F77_N N + #define F77_lda lda + #define F77_ldb ldb + #define F77_ldc ldc +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + + if( Order == CblasColMajor ) + { + if( Side == CblasRight) SD='R'; + else if ( Side == CblasLeft ) SD='L'; + else + { + cblas_xerbla(2, "cblas_zhemm", "Illegal Side setting, %d\n", Side); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Uplo == CblasUpper) UL='U'; + else if ( Uplo == CblasLower ) UL='L'; + else + { + cblas_xerbla(3, "cblas_zhemm", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_SD = C2F_CHAR(&SD); + #endif + + F77_zhemm(F77_SD, F77_UL, &F77_M, &F77_N, alpha, A, &F77_lda, + B, &F77_ldb, beta, C, &F77_ldc); + } else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + if( Side == CblasRight) SD='L'; + else if ( Side == CblasLeft ) SD='R'; + else + { + cblas_xerbla(2, "cblas_zhemm", "Illegal Side setting, %d\n", Side); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Uplo == CblasUpper) UL='L'; + else if ( Uplo == CblasLower ) UL='U'; + else + { + cblas_xerbla(3, "cblas_zhemm", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_SD = C2F_CHAR(&SD); + #endif + + F77_zhemm(F77_SD, F77_UL, &F77_N, &F77_M, alpha, A, + &F77_lda, B, &F77_ldb, beta, C, &F77_ldc); + } + else cblas_xerbla(1, "cblas_zhemm", "Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_zhemv.c b/CBLAS/src/cblas_zhemv.c new file mode 100644 index 000000000..29cee1f20 --- /dev/null +++ b/CBLAS/src/cblas_zhemv.c @@ -0,0 +1,160 @@ +/* + * cblas_zhemv.c + * The program is a C interface to zhemv + * + * Keita Teranishi 5/18/98 + * + */ +#include +#include +#include "cblas.h" +#include "cblas_f77.h" +void cblas_zhemv(const enum CBLAS_ORDER order, + const enum CBLAS_UPLO Uplo, const int N, + const void *alpha, const void *A, const int lda, + const void *X, const int incX, const void *beta, + void *Y, const int incY) +{ + char UL; +#ifdef F77_CHAR + F77_CHAR F77_UL; +#else + #define F77_UL &UL +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_lda=lda, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_lda lda + #define F77_incX incx + #define F77_incY incY +#endif + int n, i=0, incx=incX; + const double *xx= (double *)X, *alp= (double *)alpha, *bet = (double *)beta; + double ALPHA[2],BETA[2]; + int tincY, tincx; + double *x=(double *)X, *y=(double *)Y, *st=0, *tx; + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_zhemv","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_zhemv(F77_UL, &F77_N, alpha, A, &F77_lda, X, &F77_incX, + beta, Y, &F77_incY); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + ALPHA[0]= *alp; + ALPHA[1]= -alp[1]; + BETA[0]= *bet; + BETA[1]= -bet[1]; + + if (N > 0) + { + n = N << 1; + x = malloc(n*sizeof(double)); + + tx = x; + if( incX > 0 ) { + i = incX << 1 ; + tincx = 2; + st= x+n; + } else { + i = incX *(-2); + tincx = -2; + st = x-2; + x +=(n-2); + } + + do + { + *x = *xx; + x[1] = -xx[1]; + x += tincx ; + xx += i; + } + while (x != st); + x=tx; + + + #ifdef F77_INT + F77_incX = 1; + #else + incx = 1; + #endif + + if(incY > 0) + tincY = incY; + else + tincY = -incY; + y++; + + i = tincY << 1; + n = i * N ; + st = y + n; + do { + *y = -(*y); + y += i; + } while(y != st); + y -= n; + } else + x = (double *) X; + + + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_zhemv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_zhemv(F77_UL, &F77_N, ALPHA, A, &F77_lda, x, &F77_incX, + BETA, Y, &F77_incY); + } + else + { + cblas_xerbla(1, "cblas_zhemv","Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if ( order == CblasRowMajor ) + { + RowMajorStrg = 1; + if ( X != x ) + free(x); + if (N > 0) + { + do + { + *y = -(*y); + y += i; + } + while (y != st); + } + } + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_zher.c b/CBLAS/src/cblas_zher.c new file mode 100644 index 000000000..f688992bf --- /dev/null +++ b/CBLAS/src/cblas_zher.c @@ -0,0 +1,110 @@ +/* + * cblas_zher.c + * The program is a C interface to zher. + * + * Keita Teranishi 5/20/98 + * + */ +#include +#include +#include "cblas.h" +#include "cblas_f77.h" +void cblas_zher(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const void *X, const int incX + ,void *A, const int lda) +{ + char UL; +#ifdef F77_CHAR + F77_CHAR F77_UL; +#else + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_N=N, F77_lda=lda, F77_incX=incX; +#else + #define F77_N N + #define F77_lda lda + #define F77_incX incx +#endif + int n, i, tincx, incx=incX; + double *x=(double *)X, *xx=(double *)X, *tx, *st; + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasLower) UL = 'L'; + else if (Uplo == CblasUpper) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_zher","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + + F77_zher(F77_UL, &F77_N, &alpha, X, &F77_incX, A, &F77_lda); + + } else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_zher","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + if (N > 0) + { + n = N << 1; + x = malloc(n*sizeof(double)); + tx = x; + if( incX > 0 ) { + i = incX << 1 ; + tincx = 2; + st= x+n; + } else { + i = incX *(-2); + tincx = -2; + st = x-2; + x +=(n-2); + } + do + { + *x = *xx; + x[1] = -xx[1]; + x += tincx ; + xx += i; + } + while (x != st); + x=tx; + + #ifdef F77_INT + F77_incX = 1; + #else + incx = 1; + #endif + } + else x = (double *) X; + F77_zher(F77_UL, &F77_N, &alpha, x, &F77_incX, A, &F77_lda); + } else cblas_xerbla(1, "cblas_zher", "Illegal Order setting, %d\n", order); + if(X!=x) + free(x); + + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_zher2.c b/CBLAS/src/cblas_zher2.c new file mode 100644 index 000000000..fa0547453 --- /dev/null +++ b/CBLAS/src/cblas_zher2.c @@ -0,0 +1,153 @@ +/* + * cblas_zher2.c + * The program is a C interface to zher2. + * + * Keita Teranishi 3/23/98 + * + */ +#include +#include +#include "cblas.h" +#include "cblas_f77.h" +void cblas_zher2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *A, const int lda) +{ + char UL; +#ifdef F77_CHAR + F77_CHAR F77_UL; +#else + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_N=N, F77_lda=lda, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_lda lda + #define F77_incX incx + #define F77_incY incy +#endif + int n, i, j, tincx, tincy, incx=incX, incy=incY; + double *x=(double *)X, *xx=(double *)X, *y=(double *)Y, + *yy=(double *)Y, *tx, *ty, *stx, *sty; + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasLower) UL = 'L'; + else if (Uplo == CblasUpper) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_zher2", "Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + + F77_zher2(F77_UL, &F77_N, alpha, X, &F77_incX, + Y, &F77_incY, A, &F77_lda); + + } else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_zher2", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + if (N > 0) + { + n = N << 1; + x = malloc(n*sizeof(double)); + y = malloc(n*sizeof(double)); + tx = x; + ty = y; + if( incX > 0 ) { + i = incX << 1 ; + tincx = 2; + stx= x+n; + } else { + i = incX *(-2); + tincx = -2; + stx = x-2; + x +=(n-2); + } + + if( incY > 0 ) { + j = incY << 1; + tincy = 2; + sty= y+n; + } else { + j = incY *(-2); + tincy = -2; + sty = y-2; + y +=(n-2); + } + + do + { + *x = *xx; + x[1] = -xx[1]; + x += tincx ; + xx += i; + } + while (x != stx); + + do + { + *y = *yy; + y[1] = -yy[1]; + y += tincy ; + yy += j; + } + while (y != sty); + + x=tx; + y=ty; + + #ifdef F77_INT + F77_incX = 1; + F77_incY = 1; + #else + incx = 1; + incy = 1; + #endif + } else + { + x = (double *) X; + y = (double *) Y; + } + F77_zher2(F77_UL, &F77_N, alpha, y, &F77_incY, x, + &F77_incX, A, &F77_lda); + } + else + { + cblas_xerbla(1, "cblas_zher2", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if(X!=x) + free(x); + if(Y!=y) + free(y); + + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_zher2k.c b/CBLAS/src/cblas_zher2k.c new file mode 100644 index 000000000..abd0a4ddc --- /dev/null +++ b/CBLAS/src/cblas_zher2k.c @@ -0,0 +1,110 @@ +/* + * + * cblas_zher2k.c + * This program is a C interface to zher2k. + * Written by Keita Teranishi + * 4/8/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_zher2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const double beta, + void *C, const int ldc) +{ + char UL, TR; +#ifdef F77_CHAR + F77_CHAR F77_TR, F77_UL; +#else + #define F77_TR &TR + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_N=N, F77_K=K, F77_lda=lda, F77_ldb=ldb; + F77_INT F77_ldc=ldc; +#else + #define F77_N N + #define F77_K K + #define F77_lda lda + #define F77_ldb ldb + #define F77_ldc ldc +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + double ALPHA[2]; + const double *alp=(double *)alpha; + + CBLAS_CallFromC = 1; + RowMajorStrg = 0; + + if( Order == CblasColMajor ) + { + + if( Uplo == CblasUpper) UL='U'; + else if ( Uplo == CblasLower ) UL='L'; + else + { + cblas_xerbla(2, "cblas_zher2k", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Trans == CblasTrans) TR ='T'; + else if ( Trans == CblasConjTrans ) TR='C'; + else if ( Trans == CblasNoTrans ) TR='N'; + else + { + cblas_xerbla(3, "cblas_zher2k", "Illegal Trans setting, %d\n", Trans); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TR = C2F_CHAR(&TR); + #endif + + F77_zher2k(F77_UL, F77_TR, &F77_N, &F77_K, alpha, A, &F77_lda, B, &F77_ldb, &beta, C, &F77_ldc); + } else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + + if( Uplo == CblasUpper) UL='L'; + else if ( Uplo == CblasLower ) UL='U'; + else + { + cblas_xerbla(2, "cblas_zher2k", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if( Trans == CblasTrans) TR ='N'; + else if ( Trans == CblasConjTrans ) TR='N'; + else if ( Trans == CblasNoTrans ) TR='C'; + else + { + cblas_xerbla(3, "cblas_zher2k", "Illegal Trans setting, %d\n", Trans); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TR = C2F_CHAR(&TR); + #endif + + ALPHA[0]= *alp; + ALPHA[1]= -alp[1]; + F77_zher2k(F77_UL,F77_TR, &F77_N, &F77_K, ALPHA, A, &F77_lda, B, &F77_ldb, &beta, C, &F77_ldc); + } else cblas_xerbla(1, "cblas_zher2k", "Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_zherk.c b/CBLAS/src/cblas_zherk.c new file mode 100644 index 000000000..a867788f3 --- /dev/null +++ b/CBLAS/src/cblas_zherk.c @@ -0,0 +1,105 @@ +/* + * + * cblas_zherk.c + * This program is a C interface to zherk. + * Written by Keita Teranishi + * 4/8/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_zherk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const double alpha, const void *A, const int lda, + const double beta, void *C, const int ldc) +{ + char UL, TR; +#ifdef F77_CHAR + F77_CHAR F77_TR, F77_UL; +#else + #define F77_TR &TR + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_N=N, F77_K=K, F77_lda=lda; + F77_INT F77_ldc=ldc; +#else + #define F77_N N + #define F77_K K + #define F77_lda lda + #define F77_ldc ldc +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + + if( Order == CblasColMajor ) + { + if( Uplo == CblasUpper) UL='U'; + else if ( Uplo == CblasLower ) UL='L'; + else + { + cblas_xerbla(2, "cblas_zherk", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Trans == CblasTrans) TR ='T'; + else if ( Trans == CblasConjTrans ) TR='C'; + else if ( Trans == CblasNoTrans ) TR='N'; + else + { + cblas_xerbla(3, "cblas_zherk", "Illegal Trans setting, %d\n", Trans); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TR = C2F_CHAR(&TR); + #endif + + F77_zherk(F77_UL, F77_TR, &F77_N, &F77_K, &alpha, A, &F77_lda, + &beta, C, &F77_ldc); + } else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + if( Uplo == CblasUpper) UL='L'; + else if ( Uplo == CblasLower ) UL='U'; + else + { + cblas_xerbla(3, "cblas_zherk", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if( Trans == CblasTrans) TR ='N'; + else if ( Trans == CblasConjTrans ) TR='N'; + else if ( Trans == CblasNoTrans ) TR='C'; + else + { + cblas_xerbla(3, "cblas_zherk", "Illegal Trans setting, %d\n", Trans); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_SD = C2F_CHAR(&SD); + #endif + + F77_zherk(F77_UL, F77_TR, &F77_N, &F77_K, &alpha, A, &F77_lda, + &beta, C, &F77_ldc); + } + else cblas_xerbla(1, "cblas_zherk", "Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_zhpmv.c b/CBLAS/src/cblas_zhpmv.c new file mode 100644 index 000000000..289eb7806 --- /dev/null +++ b/CBLAS/src/cblas_zhpmv.c @@ -0,0 +1,160 @@ +/* + * cblas_zhpmv.c + * The program is a C interface of zhpmv + * + * Keita Teranishi 5/18/98 + * + */ +#include +#include +#include "cblas.h" +#include "cblas_f77.h" +void cblas_zhpmv(const enum CBLAS_ORDER order, + const enum CBLAS_UPLO Uplo,const int N, + const void *alpha, const void *AP, + const void *X, const int incX, const void *beta, + void *Y, const int incY) +{ + char UL; +#ifdef F77_CHAR + F77_CHAR F77_UL; +#else + #define F77_UL &UL +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_K=K, F77_lda=lda, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incx + #define F77_incY incY +#endif + int n, i=0, incx=incX; + const double *xx= (double *)X, *alp= (double *)alpha, *bet = (double *)beta; + double ALPHA[2],BETA[2]; + int tincY, tincx; + double *x=(double *)X, *y=(double *)Y, *st=0, *tx; + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasLower) UL = 'L'; + else if (Uplo == CblasUpper) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_zhpmv","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + F77_zhpmv(F77_UL, &F77_N, alpha, AP, X, + &F77_incX, beta, Y, &F77_incY); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + ALPHA[0]= *alp; + ALPHA[1]= -alp[1]; + BETA[0]= *bet; + BETA[1]= -bet[1]; + + if (N > 0) + { + n = N << 1; + x = malloc(n*sizeof(double)); + + tx = x; + if( incX > 0 ) { + i = incX << 1; + tincx = 2; + st= x+n; + } else { + i = incX *(-2); + tincx = -2; + st = x-2; + x +=(n-2); + } + + do + { + *x = *xx; + x[1] = -xx[1]; + x += tincx ; + xx += i; + } + while (x != st); + x=tx; + + + #ifdef F77_INT + F77_incX = 1; + #else + incx = 1; + #endif + + if(incY > 0) + tincY = incY; + else + tincY = -incY; + y++; + + i = tincY << 1; + n = i * N ; + st = y + n; + do { + *y = -(*y); + y += i; + } while(y != st); + y -= n; + } else + x = (double *) X; + + + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_zhpmv","Illegal Uplo setting, %d\n", Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + + F77_zhpmv(F77_UL, &F77_N, ALPHA, + AP, x, &F77_incX, BETA, Y, &F77_incY); + } + else + { + cblas_xerbla(1, "cblas_zhpmv","Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if ( order == CblasRowMajor ) + { + RowMajorStrg = 1; + if(X!=x) + free(x); + if (N > 0) + { + do + { + *y = -(*y); + y += i; + } + while (y != st); + } + } + + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_zhpr.c b/CBLAS/src/cblas_zhpr.c new file mode 100644 index 000000000..5517c22d5 --- /dev/null +++ b/CBLAS/src/cblas_zhpr.c @@ -0,0 +1,115 @@ +/* + * cblas_zhpr.c + * The program is a C interface to zhpr. + * + * Keita Teranishi 3/23/98 + * + */ +#include +#include +#include "cblas.h" +#include "cblas_f77.h" +void cblas_zhpr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const void *X, + const int incX, void *A) +{ + char UL; +#ifdef F77_CHAR + F77_CHAR F77_UL; +#else + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incx +#endif + int n, i, tincx, incx=incX; + double *x=(double *)X, *xx=(double *)X, *tx, *st; + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasLower) UL = 'L'; + else if (Uplo == CblasUpper) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_zhpr","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + + F77_zhpr(F77_UL, &F77_N, &alpha, X, &F77_incX, A); + + } else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_zhpr","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + if (N > 0) + { + n = N << 1; + x = malloc(n*sizeof(double)); + tx = x; + if( incX > 0 ) { + i = incX << 1; + tincx = 2; + st= x+n; + } else { + i = incX *(-2); + tincx = -2; + st = x-2; + x +=(n-2); + } + do + { + *x = *xx; + x[1] = -xx[1]; + x += tincx ; + xx += i; + } + while (x != st); + x=tx; + #ifdef F77_INT + F77_incX = 1; + #else + incx = 1; + #endif + } + else x = (double *) X; + + F77_zhpr(F77_UL, &F77_N, &alpha, x, &F77_incX, A); + + } else + { + cblas_xerbla(1, "cblas_zhpr","Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if(X!=x) + free(x); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_zhpr2.c b/CBLAS/src/cblas_zhpr2.c new file mode 100644 index 000000000..69b9f14a9 --- /dev/null +++ b/CBLAS/src/cblas_zhpr2.c @@ -0,0 +1,150 @@ +/* + * cblas_zhpr2.c + * The program is a C interface to zhpr2. + * + * Keita Teranishi 5/20/98 + * + */ +#include +#include +#include "cblas.h" +#include "cblas_f77.h" +void cblas_zhpr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const int N,const void *alpha, const void *X, + const int incX,const void *Y, const int incY, void *Ap) + +{ + char UL; +#ifdef F77_CHAR + F77_CHAR F77_UL; +#else + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incx + #define F77_incY incy +#endif + int n, i, j, incx=incX, incy=incY; + double *x=(double *)X, *xx=(double *)X, *y=(double *)Y, + *yy=(double *)Y, *stx, *sty; + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasLower) UL = 'L'; + else if (Uplo == CblasUpper) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_zhpr2","Illegal Uplo setting, %d\n",Uplo ); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + + F77_zhpr2(F77_UL, &F77_N, alpha, X, &F77_incX, Y, &F77_incY, Ap); + + } else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_zhpr2","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + #endif + if (N > 0) + { + n = N << 1; + x = malloc(n*sizeof(double)); + y = malloc(n*sizeof(double)); + stx = x + n; + sty = y + n; + if( incX > 0 ) + i = incX << 1; + else + i = incX *(-2); + + if( incY > 0 ) + j = incY << 1; + else + j = incY *(-2); + do + { + *x = *xx; + x[1] = -xx[1]; + x += 2; + xx += i; + } while (x != stx); + do + { + *y = *yy; + y[1] = -yy[1]; + y += 2; + yy += j; + } + while (y != sty); + x -= n; + y -= n; + + #ifdef F77_INT + if(incX > 0 ) + F77_incX = 1; + else + F77_incX = -1; + + if(incY > 0 ) + F77_incY = 1; + else + F77_incY = -1; + + #else + if(incX > 0 ) + incx = 1; + else + incx = -1; + + if(incY > 0 ) + incy = 1; + else + incy = -1; + #endif + + } else + { + x = (double *) X; + y = (void *) Y; + } + F77_zhpr2(F77_UL, &F77_N, alpha, y, &F77_incY, x, &F77_incX, Ap); + } + else + { + cblas_xerbla(1, "cblas_zhpr2","Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if(X!=x) + free(x); + if(Y!=y) + free(y); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_zscal.c b/CBLAS/src/cblas_zscal.c new file mode 100644 index 000000000..37b319f38 --- /dev/null +++ b/CBLAS/src/cblas_zscal.c @@ -0,0 +1,21 @@ +/* + * cblas_zscal.c + * + * The program is a C interface to zscal. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_zscal( const int N, const void *alpha, void *X, + const int incX) +{ +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incX +#endif + F77_zscal( &F77_N, alpha, X, &F77_incX); +} diff --git a/CBLAS/src/cblas_zswap.c b/CBLAS/src/cblas_zswap.c new file mode 100644 index 000000000..dfde2cbd0 --- /dev/null +++ b/CBLAS/src/cblas_zswap.c @@ -0,0 +1,22 @@ +/* + * cblas_zswap.c + * + * The program is a C interface to zswap. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_zswap( const int N, void *X, const int incX, void *Y, + const int incY) +{ +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX, F77_incY=incY; +#else + #define F77_N N + #define F77_incX incX + #define F77_incY incY +#endif + F77_zswap( &F77_N, X, &F77_incX, Y, &F77_incY); +} diff --git a/CBLAS/src/cblas_zsymm.c b/CBLAS/src/cblas_zsymm.c new file mode 100644 index 000000000..91aa67d3b --- /dev/null +++ b/CBLAS/src/cblas_zsymm.c @@ -0,0 +1,106 @@ +/* + * + * cblas_zsymm.c + * This program is a C interface to zsymm. + * Written by Keita Teranishi + * 4/8/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_zsymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const int M, const int N, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const void *beta, + void *C, const int ldc) +{ + char SD, UL; +#ifdef F77_CHAR + F77_CHAR F77_SD, F77_UL; +#else + #define F77_SD &SD + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_ldb=ldb; + F77_INT F77_ldc=ldc; +#else + #define F77_M M + #define F77_N N + #define F77_lda lda + #define F77_ldb ldb + #define F77_ldc ldc +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + + if( Order == CblasColMajor ) + { + if( Side == CblasRight) SD='R'; + else if ( Side == CblasLeft ) SD='L'; + else + { + cblas_xerbla(2, "cblas_zsymm", "Illegal Side setting, %d\n", Side); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Uplo == CblasUpper) UL='U'; + else if ( Uplo == CblasLower ) UL='L'; + else + { + cblas_xerbla(3, "cblas_zsymm", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_SD = C2F_CHAR(&SD); + #endif + + F77_zsymm(F77_SD, F77_UL, &F77_M, &F77_N, alpha, A, &F77_lda, + B, &F77_ldb, beta, C, &F77_ldc); + } else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + if( Side == CblasRight) SD='L'; + else if ( Side == CblasLeft ) SD='R'; + else + { + cblas_xerbla(2, "cblas_zsymm", "Illegal Side setting, %d\n", Side); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Uplo == CblasUpper) UL='L'; + else if ( Uplo == CblasLower ) UL='U'; + else + { + cblas_xerbla(3, "cblas_zsymm", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_SD = C2F_CHAR(&SD); + #endif + + F77_zsymm(F77_SD, F77_UL, &F77_N, &F77_M, alpha, A, &F77_lda, + B, &F77_ldb, beta, C, &F77_ldc); + } + else cblas_xerbla(1, "cblas_zsymm", "Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_zsyr2k.c b/CBLAS/src/cblas_zsyr2k.c new file mode 100644 index 000000000..def7239ba --- /dev/null +++ b/CBLAS/src/cblas_zsyr2k.c @@ -0,0 +1,108 @@ +/* + * + * cblas_zsyr2k.c + * This program is a C interface to zsyr2k. + * Written by Keita Teranishi + * 4/8/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_zsyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const void *beta, + void *C, const int ldc) +{ + char UL, TR; +#ifdef F77_CHAR + F77_CHAR F77_TR, F77_UL; +#else + #define F77_TR &TR + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_N=N, F77_K=K, F77_lda=lda, F77_ldb=ldb; + F77_INT F77_ldc=ldc; +#else + #define F77_N N + #define F77_K K + #define F77_lda lda + #define F77_ldb ldb + #define F77_ldc ldc +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + + if( Order == CblasColMajor ) + { + + if( Uplo == CblasUpper) UL='U'; + else if ( Uplo == CblasLower ) UL='L'; + else + { + cblas_xerbla(2, "cblas_zsyr2k", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Trans == CblasTrans) TR ='T'; + else if ( Trans == CblasConjTrans ) TR='C'; + else if ( Trans == CblasNoTrans ) TR='N'; + else + { + cblas_xerbla(3, "cblas_zsyr2k", "Illegal Trans setting, %d\n", Trans); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TR = C2F_CHAR(&TR); + #endif + + F77_zsyr2k(F77_UL, F77_TR, &F77_N, &F77_K, alpha, A, &F77_lda, + B, &F77_ldb, beta, C, &F77_ldc); + } else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + if( Uplo == CblasUpper) UL='L'; + else if ( Uplo == CblasLower ) UL='U'; + else + { + cblas_xerbla(3, "cblas_zsyr2k", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if( Trans == CblasTrans) TR ='N'; + else if ( Trans == CblasConjTrans ) TR='N'; + else if ( Trans == CblasNoTrans ) TR='T'; + else + { + cblas_xerbla(3, "cblas_zsyr2k", "Illegal Trans setting, %d\n", Trans); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TR = C2F_CHAR(&TR); + #endif + + F77_zsyr2k(F77_UL, F77_TR, &F77_N, &F77_K, alpha, A, &F77_lda, B, &F77_ldb, beta, C, &F77_ldc); + } + else cblas_xerbla(1, "cblas_zsyr2k", "Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_zsyrk.c b/CBLAS/src/cblas_zsyrk.c new file mode 100644 index 000000000..7968f9041 --- /dev/null +++ b/CBLAS/src/cblas_zsyrk.c @@ -0,0 +1,107 @@ +/* + * + * cblas_zsyrk.c + * This program is a C interface to zsyrk. + * Written by Keita Teranishi + * 4/8/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_zsyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const void *alpha, const void *A, const int lda, + const void *beta, void *C, const int ldc) +{ + char UL, TR; +#ifdef F77_CHAR + F77_CHAR F77_TR, F77_UL; +#else + #define F77_TR &TR + #define F77_UL &UL +#endif + +#ifdef F77_INT + F77_INT F77_N=N, F77_K=K, F77_lda=lda; + F77_INT F77_ldc=ldc; +#else + #define F77_N N + #define F77_K K + #define F77_lda lda + #define F77_ldc ldc +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + + if( Order == CblasColMajor ) + { + + if( Uplo == CblasUpper) UL='U'; + else if ( Uplo == CblasLower ) UL='L'; + else + { + cblas_xerbla(2, "cblas_zsyrk", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Trans == CblasTrans) TR ='T'; + else if ( Trans == CblasConjTrans ) TR='C'; + else if ( Trans == CblasNoTrans ) TR='N'; + else + { + cblas_xerbla(3, "cblas_zsyrk", "Illegal Trans setting, %d\n", Trans); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TR = C2F_CHAR(&TR); + #endif + + F77_zsyrk(F77_UL, F77_TR, &F77_N, &F77_K, alpha, A, &F77_lda, + beta, C, &F77_ldc); + } else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + if( Uplo == CblasUpper) UL='L'; + else if ( Uplo == CblasLower ) UL='U'; + else + { + cblas_xerbla(3, "cblas_zsyrk", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if( Trans == CblasTrans) TR ='N'; + else if ( Trans == CblasConjTrans ) TR='N'; + else if ( Trans == CblasNoTrans ) TR='T'; + else + { + cblas_xerbla(3, "cblas_zsyrk", "Illegal Trans setting, %d\n", Trans); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TR = C2F_CHAR(&TR); + #endif + + F77_zsyrk(F77_UL, F77_TR, &F77_N, &F77_K, alpha, A, &F77_lda, + beta, C, &F77_ldc); + } + else cblas_xerbla(1, "cblas_zsyrk", "Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_ztbmv.c b/CBLAS/src/cblas_ztbmv.c new file mode 100644 index 000000000..b3dde4381 --- /dev/null +++ b/CBLAS/src/cblas_ztbmv.c @@ -0,0 +1,158 @@ +/* + * cblas_ztbmv.c + * The program is a C interface to ztbmv. + * + * Keita Teranishi 5/20/98 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_ztbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const void *A, const int lda, + void *X, const int incX) +{ + char TA; + char UL; + char DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_DI &DI +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_lda=lda, F77_K=K, F77_incX=incX; +#else + #define F77_N N + #define F77_K K + #define F77_lda lda + #define F77_incX incX +#endif + int n, i=0, tincX; + double *st=0, *x=(double *)X; + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_ztbmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(3, "cblas_ztbmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_ztbmv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_ztbmv( F77_UL, F77_TA, F77_DI, &F77_N, &F77_K, A, &F77_lda, X, + &F77_incX); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_ztbmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) + { + TA = 'N'; + if ( N > 0) + { + if(incX > 0) + tincX = incX; + else + tincX = -incX; + i = tincX << 1; + n = i * N; + x++; + st = x + n; + do + { + *x = -(*x); + x+= i; + } + while (x != st); + x -= n; + } + } + else + { + cblas_xerbla(3, "cblas_ztbmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_ztbmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + + F77_ztbmv( F77_UL, F77_TA, F77_DI, &F77_N, &F77_K, A, &F77_lda, X, + &F77_incX); + + if (TransA == CblasConjTrans) + { + if (N > 0) + { + do + { + *x = -(*x); + x += i; + } + while (x != st); + } + } + } + else cblas_xerbla(1, "cblas_ztbmv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_ztbsv.c b/CBLAS/src/cblas_ztbsv.c new file mode 100644 index 000000000..e3532b35a --- /dev/null +++ b/CBLAS/src/cblas_ztbsv.c @@ -0,0 +1,162 @@ +/* + * cblas_ztbsv.c + * The program is a C interface to ztbsv. + * + * Keita Teranishi 3/23/98 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_ztbsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const void *A, const int lda, + void *X, const int incX) +{ + char TA; + char UL; + char DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_DI &DI +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_lda=lda, F77_K=K, F77_incX=incX; +#else + #define F77_N N + #define F77_K K + #define F77_lda lda + #define F77_incX incX +#endif + int n, i=0, tincX; + double *st=0,*x=(double *)X; + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_ztbsv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(3, "cblas_ztbsv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_ztbsv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_ztbsv( F77_UL, F77_TA, F77_DI, &F77_N, &F77_K, A, &F77_lda, X, + &F77_incX); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_ztbsv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) + { + TA = 'N'; + if ( N > 0) + { + if ( incX > 0 ) + tincX = incX; + else + tincX = -incX; + + n = N*2*(tincX); + + x++; + + st=x+n; + + i = tincX << 1; + do + { + *x = -(*x); + x+=i; + } + while (x != st); + x -= n; + } + } + else + { + cblas_xerbla(3, "cblas_ztbsv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_ztbsv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + + F77_ztbsv( F77_UL, F77_TA, F77_DI, &F77_N, &F77_K, A, &F77_lda, X, + &F77_incX); + + if (TransA == CblasConjTrans) + { + if (N > 0) + { + do + { + *x = -(*x); + x+= i; + } + while (x != st); + } + } + } + else cblas_xerbla(1, "cblas_ztbsv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_ztpmv.c b/CBLAS/src/cblas_ztpmv.c new file mode 100644 index 000000000..f29b7bb32 --- /dev/null +++ b/CBLAS/src/cblas_ztpmv.c @@ -0,0 +1,152 @@ +/* + * cblas_ztpmv.c + * The program is a C interface to ztpmv. + * + * Keita Teranishi 5/20/98 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_ztpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *Ap, void *X, const int incX) +{ + char TA; + char UL; + char DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_DI &DI +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incX +#endif + int n, i=0, tincX; + double *st=0,*x=(double *)X; + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_ztpmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(3, "cblas_ztpmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_ztpmv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_ztpmv( F77_UL, F77_TA, F77_DI, &F77_N, Ap, X, &F77_incX); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_ztpmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) + { + TA = 'N'; + if ( N > 0) + { + if(incX > 0) + tincX = incX; + else + tincX = -incX; + i = tincX << 1; + n = i * N; + x++; + st = x + n; + do + { + *x = -(*x); + x += i; + } + while (x != st); + x -= n; + } + } + else + { + cblas_xerbla(3, "cblas_ztpmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_ztpmv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + + F77_ztpmv( F77_UL, F77_TA, F77_DI, &F77_N, Ap, X,&F77_incX); + if (TransA == CblasConjTrans) + { + if (N > 0) + { + do + { + *x = -(*x); + x += i; + } + while (x != st); + } + } + } + else cblas_xerbla(1, "cblas_ztpmv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_ztpsv.c b/CBLAS/src/cblas_ztpsv.c new file mode 100644 index 000000000..4c72808b0 --- /dev/null +++ b/CBLAS/src/cblas_ztpsv.c @@ -0,0 +1,157 @@ +/* + * cblas_ztpsv.c + * The program is a C interface to ztpsv. + * + * Keita Teranishi 3/23/98 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_ztpsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *Ap, void *X, const int incX) +{ + char TA; + char UL; + char DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_DI &DI +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_incX=incX; +#else + #define F77_N N + #define F77_incX incX +#endif + int n, i=0, tincX; + double *st=0, *x=(double*)X; + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_ztpsv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(3, "cblas_ztpsv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_ztpsv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_ztpsv( F77_UL, F77_TA, F77_DI, &F77_N, Ap, X, &F77_incX); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_ztpsv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) + { + TA = 'N'; + if ( N > 0) + { + if ( incX > 0 ) + tincX = incX; + else + tincX = -incX; + + n = N*2*(tincX); + + x++; + + st=x+n; + + i = tincX << 1; + do + { + *x = -(*x); + x+=i; + } + while (x != st); + x -= n; + } + } + else + { + cblas_xerbla(3, "cblas_ztpsv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_ztpsv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + + F77_ztpsv( F77_UL, F77_TA, F77_DI, &F77_N, Ap, X,&F77_incX); + + if (TransA == CblasConjTrans) + { + if (N > 0) + { + do + { + *x = -(*x); + x += i; + } + while (x != st); + } + } + } + else cblas_xerbla(1, "cblas_ztpsv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_ztrmm.c b/CBLAS/src/cblas_ztrmm.c new file mode 100644 index 000000000..caeaefa1e --- /dev/null +++ b/CBLAS/src/cblas_ztrmm.c @@ -0,0 +1,149 @@ +/* + * + * cblas_ztrmm.c + * This program is a C interface to ztrmm. + * Written by Keita Teranishi + * 4/8/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_ztrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const void *alpha, const void *A, const int lda, + void *B, const int ldb) +{ + char UL, TA, SD, DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_SD, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_SD &SD + #define F77_DI &DI +#endif + +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_ldb=ldb; +#else + #define F77_M M + #define F77_N N + #define F77_lda lda + #define F77_ldb ldb +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + + if( Order == CblasColMajor ) + { + if( Side == CblasRight ) SD='R'; + else if ( Side == CblasLeft ) SD='L'; + else + { + cblas_xerbla(2, "cblas_ztrmm", "Illegal Side setting, %d\n", Side); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if( Uplo == CblasUpper ) UL='U'; + else if ( Uplo == CblasLower ) UL='L'; + else + { + cblas_xerbla(3, "cblas_ztrmm", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( TransA == CblasTrans ) TA ='T'; + else if ( TransA == CblasConjTrans ) TA='C'; + else if ( TransA == CblasNoTrans ) TA='N'; + else + { + cblas_xerbla(4, "cblas_ztrmm", "Illegal Trans setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Diag == CblasUnit ) DI='U'; + else if ( Diag == CblasNonUnit ) DI='N'; + else + { + cblas_xerbla(5, "cblas_ztrmm", "Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_SD = C2F_CHAR(&SD); + F77_DI = C2F_CHAR(&DI); + #endif + + F77_ztrmm(F77_SD, F77_UL, F77_TA, F77_DI, &F77_M, &F77_N, alpha, A, &F77_lda, B, &F77_ldb); + } else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + if( Side == CblasRight ) SD='L'; + else if ( Side == CblasLeft ) SD='R'; + else + { + cblas_xerbla(2, "cblas_ztrmm", "Illegal Side setting, %d\n", Side); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Uplo == CblasUpper ) UL='L'; + else if ( Uplo == CblasLower ) UL='U'; + else + { + cblas_xerbla(3, "cblas_ztrmm", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( TransA == CblasTrans ) TA ='T'; + else if ( TransA == CblasConjTrans ) TA='C'; + else if ( TransA == CblasNoTrans ) TA='N'; + else + { + cblas_xerbla(4, "cblas_ztrmm", "Illegal Trans setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Diag == CblasUnit ) DI='U'; + else if ( Diag == CblasNonUnit ) DI='N'; + else + { + cblas_xerbla(5, "cblas_ztrmm", "Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_SD = C2F_CHAR(&SD); + F77_DI = C2F_CHAR(&DI); + #endif + + F77_ztrmm(F77_SD, F77_UL, F77_TA, F77_DI, &F77_N, &F77_M, alpha, A, &F77_lda, B, &F77_ldb); + } + else cblas_xerbla(1, "cblas_ztrmm", "Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_ztrmv.c b/CBLAS/src/cblas_ztrmv.c new file mode 100644 index 000000000..c9345afaa --- /dev/null +++ b/CBLAS/src/cblas_ztrmv.c @@ -0,0 +1,156 @@ +/* + * cblas_ztrmv.c + * The program is a C interface to ztrmv. + * + * Keita Teranishi 5/20/98 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_ztrmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *A, const int lda, + void *X, const int incX) + +{ + char TA; + char UL; + char DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_DI &DI +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_lda=lda, F77_incX=incX; +#else + #define F77_N N + #define F77_lda lda + #define F77_incX incX +#endif + int n, i=0, tincX; + double *st=0,*x=(double *)X; + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_ztrmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(3, "cblas_ztrmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_ztrmv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_ztrmv( F77_UL, F77_TA, F77_DI, &F77_N, A, &F77_lda, X, + &F77_incX); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_ztrmv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) + { + TA = 'N'; + if ( N > 0) + { + if(incX > 0) + tincX = incX; + else + tincX = -incX; + i = tincX << 1; + n = i * N; + x++; + st = x + n; + do + { + *x = -(*x); + x += i; + } + while (x != st); + x -= n; + } + } + else + { + cblas_xerbla(3, "cblas_ztrmv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_ztrmv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_ztrmv( F77_UL, F77_TA, F77_DI, &F77_N, A, &F77_lda, X, + &F77_incX); + if (TransA == CblasConjTrans) + { + if (N > 0) + { + do + { + *x = -(*x); + x += i; + } + while (x != st); + } + } + } + else cblas_xerbla(1, "cblas_ztrmv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_ztrsm.c b/CBLAS/src/cblas_ztrsm.c new file mode 100644 index 000000000..08375d815 --- /dev/null +++ b/CBLAS/src/cblas_ztrsm.c @@ -0,0 +1,155 @@ +/* + * + * cblas_ztrsm.c + * This program is a C interface to ztrsm. + * Written by Keita Teranishi + * 4/8/1998 + * + */ + +#include "cblas.h" +#include "cblas_f77.h" +void cblas_ztrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const void *alpha, const void *A, const int lda, + void *B, const int ldb) +{ + char UL, TA, SD, DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_SD, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_SD &SD + #define F77_DI &DI +#endif + +#ifdef F77_INT + F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_ldb=ldb; +#else + #define F77_M M + #define F77_N N + #define F77_lda lda + #define F77_ldb ldb +#endif + + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + CBLAS_CallFromC = 1; + + if( Order == CblasColMajor ) + { + + if( Side == CblasRight) SD='R'; + else if ( Side == CblasLeft ) SD='L'; + else + { + cblas_xerbla(2, "cblas_ztrsm", "Illegal Side setting, %d\n", Side); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Uplo == CblasUpper) UL='U'; + else if ( Uplo == CblasLower ) UL='L'; + else + { + cblas_xerbla(3, "cblas_ztrsm", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( TransA == CblasTrans) TA ='T'; + else if ( TransA == CblasConjTrans ) TA='C'; + else if ( TransA == CblasNoTrans ) TA='N'; + else + { + cblas_xerbla(4, "cblas_ztrsm", "Illegal Trans setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Diag == CblasUnit ) DI='U'; + else if ( Diag == CblasNonUnit ) DI='N'; + else + { + cblas_xerbla(5, "cblas_ztrsm", "Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_SD = C2F_CHAR(&SD); + F77_DI = C2F_CHAR(&DI); + #endif + + F77_ztrsm(F77_SD, F77_UL, F77_TA, F77_DI, &F77_M, &F77_N, alpha, A, + &F77_lda, B, &F77_ldb); + } else if (Order == CblasRowMajor) + { + RowMajorStrg = 1; + + if( Side == CblasRight) SD='L'; + else if ( Side == CblasLeft ) SD='R'; + else + { + cblas_xerbla(2, "cblas_ztrsm", "Illegal Side setting, %d\n", Side); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Uplo == CblasUpper) UL='L'; + else if ( Uplo == CblasLower ) UL='U'; + else + { + cblas_xerbla(3, "cblas_ztrsm", "Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( TransA == CblasTrans) TA ='T'; + else if ( TransA == CblasConjTrans ) TA='C'; + else if ( TransA == CblasNoTrans ) TA='N'; + else + { + cblas_xerbla(4, "cblas_ztrsm", "Illegal Trans setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if( Diag == CblasUnit ) DI='U'; + else if ( Diag == CblasNonUnit ) DI='N'; + else + { + cblas_xerbla(5, "cblas_ztrsm", "Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_SD = C2F_CHAR(&SD); + F77_DI = C2F_CHAR(&DI); + #endif + + + F77_ztrsm(F77_SD, F77_UL, F77_TA, F77_DI, &F77_N, &F77_M, alpha, A, + &F77_lda, B, &F77_ldb); + } + else cblas_xerbla(1, "cblas_ztrsm", "Illegal Order setting, %d\n", Order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cblas_ztrsv.c b/CBLAS/src/cblas_ztrsv.c new file mode 100644 index 000000000..621399ba0 --- /dev/null +++ b/CBLAS/src/cblas_ztrsv.c @@ -0,0 +1,156 @@ +/* + * cblas_ztrsv.c + * The program is a C interface to ztrsv. + * + * Keita Teranishi 3/23/98 + * + */ +#include "cblas.h" +#include "cblas_f77.h" +void cblas_ztrsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *A, const int lda, void *X, + const int incX) +{ + char TA; + char UL; + char DI; +#ifdef F77_CHAR + F77_CHAR F77_TA, F77_UL, F77_DI; +#else + #define F77_TA &TA + #define F77_UL &UL + #define F77_DI &DI +#endif +#ifdef F77_INT + F77_INT F77_N=N, F77_lda=lda, F77_incX=incX; +#else + #define F77_N N + #define F77_lda lda + #define F77_incX incX +#endif + int n, i=0, tincX; + double *st=0,*x=(double *)X; + extern int CBLAS_CallFromC; + extern int RowMajorStrg; + RowMajorStrg = 0; + + CBLAS_CallFromC = 1; + if (order == CblasColMajor) + { + if (Uplo == CblasUpper) UL = 'U'; + else if (Uplo == CblasLower) UL = 'L'; + else + { + cblas_xerbla(2, "cblas_ztrsv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (TransA == CblasNoTrans) TA = 'N'; + else if (TransA == CblasTrans) TA = 'T'; + else if (TransA == CblasConjTrans) TA = 'C'; + else + { + cblas_xerbla(3, "cblas_ztrsv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_ztrsv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_ztrsv( F77_UL, F77_TA, F77_DI, &F77_N, A, &F77_lda, X, + &F77_incX); + } + else if (order == CblasRowMajor) + { + RowMajorStrg = 1; + if (Uplo == CblasUpper) UL = 'L'; + else if (Uplo == CblasLower) UL = 'U'; + else + { + cblas_xerbla(2, "cblas_ztrsv","Illegal Uplo setting, %d\n", Uplo); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (TransA == CblasNoTrans) TA = 'T'; + else if (TransA == CblasTrans) TA = 'N'; + else if (TransA == CblasConjTrans) + { + TA = 'N'; + if ( N > 0) + { + if ( incX > 0 ) + tincX = incX; + else + tincX = -incX; + + n = N*2*(tincX); + x++; + st=x+n; + i = tincX << 1; + do + { + *x = -(*x); + x+=i; + } + while (x != st); + x -= n; + } + } + else + { + cblas_xerbla(3, "cblas_ztrsv","Illegal TransA setting, %d\n", TransA); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + + if (Diag == CblasUnit) DI = 'U'; + else if (Diag == CblasNonUnit) DI = 'N'; + else + { + cblas_xerbla(4, "cblas_ztrsv","Illegal Diag setting, %d\n", Diag); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; + } + #ifdef F77_CHAR + F77_UL = C2F_CHAR(&UL); + F77_TA = C2F_CHAR(&TA); + F77_DI = C2F_CHAR(&DI); + #endif + F77_ztrsv( F77_UL, F77_TA, F77_DI, &F77_N, A, &F77_lda, X, + &F77_incX); + if (TransA == CblasConjTrans) + { + if (N > 0) + { + do + { + *x = -(*x); + x += i; + } + while (x != st); + } + } + } + else cblas_xerbla(1, "cblas_ztrsv", "Illegal Order setting, %d\n", order); + CBLAS_CallFromC = 0; + RowMajorStrg = 0; + return; +} diff --git a/CBLAS/src/cdotcsub.f b/CBLAS/src/cdotcsub.f new file mode 100644 index 000000000..f97d7159e --- /dev/null +++ b/CBLAS/src/cdotcsub.f @@ -0,0 +1,15 @@ +c cdotcsub.f +c +c The program is a fortran wrapper for cdotc. +c Witten by Keita Teranishi. 2/11/1998 +c + subroutine cdotcsub(n,x,incx,y,incy,dotc) +c + external cdotc + complex cdotc,dotc + integer n,incx,incy + complex x(*),y(*) +c + dotc=cdotc(n,x,incx,y,incy) + return + end diff --git a/CBLAS/src/cdotusub.f b/CBLAS/src/cdotusub.f new file mode 100644 index 000000000..5107c0402 --- /dev/null +++ b/CBLAS/src/cdotusub.f @@ -0,0 +1,15 @@ +c cdotusub.f +c +c The program is a fortran wrapper for cdotu. +c Witten by Keita Teranishi. 2/11/1998 +c + subroutine cdotusub(n,x,incx,y,incy,dotu) +c + external cdotu + complex cdotu,dotu + integer n,incx,incy + complex x(*),y(*) +c + dotu=cdotu(n,x,incx,y,incy) + return + end diff --git a/CBLAS/src/dasumsub.f b/CBLAS/src/dasumsub.f new file mode 100644 index 000000000..3d64d17e6 --- /dev/null +++ b/CBLAS/src/dasumsub.f @@ -0,0 +1,15 @@ +c dasumsun.f +c +c The program is a fortran wrapper for dasum.. +c Witten by Keita Teranishi. 2/11/1998 +c + subroutine dasumsub(n,x,incx,asum) +c + external dasum + double precision dasum,asum + integer n,incx + double precision x(*) +c + asum=dasum(n,x,incx) + return + end diff --git a/CBLAS/src/ddotsub.f b/CBLAS/src/ddotsub.f new file mode 100644 index 000000000..205f3b46f --- /dev/null +++ b/CBLAS/src/ddotsub.f @@ -0,0 +1,15 @@ +c ddotsub.f +c +c The program is a fortran wrapper for ddot. +c Witten by Keita Teranishi. 2/11/1998 +c + subroutine ddotsub(n,x,incx,y,incy,dot) +c + external ddot + double precision ddot + integer n,incx,incy + double precision x(*),y(*),dot +c + dot=ddot(n,x,incx,y,incy) + return + end diff --git a/CBLAS/src/dnrm2sub.f b/CBLAS/src/dnrm2sub.f new file mode 100644 index 000000000..88f17db8b --- /dev/null +++ b/CBLAS/src/dnrm2sub.f @@ -0,0 +1,15 @@ +c dnrm2sub.f +c +c The program is a fortran wrapper for dnrm2. +c Witten by Keita Teranishi. 2/11/1998 +c + subroutine dnrm2sub(n,x,incx,nrm2) +c + external dnrm2 + double precision dnrm2,nrm2 + integer n,incx + double precision x(*) +c + nrm2=dnrm2(n,x,incx) + return + end diff --git a/CBLAS/src/dsdotsub.f b/CBLAS/src/dsdotsub.f new file mode 100644 index 000000000..e7e872c9e --- /dev/null +++ b/CBLAS/src/dsdotsub.f @@ -0,0 +1,15 @@ +c dsdotsub.f +c +c The program is a fortran wrapper for dsdot. +c Witten by Keita Teranishi. 2/11/1998 +c + subroutine dsdotsub(n,x,incx,y,incy,dot) +c + external dsdot + double precision dsdot,dot + integer n,incx,incy + real x(*),y(*) +c + dot=dsdot(n,x,incx,y,incy) + return + end diff --git a/CBLAS/src/dzasumsub.f b/CBLAS/src/dzasumsub.f new file mode 100644 index 000000000..9aaf16387 --- /dev/null +++ b/CBLAS/src/dzasumsub.f @@ -0,0 +1,15 @@ +c dzasumsub.f +c +c The program is a fortran wrapper for dzasum. +c Witten by Keita Teranishi. 2/11/1998 +c + subroutine dzasumsub(n,x,incx,asum) +c + external dzasum + double precision dzasum,asum + integer n,incx + double complex x(*) +c + asum=dzasum(n,x,incx) + return + end diff --git a/CBLAS/src/dznrm2sub.f b/CBLAS/src/dznrm2sub.f new file mode 100644 index 000000000..45dc599f8 --- /dev/null +++ b/CBLAS/src/dznrm2sub.f @@ -0,0 +1,15 @@ +c dznrm2sub.f +c +c The program is a fortran wrapper for dznrm2. +c Witten by Keita Teranishi. 2/11/1998 +c + subroutine dznrm2sub(n,x,incx,nrm2) +c + external dznrm2 + double precision dznrm2,nrm2 + integer n,incx + double complex x(*) +c + nrm2=dznrm2(n,x,incx) + return + end diff --git a/CBLAS/src/icamaxsub.f b/CBLAS/src/icamaxsub.f new file mode 100644 index 000000000..3f47071eb --- /dev/null +++ b/CBLAS/src/icamaxsub.f @@ -0,0 +1,15 @@ +c icamaxsub.f +c +c The program is a fortran wrapper for icamax. +c Witten by Keita Teranishi. 2/11/1998 +c + subroutine icamaxsub(n,x,incx,iamax) +c + external icamax + integer icamax,iamax + integer n,incx + complex x(*) +c + iamax=icamax(n,x,incx) + return + end diff --git a/CBLAS/src/idamaxsub.f b/CBLAS/src/idamaxsub.f new file mode 100644 index 000000000..3c1ee5c32 --- /dev/null +++ b/CBLAS/src/idamaxsub.f @@ -0,0 +1,15 @@ +c icamaxsub.f +c +c The program is a fortran wrapper for idamax. +c Witten by Keita Teranishi. 2/22/1998 +c + subroutine idamaxsub(n,x,incx,iamax) +c + external idamax + integer idamax,iamax + integer n,incx + double precision x(*) +c + iamax=idamax(n,x,incx) + return + end diff --git a/CBLAS/src/isamaxsub.f b/CBLAS/src/isamaxsub.f new file mode 100644 index 000000000..0faf42fde --- /dev/null +++ b/CBLAS/src/isamaxsub.f @@ -0,0 +1,15 @@ +c isamaxsub.f +c +c The program is a fortran wrapper for isamax. +c Witten by Keita Teranishi. 2/11/1998 +c + subroutine isamaxsub(n,x,incx,iamax) +c + external isamax + integer isamax,iamax + integer n,incx + real x(*) +c + iamax=isamax(n,x,incx) + return + end diff --git a/CBLAS/src/izamaxsub.f b/CBLAS/src/izamaxsub.f new file mode 100644 index 000000000..5b15855a7 --- /dev/null +++ b/CBLAS/src/izamaxsub.f @@ -0,0 +1,15 @@ +c izamaxsub.f +c +c The program is a fortran wrapper for izamax. +c Witten by Keita Teranishi. 2/11/1998 +c + subroutine izamaxsub(n,x,incx,iamax) +c + external izamax + integer izamax,iamax + integer n,incx + double complex x(*) +c + iamax=izamax(n,x,incx) + return + end diff --git a/CBLAS/src/sasumsub.f b/CBLAS/src/sasumsub.f new file mode 100644 index 000000000..955f11e8d --- /dev/null +++ b/CBLAS/src/sasumsub.f @@ -0,0 +1,15 @@ +c sasumsub.f +c +c The program is a fortran wrapper for sasum. +c Witten by Keita Teranishi. 2/11/1998 +c + subroutine sasumsub(n,x,incx,asum) +c + external sasum + real sasum,asum + integer n,incx + real x(*) +c + asum=sasum(n,x,incx) + return + end diff --git a/CBLAS/src/scasumsub.f b/CBLAS/src/scasumsub.f new file mode 100644 index 000000000..077ace670 --- /dev/null +++ b/CBLAS/src/scasumsub.f @@ -0,0 +1,15 @@ +c scasumsub.f +c +c The program is a fortran wrapper for scasum. +c Witten by Keita Teranishi. 2/11/1998 +c + subroutine scasumsub(n,x,incx,asum) +c + external scasum + real scasum,asum + integer n,incx + complex x(*) +c + asum=scasum(n,x,incx) + return + end diff --git a/CBLAS/src/scnrm2sub.f b/CBLAS/src/scnrm2sub.f new file mode 100644 index 000000000..7242c9742 --- /dev/null +++ b/CBLAS/src/scnrm2sub.f @@ -0,0 +1,15 @@ +c scnrm2sub.f +c +c The program is a fortran wrapper for scnrm2. +c Witten by Keita Teranishi. 2/11/1998 +c + subroutine scnrm2sub(n,x,incx,nrm2) +c + external scnrm2 + real scnrm2,nrm2 + integer n,incx + complex x(*) +c + nrm2=scnrm2(n,x,incx) + return + end diff --git a/CBLAS/src/sdotsub.f b/CBLAS/src/sdotsub.f new file mode 100644 index 000000000..e1af3c97b --- /dev/null +++ b/CBLAS/src/sdotsub.f @@ -0,0 +1,15 @@ +c sdotsub.f +c +c The program is a fortran wrapper for sdot. +c Witten by Keita Teranishi. 2/11/1998 +c + subroutine sdotsub(n,x,incx,y,incy,dot) +c + external sdot + real sdot + integer n,incx,incy + real x(*),y(*),dot +c + dot=sdot(n,x,incx,y,incy) + return + end diff --git a/CBLAS/src/sdsdotsub.f b/CBLAS/src/sdsdotsub.f new file mode 100644 index 000000000..80008e9ce --- /dev/null +++ b/CBLAS/src/sdsdotsub.f @@ -0,0 +1,15 @@ +c sdsdotsub.f +c +c The program is a fortran wrapper for sdsdot. +c Witten by Keita Teranishi. 2/11/1998 +c + subroutine sdsdotsub(n,x,incx,y,incy,dot) +c + external sdsdot + real sdsdot,dot + integer n,incx,incy + real x(*),y(*) +c + dot=sdsdot(n,x,incx,y,incy) + return + end diff --git a/CBLAS/src/snrm2sub.f b/CBLAS/src/snrm2sub.f new file mode 100644 index 000000000..871a6e49f --- /dev/null +++ b/CBLAS/src/snrm2sub.f @@ -0,0 +1,15 @@ +c snrm2sub.f +c +c The program is a fortran wrapper for snrm2. +c Witten by Keita Teranishi. 2/11/1998 +c + subroutine snrm2sub(n,x,incx,nrm2) +c + external snrm2 + real snrm2,nrm2 + integer n,incx + real x(*) +c + nrm2=snrm2(n,x,incx) + return + end diff --git a/CBLAS/src/xerbla.c b/CBLAS/src/xerbla.c new file mode 100644 index 000000000..5a7bcd8bc --- /dev/null +++ b/CBLAS/src/xerbla.c @@ -0,0 +1,47 @@ +#include +#include +#include "cblas.h" +#include "cblas_f77.h" + +#define XerblaStrLen 6 +#define XerblaStrLen1 7 + +#ifdef F77_CHAR +void F77_xerbla(F77_CHAR F77_srname, void *vinfo) +#else +void F77_xerbla(char *srname, void *vinfo) +#endif + +{ +#ifdef F77_CHAR + char *srname; +#endif + + char rout[] = {'c','b','l','a','s','_','\0','\0','\0','\0','\0','\0','\0'}; + +#ifdef F77_INT + F77_INT *info=vinfo; + F77_INT i; +#else + int *info=vinfo; + int i; +#endif + + extern int CBLAS_CallFromC; + +#ifdef F77_CHAR + srname = F2C_STR(F77_srname, XerblaStrLen); +#endif + + if (CBLAS_CallFromC) + { + for(i=0; i != XerblaStrLen; i++) rout[i+6] = tolower(srname[i]); + rout[XerblaStrLen+6] = '\0'; + cblas_xerbla(*info+1,rout,""); + } + else + { + fprintf(stderr, "Parameter %d to routine %s was incorrect\n", + *info, srname); + } +} diff --git a/CBLAS/src/zdotcsub.f b/CBLAS/src/zdotcsub.f new file mode 100644 index 000000000..8d483c895 --- /dev/null +++ b/CBLAS/src/zdotcsub.f @@ -0,0 +1,15 @@ +c zdotcsub.f +c +c The program is a fortran wrapper for zdotc. +c Witten by Keita Teranishi. 2/11/1998 +c + subroutine zdotcsub(n,x,incx,y,incy,dotc) +c + external zdotc + double complex zdotc,dotc + integer n,incx,incy + double complex x(*),y(*) +c + dotc=zdotc(n,x,incx,y,incy) + return + end diff --git a/CBLAS/src/zdotusub.f b/CBLAS/src/zdotusub.f new file mode 100644 index 000000000..23f32dec3 --- /dev/null +++ b/CBLAS/src/zdotusub.f @@ -0,0 +1,15 @@ +c zdotusub.f +c +c The program is a fortran wrapper for zdotu. +c Witten by Keita Teranishi. 2/11/1998 +c + subroutine zdotusub(n,x,incx,y,incy,dotu) +c + external zdotu + double complex zdotu,dotu + integer n,incx,incy + double complex x(*),y(*) +c + dotu=zdotu(n,x,incx,y,incy) + return + end diff --git a/CBLAS/testing/Makefile b/CBLAS/testing/Makefile new file mode 100644 index 000000000..e58b002d8 --- /dev/null +++ b/CBLAS/testing/Makefile @@ -0,0 +1,134 @@ +# +# The Makefile compiles c wrappers and testers for CBLAS. +# + +dlvl = ../. +include $(dlvl)/Makefile.in + +# Archive files necessary to compile +LIB = $(CBLIB) $(BLLIB) + +# Object files for single real precision +stestl1o = c_sblas1.o + +stestl2o = c_sblas2.o c_s2chke.o auxiliary.o c_xerbla.o + +stestl3o = c_sblas3.o c_s3chke.o auxiliary.o c_xerbla.o + +# Object files for double real precision +dtestl1o = c_dblas1.o + +dtestl2o = c_dblas2.o c_d2chke.o auxiliary.o c_xerbla.o + +dtestl3o = c_dblas3.o c_d3chke.o auxiliary.o c_xerbla.o + +# Object files for single complex precision +ctestl1o = c_cblas1.o + +ctestl2o = c_cblas2.o c_c2chke.o auxiliary.o c_xerbla.o + +ctestl3o = c_cblas3.o c_c3chke.o auxiliary.o c_xerbla.o + +# Object files for double complex precision +ztestl1o = c_zblas1.o + +ztestl2o = c_zblas2.o c_z2chke.o auxiliary.o c_xerbla.o + +ztestl3o = c_zblas3.o c_z3chke.o auxiliary.o c_xerbla.o + +all: all1 all2 all3 +all1: stest1 dtest1 ctest1 ztest1 +all2: stest2 dtest2 ctest2 ztest2 +all3: stest3 dtest3 ctest3 ztest3 + +clean: + rm -f core *.o a.out x* +cleanobj: + rm -f core *.o a.out +cleanexe: + rm -f x* + +stest1: xscblat1 +dtest1: xdcblat1 +ctest1: xccblat1 +ztest1: xzcblat1 + +stest2: xscblat2 +dtest2: xdcblat2 +ctest2: xccblat2 +ztest2: xzcblat2 + +stest3: xscblat3 +dtest3: xdcblat3 +ctest3: xccblat3 +ztest3: xzcblat3 + +# +# Compile each precision +# + +# Single real +xscblat1: $(stestl1o) c_sblat1.o + $(LOADER) $(LOADFLAGS) -o xscblat1 c_sblat1.o $(stestl1o) $(LIB) +xscblat2: $(stestl2o) c_sblat2.o + $(LOADER) $(LOADFLAGS) -o xscblat2 c_sblat2.o $(stestl2o) $(LIB) +xscblat3: $(stestl3o) c_sblat3.o + $(LOADER) $(LOADFLAGS) -o xscblat3 c_sblat3.o $(stestl3o) $(LIB) +# Double real +xdcblat1: $(dtestl1o) c_dblat1.o + $(LOADER) $(LOADFLAGS) -o xdcblat1 c_dblat1.o $(dtestl1o) $(LIB) +xdcblat2: $(dtestl2o) c_dblat2.o + $(LOADER) $(LOADFLAGS) -o xdcblat2 c_dblat2.o $(dtestl2o) $(LIB) +xdcblat3: $(dtestl3o) c_dblat3.o + $(LOADER) $(LOADFLAGS) -o xdcblat3 c_dblat3.o $(dtestl3o) $(LIB) + +# Single complex +xccblat1: $(ctestl1o) c_cblat1.o + $(LOADER) $(LOADFLAGS) -o xccblat1 c_cblat1.o $(ctestl1o) $(LIB) +xccblat2: $(ctestl2o) c_cblat2.o + $(LOADER) $(LOADFLAGS) -o xccblat2 c_cblat2.o $(ctestl2o) $(LIB) +xccblat3: $(ctestl3o) c_cblat3.o + $(LOADER) $(LOADFLAGS) -o xccblat3 c_cblat3.o $(ctestl3o) $(LIB) + +# Double complex +xzcblat1: $(ztestl1o) c_zblat1.o + $(LOADER) $(LOADFLAGS) -o xzcblat1 c_zblat1.o $(ztestl1o) $(LIB) +xzcblat2: $(ztestl2o) c_zblat2.o + $(LOADER) $(LOADFLAGS) -o xzcblat2 c_zblat2.o $(ztestl2o) $(LIB) +xzcblat3: $(ztestl3o) c_zblat3.o + $(LOADER) $(LOADFLAGS) -o xzcblat3 c_zblat3.o $(ztestl3o) $(LIB) + + +# RUN TESTS +run: + @echo "--> TESTING BLAS 1 - SINGLE PRECISION <--" + @./xscblat1 > stest1.out + @echo "--> TESTING BLAS 1 - DOUBLE PRECISION <--" + @./xdcblat1 > dtest1.out + @echo "--> TESTING BLAS 1 - COMPLEX PRECISION <--" + @./xccblat1 > ctest1.out + @echo "--> TESTING BLAS 1 - DOUBLE COMPLEX PRECISION <--" + @./xzcblat1 > ztest1.out + @echo "--> TESTING BLAS 2 - SINGLE PRECISION <--" + @./xscblat2 < sin2 > stest2.out + @echo "--> TESTING BLAS 2 - DOUBLE PRECISION <--" + @./xdcblat2 < din2 > dtest2.out + @echo "--> TESTING BLAS 2 - COMPLEX PRECISION <--" + @./xccblat2 < cin2 > ctest2.out + @echo "--> TESTING BLAS 2 - DOUBLE COMPLEX PRECISION <--" + @./xzcblat2 < zin2 > ztest2.out + @echo "--> TESTING BLAS 3 - SINGLE PRECISION <--" + @./xscblat3 < sin3 > stest3.out + @echo "--> TESTING BLAS 3 - DOUBLE PRECISION <--" + @./xdcblat3 < din3 > dtest3.out + @echo "--> TESTING BLAS 3 - COMPLEX PRECISION <--" + @./xccblat3 < cin3 > ctest3.out + @echo "--> TESTING BLAS 3 - DOUBLE COMPLEX PRECISION <--" + @./xzcblat3 < zin3 > ztest3.out + +.SUFFIXES: .o .f .c + +.f.o: + $(FC) $(FFLAGS) -c $*.f +.c.o: + $(CC) -I../include $(CFLAGS) -c $*.c diff --git a/CBLAS/testing/auxiliary.c b/CBLAS/testing/auxiliary.c new file mode 100644 index 000000000..104732717 --- /dev/null +++ b/CBLAS/testing/auxiliary.c @@ -0,0 +1,38 @@ +/* + * Written by T. H. Do, 1/23/98, SGI/CRAY Research. + */ +#include +#include "cblas.h" +#include "cblas_test.h" + +void get_transpose_type(char *type, enum CBLAS_TRANSPOSE *trans) { + if( (strncmp( type,"n",1 )==0)||(strncmp( type,"N",1 )==0) ) + *trans = CblasNoTrans; + else if( (strncmp( type,"t",1 )==0)||(strncmp( type,"T",1 )==0) ) + *trans = CblasTrans; + else if( (strncmp( type,"c",1 )==0)||(strncmp( type,"C",1 )==0) ) + *trans = CblasConjTrans; + else *trans = UNDEFINED; +} + +void get_uplo_type(char *type, enum CBLAS_UPLO *uplo) { + if( (strncmp( type,"u",1 )==0)||(strncmp( type,"U",1 )==0) ) + *uplo = CblasUpper; + else if( (strncmp( type,"l",1 )==0)||(strncmp( type,"L",1 )==0) ) + *uplo = CblasLower; + else *uplo = UNDEFINED; +} +void get_diag_type(char *type, enum CBLAS_DIAG *diag) { + if( (strncmp( type,"u",1 )==0)||(strncmp( type,"U",1 )==0) ) + *diag = CblasUnit; + else if( (strncmp( type,"n",1 )==0)||(strncmp( type,"N",1 )==0) ) + *diag = CblasNonUnit; + else *diag = UNDEFINED; +} +void get_side_type(char *type, enum CBLAS_SIDE *side) { + if( (strncmp( type,"l",1 )==0)||(strncmp( type,"L",1 )==0) ) + *side = CblasLeft; + else if( (strncmp( type,"r",1 )==0)||(strncmp( type,"R",1 )==0) ) + *side = CblasRight; + else *side = UNDEFINED; +} diff --git a/CBLAS/testing/c_c2chke.c b/CBLAS/testing/c_c2chke.c new file mode 100644 index 000000000..18422831a --- /dev/null +++ b/CBLAS/testing/c_c2chke.c @@ -0,0 +1,826 @@ +#include +#include +#include "cblas.h" +#include "cblas_test.h" + +int cblas_ok, cblas_lerr, cblas_info; +int link_xerbla=TRUE; +char *cblas_rout; + +#ifdef F77_Char +void F77_xerbla(F77_Char F77_srname, void *vinfo); +#else +void F77_xerbla(char *srname, void *vinfo); +#endif + +void chkxer(void) { + extern int cblas_ok, cblas_lerr, cblas_info; + extern int link_xerbla; + extern char *cblas_rout; + if (cblas_lerr == 1 ) { + printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %d NOT DETECTED BY %s *****\n", cblas_info, cblas_rout); + cblas_ok = 0 ; + } + cblas_lerr = 1 ; +} + +void F77_c2chke(char *rout) { + char *sf = ( rout ) ; + float A[2] = {0.0,0.0}, + X[2] = {0.0,0.0}, + Y[2] = {0.0,0.0}, + ALPHA[2] = {0.0,0.0}, + BETA[2] = {0.0,0.0}, + RALPHA = 0.0; + extern int cblas_info, cblas_lerr, cblas_ok; + extern int RowMajorStrg; + extern char *cblas_rout; + + if (link_xerbla) /* call these first to link */ + { + cblas_xerbla(cblas_info,cblas_rout,""); + F77_xerbla(cblas_rout,&cblas_info); + } + + cblas_ok = TRUE ; + cblas_lerr = PASSED ; + + if (strncmp( sf,"cblas_cgemv",11)==0) { + cblas_rout = "cblas_cgemv"; + cblas_info = 1; + cblas_cgemv(INVALID, CblasNoTrans, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_cgemv(CblasColMajor, INVALID, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_cgemv(CblasColMajor, CblasNoTrans, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_cgemv(CblasColMajor, CblasNoTrans, 0, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_cgemv(CblasColMajor, CblasNoTrans, 2, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_cgemv(CblasColMajor, CblasNoTrans, 0, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_cgemv(CblasColMajor, CblasNoTrans, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + + cblas_info = 2; RowMajorStrg = TRUE; RowMajorStrg = TRUE; + cblas_cgemv(CblasRowMajor, INVALID, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_cgemv(CblasRowMajor, CblasNoTrans, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_cgemv(CblasRowMajor, CblasNoTrans, 0, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_cgemv(CblasRowMajor, CblasNoTrans, 0, 2, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_cgemv(CblasRowMajor, CblasNoTrans, 0, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_cgemv(CblasRowMajor, CblasNoTrans, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_cgbmv",11)==0) { + cblas_rout = "cblas_cgbmv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_cgbmv(INVALID, CblasNoTrans, 0, 0, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_cgbmv(CblasColMajor, INVALID, 0, 0, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_cgbmv(CblasColMajor, CblasNoTrans, INVALID, 0, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_cgbmv(CblasColMajor, CblasNoTrans, 0, INVALID, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_cgbmv(CblasColMajor, CblasNoTrans, 0, 0, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_cgbmv(CblasColMajor, CblasNoTrans, 2, 0, 0, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_cgbmv(CblasColMajor, CblasNoTrans, 0, 0, 1, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_cgbmv(CblasColMajor, CblasNoTrans, 0, 0, 0, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = FALSE; + cblas_cgbmv(CblasColMajor, CblasNoTrans, 0, 0, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_cgbmv(CblasRowMajor, INVALID, 0, 0, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_cgbmv(CblasRowMajor, CblasNoTrans, INVALID, 0, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_cgbmv(CblasRowMajor, CblasNoTrans, 0, INVALID, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_cgbmv(CblasRowMajor, CblasNoTrans, 0, 0, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_cgbmv(CblasRowMajor, CblasNoTrans, 2, 0, 0, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_cgbmv(CblasRowMajor, CblasNoTrans, 0, 0, 1, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_cgbmv(CblasRowMajor, CblasNoTrans, 0, 0, 0, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = TRUE; + cblas_cgbmv(CblasRowMajor, CblasNoTrans, 0, 0, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_chemv",11)==0) { + cblas_rout = "cblas_chemv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_chemv(INVALID, CblasUpper, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_chemv(CblasColMajor, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_chemv(CblasColMajor, CblasUpper, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_chemv(CblasColMajor, CblasUpper, 2, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_chemv(CblasColMajor, CblasUpper, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_chemv(CblasColMajor, CblasUpper, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_chemv(CblasRowMajor, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_chemv(CblasRowMajor, CblasUpper, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_chemv(CblasRowMajor, CblasUpper, 2, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_chemv(CblasRowMajor, CblasUpper, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_chemv(CblasRowMajor, CblasUpper, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_chbmv",11)==0) { + cblas_rout = "cblas_chbmv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_chbmv(INVALID, CblasUpper, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_chbmv(CblasColMajor, INVALID, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_chbmv(CblasColMajor, CblasUpper, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_chbmv(CblasColMajor, CblasUpper, 0, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_chbmv(CblasColMajor, CblasUpper, 0, 1, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_chbmv(CblasColMajor, CblasUpper, 0, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_chbmv(CblasColMajor, CblasUpper, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_chbmv(CblasRowMajor, INVALID, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_chbmv(CblasRowMajor, CblasUpper, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_chbmv(CblasRowMajor, CblasUpper, 0, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_chbmv(CblasRowMajor, CblasUpper, 0, 1, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_chbmv(CblasRowMajor, CblasUpper, 0, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_chbmv(CblasRowMajor, CblasUpper, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_chpmv",11)==0) { + cblas_rout = "cblas_chpmv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_chpmv(INVALID, CblasUpper, 0, + ALPHA, A, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_chpmv(CblasColMajor, INVALID, 0, + ALPHA, A, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_chpmv(CblasColMajor, CblasUpper, INVALID, + ALPHA, A, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_chpmv(CblasColMajor, CblasUpper, 0, + ALPHA, A, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_chpmv(CblasColMajor, CblasUpper, 0, + ALPHA, A, X, 1, BETA, Y, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_chpmv(CblasRowMajor, INVALID, 0, + ALPHA, A, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_chpmv(CblasRowMajor, CblasUpper, INVALID, + ALPHA, A, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_chpmv(CblasRowMajor, CblasUpper, 0, + ALPHA, A, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_chpmv(CblasRowMajor, CblasUpper, 0, + ALPHA, A, X, 1, BETA, Y, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_ctrmv",11)==0) { + cblas_rout = "cblas_ctrmv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_ctrmv(INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_ctrmv(CblasColMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_ctrmv(CblasColMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_ctrmv(CblasColMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_ctrmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ctrmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, A, 1, X, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_ctrmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_ctrmv(CblasRowMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_ctrmv(CblasRowMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_ctrmv(CblasRowMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_ctrmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ctrmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, A, 1, X, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_ctrmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_ctbmv",11)==0) { + cblas_rout = "cblas_ctbmv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_ctbmv(INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_ctbmv(CblasColMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_ctbmv(CblasColMajor, CblasUpper, INVALID, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_ctbmv(CblasColMajor, CblasUpper, CblasNoTrans, + INVALID, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_ctbmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ctbmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_ctbmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 1, A, 1, X, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ctbmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_ctbmv(CblasRowMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_ctbmv(CblasRowMajor, CblasUpper, INVALID, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_ctbmv(CblasRowMajor, CblasUpper, CblasNoTrans, + INVALID, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_ctbmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ctbmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_ctbmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 1, A, 1, X, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ctbmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_ctpmv",11)==0) { + cblas_rout = "cblas_ctpmv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_ctpmv(INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_ctpmv(CblasColMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_ctpmv(CblasColMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_ctpmv(CblasColMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_ctpmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_ctpmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, X, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_ctpmv(CblasRowMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_ctpmv(CblasRowMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_ctpmv(CblasRowMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_ctpmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_ctpmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, X, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_ctrsv",11)==0) { + cblas_rout = "cblas_ctrsv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_ctrsv(INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_ctrsv(CblasColMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_ctrsv(CblasColMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_ctrsv(CblasColMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_ctrsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ctrsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, A, 1, X, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_ctrsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_ctrsv(CblasRowMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_ctrsv(CblasRowMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_ctrsv(CblasRowMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_ctrsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ctrsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, A, 1, X, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_ctrsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_ctbsv",11)==0) { + cblas_rout = "cblas_ctbsv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_ctbsv(INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_ctbsv(CblasColMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_ctbsv(CblasColMajor, CblasUpper, INVALID, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_ctbsv(CblasColMajor, CblasUpper, CblasNoTrans, + INVALID, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_ctbsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ctbsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_ctbsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 1, A, 1, X, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ctbsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_ctbsv(CblasRowMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_ctbsv(CblasRowMajor, CblasUpper, INVALID, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_ctbsv(CblasRowMajor, CblasUpper, CblasNoTrans, + INVALID, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_ctbsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ctbsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_ctbsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 1, A, 1, X, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ctbsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_ctpsv",11)==0) { + cblas_rout = "cblas_ctpsv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_ctpsv(INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_ctpsv(CblasColMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_ctpsv(CblasColMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_ctpsv(CblasColMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_ctpsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_ctpsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, X, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_ctpsv(CblasRowMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_ctpsv(CblasRowMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_ctpsv(CblasRowMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_ctpsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_ctpsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, X, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_cgeru",10)==0) { + cblas_rout = "cblas_cgeru"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_cgeru(INVALID, 0, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_cgeru(CblasColMajor, INVALID, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_cgeru(CblasColMajor, 0, INVALID, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_cgeru(CblasColMajor, 0, 0, ALPHA, X, 0, Y, 1, A, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_cgeru(CblasColMajor, 0, 0, ALPHA, X, 1, Y, 0, A, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_cgeru(CblasColMajor, 2, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_cgeru(CblasRowMajor, INVALID, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_cgeru(CblasRowMajor, 0, INVALID, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_cgeru(CblasRowMajor, 0, 0, ALPHA, X, 0, Y, 1, A, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_cgeru(CblasRowMajor, 0, 0, ALPHA, X, 1, Y, 0, A, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_cgeru(CblasRowMajor, 0, 2, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + } else if (strncmp( sf,"cblas_cgerc",10)==0) { + cblas_rout = "cblas_cgerc"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_cgerc(INVALID, 0, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_cgerc(CblasColMajor, INVALID, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_cgerc(CblasColMajor, 0, INVALID, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_cgerc(CblasColMajor, 0, 0, ALPHA, X, 0, Y, 1, A, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_cgerc(CblasColMajor, 0, 0, ALPHA, X, 1, Y, 0, A, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_cgerc(CblasColMajor, 2, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_cgerc(CblasRowMajor, INVALID, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_cgerc(CblasRowMajor, 0, INVALID, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_cgerc(CblasRowMajor, 0, 0, ALPHA, X, 0, Y, 1, A, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_cgerc(CblasRowMajor, 0, 0, ALPHA, X, 1, Y, 0, A, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_cgerc(CblasRowMajor, 0, 2, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + } else if (strncmp( sf,"cblas_cher2",11)==0) { + cblas_rout = "cblas_cher2"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_cher2(INVALID, CblasUpper, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_cher2(CblasColMajor, INVALID, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_cher2(CblasColMajor, CblasUpper, INVALID, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_cher2(CblasColMajor, CblasUpper, 0, ALPHA, X, 0, Y, 1, A, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_cher2(CblasColMajor, CblasUpper, 0, ALPHA, X, 1, Y, 0, A, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_cher2(CblasColMajor, CblasUpper, 2, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_cher2(CblasRowMajor, INVALID, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_cher2(CblasRowMajor, CblasUpper, INVALID, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_cher2(CblasRowMajor, CblasUpper, 0, ALPHA, X, 0, Y, 1, A, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_cher2(CblasRowMajor, CblasUpper, 0, ALPHA, X, 1, Y, 0, A, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_cher2(CblasRowMajor, CblasUpper, 2, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + } else if (strncmp( sf,"cblas_chpr2",11)==0) { + cblas_rout = "cblas_chpr2"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_chpr2(INVALID, CblasUpper, 0, ALPHA, X, 1, Y, 1, A ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_chpr2(CblasColMajor, INVALID, 0, ALPHA, X, 1, Y, 1, A ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_chpr2(CblasColMajor, CblasUpper, INVALID, ALPHA, X, 1, Y, 1, A ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_chpr2(CblasColMajor, CblasUpper, 0, ALPHA, X, 0, Y, 1, A ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_chpr2(CblasColMajor, CblasUpper, 0, ALPHA, X, 1, Y, 0, A ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_chpr2(CblasRowMajor, INVALID, 0, ALPHA, X, 1, Y, 1, A ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_chpr2(CblasRowMajor, CblasUpper, INVALID, ALPHA, X, 1, Y, 1, A ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_chpr2(CblasRowMajor, CblasUpper, 0, ALPHA, X, 0, Y, 1, A ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_chpr2(CblasRowMajor, CblasUpper, 0, ALPHA, X, 1, Y, 0, A ); + chkxer(); + } else if (strncmp( sf,"cblas_cher",10)==0) { + cblas_rout = "cblas_cher"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_cher(INVALID, CblasUpper, 0, RALPHA, X, 1, A, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_cher(CblasColMajor, INVALID, 0, RALPHA, X, 1, A, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_cher(CblasColMajor, CblasUpper, INVALID, RALPHA, X, 1, A, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_cher(CblasColMajor, CblasUpper, 0, RALPHA, X, 0, A, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_cher(CblasColMajor, CblasUpper, 2, RALPHA, X, 1, A, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_cher(CblasRowMajor, INVALID, 0, RALPHA, X, 1, A, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_cher(CblasRowMajor, CblasUpper, INVALID, RALPHA, X, 1, A, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_cher(CblasRowMajor, CblasUpper, 0, RALPHA, X, 0, A, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_cher(CblasRowMajor, CblasUpper, 2, RALPHA, X, 1, A, 1 ); + chkxer(); + } else if (strncmp( sf,"cblas_chpr",10)==0) { + cblas_rout = "cblas_chpr"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_chpr(INVALID, CblasUpper, 0, RALPHA, X, 1, A ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_chpr(CblasColMajor, INVALID, 0, RALPHA, X, 1, A ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_chpr(CblasColMajor, CblasUpper, INVALID, RALPHA, X, 1, A ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_chpr(CblasColMajor, CblasUpper, 0, RALPHA, X, 0, A ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_chpr(CblasColMajor, INVALID, 0, RALPHA, X, 1, A ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_chpr(CblasColMajor, CblasUpper, INVALID, RALPHA, X, 1, A ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_chpr(CblasColMajor, CblasUpper, 0, RALPHA, X, 0, A ); + chkxer(); + } + if (cblas_ok == TRUE) + printf(" %-12s PASSED THE TESTS OF ERROR-EXITS\n", cblas_rout); + else + printf("******* %s FAILED THE TESTS OF ERROR-EXITS *******\n",cblas_rout); +} diff --git a/CBLAS/testing/c_c3chke.c b/CBLAS/testing/c_c3chke.c new file mode 100644 index 000000000..67622435a --- /dev/null +++ b/CBLAS/testing/c_c3chke.c @@ -0,0 +1,1706 @@ +#include +#include +#include "cblas.h" +#include "cblas_test.h" + +int cblas_ok, cblas_lerr, cblas_info; +int link_xerbla=TRUE; +char *cblas_rout; + +#ifdef F77_Char +void F77_xerbla(F77_Char F77_srname, void *vinfo); +#else +void F77_xerbla(char *srname, void *vinfo); +#endif + +void chkxer(void) { + extern int cblas_ok, cblas_lerr, cblas_info; + extern int link_xerbla; + extern char *cblas_rout; + if (cblas_lerr == 1 ) { + printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %d NOT DETECTED BY %s *****\n", cblas_info, cblas_rout); + cblas_ok = 0 ; + } + cblas_lerr = 1 ; +} + +void F77_c3chke(char * rout) { + char *sf = ( rout ) ; + float A[4] = {0.0,0.0,0.0,0.0}, + B[4] = {0.0,0.0,0.0,0.0}, + C[4] = {0.0,0.0,0.0,0.0}, + ALPHA[2] = {0.0,0.0}, + BETA[2] = {0.0,0.0}, + RALPHA = 0.0, RBETA = 0.0; + extern int cblas_info, cblas_lerr, cblas_ok; + extern int RowMajorStrg; + extern char *cblas_rout; + + cblas_ok = TRUE ; + cblas_lerr = PASSED ; + + if (link_xerbla) /* call these first to link */ + { + cblas_xerbla(cblas_info,cblas_rout,""); + F77_xerbla(cblas_rout,&cblas_info); + } + + if (strncmp( sf,"cblas_cgemm" ,11)==0) { + cblas_rout = "cblas_cgemm" ; + + cblas_info = 1; + cblas_cgemm( INVALID, CblasNoTrans, CblasNoTrans, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 1; + cblas_cgemm( INVALID, CblasNoTrans, CblasTrans, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 1; + cblas_cgemm( INVALID, CblasTrans, CblasNoTrans, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 1; + cblas_cgemm( INVALID, CblasTrans, CblasTrans, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_cgemm( CblasColMajor, INVALID, CblasNoTrans, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_cgemm( CblasColMajor, INVALID, CblasTrans, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_cgemm( CblasColMajor, CblasNoTrans, INVALID, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_cgemm( CblasColMajor, CblasTrans, INVALID, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_cgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_cgemm( CblasColMajor, CblasNoTrans, CblasTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_cgemm( CblasColMajor, CblasTrans, CblasNoTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_cgemm( CblasColMajor, CblasTrans, CblasTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_cgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_cgemm( CblasColMajor, CblasNoTrans, CblasTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_cgemm( CblasColMajor, CblasTrans, CblasNoTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_cgemm( CblasColMajor, CblasTrans, CblasTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_cgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_cgemm( CblasColMajor, CblasNoTrans, CblasTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_cgemm( CblasColMajor, CblasTrans, CblasNoTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_cgemm( CblasColMajor, CblasTrans, CblasTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_cgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, 2, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_cgemm( CblasColMajor, CblasNoTrans, CblasTrans, 2, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_cgemm( CblasColMajor, CblasTrans, CblasNoTrans, 0, 0, 2, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_cgemm( CblasColMajor, CblasTrans, CblasTrans, 0, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_cgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, 0, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_cgemm( CblasColMajor, CblasTrans, CblasNoTrans, 0, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_cgemm( CblasColMajor, CblasNoTrans, CblasTrans, 0, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_cgemm( CblasColMajor, CblasTrans, CblasTrans, 0, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = FALSE; + cblas_cgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, 2, 0, 0, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = FALSE; + cblas_cgemm( CblasColMajor, CblasNoTrans, CblasTrans, 2, 0, 0, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = FALSE; + cblas_cgemm( CblasColMajor, CblasTrans, CblasNoTrans, 2, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = FALSE; + cblas_cgemm( CblasColMajor, CblasTrans, CblasTrans, 2, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_cgemm( CblasRowMajor, CblasNoTrans, CblasNoTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_cgemm( CblasRowMajor, CblasNoTrans, CblasTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_cgemm( CblasRowMajor, CblasTrans, CblasNoTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_cgemm( CblasRowMajor, CblasTrans, CblasTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_cgemm( CblasRowMajor, CblasNoTrans, CblasNoTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_cgemm( CblasRowMajor, CblasNoTrans, CblasTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_cgemm( CblasRowMajor, CblasTrans, CblasNoTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_cgemm( CblasRowMajor, CblasTrans, CblasTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_cgemm( CblasRowMajor, CblasNoTrans, CblasNoTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_cgemm( CblasRowMajor, CblasNoTrans, CblasTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_cgemm( CblasRowMajor, CblasTrans, CblasNoTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_cgemm( CblasRowMajor, CblasTrans, CblasTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_cgemm( CblasRowMajor, CblasNoTrans, CblasNoTrans, 0, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_cgemm( CblasRowMajor, CblasNoTrans, CblasTrans, 0, 0, 2, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_cgemm( CblasRowMajor, CblasTrans, CblasNoTrans, 2, 0, 0, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_cgemm( CblasRowMajor, CblasTrans, CblasTrans, 2, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_cgemm( CblasRowMajor, CblasNoTrans, CblasNoTrans, 0, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_cgemm( CblasRowMajor, CblasTrans, CblasNoTrans, 0, 2, 0, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_cgemm( CblasRowMajor, CblasNoTrans, CblasTrans, 0, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_cgemm( CblasRowMajor, CblasTrans, CblasTrans, 0, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = TRUE; + cblas_cgemm( CblasRowMajor, CblasNoTrans, CblasNoTrans, 0, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = TRUE; + cblas_cgemm( CblasRowMajor, CblasNoTrans, CblasTrans, 0, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = TRUE; + cblas_cgemm( CblasRowMajor, CblasTrans, CblasNoTrans, 0, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = TRUE; + cblas_cgemm( CblasRowMajor, CblasTrans, CblasTrans, 0, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + + } else if (strncmp( sf,"cblas_chemm" ,11)==0) { + cblas_rout = "cblas_chemm" ; + + cblas_info = 1; + cblas_chemm( INVALID, CblasRight, CblasLower, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_chemm( CblasColMajor, INVALID, CblasUpper, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_chemm( CblasColMajor, CblasLeft, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_chemm( CblasColMajor, CblasLeft, CblasUpper, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_chemm( CblasColMajor, CblasRight, CblasUpper, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_chemm( CblasColMajor, CblasLeft, CblasLower, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_chemm( CblasColMajor, CblasRight, CblasLower, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_chemm( CblasColMajor, CblasLeft, CblasUpper, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_chemm( CblasColMajor, CblasRight, CblasUpper, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_chemm( CblasColMajor, CblasLeft, CblasLower, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_chemm( CblasColMajor, CblasRight, CblasLower, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_chemm( CblasColMajor, CblasLeft, CblasUpper, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_chemm( CblasColMajor, CblasRight, CblasUpper, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_chemm( CblasColMajor, CblasLeft, CblasLower, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_chemm( CblasColMajor, CblasRight, CblasLower, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_chemm( CblasColMajor, CblasLeft, CblasUpper, 2, 0, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_chemm( CblasColMajor, CblasRight, CblasUpper, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_chemm( CblasColMajor, CblasLeft, CblasLower, 2, 0, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_chemm( CblasColMajor, CblasRight, CblasLower, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_chemm( CblasColMajor, CblasLeft, CblasUpper, 2, 0, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_chemm( CblasColMajor, CblasRight, CblasUpper, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_chemm( CblasColMajor, CblasLeft, CblasLower, 2, 0, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_chemm( CblasColMajor, CblasRight, CblasLower, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_chemm( CblasRowMajor, CblasLeft, CblasUpper, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_chemm( CblasRowMajor, CblasRight, CblasUpper, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_chemm( CblasRowMajor, CblasLeft, CblasLower, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_chemm( CblasRowMajor, CblasRight, CblasLower, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_chemm( CblasRowMajor, CblasLeft, CblasUpper, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_chemm( CblasRowMajor, CblasRight, CblasUpper, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_chemm( CblasRowMajor, CblasLeft, CblasLower, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_chemm( CblasRowMajor, CblasRight, CblasLower, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_chemm( CblasRowMajor, CblasLeft, CblasUpper, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_chemm( CblasRowMajor, CblasRight, CblasUpper, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_chemm( CblasRowMajor, CblasLeft, CblasLower, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_chemm( CblasRowMajor, CblasRight, CblasLower, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_chemm( CblasRowMajor, CblasLeft, CblasUpper, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_chemm( CblasRowMajor, CblasRight, CblasUpper, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_chemm( CblasRowMajor, CblasLeft, CblasLower, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_chemm( CblasRowMajor, CblasRight, CblasLower, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_chemm( CblasRowMajor, CblasLeft, CblasUpper, 0, 2, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_chemm( CblasRowMajor, CblasRight, CblasUpper, 0, 2, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_chemm( CblasRowMajor, CblasLeft, CblasLower, 0, 2, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_chemm( CblasRowMajor, CblasRight, CblasLower, 0, 2, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + + } else if (strncmp( sf,"cblas_csymm" ,11)==0) { + cblas_rout = "cblas_csymm" ; + + cblas_info = 1; + cblas_csymm( INVALID, CblasRight, CblasLower, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_csymm( CblasColMajor, INVALID, CblasUpper, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_csymm( CblasColMajor, CblasLeft, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_csymm( CblasColMajor, CblasLeft, CblasUpper, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_csymm( CblasColMajor, CblasRight, CblasUpper, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_csymm( CblasColMajor, CblasLeft, CblasLower, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_csymm( CblasColMajor, CblasRight, CblasLower, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_csymm( CblasColMajor, CblasLeft, CblasUpper, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_csymm( CblasColMajor, CblasRight, CblasUpper, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_csymm( CblasColMajor, CblasLeft, CblasLower, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_csymm( CblasColMajor, CblasRight, CblasLower, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_csymm( CblasColMajor, CblasLeft, CblasUpper, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_csymm( CblasColMajor, CblasRight, CblasUpper, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_csymm( CblasColMajor, CblasLeft, CblasLower, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_csymm( CblasColMajor, CblasRight, CblasLower, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_csymm( CblasColMajor, CblasLeft, CblasUpper, 2, 0, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_csymm( CblasColMajor, CblasRight, CblasUpper, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_csymm( CblasColMajor, CblasLeft, CblasLower, 2, 0, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_csymm( CblasColMajor, CblasRight, CblasLower, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_csymm( CblasColMajor, CblasLeft, CblasUpper, 2, 0, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_csymm( CblasColMajor, CblasRight, CblasUpper, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_csymm( CblasColMajor, CblasLeft, CblasLower, 2, 0, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_csymm( CblasColMajor, CblasRight, CblasLower, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_csymm( CblasRowMajor, CblasLeft, CblasUpper, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_csymm( CblasRowMajor, CblasRight, CblasUpper, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_csymm( CblasRowMajor, CblasLeft, CblasLower, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_csymm( CblasRowMajor, CblasRight, CblasLower, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_csymm( CblasRowMajor, CblasLeft, CblasUpper, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_csymm( CblasRowMajor, CblasRight, CblasUpper, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_csymm( CblasRowMajor, CblasLeft, CblasLower, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_csymm( CblasRowMajor, CblasRight, CblasLower, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_csymm( CblasRowMajor, CblasLeft, CblasUpper, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_csymm( CblasRowMajor, CblasRight, CblasUpper, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_csymm( CblasRowMajor, CblasLeft, CblasLower, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_csymm( CblasRowMajor, CblasRight, CblasLower, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_csymm( CblasRowMajor, CblasLeft, CblasUpper, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_csymm( CblasRowMajor, CblasRight, CblasUpper, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_csymm( CblasRowMajor, CblasLeft, CblasLower, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_csymm( CblasRowMajor, CblasRight, CblasLower, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_csymm( CblasRowMajor, CblasLeft, CblasUpper, 0, 2, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_csymm( CblasRowMajor, CblasRight, CblasUpper, 0, 2, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_csymm( CblasRowMajor, CblasLeft, CblasLower, 0, 2, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_csymm( CblasRowMajor, CblasRight, CblasLower, 0, 2, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + + } else if (strncmp( sf,"cblas_ctrmm" ,11)==0) { + cblas_rout = "cblas_ctrmm" ; + + cblas_info = 1; + cblas_ctrmm( INVALID, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasLeft, INVALID, CblasNoTrans, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasLeft, CblasUpper, INVALID, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + INVALID, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ctrmm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ctrmm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + + } else if (strncmp( sf,"cblas_ctrsm" ,11)==0) { + cblas_rout = "cblas_ctrsm" ; + + cblas_info = 1; + cblas_ctrsm( INVALID, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasLeft, INVALID, CblasNoTrans, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasLeft, CblasUpper, INVALID, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + INVALID, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ctrsm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ctrsm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + + } else if (strncmp( sf,"cblas_cherk" ,11)==0) { + cblas_rout = "cblas_cherk" ; + + cblas_info = 1; + cblas_cherk(INVALID, CblasUpper, CblasNoTrans, 0, 0, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_cherk(CblasColMajor, INVALID, CblasNoTrans, 0, 0, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_cherk(CblasColMajor, CblasUpper, CblasTrans, 0, 0, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_cherk(CblasColMajor, CblasUpper, CblasNoTrans, INVALID, 0, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_cherk(CblasColMajor, CblasUpper, CblasConjTrans, INVALID, 0, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_cherk(CblasColMajor, CblasLower, CblasNoTrans, INVALID, 0, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_cherk(CblasColMajor, CblasLower, CblasConjTrans, INVALID, 0, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_cherk(CblasColMajor, CblasUpper, CblasNoTrans, 0, INVALID, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_cherk(CblasColMajor, CblasUpper, CblasConjTrans, 0, INVALID, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_cherk(CblasColMajor, CblasLower, CblasNoTrans, 0, INVALID, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_cherk(CblasColMajor, CblasLower, CblasConjTrans, 0, INVALID, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_cherk(CblasRowMajor, CblasUpper, CblasNoTrans, 0, 2, + RALPHA, A, 1, RBETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_cherk(CblasRowMajor, CblasUpper, CblasConjTrans, 2, 0, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_cherk(CblasRowMajor, CblasLower, CblasNoTrans, 0, 2, + RALPHA, A, 1, RBETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_cherk(CblasRowMajor, CblasLower, CblasConjTrans, 2, 0, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_cherk(CblasColMajor, CblasUpper, CblasNoTrans, 2, 0, + RALPHA, A, 1, RBETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_cherk(CblasColMajor, CblasUpper, CblasConjTrans, 0, 2, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_cherk(CblasColMajor, CblasLower, CblasNoTrans, 2, 0, + RALPHA, A, 1, RBETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_cherk(CblasColMajor, CblasLower, CblasConjTrans, 0, 2, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_cherk(CblasRowMajor, CblasUpper, CblasNoTrans, 2, 0, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_cherk(CblasRowMajor, CblasUpper, CblasConjTrans, 2, 0, + RALPHA, A, 2, RBETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_cherk(CblasRowMajor, CblasLower, CblasNoTrans, 2, 0, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_cherk(CblasRowMajor, CblasLower, CblasConjTrans, 2, 0, + RALPHA, A, 2, RBETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_cherk(CblasColMajor, CblasUpper, CblasNoTrans, 2, 0, + RALPHA, A, 2, RBETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_cherk(CblasColMajor, CblasUpper, CblasConjTrans, 2, 0, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_cherk(CblasColMajor, CblasLower, CblasNoTrans, 2, 0, + RALPHA, A, 2, RBETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_cherk(CblasColMajor, CblasLower, CblasConjTrans, 2, 0, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + + } else if (strncmp( sf,"cblas_csyrk" ,11)==0) { + cblas_rout = "cblas_csyrk" ; + + cblas_info = 1; + cblas_csyrk(INVALID, CblasUpper, CblasNoTrans, 0, 0, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_csyrk(CblasColMajor, INVALID, CblasNoTrans, 0, 0, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_csyrk(CblasColMajor, CblasUpper, CblasConjTrans, 0, 0, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_csyrk(CblasColMajor, CblasUpper, CblasNoTrans, INVALID, 0, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_csyrk(CblasColMajor, CblasUpper, CblasTrans, INVALID, 0, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_csyrk(CblasColMajor, CblasLower, CblasNoTrans, INVALID, 0, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_csyrk(CblasColMajor, CblasLower, CblasTrans, INVALID, 0, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_csyrk(CblasColMajor, CblasUpper, CblasNoTrans, 0, INVALID, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_csyrk(CblasColMajor, CblasUpper, CblasTrans, 0, INVALID, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_csyrk(CblasColMajor, CblasLower, CblasNoTrans, 0, INVALID, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_csyrk(CblasColMajor, CblasLower, CblasTrans, 0, INVALID, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_csyrk(CblasRowMajor, CblasUpper, CblasNoTrans, 0, 2, + ALPHA, A, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_csyrk(CblasRowMajor, CblasUpper, CblasTrans, 2, 0, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_csyrk(CblasRowMajor, CblasLower, CblasNoTrans, 0, 2, + ALPHA, A, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_csyrk(CblasRowMajor, CblasLower, CblasTrans, 2, 0, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_csyrk(CblasColMajor, CblasUpper, CblasNoTrans, 2, 0, + ALPHA, A, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_csyrk(CblasColMajor, CblasUpper, CblasTrans, 0, 2, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_csyrk(CblasColMajor, CblasLower, CblasNoTrans, 2, 0, + ALPHA, A, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_csyrk(CblasColMajor, CblasLower, CblasTrans, 0, 2, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_csyrk(CblasRowMajor, CblasUpper, CblasNoTrans, 2, 0, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_csyrk(CblasRowMajor, CblasUpper, CblasTrans, 2, 0, + ALPHA, A, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_csyrk(CblasRowMajor, CblasLower, CblasNoTrans, 2, 0, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_csyrk(CblasRowMajor, CblasLower, CblasTrans, 2, 0, + ALPHA, A, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_csyrk(CblasColMajor, CblasUpper, CblasNoTrans, 2, 0, + ALPHA, A, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_csyrk(CblasColMajor, CblasUpper, CblasTrans, 2, 0, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_csyrk(CblasColMajor, CblasLower, CblasNoTrans, 2, 0, + ALPHA, A, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_csyrk(CblasColMajor, CblasLower, CblasTrans, 2, 0, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + + } else if (strncmp( sf,"cblas_cher2k" ,12)==0) { + cblas_rout = "cblas_cher2k" ; + + cblas_info = 1; + cblas_cher2k(INVALID, CblasUpper, CblasNoTrans, 0, 0, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_cher2k(CblasColMajor, INVALID, CblasNoTrans, 0, 0, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_cher2k(CblasColMajor, CblasUpper, CblasTrans, 0, 0, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_cher2k(CblasColMajor, CblasUpper, CblasNoTrans, INVALID, 0, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_cher2k(CblasColMajor, CblasUpper, CblasConjTrans, INVALID, 0, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_cher2k(CblasColMajor, CblasLower, CblasNoTrans, INVALID, 0, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_cher2k(CblasColMajor, CblasLower, CblasConjTrans, INVALID, 0, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_cher2k(CblasColMajor, CblasUpper, CblasNoTrans, 0, INVALID, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_cher2k(CblasColMajor, CblasUpper, CblasConjTrans, 0, INVALID, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_cher2k(CblasColMajor, CblasLower, CblasNoTrans, 0, INVALID, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_cher2k(CblasColMajor, CblasLower, CblasConjTrans, 0, INVALID, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_cher2k(CblasRowMajor, CblasUpper, CblasNoTrans, 0, 2, + ALPHA, A, 1, B, 2, RBETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_cher2k(CblasRowMajor, CblasUpper, CblasConjTrans, 2, 0, + ALPHA, A, 1, B, 2, RBETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_cher2k(CblasRowMajor, CblasLower, CblasNoTrans, 0, 2, + ALPHA, A, 1, B, 2, RBETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_cher2k(CblasRowMajor, CblasLower, CblasConjTrans, 2, 0, + ALPHA, A, 1, B, 2, RBETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_cher2k(CblasColMajor, CblasUpper, CblasNoTrans, 2, 0, + ALPHA, A, 1, B, 1, RBETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_cher2k(CblasColMajor, CblasUpper, CblasConjTrans, 0, 2, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_cher2k(CblasColMajor, CblasLower, CblasNoTrans, 2, 0, + ALPHA, A, 1, B, 1, RBETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_cher2k(CblasColMajor, CblasLower, CblasConjTrans, 0, 2, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_cher2k(CblasRowMajor, CblasUpper, CblasNoTrans, 0, 2, + ALPHA, A, 2, B, 1, RBETA, C, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_cher2k(CblasRowMajor, CblasUpper, CblasConjTrans, 2, 0, + ALPHA, A, 2, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_cher2k(CblasRowMajor, CblasLower, CblasNoTrans, 0, 2, + ALPHA, A, 2, B, 1, RBETA, C, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_cher2k(CblasRowMajor, CblasLower, CblasConjTrans, 2, 0, + ALPHA, A, 2, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_cher2k(CblasColMajor, CblasUpper, CblasNoTrans, 2, 0, + ALPHA, A, 2, B, 1, RBETA, C, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_cher2k(CblasColMajor, CblasUpper, CblasConjTrans, 0, 2, + ALPHA, A, 2, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_cher2k(CblasColMajor, CblasLower, CblasNoTrans, 2, 0, + ALPHA, A, 2, B, 1, RBETA, C, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_cher2k(CblasColMajor, CblasLower, CblasConjTrans, 0, 2, + ALPHA, A, 2, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_cher2k(CblasRowMajor, CblasUpper, CblasNoTrans, 2, 0, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_cher2k(CblasRowMajor, CblasUpper, CblasConjTrans, 2, 0, + ALPHA, A, 2, B, 2, RBETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_cher2k(CblasRowMajor, CblasLower, CblasNoTrans, 2, 0, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_cher2k(CblasRowMajor, CblasLower, CblasConjTrans, 2, 0, + ALPHA, A, 2, B, 2, RBETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_cher2k(CblasColMajor, CblasUpper, CblasNoTrans, 2, 0, + ALPHA, A, 2, B, 2, RBETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_cher2k(CblasColMajor, CblasUpper, CblasConjTrans, 2, 0, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_cher2k(CblasColMajor, CblasLower, CblasNoTrans, 2, 0, + ALPHA, A, 2, B, 2, RBETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_cher2k(CblasColMajor, CblasLower, CblasConjTrans, 2, 0, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + + } else if (strncmp( sf,"cblas_csyr2k" ,12)==0) { + cblas_rout = "cblas_csyr2k" ; + + cblas_info = 1; + cblas_csyr2k(INVALID, CblasUpper, CblasNoTrans, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_csyr2k(CblasColMajor, INVALID, CblasNoTrans, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_csyr2k(CblasColMajor, CblasUpper, CblasConjTrans, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_csyr2k(CblasColMajor, CblasUpper, CblasNoTrans, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_csyr2k(CblasColMajor, CblasUpper, CblasTrans, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_csyr2k(CblasColMajor, CblasLower, CblasNoTrans, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_csyr2k(CblasColMajor, CblasLower, CblasTrans, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_csyr2k(CblasColMajor, CblasUpper, CblasNoTrans, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_csyr2k(CblasColMajor, CblasUpper, CblasTrans, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_csyr2k(CblasColMajor, CblasLower, CblasNoTrans, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_csyr2k(CblasColMajor, CblasLower, CblasTrans, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_csyr2k(CblasRowMajor, CblasUpper, CblasNoTrans, 0, 2, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_csyr2k(CblasRowMajor, CblasUpper, CblasTrans, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_csyr2k(CblasRowMajor, CblasLower, CblasNoTrans, 0, 2, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_csyr2k(CblasRowMajor, CblasLower, CblasTrans, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_csyr2k(CblasColMajor, CblasUpper, CblasNoTrans, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_csyr2k(CblasColMajor, CblasUpper, CblasTrans, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_csyr2k(CblasColMajor, CblasLower, CblasNoTrans, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_csyr2k(CblasColMajor, CblasLower, CblasTrans, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_csyr2k(CblasRowMajor, CblasUpper, CblasNoTrans, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_csyr2k(CblasRowMajor, CblasUpper, CblasTrans, 2, 0, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_csyr2k(CblasRowMajor, CblasLower, CblasNoTrans, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_csyr2k(CblasRowMajor, CblasLower, CblasTrans, 2, 0, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_csyr2k(CblasColMajor, CblasUpper, CblasNoTrans, 2, 0, + ALPHA, A, 2, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_csyr2k(CblasColMajor, CblasUpper, CblasTrans, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_csyr2k(CblasColMajor, CblasLower, CblasNoTrans, 2, 0, + ALPHA, A, 2, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_csyr2k(CblasColMajor, CblasLower, CblasTrans, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_csyr2k(CblasRowMajor, CblasUpper, CblasNoTrans, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_csyr2k(CblasRowMajor, CblasUpper, CblasTrans, 2, 0, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_csyr2k(CblasRowMajor, CblasLower, CblasNoTrans, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_csyr2k(CblasRowMajor, CblasLower, CblasTrans, 2, 0, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_csyr2k(CblasColMajor, CblasUpper, CblasNoTrans, 2, 0, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_csyr2k(CblasColMajor, CblasUpper, CblasTrans, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_csyr2k(CblasColMajor, CblasLower, CblasNoTrans, 2, 0, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_csyr2k(CblasColMajor, CblasLower, CblasTrans, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + + } + + if (cblas_ok == 1 ) + printf(" %-12s PASSED THE TESTS OF ERROR-EXITS\n", cblas_rout); + else + printf("***** %s FAILED THE TESTS OF ERROR-EXITS *******\n",cblas_rout); +} diff --git a/CBLAS/testing/c_cblas1.c b/CBLAS/testing/c_cblas1.c new file mode 100644 index 000000000..31b9d47b2 --- /dev/null +++ b/CBLAS/testing/c_cblas1.c @@ -0,0 +1,74 @@ +/* + * c_cblas1.c + * + * The program is a C wrapper for ccblat1. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas_test.h" +#include "cblas.h" +void F77_caxpy(const int *N, const void *alpha, void *X, + const int *incX, void *Y, const int *incY) +{ + cblas_caxpy(*N, alpha, X, *incX, Y, *incY); + return; +} + +void F77_ccopy(const int *N, void *X, const int *incX, + void *Y, const int *incY) +{ + cblas_ccopy(*N, X, *incX, Y, *incY); + return; +} + +void F77_cdotc(const int *N, void *X, const int *incX, + void *Y, const int *incY, void *dotc) +{ + cblas_cdotc_sub(*N, X, *incX, Y, *incY, dotc); + return; +} + +void F77_cdotu(const int *N, void *X, const int *incX, + void *Y, const int *incY,void *dotu) +{ + cblas_cdotu_sub(*N, X, *incX, Y, *incY, dotu); + return; +} + +void F77_cscal(const int *N, const void * *alpha, void *X, + const int *incX) +{ + cblas_cscal(*N, alpha, X, *incX); + return; +} + +void F77_csscal(const int *N, const float *alpha, void *X, + const int *incX) +{ + cblas_csscal(*N, *alpha, X, *incX); + return; +} + +void F77_cswap( const int *N, void *X, const int *incX, + void *Y, const int *incY) +{ + cblas_cswap(*N,X,*incX,Y,*incY); + return; +} + +int F77_icamax(const int *N, const void *X, const int *incX) +{ + if (*N < 1 || *incX < 1) return(0); + return (cblas_icamax(*N, X, *incX)+1); +} + +float F77_scnrm2(const int *N, const void *X, const int *incX) +{ + return cblas_scnrm2(*N, X, *incX); +} + +float F77_scasum(const int *N, void *X, const int *incX) +{ + return cblas_scasum(*N, X, *incX); +} diff --git a/CBLAS/testing/c_cblas2.c b/CBLAS/testing/c_cblas2.c new file mode 100644 index 000000000..1aeca3f10 --- /dev/null +++ b/CBLAS/testing/c_cblas2.c @@ -0,0 +1,807 @@ +/* + * Written by D.P. Manley, Digital Equipment Corporation. + * Prefixed "C_" to BLAS routines and their declarations. + * + * Modified by T. H. Do, 4/08/98, SGI/CRAY Research. + */ +#include +#include "cblas.h" +#include "cblas_test.h" + +void F77_cgemv(int *order, char *transp, int *m, int *n, + const void *alpha, + CBLAS_TEST_COMPLEX *a, int *lda, const void *x, int *incx, + const void *beta, void *y, int *incy) { + + CBLAS_TEST_COMPLEX *A; + int i,j,LDA; + enum CBLAS_TRANSPOSE trans; + + get_transpose_type(transp, &trans); + if (*order == TEST_ROW_MJR) { + LDA = *n+1; + A = (CBLAS_TEST_COMPLEX *)malloc( (*m)*LDA*sizeof( CBLAS_TEST_COMPLEX) ); + for( i=0; i<*m; i++ ) + for( j=0; j<*n; j++ ){ + A[ LDA*i+j ].real=a[ (*lda)*j+i ].real; + A[ LDA*i+j ].imag=a[ (*lda)*j+i ].imag; + } + cblas_cgemv( CblasRowMajor, trans, *m, *n, alpha, A, LDA, x, *incx, + beta, y, *incy ); + free(A); + } + else if (*order == TEST_COL_MJR) + cblas_cgemv( CblasColMajor, trans, + *m, *n, alpha, a, *lda, x, *incx, beta, y, *incy ); + else + cblas_cgemv( UNDEFINED, trans, + *m, *n, alpha, a, *lda, x, *incx, beta, y, *incy ); +} + +void F77_cgbmv(int *order, char *transp, int *m, int *n, int *kl, int *ku, + CBLAS_TEST_COMPLEX *alpha, CBLAS_TEST_COMPLEX *a, int *lda, + CBLAS_TEST_COMPLEX *x, int *incx, + CBLAS_TEST_COMPLEX *beta, CBLAS_TEST_COMPLEX *y, int *incy) { + + CBLAS_TEST_COMPLEX *A; + int i,j,irow,jcol,LDA; + enum CBLAS_TRANSPOSE trans; + + get_transpose_type(transp, &trans); + if (*order == TEST_ROW_MJR) { + LDA = *ku+*kl+2; + A=( CBLAS_TEST_COMPLEX* )malloc((*n+*kl)*LDA*sizeof(CBLAS_TEST_COMPLEX)); + for( i=0; i<*ku; i++ ){ + irow=*ku+*kl-i; + jcol=(*ku)-i; + for( j=jcol; j<*n; j++ ){ + A[ LDA*(j-jcol)+irow ].real=a[ (*lda)*j+i ].real; + A[ LDA*(j-jcol)+irow ].imag=a[ (*lda)*j+i ].imag; + } + } + i=*ku; + irow=*ku+*kl-i; + for( j=0; j<*n; j++ ){ + A[ LDA*j+irow ].real=a[ (*lda)*j+i ].real; + A[ LDA*j+irow ].imag=a[ (*lda)*j+i ].imag; + } + for( i=*ku+1; i<*ku+*kl+1; i++ ){ + irow=*ku+*kl-i; + jcol=i-(*ku); + for( j=jcol; j<(*n+*kl); j++ ){ + A[ LDA*j+irow ].real=a[ (*lda)*(j-jcol)+i ].real; + A[ LDA*j+irow ].imag=a[ (*lda)*(j-jcol)+i ].imag; + } + } + cblas_cgbmv( CblasRowMajor, trans, *m, *n, *kl, *ku, alpha, A, LDA, x, + *incx, beta, y, *incy ); + free(A); + } + else if (*order == TEST_COL_MJR) + cblas_cgbmv( CblasColMajor, trans, *m, *n, *kl, *ku, alpha, a, *lda, x, + *incx, beta, y, *incy ); + else + cblas_cgbmv( UNDEFINED, trans, *m, *n, *kl, *ku, alpha, a, *lda, x, + *incx, beta, y, *incy ); +} + +void F77_cgeru(int *order, int *m, int *n, CBLAS_TEST_COMPLEX *alpha, + CBLAS_TEST_COMPLEX *x, int *incx, CBLAS_TEST_COMPLEX *y, int *incy, + CBLAS_TEST_COMPLEX *a, int *lda){ + + CBLAS_TEST_COMPLEX *A; + int i,j,LDA; + + if (*order == TEST_ROW_MJR) { + LDA = *n+1; + A=(CBLAS_TEST_COMPLEX*)malloc((*m)*LDA*sizeof(CBLAS_TEST_COMPLEX)); + for( i=0; i<*m; i++ ) + for( j=0; j<*n; j++ ){ + A[ LDA*i+j ].real=a[ (*lda)*j+i ].real; + A[ LDA*i+j ].imag=a[ (*lda)*j+i ].imag; + } + cblas_cgeru( CblasRowMajor, *m, *n, alpha, x, *incx, y, *incy, A, LDA ); + for( i=0; i<*m; i++ ) + for( j=0; j<*n; j++ ){ + a[ (*lda)*j+i ].real=A[ LDA*i+j ].real; + a[ (*lda)*j+i ].imag=A[ LDA*i+j ].imag; + } + free(A); + } + else if (*order == TEST_COL_MJR) + cblas_cgeru( CblasColMajor, *m, *n, alpha, x, *incx, y, *incy, a, *lda ); + else + cblas_cgeru( UNDEFINED, *m, *n, alpha, x, *incx, y, *incy, a, *lda ); +} + +void F77_cgerc(int *order, int *m, int *n, CBLAS_TEST_COMPLEX *alpha, + CBLAS_TEST_COMPLEX *x, int *incx, CBLAS_TEST_COMPLEX *y, int *incy, + CBLAS_TEST_COMPLEX *a, int *lda) { + CBLAS_TEST_COMPLEX *A; + int i,j,LDA; + + if (*order == TEST_ROW_MJR) { + LDA = *n+1; + A=(CBLAS_TEST_COMPLEX* )malloc((*m)*LDA*sizeof(CBLAS_TEST_COMPLEX ) ); + for( i=0; i<*m; i++ ) + for( j=0; j<*n; j++ ){ + A[ LDA*i+j ].real=a[ (*lda)*j+i ].real; + A[ LDA*i+j ].imag=a[ (*lda)*j+i ].imag; + } + cblas_cgerc( CblasRowMajor, *m, *n, alpha, x, *incx, y, *incy, A, LDA ); + for( i=0; i<*m; i++ ) + for( j=0; j<*n; j++ ){ + a[ (*lda)*j+i ].real=A[ LDA*i+j ].real; + a[ (*lda)*j+i ].imag=A[ LDA*i+j ].imag; + } + free(A); + } + else if (*order == TEST_COL_MJR) + cblas_cgerc( CblasColMajor, *m, *n, alpha, x, *incx, y, *incy, a, *lda ); + else + cblas_cgerc( UNDEFINED, *m, *n, alpha, x, *incx, y, *incy, a, *lda ); +} + +void F77_chemv(int *order, char *uplow, int *n, CBLAS_TEST_COMPLEX *alpha, + CBLAS_TEST_COMPLEX *a, int *lda, CBLAS_TEST_COMPLEX *x, + int *incx, CBLAS_TEST_COMPLEX *beta, CBLAS_TEST_COMPLEX *y, int *incy){ + + CBLAS_TEST_COMPLEX *A; + int i,j,LDA; + enum CBLAS_UPLO uplo; + + get_uplo_type(uplow,&uplo); + + if (*order == TEST_ROW_MJR) { + LDA = *n+1; + A = (CBLAS_TEST_COMPLEX *)malloc((*n)*LDA*sizeof(CBLAS_TEST_COMPLEX)); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ){ + A[ LDA*i+j ].real=a[ (*lda)*j+i ].real; + A[ LDA*i+j ].imag=a[ (*lda)*j+i ].imag; + } + cblas_chemv( CblasRowMajor, uplo, *n, alpha, A, LDA, x, *incx, + beta, y, *incy ); + free(A); + } + else if (*order == TEST_COL_MJR) + cblas_chemv( CblasColMajor, uplo, *n, alpha, a, *lda, x, *incx, + beta, y, *incy ); + else + cblas_chemv( UNDEFINED, uplo, *n, alpha, a, *lda, x, *incx, + beta, y, *incy ); +} + +void F77_chbmv(int *order, char *uplow, int *n, int *k, + CBLAS_TEST_COMPLEX *alpha, CBLAS_TEST_COMPLEX *a, int *lda, + CBLAS_TEST_COMPLEX *x, int *incx, CBLAS_TEST_COMPLEX *beta, + CBLAS_TEST_COMPLEX *y, int *incy){ + +CBLAS_TEST_COMPLEX *A; +int i,irow,j,jcol,LDA; + + enum CBLAS_UPLO uplo; + + get_uplo_type(uplow,&uplo); + + if (*order == TEST_ROW_MJR) { + if (uplo != CblasUpper && uplo != CblasLower ) + cblas_chbmv(CblasRowMajor, UNDEFINED, *n, *k, alpha, a, *lda, x, + *incx, beta, y, *incy ); + else { + LDA = *k+2; + A =(CBLAS_TEST_COMPLEX*)malloc((*n+*k)*LDA*sizeof(CBLAS_TEST_COMPLEX)); + if (uplo == CblasUpper) { + for( i=0; i<*k; i++ ){ + irow=*k-i; + jcol=(*k)-i; + for( j=jcol; j<*n; j++ ) { + A[ LDA*(j-jcol)+irow ].real=a[ (*lda)*j+i ].real; + A[ LDA*(j-jcol)+irow ].imag=a[ (*lda)*j+i ].imag; + } + } + i=*k; + irow=*k-i; + for( j=0; j<*n; j++ ) { + A[ LDA*j+irow ].real=a[ (*lda)*j+i ].real; + A[ LDA*j+irow ].imag=a[ (*lda)*j+i ].imag; + } + } + else { + i=0; + irow=*k-i; + for( j=0; j<*n; j++ ) { + A[ LDA*j+irow ].real=a[ (*lda)*j+i ].real; + A[ LDA*j+irow ].imag=a[ (*lda)*j+i ].imag; + } + for( i=1; i<*k+1; i++ ){ + irow=*k-i; + jcol=i; + for( j=jcol; j<(*n+*k); j++ ) { + A[ LDA*j+irow ].real=a[ (*lda)*(j-jcol)+i ].real; + A[ LDA*j+irow ].imag=a[ (*lda)*(j-jcol)+i ].imag; + } + } + } + cblas_chbmv( CblasRowMajor, uplo, *n, *k, alpha, A, LDA, x, *incx, + beta, y, *incy ); + free(A); + } + } + else if (*order == TEST_COL_MJR) + cblas_chbmv(CblasColMajor, uplo, *n, *k, alpha, a, *lda, x, *incx, + beta, y, *incy ); + else + cblas_chbmv(UNDEFINED, uplo, *n, *k, alpha, a, *lda, x, *incx, + beta, y, *incy ); +} + +void F77_chpmv(int *order, char *uplow, int *n, CBLAS_TEST_COMPLEX *alpha, + CBLAS_TEST_COMPLEX *ap, CBLAS_TEST_COMPLEX *x, int *incx, + CBLAS_TEST_COMPLEX *beta, CBLAS_TEST_COMPLEX *y, int *incy){ + + CBLAS_TEST_COMPLEX *A, *AP; + int i,j,k,LDA; + enum CBLAS_UPLO uplo; + + get_uplo_type(uplow,&uplo); + if (*order == TEST_ROW_MJR) { + if (uplo != CblasUpper && uplo != CblasLower ) + cblas_chpmv(CblasRowMajor, UNDEFINED, *n, alpha, ap, x, *incx, + beta, y, *incy); + else { + LDA = *n; + A = (CBLAS_TEST_COMPLEX* )malloc(LDA*LDA*sizeof(CBLAS_TEST_COMPLEX )); + AP = (CBLAS_TEST_COMPLEX* )malloc( (((LDA+1)*LDA)/2)* + sizeof( CBLAS_TEST_COMPLEX )); + if (uplo == CblasUpper) { + for( j=0, k=0; j<*n; j++ ) + for( i=0; i +#include "cblas.h" +#include "cblas_test.h" +#define TEST_COL_MJR 0 +#define TEST_ROW_MJR 1 +#define UNDEFINED -1 + +void F77_cgemm(int *order, char *transpa, char *transpb, int *m, int *n, + int *k, CBLAS_TEST_COMPLEX *alpha, CBLAS_TEST_COMPLEX *a, int *lda, + CBLAS_TEST_COMPLEX *b, int *ldb, CBLAS_TEST_COMPLEX *beta, + CBLAS_TEST_COMPLEX *c, int *ldc ) { + + CBLAS_TEST_COMPLEX *A, *B, *C; + int i,j,LDA, LDB, LDC; + enum CBLAS_TRANSPOSE transa, transb; + + get_transpose_type(transpa, &transa); + get_transpose_type(transpb, &transb); + + if (*order == TEST_ROW_MJR) { + if (transa == CblasNoTrans) { + LDA = *k+1; + A=(CBLAS_TEST_COMPLEX*)malloc((*m)*LDA*sizeof(CBLAS_TEST_COMPLEX)); + for( i=0; i<*m; i++ ) + for( j=0; j<*k; j++ ) { + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + } + } + else { + LDA = *m+1; + A=(CBLAS_TEST_COMPLEX* )malloc(LDA*(*k)*sizeof(CBLAS_TEST_COMPLEX)); + for( i=0; i<*k; i++ ) + for( j=0; j<*m; j++ ) { + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + } + } + + if (transb == CblasNoTrans) { + LDB = *n+1; + B=(CBLAS_TEST_COMPLEX* )malloc((*k)*LDB*sizeof(CBLAS_TEST_COMPLEX) ); + for( i=0; i<*k; i++ ) + for( j=0; j<*n; j++ ) { + B[i*LDB+j].real=b[j*(*ldb)+i].real; + B[i*LDB+j].imag=b[j*(*ldb)+i].imag; + } + } + else { + LDB = *k+1; + B=(CBLAS_TEST_COMPLEX* )malloc(LDB*(*n)*sizeof(CBLAS_TEST_COMPLEX)); + for( i=0; i<*n; i++ ) + for( j=0; j<*k; j++ ) { + B[i*LDB+j].real=b[j*(*ldb)+i].real; + B[i*LDB+j].imag=b[j*(*ldb)+i].imag; + } + } + + LDC = *n+1; + C=(CBLAS_TEST_COMPLEX* )malloc((*m)*LDC*sizeof(CBLAS_TEST_COMPLEX)); + for( j=0; j<*n; j++ ) + for( i=0; i<*m; i++ ) { + C[i*LDC+j].real=c[j*(*ldc)+i].real; + C[i*LDC+j].imag=c[j*(*ldc)+i].imag; + } + cblas_cgemm( CblasRowMajor, transa, transb, *m, *n, *k, alpha, A, LDA, + B, LDB, beta, C, LDC ); + for( j=0; j<*n; j++ ) + for( i=0; i<*m; i++ ) { + c[j*(*ldc)+i].real=C[i*LDC+j].real; + c[j*(*ldc)+i].imag=C[i*LDC+j].imag; + } + free(A); + free(B); + free(C); + } + else if (*order == TEST_COL_MJR) + cblas_cgemm( CblasColMajor, transa, transb, *m, *n, *k, alpha, a, *lda, + b, *ldb, beta, c, *ldc ); + else + cblas_cgemm( UNDEFINED, transa, transb, *m, *n, *k, alpha, a, *lda, + b, *ldb, beta, c, *ldc ); +} +void F77_chemm(int *order, char *rtlf, char *uplow, int *m, int *n, + CBLAS_TEST_COMPLEX *alpha, CBLAS_TEST_COMPLEX *a, int *lda, + CBLAS_TEST_COMPLEX *b, int *ldb, CBLAS_TEST_COMPLEX *beta, + CBLAS_TEST_COMPLEX *c, int *ldc ) { + + CBLAS_TEST_COMPLEX *A, *B, *C; + int i,j,LDA, LDB, LDC; + enum CBLAS_UPLO uplo; + enum CBLAS_SIDE side; + + get_uplo_type(uplow,&uplo); + get_side_type(rtlf,&side); + + if (*order == TEST_ROW_MJR) { + if (side == CblasLeft) { + LDA = *m+1; + A= (CBLAS_TEST_COMPLEX* )malloc((*m)*LDA*sizeof(CBLAS_TEST_COMPLEX)); + for( i=0; i<*m; i++ ) + for( j=0; j<*m; j++ ) { + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + } + } + else{ + LDA = *n+1; + A=(CBLAS_TEST_COMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_COMPLEX ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) { + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + } + } + LDB = *n+1; + B=(CBLAS_TEST_COMPLEX* )malloc( (*m)*LDB*sizeof(CBLAS_TEST_COMPLEX ) ); + for( i=0; i<*m; i++ ) + for( j=0; j<*n; j++ ) { + B[i*LDB+j].real=b[j*(*ldb)+i].real; + B[i*LDB+j].imag=b[j*(*ldb)+i].imag; + } + LDC = *n+1; + C=(CBLAS_TEST_COMPLEX* )malloc((*m)*LDC*sizeof(CBLAS_TEST_COMPLEX ) ); + for( j=0; j<*n; j++ ) + for( i=0; i<*m; i++ ) { + C[i*LDC+j].real=c[j*(*ldc)+i].real; + C[i*LDC+j].imag=c[j*(*ldc)+i].imag; + } + cblas_chemm( CblasRowMajor, side, uplo, *m, *n, alpha, A, LDA, B, LDB, + beta, C, LDC ); + for( j=0; j<*n; j++ ) + for( i=0; i<*m; i++ ) { + c[j*(*ldc)+i].real=C[i*LDC+j].real; + c[j*(*ldc)+i].imag=C[i*LDC+j].imag; + } + free(A); + free(B); + free(C); + } + else if (*order == TEST_COL_MJR) + cblas_chemm( CblasColMajor, side, uplo, *m, *n, alpha, a, *lda, b, *ldb, + beta, c, *ldc ); + else + cblas_chemm( UNDEFINED, side, uplo, *m, *n, alpha, a, *lda, b, *ldb, + beta, c, *ldc ); +} +void F77_csymm(int *order, char *rtlf, char *uplow, int *m, int *n, + CBLAS_TEST_COMPLEX *alpha, CBLAS_TEST_COMPLEX *a, int *lda, + CBLAS_TEST_COMPLEX *b, int *ldb, CBLAS_TEST_COMPLEX *beta, + CBLAS_TEST_COMPLEX *c, int *ldc ) { + + CBLAS_TEST_COMPLEX *A, *B, *C; + int i,j,LDA, LDB, LDC; + enum CBLAS_UPLO uplo; + enum CBLAS_SIDE side; + + get_uplo_type(uplow,&uplo); + get_side_type(rtlf,&side); + + if (*order == TEST_ROW_MJR) { + if (side == CblasLeft) { + LDA = *m+1; + A=(CBLAS_TEST_COMPLEX* )malloc((*m)*LDA*sizeof(CBLAS_TEST_COMPLEX)); + for( i=0; i<*m; i++ ) + for( j=0; j<*m; j++ ) + A[i*LDA+j]=a[j*(*lda)+i]; + } + else{ + LDA = *n+1; + A=(CBLAS_TEST_COMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_COMPLEX ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) + A[i*LDA+j]=a[j*(*lda)+i]; + } + LDB = *n+1; + B=(CBLAS_TEST_COMPLEX* )malloc((*m)*LDB*sizeof(CBLAS_TEST_COMPLEX )); + for( i=0; i<*m; i++ ) + for( j=0; j<*n; j++ ) + B[i*LDB+j]=b[j*(*ldb)+i]; + LDC = *n+1; + C=(CBLAS_TEST_COMPLEX* )malloc((*m)*LDC*sizeof(CBLAS_TEST_COMPLEX)); + for( j=0; j<*n; j++ ) + for( i=0; i<*m; i++ ) + C[i*LDC+j]=c[j*(*ldc)+i]; + cblas_csymm( CblasRowMajor, side, uplo, *m, *n, alpha, A, LDA, B, LDB, + beta, C, LDC ); + for( j=0; j<*n; j++ ) + for( i=0; i<*m; i++ ) + c[j*(*ldc)+i]=C[i*LDC+j]; + free(A); + free(B); + free(C); + } + else if (*order == TEST_COL_MJR) + cblas_csymm( CblasColMajor, side, uplo, *m, *n, alpha, a, *lda, b, *ldb, + beta, c, *ldc ); + else + cblas_csymm( UNDEFINED, side, uplo, *m, *n, alpha, a, *lda, b, *ldb, + beta, c, *ldc ); +} + +void F77_cherk(int *order, char *uplow, char *transp, int *n, int *k, + float *alpha, CBLAS_TEST_COMPLEX *a, int *lda, + float *beta, CBLAS_TEST_COMPLEX *c, int *ldc ) { + + int i,j,LDA,LDC; + CBLAS_TEST_COMPLEX *A, *C; + enum CBLAS_UPLO uplo; + enum CBLAS_TRANSPOSE trans; + + get_uplo_type(uplow,&uplo); + get_transpose_type(transp,&trans); + + if (*order == TEST_ROW_MJR) { + if (trans == CblasNoTrans) { + LDA = *k+1; + A=(CBLAS_TEST_COMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_COMPLEX ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*k; j++ ) { + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + } + } + else{ + LDA = *n+1; + A=(CBLAS_TEST_COMPLEX* )malloc((*k)*LDA*sizeof(CBLAS_TEST_COMPLEX ) ); + for( i=0; i<*k; i++ ) + for( j=0; j<*n; j++ ) { + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + } + } + LDC = *n+1; + C=(CBLAS_TEST_COMPLEX* )malloc((*n)*LDC*sizeof(CBLAS_TEST_COMPLEX ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) { + C[i*LDC+j].real=c[j*(*ldc)+i].real; + C[i*LDC+j].imag=c[j*(*ldc)+i].imag; + } + cblas_cherk(CblasRowMajor, uplo, trans, *n, *k, *alpha, A, LDA, *beta, + C, LDC ); + for( j=0; j<*n; j++ ) + for( i=0; i<*n; i++ ) { + c[j*(*ldc)+i].real=C[i*LDC+j].real; + c[j*(*ldc)+i].imag=C[i*LDC+j].imag; + } + free(A); + free(C); + } + else if (*order == TEST_COL_MJR) + cblas_cherk(CblasColMajor, uplo, trans, *n, *k, *alpha, a, *lda, *beta, + c, *ldc ); + else + cblas_cherk(UNDEFINED, uplo, trans, *n, *k, *alpha, a, *lda, *beta, + c, *ldc ); +} + +void F77_csyrk(int *order, char *uplow, char *transp, int *n, int *k, + CBLAS_TEST_COMPLEX *alpha, CBLAS_TEST_COMPLEX *a, int *lda, + CBLAS_TEST_COMPLEX *beta, CBLAS_TEST_COMPLEX *c, int *ldc ) { + + int i,j,LDA,LDC; + CBLAS_TEST_COMPLEX *A, *C; + enum CBLAS_UPLO uplo; + enum CBLAS_TRANSPOSE trans; + + get_uplo_type(uplow,&uplo); + get_transpose_type(transp,&trans); + + if (*order == TEST_ROW_MJR) { + if (trans == CblasNoTrans) { + LDA = *k+1; + A=(CBLAS_TEST_COMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_COMPLEX)); + for( i=0; i<*n; i++ ) + for( j=0; j<*k; j++ ) { + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + } + } + else{ + LDA = *n+1; + A=(CBLAS_TEST_COMPLEX* )malloc((*k)*LDA*sizeof(CBLAS_TEST_COMPLEX ) ); + for( i=0; i<*k; i++ ) + for( j=0; j<*n; j++ ) { + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + } + } + LDC = *n+1; + C=(CBLAS_TEST_COMPLEX* )malloc((*n)*LDC*sizeof(CBLAS_TEST_COMPLEX ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) { + C[i*LDC+j].real=c[j*(*ldc)+i].real; + C[i*LDC+j].imag=c[j*(*ldc)+i].imag; + } + cblas_csyrk(CblasRowMajor, uplo, trans, *n, *k, alpha, A, LDA, beta, + C, LDC ); + for( j=0; j<*n; j++ ) + for( i=0; i<*n; i++ ) { + c[j*(*ldc)+i].real=C[i*LDC+j].real; + c[j*(*ldc)+i].imag=C[i*LDC+j].imag; + } + free(A); + free(C); + } + else if (*order == TEST_COL_MJR) + cblas_csyrk(CblasColMajor, uplo, trans, *n, *k, alpha, a, *lda, beta, + c, *ldc ); + else + cblas_csyrk(UNDEFINED, uplo, trans, *n, *k, alpha, a, *lda, beta, + c, *ldc ); +} +void F77_cher2k(int *order, char *uplow, char *transp, int *n, int *k, + CBLAS_TEST_COMPLEX *alpha, CBLAS_TEST_COMPLEX *a, int *lda, + CBLAS_TEST_COMPLEX *b, int *ldb, float *beta, + CBLAS_TEST_COMPLEX *c, int *ldc ) { + int i,j,LDA,LDB,LDC; + CBLAS_TEST_COMPLEX *A, *B, *C; + enum CBLAS_UPLO uplo; + enum CBLAS_TRANSPOSE trans; + + get_uplo_type(uplow,&uplo); + get_transpose_type(transp,&trans); + + if (*order == TEST_ROW_MJR) { + if (trans == CblasNoTrans) { + LDA = *k+1; + LDB = *k+1; + A=(CBLAS_TEST_COMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_COMPLEX )); + B=(CBLAS_TEST_COMPLEX* )malloc((*n)*LDB*sizeof(CBLAS_TEST_COMPLEX )); + for( i=0; i<*n; i++ ) + for( j=0; j<*k; j++ ) { + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + B[i*LDB+j].real=b[j*(*ldb)+i].real; + B[i*LDB+j].imag=b[j*(*ldb)+i].imag; + } + } + else { + LDA = *n+1; + LDB = *n+1; + A=(CBLAS_TEST_COMPLEX* )malloc( LDA*(*k)*sizeof(CBLAS_TEST_COMPLEX ) ); + B=(CBLAS_TEST_COMPLEX* )malloc( LDB*(*k)*sizeof(CBLAS_TEST_COMPLEX ) ); + for( i=0; i<*k; i++ ) + for( j=0; j<*n; j++ ){ + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + B[i*LDB+j].real=b[j*(*ldb)+i].real; + B[i*LDB+j].imag=b[j*(*ldb)+i].imag; + } + } + LDC = *n+1; + C=(CBLAS_TEST_COMPLEX* )malloc( (*n)*LDC*sizeof(CBLAS_TEST_COMPLEX ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) { + C[i*LDC+j].real=c[j*(*ldc)+i].real; + C[i*LDC+j].imag=c[j*(*ldc)+i].imag; + } + cblas_cher2k(CblasRowMajor, uplo, trans, *n, *k, alpha, A, LDA, + B, LDB, *beta, C, LDC ); + for( j=0; j<*n; j++ ) + for( i=0; i<*n; i++ ) { + c[j*(*ldc)+i].real=C[i*LDC+j].real; + c[j*(*ldc)+i].imag=C[i*LDC+j].imag; + } + free(A); + free(B); + free(C); + } + else if (*order == TEST_COL_MJR) + cblas_cher2k(CblasColMajor, uplo, trans, *n, *k, alpha, a, *lda, + b, *ldb, *beta, c, *ldc ); + else + cblas_cher2k(UNDEFINED, uplo, trans, *n, *k, alpha, a, *lda, + b, *ldb, *beta, c, *ldc ); +} +void F77_csyr2k(int *order, char *uplow, char *transp, int *n, int *k, + CBLAS_TEST_COMPLEX *alpha, CBLAS_TEST_COMPLEX *a, int *lda, + CBLAS_TEST_COMPLEX *b, int *ldb, CBLAS_TEST_COMPLEX *beta, + CBLAS_TEST_COMPLEX *c, int *ldc ) { + int i,j,LDA,LDB,LDC; + CBLAS_TEST_COMPLEX *A, *B, *C; + enum CBLAS_UPLO uplo; + enum CBLAS_TRANSPOSE trans; + + get_uplo_type(uplow,&uplo); + get_transpose_type(transp,&trans); + + if (*order == TEST_ROW_MJR) { + if (trans == CblasNoTrans) { + LDA = *k+1; + LDB = *k+1; + A=(CBLAS_TEST_COMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_COMPLEX)); + B=(CBLAS_TEST_COMPLEX* )malloc((*n)*LDB*sizeof(CBLAS_TEST_COMPLEX)); + for( i=0; i<*n; i++ ) + for( j=0; j<*k; j++ ) { + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + B[i*LDB+j].real=b[j*(*ldb)+i].real; + B[i*LDB+j].imag=b[j*(*ldb)+i].imag; + } + } + else { + LDA = *n+1; + LDB = *n+1; + A=(CBLAS_TEST_COMPLEX* )malloc(LDA*(*k)*sizeof(CBLAS_TEST_COMPLEX)); + B=(CBLAS_TEST_COMPLEX* )malloc(LDB*(*k)*sizeof(CBLAS_TEST_COMPLEX)); + for( i=0; i<*k; i++ ) + for( j=0; j<*n; j++ ){ + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + B[i*LDB+j].real=b[j*(*ldb)+i].real; + B[i*LDB+j].imag=b[j*(*ldb)+i].imag; + } + } + LDC = *n+1; + C=(CBLAS_TEST_COMPLEX* )malloc( (*n)*LDC*sizeof(CBLAS_TEST_COMPLEX)); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) { + C[i*LDC+j].real=c[j*(*ldc)+i].real; + C[i*LDC+j].imag=c[j*(*ldc)+i].imag; + } + cblas_csyr2k(CblasRowMajor, uplo, trans, *n, *k, alpha, A, LDA, + B, LDB, beta, C, LDC ); + for( j=0; j<*n; j++ ) + for( i=0; i<*n; i++ ) { + c[j*(*ldc)+i].real=C[i*LDC+j].real; + c[j*(*ldc)+i].imag=C[i*LDC+j].imag; + } + free(A); + free(B); + free(C); + } + else if (*order == TEST_COL_MJR) + cblas_csyr2k(CblasColMajor, uplo, trans, *n, *k, alpha, a, *lda, + b, *ldb, beta, c, *ldc ); + else + cblas_csyr2k(UNDEFINED, uplo, trans, *n, *k, alpha, a, *lda, + b, *ldb, beta, c, *ldc ); +} +void F77_ctrmm(int *order, char *rtlf, char *uplow, char *transp, char *diagn, + int *m, int *n, CBLAS_TEST_COMPLEX *alpha, CBLAS_TEST_COMPLEX *a, + int *lda, CBLAS_TEST_COMPLEX *b, int *ldb) { + int i,j,LDA,LDB; + CBLAS_TEST_COMPLEX *A, *B; + enum CBLAS_SIDE side; + enum CBLAS_DIAG diag; + enum CBLAS_UPLO uplo; + enum CBLAS_TRANSPOSE trans; + + get_uplo_type(uplow,&uplo); + get_transpose_type(transp,&trans); + get_diag_type(diagn,&diag); + get_side_type(rtlf,&side); + + if (*order == TEST_ROW_MJR) { + if (side == CblasLeft) { + LDA = *m+1; + A=(CBLAS_TEST_COMPLEX* )malloc((*m)*LDA*sizeof(CBLAS_TEST_COMPLEX)); + for( i=0; i<*m; i++ ) + for( j=0; j<*m; j++ ) { + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + } + } + else{ + LDA = *n+1; + A=(CBLAS_TEST_COMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_COMPLEX)); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) { + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + } + } + LDB = *n+1; + B=(CBLAS_TEST_COMPLEX* )malloc((*m)*LDB*sizeof(CBLAS_TEST_COMPLEX)); + for( i=0; i<*m; i++ ) + for( j=0; j<*n; j++ ) { + B[i*LDB+j].real=b[j*(*ldb)+i].real; + B[i*LDB+j].imag=b[j*(*ldb)+i].imag; + } + cblas_ctrmm(CblasRowMajor, side, uplo, trans, diag, *m, *n, alpha, + A, LDA, B, LDB ); + for( j=0; j<*n; j++ ) + for( i=0; i<*m; i++ ) { + b[j*(*ldb)+i].real=B[i*LDB+j].real; + b[j*(*ldb)+i].imag=B[i*LDB+j].imag; + } + free(A); + free(B); + } + else if (*order == TEST_COL_MJR) + cblas_ctrmm(CblasColMajor, side, uplo, trans, diag, *m, *n, alpha, + a, *lda, b, *ldb); + else + cblas_ctrmm(UNDEFINED, side, uplo, trans, diag, *m, *n, alpha, + a, *lda, b, *ldb); +} + +void F77_ctrsm(int *order, char *rtlf, char *uplow, char *transp, char *diagn, + int *m, int *n, CBLAS_TEST_COMPLEX *alpha, CBLAS_TEST_COMPLEX *a, + int *lda, CBLAS_TEST_COMPLEX *b, int *ldb) { + int i,j,LDA,LDB; + CBLAS_TEST_COMPLEX *A, *B; + enum CBLAS_SIDE side; + enum CBLAS_DIAG diag; + enum CBLAS_UPLO uplo; + enum CBLAS_TRANSPOSE trans; + + get_uplo_type(uplow,&uplo); + get_transpose_type(transp,&trans); + get_diag_type(diagn,&diag); + get_side_type(rtlf,&side); + + if (*order == TEST_ROW_MJR) { + if (side == CblasLeft) { + LDA = *m+1; + A=(CBLAS_TEST_COMPLEX* )malloc( (*m)*LDA*sizeof(CBLAS_TEST_COMPLEX ) ); + for( i=0; i<*m; i++ ) + for( j=0; j<*m; j++ ) { + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + } + } + else{ + LDA = *n+1; + A=(CBLAS_TEST_COMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_COMPLEX)); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) { + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + } + } + LDB = *n+1; + B=(CBLAS_TEST_COMPLEX* )malloc((*m)*LDB*sizeof(CBLAS_TEST_COMPLEX)); + for( i=0; i<*m; i++ ) + for( j=0; j<*n; j++ ) { + B[i*LDB+j].real=b[j*(*ldb)+i].real; + B[i*LDB+j].imag=b[j*(*ldb)+i].imag; + } + cblas_ctrsm(CblasRowMajor, side, uplo, trans, diag, *m, *n, alpha, + A, LDA, B, LDB ); + for( j=0; j<*n; j++ ) + for( i=0; i<*m; i++ ) { + b[j*(*ldb)+i].real=B[i*LDB+j].real; + b[j*(*ldb)+i].imag=B[i*LDB+j].imag; + } + free(A); + free(B); + } + else if (*order == TEST_COL_MJR) + cblas_ctrsm(CblasColMajor, side, uplo, trans, diag, *m, *n, alpha, + a, *lda, b, *ldb); + else + cblas_ctrsm(UNDEFINED, side, uplo, trans, diag, *m, *n, alpha, + a, *lda, b, *ldb); +} diff --git a/CBLAS/testing/c_cblat1.f b/CBLAS/testing/c_cblat1.f new file mode 100644 index 000000000..c741ce506 --- /dev/null +++ b/CBLAS/testing/c_cblat1.f @@ -0,0 +1,682 @@ + PROGRAM CCBLAT1 +* Test program for the COMPLEX Level 1 CBLAS. +* Based upon the original CBLAS test routine together with: +* F06GAF Example Program Text +* .. Parameters .. + INTEGER NOUT + PARAMETER (NOUT=6) +* .. Scalars in Common .. + INTEGER ICASE, INCX, INCY, MODE, N + LOGICAL PASS +* .. Local Scalars .. + REAL SFAC + INTEGER IC +* .. External Subroutines .. + EXTERNAL CHECK1, CHECK2, HEADER +* .. Common blocks .. + COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS +* .. Data statements .. + DATA SFAC/9.765625E-4/ +* .. Executable Statements .. + WRITE (NOUT,99999) + DO 20 IC = 1, 10 + ICASE = IC + CALL HEADER +* +* Initialize PASS, INCX, INCY, and MODE for a new case. +* The value 9999 for INCX, INCY or MODE will appear in the +* detailed output, if any, for cases that do not involve +* these parameters. +* + PASS = .TRUE. + INCX = 9999 + INCY = 9999 + MODE = 9999 + IF (ICASE.LE.5) THEN + CALL CHECK2(SFAC) + ELSE IF (ICASE.GE.6) THEN + CALL CHECK1(SFAC) + END IF +* -- Print + IF (PASS) WRITE (NOUT,99998) + 20 CONTINUE + STOP +* +99999 FORMAT (' Complex CBLAS Test Program Results',/1X) +99998 FORMAT (' ----- PASS -----') + END + SUBROUTINE HEADER +* .. Parameters .. + INTEGER NOUT + PARAMETER (NOUT=6) +* .. Scalars in Common .. + INTEGER ICASE, INCX, INCY, MODE, N + LOGICAL PASS +* .. Local Arrays .. + CHARACTER*15 L(10) +* .. Common blocks .. + COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS +* .. Data statements .. + DATA L(1)/'CBLAS_CDOTC'/ + DATA L(2)/'CBLAS_CDOTU'/ + DATA L(3)/'CBLAS_CAXPY'/ + DATA L(4)/'CBLAS_CCOPY'/ + DATA L(5)/'CBLAS_CSWAP'/ + DATA L(6)/'CBLAS_SCNRM2'/ + DATA L(7)/'CBLAS_SCASUM'/ + DATA L(8)/'CBLAS_CSCAL'/ + DATA L(9)/'CBLAS_CSSCAL'/ + DATA L(10)/'CBLAS_ICAMAX'/ +* .. Executable Statements .. + WRITE (NOUT,99999) ICASE, L(ICASE) + RETURN +* +99999 FORMAT (/' Test of subprogram number',I3,9X,A15) + END + SUBROUTINE CHECK1(SFAC) +* .. Parameters .. + INTEGER NOUT + PARAMETER (NOUT=6) +* .. Scalar Arguments .. + REAL SFAC +* .. Scalars in Common .. + INTEGER ICASE, INCX, INCY, MODE, N + LOGICAL PASS +* .. Local Scalars .. + COMPLEX CA + REAL SA + INTEGER I, J, LEN, NP1 +* .. Local Arrays .. + COMPLEX CTRUE5(8,5,2), CTRUE6(8,5,2), CV(8,5,2), CX(8), + + MWPCS(5), MWPCT(5) + REAL STRUE2(5), STRUE4(5) + INTEGER ITRUE3(5) +* .. External Functions .. + REAL SCASUMTEST, SCNRM2TEST + INTEGER ICAMAXTEST + EXTERNAL SCASUMTEST, SCNRM2TEST, ICAMAXTEST +* .. External Subroutines .. + EXTERNAL CSCAL, CSSCALTEST, CTEST, ITEST1, STEST1 +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. Common blocks .. + COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS +* .. Data statements .. + DATA SA, CA/0.3E0, (0.4E0,-0.7E0)/ + DATA ((CV(I,J,1),I=1,8),J=1,5)/(0.1E0,0.1E0), + + (1.0E0,2.0E0), (1.0E0,2.0E0), (1.0E0,2.0E0), + + (1.0E0,2.0E0), (1.0E0,2.0E0), (1.0E0,2.0E0), + + (1.0E0,2.0E0), (0.3E0,-0.4E0), (3.0E0,4.0E0), + + (3.0E0,4.0E0), (3.0E0,4.0E0), (3.0E0,4.0E0), + + (3.0E0,4.0E0), (3.0E0,4.0E0), (3.0E0,4.0E0), + + (0.1E0,-0.3E0), (0.5E0,-0.1E0), (5.0E0,6.0E0), + + (5.0E0,6.0E0), (5.0E0,6.0E0), (5.0E0,6.0E0), + + (5.0E0,6.0E0), (5.0E0,6.0E0), (0.1E0,0.1E0), + + (-0.6E0,0.1E0), (0.1E0,-0.3E0), (7.0E0,8.0E0), + + (7.0E0,8.0E0), (7.0E0,8.0E0), (7.0E0,8.0E0), + + (7.0E0,8.0E0), (0.3E0,0.1E0), (0.1E0,0.4E0), + + (0.4E0,0.1E0), (0.1E0,0.2E0), (2.0E0,3.0E0), + + (2.0E0,3.0E0), (2.0E0,3.0E0), (2.0E0,3.0E0)/ + DATA ((CV(I,J,2),I=1,8),J=1,5)/(0.1E0,0.1E0), + + (4.0E0,5.0E0), (4.0E0,5.0E0), (4.0E0,5.0E0), + + (4.0E0,5.0E0), (4.0E0,5.0E0), (4.0E0,5.0E0), + + (4.0E0,5.0E0), (0.3E0,-0.4E0), (6.0E0,7.0E0), + + (6.0E0,7.0E0), (6.0E0,7.0E0), (6.0E0,7.0E0), + + (6.0E0,7.0E0), (6.0E0,7.0E0), (6.0E0,7.0E0), + + (0.1E0,-0.3E0), (8.0E0,9.0E0), (0.5E0,-0.1E0), + + (2.0E0,5.0E0), (2.0E0,5.0E0), (2.0E0,5.0E0), + + (2.0E0,5.0E0), (2.0E0,5.0E0), (0.1E0,0.1E0), + + (3.0E0,6.0E0), (-0.6E0,0.1E0), (4.0E0,7.0E0), + + (0.1E0,-0.3E0), (7.0E0,2.0E0), (7.0E0,2.0E0), + + (7.0E0,2.0E0), (0.3E0,0.1E0), (5.0E0,8.0E0), + + (0.1E0,0.4E0), (6.0E0,9.0E0), (0.4E0,0.1E0), + + (8.0E0,3.0E0), (0.1E0,0.2E0), (9.0E0,4.0E0)/ + DATA STRUE2/0.0E0, 0.5E0, 0.6E0, 0.7E0, 0.7E0/ + DATA STRUE4/0.0E0, 0.7E0, 1.0E0, 1.3E0, 1.7E0/ + DATA ((CTRUE5(I,J,1),I=1,8),J=1,5)/(0.1E0,0.1E0), + + (1.0E0,2.0E0), (1.0E0,2.0E0), (1.0E0,2.0E0), + + (1.0E0,2.0E0), (1.0E0,2.0E0), (1.0E0,2.0E0), + + (1.0E0,2.0E0), (-0.16E0,-0.37E0), (3.0E0,4.0E0), + + (3.0E0,4.0E0), (3.0E0,4.0E0), (3.0E0,4.0E0), + + (3.0E0,4.0E0), (3.0E0,4.0E0), (3.0E0,4.0E0), + + (-0.17E0,-0.19E0), (0.13E0,-0.39E0), + + (5.0E0,6.0E0), (5.0E0,6.0E0), (5.0E0,6.0E0), + + (5.0E0,6.0E0), (5.0E0,6.0E0), (5.0E0,6.0E0), + + (0.11E0,-0.03E0), (-0.17E0,0.46E0), + + (-0.17E0,-0.19E0), (7.0E0,8.0E0), (7.0E0,8.0E0), + + (7.0E0,8.0E0), (7.0E0,8.0E0), (7.0E0,8.0E0), + + (0.19E0,-0.17E0), (0.32E0,0.09E0), + + (0.23E0,-0.24E0), (0.18E0,0.01E0), + + (2.0E0,3.0E0), (2.0E0,3.0E0), (2.0E0,3.0E0), + + (2.0E0,3.0E0)/ + DATA ((CTRUE5(I,J,2),I=1,8),J=1,5)/(0.1E0,0.1E0), + + (4.0E0,5.0E0), (4.0E0,5.0E0), (4.0E0,5.0E0), + + (4.0E0,5.0E0), (4.0E0,5.0E0), (4.0E0,5.0E0), + + (4.0E0,5.0E0), (-0.16E0,-0.37E0), (6.0E0,7.0E0), + + (6.0E0,7.0E0), (6.0E0,7.0E0), (6.0E0,7.0E0), + + (6.0E0,7.0E0), (6.0E0,7.0E0), (6.0E0,7.0E0), + + (-0.17E0,-0.19E0), (8.0E0,9.0E0), + + (0.13E0,-0.39E0), (2.0E0,5.0E0), (2.0E0,5.0E0), + + (2.0E0,5.0E0), (2.0E0,5.0E0), (2.0E0,5.0E0), + + (0.11E0,-0.03E0), (3.0E0,6.0E0), + + (-0.17E0,0.46E0), (4.0E0,7.0E0), + + (-0.17E0,-0.19E0), (7.0E0,2.0E0), (7.0E0,2.0E0), + + (7.0E0,2.0E0), (0.19E0,-0.17E0), (5.0E0,8.0E0), + + (0.32E0,0.09E0), (6.0E0,9.0E0), + + (0.23E0,-0.24E0), (8.0E0,3.0E0), + + (0.18E0,0.01E0), (9.0E0,4.0E0)/ + DATA ((CTRUE6(I,J,1),I=1,8),J=1,5)/(0.1E0,0.1E0), + + (1.0E0,2.0E0), (1.0E0,2.0E0), (1.0E0,2.0E0), + + (1.0E0,2.0E0), (1.0E0,2.0E0), (1.0E0,2.0E0), + + (1.0E0,2.0E0), (0.09E0,-0.12E0), (3.0E0,4.0E0), + + (3.0E0,4.0E0), (3.0E0,4.0E0), (3.0E0,4.0E0), + + (3.0E0,4.0E0), (3.0E0,4.0E0), (3.0E0,4.0E0), + + (0.03E0,-0.09E0), (0.15E0,-0.03E0), + + (5.0E0,6.0E0), (5.0E0,6.0E0), (5.0E0,6.0E0), + + (5.0E0,6.0E0), (5.0E0,6.0E0), (5.0E0,6.0E0), + + (0.03E0,0.03E0), (-0.18E0,0.03E0), + + (0.03E0,-0.09E0), (7.0E0,8.0E0), (7.0E0,8.0E0), + + (7.0E0,8.0E0), (7.0E0,8.0E0), (7.0E0,8.0E0), + + (0.09E0,0.03E0), (0.03E0,0.12E0), + + (0.12E0,0.03E0), (0.03E0,0.06E0), (2.0E0,3.0E0), + + (2.0E0,3.0E0), (2.0E0,3.0E0), (2.0E0,3.0E0)/ + DATA ((CTRUE6(I,J,2),I=1,8),J=1,5)/(0.1E0,0.1E0), + + (4.0E0,5.0E0), (4.0E0,5.0E0), (4.0E0,5.0E0), + + (4.0E0,5.0E0), (4.0E0,5.0E0), (4.0E0,5.0E0), + + (4.0E0,5.0E0), (0.09E0,-0.12E0), (6.0E0,7.0E0), + + (6.0E0,7.0E0), (6.0E0,7.0E0), (6.0E0,7.0E0), + + (6.0E0,7.0E0), (6.0E0,7.0E0), (6.0E0,7.0E0), + + (0.03E0,-0.09E0), (8.0E0,9.0E0), + + (0.15E0,-0.03E0), (2.0E0,5.0E0), (2.0E0,5.0E0), + + (2.0E0,5.0E0), (2.0E0,5.0E0), (2.0E0,5.0E0), + + (0.03E0,0.03E0), (3.0E0,6.0E0), + + (-0.18E0,0.03E0), (4.0E0,7.0E0), + + (0.03E0,-0.09E0), (7.0E0,2.0E0), (7.0E0,2.0E0), + + (7.0E0,2.0E0), (0.09E0,0.03E0), (5.0E0,8.0E0), + + (0.03E0,0.12E0), (6.0E0,9.0E0), (0.12E0,0.03E0), + + (8.0E0,3.0E0), (0.03E0,0.06E0), (9.0E0,4.0E0)/ + DATA ITRUE3/0, 1, 2, 2, 2/ +* .. Executable Statements .. + DO 60 INCX = 1, 2 + DO 40 NP1 = 1, 5 + N = NP1 - 1 + LEN = 2*MAX(N,1) +* .. Set vector arguments .. + DO 20 I = 1, LEN + CX(I) = CV(I,NP1,INCX) + 20 CONTINUE + IF (ICASE.EQ.6) THEN +* .. SCNRM2TEST .. + CALL STEST1(SCNRM2TEST(N,CX,INCX),STRUE2(NP1), + + STRUE2(NP1), SFAC) + ELSE IF (ICASE.EQ.7) THEN +* .. SCASUMTEST .. + CALL STEST1(SCASUMTEST(N,CX,INCX),STRUE4(NP1), + + STRUE4(NP1),SFAC) + ELSE IF (ICASE.EQ.8) THEN +* .. CSCAL .. + CALL CSCAL(N,CA,CX,INCX) + CALL CTEST(LEN,CX,CTRUE5(1,NP1,INCX),CTRUE5(1,NP1,INCX), + + SFAC) + ELSE IF (ICASE.EQ.9) THEN +* .. CSSCALTEST .. + CALL CSSCALTEST(N,SA,CX,INCX) + CALL CTEST(LEN,CX,CTRUE6(1,NP1,INCX),CTRUE6(1,NP1,INCX), + + SFAC) + ELSE IF (ICASE.EQ.10) THEN +* .. ICAMAXTEST .. + CALL ITEST1(ICAMAXTEST(N,CX,INCX),ITRUE3(NP1)) + ELSE + WRITE (NOUT,*) ' Shouldn''t be here in CHECK1' + STOP + END IF +* + 40 CONTINUE + 60 CONTINUE +* + INCX = 1 + IF (ICASE.EQ.8) THEN +* CSCAL +* Add a test for alpha equal to zero. + CA = (0.0E0,0.0E0) + DO 80 I = 1, 5 + MWPCT(I) = (0.0E0,0.0E0) + MWPCS(I) = (1.0E0,1.0E0) + 80 CONTINUE + CALL CSCAL(5,CA,CX,INCX) + CALL CTEST(5,CX,MWPCT,MWPCS,SFAC) + ELSE IF (ICASE.EQ.9) THEN +* CSSCALTEST +* Add a test for alpha equal to zero. + SA = 0.0E0 + DO 100 I = 1, 5 + MWPCT(I) = (0.0E0,0.0E0) + MWPCS(I) = (1.0E0,1.0E0) + 100 CONTINUE + CALL CSSCALTEST(5,SA,CX,INCX) + CALL CTEST(5,CX,MWPCT,MWPCS,SFAC) +* Add a test for alpha equal to one. + SA = 1.0E0 + DO 120 I = 1, 5 + MWPCT(I) = CX(I) + MWPCS(I) = CX(I) + 120 CONTINUE + CALL CSSCALTEST(5,SA,CX,INCX) + CALL CTEST(5,CX,MWPCT,MWPCS,SFAC) +* Add a test for alpha equal to minus one. + SA = -1.0E0 + DO 140 I = 1, 5 + MWPCT(I) = -CX(I) + MWPCS(I) = -CX(I) + 140 CONTINUE + CALL CSSCALTEST(5,SA,CX,INCX) + CALL CTEST(5,CX,MWPCT,MWPCS,SFAC) + END IF + RETURN + END + SUBROUTINE CHECK2(SFAC) +* .. Parameters .. + INTEGER NOUT + PARAMETER (NOUT=6) +* .. Scalar Arguments .. + REAL SFAC +* .. Scalars in Common .. + INTEGER ICASE, INCX, INCY, MODE, N + LOGICAL PASS +* .. Local Scalars .. + COMPLEX CA,CTEMP + INTEGER I, J, KI, KN, KSIZE, LENX, LENY, MX, MY +* .. Local Arrays .. + COMPLEX CDOT(1), CSIZE1(4), CSIZE2(7,2), CSIZE3(14), + + CT10X(7,4,4), CT10Y(7,4,4), CT6(4,4), CT7(4,4), + + CT8(7,4,4), CX(7), CX1(7), CY(7), CY1(7) + INTEGER INCXS(4), INCYS(4), LENS(4,2), NS(4) +* .. External Functions .. + EXTERNAL CDOTCTEST, CDOTUTEST +* .. External Subroutines .. + EXTERNAL CAXPYTEST, CCOPYTEST, CSWAPTEST, CTEST +* .. Intrinsic Functions .. + INTRINSIC ABS, MIN +* .. Common blocks .. + COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS +* .. Data statements .. + DATA CA/(0.4E0,-0.7E0)/ + DATA INCXS/1, 2, -2, -1/ + DATA INCYS/1, -2, 1, -2/ + DATA LENS/1, 1, 2, 4, 1, 1, 3, 7/ + DATA NS/0, 1, 2, 4/ + DATA CX1/(0.7E0,-0.8E0), (-0.4E0,-0.7E0), + + (-0.1E0,-0.9E0), (0.2E0,-0.8E0), + + (-0.9E0,-0.4E0), (0.1E0,0.4E0), (-0.6E0,0.6E0)/ + DATA CY1/(0.6E0,-0.6E0), (-0.9E0,0.5E0), + + (0.7E0,-0.6E0), (0.1E0,-0.5E0), (-0.1E0,-0.2E0), + + (-0.5E0,-0.3E0), (0.8E0,-0.7E0)/ + DATA ((CT8(I,J,1),I=1,7),J=1,4)/(0.6E0,-0.6E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.32E0,-1.41E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.32E0,-1.41E0), + + (-1.55E0,0.5E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.32E0,-1.41E0), (-1.55E0,0.5E0), + + (0.03E0,-0.89E0), (-0.38E0,-0.96E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0)/ + DATA ((CT8(I,J,2),I=1,7),J=1,4)/(0.6E0,-0.6E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.32E0,-1.41E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (-0.07E0,-0.89E0), + + (-0.9E0,0.5E0), (0.42E0,-1.41E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.78E0,0.06E0), (-0.9E0,0.5E0), + + (0.06E0,-0.13E0), (0.1E0,-0.5E0), + + (-0.77E0,-0.49E0), (-0.5E0,-0.3E0), + + (0.52E0,-1.51E0)/ + DATA ((CT8(I,J,3),I=1,7),J=1,4)/(0.6E0,-0.6E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.32E0,-1.41E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (-0.07E0,-0.89E0), + + (-1.18E0,-0.31E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.78E0,0.06E0), (-1.54E0,0.97E0), + + (0.03E0,-0.89E0), (-0.18E0,-1.31E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0)/ + DATA ((CT8(I,J,4),I=1,7),J=1,4)/(0.6E0,-0.6E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.32E0,-1.41E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.32E0,-1.41E0), (-0.9E0,0.5E0), + + (0.05E0,-0.6E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.32E0,-1.41E0), + + (-0.9E0,0.5E0), (0.05E0,-0.6E0), (0.1E0,-0.5E0), + + (-0.77E0,-0.49E0), (-0.5E0,-0.3E0), + + (0.32E0,-1.16E0)/ + DATA CT7/(0.0E0,0.0E0), (-0.06E0,-0.90E0), + + (0.65E0,-0.47E0), (-0.34E0,-1.22E0), + + (0.0E0,0.0E0), (-0.06E0,-0.90E0), + + (-0.59E0,-1.46E0), (-1.04E0,-0.04E0), + + (0.0E0,0.0E0), (-0.06E0,-0.90E0), + + (-0.83E0,0.59E0), (0.07E0,-0.37E0), + + (0.0E0,0.0E0), (-0.06E0,-0.90E0), + + (-0.76E0,-1.15E0), (-1.33E0,-1.82E0)/ + DATA CT6/(0.0E0,0.0E0), (0.90E0,0.06E0), + + (0.91E0,-0.77E0), (1.80E0,-0.10E0), + + (0.0E0,0.0E0), (0.90E0,0.06E0), (1.45E0,0.74E0), + + (0.20E0,0.90E0), (0.0E0,0.0E0), (0.90E0,0.06E0), + + (-0.55E0,0.23E0), (0.83E0,-0.39E0), + + (0.0E0,0.0E0), (0.90E0,0.06E0), (1.04E0,0.79E0), + + (1.95E0,1.22E0)/ + DATA ((CT10X(I,J,1),I=1,7),J=1,4)/(0.7E0,-0.8E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.6E0,-0.6E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.6E0,-0.6E0), (-0.9E0,0.5E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.6E0,-0.6E0), + + (-0.9E0,0.5E0), (0.7E0,-0.6E0), (0.1E0,-0.5E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0)/ + DATA ((CT10X(I,J,2),I=1,7),J=1,4)/(0.7E0,-0.8E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.6E0,-0.6E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.7E0,-0.6E0), (-0.4E0,-0.7E0), + + (0.6E0,-0.6E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.8E0,-0.7E0), + + (-0.4E0,-0.7E0), (-0.1E0,-0.2E0), + + (0.2E0,-0.8E0), (0.7E0,-0.6E0), (0.1E0,0.4E0), + + (0.6E0,-0.6E0)/ + DATA ((CT10X(I,J,3),I=1,7),J=1,4)/(0.7E0,-0.8E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.6E0,-0.6E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (-0.9E0,0.5E0), (-0.4E0,-0.7E0), + + (0.6E0,-0.6E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.1E0,-0.5E0), + + (-0.4E0,-0.7E0), (0.7E0,-0.6E0), (0.2E0,-0.8E0), + + (-0.9E0,0.5E0), (0.1E0,0.4E0), (0.6E0,-0.6E0)/ + DATA ((CT10X(I,J,4),I=1,7),J=1,4)/(0.7E0,-0.8E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.6E0,-0.6E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.6E0,-0.6E0), (0.7E0,-0.6E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.6E0,-0.6E0), + + (0.7E0,-0.6E0), (-0.1E0,-0.2E0), (0.8E0,-0.7E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0)/ + DATA ((CT10Y(I,J,1),I=1,7),J=1,4)/(0.6E0,-0.6E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.7E0,-0.8E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.7E0,-0.8E0), (-0.4E0,-0.7E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.7E0,-0.8E0), + + (-0.4E0,-0.7E0), (-0.1E0,-0.9E0), + + (0.2E0,-0.8E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0)/ + DATA ((CT10Y(I,J,2),I=1,7),J=1,4)/(0.6E0,-0.6E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.7E0,-0.8E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (-0.1E0,-0.9E0), (-0.9E0,0.5E0), + + (0.7E0,-0.8E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (-0.6E0,0.6E0), + + (-0.9E0,0.5E0), (-0.9E0,-0.4E0), (0.1E0,-0.5E0), + + (-0.1E0,-0.9E0), (-0.5E0,-0.3E0), + + (0.7E0,-0.8E0)/ + DATA ((CT10Y(I,J,3),I=1,7),J=1,4)/(0.6E0,-0.6E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.7E0,-0.8E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (-0.1E0,-0.9E0), (0.7E0,-0.8E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (-0.6E0,0.6E0), + + (-0.9E0,-0.4E0), (-0.1E0,-0.9E0), + + (0.7E0,-0.8E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0)/ + DATA ((CT10Y(I,J,4),I=1,7),J=1,4)/(0.6E0,-0.6E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.7E0,-0.8E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.7E0,-0.8E0), (-0.9E0,0.5E0), + + (-0.4E0,-0.7E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.7E0,-0.8E0), + + (-0.9E0,0.5E0), (-0.4E0,-0.7E0), (0.1E0,-0.5E0), + + (-0.1E0,-0.9E0), (-0.5E0,-0.3E0), + + (0.2E0,-0.8E0)/ + DATA CSIZE1/(0.0E0,0.0E0), (0.9E0,0.9E0), + + (1.63E0,1.73E0), (2.90E0,2.78E0)/ + DATA CSIZE3/(0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (1.17E0,1.17E0), + + (1.17E0,1.17E0), (1.17E0,1.17E0), + + (1.17E0,1.17E0), (1.17E0,1.17E0), + + (1.17E0,1.17E0), (1.17E0,1.17E0)/ + DATA CSIZE2/(0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + + (0.0E0,0.0E0), (0.0E0,0.0E0), (1.54E0,1.54E0), + + (1.54E0,1.54E0), (1.54E0,1.54E0), + + (1.54E0,1.54E0), (1.54E0,1.54E0), + + (1.54E0,1.54E0), (1.54E0,1.54E0)/ +* .. Executable Statements .. + DO 60 KI = 1, 4 + INCX = INCXS(KI) + INCY = INCYS(KI) + MX = ABS(INCX) + MY = ABS(INCY) +* + DO 40 KN = 1, 4 + N = NS(KN) + KSIZE = MIN(2,KN) + LENX = LENS(KN,MX) + LENY = LENS(KN,MY) +* .. initialize all argument arrays .. + DO 20 I = 1, 7 + CX(I) = CX1(I) + CY(I) = CY1(I) + 20 CONTINUE + IF (ICASE.EQ.1) THEN +* .. CDOTCTEST .. + CALL CDOTCTEST(N,CX,INCX,CY,INCY,CTEMP) + CDOT(1) = CTEMP + CALL CTEST(1,CDOT,CT6(KN,KI),CSIZE1(KN),SFAC) + ELSE IF (ICASE.EQ.2) THEN +* .. CDOTUTEST .. + CALL CDOTUTEST(N,CX,INCX,CY,INCY,CTEMP) + CDOT(1) = CTEMP + CALL CTEST(1,CDOT,CT7(KN,KI),CSIZE1(KN),SFAC) + ELSE IF (ICASE.EQ.3) THEN +* .. CAXPYTEST .. + CALL CAXPYTEST(N,CA,CX,INCX,CY,INCY) + CALL CTEST(LENY,CY,CT8(1,KN,KI),CSIZE2(1,KSIZE),SFAC) + ELSE IF (ICASE.EQ.4) THEN +* .. CCOPYTEST .. + CALL CCOPYTEST(N,CX,INCX,CY,INCY) + CALL CTEST(LENY,CY,CT10Y(1,KN,KI),CSIZE3,1.0E0) + ELSE IF (ICASE.EQ.5) THEN +* .. CSWAPTEST .. + CALL CSWAPTEST(N,CX,INCX,CY,INCY) + CALL CTEST(LENX,CX,CT10X(1,KN,KI),CSIZE3,1.0E0) + CALL CTEST(LENY,CY,CT10Y(1,KN,KI),CSIZE3,1.0E0) + ELSE + WRITE (NOUT,*) ' Shouldn''t be here in CHECK2' + STOP + END IF +* + 40 CONTINUE + 60 CONTINUE + RETURN + END + SUBROUTINE STEST(LEN,SCOMP,STRUE,SSIZE,SFAC) +* ********************************* STEST ************************** +* +* THIS SUBR COMPARES ARRAYS SCOMP() AND STRUE() OF LENGTH LEN TO +* SEE IF THE TERM BY TERM DIFFERENCES, MULTIPLIED BY SFAC, ARE +* NEGLIGIBLE. +* +* C. L. LAWSON, JPL, 1974 DEC 10 +* +* .. Parameters .. + INTEGER NOUT + PARAMETER (NOUT=6) +* .. Scalar Arguments .. + REAL SFAC + INTEGER LEN +* .. Array Arguments .. + REAL SCOMP(LEN), SSIZE(LEN), STRUE(LEN) +* .. Scalars in Common .. + INTEGER ICASE, INCX, INCY, MODE, N + LOGICAL PASS +* .. Local Scalars .. + REAL SD + INTEGER I +* .. External Functions .. + REAL SDIFF + EXTERNAL SDIFF +* .. Intrinsic Functions .. + INTRINSIC ABS +* .. Common blocks .. + COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS +* .. Executable Statements .. +* + DO 40 I = 1, LEN + SD = SCOMP(I) - STRUE(I) + IF (SDIFF(ABS(SSIZE(I))+ABS(SFAC*SD),ABS(SSIZE(I))).EQ.0.0E0) + + GO TO 40 +* +* HERE SCOMP(I) IS NOT CLOSE TO STRUE(I). +* + IF ( .NOT. PASS) GO TO 20 +* PRINT FAIL MESSAGE AND HEADER. + PASS = .FALSE. + WRITE (NOUT,99999) + WRITE (NOUT,99998) + 20 WRITE (NOUT,99997) ICASE, N, INCX, INCY, MODE, I, SCOMP(I), + + STRUE(I), SD, SSIZE(I) + 40 CONTINUE + RETURN +* +99999 FORMAT (' FAIL') +99998 FORMAT (/' CASE N INCX INCY MODE I ', + + ' COMP(I) TRUE(I) DIFFERENCE', + + ' SIZE(I)',/1X) +99997 FORMAT (1X,I4,I3,3I5,I3,2E36.8,2E12.4) + END + SUBROUTINE STEST1(SCOMP1,STRUE1,SSIZE,SFAC) +* ************************* STEST1 ***************************** +* +* THIS IS AN INTERFACE SUBROUTINE TO ACCOMODATE THE FORTRAN +* REQUIREMENT THAT WHEN A DUMMY ARGUMENT IS AN ARRAY, THE +* ACTUAL ARGUMENT MUST ALSO BE AN ARRAY OR AN ARRAY ELEMENT. +* +* C.L. LAWSON, JPL, 1978 DEC 6 +* +* .. Scalar Arguments .. + REAL SCOMP1, SFAC, STRUE1 +* .. Array Arguments .. + REAL SSIZE(*) +* .. Local Arrays .. + REAL SCOMP(1), STRUE(1) +* .. External Subroutines .. + EXTERNAL STEST +* .. Executable Statements .. +* + SCOMP(1) = SCOMP1 + STRUE(1) = STRUE1 + CALL STEST(1,SCOMP,STRUE,SSIZE,SFAC) +* + RETURN + END + REAL FUNCTION SDIFF(SA,SB) +* ********************************* SDIFF ************************** +* COMPUTES DIFFERENCE OF TWO NUMBERS. C. L. LAWSON, JPL 1974 FEB 15 +* +* .. Scalar Arguments .. + REAL SA, SB +* .. Executable Statements .. + SDIFF = SA - SB + RETURN + END + SUBROUTINE CTEST(LEN,CCOMP,CTRUE,CSIZE,SFAC) +* **************************** CTEST ***************************** +* +* C.L. LAWSON, JPL, 1978 DEC 6 +* +* .. Scalar Arguments .. + REAL SFAC + INTEGER LEN +* .. Array Arguments .. + COMPLEX CCOMP(LEN), CSIZE(LEN), CTRUE(LEN) +* .. Local Scalars .. + INTEGER I +* .. Local Arrays .. + REAL SCOMP(20), SSIZE(20), STRUE(20) +* .. External Subroutines .. + EXTERNAL STEST +* .. Intrinsic Functions .. + INTRINSIC AIMAG, REAL +* .. Executable Statements .. + DO 20 I = 1, LEN + SCOMP(2*I-1) = REAL(CCOMP(I)) + SCOMP(2*I) = AIMAG(CCOMP(I)) + STRUE(2*I-1) = REAL(CTRUE(I)) + STRUE(2*I) = AIMAG(CTRUE(I)) + SSIZE(2*I-1) = REAL(CSIZE(I)) + SSIZE(2*I) = AIMAG(CSIZE(I)) + 20 CONTINUE +* + CALL STEST(2*LEN,SCOMP,STRUE,SSIZE,SFAC) + RETURN + END + SUBROUTINE ITEST1(ICOMP,ITRUE) +* ********************************* ITEST1 ************************* +* +* THIS SUBROUTINE COMPARES THE VARIABLES ICOMP AND ITRUE FOR +* EQUALITY. +* C. L. LAWSON, JPL, 1974 DEC 10 +* +* .. Parameters .. + INTEGER NOUT + PARAMETER (NOUT=6) +* .. Scalar Arguments .. + INTEGER ICOMP, ITRUE +* .. Scalars in Common .. + INTEGER ICASE, INCX, INCY, MODE, N + LOGICAL PASS +* .. Local Scalars .. + INTEGER ID +* .. Common blocks .. + COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS +* .. Executable Statements .. + IF (ICOMP.EQ.ITRUE) GO TO 40 +* +* HERE ICOMP IS NOT EQUAL TO ITRUE. +* + IF ( .NOT. PASS) GO TO 20 +* PRINT FAIL MESSAGE AND HEADER. + PASS = .FALSE. + WRITE (NOUT,99999) + WRITE (NOUT,99998) + 20 ID = ICOMP - ITRUE + WRITE (NOUT,99997) ICASE, N, INCX, INCY, MODE, ICOMP, ITRUE, ID + 40 CONTINUE + RETURN +* +99999 FORMAT (' FAIL') +99998 FORMAT (/' CASE N INCX INCY MODE ', + + ' COMP TRUE DIFFERENCE', + + /1X) +99997 FORMAT (1X,I4,I3,3I5,2I36,I12) + END diff --git a/CBLAS/testing/c_cblat2.f b/CBLAS/testing/c_cblat2.f new file mode 100644 index 000000000..545ba4b9f --- /dev/null +++ b/CBLAS/testing/c_cblat2.f @@ -0,0 +1,2932 @@ + PROGRAM CBLAT2 +* +* Test program for the COMPLEX Level 2 Blas. +* +* The program must be driven by a short data file. The first 17 records +* of the file are read using list-directed input, the last 17 records +* are read using the format ( A12, L2 ). An annotated example of a data +* file can be obtained by deleting the first 3 characters from the +* following 34 lines: +* 'CBLAT2.SNAP' NAME OF SNAPSHOT OUTPUT FILE +* -1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0) +* F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD. +* F LOGICAL FLAG, T TO STOP ON FAILURES. +* T LOGICAL FLAG, T TO TEST ERROR EXITS. +* 2 0 TO TEST COLUMN-MAJOR, 1 TO TEST ROW-MAJOR, 2 TO TEST BOTH +* 16.0 THRESHOLD VALUE OF TEST RATIO +* 6 NUMBER OF VALUES OF N +* 0 1 2 3 5 9 VALUES OF N +* 4 NUMBER OF VALUES OF K +* 0 1 2 4 VALUES OF K +* 4 NUMBER OF VALUES OF INCX AND INCY +* 1 2 -1 -2 VALUES OF INCX AND INCY +* 3 NUMBER OF VALUES OF ALPHA +* (0.0,0.0) (1.0,0.0) (0.7,-0.9) VALUES OF ALPHA +* 3 NUMBER OF VALUES OF BETA +* (0.0,0.0) (1.0,0.0) (1.3,-1.1) VALUES OF BETA +* cblas_cgemv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_cgbmv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_chemv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_chbmv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_chpmv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_ctrmv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_ctbmv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_ctpmv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_ctrsv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_ctbsv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_ctpsv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_cgerc T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_cgeru T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_cher T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_chpr T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_cher2 T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_chpr2 T PUT F FOR NO TEST. SAME COLUMNS. +* +* See: +* +* Dongarra J. J., Du Croz J. J., Hammarling S. and Hanson R. J.. +* An extended set of Fortran Basic Linear Algebra Subprograms. +* +* Technical Memoranda Nos. 41 (revision 3) and 81, Mathematics +* and Computer Science Division, Argonne National Laboratory, +* 9700 South Cass Avenue, Argonne, Illinois 60439, US. +* +* Or +* +* NAG Technical Reports TR3/87 and TR4/87, Numerical Algorithms +* Group Ltd., NAG Central Office, 256 Banbury Road, Oxford +* OX2 7DE, UK, and Numerical Algorithms Group Inc., 1101 31st +* Street, Suite 100, Downers Grove, Illinois 60515-1263, USA. +* +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + INTEGER NIN, NOUT + PARAMETER ( NIN = 5, NOUT = 6 ) + INTEGER NSUBS + PARAMETER ( NSUBS = 17 ) + COMPLEX ZERO, ONE + PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) ) + REAL RZERO, RHALF, RONE + PARAMETER ( RZERO = 0.0, RHALF = 0.5, RONE = 1.0 ) + INTEGER NMAX, INCMAX + PARAMETER ( NMAX = 65, INCMAX = 2 ) + INTEGER NINMAX, NIDMAX, NKBMAX, NALMAX, NBEMAX + PARAMETER ( NINMAX = 7, NIDMAX = 9, NKBMAX = 7, + $ NALMAX = 7, NBEMAX = 7 ) +* .. Local Scalars .. + REAL EPS, ERR, THRESH + INTEGER I, ISNUM, J, N, NALF, NBET, NIDIM, NINC, NKB, + $ NTRA, LAYOUT + LOGICAL FATAL, LTESTT, REWI, SAME, SFATAL, TRACE, + $ TSTERR, CORDER, RORDER + CHARACTER*1 TRANS + CHARACTER*12 SNAMET + CHARACTER*32 SNAPS +* .. Local Arrays .. + COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), + $ ALF( NALMAX ), AS( NMAX*NMAX ), BET( NBEMAX ), + $ X( NMAX ), XS( NMAX*INCMAX ), + $ XX( NMAX*INCMAX ), Y( NMAX ), + $ YS( NMAX*INCMAX ), YT( NMAX ), + $ YY( NMAX*INCMAX ), Z( 2*NMAX ) + REAL G( NMAX ) + INTEGER IDIM( NIDMAX ), INC( NINMAX ), KB( NKBMAX ) + LOGICAL LTEST( NSUBS ) + CHARACTER*12 SNAMES( NSUBS ) +* .. External Functions .. + REAL SDIFF + LOGICAL LCE + EXTERNAL SDIFF, LCE +* .. External Subroutines .. + EXTERNAL CCHK1, CCHK2, CCHK3, CCHK4, CCHK5, CCHK6, + $ CC2CHKE, CMVCH +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, MIN +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK + CHARACTER*12 SRNAMT +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK + COMMON /SRNAMC/SRNAMT +* .. Data statements .. + DATA SNAMES/'cblas_cgemv ', 'cblas_cgbmv ', + $ 'cblas_chemv ','cblas_chbmv ','cblas_chpmv ', + $ 'cblas_ctrmv ','cblas_ctbmv ','cblas_ctpmv ', + $ 'cblas_ctrsv ','cblas_ctbsv ','cblas_ctpsv ', + $ 'cblas_cgerc ','cblas_cgeru ','cblas_cher ', + $ 'cblas_chpr ','cblas_cher2 ','cblas_chpr2 '/ +* .. Executable Statements .. +* + NOUTC = NOUT +* +* Read name and unit number for summary output file and open file. +* + READ( NIN, FMT = * )SNAPS + READ( NIN, FMT = * )NTRA + TRACE = NTRA.GE.0 + IF( TRACE )THEN + OPEN( NTRA, FILE = SNAPS ) + END IF +* Read the flag that directs rewinding of the snapshot file. + READ( NIN, FMT = * )REWI + REWI = REWI.AND.TRACE +* Read the flag that directs stopping on any failure. + READ( NIN, FMT = * )SFATAL +* Read the flag that indicates whether error exits are to be tested. + READ( NIN, FMT = * )TSTERR +* Read the flag that indicates whether row-major data layout to be tested. + READ( NIN, FMT = * )LAYOUT +* Read the threshold value of the test ratio + READ( NIN, FMT = * )THRESH +* +* Read and check the parameter values for the tests. +* +* Values of N + READ( NIN, FMT = * )NIDIM + IF( NIDIM.LT.1.OR.NIDIM.GT.NIDMAX )THEN + WRITE( NOUT, FMT = 9997 )'N', NIDMAX + GO TO 230 + END IF + READ( NIN, FMT = * )( IDIM( I ), I = 1, NIDIM ) + DO 10 I = 1, NIDIM + IF( IDIM( I ).LT.0.OR.IDIM( I ).GT.NMAX )THEN + WRITE( NOUT, FMT = 9996 )NMAX + GO TO 230 + END IF + 10 CONTINUE +* Values of K + READ( NIN, FMT = * )NKB + IF( NKB.LT.1.OR.NKB.GT.NKBMAX )THEN + WRITE( NOUT, FMT = 9997 )'K', NKBMAX + GO TO 230 + END IF + READ( NIN, FMT = * )( KB( I ), I = 1, NKB ) + DO 20 I = 1, NKB + IF( KB( I ).LT.0 )THEN + WRITE( NOUT, FMT = 9995 ) + GO TO 230 + END IF + 20 CONTINUE +* Values of INCX and INCY + READ( NIN, FMT = * )NINC + IF( NINC.LT.1.OR.NINC.GT.NINMAX )THEN + WRITE( NOUT, FMT = 9997 )'INCX AND INCY', NINMAX + GO TO 230 + END IF + READ( NIN, FMT = * )( INC( I ), I = 1, NINC ) + DO 30 I = 1, NINC + IF( INC( I ).EQ.0.OR.ABS( INC( I ) ).GT.INCMAX )THEN + WRITE( NOUT, FMT = 9994 )INCMAX + GO TO 230 + END IF + 30 CONTINUE +* Values of ALPHA + READ( NIN, FMT = * )NALF + IF( NALF.LT.1.OR.NALF.GT.NALMAX )THEN + WRITE( NOUT, FMT = 9997 )'ALPHA', NALMAX + GO TO 230 + END IF + READ( NIN, FMT = * )( ALF( I ), I = 1, NALF ) +* Values of BETA + READ( NIN, FMT = * )NBET + IF( NBET.LT.1.OR.NBET.GT.NBEMAX )THEN + WRITE( NOUT, FMT = 9997 )'BETA', NBEMAX + GO TO 230 + END IF + READ( NIN, FMT = * )( BET( I ), I = 1, NBET ) +* +* Report values of parameters. +* + WRITE( NOUT, FMT = 9993 ) + WRITE( NOUT, FMT = 9992 )( IDIM( I ), I = 1, NIDIM ) + WRITE( NOUT, FMT = 9991 )( KB( I ), I = 1, NKB ) + WRITE( NOUT, FMT = 9990 )( INC( I ), I = 1, NINC ) + WRITE( NOUT, FMT = 9989 )( ALF( I ), I = 1, NALF ) + WRITE( NOUT, FMT = 9988 )( BET( I ), I = 1, NBET ) + IF( .NOT.TSTERR )THEN + WRITE( NOUT, FMT = * ) + WRITE( NOUT, FMT = 9980 ) + END IF + WRITE( NOUT, FMT = * ) + WRITE( NOUT, FMT = 9999 )THRESH + WRITE( NOUT, FMT = * ) + + RORDER = .FALSE. + CORDER = .FALSE. + IF (LAYOUT.EQ.2) THEN + RORDER = .TRUE. + CORDER = .TRUE. + WRITE( *, FMT = 10002 ) + ELSE IF (LAYOUT.EQ.1) THEN + RORDER = .TRUE. + WRITE( *, FMT = 10001 ) + ELSE IF (LAYOUT.EQ.0) THEN + CORDER = .TRUE. + WRITE( *, FMT = 10000 ) + END IF + WRITE( *, FMT = * ) +* +* Read names of subroutines and flags which indicate +* whether they are to be tested. +* + DO 40 I = 1, NSUBS + LTEST( I ) = .FALSE. + 40 CONTINUE + 50 READ( NIN, FMT = 9984, END = 80 )SNAMET, LTESTT + DO 60 I = 1, NSUBS + IF( SNAMET.EQ.SNAMES( I ) ) + $ GO TO 70 + 60 CONTINUE + WRITE( NOUT, FMT = 9986 )SNAMET + STOP + 70 LTEST( I ) = LTESTT + GO TO 50 +* + 80 CONTINUE + CLOSE ( NIN ) +* +* Compute EPS (the machine precision). +* + EPS = RONE + 90 CONTINUE + IF( SDIFF( RONE + EPS, RONE ).EQ.RZERO ) + $ GO TO 100 + EPS = RHALF*EPS + GO TO 90 + 100 CONTINUE + EPS = EPS + EPS + WRITE( NOUT, FMT = 9998 )EPS +* +* Check the reliability of CMVCH using exact data. +* + N = MIN( 32, NMAX ) + DO 120 J = 1, N + DO 110 I = 1, N + A( I, J ) = MAX( I - J + 1, 0 ) + 110 CONTINUE + X( J ) = J + Y( J ) = ZERO + 120 CONTINUE + DO 130 J = 1, N + YY( J ) = J*( ( J + 1 )*J )/2 - ( ( J + 1 )*J*( J - 1 ) )/3 + 130 CONTINUE +* YY holds the exact result. On exit from CMVCH YT holds +* the result computed by CMVCH. + TRANS = 'N' + CALL CMVCH( TRANS, N, N, ONE, A, NMAX, X, 1, ZERO, Y, 1, YT, G, + $ YY, EPS, ERR, FATAL, NOUT, .TRUE. ) + SAME = LCE( YY, YT, N ) + IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN + WRITE( NOUT, FMT = 9985 )TRANS, SAME, ERR + STOP + END IF + TRANS = 'T' + CALL CMVCH( TRANS, N, N, ONE, A, NMAX, X, -1, ZERO, Y, -1, YT, G, + $ YY, EPS, ERR, FATAL, NOUT, .TRUE. ) + SAME = LCE( YY, YT, N ) + IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN + WRITE( NOUT, FMT = 9985 )TRANS, SAME, ERR + STOP + END IF +* +* Test each subroutine in turn. +* + DO 210 ISNUM = 1, NSUBS + WRITE( NOUT, FMT = * ) + IF( .NOT.LTEST( ISNUM ) )THEN +* Subprogram is not to be tested. + WRITE( NOUT, FMT = 9983 )SNAMES( ISNUM ) + ELSE + SRNAMT = SNAMES( ISNUM ) +* Test error exits. + IF( TSTERR )THEN + CALL CC2CHKE( SNAMES( ISNUM ) ) + WRITE( NOUT, FMT = * ) + END IF +* Test computations. + INFOT = 0 + OK = .TRUE. + FATAL = .FALSE. + GO TO ( 140, 140, 150, 150, 150, 160, 160, + $ 160, 160, 160, 160, 170, 170, 180, + $ 180, 190, 190 )ISNUM +* Test CGEMV, 01, and CGBMV, 02. + 140 IF (CORDER) THEN + CALL CCHK1( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, + $ NBET, BET, NINC, INC, NMAX, INCMAX, A, AA, AS, + $ X, XX, XS, Y, YY, YS, YT, G, 0 ) + END IF + IF (RORDER) THEN + CALL CCHK1( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, + $ NBET, BET, NINC, INC, NMAX, INCMAX, A, AA, AS, + $ X, XX, XS, Y, YY, YS, YT, G, 1 ) + END IF + GO TO 200 +* Test CHEMV, 03, CHBMV, 04, and CHPMV, 05. + 150 IF (CORDER) THEN + CALL CCHK2( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, + $ NBET, BET, NINC, INC, NMAX, INCMAX, A, AA, AS, + $ X, XX, XS, Y, YY, YS, YT, G, 0 ) + END IF + IF (RORDER) THEN + CALL CCHK2( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, + $ NBET, BET, NINC, INC, NMAX, INCMAX, A, AA, AS, + $ X, XX, XS, Y, YY, YS, YT, G, 1 ) + END IF + GO TO 200 +* Test CTRMV, 06, CTBMV, 07, CTPMV, 08, +* CTRSV, 09, CTBSV, 10, and CTPSV, 11. + 160 IF (CORDER) THEN + CALL CCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, Y, YY, YS, YT, G, Z, + $ 0 ) + END IF + IF (RORDER) THEN + CALL CCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, Y, YY, YS, YT, G, Z, + $ 1 ) + END IF + GO TO 200 +* Test CGERC, 12, CGERU, 13. + 170 IF (CORDER) THEN + CALL CCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, + $ YT, G, Z, 0 ) + END IF + IF (RORDER) THEN + CALL CCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, + $ YT, G, Z, 1 ) + END IF + GO TO 200 +* Test CHER, 14, and CHPR, 15. + 180 IF (CORDER) THEN + CALL CCHK5( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, + $ YT, G, Z, 0 ) + END IF + IF (RORDER) THEN + CALL CCHK5( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, + $ YT, G, Z, 1 ) + END IF + GO TO 200 +* Test CHER2, 16, and CHPR2, 17. + 190 IF (CORDER) THEN + CALL CCHK6( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, + $ YT, G, Z, 0 ) + END IF + IF (RORDER) THEN + CALL CCHK6( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, + $ YT, G, Z, 1 ) + END IF +* + 200 IF( FATAL.AND.SFATAL ) + $ GO TO 220 + END IF + 210 CONTINUE + WRITE( NOUT, FMT = 9982 ) + GO TO 240 +* + 220 CONTINUE + WRITE( NOUT, FMT = 9981 ) + GO TO 240 +* + 230 CONTINUE + WRITE( NOUT, FMT = 9987 ) +* + 240 CONTINUE + IF( TRACE ) + $ CLOSE ( NTRA ) + CLOSE ( NOUT ) + STOP +* +10002 FORMAT( ' COLUMN-MAJOR AND ROW-MAJOR DATA LAYOUTS ARE TESTED' ) +10001 FORMAT( ' ROW-MAJOR DATA LAYOUT IS TESTED' ) +10000 FORMAT( ' COLUMN-MAJOR DATA LAYOUT IS TESTED' ) + 9999 FORMAT(' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES', + $ 'S THAN', F8.2 ) + 9998 FORMAT( ' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1P, E9.1 ) + 9997 FORMAT(' NUMBER OF VALUES OF ', A, ' IS LESS THAN 1 OR GREATER ', + $ 'THAN ', I2 ) + 9996 FORMAT( ' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', I2 ) + 9995 FORMAT( ' VALUE OF K IS LESS THAN 0' ) + 9994 FORMAT( ' ABSOLUTE VALUE OF INCX OR INCY IS 0 OR GREATER THAN ', + $ I2 ) + 9993 FORMAT(' TESTS OF THE COMPLEX LEVEL 2 BLAS', //' THE F', + $ 'OLLOWING PARAMETER VALUES WILL BE USED:' ) + 9992 FORMAT( ' FOR N ', 9I6 ) + 9991 FORMAT( ' FOR K ', 7I6 ) + 9990 FORMAT( ' FOR INCX AND INCY ', 7I6 ) + 9989 FORMAT( ' FOR ALPHA ', + $ 7('(', F4.1, ',', F4.1, ') ', : ) ) + 9988 FORMAT( ' FOR BETA ', + $ 7('(', F4.1, ',', F4.1, ') ', : ) ) + 9987 FORMAT( ' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM', + $ /' ******* TESTS ABANDONED *******' ) + 9986 FORMAT(' SUBPROGRAM NAME ',A12, ' NOT RECOGNIZED', /' ******* T', + $ 'ESTS ABANDONED *******' ) + 9985 FORMAT(' ERROR IN CMVCH - IN-LINE DOT PRODUCTS ARE BEING EVALU', + $ 'ATED WRONGLY.', /' CMVCH WAS CALLED WITH TRANS = ', A1, + $ ' AND RETURNED SAME = ', L1, ' AND ERR = ', F12.3, '.', / + $ ' THIS MAY BE DUE TO FAULTS IN THE ARITHMETIC OR THE COMPILER.' + $ , /' ******* TESTS ABANDONED *******' ) + 9984 FORMAT(A12, L2 ) + 9983 FORMAT( 1X,A12, ' WAS NOT TESTED' ) + 9982 FORMAT( /' END OF TESTS' ) + 9981 FORMAT( /' ******* FATAL ERROR - TESTS ABANDONED *******' ) + 9980 FORMAT( ' ERROR-EXITS WILL NOT BE TESTED' ) +* +* End of CBLAT2. +* + END + SUBROUTINE CCHK1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, NBET, + $ BET, NINC, INC, NMAX, INCMAX, A, AA, AS, X, XX, + $ XS, Y, YY, YS, YT, G, IORDER ) +* +* Tests CGEMV and CGBMV. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + COMPLEX ZERO, HALF + PARAMETER ( ZERO = ( 0.0, 0.0 ), HALF = ( 0.5, 0.0 ) ) + REAL RZERO + PARAMETER ( RZERO = 0.0 ) +* .. Scalar Arguments .. + REAL EPS, THRESH + INTEGER INCMAX, NALF, NBET, NIDIM, NINC, NKB, NMAX, + $ NOUT, NTRA, IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), BET( NBET ), X( NMAX ), + $ XS( NMAX*INCMAX ), XX( NMAX*INCMAX ), + $ Y( NMAX ), YS( NMAX*INCMAX ), YT( NMAX ), + $ YY( NMAX*INCMAX ) + REAL G( NMAX ) + INTEGER IDIM( NIDIM ), INC( NINC ), KB( NKB ) +* .. Local Scalars .. + COMPLEX ALPHA, ALS, BETA, BLS, TRANSL + REAL ERR, ERRMAX + INTEGER I, IA, IB, IC, IKU, IM, IN, INCX, INCXS, INCY, + $ INCYS, IX, IY, KL, KLS, KU, KUS, LAA, LDA, + $ LDAS, LX, LY, M, ML, MS, N, NARGS, NC, ND, NK, + $ NL, NS + LOGICAL BANDED, FULL, NULL, RESET, SAME, TRAN + CHARACTER*1 TRANS, TRANSS + CHARACTER*14 CTRANS + CHARACTER*3 ICH +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LCE, LCERES + EXTERNAL LCE, LCERES +* .. External Subroutines .. + EXTERNAL CCGBMV, CCGEMV, CMAKE, CMVCH +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, MIN +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICH/'NTC'/ +* .. Executable Statements .. + FULL = SNAME( 9: 9 ).EQ.'e' + BANDED = SNAME( 9: 9 ).EQ.'b' +* Define the number of arguments. + IF( FULL )THEN + NARGS = 11 + ELSE IF( BANDED )THEN + NARGS = 13 + END IF +* + NC = 0 + RESET = .TRUE. + ERRMAX = RZERO +* + DO 120 IN = 1, NIDIM + N = IDIM( IN ) + ND = N/2 + 1 +* + DO 110 IM = 1, 2 + IF( IM.EQ.1 ) + $ M = MAX( N - ND, 0 ) + IF( IM.EQ.2 ) + $ M = MIN( N + ND, NMAX ) +* + IF( BANDED )THEN + NK = NKB + ELSE + NK = 1 + END IF + DO 100 IKU = 1, NK + IF( BANDED )THEN + KU = KB( IKU ) + KL = MAX( KU - 1, 0 ) + ELSE + KU = N - 1 + KL = M - 1 + END IF +* Set LDA to 1 more than minimum value if room. + IF( BANDED )THEN + LDA = KL + KU + 1 + ELSE + LDA = M + END IF + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 100 + LAA = LDA*N + NULL = N.LE.0.OR.M.LE.0 +* +* Generate the matrix A. +* + TRANSL = ZERO + CALL CMAKE( SNAME( 8: 9 ), ' ', ' ', M, N, A, NMAX, AA, + $ LDA, KL, KU, RESET, TRANSL ) +* + DO 90 IC = 1, 3 + TRANS = ICH( IC: IC ) + IF (TRANS.EQ.'N')THEN + CTRANS = ' CblasNoTrans' + ELSE IF (TRANS.EQ.'T')THEN + CTRANS = ' CblasTrans' + ELSE + CTRANS = 'CblasConjTrans' + END IF + TRAN = TRANS.EQ.'T'.OR.TRANS.EQ.'C' +* + IF( TRAN )THEN + ML = N + NL = M + ELSE + ML = M + NL = N + END IF +* + DO 80 IX = 1, NINC + INCX = INC( IX ) + LX = ABS( INCX )*NL +* +* Generate the vector X. +* + TRANSL = HALF + CALL CMAKE( 'ge', ' ', ' ', 1, NL, X, 1, XX, + $ ABS( INCX ), 0, NL - 1, RESET, TRANSL ) + IF( NL.GT.1 )THEN + X( NL/2 ) = ZERO + XX( 1 + ABS( INCX )*( NL/2 - 1 ) ) = ZERO + END IF +* + DO 70 IY = 1, NINC + INCY = INC( IY ) + LY = ABS( INCY )*ML +* + DO 60 IA = 1, NALF + ALPHA = ALF( IA ) +* + DO 50 IB = 1, NBET + BETA = BET( IB ) +* +* Generate the vector Y. +* + TRANSL = ZERO + CALL CMAKE( 'ge', ' ', ' ', 1, ML, Y, 1, + $ YY, ABS( INCY ), 0, ML - 1, + $ RESET, TRANSL ) +* + NC = NC + 1 +* +* Save every datum before calling the +* subroutine. +* + TRANSS = TRANS + MS = M + NS = N + KLS = KL + KUS = KU + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LX + XS( I ) = XX( I ) + 20 CONTINUE + INCXS = INCX + BLS = BETA + DO 30 I = 1, LY + YS( I ) = YY( I ) + 30 CONTINUE + INCYS = INCY +* +* Call the subroutine. +* + IF( FULL )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9994 )NC, SNAME, + $ CTRANS, M, N, ALPHA, LDA, INCX, BETA, + $ INCY + IF( REWI ) + $ REWIND NTRA + CALL CCGEMV( IORDER, TRANS, M, N, + $ ALPHA, AA, LDA, XX, INCX, + $ BETA, YY, INCY ) + ELSE IF( BANDED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9995 )NC, SNAME, + $ CTRANS, M, N, KL, KU, ALPHA, LDA, + $ INCX, BETA, INCY + IF( REWI ) + $ REWIND NTRA + CALL CCGBMV( IORDER, TRANS, M, N, KL, + $ KU, ALPHA, AA, LDA, XX, + $ INCX, BETA, YY, INCY ) + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9993 ) + FATAL = .TRUE. + GO TO 130 + END IF +* +* See what data changed inside subroutines. +* +* IF(TRANS .NE. 'C' .OR. (INCX .GT. 0 .AND. INCY .GT. 0)) THEN + ISAME( 1 ) = TRANS.EQ.TRANSS + ISAME( 2 ) = MS.EQ.M + ISAME( 3 ) = NS.EQ.N + IF( FULL )THEN + ISAME( 4 ) = ALS.EQ.ALPHA + ISAME( 5 ) = LCE( AS, AA, LAA ) + ISAME( 6 ) = LDAS.EQ.LDA + ISAME( 7 ) = LCE( XS, XX, LX ) + ISAME( 8 ) = INCXS.EQ.INCX + ISAME( 9 ) = BLS.EQ.BETA + IF( NULL )THEN + ISAME( 10 ) = LCE( YS, YY, LY ) + ELSE + ISAME( 10 ) = LCERES( 'ge', ' ', 1, + $ ML, YS, YY, + $ ABS( INCY ) ) + END IF + ISAME( 11 ) = INCYS.EQ.INCY + ELSE IF( BANDED )THEN + ISAME( 4 ) = KLS.EQ.KL + ISAME( 5 ) = KUS.EQ.KU + ISAME( 6 ) = ALS.EQ.ALPHA + ISAME( 7 ) = LCE( AS, AA, LAA ) + ISAME( 8 ) = LDAS.EQ.LDA + ISAME( 9 ) = LCE( XS, XX, LX ) + ISAME( 10 ) = INCXS.EQ.INCX + ISAME( 11 ) = BLS.EQ.BETA + IF( NULL )THEN + ISAME( 12 ) = LCE( YS, YY, LY ) + ELSE + ISAME( 12 ) = LCERES( 'ge', ' ', 1, + $ ML, YS, YY, + $ ABS( INCY ) ) + END IF + ISAME( 13 ) = INCYS.EQ.INCY + END IF +* +* If data was incorrectly changed, report +* and return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 130 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result. +* + CALL CMVCH( TRANS, M, N, ALPHA, A, + $ NMAX, X, INCX, BETA, Y, + $ INCY, YT, G, YY, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and +* return. + IF( FATAL ) + $ GO TO 130 + ELSE +* Avoid repeating tests with M.le.0 or +* N.le.0. + GO TO 110 + END IF +* END IF +* + 50 CONTINUE +* + 60 CONTINUE +* + 70 CONTINUE +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* + 110 CONTINUE +* + 120 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + WRITE( NOUT, FMT = 9999 )SNAME, NC + ELSE + WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX + END IF + GO TO 140 +* + 130 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + IF( FULL )THEN + WRITE( NOUT, FMT = 9994 )NC, SNAME, CTRANS, M, N, ALPHA, LDA, + $ INCX, BETA, INCY + ELSE IF( BANDED )THEN + WRITE( NOUT, FMT = 9995 )NC, SNAME, CTRANS, M, N, KL, KU, + $ ALPHA, LDA, INCX, BETA, INCY + END IF +* + 140 CONTINUE + RETURN +* + 9999 FORMAT(' ',A12, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL', + $ 'S)' ) + 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9997 FORMAT(' ',A12, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', + $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, + $ ' - SUSPECT *******' ) + 9996 FORMAT( ' ******* ',A12, ' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( 1X, I6, ': ',A12, '(', A14, ',', 4( I3, ',' ), '(', + $ F4.1, ',', F4.1, '), A,',/ 10x, I3, ', X,', I2, ',(', + $ F4.1, ',', F4.1, '), Y,', I2, ') .' ) + 9994 FORMAT( 1X, I6, ': ',A12, '(', A14, ',', 2( I3, ',' ), '(', + $ F4.1, ',', F4.1, '), A,',/ 10x, I3, ', X,', I2, ',(', + $ F4.1, ',', F4.1, '), Y,', I2, ') .' ) + 9993 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of CCHK1. +* + END + SUBROUTINE CCHK2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, NBET, + $ BET, NINC, INC, NMAX, INCMAX, A, AA, AS, X, XX, + $ XS, Y, YY, YS, YT, G, IORDER ) +* +* Tests CHEMV, CHBMV and CHPMV. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + COMPLEX ZERO, HALF + PARAMETER ( ZERO = ( 0.0, 0.0 ), HALF = ( 0.5, 0.0 ) ) + REAL RZERO + PARAMETER ( RZERO = 0.0 ) +* .. Scalar Arguments .. + REAL EPS, THRESH + INTEGER INCMAX, NALF, NBET, NIDIM, NINC, NKB, NMAX, + $ NOUT, NTRA, IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), BET( NBET ), X( NMAX ), + $ XS( NMAX*INCMAX ), XX( NMAX*INCMAX ), + $ Y( NMAX ), YS( NMAX*INCMAX ), YT( NMAX ), + $ YY( NMAX*INCMAX ) + REAL G( NMAX ) + INTEGER IDIM( NIDIM ), INC( NINC ), KB( NKB ) +* .. Local Scalars .. + COMPLEX ALPHA, ALS, BETA, BLS, TRANSL + REAL ERR, ERRMAX + INTEGER I, IA, IB, IC, IK, IN, INCX, INCXS, INCY, + $ INCYS, IX, IY, K, KS, LAA, LDA, LDAS, LX, LY, + $ N, NARGS, NC, NK, NS + LOGICAL BANDED, FULL, NULL, PACKED, RESET, SAME + CHARACTER*1 UPLO, UPLOS + CHARACTER*14 CUPLO + CHARACTER*2 ICH +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LCE, LCERES + EXTERNAL LCE, LCERES +* .. External Subroutines .. + EXTERNAL CCHBMV, CCHEMV, CCHPMV, CMAKE, CMVCH +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICH/'UL'/ +* .. Executable Statements .. + FULL = SNAME( 9: 9 ).EQ.'e' + BANDED = SNAME( 9: 9 ).EQ.'b' + PACKED = SNAME( 9: 9 ).EQ.'p' +* Define the number of arguments. + IF( FULL )THEN + NARGS = 10 + ELSE IF( BANDED )THEN + NARGS = 11 + ELSE IF( PACKED )THEN + NARGS = 9 + END IF +* + NC = 0 + RESET = .TRUE. + ERRMAX = RZERO +* + DO 110 IN = 1, NIDIM + N = IDIM( IN ) +* + IF( BANDED )THEN + NK = NKB + ELSE + NK = 1 + END IF + DO 100 IK = 1, NK + IF( BANDED )THEN + K = KB( IK ) + ELSE + K = N - 1 + END IF +* Set LDA to 1 more than minimum value if room. + IF( BANDED )THEN + LDA = K + 1 + ELSE + LDA = N + END IF + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 100 + IF( PACKED )THEN + LAA = ( N*( N + 1 ) )/2 + ELSE + LAA = LDA*N + END IF + NULL = N.LE.0 +* + DO 90 IC = 1, 2 + UPLO = ICH( IC: IC ) + IF (UPLO.EQ.'U')THEN + CUPLO = ' CblasUpper' + ELSE + CUPLO = ' CblasLower' + END IF +* +* Generate the matrix A. +* + TRANSL = ZERO + CALL CMAKE( SNAME( 8: 9 ), UPLO, ' ', N, N, A, NMAX, AA, + $ LDA, K, K, RESET, TRANSL ) +* + DO 80 IX = 1, NINC + INCX = INC( IX ) + LX = ABS( INCX )*N +* +* Generate the vector X. +* + TRANSL = HALF + CALL CMAKE( 'ge', ' ', ' ', 1, N, X, 1, XX, + $ ABS( INCX ), 0, N - 1, RESET, TRANSL ) + IF( N.GT.1 )THEN + X( N/2 ) = ZERO + XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO + END IF +* + DO 70 IY = 1, NINC + INCY = INC( IY ) + LY = ABS( INCY )*N +* + DO 60 IA = 1, NALF + ALPHA = ALF( IA ) +* + DO 50 IB = 1, NBET + BETA = BET( IB ) +* +* Generate the vector Y. +* + TRANSL = ZERO + CALL CMAKE( 'ge', ' ', ' ', 1, N, Y, 1, YY, + $ ABS( INCY ), 0, N - 1, RESET, + $ TRANSL ) +* + NC = NC + 1 +* +* Save every datum before calling the +* subroutine. +* + UPLOS = UPLO + NS = N + KS = K + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LX + XS( I ) = XX( I ) + 20 CONTINUE + INCXS = INCX + BLS = BETA + DO 30 I = 1, LY + YS( I ) = YY( I ) + 30 CONTINUE + INCYS = INCY +* +* Call the subroutine. +* + IF( FULL )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9993 )NC, SNAME, + $ CUPLO, N, ALPHA, LDA, INCX, BETA, INCY + IF( REWI ) + $ REWIND NTRA + CALL CCHEMV( IORDER, UPLO, N, ALPHA, AA, + $ LDA, XX, INCX, BETA, YY, + $ INCY ) + ELSE IF( BANDED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9994 )NC, SNAME, + $ CUPLO, N, K, ALPHA, LDA, INCX, BETA, + $ INCY + IF( REWI ) + $ REWIND NTRA + CALL CCHBMV( IORDER, UPLO, N, K, ALPHA, + $ AA, LDA, XX, INCX, BETA, + $ YY, INCY ) + ELSE IF( PACKED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9995 )NC, SNAME, + $ CUPLO, N, ALPHA, INCX, BETA, INCY + IF( REWI ) + $ REWIND NTRA + CALL CCHPMV( IORDER, UPLO, N, ALPHA, AA, + $ XX, INCX, BETA, YY, INCY ) + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9992 ) + FATAL = .TRUE. + GO TO 120 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = UPLO.EQ.UPLOS + ISAME( 2 ) = NS.EQ.N + IF( FULL )THEN + ISAME( 3 ) = ALS.EQ.ALPHA + ISAME( 4 ) = LCE( AS, AA, LAA ) + ISAME( 5 ) = LDAS.EQ.LDA + ISAME( 6 ) = LCE( XS, XX, LX ) + ISAME( 7 ) = INCXS.EQ.INCX + ISAME( 8 ) = BLS.EQ.BETA + IF( NULL )THEN + ISAME( 9 ) = LCE( YS, YY, LY ) + ELSE + ISAME( 9 ) = LCERES( 'ge', ' ', 1, N, + $ YS, YY, ABS( INCY ) ) + END IF + ISAME( 10 ) = INCYS.EQ.INCY + ELSE IF( BANDED )THEN + ISAME( 3 ) = KS.EQ.K + ISAME( 4 ) = ALS.EQ.ALPHA + ISAME( 5 ) = LCE( AS, AA, LAA ) + ISAME( 6 ) = LDAS.EQ.LDA + ISAME( 7 ) = LCE( XS, XX, LX ) + ISAME( 8 ) = INCXS.EQ.INCX + ISAME( 9 ) = BLS.EQ.BETA + IF( NULL )THEN + ISAME( 10 ) = LCE( YS, YY, LY ) + ELSE + ISAME( 10 ) = LCERES( 'ge', ' ', 1, N, + $ YS, YY, ABS( INCY ) ) + END IF + ISAME( 11 ) = INCYS.EQ.INCY + ELSE IF( PACKED )THEN + ISAME( 3 ) = ALS.EQ.ALPHA + ISAME( 4 ) = LCE( AS, AA, LAA ) + ISAME( 5 ) = LCE( XS, XX, LX ) + ISAME( 6 ) = INCXS.EQ.INCX + ISAME( 7 ) = BLS.EQ.BETA + IF( NULL )THEN + ISAME( 8 ) = LCE( YS, YY, LY ) + ELSE + ISAME( 8 ) = LCERES( 'ge', ' ', 1, N, + $ YS, YY, ABS( INCY ) ) + END IF + ISAME( 9 ) = INCYS.EQ.INCY + END IF +* +* If data was incorrectly changed, report and +* return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 120 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result. +* + CALL CMVCH( 'N', N, N, ALPHA, A, NMAX, X, + $ INCX, BETA, Y, INCY, YT, G, + $ YY, EPS, ERR, FATAL, NOUT, + $ .TRUE. ) + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and +* return. + IF( FATAL ) + $ GO TO 120 + ELSE +* Avoid repeating tests with N.le.0 + GO TO 110 + END IF +* + 50 CONTINUE +* + 60 CONTINUE +* + 70 CONTINUE +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* + 110 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + WRITE( NOUT, FMT = 9999 )SNAME, NC + ELSE + WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX + END IF + GO TO 130 +* + 120 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + IF( FULL )THEN + WRITE( NOUT, FMT = 9993 )NC, SNAME, CUPLO, N, ALPHA, LDA, INCX, + $ BETA, INCY + ELSE IF( BANDED )THEN + WRITE( NOUT, FMT = 9994 )NC, SNAME, CUPLO, N, K, ALPHA, LDA, + $ INCX, BETA, INCY + ELSE IF( PACKED )THEN + WRITE( NOUT, FMT = 9995 )NC, SNAME, CUPLO, N, ALPHA, INCX, + $ BETA, INCY + END IF +* + 130 CONTINUE + RETURN +* + 9999 FORMAT(' ',A12, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL', + $ 'S)' ) + 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9997 FORMAT(' ',A12, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', + $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, + $ ' - SUSPECT *******' ) + 9996 FORMAT( ' ******* ',A12, ' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( 1X, I6, ': ',A12, '(', A14, ',', I3, ',(', F4.1, ',', + $ F4.1, '), AP, X,',/ 10x, I2, ',(', F4.1, ',', F4.1, + $ '), Y,', I2, ') .' ) + 9994 FORMAT( 1X, I6, ': ',A12, '(', A14, ',', 2( I3, ',' ), '(', + $ F4.1, ',', F4.1, '), A,', I3, ', X,',/ 10x, I2, ',(', + $ F4.1, ',', F4.1, '), Y,', I2, ') .' ) + 9993 FORMAT( 1X, I6, ': ',A12, '(', A14, ',', I3, ',(', F4.1, ',', + $ F4.1, '), A,', I3, ', X,',/ 10x, I2, ',(', F4.1, ',', + $ F4.1, '), ', 'Y,', I2, ') .' ) + 9992 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of CCHK2. +* + END + SUBROUTINE CCHK3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NKB, KB, NINC, INC, NMAX, + $ INCMAX, A, AA, AS, X, XX, XS, XT, G, Z, IORDER ) +* +* Tests CTRMV, CTBMV, CTPMV, CTRSV, CTBSV and CTPSV. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + COMPLEX ZERO, HALF, ONE + PARAMETER ( ZERO = ( 0.0, 0.0 ), HALF = ( 0.5, 0.0 ), + $ ONE = ( 1.0, 0.0 ) ) + REAL RZERO + PARAMETER ( RZERO = 0.0 ) +* .. Scalar Arguments .. + REAL EPS, THRESH + INTEGER INCMAX, NIDIM, NINC, NKB, NMAX, NOUT, NTRA, + $ IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), + $ AS( NMAX*NMAX ), X( NMAX ), XS( NMAX*INCMAX ), + $ XT( NMAX ), XX( NMAX*INCMAX ), Z( NMAX ) + REAL G( NMAX ) + INTEGER IDIM( NIDIM ), INC( NINC ), KB( NKB ) +* .. Local Scalars .. + COMPLEX TRANSL + REAL ERR, ERRMAX + INTEGER I, ICD, ICT, ICU, IK, IN, INCX, INCXS, IX, K, + $ KS, LAA, LDA, LDAS, LX, N, NARGS, NC, NK, NS + LOGICAL BANDED, FULL, NULL, PACKED, RESET, SAME + CHARACTER*1 DIAG, DIAGS, TRANS, TRANSS, UPLO, UPLOS + CHARACTER*14 CUPLO,CTRANS,CDIAG + CHARACTER*2 ICHD, ICHU + CHARACTER*3 ICHT +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LCE, LCERES + EXTERNAL LCE, LCERES +* .. External Subroutines .. + EXTERNAL CMAKE, CMVCH, CCTBMV, CCTBSV, CCTPMV, + $ CCTPSV, CCTRMV, CCTRSV +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICHU/'UL'/, ICHT/'NTC'/, ICHD/'UN'/ +* .. Executable Statements .. + FULL = SNAME( 9: 9 ).EQ.'r' + BANDED = SNAME( 9: 9 ).EQ.'b' + PACKED = SNAME( 9: 9 ).EQ.'p' +* Define the number of arguments. + IF( FULL )THEN + NARGS = 8 + ELSE IF( BANDED )THEN + NARGS = 9 + ELSE IF( PACKED )THEN + NARGS = 7 + END IF +* + NC = 0 + RESET = .TRUE. + ERRMAX = RZERO +* Set up zero vector for CMVCH. + DO 10 I = 1, NMAX + Z( I ) = ZERO + 10 CONTINUE +* + DO 110 IN = 1, NIDIM + N = IDIM( IN ) +* + IF( BANDED )THEN + NK = NKB + ELSE + NK = 1 + END IF + DO 100 IK = 1, NK + IF( BANDED )THEN + K = KB( IK ) + ELSE + K = N - 1 + END IF +* Set LDA to 1 more than minimum value if room. + IF( BANDED )THEN + LDA = K + 1 + ELSE + LDA = N + END IF + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 100 + IF( PACKED )THEN + LAA = ( N*( N + 1 ) )/2 + ELSE + LAA = LDA*N + END IF + NULL = N.LE.0 +* + DO 90 ICU = 1, 2 + UPLO = ICHU( ICU: ICU ) + IF (UPLO.EQ.'U')THEN + CUPLO = ' CblasUpper' + ELSE + CUPLO = ' CblasLower' + END IF +* + DO 80 ICT = 1, 3 + TRANS = ICHT( ICT: ICT ) + IF (TRANS.EQ.'N')THEN + CTRANS = ' CblasNoTrans' + ELSE IF (TRANS.EQ.'T')THEN + CTRANS = ' CblasTrans' + ELSE + CTRANS = 'CblasConjTrans' + END IF +* + DO 70 ICD = 1, 2 + DIAG = ICHD( ICD: ICD ) + IF (DIAG.EQ.'N')THEN + CDIAG = ' CblasNonUnit' + ELSE + CDIAG = ' CblasUnit' + END IF +* +* Generate the matrix A. +* + TRANSL = ZERO + CALL CMAKE( SNAME( 8: 9 ), UPLO, DIAG, N, N, A, + $ NMAX, AA, LDA, K, K, RESET, TRANSL ) +* + DO 60 IX = 1, NINC + INCX = INC( IX ) + LX = ABS( INCX )*N +* +* Generate the vector X. +* + TRANSL = HALF + CALL CMAKE( 'ge', ' ', ' ', 1, N, X, 1, XX, + $ ABS( INCX ), 0, N - 1, RESET, + $ TRANSL ) + IF( N.GT.1 )THEN + X( N/2 ) = ZERO + XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO + END IF +* + NC = NC + 1 +* +* Save every datum before calling the subroutine. +* + UPLOS = UPLO + TRANSS = TRANS + DIAGS = DIAG + NS = N + KS = K + DO 20 I = 1, LAA + AS( I ) = AA( I ) + 20 CONTINUE + LDAS = LDA + DO 30 I = 1, LX + XS( I ) = XX( I ) + 30 CONTINUE + INCXS = INCX +* +* Call the subroutine. +* + IF( SNAME( 10: 11 ).EQ.'mv' )THEN + IF( FULL )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9993 )NC, SNAME, + $ CUPLO, CTRANS, CDIAG, N, LDA, INCX + IF( REWI ) + $ REWIND NTRA + CALL CCTRMV( IORDER, UPLO, TRANS, DIAG, + $ N, AA, LDA, XX, INCX ) + ELSE IF( BANDED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9994 )NC, SNAME, + $ CUPLO, CTRANS, CDIAG, N, K, LDA, INCX + IF( REWI ) + $ REWIND NTRA + CALL CCTBMV( IORDER, UPLO, TRANS, DIAG, + $ N, K, AA, LDA, XX, INCX ) + ELSE IF( PACKED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9995 )NC, SNAME, + $ CUPLO, CTRANS, CDIAG, N, INCX + IF( REWI ) + $ REWIND NTRA + CALL CCTPMV( IORDER, UPLO, TRANS, DIAG, + $ N, AA, XX, INCX ) + END IF + ELSE IF( SNAME( 10: 11 ).EQ.'sv' )THEN + IF( FULL )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9993 )NC, SNAME, + $ CUPLO, CTRANS, CDIAG, N, LDA, INCX + IF( REWI ) + $ REWIND NTRA + CALL CCTRSV( IORDER, UPLO, TRANS, DIAG, + $ N, AA, LDA, XX, INCX ) + ELSE IF( BANDED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9994 )NC, SNAME, + $ CUPLO, CTRANS, CDIAG, N, K, LDA, INCX + IF( REWI ) + $ REWIND NTRA + CALL CCTBSV( IORDER, UPLO, TRANS, DIAG, + $ N, K, AA, LDA, XX, INCX ) + ELSE IF( PACKED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9995 )NC, SNAME, + $ CUPLO, CTRANS, CDIAG, N, INCX + IF( REWI ) + $ REWIND NTRA + CALL CCTPSV( IORDER, UPLO, TRANS, DIAG, + $ N, AA, XX, INCX ) + END IF + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9992 ) + FATAL = .TRUE. + GO TO 120 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = UPLO.EQ.UPLOS + ISAME( 2 ) = TRANS.EQ.TRANSS + ISAME( 3 ) = DIAG.EQ.DIAGS + ISAME( 4 ) = NS.EQ.N + IF( FULL )THEN + ISAME( 5 ) = LCE( AS, AA, LAA ) + ISAME( 6 ) = LDAS.EQ.LDA + IF( NULL )THEN + ISAME( 7 ) = LCE( XS, XX, LX ) + ELSE + ISAME( 7 ) = LCERES( 'ge', ' ', 1, N, XS, + $ XX, ABS( INCX ) ) + END IF + ISAME( 8 ) = INCXS.EQ.INCX + ELSE IF( BANDED )THEN + ISAME( 5 ) = KS.EQ.K + ISAME( 6 ) = LCE( AS, AA, LAA ) + ISAME( 7 ) = LDAS.EQ.LDA + IF( NULL )THEN + ISAME( 8 ) = LCE( XS, XX, LX ) + ELSE + ISAME( 8 ) = LCERES( 'ge', ' ', 1, N, XS, + $ XX, ABS( INCX ) ) + END IF + ISAME( 9 ) = INCXS.EQ.INCX + ELSE IF( PACKED )THEN + ISAME( 5 ) = LCE( AS, AA, LAA ) + IF( NULL )THEN + ISAME( 6 ) = LCE( XS, XX, LX ) + ELSE + ISAME( 6 ) = LCERES( 'ge', ' ', 1, N, XS, + $ XX, ABS( INCX ) ) + END IF + ISAME( 7 ) = INCXS.EQ.INCX + END IF +* +* If data was incorrectly changed, report and +* return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 120 + END IF +* + IF( .NOT.NULL )THEN + IF( SNAME( 10: 11 ).EQ.'mv' )THEN +* +* Check the result. +* + CALL CMVCH( TRANS, N, N, ONE, A, NMAX, X, + $ INCX, ZERO, Z, INCX, XT, G, + $ XX, EPS, ERR, FATAL, NOUT, + $ .TRUE. ) + ELSE IF( SNAME( 10: 11 ).EQ.'sv' )THEN +* +* Compute approximation to original vector. +* + DO 50 I = 1, N + Z( I ) = XX( 1 + ( I - 1 )* + $ ABS( INCX ) ) + XX( 1 + ( I - 1 )*ABS( INCX ) ) + $ = X( I ) + 50 CONTINUE + CALL CMVCH( TRANS, N, N, ONE, A, NMAX, Z, + $ INCX, ZERO, X, INCX, XT, G, + $ XX, EPS, ERR, FATAL, NOUT, + $ .FALSE. ) + END IF + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and return. + IF( FATAL ) + $ GO TO 120 + ELSE +* Avoid repeating tests with N.le.0. + GO TO 110 + END IF +* + 60 CONTINUE +* + 70 CONTINUE +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* + 110 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + WRITE( NOUT, FMT = 9999 )SNAME, NC + ELSE + WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX + END IF + GO TO 130 +* + 120 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + IF( FULL )THEN + WRITE( NOUT, FMT = 9993 )NC, SNAME, CUPLO, CTRANS, CDIAG, N, + $ LDA, INCX + ELSE IF( BANDED )THEN + WRITE( NOUT, FMT = 9994 )NC, SNAME, CUPLO, CTRANS, CDIAG, N, K, + $ LDA, INCX + ELSE IF( PACKED )THEN + WRITE( NOUT, FMT = 9995 )NC, SNAME, CUPLO, CTRANS, CDIAG, N, + $ INCX + END IF +* + 130 CONTINUE + RETURN +* + 9999 FORMAT(' ',A12, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL', + $ 'S)' ) + 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9997 FORMAT(' ',A12, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', + $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, + $ ' - SUSPECT *******' ) + 9996 FORMAT( ' ******* ',A12, ' FAILED ON CALL NUMBER:' ) + 9995 FORMAT(1X, I6, ': ',A12, '(', 3( A14, ',' ),/ 10x, I3, ', AP, ', + $ 'X,', I2, ') .' ) + 9994 FORMAT(1X, I6, ': ',A12, '(', 3( A14, ',' ),/ 10x, 2( I3, ',' ), + $ ' A,', I3, ', X,', I2, ') .' ) + 9993 FORMAT( 1X, I6, ': ',A12, '(', 3( A14, ',' ),/ 10x, I3, ', A,', + $ I3, ', X,', I2, ') .' ) + 9992 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of CCHK3. +* + END + SUBROUTINE CCHK4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, NMAX, + $ INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, YT, G, + $ Z, IORDER ) +* +* Tests CGERC and CGERU. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + COMPLEX ZERO, HALF, ONE + PARAMETER ( ZERO = ( 0.0, 0.0 ), HALF = ( 0.5, 0.0 ), + $ ONE = ( 1.0, 0.0 ) ) + REAL RZERO + PARAMETER ( RZERO = 0.0 ) +* .. Scalar Arguments .. + REAL EPS, THRESH + INTEGER INCMAX, NALF, NIDIM, NINC, NMAX, NOUT, NTRA, + $ IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), X( NMAX ), XS( NMAX*INCMAX ), + $ XX( NMAX*INCMAX ), Y( NMAX ), + $ YS( NMAX*INCMAX ), YT( NMAX ), + $ YY( NMAX*INCMAX ), Z( NMAX ) + REAL G( NMAX ) + INTEGER IDIM( NIDIM ), INC( NINC ) +* .. Local Scalars .. + COMPLEX ALPHA, ALS, TRANSL + REAL ERR, ERRMAX + INTEGER I, IA, IM, IN, INCX, INCXS, INCY, INCYS, IX, + $ IY, J, LAA, LDA, LDAS, LX, LY, M, MS, N, NARGS, + $ NC, ND, NS + LOGICAL CONJ, NULL, RESET, SAME +* .. Local Arrays .. + COMPLEX W( 1 ) + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LCE, LCERES + EXTERNAL LCE, LCERES +* .. External Subroutines .. + EXTERNAL CCGERC, CCGERU, CMAKE, CMVCH +* .. Intrinsic Functions .. + INTRINSIC ABS, CONJG, MAX, MIN +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Executable Statements .. + CONJ = SNAME( 11: 11 ).EQ.'c' +* Define the number of arguments. + NARGS = 9 +* + NC = 0 + RESET = .TRUE. + ERRMAX = RZERO +* + DO 120 IN = 1, NIDIM + N = IDIM( IN ) + ND = N/2 + 1 +* + DO 110 IM = 1, 2 + IF( IM.EQ.1 ) + $ M = MAX( N - ND, 0 ) + IF( IM.EQ.2 ) + $ M = MIN( N + ND, NMAX ) +* +* Set LDA to 1 more than minimum value if room. + LDA = M + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 110 + LAA = LDA*N + NULL = N.LE.0.OR.M.LE.0 +* + DO 100 IX = 1, NINC + INCX = INC( IX ) + LX = ABS( INCX )*M +* +* Generate the vector X. +* + TRANSL = HALF + CALL CMAKE( 'ge', ' ', ' ', 1, M, X, 1, XX, ABS( INCX ), + $ 0, M - 1, RESET, TRANSL ) + IF( M.GT.1 )THEN + X( M/2 ) = ZERO + XX( 1 + ABS( INCX )*( M/2 - 1 ) ) = ZERO + END IF +* + DO 90 IY = 1, NINC + INCY = INC( IY ) + LY = ABS( INCY )*N +* +* Generate the vector Y. +* + TRANSL = ZERO + CALL CMAKE( 'ge', ' ', ' ', 1, N, Y, 1, YY, + $ ABS( INCY ), 0, N - 1, RESET, TRANSL ) + IF( N.GT.1 )THEN + Y( N/2 ) = ZERO + YY( 1 + ABS( INCY )*( N/2 - 1 ) ) = ZERO + END IF +* + DO 80 IA = 1, NALF + ALPHA = ALF( IA ) +* +* Generate the matrix A. +* + TRANSL = ZERO + CALL CMAKE(SNAME( 8: 9 ), ' ', ' ', M, N, A, NMAX, + $ AA, LDA, M - 1, N - 1, RESET, TRANSL ) +* + NC = NC + 1 +* +* Save every datum before calling the subroutine. +* + MS = M + NS = N + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LX + XS( I ) = XX( I ) + 20 CONTINUE + INCXS = INCX + DO 30 I = 1, LY + YS( I ) = YY( I ) + 30 CONTINUE + INCYS = INCY +* +* Call the subroutine. +* + IF( TRACE ) + $ WRITE( NTRA, FMT = 9994 )NC, SNAME, M, N, + $ ALPHA, INCX, INCY, LDA + IF( CONJ )THEN + IF( REWI ) + $ REWIND NTRA + CALL CCGERC( IORDER, M, N, ALPHA, XX, INCX, + $ YY, INCY, AA, LDA ) + ELSE + IF( REWI ) + $ REWIND NTRA + CALL CCGERU( IORDER, M, N, ALPHA, XX, INCX, + $ YY, INCY, AA, LDA ) + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9993 ) + FATAL = .TRUE. + GO TO 140 + END IF +* +* See what data changed inside subroutine. +* + ISAME( 1 ) = MS.EQ.M + ISAME( 2 ) = NS.EQ.N + ISAME( 3 ) = ALS.EQ.ALPHA + ISAME( 4 ) = LCE( XS, XX, LX ) + ISAME( 5 ) = INCXS.EQ.INCX + ISAME( 6 ) = LCE( YS, YY, LY ) + ISAME( 7 ) = INCYS.EQ.INCY + IF( NULL )THEN + ISAME( 8 ) = LCE( AS, AA, LAA ) + ELSE + ISAME( 8 ) = LCERES( 'ge', ' ', M, N, AS, AA, + $ LDA ) + END IF + ISAME( 9 ) = LDAS.EQ.LDA +* +* If data was incorrectly changed, report and return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 140 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result column by column. +* + IF( INCX.GT.0 )THEN + DO 50 I = 1, M + Z( I ) = X( I ) + 50 CONTINUE + ELSE + DO 60 I = 1, M + Z( I ) = X( M - I + 1 ) + 60 CONTINUE + END IF + DO 70 J = 1, N + IF( INCY.GT.0 )THEN + W( 1 ) = Y( J ) + ELSE + W( 1 ) = Y( N - J + 1 ) + END IF + IF( CONJ ) + $ W( 1 ) = CONJG( W( 1 ) ) + CALL CMVCH( 'N', M, 1, ALPHA, Z, NMAX, W, 1, + $ ONE, A( 1, J ), 1, YT, G, + $ AA( 1 + ( J - 1 )*LDA ), EPS, + $ ERR, FATAL, NOUT, .TRUE. ) + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and return. + IF( FATAL ) + $ GO TO 130 + 70 CONTINUE + ELSE +* Avoid repeating tests with M.le.0 or N.le.0. + GO TO 110 + END IF +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* + 110 CONTINUE +* + 120 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + WRITE( NOUT, FMT = 9999 )SNAME, NC + ELSE + WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX + END IF + GO TO 150 +* + 130 CONTINUE + WRITE( NOUT, FMT = 9995 )J +* + 140 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + WRITE( NOUT, FMT = 9994 )NC, SNAME, M, N, ALPHA, INCX, INCY, LDA +* + 150 CONTINUE + RETURN +* + 9999 FORMAT(' ',A12, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL', + $ 'S)' ) + 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9997 FORMAT(' ',A12, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', + $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, + $ ' - SUSPECT *******' ) + 9996 FORMAT( ' ******* ',A12, ' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) + 9994 FORMAT(1X, I6, ': ',A12, '(', 2( I3, ',' ), '(', F4.1, ',', F4.1, + $ '), X,', I2, ', Y,', I2, ', A,', I3, ') .' ) + 9993 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of CCHK4. +* + END + SUBROUTINE CCHK5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, NMAX, + $ INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, YT, G, + $ Z, IORDER ) +* +* Tests CHER and CHPR. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + COMPLEX ZERO, HALF, ONE + PARAMETER ( ZERO = ( 0.0, 0.0 ), HALF = ( 0.5, 0.0 ), + $ ONE = ( 1.0, 0.0 ) ) + REAL RZERO + PARAMETER ( RZERO = 0.0 ) +* .. Scalar Arguments .. + REAL EPS, THRESH + INTEGER INCMAX, NALF, NIDIM, NINC, NMAX, NOUT, NTRA, + $ IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), X( NMAX ), XS( NMAX*INCMAX ), + $ XX( NMAX*INCMAX ), Y( NMAX ), + $ YS( NMAX*INCMAX ), YT( NMAX ), + $ YY( NMAX*INCMAX ), Z( NMAX ) + REAL G( NMAX ) + INTEGER IDIM( NIDIM ), INC( NINC ) +* .. Local Scalars .. + COMPLEX ALPHA, TRANSL + REAL ERR, ERRMAX, RALPHA, RALS + INTEGER I, IA, IC, IN, INCX, INCXS, IX, J, JA, JJ, LAA, + $ LDA, LDAS, LJ, LX, N, NARGS, NC, NS + LOGICAL FULL, NULL, PACKED, RESET, SAME, UPPER + CHARACTER*1 UPLO, UPLOS + CHARACTER*14 CUPLO + CHARACTER*2 ICH +* .. Local Arrays .. + COMPLEX W( 1 ) + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LCE, LCERES + EXTERNAL LCE, LCERES +* .. External Subroutines .. + EXTERNAL CCHER, CCHPR, CMAKE, CMVCH +* .. Intrinsic Functions .. + INTRINSIC ABS, CMPLX, CONJG, MAX, REAL +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICH/'UL'/ +* .. Executable Statements .. + FULL = SNAME( 9: 9 ).EQ.'e' + PACKED = SNAME( 9: 9 ).EQ.'p' +* Define the number of arguments. + IF( FULL )THEN + NARGS = 7 + ELSE IF( PACKED )THEN + NARGS = 6 + END IF +* + NC = 0 + RESET = .TRUE. + ERRMAX = RZERO +* + DO 100 IN = 1, NIDIM + N = IDIM( IN ) +* Set LDA to 1 more than minimum value if room. + LDA = N + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 100 + IF( PACKED )THEN + LAA = ( N*( N + 1 ) )/2 + ELSE + LAA = LDA*N + END IF +* + DO 90 IC = 1, 2 + UPLO = ICH( IC: IC ) + IF (UPLO.EQ.'U')THEN + CUPLO = ' CblasUpper' + ELSE + CUPLO = ' CblasLower' + END IF + UPPER = UPLO.EQ.'U' +* + DO 80 IX = 1, NINC + INCX = INC( IX ) + LX = ABS( INCX )*N +* +* Generate the vector X. +* + TRANSL = HALF + CALL CMAKE( 'ge', ' ', ' ', 1, N, X, 1, XX, ABS( INCX ), + $ 0, N - 1, RESET, TRANSL ) + IF( N.GT.1 )THEN + X( N/2 ) = ZERO + XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO + END IF +* + DO 70 IA = 1, NALF + RALPHA = REAL( ALF( IA ) ) + ALPHA = CMPLX( RALPHA, RZERO ) + NULL = N.LE.0.OR.RALPHA.EQ.RZERO +* +* Generate the matrix A. +* + TRANSL = ZERO + CALL CMAKE( SNAME( 8: 9 ), UPLO, ' ', N, N, A, NMAX, + $ AA, LDA, N - 1, N - 1, RESET, TRANSL ) +* + NC = NC + 1 +* +* Save every datum before calling the subroutine. +* + UPLOS = UPLO + NS = N + RALS = RALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LX + XS( I ) = XX( I ) + 20 CONTINUE + INCXS = INCX +* +* Call the subroutine. +* + IF( FULL )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9993 )NC, SNAME, CUPLO, N, + $ RALPHA, INCX, LDA + IF( REWI ) + $ REWIND NTRA + CALL CCHER( IORDER, UPLO, N, RALPHA, XX, + $ INCX, AA, LDA ) + ELSE IF( PACKED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9994 )NC, SNAME, CUPLO, N, + $ RALPHA, INCX + IF( REWI ) + $ REWIND NTRA + CALL CCHPR( IORDER, UPLO, N, RALPHA, + $ XX, INCX, AA ) + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9992 ) + FATAL = .TRUE. + GO TO 120 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = UPLO.EQ.UPLOS + ISAME( 2 ) = NS.EQ.N + ISAME( 3 ) = RALS.EQ.RALPHA + ISAME( 4 ) = LCE( XS, XX, LX ) + ISAME( 5 ) = INCXS.EQ.INCX + IF( NULL )THEN + ISAME( 6 ) = LCE( AS, AA, LAA ) + ELSE + ISAME( 6 ) = LCERES( SNAME( 8: 9 ), UPLO, N, N, AS, + $ AA, LDA ) + END IF + IF( .NOT.PACKED )THEN + ISAME( 7 ) = LDAS.EQ.LDA + END IF +* +* If data was incorrectly changed, report and return. +* + SAME = .TRUE. + DO 30 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 30 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 120 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result column by column. +* + IF( INCX.GT.0 )THEN + DO 40 I = 1, N + Z( I ) = X( I ) + 40 CONTINUE + ELSE + DO 50 I = 1, N + Z( I ) = X( N - I + 1 ) + 50 CONTINUE + END IF + JA = 1 + DO 60 J = 1, N + W( 1 ) = CONJG( Z( J ) ) + IF( UPPER )THEN + JJ = 1 + LJ = J + ELSE + JJ = J + LJ = N - J + 1 + END IF + CALL CMVCH( 'N', LJ, 1, ALPHA, Z( JJ ), LJ, W, + $ 1, ONE, A( JJ, J ), 1, YT, G, + $ AA( JA ), EPS, ERR, FATAL, NOUT, + $ .TRUE. ) + IF( FULL )THEN + IF( UPPER )THEN + JA = JA + LDA + ELSE + JA = JA + LDA + 1 + END IF + ELSE + JA = JA + LJ + END IF + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and return. + IF( FATAL ) + $ GO TO 110 + 60 CONTINUE + ELSE +* Avoid repeating tests if N.le.0. + IF( N.LE.0 ) + $ GO TO 100 + END IF +* + 70 CONTINUE +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + WRITE( NOUT, FMT = 9999 )SNAME, NC + ELSE + WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX + END IF + GO TO 130 +* + 110 CONTINUE + WRITE( NOUT, FMT = 9995 )J +* + 120 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + IF( FULL )THEN + WRITE( NOUT, FMT = 9993 )NC, SNAME, CUPLO, N, RALPHA, INCX, LDA + ELSE IF( PACKED )THEN + WRITE( NOUT, FMT = 9994 )NC, SNAME, CUPLO, N, RALPHA, INCX + END IF +* + 130 CONTINUE + RETURN +* + 9999 FORMAT(' ',A12, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL', + $ 'S)' ) + 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9997 FORMAT(' ',A12, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', + $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, + $ ' - SUSPECT *******' ) + 9996 FORMAT( ' ******* ',A12, ' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) + 9994 FORMAT(1X, I6, ': ',A12, '(', A14, ',', I3, ',', F4.1, ', X,', + $ I2, ', AP) .' ) + 9993 FORMAT(1X, I6, ': ',A12, '(', A14, ',', I3, ',', F4.1, ', X,', + $ I2, ', A,', I3, ') .' ) + 9992 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of CCHK5. +* + END + SUBROUTINE CCHK6( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, NMAX, + $ INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, YT, G, + $ Z, IORDER ) +* +* Tests CHER2 and CHPR2. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + COMPLEX ZERO, HALF, ONE + PARAMETER ( ZERO = ( 0.0, 0.0 ), HALF = ( 0.5, 0.0 ), + $ ONE = ( 1.0, 0.0 ) ) + REAL RZERO + PARAMETER ( RZERO = 0.0 ) +* .. Scalar Arguments .. + REAL EPS, THRESH + INTEGER INCMAX, NALF, NIDIM, NINC, NMAX, NOUT, NTRA, + $ IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), X( NMAX ), XS( NMAX*INCMAX ), + $ XX( NMAX*INCMAX ), Y( NMAX ), + $ YS( NMAX*INCMAX ), YT( NMAX ), + $ YY( NMAX*INCMAX ), Z( NMAX, 2 ) + REAL G( NMAX ) + INTEGER IDIM( NIDIM ), INC( NINC ) +* .. Local Scalars .. + COMPLEX ALPHA, ALS, TRANSL + REAL ERR, ERRMAX + INTEGER I, IA, IC, IN, INCX, INCXS, INCY, INCYS, IX, + $ IY, J, JA, JJ, LAA, LDA, LDAS, LJ, LX, LY, N, + $ NARGS, NC, NS + LOGICAL FULL, NULL, PACKED, RESET, SAME, UPPER + CHARACTER*1 UPLO, UPLOS + CHARACTER*14 CUPLO + CHARACTER*2 ICH +* .. Local Arrays .. + COMPLEX W( 2 ) + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LCE, LCERES + EXTERNAL LCE, LCERES +* .. External Subroutines .. + EXTERNAL CCHER2, CCHPR2, CMAKE, CMVCH +* .. Intrinsic Functions .. + INTRINSIC ABS, CONJG, MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICH/'UL'/ +* .. Executable Statements .. + FULL = SNAME( 9: 9 ).EQ.'e' + PACKED = SNAME( 9: 9 ).EQ.'p' +* Define the number of arguments. + IF( FULL )THEN + NARGS = 9 + ELSE IF( PACKED )THEN + NARGS = 8 + END IF +* + NC = 0 + RESET = .TRUE. + ERRMAX = RZERO +* + DO 140 IN = 1, NIDIM + N = IDIM( IN ) +* Set LDA to 1 more than minimum value if room. + LDA = N + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 140 + IF( PACKED )THEN + LAA = ( N*( N + 1 ) )/2 + ELSE + LAA = LDA*N + END IF +* + DO 130 IC = 1, 2 + UPLO = ICH( IC: IC ) + IF (UPLO.EQ.'U')THEN + CUPLO = ' CblasUpper' + ELSE + CUPLO = ' CblasLower' + END IF + UPPER = UPLO.EQ.'U' +* + DO 120 IX = 1, NINC + INCX = INC( IX ) + LX = ABS( INCX )*N +* +* Generate the vector X. +* + TRANSL = HALF + CALL CMAKE( 'ge', ' ', ' ', 1, N, X, 1, XX, ABS( INCX ), + $ 0, N - 1, RESET, TRANSL ) + IF( N.GT.1 )THEN + X( N/2 ) = ZERO + XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO + END IF +* + DO 110 IY = 1, NINC + INCY = INC( IY ) + LY = ABS( INCY )*N +* +* Generate the vector Y. +* + TRANSL = ZERO + CALL CMAKE( 'ge', ' ', ' ', 1, N, Y, 1, YY, + $ ABS( INCY ), 0, N - 1, RESET, TRANSL ) + IF( N.GT.1 )THEN + Y( N/2 ) = ZERO + YY( 1 + ABS( INCY )*( N/2 - 1 ) ) = ZERO + END IF +* + DO 100 IA = 1, NALF + ALPHA = ALF( IA ) + NULL = N.LE.0.OR.ALPHA.EQ.ZERO +* +* Generate the matrix A. +* + TRANSL = ZERO + CALL CMAKE( SNAME( 8: 9 ), UPLO, ' ', N, N, A, + $ NMAX, AA, LDA, N - 1, N - 1, RESET, + $ TRANSL ) +* + NC = NC + 1 +* +* Save every datum before calling the subroutine. +* + UPLOS = UPLO + NS = N + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LX + XS( I ) = XX( I ) + 20 CONTINUE + INCXS = INCX + DO 30 I = 1, LY + YS( I ) = YY( I ) + 30 CONTINUE + INCYS = INCY +* +* Call the subroutine. +* + IF( FULL )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9993 )NC, SNAME, CUPLO, N, + $ ALPHA, INCX, INCY, LDA + IF( REWI ) + $ REWIND NTRA + CALL CCHER2( IORDER, UPLO, N, ALPHA, XX, INCX, + $ YY, INCY, AA, LDA ) + ELSE IF( PACKED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9994 )NC, SNAME, CUPLO, N, + $ ALPHA, INCX, INCY + IF( REWI ) + $ REWIND NTRA + CALL CCHPR2( IORDER, UPLO, N, ALPHA, XX, INCX, + $ YY, INCY, AA ) + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9992 ) + FATAL = .TRUE. + GO TO 160 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = UPLO.EQ.UPLOS + ISAME( 2 ) = NS.EQ.N + ISAME( 3 ) = ALS.EQ.ALPHA + ISAME( 4 ) = LCE( XS, XX, LX ) + ISAME( 5 ) = INCXS.EQ.INCX + ISAME( 6 ) = LCE( YS, YY, LY ) + ISAME( 7 ) = INCYS.EQ.INCY + IF( NULL )THEN + ISAME( 8 ) = LCE( AS, AA, LAA ) + ELSE + ISAME( 8 ) = LCERES( SNAME( 8: 9 ), UPLO, N, N, + $ AS, AA, LDA ) + END IF + IF( .NOT.PACKED )THEN + ISAME( 9 ) = LDAS.EQ.LDA + END IF +* +* If data was incorrectly changed, report and return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 160 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result column by column. +* + IF( INCX.GT.0 )THEN + DO 50 I = 1, N + Z( I, 1 ) = X( I ) + 50 CONTINUE + ELSE + DO 60 I = 1, N + Z( I, 1 ) = X( N - I + 1 ) + 60 CONTINUE + END IF + IF( INCY.GT.0 )THEN + DO 70 I = 1, N + Z( I, 2 ) = Y( I ) + 70 CONTINUE + ELSE + DO 80 I = 1, N + Z( I, 2 ) = Y( N - I + 1 ) + 80 CONTINUE + END IF + JA = 1 + DO 90 J = 1, N + W( 1 ) = ALPHA*CONJG( Z( J, 2 ) ) + W( 2 ) = CONJG( ALPHA )*CONJG( Z( J, 1 ) ) + IF( UPPER )THEN + JJ = 1 + LJ = J + ELSE + JJ = J + LJ = N - J + 1 + END IF + CALL CMVCH( 'N', LJ, 2, ONE, Z( JJ, 1 ), + $ NMAX, W, 1, ONE, A( JJ, J ), 1, + $ YT, G, AA( JA ), EPS, ERR, FATAL, + $ NOUT, .TRUE. ) + IF( FULL )THEN + IF( UPPER )THEN + JA = JA + LDA + ELSE + JA = JA + LDA + 1 + END IF + ELSE + JA = JA + LJ + END IF + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and return. + IF( FATAL ) + $ GO TO 150 + 90 CONTINUE + ELSE +* Avoid repeating tests with N.le.0. + IF( N.LE.0 ) + $ GO TO 140 + END IF +* + 100 CONTINUE +* + 110 CONTINUE +* + 120 CONTINUE +* + 130 CONTINUE +* + 140 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + WRITE( NOUT, FMT = 9999 )SNAME, NC + ELSE + WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX + END IF + GO TO 170 +* + 150 CONTINUE + WRITE( NOUT, FMT = 9995 )J +* + 160 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + IF( FULL )THEN + WRITE( NOUT, FMT = 9993 )NC, SNAME, CUPLO, N, ALPHA, INCX, + $ INCY, LDA + ELSE IF( PACKED )THEN + WRITE( NOUT, FMT = 9994 )NC, SNAME, CUPLO, N, ALPHA, INCX, INCY + END IF +* + 170 CONTINUE + RETURN +* + 9999 FORMAT(' ',A12, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL', + $ 'S)' ) + 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9997 FORMAT(' ',A12, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', + $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, + $ ' - SUSPECT *******' ) + 9996 FORMAT( ' ******* ',A12, ' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) + 9994 FORMAT(1X, I6, ': ',A12, '(', A14, ',', I3, ',(', F4.1, ',', + $ F4.1, '), X,', I2, ', Y,', I2, ', AP) .' ) + 9993 FORMAT(1X, I6, ': ',A12, '(', A14, ',', I3, ',(', F4.1, ',', + $ F4.1, '), X,', I2, ', Y,', I2, ', A,', I3, ') .' ) + 9992 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of CCHK6. +* + END + SUBROUTINE CMVCH( TRANS, M, N, ALPHA, A, NMAX, X, INCX, BETA, Y, + $ INCY, YT, G, YY, EPS, ERR, FATAL, NOUT, MV ) +* +* Checks the results of the computational tests. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + COMPLEX ZERO + PARAMETER ( ZERO = ( 0.0, 0.0 ) ) + REAL RZERO, RONE + PARAMETER ( RZERO = 0.0, RONE = 1.0 ) +* .. Scalar Arguments .. + COMPLEX ALPHA, BETA + REAL EPS, ERR + INTEGER INCX, INCY, M, N, NMAX, NOUT + LOGICAL FATAL, MV + CHARACTER*1 TRANS +* .. Array Arguments .. + COMPLEX A( NMAX, * ), X( * ), Y( * ), YT( * ), YY( * ) + REAL G( * ) +* .. Local Scalars .. + COMPLEX C + REAL ERRI + INTEGER I, INCXL, INCYL, IY, J, JX, KX, KY, ML, NL + LOGICAL CTRAN, TRAN +* .. Intrinsic Functions .. + INTRINSIC ABS, AIMAG, CONJG, MAX, REAL, SQRT +* .. Statement Functions .. + REAL ABS1 +* .. Statement Function definitions .. + ABS1( C ) = ABS( REAL( C ) ) + ABS( AIMAG( C ) ) +* .. Executable Statements .. + TRAN = TRANS.EQ.'T' + CTRAN = TRANS.EQ.'C' + IF( TRAN.OR.CTRAN )THEN + ML = N + NL = M + ELSE + ML = M + NL = N + END IF + IF( INCX.LT.0 )THEN + KX = NL + INCXL = -1 + ELSE + KX = 1 + INCXL = 1 + END IF + IF( INCY.LT.0 )THEN + KY = ML + INCYL = -1 + ELSE + KY = 1 + INCYL = 1 + END IF +* +* Compute expected result in YT using data in A, X and Y. +* Compute gauges in G. +* + IY = KY + DO 40 I = 1, ML + YT( IY ) = ZERO + G( IY ) = RZERO + JX = KX + IF( TRAN )THEN + DO 10 J = 1, NL + YT( IY ) = YT( IY ) + A( J, I )*X( JX ) + G( IY ) = G( IY ) + ABS1( A( J, I ) )*ABS1( X( JX ) ) + JX = JX + INCXL + 10 CONTINUE + ELSE IF( CTRAN )THEN + DO 20 J = 1, NL + YT( IY ) = YT( IY ) + CONJG( A( J, I ) )*X( JX ) + G( IY ) = G( IY ) + ABS1( A( J, I ) )*ABS1( X( JX ) ) + JX = JX + INCXL + 20 CONTINUE + ELSE + DO 30 J = 1, NL + YT( IY ) = YT( IY ) + A( I, J )*X( JX ) + G( IY ) = G( IY ) + ABS1( A( I, J ) )*ABS1( X( JX ) ) + JX = JX + INCXL + 30 CONTINUE + END IF + YT( IY ) = ALPHA*YT( IY ) + BETA*Y( IY ) + G( IY ) = ABS1( ALPHA )*G( IY ) + ABS1( BETA )*ABS1( Y( IY ) ) + IY = IY + INCYL + 40 CONTINUE +* +* Compute the error ratio for this result. +* + ERR = ZERO + DO 50 I = 1, ML + ERRI = ABS( YT( I ) - YY( 1 + ( I - 1 )*ABS( INCY ) ) )/EPS + IF( G( I ).NE.RZERO ) + $ ERRI = ERRI/G( I ) + ERR = MAX( ERR, ERRI ) + IF( ERR*SQRT( EPS ).GE.RONE ) + $ GO TO 60 + 50 CONTINUE +* If the loop completes, all results are at least half accurate. + GO TO 80 +* +* Report fatal error. +* + 60 FATAL = .TRUE. + WRITE( NOUT, FMT = 9999 ) + DO 70 I = 1, ML + IF( MV )THEN + WRITE( NOUT, FMT = 9998 )I, YT( I ), + $ YY( 1 + ( I - 1 )*ABS( INCY ) ) + ELSE + WRITE( NOUT, FMT = 9998 )I, + $ YY( 1 + ( I - 1 )*ABS( INCY ) ), YT( I ) + END IF + 70 CONTINUE +* + 80 CONTINUE + RETURN +* + 9999 FORMAT(' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL', + $ 'F ACCURATE *******', /' EXPECTED RE', + $ 'SULT COMPUTED RESULT' ) + 9998 FORMAT( 1X, I7, 2( ' (', G15.6, ',', G15.6, ')' ) ) +* +* End of CMVCH. +* + END + LOGICAL FUNCTION LCE( RI, RJ, LR ) +* +* Tests if two arrays are identical. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Scalar Arguments .. + INTEGER LR +* .. Array Arguments .. + COMPLEX RI( * ), RJ( * ) +* .. Local Scalars .. + INTEGER I +* .. Executable Statements .. + DO 10 I = 1, LR + IF( RI( I ).NE.RJ( I ) ) + $ GO TO 20 + 10 CONTINUE + LCE = .TRUE. + GO TO 30 + 20 CONTINUE + LCE = .FALSE. + 30 RETURN +* +* End of LCE. +* + END + LOGICAL FUNCTION LCERES( TYPE, UPLO, M, N, AA, AS, LDA ) +* +* Tests if selected elements in two arrays are equal. +* +* TYPE is 'ge', 'he' or 'hp'. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Scalar Arguments .. + INTEGER LDA, M, N + CHARACTER*1 UPLO + CHARACTER*2 TYPE +* .. Array Arguments .. + COMPLEX AA( LDA, * ), AS( LDA, * ) +* .. Local Scalars .. + INTEGER I, IBEG, IEND, J + LOGICAL UPPER +* .. Executable Statements .. + UPPER = UPLO.EQ.'U' + IF( TYPE.EQ.'ge' )THEN + DO 20 J = 1, N + DO 10 I = M + 1, LDA + IF( AA( I, J ).NE.AS( I, J ) ) + $ GO TO 70 + 10 CONTINUE + 20 CONTINUE + ELSE IF( TYPE.EQ.'he' )THEN + DO 50 J = 1, N + IF( UPPER )THEN + IBEG = 1 + IEND = J + ELSE + IBEG = J + IEND = N + END IF + DO 30 I = 1, IBEG - 1 + IF( AA( I, J ).NE.AS( I, J ) ) + $ GO TO 70 + 30 CONTINUE + DO 40 I = IEND + 1, LDA + IF( AA( I, J ).NE.AS( I, J ) ) + $ GO TO 70 + 40 CONTINUE + 50 CONTINUE + END IF +* + 60 CONTINUE + LCERES = .TRUE. + GO TO 80 + 70 CONTINUE + LCERES = .FALSE. + 80 RETURN +* +* End of LCERES. +* + END + COMPLEX FUNCTION CBEG( RESET ) +* +* Generates complex numbers as pairs of random numbers uniformly +* distributed between -0.5 and 0.5. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Scalar Arguments .. + LOGICAL RESET +* .. Local Scalars .. + INTEGER I, IC, J, MI, MJ +* .. Save statement .. + SAVE I, IC, J, MI, MJ +* .. Intrinsic Functions .. + INTRINSIC CMPLX +* .. Executable Statements .. + IF( RESET )THEN +* Initialize local variables. + MI = 891 + MJ = 457 + I = 7 + J = 7 + IC = 0 + RESET = .FALSE. + END IF +* +* The sequence of values of I or J is bounded between 1 and 999. +* If initial I or J = 1,2,3,6,7 or 9, the period will be 50. +* If initial I or J = 4 or 8, the period will be 25. +* If initial I or J = 5, the period will be 10. +* IC is used to break up the period by skipping 1 value of I or J +* in 6. +* + IC = IC + 1 + 10 I = I*MI + J = J*MJ + I = I - 1000*( I/1000 ) + J = J - 1000*( J/1000 ) + IF( IC.GE.5 )THEN + IC = 0 + GO TO 10 + END IF + CBEG = CMPLX( ( I - 500 )/1001.0, ( J - 500 )/1001.0 ) + RETURN +* +* End of CBEG. +* + END + REAL FUNCTION SDIFF( X, Y ) +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* +* .. Scalar Arguments .. + REAL X, Y +* .. Executable Statements .. + SDIFF = X - Y + RETURN +* +* End of SDIFF. +* + END + SUBROUTINE CMAKE( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, KL, + $ KU, RESET, TRANSL ) +* +* Generates values for an M by N matrix A within the bandwidth +* defined by KL and KU. +* Stores the values in the array AA in the data structure required +* by the routine, with unwanted elements set to rogue value. +* +* TYPE is 'ge', 'gb', 'he', 'hb', 'hp', 'tr', 'tb' OR 'tp'. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + COMPLEX ZERO, ONE + PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) ) + COMPLEX ROGUE + PARAMETER ( ROGUE = ( -1.0E10, 1.0E10 ) ) + REAL RZERO + PARAMETER ( RZERO = 0.0 ) + REAL RROGUE + PARAMETER ( RROGUE = -1.0E10 ) +* .. Scalar Arguments .. + COMPLEX TRANSL + INTEGER KL, KU, LDA, M, N, NMAX + LOGICAL RESET + CHARACTER*1 DIAG, UPLO + CHARACTER*2 TYPE +* .. Array Arguments .. + COMPLEX A( NMAX, * ), AA( * ) +* .. Local Scalars .. + INTEGER I, I1, I2, I3, IBEG, IEND, IOFF, J, JJ, KK + LOGICAL GEN, LOWER, SYM, TRI, UNIT, UPPER +* .. External Functions .. + COMPLEX CBEG + EXTERNAL CBEG +* .. Intrinsic Functions .. + INTRINSIC CMPLX, CONJG, MAX, MIN, REAL +* .. Executable Statements .. + GEN = TYPE( 1: 1 ).EQ.'g' + SYM = TYPE( 1: 1 ).EQ.'h' + TRI = TYPE( 1: 1 ).EQ.'t' + UPPER = ( SYM.OR.TRI ).AND.UPLO.EQ.'U' + LOWER = ( SYM.OR.TRI ).AND.UPLO.EQ.'L' + UNIT = TRI.AND.DIAG.EQ.'U' +* +* Generate data in array A. +* + DO 20 J = 1, N + DO 10 I = 1, M + IF( GEN.OR.( UPPER.AND.I.LE.J ).OR.( LOWER.AND.I.GE.J ) ) + $ THEN + IF( ( I.LE.J.AND.J - I.LE.KU ).OR. + $ ( I.GE.J.AND.I - J.LE.KL ) )THEN + A( I, J ) = CBEG( RESET ) + TRANSL + ELSE + A( I, J ) = ZERO + END IF + IF( I.NE.J )THEN + IF( SYM )THEN + A( J, I ) = CONJG( A( I, J ) ) + ELSE IF( TRI )THEN + A( J, I ) = ZERO + END IF + END IF + END IF + 10 CONTINUE + IF( SYM ) + $ A( J, J ) = CMPLX( REAL( A( J, J ) ), RZERO ) + IF( TRI ) + $ A( J, J ) = A( J, J ) + ONE + IF( UNIT ) + $ A( J, J ) = ONE + 20 CONTINUE +* +* Store elements in array AS in data structure required by routine. +* + IF( TYPE.EQ.'ge' )THEN + DO 50 J = 1, N + DO 30 I = 1, M + AA( I + ( J - 1 )*LDA ) = A( I, J ) + 30 CONTINUE + DO 40 I = M + 1, LDA + AA( I + ( J - 1 )*LDA ) = ROGUE + 40 CONTINUE + 50 CONTINUE + ELSE IF( TYPE.EQ.'gb' )THEN + DO 90 J = 1, N + DO 60 I1 = 1, KU + 1 - J + AA( I1 + ( J - 1 )*LDA ) = ROGUE + 60 CONTINUE + DO 70 I2 = I1, MIN( KL + KU + 1, KU + 1 + M - J ) + AA( I2 + ( J - 1 )*LDA ) = A( I2 + J - KU - 1, J ) + 70 CONTINUE + DO 80 I3 = I2, LDA + AA( I3 + ( J - 1 )*LDA ) = ROGUE + 80 CONTINUE + 90 CONTINUE + ELSE IF( TYPE.EQ.'he'.OR.TYPE.EQ.'tr' )THEN + DO 130 J = 1, N + IF( UPPER )THEN + IBEG = 1 + IF( UNIT )THEN + IEND = J - 1 + ELSE + IEND = J + END IF + ELSE + IF( UNIT )THEN + IBEG = J + 1 + ELSE + IBEG = J + END IF + IEND = N + END IF + DO 100 I = 1, IBEG - 1 + AA( I + ( J - 1 )*LDA ) = ROGUE + 100 CONTINUE + DO 110 I = IBEG, IEND + AA( I + ( J - 1 )*LDA ) = A( I, J ) + 110 CONTINUE + DO 120 I = IEND + 1, LDA + AA( I + ( J - 1 )*LDA ) = ROGUE + 120 CONTINUE + IF( SYM )THEN + JJ = J + ( J - 1 )*LDA + AA( JJ ) = CMPLX( REAL( AA( JJ ) ), RROGUE ) + END IF + 130 CONTINUE + ELSE IF( TYPE.EQ.'hb'.OR.TYPE.EQ.'tb' )THEN + DO 170 J = 1, N + IF( UPPER )THEN + KK = KL + 1 + IBEG = MAX( 1, KL + 2 - J ) + IF( UNIT )THEN + IEND = KL + ELSE + IEND = KL + 1 + END IF + ELSE + KK = 1 + IF( UNIT )THEN + IBEG = 2 + ELSE + IBEG = 1 + END IF + IEND = MIN( KL + 1, 1 + M - J ) + END IF + DO 140 I = 1, IBEG - 1 + AA( I + ( J - 1 )*LDA ) = ROGUE + 140 CONTINUE + DO 150 I = IBEG, IEND + AA( I + ( J - 1 )*LDA ) = A( I + J - KK, J ) + 150 CONTINUE + DO 160 I = IEND + 1, LDA + AA( I + ( J - 1 )*LDA ) = ROGUE + 160 CONTINUE + IF( SYM )THEN + JJ = KK + ( J - 1 )*LDA + AA( JJ ) = CMPLX( REAL( AA( JJ ) ), RROGUE ) + END IF + 170 CONTINUE + ELSE IF( TYPE.EQ.'hp'.OR.TYPE.EQ.'tp' )THEN + IOFF = 0 + DO 190 J = 1, N + IF( UPPER )THEN + IBEG = 1 + IEND = J + ELSE + IBEG = J + IEND = N + END IF + DO 180 I = IBEG, IEND + IOFF = IOFF + 1 + AA( IOFF ) = A( I, J ) + IF( I.EQ.J )THEN + IF( UNIT ) + $ AA( IOFF ) = ROGUE + IF( SYM ) + $ AA( IOFF ) = CMPLX( REAL( AA( IOFF ) ), RROGUE ) + END IF + 180 CONTINUE + 190 CONTINUE + END IF + RETURN +* +* End of CMAKE. +* + END diff --git a/CBLAS/testing/c_cblat3.f b/CBLAS/testing/c_cblat3.f new file mode 100644 index 000000000..b03d47916 --- /dev/null +++ b/CBLAS/testing/c_cblat3.f @@ -0,0 +1,2786 @@ + PROGRAM CBLAT3 +* +* Test program for the COMPLEX Level 3 Blas. +* +* The program must be driven by a short data file. The first 13 records +* of the file are read using list-directed input, the last 9 records +* are read using the format ( A12, L2 ). An annotated example of a data +* file can be obtained by deleting the first 3 characters from the +* following 22 lines: +* 'CBLAT3.SNAP' NAME OF SNAPSHOT OUTPUT FILE +* -1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0) +* F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD. +* F LOGICAL FLAG, T TO STOP ON FAILURES. +* T LOGICAL FLAG, T TO TEST ERROR EXITS. +* 2 0 TO TEST COLUMN-MAJOR, 1 TO TEST ROW-MAJOR, 2 TO TEST BOTH +* 16.0 THRESHOLD VALUE OF TEST RATIO +* 6 NUMBER OF VALUES OF N +* 0 1 2 3 5 9 VALUES OF N +* 3 NUMBER OF VALUES OF ALPHA +* (0.0,0.0) (1.0,0.0) (0.7,-0.9) VALUES OF ALPHA +* 3 NUMBER OF VALUES OF BETA +* (0.0,0.0) (1.0,0.0) (1.3,-1.1) VALUES OF BETA +* cblas_cgemm T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_chemm T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_csymm T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_ctrmm T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_ctrsm T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_cherk T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_csyrk T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_cher2k T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_csyr2k T PUT F FOR NO TEST. SAME COLUMNS. +* +* See: +* +* Dongarra J. J., Du Croz J. J., Duff I. S. and Hammarling S. +* A Set of Level 3 Basic Linear Algebra Subprograms. +* +* Technical Memorandum No.88 (Revision 1), Mathematics and +* Computer Science Division, Argonne National Laboratory, 9700 +* South Cass Avenue, Argonne, Illinois 60439, US. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + INTEGER NIN, NOUT + PARAMETER ( NIN = 5, NOUT = 6 ) + INTEGER NSUBS + PARAMETER ( NSUBS = 9 ) + COMPLEX ZERO, ONE + PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) ) + REAL RZERO, RHALF, RONE + PARAMETER ( RZERO = 0.0, RHALF = 0.5, RONE = 1.0 ) + INTEGER NMAX + PARAMETER ( NMAX = 65 ) + INTEGER NIDMAX, NALMAX, NBEMAX + PARAMETER ( NIDMAX = 9, NALMAX = 7, NBEMAX = 7 ) +* .. Local Scalars .. + REAL EPS, ERR, THRESH + INTEGER I, ISNUM, J, N, NALF, NBET, NIDIM, NTRA, + $ LAYOUT + LOGICAL FATAL, LTESTT, REWI, SAME, SFATAL, TRACE, + $ TSTERR, CORDER, RORDER + CHARACTER*1 TRANSA, TRANSB + CHARACTER*12 SNAMET + CHARACTER*32 SNAPS +* .. Local Arrays .. + COMPLEX AA( NMAX*NMAX ), AB( NMAX, 2*NMAX ), + $ ALF( NALMAX ), AS( NMAX*NMAX ), + $ BB( NMAX*NMAX ), BET( NBEMAX ), + $ BS( NMAX*NMAX ), C( NMAX, NMAX ), + $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ), + $ W( 2*NMAX ) + REAL G( NMAX ) + INTEGER IDIM( NIDMAX ) + LOGICAL LTEST( NSUBS ) + CHARACTER*12 SNAMES( NSUBS ) +* .. External Functions .. + REAL SDIFF + LOGICAL LCE + EXTERNAL SDIFF, LCE +* .. External Subroutines .. + EXTERNAL CCHK1, CCHK2, CCHK3, CCHK4, CCHK5, CMMCH +* .. Intrinsic Functions .. + INTRINSIC MAX, MIN +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL LERR, OK + CHARACTER*12 SRNAMT +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK, LERR + COMMON /SRNAMC/SRNAMT +* .. Data statements .. + DATA SNAMES/'cblas_cgemm ', 'cblas_chemm ', + $ 'cblas_csymm ', 'cblas_ctrmm ', 'cblas_ctrsm ', + $ 'cblas_cherk ', 'cblas_csyrk ', 'cblas_cher2k', + $ 'cblas_csyr2k'/ +* .. Executable Statements .. +* + NOUTC = NOUT +* +* Read name and unit number for snapshot output file and open file. +* + READ( NIN, FMT = * )SNAPS + READ( NIN, FMT = * )NTRA + TRACE = NTRA.GE.0 + IF( TRACE )THEN + OPEN( NTRA, FILE = SNAPS ) + END IF +* Read the flag that directs rewinding of the snapshot file. + READ( NIN, FMT = * )REWI + REWI = REWI.AND.TRACE +* Read the flag that directs stopping on any failure. + READ( NIN, FMT = * )SFATAL +* Read the flag that indicates whether error exits are to be tested. + READ( NIN, FMT = * )TSTERR +* Read the flag that indicates whether row-major data layout to be tested. + READ( NIN, FMT = * )LAYOUT +* Read the threshold value of the test ratio + READ( NIN, FMT = * )THRESH +* +* Read and check the parameter values for the tests. +* +* Values of N + READ( NIN, FMT = * )NIDIM + IF( NIDIM.LT.1.OR.NIDIM.GT.NIDMAX )THEN + WRITE( NOUT, FMT = 9997 )'N', NIDMAX + GO TO 220 + END IF + READ( NIN, FMT = * )( IDIM( I ), I = 1, NIDIM ) + DO 10 I = 1, NIDIM + IF( IDIM( I ).LT.0.OR.IDIM( I ).GT.NMAX )THEN + WRITE( NOUT, FMT = 9996 )NMAX + GO TO 220 + END IF + 10 CONTINUE +* Values of ALPHA + READ( NIN, FMT = * )NALF + IF( NALF.LT.1.OR.NALF.GT.NALMAX )THEN + WRITE( NOUT, FMT = 9997 )'ALPHA', NALMAX + GO TO 220 + END IF + READ( NIN, FMT = * )( ALF( I ), I = 1, NALF ) +* Values of BETA + READ( NIN, FMT = * )NBET + IF( NBET.LT.1.OR.NBET.GT.NBEMAX )THEN + WRITE( NOUT, FMT = 9997 )'BETA', NBEMAX + GO TO 220 + END IF + READ( NIN, FMT = * )( BET( I ), I = 1, NBET ) +* +* Report values of parameters. +* + WRITE( NOUT, FMT = 9995 ) + WRITE( NOUT, FMT = 9994 )( IDIM( I ), I = 1, NIDIM ) + WRITE( NOUT, FMT = 9993 )( ALF( I ), I = 1, NALF ) + WRITE( NOUT, FMT = 9992 )( BET( I ), I = 1, NBET ) + IF( .NOT.TSTERR )THEN + WRITE( NOUT, FMT = * ) + WRITE( NOUT, FMT = 9984 ) + END IF + WRITE( NOUT, FMT = * ) + WRITE( NOUT, FMT = 9999 )THRESH + WRITE( NOUT, FMT = * ) + + RORDER = .FALSE. + CORDER = .FALSE. + IF (LAYOUT.EQ.2) THEN + RORDER = .TRUE. + CORDER = .TRUE. + WRITE( *, FMT = 10002 ) + ELSE IF (LAYOUT.EQ.1) THEN + RORDER = .TRUE. + WRITE( *, FMT = 10001 ) + ELSE IF (LAYOUT.EQ.0) THEN + CORDER = .TRUE. + WRITE( *, FMT = 10000 ) + END IF + WRITE( *, FMT = * ) + +* +* Read names of subroutines and flags which indicate +* whether they are to be tested. +* + DO 20 I = 1, NSUBS + LTEST( I ) = .FALSE. + 20 CONTINUE + 30 READ( NIN, FMT = 9988, END = 60 )SNAMET, LTESTT + DO 40 I = 1, NSUBS + IF( SNAMET.EQ.SNAMES( I ) ) + $ GO TO 50 + 40 CONTINUE + WRITE( NOUT, FMT = 9990 )SNAMET + STOP + 50 LTEST( I ) = LTESTT + GO TO 30 +* + 60 CONTINUE + CLOSE ( NIN ) +* +* Compute EPS (the machine precision). +* + EPS = RONE + 70 CONTINUE + IF( SDIFF( RONE + EPS, RONE ).EQ.RZERO ) + $ GO TO 80 + EPS = RHALF*EPS + GO TO 70 + 80 CONTINUE + EPS = EPS + EPS + WRITE( NOUT, FMT = 9998 )EPS +* +* Check the reliability of CMMCH using exact data. +* + N = MIN( 32, NMAX ) + DO 100 J = 1, N + DO 90 I = 1, N + AB( I, J ) = MAX( I - J + 1, 0 ) + 90 CONTINUE + AB( J, NMAX + 1 ) = J + AB( 1, NMAX + J ) = J + C( J, 1 ) = ZERO + 100 CONTINUE + DO 110 J = 1, N + CC( J ) = J*( ( J + 1 )*J )/2 - ( ( J + 1 )*J*( J - 1 ) )/3 + 110 CONTINUE +* CC holds the exact result. On exit from CMMCH CT holds +* the result computed by CMMCH. + TRANSA = 'N' + TRANSB = 'N' + CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX, + $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC, + $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. ) + SAME = LCE( CC, CT, N ) + IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN + WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR + STOP + END IF + TRANSB = 'C' + CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX, + $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC, + $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. ) + SAME = LCE( CC, CT, N ) + IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN + WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR + STOP + END IF + DO 120 J = 1, N + AB( J, NMAX + 1 ) = N - J + 1 + AB( 1, NMAX + J ) = N - J + 1 + 120 CONTINUE + DO 130 J = 1, N + CC( N - J + 1 ) = J*( ( J + 1 )*J )/2 - + $ ( ( J + 1 )*J*( J - 1 ) )/3 + 130 CONTINUE + TRANSA = 'C' + TRANSB = 'N' + CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX, + $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC, + $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. ) + SAME = LCE( CC, CT, N ) + IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN + WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR + STOP + END IF + TRANSB = 'C' + CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX, + $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC, + $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. ) + SAME = LCE( CC, CT, N ) + IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN + WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR + STOP + END IF +* +* Test each subroutine in turn. +* + DO 200 ISNUM = 1, NSUBS + WRITE( NOUT, FMT = * ) + IF( .NOT.LTEST( ISNUM ) )THEN +* Subprogram is not to be tested. + WRITE( NOUT, FMT = 9987 )SNAMES( ISNUM ) + ELSE + SRNAMT = SNAMES( ISNUM ) +* Test error exits. + IF( TSTERR )THEN + CALL CC3CHKE( SNAMES( ISNUM ) ) + WRITE( NOUT, FMT = * ) + END IF +* Test computations. + INFOT = 0 + OK = .TRUE. + FATAL = .FALSE. + GO TO ( 140, 150, 150, 160, 160, 170, 170, + $ 180, 180 )ISNUM +* Test CGEMM, 01. + 140 IF (CORDER) THEN + CALL CCHK1(SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, + $ CC, CS, CT, G, 0 ) + END IF + IF (RORDER) THEN + CALL CCHK1(SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, + $ CC, CS, CT, G, 1 ) + END IF + GO TO 190 +* Test CHEMM, 02, CSYMM, 03. + 150 IF (CORDER) THEN + CALL CCHK2(SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, + $ CC, CS, CT, G, 0 ) + END IF + IF (RORDER) THEN + CALL CCHK2(SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, + $ CC, CS, CT, G, 1 ) + END IF + GO TO 190 +* Test CTRMM, 04, CTRSM, 05. + 160 IF (CORDER) THEN + CALL CCHK3(SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NMAX, AB, + $ AA, AS, AB( 1, NMAX + 1 ), BB, BS, CT, G, C, + $ 0 ) + END IF + IF (RORDER) THEN + CALL CCHK3(SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NMAX, AB, + $ AA, AS, AB( 1, NMAX + 1 ), BB, BS, CT, G, C, + $ 1 ) + END IF + GO TO 190 +* Test CHERK, 06, CSYRK, 07. + 170 IF (CORDER) THEN + CALL CCHK4(SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, + $ CC, CS, CT, G, 0 ) + END IF + IF (RORDER) THEN + CALL CCHK4(SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, + $ CC, CS, CT, G, 1 ) + END IF + GO TO 190 +* Test CHER2K, 08, CSYR2K, 09. + 180 IF (CORDER) THEN + CALL CCHK5(SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, BB, BS, C, CC, CS, CT, G, W, + $ 0 ) + END IF + IF (RORDER) THEN + CALL CCHK5(SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, BB, BS, C, CC, CS, CT, G, W, + $ 1 ) + END IF + GO TO 190 +* + 190 IF( FATAL.AND.SFATAL ) + $ GO TO 210 + END IF + 200 CONTINUE + WRITE( NOUT, FMT = 9986 ) + GO TO 230 +* + 210 CONTINUE + WRITE( NOUT, FMT = 9985 ) + GO TO 230 +* + 220 CONTINUE + WRITE( NOUT, FMT = 9991 ) +* + 230 CONTINUE + IF( TRACE ) + $ CLOSE ( NTRA ) + CLOSE ( NOUT ) + STOP +* +10002 FORMAT( ' COLUMN-MAJOR AND ROW-MAJOR DATA LAYOUTS ARE TESTED' ) +10001 FORMAT(' ROW-MAJOR DATA LAYOUT IS TESTED' ) +10000 FORMAT(' COLUMN-MAJOR DATA LAYOUT IS TESTED' ) + 9999 FORMAT(' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES', + $ 'S THAN', F8.2 ) + 9998 FORMAT(' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1P, E9.1 ) + 9997 FORMAT(' NUMBER OF VALUES OF ', A, ' IS LESS THAN 1 OR GREATER ', + $ 'THAN ', I2 ) + 9996 FORMAT( ' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', I2 ) + 9995 FORMAT(' TESTS OF THE COMPLEX LEVEL 3 BLAS', //' THE F', + $ 'OLLOWING PARAMETER VALUES WILL BE USED:' ) + 9994 FORMAT( ' FOR N ', 9I6 ) + 9993 FORMAT( ' FOR ALPHA ', + $ 7( '(', F4.1, ',', F4.1, ') ', : ) ) + 9992 FORMAT( ' FOR BETA ', + $ 7( '(', F4.1, ',', F4.1, ') ', : ) ) + 9991 FORMAT( ' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM', + $ /' ******* TESTS ABANDONED *******' ) + 9990 FORMAT(' SUBPROGRAM NAME ', A12,' NOT RECOGNIZED', /' ******* T', + $ 'ESTS ABANDONED *******' ) + 9989 FORMAT(' ERROR IN CMMCH - IN-LINE DOT PRODUCTS ARE BEING EVALU', + $ 'ATED WRONGLY.', /' CMMCH WAS CALLED WITH TRANSA = ', A1, + $ 'AND TRANSB = ', A1, /' AND RETURNED SAME = ', L1, ' AND ', + $ ' ERR = ', F12.3, '.', /' THIS MAY BE DUE TO FAULTS IN THE ', + $ 'ARITHMETIC OR THE COMPILER.', /' ******* TESTS ABANDONED ', + $ '*******' ) + 9988 FORMAT( A12,L2 ) + 9987 FORMAT( 1X, A12,' WAS NOT TESTED' ) + 9986 FORMAT( /' END OF TESTS' ) + 9985 FORMAT( /' ******* FATAL ERROR - TESTS ABANDONED *******' ) + 9984 FORMAT( ' ERROR-EXITS WILL NOT BE TESTED' ) +* +* End of CBLAT3. +* + END + SUBROUTINE CCHK1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX, + $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G, + $ IORDER ) +* +* Tests CGEMM. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + COMPLEX ZERO + PARAMETER ( ZERO = ( 0.0, 0.0 ) ) + REAL RZERO + PARAMETER ( RZERO = 0.0 ) +* .. Scalar Arguments .. + REAL EPS, THRESH + INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), B( NMAX, NMAX ), + $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ), + $ C( NMAX, NMAX ), CC( NMAX*NMAX ), + $ CS( NMAX*NMAX ), CT( NMAX ) + REAL G( NMAX ) + INTEGER IDIM( NIDIM ) +* .. Local Scalars .. + COMPLEX ALPHA, ALS, BETA, BLS + REAL ERR, ERRMAX + INTEGER I, IA, IB, ICA, ICB, IK, IM, IN, K, KS, LAA, + $ LBB, LCC, LDA, LDAS, LDB, LDBS, LDC, LDCS, M, + $ MA, MB, MS, N, NA, NARGS, NB, NC, NS + LOGICAL NULL, RESET, SAME, TRANA, TRANB + CHARACTER*1 TRANAS, TRANBS, TRANSA, TRANSB + CHARACTER*3 ICH +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LCE, LCERES + EXTERNAL LCE, LCERES +* .. External Subroutines .. + EXTERNAL CCGEMM, CMAKE, CMMCH +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL LERR, OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK, LERR +* .. Data statements .. + DATA ICH/'NTC'/ +* .. Executable Statements .. +* + NARGS = 13 + NC = 0 + RESET = .TRUE. + ERRMAX = RZERO +* + DO 110 IM = 1, NIDIM + M = IDIM( IM ) +* + DO 100 IN = 1, NIDIM + N = IDIM( IN ) +* Set LDC to 1 more than minimum value if room. + LDC = M + IF( LDC.LT.NMAX ) + $ LDC = LDC + 1 +* Skip tests if not enough room. + IF( LDC.GT.NMAX ) + $ GO TO 100 + LCC = LDC*N + NULL = N.LE.0.OR.M.LE.0 +* + DO 90 IK = 1, NIDIM + K = IDIM( IK ) +* + DO 80 ICA = 1, 3 + TRANSA = ICH( ICA: ICA ) + TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C' +* + IF( TRANA )THEN + MA = K + NA = M + ELSE + MA = M + NA = K + END IF +* Set LDA to 1 more than minimum value if room. + LDA = MA + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 80 + LAA = LDA*NA +* +* Generate the matrix A. +* + CALL CMAKE( 'ge', ' ', ' ', MA, NA, A, NMAX, AA, LDA, + $ RESET, ZERO ) +* + DO 70 ICB = 1, 3 + TRANSB = ICH( ICB: ICB ) + TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C' +* + IF( TRANB )THEN + MB = N + NB = K + ELSE + MB = K + NB = N + END IF +* Set LDB to 1 more than minimum value if room. + LDB = MB + IF( LDB.LT.NMAX ) + $ LDB = LDB + 1 +* Skip tests if not enough room. + IF( LDB.GT.NMAX ) + $ GO TO 70 + LBB = LDB*NB +* +* Generate the matrix B. +* + CALL CMAKE( 'ge', ' ', ' ', MB, NB, B, NMAX, BB, + $ LDB, RESET, ZERO ) +* + DO 60 IA = 1, NALF + ALPHA = ALF( IA ) +* + DO 50 IB = 1, NBET + BETA = BET( IB ) +* +* Generate the matrix C. +* + CALL CMAKE( 'ge', ' ', ' ', M, N, C, NMAX, + $ CC, LDC, RESET, ZERO ) +* + NC = NC + 1 +* +* Save every datum before calling the +* subroutine. +* + TRANAS = TRANSA + TRANBS = TRANSB + MS = M + NS = N + KS = K + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LBB + BS( I ) = BB( I ) + 20 CONTINUE + LDBS = LDB + BLS = BETA + DO 30 I = 1, LCC + CS( I ) = CC( I ) + 30 CONTINUE + LDCS = LDC +* +* Call the subroutine. +* + IF( TRACE ) + $ CALL CPRCN1(NTRA, NC, SNAME, IORDER, + $ TRANSA, TRANSB, M, N, K, ALPHA, LDA, + $ LDB, BETA, LDC) + IF( REWI ) + $ REWIND NTRA + CALL CCGEMM( IORDER, TRANSA, TRANSB, M, N, + $ K, ALPHA, AA, LDA, BB, LDB, + $ BETA, CC, LDC ) +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9994 ) + FATAL = .TRUE. + GO TO 120 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = TRANSA.EQ.TRANAS + ISAME( 2 ) = TRANSB.EQ.TRANBS + ISAME( 3 ) = MS.EQ.M + ISAME( 4 ) = NS.EQ.N + ISAME( 5 ) = KS.EQ.K + ISAME( 6 ) = ALS.EQ.ALPHA + ISAME( 7 ) = LCE( AS, AA, LAA ) + ISAME( 8 ) = LDAS.EQ.LDA + ISAME( 9 ) = LCE( BS, BB, LBB ) + ISAME( 10 ) = LDBS.EQ.LDB + ISAME( 11 ) = BLS.EQ.BETA + IF( NULL )THEN + ISAME( 12 ) = LCE( CS, CC, LCC ) + ELSE + ISAME( 12 ) = LCERES( 'ge', ' ', M, N, CS, + $ CC, LDC ) + END IF + ISAME( 13 ) = LDCS.EQ.LDC +* +* If data was incorrectly changed, report +* and return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 120 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result. +* + CALL CMMCH( TRANSA, TRANSB, M, N, K, + $ ALPHA, A, NMAX, B, NMAX, BETA, + $ C, NMAX, CT, G, CC, LDC, EPS, + $ ERR, FATAL, NOUT, .TRUE. ) + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and +* return. + IF( FATAL ) + $ GO TO 120 + END IF +* + 50 CONTINUE +* + 60 CONTINUE +* + 70 CONTINUE +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* + 110 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 130 +* + 120 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + CALL CPRCN1(NOUT, NC, SNAME, IORDER, TRANSA, TRANSB, + $ M, N, K, ALPHA, LDA, LDB, BETA, LDC) +* + 130 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9996 FORMAT( ' ******* ', A12,' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( 1X, I6, ': ', A12,'(''', A1, ''',''', A1, ''',', + $ 3( I3, ',' ), '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, + $ ',(', F4.1, ',', F4.1, '), C,', I3, ').' ) + 9994 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of CCHK1. +* + END +* + SUBROUTINE CPRCN1(NOUT, NC, SNAME, IORDER, TRANSA, TRANSB, M, N, + $ K, ALPHA, LDA, LDB, BETA, LDC) + INTEGER NOUT, NC, IORDER, M, N, K, LDA, LDB, LDC + COMPLEX ALPHA, BETA + CHARACTER*1 TRANSA, TRANSB + CHARACTER*12 SNAME + CHARACTER*14 CRC, CTA,CTB + + IF (TRANSA.EQ.'N')THEN + CTA = ' CblasNoTrans' + ELSE IF (TRANSA.EQ.'T')THEN + CTA = ' CblasTrans' + ELSE + CTA = 'CblasConjTrans' + END IF + IF (TRANSB.EQ.'N')THEN + CTB = ' CblasNoTrans' + ELSE IF (TRANSB.EQ.'T')THEN + CTB = ' CblasTrans' + ELSE + CTB = 'CblasConjTrans' + END IF + IF (IORDER.EQ.1)THEN + CRC = ' CblasRowMajor' + ELSE + CRC = ' CblasColMajor' + END IF + WRITE(NOUT, FMT = 9995)NC,SNAME,CRC, CTA,CTB + WRITE(NOUT, FMT = 9994)M, N, K, ALPHA, LDA, LDB, BETA, LDC + + 9995 FORMAT( 1X, I6, ': ', A12,'(', A14, ',', A14, ',', A14, ',') + 9994 FORMAT( 10X, 3( I3, ',' ) ,' (', F4.1,',',F4.1,') , A,', + $ I3, ', B,', I3, ', (', F4.1,',',F4.1,') , C,', I3, ').' ) + END +* + SUBROUTINE CCHK2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX, + $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G, + $ IORDER ) +* +* Tests CHEMM and CSYMM. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + COMPLEX ZERO + PARAMETER ( ZERO = ( 0.0, 0.0 ) ) + REAL RZERO + PARAMETER ( RZERO = 0.0 ) +* .. Scalar Arguments .. + REAL EPS, THRESH + INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), B( NMAX, NMAX ), + $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ), + $ C( NMAX, NMAX ), CC( NMAX*NMAX ), + $ CS( NMAX*NMAX ), CT( NMAX ) + REAL G( NMAX ) + INTEGER IDIM( NIDIM ) +* .. Local Scalars .. + COMPLEX ALPHA, ALS, BETA, BLS + REAL ERR, ERRMAX + INTEGER I, IA, IB, ICS, ICU, IM, IN, LAA, LBB, LCC, + $ LDA, LDAS, LDB, LDBS, LDC, LDCS, M, MS, N, NA, + $ NARGS, NC, NS + LOGICAL CONJ, LEFT, NULL, RESET, SAME + CHARACTER*1 SIDE, SIDES, UPLO, UPLOS + CHARACTER*2 ICHS, ICHU +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LCE, LCERES + EXTERNAL LCE, LCERES +* .. External Subroutines .. + EXTERNAL CCHEMM, CMAKE, CMMCH, CCSYMM +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL LERR, OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK, LERR +* .. Data statements .. + DATA ICHS/'LR'/, ICHU/'UL'/ +* .. Executable Statements .. + CONJ = SNAME( 8: 9 ).EQ.'he' +* + NARGS = 12 + NC = 0 + RESET = .TRUE. + ERRMAX = RZERO +* + DO 100 IM = 1, NIDIM + M = IDIM( IM ) +* + DO 90 IN = 1, NIDIM + N = IDIM( IN ) +* Set LDC to 1 more than minimum value if room. + LDC = M + IF( LDC.LT.NMAX ) + $ LDC = LDC + 1 +* Skip tests if not enough room. + IF( LDC.GT.NMAX ) + $ GO TO 90 + LCC = LDC*N + NULL = N.LE.0.OR.M.LE.0 +* Set LDB to 1 more than minimum value if room. + LDB = M + IF( LDB.LT.NMAX ) + $ LDB = LDB + 1 +* Skip tests if not enough room. + IF( LDB.GT.NMAX ) + $ GO TO 90 + LBB = LDB*N +* +* Generate the matrix B. +* + CALL CMAKE( 'ge', ' ', ' ', M, N, B, NMAX, BB, LDB, RESET, + $ ZERO ) +* + DO 80 ICS = 1, 2 + SIDE = ICHS( ICS: ICS ) + LEFT = SIDE.EQ.'L' +* + IF( LEFT )THEN + NA = M + ELSE + NA = N + END IF +* Set LDA to 1 more than minimum value if room. + LDA = NA + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 80 + LAA = LDA*NA +* + DO 70 ICU = 1, 2 + UPLO = ICHU( ICU: ICU ) +* +* Generate the hermitian or symmetric matrix A. +* + CALL CMAKE(SNAME( 8: 9 ), UPLO, ' ', NA, NA, A, NMAX, + $ AA, LDA, RESET, ZERO ) +* + DO 60 IA = 1, NALF + ALPHA = ALF( IA ) +* + DO 50 IB = 1, NBET + BETA = BET( IB ) +* +* Generate the matrix C. +* + CALL CMAKE( 'ge', ' ', ' ', M, N, C, NMAX, CC, + $ LDC, RESET, ZERO ) +* + NC = NC + 1 +* +* Save every datum before calling the +* subroutine. +* + SIDES = SIDE + UPLOS = UPLO + MS = M + NS = N + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LBB + BS( I ) = BB( I ) + 20 CONTINUE + LDBS = LDB + BLS = BETA + DO 30 I = 1, LCC + CS( I ) = CC( I ) + 30 CONTINUE + LDCS = LDC +* +* Call the subroutine. +* + IF( TRACE ) + $ CALL CPRCN2(NTRA, NC, SNAME, IORDER, + $ SIDE, UPLO, M, N, ALPHA, LDA, LDB, + $ BETA, LDC) + IF( REWI ) + $ REWIND NTRA + IF( CONJ )THEN + CALL CCHEMM( IORDER, SIDE, UPLO, M, N, + $ ALPHA, AA, LDA, BB, LDB, BETA, + $ CC, LDC ) + ELSE + CALL CCSYMM( IORDER, SIDE, UPLO, M, N, + $ ALPHA, AA, LDA, BB, LDB, BETA, + $ CC, LDC ) + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9994 ) + FATAL = .TRUE. + GO TO 110 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = SIDES.EQ.SIDE + ISAME( 2 ) = UPLOS.EQ.UPLO + ISAME( 3 ) = MS.EQ.M + ISAME( 4 ) = NS.EQ.N + ISAME( 5 ) = ALS.EQ.ALPHA + ISAME( 6 ) = LCE( AS, AA, LAA ) + ISAME( 7 ) = LDAS.EQ.LDA + ISAME( 8 ) = LCE( BS, BB, LBB ) + ISAME( 9 ) = LDBS.EQ.LDB + ISAME( 10 ) = BLS.EQ.BETA + IF( NULL )THEN + ISAME( 11 ) = LCE( CS, CC, LCC ) + ELSE + ISAME( 11 ) = LCERES( 'ge', ' ', M, N, CS, + $ CC, LDC ) + END IF + ISAME( 12 ) = LDCS.EQ.LDC +* +* If data was incorrectly changed, report and +* return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 110 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result. +* + IF( LEFT )THEN + CALL CMMCH( 'N', 'N', M, N, M, ALPHA, A, + $ NMAX, B, NMAX, BETA, C, NMAX, + $ CT, G, CC, LDC, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + ELSE + CALL CMMCH( 'N', 'N', M, N, N, ALPHA, B, + $ NMAX, A, NMAX, BETA, C, NMAX, + $ CT, G, CC, LDC, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + END IF + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and +* return. + IF( FATAL ) + $ GO TO 110 + END IF +* + 50 CONTINUE +* + 60 CONTINUE +* + 70 CONTINUE +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 120 +* + 110 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + CALL CPRCN2(NOUT, NC, SNAME, IORDER, SIDE, UPLO, M, N, ALPHA, LDA, + $ LDB, BETA, LDC) +* + 120 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9996 FORMAT( ' ******* ', A12,' FAILED ON CALL NUMBER:' ) + 9995 FORMAT(1X, I6, ': ', A12,'(', 2( '''', A1, ''',' ), 2( I3, ',' ), + $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',(', F4.1, + $ ',', F4.1, '), C,', I3, ') .' ) + 9994 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of CCHK2. +* + END +* + SUBROUTINE CPRCN2(NOUT, NC, SNAME, IORDER, SIDE, UPLO, M, N, + $ ALPHA, LDA, LDB, BETA, LDC) + INTEGER NOUT, NC, IORDER, M, N, LDA, LDB, LDC + COMPLEX ALPHA, BETA + CHARACTER*1 SIDE, UPLO + CHARACTER*12 SNAME + CHARACTER*14 CRC, CS,CU + + IF (SIDE.EQ.'L')THEN + CS = ' CblasLeft' + ELSE + CS = ' CblasRight' + END IF + IF (UPLO.EQ.'U')THEN + CU = ' CblasUpper' + ELSE + CU = ' CblasLower' + END IF + IF (IORDER.EQ.1)THEN + CRC = ' CblasRowMajor' + ELSE + CRC = ' CblasColMajor' + END IF + WRITE(NOUT, FMT = 9995)NC,SNAME,CRC, CS,CU + WRITE(NOUT, FMT = 9994)M, N, ALPHA, LDA, LDB, BETA, LDC + + 9995 FORMAT( 1X, I6, ': ', A12,'(', A14, ',', A14, ',', A14, ',') + 9994 FORMAT( 10X, 2( I3, ',' ),' (',F4.1,',',F4.1, '), A,', I3, + $ ', B,', I3, ', (',F4.1,',',F4.1, '), ', 'C,', I3, ').' ) + END +* + SUBROUTINE CCHK3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NMAX, A, AA, AS, + $ B, BB, BS, CT, G, C, IORDER ) +* +* Tests CTRMM and CTRSM. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + COMPLEX ZERO, ONE + PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) ) + REAL RZERO + PARAMETER ( RZERO = 0.0 ) +* .. Scalar Arguments .. + REAL EPS, THRESH + INTEGER NALF, NIDIM, NMAX, NOUT, NTRA, IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), B( NMAX, NMAX ), + $ BB( NMAX*NMAX ), BS( NMAX*NMAX ), + $ C( NMAX, NMAX ), CT( NMAX ) + REAL G( NMAX ) + INTEGER IDIM( NIDIM ) +* .. Local Scalars .. + COMPLEX ALPHA, ALS + REAL ERR, ERRMAX + INTEGER I, IA, ICD, ICS, ICT, ICU, IM, IN, J, LAA, LBB, + $ LDA, LDAS, LDB, LDBS, M, MS, N, NA, NARGS, NC, + $ NS + LOGICAL LEFT, NULL, RESET, SAME + CHARACTER*1 DIAG, DIAGS, SIDE, SIDES, TRANAS, TRANSA, UPLO, + $ UPLOS + CHARACTER*2 ICHD, ICHS, ICHU + CHARACTER*3 ICHT +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LCE, LCERES + EXTERNAL LCE, LCERES +* .. External Subroutines .. + EXTERNAL CMAKE, CMMCH, CCTRMM, CCTRSM +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL LERR, OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK, LERR +* .. Data statements .. + DATA ICHU/'UL'/, ICHT/'NTC'/, ICHD/'UN'/, ICHS/'LR'/ +* .. Executable Statements .. +* + NARGS = 11 + NC = 0 + RESET = .TRUE. + ERRMAX = RZERO +* Set up zero matrix for CMMCH. + DO 20 J = 1, NMAX + DO 10 I = 1, NMAX + C( I, J ) = ZERO + 10 CONTINUE + 20 CONTINUE +* + DO 140 IM = 1, NIDIM + M = IDIM( IM ) +* + DO 130 IN = 1, NIDIM + N = IDIM( IN ) +* Set LDB to 1 more than minimum value if room. + LDB = M + IF( LDB.LT.NMAX ) + $ LDB = LDB + 1 +* Skip tests if not enough room. + IF( LDB.GT.NMAX ) + $ GO TO 130 + LBB = LDB*N + NULL = M.LE.0.OR.N.LE.0 +* + DO 120 ICS = 1, 2 + SIDE = ICHS( ICS: ICS ) + LEFT = SIDE.EQ.'L' + IF( LEFT )THEN + NA = M + ELSE + NA = N + END IF +* Set LDA to 1 more than minimum value if room. + LDA = NA + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 130 + LAA = LDA*NA +* + DO 110 ICU = 1, 2 + UPLO = ICHU( ICU: ICU ) +* + DO 100 ICT = 1, 3 + TRANSA = ICHT( ICT: ICT ) +* + DO 90 ICD = 1, 2 + DIAG = ICHD( ICD: ICD ) +* + DO 80 IA = 1, NALF + ALPHA = ALF( IA ) +* +* Generate the matrix A. +* + CALL CMAKE( 'tr', UPLO, DIAG, NA, NA, A, + $ NMAX, AA, LDA, RESET, ZERO ) +* +* Generate the matrix B. +* + CALL CMAKE( 'ge', ' ', ' ', M, N, B, NMAX, + $ BB, LDB, RESET, ZERO ) +* + NC = NC + 1 +* +* Save every datum before calling the +* subroutine. +* + SIDES = SIDE + UPLOS = UPLO + TRANAS = TRANSA + DIAGS = DIAG + MS = M + NS = N + ALS = ALPHA + DO 30 I = 1, LAA + AS( I ) = AA( I ) + 30 CONTINUE + LDAS = LDA + DO 40 I = 1, LBB + BS( I ) = BB( I ) + 40 CONTINUE + LDBS = LDB +* +* Call the subroutine. +* + IF( SNAME( 10: 11 ).EQ.'mm' )THEN + IF( TRACE ) + $ CALL CPRCN3( NTRA, NC, SNAME, IORDER, + $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, + $ LDA, LDB) + IF( REWI ) + $ REWIND NTRA + CALL CCTRMM(IORDER, SIDE, UPLO, TRANSA, + $ DIAG, M, N, ALPHA, AA, LDA, + $ BB, LDB ) + ELSE IF( SNAME( 10: 11 ).EQ.'sm' )THEN + IF( TRACE ) + $ CALL CPRCN3( NTRA, NC, SNAME, IORDER, + $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, + $ LDA, LDB) + IF( REWI ) + $ REWIND NTRA + CALL CCTRSM(IORDER, SIDE, UPLO, TRANSA, + $ DIAG, M, N, ALPHA, AA, LDA, + $ BB, LDB ) + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9994 ) + FATAL = .TRUE. + GO TO 150 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = SIDES.EQ.SIDE + ISAME( 2 ) = UPLOS.EQ.UPLO + ISAME( 3 ) = TRANAS.EQ.TRANSA + ISAME( 4 ) = DIAGS.EQ.DIAG + ISAME( 5 ) = MS.EQ.M + ISAME( 6 ) = NS.EQ.N + ISAME( 7 ) = ALS.EQ.ALPHA + ISAME( 8 ) = LCE( AS, AA, LAA ) + ISAME( 9 ) = LDAS.EQ.LDA + IF( NULL )THEN + ISAME( 10 ) = LCE( BS, BB, LBB ) + ELSE + ISAME( 10 ) = LCERES( 'ge', ' ', M, N, BS, + $ BB, LDB ) + END IF + ISAME( 11 ) = LDBS.EQ.LDB +* +* If data was incorrectly changed, report and +* return. +* + SAME = .TRUE. + DO 50 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 50 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 150 + END IF +* + IF( .NOT.NULL )THEN + IF( SNAME( 10: 11 ).EQ.'mm' )THEN +* +* Check the result. +* + IF( LEFT )THEN + CALL CMMCH( TRANSA, 'N', M, N, M, + $ ALPHA, A, NMAX, B, NMAX, + $ ZERO, C, NMAX, CT, G, + $ BB, LDB, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + ELSE + CALL CMMCH( 'N', TRANSA, M, N, N, + $ ALPHA, B, NMAX, A, NMAX, + $ ZERO, C, NMAX, CT, G, + $ BB, LDB, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + END IF + ELSE IF( SNAME( 10: 11 ).EQ.'sm' )THEN +* +* Compute approximation to original +* matrix. +* + DO 70 J = 1, N + DO 60 I = 1, M + C( I, J ) = BB( I + ( J - 1 )* + $ LDB ) + BB( I + ( J - 1 )*LDB ) = ALPHA* + $ B( I, J ) + 60 CONTINUE + 70 CONTINUE +* + IF( LEFT )THEN + CALL CMMCH( TRANSA, 'N', M, N, M, + $ ONE, A, NMAX, C, NMAX, + $ ZERO, B, NMAX, CT, G, + $ BB, LDB, EPS, ERR, + $ FATAL, NOUT, .FALSE. ) + ELSE + CALL CMMCH( 'N', TRANSA, M, N, N, + $ ONE, C, NMAX, A, NMAX, + $ ZERO, B, NMAX, CT, G, + $ BB, LDB, EPS, ERR, + $ FATAL, NOUT, .FALSE. ) + END IF + END IF + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and +* return. + IF( FATAL ) + $ GO TO 150 + END IF +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* + 110 CONTINUE +* + 120 CONTINUE +* + 130 CONTINUE +* + 140 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 160 +* + 150 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + CALL CPRCN3( NTRA, NC, SNAME, IORDER, SIDE, UPLO, TRANSA, DIAG, + $ M, N, ALPHA, LDA, LDB) +* + 160 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9996 FORMAT(' ******* ', A12,' FAILED ON CALL NUMBER:' ) + 9995 FORMAT(1X, I6, ': ', A12,'(', 4( '''', A1, ''',' ), 2( I3, ',' ), + $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ') ', + $ ' .' ) + 9994 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of CCHK3. +* + END +* + SUBROUTINE CPRCN3(NOUT, NC, SNAME, IORDER, SIDE, UPLO, TRANSA, + $ DIAG, M, N, ALPHA, LDA, LDB) + INTEGER NOUT, NC, IORDER, M, N, LDA, LDB + COMPLEX ALPHA + CHARACTER*1 SIDE, UPLO, TRANSA, DIAG + CHARACTER*12 SNAME + CHARACTER*14 CRC, CS, CU, CA, CD + + IF (SIDE.EQ.'L')THEN + CS = ' CblasLeft' + ELSE + CS = ' CblasRight' + END IF + IF (UPLO.EQ.'U')THEN + CU = ' CblasUpper' + ELSE + CU = ' CblasLower' + END IF + IF (TRANSA.EQ.'N')THEN + CA = ' CblasNoTrans' + ELSE IF (TRANSA.EQ.'T')THEN + CA = ' CblasTrans' + ELSE + CA = 'CblasConjTrans' + END IF + IF (DIAG.EQ.'N')THEN + CD = ' CblasNonUnit' + ELSE + CD = ' CblasUnit' + END IF + IF (IORDER.EQ.1)THEN + CRC = ' CblasRowMajor' + ELSE + CRC = ' CblasColMajor' + END IF + WRITE(NOUT, FMT = 9995)NC,SNAME,CRC, CS,CU + WRITE(NOUT, FMT = 9994)CA, CD, M, N, ALPHA, LDA, LDB + + 9995 FORMAT( 1X, I6, ': ', A12,'(', A14, ',', A14, ',', A14, ',') + 9994 FORMAT( 10X, 2( A14, ',') , 2( I3, ',' ), ' (', F4.1, ',', + $ F4.1, '), A,', I3, ', B,', I3, ').' ) + END +* + SUBROUTINE CCHK4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX, + $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G, + $ IORDER ) +* +* Tests CHERK and CSYRK. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + COMPLEX ZERO + PARAMETER ( ZERO = ( 0.0, 0.0 ) ) + REAL RONE, RZERO + PARAMETER ( RONE = 1.0, RZERO = 0.0 ) +* .. Scalar Arguments .. + REAL EPS, THRESH + INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), B( NMAX, NMAX ), + $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ), + $ C( NMAX, NMAX ), CC( NMAX*NMAX ), + $ CS( NMAX*NMAX ), CT( NMAX ) + REAL G( NMAX ) + INTEGER IDIM( NIDIM ) +* .. Local Scalars .. + COMPLEX ALPHA, ALS, BETA, BETS + REAL ERR, ERRMAX, RALPHA, RALS, RBETA, RBETS + INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, K, KS, + $ LAA, LCC, LDA, LDAS, LDC, LDCS, LJ, MA, N, NA, + $ NARGS, NC, NS + LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER + CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS + CHARACTER*2 ICHT, ICHU +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LCE, LCERES + EXTERNAL LCE, LCERES +* .. External Subroutines .. + EXTERNAL CCHERK, CMAKE, CMMCH, CCSYRK +* .. Intrinsic Functions .. + INTRINSIC CMPLX, MAX, REAL +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL LERR, OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK, LERR +* .. Data statements .. + DATA ICHT/'NC'/, ICHU/'UL'/ +* .. Executable Statements .. + CONJ = SNAME( 8: 9 ).EQ.'he' +* + NARGS = 10 + NC = 0 + RESET = .TRUE. + ERRMAX = RZERO +* + DO 100 IN = 1, NIDIM + N = IDIM( IN ) +* Set LDC to 1 more than minimum value if room. + LDC = N + IF( LDC.LT.NMAX ) + $ LDC = LDC + 1 +* Skip tests if not enough room. + IF( LDC.GT.NMAX ) + $ GO TO 100 + LCC = LDC*N +* + DO 90 IK = 1, NIDIM + K = IDIM( IK ) +* + DO 80 ICT = 1, 2 + TRANS = ICHT( ICT: ICT ) + TRAN = TRANS.EQ.'C' + IF( TRAN.AND..NOT.CONJ ) + $ TRANS = 'T' + IF( TRAN )THEN + MA = K + NA = N + ELSE + MA = N + NA = K + END IF +* Set LDA to 1 more than minimum value if room. + LDA = MA + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 80 + LAA = LDA*NA +* +* Generate the matrix A. +* + CALL CMAKE( 'ge', ' ', ' ', MA, NA, A, NMAX, AA, LDA, + $ RESET, ZERO ) +* + DO 70 ICU = 1, 2 + UPLO = ICHU( ICU: ICU ) + UPPER = UPLO.EQ.'U' +* + DO 60 IA = 1, NALF + ALPHA = ALF( IA ) + IF( CONJ )THEN + RALPHA = REAL( ALPHA ) + ALPHA = CMPLX( RALPHA, RZERO ) + END IF +* + DO 50 IB = 1, NBET + BETA = BET( IB ) + IF( CONJ )THEN + RBETA = REAL( BETA ) + BETA = CMPLX( RBETA, RZERO ) + END IF + NULL = N.LE.0 + IF( CONJ ) + $ NULL = NULL.OR.( ( K.LE.0.OR.RALPHA.EQ. + $ RZERO ).AND.RBETA.EQ.RONE ) +* +* Generate the matrix C. +* + CALL CMAKE( SNAME( 8: 9 ), UPLO, ' ', N, N, C, + $ NMAX, CC, LDC, RESET, ZERO ) +* + NC = NC + 1 +* +* Save every datum before calling the subroutine. +* + UPLOS = UPLO + TRANSS = TRANS + NS = N + KS = K + IF( CONJ )THEN + RALS = RALPHA + ELSE + ALS = ALPHA + END IF + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + IF( CONJ )THEN + RBETS = RBETA + ELSE + BETS = BETA + END IF + DO 20 I = 1, LCC + CS( I ) = CC( I ) + 20 CONTINUE + LDCS = LDC +* +* Call the subroutine. +* + IF( CONJ )THEN + IF( TRACE ) + $ CALL CPRCN6( NTRA, NC, SNAME, IORDER, + $ UPLO, TRANS, N, K, RALPHA, LDA, RBETA, + $ LDC) + IF( REWI ) + $ REWIND NTRA + CALL CCHERK( IORDER, UPLO, TRANS, N, K, + $ RALPHA, AA, LDA, RBETA, CC, + $ LDC ) + ELSE + IF( TRACE ) + $ CALL CPRCN4( NTRA, NC, SNAME, IORDER, + $ UPLO, TRANS, N, K, ALPHA, LDA, BETA, LDC) + IF( REWI ) + $ REWIND NTRA + CALL CCSYRK( IORDER, UPLO, TRANS, N, K, + $ ALPHA, AA, LDA, BETA, CC, LDC ) + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9992 ) + FATAL = .TRUE. + GO TO 120 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = UPLOS.EQ.UPLO + ISAME( 2 ) = TRANSS.EQ.TRANS + ISAME( 3 ) = NS.EQ.N + ISAME( 4 ) = KS.EQ.K + IF( CONJ )THEN + ISAME( 5 ) = RALS.EQ.RALPHA + ELSE + ISAME( 5 ) = ALS.EQ.ALPHA + END IF + ISAME( 6 ) = LCE( AS, AA, LAA ) + ISAME( 7 ) = LDAS.EQ.LDA + IF( CONJ )THEN + ISAME( 8 ) = RBETS.EQ.RBETA + ELSE + ISAME( 8 ) = BETS.EQ.BETA + END IF + IF( NULL )THEN + ISAME( 9 ) = LCE( CS, CC, LCC ) + ELSE + ISAME( 9 ) = LCERES( SNAME( 8: 9 ), UPLO, N, + $ N, CS, CC, LDC ) + END IF + ISAME( 10 ) = LDCS.EQ.LDC +* +* If data was incorrectly changed, report and +* return. +* + SAME = .TRUE. + DO 30 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 30 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 120 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result column by column. +* + IF( CONJ )THEN + TRANST = 'C' + ELSE + TRANST = 'T' + END IF + JC = 1 + DO 40 J = 1, N + IF( UPPER )THEN + JJ = 1 + LJ = J + ELSE + JJ = J + LJ = N - J + 1 + END IF + IF( TRAN )THEN + CALL CMMCH( TRANST, 'N', LJ, 1, K, + $ ALPHA, A( 1, JJ ), NMAX, + $ A( 1, J ), NMAX, BETA, + $ C( JJ, J ), NMAX, CT, G, + $ CC( JC ), LDC, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + ELSE + CALL CMMCH( 'N', TRANST, LJ, 1, K, + $ ALPHA, A( JJ, 1 ), NMAX, + $ A( J, 1 ), NMAX, BETA, + $ C( JJ, J ), NMAX, CT, G, + $ CC( JC ), LDC, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + END IF + IF( UPPER )THEN + JC = JC + LDC + ELSE + JC = JC + LDC + 1 + END IF + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and +* return. + IF( FATAL ) + $ GO TO 110 + 40 CONTINUE + END IF +* + 50 CONTINUE +* + 60 CONTINUE +* + 70 CONTINUE +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 130 +* + 110 CONTINUE + IF( N.GT.1 ) + $ WRITE( NOUT, FMT = 9995 )J +* + 120 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + IF( CONJ )THEN + CALL CPRCN6( NOUT, NC, SNAME, IORDER, UPLO, TRANS, N, K, RALPHA, + $ LDA, rBETA, LDC) + ELSE + CALL CPRCN4( NOUT, NC, SNAME, IORDER, UPLO, TRANS, N, K, ALPHA, + $ LDA, BETA, LDC) + END IF +* + 130 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9996 FORMAT( ' ******* ', A12,' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) + 9994 FORMAT(1X, I6, ': ', A12,'(', 2( '''', A1, ''',' ), 2( I3, ',' ), + $ F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ') ', + $ ' .' ) + 9993 FORMAT(1X, I6, ': ', A12,'(', 2( '''', A1, ''',' ), 2( I3, ',' ), + $ '(', F4.1, ',', F4.1, ') , A,', I3, ',(', F4.1, ',', F4.1, + $ '), C,', I3, ') .' ) + 9992 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of CCHK4. +* + END +* + SUBROUTINE CPRCN4(NOUT, NC, SNAME, IORDER, UPLO, TRANSA, + $ N, K, ALPHA, LDA, BETA, LDC) + INTEGER NOUT, NC, IORDER, N, K, LDA, LDC + COMPLEX ALPHA, BETA + CHARACTER*1 UPLO, TRANSA + CHARACTER*12 SNAME + CHARACTER*14 CRC, CU, CA + + IF (UPLO.EQ.'U')THEN + CU = ' CblasUpper' + ELSE + CU = ' CblasLower' + END IF + IF (TRANSA.EQ.'N')THEN + CA = ' CblasNoTrans' + ELSE IF (TRANSA.EQ.'T')THEN + CA = ' CblasTrans' + ELSE + CA = 'CblasConjTrans' + END IF + IF (IORDER.EQ.1)THEN + CRC = ' CblasRowMajor' + ELSE + CRC = ' CblasColMajor' + END IF + WRITE(NOUT, FMT = 9995)NC, SNAME, CRC, CU, CA + WRITE(NOUT, FMT = 9994)N, K, ALPHA, LDA, BETA, LDC + + 9995 FORMAT( 1X, I6, ': ', A12,'(', 3( A14, ',') ) + 9994 FORMAT( 10X, 2( I3, ',' ), ' (', F4.1, ',', F4.1 ,'), A,', + $ I3, ', (', F4.1,',', F4.1, '), C,', I3, ').' ) + END +* +* + SUBROUTINE CPRCN6(NOUT, NC, SNAME, IORDER, UPLO, TRANSA, + $ N, K, ALPHA, LDA, BETA, LDC) + INTEGER NOUT, NC, IORDER, N, K, LDA, LDC + REAL ALPHA, BETA + CHARACTER*1 UPLO, TRANSA + CHARACTER*12 SNAME + CHARACTER*14 CRC, CU, CA + + IF (UPLO.EQ.'U')THEN + CU = ' CblasUpper' + ELSE + CU = ' CblasLower' + END IF + IF (TRANSA.EQ.'N')THEN + CA = ' CblasNoTrans' + ELSE IF (TRANSA.EQ.'T')THEN + CA = ' CblasTrans' + ELSE + CA = 'CblasConjTrans' + END IF + IF (IORDER.EQ.1)THEN + CRC = ' CblasRowMajor' + ELSE + CRC = ' CblasColMajor' + END IF + WRITE(NOUT, FMT = 9995)NC, SNAME, CRC, CU, CA + WRITE(NOUT, FMT = 9994)N, K, ALPHA, LDA, BETA, LDC + + 9995 FORMAT( 1X, I6, ': ', A12,'(', 3( A14, ',') ) + 9994 FORMAT( 10X, 2( I3, ',' ), + $ F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ').' ) + END +* + SUBROUTINE CCHK5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX, + $ AB, AA, AS, BB, BS, C, CC, CS, CT, G, W, + $ IORDER ) +* +* Tests CHER2K and CSYR2K. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + COMPLEX ZERO, ONE + PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) ) + REAL RONE, RZERO + PARAMETER ( RONE = 1.0, RZERO = 0.0 ) +* .. Scalar Arguments .. + REAL EPS, THRESH + INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + COMPLEX AA( NMAX*NMAX ), AB( 2*NMAX*NMAX ), + $ ALF( NALF ), AS( NMAX*NMAX ), BB( NMAX*NMAX ), + $ BET( NBET ), BS( NMAX*NMAX ), C( NMAX, NMAX ), + $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ), + $ W( 2*NMAX ) + REAL G( NMAX ) + INTEGER IDIM( NIDIM ) +* .. Local Scalars .. + COMPLEX ALPHA, ALS, BETA, BETS + REAL ERR, ERRMAX, RBETA, RBETS + INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, JJAB, + $ K, KS, LAA, LBB, LCC, LDA, LDAS, LDB, LDBS, + $ LDC, LDCS, LJ, MA, N, NA, NARGS, NC, NS + LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER + CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS + CHARACTER*2 ICHT, ICHU +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LCE, LCERES + EXTERNAL LCE, LCERES +* .. External Subroutines .. + EXTERNAL CCHER2K, CMAKE, CMMCH, CCSYR2K +* .. Intrinsic Functions .. + INTRINSIC CMPLX, CONJG, MAX, REAL +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL LERR, OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK, LERR +* .. Data statements .. + DATA ICHT/'NC'/, ICHU/'UL'/ +* .. Executable Statements .. + CONJ = SNAME( 8: 9 ).EQ.'he' +* + NARGS = 12 + NC = 0 + RESET = .TRUE. + ERRMAX = RZERO +* + DO 130 IN = 1, NIDIM + N = IDIM( IN ) +* Set LDC to 1 more than minimum value if room. + LDC = N + IF( LDC.LT.NMAX ) + $ LDC = LDC + 1 +* Skip tests if not enough room. + IF( LDC.GT.NMAX ) + $ GO TO 130 + LCC = LDC*N +* + DO 120 IK = 1, NIDIM + K = IDIM( IK ) +* + DO 110 ICT = 1, 2 + TRANS = ICHT( ICT: ICT ) + TRAN = TRANS.EQ.'C' + IF( TRAN.AND..NOT.CONJ ) + $ TRANS = 'T' + IF( TRAN )THEN + MA = K + NA = N + ELSE + MA = N + NA = K + END IF +* Set LDA to 1 more than minimum value if room. + LDA = MA + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 110 + LAA = LDA*NA +* +* Generate the matrix A. +* + IF( TRAN )THEN + CALL CMAKE( 'ge', ' ', ' ', MA, NA, AB, 2*NMAX, AA, + $ LDA, RESET, ZERO ) + ELSE + CALL CMAKE( 'ge', ' ', ' ', MA, NA, AB, NMAX, AA, LDA, + $ RESET, ZERO ) + END IF +* +* Generate the matrix B. +* + LDB = LDA + LBB = LAA + IF( TRAN )THEN + CALL CMAKE( 'ge', ' ', ' ', MA, NA, AB( K + 1 ), + $ 2*NMAX, BB, LDB, RESET, ZERO ) + ELSE + CALL CMAKE( 'ge', ' ', ' ', MA, NA, AB( K*NMAX + 1 ), + $ NMAX, BB, LDB, RESET, ZERO ) + END IF +* + DO 100 ICU = 1, 2 + UPLO = ICHU( ICU: ICU ) + UPPER = UPLO.EQ.'U' +* + DO 90 IA = 1, NALF + ALPHA = ALF( IA ) +* + DO 80 IB = 1, NBET + BETA = BET( IB ) + IF( CONJ )THEN + RBETA = REAL( BETA ) + BETA = CMPLX( RBETA, RZERO ) + END IF + NULL = N.LE.0 + IF( CONJ ) + $ NULL = NULL.OR.( ( K.LE.0.OR.ALPHA.EQ. + $ ZERO ).AND.RBETA.EQ.RONE ) +* +* Generate the matrix C. +* + CALL CMAKE( SNAME( 8: 9 ), UPLO, ' ', N, N, C, + $ NMAX, CC, LDC, RESET, ZERO ) +* + NC = NC + 1 +* +* Save every datum before calling the subroutine. +* + UPLOS = UPLO + TRANSS = TRANS + NS = N + KS = K + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LBB + BS( I ) = BB( I ) + 20 CONTINUE + LDBS = LDB + IF( CONJ )THEN + RBETS = RBETA + ELSE + BETS = BETA + END IF + DO 30 I = 1, LCC + CS( I ) = CC( I ) + 30 CONTINUE + LDCS = LDC +* +* Call the subroutine. +* + IF( CONJ )THEN + IF( TRACE ) + $ CALL CPRCN7( NTRA, NC, SNAME, IORDER, + $ UPLO, TRANS, N, K, ALPHA, LDA, LDB, + $ RBETA, LDC) + IF( REWI ) + $ REWIND NTRA + CALL CCHER2K( IORDER, UPLO, TRANS, N, K, + $ ALPHA, AA, LDA, BB, LDB, RBETA, + $ CC, LDC ) + ELSE + IF( TRACE ) + $ CALL CPRCN5( NTRA, NC, SNAME, IORDER, + $ UPLO, TRANS, N, K, ALPHA, LDA, LDB, + $ BETA, LDC) + IF( REWI ) + $ REWIND NTRA + CALL CCSYR2K( IORDER, UPLO, TRANS, N, K, + $ ALPHA, AA, LDA, BB, LDB, BETA, + $ CC, LDC ) + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9992 ) + FATAL = .TRUE. + GO TO 150 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = UPLOS.EQ.UPLO + ISAME( 2 ) = TRANSS.EQ.TRANS + ISAME( 3 ) = NS.EQ.N + ISAME( 4 ) = KS.EQ.K + ISAME( 5 ) = ALS.EQ.ALPHA + ISAME( 6 ) = LCE( AS, AA, LAA ) + ISAME( 7 ) = LDAS.EQ.LDA + ISAME( 8 ) = LCE( BS, BB, LBB ) + ISAME( 9 ) = LDBS.EQ.LDB + IF( CONJ )THEN + ISAME( 10 ) = RBETS.EQ.RBETA + ELSE + ISAME( 10 ) = BETS.EQ.BETA + END IF + IF( NULL )THEN + ISAME( 11 ) = LCE( CS, CC, LCC ) + ELSE + ISAME( 11 ) = LCERES( 'he', UPLO, N, N, CS, + $ CC, LDC ) + END IF + ISAME( 12 ) = LDCS.EQ.LDC +* +* If data was incorrectly changed, report and +* return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 150 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result column by column. +* + IF( CONJ )THEN + TRANST = 'C' + ELSE + TRANST = 'T' + END IF + JJAB = 1 + JC = 1 + DO 70 J = 1, N + IF( UPPER )THEN + JJ = 1 + LJ = J + ELSE + JJ = J + LJ = N - J + 1 + END IF + IF( TRAN )THEN + DO 50 I = 1, K + W( I ) = ALPHA*AB( ( J - 1 )*2* + $ NMAX + K + I ) + IF( CONJ )THEN + W( K + I ) = CONJG( ALPHA )* + $ AB( ( J - 1 )*2* + $ NMAX + I ) + ELSE + W( K + I ) = ALPHA* + $ AB( ( J - 1 )*2* + $ NMAX + I ) + END IF + 50 CONTINUE + CALL CMMCH( TRANST, 'N', LJ, 1, 2*K, + $ ONE, AB( JJAB ), 2*NMAX, W, + $ 2*NMAX, BETA, C( JJ, J ), + $ NMAX, CT, G, CC( JC ), LDC, + $ EPS, ERR, FATAL, NOUT, + $ .TRUE. ) + ELSE + DO 60 I = 1, K + IF( CONJ )THEN + W( I ) = ALPHA*CONJG( AB( ( K + + $ I - 1 )*NMAX + J ) ) + W( K + I ) = CONJG( ALPHA* + $ AB( ( I - 1 )*NMAX + + $ J ) ) + ELSE + W( I ) = ALPHA*AB( ( K + I - 1 )* + $ NMAX + J ) + W( K + I ) = ALPHA* + $ AB( ( I - 1 )*NMAX + + $ J ) + END IF + 60 CONTINUE + CALL CMMCH( 'N', 'N', LJ, 1, 2*K, ONE, + $ AB( JJ ), NMAX, W, 2*NMAX, + $ BETA, C( JJ, J ), NMAX, CT, + $ G, CC( JC ), LDC, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + END IF + IF( UPPER )THEN + JC = JC + LDC + ELSE + JC = JC + LDC + 1 + IF( TRAN ) + $ JJAB = JJAB + 2*NMAX + END IF + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and +* return. + IF( FATAL ) + $ GO TO 140 + 70 CONTINUE + END IF +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* + 110 CONTINUE +* + 120 CONTINUE +* + 130 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 160 +* + 140 CONTINUE + IF( N.GT.1 ) + $ WRITE( NOUT, FMT = 9995 )J +* + 150 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + IF( CONJ )THEN + CALL CPRCN7( NOUT, NC, SNAME, IORDER, UPLO, TRANS, N, K, + $ ALPHA, LDA, LDB, RBETA, LDC) + ELSE + CALL CPRCN5( NOUT, NC, SNAME, IORDER, UPLO, TRANS, N, K, + $ ALPHA, LDA, LDB, BETA, LDC) + END IF +* + 160 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9996 FORMAT( ' ******* ', A12,' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) + 9994 FORMAT(1X, I6, ': ', A12,'(', 2( '''', A1, ''',' ), 2( I3, ',' ), + $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',', F4.1, + $ ', C,', I3, ') .' ) + 9993 FORMAT(1X, I6, ': ', A12,'(', 2( '''', A1, ''',' ), 2( I3, ',' ), + $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',(', F4.1, + $ ',', F4.1, '), C,', I3, ') .' ) + 9992 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of CCHK5. +* + END +* + SUBROUTINE CPRCN5(NOUT, NC, SNAME, IORDER, UPLO, TRANSA, + $ N, K, ALPHA, LDA, LDB, BETA, LDC) + INTEGER NOUT, NC, IORDER, N, K, LDA, LDB, LDC + COMPLEX ALPHA, BETA + CHARACTER*1 UPLO, TRANSA + CHARACTER*12 SNAME + CHARACTER*14 CRC, CU, CA + + IF (UPLO.EQ.'U')THEN + CU = ' CblasUpper' + ELSE + CU = ' CblasLower' + END IF + IF (TRANSA.EQ.'N')THEN + CA = ' CblasNoTrans' + ELSE IF (TRANSA.EQ.'T')THEN + CA = ' CblasTrans' + ELSE + CA = 'CblasConjTrans' + END IF + IF (IORDER.EQ.1)THEN + CRC = ' CblasRowMajor' + ELSE + CRC = ' CblasColMajor' + END IF + WRITE(NOUT, FMT = 9995)NC, SNAME, CRC, CU, CA + WRITE(NOUT, FMT = 9994)N, K, ALPHA, LDA, LDB, BETA, LDC + + 9995 FORMAT( 1X, I6, ': ', A12,'(', 3( A14, ',') ) + 9994 FORMAT( 10X, 2( I3, ',' ), ' (', F4.1, ',', F4.1, '), A,', + $ I3, ', B', I3, ', (', F4.1, ',', F4.1, '), C,', I3, ').' ) + END +* +* + SUBROUTINE CPRCN7(NOUT, NC, SNAME, IORDER, UPLO, TRANSA, + $ N, K, ALPHA, LDA, LDB, BETA, LDC) + INTEGER NOUT, NC, IORDER, N, K, LDA, LDB, LDC + COMPLEX ALPHA + REAL BETA + CHARACTER*1 UPLO, TRANSA + CHARACTER*12 SNAME + CHARACTER*14 CRC, CU, CA + + IF (UPLO.EQ.'U')THEN + CU = ' CblasUpper' + ELSE + CU = ' CblasLower' + END IF + IF (TRANSA.EQ.'N')THEN + CA = ' CblasNoTrans' + ELSE IF (TRANSA.EQ.'T')THEN + CA = ' CblasTrans' + ELSE + CA = 'CblasConjTrans' + END IF + IF (IORDER.EQ.1)THEN + CRC = ' CblasRowMajor' + ELSE + CRC = ' CblasColMajor' + END IF + WRITE(NOUT, FMT = 9995)NC, SNAME, CRC, CU, CA + WRITE(NOUT, FMT = 9994)N, K, ALPHA, LDA, LDB, BETA, LDC + + 9995 FORMAT( 1X, I6, ': ', A12,'(', 3( A14, ',') ) + 9994 FORMAT( 10X, 2( I3, ',' ), ' (', F4.1, ',', F4.1, '), A,', + $ I3, ', B', I3, ',', F4.1, ', C,', I3, ').' ) + END +* + SUBROUTINE CMAKE(TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, RESET, + $ TRANSL ) +* +* Generates values for an M by N matrix A. +* Stores the values in the array AA in the data structure required +* by the routine, with unwanted elements set to rogue value. +* +* TYPE is 'ge', 'he', 'sy' or 'tr'. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + COMPLEX ZERO, ONE + PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) ) + COMPLEX ROGUE + PARAMETER ( ROGUE = ( -1.0E10, 1.0E10 ) ) + REAL RZERO + PARAMETER ( RZERO = 0.0 ) + REAL RROGUE + PARAMETER ( RROGUE = -1.0E10 ) +* .. Scalar Arguments .. + COMPLEX TRANSL + INTEGER LDA, M, N, NMAX + LOGICAL RESET + CHARACTER*1 DIAG, UPLO + CHARACTER*2 TYPE +* .. Array Arguments .. + COMPLEX A( NMAX, * ), AA( * ) +* .. Local Scalars .. + INTEGER I, IBEG, IEND, J, JJ + LOGICAL GEN, HER, LOWER, SYM, TRI, UNIT, UPPER +* .. External Functions .. + COMPLEX CBEG + EXTERNAL CBEG +* .. Intrinsic Functions .. + INTRINSIC CMPLX, CONJG, REAL +* .. Executable Statements .. + GEN = TYPE.EQ.'ge' + HER = TYPE.EQ.'he' + SYM = TYPE.EQ.'sy' + TRI = TYPE.EQ.'tr' + UPPER = ( HER.OR.SYM.OR.TRI ).AND.UPLO.EQ.'U' + LOWER = ( HER.OR.SYM.OR.TRI ).AND.UPLO.EQ.'L' + UNIT = TRI.AND.DIAG.EQ.'U' +* +* Generate data in array A. +* + DO 20 J = 1, N + DO 10 I = 1, M + IF( GEN.OR.( UPPER.AND.I.LE.J ).OR.( LOWER.AND.I.GE.J ) ) + $ THEN + A( I, J ) = CBEG( RESET ) + TRANSL + IF( I.NE.J )THEN +* Set some elements to zero + IF( N.GT.3.AND.J.EQ.N/2 ) + $ A( I, J ) = ZERO + IF( HER )THEN + A( J, I ) = CONJG( A( I, J ) ) + ELSE IF( SYM )THEN + A( J, I ) = A( I, J ) + ELSE IF( TRI )THEN + A( J, I ) = ZERO + END IF + END IF + END IF + 10 CONTINUE + IF( HER ) + $ A( J, J ) = CMPLX( REAL( A( J, J ) ), RZERO ) + IF( TRI ) + $ A( J, J ) = A( J, J ) + ONE + IF( UNIT ) + $ A( J, J ) = ONE + 20 CONTINUE +* +* Store elements in array AS in data structure required by routine. +* + IF( TYPE.EQ.'ge' )THEN + DO 50 J = 1, N + DO 30 I = 1, M + AA( I + ( J - 1 )*LDA ) = A( I, J ) + 30 CONTINUE + DO 40 I = M + 1, LDA + AA( I + ( J - 1 )*LDA ) = ROGUE + 40 CONTINUE + 50 CONTINUE + ELSE IF( TYPE.EQ.'he'.OR.TYPE.EQ.'sy'.OR.TYPE.EQ.'tr' )THEN + DO 90 J = 1, N + IF( UPPER )THEN + IBEG = 1 + IF( UNIT )THEN + IEND = J - 1 + ELSE + IEND = J + END IF + ELSE + IF( UNIT )THEN + IBEG = J + 1 + ELSE + IBEG = J + END IF + IEND = N + END IF + DO 60 I = 1, IBEG - 1 + AA( I + ( J - 1 )*LDA ) = ROGUE + 60 CONTINUE + DO 70 I = IBEG, IEND + AA( I + ( J - 1 )*LDA ) = A( I, J ) + 70 CONTINUE + DO 80 I = IEND + 1, LDA + AA( I + ( J - 1 )*LDA ) = ROGUE + 80 CONTINUE + IF( HER )THEN + JJ = J + ( J - 1 )*LDA + AA( JJ ) = CMPLX( REAL( AA( JJ ) ), RROGUE ) + END IF + 90 CONTINUE + END IF + RETURN +* +* End of CMAKE. +* + END + SUBROUTINE CMMCH(TRANSA, TRANSB, M, N, KK, ALPHA, A, LDA, B, LDB, + $ BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL, + $ NOUT, MV ) +* +* Checks the results of the computational tests. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + COMPLEX ZERO + PARAMETER ( ZERO = ( 0.0, 0.0 ) ) + REAL RZERO, RONE + PARAMETER ( RZERO = 0.0, RONE = 1.0 ) +* .. Scalar Arguments .. + COMPLEX ALPHA, BETA + REAL EPS, ERR + INTEGER KK, LDA, LDB, LDC, LDCC, M, N, NOUT + LOGICAL FATAL, MV + CHARACTER*1 TRANSA, TRANSB +* .. Array Arguments .. + COMPLEX A( LDA, * ), B( LDB, * ), C( LDC, * ), + $ CC( LDCC, * ), CT( * ) + REAL G( * ) +* .. Local Scalars .. + COMPLEX CL + REAL ERRI + INTEGER I, J, K + LOGICAL CTRANA, CTRANB, TRANA, TRANB +* .. Intrinsic Functions .. + INTRINSIC ABS, AIMAG, CONJG, MAX, REAL, SQRT +* .. Statement Functions .. + REAL ABS1 +* .. Statement Function definitions .. + ABS1( CL ) = ABS( REAL( CL ) ) + ABS( AIMAG( CL ) ) +* .. Executable Statements .. + TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C' + TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C' + CTRANA = TRANSA.EQ.'C' + CTRANB = TRANSB.EQ.'C' +* +* Compute expected result, one column at a time, in CT using data +* in A, B and C. +* Compute gauges in G. +* + DO 220 J = 1, N +* + DO 10 I = 1, M + CT( I ) = ZERO + G( I ) = RZERO + 10 CONTINUE + IF( .NOT.TRANA.AND..NOT.TRANB )THEN + DO 30 K = 1, KK + DO 20 I = 1, M + CT( I ) = CT( I ) + A( I, K )*B( K, J ) + G( I ) = G( I ) + ABS1( A( I, K ) )*ABS1( B( K, J ) ) + 20 CONTINUE + 30 CONTINUE + ELSE IF( TRANA.AND..NOT.TRANB )THEN + IF( CTRANA )THEN + DO 50 K = 1, KK + DO 40 I = 1, M + CT( I ) = CT( I ) + CONJG( A( K, I ) )*B( K, J ) + G( I ) = G( I ) + ABS1( A( K, I ) )* + $ ABS1( B( K, J ) ) + 40 CONTINUE + 50 CONTINUE + ELSE + DO 70 K = 1, KK + DO 60 I = 1, M + CT( I ) = CT( I ) + A( K, I )*B( K, J ) + G( I ) = G( I ) + ABS1( A( K, I ) )* + $ ABS1( B( K, J ) ) + 60 CONTINUE + 70 CONTINUE + END IF + ELSE IF( .NOT.TRANA.AND.TRANB )THEN + IF( CTRANB )THEN + DO 90 K = 1, KK + DO 80 I = 1, M + CT( I ) = CT( I ) + A( I, K )*CONJG( B( J, K ) ) + G( I ) = G( I ) + ABS1( A( I, K ) )* + $ ABS1( B( J, K ) ) + 80 CONTINUE + 90 CONTINUE + ELSE + DO 110 K = 1, KK + DO 100 I = 1, M + CT( I ) = CT( I ) + A( I, K )*B( J, K ) + G( I ) = G( I ) + ABS1( A( I, K ) )* + $ ABS1( B( J, K ) ) + 100 CONTINUE + 110 CONTINUE + END IF + ELSE IF( TRANA.AND.TRANB )THEN + IF( CTRANA )THEN + IF( CTRANB )THEN + DO 130 K = 1, KK + DO 120 I = 1, M + CT( I ) = CT( I ) + CONJG( A( K, I ) )* + $ CONJG( B( J, K ) ) + G( I ) = G( I ) + ABS1( A( K, I ) )* + $ ABS1( B( J, K ) ) + 120 CONTINUE + 130 CONTINUE + ELSE + DO 150 K = 1, KK + DO 140 I = 1, M + CT( I ) = CT( I ) + CONJG( A( K, I ) )*B( J, K ) + G( I ) = G( I ) + ABS1( A( K, I ) )* + $ ABS1( B( J, K ) ) + 140 CONTINUE + 150 CONTINUE + END IF + ELSE + IF( CTRANB )THEN + DO 170 K = 1, KK + DO 160 I = 1, M + CT( I ) = CT( I ) + A( K, I )*CONJG( B( J, K ) ) + G( I ) = G( I ) + ABS1( A( K, I ) )* + $ ABS1( B( J, K ) ) + 160 CONTINUE + 170 CONTINUE + ELSE + DO 190 K = 1, KK + DO 180 I = 1, M + CT( I ) = CT( I ) + A( K, I )*B( J, K ) + G( I ) = G( I ) + ABS1( A( K, I ) )* + $ ABS1( B( J, K ) ) + 180 CONTINUE + 190 CONTINUE + END IF + END IF + END IF + DO 200 I = 1, M + CT( I ) = ALPHA*CT( I ) + BETA*C( I, J ) + G( I ) = ABS1( ALPHA )*G( I ) + + $ ABS1( BETA )*ABS1( C( I, J ) ) + 200 CONTINUE +* +* Compute the error ratio for this result. +* + ERR = ZERO + DO 210 I = 1, M + ERRI = ABS1( CT( I ) - CC( I, J ) )/EPS + IF( G( I ).NE.RZERO ) + $ ERRI = ERRI/G( I ) + ERR = MAX( ERR, ERRI ) + IF( ERR*SQRT( EPS ).GE.RONE ) + $ GO TO 230 + 210 CONTINUE +* + 220 CONTINUE +* +* If the loop completes, all results are at least half accurate. + GO TO 250 +* +* Report fatal error. +* + 230 FATAL = .TRUE. + WRITE( NOUT, FMT = 9999 ) + DO 240 I = 1, M + IF( MV )THEN + WRITE( NOUT, FMT = 9998 )I, CT( I ), CC( I, J ) + ELSE + WRITE( NOUT, FMT = 9998 )I, CC( I, J ), CT( I ) + END IF + 240 CONTINUE + IF( N.GT.1 ) + $ WRITE( NOUT, FMT = 9997 )J +* + 250 CONTINUE + RETURN +* + 9999 FORMAT(' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL', + $ 'F ACCURATE *******', /' EXPECTED RE', + $ 'SULT COMPUTED RESULT' ) + 9998 FORMAT( 1X, I7, 2( ' (', G15.6, ',', G15.6, ')' ) ) + 9997 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) +* +* End of CMMCH. +* + END + LOGICAL FUNCTION LCE( RI, RJ, LR ) +* +* Tests if two arrays are identical. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Scalar Arguments .. + INTEGER LR +* .. Array Arguments .. + COMPLEX RI( * ), RJ( * ) +* .. Local Scalars .. + INTEGER I +* .. Executable Statements .. + DO 10 I = 1, LR + IF( RI( I ).NE.RJ( I ) ) + $ GO TO 20 + 10 CONTINUE + LCE = .TRUE. + GO TO 30 + 20 CONTINUE + LCE = .FALSE. + 30 RETURN +* +* End of LCE. +* + END + LOGICAL FUNCTION LCERES( TYPE, UPLO, M, N, AA, AS, LDA ) +* +* Tests if selected elements in two arrays are equal. +* +* TYPE is 'ge' or 'he' or 'sy'. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Scalar Arguments .. + INTEGER LDA, M, N + CHARACTER*1 UPLO + CHARACTER*2 TYPE +* .. Array Arguments .. + COMPLEX AA( LDA, * ), AS( LDA, * ) +* .. Local Scalars .. + INTEGER I, IBEG, IEND, J + LOGICAL UPPER +* .. Executable Statements .. + UPPER = UPLO.EQ.'U' + IF( TYPE.EQ.'ge' )THEN + DO 20 J = 1, N + DO 10 I = M + 1, LDA + IF( AA( I, J ).NE.AS( I, J ) ) + $ GO TO 70 + 10 CONTINUE + 20 CONTINUE + ELSE IF( TYPE.EQ.'he'.OR.TYPE.EQ.'sy' )THEN + DO 50 J = 1, N + IF( UPPER )THEN + IBEG = 1 + IEND = J + ELSE + IBEG = J + IEND = N + END IF + DO 30 I = 1, IBEG - 1 + IF( AA( I, J ).NE.AS( I, J ) ) + $ GO TO 70 + 30 CONTINUE + DO 40 I = IEND + 1, LDA + IF( AA( I, J ).NE.AS( I, J ) ) + $ GO TO 70 + 40 CONTINUE + 50 CONTINUE + END IF +* + 60 CONTINUE + LCERES = .TRUE. + GO TO 80 + 70 CONTINUE + LCERES = .FALSE. + 80 RETURN +* +* End of LCERES. +* + END + COMPLEX FUNCTION CBEG( RESET ) +* +* Generates complex numbers as pairs of random numbers uniformly +* distributed between -0.5 and 0.5. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Scalar Arguments .. + LOGICAL RESET +* .. Local Scalars .. + INTEGER I, IC, J, MI, MJ +* .. Save statement .. + SAVE I, IC, J, MI, MJ +* .. Intrinsic Functions .. + INTRINSIC CMPLX +* .. Executable Statements .. + IF( RESET )THEN +* Initialize local variables. + MI = 891 + MJ = 457 + I = 7 + J = 7 + IC = 0 + RESET = .FALSE. + END IF +* +* The sequence of values of I or J is bounded between 1 and 999. +* If initial I or J = 1,2,3,6,7 or 9, the period will be 50. +* If initial I or J = 4 or 8, the period will be 25. +* If initial I or J = 5, the period will be 10. +* IC is used to break up the period by skipping 1 value of I or J +* in 6. +* + IC = IC + 1 + 10 I = I*MI + J = J*MJ + I = I - 1000*( I/1000 ) + J = J - 1000*( J/1000 ) + IF( IC.GE.5 )THEN + IC = 0 + GO TO 10 + END IF + CBEG = CMPLX( ( I - 500 )/1001.0, ( J - 500 )/1001.0 ) + RETURN +* +* End of CBEG. +* + END + REAL FUNCTION SDIFF( X, Y ) +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Scalar Arguments .. + REAL X, Y +* .. Executable Statements .. + SDIFF = X - Y + RETURN +* +* End of SDIFF. +* + END diff --git a/CBLAS/testing/c_d2chke.c b/CBLAS/testing/c_d2chke.c new file mode 100644 index 000000000..46a242fc1 --- /dev/null +++ b/CBLAS/testing/c_d2chke.c @@ -0,0 +1,789 @@ +#include +#include +#include "cblas.h" +#include "cblas_test.h" + +int cblas_ok, cblas_lerr, cblas_info; +int link_xerbla=TRUE; +char *cblas_rout; + +#ifdef F77_Char +void F77_xerbla(F77_Char F77_srname, void *vinfo); +#else +void F77_xerbla(char *srname, void *vinfo); +#endif + +void chkxer(void) { + extern int cblas_ok, cblas_lerr, cblas_info; + extern int link_xerbla; + extern char *cblas_rout; + if (cblas_lerr == 1 ) { + printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %d NOT DETECTED BY %s *****\n", cblas_info, cblas_rout); + cblas_ok = 0 ; + } + cblas_lerr = 1 ; +} + +void F77_d2chke(char *rout) { + char *sf = ( rout ) ; + double A[2] = {0.0,0.0}, + X[2] = {0.0,0.0}, + Y[2] = {0.0,0.0}, + ALPHA=0.0, BETA=0.0; + extern int cblas_info, cblas_lerr, cblas_ok; + extern int RowMajorStrg; + extern char *cblas_rout; + + if (link_xerbla) /* call these first to link */ + { + cblas_xerbla(cblas_info,cblas_rout,""); + F77_xerbla(cblas_rout,&cblas_info); + } + + cblas_ok = TRUE ; + cblas_lerr = PASSED ; + + if (strncmp( sf,"cblas_dgemv",11)==0) { + cblas_rout = "cblas_dgemv"; + cblas_info = 1; + cblas_dgemv(INVALID, CblasNoTrans, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_dgemv(CblasColMajor, INVALID, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_dgemv(CblasColMajor, CblasNoTrans, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_dgemv(CblasColMajor, CblasNoTrans, 0, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_dgemv(CblasColMajor, CblasNoTrans, 2, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_dgemv(CblasColMajor, CblasNoTrans, 0, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_dgemv(CblasColMajor, CblasNoTrans, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + + cblas_info = 2; RowMajorStrg = TRUE; RowMajorStrg = TRUE; + cblas_dgemv(CblasRowMajor, INVALID, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_dgemv(CblasRowMajor, CblasNoTrans, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_dgemv(CblasRowMajor, CblasNoTrans, 0, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_dgemv(CblasRowMajor, CblasNoTrans, 0, 2, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_dgemv(CblasRowMajor, CblasNoTrans, 0, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_dgemv(CblasRowMajor, CblasNoTrans, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_dgbmv",11)==0) { + cblas_rout = "cblas_dgbmv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_dgbmv(INVALID, CblasNoTrans, 0, 0, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_dgbmv(CblasColMajor, INVALID, 0, 0, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_dgbmv(CblasColMajor, CblasNoTrans, INVALID, 0, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_dgbmv(CblasColMajor, CblasNoTrans, 0, INVALID, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_dgbmv(CblasColMajor, CblasNoTrans, 0, 0, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dgbmv(CblasColMajor, CblasNoTrans, 2, 0, 0, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_dgbmv(CblasColMajor, CblasNoTrans, 0, 0, 1, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_dgbmv(CblasColMajor, CblasNoTrans, 0, 0, 0, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = FALSE; + cblas_dgbmv(CblasColMajor, CblasNoTrans, 0, 0, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_dgbmv(CblasRowMajor, INVALID, 0, 0, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_dgbmv(CblasRowMajor, CblasNoTrans, INVALID, 0, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_dgbmv(CblasRowMajor, CblasNoTrans, 0, INVALID, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_dgbmv(CblasRowMajor, CblasNoTrans, 0, 0, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_dgbmv(CblasRowMajor, CblasNoTrans, 2, 0, 0, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_dgbmv(CblasRowMajor, CblasNoTrans, 0, 0, 1, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_dgbmv(CblasRowMajor, CblasNoTrans, 0, 0, 0, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = TRUE; + cblas_dgbmv(CblasRowMajor, CblasNoTrans, 0, 0, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_dsymv",11)==0) { + cblas_rout = "cblas_dsymv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_dsymv(INVALID, CblasUpper, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_dsymv(CblasColMajor, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_dsymv(CblasColMajor, CblasUpper, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dsymv(CblasColMajor, CblasUpper, 2, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_dsymv(CblasColMajor, CblasUpper, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_dsymv(CblasColMajor, CblasUpper, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_dsymv(CblasRowMajor, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_dsymv(CblasRowMajor, CblasUpper, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_dsymv(CblasRowMajor, CblasUpper, 2, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_dsymv(CblasRowMajor, CblasUpper, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_dsymv(CblasRowMajor, CblasUpper, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_dsbmv",11)==0) { + cblas_rout = "cblas_dsbmv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_dsbmv(INVALID, CblasUpper, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_dsbmv(CblasColMajor, INVALID, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_dsbmv(CblasColMajor, CblasUpper, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_dsbmv(CblasColMajor, CblasUpper, 0, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_dsbmv(CblasColMajor, CblasUpper, 0, 1, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_dsbmv(CblasColMajor, CblasUpper, 0, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_dsbmv(CblasColMajor, CblasUpper, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_dsbmv(CblasRowMajor, INVALID, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_dsbmv(CblasRowMajor, CblasUpper, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_dsbmv(CblasRowMajor, CblasUpper, 0, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_dsbmv(CblasRowMajor, CblasUpper, 0, 1, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_dsbmv(CblasRowMajor, CblasUpper, 0, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_dsbmv(CblasRowMajor, CblasUpper, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_dspmv",11)==0) { + cblas_rout = "cblas_dspmv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_dspmv(INVALID, CblasUpper, 0, + ALPHA, A, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_dspmv(CblasColMajor, INVALID, 0, + ALPHA, A, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_dspmv(CblasColMajor, CblasUpper, INVALID, + ALPHA, A, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_dspmv(CblasColMajor, CblasUpper, 0, + ALPHA, A, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_dspmv(CblasColMajor, CblasUpper, 0, + ALPHA, A, X, 1, BETA, Y, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_dspmv(CblasRowMajor, INVALID, 0, + ALPHA, A, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_dspmv(CblasRowMajor, CblasUpper, INVALID, + ALPHA, A, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_dspmv(CblasRowMajor, CblasUpper, 0, + ALPHA, A, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_dspmv(CblasRowMajor, CblasUpper, 0, + ALPHA, A, X, 1, BETA, Y, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_dtrmv",11)==0) { + cblas_rout = "cblas_dtrmv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_dtrmv(INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_dtrmv(CblasColMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_dtrmv(CblasColMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_dtrmv(CblasColMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_dtrmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_dtrmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, A, 1, X, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_dtrmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_dtrmv(CblasRowMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_dtrmv(CblasRowMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_dtrmv(CblasRowMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_dtrmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_dtrmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, A, 1, X, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_dtrmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_dtbmv",11)==0) { + cblas_rout = "cblas_dtbmv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_dtbmv(INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_dtbmv(CblasColMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_dtbmv(CblasColMajor, CblasUpper, INVALID, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_dtbmv(CblasColMajor, CblasUpper, CblasNoTrans, + INVALID, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_dtbmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dtbmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_dtbmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 1, A, 1, X, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_dtbmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_dtbmv(CblasRowMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_dtbmv(CblasRowMajor, CblasUpper, INVALID, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_dtbmv(CblasRowMajor, CblasUpper, CblasNoTrans, + INVALID, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_dtbmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_dtbmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_dtbmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 1, A, 1, X, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_dtbmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_dtpmv",11)==0) { + cblas_rout = "cblas_dtpmv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_dtpmv(INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_dtpmv(CblasColMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_dtpmv(CblasColMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_dtpmv(CblasColMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_dtpmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_dtpmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, X, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_dtpmv(CblasRowMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_dtpmv(CblasRowMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_dtpmv(CblasRowMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_dtpmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_dtpmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, X, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_dtrsv",11)==0) { + cblas_rout = "cblas_dtrsv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_dtrsv(INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_dtrsv(CblasColMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_dtrsv(CblasColMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_dtrsv(CblasColMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_dtrsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_dtrsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, A, 1, X, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_dtrsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_dtrsv(CblasRowMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_dtrsv(CblasRowMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_dtrsv(CblasRowMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_dtrsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_dtrsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, A, 1, X, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_dtrsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_dtbsv",11)==0) { + cblas_rout = "cblas_dtbsv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_dtbsv(INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_dtbsv(CblasColMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_dtbsv(CblasColMajor, CblasUpper, INVALID, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_dtbsv(CblasColMajor, CblasUpper, CblasNoTrans, + INVALID, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_dtbsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dtbsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_dtbsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 1, A, 1, X, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_dtbsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_dtbsv(CblasRowMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_dtbsv(CblasRowMajor, CblasUpper, INVALID, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_dtbsv(CblasRowMajor, CblasUpper, CblasNoTrans, + INVALID, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_dtbsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_dtbsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_dtbsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 1, A, 1, X, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_dtbsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_dtpsv",11)==0) { + cblas_rout = "cblas_dtpsv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_dtpsv(INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_dtpsv(CblasColMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_dtpsv(CblasColMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_dtpsv(CblasColMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_dtpsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_dtpsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, X, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_dtpsv(CblasRowMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_dtpsv(CblasRowMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_dtpsv(CblasRowMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_dtpsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_dtpsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, X, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_dger",10)==0) { + cblas_rout = "cblas_dger"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_dger(INVALID, 0, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_dger(CblasColMajor, INVALID, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_dger(CblasColMajor, 0, INVALID, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dger(CblasColMajor, 0, 0, ALPHA, X, 0, Y, 1, A, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_dger(CblasColMajor, 0, 0, ALPHA, X, 1, Y, 0, A, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_dger(CblasColMajor, 2, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_dger(CblasRowMajor, INVALID, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_dger(CblasRowMajor, 0, INVALID, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_dger(CblasRowMajor, 0, 0, ALPHA, X, 0, Y, 1, A, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_dger(CblasRowMajor, 0, 0, ALPHA, X, 1, Y, 0, A, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_dger(CblasRowMajor, 0, 2, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + } else if (strncmp( sf,"cblas_dsyr2",11)==0) { + cblas_rout = "cblas_dsyr2"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_dsyr2(INVALID, CblasUpper, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_dsyr2(CblasColMajor, INVALID, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_dsyr2(CblasColMajor, CblasUpper, INVALID, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dsyr2(CblasColMajor, CblasUpper, 0, ALPHA, X, 0, Y, 1, A, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_dsyr2(CblasColMajor, CblasUpper, 0, ALPHA, X, 1, Y, 0, A, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_dsyr2(CblasColMajor, CblasUpper, 2, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_dsyr2(CblasRowMajor, INVALID, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_dsyr2(CblasRowMajor, CblasUpper, INVALID, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_dsyr2(CblasRowMajor, CblasUpper, 0, ALPHA, X, 0, Y, 1, A, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_dsyr2(CblasRowMajor, CblasUpper, 0, ALPHA, X, 1, Y, 0, A, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_dsyr2(CblasRowMajor, CblasUpper, 2, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + } else if (strncmp( sf,"cblas_dspr2",11)==0) { + cblas_rout = "cblas_dspr2"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_dspr2(INVALID, CblasUpper, 0, ALPHA, X, 1, Y, 1, A ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_dspr2(CblasColMajor, INVALID, 0, ALPHA, X, 1, Y, 1, A ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_dspr2(CblasColMajor, CblasUpper, INVALID, ALPHA, X, 1, Y, 1, A ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dspr2(CblasColMajor, CblasUpper, 0, ALPHA, X, 0, Y, 1, A ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_dspr2(CblasColMajor, CblasUpper, 0, ALPHA, X, 1, Y, 0, A ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_dspr2(CblasRowMajor, INVALID, 0, ALPHA, X, 1, Y, 1, A ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_dspr2(CblasRowMajor, CblasUpper, INVALID, ALPHA, X, 1, Y, 1, A ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_dspr2(CblasRowMajor, CblasUpper, 0, ALPHA, X, 0, Y, 1, A ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_dspr2(CblasRowMajor, CblasUpper, 0, ALPHA, X, 1, Y, 0, A ); + chkxer(); + } else if (strncmp( sf,"cblas_dsyr",10)==0) { + cblas_rout = "cblas_dsyr"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_dsyr(INVALID, CblasUpper, 0, ALPHA, X, 1, A, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_dsyr(CblasColMajor, INVALID, 0, ALPHA, X, 1, A, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_dsyr(CblasColMajor, CblasUpper, INVALID, ALPHA, X, 1, A, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dsyr(CblasColMajor, CblasUpper, 0, ALPHA, X, 0, A, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_dsyr(CblasColMajor, CblasUpper, 2, ALPHA, X, 1, A, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_dsyr(CblasRowMajor, INVALID, 0, ALPHA, X, 1, A, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_dsyr(CblasRowMajor, CblasUpper, INVALID, ALPHA, X, 1, A, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_dsyr(CblasRowMajor, CblasUpper, 0, ALPHA, X, 0, A, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_dsyr(CblasRowMajor, CblasUpper, 2, ALPHA, X, 1, A, 1 ); + chkxer(); + } else if (strncmp( sf,"cblas_dspr",10)==0) { + cblas_rout = "cblas_dspr"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_dspr(INVALID, CblasUpper, 0, ALPHA, X, 1, A ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_dspr(CblasColMajor, INVALID, 0, ALPHA, X, 1, A ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_dspr(CblasColMajor, CblasUpper, INVALID, ALPHA, X, 1, A ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dspr(CblasColMajor, CblasUpper, 0, ALPHA, X, 0, A ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_dspr(CblasColMajor, INVALID, 0, ALPHA, X, 1, A ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_dspr(CblasColMajor, CblasUpper, INVALID, ALPHA, X, 1, A ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dspr(CblasColMajor, CblasUpper, 0, ALPHA, X, 0, A ); + chkxer(); + } + if (cblas_ok == TRUE) + printf(" %-12s PASSED THE TESTS OF ERROR-EXITS\n", cblas_rout); + else + printf("******* %s FAILED THE TESTS OF ERROR-EXITS *******\n",cblas_rout); +} diff --git a/CBLAS/testing/c_d3chke.c b/CBLAS/testing/c_d3chke.c new file mode 100644 index 000000000..fae38d485 --- /dev/null +++ b/CBLAS/testing/c_d3chke.c @@ -0,0 +1,1271 @@ +#include +#include +#include "cblas.h" +#include "cblas_test.h" + +int cblas_ok, cblas_lerr, cblas_info; +int link_xerbla=TRUE; +char *cblas_rout; + +#ifdef F77_Char +void F77_xerbla(F77_Char F77_srname, void *vinfo); +#else +void F77_xerbla(char *srname, void *vinfo); +#endif + +void chkxer(void) { + extern int cblas_ok, cblas_lerr, cblas_info; + extern int link_xerbla; + extern char *cblas_rout; + if (cblas_lerr == 1 ) { + printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %d NOT DETECTED BY %s *****\n", cblas_info, cblas_rout); + cblas_ok = 0 ; + } + cblas_lerr = 1 ; +} + +void F77_d3chke(char *rout) { + char *sf = ( rout ) ; + double A[2] = {0.0,0.0}, + B[2] = {0.0,0.0}, + C[2] = {0.0,0.0}, + ALPHA=0.0, BETA=0.0; + extern int cblas_info, cblas_lerr, cblas_ok; + extern int RowMajorStrg; + extern char *cblas_rout; + + if (link_xerbla) /* call these first to link */ + { + cblas_xerbla(cblas_info,cblas_rout,""); + F77_xerbla(cblas_rout,&cblas_info); + } + + cblas_ok = TRUE ; + cblas_lerr = PASSED ; + + if (strncmp( sf,"cblas_dgemm" ,11)==0) { + cblas_rout = "cblas_dgemm" ; + + cblas_info = 1; + cblas_dgemm( INVALID, CblasNoTrans, CblasNoTrans, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 1; + cblas_dgemm( INVALID, CblasNoTrans, CblasTrans, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 1; + cblas_dgemm( INVALID, CblasTrans, CblasNoTrans, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 1; + cblas_dgemm( INVALID, CblasTrans, CblasTrans, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_dgemm( CblasColMajor, INVALID, CblasNoTrans, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_dgemm( CblasColMajor, INVALID, CblasTrans, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_dgemm( CblasColMajor, CblasNoTrans, INVALID, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_dgemm( CblasColMajor, CblasTrans, INVALID, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_dgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_dgemm( CblasColMajor, CblasNoTrans, CblasTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_dgemm( CblasColMajor, CblasTrans, CblasNoTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_dgemm( CblasColMajor, CblasTrans, CblasTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_dgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_dgemm( CblasColMajor, CblasNoTrans, CblasTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_dgemm( CblasColMajor, CblasTrans, CblasNoTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_dgemm( CblasColMajor, CblasTrans, CblasTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dgemm( CblasColMajor, CblasNoTrans, CblasTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dgemm( CblasColMajor, CblasTrans, CblasNoTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dgemm( CblasColMajor, CblasTrans, CblasTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_dgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, 2, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_dgemm( CblasColMajor, CblasNoTrans, CblasTrans, 2, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_dgemm( CblasColMajor, CblasTrans, CblasNoTrans, 0, 0, 2, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_dgemm( CblasColMajor, CblasTrans, CblasTrans, 0, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_dgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, 0, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_dgemm( CblasColMajor, CblasTrans, CblasNoTrans, 0, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_dgemm( CblasColMajor, CblasNoTrans, CblasTrans, 0, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_dgemm( CblasColMajor, CblasTrans, CblasTrans, 0, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = FALSE; + cblas_dgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, 2, 0, 0, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = FALSE; + cblas_dgemm( CblasColMajor, CblasNoTrans, CblasTrans, 2, 0, 0, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = FALSE; + cblas_dgemm( CblasColMajor, CblasTrans, CblasNoTrans, 2, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = FALSE; + cblas_dgemm( CblasColMajor, CblasTrans, CblasTrans, 2, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_dgemm( CblasRowMajor, CblasNoTrans, CblasNoTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_dgemm( CblasRowMajor, CblasNoTrans, CblasTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_dgemm( CblasRowMajor, CblasTrans, CblasNoTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_dgemm( CblasRowMajor, CblasTrans, CblasTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_dgemm( CblasRowMajor, CblasNoTrans, CblasNoTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_dgemm( CblasRowMajor, CblasNoTrans, CblasTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_dgemm( CblasRowMajor, CblasTrans, CblasNoTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_dgemm( CblasRowMajor, CblasTrans, CblasTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_dgemm( CblasRowMajor, CblasNoTrans, CblasNoTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_dgemm( CblasRowMajor, CblasNoTrans, CblasTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_dgemm( CblasRowMajor, CblasTrans, CblasNoTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_dgemm( CblasRowMajor, CblasTrans, CblasTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_dgemm( CblasRowMajor, CblasNoTrans, CblasNoTrans, 0, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_dgemm( CblasRowMajor, CblasNoTrans, CblasTrans, 0, 0, 2, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_dgemm( CblasRowMajor, CblasTrans, CblasNoTrans, 2, 0, 0, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_dgemm( CblasRowMajor, CblasTrans, CblasTrans, 2, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_dgemm( CblasRowMajor, CblasNoTrans, CblasNoTrans, 0, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_dgemm( CblasRowMajor, CblasTrans, CblasNoTrans, 0, 2, 0, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_dgemm( CblasRowMajor, CblasNoTrans, CblasTrans, 0, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_dgemm( CblasRowMajor, CblasTrans, CblasTrans, 0, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = TRUE; + cblas_dgemm( CblasRowMajor, CblasNoTrans, CblasNoTrans, 0, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = TRUE; + cblas_dgemm( CblasRowMajor, CblasNoTrans, CblasTrans, 0, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = TRUE; + cblas_dgemm( CblasRowMajor, CblasTrans, CblasNoTrans, 0, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = TRUE; + cblas_dgemm( CblasRowMajor, CblasTrans, CblasTrans, 0, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + + } else if (strncmp( sf,"cblas_dsymm" ,11)==0) { + cblas_rout = "cblas_dsymm" ; + + cblas_info = 1; + cblas_dsymm( INVALID, CblasRight, CblasLower, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_dsymm( CblasColMajor, INVALID, CblasUpper, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_dsymm( CblasColMajor, CblasLeft, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_dsymm( CblasColMajor, CblasLeft, CblasUpper, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_dsymm( CblasColMajor, CblasRight, CblasUpper, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_dsymm( CblasColMajor, CblasLeft, CblasLower, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_dsymm( CblasColMajor, CblasRight, CblasLower, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_dsymm( CblasColMajor, CblasLeft, CblasUpper, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_dsymm( CblasColMajor, CblasRight, CblasUpper, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_dsymm( CblasColMajor, CblasLeft, CblasLower, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_dsymm( CblasColMajor, CblasRight, CblasLower, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_dsymm( CblasColMajor, CblasLeft, CblasUpper, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_dsymm( CblasColMajor, CblasRight, CblasUpper, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_dsymm( CblasColMajor, CblasLeft, CblasLower, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_dsymm( CblasColMajor, CblasRight, CblasLower, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_dsymm( CblasColMajor, CblasLeft, CblasUpper, 2, 0, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_dsymm( CblasColMajor, CblasRight, CblasUpper, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_dsymm( CblasColMajor, CblasLeft, CblasLower, 2, 0, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_dsymm( CblasColMajor, CblasRight, CblasLower, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_dsymm( CblasColMajor, CblasLeft, CblasUpper, 2, 0, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_dsymm( CblasColMajor, CblasRight, CblasUpper, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_dsymm( CblasColMajor, CblasLeft, CblasLower, 2, 0, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_dsymm( CblasColMajor, CblasRight, CblasLower, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_dsymm( CblasRowMajor, CblasLeft, CblasUpper, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_dsymm( CblasRowMajor, CblasRight, CblasUpper, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_dsymm( CblasRowMajor, CblasLeft, CblasLower, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_dsymm( CblasRowMajor, CblasRight, CblasLower, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_dsymm( CblasRowMajor, CblasLeft, CblasUpper, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_dsymm( CblasRowMajor, CblasRight, CblasUpper, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_dsymm( CblasRowMajor, CblasLeft, CblasLower, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_dsymm( CblasRowMajor, CblasRight, CblasLower, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_dsymm( CblasRowMajor, CblasLeft, CblasUpper, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_dsymm( CblasRowMajor, CblasRight, CblasUpper, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_dsymm( CblasRowMajor, CblasLeft, CblasLower, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_dsymm( CblasRowMajor, CblasRight, CblasLower, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_dsymm( CblasRowMajor, CblasLeft, CblasUpper, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_dsymm( CblasRowMajor, CblasRight, CblasUpper, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_dsymm( CblasRowMajor, CblasLeft, CblasLower, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_dsymm( CblasRowMajor, CblasRight, CblasLower, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_dsymm( CblasRowMajor, CblasLeft, CblasUpper, 0, 2, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_dsymm( CblasRowMajor, CblasRight, CblasUpper, 0, 2, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_dsymm( CblasRowMajor, CblasLeft, CblasLower, 0, 2, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_dsymm( CblasRowMajor, CblasRight, CblasLower, 0, 2, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + + } else if (strncmp( sf,"cblas_dtrmm" ,11)==0) { + cblas_rout = "cblas_dtrmm" ; + + cblas_info = 1; + cblas_dtrmm( INVALID, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasLeft, INVALID, CblasNoTrans, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasLeft, CblasUpper, INVALID, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + INVALID, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_dtrmm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_dtrmm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + + } else if (strncmp( sf,"cblas_dtrsm" ,11)==0) { + cblas_rout = "cblas_dtrsm" ; + + cblas_info = 1; + cblas_dtrsm( INVALID, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasLeft, INVALID, CblasNoTrans, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasLeft, CblasUpper, INVALID, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + INVALID, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_dtrsm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + + cblas_info = 6; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_dtrsm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + + } else if (strncmp( sf,"cblas_dsyrk" ,11)==0) { + cblas_rout = "cblas_dsyrk" ; + + cblas_info = 1; + cblas_dsyrk( INVALID, CblasUpper, CblasNoTrans, + 0, 0, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_dsyrk( CblasColMajor, INVALID, CblasNoTrans, + 0, 0, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_dsyrk( CblasColMajor, CblasUpper, INVALID, + 0, 0, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_dsyrk( CblasColMajor, CblasUpper, CblasNoTrans, + INVALID, 0, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_dsyrk( CblasColMajor, CblasUpper, CblasTrans, + INVALID, 0, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_dsyrk( CblasColMajor, CblasLower, CblasNoTrans, + INVALID, 0, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_dsyrk( CblasColMajor, CblasLower, CblasTrans, + INVALID, 0, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_dsyrk( CblasColMajor, CblasUpper, CblasNoTrans, + 0, INVALID, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_dsyrk( CblasColMajor, CblasUpper, CblasTrans, + 0, INVALID, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_dsyrk( CblasColMajor, CblasLower, CblasNoTrans, + 0, INVALID, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_dsyrk( CblasColMajor, CblasLower, CblasTrans, + 0, INVALID, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_dsyrk( CblasRowMajor, CblasUpper, CblasNoTrans, + 0, 2, ALPHA, A, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_dsyrk( CblasRowMajor, CblasUpper, CblasTrans, + 2, 0, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_dsyrk( CblasRowMajor, CblasLower, CblasNoTrans, + 0, 2, ALPHA, A, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_dsyrk( CblasRowMajor, CblasLower, CblasTrans, + 2, 0, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_dsyrk( CblasColMajor, CblasUpper, CblasNoTrans, + 2, 0, ALPHA, A, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_dsyrk( CblasColMajor, CblasUpper, CblasTrans, + 0, 2, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_dsyrk( CblasColMajor, CblasLower, CblasNoTrans, + 2, 0, ALPHA, A, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_dsyrk( CblasColMajor, CblasLower, CblasTrans, + 0, 2, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_dsyrk( CblasRowMajor, CblasUpper, CblasNoTrans, + 2, 0, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_dsyrk( CblasRowMajor, CblasUpper, CblasTrans, + 2, 0, ALPHA, A, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_dsyrk( CblasRowMajor, CblasLower, CblasNoTrans, + 2, 0, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_dsyrk( CblasRowMajor, CblasLower, CblasTrans, + 2, 0, ALPHA, A, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_dsyrk( CblasColMajor, CblasUpper, CblasNoTrans, + 2, 0, ALPHA, A, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_dsyrk( CblasColMajor, CblasUpper, CblasTrans, + 2, 0, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_dsyrk( CblasColMajor, CblasLower, CblasNoTrans, + 2, 0, ALPHA, A, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_dsyrk( CblasColMajor, CblasLower, CblasTrans, + 2, 0, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + + } else if (strncmp( sf,"cblas_dsyr2k" ,12)==0) { + cblas_rout = "cblas_dsyr2k" ; + + cblas_info = 1; + cblas_dsyr2k( INVALID, CblasUpper, CblasNoTrans, + 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_dsyr2k( CblasColMajor, INVALID, CblasNoTrans, + 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_dsyr2k( CblasColMajor, CblasUpper, INVALID, + 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_dsyr2k( CblasColMajor, CblasUpper, CblasNoTrans, + INVALID, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_dsyr2k( CblasColMajor, CblasUpper, CblasTrans, + INVALID, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_dsyr2k( CblasColMajor, CblasLower, CblasNoTrans, + INVALID, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_dsyr2k( CblasColMajor, CblasLower, CblasTrans, + INVALID, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_dsyr2k( CblasColMajor, CblasUpper, CblasNoTrans, + 0, INVALID, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_dsyr2k( CblasColMajor, CblasUpper, CblasTrans, + 0, INVALID, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_dsyr2k( CblasColMajor, CblasLower, CblasNoTrans, + 0, INVALID, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_dsyr2k( CblasColMajor, CblasLower, CblasTrans, + 0, INVALID, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_dsyr2k( CblasRowMajor, CblasUpper, CblasNoTrans, + 0, 2, ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_dsyr2k( CblasRowMajor, CblasUpper, CblasTrans, + 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_dsyr2k( CblasRowMajor, CblasLower, CblasNoTrans, + 0, 2, ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_dsyr2k( CblasRowMajor, CblasLower, CblasTrans, + 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_dsyr2k( CblasColMajor, CblasUpper, CblasNoTrans, + 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_dsyr2k( CblasColMajor, CblasUpper, CblasTrans, + 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_dsyr2k( CblasColMajor, CblasLower, CblasNoTrans, + 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_dsyr2k( CblasColMajor, CblasLower, CblasTrans, + 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_dsyr2k( CblasRowMajor, CblasUpper, CblasNoTrans, + 0, 2, ALPHA, A, 2, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_dsyr2k( CblasRowMajor, CblasUpper, CblasTrans, + 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_dsyr2k( CblasRowMajor, CblasLower, CblasNoTrans, + 0, 2, ALPHA, A, 2, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_dsyr2k( CblasRowMajor, CblasLower, CblasTrans, + 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_dsyr2k( CblasColMajor, CblasUpper, CblasNoTrans, + 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_dsyr2k( CblasColMajor, CblasUpper, CblasTrans, + 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_dsyr2k( CblasColMajor, CblasLower, CblasNoTrans, + 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_dsyr2k( CblasColMajor, CblasLower, CblasTrans, + 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_dsyr2k( CblasRowMajor, CblasUpper, CblasNoTrans, + 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_dsyr2k( CblasRowMajor, CblasUpper, CblasTrans, + 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_dsyr2k( CblasRowMajor, CblasLower, CblasNoTrans, + 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_dsyr2k( CblasRowMajor, CblasLower, CblasTrans, + 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_dsyr2k( CblasColMajor, CblasUpper, CblasNoTrans, + 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_dsyr2k( CblasColMajor, CblasUpper, CblasTrans, + 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_dsyr2k( CblasColMajor, CblasLower, CblasNoTrans, + 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_dsyr2k( CblasColMajor, CblasLower, CblasTrans, + 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + } + if (cblas_ok == TRUE ) + printf(" %-12s PASSED THE TESTS OF ERROR-EXITS\n", cblas_rout); + else + printf("***** %s FAILED THE TESTS OF ERROR-EXITS *******\n",cblas_rout); +} diff --git a/CBLAS/testing/c_dblas1.c b/CBLAS/testing/c_dblas1.c new file mode 100644 index 000000000..616c49895 --- /dev/null +++ b/CBLAS/testing/c_dblas1.c @@ -0,0 +1,83 @@ +/* + * c_dblas1.c + * + * The program is a C wrapper for dcblat1. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas_test.h" +#include "cblas.h" +double F77_dasum(const int *N, double *X, const int *incX) +{ + return cblas_dasum(*N, X, *incX); +} + +void F77_daxpy(const int *N, const double *alpha, const double *X, + const int *incX, double *Y, const int *incY) +{ + cblas_daxpy(*N, *alpha, X, *incX, Y, *incY); + return; +} + +void F77_dcopy(const int *N, double *X, const int *incX, + double *Y, const int *incY) +{ + cblas_dcopy(*N, X, *incX, Y, *incY); + return; +} + +double F77_ddot(const int *N, const double *X, const int *incX, + const double *Y, const int *incY) +{ + return cblas_ddot(*N, X, *incX, Y, *incY); +} + +double F77_dnrm2(const int *N, const double *X, const int *incX) +{ + return cblas_dnrm2(*N, X, *incX); +} + +void F77_drotg( double *a, double *b, double *c, double *s) +{ + cblas_drotg(a,b,c,s); + return; +} + +void F77_drot( const int *N, double *X, const int *incX, double *Y, + const int *incY, const double *c, const double *s) +{ + + cblas_drot(*N,X,*incX,Y,*incY,*c,*s); + return; +} + +void F77_dscal(const int *N, const double *alpha, double *X, + const int *incX) +{ + cblas_dscal(*N, *alpha, X, *incX); + return; +} + +void F77_dswap( const int *N, double *X, const int *incX, + double *Y, const int *incY) +{ + cblas_dswap(*N,X,*incX,Y,*incY); + return; +} + +double F77_dzasum(const int *N, void *X, const int *incX) +{ + return cblas_dzasum(*N, X, *incX); +} + +double F77_dznrm2(const int *N, const void *X, const int *incX) +{ + return cblas_dznrm2(*N, X, *incX); +} + +int F77_idamax(const int *N, const double *X, const int *incX) +{ + if (*N < 1 || *incX < 1) return(0); + return (cblas_idamax(*N, X, *incX)+1); +} diff --git a/CBLAS/testing/c_dblas2.c b/CBLAS/testing/c_dblas2.c new file mode 100644 index 000000000..78ec24088 --- /dev/null +++ b/CBLAS/testing/c_dblas2.c @@ -0,0 +1,583 @@ +/* + * Written by D.P. Manley, Digital Equipment Corporation. + * Prefixed "C_" to BLAS routines and their declarations. + * + * Modified by T. H. Do, 1/23/98, SGI/CRAY Research. + */ +#include +#include "cblas.h" +#include "cblas_test.h" + +void F77_dgemv(int *order, char *transp, int *m, int *n, double *alpha, + double *a, int *lda, double *x, int *incx, double *beta, + double *y, int *incy ) { + + double *A; + int i,j,LDA; + enum CBLAS_TRANSPOSE trans; + + get_transpose_type(transp, &trans); + if (*order == TEST_ROW_MJR) { + LDA = *n+1; + A = ( double* )malloc( (*m)*LDA*sizeof( double ) ); + for( i=0; i<*m; i++ ) + for( j=0; j<*n; j++ ) + A[ LDA*i+j ]=a[ (*lda)*j+i ]; + cblas_dgemv( CblasRowMajor, trans, + *m, *n, *alpha, A, LDA, x, *incx, *beta, y, *incy ); + free(A); + } + else if (*order == TEST_COL_MJR) + cblas_dgemv( CblasColMajor, trans, + *m, *n, *alpha, a, *lda, x, *incx, *beta, y, *incy ); + else + cblas_dgemv( UNDEFINED, trans, + *m, *n, *alpha, a, *lda, x, *incx, *beta, y, *incy ); +} + +void F77_dger(int *order, int *m, int *n, double *alpha, double *x, int *incx, + double *y, int *incy, double *a, int *lda ) { + + double *A; + int i,j,LDA; + + if (*order == TEST_ROW_MJR) { + LDA = *n+1; + A = ( double* )malloc( (*m)*LDA*sizeof( double ) ); + + for( i=0; i<*m; i++ ) { + for( j=0; j<*n; j++ ) + A[ LDA*i+j ]=a[ (*lda)*j+i ]; + } + + cblas_dger(CblasRowMajor, *m, *n, *alpha, x, *incx, y, *incy, A, LDA ); + for( i=0; i<*m; i++ ) + for( j=0; j<*n; j++ ) + a[ (*lda)*j+i ]=A[ LDA*i+j ]; + free(A); + } + else + cblas_dger( CblasColMajor, *m, *n, *alpha, x, *incx, y, *incy, a, *lda ); +} + +void F77_dtrmv(int *order, char *uplow, char *transp, char *diagn, + int *n, double *a, int *lda, double *x, int *incx) { + double *A; + int i,j,LDA; + enum CBLAS_TRANSPOSE trans; + enum CBLAS_UPLO uplo; + enum CBLAS_DIAG diag; + + get_transpose_type(transp,&trans); + get_uplo_type(uplow,&uplo); + get_diag_type(diagn,&diag); + + if (*order == TEST_ROW_MJR) { + LDA = *n+1; + A = ( double* )malloc( (*n)*LDA*sizeof( double ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) + A[ LDA*i+j ]=a[ (*lda)*j+i ]; + cblas_dtrmv(CblasRowMajor, uplo, trans, diag, *n, A, LDA, x, *incx); + free(A); + } + else if (*order == TEST_COL_MJR) + cblas_dtrmv(CblasColMajor, uplo, trans, diag, *n, a, *lda, x, *incx); + else { + cblas_dtrmv(UNDEFINED, uplo, trans, diag, *n, a, *lda, x, *incx); + } +} + +void F77_dtrsv(int *order, char *uplow, char *transp, char *diagn, + int *n, double *a, int *lda, double *x, int *incx ) { + double *A; + int i,j,LDA; + enum CBLAS_TRANSPOSE trans; + enum CBLAS_UPLO uplo; + enum CBLAS_DIAG diag; + + get_transpose_type(transp,&trans); + get_uplo_type(uplow,&uplo); + get_diag_type(diagn,&diag); + + if (*order == TEST_ROW_MJR) { + LDA = *n+1; + A = ( double* )malloc( (*n)*LDA*sizeof( double ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) + A[ LDA*i+j ]=a[ (*lda)*j+i ]; + cblas_dtrsv(CblasRowMajor, uplo, trans, diag, *n, A, LDA, x, *incx ); + free(A); + } + else + cblas_dtrsv(CblasColMajor, uplo, trans, diag, *n, a, *lda, x, *incx ); +} +void F77_dsymv(int *order, char *uplow, int *n, double *alpha, double *a, + int *lda, double *x, int *incx, double *beta, double *y, + int *incy) { + double *A; + int i,j,LDA; + enum CBLAS_UPLO uplo; + + get_uplo_type(uplow,&uplo); + + if (*order == TEST_ROW_MJR) { + LDA = *n+1; + A = ( double* )malloc( (*n)*LDA*sizeof( double ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) + A[ LDA*i+j ]=a[ (*lda)*j+i ]; + cblas_dsymv(CblasRowMajor, uplo, *n, *alpha, A, LDA, x, *incx, + *beta, y, *incy ); + free(A); + } + else + cblas_dsymv(CblasColMajor, uplo, *n, *alpha, a, *lda, x, *incx, + *beta, y, *incy ); +} + +void F77_dsyr(int *order, char *uplow, int *n, double *alpha, double *x, + int *incx, double *a, int *lda) { + double *A; + int i,j,LDA; + enum CBLAS_UPLO uplo; + + get_uplo_type(uplow,&uplo); + + if (*order == TEST_ROW_MJR) { + LDA = *n+1; + A = ( double* )malloc( (*n)*LDA*sizeof( double ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) + A[ LDA*i+j ]=a[ (*lda)*j+i ]; + cblas_dsyr(CblasRowMajor, uplo, *n, *alpha, x, *incx, A, LDA); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) + a[ (*lda)*j+i ]=A[ LDA*i+j ]; + free(A); + } + else + cblas_dsyr(CblasColMajor, uplo, *n, *alpha, x, *incx, a, *lda); +} + +void F77_dsyr2(int *order, char *uplow, int *n, double *alpha, double *x, + int *incx, double *y, int *incy, double *a, int *lda) { + double *A; + int i,j,LDA; + enum CBLAS_UPLO uplo; + + get_uplo_type(uplow,&uplo); + + if (*order == TEST_ROW_MJR) { + LDA = *n+1; + A = ( double* )malloc( (*n)*LDA*sizeof( double ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) + A[ LDA*i+j ]=a[ (*lda)*j+i ]; + cblas_dsyr2(CblasRowMajor, uplo, *n, *alpha, x, *incx, y, *incy, A, LDA); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) + a[ (*lda)*j+i ]=A[ LDA*i+j ]; + free(A); + } + else + cblas_dsyr2(CblasColMajor, uplo, *n, *alpha, x, *incx, y, *incy, a, *lda); +} + +void F77_dgbmv(int *order, char *transp, int *m, int *n, int *kl, int *ku, + double *alpha, double *a, int *lda, double *x, int *incx, + double *beta, double *y, int *incy ) { + + double *A; + int i,irow,j,jcol,LDA; + enum CBLAS_TRANSPOSE trans; + + get_transpose_type(transp, &trans); + + if (*order == TEST_ROW_MJR) { + LDA = *ku+*kl+2; + A = ( double* )malloc( (*n+*kl)*LDA*sizeof( double ) ); + for( i=0; i<*ku; i++ ){ + irow=*ku+*kl-i; + jcol=(*ku)-i; + for( j=jcol; j<*n; j++ ) + A[ LDA*(j-jcol)+irow ]=a[ (*lda)*j+i ]; + } + i=*ku; + irow=*ku+*kl-i; + for( j=0; j<*n; j++ ) + A[ LDA*j+irow ]=a[ (*lda)*j+i ]; + for( i=*ku+1; i<*ku+*kl+1; i++ ){ + irow=*ku+*kl-i; + jcol=i-(*ku); + for( j=jcol; j<(*n+*kl); j++ ) + A[ LDA*j+irow ]=a[ (*lda)*(j-jcol)+i ]; + } + cblas_dgbmv( CblasRowMajor, trans, *m, *n, *kl, *ku, *alpha, + A, LDA, x, *incx, *beta, y, *incy ); + free(A); + } + else + cblas_dgbmv( CblasColMajor, trans, *m, *n, *kl, *ku, *alpha, + a, *lda, x, *incx, *beta, y, *incy ); +} + +void F77_dtbmv(int *order, char *uplow, char *transp, char *diagn, + int *n, int *k, double *a, int *lda, double *x, int *incx) { + double *A; + int irow, jcol, i, j, LDA; + enum CBLAS_TRANSPOSE trans; + enum CBLAS_UPLO uplo; + enum CBLAS_DIAG diag; + + get_transpose_type(transp,&trans); + get_uplo_type(uplow,&uplo); + get_diag_type(diagn,&diag); + + if (*order == TEST_ROW_MJR) { + LDA = *k+1; + A = ( double* )malloc( (*n+*k)*LDA*sizeof( double ) ); + if (uplo == CblasUpper) { + for( i=0; i<*k; i++ ){ + irow=*k-i; + jcol=(*k)-i; + for( j=jcol; j<*n; j++ ) + A[ LDA*(j-jcol)+irow ]=a[ (*lda)*j+i ]; + } + i=*k; + irow=*k-i; + for( j=0; j<*n; j++ ) + A[ LDA*j+irow ]=a[ (*lda)*j+i ]; + } + else { + i=0; + irow=*k-i; + for( j=0; j<*n; j++ ) + A[ LDA*j+irow ]=a[ (*lda)*j+i ]; + for( i=1; i<*k+1; i++ ){ + irow=*k-i; + jcol=i; + for( j=jcol; j<(*n+*k); j++ ) + A[ LDA*j+irow ]=a[ (*lda)*(j-jcol)+i ]; + } + } + cblas_dtbmv(CblasRowMajor, uplo, trans, diag, *n, *k, A, LDA, x, *incx); + free(A); + } + else + cblas_dtbmv(CblasColMajor, uplo, trans, diag, *n, *k, a, *lda, x, *incx); +} + +void F77_dtbsv(int *order, char *uplow, char *transp, char *diagn, + int *n, int *k, double *a, int *lda, double *x, int *incx) { + double *A; + int irow, jcol, i, j, LDA; + enum CBLAS_TRANSPOSE trans; + enum CBLAS_UPLO uplo; + enum CBLAS_DIAG diag; + + get_transpose_type(transp,&trans); + get_uplo_type(uplow,&uplo); + get_diag_type(diagn,&diag); + + if (*order == TEST_ROW_MJR) { + LDA = *k+1; + A = ( double* )malloc( (*n+*k)*LDA*sizeof( double ) ); + if (uplo == CblasUpper) { + for( i=0; i<*k; i++ ){ + irow=*k-i; + jcol=(*k)-i; + for( j=jcol; j<*n; j++ ) + A[ LDA*(j-jcol)+irow ]=a[ (*lda)*j+i ]; + } + i=*k; + irow=*k-i; + for( j=0; j<*n; j++ ) + A[ LDA*j+irow ]=a[ (*lda)*j+i ]; + } + else { + i=0; + irow=*k-i; + for( j=0; j<*n; j++ ) + A[ LDA*j+irow ]=a[ (*lda)*j+i ]; + for( i=1; i<*k+1; i++ ){ + irow=*k-i; + jcol=i; + for( j=jcol; j<(*n+*k); j++ ) + A[ LDA*j+irow ]=a[ (*lda)*(j-jcol)+i ]; + } + } + cblas_dtbsv(CblasRowMajor, uplo, trans, diag, *n, *k, A, LDA, x, *incx); + free(A); + } + else + cblas_dtbsv(CblasColMajor, uplo, trans, diag, *n, *k, a, *lda, x, *incx); +} + +void F77_dsbmv(int *order, char *uplow, int *n, int *k, double *alpha, + double *a, int *lda, double *x, int *incx, double *beta, + double *y, int *incy) { + double *A; + int i,j,irow,jcol,LDA; + enum CBLAS_UPLO uplo; + + get_uplo_type(uplow,&uplo); + + if (*order == TEST_ROW_MJR) { + LDA = *k+1; + A = ( double* )malloc( (*n+*k)*LDA*sizeof( double ) ); + if (uplo == CblasUpper) { + for( i=0; i<*k; i++ ){ + irow=*k-i; + jcol=(*k)-i; + for( j=jcol; j<*n; j++ ) + A[ LDA*(j-jcol)+irow ]=a[ (*lda)*j+i ]; + } + i=*k; + irow=*k-i; + for( j=0; j<*n; j++ ) + A[ LDA*j+irow ]=a[ (*lda)*j+i ]; + } + else { + i=0; + irow=*k-i; + for( j=0; j<*n; j++ ) + A[ LDA*j+irow ]=a[ (*lda)*j+i ]; + for( i=1; i<*k+1; i++ ){ + irow=*k-i; + jcol=i; + for( j=jcol; j<(*n+*k); j++ ) + A[ LDA*j+irow ]=a[ (*lda)*(j-jcol)+i ]; + } + } + cblas_dsbmv(CblasRowMajor, uplo, *n, *k, *alpha, A, LDA, x, *incx, + *beta, y, *incy ); + free(A); + } + else + cblas_dsbmv(CblasColMajor, uplo, *n, *k, *alpha, a, *lda, x, *incx, + *beta, y, *incy ); +} + +void F77_dspmv(int *order, char *uplow, int *n, double *alpha, double *ap, + double *x, int *incx, double *beta, double *y, int *incy) { + double *A,*AP; + int i,j,k,LDA; + enum CBLAS_UPLO uplo; + + get_uplo_type(uplow,&uplo); + + if (*order == TEST_ROW_MJR) { + LDA = *n; + A = ( double* )malloc( LDA*LDA*sizeof( double ) ); + AP = ( double* )malloc( (((LDA+1)*LDA)/2)*sizeof( double ) ); + if (uplo == CblasUpper) { + for( j=0, k=0; j<*n; j++ ) + for( i=0; i +#include "cblas.h" +#include "cblas_test.h" +#define TEST_COL_MJR 0 +#define TEST_ROW_MJR 1 +#define UNDEFINED -1 + +void F77_dgemm(int *order, char *transpa, char *transpb, int *m, int *n, + int *k, double *alpha, double *a, int *lda, double *b, int *ldb, + double *beta, double *c, int *ldc ) { + + double *A, *B, *C; + int i,j,LDA, LDB, LDC; + enum CBLAS_TRANSPOSE transa, transb; + + get_transpose_type(transpa, &transa); + get_transpose_type(transpb, &transb); + + if (*order == TEST_ROW_MJR) { + if (transa == CblasNoTrans) { + LDA = *k+1; + A = (double *)malloc( (*m)*LDA*sizeof( double ) ); + for( i=0; i<*m; i++ ) + for( j=0; j<*k; j++ ) + A[i*LDA+j]=a[j*(*lda)+i]; + } + else { + LDA = *m+1; + A = ( double* )malloc( LDA*(*k)*sizeof( double ) ); + for( i=0; i<*k; i++ ) + for( j=0; j<*m; j++ ) + A[i*LDA+j]=a[j*(*lda)+i]; + } + if (transb == CblasNoTrans) { + LDB = *n+1; + B = ( double* )malloc( (*k)*LDB*sizeof( double ) ); + for( i=0; i<*k; i++ ) + for( j=0; j<*n; j++ ) + B[i*LDB+j]=b[j*(*ldb)+i]; + } + else { + LDB = *k+1; + B = ( double* )malloc( LDB*(*n)*sizeof( double ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*k; j++ ) + B[i*LDB+j]=b[j*(*ldb)+i]; + } + LDC = *n+1; + C = ( double* )malloc( (*m)*LDC*sizeof( double ) ); + for( j=0; j<*n; j++ ) + for( i=0; i<*m; i++ ) + C[i*LDC+j]=c[j*(*ldc)+i]; + + cblas_dgemm( CblasRowMajor, transa, transb, *m, *n, *k, *alpha, A, LDA, + B, LDB, *beta, C, LDC ); + for( j=0; j<*n; j++ ) + for( i=0; i<*m; i++ ) + c[j*(*ldc)+i]=C[i*LDC+j]; + free(A); + free(B); + free(C); + } + else if (*order == TEST_COL_MJR) + cblas_dgemm( CblasColMajor, transa, transb, *m, *n, *k, *alpha, a, *lda, + b, *ldb, *beta, c, *ldc ); + else + cblas_dgemm( UNDEFINED, transa, transb, *m, *n, *k, *alpha, a, *lda, + b, *ldb, *beta, c, *ldc ); +} +void F77_dsymm(int *order, char *rtlf, char *uplow, int *m, int *n, + double *alpha, double *a, int *lda, double *b, int *ldb, + double *beta, double *c, int *ldc ) { + + double *A, *B, *C; + int i,j,LDA, LDB, LDC; + enum CBLAS_UPLO uplo; + enum CBLAS_SIDE side; + + get_uplo_type(uplow,&uplo); + get_side_type(rtlf,&side); + + if (*order == TEST_ROW_MJR) { + if (side == CblasLeft) { + LDA = *m+1; + A = ( double* )malloc( (*m)*LDA*sizeof( double ) ); + for( i=0; i<*m; i++ ) + for( j=0; j<*m; j++ ) + A[i*LDA+j]=a[j*(*lda)+i]; + } + else{ + LDA = *n+1; + A = ( double* )malloc( (*n)*LDA*sizeof( double ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) + A[i*LDA+j]=a[j*(*lda)+i]; + } + LDB = *n+1; + B = ( double* )malloc( (*m)*LDB*sizeof( double ) ); + for( i=0; i<*m; i++ ) + for( j=0; j<*n; j++ ) + B[i*LDB+j]=b[j*(*ldb)+i]; + LDC = *n+1; + C = ( double* )malloc( (*m)*LDC*sizeof( double ) ); + for( j=0; j<*n; j++ ) + for( i=0; i<*m; i++ ) + C[i*LDC+j]=c[j*(*ldc)+i]; + cblas_dsymm( CblasRowMajor, side, uplo, *m, *n, *alpha, A, LDA, B, LDB, + *beta, C, LDC ); + for( j=0; j<*n; j++ ) + for( i=0; i<*m; i++ ) + c[j*(*ldc)+i]=C[i*LDC+j]; + free(A); + free(B); + free(C); + } + else if (*order == TEST_COL_MJR) + cblas_dsymm( CblasColMajor, side, uplo, *m, *n, *alpha, a, *lda, b, *ldb, + *beta, c, *ldc ); + else + cblas_dsymm( UNDEFINED, side, uplo, *m, *n, *alpha, a, *lda, b, *ldb, + *beta, c, *ldc ); +} + +void F77_dsyrk(int *order, char *uplow, char *transp, int *n, int *k, + double *alpha, double *a, int *lda, + double *beta, double *c, int *ldc ) { + + int i,j,LDA,LDC; + double *A, *C; + enum CBLAS_UPLO uplo; + enum CBLAS_TRANSPOSE trans; + + get_uplo_type(uplow,&uplo); + get_transpose_type(transp,&trans); + + if (*order == TEST_ROW_MJR) { + if (trans == CblasNoTrans) { + LDA = *k+1; + A = ( double* )malloc( (*n)*LDA*sizeof( double ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*k; j++ ) + A[i*LDA+j]=a[j*(*lda)+i]; + } + else{ + LDA = *n+1; + A = ( double* )malloc( (*k)*LDA*sizeof( double ) ); + for( i=0; i<*k; i++ ) + for( j=0; j<*n; j++ ) + A[i*LDA+j]=a[j*(*lda)+i]; + } + LDC = *n+1; + C = ( double* )malloc( (*n)*LDC*sizeof( double ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) + C[i*LDC+j]=c[j*(*ldc)+i]; + cblas_dsyrk(CblasRowMajor, uplo, trans, *n, *k, *alpha, A, LDA, *beta, + C, LDC ); + for( j=0; j<*n; j++ ) + for( i=0; i<*n; i++ ) + c[j*(*ldc)+i]=C[i*LDC+j]; + free(A); + free(C); + } + else if (*order == TEST_COL_MJR) + cblas_dsyrk(CblasColMajor, uplo, trans, *n, *k, *alpha, a, *lda, *beta, + c, *ldc ); + else + cblas_dsyrk(UNDEFINED, uplo, trans, *n, *k, *alpha, a, *lda, *beta, + c, *ldc ); +} + +void F77_dsyr2k(int *order, char *uplow, char *transp, int *n, int *k, + double *alpha, double *a, int *lda, double *b, int *ldb, + double *beta, double *c, int *ldc ) { + int i,j,LDA,LDB,LDC; + double *A, *B, *C; + enum CBLAS_UPLO uplo; + enum CBLAS_TRANSPOSE trans; + + get_uplo_type(uplow,&uplo); + get_transpose_type(transp,&trans); + + if (*order == TEST_ROW_MJR) { + if (trans == CblasNoTrans) { + LDA = *k+1; + LDB = *k+1; + A = ( double* )malloc( (*n)*LDA*sizeof( double ) ); + B = ( double* )malloc( (*n)*LDB*sizeof( double ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*k; j++ ) { + A[i*LDA+j]=a[j*(*lda)+i]; + B[i*LDB+j]=b[j*(*ldb)+i]; + } + } + else { + LDA = *n+1; + LDB = *n+1; + A = ( double* )malloc( LDA*(*k)*sizeof( double ) ); + B = ( double* )malloc( LDB*(*k)*sizeof( double ) ); + for( i=0; i<*k; i++ ) + for( j=0; j<*n; j++ ){ + A[i*LDA+j]=a[j*(*lda)+i]; + B[i*LDB+j]=b[j*(*ldb)+i]; + } + } + LDC = *n+1; + C = ( double* )malloc( (*n)*LDC*sizeof( double ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) + C[i*LDC+j]=c[j*(*ldc)+i]; + cblas_dsyr2k(CblasRowMajor, uplo, trans, *n, *k, *alpha, A, LDA, + B, LDB, *beta, C, LDC ); + for( j=0; j<*n; j++ ) + for( i=0; i<*n; i++ ) + c[j*(*ldc)+i]=C[i*LDC+j]; + free(A); + free(B); + free(C); + } + else if (*order == TEST_COL_MJR) + cblas_dsyr2k(CblasColMajor, uplo, trans, *n, *k, *alpha, a, *lda, + b, *ldb, *beta, c, *ldc ); + else + cblas_dsyr2k(UNDEFINED, uplo, trans, *n, *k, *alpha, a, *lda, + b, *ldb, *beta, c, *ldc ); +} +void F77_dtrmm(int *order, char *rtlf, char *uplow, char *transp, char *diagn, + int *m, int *n, double *alpha, double *a, int *lda, double *b, + int *ldb) { + int i,j,LDA,LDB; + double *A, *B; + enum CBLAS_SIDE side; + enum CBLAS_DIAG diag; + enum CBLAS_UPLO uplo; + enum CBLAS_TRANSPOSE trans; + + get_uplo_type(uplow,&uplo); + get_transpose_type(transp,&trans); + get_diag_type(diagn,&diag); + get_side_type(rtlf,&side); + + if (*order == TEST_ROW_MJR) { + if (side == CblasLeft) { + LDA = *m+1; + A = ( double* )malloc( (*m)*LDA*sizeof( double ) ); + for( i=0; i<*m; i++ ) + for( j=0; j<*m; j++ ) + A[i*LDA+j]=a[j*(*lda)+i]; + } + else{ + LDA = *n+1; + A = ( double* )malloc( (*n)*LDA*sizeof( double ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) + A[i*LDA+j]=a[j*(*lda)+i]; + } + LDB = *n+1; + B = ( double* )malloc( (*m)*LDB*sizeof( double ) ); + for( i=0; i<*m; i++ ) + for( j=0; j<*n; j++ ) + B[i*LDB+j]=b[j*(*ldb)+i]; + cblas_dtrmm(CblasRowMajor, side, uplo, trans, diag, *m, *n, *alpha, + A, LDA, B, LDB ); + for( j=0; j<*n; j++ ) + for( i=0; i<*m; i++ ) + b[j*(*ldb)+i]=B[i*LDB+j]; + free(A); + free(B); + } + else if (*order == TEST_COL_MJR) + cblas_dtrmm(CblasColMajor, side, uplo, trans, diag, *m, *n, *alpha, + a, *lda, b, *ldb); + else + cblas_dtrmm(UNDEFINED, side, uplo, trans, diag, *m, *n, *alpha, + a, *lda, b, *ldb); +} + +void F77_dtrsm(int *order, char *rtlf, char *uplow, char *transp, char *diagn, + int *m, int *n, double *alpha, double *a, int *lda, double *b, + int *ldb) { + int i,j,LDA,LDB; + double *A, *B; + enum CBLAS_SIDE side; + enum CBLAS_DIAG diag; + enum CBLAS_UPLO uplo; + enum CBLAS_TRANSPOSE trans; + + get_uplo_type(uplow,&uplo); + get_transpose_type(transp,&trans); + get_diag_type(diagn,&diag); + get_side_type(rtlf,&side); + + if (*order == TEST_ROW_MJR) { + if (side == CblasLeft) { + LDA = *m+1; + A = ( double* )malloc( (*m)*LDA*sizeof( double ) ); + for( i=0; i<*m; i++ ) + for( j=0; j<*m; j++ ) + A[i*LDA+j]=a[j*(*lda)+i]; + } + else{ + LDA = *n+1; + A = ( double* )malloc( (*n)*LDA*sizeof( double ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) + A[i*LDA+j]=a[j*(*lda)+i]; + } + LDB = *n+1; + B = ( double* )malloc( (*m)*LDB*sizeof( double ) ); + for( i=0; i<*m; i++ ) + for( j=0; j<*n; j++ ) + B[i*LDB+j]=b[j*(*ldb)+i]; + cblas_dtrsm(CblasRowMajor, side, uplo, trans, diag, *m, *n, *alpha, + A, LDA, B, LDB ); + for( j=0; j<*n; j++ ) + for( i=0; i<*m; i++ ) + b[j*(*ldb)+i]=B[i*LDB+j]; + free(A); + free(B); + } + else if (*order == TEST_COL_MJR) + cblas_dtrsm(CblasColMajor, side, uplo, trans, diag, *m, *n, *alpha, + a, *lda, b, *ldb); + else + cblas_dtrsm(UNDEFINED, side, uplo, trans, diag, *m, *n, *alpha, + a, *lda, b, *ldb); +} diff --git a/CBLAS/testing/c_dblat1.f b/CBLAS/testing/c_dblat1.f new file mode 100644 index 000000000..63e1ed805 --- /dev/null +++ b/CBLAS/testing/c_dblat1.f @@ -0,0 +1,728 @@ + PROGRAM DCBLAT1 +* Test program for the DOUBLE PRECISION Level 1 CBLAS. +* Based upon the original CBLAS test routine together with: +* F06EAF Example Program Text +* .. Parameters .. + INTEGER NOUT + PARAMETER (NOUT=6) +* .. Scalars in Common .. + INTEGER ICASE, INCX, INCY, MODE, N + LOGICAL PASS +* .. Local Scalars .. + DOUBLE PRECISION SFAC + INTEGER IC +* .. External Subroutines .. + EXTERNAL CHECK0, CHECK1, CHECK2, CHECK3, HEADER +* .. Common blocks .. + COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS +* .. Data statements .. + DATA SFAC/9.765625D-4/ +* .. Executable Statements .. + WRITE (NOUT,99999) + DO 20 IC = 1, 10 + ICASE = IC + CALL HEADER +* +* .. Initialize PASS, INCX, INCY, and MODE for a new case. .. +* .. the value 9999 for INCX, INCY or MODE will appear in the .. +* .. detailed output, if any, for cases that do not involve .. +* .. these parameters .. +* + PASS = .TRUE. + INCX = 9999 + INCY = 9999 + MODE = 9999 + IF (ICASE.EQ.3) THEN + CALL CHECK0(SFAC) + ELSE IF (ICASE.EQ.7 .OR. ICASE.EQ.8 .OR. ICASE.EQ.9 .OR. + + ICASE.EQ.10) THEN + CALL CHECK1(SFAC) + ELSE IF (ICASE.EQ.1 .OR. ICASE.EQ.2 .OR. ICASE.EQ.5 .OR. + + ICASE.EQ.6) THEN + CALL CHECK2(SFAC) + ELSE IF (ICASE.EQ.4) THEN + CALL CHECK3(SFAC) + END IF +* -- Print + IF (PASS) WRITE (NOUT,99998) + 20 CONTINUE + STOP +* +99999 FORMAT (' Real CBLAS Test Program Results',/1X) +99998 FORMAT (' ----- PASS -----') + END + SUBROUTINE HEADER +* .. Parameters .. + INTEGER NOUT + PARAMETER (NOUT=6) +* .. Scalars in Common .. + INTEGER ICASE, INCX, INCY, MODE, N + LOGICAL PASS +* .. Local Arrays .. + CHARACTER*15 L(10) +* .. Common blocks .. + COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS +* .. Data statements .. + DATA L(1)/'CBLAS_DDOT'/ + DATA L(2)/'CBLAS_DAXPY '/ + DATA L(3)/'CBLAS_DROTG '/ + DATA L(4)/'CBLAS_DROT '/ + DATA L(5)/'CBLAS_DCOPY '/ + DATA L(6)/'CBLAS_DSWAP '/ + DATA L(7)/'CBLAS_DNRM2 '/ + DATA L(8)/'CBLAS_DASUM '/ + DATA L(9)/'CBLAS_DSCAL '/ + DATA L(10)/'CBLAS_IDAMAX'/ +* .. Executable Statements .. + WRITE (NOUT,99999) ICASE, L(ICASE) + RETURN +* +99999 FORMAT (/' Test of subprogram number',I3,9X,A15) + END + SUBROUTINE CHECK0(SFAC) +* .. Parameters .. + INTEGER NOUT + PARAMETER (NOUT=6) +* .. Scalar Arguments .. + DOUBLE PRECISION SFAC +* .. Scalars in Common .. + INTEGER ICASE, INCX, INCY, MODE, N + LOGICAL PASS +* .. Local Scalars .. + DOUBLE PRECISION SA, SB, SC, SS + INTEGER K +* .. Local Arrays .. + DOUBLE PRECISION DA1(8), DATRUE(8), DB1(8), DBTRUE(8), DC1(8), + + DS1(8) +* .. External Subroutines .. + EXTERNAL DROTGTEST, STEST1 +* .. Common blocks .. + COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS +* .. Data statements .. + DATA DA1/0.3D0, 0.4D0, -0.3D0, -0.4D0, -0.3D0, 0.0D0, + + 0.0D0, 1.0D0/ + DATA DB1/0.4D0, 0.3D0, 0.4D0, 0.3D0, -0.4D0, 0.0D0, + + 1.0D0, 0.0D0/ + DATA DC1/0.6D0, 0.8D0, -0.6D0, 0.8D0, 0.6D0, 1.0D0, + + 0.0D0, 1.0D0/ + DATA DS1/0.8D0, 0.6D0, 0.8D0, -0.6D0, 0.8D0, 0.0D0, + + 1.0D0, 0.0D0/ + DATA DATRUE/0.5D0, 0.5D0, 0.5D0, -0.5D0, -0.5D0, + + 0.0D0, 1.0D0, 1.0D0/ + DATA DBTRUE/0.0D0, 0.6D0, 0.0D0, -0.6D0, 0.0D0, + + 0.0D0, 1.0D0, 0.0D0/ +* .. Executable Statements .. +* +* Compute true values which cannot be prestored +* in decimal notation +* + DBTRUE(1) = 1.0D0/0.6D0 + DBTRUE(3) = -1.0D0/0.6D0 + DBTRUE(5) = 1.0D0/0.6D0 +* + DO 20 K = 1, 8 +* .. Set N=K for identification in output if any .. + N = K + IF (ICASE.EQ.3) THEN +* .. DROTGTEST .. + IF (K.GT.8) GO TO 40 + SA = DA1(K) + SB = DB1(K) + CALL DROTGTEST(SA,SB,SC,SS) + CALL STEST1(SA,DATRUE(K),DATRUE(K),SFAC) + CALL STEST1(SB,DBTRUE(K),DBTRUE(K),SFAC) + CALL STEST1(SC,DC1(K),DC1(K),SFAC) + CALL STEST1(SS,DS1(K),DS1(K),SFAC) + ELSE + WRITE (NOUT,*) ' Shouldn''t be here in CHECK0' + STOP + END IF + 20 CONTINUE + 40 RETURN + END + SUBROUTINE CHECK1(SFAC) +* .. Parameters .. + INTEGER NOUT + PARAMETER (NOUT=6) +* .. Scalar Arguments .. + DOUBLE PRECISION SFAC +* .. Scalars in Common .. + INTEGER ICASE, INCX, INCY, MODE, N + LOGICAL PASS +* .. Local Scalars .. + INTEGER I, LEN, NP1 +* .. Local Arrays .. + DOUBLE PRECISION DTRUE1(5), DTRUE3(5), DTRUE5(8,5,2), DV(8,5,2), + + SA(10), STEMP(1), STRUE(8), SX(8) + INTEGER ITRUE2(5) +* .. External Functions .. + DOUBLE PRECISION DASUMTEST, DNRM2TEST + INTEGER IDAMAXTEST + EXTERNAL DASUMTEST, DNRM2TEST, IDAMAXTEST +* .. External Subroutines .. + EXTERNAL ITEST1, DSCALTEST, STEST, STEST1 +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. Common blocks .. + COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS +* .. Data statements .. + DATA SA/0.3D0, -1.0D0, 0.0D0, 1.0D0, 0.3D0, 0.3D0, + + 0.3D0, 0.3D0, 0.3D0, 0.3D0/ + DATA DV/0.1D0, 2.0D0, 2.0D0, 2.0D0, 2.0D0, 2.0D0, + + 2.0D0, 2.0D0, 0.3D0, 3.0D0, 3.0D0, 3.0D0, 3.0D0, + + 3.0D0, 3.0D0, 3.0D0, 0.3D0, -0.4D0, 4.0D0, + + 4.0D0, 4.0D0, 4.0D0, 4.0D0, 4.0D0, 0.2D0, + + -0.6D0, 0.3D0, 5.0D0, 5.0D0, 5.0D0, 5.0D0, + + 5.0D0, 0.1D0, -0.3D0, 0.5D0, -0.1D0, 6.0D0, + + 6.0D0, 6.0D0, 6.0D0, 0.1D0, 8.0D0, 8.0D0, 8.0D0, + + 8.0D0, 8.0D0, 8.0D0, 8.0D0, 0.3D0, 9.0D0, 9.0D0, + + 9.0D0, 9.0D0, 9.0D0, 9.0D0, 9.0D0, 0.3D0, 2.0D0, + + -0.4D0, 2.0D0, 2.0D0, 2.0D0, 2.0D0, 2.0D0, + + 0.2D0, 3.0D0, -0.6D0, 5.0D0, 0.3D0, 2.0D0, + + 2.0D0, 2.0D0, 0.1D0, 4.0D0, -0.3D0, 6.0D0, + + -0.5D0, 7.0D0, -0.1D0, 3.0D0/ + DATA DTRUE1/0.0D0, 0.3D0, 0.5D0, 0.7D0, 0.6D0/ + DATA DTRUE3/0.0D0, 0.3D0, 0.7D0, 1.1D0, 1.0D0/ + DATA DTRUE5/0.10D0, 2.0D0, 2.0D0, 2.0D0, 2.0D0, + + 2.0D0, 2.0D0, 2.0D0, -0.3D0, 3.0D0, 3.0D0, + + 3.0D0, 3.0D0, 3.0D0, 3.0D0, 3.0D0, 0.0D0, 0.0D0, + + 4.0D0, 4.0D0, 4.0D0, 4.0D0, 4.0D0, 4.0D0, + + 0.20D0, -0.60D0, 0.30D0, 5.0D0, 5.0D0, 5.0D0, + + 5.0D0, 5.0D0, 0.03D0, -0.09D0, 0.15D0, -0.03D0, + + 6.0D0, 6.0D0, 6.0D0, 6.0D0, 0.10D0, 8.0D0, + + 8.0D0, 8.0D0, 8.0D0, 8.0D0, 8.0D0, 8.0D0, + + 0.09D0, 9.0D0, 9.0D0, 9.0D0, 9.0D0, 9.0D0, + + 9.0D0, 9.0D0, 0.09D0, 2.0D0, -0.12D0, 2.0D0, + + 2.0D0, 2.0D0, 2.0D0, 2.0D0, 0.06D0, 3.0D0, + + -0.18D0, 5.0D0, 0.09D0, 2.0D0, 2.0D0, 2.0D0, + + 0.03D0, 4.0D0, -0.09D0, 6.0D0, -0.15D0, 7.0D0, + + -0.03D0, 3.0D0/ + DATA ITRUE2/0, 1, 2, 2, 3/ +* .. Executable Statements .. + DO 80 INCX = 1, 2 + DO 60 NP1 = 1, 5 + N = NP1 - 1 + LEN = 2*MAX(N,1) +* .. Set vector arguments .. + DO 20 I = 1, LEN + SX(I) = DV(I,NP1,INCX) + 20 CONTINUE +* + IF (ICASE.EQ.7) THEN +* .. DNRM2TEST .. + STEMP(1) = DTRUE1(NP1) + CALL STEST1(DNRM2TEST(N,SX,INCX),STEMP,STEMP,SFAC) + ELSE IF (ICASE.EQ.8) THEN +* .. DASUMTEST .. + STEMP(1) = DTRUE3(NP1) + CALL STEST1(DASUMTEST(N,SX,INCX),STEMP,STEMP,SFAC) + ELSE IF (ICASE.EQ.9) THEN +* .. DSCALTEST .. + CALL DSCALTEST(N,SA((INCX-1)*5+NP1),SX,INCX) + DO 40 I = 1, LEN + STRUE(I) = DTRUE5(I,NP1,INCX) + 40 CONTINUE + CALL STEST(LEN,SX,STRUE,STRUE,SFAC) + ELSE IF (ICASE.EQ.10) THEN +* .. IDAMAXTEST .. + CALL ITEST1(IDAMAXTEST(N,SX,INCX),ITRUE2(NP1)) + ELSE + WRITE (NOUT,*) ' Shouldn''t be here in CHECK1' + STOP + END IF + 60 CONTINUE + 80 CONTINUE + RETURN + END + SUBROUTINE CHECK2(SFAC) +* .. Parameters .. + INTEGER NOUT + PARAMETER (NOUT=6) +* .. Scalar Arguments .. + DOUBLE PRECISION SFAC +* .. Scalars in Common .. + INTEGER ICASE, INCX, INCY, MODE, N + LOGICAL PASS +* .. Local Scalars .. + DOUBLE PRECISION SA + INTEGER I, J, KI, KN, KSIZE, LENX, LENY, MX, MY +* .. Local Arrays .. + DOUBLE PRECISION DT10X(7,4,4), DT10Y(7,4,4), DT7(4,4), + + DT8(7,4,4), DX1(7), + + DY1(7), SSIZE1(4), SSIZE2(14,2), STX(7), STY(7), + + SX(7), SY(7) + INTEGER INCXS(4), INCYS(4), LENS(4,2), NS(4) +* .. External Functions .. + EXTERNAL DDOTTEST + DOUBLE PRECISION DDOTTEST +* .. External Subroutines .. + EXTERNAL DAXPYTEST, DCOPYTEST, DSWAPTEST, STEST, STEST1 +* .. Intrinsic Functions .. + INTRINSIC ABS, MIN +* .. Common blocks .. + COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS +* .. Data statements .. + DATA SA/0.3D0/ + DATA INCXS/1, 2, -2, -1/ + DATA INCYS/1, -2, 1, -2/ + DATA LENS/1, 1, 2, 4, 1, 1, 3, 7/ + DATA NS/0, 1, 2, 4/ + DATA DX1/0.6D0, 0.1D0, -0.5D0, 0.8D0, 0.9D0, -0.3D0, + + -0.4D0/ + DATA DY1/0.5D0, -0.9D0, 0.3D0, 0.7D0, -0.6D0, 0.2D0, + + 0.8D0/ + DATA DT7/0.0D0, 0.30D0, 0.21D0, 0.62D0, 0.0D0, + + 0.30D0, -0.07D0, 0.85D0, 0.0D0, 0.30D0, -0.79D0, + + -0.74D0, 0.0D0, 0.30D0, 0.33D0, 1.27D0/ + DATA DT8/0.5D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.68D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.0D0, 0.68D0, -0.87D0, 0.0D0, 0.0D0, + + 0.0D0, 0.0D0, 0.0D0, 0.68D0, -0.87D0, 0.15D0, + + 0.94D0, 0.0D0, 0.0D0, 0.0D0, 0.5D0, 0.0D0, + + 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.68D0, + + 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.35D0, -0.9D0, 0.48D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.38D0, -0.9D0, 0.57D0, 0.7D0, -0.75D0, + + 0.2D0, 0.98D0, 0.5D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.0D0, 0.0D0, 0.68D0, 0.0D0, 0.0D0, + + 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.35D0, -0.72D0, + + 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.38D0, + + -0.63D0, 0.15D0, 0.88D0, 0.0D0, 0.0D0, 0.0D0, + + 0.5D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.68D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.68D0, -0.9D0, 0.33D0, 0.0D0, 0.0D0, + + 0.0D0, 0.0D0, 0.68D0, -0.9D0, 0.33D0, 0.7D0, + + -0.75D0, 0.2D0, 1.04D0/ + DATA DT10X/0.6D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.5D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.5D0, -0.9D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.0D0, 0.5D0, -0.9D0, 0.3D0, 0.7D0, + + 0.0D0, 0.0D0, 0.0D0, 0.6D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.0D0, 0.0D0, 0.5D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.0D0, 0.0D0, 0.3D0, 0.1D0, 0.5D0, 0.0D0, + + 0.0D0, 0.0D0, 0.0D0, 0.8D0, 0.1D0, -0.6D0, + + 0.8D0, 0.3D0, -0.3D0, 0.5D0, 0.6D0, 0.0D0, + + 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.5D0, 0.0D0, + + 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, -0.9D0, + + 0.1D0, 0.5D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.7D0, + + 0.1D0, 0.3D0, 0.8D0, -0.9D0, -0.3D0, 0.5D0, + + 0.6D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.5D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.5D0, 0.3D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.5D0, 0.3D0, -0.6D0, 0.8D0, 0.0D0, 0.0D0, + + 0.0D0/ + DATA DT10Y/0.5D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.6D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.6D0, 0.1D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.6D0, 0.1D0, -0.5D0, 0.8D0, 0.0D0, + + 0.0D0, 0.0D0, 0.5D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.0D0, 0.6D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.0D0, -0.5D0, -0.9D0, 0.6D0, 0.0D0, + + 0.0D0, 0.0D0, 0.0D0, -0.4D0, -0.9D0, 0.9D0, + + 0.7D0, -0.5D0, 0.2D0, 0.6D0, 0.5D0, 0.0D0, + + 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.6D0, 0.0D0, + + 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, -0.5D0, + + 0.6D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + -0.4D0, 0.9D0, -0.5D0, 0.6D0, 0.0D0, 0.0D0, + + 0.0D0, 0.5D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.6D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.6D0, -0.9D0, 0.1D0, 0.0D0, 0.0D0, + + 0.0D0, 0.0D0, 0.6D0, -0.9D0, 0.1D0, 0.7D0, + + -0.5D0, 0.2D0, 0.8D0/ + DATA SSIZE1/0.0D0, 0.3D0, 1.6D0, 3.2D0/ + DATA SSIZE2/0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 1.17D0, 1.17D0, 1.17D0, 1.17D0, 1.17D0, + + 1.17D0, 1.17D0, 1.17D0, 1.17D0, 1.17D0, 1.17D0, + + 1.17D0, 1.17D0, 1.17D0/ +* .. Executable Statements .. +* + DO 120 KI = 1, 4 + INCX = INCXS(KI) + INCY = INCYS(KI) + MX = ABS(INCX) + MY = ABS(INCY) +* + DO 100 KN = 1, 4 + N = NS(KN) + KSIZE = MIN(2,KN) + LENX = LENS(KN,MX) + LENY = LENS(KN,MY) +* .. Initialize all argument arrays .. + DO 20 I = 1, 7 + SX(I) = DX1(I) + SY(I) = DY1(I) + 20 CONTINUE +* + IF (ICASE.EQ.1) THEN +* .. DDOTTEST .. + CALL STEST1(DDOTTEST(N,SX,INCX,SY,INCY),DT7(KN,KI), + + SSIZE1(KN),SFAC) + ELSE IF (ICASE.EQ.2) THEN +* .. DAXPYTEST .. + CALL DAXPYTEST(N,SA,SX,INCX,SY,INCY) + DO 40 J = 1, LENY + STY(J) = DT8(J,KN,KI) + 40 CONTINUE + CALL STEST(LENY,SY,STY,SSIZE2(1,KSIZE),SFAC) + ELSE IF (ICASE.EQ.5) THEN +* .. DCOPYTEST .. + DO 60 I = 1, 7 + STY(I) = DT10Y(I,KN,KI) + 60 CONTINUE + CALL DCOPYTEST(N,SX,INCX,SY,INCY) + CALL STEST(LENY,SY,STY,SSIZE2(1,1),1.0D0) + ELSE IF (ICASE.EQ.6) THEN +* .. DSWAPTEST .. + CALL DSWAPTEST(N,SX,INCX,SY,INCY) + DO 80 I = 1, 7 + STX(I) = DT10X(I,KN,KI) + STY(I) = DT10Y(I,KN,KI) + 80 CONTINUE + CALL STEST(LENX,SX,STX,SSIZE2(1,1),1.0D0) + CALL STEST(LENY,SY,STY,SSIZE2(1,1),1.0D0) + ELSE + WRITE (NOUT,*) ' Shouldn''t be here in CHECK2' + STOP + END IF + 100 CONTINUE + 120 CONTINUE + RETURN + END + SUBROUTINE CHECK3(SFAC) +* .. Parameters .. + INTEGER NOUT + PARAMETER (NOUT=6) +* .. Scalar Arguments .. + DOUBLE PRECISION SFAC +* .. Scalars in Common .. + INTEGER ICASE, INCX, INCY, MODE, N + LOGICAL PASS +* .. Local Scalars .. + DOUBLE PRECISION SC, SS + INTEGER I, K, KI, KN, KSIZE, LENX, LENY, MX, MY +* .. Local Arrays .. + DOUBLE PRECISION COPYX(5), COPYY(5), DT9X(7,4,4), DT9Y(7,4,4), + + DX1(7), DY1(7), MWPC(11), MWPS(11), MWPSTX(5), + + MWPSTY(5), MWPTX(11,5), MWPTY(11,5), MWPX(5), + + MWPY(5), SSIZE2(14,2), STX(7), STY(7), SX(7), + + SY(7) + INTEGER INCXS(4), INCYS(4), LENS(4,2), MWPINX(11), + + MWPINY(11), MWPN(11), NS(4) +* .. External Subroutines .. + EXTERNAL STEST,DROTTEST +* .. Intrinsic Functions .. + INTRINSIC ABS, MIN +* .. Common blocks .. + COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS +* .. Data statements .. + DATA INCXS/1, 2, -2, -1/ + DATA INCYS/1, -2, 1, -2/ + DATA LENS/1, 1, 2, 4, 1, 1, 3, 7/ + DATA NS/0, 1, 2, 4/ + DATA DX1/0.6D0, 0.1D0, -0.5D0, 0.8D0, 0.9D0, -0.3D0, + + -0.4D0/ + DATA DY1/0.5D0, -0.9D0, 0.3D0, 0.7D0, -0.6D0, 0.2D0, + + 0.8D0/ + DATA SC, SS/0.8D0, 0.6D0/ + DATA DT9X/0.6D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.78D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.0D0, 0.78D0, -0.46D0, 0.0D0, 0.0D0, + + 0.0D0, 0.0D0, 0.0D0, 0.78D0, -0.46D0, -0.22D0, + + 1.06D0, 0.0D0, 0.0D0, 0.0D0, 0.6D0, 0.0D0, + + 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.78D0, + + 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.66D0, 0.1D0, -0.1D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.96D0, 0.1D0, -0.76D0, 0.8D0, 0.90D0, + + -0.3D0, -0.02D0, 0.6D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.0D0, 0.0D0, 0.78D0, 0.0D0, 0.0D0, + + 0.0D0, 0.0D0, 0.0D0, 0.0D0, -0.06D0, 0.1D0, + + -0.1D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.90D0, + + 0.1D0, -0.22D0, 0.8D0, 0.18D0, -0.3D0, -0.02D0, + + 0.6D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.78D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.78D0, 0.26D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.0D0, 0.78D0, 0.26D0, -0.76D0, 1.12D0, + + 0.0D0, 0.0D0, 0.0D0/ + DATA DT9Y/0.5D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.04D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.0D0, 0.04D0, -0.78D0, 0.0D0, 0.0D0, + + 0.0D0, 0.0D0, 0.0D0, 0.04D0, -0.78D0, 0.54D0, + + 0.08D0, 0.0D0, 0.0D0, 0.0D0, 0.5D0, 0.0D0, + + 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.04D0, + + 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.7D0, + + -0.9D0, -0.12D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.64D0, -0.9D0, -0.30D0, 0.7D0, -0.18D0, 0.2D0, + + 0.28D0, 0.5D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.0D0, 0.04D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.0D0, 0.0D0, 0.7D0, -1.08D0, 0.0D0, + + 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.64D0, -1.26D0, + + 0.54D0, 0.20D0, 0.0D0, 0.0D0, 0.0D0, 0.5D0, + + 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.04D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.04D0, -0.9D0, 0.18D0, 0.0D0, 0.0D0, + + 0.0D0, 0.0D0, 0.04D0, -0.9D0, 0.18D0, 0.7D0, + + -0.18D0, 0.2D0, 0.16D0/ + DATA SSIZE2/0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, + + 0.0D0, 1.17D0, 1.17D0, 1.17D0, 1.17D0, 1.17D0, + + 1.17D0, 1.17D0, 1.17D0, 1.17D0, 1.17D0, 1.17D0, + + 1.17D0, 1.17D0, 1.17D0/ +* .. Executable Statements .. +* + DO 60 KI = 1, 4 + INCX = INCXS(KI) + INCY = INCYS(KI) + MX = ABS(INCX) + MY = ABS(INCY) +* + DO 40 KN = 1, 4 + N = NS(KN) + KSIZE = MIN(2,KN) + LENX = LENS(KN,MX) + LENY = LENS(KN,MY) +* + IF (ICASE.EQ.4) THEN +* .. DROTTEST .. + DO 20 I = 1, 7 + SX(I) = DX1(I) + SY(I) = DY1(I) + STX(I) = DT9X(I,KN,KI) + STY(I) = DT9Y(I,KN,KI) + 20 CONTINUE + CALL DROTTEST(N,SX,INCX,SY,INCY,SC,SS) + CALL STEST(LENX,SX,STX,SSIZE2(1,KSIZE),SFAC) + CALL STEST(LENY,SY,STY,SSIZE2(1,KSIZE),SFAC) + ELSE + WRITE (NOUT,*) ' Shouldn''t be here in CHECK3' + STOP + END IF + 40 CONTINUE + 60 CONTINUE +* + MWPC(1) = 1 + DO 80 I = 2, 11 + MWPC(I) = 0 + 80 CONTINUE + MWPS(1) = 0.0 + DO 100 I = 2, 6 + MWPS(I) = 1.0 + 100 CONTINUE + DO 120 I = 7, 11 + MWPS(I) = -1.0 + 120 CONTINUE + MWPINX(1) = 1 + MWPINX(2) = 1 + MWPINX(3) = 1 + MWPINX(4) = -1 + MWPINX(5) = 1 + MWPINX(6) = -1 + MWPINX(7) = 1 + MWPINX(8) = 1 + MWPINX(9) = -1 + MWPINX(10) = 1 + MWPINX(11) = -1 + MWPINY(1) = 1 + MWPINY(2) = 1 + MWPINY(3) = -1 + MWPINY(4) = -1 + MWPINY(5) = 2 + MWPINY(6) = 1 + MWPINY(7) = 1 + MWPINY(8) = -1 + MWPINY(9) = -1 + MWPINY(10) = 2 + MWPINY(11) = 1 + DO 140 I = 1, 11 + MWPN(I) = 5 + 140 CONTINUE + MWPN(5) = 3 + MWPN(10) = 3 + DO 160 I = 1, 5 + MWPX(I) = I + MWPY(I) = I + MWPTX(1,I) = I + MWPTY(1,I) = I + MWPTX(2,I) = I + MWPTY(2,I) = -I + MWPTX(3,I) = 6 - I + MWPTY(3,I) = I - 6 + MWPTX(4,I) = I + MWPTY(4,I) = -I + MWPTX(6,I) = 6 - I + MWPTY(6,I) = I - 6 + MWPTX(7,I) = -I + MWPTY(7,I) = I + MWPTX(8,I) = I - 6 + MWPTY(8,I) = 6 - I + MWPTX(9,I) = -I + MWPTY(9,I) = I + MWPTX(11,I) = I - 6 + MWPTY(11,I) = 6 - I + 160 CONTINUE + MWPTX(5,1) = 1 + MWPTX(5,2) = 3 + MWPTX(5,3) = 5 + MWPTX(5,4) = 4 + MWPTX(5,5) = 5 + MWPTY(5,1) = -1 + MWPTY(5,2) = 2 + MWPTY(5,3) = -2 + MWPTY(5,4) = 4 + MWPTY(5,5) = -3 + MWPTX(10,1) = -1 + MWPTX(10,2) = -3 + MWPTX(10,3) = -5 + MWPTX(10,4) = 4 + MWPTX(10,5) = 5 + MWPTY(10,1) = 1 + MWPTY(10,2) = 2 + MWPTY(10,3) = 2 + MWPTY(10,4) = 4 + MWPTY(10,5) = 3 + DO 200 I = 1, 11 + INCX = MWPINX(I) + INCY = MWPINY(I) + DO 180 K = 1, 5 + COPYX(K) = MWPX(K) + COPYY(K) = MWPY(K) + MWPSTX(K) = MWPTX(I,K) + MWPSTY(K) = MWPTY(I,K) + 180 CONTINUE + CALL DROTTEST(MWPN(I),COPYX,INCX,COPYY,INCY,MWPC(I),MWPS(I)) + CALL STEST(5,COPYX,MWPSTX,MWPSTX,SFAC) + CALL STEST(5,COPYY,MWPSTY,MWPSTY,SFAC) + 200 CONTINUE + RETURN + END + SUBROUTINE STEST(LEN,SCOMP,STRUE,SSIZE,SFAC) +* ********************************* STEST ************************** +* +* THIS SUBR COMPARES ARRAYS SCOMP() AND STRUE() OF LENGTH LEN TO +* SEE IF THE TERM BY TERM DIFFERENCES, MULTIPLIED BY SFAC, ARE +* NEGLIGIBLE. +* +* C. L. LAWSON, JPL, 1974 DEC 10 +* +* .. Parameters .. + INTEGER NOUT + PARAMETER (NOUT=6) +* .. Scalar Arguments .. + DOUBLE PRECISION SFAC + INTEGER LEN +* .. Array Arguments .. + DOUBLE PRECISION SCOMP(LEN), SSIZE(LEN), STRUE(LEN) +* .. Scalars in Common .. + INTEGER ICASE, INCX, INCY, MODE, N + LOGICAL PASS +* .. Local Scalars .. + DOUBLE PRECISION SD + INTEGER I +* .. External Functions .. + DOUBLE PRECISION SDIFF + EXTERNAL SDIFF +* .. Intrinsic Functions .. + INTRINSIC ABS +* .. Common blocks .. + COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS +* .. Executable Statements .. +* + DO 40 I = 1, LEN + SD = SCOMP(I) - STRUE(I) + IF (SDIFF(ABS(SSIZE(I))+ABS(SFAC*SD),ABS(SSIZE(I))).EQ.0.0D0) + + GO TO 40 +* +* HERE SCOMP(I) IS NOT CLOSE TO STRUE(I). +* + IF ( .NOT. PASS) GO TO 20 +* PRINT FAIL MESSAGE AND HEADER. + PASS = .FALSE. + WRITE (NOUT,99999) + WRITE (NOUT,99998) + 20 WRITE (NOUT,99997) ICASE, N, INCX, INCY, MODE, I, SCOMP(I), + + STRUE(I), SD, SSIZE(I) + 40 CONTINUE + RETURN +* +99999 FORMAT (' FAIL') +99998 FORMAT (/' CASE N INCX INCY MODE I ', + + ' COMP(I) TRUE(I) DIFFERENCE', + + ' SIZE(I)',/1X) +99997 FORMAT (1X,I4,I3,3I5,I3,2D36.8,2D12.4) + END + SUBROUTINE STEST1(SCOMP1,STRUE1,SSIZE,SFAC) +* ************************* STEST1 ***************************** +* +* THIS IS AN INTERFACE SUBROUTINE TO ACCOMODATE THE FORTRAN +* REQUIREMENT THAT WHEN A DUMMY ARGUMENT IS AN ARRAY, THE +* ACTUAL ARGUMENT MUST ALSO BE AN ARRAY OR AN ARRAY ELEMENT. +* +* C.L. LAWSON, JPL, 1978 DEC 6 +* +* .. Scalar Arguments .. + DOUBLE PRECISION SCOMP1, SFAC, STRUE1 +* .. Array Arguments .. + DOUBLE PRECISION SSIZE(*) +* .. Local Arrays .. + DOUBLE PRECISION SCOMP(1), STRUE(1) +* .. External Subroutines .. + EXTERNAL STEST +* .. Executable Statements .. +* + SCOMP(1) = SCOMP1 + STRUE(1) = STRUE1 + CALL STEST(1,SCOMP,STRUE,SSIZE,SFAC) +* + RETURN + END + DOUBLE PRECISION FUNCTION SDIFF(SA,SB) +* ********************************* SDIFF ************************** +* COMPUTES DIFFERENCE OF TWO NUMBERS. C. L. LAWSON, JPL 1974 FEB 15 +* +* .. Scalar Arguments .. + DOUBLE PRECISION SA, SB +* .. Executable Statements .. + SDIFF = SA - SB + RETURN + END + SUBROUTINE ITEST1(ICOMP,ITRUE) +* ********************************* ITEST1 ************************* +* +* THIS SUBROUTINE COMPARES THE VARIABLES ICOMP AND ITRUE FOR +* EQUALITY. +* C. L. LAWSON, JPL, 1974 DEC 10 +* +* .. Parameters .. + INTEGER NOUT + PARAMETER (NOUT=6) +* .. Scalar Arguments .. + INTEGER ICOMP, ITRUE +* .. Scalars in Common .. + INTEGER ICASE, INCX, INCY, MODE, N + LOGICAL PASS +* .. Local Scalars .. + INTEGER ID +* .. Common blocks .. + COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS +* .. Executable Statements .. +* + IF (ICOMP.EQ.ITRUE) GO TO 40 +* +* HERE ICOMP IS NOT EQUAL TO ITRUE. +* + IF ( .NOT. PASS) GO TO 20 +* PRINT FAIL MESSAGE AND HEADER. + PASS = .FALSE. + WRITE (NOUT,99999) + WRITE (NOUT,99998) + 20 ID = ICOMP - ITRUE + WRITE (NOUT,99997) ICASE, N, INCX, INCY, MODE, ICOMP, ITRUE, ID + 40 CONTINUE + RETURN +* +99999 FORMAT (' FAIL') +99998 FORMAT (/' CASE N INCX INCY MODE ', + + ' COMP TRUE DIFFERENCE', + + /1X) +99997 FORMAT (1X,I4,I3,3I5,2I36,I12) + END diff --git a/CBLAS/testing/c_dblat2.f b/CBLAS/testing/c_dblat2.f new file mode 100644 index 000000000..357816bd3 --- /dev/null +++ b/CBLAS/testing/c_dblat2.f @@ -0,0 +1,2907 @@ + PROGRAM DBLAT2 +* +* Test program for the DOUBLE PRECISION Level 2 Blas. +* +* The program must be driven by a short data file. The first 17 records +* of the file are read using list-directed input, the last 16 records +* are read using the format ( A12, L2 ). An annotated example of a data +* file can be obtained by deleting the first 3 characters from the +* following 33 lines: +* 'DBLAT2.SNAP' NAME OF SNAPSHOT OUTPUT FILE +* -1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0) +* F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD. +* F LOGICAL FLAG, T TO STOP ON FAILURES. +* T LOGICAL FLAG, T TO TEST ERROR EXITS. +* 2 0 TO TEST COLUMN-MAJOR, 1 TO TEST ROW-MAJOR, 2 TO TEST BOTH +* 16.0 THRESHOLD VALUE OF TEST RATIO +* 6 NUMBER OF VALUES OF N +* 0 1 2 3 5 9 VALUES OF N +* 4 NUMBER OF VALUES OF K +* 0 1 2 4 VALUES OF K +* 4 NUMBER OF VALUES OF INCX AND INCY +* 1 2 -1 -2 VALUES OF INCX AND INCY +* 3 NUMBER OF VALUES OF ALPHA +* 0.0 1.0 0.7 VALUES OF ALPHA +* 3 NUMBER OF VALUES OF BETA +* 0.0 1.0 0.9 VALUES OF BETA +* cblas_dgemv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_dgbmv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_dsymv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_dsbmv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_dspmv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_dtrmv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_dtbmv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_dtpmv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_dtrsv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_dtbsv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_dtpsv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_dger T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_dsyr T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_dspr T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_dsyr2 T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_dspr2 T PUT F FOR NO TEST. SAME COLUMNS. +* +* See: +* +* Dongarra J. J., Du Croz J. J., Hammarling S. and Hanson R. J.. +* An extended set of Fortran Basic Linear Algebra Subprograms. +* +* Technical Memoranda Nos. 41 (revision 3) and 81, Mathematics +* and Computer Science Division, Argonne National Laboratory, +* 9700 South Cass Avenue, Argonne, Illinois 60439, US. +* +* Or +* +* NAG Technical Reports TR3/87 and TR4/87, Numerical Algorithms +* Group Ltd., NAG Central Office, 256 Banbury Road, Oxford +* OX2 7DE, UK, and Numerical Algorithms Group Inc., 1101 31st +* Street, Suite 100, Downers Grove, Illinois 60515-1263, USA. +* +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + INTEGER NIN, NOUT + PARAMETER ( NIN = 5, NOUT = 6 ) + INTEGER NSUBS + PARAMETER ( NSUBS = 16 ) + DOUBLE PRECISION ZERO, HALF, ONE + PARAMETER ( ZERO = 0.0D0, HALF = 0.5D0, ONE = 1.0D0 ) + INTEGER NMAX, INCMAX + PARAMETER ( NMAX = 65, INCMAX = 2 ) + INTEGER NINMAX, NIDMAX, NKBMAX, NALMAX, NBEMAX + PARAMETER ( NINMAX = 7, NIDMAX = 9, NKBMAX = 7, + $ NALMAX = 7, NBEMAX = 7 ) +* .. Local Scalars .. + DOUBLE PRECISION EPS, ERR, THRESH + INTEGER I, ISNUM, J, N, NALF, NBET, NIDIM, NINC, NKB, + $ NTRA, LAYOUT + LOGICAL FATAL, LTESTT, REWI, SAME, SFATAL, TRACE, + $ TSTERR, CORDER, RORDER + CHARACTER*1 TRANS + CHARACTER*12 SNAMET + CHARACTER*32 SNAPS +* .. Local Arrays .. + DOUBLE PRECISION A( NMAX, NMAX ), AA( NMAX*NMAX ), + $ ALF( NALMAX ), AS( NMAX*NMAX ), BET( NBEMAX ), + $ G( NMAX ), X( NMAX ), XS( NMAX*INCMAX ), + $ XX( NMAX*INCMAX ), Y( NMAX ), + $ YS( NMAX*INCMAX ), YT( NMAX ), + $ YY( NMAX*INCMAX ), Z( 2*NMAX ) + INTEGER IDIM( NIDMAX ), INC( NINMAX ), KB( NKBMAX ) + LOGICAL LTEST( NSUBS ) + CHARACTER*12 SNAMES( NSUBS ) +* .. External Functions .. + DOUBLE PRECISION DDIFF + LOGICAL LDE + EXTERNAL DDIFF, LDE +* .. External Subroutines .. + EXTERNAL DCHK1, DCHK2, DCHK3, DCHK4, DCHK5, DCHK6, + $ CD2CHKE, DMVCH +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, MIN +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK + CHARACTER*12 SRNAMT +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK + COMMON /SRNAMC/SRNAMT +* .. Data statements .. + DATA SNAMES/'cblas_dgemv ', 'cblas_dgbmv ', + $ 'cblas_dsymv ','cblas_dsbmv ','cblas_dspmv ', + $ 'cblas_dtrmv ','cblas_dtbmv ','cblas_dtpmv ', + $ 'cblas_dtrsv ','cblas_dtbsv ','cblas_dtpsv ', + $ 'cblas_dger ','cblas_dsyr ','cblas_dspr ', + $ 'cblas_dsyr2 ','cblas_dspr2 '/ +* .. Executable Statements .. +* + NOUTC = NOUT +* +* Read name and unit number for snapshot output file and open file. +* + READ( NIN, FMT = * )SNAPS + READ( NIN, FMT = * )NTRA + TRACE = NTRA.GE.0 + IF( TRACE )THEN + OPEN( NTRA, FILE = SNAPS ) + END IF +* Read the flag that directs rewinding of the snapshot file. + READ( NIN, FMT = * )REWI + REWI = REWI.AND.TRACE +* Read the flag that directs stopping on any failure. + READ( NIN, FMT = * )SFATAL +* Read the flag that indicates whether error exits are to be tested. + READ( NIN, FMT = * )TSTERR +* Read the flag that indicates whether row-major data layout to be tested. + READ( NIN, FMT = * )LAYOUT +* Read the threshold value of the test ratio + READ( NIN, FMT = * )THRESH +* +* Read and check the parameter values for the tests. +* +* Values of N + READ( NIN, FMT = * )NIDIM + IF( NIDIM.LT.1.OR.NIDIM.GT.NIDMAX )THEN + WRITE( NOUT, FMT = 9997 )'N', NIDMAX + GO TO 230 + END IF + READ( NIN, FMT = * )( IDIM( I ), I = 1, NIDIM ) + DO 10 I = 1, NIDIM + IF( IDIM( I ).LT.0.OR.IDIM( I ).GT.NMAX )THEN + WRITE( NOUT, FMT = 9996 )NMAX + GO TO 230 + END IF + 10 CONTINUE +* Values of K + READ( NIN, FMT = * )NKB + IF( NKB.LT.1.OR.NKB.GT.NKBMAX )THEN + WRITE( NOUT, FMT = 9997 )'K', NKBMAX + GO TO 230 + END IF + READ( NIN, FMT = * )( KB( I ), I = 1, NKB ) + DO 20 I = 1, NKB + IF( KB( I ).LT.0 )THEN + WRITE( NOUT, FMT = 9995 ) + GO TO 230 + END IF + 20 CONTINUE +* Values of INCX and INCY + READ( NIN, FMT = * )NINC + IF( NINC.LT.1.OR.NINC.GT.NINMAX )THEN + WRITE( NOUT, FMT = 9997 )'INCX AND INCY', NINMAX + GO TO 230 + END IF + READ( NIN, FMT = * )( INC( I ), I = 1, NINC ) + DO 30 I = 1, NINC + IF( INC( I ).EQ.0.OR.ABS( INC( I ) ).GT.INCMAX )THEN + WRITE( NOUT, FMT = 9994 )INCMAX + GO TO 230 + END IF + 30 CONTINUE +* Values of ALPHA + READ( NIN, FMT = * )NALF + IF( NALF.LT.1.OR.NALF.GT.NALMAX )THEN + WRITE( NOUT, FMT = 9997 )'ALPHA', NALMAX + GO TO 230 + END IF + READ( NIN, FMT = * )( ALF( I ), I = 1, NALF ) +* Values of BETA + READ( NIN, FMT = * )NBET + IF( NBET.LT.1.OR.NBET.GT.NBEMAX )THEN + WRITE( NOUT, FMT = 9997 )'BETA', NBEMAX + GO TO 230 + END IF + READ( NIN, FMT = * )( BET( I ), I = 1, NBET ) +* +* Report values of parameters. +* + WRITE( NOUT, FMT = 9993 ) + WRITE( NOUT, FMT = 9992 )( IDIM( I ), I = 1, NIDIM ) + WRITE( NOUT, FMT = 9991 )( KB( I ), I = 1, NKB ) + WRITE( NOUT, FMT = 9990 )( INC( I ), I = 1, NINC ) + WRITE( NOUT, FMT = 9989 )( ALF( I ), I = 1, NALF ) + WRITE( NOUT, FMT = 9988 )( BET( I ), I = 1, NBET ) + IF( .NOT.TSTERR )THEN + WRITE( NOUT, FMT = * ) + WRITE( NOUT, FMT = 9980 ) + END IF + WRITE( NOUT, FMT = * ) + WRITE( NOUT, FMT = 9999 )THRESH + WRITE( NOUT, FMT = * ) + + RORDER = .FALSE. + CORDER = .FALSE. + IF (LAYOUT.EQ.2) THEN + RORDER = .TRUE. + CORDER = .TRUE. + WRITE( *, FMT = 10002 ) + ELSE IF (LAYOUT.EQ.1) THEN + RORDER = .TRUE. + WRITE( *, FMT = 10001 ) + ELSE IF (LAYOUT.EQ.0) THEN + CORDER = .TRUE. + WRITE( *, FMT = 10000 ) + END IF + WRITE( *, FMT = * ) +* +* Read names of subroutines and flags which indicate +* whether they are to be tested. +* + DO 40 I = 1, NSUBS + LTEST( I ) = .FALSE. + 40 CONTINUE + 50 READ( NIN, FMT = 9984, END = 80 )SNAMET, LTESTT + DO 60 I = 1, NSUBS + IF( SNAMET.EQ.SNAMES( I ) ) + $ GO TO 70 + 60 CONTINUE + WRITE( NOUT, FMT = 9986 )SNAMET + STOP + 70 LTEST( I ) = LTESTT + GO TO 50 +* + 80 CONTINUE + CLOSE ( NIN ) +* +* Compute EPS (the machine precision). +* + EPS = ONE + 90 CONTINUE + IF( DDIFF( ONE + EPS, ONE ).EQ.ZERO ) + $ GO TO 100 + EPS = HALF*EPS + GO TO 90 + 100 CONTINUE + EPS = EPS + EPS + WRITE( NOUT, FMT = 9998 )EPS +* +* Check the reliability of DMVCH using exact data. +* + N = MIN( 32, NMAX ) + DO 120 J = 1, N + DO 110 I = 1, N + A( I, J ) = MAX( I - J + 1, 0 ) + 110 CONTINUE + X( J ) = J + Y( J ) = ZERO + 120 CONTINUE + DO 130 J = 1, N + YY( J ) = J*( ( J + 1 )*J )/2 - ( ( J + 1 )*J*( J - 1 ) )/3 + 130 CONTINUE +* YY holds the exact result. On exit from DMVCH YT holds +* the result computed by DMVCH. + TRANS = 'N' + CALL DMVCH( TRANS, N, N, ONE, A, NMAX, X, 1, ZERO, Y, 1, YT, G, + $ YY, EPS, ERR, FATAL, NOUT, .TRUE. ) + SAME = LDE( YY, YT, N ) + IF( .NOT.SAME.OR.ERR.NE.ZERO )THEN + WRITE( NOUT, FMT = 9985 )TRANS, SAME, ERR + STOP + END IF + TRANS = 'T' + CALL DMVCH( TRANS, N, N, ONE, A, NMAX, X, -1, ZERO, Y, -1, YT, G, + $ YY, EPS, ERR, FATAL, NOUT, .TRUE. ) + SAME = LDE( YY, YT, N ) + IF( .NOT.SAME.OR.ERR.NE.ZERO )THEN + WRITE( NOUT, FMT = 9985 )TRANS, SAME, ERR + STOP + END IF +* +* Test each subroutine in turn. +* + DO 210 ISNUM = 1, NSUBS + WRITE( NOUT, FMT = * ) + IF( .NOT.LTEST( ISNUM ) )THEN +* Subprogram is not to be tested. + WRITE( NOUT, FMT = 9983 )SNAMES( ISNUM ) + ELSE + SRNAMT = SNAMES( ISNUM ) +* Test error exits. + IF( TSTERR )THEN + CALL CD2CHKE( SNAMES( ISNUM ) ) + WRITE( NOUT, FMT = * ) + END IF +* Test computations. + INFOT = 0 + OK = .TRUE. + FATAL = .FALSE. + GO TO ( 140, 140, 150, 150, 150, 160, 160, + $ 160, 160, 160, 160, 170, 180, 180, + $ 190, 190 )ISNUM +* Test DGEMV, 01, and DGBMV, 02. + 140 IF (CORDER) THEN + CALL DCHK1( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, + $ NBET, BET, NINC, INC, NMAX, INCMAX, A, AA, AS, + $ X, XX, XS, Y, YY, YS, YT, G, 0 ) + END IF + IF (RORDER) THEN + CALL DCHK1( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, + $ NBET, BET, NINC, INC, NMAX, INCMAX, A, AA, AS, + $ X, XX, XS, Y, YY, YS, YT, G, 1 ) + END IF + GO TO 200 +* Test DSYMV, 03, DSBMV, 04, and DSPMV, 05. + 150 IF (CORDER) THEN + CALL DCHK2( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, + $ NBET, BET, NINC, INC, NMAX, INCMAX, A, AA, AS, + $ X, XX, XS, Y, YY, YS, YT, G, 0 ) + END IF + IF (RORDER) THEN + CALL DCHK2( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, + $ NBET, BET, NINC, INC, NMAX, INCMAX, A, AA, AS, + $ X, XX, XS, Y, YY, YS, YT, G, 1 ) + END IF + GO TO 200 +* Test DTRMV, 06, DTBMV, 07, DTPMV, 08, +* DTRSV, 09, DTBSV, 10, and DTPSV, 11. + 160 IF (CORDER) THEN + CALL DCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, Y, YY, YS, YT, G, Z, + $ 0 ) + END IF + IF (RORDER) THEN + CALL DCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, Y, YY, YS, YT, G, Z, + $ 1 ) + END IF + GO TO 200 +* Test DGER, 12. + 170 IF (CORDER) THEN + CALL DCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, + $ YT, G, Z, 0 ) + END IF + IF (RORDER) THEN + CALL DCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, + $ YT, G, Z, 1 ) + END IF + GO TO 200 +* Test DSYR, 13, and DSPR, 14. + 180 IF (CORDER) THEN + CALL DCHK5( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, + $ YT, G, Z, 0 ) + END IF + IF (RORDER) THEN + CALL DCHK5( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, + $ YT, G, Z, 1 ) + END IF + GO TO 200 +* Test DSYR2, 15, and DSPR2, 16. + 190 IF (CORDER) THEN + CALL DCHK6( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, + $ YT, G, Z, 0 ) + END IF + IF (RORDER) THEN + CALL DCHK6( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, + $ YT, G, Z, 1 ) + END IF +* + 200 IF( FATAL.AND.SFATAL ) + $ GO TO 220 + END IF + 210 CONTINUE + WRITE( NOUT, FMT = 9982 ) + GO TO 240 +* + 220 CONTINUE + WRITE( NOUT, FMT = 9981 ) + GO TO 240 +* + 230 CONTINUE + WRITE( NOUT, FMT = 9987 ) +* + 240 CONTINUE + IF( TRACE ) + $ CLOSE ( NTRA ) + CLOSE ( NOUT ) + STOP +* +10002 FORMAT( ' COLUMN-MAJOR AND ROW-MAJOR DATA LAYOUTS ARE TESTED' ) +10001 FORMAT( ' ROW-MAJOR DATA LAYOUT IS TESTED' ) +10000 FORMAT( ' COLUMN-MAJOR DATA LAYOUT IS TESTED' ) + 9999 FORMAT( ' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES', + $ 'S THAN', F8.2 ) + 9998 FORMAT( ' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1P, D9.1 ) + 9997 FORMAT( ' NUMBER OF VALUES OF ', A, ' IS LESS THAN 1 OR GREATER ', + $ 'THAN ', I2 ) + 9996 FORMAT( ' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', I2 ) + 9995 FORMAT( ' VALUE OF K IS LESS THAN 0' ) + 9994 FORMAT( ' ABSOLUTE VALUE OF INCX OR INCY IS 0 OR GREATER THAN ', + $ I2 ) + 9993 FORMAT( ' TESTS OF THE DOUBLE PRECISION LEVEL 2 BLAS', //' THE F', + $ 'OLLOWING PARAMETER VALUES WILL BE USED:' ) + 9992 FORMAT( ' FOR N ', 9I6 ) + 9991 FORMAT( ' FOR K ', 7I6 ) + 9990 FORMAT( ' FOR INCX AND INCY ', 7I6 ) + 9989 FORMAT( ' FOR ALPHA ', 7F6.1 ) + 9988 FORMAT( ' FOR BETA ', 7F6.1 ) + 9987 FORMAT( ' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM', + $ /' ******* TESTS ABANDONED *******' ) + 9986 FORMAT( ' SUBPROGRAM NAME ',A12, ' NOT RECOGNIZED', /' ******* T', + $ 'ESTS ABANDONED *******' ) + 9985 FORMAT( ' ERROR IN DMVCH - IN-LINE DOT PRODUCTS ARE BEING EVALU', + $ 'ATED WRONGLY.', /' DMVCH WAS CALLED WITH TRANS = ', A1, + $ ' AND RETURNED SAME = ', L1, ' AND ERR = ', F12.3, '.', / + $ ' THIS MAY BE DUE TO FAULTS IN THE ARITHMETIC OR THE COMPILER.' + $ , /' ******* TESTS ABANDONED *******' ) + 9984 FORMAT(A12, L2 ) + 9983 FORMAT( 1X,A12, ' WAS NOT TESTED' ) + 9982 FORMAT( /' END OF TESTS' ) + 9981 FORMAT( /' ******* FATAL ERROR - TESTS ABANDONED *******' ) + 9980 FORMAT( ' ERROR-EXITS WILL NOT BE TESTED' ) +* +* End of DBLAT2. +* + END + SUBROUTINE DCHK1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, NBET, + $ BET, NINC, INC, NMAX, INCMAX, A, AA, AS, X, XX, + $ XS, Y, YY, YS, YT, G, IORDER ) +* +* Tests DGEMV and DGBMV. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + DOUBLE PRECISION ZERO, HALF + PARAMETER ( ZERO = 0.0D0, HALF = 0.5D0 ) +* .. Scalar Arguments .. + DOUBLE PRECISION EPS, THRESH + INTEGER INCMAX, NALF, NBET, NIDIM, NINC, NKB, NMAX, + $ NOUT, NTRA, IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + DOUBLE PRECISION A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), BET( NBET ), G( NMAX ), + $ X( NMAX ), XS( NMAX*INCMAX ), + $ XX( NMAX*INCMAX ), Y( NMAX ), + $ YS( NMAX*INCMAX ), YT( NMAX ), + $ YY( NMAX*INCMAX ) + INTEGER IDIM( NIDIM ), INC( NINC ), KB( NKB ) +* .. Local Scalars .. + DOUBLE PRECISION ALPHA, ALS, BETA, BLS, ERR, ERRMAX, TRANSL + INTEGER I, IA, IB, IC, IKU, IM, IN, INCX, INCXS, INCY, + $ INCYS, IX, IY, KL, KLS, KU, KUS, LAA, LDA, + $ LDAS, LX, LY, M, ML, MS, N, NARGS, NC, ND, NK, + $ NL, NS + LOGICAL BANDED, FULL, NULL, RESET, SAME, TRAN + CHARACTER*1 TRANS, TRANSS + CHARACTER*14 CTRANS + CHARACTER*3 ICH +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LDE, LDERES + EXTERNAL LDE, LDERES +* .. External Subroutines .. + EXTERNAL CDGBMV, CDGEMV, DMAKE, DMVCH +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, MIN +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICH/'NTC'/ +* .. Executable Statements .. + FULL = SNAME( 9: 9 ).EQ.'e' + BANDED = SNAME( 9: 9 ).EQ.'b' +* Define the number of arguments. + IF( FULL )THEN + NARGS = 11 + ELSE IF( BANDED )THEN + NARGS = 13 + END IF +* + NC = 0 + RESET = .TRUE. + ERRMAX = ZERO +* + DO 120 IN = 1, NIDIM + N = IDIM( IN ) + ND = N/2 + 1 +* + DO 110 IM = 1, 2 + IF( IM.EQ.1 ) + $ M = MAX( N - ND, 0 ) + IF( IM.EQ.2 ) + $ M = MIN( N + ND, NMAX ) +* + IF( BANDED )THEN + NK = NKB + ELSE + NK = 1 + END IF + DO 100 IKU = 1, NK + IF( BANDED )THEN + KU = KB( IKU ) + KL = MAX( KU - 1, 0 ) + ELSE + KU = N - 1 + KL = M - 1 + END IF +* Set LDA to 1 more than minimum value if room. + IF( BANDED )THEN + LDA = KL + KU + 1 + ELSE + LDA = M + END IF + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 100 + LAA = LDA*N + NULL = N.LE.0.OR.M.LE.0 +* +* Generate the matrix A. +* + TRANSL = ZERO + CALL DMAKE( SNAME( 8: 9 ), ' ', ' ', M, N, A, NMAX, AA, + $ LDA, KL, KU, RESET, TRANSL ) +* + DO 90 IC = 1, 3 + TRANS = ICH( IC: IC ) + IF (TRANS.EQ.'N')THEN + CTRANS = ' CblasNoTrans' + ELSE IF (TRANS.EQ.'T')THEN + CTRANS = ' CblasTrans' + ELSE + CTRANS = 'CblasConjTrans' + END IF + TRAN = TRANS.EQ.'T'.OR.TRANS.EQ.'C' +* + IF( TRAN )THEN + ML = N + NL = M + ELSE + ML = M + NL = N + END IF +* + DO 80 IX = 1, NINC + INCX = INC( IX ) + LX = ABS( INCX )*NL +* +* Generate the vector X. +* + TRANSL = HALF + CALL DMAKE( 'ge', ' ', ' ', 1, NL, X, 1, XX, + $ ABS( INCX ), 0, NL - 1, RESET, TRANSL ) + IF( NL.GT.1 )THEN + X( NL/2 ) = ZERO + XX( 1 + ABS( INCX )*( NL/2 - 1 ) ) = ZERO + END IF +* + DO 70 IY = 1, NINC + INCY = INC( IY ) + LY = ABS( INCY )*ML +* + DO 60 IA = 1, NALF + ALPHA = ALF( IA ) +* + DO 50 IB = 1, NBET + BETA = BET( IB ) +* +* Generate the vector Y. +* + TRANSL = ZERO + CALL DMAKE( 'ge', ' ', ' ', 1, ML, Y, 1, + $ YY, ABS( INCY ), 0, ML - 1, + $ RESET, TRANSL ) +* + NC = NC + 1 +* +* Save every datum before calling the +* subroutine. +* + TRANSS = TRANS + MS = M + NS = N + KLS = KL + KUS = KU + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LX + XS( I ) = XX( I ) + 20 CONTINUE + INCXS = INCX + BLS = BETA + DO 30 I = 1, LY + YS( I ) = YY( I ) + 30 CONTINUE + INCYS = INCY +* +* Call the subroutine. +* + IF( FULL )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9994 )NC, SNAME, + $ CTRANS, M, N, ALPHA, LDA, INCX, + $ BETA, INCY + IF( REWI ) + $ REWIND NTRA + CALL CDGEMV( IORDER, TRANS, M, N, + $ ALPHA, AA, LDA, XX, INCX, + $ BETA, YY, INCY ) + ELSE IF( BANDED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9995 )NC, SNAME, + $ CTRANS, M, N, KL, KU, ALPHA, LDA, + $ INCX, BETA, INCY + IF( REWI ) + $ REWIND NTRA + CALL CDGBMV( IORDER, TRANS, M, N, KL, + $ KU, ALPHA, AA, LDA, XX, + $ INCX, BETA, YY, INCY ) + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9993 ) + FATAL = .TRUE. + GO TO 130 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = TRANS.EQ.TRANSS + ISAME( 2 ) = MS.EQ.M + ISAME( 3 ) = NS.EQ.N + IF( FULL )THEN + ISAME( 4 ) = ALS.EQ.ALPHA + ISAME( 5 ) = LDE( AS, AA, LAA ) + ISAME( 6 ) = LDAS.EQ.LDA + ISAME( 7 ) = LDE( XS, XX, LX ) + ISAME( 8 ) = INCXS.EQ.INCX + ISAME( 9 ) = BLS.EQ.BETA + IF( NULL )THEN + ISAME( 10 ) = LDE( YS, YY, LY ) + ELSE + ISAME( 10 ) = LDERES( 'ge', ' ', 1, + $ ML, YS, YY, + $ ABS( INCY ) ) + END IF + ISAME( 11 ) = INCYS.EQ.INCY + ELSE IF( BANDED )THEN + ISAME( 4 ) = KLS.EQ.KL + ISAME( 5 ) = KUS.EQ.KU + ISAME( 6 ) = ALS.EQ.ALPHA + ISAME( 7 ) = LDE( AS, AA, LAA ) + ISAME( 8 ) = LDAS.EQ.LDA + ISAME( 9 ) = LDE( XS, XX, LX ) + ISAME( 10 ) = INCXS.EQ.INCX + ISAME( 11 ) = BLS.EQ.BETA + IF( NULL )THEN + ISAME( 12 ) = LDE( YS, YY, LY ) + ELSE + ISAME( 12 ) = LDERES( 'ge', ' ', 1, + $ ML, YS, YY, + $ ABS( INCY ) ) + END IF + ISAME( 13 ) = INCYS.EQ.INCY + END IF +* +* If data was incorrectly changed, report +* and return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 130 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result. +* + CALL DMVCH( TRANS, M, N, ALPHA, A, + $ NMAX, X, INCX, BETA, Y, + $ INCY, YT, G, YY, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and +* return. + IF( FATAL ) + $ GO TO 130 + ELSE +* Avoid repeating tests with M.le.0 or +* N.le.0. + GO TO 110 + END IF +* + 50 CONTINUE +* + 60 CONTINUE +* + 70 CONTINUE +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* + 110 CONTINUE +* + 120 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 140 +* + 130 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + IF( FULL )THEN + WRITE( NOUT, FMT = 9994 )NC, SNAME, CTRANS, M, N, ALPHA, LDA, + $ INCX, BETA, INCY + ELSE IF( BANDED )THEN + WRITE( NOUT, FMT = 9995 )NC, SNAME, CTRANS, M, N, KL, KU, + $ ALPHA, LDA, INCX, BETA, INCY + END IF +* + 140 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9997 FORMAT( ' ',A12, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', + $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, + $ ' - SUSPECT *******' ) + 9996 FORMAT( ' ******* ',A12, ' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( 1X, I6, ': ',A12, '(', A14, ',', 4( I3, ',' ), F4.1, + $ ', A,', I3, ',',/ 10x,'X,', I2, ',', F4.1, ', Y,', + $ I2, ') .' ) + 9994 FORMAT( 1X, I6, ': ',A12, '(', A14, ',', 2( I3, ',' ), F4.1, + $ ', A,', I3, ', X,', I2, ',', F4.1, ', Y,', I2, + $ ') .' ) + 9993 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of DCHK1. +* + END + SUBROUTINE DCHK2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, NBET, + $ BET, NINC, INC, NMAX, INCMAX, A, AA, AS, X, XX, + $ XS, Y, YY, YS, YT, G, IORDER ) +* +* Tests DSYMV, DSBMV and DSPMV. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + DOUBLE PRECISION ZERO, HALF + PARAMETER ( ZERO = 0.0D0, HALF = 0.5D0 ) +* .. Scalar Arguments .. + DOUBLE PRECISION EPS, THRESH + INTEGER INCMAX, NALF, NBET, NIDIM, NINC, NKB, NMAX, + $ NOUT, NTRA, IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + DOUBLE PRECISION A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), BET( NBET ), G( NMAX ), + $ X( NMAX ), XS( NMAX*INCMAX ), + $ XX( NMAX*INCMAX ), Y( NMAX ), + $ YS( NMAX*INCMAX ), YT( NMAX ), + $ YY( NMAX*INCMAX ) + INTEGER IDIM( NIDIM ), INC( NINC ), KB( NKB ) +* .. Local Scalars .. + DOUBLE PRECISION ALPHA, ALS, BETA, BLS, ERR, ERRMAX, TRANSL + INTEGER I, IA, IB, IC, IK, IN, INCX, INCXS, INCY, + $ INCYS, IX, IY, K, KS, LAA, LDA, LDAS, LX, LY, + $ N, NARGS, NC, NK, NS + LOGICAL BANDED, FULL, NULL, PACKED, RESET, SAME + CHARACTER*1 UPLO, UPLOS + CHARACTER*14 CUPLO + CHARACTER*2 ICH +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LDE, LDERES + EXTERNAL LDE, LDERES +* .. External Subroutines .. + EXTERNAL DMAKE, DMVCH, CDSBMV, CDSPMV, CDSYMV +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICH/'UL'/ +* .. Executable Statements .. + FULL = SNAME( 9: 9 ).EQ.'y' + BANDED = SNAME( 9: 9 ).EQ.'b' + PACKED = SNAME( 9: 9 ).EQ.'p' +* Define the number of arguments. + IF( FULL )THEN + NARGS = 10 + ELSE IF( BANDED )THEN + NARGS = 11 + ELSE IF( PACKED )THEN + NARGS = 9 + END IF +* + NC = 0 + RESET = .TRUE. + ERRMAX = ZERO +* + DO 110 IN = 1, NIDIM + N = IDIM( IN ) +* + IF( BANDED )THEN + NK = NKB + ELSE + NK = 1 + END IF + DO 100 IK = 1, NK + IF( BANDED )THEN + K = KB( IK ) + ELSE + K = N - 1 + END IF +* Set LDA to 1 more than minimum value if room. + IF( BANDED )THEN + LDA = K + 1 + ELSE + LDA = N + END IF + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 100 + IF( PACKED )THEN + LAA = ( N*( N + 1 ) )/2 + ELSE + LAA = LDA*N + END IF + NULL = N.LE.0 +* + DO 90 IC = 1, 2 + UPLO = ICH( IC: IC ) + IF (UPLO.EQ.'U')THEN + CUPLO = ' CblasUpper' + ELSE + CUPLO = ' CblasLower' + END IF +* +* Generate the matrix A. +* + TRANSL = ZERO + CALL DMAKE( SNAME( 8: 9 ), UPLO, ' ', N, N, A, NMAX, AA, + $ LDA, K, K, RESET, TRANSL ) +* + DO 80 IX = 1, NINC + INCX = INC( IX ) + LX = ABS( INCX )*N +* +* Generate the vector X. +* + TRANSL = HALF + CALL DMAKE( 'ge', ' ', ' ', 1, N, X, 1, XX, + $ ABS( INCX ), 0, N - 1, RESET, TRANSL ) + IF( N.GT.1 )THEN + X( N/2 ) = ZERO + XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO + END IF +* + DO 70 IY = 1, NINC + INCY = INC( IY ) + LY = ABS( INCY )*N +* + DO 60 IA = 1, NALF + ALPHA = ALF( IA ) +* + DO 50 IB = 1, NBET + BETA = BET( IB ) +* +* Generate the vector Y. +* + TRANSL = ZERO + CALL DMAKE( 'ge', ' ', ' ', 1, N, Y, 1, YY, + $ ABS( INCY ), 0, N - 1, RESET, + $ TRANSL ) +* + NC = NC + 1 +* +* Save every datum before calling the +* subroutine. +* + UPLOS = UPLO + NS = N + KS = K + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LX + XS( I ) = XX( I ) + 20 CONTINUE + INCXS = INCX + BLS = BETA + DO 30 I = 1, LY + YS( I ) = YY( I ) + 30 CONTINUE + INCYS = INCY +* +* Call the subroutine. +* + IF( FULL )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9993 )NC, SNAME, + $ CUPLO, N, ALPHA, LDA, INCX, BETA, INCY + IF( REWI ) + $ REWIND NTRA + CALL CDSYMV( IORDER, UPLO, N, ALPHA, AA, + $ LDA, XX, INCX, BETA, YY, INCY ) + ELSE IF( BANDED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9994 )NC, SNAME, + $ CUPLO, N, K, ALPHA, LDA, INCX, BETA, + $ INCY + IF( REWI ) + $ REWIND NTRA + CALL CDSBMV( IORDER, UPLO, N, K, ALPHA, + $ AA, LDA, XX, INCX, BETA, YY, + $ INCY ) + ELSE IF( PACKED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9995 )NC, SNAME, + $ CUPLO, N, ALPHA, INCX, BETA, INCY + IF( REWI ) + $ REWIND NTRA + CALL CDSPMV( IORDER, UPLO, N, ALPHA, AA, + $ XX, INCX, BETA, YY, INCY ) + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9992 ) + FATAL = .TRUE. + GO TO 120 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = UPLO.EQ.UPLOS + ISAME( 2 ) = NS.EQ.N + IF( FULL )THEN + ISAME( 3 ) = ALS.EQ.ALPHA + ISAME( 4 ) = LDE( AS, AA, LAA ) + ISAME( 5 ) = LDAS.EQ.LDA + ISAME( 6 ) = LDE( XS, XX, LX ) + ISAME( 7 ) = INCXS.EQ.INCX + ISAME( 8 ) = BLS.EQ.BETA + IF( NULL )THEN + ISAME( 9 ) = LDE( YS, YY, LY ) + ELSE + ISAME( 9 ) = LDERES( 'ge', ' ', 1, N, + $ YS, YY, ABS( INCY ) ) + END IF + ISAME( 10 ) = INCYS.EQ.INCY + ELSE IF( BANDED )THEN + ISAME( 3 ) = KS.EQ.K + ISAME( 4 ) = ALS.EQ.ALPHA + ISAME( 5 ) = LDE( AS, AA, LAA ) + ISAME( 6 ) = LDAS.EQ.LDA + ISAME( 7 ) = LDE( XS, XX, LX ) + ISAME( 8 ) = INCXS.EQ.INCX + ISAME( 9 ) = BLS.EQ.BETA + IF( NULL )THEN + ISAME( 10 ) = LDE( YS, YY, LY ) + ELSE + ISAME( 10 ) = LDERES( 'ge', ' ', 1, N, + $ YS, YY, ABS( INCY ) ) + END IF + ISAME( 11 ) = INCYS.EQ.INCY + ELSE IF( PACKED )THEN + ISAME( 3 ) = ALS.EQ.ALPHA + ISAME( 4 ) = LDE( AS, AA, LAA ) + ISAME( 5 ) = LDE( XS, XX, LX ) + ISAME( 6 ) = INCXS.EQ.INCX + ISAME( 7 ) = BLS.EQ.BETA + IF( NULL )THEN + ISAME( 8 ) = LDE( YS, YY, LY ) + ELSE + ISAME( 8 ) = LDERES( 'ge', ' ', 1, N, + $ YS, YY, ABS( INCY ) ) + END IF + ISAME( 9 ) = INCYS.EQ.INCY + END IF +* +* If data was incorrectly changed, report and +* return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 120 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result. +* + CALL DMVCH( 'N', N, N, ALPHA, A, NMAX, X, + $ INCX, BETA, Y, INCY, YT, G, + $ YY, EPS, ERR, FATAL, NOUT, + $ .TRUE. ) + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and +* return. + IF( FATAL ) + $ GO TO 120 + ELSE +* Avoid repeating tests with N.le.0 + GO TO 110 + END IF +* + 50 CONTINUE +* + 60 CONTINUE +* + 70 CONTINUE +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* + 110 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 130 +* + 120 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + IF( FULL )THEN + WRITE( NOUT, FMT = 9993 )NC, SNAME, CUPLO, N, ALPHA, LDA, INCX, + $ BETA, INCY + ELSE IF( BANDED )THEN + WRITE( NOUT, FMT = 9994 )NC, SNAME, CUPLO, N, K, ALPHA, LDA, + $ INCX, BETA, INCY + ELSE IF( PACKED )THEN + WRITE( NOUT, FMT = 9995 )NC, SNAME, CUPLO, N, ALPHA, INCX, + $ BETA, INCY + END IF +* + 130 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9997 FORMAT( ' ',A12, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', + $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, + $ ' - SUSPECT *******' ) + 9996 FORMAT( ' ******* ',A12, ' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( 1X, I6, ': ',A12, '(', A14, ',', I3, ',', F4.1, ', AP', + $ ', X,', I2, ',', F4.1, ', Y,', I2, ') .' ) + 9994 FORMAT( 1X, I6, ': ',A12, '(', A14, ',', 2( I3, ',' ), F4.1, + $ ', A,', I3, ', X,', I2, ',', F4.1, ', Y,', I2, + $ ') .' ) + 9993 FORMAT( 1X, I6, ': ',A12, '(', A14, ',', I3, ',', F4.1, ', A,', + $ I3, ', X,', I2, ',', F4.1, ', Y,', I2, ') .' ) + 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of DCHK2. +* + END + SUBROUTINE DCHK3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NKB, KB, NINC, INC, NMAX, + $ INCMAX, A, AA, AS, X, XX, XS, XT, G, Z, IORDER ) +* +* Tests DTRMV, DTBMV, DTPMV, DTRSV, DTBSV and DTPSV. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + DOUBLE PRECISION ZERO, HALF, ONE + PARAMETER ( ZERO = 0.0D0, HALF = 0.5D0, ONE = 1.0D0 ) +* .. Scalar Arguments .. + DOUBLE PRECISION EPS, THRESH + INTEGER INCMAX, NIDIM, NINC, NKB, NMAX, NOUT, NTRA, + $ IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + DOUBLE PRECISION A( NMAX, NMAX ), AA( NMAX*NMAX ), + $ AS( NMAX*NMAX ), G( NMAX ), X( NMAX ), + $ XS( NMAX*INCMAX ), XT( NMAX ), + $ XX( NMAX*INCMAX ), Z( NMAX ) + INTEGER IDIM( NIDIM ), INC( NINC ), KB( NKB ) +* .. Local Scalars .. + DOUBLE PRECISION ERR, ERRMAX, TRANSL + INTEGER I, ICD, ICT, ICU, IK, IN, INCX, INCXS, IX, K, + $ KS, LAA, LDA, LDAS, LX, N, NARGS, NC, NK, NS + LOGICAL BANDED, FULL, NULL, PACKED, RESET, SAME + CHARACTER*1 DIAG, DIAGS, TRANS, TRANSS, UPLO, UPLOS + CHARACTER*14 CUPLO,CTRANS,CDIAG + CHARACTER*2 ICHD, ICHU + CHARACTER*3 ICHT +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LDE, LDERES + EXTERNAL LDE, LDERES +* .. External Subroutines .. + EXTERNAL DMAKE, DMVCH, CDTBMV, CDTBSV, CDTPMV, + $ CDTPSV, CDTRMV, CDTRSV +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICHU/'UL'/, ICHT/'NTC'/, ICHD/'UN'/ +* .. Executable Statements .. + FULL = SNAME( 9: 9 ).EQ.'r' + BANDED = SNAME( 9: 9 ).EQ.'b' + PACKED = SNAME( 9: 9 ).EQ.'p' +* Define the number of arguments. + IF( FULL )THEN + NARGS = 8 + ELSE IF( BANDED )THEN + NARGS = 9 + ELSE IF( PACKED )THEN + NARGS = 7 + END IF +* + NC = 0 + RESET = .TRUE. + ERRMAX = ZERO +* Set up zero vector for DMVCH. + DO 10 I = 1, NMAX + Z( I ) = ZERO + 10 CONTINUE +* + DO 110 IN = 1, NIDIM + N = IDIM( IN ) +* + IF( BANDED )THEN + NK = NKB + ELSE + NK = 1 + END IF + DO 100 IK = 1, NK + IF( BANDED )THEN + K = KB( IK ) + ELSE + K = N - 1 + END IF +* Set LDA to 1 more than minimum value if room. + IF( BANDED )THEN + LDA = K + 1 + ELSE + LDA = N + END IF + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 100 + IF( PACKED )THEN + LAA = ( N*( N + 1 ) )/2 + ELSE + LAA = LDA*N + END IF + NULL = N.LE.0 +* + DO 90 ICU = 1, 2 + UPLO = ICHU( ICU: ICU ) + IF (UPLO.EQ.'U')THEN + CUPLO = ' CblasUpper' + ELSE + CUPLO = ' CblasLower' + END IF +* + DO 80 ICT = 1, 3 + TRANS = ICHT( ICT: ICT ) + IF (TRANS.EQ.'N')THEN + CTRANS = ' CblasNoTrans' + ELSE IF (TRANS.EQ.'T')THEN + CTRANS = ' CblasTrans' + ELSE + CTRANS = 'CblasConjTrans' + END IF +* + DO 70 ICD = 1, 2 + DIAG = ICHD( ICD: ICD ) + IF (DIAG.EQ.'N')THEN + CDIAG = ' CblasNonUnit' + ELSE + CDIAG = ' CblasUnit' + END IF +* +* Generate the matrix A. +* + TRANSL = ZERO + CALL DMAKE( SNAME( 8: 9 ), UPLO, DIAG, N, N, A, + $ NMAX, AA, LDA, K, K, RESET, TRANSL ) +* + DO 60 IX = 1, NINC + INCX = INC( IX ) + LX = ABS( INCX )*N +* +* Generate the vector X. +* + TRANSL = HALF + CALL DMAKE( 'ge', ' ', ' ', 1, N, X, 1, XX, + $ ABS( INCX ), 0, N - 1, RESET, + $ TRANSL ) + IF( N.GT.1 )THEN + X( N/2 ) = ZERO + XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO + END IF +* + NC = NC + 1 +* +* Save every datum before calling the subroutine. +* + UPLOS = UPLO + TRANSS = TRANS + DIAGS = DIAG + NS = N + KS = K + DO 20 I = 1, LAA + AS( I ) = AA( I ) + 20 CONTINUE + LDAS = LDA + DO 30 I = 1, LX + XS( I ) = XX( I ) + 30 CONTINUE + INCXS = INCX +* +* Call the subroutine. +* + IF( SNAME( 10: 11 ).EQ.'mv' )THEN + IF( FULL )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9993 )NC, SNAME, + $ CUPLO, CTRANS, CDIAG, N, LDA, INCX + IF( REWI ) + $ REWIND NTRA + CALL CDTRMV( IORDER, UPLO, TRANS, DIAG, + $ N, AA, LDA, XX, INCX ) + ELSE IF( BANDED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9994 )NC, SNAME, + $ CUPLO, CTRANS, CDIAG, N, K, LDA, INCX + IF( REWI ) + $ REWIND NTRA + CALL CDTBMV( IORDER, UPLO, TRANS, DIAG, + $ N, K, AA, LDA, XX, INCX ) + ELSE IF( PACKED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9995 )NC, SNAME, + $ CUPLO, CTRANS, CDIAG, N, INCX + IF( REWI ) + $ REWIND NTRA + CALL CDTPMV( IORDER, UPLO, TRANS, DIAG, + $ N, AA, XX, INCX ) + END IF + ELSE IF( SNAME( 10: 11 ).EQ.'sv' )THEN + IF( FULL )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9993 )NC, SNAME, + $ CUPLO, CTRANS, CDIAG, N, LDA, INCX + IF( REWI ) + $ REWIND NTRA + CALL CDTRSV( IORDER, UPLO, TRANS, DIAG, + $ N, AA, LDA, XX, INCX ) + ELSE IF( BANDED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9994 )NC, SNAME, + $ CUPLO, CTRANS, CDIAG, N, K, LDA, INCX + IF( REWI ) + $ REWIND NTRA + CALL CDTBSV( IORDER, UPLO, TRANS, DIAG, + $ N, K, AA, LDA, XX, INCX ) + ELSE IF( PACKED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9995 )NC, SNAME, + $ CUPLO, CTRANS, CDIAG, N, INCX + IF( REWI ) + $ REWIND NTRA + CALL CDTPSV( IORDER, UPLO, TRANS, DIAG, + $ N, AA, XX, INCX ) + END IF + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9992 ) + FATAL = .TRUE. + GO TO 120 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = UPLO.EQ.UPLOS + ISAME( 2 ) = TRANS.EQ.TRANSS + ISAME( 3 ) = DIAG.EQ.DIAGS + ISAME( 4 ) = NS.EQ.N + IF( FULL )THEN + ISAME( 5 ) = LDE( AS, AA, LAA ) + ISAME( 6 ) = LDAS.EQ.LDA + IF( NULL )THEN + ISAME( 7 ) = LDE( XS, XX, LX ) + ELSE + ISAME( 7 ) = LDERES( 'ge', ' ', 1, N, XS, + $ XX, ABS( INCX ) ) + END IF + ISAME( 8 ) = INCXS.EQ.INCX + ELSE IF( BANDED )THEN + ISAME( 5 ) = KS.EQ.K + ISAME( 6 ) = LDE( AS, AA, LAA ) + ISAME( 7 ) = LDAS.EQ.LDA + IF( NULL )THEN + ISAME( 8 ) = LDE( XS, XX, LX ) + ELSE + ISAME( 8 ) = LDERES( 'ge', ' ', 1, N, XS, + $ XX, ABS( INCX ) ) + END IF + ISAME( 9 ) = INCXS.EQ.INCX + ELSE IF( PACKED )THEN + ISAME( 5 ) = LDE( AS, AA, LAA ) + IF( NULL )THEN + ISAME( 6 ) = LDE( XS, XX, LX ) + ELSE + ISAME( 6 ) = LDERES( 'ge', ' ', 1, N, XS, + $ XX, ABS( INCX ) ) + END IF + ISAME( 7 ) = INCXS.EQ.INCX + END IF +* +* If data was incorrectly changed, report and +* return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 120 + END IF +* + IF( .NOT.NULL )THEN + IF( SNAME( 10: 11 ).EQ.'mv' )THEN +* +* Check the result. +* + CALL DMVCH( TRANS, N, N, ONE, A, NMAX, X, + $ INCX, ZERO, Z, INCX, XT, G, + $ XX, EPS, ERR, FATAL, NOUT, + $ .TRUE. ) + ELSE IF( SNAME( 10: 11 ).EQ.'sv' )THEN +* +* Compute approximation to original vector. +* + DO 50 I = 1, N + Z( I ) = XX( 1 + ( I - 1 )* + $ ABS( INCX ) ) + XX( 1 + ( I - 1 )*ABS( INCX ) ) + $ = X( I ) + 50 CONTINUE + CALL DMVCH( TRANS, N, N, ONE, A, NMAX, Z, + $ INCX, ZERO, X, INCX, XT, G, + $ XX, EPS, ERR, FATAL, NOUT, + $ .FALSE. ) + END IF + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and return. + IF( FATAL ) + $ GO TO 120 + ELSE +* Avoid repeating tests with N.le.0. + GO TO 110 + END IF +* + 60 CONTINUE +* + 70 CONTINUE +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* + 110 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 130 +* + 120 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + IF( FULL )THEN + WRITE( NOUT, FMT = 9993 )NC, SNAME, CUPLO, CTRANS, CDIAG, N, + $ LDA, INCX + ELSE IF( BANDED )THEN + WRITE( NOUT, FMT = 9994 )NC, SNAME, CUPLO, CTRANS, CDIAG, N, K, + $ LDA, INCX + ELSE IF( PACKED )THEN + WRITE( NOUT, FMT = 9995 )NC, SNAME, CUPLO, CTRANS, CDIAG, N, + $ INCX + END IF +* + 130 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9997 FORMAT( ' ',A12, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', + $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, + $ ' - SUSPECT *******' ) + 9996 FORMAT( ' ******* ',A12, ' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( 1X, I6, ': ',A12, '(', 3( A14,',' ),/ 10x, I3, ', AP, ', + $ 'X,', I2, ') .' ) + 9994 FORMAT( 1X, I6, ': ',A12, '(', 3( A14,',' ),/ 10x, 2( I3, ',' ), + $ ' A,', I3, ', X,', I2, ') .' ) + 9993 FORMAT( 1X, I6, ': ',A12, '(', 3( A14,',' ),/ 10x, I3, ', A,', + $ I3, ', X,', I2, ') .' ) + 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of DCHK3. +* + END + SUBROUTINE DCHK4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, NMAX, + $ INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, YT, G, + $ Z, IORDER ) +* +* Tests DGER. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + DOUBLE PRECISION ZERO, HALF, ONE + PARAMETER ( ZERO = 0.0D0, HALF = 0.5D0, ONE = 1.0D0 ) +* .. Scalar Arguments .. + DOUBLE PRECISION EPS, THRESH + INTEGER INCMAX, NALF, NIDIM, NINC, NMAX, NOUT, NTRA, + $ IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + DOUBLE PRECISION A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), G( NMAX ), X( NMAX ), + $ XS( NMAX*INCMAX ), XX( NMAX*INCMAX ), + $ Y( NMAX ), YS( NMAX*INCMAX ), YT( NMAX ), + $ YY( NMAX*INCMAX ), Z( NMAX ) + INTEGER IDIM( NIDIM ), INC( NINC ) +* .. Local Scalars .. + DOUBLE PRECISION ALPHA, ALS, ERR, ERRMAX, TRANSL + INTEGER I, IA, IM, IN, INCX, INCXS, INCY, INCYS, IX, + $ IY, J, LAA, LDA, LDAS, LX, LY, M, MS, N, NARGS, + $ NC, ND, NS + LOGICAL NULL, RESET, SAME +* .. Local Arrays .. + DOUBLE PRECISION W( 1 ) + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LDE, LDERES + EXTERNAL LDE, LDERES +* .. External Subroutines .. + EXTERNAL DGER, DMAKE, DMVCH +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, MIN +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Executable Statements .. +* Define the number of arguments. + NARGS = 9 +* + NC = 0 + RESET = .TRUE. + ERRMAX = ZERO +* + DO 120 IN = 1, NIDIM + N = IDIM( IN ) + ND = N/2 + 1 +* + DO 110 IM = 1, 2 + IF( IM.EQ.1 ) + $ M = MAX( N - ND, 0 ) + IF( IM.EQ.2 ) + $ M = MIN( N + ND, NMAX ) +* +* Set LDA to 1 more than minimum value if room. + LDA = M + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 110 + LAA = LDA*N + NULL = N.LE.0.OR.M.LE.0 +* + DO 100 IX = 1, NINC + INCX = INC( IX ) + LX = ABS( INCX )*M +* +* Generate the vector X. +* + TRANSL = HALF + CALL DMAKE( 'ge', ' ', ' ', 1, M, X, 1, XX, ABS( INCX ), + $ 0, M - 1, RESET, TRANSL ) + IF( M.GT.1 )THEN + X( M/2 ) = ZERO + XX( 1 + ABS( INCX )*( M/2 - 1 ) ) = ZERO + END IF +* + DO 90 IY = 1, NINC + INCY = INC( IY ) + LY = ABS( INCY )*N +* +* Generate the vector Y. +* + TRANSL = ZERO + CALL DMAKE( 'ge', ' ', ' ', 1, N, Y, 1, YY, + $ ABS( INCY ), 0, N - 1, RESET, TRANSL ) + IF( N.GT.1 )THEN + Y( N/2 ) = ZERO + YY( 1 + ABS( INCY )*( N/2 - 1 ) ) = ZERO + END IF +* + DO 80 IA = 1, NALF + ALPHA = ALF( IA ) +* +* Generate the matrix A. +* + TRANSL = ZERO + CALL DMAKE( SNAME( 8: 9 ), ' ', ' ', M, N, A, NMAX, + $ AA, LDA, M - 1, N - 1, RESET, TRANSL ) +* + NC = NC + 1 +* +* Save every datum before calling the subroutine. +* + MS = M + NS = N + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LX + XS( I ) = XX( I ) + 20 CONTINUE + INCXS = INCX + DO 30 I = 1, LY + YS( I ) = YY( I ) + 30 CONTINUE + INCYS = INCY +* +* Call the subroutine. +* + IF( TRACE ) + $ WRITE( NTRA, FMT = 9994 )NC, SNAME, M, N, + $ ALPHA, INCX, INCY, LDA + IF( REWI ) + $ REWIND NTRA + CALL CDGER( IORDER, M, N, ALPHA, XX, INCX, YY, + $ INCY, AA, LDA ) +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9993 ) + FATAL = .TRUE. + GO TO 140 + END IF +* +* See what data changed inside subroutine. +* + ISAME( 1 ) = MS.EQ.M + ISAME( 2 ) = NS.EQ.N + ISAME( 3 ) = ALS.EQ.ALPHA + ISAME( 4 ) = LDE( XS, XX, LX ) + ISAME( 5 ) = INCXS.EQ.INCX + ISAME( 6 ) = LDE( YS, YY, LY ) + ISAME( 7 ) = INCYS.EQ.INCY + IF( NULL )THEN + ISAME( 8 ) = LDE( AS, AA, LAA ) + ELSE + ISAME( 8 ) = LDERES( 'ge', ' ', M, N, AS, AA, + $ LDA ) + END IF + ISAME( 9 ) = LDAS.EQ.LDA +* +* If data was incorrectly changed, report and return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 140 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result column by column. +* + IF( INCX.GT.0 )THEN + DO 50 I = 1, M + Z( I ) = X( I ) + 50 CONTINUE + ELSE + DO 60 I = 1, M + Z( I ) = X( M - I + 1 ) + 60 CONTINUE + END IF + DO 70 J = 1, N + IF( INCY.GT.0 )THEN + W( 1 ) = Y( J ) + ELSE + W( 1 ) = Y( N - J + 1 ) + END IF + CALL DMVCH( 'N', M, 1, ALPHA, Z, NMAX, W, 1, + $ ONE, A( 1, J ), 1, YT, G, + $ AA( 1 + ( J - 1 )*LDA ), EPS, + $ ERR, FATAL, NOUT, .TRUE. ) + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and return. + IF( FATAL ) + $ GO TO 130 + 70 CONTINUE + ELSE +* Avoid repeating tests with M.le.0 or N.le.0. + GO TO 110 + END IF +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* + 110 CONTINUE +* + 120 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 150 +* + 130 CONTINUE + WRITE( NOUT, FMT = 9995 )J +* + 140 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + WRITE( NOUT, FMT = 9994 )NC, SNAME, M, N, ALPHA, INCX, INCY, LDA +* + 150 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9997 FORMAT( ' ',A12, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', + $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, + $ ' - SUSPECT *******' ) + 9996 FORMAT( ' ******* ',A12, ' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) + 9994 FORMAT( 1X, I6, ': ',A12, '(', 2( I3, ',' ), F4.1, ', X,', I2, + $ ', Y,', I2, ', A,', I3, ') .' ) + 9993 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of DCHK4. +* + END + SUBROUTINE DCHK5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, NMAX, + $ INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, YT, G, + $ Z, IORDER ) +* +* Tests DSYR and DSPR. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + DOUBLE PRECISION ZERO, HALF, ONE + PARAMETER ( ZERO = 0.0D0, HALF = 0.5D0, ONE = 1.0D0 ) +* .. Scalar Arguments .. + DOUBLE PRECISION EPS, THRESH + INTEGER INCMAX, NALF, NIDIM, NINC, NMAX, NOUT, NTRA, + $ IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + DOUBLE PRECISION A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), G( NMAX ), X( NMAX ), + $ XS( NMAX*INCMAX ), XX( NMAX*INCMAX ), + $ Y( NMAX ), YS( NMAX*INCMAX ), YT( NMAX ), + $ YY( NMAX*INCMAX ), Z( NMAX ) + INTEGER IDIM( NIDIM ), INC( NINC ) +* .. Local Scalars .. + DOUBLE PRECISION ALPHA, ALS, ERR, ERRMAX, TRANSL + INTEGER I, IA, IC, IN, INCX, INCXS, IX, J, JA, JJ, LAA, + $ LDA, LDAS, LJ, LX, N, NARGS, NC, NS + LOGICAL FULL, NULL, PACKED, RESET, SAME, UPPER + CHARACTER*1 UPLO, UPLOS + CHARACTER*14 CUPLO + CHARACTER*2 ICH +* .. Local Arrays .. + DOUBLE PRECISION W( 1 ) + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LDE, LDERES + EXTERNAL LDE, LDERES +* .. External Subroutines .. + EXTERNAL DMAKE, DMVCH, CDSPR, CDSYR +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICH/'UL'/ +* .. Executable Statements .. + FULL = SNAME( 9: 9 ).EQ.'y' + PACKED = SNAME( 9: 9 ).EQ.'p' +* Define the number of arguments. + IF( FULL )THEN + NARGS = 7 + ELSE IF( PACKED )THEN + NARGS = 6 + END IF +* + NC = 0 + RESET = .TRUE. + ERRMAX = ZERO +* + DO 100 IN = 1, NIDIM + N = IDIM( IN ) +* Set LDA to 1 more than minimum value if room. + LDA = N + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 100 + IF( PACKED )THEN + LAA = ( N*( N + 1 ) )/2 + ELSE + LAA = LDA*N + END IF +* + DO 90 IC = 1, 2 + UPLO = ICH( IC: IC ) + IF (UPLO.EQ.'U')THEN + CUPLO = ' CblasUpper' + ELSE + CUPLO = ' CblasLower' + END IF + UPPER = UPLO.EQ.'U' +* + DO 80 IX = 1, NINC + INCX = INC( IX ) + LX = ABS( INCX )*N +* +* Generate the vector X. +* + TRANSL = HALF + CALL DMAKE( 'ge', ' ', ' ', 1, N, X, 1, XX, ABS( INCX ), + $ 0, N - 1, RESET, TRANSL ) + IF( N.GT.1 )THEN + X( N/2 ) = ZERO + XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO + END IF +* + DO 70 IA = 1, NALF + ALPHA = ALF( IA ) + NULL = N.LE.0.OR.ALPHA.EQ.ZERO +* +* Generate the matrix A. +* + TRANSL = ZERO + CALL DMAKE( SNAME( 8: 9 ), UPLO, ' ', N, N, A, NMAX, + $ AA, LDA, N - 1, N - 1, RESET, TRANSL ) +* + NC = NC + 1 +* +* Save every datum before calling the subroutine. +* + UPLOS = UPLO + NS = N + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LX + XS( I ) = XX( I ) + 20 CONTINUE + INCXS = INCX +* +* Call the subroutine. +* + IF( FULL )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9993 )NC, SNAME, CUPLO, N, + $ ALPHA, INCX, LDA + IF( REWI ) + $ REWIND NTRA + CALL CDSYR( IORDER, UPLO, N, ALPHA, XX, INCX, + $ AA, LDA ) + ELSE IF( PACKED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9994 )NC, SNAME, CUPLO, N, + $ ALPHA, INCX + IF( REWI ) + $ REWIND NTRA + CALL CDSPR( IORDER, UPLO, N, ALPHA, XX, INCX, AA ) + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9992 ) + FATAL = .TRUE. + GO TO 120 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = UPLO.EQ.UPLOS + ISAME( 2 ) = NS.EQ.N + ISAME( 3 ) = ALS.EQ.ALPHA + ISAME( 4 ) = LDE( XS, XX, LX ) + ISAME( 5 ) = INCXS.EQ.INCX + IF( NULL )THEN + ISAME( 6 ) = LDE( AS, AA, LAA ) + ELSE + ISAME( 6 ) = LDERES( SNAME( 8: 9 ), UPLO, N, N, AS, + $ AA, LDA ) + END IF + IF( .NOT.PACKED )THEN + ISAME( 7 ) = LDAS.EQ.LDA + END IF +* +* If data was incorrectly changed, report and return. +* + SAME = .TRUE. + DO 30 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 30 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 120 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result column by column. +* + IF( INCX.GT.0 )THEN + DO 40 I = 1, N + Z( I ) = X( I ) + 40 CONTINUE + ELSE + DO 50 I = 1, N + Z( I ) = X( N - I + 1 ) + 50 CONTINUE + END IF + JA = 1 + DO 60 J = 1, N + W( 1 ) = Z( J ) + IF( UPPER )THEN + JJ = 1 + LJ = J + ELSE + JJ = J + LJ = N - J + 1 + END IF + CALL DMVCH( 'N', LJ, 1, ALPHA, Z( JJ ), LJ, W, + $ 1, ONE, A( JJ, J ), 1, YT, G, + $ AA( JA ), EPS, ERR, FATAL, NOUT, + $ .TRUE. ) + IF( FULL )THEN + IF( UPPER )THEN + JA = JA + LDA + ELSE + JA = JA + LDA + 1 + END IF + ELSE + JA = JA + LJ + END IF + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and return. + IF( FATAL ) + $ GO TO 110 + 60 CONTINUE + ELSE +* Avoid repeating tests if N.le.0. + IF( N.LE.0 ) + $ GO TO 100 + END IF +* + 70 CONTINUE +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 130 +* + 110 CONTINUE + WRITE( NOUT, FMT = 9995 )J +* + 120 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + IF( FULL )THEN + WRITE( NOUT, FMT = 9993 )NC, SNAME, CUPLO, N, ALPHA, INCX, LDA + ELSE IF( PACKED )THEN + WRITE( NOUT, FMT = 9994 )NC, SNAME, CUPLO, N, ALPHA, INCX + END IF +* + 130 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9997 FORMAT( ' ',A12, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', + $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, + $ ' - SUSPECT *******' ) + 9996 FORMAT( ' ******* ',A12, ' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) + 9994 FORMAT( 1X, I6, ': ',A12, '(', A14, ',', I3, ',', F4.1, ', X,', + $ I2, ', AP) .' ) + 9993 FORMAT( 1X, I6, ': ',A12, '(', A14, ',', I3, ',', F4.1, ', X,', + $ I2, ', A,', I3, ') .' ) + 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of DCHK5. +* + END + SUBROUTINE DCHK6( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, NMAX, + $ INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, YT, G, + $ Z, IORDER ) +* +* Tests DSYR2 and DSPR2. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + DOUBLE PRECISION ZERO, HALF, ONE + PARAMETER ( ZERO = 0.0D0, HALF = 0.5D0, ONE = 1.0D0 ) +* .. Scalar Arguments .. + DOUBLE PRECISION EPS, THRESH + INTEGER INCMAX, NALF, NIDIM, NINC, NMAX, NOUT, NTRA, + $ IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + DOUBLE PRECISION A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), G( NMAX ), X( NMAX ), + $ XS( NMAX*INCMAX ), XX( NMAX*INCMAX ), + $ Y( NMAX ), YS( NMAX*INCMAX ), YT( NMAX ), + $ YY( NMAX*INCMAX ), Z( NMAX, 2 ) + INTEGER IDIM( NIDIM ), INC( NINC ) +* .. Local Scalars .. + DOUBLE PRECISION ALPHA, ALS, ERR, ERRMAX, TRANSL + INTEGER I, IA, IC, IN, INCX, INCXS, INCY, INCYS, IX, + $ IY, J, JA, JJ, LAA, LDA, LDAS, LJ, LX, LY, N, + $ NARGS, NC, NS + LOGICAL FULL, NULL, PACKED, RESET, SAME, UPPER + CHARACTER*1 UPLO, UPLOS + CHARACTER*14 CUPLO + CHARACTER*2 ICH +* .. Local Arrays .. + DOUBLE PRECISION W( 2 ) + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LDE, LDERES + EXTERNAL LDE, LDERES +* .. External Subroutines .. + EXTERNAL DMAKE, DMVCH, CDSPR2, CDSYR2 +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICH/'UL'/ +* .. Executable Statements .. + FULL = SNAME( 9: 9 ).EQ.'y' + PACKED = SNAME( 9: 9 ).EQ.'p' +* Define the number of arguments. + IF( FULL )THEN + NARGS = 9 + ELSE IF( PACKED )THEN + NARGS = 8 + END IF +* + NC = 0 + RESET = .TRUE. + ERRMAX = ZERO +* + DO 140 IN = 1, NIDIM + N = IDIM( IN ) +* Set LDA to 1 more than minimum value if room. + LDA = N + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 140 + IF( PACKED )THEN + LAA = ( N*( N + 1 ) )/2 + ELSE + LAA = LDA*N + END IF +* + DO 130 IC = 1, 2 + UPLO = ICH( IC: IC ) + IF (UPLO.EQ.'U')THEN + CUPLO = ' CblasUpper' + ELSE + CUPLO = ' CblasLower' + END IF + UPPER = UPLO.EQ.'U' +* + DO 120 IX = 1, NINC + INCX = INC( IX ) + LX = ABS( INCX )*N +* +* Generate the vector X. +* + TRANSL = HALF + CALL DMAKE( 'ge', ' ', ' ', 1, N, X, 1, XX, ABS( INCX ), + $ 0, N - 1, RESET, TRANSL ) + IF( N.GT.1 )THEN + X( N/2 ) = ZERO + XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO + END IF +* + DO 110 IY = 1, NINC + INCY = INC( IY ) + LY = ABS( INCY )*N +* +* Generate the vector Y. +* + TRANSL = ZERO + CALL DMAKE( 'ge', ' ', ' ', 1, N, Y, 1, YY, + $ ABS( INCY ), 0, N - 1, RESET, TRANSL ) + IF( N.GT.1 )THEN + Y( N/2 ) = ZERO + YY( 1 + ABS( INCY )*( N/2 - 1 ) ) = ZERO + END IF +* + DO 100 IA = 1, NALF + ALPHA = ALF( IA ) + NULL = N.LE.0.OR.ALPHA.EQ.ZERO +* +* Generate the matrix A. +* + TRANSL = ZERO + CALL DMAKE( SNAME( 8: 9 ), UPLO, ' ', N, N, A, + $ NMAX, AA, LDA, N - 1, N - 1, RESET, + $ TRANSL ) +* + NC = NC + 1 +* +* Save every datum before calling the subroutine. +* + UPLOS = UPLO + NS = N + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LX + XS( I ) = XX( I ) + 20 CONTINUE + INCXS = INCX + DO 30 I = 1, LY + YS( I ) = YY( I ) + 30 CONTINUE + INCYS = INCY +* +* Call the subroutine. +* + IF( FULL )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9993 )NC, SNAME, CUPLO, N, + $ ALPHA, INCX, INCY, LDA + IF( REWI ) + $ REWIND NTRA + CALL CDSYR2( IORDER, UPLO, N, ALPHA, XX, INCX, + $ YY, INCY, AA, LDA ) + ELSE IF( PACKED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9994 )NC, SNAME, CUPLO, N, + $ ALPHA, INCX, INCY + IF( REWI ) + $ REWIND NTRA + CALL CDSPR2( IORDER, UPLO, N, ALPHA, XX, INCX, + $ YY, INCY, AA ) + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9992 ) + FATAL = .TRUE. + GO TO 160 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = UPLO.EQ.UPLOS + ISAME( 2 ) = NS.EQ.N + ISAME( 3 ) = ALS.EQ.ALPHA + ISAME( 4 ) = LDE( XS, XX, LX ) + ISAME( 5 ) = INCXS.EQ.INCX + ISAME( 6 ) = LDE( YS, YY, LY ) + ISAME( 7 ) = INCYS.EQ.INCY + IF( NULL )THEN + ISAME( 8 ) = LDE( AS, AA, LAA ) + ELSE + ISAME( 8 ) = LDERES( SNAME( 8: 9 ), UPLO, N, N, + $ AS, AA, LDA ) + END IF + IF( .NOT.PACKED )THEN + ISAME( 9 ) = LDAS.EQ.LDA + END IF +* +* If data was incorrectly changed, report and return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 160 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result column by column. +* + IF( INCX.GT.0 )THEN + DO 50 I = 1, N + Z( I, 1 ) = X( I ) + 50 CONTINUE + ELSE + DO 60 I = 1, N + Z( I, 1 ) = X( N - I + 1 ) + 60 CONTINUE + END IF + IF( INCY.GT.0 )THEN + DO 70 I = 1, N + Z( I, 2 ) = Y( I ) + 70 CONTINUE + ELSE + DO 80 I = 1, N + Z( I, 2 ) = Y( N - I + 1 ) + 80 CONTINUE + END IF + JA = 1 + DO 90 J = 1, N + W( 1 ) = Z( J, 2 ) + W( 2 ) = Z( J, 1 ) + IF( UPPER )THEN + JJ = 1 + LJ = J + ELSE + JJ = J + LJ = N - J + 1 + END IF + CALL DMVCH( 'N', LJ, 2, ALPHA, Z( JJ, 1 ), + $ NMAX, W, 1, ONE, A( JJ, J ), 1, + $ YT, G, AA( JA ), EPS, ERR, FATAL, + $ NOUT, .TRUE. ) + IF( FULL )THEN + IF( UPPER )THEN + JA = JA + LDA + ELSE + JA = JA + LDA + 1 + END IF + ELSE + JA = JA + LJ + END IF + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and return. + IF( FATAL ) + $ GO TO 150 + 90 CONTINUE + ELSE +* Avoid repeating tests with N.le.0. + IF( N.LE.0 ) + $ GO TO 140 + END IF +* + 100 CONTINUE +* + 110 CONTINUE +* + 120 CONTINUE +* + 130 CONTINUE +* + 140 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 170 +* + 150 CONTINUE + WRITE( NOUT, FMT = 9995 )J +* + 160 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + IF( FULL )THEN + WRITE( NOUT, FMT = 9993 )NC, SNAME, CUPLO, N, ALPHA, INCX, + $ INCY, LDA + ELSE IF( PACKED )THEN + WRITE( NOUT, FMT = 9994 )NC, SNAME, CUPLO, N, ALPHA, INCX, INCY + END IF +* + 170 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9997 FORMAT( ' ',A12, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', + $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, + $ ' - SUSPECT *******' ) + 9996 FORMAT( ' ******* ',A12, ' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) + 9994 FORMAT( 1X, I6, ': ',A12, '(', A14, ',', I3, ',', F4.1, ', X,', + $ I2, ', Y,', I2, ', AP) .' ) + 9993 FORMAT( 1X, I6, ': ',A12, '(', A14, ',', I3, ',', F4.1, ', X,', + $ I2, ', Y,', I2, ', A,', I3, ') .' ) + 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of DCHK6. +* + END + SUBROUTINE DMAKE( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, KL, + $ KU, RESET, TRANSL ) +* +* Generates values for an M by N matrix A within the bandwidth +* defined by KL and KU. +* Stores the values in the array AA in the data structure required +* by the routine, with unwanted elements set to rogue value. +* +* TYPE is 'ge', 'gb', 'sy', 'sb', 'sp', 'tr', 'tb' OR 'tp'. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 ) + DOUBLE PRECISION ROGUE + PARAMETER ( ROGUE = -1.0D10 ) +* .. Scalar Arguments .. + DOUBLE PRECISION TRANSL + INTEGER KL, KU, LDA, M, N, NMAX + LOGICAL RESET + CHARACTER*1 DIAG, UPLO + CHARACTER*2 TYPE +* .. Array Arguments .. + DOUBLE PRECISION A( NMAX, * ), AA( * ) +* .. Local Scalars .. + INTEGER I, I1, I2, I3, IBEG, IEND, IOFF, J, KK + LOGICAL GEN, LOWER, SYM, TRI, UNIT, UPPER +* .. External Functions .. + DOUBLE PRECISION DBEG + EXTERNAL DBEG +* .. Intrinsic Functions .. + INTRINSIC MAX, MIN +* .. Executable Statements .. + GEN = TYPE( 1: 1 ).EQ.'g' + SYM = TYPE( 1: 1 ).EQ.'s' + TRI = TYPE( 1: 1 ).EQ.'t' + UPPER = ( SYM.OR.TRI ).AND.UPLO.EQ.'U' + LOWER = ( SYM.OR.TRI ).AND.UPLO.EQ.'L' + UNIT = TRI.AND.DIAG.EQ.'U' +* +* Generate data in array A. +* + DO 20 J = 1, N + DO 10 I = 1, M + IF( GEN.OR.( UPPER.AND.I.LE.J ).OR.( LOWER.AND.I.GE.J ) ) + $ THEN + IF( ( I.LE.J.AND.J - I.LE.KU ).OR. + $ ( I.GE.J.AND.I - J.LE.KL ) )THEN + A( I, J ) = DBEG( RESET ) + TRANSL + ELSE + A( I, J ) = ZERO + END IF + IF( I.NE.J )THEN + IF( SYM )THEN + A( J, I ) = A( I, J ) + ELSE IF( TRI )THEN + A( J, I ) = ZERO + END IF + END IF + END IF + 10 CONTINUE + IF( TRI ) + $ A( J, J ) = A( J, J ) + ONE + IF( UNIT ) + $ A( J, J ) = ONE + 20 CONTINUE +* +* Store elements in array AS in data structure required by routine. +* + IF( TYPE.EQ.'ge' )THEN + DO 50 J = 1, N + DO 30 I = 1, M + AA( I + ( J - 1 )*LDA ) = A( I, J ) + 30 CONTINUE + DO 40 I = M + 1, LDA + AA( I + ( J - 1 )*LDA ) = ROGUE + 40 CONTINUE + 50 CONTINUE + ELSE IF( TYPE.EQ.'gb' )THEN + DO 90 J = 1, N + DO 60 I1 = 1, KU + 1 - J + AA( I1 + ( J - 1 )*LDA ) = ROGUE + 60 CONTINUE + DO 70 I2 = I1, MIN( KL + KU + 1, KU + 1 + M - J ) + AA( I2 + ( J - 1 )*LDA ) = A( I2 + J - KU - 1, J ) + 70 CONTINUE + DO 80 I3 = I2, LDA + AA( I3 + ( J - 1 )*LDA ) = ROGUE + 80 CONTINUE + 90 CONTINUE + ELSE IF( TYPE.EQ.'sy'.OR.TYPE.EQ.'tr' )THEN + DO 130 J = 1, N + IF( UPPER )THEN + IBEG = 1 + IF( UNIT )THEN + IEND = J - 1 + ELSE + IEND = J + END IF + ELSE + IF( UNIT )THEN + IBEG = J + 1 + ELSE + IBEG = J + END IF + IEND = N + END IF + DO 100 I = 1, IBEG - 1 + AA( I + ( J - 1 )*LDA ) = ROGUE + 100 CONTINUE + DO 110 I = IBEG, IEND + AA( I + ( J - 1 )*LDA ) = A( I, J ) + 110 CONTINUE + DO 120 I = IEND + 1, LDA + AA( I + ( J - 1 )*LDA ) = ROGUE + 120 CONTINUE + 130 CONTINUE + ELSE IF( TYPE.EQ.'sb'.OR.TYPE.EQ.'tb' )THEN + DO 170 J = 1, N + IF( UPPER )THEN + KK = KL + 1 + IBEG = MAX( 1, KL + 2 - J ) + IF( UNIT )THEN + IEND = KL + ELSE + IEND = KL + 1 + END IF + ELSE + KK = 1 + IF( UNIT )THEN + IBEG = 2 + ELSE + IBEG = 1 + END IF + IEND = MIN( KL + 1, 1 + M - J ) + END IF + DO 140 I = 1, IBEG - 1 + AA( I + ( J - 1 )*LDA ) = ROGUE + 140 CONTINUE + DO 150 I = IBEG, IEND + AA( I + ( J - 1 )*LDA ) = A( I + J - KK, J ) + 150 CONTINUE + DO 160 I = IEND + 1, LDA + AA( I + ( J - 1 )*LDA ) = ROGUE + 160 CONTINUE + 170 CONTINUE + ELSE IF( TYPE.EQ.'sp'.OR.TYPE.EQ.'tp' )THEN + IOFF = 0 + DO 190 J = 1, N + IF( UPPER )THEN + IBEG = 1 + IEND = J + ELSE + IBEG = J + IEND = N + END IF + DO 180 I = IBEG, IEND + IOFF = IOFF + 1 + AA( IOFF ) = A( I, J ) + IF( I.EQ.J )THEN + IF( UNIT ) + $ AA( IOFF ) = ROGUE + END IF + 180 CONTINUE + 190 CONTINUE + END IF + RETURN +* +* End of DMAKE. +* + END + SUBROUTINE DMVCH( TRANS, M, N, ALPHA, A, NMAX, X, INCX, BETA, Y, + $ INCY, YT, G, YY, EPS, ERR, FATAL, NOUT, MV ) +* +* Checks the results of the computational tests. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 ) +* .. Scalar Arguments .. + DOUBLE PRECISION ALPHA, BETA, EPS, ERR + INTEGER INCX, INCY, M, N, NMAX, NOUT + LOGICAL FATAL, MV + CHARACTER*1 TRANS +* .. Array Arguments .. + DOUBLE PRECISION A( NMAX, * ), G( * ), X( * ), Y( * ), YT( * ), + $ YY( * ) +* .. Local Scalars .. + DOUBLE PRECISION ERRI + INTEGER I, INCXL, INCYL, IY, J, JX, KX, KY, ML, NL + LOGICAL TRAN +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, SQRT +* .. Executable Statements .. + TRAN = TRANS.EQ.'T'.OR.TRANS.EQ.'C' + IF( TRAN )THEN + ML = N + NL = M + ELSE + ML = M + NL = N + END IF + IF( INCX.LT.0 )THEN + KX = NL + INCXL = -1 + ELSE + KX = 1 + INCXL = 1 + END IF + IF( INCY.LT.0 )THEN + KY = ML + INCYL = -1 + ELSE + KY = 1 + INCYL = 1 + END IF +* +* Compute expected result in YT using data in A, X and Y. +* Compute gauges in G. +* + IY = KY + DO 30 I = 1, ML + YT( IY ) = ZERO + G( IY ) = ZERO + JX = KX + IF( TRAN )THEN + DO 10 J = 1, NL + YT( IY ) = YT( IY ) + A( J, I )*X( JX ) + G( IY ) = G( IY ) + ABS( A( J, I )*X( JX ) ) + JX = JX + INCXL + 10 CONTINUE + ELSE + DO 20 J = 1, NL + YT( IY ) = YT( IY ) + A( I, J )*X( JX ) + G( IY ) = G( IY ) + ABS( A( I, J )*X( JX ) ) + JX = JX + INCXL + 20 CONTINUE + END IF + YT( IY ) = ALPHA*YT( IY ) + BETA*Y( IY ) + G( IY ) = ABS( ALPHA )*G( IY ) + ABS( BETA*Y( IY ) ) + IY = IY + INCYL + 30 CONTINUE +* +* Compute the error ratio for this result. +* + ERR = ZERO + DO 40 I = 1, ML + ERRI = ABS( YT( I ) - YY( 1 + ( I - 1 )*ABS( INCY ) ) )/EPS + IF( G( I ).NE.ZERO ) + $ ERRI = ERRI/G( I ) + ERR = MAX( ERR, ERRI ) + IF( ERR*SQRT( EPS ).GE.ONE ) + $ GO TO 50 + 40 CONTINUE +* If the loop completes, all results are at least half accurate. + GO TO 70 +* +* Report fatal error. +* + 50 FATAL = .TRUE. + WRITE( NOUT, FMT = 9999 ) + DO 60 I = 1, ML + IF( MV )THEN + WRITE( NOUT, FMT = 9998 )I, YT( I ), + $ YY( 1 + ( I - 1 )*ABS( INCY ) ) + ELSE + WRITE( NOUT, FMT = 9998 )I, + $ YY( 1 + ( I - 1 )*ABS( INCY ) ), YT(I) + END IF + 60 CONTINUE +* + 70 CONTINUE + RETURN +* + 9999 FORMAT( ' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL', + $ 'F ACCURATE *******', /' EXPECTED RESULT COMPU', + $ 'TED RESULT' ) + 9998 FORMAT( 1X, I7, 2G18.6 ) +* +* End of DMVCH. +* + END + LOGICAL FUNCTION LDE( RI, RJ, LR ) +* +* Tests if two arrays are identical. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Scalar Arguments .. + INTEGER LR +* .. Array Arguments .. + DOUBLE PRECISION RI( * ), RJ( * ) +* .. Local Scalars .. + INTEGER I +* .. Executable Statements .. + DO 10 I = 1, LR + IF( RI( I ).NE.RJ( I ) ) + $ GO TO 20 + 10 CONTINUE + LDE = .TRUE. + GO TO 30 + 20 CONTINUE + LDE = .FALSE. + 30 RETURN +* +* End of LDE. +* + END + LOGICAL FUNCTION LDERES( TYPE, UPLO, M, N, AA, AS, LDA ) +* +* Tests if selected elements in two arrays are equal. +* +* TYPE is 'ge', 'sy' or 'sp'. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Scalar Arguments .. + INTEGER LDA, M, N + CHARACTER*1 UPLO + CHARACTER*2 TYPE +* .. Array Arguments .. + DOUBLE PRECISION AA( LDA, * ), AS( LDA, * ) +* .. Local Scalars .. + INTEGER I, IBEG, IEND, J + LOGICAL UPPER +* .. Executable Statements .. + UPPER = UPLO.EQ.'U' + IF( TYPE.EQ.'ge' )THEN + DO 20 J = 1, N + DO 10 I = M + 1, LDA + IF( AA( I, J ).NE.AS( I, J ) ) + $ GO TO 70 + 10 CONTINUE + 20 CONTINUE + ELSE IF( TYPE.EQ.'sy' )THEN + DO 50 J = 1, N + IF( UPPER )THEN + IBEG = 1 + IEND = J + ELSE + IBEG = J + IEND = N + END IF + DO 30 I = 1, IBEG - 1 + IF( AA( I, J ).NE.AS( I, J ) ) + $ GO TO 70 + 30 CONTINUE + DO 40 I = IEND + 1, LDA + IF( AA( I, J ).NE.AS( I, J ) ) + $ GO TO 70 + 40 CONTINUE + 50 CONTINUE + END IF +* + 60 CONTINUE + LDERES = .TRUE. + GO TO 80 + 70 CONTINUE + LDERES = .FALSE. + 80 RETURN +* +* End of LDERES. +* + END + DOUBLE PRECISION FUNCTION DBEG( RESET ) +* +* Generates random numbers uniformly distributed between -0.5 and 0.5. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Scalar Arguments .. + LOGICAL RESET +* .. Local Scalars .. + INTEGER I, IC, MI +* .. Save statement .. + SAVE I, IC, MI +* .. Intrinsic Functions .. + INTRINSIC DBLE +* .. Executable Statements .. + IF( RESET )THEN +* Initialize local variables. + MI = 891 + I = 7 + IC = 0 + RESET = .FALSE. + END IF +* +* The sequence of values of I is bounded between 1 and 999. +* If initial I = 1,2,3,6,7 or 9, the period will be 50. +* If initial I = 4 or 8, the period will be 25. +* If initial I = 5, the period will be 10. +* IC is used to break up the period by skipping 1 value of I in 6. +* + IC = IC + 1 + 10 I = I*MI + I = I - 1000*( I/1000 ) + IF( IC.GE.5 )THEN + IC = 0 + GO TO 10 + END IF + DBEG = DBLE( I - 500 )/1001.0D0 + RETURN +* +* End of DBEG. +* + END + DOUBLE PRECISION FUNCTION DDIFF( X, Y ) +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* +* .. Scalar Arguments .. + DOUBLE PRECISION X, Y +* .. Executable Statements .. + DDIFF = X - Y + RETURN +* +* End of DDIFF. +* + END diff --git a/CBLAS/testing/c_dblat3.f b/CBLAS/testing/c_dblat3.f new file mode 100644 index 000000000..fb9acbb91 --- /dev/null +++ b/CBLAS/testing/c_dblat3.f @@ -0,0 +1,2475 @@ + PROGRAM DBLAT3 +* +* Test program for the DOUBLE PRECISION Level 3 Blas. +* +* The program must be driven by a short data file. The first 13 records +* of the file are read using list-directed input, the last 6 records +* are read using the format ( A12, L2 ). An annotated example of a data +* file can be obtained by deleting the first 3 characters from the +* following 19 lines: +* 'DBLAT3.SNAP' NAME OF SNAPSHOT OUTPUT FILE +* -1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0) +* F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD. +* F LOGICAL FLAG, T TO STOP ON FAILURES. +* T LOGICAL FLAG, T TO TEST ERROR EXITS. +* 2 0 TO TEST COLUMN-MAJOR, 1 TO TEST ROW-MAJOR, 2 TO TEST BOTH +* 16.0 THRESHOLD VALUE OF TEST RATIO +* 6 NUMBER OF VALUES OF N +* 0 1 2 3 5 9 VALUES OF N +* 3 NUMBER OF VALUES OF ALPHA +* 0.0 1.0 0.7 VALUES OF ALPHA +* 3 NUMBER OF VALUES OF BETA +* 0.0 1.0 1.3 VALUES OF BETA +* cblas_dgemm T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_dsymm T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_dtrmm T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_dtrsm T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_dsyrk T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_dsyr2k T PUT F FOR NO TEST. SAME COLUMNS. +* +* See: +* +* Dongarra J. J., Du Croz J. J., Duff I. S. and Hammarling S. +* A Set of Level 3 Basic Linear Algebra Subprograms. +* +* Technical Memorandum No.88 (Revision 1), Mathematics and +* Computer Science Division, Argonne National Laboratory, 9700 +* South Cass Avenue, Argonne, Illinois 60439, US. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + INTEGER NIN, NOUT + PARAMETER ( NIN = 5, NOUT = 6 ) + INTEGER NSUBS + PARAMETER ( NSUBS = 6 ) + DOUBLE PRECISION ZERO, HALF, ONE + PARAMETER ( ZERO = 0.0D0, HALF = 0.5D0, ONE = 1.0D0 ) + INTEGER NMAX + PARAMETER ( NMAX = 65 ) + INTEGER NIDMAX, NALMAX, NBEMAX + PARAMETER ( NIDMAX = 9, NALMAX = 7, NBEMAX = 7 ) +* .. Local Scalars .. + DOUBLE PRECISION EPS, ERR, THRESH + INTEGER I, ISNUM, J, N, NALF, NBET, NIDIM, NTRA, + $ LAYOUT + LOGICAL FATAL, LTESTT, REWI, SAME, SFATAL, TRACE, + $ TSTERR, CORDER, RORDER + CHARACTER*1 TRANSA, TRANSB + CHARACTER*12 SNAMET + CHARACTER*32 SNAPS +* .. Local Arrays .. + DOUBLE PRECISION AA( NMAX*NMAX ), AB( NMAX, 2*NMAX ), + $ ALF( NALMAX ), AS( NMAX*NMAX ), + $ BB( NMAX*NMAX ), BET( NBEMAX ), + $ BS( NMAX*NMAX ), C( NMAX, NMAX ), + $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ), + $ G( NMAX ), W( 2*NMAX ) + INTEGER IDIM( NIDMAX ) + LOGICAL LTEST( NSUBS ) + CHARACTER*12 SNAMES( NSUBS ) +* .. External Functions .. + DOUBLE PRECISION DDIFF + LOGICAL LDE + EXTERNAL DDIFF, LDE +* .. External Subroutines .. + EXTERNAL DCHK1, DCHK2, DCHK3, DCHK4, DCHK5, CD3CHKE, + $ DMMCH +* .. Intrinsic Functions .. + INTRINSIC MAX, MIN +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK + CHARACTER*12 SRNAMT +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK + COMMON /SRNAMC/SRNAMT +* .. Data statements .. + DATA SNAMES/'cblas_dgemm ', 'cblas_dsymm ', + $ 'cblas_dtrmm ', 'cblas_dtrsm ','cblas_dsyrk ', + $ 'cblas_dsyr2k'/ +* .. Executable Statements .. +* +* Read name and unit number for summary output file and open file. +* + NOUTC = NOUT +* Read name and unit number for snapshot output file and open file. +* + READ( NIN, FMT = * )SNAPS + READ( NIN, FMT = * )NTRA + TRACE = NTRA.GE.0 + IF( TRACE )THEN + OPEN( NTRA, FILE = SNAPS, STATUS = 'NEW' ) + END IF +* Read the flag that directs rewinding of the snapshot file. + READ( NIN, FMT = * )REWI + REWI = REWI.AND.TRACE +* Read the flag that directs stopping on any failure. + READ( NIN, FMT = * )SFATAL +* Read the flag that indicates whether error exits are to be tested. + READ( NIN, FMT = * )TSTERR +* Read the flag that indicates whether row-major data layout to be tested. + READ( NIN, FMT = * )LAYOUT +* Read the threshold value of the test ratio + READ( NIN, FMT = * )THRESH +* +* Read and check the parameter values for the tests. +* +* Values of N + READ( NIN, FMT = * )NIDIM + IF( NIDIM.LT.1.OR.NIDIM.GT.NIDMAX )THEN + WRITE( NOUT, FMT = 9997 )'N', NIDMAX + GO TO 220 + END IF + READ( NIN, FMT = * )( IDIM( I ), I = 1, NIDIM ) + DO 10 I = 1, NIDIM + IF( IDIM( I ).LT.0.OR.IDIM( I ).GT.NMAX )THEN + WRITE( NOUT, FMT = 9996 )NMAX + GO TO 220 + END IF + 10 CONTINUE +* Values of ALPHA + READ( NIN, FMT = * )NALF + IF( NALF.LT.1.OR.NALF.GT.NALMAX )THEN + WRITE( NOUT, FMT = 9997 )'ALPHA', NALMAX + GO TO 220 + END IF + READ( NIN, FMT = * )( ALF( I ), I = 1, NALF ) +* Values of BETA + READ( NIN, FMT = * )NBET + IF( NBET.LT.1.OR.NBET.GT.NBEMAX )THEN + WRITE( NOUT, FMT = 9997 )'BETA', NBEMAX + GO TO 220 + END IF + READ( NIN, FMT = * )( BET( I ), I = 1, NBET ) +* +* Report values of parameters. +* + WRITE( NOUT, FMT = 9995 ) + WRITE( NOUT, FMT = 9994 )( IDIM( I ), I = 1, NIDIM ) + WRITE( NOUT, FMT = 9993 )( ALF( I ), I = 1, NALF ) + WRITE( NOUT, FMT = 9992 )( BET( I ), I = 1, NBET ) + IF( .NOT.TSTERR )THEN + WRITE( NOUT, FMT = * ) + WRITE( NOUT, FMT = 9984 ) + END IF + WRITE( NOUT, FMT = * ) + WRITE( NOUT, FMT = 9999 )THRESH + WRITE( NOUT, FMT = * ) + + RORDER = .FALSE. + CORDER = .FALSE. + IF (LAYOUT.EQ.2) THEN + RORDER = .TRUE. + CORDER = .TRUE. + WRITE( *, FMT = 10002 ) + ELSE IF (LAYOUT.EQ.1) THEN + RORDER = .TRUE. + WRITE( *, FMT = 10001 ) + ELSE IF (LAYOUT.EQ.0) THEN + CORDER = .TRUE. + WRITE( *, FMT = 10000 ) + END IF + WRITE( *, FMT = * ) + +* +* Read names of subroutines and flags which indicate +* whether they are to be tested. +* + DO 20 I = 1, NSUBS + LTEST( I ) = .FALSE. + 20 CONTINUE + 30 READ( NIN, FMT = 9988, END = 60 )SNAMET, LTESTT + DO 40 I = 1, NSUBS + IF( SNAMET.EQ.SNAMES( I ) ) + $ GO TO 50 + 40 CONTINUE + WRITE( NOUT, FMT = 9990 )SNAMET + STOP + 50 LTEST( I ) = LTESTT + GO TO 30 +* + 60 CONTINUE + CLOSE ( NIN ) +* +* Compute EPS (the machine precision). +* + EPS = ONE + 70 CONTINUE + IF( DDIFF( ONE + EPS, ONE ).EQ.ZERO ) + $ GO TO 80 + EPS = HALF*EPS + GO TO 70 + 80 CONTINUE + EPS = EPS + EPS + WRITE( NOUT, FMT = 9998 )EPS +* +* Check the reliability of DMMCH using exact data. +* + N = MIN( 32, NMAX ) + DO 100 J = 1, N + DO 90 I = 1, N + AB( I, J ) = MAX( I - J + 1, 0 ) + 90 CONTINUE + AB( J, NMAX + 1 ) = J + AB( 1, NMAX + J ) = J + C( J, 1 ) = ZERO + 100 CONTINUE + DO 110 J = 1, N + CC( J ) = J*( ( J + 1 )*J )/2 - ( ( J + 1 )*J*( J - 1 ) )/3 + 110 CONTINUE +* CC holds the exact result. On exit from DMMCH CT holds +* the result computed by DMMCH. + TRANSA = 'N' + TRANSB = 'N' + CALL DMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX, + $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC, + $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. ) + SAME = LDE( CC, CT, N ) + IF( .NOT.SAME.OR.ERR.NE.ZERO )THEN + WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR + STOP + END IF + TRANSB = 'T' + CALL DMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX, + $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC, + $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. ) + SAME = LDE( CC, CT, N ) + IF( .NOT.SAME.OR.ERR.NE.ZERO )THEN + WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR + STOP + END IF + DO 120 J = 1, N + AB( J, NMAX + 1 ) = N - J + 1 + AB( 1, NMAX + J ) = N - J + 1 + 120 CONTINUE + DO 130 J = 1, N + CC( N - J + 1 ) = J*( ( J + 1 )*J )/2 - + $ ( ( J + 1 )*J*( J - 1 ) )/3 + 130 CONTINUE + TRANSA = 'T' + TRANSB = 'N' + CALL DMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX, + $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC, + $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. ) + SAME = LDE( CC, CT, N ) + IF( .NOT.SAME.OR.ERR.NE.ZERO )THEN + WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR + STOP + END IF + TRANSB = 'T' + CALL DMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX, + $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC, + $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. ) + SAME = LDE( CC, CT, N ) + IF( .NOT.SAME.OR.ERR.NE.ZERO )THEN + WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR + STOP + END IF +* +* Test each subroutine in turn. +* + DO 200 ISNUM = 1, NSUBS + WRITE( NOUT, FMT = * ) + IF( .NOT.LTEST( ISNUM ) )THEN +* Subprogram is not to be tested. + WRITE( NOUT, FMT = 9987 )SNAMES( ISNUM ) + ELSE + SRNAMT = SNAMES( ISNUM ) +* Test error exits. + IF( TSTERR )THEN + CALL CD3CHKE( SNAMES( ISNUM ) ) + WRITE( NOUT, FMT = * ) + END IF +* Test computations. + INFOT = 0 + OK = .TRUE. + FATAL = .FALSE. + GO TO ( 140, 150, 160, 160, 170, 180 )ISNUM +* Test DGEMM, 01. + 140 IF (CORDER) THEN + CALL DCHK1( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, + $ CC, CS, CT, G, 0 ) + END IF + IF (RORDER) THEN + CALL DCHK1( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, + $ CC, CS, CT, G, 1 ) + END IF + GO TO 190 +* Test DSYMM, 02. + 150 IF (CORDER) THEN + CALL DCHK2( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, + $ CC, CS, CT, G, 0 ) + END IF + IF (RORDER) THEN + CALL DCHK2( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, + $ CC, CS, CT, G, 1 ) + END IF + GO TO 190 +* Test DTRMM, 03, DTRSM, 04. + 160 IF (CORDER) THEN + CALL DCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NMAX, AB, + $ AA, AS, AB( 1, NMAX + 1 ), BB, BS, CT, G, C, + $ 0 ) + END IF + IF (RORDER) THEN + CALL DCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NMAX, AB, + $ AA, AS, AB( 1, NMAX + 1 ), BB, BS, CT, G, C, + $ 1 ) + END IF + GO TO 190 +* Test DSYRK, 05. + 170 IF (CORDER) THEN + CALL DCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, + $ CC, CS, CT, G, 0 ) + END IF + IF (RORDER) THEN + CALL DCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, + $ CC, CS, CT, G, 1 ) + END IF + GO TO 190 +* Test DSYR2K, 06. + 180 IF (CORDER) THEN + CALL DCHK5( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, BB, BS, C, CC, CS, CT, G, W, + $ 0 ) + END IF + IF (RORDER) THEN + CALL DCHK5( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, BB, BS, C, CC, CS, CT, G, W, + $ 1 ) + END IF + GO TO 190 +* + 190 IF( FATAL.AND.SFATAL ) + $ GO TO 210 + END IF + 200 CONTINUE + WRITE( NOUT, FMT = 9986 ) + GO TO 230 +* + 210 CONTINUE + WRITE( NOUT, FMT = 9985 ) + GO TO 230 +* + 220 CONTINUE + WRITE( NOUT, FMT = 9991 ) +* + 230 CONTINUE + IF( TRACE ) + $ CLOSE ( NTRA ) + CLOSE ( NOUT ) + STOP +* +10002 FORMAT( ' COLUMN-MAJOR AND ROW-MAJOR DATA LAYOUTS ARE TESTED' ) +10001 FORMAT( ' ROW-MAJOR DATA LAYOUT IS TESTED' ) +10000 FORMAT( ' COLUMN-MAJOR DATA LAYOUT IS TESTED' ) + 9999 FORMAT( ' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES', + $ 'S THAN', F8.2 ) + 9998 FORMAT( ' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1P, D9.1 ) + 9997 FORMAT( ' NUMBER OF VALUES OF ', A, ' IS LESS THAN 1 OR GREATER ', + $ 'THAN ', I2 ) + 9996 FORMAT( ' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', I2 ) + 9995 FORMAT( ' TESTS OF THE DOUBLE PRECISION LEVEL 3 BLAS', //' THE F', + $ 'OLLOWING PARAMETER VALUES WILL BE USED:' ) + 9994 FORMAT( ' FOR N ', 9I6 ) + 9993 FORMAT( ' FOR ALPHA ', 7F6.1 ) + 9992 FORMAT( ' FOR BETA ', 7F6.1 ) + 9991 FORMAT( ' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM', + $ /' ******* TESTS ABANDONED *******' ) + 9990 FORMAT( ' SUBPROGRAM NAME ', A12,' NOT RECOGNIZED', /' ******* T', + $ 'ESTS ABANDONED *******' ) + 9989 FORMAT( ' ERROR IN DMMCH - IN-LINE DOT PRODUCTS ARE BEING EVALU', + $ 'ATED WRONGLY.', /' DMMCH WAS CALLED WITH TRANSA = ', A1, + $ ' AND TRANSB = ', A1, /' AND RETURNED SAME = ', L1, ' AND ', + $ 'ERR = ', F12.3, '.', /' THIS MAY BE DUE TO FAULTS IN THE ', + $ 'ARITHMETIC OR THE COMPILER.', /' ******* TESTS ABANDONED ', + $ '*******' ) + 9988 FORMAT( A12,L2 ) + 9987 FORMAT( 1X, A12,' WAS NOT TESTED' ) + 9986 FORMAT( /' END OF TESTS' ) + 9985 FORMAT( /' ******* FATAL ERROR - TESTS ABANDONED *******' ) + 9984 FORMAT( ' ERROR-EXITS WILL NOT BE TESTED' ) +* +* End of DBLAT3. +* + END + SUBROUTINE DCHK1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX, + $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G, IORDER) +* +* Tests DGEMM. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0D0 ) +* .. Scalar Arguments .. + DOUBLE PRECISION EPS, THRESH + INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + DOUBLE PRECISION A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), B( NMAX, NMAX ), + $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ), + $ C( NMAX, NMAX ), CC( NMAX*NMAX ), + $ CS( NMAX*NMAX ), CT( NMAX ), G( NMAX ) + INTEGER IDIM( NIDIM ) +* .. Local Scalars .. + DOUBLE PRECISION ALPHA, ALS, BETA, BLS, ERR, ERRMAX + INTEGER I, IA, IB, ICA, ICB, IK, IM, IN, K, KS, LAA, + $ LBB, LCC, LDA, LDAS, LDB, LDBS, LDC, LDCS, M, + $ MA, MB, MS, N, NA, NARGS, NB, NC, NS + LOGICAL NULL, RESET, SAME, TRANA, TRANB + CHARACTER*1 TRANAS, TRANBS, TRANSA, TRANSB + CHARACTER*3 ICH +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LDE, LDERES + EXTERNAL LDE, LDERES +* .. External Subroutines .. + EXTERNAL CDGEMM, DMAKE, DMMCH +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICH/'NTC'/ +* .. Executable Statements .. +* + NARGS = 13 + NC = 0 + RESET = .TRUE. + ERRMAX = ZERO +* + DO 110 IM = 1, NIDIM + M = IDIM( IM ) +* + DO 100 IN = 1, NIDIM + N = IDIM( IN ) +* Set LDC to 1 more than minimum value if room. + LDC = M + IF( LDC.LT.NMAX ) + $ LDC = LDC + 1 +* Skip tests if not enough room. + IF( LDC.GT.NMAX ) + $ GO TO 100 + LCC = LDC*N + NULL = N.LE.0.OR.M.LE.0 +* + DO 90 IK = 1, NIDIM + K = IDIM( IK ) +* + DO 80 ICA = 1, 3 + TRANSA = ICH( ICA: ICA ) + TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C' +* + IF( TRANA )THEN + MA = K + NA = M + ELSE + MA = M + NA = K + END IF +* Set LDA to 1 more than minimum value if room. + LDA = MA + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 80 + LAA = LDA*NA +* +* Generate the matrix A. +* + CALL DMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA, + $ RESET, ZERO ) +* + DO 70 ICB = 1, 3 + TRANSB = ICH( ICB: ICB ) + TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C' +* + IF( TRANB )THEN + MB = N + NB = K + ELSE + MB = K + NB = N + END IF +* Set LDB to 1 more than minimum value if room. + LDB = MB + IF( LDB.LT.NMAX ) + $ LDB = LDB + 1 +* Skip tests if not enough room. + IF( LDB.GT.NMAX ) + $ GO TO 70 + LBB = LDB*NB +* +* Generate the matrix B. +* + CALL DMAKE( 'GE', ' ', ' ', MB, NB, B, NMAX, BB, + $ LDB, RESET, ZERO ) +* + DO 60 IA = 1, NALF + ALPHA = ALF( IA ) +* + DO 50 IB = 1, NBET + BETA = BET( IB ) +* +* Generate the matrix C. +* + CALL DMAKE( 'GE', ' ', ' ', M, N, C, NMAX, + $ CC, LDC, RESET, ZERO ) +* + NC = NC + 1 +* +* Save every datum before calling the +* subroutine. +* + TRANAS = TRANSA + TRANBS = TRANSB + MS = M + NS = N + KS = K + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LBB + BS( I ) = BB( I ) + 20 CONTINUE + LDBS = LDB + BLS = BETA + DO 30 I = 1, LCC + CS( I ) = CC( I ) + 30 CONTINUE + LDCS = LDC +* +* Call the subroutine. +* + IF( TRACE ) + $ CALL DPRCN1(NTRA, NC, SNAME, IORDER, + $ TRANSA, TRANSB, M, N, K, ALPHA, LDA, + $ LDB, BETA, LDC) + IF( REWI ) + $ REWIND NTRA + CALL CDGEMM( IORDER, TRANSA, TRANSB, M, N, + $ K, ALPHA, AA, LDA, BB, LDB, + $ BETA, CC, LDC ) +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9994 ) + FATAL = .TRUE. + GO TO 120 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = TRANSA.EQ.TRANAS + ISAME( 2 ) = TRANSB.EQ.TRANBS + ISAME( 3 ) = MS.EQ.M + ISAME( 4 ) = NS.EQ.N + ISAME( 5 ) = KS.EQ.K + ISAME( 6 ) = ALS.EQ.ALPHA + ISAME( 7 ) = LDE( AS, AA, LAA ) + ISAME( 8 ) = LDAS.EQ.LDA + ISAME( 9 ) = LDE( BS, BB, LBB ) + ISAME( 10 ) = LDBS.EQ.LDB + ISAME( 11 ) = BLS.EQ.BETA + IF( NULL )THEN + ISAME( 12 ) = LDE( CS, CC, LCC ) + ELSE + ISAME( 12 ) = LDERES( 'GE', ' ', M, N, CS, + $ CC, LDC ) + END IF + ISAME( 13 ) = LDCS.EQ.LDC +* +* If data was incorrectly changed, report +* and return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 120 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result. +* + CALL DMMCH( TRANSA, TRANSB, M, N, K, + $ ALPHA, A, NMAX, B, NMAX, BETA, + $ C, NMAX, CT, G, CC, LDC, EPS, + $ ERR, FATAL, NOUT, .TRUE. ) + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and +* return. + IF( FATAL ) + $ GO TO 120 + END IF +* + 50 CONTINUE +* + 60 CONTINUE +* + 70 CONTINUE +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* + 110 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 130 +* + 120 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + CALL DPRCN1(NOUT, NC, SNAME, IORDER, TRANSA, TRANSB, + $ M, N, K, ALPHA, LDA, LDB, BETA, LDC) +* + 130 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9996 FORMAT( ' ******* ', A12,' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( 1X, I6, ': ', A12,'(''', A1, ''',''', A1, ''',', + $ 3( I3, ',' ), F4.1, ', A,', I3, ', B,', I3, ',', F4.1, ', ', + $ 'C,', I3, ').' ) + 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of DCHK1. +* + END + SUBROUTINE DPRCN1(NOUT, NC, SNAME, IORDER, TRANSA, TRANSB, M, N, + $ K, ALPHA, LDA, LDB, BETA, LDC) + INTEGER NOUT, NC, IORDER, M, N, K, LDA, LDB, LDC + DOUBLE PRECISION ALPHA, BETA + CHARACTER*1 TRANSA, TRANSB + CHARACTER*12 SNAME + CHARACTER*14 CRC, CTA,CTB + + IF (TRANSA.EQ.'N')THEN + CTA = ' CblasNoTrans' + ELSE IF (TRANSA.EQ.'T')THEN + CTA = ' CblasTrans' + ELSE + CTA = 'CblasConjTrans' + END IF + IF (TRANSB.EQ.'N')THEN + CTB = ' CblasNoTrans' + ELSE IF (TRANSB.EQ.'T')THEN + CTB = ' CblasTrans' + ELSE + CTB = 'CblasConjTrans' + END IF + IF (IORDER.EQ.1)THEN + CRC = ' CblasRowMajor' + ELSE + CRC = ' CblasColMajor' + END IF + WRITE(NOUT, FMT = 9995)NC,SNAME,CRC, CTA,CTB + WRITE(NOUT, FMT = 9994)M, N, K, ALPHA, LDA, LDB, BETA, LDC + + 9995 FORMAT( 1X, I6, ': ', A12,'(', A14, ',', A14, ',', A14, ',') + 9994 FORMAT( 20X, 3( I3, ',' ), F4.1, ', A,', I3, ', B,', I3, ',', + $ F4.1, ', ', 'C,', I3, ').' ) + END +* + SUBROUTINE DCHK2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX, + $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G, IORDER) +* +* Tests DSYMM. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0D0 ) +* .. Scalar Arguments .. + DOUBLE PRECISION EPS, THRESH + INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + DOUBLE PRECISION A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), B( NMAX, NMAX ), + $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ), + $ C( NMAX, NMAX ), CC( NMAX*NMAX ), + $ CS( NMAX*NMAX ), CT( NMAX ), G( NMAX ) + INTEGER IDIM( NIDIM ) +* .. Local Scalars .. + DOUBLE PRECISION ALPHA, ALS, BETA, BLS, ERR, ERRMAX + INTEGER I, IA, IB, ICS, ICU, IM, IN, LAA, LBB, LCC, + $ LDA, LDAS, LDB, LDBS, LDC, LDCS, M, MS, N, NA, + $ NARGS, NC, NS + LOGICAL LEFT, NULL, RESET, SAME + CHARACTER*1 SIDE, SIDES, UPLO, UPLOS + CHARACTER*2 ICHS, ICHU +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LDE, LDERES + EXTERNAL LDE, LDERES +* .. External Subroutines .. + EXTERNAL DMAKE, DMMCH, CDSYMM +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICHS/'LR'/, ICHU/'UL'/ +* .. Executable Statements .. +* + NARGS = 12 + NC = 0 + RESET = .TRUE. + ERRMAX = ZERO +* + DO 100 IM = 1, NIDIM + M = IDIM( IM ) +* + DO 90 IN = 1, NIDIM + N = IDIM( IN ) +* Set LDC to 1 more than minimum value if room. + LDC = M + IF( LDC.LT.NMAX ) + $ LDC = LDC + 1 +* Skip tests if not enough room. + IF( LDC.GT.NMAX ) + $ GO TO 90 + LCC = LDC*N + NULL = N.LE.0.OR.M.LE.0 +* +* Set LDB to 1 more than minimum value if room. + LDB = M + IF( LDB.LT.NMAX ) + $ LDB = LDB + 1 +* Skip tests if not enough room. + IF( LDB.GT.NMAX ) + $ GO TO 90 + LBB = LDB*N +* +* Generate the matrix B. +* + CALL DMAKE( 'GE', ' ', ' ', M, N, B, NMAX, BB, LDB, RESET, + $ ZERO ) +* + DO 80 ICS = 1, 2 + SIDE = ICHS( ICS: ICS ) + LEFT = SIDE.EQ.'L' +* + IF( LEFT )THEN + NA = M + ELSE + NA = N + END IF +* Set LDA to 1 more than minimum value if room. + LDA = NA + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 80 + LAA = LDA*NA +* + DO 70 ICU = 1, 2 + UPLO = ICHU( ICU: ICU ) +* +* Generate the symmetric matrix A. +* + CALL DMAKE( 'SY', UPLO, ' ', NA, NA, A, NMAX, AA, LDA, + $ RESET, ZERO ) +* + DO 60 IA = 1, NALF + ALPHA = ALF( IA ) +* + DO 50 IB = 1, NBET + BETA = BET( IB ) +* +* Generate the matrix C. +* + CALL DMAKE( 'GE', ' ', ' ', M, N, C, NMAX, CC, + $ LDC, RESET, ZERO ) +* + NC = NC + 1 +* +* Save every datum before calling the +* subroutine. +* + SIDES = SIDE + UPLOS = UPLO + MS = M + NS = N + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LBB + BS( I ) = BB( I ) + 20 CONTINUE + LDBS = LDB + BLS = BETA + DO 30 I = 1, LCC + CS( I ) = CC( I ) + 30 CONTINUE + LDCS = LDC +* +* Call the subroutine. +* + IF( TRACE ) + $ CALL DPRCN2(NTRA, NC, SNAME, IORDER, + $ SIDE, UPLO, M, N, ALPHA, LDA, LDB, + $ BETA, LDC) + IF( REWI ) + $ REWIND NTRA + CALL CDSYMM( IORDER, SIDE, UPLO, M, N, ALPHA, + $ AA, LDA, BB, LDB, BETA, CC, LDC ) +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9994 ) + FATAL = .TRUE. + GO TO 110 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = SIDES.EQ.SIDE + ISAME( 2 ) = UPLOS.EQ.UPLO + ISAME( 3 ) = MS.EQ.M + ISAME( 4 ) = NS.EQ.N + ISAME( 5 ) = ALS.EQ.ALPHA + ISAME( 6 ) = LDE( AS, AA, LAA ) + ISAME( 7 ) = LDAS.EQ.LDA + ISAME( 8 ) = LDE( BS, BB, LBB ) + ISAME( 9 ) = LDBS.EQ.LDB + ISAME( 10 ) = BLS.EQ.BETA + IF( NULL )THEN + ISAME( 11 ) = LDE( CS, CC, LCC ) + ELSE + ISAME( 11 ) = LDERES( 'GE', ' ', M, N, CS, + $ CC, LDC ) + END IF + ISAME( 12 ) = LDCS.EQ.LDC +* +* If data was incorrectly changed, report and +* return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 110 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result. +* + IF( LEFT )THEN + CALL DMMCH( 'N', 'N', M, N, M, ALPHA, A, + $ NMAX, B, NMAX, BETA, C, NMAX, + $ CT, G, CC, LDC, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + ELSE + CALL DMMCH( 'N', 'N', M, N, N, ALPHA, B, + $ NMAX, A, NMAX, BETA, C, NMAX, + $ CT, G, CC, LDC, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + END IF + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and +* return. + IF( FATAL ) + $ GO TO 110 + END IF +* + 50 CONTINUE +* + 60 CONTINUE +* + 70 CONTINUE +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 120 +* + 110 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + CALL DPRCN2(NOUT, NC, SNAME, IORDER, SIDE, UPLO, M, N, ALPHA, LDA, + $ LDB, BETA, LDC) +* + 120 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9996 FORMAT( ' ******* ', A12,' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( 1X, I6, ': ', A12,'(', 2( '''', A1, ''',' ), 2( I3, ',' ), + $ F4.1, ', A,', I3, ', B,', I3, ',', F4.1, ', C,', I3, ') ', + $ ' .' ) + 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of DCHK2. +* + END +* + SUBROUTINE DPRCN2(NOUT, NC, SNAME, IORDER, SIDE, UPLO, M, N, + $ ALPHA, LDA, LDB, BETA, LDC) + INTEGER NOUT, NC, IORDER, M, N, LDA, LDB, LDC + DOUBLE PRECISION ALPHA, BETA + CHARACTER*1 SIDE, UPLO + CHARACTER*12 SNAME + CHARACTER*14 CRC, CS,CU + + IF (SIDE.EQ.'L')THEN + CS = ' CblasLeft' + ELSE + CS = ' CblasRight' + END IF + IF (UPLO.EQ.'U')THEN + CU = ' CblasUpper' + ELSE + CU = ' CblasLower' + END IF + IF (IORDER.EQ.1)THEN + CRC = ' CblasRowMajor' + ELSE + CRC = ' CblasColMajor' + END IF + WRITE(NOUT, FMT = 9995)NC,SNAME,CRC, CS,CU + WRITE(NOUT, FMT = 9994)M, N, ALPHA, LDA, LDB, BETA, LDC + + 9995 FORMAT( 1X, I6, ': ', A12,'(', A14, ',', A14, ',', A14, ',') + 9994 FORMAT( 20X, 2( I3, ',' ), F4.1, ', A,', I3, ', B,', I3, ',', + $ F4.1, ', ', 'C,', I3, ').' ) + END +* + SUBROUTINE DCHK3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NMAX, A, AA, AS, + $ B, BB, BS, CT, G, C, IORDER ) +* +* Tests DTRMM and DTRSM. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 ) +* .. Scalar Arguments .. + DOUBLE PRECISION EPS, THRESH + INTEGER NALF, NIDIM, NMAX, NOUT, NTRA, IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + DOUBLE PRECISION A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), B( NMAX, NMAX ), + $ BB( NMAX*NMAX ), BS( NMAX*NMAX ), + $ C( NMAX, NMAX ), CT( NMAX ), G( NMAX ) + INTEGER IDIM( NIDIM ) +* .. Local Scalars .. + DOUBLE PRECISION ALPHA, ALS, ERR, ERRMAX + INTEGER I, IA, ICD, ICS, ICT, ICU, IM, IN, J, LAA, LBB, + $ LDA, LDAS, LDB, LDBS, M, MS, N, NA, NARGS, NC, + $ NS + LOGICAL LEFT, NULL, RESET, SAME + CHARACTER*1 DIAG, DIAGS, SIDE, SIDES, TRANAS, TRANSA, UPLO, + $ UPLOS + CHARACTER*2 ICHD, ICHS, ICHU + CHARACTER*3 ICHT +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LDE, LDERES + EXTERNAL LDE, LDERES +* .. External Subroutines .. + EXTERNAL DMAKE, DMMCH, CDTRMM, CDTRSM +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICHU/'UL'/, ICHT/'NTC'/, ICHD/'UN'/, ICHS/'LR'/ +* .. Executable Statements .. +* + NARGS = 11 + NC = 0 + RESET = .TRUE. + ERRMAX = ZERO +* Set up zero matrix for DMMCH. + DO 20 J = 1, NMAX + DO 10 I = 1, NMAX + C( I, J ) = ZERO + 10 CONTINUE + 20 CONTINUE +* + DO 140 IM = 1, NIDIM + M = IDIM( IM ) +* + DO 130 IN = 1, NIDIM + N = IDIM( IN ) +* Set LDB to 1 more than minimum value if room. + LDB = M + IF( LDB.LT.NMAX ) + $ LDB = LDB + 1 +* Skip tests if not enough room. + IF( LDB.GT.NMAX ) + $ GO TO 130 + LBB = LDB*N + NULL = M.LE.0.OR.N.LE.0 +* + DO 120 ICS = 1, 2 + SIDE = ICHS( ICS: ICS ) + LEFT = SIDE.EQ.'L' + IF( LEFT )THEN + NA = M + ELSE + NA = N + END IF +* Set LDA to 1 more than minimum value if room. + LDA = NA + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 130 + LAA = LDA*NA +* + DO 110 ICU = 1, 2 + UPLO = ICHU( ICU: ICU ) +* + DO 100 ICT = 1, 3 + TRANSA = ICHT( ICT: ICT ) +* + DO 90 ICD = 1, 2 + DIAG = ICHD( ICD: ICD ) +* + DO 80 IA = 1, NALF + ALPHA = ALF( IA ) +* +* Generate the matrix A. +* + CALL DMAKE( 'TR', UPLO, DIAG, NA, NA, A, + $ NMAX, AA, LDA, RESET, ZERO ) +* +* Generate the matrix B. +* + CALL DMAKE( 'GE', ' ', ' ', M, N, B, NMAX, + $ BB, LDB, RESET, ZERO ) +* + NC = NC + 1 +* +* Save every datum before calling the +* subroutine. +* + SIDES = SIDE + UPLOS = UPLO + TRANAS = TRANSA + DIAGS = DIAG + MS = M + NS = N + ALS = ALPHA + DO 30 I = 1, LAA + AS( I ) = AA( I ) + 30 CONTINUE + LDAS = LDA + DO 40 I = 1, LBB + BS( I ) = BB( I ) + 40 CONTINUE + LDBS = LDB +* +* Call the subroutine. +* + IF( SNAME( 10: 11 ).EQ.'mm' )THEN + IF( TRACE ) + $ CALL DPRCN3( NTRA, NC, SNAME, IORDER, + $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, + $ LDA, LDB) + IF( REWI ) + $ REWIND NTRA + CALL CDTRMM( IORDER, SIDE, UPLO, TRANSA, + $ DIAG, M, N, ALPHA, AA, LDA, + $ BB, LDB ) + ELSE IF( SNAME( 10: 11 ).EQ.'sm' )THEN + IF( TRACE ) + $ CALL DPRCN3( NTRA, NC, SNAME, IORDER, + $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, + $ LDA, LDB) + IF( REWI ) + $ REWIND NTRA + CALL CDTRSM( IORDER, SIDE, UPLO, TRANSA, + $ DIAG, M, N, ALPHA, AA, LDA, + $ BB, LDB ) + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9994 ) + FATAL = .TRUE. + GO TO 150 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = SIDES.EQ.SIDE + ISAME( 2 ) = UPLOS.EQ.UPLO + ISAME( 3 ) = TRANAS.EQ.TRANSA + ISAME( 4 ) = DIAGS.EQ.DIAG + ISAME( 5 ) = MS.EQ.M + ISAME( 6 ) = NS.EQ.N + ISAME( 7 ) = ALS.EQ.ALPHA + ISAME( 8 ) = LDE( AS, AA, LAA ) + ISAME( 9 ) = LDAS.EQ.LDA + IF( NULL )THEN + ISAME( 10 ) = LDE( BS, BB, LBB ) + ELSE + ISAME( 10 ) = LDERES( 'GE', ' ', M, N, BS, + $ BB, LDB ) + END IF + ISAME( 11 ) = LDBS.EQ.LDB +* +* If data was incorrectly changed, report and +* return. +* + SAME = .TRUE. + DO 50 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 50 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 150 + END IF +* + IF( .NOT.NULL )THEN + IF( SNAME( 10: 11 ).EQ.'mm' )THEN +* +* Check the result. +* + IF( LEFT )THEN + CALL DMMCH( TRANSA, 'N', M, N, M, + $ ALPHA, A, NMAX, B, NMAX, + $ ZERO, C, NMAX, CT, G, + $ BB, LDB, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + ELSE + CALL DMMCH( 'N', TRANSA, M, N, N, + $ ALPHA, B, NMAX, A, NMAX, + $ ZERO, C, NMAX, CT, G, + $ BB, LDB, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + END IF + ELSE IF( SNAME( 10: 11 ).EQ.'sm' )THEN +* +* Compute approximation to original +* matrix. +* + DO 70 J = 1, N + DO 60 I = 1, M + C( I, J ) = BB( I + ( J - 1 )* + $ LDB ) + BB( I + ( J - 1 )*LDB ) = ALPHA* + $ B( I, J ) + 60 CONTINUE + 70 CONTINUE +* + IF( LEFT )THEN + CALL DMMCH( TRANSA, 'N', M, N, M, + $ ONE, A, NMAX, C, NMAX, + $ ZERO, B, NMAX, CT, G, + $ BB, LDB, EPS, ERR, + $ FATAL, NOUT, .FALSE. ) + ELSE + CALL DMMCH( 'N', TRANSA, M, N, N, + $ ONE, C, NMAX, A, NMAX, + $ ZERO, B, NMAX, CT, G, + $ BB, LDB, EPS, ERR, + $ FATAL, NOUT, .FALSE. ) + END IF + END IF + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and +* return. + IF( FATAL ) + $ GO TO 150 + END IF +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* + 110 CONTINUE +* + 120 CONTINUE +* + 130 CONTINUE +* + 140 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 160 +* + 150 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + CALL DPRCN3( NTRA, NC, SNAME, IORDER, SIDE, UPLO, TRANSA, DIAG, + $ M, N, ALPHA, LDA, LDB) +* + 160 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9996 FORMAT( ' ******* ', A12,' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( 1X, I6, ': ', A12,'(', 4( '''', A1, ''',' ), 2( I3, ',' ), + $ F4.1, ', A,', I3, ', B,', I3, ') .' ) + 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of DCHK3. +* + END +* + SUBROUTINE DPRCN3(NOUT, NC, SNAME, IORDER, SIDE, UPLO, TRANSA, + $ DIAG, M, N, ALPHA, LDA, LDB) + INTEGER NOUT, NC, IORDER, M, N, LDA, LDB + DOUBLE PRECISION ALPHA + CHARACTER*1 SIDE, UPLO, TRANSA, DIAG + CHARACTER*12 SNAME + CHARACTER*14 CRC, CS, CU, CA, CD + + IF (SIDE.EQ.'L')THEN + CS = ' CblasLeft' + ELSE + CS = ' CblasRight' + END IF + IF (UPLO.EQ.'U')THEN + CU = ' CblasUpper' + ELSE + CU = ' CblasLower' + END IF + IF (TRANSA.EQ.'N')THEN + CA = ' CblasNoTrans' + ELSE IF (TRANSA.EQ.'T')THEN + CA = ' CblasTrans' + ELSE + CA = 'CblasConjTrans' + END IF + IF (DIAG.EQ.'N')THEN + CD = ' CblasNonUnit' + ELSE + CD = ' CblasUnit' + END IF + IF (IORDER.EQ.1)THEN + CRC = ' CblasRowMajor' + ELSE + CRC = ' CblasColMajor' + END IF + WRITE(NOUT, FMT = 9995)NC,SNAME,CRC, CS,CU + WRITE(NOUT, FMT = 9994)CA, CD, M, N, ALPHA, LDA, LDB + + 9995 FORMAT( 1X, I6, ': ', A12,'(', A14, ',', A14, ',', A14, ',') + 9994 FORMAT( 22X, 2( A14, ',') , 2( I3, ',' ), + $ F4.1, ', A,', I3, ', B,', I3, ').' ) + END +* + SUBROUTINE DCHK4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX, + $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G, IORDER) +* +* Tests DSYRK. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0D0 ) +* .. Scalar Arguments .. + DOUBLE PRECISION EPS, THRESH + INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + DOUBLE PRECISION A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), B( NMAX, NMAX ), + $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ), + $ C( NMAX, NMAX ), CC( NMAX*NMAX ), + $ CS( NMAX*NMAX ), CT( NMAX ), G( NMAX ) + INTEGER IDIM( NIDIM ) +* .. Local Scalars .. + DOUBLE PRECISION ALPHA, ALS, BETA, BETS, ERR, ERRMAX + INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, K, KS, + $ LAA, LCC, LDA, LDAS, LDC, LDCS, LJ, MA, N, NA, + $ NARGS, NC, NS + LOGICAL NULL, RESET, SAME, TRAN, UPPER + CHARACTER*1 TRANS, TRANSS, UPLO, UPLOS + CHARACTER*2 ICHU + CHARACTER*3 ICHT +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LDE, LDERES + EXTERNAL LDE, LDERES +* .. External Subroutines .. + EXTERNAL DMAKE, DMMCH, CDSYRK +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICHT/'NTC'/, ICHU/'UL'/ +* .. Executable Statements .. +* + NARGS = 10 + NC = 0 + RESET = .TRUE. + ERRMAX = ZERO +* + DO 100 IN = 1, NIDIM + N = IDIM( IN ) +* Set LDC to 1 more than minimum value if room. + LDC = N + IF( LDC.LT.NMAX ) + $ LDC = LDC + 1 +* Skip tests if not enough room. + IF( LDC.GT.NMAX ) + $ GO TO 100 + LCC = LDC*N + NULL = N.LE.0 +* + DO 90 IK = 1, NIDIM + K = IDIM( IK ) +* + DO 80 ICT = 1, 3 + TRANS = ICHT( ICT: ICT ) + TRAN = TRANS.EQ.'T'.OR.TRANS.EQ.'C' + IF( TRAN )THEN + MA = K + NA = N + ELSE + MA = N + NA = K + END IF +* Set LDA to 1 more than minimum value if room. + LDA = MA + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 80 + LAA = LDA*NA +* +* Generate the matrix A. +* + CALL DMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA, + $ RESET, ZERO ) +* + DO 70 ICU = 1, 2 + UPLO = ICHU( ICU: ICU ) + UPPER = UPLO.EQ.'U' +* + DO 60 IA = 1, NALF + ALPHA = ALF( IA ) +* + DO 50 IB = 1, NBET + BETA = BET( IB ) +* +* Generate the matrix C. +* + CALL DMAKE( 'SY', UPLO, ' ', N, N, C, NMAX, CC, + $ LDC, RESET, ZERO ) +* + NC = NC + 1 +* +* Save every datum before calling the subroutine. +* + UPLOS = UPLO + TRANSS = TRANS + NS = N + KS = K + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + BETS = BETA + DO 20 I = 1, LCC + CS( I ) = CC( I ) + 20 CONTINUE + LDCS = LDC +* +* Call the subroutine. +* + IF( TRACE ) + $ CALL DPRCN4( NTRA, NC, SNAME, IORDER, UPLO, + $ TRANS, N, K, ALPHA, LDA, BETA, LDC) + IF( REWI ) + $ REWIND NTRA + CALL CDSYRK( IORDER, UPLO, TRANS, N, K, ALPHA, + $ AA, LDA, BETA, CC, LDC ) +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9993 ) + FATAL = .TRUE. + GO TO 120 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = UPLOS.EQ.UPLO + ISAME( 2 ) = TRANSS.EQ.TRANS + ISAME( 3 ) = NS.EQ.N + ISAME( 4 ) = KS.EQ.K + ISAME( 5 ) = ALS.EQ.ALPHA + ISAME( 6 ) = LDE( AS, AA, LAA ) + ISAME( 7 ) = LDAS.EQ.LDA + ISAME( 8 ) = BETS.EQ.BETA + IF( NULL )THEN + ISAME( 9 ) = LDE( CS, CC, LCC ) + ELSE + ISAME( 9 ) = LDERES( 'SY', UPLO, N, N, CS, + $ CC, LDC ) + END IF + ISAME( 10 ) = LDCS.EQ.LDC +* +* If data was incorrectly changed, report and +* return. +* + SAME = .TRUE. + DO 30 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 30 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 120 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result column by column. +* + JC = 1 + DO 40 J = 1, N + IF( UPPER )THEN + JJ = 1 + LJ = J + ELSE + JJ = J + LJ = N - J + 1 + END IF + IF( TRAN )THEN + CALL DMMCH( 'T', 'N', LJ, 1, K, ALPHA, + $ A( 1, JJ ), NMAX, + $ A( 1, J ), NMAX, BETA, + $ C( JJ, J ), NMAX, CT, G, + $ CC( JC ), LDC, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + ELSE + CALL DMMCH( 'N', 'T', LJ, 1, K, ALPHA, + $ A( JJ, 1 ), NMAX, + $ A( J, 1 ), NMAX, BETA, + $ C( JJ, J ), NMAX, CT, G, + $ CC( JC ), LDC, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + END IF + IF( UPPER )THEN + JC = JC + LDC + ELSE + JC = JC + LDC + 1 + END IF + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and +* return. + IF( FATAL ) + $ GO TO 110 + 40 CONTINUE + END IF +* + 50 CONTINUE +* + 60 CONTINUE +* + 70 CONTINUE +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 130 +* + 110 CONTINUE + IF( N.GT.1 ) + $ WRITE( NOUT, FMT = 9995 )J +* + 120 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + CALL DPRCN4( NOUT, NC, SNAME, IORDER, UPLO, TRANS, N, K, ALPHA, + $ LDA, BETA, LDC) +* + 130 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9996 FORMAT( ' ******* ', A12,' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) + 9994 FORMAT( 1X, I6, ': ', A12,'(', 2( '''', A1, ''',' ), 2( I3, ',' ), + $ F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ') .' ) + 9993 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of DCHK4. +* + END +* + SUBROUTINE DPRCN4(NOUT, NC, SNAME, IORDER, UPLO, TRANSA, + $ N, K, ALPHA, LDA, BETA, LDC) + INTEGER NOUT, NC, IORDER, N, K, LDA, LDC + DOUBLE PRECISION ALPHA, BETA + CHARACTER*1 UPLO, TRANSA + CHARACTER*12 SNAME + CHARACTER*14 CRC, CU, CA + + IF (UPLO.EQ.'U')THEN + CU = ' CblasUpper' + ELSE + CU = ' CblasLower' + END IF + IF (TRANSA.EQ.'N')THEN + CA = ' CblasNoTrans' + ELSE IF (TRANSA.EQ.'T')THEN + CA = ' CblasTrans' + ELSE + CA = 'CblasConjTrans' + END IF + IF (IORDER.EQ.1)THEN + CRC = ' CblasRowMajor' + ELSE + CRC = ' CblasColMajor' + END IF + WRITE(NOUT, FMT = 9995)NC, SNAME, CRC, CU, CA + WRITE(NOUT, FMT = 9994)N, K, ALPHA, LDA, BETA, LDC + + 9995 FORMAT( 1X, I6, ': ', A12,'(', 3( A14, ',') ) + 9994 FORMAT( 20X, 2( I3, ',' ), + $ F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ').' ) + END +* + SUBROUTINE DCHK5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX, + $ AB, AA, AS, BB, BS, C, CC, CS, CT, G, W, + $ IORDER ) +* +* Tests DSYR2K. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0D0 ) +* .. Scalar Arguments .. + DOUBLE PRECISION EPS, THRESH + INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + DOUBLE PRECISION AA( NMAX*NMAX ), AB( 2*NMAX*NMAX ), + $ ALF( NALF ), AS( NMAX*NMAX ), BB( NMAX*NMAX ), + $ BET( NBET ), BS( NMAX*NMAX ), C( NMAX, NMAX ), + $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ), + $ G( NMAX ), W( 2*NMAX ) + INTEGER IDIM( NIDIM ) +* .. Local Scalars .. + DOUBLE PRECISION ALPHA, ALS, BETA, BETS, ERR, ERRMAX + INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, JJAB, + $ K, KS, LAA, LBB, LCC, LDA, LDAS, LDB, LDBS, + $ LDC, LDCS, LJ, MA, N, NA, NARGS, NC, NS + LOGICAL NULL, RESET, SAME, TRAN, UPPER + CHARACTER*1 TRANS, TRANSS, UPLO, UPLOS + CHARACTER*2 ICHU + CHARACTER*3 ICHT +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LDE, LDERES + EXTERNAL LDE, LDERES +* .. External Subroutines .. + EXTERNAL DMAKE, DMMCH, CDSYR2K +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICHT/'NTC'/, ICHU/'UL'/ +* .. Executable Statements .. +* + NARGS = 12 + NC = 0 + RESET = .TRUE. + ERRMAX = ZERO +* + DO 130 IN = 1, NIDIM + N = IDIM( IN ) +* Set LDC to 1 more than minimum value if room. + LDC = N + IF( LDC.LT.NMAX ) + $ LDC = LDC + 1 +* Skip tests if not enough room. + IF( LDC.GT.NMAX ) + $ GO TO 130 + LCC = LDC*N + NULL = N.LE.0 +* + DO 120 IK = 1, NIDIM + K = IDIM( IK ) +* + DO 110 ICT = 1, 3 + TRANS = ICHT( ICT: ICT ) + TRAN = TRANS.EQ.'T'.OR.TRANS.EQ.'C' + IF( TRAN )THEN + MA = K + NA = N + ELSE + MA = N + NA = K + END IF +* Set LDA to 1 more than minimum value if room. + LDA = MA + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 110 + LAA = LDA*NA +* +* Generate the matrix A. +* + IF( TRAN )THEN + CALL DMAKE( 'GE', ' ', ' ', MA, NA, AB, 2*NMAX, AA, + $ LDA, RESET, ZERO ) + ELSE + CALL DMAKE( 'GE', ' ', ' ', MA, NA, AB, NMAX, AA, LDA, + $ RESET, ZERO ) + END IF +* +* Generate the matrix B. +* + LDB = LDA + LBB = LAA + IF( TRAN )THEN + CALL DMAKE( 'GE', ' ', ' ', MA, NA, AB( K + 1 ), + $ 2*NMAX, BB, LDB, RESET, ZERO ) + ELSE + CALL DMAKE( 'GE', ' ', ' ', MA, NA, AB( K*NMAX + 1 ), + $ NMAX, BB, LDB, RESET, ZERO ) + END IF +* + DO 100 ICU = 1, 2 + UPLO = ICHU( ICU: ICU ) + UPPER = UPLO.EQ.'U' +* + DO 90 IA = 1, NALF + ALPHA = ALF( IA ) +* + DO 80 IB = 1, NBET + BETA = BET( IB ) +* +* Generate the matrix C. +* + CALL DMAKE( 'SY', UPLO, ' ', N, N, C, NMAX, CC, + $ LDC, RESET, ZERO ) +* + NC = NC + 1 +* +* Save every datum before calling the subroutine. +* + UPLOS = UPLO + TRANSS = TRANS + NS = N + KS = K + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LBB + BS( I ) = BB( I ) + 20 CONTINUE + LDBS = LDB + BETS = BETA + DO 30 I = 1, LCC + CS( I ) = CC( I ) + 30 CONTINUE + LDCS = LDC +* +* Call the subroutine. +* + IF( TRACE ) + $ CALL DPRCN5( NTRA, NC, SNAME, IORDER, UPLO, + $ TRANS, N, K, ALPHA, LDA, LDB, BETA, LDC) + IF( REWI ) + $ REWIND NTRA + CALL CDSYR2K( IORDER, UPLO, TRANS, N, K, + $ ALPHA, AA, LDA, BB, LDB, BETA, + $ CC, LDC ) +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9993 ) + FATAL = .TRUE. + GO TO 150 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = UPLOS.EQ.UPLO + ISAME( 2 ) = TRANSS.EQ.TRANS + ISAME( 3 ) = NS.EQ.N + ISAME( 4 ) = KS.EQ.K + ISAME( 5 ) = ALS.EQ.ALPHA + ISAME( 6 ) = LDE( AS, AA, LAA ) + ISAME( 7 ) = LDAS.EQ.LDA + ISAME( 8 ) = LDE( BS, BB, LBB ) + ISAME( 9 ) = LDBS.EQ.LDB + ISAME( 10 ) = BETS.EQ.BETA + IF( NULL )THEN + ISAME( 11 ) = LDE( CS, CC, LCC ) + ELSE + ISAME( 11 ) = LDERES( 'SY', UPLO, N, N, CS, + $ CC, LDC ) + END IF + ISAME( 12 ) = LDCS.EQ.LDC +* +* If data was incorrectly changed, report and +* return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 150 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result column by column. +* + JJAB = 1 + JC = 1 + DO 70 J = 1, N + IF( UPPER )THEN + JJ = 1 + LJ = J + ELSE + JJ = J + LJ = N - J + 1 + END IF + IF( TRAN )THEN + DO 50 I = 1, K + W( I ) = AB( ( J - 1 )*2*NMAX + K + + $ I ) + W( K + I ) = AB( ( J - 1 )*2*NMAX + + $ I ) + 50 CONTINUE + CALL DMMCH( 'T', 'N', LJ, 1, 2*K, + $ ALPHA, AB( JJAB ), 2*NMAX, + $ W, 2*NMAX, BETA, + $ C( JJ, J ), NMAX, CT, G, + $ CC( JC ), LDC, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + ELSE + DO 60 I = 1, K + W( I ) = AB( ( K + I - 1 )*NMAX + + $ J ) + W( K + I ) = AB( ( I - 1 )*NMAX + + $ J ) + 60 CONTINUE + CALL DMMCH( 'N', 'N', LJ, 1, 2*K, + $ ALPHA, AB( JJ ), NMAX, W, + $ 2*NMAX, BETA, C( JJ, J ), + $ NMAX, CT, G, CC( JC ), LDC, + $ EPS, ERR, FATAL, NOUT, + $ .TRUE. ) + END IF + IF( UPPER )THEN + JC = JC + LDC + ELSE + JC = JC + LDC + 1 + IF( TRAN ) + $ JJAB = JJAB + 2*NMAX + END IF + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and +* return. + IF( FATAL ) + $ GO TO 140 + 70 CONTINUE + END IF +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* + 110 CONTINUE +* + 120 CONTINUE +* + 130 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 160 +* + 140 CONTINUE + IF( N.GT.1 ) + $ WRITE( NOUT, FMT = 9995 )J +* + 150 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + CALL DPRCN5( NOUT, NC, SNAME, IORDER, UPLO, TRANS, N, K, ALPHA, + $ LDA, LDB, BETA, LDC) +* + 160 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9996 FORMAT( ' ******* ', A12,' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) + 9994 FORMAT( 1X, I6, ': ', A12,'(', 2( '''', A1, ''',' ), 2( I3, ',' ), + $ F4.1, ', A,', I3, ', B,', I3, ',', F4.1, ', C,', I3, ') ', + $ ' .' ) + 9993 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of DCHK5. +* + END +* + SUBROUTINE DPRCN5(NOUT, NC, SNAME, IORDER, UPLO, TRANSA, + $ N, K, ALPHA, LDA, LDB, BETA, LDC) + INTEGER NOUT, NC, IORDER, N, K, LDA, LDB, LDC + DOUBLE PRECISION ALPHA, BETA + CHARACTER*1 UPLO, TRANSA + CHARACTER*12 SNAME + CHARACTER*14 CRC, CU, CA + + IF (UPLO.EQ.'U')THEN + CU = ' CblasUpper' + ELSE + CU = ' CblasLower' + END IF + IF (TRANSA.EQ.'N')THEN + CA = ' CblasNoTrans' + ELSE IF (TRANSA.EQ.'T')THEN + CA = ' CblasTrans' + ELSE + CA = 'CblasConjTrans' + END IF + IF (IORDER.EQ.1)THEN + CRC = ' CblasRowMajor' + ELSE + CRC = ' CblasColMajor' + END IF + WRITE(NOUT, FMT = 9995)NC, SNAME, CRC, CU, CA + WRITE(NOUT, FMT = 9994)N, K, ALPHA, LDA, LDB, BETA, LDC + + 9995 FORMAT( 1X, I6, ': ', A12,'(', 3( A14, ',') ) + 9994 FORMAT( 20X, 2( I3, ',' ), + $ F4.1, ', A,', I3, ', B', I3, ',', F4.1, ', C,', I3, ').' ) + END +* + SUBROUTINE DMAKE( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, RESET, + $ TRANSL ) +* +* Generates values for an M by N matrix A. +* Stores the values in the array AA in the data structure required +* by the routine, with unwanted elements set to rogue value. +* +* TYPE is 'GE', 'SY' or 'TR'. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 ) + DOUBLE PRECISION ROGUE + PARAMETER ( ROGUE = -1.0D10 ) +* .. Scalar Arguments .. + DOUBLE PRECISION TRANSL + INTEGER LDA, M, N, NMAX + LOGICAL RESET + CHARACTER*1 DIAG, UPLO + CHARACTER*2 TYPE +* .. Array Arguments .. + DOUBLE PRECISION A( NMAX, * ), AA( * ) +* .. Local Scalars .. + INTEGER I, IBEG, IEND, J + LOGICAL GEN, LOWER, SYM, TRI, UNIT, UPPER +* .. External Functions .. + DOUBLE PRECISION DBEG + EXTERNAL DBEG +* .. Executable Statements .. + GEN = TYPE.EQ.'GE' + SYM = TYPE.EQ.'SY' + TRI = TYPE.EQ.'TR' + UPPER = ( SYM.OR.TRI ).AND.UPLO.EQ.'U' + LOWER = ( SYM.OR.TRI ).AND.UPLO.EQ.'L' + UNIT = TRI.AND.DIAG.EQ.'U' +* +* Generate data in array A. +* + DO 20 J = 1, N + DO 10 I = 1, M + IF( GEN.OR.( UPPER.AND.I.LE.J ).OR.( LOWER.AND.I.GE.J ) ) + $ THEN + A( I, J ) = DBEG( RESET ) + TRANSL + IF( I.NE.J )THEN +* Set some elements to zero + IF( N.GT.3.AND.J.EQ.N/2 ) + $ A( I, J ) = ZERO + IF( SYM )THEN + A( J, I ) = A( I, J ) + ELSE IF( TRI )THEN + A( J, I ) = ZERO + END IF + END IF + END IF + 10 CONTINUE + IF( TRI ) + $ A( J, J ) = A( J, J ) + ONE + IF( UNIT ) + $ A( J, J ) = ONE + 20 CONTINUE +* +* Store elements in array AS in data structure required by routine. +* + IF( TYPE.EQ.'GE' )THEN + DO 50 J = 1, N + DO 30 I = 1, M + AA( I + ( J - 1 )*LDA ) = A( I, J ) + 30 CONTINUE + DO 40 I = M + 1, LDA + AA( I + ( J - 1 )*LDA ) = ROGUE + 40 CONTINUE + 50 CONTINUE + ELSE IF( TYPE.EQ.'SY'.OR.TYPE.EQ.'TR' )THEN + DO 90 J = 1, N + IF( UPPER )THEN + IBEG = 1 + IF( UNIT )THEN + IEND = J - 1 + ELSE + IEND = J + END IF + ELSE + IF( UNIT )THEN + IBEG = J + 1 + ELSE + IBEG = J + END IF + IEND = N + END IF + DO 60 I = 1, IBEG - 1 + AA( I + ( J - 1 )*LDA ) = ROGUE + 60 CONTINUE + DO 70 I = IBEG, IEND + AA( I + ( J - 1 )*LDA ) = A( I, J ) + 70 CONTINUE + DO 80 I = IEND + 1, LDA + AA( I + ( J - 1 )*LDA ) = ROGUE + 80 CONTINUE + 90 CONTINUE + END IF + RETURN +* +* End of DMAKE. +* + END + SUBROUTINE DMMCH( TRANSA, TRANSB, M, N, KK, ALPHA, A, LDA, B, LDB, + $ BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL, + $ NOUT, MV ) +* +* Checks the results of the computational tests. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 ) +* .. Scalar Arguments .. + DOUBLE PRECISION ALPHA, BETA, EPS, ERR + INTEGER KK, LDA, LDB, LDC, LDCC, M, N, NOUT + LOGICAL FATAL, MV + CHARACTER*1 TRANSA, TRANSB +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), B( LDB, * ), C( LDC, * ), + $ CC( LDCC, * ), CT( * ), G( * ) +* .. Local Scalars .. + DOUBLE PRECISION ERRI + INTEGER I, J, K + LOGICAL TRANA, TRANB +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, SQRT +* .. Executable Statements .. + TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C' + TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C' +* +* Compute expected result, one column at a time, in CT using data +* in A, B and C. +* Compute gauges in G. +* + DO 120 J = 1, N +* + DO 10 I = 1, M + CT( I ) = ZERO + G( I ) = ZERO + 10 CONTINUE + IF( .NOT.TRANA.AND..NOT.TRANB )THEN + DO 30 K = 1, KK + DO 20 I = 1, M + CT( I ) = CT( I ) + A( I, K )*B( K, J ) + G( I ) = G( I ) + ABS( A( I, K ) )*ABS( B( K, J ) ) + 20 CONTINUE + 30 CONTINUE + ELSE IF( TRANA.AND..NOT.TRANB )THEN + DO 50 K = 1, KK + DO 40 I = 1, M + CT( I ) = CT( I ) + A( K, I )*B( K, J ) + G( I ) = G( I ) + ABS( A( K, I ) )*ABS( B( K, J ) ) + 40 CONTINUE + 50 CONTINUE + ELSE IF( .NOT.TRANA.AND.TRANB )THEN + DO 70 K = 1, KK + DO 60 I = 1, M + CT( I ) = CT( I ) + A( I, K )*B( J, K ) + G( I ) = G( I ) + ABS( A( I, K ) )*ABS( B( J, K ) ) + 60 CONTINUE + 70 CONTINUE + ELSE IF( TRANA.AND.TRANB )THEN + DO 90 K = 1, KK + DO 80 I = 1, M + CT( I ) = CT( I ) + A( K, I )*B( J, K ) + G( I ) = G( I ) + ABS( A( K, I ) )*ABS( B( J, K ) ) + 80 CONTINUE + 90 CONTINUE + END IF + DO 100 I = 1, M + CT( I ) = ALPHA*CT( I ) + BETA*C( I, J ) + G( I ) = ABS( ALPHA )*G( I ) + ABS( BETA )*ABS( C( I, J ) ) + 100 CONTINUE +* +* Compute the error ratio for this result. +* + ERR = ZERO + DO 110 I = 1, M + ERRI = ABS( CT( I ) - CC( I, J ) )/EPS + IF( G( I ).NE.ZERO ) + $ ERRI = ERRI/G( I ) + ERR = MAX( ERR, ERRI ) + IF( ERR*SQRT( EPS ).GE.ONE ) + $ GO TO 130 + 110 CONTINUE +* + 120 CONTINUE +* +* If the loop completes, all results are at least half accurate. + GO TO 150 +* +* Report fatal error. +* + 130 FATAL = .TRUE. + WRITE( NOUT, FMT = 9999 ) + DO 140 I = 1, M + IF( MV )THEN + WRITE( NOUT, FMT = 9998 )I, CT( I ), CC( I, J ) + ELSE + WRITE( NOUT, FMT = 9998 )I, CC( I, J ), CT( I ) + END IF + 140 CONTINUE + IF( N.GT.1 ) + $ WRITE( NOUT, FMT = 9997 )J +* + 150 CONTINUE + RETURN +* + 9999 FORMAT( ' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL', + $ 'F ACCURATE *******', /' EXPECTED RESULT COMPU', + $ 'TED RESULT' ) + 9998 FORMAT( 1X, I7, 2G18.6 ) + 9997 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) +* +* End of DMMCH. +* + END + LOGICAL FUNCTION LDE( RI, RJ, LR ) +* +* Tests if two arrays are identical. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Scalar Arguments .. + INTEGER LR +* .. Array Arguments .. + DOUBLE PRECISION RI( * ), RJ( * ) +* .. Local Scalars .. + INTEGER I +* .. Executable Statements .. + DO 10 I = 1, LR + IF( RI( I ).NE.RJ( I ) ) + $ GO TO 20 + 10 CONTINUE + LDE = .TRUE. + GO TO 30 + 20 CONTINUE + LDE = .FALSE. + 30 RETURN +* +* End of LDE. +* + END + LOGICAL FUNCTION LDERES( TYPE, UPLO, M, N, AA, AS, LDA ) +* +* Tests if selected elements in two arrays are equal. +* +* TYPE is 'GE' or 'SY'. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Scalar Arguments .. + INTEGER LDA, M, N + CHARACTER*1 UPLO + CHARACTER*2 TYPE +* .. Array Arguments .. + DOUBLE PRECISION AA( LDA, * ), AS( LDA, * ) +* .. Local Scalars .. + INTEGER I, IBEG, IEND, J + LOGICAL UPPER +* .. Executable Statements .. + UPPER = UPLO.EQ.'U' + IF( TYPE.EQ.'GE' )THEN + DO 20 J = 1, N + DO 10 I = M + 1, LDA + IF( AA( I, J ).NE.AS( I, J ) ) + $ GO TO 70 + 10 CONTINUE + 20 CONTINUE + ELSE IF( TYPE.EQ.'SY' )THEN + DO 50 J = 1, N + IF( UPPER )THEN + IBEG = 1 + IEND = J + ELSE + IBEG = J + IEND = N + END IF + DO 30 I = 1, IBEG - 1 + IF( AA( I, J ).NE.AS( I, J ) ) + $ GO TO 70 + 30 CONTINUE + DO 40 I = IEND + 1, LDA + IF( AA( I, J ).NE.AS( I, J ) ) + $ GO TO 70 + 40 CONTINUE + 50 CONTINUE + END IF +* + 60 CONTINUE + LDERES = .TRUE. + GO TO 80 + 70 CONTINUE + LDERES = .FALSE. + 80 RETURN +* +* End of LDERES. +* + END + DOUBLE PRECISION FUNCTION DBEG( RESET ) +* +* Generates random numbers uniformly distributed between -0.5 and 0.5. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Scalar Arguments .. + LOGICAL RESET +* .. Local Scalars .. + INTEGER I, IC, MI +* .. Save statement .. + SAVE I, IC, MI +* .. Executable Statements .. + IF( RESET )THEN +* Initialize local variables. + MI = 891 + I = 7 + IC = 0 + RESET = .FALSE. + END IF +* +* The sequence of values of I is bounded between 1 and 999. +* If initial I = 1,2,3,6,7 or 9, the period will be 50. +* If initial I = 4 or 8, the period will be 25. +* If initial I = 5, the period will be 10. +* IC is used to break up the period by skipping 1 value of I in 6. +* + IC = IC + 1 + 10 I = I*MI + I = I - 1000*( I/1000 ) + IF( IC.GE.5 )THEN + IC = 0 + GO TO 10 + END IF + DBEG = ( I - 500 )/1001.0D0 + RETURN +* +* End of DBEG. +* + END + DOUBLE PRECISION FUNCTION DDIFF( X, Y ) +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Scalar Arguments .. + DOUBLE PRECISION X, Y +* .. Executable Statements .. + DDIFF = X - Y + RETURN +* +* End of DDIFF. +* + END diff --git a/CBLAS/testing/c_s2chke.c b/CBLAS/testing/c_s2chke.c new file mode 100644 index 000000000..60b837cd8 --- /dev/null +++ b/CBLAS/testing/c_s2chke.c @@ -0,0 +1,789 @@ +#include +#include +#include "cblas.h" +#include "cblas_test.h" + +int cblas_ok, cblas_lerr, cblas_info; +int link_xerbla=TRUE; +char *cblas_rout; + +#ifdef F77_Char +void F77_xerbla(F77_Char F77_srname, void *vinfo); +#else +void F77_xerbla(char *srname, void *vinfo); +#endif + +void chkxer(void) { + extern int cblas_ok, cblas_lerr, cblas_info; + extern int link_xerbla; + extern char *cblas_rout; + if (cblas_lerr == 1 ) { + printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %d NOT DETECTED BY %s *****\n", cblas_info, cblas_rout); + cblas_ok = 0 ; + } + cblas_lerr = 1 ; +} + +void F77_s2chke(char *rout) { + char *sf = ( rout ) ; + float A[2] = {0.0,0.0}, + X[2] = {0.0,0.0}, + Y[2] = {0.0,0.0}, + ALPHA=0.0, BETA=0.0; + extern int cblas_info, cblas_lerr, cblas_ok; + extern int RowMajorStrg; + extern char *cblas_rout; + + if (link_xerbla) /* call these first to link */ + { + cblas_xerbla(cblas_info,cblas_rout,""); + F77_xerbla(cblas_rout,&cblas_info); + } + + cblas_ok = TRUE ; + cblas_lerr = PASSED ; + + if (strncmp( sf,"cblas_sgemv",11)==0) { + cblas_rout = "cblas_sgemv"; + cblas_info = 1; + cblas_sgemv(INVALID, CblasNoTrans, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_sgemv(CblasColMajor, INVALID, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_sgemv(CblasColMajor, CblasNoTrans, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_sgemv(CblasColMajor, CblasNoTrans, 0, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_sgemv(CblasColMajor, CblasNoTrans, 2, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_sgemv(CblasColMajor, CblasNoTrans, 0, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_sgemv(CblasColMajor, CblasNoTrans, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + + cblas_info = 2; RowMajorStrg = TRUE; RowMajorStrg = TRUE; + cblas_sgemv(CblasRowMajor, INVALID, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_sgemv(CblasRowMajor, CblasNoTrans, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_sgemv(CblasRowMajor, CblasNoTrans, 0, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_sgemv(CblasRowMajor, CblasNoTrans, 0, 2, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_sgemv(CblasRowMajor, CblasNoTrans, 0, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_sgemv(CblasRowMajor, CblasNoTrans, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_sgbmv",11)==0) { + cblas_rout = "cblas_sgbmv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_sgbmv(INVALID, CblasNoTrans, 0, 0, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_sgbmv(CblasColMajor, INVALID, 0, 0, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_sgbmv(CblasColMajor, CblasNoTrans, INVALID, 0, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_sgbmv(CblasColMajor, CblasNoTrans, 0, INVALID, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_sgbmv(CblasColMajor, CblasNoTrans, 0, 0, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_sgbmv(CblasColMajor, CblasNoTrans, 2, 0, 0, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_sgbmv(CblasColMajor, CblasNoTrans, 0, 0, 1, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_sgbmv(CblasColMajor, CblasNoTrans, 0, 0, 0, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = FALSE; + cblas_sgbmv(CblasColMajor, CblasNoTrans, 0, 0, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_sgbmv(CblasRowMajor, INVALID, 0, 0, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_sgbmv(CblasRowMajor, CblasNoTrans, INVALID, 0, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_sgbmv(CblasRowMajor, CblasNoTrans, 0, INVALID, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_sgbmv(CblasRowMajor, CblasNoTrans, 0, 0, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_sgbmv(CblasRowMajor, CblasNoTrans, 2, 0, 0, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_sgbmv(CblasRowMajor, CblasNoTrans, 0, 0, 1, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_sgbmv(CblasRowMajor, CblasNoTrans, 0, 0, 0, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = TRUE; + cblas_sgbmv(CblasRowMajor, CblasNoTrans, 0, 0, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_ssymv",11)==0) { + cblas_rout = "cblas_ssymv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_ssymv(INVALID, CblasUpper, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_ssymv(CblasColMajor, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_ssymv(CblasColMajor, CblasUpper, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ssymv(CblasColMajor, CblasUpper, 2, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_ssymv(CblasColMajor, CblasUpper, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_ssymv(CblasColMajor, CblasUpper, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_ssymv(CblasRowMajor, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_ssymv(CblasRowMajor, CblasUpper, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ssymv(CblasRowMajor, CblasUpper, 2, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_ssymv(CblasRowMajor, CblasUpper, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_ssymv(CblasRowMajor, CblasUpper, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_ssbmv",11)==0) { + cblas_rout = "cblas_ssbmv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_ssbmv(INVALID, CblasUpper, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_ssbmv(CblasColMajor, INVALID, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_ssbmv(CblasColMajor, CblasUpper, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_ssbmv(CblasColMajor, CblasUpper, 0, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ssbmv(CblasColMajor, CblasUpper, 0, 1, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_ssbmv(CblasColMajor, CblasUpper, 0, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ssbmv(CblasColMajor, CblasUpper, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_ssbmv(CblasRowMajor, INVALID, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_ssbmv(CblasRowMajor, CblasUpper, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_ssbmv(CblasRowMajor, CblasUpper, 0, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ssbmv(CblasRowMajor, CblasUpper, 0, 1, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_ssbmv(CblasRowMajor, CblasUpper, 0, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ssbmv(CblasRowMajor, CblasUpper, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_sspmv",11)==0) { + cblas_rout = "cblas_sspmv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_sspmv(INVALID, CblasUpper, 0, + ALPHA, A, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_sspmv(CblasColMajor, INVALID, 0, + ALPHA, A, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_sspmv(CblasColMajor, CblasUpper, INVALID, + ALPHA, A, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_sspmv(CblasColMajor, CblasUpper, 0, + ALPHA, A, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_sspmv(CblasColMajor, CblasUpper, 0, + ALPHA, A, X, 1, BETA, Y, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_sspmv(CblasRowMajor, INVALID, 0, + ALPHA, A, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_sspmv(CblasRowMajor, CblasUpper, INVALID, + ALPHA, A, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_sspmv(CblasRowMajor, CblasUpper, 0, + ALPHA, A, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_sspmv(CblasRowMajor, CblasUpper, 0, + ALPHA, A, X, 1, BETA, Y, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_strmv",11)==0) { + cblas_rout = "cblas_strmv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_strmv(INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_strmv(CblasColMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_strmv(CblasColMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_strmv(CblasColMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_strmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_strmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, A, 1, X, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_strmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_strmv(CblasRowMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_strmv(CblasRowMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_strmv(CblasRowMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_strmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_strmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, A, 1, X, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_strmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_stbmv",11)==0) { + cblas_rout = "cblas_stbmv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_stbmv(INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_stbmv(CblasColMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_stbmv(CblasColMajor, CblasUpper, INVALID, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_stbmv(CblasColMajor, CblasUpper, CblasNoTrans, + INVALID, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_stbmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_stbmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_stbmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 1, A, 1, X, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_stbmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_stbmv(CblasRowMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_stbmv(CblasRowMajor, CblasUpper, INVALID, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_stbmv(CblasRowMajor, CblasUpper, CblasNoTrans, + INVALID, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_stbmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_stbmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_stbmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 1, A, 1, X, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_stbmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_stpmv",11)==0) { + cblas_rout = "cblas_stpmv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_stpmv(INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_stpmv(CblasColMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_stpmv(CblasColMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_stpmv(CblasColMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_stpmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_stpmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, X, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_stpmv(CblasRowMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_stpmv(CblasRowMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_stpmv(CblasRowMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_stpmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_stpmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, X, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_strsv",11)==0) { + cblas_rout = "cblas_strsv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_strsv(INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_strsv(CblasColMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_strsv(CblasColMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_strsv(CblasColMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_strsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_strsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, A, 1, X, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_strsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_strsv(CblasRowMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_strsv(CblasRowMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_strsv(CblasRowMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_strsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_strsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, A, 1, X, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_strsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_stbsv",11)==0) { + cblas_rout = "cblas_stbsv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_stbsv(INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_stbsv(CblasColMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_stbsv(CblasColMajor, CblasUpper, INVALID, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_stbsv(CblasColMajor, CblasUpper, CblasNoTrans, + INVALID, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_stbsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_stbsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_stbsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 1, A, 1, X, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_stbsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_stbsv(CblasRowMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_stbsv(CblasRowMajor, CblasUpper, INVALID, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_stbsv(CblasRowMajor, CblasUpper, CblasNoTrans, + INVALID, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_stbsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_stbsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_stbsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 1, A, 1, X, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_stbsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_stpsv",11)==0) { + cblas_rout = "cblas_stpsv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_stpsv(INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_stpsv(CblasColMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_stpsv(CblasColMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_stpsv(CblasColMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_stpsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_stpsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, X, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_stpsv(CblasRowMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_stpsv(CblasRowMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_stpsv(CblasRowMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_stpsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_stpsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, X, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_sger",10)==0) { + cblas_rout = "cblas_sger"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_sger(INVALID, 0, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_sger(CblasColMajor, INVALID, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_sger(CblasColMajor, 0, INVALID, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_sger(CblasColMajor, 0, 0, ALPHA, X, 0, Y, 1, A, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_sger(CblasColMajor, 0, 0, ALPHA, X, 1, Y, 0, A, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_sger(CblasColMajor, 2, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_sger(CblasRowMajor, INVALID, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_sger(CblasRowMajor, 0, INVALID, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_sger(CblasRowMajor, 0, 0, ALPHA, X, 0, Y, 1, A, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_sger(CblasRowMajor, 0, 0, ALPHA, X, 1, Y, 0, A, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_sger(CblasRowMajor, 0, 2, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + } else if (strncmp( sf,"cblas_ssyr2",11)==0) { + cblas_rout = "cblas_ssyr2"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_ssyr2(INVALID, CblasUpper, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_ssyr2(CblasColMajor, INVALID, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_ssyr2(CblasColMajor, CblasUpper, INVALID, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ssyr2(CblasColMajor, CblasUpper, 0, ALPHA, X, 0, Y, 1, A, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_ssyr2(CblasColMajor, CblasUpper, 0, ALPHA, X, 1, Y, 0, A, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ssyr2(CblasColMajor, CblasUpper, 2, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_ssyr2(CblasRowMajor, INVALID, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_ssyr2(CblasRowMajor, CblasUpper, INVALID, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ssyr2(CblasRowMajor, CblasUpper, 0, ALPHA, X, 0, Y, 1, A, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_ssyr2(CblasRowMajor, CblasUpper, 0, ALPHA, X, 1, Y, 0, A, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ssyr2(CblasRowMajor, CblasUpper, 2, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + } else if (strncmp( sf,"cblas_sspr2",11)==0) { + cblas_rout = "cblas_sspr2"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_sspr2(INVALID, CblasUpper, 0, ALPHA, X, 1, Y, 1, A ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_sspr2(CblasColMajor, INVALID, 0, ALPHA, X, 1, Y, 1, A ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_sspr2(CblasColMajor, CblasUpper, INVALID, ALPHA, X, 1, Y, 1, A ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_sspr2(CblasColMajor, CblasUpper, 0, ALPHA, X, 0, Y, 1, A ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_sspr2(CblasColMajor, CblasUpper, 0, ALPHA, X, 1, Y, 0, A ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_sspr2(CblasRowMajor, INVALID, 0, ALPHA, X, 1, Y, 1, A ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_sspr2(CblasRowMajor, CblasUpper, INVALID, ALPHA, X, 1, Y, 1, A ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_sspr2(CblasRowMajor, CblasUpper, 0, ALPHA, X, 0, Y, 1, A ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_sspr2(CblasRowMajor, CblasUpper, 0, ALPHA, X, 1, Y, 0, A ); + chkxer(); + } else if (strncmp( sf,"cblas_ssyr",10)==0) { + cblas_rout = "cblas_ssyr"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_ssyr(INVALID, CblasUpper, 0, ALPHA, X, 1, A, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_ssyr(CblasColMajor, INVALID, 0, ALPHA, X, 1, A, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_ssyr(CblasColMajor, CblasUpper, INVALID, ALPHA, X, 1, A, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ssyr(CblasColMajor, CblasUpper, 0, ALPHA, X, 0, A, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_ssyr(CblasColMajor, CblasUpper, 2, ALPHA, X, 1, A, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_ssyr(CblasRowMajor, INVALID, 0, ALPHA, X, 1, A, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_ssyr(CblasRowMajor, CblasUpper, INVALID, ALPHA, X, 1, A, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ssyr(CblasRowMajor, CblasUpper, 0, ALPHA, X, 0, A, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_ssyr(CblasRowMajor, CblasUpper, 2, ALPHA, X, 1, A, 1 ); + chkxer(); + } else if (strncmp( sf,"cblas_sspr",10)==0) { + cblas_rout = "cblas_sspr"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_sspr(INVALID, CblasUpper, 0, ALPHA, X, 1, A ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_sspr(CblasColMajor, INVALID, 0, ALPHA, X, 1, A ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_sspr(CblasColMajor, CblasUpper, INVALID, ALPHA, X, 1, A ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_sspr(CblasColMajor, CblasUpper, 0, ALPHA, X, 0, A ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_sspr(CblasColMajor, INVALID, 0, ALPHA, X, 1, A ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_sspr(CblasColMajor, CblasUpper, INVALID, ALPHA, X, 1, A ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_sspr(CblasColMajor, CblasUpper, 0, ALPHA, X, 0, A ); + chkxer(); + } + if (cblas_ok == TRUE) + printf(" %-12s PASSED THE TESTS OF ERROR-EXITS\n", cblas_rout); + else + printf("******* %s FAILED THE TESTS OF ERROR-EXITS *******\n",cblas_rout); +} diff --git a/CBLAS/testing/c_s3chke.c b/CBLAS/testing/c_s3chke.c new file mode 100644 index 000000000..1b2a536c5 --- /dev/null +++ b/CBLAS/testing/c_s3chke.c @@ -0,0 +1,1273 @@ +#include +#include +#include "cblas.h" +#include "cblas_test.h" + +int cblas_ok, cblas_lerr, cblas_info; +int link_xerbla=TRUE; +char *cblas_rout; + +#ifdef F77_Char +void F77_xerbla(F77_Char F77_srname, void *vinfo); +#else +void F77_xerbla(char *srname, void *vinfo); +#endif + +void chkxer(void) { + extern int cblas_ok, cblas_lerr, cblas_info; + extern int link_xerbla; + extern char *cblas_rout; + if (cblas_lerr == 1 ) { + printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %d NOT DETECTED BY %s *****\n", cblas_info, cblas_rout); + cblas_ok = 0 ; + } + cblas_lerr = 1 ; +} + +void F77_s3chke(char *rout) { + char *sf = ( rout ) ; + float A[2] = {0.0,0.0}, + B[2] = {0.0,0.0}, + C[2] = {0.0,0.0}, + ALPHA=0.0, BETA=0.0; + extern int cblas_info, cblas_lerr, cblas_ok; + extern int RowMajorStrg; + extern char *cblas_rout; + + if (link_xerbla) /* call these first to link */ + { + cblas_xerbla(cblas_info,cblas_rout,""); + F77_xerbla(cblas_rout,&cblas_info); + } + + cblas_ok = TRUE ; + cblas_lerr = PASSED ; + + if (strncmp( sf,"cblas_sgemm" ,11)==0) { + cblas_rout = "cblas_sgemm" ; + cblas_info = 1; + cblas_sgemm( INVALID, CblasNoTrans, CblasNoTrans, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 1; + cblas_sgemm( INVALID, CblasNoTrans, CblasTrans, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 1; + cblas_sgemm( INVALID, CblasTrans, CblasNoTrans, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 1; + cblas_sgemm( INVALID, CblasTrans, CblasTrans, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_sgemm( CblasColMajor, INVALID, CblasNoTrans, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_sgemm( CblasColMajor, INVALID, CblasTrans, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_sgemm( CblasColMajor, CblasNoTrans, INVALID, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_sgemm( CblasColMajor, CblasTrans, INVALID, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_sgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_sgemm( CblasColMajor, CblasNoTrans, CblasTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_sgemm( CblasColMajor, CblasTrans, CblasNoTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_sgemm( CblasColMajor, CblasTrans, CblasTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_sgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_sgemm( CblasColMajor, CblasNoTrans, CblasTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_sgemm( CblasColMajor, CblasTrans, CblasNoTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_sgemm( CblasColMajor, CblasTrans, CblasTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_sgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_sgemm( CblasColMajor, CblasNoTrans, CblasTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_sgemm( CblasColMajor, CblasTrans, CblasNoTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_sgemm( CblasColMajor, CblasTrans, CblasTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_sgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, 2, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_sgemm( CblasColMajor, CblasNoTrans, CblasTrans, 2, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_sgemm( CblasColMajor, CblasTrans, CblasNoTrans, 0, 0, 2, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_sgemm( CblasColMajor, CblasTrans, CblasTrans, 0, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_sgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, 0, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_sgemm( CblasColMajor, CblasTrans, CblasNoTrans, 0, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_sgemm( CblasColMajor, CblasNoTrans, CblasTrans, 0, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_sgemm( CblasColMajor, CblasTrans, CblasTrans, 0, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = FALSE; + cblas_sgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, 2, 0, 0, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = FALSE; + cblas_sgemm( CblasColMajor, CblasNoTrans, CblasTrans, 2, 0, 0, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = FALSE; + cblas_sgemm( CblasColMajor, CblasTrans, CblasNoTrans, 2, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = FALSE; + cblas_sgemm( CblasColMajor, CblasTrans, CblasTrans, 2, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + + cblas_info = 4; RowMajorStrg = TRUE; + cblas_sgemm( CblasRowMajor, CblasNoTrans, CblasNoTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_sgemm( CblasRowMajor, CblasNoTrans, CblasTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_sgemm( CblasRowMajor, CblasTrans, CblasNoTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_sgemm( CblasRowMajor, CblasTrans, CblasTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_sgemm( CblasRowMajor, CblasNoTrans, CblasNoTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_sgemm( CblasRowMajor, CblasNoTrans, CblasTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_sgemm( CblasRowMajor, CblasTrans, CblasNoTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_sgemm( CblasRowMajor, CblasTrans, CblasTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_sgemm( CblasRowMajor, CblasNoTrans, CblasNoTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_sgemm( CblasRowMajor, CblasNoTrans, CblasTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_sgemm( CblasRowMajor, CblasTrans, CblasNoTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_sgemm( CblasRowMajor, CblasTrans, CblasTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_sgemm( CblasRowMajor, CblasNoTrans, CblasNoTrans, 0, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_sgemm( CblasRowMajor, CblasNoTrans, CblasTrans, 0, 0, 2, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_sgemm( CblasRowMajor, CblasTrans, CblasNoTrans, 2, 0, 0, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_sgemm( CblasRowMajor, CblasTrans, CblasTrans, 2, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_sgemm( CblasRowMajor, CblasNoTrans, CblasNoTrans, 0, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_sgemm( CblasRowMajor, CblasTrans, CblasNoTrans, 0, 2, 0, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_sgemm( CblasRowMajor, CblasNoTrans, CblasTrans, 0, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_sgemm( CblasRowMajor, CblasTrans, CblasTrans, 0, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = TRUE; + cblas_sgemm( CblasRowMajor, CblasNoTrans, CblasNoTrans, 0, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = TRUE; + cblas_sgemm( CblasRowMajor, CblasNoTrans, CblasTrans, 0, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = TRUE; + cblas_sgemm( CblasRowMajor, CblasTrans, CblasNoTrans, 0, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = TRUE; + cblas_sgemm( CblasRowMajor, CblasTrans, CblasTrans, 0, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + + } else if (strncmp( sf,"cblas_ssymm" ,11)==0) { + cblas_rout = "cblas_ssymm" ; + + cblas_info = 1; + cblas_ssymm( INVALID, CblasRight, CblasLower, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_ssymm( CblasColMajor, INVALID, CblasUpper, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_ssymm( CblasColMajor, CblasLeft, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_ssymm( CblasColMajor, CblasLeft, CblasUpper, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_ssymm( CblasColMajor, CblasRight, CblasUpper, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_ssymm( CblasColMajor, CblasLeft, CblasLower, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_ssymm( CblasColMajor, CblasRight, CblasLower, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_ssymm( CblasColMajor, CblasLeft, CblasUpper, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_ssymm( CblasColMajor, CblasRight, CblasUpper, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_ssymm( CblasColMajor, CblasLeft, CblasLower, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_ssymm( CblasColMajor, CblasRight, CblasLower, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_ssymm( CblasColMajor, CblasLeft, CblasUpper, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_ssymm( CblasColMajor, CblasRight, CblasUpper, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_ssymm( CblasColMajor, CblasLeft, CblasLower, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_ssymm( CblasColMajor, CblasRight, CblasLower, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ssymm( CblasColMajor, CblasLeft, CblasUpper, 2, 0, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ssymm( CblasColMajor, CblasRight, CblasUpper, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ssymm( CblasColMajor, CblasLeft, CblasLower, 2, 0, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ssymm( CblasColMajor, CblasRight, CblasLower, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_ssymm( CblasColMajor, CblasLeft, CblasUpper, 2, 0, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_ssymm( CblasColMajor, CblasRight, CblasUpper, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_ssymm( CblasColMajor, CblasLeft, CblasLower, 2, 0, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_ssymm( CblasColMajor, CblasRight, CblasLower, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + + cblas_info = 4; RowMajorStrg = TRUE; + cblas_ssymm( CblasRowMajor, CblasLeft, CblasUpper, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_ssymm( CblasRowMajor, CblasRight, CblasUpper, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_ssymm( CblasRowMajor, CblasLeft, CblasLower, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_ssymm( CblasRowMajor, CblasRight, CblasLower, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_ssymm( CblasRowMajor, CblasLeft, CblasUpper, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_ssymm( CblasRowMajor, CblasRight, CblasUpper, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_ssymm( CblasRowMajor, CblasLeft, CblasLower, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_ssymm( CblasRowMajor, CblasRight, CblasLower, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_ssymm( CblasRowMajor, CblasLeft, CblasUpper, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_ssymm( CblasRowMajor, CblasRight, CblasUpper, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_ssymm( CblasRowMajor, CblasLeft, CblasLower, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_ssymm( CblasRowMajor, CblasRight, CblasLower, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ssymm( CblasRowMajor, CblasLeft, CblasUpper, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ssymm( CblasRowMajor, CblasRight, CblasUpper, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ssymm( CblasRowMajor, CblasLeft, CblasLower, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ssymm( CblasRowMajor, CblasRight, CblasLower, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_ssymm( CblasRowMajor, CblasLeft, CblasUpper, 0, 2, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_ssymm( CblasRowMajor, CblasRight, CblasUpper, 0, 2, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_ssymm( CblasRowMajor, CblasLeft, CblasLower, 0, 2, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_ssymm( CblasRowMajor, CblasRight, CblasLower, 0, 2, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + + } else if (strncmp( sf,"cblas_strmm" ,11)==0) { + cblas_rout = "cblas_strmm" ; + + cblas_info = 1; + cblas_strmm( INVALID, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasLeft, INVALID, CblasNoTrans, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasLeft, CblasUpper, INVALID, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + INVALID, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_strmm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + + cblas_info = 6; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_strmm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + + } else if (strncmp( sf,"cblas_strsm" ,11)==0) { + cblas_rout = "cblas_strsm" ; + + cblas_info = 1; + cblas_strsm( INVALID, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasLeft, INVALID, CblasNoTrans, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasLeft, CblasUpper, INVALID, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + INVALID, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_strsm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + + cblas_info = 6; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_strsm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + + } else if (strncmp( sf,"cblas_ssyrk" ,11)==0) { + cblas_rout = "cblas_ssyrk" ; + + cblas_info = 1; + cblas_ssyrk( INVALID, CblasUpper, CblasNoTrans, + 0, 0, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_ssyrk( CblasColMajor, INVALID, CblasNoTrans, + 0, 0, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_ssyrk( CblasColMajor, CblasUpper, INVALID, + 0, 0, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_ssyrk( CblasColMajor, CblasUpper, CblasNoTrans, + INVALID, 0, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_ssyrk( CblasColMajor, CblasUpper, CblasTrans, + INVALID, 0, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_ssyrk( CblasColMajor, CblasLower, CblasNoTrans, + INVALID, 0, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_ssyrk( CblasColMajor, CblasLower, CblasTrans, + INVALID, 0, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_ssyrk( CblasColMajor, CblasUpper, CblasNoTrans, + 0, INVALID, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_ssyrk( CblasColMajor, CblasUpper, CblasTrans, + 0, INVALID, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_ssyrk( CblasColMajor, CblasLower, CblasNoTrans, + 0, INVALID, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_ssyrk( CblasColMajor, CblasLower, CblasTrans, + 0, INVALID, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_ssyrk( CblasRowMajor, CblasUpper, CblasNoTrans, + 0, 2, ALPHA, A, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_ssyrk( CblasRowMajor, CblasUpper, CblasTrans, + 2, 0, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_ssyrk( CblasRowMajor, CblasLower, CblasNoTrans, + 0, 2, ALPHA, A, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_ssyrk( CblasRowMajor, CblasLower, CblasTrans, + 2, 0, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_ssyrk( CblasColMajor, CblasUpper, CblasNoTrans, + 2, 0, ALPHA, A, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_ssyrk( CblasColMajor, CblasUpper, CblasTrans, + 0, 2, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_ssyrk( CblasColMajor, CblasLower, CblasNoTrans, + 2, 0, ALPHA, A, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_ssyrk( CblasColMajor, CblasLower, CblasTrans, + 0, 2, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_ssyrk( CblasRowMajor, CblasUpper, CblasNoTrans, + 2, 0, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_ssyrk( CblasRowMajor, CblasUpper, CblasTrans, + 2, 0, ALPHA, A, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_ssyrk( CblasRowMajor, CblasLower, CblasNoTrans, + 2, 0, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_ssyrk( CblasRowMajor, CblasLower, CblasTrans, + 2, 0, ALPHA, A, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_ssyrk( CblasColMajor, CblasUpper, CblasNoTrans, + 2, 0, ALPHA, A, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_ssyrk( CblasColMajor, CblasUpper, CblasTrans, + 2, 0, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_ssyrk( CblasColMajor, CblasLower, CblasNoTrans, + 2, 0, ALPHA, A, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_ssyrk( CblasColMajor, CblasLower, CblasTrans, + 2, 0, ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + + } else if (strncmp( sf,"cblas_ssyr2k" ,12)==0) { + cblas_rout = "cblas_ssyr2k" ; + + cblas_info = 1; + cblas_ssyr2k( INVALID, CblasUpper, CblasNoTrans, + 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_ssyr2k( CblasColMajor, INVALID, CblasNoTrans, + 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_ssyr2k( CblasColMajor, CblasUpper, INVALID, + 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_ssyr2k( CblasColMajor, CblasUpper, CblasNoTrans, + INVALID, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_ssyr2k( CblasColMajor, CblasUpper, CblasTrans, + INVALID, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_ssyr2k( CblasColMajor, CblasLower, CblasNoTrans, + INVALID, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_ssyr2k( CblasColMajor, CblasLower, CblasTrans, + INVALID, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_ssyr2k( CblasColMajor, CblasUpper, CblasNoTrans, + 0, INVALID, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_ssyr2k( CblasColMajor, CblasUpper, CblasTrans, + 0, INVALID, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_ssyr2k( CblasColMajor, CblasLower, CblasNoTrans, + 0, INVALID, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_ssyr2k( CblasColMajor, CblasLower, CblasTrans, + 0, INVALID, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_ssyr2k( CblasRowMajor, CblasUpper, CblasNoTrans, + 0, 2, ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_ssyr2k( CblasRowMajor, CblasUpper, CblasTrans, + 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_ssyr2k( CblasRowMajor, CblasLower, CblasNoTrans, + 0, 2, ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_ssyr2k( CblasRowMajor, CblasLower, CblasTrans, + 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_ssyr2k( CblasColMajor, CblasUpper, CblasNoTrans, + 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_ssyr2k( CblasColMajor, CblasUpper, CblasTrans, + 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_ssyr2k( CblasColMajor, CblasLower, CblasNoTrans, + 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_ssyr2k( CblasColMajor, CblasLower, CblasTrans, + 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ssyr2k( CblasRowMajor, CblasUpper, CblasNoTrans, + 0, 2, ALPHA, A, 2, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ssyr2k( CblasRowMajor, CblasUpper, CblasTrans, + 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ssyr2k( CblasRowMajor, CblasLower, CblasNoTrans, + 0, 2, ALPHA, A, 2, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ssyr2k( CblasRowMajor, CblasLower, CblasTrans, + 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ssyr2k( CblasColMajor, CblasUpper, CblasNoTrans, + 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ssyr2k( CblasColMajor, CblasUpper, CblasTrans, + 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ssyr2k( CblasColMajor, CblasLower, CblasNoTrans, + 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ssyr2k( CblasColMajor, CblasLower, CblasTrans, + 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_ssyr2k( CblasRowMajor, CblasUpper, CblasNoTrans, + 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_ssyr2k( CblasRowMajor, CblasUpper, CblasTrans, + 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_ssyr2k( CblasRowMajor, CblasLower, CblasNoTrans, + 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_ssyr2k( CblasRowMajor, CblasLower, CblasTrans, + 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_ssyr2k( CblasColMajor, CblasUpper, CblasNoTrans, + 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_ssyr2k( CblasColMajor, CblasUpper, CblasTrans, + 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_ssyr2k( CblasColMajor, CblasLower, CblasNoTrans, + 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_ssyr2k( CblasColMajor, CblasLower, CblasTrans, + 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + } + if (cblas_ok == TRUE ) + printf(" %-12s PASSED THE TESTS OF ERROR-EXITS\n", cblas_rout); + else + printf("***** %s FAILED THE TESTS OF ERROR-EXITS *******\n",cblas_rout); +} diff --git a/CBLAS/testing/c_sblas1.c b/CBLAS/testing/c_sblas1.c new file mode 100644 index 000000000..da72b7229 --- /dev/null +++ b/CBLAS/testing/c_sblas1.c @@ -0,0 +1,82 @@ +/* + * c_sblas1.c + * + * The program is a C wrapper for scblat1. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas_test.h" +#include "cblas.h" +float F77_sasum(const int *N, float *X, const int *incX) +{ + return cblas_sasum(*N, X, *incX); +} + +void F77_saxpy(const int *N, const float *alpha, const float *X, + const int *incX, float *Y, const int *incY) +{ + cblas_saxpy(*N, *alpha, X, *incX, Y, *incY); + return; +} + +float F77_scasum(const int *N, void *X, const int *incX) +{ + return cblas_scasum(*N, X, *incX); +} + +float F77_scnrm2(const int *N, const void *X, const int *incX) +{ + return cblas_scnrm2(*N, X, *incX); +} + +void F77_scopy(const int *N, const float *X, const int *incX, + float *Y, const int *incY) +{ + cblas_scopy(*N, X, *incX, Y, *incY); + return; +} + +float F77_sdot(const int *N, const float *X, const int *incX, + const float *Y, const int *incY) +{ + return cblas_sdot(*N, X, *incX, Y, *incY); +} + +float F77_snrm2(const int *N, const float *X, const int *incX) +{ + return cblas_snrm2(*N, X, *incX); +} + +void F77_srotg( float *a, float *b, float *c, float *s) +{ + cblas_srotg(a,b,c,s); + return; +} + +void F77_srot( const int *N, float *X, const int *incX, float *Y, + const int *incY, const float *c, const float *s) +{ + cblas_srot(*N,X,*incX,Y,*incY,*c,*s); + return; +} + +void F77_sscal(const int *N, const float *alpha, float *X, + const int *incX) +{ + cblas_sscal(*N, *alpha, X, *incX); + return; +} + +void F77_sswap( const int *N, float *X, const int *incX, + float *Y, const int *incY) +{ + cblas_sswap(*N,X,*incX,Y,*incY); + return; +} + +int F77_isamax(const int *N, const float *X, const int *incX) +{ + if (*N < 1 || *incX < 1) return(0); + return (cblas_isamax(*N, X, *incX)+1); +} diff --git a/CBLAS/testing/c_sblas2.c b/CBLAS/testing/c_sblas2.c new file mode 100644 index 000000000..8a6776513 --- /dev/null +++ b/CBLAS/testing/c_sblas2.c @@ -0,0 +1,579 @@ +/* + * Written by D.P. Manley, Digital Equipment Corporation. + * Prefixed "C_" to BLAS routines and their declarations. + * + * Modified by T. H. Do, 1/23/98, SGI/CRAY Research. + */ +#include +#include "cblas.h" +#include "cblas_test.h" + +void F77_sgemv(int *order, char *transp, int *m, int *n, float *alpha, + float *a, int *lda, float *x, int *incx, float *beta, + float *y, int *incy ) { + + float *A; + int i,j,LDA; + enum CBLAS_TRANSPOSE trans; + + get_transpose_type(transp, &trans); + if (*order == TEST_ROW_MJR) { + LDA = *n+1; + A = ( float* )malloc( (*m)*LDA*sizeof( float ) ); + for( i=0; i<*m; i++ ) + for( j=0; j<*n; j++ ) + A[ LDA*i+j ]=a[ (*lda)*j+i ]; + cblas_sgemv( CblasRowMajor, trans, + *m, *n, *alpha, A, LDA, x, *incx, *beta, y, *incy ); + free(A); + } + else if (*order == TEST_COL_MJR) + cblas_sgemv( CblasColMajor, trans, + *m, *n, *alpha, a, *lda, x, *incx, *beta, y, *incy ); + else + cblas_sgemv( UNDEFINED, trans, + *m, *n, *alpha, a, *lda, x, *incx, *beta, y, *incy ); +} + +void F77_sger(int *order, int *m, int *n, float *alpha, float *x, int *incx, + float *y, int *incy, float *a, int *lda ) { + + float *A; + int i,j,LDA; + + if (*order == TEST_ROW_MJR) { + LDA = *n+1; + A = ( float* )malloc( (*m)*LDA*sizeof( float ) ); + + for( i=0; i<*m; i++ ) { + for( j=0; j<*n; j++ ) + A[ LDA*i+j ]=a[ (*lda)*j+i ]; + } + + cblas_sger(CblasRowMajor, *m, *n, *alpha, x, *incx, y, *incy, A, LDA ); + for( i=0; i<*m; i++ ) + for( j=0; j<*n; j++ ) + a[ (*lda)*j+i ]=A[ LDA*i+j ]; + free(A); + } + else + cblas_sger( CblasColMajor, *m, *n, *alpha, x, *incx, y, *incy, a, *lda ); +} + +void F77_strmv(int *order, char *uplow, char *transp, char *diagn, + int *n, float *a, int *lda, float *x, int *incx) { + float *A; + int i,j,LDA; + enum CBLAS_TRANSPOSE trans; + enum CBLAS_UPLO uplo; + enum CBLAS_DIAG diag; + + get_transpose_type(transp,&trans); + get_uplo_type(uplow,&uplo); + get_diag_type(diagn,&diag); + + if (*order == TEST_ROW_MJR) { + LDA = *n+1; + A = ( float* )malloc( (*n)*LDA*sizeof( float ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) + A[ LDA*i+j ]=a[ (*lda)*j+i ]; + cblas_strmv(CblasRowMajor, uplo, trans, diag, *n, A, LDA, x, *incx); + free(A); + } + else if (*order == TEST_COL_MJR) + cblas_strmv(CblasColMajor, uplo, trans, diag, *n, a, *lda, x, *incx); + else { + cblas_strmv(UNDEFINED, uplo, trans, diag, *n, a, *lda, x, *incx); + } +} + +void F77_strsv(int *order, char *uplow, char *transp, char *diagn, + int *n, float *a, int *lda, float *x, int *incx ) { + float *A; + int i,j,LDA; + enum CBLAS_TRANSPOSE trans; + enum CBLAS_UPLO uplo; + enum CBLAS_DIAG diag; + + get_transpose_type(transp,&trans); + get_uplo_type(uplow,&uplo); + get_diag_type(diagn,&diag); + + if (*order == TEST_ROW_MJR) { + LDA = *n+1; + A = ( float* )malloc( (*n)*LDA*sizeof( float ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) + A[ LDA*i+j ]=a[ (*lda)*j+i ]; + cblas_strsv(CblasRowMajor, uplo, trans, diag, *n, A, LDA, x, *incx ); + free(A); + } + else + cblas_strsv(CblasColMajor, uplo, trans, diag, *n, a, *lda, x, *incx ); +} +void F77_ssymv(int *order, char *uplow, int *n, float *alpha, float *a, + int *lda, float *x, int *incx, float *beta, float *y, + int *incy) { + float *A; + int i,j,LDA; + enum CBLAS_UPLO uplo; + + get_uplo_type(uplow,&uplo); + + if (*order == TEST_ROW_MJR) { + LDA = *n+1; + A = ( float* )malloc( (*n)*LDA*sizeof( float ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) + A[ LDA*i+j ]=a[ (*lda)*j+i ]; + cblas_ssymv(CblasRowMajor, uplo, *n, *alpha, A, LDA, x, *incx, + *beta, y, *incy ); + free(A); + } + else + cblas_ssymv(CblasColMajor, uplo, *n, *alpha, a, *lda, x, *incx, + *beta, y, *incy ); +} + +void F77_ssyr(int *order, char *uplow, int *n, float *alpha, float *x, + int *incx, float *a, int *lda) { + float *A; + int i,j,LDA; + enum CBLAS_UPLO uplo; + + get_uplo_type(uplow,&uplo); + + if (*order == TEST_ROW_MJR) { + LDA = *n+1; + A = ( float* )malloc( (*n)*LDA*sizeof( float ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) + A[ LDA*i+j ]=a[ (*lda)*j+i ]; + cblas_ssyr(CblasRowMajor, uplo, *n, *alpha, x, *incx, A, LDA); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) + a[ (*lda)*j+i ]=A[ LDA*i+j ]; + free(A); + } + else + cblas_ssyr(CblasColMajor, uplo, *n, *alpha, x, *incx, a, *lda); +} + +void F77_ssyr2(int *order, char *uplow, int *n, float *alpha, float *x, + int *incx, float *y, int *incy, float *a, int *lda) { + float *A; + int i,j,LDA; + enum CBLAS_UPLO uplo; + + get_uplo_type(uplow,&uplo); + + if (*order == TEST_ROW_MJR) { + LDA = *n+1; + A = ( float* )malloc( (*n)*LDA*sizeof( float ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) + A[ LDA*i+j ]=a[ (*lda)*j+i ]; + cblas_ssyr2(CblasRowMajor, uplo, *n, *alpha, x, *incx, y, *incy, A, LDA); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) + a[ (*lda)*j+i ]=A[ LDA*i+j ]; + free(A); + } + else + cblas_ssyr2(CblasColMajor, uplo, *n, *alpha, x, *incx, y, *incy, a, *lda); +} + +void F77_sgbmv(int *order, char *transp, int *m, int *n, int *kl, int *ku, + float *alpha, float *a, int *lda, float *x, int *incx, + float *beta, float *y, int *incy ) { + + float *A; + int i,irow,j,jcol,LDA; + enum CBLAS_TRANSPOSE trans; + + get_transpose_type(transp, &trans); + + if (*order == TEST_ROW_MJR) { + LDA = *ku+*kl+2; + A = ( float* )malloc( (*n+*kl)*LDA*sizeof( float ) ); + for( i=0; i<*ku; i++ ){ + irow=*ku+*kl-i; + jcol=(*ku)-i; + for( j=jcol; j<*n; j++ ) + A[ LDA*(j-jcol)+irow ]=a[ (*lda)*j+i ]; + } + i=*ku; + irow=*ku+*kl-i; + for( j=0; j<*n; j++ ) + A[ LDA*j+irow ]=a[ (*lda)*j+i ]; + for( i=*ku+1; i<*ku+*kl+1; i++ ){ + irow=*ku+*kl-i; + jcol=i-(*ku); + for( j=jcol; j<(*n+*kl); j++ ) + A[ LDA*j+irow ]=a[ (*lda)*(j-jcol)+i ]; + } + cblas_sgbmv( CblasRowMajor, trans, *m, *n, *kl, *ku, *alpha, + A, LDA, x, *incx, *beta, y, *incy ); + free(A); + } + else + cblas_sgbmv( CblasColMajor, trans, *m, *n, *kl, *ku, *alpha, + a, *lda, x, *incx, *beta, y, *incy ); +} + +void F77_stbmv(int *order, char *uplow, char *transp, char *diagn, + int *n, int *k, float *a, int *lda, float *x, int *incx) { + float *A; + int irow, jcol, i, j, LDA; + enum CBLAS_TRANSPOSE trans; + enum CBLAS_UPLO uplo; + enum CBLAS_DIAG diag; + + get_transpose_type(transp,&trans); + get_uplo_type(uplow,&uplo); + get_diag_type(diagn,&diag); + + if (*order == TEST_ROW_MJR) { + LDA = *k+1; + A = ( float* )malloc( (*n+*k)*LDA*sizeof( float ) ); + if (uplo == CblasUpper) { + for( i=0; i<*k; i++ ){ + irow=*k-i; + jcol=(*k)-i; + for( j=jcol; j<*n; j++ ) + A[ LDA*(j-jcol)+irow ]=a[ (*lda)*j+i ]; + } + i=*k; + irow=*k-i; + for( j=0; j<*n; j++ ) + A[ LDA*j+irow ]=a[ (*lda)*j+i ]; + } + else { + i=0; + irow=*k-i; + for( j=0; j<*n; j++ ) + A[ LDA*j+irow ]=a[ (*lda)*j+i ]; + for( i=1; i<*k+1; i++ ){ + irow=*k-i; + jcol=i; + for( j=jcol; j<(*n+*k); j++ ) + A[ LDA*j+irow ]=a[ (*lda)*(j-jcol)+i ]; + } + } + cblas_stbmv(CblasRowMajor, uplo, trans, diag, *n, *k, A, LDA, x, *incx); + free(A); + } + else + cblas_stbmv(CblasColMajor, uplo, trans, diag, *n, *k, a, *lda, x, *incx); +} + +void F77_stbsv(int *order, char *uplow, char *transp, char *diagn, + int *n, int *k, float *a, int *lda, float *x, int *incx) { + float *A; + int irow, jcol, i, j, LDA; + enum CBLAS_TRANSPOSE trans; + enum CBLAS_UPLO uplo; + enum CBLAS_DIAG diag; + + get_transpose_type(transp,&trans); + get_uplo_type(uplow,&uplo); + get_diag_type(diagn,&diag); + + if (*order == TEST_ROW_MJR) { + LDA = *k+1; + A = ( float* )malloc( (*n+*k)*LDA*sizeof( float ) ); + if (uplo == CblasUpper) { + for( i=0; i<*k; i++ ){ + irow=*k-i; + jcol=(*k)-i; + for( j=jcol; j<*n; j++ ) + A[ LDA*(j-jcol)+irow ]=a[ (*lda)*j+i ]; + } + i=*k; + irow=*k-i; + for( j=0; j<*n; j++ ) + A[ LDA*j+irow ]=a[ (*lda)*j+i ]; + } + else { + i=0; + irow=*k-i; + for( j=0; j<*n; j++ ) + A[ LDA*j+irow ]=a[ (*lda)*j+i ]; + for( i=1; i<*k+1; i++ ){ + irow=*k-i; + jcol=i; + for( j=jcol; j<(*n+*k); j++ ) + A[ LDA*j+irow ]=a[ (*lda)*(j-jcol)+i ]; + } + } + cblas_stbsv(CblasRowMajor, uplo, trans, diag, *n, *k, A, LDA, x, *incx); + free(A); + } + else + cblas_stbsv(CblasColMajor, uplo, trans, diag, *n, *k, a, *lda, x, *incx); +} + +void F77_ssbmv(int *order, char *uplow, int *n, int *k, float *alpha, + float *a, int *lda, float *x, int *incx, float *beta, + float *y, int *incy) { + float *A; + int i,j,irow,jcol,LDA; + enum CBLAS_UPLO uplo; + + get_uplo_type(uplow,&uplo); + + if (*order == TEST_ROW_MJR) { + LDA = *k+1; + A = ( float* )malloc( (*n+*k)*LDA*sizeof( float ) ); + if (uplo == CblasUpper) { + for( i=0; i<*k; i++ ){ + irow=*k-i; + jcol=(*k)-i; + for( j=jcol; j<*n; j++ ) + A[ LDA*(j-jcol)+irow ]=a[ (*lda)*j+i ]; + } + i=*k; + irow=*k-i; + for( j=0; j<*n; j++ ) + A[ LDA*j+irow ]=a[ (*lda)*j+i ]; + } + else { + i=0; + irow=*k-i; + for( j=0; j<*n; j++ ) + A[ LDA*j+irow ]=a[ (*lda)*j+i ]; + for( i=1; i<*k+1; i++ ){ + irow=*k-i; + jcol=i; + for( j=jcol; j<(*n+*k); j++ ) + A[ LDA*j+irow ]=a[ (*lda)*(j-jcol)+i ]; + } + } + cblas_ssbmv(CblasRowMajor, uplo, *n, *k, *alpha, A, LDA, x, *incx, + *beta, y, *incy ); + free(A); + } + else + cblas_ssbmv(CblasColMajor, uplo, *n, *k, *alpha, a, *lda, x, *incx, + *beta, y, *incy ); +} + +void F77_sspmv(int *order, char *uplow, int *n, float *alpha, float *ap, + float *x, int *incx, float *beta, float *y, int *incy) { + float *A,*AP; + int i,j,k,LDA; + enum CBLAS_UPLO uplo; + + get_uplo_type(uplow,&uplo); + + if (*order == TEST_ROW_MJR) { + LDA = *n; + A = ( float* )malloc( LDA*LDA*sizeof( float ) ); + AP = ( float* )malloc( (((LDA+1)*LDA)/2)*sizeof( float ) ); + if (uplo == CblasUpper) { + for( j=0, k=0; j<*n; j++ ) + for( i=0; i +#include +#include "cblas.h" +#include "cblas_test.h" + +void F77_sgemm(int *order, char *transpa, char *transpb, int *m, int *n, + int *k, float *alpha, float *a, int *lda, float *b, int *ldb, + float *beta, float *c, int *ldc ) { + + float *A, *B, *C; + int i,j,LDA, LDB, LDC; + enum CBLAS_TRANSPOSE transa, transb; + + get_transpose_type(transpa, &transa); + get_transpose_type(transpb, &transb); + + if (*order == TEST_ROW_MJR) { + if (transa == CblasNoTrans) { + LDA = *k+1; + A = (float *)malloc( (*m)*LDA*sizeof( float ) ); + for( i=0; i<*m; i++ ) + for( j=0; j<*k; j++ ) + A[i*LDA+j]=a[j*(*lda)+i]; + } + else { + LDA = *m+1; + A = ( float* )malloc( LDA*(*k)*sizeof( float ) ); + for( i=0; i<*k; i++ ) + for( j=0; j<*m; j++ ) + A[i*LDA+j]=a[j*(*lda)+i]; + } + if (transb == CblasNoTrans) { + LDB = *n+1; + B = ( float* )malloc( (*k)*LDB*sizeof( float ) ); + for( i=0; i<*k; i++ ) + for( j=0; j<*n; j++ ) + B[i*LDB+j]=b[j*(*ldb)+i]; + } + else { + LDB = *k+1; + B = ( float* )malloc( LDB*(*n)*sizeof( float ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*k; j++ ) + B[i*LDB+j]=b[j*(*ldb)+i]; + } + LDC = *n+1; + C = ( float* )malloc( (*m)*LDC*sizeof( float ) ); + for( j=0; j<*n; j++ ) + for( i=0; i<*m; i++ ) + C[i*LDC+j]=c[j*(*ldc)+i]; + cblas_sgemm( CblasRowMajor, transa, transb, *m, *n, *k, *alpha, A, LDA, + B, LDB, *beta, C, LDC ); + for( j=0; j<*n; j++ ) + for( i=0; i<*m; i++ ) + c[j*(*ldc)+i]=C[i*LDC+j]; + free(A); + free(B); + free(C); + } + else if (*order == TEST_COL_MJR) + cblas_sgemm( CblasColMajor, transa, transb, *m, *n, *k, *alpha, a, *lda, + b, *ldb, *beta, c, *ldc ); + else + cblas_sgemm( UNDEFINED, transa, transb, *m, *n, *k, *alpha, a, *lda, + b, *ldb, *beta, c, *ldc ); +} +void F77_ssymm(int *order, char *rtlf, char *uplow, int *m, int *n, + float *alpha, float *a, int *lda, float *b, int *ldb, + float *beta, float *c, int *ldc ) { + + float *A, *B, *C; + int i,j,LDA, LDB, LDC; + enum CBLAS_UPLO uplo; + enum CBLAS_SIDE side; + + get_uplo_type(uplow,&uplo); + get_side_type(rtlf,&side); + + if (*order == TEST_ROW_MJR) { + if (side == CblasLeft) { + LDA = *m+1; + A = ( float* )malloc( (*m)*LDA*sizeof( float ) ); + for( i=0; i<*m; i++ ) + for( j=0; j<*m; j++ ) + A[i*LDA+j]=a[j*(*lda)+i]; + } + else{ + LDA = *n+1; + A = ( float* )malloc( (*n)*LDA*sizeof( float ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) + A[i*LDA+j]=a[j*(*lda)+i]; + } + LDB = *n+1; + B = ( float* )malloc( (*m)*LDB*sizeof( float ) ); + for( i=0; i<*m; i++ ) + for( j=0; j<*n; j++ ) + B[i*LDB+j]=b[j*(*ldb)+i]; + LDC = *n+1; + C = ( float* )malloc( (*m)*LDC*sizeof( float ) ); + for( j=0; j<*n; j++ ) + for( i=0; i<*m; i++ ) + C[i*LDC+j]=c[j*(*ldc)+i]; + cblas_ssymm( CblasRowMajor, side, uplo, *m, *n, *alpha, A, LDA, B, LDB, + *beta, C, LDC ); + for( j=0; j<*n; j++ ) + for( i=0; i<*m; i++ ) + c[j*(*ldc)+i]=C[i*LDC+j]; + free(A); + free(B); + free(C); + } + else if (*order == TEST_COL_MJR) + cblas_ssymm( CblasColMajor, side, uplo, *m, *n, *alpha, a, *lda, b, *ldb, + *beta, c, *ldc ); + else + cblas_ssymm( UNDEFINED, side, uplo, *m, *n, *alpha, a, *lda, b, *ldb, + *beta, c, *ldc ); +} + +void F77_ssyrk(int *order, char *uplow, char *transp, int *n, int *k, + float *alpha, float *a, int *lda, + float *beta, float *c, int *ldc ) { + + int i,j,LDA,LDC; + float *A, *C; + enum CBLAS_UPLO uplo; + enum CBLAS_TRANSPOSE trans; + + get_uplo_type(uplow,&uplo); + get_transpose_type(transp,&trans); + + if (*order == TEST_ROW_MJR) { + if (trans == CblasNoTrans) { + LDA = *k+1; + A = ( float* )malloc( (*n)*LDA*sizeof( float ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*k; j++ ) + A[i*LDA+j]=a[j*(*lda)+i]; + } + else{ + LDA = *n+1; + A = ( float* )malloc( (*k)*LDA*sizeof( float ) ); + for( i=0; i<*k; i++ ) + for( j=0; j<*n; j++ ) + A[i*LDA+j]=a[j*(*lda)+i]; + } + LDC = *n+1; + C = ( float* )malloc( (*n)*LDC*sizeof( float ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) + C[i*LDC+j]=c[j*(*ldc)+i]; + cblas_ssyrk(CblasRowMajor, uplo, trans, *n, *k, *alpha, A, LDA, *beta, + C, LDC ); + for( j=0; j<*n; j++ ) + for( i=0; i<*n; i++ ) + c[j*(*ldc)+i]=C[i*LDC+j]; + free(A); + free(C); + } + else if (*order == TEST_COL_MJR) + cblas_ssyrk(CblasColMajor, uplo, trans, *n, *k, *alpha, a, *lda, *beta, + c, *ldc ); + else + cblas_ssyrk(UNDEFINED, uplo, trans, *n, *k, *alpha, a, *lda, *beta, + c, *ldc ); +} + +void F77_ssyr2k(int *order, char *uplow, char *transp, int *n, int *k, + float *alpha, float *a, int *lda, float *b, int *ldb, + float *beta, float *c, int *ldc ) { + int i,j,LDA,LDB,LDC; + float *A, *B, *C; + enum CBLAS_UPLO uplo; + enum CBLAS_TRANSPOSE trans; + + get_uplo_type(uplow,&uplo); + get_transpose_type(transp,&trans); + + if (*order == TEST_ROW_MJR) { + if (trans == CblasNoTrans) { + LDA = *k+1; + LDB = *k+1; + A = ( float* )malloc( (*n)*LDA*sizeof( float ) ); + B = ( float* )malloc( (*n)*LDB*sizeof( float ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*k; j++ ) { + A[i*LDA+j]=a[j*(*lda)+i]; + B[i*LDB+j]=b[j*(*ldb)+i]; + } + } + else { + LDA = *n+1; + LDB = *n+1; + A = ( float* )malloc( LDA*(*k)*sizeof( float ) ); + B = ( float* )malloc( LDB*(*k)*sizeof( float ) ); + for( i=0; i<*k; i++ ) + for( j=0; j<*n; j++ ){ + A[i*LDA+j]=a[j*(*lda)+i]; + B[i*LDB+j]=b[j*(*ldb)+i]; + } + } + LDC = *n+1; + C = ( float* )malloc( (*n)*LDC*sizeof( float ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) + C[i*LDC+j]=c[j*(*ldc)+i]; + cblas_ssyr2k(CblasRowMajor, uplo, trans, *n, *k, *alpha, A, LDA, + B, LDB, *beta, C, LDC ); + for( j=0; j<*n; j++ ) + for( i=0; i<*n; i++ ) + c[j*(*ldc)+i]=C[i*LDC+j]; + free(A); + free(B); + free(C); + } + else if (*order == TEST_COL_MJR) + cblas_ssyr2k(CblasColMajor, uplo, trans, *n, *k, *alpha, a, *lda, + b, *ldb, *beta, c, *ldc ); + else + cblas_ssyr2k(UNDEFINED, uplo, trans, *n, *k, *alpha, a, *lda, + b, *ldb, *beta, c, *ldc ); +} +void F77_strmm(int *order, char *rtlf, char *uplow, char *transp, char *diagn, + int *m, int *n, float *alpha, float *a, int *lda, float *b, + int *ldb) { + int i,j,LDA,LDB; + float *A, *B; + enum CBLAS_SIDE side; + enum CBLAS_DIAG diag; + enum CBLAS_UPLO uplo; + enum CBLAS_TRANSPOSE trans; + + get_uplo_type(uplow,&uplo); + get_transpose_type(transp,&trans); + get_diag_type(diagn,&diag); + get_side_type(rtlf,&side); + + if (*order == TEST_ROW_MJR) { + if (side == CblasLeft) { + LDA = *m+1; + A = ( float* )malloc( (*m)*LDA*sizeof( float ) ); + for( i=0; i<*m; i++ ) + for( j=0; j<*m; j++ ) + A[i*LDA+j]=a[j*(*lda)+i]; + } + else{ + LDA = *n+1; + A = ( float* )malloc( (*n)*LDA*sizeof( float ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) + A[i*LDA+j]=a[j*(*lda)+i]; + } + LDB = *n+1; + B = ( float* )malloc( (*m)*LDB*sizeof( float ) ); + for( i=0; i<*m; i++ ) + for( j=0; j<*n; j++ ) + B[i*LDB+j]=b[j*(*ldb)+i]; + cblas_strmm(CblasRowMajor, side, uplo, trans, diag, *m, *n, *alpha, + A, LDA, B, LDB ); + for( j=0; j<*n; j++ ) + for( i=0; i<*m; i++ ) + b[j*(*ldb)+i]=B[i*LDB+j]; + free(A); + free(B); + } + else if (*order == TEST_COL_MJR) + cblas_strmm(CblasColMajor, side, uplo, trans, diag, *m, *n, *alpha, + a, *lda, b, *ldb); + else + cblas_strmm(UNDEFINED, side, uplo, trans, diag, *m, *n, *alpha, + a, *lda, b, *ldb); +} + +void F77_strsm(int *order, char *rtlf, char *uplow, char *transp, char *diagn, + int *m, int *n, float *alpha, float *a, int *lda, float *b, + int *ldb) { + int i,j,LDA,LDB; + float *A, *B; + enum CBLAS_SIDE side; + enum CBLAS_DIAG diag; + enum CBLAS_UPLO uplo; + enum CBLAS_TRANSPOSE trans; + + get_uplo_type(uplow,&uplo); + get_transpose_type(transp,&trans); + get_diag_type(diagn,&diag); + get_side_type(rtlf,&side); + + if (*order == TEST_ROW_MJR) { + if (side == CblasLeft) { + LDA = *m+1; + A = ( float* )malloc( (*m)*LDA*sizeof( float ) ); + for( i=0; i<*m; i++ ) + for( j=0; j<*m; j++ ) + A[i*LDA+j]=a[j*(*lda)+i]; + } + else{ + LDA = *n+1; + A = ( float* )malloc( (*n)*LDA*sizeof( float ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) + A[i*LDA+j]=a[j*(*lda)+i]; + } + LDB = *n+1; + B = ( float* )malloc( (*m)*LDB*sizeof( float ) ); + for( i=0; i<*m; i++ ) + for( j=0; j<*n; j++ ) + B[i*LDB+j]=b[j*(*ldb)+i]; + cblas_strsm(CblasRowMajor, side, uplo, trans, diag, *m, *n, *alpha, + A, LDA, B, LDB ); + for( j=0; j<*n; j++ ) + for( i=0; i<*m; i++ ) + b[j*(*ldb)+i]=B[i*LDB+j]; + free(A); + free(B); + } + else if (*order == TEST_COL_MJR) + cblas_strsm(CblasColMajor, side, uplo, trans, diag, *m, *n, *alpha, + a, *lda, b, *ldb); + else + cblas_strsm(UNDEFINED, side, uplo, trans, diag, *m, *n, *alpha, + a, *lda, b, *ldb); +} diff --git a/CBLAS/testing/c_sblat1.f b/CBLAS/testing/c_sblat1.f new file mode 100644 index 000000000..de2b0380b --- /dev/null +++ b/CBLAS/testing/c_sblat1.f @@ -0,0 +1,728 @@ + PROGRAM SCBLAT1 +* Test program for the REAL Level 1 CBLAS. +* Based upon the original CBLAS test routine together with: +* F06EAF Example Program Text +* .. Parameters .. + INTEGER NOUT + PARAMETER (NOUT=6) +* .. Scalars in Common .. + INTEGER ICASE, INCX, INCY, MODE, N + LOGICAL PASS +* .. Local Scalars .. + REAL SFAC + INTEGER IC +* .. External Subroutines .. + EXTERNAL CHECK0, CHECK1, CHECK2, CHECK3, HEADER +* .. Common blocks .. + COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS +* .. Data statements .. + DATA SFAC/9.765625E-4/ +* .. Executable Statements .. + WRITE (NOUT,99999) + DO 20 IC = 1, 10 + ICASE = IC + CALL HEADER +* +* .. Initialize PASS, INCX, INCY, and MODE for a new case. .. +* .. the value 9999 for INCX, INCY or MODE will appear in the .. +* .. detailed output, if any, for cases that do not involve .. +* .. these parameters .. +* + PASS = .TRUE. + INCX = 9999 + INCY = 9999 + MODE = 9999 + IF (ICASE.EQ.3) THEN + CALL CHECK0(SFAC) + ELSE IF (ICASE.EQ.7 .OR. ICASE.EQ.8 .OR. ICASE.EQ.9 .OR. + + ICASE.EQ.10) THEN + CALL CHECK1(SFAC) + ELSE IF (ICASE.EQ.1 .OR. ICASE.EQ.2 .OR. ICASE.EQ.5 .OR. + + ICASE.EQ.6) THEN + CALL CHECK2(SFAC) + ELSE IF (ICASE.EQ.4) THEN + CALL CHECK3(SFAC) + END IF +* -- Print + IF (PASS) WRITE (NOUT,99998) + 20 CONTINUE + STOP +* +99999 FORMAT (' Real CBLAS Test Program Results',/1X) +99998 FORMAT (' ----- PASS -----') + END + SUBROUTINE HEADER +* .. Parameters .. + INTEGER NOUT + PARAMETER (NOUT=6) +* .. Scalars in Common .. + INTEGER ICASE, INCX, INCY, MODE, N + LOGICAL PASS +* .. Local Arrays .. + CHARACTER*15 L(10) +* .. Common blocks .. + COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS +* .. Data statements .. + DATA L(1)/'CBLAS_SDOT '/ + DATA L(2)/'CBLAS_SAXPY '/ + DATA L(3)/'CBLAS_SROTG '/ + DATA L(4)/'CBLAS_SROT '/ + DATA L(5)/'CBLAS_SCOPY '/ + DATA L(6)/'CBLAS_SSWAP '/ + DATA L(7)/'CBLAS_SNRM2 '/ + DATA L(8)/'CBLAS_SASUM '/ + DATA L(9)/'CBLAS_SSCAL '/ + DATA L(10)/'CBLAS_ISAMAX'/ +* .. Executable Statements .. + WRITE (NOUT,99999) ICASE, L(ICASE) + RETURN +* +99999 FORMAT (/' Test of subprogram number',I3,9X,A15) + END + SUBROUTINE CHECK0(SFAC) +* .. Parameters .. + INTEGER NOUT + PARAMETER (NOUT=6) +* .. Scalar Arguments .. + REAL SFAC +* .. Scalars in Common .. + INTEGER ICASE, INCX, INCY, MODE, N + LOGICAL PASS +* .. Local Scalars .. + REAL SA, SB, SC, SS + INTEGER K +* .. Local Arrays .. + REAL DA1(8), DATRUE(8), DB1(8), DBTRUE(8), DC1(8), + + DS1(8) +* .. External Subroutines .. + EXTERNAL SROTGTEST, STEST1 +* .. Common blocks .. + COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS +* .. Data statements .. + DATA DA1/0.3E0, 0.4E0, -0.3E0, -0.4E0, -0.3E0, 0.0E0, + + 0.0E0, 1.0E0/ + DATA DB1/0.4E0, 0.3E0, 0.4E0, 0.3E0, -0.4E0, 0.0E0, + + 1.0E0, 0.0E0/ + DATA DC1/0.6E0, 0.8E0, -0.6E0, 0.8E0, 0.6E0, 1.0E0, + + 0.0E0, 1.0E0/ + DATA DS1/0.8E0, 0.6E0, 0.8E0, -0.6E0, 0.8E0, 0.0E0, + + 1.0E0, 0.0E0/ + DATA DATRUE/0.5E0, 0.5E0, 0.5E0, -0.5E0, -0.5E0, + + 0.0E0, 1.0E0, 1.0E0/ + DATA DBTRUE/0.0E0, 0.6E0, 0.0E0, -0.6E0, 0.0E0, + + 0.0E0, 1.0E0, 0.0E0/ +* .. Executable Statements .. +* +* Compute true values which cannot be prestored +* in decimal notation +* + DBTRUE(1) = 1.0E0/0.6E0 + DBTRUE(3) = -1.0E0/0.6E0 + DBTRUE(5) = 1.0E0/0.6E0 +* + DO 20 K = 1, 8 +* .. Set N=K for identification in output if any .. + N = K + IF (ICASE.EQ.3) THEN +* .. SROTGTEST .. + IF (K.GT.8) GO TO 40 + SA = DA1(K) + SB = DB1(K) + CALL SROTGTEST(SA,SB,SC,SS) + CALL STEST1(SA,DATRUE(K),DATRUE(K),SFAC) + CALL STEST1(SB,DBTRUE(K),DBTRUE(K),SFAC) + CALL STEST1(SC,DC1(K),DC1(K),SFAC) + CALL STEST1(SS,DS1(K),DS1(K),SFAC) + ELSE + WRITE (NOUT,*) ' Shouldn''t be here in CHECK0' + STOP + END IF + 20 CONTINUE + 40 RETURN + END + SUBROUTINE CHECK1(SFAC) +* .. Parameters .. + INTEGER NOUT + PARAMETER (NOUT=6) +* .. Scalar Arguments .. + REAL SFAC +* .. Scalars in Common .. + INTEGER ICASE, INCX, INCY, MODE, N + LOGICAL PASS +* .. Local Scalars .. + INTEGER I, LEN, NP1 +* .. Local Arrays .. + REAL DTRUE1(5), DTRUE3(5), DTRUE5(8,5,2), DV(8,5,2), + + SA(10), STEMP(1), STRUE(8), SX(8) + INTEGER ITRUE2(5) +* .. External Functions .. + REAL SASUMTEST, SNRM2TEST + INTEGER ISAMAXTEST + EXTERNAL SASUMTEST, SNRM2TEST, ISAMAXTEST +* .. External Subroutines .. + EXTERNAL ITEST1, SSCALTEST, STEST, STEST1 +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. Common blocks .. + COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS +* .. Data statements .. + DATA SA/0.3E0, -1.0E0, 0.0E0, 1.0E0, 0.3E0, 0.3E0, + + 0.3E0, 0.3E0, 0.3E0, 0.3E0/ + DATA DV/0.1E0, 2.0E0, 2.0E0, 2.0E0, 2.0E0, 2.0E0, + + 2.0E0, 2.0E0, 0.3E0, 3.0E0, 3.0E0, 3.0E0, 3.0E0, + + 3.0E0, 3.0E0, 3.0E0, 0.3E0, -0.4E0, 4.0E0, + + 4.0E0, 4.0E0, 4.0E0, 4.0E0, 4.0E0, 0.2E0, + + -0.6E0, 0.3E0, 5.0E0, 5.0E0, 5.0E0, 5.0E0, + + 5.0E0, 0.1E0, -0.3E0, 0.5E0, -0.1E0, 6.0E0, + + 6.0E0, 6.0E0, 6.0E0, 0.1E0, 8.0E0, 8.0E0, 8.0E0, + + 8.0E0, 8.0E0, 8.0E0, 8.0E0, 0.3E0, 9.0E0, 9.0E0, + + 9.0E0, 9.0E0, 9.0E0, 9.0E0, 9.0E0, 0.3E0, 2.0E0, + + -0.4E0, 2.0E0, 2.0E0, 2.0E0, 2.0E0, 2.0E0, + + 0.2E0, 3.0E0, -0.6E0, 5.0E0, 0.3E0, 2.0E0, + + 2.0E0, 2.0E0, 0.1E0, 4.0E0, -0.3E0, 6.0E0, + + -0.5E0, 7.0E0, -0.1E0, 3.0E0/ + DATA DTRUE1/0.0E0, 0.3E0, 0.5E0, 0.7E0, 0.6E0/ + DATA DTRUE3/0.0E0, 0.3E0, 0.7E0, 1.1E0, 1.0E0/ + DATA DTRUE5/0.10E0, 2.0E0, 2.0E0, 2.0E0, 2.0E0, + + 2.0E0, 2.0E0, 2.0E0, -0.3E0, 3.0E0, 3.0E0, + + 3.0E0, 3.0E0, 3.0E0, 3.0E0, 3.0E0, 0.0E0, 0.0E0, + + 4.0E0, 4.0E0, 4.0E0, 4.0E0, 4.0E0, 4.0E0, + + 0.20E0, -0.60E0, 0.30E0, 5.0E0, 5.0E0, 5.0E0, + + 5.0E0, 5.0E0, 0.03E0, -0.09E0, 0.15E0, -0.03E0, + + 6.0E0, 6.0E0, 6.0E0, 6.0E0, 0.10E0, 8.0E0, + + 8.0E0, 8.0E0, 8.0E0, 8.0E0, 8.0E0, 8.0E0, + + 0.09E0, 9.0E0, 9.0E0, 9.0E0, 9.0E0, 9.0E0, + + 9.0E0, 9.0E0, 0.09E0, 2.0E0, -0.12E0, 2.0E0, + + 2.0E0, 2.0E0, 2.0E0, 2.0E0, 0.06E0, 3.0E0, + + -0.18E0, 5.0E0, 0.09E0, 2.0E0, 2.0E0, 2.0E0, + + 0.03E0, 4.0E0, -0.09E0, 6.0E0, -0.15E0, 7.0E0, + + -0.03E0, 3.0E0/ + DATA ITRUE2/0, 1, 2, 2, 3/ +* .. Executable Statements .. + DO 80 INCX = 1, 2 + DO 60 NP1 = 1, 5 + N = NP1 - 1 + LEN = 2*MAX(N,1) +* .. Set vector arguments .. + DO 20 I = 1, LEN + SX(I) = DV(I,NP1,INCX) + 20 CONTINUE +* + IF (ICASE.EQ.7) THEN +* .. SNRM2TEST .. + STEMP(1) = DTRUE1(NP1) + CALL STEST1(SNRM2TEST(N,SX,INCX),STEMP,STEMP,SFAC) + ELSE IF (ICASE.EQ.8) THEN +* .. SASUMTEST .. + STEMP(1) = DTRUE3(NP1) + CALL STEST1(SASUMTEST(N,SX,INCX),STEMP,STEMP,SFAC) + ELSE IF (ICASE.EQ.9) THEN +* .. SSCALTEST .. + CALL SSCALTEST(N,SA((INCX-1)*5+NP1),SX,INCX) + DO 40 I = 1, LEN + STRUE(I) = DTRUE5(I,NP1,INCX) + 40 CONTINUE + CALL STEST(LEN,SX,STRUE,STRUE,SFAC) + ELSE IF (ICASE.EQ.10) THEN +* .. ISAMAXTEST .. + CALL ITEST1(ISAMAXTEST(N,SX,INCX),ITRUE2(NP1)) + ELSE + WRITE (NOUT,*) ' Shouldn''t be here in CHECK1' + STOP + END IF + 60 CONTINUE + 80 CONTINUE + RETURN + END + SUBROUTINE CHECK2(SFAC) +* .. Parameters .. + INTEGER NOUT + PARAMETER (NOUT=6) +* .. Scalar Arguments .. + REAL SFAC +* .. Scalars in Common .. + INTEGER ICASE, INCX, INCY, MODE, N + LOGICAL PASS +* .. Local Scalars .. + REAL SA + INTEGER I, J, KI, KN, KSIZE, LENX, LENY, MX, MY +* .. Local Arrays .. + REAL DT10X(7,4,4), DT10Y(7,4,4), DT7(4,4), + + DT8(7,4,4), DX1(7), + + DY1(7), SSIZE1(4), SSIZE2(14,2), STX(7), STY(7), + + SX(7), SY(7) + INTEGER INCXS(4), INCYS(4), LENS(4,2), NS(4) +* .. External Functions .. + REAL SDOTTEST + EXTERNAL SDOTTEST +* .. External Subroutines .. + EXTERNAL SAXPYTEST, SCOPYTEST, SSWAPTEST, STEST, STEST1 +* .. Intrinsic Functions .. + INTRINSIC ABS, MIN +* .. Common blocks .. + COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS +* .. Data statements .. + DATA SA/0.3E0/ + DATA INCXS/1, 2, -2, -1/ + DATA INCYS/1, -2, 1, -2/ + DATA LENS/1, 1, 2, 4, 1, 1, 3, 7/ + DATA NS/0, 1, 2, 4/ + DATA DX1/0.6E0, 0.1E0, -0.5E0, 0.8E0, 0.9E0, -0.3E0, + + -0.4E0/ + DATA DY1/0.5E0, -0.9E0, 0.3E0, 0.7E0, -0.6E0, 0.2E0, + + 0.8E0/ + DATA DT7/0.0E0, 0.30E0, 0.21E0, 0.62E0, 0.0E0, + + 0.30E0, -0.07E0, 0.85E0, 0.0E0, 0.30E0, -0.79E0, + + -0.74E0, 0.0E0, 0.30E0, 0.33E0, 1.27E0/ + DATA DT8/0.5E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.68E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.0E0, 0.68E0, -0.87E0, 0.0E0, 0.0E0, + + 0.0E0, 0.0E0, 0.0E0, 0.68E0, -0.87E0, 0.15E0, + + 0.94E0, 0.0E0, 0.0E0, 0.0E0, 0.5E0, 0.0E0, + + 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.68E0, + + 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.35E0, -0.9E0, 0.48E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.38E0, -0.9E0, 0.57E0, 0.7E0, -0.75E0, + + 0.2E0, 0.98E0, 0.5E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.0E0, 0.0E0, 0.68E0, 0.0E0, 0.0E0, + + 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.35E0, -0.72E0, + + 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.38E0, + + -0.63E0, 0.15E0, 0.88E0, 0.0E0, 0.0E0, 0.0E0, + + 0.5E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.68E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.68E0, -0.9E0, 0.33E0, 0.0E0, 0.0E0, + + 0.0E0, 0.0E0, 0.68E0, -0.9E0, 0.33E0, 0.7E0, + + -0.75E0, 0.2E0, 1.04E0/ + DATA DT10X/0.6E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.5E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.5E0, -0.9E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.0E0, 0.5E0, -0.9E0, 0.3E0, 0.7E0, + + 0.0E0, 0.0E0, 0.0E0, 0.6E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.0E0, 0.0E0, 0.5E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.0E0, 0.0E0, 0.3E0, 0.1E0, 0.5E0, 0.0E0, + + 0.0E0, 0.0E0, 0.0E0, 0.8E0, 0.1E0, -0.6E0, + + 0.8E0, 0.3E0, -0.3E0, 0.5E0, 0.6E0, 0.0E0, + + 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.5E0, 0.0E0, + + 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, -0.9E0, + + 0.1E0, 0.5E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.7E0, + + 0.1E0, 0.3E0, 0.8E0, -0.9E0, -0.3E0, 0.5E0, + + 0.6E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.5E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.5E0, 0.3E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.5E0, 0.3E0, -0.6E0, 0.8E0, 0.0E0, 0.0E0, + + 0.0E0/ + DATA DT10Y/0.5E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.6E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.6E0, 0.1E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.6E0, 0.1E0, -0.5E0, 0.8E0, 0.0E0, + + 0.0E0, 0.0E0, 0.5E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.0E0, 0.6E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.0E0, -0.5E0, -0.9E0, 0.6E0, 0.0E0, + + 0.0E0, 0.0E0, 0.0E0, -0.4E0, -0.9E0, 0.9E0, + + 0.7E0, -0.5E0, 0.2E0, 0.6E0, 0.5E0, 0.0E0, + + 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.6E0, 0.0E0, + + 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, -0.5E0, + + 0.6E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + -0.4E0, 0.9E0, -0.5E0, 0.6E0, 0.0E0, 0.0E0, + + 0.0E0, 0.5E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.6E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.6E0, -0.9E0, 0.1E0, 0.0E0, 0.0E0, + + 0.0E0, 0.0E0, 0.6E0, -0.9E0, 0.1E0, 0.7E0, + + -0.5E0, 0.2E0, 0.8E0/ + DATA SSIZE1/0.0E0, 0.3E0, 1.6E0, 3.2E0/ + DATA SSIZE2/0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 1.17E0, 1.17E0, 1.17E0, 1.17E0, 1.17E0, + + 1.17E0, 1.17E0, 1.17E0, 1.17E0, 1.17E0, 1.17E0, + + 1.17E0, 1.17E0, 1.17E0/ +* .. Executable Statements .. +* + DO 120 KI = 1, 4 + INCX = INCXS(KI) + INCY = INCYS(KI) + MX = ABS(INCX) + MY = ABS(INCY) +* + DO 100 KN = 1, 4 + N = NS(KN) + KSIZE = MIN(2,KN) + LENX = LENS(KN,MX) + LENY = LENS(KN,MY) +* .. Initialize all argument arrays .. + DO 20 I = 1, 7 + SX(I) = DX1(I) + SY(I) = DY1(I) + 20 CONTINUE +* + IF (ICASE.EQ.1) THEN +* .. SDOTTEST .. + CALL STEST1(SDOTTEST(N,SX,INCX,SY,INCY),DT7(KN,KI), + + SSIZE1(KN),SFAC) + ELSE IF (ICASE.EQ.2) THEN +* .. SAXPYTEST .. + CALL SAXPYTEST(N,SA,SX,INCX,SY,INCY) + DO 40 J = 1, LENY + STY(J) = DT8(J,KN,KI) + 40 CONTINUE + CALL STEST(LENY,SY,STY,SSIZE2(1,KSIZE),SFAC) + ELSE IF (ICASE.EQ.5) THEN +* .. SCOPYTEST .. + DO 60 I = 1, 7 + STY(I) = DT10Y(I,KN,KI) + 60 CONTINUE + CALL SCOPYTEST(N,SX,INCX,SY,INCY) + CALL STEST(LENY,SY,STY,SSIZE2(1,1),1.0E0) + ELSE IF (ICASE.EQ.6) THEN +* .. SSWAPTEST .. + CALL SSWAPTEST(N,SX,INCX,SY,INCY) + DO 80 I = 1, 7 + STX(I) = DT10X(I,KN,KI) + STY(I) = DT10Y(I,KN,KI) + 80 CONTINUE + CALL STEST(LENX,SX,STX,SSIZE2(1,1),1.0E0) + CALL STEST(LENY,SY,STY,SSIZE2(1,1),1.0E0) + ELSE + WRITE (NOUT,*) ' Shouldn''t be here in CHECK2' + STOP + END IF + 100 CONTINUE + 120 CONTINUE + RETURN + END + SUBROUTINE CHECK3(SFAC) +* .. Parameters .. + INTEGER NOUT + PARAMETER (NOUT=6) +* .. Scalar Arguments .. + REAL SFAC +* .. Scalars in Common .. + INTEGER ICASE, INCX, INCY, MODE, N + LOGICAL PASS +* .. Local Scalars .. + REAL SC, SS + INTEGER I, K, KI, KN, KSIZE, LENX, LENY, MX, MY +* .. Local Arrays .. + REAL COPYX(5), COPYY(5), DT9X(7,4,4), DT9Y(7,4,4), + + DX1(7), DY1(7), MWPC(11), MWPS(11), MWPSTX(5), + + MWPSTY(5), MWPTX(11,5), MWPTY(11,5), MWPX(5), + + MWPY(5), SSIZE2(14,2), STX(7), STY(7), SX(7), + + SY(7) + INTEGER INCXS(4), INCYS(4), LENS(4,2), MWPINX(11), + + MWPINY(11), MWPN(11), NS(4) +* .. External Subroutines .. + EXTERNAL SROTTEST, STEST +* .. Intrinsic Functions .. + INTRINSIC ABS, MIN +* .. Common blocks .. + COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS +* .. Data statements .. + DATA INCXS/1, 2, -2, -1/ + DATA INCYS/1, -2, 1, -2/ + DATA LENS/1, 1, 2, 4, 1, 1, 3, 7/ + DATA NS/0, 1, 2, 4/ + DATA DX1/0.6E0, 0.1E0, -0.5E0, 0.8E0, 0.9E0, -0.3E0, + + -0.4E0/ + DATA DY1/0.5E0, -0.9E0, 0.3E0, 0.7E0, -0.6E0, 0.2E0, + + 0.8E0/ + DATA SC, SS/0.8E0, 0.6E0/ + DATA DT9X/0.6E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.78E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.0E0, 0.78E0, -0.46E0, 0.0E0, 0.0E0, + + 0.0E0, 0.0E0, 0.0E0, 0.78E0, -0.46E0, -0.22E0, + + 1.06E0, 0.0E0, 0.0E0, 0.0E0, 0.6E0, 0.0E0, + + 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.78E0, + + 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.66E0, 0.1E0, -0.1E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.96E0, 0.1E0, -0.76E0, 0.8E0, 0.90E0, + + -0.3E0, -0.02E0, 0.6E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.0E0, 0.0E0, 0.78E0, 0.0E0, 0.0E0, + + 0.0E0, 0.0E0, 0.0E0, 0.0E0, -0.06E0, 0.1E0, + + -0.1E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.90E0, + + 0.1E0, -0.22E0, 0.8E0, 0.18E0, -0.3E0, -0.02E0, + + 0.6E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.78E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.78E0, 0.26E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.0E0, 0.78E0, 0.26E0, -0.76E0, 1.12E0, + + 0.0E0, 0.0E0, 0.0E0/ + DATA DT9Y/0.5E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.04E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.0E0, 0.04E0, -0.78E0, 0.0E0, 0.0E0, + + 0.0E0, 0.0E0, 0.0E0, 0.04E0, -0.78E0, 0.54E0, + + 0.08E0, 0.0E0, 0.0E0, 0.0E0, 0.5E0, 0.0E0, + + 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.04E0, + + 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.7E0, + + -0.9E0, -0.12E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.64E0, -0.9E0, -0.30E0, 0.7E0, -0.18E0, 0.2E0, + + 0.28E0, 0.5E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.0E0, 0.04E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.0E0, 0.0E0, 0.7E0, -1.08E0, 0.0E0, + + 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.64E0, -1.26E0, + + 0.54E0, 0.20E0, 0.0E0, 0.0E0, 0.0E0, 0.5E0, + + 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.04E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.04E0, -0.9E0, 0.18E0, 0.0E0, 0.0E0, + + 0.0E0, 0.0E0, 0.04E0, -0.9E0, 0.18E0, 0.7E0, + + -0.18E0, 0.2E0, 0.16E0/ + DATA SSIZE2/0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, + + 0.0E0, 1.17E0, 1.17E0, 1.17E0, 1.17E0, 1.17E0, + + 1.17E0, 1.17E0, 1.17E0, 1.17E0, 1.17E0, 1.17E0, + + 1.17E0, 1.17E0, 1.17E0/ +* .. Executable Statements .. +* + DO 60 KI = 1, 4 + INCX = INCXS(KI) + INCY = INCYS(KI) + MX = ABS(INCX) + MY = ABS(INCY) +* + DO 40 KN = 1, 4 + N = NS(KN) + KSIZE = MIN(2,KN) + LENX = LENS(KN,MX) + LENY = LENS(KN,MY) +* + IF (ICASE.EQ.4) THEN +* .. SROTTEST .. + DO 20 I = 1, 7 + SX(I) = DX1(I) + SY(I) = DY1(I) + STX(I) = DT9X(I,KN,KI) + STY(I) = DT9Y(I,KN,KI) + 20 CONTINUE + CALL SROTTEST(N,SX,INCX,SY,INCY,SC,SS) + CALL STEST(LENX,SX,STX,SSIZE2(1,KSIZE),SFAC) + CALL STEST(LENY,SY,STY,SSIZE2(1,KSIZE),SFAC) + ELSE + WRITE (NOUT,*) ' Shouldn''t be here in CHECK3' + STOP + END IF + 40 CONTINUE + 60 CONTINUE +* + MWPC(1) = 1 + DO 80 I = 2, 11 + MWPC(I) = 0 + 80 CONTINUE + MWPS(1) = 0 + DO 100 I = 2, 6 + MWPS(I) = 1 + 100 CONTINUE + DO 120 I = 7, 11 + MWPS(I) = -1 + 120 CONTINUE + MWPINX(1) = 1 + MWPINX(2) = 1 + MWPINX(3) = 1 + MWPINX(4) = -1 + MWPINX(5) = 1 + MWPINX(6) = -1 + MWPINX(7) = 1 + MWPINX(8) = 1 + MWPINX(9) = -1 + MWPINX(10) = 1 + MWPINX(11) = -1 + MWPINY(1) = 1 + MWPINY(2) = 1 + MWPINY(3) = -1 + MWPINY(4) = -1 + MWPINY(5) = 2 + MWPINY(6) = 1 + MWPINY(7) = 1 + MWPINY(8) = -1 + MWPINY(9) = -1 + MWPINY(10) = 2 + MWPINY(11) = 1 + DO 140 I = 1, 11 + MWPN(I) = 5 + 140 CONTINUE + MWPN(5) = 3 + MWPN(10) = 3 + DO 160 I = 1, 5 + MWPX(I) = I + MWPY(I) = I + MWPTX(1,I) = I + MWPTY(1,I) = I + MWPTX(2,I) = I + MWPTY(2,I) = -I + MWPTX(3,I) = 6 - I + MWPTY(3,I) = I - 6 + MWPTX(4,I) = I + MWPTY(4,I) = -I + MWPTX(6,I) = 6 - I + MWPTY(6,I) = I - 6 + MWPTX(7,I) = -I + MWPTY(7,I) = I + MWPTX(8,I) = I - 6 + MWPTY(8,I) = 6 - I + MWPTX(9,I) = -I + MWPTY(9,I) = I + MWPTX(11,I) = I - 6 + MWPTY(11,I) = 6 - I + 160 CONTINUE + MWPTX(5,1) = 1 + MWPTX(5,2) = 3 + MWPTX(5,3) = 5 + MWPTX(5,4) = 4 + MWPTX(5,5) = 5 + MWPTY(5,1) = -1 + MWPTY(5,2) = 2 + MWPTY(5,3) = -2 + MWPTY(5,4) = 4 + MWPTY(5,5) = -3 + MWPTX(10,1) = -1 + MWPTX(10,2) = -3 + MWPTX(10,3) = -5 + MWPTX(10,4) = 4 + MWPTX(10,5) = 5 + MWPTY(10,1) = 1 + MWPTY(10,2) = 2 + MWPTY(10,3) = 2 + MWPTY(10,4) = 4 + MWPTY(10,5) = 3 + DO 200 I = 1, 11 + INCX = MWPINX(I) + INCY = MWPINY(I) + DO 180 K = 1, 5 + COPYX(K) = MWPX(K) + COPYY(K) = MWPY(K) + MWPSTX(K) = MWPTX(I,K) + MWPSTY(K) = MWPTY(I,K) + 180 CONTINUE + CALL SROTTEST(MWPN(I),COPYX,INCX,COPYY,INCY,MWPC(I),MWPS(I)) + CALL STEST(5,COPYX,MWPSTX,MWPSTX,SFAC) + CALL STEST(5,COPYY,MWPSTY,MWPSTY,SFAC) + 200 CONTINUE + RETURN + END + SUBROUTINE STEST(LEN,SCOMP,STRUE,SSIZE,SFAC) +* ********************************* STEST ************************** +* +* THIS SUBR COMPARES ARRAYS SCOMP() AND STRUE() OF LENGTH LEN TO +* SEE IF THE TERM BY TERM DIFFERENCES, MULTIPLIED BY SFAC, ARE +* NEGLIGIBLE. +* +* C. L. LAWSON, JPL, 1974 DEC 10 +* +* .. Parameters .. + INTEGER NOUT + PARAMETER (NOUT=6) +* .. Scalar Arguments .. + REAL SFAC + INTEGER LEN +* .. Array Arguments .. + REAL SCOMP(LEN), SSIZE(LEN), STRUE(LEN) +* .. Scalars in Common .. + INTEGER ICASE, INCX, INCY, MODE, N + LOGICAL PASS +* .. Local Scalars .. + REAL SD + INTEGER I +* .. External Functions .. + REAL SDIFF + EXTERNAL SDIFF +* .. Intrinsic Functions .. + INTRINSIC ABS +* .. Common blocks .. + COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS +* .. Executable Statements .. +* + DO 40 I = 1, LEN + SD = SCOMP(I) - STRUE(I) + IF (SDIFF(ABS(SSIZE(I))+ABS(SFAC*SD),ABS(SSIZE(I))).EQ.0.0E0) + + GO TO 40 +* +* HERE SCOMP(I) IS NOT CLOSE TO STRUE(I). +* + IF ( .NOT. PASS) GO TO 20 +* PRINT FAIL MESSAGE AND HEADER. + PASS = .FALSE. + WRITE (NOUT,99999) + WRITE (NOUT,99998) + 20 WRITE (NOUT,99997) ICASE, N, INCX, INCY, MODE, I, SCOMP(I), + + STRUE(I), SD, SSIZE(I) + 40 CONTINUE + RETURN +* +99999 FORMAT (' FAIL') +99998 FORMAT (/' CASE N INCX INCY MODE I ', + + ' COMP(I) TRUE(I) DIFFERENCE', + + ' SIZE(I)',/1X) +99997 FORMAT (1X,I4,I3,3I5,I3,2E36.8,2E12.4) + END + SUBROUTINE STEST1(SCOMP1,STRUE1,SSIZE,SFAC) +* ************************* STEST1 ***************************** +* +* THIS IS AN INTERFACE SUBROUTINE TO ACCOMODATE THE FORTRAN +* REQUIREMENT THAT WHEN A DUMMY ARGUMENT IS AN ARRAY, THE +* ACTUAL ARGUMENT MUST ALSO BE AN ARRAY OR AN ARRAY ELEMENT. +* +* C.L. LAWSON, JPL, 1978 DEC 6 +* +* .. Scalar Arguments .. + REAL SCOMP1, SFAC, STRUE1 +* .. Array Arguments .. + REAL SSIZE(*) +* .. Local Arrays .. + REAL SCOMP(1), STRUE(1) +* .. External Subroutines .. + EXTERNAL STEST +* .. Executable Statements .. +* + SCOMP(1) = SCOMP1 + STRUE(1) = STRUE1 + CALL STEST(1,SCOMP,STRUE,SSIZE,SFAC) +* + RETURN + END + REAL FUNCTION SDIFF(SA,SB) +* ********************************* SDIFF ************************** +* COMPUTES DIFFERENCE OF TWO NUMBERS. C. L. LAWSON, JPL 1974 FEB 15 +* +* .. Scalar Arguments .. + REAL SA, SB +* .. Executable Statements .. + SDIFF = SA - SB + RETURN + END + SUBROUTINE ITEST1(ICOMP,ITRUE) +* ********************************* ITEST1 ************************* +* +* THIS SUBROUTINE COMPARES THE VARIABLES ICOMP AND ITRUE FOR +* EQUALITY. +* C. L. LAWSON, JPL, 1974 DEC 10 +* +* .. Parameters .. + INTEGER NOUT + PARAMETER (NOUT=6) +* .. Scalar Arguments .. + INTEGER ICOMP, ITRUE +* .. Scalars in Common .. + INTEGER ICASE, INCX, INCY, MODE, N + LOGICAL PASS +* .. Local Scalars .. + INTEGER ID +* .. Common blocks .. + COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS +* .. Executable Statements .. +* + IF (ICOMP.EQ.ITRUE) GO TO 40 +* +* HERE ICOMP IS NOT EQUAL TO ITRUE. +* + IF ( .NOT. PASS) GO TO 20 +* PRINT FAIL MESSAGE AND HEADER. + PASS = .FALSE. + WRITE (NOUT,99999) + WRITE (NOUT,99998) + 20 ID = ICOMP - ITRUE + WRITE (NOUT,99997) ICASE, N, INCX, INCY, MODE, ICOMP, ITRUE, ID + 40 CONTINUE + RETURN +* +99999 FORMAT (' FAIL') +99998 FORMAT (/' CASE N INCX INCY MODE ', + + ' COMP TRUE DIFFERENCE', + + /1X) +99997 FORMAT (1X,I4,I3,3I5,2I36,I12) + END diff --git a/CBLAS/testing/c_sblat2.f b/CBLAS/testing/c_sblat2.f new file mode 100644 index 000000000..bf6f3e454 --- /dev/null +++ b/CBLAS/testing/c_sblat2.f @@ -0,0 +1,2907 @@ + PROGRAM SBLAT2 +* +* Test program for the REAL Level 2 Blas. +* +* The program must be driven by a short data file. The first 17 records +* of the file are read using list-directed input, the last 16 records +* are read using the format ( A12, L2 ). An annotated example of a data +* file can be obtained by deleting the first 3 characters from the +* following 33 lines: +* 'SBLAT2.SNAP' NAME OF SNAPSHOT OUTPUT FILE +* -1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0) +* F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD. +* F LOGICAL FLAG, T TO STOP ON FAILURES. +* T LOGICAL FLAG, T TO TEST ERROR EXITS. +* 2 0 TO TEST COLUMN-MAJOR, 1 TO TEST ROW-MAJOR, 2 TO TEST BOTH +* 16.0 THRESHOLD VALUE OF TEST RATIO +* 6 NUMBER OF VALUES OF N +* 0 1 2 3 5 9 VALUES OF N +* 4 NUMBER OF VALUES OF K +* 0 1 2 4 VALUES OF K +* 4 NUMBER OF VALUES OF INCX AND INCY +* 1 2 -1 -2 VALUES OF INCX AND INCY +* 3 NUMBER OF VALUES OF ALPHA +* 0.0 1.0 0.7 VALUES OF ALPHA +* 3 NUMBER OF VALUES OF BETA +* 0.0 1.0 0.9 VALUES OF BETA +* cblas_sgemv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_sgbmv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_ssymv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_ssbmv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_sspmv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_strmv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_stbmv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_stpmv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_strsv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_stbsv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_stpsv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_sger T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_ssyr T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_sspr T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_ssyr2 T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_sspr2 T PUT F FOR NO TEST. SAME COLUMNS. +* +* See: +* +* Dongarra J. J., Du Croz J. J., Hammarling S. and Hanson R. J.. +* An extended set of Fortran Basic Linear Algebra Subprograms. +* +* Technical Memoranda Nos. 41 (revision 3) and 81, Mathematics +* and Computer Science Division, Argonne National Laboratory, +* 9700 South Cass Avenue, Argonne, Illinois 60439, US. +* +* Or +* +* NAG Technical Reports TR3/87 and TR4/87, Numerical Algorithms +* Group Ltd., NAG Central Office, 256 Banbury Road, Oxford +* OX2 7DE, UK, and Numerical Algorithms Group Inc., 1101 31st +* Street, Suite 100, Downers Grove, Illinois 60515-1263, USA. +* +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + INTEGER NIN, NOUT + PARAMETER ( NIN = 5, NOUT = 6 ) + INTEGER NSUBS + PARAMETER ( NSUBS = 16 ) + REAL ZERO, HALF, ONE + PARAMETER ( ZERO = 0.0, HALF = 0.5, ONE = 1.0 ) + INTEGER NMAX, INCMAX + PARAMETER ( NMAX = 65, INCMAX = 2 ) + INTEGER NINMAX, NIDMAX, NKBMAX, NALMAX, NBEMAX + PARAMETER ( NINMAX = 7, NIDMAX = 9, NKBMAX = 7, + $ NALMAX = 7, NBEMAX = 7 ) +* .. Local Scalars .. + REAL EPS, ERR, THRESH + INTEGER I, ISNUM, J, N, NALF, NBET, NIDIM, NINC, NKB, + $ NTRA, LAYOUT + LOGICAL FATAL, LTESTT, REWI, SAME, SFATAL, TRACE, + $ TSTERR, CORDER, RORDER + CHARACTER*1 TRANS + CHARACTER*12 SNAMET + CHARACTER*32 SNAPS +* .. Local Arrays .. + REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), + $ ALF( NALMAX ), AS( NMAX*NMAX ), BET( NBEMAX ), + $ G( NMAX ), X( NMAX ), XS( NMAX*INCMAX ), + $ XX( NMAX*INCMAX ), Y( NMAX ), + $ YS( NMAX*INCMAX ), YT( NMAX ), + $ YY( NMAX*INCMAX ), Z( 2*NMAX ) + INTEGER IDIM( NIDMAX ), INC( NINMAX ), KB( NKBMAX ) + LOGICAL LTEST( NSUBS ) + CHARACTER*12 SNAMES( NSUBS ) +* .. External Functions .. + REAL SDIFF + LOGICAL LSE + EXTERNAL SDIFF, LSE +* .. External Subroutines .. + EXTERNAL SCHK1, SCHK2, SCHK3, SCHK4, SCHK5, SCHK6, + $ CS2CHKE, SMVCH +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, MIN +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK + CHARACTER*12 SRNAMT +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK + COMMON /SRNAMC/SRNAMT +* .. Data statements .. + DATA SNAMES/'cblas_sgemv ', 'cblas_sgbmv ', + $ 'cblas_ssymv ','cblas_ssbmv ','cblas_sspmv ', + $ 'cblas_strmv ','cblas_stbmv ','cblas_stpmv ', + $ 'cblas_strsv ','cblas_stbsv ','cblas_stpsv ', + $ 'cblas_sger ','cblas_ssyr ','cblas_sspr ', + $ 'cblas_ssyr2 ','cblas_sspr2 '/ +* .. Executable Statements .. +* + NOUTC = NOUT +* +* Read name and unit number for snapshot output file and open file. +* + READ( NIN, FMT = * )SNAPS + READ( NIN, FMT = * )NTRA + TRACE = NTRA.GE.0 + IF( TRACE )THEN + OPEN( NTRA, FILE = SNAPS ) + END IF +* Read the flag that directs rewinding of the snapshot file. + READ( NIN, FMT = * )REWI + REWI = REWI.AND.TRACE +* Read the flag that directs stopping on any failure. + READ( NIN, FMT = * )SFATAL +* Read the flag that indicates whether error exits are to be tested. + READ( NIN, FMT = * )TSTERR +* Read the flag that indicates whether row-major data layout to be tested. + READ( NIN, FMT = * )LAYOUT +* Read the threshold value of the test ratio + READ( NIN, FMT = * )THRESH +* +* Read and check the parameter values for the tests. +* +* Values of N + READ( NIN, FMT = * )NIDIM + IF( NIDIM.LT.1.OR.NIDIM.GT.NIDMAX )THEN + WRITE( NOUT, FMT = 9997 )'N', NIDMAX + GO TO 230 + END IF + READ( NIN, FMT = * )( IDIM( I ), I = 1, NIDIM ) + DO 10 I = 1, NIDIM + IF( IDIM( I ).LT.0.OR.IDIM( I ).GT.NMAX )THEN + WRITE( NOUT, FMT = 9996 )NMAX + GO TO 230 + END IF + 10 CONTINUE +* Values of K + READ( NIN, FMT = * )NKB + IF( NKB.LT.1.OR.NKB.GT.NKBMAX )THEN + WRITE( NOUT, FMT = 9997 )'K', NKBMAX + GO TO 230 + END IF + READ( NIN, FMT = * )( KB( I ), I = 1, NKB ) + DO 20 I = 1, NKB + IF( KB( I ).LT.0 )THEN + WRITE( NOUT, FMT = 9995 ) + GO TO 230 + END IF + 20 CONTINUE +* Values of INCX and INCY + READ( NIN, FMT = * )NINC + IF( NINC.LT.1.OR.NINC.GT.NINMAX )THEN + WRITE( NOUT, FMT = 9997 )'INCX AND INCY', NINMAX + GO TO 230 + END IF + READ( NIN, FMT = * )( INC( I ), I = 1, NINC ) + DO 30 I = 1, NINC + IF( INC( I ).EQ.0.OR.ABS( INC( I ) ).GT.INCMAX )THEN + WRITE( NOUT, FMT = 9994 )INCMAX + GO TO 230 + END IF + 30 CONTINUE +* Values of ALPHA + READ( NIN, FMT = * )NALF + IF( NALF.LT.1.OR.NALF.GT.NALMAX )THEN + WRITE( NOUT, FMT = 9997 )'ALPHA', NALMAX + GO TO 230 + END IF + READ( NIN, FMT = * )( ALF( I ), I = 1, NALF ) +* Values of BETA + READ( NIN, FMT = * )NBET + IF( NBET.LT.1.OR.NBET.GT.NBEMAX )THEN + WRITE( NOUT, FMT = 9997 )'BETA', NBEMAX + GO TO 230 + END IF + READ( NIN, FMT = * )( BET( I ), I = 1, NBET ) +* +* Report values of parameters. +* + WRITE( NOUT, FMT = 9993 ) + WRITE( NOUT, FMT = 9992 )( IDIM( I ), I = 1, NIDIM ) + WRITE( NOUT, FMT = 9991 )( KB( I ), I = 1, NKB ) + WRITE( NOUT, FMT = 9990 )( INC( I ), I = 1, NINC ) + WRITE( NOUT, FMT = 9989 )( ALF( I ), I = 1, NALF ) + WRITE( NOUT, FMT = 9988 )( BET( I ), I = 1, NBET ) + IF( .NOT.TSTERR )THEN + WRITE( NOUT, FMT = * ) + WRITE( NOUT, FMT = 9980 ) + END IF + WRITE( NOUT, FMT = * ) + WRITE( NOUT, FMT = 9999 )THRESH + WRITE( NOUT, FMT = * ) + + RORDER = .FALSE. + CORDER = .FALSE. + IF (LAYOUT.EQ.2) THEN + RORDER = .TRUE. + CORDER = .TRUE. + WRITE( *, FMT = 10002 ) + ELSE IF (LAYOUT.EQ.1) THEN + RORDER = .TRUE. + WRITE( *, FMT = 10001 ) + ELSE IF (LAYOUT.EQ.0) THEN + CORDER = .TRUE. + WRITE( *, FMT = 10000 ) + END IF + WRITE( *, FMT = * ) +* +* Read names of subroutines and flags which indicate +* whether they are to be tested. +* + DO 40 I = 1, NSUBS + LTEST( I ) = .FALSE. + 40 CONTINUE + 50 READ( NIN, FMT = 9984, END = 80 )SNAMET, LTESTT + DO 60 I = 1, NSUBS + IF( SNAMET.EQ.SNAMES( I ) ) + $ GO TO 70 + 60 CONTINUE + WRITE( NOUT, FMT = 9986 )SNAMET + STOP + 70 LTEST( I ) = LTESTT + GO TO 50 +* + 80 CONTINUE + CLOSE ( NIN ) +* +* Compute EPS (the machine precision). +* + EPS = ONE + 90 CONTINUE + IF( SDIFF( ONE + EPS, ONE ).EQ.ZERO ) + $ GO TO 100 + EPS = HALF*EPS + GO TO 90 + 100 CONTINUE + EPS = EPS + EPS + WRITE( NOUT, FMT = 9998 )EPS +* +* Check the reliability of SMVCH using exact data. +* + N = MIN( 32, NMAX ) + DO 120 J = 1, N + DO 110 I = 1, N + A( I, J ) = MAX( I - J + 1, 0 ) + 110 CONTINUE + X( J ) = J + Y( J ) = ZERO + 120 CONTINUE + DO 130 J = 1, N + YY( J ) = J*( ( J + 1 )*J )/2 - ( ( J + 1 )*J*( J - 1 ) )/3 + 130 CONTINUE +* YY holds the exact result. On exit from SMVCH YT holds +* the result computed by SMVCH. + TRANS = 'N' + CALL SMVCH( TRANS, N, N, ONE, A, NMAX, X, 1, ZERO, Y, 1, YT, G, + $ YY, EPS, ERR, FATAL, NOUT, .TRUE. ) + SAME = LSE( YY, YT, N ) + IF( .NOT.SAME.OR.ERR.NE.ZERO )THEN + WRITE( NOUT, FMT = 9985 )TRANS, SAME, ERR + STOP + END IF + TRANS = 'T' + CALL SMVCH( TRANS, N, N, ONE, A, NMAX, X, -1, ZERO, Y, -1, YT, G, + $ YY, EPS, ERR, FATAL, NOUT, .TRUE. ) + SAME = LSE( YY, YT, N ) + IF( .NOT.SAME.OR.ERR.NE.ZERO )THEN + WRITE( NOUT, FMT = 9985 )TRANS, SAME, ERR + STOP + END IF +* +* Test each subroutine in turn. +* + DO 210 ISNUM = 1, NSUBS + WRITE( NOUT, FMT = * ) + IF( .NOT.LTEST( ISNUM ) )THEN +* Subprogram is not to be tested. + WRITE( NOUT, FMT = 9983 )SNAMES( ISNUM ) + ELSE + SRNAMT = SNAMES( ISNUM ) +* Test error exits. + IF( TSTERR )THEN + CALL CS2CHKE( SNAMES( ISNUM ) ) + WRITE( NOUT, FMT = * ) + END IF +* Test computations. + INFOT = 0 + OK = .TRUE. + FATAL = .FALSE. + GO TO ( 140, 140, 150, 150, 150, 160, 160, + $ 160, 160, 160, 160, 170, 180, 180, + $ 190, 190 )ISNUM +* Test SGEMV, 01, and SGBMV, 02. + 140 IF (CORDER) THEN + CALL SCHK1( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, + $ NBET, BET, NINC, INC, NMAX, INCMAX, A, AA, AS, + $ X, XX, XS, Y, YY, YS, YT, G, 0 ) + END IF + IF (RORDER) THEN + CALL SCHK1( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, + $ NBET, BET, NINC, INC, NMAX, INCMAX, A, AA, AS, + $ X, XX, XS, Y, YY, YS, YT, G, 1 ) + END IF + GO TO 200 +* Test SSYMV, 03, SSBMV, 04, and SSPMV, 05. + 150 IF (CORDER) THEN + CALL SCHK2( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, + $ NBET, BET, NINC, INC, NMAX, INCMAX, A, AA, AS, + $ X, XX, XS, Y, YY, YS, YT, G, 0 ) + END IF + IF (RORDER) THEN + CALL SCHK2( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, + $ NBET, BET, NINC, INC, NMAX, INCMAX, A, AA, AS, + $ X, XX, XS, Y, YY, YS, YT, G, 1 ) + END IF + GO TO 200 +* Test STRMV, 06, STBMV, 07, STPMV, 08, +* STRSV, 09, STBSV, 10, and STPSV, 11. + 160 IF (CORDER) THEN + CALL SCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, Y, YY, YS, YT, G, Z, + $ 0 ) + END IF + IF (RORDER) THEN + CALL SCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, Y, YY, YS, YT, G, Z, + $ 1 ) + END IF + GO TO 200 +* Test SGER, 12. + 170 IF (CORDER) THEN + CALL SCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, + $ YT, G, Z, 0 ) + END IF + IF (RORDER) THEN + CALL SCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, + $ YT, G, Z, 1 ) + END IF + GO TO 200 +* Test SSYR, 13, and SSPR, 14. + 180 IF (CORDER) THEN + CALL SCHK5( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, + $ YT, G, Z, 0 ) + END IF + IF (RORDER) THEN + CALL SCHK5( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, + $ YT, G, Z, 1 ) + END IF + GO TO 200 +* Test SSYR2, 15, and SSPR2, 16. + 190 IF (CORDER) THEN + CALL SCHK6( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, + $ YT, G, Z, 0 ) + END IF + IF (RORDER) THEN + CALL SCHK6( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, + $ YT, G, Z, 1 ) + END IF +* + 200 IF( FATAL.AND.SFATAL ) + $ GO TO 220 + END IF + 210 CONTINUE + WRITE( NOUT, FMT = 9982 ) + GO TO 240 +* + 220 CONTINUE + WRITE( NOUT, FMT = 9981 ) + GO TO 240 +* + 230 CONTINUE + WRITE( NOUT, FMT = 9987 ) +* + 240 CONTINUE + IF( TRACE ) + $ CLOSE ( NTRA ) + CLOSE ( NOUT ) + STOP +* +10002 FORMAT( ' COLUMN-MAJOR AND ROW-MAJOR DATA LAYOUTS ARE TESTED' ) +10001 FORMAT( ' ROW-MAJOR DATA LAYOUT IS TESTED' ) +10000 FORMAT( ' COLUMN-MAJOR DATA LAYOUT IS TESTED' ) + 9999 FORMAT( ' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES', + $ 'S THAN', F8.2 ) + 9998 FORMAT( ' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1P, E9.1 ) + 9997 FORMAT( ' NUMBER OF VALUES OF ', A, ' IS LESS THAN 1 OR GREATER ', + $ 'THAN ', I2 ) + 9996 FORMAT( ' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', I2 ) + 9995 FORMAT( ' VALUE OF K IS LESS THAN 0' ) + 9994 FORMAT( ' ABSOLUTE VALUE OF INCX OR INCY IS 0 OR GREATER THAN ', + $ I2 ) + 9993 FORMAT( ' TESTS OF THE REAL LEVEL 2 BLAS', //' THE F', + $ 'OLLOWING PARAMETER VALUES WILL BE USED:' ) + 9992 FORMAT( ' FOR N ', 9I6 ) + 9991 FORMAT( ' FOR K ', 7I6 ) + 9990 FORMAT( ' FOR INCX AND INCY ', 7I6 ) + 9989 FORMAT( ' FOR ALPHA ', 7F6.1 ) + 9988 FORMAT( ' FOR BETA ', 7F6.1 ) + 9987 FORMAT( ' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM', + $ /' ******* TESTS ABANDONED *******' ) + 9986 FORMAT( ' SUBPROGRAM NAME ',A12, ' NOT RECOGNIZED', /' ******* T', + $ 'ESTS ABANDONED *******' ) + 9985 FORMAT( ' ERROR IN SMVCH - IN-LINE DOT PRODUCTS ARE BEING EVALU', + $ 'ATED WRONGLY.', /' SMVCH WAS CALLED WITH TRANS = ', A1, + $ ' AND RETURNED SAME = ', L1, ' AND ERR = ', F12.3, '.', / + $ ' THIS MAY BE DUE TO FAULTS IN THE ARITHMETIC OR THE COMPILER.' + $ , /' ******* TESTS ABANDONED *******' ) + 9984 FORMAT(A12, L2 ) + 9983 FORMAT( 1X,A12, ' WAS NOT TESTED' ) + 9982 FORMAT( /' END OF TESTS' ) + 9981 FORMAT( /' ******* FATAL ERROR - TESTS ABANDONED *******' ) + 9980 FORMAT( ' ERROR-EXITS WILL NOT BE TESTED' ) +* +* End of SBLAT2. +* + END + SUBROUTINE SCHK1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, NBET, + $ BET, NINC, INC, NMAX, INCMAX, A, AA, AS, X, XX, + $ XS, Y, YY, YS, YT, G, IORDER ) +* +* Tests SGEMV and SGBMV. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + REAL ZERO, HALF + PARAMETER ( ZERO = 0.0, HALF = 0.5 ) +* .. Scalar Arguments .. + REAL EPS, THRESH + INTEGER INCMAX, NALF, NBET, NIDIM, NINC, NKB, NMAX, + $ NOUT, NTRA, IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), BET( NBET ), G( NMAX ), + $ X( NMAX ), XS( NMAX*INCMAX ), + $ XX( NMAX*INCMAX ), Y( NMAX ), + $ YS( NMAX*INCMAX ), YT( NMAX ), + $ YY( NMAX*INCMAX ) + INTEGER IDIM( NIDIM ), INC( NINC ), KB( NKB ) +* .. Local Scalars .. + REAL ALPHA, ALS, BETA, BLS, ERR, ERRMAX, TRANSL + INTEGER I, IA, IB, IC, IKU, IM, IN, INCX, INCXS, INCY, + $ INCYS, IX, IY, KL, KLS, KU, KUS, LAA, LDA, + $ LDAS, LX, LY, M, ML, MS, N, NARGS, NC, ND, NK, + $ NL, NS + LOGICAL BANDED, FULL, NULL, RESET, SAME, TRAN + CHARACTER*1 TRANS, TRANSS + CHARACTER*14 CTRANS + CHARACTER*3 ICH +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LSE, LSERES + EXTERNAL LSE, LSERES +* .. External Subroutines .. + EXTERNAL CSGBMV, CSGEMV, SMAKE, SMVCH +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, MIN +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICH/'NTC'/ +* .. Executable Statements .. + FULL = SNAME( 9: 9 ).EQ.'e' + BANDED = SNAME( 9: 9 ).EQ.'b' +* Define the number of arguments. + IF( FULL )THEN + NARGS = 11 + ELSE IF( BANDED )THEN + NARGS = 13 + END IF +* + NC = 0 + RESET = .TRUE. + ERRMAX = ZERO +* + DO 120 IN = 1, NIDIM + N = IDIM( IN ) + ND = N/2 + 1 +* + DO 110 IM = 1, 2 + IF( IM.EQ.1 ) + $ M = MAX( N - ND, 0 ) + IF( IM.EQ.2 ) + $ M = MIN( N + ND, NMAX ) +* + IF( BANDED )THEN + NK = NKB + ELSE + NK = 1 + END IF + DO 100 IKU = 1, NK + IF( BANDED )THEN + KU = KB( IKU ) + KL = MAX( KU - 1, 0 ) + ELSE + KU = N - 1 + KL = M - 1 + END IF +* Set LDA to 1 more than minimum value if room. + IF( BANDED )THEN + LDA = KL + KU + 1 + ELSE + LDA = M + END IF + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 100 + LAA = LDA*N + NULL = N.LE.0.OR.M.LE.0 +* +* Generate the matrix A. +* + TRANSL = ZERO + CALL SMAKE( SNAME( 8: 9 ), ' ', ' ', M, N, A, NMAX, AA, + $ LDA, KL, KU, RESET, TRANSL ) +* + DO 90 IC = 1, 3 + TRANS = ICH( IC: IC ) + IF (TRANS.EQ.'N')THEN + CTRANS = ' CblasNoTrans' + ELSE IF (TRANS.EQ.'T')THEN + CTRANS = ' CblasTrans' + ELSE + CTRANS = 'CblasConjTrans' + END IF + TRAN = TRANS.EQ.'T'.OR.TRANS.EQ.'C' +* + IF( TRAN )THEN + ML = N + NL = M + ELSE + ML = M + NL = N + END IF +* + DO 80 IX = 1, NINC + INCX = INC( IX ) + LX = ABS( INCX )*NL +* +* Generate the vector X. +* + TRANSL = HALF + CALL SMAKE( 'ge', ' ', ' ', 1, NL, X, 1, XX, + $ ABS( INCX ), 0, NL - 1, RESET, TRANSL ) + IF( NL.GT.1 )THEN + X( NL/2 ) = ZERO + XX( 1 + ABS( INCX )*( NL/2 - 1 ) ) = ZERO + END IF +* + DO 70 IY = 1, NINC + INCY = INC( IY ) + LY = ABS( INCY )*ML +* + DO 60 IA = 1, NALF + ALPHA = ALF( IA ) +* + DO 50 IB = 1, NBET + BETA = BET( IB ) +* +* Generate the vector Y. +* + TRANSL = ZERO + CALL SMAKE( 'ge', ' ', ' ', 1, ML, Y, 1, + $ YY, ABS( INCY ), 0, ML - 1, + $ RESET, TRANSL ) +* + NC = NC + 1 +* +* Save every datum before calling the +* subroutine. +* + TRANSS = TRANS + MS = M + NS = N + KLS = KL + KUS = KU + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LX + XS( I ) = XX( I ) + 20 CONTINUE + INCXS = INCX + BLS = BETA + DO 30 I = 1, LY + YS( I ) = YY( I ) + 30 CONTINUE + INCYS = INCY +* +* Call the subroutine. +* + IF( FULL )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9994 )NC, SNAME, + $ CTRANS, M, N, ALPHA, LDA, INCX, + $ BETA, INCY + IF( REWI ) + $ REWIND NTRA + CALL CSGEMV( IORDER, TRANS, M, N, + $ ALPHA, AA, LDA, XX, INCX, + $ BETA, YY, INCY ) + ELSE IF( BANDED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9995 )NC, SNAME, + $ CTRANS, M, N, KL, KU, ALPHA, LDA, + $ INCX, BETA, INCY + IF( REWI ) + $ REWIND NTRA + CALL CSGBMV( IORDER, TRANS, M, N, KL, + $ KU, ALPHA, AA, LDA, XX, + $ INCX, BETA, YY, INCY ) + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9993 ) + FATAL = .TRUE. + GO TO 130 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = TRANS.EQ.TRANSS + ISAME( 2 ) = MS.EQ.M + ISAME( 3 ) = NS.EQ.N + IF( FULL )THEN + ISAME( 4 ) = ALS.EQ.ALPHA + ISAME( 5 ) = LSE( AS, AA, LAA ) + ISAME( 6 ) = LDAS.EQ.LDA + ISAME( 7 ) = LSE( XS, XX, LX ) + ISAME( 8 ) = INCXS.EQ.INCX + ISAME( 9 ) = BLS.EQ.BETA + IF( NULL )THEN + ISAME( 10 ) = LSE( YS, YY, LY ) + ELSE + ISAME( 10 ) = LSERES( 'ge', ' ', 1, + $ ML, YS, YY, + $ ABS( INCY ) ) + END IF + ISAME( 11 ) = INCYS.EQ.INCY + ELSE IF( BANDED )THEN + ISAME( 4 ) = KLS.EQ.KL + ISAME( 5 ) = KUS.EQ.KU + ISAME( 6 ) = ALS.EQ.ALPHA + ISAME( 7 ) = LSE( AS, AA, LAA ) + ISAME( 8 ) = LDAS.EQ.LDA + ISAME( 9 ) = LSE( XS, XX, LX ) + ISAME( 10 ) = INCXS.EQ.INCX + ISAME( 11 ) = BLS.EQ.BETA + IF( NULL )THEN + ISAME( 12 ) = LSE( YS, YY, LY ) + ELSE + ISAME( 12 ) = LSERES( 'ge', ' ', 1, + $ ML, YS, YY, + $ ABS( INCY ) ) + END IF + ISAME( 13 ) = INCYS.EQ.INCY + END IF +* +* If data was incorrectly changed, report +* and return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 130 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result. +* + CALL SMVCH( TRANS, M, N, ALPHA, A, + $ NMAX, X, INCX, BETA, Y, + $ INCY, YT, G, YY, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and +* return. + IF( FATAL ) + $ GO TO 130 + ELSE +* Avoid repeating tests with M.le.0 or +* N.le.0. + GO TO 110 + END IF +* + 50 CONTINUE +* + 60 CONTINUE +* + 70 CONTINUE +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* + 110 CONTINUE +* + 120 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 140 +* + 130 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + IF( FULL )THEN + WRITE( NOUT, FMT = 9994 )NC, SNAME, CTRANS, M, N, ALPHA, LDA, + $ INCX, BETA, INCY + ELSE IF( BANDED )THEN + WRITE( NOUT, FMT = 9995 )NC, SNAME, CTRANS, M, N, KL, KU, + $ ALPHA, LDA, INCX, BETA, INCY + END IF +* + 140 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9997 FORMAT( ' ',A12, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', + $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, + $ ' - SUSPECT *******' ) + 9996 FORMAT( ' ******* ',A12, ' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( 1X, I6, ': ',A12, '(', A14, ',', 4( I3, ',' ), F4.1, + $ ', A,', I3, ',',/ 10x, 'X,', I2, ',', F4.1, ', Y,', + $ I2, ') .' ) + 9994 FORMAT( 1X, I6, ': ',A12, '(', A14, ',', 2( I3, ',' ), F4.1, + $ ', A,', I3, ', X,', I2, ',', F4.1, ', Y,', I2, + $ ') .' ) + 9993 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of SCHK1. +* + END + SUBROUTINE SCHK2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, NBET, + $ BET, NINC, INC, NMAX, INCMAX, A, AA, AS, X, XX, + $ XS, Y, YY, YS, YT, G, IORDER ) +* +* Tests SSYMV, SSBMV and SSPMV. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + REAL ZERO, HALF + PARAMETER ( ZERO = 0.0, HALF = 0.5 ) +* .. Scalar Arguments .. + REAL EPS, THRESH + INTEGER INCMAX, NALF, NBET, NIDIM, NINC, NKB, NMAX, + $ NOUT, NTRA, IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), BET( NBET ), G( NMAX ), + $ X( NMAX ), XS( NMAX*INCMAX ), + $ XX( NMAX*INCMAX ), Y( NMAX ), + $ YS( NMAX*INCMAX ), YT( NMAX ), + $ YY( NMAX*INCMAX ) + INTEGER IDIM( NIDIM ), INC( NINC ), KB( NKB ) +* .. Local Scalars .. + REAL ALPHA, ALS, BETA, BLS, ERR, ERRMAX, TRANSL + INTEGER I, IA, IB, IC, IK, IN, INCX, INCXS, INCY, + $ INCYS, IX, IY, K, KS, LAA, LDA, LDAS, LX, LY, + $ N, NARGS, NC, NK, NS + LOGICAL BANDED, FULL, NULL, PACKED, RESET, SAME + CHARACTER*1 UPLO, UPLOS + CHARACTER*14 CUPLO + CHARACTER*2 ICH +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LSE, LSERES + EXTERNAL LSE, LSERES +* .. External Subroutines .. + EXTERNAL SMAKE, SMVCH, CSSBMV, CSSPMV, CSSYMV +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICH/'UL'/ +* .. Executable Statements .. + FULL = SNAME( 9: 9 ).EQ.'y' + BANDED = SNAME( 9: 9 ).EQ.'b' + PACKED = SNAME( 9: 9 ).EQ.'p' +* Define the number of arguments. + IF( FULL )THEN + NARGS = 10 + ELSE IF( BANDED )THEN + NARGS = 11 + ELSE IF( PACKED )THEN + NARGS = 9 + END IF +* + NC = 0 + RESET = .TRUE. + ERRMAX = ZERO +* + DO 110 IN = 1, NIDIM + N = IDIM( IN ) +* + IF( BANDED )THEN + NK = NKB + ELSE + NK = 1 + END IF + DO 100 IK = 1, NK + IF( BANDED )THEN + K = KB( IK ) + ELSE + K = N - 1 + END IF +* Set LDA to 1 more than minimum value if room. + IF( BANDED )THEN + LDA = K + 1 + ELSE + LDA = N + END IF + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 100 + IF( PACKED )THEN + LAA = ( N*( N + 1 ) )/2 + ELSE + LAA = LDA*N + END IF + NULL = N.LE.0 +* + DO 90 IC = 1, 2 + UPLO = ICH( IC: IC ) + IF (UPLO.EQ.'U')THEN + CUPLO = ' CblasUpper' + ELSE + CUPLO = ' CblasLower' + END IF +* +* Generate the matrix A. +* + TRANSL = ZERO + CALL SMAKE( SNAME( 8: 9 ), UPLO, ' ', N, N, A, NMAX, AA, + $ LDA, K, K, RESET, TRANSL ) +* + DO 80 IX = 1, NINC + INCX = INC( IX ) + LX = ABS( INCX )*N +* +* Generate the vector X. +* + TRANSL = HALF + CALL SMAKE( 'ge', ' ', ' ', 1, N, X, 1, XX, + $ ABS( INCX ), 0, N - 1, RESET, TRANSL ) + IF( N.GT.1 )THEN + X( N/2 ) = ZERO + XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO + END IF +* + DO 70 IY = 1, NINC + INCY = INC( IY ) + LY = ABS( INCY )*N +* + DO 60 IA = 1, NALF + ALPHA = ALF( IA ) +* + DO 50 IB = 1, NBET + BETA = BET( IB ) +* +* Generate the vector Y. +* + TRANSL = ZERO + CALL SMAKE( 'ge', ' ', ' ', 1, N, Y, 1, YY, + $ ABS( INCY ), 0, N - 1, RESET, + $ TRANSL ) +* + NC = NC + 1 +* +* Save every datum before calling the +* subroutine. +* + UPLOS = UPLO + NS = N + KS = K + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LX + XS( I ) = XX( I ) + 20 CONTINUE + INCXS = INCX + BLS = BETA + DO 30 I = 1, LY + YS( I ) = YY( I ) + 30 CONTINUE + INCYS = INCY +* +* Call the subroutine. +* + IF( FULL )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9993 )NC, SNAME, + $ CUPLO, N, ALPHA, LDA, INCX, BETA, INCY + IF( REWI ) + $ REWIND NTRA + CALL CSSYMV( IORDER, UPLO, N, ALPHA, AA, + $ LDA, XX, INCX, BETA, YY, INCY ) + ELSE IF( BANDED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9994 )NC, SNAME, + $ CUPLO, N, K, ALPHA, LDA, INCX, BETA, + $ INCY + IF( REWI ) + $ REWIND NTRA + CALL CSSBMV( IORDER, UPLO, N, K, ALPHA, + $ AA, LDA, XX, INCX, BETA, YY, + $ INCY ) + ELSE IF( PACKED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9995 )NC, SNAME, + $ CUPLO, N, ALPHA, INCX, BETA, INCY + IF( REWI ) + $ REWIND NTRA + CALL CSSPMV( IORDER, UPLO, N, ALPHA, AA, + $ XX, INCX, BETA, YY, INCY ) + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9992 ) + FATAL = .TRUE. + GO TO 120 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = UPLO.EQ.UPLOS + ISAME( 2 ) = NS.EQ.N + IF( FULL )THEN + ISAME( 3 ) = ALS.EQ.ALPHA + ISAME( 4 ) = LSE( AS, AA, LAA ) + ISAME( 5 ) = LDAS.EQ.LDA + ISAME( 6 ) = LSE( XS, XX, LX ) + ISAME( 7 ) = INCXS.EQ.INCX + ISAME( 8 ) = BLS.EQ.BETA + IF( NULL )THEN + ISAME( 9 ) = LSE( YS, YY, LY ) + ELSE + ISAME( 9 ) = LSERES( 'ge', ' ', 1, N, + $ YS, YY, ABS( INCY ) ) + END IF + ISAME( 10 ) = INCYS.EQ.INCY + ELSE IF( BANDED )THEN + ISAME( 3 ) = KS.EQ.K + ISAME( 4 ) = ALS.EQ.ALPHA + ISAME( 5 ) = LSE( AS, AA, LAA ) + ISAME( 6 ) = LDAS.EQ.LDA + ISAME( 7 ) = LSE( XS, XX, LX ) + ISAME( 8 ) = INCXS.EQ.INCX + ISAME( 9 ) = BLS.EQ.BETA + IF( NULL )THEN + ISAME( 10 ) = LSE( YS, YY, LY ) + ELSE + ISAME( 10 ) = LSERES( 'ge', ' ', 1, N, + $ YS, YY, ABS( INCY ) ) + END IF + ISAME( 11 ) = INCYS.EQ.INCY + ELSE IF( PACKED )THEN + ISAME( 3 ) = ALS.EQ.ALPHA + ISAME( 4 ) = LSE( AS, AA, LAA ) + ISAME( 5 ) = LSE( XS, XX, LX ) + ISAME( 6 ) = INCXS.EQ.INCX + ISAME( 7 ) = BLS.EQ.BETA + IF( NULL )THEN + ISAME( 8 ) = LSE( YS, YY, LY ) + ELSE + ISAME( 8 ) = LSERES( 'ge', ' ', 1, N, + $ YS, YY, ABS( INCY ) ) + END IF + ISAME( 9 ) = INCYS.EQ.INCY + END IF +* +* If data was incorrectly changed, report and +* return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 120 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result. +* + CALL SMVCH( 'N', N, N, ALPHA, A, NMAX, X, + $ INCX, BETA, Y, INCY, YT, G, + $ YY, EPS, ERR, FATAL, NOUT, + $ .TRUE. ) + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and +* return. + IF( FATAL ) + $ GO TO 120 + ELSE +* Avoid repeating tests with N.le.0 + GO TO 110 + END IF +* + 50 CONTINUE +* + 60 CONTINUE +* + 70 CONTINUE +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* + 110 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 130 +* + 120 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + IF( FULL )THEN + WRITE( NOUT, FMT = 9993 )NC, SNAME, CUPLO, N, ALPHA, LDA, + $ INCX, BETA, INCY + ELSE IF( BANDED )THEN + WRITE( NOUT, FMT = 9994 )NC, SNAME, CUPLO, N, K, ALPHA, LDA, + $ INCX, BETA, INCY + ELSE IF( PACKED )THEN + WRITE( NOUT, FMT = 9995 )NC, SNAME, CUPLO, N, ALPHA, INCX, + $ BETA, INCY + END IF +* + 130 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9997 FORMAT( ' ',A12, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', + $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, + $ ' - SUSPECT *******' ) + 9996 FORMAT( ' ******* ',A12, ' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( 1X, I6, ': ',A12, '(', A14, ',', I3, ',', F4.1, ', AP', + $ ', X,', I2, ',', F4.1, ', Y,', I2, ') .' ) + 9994 FORMAT( 1X, I6, ': ',A12, '(', A14, ',', 2( I3, ',' ), F4.1, + $ ', A,', I3, ', X,', I2, ',', F4.1, ', Y,', I2, + $ ') .' ) + 9993 FORMAT( 1X, I6, ': ',A12, '(', A14, ',', I3, ',', F4.1, ', A,', + $ I3, ', X,', I2, ',', F4.1, ', Y,', I2, ') .' ) + 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of SCHK2. +* + END + SUBROUTINE SCHK3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NKB, KB, NINC, INC, NMAX, + $ INCMAX, A, AA, AS, X, XX, XS, XT, G, Z, IORDER ) +* +* Tests STRMV, STBMV, STPMV, STRSV, STBSV and STPSV. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + REAL ZERO, HALF, ONE + PARAMETER ( ZERO = 0.0, HALF = 0.5, ONE = 1.0 ) +* .. Scalar Arguments .. + REAL EPS, THRESH + INTEGER INCMAX, NIDIM, NINC, NKB, NMAX, NOUT, NTRA, + $ IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), + $ AS( NMAX*NMAX ), G( NMAX ), X( NMAX ), + $ XS( NMAX*INCMAX ), XT( NMAX ), + $ XX( NMAX*INCMAX ), Z( NMAX ) + INTEGER IDIM( NIDIM ), INC( NINC ), KB( NKB ) +* .. Local Scalars .. + REAL ERR, ERRMAX, TRANSL + INTEGER I, ICD, ICT, ICU, IK, IN, INCX, INCXS, IX, K, + $ KS, LAA, LDA, LDAS, LX, N, NARGS, NC, NK, NS + LOGICAL BANDED, FULL, NULL, PACKED, RESET, SAME + CHARACTER*1 DIAG, DIAGS, TRANS, TRANSS, UPLO, UPLOS + CHARACTER*14 CUPLO,CTRANS,CDIAG + CHARACTER*2 ICHD, ICHU + CHARACTER*3 ICHT +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LSE, LSERES + EXTERNAL LSE, LSERES +* .. External Subroutines .. + EXTERNAL SMAKE, SMVCH, CSTBMV, CSTBSV, CSTPMV, + $ CSTPSV, CSTRMV, CSTRSV +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICHU/'UL'/, ICHT/'NTC'/, ICHD/'UN'/ +* .. Executable Statements .. + FULL = SNAME( 9: 9 ).EQ.'r' + BANDED = SNAME( 9: 9 ).EQ.'b' + PACKED = SNAME( 9: 9 ).EQ.'p' +* Define the number of arguments. + IF( FULL )THEN + NARGS = 8 + ELSE IF( BANDED )THEN + NARGS = 9 + ELSE IF( PACKED )THEN + NARGS = 7 + END IF +* + NC = 0 + RESET = .TRUE. + ERRMAX = ZERO +* Set up zero vector for SMVCH. + DO 10 I = 1, NMAX + Z( I ) = ZERO + 10 CONTINUE +* + DO 110 IN = 1, NIDIM + N = IDIM( IN ) +* + IF( BANDED )THEN + NK = NKB + ELSE + NK = 1 + END IF + DO 100 IK = 1, NK + IF( BANDED )THEN + K = KB( IK ) + ELSE + K = N - 1 + END IF +* Set LDA to 1 more than minimum value if room. + IF( BANDED )THEN + LDA = K + 1 + ELSE + LDA = N + END IF + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 100 + IF( PACKED )THEN + LAA = ( N*( N + 1 ) )/2 + ELSE + LAA = LDA*N + END IF + NULL = N.LE.0 +* + DO 90 ICU = 1, 2 + UPLO = ICHU( ICU: ICU ) + IF (UPLO.EQ.'U')THEN + CUPLO = ' CblasUpper' + ELSE + CUPLO = ' CblasLower' + END IF +* + DO 80 ICT = 1, 3 + TRANS = ICHT( ICT: ICT ) + IF (TRANS.EQ.'N')THEN + CTRANS = ' CblasNoTrans' + ELSE IF (TRANS.EQ.'T')THEN + CTRANS = ' CblasTrans' + ELSE + CTRANS = 'CblasConjTrans' + END IF +* + DO 70 ICD = 1, 2 + DIAG = ICHD( ICD: ICD ) + IF (DIAG.EQ.'N')THEN + CDIAG = ' CblasNonUnit' + ELSE + CDIAG = ' CblasUnit' + END IF +* +* Generate the matrix A. +* + TRANSL = ZERO + CALL SMAKE( SNAME( 8: 9 ), UPLO, DIAG, N, N, A, + $ NMAX, AA, LDA, K, K, RESET, TRANSL ) +* + DO 60 IX = 1, NINC + INCX = INC( IX ) + LX = ABS( INCX )*N +* +* Generate the vector X. +* + TRANSL = HALF + CALL SMAKE( 'ge', ' ', ' ', 1, N, X, 1, XX, + $ ABS( INCX ), 0, N - 1, RESET, + $ TRANSL ) + IF( N.GT.1 )THEN + X( N/2 ) = ZERO + XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO + END IF +* + NC = NC + 1 +* +* Save every datum before calling the subroutine. +* + UPLOS = UPLO + TRANSS = TRANS + DIAGS = DIAG + NS = N + KS = K + DO 20 I = 1, LAA + AS( I ) = AA( I ) + 20 CONTINUE + LDAS = LDA + DO 30 I = 1, LX + XS( I ) = XX( I ) + 30 CONTINUE + INCXS = INCX +* +* Call the subroutine. +* + IF( SNAME( 10: 11 ).EQ.'mv' )THEN + IF( FULL )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9993 )NC, SNAME, + $ CUPLO, CTRANS, CDIAG, N, LDA, INCX + IF( REWI ) + $ REWIND NTRA + CALL CSTRMV( IORDER, UPLO, TRANS, DIAG, + $ N, AA, LDA, XX, INCX ) + ELSE IF( BANDED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9994 )NC, SNAME, + $ CUPLO, CTRANS, CDIAG, N, K, LDA, INCX + IF( REWI ) + $ REWIND NTRA + CALL CSTBMV( IORDER, UPLO, TRANS, DIAG, + $ N, K, AA, LDA, XX, INCX ) + ELSE IF( PACKED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9995 )NC, SNAME, + $ CUPLO, CTRANS, CDIAG, N, INCX + IF( REWI ) + $ REWIND NTRA + CALL CSTPMV( IORDER, UPLO, TRANS, DIAG, + $ N, AA, XX, INCX ) + END IF + ELSE IF( SNAME( 10: 11 ).EQ.'sv' )THEN + IF( FULL )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9993 )NC, SNAME, + $ CUPLO, CTRANS, CDIAG, N, LDA, INCX + IF( REWI ) + $ REWIND NTRA + CALL CSTRSV( IORDER, UPLO, TRANS, DIAG, + $ N, AA, LDA, XX, INCX ) + ELSE IF( BANDED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9994 )NC, SNAME, + $ CUPLO, CTRANS, CDIAG, N, K, LDA, INCX + IF( REWI ) + $ REWIND NTRA + CALL CSTBSV( IORDER, UPLO, TRANS, DIAG, + $ N, K, AA, LDA, XX, INCX ) + ELSE IF( PACKED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9995 )NC, SNAME, + $ CUPLO, CTRANS, CDIAG, N, INCX + IF( REWI ) + $ REWIND NTRA + CALL CSTPSV( IORDER, UPLO, TRANS, DIAG, + $ N, AA, XX, INCX ) + END IF + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9992 ) + FATAL = .TRUE. + GO TO 120 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = UPLO.EQ.UPLOS + ISAME( 2 ) = TRANS.EQ.TRANSS + ISAME( 3 ) = DIAG.EQ.DIAGS + ISAME( 4 ) = NS.EQ.N + IF( FULL )THEN + ISAME( 5 ) = LSE( AS, AA, LAA ) + ISAME( 6 ) = LDAS.EQ.LDA + IF( NULL )THEN + ISAME( 7 ) = LSE( XS, XX, LX ) + ELSE + ISAME( 7 ) = LSERES( 'ge', ' ', 1, N, XS, + $ XX, ABS( INCX ) ) + END IF + ISAME( 8 ) = INCXS.EQ.INCX + ELSE IF( BANDED )THEN + ISAME( 5 ) = KS.EQ.K + ISAME( 6 ) = LSE( AS, AA, LAA ) + ISAME( 7 ) = LDAS.EQ.LDA + IF( NULL )THEN + ISAME( 8 ) = LSE( XS, XX, LX ) + ELSE + ISAME( 8 ) = LSERES( 'ge', ' ', 1, N, XS, + $ XX, ABS( INCX ) ) + END IF + ISAME( 9 ) = INCXS.EQ.INCX + ELSE IF( PACKED )THEN + ISAME( 5 ) = LSE( AS, AA, LAA ) + IF( NULL )THEN + ISAME( 6 ) = LSE( XS, XX, LX ) + ELSE + ISAME( 6 ) = LSERES( 'ge', ' ', 1, N, XS, + $ XX, ABS( INCX ) ) + END IF + ISAME( 7 ) = INCXS.EQ.INCX + END IF +* +* If data was incorrectly changed, report and +* return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 120 + END IF +* + IF( .NOT.NULL )THEN + IF( SNAME( 10: 11 ).EQ.'mv' )THEN +* +* Check the result. +* + CALL SMVCH( TRANS, N, N, ONE, A, NMAX, X, + $ INCX, ZERO, Z, INCX, XT, G, + $ XX, EPS, ERR, FATAL, NOUT, + $ .TRUE. ) + ELSE IF( SNAME( 10: 11 ).EQ.'sv' )THEN +* +* Compute approximation to original vector. +* + DO 50 I = 1, N + Z( I ) = XX( 1 + ( I - 1 )* + $ ABS( INCX ) ) + XX( 1 + ( I - 1 )*ABS( INCX ) ) + $ = X( I ) + 50 CONTINUE + CALL SMVCH( TRANS, N, N, ONE, A, NMAX, Z, + $ INCX, ZERO, X, INCX, XT, G, + $ XX, EPS, ERR, FATAL, NOUT, + $ .FALSE. ) + END IF + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and return. + IF( FATAL ) + $ GO TO 120 + ELSE +* Avoid repeating tests with N.le.0. + GO TO 110 + END IF +* + 60 CONTINUE +* + 70 CONTINUE +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* + 110 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 130 +* + 120 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + IF( FULL )THEN + WRITE( NOUT, FMT = 9993 )NC, SNAME, CUPLO, CTRANS, CDIAG, N, + $ LDA, INCX + ELSE IF( BANDED )THEN + WRITE( NOUT, FMT = 9994 )NC, SNAME, CUPLO, CTRANS, CDIAG, N, + $ K, LDA, INCX + ELSE IF( PACKED )THEN + WRITE( NOUT, FMT = 9995 )NC, SNAME, CUPLO, CTRANS, CDIAG, N, + $ INCX + END IF +* + 130 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9997 FORMAT( ' ',A12, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', + $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, + $ ' - SUSPECT *******' ) + 9996 FORMAT( ' ******* ',A12, ' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( 1X, I6, ': ',A12, '(', 3( A14,',' ),/ 10x, I3, ', AP, ', + $ 'X,', I2, ') .' ) + 9994 FORMAT( 1X, I6, ': ',A12, '(', 3( A14,',' ),/ 10x, 2( I3, ',' ), + $ ' A,', I3, ', X,', I2, ') .' ) + 9993 FORMAT( 1X, I6, ': ',A12, '(', 3( A14,',' ),/ 10x, I3, ', A,', + $ I3, ', X,', I2, ') .' ) + 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of SCHK3. +* + END + SUBROUTINE SCHK4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, NMAX, + $ INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, YT, G, + $ Z, IORDER ) +* +* Tests SGER. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + REAL ZERO, HALF, ONE + PARAMETER ( ZERO = 0.0, HALF = 0.5, ONE = 1.0 ) +* .. Scalar Arguments .. + REAL EPS, THRESH + INTEGER INCMAX, NALF, NIDIM, NINC, NMAX, NOUT, NTRA, + $ IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), G( NMAX ), X( NMAX ), + $ XS( NMAX*INCMAX ), XX( NMAX*INCMAX ), + $ Y( NMAX ), YS( NMAX*INCMAX ), YT( NMAX ), + $ YY( NMAX*INCMAX ), Z( NMAX ) + INTEGER IDIM( NIDIM ), INC( NINC ) +* .. Local Scalars .. + REAL ALPHA, ALS, ERR, ERRMAX, TRANSL + INTEGER I, IA, IM, IN, INCX, INCXS, INCY, INCYS, IX, + $ IY, J, LAA, LDA, LDAS, LX, LY, M, MS, N, NARGS, + $ NC, ND, NS + LOGICAL NULL, RESET, SAME +* .. Local Arrays .. + REAL W( 1 ) + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LSE, LSERES + EXTERNAL LSE, LSERES +* .. External Subroutines .. + EXTERNAL CSGER, SMAKE, SMVCH +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, MIN +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Executable Statements .. +* Define the number of arguments. + NARGS = 9 +* + NC = 0 + RESET = .TRUE. + ERRMAX = ZERO +* + DO 120 IN = 1, NIDIM + N = IDIM( IN ) + ND = N/2 + 1 +* + DO 110 IM = 1, 2 + IF( IM.EQ.1 ) + $ M = MAX( N - ND, 0 ) + IF( IM.EQ.2 ) + $ M = MIN( N + ND, NMAX ) +* +* Set LDA to 1 more than minimum value if room. + LDA = M + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 110 + LAA = LDA*N + NULL = N.LE.0.OR.M.LE.0 +* + DO 100 IX = 1, NINC + INCX = INC( IX ) + LX = ABS( INCX )*M +* +* Generate the vector X. +* + TRANSL = HALF + CALL SMAKE( 'ge', ' ', ' ', 1, M, X, 1, XX, ABS( INCX ), + $ 0, M - 1, RESET, TRANSL ) + IF( M.GT.1 )THEN + X( M/2 ) = ZERO + XX( 1 + ABS( INCX )*( M/2 - 1 ) ) = ZERO + END IF +* + DO 90 IY = 1, NINC + INCY = INC( IY ) + LY = ABS( INCY )*N +* +* Generate the vector Y. +* + TRANSL = ZERO + CALL SMAKE( 'ge', ' ', ' ', 1, N, Y, 1, YY, + $ ABS( INCY ), 0, N - 1, RESET, TRANSL ) + IF( N.GT.1 )THEN + Y( N/2 ) = ZERO + YY( 1 + ABS( INCY )*( N/2 - 1 ) ) = ZERO + END IF +* + DO 80 IA = 1, NALF + ALPHA = ALF( IA ) +* +* Generate the matrix A. +* + TRANSL = ZERO + CALL SMAKE( SNAME( 8: 9 ), ' ', ' ', M, N, A, NMAX, + $ AA, LDA, M - 1, N - 1, RESET, TRANSL ) +* + NC = NC + 1 +* +* Save every datum before calling the subroutine. +* + MS = M + NS = N + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LX + XS( I ) = XX( I ) + 20 CONTINUE + INCXS = INCX + DO 30 I = 1, LY + YS( I ) = YY( I ) + 30 CONTINUE + INCYS = INCY +* +* Call the subroutine. +* + IF( TRACE ) + $ WRITE( NTRA, FMT = 9994 )NC, SNAME, M, N, + $ ALPHA, INCX, INCY, LDA + IF( REWI ) + $ REWIND NTRA + CALL CSGER( IORDER, M, N, ALPHA, XX, INCX, YY, + $ INCY, AA, LDA ) +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9993 ) + FATAL = .TRUE. + GO TO 140 + END IF +* +* See what data changed inside subroutine. +* + ISAME( 1 ) = MS.EQ.M + ISAME( 2 ) = NS.EQ.N + ISAME( 3 ) = ALS.EQ.ALPHA + ISAME( 4 ) = LSE( XS, XX, LX ) + ISAME( 5 ) = INCXS.EQ.INCX + ISAME( 6 ) = LSE( YS, YY, LY ) + ISAME( 7 ) = INCYS.EQ.INCY + IF( NULL )THEN + ISAME( 8 ) = LSE( AS, AA, LAA ) + ELSE + ISAME( 8 ) = LSERES( 'ge', ' ', M, N, AS, AA, + $ LDA ) + END IF + ISAME( 9 ) = LDAS.EQ.LDA +* +* If data was incorrectly changed, report and return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 140 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result column by column. +* + IF( INCX.GT.0 )THEN + DO 50 I = 1, M + Z( I ) = X( I ) + 50 CONTINUE + ELSE + DO 60 I = 1, M + Z( I ) = X( M - I + 1 ) + 60 CONTINUE + END IF + DO 70 J = 1, N + IF( INCY.GT.0 )THEN + W( 1 ) = Y( J ) + ELSE + W( 1 ) = Y( N - J + 1 ) + END IF + CALL SMVCH( 'N', M, 1, ALPHA, Z, NMAX, W, 1, + $ ONE, A( 1, J ), 1, YT, G, + $ AA( 1 + ( J - 1 )*LDA ), EPS, + $ ERR, FATAL, NOUT, .TRUE. ) + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and return. + IF( FATAL ) + $ GO TO 130 + 70 CONTINUE + ELSE +* Avoid repeating tests with M.le.0 or N.le.0. + GO TO 110 + END IF +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* + 110 CONTINUE +* + 120 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 150 +* + 130 CONTINUE + WRITE( NOUT, FMT = 9995 )J +* + 140 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + WRITE( NOUT, FMT = 9994 )NC, SNAME, M, N, ALPHA, INCX, INCY, LDA +* + 150 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9997 FORMAT( ' ',A12, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', + $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, + $ ' - SUSPECT *******' ) + 9996 FORMAT( ' ******* ',A12, ' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) + 9994 FORMAT( 1X, I6, ': ',A12, '(', 2( I3, ',' ), F4.1, ', X,', I2, + $ ', Y,', I2, ', A,', I3, ') .' ) + 9993 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of SCHK4. +* + END + SUBROUTINE SCHK5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, NMAX, + $ INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, YT, G, + $ Z, IORDER ) +* +* Tests SSYR and SSPR. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + REAL ZERO, HALF, ONE + PARAMETER ( ZERO = 0.0, HALF = 0.5, ONE = 1.0 ) +* .. Scalar Arguments .. + REAL EPS, THRESH + INTEGER INCMAX, NALF, NIDIM, NINC, NMAX, NOUT, NTRA, + $ IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), G( NMAX ), X( NMAX ), + $ XS( NMAX*INCMAX ), XX( NMAX*INCMAX ), + $ Y( NMAX ), YS( NMAX*INCMAX ), YT( NMAX ), + $ YY( NMAX*INCMAX ), Z( NMAX ) + INTEGER IDIM( NIDIM ), INC( NINC ) +* .. Local Scalars .. + REAL ALPHA, ALS, ERR, ERRMAX, TRANSL + INTEGER I, IA, IC, IN, INCX, INCXS, IX, J, JA, JJ, LAA, + $ LDA, LDAS, LJ, LX, N, NARGS, NC, NS + LOGICAL FULL, NULL, PACKED, RESET, SAME, UPPER + CHARACTER*1 UPLO, UPLOS + CHARACTER*14 CUPLO + CHARACTER*2 ICH +* .. Local Arrays .. + REAL W( 1 ) + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LSE, LSERES + EXTERNAL LSE, LSERES +* .. External Subroutines .. + EXTERNAL SMAKE, SMVCH, CSSPR, CSSYR +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICH/'UL'/ +* .. Executable Statements .. + FULL = SNAME( 9: 9 ).EQ.'y' + PACKED = SNAME( 9: 9 ).EQ.'p' +* Define the number of arguments. + IF( FULL )THEN + NARGS = 7 + ELSE IF( PACKED )THEN + NARGS = 6 + END IF +* + NC = 0 + RESET = .TRUE. + ERRMAX = ZERO +* + DO 100 IN = 1, NIDIM + N = IDIM( IN ) +* Set LDA to 1 more than minimum value if room. + LDA = N + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 100 + IF( PACKED )THEN + LAA = ( N*( N + 1 ) )/2 + ELSE + LAA = LDA*N + END IF +* + DO 90 IC = 1, 2 + UPLO = ICH( IC: IC ) + IF (UPLO.EQ.'U')THEN + CUPLO = ' CblasUpper' + ELSE + CUPLO = ' CblasLower' + END IF + UPPER = UPLO.EQ.'U' +* + DO 80 IX = 1, NINC + INCX = INC( IX ) + LX = ABS( INCX )*N +* +* Generate the vector X. +* + TRANSL = HALF + CALL SMAKE( 'ge', ' ', ' ', 1, N, X, 1, XX, ABS( INCX ), + $ 0, N - 1, RESET, TRANSL ) + IF( N.GT.1 )THEN + X( N/2 ) = ZERO + XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO + END IF +* + DO 70 IA = 1, NALF + ALPHA = ALF( IA ) + NULL = N.LE.0.OR.ALPHA.EQ.ZERO +* +* Generate the matrix A. +* + TRANSL = ZERO + CALL SMAKE( SNAME( 8: 9 ), UPLO, ' ', N, N, A, NMAX, + $ AA, LDA, N - 1, N - 1, RESET, TRANSL ) +* + NC = NC + 1 +* +* Save every datum before calling the subroutine. +* + UPLOS = UPLO + NS = N + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LX + XS( I ) = XX( I ) + 20 CONTINUE + INCXS = INCX +* +* Call the subroutine. +* + IF( FULL )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9993 )NC, SNAME, CUPLO, N, + $ ALPHA, INCX, LDA + IF( REWI ) + $ REWIND NTRA + CALL CSSYR( IORDER, UPLO, N, ALPHA, XX, INCX, + $ AA, LDA ) + ELSE IF( PACKED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9994 )NC, SNAME, CUPLO, N, + $ ALPHA, INCX + IF( REWI ) + $ REWIND NTRA + CALL CSSPR( IORDER, UPLO, N, ALPHA, XX, INCX, AA ) + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9992 ) + FATAL = .TRUE. + GO TO 120 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = UPLO.EQ.UPLOS + ISAME( 2 ) = NS.EQ.N + ISAME( 3 ) = ALS.EQ.ALPHA + ISAME( 4 ) = LSE( XS, XX, LX ) + ISAME( 5 ) = INCXS.EQ.INCX + IF( NULL )THEN + ISAME( 6 ) = LSE( AS, AA, LAA ) + ELSE + ISAME( 6 ) = LSERES( SNAME( 8: 9 ), UPLO, N, N, AS, + $ AA, LDA ) + END IF + IF( .NOT.PACKED )THEN + ISAME( 7 ) = LDAS.EQ.LDA + END IF +* +* If data was incorrectly changed, report and return. +* + SAME = .TRUE. + DO 30 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 30 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 120 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result column by column. +* + IF( INCX.GT.0 )THEN + DO 40 I = 1, N + Z( I ) = X( I ) + 40 CONTINUE + ELSE + DO 50 I = 1, N + Z( I ) = X( N - I + 1 ) + 50 CONTINUE + END IF + JA = 1 + DO 60 J = 1, N + W( 1 ) = Z( J ) + IF( UPPER )THEN + JJ = 1 + LJ = J + ELSE + JJ = J + LJ = N - J + 1 + END IF + CALL SMVCH( 'N', LJ, 1, ALPHA, Z( JJ ), LJ, W, + $ 1, ONE, A( JJ, J ), 1, YT, G, + $ AA( JA ), EPS, ERR, FATAL, NOUT, + $ .TRUE. ) + IF( FULL )THEN + IF( UPPER )THEN + JA = JA + LDA + ELSE + JA = JA + LDA + 1 + END IF + ELSE + JA = JA + LJ + END IF + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and return. + IF( FATAL ) + $ GO TO 110 + 60 CONTINUE + ELSE +* Avoid repeating tests if N.le.0. + IF( N.LE.0 ) + $ GO TO 100 + END IF +* + 70 CONTINUE +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 130 +* + 110 CONTINUE + WRITE( NOUT, FMT = 9995 )J +* + 120 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + IF( FULL )THEN + WRITE( NOUT, FMT = 9993 )NC, SNAME, CUPLO, N, ALPHA, INCX, LDA + ELSE IF( PACKED )THEN + WRITE( NOUT, FMT = 9994 )NC, SNAME, CUPLO, N, ALPHA, INCX + END IF +* + 130 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9997 FORMAT( ' ',A12, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', + $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, + $ ' - SUSPECT *******' ) + 9996 FORMAT( ' ******* ',A12, ' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) + 9994 FORMAT( 1X, I6, ': ',A12, '(', A14, ',', I3, ',', F4.1, ', X,', + $ I2, ', AP) .' ) + 9993 FORMAT( 1X, I6, ': ',A12, '(', A14, ',', I3, ',', F4.1, ', X,', + $ I2, ', A,', I3, ') .' ) + 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of SCHK5. +* + END + SUBROUTINE SCHK6( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, NMAX, + $ INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, YT, G, + $ Z, IORDER ) +* +* Tests SSYR2 and SSPR2. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + REAL ZERO, HALF, ONE + PARAMETER ( ZERO = 0.0, HALF = 0.5, ONE = 1.0 ) +* .. Scalar Arguments .. + REAL EPS, THRESH + INTEGER INCMAX, NALF, NIDIM, NINC, NMAX, NOUT, NTRA, + $ IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), G( NMAX ), X( NMAX ), + $ XS( NMAX*INCMAX ), XX( NMAX*INCMAX ), + $ Y( NMAX ), YS( NMAX*INCMAX ), YT( NMAX ), + $ YY( NMAX*INCMAX ), Z( NMAX, 2 ) + INTEGER IDIM( NIDIM ), INC( NINC ) +* .. Local Scalars .. + REAL ALPHA, ALS, ERR, ERRMAX, TRANSL + INTEGER I, IA, IC, IN, INCX, INCXS, INCY, INCYS, IX, + $ IY, J, JA, JJ, LAA, LDA, LDAS, LJ, LX, LY, N, + $ NARGS, NC, NS + LOGICAL FULL, NULL, PACKED, RESET, SAME, UPPER + CHARACTER*1 UPLO, UPLOS + CHARACTER*14 CUPLO + CHARACTER*2 ICH +* .. Local Arrays .. + REAL W( 2 ) + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LSE, LSERES + EXTERNAL LSE, LSERES +* .. External Subroutines .. + EXTERNAL SMAKE, SMVCH, CSSPR2, CSSYR2 +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICH/'UL'/ +* .. Executable Statements .. + FULL = SNAME( 9: 9 ).EQ.'y' + PACKED = SNAME( 9: 9 ).EQ.'p' +* Define the number of arguments. + IF( FULL )THEN + NARGS = 9 + ELSE IF( PACKED )THEN + NARGS = 8 + END IF +* + NC = 0 + RESET = .TRUE. + ERRMAX = ZERO +* + DO 140 IN = 1, NIDIM + N = IDIM( IN ) +* Set LDA to 1 more than minimum value if room. + LDA = N + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 140 + IF( PACKED )THEN + LAA = ( N*( N + 1 ) )/2 + ELSE + LAA = LDA*N + END IF +* + DO 130 IC = 1, 2 + UPLO = ICH( IC: IC ) + IF (UPLO.EQ.'U')THEN + CUPLO = ' CblasUpper' + ELSE + CUPLO = ' CblasLower' + END IF + UPPER = UPLO.EQ.'U' +* + DO 120 IX = 1, NINC + INCX = INC( IX ) + LX = ABS( INCX )*N +* +* Generate the vector X. +* + TRANSL = HALF + CALL SMAKE( 'ge', ' ', ' ', 1, N, X, 1, XX, ABS( INCX ), + $ 0, N - 1, RESET, TRANSL ) + IF( N.GT.1 )THEN + X( N/2 ) = ZERO + XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO + END IF +* + DO 110 IY = 1, NINC + INCY = INC( IY ) + LY = ABS( INCY )*N +* +* Generate the vector Y. +* + TRANSL = ZERO + CALL SMAKE( 'ge', ' ', ' ', 1, N, Y, 1, YY, + $ ABS( INCY ), 0, N - 1, RESET, TRANSL ) + IF( N.GT.1 )THEN + Y( N/2 ) = ZERO + YY( 1 + ABS( INCY )*( N/2 - 1 ) ) = ZERO + END IF +* + DO 100 IA = 1, NALF + ALPHA = ALF( IA ) + NULL = N.LE.0.OR.ALPHA.EQ.ZERO +* +* Generate the matrix A. +* + TRANSL = ZERO + CALL SMAKE( SNAME( 8: 9 ), UPLO, ' ', N, N, A, + $ NMAX, AA, LDA, N - 1, N - 1, RESET, + $ TRANSL ) +* + NC = NC + 1 +* +* Save every datum before calling the subroutine. +* + UPLOS = UPLO + NS = N + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LX + XS( I ) = XX( I ) + 20 CONTINUE + INCXS = INCX + DO 30 I = 1, LY + YS( I ) = YY( I ) + 30 CONTINUE + INCYS = INCY +* +* Call the subroutine. +* + IF( FULL )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9993 )NC, SNAME, CUPLO, N, + $ ALPHA, INCX, INCY, LDA + IF( REWI ) + $ REWIND NTRA + CALL CSSYR2( IORDER, UPLO, N, ALPHA, XX, INCX, + $ YY, INCY, AA, LDA ) + ELSE IF( PACKED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9994 )NC, SNAME, CUPLO, N, + $ ALPHA, INCX, INCY + IF( REWI ) + $ REWIND NTRA + CALL CSSPR2( IORDER, UPLO, N, ALPHA, XX, INCX, + $ YY, INCY, AA ) + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9992 ) + FATAL = .TRUE. + GO TO 160 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = UPLO.EQ.UPLOS + ISAME( 2 ) = NS.EQ.N + ISAME( 3 ) = ALS.EQ.ALPHA + ISAME( 4 ) = LSE( XS, XX, LX ) + ISAME( 5 ) = INCXS.EQ.INCX + ISAME( 6 ) = LSE( YS, YY, LY ) + ISAME( 7 ) = INCYS.EQ.INCY + IF( NULL )THEN + ISAME( 8 ) = LSE( AS, AA, LAA ) + ELSE + ISAME( 8 ) = LSERES( SNAME( 8: 9 ), UPLO, N, N, + $ AS, AA, LDA ) + END IF + IF( .NOT.PACKED )THEN + ISAME( 9 ) = LDAS.EQ.LDA + END IF +* +* If data was incorrectly changed, report and return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 160 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result column by column. +* + IF( INCX.GT.0 )THEN + DO 50 I = 1, N + Z( I, 1 ) = X( I ) + 50 CONTINUE + ELSE + DO 60 I = 1, N + Z( I, 1 ) = X( N - I + 1 ) + 60 CONTINUE + END IF + IF( INCY.GT.0 )THEN + DO 70 I = 1, N + Z( I, 2 ) = Y( I ) + 70 CONTINUE + ELSE + DO 80 I = 1, N + Z( I, 2 ) = Y( N - I + 1 ) + 80 CONTINUE + END IF + JA = 1 + DO 90 J = 1, N + W( 1 ) = Z( J, 2 ) + W( 2 ) = Z( J, 1 ) + IF( UPPER )THEN + JJ = 1 + LJ = J + ELSE + JJ = J + LJ = N - J + 1 + END IF + CALL SMVCH( 'N', LJ, 2, ALPHA, Z( JJ, 1 ), + $ NMAX, W, 1, ONE, A( JJ, J ), 1, + $ YT, G, AA( JA ), EPS, ERR, FATAL, + $ NOUT, .TRUE. ) + IF( FULL )THEN + IF( UPPER )THEN + JA = JA + LDA + ELSE + JA = JA + LDA + 1 + END IF + ELSE + JA = JA + LJ + END IF + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and return. + IF( FATAL ) + $ GO TO 150 + 90 CONTINUE + ELSE +* Avoid repeating tests with N.le.0. + IF( N.LE.0 ) + $ GO TO 140 + END IF +* + 100 CONTINUE +* + 110 CONTINUE +* + 120 CONTINUE +* + 130 CONTINUE +* + 140 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 170 +* + 150 CONTINUE + WRITE( NOUT, FMT = 9995 )J +* + 160 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + IF( FULL )THEN + WRITE( NOUT, FMT = 9993 )NC, SNAME, CUPLO, N, ALPHA, INCX, + $ INCY, LDA + ELSE IF( PACKED )THEN + WRITE( NOUT, FMT = 9994 )NC, SNAME, CUPLO, N, ALPHA, INCX, INCY + END IF +* + 170 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9997 FORMAT( ' ',A12, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', + $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, + $ ' - SUSPECT *******' ) + 9996 FORMAT( ' ******* ',A12, ' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) + 9994 FORMAT( 1X, I6, ': ',A12, '(', A14, ',', I3, ',', F4.1, ', X,', + $ I2, ', Y,', I2, ', AP) .' ) + 9993 FORMAT( 1X, I6, ': ',A12, '(', A14, ',', I3, ',', F4.1, ', X,', + $ I2, ', Y,', I2, ', A,', I3, ') .' ) + 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of SCHK6. +* + END + SUBROUTINE SMAKE( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, KL, + $ KU, RESET, TRANSL ) +* +* Generates values for an M by N matrix A within the bandwidth +* defined by KL and KU. +* Stores the values in the array AA in the data structure required +* by the routine, with unwanted elements set to rogue value. +* +* TYPE is 'ge', 'gb', 'sy', 'sb', 'sp', 'tr', 'tb' OR 'tp'. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + REAL ZERO, ONE + PARAMETER ( ZERO = 0.0, ONE = 1.0 ) + REAL ROGUE + PARAMETER ( ROGUE = -1.0E10 ) +* .. Scalar Arguments .. + REAL TRANSL + INTEGER KL, KU, LDA, M, N, NMAX + LOGICAL RESET + CHARACTER*1 DIAG, UPLO + CHARACTER*2 TYPE +* .. Array Arguments .. + REAL A( NMAX, * ), AA( * ) +* .. Local Scalars .. + INTEGER I, I1, I2, I3, IBEG, IEND, IOFF, J, KK + LOGICAL GEN, LOWER, SYM, TRI, UNIT, UPPER +* .. External Functions .. + REAL SBEG + EXTERNAL SBEG +* .. Intrinsic Functions .. + INTRINSIC MAX, MIN +* .. Executable Statements .. + GEN = TYPE( 1: 1 ).EQ.'g' + SYM = TYPE( 1: 1 ).EQ.'s' + TRI = TYPE( 1: 1 ).EQ.'t' + UPPER = ( SYM.OR.TRI ).AND.UPLO.EQ.'U' + LOWER = ( SYM.OR.TRI ).AND.UPLO.EQ.'L' + UNIT = TRI.AND.DIAG.EQ.'U' +* +* Generate data in array A. +* + DO 20 J = 1, N + DO 10 I = 1, M + IF( GEN.OR.( UPPER.AND.I.LE.J ).OR.( LOWER.AND.I.GE.J ) ) + $ THEN + IF( ( I.LE.J.AND.J - I.LE.KU ).OR. + $ ( I.GE.J.AND.I - J.LE.KL ) )THEN + A( I, J ) = SBEG( RESET ) + TRANSL + ELSE + A( I, J ) = ZERO + END IF + IF( I.NE.J )THEN + IF( SYM )THEN + A( J, I ) = A( I, J ) + ELSE IF( TRI )THEN + A( J, I ) = ZERO + END IF + END IF + END IF + 10 CONTINUE + IF( TRI ) + $ A( J, J ) = A( J, J ) + ONE + IF( UNIT ) + $ A( J, J ) = ONE + 20 CONTINUE +* +* Store elements in array AS in data structure required by routine. +* + IF( TYPE.EQ.'ge' )THEN + DO 50 J = 1, N + DO 30 I = 1, M + AA( I + ( J - 1 )*LDA ) = A( I, J ) + 30 CONTINUE + DO 40 I = M + 1, LDA + AA( I + ( J - 1 )*LDA ) = ROGUE + 40 CONTINUE + 50 CONTINUE + ELSE IF( TYPE.EQ.'gb' )THEN + DO 90 J = 1, N + DO 60 I1 = 1, KU + 1 - J + AA( I1 + ( J - 1 )*LDA ) = ROGUE + 60 CONTINUE + DO 70 I2 = I1, MIN( KL + KU + 1, KU + 1 + M - J ) + AA( I2 + ( J - 1 )*LDA ) = A( I2 + J - KU - 1, J ) + 70 CONTINUE + DO 80 I3 = I2, LDA + AA( I3 + ( J - 1 )*LDA ) = ROGUE + 80 CONTINUE + 90 CONTINUE + ELSE IF( TYPE.EQ.'sy'.OR.TYPE.EQ.'tr' )THEN + DO 130 J = 1, N + IF( UPPER )THEN + IBEG = 1 + IF( UNIT )THEN + IEND = J - 1 + ELSE + IEND = J + END IF + ELSE + IF( UNIT )THEN + IBEG = J + 1 + ELSE + IBEG = J + END IF + IEND = N + END IF + DO 100 I = 1, IBEG - 1 + AA( I + ( J - 1 )*LDA ) = ROGUE + 100 CONTINUE + DO 110 I = IBEG, IEND + AA( I + ( J - 1 )*LDA ) = A( I, J ) + 110 CONTINUE + DO 120 I = IEND + 1, LDA + AA( I + ( J - 1 )*LDA ) = ROGUE + 120 CONTINUE + 130 CONTINUE + ELSE IF( TYPE.EQ.'sb'.OR.TYPE.EQ.'tb' )THEN + DO 170 J = 1, N + IF( UPPER )THEN + KK = KL + 1 + IBEG = MAX( 1, KL + 2 - J ) + IF( UNIT )THEN + IEND = KL + ELSE + IEND = KL + 1 + END IF + ELSE + KK = 1 + IF( UNIT )THEN + IBEG = 2 + ELSE + IBEG = 1 + END IF + IEND = MIN( KL + 1, 1 + M - J ) + END IF + DO 140 I = 1, IBEG - 1 + AA( I + ( J - 1 )*LDA ) = ROGUE + 140 CONTINUE + DO 150 I = IBEG, IEND + AA( I + ( J - 1 )*LDA ) = A( I + J - KK, J ) + 150 CONTINUE + DO 160 I = IEND + 1, LDA + AA( I + ( J - 1 )*LDA ) = ROGUE + 160 CONTINUE + 170 CONTINUE + ELSE IF( TYPE.EQ.'sp'.OR.TYPE.EQ.'tp' )THEN + IOFF = 0 + DO 190 J = 1, N + IF( UPPER )THEN + IBEG = 1 + IEND = J + ELSE + IBEG = J + IEND = N + END IF + DO 180 I = IBEG, IEND + IOFF = IOFF + 1 + AA( IOFF ) = A( I, J ) + IF( I.EQ.J )THEN + IF( UNIT ) + $ AA( IOFF ) = ROGUE + END IF + 180 CONTINUE + 190 CONTINUE + END IF + RETURN +* +* End of SMAKE. +* + END + SUBROUTINE SMVCH( TRANS, M, N, ALPHA, A, NMAX, X, INCX, BETA, Y, + $ INCY, YT, G, YY, EPS, ERR, FATAL, NOUT, MV ) +* +* Checks the results of the computational tests. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + REAL ZERO, ONE + PARAMETER ( ZERO = 0.0, ONE = 1.0 ) +* .. Scalar Arguments .. + REAL ALPHA, BETA, EPS, ERR + INTEGER INCX, INCY, M, N, NMAX, NOUT + LOGICAL FATAL, MV + CHARACTER*1 TRANS +* .. Array Arguments .. + REAL A( NMAX, * ), G( * ), X( * ), Y( * ), YT( * ), + $ YY( * ) +* .. Local Scalars .. + REAL ERRI + INTEGER I, INCXL, INCYL, IY, J, JX, KX, KY, ML, NL + LOGICAL TRAN +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, SQRT +* .. Executable Statements .. + TRAN = TRANS.EQ.'T'.OR.TRANS.EQ.'C' + IF( TRAN )THEN + ML = N + NL = M + ELSE + ML = M + NL = N + END IF + IF( INCX.LT.0 )THEN + KX = NL + INCXL = -1 + ELSE + KX = 1 + INCXL = 1 + END IF + IF( INCY.LT.0 )THEN + KY = ML + INCYL = -1 + ELSE + KY = 1 + INCYL = 1 + END IF +* +* Compute expected result in YT using data in A, X and Y. +* Compute gauges in G. +* + IY = KY + DO 30 I = 1, ML + YT( IY ) = ZERO + G( IY ) = ZERO + JX = KX + IF( TRAN )THEN + DO 10 J = 1, NL + YT( IY ) = YT( IY ) + A( J, I )*X( JX ) + G( IY ) = G( IY ) + ABS( A( J, I )*X( JX ) ) + JX = JX + INCXL + 10 CONTINUE + ELSE + DO 20 J = 1, NL + YT( IY ) = YT( IY ) + A( I, J )*X( JX ) + G( IY ) = G( IY ) + ABS( A( I, J )*X( JX ) ) + JX = JX + INCXL + 20 CONTINUE + END IF + YT( IY ) = ALPHA*YT( IY ) + BETA*Y( IY ) + G( IY ) = ABS( ALPHA )*G( IY ) + ABS( BETA*Y( IY ) ) + IY = IY + INCYL + 30 CONTINUE +* +* Compute the error ratio for this result. +* + ERR = ZERO + DO 40 I = 1, ML + ERRI = ABS( YT( I ) - YY( 1 + ( I - 1 )*ABS( INCY ) ) )/EPS + IF( G( I ).NE.ZERO ) + $ ERRI = ERRI/G( I ) + ERR = MAX( ERR, ERRI ) + IF( ERR*SQRT( EPS ).GE.ONE ) + $ GO TO 50 + 40 CONTINUE +* If the loop completes, all results are at least half accurate. + GO TO 70 +* +* Report fatal error. +* + 50 FATAL = .TRUE. + WRITE( NOUT, FMT = 9999 ) + DO 60 I = 1, ML + IF( MV )THEN + WRITE( NOUT, FMT = 9998 )I, YT( I ), + $ YY( 1 + ( I - 1 )*ABS( INCY ) ) + ELSE + WRITE( NOUT, FMT = 9998 )I, + $ YY( 1 + ( I - 1 )*ABS( INCY ) ), YT(I) + END IF + 60 CONTINUE +* + 70 CONTINUE + RETURN +* + 9999 FORMAT( ' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL', + $ 'F ACCURATE *******', /' EXPECTED RESULT COMPU', + $ 'TED RESULT' ) + 9998 FORMAT( 1X, I7, 2G18.6 ) +* +* End of SMVCH. +* + END + LOGICAL FUNCTION LSE( RI, RJ, LR ) +* +* Tests if two arrays are identical. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Scalar Arguments .. + INTEGER LR +* .. Array Arguments .. + REAL RI( * ), RJ( * ) +* .. Local Scalars .. + INTEGER I +* .. Executable Statements .. + DO 10 I = 1, LR + IF( RI( I ).NE.RJ( I ) ) + $ GO TO 20 + 10 CONTINUE + LSE = .TRUE. + GO TO 30 + 20 CONTINUE + LSE = .FALSE. + 30 RETURN +* +* End of LSE. +* + END + LOGICAL FUNCTION LSERES( TYPE, UPLO, M, N, AA, AS, LDA ) +* +* Tests if selected elements in two arrays are equal. +* +* TYPE is 'ge', 'sy' or 'sp'. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Scalar Arguments .. + INTEGER LDA, M, N + CHARACTER*1 UPLO + CHARACTER*2 TYPE +* .. Array Arguments .. + REAL AA( LDA, * ), AS( LDA, * ) +* .. Local Scalars .. + INTEGER I, IBEG, IEND, J + LOGICAL UPPER +* .. Executable Statements .. + UPPER = UPLO.EQ.'U' + IF( TYPE.EQ.'ge' )THEN + DO 20 J = 1, N + DO 10 I = M + 1, LDA + IF( AA( I, J ).NE.AS( I, J ) ) + $ GO TO 70 + 10 CONTINUE + 20 CONTINUE + ELSE IF( TYPE.EQ.'sy' )THEN + DO 50 J = 1, N + IF( UPPER )THEN + IBEG = 1 + IEND = J + ELSE + IBEG = J + IEND = N + END IF + DO 30 I = 1, IBEG - 1 + IF( AA( I, J ).NE.AS( I, J ) ) + $ GO TO 70 + 30 CONTINUE + DO 40 I = IEND + 1, LDA + IF( AA( I, J ).NE.AS( I, J ) ) + $ GO TO 70 + 40 CONTINUE + 50 CONTINUE + END IF +* + 60 CONTINUE + LSERES = .TRUE. + GO TO 80 + 70 CONTINUE + LSERES = .FALSE. + 80 RETURN +* +* End of LSERES. +* + END + REAL FUNCTION SBEG( RESET ) +* +* Generates random numbers uniformly distributed between -0.5 and 0.5. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Scalar Arguments .. + LOGICAL RESET +* .. Local Scalars .. + INTEGER I, IC, MI +* .. Save statement .. + SAVE I, IC, MI +* .. Intrinsic Functions .. + INTRINSIC REAL +* .. Executable Statements .. + IF( RESET )THEN +* Initialize local variables. + MI = 891 + I = 7 + IC = 0 + RESET = .FALSE. + END IF +* +* The sequence of values of I is bounded between 1 and 999. +* If initial I = 1,2,3,6,7 or 9, the period will be 50. +* If initial I = 4 or 8, the period will be 25. +* If initial I = 5, the period will be 10. +* IC is used to break up the period by skipping 1 value of I in 6. +* + IC = IC + 1 + 10 I = I*MI + I = I - 1000*( I/1000 ) + IF( IC.GE.5 )THEN + IC = 0 + GO TO 10 + END IF + SBEG = REAL( I - 500 )/1001.0 + RETURN +* +* End of SBEG. +* + END + REAL FUNCTION SDIFF( X, Y ) +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* +* .. Scalar Arguments .. + REAL X, Y +* .. Executable Statements .. + SDIFF = X - Y + RETURN +* +* End of SDIFF. +* + END diff --git a/CBLAS/testing/c_sblat3.f b/CBLAS/testing/c_sblat3.f new file mode 100644 index 000000000..948fd6ed1 --- /dev/null +++ b/CBLAS/testing/c_sblat3.f @@ -0,0 +1,2479 @@ + PROGRAM SBLAT3 +* +* Test program for the REAL Level 3 Blas. +* +* The program must be driven by a short data file. The first 13 records +* of the file are read using list-directed input, the last 6 records +* are read using the format ( A12, L2 ). An annotated example of a data +* file can be obtained by deleting the first 3 characters from the +* following 19 lines: +* 'SBLAT3.SNAP' NAME OF SNAPSHOT OUTPUT FILE +* -1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0) +* F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD. +* F LOGICAL FLAG, T TO STOP ON FAILURES. +* T LOGICAL FLAG, T TO TEST ERROR EXITS. +* 2 0 TO TEST COLUMN-MAJOR, 1 TO TEST ROW-MAJOR, 2 TO TEST BOTH +* 16.0 THRESHOLD VALUE OF TEST RATIO +* 6 NUMBER OF VALUES OF N +* 0 1 2 3 5 9 VALUES OF N +* 3 NUMBER OF VALUES OF ALPHA +* 0.0 1.0 0.7 VALUES OF ALPHA +* 3 NUMBER OF VALUES OF BETA +* 0.0 1.0 1.3 VALUES OF BETA +* cblas_sgemm T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_ssymm T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_strmm T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_strsm T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_ssyrk T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_ssyr2k T PUT F FOR NO TEST. SAME COLUMNS. +* +* See: +* +* Dongarra J. J., Du Croz J. J., Duff I. S. and Hammarling S. +* A Set of Level 3 Basic Linear Algebra Subprograms. +* +* Technical Memorandum No.88 (Revision 1), Mathematics and +* Computer Science Division, Argonne National Laboratory, 9700 +* South Cass Avenue, Argonne, Illinois 60439, US. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + INTEGER NIN, NOUT + PARAMETER ( NIN = 5, NOUT = 6 ) + INTEGER NSUBS + PARAMETER ( NSUBS = 6 ) + REAL ZERO, HALF, ONE + PARAMETER ( ZERO = 0.0, HALF = 0.5, ONE = 1.0 ) + INTEGER NMAX + PARAMETER ( NMAX = 65 ) + INTEGER NIDMAX, NALMAX, NBEMAX + PARAMETER ( NIDMAX = 9, NALMAX = 7, NBEMAX = 7 ) +* .. Local Scalars .. + REAL EPS, ERR, THRESH + INTEGER I, ISNUM, J, N, NALF, NBET, NIDIM, NTRA, + $ LAYOUT + LOGICAL FATAL, LTESTT, REWI, SAME, SFATAL, TRACE, + $ TSTERR, CORDER, RORDER + CHARACTER*1 TRANSA, TRANSB + CHARACTER*12 SNAMET + CHARACTER*32 SNAPS +* .. Local Arrays .. + REAL AA( NMAX*NMAX ), AB( NMAX, 2*NMAX ), + $ ALF( NALMAX ), AS( NMAX*NMAX ), + $ BB( NMAX*NMAX ), BET( NBEMAX ), + $ BS( NMAX*NMAX ), C( NMAX, NMAX ), + $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ), + $ G( NMAX ), W( 2*NMAX ) + INTEGER IDIM( NIDMAX ) + LOGICAL LTEST( NSUBS ) + CHARACTER*12 SNAMES( NSUBS ) +* .. External Functions .. + REAL SDIFF + LOGICAL LSE + EXTERNAL SDIFF, LSE +* .. External Subroutines .. + EXTERNAL SCHK1, SCHK2, SCHK3, SCHK4, SCHK5, CS3CHKE, + $ SMMCH +* .. Intrinsic Functions .. + INTRINSIC MAX, MIN +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK + CHARACTER*12 SRNAMT +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK + COMMON /SRNAMC/SRNAMT +* .. Data statements .. + DATA SNAMES/'cblas_sgemm ', 'cblas_ssymm ', + $ 'cblas_strmm ', 'cblas_strsm ','cblas_ssyrk ', + $ 'cblas_ssyr2k'/ +* .. Executable Statements .. +* + NOUTC = NOUT +* Read name and unit number for summary output file and open file. +* + READ( NIN, FMT = * )SNAPS + READ( NIN, FMT = * )NTRA + TRACE = NTRA.GE.0 + IF( TRACE )THEN +* OPEN( NTRA, FILE = SNAPS, STATUS = 'NEW' ) + OPEN( NTRA, FILE = SNAPS ) + END IF +* Read the flag that directs rewinding of the snapshot file. + READ( NIN, FMT = * )REWI + REWI = REWI.AND.TRACE +* Read the flag that directs stopping on any failure. + READ( NIN, FMT = * )SFATAL +* Read the flag that indicates whether error exits are to be tested. + READ( NIN, FMT = * )TSTERR +* Read the flag that indicates whether row-major data layout to be tested. + READ( NIN, FMT = * )LAYOUT +* Read the threshold value of the test ratio + READ( NIN, FMT = * )THRESH +* +* Read and check the parameter values for the tests. +* +* Values of N + READ( NIN, FMT = * )NIDIM + IF( NIDIM.LT.1.OR.NIDIM.GT.NIDMAX )THEN + WRITE( NOUT, FMT = 9997 )'N', NIDMAX + GO TO 220 + END IF + READ( NIN, FMT = * )( IDIM( I ), I = 1, NIDIM ) + DO 10 I = 1, NIDIM + IF( IDIM( I ).LT.0.OR.IDIM( I ).GT.NMAX )THEN + WRITE( NOUT, FMT = 9996 )NMAX + GO TO 220 + END IF + 10 CONTINUE +* Values of ALPHA + READ( NIN, FMT = * )NALF + IF( NALF.LT.1.OR.NALF.GT.NALMAX )THEN + WRITE( NOUT, FMT = 9997 )'ALPHA', NALMAX + GO TO 220 + END IF + READ( NIN, FMT = * )( ALF( I ), I = 1, NALF ) +* Values of BETA + READ( NIN, FMT = * )NBET + IF( NBET.LT.1.OR.NBET.GT.NBEMAX )THEN + WRITE( NOUT, FMT = 9997 )'BETA', NBEMAX + GO TO 220 + END IF + READ( NIN, FMT = * )( BET( I ), I = 1, NBET ) +* +* Report values of parameters. +* + WRITE( NOUT, FMT = 9995 ) + WRITE( NOUT, FMT = 9994 )( IDIM( I ), I = 1, NIDIM ) + WRITE( NOUT, FMT = 9993 )( ALF( I ), I = 1, NALF ) + WRITE( NOUT, FMT = 9992 )( BET( I ), I = 1, NBET ) + IF( .NOT.TSTERR )THEN + WRITE( NOUT, FMT = * ) + WRITE( NOUT, FMT = 9984 ) + END IF + WRITE( NOUT, FMT = * ) + WRITE( NOUT, FMT = 9999 )THRESH + WRITE( NOUT, FMT = * ) + + RORDER = .FALSE. + CORDER = .FALSE. + IF (LAYOUT.EQ.2) THEN + RORDER = .TRUE. + CORDER = .TRUE. + WRITE( *, FMT = 10002 ) + ELSE IF (LAYOUT.EQ.1) THEN + RORDER = .TRUE. + WRITE( *, FMT = 10001 ) + ELSE IF (LAYOUT.EQ.0) THEN + CORDER = .TRUE. + WRITE( *, FMT = 10000 ) + END IF + WRITE( *, FMT = * ) + +* +* Read names of subroutines and flags which indicate +* whether they are to be tested. +* + DO 20 I = 1, NSUBS + LTEST( I ) = .FALSE. + 20 CONTINUE + 30 READ( NIN, FMT = 9988, END = 60 )SNAMET, LTESTT + DO 40 I = 1, NSUBS + IF( SNAMET.EQ.SNAMES( I ) ) + $ GO TO 50 + 40 CONTINUE + WRITE( NOUT, FMT = 9990 )SNAMET + STOP + 50 LTEST( I ) = LTESTT + GO TO 30 +* + 60 CONTINUE + CLOSE ( NIN ) +* +* Compute EPS (the machine precision). +* + EPS = ONE + 70 CONTINUE + IF( SDIFF( ONE + EPS, ONE ).EQ.ZERO ) + $ GO TO 80 + EPS = HALF*EPS + GO TO 70 + 80 CONTINUE + EPS = EPS + EPS + WRITE( NOUT, FMT = 9998 )EPS +* +* Check the reliability of SMMCH using exact data. +* + N = MIN( 32, NMAX ) + DO 100 J = 1, N + DO 90 I = 1, N + AB( I, J ) = MAX( I - J + 1, 0 ) + 90 CONTINUE + AB( J, NMAX + 1 ) = J + AB( 1, NMAX + J ) = J + C( J, 1 ) = ZERO + 100 CONTINUE + DO 110 J = 1, N + CC( J ) = J*( ( J + 1 )*J )/2 - ( ( J + 1 )*J*( J - 1 ) )/3 + 110 CONTINUE +* CC holds the exact result. On exit from SMMCH CT holds +* the result computed by SMMCH. + TRANSA = 'N' + TRANSB = 'N' + CALL SMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX, + $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC, + $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. ) + SAME = LSE( CC, CT, N ) + IF( .NOT.SAME.OR.ERR.NE.ZERO )THEN + WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR + STOP + END IF + TRANSB = 'T' + CALL SMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX, + $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC, + $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. ) + SAME = LSE( CC, CT, N ) + IF( .NOT.SAME.OR.ERR.NE.ZERO )THEN + WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR + STOP + END IF + DO 120 J = 1, N + AB( J, NMAX + 1 ) = N - J + 1 + AB( 1, NMAX + J ) = N - J + 1 + 120 CONTINUE + DO 130 J = 1, N + CC( N - J + 1 ) = J*( ( J + 1 )*J )/2 - + $ ( ( J + 1 )*J*( J - 1 ) )/3 + 130 CONTINUE + TRANSA = 'T' + TRANSB = 'N' + CALL SMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX, + $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC, + $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. ) + SAME = LSE( CC, CT, N ) + IF( .NOT.SAME.OR.ERR.NE.ZERO )THEN + WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR + STOP + END IF + TRANSB = 'T' + CALL SMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX, + $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC, + $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. ) + SAME = LSE( CC, CT, N ) + IF( .NOT.SAME.OR.ERR.NE.ZERO )THEN + WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR + STOP + END IF +* +* Test each subroutine in turn. +* + DO 200 ISNUM = 1, NSUBS + WRITE( NOUT, FMT = * ) + IF( .NOT.LTEST( ISNUM ) )THEN +* Subprogram is not to be tested. + WRITE( NOUT, FMT = 9987 )SNAMES( ISNUM ) + ELSE + SRNAMT = SNAMES( ISNUM ) +* Test error exits. + IF( TSTERR )THEN + CALL CS3CHKE( SNAMES( ISNUM ) ) + WRITE( NOUT, FMT = * ) + END IF +* Test computations. + INFOT = 0 + OK = .TRUE. + FATAL = .FALSE. + GO TO ( 140, 150, 160, 160, 170, 180 )ISNUM +* Test SGEMM, 01. + 140 IF (CORDER) THEN + CALL SCHK1( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, + $ CC, CS, CT, G, 0 ) + END IF + IF (RORDER) THEN + CALL SCHK1( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, + $ CC, CS, CT, G, 1 ) + END IF + GO TO 190 +* Test SSYMM, 02. + 150 IF (CORDER) THEN + CALL SCHK2( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, + $ CC, CS, CT, G, 0 ) + END IF + IF (RORDER) THEN + CALL SCHK2( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, + $ CC, CS, CT, G, 1 ) + END IF + GO TO 190 +* Test STRMM, 03, STRSM, 04. + 160 IF (CORDER) THEN + CALL SCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NMAX, AB, + $ AA, AS, AB( 1, NMAX + 1 ), BB, BS, CT, G, C, + $ 0 ) + END IF + IF (RORDER) THEN + CALL SCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NMAX, AB, + $ AA, AS, AB( 1, NMAX + 1 ), BB, BS, CT, G, C, + $ 1 ) + END IF + GO TO 190 +* Test SSYRK, 05. + 170 IF (CORDER) THEN + CALL SCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, + $ CC, CS, CT, G, 0 ) + END IF + IF (RORDER) THEN + CALL SCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, + $ CC, CS, CT, G, 1 ) + END IF + GO TO 190 +* Test SSYR2K, 06. + 180 IF (CORDER) THEN + CALL SCHK5( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, BB, BS, C, CC, CS, CT, G, W, + $ 0 ) + END IF + IF (RORDER) THEN + CALL SCHK5( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, BB, BS, C, CC, CS, CT, G, W, + $ 1 ) + END IF + GO TO 190 +* + 190 IF( FATAL.AND.SFATAL ) + $ GO TO 210 + END IF + 200 CONTINUE + WRITE( NOUT, FMT = 9986 ) + GO TO 230 +* + 210 CONTINUE + WRITE( NOUT, FMT = 9985 ) + GO TO 230 +* + 220 CONTINUE + WRITE( NOUT, FMT = 9991 ) +* + 230 CONTINUE + IF( TRACE ) + $ CLOSE ( NTRA ) + CLOSE ( NOUT ) + STOP +* +10002 FORMAT( ' COLUMN-MAJOR AND ROW-MAJOR DATA LAYOUTS ARE TESTED' ) +10001 FORMAT( ' ROW-MAJOR DATA LAYOUT IS TESTED' ) +10000 FORMAT( ' COLUMN-MAJOR DATA LAYOUT IS TESTED' ) + 9999 FORMAT( ' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES', + $ 'S THAN', F8.2 ) + 9998 FORMAT( ' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1P, E9.1 ) + 9997 FORMAT( ' NUMBER OF VALUES OF ', A, ' IS LESS THAN 1 OR GREATER ', + $ 'THAN ', I2 ) + 9996 FORMAT( ' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', I2 ) + 9995 FORMAT( ' TESTS OF THE REAL LEVEL 3 BLAS', //' THE F', + $ 'OLLOWING PARAMETER VALUES WILL BE USED:' ) + 9994 FORMAT( ' FOR N ', 9I6 ) + 9993 FORMAT( ' FOR ALPHA ', 7F6.1 ) + 9992 FORMAT( ' FOR BETA ', 7F6.1 ) + 9991 FORMAT( ' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM', + $ /' ******* TESTS ABANDONED *******' ) + 9990 FORMAT( ' SUBPROGRAM NAME ', A12,' NOT RECOGNIZED', /' ******* ', + $ 'TESTS ABANDONED *******' ) + 9989 FORMAT( ' ERROR IN SMMCH - IN-LINE DOT PRODUCTS ARE BEING EVALU', + $ 'ATED WRONGLY.', /' SMMCH WAS CALLED WITH TRANSA = ', A1, + $ ' AND TRANSB = ', A1, /' AND RETURNED SAME = ', L1, ' AND ', + $ 'ERR = ', F12.3, '.', /' THIS MAY BE DUE TO FAULTS IN THE ', + $ 'ARITHMETIC OR THE COMPILER.', /' ******* TESTS ABANDONED ', + $ '*******' ) + 9988 FORMAT( A12,L2 ) + 9987 FORMAT( 1X, A12,' WAS NOT TESTED' ) + 9986 FORMAT( /' END OF TESTS' ) + 9985 FORMAT( /' ******* FATAL ERROR - TESTS ABANDONED *******' ) + 9984 FORMAT( ' ERROR-EXITS WILL NOT BE TESTED' ) +* +* End of SBLAT3. +* + END + SUBROUTINE SCHK1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX, + $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G, + $ IORDER ) +* +* Tests SGEMM. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + REAL ZERO + PARAMETER ( ZERO = 0.0 ) +* .. Scalar Arguments .. + REAL EPS, THRESH + INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), B( NMAX, NMAX ), + $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ), + $ C( NMAX, NMAX ), CC( NMAX*NMAX ), + $ CS( NMAX*NMAX ), CT( NMAX ), G( NMAX ) + INTEGER IDIM( NIDIM ) +* .. Local Scalars .. + REAL ALPHA, ALS, BETA, BLS, ERR, ERRMAX + INTEGER I, IA, IB, ICA, ICB, IK, IM, IN, K, KS, LAA, + $ LBB, LCC, LDA, LDAS, LDB, LDBS, LDC, LDCS, M, + $ MA, MB, MS, N, NA, NARGS, NB, NC, NS + LOGICAL NULL, RESET, SAME, TRANA, TRANB + CHARACTER*1 TRANAS, TRANBS, TRANSA, TRANSB + CHARACTER*3 ICH +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LSE, LSERES + EXTERNAL LSE, LSERES +* .. External Subroutines .. + EXTERNAL CSGEMM, SMAKE, SMMCH +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICH/'NTC'/ +* .. Executable Statements .. +* + NARGS = 13 + NC = 0 + RESET = .TRUE. + ERRMAX = ZERO +* + DO 110 IM = 1, NIDIM + M = IDIM( IM ) +* + DO 100 IN = 1, NIDIM + N = IDIM( IN ) +* Set LDC to 1 more than minimum value if room. + LDC = M + IF( LDC.LT.NMAX ) + $ LDC = LDC + 1 +* Skip tests if not enough room. + IF( LDC.GT.NMAX ) + $ GO TO 100 + LCC = LDC*N + NULL = N.LE.0.OR.M.LE.0 +* + DO 90 IK = 1, NIDIM + K = IDIM( IK ) +* + DO 80 ICA = 1, 3 + TRANSA = ICH( ICA: ICA ) + TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C' +* + IF( TRANA )THEN + MA = K + NA = M + ELSE + MA = M + NA = K + END IF +* Set LDA to 1 more than minimum value if room. + LDA = MA + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 80 + LAA = LDA*NA +* +* Generate the matrix A. +* + CALL SMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA, + $ RESET, ZERO ) +* + DO 70 ICB = 1, 3 + TRANSB = ICH( ICB: ICB ) + TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C' +* + IF( TRANB )THEN + MB = N + NB = K + ELSE + MB = K + NB = N + END IF +* Set LDB to 1 more than minimum value if room. + LDB = MB + IF( LDB.LT.NMAX ) + $ LDB = LDB + 1 +* Skip tests if not enough room. + IF( LDB.GT.NMAX ) + $ GO TO 70 + LBB = LDB*NB +* +* Generate the matrix B. +* + CALL SMAKE( 'GE', ' ', ' ', MB, NB, B, NMAX, BB, + $ LDB, RESET, ZERO ) +* + DO 60 IA = 1, NALF + ALPHA = ALF( IA ) +* + DO 50 IB = 1, NBET + BETA = BET( IB ) +* +* Generate the matrix C. +* + CALL SMAKE( 'GE', ' ', ' ', M, N, C, NMAX, + $ CC, LDC, RESET, ZERO ) +* + NC = NC + 1 +* +* Save every datum before calling the +* subroutine. +* + TRANAS = TRANSA + TRANBS = TRANSB + MS = M + NS = N + KS = K + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LBB + BS( I ) = BB( I ) + 20 CONTINUE + LDBS = LDB + BLS = BETA + DO 30 I = 1, LCC + CS( I ) = CC( I ) + 30 CONTINUE + LDCS = LDC +* +* Call the subroutine. +* + IF( TRACE ) + $ CALL SPRCN1(NTRA, NC, SNAME, IORDER, + $ TRANSA, TRANSB, M, N, K, ALPHA, LDA, + $ LDB, BETA, LDC) + IF( REWI ) + $ REWIND NTRA + CALL CSGEMM( IORDER, TRANSA, TRANSB, M, N, + $ K, ALPHA, AA, LDA, BB, LDB, + $ BETA, CC, LDC ) +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9994 ) + FATAL = .TRUE. + GO TO 120 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = TRANSA.EQ.TRANAS + ISAME( 2 ) = TRANSB.EQ.TRANBS + ISAME( 3 ) = MS.EQ.M + ISAME( 4 ) = NS.EQ.N + ISAME( 5 ) = KS.EQ.K + ISAME( 6 ) = ALS.EQ.ALPHA + ISAME( 7 ) = LSE( AS, AA, LAA ) + ISAME( 8 ) = LDAS.EQ.LDA + ISAME( 9 ) = LSE( BS, BB, LBB ) + ISAME( 10 ) = LDBS.EQ.LDB + ISAME( 11 ) = BLS.EQ.BETA + IF( NULL )THEN + ISAME( 12 ) = LSE( CS, CC, LCC ) + ELSE + ISAME( 12 ) = LSERES( 'GE', ' ', M, N, CS, + $ CC, LDC ) + END IF + ISAME( 13 ) = LDCS.EQ.LDC +* +* If data was incorrectly changed, report +* and return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I+1 + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 120 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result. +* + CALL SMMCH( TRANSA, TRANSB, M, N, K, + $ ALPHA, A, NMAX, B, NMAX, BETA, + $ C, NMAX, CT, G, CC, LDC, EPS, + $ ERR, FATAL, NOUT, .TRUE. ) + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and +* return. + IF( FATAL ) + $ GO TO 120 + END IF +* + 50 CONTINUE +* + 60 CONTINUE +* + 70 CONTINUE +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* + 110 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 130 +* + 120 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + CALL SPRCN1(NOUT, NC, SNAME, IORDER, TRANSA, TRANSB, + $ M, N, K, ALPHA, LDA, LDB, BETA, LDC) +* + 130 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9996 FORMAT( ' ******* ', A12,' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( 1X, I6, ': ', A12,'(''', A1, ''',''', A1, ''',', + $ 3( I3, ',' ), F4.1, ', A,', I3, ', B,', I3, ',', F4.1, ', ', + $ 'C,', I3, ').' ) + 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of SCHK1. +* + END +* +* +* + SUBROUTINE SPRCN1(NOUT, NC, SNAME, IORDER, TRANSA, TRANSB, M, N, + $ K, ALPHA, LDA, LDB, BETA, LDC) + INTEGER NOUT, NC, IORDER, M, N, K, LDA, LDB, LDC + REAL ALPHA, BETA + CHARACTER*1 TRANSA, TRANSB + CHARACTER*12 SNAME + CHARACTER*14 CRC, CTA,CTB + + IF (TRANSA.EQ.'N')THEN + CTA = ' CblasNoTrans' + ELSE IF (TRANSA.EQ.'T')THEN + CTA = ' CblasTrans' + ELSE + CTA = 'CblasConjTrans' + END IF + IF (TRANSB.EQ.'N')THEN + CTB = ' CblasNoTrans' + ELSE IF (TRANSB.EQ.'T')THEN + CTB = ' CblasTrans' + ELSE + CTB = 'CblasConjTrans' + END IF + IF (IORDER.EQ.1)THEN + CRC = ' CblasRowMajor' + ELSE + CRC = ' CblasColMajor' + END IF + WRITE(NOUT, FMT = 9995)NC,SNAME,CRC, CTA,CTB + WRITE(NOUT, FMT = 9994)M, N, K, ALPHA, LDA, LDB, BETA, LDC + + 9995 FORMAT( 1X, I6, ': ', A12,'(', A14, ',', A14, ',', A14, ',') + 9994 FORMAT( 20X, 3( I3, ',' ), F4.1, ', A,', I3, ', B,', I3, ',', + $ F4.1, ', ', 'C,', I3, ').' ) + END +* + SUBROUTINE SCHK2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX, + $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G, + $ IORDER ) +* +* Tests SSYMM. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + REAL ZERO + PARAMETER ( ZERO = 0.0 ) +* .. Scalar Arguments .. + REAL EPS, THRESH + INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), B( NMAX, NMAX ), + $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ), + $ C( NMAX, NMAX ), CC( NMAX*NMAX ), + $ CS( NMAX*NMAX ), CT( NMAX ), G( NMAX ) + INTEGER IDIM( NIDIM ) +* .. Local Scalars .. + REAL ALPHA, ALS, BETA, BLS, ERR, ERRMAX + INTEGER I, IA, IB, ICS, ICU, IM, IN, LAA, LBB, LCC, + $ LDA, LDAS, LDB, LDBS, LDC, LDCS, M, MS, N, NA, + $ NARGS, NC, NS + LOGICAL LEFT, NULL, RESET, SAME + CHARACTER*1 SIDE, SIDES, UPLO, UPLOS + CHARACTER*2 ICHS, ICHU +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LSE, LSERES + EXTERNAL LSE, LSERES +* .. External Subroutines .. + EXTERNAL SMAKE, SMMCH, CSSYMM +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICHS/'LR'/, ICHU/'UL'/ +* .. Executable Statements .. +* + NARGS = 12 + NC = 0 + RESET = .TRUE. + ERRMAX = ZERO +* + DO 100 IM = 1, NIDIM + M = IDIM( IM ) +* + DO 90 IN = 1, NIDIM + N = IDIM( IN ) +* Set LDC to 1 more than minimum value if room. + LDC = M + IF( LDC.LT.NMAX ) + $ LDC = LDC + 1 +* Skip tests if not enough room. + IF( LDC.GT.NMAX ) + $ GO TO 90 + LCC = LDC*N + NULL = N.LE.0.OR.M.LE.0 +* +* Set LDB to 1 more than minimum value if room. + LDB = M + IF( LDB.LT.NMAX ) + $ LDB = LDB + 1 +* Skip tests if not enough room. + IF( LDB.GT.NMAX ) + $ GO TO 90 + LBB = LDB*N +* +* Generate the matrix B. +* + CALL SMAKE( 'GE', ' ', ' ', M, N, B, NMAX, BB, LDB, RESET, + $ ZERO ) +* + DO 80 ICS = 1, 2 + SIDE = ICHS( ICS: ICS ) + LEFT = SIDE.EQ.'L' +* + IF( LEFT )THEN + NA = M + ELSE + NA = N + END IF +* Set LDA to 1 more than minimum value if room. + LDA = NA + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 80 + LAA = LDA*NA +* + DO 70 ICU = 1, 2 + UPLO = ICHU( ICU: ICU ) +* +* Generate the symmetric matrix A. +* + CALL SMAKE( 'SY', UPLO, ' ', NA, NA, A, NMAX, AA, LDA, + $ RESET, ZERO ) +* + DO 60 IA = 1, NALF + ALPHA = ALF( IA ) +* + DO 50 IB = 1, NBET + BETA = BET( IB ) +* +* Generate the matrix C. +* + CALL SMAKE( 'GE', ' ', ' ', M, N, C, NMAX, CC, + $ LDC, RESET, ZERO ) +* + NC = NC + 1 +* +* Save every datum before calling the +* subroutine. +* + SIDES = SIDE + UPLOS = UPLO + MS = M + NS = N + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LBB + BS( I ) = BB( I ) + 20 CONTINUE + LDBS = LDB + BLS = BETA + DO 30 I = 1, LCC + CS( I ) = CC( I ) + 30 CONTINUE + LDCS = LDC +* +* Call the subroutine. +* + IF( TRACE ) + $ CALL SPRCN2(NTRA, NC, SNAME, IORDER, + $ SIDE, UPLO, M, N, ALPHA, LDA, LDB, + $ BETA, LDC) + IF( REWI ) + $ REWIND NTRA + CALL CSSYMM( IORDER, SIDE, UPLO, M, N, ALPHA, + $ AA, LDA, BB, LDB, BETA, CC, LDC ) +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9994 ) + FATAL = .TRUE. + GO TO 110 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = SIDES.EQ.SIDE + ISAME( 2 ) = UPLOS.EQ.UPLO + ISAME( 3 ) = MS.EQ.M + ISAME( 4 ) = NS.EQ.N + ISAME( 5 ) = ALS.EQ.ALPHA + ISAME( 6 ) = LSE( AS, AA, LAA ) + ISAME( 7 ) = LDAS.EQ.LDA + ISAME( 8 ) = LSE( BS, BB, LBB ) + ISAME( 9 ) = LDBS.EQ.LDB + ISAME( 10 ) = BLS.EQ.BETA + IF( NULL )THEN + ISAME( 11 ) = LSE( CS, CC, LCC ) + ELSE + ISAME( 11 ) = LSERES( 'GE', ' ', M, N, CS, + $ CC, LDC ) + END IF + ISAME( 12 ) = LDCS.EQ.LDC +* +* If data was incorrectly changed, report and +* return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I+1 + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 110 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result. +* + IF( LEFT )THEN + CALL SMMCH( 'N', 'N', M, N, M, ALPHA, A, + $ NMAX, B, NMAX, BETA, C, NMAX, + $ CT, G, CC, LDC, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + ELSE + CALL SMMCH( 'N', 'N', M, N, N, ALPHA, B, + $ NMAX, A, NMAX, BETA, C, NMAX, + $ CT, G, CC, LDC, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + END IF + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and +* return. + IF( FATAL ) + $ GO TO 110 + END IF +* + 50 CONTINUE +* + 60 CONTINUE +* + 70 CONTINUE +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 120 +* + 110 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + CALL SPRCN2(NOUT, NC, SNAME, IORDER, SIDE, UPLO, M, N, ALPHA, LDA, + $ LDB, BETA, LDC) +* + 120 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9996 FORMAT( ' ******* ', A12,' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( 1X, I6, ': ', A12,'(', 2( '''', A1, ''',' ), 2( I3, ',' ), + $ F4.1, ', A,', I3, ', B,', I3, ',', F4.1, ', C,', I3, ') ', + $ ' .' ) + 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of SCHK2. +* + END +* + SUBROUTINE SPRCN2(NOUT, NC, SNAME, IORDER, SIDE, UPLO, M, N, + $ ALPHA, LDA, LDB, BETA, LDC) + INTEGER NOUT, NC, IORDER, M, N, LDA, LDB, LDC + REAL ALPHA, BETA + CHARACTER*1 SIDE, UPLO + CHARACTER*12 SNAME + CHARACTER*14 CRC, CS,CU + + IF (SIDE.EQ.'L')THEN + CS = ' CblasLeft' + ELSE + CS = ' CblasRight' + END IF + IF (UPLO.EQ.'U')THEN + CU = ' CblasUpper' + ELSE + CU = ' CblasLower' + END IF + IF (IORDER.EQ.1)THEN + CRC = ' CblasRowMajor' + ELSE + CRC = ' CblasColMajor' + END IF + WRITE(NOUT, FMT = 9995)NC,SNAME,CRC, CS,CU + WRITE(NOUT, FMT = 9994)M, N, ALPHA, LDA, LDB, BETA, LDC + + 9995 FORMAT( 1X, I6, ': ', A12,'(', A14, ',', A14, ',', A14, ',') + 9994 FORMAT( 20X, 2( I3, ',' ), F4.1, ', A,', I3, ', B,', I3, ',', + $ F4.1, ', ', 'C,', I3, ').' ) + END +* + SUBROUTINE SCHK3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NMAX, A, AA, AS, + $ B, BB, BS, CT, G, C, IORDER ) +* +* Tests STRMM and STRSM. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + REAL ZERO, ONE + PARAMETER ( ZERO = 0.0, ONE = 1.0 ) +* .. Scalar Arguments .. + REAL EPS, THRESH + INTEGER NALF, NIDIM, NMAX, NOUT, NTRA, IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), B( NMAX, NMAX ), + $ BB( NMAX*NMAX ), BS( NMAX*NMAX ), + $ C( NMAX, NMAX ), CT( NMAX ), G( NMAX ) + INTEGER IDIM( NIDIM ) +* .. Local Scalars .. + REAL ALPHA, ALS, ERR, ERRMAX + INTEGER I, IA, ICD, ICS, ICT, ICU, IM, IN, J, LAA, LBB, + $ LDA, LDAS, LDB, LDBS, M, MS, N, NA, NARGS, NC, + $ NS + LOGICAL LEFT, NULL, RESET, SAME + CHARACTER*1 DIAG, DIAGS, SIDE, SIDES, TRANAS, TRANSA, UPLO, + $ UPLOS + CHARACTER*2 ICHD, ICHS, ICHU + CHARACTER*3 ICHT +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LSE, LSERES + EXTERNAL LSE, LSERES +* .. External Subroutines .. + EXTERNAL SMAKE, SMMCH, CSTRMM, CSTRSM +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICHU/'UL'/, ICHT/'NTC'/, ICHD/'UN'/, ICHS/'LR'/ +* .. Executable Statements .. +* + NARGS = 11 + NC = 0 + RESET = .TRUE. + ERRMAX = ZERO +* Set up zero matrix for SMMCH. + DO 20 J = 1, NMAX + DO 10 I = 1, NMAX + C( I, J ) = ZERO + 10 CONTINUE + 20 CONTINUE +* + DO 140 IM = 1, NIDIM + M = IDIM( IM ) +* + DO 130 IN = 1, NIDIM + N = IDIM( IN ) +* Set LDB to 1 more than minimum value if room. + LDB = M + IF( LDB.LT.NMAX ) + $ LDB = LDB + 1 +* Skip tests if not enough room. + IF( LDB.GT.NMAX ) + $ GO TO 130 + LBB = LDB*N + NULL = M.LE.0.OR.N.LE.0 +* + DO 120 ICS = 1, 2 + SIDE = ICHS( ICS: ICS ) + LEFT = SIDE.EQ.'L' + IF( LEFT )THEN + NA = M + ELSE + NA = N + END IF +* Set LDA to 1 more than minimum value if room. + LDA = NA + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 130 + LAA = LDA*NA +* + DO 110 ICU = 1, 2 + UPLO = ICHU( ICU: ICU ) +* + DO 100 ICT = 1, 3 + TRANSA = ICHT( ICT: ICT ) +* + DO 90 ICD = 1, 2 + DIAG = ICHD( ICD: ICD ) +* + DO 80 IA = 1, NALF + ALPHA = ALF( IA ) +* +* Generate the matrix A. +* + CALL SMAKE( 'TR', UPLO, DIAG, NA, NA, A, + $ NMAX, AA, LDA, RESET, ZERO ) +* +* Generate the matrix B. +* + CALL SMAKE( 'GE', ' ', ' ', M, N, B, NMAX, + $ BB, LDB, RESET, ZERO ) +* + NC = NC + 1 +* +* Save every datum before calling the +* subroutine. +* + SIDES = SIDE + UPLOS = UPLO + TRANAS = TRANSA + DIAGS = DIAG + MS = M + NS = N + ALS = ALPHA + DO 30 I = 1, LAA + AS( I ) = AA( I ) + 30 CONTINUE + LDAS = LDA + DO 40 I = 1, LBB + BS( I ) = BB( I ) + 40 CONTINUE + LDBS = LDB +* +* Call the subroutine. +* + IF( SNAME( 10: 11 ).EQ.'mm' )THEN + IF( TRACE ) + $ CALL SPRCN3( NTRA, NC, SNAME, IORDER, + $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, + $ LDA, LDB) + IF( REWI ) + $ REWIND NTRA + CALL CSTRMM( IORDER, SIDE, UPLO, TRANSA, + $ DIAG, M, N, ALPHA, AA, LDA, + $ BB, LDB ) + ELSE IF( SNAME( 10: 11 ).EQ.'sm' )THEN + IF( TRACE ) + $ CALL SPRCN3( NTRA, NC, SNAME, IORDER, + $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, + $ LDA, LDB) + IF( REWI ) + $ REWIND NTRA + CALL CSTRSM( IORDER, SIDE, UPLO, TRANSA, + $ DIAG, M, N, ALPHA, AA, LDA, + $ BB, LDB ) + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9994 ) + FATAL = .TRUE. + GO TO 150 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = SIDES.EQ.SIDE + ISAME( 2 ) = UPLOS.EQ.UPLO + ISAME( 3 ) = TRANAS.EQ.TRANSA + ISAME( 4 ) = DIAGS.EQ.DIAG + ISAME( 5 ) = MS.EQ.M + ISAME( 6 ) = NS.EQ.N + ISAME( 7 ) = ALS.EQ.ALPHA + ISAME( 8 ) = LSE( AS, AA, LAA ) + ISAME( 9 ) = LDAS.EQ.LDA + IF( NULL )THEN + ISAME( 10 ) = LSE( BS, BB, LBB ) + ELSE + ISAME( 10 ) = LSERES( 'GE', ' ', M, N, BS, + $ BB, LDB ) + END IF + ISAME( 11 ) = LDBS.EQ.LDB +* +* If data was incorrectly changed, report and +* return. +* + SAME = .TRUE. + DO 50 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I+1 + 50 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 150 + END IF +* + IF( .NOT.NULL )THEN + IF( SNAME( 10: 11 ).EQ.'mm' )THEN +* +* Check the result. +* + IF( LEFT )THEN + CALL SMMCH( TRANSA, 'N', M, N, M, + $ ALPHA, A, NMAX, B, NMAX, + $ ZERO, C, NMAX, CT, G, + $ BB, LDB, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + ELSE + CALL SMMCH( 'N', TRANSA, M, N, N, + $ ALPHA, B, NMAX, A, NMAX, + $ ZERO, C, NMAX, CT, G, + $ BB, LDB, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + END IF + ELSE IF( SNAME( 10: 11 ).EQ.'sm' )THEN +* +* Compute approximation to original +* matrix. +* + DO 70 J = 1, N + DO 60 I = 1, M + C( I, J ) = BB( I + ( J - 1 )* + $ LDB ) + BB( I + ( J - 1 )*LDB ) = ALPHA* + $ B( I, J ) + 60 CONTINUE + 70 CONTINUE +* + IF( LEFT )THEN + CALL SMMCH( TRANSA, 'N', M, N, M, + $ ONE, A, NMAX, C, NMAX, + $ ZERO, B, NMAX, CT, G, + $ BB, LDB, EPS, ERR, + $ FATAL, NOUT, .FALSE. ) + ELSE + CALL SMMCH( 'N', TRANSA, M, N, N, + $ ONE, C, NMAX, A, NMAX, + $ ZERO, B, NMAX, CT, G, + $ BB, LDB, EPS, ERR, + $ FATAL, NOUT, .FALSE. ) + END IF + END IF + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and +* return. + IF( FATAL ) + $ GO TO 150 + END IF +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* + 110 CONTINUE +* + 120 CONTINUE +* + 130 CONTINUE +* + 140 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 160 +* + 150 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + CALL SPRCN3( NTRA, NC, SNAME, IORDER, SIDE, UPLO, TRANSA, DIAG, + $ M, N, ALPHA, LDA, LDB) +* + 160 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9996 FORMAT( ' ******* ', A12,' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( 1X, I6, ': ', A12,'(', 4( '''', A1, ''',' ), 2( I3, ',' ), + $ F4.1, ', A,', I3, ', B,', I3, ') .' ) + 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of SCHK3. +* + END +* + SUBROUTINE SPRCN3(NOUT, NC, SNAME, IORDER, SIDE, UPLO, TRANSA, + $ DIAG, M, N, ALPHA, LDA, LDB) + INTEGER NOUT, NC, IORDER, M, N, LDA, LDB + REAL ALPHA + CHARACTER*1 SIDE, UPLO, TRANSA, DIAG + CHARACTER*12 SNAME + CHARACTER*14 CRC, CS, CU, CA, CD + + IF (SIDE.EQ.'L')THEN + CS = ' CblasLeft' + ELSE + CS = ' CblasRight' + END IF + IF (UPLO.EQ.'U')THEN + CU = ' CblasUpper' + ELSE + CU = ' CblasLower' + END IF + IF (TRANSA.EQ.'N')THEN + CA = ' CblasNoTrans' + ELSE IF (TRANSA.EQ.'T')THEN + CA = ' CblasTrans' + ELSE + CA = 'CblasConjTrans' + END IF + IF (DIAG.EQ.'N')THEN + CD = ' CblasNonUnit' + ELSE + CD = ' CblasUnit' + END IF + IF (IORDER.EQ.1)THEN + CRC = 'CblasRowMajor' + ELSE + CRC = 'CblasColMajor' + END IF + WRITE(NOUT, FMT = 9995)NC,SNAME,CRC, CS,CU + WRITE(NOUT, FMT = 9994)CA, CD, M, N, ALPHA, LDA, LDB + + 9995 FORMAT( 1X, I6, ': ', A12,'(', A14, ',', A14, ',', A14, ',') + 9994 FORMAT( 22X, 2( A14, ',') , 2( I3, ',' ), + $ F4.1, ', A,', I3, ', B,', I3, ').' ) + END +* + SUBROUTINE SCHK4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX, + $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G, + $ IORDER ) +* +* Tests SSYRK. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + REAL ZERO + PARAMETER ( ZERO = 0.0 ) +* .. Scalar Arguments .. + REAL EPS, THRESH + INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), B( NMAX, NMAX ), + $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ), + $ C( NMAX, NMAX ), CC( NMAX*NMAX ), + $ CS( NMAX*NMAX ), CT( NMAX ), G( NMAX ) + INTEGER IDIM( NIDIM ) +* .. Local Scalars .. + REAL ALPHA, ALS, BETA, BETS, ERR, ERRMAX + INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, K, KS, + $ LAA, LCC, LDA, LDAS, LDC, LDCS, LJ, MA, N, NA, + $ NARGS, NC, NS + LOGICAL NULL, RESET, SAME, TRAN, UPPER + CHARACTER*1 TRANS, TRANSS, UPLO, UPLOS + CHARACTER*2 ICHU + CHARACTER*3 ICHT +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LSE, LSERES + EXTERNAL LSE, LSERES +* .. External Subroutines .. + EXTERNAL SMAKE, SMMCH, CSSYRK +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICHT/'NTC'/, ICHU/'UL'/ +* .. Executable Statements .. +* + NARGS = 10 + NC = 0 + RESET = .TRUE. + ERRMAX = ZERO +* + DO 100 IN = 1, NIDIM + N = IDIM( IN ) +* Set LDC to 1 more than minimum value if room. + LDC = N + IF( LDC.LT.NMAX ) + $ LDC = LDC + 1 +* Skip tests if not enough room. + IF( LDC.GT.NMAX ) + $ GO TO 100 + LCC = LDC*N + NULL = N.LE.0 +* + DO 90 IK = 1, NIDIM + K = IDIM( IK ) +* + DO 80 ICT = 1, 3 + TRANS = ICHT( ICT: ICT ) + TRAN = TRANS.EQ.'T'.OR.TRANS.EQ.'C' + IF( TRAN )THEN + MA = K + NA = N + ELSE + MA = N + NA = K + END IF +* Set LDA to 1 more than minimum value if room. + LDA = MA + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 80 + LAA = LDA*NA +* +* Generate the matrix A. +* + CALL SMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA, + $ RESET, ZERO ) +* + DO 70 ICU = 1, 2 + UPLO = ICHU( ICU: ICU ) + UPPER = UPLO.EQ.'U' +* + DO 60 IA = 1, NALF + ALPHA = ALF( IA ) +* + DO 50 IB = 1, NBET + BETA = BET( IB ) +* +* Generate the matrix C. +* + CALL SMAKE( 'SY', UPLO, ' ', N, N, C, NMAX, CC, + $ LDC, RESET, ZERO ) +* + NC = NC + 1 +* +* Save every datum before calling the subroutine. +* + UPLOS = UPLO + TRANSS = TRANS + NS = N + KS = K + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + BETS = BETA + DO 20 I = 1, LCC + CS( I ) = CC( I ) + 20 CONTINUE + LDCS = LDC +* +* Call the subroutine. +* + IF( TRACE ) + $ CALL SPRCN4( NTRA, NC, SNAME, IORDER, UPLO, + $ TRANS, N, K, ALPHA, LDA, BETA, LDC) + IF( REWI ) + $ REWIND NTRA + CALL CSSYRK( IORDER, UPLO, TRANS, N, K, ALPHA, + $ AA, LDA, BETA, CC, LDC ) +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9993 ) + FATAL = .TRUE. + GO TO 120 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = UPLOS.EQ.UPLO + ISAME( 2 ) = TRANSS.EQ.TRANS + ISAME( 3 ) = NS.EQ.N + ISAME( 4 ) = KS.EQ.K + ISAME( 5 ) = ALS.EQ.ALPHA + ISAME( 6 ) = LSE( AS, AA, LAA ) + ISAME( 7 ) = LDAS.EQ.LDA + ISAME( 8 ) = BETS.EQ.BETA + IF( NULL )THEN + ISAME( 9 ) = LSE( CS, CC, LCC ) + ELSE + ISAME( 9 ) = LSERES( 'SY', UPLO, N, N, CS, + $ CC, LDC ) + END IF + ISAME( 10 ) = LDCS.EQ.LDC +* +* If data was incorrectly changed, report and +* return. +* + SAME = .TRUE. + DO 30 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I+1 + 30 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 120 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result column by column. +* + JC = 1 + DO 40 J = 1, N + IF( UPPER )THEN + JJ = 1 + LJ = J + ELSE + JJ = J + LJ = N - J + 1 + END IF + IF( TRAN )THEN + CALL SMMCH( 'T', 'N', LJ, 1, K, ALPHA, + $ A( 1, JJ ), NMAX, + $ A( 1, J ), NMAX, BETA, + $ C( JJ, J ), NMAX, CT, G, + $ CC( JC ), LDC, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + ELSE + CALL SMMCH( 'N', 'T', LJ, 1, K, ALPHA, + $ A( JJ, 1 ), NMAX, + $ A( J, 1 ), NMAX, BETA, + $ C( JJ, J ), NMAX, CT, G, + $ CC( JC ), LDC, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + END IF + IF( UPPER )THEN + JC = JC + LDC + ELSE + JC = JC + LDC + 1 + END IF + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and +* return. + IF( FATAL ) + $ GO TO 110 + 40 CONTINUE + END IF +* + 50 CONTINUE +* + 60 CONTINUE +* + 70 CONTINUE +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 130 +* + 110 CONTINUE + IF( N.GT.1 ) + $ WRITE( NOUT, FMT = 9995 )J +* + 120 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + CALL SPRCN4( NOUT, NC, SNAME, IORDER, UPLO, TRANS, N, K, ALPHA, + $ LDA, BETA, LDC) +* + 130 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9996 FORMAT( ' ******* ', A12,' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) + 9994 FORMAT( 1X, I6, ': ', A12,'(', 2( '''', A1, ''',' ), 2( I3, ',' ), + $ F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ') .' ) + 9993 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of SCHK4. +* + END +* + SUBROUTINE SPRCN4(NOUT, NC, SNAME, IORDER, UPLO, TRANSA, + $ N, K, ALPHA, LDA, BETA, LDC) + INTEGER NOUT, NC, IORDER, N, K, LDA, LDC + REAL ALPHA, BETA + CHARACTER*1 UPLO, TRANSA + CHARACTER*12 SNAME + CHARACTER*14 CRC, CU, CA + + IF (UPLO.EQ.'U')THEN + CU = ' CblasUpper' + ELSE + CU = ' CblasLower' + END IF + IF (TRANSA.EQ.'N')THEN + CA = ' CblasNoTrans' + ELSE IF (TRANSA.EQ.'T')THEN + CA = ' CblasTrans' + ELSE + CA = 'CblasConjTrans' + END IF + IF (IORDER.EQ.1)THEN + CRC = ' CblasRowMajor' + ELSE + CRC = ' CblasColMajor' + END IF + WRITE(NOUT, FMT = 9995)NC, SNAME, CRC, CU, CA + WRITE(NOUT, FMT = 9994)N, K, ALPHA, LDA, BETA, LDC + + 9995 FORMAT( 1X, I6, ': ', A12,'(', 3( A14, ',') ) + 9994 FORMAT( 20X, 2( I3, ',' ), + $ F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ').' ) + END +* + SUBROUTINE SCHK5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX, + $ AB, AA, AS, BB, BS, C, CC, CS, CT, G, W, + $ IORDER ) +* +* Tests SSYR2K. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + REAL ZERO + PARAMETER ( ZERO = 0.0 ) +* .. Scalar Arguments .. + REAL EPS, THRESH + INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + REAL AA( NMAX*NMAX ), AB( 2*NMAX*NMAX ), + $ ALF( NALF ), AS( NMAX*NMAX ), BB( NMAX*NMAX ), + $ BET( NBET ), BS( NMAX*NMAX ), C( NMAX, NMAX ), + $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ), + $ G( NMAX ), W( 2*NMAX ) + INTEGER IDIM( NIDIM ) +* .. Local Scalars .. + REAL ALPHA, ALS, BETA, BETS, ERR, ERRMAX + INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, JJAB, + $ K, KS, LAA, LBB, LCC, LDA, LDAS, LDB, LDBS, + $ LDC, LDCS, LJ, MA, N, NA, NARGS, NC, NS + LOGICAL NULL, RESET, SAME, TRAN, UPPER + CHARACTER*1 TRANS, TRANSS, UPLO, UPLOS + CHARACTER*2 ICHU + CHARACTER*3 ICHT +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LSE, LSERES + EXTERNAL LSE, LSERES +* .. External Subroutines .. + EXTERNAL SMAKE, SMMCH, CSSYR2K +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICHT/'NTC'/, ICHU/'UL'/ +* .. Executable Statements .. +* + NARGS = 12 + NC = 0 + RESET = .TRUE. + ERRMAX = ZERO +* + DO 130 IN = 1, NIDIM + N = IDIM( IN ) +* Set LDC to 1 more than minimum value if room. + LDC = N + IF( LDC.LT.NMAX ) + $ LDC = LDC + 1 +* Skip tests if not enough room. + IF( LDC.GT.NMAX ) + $ GO TO 130 + LCC = LDC*N + NULL = N.LE.0 +* + DO 120 IK = 1, NIDIM + K = IDIM( IK ) +* + DO 110 ICT = 1, 3 + TRANS = ICHT( ICT: ICT ) + TRAN = TRANS.EQ.'T'.OR.TRANS.EQ.'C' + IF( TRAN )THEN + MA = K + NA = N + ELSE + MA = N + NA = K + END IF +* Set LDA to 1 more than minimum value if room. + LDA = MA + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 110 + LAA = LDA*NA +* +* Generate the matrix A. +* + IF( TRAN )THEN + CALL SMAKE( 'GE', ' ', ' ', MA, NA, AB, 2*NMAX, AA, + $ LDA, RESET, ZERO ) + ELSE + CALL SMAKE( 'GE', ' ', ' ', MA, NA, AB, NMAX, AA, LDA, + $ RESET, ZERO ) + END IF +* +* Generate the matrix B. +* + LDB = LDA + LBB = LAA + IF( TRAN )THEN + CALL SMAKE( 'GE', ' ', ' ', MA, NA, AB( K + 1 ), + $ 2*NMAX, BB, LDB, RESET, ZERO ) + ELSE + CALL SMAKE( 'GE', ' ', ' ', MA, NA, AB( K*NMAX + 1 ), + $ NMAX, BB, LDB, RESET, ZERO ) + END IF +* + DO 100 ICU = 1, 2 + UPLO = ICHU( ICU: ICU ) + UPPER = UPLO.EQ.'U' +* + DO 90 IA = 1, NALF + ALPHA = ALF( IA ) +* + DO 80 IB = 1, NBET + BETA = BET( IB ) +* +* Generate the matrix C. +* + CALL SMAKE( 'SY', UPLO, ' ', N, N, C, NMAX, CC, + $ LDC, RESET, ZERO ) +* + NC = NC + 1 +* +* Save every datum before calling the subroutine. +* + UPLOS = UPLO + TRANSS = TRANS + NS = N + KS = K + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LBB + BS( I ) = BB( I ) + 20 CONTINUE + LDBS = LDB + BETS = BETA + DO 30 I = 1, LCC + CS( I ) = CC( I ) + 30 CONTINUE + LDCS = LDC +* +* Call the subroutine. +* + IF( TRACE ) + $ CALL SPRCN5( NTRA, NC, SNAME, IORDER, UPLO, + $ TRANS, N, K, ALPHA, LDA, LDB, BETA, LDC) + IF( REWI ) + $ REWIND NTRA + CALL CSSYR2K( IORDER, UPLO, TRANS, N, K, ALPHA, + $ AA, LDA, BB, LDB, BETA, CC, LDC ) +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9993 ) + FATAL = .TRUE. + GO TO 150 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = UPLOS.EQ.UPLO + ISAME( 2 ) = TRANSS.EQ.TRANS + ISAME( 3 ) = NS.EQ.N + ISAME( 4 ) = KS.EQ.K + ISAME( 5 ) = ALS.EQ.ALPHA + ISAME( 6 ) = LSE( AS, AA, LAA ) + ISAME( 7 ) = LDAS.EQ.LDA + ISAME( 8 ) = LSE( BS, BB, LBB ) + ISAME( 9 ) = LDBS.EQ.LDB + ISAME( 10 ) = BETS.EQ.BETA + IF( NULL )THEN + ISAME( 11 ) = LSE( CS, CC, LCC ) + ELSE + ISAME( 11 ) = LSERES( 'SY', UPLO, N, N, CS, + $ CC, LDC ) + END IF + ISAME( 12 ) = LDCS.EQ.LDC +* +* If data was incorrectly changed, report and +* return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I+1 + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 150 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result column by column. +* + JJAB = 1 + JC = 1 + DO 70 J = 1, N + IF( UPPER )THEN + JJ = 1 + LJ = J + ELSE + JJ = J + LJ = N - J + 1 + END IF + IF( TRAN )THEN + DO 50 I = 1, K + W( I ) = AB( ( J - 1 )*2*NMAX + K + + $ I ) + W( K + I ) = AB( ( J - 1 )*2*NMAX + + $ I ) + 50 CONTINUE + CALL SMMCH( 'T', 'N', LJ, 1, 2*K, + $ ALPHA, AB( JJAB ), 2*NMAX, + $ W, 2*NMAX, BETA, + $ C( JJ, J ), NMAX, CT, G, + $ CC( JC ), LDC, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + ELSE + DO 60 I = 1, K + W( I ) = AB( ( K + I - 1 )*NMAX + + $ J ) + W( K + I ) = AB( ( I - 1 )*NMAX + + $ J ) + 60 CONTINUE + CALL SMMCH( 'N', 'N', LJ, 1, 2*K, + $ ALPHA, AB( JJ ), NMAX, W, + $ 2*NMAX, BETA, C( JJ, J ), + $ NMAX, CT, G, CC( JC ), LDC, + $ EPS, ERR, FATAL, NOUT, + $ .TRUE. ) + END IF + IF( UPPER )THEN + JC = JC + LDC + ELSE + JC = JC + LDC + 1 + IF( TRAN ) + $ JJAB = JJAB + 2*NMAX + END IF + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and +* return. + IF( FATAL ) + $ GO TO 140 + 70 CONTINUE + END IF +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* + 110 CONTINUE +* + 120 CONTINUE +* + 130 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 160 +* + 140 CONTINUE + IF( N.GT.1 ) + $ WRITE( NOUT, FMT = 9995 )J +* + 150 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + CALL SPRCN5( NOUT, NC, SNAME, IORDER, UPLO, TRANS, N, K, ALPHA, + $ LDA, LDB, BETA, LDC) +* + 160 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9996 FORMAT( ' ******* ', A12,' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) + 9994 FORMAT( 1X, I6, ': ', A12,'(', 2( '''', A1, ''',' ), 2( I3, ',' ), + $ F4.1, ', A,', I3, ', B,', I3, ',', F4.1, ', C,', I3, ') ', + $ ' .' ) + 9993 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of SCHK5. +* + END +* + SUBROUTINE SPRCN5(NOUT, NC, SNAME, IORDER, UPLO, TRANSA, + $ N, K, ALPHA, LDA, LDB, BETA, LDC) + INTEGER NOUT, NC, IORDER, N, K, LDA, LDB, LDC + REAL ALPHA, BETA + CHARACTER*1 UPLO, TRANSA + CHARACTER*12 SNAME + CHARACTER*14 CRC, CU, CA + + IF (UPLO.EQ.'U')THEN + CU = ' CblasUpper' + ELSE + CU = ' CblasLower' + END IF + IF (TRANSA.EQ.'N')THEN + CA = ' CblasNoTrans' + ELSE IF (TRANSA.EQ.'T')THEN + CA = ' CblasTrans' + ELSE + CA = 'CblasConjTrans' + END IF + IF (IORDER.EQ.1)THEN + CRC = ' CblasRowMajor' + ELSE + CRC = ' CblasColMajor' + END IF + WRITE(NOUT, FMT = 9995)NC, SNAME, CRC, CU, CA + WRITE(NOUT, FMT = 9994)N, K, ALPHA, LDA, LDB, BETA, LDC + + 9995 FORMAT( 1X, I6, ': ', A12,'(', 3( A14, ',') ) + 9994 FORMAT( 20X, 2( I3, ',' ), + $ F4.1, ', A,', I3, ', B', I3, ',', F4.1, ', C,', I3, ').' ) + END +* + SUBROUTINE SMAKE( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, RESET, + $ TRANSL ) +* +* Generates values for an M by N matrix A. +* Stores the values in the array AA in the data structure required +* by the routine, with unwanted elements set to rogue value. +* +* TYPE is 'GE', 'SY' or 'TR'. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + REAL ZERO, ONE + PARAMETER ( ZERO = 0.0, ONE = 1.0 ) + REAL ROGUE + PARAMETER ( ROGUE = -1.0E10 ) +* .. Scalar Arguments .. + REAL TRANSL + INTEGER LDA, M, N, NMAX + LOGICAL RESET + CHARACTER*1 DIAG, UPLO + CHARACTER*2 TYPE +* .. Array Arguments .. + REAL A( NMAX, * ), AA( * ) +* .. Local Scalars .. + INTEGER I, IBEG, IEND, J + LOGICAL GEN, LOWER, SYM, TRI, UNIT, UPPER +* .. External Functions .. + REAL SBEG + EXTERNAL SBEG +* .. Executable Statements .. + GEN = TYPE.EQ.'GE' + SYM = TYPE.EQ.'SY' + TRI = TYPE.EQ.'TR' + UPPER = ( SYM.OR.TRI ).AND.UPLO.EQ.'U' + LOWER = ( SYM.OR.TRI ).AND.UPLO.EQ.'L' + UNIT = TRI.AND.DIAG.EQ.'U' +* +* Generate data in array A. +* + DO 20 J = 1, N + DO 10 I = 1, M + IF( GEN.OR.( UPPER.AND.I.LE.J ).OR.( LOWER.AND.I.GE.J ) ) + $ THEN + A( I, J ) = SBEG( RESET ) + TRANSL + IF( I.NE.J )THEN +* Set some elements to zero + IF( N.GT.3.AND.J.EQ.N/2 ) + $ A( I, J ) = ZERO + IF( SYM )THEN + A( J, I ) = A( I, J ) + ELSE IF( TRI )THEN + A( J, I ) = ZERO + END IF + END IF + END IF + 10 CONTINUE + IF( TRI ) + $ A( J, J ) = A( J, J ) + ONE + IF( UNIT ) + $ A( J, J ) = ONE + 20 CONTINUE +* +* Store elements in array AS in data structure required by routine. +* + IF( TYPE.EQ.'GE' )THEN + DO 50 J = 1, N + DO 30 I = 1, M + AA( I + ( J - 1 )*LDA ) = A( I, J ) + 30 CONTINUE + DO 40 I = M + 1, LDA + AA( I + ( J - 1 )*LDA ) = ROGUE + 40 CONTINUE + 50 CONTINUE + ELSE IF( TYPE.EQ.'SY'.OR.TYPE.EQ.'TR' )THEN + DO 90 J = 1, N + IF( UPPER )THEN + IBEG = 1 + IF( UNIT )THEN + IEND = J - 1 + ELSE + IEND = J + END IF + ELSE + IF( UNIT )THEN + IBEG = J + 1 + ELSE + IBEG = J + END IF + IEND = N + END IF + DO 60 I = 1, IBEG - 1 + AA( I + ( J - 1 )*LDA ) = ROGUE + 60 CONTINUE + DO 70 I = IBEG, IEND + AA( I + ( J - 1 )*LDA ) = A( I, J ) + 70 CONTINUE + DO 80 I = IEND + 1, LDA + AA( I + ( J - 1 )*LDA ) = ROGUE + 80 CONTINUE + 90 CONTINUE + END IF + RETURN +* +* End of SMAKE. +* + END + SUBROUTINE SMMCH( TRANSA, TRANSB, M, N, KK, ALPHA, A, LDA, B, LDB, + $ BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL, + $ NOUT, MV ) +* +* Checks the results of the computational tests. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + REAL ZERO, ONE + PARAMETER ( ZERO = 0.0, ONE = 1.0 ) +* .. Scalar Arguments .. + REAL ALPHA, BETA, EPS, ERR + INTEGER KK, LDA, LDB, LDC, LDCC, M, N, NOUT + LOGICAL FATAL, MV + CHARACTER*1 TRANSA, TRANSB +* .. Array Arguments .. + REAL A( LDA, * ), B( LDB, * ), C( LDC, * ), + $ CC( LDCC, * ), CT( * ), G( * ) +* .. Local Scalars .. + REAL ERRI + INTEGER I, J, K + LOGICAL TRANA, TRANB +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, SQRT +* .. Executable Statements .. + TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C' + TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C' +* +* Compute expected result, one column at a time, in CT using data +* in A, B and C. +* Compute gauges in G. +* + DO 120 J = 1, N +* + DO 10 I = 1, M + CT( I ) = ZERO + G( I ) = ZERO + 10 CONTINUE + IF( .NOT.TRANA.AND..NOT.TRANB )THEN + DO 30 K = 1, KK + DO 20 I = 1, M + CT( I ) = CT( I ) + A( I, K )*B( K, J ) + G( I ) = G( I ) + ABS( A( I, K ) )*ABS( B( K, J ) ) + 20 CONTINUE + 30 CONTINUE + ELSE IF( TRANA.AND..NOT.TRANB )THEN + DO 50 K = 1, KK + DO 40 I = 1, M + CT( I ) = CT( I ) + A( K, I )*B( K, J ) + G( I ) = G( I ) + ABS( A( K, I ) )*ABS( B( K, J ) ) + 40 CONTINUE + 50 CONTINUE + ELSE IF( .NOT.TRANA.AND.TRANB )THEN + DO 70 K = 1, KK + DO 60 I = 1, M + CT( I ) = CT( I ) + A( I, K )*B( J, K ) + G( I ) = G( I ) + ABS( A( I, K ) )*ABS( B( J, K ) ) + 60 CONTINUE + 70 CONTINUE + ELSE IF( TRANA.AND.TRANB )THEN + DO 90 K = 1, KK + DO 80 I = 1, M + CT( I ) = CT( I ) + A( K, I )*B( J, K ) + G( I ) = G( I ) + ABS( A( K, I ) )*ABS( B( J, K ) ) + 80 CONTINUE + 90 CONTINUE + END IF + DO 100 I = 1, M + CT( I ) = ALPHA*CT( I ) + BETA*C( I, J ) + G( I ) = ABS( ALPHA )*G( I ) + ABS( BETA )*ABS( C( I, J ) ) + 100 CONTINUE +* +* Compute the error ratio for this result. +* + ERR = ZERO + DO 110 I = 1, M + ERRI = ABS( CT( I ) - CC( I, J ) )/EPS + IF( G( I ).NE.ZERO ) + $ ERRI = ERRI/G( I ) + ERR = MAX( ERR, ERRI ) + IF( ERR*SQRT( EPS ).GE.ONE ) + $ GO TO 130 + 110 CONTINUE +* + 120 CONTINUE +* +* If the loop completes, all results are at least half accurate. + GO TO 150 +* +* Report fatal error. +* + 130 FATAL = .TRUE. + WRITE( NOUT, FMT = 9999 ) + DO 140 I = 1, M + IF( MV )THEN + WRITE( NOUT, FMT = 9998 )I, CT( I ), CC( I, J ) + ELSE + WRITE( NOUT, FMT = 9998 )I, CC( I, J ), CT( I ) + END IF + 140 CONTINUE + IF( N.GT.1 ) + $ WRITE( NOUT, FMT = 9997 )J +* + 150 CONTINUE + RETURN +* + 9999 FORMAT( ' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL', + $ 'F ACCURATE *******', /' EXPECTED RESULT COMPU', + $ 'TED RESULT' ) + 9998 FORMAT( 1X, I7, 2G18.6 ) + 9997 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) +* +* End of SMMCH. +* + END + LOGICAL FUNCTION LSE( RI, RJ, LR ) +* +* Tests if two arrays are identical. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Scalar Arguments .. + INTEGER LR +* .. Array Arguments .. + REAL RI( * ), RJ( * ) +* .. Local Scalars .. + INTEGER I +* .. Executable Statements .. + DO 10 I = 1, LR + IF( RI( I ).NE.RJ( I ) ) + $ GO TO 20 + 10 CONTINUE + LSE = .TRUE. + GO TO 30 + 20 CONTINUE + LSE = .FALSE. + 30 RETURN +* +* End of LSE. +* + END + LOGICAL FUNCTION LSERES( TYPE, UPLO, M, N, AA, AS, LDA ) +* +* Tests if selected elements in two arrays are equal. +* +* TYPE is 'GE' or 'SY'. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Scalar Arguments .. + INTEGER LDA, M, N + CHARACTER*1 UPLO + CHARACTER*2 TYPE +* .. Array Arguments .. + REAL AA( LDA, * ), AS( LDA, * ) +* .. Local Scalars .. + INTEGER I, IBEG, IEND, J + LOGICAL UPPER +* .. Executable Statements .. + UPPER = UPLO.EQ.'U' + IF( TYPE.EQ.'GE' )THEN + DO 20 J = 1, N + DO 10 I = M + 1, LDA + IF( AA( I, J ).NE.AS( I, J ) ) + $ GO TO 70 + 10 CONTINUE + 20 CONTINUE + ELSE IF( TYPE.EQ.'SY' )THEN + DO 50 J = 1, N + IF( UPPER )THEN + IBEG = 1 + IEND = J + ELSE + IBEG = J + IEND = N + END IF + DO 30 I = 1, IBEG - 1 + IF( AA( I, J ).NE.AS( I, J ) ) + $ GO TO 70 + 30 CONTINUE + DO 40 I = IEND + 1, LDA + IF( AA( I, J ).NE.AS( I, J ) ) + $ GO TO 70 + 40 CONTINUE + 50 CONTINUE + END IF +* + 60 CONTINUE + LSERES = .TRUE. + GO TO 80 + 70 CONTINUE + LSERES = .FALSE. + 80 RETURN +* +* End of LSERES. +* + END + REAL FUNCTION SBEG( RESET ) +* +* Generates random numbers uniformly distributed between -0.5 and 0.5. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Scalar Arguments .. + LOGICAL RESET +* .. Local Scalars .. + INTEGER I, IC, MI +* .. Save statement .. + SAVE I, IC, MI +* .. Executable Statements .. + IF( RESET )THEN +* Initialize local variables. + MI = 891 + I = 7 + IC = 0 + RESET = .FALSE. + END IF +* +* The sequence of values of I is bounded between 1 and 999. +* If initial I = 1,2,3,6,7 or 9, the period will be 50. +* If initial I = 4 or 8, the period will be 25. +* If initial I = 5, the period will be 10. +* IC is used to break up the period by skipping 1 value of I in 6. +* + IC = IC + 1 + 10 I = I*MI + I = I - 1000*( I/1000 ) + IF( IC.GE.5 )THEN + IC = 0 + GO TO 10 + END IF + SBEG = ( I - 500 )/1001.0 + RETURN +* +* End of SBEG. +* + END + REAL FUNCTION SDIFF( X, Y ) +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Scalar Arguments .. + REAL X, Y +* .. Executable Statements .. + SDIFF = X - Y + RETURN +* +* End of SDIFF. +* + END diff --git a/CBLAS/testing/c_xerbla.c b/CBLAS/testing/c_xerbla.c new file mode 100644 index 000000000..cc5eda40a --- /dev/null +++ b/CBLAS/testing/c_xerbla.c @@ -0,0 +1,125 @@ +#include +#include +#include +#include +#include "cblas.h" +#include "cblas_test.h" + +void cblas_xerbla(int info, const char *rout, const char *form, ...) +{ + extern int cblas_lerr, cblas_info, cblas_ok; + extern int link_xerbla; + extern int RowMajorStrg; + extern char *cblas_rout; + + /* Initially, c__3chke will call this routine with + * global variable link_xerbla=1, and F77_xerbla will set link_xerbla=0. + * This is done to fool the linker into loading these subroutines first + * instead of ones in the CBLAS or the legacy BLAS library. + */ + if (link_xerbla) return; + + if (cblas_rout != NULL && strcmp(cblas_rout, rout) != 0){ + printf("***** XERBLA WAS CALLED WITH SRNAME = <%s> INSTEAD OF <%s> *******\n", rout, cblas_rout); + cblas_ok = FALSE; + } + + if (RowMajorStrg) + { + /* To properly check leading dimension problems in cblas__gemm, we + * need to do the following trick. When cblas__gemm is called with + * CblasRowMajor, the arguments A and B switch places in the call to + * f77__gemm. Thus when we test for bad leading dimension problems + * for A and B, lda is in position 11 instead of 9, and ldb is in + * position 9 instead of 11. + */ + if (strstr(rout,"gemm") != 0) + { + if (info == 5 ) info = 4; + else if (info == 4 ) info = 5; + else if (info == 11) info = 9; + else if (info == 9 ) info = 11; + } + else if (strstr(rout,"symm") != 0 || strstr(rout,"hemm") != 0) + { + if (info == 5 ) info = 4; + else if (info == 4 ) info = 5; + } + else if (strstr(rout,"trmm") != 0 || strstr(rout,"trsm") != 0) + { + if (info == 7 ) info = 6; + else if (info == 6 ) info = 7; + } + else if (strstr(rout,"gemv") != 0) + { + if (info == 4) info = 3; + else if (info == 3) info = 4; + } + else if (strstr(rout,"gbmv") != 0) + { + if (info == 4) info = 3; + else if (info == 3) info = 4; + else if (info == 6) info = 5; + else if (info == 5) info = 6; + } + else if (strstr(rout,"ger") != 0) + { + if (info == 3) info = 2; + else if (info == 2) info = 3; + else if (info == 8) info = 6; + else if (info == 6) info = 8; + } + else if ( ( strstr(rout,"her2") != 0 || strstr(rout,"hpr2") != 0 ) + && strstr(rout,"her2k") == 0 ) + { + if (info == 8) info = 6; + else if (info == 6) info = 8; + } + } + + if (info != cblas_info){ + printf("***** XERBLA WAS CALLED WITH INFO = %d INSTEAD OF %d in %s *******\n",info, cblas_info, rout); + cblas_lerr = PASSED; + cblas_ok = FALSE; + } else cblas_lerr = FAILED; +} + +#ifdef F77_Char +void F77_xerbla(F77_Char F77_srname, void *vinfo) +#else +void F77_xerbla(char *srname, void *vinfo) +#endif +{ +#ifdef F77_Char + char *srname; +#endif + + char rout[] = {'c','b','l','a','s','_','\0','\0','\0','\0','\0','\0','\0'}; + +#ifdef F77_Integer + F77_Integer *info=vinfo; + F77_Integer i; + extern F77_Integer link_xerbla; +#else + int *info=vinfo; + int i; + extern int link_xerbla; +#endif +#ifdef F77_Char + srname = F2C_STR(F77_srname, XerblaStrLen); +#endif + + /* See the comment in cblas_xerbla() above */ + if (link_xerbla) + { + link_xerbla = 0; + return; + } + for(i=0; i < 6; i++) rout[i+6] = tolower(srname[i]); + for(i=11; i >= 9; i--) if (rout[i] == ' ') rout[i] = '\0'; + + /* We increment *info by 1 since the CBLAS interface adds one more + * argument to all level 2 and 3 routines. + */ + cblas_xerbla(*info+1,rout,""); +} diff --git a/CBLAS/testing/c_z2chke.c b/CBLAS/testing/c_z2chke.c new file mode 100644 index 000000000..09aaa68a0 --- /dev/null +++ b/CBLAS/testing/c_z2chke.c @@ -0,0 +1,826 @@ +#include +#include +#include "cblas.h" +#include "cblas_test.h" + +int cblas_ok, cblas_lerr, cblas_info; +int link_xerbla=TRUE; +char *cblas_rout; + +#ifdef F77_Char +void F77_xerbla(F77_Char F77_srname, void *vinfo); +#else +void F77_xerbla(char *srname, void *vinfo); +#endif + +void chkxer(void) { + extern int cblas_ok, cblas_lerr, cblas_info; + extern int link_xerbla; + extern char *cblas_rout; + if (cblas_lerr == 1 ) { + printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %d NOT DETECTED BY %s *****\n", cblas_info, cblas_rout); + cblas_ok = 0 ; + } + cblas_lerr = 1 ; +} + +void F77_z2chke(char *rout) { + char *sf = ( rout ) ; + double A[2] = {0.0,0.0}, + X[2] = {0.0,0.0}, + Y[2] = {0.0,0.0}, + ALPHA[2] = {0.0,0.0}, + BETA[2] = {0.0,0.0}, + RALPHA = 0.0; + extern int cblas_info, cblas_lerr, cblas_ok; + extern int RowMajorStrg; + extern char *cblas_rout; + + if (link_xerbla) /* call these first to link */ + { + cblas_xerbla(cblas_info,cblas_rout,""); + F77_xerbla(cblas_rout,&cblas_info); + } + + cblas_ok = TRUE ; + cblas_lerr = PASSED ; + + if (strncmp( sf,"cblas_zgemv",11)==0) { + cblas_rout = "cblas_zgemv"; + cblas_info = 1; + cblas_zgemv(INVALID, CblasNoTrans, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_zgemv(CblasColMajor, INVALID, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_zgemv(CblasColMajor, CblasNoTrans, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zgemv(CblasColMajor, CblasNoTrans, 0, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_zgemv(CblasColMajor, CblasNoTrans, 2, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_zgemv(CblasColMajor, CblasNoTrans, 0, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_zgemv(CblasColMajor, CblasNoTrans, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + + cblas_info = 2; RowMajorStrg = TRUE; RowMajorStrg = TRUE; + cblas_zgemv(CblasRowMajor, INVALID, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_zgemv(CblasRowMajor, CblasNoTrans, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_zgemv(CblasRowMajor, CblasNoTrans, 0, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_zgemv(CblasRowMajor, CblasNoTrans, 0, 2, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_zgemv(CblasRowMajor, CblasNoTrans, 0, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_zgemv(CblasRowMajor, CblasNoTrans, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_zgbmv",11)==0) { + cblas_rout = "cblas_zgbmv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_zgbmv(INVALID, CblasNoTrans, 0, 0, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_zgbmv(CblasColMajor, INVALID, 0, 0, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_zgbmv(CblasColMajor, CblasNoTrans, INVALID, 0, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zgbmv(CblasColMajor, CblasNoTrans, 0, INVALID, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_zgbmv(CblasColMajor, CblasNoTrans, 0, 0, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_zgbmv(CblasColMajor, CblasNoTrans, 2, 0, 0, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_zgbmv(CblasColMajor, CblasNoTrans, 0, 0, 1, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_zgbmv(CblasColMajor, CblasNoTrans, 0, 0, 0, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = FALSE; + cblas_zgbmv(CblasColMajor, CblasNoTrans, 0, 0, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_zgbmv(CblasRowMajor, INVALID, 0, 0, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_zgbmv(CblasRowMajor, CblasNoTrans, INVALID, 0, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_zgbmv(CblasRowMajor, CblasNoTrans, 0, INVALID, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_zgbmv(CblasRowMajor, CblasNoTrans, 0, 0, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_zgbmv(CblasRowMajor, CblasNoTrans, 2, 0, 0, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_zgbmv(CblasRowMajor, CblasNoTrans, 0, 0, 1, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_zgbmv(CblasRowMajor, CblasNoTrans, 0, 0, 0, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = TRUE; + cblas_zgbmv(CblasRowMajor, CblasNoTrans, 0, 0, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_zhemv",11)==0) { + cblas_rout = "cblas_zhemv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_zhemv(INVALID, CblasUpper, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_zhemv(CblasColMajor, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_zhemv(CblasColMajor, CblasUpper, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_zhemv(CblasColMajor, CblasUpper, 2, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zhemv(CblasColMajor, CblasUpper, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_zhemv(CblasColMajor, CblasUpper, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_zhemv(CblasRowMajor, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_zhemv(CblasRowMajor, CblasUpper, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_zhemv(CblasRowMajor, CblasUpper, 2, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zhemv(CblasRowMajor, CblasUpper, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_zhemv(CblasRowMajor, CblasUpper, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_zhbmv",11)==0) { + cblas_rout = "cblas_zhbmv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_zhbmv(INVALID, CblasUpper, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_zhbmv(CblasColMajor, INVALID, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_zhbmv(CblasColMajor, CblasUpper, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zhbmv(CblasColMajor, CblasUpper, 0, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_zhbmv(CblasColMajor, CblasUpper, 0, 1, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_zhbmv(CblasColMajor, CblasUpper, 0, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_zhbmv(CblasColMajor, CblasUpper, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_zhbmv(CblasRowMajor, INVALID, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_zhbmv(CblasRowMajor, CblasUpper, INVALID, 0, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_zhbmv(CblasRowMajor, CblasUpper, 0, INVALID, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_zhbmv(CblasRowMajor, CblasUpper, 0, 1, + ALPHA, A, 1, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_zhbmv(CblasRowMajor, CblasUpper, 0, 0, + ALPHA, A, 1, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_zhbmv(CblasRowMajor, CblasUpper, 0, 0, + ALPHA, A, 1, X, 1, BETA, Y, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_zhpmv",11)==0) { + cblas_rout = "cblas_zhpmv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_zhpmv(INVALID, CblasUpper, 0, + ALPHA, A, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_zhpmv(CblasColMajor, INVALID, 0, + ALPHA, A, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_zhpmv(CblasColMajor, CblasUpper, INVALID, + ALPHA, A, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_zhpmv(CblasColMajor, CblasUpper, 0, + ALPHA, A, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_zhpmv(CblasColMajor, CblasUpper, 0, + ALPHA, A, X, 1, BETA, Y, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_zhpmv(CblasRowMajor, INVALID, 0, + ALPHA, A, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_zhpmv(CblasRowMajor, CblasUpper, INVALID, + ALPHA, A, X, 1, BETA, Y, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_zhpmv(CblasRowMajor, CblasUpper, 0, + ALPHA, A, X, 0, BETA, Y, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_zhpmv(CblasRowMajor, CblasUpper, 0, + ALPHA, A, X, 1, BETA, Y, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_ztrmv",11)==0) { + cblas_rout = "cblas_ztrmv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_ztrmv(INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_ztrmv(CblasColMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_ztrmv(CblasColMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_ztrmv(CblasColMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_ztrmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ztrmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, A, 1, X, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_ztrmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_ztrmv(CblasRowMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_ztrmv(CblasRowMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_ztrmv(CblasRowMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_ztrmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ztrmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, A, 1, X, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_ztrmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_ztbmv",11)==0) { + cblas_rout = "cblas_ztbmv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_ztbmv(INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_ztbmv(CblasColMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_ztbmv(CblasColMajor, CblasUpper, INVALID, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_ztbmv(CblasColMajor, CblasUpper, CblasNoTrans, + INVALID, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_ztbmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ztbmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_ztbmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 1, A, 1, X, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ztbmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_ztbmv(CblasRowMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_ztbmv(CblasRowMajor, CblasUpper, INVALID, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_ztbmv(CblasRowMajor, CblasUpper, CblasNoTrans, + INVALID, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_ztbmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ztbmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_ztbmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 1, A, 1, X, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ztbmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_ztpmv",11)==0) { + cblas_rout = "cblas_ztpmv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_ztpmv(INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_ztpmv(CblasColMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_ztpmv(CblasColMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_ztpmv(CblasColMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_ztpmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_ztpmv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, X, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_ztpmv(CblasRowMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_ztpmv(CblasRowMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_ztpmv(CblasRowMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_ztpmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_ztpmv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, X, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_ztrsv",11)==0) { + cblas_rout = "cblas_ztrsv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_ztrsv(INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_ztrsv(CblasColMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_ztrsv(CblasColMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_ztrsv(CblasColMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_ztrsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ztrsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, A, 1, X, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_ztrsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_ztrsv(CblasRowMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_ztrsv(CblasRowMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_ztrsv(CblasRowMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_ztrsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ztrsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, A, 1, X, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_ztrsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, 1, X, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_ztbsv",11)==0) { + cblas_rout = "cblas_ztbsv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_ztbsv(INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_ztbsv(CblasColMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_ztbsv(CblasColMajor, CblasUpper, INVALID, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_ztbsv(CblasColMajor, CblasUpper, CblasNoTrans, + INVALID, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_ztbsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ztbsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_ztbsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 1, A, 1, X, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ztbsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_ztbsv(CblasRowMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_ztbsv(CblasRowMajor, CblasUpper, INVALID, + CblasNonUnit, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_ztbsv(CblasRowMajor, CblasUpper, CblasNoTrans, + INVALID, 0, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_ztbsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, A, 1, X, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ztbsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, A, 1, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_ztbsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 1, A, 1, X, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ztbsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, A, 1, X, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_ztpsv",11)==0) { + cblas_rout = "cblas_ztpsv"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_ztpsv(INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_ztpsv(CblasColMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_ztpsv(CblasColMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_ztpsv(CblasColMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_ztpsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_ztpsv(CblasColMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, X, 0 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_ztpsv(CblasRowMajor, INVALID, CblasNoTrans, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_ztpsv(CblasRowMajor, CblasUpper, INVALID, + CblasNonUnit, 0, A, X, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_ztpsv(CblasRowMajor, CblasUpper, CblasNoTrans, + INVALID, 0, A, X, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_ztpsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, A, X, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_ztpsv(CblasRowMajor, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, A, X, 0 ); + chkxer(); + } else if (strncmp( sf,"cblas_zgeru",10)==0) { + cblas_rout = "cblas_zgeru"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_zgeru(INVALID, 0, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_zgeru(CblasColMajor, INVALID, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_zgeru(CblasColMajor, 0, INVALID, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_zgeru(CblasColMajor, 0, 0, ALPHA, X, 0, Y, 1, A, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zgeru(CblasColMajor, 0, 0, ALPHA, X, 1, Y, 0, A, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_zgeru(CblasColMajor, 2, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_zgeru(CblasRowMajor, INVALID, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_zgeru(CblasRowMajor, 0, INVALID, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_zgeru(CblasRowMajor, 0, 0, ALPHA, X, 0, Y, 1, A, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zgeru(CblasRowMajor, 0, 0, ALPHA, X, 1, Y, 0, A, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_zgeru(CblasRowMajor, 0, 2, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + } else if (strncmp( sf,"cblas_zgerc",10)==0) { + cblas_rout = "cblas_zgerc"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_zgerc(INVALID, 0, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_zgerc(CblasColMajor, INVALID, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_zgerc(CblasColMajor, 0, INVALID, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_zgerc(CblasColMajor, 0, 0, ALPHA, X, 0, Y, 1, A, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zgerc(CblasColMajor, 0, 0, ALPHA, X, 1, Y, 0, A, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_zgerc(CblasColMajor, 2, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_zgerc(CblasRowMajor, INVALID, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_zgerc(CblasRowMajor, 0, INVALID, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_zgerc(CblasRowMajor, 0, 0, ALPHA, X, 0, Y, 1, A, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zgerc(CblasRowMajor, 0, 0, ALPHA, X, 1, Y, 0, A, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_zgerc(CblasRowMajor, 0, 2, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + } else if (strncmp( sf,"cblas_zher2",11)==0) { + cblas_rout = "cblas_zher2"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_zher2(INVALID, CblasUpper, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_zher2(CblasColMajor, INVALID, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_zher2(CblasColMajor, CblasUpper, INVALID, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_zher2(CblasColMajor, CblasUpper, 0, ALPHA, X, 0, Y, 1, A, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zher2(CblasColMajor, CblasUpper, 0, ALPHA, X, 1, Y, 0, A, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_zher2(CblasColMajor, CblasUpper, 2, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_zher2(CblasRowMajor, INVALID, 0, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_zher2(CblasRowMajor, CblasUpper, INVALID, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_zher2(CblasRowMajor, CblasUpper, 0, ALPHA, X, 0, Y, 1, A, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zher2(CblasRowMajor, CblasUpper, 0, ALPHA, X, 1, Y, 0, A, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_zher2(CblasRowMajor, CblasUpper, 2, ALPHA, X, 1, Y, 1, A, 1 ); + chkxer(); + } else if (strncmp( sf,"cblas_zhpr2",11)==0) { + cblas_rout = "cblas_zhpr2"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_zhpr2(INVALID, CblasUpper, 0, ALPHA, X, 1, Y, 1, A ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_zhpr2(CblasColMajor, INVALID, 0, ALPHA, X, 1, Y, 1, A ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_zhpr2(CblasColMajor, CblasUpper, INVALID, ALPHA, X, 1, Y, 1, A ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_zhpr2(CblasColMajor, CblasUpper, 0, ALPHA, X, 0, Y, 1, A ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zhpr2(CblasColMajor, CblasUpper, 0, ALPHA, X, 1, Y, 0, A ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_zhpr2(CblasRowMajor, INVALID, 0, ALPHA, X, 1, Y, 1, A ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_zhpr2(CblasRowMajor, CblasUpper, INVALID, ALPHA, X, 1, Y, 1, A ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_zhpr2(CblasRowMajor, CblasUpper, 0, ALPHA, X, 0, Y, 1, A ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zhpr2(CblasRowMajor, CblasUpper, 0, ALPHA, X, 1, Y, 0, A ); + chkxer(); + } else if (strncmp( sf,"cblas_zher",10)==0) { + cblas_rout = "cblas_zher"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_zher(INVALID, CblasUpper, 0, RALPHA, X, 1, A, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_zher(CblasColMajor, INVALID, 0, RALPHA, X, 1, A, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_zher(CblasColMajor, CblasUpper, INVALID, RALPHA, X, 1, A, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_zher(CblasColMajor, CblasUpper, 0, RALPHA, X, 0, A, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zher(CblasColMajor, CblasUpper, 2, RALPHA, X, 1, A, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = TRUE; + cblas_zher(CblasRowMajor, INVALID, 0, RALPHA, X, 1, A, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = TRUE; + cblas_zher(CblasRowMajor, CblasUpper, INVALID, RALPHA, X, 1, A, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_zher(CblasRowMajor, CblasUpper, 0, RALPHA, X, 0, A, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zher(CblasRowMajor, CblasUpper, 2, RALPHA, X, 1, A, 1 ); + chkxer(); + } else if (strncmp( sf,"cblas_zhpr",10)==0) { + cblas_rout = "cblas_zhpr"; + cblas_info = 1; RowMajorStrg = FALSE; + cblas_zhpr(INVALID, CblasUpper, 0, RALPHA, X, 1, A ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_zhpr(CblasColMajor, INVALID, 0, RALPHA, X, 1, A ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_zhpr(CblasColMajor, CblasUpper, INVALID, RALPHA, X, 1, A ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_zhpr(CblasColMajor, CblasUpper, 0, RALPHA, X, 0, A ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_zhpr(CblasColMajor, INVALID, 0, RALPHA, X, 1, A ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_zhpr(CblasColMajor, CblasUpper, INVALID, RALPHA, X, 1, A ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_zhpr(CblasColMajor, CblasUpper, 0, RALPHA, X, 0, A ); + chkxer(); + } + if (cblas_ok == TRUE) + printf(" %-12s PASSED THE TESTS OF ERROR-EXITS\n", cblas_rout); + else + printf("******* %s FAILED THE TESTS OF ERROR-EXITS *******\n",cblas_rout); +} diff --git a/CBLAS/testing/c_z3chke.c b/CBLAS/testing/c_z3chke.c new file mode 100644 index 000000000..0bb1bfb62 --- /dev/null +++ b/CBLAS/testing/c_z3chke.c @@ -0,0 +1,1706 @@ +#include +#include +#include "cblas.h" +#include "cblas_test.h" + +int cblas_ok, cblas_lerr, cblas_info; +int link_xerbla=TRUE; +char *cblas_rout; + +#ifdef F77_Char +void F77_xerbla(F77_Char F77_srname, void *vinfo); +#else +void F77_xerbla(char *srname, void *vinfo); +#endif + +void chkxer(void) { + extern int cblas_ok, cblas_lerr, cblas_info; + extern int link_xerbla; + extern char *cblas_rout; + if (cblas_lerr == 1 ) { + printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %d NOT DETECTED BY %s *****\n", cblas_info, cblas_rout); + cblas_ok = 0 ; + } + cblas_lerr = 1 ; +} + +void F77_z3chke(char * rout) { + char *sf = ( rout ) ; + double A[4] = {0.0,0.0,0.0,0.0}, + B[4] = {0.0,0.0,0.0,0.0}, + C[4] = {0.0,0.0,0.0,0.0}, + ALPHA[2] = {0.0,0.0}, + BETA[2] = {0.0,0.0}, + RALPHA = 0.0, RBETA = 0.0; + extern int cblas_info, cblas_lerr, cblas_ok; + extern int RowMajorStrg; + extern char *cblas_rout; + + cblas_ok = TRUE ; + cblas_lerr = PASSED ; + + if (link_xerbla) /* call these first to link */ + { + cblas_xerbla(cblas_info,cblas_rout,""); + F77_xerbla(cblas_rout,&cblas_info); + } + + if (strncmp( sf,"cblas_zgemm" ,11)==0) { + cblas_rout = "cblas_zgemm" ; + + cblas_info = 1; + cblas_zgemm( INVALID, CblasNoTrans, CblasNoTrans, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 1; + cblas_zgemm( INVALID, CblasNoTrans, CblasTrans, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 1; + cblas_zgemm( INVALID, CblasTrans, CblasNoTrans, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 1; + cblas_zgemm( INVALID, CblasTrans, CblasTrans, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_zgemm( CblasColMajor, INVALID, CblasNoTrans, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_zgemm( CblasColMajor, INVALID, CblasTrans, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_zgemm( CblasColMajor, CblasNoTrans, INVALID, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_zgemm( CblasColMajor, CblasTrans, INVALID, 0, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zgemm( CblasColMajor, CblasNoTrans, CblasTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zgemm( CblasColMajor, CblasTrans, CblasNoTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zgemm( CblasColMajor, CblasTrans, CblasTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_zgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_zgemm( CblasColMajor, CblasNoTrans, CblasTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_zgemm( CblasColMajor, CblasTrans, CblasNoTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_zgemm( CblasColMajor, CblasTrans, CblasTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_zgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_zgemm( CblasColMajor, CblasNoTrans, CblasTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_zgemm( CblasColMajor, CblasTrans, CblasNoTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_zgemm( CblasColMajor, CblasTrans, CblasTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_zgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, 2, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_zgemm( CblasColMajor, CblasNoTrans, CblasTrans, 2, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_zgemm( CblasColMajor, CblasTrans, CblasNoTrans, 0, 0, 2, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = FALSE; + cblas_zgemm( CblasColMajor, CblasTrans, CblasTrans, 0, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_zgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, 0, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_zgemm( CblasColMajor, CblasTrans, CblasNoTrans, 0, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_zgemm( CblasColMajor, CblasNoTrans, CblasTrans, 0, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_zgemm( CblasColMajor, CblasTrans, CblasTrans, 0, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = FALSE; + cblas_zgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, 2, 0, 0, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = FALSE; + cblas_zgemm( CblasColMajor, CblasNoTrans, CblasTrans, 2, 0, 0, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = FALSE; + cblas_zgemm( CblasColMajor, CblasTrans, CblasNoTrans, 2, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = FALSE; + cblas_zgemm( CblasColMajor, CblasTrans, CblasTrans, 2, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_zgemm( CblasRowMajor, CblasNoTrans, CblasNoTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_zgemm( CblasRowMajor, CblasNoTrans, CblasTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_zgemm( CblasRowMajor, CblasTrans, CblasNoTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_zgemm( CblasRowMajor, CblasTrans, CblasTrans, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_zgemm( CblasRowMajor, CblasNoTrans, CblasNoTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_zgemm( CblasRowMajor, CblasNoTrans, CblasTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_zgemm( CblasRowMajor, CblasTrans, CblasNoTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_zgemm( CblasRowMajor, CblasTrans, CblasTrans, 0, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_zgemm( CblasRowMajor, CblasNoTrans, CblasNoTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_zgemm( CblasRowMajor, CblasNoTrans, CblasTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_zgemm( CblasRowMajor, CblasTrans, CblasNoTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_zgemm( CblasRowMajor, CblasTrans, CblasTrans, 0, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_zgemm( CblasRowMajor, CblasNoTrans, CblasNoTrans, 0, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_zgemm( CblasRowMajor, CblasNoTrans, CblasTrans, 0, 0, 2, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_zgemm( CblasRowMajor, CblasTrans, CblasNoTrans, 2, 0, 0, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 9; RowMajorStrg = TRUE; + cblas_zgemm( CblasRowMajor, CblasTrans, CblasTrans, 2, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_zgemm( CblasRowMajor, CblasNoTrans, CblasNoTrans, 0, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_zgemm( CblasRowMajor, CblasTrans, CblasNoTrans, 0, 2, 0, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_zgemm( CblasRowMajor, CblasNoTrans, CblasTrans, 0, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_zgemm( CblasRowMajor, CblasTrans, CblasTrans, 0, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = TRUE; + cblas_zgemm( CblasRowMajor, CblasNoTrans, CblasNoTrans, 0, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = TRUE; + cblas_zgemm( CblasRowMajor, CblasNoTrans, CblasTrans, 0, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = TRUE; + cblas_zgemm( CblasRowMajor, CblasTrans, CblasNoTrans, 0, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 14; RowMajorStrg = TRUE; + cblas_zgemm( CblasRowMajor, CblasTrans, CblasTrans, 0, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + + } else if (strncmp( sf,"cblas_zhemm" ,11)==0) { + cblas_rout = "cblas_zhemm" ; + + cblas_info = 1; + cblas_zhemm( INVALID, CblasRight, CblasLower, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_zhemm( CblasColMajor, INVALID, CblasUpper, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_zhemm( CblasColMajor, CblasLeft, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zhemm( CblasColMajor, CblasLeft, CblasUpper, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zhemm( CblasColMajor, CblasRight, CblasUpper, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zhemm( CblasColMajor, CblasLeft, CblasLower, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zhemm( CblasColMajor, CblasRight, CblasLower, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_zhemm( CblasColMajor, CblasLeft, CblasUpper, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_zhemm( CblasColMajor, CblasRight, CblasUpper, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_zhemm( CblasColMajor, CblasLeft, CblasLower, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_zhemm( CblasColMajor, CblasRight, CblasLower, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zhemm( CblasColMajor, CblasLeft, CblasUpper, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zhemm( CblasColMajor, CblasRight, CblasUpper, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zhemm( CblasColMajor, CblasLeft, CblasLower, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zhemm( CblasColMajor, CblasRight, CblasLower, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_zhemm( CblasColMajor, CblasLeft, CblasUpper, 2, 0, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_zhemm( CblasColMajor, CblasRight, CblasUpper, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_zhemm( CblasColMajor, CblasLeft, CblasLower, 2, 0, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_zhemm( CblasColMajor, CblasRight, CblasLower, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_zhemm( CblasColMajor, CblasLeft, CblasUpper, 2, 0, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_zhemm( CblasColMajor, CblasRight, CblasUpper, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_zhemm( CblasColMajor, CblasLeft, CblasLower, 2, 0, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_zhemm( CblasColMajor, CblasRight, CblasLower, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_zhemm( CblasRowMajor, CblasLeft, CblasUpper, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_zhemm( CblasRowMajor, CblasRight, CblasUpper, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_zhemm( CblasRowMajor, CblasLeft, CblasLower, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_zhemm( CblasRowMajor, CblasRight, CblasLower, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_zhemm( CblasRowMajor, CblasLeft, CblasUpper, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_zhemm( CblasRowMajor, CblasRight, CblasUpper, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_zhemm( CblasRowMajor, CblasLeft, CblasLower, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_zhemm( CblasRowMajor, CblasRight, CblasLower, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zhemm( CblasRowMajor, CblasLeft, CblasUpper, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zhemm( CblasRowMajor, CblasRight, CblasUpper, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zhemm( CblasRowMajor, CblasLeft, CblasLower, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zhemm( CblasRowMajor, CblasRight, CblasLower, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_zhemm( CblasRowMajor, CblasLeft, CblasUpper, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_zhemm( CblasRowMajor, CblasRight, CblasUpper, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_zhemm( CblasRowMajor, CblasLeft, CblasLower, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_zhemm( CblasRowMajor, CblasRight, CblasLower, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_zhemm( CblasRowMajor, CblasLeft, CblasUpper, 0, 2, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_zhemm( CblasRowMajor, CblasRight, CblasUpper, 0, 2, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_zhemm( CblasRowMajor, CblasLeft, CblasLower, 0, 2, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_zhemm( CblasRowMajor, CblasRight, CblasLower, 0, 2, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + + } else if (strncmp( sf,"cblas_zsymm" ,11)==0) { + cblas_rout = "cblas_zsymm" ; + + cblas_info = 1; + cblas_zsymm( INVALID, CblasRight, CblasLower, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_zsymm( CblasColMajor, INVALID, CblasUpper, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_zsymm( CblasColMajor, CblasLeft, INVALID, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zsymm( CblasColMajor, CblasLeft, CblasUpper, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zsymm( CblasColMajor, CblasRight, CblasUpper, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zsymm( CblasColMajor, CblasLeft, CblasLower, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zsymm( CblasColMajor, CblasRight, CblasLower, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_zsymm( CblasColMajor, CblasLeft, CblasUpper, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_zsymm( CblasColMajor, CblasRight, CblasUpper, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_zsymm( CblasColMajor, CblasLeft, CblasLower, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_zsymm( CblasColMajor, CblasRight, CblasLower, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zsymm( CblasColMajor, CblasLeft, CblasUpper, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zsymm( CblasColMajor, CblasRight, CblasUpper, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zsymm( CblasColMajor, CblasLeft, CblasLower, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zsymm( CblasColMajor, CblasRight, CblasLower, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_zsymm( CblasColMajor, CblasLeft, CblasUpper, 2, 0, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_zsymm( CblasColMajor, CblasRight, CblasUpper, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_zsymm( CblasColMajor, CblasLeft, CblasLower, 2, 0, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_zsymm( CblasColMajor, CblasRight, CblasLower, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_zsymm( CblasColMajor, CblasLeft, CblasUpper, 2, 0, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_zsymm( CblasColMajor, CblasRight, CblasUpper, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_zsymm( CblasColMajor, CblasLeft, CblasLower, 2, 0, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_zsymm( CblasColMajor, CblasRight, CblasLower, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_zsymm( CblasRowMajor, CblasLeft, CblasUpper, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_zsymm( CblasRowMajor, CblasRight, CblasUpper, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_zsymm( CblasRowMajor, CblasLeft, CblasLower, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = TRUE; + cblas_zsymm( CblasRowMajor, CblasRight, CblasLower, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_zsymm( CblasRowMajor, CblasLeft, CblasUpper, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_zsymm( CblasRowMajor, CblasRight, CblasUpper, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_zsymm( CblasRowMajor, CblasLeft, CblasLower, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = TRUE; + cblas_zsymm( CblasRowMajor, CblasRight, CblasLower, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zsymm( CblasRowMajor, CblasLeft, CblasUpper, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zsymm( CblasRowMajor, CblasRight, CblasUpper, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zsymm( CblasRowMajor, CblasLeft, CblasLower, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zsymm( CblasRowMajor, CblasRight, CblasLower, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_zsymm( CblasRowMajor, CblasLeft, CblasUpper, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_zsymm( CblasRowMajor, CblasRight, CblasUpper, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_zsymm( CblasRowMajor, CblasLeft, CblasLower, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_zsymm( CblasRowMajor, CblasRight, CblasLower, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_zsymm( CblasRowMajor, CblasLeft, CblasUpper, 0, 2, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_zsymm( CblasRowMajor, CblasRight, CblasUpper, 0, 2, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_zsymm( CblasRowMajor, CblasLeft, CblasLower, 0, 2, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_zsymm( CblasRowMajor, CblasRight, CblasLower, 0, 2, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + + } else if (strncmp( sf,"cblas_ztrmm" ,11)==0) { + cblas_rout = "cblas_ztrmm" ; + + cblas_info = 1; + cblas_ztrmm( INVALID, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasLeft, INVALID, CblasNoTrans, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasLeft, CblasUpper, INVALID, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + INVALID, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ztrmm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ztrmm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + + } else if (strncmp( sf,"cblas_ztrsm" ,11)==0) { + cblas_rout = "cblas_ztrsm" ; + + cblas_info = 1; + cblas_ztrsm( INVALID, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, INVALID, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasLeft, INVALID, CblasNoTrans, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasLeft, CblasUpper, INVALID, + CblasNonUnit, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + INVALID, 0, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = FALSE; + cblas_ztrsm( CblasColMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 6; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, INVALID, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 7; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, INVALID, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 2, 0, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 2 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasLeft, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasLeft, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasRight, CblasUpper, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasRight, CblasUpper, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasLeft, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasLeft, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 1, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasRight, CblasLower, CblasNoTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + cblas_info = 12; RowMajorStrg = TRUE; + cblas_ztrsm( CblasRowMajor, CblasRight, CblasLower, CblasTrans, + CblasNonUnit, 0, 2, ALPHA, A, 2, B, 1 ); + chkxer(); + + } else if (strncmp( sf,"cblas_zherk" ,11)==0) { + cblas_rout = "cblas_zherk" ; + + cblas_info = 1; + cblas_zherk(INVALID, CblasUpper, CblasNoTrans, 0, 0, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_zherk(CblasColMajor, INVALID, CblasNoTrans, 0, 0, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_zherk(CblasColMajor, CblasUpper, CblasTrans, 0, 0, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zherk(CblasColMajor, CblasUpper, CblasNoTrans, INVALID, 0, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zherk(CblasColMajor, CblasUpper, CblasConjTrans, INVALID, 0, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zherk(CblasColMajor, CblasLower, CblasNoTrans, INVALID, 0, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zherk(CblasColMajor, CblasLower, CblasConjTrans, INVALID, 0, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_zherk(CblasColMajor, CblasUpper, CblasNoTrans, 0, INVALID, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_zherk(CblasColMajor, CblasUpper, CblasConjTrans, 0, INVALID, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_zherk(CblasColMajor, CblasLower, CblasNoTrans, 0, INVALID, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_zherk(CblasColMajor, CblasLower, CblasConjTrans, 0, INVALID, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zherk(CblasRowMajor, CblasUpper, CblasNoTrans, 0, 2, + RALPHA, A, 1, RBETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zherk(CblasRowMajor, CblasUpper, CblasConjTrans, 2, 0, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zherk(CblasRowMajor, CblasLower, CblasNoTrans, 0, 2, + RALPHA, A, 1, RBETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zherk(CblasRowMajor, CblasLower, CblasConjTrans, 2, 0, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zherk(CblasColMajor, CblasUpper, CblasNoTrans, 2, 0, + RALPHA, A, 1, RBETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zherk(CblasColMajor, CblasUpper, CblasConjTrans, 0, 2, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zherk(CblasColMajor, CblasLower, CblasNoTrans, 2, 0, + RALPHA, A, 1, RBETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zherk(CblasColMajor, CblasLower, CblasConjTrans, 0, 2, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_zherk(CblasRowMajor, CblasUpper, CblasNoTrans, 2, 0, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_zherk(CblasRowMajor, CblasUpper, CblasConjTrans, 2, 0, + RALPHA, A, 2, RBETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_zherk(CblasRowMajor, CblasLower, CblasNoTrans, 2, 0, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_zherk(CblasRowMajor, CblasLower, CblasConjTrans, 2, 0, + RALPHA, A, 2, RBETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_zherk(CblasColMajor, CblasUpper, CblasNoTrans, 2, 0, + RALPHA, A, 2, RBETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_zherk(CblasColMajor, CblasUpper, CblasConjTrans, 2, 0, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_zherk(CblasColMajor, CblasLower, CblasNoTrans, 2, 0, + RALPHA, A, 2, RBETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_zherk(CblasColMajor, CblasLower, CblasConjTrans, 2, 0, + RALPHA, A, 1, RBETA, C, 1 ); + chkxer(); + + } else if (strncmp( sf,"cblas_zsyrk" ,11)==0) { + cblas_rout = "cblas_zsyrk" ; + + cblas_info = 1; + cblas_zsyrk(INVALID, CblasUpper, CblasNoTrans, 0, 0, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_zsyrk(CblasColMajor, INVALID, CblasNoTrans, 0, 0, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_zsyrk(CblasColMajor, CblasUpper, CblasConjTrans, 0, 0, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zsyrk(CblasColMajor, CblasUpper, CblasNoTrans, INVALID, 0, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zsyrk(CblasColMajor, CblasUpper, CblasTrans, INVALID, 0, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zsyrk(CblasColMajor, CblasLower, CblasNoTrans, INVALID, 0, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zsyrk(CblasColMajor, CblasLower, CblasTrans, INVALID, 0, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_zsyrk(CblasColMajor, CblasUpper, CblasNoTrans, 0, INVALID, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_zsyrk(CblasColMajor, CblasUpper, CblasTrans, 0, INVALID, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_zsyrk(CblasColMajor, CblasLower, CblasNoTrans, 0, INVALID, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_zsyrk(CblasColMajor, CblasLower, CblasTrans, 0, INVALID, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zsyrk(CblasRowMajor, CblasUpper, CblasNoTrans, 0, 2, + ALPHA, A, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zsyrk(CblasRowMajor, CblasUpper, CblasTrans, 2, 0, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zsyrk(CblasRowMajor, CblasLower, CblasNoTrans, 0, 2, + ALPHA, A, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zsyrk(CblasRowMajor, CblasLower, CblasTrans, 2, 0, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zsyrk(CblasColMajor, CblasUpper, CblasNoTrans, 2, 0, + ALPHA, A, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zsyrk(CblasColMajor, CblasUpper, CblasTrans, 0, 2, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zsyrk(CblasColMajor, CblasLower, CblasNoTrans, 2, 0, + ALPHA, A, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zsyrk(CblasColMajor, CblasLower, CblasTrans, 0, 2, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_zsyrk(CblasRowMajor, CblasUpper, CblasNoTrans, 2, 0, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_zsyrk(CblasRowMajor, CblasUpper, CblasTrans, 2, 0, + ALPHA, A, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_zsyrk(CblasRowMajor, CblasLower, CblasNoTrans, 2, 0, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = TRUE; + cblas_zsyrk(CblasRowMajor, CblasLower, CblasTrans, 2, 0, + ALPHA, A, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_zsyrk(CblasColMajor, CblasUpper, CblasNoTrans, 2, 0, + ALPHA, A, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_zsyrk(CblasColMajor, CblasUpper, CblasTrans, 2, 0, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_zsyrk(CblasColMajor, CblasLower, CblasNoTrans, 2, 0, + ALPHA, A, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 11; RowMajorStrg = FALSE; + cblas_zsyrk(CblasColMajor, CblasLower, CblasTrans, 2, 0, + ALPHA, A, 1, BETA, C, 1 ); + chkxer(); + + } else if (strncmp( sf,"cblas_zher2k" ,12)==0) { + cblas_rout = "cblas_zher2k" ; + + cblas_info = 1; + cblas_zher2k(INVALID, CblasUpper, CblasNoTrans, 0, 0, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_zher2k(CblasColMajor, INVALID, CblasNoTrans, 0, 0, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_zher2k(CblasColMajor, CblasUpper, CblasTrans, 0, 0, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zher2k(CblasColMajor, CblasUpper, CblasNoTrans, INVALID, 0, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zher2k(CblasColMajor, CblasUpper, CblasConjTrans, INVALID, 0, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zher2k(CblasColMajor, CblasLower, CblasNoTrans, INVALID, 0, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zher2k(CblasColMajor, CblasLower, CblasConjTrans, INVALID, 0, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_zher2k(CblasColMajor, CblasUpper, CblasNoTrans, 0, INVALID, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_zher2k(CblasColMajor, CblasUpper, CblasConjTrans, 0, INVALID, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_zher2k(CblasColMajor, CblasLower, CblasNoTrans, 0, INVALID, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_zher2k(CblasColMajor, CblasLower, CblasConjTrans, 0, INVALID, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zher2k(CblasRowMajor, CblasUpper, CblasNoTrans, 0, 2, + ALPHA, A, 1, B, 2, RBETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zher2k(CblasRowMajor, CblasUpper, CblasConjTrans, 2, 0, + ALPHA, A, 1, B, 2, RBETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zher2k(CblasRowMajor, CblasLower, CblasNoTrans, 0, 2, + ALPHA, A, 1, B, 2, RBETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zher2k(CblasRowMajor, CblasLower, CblasConjTrans, 2, 0, + ALPHA, A, 1, B, 2, RBETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zher2k(CblasColMajor, CblasUpper, CblasNoTrans, 2, 0, + ALPHA, A, 1, B, 1, RBETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zher2k(CblasColMajor, CblasUpper, CblasConjTrans, 0, 2, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zher2k(CblasColMajor, CblasLower, CblasNoTrans, 2, 0, + ALPHA, A, 1, B, 1, RBETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zher2k(CblasColMajor, CblasLower, CblasConjTrans, 0, 2, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_zher2k(CblasRowMajor, CblasUpper, CblasNoTrans, 0, 2, + ALPHA, A, 2, B, 1, RBETA, C, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_zher2k(CblasRowMajor, CblasUpper, CblasConjTrans, 2, 0, + ALPHA, A, 2, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_zher2k(CblasRowMajor, CblasLower, CblasNoTrans, 0, 2, + ALPHA, A, 2, B, 1, RBETA, C, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_zher2k(CblasRowMajor, CblasLower, CblasConjTrans, 2, 0, + ALPHA, A, 2, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_zher2k(CblasColMajor, CblasUpper, CblasNoTrans, 2, 0, + ALPHA, A, 2, B, 1, RBETA, C, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_zher2k(CblasColMajor, CblasUpper, CblasConjTrans, 0, 2, + ALPHA, A, 2, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_zher2k(CblasColMajor, CblasLower, CblasNoTrans, 2, 0, + ALPHA, A, 2, B, 1, RBETA, C, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_zher2k(CblasColMajor, CblasLower, CblasConjTrans, 0, 2, + ALPHA, A, 2, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_zher2k(CblasRowMajor, CblasUpper, CblasNoTrans, 2, 0, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_zher2k(CblasRowMajor, CblasUpper, CblasConjTrans, 2, 0, + ALPHA, A, 2, B, 2, RBETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_zher2k(CblasRowMajor, CblasLower, CblasNoTrans, 2, 0, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_zher2k(CblasRowMajor, CblasLower, CblasConjTrans, 2, 0, + ALPHA, A, 2, B, 2, RBETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_zher2k(CblasColMajor, CblasUpper, CblasNoTrans, 2, 0, + ALPHA, A, 2, B, 2, RBETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_zher2k(CblasColMajor, CblasUpper, CblasConjTrans, 2, 0, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_zher2k(CblasColMajor, CblasLower, CblasNoTrans, 2, 0, + ALPHA, A, 2, B, 2, RBETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_zher2k(CblasColMajor, CblasLower, CblasConjTrans, 2, 0, + ALPHA, A, 1, B, 1, RBETA, C, 1 ); + chkxer(); + + } else if (strncmp( sf,"cblas_zsyr2k" ,12)==0) { + cblas_rout = "cblas_zsyr2k" ; + + cblas_info = 1; + cblas_zsyr2k(INVALID, CblasUpper, CblasNoTrans, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 2; RowMajorStrg = FALSE; + cblas_zsyr2k(CblasColMajor, INVALID, CblasNoTrans, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 3; RowMajorStrg = FALSE; + cblas_zsyr2k(CblasColMajor, CblasUpper, CblasConjTrans, 0, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zsyr2k(CblasColMajor, CblasUpper, CblasNoTrans, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zsyr2k(CblasColMajor, CblasUpper, CblasTrans, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zsyr2k(CblasColMajor, CblasLower, CblasNoTrans, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 4; RowMajorStrg = FALSE; + cblas_zsyr2k(CblasColMajor, CblasLower, CblasTrans, INVALID, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_zsyr2k(CblasColMajor, CblasUpper, CblasNoTrans, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_zsyr2k(CblasColMajor, CblasUpper, CblasTrans, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_zsyr2k(CblasColMajor, CblasLower, CblasNoTrans, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 5; RowMajorStrg = FALSE; + cblas_zsyr2k(CblasColMajor, CblasLower, CblasTrans, 0, INVALID, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zsyr2k(CblasRowMajor, CblasUpper, CblasNoTrans, 0, 2, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zsyr2k(CblasRowMajor, CblasUpper, CblasTrans, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zsyr2k(CblasRowMajor, CblasLower, CblasNoTrans, 0, 2, + ALPHA, A, 1, B, 2, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = TRUE; + cblas_zsyr2k(CblasRowMajor, CblasLower, CblasTrans, 2, 0, + ALPHA, A, 1, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zsyr2k(CblasColMajor, CblasUpper, CblasNoTrans, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zsyr2k(CblasColMajor, CblasUpper, CblasTrans, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zsyr2k(CblasColMajor, CblasLower, CblasNoTrans, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 8; RowMajorStrg = FALSE; + cblas_zsyr2k(CblasColMajor, CblasLower, CblasTrans, 0, 2, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_zsyr2k(CblasRowMajor, CblasUpper, CblasNoTrans, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_zsyr2k(CblasRowMajor, CblasUpper, CblasTrans, 2, 0, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_zsyr2k(CblasRowMajor, CblasLower, CblasNoTrans, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = TRUE; + cblas_zsyr2k(CblasRowMajor, CblasLower, CblasTrans, 2, 0, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_zsyr2k(CblasColMajor, CblasUpper, CblasNoTrans, 2, 0, + ALPHA, A, 2, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_zsyr2k(CblasColMajor, CblasUpper, CblasTrans, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_zsyr2k(CblasColMajor, CblasLower, CblasNoTrans, 2, 0, + ALPHA, A, 2, B, 1, BETA, C, 2 ); + chkxer(); + cblas_info = 10; RowMajorStrg = FALSE; + cblas_zsyr2k(CblasColMajor, CblasLower, CblasTrans, 0, 2, + ALPHA, A, 2, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_zsyr2k(CblasRowMajor, CblasUpper, CblasNoTrans, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_zsyr2k(CblasRowMajor, CblasUpper, CblasTrans, 2, 0, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_zsyr2k(CblasRowMajor, CblasLower, CblasNoTrans, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = TRUE; + cblas_zsyr2k(CblasRowMajor, CblasLower, CblasTrans, 2, 0, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_zsyr2k(CblasColMajor, CblasUpper, CblasNoTrans, 2, 0, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_zsyr2k(CblasColMajor, CblasUpper, CblasTrans, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_zsyr2k(CblasColMajor, CblasLower, CblasNoTrans, 2, 0, + ALPHA, A, 2, B, 2, BETA, C, 1 ); + chkxer(); + cblas_info = 13; RowMajorStrg = FALSE; + cblas_zsyr2k(CblasColMajor, CblasLower, CblasTrans, 2, 0, + ALPHA, A, 1, B, 1, BETA, C, 1 ); + chkxer(); + + } + + if (cblas_ok == 1 ) + printf(" %-12s PASSED THE TESTS OF ERROR-EXITS\n", cblas_rout); + else + printf("***** %s FAILED THE TESTS OF ERROR-EXITS *******\n",cblas_rout); +} diff --git a/CBLAS/testing/c_zblas1.c b/CBLAS/testing/c_zblas1.c new file mode 100644 index 000000000..d2215a89e --- /dev/null +++ b/CBLAS/testing/c_zblas1.c @@ -0,0 +1,74 @@ +/* + * c_zblas1.c + * + * The program is a C wrapper for zcblat1. + * + * Written by Keita Teranishi. 2/11/1998 + * + */ +#include "cblas_test.h" +#include "cblas.h" +void F77_zaxpy(const int *N, const void *alpha, void *X, + const int *incX, void *Y, const int *incY) +{ + cblas_zaxpy(*N, alpha, X, *incX, Y, *incY); + return; +} + +void F77_zcopy(const int *N, void *X, const int *incX, + void *Y, const int *incY) +{ + cblas_zcopy(*N, X, *incX, Y, *incY); + return; +} + +void F77_zdotc(const int *N, const void *X, const int *incX, + const void *Y, const int *incY,void *dotc) +{ + cblas_zdotc_sub(*N, X, *incX, Y, *incY, dotc); + return; +} + +void F77_zdotu(const int *N, void *X, const int *incX, + void *Y, const int *incY,void *dotu) +{ + cblas_zdotu_sub(*N, X, *incX, Y, *incY, dotu); + return; +} + +void F77_zdscal(const int *N, const double *alpha, void *X, + const int *incX) +{ + cblas_zdscal(*N, *alpha, X, *incX); + return; +} + +void F77_zscal(const int *N, const void * *alpha, void *X, + const int *incX) +{ + cblas_zscal(*N, alpha, X, *incX); + return; +} + +void F77_zswap( const int *N, void *X, const int *incX, + void *Y, const int *incY) +{ + cblas_zswap(*N,X,*incX,Y,*incY); + return; +} + +int F77_izamax(const int *N, const void *X, const int *incX) +{ + if (*N < 1 || *incX < 1) return(0); + return(cblas_izamax(*N, X, *incX)+1); +} + +double F77_dznrm2(const int *N, const void *X, const int *incX) +{ + return cblas_dznrm2(*N, X, *incX); +} + +double F77_dzasum(const int *N, void *X, const int *incX) +{ + return cblas_dzasum(*N, X, *incX); +} diff --git a/CBLAS/testing/c_zblas2.c b/CBLAS/testing/c_zblas2.c new file mode 100644 index 000000000..5d58f6c29 --- /dev/null +++ b/CBLAS/testing/c_zblas2.c @@ -0,0 +1,807 @@ +/* + * Written by D.P. Manley, Digital Equipment Corporation. + * Prefixed "C_" to BLAS routines and their declarations. + * + * Modified by T. H. Do, 4/08/98, SGI/CRAY Research. + */ +#include +#include "cblas.h" +#include "cblas_test.h" + +void F77_zgemv(int *order, char *transp, int *m, int *n, + const void *alpha, + CBLAS_TEST_ZOMPLEX *a, int *lda, const void *x, int *incx, + const void *beta, void *y, int *incy) { + + CBLAS_TEST_ZOMPLEX *A; + int i,j,LDA; + enum CBLAS_TRANSPOSE trans; + + get_transpose_type(transp, &trans); + if (*order == TEST_ROW_MJR) { + LDA = *n+1; + A = (CBLAS_TEST_ZOMPLEX *)malloc( (*m)*LDA*sizeof( CBLAS_TEST_ZOMPLEX) ); + for( i=0; i<*m; i++ ) + for( j=0; j<*n; j++ ){ + A[ LDA*i+j ].real=a[ (*lda)*j+i ].real; + A[ LDA*i+j ].imag=a[ (*lda)*j+i ].imag; + } + cblas_zgemv( CblasRowMajor, trans, *m, *n, alpha, A, LDA, x, *incx, + beta, y, *incy ); + free(A); + } + else if (*order == TEST_COL_MJR) + cblas_zgemv( CblasColMajor, trans, + *m, *n, alpha, a, *lda, x, *incx, beta, y, *incy ); + else + cblas_zgemv( UNDEFINED, trans, + *m, *n, alpha, a, *lda, x, *incx, beta, y, *incy ); +} + +void F77_zgbmv(int *order, char *transp, int *m, int *n, int *kl, int *ku, + CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda, + CBLAS_TEST_ZOMPLEX *x, int *incx, + CBLAS_TEST_ZOMPLEX *beta, CBLAS_TEST_ZOMPLEX *y, int *incy) { + + CBLAS_TEST_ZOMPLEX *A; + int i,j,irow,jcol,LDA; + enum CBLAS_TRANSPOSE trans; + + get_transpose_type(transp, &trans); + if (*order == TEST_ROW_MJR) { + LDA = *ku+*kl+2; + A=( CBLAS_TEST_ZOMPLEX* )malloc((*n+*kl)*LDA*sizeof(CBLAS_TEST_ZOMPLEX)); + for( i=0; i<*ku; i++ ){ + irow=*ku+*kl-i; + jcol=(*ku)-i; + for( j=jcol; j<*n; j++ ){ + A[ LDA*(j-jcol)+irow ].real=a[ (*lda)*j+i ].real; + A[ LDA*(j-jcol)+irow ].imag=a[ (*lda)*j+i ].imag; + } + } + i=*ku; + irow=*ku+*kl-i; + for( j=0; j<*n; j++ ){ + A[ LDA*j+irow ].real=a[ (*lda)*j+i ].real; + A[ LDA*j+irow ].imag=a[ (*lda)*j+i ].imag; + } + for( i=*ku+1; i<*ku+*kl+1; i++ ){ + irow=*ku+*kl-i; + jcol=i-(*ku); + for( j=jcol; j<(*n+*kl); j++ ){ + A[ LDA*j+irow ].real=a[ (*lda)*(j-jcol)+i ].real; + A[ LDA*j+irow ].imag=a[ (*lda)*(j-jcol)+i ].imag; + } + } + cblas_zgbmv( CblasRowMajor, trans, *m, *n, *kl, *ku, alpha, A, LDA, x, + *incx, beta, y, *incy ); + free(A); + } + else if (*order == TEST_COL_MJR) + cblas_zgbmv( CblasColMajor, trans, *m, *n, *kl, *ku, alpha, a, *lda, x, + *incx, beta, y, *incy ); + else + cblas_zgbmv( UNDEFINED, trans, *m, *n, *kl, *ku, alpha, a, *lda, x, + *incx, beta, y, *incy ); +} + +void F77_zgeru(int *order, int *m, int *n, CBLAS_TEST_ZOMPLEX *alpha, + CBLAS_TEST_ZOMPLEX *x, int *incx, CBLAS_TEST_ZOMPLEX *y, int *incy, + CBLAS_TEST_ZOMPLEX *a, int *lda){ + + CBLAS_TEST_ZOMPLEX *A; + int i,j,LDA; + + if (*order == TEST_ROW_MJR) { + LDA = *n+1; + A=(CBLAS_TEST_ZOMPLEX*)malloc((*m)*LDA*sizeof(CBLAS_TEST_ZOMPLEX)); + for( i=0; i<*m; i++ ) + for( j=0; j<*n; j++ ){ + A[ LDA*i+j ].real=a[ (*lda)*j+i ].real; + A[ LDA*i+j ].imag=a[ (*lda)*j+i ].imag; + } + cblas_zgeru( CblasRowMajor, *m, *n, alpha, x, *incx, y, *incy, A, LDA ); + for( i=0; i<*m; i++ ) + for( j=0; j<*n; j++ ){ + a[ (*lda)*j+i ].real=A[ LDA*i+j ].real; + a[ (*lda)*j+i ].imag=A[ LDA*i+j ].imag; + } + free(A); + } + else if (*order == TEST_COL_MJR) + cblas_zgeru( CblasColMajor, *m, *n, alpha, x, *incx, y, *incy, a, *lda ); + else + cblas_zgeru( UNDEFINED, *m, *n, alpha, x, *incx, y, *incy, a, *lda ); +} + +void F77_zgerc(int *order, int *m, int *n, CBLAS_TEST_ZOMPLEX *alpha, + CBLAS_TEST_ZOMPLEX *x, int *incx, CBLAS_TEST_ZOMPLEX *y, int *incy, + CBLAS_TEST_ZOMPLEX *a, int *lda) { + CBLAS_TEST_ZOMPLEX *A; + int i,j,LDA; + + if (*order == TEST_ROW_MJR) { + LDA = *n+1; + A=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDA*sizeof(CBLAS_TEST_ZOMPLEX ) ); + for( i=0; i<*m; i++ ) + for( j=0; j<*n; j++ ){ + A[ LDA*i+j ].real=a[ (*lda)*j+i ].real; + A[ LDA*i+j ].imag=a[ (*lda)*j+i ].imag; + } + cblas_zgerc( CblasRowMajor, *m, *n, alpha, x, *incx, y, *incy, A, LDA ); + for( i=0; i<*m; i++ ) + for( j=0; j<*n; j++ ){ + a[ (*lda)*j+i ].real=A[ LDA*i+j ].real; + a[ (*lda)*j+i ].imag=A[ LDA*i+j ].imag; + } + free(A); + } + else if (*order == TEST_COL_MJR) + cblas_zgerc( CblasColMajor, *m, *n, alpha, x, *incx, y, *incy, a, *lda ); + else + cblas_zgerc( UNDEFINED, *m, *n, alpha, x, *incx, y, *incy, a, *lda ); +} + +void F77_zhemv(int *order, char *uplow, int *n, CBLAS_TEST_ZOMPLEX *alpha, + CBLAS_TEST_ZOMPLEX *a, int *lda, CBLAS_TEST_ZOMPLEX *x, + int *incx, CBLAS_TEST_ZOMPLEX *beta, CBLAS_TEST_ZOMPLEX *y, int *incy){ + + CBLAS_TEST_ZOMPLEX *A; + int i,j,LDA; + enum CBLAS_UPLO uplo; + + get_uplo_type(uplow,&uplo); + + if (*order == TEST_ROW_MJR) { + LDA = *n+1; + A = (CBLAS_TEST_ZOMPLEX *)malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX)); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ){ + A[ LDA*i+j ].real=a[ (*lda)*j+i ].real; + A[ LDA*i+j ].imag=a[ (*lda)*j+i ].imag; + } + cblas_zhemv( CblasRowMajor, uplo, *n, alpha, A, LDA, x, *incx, + beta, y, *incy ); + free(A); + } + else if (*order == TEST_COL_MJR) + cblas_zhemv( CblasColMajor, uplo, *n, alpha, a, *lda, x, *incx, + beta, y, *incy ); + else + cblas_zhemv( UNDEFINED, uplo, *n, alpha, a, *lda, x, *incx, + beta, y, *incy ); +} + +void F77_zhbmv(int *order, char *uplow, int *n, int *k, + CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda, + CBLAS_TEST_ZOMPLEX *x, int *incx, CBLAS_TEST_ZOMPLEX *beta, + CBLAS_TEST_ZOMPLEX *y, int *incy){ + +CBLAS_TEST_ZOMPLEX *A; +int i,irow,j,jcol,LDA; + + enum CBLAS_UPLO uplo; + + get_uplo_type(uplow,&uplo); + + if (*order == TEST_ROW_MJR) { + if (uplo != CblasUpper && uplo != CblasLower ) + cblas_zhbmv(CblasRowMajor, UNDEFINED, *n, *k, alpha, a, *lda, x, + *incx, beta, y, *incy ); + else { + LDA = *k+2; + A =(CBLAS_TEST_ZOMPLEX*)malloc((*n+*k)*LDA*sizeof(CBLAS_TEST_ZOMPLEX)); + if (uplo == CblasUpper) { + for( i=0; i<*k; i++ ){ + irow=*k-i; + jcol=(*k)-i; + for( j=jcol; j<*n; j++ ) { + A[ LDA*(j-jcol)+irow ].real=a[ (*lda)*j+i ].real; + A[ LDA*(j-jcol)+irow ].imag=a[ (*lda)*j+i ].imag; + } + } + i=*k; + irow=*k-i; + for( j=0; j<*n; j++ ) { + A[ LDA*j+irow ].real=a[ (*lda)*j+i ].real; + A[ LDA*j+irow ].imag=a[ (*lda)*j+i ].imag; + } + } + else { + i=0; + irow=*k-i; + for( j=0; j<*n; j++ ) { + A[ LDA*j+irow ].real=a[ (*lda)*j+i ].real; + A[ LDA*j+irow ].imag=a[ (*lda)*j+i ].imag; + } + for( i=1; i<*k+1; i++ ){ + irow=*k-i; + jcol=i; + for( j=jcol; j<(*n+*k); j++ ) { + A[ LDA*j+irow ].real=a[ (*lda)*(j-jcol)+i ].real; + A[ LDA*j+irow ].imag=a[ (*lda)*(j-jcol)+i ].imag; + } + } + } + cblas_zhbmv( CblasRowMajor, uplo, *n, *k, alpha, A, LDA, x, *incx, + beta, y, *incy ); + free(A); + } + } + else if (*order == TEST_COL_MJR) + cblas_zhbmv(CblasColMajor, uplo, *n, *k, alpha, a, *lda, x, *incx, + beta, y, *incy ); + else + cblas_zhbmv(UNDEFINED, uplo, *n, *k, alpha, a, *lda, x, *incx, + beta, y, *incy ); +} + +void F77_zhpmv(int *order, char *uplow, int *n, CBLAS_TEST_ZOMPLEX *alpha, + CBLAS_TEST_ZOMPLEX *ap, CBLAS_TEST_ZOMPLEX *x, int *incx, + CBLAS_TEST_ZOMPLEX *beta, CBLAS_TEST_ZOMPLEX *y, int *incy){ + + CBLAS_TEST_ZOMPLEX *A, *AP; + int i,j,k,LDA; + enum CBLAS_UPLO uplo; + + get_uplo_type(uplow,&uplo); + if (*order == TEST_ROW_MJR) { + if (uplo != CblasUpper && uplo != CblasLower ) + cblas_zhpmv(CblasRowMajor, UNDEFINED, *n, alpha, ap, x, *incx, + beta, y, *incy); + else { + LDA = *n; + A = (CBLAS_TEST_ZOMPLEX* )malloc(LDA*LDA*sizeof(CBLAS_TEST_ZOMPLEX )); + AP = (CBLAS_TEST_ZOMPLEX* )malloc( (((LDA+1)*LDA)/2)* + sizeof( CBLAS_TEST_ZOMPLEX )); + if (uplo == CblasUpper) { + for( j=0, k=0; j<*n; j++ ) + for( i=0; i +#include "cblas.h" +#include "cblas_test.h" +#define TEST_COL_MJR 0 +#define TEST_ROW_MJR 1 +#define UNDEFINED -1 + +void F77_zgemm(int *order, char *transpa, char *transpb, int *m, int *n, + int *k, CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda, + CBLAS_TEST_ZOMPLEX *b, int *ldb, CBLAS_TEST_ZOMPLEX *beta, + CBLAS_TEST_ZOMPLEX *c, int *ldc ) { + + CBLAS_TEST_ZOMPLEX *A, *B, *C; + int i,j,LDA, LDB, LDC; + enum CBLAS_TRANSPOSE transa, transb; + + get_transpose_type(transpa, &transa); + get_transpose_type(transpb, &transb); + + if (*order == TEST_ROW_MJR) { + if (transa == CblasNoTrans) { + LDA = *k+1; + A=(CBLAS_TEST_ZOMPLEX*)malloc((*m)*LDA*sizeof(CBLAS_TEST_ZOMPLEX)); + for( i=0; i<*m; i++ ) + for( j=0; j<*k; j++ ) { + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + } + } + else { + LDA = *m+1; + A=(CBLAS_TEST_ZOMPLEX* )malloc(LDA*(*k)*sizeof(CBLAS_TEST_ZOMPLEX)); + for( i=0; i<*k; i++ ) + for( j=0; j<*m; j++ ) { + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + } + } + + if (transb == CblasNoTrans) { + LDB = *n+1; + B=(CBLAS_TEST_ZOMPLEX* )malloc((*k)*LDB*sizeof(CBLAS_TEST_ZOMPLEX) ); + for( i=0; i<*k; i++ ) + for( j=0; j<*n; j++ ) { + B[i*LDB+j].real=b[j*(*ldb)+i].real; + B[i*LDB+j].imag=b[j*(*ldb)+i].imag; + } + } + else { + LDB = *k+1; + B=(CBLAS_TEST_ZOMPLEX* )malloc(LDB*(*n)*sizeof(CBLAS_TEST_ZOMPLEX)); + for( i=0; i<*n; i++ ) + for( j=0; j<*k; j++ ) { + B[i*LDB+j].real=b[j*(*ldb)+i].real; + B[i*LDB+j].imag=b[j*(*ldb)+i].imag; + } + } + + LDC = *n+1; + C=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDC*sizeof(CBLAS_TEST_ZOMPLEX)); + for( j=0; j<*n; j++ ) + for( i=0; i<*m; i++ ) { + C[i*LDC+j].real=c[j*(*ldc)+i].real; + C[i*LDC+j].imag=c[j*(*ldc)+i].imag; + } + cblas_zgemm( CblasRowMajor, transa, transb, *m, *n, *k, alpha, A, LDA, + B, LDB, beta, C, LDC ); + for( j=0; j<*n; j++ ) + for( i=0; i<*m; i++ ) { + c[j*(*ldc)+i].real=C[i*LDC+j].real; + c[j*(*ldc)+i].imag=C[i*LDC+j].imag; + } + free(A); + free(B); + free(C); + } + else if (*order == TEST_COL_MJR) + cblas_zgemm( CblasColMajor, transa, transb, *m, *n, *k, alpha, a, *lda, + b, *ldb, beta, c, *ldc ); + else + cblas_zgemm( UNDEFINED, transa, transb, *m, *n, *k, alpha, a, *lda, + b, *ldb, beta, c, *ldc ); +} +void F77_zhemm(int *order, char *rtlf, char *uplow, int *m, int *n, + CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda, + CBLAS_TEST_ZOMPLEX *b, int *ldb, CBLAS_TEST_ZOMPLEX *beta, + CBLAS_TEST_ZOMPLEX *c, int *ldc ) { + + CBLAS_TEST_ZOMPLEX *A, *B, *C; + int i,j,LDA, LDB, LDC; + enum CBLAS_UPLO uplo; + enum CBLAS_SIDE side; + + get_uplo_type(uplow,&uplo); + get_side_type(rtlf,&side); + + if (*order == TEST_ROW_MJR) { + if (side == CblasLeft) { + LDA = *m+1; + A= (CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDA*sizeof(CBLAS_TEST_ZOMPLEX)); + for( i=0; i<*m; i++ ) + for( j=0; j<*m; j++ ) { + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + } + } + else{ + LDA = *n+1; + A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) { + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + } + } + LDB = *n+1; + B=(CBLAS_TEST_ZOMPLEX* )malloc( (*m)*LDB*sizeof(CBLAS_TEST_ZOMPLEX ) ); + for( i=0; i<*m; i++ ) + for( j=0; j<*n; j++ ) { + B[i*LDB+j].real=b[j*(*ldb)+i].real; + B[i*LDB+j].imag=b[j*(*ldb)+i].imag; + } + LDC = *n+1; + C=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDC*sizeof(CBLAS_TEST_ZOMPLEX ) ); + for( j=0; j<*n; j++ ) + for( i=0; i<*m; i++ ) { + C[i*LDC+j].real=c[j*(*ldc)+i].real; + C[i*LDC+j].imag=c[j*(*ldc)+i].imag; + } + cblas_zhemm( CblasRowMajor, side, uplo, *m, *n, alpha, A, LDA, B, LDB, + beta, C, LDC ); + for( j=0; j<*n; j++ ) + for( i=0; i<*m; i++ ) { + c[j*(*ldc)+i].real=C[i*LDC+j].real; + c[j*(*ldc)+i].imag=C[i*LDC+j].imag; + } + free(A); + free(B); + free(C); + } + else if (*order == TEST_COL_MJR) + cblas_zhemm( CblasColMajor, side, uplo, *m, *n, alpha, a, *lda, b, *ldb, + beta, c, *ldc ); + else + cblas_zhemm( UNDEFINED, side, uplo, *m, *n, alpha, a, *lda, b, *ldb, + beta, c, *ldc ); +} +void F77_zsymm(int *order, char *rtlf, char *uplow, int *m, int *n, + CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda, + CBLAS_TEST_ZOMPLEX *b, int *ldb, CBLAS_TEST_ZOMPLEX *beta, + CBLAS_TEST_ZOMPLEX *c, int *ldc ) { + + CBLAS_TEST_ZOMPLEX *A, *B, *C; + int i,j,LDA, LDB, LDC; + enum CBLAS_UPLO uplo; + enum CBLAS_SIDE side; + + get_uplo_type(uplow,&uplo); + get_side_type(rtlf,&side); + + if (*order == TEST_ROW_MJR) { + if (side == CblasLeft) { + LDA = *m+1; + A=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDA*sizeof(CBLAS_TEST_ZOMPLEX)); + for( i=0; i<*m; i++ ) + for( j=0; j<*m; j++ ) + A[i*LDA+j]=a[j*(*lda)+i]; + } + else{ + LDA = *n+1; + A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) + A[i*LDA+j]=a[j*(*lda)+i]; + } + LDB = *n+1; + B=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDB*sizeof(CBLAS_TEST_ZOMPLEX )); + for( i=0; i<*m; i++ ) + for( j=0; j<*n; j++ ) + B[i*LDB+j]=b[j*(*ldb)+i]; + LDC = *n+1; + C=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDC*sizeof(CBLAS_TEST_ZOMPLEX)); + for( j=0; j<*n; j++ ) + for( i=0; i<*m; i++ ) + C[i*LDC+j]=c[j*(*ldc)+i]; + cblas_zsymm( CblasRowMajor, side, uplo, *m, *n, alpha, A, LDA, B, LDB, + beta, C, LDC ); + for( j=0; j<*n; j++ ) + for( i=0; i<*m; i++ ) + c[j*(*ldc)+i]=C[i*LDC+j]; + free(A); + free(B); + free(C); + } + else if (*order == TEST_COL_MJR) + cblas_zsymm( CblasColMajor, side, uplo, *m, *n, alpha, a, *lda, b, *ldb, + beta, c, *ldc ); + else + cblas_zsymm( UNDEFINED, side, uplo, *m, *n, alpha, a, *lda, b, *ldb, + beta, c, *ldc ); +} + +void F77_zherk(int *order, char *uplow, char *transp, int *n, int *k, + double *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda, + double *beta, CBLAS_TEST_ZOMPLEX *c, int *ldc ) { + + int i,j,LDA,LDC; + CBLAS_TEST_ZOMPLEX *A, *C; + enum CBLAS_UPLO uplo; + enum CBLAS_TRANSPOSE trans; + + get_uplo_type(uplow,&uplo); + get_transpose_type(transp,&trans); + + if (*order == TEST_ROW_MJR) { + if (trans == CblasNoTrans) { + LDA = *k+1; + A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*k; j++ ) { + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + } + } + else{ + LDA = *n+1; + A=(CBLAS_TEST_ZOMPLEX* )malloc((*k)*LDA*sizeof(CBLAS_TEST_ZOMPLEX ) ); + for( i=0; i<*k; i++ ) + for( j=0; j<*n; j++ ) { + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + } + } + LDC = *n+1; + C=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDC*sizeof(CBLAS_TEST_ZOMPLEX ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) { + C[i*LDC+j].real=c[j*(*ldc)+i].real; + C[i*LDC+j].imag=c[j*(*ldc)+i].imag; + } + cblas_zherk(CblasRowMajor, uplo, trans, *n, *k, *alpha, A, LDA, *beta, + C, LDC ); + for( j=0; j<*n; j++ ) + for( i=0; i<*n; i++ ) { + c[j*(*ldc)+i].real=C[i*LDC+j].real; + c[j*(*ldc)+i].imag=C[i*LDC+j].imag; + } + free(A); + free(C); + } + else if (*order == TEST_COL_MJR) + cblas_zherk(CblasColMajor, uplo, trans, *n, *k, *alpha, a, *lda, *beta, + c, *ldc ); + else + cblas_zherk(UNDEFINED, uplo, trans, *n, *k, *alpha, a, *lda, *beta, + c, *ldc ); +} + +void F77_zsyrk(int *order, char *uplow, char *transp, int *n, int *k, + CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda, + CBLAS_TEST_ZOMPLEX *beta, CBLAS_TEST_ZOMPLEX *c, int *ldc ) { + + int i,j,LDA,LDC; + CBLAS_TEST_ZOMPLEX *A, *C; + enum CBLAS_UPLO uplo; + enum CBLAS_TRANSPOSE trans; + + get_uplo_type(uplow,&uplo); + get_transpose_type(transp,&trans); + + if (*order == TEST_ROW_MJR) { + if (trans == CblasNoTrans) { + LDA = *k+1; + A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX)); + for( i=0; i<*n; i++ ) + for( j=0; j<*k; j++ ) { + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + } + } + else{ + LDA = *n+1; + A=(CBLAS_TEST_ZOMPLEX* )malloc((*k)*LDA*sizeof(CBLAS_TEST_ZOMPLEX ) ); + for( i=0; i<*k; i++ ) + for( j=0; j<*n; j++ ) { + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + } + } + LDC = *n+1; + C=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDC*sizeof(CBLAS_TEST_ZOMPLEX ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) { + C[i*LDC+j].real=c[j*(*ldc)+i].real; + C[i*LDC+j].imag=c[j*(*ldc)+i].imag; + } + cblas_zsyrk(CblasRowMajor, uplo, trans, *n, *k, alpha, A, LDA, beta, + C, LDC ); + for( j=0; j<*n; j++ ) + for( i=0; i<*n; i++ ) { + c[j*(*ldc)+i].real=C[i*LDC+j].real; + c[j*(*ldc)+i].imag=C[i*LDC+j].imag; + } + free(A); + free(C); + } + else if (*order == TEST_COL_MJR) + cblas_zsyrk(CblasColMajor, uplo, trans, *n, *k, alpha, a, *lda, beta, + c, *ldc ); + else + cblas_zsyrk(UNDEFINED, uplo, trans, *n, *k, alpha, a, *lda, beta, + c, *ldc ); +} +void F77_zher2k(int *order, char *uplow, char *transp, int *n, int *k, + CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda, + CBLAS_TEST_ZOMPLEX *b, int *ldb, double *beta, + CBLAS_TEST_ZOMPLEX *c, int *ldc ) { + int i,j,LDA,LDB,LDC; + CBLAS_TEST_ZOMPLEX *A, *B, *C; + enum CBLAS_UPLO uplo; + enum CBLAS_TRANSPOSE trans; + + get_uplo_type(uplow,&uplo); + get_transpose_type(transp,&trans); + + if (*order == TEST_ROW_MJR) { + if (trans == CblasNoTrans) { + LDA = *k+1; + LDB = *k+1; + A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX )); + B=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDB*sizeof(CBLAS_TEST_ZOMPLEX )); + for( i=0; i<*n; i++ ) + for( j=0; j<*k; j++ ) { + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + B[i*LDB+j].real=b[j*(*ldb)+i].real; + B[i*LDB+j].imag=b[j*(*ldb)+i].imag; + } + } + else { + LDA = *n+1; + LDB = *n+1; + A=(CBLAS_TEST_ZOMPLEX* )malloc( LDA*(*k)*sizeof(CBLAS_TEST_ZOMPLEX ) ); + B=(CBLAS_TEST_ZOMPLEX* )malloc( LDB*(*k)*sizeof(CBLAS_TEST_ZOMPLEX ) ); + for( i=0; i<*k; i++ ) + for( j=0; j<*n; j++ ){ + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + B[i*LDB+j].real=b[j*(*ldb)+i].real; + B[i*LDB+j].imag=b[j*(*ldb)+i].imag; + } + } + LDC = *n+1; + C=(CBLAS_TEST_ZOMPLEX* )malloc( (*n)*LDC*sizeof(CBLAS_TEST_ZOMPLEX ) ); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) { + C[i*LDC+j].real=c[j*(*ldc)+i].real; + C[i*LDC+j].imag=c[j*(*ldc)+i].imag; + } + cblas_zher2k(CblasRowMajor, uplo, trans, *n, *k, alpha, A, LDA, + B, LDB, *beta, C, LDC ); + for( j=0; j<*n; j++ ) + for( i=0; i<*n; i++ ) { + c[j*(*ldc)+i].real=C[i*LDC+j].real; + c[j*(*ldc)+i].imag=C[i*LDC+j].imag; + } + free(A); + free(B); + free(C); + } + else if (*order == TEST_COL_MJR) + cblas_zher2k(CblasColMajor, uplo, trans, *n, *k, alpha, a, *lda, + b, *ldb, *beta, c, *ldc ); + else + cblas_zher2k(UNDEFINED, uplo, trans, *n, *k, alpha, a, *lda, + b, *ldb, *beta, c, *ldc ); +} +void F77_zsyr2k(int *order, char *uplow, char *transp, int *n, int *k, + CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, int *lda, + CBLAS_TEST_ZOMPLEX *b, int *ldb, CBLAS_TEST_ZOMPLEX *beta, + CBLAS_TEST_ZOMPLEX *c, int *ldc ) { + int i,j,LDA,LDB,LDC; + CBLAS_TEST_ZOMPLEX *A, *B, *C; + enum CBLAS_UPLO uplo; + enum CBLAS_TRANSPOSE trans; + + get_uplo_type(uplow,&uplo); + get_transpose_type(transp,&trans); + + if (*order == TEST_ROW_MJR) { + if (trans == CblasNoTrans) { + LDA = *k+1; + LDB = *k+1; + A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX)); + B=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDB*sizeof(CBLAS_TEST_ZOMPLEX)); + for( i=0; i<*n; i++ ) + for( j=0; j<*k; j++ ) { + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + B[i*LDB+j].real=b[j*(*ldb)+i].real; + B[i*LDB+j].imag=b[j*(*ldb)+i].imag; + } + } + else { + LDA = *n+1; + LDB = *n+1; + A=(CBLAS_TEST_ZOMPLEX* )malloc(LDA*(*k)*sizeof(CBLAS_TEST_ZOMPLEX)); + B=(CBLAS_TEST_ZOMPLEX* )malloc(LDB*(*k)*sizeof(CBLAS_TEST_ZOMPLEX)); + for( i=0; i<*k; i++ ) + for( j=0; j<*n; j++ ){ + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + B[i*LDB+j].real=b[j*(*ldb)+i].real; + B[i*LDB+j].imag=b[j*(*ldb)+i].imag; + } + } + LDC = *n+1; + C=(CBLAS_TEST_ZOMPLEX* )malloc( (*n)*LDC*sizeof(CBLAS_TEST_ZOMPLEX)); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) { + C[i*LDC+j].real=c[j*(*ldc)+i].real; + C[i*LDC+j].imag=c[j*(*ldc)+i].imag; + } + cblas_zsyr2k(CblasRowMajor, uplo, trans, *n, *k, alpha, A, LDA, + B, LDB, beta, C, LDC ); + for( j=0; j<*n; j++ ) + for( i=0; i<*n; i++ ) { + c[j*(*ldc)+i].real=C[i*LDC+j].real; + c[j*(*ldc)+i].imag=C[i*LDC+j].imag; + } + free(A); + free(B); + free(C); + } + else if (*order == TEST_COL_MJR) + cblas_zsyr2k(CblasColMajor, uplo, trans, *n, *k, alpha, a, *lda, + b, *ldb, beta, c, *ldc ); + else + cblas_zsyr2k(UNDEFINED, uplo, trans, *n, *k, alpha, a, *lda, + b, *ldb, beta, c, *ldc ); +} +void F77_ztrmm(int *order, char *rtlf, char *uplow, char *transp, char *diagn, + int *m, int *n, CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, + int *lda, CBLAS_TEST_ZOMPLEX *b, int *ldb) { + int i,j,LDA,LDB; + CBLAS_TEST_ZOMPLEX *A, *B; + enum CBLAS_SIDE side; + enum CBLAS_DIAG diag; + enum CBLAS_UPLO uplo; + enum CBLAS_TRANSPOSE trans; + + get_uplo_type(uplow,&uplo); + get_transpose_type(transp,&trans); + get_diag_type(diagn,&diag); + get_side_type(rtlf,&side); + + if (*order == TEST_ROW_MJR) { + if (side == CblasLeft) { + LDA = *m+1; + A=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDA*sizeof(CBLAS_TEST_ZOMPLEX)); + for( i=0; i<*m; i++ ) + for( j=0; j<*m; j++ ) { + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + } + } + else{ + LDA = *n+1; + A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX)); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) { + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + } + } + LDB = *n+1; + B=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDB*sizeof(CBLAS_TEST_ZOMPLEX)); + for( i=0; i<*m; i++ ) + for( j=0; j<*n; j++ ) { + B[i*LDB+j].real=b[j*(*ldb)+i].real; + B[i*LDB+j].imag=b[j*(*ldb)+i].imag; + } + cblas_ztrmm(CblasRowMajor, side, uplo, trans, diag, *m, *n, alpha, + A, LDA, B, LDB ); + for( j=0; j<*n; j++ ) + for( i=0; i<*m; i++ ) { + b[j*(*ldb)+i].real=B[i*LDB+j].real; + b[j*(*ldb)+i].imag=B[i*LDB+j].imag; + } + free(A); + free(B); + } + else if (*order == TEST_COL_MJR) + cblas_ztrmm(CblasColMajor, side, uplo, trans, diag, *m, *n, alpha, + a, *lda, b, *ldb); + else + cblas_ztrmm(UNDEFINED, side, uplo, trans, diag, *m, *n, alpha, + a, *lda, b, *ldb); +} + +void F77_ztrsm(int *order, char *rtlf, char *uplow, char *transp, char *diagn, + int *m, int *n, CBLAS_TEST_ZOMPLEX *alpha, CBLAS_TEST_ZOMPLEX *a, + int *lda, CBLAS_TEST_ZOMPLEX *b, int *ldb) { + int i,j,LDA,LDB; + CBLAS_TEST_ZOMPLEX *A, *B; + enum CBLAS_SIDE side; + enum CBLAS_DIAG diag; + enum CBLAS_UPLO uplo; + enum CBLAS_TRANSPOSE trans; + + get_uplo_type(uplow,&uplo); + get_transpose_type(transp,&trans); + get_diag_type(diagn,&diag); + get_side_type(rtlf,&side); + + if (*order == TEST_ROW_MJR) { + if (side == CblasLeft) { + LDA = *m+1; + A=(CBLAS_TEST_ZOMPLEX* )malloc( (*m)*LDA*sizeof(CBLAS_TEST_ZOMPLEX ) ); + for( i=0; i<*m; i++ ) + for( j=0; j<*m; j++ ) { + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + } + } + else{ + LDA = *n+1; + A=(CBLAS_TEST_ZOMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_ZOMPLEX)); + for( i=0; i<*n; i++ ) + for( j=0; j<*n; j++ ) { + A[i*LDA+j].real=a[j*(*lda)+i].real; + A[i*LDA+j].imag=a[j*(*lda)+i].imag; + } + } + LDB = *n+1; + B=(CBLAS_TEST_ZOMPLEX* )malloc((*m)*LDB*sizeof(CBLAS_TEST_ZOMPLEX)); + for( i=0; i<*m; i++ ) + for( j=0; j<*n; j++ ) { + B[i*LDB+j].real=b[j*(*ldb)+i].real; + B[i*LDB+j].imag=b[j*(*ldb)+i].imag; + } + cblas_ztrsm(CblasRowMajor, side, uplo, trans, diag, *m, *n, alpha, + A, LDA, B, LDB ); + for( j=0; j<*n; j++ ) + for( i=0; i<*m; i++ ) { + b[j*(*ldb)+i].real=B[i*LDB+j].real; + b[j*(*ldb)+i].imag=B[i*LDB+j].imag; + } + free(A); + free(B); + } + else if (*order == TEST_COL_MJR) + cblas_ztrsm(CblasColMajor, side, uplo, trans, diag, *m, *n, alpha, + a, *lda, b, *ldb); + else + cblas_ztrsm(UNDEFINED, side, uplo, trans, diag, *m, *n, alpha, + a, *lda, b, *ldb); +} diff --git a/CBLAS/testing/c_zblat1.f b/CBLAS/testing/c_zblat1.f new file mode 100644 index 000000000..03753e782 --- /dev/null +++ b/CBLAS/testing/c_zblat1.f @@ -0,0 +1,682 @@ + PROGRAM ZCBLAT1 +* Test program for the COMPLEX*16 Level 1 CBLAS. +* Based upon the original CBLAS test routine together with: +* F06GAF Example Program Text +* .. Parameters .. + INTEGER NOUT + PARAMETER (NOUT=6) +* .. Scalars in Common .. + INTEGER ICASE, INCX, INCY, MODE, N + LOGICAL PASS +* .. Local Scalars .. + DOUBLE PRECISION SFAC + INTEGER IC +* .. External Subroutines .. + EXTERNAL CHECK1, CHECK2, HEADER +* .. Common blocks .. + COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS +* .. Data statements .. + DATA SFAC/9.765625D-4/ +* .. Executable Statements .. + WRITE (NOUT,99999) + DO 20 IC = 1, 10 + ICASE = IC + CALL HEADER +* +* Initialize PASS, INCX, INCY, and MODE for a new case. +* The value 9999 for INCX, INCY or MODE will appear in the +* detailed output, if any, for cases that do not involve +* these parameters. +* + PASS = .TRUE. + INCX = 9999 + INCY = 9999 + MODE = 9999 + IF (ICASE.LE.5) THEN + CALL CHECK2(SFAC) + ELSE IF (ICASE.GE.6) THEN + CALL CHECK1(SFAC) + END IF +* -- Print + IF (PASS) WRITE (NOUT,99998) + 20 CONTINUE + STOP +* +99999 FORMAT (' Complex CBLAS Test Program Results',/1X) +99998 FORMAT (' ----- PASS -----') + END + SUBROUTINE HEADER +* .. Parameters .. + INTEGER NOUT + PARAMETER (NOUT=6) +* .. Scalars in Common .. + INTEGER ICASE, INCX, INCY, MODE, N + LOGICAL PASS +* .. Local Arrays .. + CHARACTER*15 L(10) +* .. Common blocks .. + COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS +* .. Data statements .. + DATA L(1)/'CBLAS_ZDOTC'/ + DATA L(2)/'CBLAS_ZDOTU'/ + DATA L(3)/'CBLAS_ZAXPY'/ + DATA L(4)/'CBLAS_ZCOPY'/ + DATA L(5)/'CBLAS_ZSWAP'/ + DATA L(6)/'CBLAS_DZNRM2'/ + DATA L(7)/'CBLAS_DZASUM'/ + DATA L(8)/'CBLAS_ZSCAL'/ + DATA L(9)/'CBLAS_ZDSCAL'/ + DATA L(10)/'CBLAS_IZAMAX'/ +* .. Executable Statements .. + WRITE (NOUT,99999) ICASE, L(ICASE) + RETURN +* +99999 FORMAT (/' Test of subprogram number',I3,9X,A15) + END + SUBROUTINE CHECK1(SFAC) +* .. Parameters .. + INTEGER NOUT + PARAMETER (NOUT=6) +* .. Scalar Arguments .. + DOUBLE PRECISION SFAC +* .. Scalars in Common .. + INTEGER ICASE, INCX, INCY, MODE, N + LOGICAL PASS +* .. Local Scalars .. + COMPLEX*16 CA + DOUBLE PRECISION SA + INTEGER I, J, LEN, NP1 +* .. Local Arrays .. + COMPLEX*16 CTRUE5(8,5,2), CTRUE6(8,5,2), CV(8,5,2), CX(8), + + MWPCS(5), MWPCT(5) + DOUBLE PRECISION STRUE2(5), STRUE4(5) + INTEGER ITRUE3(5) +* .. External Functions .. + DOUBLE PRECISION DZASUMTEST, DZNRM2TEST + INTEGER IZAMAXTEST + EXTERNAL DZASUMTEST, DZNRM2TEST, IZAMAXTEST +* .. External Subroutines .. + EXTERNAL ZSCALTEST, ZDSCALTEST, CTEST, ITEST1, STEST1 +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. Common blocks .. + COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS +* .. Data statements .. + DATA SA, CA/0.3D0, (0.4D0,-0.7D0)/ + DATA ((CV(I,J,1),I=1,8),J=1,5)/(0.1D0,0.1D0), + + (1.0D0,2.0D0), (1.0D0,2.0D0), (1.0D0,2.0D0), + + (1.0D0,2.0D0), (1.0D0,2.0D0), (1.0D0,2.0D0), + + (1.0D0,2.0D0), (0.3D0,-0.4D0), (3.0D0,4.0D0), + + (3.0D0,4.0D0), (3.0D0,4.0D0), (3.0D0,4.0D0), + + (3.0D0,4.0D0), (3.0D0,4.0D0), (3.0D0,4.0D0), + + (0.1D0,-0.3D0), (0.5D0,-0.1D0), (5.0D0,6.0D0), + + (5.0D0,6.0D0), (5.0D0,6.0D0), (5.0D0,6.0D0), + + (5.0D0,6.0D0), (5.0D0,6.0D0), (0.1D0,0.1D0), + + (-0.6D0,0.1D0), (0.1D0,-0.3D0), (7.0D0,8.0D0), + + (7.0D0,8.0D0), (7.0D0,8.0D0), (7.0D0,8.0D0), + + (7.0D0,8.0D0), (0.3D0,0.1D0), (0.1D0,0.4D0), + + (0.4D0,0.1D0), (0.1D0,0.2D0), (2.0D0,3.0D0), + + (2.0D0,3.0D0), (2.0D0,3.0D0), (2.0D0,3.0D0)/ + DATA ((CV(I,J,2),I=1,8),J=1,5)/(0.1D0,0.1D0), + + (4.0D0,5.0D0), (4.0D0,5.0D0), (4.0D0,5.0D0), + + (4.0D0,5.0D0), (4.0D0,5.0D0), (4.0D0,5.0D0), + + (4.0D0,5.0D0), (0.3D0,-0.4D0), (6.0D0,7.0D0), + + (6.0D0,7.0D0), (6.0D0,7.0D0), (6.0D0,7.0D0), + + (6.0D0,7.0D0), (6.0D0,7.0D0), (6.0D0,7.0D0), + + (0.1D0,-0.3D0), (8.0D0,9.0D0), (0.5D0,-0.1D0), + + (2.0D0,5.0D0), (2.0D0,5.0D0), (2.0D0,5.0D0), + + (2.0D0,5.0D0), (2.0D0,5.0D0), (0.1D0,0.1D0), + + (3.0D0,6.0D0), (-0.6D0,0.1D0), (4.0D0,7.0D0), + + (0.1D0,-0.3D0), (7.0D0,2.0D0), (7.0D0,2.0D0), + + (7.0D0,2.0D0), (0.3D0,0.1D0), (5.0D0,8.0D0), + + (0.1D0,0.4D0), (6.0D0,9.0D0), (0.4D0,0.1D0), + + (8.0D0,3.0D0), (0.1D0,0.2D0), (9.0D0,4.0D0)/ + DATA STRUE2/0.0D0, 0.5D0, 0.6D0, 0.7D0, 0.7D0/ + DATA STRUE4/0.0D0, 0.7D0, 1.0D0, 1.3D0, 1.7D0/ + DATA ((CTRUE5(I,J,1),I=1,8),J=1,5)/(0.1D0,0.1D0), + + (1.0D0,2.0D0), (1.0D0,2.0D0), (1.0D0,2.0D0), + + (1.0D0,2.0D0), (1.0D0,2.0D0), (1.0D0,2.0D0), + + (1.0D0,2.0D0), (-0.16D0,-0.37D0), (3.0D0,4.0D0), + + (3.0D0,4.0D0), (3.0D0,4.0D0), (3.0D0,4.0D0), + + (3.0D0,4.0D0), (3.0D0,4.0D0), (3.0D0,4.0D0), + + (-0.17D0,-0.19D0), (0.13D0,-0.39D0), + + (5.0D0,6.0D0), (5.0D0,6.0D0), (5.0D0,6.0D0), + + (5.0D0,6.0D0), (5.0D0,6.0D0), (5.0D0,6.0D0), + + (0.11D0,-0.03D0), (-0.17D0,0.46D0), + + (-0.17D0,-0.19D0), (7.0D0,8.0D0), (7.0D0,8.0D0), + + (7.0D0,8.0D0), (7.0D0,8.0D0), (7.0D0,8.0D0), + + (0.19D0,-0.17D0), (0.32D0,0.09D0), + + (0.23D0,-0.24D0), (0.18D0,0.01D0), + + (2.0D0,3.0D0), (2.0D0,3.0D0), (2.0D0,3.0D0), + + (2.0D0,3.0D0)/ + DATA ((CTRUE5(I,J,2),I=1,8),J=1,5)/(0.1D0,0.1D0), + + (4.0D0,5.0D0), (4.0D0,5.0D0), (4.0D0,5.0D0), + + (4.0D0,5.0D0), (4.0D0,5.0D0), (4.0D0,5.0D0), + + (4.0D0,5.0D0), (-0.16D0,-0.37D0), (6.0D0,7.0D0), + + (6.0D0,7.0D0), (6.0D0,7.0D0), (6.0D0,7.0D0), + + (6.0D0,7.0D0), (6.0D0,7.0D0), (6.0D0,7.0D0), + + (-0.17D0,-0.19D0), (8.0D0,9.0D0), + + (0.13D0,-0.39D0), (2.0D0,5.0D0), (2.0D0,5.0D0), + + (2.0D0,5.0D0), (2.0D0,5.0D0), (2.0D0,5.0D0), + + (0.11D0,-0.03D0), (3.0D0,6.0D0), + + (-0.17D0,0.46D0), (4.0D0,7.0D0), + + (-0.17D0,-0.19D0), (7.0D0,2.0D0), (7.0D0,2.0D0), + + (7.0D0,2.0D0), (0.19D0,-0.17D0), (5.0D0,8.0D0), + + (0.32D0,0.09D0), (6.0D0,9.0D0), + + (0.23D0,-0.24D0), (8.0D0,3.0D0), + + (0.18D0,0.01D0), (9.0D0,4.0D0)/ + DATA ((CTRUE6(I,J,1),I=1,8),J=1,5)/(0.1D0,0.1D0), + + (1.0D0,2.0D0), (1.0D0,2.0D0), (1.0D0,2.0D0), + + (1.0D0,2.0D0), (1.0D0,2.0D0), (1.0D0,2.0D0), + + (1.0D0,2.0D0), (0.09D0,-0.12D0), (3.0D0,4.0D0), + + (3.0D0,4.0D0), (3.0D0,4.0D0), (3.0D0,4.0D0), + + (3.0D0,4.0D0), (3.0D0,4.0D0), (3.0D0,4.0D0), + + (0.03D0,-0.09D0), (0.15D0,-0.03D0), + + (5.0D0,6.0D0), (5.0D0,6.0D0), (5.0D0,6.0D0), + + (5.0D0,6.0D0), (5.0D0,6.0D0), (5.0D0,6.0D0), + + (0.03D0,0.03D0), (-0.18D0,0.03D0), + + (0.03D0,-0.09D0), (7.0D0,8.0D0), (7.0D0,8.0D0), + + (7.0D0,8.0D0), (7.0D0,8.0D0), (7.0D0,8.0D0), + + (0.09D0,0.03D0), (0.03D0,0.12D0), + + (0.12D0,0.03D0), (0.03D0,0.06D0), (2.0D0,3.0D0), + + (2.0D0,3.0D0), (2.0D0,3.0D0), (2.0D0,3.0D0)/ + DATA ((CTRUE6(I,J,2),I=1,8),J=1,5)/(0.1D0,0.1D0), + + (4.0D0,5.0D0), (4.0D0,5.0D0), (4.0D0,5.0D0), + + (4.0D0,5.0D0), (4.0D0,5.0D0), (4.0D0,5.0D0), + + (4.0D0,5.0D0), (0.09D0,-0.12D0), (6.0D0,7.0D0), + + (6.0D0,7.0D0), (6.0D0,7.0D0), (6.0D0,7.0D0), + + (6.0D0,7.0D0), (6.0D0,7.0D0), (6.0D0,7.0D0), + + (0.03D0,-0.09D0), (8.0D0,9.0D0), + + (0.15D0,-0.03D0), (2.0D0,5.0D0), (2.0D0,5.0D0), + + (2.0D0,5.0D0), (2.0D0,5.0D0), (2.0D0,5.0D0), + + (0.03D0,0.03D0), (3.0D0,6.0D0), + + (-0.18D0,0.03D0), (4.0D0,7.0D0), + + (0.03D0,-0.09D0), (7.0D0,2.0D0), (7.0D0,2.0D0), + + (7.0D0,2.0D0), (0.09D0,0.03D0), (5.0D0,8.0D0), + + (0.03D0,0.12D0), (6.0D0,9.0D0), (0.12D0,0.03D0), + + (8.0D0,3.0D0), (0.03D0,0.06D0), (9.0D0,4.0D0)/ + DATA ITRUE3/0, 1, 2, 2, 2/ +* .. Executable Statements .. + DO 60 INCX = 1, 2 + DO 40 NP1 = 1, 5 + N = NP1 - 1 + LEN = 2*MAX(N,1) +* .. Set vector arguments .. + DO 20 I = 1, LEN + CX(I) = CV(I,NP1,INCX) + 20 CONTINUE + IF (ICASE.EQ.6) THEN +* .. DZNRM2TEST .. + CALL STEST1(DZNRM2TEST(N,CX,INCX),STRUE2(NP1), + + STRUE2(NP1),SFAC) + ELSE IF (ICASE.EQ.7) THEN +* .. DZASUMTEST .. + CALL STEST1(DZASUMTEST(N,CX,INCX),STRUE4(NP1), + + STRUE4(NP1),SFAC) + ELSE IF (ICASE.EQ.8) THEN +* .. ZSCALTEST .. + CALL ZSCALTEST(N,CA,CX,INCX) + CALL CTEST(LEN,CX,CTRUE5(1,NP1,INCX),CTRUE5(1,NP1,INCX), + + SFAC) + ELSE IF (ICASE.EQ.9) THEN +* .. ZDSCALTEST .. + CALL ZDSCALTEST(N,SA,CX,INCX) + CALL CTEST(LEN,CX,CTRUE6(1,NP1,INCX),CTRUE6(1,NP1,INCX), + + SFAC) + ELSE IF (ICASE.EQ.10) THEN +* .. IZAMAXTEST .. + CALL ITEST1(IZAMAXTEST(N,CX,INCX),ITRUE3(NP1)) + ELSE + WRITE (NOUT,*) ' Shouldn''t be here in CHECK1' + STOP + END IF +* + 40 CONTINUE + 60 CONTINUE +* + INCX = 1 + IF (ICASE.EQ.8) THEN +* ZSCALTEST +* Add a test for alpha equal to zero. + CA = (0.0D0,0.0D0) + DO 80 I = 1, 5 + MWPCT(I) = (0.0D0,0.0D0) + MWPCS(I) = (1.0D0,1.0D0) + 80 CONTINUE + CALL ZSCALTEST(5,CA,CX,INCX) + CALL CTEST(5,CX,MWPCT,MWPCS,SFAC) + ELSE IF (ICASE.EQ.9) THEN +* ZDSCALTEST +* Add a test for alpha equal to zero. + SA = 0.0D0 + DO 100 I = 1, 5 + MWPCT(I) = (0.0D0,0.0D0) + MWPCS(I) = (1.0D0,1.0D0) + 100 CONTINUE + CALL ZDSCALTEST(5,SA,CX,INCX) + CALL CTEST(5,CX,MWPCT,MWPCS,SFAC) +* Add a test for alpha equal to one. + SA = 1.0D0 + DO 120 I = 1, 5 + MWPCT(I) = CX(I) + MWPCS(I) = CX(I) + 120 CONTINUE + CALL ZDSCALTEST(5,SA,CX,INCX) + CALL CTEST(5,CX,MWPCT,MWPCS,SFAC) +* Add a test for alpha equal to minus one. + SA = -1.0D0 + DO 140 I = 1, 5 + MWPCT(I) = -CX(I) + MWPCS(I) = -CX(I) + 140 CONTINUE + CALL ZDSCALTEST(5,SA,CX,INCX) + CALL CTEST(5,CX,MWPCT,MWPCS,SFAC) + END IF + RETURN + END + SUBROUTINE CHECK2(SFAC) +* .. Parameters .. + INTEGER NOUT + PARAMETER (NOUT=6) +* .. Scalar Arguments .. + DOUBLE PRECISION SFAC +* .. Scalars in Common .. + INTEGER ICASE, INCX, INCY, MODE, N + LOGICAL PASS +* .. Local Scalars .. + COMPLEX*16 CA,ZTEMP + INTEGER I, J, KI, KN, KSIZE, LENX, LENY, MX, MY +* .. Local Arrays .. + COMPLEX*16 CDOT(1), CSIZE1(4), CSIZE2(7,2), CSIZE3(14), + + CT10X(7,4,4), CT10Y(7,4,4), CT6(4,4), CT7(4,4), + + CT8(7,4,4), CX(7), CX1(7), CY(7), CY1(7) + INTEGER INCXS(4), INCYS(4), LENS(4,2), NS(4) +* .. External Functions .. + EXTERNAL ZDOTCTEST, ZDOTUTEST +* .. External Subroutines .. + EXTERNAL ZAXPYTEST, ZCOPYTEST, ZSWAPTEST, CTEST +* .. Intrinsic Functions .. + INTRINSIC ABS, MIN +* .. Common blocks .. + COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS +* .. Data statements .. + DATA CA/(0.4D0,-0.7D0)/ + DATA INCXS/1, 2, -2, -1/ + DATA INCYS/1, -2, 1, -2/ + DATA LENS/1, 1, 2, 4, 1, 1, 3, 7/ + DATA NS/0, 1, 2, 4/ + DATA CX1/(0.7D0,-0.8D0), (-0.4D0,-0.7D0), + + (-0.1D0,-0.9D0), (0.2D0,-0.8D0), + + (-0.9D0,-0.4D0), (0.1D0,0.4D0), (-0.6D0,0.6D0)/ + DATA CY1/(0.6D0,-0.6D0), (-0.9D0,0.5D0), + + (0.7D0,-0.6D0), (0.1D0,-0.5D0), (-0.1D0,-0.2D0), + + (-0.5D0,-0.3D0), (0.8D0,-0.7D0)/ + DATA ((CT8(I,J,1),I=1,7),J=1,4)/(0.6D0,-0.6D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.32D0,-1.41D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.32D0,-1.41D0), + + (-1.55D0,0.5D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.32D0,-1.41D0), (-1.55D0,0.5D0), + + (0.03D0,-0.89D0), (-0.38D0,-0.96D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0)/ + DATA ((CT8(I,J,2),I=1,7),J=1,4)/(0.6D0,-0.6D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.32D0,-1.41D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (-0.07D0,-0.89D0), + + (-0.9D0,0.5D0), (0.42D0,-1.41D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.78D0,0.06D0), (-0.9D0,0.5D0), + + (0.06D0,-0.13D0), (0.1D0,-0.5D0), + + (-0.77D0,-0.49D0), (-0.5D0,-0.3D0), + + (0.52D0,-1.51D0)/ + DATA ((CT8(I,J,3),I=1,7),J=1,4)/(0.6D0,-0.6D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.32D0,-1.41D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (-0.07D0,-0.89D0), + + (-1.18D0,-0.31D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.78D0,0.06D0), (-1.54D0,0.97D0), + + (0.03D0,-0.89D0), (-0.18D0,-1.31D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0)/ + DATA ((CT8(I,J,4),I=1,7),J=1,4)/(0.6D0,-0.6D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.32D0,-1.41D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.32D0,-1.41D0), (-0.9D0,0.5D0), + + (0.05D0,-0.6D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.32D0,-1.41D0), + + (-0.9D0,0.5D0), (0.05D0,-0.6D0), (0.1D0,-0.5D0), + + (-0.77D0,-0.49D0), (-0.5D0,-0.3D0), + + (0.32D0,-1.16D0)/ + DATA CT7/(0.0D0,0.0D0), (-0.06D0,-0.90D0), + + (0.65D0,-0.47D0), (-0.34D0,-1.22D0), + + (0.0D0,0.0D0), (-0.06D0,-0.90D0), + + (-0.59D0,-1.46D0), (-1.04D0,-0.04D0), + + (0.0D0,0.0D0), (-0.06D0,-0.90D0), + + (-0.83D0,0.59D0), (0.07D0,-0.37D0), + + (0.0D0,0.0D0), (-0.06D0,-0.90D0), + + (-0.76D0,-1.15D0), (-1.33D0,-1.82D0)/ + DATA CT6/(0.0D0,0.0D0), (0.90D0,0.06D0), + + (0.91D0,-0.77D0), (1.80D0,-0.10D0), + + (0.0D0,0.0D0), (0.90D0,0.06D0), (1.45D0,0.74D0), + + (0.20D0,0.90D0), (0.0D0,0.0D0), (0.90D0,0.06D0), + + (-0.55D0,0.23D0), (0.83D0,-0.39D0), + + (0.0D0,0.0D0), (0.90D0,0.06D0), (1.04D0,0.79D0), + + (1.95D0,1.22D0)/ + DATA ((CT10X(I,J,1),I=1,7),J=1,4)/(0.7D0,-0.8D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.6D0,-0.6D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.6D0,-0.6D0), (-0.9D0,0.5D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.6D0,-0.6D0), + + (-0.9D0,0.5D0), (0.7D0,-0.6D0), (0.1D0,-0.5D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0)/ + DATA ((CT10X(I,J,2),I=1,7),J=1,4)/(0.7D0,-0.8D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.6D0,-0.6D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.7D0,-0.6D0), (-0.4D0,-0.7D0), + + (0.6D0,-0.6D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.8D0,-0.7D0), + + (-0.4D0,-0.7D0), (-0.1D0,-0.2D0), + + (0.2D0,-0.8D0), (0.7D0,-0.6D0), (0.1D0,0.4D0), + + (0.6D0,-0.6D0)/ + DATA ((CT10X(I,J,3),I=1,7),J=1,4)/(0.7D0,-0.8D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.6D0,-0.6D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (-0.9D0,0.5D0), (-0.4D0,-0.7D0), + + (0.6D0,-0.6D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.1D0,-0.5D0), + + (-0.4D0,-0.7D0), (0.7D0,-0.6D0), (0.2D0,-0.8D0), + + (-0.9D0,0.5D0), (0.1D0,0.4D0), (0.6D0,-0.6D0)/ + DATA ((CT10X(I,J,4),I=1,7),J=1,4)/(0.7D0,-0.8D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.6D0,-0.6D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.6D0,-0.6D0), (0.7D0,-0.6D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.6D0,-0.6D0), + + (0.7D0,-0.6D0), (-0.1D0,-0.2D0), (0.8D0,-0.7D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0)/ + DATA ((CT10Y(I,J,1),I=1,7),J=1,4)/(0.6D0,-0.6D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.7D0,-0.8D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.7D0,-0.8D0), (-0.4D0,-0.7D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.7D0,-0.8D0), + + (-0.4D0,-0.7D0), (-0.1D0,-0.9D0), + + (0.2D0,-0.8D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0)/ + DATA ((CT10Y(I,J,2),I=1,7),J=1,4)/(0.6D0,-0.6D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.7D0,-0.8D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (-0.1D0,-0.9D0), (-0.9D0,0.5D0), + + (0.7D0,-0.8D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (-0.6D0,0.6D0), + + (-0.9D0,0.5D0), (-0.9D0,-0.4D0), (0.1D0,-0.5D0), + + (-0.1D0,-0.9D0), (-0.5D0,-0.3D0), + + (0.7D0,-0.8D0)/ + DATA ((CT10Y(I,J,3),I=1,7),J=1,4)/(0.6D0,-0.6D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.7D0,-0.8D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (-0.1D0,-0.9D0), (0.7D0,-0.8D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (-0.6D0,0.6D0), + + (-0.9D0,-0.4D0), (-0.1D0,-0.9D0), + + (0.7D0,-0.8D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0)/ + DATA ((CT10Y(I,J,4),I=1,7),J=1,4)/(0.6D0,-0.6D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.7D0,-0.8D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.7D0,-0.8D0), (-0.9D0,0.5D0), + + (-0.4D0,-0.7D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.7D0,-0.8D0), + + (-0.9D0,0.5D0), (-0.4D0,-0.7D0), (0.1D0,-0.5D0), + + (-0.1D0,-0.9D0), (-0.5D0,-0.3D0), + + (0.2D0,-0.8D0)/ + DATA CSIZE1/(0.0D0,0.0D0), (0.9D0,0.9D0), + + (1.63D0,1.73D0), (2.90D0,2.78D0)/ + DATA CSIZE3/(0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (1.17D0,1.17D0), + + (1.17D0,1.17D0), (1.17D0,1.17D0), + + (1.17D0,1.17D0), (1.17D0,1.17D0), + + (1.17D0,1.17D0), (1.17D0,1.17D0)/ + DATA CSIZE2/(0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0), + + (0.0D0,0.0D0), (0.0D0,0.0D0), (1.54D0,1.54D0), + + (1.54D0,1.54D0), (1.54D0,1.54D0), + + (1.54D0,1.54D0), (1.54D0,1.54D0), + + (1.54D0,1.54D0), (1.54D0,1.54D0)/ +* .. Executable Statements .. + DO 60 KI = 1, 4 + INCX = INCXS(KI) + INCY = INCYS(KI) + MX = ABS(INCX) + MY = ABS(INCY) +* + DO 40 KN = 1, 4 + N = NS(KN) + KSIZE = MIN(2,KN) + LENX = LENS(KN,MX) + LENY = LENS(KN,MY) +* .. initialize all argument arrays .. + DO 20 I = 1, 7 + CX(I) = CX1(I) + CY(I) = CY1(I) + 20 CONTINUE + IF (ICASE.EQ.1) THEN +* .. ZDOTCTEST .. + CALL ZDOTCTEST(N,CX,INCX,CY,INCY,ZTEMP) + CDOT(1) = ZTEMP + CALL CTEST(1,CDOT,CT6(KN,KI),CSIZE1(KN),SFAC) + ELSE IF (ICASE.EQ.2) THEN +* .. ZDOTUTEST .. + CALL ZDOTUTEST(N,CX,INCX,CY,INCY,ZTEMP) + CDOT(1) = ZTEMP + CALL CTEST(1,CDOT,CT7(KN,KI),CSIZE1(KN),SFAC) + ELSE IF (ICASE.EQ.3) THEN +* .. ZAXPYTEST .. + CALL ZAXPYTEST(N,CA,CX,INCX,CY,INCY) + CALL CTEST(LENY,CY,CT8(1,KN,KI),CSIZE2(1,KSIZE),SFAC) + ELSE IF (ICASE.EQ.4) THEN +* .. ZCOPYTEST .. + CALL ZCOPYTEST(N,CX,INCX,CY,INCY) + CALL CTEST(LENY,CY,CT10Y(1,KN,KI),CSIZE3,1.0D0) + ELSE IF (ICASE.EQ.5) THEN +* .. ZSWAPTEST .. + CALL ZSWAPTEST(N,CX,INCX,CY,INCY) + CALL CTEST(LENX,CX,CT10X(1,KN,KI),CSIZE3,1.0D0) + CALL CTEST(LENY,CY,CT10Y(1,KN,KI),CSIZE3,1.0D0) + ELSE + WRITE (NOUT,*) ' Shouldn''t be here in CHECK2' + STOP + END IF +* + 40 CONTINUE + 60 CONTINUE + RETURN + END + SUBROUTINE STEST(LEN,SCOMP,STRUE,SSIZE,SFAC) +* ********************************* STEST ************************** +* +* THIS SUBR COMPARES ARRAYS SCOMP() AND STRUE() OF LENGTH LEN TO +* SEE IF THE TERM BY TERM DIFFERENCES, MULTIPLIED BY SFAC, ARE +* NEGLIGIBLE. +* +* C. L. LAWSON, JPL, 1974 DEC 10 +* +* .. Parameters .. + INTEGER NOUT + PARAMETER (NOUT=6) +* .. Scalar Arguments .. + DOUBLE PRECISION SFAC + INTEGER LEN +* .. Array Arguments .. + DOUBLE PRECISION SCOMP(LEN), SSIZE(LEN), STRUE(LEN) +* .. Scalars in Common .. + INTEGER ICASE, INCX, INCY, MODE, N + LOGICAL PASS +* .. Local Scalars .. + DOUBLE PRECISION SD + INTEGER I +* .. External Functions .. + DOUBLE PRECISION SDIFF + EXTERNAL SDIFF +* .. Intrinsic Functions .. + INTRINSIC ABS +* .. Common blocks .. + COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS +* .. Executable Statements .. +* + DO 40 I = 1, LEN + SD = SCOMP(I) - STRUE(I) + IF (SDIFF(ABS(SSIZE(I))+ABS(SFAC*SD),ABS(SSIZE(I))).EQ.0.0D0) + + GO TO 40 +* +* HERE SCOMP(I) IS NOT CLOSE TO STRUE(I). +* + IF ( .NOT. PASS) GO TO 20 +* PRINT FAIL MESSAGE AND HEADER. + PASS = .FALSE. + WRITE (NOUT,99999) + WRITE (NOUT,99998) + 20 WRITE (NOUT,99997) ICASE, N, INCX, INCY, MODE, I, SCOMP(I), + + STRUE(I), SD, SSIZE(I) + 40 CONTINUE + RETURN +* +99999 FORMAT (' FAIL') +99998 FORMAT (/' CASE N INCX INCY MODE I ', + + ' COMP(I) TRUE(I) DIFFERENCE', + + ' SIZE(I)',/1X) +99997 FORMAT (1X,I4,I3,3I5,I3,2D36.8,2D12.4) + END + SUBROUTINE STEST1(SCOMP1,STRUE1,SSIZE,SFAC) +* ************************* STEST1 ***************************** +* +* THIS IS AN INTERFACE SUBROUTINE TO ACCOMODATE THE FORTRAN +* REQUIREMENT THAT WHEN A DUMMY ARGUMENT IS AN ARRAY, THE +* ACTUAL ARGUMENT MUST ALSO BE AN ARRAY OR AN ARRAY ELEMENT. +* +* C.L. LAWSON, JPL, 1978 DEC 6 +* +* .. Scalar Arguments .. + DOUBLE PRECISION SCOMP1, SFAC, STRUE1 +* .. Array Arguments .. + DOUBLE PRECISION SSIZE(*) +* .. Local Arrays .. + DOUBLE PRECISION SCOMP(1), STRUE(1) +* .. External Subroutines .. + EXTERNAL STEST +* .. Executable Statements .. +* + SCOMP(1) = SCOMP1 + STRUE(1) = STRUE1 + CALL STEST(1,SCOMP,STRUE,SSIZE,SFAC) +* + RETURN + END + DOUBLE PRECISION FUNCTION SDIFF(SA,SB) +* ********************************* SDIFF ************************** +* COMPUTES DIFFERENCE OF TWO NUMBERS. C. L. LAWSON, JPL 1974 FEB 15 +* +* .. Scalar Arguments .. + DOUBLE PRECISION SA, SB +* .. Executable Statements .. + SDIFF = SA - SB + RETURN + END + SUBROUTINE CTEST(LEN,CCOMP,CTRUE,CSIZE,SFAC) +* **************************** CTEST ***************************** +* +* C.L. LAWSON, JPL, 1978 DEC 6 +* +* .. Scalar Arguments .. + DOUBLE PRECISION SFAC + INTEGER LEN +* .. Array Arguments .. + COMPLEX*16 CCOMP(LEN), CSIZE(LEN), CTRUE(LEN) +* .. Local Scalars .. + INTEGER I +* .. Local Arrays .. + DOUBLE PRECISION SCOMP(20), SSIZE(20), STRUE(20) +* .. External Subroutines .. + EXTERNAL STEST +* .. Intrinsic Functions .. + INTRINSIC DIMAG, DBLE +* .. Executable Statements .. + DO 20 I = 1, LEN + SCOMP(2*I-1) = DBLE(CCOMP(I)) + SCOMP(2*I) = DIMAG(CCOMP(I)) + STRUE(2*I-1) = DBLE(CTRUE(I)) + STRUE(2*I) = DIMAG(CTRUE(I)) + SSIZE(2*I-1) = DBLE(CSIZE(I)) + SSIZE(2*I) = DIMAG(CSIZE(I)) + 20 CONTINUE +* + CALL STEST(2*LEN,SCOMP,STRUE,SSIZE,SFAC) + RETURN + END + SUBROUTINE ITEST1(ICOMP,ITRUE) +* ********************************* ITEST1 ************************* +* +* THIS SUBROUTINE COMPARES THE VARIABLES ICOMP AND ITRUE FOR +* EQUALITY. +* C. L. LAWSON, JPL, 1974 DEC 10 +* +* .. Parameters .. + INTEGER NOUT + PARAMETER (NOUT=6) +* .. Scalar Arguments .. + INTEGER ICOMP, ITRUE +* .. Scalars in Common .. + INTEGER ICASE, INCX, INCY, MODE, N + LOGICAL PASS +* .. Local Scalars .. + INTEGER ID +* .. Common blocks .. + COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS +* .. Executable Statements .. + IF (ICOMP.EQ.ITRUE) GO TO 40 +* +* HERE ICOMP IS NOT EQUAL TO ITRUE. +* + IF ( .NOT. PASS) GO TO 20 +* PRINT FAIL MESSAGE AND HEADER. + PASS = .FALSE. + WRITE (NOUT,99999) + WRITE (NOUT,99998) + 20 ID = ICOMP - ITRUE + WRITE (NOUT,99997) ICASE, N, INCX, INCY, MODE, ICOMP, ITRUE, ID + 40 CONTINUE + RETURN +* +99999 FORMAT (' FAIL') +99998 FORMAT (/' CASE N INCX INCY MODE ', + + ' COMP TRUE DIFFERENCE', + + /1X) +99997 FORMAT (1X,I4,I3,3I5,2I36,I12) + END diff --git a/CBLAS/testing/c_zblat2.f b/CBLAS/testing/c_zblat2.f new file mode 100644 index 000000000..236088ff3 --- /dev/null +++ b/CBLAS/testing/c_zblat2.f @@ -0,0 +1,2939 @@ + PROGRAM ZBLAT2 +* +* Test program for the COMPLEX*16 Level 2 Blas. +* +* The program must be driven by a short data file. The first 17 records +* of the file are read using list-directed input, the last 17 records +* are read using the format ( A12, L2 ). An annotated example of a data +* file can be obtained by deleting the first 3 characters from the +* following 34 lines: +* 'CBLAT2.SNAP' NAME OF SNAPSHOT OUTPUT FILE +* -1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0) +* F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD. +* F LOGICAL FLAG, T TO STOP ON FAILURES. +* T LOGICAL FLAG, T TO TEST ERROR EXITS. +* 2 0 TO TEST COLUMN-MAJOR, 1 TO TEST ROW-MAJOR, 2 TO TEST BOTH +* 16.0 THRESHOLD VALUE OF TEST RATIO +* 6 NUMBER OF VALUES OF N +* 0 1 2 3 5 9 VALUES OF N +* 4 NUMBER OF VALUES OF K +* 0 1 2 4 VALUES OF K +* 4 NUMBER OF VALUES OF INCX AND INCY +* 1 2 -1 -2 VALUES OF INCX AND INCY +* 3 NUMBER OF VALUES OF ALPHA +* (0.0,0.0) (1.0,0.0) (0.7,-0.9) VALUES OF ALPHA +* 3 NUMBER OF VALUES OF BETA +* (0.0,0.0) (1.0,0.0) (1.3,-1.1) VALUES OF BETA +* cblas_zgemv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_zgbmv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_zhemv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_zhbmv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_zhpmv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_ztrmv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_ztbmv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_ztpmv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_ztrsv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_ztbsv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_ztpsv T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_zgerc T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_zgeru T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_zher T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_zhpr T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_zher2 T PUT F FOR NO TEST. SAME COLUMNS. +* cblas_zhpr2 T PUT F FOR NO TEST. SAME COLUMNS. +* +* See: +* +* Dongarra J. J., Du Croz J. J., Hammarling S. and Hanson R. J.. +* An extended set of Fortran Basic Linear Algebra Subprograms. +* +* Technical Memoranda Nos. 41 (revision 3) and 81, Mathematics +* and Computer Science Division, Argonne National Laboratory, +* 9700 South Cass Avenue, Argonne, Illinois 60439, US. +* +* Or +* +* NAG Technical Reports TR3/87 and TR4/87, Numerical Algorithms +* Group Ltd., NAG Central Office, 256 Banbury Road, Oxford +* OX2 7DE, UK, and Numerical Algorithms Group Inc., 1101 31st +* Street, Suite 100, Downers Grove, Illinois 60515-1263, USA. +* +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + INTEGER NIN, NOUT + PARAMETER ( NIN = 5, NOUT = 6 ) + INTEGER NSUBS + PARAMETER ( NSUBS = 17 ) + COMPLEX*16 ZERO, ONE + PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ), + $ ONE = ( 1.0D0, 0.0D0 ) ) + DOUBLE PRECISION RZERO, RHALF, RONE + PARAMETER ( RZERO = 0.0D0, RHALF = 0.5D0, RONE = 1.0D0 ) + INTEGER NMAX, INCMAX + PARAMETER ( NMAX = 65, INCMAX = 2 ) + INTEGER NINMAX, NIDMAX, NKBMAX, NALMAX, NBEMAX + PARAMETER ( NINMAX = 7, NIDMAX = 9, NKBMAX = 7, + $ NALMAX = 7, NBEMAX = 7 ) +* .. Local Scalars .. + DOUBLE PRECISION EPS, ERR, THRESH + INTEGER I, ISNUM, J, N, NALF, NBET, NIDIM, NINC, NKB, + $ NTRA, LAYOUT + LOGICAL FATAL, LTESTT, REWI, SAME, SFATAL, TRACE, + $ TSTERR, CORDER, RORDER + CHARACTER*1 TRANS + CHARACTER*12 SNAMET + CHARACTER*32 SNAPS +* .. Local Arrays .. + COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), + $ ALF( NALMAX ), AS( NMAX*NMAX ), BET( NBEMAX ), + $ X( NMAX ), XS( NMAX*INCMAX ), + $ XX( NMAX*INCMAX ), Y( NMAX ), + $ YS( NMAX*INCMAX ), YT( NMAX ), + $ YY( NMAX*INCMAX ), Z( 2*NMAX ) + DOUBLE PRECISION G( NMAX ) + INTEGER IDIM( NIDMAX ), INC( NINMAX ), KB( NKBMAX ) + LOGICAL LTEST( NSUBS ) + CHARACTER*12 SNAMES( NSUBS ) +* .. External Functions .. + DOUBLE PRECISION DDIFF + LOGICAL LZE + EXTERNAL DDIFF, LZE +* .. External Subroutines .. + EXTERNAL ZCHK1, ZCHK2, ZCHK3, ZCHK4, ZCHK5, ZCHK6, + $ CZ2CHKE, ZMVCH +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, MIN +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK + CHARACTER*12 SRNAMT +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK + COMMON /SRNAMC/SRNAMT +* .. Data statements .. + DATA SNAMES/'cblas_zgemv ', 'cblas_zgbmv ', + $ 'cblas_zhemv ','cblas_zhbmv ','cblas_zhpmv ', + $ 'cblas_ztrmv ','cblas_ztbmv ','cblas_ztpmv ', + $ 'cblas_ztrsv ','cblas_ztbsv ','cblas_ztpsv ', + $ 'cblas_zgerc ','cblas_zgeru ','cblas_zher ', + $ 'cblas_zhpr ','cblas_zher2 ','cblas_zhpr2 '/ +* .. Executable Statements .. +* + NOUTC = NOUT +* +* Read name and unit number for summary output file and open file. +* + READ( NIN, FMT = * )SNAPS + READ( NIN, FMT = * )NTRA + TRACE = NTRA.GE.0 + IF( TRACE )THEN + OPEN( NTRA, FILE = SNAPS ) + END IF +* Read the flag that directs rewinding of the snapshot file. + READ( NIN, FMT = * )REWI + REWI = REWI.AND.TRACE +* Read the flag that directs stopping on any failure. + READ( NIN, FMT = * )SFATAL +* Read the flag that indicates whether error exits are to be tested. + READ( NIN, FMT = * )TSTERR +* Read the flag that indicates whether row-major data layout to be tested. + READ( NIN, FMT = * )LAYOUT +* Read the threshold value of the test ratio + READ( NIN, FMT = * )THRESH +* +* Read and check the parameter values for the tests. +* +* Values of N + READ( NIN, FMT = * )NIDIM + IF( NIDIM.LT.1.OR.NIDIM.GT.NIDMAX )THEN + WRITE( NOUT, FMT = 9997 )'N', NIDMAX + GO TO 230 + END IF + READ( NIN, FMT = * )( IDIM( I ), I = 1, NIDIM ) + DO 10 I = 1, NIDIM + IF( IDIM( I ).LT.0.OR.IDIM( I ).GT.NMAX )THEN + WRITE( NOUT, FMT = 9996 )NMAX + GO TO 230 + END IF + 10 CONTINUE +* Values of K + READ( NIN, FMT = * )NKB + IF( NKB.LT.1.OR.NKB.GT.NKBMAX )THEN + WRITE( NOUT, FMT = 9997 )'K', NKBMAX + GO TO 230 + END IF + READ( NIN, FMT = * )( KB( I ), I = 1, NKB ) + DO 20 I = 1, NKB + IF( KB( I ).LT.0 )THEN + WRITE( NOUT, FMT = 9995 ) + GO TO 230 + END IF + 20 CONTINUE +* Values of INCX and INCY + READ( NIN, FMT = * )NINC + IF( NINC.LT.1.OR.NINC.GT.NINMAX )THEN + WRITE( NOUT, FMT = 9997 )'INCX AND INCY', NINMAX + GO TO 230 + END IF + READ( NIN, FMT = * )( INC( I ), I = 1, NINC ) + DO 30 I = 1, NINC + IF( INC( I ).EQ.0.OR.ABS( INC( I ) ).GT.INCMAX )THEN + WRITE( NOUT, FMT = 9994 )INCMAX + GO TO 230 + END IF + 30 CONTINUE +* Values of ALPHA + READ( NIN, FMT = * )NALF + IF( NALF.LT.1.OR.NALF.GT.NALMAX )THEN + WRITE( NOUT, FMT = 9997 )'ALPHA', NALMAX + GO TO 230 + END IF + READ( NIN, FMT = * )( ALF( I ), I = 1, NALF ) +* Values of BETA + READ( NIN, FMT = * )NBET + IF( NBET.LT.1.OR.NBET.GT.NBEMAX )THEN + WRITE( NOUT, FMT = 9997 )'BETA', NBEMAX + GO TO 230 + END IF + READ( NIN, FMT = * )( BET( I ), I = 1, NBET ) +* +* Report values of parameters. +* + WRITE( NOUT, FMT = 9993 ) + WRITE( NOUT, FMT = 9992 )( IDIM( I ), I = 1, NIDIM ) + WRITE( NOUT, FMT = 9991 )( KB( I ), I = 1, NKB ) + WRITE( NOUT, FMT = 9990 )( INC( I ), I = 1, NINC ) + WRITE( NOUT, FMT = 9989 )( ALF( I ), I = 1, NALF ) + WRITE( NOUT, FMT = 9988 )( BET( I ), I = 1, NBET ) + IF( .NOT.TSTERR )THEN + WRITE( NOUT, FMT = * ) + WRITE( NOUT, FMT = 9980 ) + END IF + WRITE( NOUT, FMT = * ) + WRITE( NOUT, FMT = 9999 )THRESH + WRITE( NOUT, FMT = * ) + RORDER = .FALSE. + CORDER = .FALSE. + IF (LAYOUT.EQ.2) THEN + RORDER = .TRUE. + CORDER = .TRUE. + WRITE( *, FMT = 10002 ) + ELSE IF (LAYOUT.EQ.1) THEN + RORDER = .TRUE. + WRITE( *, FMT = 10001 ) + ELSE IF (LAYOUT.EQ.0) THEN + CORDER = .TRUE. + WRITE( *, FMT = 10000 ) + END IF + WRITE( *, FMT = * ) +* +* Read names of subroutines and flags which indicate +* whether they are to be tested. +* + DO 40 I = 1, NSUBS + LTEST( I ) = .FALSE. + 40 CONTINUE + 50 READ( NIN, FMT = 9984, END = 80 )SNAMET, LTESTT + DO 60 I = 1, NSUBS + IF( SNAMET.EQ.SNAMES( I ) ) + $ GO TO 70 + 60 CONTINUE + WRITE( NOUT, FMT = 9986 )SNAMET + STOP + 70 LTEST( I ) = LTESTT + GO TO 50 +* + 80 CONTINUE + CLOSE ( NIN ) +* +* Compute EPS (the machine precision). +* + EPS = RONE + 90 CONTINUE + IF( DDIFF( RONE + EPS, RONE ).EQ.RZERO ) + $ GO TO 100 + EPS = RHALF*EPS + GO TO 90 + 100 CONTINUE + EPS = EPS + EPS + WRITE( NOUT, FMT = 9998 )EPS +* +* Check the reliability of ZMVCH using exact data. +* + N = MIN( 32, NMAX ) + DO 120 J = 1, N + DO 110 I = 1, N + A( I, J ) = MAX( I - J + 1, 0 ) + 110 CONTINUE + X( J ) = J + Y( J ) = ZERO + 120 CONTINUE + DO 130 J = 1, N + YY( J ) = J*( ( J + 1 )*J )/2 - ( ( J + 1 )*J*( J - 1 ) )/3 + 130 CONTINUE +* YY holds the exact result. On exit from CMVCH YT holds +* the result computed by CMVCH. + TRANS = 'N' + CALL ZMVCH( TRANS, N, N, ONE, A, NMAX, X, 1, ZERO, Y, 1, YT, G, + $ YY, EPS, ERR, FATAL, NOUT, .TRUE. ) + SAME = LZE( YY, YT, N ) + IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN + WRITE( NOUT, FMT = 9985 )TRANS, SAME, ERR + STOP + END IF + TRANS = 'T' + CALL ZMVCH( TRANS, N, N, ONE, A, NMAX, X, -1, ZERO, Y, -1, YT, G, + $ YY, EPS, ERR, FATAL, NOUT, .TRUE. ) + SAME = LZE( YY, YT, N ) + IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN + WRITE( NOUT, FMT = 9985 )TRANS, SAME, ERR + STOP + END IF +* +* Test each subroutine in turn. +* + DO 210 ISNUM = 1, NSUBS + WRITE( NOUT, FMT = * ) + IF( .NOT.LTEST( ISNUM ) )THEN +* Subprogram is not to be tested. + WRITE( NOUT, FMT = 9983 )SNAMES( ISNUM ) + ELSE + SRNAMT = SNAMES( ISNUM ) +* Test error exits. + IF( TSTERR )THEN + CALL CZ2CHKE( SNAMES( ISNUM ) ) + WRITE( NOUT, FMT = * ) + END IF +* Test computations. + INFOT = 0 + OK = .TRUE. + FATAL = .FALSE. + GO TO ( 140, 140, 150, 150, 150, 160, 160, + $ 160, 160, 160, 160, 170, 170, 180, + $ 180, 190, 190 )ISNUM +* Test ZGEMV, 01, and ZGBMV, 02. + 140 IF (CORDER) THEN + CALL ZCHK1( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, + $ NBET, BET, NINC, INC, NMAX, INCMAX, A, AA, AS, + $ X, XX, XS, Y, YY, YS, YT, G, 0 ) + END IF + IF (RORDER) THEN + CALL ZCHK1( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, + $ NBET, BET, NINC, INC, NMAX, INCMAX, A, AA, AS, + $ X, XX, XS, Y, YY, YS, YT, G, 1 ) + END IF + GO TO 200 +* Test ZHEMV, 03, ZHBMV, 04, and ZHPMV, 05. + 150 IF (CORDER) THEN + CALL ZCHK2( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, + $ NBET, BET, NINC, INC, NMAX, INCMAX, A, AA, AS, + $ X, XX, XS, Y, YY, YS, YT, G, 0 ) + END IF + IF (RORDER) THEN + CALL ZCHK2( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, + $ NBET, BET, NINC, INC, NMAX, INCMAX, A, AA, AS, + $ X, XX, XS, Y, YY, YS, YT, G, 1 ) + END IF + GO TO 200 +* Test ZTRMV, 06, ZTBMV, 07, ZTPMV, 08, +* ZTRSV, 09, ZTBSV, 10, and ZTPSV, 11. + 160 IF (CORDER) THEN + CALL ZCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, Y, YY, YS, YT, G, Z, + $ 0 ) + END IF + IF (RORDER) THEN + CALL ZCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, Y, YY, YS, YT, G, Z, + $ 1 ) + END IF + GO TO 200 +* Test ZGERC, 12, ZGERU, 13. + 170 IF (CORDER) THEN + CALL ZCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, + $ YT, G, Z, 0 ) + END IF + IF (RORDER) THEN + CALL ZCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, + $ YT, G, Z, 1 ) + END IF + GO TO 200 +* Test ZHER, 14, and ZHPR, 15. + 180 IF (CORDER) THEN + CALL ZCHK5( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, + $ YT, G, Z, 0 ) + END IF + IF (RORDER) THEN + CALL ZCHK5( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, + $ YT, G, Z, 1 ) + END IF + GO TO 200 +* Test ZHER2, 16, and ZHPR2, 17. + 190 IF (CORDER) THEN + CALL ZCHK6( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, + $ YT, G, Z, 0 ) + END IF + IF (RORDER) THEN + CALL ZCHK6( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, + $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, + $ YT, G, Z, 1 ) + END IF +* + 200 IF( FATAL.AND.SFATAL ) + $ GO TO 220 + END IF + 210 CONTINUE + WRITE( NOUT, FMT = 9982 ) + GO TO 240 +* + 220 CONTINUE + WRITE( NOUT, FMT = 9981 ) + GO TO 240 +* + 230 CONTINUE + WRITE( NOUT, FMT = 9987 ) +* + 240 CONTINUE + IF( TRACE ) + $ CLOSE ( NTRA ) + CLOSE ( NOUT ) + STOP +* +10002 FORMAT( ' COLUMN-MAJOR AND ROW-MAJOR DATA LAYOUTS ARE TESTED' ) +10001 FORMAT( ' ROW-MAJOR DATA LAYOUT IS TESTED' ) +10000 FORMAT( ' COLUMN-MAJOR DATA LAYOUT IS TESTED' ) + 9999 FORMAT(' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES', + $ 'S THAN', F8.2 ) + 9998 FORMAT( ' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1P, E9.1 ) + 9997 FORMAT(' NUMBER OF VALUES OF ', A, ' IS LESS THAN 1 OR GREATER ', + $ 'THAN ', I2 ) + 9996 FORMAT( ' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', I2 ) + 9995 FORMAT( ' VALUE OF K IS LESS THAN 0' ) + 9994 FORMAT( ' ABSOLUTE VALUE OF INCX OR INCY IS 0 OR GREATER THAN ', + $ I2 ) + 9993 FORMAT(' TESTS OF THE COMPLEX*16 LEVEL 2 BLAS', //' THE F', + $ 'OLLOWING PARAMETER VALUES WILL BE USED:' ) + 9992 FORMAT( ' FOR N ', 9I6 ) + 9991 FORMAT( ' FOR K ', 7I6 ) + 9990 FORMAT( ' FOR INCX AND INCY ', 7I6 ) + 9989 FORMAT( ' FOR ALPHA ', + $ 7('(', F4.1, ',', F4.1, ') ', : ) ) + 9988 FORMAT( ' FOR BETA ', + $ 7('(', F4.1, ',', F4.1, ') ', : ) ) + 9987 FORMAT( ' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM', + $ /' ******* TESTS ABANDONED *******' ) + 9986 FORMAT(' SUBPROGRAM NAME ',A12, ' NOT RECOGNIZED', /' ******* T', + $ 'ESTS ABANDONED *******' ) + 9985 FORMAT(' ERROR IN CMVCH - IN-LINE DOT PRODUCTS ARE BEING EVALU', + $ 'ATED WRONGLY.', /' CMVCH WAS CALLED WITH TRANS = ', A1, + $ ' AND RETURNED SAME = ', L1, ' AND ERR = ', F12.3, '.', / + $ ' THIS MAY BE DUE TO FAULTS IN THE ARITHMETIC OR THE COMPILER.' + $ , /' ******* TESTS ABANDONED *******' ) + 9984 FORMAT( A12, L2 ) + 9983 FORMAT( 1X,A12, ' WAS NOT TESTED' ) + 9982 FORMAT( /' END OF TESTS' ) + 9981 FORMAT( /' ******* FATAL ERROR - TESTS ABANDONED *******' ) + 9980 FORMAT( ' ERROR-EXITS WILL NOT BE TESTED' ) +* +* End of ZBLAT2. +* + END + SUBROUTINE ZCHK1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, NBET, + $ BET, NINC, INC, NMAX, INCMAX, A, AA, AS, X, XX, + $ XS, Y, YY, YS, YT, G, IORDER ) +* +* Tests CGEMV and CGBMV. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + COMPLEX*16 ZERO, HALF + PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ), + $ HALF = ( 0.5D0, 0.0D0 ) ) + DOUBLE PRECISION RZERO + PARAMETER ( RZERO = 0.0D0 ) +* .. Scalar Arguments .. + DOUBLE PRECISION EPS, THRESH + INTEGER INCMAX, NALF, NBET, NIDIM, NINC, NKB, NMAX, + $ NOUT, NTRA, IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), BET( NBET ), X( NMAX ), + $ XS( NMAX*INCMAX ), XX( NMAX*INCMAX ), + $ Y( NMAX ), YS( NMAX*INCMAX ), YT( NMAX ), + $ YY( NMAX*INCMAX ) + DOUBLE PRECISION G( NMAX ) + INTEGER IDIM( NIDIM ), INC( NINC ), KB( NKB ) +* .. Local Scalars .. + COMPLEX*16 ALPHA, ALS, BETA, BLS, TRANSL + DOUBLE PRECISION ERR, ERRMAX + INTEGER I, IA, IB, IC, IKU, IM, IN, INCX, INCXS, INCY, + $ INCYS, IX, IY, KL, KLS, KU, KUS, LAA, LDA, + $ LDAS, LX, LY, M, ML, MS, N, NARGS, NC, ND, NK, + $ NL, NS + LOGICAL BANDED, FULL, NULL, RESET, SAME, TRAN + CHARACTER*1 TRANS, TRANSS + CHARACTER*14 CTRANS + CHARACTER*3 ICH +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LZE, LZERES + EXTERNAL LZE, LZERES +* .. External Subroutines .. + EXTERNAL CZGBMV, CZGEMV, ZMAKE, ZMVCH +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, MIN +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICH/'NTC'/ +* .. Executable Statements .. + FULL = SNAME( 9: 9 ).EQ.'e' + BANDED = SNAME( 9: 9 ).EQ.'b' +* Define the number of arguments. + IF( FULL )THEN + NARGS = 11 + ELSE IF( BANDED )THEN + NARGS = 13 + END IF +* + NC = 0 + RESET = .TRUE. + ERRMAX = RZERO +* + DO 120 IN = 1, NIDIM + N = IDIM( IN ) + ND = N/2 + 1 +* + DO 110 IM = 1, 2 + IF( IM.EQ.1 ) + $ M = MAX( N - ND, 0 ) + IF( IM.EQ.2 ) + $ M = MIN( N + ND, NMAX ) +* + IF( BANDED )THEN + NK = NKB + ELSE + NK = 1 + END IF + DO 100 IKU = 1, NK + IF( BANDED )THEN + KU = KB( IKU ) + KL = MAX( KU - 1, 0 ) + ELSE + KU = N - 1 + KL = M - 1 + END IF +* Set LDA to 1 more than minimum value if room. + IF( BANDED )THEN + LDA = KL + KU + 1 + ELSE + LDA = M + END IF + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 100 + LAA = LDA*N + NULL = N.LE.0.OR.M.LE.0 +* +* Generate the matrix A. +* + TRANSL = ZERO + CALL ZMAKE( SNAME( 8: 9 ), ' ', ' ', M, N, A, NMAX, AA, + $ LDA, KL, KU, RESET, TRANSL ) +* + DO 90 IC = 1, 3 + TRANS = ICH( IC: IC ) + IF (TRANS.EQ.'N')THEN + CTRANS = ' CblasNoTrans' + ELSE IF (TRANS.EQ.'T')THEN + CTRANS = ' CblasTrans' + ELSE + CTRANS = 'CblasConjTrans' + END IF + TRAN = TRANS.EQ.'T'.OR.TRANS.EQ.'C' +* + IF( TRAN )THEN + ML = N + NL = M + ELSE + ML = M + NL = N + END IF +* + DO 80 IX = 1, NINC + INCX = INC( IX ) + LX = ABS( INCX )*NL +* +* Generate the vector X. +* + TRANSL = HALF + CALL ZMAKE( 'ge', ' ', ' ', 1, NL, X, 1, XX, + $ ABS( INCX ), 0, NL - 1, RESET, TRANSL ) + IF( NL.GT.1 )THEN + X( NL/2 ) = ZERO + XX( 1 + ABS( INCX )*( NL/2 - 1 ) ) = ZERO + END IF +* + DO 70 IY = 1, NINC + INCY = INC( IY ) + LY = ABS( INCY )*ML +* + DO 60 IA = 1, NALF + ALPHA = ALF( IA ) +* + DO 50 IB = 1, NBET + BETA = BET( IB ) +* +* Generate the vector Y. +* + TRANSL = ZERO + CALL ZMAKE( 'ge', ' ', ' ', 1, ML, Y, 1, + $ YY, ABS( INCY ), 0, ML - 1, + $ RESET, TRANSL ) +* + NC = NC + 1 +* +* Save every datum before calling the +* subroutine. +* + TRANSS = TRANS + MS = M + NS = N + KLS = KL + KUS = KU + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LX + XS( I ) = XX( I ) + 20 CONTINUE + INCXS = INCX + BLS = BETA + DO 30 I = 1, LY + YS( I ) = YY( I ) + 30 CONTINUE + INCYS = INCY +* +* Call the subroutine. +* + IF( FULL )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9994 )NC, SNAME, + $ CTRANS, M, N, ALPHA, LDA, INCX, BETA, + $ INCY + IF( REWI ) + $ REWIND NTRA + CALL CZGEMV( IORDER, TRANS, M, N, + $ ALPHA, AA, LDA, XX, INCX, + $ BETA, YY, INCY ) + ELSE IF( BANDED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9995 )NC, SNAME, + $ CTRANS, M, N, KL, KU, ALPHA, LDA, + $ INCX, BETA, INCY + IF( REWI ) + $ REWIND NTRA + CALL CZGBMV( IORDER, TRANS, M, N, KL, + $ KU, ALPHA, AA, LDA, XX, + $ INCX, BETA, YY, INCY ) + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9993 ) + FATAL = .TRUE. + GO TO 130 + END IF +* +* See what data changed inside subroutines. +* +* IF(TRANS .NE. 'C' .OR. (INCX .GT. 0 .AND. INCY .GT. 0)) THEN + ISAME( 1 ) = TRANS.EQ.TRANSS + ISAME( 2 ) = MS.EQ.M + ISAME( 3 ) = NS.EQ.N + IF( FULL )THEN + ISAME( 4 ) = ALS.EQ.ALPHA + ISAME( 5 ) = LZE( AS, AA, LAA ) + ISAME( 6 ) = LDAS.EQ.LDA + ISAME( 7 ) = LZE( XS, XX, LX ) + ISAME( 8 ) = INCXS.EQ.INCX + ISAME( 9 ) = BLS.EQ.BETA + IF( NULL )THEN + ISAME( 10 ) = LZE( YS, YY, LY ) + ELSE + ISAME( 10 ) = LZERES( 'ge', ' ', 1, + $ ML, YS, YY, + $ ABS( INCY ) ) + END IF + ISAME( 11 ) = INCYS.EQ.INCY + ELSE IF( BANDED )THEN + ISAME( 4 ) = KLS.EQ.KL + ISAME( 5 ) = KUS.EQ.KU + ISAME( 6 ) = ALS.EQ.ALPHA + ISAME( 7 ) = LZE( AS, AA, LAA ) + ISAME( 8 ) = LDAS.EQ.LDA + ISAME( 9 ) = LZE( XS, XX, LX ) + ISAME( 10 ) = INCXS.EQ.INCX + ISAME( 11 ) = BLS.EQ.BETA + IF( NULL )THEN + ISAME( 12 ) = LZE( YS, YY, LY ) + ELSE + ISAME( 12 ) = LZERES( 'ge', ' ', 1, + $ ML, YS, YY, + $ ABS( INCY ) ) + END IF + ISAME( 13 ) = INCYS.EQ.INCY + END IF +* +* If data was incorrectly changed, report +* and return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 130 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result. +* + CALL ZMVCH( TRANS, M, N, ALPHA, A, + $ NMAX, X, INCX, BETA, Y, + $ INCY, YT, G, YY, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and +* return. + IF( FATAL ) + $ GO TO 130 + ELSE +* Avoid repeating tests with M.le.0 or +* N.le.0. + GO TO 110 + END IF +* END IF +* + 50 CONTINUE +* + 60 CONTINUE +* + 70 CONTINUE +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* + 110 CONTINUE +* + 120 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + WRITE( NOUT, FMT = 9999 )SNAME, NC + ELSE + WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX + END IF + GO TO 140 +* + 130 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + IF( FULL )THEN + WRITE( NOUT, FMT = 9994 )NC, SNAME, CTRANS, M, N, ALPHA, LDA, + $ INCX, BETA, INCY + ELSE IF( BANDED )THEN + WRITE( NOUT, FMT = 9995 )NC, SNAME, CTRANS, M, N, KL, KU, + $ ALPHA, LDA, INCX, BETA, INCY + END IF +* + 140 CONTINUE + RETURN +* + 9999 FORMAT(' ',A12, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL', + $ 'S)' ) + 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9997 FORMAT(' ',A12, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', + $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, + $ ' - SUSPECT *******' ) + 9996 FORMAT( ' ******* ',A12, ' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( 1X, I6, ': ',A12, '(', A14, ',', 4( I3, ',' ), '(', + $ F4.1, ',', F4.1, '), A,',/ 10x, I3, ', X,', I2, ',(', + $ F4.1, ',', F4.1, '), Y,', I2, ') .' ) + 9994 FORMAT( 1X, I6, ': ',A12, '(', A14, ',', 2( I3, ',' ), '(', + $ F4.1, ',', F4.1, '), A,',/ 10x, I3, ', X,', I2, ',(', + $ F4.1, ',', F4.1, '), Y,', I2, ') .' ) + 9993 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of ZCHK1. +* + END + SUBROUTINE ZCHK2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, NBET, + $ BET, NINC, INC, NMAX, INCMAX, A, AA, AS, X, XX, + $ XS, Y, YY, YS, YT, G, IORDER ) +* +* Tests CHEMV, CHBMV and CHPMV. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + COMPLEX*16 ZERO, HALF + PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ), + $ HALF = ( 0.5D0, 0.0D0 ) ) + DOUBLE PRECISION RZERO + PARAMETER ( RZERO = 0.0D0 ) +* .. Scalar Arguments .. + DOUBLE PRECISION EPS, THRESH + INTEGER INCMAX, NALF, NBET, NIDIM, NINC, NKB, NMAX, + $ NOUT, NTRA, IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), BET( NBET ), X( NMAX ), + $ XS( NMAX*INCMAX ), XX( NMAX*INCMAX ), + $ Y( NMAX ), YS( NMAX*INCMAX ), YT( NMAX ), + $ YY( NMAX*INCMAX ) + DOUBLE PRECISION G( NMAX ) + INTEGER IDIM( NIDIM ), INC( NINC ), KB( NKB ) +* .. Local Scalars .. + COMPLEX*16 ALPHA, ALS, BETA, BLS, TRANSL + DOUBLE PRECISION ERR, ERRMAX + INTEGER I, IA, IB, IC, IK, IN, INCX, INCXS, INCY, + $ INCYS, IX, IY, K, KS, LAA, LDA, LDAS, LX, LY, + $ N, NARGS, NC, NK, NS + LOGICAL BANDED, FULL, NULL, PACKED, RESET, SAME + CHARACTER*1 UPLO, UPLOS + CHARACTER*14 CUPLO + CHARACTER*2 ICH +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LZE, LZERES + EXTERNAL LZE, LZERES +* .. External Subroutines .. + EXTERNAL CZHBMV, CZHEMV, CZHPMV, ZMAKE, ZMVCH +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICH/'UL'/ +* .. Executable Statements .. + FULL = SNAME( 9: 9 ).EQ.'e' + BANDED = SNAME( 9: 9 ).EQ.'b' + PACKED = SNAME( 9: 9 ).EQ.'p' +* Define the number of arguments. + IF( FULL )THEN + NARGS = 10 + ELSE IF( BANDED )THEN + NARGS = 11 + ELSE IF( PACKED )THEN + NARGS = 9 + END IF +* + NC = 0 + RESET = .TRUE. + ERRMAX = RZERO +* + DO 110 IN = 1, NIDIM + N = IDIM( IN ) +* + IF( BANDED )THEN + NK = NKB + ELSE + NK = 1 + END IF + DO 100 IK = 1, NK + IF( BANDED )THEN + K = KB( IK ) + ELSE + K = N - 1 + END IF +* Set LDA to 1 more than minimum value if room. + IF( BANDED )THEN + LDA = K + 1 + ELSE + LDA = N + END IF + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 100 + IF( PACKED )THEN + LAA = ( N*( N + 1 ) )/2 + ELSE + LAA = LDA*N + END IF + NULL = N.LE.0 +* + DO 90 IC = 1, 2 + UPLO = ICH( IC: IC ) + IF (UPLO.EQ.'U')THEN + CUPLO = ' CblasUpper' + ELSE + CUPLO = ' CblasLower' + END IF +* +* Generate the matrix A. +* + TRANSL = ZERO + CALL ZMAKE( SNAME( 8: 9 ), UPLO, ' ', N, N, A, NMAX, AA, + $ LDA, K, K, RESET, TRANSL ) +* + DO 80 IX = 1, NINC + INCX = INC( IX ) + LX = ABS( INCX )*N +* +* Generate the vector X. +* + TRANSL = HALF + CALL ZMAKE( 'ge', ' ', ' ', 1, N, X, 1, XX, + $ ABS( INCX ), 0, N - 1, RESET, TRANSL ) + IF( N.GT.1 )THEN + X( N/2 ) = ZERO + XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO + END IF +* + DO 70 IY = 1, NINC + INCY = INC( IY ) + LY = ABS( INCY )*N +* + DO 60 IA = 1, NALF + ALPHA = ALF( IA ) +* + DO 50 IB = 1, NBET + BETA = BET( IB ) +* +* Generate the vector Y. +* + TRANSL = ZERO + CALL ZMAKE( 'ge', ' ', ' ', 1, N, Y, 1, YY, + $ ABS( INCY ), 0, N - 1, RESET, + $ TRANSL ) +* + NC = NC + 1 +* +* Save every datum before calling the +* subroutine. +* + UPLOS = UPLO + NS = N + KS = K + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LX + XS( I ) = XX( I ) + 20 CONTINUE + INCXS = INCX + BLS = BETA + DO 30 I = 1, LY + YS( I ) = YY( I ) + 30 CONTINUE + INCYS = INCY +* +* Call the subroutine. +* + IF( FULL )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9993 )NC, SNAME, + $ CUPLO, N, ALPHA, LDA, INCX, BETA, INCY + IF( REWI ) + $ REWIND NTRA + CALL CZHEMV( IORDER, UPLO, N, ALPHA, AA, + $ LDA, XX, INCX, BETA, YY, + $ INCY ) + ELSE IF( BANDED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9994 )NC, SNAME, + $ CUPLO, N, K, ALPHA, LDA, INCX, BETA, + $ INCY + IF( REWI ) + $ REWIND NTRA + CALL CZHBMV( IORDER, UPLO, N, K, ALPHA, + $ AA, LDA, XX, INCX, BETA, + $ YY, INCY ) + ELSE IF( PACKED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9995 )NC, SNAME, + $ CUPLO, N, ALPHA, INCX, BETA, INCY + IF( REWI ) + $ REWIND NTRA + CALL CZHPMV( IORDER, UPLO, N, ALPHA, AA, + $ XX, INCX, BETA, YY, INCY ) + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9992 ) + FATAL = .TRUE. + GO TO 120 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = UPLO.EQ.UPLOS + ISAME( 2 ) = NS.EQ.N + IF( FULL )THEN + ISAME( 3 ) = ALS.EQ.ALPHA + ISAME( 4 ) = LZE( AS, AA, LAA ) + ISAME( 5 ) = LDAS.EQ.LDA + ISAME( 6 ) = LZE( XS, XX, LX ) + ISAME( 7 ) = INCXS.EQ.INCX + ISAME( 8 ) = BLS.EQ.BETA + IF( NULL )THEN + ISAME( 9 ) = LZE( YS, YY, LY ) + ELSE + ISAME( 9 ) = LZERES( 'ge', ' ', 1, N, + $ YS, YY, ABS( INCY ) ) + END IF + ISAME( 10 ) = INCYS.EQ.INCY + ELSE IF( BANDED )THEN + ISAME( 3 ) = KS.EQ.K + ISAME( 4 ) = ALS.EQ.ALPHA + ISAME( 5 ) = LZE( AS, AA, LAA ) + ISAME( 6 ) = LDAS.EQ.LDA + ISAME( 7 ) = LZE( XS, XX, LX ) + ISAME( 8 ) = INCXS.EQ.INCX + ISAME( 9 ) = BLS.EQ.BETA + IF( NULL )THEN + ISAME( 10 ) = LZE( YS, YY, LY ) + ELSE + ISAME( 10 ) = LZERES( 'ge', ' ', 1, N, + $ YS, YY, ABS( INCY ) ) + END IF + ISAME( 11 ) = INCYS.EQ.INCY + ELSE IF( PACKED )THEN + ISAME( 3 ) = ALS.EQ.ALPHA + ISAME( 4 ) = LZE( AS, AA, LAA ) + ISAME( 5 ) = LZE( XS, XX, LX ) + ISAME( 6 ) = INCXS.EQ.INCX + ISAME( 7 ) = BLS.EQ.BETA + IF( NULL )THEN + ISAME( 8 ) = LZE( YS, YY, LY ) + ELSE + ISAME( 8 ) = LZERES( 'ge', ' ', 1, N, + $ YS, YY, ABS( INCY ) ) + END IF + ISAME( 9 ) = INCYS.EQ.INCY + END IF +* +* If data was incorrectly changed, report and +* return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 120 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result. +* + CALL ZMVCH( 'N', N, N, ALPHA, A, NMAX, X, + $ INCX, BETA, Y, INCY, YT, G, + $ YY, EPS, ERR, FATAL, NOUT, + $ .TRUE. ) + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and +* return. + IF( FATAL ) + $ GO TO 120 + ELSE +* Avoid repeating tests with N.le.0 + GO TO 110 + END IF +* + 50 CONTINUE +* + 60 CONTINUE +* + 70 CONTINUE +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* + 110 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + WRITE( NOUT, FMT = 9999 )SNAME, NC + ELSE + WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX + END IF + GO TO 130 +* + 120 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + IF( FULL )THEN + WRITE( NOUT, FMT = 9993 )NC, SNAME, CUPLO, N, ALPHA, LDA, INCX, + $ BETA, INCY + ELSE IF( BANDED )THEN + WRITE( NOUT, FMT = 9994 )NC, SNAME, CUPLO, N, K, ALPHA, LDA, + $ INCX, BETA, INCY + ELSE IF( PACKED )THEN + WRITE( NOUT, FMT = 9995 )NC, SNAME, CUPLO, N, ALPHA, INCX, + $ BETA, INCY + END IF +* + 130 CONTINUE + RETURN +* + 9999 FORMAT(' ',A12, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL', + $ 'S)' ) + 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9997 FORMAT(' ',A12, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', + $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, + $ ' - SUSPECT *******' ) + 9996 FORMAT( ' ******* ',A12, ' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( 1X, I6, ': ',A12, '(', A14, ',', I3, ',(', F4.1, ',', + $ F4.1, '), AP, X,',/ 10x, I2, ',(', F4.1, ',', F4.1, + $ '), Y,', I2, ') .' ) + 9994 FORMAT( 1X, I6, ': ',A12, '(', A14, ',', 2( I3, ',' ), '(', + $ F4.1, ',', F4.1, '), A,', I3, ', X,',/ 10x, I2, ',(', + $ F4.1, ',', F4.1, '), Y,', I2, ') .' ) + 9993 FORMAT( 1X, I6, ': ',A12, '(', A14, ',', I3, ',(', F4.1, ',', + $ F4.1, '), A,', I3, ', X,',/ 10x, I2, ',(', F4.1, ',', + $ F4.1, '), ', 'Y,', I2, ') .' ) + 9992 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of CZHK2. +* + END + SUBROUTINE ZCHK3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NKB, KB, NINC, INC, NMAX, + $ INCMAX, A, AA, AS, X, XX, XS, XT, G, Z, IORDER ) +* +* Tests ZTRMV, ZTBMV, ZTPMV, ZTRSV, ZTBSV and ZTPSV. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + COMPLEX*16 ZERO, HALF, ONE + PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ), + $ HALF = ( 0.5D0, 0.0D0 ), + $ ONE = ( 1.0D0, 0.0D0 ) ) + DOUBLE PRECISION RZERO + PARAMETER ( RZERO = 0.0D0 ) +* .. Scalar Arguments .. + DOUBLE PRECISION EPS, THRESH + INTEGER INCMAX, NIDIM, NINC, NKB, NMAX, NOUT, NTRA, + $ IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), + $ AS( NMAX*NMAX ), X( NMAX ), XS( NMAX*INCMAX ), + $ XT( NMAX ), XX( NMAX*INCMAX ), Z( NMAX ) + DOUBLE PRECISION G( NMAX ) + INTEGER IDIM( NIDIM ), INC( NINC ), KB( NKB ) +* .. Local Scalars .. + COMPLEX*16 TRANSL + DOUBLE PRECISION ERR, ERRMAX + INTEGER I, ICD, ICT, ICU, IK, IN, INCX, INCXS, IX, K, + $ KS, LAA, LDA, LDAS, LX, N, NARGS, NC, NK, NS + LOGICAL BANDED, FULL, NULL, PACKED, RESET, SAME + CHARACTER*1 DIAG, DIAGS, TRANS, TRANSS, UPLO, UPLOS + CHARACTER*14 CUPLO,CTRANS,CDIAG + CHARACTER*2 ICHD, ICHU + CHARACTER*3 ICHT +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LZE, LZERES + EXTERNAL LZE, LZERES +* .. External Subroutines .. + EXTERNAL ZMAKE, ZMVCH, CZTBMV, CZTBSV, CZTPMV, + $ CZTPSV, CZTRMV, CZTRSV +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICHU/'UL'/, ICHT/'NTC'/, ICHD/'UN'/ +* .. Executable Statements .. + FULL = SNAME( 9: 9 ).EQ.'r' + BANDED = SNAME( 9: 9 ).EQ.'b' + PACKED = SNAME( 9: 9 ).EQ.'p' +* Define the number of arguments. + IF( FULL )THEN + NARGS = 8 + ELSE IF( BANDED )THEN + NARGS = 9 + ELSE IF( PACKED )THEN + NARGS = 7 + END IF +* + NC = 0 + RESET = .TRUE. + ERRMAX = RZERO +* Set up zero vector for ZMVCH. + DO 10 I = 1, NMAX + Z( I ) = ZERO + 10 CONTINUE +* + DO 110 IN = 1, NIDIM + N = IDIM( IN ) +* + IF( BANDED )THEN + NK = NKB + ELSE + NK = 1 + END IF + DO 100 IK = 1, NK + IF( BANDED )THEN + K = KB( IK ) + ELSE + K = N - 1 + END IF +* Set LDA to 1 more than minimum value if room. + IF( BANDED )THEN + LDA = K + 1 + ELSE + LDA = N + END IF + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 100 + IF( PACKED )THEN + LAA = ( N*( N + 1 ) )/2 + ELSE + LAA = LDA*N + END IF + NULL = N.LE.0 +* + DO 90 ICU = 1, 2 + UPLO = ICHU( ICU: ICU ) + IF (UPLO.EQ.'U')THEN + CUPLO = ' CblasUpper' + ELSE + CUPLO = ' CblasLower' + END IF +* + DO 80 ICT = 1, 3 + TRANS = ICHT( ICT: ICT ) + IF (TRANS.EQ.'N')THEN + CTRANS = ' CblasNoTrans' + ELSE IF (TRANS.EQ.'T')THEN + CTRANS = ' CblasTrans' + ELSE + CTRANS = 'CblasConjTrans' + END IF +* + DO 70 ICD = 1, 2 + DIAG = ICHD( ICD: ICD ) + IF (DIAG.EQ.'N')THEN + CDIAG = ' CblasNonUnit' + ELSE + CDIAG = ' CblasUnit' + END IF +* +* Generate the matrix A. +* + TRANSL = ZERO + CALL ZMAKE( SNAME( 8: 9 ), UPLO, DIAG, N, N, A, + $ NMAX, AA, LDA, K, K, RESET, TRANSL ) +* + DO 60 IX = 1, NINC + INCX = INC( IX ) + LX = ABS( INCX )*N +* +* Generate the vector X. +* + TRANSL = HALF + CALL ZMAKE( 'ge', ' ', ' ', 1, N, X, 1, XX, + $ ABS( INCX ), 0, N - 1, RESET, + $ TRANSL ) + IF( N.GT.1 )THEN + X( N/2 ) = ZERO + XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO + END IF +* + NC = NC + 1 +* +* Save every datum before calling the subroutine. +* + UPLOS = UPLO + TRANSS = TRANS + DIAGS = DIAG + NS = N + KS = K + DO 20 I = 1, LAA + AS( I ) = AA( I ) + 20 CONTINUE + LDAS = LDA + DO 30 I = 1, LX + XS( I ) = XX( I ) + 30 CONTINUE + INCXS = INCX +* +* Call the subroutine. +* + IF( SNAME( 4: 5 ).EQ.'mv' )THEN + IF( FULL )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9993 )NC, SNAME, + $ CUPLO, CTRANS, CDIAG, N, LDA, INCX + IF( REWI ) + $ REWIND NTRA + CALL CZTRMV( IORDER, UPLO, TRANS, DIAG, + $ N, AA, LDA, XX, INCX ) + ELSE IF( BANDED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9994 )NC, SNAME, + $ CUPLO, CTRANS, CDIAG, N, K, LDA, INCX + IF( REWI ) + $ REWIND NTRA + CALL CZTBMV( IORDER, UPLO, TRANS, DIAG, + $ N, K, AA, LDA, XX, INCX ) + ELSE IF( PACKED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9995 )NC, SNAME, + $ CUPLO, CTRANS, CDIAG, N, INCX + IF( REWI ) + $ REWIND NTRA + CALL CZTPMV( IORDER, UPLO, TRANS, DIAG, + $ N, AA, XX, INCX ) + END IF + ELSE IF( SNAME( 4: 5 ).EQ.'sv' )THEN + IF( FULL )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9993 )NC, SNAME, + $ CUPLO, CTRANS, CDIAG, N, LDA, INCX + IF( REWI ) + $ REWIND NTRA + CALL CZTRSV( IORDER, UPLO, TRANS, DIAG, + $ N, AA, LDA, XX, INCX ) + ELSE IF( BANDED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9994 )NC, SNAME, + $ CUPLO, CTRANS, CDIAG, N, K, LDA, INCX + IF( REWI ) + $ REWIND NTRA + CALL CZTBSV( IORDER, UPLO, TRANS, DIAG, + $ N, K, AA, LDA, XX, INCX ) + ELSE IF( PACKED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9995 )NC, SNAME, + $ CUPLO, CTRANS, CDIAG, N, INCX + IF( REWI ) + $ REWIND NTRA + CALL CZTPSV( IORDER, UPLO, TRANS, DIAG, + $ N, AA, XX, INCX ) + END IF + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9992 ) + FATAL = .TRUE. + GO TO 120 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = UPLO.EQ.UPLOS + ISAME( 2 ) = TRANS.EQ.TRANSS + ISAME( 3 ) = DIAG.EQ.DIAGS + ISAME( 4 ) = NS.EQ.N + IF( FULL )THEN + ISAME( 5 ) = LZE( AS, AA, LAA ) + ISAME( 6 ) = LDAS.EQ.LDA + IF( NULL )THEN + ISAME( 7 ) = LZE( XS, XX, LX ) + ELSE + ISAME( 7 ) = LZERES( 'ge', ' ', 1, N, XS, + $ XX, ABS( INCX ) ) + END IF + ISAME( 8 ) = INCXS.EQ.INCX + ELSE IF( BANDED )THEN + ISAME( 5 ) = KS.EQ.K + ISAME( 6 ) = LZE( AS, AA, LAA ) + ISAME( 7 ) = LDAS.EQ.LDA + IF( NULL )THEN + ISAME( 8 ) = LZE( XS, XX, LX ) + ELSE + ISAME( 8 ) = LZERES( 'ge', ' ', 1, N, XS, + $ XX, ABS( INCX ) ) + END IF + ISAME( 9 ) = INCXS.EQ.INCX + ELSE IF( PACKED )THEN + ISAME( 5 ) = LZE( AS, AA, LAA ) + IF( NULL )THEN + ISAME( 6 ) = LZE( XS, XX, LX ) + ELSE + ISAME( 6 ) = LZERES( 'ge', ' ', 1, N, XS, + $ XX, ABS( INCX ) ) + END IF + ISAME( 7 ) = INCXS.EQ.INCX + END IF +* +* If data was incorrectly changed, report and +* return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 120 + END IF +* + IF( .NOT.NULL )THEN + IF( SNAME( 4: 5 ).EQ.'mv' )THEN +* +* Check the result. +* + CALL ZMVCH( TRANS, N, N, ONE, A, NMAX, X, + $ INCX, ZERO, Z, INCX, XT, G, + $ XX, EPS, ERR, FATAL, NOUT, + $ .TRUE. ) + ELSE IF( SNAME( 4: 5 ).EQ.'sv' )THEN +* +* Compute approximation to original vector. +* + DO 50 I = 1, N + Z( I ) = XX( 1 + ( I - 1 )* + $ ABS( INCX ) ) + XX( 1 + ( I - 1 )*ABS( INCX ) ) + $ = X( I ) + 50 CONTINUE + CALL ZMVCH( TRANS, N, N, ONE, A, NMAX, Z, + $ INCX, ZERO, X, INCX, XT, G, + $ XX, EPS, ERR, FATAL, NOUT, + $ .FALSE. ) + END IF + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and return. + IF( FATAL ) + $ GO TO 120 + ELSE +* Avoid repeating tests with N.le.0. + GO TO 110 + END IF +* + 60 CONTINUE +* + 70 CONTINUE +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* + 110 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + WRITE( NOUT, FMT = 9999 )SNAME, NC + ELSE + WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX + END IF + GO TO 130 +* + 120 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + IF( FULL )THEN + WRITE( NOUT, FMT = 9993 )NC, SNAME, CUPLO, CTRANS, CDIAG, N, + $ LDA, INCX + ELSE IF( BANDED )THEN + WRITE( NOUT, FMT = 9994 )NC, SNAME, CUPLO, CTRANS, CDIAG, N, K, + $ LDA, INCX + ELSE IF( PACKED )THEN + WRITE( NOUT, FMT = 9995 )NC, SNAME, CUPLO, CTRANS, CDIAG, N, + $ INCX + END IF +* + 130 CONTINUE + RETURN +* + 9999 FORMAT(' ',A12, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL', + $ 'S)' ) + 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9997 FORMAT(' ',A12, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', + $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, + $ ' - SUSPECT *******' ) + 9996 FORMAT( ' ******* ',A12, ' FAILED ON CALL NUMBER:' ) + 9995 FORMAT(1X, I6, ': ',A12, '(', 3( A14, ',' ),/ 10x, I3, ', AP, ', + $ 'X,', I2, ') .' ) + 9994 FORMAT(1X, I6, ': ',A12, '(', 3( A14, ',' ),/ 10x, 2( I3, ',' ), + $ ' A,', I3, ', X,', I2, ') .' ) + 9993 FORMAT( 1X, I6, ': ',A12, '(', 3( A14, ',' ),/ 10x, I3, ', A,', + $ I3, ', X,', I2, ') .' ) + 9992 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of ZCHK3. +* + END + SUBROUTINE ZCHK4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, NMAX, + $ INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, YT, G, + $ Z, IORDER ) +* +* Tests ZGERC and ZGERU. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + COMPLEX*16 ZERO, HALF, ONE + PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ), + $ HALF = ( 0.5D0, 0.0D0 ), + $ ONE = ( 1.0D0, 0.0D0 ) ) + DOUBLE PRECISION RZERO + PARAMETER ( RZERO = 0.0D0 ) +* .. Scalar Arguments .. + DOUBLE PRECISION EPS, THRESH + INTEGER INCMAX, NALF, NIDIM, NINC, NMAX, NOUT, NTRA, + $ IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), X( NMAX ), XS( NMAX*INCMAX ), + $ XX( NMAX*INCMAX ), Y( NMAX ), + $ YS( NMAX*INCMAX ), YT( NMAX ), + $ YY( NMAX*INCMAX ), Z( NMAX ) + DOUBLE PRECISION G( NMAX ) + INTEGER IDIM( NIDIM ), INC( NINC ) +* .. Local Scalars .. + COMPLEX*16 ALPHA, ALS, TRANSL + DOUBLE PRECISION ERR, ERRMAX + INTEGER I, IA, IM, IN, INCX, INCXS, INCY, INCYS, IX, + $ IY, J, LAA, LDA, LDAS, LX, LY, M, MS, N, NARGS, + $ NC, ND, NS + LOGICAL CONJ, NULL, RESET, SAME +* .. Local Arrays .. + COMPLEX*16 W( 1 ) + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LZE, LZERES + EXTERNAL LZE, LZERES +* .. External Subroutines .. + EXTERNAL CZGERC, CZGERU, ZMAKE, ZMVCH +* .. Intrinsic Functions .. + INTRINSIC ABS, DCONJG, MAX, MIN +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Executable Statements .. + CONJ = SNAME( 5: 5 ).EQ.'c' +* Define the number of arguments. + NARGS = 9 +* + NC = 0 + RESET = .TRUE. + ERRMAX = RZERO +* + DO 120 IN = 1, NIDIM + N = IDIM( IN ) + ND = N/2 + 1 +* + DO 110 IM = 1, 2 + IF( IM.EQ.1 ) + $ M = MAX( N - ND, 0 ) + IF( IM.EQ.2 ) + $ M = MIN( N + ND, NMAX ) +* +* Set LDA to 1 more than minimum value if room. + LDA = M + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 110 + LAA = LDA*N + NULL = N.LE.0.OR.M.LE.0 +* + DO 100 IX = 1, NINC + INCX = INC( IX ) + LX = ABS( INCX )*M +* +* Generate the vector X. +* + TRANSL = HALF + CALL ZMAKE( 'ge', ' ', ' ', 1, M, X, 1, XX, ABS( INCX ), + $ 0, M - 1, RESET, TRANSL ) + IF( M.GT.1 )THEN + X( M/2 ) = ZERO + XX( 1 + ABS( INCX )*( M/2 - 1 ) ) = ZERO + END IF +* + DO 90 IY = 1, NINC + INCY = INC( IY ) + LY = ABS( INCY )*N +* +* Generate the vector Y. +* + TRANSL = ZERO + CALL ZMAKE( 'ge', ' ', ' ', 1, N, Y, 1, YY, + $ ABS( INCY ), 0, N - 1, RESET, TRANSL ) + IF( N.GT.1 )THEN + Y( N/2 ) = ZERO + YY( 1 + ABS( INCY )*( N/2 - 1 ) ) = ZERO + END IF +* + DO 80 IA = 1, NALF + ALPHA = ALF( IA ) +* +* Generate the matrix A. +* + TRANSL = ZERO + CALL ZMAKE(SNAME( 8: 9 ), ' ', ' ', M, N, A, NMAX, + $ AA, LDA, M - 1, N - 1, RESET, TRANSL ) +* + NC = NC + 1 +* +* Save every datum before calling the subroutine. +* + MS = M + NS = N + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LX + XS( I ) = XX( I ) + 20 CONTINUE + INCXS = INCX + DO 30 I = 1, LY + YS( I ) = YY( I ) + 30 CONTINUE + INCYS = INCY +* +* Call the subroutine. +* + IF( TRACE ) + $ WRITE( NTRA, FMT = 9994 )NC, SNAME, M, N, + $ ALPHA, INCX, INCY, LDA + IF( CONJ )THEN + IF( REWI ) + $ REWIND NTRA + CALL CZGERC( IORDER, M, N, ALPHA, XX, INCX, + $ YY, INCY, AA, LDA ) + ELSE + IF( REWI ) + $ REWIND NTRA + CALL CZGERU( IORDER, M, N, ALPHA, XX, INCX, + $ YY, INCY, AA, LDA ) + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9993 ) + FATAL = .TRUE. + GO TO 140 + END IF +* +* See what data changed inside subroutine. +* + ISAME( 1 ) = MS.EQ.M + ISAME( 2 ) = NS.EQ.N + ISAME( 3 ) = ALS.EQ.ALPHA + ISAME( 4 ) = LZE( XS, XX, LX ) + ISAME( 5 ) = INCXS.EQ.INCX + ISAME( 6 ) = LZE( YS, YY, LY ) + ISAME( 7 ) = INCYS.EQ.INCY + IF( NULL )THEN + ISAME( 8 ) = LZE( AS, AA, LAA ) + ELSE + ISAME( 8 ) = LZERES( 'ge', ' ', M, N, AS, AA, + $ LDA ) + END IF + ISAME( 9 ) = LDAS.EQ.LDA +* +* If data was incorrectly changed, report and return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 140 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result column by column. +* + IF( INCX.GT.0 )THEN + DO 50 I = 1, M + Z( I ) = X( I ) + 50 CONTINUE + ELSE + DO 60 I = 1, M + Z( I ) = X( M - I + 1 ) + 60 CONTINUE + END IF + DO 70 J = 1, N + IF( INCY.GT.0 )THEN + W( 1 ) = Y( J ) + ELSE + W( 1 ) = Y( N - J + 1 ) + END IF + IF( CONJ ) + $ W( 1 ) = DCONJG( W( 1 ) ) + CALL ZMVCH( 'N', M, 1, ALPHA, Z, NMAX, W, 1, + $ ONE, A( 1, J ), 1, YT, G, + $ AA( 1 + ( J - 1 )*LDA ), EPS, + $ ERR, FATAL, NOUT, .TRUE. ) + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and return. + IF( FATAL ) + $ GO TO 130 + 70 CONTINUE + ELSE +* Avoid repeating tests with M.le.0 or N.le.0. + GO TO 110 + END IF +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* + 110 CONTINUE +* + 120 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + WRITE( NOUT, FMT = 9999 )SNAME, NC + ELSE + WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX + END IF + GO TO 150 +* + 130 CONTINUE + WRITE( NOUT, FMT = 9995 )J +* + 140 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + WRITE( NOUT, FMT = 9994 )NC, SNAME, M, N, ALPHA, INCX, INCY, LDA +* + 150 CONTINUE + RETURN +* + 9999 FORMAT(' ',A12, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL', + $ 'S)' ) + 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9997 FORMAT(' ',A12, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', + $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, + $ ' - SUSPECT *******' ) + 9996 FORMAT( ' ******* ',A12, ' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) + 9994 FORMAT(1X, I6, ': ',A12, '(', 2( I3, ',' ), '(', F4.1, ',', F4.1, + $ '), X,', I2, ', Y,', I2, ', A,', I3, ') .' ) + 9993 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of ZCHK4. +* + END + SUBROUTINE ZCHK5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, NMAX, + $ INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, YT, G, + $ Z, IORDER ) +* +* Tests ZHER and ZHPR. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + COMPLEX*16 ZERO, HALF, ONE + PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ), + $ HALF = ( 0.5D0, 0.0D0 ), + $ ONE = ( 1.0D0, 0.0D0 ) ) + DOUBLE PRECISION RZERO + PARAMETER ( RZERO = 0.0D0 ) +* .. Scalar Arguments .. + DOUBLE PRECISION EPS, THRESH + INTEGER INCMAX, NALF, NIDIM, NINC, NMAX, NOUT, NTRA, + $ IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), X( NMAX ), XS( NMAX*INCMAX ), + $ XX( NMAX*INCMAX ), Y( NMAX ), + $ YS( NMAX*INCMAX ), YT( NMAX ), + $ YY( NMAX*INCMAX ), Z( NMAX ) + DOUBLE PRECISION G( NMAX ) + INTEGER IDIM( NIDIM ), INC( NINC ) +* .. Local Scalars .. + COMPLEX*16 ALPHA, TRANSL + DOUBLE PRECISION ERR, ERRMAX, RALPHA, RALS + INTEGER I, IA, IC, IN, INCX, INCXS, IX, J, JA, JJ, LAA, + $ LDA, LDAS, LJ, LX, N, NARGS, NC, NS + LOGICAL FULL, NULL, PACKED, RESET, SAME, UPPER + CHARACTER*1 UPLO, UPLOS + CHARACTER*14 CUPLO + CHARACTER*2 ICH +* .. Local Arrays .. + COMPLEX*16 W( 1 ) + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LZE, LZERES + EXTERNAL LZE, LZERES +* .. External Subroutines .. + EXTERNAL CZHER, CZHPR, ZMAKE, ZMVCH +* .. Intrinsic Functions .. + INTRINSIC ABS, DCMPLX, DCONJG, MAX, DBLE +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICH/'UL'/ +* .. Executable Statements .. + FULL = SNAME( 9: 9 ).EQ.'e' + PACKED = SNAME( 9: 9 ).EQ.'p' +* Define the number of arguments. + IF( FULL )THEN + NARGS = 7 + ELSE IF( PACKED )THEN + NARGS = 6 + END IF +* + NC = 0 + RESET = .TRUE. + ERRMAX = RZERO +* + DO 100 IN = 1, NIDIM + N = IDIM( IN ) +* Set LDA to 1 more than minimum value if room. + LDA = N + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 100 + IF( PACKED )THEN + LAA = ( N*( N + 1 ) )/2 + ELSE + LAA = LDA*N + END IF +* + DO 90 IC = 1, 2 + UPLO = ICH( IC: IC ) + IF (UPLO.EQ.'U')THEN + CUPLO = ' CblasUpper' + ELSE + CUPLO = ' CblasLower' + END IF + UPPER = UPLO.EQ.'U' +* + DO 80 IX = 1, NINC + INCX = INC( IX ) + LX = ABS( INCX )*N +* +* Generate the vector X. +* + TRANSL = HALF + CALL ZMAKE( 'ge', ' ', ' ', 1, N, X, 1, XX, ABS( INCX ), + $ 0, N - 1, RESET, TRANSL ) + IF( N.GT.1 )THEN + X( N/2 ) = ZERO + XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO + END IF +* + DO 70 IA = 1, NALF + RALPHA = DBLE( ALF( IA ) ) + ALPHA = DCMPLX( RALPHA, RZERO ) + NULL = N.LE.0.OR.RALPHA.EQ.RZERO +* +* Generate the matrix A. +* + TRANSL = ZERO + CALL ZMAKE( SNAME( 8: 9 ), UPLO, ' ', N, N, A, NMAX, + $ AA, LDA, N - 1, N - 1, RESET, TRANSL ) +* + NC = NC + 1 +* +* Save every datum before calling the subroutine. +* + UPLOS = UPLO + NS = N + RALS = RALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LX + XS( I ) = XX( I ) + 20 CONTINUE + INCXS = INCX +* +* Call the subroutine. +* + IF( FULL )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9993 )NC, SNAME, CUPLO, N, + $ RALPHA, INCX, LDA + IF( REWI ) + $ REWIND NTRA + CALL CZHER( IORDER, UPLO, N, RALPHA, XX, + $ INCX, AA, LDA ) + ELSE IF( PACKED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9994 )NC, SNAME, CUPLO, N, + $ RALPHA, INCX + IF( REWI ) + $ REWIND NTRA + CALL CZHPR( IORDER, UPLO, N, RALPHA, + $ XX, INCX, AA ) + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9992 ) + FATAL = .TRUE. + GO TO 120 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = UPLO.EQ.UPLOS + ISAME( 2 ) = NS.EQ.N + ISAME( 3 ) = RALS.EQ.RALPHA + ISAME( 4 ) = LZE( XS, XX, LX ) + ISAME( 5 ) = INCXS.EQ.INCX + IF( NULL )THEN + ISAME( 6 ) = LZE( AS, AA, LAA ) + ELSE + ISAME( 6 ) = LZERES( SNAME( 8: 9 ), UPLO, N, N, AS, + $ AA, LDA ) + END IF + IF( .NOT.PACKED )THEN + ISAME( 7 ) = LDAS.EQ.LDA + END IF +* +* If data was incorrectly changed, report and return. +* + SAME = .TRUE. + DO 30 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 30 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 120 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result column by column. +* + IF( INCX.GT.0 )THEN + DO 40 I = 1, N + Z( I ) = X( I ) + 40 CONTINUE + ELSE + DO 50 I = 1, N + Z( I ) = X( N - I + 1 ) + 50 CONTINUE + END IF + JA = 1 + DO 60 J = 1, N + W( 1 ) = DCONJG( Z( J ) ) + IF( UPPER )THEN + JJ = 1 + LJ = J + ELSE + JJ = J + LJ = N - J + 1 + END IF + CALL ZMVCH( 'N', LJ, 1, ALPHA, Z( JJ ), LJ, W, + $ 1, ONE, A( JJ, J ), 1, YT, G, + $ AA( JA ), EPS, ERR, FATAL, NOUT, + $ .TRUE. ) + IF( FULL )THEN + IF( UPPER )THEN + JA = JA + LDA + ELSE + JA = JA + LDA + 1 + END IF + ELSE + JA = JA + LJ + END IF + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and return. + IF( FATAL ) + $ GO TO 110 + 60 CONTINUE + ELSE +* Avoid repeating tests if N.le.0. + IF( N.LE.0 ) + $ GO TO 100 + END IF +* + 70 CONTINUE +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + WRITE( NOUT, FMT = 9999 )SNAME, NC + ELSE + WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX + END IF + GO TO 130 +* + 110 CONTINUE + WRITE( NOUT, FMT = 9995 )J +* + 120 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + IF( FULL )THEN + WRITE( NOUT, FMT = 9993 )NC, SNAME, CUPLO, N, RALPHA, INCX, LDA + ELSE IF( PACKED )THEN + WRITE( NOUT, FMT = 9994 )NC, SNAME, CUPLO, N, RALPHA, INCX + END IF +* + 130 CONTINUE + RETURN +* + 9999 FORMAT(' ',A12, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL', + $ 'S)' ) + 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9997 FORMAT(' ',A12, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', + $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, + $ ' - SUSPECT *******' ) + 9996 FORMAT( ' ******* ',A12, ' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) + 9994 FORMAT(1X, I6, ': ',A12, '(', A14, ',', I3, ',', F4.1, ', X,', + $ I2, ', AP) .' ) + 9993 FORMAT(1X, I6, ': ',A12, '(', A14, ',', I3, ',', F4.1, ', X,', + $ I2, ', A,', I3, ') .' ) + 9992 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of CZHK5. +* + END + SUBROUTINE ZCHK6( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, NMAX, + $ INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, YT, G, + $ Z, IORDER ) +* +* Tests ZHER2 and ZHPR2. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + COMPLEX*16 ZERO, HALF, ONE + PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ), + $ HALF = ( 0.5D0, 0.0D0 ), + $ ONE = ( 1.0D0, 0.0D0 ) ) + DOUBLE PRECISION RZERO + PARAMETER ( RZERO = 0.0D0 ) +* .. Scalar Arguments .. + DOUBLE PRECISION EPS, THRESH + INTEGER INCMAX, NALF, NIDIM, NINC, NMAX, NOUT, NTRA, + $ IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), X( NMAX ), XS( NMAX*INCMAX ), + $ XX( NMAX*INCMAX ), Y( NMAX ), + $ YS( NMAX*INCMAX ), YT( NMAX ), + $ YY( NMAX*INCMAX ), Z( NMAX, 2 ) + DOUBLE PRECISION G( NMAX ) + INTEGER IDIM( NIDIM ), INC( NINC ) +* .. Local Scalars .. + COMPLEX*16 ALPHA, ALS, TRANSL + DOUBLE PRECISION ERR, ERRMAX + INTEGER I, IA, IC, IN, INCX, INCXS, INCY, INCYS, IX, + $ IY, J, JA, JJ, LAA, LDA, LDAS, LJ, LX, LY, N, + $ NARGS, NC, NS + LOGICAL FULL, NULL, PACKED, RESET, SAME, UPPER + CHARACTER*1 UPLO, UPLOS + CHARACTER*14 CUPLO + CHARACTER*2 ICH +* .. Local Arrays .. + COMPLEX*16 W( 2 ) + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LZE, LZERES + EXTERNAL LZE, LZERES +* .. External Subroutines .. + EXTERNAL CZHER2, CZHPR2, ZMAKE, ZMVCH +* .. Intrinsic Functions .. + INTRINSIC ABS, DCONJG, MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK +* .. Data statements .. + DATA ICH/'UL'/ +* .. Executable Statements .. + FULL = SNAME( 9: 9 ).EQ.'e' + PACKED = SNAME( 9: 9 ).EQ.'p' +* Define the number of arguments. + IF( FULL )THEN + NARGS = 9 + ELSE IF( PACKED )THEN + NARGS = 8 + END IF +* + NC = 0 + RESET = .TRUE. + ERRMAX = RZERO +* + DO 140 IN = 1, NIDIM + N = IDIM( IN ) +* Set LDA to 1 more than minimum value if room. + LDA = N + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 140 + IF( PACKED )THEN + LAA = ( N*( N + 1 ) )/2 + ELSE + LAA = LDA*N + END IF +* + DO 130 IC = 1, 2 + UPLO = ICH( IC: IC ) + IF (UPLO.EQ.'U')THEN + CUPLO = ' CblasUpper' + ELSE + CUPLO = ' CblasLower' + END IF + UPPER = UPLO.EQ.'U' +* + DO 120 IX = 1, NINC + INCX = INC( IX ) + LX = ABS( INCX )*N +* +* Generate the vector X. +* + TRANSL = HALF + CALL ZMAKE( 'ge', ' ', ' ', 1, N, X, 1, XX, ABS( INCX ), + $ 0, N - 1, RESET, TRANSL ) + IF( N.GT.1 )THEN + X( N/2 ) = ZERO + XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO + END IF +* + DO 110 IY = 1, NINC + INCY = INC( IY ) + LY = ABS( INCY )*N +* +* Generate the vector Y. +* + TRANSL = ZERO + CALL ZMAKE( 'ge', ' ', ' ', 1, N, Y, 1, YY, + $ ABS( INCY ), 0, N - 1, RESET, TRANSL ) + IF( N.GT.1 )THEN + Y( N/2 ) = ZERO + YY( 1 + ABS( INCY )*( N/2 - 1 ) ) = ZERO + END IF +* + DO 100 IA = 1, NALF + ALPHA = ALF( IA ) + NULL = N.LE.0.OR.ALPHA.EQ.ZERO +* +* Generate the matrix A. +* + TRANSL = ZERO + CALL ZMAKE( SNAME( 8: 9 ), UPLO, ' ', N, N, A, + $ NMAX, AA, LDA, N - 1, N - 1, RESET, + $ TRANSL ) +* + NC = NC + 1 +* +* Save every datum before calling the subroutine. +* + UPLOS = UPLO + NS = N + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LX + XS( I ) = XX( I ) + 20 CONTINUE + INCXS = INCX + DO 30 I = 1, LY + YS( I ) = YY( I ) + 30 CONTINUE + INCYS = INCY +* +* Call the subroutine. +* + IF( FULL )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9993 )NC, SNAME, CUPLO, N, + $ ALPHA, INCX, INCY, LDA + IF( REWI ) + $ REWIND NTRA + CALL CZHER2( IORDER, UPLO, N, ALPHA, XX, INCX, + $ YY, INCY, AA, LDA ) + ELSE IF( PACKED )THEN + IF( TRACE ) + $ WRITE( NTRA, FMT = 9994 )NC, SNAME, CUPLO, N, + $ ALPHA, INCX, INCY + IF( REWI ) + $ REWIND NTRA + CALL CZHPR2( IORDER, UPLO, N, ALPHA, XX, INCX, + $ YY, INCY, AA ) + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9992 ) + FATAL = .TRUE. + GO TO 160 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = UPLO.EQ.UPLOS + ISAME( 2 ) = NS.EQ.N + ISAME( 3 ) = ALS.EQ.ALPHA + ISAME( 4 ) = LZE( XS, XX, LX ) + ISAME( 5 ) = INCXS.EQ.INCX + ISAME( 6 ) = LZE( YS, YY, LY ) + ISAME( 7 ) = INCYS.EQ.INCY + IF( NULL )THEN + ISAME( 8 ) = LZE( AS, AA, LAA ) + ELSE + ISAME( 8 ) = LZERES( SNAME( 8: 9 ), UPLO, N, N, + $ AS, AA, LDA ) + END IF + IF( .NOT.PACKED )THEN + ISAME( 9 ) = LDAS.EQ.LDA + END IF +* +* If data was incorrectly changed, report and return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 160 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result column by column. +* + IF( INCX.GT.0 )THEN + DO 50 I = 1, N + Z( I, 1 ) = X( I ) + 50 CONTINUE + ELSE + DO 60 I = 1, N + Z( I, 1 ) = X( N - I + 1 ) + 60 CONTINUE + END IF + IF( INCY.GT.0 )THEN + DO 70 I = 1, N + Z( I, 2 ) = Y( I ) + 70 CONTINUE + ELSE + DO 80 I = 1, N + Z( I, 2 ) = Y( N - I + 1 ) + 80 CONTINUE + END IF + JA = 1 + DO 90 J = 1, N + W( 1 ) = ALPHA*DCONJG( Z( J, 2 ) ) + W( 2 ) = DCONJG( ALPHA )*DCONJG( Z( J, 1 ) ) + IF( UPPER )THEN + JJ = 1 + LJ = J + ELSE + JJ = J + LJ = N - J + 1 + END IF + CALL ZMVCH( 'N', LJ, 2, ONE, Z( JJ, 1 ), + $ NMAX, W, 1, ONE, A( JJ, J ), 1, + $ YT, G, AA( JA ), EPS, ERR, FATAL, + $ NOUT, .TRUE. ) + IF( FULL )THEN + IF( UPPER )THEN + JA = JA + LDA + ELSE + JA = JA + LDA + 1 + END IF + ELSE + JA = JA + LJ + END IF + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and return. + IF( FATAL ) + $ GO TO 150 + 90 CONTINUE + ELSE +* Avoid repeating tests with N.le.0. + IF( N.LE.0 ) + $ GO TO 140 + END IF +* + 100 CONTINUE +* + 110 CONTINUE +* + 120 CONTINUE +* + 130 CONTINUE +* + 140 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + WRITE( NOUT, FMT = 9999 )SNAME, NC + ELSE + WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX + END IF + GO TO 170 +* + 150 CONTINUE + WRITE( NOUT, FMT = 9995 )J +* + 160 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + IF( FULL )THEN + WRITE( NOUT, FMT = 9993 )NC, SNAME, CUPLO, N, ALPHA, INCX, + $ INCY, LDA + ELSE IF( PACKED )THEN + WRITE( NOUT, FMT = 9994 )NC, SNAME, CUPLO, N, ALPHA, INCX, INCY + END IF +* + 170 CONTINUE + RETURN +* + 9999 FORMAT(' ',A12, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL', + $ 'S)' ) + 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9997 FORMAT(' ',A12, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C', + $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2, + $ ' - SUSPECT *******' ) + 9996 FORMAT( ' ******* ',A12, ' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) + 9994 FORMAT(1X, I6, ': ',A12, '(', A14, ',', I3, ',(', F4.1, ',', + $ F4.1, '), X,', I2, ', Y,', I2, ', AP) .' ) + 9993 FORMAT(1X, I6, ': ',A12, '(', A14, ',', I3, ',(', F4.1, ',', + $ F4.1, '), X,', I2, ', Y,', I2, ', A,', I3, ') .' ) + 9992 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of ZCHK6. +* + END + SUBROUTINE ZMVCH( TRANS, M, N, ALPHA, A, NMAX, X, INCX, BETA, Y, + $ INCY, YT, G, YY, EPS, ERR, FATAL, NOUT, MV ) +* +* Checks the results of the computational tests. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + COMPLEX*16 ZERO + PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ) ) + DOUBLE PRECISION RZERO, RONE + PARAMETER ( RZERO = 0.0D0, RONE = 1.0D0 ) +* .. Scalar Arguments .. + COMPLEX*16 ALPHA, BETA + DOUBLE PRECISION EPS, ERR + INTEGER INCX, INCY, M, N, NMAX, NOUT + LOGICAL FATAL, MV + CHARACTER*1 TRANS +* .. Array Arguments .. + COMPLEX*16 A( NMAX, * ), X( * ), Y( * ), YT( * ), YY( * ) + DOUBLE PRECISION G( * ) +* .. Local Scalars .. + COMPLEX*16 C + DOUBLE PRECISION ERRI + INTEGER I, INCXL, INCYL, IY, J, JX, KX, KY, ML, NL + LOGICAL CTRAN, TRAN +* .. Intrinsic Functions .. + INTRINSIC ABS, DIMAG, DCONJG, MAX, DBLE, SQRT +* .. Statement Functions .. + DOUBLE PRECISION ABS1 +* .. Statement Function definitions .. + ABS1( C ) = ABS( DBLE( C ) ) + ABS( DIMAG( C ) ) +* .. Executable Statements .. + TRAN = TRANS.EQ.'T' + CTRAN = TRANS.EQ.'C' + IF( TRAN.OR.CTRAN )THEN + ML = N + NL = M + ELSE + ML = M + NL = N + END IF + IF( INCX.LT.0 )THEN + KX = NL + INCXL = -1 + ELSE + KX = 1 + INCXL = 1 + END IF + IF( INCY.LT.0 )THEN + KY = ML + INCYL = -1 + ELSE + KY = 1 + INCYL = 1 + END IF +* +* Compute expected result in YT using data in A, X and Y. +* Compute gauges in G. +* + IY = KY + DO 40 I = 1, ML + YT( IY ) = ZERO + G( IY ) = RZERO + JX = KX + IF( TRAN )THEN + DO 10 J = 1, NL + YT( IY ) = YT( IY ) + A( J, I )*X( JX ) + G( IY ) = G( IY ) + ABS1( A( J, I ) )*ABS1( X( JX ) ) + JX = JX + INCXL + 10 CONTINUE + ELSE IF( CTRAN )THEN + DO 20 J = 1, NL + YT( IY ) = YT( IY ) + DCONJG( A( J, I ) )*X( JX ) + G( IY ) = G( IY ) + ABS1( A( J, I ) )*ABS1( X( JX ) ) + JX = JX + INCXL + 20 CONTINUE + ELSE + DO 30 J = 1, NL + YT( IY ) = YT( IY ) + A( I, J )*X( JX ) + G( IY ) = G( IY ) + ABS1( A( I, J ) )*ABS1( X( JX ) ) + JX = JX + INCXL + 30 CONTINUE + END IF + YT( IY ) = ALPHA*YT( IY ) + BETA*Y( IY ) + G( IY ) = ABS1( ALPHA )*G( IY ) + ABS1( BETA )*ABS1( Y( IY ) ) + IY = IY + INCYL + 40 CONTINUE +* +* Compute the error ratio for this result. +* + ERR = ZERO + DO 50 I = 1, ML + ERRI = ABS( YT( I ) - YY( 1 + ( I - 1 )*ABS( INCY ) ) )/EPS + IF( G( I ).NE.RZERO ) + $ ERRI = ERRI/G( I ) + ERR = MAX( ERR, ERRI ) + IF( ERR*SQRT( EPS ).GE.RONE ) + $ GO TO 60 + 50 CONTINUE +* If the loop completes, all results are at least half accurate. + GO TO 80 +* +* Report fatal error. +* + 60 FATAL = .TRUE. + WRITE( NOUT, FMT = 9999 ) + DO 70 I = 1, ML + IF( MV )THEN + WRITE( NOUT, FMT = 9998 )I, YT( I ), + $ YY( 1 + ( I - 1 )*ABS( INCY ) ) + ELSE + WRITE( NOUT, FMT = 9998 )I, + $ YY( 1 + ( I - 1 )*ABS( INCY ) ), YT( I ) + END IF + 70 CONTINUE +* + 80 CONTINUE + RETURN +* + 9999 FORMAT(' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL', + $ 'F ACCURATE *******', /' EXPECTED RE', + $ 'SULT COMPUTED RESULT' ) + 9998 FORMAT( 1X, I7, 2( ' (', G15.6, ',', G15.6, ')' ) ) +* +* End of ZMVCH. +* + END + LOGICAL FUNCTION LZE( RI, RJ, LR ) +* +* Tests if two arrays are identical. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Scalar Arguments .. + INTEGER LR +* .. Array Arguments .. + COMPLEX*16 RI( * ), RJ( * ) +* .. Local Scalars .. + INTEGER I +* .. Executable Statements .. + DO 10 I = 1, LR + IF( RI( I ).NE.RJ( I ) ) + $ GO TO 20 + 10 CONTINUE + LZE = .TRUE. + GO TO 30 + 20 CONTINUE + LZE = .FALSE. + 30 RETURN +* +* End of LZE. +* + END + LOGICAL FUNCTION LZERES( TYPE, UPLO, M, N, AA, AS, LDA ) +* +* Tests if selected elements in two arrays are equal. +* +* TYPE is 'ge', 'he' or 'hp'. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Scalar Arguments .. + INTEGER LDA, M, N + CHARACTER*1 UPLO + CHARACTER*2 TYPE +* .. Array Arguments .. + COMPLEX*16 AA( LDA, * ), AS( LDA, * ) +* .. Local Scalars .. + INTEGER I, IBEG, IEND, J + LOGICAL UPPER +* .. Executable Statements .. + UPPER = UPLO.EQ.'U' + IF( TYPE.EQ.'ge' )THEN + DO 20 J = 1, N + DO 10 I = M + 1, LDA + IF( AA( I, J ).NE.AS( I, J ) ) + $ GO TO 70 + 10 CONTINUE + 20 CONTINUE + ELSE IF( TYPE.EQ.'he' )THEN + DO 50 J = 1, N + IF( UPPER )THEN + IBEG = 1 + IEND = J + ELSE + IBEG = J + IEND = N + END IF + DO 30 I = 1, IBEG - 1 + IF( AA( I, J ).NE.AS( I, J ) ) + $ GO TO 70 + 30 CONTINUE + DO 40 I = IEND + 1, LDA + IF( AA( I, J ).NE.AS( I, J ) ) + $ GO TO 70 + 40 CONTINUE + 50 CONTINUE + END IF +* + 60 CONTINUE + LZERES = .TRUE. + GO TO 80 + 70 CONTINUE + LZERES = .FALSE. + 80 RETURN +* +* End of LZERES. +* + END + COMPLEX*16 FUNCTION ZBEG( RESET ) +* +* Generates complex numbers as pairs of random numbers uniformly +* distributed between -0.5 and 0.5. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Scalar Arguments .. + LOGICAL RESET +* .. Local Scalars .. + INTEGER I, IC, J, MI, MJ +* .. Save statement .. + SAVE I, IC, J, MI, MJ +* .. Intrinsic Functions .. + INTRINSIC DCMPLX +* .. Executable Statements .. + IF( RESET )THEN +* Initialize local variables. + MI = 891 + MJ = 457 + I = 7 + J = 7 + IC = 0 + RESET = .FALSE. + END IF +* +* The sequence of values of I or J is bounded between 1 and 999. +* If initial I or J = 1,2,3,6,7 or 9, the period will be 50. +* If initial I or J = 4 or 8, the period will be 25. +* If initial I or J = 5, the period will be 10. +* IC is used to break up the period by skipping 1 value of I or J +* in 6. +* + IC = IC + 1 + 10 I = I*MI + J = J*MJ + I = I - 1000*( I/1000 ) + J = J - 1000*( J/1000 ) + IF( IC.GE.5 )THEN + IC = 0 + GO TO 10 + END IF + ZBEG = DCMPLX( ( I - 500 )/1001.0, ( J - 500 )/1001.0 ) + RETURN +* +* End of ZBEG. +* + END + DOUBLE PRECISION FUNCTION DDIFF( X, Y ) +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* +* .. Scalar Arguments .. + DOUBLE PRECISION X, Y +* .. Executable Statements .. + DDIFF = X - Y + RETURN +* +* End of DDIFF. +* + END + SUBROUTINE ZMAKE( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, KL, + $ KU, RESET, TRANSL ) +* +* Generates values for an M by N matrix A within the bandwidth +* defined by KL and KU. +* Stores the values in the array AA in the data structure required +* by the routine, with unwanted elements set to rogue value. +* +* TYPE is 'ge', 'gb', 'he', 'hb', 'hp', 'tr', 'tb' OR 'tp'. +* +* Auxiliary routine for test program for Level 2 Blas. +* +* -- Written on 10-August-1987. +* Richard Hanson, Sandia National Labs. +* Jeremy Du Croz, NAG Central Office. +* +* .. Parameters .. + COMPLEX*16 ZERO, ONE + PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ), + $ ONE = ( 1.0D0, 0.0D0 ) ) + COMPLEX*16 ROGUE + PARAMETER ( ROGUE = ( -1.0D10, 1.0D10 ) ) + DOUBLE PRECISION RZERO + PARAMETER ( RZERO = 0.0D0 ) + DOUBLE PRECISION RROGUE + PARAMETER ( RROGUE = -1.0D10 ) +* .. Scalar Arguments .. + COMPLEX*16 TRANSL + INTEGER KL, KU, LDA, M, N, NMAX + LOGICAL RESET + CHARACTER*1 DIAG, UPLO + CHARACTER*2 TYPE +* .. Array Arguments .. + COMPLEX*16 A( NMAX, * ), AA( * ) +* .. Local Scalars .. + INTEGER I, I1, I2, I3, IBEG, IEND, IOFF, J, JJ, KK + LOGICAL GEN, LOWER, SYM, TRI, UNIT, UPPER +* .. External Functions .. + COMPLEX*16 ZBEG + EXTERNAL ZBEG +* .. Intrinsic Functions .. + INTRINSIC DCMPLX, DCONJG, MAX, MIN, DBLE +* .. Executable Statements .. + GEN = TYPE( 1: 1 ).EQ.'g' + SYM = TYPE( 1: 1 ).EQ.'h' + TRI = TYPE( 1: 1 ).EQ.'t' + UPPER = ( SYM.OR.TRI ).AND.UPLO.EQ.'U' + LOWER = ( SYM.OR.TRI ).AND.UPLO.EQ.'L' + UNIT = TRI.AND.DIAG.EQ.'U' +* +* Generate data in array A. +* + DO 20 J = 1, N + DO 10 I = 1, M + IF( GEN.OR.( UPPER.AND.I.LE.J ).OR.( LOWER.AND.I.GE.J ) ) + $ THEN + IF( ( I.LE.J.AND.J - I.LE.KU ).OR. + $ ( I.GE.J.AND.I - J.LE.KL ) )THEN + A( I, J ) = ZBEG( RESET ) + TRANSL + ELSE + A( I, J ) = ZERO + END IF + IF( I.NE.J )THEN + IF( SYM )THEN + A( J, I ) = DCONJG( A( I, J ) ) + ELSE IF( TRI )THEN + A( J, I ) = ZERO + END IF + END IF + END IF + 10 CONTINUE + IF( SYM ) + $ A( J, J ) = DCMPLX( DBLE( A( J, J ) ), RZERO ) + IF( TRI ) + $ A( J, J ) = A( J, J ) + ONE + IF( UNIT ) + $ A( J, J ) = ONE + 20 CONTINUE +* +* Store elements in array AS in data structure required by routine. +* + IF( TYPE.EQ.'ge' )THEN + DO 50 J = 1, N + DO 30 I = 1, M + AA( I + ( J - 1 )*LDA ) = A( I, J ) + 30 CONTINUE + DO 40 I = M + 1, LDA + AA( I + ( J - 1 )*LDA ) = ROGUE + 40 CONTINUE + 50 CONTINUE + ELSE IF( TYPE.EQ.'gb' )THEN + DO 90 J = 1, N + DO 60 I1 = 1, KU + 1 - J + AA( I1 + ( J - 1 )*LDA ) = ROGUE + 60 CONTINUE + DO 70 I2 = I1, MIN( KL + KU + 1, KU + 1 + M - J ) + AA( I2 + ( J - 1 )*LDA ) = A( I2 + J - KU - 1, J ) + 70 CONTINUE + DO 80 I3 = I2, LDA + AA( I3 + ( J - 1 )*LDA ) = ROGUE + 80 CONTINUE + 90 CONTINUE + ELSE IF( TYPE.EQ.'he'.OR.TYPE.EQ.'tr' )THEN + DO 130 J = 1, N + IF( UPPER )THEN + IBEG = 1 + IF( UNIT )THEN + IEND = J - 1 + ELSE + IEND = J + END IF + ELSE + IF( UNIT )THEN + IBEG = J + 1 + ELSE + IBEG = J + END IF + IEND = N + END IF + DO 100 I = 1, IBEG - 1 + AA( I + ( J - 1 )*LDA ) = ROGUE + 100 CONTINUE + DO 110 I = IBEG, IEND + AA( I + ( J - 1 )*LDA ) = A( I, J ) + 110 CONTINUE + DO 120 I = IEND + 1, LDA + AA( I + ( J - 1 )*LDA ) = ROGUE + 120 CONTINUE + IF( SYM )THEN + JJ = J + ( J - 1 )*LDA + AA( JJ ) = DCMPLX( DBLE( AA( JJ ) ), RROGUE ) + END IF + 130 CONTINUE + ELSE IF( TYPE.EQ.'hb'.OR.TYPE.EQ.'tb' )THEN + DO 170 J = 1, N + IF( UPPER )THEN + KK = KL + 1 + IBEG = MAX( 1, KL + 2 - J ) + IF( UNIT )THEN + IEND = KL + ELSE + IEND = KL + 1 + END IF + ELSE + KK = 1 + IF( UNIT )THEN + IBEG = 2 + ELSE + IBEG = 1 + END IF + IEND = MIN( KL + 1, 1 + M - J ) + END IF + DO 140 I = 1, IBEG - 1 + AA( I + ( J - 1 )*LDA ) = ROGUE + 140 CONTINUE + DO 150 I = IBEG, IEND + AA( I + ( J - 1 )*LDA ) = A( I + J - KK, J ) + 150 CONTINUE + DO 160 I = IEND + 1, LDA + AA( I + ( J - 1 )*LDA ) = ROGUE + 160 CONTINUE + IF( SYM )THEN + JJ = KK + ( J - 1 )*LDA + AA( JJ ) = DCMPLX( DBLE( AA( JJ ) ), RROGUE ) + END IF + 170 CONTINUE + ELSE IF( TYPE.EQ.'hp'.OR.TYPE.EQ.'tp' )THEN + IOFF = 0 + DO 190 J = 1, N + IF( UPPER )THEN + IBEG = 1 + IEND = J + ELSE + IBEG = J + IEND = N + END IF + DO 180 I = IBEG, IEND + IOFF = IOFF + 1 + AA( IOFF ) = A( I, J ) + IF( I.EQ.J )THEN + IF( UNIT ) + $ AA( IOFF ) = ROGUE + IF( SYM ) + $ AA( IOFF ) = DCMPLX( DBLE( AA( IOFF ) ), RROGUE ) + END IF + 180 CONTINUE + 190 CONTINUE + END IF + RETURN +* +* End of ZMAKE. +* + END diff --git a/CBLAS/testing/c_zblat3.f b/CBLAS/testing/c_zblat3.f new file mode 100644 index 000000000..6e9dbbd8c --- /dev/null +++ b/CBLAS/testing/c_zblat3.f @@ -0,0 +1,2791 @@ + PROGRAM ZBLAT3 +* +* Test program for the COMPLEX*16 Level 3 Blas. +* +* The program must be driven by a short data file. The first 13 records +* of the file are read using list-directed input, the last 9 records +* are read using the format ( A12,L2 ). An annotated example of a data +* file can be obtained by deleting the first 3 characters from the +* following 22 lines: +* 'CBLAT3.SNAP' NAME OF SNAPSHOT OUTPUT FILE +* -1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0) +* F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD. +* F LOGICAL FLAG, T TO STOP ON FAILURES. +* T LOGICAL FLAG, T TO TEST ERROR EXITS. +* 2 0 TO TEST COLUMN-MAJOR, 1 TO TEST ROW-MAJOR, 2 TO TEST BOTH +* 16.0 THRESHOLD VALUE OF TEST RATIO +* 6 NUMBER OF VALUES OF N +* 0 1 2 3 5 9 VALUES OF N +* 3 NUMBER OF VALUES OF ALPHA +* (0.0,0.0) (1.0,0.0) (0.7,-0.9) VALUES OF ALPHA +* 3 NUMBER OF VALUES OF BETA +* (0.0,0.0) (1.0,0.0) (1.3,-1.1) VALUES OF BETA +* ZGEMM T PUT F FOR NO TEST. SAME COLUMNS. +* ZHEMM T PUT F FOR NO TEST. SAME COLUMNS. +* ZSYMM T PUT F FOR NO TEST. SAME COLUMNS. +* ZTRMM T PUT F FOR NO TEST. SAME COLUMNS. +* ZTRSM T PUT F FOR NO TEST. SAME COLUMNS. +* ZHERK T PUT F FOR NO TEST. SAME COLUMNS. +* ZSYRK T PUT F FOR NO TEST. SAME COLUMNS. +* ZHER2K T PUT F FOR NO TEST. SAME COLUMNS. +* ZSYR2K T PUT F FOR NO TEST. SAME COLUMNS. +* +* See: +* +* Dongarra J. J., Du Croz J. J., Duff I. S. and Hammarling S. +* A Set of Level 3 Basic Linear Algebra Subprograms. +* +* Technical Memorandum No.88 (Revision 1), Mathematics and +* Computer Science Division, Argonne National Laboratory, 9700 +* South Cass Avenue, Argonne, Illinois 60439, US. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + INTEGER NIN, NOUT + PARAMETER ( NIN = 5, NOUT = 6 ) + INTEGER NSUBS + PARAMETER ( NSUBS = 9 ) + COMPLEX*16 ZERO, ONE + PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ), + $ ONE = ( 1.0D0, 0.0D0 ) ) + DOUBLE PRECISION RZERO, RHALF, RONE + PARAMETER ( RZERO = 0.0D0, RHALF = 0.5D0, RONE = 1.0D0 ) + INTEGER NMAX + PARAMETER ( NMAX = 65 ) + INTEGER NIDMAX, NALMAX, NBEMAX + PARAMETER ( NIDMAX = 9, NALMAX = 7, NBEMAX = 7 ) +* .. Local Scalars .. + DOUBLE PRECISION EPS, ERR, THRESH + INTEGER I, ISNUM, J, N, NALF, NBET, NIDIM, NTRA, + $ LAYOUT + LOGICAL FATAL, LTESTT, REWI, SAME, SFATAL, TRACE, + $ TSTERR, CORDER, RORDER + CHARACTER*1 TRANSA, TRANSB + CHARACTER*12 SNAMET + CHARACTER*32 SNAPS +* .. Local Arrays .. + COMPLEX*16 AA( NMAX*NMAX ), AB( NMAX, 2*NMAX ), + $ ALF( NALMAX ), AS( NMAX*NMAX ), + $ BB( NMAX*NMAX ), BET( NBEMAX ), + $ BS( NMAX*NMAX ), C( NMAX, NMAX ), + $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ), + $ W( 2*NMAX ) + DOUBLE PRECISION G( NMAX ) + INTEGER IDIM( NIDMAX ) + LOGICAL LTEST( NSUBS ) + CHARACTER*12 SNAMES( NSUBS ) +* .. External Functions .. + DOUBLE PRECISION DDIFF + LOGICAL LZE + EXTERNAL DDIFF, LZE +* .. External Subroutines .. + EXTERNAL ZCHK1, ZCHK2, ZCHK3, ZCHK4, ZCHK5,ZMMCH +* .. Intrinsic Functions .. + INTRINSIC MAX, MIN +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL LERR, OK + CHARACTER*12 SRNAMT +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK, LERR + COMMON /SRNAMC/SRNAMT +* .. Data statements .. + DATA SNAMES/'cblas_zgemm ', 'cblas_zhemm ', + $ 'cblas_zsymm ', 'cblas_ztrmm ', 'cblas_ztrsm ', + $ 'cblas_zherk ', 'cblas_zsyrk ', 'cblas_zher2k', + $ 'cblas_zsyr2k'/ +* .. Executable Statements .. +* + NOUTC = NOUT +* +* Read name and unit number for snapshot output file and open file. +* + READ( NIN, FMT = * )SNAPS + READ( NIN, FMT = * )NTRA + TRACE = NTRA.GE.0 + IF( TRACE )THEN + OPEN( NTRA, FILE = SNAPS, STATUS = 'NEW' ) + END IF +* Read the flag that directs rewinding of the snapshot file. + READ( NIN, FMT = * )REWI + REWI = REWI.AND.TRACE +* Read the flag that directs stopping on any failure. + READ( NIN, FMT = * )SFATAL +* Read the flag that indicates whether error exits are to be tested. + READ( NIN, FMT = * )TSTERR +* Read the flag that indicates whether row-major data layout to be tested. + READ( NIN, FMT = * )LAYOUT +* Read the threshold value of the test ratio + READ( NIN, FMT = * )THRESH +* +* Read and check the parameter values for the tests. +* +* Values of N + READ( NIN, FMT = * )NIDIM + IF( NIDIM.LT.1.OR.NIDIM.GT.NIDMAX )THEN + WRITE( NOUT, FMT = 9997 )'N', NIDMAX + GO TO 220 + END IF + READ( NIN, FMT = * )( IDIM( I ), I = 1, NIDIM ) + DO 10 I = 1, NIDIM + IF( IDIM( I ).LT.0.OR.IDIM( I ).GT.NMAX )THEN + WRITE( NOUT, FMT = 9996 )NMAX + GO TO 220 + END IF + 10 CONTINUE +* Values of ALPHA + READ( NIN, FMT = * )NALF + IF( NALF.LT.1.OR.NALF.GT.NALMAX )THEN + WRITE( NOUT, FMT = 9997 )'ALPHA', NALMAX + GO TO 220 + END IF + READ( NIN, FMT = * )( ALF( I ), I = 1, NALF ) +* Values of BETA + READ( NIN, FMT = * )NBET + IF( NBET.LT.1.OR.NBET.GT.NBEMAX )THEN + WRITE( NOUT, FMT = 9997 )'BETA', NBEMAX + GO TO 220 + END IF + READ( NIN, FMT = * )( BET( I ), I = 1, NBET ) +* +* Report values of parameters. +* + WRITE( NOUT, FMT = 9995 ) + WRITE( NOUT, FMT = 9994 )( IDIM( I ), I = 1, NIDIM ) + WRITE( NOUT, FMT = 9993 )( ALF( I ), I = 1, NALF ) + WRITE( NOUT, FMT = 9992 )( BET( I ), I = 1, NBET ) + IF( .NOT.TSTERR )THEN + WRITE( NOUT, FMT = * ) + WRITE( NOUT, FMT = 9984 ) + END IF + WRITE( NOUT, FMT = * ) + WRITE( NOUT, FMT = 9999 )THRESH + WRITE( NOUT, FMT = * ) + + RORDER = .FALSE. + CORDER = .FALSE. + IF (LAYOUT.EQ.2) THEN + RORDER = .TRUE. + CORDER = .TRUE. + WRITE( *, FMT = 10002 ) + ELSE IF (LAYOUT.EQ.1) THEN + RORDER = .TRUE. + WRITE( *, FMT = 10001 ) + ELSE IF (LAYOUT.EQ.0) THEN + CORDER = .TRUE. + WRITE( *, FMT = 10000 ) + END IF + WRITE( *, FMT = * ) + +* +* Read names of subroutines and flags which indicate +* whether they are to be tested. +* + DO 20 I = 1, NSUBS + LTEST( I ) = .FALSE. + 20 CONTINUE + 30 READ( NIN, FMT = 9988, END = 60 )SNAMET, LTESTT + DO 40 I = 1, NSUBS + IF( SNAMET.EQ.SNAMES( I ) ) + $ GO TO 50 + 40 CONTINUE + WRITE( NOUT, FMT = 9990 )SNAMET + STOP + 50 LTEST( I ) = LTESTT + GO TO 30 +* + 60 CONTINUE + CLOSE ( NIN ) +* +* Compute EPS (the machine precision). +* + EPS = RONE + 70 CONTINUE + IF( DDIFF( RONE + EPS, RONE ).EQ.RZERO ) + $ GO TO 80 + EPS = RHALF*EPS + GO TO 70 + 80 CONTINUE + EPS = EPS + EPS + WRITE( NOUT, FMT = 9998 )EPS +* +* Check the reliability of ZMMCH using exact data. +* + N = MIN( 32, NMAX ) + DO 100 J = 1, N + DO 90 I = 1, N + AB( I, J ) = MAX( I - J + 1, 0 ) + 90 CONTINUE + AB( J, NMAX + 1 ) = J + AB( 1, NMAX + J ) = J + C( J, 1 ) = ZERO + 100 CONTINUE + DO 110 J = 1, N + CC( J ) = J*( ( J + 1 )*J )/2 - ( ( J + 1 )*J*( J - 1 ) )/3 + 110 CONTINUE +* CC holds the exact result. On exit from ZMMCH CT holds +* the result computed by ZMMCH. + TRANSA = 'N' + TRANSB = 'N' + CALL ZMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX, + $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC, + $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. ) + SAME = LZE( CC, CT, N ) + IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN + WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR + STOP + END IF + TRANSB = 'C' + CALL ZMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX, + $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC, + $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. ) + SAME = LZE( CC, CT, N ) + IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN + WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR + STOP + END IF + DO 120 J = 1, N + AB( J, NMAX + 1 ) = N - J + 1 + AB( 1, NMAX + J ) = N - J + 1 + 120 CONTINUE + DO 130 J = 1, N + CC( N - J + 1 ) = J*( ( J + 1 )*J )/2 - + $ ( ( J + 1 )*J*( J - 1 ) )/3 + 130 CONTINUE + TRANSA = 'C' + TRANSB = 'N' + CALL ZMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX, + $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC, + $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. ) + SAME = LZE( CC, CT, N ) + IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN + WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR + STOP + END IF + TRANSB = 'C' + CALL ZMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX, + $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC, + $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. ) + SAME = LZE( CC, CT, N ) + IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN + WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR + STOP + END IF +* +* Test each subroutine in turn. +* + DO 200 ISNUM = 1, NSUBS + WRITE( NOUT, FMT = * ) + IF( .NOT.LTEST( ISNUM ) )THEN +* Subprogram is not to be tested. + WRITE( NOUT, FMT = 9987 )SNAMES( ISNUM ) + ELSE + SRNAMT = SNAMES( ISNUM ) +* Test error exits. + IF( TSTERR )THEN + CALL CZ3CHKE( SNAMES( ISNUM ) ) + WRITE( NOUT, FMT = * ) + END IF +* Test computations. + INFOT = 0 + OK = .TRUE. + FATAL = .FALSE. + GO TO ( 140, 150, 150, 160, 160, 170, 170, + $ 180, 180 )ISNUM +* Test ZGEMM, 01. + 140 IF (CORDER) THEN + CALL ZCHK1(SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, + $ CC, CS, CT, G, 0 ) + END IF + IF (RORDER) THEN + CALL ZCHK1(SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, + $ CC, CS, CT, G, 1 ) + END IF + GO TO 190 +* Test ZHEMM, 02, ZSYMM, 03. + 150 IF (CORDER) THEN + CALL ZCHK2(SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, + $ CC, CS, CT, G, 0 ) + END IF + IF (RORDER) THEN + CALL ZCHK2(SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, + $ CC, CS, CT, G, 1 ) + END IF + GO TO 190 +* Test ZTRMM, 04, ZTRSM, 05. + 160 IF (CORDER) THEN + CALL ZCHK3(SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NMAX, AB, + $ AA, AS, AB( 1, NMAX + 1 ), BB, BS, CT, G, C, + $ 0 ) + END IF + IF (RORDER) THEN + CALL ZCHK3(SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NMAX, AB, + $ AA, AS, AB( 1, NMAX + 1 ), BB, BS, CT, G, C, + $ 1 ) + END IF + GO TO 190 +* Test ZHERK, 06, ZSYRK, 07. + 170 IF (CORDER) THEN + CALL ZCHK4(SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, + $ CC, CS, CT, G, 0 ) + END IF + IF (RORDER) THEN + CALL ZCHK4(SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C, + $ CC, CS, CT, G, 1 ) + END IF + GO TO 190 +* Test ZHER2K, 08, ZSYR2K, 09. + 180 IF (CORDER) THEN + CALL ZCHK5(SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, BB, BS, C, CC, CS, CT, G, W, + $ 0 ) + END IF + IF (RORDER) THEN + CALL ZCHK5(SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE, + $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, + $ NMAX, AB, AA, AS, BB, BS, C, CC, CS, CT, G, W, + $ 1 ) + END IF + GO TO 190 +* + 190 IF( FATAL.AND.SFATAL ) + $ GO TO 210 + END IF + 200 CONTINUE + WRITE( NOUT, FMT = 9986 ) + GO TO 230 +* + 210 CONTINUE + WRITE( NOUT, FMT = 9985 ) + GO TO 230 +* + 220 CONTINUE + WRITE( NOUT, FMT = 9991 ) +* + 230 CONTINUE + IF( TRACE ) + $ CLOSE ( NTRA ) + CLOSE ( NOUT ) + STOP +* +10002 FORMAT( ' COLUMN-MAJOR AND ROW-MAJOR DATA LAYOUTS ARE TESTED' ) +10001 FORMAT(' ROW-MAJOR DATA LAYOUT IS TESTED' ) +10000 FORMAT(' COLUMN-MAJOR DATA LAYOUT IS TESTED' ) + 9999 FORMAT(' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES', + $ 'S THAN', F8.2 ) + 9998 FORMAT(' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1P, E9.1 ) + 9997 FORMAT(' NUMBER OF VALUES OF ', A, ' IS LESS THAN 1 OR GREATER ', + $ 'THAN ', I2 ) + 9996 FORMAT( ' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', I2 ) + 9995 FORMAT('TESTS OF THE COMPLEX*16 LEVEL 3 BLAS', //' THE F', + $ 'OLLOWING PARAMETER VALUES WILL BE USED:' ) + 9994 FORMAT( ' FOR N ', 9I6 ) + 9993 FORMAT( ' FOR ALPHA ', + $ 7( '(', F4.1, ',', F4.1, ') ', : ) ) + 9992 FORMAT( ' FOR BETA ', + $ 7( '(', F4.1, ',', F4.1, ') ', : ) ) + 9991 FORMAT( ' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM', + $ /' ******* TESTS ABANDONED *******' ) + 9990 FORMAT(' SUBPROGRAM NAME ', A12,' NOT RECOGNIZED', /' ******* T', + $ 'ESTS ABANDONED *******' ) + 9989 FORMAT(' ERROR IN ZMMCH - IN-LINE DOT PRODUCTS ARE BEING EVALU', + $ 'ATED WRONGLY.', /' ZMMCH WAS CALLED WITH TRANSA = ', A1, + $ 'AND TRANSB = ', A1, /' AND RETURNED SAME = ', L1, ' AND ', + $ ' ERR = ', F12.3, '.', /' THIS MAY BE DUE TO FAULTS IN THE ', + $ 'ARITHMETIC OR THE COMPILER.', /' ******* TESTS ABANDONED ', + $ '*******' ) + 9988 FORMAT( A12,L2 ) + 9987 FORMAT( 1X, A12,' WAS NOT TESTED' ) + 9986 FORMAT( /' END OF TESTS' ) + 9985 FORMAT( /' ******* FATAL ERROR - TESTS ABANDONED *******' ) + 9984 FORMAT( ' ERROR-EXITS WILL NOT BE TESTED' ) +* +* End of ZBLAT3. +* + END + SUBROUTINE ZCHK1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX, + $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G, + $ IORDER ) +* +* Tests ZGEMM. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + COMPLEX*16 ZERO + PARAMETER ( ZERO = ( 0.0, 0.0 ) ) + DOUBLE PRECISION RZERO + PARAMETER ( RZERO = 0.0 ) +* .. Scalar Arguments .. + DOUBLE PRECISION EPS, THRESH + INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), B( NMAX, NMAX ), + $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ), + $ C( NMAX, NMAX ), CC( NMAX*NMAX ), + $ CS( NMAX*NMAX ), CT( NMAX ) + DOUBLE PRECISION G( NMAX ) + INTEGER IDIM( NIDIM ) +* .. Local Scalars .. + COMPLEX*16 ALPHA, ALS, BETA, BLS + DOUBLE PRECISION ERR, ERRMAX + INTEGER I, IA, IB, ICA, ICB, IK, IM, IN, K, KS, LAA, + $ LBB, LCC, LDA, LDAS, LDB, LDBS, LDC, LDCS, M, + $ MA, MB, MS, N, NA, NARGS, NB, NC, NS + LOGICAL NULL, RESET, SAME, TRANA, TRANB + CHARACTER*1 TRANAS, TRANBS, TRANSA, TRANSB + CHARACTER*3 ICH +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LZE, LZERES + EXTERNAL LZE, LZERES +* .. External Subroutines .. + EXTERNAL CZGEMM, ZMAKE, ZMMCH +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL LERR, OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK, LERR +* .. Data statements .. + DATA ICH/'NTC'/ +* .. Executable Statements .. +* + NARGS = 13 + NC = 0 + RESET = .TRUE. + ERRMAX = RZERO +* + DO 110 IM = 1, NIDIM + M = IDIM( IM ) +* + DO 100 IN = 1, NIDIM + N = IDIM( IN ) +* Set LDC to 1 more than minimum value if room. + LDC = M + IF( LDC.LT.NMAX ) + $ LDC = LDC + 1 +* Skip tests if not enough room. + IF( LDC.GT.NMAX ) + $ GO TO 100 + LCC = LDC*N + NULL = N.LE.0.OR.M.LE.0 +* + DO 90 IK = 1, NIDIM + K = IDIM( IK ) +* + DO 80 ICA = 1, 3 + TRANSA = ICH( ICA: ICA ) + TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C' +* + IF( TRANA )THEN + MA = K + NA = M + ELSE + MA = M + NA = K + END IF +* Set LDA to 1 more than minimum value if room. + LDA = MA + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 80 + LAA = LDA*NA +* +* Generate the matrix A. +* + CALL ZMAKE( 'ge', ' ', ' ', MA, NA, A, NMAX, AA, LDA, + $ RESET, ZERO ) +* + DO 70 ICB = 1, 3 + TRANSB = ICH( ICB: ICB ) + TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C' +* + IF( TRANB )THEN + MB = N + NB = K + ELSE + MB = K + NB = N + END IF +* Set LDB to 1 more than minimum value if room. + LDB = MB + IF( LDB.LT.NMAX ) + $ LDB = LDB + 1 +* Skip tests if not enough room. + IF( LDB.GT.NMAX ) + $ GO TO 70 + LBB = LDB*NB +* +* Generate the matrix B. +* + CALL ZMAKE( 'ge', ' ', ' ', MB, NB, B, NMAX, BB, + $ LDB, RESET, ZERO ) +* + DO 60 IA = 1, NALF + ALPHA = ALF( IA ) +* + DO 50 IB = 1, NBET + BETA = BET( IB ) +* +* Generate the matrix C. +* + CALL ZMAKE( 'ge', ' ', ' ', M, N, C, NMAX, + $ CC, LDC, RESET, ZERO ) +* + NC = NC + 1 +* +* Save every datum before calling the +* subroutine. +* + TRANAS = TRANSA + TRANBS = TRANSB + MS = M + NS = N + KS = K + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LBB + BS( I ) = BB( I ) + 20 CONTINUE + LDBS = LDB + BLS = BETA + DO 30 I = 1, LCC + CS( I ) = CC( I ) + 30 CONTINUE + LDCS = LDC +* +* Call the subroutine. +* + IF( TRACE ) + $ CALL ZPRCN1(NTRA, NC, SNAME, IORDER, + $ TRANSA, TRANSB, M, N, K, ALPHA, LDA, + $ LDB, BETA, LDC) + IF( REWI ) + $ REWIND NTRA + CALL CZGEMM( IORDER, TRANSA, TRANSB, M, N, + $ K, ALPHA, AA, LDA, BB, LDB, + $ BETA, CC, LDC ) +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9994 ) + FATAL = .TRUE. + GO TO 120 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = TRANSA.EQ.TRANAS + ISAME( 2 ) = TRANSB.EQ.TRANBS + ISAME( 3 ) = MS.EQ.M + ISAME( 4 ) = NS.EQ.N + ISAME( 5 ) = KS.EQ.K + ISAME( 6 ) = ALS.EQ.ALPHA + ISAME( 7 ) = LZE( AS, AA, LAA ) + ISAME( 8 ) = LDAS.EQ.LDA + ISAME( 9 ) = LZE( BS, BB, LBB ) + ISAME( 10 ) = LDBS.EQ.LDB + ISAME( 11 ) = BLS.EQ.BETA + IF( NULL )THEN + ISAME( 12 ) = LZE( CS, CC, LCC ) + ELSE + ISAME( 12 ) = LZERES( 'ge', ' ', M, N, CS, + $ CC, LDC ) + END IF + ISAME( 13 ) = LDCS.EQ.LDC +* +* If data was incorrectly changed, report +* and return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 120 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result. +* + CALL ZMMCH( TRANSA, TRANSB, M, N, K, + $ ALPHA, A, NMAX, B, NMAX, BETA, + $ C, NMAX, CT, G, CC, LDC, EPS, + $ ERR, FATAL, NOUT, .TRUE. ) + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and +* return. + IF( FATAL ) + $ GO TO 120 + END IF +* + 50 CONTINUE +* + 60 CONTINUE +* + 70 CONTINUE +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* + 110 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 130 +* + 120 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + CALL ZPRCN1(NOUT, NC, SNAME, IORDER, TRANSA, TRANSB, + $ M, N, K, ALPHA, LDA, LDB, BETA, LDC) +* + 130 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9996 FORMAT( ' ******* ', A12,' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( 1X, I6, ': ', A12,'(''', A1, ''',''', A1, ''',', + $ 3( I3, ',' ), '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, + $ ',(', F4.1, ',', F4.1, '), C,', I3, ').' ) + 9994 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of ZCHK1. +* + END +* + SUBROUTINE ZPRCN1(NOUT, NC, SNAME, IORDER, TRANSA, TRANSB, M, N, + $ K, ALPHA, LDA, LDB, BETA, LDC) + INTEGER NOUT, NC, IORDER, M, N, K, LDA, LDB, LDC + DOUBLE COMPLEX ALPHA, BETA + CHARACTER*1 TRANSA, TRANSB + CHARACTER*12 SNAME + CHARACTER*14 CRC, CTA,CTB + + IF (TRANSA.EQ.'N')THEN + CTA = ' CblasNoTrans' + ELSE IF (TRANSA.EQ.'T')THEN + CTA = ' CblasTrans' + ELSE + CTA = 'CblasConjTrans' + END IF + IF (TRANSB.EQ.'N')THEN + CTB = ' CblasNoTrans' + ELSE IF (TRANSB.EQ.'T')THEN + CTB = ' CblasTrans' + ELSE + CTB = 'CblasConjTrans' + END IF + IF (IORDER.EQ.1)THEN + CRC = ' CblasRowMajor' + ELSE + CRC = ' CblasColMajor' + END IF + WRITE(NOUT, FMT = 9995)NC,SNAME,CRC, CTA,CTB + WRITE(NOUT, FMT = 9994)M, N, K, ALPHA, LDA, LDB, BETA, LDC + + 9995 FORMAT( 1X, I6, ': ', A12,'(', A14, ',', A14, ',', A14, ',') + 9994 FORMAT( 10X, 3( I3, ',' ) ,' (', F4.1,',',F4.1,') , A,', + $ I3, ', B,', I3, ', (', F4.1,',',F4.1,') , C,', I3, ').' ) + END +* + SUBROUTINE ZCHK2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX, + $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G, + $ IORDER ) +* +* Tests ZHEMM and ZSYMM. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + COMPLEX*16 ZERO + PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ) ) + DOUBLE PRECISION RZERO + PARAMETER ( RZERO = 0.0D0 ) +* .. Scalar Arguments .. + DOUBLE PRECISION EPS, THRESH + INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), B( NMAX, NMAX ), + $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ), + $ C( NMAX, NMAX ), CC( NMAX*NMAX ), + $ CS( NMAX*NMAX ), CT( NMAX ) + DOUBLE PRECISION G( NMAX ) + INTEGER IDIM( NIDIM ) +* .. Local Scalars .. + COMPLEX*16 ALPHA, ALS, BETA, BLS + DOUBLE PRECISION ERR, ERRMAX + INTEGER I, IA, IB, ICS, ICU, IM, IN, LAA, LBB, LCC, + $ LDA, LDAS, LDB, LDBS, LDC, LDCS, M, MS, N, NA, + $ NARGS, NC, NS + LOGICAL CONJ, LEFT, NULL, RESET, SAME + CHARACTER*1 SIDE, SIDES, UPLO, UPLOS + CHARACTER*2 ICHS, ICHU +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LZE, LZERES + EXTERNAL LZE, LZERES +* .. External Subroutines .. + EXTERNAL CZHEMM, ZMAKE, ZMMCH, CZSYMM +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL LERR, OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK, LERR +* .. Data statements .. + DATA ICHS/'LR'/, ICHU/'UL'/ +* .. Executable Statements .. + CONJ = SNAME( 8: 9 ).EQ.'he' +* + NARGS = 12 + NC = 0 + RESET = .TRUE. + ERRMAX = RZERO +* + DO 100 IM = 1, NIDIM + M = IDIM( IM ) +* + DO 90 IN = 1, NIDIM + N = IDIM( IN ) +* Set LDC to 1 more than minimum value if room. + LDC = M + IF( LDC.LT.NMAX ) + $ LDC = LDC + 1 +* Skip tests if not enough room. + IF( LDC.GT.NMAX ) + $ GO TO 90 + LCC = LDC*N + NULL = N.LE.0.OR.M.LE.0 +* Set LDB to 1 more than minimum value if room. + LDB = M + IF( LDB.LT.NMAX ) + $ LDB = LDB + 1 +* Skip tests if not enough room. + IF( LDB.GT.NMAX ) + $ GO TO 90 + LBB = LDB*N +* +* Generate the matrix B. +* + CALL ZMAKE( 'ge', ' ', ' ', M, N, B, NMAX, BB, LDB, RESET, + $ ZERO ) +* + DO 80 ICS = 1, 2 + SIDE = ICHS( ICS: ICS ) + LEFT = SIDE.EQ.'L' +* + IF( LEFT )THEN + NA = M + ELSE + NA = N + END IF +* Set LDA to 1 more than minimum value if room. + LDA = NA + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 80 + LAA = LDA*NA +* + DO 70 ICU = 1, 2 + UPLO = ICHU( ICU: ICU ) +* +* Generate the hermitian or symmetric matrix A. +* + CALL ZMAKE(SNAME( 8: 9 ), UPLO, ' ', NA, NA, A, NMAX, + $ AA, LDA, RESET, ZERO ) +* + DO 60 IA = 1, NALF + ALPHA = ALF( IA ) +* + DO 50 IB = 1, NBET + BETA = BET( IB ) +* +* Generate the matrix C. +* + CALL ZMAKE( 'ge', ' ', ' ', M, N, C, NMAX, CC, + $ LDC, RESET, ZERO ) +* + NC = NC + 1 +* +* Save every datum before calling the +* subroutine. +* + SIDES = SIDE + UPLOS = UPLO + MS = M + NS = N + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LBB + BS( I ) = BB( I ) + 20 CONTINUE + LDBS = LDB + BLS = BETA + DO 30 I = 1, LCC + CS( I ) = CC( I ) + 30 CONTINUE + LDCS = LDC +* +* Call the subroutine. +* + IF( TRACE ) + $ CALL ZPRCN2(NTRA, NC, SNAME, IORDER, + $ SIDE, UPLO, M, N, ALPHA, LDA, LDB, + $ BETA, LDC) + IF( REWI ) + $ REWIND NTRA + IF( CONJ )THEN + CALL CZHEMM( IORDER, SIDE, UPLO, M, N, + $ ALPHA, AA, LDA, BB, LDB, BETA, + $ CC, LDC ) + ELSE + CALL CZSYMM( IORDER, SIDE, UPLO, M, N, + $ ALPHA, AA, LDA, BB, LDB, BETA, + $ CC, LDC ) + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9994 ) + FATAL = .TRUE. + GO TO 110 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = SIDES.EQ.SIDE + ISAME( 2 ) = UPLOS.EQ.UPLO + ISAME( 3 ) = MS.EQ.M + ISAME( 4 ) = NS.EQ.N + ISAME( 5 ) = ALS.EQ.ALPHA + ISAME( 6 ) = LZE( AS, AA, LAA ) + ISAME( 7 ) = LDAS.EQ.LDA + ISAME( 8 ) = LZE( BS, BB, LBB ) + ISAME( 9 ) = LDBS.EQ.LDB + ISAME( 10 ) = BLS.EQ.BETA + IF( NULL )THEN + ISAME( 11 ) = LZE( CS, CC, LCC ) + ELSE + ISAME( 11 ) = LZERES( 'ge', ' ', M, N, CS, + $ CC, LDC ) + END IF + ISAME( 12 ) = LDCS.EQ.LDC +* +* If data was incorrectly changed, report and +* return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 110 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result. +* + IF( LEFT )THEN + CALL ZMMCH( 'N', 'N', M, N, M, ALPHA, A, + $ NMAX, B, NMAX, BETA, C, NMAX, + $ CT, G, CC, LDC, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + ELSE + CALL ZMMCH( 'N', 'N', M, N, N, ALPHA, B, + $ NMAX, A, NMAX, BETA, C, NMAX, + $ CT, G, CC, LDC, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + END IF + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and +* return. + IF( FATAL ) + $ GO TO 110 + END IF +* + 50 CONTINUE +* + 60 CONTINUE +* + 70 CONTINUE +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 120 +* + 110 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + CALL ZPRCN2(NOUT, NC, SNAME, IORDER, SIDE, UPLO, M, N, ALPHA, LDA, + $ LDB, BETA, LDC) +* + 120 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9996 FORMAT( ' ******* ', A12,' FAILED ON CALL NUMBER:' ) + 9995 FORMAT(1X, I6, ': ', A12,'(', 2( '''', A1, ''',' ), 2( I3, ',' ), + $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',(', F4.1, + $ ',', F4.1, '), C,', I3, ') .' ) + 9994 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of ZCHK2. +* + END +* + SUBROUTINE ZPRCN2(NOUT, NC, SNAME, IORDER, SIDE, UPLO, M, N, + $ ALPHA, LDA, LDB, BETA, LDC) + INTEGER NOUT, NC, IORDER, M, N, LDA, LDB, LDC + DOUBLE COMPLEX ALPHA, BETA + CHARACTER*1 SIDE, UPLO + CHARACTER*12 SNAME + CHARACTER*14 CRC, CS,CU + + IF (SIDE.EQ.'L')THEN + CS = ' CblasLeft' + ELSE + CS = ' CblasRight' + END IF + IF (UPLO.EQ.'U')THEN + CU = ' CblasUpper' + ELSE + CU = ' CblasLower' + END IF + IF (IORDER.EQ.1)THEN + CRC = ' CblasRowMajor' + ELSE + CRC = ' CblasColMajor' + END IF + WRITE(NOUT, FMT = 9995)NC,SNAME,CRC, CS,CU + WRITE(NOUT, FMT = 9994)M, N, ALPHA, LDA, LDB, BETA, LDC + + 9995 FORMAT( 1X, I6, ': ', A12,'(', A14, ',', A14, ',', A14, ',') + 9994 FORMAT( 10X, 2( I3, ',' ),' (',F4.1,',',F4.1, '), A,', I3, + $ ', B,', I3, ', (',F4.1,',',F4.1, '), ', 'C,', I3, ').' ) + END +* + SUBROUTINE ZCHK3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NMAX, A, AA, AS, + $ B, BB, BS, CT, G, C, IORDER ) +* +* Tests ZTRMM and ZTRSM. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + COMPLEX*16 ZERO, ONE + PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ), ONE = ( 1.0D0, 0.0D0 ) ) + DOUBLE PRECISION RZERO + PARAMETER ( RZERO = 0.0D0 ) +* .. Scalar Arguments .. + DOUBLE PRECISION EPS, THRESH + INTEGER NALF, NIDIM, NMAX, NOUT, NTRA, IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), B( NMAX, NMAX ), + $ BB( NMAX*NMAX ), BS( NMAX*NMAX ), + $ C( NMAX, NMAX ), CT( NMAX ) + DOUBLE PRECISION G( NMAX ) + INTEGER IDIM( NIDIM ) +* .. Local Scalars .. + COMPLEX*16 ALPHA, ALS + DOUBLE PRECISION ERR, ERRMAX + INTEGER I, IA, ICD, ICS, ICT, ICU, IM, IN, J, LAA, LBB, + $ LDA, LDAS, LDB, LDBS, M, MS, N, NA, NARGS, NC, + $ NS + LOGICAL LEFT, NULL, RESET, SAME + CHARACTER*1 DIAG, DIAGS, SIDE, SIDES, TRANAS, TRANSA, UPLO, + $ UPLOS + CHARACTER*2 ICHD, ICHS, ICHU + CHARACTER*3 ICHT +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LZE, LZERES + EXTERNAL LZE, LZERES +* .. External Subroutines .. + EXTERNAL ZMAKE, ZMMCH, CZTRMM, CZTRSM +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL LERR, OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK, LERR +* .. Data statements .. + DATA ICHU/'UL'/, ICHT/'NTC'/, ICHD/'UN'/, ICHS/'LR'/ +* .. Executable Statements .. +* + NARGS = 11 + NC = 0 + RESET = .TRUE. + ERRMAX = RZERO +* Set up zero matrix for ZMMCH. + DO 20 J = 1, NMAX + DO 10 I = 1, NMAX + C( I, J ) = ZERO + 10 CONTINUE + 20 CONTINUE +* + DO 140 IM = 1, NIDIM + M = IDIM( IM ) +* + DO 130 IN = 1, NIDIM + N = IDIM( IN ) +* Set LDB to 1 more than minimum value if room. + LDB = M + IF( LDB.LT.NMAX ) + $ LDB = LDB + 1 +* Skip tests if not enough room. + IF( LDB.GT.NMAX ) + $ GO TO 130 + LBB = LDB*N + NULL = M.LE.0.OR.N.LE.0 +* + DO 120 ICS = 1, 2 + SIDE = ICHS( ICS: ICS ) + LEFT = SIDE.EQ.'L' + IF( LEFT )THEN + NA = M + ELSE + NA = N + END IF +* Set LDA to 1 more than minimum value if room. + LDA = NA + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 130 + LAA = LDA*NA +* + DO 110 ICU = 1, 2 + UPLO = ICHU( ICU: ICU ) +* + DO 100 ICT = 1, 3 + TRANSA = ICHT( ICT: ICT ) +* + DO 90 ICD = 1, 2 + DIAG = ICHD( ICD: ICD ) +* + DO 80 IA = 1, NALF + ALPHA = ALF( IA ) +* +* Generate the matrix A. +* + CALL ZMAKE( 'tr', UPLO, DIAG, NA, NA, A, + $ NMAX, AA, LDA, RESET, ZERO ) +* +* Generate the matrix B. +* + CALL ZMAKE( 'ge', ' ', ' ', M, N, B, NMAX, + $ BB, LDB, RESET, ZERO ) +* + NC = NC + 1 +* +* Save every datum before calling the +* subroutine. +* + SIDES = SIDE + UPLOS = UPLO + TRANAS = TRANSA + DIAGS = DIAG + MS = M + NS = N + ALS = ALPHA + DO 30 I = 1, LAA + AS( I ) = AA( I ) + 30 CONTINUE + LDAS = LDA + DO 40 I = 1, LBB + BS( I ) = BB( I ) + 40 CONTINUE + LDBS = LDB +* +* Call the subroutine. +* + IF( SNAME( 10: 11 ).EQ.'mm' )THEN + IF( TRACE ) + $ CALL ZPRCN3( NTRA, NC, SNAME, IORDER, + $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, + $ LDA, LDB) + IF( REWI ) + $ REWIND NTRA + CALL CZTRMM(IORDER, SIDE, UPLO, TRANSA, + $ DIAG, M, N, ALPHA, AA, LDA, + $ BB, LDB ) + ELSE IF( SNAME( 10: 11 ).EQ.'sm' )THEN + IF( TRACE ) + $ CALL ZPRCN3( NTRA, NC, SNAME, IORDER, + $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, + $ LDA, LDB) + IF( REWI ) + $ REWIND NTRA + CALL CZTRSM(IORDER, SIDE, UPLO, TRANSA, + $ DIAG, M, N, ALPHA, AA, LDA, + $ BB, LDB ) + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9994 ) + FATAL = .TRUE. + GO TO 150 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = SIDES.EQ.SIDE + ISAME( 2 ) = UPLOS.EQ.UPLO + ISAME( 3 ) = TRANAS.EQ.TRANSA + ISAME( 4 ) = DIAGS.EQ.DIAG + ISAME( 5 ) = MS.EQ.M + ISAME( 6 ) = NS.EQ.N + ISAME( 7 ) = ALS.EQ.ALPHA + ISAME( 8 ) = LZE( AS, AA, LAA ) + ISAME( 9 ) = LDAS.EQ.LDA + IF( NULL )THEN + ISAME( 10 ) = LZE( BS, BB, LBB ) + ELSE + ISAME( 10 ) = LZERES( 'ge', ' ', M, N, BS, + $ BB, LDB ) + END IF + ISAME( 11 ) = LDBS.EQ.LDB +* +* If data was incorrectly changed, report and +* return. +* + SAME = .TRUE. + DO 50 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 50 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 150 + END IF +* + IF( .NOT.NULL )THEN + IF( SNAME( 10: 11 ).EQ.'mm' )THEN +* +* Check the result. +* + IF( LEFT )THEN + CALL ZMMCH( TRANSA, 'N', M, N, M, + $ ALPHA, A, NMAX, B, NMAX, + $ ZERO, C, NMAX, CT, G, + $ BB, LDB, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + ELSE + CALL ZMMCH( 'N', TRANSA, M, N, N, + $ ALPHA, B, NMAX, A, NMAX, + $ ZERO, C, NMAX, CT, G, + $ BB, LDB, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + END IF + ELSE IF( SNAME( 10: 11 ).EQ.'sm' )THEN +* +* Compute approximation to original +* matrix. +* + DO 70 J = 1, N + DO 60 I = 1, M + C( I, J ) = BB( I + ( J - 1 )* + $ LDB ) + BB( I + ( J - 1 )*LDB ) = ALPHA* + $ B( I, J ) + 60 CONTINUE + 70 CONTINUE +* + IF( LEFT )THEN + CALL ZMMCH( TRANSA, 'N', M, N, M, + $ ONE, A, NMAX, C, NMAX, + $ ZERO, B, NMAX, CT, G, + $ BB, LDB, EPS, ERR, + $ FATAL, NOUT, .FALSE. ) + ELSE + CALL ZMMCH( 'N', TRANSA, M, N, N, + $ ONE, C, NMAX, A, NMAX, + $ ZERO, B, NMAX, CT, G, + $ BB, LDB, EPS, ERR, + $ FATAL, NOUT, .FALSE. ) + END IF + END IF + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and +* return. + IF( FATAL ) + $ GO TO 150 + END IF +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* + 110 CONTINUE +* + 120 CONTINUE +* + 130 CONTINUE +* + 140 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 160 +* + 150 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + CALL ZPRCN3( NTRA, NC, SNAME, IORDER, SIDE, UPLO, TRANSA, DIAG, + $ M, N, ALPHA, LDA, LDB) +* + 160 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9996 FORMAT(' ******* ', A12,' FAILED ON CALL NUMBER:' ) + 9995 FORMAT(1X, I6, ': ', A12,'(', 4( '''', A1, ''',' ), 2( I3, ',' ), + $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ') ', + $ ' .' ) + 9994 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of ZCHK3. +* + END +* + SUBROUTINE ZPRCN3(NOUT, NC, SNAME, IORDER, SIDE, UPLO, TRANSA, + $ DIAG, M, N, ALPHA, LDA, LDB) + INTEGER NOUT, NC, IORDER, M, N, LDA, LDB + DOUBLE COMPLEX ALPHA + CHARACTER*1 SIDE, UPLO, TRANSA, DIAG + CHARACTER*12 SNAME + CHARACTER*14 CRC, CS, CU, CA, CD + + IF (SIDE.EQ.'L')THEN + CS = ' CblasLeft' + ELSE + CS = ' CblasRight' + END IF + IF (UPLO.EQ.'U')THEN + CU = ' CblasUpper' + ELSE + CU = ' CblasLower' + END IF + IF (TRANSA.EQ.'N')THEN + CA = ' CblasNoTrans' + ELSE IF (TRANSA.EQ.'T')THEN + CA = ' CblasTrans' + ELSE + CA = 'CblasConjTrans' + END IF + IF (DIAG.EQ.'N')THEN + CD = ' CblasNonUnit' + ELSE + CD = ' CblasUnit' + END IF + IF (IORDER.EQ.1)THEN + CRC = ' CblasRowMajor' + ELSE + CRC = ' CblasColMajor' + END IF + WRITE(NOUT, FMT = 9995)NC,SNAME,CRC, CS,CU + WRITE(NOUT, FMT = 9994)CA, CD, M, N, ALPHA, LDA, LDB + + 9995 FORMAT( 1X, I6, ': ', A12,'(', A14, ',', A14, ',', A14, ',') + 9994 FORMAT( 10X, 2( A14, ',') , 2( I3, ',' ), ' (', F4.1, ',', + $ F4.1, '), A,', I3, ', B,', I3, ').' ) + END +* + SUBROUTINE ZCHK4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX, + $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G, + $ IORDER ) +* +* Tests ZHERK and ZSYRK. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + COMPLEX*16 ZERO + PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ) ) + DOUBLE PRECISION RONE, RZERO + PARAMETER ( RONE = 1.0D0, RZERO = 0.0D0 ) +* .. Scalar Arguments .. + DOUBLE PRECISION EPS, THRESH + INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ), + $ AS( NMAX*NMAX ), B( NMAX, NMAX ), + $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ), + $ C( NMAX, NMAX ), CC( NMAX*NMAX ), + $ CS( NMAX*NMAX ), CT( NMAX ) + DOUBLE PRECISION G( NMAX ) + INTEGER IDIM( NIDIM ) +* .. Local Scalars .. + COMPLEX*16 ALPHA, ALS, BETA, BETS + DOUBLE PRECISION ERR, ERRMAX, RALPHA, RALS, RBETA, RBETS + INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, K, KS, + $ LAA, LCC, LDA, LDAS, LDC, LDCS, LJ, MA, N, NA, + $ NARGS, NC, NS + LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER + CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS + CHARACTER*2 ICHT, ICHU +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LZE, LZERES + EXTERNAL LZE, LZERES +* .. External Subroutines .. + EXTERNAL CZHERK, ZMAKE, ZMMCH, CZSYRK +* .. Intrinsic Functions .. + INTRINSIC DCMPLX, MAX, DBLE +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL LERR, OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK, LERR +* .. Data statements .. + DATA ICHT/'NC'/, ICHU/'UL'/ +* .. Executable Statements .. + CONJ = SNAME( 8: 9 ).EQ.'he' +* + NARGS = 10 + NC = 0 + RESET = .TRUE. + ERRMAX = RZERO +* + DO 100 IN = 1, NIDIM + N = IDIM( IN ) +* Set LDC to 1 more than minimum value if room. + LDC = N + IF( LDC.LT.NMAX ) + $ LDC = LDC + 1 +* Skip tests if not enough room. + IF( LDC.GT.NMAX ) + $ GO TO 100 + LCC = LDC*N +* + DO 90 IK = 1, NIDIM + K = IDIM( IK ) +* + DO 80 ICT = 1, 2 + TRANS = ICHT( ICT: ICT ) + TRAN = TRANS.EQ.'C' + IF( TRAN.AND..NOT.CONJ ) + $ TRANS = 'T' + IF( TRAN )THEN + MA = K + NA = N + ELSE + MA = N + NA = K + END IF +* Set LDA to 1 more than minimum value if room. + LDA = MA + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 80 + LAA = LDA*NA +* +* Generate the matrix A. +* + CALL ZMAKE( 'ge', ' ', ' ', MA, NA, A, NMAX, AA, LDA, + $ RESET, ZERO ) +* + DO 70 ICU = 1, 2 + UPLO = ICHU( ICU: ICU ) + UPPER = UPLO.EQ.'U' +* + DO 60 IA = 1, NALF + ALPHA = ALF( IA ) + IF( CONJ )THEN + RALPHA = DBLE( ALPHA ) + ALPHA = DCMPLX( RALPHA, RZERO ) + END IF +* + DO 50 IB = 1, NBET + BETA = BET( IB ) + IF( CONJ )THEN + RBETA = DBLE( BETA ) + BETA = DCMPLX( RBETA, RZERO ) + END IF + NULL = N.LE.0 + IF( CONJ ) + $ NULL = NULL.OR.( ( K.LE.0.OR.RALPHA.EQ. + $ RZERO ).AND.RBETA.EQ.RONE ) +* +* Generate the matrix C. +* + CALL ZMAKE( SNAME( 8: 9 ), UPLO, ' ', N, N, C, + $ NMAX, CC, LDC, RESET, ZERO ) +* + NC = NC + 1 +* +* Save every datum before calling the subroutine. +* + UPLOS = UPLO + TRANSS = TRANS + NS = N + KS = K + IF( CONJ )THEN + RALS = RALPHA + ELSE + ALS = ALPHA + END IF + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + IF( CONJ )THEN + RBETS = RBETA + ELSE + BETS = BETA + END IF + DO 20 I = 1, LCC + CS( I ) = CC( I ) + 20 CONTINUE + LDCS = LDC +* +* Call the subroutine. +* + IF( CONJ )THEN + IF( TRACE ) + $ CALL ZPRCN6( NTRA, NC, SNAME, IORDER, + $ UPLO, TRANS, N, K, RALPHA, LDA, RBETA, + $ LDC) + IF( REWI ) + $ REWIND NTRA + CALL CZHERK( IORDER, UPLO, TRANS, N, K, + $ RALPHA, AA, LDA, RBETA, CC, + $ LDC ) + ELSE + IF( TRACE ) + $ CALL ZPRCN4( NTRA, NC, SNAME, IORDER, + $ UPLO, TRANS, N, K, ALPHA, LDA, BETA, LDC) + IF( REWI ) + $ REWIND NTRA + CALL CZSYRK( IORDER, UPLO, TRANS, N, K, + $ ALPHA, AA, LDA, BETA, CC, LDC ) + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9992 ) + FATAL = .TRUE. + GO TO 120 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = UPLOS.EQ.UPLO + ISAME( 2 ) = TRANSS.EQ.TRANS + ISAME( 3 ) = NS.EQ.N + ISAME( 4 ) = KS.EQ.K + IF( CONJ )THEN + ISAME( 5 ) = RALS.EQ.RALPHA + ELSE + ISAME( 5 ) = ALS.EQ.ALPHA + END IF + ISAME( 6 ) = LZE( AS, AA, LAA ) + ISAME( 7 ) = LDAS.EQ.LDA + IF( CONJ )THEN + ISAME( 8 ) = RBETS.EQ.RBETA + ELSE + ISAME( 8 ) = BETS.EQ.BETA + END IF + IF( NULL )THEN + ISAME( 9 ) = LZE( CS, CC, LCC ) + ELSE + ISAME( 9 ) = LZERES( SNAME( 8: 9 ), UPLO, N, + $ N, CS, CC, LDC ) + END IF + ISAME( 10 ) = LDCS.EQ.LDC +* +* If data was incorrectly changed, report and +* return. +* + SAME = .TRUE. + DO 30 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 30 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 120 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result column by column. +* + IF( CONJ )THEN + TRANST = 'C' + ELSE + TRANST = 'T' + END IF + JC = 1 + DO 40 J = 1, N + IF( UPPER )THEN + JJ = 1 + LJ = J + ELSE + JJ = J + LJ = N - J + 1 + END IF + IF( TRAN )THEN + CALL ZMMCH( TRANST, 'N', LJ, 1, K, + $ ALPHA, A( 1, JJ ), NMAX, + $ A( 1, J ), NMAX, BETA, + $ C( JJ, J ), NMAX, CT, G, + $ CC( JC ), LDC, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + ELSE + CALL ZMMCH( 'N', TRANST, LJ, 1, K, + $ ALPHA, A( JJ, 1 ), NMAX, + $ A( J, 1 ), NMAX, BETA, + $ C( JJ, J ), NMAX, CT, G, + $ CC( JC ), LDC, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + END IF + IF( UPPER )THEN + JC = JC + LDC + ELSE + JC = JC + LDC + 1 + END IF + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and +* return. + IF( FATAL ) + $ GO TO 110 + 40 CONTINUE + END IF +* + 50 CONTINUE +* + 60 CONTINUE +* + 70 CONTINUE +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 130 +* + 110 CONTINUE + IF( N.GT.1 ) + $ WRITE( NOUT, FMT = 9995 )J +* + 120 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + IF( CONJ )THEN + CALL ZPRCN6( NOUT, NC, SNAME, IORDER, UPLO, TRANS, N, K, RALPHA, + $ LDA, rBETA, LDC) + ELSE + CALL ZPRCN4( NOUT, NC, SNAME, IORDER, UPLO, TRANS, N, K, ALPHA, + $ LDA, BETA, LDC) + END IF +* + 130 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9996 FORMAT( ' ******* ', A12,' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) + 9994 FORMAT(1X, I6, ': ', A12,'(', 2( '''', A1, ''',' ), 2( I3, ',' ), + $ F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ') ', + $ ' .' ) + 9993 FORMAT(1X, I6, ': ', A12,'(', 2( '''', A1, ''',' ), 2( I3, ',' ), + $ '(', F4.1, ',', F4.1, ') , A,', I3, ',(', F4.1, ',', F4.1, + $ '), C,', I3, ') .' ) + 9992 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of CCHK4. +* + END +* + SUBROUTINE ZPRCN4(NOUT, NC, SNAME, IORDER, UPLO, TRANSA, + $ N, K, ALPHA, LDA, BETA, LDC) + INTEGER NOUT, NC, IORDER, N, K, LDA, LDC + DOUBLE COMPLEX ALPHA, BETA + CHARACTER*1 UPLO, TRANSA + CHARACTER*12 SNAME + CHARACTER*14 CRC, CU, CA + + IF (UPLO.EQ.'U')THEN + CU = ' CblasUpper' + ELSE + CU = ' CblasLower' + END IF + IF (TRANSA.EQ.'N')THEN + CA = ' CblasNoTrans' + ELSE IF (TRANSA.EQ.'T')THEN + CA = ' CblasTrans' + ELSE + CA = 'CblasConjTrans' + END IF + IF (IORDER.EQ.1)THEN + CRC = ' CblasRowMajor' + ELSE + CRC = ' CblasColMajor' + END IF + WRITE(NOUT, FMT = 9995)NC, SNAME, CRC, CU, CA + WRITE(NOUT, FMT = 9994)N, K, ALPHA, LDA, BETA, LDC + + 9995 FORMAT( 1X, I6, ': ', A12,'(', 3( A14, ',') ) + 9994 FORMAT( 10X, 2( I3, ',' ), ' (', F4.1, ',', F4.1 ,'), A,', + $ I3, ', (', F4.1,',', F4.1, '), C,', I3, ').' ) + END +* +* + SUBROUTINE ZPRCN6(NOUT, NC, SNAME, IORDER, UPLO, TRANSA, + $ N, K, ALPHA, LDA, BETA, LDC) + INTEGER NOUT, NC, IORDER, N, K, LDA, LDC + DOUBLE PRECISION ALPHA, BETA + CHARACTER*1 UPLO, TRANSA + CHARACTER*12 SNAME + CHARACTER*14 CRC, CU, CA + + IF (UPLO.EQ.'U')THEN + CU = ' CblasUpper' + ELSE + CU = ' CblasLower' + END IF + IF (TRANSA.EQ.'N')THEN + CA = ' CblasNoTrans' + ELSE IF (TRANSA.EQ.'T')THEN + CA = ' CblasTrans' + ELSE + CA = 'CblasConjTrans' + END IF + IF (IORDER.EQ.1)THEN + CRC = ' CblasRowMajor' + ELSE + CRC = ' CblasColMajor' + END IF + WRITE(NOUT, FMT = 9995)NC, SNAME, CRC, CU, CA + WRITE(NOUT, FMT = 9994)N, K, ALPHA, LDA, BETA, LDC + + 9995 FORMAT( 1X, I6, ': ', A12,'(', 3( A14, ',') ) + 9994 FORMAT( 10X, 2( I3, ',' ), + $ F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ').' ) + END +* + SUBROUTINE ZCHK5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI, + $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX, + $ AB, AA, AS, BB, BS, C, CC, CS, CT, G, W, + $ IORDER ) +* +* Tests ZHER2K and ZSYR2K. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + COMPLEX*16 ZERO, ONE + PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ), ONE = ( 1.0D0, 0.0D0 ) ) + DOUBLE PRECISION RONE, RZERO + PARAMETER ( RONE = 1.0D0, RZERO = 0.0D0 ) +* .. Scalar Arguments .. + DOUBLE PRECISION EPS, THRESH + INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER + LOGICAL FATAL, REWI, TRACE + CHARACTER*12 SNAME +* .. Array Arguments .. + COMPLEX*16 AA( NMAX*NMAX ), AB( 2*NMAX*NMAX ), + $ ALF( NALF ), AS( NMAX*NMAX ), BB( NMAX*NMAX ), + $ BET( NBET ), BS( NMAX*NMAX ), C( NMAX, NMAX ), + $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ), + $ W( 2*NMAX ) + DOUBLE PRECISION G( NMAX ) + INTEGER IDIM( NIDIM ) +* .. Local Scalars .. + COMPLEX*16 ALPHA, ALS, BETA, BETS + DOUBLE PRECISION ERR, ERRMAX, RBETA, RBETS + INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, JJAB, + $ K, KS, LAA, LBB, LCC, LDA, LDAS, LDB, LDBS, + $ LDC, LDCS, LJ, MA, N, NA, NARGS, NC, NS + LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER + CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS + CHARACTER*2 ICHT, ICHU +* .. Local Arrays .. + LOGICAL ISAME( 13 ) +* .. External Functions .. + LOGICAL LZE, LZERES + EXTERNAL LZE, LZERES +* .. External Subroutines .. + EXTERNAL CZHER2K, ZMAKE, ZMMCH, CZSYR2K +* .. Intrinsic Functions .. + INTRINSIC DCMPLX, DCONJG, MAX, DBLE +* .. Scalars in Common .. + INTEGER INFOT, NOUTC + LOGICAL LERR, OK +* .. Common blocks .. + COMMON /INFOC/INFOT, NOUTC, OK, LERR +* .. Data statements .. + DATA ICHT/'NC'/, ICHU/'UL'/ +* .. Executable Statements .. + CONJ = SNAME( 8: 9 ).EQ.'he' +* + NARGS = 12 + NC = 0 + RESET = .TRUE. + ERRMAX = RZERO +* + DO 130 IN = 1, NIDIM + N = IDIM( IN ) +* Set LDC to 1 more than minimum value if room. + LDC = N + IF( LDC.LT.NMAX ) + $ LDC = LDC + 1 +* Skip tests if not enough room. + IF( LDC.GT.NMAX ) + $ GO TO 130 + LCC = LDC*N +* + DO 120 IK = 1, NIDIM + K = IDIM( IK ) +* + DO 110 ICT = 1, 2 + TRANS = ICHT( ICT: ICT ) + TRAN = TRANS.EQ.'C' + IF( TRAN.AND..NOT.CONJ ) + $ TRANS = 'T' + IF( TRAN )THEN + MA = K + NA = N + ELSE + MA = N + NA = K + END IF +* Set LDA to 1 more than minimum value if room. + LDA = MA + IF( LDA.LT.NMAX ) + $ LDA = LDA + 1 +* Skip tests if not enough room. + IF( LDA.GT.NMAX ) + $ GO TO 110 + LAA = LDA*NA +* +* Generate the matrix A. +* + IF( TRAN )THEN + CALL ZMAKE( 'ge', ' ', ' ', MA, NA, AB, 2*NMAX, AA, + $ LDA, RESET, ZERO ) + ELSE + CALL ZMAKE( 'ge', ' ', ' ', MA, NA, AB, NMAX, AA, LDA, + $ RESET, ZERO ) + END IF +* +* Generate the matrix B. +* + LDB = LDA + LBB = LAA + IF( TRAN )THEN + CALL ZMAKE( 'ge', ' ', ' ', MA, NA, AB( K + 1 ), + $ 2*NMAX, BB, LDB, RESET, ZERO ) + ELSE + CALL ZMAKE( 'ge', ' ', ' ', MA, NA, AB( K*NMAX + 1 ), + $ NMAX, BB, LDB, RESET, ZERO ) + END IF +* + DO 100 ICU = 1, 2 + UPLO = ICHU( ICU: ICU ) + UPPER = UPLO.EQ.'U' +* + DO 90 IA = 1, NALF + ALPHA = ALF( IA ) +* + DO 80 IB = 1, NBET + BETA = BET( IB ) + IF( CONJ )THEN + RBETA = DBLE( BETA ) + BETA = DCMPLX( RBETA, RZERO ) + END IF + NULL = N.LE.0 + IF( CONJ ) + $ NULL = NULL.OR.( ( K.LE.0.OR.ALPHA.EQ. + $ ZERO ).AND.RBETA.EQ.RONE ) +* +* Generate the matrix C. +* + CALL ZMAKE( SNAME( 8: 9 ), UPLO, ' ', N, N, C, + $ NMAX, CC, LDC, RESET, ZERO ) +* + NC = NC + 1 +* +* Save every datum before calling the subroutine. +* + UPLOS = UPLO + TRANSS = TRANS + NS = N + KS = K + ALS = ALPHA + DO 10 I = 1, LAA + AS( I ) = AA( I ) + 10 CONTINUE + LDAS = LDA + DO 20 I = 1, LBB + BS( I ) = BB( I ) + 20 CONTINUE + LDBS = LDB + IF( CONJ )THEN + RBETS = RBETA + ELSE + BETS = BETA + END IF + DO 30 I = 1, LCC + CS( I ) = CC( I ) + 30 CONTINUE + LDCS = LDC +* +* Call the subroutine. +* + IF( CONJ )THEN + IF( TRACE ) + $ CALL ZPRCN7( NTRA, NC, SNAME, IORDER, + $ UPLO, TRANS, N, K, ALPHA, LDA, LDB, + $ RBETA, LDC) + IF( REWI ) + $ REWIND NTRA + CALL CZHER2K( IORDER, UPLO, TRANS, N, K, + $ ALPHA, AA, LDA, BB, LDB, RBETA, + $ CC, LDC ) + ELSE + IF( TRACE ) + $ CALL ZPRCN5( NTRA, NC, SNAME, IORDER, + $ UPLO, TRANS, N, K, ALPHA, LDA, LDB, + $ BETA, LDC) + IF( REWI ) + $ REWIND NTRA + CALL CZSYR2K( IORDER, UPLO, TRANS, N, K, + $ ALPHA, AA, LDA, BB, LDB, BETA, + $ CC, LDC ) + END IF +* +* Check if error-exit was taken incorrectly. +* + IF( .NOT.OK )THEN + WRITE( NOUT, FMT = 9992 ) + FATAL = .TRUE. + GO TO 150 + END IF +* +* See what data changed inside subroutines. +* + ISAME( 1 ) = UPLOS.EQ.UPLO + ISAME( 2 ) = TRANSS.EQ.TRANS + ISAME( 3 ) = NS.EQ.N + ISAME( 4 ) = KS.EQ.K + ISAME( 5 ) = ALS.EQ.ALPHA + ISAME( 6 ) = LZE( AS, AA, LAA ) + ISAME( 7 ) = LDAS.EQ.LDA + ISAME( 8 ) = LZE( BS, BB, LBB ) + ISAME( 9 ) = LDBS.EQ.LDB + IF( CONJ )THEN + ISAME( 10 ) = RBETS.EQ.RBETA + ELSE + ISAME( 10 ) = BETS.EQ.BETA + END IF + IF( NULL )THEN + ISAME( 11 ) = LZE( CS, CC, LCC ) + ELSE + ISAME( 11 ) = LZERES( 'he', UPLO, N, N, CS, + $ CC, LDC ) + END IF + ISAME( 12 ) = LDCS.EQ.LDC +* +* If data was incorrectly changed, report and +* return. +* + SAME = .TRUE. + DO 40 I = 1, NARGS + SAME = SAME.AND.ISAME( I ) + IF( .NOT.ISAME( I ) ) + $ WRITE( NOUT, FMT = 9998 )I + 40 CONTINUE + IF( .NOT.SAME )THEN + FATAL = .TRUE. + GO TO 150 + END IF +* + IF( .NOT.NULL )THEN +* +* Check the result column by column. +* + IF( CONJ )THEN + TRANST = 'C' + ELSE + TRANST = 'T' + END IF + JJAB = 1 + JC = 1 + DO 70 J = 1, N + IF( UPPER )THEN + JJ = 1 + LJ = J + ELSE + JJ = J + LJ = N - J + 1 + END IF + IF( TRAN )THEN + DO 50 I = 1, K + W( I ) = ALPHA*AB( ( J - 1 )*2* + $ NMAX + K + I ) + IF( CONJ )THEN + W( K + I ) = DCONJG( ALPHA )* + $ AB( ( J - 1 )*2* + $ NMAX + I ) + ELSE + W( K + I ) = ALPHA* + $ AB( ( J - 1 )*2* + $ NMAX + I ) + END IF + 50 CONTINUE + CALL ZMMCH( TRANST, 'N', LJ, 1, 2*K, + $ ONE, AB( JJAB ), 2*NMAX, W, + $ 2*NMAX, BETA, C( JJ, J ), + $ NMAX, CT, G, CC( JC ), LDC, + $ EPS, ERR, FATAL, NOUT, + $ .TRUE. ) + ELSE + DO 60 I = 1, K + IF( CONJ )THEN + W( I ) = ALPHA*DCONJG( AB( ( K + + $ I - 1 )*NMAX + J ) ) + W( K + I ) = DCONJG( ALPHA* + $ AB( ( I - 1 )*NMAX + + $ J ) ) + ELSE + W( I ) = ALPHA*AB( ( K + I - 1 )* + $ NMAX + J ) + W( K + I ) = ALPHA* + $ AB( ( I - 1 )*NMAX + + $ J ) + END IF + 60 CONTINUE + CALL ZMMCH( 'N', 'N', LJ, 1, 2*K, ONE, + $ AB( JJ ), NMAX, W, 2*NMAX, + $ BETA, C( JJ, J ), NMAX, CT, + $ G, CC( JC ), LDC, EPS, ERR, + $ FATAL, NOUT, .TRUE. ) + END IF + IF( UPPER )THEN + JC = JC + LDC + ELSE + JC = JC + LDC + 1 + IF( TRAN ) + $ JJAB = JJAB + 2*NMAX + END IF + ERRMAX = MAX( ERRMAX, ERR ) +* If got really bad answer, report and +* return. + IF( FATAL ) + $ GO TO 140 + 70 CONTINUE + END IF +* + 80 CONTINUE +* + 90 CONTINUE +* + 100 CONTINUE +* + 110 CONTINUE +* + 120 CONTINUE +* + 130 CONTINUE +* +* Report result. +* + IF( ERRMAX.LT.THRESH )THEN + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10000 )SNAME, NC + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10001 )SNAME, NC + ELSE + IF ( IORDER.EQ.0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX + IF ( IORDER.EQ.1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX + END IF + GO TO 160 +* + 140 CONTINUE + IF( N.GT.1 ) + $ WRITE( NOUT, FMT = 9995 )J +* + 150 CONTINUE + WRITE( NOUT, FMT = 9996 )SNAME + IF( CONJ )THEN + CALL ZPRCN7( NOUT, NC, SNAME, IORDER, UPLO, TRANS, N, K, + $ ALPHA, LDA, LDB, RBETA, LDC) + ELSE + CALL ZPRCN5( NOUT, NC, SNAME, IORDER, UPLO, TRANS, N, K, + $ ALPHA, LDA, LDB, BETA, LDC) + END IF +* + 160 CONTINUE + RETURN +* +10003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ', + $ 'TESTS (', I6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ', + $ 'RATIO ', F8.2, ' - SUSPECT *******' ) +10001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) +10000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS', + $ ' (', I6, ' CALL', 'S)' ) + 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH', + $ 'ANGED INCORRECTLY *******' ) + 9996 FORMAT( ' ******* ', A12,' FAILED ON CALL NUMBER:' ) + 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) + 9994 FORMAT(1X, I6, ': ', A12,'(', 2( '''', A1, ''',' ), 2( I3, ',' ), + $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',', F4.1, + $ ', C,', I3, ') .' ) + 9993 FORMAT(1X, I6, ': ', A12,'(', 2( '''', A1, ''',' ), 2( I3, ',' ), + $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',(', F4.1, + $ ',', F4.1, '), C,', I3, ') .' ) + 9992 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *', + $ '******' ) +* +* End of ZCHK5. +* + END +* + SUBROUTINE ZPRCN5(NOUT, NC, SNAME, IORDER, UPLO, TRANSA, + $ N, K, ALPHA, LDA, LDB, BETA, LDC) + INTEGER NOUT, NC, IORDER, N, K, LDA, LDB, LDC + DOUBLE COMPLEX ALPHA, BETA + CHARACTER*1 UPLO, TRANSA + CHARACTER*12 SNAME + CHARACTER*14 CRC, CU, CA + + IF (UPLO.EQ.'U')THEN + CU = ' CblasUpper' + ELSE + CU = ' CblasLower' + END IF + IF (TRANSA.EQ.'N')THEN + CA = ' CblasNoTrans' + ELSE IF (TRANSA.EQ.'T')THEN + CA = ' CblasTrans' + ELSE + CA = 'CblasConjTrans' + END IF + IF (IORDER.EQ.1)THEN + CRC = ' CblasRowMajor' + ELSE + CRC = ' CblasColMajor' + END IF + WRITE(NOUT, FMT = 9995)NC, SNAME, CRC, CU, CA + WRITE(NOUT, FMT = 9994)N, K, ALPHA, LDA, LDB, BETA, LDC + + 9995 FORMAT( 1X, I6, ': ', A12,'(', 3( A14, ',') ) + 9994 FORMAT( 10X, 2( I3, ',' ), ' (', F4.1, ',', F4.1, '), A,', + $ I3, ', B', I3, ', (', F4.1, ',', F4.1, '), C,', I3, ').' ) + END +* +* + SUBROUTINE ZPRCN7(NOUT, NC, SNAME, IORDER, UPLO, TRANSA, + $ N, K, ALPHA, LDA, LDB, BETA, LDC) + INTEGER NOUT, NC, IORDER, N, K, LDA, LDB, LDC + DOUBLE COMPLEX ALPHA + DOUBLE PRECISION BETA + CHARACTER*1 UPLO, TRANSA + CHARACTER*12 SNAME + CHARACTER*14 CRC, CU, CA + + IF (UPLO.EQ.'U')THEN + CU = ' CblasUpper' + ELSE + CU = ' CblasLower' + END IF + IF (TRANSA.EQ.'N')THEN + CA = ' CblasNoTrans' + ELSE IF (TRANSA.EQ.'T')THEN + CA = ' CblasTrans' + ELSE + CA = 'CblasConjTrans' + END IF + IF (IORDER.EQ.1)THEN + CRC = ' CblasRowMajor' + ELSE + CRC = ' CblasColMajor' + END IF + WRITE(NOUT, FMT = 9995)NC, SNAME, CRC, CU, CA + WRITE(NOUT, FMT = 9994)N, K, ALPHA, LDA, LDB, BETA, LDC + + 9995 FORMAT( 1X, I6, ': ', A12,'(', 3( A14, ',') ) + 9994 FORMAT( 10X, 2( I3, ',' ), ' (', F4.1, ',', F4.1, '), A,', + $ I3, ', B', I3, ',', F4.1, ', C,', I3, ').' ) + END +* + SUBROUTINE ZMAKE( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, RESET, + $ TRANSL ) +* +* Generates values for an M by N matrix A. +* Stores the values in the array AA in the data structure required +* by the routine, with unwanted elements set to rogue value. +* +* TYPE is 'ge', 'he', 'sy' or 'tr'. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + COMPLEX*16 ZERO, ONE + PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ), + $ ONE = ( 1.0D0, 0.0D0 ) ) + COMPLEX*16 ROGUE + PARAMETER ( ROGUE = ( -1.0D10, 1.0D10 ) ) + DOUBLE PRECISION RZERO + PARAMETER ( RZERO = 0.0D0 ) + DOUBLE PRECISION RROGUE + PARAMETER ( RROGUE = -1.0D10 ) +* .. Scalar Arguments .. + COMPLEX*16 TRANSL + INTEGER LDA, M, N, NMAX + LOGICAL RESET + CHARACTER*1 DIAG, UPLO + CHARACTER*2 TYPE +* .. Array Arguments .. + COMPLEX*16 A( NMAX, * ), AA( * ) +* .. Local Scalars .. + INTEGER I, IBEG, IEND, J, JJ + LOGICAL GEN, HER, LOWER, SYM, TRI, UNIT, UPPER +* .. External Functions .. + COMPLEX*16 ZBEG + EXTERNAL ZBEG +* .. Intrinsic Functions .. + INTRINSIC DCMPLX, DCONJG, DBLE +* .. Executable Statements .. + GEN = TYPE.EQ.'ge' + HER = TYPE.EQ.'he' + SYM = TYPE.EQ.'sy' + TRI = TYPE.EQ.'tr' + UPPER = ( HER.OR.SYM.OR.TRI ).AND.UPLO.EQ.'U' + LOWER = ( HER.OR.SYM.OR.TRI ).AND.UPLO.EQ.'L' + UNIT = TRI.AND.DIAG.EQ.'U' +* +* Generate data in array A. +* + DO 20 J = 1, N + DO 10 I = 1, M + IF( GEN.OR.( UPPER.AND.I.LE.J ).OR.( LOWER.AND.I.GE.J ) ) + $ THEN + A( I, J ) = ZBEG( RESET ) + TRANSL + IF( I.NE.J )THEN +* Set some elements to zero + IF( N.GT.3.AND.J.EQ.N/2 ) + $ A( I, J ) = ZERO + IF( HER )THEN + A( J, I ) = DCONJG( A( I, J ) ) + ELSE IF( SYM )THEN + A( J, I ) = A( I, J ) + ELSE IF( TRI )THEN + A( J, I ) = ZERO + END IF + END IF + END IF + 10 CONTINUE + IF( HER ) + $ A( J, J ) = DCMPLX( DBLE( A( J, J ) ), RZERO ) + IF( TRI ) + $ A( J, J ) = A( J, J ) + ONE + IF( UNIT ) + $ A( J, J ) = ONE + 20 CONTINUE +* +* Store elements in array AS in data structure required by routine. +* + IF( TYPE.EQ.'ge' )THEN + DO 50 J = 1, N + DO 30 I = 1, M + AA( I + ( J - 1 )*LDA ) = A( I, J ) + 30 CONTINUE + DO 40 I = M + 1, LDA + AA( I + ( J - 1 )*LDA ) = ROGUE + 40 CONTINUE + 50 CONTINUE + ELSE IF( TYPE.EQ.'he'.OR.TYPE.EQ.'sy'.OR.TYPE.EQ.'tr' )THEN + DO 90 J = 1, N + IF( UPPER )THEN + IBEG = 1 + IF( UNIT )THEN + IEND = J - 1 + ELSE + IEND = J + END IF + ELSE + IF( UNIT )THEN + IBEG = J + 1 + ELSE + IBEG = J + END IF + IEND = N + END IF + DO 60 I = 1, IBEG - 1 + AA( I + ( J - 1 )*LDA ) = ROGUE + 60 CONTINUE + DO 70 I = IBEG, IEND + AA( I + ( J - 1 )*LDA ) = A( I, J ) + 70 CONTINUE + DO 80 I = IEND + 1, LDA + AA( I + ( J - 1 )*LDA ) = ROGUE + 80 CONTINUE + IF( HER )THEN + JJ = J + ( J - 1 )*LDA + AA( JJ ) = DCMPLX( DBLE( AA( JJ ) ), RROGUE ) + END IF + 90 CONTINUE + END IF + RETURN +* +* End of ZMAKE. +* + END + SUBROUTINE ZMMCH( TRANSA, TRANSB, M, N, KK, ALPHA, A, LDA, B, LDB, + $ BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL, + $ NOUT, MV ) +* +* Checks the results of the computational tests. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Parameters .. + COMPLEX*16 ZERO + PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ) ) + DOUBLE PRECISION RZERO, RONE + PARAMETER ( RZERO = 0.0D0, RONE = 1.0D0 ) +* .. Scalar Arguments .. + COMPLEX*16 ALPHA, BETA + DOUBLE PRECISION EPS, ERR + INTEGER KK, LDA, LDB, LDC, LDCC, M, N, NOUT + LOGICAL FATAL, MV + CHARACTER*1 TRANSA, TRANSB +* .. Array Arguments .. + COMPLEX*16 A( LDA, * ), B( LDB, * ), C( LDC, * ), + $ CC( LDCC, * ), CT( * ) + DOUBLE PRECISION G( * ) +* .. Local Scalars .. + COMPLEX*16 CL + DOUBLE PRECISION ERRI + INTEGER I, J, K + LOGICAL CTRANA, CTRANB, TRANA, TRANB +* .. Intrinsic Functions .. + INTRINSIC ABS, DIMAG, DCONJG, MAX, DBLE, SQRT +* .. Statement Functions .. + DOUBLE PRECISION ABS1 +* .. Statement Function definitions .. + ABS1( CL ) = ABS( DBLE( CL ) ) + ABS( DIMAG( CL ) ) +* .. Executable Statements .. + TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C' + TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C' + CTRANA = TRANSA.EQ.'C' + CTRANB = TRANSB.EQ.'C' +* +* Compute expected result, one column at a time, in CT using data +* in A, B and C. +* Compute gauges in G. +* + DO 220 J = 1, N +* + DO 10 I = 1, M + CT( I ) = ZERO + G( I ) = RZERO + 10 CONTINUE + IF( .NOT.TRANA.AND..NOT.TRANB )THEN + DO 30 K = 1, KK + DO 20 I = 1, M + CT( I ) = CT( I ) + A( I, K )*B( K, J ) + G( I ) = G( I ) + ABS1( A( I, K ) )*ABS1( B( K, J ) ) + 20 CONTINUE + 30 CONTINUE + ELSE IF( TRANA.AND..NOT.TRANB )THEN + IF( CTRANA )THEN + DO 50 K = 1, KK + DO 40 I = 1, M + CT( I ) = CT( I ) + DCONJG( A( K, I ) )*B( K, J ) + G( I ) = G( I ) + ABS1( A( K, I ) )* + $ ABS1( B( K, J ) ) + 40 CONTINUE + 50 CONTINUE + ELSE + DO 70 K = 1, KK + DO 60 I = 1, M + CT( I ) = CT( I ) + A( K, I )*B( K, J ) + G( I ) = G( I ) + ABS1( A( K, I ) )* + $ ABS1( B( K, J ) ) + 60 CONTINUE + 70 CONTINUE + END IF + ELSE IF( .NOT.TRANA.AND.TRANB )THEN + IF( CTRANB )THEN + DO 90 K = 1, KK + DO 80 I = 1, M + CT( I ) = CT( I ) + A( I, K )*DCONJG( B( J, K ) ) + G( I ) = G( I ) + ABS1( A( I, K ) )* + $ ABS1( B( J, K ) ) + 80 CONTINUE + 90 CONTINUE + ELSE + DO 110 K = 1, KK + DO 100 I = 1, M + CT( I ) = CT( I ) + A( I, K )*B( J, K ) + G( I ) = G( I ) + ABS1( A( I, K ) )* + $ ABS1( B( J, K ) ) + 100 CONTINUE + 110 CONTINUE + END IF + ELSE IF( TRANA.AND.TRANB )THEN + IF( CTRANA )THEN + IF( CTRANB )THEN + DO 130 K = 1, KK + DO 120 I = 1, M + CT( I ) = CT( I ) + DCONJG( A( K, I ) )* + $ DCONJG( B( J, K ) ) + G( I ) = G( I ) + ABS1( A( K, I ) )* + $ ABS1( B( J, K ) ) + 120 CONTINUE + 130 CONTINUE + ELSE + DO 150 K = 1, KK + DO 140 I = 1, M + CT( I ) = CT( I ) + DCONJG( A( K, I ) )* + $ B( J, K ) + G( I ) = G( I ) + ABS1( A( K, I ) )* + $ ABS1( B( J, K ) ) + 140 CONTINUE + 150 CONTINUE + END IF + ELSE + IF( CTRANB )THEN + DO 170 K = 1, KK + DO 160 I = 1, M + CT( I ) = CT( I ) + A( K, I )* + $ DCONJG( B( J, K ) ) + G( I ) = G( I ) + ABS1( A( K, I ) )* + $ ABS1( B( J, K ) ) + 160 CONTINUE + 170 CONTINUE + ELSE + DO 190 K = 1, KK + DO 180 I = 1, M + CT( I ) = CT( I ) + A( K, I )*B( J, K ) + G( I ) = G( I ) + ABS1( A( K, I ) )* + $ ABS1( B( J, K ) ) + 180 CONTINUE + 190 CONTINUE + END IF + END IF + END IF + DO 200 I = 1, M + CT( I ) = ALPHA*CT( I ) + BETA*C( I, J ) + G( I ) = ABS1( ALPHA )*G( I ) + + $ ABS1( BETA )*ABS1( C( I, J ) ) + 200 CONTINUE +* +* Compute the error ratio for this result. +* + ERR = ZERO + DO 210 I = 1, M + ERRI = ABS1( CT( I ) - CC( I, J ) )/EPS + IF( G( I ).NE.RZERO ) + $ ERRI = ERRI/G( I ) + ERR = MAX( ERR, ERRI ) + IF( ERR*SQRT( EPS ).GE.RONE ) + $ GO TO 230 + 210 CONTINUE +* + 220 CONTINUE +* +* If the loop completes, all results are at least half accurate. + GO TO 250 +* +* Report fatal error. +* + 230 FATAL = .TRUE. + WRITE( NOUT, FMT = 9999 ) + DO 240 I = 1, M + IF( MV )THEN + WRITE( NOUT, FMT = 9998 )I, CT( I ), CC( I, J ) + ELSE + WRITE( NOUT, FMT = 9998 )I, CC( I, J ), CT( I ) + END IF + 240 CONTINUE + IF( N.GT.1 ) + $ WRITE( NOUT, FMT = 9997 )J +* + 250 CONTINUE + RETURN +* + 9999 FORMAT( ' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL', + $ 'F ACCURATE *******', /' EXPECTED RE', + $ 'SULT COMPUTED RESULT' ) + 9998 FORMAT( 1X, I7, 2( ' (', G15.6, ',', G15.6, ')' ) ) + 9997 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 ) +* +* End of ZMMCH. +* + END + LOGICAL FUNCTION LZE( RI, RJ, LR ) +* +* Tests if two arrays are identical. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Scalar Arguments .. + INTEGER LR +* .. Array Arguments .. + COMPLEX*16 RI( * ), RJ( * ) +* .. Local Scalars .. + INTEGER I +* .. Executable Statements .. + DO 10 I = 1, LR + IF( RI( I ).NE.RJ( I ) ) + $ GO TO 20 + 10 CONTINUE + LZE = .TRUE. + GO TO 30 + 20 CONTINUE + LZE = .FALSE. + 30 RETURN +* +* End of LZE. +* + END + LOGICAL FUNCTION LZERES( TYPE, UPLO, M, N, AA, AS, LDA ) +* +* Tests if selected elements in two arrays are equal. +* +* TYPE is 'ge' or 'he' or 'sy'. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Scalar Arguments .. + INTEGER LDA, M, N + CHARACTER*1 UPLO + CHARACTER*2 TYPE +* .. Array Arguments .. + COMPLEX*16 AA( LDA, * ), AS( LDA, * ) +* .. Local Scalars .. + INTEGER I, IBEG, IEND, J + LOGICAL UPPER +* .. Executable Statements .. + UPPER = UPLO.EQ.'U' + IF( TYPE.EQ.'ge' )THEN + DO 20 J = 1, N + DO 10 I = M + 1, LDA + IF( AA( I, J ).NE.AS( I, J ) ) + $ GO TO 70 + 10 CONTINUE + 20 CONTINUE + ELSE IF( TYPE.EQ.'he'.OR.TYPE.EQ.'sy' )THEN + DO 50 J = 1, N + IF( UPPER )THEN + IBEG = 1 + IEND = J + ELSE + IBEG = J + IEND = N + END IF + DO 30 I = 1, IBEG - 1 + IF( AA( I, J ).NE.AS( I, J ) ) + $ GO TO 70 + 30 CONTINUE + DO 40 I = IEND + 1, LDA + IF( AA( I, J ).NE.AS( I, J ) ) + $ GO TO 70 + 40 CONTINUE + 50 CONTINUE + END IF +* + 60 CONTINUE + LZERES = .TRUE. + GO TO 80 + 70 CONTINUE + LZERES = .FALSE. + 80 RETURN +* +* End of LZERES. +* + END + COMPLEX*16 FUNCTION ZBEG( RESET ) +* +* Generates complex numbers as pairs of random numbers uniformly +* distributed between -0.5 and 0.5. +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Scalar Arguments .. + LOGICAL RESET +* .. Local Scalars .. + INTEGER I, IC, J, MI, MJ +* .. Save statement .. + SAVE I, IC, J, MI, MJ +* .. Intrinsic Functions .. + INTRINSIC DCMPLX +* .. Executable Statements .. + IF( RESET )THEN +* Initialize local variables. + MI = 891 + MJ = 457 + I = 7 + J = 7 + IC = 0 + RESET = .FALSE. + END IF +* +* The sequence of values of I or J is bounded between 1 and 999. +* If initial I or J = 1,2,3,6,7 or 9, the period will be 50. +* If initial I or J = 4 or 8, the period will be 25. +* If initial I or J = 5, the period will be 10. +* IC is used to break up the period by skipping 1 value of I or J +* in 6. +* + IC = IC + 1 + 10 I = I*MI + J = J*MJ + I = I - 1000*( I/1000 ) + J = J - 1000*( J/1000 ) + IF( IC.GE.5 )THEN + IC = 0 + GO TO 10 + END IF + ZBEG = DCMPLX( ( I - 500 )/1001.0D0, ( J - 500 )/1001.0D0 ) + RETURN +* +* End of ZBEG. +* + END + DOUBLE PRECISION FUNCTION DDIFF( X, Y ) +* +* Auxiliary routine for test program for Level 3 Blas. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* .. Scalar Arguments .. + DOUBLE PRECISION X, Y +* .. Executable Statements .. + DDIFF = X - Y + RETURN +* +* End of DDIFF. +* + END + diff --git a/CBLAS/testing/cblas_test.h b/CBLAS/testing/cblas_test.h new file mode 100644 index 000000000..da537d2d1 --- /dev/null +++ b/CBLAS/testing/cblas_test.h @@ -0,0 +1,513 @@ +/* + * cblas_test.h + * Written by Keita Teranishi + */ +#ifndef CBLAS_TEST_H +#define CBLAS_TEST_H +#include "cblas.h" + +#define TRUE 1 +#define PASSED 1 +#define TEST_ROW_MJR 1 + +#define FALSE 0 +#define FAILED 0 +#define TEST_COL_MJR 0 + +#define INVALID -1 +#define UNDEFINED -1 + +typedef struct { float real; float imag; } CBLAS_TEST_COMPLEX; +typedef struct { double real; double imag; } CBLAS_TEST_ZOMPLEX; + +#if defined(ADD_) + #define F77_xerbla xerbla_ +/* + * Level 1 BLAS + */ + #define F77_srotg srotgtest_ + #define F77_srotmg srotmgtest_ + #define F77_srot srottest_ + #define F77_srotm srotmtest_ + #define F77_drotg drotgtest_ + #define F77_drotmg drotmgtest_ + #define F77_drot drottest_ + #define F77_drotm drotmtest_ + #define F77_sswap sswaptest_ + #define F77_scopy scopytest_ + #define F77_saxpy saxpytest_ + #define F77_isamax isamaxtest_ + #define F77_dswap dswaptest_ + #define F77_dcopy dcopytest_ + #define F77_daxpy daxpytest_ + #define F77_idamax idamaxtest_ + #define F77_cswap cswaptest_ + #define F77_ccopy ccopytest_ + #define F77_caxpy caxpytest_ + #define F77_icamax icamaxtest_ + #define F77_zswap zswaptest_ + #define F77_zcopy zcopytest_ + #define F77_zaxpy zaxpytest_ + #define F77_izamax izamaxtest_ + #define F77_sdot sdottest_ + #define F77_ddot ddottest_ + #define F77_dsdot dsdottest_ + #define F77_sscal sscaltest_ + #define F77_dscal dscaltest_ + #define F77_cscal cscaltest_ + #define F77_zscal zscaltest_ + #define F77_csscal csscaltest_ + #define F77_zdscal zdscaltest_ + #define F77_cdotu cdotutest_ + #define F77_cdotc cdotctest_ + #define F77_zdotu zdotutest_ + #define F77_zdotc zdotctest_ + #define F77_snrm2 snrm2test_ + #define F77_sasum sasumtest_ + #define F77_dnrm2 dnrm2test_ + #define F77_dasum dasumtest_ + #define F77_scnrm2 scnrm2test_ + #define F77_scasum scasumtest_ + #define F77_dznrm2 dznrm2test_ + #define F77_dzasum dzasumtest_ + #define F77_sdsdot sdsdottest_ +/* + * Level 2 BLAS + */ + #define F77_s2chke cs2chke_ + #define F77_d2chke cd2chke_ + #define F77_c2chke cc2chke_ + #define F77_z2chke cz2chke_ + #define F77_ssymv cssymv_ + #define F77_ssbmv cssbmv_ + #define F77_sspmv csspmv_ + #define F77_sger csger_ + #define F77_ssyr cssyr_ + #define F77_sspr csspr_ + #define F77_ssyr2 cssyr2_ + #define F77_sspr2 csspr2_ + #define F77_dsymv cdsymv_ + #define F77_dsbmv cdsbmv_ + #define F77_dspmv cdspmv_ + #define F77_dger cdger_ + #define F77_dsyr cdsyr_ + #define F77_dspr cdspr_ + #define F77_dsyr2 cdsyr2_ + #define F77_dspr2 cdspr2_ + #define F77_chemv cchemv_ + #define F77_chbmv cchbmv_ + #define F77_chpmv cchpmv_ + #define F77_cgeru ccgeru_ + #define F77_cgerc ccgerc_ + #define F77_cher ccher_ + #define F77_chpr cchpr_ + #define F77_cher2 ccher2_ + #define F77_chpr2 cchpr2_ + #define F77_zhemv czhemv_ + #define F77_zhbmv czhbmv_ + #define F77_zhpmv czhpmv_ + #define F77_zgeru czgeru_ + #define F77_zgerc czgerc_ + #define F77_zher czher_ + #define F77_zhpr czhpr_ + #define F77_zher2 czher2_ + #define F77_zhpr2 czhpr2_ + #define F77_sgemv csgemv_ + #define F77_sgbmv csgbmv_ + #define F77_strmv cstrmv_ + #define F77_stbmv cstbmv_ + #define F77_stpmv cstpmv_ + #define F77_strsv cstrsv_ + #define F77_stbsv cstbsv_ + #define F77_stpsv cstpsv_ + #define F77_dgemv cdgemv_ + #define F77_dgbmv cdgbmv_ + #define F77_dtrmv cdtrmv_ + #define F77_dtbmv cdtbmv_ + #define F77_dtpmv cdtpmv_ + #define F77_dtrsv cdtrsv_ + #define F77_dtbsv cdtbsv_ + #define F77_dtpsv cdtpsv_ + #define F77_cgemv ccgemv_ + #define F77_cgbmv ccgbmv_ + #define F77_ctrmv cctrmv_ + #define F77_ctbmv cctbmv_ + #define F77_ctpmv cctpmv_ + #define F77_ctrsv cctrsv_ + #define F77_ctbsv cctbsv_ + #define F77_ctpsv cctpsv_ + #define F77_zgemv czgemv_ + #define F77_zgbmv czgbmv_ + #define F77_ztrmv cztrmv_ + #define F77_ztbmv cztbmv_ + #define F77_ztpmv cztpmv_ + #define F77_ztrsv cztrsv_ + #define F77_ztbsv cztbsv_ + #define F77_ztpsv cztpsv_ +/* + * Level 3 BLAS + */ + #define F77_s3chke cs3chke_ + #define F77_d3chke cd3chke_ + #define F77_c3chke cc3chke_ + #define F77_z3chke cz3chke_ + #define F77_chemm cchemm_ + #define F77_cherk ccherk_ + #define F77_cher2k ccher2k_ + #define F77_zhemm czhemm_ + #define F77_zherk czherk_ + #define F77_zher2k czher2k_ + #define F77_sgemm csgemm_ + #define F77_ssymm cssymm_ + #define F77_ssyrk cssyrk_ + #define F77_ssyr2k cssyr2k_ + #define F77_strmm cstrmm_ + #define F77_strsm cstrsm_ + #define F77_dgemm cdgemm_ + #define F77_dsymm cdsymm_ + #define F77_dsyrk cdsyrk_ + #define F77_dsyr2k cdsyr2k_ + #define F77_dtrmm cdtrmm_ + #define F77_dtrsm cdtrsm_ + #define F77_cgemm ccgemm_ + #define F77_csymm ccsymm_ + #define F77_csyrk ccsyrk_ + #define F77_csyr2k ccsyr2k_ + #define F77_ctrmm cctrmm_ + #define F77_ctrsm cctrsm_ + #define F77_zgemm czgemm_ + #define F77_zsymm czsymm_ + #define F77_zsyrk czsyrk_ + #define F77_zsyr2k czsyr2k_ + #define F77_ztrmm cztrmm_ + #define F77_ztrsm cztrsm_ +#elif defined(UPCASE) + #define F77_xerbla XERBLA +/* + * Level 1 BLAS + */ + #define F77_srotg SROTGTEST + #define F77_srotmg SROTMGTEST + #define F77_srot SROTCTEST + #define F77_srotm SROTMTEST + #define F77_drotg DROTGTEST + #define F77_drotmg DROTMGTEST + #define F77_drot DROTTEST + #define F77_drotm DROTMTEST + #define F77_sswap SSWAPTEST + #define F77_scopy SCOPYTEST + #define F77_saxpy SAXPYTEST + #define F77_isamax ISAMAXTEST + #define F77_dswap DSWAPTEST + #define F77_dcopy DCOPYTEST + #define F77_daxpy DAXPYTEST + #define F77_idamax IDAMAXTEST + #define F77_cswap CSWAPTEST + #define F77_ccopy CCOPYTEST + #define F77_caxpy CAXPYTEST + #define F77_icamax ICAMAXTEST + #define F77_zswap ZSWAPTEST + #define F77_zcopy ZCOPYTEST + #define F77_zaxpy ZAXPYTEST + #define F77_izamax IZAMAXTEST + #define F77_sdot SDOTTEST + #define F77_ddot DDOTTEST + #define F77_dsdot DSDOTTEST + #define F77_sscal SSCALTEST + #define F77_dscal DSCALTEST + #define F77_cscal CSCALTEST + #define F77_zscal ZSCALTEST + #define F77_csscal CSSCALTEST + #define F77_zdscal ZDSCALTEST + #define F77_cdotu CDOTUTEST + #define F77_cdotc CDOTCTEST + #define F77_zdotu ZDOTUTEST + #define F77_zdotc ZDOTCTEST + #define F77_snrm2 SNRM2TEST + #define F77_sasum SASUMTEST + #define F77_dnrm2 DNRM2TEST + #define F77_dasum DASUMTEST + #define F77_scnrm2 SCNRM2TEST + #define F77_scasum SCASUMTEST + #define F77_dznrm2 DZNRM2TEST + #define F77_dzasum DZASUMTEST + #define F77_sdsdot SDSDOTTEST +/* + * Level 2 BLAS + */ + #define F77_s2chke CS2CHKE + #define F77_d2chke CD2CHKE + #define F77_c2chke CC2CHKE + #define F77_z2chke CZ2CHKE + #define F77_ssymv CSSYMV + #define F77_ssbmv CSSBMV + #define F77_sspmv CSSPMV + #define F77_sger CSGER + #define F77_ssyr CSSYR + #define F77_sspr CSSPR + #define F77_ssyr2 CSSYR2 + #define F77_sspr2 CSSPR2 + #define F77_dsymv CDSYMV + #define F77_dsbmv CDSBMV + #define F77_dspmv CDSPMV + #define F77_dger CDGER + #define F77_dsyr CDSYR + #define F77_dspr CDSPR + #define F77_dsyr2 CDSYR2 + #define F77_dspr2 CDSPR2 + #define F77_chemv CCHEMV + #define F77_chbmv CCHBMV + #define F77_chpmv CCHPMV + #define F77_cgeru CCGERU + #define F77_cgerc CCGERC + #define F77_cher CCHER + #define F77_chpr CCHPR + #define F77_cher2 CCHER2 + #define F77_chpr2 CCHPR2 + #define F77_zhemv CZHEMV + #define F77_zhbmv CZHBMV + #define F77_zhpmv CZHPMV + #define F77_zgeru CZGERU + #define F77_zgerc CZGERC + #define F77_zher CZHER + #define F77_zhpr CZHPR + #define F77_zher2 CZHER2 + #define F77_zhpr2 CZHPR2 + #define F77_sgemv CSGEMV + #define F77_sgbmv CSGBMV + #define F77_strmv CSTRMV + #define F77_stbmv CSTBMV + #define F77_stpmv CSTPMV + #define F77_strsv CSTRSV + #define F77_stbsv CSTBSV + #define F77_stpsv CSTPSV + #define F77_dgemv CDGEMV + #define F77_dgbmv CDGBMV + #define F77_dtrmv CDTRMV + #define F77_dtbmv CDTBMV + #define F77_dtpmv CDTPMV + #define F77_dtrsv CDTRSV + #define F77_dtbsv CDTBSV + #define F77_dtpsv CDTPSV + #define F77_cgemv CCGEMV + #define F77_cgbmv CCGBMV + #define F77_ctrmv CCTRMV + #define F77_ctbmv CCTBMV + #define F77_ctpmv CCTPMV + #define F77_ctrsv CCTRSV + #define F77_ctbsv CCTBSV + #define F77_ctpsv CCTPSV + #define F77_zgemv CZGEMV + #define F77_zgbmv CZGBMV + #define F77_ztrmv CZTRMV + #define F77_ztbmv CZTBMV + #define F77_ztpmv CZTPMV + #define F77_ztrsv CZTRSV + #define F77_ztbsv CZTBSV + #define F77_ztpsv CZTPSV +/* + * Level 3 BLAS + */ + #define F77_s3chke CS3CHKE + #define F77_d3chke CD3CHKE + #define F77_c3chke CC3CHKE + #define F77_z3chke CZ3CHKE + #define F77_chemm CCHEMM + #define F77_cherk CCHERK + #define F77_cher2k CCHER2K + #define F77_zhemm CZHEMM + #define F77_zherk CZHERK + #define F77_zher2k CZHER2K + #define F77_sgemm CSGEMM + #define F77_ssymm CSSYMM + #define F77_ssyrk CSSYRK + #define F77_ssyr2k CSSYR2K + #define F77_strmm CSTRMM + #define F77_strsm CSTRSM + #define F77_dgemm CDGEMM + #define F77_dsymm CDSYMM + #define F77_dsyrk CDSYRK + #define F77_dsyr2k CDSYR2K + #define F77_dtrmm CDTRMM + #define F77_dtrsm CDTRSM + #define F77_cgemm CCGEMM + #define F77_csymm CCSYMM + #define F77_csyrk CCSYRK + #define F77_csyr2k CCSYR2K + #define F77_ctrmm CCTRMM + #define F77_ctrsm CCTRSM + #define F77_zgemm CZGEMM + #define F77_zsymm CZSYMM + #define F77_zsyrk CZSYRK + #define F77_zsyr2k CZSYR2K + #define F77_ztrmm CZTRMM + #define F77_ztrsm CZTRSM +#elif defined(NOCHANGE) + #define F77_xerbla xerbla +/* + * Level 1 BLAS + */ + #define F77_srotg srotgtest + #define F77_srotmg srotmgtest + #define F77_srot srottest + #define F77_srotm srotmtest + #define F77_drotg drotgtest + #define F77_drotmg drotmgtest + #define F77_drot drottest + #define F77_drotm drotmtest + #define F77_sswap sswaptest + #define F77_scopy scopytest + #define F77_saxpy saxpytest + #define F77_isamax isamaxtest + #define F77_dswap dswaptest + #define F77_dcopy dcopytest + #define F77_daxpy daxpytest + #define F77_idamax idamaxtest + #define F77_cswap cswaptest + #define F77_ccopy ccopytest + #define F77_caxpy caxpytest + #define F77_icamax icamaxtest + #define F77_zswap zswaptest + #define F77_zcopy zcopytest + #define F77_zaxpy zaxpytest + #define F77_izamax izamaxtest + #define F77_sdot sdottest + #define F77_ddot ddottest + #define F77_dsdot dsdottest + #define F77_sscal sscaltest + #define F77_dscal dscaltest + #define F77_cscal cscaltest + #define F77_zscal zscaltest + #define F77_csscal csscaltest + #define F77_zdscal zdscaltest + #define F77_cdotu cdotutest + #define F77_cdotc cdotctest + #define F77_zdotu zdotutest + #define F77_zdotc zdotctest + #define F77_snrm2 snrm2test + #define F77_sasum sasumtest + #define F77_dnrm2 dnrm2test + #define F77_dasum dasumtest + #define F77_scnrm2 scnrm2test + #define F77_scasum scasumtest + #define F77_dznrm2 dznrm2test + #define F77_dzasum dzasumtest + #define F77_sdsdot sdsdottest +/* + * Level 2 BLAS + */ + #define F77_s2chke cs2chke + #define F77_d2chke cd2chke + #define F77_c2chke cc2chke + #define F77_z2chke cz2chke + #define F77_ssymv cssymv + #define F77_ssbmv cssbmv + #define F77_sspmv csspmv + #define F77_sger csger + #define F77_ssyr cssyr + #define F77_sspr csspr + #define F77_ssyr2 cssyr2 + #define F77_sspr2 csspr2 + #define F77_dsymv cdsymv + #define F77_dsbmv cdsbmv + #define F77_dspmv cdspmv + #define F77_dger cdger + #define F77_dsyr cdsyr + #define F77_dspr cdspr + #define F77_dsyr2 cdsyr2 + #define F77_dspr2 cdspr2 + #define F77_chemv cchemv + #define F77_chbmv cchbmv + #define F77_chpmv cchpmv + #define F77_cgeru ccgeru + #define F77_cgerc ccgerc + #define F77_cher ccher + #define F77_chpr cchpr + #define F77_cher2 ccher2 + #define F77_chpr2 cchpr2 + #define F77_zhemv czhemv + #define F77_zhbmv czhbmv + #define F77_zhpmv czhpmv + #define F77_zgeru czgeru + #define F77_zgerc czgerc + #define F77_zher czher + #define F77_zhpr czhpr + #define F77_zher2 czher2 + #define F77_zhpr2 czhpr2 + #define F77_sgemv csgemv + #define F77_sgbmv csgbmv + #define F77_strmv cstrmv + #define F77_stbmv cstbmv + #define F77_stpmv cstpmv + #define F77_strsv cstrsv + #define F77_stbsv cstbsv + #define F77_stpsv cstpsv + #define F77_dgemv cdgemv + #define F77_dgbmv cdgbmv + #define F77_dtrmv cdtrmv + #define F77_dtbmv cdtbmv + #define F77_dtpmv cdtpmv + #define F77_dtrsv cdtrsv + #define F77_dtbsv cdtbsv + #define F77_dtpsv cdtpsv + #define F77_cgemv ccgemv + #define F77_cgbmv ccgbmv + #define F77_ctrmv cctrmv + #define F77_ctbmv cctbmv + #define F77_ctpmv cctpmv + #define F77_ctrsv cctrsv + #define F77_ctbsv cctbsv + #define F77_ctpsv cctpsv + #define F77_zgemv czgemv + #define F77_zgbmv czgbmv + #define F77_ztrmv cztrmv + #define F77_ztbmv cztbmv + #define F77_ztpmv cztpmv + #define F77_ztrsv cztrsv + #define F77_ztbsv cztbsv + #define F77_ztpsv cztpsv +/* + * Level 3 BLAS + */ + #define F77_s3chke cs3chke + #define F77_d3chke cd3chke + #define F77_c3chke cc3chke + #define F77_z3chke cz3chke + #define F77_chemm cchemm + #define F77_cherk ccherk + #define F77_cher2k ccher2k + #define F77_zhemm czhemm + #define F77_zherk czherk + #define F77_zher2k czher2k + #define F77_sgemm csgemm + #define F77_ssymm cssymm + #define F77_ssyrk cssyrk + #define F77_ssyr2k cssyr2k + #define F77_strmm cstrmm + #define F77_strsm cstrsm + #define F77_dgemm cdgemm + #define F77_dsymm cdsymm + #define F77_dsyrk cdsyrk + #define F77_dsyr2k cdsyr2k + #define F77_dtrmm cdtrmm + #define F77_dtrsm cdtrsm + #define F77_cgemm ccgemm + #define F77_csymm ccsymm + #define F77_csyrk ccsyrk + #define F77_csyr2k ccsyr2k + #define F77_ctrmm cctrmm + #define F77_ctrsm cctrsm + #define F77_zgemm czgemm + #define F77_zsymm czsymm + #define F77_zsyrk czsyrk + #define F77_zsyr2k czsyr2k + #define F77_ztrmm cztrmm + #define F77_ztrsm cztrsm +#endif + +void get_transpose_type(char *type, enum CBLAS_TRANSPOSE *trans); +void get_uplo_type(char *type, enum CBLAS_UPLO *uplo); +void get_diag_type(char *type, enum CBLAS_DIAG *diag); +void get_side_type(char *type, enum CBLAS_SIDE *side); + +#endif /* CBLAS_TEST_H */ diff --git a/CBLAS/testing/cin2 b/CBLAS/testing/cin2 new file mode 100644 index 000000000..5c613d167 --- /dev/null +++ b/CBLAS/testing/cin2 @@ -0,0 +1,34 @@ +'CBLAT2.SNAP' NAME OF SNAPSHOT OUTPUT FILE +-1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0) +F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD. +F LOGICAL FLAG, T TO STOP ON FAILURES. +T LOGICAL FLAG, T TO TEST ERROR EXITS. +2 LOGICAL FLAG, T TO TEST ROW-MAJOR (IF FALSE COLUMN-MAJOR IS TESTED) +16.0 THRESHOLD VALUE OF TEST RATIO +6 NUMBER OF VALUES OF N +0 1 2 3 5 9 VALUES OF N +4 NUMBER OF VALUES OF K +0 1 2 4 VALUES OF K +4 NUMBER OF VALUES OF INCX AND INCY +1 2 -1 -2 VALUES OF INCX AND INCY +3 NUMBER OF VALUES OF ALPHA +(0.0,0.0) (1.0,0.0) (0.7,-0.9) VALUES OF ALPHA +3 NUMBER OF VALUES OF BETA +(0.0,0.0) (1.0,0.0) (1.3,-1.1) VALUES OF BETA +cblas_cgemv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_cgbmv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_chemv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_chbmv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_chpmv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_ctrmv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_ctbmv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_ctpmv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_ctrsv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_ctbsv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_ctpsv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_cgerc T PUT F FOR NO TEST. SAME COLUMNS. +cblas_cgeru T PUT F FOR NO TEST. SAME COLUMNS. +cblas_cher T PUT F FOR NO TEST. SAME COLUMNS. +cblas_chpr T PUT F FOR NO TEST. SAME COLUMNS. +cblas_cher2 T PUT F FOR NO TEST. SAME COLUMNS. +cblas_chpr2 T PUT F FOR NO TEST. SAME COLUMNS. diff --git a/CBLAS/testing/cin3 b/CBLAS/testing/cin3 new file mode 100644 index 000000000..7b34f267b --- /dev/null +++ b/CBLAS/testing/cin3 @@ -0,0 +1,22 @@ +'CBLAT3.SNAP' NAME OF SNAPSHOT OUTPUT FILE +-1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0) +F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD. +F LOGICAL FLAG, T TO STOP ON FAILURES. +T LOGICAL FLAG, T TO TEST ERROR EXITS. +2 0 TO TEST COLUMN-MAJOR, 1 TO TEST ROW-MAJOR, 2 TO TEST BOTH +16.0 THRESHOLD VALUE OF TEST RATIO +6 NUMBER OF VALUES OF N +0 1 2 3 5 9 VALUES OF N +3 NUMBER OF VALUES OF ALPHA +(0.0,0.0) (1.0,0.0) (0.7,-0.9) VALUES OF ALPHA +3 NUMBER OF VALUES OF BETA +(0.0,0.0) (1.0,0.0) (1.3,-1.1) VALUES OF BETA +cblas_cgemm T PUT F FOR NO TEST. SAME COLUMNS. +cblas_chemm T PUT F FOR NO TEST. SAME COLUMNS. +cblas_csymm T PUT F FOR NO TEST. SAME COLUMNS. +cblas_ctrmm T PUT F FOR NO TEST. SAME COLUMNS. +cblas_ctrsm T PUT F FOR NO TEST. SAME COLUMNS. +cblas_cherk T PUT F FOR NO TEST. SAME COLUMNS. +cblas_csyrk T PUT F FOR NO TEST. SAME COLUMNS. +cblas_cher2k T PUT F FOR NO TEST. SAME COLUMNS. +cblas_csyr2k T PUT F FOR NO TEST. SAME COLUMNS. diff --git a/CBLAS/testing/din2 b/CBLAS/testing/din2 new file mode 100644 index 000000000..000351c77 --- /dev/null +++ b/CBLAS/testing/din2 @@ -0,0 +1,33 @@ +'DBLAT2.SNAP' NAME OF SNAPSHOT OUTPUT FILE +-1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0) +F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD. +F LOGICAL FLAG, T TO STOP ON FAILURES. +T LOGICAL FLAG, T TO TEST ERROR EXITS. +2 0 TO TEST COLUMN-MAJOR, 1 TO TEST ROW-MAJOR, 2 TO TEST BOTH +16.0 THRESHOLD VALUE OF TEST RATIO +6 NUMBER OF VALUES OF N +0 1 2 3 5 9 VALUES OF N +4 NUMBER OF VALUES OF K +0 1 2 4 VALUES OF K +4 NUMBER OF VALUES OF INCX AND INCY +1 2 -1 -2 VALUES OF INCX AND INCY +3 NUMBER OF VALUES OF ALPHA +0.0 1.0 0.7 VALUES OF ALPHA +3 NUMBER OF VALUES OF BETA +0.0 1.0 0.9 VALUES OF BETA +cblas_dgemv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_dgbmv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_dsymv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_dsbmv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_dspmv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_dtrmv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_dtbmv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_dtpmv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_dtrsv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_dtbsv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_dtpsv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_dger T PUT F FOR NO TEST. SAME COLUMNS. +cblas_dsyr T PUT F FOR NO TEST. SAME COLUMNS. +cblas_dspr T PUT F FOR NO TEST. SAME COLUMNS. +cblas_dsyr2 T PUT F FOR NO TEST. SAME COLUMNS. +cblas_dspr2 T PUT F FOR NO TEST. SAME COLUMNS. diff --git a/CBLAS/testing/din3 b/CBLAS/testing/din3 new file mode 100644 index 000000000..1f777156f --- /dev/null +++ b/CBLAS/testing/din3 @@ -0,0 +1,19 @@ +'DBLAT3.SNAP' NAME OF SNAPSHOT OUTPUT FILE +-1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0) +F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD. +F LOGICAL FLAG, T TO STOP ON FAILURES. +T LOGICAL FLAG, T TO TEST ERROR EXITS. +2 0 TO TEST COLUMN-MAJOR, 1 TO TEST ROW-MAJOR, 2 TO TEST BOTH +16.0 THRESHOLD VALUE OF TEST RATIO +6 NUMBER OF VALUES OF N +1 2 3 5 7 9 VALUES OF N +3 NUMBER OF VALUES OF ALPHA +0.0 1.0 0.7 VALUES OF ALPHA +3 NUMBER OF VALUES OF BETA +0.0 1.0 1.3 VALUES OF BETA +cblas_dgemm T PUT F FOR NO TEST. SAME COLUMNS. +cblas_dsymm T PUT F FOR NO TEST. SAME COLUMNS. +cblas_dtrmm T PUT F FOR NO TEST. SAME COLUMNS. +cblas_dtrsm T PUT F FOR NO TEST. SAME COLUMNS. +cblas_dsyrk T PUT F FOR NO TEST. SAME COLUMNS. +cblas_dsyr2k T PUT F FOR NO TEST. SAME COLUMNS. diff --git a/CBLAS/testing/sin2 b/CBLAS/testing/sin2 new file mode 100644 index 000000000..b5bb12d0e --- /dev/null +++ b/CBLAS/testing/sin2 @@ -0,0 +1,33 @@ +'SBLAT2.SNAP' NAME OF SNAPSHOT OUTPUT FILE +-1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0) +F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD. +F LOGICAL FLAG, T TO STOP ON FAILURES. +T LOGICAL FLAG, T TO TEST ERROR EXITS. +2 LOGICAL FLAG, T TO TEST ROW-MAJOR (IF FALSE COLUMN-MAJOR IS TESTED) +16.0 THRESHOLD VALUE OF TEST RATIO +6 NUMBER OF VALUES OF N +0 1 2 3 5 9 VALUES OF N +4 NUMBER OF VALUES OF K +0 1 2 4 VALUES OF K +4 NUMBER OF VALUES OF INCX AND INCY +1 2 -1 -2 VALUES OF INCX AND INCY +3 NUMBER OF VALUES OF ALPHA +0.0 1.0 0.7 VALUES OF ALPHA +3 NUMBER OF VALUES OF BETA +0.0 1.0 0.9 VALUES OF BETA +cblas_sgemv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_sgbmv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_ssymv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_ssbmv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_sspmv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_strmv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_stbmv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_stpmv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_strsv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_stbsv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_stpsv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_sger T PUT F FOR NO TEST. SAME COLUMNS. +cblas_ssyr T PUT F FOR NO TEST. SAME COLUMNS. +cblas_sspr T PUT F FOR NO TEST. SAME COLUMNS. +cblas_ssyr2 T PUT F FOR NO TEST. SAME COLUMNS. +cblas_sspr2 T PUT F FOR NO TEST. SAME COLUMNS. diff --git a/CBLAS/testing/sin3 b/CBLAS/testing/sin3 new file mode 100644 index 000000000..aa18530cb --- /dev/null +++ b/CBLAS/testing/sin3 @@ -0,0 +1,19 @@ +'SBLAT3.SNAP' NAME OF SNAPSHOT OUTPUT FILE +-1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0) +F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD. +F LOGICAL FLAG, T TO STOP ON FAILURES. +T LOGICAL FLAG, T TO TEST ERROR EXITS. +2 0 TO TEST COLUMN-MAJOR, 1 TO TEST ROW-MAJOR, 2 TO TEST BOTH +16.0 THRESHOLD VALUE OF TEST RATIO +6 NUMBER OF VALUES OF N +0 1 2 3 5 9 VALUES OF N +3 NUMBER OF VALUES OF ALPHA +0.0 1.0 0.7 VALUES OF ALPHA +3 NUMBER OF VALUES OF BETA +0.0 1.0 1.3 VALUES OF BETA +cblas_sgemm T PUT F FOR NO TEST. SAME COLUMNS. +cblas_ssymm T PUT F FOR NO TEST. SAME COLUMNS. +cblas_strmm T PUT F FOR NO TEST. SAME COLUMNS. +cblas_strsm T PUT F FOR NO TEST. SAME COLUMNS. +cblas_ssyrk T PUT F FOR NO TEST. SAME COLUMNS. +cblas_ssyr2k T PUT F FOR NO TEST. SAME COLUMNS. diff --git a/CBLAS/testing/zin2 b/CBLAS/testing/zin2 new file mode 100644 index 000000000..fb74ababe --- /dev/null +++ b/CBLAS/testing/zin2 @@ -0,0 +1,34 @@ +'ZBLAT2.SNAP' NAME OF SNAPSHOT OUTPUT FILE +-1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0) +F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD. +F LOGICAL FLAG, T TO STOP ON FAILURES. +T LOGICAL FLAG, T TO TEST ERROR EXITS. +2 LOGICAL FLAG, T TO TEST ROW-MAJOR (IF FALSE COLUMN-MAJOR IS TESTED) +16.0 THRESHOLD VALUE OF TEST RATIO +6 NUMBER OF VALUES OF N +0 1 2 3 5 9 VALUES OF N +4 NUMBER OF VALUES OF K +0 1 2 4 VALUES OF K +4 NUMBER OF VALUES OF INCX AND INCY +1 2 -1 -2 VALUES OF INCX AND INCY +3 NUMBER OF VALUES OF ALPHA +(0.0,0.0) (1.0,0.0) (0.7,-0.9) VALUES OF ALPHA +3 NUMBER OF VALUES OF BETA +(0.0,0.0) (1.0,0.0) (1.3,-1.1) VALUES OF BETA +cblas_zgemv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_zgbmv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_zhemv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_zhbmv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_zhpmv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_ztrmv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_ztbmv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_ztpmv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_ztrsv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_ztbsv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_ztpsv T PUT F FOR NO TEST. SAME COLUMNS. +cblas_zgerc T PUT F FOR NO TEST. SAME COLUMNS. +cblas_zgeru T PUT F FOR NO TEST. SAME COLUMNS. +cblas_zher T PUT F FOR NO TEST. SAME COLUMNS. +cblas_zhpr T PUT F FOR NO TEST. SAME COLUMNS. +cblas_zher2 T PUT F FOR NO TEST. SAME COLUMNS. +cblas_zhpr2 T PUT F FOR NO TEST. SAME COLUMNS. diff --git a/CBLAS/testing/zin3 b/CBLAS/testing/zin3 new file mode 100644 index 000000000..90a657592 --- /dev/null +++ b/CBLAS/testing/zin3 @@ -0,0 +1,22 @@ +'ZBLAT3.SNAP' NAME OF SNAPSHOT OUTPUT FILE +-1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0) +F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD. +F LOGICAL FLAG, T TO STOP ON FAILURES. +T LOGICAL FLAG, T TO TEST ERROR EXITS. +2 0 TO TEST COLUMN-MAJOR, 1 TO TEST ROW-MAJOR, 2 TO TEST BOTH +16.0 THRESHOLD VALUE OF TEST RATIO +6 NUMBER OF VALUES OF N +0 1 2 3 5 9 VALUES OF N +3 NUMBER OF VALUES OF ALPHA +(0.0,0.0) (1.0,0.0) (0.7,-0.9) VALUES OF ALPHA +3 NUMBER OF VALUES OF BETA +(0.0,0.0) (1.0,0.0) (1.3,-1.1) VALUES OF BETA +cblas_zgemm T PUT F FOR NO TEST. SAME COLUMNS. +cblas_zhemm T PUT F FOR NO TEST. SAME COLUMNS. +cblas_zsymm T PUT F FOR NO TEST. SAME COLUMNS. +cblas_ztrmm T PUT F FOR NO TEST. SAME COLUMNS. +cblas_ztrsm T PUT F FOR NO TEST. SAME COLUMNS. +cblas_zherk T PUT F FOR NO TEST. SAME COLUMNS. +cblas_zsyrk T PUT F FOR NO TEST. SAME COLUMNS. +cblas_zher2k T PUT F FOR NO TEST. SAME COLUMNS. +cblas_zsyr2k T PUT F FOR NO TEST. SAME COLUMNS. diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..827639352 --- /dev/null +++ b/Makefile @@ -0,0 +1,60 @@ + +export TOP_DIR = $(shell pwd) +export INC_PATH = +export LIBS := -L$(TOP_DIR)/lua/lib -llua $(TOP_DIR)/mjson/mjson.a + +include architecture.h + +ifdef USE_LIBXC + ADDITIONAL_TARGETS += libxc + ADD_LIBS += -L$(TOP_DIR)/opt/lib/ -lxc + INC_PATH += -I$(TOP_DIR)/opt/include/ + export OPT_DEFINES += -DUSE_LIBXC +endif + +ifdef HAS_BACKTRACE + export OPT_DEFINES += -DHAS_BACKTRACE +endif + +all: liblua $(ADDITIONAL_TARGETS) libmjson LSMS +# all: liblua libjson $(ADDITIONAL_TARGETS) libmjson LSMS +# all: liblua LSMS Documentation + +.PHONY: libxc clean LSMS Documentation liblua libjson libmjson Tools + +clean: + cd lua && $(MAKE) clean + cd mjson && $(MAKE) clean + cd libjson && $(MAKE) clean + cd src && $(MAKE) clean + cd lib && $(MAKE) clean + cd doc && $(MAKE) clean + cd CBLAS && $(MAKE) clean + cd Tools && $(MAKE) clean + +LSMS: liblua libmjson $(ADDITIONAL_TARGETS) + cd src && $(MAKE) + +Tools: liblua libjson + cd Tools && $(MAKE) + +Documentation: + cd doc && $(MAKE) + +liblua: + cd lua; $(MAKE); $(MAKE) local + +libmjson: + cd mjson && $(MAKE) + +libjson: + cd libjson && $(MAKE) + +zblock_lu_driver: liblua CBLAS_target + cd src && $(MAKE) zblock_lu_driver + +CBLAS_target: + cd CBLAS && $(MAKE) alllib + +test: liblua $(ADDITIONAL_TARGETS) libmjson + cd src && $(MAKE) test diff --git a/Test/Co/Co_v b/Test/Co/Co_v new file mode 100644 index 000000000..c8adf7f01 --- /dev/null +++ b/Test/Co/Co_v @@ -0,0 +1,1542 @@ + nspin vdif :::::: Potentials for ferro-magnetic non-relativistic Co. + 2 0.7759131250713D+00 + LSMS: xx z= 27. xvalws= 5.36138 + 27. 2.34846 10. 0.7855389718132D+00 + -0.1113096740000D+02 0.8631327458937D+00 1001 +-0.5399712413135D+02-0.5399708930706D+02-0.5399705406106D+02-0.5399701838827D+02 +-0.5399698228350D+02-0.5399694574153D+02-0.5399690875705D+02-0.5399687132473D+02 +-0.5399683343912D+02-0.5399679509473D+02-0.5399675628603D+02-0.5399671700738D+02 +-0.5399667725309D+02-0.5399663701739D+02-0.5399659629446D+02-0.5399655507840D+02 +-0.5399651336323D+02-0.5399647114292D+02-0.5399642841134D+02-0.5399638516230D+02 +-0.5399634138954D+02-0.5399629708671D+02-0.5399625224739D+02-0.5399620686508D+02 +-0.5399616093322D+02-0.5399611444515D+02-0.5399606739411D+02-0.5399601977330D+02 +-0.5399597157584D+02-0.5399592279471D+02-0.5399587342284D+02-0.5399582345311D+02 +-0.5399577287826D+02-0.5399572169096D+02-0.5399566988378D+02-0.5399561744924D+02 +-0.5399556437973D+02-0.5399551066755D+02-0.5399545630492D+02-0.5399540128397D+02 +-0.5399534559673D+02-0.5399528923511D+02-0.5399523219096D+02-0.5399517445601D+02 +-0.5399511602188D+02-0.5399505688012D+02-0.5399499702215D+02-0.5399493643930D+02 +-0.5399487512277D+02-0.5399481306370D+02-0.5399475025309D+02-0.5399468668184D+02 +-0.5399462234072D+02-0.5399455722041D+02-0.5399449131148D+02-0.5399442460438D+02 +-0.5399435708943D+02-0.5399428875686D+02-0.5399421959674D+02-0.5399414959908D+02 +-0.5399407875371D+02-0.5399400705039D+02-0.5399393447868D+02-0.5399386102811D+02 +-0.5399378668800D+02-0.5399371144760D+02-0.5399363529599D+02-0.5399355822213D+02 +-0.5399348021486D+02-0.5399340126285D+02-0.5399332135469D+02-0.5399324047877D+02 +-0.5399315862338D+02-0.5399307577665D+02-0.5399299192657D+02-0.5399290706099D+02 +-0.5399282116760D+02-0.5399273423397D+02-0.5399264624746D+02-0.5399255719535D+02 +-0.5399246706472D+02-0.5399237584251D+02-0.5399228351547D+02-0.5399219007025D+02 +-0.5399209549328D+02-0.5399199977085D+02-0.5399190288910D+02-0.5399180483398D+02 +-0.5399170559126D+02-0.5399160514656D+02-0.5399150348532D+02-0.5399140059280D+02 +-0.5399129645408D+02-0.5399119105406D+02-0.5399108437746D+02-0.5399097640882D+02 +-0.5399086713248D+02-0.5399075653259D+02-0.5399064459313D+02-0.5399053129785D+02 +-0.5399041663033D+02-0.5399030057395D+02-0.5399018311188D+02-0.5399006422707D+02 +-0.5398994390231D+02-0.5398982212013D+02-0.5398969886287D+02-0.5398957411267D+02 +-0.5398944785144D+02-0.5398932006086D+02-0.5398919072239D+02-0.5398905981729D+02 +-0.5398892732657D+02-0.5398879323102D+02-0.5398865751119D+02-0.5398852014738D+02 +-0.5398838111969D+02-0.5398824040796D+02-0.5398809799176D+02-0.5398795385045D+02 +-0.5398780796311D+02-0.5398766030858D+02-0.5398751086547D+02-0.5398735961207D+02 +-0.5398720652646D+02-0.5398705158644D+02-0.5398689476951D+02-0.5398673605293D+02 +-0.5398657541371D+02-0.5398641282849D+02-0.5398624827372D+02-0.5398608172552D+02 +-0.5398591315974D+02-0.5398574255191D+02-0.5398556987728D+02-0.5398539511080D+02 +-0.5398521822711D+02-0.5398503920056D+02-0.5398485800515D+02-0.5398467461462D+02 +-0.5398448900234D+02-0.5398430114138D+02-0.5398411100448D+02-0.5398391856406D+02 +-0.5398372379219D+02-0.5398352666060D+02-0.5398332714069D+02-0.5398312520349D+02 +-0.5398292081971D+02-0.5398271395969D+02-0.5398250459339D+02-0.5398229269045D+02 +-0.5398207822009D+02-0.5398186115120D+02-0.5398164145227D+02-0.5398141909139D+02 +-0.5398119403631D+02-0.5398096625435D+02-0.5398073571244D+02-0.5398050237712D+02 +-0.5398026621452D+02-0.5398002719036D+02-0.5397978526992D+02-0.5397954041809D+02 +-0.5397929259932D+02-0.5397904177763D+02-0.5397878791661D+02-0.5397853097938D+02 +-0.5397827092865D+02-0.5397800772665D+02-0.5397774133517D+02-0.5397747171551D+02 +-0.5397719882853D+02-0.5397692263458D+02-0.5397664309358D+02-0.5397636016490D+02 +-0.5397607380747D+02-0.5397578397969D+02-0.5397549063947D+02-0.5397519374419D+02 +-0.5397489325072D+02-0.5397458911543D+02-0.5397428129411D+02-0.5397396974207D+02 +-0.5397365441404D+02-0.5397333526419D+02-0.5397301224618D+02-0.5397268531306D+02 +-0.5397235441732D+02-0.5397201951090D+02-0.5397168054511D+02-0.5397133747071D+02 +-0.5397099023784D+02-0.5397063879604D+02-0.5397028309423D+02-0.5396992308071D+02 +-0.5396955870314D+02-0.5396918990860D+02-0.5396881664344D+02-0.5396843885342D+02 +-0.5396805648362D+02-0.5396766947845D+02-0.5396727778165D+02-0.5396688133626D+02 +-0.5396648008465D+02-0.5396607396848D+02-0.5396566292869D+02-0.5396524690551D+02 +-0.5396482583844D+02-0.5396439966625D+02-0.5396396832696D+02-0.5396353175783D+02 +-0.5396308989536D+02-0.5396264267538D+02-0.5396219003058D+02-0.5396173190697D+02 +-0.5396126824611D+02-0.5396079896689D+02-0.5396032399551D+02-0.5395984326419D+02 +-0.5395935670295D+02-0.5395886424097D+02-0.5395836580659D+02-0.5395786132727D+02 +-0.5395735072959D+02-0.5395683393924D+02-0.5395631088099D+02-0.5395578147871D+02 +-0.5395524565534D+02-0.5395470333286D+02-0.5395415443232D+02-0.5395359887380D+02 +-0.5395303657642D+02-0.5395246745830D+02-0.5395189143653D+02-0.5395130842728D+02 +-0.5395071834559D+02-0.5395012110554D+02-0.5394951662013D+02-0.5394890480132D+02 +-0.5394828555997D+02-0.5394765880586D+02-0.5394702444768D+02-0.5394638239301D+02 +-0.5394573254829D+02-0.5394507481880D+02-0.5394440910872D+02-0.5394373532100D+02 +-0.5394305335746D+02-0.5394236311866D+02-0.5394166450401D+02-0.5394095741165D+02 +-0.5394024173849D+02-0.5393951738018D+02-0.5393878423110D+02-0.5393804218433D+02 +-0.5393729113167D+02-0.5393653096356D+02-0.5393576156914D+02-0.5393498283617D+02 +-0.5393419465105D+02-0.5393339689878D+02-0.5393258946297D+02-0.5393177222581D+02 +-0.5393094506805D+02-0.5393010786896D+02-0.5392926050635D+02-0.5392840285653D+02 +-0.5392753479434D+02-0.5392665619303D+02-0.5392576692431D+02-0.5392486685837D+02 +-0.5392395586377D+02-0.5392303380747D+02-0.5392210055481D+02-0.5392115596947D+02 +-0.5392019991348D+02-0.5391923224717D+02-0.5391825282917D+02-0.5391726151637D+02 +-0.5391625816392D+02-0.5391524262519D+02-0.5391421475175D+02-0.5391317439338D+02 +-0.5391212139799D+02-0.5391105561164D+02-0.5390997687851D+02-0.5390888504086D+02 +-0.5390777993905D+02-0.5390666141143D+02-0.5390552929442D+02-0.5390438342243D+02 +-0.5390322362780D+02-0.5390204974088D+02-0.5390086158988D+02-0.5389965900096D+02 +-0.5389844179810D+02-0.5389720980317D+02-0.5389596283581D+02-0.5389470071348D+02 +-0.5389342325141D+02-0.5389213026253D+02-0.5389082155751D+02-0.5388949694469D+02 +-0.5388815623004D+02-0.5388679921718D+02-0.5388542570729D+02-0.5388403549915D+02 +-0.5388262838904D+02-0.5388120417074D+02-0.5387976263553D+02-0.5387830357210D+02 +-0.5387682676657D+02-0.5387533200242D+02-0.5387381906047D+02-0.5387228771885D+02 +-0.5387073775298D+02-0.5386916893552D+02-0.5386758103632D+02-0.5386597382244D+02 +-0.5386434705804D+02-0.5386270050442D+02-0.5386103391990D+02-0.5385934705991D+02 +-0.5385763967679D+02-0.5385591151989D+02-0.5385416233548D+02-0.5385239186670D+02 +-0.5385059985352D+02-0.5384878603273D+02-0.5384695013788D+02-0.5384509189929D+02 +-0.5384321104390D+02-0.5384130729532D+02-0.5383938037376D+02-0.5383742999602D+02 +-0.5383545587539D+02-0.5383345772163D+02-0.5383143524094D+02-0.5382938813593D+02 +-0.5382731610551D+02-0.5382521884492D+02-0.5382309604566D+02-0.5382094739542D+02 +-0.5381877257804D+02-0.5381657127349D+02-0.5381434315779D+02-0.5381208790299D+02 +-0.5380980517711D+02-0.5380749464407D+02-0.5380515596366D+02-0.5380278879151D+02 +-0.5380039277898D+02-0.5379796757316D+02-0.5379551281679D+02-0.5379302814825D+02 +-0.5379051320142D+02-0.5378796760571D+02-0.5378539098596D+02-0.5378278296240D+02 +-0.5378014315061D+02-0.5377747116141D+02-0.5377476660083D+02-0.5377202907010D+02 +-0.5376925816550D+02-0.5376645347836D+02-0.5376361459501D+02-0.5376074109664D+02 +-0.5375783255935D+02-0.5375488855399D+02-0.5375190864615D+02-0.5374889239607D+02 +-0.5374583935859D+02-0.5374274908309D+02-0.5373962111338D+02-0.5373645498772D+02 +-0.5373325023864D+02-0.5373000639295D+02-0.5372672297165D+02-0.5372339948985D+02 +-0.5372003545673D+02-0.5371663037540D+02-0.5371318374291D+02-0.5370969505011D+02 +-0.5370616378162D+02-0.5370258941572D+02-0.5369897142428D+02-0.5369530927274D+02 +-0.5369160241995D+02-0.5368785031810D+02-0.5368405241271D+02-0.5368020814250D+02 +-0.5367631693928D+02-0.5367237822793D+02-0.5366839142627D+02-0.5366435594503D+02 +-0.5366027118767D+02-0.5365613655038D+02-0.5365195142199D+02-0.5364771518382D+02 +-0.5364342720963D+02-0.5363908686555D+02-0.5363469350995D+02-0.5363024649337D+02 +-0.5362574515843D+02-0.5362118883974D+02-0.5361657686374D+02-0.5361190854874D+02 +-0.5360718320469D+02-0.5360240013314D+02-0.5359755862716D+02-0.5359265797120D+02 +-0.5358769744102D+02-0.5358267630358D+02-0.5357759381692D+02-0.5357244923009D+02 +-0.5356724178300D+02-0.5356197070639D+02-0.5355663522164D+02-0.5355123454072D+02 +-0.5354576786604D+02-0.5354023439038D+02-0.5353463329678D+02-0.5352896375838D+02 +-0.5352322493836D+02-0.5351741598982D+02-0.5351153605562D+02-0.5350558426836D+02 +-0.5349955975014D+02-0.5349346161256D+02-0.5348728895650D+02-0.5348104087213D+02 +-0.5347471643863D+02-0.5346831472421D+02-0.5346183478592D+02-0.5345527566955D+02 +-0.5344863640949D+02-0.5344191602860D+02-0.5343511353813D+02-0.5342822793756D+02 +-0.5342125821447D+02-0.5341420334443D+02-0.5340706229087D+02-0.5339983400494D+02 +-0.5339251742540D+02-0.5338511147848D+02-0.5337761507773D+02-0.5337002712393D+02 +-0.5336234650493D+02-0.5335457209552D+02-0.5334670275730D+02-0.5333873733855D+02 +-0.5333067467410D+02-0.5332251358518D+02-0.5331425287928D+02-0.5330589135006D+02 +-0.5329742777715D+02-0.5328886092606D+02-0.5328018954804D+02-0.5327141237989D+02 +-0.5326252814392D+02-0.5325353554771D+02-0.5324443328403D+02-0.5323522003070D+02 +-0.5322589445043D+02-0.5321645519071D+02-0.5320690088363D+02-0.5319723014577D+02 +-0.5318744157808D+02-0.5317753376570D+02-0.5316750527786D+02-0.5315735466769D+02 +-0.5314708047215D+02-0.5313668121186D+02-0.5312615539094D+02-0.5311550149691D+02 +-0.5310471800055D+02-0.5309380335574D+02-0.5308275599936D+02-0.5307157435112D+02 +-0.5306025681347D+02-0.5304880177141D+02-0.5303720759243D+02-0.5302547262634D+02 +-0.5301359520512D+02-0.5300157364285D+02-0.5298940623553D+02-0.5297709126100D+02 +-0.5296462697877D+02-0.5295201162996D+02-0.5293924343712D+02-0.5292632060414D+02 +-0.5291324131615D+02-0.5290000373936D+02-0.5288660602101D+02-0.5287304628922D+02 +-0.5285932265286D+02-0.5284543320154D+02-0.5283137600538D+02-0.5281714911503D+02 +-0.5280275056148D+02-0.5278817835605D+02-0.5277343049023D+02-0.5275850493562D+02 +-0.5274339964385D+02-0.5272811254652D+02-0.5271264155508D+02-0.5269698456079D+02 +-0.5268113943464D+02-0.5266510402729D+02-0.5264887616900D+02-0.5263245366958D+02 +-0.5261583431837D+02-0.5259901588410D+02-0.5258199611498D+02-0.5256477273855D+02 +-0.5254734346172D+02-0.5252970597069D+02-0.5251185793099D+02-0.5249379698739D+02 +-0.5247552076395D+02-0.5245702686401D+02-0.5243831287014D+02-0.5241937634422D+02 +-0.5240021482742D+02-0.5238082584019D+02-0.5236120688235D+02-0.5234135543307D+02 +-0.5232126895097D+02-0.5230094487407D+02-0.5228038061998D+02-0.5225957358585D+02 +-0.5223852114851D+02-0.5221722066448D+02-0.5219566947015D+02-0.5217386488177D+02 +-0.5215180419566D+02-0.5212948468820D+02-0.5210690361606D+02-0.5208405821627D+02 +-0.5206094570636D+02-0.5203756328449D+02-0.5201390812967D+02-0.5198997740183D+02 +-0.5196576824206D+02-0.5194127777277D+02-0.5191650309784D+02-0.5189144130290D+02 +-0.5186608945546D+02-0.5184044460516D+02-0.5181450378400D+02-0.5178826400654D+02 +-0.5176172227021D+02-0.5173487555551D+02-0.5170772082627D+02-0.5168025502996D+02 +-0.5165247509792D+02-0.5162437794574D+02-0.5159596047345D+02-0.5156721956588D+02 +-0.5153815209299D+02-0.5150875491020D+02-0.5147902485865D+02-0.5144895876565D+02 +-0.5141855344496D+02-0.5138780569717D+02-0.5135671231005D+02-0.5132527005896D+02 +-0.5129347570720D+02-0.5126132600641D+02-0.5122881769696D+02-0.5119594750838D+02 +-0.5116271215971D+02-0.5112910835996D+02-0.5109513280852D+02-0.5106078219557D+02 +-0.5102605320254D+02-0.5099094250248D+02-0.5095544676055D+02-0.5091956263445D+02 +-0.5088328677481D+02-0.5084661582574D+02-0.5080954642515D+02-0.5077207520523D+02 +-0.5073419879295D+02-0.5069591381041D+02-0.5065721687538D+02-0.5061810460164D+02 +-0.5057857359948D+02-0.5053862047610D+02-0.5049824183606D+02-0.5045743428165D+02 +-0.5041619441336D+02-0.5037451883024D+02-0.5033240413033D+02-0.5028984691102D+02 +-0.5024684376943D+02-0.5020339130281D+02-0.5015948610884D+02-0.5011512478602D+02 +-0.5007030393394D+02-0.5002502015366D+02-0.4997927004792D+02-0.4993305022153D+02 +-0.4988635728149D+02-0.4983918783736D+02-0.4979153850140D+02-0.4974340588875D+02 +-0.4969478661771D+02-0.4964567730986D+02-0.4959607459006D+02-0.4954597508667D+02 +-0.4949537543162D+02-0.4944427226050D+02-0.4939266221248D+02-0.4934054193039D+02 +-0.4928790806067D+02-0.4923475725330D+02-0.4918108616174D+02-0.4912689144275D+02 +-0.4907216975630D+02-0.4901691776537D+02-0.4896113213574D+02-0.4890480953578D+02 +-0.4884794663611D+02-0.4879054010938D+02-0.4873258662990D+02-0.4867408287333D+02 +-0.4861502551620D+02-0.4855541123563D+02-0.4849523670879D+02-0.4843449861252D+02 +-0.4837319362278D+02-0.4831131841423D+02-0.4824886965962D+02-0.4818584402935D+02 +-0.4812223819086D+02-0.4805804880810D+02-0.4799327254097D+02-0.4792790604477D+02 +-0.4786194596959D+02-0.4779538895974D+02-0.4772823165324D+02-0.4766047068127D+02 +-0.4759210266771D+02-0.4752312422853D+02-0.4745353197143D+02-0.4738332249534D+02 +-0.4731249239009D+02-0.4724103823603D+02-0.4716895660382D+02-0.4709624405414D+02 +-0.4702289713761D+02-0.4694891239471D+02-0.4687428635579D+02-0.4679901554127D+02 +-0.4672309646183D+02-0.4664652561876D+02-0.4656929950447D+02-0.4649141460310D+02 +-0.4641286739133D+02-0.4633365433923D+02-0.4625377191141D+02-0.4617321656828D+02 +-0.4609198476752D+02-0.4601007296571D+02-0.4592747762024D+02-0.4584419519133D+02 +-0.4576022214439D+02-0.4567555495255D+02-0.4559019009936D+02-0.4550412408199D+02 +-0.4541735341440D+02-0.4532987463086D+02-0.4524168428983D+02-0.4515277897793D+02 +-0.4506315531435D+02-0.4497280995537D+02-0.4488173959922D+02-0.4478994099116D+02 +-0.4469741092882D+02-0.4460414626770D+02-0.4451014392697D+02-0.4441540089539D+02 +-0.4431991423741D+02-0.4422368109941D+02-0.4412669871611D+02-0.4402896441690D+02 +-0.4393047563239D+02-0.4383122990079D+02-0.4373122487430D+02-0.4363045832539D+02 +-0.4352892815288D+02-0.4342663238781D+02-0.4332356919894D+02-0.4321973689793D+02 +-0.4311513394407D+02-0.4300975894839D+02-0.4290361067735D+02-0.4279668805587D+02 +-0.4268899016915D+02-0.4258051626408D+02-0.4247126574958D+02-0.4236123819600D+02 +-0.4225043333338D+02-0.4213885104867D+02-0.4202649138173D+02-0.4191335452015D+02 +-0.4179944079286D+02-0.4168475066247D+02-0.4156928471642D+02-0.4145304365690D+02 +-0.4133602828971D+02-0.4121823951195D+02-0.4109967829880D+02-0.4098034568947D+02 +-0.4086024277234D+02-0.4073937066969D+02-0.4061773052197D+02-0.4049532347199D+02 +-0.4037215064920D+02-0.4024821315419D+02-0.4012351204387D+02-0.3999804831748D+02 +-0.3987182290361D+02-0.3974483664856D+02-0.3961709030649D+02-0.3948858453109D+02 +-0.3935931986956D+02-0.3922929675866D+02-0.3909851552324D+02-0.3896697637742D+02 +-0.3883467942762D+02-0.3870162467962D+02-0.3856781204731D+02-0.3843324136436D+02 +-0.3829791239854D+02-0.3816182486845D+02-0.3802497846267D+02-0.3788737286107D+02 +-0.3774900775802D+02-0.3760988288741D+02-0.3746999804906D+02-0.3732935313635D+02 +-0.3718794816470D+02-0.3704578330065D+02-0.3690285889122D+02-0.3675917549323D+02 +-0.3661473390230D+02-0.3646953518122D+02-0.3632358068735D+02-0.3617687209898D+02 +-0.3602941144014D+02-0.3588120110382D+02-0.3573224387333D+02-0.3558254294108D+02 +-0.3543210192643D+02-0.3528092489063D+02-0.3512901634823D+02-0.3497638127672D+02 +-0.3482302512367D+02-0.3466895381094D+02-0.3451417373606D+02-0.3435869177093D+02 +-0.3420251525753D+02-0.3404565200109D+02-0.3388811026025D+02-0.3372989873465D+02 +-0.3357102654982D+02-0.3341150323944D+02-0.3325133872514D+02-0.3309054329386D+02 +-0.3292912757289D+02-0.3276710250269D+02-0.3260447930770D+02-0.3244126946521D+02 +-0.3227748467239D+02-0.3211313681175D+02-0.3194823791513D+02-0.3178280012642D+02 +-0.3161683566316D+02-0.3145035677723D+02-0.3128337571494D+02-0.3111590467644D+02 +-0.3094795577514D+02-0.3077954099684D+02-0.3061067215918D+02-0.3044136087161D+02 +-0.3027161849592D+02-0.3010145610782D+02-0.2993088445972D+02-0.2975991394542D+02 +-0.2958855456598D+02-0.2941681589611D+02-0.2924470705717D+02-0.2907223668935D+02 +-0.2889941292767D+02-0.2872624338130D+02-0.2855273511629D+02-0.2837889464220D+02 +-0.2820472790265D+02-0.2803024027037D+02-0.2785543654682D+02-0.2768032096660D+02 +-0.2750489720705D+02-0.2732916840315D+02-0.2715313716792D+02-0.2697680561853D+02 +-0.2680017540817D+02-0.2662324776395D+02-0.2644602353065D+02-0.2626850322052D+02 +-0.2609068706907D+02-0.2591257509591D+02-0.2573416717245D+02-0.2555546309522D+02 +-0.2537646266235D+02-0.2519716575514D+02-0.2501757242415D+02-0.2483768297800D+02 +-0.2465749807452D+02-0.2447701881311D+02-0.2429624682718D+02-0.2411518437541D+02 +-0.2393383443018D+02-0.2375220076165D+02-0.2357028801553D+02-0.2338810178274D+02 +-0.2320564865878D+02-0.2302293629064D+02-0.2283997340908D+02-0.2265676984414D+02 +-0.2247333652166D+02-0.2228968543908D+02-0.2210582961866D+02-0.2192178303701D+02 +-0.2173756053016D+02-0.2155317767387D+02-0.2136865063989D+02-0.2118399602957D+02 +-0.2099923068693D+02-0.2081437149470D+02-0.2062943515724D+02-0.2044443797565D+02 +-0.2025939562084D+02-0.2007432291106D+02-0.1988923360096D+02-0.1970414018909D+02 +-0.1951905375089D+02-0.1933398380360D+02-0.1914893820864D+02-0.1896392311613D+02 +-0.1877894295609D+02-0.1859400047154D+02-0.1840909680300D+02-0.1822423162087D+02 +-0.1803940329505D+02-0.1785460910395D+02-0.1766984547575D+02-0.1748510825514D+02 +-0.1730039298850D+02-0.1711569522038D+02-0.1693101079387D+02-0.1674633614795D+02 +-0.1656166860580D+02-0.1637700664804D+02-0.1619235016647D+02-0.1600770069430D+02 +-0.1582306160992D+02-0.1563843831231D+02-0.1545383836677D+02-0.1526927161789D+02 +-0.1508475027741D+02-0.1490028898489D+02-0.1471590482925D+02-0.1453161734914D+02 +-0.1434744851085D+02-0.1416342266091D+02-0.1397956645766D+02-0.1379590878383D+02 +-0.1361248064205D+02-0.1342931503532D+02-0.1324644683449D+02-0.1306391263454D+02 +-0.1288175060163D+02-0.1270000031234D+02-0.1251870258697D+02-0.1233789931830D+02 +-0.1215763329714D+02-0.1197794803608D+02-0.1179888759258D+02-0.1162049639252D+02 +-0.1144281905533D+02-0.1126590022145D+02-0.1108978438327D+02-0.1091451572006D+02 +-0.1074013793796D+02-0.1056669411531D+02-0.1039422655431D+02-0.1022277663929D+02 +-0.1005238470225D+02-0.9883089895996D+01-0.9714930075327D+01-0.9547941686606D+01 +-0.9382159665970D+01-0.9217617346440D+01-0.9054346374112D+01-0.8892376633582D+01 +-0.8731736182701D+01-0.8572451196708D+01-0.8414545921770D+01-0.8258042637899D+01 +-0.8102961631167D+01-0.7949321180080D+01-0.7797137533637D+01-0.7646424918037D+01 +-0.7497195547599D+01-0.7349459638622D+01-0.7203225434122D+01-0.7058499236422D+01 +-0.6915285447351D+01-0.6773586615665D+01-0.6633403491346D+01-0.6494735086407D+01 +-0.6357578741794D+01-0.6221930199999D+01-0.6087783682926D+01-0.5955131974630D+01 +-0.5823966508386D+01-0.5694277458601D+01-0.5566053834937D+01-0.5439283577046D+01 +-0.5313953658403D+01-0.5190050188752D+01-0.5067558517252D+01-0.4946463337998D+01 +-0.4826748796250D+01-0.4708398595031D+01-0.4591396101700D+01-0.4475724454028D+01 +-0.4361366665401D+01-0.4248305728702D+01-0.4136524718509D+01-0.4026006891185D+01 +-0.3916735782498D+01-0.3808695302374D+01-0.3701869826438D+01-0.3596244283985D+01 +-0.3491804242022D+01-0.3388535985068D+01-0.3286426590387D+01-0.3185463998359D+01 +-0.3085637077701D+01-0.2986935685289D+01-0.2889350720345D+01-0.2792874172791D+01 +-0.2697499165606D+01-0.2603219991080D+01-0.2510032140886D+01-0.2417932329983D+01 +-0.2326918514391D+01-0.2236989903015D+01-0.2148146963707D+01-0.2060391423924D+01 +-0.1973726266382D+01-0.1888155720258D+01-0.1803685248569D+01-0.1720321532489D+01 +-0.1638072453476D+01-0.1556947074156D+01-0.1476955619053D+01-0.1398109456277D+01 +-0.1320421081386D+01-0.1243904104665D+01-0.1168573242950D+01-0.1094444317977D+01 +-0.1021534260483D+01-0.9498611236059D+00-0.8794441052354D+00-0.8103035804038D+00 +-0.7424611445011D+00-0.6759396678815D+00-0.6107633622446D+00-0.5469578589992D+00 +-0.4845502996307D+00-0.4235694379227D+00-0.3640457537247D+00-0.3060115778087D+00 +-0.2495012270785D+00-0.1945511500546D+00-0.1412000812947D+00-0.8948920409847D-01 +-0.3946232087121D-01 0.8833969658603D-02 0.5535008908023D-01 0.1000332914403D+00 + 0.1428274616875D+00 0.1832763419477D+00 0.2306857033194D+00 0.2505225860012D+00 + 0.8781079374715D-01 + 0.0000000000000D+00 + 1010 0.5361377770373D+01 + 0.2468387529510D-04 0.2527101859203D-04 0.2587212523312D-04 0.2648752718540D-04 + 0.2711756430422D-04 0.2776258452054D-04 0.2842294403265D-04 0.2909900750251D-04 + 0.2979114825668D-04 0.3049974849203D-04 0.3122519948634D-04 0.3196790181390D-04 + 0.3272826556620D-04 0.3350671057785D-04 0.3430366665791D-04 0.3511957382661D-04 + 0.3595488255778D-04 0.3681005402696D-04 0.3768556036541D-04 0.3858188492018D-04 + 0.3949952252025D-04 0.4043897974911D-04 0.4140077522366D-04 0.4238543987982D-04 + 0.4339351726488D-04 0.4442556383676D-04 0.4548214927038D-04 0.4656385677129D-04 + 0.4767128339671D-04 0.4880504038421D-04 0.4996575348812D-04 0.5115406332401D-04 + 0.5237062572121D-04 0.5361611208376D-04 0.5489120975989D-04 0.5619662242022D-04 + 0.5753307044500D-04 0.5890129132041D-04 0.6030204004432D-04 0.6173608954163D-04 + 0.6320423108946D-04 0.6470727475241D-04 0.6624604982808D-04 0.6782140530319D-04 + 0.6943421032045D-04 0.7108535465657D-04 0.7277574921144D-04 0.7450632650902D-04 + 0.7627804121001D-04 0.7809187063668D-04 0.7994881531013D-04 0.8184989950019D-04 + 0.8379617178843D-04 0.8578870564443D-04 0.8782860001569D-04 0.8991697993150D-04 + 0.9205499712109D-04 0.9424383064640D-04 0.9648468754980D-04 0.9877880351716D-04 + 0.1011274435566D-03 0.1035319026931D-03 0.1059935066801D-03 0.1085136127270D-03 + 0.1110936102446D-03 0.1137349216083D-03 0.1164390029381D-03 0.1192073448990D-03 + 0.1220414735182D-03 0.1249429510233D-03 0.1279133766993D-03 0.1309543877662D-03 + 0.1340676602776D-03 0.1372549100398D-03 0.1405178935532D-03 0.1438584089759D-03 + 0.1472782971098D-03 0.1507794424100D-03 0.1543637740183D-03 0.1580332668207D-03 + 0.1617899425304D-03 0.1656358707958D-03 0.1695731703350D-03 0.1736040100969D-03 + 0.1777306104497D-03 0.1819552443976D-03 0.1862802388262D-03 0.1907079757768D-03 + 0.1952408937515D-03 0.1998814890486D-03 0.2046323171292D-03 0.2094959940171D-03 + 0.2144751977304D-03 0.2195726697478D-03 0.2247912165088D-03 0.2301337109499D-03 + 0.2356030940763D-03 0.2412023765714D-03 0.2469346404432D-03 0.2528030407106D-03 + 0.2588108071287D-03 0.2649612459547D-03 0.2712577417561D-03 0.2777037592603D-03 + 0.2843028452488D-03 0.2910586304956D-03 0.2979748317509D-03 0.3050552537721D-03 + 0.3123037914018D-03 0.3197244316955D-03 0.3273212560989D-03 0.3350984426761D-03 + 0.3430602683911D-03 0.3512111114419D-03 0.3595554536502D-03 0.3680978829068D-03 + 0.3768430956749D-03 0.3857958995517D-03 0.3949612158909D-03 0.4043440824857D-03 + 0.4139496563159D-03 0.4237832163590D-03 0.4338501664671D-03 0.4441560383119D-03 + 0.4547064943980D-03 0.4655073311479D-03 0.4765644820585D-03 0.4878840209319D-03 + 0.4994721651824D-03 0.5113352792204D-03 0.5234798779160D-03 0.5359126301435D-03 + 0.5486403624095D-03 0.5616700625653D-03 0.5750088836069D-03 0.5886641475633D-03 + 0.6026433494768D-03 0.6169541614753D-03 0.6316044369413D-03 0.6466022147768D-03 + 0.6619557237698D-03 0.6776733870612D-03 0.6937638267177D-03 0.7102358684104D-03 + 0.7270985462036D-03 0.7443611074552D-03 0.7620330178311D-03 0.7801239664381D-03 + 0.7986438710750D-03 0.8176028836078D-03 0.8370113954692D-03 0.8568800432873D-03 + 0.8772197146451D-03 0.8980415539750D-03 0.9193569685896D-03 0.9411776348545D-03 + 0.9635155045040D-03 0.9863828111045D-03 0.1009792076668D-02 0.1033756118421D-02 + 0.1058288055728D-02 0.1083401317180D-02 0.1109109647845D-02 0.1135427116689D-02 + 0.1162368124168D-02 0.1189947410000D-02 0.1218180061111D-02 0.1247081519774D-02 + 0.1276667591928D-02 0.1306954455702D-02 0.1337958670122D-02 0.1369697184037D-02 + 0.1402187345233D-02 0.1435446909780D-02 0.1469494051573D-02 0.1504347372117D-02 + 0.1540025910517D-02 0.1576549153717D-02 0.1613937046967D-02 0.1652210004533D-02 + 0.1691388920657D-02 0.1731495180770D-02 0.1772550672965D-02 0.1814577799732D-02 + 0.1857599489969D-02 0.1901639211266D-02 0.1946720982477D-02 0.1992869386577D-02 + 0.2040109583822D-02 0.2088467325206D-02 0.2137968966234D-02 0.2188641481007D-02 + 0.2240512476640D-02 0.2293610208001D-02 0.2347963592795D-02 0.2403602227001D-02 + 0.2460556400650D-02 0.2518857113980D-02 0.2578536093953D-02 0.2639625811154D-02 + 0.2702159497083D-02 0.2766171161833D-02 0.2831695612185D-02 0.2898768470109D-02 + 0.2967426191698D-02 0.3037706086524D-02 0.3109646337449D-02 0.3183286020883D-02 + 0.3258665127505D-02 0.3335824583462D-02 0.3414806272045D-02 0.3495653055872D-02 + 0.3578408799564D-02 0.3663118392947D-02 0.3749827774782D-02 0.3838583957030D-02 + 0.3929435049680D-02 0.4022430286132D-02 0.4117620049165D-02 0.4215055897490D-02 + 0.4314790592910D-02 0.4416878128094D-02 0.4521373754988D-02 0.4628334013860D-02 + 0.4737816763011D-02 0.4849881209161D-02 0.4964587938513D-02 0.5081998948532D-02 + 0.5202177680433D-02 0.5325189052408D-02 0.5451099493605D-02 0.5579976978868D-02 + 0.5711891064264D-02 0.5846912923414D-02 0.5985115384634D-02 0.6126572968919D-02 + 0.6271361928778D-02 0.6419560287944D-02 0.6571247881971D-02 0.6726506399748D-02 + 0.6885419425938D-02 0.7048072484371D-02 0.7214553082413D-02 0.7384950756312D-02 + 0.7559357117578D-02 0.7737865900384D-02 0.7920573010027D-02 0.8107576572475D-02 + 0.8298976985012D-02 0.8494876968016D-02 0.8695381617876D-02 0.8900598461103D-02 + 0.9110637509624D-02 0.9325611317316D-02 0.9545635037781D-02 0.9770826483409D-02 + 0.1000130618574D-01 0.1023719745718D-01 0.1047862645401D-01 0.1072572224091D-01 + 0.1097861685676D-01 0.1123744538202D-01 0.1150234600746D-01 0.1177346010454D-01 + 0.1205093229720D-01 0.1233491053532D-01 0.1262554616974D-01 0.1292299402893D-01 + 0.1322741249732D-01 0.1353896359540D-01 0.1385781306144D-01 0.1418413043515D-01 + 0.1451808914299D-01 0.1485986658548D-01 0.1520964422629D-01 0.1556760768333D-01 + 0.1593394682176D-01 0.1630885584907D-01 0.1669253341210D-01 0.1708518269631D-01 + 0.1748701152700D-01 0.1789823247286D-01 0.1831906295165D-01 0.1874972533819D-01 + 0.1919044707458D-01 0.1964146078292D-01 0.2010300438024D-01 0.2057532119605D-01 + 0.2105866009230D-01 0.2155327558585D-01 0.2205942797367D-01 0.2257738346049D-01 + 0.2310741428936D-01 0.2364979887477D-01 0.2420482193871D-01 0.2477277464948D-01 + 0.2535395476350D-01 0.2594866677006D-01 0.2655722203900D-01 0.2717993897163D-01 + 0.2781714315469D-01 0.2846916751746D-01 0.2913635249229D-01 0.2981904617826D-01 + 0.3051760450837D-01 0.3123239142005D-01 0.3196377902929D-01 0.3271214780825D-01 + 0.3347788676654D-01 0.3426139363623D-01 0.3506307506055D-01 0.3588334678651D-01 + 0.3672263386136D-01 0.3758137083309D-01 0.3846000195491D-01 0.3935898139385D-01 + 0.4027877344364D-01 0.4121985274170D-01 0.4218270449062D-01 0.4316782468391D-01 + 0.4417572033638D-01 0.4520690971893D-01 0.4626192259810D-01 0.4734130048028D-01 + 0.4844559686073D-01 0.4957537747745D-01 0.5073122057008D-01 0.5191371714372D-01 + 0.5312347123801D-01 0.5436110020125D-01 0.5562723496996D-01 0.5692252035371D-01 + 0.5824761532542D-01 0.5960319331722D-01 0.6098994252192D-01 0.6240856620017D-01 + 0.6385978299344D-01 0.6534432724287D-01 0.6686294931410D-01 0.6841641592814D-01 + 0.7000551049839D-01 0.7163103347389D-01 0.7329380268889D-01 0.7499465371883D-01 + 0.7673444024286D-01 0.7851403441284D-01 0.8033432722913D-01 0.8219622892306D-01 + 0.8410066934630D-01 0.8604859836717D-01 0.8804098627394D-01 0.9007882418524D-01 + 0.9216312446778D-01 0.9429492116117D-01 0.9647527041030D-01 0.9870525090507D-01 + 0.1009859643277D+00 0.1033185358075D+00 0.1057041143839D+00 0.1081438734764D+00 + 0.1106390113631D+00 0.1131907516671D+00 0.1158003438502D+00 0.1184690637160D+00 + 0.1211982139197D+00 0.1239891244874D+00 0.1268431533430D+00 0.1297616868433D+00 + 0.1327461403227D+00 0.1357979586446D+00 0.1389186167631D+00 0.1421096202922D+00 + 0.1453725060843D+00 0.1487088428167D+00 0.1521202315876D+00 0.1556083065208D+00 + 0.1591747353786D+00 0.1628212201841D+00 0.1665494978527D+00 0.1703613408315D+00 + 0.1742585577490D+00 0.1782429940723D+00 0.1823165327744D+00 0.1864810950099D+00 + 0.1907386407999D+00 0.1950911697254D+00 0.1995407216305D+00 0.2040893773334D+00 + 0.2087392593470D+00 0.2134925326083D+00 0.2183514052161D+00 0.2233181291781D+00 + 0.2283950011656D+00 0.2335843632782D+00 0.2388886038153D+00 0.2443101580578D+00 + 0.2498515090564D+00 0.2555151884290D+00 0.2613037771660D+00 0.2672199064433D+00 + 0.2732662584429D+00 0.2794455671815D+00 0.2857606193459D+00 0.2922142551360D+00 + 0.2988093691143D+00 0.3055489110627D+00 0.3124358868452D+00 0.3194733592773D+00 + 0.3266644490007D+00 0.3340123353640D+00 0.3415202573092D+00 0.3491915142619D+00 + 0.3570294670273D+00 0.3650375386900D+00 0.3732192155174D+00 0.3815780478666D+00 + 0.3901176510947D+00 0.3988417064712D+00 0.4077539620920D+00 0.4168582337959D+00 + 0.4261584060809D+00 0.4356584330217D+00 0.4453623391867D+00 0.4552742205536D+00 + 0.4653982454241D+00 0.4757386553363D+00 0.4862997659735D+00 0.4970859680702D+00 + 0.5081017283125D+00 0.5193515902341D+00 0.5308401751057D+00 0.5425721828168D+00 + 0.5545523927504D+00 0.5667856646476D+00 0.5792769394629D+00 0.5920312402082D+00 + 0.6050536727840D+00 0.6183494267978D+00 0.6319237763681D+00 0.6457820809114D+00 + 0.6599297859136D+00 0.6743724236817D+00 0.6891156140761D+00 0.7041650652219D+00 + 0.7195265741967D+00 0.7352060276948D+00 0.7512094026648D+00 0.7675427669199D+00 + 0.7842122797189D+00 0.8012241923161D+00 0.8185848484780D+00 0.8363006849655D+00 + 0.8543782319788D+00 0.8728241135643D+00 0.8916450479797D+00 0.9108478480163D+00 + 0.9304394212763D+00 0.9504267704025D+00 0.9708169932571D+00 0.9916172830495D+00 + 0.1012834928408D+01 0.1034477313395D+01 0.1056551917461D+01 0.1079066315337D+01 + 0.1102028176860D+01 0.1125445266729D+01 0.1149325444194D+01 0.1173676662666D+01 + 0.1198506969248D+01 0.1223824504192D+01 0.1249637500265D+01 0.1275954282028D+01 + 0.1302783265031D+01 0.1330132954904D+01 0.1358011946355D+01 0.1386428922067D+01 + 0.1415392651485D+01 0.1444911989499D+01 0.1474995875009D+01 0.1505653329372D+01 + 0.1536893454735D+01 0.1568725432231D+01 0.1601158520053D+01 0.1634202051391D+01 + 0.1667865432232D+01 0.1702158139011D+01 0.1737089716119D+01 0.1772669773259D+01 + 0.1808907982640D+01 0.1845814076013D+01 0.1883397841538D+01 0.1921669120478D+01 + 0.1960637803718D+01 0.2000313828100D+01 0.2040707172572D+01 0.2081827854145D+01 + 0.2123685923650D+01 0.2166291461292D+01 0.2209654572001D+01 0.2253785380559D+01 + 0.2298694026522D+01 0.2344390658903D+01 0.2390885430635D+01 0.2438188492794D+01 + 0.2486309988585D+01 0.2535260047076D+01 0.2585048776686D+01 0.2635686258413D+01 + 0.2687182538801D+01 0.2739547622638D+01 0.2792791465380D+01 0.2846923965298D+01 + 0.2901954955344D+01 0.2957894194724D+01 0.3014751360178D+01 0.3072536036966D+01 + 0.3131257709544D+01 0.3190925751937D+01 0.3251549417798D+01 0.3313137830152D+01 + 0.3375699970812D+01 0.3439244669485D+01 0.3503780592530D+01 0.3569316231399D+01 + 0.3635859890740D+01 0.3703419676152D+01 0.3772003481612D+01 0.3841618976553D+01 + 0.3912273592590D+01 0.3983974509911D+01 0.4056728643311D+01 0.4130542627880D+01 + 0.4205422804337D+01 0.4281375204021D+01 0.4358405533526D+01 0.4436519158991D+01 + 0.4515721090039D+01 0.4596015963377D+01 0.4677408026051D+01 0.4759901118357D+01 + 0.4843498656425D+01 0.4928203614466D+01 0.5014018506697D+01 0.5100945368949D+01 + 0.5188985739955D+01 0.5278140642343D+01 0.5368410563325D+01 0.5459795435109D+01 + 0.5552294615021D+01 0.5645906865378D+01 0.5740630333099D+01 0.5836462529076D+01 + 0.5933400307331D+01 0.6031439843951D+01 0.6130576615842D+01 0.6230805379300D+01 + 0.6332120148439D+01 0.6434514173468D+01 0.6537979918875D+01 0.6642509041502D+01 + 0.6748092368573D+01 0.6854719875667D+01 0.6962380664696D+01 0.7071062941883D+01 + 0.7180753995801D+01 0.7291440175484D+01 0.7403106868658D+01 0.7515738480111D+01 + 0.7629318410258D+01 0.7743829033921D+01 0.7859251679381D+01 0.7975566607727D+01 + 0.8092752992560D+01 0.8210788900093D+01 0.8329651269686D+01 0.8449315894878D+01 + 0.8569757404957D+01 0.8690949247125D+01 0.8812863669314D+01 0.8935471703698D+01 + 0.9058743150981D+01 0.9182646565491D+01 0.9307149241169D+01 0.9432217198503D+01 + 0.9557815172464D+01 0.9683906601535D+01 0.9810453617874D+01 0.9937417038694D+01 + 0.1006475635894D+02 0.1019242974531D+02 0.1032039403172D+02 0.1044860471630D+02 + 0.1057701595991D+02 0.1070558058640D+02 0.1083425008455D+02 0.1096297461189D+02 + 0.1109170300036D+02 0.1122038276401D+02 0.1134896010875D+02 0.1147737994419D+02 + 0.1160558589787D+02 0.1173352033158D+02 0.1186112436031D+02 0.1198833787346D+02 + 0.1211509955884D+02 0.1224134692906D+02 0.1236701635090D+02 0.1249204307726D+02 + 0.1261636128216D+02 0.1273990409855D+02 0.1286260365930D+02 0.1298439114115D+02 + 0.1310519681191D+02 0.1322495008090D+02 0.1334357955265D+02 0.1346101308398D+02 + 0.1357717784451D+02 0.1369200038059D+02 0.1380540668280D+02 0.1391732225698D+02 + 0.1402767219884D+02 0.1413638127222D+02 0.1424337399097D+02 0.1434857470453D+02 + 0.1445190768714D+02 0.1455329723080D+02 0.1465266774184D+02 0.1474994384117D+02 + 0.1484505046824D+02 0.1493791298851D+02 0.1502845730457D+02 0.1511660997076D+02 + 0.1520229831123D+02 0.1528545054147D+02 0.1536599589303D+02 0.1544386474157D+02 + 0.1551898873797D+02 0.1559130094241D+02 0.1566073596132D+02 0.1572723008709D+02 + 0.1579072144027D+02 0.1585115011416D+02 0.1590845832162D+02 0.1596259054384D+02 + 0.1601349368087D+02 0.1606111720378D+02 0.1610541330793D+02 0.1614633706747D+02 + 0.1618384659040D+02 0.1621790317426D+02 0.1624847146178D+02 0.1627551959647D+02 + 0.1629901937764D+02 0.1631894641453D+02 0.1633528027913D+02 0.1634800465743D+02 + 0.1635710749859D+02 0.1636258116153D+02 0.1636442255880D+02 0.1636263329690D+02 + 0.1635721981291D+02 0.1634819350675D+02 0.1633557086876D+02 0.1631937360188D+02 + 0.1629962873813D+02 0.1627636874881D+02 0.1624963164783D+02 0.1621946108773D+02 + 0.1618590644777D+02 0.1614902291366D+02 0.1610887154825D+02 0.1606551935278D+02 + 0.1601903931795D+02 0.1596951046453D+02 0.1591701787272D+02 0.1586165269984D+02 + 0.1580351218588D+02 0.1574269964617D+02 0.1567932445101D+02 0.1561350199139D+02 + 0.1554535363060D+02 0.1547500664111D+02 0.1540259412639D+02 0.1532825492714D+02 + 0.1525213351164D+02 0.1517437984975D+02 0.1509514927038D+02 0.1501460230190D+02 + 0.1493290449547D+02 0.1485022623086D+02 0.1476674250470D+02 0.1468263270097D+02 + 0.1459808034353D+02 0.1451327283091D+02 0.1442840115298D+02 0.1434365958991D+02 + 0.1425924539323D+02 0.1417535844940D+02 0.1409220092591D+02 0.1400997690035D+02 + 0.1392889197261D+02 0.1384915286086D+02 0.1377096698159D+02 0.1369454201430D+02 + 0.1362008545156D+02 0.1354780413493D+02 0.1347790377766D+02 0.1341058847497D+02 + 0.1334606020265D+02 0.1328451830518D+02 0.1322615897423D+02 0.1317117471873D+02 + 0.1311975382765D+02 0.1307207982678D+02 0.1302833093077D+02 0.1298867949187D+02 + 0.1295329144673D+02 0.1292232576286D+02 0.1289593388626D+02 0.1287425919181D+02 + 0.1285743643821D+02 0.1284559122897D+02 0.1283883948152D+02 0.1283728690592D+02 + 0.1284102849529D+02 0.1285014802961D+02 0.1286471759496D+02 0.1288479712000D+02 + 0.1291043393167D+02 0.1294166233206D+02 0.1297850319831D+02 0.1302096360767D+02 + 0.1306903648933D+02 0.1312270030523D+02 0.1318191876157D+02 0.1324664055288D+02 + 0.1331679914041D+02 0.1339231256675D+02 0.1347308330814D+02 0.1355899816627D+02 + 0.1364992820107D+02 0.1374572870588D+02 0.1384623922653D+02 0.1395128362543D+02 + 0.1406067019194D+02 0.1417419180009D+02 0.1429162611446D+02 0.1441273584520D+02 + 0.1453726905257D+02 0.1466495950184D+02 0.1479552706864D+02 0.1492867819507D+02 + 0.1506410639658D+02 0.1520149281949D+02 0.1534050684880D+02 0.1548080676581D+02 + 0.1562204045481D+02 0.1576384615808D+02 0.1590585327794D+02 0.1604768322478D+02 + 0.1618895030940D+02 0.1632926267823D+02 0.1646822328926D+02 0.1660543092694D+02 + 0.1674048125353D+02 0.1687296789460D+02 0.1700248355593D+02 0.1712862116906D+02 + 0.1725097506236D+02 0.1736914215454D+02 0.1748272316710D+02 0.1759132385232D+02 + 0.1769455623293D+02 0.1779203984973D+02 0.1788340301319D+02 0.1796828405478D+02 + 0.1804633257396D+02 0.1811721067636D+02 0.1818059419885D+02 0.1823617391685D+02 + 0.1828365672948D+02 0.1832276681771D+02 0.1835324677116D+02 0.1837485867853D+02 + 0.1838738517731D+02 0.1839063045792D+02 0.1838442121780D+02 0.1836860756075D+02 + 0.1834306383722D+02 0.1830768942102D+02 0.1826240941830D+02 0.1820717530452D+02 + 0.1814196548563D+02 0.1806678577950D+02 0.1798166981405D+02 0.1788667933874D+02 + 0.1778190444622D+02 0.1766746370131D+02 0.1754350417467D+02 0.1741020137882D+02 + 0.1726775910469D+02 0.1711640915683D+02 0.1695641098621D+02 0.1678805121958D+02 + 0.1661164308484D+02 0.1642752573250D+02 0.1623606345335D+02 0.1603764479314D+02 + 0.1583268156556D+02 0.1562160776511D+02 0.1540487838191D+02 0.1518296812125D+02 + 0.1495637003074D+02 0.1472559403875D+02 0.1449116540811D+02 0.1425362310966D+02 + 0.1401351812054D+02 0.1377141165270D+02 0.1352787331760D+02 0.1328347923329D+02 + 0.1303881008086D+02 0.1279444911714D+02 0.1255098015138D+02 0.1230898549383D+02 + 0.1206904388418D+02 0.1183172840867D+02 0.1159760441433D+02 0.1136722742952D+02 + 0.1114114109970D+02 0.1091987514783D+02 0.1070394336850D+02 0.1049384166536D+02 + 0.1029004614096D+02 0.1009301124824D+02 0.9903168012835D+01 0.9720922334935D+01 + 0.9546653379426D+01 0.9380712062592D+01 0.9223419643287D+01 0.9075066426243D+01 + 0.8935910584476D+01 0.8806177107421D+01 0.8686056880797D+01 0.8575705903622D+01 + 0.8475244647153D+01 0.8384757559868D+01 0.8304292721893D+01 0.8233861651565D+01 + 0.8173439266061D+01 0.8122963997268D+01 0.8082338063298D+01 0.8051427895236D+01 + 0.8030064717963D+01 0.8018045283063D+01 0.8015132751059D+01 0.8021057719438D+01 + 0.8035519392134D+01 0.8058186885395D+01 0.8088700664225D+01 0.8126674102852D+01 + 0.8171695161990D+01 0.8223328175004D+01 0.8281115734445D+01 0.8344580669837D+01 + 0.8413228107057D+01 0.8486547599136D+01 0.8564015317877D+01 0.8645096295298D+01 + 0.8729246703576D+01 0.8815916161919D+01 0.8904550058611D+01 0.8994591876347D+01 + 0.9085485508955D+01 0.9176677557643D+01 0.9267619595009D+01 0.9357770385296D+01 + 0.9446598049621D+01 0.9533582165281D+01 0.9618215788685D+01 0.9700007391951D+01 + 0.9778482703805D+01 0.9853186446052D+01 0.9923683957606D+01 0.9989562698810D+01 + 0.1005043362959D+02 0.1010593245587D+02 0.1015572073942D+02 0.1019948686745D+02 + 0.1023694687897D+02 0.1026784514587D+02 0.1029195490789D+02 0.1030907866112D+02 + 0.1031904840103D+02 0.1032172572157D+02 0.1031700177299D+02 0.1030479708169D+02 + 0.1028506123623D+02 0.1025777244450D+02 0.1022293696740D+02 0.1018058843548D+02 + 0.1013078705506D+02 0.1007361871118D+02 0.1000919397505D+02 0.9937647024020D+01 + 0.9859134482419D+01 0.9773834191779D+01 0.9681943919231D+01 0.9583680012823D+01 + 0.9479276012622D+01 0.9368981226390D+01 0.9253059278544D+01 0.9131786640935D+01 + 0.9005451153806D+01 0.8874350545006D+01 0.8738790955248D+01 0.8599085476893D+01 + 0.8455552713297D+01 0.8308515365424D+01 0.8158298851941D+01 0.8005229968595D+01 + 0.7849635592182D+01 0.7691841433947D+01 0.7532170846747D+01 0.7370943689834D+01 + 0.7208475254600D+01 0.7045075254141D+01 0.6881046879012D+01 0.6716685921063D+01 + 0.6552279966790D+01 0.6388107661172D+01 0.6224438042543D+01 0.6061529948638D+01 + 0.5899631493546D+01 0.5738979614939D+01 0.5579799690601D+01 0.5422305222953D+01 + 0.5266697589970D+01 0.5113165860621D+01 0.4961886672702D+01 0.4813024170717D+01 + 0.4666730001268D+01 0.4523143363227D+01 0.4382391109824D+01 0.4244587899674D+01 + 0.4109836393635D+01 0.3978227494333D+01 0.3849840625139D+01 0.3724744045319D+01 + 0.3602995198094D+01 0.3484641088339D+01 0.3369718686663D+01 0.3258255356671D+01 + 0.3150269302248D+01 0.3045770031790D+01 0.2944758836374D+01 0.2847229278975D+01 + 0.2753167691947D+01 0.2662553680078D+01 0.2575360626703D+01 0.2491556200451D+01 + 0.2411102860390D+01 0.2333958357453D+01 0.2260076230201D+01 0.2189406293145D+01 + 0.2121895115987D+01 0.2057486492349D+01 0.1996121896684D+01 0.1937740928252D+01 + 0.1882281741214D+01 0.1829681460047D+01 0.1779876579658D+01 0.1732803349716D+01 + 0.1688398142902D+01 0.1646597806904D+01 0.1607340000117D+01 0.1570563511188D+01 + 0.1536208562615D+01 0.1504217098782D+01 0.1474533058885D+01 0.1447102635337D+01 + 0.1421874518294D+01 0.1398800127078D+01 0.1377833829282D+01 0.1358933148459D+01 + 0.1342058961290D+01 0.1327175685203D+01 0.1314251457400D+01 0.1303258306268D+01 + 0.1294172316131D+01 0.1286973786268D+01 0.1281647385073D+01 0.1278182300155D+01 + 0.1276572385087D+01 0.1276816303386D+01 0.1278917670158D+01 0.1282885191659D+01 + 0.1288732809236D+01 0.1296479645865D+01 0.1306152005669D+01 0.1317783378197D+01 + 0.1331372345597D+01 0.1346789042324D+01 0.1363973934297D+01 0.1382936037743D+01 + 0.1403688909681D+01 0.1426250659823D+01 0.1450643974202D+01 0.1476896150222D+01 + 0.1505039142740D+01 0.1535109620717D+01 + 7 1010 + 1 0 -1 -555.44155 + 2 0 -1 -64.66703 + 2 1 1 -56.00226 + 2 1 -2 -54.91652 + 3 0 -1 -6.26172 + 3 1 1 -3.68057 + 3 1 -2 -3.54274 + 0.2435926140622D-04 0.2493869347519D-04 0.2553190551327D-04 0.2613922512735D-04 + 0.2676098770908D-04 0.2739753661965D-04 0.2804922337907D-04 0.2871640785986D-04 + 0.2939945848539D-04 0.3009875243286D-04 0.3081467584114D-04 0.3154762402354D-04 + 0.3229800168558D-04 0.3306622314800D-04 0.3385271257497D-04 0.3465790420776D-04 + 0.3548224260399D-04 0.3632618288241D-04 0.3719019097367D-04 0.3807474387689D-04 + 0.3898032992237D-04 0.3990744904053D-04 0.4085661303720D-04 0.4182834587545D-04 + 0.4282318396410D-04 0.4384167645305D-04 0.4488438553566D-04 0.4595188675820D-04 + 0.4704476933671D-04 0.4816363648137D-04 0.4930910572850D-04 0.5048180928046D-04 + 0.5168239435358D-04 0.5291152353438D-04 0.5416987514420D-04 0.5545814361239D-04 + 0.5677703985850D-04 0.5812729168337D-04 0.5950964416954D-04 0.6092486009120D-04 + 0.6237372033370D-04 0.6385702432315D-04 0.6537559046612D-04 0.6693025659968D-04 + 0.6852188045226D-04 0.7015134011522D-04 0.7181953452579D-04 0.7352738396123D-04 + 0.7527583054487D-04 0.7706583876399D-04 0.7889839600001D-04 0.8077451307125D-04 + 0.8269522478847D-04 0.8466159052361D-04 0.8667469479193D-04 0.8873564784796D-04 + 0.9084558629554D-04 0.9300567371226D-04 0.9521710128872D-04 0.9748108848282D-04 + 0.9979888368964D-04 0.1021717649270D-03 0.1046010405375D-03 0.1070880499067D-03 + 0.1096341641988D-03 0.1122407871092D-03 0.1149093556356D-03 0.1176413408661D-03 + 0.1204382487873D-03 0.1233016211105D-03 0.1262330361178D-03 0.1292341095281D-03 + 0.1323064953840D-03 0.1354518869586D-03 0.1386720176849D-03 0.1419686621064D-03 + 0.1453436368504D-03 0.1487988016240D-03 0.1523360602345D-03 0.1559573616324D-03 + 0.1596647009806D-03 0.1634601207475D-03 0.1673457118269D-03 0.1713236146839D-03 + 0.1753960205275D-03 0.1795651725114D-03 0.1838333669633D-03 0.1882029546422D-03 + 0.1926763420264D-03 0.1972559926314D-03 0.2019444283587D-03 0.2067442308770D-03 + 0.2116580430354D-03 0.2166885703099D-03 0.2218385822845D-03 0.2271109141668D-03 + 0.2325084683394D-03 0.2380342159478D-03 0.2436911985257D-03 0.2494825296588D-03 + 0.2554113966875D-03 0.2614810624499D-03 0.2676948670656D-03 0.2740562297620D-03 + 0.2805686507426D-03 0.2872357131005D-03 0.2940610847763D-03 0.3010485205614D-03 + 0.3082018641502D-03 0.3155250502386D-03 0.3230221066731D-03 0.3306971566501D-03 + 0.3385544209669D-03 0.3465982203257D-03 0.3548329776912D-03 0.3632632207047D-03 + 0.3718935841541D-03 0.3807288125017D-03 0.3897737624725D-03 0.3990334057021D-03 + 0.4085128314475D-03 0.4182172493612D-03 0.4281519923308D-03 0.4383225193846D-03 + 0.4487344186660D-03 0.4593934104777D-03 0.4703053503967D-03 0.4814762324629D-03 + 0.4929121924423D-03 0.5046195111669D-03 0.5166046179525D-03 0.5288740940970D-03 + 0.5414346764603D-03 0.5542932611285D-03 0.5674569071637D-03 0.5809328404415D-03 + 0.5947284575787D-03 0.6088513299524D-03 0.6233092078139D-03 0.6381100244984D-03 + 0.6532619007330D-03 0.6687731490462D-03 0.6846522782795D-03 0.7009079982057D-03 + 0.7175492242542D-03 0.7345850823467D-03 0.7520249138470D-03 0.7698782806252D-03 + 0.7881549702406D-03 0.8068650012460D-03 0.8260186286151D-03 0.8456263492976D-03 + 0.8656989079024D-03 0.8862473025150D-03 0.9072827906496D-03 0.9288168953402D-03 + 0.9508614113737D-03 0.9734284116683D-03 0.9965302538004D-03 0.1020179586684D-02 + 0.1044389357404D-02 0.1069172818211D-02 0.1094543533678D-02 0.1120515388023D-02 + 0.1147102592600D-02 0.1174319693569D-02 0.1202181579744D-02 0.1230703490613D-02 + 0.1259901024562D-02 0.1289790147274D-02 0.1320387200332D-02 0.1351708910018D-02 + 0.1383772396321D-02 0.1416595182143D-02 0.1450195202734D-02 0.1484590815333D-02 + 0.1519800809035D-02 0.1555844414895D-02 0.1592741316255D-02 0.1630511659314D-02 + 0.1669176063946D-02 0.1708755634765D-02 0.1749271972444D-02 0.1790747185304D-02 + 0.1833203901157D-02 0.1876665279436D-02 0.1921155023601D-02 0.1966697393824D-02 + 0.2013317219980D-02 0.2061039914924D-02 0.2109891488086D-02 0.2159898559371D-02 + 0.2211088373384D-02 0.2263488813978D-02 0.2317128419145D-02 0.2372036396238D-02 + 0.2428242637556D-02 0.2485777736277D-02 0.2544673002761D-02 0.2604960481231D-02 + 0.2666672966829D-02 0.2729844023073D-02 0.2794507999705D-02 0.2860700050956D-02 + 0.2928456154226D-02 0.2997813129191D-02 0.3068808657350D-02 0.3141481302018D-02 + 0.3215870528777D-02 0.3292016726393D-02 0.3369961228214D-02 0.3449746334052D-02 + 0.3531415332570D-02 0.3615012524176D-02 0.3700583244441D-02 0.3788173888048D-02 + 0.3877831933291D-02 0.3969605967126D-02 0.4063545710799D-02 0.4159702046049D-02 + 0.4258127041914D-02 0.4358873982139D-02 0.4461997393210D-02 0.4567553073026D-02 + 0.4675598120215D-02 0.4786190964119D-02 0.4899391395457D-02 0.5015260597680D-02 + 0.5133861179037D-02 0.5255257205366D-02 0.5379514233623D-02 0.5506699346170D-02 + 0.5636881185835D-02 0.5770129991763D-02 0.5906517636077D-02 0.6046117661353D-02 + 0.6189005318956D-02 0.6335257608220D-02 0.6484953316519D-02 0.6638173060230D-02 + 0.6794999326621D-02 0.6955516516674D-02 0.7119810988862D-02 0.7287971103917D-02 + 0.7460087270585D-02 0.7636251992414D-02 0.7816559915579D-02 0.8001107877774D-02 + 0.8189994958198D-02 0.8383322528646D-02 0.8581194305744D-02 0.8783716404335D-02 + 0.8990997392060D-02 0.9203148345143D-02 0.9420282905410D-02 0.9642517338579D-02 + 0.9869970593829D-02 0.1010276436469D-01 0.1034102315127D-01 0.1058487432388D-01 + 0.1083444818801D-01 0.1108987805078D-01 0.1135130028885D-01 0.1161885441777D-01 + 0.1189268316291D-01 0.1217293253194D-01 0.1245975188884D-01 0.1275329402956D-01 + 0.1305371525940D-01 0.1336117547193D-01 0.1367583822976D-01 0.1399787084702D-01 + 0.1432744447362D-01 0.1466473418134D-01 0.1500991905181D-01 0.1536318226637D-01 + 0.1572471119789D-01 0.1609469750456D-01 0.1647333722571D-01 0.1686083087968D-01 + 0.1725738356380D-01 0.1766320505654D-01 0.1807850992182D-01 0.1850351761553D-01 + 0.1893845259441D-01 0.1938354442719D-01 0.1983902790808D-01 0.2030514317273D-01 + 0.2078213581664D-01 0.2127025701606D-01 0.2176976365145D-01 0.2228091843359D-01 + 0.2280399003229D-01 0.2333925320787D-01 0.2388698894539D-01 0.2444748459165D-01 + 0.2502103399514D-01 0.2560793764885D-01 0.2620850283612D-01 0.2682304377949D-01 + 0.2745188179263D-01 0.2809534543549D-01 0.2875377067262D-01 0.2942750103476D-01 + 0.3011688778378D-01 0.3082229008100D-01 0.3154407515902D-01 0.3228261849700D-01 + 0.3303830399957D-01 0.3381152417940D-01 0.3460268034347D-01 0.3541218278309D-01 + 0.3624045096790D-01 0.3708791374361D-01 0.3795500953388D-01 0.3884218654621D-01 + 0.3974990298195D-01 0.4067862725053D-01 0.4162883818795D-01 0.4260102527969D-01 + 0.4359568888793D-01 0.4461334048340D-01 0.4565450288170D-01 0.4671971048435D-01 + 0.4780950952456D-01 0.4892445831773D-01 0.5006512751700D-01 0.5123210037363D-01 + 0.5242597300246D-01 0.5364735465259D-01 0.5489686798316D-01 0.5617514934449D-01 + 0.5748284906460D-01 0.5882063174116D-01 0.6018917653903D-01 0.6158917749343D-01 + 0.6302134381878D-01 0.6448640022340D-01 0.6598508723006D-01 0.6751816150258D-01 + 0.6908639617837D-01 0.7069058120724D-01 0.7233152369638D-01 0.7401004826169D-01 + 0.7572699738553D-01 0.7748323178094D-01 0.7927963076247D-01 0.8111709262368D-01 + 0.8299653502142D-01 0.8491889536690D-01 0.8688513122381D-01 0.8889622071332D-01 + 0.9095316292627D-01 0.9305697834259D-01 0.9520870925789D-01 0.9740942021751D-01 + 0.9966019845795D-01 0.1019621543558D+00 0.1043164218846D+00 0.1067241590786D+00 + 0.1091865485053D+00 0.1117047977451D+00 0.1142801398791D+00 0.1169138339849D+00 + 0.1196071656406D+00 0.1223614474367D+00 0.1251780194961D+00 0.1280582500027D+00 + 0.1310035357385D+00 0.1340153026283D+00 0.1370950062935D+00 0.1402441326144D+00 + 0.1434641983005D+00 0.1467567514703D+00 0.1501233722389D+00 0.1535656733144D+00 + 0.1570853006040D+00 0.1606839338272D+00 0.1643632871393D+00 0.1681251097630D+00 + 0.1719711866286D+00 0.1759033390237D+00 0.1799234252512D+00 0.1840333412963D+00 + 0.1882350215026D+00 0.1925304392566D+00 0.1969216076813D+00 0.2014105803382D+00 + 0.2059994519390D+00 0.2106903590646D+00 0.2154854808940D+00 0.2203870399410D+00 + 0.2253973028000D+00 0.2305185808997D+00 0.2357532312657D+00 0.2411036572910D+00 + 0.2465723095148D+00 0.2521616864092D+00 0.2578743351743D+00 0.2637128525404D+00 + 0.2696798855782D+00 0.2757781325163D+00 0.2820103435663D+00 0.2883793217546D+00 + 0.2948879237608D+00 0.3015390607636D+00 0.3083356992925D+00 0.3152808620852D+00 + 0.3223776289521D+00 0.3296291376450D+00 0.3370385847317D+00 0.3446092264760D+00 + 0.3523443797209D+00 0.3602474227774D+00 0.3683217963161D+00 0.3765710042627D+00 + 0.3849986146961D+00 0.3936082607495D+00 0.4024036415124D+00 0.4113885229353D+00 + 0.4205667387347D+00 0.4299421912983D+00 0.4395188525903D+00 0.4493007650554D+00 + 0.4592920425223D+00 0.4694968711032D+00 0.4799195100925D+00 0.4905642928599D+00 + 0.5014356277402D+00 0.5125379989177D+00 0.5238759673039D+00 0.5354541714087D+00 + 0.5472773282034D+00 0.5593502339751D+00 0.5716777651704D+00 0.5842648792291D+00 + 0.5971166154052D+00 0.6102380955745D+00 0.6236345250288D+00 0.6373111932532D+00 + 0.6512734746872D+00 0.6655268294678D+00 0.6800768041525D+00 0.6949290324214D+00 + 0.7100892357570D+00 0.7255632240998D+00 0.7413568964786D+00 0.7574762416130D+00 + 0.7739273384875D+00 0.7907163568947D+00 0.8078495579461D+00 0.8253332945483D+00 + 0.8431740118429D+00 0.8613782476086D+00 0.8799526326223D+00 0.8989038909780D+00 + 0.9182388403608D+00 0.9379643922745D+00 0.9580875522189D+00 0.9786154198166D+00 + 0.9995551888845D+00 0.1020914147449D+01 0.1042699677704D+01 0.1064919255899D+01 + 0.1087580452177D+01 0.1110690930328D+01 0.1134258447484D+01 0.1158290853734D+01 + 0.1182796091667D+01 0.1207782195830D+01 0.1233257292109D+01 0.1259229597014D+01 + 0.1285707416890D+01 0.1312699147014D+01 0.1340213270614D+01 0.1368258357777D+01 + 0.1396843064255D+01 0.1425976130164D+01 0.1455666378569D+01 0.1485922713956D+01 + 0.1516754120579D+01 0.1548169660690D+01 0.1580178472635D+01 0.1612789768815D+01 + 0.1646012833521D+01 0.1679857020612D+01 0.1714331751063D+01 0.1749446510347D+01 + 0.1785210845672D+01 0.1821634363056D+01 0.1858726724232D+01 0.1896497643389D+01 + 0.1934956883736D+01 0.1974114253883D+01 0.2013979604044D+01 0.2054562822040D+01 + 0.2095873829119D+01 0.2137922575566D+01 0.2180719036107D+01 0.2224273205112D+01 + 0.2268595091567D+01 0.2313694713841D+01 0.2359582094207D+01 0.2406267253148D+01 + 0.2453760203415D+01 0.2502070943843D+01 0.2551209452921D+01 0.2601185682106D+01 + 0.2652009548878D+01 0.2703690929532D+01 0.2756239651697D+01 0.2809665486581D+01 + 0.2863978140938D+01 0.2919187248746D+01 0.2975302362599D+01 0.3032332944799D+01 + 0.3090288358152D+01 0.3149177856458D+01 0.3209010574692D+01 0.3269795518871D+01 + 0.3331541555605D+01 0.3394257401326D+01 0.3457951611192D+01 0.3522632567662D+01 + 0.3588308468738D+01 0.3654987315873D+01 0.3722676901545D+01 0.3791384796483D+01 + 0.3861118336557D+01 0.3931884609322D+01 0.4003690440216D+01 0.4076542378414D+01 + 0.4150446682330D+01 0.4225409304779D+01 0.4301435877788D+01 0.4378531697058D+01 + 0.4456701706091D+01 0.4535950479961D+01 0.4616282208761D+01 0.4697700680697D+01 + 0.4780209264861D+01 0.4863810893667D+01 0.4948508044968D+01 0.5034302723855D+01 + 0.5121196444142D+01 0.5209190209548D+01 0.5298284494585D+01 0.5388479225163D+01 + 0.5479773758908D+01 0.5572166865226D+01 0.5665656705111D+01 0.5760240810707D+01 + 0.5855916064652D+01 0.5952678679205D+01 0.6050524175181D+01 0.6149447360714D+01 + 0.6249442309846D+01 0.6350502340999D+01 0.6452619995310D+01 0.6555787014883D+01 + 0.6659994320969D+01 0.6765231992094D+01 0.6871489242173D+01 0.6978754398635D+01 + 0.7087014880578D+01 0.7196257177007D+01 0.7306466825162D+01 0.7417628388990D+01 + 0.7529725437787D+01 0.7642740525053D+01 0.7756655167592D+01 0.7871449824906D+01 + 0.7987103878919D+01 0.8103595614084D+01 0.8220902197901D+01 0.8338999661921D+01 + 0.8457862883259D+01 0.8577465566681D+01 0.8697780227318D+01 0.8818778174061D+01 + 0.8940429493683D+01 0.9062703035766D+01 0.9185566398473D+01 0.9308985915242D+01 + 0.9432926642452D+01 0.9557352348144D+01 0.9682225501838D+01 0.9807507265540D+01 + 0.9933157485992D+01 0.1005913468824D+02 0.1018539607059D+02 0.1031189750106D+02 + 0.1043859351531D+02 0.1056543731624D+02 0.1069238077527D+02 0.1081937443539D+02 + 0.1094636751604D+02 0.1107330791995D+02 0.1120014224196D+02 0.1132681577996D+02 + 0.1145327254799D+02 0.1157945529156D+02 0.1170530550536D+02 0.1183076345334D+02 + 0.1195576819127D+02 0.1208025759194D+02 0.1220416837292D+02 0.1232743612715D+02 + 0.1244999535621D+02 0.1257177950658D+02 0.1269272100878D+02 0.1281275131958D+02 + 0.1293180096723D+02 0.1304979959993D+02 0.1316667603744D+02 0.1328235832599D+02 + 0.1339677379653D+02 0.1350984912634D+02 0.1362151040409D+02 0.1373168319833D+02 + 0.1384029262949D+02 0.1394726344548D+02 0.1405252010071D+02 0.1415598683884D+02 + 0.1425758777902D+02 0.1435724700573D+02 0.1445488866228D+02 0.1455043704778D+02 + 0.1464381671778D+02 0.1473495258836D+02 0.1482377004375D+02 0.1491019504739D+02 + 0.1499415425638D+02 0.1507557513924D+02 0.1515438609696D+02 0.1523051658711D+02 + 0.1530389725108D+02 0.1537446004426D+02 0.1544213836894D+02 0.1550686721002D+02 + 0.1556858327309D+02 0.1562722512497D+02 0.1568273333637D+02 0.1573505062656D+02 + 0.1578412200978D+02 0.1582989494320D+02 0.1587231947622D+02 0.1591134840080D+02 + 0.1594693740256D+02 0.1597904521245D+02 0.1600763375856D+02 0.1603266831787D+02 + 0.1605411766755D+02 0.1607195423551D+02 0.1608615424977D+02 0.1609669788635D+02 + 0.1610356941533D+02 0.1610675734450D+02 0.1610625456042D+02 0.1610205846627D+02 + 0.1609417111618D+02 0.1608259934555D+02 0.1606735489681D+02 0.1604845454031D+02 + 0.1602592018977D+02 0.1599977901174D+02 0.1597006352873D+02 0.1593681171532D+02 + 0.1590006708691D+02 0.1585987878050D+02 0.1581630162699D+02 0.1576939621454D+02 + 0.1571922894237D+02 0.1566587206464D+02 0.1560940372373D+02 0.1554990797253D+02 + 0.1548747478525D+02 0.1542220005611D+02 0.1535418558565D+02 0.1528353905406D+02 + 0.1521037398105D+02 0.1513480967197D+02 0.1505697114962D+02 0.1497698907151D+02 + 0.1489499963200D+02 0.1481114444921D+02 0.1472557043622D+02 0.1463842965639D+02 + 0.1454987916245D+02 0.1446008081926D+02 0.1436920111002D+02 0.1427741092574D+02 + 0.1418488533799D+02 0.1409180335487D+02 0.1399834766009D+02 0.1390470433538D+02 + 0.1381106256622D+02 0.1371761433110D+02 0.1362455407451D+02 0.1353207836395D+02 + 0.1344038553125D+02 0.1334967529867D+02 0.1326014839014D+02 0.1317200612820D+02 + 0.1308545001726D+02 0.1300068131373D+02 0.1291790058380D+02 0.1283730724961D+02 + 0.1275909912467D+02 0.1268347193937D+02 0.1261061885764D+02 0.1254072998571D+02 + 0.1247399187408D+02 0.1241058701386D+02 0.1235069332866D+02 0.1229448366339D+02 + 0.1224212527114D+02 0.1219377929965D+02 0.1214960027871D+02 0.1210973561003D+02 + 0.1207432506103D+02 0.1204350026411D+02 0.1201738422307D+02 0.1199609082823D+02 + 0.1197972438187D+02 0.1196837913572D+02 0.1196213884225D+02 0.1196107632124D+02 + 0.1196525304364D+02 0.1197471873413D+02 0.1198951099429D+02 0.1200965494800D+02 + 0.1203516291070D+02 0.1206603408422D+02 0.1210225427878D+02 0.1214379566369D+02 + 0.1219061654837D+02 0.1224266119507D+02 0.1229985966481D+02 0.1236212769775D+02 + 0.1242936662950D+02 0.1250146334429D+02 0.1257829026636D+02 0.1265970539044D+02 + 0.1274555235225D+02 0.1283566053995D+02 0.1292984524703D+02 0.1302790786745D+02 + 0.1312963613327D+02 0.1323480439525D+02 0.1334317394647D+02 0.1345449338919D+02 + 0.1356849904461D+02 0.1368491540552D+02 0.1380345563123D+02 0.1392382208441D+02 + 0.1404570690898D+02 0.1416879264823D+02 0.1429275290212D+02 0.1441725302265D+02 + 0.1454195084580D+02 0.1466649745859D+02 0.1479053799970D+02 0.1491371249157D+02 + 0.1503565670228D+02 0.1515600303486D+02 0.1527438144184D+02 0.1539042036270D+02 + 0.1550374768146D+02 0.1561399170200D+02 0.1572078213803D+02 0.1582375111508D+02 + 0.1592253418122D+02 0.1601677132358D+02 0.1610610798743D+02 0.1619019609445D+02 + 0.1626869505698D+02 0.1634127278474D+02 0.1640760668067D+02 0.1646738462229D+02 + 0.1652030592528D+02 0.1656608228557D+02 0.1660443869658D+02 0.1663511433813D+02 + 0.1665786343360D+02 0.1667245607180D+02 0.1667867899051D+02 0.1667633631822D+02 + 0.1666525027095D+02 0.1664526180123D+02 0.1661623119619D+02 0.1657803862201D+02 + 0.1653058461212D+02 0.1647379049661D+02 0.1640759877062D+02 0.1633197339955D+02 + 0.1624690005919D+02 0.1615238630906D+02 0.1604846169756D+02 0.1593517779761D+02 + 0.1581260817182D+02 0.1568084826652D+02 0.1554001523414D+02 0.1539024768377D+02 + 0.1523170536002D+02 0.1506456875052D+02 0.1488903862281D+02 0.1470533549160D+02 + 0.1451369901761D+02 0.1431438733965D+02 0.1410767634185D+02 0.1389385885816D+02 + 0.1367324381662D+02 0.1344615532634D+02 0.1321293171003D+02 0.1297392448560D+02 + 0.1272949730050D+02 0.1248002482252D+02 0.1222589159134D+02 0.1196749083522D+02 + 0.1170522325734D+02 0.1143949579658D+02 0.1117072036794D+02 0.1089931258738D+02 + 0.1062569048670D+02 0.1035027322362D+02 0.1007347979269D+02 0.9795727742448D+01 + 0.9517431904377D+01 0.9239003139363D+01 0.8960847106994D+01 0.8683363063245D+01 + 0.8406942691888D+01 0.8131968974804D+01 0.7858815106275D+01 0.7587843456063D+01 + 0.7319404585882D+01 0.7053836323586D+01 0.6791462899034D+01 0.6532594145425D+01 + 0.6277524769278D+01 0.6026533692049D+01 0.5779883465845D+01 0.5537819765298D+01 + 0.5300570957183D+01 0.5068347748904D+01 0.4841342916482D+01 0.4619731112194D+01 + 0.4403668751528D+01 0.4193293978641D+01 0.3988726709026D+01 0.3790068747652D+01 + 0.3597403980394D+01 0.3410798636174D+01 0.3230301616827D+01 0.3055944891386D+01 + 0.2887743951119D+01 0.2725698321408D+01 0.2569792126280D+01 0.2419994701206D+01 + 0.2276261249597D+01 0.2138533538303D+01 0.2006740627299D+01 0.1880799628694D+01 + 0.1760616490152D+01 0.1646086797818D+01 0.1537096593880D+01 0.1433523203945D+01 + 0.1335236069522D+01 0.1242097580984D+01 0.1153963906579D+01 0.1070685813183D+01 + 0.9921094747009D+00 0.9180772642465D+00 0.8484285264488D+00 0.7830003264955D+00 + 0.7216281727958D+00 0.6641467104260D+00 0.6103903828156D+00 0.5601940594400D+00 + 0.5133936275961D+00 0.4698265466531D+00 0.4293323634873D+00 0.3917531881300D+00 + 0.3569341289627D+00 0.3247236871077D+00 0.2949741099518D+00 0.2675417040304D+00 + 0.2422871077686D+00 0.2190755248323D+00 0.1977769190795D+00 0.1782661723216D+00 + 0.1604232063013D+00 0.1441330704721D+00 0.1292859973158D+00 0.1157774270672D+00 + 0.1035080038234D+00 0.9238354509722D-01 0.8231498693933D-01 0.7321830679162D-01 + 0.6501442625187D-01 0.5762909592957D-01 0.5099276454958D-01 0.4504043442212D-01 + 0.3971150534159D-01 0.3494960890661D-01 0.3070243517049D-01 0.2692155343702D-01 + 0.2356222891225D-01 0.2058323681185D-01 0.1794667540578D-01 0.1561777936063D-01 + 0.1356473461545D-01 0.1175849590205D-01 0.1017260789547D-01 0.8783030857518D-02 + 0.7567971515988D-02 0.6507719806070D-02 0.5584491989247D-02 0.4782280559502D-02 + 0.4086711247534D-02 0.3484907341444D-02 0.2965361457374D-02 0.2517814816050D-02 + 0.2133144011346D-02 0.1803255194704D-02 0.1520985544587D-02 0.1280011842816D-02 + 0.1074765939487D-02 0.9003568547602D-03 0.7524992389399D-03 0.6274478913028D-03 + 0.5219380228438D-03 0.4331309378449D-03 0.3585648035566D-03 0.2961101757780D-03 + 0.2439299502387D-03 0.2004434149681D-03 0.1642940867956D-03 0.1343210253398D-03 + 0.1095333298834D-03 0.8908753801538D-04 0.7226765948614D-04 0.5846759405120D-04 + 0.4717569786971D-04 0.3796127902667D-04 0.3046281873072D-04 0.2437773051030D-04 + 0.1945348512574D-04 0.1547994379874D-04 0.1228275662534D-04 0.9717696600541D-05 + 0.7665812482180D-05 0.6029295716106D-05 0.4727967812783D-05 0.3696304898440D-05 + 0.2880925667894D-05 0.2238477657594D-05 0.1733864662087D-05 0.1338765267641D-05 + 0.1030398911619D-05 0.7905016375659D-06 0.6044788486867D-06 0.4607069128219D-06 + 0.3499594867724D-06 0.2649379532648D-06 0.1998884450941D-06 0.1502906115429D-06 + 0.1126056034767D-06 0.8407275452526D-07 0.6254615287589D-07 0.4636376505758D-07 + 0.3424302053237D-07 0.2519782200177D-07 0.1847283643367D-07 0.1349166865693D-07 + 0.9816143213387D-08 0.7114438926726D-08 0.5136250111041D-08 0.3693502276953D-08 + 0.2645440571907D-08 0.1887146351047D-08 0.1340730092868D-08 0.9486049276905D-09 + 0.6683707699054D-09 0.4689398674070D-09 0.3276150625078D-09 0.2278960042333D-09 + 0.1578391226352D-09 0.1088369803178D-09 0.7471380091293D-10 0.5105829146591D-10 + 0.3473373145017D-10 0.2351987221509D-10 0.1585243973041D-10 0.1063447107131D-10 + 0.7100226460227D-11 0.4717889786167D-11 0.3119940683727D-11 0.2053213487104D-11 + 0.1344692564260D-11 0.8763215725307D-12 0.5682011295901D-12 0.3665322750678D-12 + 0.2352161483193D-12 0.1501550482486D-12 0.9534627720489D-13 0.6021876755372D-13 + 0.3782667696924D-13 0.2363076582508D-13 + LSMS: xx z= 27. xvalws= 3.63862 + 27. 2.34846 10. 0.7855389718132D+00 + -0.1113096740000D+02 0.8631327458937D+00 1001 +-0.5399712414724D+02-0.5399708932314D+02-0.5399705407733D+02-0.5399701840473D+02 +-0.5399698230016D+02-0.5399694575838D+02-0.5399690877411D+02-0.5399687134198D+02 +-0.5399683345658D+02-0.5399679511240D+02-0.5399675630391D+02-0.5399671702547D+02 +-0.5399667727138D+02-0.5399663703591D+02-0.5399659631321D+02-0.5399655509736D+02 +-0.5399651338242D+02-0.5399647116234D+02-0.5399642843099D+02-0.5399638518219D+02 +-0.5399634140967D+02-0.5399629710707D+02-0.5399625226800D+02-0.5399620688594D+02 +-0.5399616095432D+02-0.5399611446650D+02-0.5399606741573D+02-0.5399601979517D+02 +-0.5399597159795D+02-0.5399592281709D+02-0.5399587344551D+02-0.5399582347605D+02 +-0.5399577290146D+02-0.5399572171443D+02-0.5399566990754D+02-0.5399561747329D+02 +-0.5399556440406D+02-0.5399551069217D+02-0.5399545632983D+02-0.5399540130918D+02 +-0.5399534562223D+02-0.5399528926092D+02-0.5399523221708D+02-0.5399517448244D+02 +-0.5399511604862D+02-0.5399505690718D+02-0.5399499704953D+02-0.5399493646700D+02 +-0.5399487515081D+02-0.5399481309208D+02-0.5399475028181D+02-0.5399468671089D+02 +-0.5399462237011D+02-0.5399455725015D+02-0.5399449134157D+02-0.5399442463484D+02 +-0.5399435712024D+02-0.5399428878803D+02-0.5399421962830D+02-0.5399414963102D+02 +-0.5399407878604D+02-0.5399400708308D+02-0.5399393451177D+02-0.5399386106159D+02 +-0.5399378672189D+02-0.5399371148189D+02-0.5399363533068D+02-0.5399355825723D+02 +-0.5399348025037D+02-0.5399340129879D+02-0.5399332139105D+02-0.5399324051558D+02 +-0.5399315866062D+02-0.5399307581432D+02-0.5399299196470D+02-0.5399290709958D+02 +-0.5399282120665D+02-0.5399273427347D+02-0.5399264628744D+02-0.5399255723581D+02 +-0.5399246710566D+02-0.5399237588392D+02-0.5399228355738D+02-0.5399219011266D+02 +-0.5399209553620D+02-0.5399199981429D+02-0.5399190293305D+02-0.5399180487844D+02 +-0.5399170563625D+02-0.5399160519209D+02-0.5399150353139D+02-0.5399140063942D+02 +-0.5399129650125D+02-0.5399119110180D+02-0.5399108442577D+02-0.5399097645770D+02 +-0.5399086718194D+02-0.5399075658264D+02-0.5399064464377D+02-0.5399053134909D+02 +-0.5399041668219D+02-0.5399030062642D+02-0.5399018316497D+02-0.5399006428081D+02 +-0.5398994395667D+02-0.5398982217514D+02-0.5398969891854D+02-0.5398957416901D+02 +-0.5398944790844D+02-0.5398932011854D+02-0.5398919078076D+02-0.5398905987635D+02 +-0.5398892738634D+02-0.5398879329150D+02-0.5398865757238D+02-0.5398852020931D+02 +-0.5398838118235D+02-0.5398824047136D+02-0.5398809805591D+02-0.5398795391536D+02 +-0.5398780802879D+02-0.5398766037506D+02-0.5398751093274D+02-0.5398735968014D+02 +-0.5398720659534D+02-0.5398705165612D+02-0.5398689484003D+02-0.5398673612430D+02 +-0.5398657548591D+02-0.5398641290155D+02-0.5398624834766D+02-0.5398608180035D+02 +-0.5398591323544D+02-0.5398574262851D+02-0.5398556995479D+02-0.5398539518923D+02 +-0.5398521830648D+02-0.5398503928087D+02-0.5398485808642D+02-0.5398467469685D+02 +-0.5398448908555D+02-0.5398430122558D+02-0.5398411108969D+02-0.5398391865027D+02 +-0.5398372387942D+02-0.5398352674887D+02-0.5398332723001D+02-0.5398312529387D+02 +-0.5398292091117D+02-0.5398271405223D+02-0.5398250468705D+02-0.5398229278522D+02 +-0.5398207831599D+02-0.5398186124823D+02-0.5398164155045D+02-0.5398141919074D+02 +-0.5398119413684D+02-0.5398096635607D+02-0.5398073581537D+02-0.5398050248128D+02 +-0.5398026631992D+02-0.5398002729700D+02-0.5397978537783D+02-0.5397954052729D+02 +-0.5397929270981D+02-0.5397904188945D+02-0.5397878802974D+02-0.5397853109386D+02 +-0.5397827104449D+02-0.5397800784386D+02-0.5397774145377D+02-0.5397747183552D+02 +-0.5397719894997D+02-0.5397692275747D+02-0.5397664321792D+02-0.5397636029073D+02 +-0.5397607393479D+02-0.5397578410852D+02-0.5397549076982D+02-0.5397519387609D+02 +-0.5397489338420D+02-0.5397458925048D+02-0.5397428143078D+02-0.5397396988036D+02 +-0.5397365455397D+02-0.5397333540579D+02-0.5397301238945D+02-0.5397268545803D+02 +-0.5397235456402D+02-0.5397201965933D+02-0.5397168069531D+02-0.5397133762270D+02 +-0.5397099039163D+02-0.5397063895165D+02-0.5397028325168D+02-0.5396992324003D+02 +-0.5396955886437D+02-0.5396919007173D+02-0.5396881680852D+02-0.5396843902045D+02 +-0.5396805665263D+02-0.5396766964947D+02-0.5396727795470D+02-0.5396688151136D+02 +-0.5396648026183D+02-0.5396607414776D+02-0.5396566311009D+02-0.5396524708907D+02 +-0.5396482602418D+02-0.5396439985419D+02-0.5396396851713D+02-0.5396353195026D+02 +-0.5396309009007D+02-0.5396264287237D+02-0.5396219023055D+02-0.5396173210645D+02 +-0.5396126844275D+02-0.5396079916480D+02-0.5396032419617D+02-0.5395984346720D+02 +-0.5395935690834D+02-0.5395886444878D+02-0.5395836601684D+02-0.5395786154000D+02 +-0.5395735094484D+02-0.5395683415703D+02-0.5395631110135D+02-0.5395578170167D+02 +-0.5395524588092D+02-0.5395470356110D+02-0.5395415466326D+02-0.5395359910747D+02 +-0.5395303681285D+02-0.5395246769750D+02-0.5395189167856D+02-0.5395130867216D+02 +-0.5395071859336D+02-0.5395012135623D+02-0.5394951687380D+02-0.5394890505797D+02 +-0.5394828581964D+02-0.5394765906860D+02-0.5394702471353D+02-0.5394638266200D+02 +-0.5394573282044D+02-0.5394507509418D+02-0.5394440938734D+02-0.5394373560291D+02 +-0.5394305364269D+02-0.5394236340726D+02-0.5394166479602D+02-0.5394095770710D+02 +-0.5394024203743D+02-0.5393951768265D+02-0.5393878453714D+02-0.5393804249399D+02 +-0.5393729144498D+02-0.5393653128057D+02-0.5393576188989D+02-0.5393498316070D+02 +-0.5393419497941D+02-0.5393339723101D+02-0.5393258979913D+02-0.5393177256594D+02 +-0.5393094541218D+02-0.5393010821715D+02-0.5392926085864D+02-0.5392840321300D+02 +-0.5392753515500D+02-0.5392665655795D+02-0.5392576729355D+02-0.5392486723196D+02 +-0.5392395624176D+02-0.5392303418992D+02-0.5392210094177D+02-0.5392115636099D+02 +-0.5392020030962D+02-0.5391923264799D+02-0.5391825323471D+02-0.5391726192669D+02 +-0.5391625857909D+02-0.5391524304525D+02-0.5391421517677D+02-0.5391317482340D+02 +-0.5391212183308D+02-0.5391105605186D+02-0.5390997732392D+02-0.5390888549152D+02 +-0.5390778039500D+02-0.5390666187276D+02-0.5390552976119D+02-0.5390438389470D+02 +-0.5390322410564D+02-0.5390205022434D+02-0.5390086207905D+02-0.5389965949588D+02 +-0.5389844229885D+02-0.5389721030981D+02-0.5389596334842D+02-0.5389470123214D+02 +-0.5389342377617D+02-0.5389213079348D+02-0.5389082209470D+02-0.5388949748820D+02 +-0.5388815677994D+02-0.5388679977355D+02-0.5388542627021D+02-0.5388403606868D+02 +-0.5388262896527D+02-0.5388120475375D+02-0.5387976322540D+02-0.5387830416892D+02 +-0.5387682737041D+02-0.5387533261334D+02-0.5387381967856D+02-0.5387228834421D+02 +-0.5387073838570D+02-0.5386916957566D+02-0.5386758168400D+02-0.5386597447771D+02 +-0.5386434772101D+02-0.5386270117517D+02-0.5386103459854D+02-0.5385934774651D+02 +-0.5385764037145D+02-0.5385591222271D+02-0.5385416304655D+02-0.5385239258610D+02 +-0.5385060058135D+02-0.5384878676909D+02-0.5384695088289D+02-0.5384509265303D+02 +-0.5384321180648D+02-0.5384130806684D+02-0.5383938115433D+02-0.5383743078574D+02 +-0.5383545667435D+02-0.5383345852994D+02-0.5383143605872D+02-0.5382938896328D+02 +-0.5382731694255D+02-0.5382521969177D+02-0.5382309690241D+02-0.5382094826219D+02 +-0.5381877345495D+02-0.5381657216065D+02-0.5381434405532D+02-0.5381208881101D+02 +-0.5380980609575D+02-0.5380749557344D+02-0.5380515690390D+02-0.5380278974272D+02 +-0.5380039374130D+02-0.5379796854671D+02-0.5379551380171D+02-0.5379302914465D+02 +-0.5379051420945D+02-0.5378796862549D+02-0.5378539201763D+02-0.5378278400611D+02 +-0.5378014420649D+02-0.5377747222958D+02-0.5377476768145D+02-0.5377203016330D+02 +-0.5376925927143D+02-0.5376645459717D+02-0.5376361572683D+02-0.5376074224163D+02 +-0.5375783371766D+02-0.5375488972577D+02-0.5375190983154D+02-0.5374889359524D+02 +-0.5374584057170D+02-0.5374275031028D+02-0.5373962235483D+02-0.5373645624357D+02 +-0.5373325150905D+02-0.5373000767810D+02-0.5372672427170D+02-0.5372340080499D+02 +-0.5372003678711D+02-0.5371663172120D+02-0.5371318510428D+02-0.5370969642725D+02 +-0.5370616517470D+02-0.5370259082491D+02-0.5369897284977D+02-0.5369531071472D+02 +-0.5369160387858D+02-0.5368785179359D+02-0.5368405390524D+02-0.5368020965225D+02 +-0.5367631846645D+02-0.5367237977273D+02-0.5366839298890D+02-0.5366435752566D+02 +-0.5366027278652D+02-0.5365613816765D+02-0.5365195305788D+02-0.5364771683853D+02 +-0.5364342888338D+02-0.5363908855854D+02-0.5363469522241D+02-0.5363024822551D+02 +-0.5362574691046D+02-0.5362119061188D+02-0.5361657865622D+02-0.5361191036177D+02 +-0.5360718503850D+02-0.5360240198797D+02-0.5359756050323D+02-0.5359265986875D+02 +-0.5358769936029D+02-0.5358267824480D+02-0.5357759578033D+02-0.5357245121593D+02 +-0.5356724379153D+02-0.5356197273784D+02-0.5355663727626D+02-0.5355123661876D+02 +-0.5354576996777D+02-0.5354023651605D+02-0.5353463544665D+02-0.5352896593270D+02 +-0.5352322713741D+02-0.5351741821386D+02-0.5351153830494D+02-0.5350558654320D+02 +-0.5349956205079D+02-0.5349346393928D+02-0.5348729130960D+02-0.5348104325187D+02 +-0.5347471884531D+02-0.5346831715811D+02-0.5346183724734D+02-0.5345527815877D+02 +-0.5344863892679D+02-0.5344191857430D+02-0.5343511611254D+02-0.5342823054097D+02 +-0.5342126084718D+02-0.5341420600676D+02-0.5340706498313D+02-0.5339983672745D+02 +-0.5339252017847D+02-0.5338511426244D+02-0.5337761789290D+02-0.5337002997063D+02 +-0.5336234938350D+02-0.5335457500628D+02-0.5334670570059D+02-0.5333874031471D+02 +-0.5333067768347D+02-0.5332251662809D+02-0.5331425595609D+02-0.5330589446112D+02 +-0.5329743092280D+02-0.5328886410666D+02-0.5328019276395D+02-0.5327141563148D+02 +-0.5326253143153D+02-0.5325353887172D+02-0.5324443664482D+02-0.5323522342863D+02 +-0.5322589788588D+02-0.5321645866406D+02-0.5320690439526D+02-0.5319723369607D+02 +-0.5318744516742D+02-0.5317753739449D+02-0.5316750894647D+02-0.5315735837654D+02 +-0.5314708422164D+02-0.5313668500237D+02-0.5312615922289D+02-0.5311550537070D+02 +-0.5310472191660D+02-0.5309380731446D+02-0.5308276000116D+02-0.5307157839642D+02 +-0.5306026090269D+02-0.5304880590500D+02-0.5303721177080D+02-0.5302547684993D+02 +-0.5301359947435D+02-0.5300157795816D+02-0.5298941059737D+02-0.5297709566980D+02 +-0.5296463143499D+02-0.5295201613403D+02-0.5293924798951D+02-0.5292632520529D+02 +-0.5291324596651D+02-0.5290000843940D+02-0.5288661077120D+02-0.5287305109001D+02 +-0.5285932750473D+02-0.5284543810494D+02-0.5283138096080D+02-0.5281715412294D+02 +-0.5280275562236D+02-0.5278818347037D+02-0.5277343565847D+02-0.5275851015827D+02 +-0.5274340492141D+02-0.5272811787946D+02-0.5271264694391D+02-0.5269699000599D+02 +-0.5268114493671D+02-0.5266510958673D+02-0.5264888178631D+02-0.5263245934526D+02 +-0.5261584005291D+02-0.5259902167803D+02-0.5258200196879D+02-0.5256477865276D+02 +-0.5254734943685D+02-0.5252971200725D+02-0.5251186402948D+02-0.5249380314834D+02 +-0.5247552698788D+02-0.5245703315142D+02-0.5243831922159D+02-0.5241938276021D+02 +-0.5240022130847D+02-0.5238083238683D+02-0.5236121349510D+02-0.5234136211246D+02 +-0.5232127569752D+02-0.5230095168834D+02-0.5228038750248D+02-0.5225958053712D+02 +-0.5223852816907D+02-0.5221722775487D+02-0.5219567663091D+02-0.5217387211343D+02 +-0.5215181149874D+02-0.5212949206325D+02-0.5210691106362D+02-0.5208406573685D+02 +-0.5206095330051D+02-0.5203757095275D+02-0.5201391587256D+02-0.5198998521990D+02 +-0.5196577613584D+02-0.5194128574278D+02-0.5191651114463D+02-0.5189144942700D+02 +-0.5186609765739D+02-0.5184045288546D+02-0.5181451214320D+02-0.5178827244518D+02 +-0.5176173078880D+02-0.5173488415458D+02-0.5170772950634D+02-0.5168026379156D+02 +-0.5165248394159D+02-0.5162438687198D+02-0.5159596948278D+02-0.5156722865883D+02 +-0.5153816127008D+02-0.5150876417192D+02-0.5147903420554D+02-0.5144896819820D+02 +-0.5141856296369D+02-0.5138781530257D+02-0.5135672200263D+02-0.5132527983922D+02 +-0.5129348557565D+02-0.5126133596354D+02-0.5122882774326D+02-0.5119595764434D+02 +-0.5116272238583D+02-0.5112911867671D+02-0.5109514321639D+02-0.5106079269505D+02 +-0.5102606379409D+02-0.5099095318658D+02-0.5095545753768D+02-0.5091957350506D+02 +-0.5088329773939D+02-0.5084662688475D+02-0.5080955757904D+02-0.5077208645447D+02 +-0.5073421013798D+02-0.5069592525170D+02-0.5065722841336D+02-0.5061811623678D+02 +-0.5057858533221D+02-0.5053863230688D+02-0.5049825376532D+02-0.5045744630983D+02 +-0.5041620654090D+02-0.5037453105758D+02-0.5033241645790D+02-0.5028985933925D+02 +-0.5024685629875D+02-0.5020340393366D+02-0.5015949884165D+02-0.5011513762121D+02 +-0.5007031687194D+02-0.5002503319491D+02-0.4997928319286D+02-0.4993306347057D+02 +-0.4988637063507D+02-0.4983920129591D+02-0.4979155206534D+02-0.4974341955855D+02 +-0.4969480039378D+02-0.4964569119265D+02-0.4959608858001D+02-0.4954598918423D+02 +-0.4949538963725D+02-0.4944428657464D+02-0.4939267663558D+02-0.4934055646293D+02 +-0.4928792270312D+02-0.4923477200614D+02-0.4918110102542D+02-0.4912690641777D+02 +-0.4907218484314D+02-0.4901693296454D+02-0.4896114744774D+02-0.4890482496110D+02 +-0.4884796217527D+02-0.4879055576291D+02-0.4873260239832D+02-0.4867409875715D+02 +-0.4861504151597D+02-0.4855542735187D+02-0.4849525294206D+02-0.4843451496335D+02 +-0.4837321009171D+02-0.4831133500179D+02-0.4824888636636D+02-0.4818586085580D+02 +-0.4812225513753D+02-0.4805806587551D+02-0.4799328972961D+02-0.4792792335513D+02 +-0.4786196340214D+02-0.4779540651488D+02-0.4772824933137D+02-0.4766048848277D+02 +-0.4759212059287D+02-0.4752314227763D+02-0.4745355014465D+02-0.4738334079281D+02 +-0.4731251081183D+02-0.4724105678200D+02-0.4716897527385D+02-0.4709626284793D+02 +-0.4702291605473D+02-0.4694893143454D+02-0.4687430551757D+02-0.4679903482402D+02 +-0.4672311586433D+02-0.4664654513953D+02-0.4656931914175D+02-0.4649143435483D+02 +-0.4641288725505D+02-0.4633367431211D+02-0.4625379199016D+02-0.4617323674914D+02 +-0.4609200504617D+02-0.4601009333723D+02-0.4592749807904D+02-0.4584421573108D+02 +-0.4576024275797D+02-0.4567557563193D+02-0.4559021083553D+02-0.4550414486488D+02 +-0.4541737423273D+02-0.4532989547207D+02-0.4524170513993D+02-0.4515279982137D+02 +-0.4506317613388D+02-0.4497283073189D+02-0.4488176031157D+02-0.4478996161601D+02 +-0.4469743144041D+02-0.4460416663765D+02-0.4451016412404D+02-0.4441542088525D+02 +-0.4431993398237D+02-0.4422370055815D+02-0.4412671784334D+02-0.4402898316309D+02 +-0.4393049394338D+02-0.4383124771743D+02-0.4373124213210D+02-0.4363047495407D+02 +-0.4352894407594D+02-0.4342664752204D+02-0.4332358345394D+02-0.4321975017561D+02 +-0.4311514613811D+02-0.4300976994362D+02-0.4290362034919D+02-0.4279669626967D+02 +-0.4268899677954D+02-0.4258052111430D+02-0.4247126867075D+02-0.4236123900638D+02 +-0.4225043183762D+02-0.4213884703699D+02-0.4202648462915D+02-0.4191334478564D+02 +-0.4179942781848D+02-0.4168473417251D+02-0.4156926441649D+02-0.4145301923309D+02 +-0.4133599940762D+02-0.4121820581580D+02-0.4109963941049D+02-0.4098030120764D+02 +-0.4086019227147D+02-0.4073931369910D+02-0.4061766660492D+02-0.4049525210476D+02 +-0.4037207130006D+02-0.4024812526251D+02-0.4012341501919D+02-0.3999794153850D+02 +-0.3987170571726D+02-0.3974470836903D+02-0.3961695021418D+02-0.3948843187168D+02 +-0.3935915385292D+02-0.3922911655779D+02-0.3909832027317D+02-0.3896676517402D+02 +-0.3883445132643D+02-0.3870137869451D+02-0.3856754714917D+02-0.3843295647967D+02 +-0.3829760640777D+02-0.3816149660447D+02-0.3802462670899D+02-0.3788699634992D+02 +-0.3774860516840D+02-0.3760945284288D+02-0.3746953911543D+02-0.3732886381917D+02 +-0.3718742690662D+02-0.3704522847859D+02-0.3690226881330D+02-0.3675854839550D+02 +-0.3661406794529D+02-0.3646882844625D+02-0.3632283117257D+02-0.3617607771522D+02 +-0.3602857000645D+02-0.3588031034276D+02-0.3573130140599D+02-0.3558154628177D+02 +-0.3543104847711D+02-0.3527981193497D+02-0.3512784104539D+02-0.3497514065471D+02 +-0.3482171607241D+02-0.3466757307486D+02-0.3451271790638D+02-0.3435715727740D+02 +-0.3420089835987D+02-0.3404394877981D+02-0.3388631660705D+02-0.3372801034231D+02 +-0.3356903890148D+02-0.3340941159738D+02-0.3324913811884D+02-0.3308822850751D+02 +-0.3292669313217D+02-0.3276454266083D+02-0.3260178803084D+02-0.3243844041687D+02 +-0.3227451119712D+02-0.3211001191799D+02-0.3194495425700D+02-0.3177934998459D+02 +-0.3161321092467D+02-0.3144654891425D+02-0.3127937576227D+02-0.3111170320801D+02 +-0.3094354287901D+02-0.3077490624905D+02-0.3060580459614D+02-0.3043624896105D+02 +-0.3026625010632D+02-0.3009581847627D+02-0.2992496415818D+02-0.2975369684526D+02 +-0.2958202580073D+02-0.2940995982248D+02-0.2923750721417D+02-0.2906467575549D+02 +-0.2889147267634D+02-0.2871790463416D+02-0.2854397769471D+02-0.2836969731673D+02 +-0.2819506834070D+02-0.2802009498198D+02-0.2784478082868D+02-0.2766912884451D+02 +-0.2749314137687D+02-0.2731682017058D+02-0.2714016638725D+02-0.2696318063081D+02 +-0.2678586297923D+02-0.2660821302263D+02-0.2643022990802D+02-0.2625191239072D+02 +-0.2607325889260D+02-0.2589426756635D+02-0.2571493636779D+02-0.2553526313524D+02 +-0.2535524567328D+02-0.2517488184343D+02-0.2499416966130D+02-0.2481310739853D+02 +-0.2463169368944D+02-0.2444992764150D+02-0.2426780894866D+02-0.2408533800647D+02 +-0.2390251602758D+02-0.2371934515612D+02-0.2353582857914D+02-0.2335197063317D+02 +-0.2316777690377D+02-0.2298325431536D+02-0.2279841120902D+02-0.2261325740527D+02 +-0.2242780424899D+02-0.2224206463343D+02-0.2205605300062D+02-0.2186978531505D+02 +-0.2168327900847D+02-0.2149655289356D+02-0.2130962704502D+02-0.2112252264742D+02 +-0.2093526181008D+02-0.2074786735029D+02-0.2056036254750D+02-0.2037277087258D+02 +-0.2018511569724D+02-0.1999741999061D+02-0.1980970601066D+02-0.1962199499955D+02 +-0.1943430689238D+02-0.1924666004927D+02-0.1905907102053D+02-0.1887155435389D+02 +-0.1868412245446D+02-0.1849678549226D+02-0.1830955137586D+02-0.1812242579556D+02 +-0.1793541231878D+02-0.1774851254829D+02-0.1756172633487D+02-0.1737505203783D+02 +-0.1718848682514D+02-0.1700202700357D+02-0.1681566836927D+02-0.1662940656874D+02 +-0.1644323746050D+02-0.1625715746866D+02-0.1607116392059D+02-0.1588525536183D+02 +-0.1569943184288D+02-0.1551369517397D+02-0.1532804914499D+02-0.1514249970596D+02 +-0.1495705511565D+02-0.1477172605609D+02-0.1458652569943D+02-0.1440146974658D+02 +-0.1421657643677D+02-0.1403186652525D+02-0.1384736323424D+02-0.1366309217948D+02 +-0.1347908127536D+02-0.1329536062110D+02-0.1311196237060D+02-0.1292892058842D+02 +-0.1274627109423D+02-0.1256405129784D+02-0.1238230002690D+02-0.1220105734905D+02 +-0.1202036439022D+02-0.1184026315070D+02-0.1166079632035D+02-0.1148200709420D+02 +-0.1130393898976D+02-0.1112663566691D+02-0.1095014075151D+02-0.1077449766346D+02 +-0.1059974945010D+02-0.1042593862561D+02-0.1025310701702D+02-0.1008129561745D+02 +-0.9910544447051D+01-0.9740892422124D+01-0.9572377232661D+01-0.9405035228863D+01 +-0.9238901316723D+01-0.9074008862979D+01-0.8910389609611D+01-0.8748073598000D+01 +-0.8587089102840D+01-0.8427462575847D+01-0.8269218599277D+01-0.8112379849184D+01 +-0.7956967068387D+01-0.7802999053835D+01-0.7650492636336D+01-0.7499462688923D+01 +-0.7349922139827D+01-0.7201881988842D+01-0.7055351334778D+01-0.6910337411105D+01 +-0.6766845629465D+01-0.6624879630685D+01-0.6484441342919D+01-0.6345531046532D+01 +-0.6208147445302D+01-0.6072287743515D+01-0.5937947728493D+01-0.5805121858110D+01 +-0.5673803352751D+01-0.5543984292128D+01-0.5415655714350D+01-0.5288807715632D+01 +-0.5163429558760D+01-0.5039509780074D+01-0.4917036296885D+01-0.4795996516827D+01 +-0.4676377447400D+01-0.4558165805241D+01-0.4441348124549D+01-0.4325910864049D+01 +-0.4211840511929D+01-0.4099123688112D+01-0.3987747243239D+01-0.3877698353761D+01 +-0.3768964612468D+01-0.3661534113844D+01-0.3555395533589D+01-0.3450538201679D+01 +-0.3346952168349D+01-0.3244628262379D+01-0.3143558141146D+01-0.3043734331887D+01 +-0.2945150263733D+01-0.2847800290127D+01-0.2751679701332D+01-0.2656784726890D+01 +-0.2563112527986D+01-0.2470661179874D+01-0.2379429644708D+01-0.2289417735303D+01 +-0.2200626070617D+01-0.2113056023933D+01-0.2026709665035D+01-0.1941589697825D+01 +-0.1857699395144D+01-0.1775042532700D+01-0.1693623324226D+01-0.1613446360089D+01 +-0.1534516551662D+01-0.1456839083764D+01-0.1380419377449D+01-0.1305263065231D+01 +-0.1231375980687D+01-0.1158764164086D+01-0.1087433887281D+01-0.1017391689333D+01 +-0.9486444413852D+00-0.8811994248256D+00-0.8150644284195D+00-0.7502478637165D+00 +-0.6867588972640D+00-0.6246075982454D+00-0.5638050999120D+00-0.5043637730061D+00 +-0.4462974092618D+00-0.3896214130382D+00-0.3343529991855D+00-0.2805113951406D+00 +-0.2281180452192D+00-0.1771968189771D+00-0.1277742160170D+00-0.7987957093829D-01 +-0.3354525683398D-01 0.1119311393428D-01 0.5429649166249D-01 0.9572219500836D-01 + 0.1354237108660D+00 0.1729785230643D+00 0.2171334818265D+00 0.2354519080210D+00 + 0.8247059607330D-01 + 0.0000000000000D+00 + 1010 0.3638622229627D+01 + 0.2468569969387D-04 0.2527288570521D-04 0.2587403607502D-04 0.2648948279456D-04 + 0.2711956574393D-04 0.2776463287945D-04 0.2842504042538D-04 0.2910115307024D-04 + 0.2979334416778D-04 0.3050199594270D-04 0.3122749970129D-04 0.3197025604700D-04 + 0.3273067510117D-04 0.3350917672899D-04 0.3430619077078D-04 0.3512215727881D-04 + 0.3595752675970D-04 0.3681276042255D-04 0.3768833043297D-04 0.3858472017318D-04 + 0.3950242450817D-04 0.4044195005828D-04 0.4140381547813D-04 0.4238855174230D-04 + 0.4339670243758D-04 0.4442882406240D-04 0.4548548633311D-04 0.4656727249767D-04 + 0.4767477965674D-04 0.4880861909234D-04 0.4996941660432D-04 0.5115781285484D-04 + 0.5237446372093D-04 0.5362004065546D-04 0.5489523105664D-04 0.5620073864628D-04 + 0.5753728385701D-04 0.5890560422865D-04 0.6030645481396D-04 0.6174060859407D-04 + 0.6320885690364D-04 0.6471200986617D-04 0.6625089683957D-04 0.6782636687229D-04 + 0.6943928917026D-04 0.7109055357488D-04 0.7278107105229D-04 0.7451177419425D-04 + 0.7628361773088D-04 0.7809757905554D-04 0.7995465876206D-04 0.8185588119476D-04 + 0.8380229501145D-04 0.8579497375979D-04 0.8783501646718D-04 0.8992354824471D-04 + 0.9206172090537D-04 0.9425071359682D-04 0.9649173344921D-04 0.9878601623826D-04 + 0.1011348270641D-03 0.1035394610458D-03 0.1060012440333D-03 0.1085215333346D-03 + 0.1111017184616D-03 0.1137432218931D-03 0.1164474998550D-03 0.1192160431206D-03 + 0.1220503778282D-03 0.1249520663189D-03 0.1279227079940D-03 0.1309639401926D-03 + 0.1340774390901D-03 0.1372649206176D-03 0.1405281414033D-03 0.1438688997359D-03 + 0.1472890365512D-03 0.1507904364414D-03 0.1543750286884D-03 0.1580447883219D-03 + 0.1618017372023D-03 0.1656479451282D-03 0.1695855309718D-03 0.1736166638398D-03 + 0.1777435642619D-03 0.1819685054074D-03 0.1862938143312D-03 0.1907218732479D-03 + 0.1952551208367D-03 0.1998960535774D-03 0.2046472271172D-03 0.2095112576698D-03 + 0.2144908234482D-03 0.2195886661304D-03 0.2248075923600D-03 0.2301504752824D-03 + 0.2356202561165D-03 0.2412199457647D-03 0.2469526264592D-03 0.2528214534481D-03 + 0.2588296567215D-03 0.2649805427770D-03 0.2712774964280D-03 0.2777239826540D-03 + 0.2843235484944D-03 0.2910798249872D-03 0.2979965291528D-03 0.3050774660252D-03 + 0.3123265307303D-03 0.3197477106134D-03 0.3273450874170D-03 0.3351228395091D-03 + 0.3430852441645D-03 0.3512366798996D-03 0.3595816288620D-03 0.3681246792760D-03 + 0.3768705279465D-03 0.3858239828201D-03 0.3949899656083D-03 0.4043735144707D-03 + 0.4139797867620D-03 0.4238140618435D-03 0.4338817439603D-03 0.4441883651862D-03 + 0.4547395884377D-03 0.4655412105586D-03 0.4765991654771D-03 0.4879195274372D-03 + 0.4995085143052D-03 0.5113724909541D-03 0.5235179727277D-03 0.5359516289854D-03 + 0.5486802867300D-03 0.5617109343208D-03 0.5750507252740D-03 0.5887069821511D-03 + 0.6026872005390D-03 0.6169990531238D-03 0.6316503938587D-03 0.6466492622304D-03 + 0.6620038876251D-03 0.6777226937961D-03 0.6938143034371D-03 0.7102875428609D-03 + 0.7271514467886D-03 0.7444152632503D-03 0.7620884586004D-03 0.7801807226500D-03 + 0.7987019739191D-03 0.8176623650117D-03 0.8370722881160D-03 0.8569423806336D-03 + 0.8772835309391D-03 0.8981068842750D-03 0.9194238487835D-03 0.9412461016790D-03 + 0.9635855955649D-03 0.9864545648969D-03 0.1009865532598D-02 0.1033831316825D-02 + 0.1058365037898D-02 0.1083480125384D-02 0.1109190325349D-02 0.1135509707784D-02 + 0.1162452674191D-02 0.1190033965359D-02 0.1218268669312D-02 0.1247172229444D-02 + 0.1276760452845D-02 0.1307049518820D-02 0.1338055987599D-02 0.1369796809261D-02 + 0.1402289332857D-02 0.1435551315744D-02 0.1469600933142D-02 0.1504456787906D-02 + 0.1540137920526D-02 0.1576663819363D-02 0.1614054431117D-02 0.1652330171537D-02 + 0.1691511936385D-02 0.1731621112648D-02 0.1772679590008D-02 0.1814709772586D-02 + 0.1857734590945D-02 0.1901777514383D-02 0.1946862563499D-02 0.1993014323055D-02 + 0.2040257955137D-02 0.2088619212611D-02 0.2138124452897D-02 0.2188800652059D-02 + 0.2240675419218D-02 0.2293777011296D-02 0.2348134348101D-02 0.2403777027762D-02 + 0.2460735342515D-02 0.2519040294849D-02 0.2578723614033D-02 0.2639817773015D-02 + 0.2702356005708D-02 0.2766372324679D-02 0.2831901539239D-02 0.2898979273949D-02 + 0.2967641987549D-02 0.3037926992327D-02 0.3109872473919D-02 0.3183517511576D-02 + 0.3258902098885D-02 0.3336067164966D-02 0.3415054596158D-02 0.3495907258193D-02 + 0.3578669018882D-02 0.3663384771313D-02 0.3750100457586D-02 0.3838863093082D-02 + 0.3929720791287D-02 0.4022722789179D-02 0.4117919473200D-02 0.4215362405809D-02 + 0.4315104352645D-02 0.4417199310301D-02 0.4521702534741D-02 0.4628670570341D-02 + 0.4738161279611D-02 0.4850233873573D-02 0.4964948942834D-02 0.5082368489367D-02 + 0.5202555958997D-02 0.5325576274638D-02 0.5451495870264D-02 0.5580382725662D-02 + 0.5712306401955D-02 0.5847338077936D-02 0.5985550587217D-02 0.6127018456210D-02 + 0.6271817942966D-02 0.6420027076890D-02 0.6571725699339D-02 0.6726995505140D-02 + 0.6885920085031D-02 0.7048584969062D-02 0.7215077670955D-02 0.7385487733470D-02 + 0.7559906774775D-02 0.7738428535855D-02 0.7921148928979D-02 0.8108166087248D-02 + 0.8299580415245D-02 0.8495494640810D-02 0.8696013867976D-02 0.8901245631066D-02 + 0.9111299950006D-02 0.9326289386851D-02 0.9546329103576D-02 0.9771536921133D-02 + 0.1000203337982D-01 0.1023794180101D-01 0.1047938835015D-01 0.1072650210130D-01 + 0.1097941510295D-01 0.1123826244536D-01 0.1150318232935D-01 0.1177431613666D-01 + 0.1205180850173D-01 0.1233580738521D-01 0.1262646414892D-01 0.1292393363260D-01 + 0.1322837423219D-01 0.1353994797993D-01 0.1385882062618D-01 0.1418516172293D-01 + 0.1451914470926D-01 0.1486094699859D-01 0.1521075006777D-01 0.1556873954820D-01 + 0.1593510531885D-01 0.1631004160130D-01 0.1669374705686D-01 0.1708642488571D-01 + 0.1748828292829D-01 0.1789953376873D-01 0.1832039484059D-01 0.1875108853483D-01 + 0.1919184231012D-01 0.1964288880542D-01 0.2010446595508D-01 0.2057681710628D-01 + 0.2106019113904D-01 0.2155484258876D-01 0.2206103177127D-01 0.2257902491068D-01 + 0.2310909426981D-01 0.2365151828338D-01 0.2420658169406D-01 0.2477457569133D-01 + 0.2535579805324D-01 0.2595055329119D-01 0.2655915279766D-01 0.2718191499708D-01 + 0.2781916549985D-01 0.2847123725946D-01 0.2913847073297D-01 0.2982121404477D-01 + 0.3051982315370D-01 0.3123466202365D-01 0.3196610279764D-01 0.3271452597547D-01 + 0.3348032059503D-01 0.3426388441725D-01 0.3506562411493D-01 0.3588595546528D-01 + 0.3672530354643D-01 0.3758410293794D-01 0.3846279792528D-01 0.3936184270850D-01 + 0.4028170161503D-01 0.4122284931678D-01 0.4218577105159D-01 0.4317096284901D-01 + 0.4417893176067D-01 0.4521019609511D-01 0.4626528565736D-01 0.4734474199314D-01 + 0.4844911863792D-01 0.4957898137079D-01 0.5073490847339D-01 0.5191749099376D-01 + 0.5312733301538D-01 0.5436505193142D-01 0.5563127872422D-01 0.5692665825017D-01 + 0.5825184953006D-01 0.5960752604493D-01 0.6099437603755D-01 0.6241310281967D-01 + 0.6386442508493D-01 0.6534907722782D-01 0.6686780966846D-01 0.6842138918354D-01 + 0.7001059924334D-01 0.7163624035503D-01 0.7329913041225D-01 0.7500010505112D-01 + 0.7674001801277D-01 0.7851974151238D-01 0.8034016661501D-01 0.8220220361808D-01 + 0.8410678244078D-01 0.8605485302039D-01 0.8804738571560D-01 0.9008537171704D-01 + 0.9216982346488D-01 0.9430177507382D-01 0.9648228276541D-01 0.9871242530785D-01 + 0.1009933044633D+00 0.1033260454429D+00 0.1057117973693D+00 0.1081517337472D+00 + 0.1106470529418D+00 0.1131989786649D+00 0.1158087604690D+00 0.1184776742503D+00 + 0.1212070227587D+00 0.1239981361166D+00 0.1268523723464D+00 0.1297711179058D+00 + 0.1327557882317D+00 0.1358078282923D+00 0.1389287131490D+00 0.1421199485248D+00 + 0.1453830713836D+00 0.1487196505166D+00 0.1521312871383D+00 0.1556196154908D+00 + 0.1591863034575D+00 0.1628330531850D+00 0.1665616017147D+00 0.1703737216224D+00 + 0.1742712216675D+00 0.1782559474512D+00 0.1823297820830D+00 0.1864946468568D+00 + 0.1907525019358D+00 0.1951053470463D+00 0.1995552221800D+00 0.2041042083062D+00 + 0.2087544280916D+00 0.2135080466303D+00 0.2183672721812D+00 0.2233343569151D+00 + 0.2284115976700D+00 0.2336013367152D+00 0.2389059625234D+00 0.2443279105518D+00 + 0.2498696640312D+00 0.2555337547630D+00 0.2613227639248D+00 0.2672393228830D+00 + 0.2732861140141D+00 0.2794658715329D+00 0.2857813823282D+00 0.2922354868055D+00 + 0.2988310797372D+00 0.3055711111190D+00 0.3124585870327D+00 0.3194965705154D+00 + 0.3266881824350D+00 0.3340366023705D+00 0.3415450694984D+00 0.3492168834833D+00 + 0.3570554053738D+00 0.3650640585024D+00 0.3732463293889D+00 0.3816057686476D+00 + 0.3901459918973D+00 0.3988706806738D+00 0.4077835833447D+00 0.4168885160247D+00 + 0.4261893634932D+00 0.4356900801111D+00 0.4453946907379D+00 0.4553072916477D+00 + 0.4654320514439D+00 0.4757732119715D+00 0.4863350892260D+00 0.4971220742595D+00 + 0.5081386340813D+00 0.5193893125537D+00 0.5308787312815D+00 0.5426115904943D+00 + 0.5545926699204D+00 0.5668268296526D+00 0.5793190110025D+00 0.5920742373449D+00 + 0.6050976149496D+00 0.6183943337992D+00 0.6319696683932D+00 0.6458289785354D+00 + 0.6599777101053D+00 0.6744213958094D+00 0.6891656559142D+00 0.7042161989570D+00 + 0.7195788224341D+00 0.7352594134649D+00 0.7512639494296D+00 0.7675984985794D+00 + 0.7842692206178D+00 0.8012823672502D+00 0.8186442827011D+00 0.8363614041956D+00 + 0.8544402624054D+00 0.8728874818546D+00 0.8917097812854D+00 0.9109139739807D+00 + 0.9305069680408D+00 0.9504957666131D+00 0.9708874680719D+00 0.9916892661448D+00 + 0.1012908449986D+01 0.1034552404189D+01 0.1056628608744D+01 0.1079144638927D+01 + 0.1102108165128D+01 0.1125526952605D+01 0.1149408861175D+01 0.1173761844820D+01 + 0.1198593951223D+01 0.1223913321222D+01 0.1249728188175D+01 0.1276046877245D+01 + 0.1302877804584D+01 0.1330229476436D+01 0.1358110488126D+01 0.1386529522961D+01 + 0.1415495351018D+01 0.1445016827823D+01 0.1475102892916D+01 0.1505762568306D+01 + 0.1537004956790D+01 0.1568839240163D+01 0.1601274677282D+01 0.1634320602008D+01 + 0.1667986421002D+01 0.1702281611378D+01 0.1737215718215D+01 0.1772798351902D+01 + 0.1809039185345D+01 0.1845947950991D+01 0.1883534437702D+01 0.1921808487447D+01 + 0.1960779991820D+01 0.2000458888375D+01 0.2040855156775D+01 0.2081978814749D+01 + 0.2123839913846D+01 0.2166448534996D+01 0.2209814783850D+01 0.2253948785918D+01 + 0.2298860681478D+01 0.2344560620272D+01 0.2391058755959D+01 0.2438365240342D+01 + 0.2486490217351D+01 0.2535443816779D+01 0.2585236147769D+01 0.2635877292040D+01 + 0.2687377296854D+01 0.2739746167716D+01 0.2792993860792D+01 0.2847130275065D+01 + 0.2902165244188D+01 0.2958108528066D+01 0.3014969804133D+01 0.3072758658333D+01 + 0.3131484575803D+01 0.3191156931239D+01 0.3251784978959D+01 0.3313377842640D+01 + 0.3375944504742D+01 0.3439493795603D+01 0.3504034382208D+01 0.3569574756619D+01 + 0.3636123224081D+01 0.3703687890779D+01 0.3772276651260D+01 0.3841897175511D+01 + 0.3912556895688D+01 0.3984262992499D+01 0.4057022381244D+01 0.4130841697498D+01 + 0.4205727282445D+01 0.4281685167871D+01 0.4358721060790D+01 0.4436840327743D+01 + 0.4516047978731D+01 0.4596348650813D+01 0.4677746591360D+01 0.4760245640970D+01 + 0.4843849216043D+01 0.4928560291034D+01 0.5014381380374D+01 0.5101314520076D+01 + 0.5189361249023D+01 0.5278522589959D+01 0.5368799030181D+01 0.5460190501942D+01 + 0.5552696362579D+01 0.5646315374382D+01 0.5741045684202D+01 0.5836884802829D+01 + 0.5933829584135D+01 0.6031876204017D+01 0.6131020139150D+01 0.6231256145553D+01 + 0.6332578237016D+01 0.6434979663381D+01 0.6538452888716D+01 0.6642989569400D+01 + 0.6748580532141D+01 0.6855215751952D+01 0.6962884330127D+01 0.7071574472219D+01 + 0.7181273466077D+01 0.7291967659957D+01 0.7403642440750D+01 0.7516282212357D+01 + 0.7629870374244D+01 0.7744389300232D+01 0.7859820317537D+01 0.7976143686129D+01 + 0.8093338578430D+01 0.8211383059412D+01 0.8330254067135D+01 0.8449927393778D+01 + 0.8570377667209D+01 0.8691578333149D+01 0.8813501637986D+01 0.8936118612292D+01 + 0.9059399055106D+01 0.9183311519031D+01 0.9307823296226D+01 0.9432900405331D+01 + 0.9558507579415D+01 0.9684608254998D+01 0.9811164562217D+01 0.9938137316208D+01 + 0.1006548600978D+02 0.1019316880745D+02 0.1032114254090D+02 0.1044936270594D+02 + 0.1057778346110D+02 0.1070635762783D+02 0.1083503669248D+02 0.1096377081009D+02 + 0.1109250881008D+02 0.1122119820392D+02 0.1134978519490D+02 0.1147821469002D+02 + 0.1160643031410D+02 0.1173437442627D+02 0.1186198813875D+02 0.1198921133821D+02 + 0.1211598270965D+02 0.1224223976291D+02 0.1236791886194D+02 0.1249295525685D+02 + 0.1261728311879D+02 0.1274083557791D+02 0.1286354476424D+02 0.1298534185169D+02 + 0.1310615710527D+02 0.1322591993148D+02 0.1334455893208D+02 0.1346200196111D+02 + 0.1357817618544D+02 0.1369300814873D+02 0.1380642383887D+02 0.1391834875905D+02 + 0.1402870800238D+02 0.1413742633014D+02 0.1424442825365D+02 0.1434963811989D+02 + 0.1445298020068D+02 0.1455437878565D+02 0.1465375827881D+02 0.1475104329882D+02 + 0.1484615878293D+02 0.1493903009445D+02 0.1502958313386D+02 0.1511774445346D+02 + 0.1520344137542D+02 0.1528660211326D+02 0.1536715589663D+02 0.1544503309931D+02 + 0.1552016537033D+02 0.1559248576802D+02 0.1566192889700D+02 0.1572843104782D+02 + 0.1579193033916D+02 0.1585236686243D+02 0.1590968282854D+02 0.1596382271666D+02 + 0.1601473342471D+02 0.1606236442149D+02 0.1610666789996D+02 0.1614759893165D+02 + 0.1618511562177D+02 0.1621917926472D+02 0.1624975449985D+02 0.1627680946691D+02 + 0.1630031596104D+02 0.1632024958683D+02 0.1633658991111D+02 0.1634932061411D+02 + 0.1635842963854D+02 0.1636390933615D+02 0.1636575661144D+02 0.1636397306198D+02 + 0.1635856511484D+02 0.1634954415884D+02 0.1633692667192D+02 0.1632073434325D+02 + 0.1630099418960D+02 0.1627773866532D+02 0.1625100576558D+02 0.1622083912219D+02 + 0.1618728809154D+02 0.1615040783414D+02 0.1611025938509D+02 0.1606690971510D+02 + 0.1602043178144D+02 0.1597090456818D+02 0.1591841311535D+02 0.1586304853639D+02 + 0.1580490802334D+02 0.1574409483930D+02 0.1568071829765D+02 0.1561489372751D+02 + 0.1554674242490D+02 0.1547639158934D+02 0.1540397424522D+02 0.1532962914759D+02 + 0.1525350067211D+02 0.1517573868859D+02 0.1509649841790D+02 0.1501594027195D+02 + 0.1493422967642D+02 0.1485153687607D+02 0.1476803672234D+02 0.1468390844322D+02 + 0.1459933539520D+02 0.1451450479728D+02 0.1442960744701D+02 0.1434483741864D+02 + 0.1426039174347D+02 0.1417647007254D+02 0.1409327432196D+02 0.1401100830101D+02 + 0.1392987732352D+02 0.1385008780282D+02 0.1377184683085D+02 0.1369536174179D+02 + 0.1362083966105D+02 0.1354848704010D+02 0.1347850917805D+02 0.1341110973067D+02 + 0.1334649020784D+02 0.1328484946035D+02 0.1322638315716D+02 0.1317128325401D+02 + 0.1311973745494D+02 0.1307192866751D+02 0.1302803445348D+02 0.1298822647591D+02 + 0.1295266994451D+02 0.1292152306047D+02 0.1289493646241D+02 0.1287305267513D+02 + 0.1285600556280D+02 0.1284391978826D+02 0.1283691028023D+02 0.1283508171029D+02 + 0.1283852798138D+02 0.1284733172974D+02 0.1286156384222D+02 0.1288128299076D+02 + 0.1290653518618D+02 0.1293735335296D+02 0.1297375692719D+02 0.1301575147950D+02 + 0.1306332836491D+02 0.1311646440151D+02 0.1317512157987D+02 0.1323924680507D+02 + 0.1330877167298D+02 0.1338361228276D+02 0.1346366908713D+02 0.1354882678208D+02 + 0.1363895423762D+02 0.1373390447094D+02 0.1383351466345D+02 0.1393760622292D+02 + 0.1404598489200D+02 0.1415844090396D+02 0.1427474918685D+02 0.1439466961667D+02 + 0.1451794732036D+02 0.1464431302897D+02 0.1477348348153D+02 0.1490516187977D+02 + 0.1503903839367D+02 0.1517479071773D+02 0.1531208467774D+02 0.1545057488743D+02 + 0.1558990545436D+02 0.1572971073422D+02 0.1586961613246D+02 0.1600923895189D+02 + 0.1614818928501D+02 0.1628607094913D+02 0.1642248246270D+02 0.1655701806063D+02 + 0.1668926874635D+02 0.1681882337826D+02 0.1694526978786D+02 0.1706819592674D+02 + 0.1718719103944D+02 0.1730184685899D+02 0.1741175882172D+02 0.1751652729787D+02 + 0.1761575883430D+02 0.1770906740548D+02 0.1779607566868D+02 0.1787641621945D+02 + 0.1794973284299D+02 0.1801568175721D+02 0.1807393284296D+02 0.1812417085705D+02 + 0.1816609662340D+02 0.1819942819779D+02 0.1822390200146D+02 0.1823927391908D+02 + 0.1824532035625D+02 0.1824183925200D+02 0.1822865104165D+02 0.1820559956550D+02 + 0.1817255291888D+02 0.1812940423917D+02 0.1807607242550D+02 0.1801250278709D+02 + 0.1793866761614D+02 0.1785456668155D+02 0.1776022763989D+02 0.1765570636012D+02 + 0.1754108715905D+02 0.1741648294454D+02 0.1728203526389D+02 0.1713791425516D+02 + 0.1698431849923D+02 0.1682147477124D+02 0.1664963768980D+02 0.1646908926334D+02 + 0.1628013833278D+02 0.1608311991066D+02 0.1587839441679D+02 0.1566634681132D+02 + 0.1544738562630D+02 0.1522194189740D+02 0.1499046799787D+02 0.1475343637732D+02 + 0.1451133820829D+02 0.1426468194433D+02 0.1401399179326D+02 0.1375980611042D+02 + 0.1350267571662D+02 0.1324316214632D+02 0.1298183583186D+02 0.1271927423003D+02 + 0.1245605989772D+02 0.1219277852373D+02 0.1193001692436D+02 0.1166836101040D+02 + 0.1140839373395D+02 0.1115069302334D+02 0.1089582971492D+02 0.1064436549062D+02 + 0.1039685083038D+02 0.1015382298862D+02 0.9915804004069D+01 0.9683298752138D+01 + 0.9456793049227D+01 0.9236751818035D+01 0.9023617322946D+01 0.8817807484291D+01 + 0.8619714280069D+01 0.8429702243363D+01 0.8248107063304D+01 0.8075234297112D+01 + 0.7911358200102D+01 0.7756720680145D+01 0.7611530382440D+01 0.7475961909859D+01 + 0.7350155183444D+01 0.7234214946988D+01 0.7128210418858D+01 0.7032175093527D+01 + 0.6946106694494D+01 0.6869967279497D+01 0.6803683498148D+01 0.6747147001341D+01 + 0.6700215000977D+01 0.6662710977805D+01 0.6634425534367D+01 0.6615117389331D+01 + 0.6604514508701D+01 0.6602315368719D+01 0.6608190344555D+01 0.6621783218206D+01 + 0.6642712798410D+01 0.6670574644732D+01 0.6704942887446D+01 0.6745372134261D+01 + 0.6791399454482D+01 0.6842546430718D+01 0.6898321267880D+01 0.6958220948853D+01 + 0.7021733425945D+01 0.7088339837000D+01 0.7157516734906D+01 0.7228738319131D+01 + 0.7301478657917D+01 0.7375213889815D+01 0.7449424393360D+01 0.7523596913917D+01 + 0.7597226636996D+01 0.7669819197678D+01 0.7740892616243D+01 0.7809979150560D+01 + 0.7876627056376D+01 0.7940402247255D+01 0.8000889846591D+01 0.8057695624856D+01 + 0.8110447316000D+01 0.8158795807755D+01 0.8202416201394D+01 0.8241008737409D+01 + 0.8274299584401D+01 0.8302041489408D+01 0.8324014288740D+01 0.8340025279308D+01 + 0.8349909451277D+01 0.8353529583726D+01 0.8350776205804D+01 0.8341567426663D+01 + 0.8325848638191D+01 0.8303592095233D+01 0.8274796378677D+01 0.8239485747328D+01 + 0.8197709385041D+01 0.8149540550058D+01 0.8095075633884D+01 0.8034433137388D+01 + 0.7967752572084D+01 0.7895193294769D+01 0.7816933283818D+01 0.7733167865547D+01 + 0.7644108399047D+01 0.7549980927878D+01 0.7451024806891D+01 0.7347491312332D+01 + 0.7239642243138D+01 0.7127748521136D+01 0.7012088797527D+01 0.6892948072764D+01 + 0.6770616336517D+01 0.6645387234077D+01 0.6517556765103D+01 0.6387422020218D+01 + 0.6255279960486D+01 0.6121426244361D+01 0.5986154106212D+01 0.5849753290086D+01 + 0.5712509041854D+01 0.5574701162476D+01 0.5436603124594D+01 0.5298481254265D+01 + 0.5160593979164D+01 0.5023191144184D+01 0.4886513394935D+01 0.4750791629256D+01 + 0.4616246516481D+01 0.4483088083836D+01 0.4351515369031D+01 0.4221716137775D+01 + 0.4093866664684D+01 0.3968131575771D+01 0.3844663750468D+01 0.3723604280929D+01 + 0.3605082486158D+01 0.3489215978338D+01 0.3376110778602D+01 0.3265861479361D+01 + 0.3158551450192D+01 0.3054253084228D+01 0.2953028081929D+01 0.2854927769062D+01 + 0.2759993445724D+01 0.2668256763216D+01 0.2579740125612D+01 0.2494457112892D+01 + 0.2412412922561D+01 0.2333604826741D+01 0.2258022641797D+01 0.2185649207643D+01 + 0.2116460874009D+01 0.2050427991010D+01 0.1987515401527D+01 0.1927682933026D+01 + 0.1870885886569D+01 0.1817075520934D+01 0.1766199529911D+01 0.1718202510983D+01 + 0.1673026423775D+01 0.1630611036811D+01 0.1590894361294D+01 0.1553813070750D+01 + 0.1519302905602D+01 0.1487299061842D+01 0.1457736563157D+01 0.1430550616026D+01 + 0.1405676947425D+01 0.1383052124952D+01 0.1362613859302D+01 0.1344301289150D+01 + 0.1328055248635D+01 0.1313818517731D+01 0.1301536055894D+01 0.1291155219479D+01 + 0.1282625963463D+01 0.1275901028118D+01 0.1270936111293D+01 0.1267690027017D+01 + 0.1266124851152D+01 0.1266206054844D+01 0.1267902626502D+01 0.1271187183006D+01 + 0.1276036070820D+01 0.1282429457621D+01 0.1290351414963D+01 0.1299789992421D+01 + 0.1310737283525D+01 0.1323189483644D+01 0.1337146939842D+01 0.1352614192487D+01 + 0.1369600014594D+01 0.1388117246706D+01 0.1408184695203D+01 0.1429827052081D+01 + 0.1453031715699D+01 0.1477651685237D+01 0.1503608171868D+01 0.1530890011377D+01 + 0.1559488231412D+01 0.1589396000252D+01 0.1620608585690D+01 0.1653123324158D+01 + 0.1686939600139D+01 0.1722058835881D+01 + 7 1010 + 1 0 -1 -555.44073 + 2 0 -1 -64.57519 + 2 1 1 -55.93277 + 2 1 -2 -54.84508 + 3 0 -1 -6.08577 + 3 1 1 -3.50937 + 3 1 -2 -3.37296 + 0.2436300747976D-04 0.2494252865614D-04 0.2553583192076D-04 0.2614324493090D-04 + 0.2676510312978D-04 0.2740174993139D-04 0.2805353690980D-04 0.2872082399288D-04 + 0.2940397966065D-04 0.3010338114832D-04 0.3081941465412D-04 0.3155247555218D-04 + 0.3230296861024D-04 0.3307130821276D-04 0.3385791858914D-04 0.3466323404744D-04 + 0.3548769921361D-04 0.3633176927643D-04 0.3719591023818D-04 0.3808059917134D-04 + 0.3898632448130D-04 0.3991358617537D-04 0.4086289613807D-04 0.4183477841307D-04 + 0.4282976949166D-04 0.4384841860821D-04 0.4489128804251D-04 0.4595895342936D-04 + 0.4705200407540D-04 0.4817104328358D-04 0.4931668868518D-04 0.5048957257977D-04 + 0.5169034228324D-04 0.5291966048399D-04 0.5417820560766D-04 0.5546667219041D-04 + 0.5678577126110D-04 0.5813623073250D-04 0.5951879580174D-04 0.6093422936028D-04 + 0.6238331241360D-04 0.6386684451072D-04 0.6538564418406D-04 0.6694054939956D-04 + 0.6853241801751D-04 0.7016212826436D-04 0.7183057921553D-04 0.7353869128984D-04 + 0.7528740675547D-04 0.7707769024803D-04 0.7891052930079D-04 0.8078693488751D-04 + 0.8270794197809D-04 0.8467461010737D-04 0.8668802395739D-04 0.8874929395342D-04 + 0.9085955687408D-04 0.9301997647591D-04 0.9523174413268D-04 0.9749607948983D-04 + 0.9981423113441D-04 0.1021874772808D-03 0.1046171264727D-03 0.1071045183018D-03 + 0.1096510241430D-03 0.1122580479078D-03 0.1149270268146D-03 0.1176594321778D-03 + 0.1204567702157D-03 0.1233205828766D-03 0.1262524486853D-03 0.1292539836093D-03 + 0.1323268419453D-03 0.1354727172271D-03 0.1386933431540D-03 0.1419904945425D-03 + 0.1453659882993D-03 0.1488216844175D-03 0.1523594869970D-03 0.1559813452882D-03 + 0.1596892547607D-03 0.1634852581970D-03 0.1673714468126D-03 0.1713499614015D-03 + 0.1754229935098D-03 0.1795927866362D-03 0.1838616374614D-03 0.1882318971060D-03 + 0.1927059724183D-03 0.1972863272927D-03 0.2019754840184D-03 0.2067760246613D-03 + 0.2116905924767D-03 0.2167218933568D-03 0.2218726973115D-03 0.2271458399843D-03 + 0.2325442242042D-03 0.2380708215735D-03 0.2437286740937D-03 0.2495208958293D-03 + 0.2554506746108D-03 0.2615212737781D-03 0.2677360339645D-03 0.2740983749230D-03 + 0.2806117973955D-03 0.2872798850262D-03 0.2941063063195D-03 0.3010948166444D-03 + 0.3082492602863D-03 0.3155735725461D-03 0.3230717818897D-03 0.3307480121478D-03 + 0.3386064847665D-03 0.3466515211124D-03 0.3548875448306D-03 0.3633190842585D-03 + 0.3719507748966D-03 0.3807873619369D-03 0.3898337028514D-03 0.3990947700399D-03 + 0.4085756535423D-03 0.4182815638121D-03 0.4282178345569D-03 0.4383899256446D-03 + 0.4488034260779D-03 0.4594640570390D-03 0.4703776750055D-03 0.4815502749390D-03 + 0.4929879935490D-03 0.5046971126334D-03 0.5166840624966D-03 0.5289554254486D-03 + 0.5415179393851D-03 0.5543785014529D-03 0.5675441717994D-03 0.5810221774115D-03 + 0.5948199160432D-03 0.6089449602361D-03 0.6234050614333D-03 0.6382081541898D-03 + 0.6533623604815D-03 0.6688759941151D-03 0.6847575652406D-03 0.7010157849702D-03 + 0.7176595701041D-03 0.7346980479674D-03 0.7521405613604D-03 0.7699966736235D-03 + 0.7882761738211D-03 0.8069890820465D-03 0.8261456548504D-03 0.8457563907966D-03 + 0.8658320361462D-03 0.8863835906760D-03 0.9074223136312D-03 0.9289597298178D-03 + 0.9510076358363D-03 0.9735781064614D-03 0.9966835011698D-03 0.1020336470820D-02 + 0.1044549964489D-02 0.1069337236464D-02 0.1094711853405D-02 0.1120687701663D-02 + 0.1147278994780D-02 0.1174500281151D-02 0.1202366451879D-02 0.1230892748797D-02 + 0.1260094772688D-02 0.1289988491691D-02 0.1320590249901D-02 0.1351916776174D-02 + 0.1383985193129D-02 0.1416813026364D-02 0.1450418213887D-02 0.1484819115757D-02 + 0.1520034523962D-02 0.1556083672513D-02 0.1592986247776D-02 0.1630762399051D-02 + 0.1669432749382D-02 0.1709018406627D-02 0.1749540974782D-02 0.1791022565566D-02 + 0.1833485810271D-02 0.1876953871892D-02 0.1921450457532D-02 0.1966999831095D-02 + 0.2013626826273D-02 0.2061356859829D-02 0.2110215945193D-02 0.2160230706362D-02 + 0.2211428392130D-02 0.2263836890639D-02 0.2317484744267D-02 0.2372401164861D-02 + 0.2428616049314D-02 0.2486159995509D-02 0.2545064318620D-02 0.2605361067797D-02 + 0.2667083043225D-02 0.2730263813582D-02 0.2794937733893D-02 0.2861139963794D-02 + 0.2928906486216D-02 0.2998274126497D-02 0.3069280571930D-02 0.3141964391760D-02 + 0.3216365057636D-02 0.3292522964535D-02 0.3370479452160D-02 0.3450276826826D-02 + 0.3531958383854D-02 0.3615568430463D-02 0.3701152309194D-02 0.3788756421863D-02 + 0.3878428254065D-02 0.3970216400227D-02 0.4064170589239D-02 0.4160341710664D-02 + 0.4258781841545D-02 0.4359544273820D-02 0.4462683542360D-02 0.4568255453641D-02 + 0.4676317115071D-02 0.4786926964976D-02 0.4900144803268D-02 0.5016031822805D-02 + 0.5134650641463D-02 0.5256065334928D-02 0.5380341470237D-02 0.5507546140066D-02 + 0.5637747997797D-02 0.5771017293374D-02 0.5907425909969D-02 0.6047047401467D-02 + 0.6189957030802D-02 0.6336231809146D-02 0.6485950535987D-02 0.6639193840097D-02 + 0.6796044221425D-02 0.6956586093930D-02 0.7120905829363D-02 0.7289091802039D-02 + 0.7461234434606D-02 0.7637426244832D-02 0.7817761893445D-02 0.8002338233025D-02 + 0.8191254358006D-02 0.8384611655767D-02 0.8582513858879D-02 0.8785067098501D-02 + 0.8992379958963D-02 0.9204563533567D-02 0.9421731481610D-02 0.9644000086685D-02 + 0.9871488316257D-02 0.1010431788256D-01 0.1034261330486D-01 0.1058650197303D-01 + 0.1083611421260D-01 0.1109158335118D-01 0.1135304578640D-01 0.1162064105526D-01 + 0.1189451190508D-01 0.1217480436595D-01 0.1246166782483D-01 0.1275525510116D-01 + 0.1305572252426D-01 0.1336323001229D-01 0.1367794115300D-01 0.1400002328625D-01 + 0.1432964758824D-01 0.1466698915767D-01 0.1501222710371D-01 0.1536554463585D-01 + 0.1572712915577D-01 0.1609717235113D-01 0.1647587029137D-01 0.1686342352568D-01 + 0.1726003718290D-01 0.1766592107376D-01 0.1808128979515D-01 0.1850636283670D-01 + 0.1894136468966D-01 0.1938652495804D-01 0.1984207847214D-01 0.2030826540453D-01 + 0.2078533138846D-01 0.2127352763879D-01 0.2177311107546D-01 0.2228434444962D-01 + 0.2280749647241D-01 0.2334284194636D-01 0.2389066189972D-01 0.2445124372346D-01 + 0.2502488131124D-01 0.2561187520224D-01 0.2621253272702D-01 0.2682716815642D-01 + 0.2745610285350D-01 0.2809966542871D-01 0.2875819189824D-01 0.2943202584562D-01 + 0.3012151858672D-01 0.3082702933805D-01 0.3154892538866D-01 0.3228758227542D-01 + 0.3304338396195D-01 0.3381672302127D-01 0.3460800082200D-01 0.3541762771855D-01 + 0.3624602324499D-01 0.3709361631296D-01 0.3796084541350D-01 0.3884815882299D-01 + 0.3975601481318D-01 0.4068488186550D-01 0.4163523888954D-01 0.4260757544598D-01 + 0.4360239197393D-01 0.4462020002269D-01 0.4566152248823D-01 0.4672689385417D-01 + 0.4781686043765D-01 0.4893198063991D-01 0.5007282520174D-01 0.5123997746403D-01 + 0.5243403363324D-01 0.5365560305208D-01 0.5490530847537D-01 0.5618378635120D-01 + 0.5749168710753D-01 0.5882967544414D-01 0.6019843063026D-01 0.6159864680774D-01 + 0.6303103329996D-01 0.6449631492661D-01 0.6599523232423D-01 0.6752854227290D-01 + 0.6909701802881D-01 0.7070144966314D-01 0.7234264440709D-01 0.7402142700325D-01 + 0.7573864006342D-01 0.7749514443285D-01 0.7929181956120D-01 0.8112956388003D-01 + 0.8300929518716D-01 0.8493195103782D-01 0.8689848914279D-01 0.8890988777350D-01 + 0.9096714617429D-01 0.9307128498182D-01 0.9522334665183D-01 0.9742439589318D-01 + 0.9967552010936D-01 0.1019778298476D+00 0.1043324592555D+00 0.1067405665452D+00 + 0.1092033344659D+00 0.1117219707835D+00 0.1142977087684D+00 0.1169318076918D+00 + 0.1196255533290D+00 0.1223802584721D+00 0.1251972634499D+00 0.1280779366565D+00 + 0.1310236750883D+00 0.1340359048891D+00 0.1371160819039D+00 0.1402656922411D+00 + 0.1434862528432D+00 0.1467793120663D+00 0.1501464502682D+00 0.1535892804048D+00 + 0.1571094486358D+00 0.1607086349387D+00 0.1643885537321D+00 0.1681509545072D+00 + 0.1719976224683D+00 0.1759303791827D+00 0.1799510832385D+00 0.1840616309122D+00 + 0.1882639568442D+00 0.1925600347240D+00 0.1969518779836D+00 0.2014415405000D+00 + 0.2060311173061D+00 0.2107227453109D+00 0.2155186040281D+00 0.2204209163124D+00 + 0.2254319491063D+00 0.2305540141932D+00 0.2357894689604D+00 0.2411407171699D+00 + 0.2466102097370D+00 0.2522004455172D+00 0.2579139721015D+00 0.2637533866187D+00 + 0.2697213365458D+00 0.2758205205255D+00 0.2820536891913D+00 0.2884236459997D+00 + 0.2949332480688D+00 0.3015854070240D+00 0.3083830898497D+00 0.3153293197477D+00 + 0.3224271770007D+00 0.3296797998419D+00 0.3370903853297D+00 0.3446621902273D+00 + 0.3523985318865D+00 0.3603027891366D+00 0.3683784031760D+00 0.3766288784678D+00 + 0.3850577836384D+00 0.3936687523779D+00 0.4024654843434D+00 0.4114517460630D+00 + 0.4206313718410D+00 0.4300082646637D+00 0.4395863971043D+00 0.4493698122276D+00 + 0.4593626244930D+00 0.4695690206546D+00 0.4799932606599D+00 0.4906396785430D+00 + 0.5015126833147D+00 0.5126167598467D+00 0.5239564697498D+00 0.5355364522449D+00 + 0.5473614250267D+00 0.5594361851172D+00 0.5717656097107D+00 0.5843546570069D+00 + 0.5972083670321D+00 0.6103318624474D+00 0.6237303493421D+00 0.6374091180122D+00 + 0.6513735437207D+00 0.6656290874416D+00 0.6801812965822D+00 0.6950358056860D+00 + 0.7101983371123D+00 0.7256747016918D+00 0.7414707993572D+00 0.7575926197457D+00 + 0.7740462427733D+00 0.7908378391779D+00 0.8079736710301D+00 0.8254600922099D+00 + 0.8433035488464D+00 0.8615105797198D+00 0.8800878166228D+00 0.8990419846794D+00 + 0.9183799026193D+00 0.9381084830049D+00 0.9582347324092D+00 0.9787657515422D+00 + 0.9997087353229D+00 0.1021070972894D+01 0.1042859847580D+01 0.1065082836777D+01 + 0.1087747511785D+01 0.1110861537570D+01 0.1134432672451D+01 0.1158468767720D+01 + 0.1182977767183D+01 0.1207967706618D+01 0.1233446713154D+01 0.1259423004564D+01 + 0.1285904888460D+01 0.1312900761408D+01 0.1340419107937D+01 0.1368468499445D+01 + 0.1397057593012D+01 0.1426195130092D+01 0.1455889935103D+01 0.1486150913896D+01 + 0.1516987052102D+01 0.1548407413362D+01 0.1580421137422D+01 0.1613037438099D+01 + 0.1646265601105D+01 0.1680114981736D+01 0.1714595002411D+01 0.1749715150058D+01 + 0.1785484973352D+01 0.1821914079785D+01 0.1859012132575D+01 0.1896788847401D+01 + 0.1935253988974D+01 0.1974417367410D+01 0.2014288834438D+01 0.2054878279402D+01 + 0.2096195625076D+01 0.2138250823274D+01 0.2181053850263D+01 0.2224614701949D+01 + 0.2268943388866D+01 0.2314049930925D+01 0.2359944351950D+01 0.2406636673970D+01 + 0.2454136911285D+01 0.2502455064278D+01 0.2551601112984D+01 0.2601585010405D+01 + 0.2652416675559D+01 0.2704105986278D+01 0.2756662771719D+01 0.2810096804615D+01 + 0.2864417793235D+01 0.2919635373064D+01 0.2975759098193D+01 0.3032798432410D+01 + 0.3090762739994D+01 0.3149661276205D+01 0.3209503177463D+01 0.3270297451213D+01 + 0.3332052965478D+01 0.3394778438080D+01 0.3458482425550D+01 0.3523173311696D+01 + 0.3588859295846D+01 0.3655548380756D+01 0.3723248360178D+01 0.3791966806088D+01 + 0.3861711055573D+01 0.3932488197373D+01 0.4004305058080D+01 0.4077168187986D+01 + 0.4151083846586D+01 0.4226057987740D+01 0.4302096244475D+01 0.4379203913455D+01 + 0.4457385939096D+01 0.4536646897348D+01 0.4616990979123D+01 0.4698421973405D+01 + 0.4780943250006D+01 0.4864557742012D+01 0.4949267927889D+01 0.5035075813286D+01 + 0.5121982912514D+01 0.5209990229731D+01 0.5299098239822D+01 0.5389306869006D+01 + 0.5480615475152D+01 0.5573022827841D+01 0.5666527088168D+01 0.5761125788309D+01 + 0.5856815810858D+01 0.5953593367956D+01 0.6051453980221D+01 0.6150392455509D+01 + 0.6250402867508D+01 0.6351478534196D+01 0.6453611996190D+01 0.6556794994983D+01 + 0.6661018451130D+01 0.6766272442373D+01 0.6872546181755D+01 0.6979827995739D+01 + 0.7088105302373D+01 0.7197364589514D+01 0.7307591393163D+01 0.7418770275936D+01 + 0.7530884805706D+01 0.7643917534454D+01 0.7757849977372D+01 0.7872662592260D+01 + 0.7988334759245D+01 0.8104844760889D+01 0.8222169762716D+01 0.8340285794204D+01 + 0.8459167730311D+01 0.8578789273559D+01 0.8699122936749D+01 0.8820140026360D+01 + 0.8941810626674D+01 0.9064103584702D+01 0.9186986495967D+01 0.9310425691193D+01 + 0.9434386223984D+01 0.9558831859540D+01 0.9683725064487D+01 0.9809026997885D+01 + 0.9934697503485D+01 0.1006069510330D+02 0.1018697699259D+02 0.1031349903627D+02 + 0.1044021576690D+02 0.1056708038429D+02 0.1069404475673D+02 0.1082105942412D+02 + 0.1094807360284D+02 0.1107503519255D+02 0.1120189078511D+02 0.1132858567548D+02 + 0.1145506387481D+02 0.1158126812584D+02 0.1170713992055D+02 0.1183261952033D+02 + 0.1195764597851D+02 0.1208215716557D+02 0.1220608979696D+02 0.1232937946367D+02 + 0.1245196066554D+02 0.1257376684753D+02 0.1269473043889D+02 0.1281478289538D+02 + 0.1293385474456D+02 0.1305187563421D+02 0.1316877438404D+02 0.1328447904060D+02 + 0.1339891693555D+02 0.1351201474732D+02 0.1362369856614D+02 0.1373389396264D+02 + 0.1384252605985D+02 0.1394951960879D+02 0.1405479906760D+02 0.1415828868425D+02 + 0.1425991258288D+02 0.1435959485364D+02 0.1445725964621D+02 0.1455283126686D+02 + 0.1464623427910D+02 0.1473739360779D+02 0.1482623464684D+02 0.1491268337028D+02 + 0.1499666644679D+02 0.1507811135746D+02 0.1515694651689D+02 0.1523310139739D+02 + 0.1530650665622D+02 0.1537709426581D+02 0.1544479764676D+02 0.1550955180353D+02 + 0.1557129346260D+02 0.1562996121306D+02 0.1568549564934D+02 0.1573783951583D+02 + 0.1578693785346D+02 0.1583273814764D+02 0.1587519047759D+02 0.1591424766675D+02 + 0.1594986543394D+02 0.1598200254501D+02 0.1601062096477D+02 0.1603568600870D+02 + 0.1605716649437D+02 0.1607503489195D+02 0.1608926747369D+02 0.1609984446180D+02 + 0.1610675017454D+02 0.1610997316993D+02 0.1610950638680D+02 0.1610534728270D+02 + 0.1609749796822D+02 0.1608596533732D+02 0.1607076119317D+02 0.1605190236897D+02 + 0.1602941084344D+02 0.1600331385027D+02 0.1597364398126D+02 0.1594043928240D+02 + 0.1590374334263D+02 0.1586360537457D+02 0.1582008028680D+02 0.1577322874718D+02 + 0.1572311723663D+02 0.1566981809294D+02 0.1561340954400D+02 0.1555397573000D+02 + 0.1549160671421D+02 0.1542639848153D+02 0.1535845292479D+02 0.1528787781787D+02 + 0.1521478677554D+02 0.1513929919944D+02 0.1506154020973D+02 0.1498164056221D+02 + 0.1489973655035D+02 0.1481596989196D+02 0.1473048760026D+02 0.1464344183900D+02 + 0.1455498976134D+02 0.1446529333237D+02 0.1437451913511D+02 0.1428283815974D+02 + 0.1419042557609D+02 0.1409746048933D+02 0.1400412567874D+02 0.1391060731987D+02 + 0.1381709468993D+02 0.1372377985670D+02 0.1363085735123D+02 0.1353852382443D+02 + 0.1344697768809D+02 0.1335641874054D+02 0.1326704777749D+02 0.1317906618862D+02 + 0.1309267554037D+02 0.1300807714563D+02 0.1292547162109D+02 0.1284505843296D+02 + 0.1276703543190D+02 0.1269159837807D+02 0.1261894045729D+02 0.1254925178929D+02 + 0.1248271892920D+02 0.1241952436338D+02 0.1235984600080D+02 0.1230385666127D+02 + 0.1225172356187D+02 0.1220360780286D+02 0.1215966385455D+02 0.1212003904669D+02 + 0.1208487306166D+02 0.1205429743335D+02 0.1202843505301D+02 0.1200739968382D+02 + 0.1199129548596D+02 0.1198021655358D+02 0.1197424646561D+02 0.1197345785197D+02 + 0.1197791197693D+02 0.1198765834135D+02 0.1200273430547D+02 0.1202316473394D+02 + 0.1204896166486D+02 0.1208012400425D+02 0.1211663724788D+02 0.1215847323179D+02 + 0.1220558991311D+02 0.1225793118273D+02 0.1231542671115D+02 0.1237799182892D+02 + 0.1244552744290D+02 0.1251791998968D+02 0.1259504142703D+02 0.1267674926467D+02 + 0.1276288663510D+02 0.1285328240537D+02 0.1294775133048D+02 0.1304609424897D+02 + 0.1314809832124D+02 0.1325353731072D+02 0.1336217190835D+02 0.1347375010021D+02 + 0.1358800757822D+02 0.1370466819380D+02 0.1382344445391D+02 0.1394403805906D+02 + 0.1406614048241D+02 0.1418943358933D+02 0.1431359029611D+02 0.1443827526682D+02 + 0.1456314564688D+02 0.1468785183186D+02 0.1481203826977D+02 0.1493534429515D+02 + 0.1505740499276D+02 0.1517785208896D+02 0.1529631486834D+02 0.1541242111326D+02 + 0.1552579806373D+02 0.1563607339488D+02 0.1574287620937D+02 0.1584583804162D+02 + 0.1594459387103D+02 0.1603878314085D+02 0.1612805077975D+02 0.1621204822259D+02 + 0.1629043442710D+02 0.1636287688313D+02 0.1642905261093D+02 0.1648864914501D+02 + 0.1654136550010D+02 0.1658691311566D+02 0.1662501677546D+02 0.1665541549880D+02 + 0.1667786339979D+02 0.1669213051149D+02 0.1669800357139D+02 0.1669528676508D+02 + 0.1668380242493D+02 0.1666339168077D+02 0.1663391505946D+02 0.1659525303078D+02 + 0.1654730649683D+02 0.1648999722254D+02 0.1642326820487D+02 0.1634708397870D+02 + 0.1626143085743D+02 0.1616631710655D+02 0.1606177304876D+02 0.1594785109940D+02 + 0.1582462573112D+02 0.1569219336717D+02 0.1555067220274D+02 0.1540020195427D+02 + 0.1524094353667D+02 0.1507307866900D+02 0.1489680940924D+02 0.1471235761902D+02 + 0.1451996435976D+02 0.1431988922169D+02 0.1411240958771D+02 0.1389781983423D+02 + 0.1367643047150D+02 0.1344856722628D+02 0.1321457006984D+02 0.1297479219469D+02 + 0.1272959894377D+02 0.1247936669582D+02 0.1222448171126D+02 0.1196533894289D+02 + 0.1170234081602D+02 0.1143589598284D+02 0.1116641805611D+02 0.1089432432719D+02 + 0.1062003447383D+02 0.1034396926307D+02 0.1006654925476D+02 0.9788193511282D+01 + 0.9509318319002D+01 0.9230335927129D+01 0.8951653309465D+01 0.8673670954582D+01 + 0.8396781689805D+01 0.8121369544272D+01 0.7847808656180D+01 0.7576462229104D+01 + 0.7307681542065D+01 0.7041805017749D+01 0.6779157352939D+01 0.6520048714994D+01 + 0.6264774007701D+01 0.6013612209544D+01 0.5766825786953D+01 0.5524660184690D+01 + 0.5287343395031D+01 0.5055085606950D+01 0.4828078935988D+01 0.4606497235011D+01 + 0.4390495985554D+01 0.4180212268924D+01 0.3975764815763D+01 0.3777254132294D+01 + 0.3584762700983D+01 0.3398355252947D+01 0.3218079109016D+01 0.3043964585970D+01 + 0.2876025464162D+01 0.2714259512413D+01 0.2558649065825D+01 0.2409161651932D+01 + 0.2265750660441D+01 0.2128356051688D+01 0.1996905098824D+01 0.1871313158716D+01 + 0.1751484466523D+01 0.1637312948917D+01 0.1528683050991D+01 0.1425470571958D+01 + 0.1327543504892D+01 0.1234762875844D+01 0.1146983577900D+01 0.1064055195880D+01 + 0.9858228176179D+00 0.9121278279737D+00 0.8428086819936D+00 0.7777016538806D+00 + 0.7166415587263D+00 0.6594624442405D+00 0.6059982500142D+00 0.5560834321604D+00 + 0.5095535514897D+00 0.4662458236918D+00 0.4259996303108D+00 0.3886569896182D+00 + 0.3540629867918D+00 0.3220661631149D+00 0.2925188642018D+00 0.2652775475341D+00 + 0.2402030498606D+00 0.2171608152649D+00 0.1960210849349D+00 0.1766590498845D+00 + 0.1589549680695D+00 0.1427942475120D+00 0.1280674971948D+00 0.1146705476162D+00 + 0.1025044429975D+00 0.9147540721504D-01 0.8149478558910D-01 0.7247896469548D-01 + 0.6434927238163D-01 0.5703186016372D-01 0.5045757015666D-01 0.4456178864784D-01 + 0.3928428836712D-01 0.3456906143417D-01 0.3036414487904D-01 0.2662144053654D-01 + 0.2329653101002D-01 0.2034849328800D-01 0.1773971147912D-01 0.1543569000921D-01 + 0.1340486849981D-01 0.1161843942265D-01 0.1005016949998D-01 0.8676225698051D-02 + 0.7475006541782D-02 0.6426979362772D-02 0.5514523982977D-02 0.4721783231412D-02 + 0.4034520593242D-02 0.3439985199284D-02 0.2926784279968D-02 0.2484763131275D-02 + 0.2104892571269D-02 0.1779163804523D-02 0.1500490558002D-02 0.1262618305481D-02 + 0.1060040358238D-02 0.8879205671801D-03 0.7420223552908D-03 0.6186437790767D-03 + 0.5145583029109D-03 0.4269609604688D-03 0.3534195722845D-03 0.2918306873542D-03 + 0.2403799191781D-03 0.1975063522022D-03 0.1618707028206D-03 0.1323269295042D-03 + 0.1078969988110D-03 0.8774852762258D-04 0.7117503659659D-04 0.5757856518909D-04 + 0.4645441441336D-04 0.3737779949221D-04 0.2999221051701D-04 0.2399929495330D-04 + 0.1915009116976D-04 0.1523745698338D-04 0.1208955140286D-04 0.9564241233867D-05 + 0.7544316924800D-05 0.5933413941250D-05 0.4652547039900D-05 0.3637175061890D-05 + 0.2834723288200D-05 0.2202499012867D-05 0.1705943820218D-05 0.1317173132905D-05 + 0.1013759967087D-05 0.7777255319856D-06 0.5947043882102D-06 0.4532563788728D-06 + 0.3443015162798D-06 0.2606574909519D-06 0.1966625138386D-06 0.1478688501244D-06 + 0.1107946950710D-06 0.8272401762816D-07 0.6154569214659D-07 0.4562468578953D-07 + 0.3369929971924D-07 0.2479950362860D-07 0.1818228078349D-07 0.1328063693216D-07 + 0.9663541254285D-08 0.7004578681799D-08 0.5057516003522D-08 0.3637332774782D-08 + 0.2605554010381D-08 0.1858955147804D-08 0.1320899585823D-08 0.9347227060773D-09 + 0.6587000152396D-09 0.4622362563215D-09 0.3229915222747D-09 0.2247233135691D-09 + 0.1556732269238D-09 0.1073661139203D-09 0.7372021872447D-10 0.5039071884421D-10 + 0.3428763630416D-10 0.2322341523595D-10 0.1565652070675D-10 0.1050571753616D-10 + 0.7016090865067D-11 0.4663220985735D-11 0.3084608073001D-11 0.2030504349818D-11 + 0.1330170704029D-11 0.8670861081545D-12 0.5623628605382D-12 0.3628641461406D-12 + 0.2329258956102D-12 0.1487342239912D-12 0.9447058502636D-13 0.5968266429830D-13 + 0.3750072158768D-13 0.2343397626386D-13 diff --git a/Test/Co/i_lsms b/Test/Co/i_lsms new file mode 100644 index 000000000..a3c0e1b28 --- /dev/null +++ b/Test/Co/i_lsms @@ -0,0 +1,165 @@ +systemid="co" +system_title = "Cobalt (FCC) Test for LSMS 3" +pot_in_type=1 +-- write potential out. Use this only when xRepeat, yRepeat and zRepeat = 1 +pot_out_type=1 +num_atoms=4 +nspin=3 +mtasa=0 +xcFunctional={0,1} -- von Barth Hedin (LSMS_1) +-- xcFunctional={1,1,17} -- von Barth Hedin (libxc) +-- xcFunctional={1,1,12} -- Perdew & Wang +-- xcFunctional={1,20} -- Teter 93 +-- xcFunctional={1,101,130} -- GGA PBE + +iprint=0 +default_iprint=-1 +print_node=0 +-- istop="buildKKRMatrix" +istop="main" + +nscf=30 +rmsTolerance=1.e-12 + +xRepeat=1 +yRepeat=1 +zRepeat=1 +makeTypesUnique=1 + +-- energyContour = {npts=1,grid=0,ebot=-0.2,etop=0.0,eitop=0.825,eibot=0.1} +-- energyContour = {npts=11,grid=2,ebot=-0.3,etop=0.0,eitop=0.825,eibot=0.025,maxGroupSize=5} +energyContour = {npts=25,grid=2,ebot=-0.7,etop=0.0,eitop=0.825,eibot=0.0025} + +a = 6.705 + +bravais = {} +bravais[1]={a,0,0} +bravais[2]={0,a,0} +bravais[3]={0,0,a} + +site_default={lmax=3,rLIZ=10.5,rsteps={89.5,91.5,93.2,99.9},atom="Co",Z=27,Zc=10,Zs=8,Zv=9,rad=2} + +-- Possible choices of mixing parameters +-- quantity : charge, potential, moment_magnitude, moment_direction, noQuantity +-- algorithm : simple, broyden, noAlgorithm +-- mixing = { {quantity = "charge", algorithm = "simple", mixing_parameter = 0.01} } +-- mixing = { {quantity = "potential", algorithm = "simple", mixing_parameter = 0.02} } +-- mixing = { {quantity = "potential", algorithm = "broyden", mixing_parameter = 0.05}, {quantity = "moment_magnitude", algorithm = "noAlgorithm", mixing_parameter = 0.01} } + mixing = { {quantity = "potential", algorithm = "broyden", mixing_parameter = 0.05} } + +numberOfMixQuantities = 0 +for k,v in pairs(mixing) do + numberOfMixQuantities = numberOfMixQuantities + 1 +end + +--[[ +print("Site defaults:") +for k,v in pairs(site_default) do + print(k," : ",v) +end +--]] + +site = {} +for i =1,num_atoms do site[i]={} end + +site[1].pos={0,0,0} +site[1].evec={0,0,1} +site[1].pot_in_idx=0 +site[2].pos={0.5*a,0.5*a,0} +site[2].evec={0,0,1} +site[2].pot_in_idx=0 +site[3].pos={0.5*a,0,0.5*a} +site[3].evec={0,0,1} +site[3].pot_in_idx=0 +site[4].pos={0,0.5*a,0.5*a} +site[4].evec={0,0,1} +site[4].pot_in_idx=0 + +-- set site defaults +for i =1,num_atoms do + for k,v in pairs(site_default) do + if(site[i][k]==nil) then site[i][k]=v end + end +end + + +--[[ +function deepcopy(t) +if type(t) ~= 'table' then return t end +local mt = getmetatable(t) +local res = {} +for k,v in pairs(t) do +if type(v) == 'table' then +v = deepcopy(v) +end +res[k] = v +end +-- setmetatable(res,mt) +return res +end + + +-- repeat nx*ny*nz times +ntemp=num_atoms +-- ix==1 first: +ix=0 +-- iy==1 +iy=0 +for iz=1,nz-1 do + for ib=1,num_atoms do + ntemp=ntemp+1 + site[ntemp]={pos={0,0,0},evec={0,0,1}} + site[ntemp].pos[1]=site[ib].pos[1]+bravais[1][1]*ix+bravais[2][1]*iy+bravais[3][1]*iz + site[ntemp].pos[2]=site[ib].pos[2]+bravais[1][2]*ix+bravais[2][2]*iy+bravais[3][2]*iz + site[ntemp].pos[3]=site[ib].pos[3]+bravais[1][3]*ix+bravais[2][3]*iy+bravais[3][3]*iz + site[ntemp].evec[1]=site[ib].evec[1] + site[ntemp].evec[2]=site[ib].evec[2] + site[ntemp].evec[3]=site[ib].evec[3] + site[ntemp].type=ib + end +end +-- iy!=1 +for iy =1,ny-1 do + for iz=0,nz-1 do + for ib=1,num_atoms do + ntemp=ntemp+1 + site[ntemp]={pos={0,0,0},evec={0,0,1}} + site[ntemp].pos[1]=site[ib].pos[1]+bravais[1][1]*ix+bravais[2][1]*iy+bravais[3][1]*iz + site[ntemp].pos[2]=site[ib].pos[2]+bravais[1][2]*ix+bravais[2][2]*iy+bravais[3][2]*iz + site[ntemp].pos[3]=site[ib].pos[3]+bravais[1][3]*ix+bravais[2][3]*iy+bravais[3][3]*iz + site[ntemp].evec[1]=site[ib].evec[1] + site[ntemp].evec[2]=site[ib].evec[2] + site[ntemp].evec[3]=site[ib].evec[3] + site[ntemp].type=ib + end + end +end +-- ix != 1 +for ix=1,nx-1 do + for iy =0,ny-1 do + for iz=0,nz-1 do + for ib=1,num_atoms do + ntemp=ntemp+1 + site[ntemp]={pos={0,0,0},evec={0,0,1}} + site[ntemp].pos[1]=site[ib].pos[1]+bravais[1][1]*ix+bravais[2][1]*iy+bravais[3][1]*iz + site[ntemp].pos[2]=site[ib].pos[2]+bravais[1][2]*ix+bravais[2][2]*iy+bravais[3][2]*iz + site[ntemp].pos[3]=site[ib].pos[3]+bravais[1][3]*ix+bravais[2][3]*iy+bravais[3][3]*iz + site[ntemp].evec[1]=site[ib].evec[1] + site[ntemp].evec[2]=site[ib].evec[2] + site[ntemp].evec[3]=site[ib].evec[3] + site[ntemp].type=ib + end + end + end +end +num_atoms=ntemp +bravais[1][1]=bravais[1][1]*nx +bravais[1][2]=bravais[1][2]*nx +bravais[1][3]=bravais[1][3]*nx +bravais[2][1]=bravais[2][1]*ny +bravais[2][2]=bravais[2][2]*ny +bravais[2][3]=bravais[2][3]*ny +bravais[3][1]=bravais[3][1]*nz +bravais[3][2]=bravais[3][2]*nz +bravais[3][3]=bravais[3][3]*nz +--]] diff --git a/Test/Co/v_co.0 b/Test/Co/v_co.0 new file mode 100644 index 000000000..b2680893c --- /dev/null +++ b/Test/Co/v_co.0 @@ -0,0 +1,1542 @@ + nspin vdif :::::: Potentials for ferro-magnetic non-relativistic Co. + 2 0.7823143402873D+00 + LSMS: xx z= 27. xvalws= 5.32063 + 27. 2.34846 10. 0.6742449217584D+00 + -0.1113096740000D+02 0.8631327458937D+00 1001 +-0.5399712523195D+02-0.5399709042077D+02-0.5399705518806D+02-0.5399701952870D+02 +-0.5399698343753D+02-0.5399694690932D+02-0.5399690993879D+02-0.5399687252056D+02 +-0.5399683464923D+02-0.5399679631929D+02-0.5399675752521D+02-0.5399671826136D+02 +-0.5399667852204D+02-0.5399663830151D+02-0.5399659759393D+02-0.5399655639340D+02 +-0.5399651469396D+02-0.5399647248956D+02-0.5399642977408D+02-0.5399638654135D+02 +-0.5399634278508D+02-0.5399629849895D+02-0.5399625367654D+02-0.5399620831134D+02 +-0.5399616239679D+02-0.5399611592624D+02-0.5399606889294D+02-0.5399602129009D+02 +-0.5399597311079D+02-0.5399592434805D+02-0.5399587499480D+02-0.5399582504391D+02 +-0.5399577448812D+02-0.5399572332012D+02-0.5399567153248D+02-0.5399561911770D+02 +-0.5399556606819D+02-0.5399551237626D+02-0.5399545803413D+02-0.5399540303393D+02 +-0.5399534736767D+02-0.5399529102730D+02-0.5399523400465D+02-0.5399517629146D+02 +-0.5399511787937D+02-0.5399505875990D+02-0.5399499892449D+02-0.5399493836447D+02 +-0.5399487707107D+02-0.5399481503539D+02-0.5399475224845D+02-0.5399468870116D+02 +-0.5399462438429D+02-0.5399455928853D+02-0.5399449340444D+02-0.5399442672248D+02 +-0.5399435923297D+02-0.5399429092615D+02-0.5399422179211D+02-0.5399415182082D+02 +-0.5399408100216D+02-0.5399400932584D+02-0.5399393678149D+02-0.5399386335859D+02 +-0.5399378904650D+02-0.5399371383444D+02-0.5399363771152D+02-0.5399356066670D+02 +-0.5399348268882D+02-0.5399340376656D+02-0.5399332388850D+02-0.5399324304305D+02 +-0.5399316121849D+02-0.5399307840297D+02-0.5399299458448D+02-0.5399290975086D+02 +-0.5399282388983D+02-0.5399273698893D+02-0.5399264903557D+02-0.5399256001700D+02 +-0.5399246992031D+02-0.5399237873244D+02-0.5399228644018D+02-0.5399219303014D+02 +-0.5399209848878D+02-0.5399200280240D+02-0.5399190595712D+02-0.5399180793891D+02 +-0.5399170873355D+02-0.5399160832666D+02-0.5399150670369D+02-0.5399140384990D+02 +-0.5399129975037D+02-0.5399119439003D+02-0.5399108775358D+02-0.5399097982557D+02 +-0.5399087059035D+02-0.5399076003209D+02-0.5399064813474D+02-0.5399053488209D+02 +-0.5399042025772D+02-0.5399030424500D+02-0.5399018682712D+02-0.5399006798704D+02 +-0.5398994770754D+02-0.5398982597117D+02-0.5398970276027D+02-0.5398957805700D+02 +-0.5398945184325D+02-0.5398932410072D+02-0.5398919481090D+02-0.5398906395502D+02 +-0.5398893151413D+02-0.5398879746899D+02-0.5398866180018D+02-0.5398852448803D+02 +-0.5398838551261D+02-0.5398824485376D+02-0.5398810249110D+02-0.5398795840396D+02 +-0.5398781257146D+02-0.5398766497243D+02-0.5398751558548D+02-0.5398736438892D+02 +-0.5398721136084D+02-0.5398705647903D+02-0.5398689972102D+02-0.5398674106408D+02 +-0.5398658048519D+02-0.5398641796106D+02-0.5398625346811D+02-0.5398608698247D+02 +-0.5398591848000D+02-0.5398574793624D+02-0.5398557532646D+02-0.5398540062561D+02 +-0.5398522380835D+02-0.5398504484901D+02-0.5398486372165D+02-0.5398468039996D+02 +-0.5398449485737D+02-0.5398430706693D+02-0.5398411700141D+02-0.5398392463322D+02 +-0.5398372993445D+02-0.5398353287684D+02-0.5398333343180D+02-0.5398313157039D+02 +-0.5398292726330D+02-0.5398272048090D+02-0.5398251119316D+02-0.5398229936971D+02 +-0.5398208497981D+02-0.5398186799234D+02-0.5398164837581D+02-0.5398142609834D+02 +-0.5398120112766D+02-0.5398097343113D+02-0.5398074297567D+02-0.5398050972785D+02 +-0.5398027365380D+02-0.5398003471925D+02-0.5397979288951D+02-0.5397954812947D+02 +-0.5397930040360D+02-0.5397904967592D+02-0.5397879591004D+02-0.5397853906911D+02 +-0.5397827911583D+02-0.5397801601246D+02-0.5397774972079D+02-0.5397748020216D+02 +-0.5397720741741D+02-0.5397693132694D+02-0.5397665189065D+02-0.5397636906796D+02 +-0.5397608281778D+02-0.5397579309855D+02-0.5397549986818D+02-0.5397520308407D+02 +-0.5397490270313D+02-0.5397459868171D+02-0.5397429097564D+02-0.5397397954024D+02 +-0.5397366433024D+02-0.5397334529986D+02-0.5397302240275D+02-0.5397269559198D+02 +-0.5397236482008D+02-0.5397203003898D+02-0.5397169120003D+02-0.5397134825399D+02 +-0.5397100115103D+02-0.5397064984070D+02-0.5397029427195D+02-0.5396993439309D+02 +-0.5396957015182D+02-0.5396920149519D+02-0.5396882836962D+02-0.5396845072087D+02 +-0.5396806849404D+02-0.5396768163356D+02-0.5396729008320D+02-0.5396689378601D+02 +-0.5396649268439D+02-0.5396608672001D+02-0.5396567583384D+02-0.5396525996613D+02 +-0.5396483905641D+02-0.5396441304346D+02-0.5396398186533D+02-0.5396354545930D+02 +-0.5396310376189D+02-0.5396265670887D+02-0.5396220423520D+02-0.5396174627506D+02 +-0.5396128276182D+02-0.5396081362805D+02-0.5396033880550D+02-0.5395985822507D+02 +-0.5395937181685D+02-0.5395887951004D+02-0.5395838123301D+02-0.5395787691324D+02 +-0.5395736647733D+02-0.5395684985099D+02-0.5395632695903D+02-0.5395579772532D+02 +-0.5395526207283D+02-0.5395471992357D+02-0.5395417119862D+02-0.5395361581808D+02 +-0.5395305370109D+02-0.5395248476579D+02-0.5395190892934D+02-0.5395132610786D+02 +-0.5395073621649D+02-0.5395013916929D+02-0.5394953487932D+02-0.5394892325854D+02 +-0.5394830421784D+02-0.5394767766706D+02-0.5394704351489D+02-0.5394640166894D+02 +-0.5394575203569D+02-0.5394509452046D+02-0.5394442902743D+02-0.5394375545961D+02 +-0.5394307371883D+02-0.5394238370571D+02-0.5394168531966D+02-0.5394097845887D+02 +-0.5394026302028D+02-0.5393953889958D+02-0.5393880599117D+02-0.5393806418819D+02 +-0.5393731338244D+02-0.5393655346442D+02-0.5393578432330D+02-0.5393500584687D+02 +-0.5393421792156D+02-0.5393342043244D+02-0.5393261326313D+02-0.5393179629587D+02 +-0.5393096941142D+02-0.5393013248913D+02-0.5392928540683D+02-0.5392842804089D+02 +-0.5392756026615D+02-0.5392668195593D+02-0.5392579298199D+02-0.5392489321454D+02 +-0.5392398252219D+02-0.5392306077194D+02-0.5392212782918D+02-0.5392118355764D+02 +-0.5392022781938D+02-0.5391926047479D+02-0.5391828138254D+02-0.5391729039957D+02 +-0.5391628738107D+02-0.5391527218046D+02-0.5391424464937D+02-0.5391320463761D+02 +-0.5391215199315D+02-0.5391108656210D+02-0.5391000818869D+02-0.5390891671524D+02 +-0.5390781198214D+02-0.5390669382783D+02-0.5390556208875D+02-0.5390441659937D+02 +-0.5390325719211D+02-0.5390208369733D+02-0.5390089594335D+02-0.5389969375634D+02 +-0.5389847696037D+02-0.5389724537735D+02-0.5389599882699D+02-0.5389473712680D+02 +-0.5389346009208D+02-0.5389216753582D+02-0.5389085926875D+02-0.5388953509926D+02 +-0.5388819483340D+02-0.5388683827485D+02-0.5388546522487D+02-0.5388407548228D+02 +-0.5388266884343D+02-0.5388124510220D+02-0.5387980404991D+02-0.5387834547532D+02 +-0.5387686916463D+02-0.5387537490137D+02-0.5387386246646D+02-0.5387233163809D+02 +-0.5387078219176D+02-0.5386921390019D+02-0.5386762653333D+02-0.5386601985829D+02 +-0.5386439363932D+02-0.5386274763780D+02-0.5386108161214D+02-0.5385939531782D+02 +-0.5385768850729D+02-0.5385596092997D+02-0.5385421233221D+02-0.5385244245723D+02 +-0.5385065104510D+02-0.5384883783270D+02-0.5384700255367D+02-0.5384514493838D+02 +-0.5384326471390D+02-0.5384136160392D+02-0.5383943532875D+02-0.5383748560526D+02 +-0.5383551214683D+02-0.5383351466335D+02-0.5383149286110D+02-0.5382944644277D+02 +-0.5382737510740D+02-0.5382527855032D+02-0.5382315646312D+02-0.5382100853359D+02 +-0.5381883444568D+02-0.5381663387947D+02-0.5381440651109D+02-0.5381215201269D+02 +-0.5380987005240D+02-0.5380756029425D+02-0.5380522239814D+02-0.5380285601981D+02 +-0.5380046081074D+02-0.5379803641813D+02-0.5379558248486D+02-0.5379309864938D+02 +-0.5379058454574D+02-0.5378803980344D+02-0.5378546404746D+02-0.5378285689816D+02 +-0.5378021797121D+02-0.5377754687758D+02-0.5377484322345D+02-0.5377210661015D+02 +-0.5376933663410D+02-0.5376653288677D+02-0.5376369495461D+02-0.5376082241898D+02 +-0.5375791485608D+02-0.5375497183692D+02-0.5375199292722D+02-0.5374897768738D+02 +-0.5374592567238D+02-0.5374283643174D+02-0.5373970950944D+02-0.5373654444385D+02 +-0.5373334076768D+02-0.5373009800790D+02-0.5372681568566D+02-0.5372349331623D+02 +-0.5372013040893D+02-0.5371672646707D+02-0.5371328098782D+02-0.5370979346223D+02 +-0.5370626337507D+02-0.5370269020479D+02-0.5369907342346D+02-0.5369541249666D+02 +-0.5369170688341D+02-0.5368795603612D+02-0.5368415940047D+02-0.5368031641534D+02 +-0.5367642651276D+02-0.5367248911778D+02-0.5366850364842D+02-0.5366446951557D+02 +-0.5366038612292D+02-0.5365625286686D+02-0.5365206913638D+02-0.5364783431303D+02 +-0.5364354777077D+02-0.5363920887593D+02-0.5363481698710D+02-0.5363037145503D+02 +-0.5362587162254D+02-0.5362131682444D+02-0.5361670638745D+02-0.5361203963004D+02 +-0.5360731586241D+02-0.5360253438634D+02-0.5359769449512D+02-0.5359279547344D+02 +-0.5358783659730D+02-0.5358281713388D+02-0.5357773634147D+02-0.5357259346937D+02 +-0.5356738775774D+02-0.5356211843755D+02-0.5355678473045D+02-0.5355138584865D+02 +-0.5354592099484D+02-0.5354038936205D+02-0.5353479013358D+02-0.5352912248285D+02 +-0.5352338557332D+02-0.5351757855833D+02-0.5351170058107D+02-0.5350575077436D+02 +-0.5349972826063D+02-0.5349363215175D+02-0.5348746154891D+02-0.5348121554255D+02 +-0.5347489321217D+02-0.5346849362628D+02-0.5346201584224D+02-0.5345545890612D+02 +-0.5344882185265D+02-0.5344210370501D+02-0.5343530347476D+02-0.5342842016171D+02 +-0.5342145275377D+02-0.5341440022684D+02-0.5340726154469D+02-0.5340003565882D+02 +-0.5339272150833D+02-0.5338531801978D+02-0.5337782410711D+02-0.5337023867143D+02 +-0.5336256060096D+02-0.5335478877086D+02-0.5334692204310D+02-0.5333895926633D+02 +-0.5333089927577D+02-0.5332274089302D+02-0.5331448292599D+02-0.5330612416870D+02 +-0.5329766340120D+02-0.5328909938940D+02-0.5328043088494D+02-0.5327165662507D+02 +-0.5326277533249D+02-0.5325378571521D+02-0.5324468646643D+02-0.5323547626442D+02 +-0.5322615377230D+02-0.5321671763802D+02-0.5320716649412D+02-0.5319749895764D+02 +-0.5318771362998D+02-0.5317780909676D+02-0.5316778392766D+02-0.5315763667632D+02 +-0.5314736588016D+02-0.5313697006028D+02-0.5312644772133D+02-0.5311579735130D+02 +-0.5310501742149D+02-0.5309410638630D+02-0.5308306268311D+02-0.5307188473217D+02 +-0.5306057093646D+02-0.5304911968153D+02-0.5303752933540D+02-0.5302579824843D+02 +-0.5301392475317D+02-0.5300190716426D+02-0.5298974377827D+02-0.5297743287361D+02 +-0.5296497271041D+02-0.5295236153034D+02-0.5293959755657D+02-0.5292667899360D+02 +-0.5291360402717D+02-0.5290037082412D+02-0.5288697753232D+02-0.5287342228050D+02 +-0.5285970317822D+02-0.5284581831569D+02-0.5283176576374D+02-0.5281754357366D+02 +-0.5280314977713D+02-0.5278858238614D+02-0.5277383939288D+02-0.5275891876966D+02 +-0.5274381846881D+02-0.5272853642265D+02-0.5271307054336D+02-0.5269741872294D+02 +-0.5268157883311D+02-0.5266554872529D+02-0.5264932623051D+02-0.5263290915935D+02 +-0.5261629530191D+02-0.5259948242774D+02-0.5258246828584D+02-0.5256525060455D+02 +-0.5254782709161D+02-0.5253019543405D+02-0.5251235329823D+02-0.5249429832978D+02 +-0.5247602815361D+02-0.5245754037393D+02-0.5243883257420D+02-0.5241990231719D+02 +-0.5240074714495D+02-0.5238136457886D+02-0.5236175211966D+02-0.5234190724746D+02 +-0.5232182742180D+02-0.5230151008171D+02-0.5228095264572D+02-0.5226015251199D+02 +-0.5223910705831D+02-0.5221781364224D+02-0.5219626960115D+02-0.5217447225235D+02 +-0.5215241889317D+02-0.5213010680106D+02-0.5210753323376D+02-0.5208469542936D+02 +-0.5206159060648D+02-0.5203821596442D+02-0.5201456868326D+02-0.5199064592408D+02 +-0.5196644482912D+02-0.5194196252193D+02-0.5191719610759D+02-0.5189214267288D+02 +-0.5186679928652D+02-0.5184116299936D+02-0.5181523084463D+02-0.5178899983814D+02 +-0.5176246697858D+02-0.5173562924769D+02-0.5170848361062D+02-0.5168102701612D+02 +-0.5165325639688D+02-0.5162516866979D+02-0.5159676073622D+02-0.5156802948240D+02 +-0.5153897177965D+02-0.5150958448477D+02-0.5147986444035D+02-0.5144980847509D+02 +-0.5141941340422D+02-0.5138867602978D+02-0.5135759314103D+02-0.5132616151482D+02 +-0.5129437791596D+02-0.5126223909764D+02-0.5122974180176D+02-0.5119688275941D+02 +-0.5116365869124D+02-0.5113006630784D+02-0.5109610231025D+02-0.5106176339027D+02 +-0.5102704623097D+02-0.5099194750711D+02-0.5095646388554D+02-0.5092059202567D+02 +-0.5088432857988D+02-0.5084767019399D+02-0.5081061350771D+02-0.5077315515504D+02 +-0.5073529176474D+02-0.5069701996077D+02-0.5065833636274D+02-0.5061923758632D+02 +-0.5057972024369D+02-0.5053978094398D+02-0.5049941629366D+02-0.5045862289701D+02 +-0.5041739735648D+02-0.5037573627314D+02-0.5033363624705D+02-0.5029109387763D+02 +-0.5024810576409D+02-0.5020466850576D+02-0.5016077870244D+02-0.5011643295475D+02 +-0.5007162786445D+02-0.5002636003476D+02-0.4998062607066D+02-0.4993442257914D+02 +-0.4988774616948D+02-0.4984059345349D+02-0.4979296104572D+02-0.4974484556365D+02 +-0.4969624362791D+02-0.4964715186237D+02-0.4959756689432D+02-0.4954748535455D+02 +-0.4949690387743D+02-0.4944581910096D+02-0.4939422766683D+02-0.4934212622036D+02 +-0.4928951141051D+02-0.4923637988980D+02-0.4918272831425D+02-0.4912855334323D+02 +-0.4907385163931D+02-0.4901861986812D+02-0.4896285469809D+02-0.4890655280025D+02 +-0.4884971084795D+02-0.4879232551656D+02-0.4873439348313D+02-0.4867591142607D+02 +-0.4861687602473D+02-0.4855728395901D+02-0.4849713190893D+02-0.4843641655416D+02 +-0.4837513457354D+02-0.4831328264459D+02-0.4825085744301D+02-0.4818785564209D+02 +-0.4812427391223D+02-0.4806010892033D+02-0.4799535732925D+02-0.4793001579727D+02 +-0.4786408097747D+02-0.4779754951722D+02-0.4773041805757D+02-0.4766268323278D+02 +-0.4759434166975D+02-0.4752538998755D+02-0.4745582479695D+02-0.4738564269998D+02 +-0.4731484028957D+02-0.4724341414919D+02-0.4717136085260D+02-0.4709867696360D+02 +-0.4702535903595D+02-0.4695140361324D+02-0.4687680722898D+02-0.4680156640671D+02 +-0.4672567766022D+02-0.4664913749396D+02-0.4657194240346D+02-0.4649408887599D+02 +-0.4641557339132D+02-0.4633639242265D+02-0.4625654243770D+02-0.4617601989996D+02 +-0.4609482127019D+02-0.4601294300804D+02-0.4593038157394D+02-0.4584713343116D+02 +-0.4576319504813D+02-0.4567856290097D+02-0.4559323347628D+02-0.4550720327416D+02 +-0.4542046881148D+02-0.4533302662545D+02-0.4524487327738D+02-0.4515600535680D+02 +-0.4506641948569D+02-0.4497611232315D+02-0.4488508057020D+02-0.4479332097485D+02 +-0.4470083033745D+02-0.4460760551618D+02-0.4451364343289D+02-0.4441894107896D+02 +-0.4432349552146D+02-0.4422730390937D+02-0.4413036347993D+02-0.4403267156510D+02 +-0.4393422559800D+02-0.4383502311931D+02-0.4373506178376D+02-0.4363433936626D+02 +-0.4353285376812D+02-0.4343060302282D+02-0.4332758530157D+02-0.4322379891852D+02 +-0.4311924233544D+02-0.4301391416593D+02-0.4290781317903D+02-0.4280093830205D+02 +-0.4269328862279D+02-0.4258486339073D+02-0.4247566201750D+02-0.4236568407616D+02 +-0.4225492929956D+02-0.4214339757750D+02-0.4203108895279D+02-0.4191800361606D+02 +-0.4180414189934D+02-0.4168950426844D+02-0.4157409131410D+02-0.4145790374192D+02 +-0.4134094236120D+02-0.4122320807261D+02-0.4110470185505D+02-0.4098542475146D+02 +-0.4086537785413D+02-0.4074456228924D+02-0.4062297920129D+02-0.4050062973714D+02 +-0.4037751503034D+02-0.4025363618562D+02-0.4012899426406D+02-0.4000359026900D+02 +-0.3987742513315D+02-0.3975049970691D+02-0.3962281474838D+02-0.3949437091516D+02 +-0.3936516875821D+02-0.3923520871793D+02-0.3910449112261D+02-0.3897301618947D+02 +-0.3884078402830D+02-0.3870779464769D+02-0.3857404796414D+02-0.3843954381361D+02 +-0.3830428196587D+02-0.3816826214124D+02-0.3803148402966D+02-0.3789394731206D+02 +-0.3775565168352D+02-0.3761659687828D+02-0.3747678269619D+02-0.3733620903029D+02 +-0.3719487589530D+02-0.3705278345675D+02-0.3690993206030D+02-0.3676632226107D+02 +-0.3662195485267D+02-0.3647683089554D+02-0.3633095174443D+02-0.3618431907471D+02 +-0.3603693490723D+02-0.3588880163150D+02-0.3573992202713D+02-0.3559029928302D+02 +-0.3543993701450D+02-0.3528883927805D+02-0.3513701058344D+02-0.3498445590342D+02 +-0.3483118068064D+02-0.3467719083186D+02-0.3452249274938D+02-0.3436709329968D+02 +-0.3421099981926D+02-0.3405422010765D+02-0.3389676241770D+02-0.3373863544313D+02 +-0.3357984830341D+02-0.3342041052603D+02-0.3326033202627D+02-0.3309962308458D+02 +-0.3293829432155D+02-0.3277635667081D+02-0.3261382134975D+02-0.3245069982837D+02 +-0.3228700379631D+02-0.3212274512827D+02-0.3195793584797D+02-0.3179258809081D+02 +-0.3162671406544D+02-0.3146032601444D+02-0.3129343617427D+02-0.3112605673472D+02 +-0.3095819979818D+02-0.3078987733873D+02-0.3062110116159D+02-0.3045188286286D+02 +-0.3028223379007D+02-0.3011216500361D+02-0.2994168723947D+02-0.2977081087336D+02 +-0.2959954588673D+02-0.2942790183472D+02-0.2925588781658D+02-0.2908351244861D+02 +-0.2891078384006D+02-0.2873770957233D+02-0.2856429668150D+02-0.2839055164480D+02 +-0.2821648037112D+02-0.2804208819580D+02-0.2786737988012D+02-0.2769235961565D+02 +-0.2751703103367D+02-0.2734139721995D+02-0.2716546073510D+02-0.2698922364054D+02 +-0.2681268753047D+02-0.2663585356961D+02-0.2645872253712D+02-0.2628129487648D+02 +-0.2610357075134D+02-0.2592555010731D+02-0.2574723273940D+02-0.2556861836491D+02 +-0.2538970670135D+02-0.2521049754901D+02-0.2503099087751D+02-0.2485118691568D+02 +-0.2467108624386D+02-0.2449068988765D+02-0.2430999941205D+02-0.2412901701445D+02 +-0.2394774561522D+02-0.2376618894405D+02-0.2358435162034D+02-0.2340223922568D+02 +-0.2321985836619D+02-0.2303721672271D+02-0.2285432308647D+02-0.2267118737805D+02 +-0.2248782064750D+02-0.2230423505357D+02-0.2212044382030D+02-0.2193646116966D+02 +-0.2175230222926D+02-0.2156798291493D+02-0.2138351978849D+02-0.2119892989204D+02 +-0.2101423056096D+02-0.2082943921860D+02-0.2064457315700D+02-0.2045964930841D+02 +-0.2027468401369D+02-0.2008969279415D+02-0.1990469013367D+02-0.1971968927855D+02 +-0.1953470206217D+02-0.1934973876100D+02-0.1916480798812D+02-0.1897991662878D+02 +-0.1879506982182D+02-0.1861027098863D+02-0.1842552191004D+02-0.1824082284979D+02 +-0.1805617272151D+02-0.1787156929488D+02-0.1768700943522D+02-0.1750248937004D+02 +-0.1731800497545D+02-0.1713355207483D+02-0.1694912674256D+02-0.1676472560558D+02 +-0.1658034613646D+02-0.1639598693195D+02-0.1621164797222D+02-0.1602733085682D+02 +-0.1584303901410D+02-0.1565877788203D+02-0.1547455505910D+02-0.1529038042467D+02 +-0.1510626622887D+02-0.1492222715279D+02-0.1473828034003D+02-0.1455444540101D+02 +-0.1437074439196D+02-0.1418720177032D+02-0.1400384432868D+02-0.1382070110938D+02 +-0.1363780330173D+02-0.1345518412405D+02-0.1327287869241D+02-0.1309092387812D+02 +-0.1290935815564D+02-0.1272822144280D+02-0.1254755493479D+02-0.1236740093360D+02 +-0.1218780267420D+02-0.1200880414882D+02-0.1183044993057D+02-0.1165278499751D+02 +-0.1147585455814D+02-0.1129970387941D+02-0.1112437811804D+02-0.1094992215587D+02 +-0.1077638044024D+02-0.1060379682978D+02-0.1043221444639D+02-0.1026167553396D+02 +-0.1009222132421D+02-0.9923891910233D+01-0.9756726128054D+01-0.9590761446471D+01 +-0.9426033865617D+01-0.9262577824357D+01-0.9100426116752D+01-0.8939609817729D+01 +-0.8780158218052D+01-0.8622098768646D+01-0.8465457034295D+01-0.8310256656670D+01 +-0.8156519326634D+01-0.8004264765707D+01-0.7853510716560D+01-0.7704272942345D+01 +-0.7556565234673D+01-0.7410399429980D+01-0.7265785434022D+01-0.7122731254209D+01 +-0.6981243039435D+01-0.6841325127084D+01-0.6702980096838D+01-0.6566208830885D+01 +-0.6431010580163D+01-0.6297383036185D+01-0.6165322408043D+01-0.6034823504138D+01 +-0.5905879818191D+01-0.5778483619080D+01-0.5652626044042D+01-0.5528297194766D+01 +-0.5405486235928D+01-0.5284181495678D+01-0.5164370567633D+01-0.5046040413894D+01 +-0.4929177468630D+01-0.4813767741779D+01-0.4699796922401D+01-0.4587250481241D+01 +-0.4476113772065D+01-0.4366372131335D+01-0.4258010975795D+01-0.4151015897561D+01 +-0.4045372756311D+01-0.3941067768180D+01-0.3838087590984D+01-0.3736419405413D+01 +-0.3636050991849D+01-0.3536970802475D+01-0.3439168028378D+01-0.3342632661378D+01 +-0.3247355550317D+01-0.3153328451617D+01-0.3060544073926D+01-0.2968996116725D+01 +-0.2878679302845D+01-0.2789589404854D+01-0.2701723265398D+01-0.2615078811610D+01 +-0.2529655063804D+01-0.2445452138758D+01-0.2362471247971D+01-0.2280714691395D+01 +-0.2200185847215D+01-0.2120889158381D+01-0.2042830116663D+01-0.1966015245105D+01 +-0.1890452079836D+01-0.1816149152241D+01-0.1743115972582D+01-0.1671363016151D+01 +-0.1600901713079D+01-0.1531744442870D+01-0.1463904534744D+01-0.1397396274732D+01 +-0.1332234920444D+01-0.1268436724262D+01-0.1206018965603D+01-0.1144999992725D+01 +-0.1085399274404D+01-0.1027237461625D+01-0.9705364592562D+00-0.9153195075271D+00 +-0.8616112729655D+00-0.8094379483021D+00-0.7588273607481D+00-0.7098090879385D+00 +-0.6624145807668D+00-0.6166772922850D+00-0.5726328118164D+00-0.5303190034268D+00 +-0.4897761479168D+00-0.4510470875291D+00-0.4141773726201D+00-0.3792154095944D+00 +-0.3462126094732D+00-0.3152235365293D+00-0.2863060564890D+00-0.2595214838758D+00 +-0.2349344847072D+00 + 0.0000000000000D+00 + 1010 0.5320628761351D+01 + 0.2468372976668D-04 0.2527086552040D-04 0.2587196443519D-04 0.2648735847393D-04 + 0.2711738748765D-04 0.2776239940291D-04 0.2842275041350D-04 0.2909880517674D-04 + 0.2979093701444D-04 0.3049952811858D-04 0.3122496976196D-04 0.3196766251374D-04 + 0.3272801646016D-04 0.3350645143044D-04 0.3430339722812D-04 0.3511929386779D-04 + 0.3595459181747D-04 0.3680975224677D-04 0.3768524728088D-04 0.3858156026060D-04 + 0.3949918600854D-04 0.4043863110164D-04 0.4140041415011D-04 0.4238506608301D-04 + 0.4339313044060D-04 0.4442516367360D-04 0.4548173544957D-04 0.4656342896650D-04 + 0.4767084127389D-04 0.4880458360138D-04 0.4996528169521D-04 0.5115357616264D-04 + 0.5237012282450D-04 0.5361559307613D-04 0.5489067425684D-04 0.5619607002814D-04 + 0.5753250076092D-04 0.5890070393179D-04 0.6030143452883D-04 0.6173546546692D-04 + 0.6320358801291D-04 0.6470661222087D-04 0.6624536737764D-04 0.6782070245892D-04 + 0.6943348659614D-04 0.7108460955445D-04 0.7277498222191D-04 0.7450553711037D-04 + 0.7627722886814D-04 0.7809103480479D-04 0.7994795542841D-04 0.8184901499554D-04 + 0.8379526207413D-04 0.8578777011980D-04 0.8782763806579D-04 0.8991599092676D-04 + 0.9205398041697D-04 0.9424278558305D-04 0.9648361345169D-04 0.9877769969269D-04 + 0.1011263092977D-03 0.1035307372750D-03 0.1059923093606D-03 0.1085123827464D-03 + 0.1110923468252D-03 0.1137336239536D-03 0.1164376702332D-03 0.1192059763091D-03 + 0.1220400681889D-03 0.1249415080799D-03 0.1279118952463D-03 0.1309528668869D-03 + 0.1340660990333D-03 0.1372533074697D-03 0.1405162486735D-03 0.1438567207796D-03 + 0.1472765645658D-03 0.1507776644628D-03 0.1543619495872D-03 0.1580313947995D-03 + 0.1617880217866D-03 0.1656339001699D-03 0.1695711486400D-03 0.1736019361175D-03 + 0.1777284829419D-03 0.1819530620877D-03 0.1862780004103D-03 0.1907056799201D-03 + 0.1952385390874D-03 0.1998790741780D-03 0.2046298406199D-03 0.2094934544028D-03 + 0.2144725935101D-03 0.2195699993846D-03 0.2247884784296D-03 0.2301309035441D-03 + 0.2356002156951D-03 0.2411994255267D-03 0.2469316150069D-03 0.2527999391137D-03 + 0.2588076275600D-03 0.2649579865603D-03 0.2712544006377D-03 0.2777003344748D-03 + 0.2842993348069D-03 0.2910550323608D-03 0.2979711438385D-03 0.3050514739476D-03 + 0.3122999174802D-03 0.3197204614401D-03 0.3273171872197D-03 0.3350942728289D-03 + 0.3430559951760D-03 0.3512067324021D-03 0.3595509662705D-03 0.3680932846125D-03 + 0.3768383838301D-03 0.3857910714581D-03 0.3949562687860D-03 0.4043390135416D-03 + 0.4139444626376D-03 0.4237778949828D-03 0.4338447143591D-03 0.4441504523661D-03 + 0.4547007714349D-03 0.4655014679126D-03 0.4765584752187D-03 0.4878778670766D-03 + 0.4994658608195D-03 0.5113288207751D-03 0.5234732617288D-03 0.5359058524680D-03 + 0.5486334194107D-03 0.5616629503172D-03 0.5750015980904D-03 0.5886566846641D-03 + 0.6026357049831D-03 0.6169463310756D-03 0.6315964162217D-03 0.6465939992190D-03 + 0.6619473087483D-03 0.6776647678411D-03 0.6937549984519D-03 0.7102268261369D-03 + 0.7270892848430D-03 0.7443516218075D-03 0.7620233025735D-03 0.7801140161216D-03 + 0.7986336801215D-03 0.8175924463072D-03 0.8370007059763D-03 0.8568690956183D-03 + 0.8772085026747D-03 0.8980300714328D-03 0.9193452090569D-03 0.9411655917606D-03 + 0.9635031711228D-03 0.9863701805506D-03 0.1009779141893D-02 0.1033742872210D-02 + 0.1058274490695D-02 0.1083387425765D-02 0.1109095422308D-02 0.1135412549108D-02 + 0.1162353206434D-02 0.1189932133810D-02 0.1218164417968D-02 0.1247065500979D-02 + 0.1276651188576D-02 0.1306937658678D-02 0.1337941470097D-02 0.1369679571458D-02 + 0.1402169310325D-02 0.1435428442533D-02 0.1469475141745D-02 0.1504328009220D-02 + 0.1540006083818D-02 0.1576528852228D-02 0.1613916259440D-02 0.1652188719455D-02 + 0.1691367126243D-02 0.1731472864957D-02 0.1772527823405D-02 0.1814554403785D-02 + 0.1857575534698D-02 0.1901614683427D-02 0.1946695868514D-02 0.1992843672614D-02 + 0.2040083255655D-02 0.2088440368296D-02 0.2137941365700D-02 0.2188613221617D-02 + 0.2240483542801D-02 0.2293580583753D-02 0.2347933261803D-02 0.2403571172542D-02 + 0.2460524605609D-02 0.2518824560838D-02 0.2578502764778D-02 0.2639591687591D-02 + 0.2702124560345D-02 0.2766135392690D-02 0.2831658990953D-02 0.2898730976641D-02 + 0.2967387805373D-02 0.3037666786235D-02 0.3109606101592D-02 0.3183244827345D-02 + 0.3258622953652D-02 0.3335781406128D-02 0.3414762067519D-02 0.3495607799884D-02 + 0.3578362467274D-02 0.3663070958930D-02 0.3749779213013D-02 0.3838534240876D-02 + 0.3929384151879D-02 0.4022378178782D-02 0.4117566703708D-02 0.4215001284695D-02 + 0.4314734682861D-02 0.4416820890172D-02 0.4521315157854D-02 0.4628274025439D-02 + 0.4737755350476D-02 0.4849818338912D-02 0.4964523576163D-02 0.5081933058885D-02 + 0.5202110227468D-02 0.5325119999259D-02 0.5451028802541D-02 0.5579904611273D-02 + 0.5711816980616D-02 0.5846837083264D-02 0.5985037746586D-02 0.6126493490605D-02 + 0.6271280566839D-02 0.6419476998003D-02 0.6571162618612D-02 0.6726419116492D-02 + 0.6885330075217D-02 0.7047981017504D-02 0.7214459449578D-02 0.7384854906523D-02 + 0.7559258998656D-02 0.7737765458926D-02 0.7920470191384D-02 0.8107471320720D-02 + 0.8298869242911D-02 0.8494766676994D-02 0.8695268717993D-02 0.8900482891016D-02 + 0.9110519206560D-02 0.9325490217033D-02 0.9545511074539D-02 0.9770699589934D-02 + 0.1000117629319D-01 0.1023706449509D-01 0.1047849035030D-01 0.1072558292180D-01 + 0.1097847424676D-01 0.1123729940387D-01 0.1150219658211D-01 0.1177330715109D-01 + 0.1205077573288D-01 0.1233475027541D-01 0.1262538212757D-01 0.1292282611579D-01 + 0.1322724062247D-01 0.1353878766595D-01 0.1385763298238D-01 0.1418394610923D-01 + 0.1451790047072D-01 0.1485967346504D-01 0.1520944655352D-01 0.1556740535163D-01 + 0.1593373972207D-01 0.1630864386979D-01 0.1669231643906D-01 0.1708496061266D-01 + 0.1748678421321D-01 0.1789799980662D-01 0.1831882480782D-01 0.1874948158872D-01 + 0.1919019758848D-01 0.1964120542614D-01 0.2010274301565D-01 0.2057505368334D-01 + 0.2105838628792D-01 0.2155299534294D-01 0.2205914114195D-01 0.2257708988625D-01 + 0.2310711381531D-01 0.2364949134001D-01 0.2420450717861D-01 0.2477245249563D-01 + 0.2535362504361D-01 0.2594832930785D-01 0.2655687665415D-01 0.2717958547968D-01 + 0.2781678136689D-01 0.2846879724078D-01 0.2913597352921D-01 0.2981865832675D-01 + 0.3051720756174D-01 0.3123198516688D-01 0.3196336325331D-01 0.3271172228821D-01 + 0.3347745127614D-01 0.3426094794396D-01 0.3506261892960D-01 0.3588287997466D-01 + 0.3672215612085D-01 0.3758088191048D-01 0.3845950159097D-01 0.3935846932342D-01 + 0.4027824939550D-01 0.4121931643846D-01 0.4218215564853D-01 0.4316726301277D-01 + 0.4417514553937D-01 0.4520632149246D-01 0.4626132063168D-01 0.4734068445635D-01 + 0.4844496645449D-01 0.4957473235674D-01 0.5073056039518D-01 0.5191304156720D-01 + 0.5312277990455D-01 0.5436039274748D-01 0.5562651102428D-01 0.5692177953608D-01 + 0.5824685724721D-01 0.5960241758101D-01 0.6098914872130D-01 0.6240775391953D-01 + 0.6385895180781D-01 0.6534347671769D-01 0.6686207900499D-01 0.6841552538072D-01 + 0.7000459924804D-01 0.7163010104553D-01 0.7329284859676D-01 0.7499367746627D-01 + 0.7673344132202D-01 0.7851301230449D-01 0.8033328140240D-01 0.8219515883517D-01 + 0.8409957444234D-01 0.8604747807980D-01 0.8803984002311D-01 0.9007765137799D-01 + 0.9216192449787D-01 0.9429369340886D-01 0.9647401424204D-01 0.9870396567318D-01 + 0.1009846493701D+00 0.1033171904474D+00 0.1057027379295D+00 0.1081424652204D+00 + 0.1106375705828D+00 0.1131892776235D+00 0.1157988357881D+00 0.1184675208634D+00 + 0.1211966354877D+00 0.1239875096696D+00 0.1268415013151D+00 0.1297599967630D+00 + 0.1327444113291D+00 0.1357961898578D+00 0.1389168072841D+00 0.1421077692021D+00 + 0.1453706124439D+00 0.1487069056665D+00 0.1521182499471D+00 0.1556062793879D+00 + 0.1591726617293D+00 0.1628190989724D+00 0.1665473280094D+00 0.1703591212645D+00 + 0.1742562873422D+00 0.1782406716855D+00 0.1823141572426D+00 0.1864786651430D+00 + 0.1907361553818D+00 0.1950886275140D+00 0.1995381213568D+00 0.2040867177009D+00 + 0.2087365390316D+00 0.2134897502572D+00 0.2183485594476D+00 0.2233152185807D+00 + 0.2283920242978D+00 0.2335813186673D+00 0.2388854899576D+00 0.2443069734173D+00 + 0.2498482520643D+00 0.2555118574833D+00 0.2613003706307D+00 0.2672164226475D+00 + 0.2732626956806D+00 0.2794419237104D+00 0.2857568933871D+00 0.2922104448728D+00 + 0.2988054726921D+00 0.3055449265879D+00 0.3124318123843D+00 0.3194691928564D+00 + 0.3266601886046D+00 0.3340079789355D+00 0.3415158027481D+00 0.3491869594244D+00 + 0.3570248097251D+00 0.3650327766893D+00 0.3732143465382D+00 0.3815730695820D+00 + 0.3901125611296D+00 0.3988365024016D+00 0.4077486414443D+00 0.4168527940455D+00 + 0.4261528446518D+00 0.4356527472852D+00 0.4453565264604D+00 0.4552682781006D+00 + 0.4653921704520D+00 0.4757324449959D+00 0.4862934173583D+00 0.4970794782148D+00 + 0.5080950941919D+00 0.5193448087626D+00 0.5308332431355D+00 0.5425650971375D+00 + 0.5545451500871D+00 0.5667782616605D+00 0.5792693727459D+00 0.5920235062874D+00 + 0.6050457681170D+00 0.6183413477724D+00 0.6319155193008D+00 0.6457736420467D+00 + 0.6599211614223D+00 0.6743636096598D+00 0.6891066065437D+00 0.7041558601217D+00 + 0.7195171673928D+00 0.7351964149714D+00 0.7511995797248D+00 0.7675327293837D+00 + 0.7842020231229D+00 0.8012137121115D+00 0.8185741400293D+00 0.8362897435490D+00 + 0.8543670527816D+00 0.8728126916824D+00 0.8916333784167D+00 0.9108359256822D+00 + 0.9304272409858D+00 0.9504143268735D+00 0.9708042811094D+00 0.9916042968031D+00 + 0.1012821662482D+01 0.1034463762105D+01 0.1056538075019D+01 0.1079052175848D+01 + 0.1102013734323D+01 0.1125430515034D+01 0.1149310377120D+01 0.1173661273879D+01 + 0.1198491252301D+01 0.1223808452523D+01 0.1249621107194D+01 0.1275937540757D+01 + 0.1302766168641D+01 0.1330115496355D+01 0.1357994118483D+01 0.1386410717582D+01 + 0.1415374062971D+01 0.1444893009411D+01 0.1474976495670D+01 0.1505633542976D+01 + 0.1536873253340D+01 0.1568704807759D+01 0.1601137464291D+01 0.1634180555986D+01 + 0.1667843488690D+01 0.1702135738695D+01 0.1737066850249D+01 0.1772646432908D+01 + 0.1808884158734D+01 0.1845789759329D+01 0.1883373022700D+01 0.1921643789959D+01 + 0.1960611951835D+01 0.2000287445015D+01 0.2040680248287D+01 0.2081800378504D+01 + 0.2123657886333D+01 0.2166262851817D+01 0.2209625379719D+01 0.2253755594657D+01 + 0.2298663636016D+01 0.2344359652638D+01 0.2390853797285D+01 0.2438156220858D+01 + 0.2486277066386D+01 0.2535226462759D+01 0.2585014518217D+01 0.2635651313578D+01 + 0.2687146895201D+01 0.2739511267690D+01 0.2792754386314D+01 0.2846886149156D+01 + 0.2901916388978D+01 0.2957854864793D+01 0.3014711253149D+01 0.3072495139108D+01 + 0.3131216006930D+01 0.3190883230440D+01 0.3251506063091D+01 0.3313093627702D+01 + 0.3375654905886D+01 0.3439198727138D+01 0.3503733757610D+01 0.3569268488546D+01 + 0.3635811224377D+01 0.3703370070490D+01 0.3771952920644D+01 0.3841567444053D+01 + 0.3912221072111D+01 0.3983920984784D+01 0.4056674096640D+01 0.4130487042541D+01 + 0.4205366162978D+01 0.4281317489055D+01 0.4358346727131D+01 0.4436459243108D+01 + 0.4515660046370D+01 0.4595953773379D+01 0.4677344670935D+01 0.4759836579086D+01 + 0.4843432913708D+01 0.4928136648758D+01 0.5013950298195D+01 0.5100875897585D+01 + 0.5188914985397D+01 0.5278068583987D+01 0.5368337180296D+01 0.5459720706250D+01 + 0.5552218518894D+01 0.5645829380258D+01 0.5740551436965D+01 0.5836382199613D+01 + 0.5933318521916D+01 0.6031356579655D+01 0.6130491849418D+01 0.6230719087181D+01 + 0.6332032306725D+01 0.6434424757927D+01 0.6537888904926D+01 0.6642416404215D+01 + 0.6747998082655D+01 0.6854623915456D+01 0.6962283004147D+01 0.7070963554563D+01 + 0.7180652854875D+01 0.7291337253705D+01 0.7403002138352D+01 0.7515631913169D+01 + 0.7629209978117D+01 0.7743718707555D+01 0.7859139429282D+01 0.7975452403888D+01 + 0.8092636804464D+01 0.8210670696689D+01 0.8329531019373D+01 0.8449193565484D+01 + 0.8569632963718D+01 0.8690822660665D+01 0.8812734903617D+01 0.8935340724090D+01 + 0.9058609922097D+01 0.9182511051251D+01 0.9307011404750D+01 0.9432077002305D+01 + 0.9557672578083D+01 0.9683761569726D+01 0.9810306108515D+01 0.9937267010752D+01 + 0.1006460377043D+02 0.1019227455325D+02 0.1032023619210D+02 0.1044844418402D+02 + 0.1057685268874D+02 0.1070541452893D+02 0.1083408119215D+02 0.1096280283463D+02 + 0.1109152828698D+02 0.1122020506184D+02 0.1134877936364D+02 0.1147719610049D+02 + 0.1160539889829D+02 0.1173333011719D+02 0.1186093087041D+02 0.1198814104553D+02 + 0.1211489932845D+02 0.1224114322979D+02 0.1236680911423D+02 0.1249183223252D+02 + 0.1261614675637D+02 0.1273968581639D+02 0.1286238154295D+02 0.1298416511019D+02 + 0.1310496678323D+02 0.1322471596857D+02 0.1334334126778D+02 0.1346077053461D+02 + 0.1357693093547D+02 0.1369174901336D+02 0.1380515075538D+02 0.1391706166372D+02 + 0.1402740683030D+02 0.1413611101500D+02 0.1424309872756D+02 0.1434829431311D+02 + 0.1445162204144D+02 0.1455300619989D+02 0.1465237118994D+02 0.1474964162748D+02 + 0.1484474244670D+02 0.1493759900761D+02 0.1502813720713D+02 0.1511628359371D+02 + 0.1520196548539D+02 0.1528511109129D+02 0.1536564963637D+02 0.1544351148943D+02 + 0.1551862829425D+02 0.1559093310361D+02 0.1566036051633D+02 0.1572684681685D+02 + 0.1579033011750D+02 0.1585075050307D+02 0.1590805017762D+02 0.1596217361320D+02 + 0.1601306770045D+02 0.1606068190064D+02 0.1610496839907D+02 0.1614588225941D+02 + 0.1618338157893D+02 0.1621742764398D+02 0.1624798508582D+02 0.1627502203610D+02 + 0.1629851028188D+02 0.1631842541976D+02 0.1633474700874D+02 0.1634745872139D+02 + 0.1635654849305D+02 0.1636200866844D+02 0.1636383614545D+02 0.1636203251555D+02 + 0.1635660420031D+02 0.1634756258378D+02 0.1633492413992D+02 0.1631871055489D+02 + 0.1629894884347D+02 0.1627567145929D+02 0.1624891639811D+02 0.1621872729387D+02 + 0.1618515350678D+02 0.1614825020303D+02 0.1610807842550D+02 0.1606470515493D+02 + 0.1601820336114D+02 0.1596865204349D+02 0.1591613626030D+02 0.1586074714658D+02 + 0.1580258191947D+02 0.1574174387104D+02 0.1567834234782D+02 0.1561249271656D+02 + 0.1554431631587D+02 0.1547394039303D+02 0.1540149802590D+02 0.1532712802905D+02 + 0.1525097484422D+02 0.1517318841424D+02 0.1509392404054D+02 0.1501334222356D+02 + 0.1493160848607D+02 0.1484889317903D+02 0.1476537126980D+02 0.1468122211261D+02 + 0.1459662920122D+02 0.1451177990354D+02 0.1442686517844D+02 0.1434207927463D+02 + 0.1425761941177D+02 0.1417368544402D+02 0.1409047950614D+02 0.1400820564254D+02 + 0.1392706941953D+02 0.1384727752126D+02 0.1376903732973D+02 0.1369255648957D+02 + 0.1361804245797D+02 0.1354570204066D+02 0.1347574091463D+02 0.1340836313829D+02 + 0.1334377065017D+02 0.1328216275694D+02 0.1322373561194D+02 0.1316868168517D+02 + 0.1311718922610D+02 0.1306944172038D+02 0.1302561734187D+02 0.1298588840129D+02 + 0.1295042079302D+02 0.1291937344153D+02 0.1289289774887D+02 0.1287113704508D+02 + 0.1285422604301D+02 0.1284229029929D+02 0.1283544568328D+02 0.1283379785577D+02 + 0.1283744175927D+02 0.1284646112172D+02 0.1286092797561D+02 0.1288090219434D+02 + 0.1290643104782D+02 0.1293754877913D+02 0.1297427620437D+02 0.1301662033745D+02 + 0.1306457404184D+02 0.1311811571116D+02 0.1317720898049D+02 0.1324180247023D+02 + 0.1331182956434D+02 0.1338720822462D+02 0.1346784084286D+02 0.1355361413237D+02 + 0.1364439906048D+02 0.1374005082346D+02 0.1384040886526D+02 0.1394529694132D+02 + 0.1405452322864D+02 0.1416788048311D+02 0.1428514624509D+02 0.1440608309401D+02 + 0.1453043895262D+02 0.1465794744139D+02 0.1478832828355D+02 0.1492128776071D+02 + 0.1505651921938D+02 0.1519370362801D+02 0.1533251018434D+02 0.1547259697258D+02 + 0.1561361166965D+02 0.1575519229964D+02 0.1589696803543D+02 0.1603856004619D+02 + 0.1617958238927D+02 0.1631964294483D+02 0.1645834439139D+02 0.1659528522011D+02 + 0.1673006078574D+02 0.1686226439153D+02 0.1699148840570D+02 0.1711732540648D+02 + 0.1723936935273D+02 0.1735721677694D+02 0.1747046799732D+02 0.1757872834527D+02 + 0.1768160940469D+02 0.1777873025927D+02 0.1786971874364D+02 0.1795421269447D+02 + 0.1803186119712D+02 0.1810232582361D+02 0.1816528185749D+02 0.1822041950100D+02 + 0.1826744506009D+02 0.1830608210260D+02 0.1833607258499D+02 0.1835717794294D+02 + 0.1836918014119D+02 0.1837188267788D+02 0.1836511153900D+02 0.1834871609812D+02 + 0.1832256995717D+02 0.1828657172374D+02 0.1824064572072D+02 0.1818474262414D+02 + 0.1811884002518D+02 0.1804294291266D+02 0.1795708407231D+02 0.1786132439955D+02 + 0.1775575312250D+02 0.1764048793254D+02 0.1751567501957D+02 0.1738148900998D+02 + 0.1723813280501D+02 0.1708583731819D+02 0.1692486111033D+02 0.1675548992129D+02 + 0.1657803609797D+02 0.1639283791841D+02 0.1620025881241D+02 0.1600068647917D+02 + 0.1579453190355D+02 0.1558222827213D+02 0.1536422979167D+02 0.1514101041217D+02 + 0.1491306245783D+02 0.1468089516941D+02 0.1444503316198D+02 0.1420601480258D+02 + 0.1396439051286D+02 0.1372072100191D+02 0.1347557543548D+02 0.1322952954766D+02 + 0.1298316370188D+02 0.1273706090840D+02 0.1249180480574D+02 0.1224797761398D+02 + 0.1200615806809D+02 0.1176691933975D+02 0.1153082695652D+02 0.1129843672698D+02 + 0.1107029268134D+02 0.1084692503635D+02 0.1062884819410D+02 0.1041655878378D+02 + 0.1021053375586D+02 0.1001122853771D+02 0.9819075259812D+01 0.9634481061439D+01 + 0.9457826484258D+01 0.9289463962303D+01 0.9129716416119D+01 0.8978875958724D+01 + 0.8837202720333D+01 0.8704923798434D+01 0.8582232339191D+01 0.8469286755556D+01 + 0.8366210086848D+01 0.8273089503857D+01 0.8189975962869D+01 0.8116884011247D+01 + 0.8053791746477D+01 0.8000640929825D+01 0.7957337254954D+01 0.7923750771096D+01 + 0.7899716459558D+01 0.7885034961581D+01 0.7879473454747D+01 0.7882766674397D+01 + 0.7894618075716D+01 0.7914701131408D+01 0.7942660759155D+01 0.7978114872308D+01 + 0.8020656046619D+01 0.8069853295118D+01 0.8125253942655D+01 0.8186385591016D+01 + 0.8252758164989D+01 0.8323866029282D+01 0.8399190165734D+01 0.8478200399878D+01 + 0.8560357665633D+01 0.8645116296593D+01 0.8731926332257D+01 0.8820235827390D+01 + 0.8909493152701D+01 0.8999149275057D+01 0.9088660005580D+01 0.9177488204164D+01 + 0.9265105929268D+01 0.9350996522143D+01 0.9434656615155D+01 0.9515598054311D+01 + 0.9593349726712D+01 0.9667459284287D+01 0.9737494755869D+01 0.9803046040398D+01 + 0.9863726274893D+01 0.9919173071618D+01 0.9969049619776D+01 0.1001304564795D+02 + 0.1005087824444D+02 0.1008229253351D+02 0.1010706220662D+02 0.1012498990846D+02 + 0.1013590747862D+02 0.1013967605060D+02 0.1013618601074D+02 0.1012535682028D+02 + 0.1010713670490D+02 0.1008150221638D+02 0.1004845767207D+02 0.1000803447823D+02 + 0.9960290344000D+01 0.9905308393145D+01 0.9843196181219D+01 0.9774084626146D+01 + 0.9698126860458D+01 0.9615497013712D+01 0.9526388933717D+01 0.9431014855322D+01 + 0.9329604025514D+01 0.9222401293573D+01 0.9109665674888D+01 0.8991668896927D+01 + 0.8868693935619D+01 0.8741033550172D+01 0.8608988824042D+01 0.8472867719423D+01 + 0.8332983652287D+01 0.8189654094548D+01 0.8043199209556D+01 0.7893940526609D+01 + 0.7742199659771D+01 0.7588297075745D+01 0.7432550915104D+01 0.7275275870662D+01 + 0.7116782126294D+01 0.6957374359019D+01 0.6797350806660D+01 0.6637002402956D+01 + 0.6476611981503D+01 0.6316453549487D+01 0.6156791631719D+01 0.5997880685085D+01 + 0.5839964583140D+01 0.5683276170183D+01 0.5528036883841D+01 0.5374456444840D+01 + 0.5222732612361D+01 0.5073051003108D+01 0.4925584971960D+01 0.4780495551875D+01 + 0.4637931450494D+01 0.4498029100761D+01 0.4360912762684D+01 0.4226694673284D+01 + 0.4095475241637D+01 0.3967343285880D+01 0.3842376308975D+01 0.3720640809975D+01 + 0.3602192627575D+01 0.3487077312670D+01 0.3375330526721D+01 0.3266978462738D+01 + 0.3162038285754D+01 0.3060518589740D+01 0.2962419867980D+01 0.2867734994048D+01 + 0.2776449710599D+01 0.2688543123348D+01 0.2603988197704D+01 0.2522752255672D+01 + 0.2444797470796D+01 0.2370081359030D+01 0.2298557263611D+01 0.2230174832142D+01 + 0.2164880484266D+01 0.2102617868461D+01 0.2043328306660D+01 0.1986951225554D+01 + 0.1933424573590D+01 0.1882685222850D+01 0.1834669355131D+01 0.1789312831717D+01 + 0.1746551546451D+01 0.1706321761890D+01 0.1668560428420D+01 0.1633205486362D+01 + 0.1600196151207D+01 0.1569473182217D+01 0.1540979134741D+01 0.1514658596683D+01 + 0.1490458409617D+01 0.1468327875140D+01 0.1448218947092D+01 0.1430086410298D+01 + 0.1413888046563D+01 0.1399584788605D+01 0.1387140862660D+01 0.1376523920458D+01 + 0.1367705161227D+01 0.1360659444354D+01 0.1355365393244D+01 0.1351805490849D+01 + 0.1349966167202D+01 0.1349837879194D+01 0.1351415182623D+01 0.1354696796419D+01 + 0.1359685658670D+01 0.1366388973854D+01 0.1374818250406D+01 0.1384989327364D+01 + 0.1396921780260D+01 0.1410749954201D+01 0.1426605503017D+01 0.1444511519984D+01 + 0.1464497362116D+01 0.1486598739257D+01 0.1510857821806D+01 0.1537323367145D+01 + 0.1566050864767D+01 0.1597102700070D+01 + 7 1010 + 1 0 -1 -555.50780 + 2 0 -1 -64.71890 + 2 1 1 -56.05663 + 2 1 -2 -54.97068 + 3 0 -1 -6.32842 + 3 1 1 -3.75086 + 3 1 -2 -3.61389 + 0.2435967447864D-04 0.2493911637328D-04 0.2553233847070D-04 0.2613966838336D-04 + 0.2676144150856D-04 0.2739800121335D-04 0.2804969902368D-04 0.2871689481819D-04 + 0.2939995702649D-04 0.3009926283216D-04 0.3081519838063D-04 0.3154815899191D-04 + 0.3229854937840D-04 0.3306678386784D-04 0.3385328663161D-04 0.3465849191834D-04 + 0.3548284429317D-04 0.3632679888260D-04 0.3719082162516D-04 0.3807538952806D-04 + 0.3898099092988D-04 0.3990812576953D-04 0.4085730586150D-04 0.4182905517775D-04 + 0.4282391013620D-04 0.4384241989608D-04 0.4488514666025D-04 0.4595266598475D-04 + 0.4704556709562D-04 0.4816445321327D-04 0.4930994188448D-04 0.5048266532233D-04 + 0.5168327075413D-04 0.5291242077765D-04 0.5417079372571D-04 0.5545908403944D-04 + 0.5677800265045D-04 0.5812827737192D-04 0.5951065329903D-04 0.6092589321888D-04 + 0.6237477803009D-04 0.6385810717232D-04 0.6537669906600D-04 0.6693139156243D-04 + 0.6852304240456D-04 0.7015252969866D-04 0.7182075239720D-04 0.7352863079304D-04 + 0.7527710702548D-04 0.7706714559816D-04 0.7889973390924D-04 0.8077588279419D-04 + 0.8269662708131D-04 0.8466302616050D-04 0.8667616456542D-04 0.8873715256941D-04 + 0.9084712679559D-04 0.9300725084129D-04 0.9521871591730D-04 0.9748274150220D-04 + 0.9980057601223D-04 0.1021734974869D-03 0.1046028142910D-03 0.1070898658327D-03 + 0.1096360232996D-03 0.1122426904109D-03 0.1149113041885D-03 0.1176433357456D-03 + 0.1204402910942D-03 0.1233037119719D-03 0.1262351766874D-03 0.1292363009872D-03 + 0.1323087389418D-03 0.1354541838530D-03 0.1386743691833D-03 0.1419710695061D-03 + 0.1453461014797D-03 0.1488013248427D-03 0.1523386434346D-03 0.1559600062390D-03 + 0.1596674084525D-03 0.1634628925784D-03 0.1673485495458D-03 0.1713265198560D-03 + 0.1753989947553D-03 0.1795682174355D-03 0.1838364842630D-03 0.1882061460368D-03 + 0.1926796092760D-03 0.1972593375378D-03 0.2019478527666D-03 0.2067477366748D-03 + 0.2116616321563D-03 0.2166922447329D-03 0.2218423440357D-03 0.2271147653204D-03 + 0.2325124110187D-03 0.2380382523264D-03 0.2436953308289D-03 0.2494867601647D-03 + 0.2554157277283D-03 0.2614854964129D-03 0.2676994063950D-03 0.2740608769597D-03 + 0.2805734083701D-03 0.2872405837800D-03 0.2940660711920D-03 0.3010536254615D-03 + 0.3082070903477D-03 0.3155304006134D-03 0.3230275841735D-03 0.3307027642941D-03 + 0.3385601618443D-03 0.3466040975992D-03 0.3548389945989D-03 0.3632693805613D-03 + 0.3718998903528D-03 0.3807352685162D-03 0.3897803718589D-03 0.3990401721008D-03 + 0.4085197585851D-03 0.4182243410527D-03 0.4281592524815D-03 0.4383299519925D-03 + 0.4487420278239D-03 0.4594012003752D-03 0.4703133253228D-03 0.4814843968082D-03 + 0.4929205507014D-03 0.5046280679410D-03 0.5166133779518D-03 0.5288830621430D-03 + 0.5414438574891D-03 0.5543026601929D-03 0.5674665294363D-03 0.5809426912174D-03 + 0.5947385422782D-03 0.6088616541245D-03 0.6233197771388D-03 0.6381208447909D-03 + 0.6532729779455D-03 0.6687844892720D-03 0.6846638877563D-03 0.7009198833188D-03 + 0.7175613915399D-03 0.7345975384964D-03 0.7520376657102D-03 0.7698913352135D-03 + 0.7881683347317D-03 0.8068786829873D-03 0.8260326351280D-03 0.8456406882813D-03 + 0.8657135872384D-03 0.8862623302713D-03 0.9072981750850D-03 0.9288326449088D-03 + 0.9508775347296D-03 0.9734449176703D-03 0.9965471515168D-03 0.1020196885397D-02 + 0.1044407066616D-02 0.1069190947650D-02 0.1094562093301D-02 0.1120534388021D-02 + 0.1147122043406D-02 0.1174339605865D-02 0.1202201964460D-02 0.1230724358940D-02 + 0.1259922387956D-02 0.1289812017460D-02 0.1320409589312D-02 0.1351731830080D-02 + 0.1383795860040D-02 0.1416619202394D-02 0.1450219792694D-02 0.1484615988490D-02 + 0.1519826579198D-02 0.1555870796197D-02 0.1592768323163D-02 0.1630539306636D-02 + 0.1669204366841D-02 0.1708784608748D-02 0.1749301633398D-02 0.1790777549486D-02 + 0.1833234985207D-02 0.1876697100388D-02 0.1921187598889D-02 0.1966730741295D-02 + 0.2013351357900D-02 0.2061074861992D-02 0.2109927263440D-02 0.2159935182602D-02 + 0.2211125864543D-02 0.2263527193591D-02 0.2317167708219D-02 0.2372076616277D-02 + 0.2428283810570D-02 0.2485819884795D-02 0.2544716149843D-02 0.2605004650479D-02 + 0.2666718182402D-02 0.2729890309698D-02 0.2794555382692D-02 0.2860748556211D-02 + 0.2928505808265D-02 0.2997863959153D-02 0.3068860691013D-02 0.3141534567815D-02 + 0.3215925055809D-02 0.3292072544446D-02 0.3370018367773D-02 0.3449804826320D-02 + 0.3531475209485D-02 0.3615073818426D-02 0.3700645989481D-02 0.3788238118122D-02 + 0.3877897683445D-02 0.3969673273232D-02 0.4063614609571D-02 0.4159772575063D-02 + 0.4258199239628D-02 0.4358947887914D-02 0.4462073047334D-02 0.4567630516730D-02 + 0.4675677395699D-02 0.4786272114574D-02 0.4899474465085D-02 0.5015345631723D-02 + 0.5133948223797D-02 0.5255346308230D-02 0.5379605443090D-02 0.5506792711876D-02 + 0.5636976758580D-02 0.5770227823537D-02 0.5906617780087D-02 0.6046220172054D-02 + 0.6189110252079D-02 0.6335365020799D-02 0.6485063266925D-02 0.6638285608200D-02 + 0.6795114533291D-02 0.6955634444608D-02 0.7119931702090D-02 0.7288094667966D-02 + 0.7460213752514D-02 0.7636381460850D-02 0.7816692440752D-02 0.8001243531558D-02 + 0.8190133814143D-02 0.8383464662023D-02 0.8581339793580D-02 0.8783865325456D-02 + 0.8991149827133D-02 0.9203304376715D-02 0.9420442617956D-02 0.9642680818545D-02 + 0.9870137929674D-02 0.1010293564694D-01 0.1034119847256D-01 0.1058505377899D-01 + 0.1083463187395D-01 0.1109006606681D-01 0.1135149273654D-01 0.1161905140105D-01 + 0.1189288478815D-01 0.1217313890796D-01 0.1245996312699D-01 0.1275351024380D-01 + 0.1305393656632D-01 0.1336140199084D-01 0.1367607008275D-01 0.1399810815900D-01 + 0.1432768737240D-01 0.1466498279770D-01 0.1501017351956D-01 0.1536344272244D-01 + 0.1572497778238D-01 0.1609497036082D-01 0.1647361650040D-01 0.1686111672286D-01 + 0.1725767612901D-01 0.1766350450088D-01 0.1807881640602D-01 0.1850383130403D-01 + 0.1893877365548D-01 0.1938387303296D-01 0.1983936423467D-01 0.2030548740033D-01 + 0.2078248812961D-01 0.2127061760300D-01 0.2177013270533D-01 0.2228129615181D-01 + 0.2280437661682D-01 0.2333964886534D-01 0.2388739388717D-01 0.2444789903399D-01 + 0.2502145815926D-01 0.2560837176109D-01 0.2620894712800D-01 0.2682349848785D-01 + 0.2745234715978D-01 0.2809582170929D-01 0.2875425810662D-01 0.2942799988833D-01 + 0.3011739832225D-01 0.3082281257578D-01 0.3154460988774D-01 0.3228316574366D-01 + 0.3303886405466D-01 0.3381209734008D-01 0.3460326691367D-01 0.3541278307373D-01 + 0.3624106529696D-01 0.3708854243637D-01 0.3795565292304D-01 0.3884284497207D-01 + 0.3975057679255D-01 0.4067931680185D-01 0.4162954384410D-01 0.4260174741306D-01 + 0.4359642787939D-01 0.4461409672247D-01 0.4565527676678D-01 0.4672050242288D-01 + 0.4781031993322D-01 0.4892528762269D-01 0.5006597615407D-01 0.5123296878850D-01 + 0.5242686165094D-01 0.5364826400078D-01 0.5489779850773D-01 0.5617610153287D-01 + 0.5748382341525D-01 0.5882162876379D-01 0.6019019675486D-01 0.6159022143543D-01 + 0.6302241203192D-01 0.6448749326494D-01 0.6598620566980D-01 0.6751930592313D-01 + 0.6908756717544D-01 0.7069177938991D-01 0.7233274968741D-01 0.7401130269780D-01 + 0.7572828091771D-01 0.7748454507475D-01 0.7928097449836D-01 0.8111846749732D-01 + 0.8299794174401D-01 0.8492033466553D-01 0.8688660384176D-01 0.8889772741045D-01 + 0.9095470447936D-01 0.9305855554570D-01 0.9521032292272D-01 0.9741107117379D-01 + 0.9966188755381D-01 0.1019638824582D+00 0.1043181898796D+00 0.1067259678720D+00 + 0.1091883990229D+00 0.1117066909331D+00 0.1142820767046D+00 0.1169158154363D+00 + 0.1196091927281D+00 0.1223635211926D+00 0.1251801409754D+00 0.1280604202839D+00 + 0.1310057559233D+00 0.1340175738428D+00 0.1370973296883D+00 0.1402465093653D+00 + 0.1434666296090D+00 0.1467592385641D+00 0.1501259163724D+00 0.1535682757694D+00 + 0.1570879626901D+00 0.1606866568824D+00 0.1643660725306D+00 0.1681279588871D+00 + 0.1719741009123D+00 0.1759063199247D+00 0.1799264742585D+00 0.1840364599312D+00 + 0.1882382113190D+00 0.1925337018419D+00 0.1969249446567D+00 0.2014139933600D+00 + 0.2060029426988D+00 0.2106939292900D+00 0.2154891323497D+00 0.2203907744292D+00 + 0.2254011221613D+00 0.2305224870137D+00 0.2357572260520D+00 0.2411077427098D+00 + 0.2465764875677D+00 0.2521659591402D+00 0.2578787046703D+00 0.2637173209324D+00 + 0.2696844550418D+00 0.2757828052730D+00 0.2820151218839D+00 0.2883842079483D+00 + 0.2948929201942D+00 0.3015441698497D+00 0.3083409234941D+00 0.3152862039166D+00 + 0.3223830909793D+00 0.3296347224873D+00 0.3370442950625D+00 0.3446150650235D+00 + 0.3523503492697D+00 0.3602535261690D+00 0.3683280364503D+00 0.3765773840984D+00 + 0.3850051372527D+00 0.3936149291076D+00 0.4024104588154D+00 0.4113954923901D+00 + 0.4205738636130D+00 0.4299494749378D+00 0.4395262983957D+00 0.4493083765000D+00 + 0.4592998231487D+00 0.4695048245249D+00 0.4799276399948D+00 0.4905726030015D+00 + 0.5014441219543D+00 0.5125466811132D+00 0.5238848414667D+00 0.5354632416032D+00 + 0.5472865985737D+00 0.5593597087462D+00 0.5716874486499D+00 0.5842747758082D+00 + 0.5971267295602D+00 0.6102484318684D+00 0.6236450881124D+00 0.6373219878666D+00 + 0.6512845056614D+00 0.6655381017260D+00 0.6800883227116D+00 0.6949408023933D+00 + 0.7101012623504D+00 0.7255755126215D+00 0.7413694523349D+00 0.7574890703115D+00 + 0.7739404456384D+00 0.7907297482123D+00 0.8078632392505D+00 0.8253472717668D+00 + 0.8431882910117D+00 0.8613928348743D+00 0.8799675342433D+00 0.8989191133264D+00 + 0.9182543899237D+00 0.9379802756557D+00 0.9581037761406D+00 0.9786319911207D+00 + 0.9995721145344D+00 0.1020931434531D+01 0.1042717333429D+01 0.1064937287605D+01 + 0.1087598867329D+01 0.1110709736519D+01 0.1134277652440D+01 0.1158310465314D+01 + 0.1182816117862D+01 0.1207802644768D+01 0.1233278172054D+01 0.1259250916371D+01 + 0.1285729184201D+01 0.1312721370965D+01 0.1340235960034D+01 0.1368281521640D+01 + 0.1396866711681D+01 0.1426000270419D+01 0.1455691021070D+01 0.1485947868268D+01 + 0.1516779796422D+01 0.1548195867936D+01 0.1580205221308D+01 0.1612817069098D+01 + 0.1646040695751D+01 0.1679885455287D+01 0.1714360768838D+01 0.1749476122038D+01 + 0.1785241062258D+01 0.1821665195676D+01 0.1858758184190D+01 0.1896529742154D+01 + 0.1934989632940D+01 0.1974147665327D+01 0.2014013689692D+01 0.2054597594028D+01 + 0.2095909299749D+01 0.2137958757308D+01 0.2180755941602D+01 0.2224310847169D+01 + 0.2268633483167D+01 0.2313733868133D+01 0.2359622024513D+01 0.2406307972959D+01 + 0.2453801726392D+01 0.2502113283819D+01 0.2551252623899D+01 0.2601229698258D+01 + 0.2652054424547D+01 0.2703736679229D+01 0.2756286290102D+01 0.2809713028541D+01 + 0.2864026601468D+01 0.2919236643026D+01 0.2975352705975D+01 0.3032384252779D+01 + 0.3090340646408D+01 0.3149231140822D+01 0.3209064871154D+01 0.3269850843578D+01 + 0.3331597924862D+01 0.3394314831589D+01 0.3458010119069D+01 0.3522692169908D+01 + 0.3588369182255D+01 0.3655049157706D+01 0.3722739888880D+01 0.3791448946642D+01 + 0.3861183666995D+01 0.3931951137626D+01 0.4003758184099D+01 0.4076611355711D+01 + 0.4150516910996D+01 0.4225480802884D+01 0.4301508663510D+01 0.4378605788682D+01 + 0.4456777122001D+01 0.4536027238638D+01 0.4616360328775D+01 0.4697780180704D+01 + 0.4780290163594D+01 0.4863893209934D+01 0.4948591797644D+01 0.5034387931874D+01 + 0.5121283126493D+01 0.5209278385266D+01 0.5298374182748D+01 0.5388570444880D+01 + 0.5479866529314D+01 0.5572261205475D+01 0.5665752634365D+01 0.5760338348132D+01 + 0.5856015229408D+01 0.5952779490435D+01 0.6050626652009D+01 0.6149551522228D+01 + 0.6249548175095D+01 0.6350609928981D+01 0.6452729324964D+01 0.6555898105079D+01 + 0.6660107190497D+01 0.6765346659657D+01 0.6871605726374D+01 0.6978872717968D+01 + 0.7087135053420D+01 0.7196379221605D+01 0.7306590759624D+01 0.7417754231273D+01 + 0.7529853205690D+01 0.7642870236201D+01 0.7756786839432D+01 0.7871583474691D+01 + 0.7987239523702D+01 0.8103733270704D+01 0.8221041882975D+01 0.8339141391833D+01 + 0.8458006674149D+01 0.8577611434437D+01 0.8697928187566D+01 0.8818928242155D+01 + 0.8940581684696D+01 0.9062857364481D+01 0.9185722879375D+01 0.9309144562508D+01 + 0.9433087469949D+01 0.9557515369414D+01 0.9682390730097D+01 0.9807674713670D+01 + 0.9933327166534D+01 0.1005930661339D+02 0.1018557025221D+02 0.1031207395064D+02 + 0.1043877224399D+02 0.1056561833481D+02 0.1069256409417D+02 0.1081956006469D+02 + 0.1094655546547D+02 0.1107349819888D+02 0.1120033485941D+02 0.1132701074463D+02 + 0.1145346986821D+02 0.1157965497537D+02 0.1170550756046D+02 0.1183096788713D+02 + 0.1195597501085D+02 0.1208046680415D+02 0.1220437998434D+02 0.1232765014409D+02 + 0.1245021178479D+02 0.1257199835271D+02 0.1269294227820D+02 0.1281297501789D+02 + 0.1293202709992D+02 0.1305002817240D+02 0.1316690705505D+02 0.1328259179409D+02 + 0.1339700972051D+02 0.1351008751168D+02 0.1362175125639D+02 0.1373192652336D+02 + 0.1384053843327D+02 0.1394751173429D+02 0.1405277088121D+02 0.1415624011811D+02 + 0.1425784356459D+02 0.1435750530572D+02 0.1445514948543D+02 0.1455070040355D+02 + 0.1464408261642D+02 0.1473522104101D+02 0.1482404106252D+02 0.1491046864549D+02 + 0.1499443044818D+02 0.1507585394041D+02 0.1515466752454D+02 0.1523080065967D+02 + 0.1530418398882D+02 0.1537474946914D+02 0.1544243050480D+02 0.1550716208272D+02 + 0.1556888091065D+02 0.1562752555772D+02 0.1568303659709D+02 0.1573535675064D+02 + 0.1578443103536D+02 0.1583020691137D+02 0.1587263443115D+02 0.1591166638993D+02 + 0.1594725847678D+02 0.1597936942627D+02 0.1600796117030D+02 0.1603299898985D+02 + 0.1605445166629D+02 0.1607229163190D+02 0.1608649511929D+02 0.1609704230929D+02 + 0.1610391747695D+02 0.1610710913528D+02 0.1610661017624D+02 0.1610241800865D+02 + 0.1609453469249D+02 0.1608296706917D+02 0.1606772688743D+02 0.1604883092408D+02 + 0.1602630109955D+02 0.1600016458731D+02 0.1597045391696D+02 0.1593720707044D+02 + 0.1590046757068D+02 0.1586028456242D+02 0.1581671288451D+02 0.1576981313323D+02 + 0.1571965171612D+02 0.1566630089585D+02 0.1560983882345D+02 0.1555034956067D+02 + 0.1548792309069D+02 0.1542265531688D+02 0.1535464804902D+02 0.1528400897670D+02 + 0.1521085162909D+02 0.1513529532113D+02 0.1505746508526D+02 0.1497749158868D+02 + 0.1489551103549D+02 0.1481166505355D+02 0.1472610056567D+02 0.1463896964493D+02 + 0.1455042935371D+02 0.1446064156644D+02 0.1436977277578D+02 0.1427799388205D+02 + 0.1418547996599D+02 0.1409241004464D+02 0.1399896681044D+02 0.1390533635356D+02 + 0.1381170786764D+02 0.1371827333897D+02 0.1362522721945D+02 0.1353276608358D+02 + 0.1344108826973D+02 0.1335039350618D+02 0.1326088252233D+02 0.1317275664559D+02 + 0.1308621738460D+02 0.1300146599930D+02 0.1291870305866D+02 0.1283812798683D+02 + 0.1275993859845D+02 0.1268433062417D+02 0.1261149722724D+02 0.1254162851217D+02 + 0.1247491102673D+02 0.1241152725814D+02 0.1235165512502D+02 0.1229546746602D+02 + 0.1224313152674D+02 0.1219480844609D+02 0.1215065274368D+02 0.1211081180959D+02 + 0.1207542539814D+02 0.1204462512715D+02 0.1201853398425D+02 0.1199726584195D+02 + 0.1198092498311D+02 0.1196960563833D+02 0.1196339153723D+02 0.1196235547496D+02 + 0.1196655889607D+02 0.1197605149698D+02 0.1199087084920D+02 0.1201104204467D+02 + 0.1203657736499D+02 0.1206747597630D+02 0.1210372365119D+02 0.1214529251949D+02 + 0.1219214084924D+02 0.1224421285944D+02 0.1230143856599D+02 0.1236373366213D+02 + 0.1243099943473D+02 0.1250312271755D+02 0.1257997588266D+02 0.1266141687094D+02 + 0.1274728926270D+02 0.1283742238917D+02 0.1293163148547D+02 0.1302971788586D+02 + 0.1313146926144D+02 0.1323665990086D+02 0.1334505103411D+02 0.1345639119940D+02 + 0.1357041665316D+02 0.1368685182276D+02 0.1380540980164D+02 0.1392579288627D+02 + 0.1404769315422D+02 0.1417079308247D+02 0.1429476620491D+02 0.1441927780784D+02 + 0.1454398566216D+02 0.1466854079068D+02 0.1479258826883D+02 0.1491576805712D+02 + 0.1503771586312D+02 0.1515806403110D+02 0.1527644245678D+02 0.1539247952497D+02 + 0.1550580306750D+02 0.1561604133869D+02 0.1572282400562D+02 0.1582578315034D+02 + 0.1592455428084D+02 0.1601877734781D+02 0.1610809776396D+02 0.1619216742250D+02 + 0.1627064571167D+02 0.1634320052164D+02 0.1640950924055D+02 0.1646925973614D+02 + 0.1652215131945D+02 0.1656789568713D+02 0.1660621783886D+02 0.1663685696641D+02 + 0.1665956731090D+02 0.1667411898485D+02 0.1668029875584D+02 0.1667791078824D+02 + 0.1666677734023D+02 0.1664673941274D+02 0.1661765734758D+02 0.1657941137195D+02 + 0.1653190208657D+02 0.1647505089504D+02 0.1640880037223D+02 0.1633311456933D+02 + 0.1624797925391D+02 0.1615340208310D+02 0.1604941270857D+02 0.1593606281199D+02 + 0.1581342606998D+02 0.1568159804788D+02 0.1554069602190D+02 0.1539085872934D+02 + 0.1523224604717D+02 0.1506503859915D+02 0.1488943729242D+02 0.1470566278429D+02 + 0.1451395488075D+02 0.1431457186808D+02 0.1410778977964D+02 0.1389390159991D+02 + 0.1367321640833D+02 0.1344605846569D+02 0.1321276624623D+02 0.1297369141874D+02 + 0.1272919778027D+02 0.1247966014652D+02 0.1222546320277D+02 0.1196700032007D+02 + 0.1170467234098D+02 0.1143888633989D+02 0.1117005436277D+02 0.1089859215159D+02 + 0.1062491785859D+02 0.1034945075584D+02 0.1007260994563D+02 0.9794813077108D+01 + 0.9516475074762D+01 0.9238006884366D+01 0.8959814241824D+01 0.8682296470421D+01 + 0.8405845311795D+01 0.8130843795879D+01 0.7857665154818D+01 0.7586671785732D+01 + 0.7318214266904D+01 0.7052630431740D+01 0.6790244504416D+01 0.6531366301108D+01 + 0.6276290499896D+01 0.6025295982366D+01 0.5778645249391D+01 0.5536583913145D+01 + 0.5299340266943D+01 0.5067124934020D+01 0.4840130595917D+01 0.4618531800584D+01 + 0.4402484849906D+01 0.4192127765799D+01 0.3987580333606D+01 0.3788944221041D+01 + 0.3596303170495D+01 0.3409723262106D+01 0.3229253244615D+01 0.3054924930672D+01 + 0.2886753652927D+01 0.2724738776975D+01 0.2568864266953D+01 0.2419099299399D+01 + 0.2275398920771D+01 0.2137704743939D+01 0.2005945678814D+01 0.1880038692233D+01 + 0.1759889592190D+01 0.1645393831497D+01 0.1536437325992D+01 0.1432897282477D+01 + 0.1334643031667D+01 0.1241536861536D+01 0.1153434846606D+01 0.1070187668896D+01 + 0.9916414264293D+00 0.9176384254366D+00 0.8480179526010D+00 0.7826170239716D+00 + 0.7212711074251D+00 0.6638148158484D+00 0.6100825685074D+00 0.5599092183738D+00 + 0.5131306434933D+00 0.4695843007955D+00 0.4291097410608D+00 0.3915490840787D+00 + 0.3567474533408D+00 0.3245533699196D+00 0.2948191054789D+00 0.2674009946472D+00 + 0.2421597072560D+00 0.2189604811993D+00 0.1976733169098D+00 0.1781731346646D+00 + 0.1603398961286D+00 0.1440586917246D+00 0.1292197955679D+00 0.1157186898355D+00 + 0.1034560605493D+00 0.9233776683249D-01 0.8227478576553D-01 0.7318313500150D-01 + 0.6498377532356D-01 0.5760249532149D-01 0.5096978034411D-01 0.4502066784445D-01 + 0.3969459117912D-01 0.3493521385261D-01 0.3069025611429D-01 0.2691131572099D-01 + 0.2355368457457D-01 0.2057616283173D-01 0.1794087196644D-01 0.1561306814326D-01 + 0.1356095713584D-01 0.1175551189974D-01 0.1017029378364D-01 0.8781278240380D-02 + 0.7566685778930D-02 0.6506818782423D-02 0.5583904706338D-02 0.4781946065498D-02 + 0.4086577519547D-02 0.3484930274472D-02 0.2965503932827D-02 0.2518045847949D-02 + 0.2133437967672D-02 0.1803591090911D-02 0.1521346405898D-02 0.1280384131627D-02 + 0.1075139043982D-02 0.9007226347203D-03 0.7528516246356D-03 0.6277825313670D-03 + 0.5222519770510D-03 0.4334224108175D-03 0.3588329155420D-03 0.2963547667952D-03 + 0.2441514140775D-03 0.2006425597205D-03 0.1644720188157D-03 0.1344790537484D-03 + 0.1096728889615D-03 0.8921012505574D-04 0.7237478589637D-04 0.5856074771911D-04 + 0.4725631501037D-04 0.3803072393045D-04 0.3052237001866D-04 0.2442857267878D-04 + 0.1949670432401D-04 0.1551652693172D-04 0.1231359300866D-04 0.9743581516802D-05 + 0.7687452095568D-05 0.6047312898891D-05 0.4742908521379D-05 0.3708644810053D-05 + 0.2891076851783D-05 0.2246795108696D-05 0.1740652569932D-05 0.1344282931092D-05 + 0.1034866240811D-05 0.7941042092894D-06 0.6073725012207D-06 0.4630218814696D-06 + 0.3518040928892D-06 0.2664018678954D-06 0.2010455540542D-06 0.1512015123658D-06 + 0.1133197665153D-06 0.8463038103355D-07 0.6297976240582D-07 0.4669954326447D-07 + 0.3450195671063D-07 0.2539666355419D-07 0.1862488515998D-07 0.1360744134802D-07 + 0.9903916644742D-08 0.7180697026264D-08 0.5186048878696D-08 0.3730765989042D-08 + 0.2673200930538D-08 0.1907734546841D-08 0.1355930239071D-08 0.9597759906310D-09 + 0.6765429558250D-09 0.4748904173529D-09 0.3319275419526D-09 0.2310064382143D-09 + 0.1600717060210D-09 0.1104315733458D-09 0.7584698840596D-10 0.5185942453945D-10 + 0.3529708336795D-10 0.2391381030183D-10 0.1612628139440D-10 0.1082358456368D-10 + 0.7229916313253D-11 0.4806150196125D-11 0.3179356272177D-11 0.2092668854785D-11 + 0.1370570963903D-11 0.8930031561315D-12 0.5788971547988D-12 0.3733534997014D-12 + 0.2395425432780D-12 0.1528839164789D-12 0.9705786818471D-13 0.6128621565006D-13 + 0.3848857551444D-13 0.2403880630309D-13 + LSMS: xx z= 27. xvalws= 3.67937 + 27. 2.34846 10. 0.6742449217584D+00 + -0.1113096740000D+02 0.8631327458937D+00 1001 +-0.5399712524868D+02-0.5399709043769D+02-0.5399705520516D+02-0.5399701954600D+02 +-0.5399698345503D+02-0.5399694692702D+02-0.5399690995668D+02-0.5399687253866D+02 +-0.5399683466753D+02-0.5399679633781D+02-0.5399675754394D+02-0.5399671828030D+02 +-0.5399667854120D+02-0.5399663832088D+02-0.5399659761353D+02-0.5399655641322D+02 +-0.5399651471401D+02-0.5399647250984D+02-0.5399642979460D+02-0.5399638656210D+02 +-0.5399634280608D+02-0.5399629852019D+02-0.5399625369802D+02-0.5399620833307D+02 +-0.5399616241877D+02-0.5399611594847D+02-0.5399606891543D+02-0.5399602131284D+02 +-0.5399597313380D+02-0.5399592437133D+02-0.5399587501835D+02-0.5399582506773D+02 +-0.5399577451222D+02-0.5399572334450D+02-0.5399567155714D+02-0.5399561914265D+02 +-0.5399556609343D+02-0.5399551240180D+02-0.5399545805997D+02-0.5399540306006D+02 +-0.5399534739411D+02-0.5399529105405D+02-0.5399523403171D+02-0.5399517631884D+02 +-0.5399511790706D+02-0.5399505878792D+02-0.5399499895284D+02-0.5399493839315D+02 +-0.5399487710008D+02-0.5399481506474D+02-0.5399475227815D+02-0.5399468873120D+02 +-0.5399462441468D+02-0.5399455931928D+02-0.5399449343555D+02-0.5399442675395D+02 +-0.5399435926482D+02-0.5399429095837D+02-0.5399422182471D+02-0.5399415185381D+02 +-0.5399408103553D+02-0.5399400935960D+02-0.5399393681565D+02-0.5399386339315D+02 +-0.5399378908147D+02-0.5399371386982D+02-0.5399363774732D+02-0.5399356070292D+02 +-0.5399348272546D+02-0.5399340380364D+02-0.5399332392601D+02-0.5399324308100D+02 +-0.5399316125689D+02-0.5399307844182D+02-0.5399299462379D+02-0.5399290979063D+02 +-0.5399282393007D+02-0.5399273702965D+02-0.5399264907677D+02-0.5399256005868D+02 +-0.5399246996248D+02-0.5399237877511D+02-0.5399228648335D+02-0.5399219307382D+02 +-0.5399209853298D+02-0.5399200284712D+02-0.5399190600237D+02-0.5399180798470D+02 +-0.5399170877988D+02-0.5399160837354D+02-0.5399150675112D+02-0.5399140389789D+02 +-0.5399129979893D+02-0.5399119443916D+02-0.5399108780329D+02-0.5399097987587D+02 +-0.5399087064125D+02-0.5399076008359D+02-0.5399064818685D+02-0.5399053493482D+02 +-0.5399042031107D+02-0.5399030429898D+02-0.5399018688174D+02-0.5399006804231D+02 +-0.5398994776346D+02-0.5398982602775D+02-0.5398970281753D+02-0.5398957811493D+02 +-0.5398945190186D+02-0.5398932416003D+02-0.5398919487091D+02-0.5398906401575D+02 +-0.5398893157557D+02-0.5398879753117D+02-0.5398866186309D+02-0.5398852455168D+02 +-0.5398838557702D+02-0.5398824491894D+02-0.5398810255704D+02-0.5398795847069D+02 +-0.5398781263898D+02-0.5398766504075D+02-0.5398751565461D+02-0.5398736445887D+02 +-0.5398721143162D+02-0.5398705655065D+02-0.5398689979349D+02-0.5398674113741D+02 +-0.5398658055939D+02-0.5398641803614D+02-0.5398625354408D+02-0.5398608705934D+02 +-0.5398591855778D+02-0.5398574801494D+02-0.5398557540610D+02-0.5398540070619D+02 +-0.5398522388988D+02-0.5398504493152D+02-0.5398486380513D+02-0.5398468048444D+02 +-0.5398449494284D+02-0.5398430715342D+02-0.5398411708892D+02-0.5398392472177D+02 +-0.5398373002405D+02-0.5398353296751D+02-0.5398333352354D+02-0.5398313166322D+02 +-0.5398292735724D+02-0.5398272057594D+02-0.5398251128933D+02-0.5398229946703D+02 +-0.5398208507828D+02-0.5398186809198D+02-0.5398164847664D+02-0.5398142620036D+02 +-0.5398120123090D+02-0.5398097353558D+02-0.5398074308137D+02-0.5398050983480D+02 +-0.5398027376202D+02-0.5398003482875D+02-0.5397979300031D+02-0.5397954824159D+02 +-0.5397930051704D+02-0.5397904979072D+02-0.5397879602620D+02-0.5397853918665D+02 +-0.5397827923476D+02-0.5397801613281D+02-0.5397774984257D+02-0.5397748032537D+02 +-0.5397720754209D+02-0.5397693145310D+02-0.5397665201831D+02-0.5397636919713D+02 +-0.5397608294848D+02-0.5397579323080D+02-0.5397550000200D+02-0.5397520321949D+02 +-0.5397490284015D+02-0.5397459882035D+02-0.5397429111594D+02-0.5397397968219D+02 +-0.5397366447388D+02-0.5397334544521D+02-0.5397302254982D+02-0.5397269574080D+02 +-0.5397236497066D+02-0.5397203019135D+02-0.5397169135421D+02-0.5397134841000D+02 +-0.5397100130889D+02-0.5397065000043D+02-0.5397029443357D+02-0.5396993455663D+02 +-0.5396957031730D+02-0.5396920166264D+02-0.5396882853906D+02-0.5396845089232D+02 +-0.5396806866752D+02-0.5396768180910D+02-0.5396729026082D+02-0.5396689396574D+02 +-0.5396649286625D+02-0.5396608690403D+02-0.5396567602004D+02-0.5396526015454D+02 +-0.5396483924705D+02-0.5396441323636D+02-0.5396398206052D+02-0.5396354565680D+02 +-0.5396310396174D+02-0.5396265691109D+02-0.5396220443982D+02-0.5396174648210D+02 +-0.5396128297132D+02-0.5396081384003D+02-0.5396033901999D+02-0.5395985844211D+02 +-0.5395937203646D+02-0.5395887973225D+02-0.5395838145786D+02-0.5395787714075D+02 +-0.5395736670754D+02-0.5395685008393D+02-0.5395632719473D+02-0.5395579796381D+02 +-0.5395526231415D+02-0.5395472016776D+02-0.5395417144570D+02-0.5395361606809D+02 +-0.5395305395406D+02-0.5395248502176D+02-0.5395190918833D+02-0.5395132636993D+02 +-0.5395073648166D+02-0.5395013943761D+02-0.5394953515081D+02-0.5394892353324D+02 +-0.5394830449580D+02-0.5394767794831D+02-0.5394704379947D+02-0.5394640195690D+02 +-0.5394575232705D+02-0.5394509481527D+02-0.5394442932574D+02-0.5394375576145D+02 +-0.5394307402424D+02-0.5394238401473D+02-0.5394168563234D+02-0.5394097877525D+02 +-0.5394026334041D+02-0.5393953922350D+02-0.5393880631893D+02-0.5393806451982D+02 +-0.5393731371800D+02-0.5393655380395D+02-0.5393578466684D+02-0.5393500619447D+02 +-0.5393421827329D+02-0.5393342078832D+02-0.5393261362323D+02-0.5393179666022D+02 +-0.5393096978008D+02-0.5393013286215D+02-0.5392928578426D+02-0.5392842842278D+02 +-0.5392756065256D+02-0.5392668234690D+02-0.5392579337759D+02-0.5392489361481D+02 +-0.5392398292719D+02-0.5392306118173D+02-0.5392212824381D+02-0.5392118397717D+02 +-0.5392022824387D+02-0.5391926090430D+02-0.5391828181712D+02-0.5391729083928D+02 +-0.5391628782597D+02-0.5391527263062D+02-0.5391424510484D+02-0.5391320509846D+02 +-0.5391215245944D+02-0.5391108703390D+02-0.5391000866606D+02-0.5390891719824D+02 +-0.5390781247084D+02-0.5390669432229D+02-0.5390556258905D+02-0.5390441710557D+02 +-0.5390325770428D+02-0.5390208421555D+02-0.5390089646767D+02-0.5389969428685D+02 +-0.5389847749713D+02-0.5389724592044D+02-0.5389599937648D+02-0.5389473768277D+02 +-0.5389346065460D+02-0.5389216810497D+02-0.5389085984460D+02-0.5388953568190D+02 +-0.5388819542291D+02-0.5388683887130D+02-0.5388546582834D+02-0.5388407609285D+02 +-0.5388266946120D+02-0.5388124572724D+02-0.5387980468230D+02-0.5387834611516D+02 +-0.5387686981199D+02-0.5387537555635D+02-0.5387386312914D+02-0.5387233230857D+02 +-0.5387078287012D+02-0.5386921458653D+02-0.5386762722773D+02-0.5386602056086D+02 +-0.5386439435015D+02-0.5386274835698D+02-0.5386108233977D+02-0.5385939605400D+02 +-0.5385768925211D+02-0.5385596168354D+02-0.5385421309463D+02-0.5385244322860D+02 +-0.5385065182552D+02-0.5384883862228D+02-0.5384700335251D+02-0.5384514574660D+02 +-0.5384326553159D+02-0.5384136243120D+02-0.5383943616573D+02-0.5383748645205D+02 +-0.5383551300355D+02-0.5383351553011D+02-0.5383149373801D+02-0.5382944732996D+02 +-0.5382737600498D+02-0.5382527945841D+02-0.5382315738183D+02-0.5382100946305D+02 +-0.5381883538602D+02-0.5381663483081D+02-0.5381440747356D+02-0.5381215298642D+02 +-0.5380987103751D+02-0.5380756129087D+02-0.5380522340641D+02-0.5380285703986D+02 +-0.5380046184270D+02-0.5379803746215D+02-0.5379558354106D+02-0.5379309971792D+02 +-0.5379058562674D+02-0.5378804089706D+02-0.5378546515383D+02-0.5378285801743D+02 +-0.5378021910353D+02-0.5377754802311D+02-0.5377484438232D+02-0.5377210778252D+02 +-0.5376933782012D+02-0.5376653408660D+02-0.5376369616841D+02-0.5376082364690D+02 +-0.5375791609829D+02-0.5375497309357D+02-0.5375199419849D+02-0.5374897897342D+02 +-0.5374592697337D+02-0.5374283774784D+02-0.5373971084082D+02-0.5373654579069D+02 +-0.5373334213015D+02-0.5373009938618D+02-0.5372681707992D+02-0.5372349472666D+02 +-0.5372013183571D+02-0.5371672791037D+02-0.5371328244785D+02-0.5370979493916D+02 +-0.5370626486909D+02-0.5370269171610D+02-0.5369907495226D+02-0.5369541404313D+02 +-0.5369170844776D+02-0.5368795761854D+02-0.5368416100117D+02-0.5368031803452D+02 +-0.5367642815063D+02-0.5367249077455D+02-0.5366850532429D+02-0.5366447121077D+02 +-0.5366038783766D+02-0.5365625460134D+02-0.5365207089084D+02-0.5364783608768D+02 +-0.5364354956584D+02-0.5363921069165D+02-0.5363481882368D+02-0.5363037331271D+02 +-0.5362587350156D+02-0.5362131872504D+02-0.5361670830985D+02-0.5361204157449D+02 +-0.5360731782915D+02-0.5360253637562D+02-0.5359769650718D+02-0.5359279750854D+02 +-0.5358783865568D+02-0.5358281921581D+02-0.5357773844720D+02-0.5357259559915D+02 +-0.5356738991185D+02-0.5356212061625D+02-0.5355678693400D+02-0.5355138807732D+02 +-0.5354592324891D+02-0.5354039164179D+02-0.5353479243927D+02-0.5352912481478D+02 +-0.5352338793176D+02-0.5351758094357D+02-0.5351170299340D+02-0.5350575321407D+02 +-0.5349973072802D+02-0.5349363464711D+02-0.5348746407255D+02-0.5348121809476D+02 +-0.5347489579326D+02-0.5346849623656D+02-0.5346201848202D+02-0.5345546157572D+02 +-0.5344882455238D+02-0.5344210643519D+02-0.5343530623571D+02-0.5342842295376D+02 +-0.5342145557725D+02-0.5341440308208D+02-0.5340726443203D+02-0.5340003857859D+02 +-0.5339272446086D+02-0.5338532100544D+02-0.5337782712622D+02-0.5337024172436D+02 +-0.5336256368805D+02-0.5335479189247D+02-0.5334692519959D+02-0.5333896245806D+02 +-0.5333090250310D+02-0.5332274415633D+02-0.5331448622563D+02-0.5330612750506D+02 +-0.5329766677465D+02-0.5328910280033D+02-0.5328043433373D+02-0.5327166011210D+02 +-0.5326277885815D+02-0.5325378927990D+02-0.5324469007055D+02-0.5323547990835D+02 +-0.5322615745646D+02-0.5321672136280D+02-0.5320717025994D+02-0.5319750276491D+02 +-0.5318771747911D+02-0.5317781298817D+02-0.5316778786177D+02-0.5315764065355D+02 +-0.5314736990094D+02-0.5313697412505D+02-0.5312645183051D+02-0.5311580150534D+02 +-0.5310502162082D+02-0.5309411063136D+02-0.5308306697435D+02-0.5307188907005D+02 +-0.5306057532142D+02-0.5304912411403D+02-0.5303753381589D+02-0.5302580277738D+02 +-0.5301392933104D+02-0.5300191179152D+02-0.5298974845539D+02-0.5297743760107D+02 +-0.5296497748867D+02-0.5295236635990D+02-0.5293960243790D+02-0.5292668392719D+02 +-0.5291360901350D+02-0.5290037586368D+02-0.5288698262560D+02-0.5287342742801D+02 +-0.5285970838045D+02-0.5284582357316D+02-0.5283177107694D+02-0.5281754894309D+02 +-0.5280315520331D+02-0.5278858786958D+02-0.5277384493410D+02-0.5275892436916D+02 +-0.5274382412713D+02-0.5272854214031D+02-0.5271307632088D+02-0.5269742456085D+02 +-0.5268158473194D+02-0.5266555468557D+02-0.5264933225277D+02-0.5263291524412D+02 +-0.5261630144974D+02-0.5259948863917D+02-0.5258247456141D+02-0.5256525694481D+02 +-0.5254783349710D+02-0.5253020190532D+02-0.5251235983583D+02-0.5249430493425D+02 +-0.5247603482552D+02-0.5245754711382D+02-0.5243883938264D+02-0.5241990919473D+02 +-0.5240075409214D+02-0.5238137159627D+02-0.5236175920785D+02-0.5234191440699D+02 +-0.5232183465324D+02-0.5230151738561D+02-0.5228096002266D+02-0.5226015996252D+02 +-0.5223911458301D+02-0.5221782124167D+02-0.5219627727588D+02-0.5217448000295D+02 +-0.5215242672019D+02-0.5213011470509D+02-0.5210754121536D+02-0.5208470348909D+02 +-0.5206159874492D+02-0.5203822418213D+02-0.5201457698081D+02-0.5199065430204D+02 +-0.5196645328806D+02-0.5194197106241D+02-0.5191720473017D+02-0.5189215137813D+02 +-0.5186680807500D+02-0.5184117187164D+02-0.5181523980126D+02-0.5178900887970D+02 +-0.5176247610560D+02-0.5173563846075D+02-0.5170849291027D+02-0.5168103640292D+02 +-0.5165326587137D+02-0.5162517823252D+02-0.5159677038775D+02-0.5156803922327D+02 +-0.5153898161041D+02-0.5150959440596D+02-0.5147987445250D+02-0.5144981857876D+02 +-0.5141942359993D+02-0.5138868631806D+02-0.5135760352241D+02-0.5132617198984D+02 +-0.5129438848514D+02-0.5126224976149D+02-0.5122975256081D+02-0.5119689361418D+02 +-0.5116366964224D+02-0.5113007735559D+02-0.5109611345524D+02-0.5106177463301D+02 +-0.5102705757198D+02-0.5099195894687D+02-0.5095647542456D+02-0.5092060366442D+02 +-0.5088434031887D+02-0.5084768203371D+02-0.5081062544864D+02-0.5077316719766D+02 +-0.5073530390954D+02-0.5069703220822D+02-0.5065834871332D+02-0.5061925004050D+02 +-0.5057973280195D+02-0.5053979360678D+02-0.5049942906147D+02-0.5045863577030D+02 +-0.5041741033572D+02-0.5037574935880D+02-0.5033364943958D+02-0.5029110717751D+02 +-0.5024811917178D+02-0.5020468202173D+02-0.5016079232714D+02-0.5011644668866D+02 +-0.5007164170804D+02-0.5002637398851D+02-0.4998064013504D+02-0.4993443675463D+02 +-0.4988776045656D+02-0.4984060785265D+02-0.4979297555745D+02-0.4974486018846D+02 +-0.4969625836630D+02-0.4964716671485D+02-0.4959758186141D+02-0.4954750043678D+02 +-0.4949691907534D+02-0.4944583441511D+02-0.4939424309777D+02-0.4934214176867D+02 +-0.4928952707677D+02-0.4923639567462D+02-0.4918274421825D+02-0.4912856936704D+02 +-0.4907386778358D+02-0.4901863613352D+02-0.4896287108531D+02-0.4890656931000D+02 +-0.4884972748097D+02-0.4879234227359D+02-0.4873441036496D+02-0.4867592843350D+02 +-0.4861689315858D+02-0.4855730122014D+02-0.4849714929822D+02-0.4843643407252D+02 +-0.4837515222191D+02-0.4831330042394D+02-0.4825087535433D+02-0.4818787368641D+02 +-0.4812429209060D+02-0.4806012723384D+02-0.4799537577902D+02-0.4793003438444D+02 +-0.4786409970321D+02-0.4779756838272D+02-0.4773043706407D+02-0.4766270238151D+02 +-0.4759436096199D+02-0.4752540942457D+02-0.4745584438004D+02-0.4738566243045D+02 +-0.4731486016872D+02-0.4724343417832D+02-0.4717138103299D+02-0.4709869729654D+02 +-0.4702537952267D+02-0.4695142425494D+02-0.4687682802682D+02-0.4680158736177D+02 +-0.4672569877352D+02-0.4664915876640D+02-0.4657196383584D+02-0.4649411046895D+02 +-0.4641559514537D+02-0.4633641433808D+02-0.4625656451459D+02-0.4617604213814D+02 +-0.4609484366919D+02-0.4601296556708D+02-0.4593040429186D+02-0.4584715630636D+02 +-0.4576321807855D+02-0.4567858608401D+02-0.4559325680872D+02-0.4550722675212D+02 +-0.4542049243032D+02-0.4533305037969D+02-0.4524489716062D+02-0.4515602936158D+02 +-0.4506644360344D+02-0.4497613654400D+02-0.4488510488289D+02-0.4479334536658D+02 +-0.4470085479372D+02-0.4460763002063D+02-0.4451366796711D+02-0.4441896562231D+02 +-0.4432352005082D+02-0.4422732839896D+02-0.4413038790106D+02-0.4403269588587D+02 +-0.4393424978305D+02-0.4383504712952D+02-0.4373508557591D+02-0.4363436289271D+02 +-0.4353287697643D+02-0.4343062585535D+02-0.4332760769510D+02-0.4322382080379D+02 +-0.4311926363671D+02-0.4301393480047D+02-0.4290783305661D+02-0.4280095732442D+02 +-0.4269330668310D+02-0.4258488037297D+02-0.4247567779584D+02-0.4236569851435D+02 +-0.4225494225025D+02-0.4214340888156D+02-0.4203109843860D+02-0.4191801109879D+02 +-0.4180414718017D+02-0.4168950713385D+02-0.4157409153504D+02-0.4145790107304D+02 +-0.4134093654002D+02-0.4122319881872D+02-0.4110468886928D+02-0.4098540771505D+02 +-0.4086535642787D+02-0.4074453611267D+02-0.4062294789181D+02-0.4050059288920D+02 +-0.4037747221457D+02-0.4025358694800D+02-0.4012893812507D+02-0.4000352672277D+02 +-0.3987735364659D+02-0.3975041971886D+02-0.3962272566876D+02-0.3949427212406D+02 +-0.3936505960500D+02-0.3923508852032D+02-0.3910435916574D+02-0.3897287172489D+02 +-0.3884062627293D+02-0.3870762278279D+02-0.3857386113413D+02-0.3843934112490D+02 +-0.3830406248558D+02-0.3816802489582D+02-0.3803122800349D+02-0.3789367144586D+02 +-0.3775535487273D+02-0.3761627797128D+02-0.3747644049237D+02-0.3733584227804D+02 +-0.3719448328985D+02-0.3705236363780D+02-0.3690948360953D+02-0.3676584369951D+02 +-0.3662144463780D+02-0.3647628741831D+02-0.3633037332601D+02-0.3618370396305D+02 +-0.3603628127339D+02-0.3588810756584D+02-0.3573918553513D+02-0.3558951828096D+02 +-0.3543910932485D+02-0.3528796262457D+02-0.3513608258605D+02-0.3498347407274D+02 +-0.3483014241221D+02-0.3467609340008D+02-0.3452133330109D+02-0.3436586884740D+02 +-0.3420970723400D+02-0.3405285611144D+02-0.3389532357559D+02-0.3373711815484D+02 +-0.3357824879446D+02-0.3341872483847D+02-0.3325855600882D+02-0.3309775238227D+02 +-0.3293632436483D+02-0.3277428266402D+02-0.3261163825897D+02-0.3244840236863D+02 +-0.3228458641809D+02-0.3212020200329D+02-0.3195526085419D+02-0.3178977479659D+02 +-0.3162375571292D+02-0.3145721550193D+02-0.3129016603777D+02-0.3112261912843D+02 +-0.3095458647393D+02-0.3078607962439D+02-0.3061710993825D+02-0.3044768854091D+02 +-0.3027782628398D+02-0.3010753370545D+02-0.2993682099105D+02-0.2976569793704D+02 +-0.2959417391471D+02-0.2942225783695D+02-0.2924995812704D+02-0.2907728269016D+02 +-0.2890423888765D+02-0.2873083351460D+02-0.2855707278089D+02-0.2838296229598D+02 +-0.2820850705793D+02-0.2803371144670D+02-0.2785857922220D+02-0.2768311352734D+02 +-0.2750731689626D+02-0.2733119126818D+02-0.2715473800691D+02-0.2697795792643D+02 +-0.2680085132266D+02-0.2662341801155D+02-0.2644565737375D+02-0.2626756840593D+02 +-0.2608914977868D+02-0.2591039990125D+02-0.2573131699278D+02-0.2555189916018D+02 +-0.2537214448223D+02-0.2519205109970D+02-0.2501161731107D+02-0.2483084167333D+02 +-0.2464972310714D+02-0.2446826100561D+02-0.2428645534563D+02-0.2410430680077D+02 +-0.2392181685406D+02-0.2373898790949D+02-0.2355582340015D+02-0.2337232789113D+02 +-0.2318850717498D+02-0.2300436835724D+02-0.2281991992958D+02-0.2263517182758D+02 +-0.2245013547053D+02-0.2226482378026D+02-0.2207925117624D+02-0.2189343354431D+02 +-0.2170738817669D+02-0.2152113368152D+02-0.2133468986051D+02-0.2114807755445D+02 +-0.2096131845686D+02-0.2077443489756D+02-0.2058744959890D+02-0.2040038540886D+02 +-0.2021326501645D+02-0.2002611065618D+02-0.1983894380948D+02-0.1965178491183D+02 +-0.1946465307500D+02-0.1927756583388D+02-0.1909053892720D+02-0.1890358612066D+02 +-0.1871671907986D+02-0.1852994729858D+02-0.1834327808631D+02-0.1815671661641D+02 +-0.1797026603436D+02-0.1778392762281D+02-0.1759770101877D+02-0.1741158447576D+02 +-0.1722557516303D+02-0.1703966949256D+02-0.1685386346441D+02-0.1666815302070D+02 +-0.1648253439916D+02-0.1629700447765D+02-0.1611156110232D+02-0.1592620339293D+02 +-0.1574093202031D+02-0.1555574945224D+02-0.1537066016494D+02-0.1518567081892D+02 +-0.1500079039852D+02-0.1481603031567D+02-0.1463140447884D+02-0.1444692932890D+02 +-0.1426262384380D+02-0.1407850951465D+02-0.1389461029541D+02-0.1371095252907D+02 +-0.1352756485274D+02-0.1334447808437D+02-0.1316172509353D+02-0.1297934065859D+02 +-0.1279736131270D+02-0.1261582518051D+02-0.1243477180762D+02-0.1225424198474D+02 +-0.1207427756790D+02-0.1189492129657D+02-0.1171621661087D+02-0.1153820746914D+02 +-0.1136093816723D+02-0.1118445316025D+02-0.1100879688803D+02-0.1083401360494D+02 +-0.1066014721497D+02-0.1048724111272D+02-0.1031533803093D+02-0.1014447989516D+02 +-0.9974707686009D+01-0.9806061309517D+01-0.9638579475852D+01-0.9472299586869D+01 +-0.9307257632662D+01-0.9143488097398D+01-0.8981023874587D+01-0.8819896191937D+01 +-0.8660134545867D+01-0.8501766645729D+01-0.8344818367740D+01-0.8189313718582D+01 +-0.8035274808596D+01-0.7882721834453D+01-0.7731673071147D+01-0.7582144873130D+01 +-0.7434151684372D+01-0.7287706057082D+01-0.7142818678834D+01-0.6999498407764D+01 +-0.6857752315530D+01-0.6717585737659D+01-0.6579002330907D+01-0.6442004137234D+01 +-0.6306591653963D+01-0.6172763909695D+01-0.6040518545507D+01-0.5909851900984D+01 +-0.5780759104575D+01-0.5653234167792D+01-0.5527270082724D+01-0.5402858922365D+01 +-0.5279991943190D+01-0.5158659689475D+01-0.5038852098763D+01-0.4920558607957D+01 +-0.4803768259422D+01-0.4688469806561D+01-0.4574651818236D+01-0.4462302781460D+01 +-0.4351411201747D+01-0.4241965700510D+01-0.4133955108899D+01-0.4027368557447D+01 +-0.3922195560929D+01-0.3818426097809D+01-0.3716050683681D+01-0.3615060438119D+01 +-0.3515447144385D+01-0.3417203301463D+01-0.3320322167948D+01-0.3224797797372D+01 +-0.3130625064627D+01-0.3037799683217D+01-0.2946318213220D+01-0.2856178059917D+01 +-0.2767377463229D+01-0.2679915478238D+01-0.2593791947274D+01-0.2509007464215D+01 +-0.2425563331864D+01-0.2343461513463D+01-0.2262704579629D+01-0.2183295652153D+01 +-0.2105238346315D+01-0.2028536713505D+01-0.1953195186042D+01-0.1879218526171D+01 +-0.1806611781226D+01-0.1735380246927D+01-0.1665529440650D+01-0.1597065086404D+01 +-0.1529993112984D+01-0.1464319666552D+01-0.1400051138557D+01-0.1337194209602D+01 +-0.1275755909474D+01-0.1215743693230D+01-0.1157165532855D+01-0.1100030023698D+01 +-0.1044346504599D+01-0.9901251903797D+00-0.9373773151625D+00-0.8861152848937D+00 +-0.8363528373250D+00-0.7881052077305D+00-0.7413892986592D+00-0.6962238521183D+00 +-0.6526296227042D+00-0.6106295503626D+00-0.5702489316337D+00-0.5315155884368D+00 +-0.4944600336406D+00-0.4591156328628D+00-0.4255187621242D+00-0.3937089611511D+00 +-0.3637290822680D+00-0.3356254349482D+00-0.3094479261921D+00-0.2852501969912D+00 +-0.2630895198551D+00 + 0.0000000000000D+00 + 1010 0.3679371238649D+01 + 0.2468537873489D-04 0.2527255275160D-04 0.2587369083758D-04 0.2648912497738D-04 + 0.2711919504427D-04 0.2776424898751D-04 0.2842464302416D-04 0.2910074183533D-04 + 0.2979291876721D-04 0.3050155603673D-04 0.3122704494220D-04 0.3196978607892D-04 + 0.3273018955988D-04 0.3350867524168D-04 0.3430567295589D-04 0.3512162274579D-04 + 0.3595697510876D-04 0.3681219124449D-04 0.3768774330893D-04 0.3858411467440D-04 + 0.3950180019575D-04 0.4044130648293D-04 0.4140315217995D-04 0.4238786825047D-04 + 0.4339599827016D-04 0.4442809872602D-04 0.4548473932270D-04 0.4656650329620D-04 + 0.4767398773490D-04 0.4880780390829D-04 0.4996857760335D-04 0.5115694946908D-04 + 0.5237357536903D-04 0.5361912674227D-04 0.5489429097289D-04 0.5619977176823D-04 + 0.5753628954610D-04 0.5890458183116D-04 0.6030540366065D-04 0.6173952799980D-04 + 0.6320774616698D-04 0.6471086826904D-04 0.6624972364683D-04 0.6782516133133D-04 + 0.6943805051060D-04 0.7108928100771D-04 0.7277976377007D-04 0.7451043137024D-04 + 0.7628223851872D-04 0.7809616258873D-04 0.7995320415351D-04 0.8185438753630D-04 + 0.8380076137335D-04 0.8579339919020D-04 0.8783339999164D-04 0.8992188886559D-04 + 0.9206001760135D-04 0.9424896532229D-04 0.9648993913373D-04 0.9878417478595D-04 + 0.1011329373530D-03 0.1035375219274D-03 0.1059992543316D-03 0.1085194918458D-03 + 0.1110996239534D-03 0.1137410731036D-03 0.1164452954926D-03 0.1192137818629D-03 + 0.1220480583213D-03 0.1249496871769D-03 0.1279202677980D-03 0.1309614374899D-03 + 0.1340748723937D-03 0.1372622884049D-03 0.1405254421157D-03 0.1438661317778D-03 + 0.1472861982890D-03 0.1507875262027D-03 0.1543720447611D-03 0.1580417289534D-03 + 0.1617986005979D-03 0.1656447294511D-03 0.1695822343413D-03 0.1736132843306D-03 + 0.1777400999029D-03 0.1819649541808D-03 0.1862901741712D-03 0.1907181420396D-03 + 0.1952512964152D-03 0.1998921337262D-03 0.2046432095671D-03 0.2095071400980D-03 + 0.2144866034765D-03 0.2195843413242D-03 0.2248031602270D-03 0.2301459332709D-03 + 0.2356156016145D-03 0.2412151760980D-03 0.2469477388902D-03 0.2528164451743D-03 + 0.2588245248737D-03 0.2649752844180D-03 0.2712721085509D-03 0.2777184621806D-03 + 0.2843178922733D-03 0.2910740297922D-03 0.2979905916814D-03 0.3050713828962D-03 + 0.3123202984825D-03 0.3197413257035D-03 0.3273385462174D-03 0.3351161383064D-03 + 0.3430783791571D-03 0.3512296471956D-03 0.3595744244774D-03 0.3681172991322D-03 + 0.3768629678680D-03 0.3858162385327D-03 0.3949820327361D-03 0.4043653885342D-03 + 0.4139714631755D-03 0.4238055359125D-03 0.4338730108790D-03 0.4441794200349D-03 + 0.4547304261798D-03 0.4655318260384D-03 0.4765895534166D-03 0.4879096824332D-03 + 0.4994984308265D-03 0.5113621633383D-03 0.5235073951783D-03 0.5359407955685D-03 + 0.5486691913709D-03 0.5616995708012D-03 0.5750390872279D-03 0.5886950630617D-03 + 0.6026749937354D-03 0.6169865517767D-03 0.6316375909772D-03 0.6466361506579D-03 + 0.6619904600355D-03 0.6777089426899D-03 0.6938002211370D-03 0.7102731215078D-03 + 0.7271366783373D-03 0.7444001394651D-03 0.7620729710507D-03 0.7801648627053D-03 + 0.7986857327449D-03 0.8176457335640D-03 0.8370552571371D-03 0.8569249406464D-03 + 0.8772656722423D-03 0.8980885969376D-03 0.9194051226395D-03 0.9412269263218D-03 + 0.9635659603417D-03 0.9864344589030D-03 0.1009844944670D-02 0.1033810235537D-02 + 0.1058343451552D-02 0.1083458022006D-02 0.1109167692683D-02 0.1135486533282D-02 + 0.1162428945009D-02 0.1190009668351D-02 0.1218243791018D-02 0.1247146756089D-02 + 0.1276734370327D-02 0.1307022812702D-02 0.1338028643105D-02 0.1369768811266D-02 + 0.1402260665877D-02 0.1435521963930D-02 0.1469570880271D-02 0.1504426017369D-02 + 0.1540106415326D-02 0.1576631562098D-02 0.1614021403975D-02 0.1652296356286D-02 + 0.1691477314362D-02 0.1731585664749D-02 0.1772643296679D-02 0.1814672613810D-02 + 0.1857696546234D-02 0.1901738562764D-02 0.1946822683504D-02 0.1992973492711D-02 + 0.2040216151952D-02 0.2088576413561D-02 0.2138080634416D-02 0.2188755790026D-02 + 0.2240629488941D-02 0.2293729987501D-02 0.2348086204920D-02 0.2403727738716D-02 + 0.2460684880499D-02 0.2518988632123D-02 0.2578670722200D-02 0.2639763623010D-02 + 0.2702300567781D-02 0.2766315568380D-02 0.2831843433398D-02 0.2898919786664D-02 + 0.2967581086167D-02 0.3037864643424D-02 0.3109808643287D-02 0.3183452164199D-02 + 0.3258835198924D-02 0.3335998675739D-02 0.3414984480119D-02 0.3495835476913D-02 + 0.3578595533026D-02 0.3663309540624D-02 0.3750023440858D-02 0.3838784248141D-02 + 0.3929640074966D-02 0.4022640157299D-02 0.4117834880541D-02 0.4215275806089D-02 + 0.4315015698494D-02 0.4417108553239D-02 0.4521609625145D-02 0.4628575457427D-02 + 0.4738063911399D-02 0.4850134196863D-02 0.4964846903180D-02 0.5082264031043D-02 + 0.5202449024969D-02 0.5325466806535D-02 0.5451383808346D-02 0.5580268008786D-02 + 0.5712188967546D-02 0.5847217861952D-02 0.5985427524114D-02 0.6126892478908D-02 + 0.6271688982815D-02 0.6419895063629D-02 0.6571590561063D-02 0.6726857168259D-02 + 0.6885778474234D-02 0.7048440007272D-02 0.7214929279294D-02 0.7385335831214D-02 + 0.7559751279310D-02 0.7738269362635D-02 0.7920985991483D-02 0.8107999296930D-02 + 0.8299409681490D-02 0.8495319870886D-02 0.8695834966983D-02 0.8901062501890D-02 + 0.9111112493262D-02 0.9326097500836D-02 0.9546132684211D-02 0.9771335861912D-02 + 0.1000182757176D-01 0.1023773113256D-01 0.1047917270719D-01 0.1072628136703D-01 + 0.1097918915785D-01 0.1123803116712D-01 0.1150294559283D-01 0.1177407381379D-01 + 0.1205156046146D-01 0.1233555349344D-01 0.1262620426844D-01 0.1292366762299D-01 + 0.1322810194978D-01 0.1353966927770D-01 0.1385853535369D-01 0.1418486972625D-01 + 0.1451884583089D-01 0.1486064107736D-01 0.1521043693878D-01 0.1556841904271D-01 + 0.1593477726421D-01 0.1630970582086D-01 0.1669340336987D-01 0.1708607310723D-01 + 0.1748792286910D-01 0.1789916523521D-01 0.1832001763466D-01 0.1875070245381D-01 + 0.1919144714663D-01 0.1964248434731D-01 0.2010405198527D-01 0.2057639340268D-01 + 0.2105975747443D-01 0.2155439873066D-01 0.2206057748185D-01 0.2257855994661D-01 + 0.2310861838213D-01 0.2365103121742D-01 0.2420608318925D-01 0.2477406548111D-01 + 0.2535527586490D-01 0.2595001884574D-01 0.2655860580968D-01 0.2718135517461D-01 + 0.2781859254419D-01 0.2847065086504D-01 0.2913787058722D-01 0.2982059982791D-01 + 0.3051919453862D-01 0.3123401867575D-01 0.3196544437461D-01 0.3271385212718D-01 + 0.3347963096330D-01 0.3426317863572D-01 0.3506490180884D-01 0.3588521625127D-01 + 0.3672454703240D-01 0.3758332872281D-01 0.3846200559881D-01 0.3936103185107D-01 + 0.4028087179744D-01 0.4122200010005D-01 0.4218490198671D-01 0.4317007347675D-01 + 0.4417802161131D-01 0.4520926468826D-01 0.4626433250170D-01 0.4734376658615D-01 + 0.4844812046567D-01 0.4957795990768D-01 0.5073386318187D-01 0.5191642132408D-01 + 0.5312623840534D-01 0.5436393180606D-01 0.5563013249556D-01 0.5692548531692D-01 + 0.5825064927733D-01 0.5960629784391D-01 0.6099311924524D-01 0.6241181677853D-01 + 0.6386310912260D-01 0.6534773065676D-01 0.6686643178565D-01 0.6841997927012D-01 + 0.7000915656427D-01 0.7163476415874D-01 0.7329761993028D-01 0.7499855949776D-01 + 0.7673843658465D-01 0.7851812338815D-01 0.8033851095488D-01 0.8220050956349D-01 + 0.8410504911393D-01 0.8605307952386D-01 0.8804557113195D-01 0.9008351510831D-01 + 0.9216792387222D-01 0.9429983151700D-01 0.9648029424237D-01 0.9871039079425D-01 + 0.1009912229120D+00 0.1033239157835D+00 0.1057096185077D+00 0.1081495045651D+00 + 0.1106447722960D+00 0.1131966453868D+00 0.1158063733645D+00 0.1184752320986D+00 + 0.1212045243121D+00 0.1239955801001D+00 0.1268497574568D+00 0.1297684428111D+00 + 0.1327530515707D+00 0.1358050286741D+00 0.1389258491519D+00 0.1421170186961D+00 + 0.1453800742387D+00 0.1487165845386D+00 0.1521281507770D+00 0.1556164071622D+00 + 0.1591830215430D+00 0.1628296960310D+00 0.1665581676314D+00 0.1703702088834D+00 + 0.1742676285089D+00 0.1782522720709D+00 0.1823260226398D+00 0.1864908014699D+00 + 0.1907485686836D+00 0.1951013239658D+00 0.1995511072660D+00 0.2040999995101D+00 + 0.2087501233212D+00 0.2135036437482D+00 0.2183627690043D+00 0.2233297512136D+00 + 0.2284068871665D+00 0.2335965190835D+00 0.2389010353879D+00 0.2443228714863D+00 + 0.2498645105581D+00 0.2555284843520D+00 0.2613173739919D+00 0.2672338107897D+00 + 0.2732804770662D+00 0.2794601069793D+00 0.2857754873598D+00 0.2922294585543D+00 + 0.2988249152750D+00 0.3055648074562D+00 0.3124521411171D+00 0.3194899792313D+00 + 0.3266814426015D+00 0.3340297107407D+00 0.3415380227578D+00 0.3492096782488D+00 + 0.3570480381922D+00 0.3650565258492D+00 0.3732386276668D+00 0.3815978941855D+00 + 0.3901379409484D+00 0.3988624494149D+00 0.4077751678739D+00 0.4168799123607D+00 + 0.4261805675735D+00 0.4356810877905D+00 0.4453854977871D+00 0.4552978937519D+00 + 0.4654224442010D+00 0.4757633908906D+00 0.4863250497260D+00 0.4971118116671D+00 + 0.5081281436297D+00 0.5193785893809D+00 0.5308677704286D+00 0.5426003869036D+00 + 0.5545812184342D+00 0.5668151250107D+00 0.5793070478410D+00 0.5920620101945D+00 + 0.6050851182333D+00 0.6183815618309D+00 0.6319566153756D+00 0.6458156385583D+00 + 0.6599640771435D+00 0.6744074637211D+00 0.6891514184389D+00 0.7042016497134D+00 + 0.7195639549185D+00 0.7352442210488D+00 0.7512484253578D+00 0.7675826359683D+00 + 0.7842530124530D+00 0.8012658063845D+00 0.8186273618524D+00 0.8363441159450D+00 + 0.8544225991948D+00 0.8728694359847D+00 0.8916913449135D+00 0.9108951391185D+00 + 0.9304877265523D+00 0.9504761102125D+00 0.9708673883210D+00 0.9916687544512D+00 + 0.1012887497600D+01 0.1034531002203D+01 0.1056606748089D+01 0.1079122310371D+01 + 0.1102085359271D+01 0.1125503659881D+01 0.1149385071847D+01 0.1173737548978D+01 + 0.1198569138783D+01 0.1223887981922D+01 0.1249702311572D+01 0.1276020452715D+01 + 0.1302850821320D+01 0.1330201923441D+01 0.1358082354217D+01 0.1386500796761D+01 + 0.1415466020958D+01 0.1444986882136D+01 0.1475072319637D+01 0.1505731355269D+01 + 0.1536973091627D+01 0.1568806710298D+01 0.1601241469932D+01 0.1634286704180D+01 + 0.1667951819489D+01 0.1702246292761D+01 0.1737179668853D+01 0.1772761557939D+01 + 0.1809001632700D+01 0.1845909625360D+01 0.1883495324555D+01 0.1921768572024D+01 + 0.1960739259131D+01 0.2000417323197D+01 0.2040812743650D+01 0.2081935537982D+01 + 0.2123795757502D+01 0.2166403482899D+01 0.2209768819580D+01 0.2253901892809D+01 + 0.2298812842618D+01 0.2344511818498D+01 0.2391008973857D+01 0.2438314460246D+01 + 0.2486438421338D+01 0.2535390986670D+01 0.2585182265126D+01 0.2635822338165D+01 + 0.2687321252787D+01 0.2739689014233D+01 0.2792935578404D+01 0.2847070844015D+01 + 0.2902104644452D+01 0.2958046739349D+01 0.3014906805870D+01 0.3072694429686D+01 + 0.3131419095659D+01 0.3191090178211D+01 0.3251716931383D+01 0.3313308478575D+01 + 0.3375873801967D+01 0.3439421731619D+01 0.3503960934233D+01 0.3569499901592D+01 + 0.3636046938655D+01 0.3703610151326D+01 0.3772197433866D+01 0.3841816455977D+01 + 0.3912474649527D+01 0.3984179194940D+01 0.4056937007226D+01 0.4130754721672D+01 + 0.4205638679174D+01 0.4281594911226D+01 0.4358629124553D+01 0.4436746685405D+01 + 0.4515952603489D+01 0.4596251515573D+01 0.4677647668734D+01 0.4760144903276D+01 + 0.4843746635304D+01 0.4928455838978D+01 0.5014275028431D+01 0.5101206239379D+01 + 0.5189251010407D+01 0.5278410363959D+01 0.5368684787031D+01 0.5460074211573D+01 + 0.5552577994620D+01 0.5646194898155D+01 0.5740923068724D+01 0.5836760016805D+01 + 0.5933702595960D+01 0.6031746981775D+01 0.6130888650605D+01 0.6231122358152D+01 + 0.6332442117882D+01 0.6434841179312D+01 0.6538312006181D+01 0.6642846254534D+01 + 0.6748434750738D+01 0.6855067469465D+01 0.6962733511658D+01 0.7071421082515D+01 + 0.7181117469522D+01 0.7291809020566D+01 0.7403481122163D+01 0.7516118177825D+01 + 0.7629703586625D+01 0.7744219721978D+01 0.7859647910686D+01 0.7975968412289D+01 + 0.8093160398769D+01 0.8211201934646D+01 0.8330069957512D+01 0.8449740259060D+01 + 0.8570187466659D+01 0.8691385025509D+01 0.8813305181461D+01 0.8935918964529D+01 + 0.9059196173168D+01 0.9183105359379D+01 0.9307613814689D+01 0.9432687557081D+01 + 0.9558291318940D+01 0.9684388536067D+01 0.9810941337852D+01 0.9937910538648D+01 + 0.1006525563044D+02 0.1019293477689D+02 0.1032090480878D+02 0.1044912122098D+02 + 0.1057753817102D+02 0.1070610847932D+02 0.1083478363115D+02 0.1096351378038D+02 + 0.1109224775524D+02 0.1122093306594D+02 0.1134951591444D+02 0.1147794120636D+02 + 0.1160615256505D+02 0.1173409234809D+02 0.1186170166608D+02 0.1198892040402D+02 + 0.1211568724510D+02 0.1224193969731D+02 0.1236761412261D+02 0.1249264576905D+02 + 0.1261696880561D+02 0.1274051636017D+02 0.1286322056034D+02 0.1298501257756D+02 + 0.1310582267417D+02 0.1322558025393D+02 0.1334421391569D+02 0.1346165151048D+02 + 0.1357782020197D+02 0.1369264653048D+02 0.1380605648042D+02 0.1391797555133D+02 + 0.1402832883251D+02 0.1413704108121D+02 0.1424403680459D+02 0.1434924034526D+02 + 0.1445257597046D+02 0.1455396796507D+02 0.1465334072811D+02 0.1475061887305D+02 + 0.1484572733171D+02 0.1493859146175D+02 0.1502913715778D+02 0.1511729096595D+02 + 0.1520298020204D+02 0.1528613307293D+02 0.1536667880136D+02 0.1544454775391D+02 + 0.1551967157213D+02 0.1559198330660D+02 0.1566141755389D+02 0.1572791059617D+02 + 0.1579140054346D+02 0.1585182747818D+02 0.1590913360192D+02 0.1596326338419D+02 + 0.1601416371297D+02 0.1606178404670D+02 0.1610607656767D+02 0.1614699633641D+02 + 0.1618450144669D+02 0.1621855318121D+02 0.1624911616717D+02 0.1627615853184D+02 + 0.1629965205749D+02 0.1631957233544D+02 0.1633589891892D+02 0.1634861547413D+02 + 0.1635770992938D+02 0.1636317462164D+02 0.1636500644026D+02 0.1636320696723D+02 + 0.1635778261370D+02 0.1634874475218D+02 0.1633610984393D+02 0.1631989956106D+02 + 0.1630014090291D+02 0.1627686630606D+02 0.1625011374755D+02 0.1621992684073D+02 + 0.1618635492320D+02 0.1614945313633D+02 0.1610928249582D+02 0.1606590995269D+02 + 0.1601940844421D+02 0.1596985693422D+02 0.1591734044229D+02 0.1586195006117D+02 + 0.1580378296203D+02 0.1574294238694D+02 0.1567953762810D+02 0.1561368399332D+02 + 0.1554550275729D+02 0.1547512109811D+02 0.1540267201871D+02 0.1532829425278D+02 + 0.1525213215462D+02 0.1517433557279D+02 0.1509505970709D+02 0.1501446494854D+02 + 0.1493271670216D+02 0.1484998519233D+02 0.1476644525048D+02 0.1468227608498D+02 + 0.1459766103314D+02 0.1451278729530D+02 0.1442784565093D+02 0.1434303015682D+02 + 0.1425853782753D+02 0.1417456829814D+02 0.1409132346959D+02 0.1400900713695D+02 + 0.1392782460079D+02 0.1384798226228D+02 0.1376968720229D+02 0.1369314674518D+02 + 0.1361856800780D+02 0.1354615743446D+02 0.1347612031855D+02 0.1340866031167D+02 + 0.1334397892114D+02 0.1328227499692D+02 0.1322374420887D+02 0.1316857851558D+02 + 0.1311696562583D+02 0.1306908845401D+02 0.1302512457077D+02 0.1298524565034D+02 + 0.1294961691582D+02 0.1291839658416D+02 0.1289173531215D+02 0.1286977564532D+02 + 0.1285265147107D+02 0.1284048747815D+02 0.1283339862385D+02 0.1283148961110D+02 + 0.1283485437695D+02 0.1284357559463D+02 0.1285772419081D+02 0.1287735888020D+02 + 0.1290252571927D+02 0.1293325768114D+02 0.1296957425348D+02 0.1301148106140D+02 + 0.1305896951738D+02 0.1311201649983D+02 0.1317058406254D+02 0.1323461917659D+02 + 0.1330405350663D+02 0.1337880322325D+02 0.1345876885320D+02 0.1354383516899D+02 + 0.1363387111947D+02 0.1372872980291D+02 0.1382824848388D+02 0.1393224865518D+02 + 0.1404053614619D+02 0.1415290127843D+02 0.1426911906944D+02 0.1438894948576D+02 + 0.1451213774556D+02 0.1463841467164D+02 0.1476749709493D+02 0.1489908830886D+02 + 0.1503287857459D+02 0.1516854567691D+02 0.1530575553062D+02 0.1544416283671D+02 + 0.1558341178791D+02 0.1572313682246D+02 0.1586296342527D+02 0.1600250897507D+02 + 0.1614138363614D+02 0.1627919129300D+02 0.1641553052610D+02 0.1654999562658D+02 + 0.1668217764780D+02 0.1681166549111D+02 0.1693804702345D+02 0.1706091022361D+02 + 0.1717984435455D+02 0.1729444115821D+02 0.1740429606972D+02 0.1750900944734D+02 + 0.1760818781451D+02 0.1770144511015D+02 0.1778840394324D+02 0.1786869684760D+02 + 0.1794196753267D+02 0.1800787212589D+02 0.1806608040236D+02 0.1811627699722D+02 + 0.1815816259627D+02 0.1819145510011D+02 0.1821589075734D+02 0.1823122526190D+02 + 0.1823723481026D+02 0.1823371711344D+02 0.1822049235956D+02 0.1819740412225D+02 + 0.1816432021041D+02 0.1812113345509D+02 0.1806776242911D+02 0.1800415209529D+02 + 0.1793027437947D+02 0.1784612866435D+02 0.1775174220059D+02 0.1764717043195D+02 + 0.1753249723108D+02 0.1740783504328D+02 0.1727332493549D+02 0.1712913654830D+02 + 0.1697546794894D+02 0.1681254538358D+02 0.1664062292774D+02 0.1645998203370D+02 + 0.1627093097468D+02 0.1607380418529D+02 0.1586896149884D+02 0.1565678728216D+02 + 0.1543768946897D+02 0.1521209849363D+02 0.1498046612718D+02 0.1474326421841D+02 + 0.1450098334281D+02 0.1425413136306D+02 0.1400323190499D+02 0.1374882275349D+02 + 0.1349145417330D+02 0.1323168716012D+02 0.1297009162778D+02 0.1270724453793D+02 + 0.1244372797878D+02 0.1218012720016D+02 0.1191702861224D+02 0.1165501775584D+02 + 0.1139467725241D+02 0.1113658474228D+02 0.1088131081953D+02 0.1062941697283D+02 + 0.1038145354086D+02 0.1013795769182D+02 0.9899451436123D+01 0.9666439681548D+01 + 0.9439408340127D+01 0.9218822495908D+01 0.9005124642567D+01 0.8798732999703D+01 + 0.8600039916347D+01 0.8409410369919D+01 0.8227180568462D+01 0.8053656663662D+01 + 0.7889113581542D+01 0.7733793977285D+01 0.7587907320054D+01 0.7451629113042D+01 + 0.7325100253346D+01 0.7208426535569D+01 0.7101678302331D+01 0.7004890244146D+01 + 0.6918061350343D+01 0.6841155011945D+01 0.6774099276662D+01 0.6716787255329D+01 + 0.6669077678369D+01 0.6630795600081D+01 0.6601733247767D+01 0.6581651011985D+01 + 0.6570278573442D+01 0.6567316161365D+01 0.6572435937451D+01 0.6585283498849D+01 + 0.6605479492982D+01 0.6632621336406D+01 0.6666285029324D+01 0.6706027056842D+01 + 0.6751386367557D+01 0.6801886419626D+01 0.6857037284069D+01 0.6916337794697D+01 + 0.6979277733816D+01 0.7045340042577D+01 0.7114003044759D+01 0.7184742672603D+01 + 0.7257034683379D+01 0.7330356855366D+01 0.7404191152085D+01 0.7478025843826D+01 + 0.7551357575782D+01 0.7623693372476D+01 0.7694552568568D+01 0.7763468656641D+01 + 0.7829991043113D+01 0.7893686704060D+01 0.7954141733375D+01 0.8010962776460D+01 + 0.8063778343379D+01 0.8112239996232D+01 0.8156023406340D+01 0.8194829277691D+01 + 0.8228384133971D+01 0.8256440967412D+01 0.8278779748535D+01 0.8295207796782D+01 + 0.8305560012870D+01 0.8309698974564D+01 0.8307514898345D+01 0.8298925470271D+01 + 0.8283875550033D+01 0.8262336752911D+01 0.8234306914981D+01 0.8199809447504D+01 + 0.8158892586958D+01 0.8111628547628D+01 0.8058112584105D+01 0.7998461971346D+01 + 0.7932814910237D+01 0.7861329366823D+01 0.7784181853486D+01 0.7701566160459D+01 + 0.7613692046055D+01 0.7520783893987D+01 0.7423079346015D+01 0.7320827918048D+01 + 0.7214289607596D+01 0.7103733500238D+01 0.6989436382495D+01 0.6871681368135D+01 + 0.6750756544624D+01 0.6626953646018D+01 0.6500566758181D+01 0.6371891061809D+01 + 0.6241221618254D+01 0.6108852202708D+01 0.5975074188831D+01 0.5840175488441D+01 + 0.5704439549401D+01 0.5568144414378D+01 0.5431561842698D+01 0.5294956497033D+01 + 0.5158585196271D+01 0.5022696235423D+01 0.4887528773083D+01 0.4753312286505D+01 + 0.4620266094021D+01 0.4488598944173D+01 0.4358508670569D+01 0.4230181911212D+01 + 0.4103793890722D+01 0.3979508263648D+01 0.3857477016796D+01 0.3737840428320D+01 + 0.3620727081090D+01 0.3506253927744D+01 0.3394526404620D+01 0.3285638591705D+01 + 0.3179673415600D+01 0.3076702892436D+01 0.2976788407633D+01 0.2879981029325D+01 + 0.2786321852301D+01 0.2695842369265D+01 0.2608564866288D+01 0.2524502839306D+01 + 0.2443661428622D+01 0.2366037868378D+01 0.2291621948107D+01 0.2220396483500D+01 + 0.2152337793665D+01 0.2087416182270D+01 0.2025596420049D+01 0.1966838226322D+01 + 0.1911096747285D+01 0.1858323028993D+01 0.1808464483085D+01 0.1761465343479D+01 + 0.1717267112395D+01 0.1675808994242D+01 0.1637028316045D+01 0.1600860933277D+01 + 0.1567241620065D+01 0.1536104442963D+01 0.1507383117565D+01 0.1481011347437D+01 + 0.1456923144949D+01 0.1435053133745D+01 0.1415336832689D+01 0.1397710921295D+01 + 0.1382113486687D+01 0.1368484252308D+01 0.1356764788627D+01 0.1346898706205D+01 + 0.1338831831543D+01 0.1332512366173D+01 0.1327891029500D+01 0.1324921185956D+01 + 0.1323558956988D+01 0.1323763318457D+01 0.1325496183973D+01 0.1328722474675D+01 + 0.1333410175927D+01 0.1339530381321D+01 0.1347057324328D+01 0.1355968397823D+01 + 0.1366244161602D+01 0.1377868337903D+01 0.1390827794764D+01 0.1405112516906D+01 + 0.1420715563621D+01 0.1437633012959D+01 0.1455863891236D+01 0.1475410086655D+01 + 0.1496275639693D+01 0.1518600887895D+01 0.1542525173910D+01 0.1568055741509D+01 + 0.1595203879994D+01 0.1623984939332D+01 0.1654418359318D+01 0.1686527712904D+01 + 0.1720340763792D+01 0.1755889538333D+01 + 7 1010 + 1 0 -1 -555.50733 + 2 0 -1 -64.64303 + 2 1 1 -55.99929 + 2 1 -2 -54.91173 + 3 0 -1 -6.18276 + 3 1 1 -3.60926 + 3 1 -2 -3.47348 + 0.2436277404722D-04 0.2494228967094D-04 0.2553558725084D-04 0.2614299444108D-04 + 0.2676484668163D-04 0.2740148738323D-04 0.2805326811656D-04 0.2872054880604D-04 + 0.2940369792817D-04 0.3010309271454D-04 0.3081911935968D-04 0.3155217323392D-04 + 0.3230265910115D-04 0.3307099134184D-04 0.3385759418132D-04 0.3466290192350D-04 + 0.3548735919006D-04 0.3633142116543D-04 0.3719555384742D-04 0.3808023430393D-04 + 0.3898595093569D-04 0.3991320374521D-04 0.4086250461210D-04 0.4183437757500D-04 + 0.4282935912009D-04 0.4384799847645D-04 0.4489085791849D-04 0.4595851307549D-04 + 0.4705155324846D-04 0.4817058173456D-04 0.4931621615914D-04 0.5048908881573D-04 + 0.5168984701400D-04 0.5291915343602D-04 0.5417768650091D-04 0.5546614073819D-04 + 0.5678522716990D-04 0.5813567370184D-04 0.5951822552399D-04 0.6093364552052D-04 + 0.6238271468940D-04 0.6386623257202D-04 0.6538501769292D-04 0.6693990801004D-04 + 0.6853176137545D-04 0.7016145600716D-04 0.7182989097199D-04 0.7353798667995D-04 + 0.7528668539018D-04 0.7707695172905D-04 0.7890977322038D-04 0.8078616082822D-04 + 0.8270714951256D-04 0.8467379879809D-04 0.8668719335646D-04 0.8874844360231D-04 + 0.9085868630335D-04 0.9301908520498D-04 0.9523083166955D-04 0.9749514533081D-04 + 0.9981327476385D-04 0.1021864981708D-03 0.1046161240829D-03 0.1071034920788D-03 + 0.1096499735204D-03 0.1122569723058D-03 0.1149259256395D-03 0.1176583048220D-03 + 0.1204556160569D-03 0.1233194012779D-03 0.1262512389946D-03 0.1292527451591D-03 + 0.1323255740522D-03 0.1354714191914D-03 0.1386920142596D-03 0.1419891340561D-03 + 0.1453645954701D-03 0.1488202584772D-03 0.1523580271588D-03 0.1559798507467D-03 + 0.1596877246914D-03 0.1634836917558D-03 0.1673698431354D-03 0.1713483196036D-03 + 0.1754213126855D-03 0.1795910658585D-03 0.1838598757811D-03 0.1882300935514D-03 + 0.1927041259946D-03 0.1972844369816D-03 0.2019735487775D-03 0.2067740434232D-03 + 0.2116885641488D-03 0.2167198168206D-03 0.2218705714220D-03 0.2271436635692D-03 + 0.2325419960635D-03 0.2380685404787D-03 0.2437263387871D-03 0.2495185050234D-03 + 0.2554482269876D-03 0.2615187679883D-03 0.2677334686266D-03 0.2740957486230D-03 + 0.2806091086858D-03 0.2872771324248D-03 0.2941034883092D-03 0.3010919316721D-03 + 0.3082463067621D-03 0.3155705488422D-03 0.3230686863400D-03 0.3307448430464D-03 + 0.3386032403672D-03 0.3466481996276D-03 0.3548841444302D-03 0.3633156030691D-03 + 0.3719472110003D-03 0.3807837133706D-03 0.3898299676050D-03 0.3990909460561D-03 + 0.4085717387147D-03 0.4182775559845D-03 0.4282137315220D-03 0.4383857251426D-03 + 0.4487991257958D-03 0.4594596546088D-03 0.4703731680030D-03 0.4815456608826D-03 + 0.4929832698985D-03 0.5046922767880D-03 0.5166791117942D-03 0.5289503571639D-03 + 0.5415127507283D-03 0.5543731895681D-03 0.5675387337630D-03 0.5810166102306D-03 + 0.5948142166541D-03 0.6089391255026D-03 0.6233990881447D-03 0.6382020390595D-03 + 0.6533561001452D-03 0.6688695851286D-03 0.6847510040784D-03 0.7010090680230D-03 + 0.7176526936774D-03 0.7346910082792D-03 0.7521333545392D-03 0.7699892957059D-03 + 0.7882686207502D-03 0.8069813496693D-03 0.8261377389156D-03 0.8457482869522D-03 + 0.8658237399373D-03 0.8863750975424D-03 0.9074136189047D-03 0.9289508287196D-03 + 0.9509985234748D-03 0.9735687778292D-03 0.9966739511411D-03 0.1020326694148D-02 + 0.1044539955802D-02 0.1069326990264D-02 0.1094701364064D-02 0.1120676963420D-02 + 0.1147268001736D-02 0.1174489027271D-02 0.1202354930982D-02 0.1230880954558D-02 + 0.1260082698632D-02 0.1289976131190D-02 0.1320577596170D-02 0.1351903822268D-02 + 0.1383971931938D-02 0.1416799450612D-02 0.1450404316124D-02 0.1484804888358D-02 + 0.1520019959123D-02 0.1556068762243D-02 0.1592970983898D-02 0.1630746773194D-02 + 0.1669416752976D-02 0.1709002030901D-02 0.1749524210759D-02 0.1791005404055D-02 + 0.1833468241865D-02 0.1876935886963D-02 0.1921432046223D-02 0.1966980983318D-02 + 0.2013607531701D-02 0.2061337107892D-02 0.2110195725071D-02 0.2160210006980D-02 + 0.2211407202153D-02 0.2263815198463D-02 0.2317462538016D-02 0.2372378432378D-02 + 0.2428592778156D-02 0.2486136172939D-02 0.2545039931602D-02 0.2605336102987D-02 + 0.2667057486966D-02 0.2730237651893D-02 0.2794910952466D-02 0.2861112547982D-02 + 0.2928878421028D-02 0.2998245396590D-02 0.3069251161599D-02 0.3141934284930D-02 + 0.3216334237854D-02 0.3292491414961D-02 0.3370447155557D-02 0.3450243765553D-02 + 0.3531924539854D-02 0.3615533785253D-02 0.3701116843859D-02 0.3788720117043D-02 + 0.3878391089943D-02 0.3970178356522D-02 0.4064131645192D-02 0.4160301845030D-02 + 0.4258741032578D-02 0.4359502499264D-02 0.4462640779437D-02 0.4568211679038D-02 + 0.4676272304927D-02 0.4786881094871D-02 0.4900097848208D-02 0.5015983757210D-02 + 0.5134601439152D-02 0.5256014969107D-02 0.5380289913484D-02 0.5507493364315D-02 + 0.5637693974323D-02 0.5770961992782D-02 0.5907369302172D-02 0.6046989455675D-02 + 0.6189897715503D-02 0.6336171092090D-02 0.6485888384169D-02 0.6639130219738D-02 + 0.6795979097958D-02 0.6956519431977D-02 0.7120837592719D-02 0.7289021953651D-02 + 0.7461162936556D-02 0.7637353058315D-02 0.7817686978748D-02 0.8002261549508D-02 + 0.8191175864078D-02 0.8384531308867D-02 0.8582431615450D-02 0.8784982913970D-02 + 0.8992293787717D-02 0.9204475328927D-02 0.9421641195809D-02 0.9643907670841D-02 + 0.9871393720348D-02 0.1010422105540D-01 0.1034251419406D-01 0.1058640052499D-01 + 0.1083601037247D-01 0.1109147706284D-01 0.1135293699241D-01 0.1162052969684D-01 + 0.1189439792209D-01 0.1217468769685D-01 0.1246154840665D-01 0.1275513286947D-01 + 0.1305559741311D-01 0.1336310195422D-01 0.1367781007898D-01 0.1399988912563D-01 + 0.1432951026875D-01 0.1466684860536D-01 0.1501208324290D-01 0.1536539738911D-01 + 0.1572697844388D-01 0.1609701809301D-01 0.1647571240411D-01 0.1686326192439D-01 + 0.1725987178077D-01 0.1766575178195D-01 0.1808111652276D-01 0.1850618549074D-01 + 0.1894118317498D-01 0.1938633917729D-01 0.1984188832572D-01 0.2030807079054D-01 + 0.2078513220265D-01 0.2127332377448D-01 0.2177290242354D-01 0.2228413089846D-01 + 0.2280727790778D-01 0.2334261825142D-01 0.2389043295493D-01 0.2445100940652D-01 + 0.2502464149704D-01 0.2561162976278D-01 0.2621228153138D-01 0.2682691107064D-01 + 0.2745583974056D-01 0.2809939614844D-01 0.2875791630725D-01 0.2943174379721D-01 + 0.3012122993084D-01 0.3082673392121D-01 0.3154862305385D-01 0.3228727286202D-01 + 0.3304306730568D-01 0.3381639895407D-01 0.3460766917199D-01 0.3541728830989D-01 + 0.3624567589783D-01 0.3709326084335D-01 0.3796048163327D-01 0.3884778653969D-01 + 0.3975563382998D-01 0.4068449198105D-01 0.4163483989793D-01 0.4260716713660D-01 + 0.4360197413137D-01 0.4461977242666D-01 0.4566108491339D-01 0.4672644607010D-01 + 0.4781640220869D-01 0.4893151172502D-01 0.5007234535445D-01 0.5123948643226D-01 + 0.5243353115921D-01 0.5365508887217D-01 0.5490478231997D-01 0.5618324794465D-01 + 0.5749113616789D-01 0.5882911168314D-01 0.6019785375311D-01 0.6159805651299D-01 + 0.6303042927939D-01 0.6449569686503D-01 0.6599459989938D-01 0.6752789515524D-01 + 0.6909635588143D-01 0.7070077214154D-01 0.7234195115905D-01 0.7402071766863D-01 + 0.7573791427403D-01 0.7749440181225D-01 0.7929105972451D-01 0.8112878643379D-01 + 0.8300849972910D-01 0.8493113715671D-01 0.8689765641821D-01 0.8890903577567D-01 + 0.9096627446384D-01 0.9307039310964D-01 0.9522243415880D-01 0.9742346230999D-01 + 0.9967456495630D-01 0.1019768526343D+00 0.1043314594807D+00 0.1067395436967D+00 + 0.1092022880200D+00 0.1117209002050D+00 0.1142966135103D+00 0.1169306871949D+00 + 0.1196244070221D+00 0.1223790857712D+00 0.1251960637581D+00 0.1280767093641D+00 + 0.1310224195719D+00 0.1340346205118D+00 0.1371147680148D+00 0.1402643481751D+00 + 0.1434848779208D+00 0.1467779055930D+00 0.1501450115345D+00 0.1535878086856D+00 + 0.1571079431903D+00 0.1607070950101D+00 0.1643869785472D+00 0.1681493432758D+00 + 0.1719959743834D+00 0.1759286934198D+00 0.1799493589552D+00 0.1840598672480D+00 + 0.1882621529202D+00 0.1925581896422D+00 0.1969499908268D+00 0.2014396103313D+00 + 0.2060291431688D+00 0.2107207262277D+00 0.2155165390006D+00 0.2204188043213D+00 + 0.2254297891103D+00 0.2305518051290D+00 0.2357872097423D+00 0.2411384066889D+00 + 0.2466078468608D+00 0.2521980290896D+00 0.2579115009419D+00 0.2637508595217D+00 + 0.2697187522805D+00 0.2758178778353D+00 0.2820509867934D+00 0.2884208825842D+00 + 0.2949304222987D+00 0.3015825175343D+00 0.3083801352471D+00 0.3153262986099D+00 + 0.3224240878760D+00 0.3296766412485D+00 0.3370871557553D+00 0.3446588881284D+00 + 0.3523951556879D+00 0.3602993372308D+00 0.3683748739225D+00 0.3766252701926D+00 + 0.3850540946334D+00 0.3936649809002D+00 0.4024616286148D+00 0.4114478042692D+00 + 0.4206273421311D+00 0.4300041451494D+00 0.4395821858594D+00 0.4493655072871D+00 + 0.4593582238526D+00 0.4695645222701D+00 0.4799886624463D+00 0.4906349783737D+00 + 0.5015078790212D+00 0.5126118492174D+00 0.5239514505296D+00 0.5355313221344D+00 + 0.5473561816812D+00 0.5594308261464D+00 0.5717601326775D+00 0.5843490594269D+00 + 0.5972026463727D+00 0.6103260161269D+00 0.6237243747292D+00 0.6374030124249D+00 + 0.6513673044259D+00 0.6656227116537D+00 0.6801747814627D+00 0.6950291483425D+00 + 0.7101915345978D+00 0.7256677510038D+00 0.7414636974367D+00 0.7575853634765D+00 + 0.7740388289812D+00 0.7908302646296D+00 0.8079659324325D+00 0.8254521862093D+00 + 0.8432954720273D+00 0.8615023286044D+00 0.8800793876698D+00 0.8990333742835D+00 + 0.9183711071097D+00 0.9380994986450D+00 0.9582255553954D+00 0.9787563780031D+00 + 0.9996991613183D+00 0.1021061194414D+01 0.1042849860544D+01 0.1065072637033D+01 + 0.1087737095110D+01 0.1110850899666D+01 0.1134421808946D+01 0.1158457674169D+01 + 0.1182966439062D+01 0.1207956139328D+01 0.1233434902019D+01 0.1259410944828D+01 + 0.1285892575288D+01 0.1312888189886D+01 0.1340406273068D+01 0.1368455396152D+01 + 0.1397044216133D+01 0.1426181474383D+01 0.1455875995236D+01 0.1486136684456D+01 + 0.1516972527589D+01 0.1548392588191D+01 0.1580406005919D+01 0.1613021994502D+01 + 0.1646249839562D+01 0.1680098896308D+01 0.1714578587066D+01 0.1749698398676D+01 + 0.1785467879720D+01 0.1821896637598D+01 0.1858994335434D+01 0.1896770688818D+01 + 0.1935235462363D+01 0.1974398466094D+01 0.2014269551645D+01 0.2054858608263D+01 + 0.2096175558628D+01 0.2138230354460D+01 0.2181032971927D+01 0.2224593406842D+01 + 0.2268921669640D+01 0.2314027780137D+01 0.2359921762060D+01 0.2406613637342D+01 + 0.2454113420186D+01 0.2502431110879D+01 0.2551576689358D+01 0.2601560108529D+01 + 0.2652391287315D+01 0.2704080103451D+01 0.2756636386000D+01 0.2810069907598D+01 + 0.2864390376421D+01 0.2919607427859D+01 0.2975730615910D+01 0.3032769404269D+01 + 0.3090733157124D+01 0.3149631129642D+01 0.3209472458154D+01 0.3270266150016D+01 + 0.3332021073162D+01 0.3394745945328D+01 0.3458449322959D+01 0.3523139589778D+01 + 0.3588824945032D+01 0.3655513391394D+01 0.3723212722537D+01 0.3791930510359D+01 + 0.3861674091871D+01 0.3932450555740D+01 0.4004266728484D+01 0.4077129160326D+01 + 0.4151044110695D+01 0.4226017533383D+01 0.4302055061356D+01 0.4379161991217D+01 + 0.4457343267327D+01 0.4536603465578D+01 0.4616946776834D+01 0.4698376990027D+01 + 0.4780897474927D+01 0.4864511164575D+01 0.4949220537402D+01 0.5035027599019D+01 + 0.5121933863707D+01 0.5209940335596D+01 0.5299047489549D+01 0.5389255251763D+01 + 0.5480562980094D+01 0.5572969444109D+01 0.5666472804900D+01 0.5761070594638D+01 + 0.5856759695921D+01 0.5953536320895D+01 0.6051395990193D+01 0.6150333511685D+01 + 0.6250342959082D+01 0.6351417650390D+01 0.6453550126256D+01 0.6556732128213D+01 + 0.6660954576857D+01 0.6766207549980D+01 0.6872480260677D+01 0.6979761035473D+01 + 0.7088037292478D+01 0.7197295519622D+01 0.7307521252982D+01 0.7418699055257D+01 + 0.7530812494406D+01 0.7643844122506D+01 0.7757775454848D+01 0.7872586949335D+01 + 0.7988257986208D+01 0.8104766848145D+01 0.8222090700791D+01 0.8340205573753D+01 + 0.8459086342122D+01 0.8578706708557D+01 0.8699039186005D+01 0.8820055081092D+01 + 0.8941724478254D+01 0.9064016224662D+01 0.9186897915999D+01 0.9310335883157D+01 + 0.9434295179911D+01 0.9558739571635D+01 0.9683631525133D+01 0.9808932199646D+01 + 0.9934601439107D+01 0.1006059776572D+02 0.1018687837492D+02 0.1031339913182D+02 + 0.1044011456918D+02 0.1056697788696D+02 0.1069394095369D+02 0.1082095430943D+02 + 0.1094796717074D+02 0.1107492743748D+02 0.1120178170169D+02 0.1132847525849D+02 + 0.1145495211921D+02 0.1158115502676D+02 0.1170702547329D+02 0.1183250372031D+02 + 0.1195752882132D+02 0.1208203864692D+02 0.1220596991271D+02 0.1232925820974D+02 + 0.1245183803798D+02 0.1257364284246D+02 0.1269460505251D+02 0.1281465612391D+02 + 0.1293372658427D+02 0.1305174608137D+02 0.1316864343491D+02 0.1328434669139D+02 + 0.1339878318241D+02 0.1351187958630D+02 0.1362356199318D+02 0.1373375597352D+02 + 0.1384238665016D+02 0.1394937877388D+02 0.1405465680258D+02 0.1415814498392D+02 + 0.1425976744169D+02 0.1435944826564D+02 0.1445711160503D+02 0.1455268176564D+02 + 0.1464608331041D+02 0.1473724116363D+02 0.1482608071855D+02 0.1491252794848D+02 + 0.1499650952131D+02 0.1507795291729D+02 0.1515678655012D+02 0.1523293989109D+02 + 0.1530634359641D+02 0.1537692963737D+02 0.1544463143334D+02 0.1550938398746D+02 + 0.1557112402482D+02 0.1562979013302D+02 0.1568532290488D+02 0.1573766508314D+02 + 0.1578676170691D+02 0.1583256025973D+02 0.1587501081881D+02 0.1591406620548D+02 + 0.1594968213634D+02 0.1598181737489D+02 0.1601043388347D+02 0.1603549697498D+02 + 0.1605697546426D+02 0.1607484181866D+02 0.1608907230741D+02 0.1609964714964D+02 + 0.1610655066033D+02 0.1610977139411D+02 0.1610930228626D+02 0.1610514079065D+02 + 0.1609728901404D+02 0.1608575384641D+02 0.1607054708676D+02 0.1605168556402D+02 + 0.1602919125245D+02 0.1600309138115D+02 0.1597341853714D+02 0.1594021076150D+02 + 0.1590351163809D+02 0.1586337037430D+02 0.1581984187330D+02 0.1577298679742D+02 + 0.1572287162187D+02 0.1566956867856D+02 0.1561315618938D+02 0.1555371828837D+02 + 0.1549134503246D+02 0.1542613240014D+02 0.1535818227762D+02 0.1528760243205D+02 + 0.1521450647137D+02 0.1513901379021D+02 0.1506124950167D+02 0.1498134435431D+02 + 0.1489943463430D+02 0.1481566205204D+02 0.1473017361328D+02 0.1464312147418D+02 + 0.1455466278027D+02 0.1446495948897D+02 0.1437417817556D+02 0.1428248982247D+02 + 0.1419006959177D+02 0.1409709658083D+02 0.1400375356120D+02 0.1391022670071D+02 + 0.1381670526889D+02 0.1372338132592D+02 0.1363044939534D+02 0.1353810612064D+02 + 0.1344654990635D+02 0.1335598054365D+02 0.1326659882134D+02 0.1317860612232D+02 + 0.1309220400652D+02 0.1300759378056D+02 0.1292497605514D+02 0.1284455029078D+02 + 0.1276651433279D+02 0.1269106393637D+02 0.1261839228274D+02 0.1254868948750D+02 + 0.1248214210210D+02 0.1241893260970D+02 0.1235923891663D+02 0.1230323384063D+02 + 0.1225108459730D+02 0.1220295228606D+02 0.1215899137710D+02 0.1211934920069D+02 + 0.1208416544060D+02 0.1205357163282D+02 0.1202769067155D+02 0.1200663632385D+02 + 0.1199051275463D+02 0.1197941406378D+02 0.1197342383695D+02 0.1197261471180D+02 + 0.1197704796145D+02 0.1198677309670D+02 0.1200182748891D+02 0.1202223601503D+02 + 0.1204801072669D+02 0.1207915054471D+02 0.1211564098097D+02 0.1215745388894D+02 + 0.1220454724455D+02 0.1225686495889D+02 0.1231433672410D+02 0.1237687789379D+02 + 0.1244438939938D+02 0.1251675770351D+02 0.1259385479149D+02 0.1267553820215D+02 + 0.1276165109859D+02 0.1285202238006D+02 0.1294646683527D+02 0.1304478533804D+02 + 0.1314676508560D+02 0.1325217987975D+02 0.1336079045132D+02 0.1347234482779D+02 + 0.1358657874398D+02 0.1370321609566D+02 0.1382196943556D+02 0.1394254051133D+02 + 0.1406462084464D+02 0.1418789235064D+02 0.1431202799661D+02 0.1443669249878D+02 + 0.1456154305583D+02 0.1468623011756D+02 0.1481039818718D+02 0.1493368665521D+02 + 0.1505573066314D+02 0.1517616199465D+02 0.1529460999215D+02 0.1541070249621D+02 + 0.1552406680525D+02 0.1563433065294D+02 0.1574112320038D+02 0.1584407604025D+02 + 0.1594282420980D+02 0.1603700720961D+02 0.1612627002492D+02 0.1621026414624D+02 + 0.1628864858583D+02 0.1636109088678D+02 0.1642726812099D+02 0.1648686787294D+02 + 0.1653958920530D+02 0.1658514360333D+02 0.1662325589415D+02 0.1665366513775D+02 + 0.1667612548604D+02 0.1669040700674D+02 0.1669629646861D+02 0.1669359808490D+02 + 0.1668213421177D+02 0.1666174599870D+02 0.1663229398788D+02 0.1659365865980D+02 + 0.1654574092248D+02 0.1648846254169D+02 0.1642176650998D+02 0.1634561735232D+02 + 0.1626000136653D+02 0.1616492679664D+02 0.1606042393785D+02 0.1594654517178D+02 + 0.1582336493101D+02 0.1569097959225D+02 0.1554950729755D+02 0.1539908770352D+02 + 0.1523988165856D+02 0.1507207080841D+02 0.1489585713097D+02 0.1471146240102D+02 + 0.1451912758646D+02 0.1431911217734D+02 0.1411169344990D+02 0.1389716566753D+02 + 0.1367583922129D+02 0.1344803971281D+02 0.1321410698255D+02 0.1297439408686D+02 + 0.1272926622746D+02 0.1247909963724D+02 0.1222428042656D+02 0.1196520339441D+02 + 0.1170227080902D+02 0.1143589116286D+02 0.1116647790683D+02 0.1089444816900D+02 + 0.1062022146300D+02 0.1034421839167D+02 0.1006685935133D+02 0.9788563242206D+01 + 0.9509746190755D+01 0.9230820289314D+01 0.8952192358702D+01 0.8674262739260D+01 + 0.8397424115707D+01 0.8122060381082D+01 0.7848545544859D+01 0.7577242690138D+01 + 0.7308502984561D+01 0.7042664749365D+01 0.6780052590569D+01 0.6520976596221D+01 + 0.6265731602928D+01 0.6014596534734D+01 0.5767833816906D+01 0.5525688866767D+01 + 0.5288389663216D+01 0.5056146396145D+01 0.4829151196418D+01 0.4607577946613D+01 + 0.4391582172213D+01 0.4181301012417D+01 0.3976853269284D+01 0.3778339533402D+01 + 0.3585842383864D+01 0.3399426659850D+01 0.3219139800750D+01 0.3045012251369D+01 + 0.2877057928418D+01 0.2715274744220D+01 0.2559645183275D+01 0.2410136927135D+01 + 0.2266703522860D+01 0.2129285090184D+01 0.1997809062453D+01 0.1872190956307D+01 + 0.1752335165095D+01 0.1638135771011D+01 0.1529477370995D+01 0.1426235911514D+01 + 0.1328279527476D+01 0.1235469380635D+01 0.1147660493020D+01 0.1064702571121D+01 + 0.9864408167499D+00 0.9127167207418D+00 0.8433688358852D+00 0.7782335257614D+00 + 0.7171456864254D+00 0.6599394381608D+00 0.6064487848393D+00 0.5565082387208D+00 + 0.5099534088442D+00 0.4666215514735D+00 0.4263520813803D+00 0.3889870430587D+00 + 0.3543715412752D+00 0.3223541306634D+00 0.2927871643601D+00 0.2655271019652D+00 + 0.2404347773726D+00 0.2173756272701D+00 0.1962198813397D+00 0.1768427154055D+00 + 0.1591243689660D+00 0.1429502287233D+00 0.1282108798688D+00 0.1148021270126D+00 + 0.1026249867467D+00 0.9158565391519D-01 0.8159544371852D-01 0.7257071182034D-01 + 0.6443275463651D-01 0.5710769198286D-01 0.5052633423376D-01 0.4462403610226D-01 + 0.3934053909487D-01 0.3461980462256D-01 0.3040983966456D-01 0.2666251678648D-01 + 0.2333339020904D-01 0.2038150951207D-01 0.1776923244029D-01 0.1546203815573D-01 + 0.1342834215735D-01 0.1163931396352D-01 0.1006869852844D-01 0.8692642240933D-02 + 0.7489524234769D-02 0.6439793623941D-02 0.5525813166092D-02 0.4731709752601D-02 + 0.4043232025607D-02 0.3447615330938D-02 0.2933454131813D-02 0.2490581931654D-02 + 0.2109958685314D-02 0.1783565616715D-02 0.1504307307025D-02 0.1265920870992D-02 + 0.1062891999653D-02 0.8903776149689D-03 0.7441348556408D-03 0.6204560930796D-03 + 0.5161096616790D-03 0.4282859777925D-03 0.3545487166052D-03 0.2927907149481D-03 + 0.2411942705380D-03 0.1981955136574D-03 0.1624525354666D-03 0.1328169675183D-03 + 0.1083087192102D-03 0.8809359348927D-04 0.7146351574361D-04 0.5781912617476D-04 + 0.4665450174283D-04 0.3754378976048D-04 0.3012955116194D-04 0.2411262719499D-04 + 0.1924335861919D-04 0.1531400130769D-04 0.1215219633976D-04 0.9615366153648D-05 + 0.7585921046345D-05 0.5967172219247D-05 0.4679858654542D-05 0.3659205360142D-05 + 0.2852439947708D-05 0.2216703125990D-05 0.1717296526558D-05 0.1326218364299D-05 + 0.1020943809202D-05 0.7834126514969D-06 0.5991919238007D-06 0.4567856479743D-06 + 0.3470678473196D-06 0.2628184526992D-06 0.1983447790606D-06 0.1491738999095D-06 + 0.1118035426361D-06 0.8350110594355D-07 0.6214209805022D-07 0.4608074418078D-07 + 0.3404674469133D-07 0.2506320879379D-07 0.1838166835342D-07 0.1343081413782D-07 + 0.9776213236391D-08 0.7088778879437D-08 0.5120188155190D-08 0.3683792774445D-08 + 0.2639854897693D-08 0.1884174335697D-08 0.1339363931709D-08 0.9481841185425D-09 + 0.6684718709038D-09 0.4692989063529D-09 0.3280735292737D-09 0.2283637200881D-09 + 0.1582690673013D-09 0.1092084999233D-09 0.7502162005276D-10 0.5130548807080D-10 + 0.3492737863319D-10 0.2366845187508D-10 0.1596437360795D-10 0.1071735826123D-10 + 0.7160621841394D-11 0.4761209661203D-11 0.3150380939244D-11 0.2074075573548D-11 + 0.1358712123606D-11 0.8854687301252D-12 0.5741391576081D-12 0.3703673725443D-12 + 0.2376802707490D-12 0.1517300223461D-12 0.9634762151808D-13 0.6085200460652D-13 + 0.3822496460648D-13 0.2387991030333D-13 diff --git a/Test/Cu/Cu_v b/Test/Cu/Cu_v new file mode 100644 index 000000000..c4409680b --- /dev/null +++ b/Test/Cu/Cu_v @@ -0,0 +1,395 @@ + nspin vdif :::::: Potentials for para-magnetic non-relativistic CuZn. + 1 0.0000000000000E+00 + MCPA: Copper z=29 xvalws= 11.07099 + 29. 6.90000 10. 0.6574767387009E+00 + -0.1113096740000E+02 0.8918006407633E+00 501 +-0.5799676359502E+02-0.5799668482557E+02-0.5799660413884E+02-0.5799652148817E+02 +-0.5799643682577E+02-0.5799635010264E+02-0.5799626126862E+02-0.5799617027232E+02 +-0.5799607706113E+02-0.5799598158109E+02-0.5799588377698E+02-0.5799578359222E+02 +-0.5799568096887E+02-0.5799557584753E+02-0.5799546816740E+02-0.5799535786621E+02 +-0.5799524488010E+02-0.5799512914374E+02-0.5799501059015E+02-0.5799488915075E+02 +-0.5799476475529E+02-0.5799463733178E+02-0.5799450680651E+02-0.5799437310394E+02 +-0.5799423614673E+02-0.5799409585562E+02-0.5799395214946E+02-0.5799380494507E+02 +-0.5799365415728E+02-0.5799349969885E+02-0.5799334148040E+02-0.5799317941035E+02 +-0.5799301339494E+02-0.5799284333810E+02-0.5799266914139E+02-0.5799249070403E+02 +-0.5799230792275E+02-0.5799212069175E+02-0.5799192890269E+02-0.5799173244456E+02 +-0.5799153120366E+02-0.5799132506351E+02-0.5799111390479E+02-0.5799089760530E+02 +-0.5799067603982E+02-0.5799044908011E+02-0.5799021659479E+02-0.5798997844926E+02 +-0.5798973450568E+02-0.5798948462284E+02-0.5798922865606E+02-0.5798896645715E+02 +-0.5798869787432E+02-0.5798842275205E+02-0.5798814093107E+02-0.5798785224818E+02 +-0.5798755653623E+02-0.5798725362401E+02-0.5798694333608E+02-0.5798662549277E+02 +-0.5798629991002E+02-0.5798596639926E+02-0.5798562476735E+02-0.5798527481642E+02 +-0.5798491634378E+02-0.5798454914178E+02-0.5798417299775E+02-0.5798378769376E+02 +-0.5798339300664E+02-0.5798298870773E+02-0.5798257456280E+02-0.5798215033190E+02 +-0.5798171576923E+02-0.5798127062299E+02-0.5798081463525E+02-0.5798034754176E+02 +-0.5797986907182E+02-0.5797937894815E+02-0.5797887688669E+02-0.5797836259642E+02 +-0.5797783577924E+02-0.5797729612977E+02-0.5797674333517E+02-0.5797617707494E+02 +-0.5797559702079E+02-0.5797500283640E+02-0.5797439417719E+02-0.5797377069026E+02 +-0.5797313201396E+02-0.5797247777792E+02-0.5797180760265E+02-0.5797112109941E+02 +-0.5797041786997E+02-0.5796969750634E+02-0.5796895959058E+02-0.5796820369452E+02 +-0.5796742937953E+02-0.5796663619625E+02-0.5796582368434E+02-0.5796499137217E+02 +-0.5796413877661E+02-0.5796326540271E+02-0.5796237074339E+02-0.5796145427917E+02 +-0.5796051547788E+02-0.5795955379430E+02-0.5795856866986E+02-0.5795755953234E+02 +-0.5795652579551E+02-0.5795546685877E+02-0.5795438210680E+02-0.5795327090928E+02 +-0.5795213262034E+02-0.5795096657838E+02-0.5794977210556E+02-0.5794854850741E+02 +-0.5794729507246E+02-0.5794601107179E+02-0.5794469575864E+02-0.5794334836789E+02 +-0.5794196811569E+02-0.5794055419895E+02-0.5793910579490E+02-0.5793762206057E+02 +-0.5793610213229E+02-0.5793454512521E+02-0.5793295013277E+02-0.5793131622613E+02 +-0.5792964245366E+02-0.5792792784033E+02-0.5792617138720E+02-0.5792437207076E+02 +-0.5792252884236E+02-0.5792064062759E+02-0.5791870632559E+02-0.5791672480847E+02 +-0.5791469492059E+02-0.5791261547790E+02-0.5791048526720E+02-0.5790830304545E+02 +-0.5790606753904E+02-0.5790377744299E+02-0.5790143142017E+02-0.5789902810058E+02 +-0.5789656608044E+02-0.5789404392140E+02-0.5789146014965E+02-0.5788881325512E+02 +-0.5788610169045E+02-0.5788332387016E+02-0.5788047816970E+02-0.5787756292441E+02 +-0.5787457642860E+02-0.5787151693448E+02-0.5786838265113E+02-0.5786517174343E+02 +-0.5786188233095E+02-0.5785851248683E+02-0.5785506023664E+02-0.5785152355714E+02 +-0.5784790037514E+02-0.5784418856620E+02-0.5784038595339E+02-0.5783649030596E+02 +-0.5783249933801E+02-0.5782841070712E+02-0.5782422201293E+02-0.5781993079572E+02 +-0.5781553453492E+02-0.5781103064758E+02-0.5780641648686E+02-0.5780168934041E+02 +-0.5779684642873E+02-0.5779188490356E+02-0.5778680184606E+02-0.5778159426523E+02 +-0.5777625909592E+02-0.5777079319716E+02-0.5776519335016E+02-0.5775945625647E+02 +-0.5775357853593E+02-0.5774755672472E+02-0.5774138727322E+02-0.5773506654397E+02 +-0.5772859080944E+02-0.5772195624979E+02-0.5771515895071E+02-0.5770819490096E+02 +-0.5770105999009E+02-0.5769375000593E+02-0.5768626063218E+02-0.5767858744576E+02 +-0.5767072591430E+02-0.5766267139341E+02-0.5765441912401E+02-0.5764596422947E+02 +-0.5763730171283E+02-0.5762842645390E+02-0.5761933320619E+02-0.5761001659396E+02 +-0.5760047110912E+02-0.5759069110802E+02-0.5758067080824E+02-0.5757040428530E+02 +-0.5755988546928E+02-0.5754910814139E+02-0.5753806593049E+02-0.5752675230950E+02 +-0.5751516059177E+02-0.5750328392740E+02-0.5749111529945E+02-0.5747864752009E+02 +-0.5746587322675E+02-0.5745278487811E+02-0.5743937475004E+02-0.5742563493157E+02 +-0.5741155732071E+02-0.5739713362014E+02-0.5738235533305E+02-0.5736721375873E+02 +-0.5735169998816E+02-0.5733580489958E+02-0.5731951915398E+02-0.5730283319051E+02 +-0.5728573722194E+02-0.5726822122993E+02-0.5725027496040E+02-0.5723188791882E+02 +-0.5721304936540E+02-0.5719374831033E+02-0.5717397350903E+02-0.5715371345728E+02 +-0.5713295638642E+02-0.5711169025851E+02-0.5708990276154E+02-0.5706758130462E+02 +-0.5704471301314E+02-0.5702128472411E+02-0.5699728298136E+02-0.5697269403092E+02 +-0.5694750381644E+02-0.5692169797455E+02-0.5689526183054E+02-0.5686818039391E+02 +-0.5684043835420E+02-0.5681202007682E+02-0.5678290959900E+02-0.5675309062612E+02 +-0.5672254652788E+02-0.5669126033492E+02-0.5665921473550E+02-0.5662639207242E+02 +-0.5659277434022E+02-0.5655834318262E+02-0.5652307989020E+02-0.5648696539841E+02 +-0.5644998028588E+02-0.5641210477308E+02-0.5637331872130E+02-0.5633360163210E+02 +-0.5629293264700E+02-0.5625129054775E+02-0.5620865375694E+02-0.5616500033911E+02 +-0.5612030800233E+02-0.5607455410029E+02-0.5602771563490E+02-0.5597976925939E+02 +-0.5593069128209E+02-0.5588045767059E+02-0.5582904405666E+02-0.5577642574165E+02 +-0.5572257770252E+02-0.5566747459855E+02-0.5561109077856E+02-0.5555340028878E+02 +-0.5549437688141E+02-0.5543399402367E+02-0.5537222490755E+02-0.5530904246007E+02 +-0.5524441935415E+02-0.5517832801999E+02-0.5511074065704E+02-0.5504162924629E+02 +-0.5497096556314E+02-0.5489872119062E+02-0.5482486753289E+02-0.5474937582902E+02 +-0.5467221716707E+02-0.5459336249814E+02-0.5451278265054E+02-0.5443044834392E+02 +-0.5434633020326E+02-0.5426039877251E+02-0.5417262452798E+02-0.5408297789121E+02 +-0.5399142924116E+02-0.5389794892583E+02-0.5380250727281E+02-0.5370507459904E+02 +-0.5360562121930E+02-0.5350411745346E+02-0.5340053363243E+02-0.5329484010249E+02 +-0.5318700722805E+02-0.5307700539263E+02-0.5296480499812E+02-0.5285037646202E+02 +-0.5273369021280E+02-0.5261471668335E+02-0.5249342630234E+02-0.5236978948384E+02 +-0.5224377661498E+02-0.5211535804201E+02-0.5198450405480E+02-0.5185118487021E+02 +-0.5171537061443E+02-0.5157703130481E+02-0.5143613683167E+02-0.5129265694052E+02 +-0.5114656121547E+02-0.5099781906446E+02-0.5084639970716E+02-0.5069227216651E+02 +-0.5053540526484E+02-0.5037576762573E+02-0.5021332768275E+02-0.5004805369646E+02 +-0.4987991378072E+02-0.4970887593990E+02-0.4953490811819E+02-0.4935797826232E+02 +-0.4917805439883E+02-0.4899510472695E+02-0.4880909772787E+02-0.4862000229085E+02 +-0.4842778785629E+02-0.4823242457512E+02-0.4803388348355E+02-0.4783213669110E+02 +-0.4762715757918E+02-0.4741892100628E+02-0.4720740351480E+02-0.4699258353329E+02 +-0.4677444156667E+02-0.4655296036595E+02-0.4632812506786E+02-0.4609992329435E+02 +-0.4586834520143E+02-0.4563338346768E+02-0.4539503321357E+02-0.4515329184509E+02 +-0.4490815881852E+02-0.4465963532636E+02-0.4440772391184E+02-0.4415242802226E+02 +-0.4389375151965E+02-0.4363169817227E+02-0.4336627115537E+02-0.4309747259339E+02 +-0.4282530317686E+02-0.4254976188611E+02-0.4227084585025E+02-0.4198855036296E+02 +-0.4170286906862E+02-0.4141379432169E+02-0.4112131771225E+02-0.4082543074003E+02 +-0.4052612561084E+02-0.4022339612208E+02-0.3991723859985E+02-0.3960765284779E+02 +-0.3929464306850E+02-0.3897821872057E+02-0.3865839527812E+02-0.3833519486496E+02 +-0.3800864674093E+02-0.3767878762385E+02-0.3734566183601E+02-0.3700932126970E+02 +-0.3666982517101E+02-0.3632723974567E+02-0.3598163759445E+02-0.3563309698964E+02 +-0.3528170100698E+02-0.3492753653067E+02-0.3457069315166E+02-0.3421126198252E+02 +-0.3384933441412E+02-0.3348500084244E+02-0.3311834939556E+02-0.3274946469359E+02 +-0.3237842667566E+02-0.3200530953042E+02-0.3163018076718E+02-0.3125310046595E+02 +-0.3087412074484E+02-0.3049328548217E+02-0.3011063032936E+02-0.2972618304727E+02 +-0.2933996419358E+02-0.2895198818237E+02-0.2856226472661E+02-0.2817080066182E+02 +-0.2777760213173E+02-0.2738267709552E+02-0.2698603808911E+02-0.2658770514122E+02 +-0.2618770870813E+02-0.2578609245114E+02-0.2538291564193E+02-0.2497825494713E+02 +-0.2457220532595E+02-0.2416487978099E+02-0.2375640774811E+02-0.2334693200332E+02 +-0.2293660411449E+02-0.2252557865693E+02-0.2211400663447E+02-0.2170202875447E+02 +-0.2128976935037E+02-0.2087733177947E+02-0.2046479601551E+02-0.2005221890841E+02 +-0.1963963723725E+02-0.1922707330779E+02-0.1881454252058E+02-0.1840206212148E+02 +-0.1798966027245E+02-0.1757738463872E+02-0.1716530984264E+02-0.1675354333862E+02 +-0.1634222947257E+02-0.1593155167159E+02-0.1552173284993E+02-0.1511303421079E+02 +-0.1470575267611E+02-0.1430021719750E+02-0.1389678420010E+02-0.1349583239647E+02 +-0.1309775718594E+02-0.1270296483063E+02-0.1231186657498E+02-0.1192487285287E+02 +-0.1154238770506E+02-0.1116480351097E+02-0.1079249612071E+02-0.1042582045772E+02 +-0.1006510664683E+02-0.9710656708949E+01-0.9362741849849E+01-0.9021600358365E+01 +-0.8687436117277E+01-0.8360417719317E+01-0.8040678170600E+01-0.7728315154660E+01 +-0.7423391822197E+01-0.7125938064643E+01-0.6835952223882E+01-0.6553403185801E+01 +-0.6278232801938E+01-0.6010358581234E+01-0.5749676592731E+01-0.5496064520020E+01 +-0.5249384809110E+01-0.5009487853138E+01-0.4776215159957E+01-0.4549402451795E+01 +-0.4328882650027E+01-0.4114488702448E+01-0.3906056215143E+01-0.3703425856366E+01 +-0.3506445505457E+01-0.3314972126045E+01-0.3128873349616E+01-0.2948028762987E+01 +-0.2772330901689E+01-0.2601685960384E+01-0.2436014241750E+01-0.2275250375982E+01 +-0.2119343354465E+01-0.1968256432154E+01-0.1821966963304E+01-0.1680466243259E+01 +-0.1543759434032E+01-0.1411865652336E+01-0.1284818294986E+01-0.1162665667781E+01 +-0.1045471970734E+01-0.9333186757936E+00-0.8263063146378E+00-0.7245566759430E+00 +-0.6282153954686E+00-0.5374549104383E+00-0.4524777428475E+00-0.3735200751699E+00 +-0.3008555858670E+00-0.2347995203282E+00-0.1757129836583E+00-0.1240074231686E+00 +-0.8014949234240E-01 + 0.0000000000000E+00 + 506 0.1107098951009E+02 + 0.4466231388884E-04 0.4686168755090E-04 0.4916934354115E-04 0.5159061110045E-04 + 0.5413108161603E-04 0.5679662150610E-04 0.5959338573723E-04 0.6252783200484E-04 + 0.6560673561005E-04 0.6883720506642E-04 0.7222669847273E-04 0.7578304068898E-04 + 0.7951444135522E-04 0.8342951379431E-04 0.8753729484192E-04 0.9184726564913E-04 + 0.9636937350527E-04 0.1011140547309E-03 0.1060922586933E-03 0.1113154729992E-03 + 0.1167957499226E-03 0.1225457341280E-03 0.1285786917519E-03 0.1349085409098E-03 + 0.1415498836976E-03 0.1485180397609E-03 0.1558290815084E-03 0.1634998710498E-03 + 0.1715480989428E-03 0.1799923248369E-03 0.1888520201067E-03 0.1981476125721E-03 + 0.2079005334074E-03 0.2181332663442E-03 0.2288693992835E-03 0.2401336784300E-03 + 0.2519520650754E-03 0.2643517951578E-03 0.2773614417317E-03 0.2910109804928E-03 + 0.3053318585037E-03 0.3203570662780E-03 0.3361212133847E-03 0.3526606077461E-03 + 0.3700133388061E-03 0.3882193647598E-03 0.4073206040389E-03 0.4273610312624E-03 + 0.4483867778664E-03 0.4704462376432E-03 0.4935901774246E-03 0.5178718531617E-03 + 0.5433471316609E-03 0.5700746182509E-03 0.5981157906677E-03 0.6275351394588E-03 + 0.6584003152221E-03 0.6907822830094E-03 0.7247554842421E-03 0.7603980065006E-03 + 0.7977917615691E-03 0.8370226721332E-03 0.8781808675486E-03 0.9213608891176E-03 + 0.9666619053324E-03 0.1014187937565E-02 0.1064048096705E-02 0.1116356831278E-02 + 0.1171234187585E-02 0.1228806082457E-02 0.1289204589212E-02 0.1352568237466E-02 + 0.1419042327446E-02 0.1488779259518E-02 0.1561938879638E-02 0.1638688841506E-02 + 0.1719204986215E-02 0.1803671740228E-02 0.1892282532564E-02 0.1985240232103E-02 + 0.2082757605983E-02 0.2185057800067E-02 0.2292374842570E-02 0.2404954171904E-02 + 0.2523053189927E-02 0.2646941841780E-02 0.2776903223587E-02 0.2913234219321E-02 + 0.3056246168245E-02 0.3206265564334E-02 0.3363634789229E-02 0.3528712880275E-02 + 0.3701876335316E-02 0.3883519955956E-02 0.4074057731124E-02 0.4273923762809E-02 + 0.4483573235951E-02 0.4703483434568E-02 0.4934154806262E-02 0.5176112077379E-02 + 0.5429905421182E-02 0.5696111681502E-02 0.5975335654449E-02 0.6268211430892E-02 + 0.6575403802499E-02 0.6897609734312E-02 0.7235559906899E-02 0.7590020331326E-02 + 0.7961794040273E-02 0.8351722858819E-02 0.8760689258531E-02 0.9189618298691E-02 + 0.9639479658634E-02 0.1011128976535E-01 0.1060611402069E-01 0.1112506913272E-01 + 0.1166932555589E-01 0.1224011004504E-01 0.1283870832818E-01 0.1346646790370E-01 + 0.1412480096727E-01 0.1481518747443E-01 0.1553917834492E-01 0.1629839881496E-01 + 0.1709455194414E-01 0.1792942228374E-01 0.1880487971360E-01 0.1972288345495E-01 + 0.2068548626691E-01 0.2169483883475E-01 0.2275319435814E-01 0.2386291334821E-01 + 0.2502646864234E-01 0.2624645064611E-01 0.2752557281216E-01 0.2886667736605E-01 + 0.3027274128964E-01 0.3174688257294E-01 0.3329236674564E-01 0.3491261370022E-01 + 0.3661120481865E-01 0.3839189041541E-01 0.4025859750979E-01 0.4221543794120E-01 + 0.4426671684121E-01 0.4641694147712E-01 0.4867083048177E-01 0.5103332348538E-01 + 0.5350959116511E-01 0.5610504572917E-01 0.5882535185234E-01 0.6167643808053E-01 + 0.6466450872261E-01 0.6779605624810E-01 0.7107787420996E-01 0.7451707071226E-01 + 0.7812108244313E-01 0.8189768929369E-01 0.8585502958465E-01 0.9000161592224E-01 + 0.9434635170618E-01 0.9889854831258E-01 0.1036679429754E+00 0.1086647173903E+00 + 0.1138995170657E+00 0.1193834714450E+00 0.1251282148275E+00 0.1311459081104E+00 + 0.1374492613815E+00 0.1440515573859E+00 0.1509666758962E+00 0.1582091190102E+00 + 0.1657940374051E+00 0.1737372575749E+00 0.1820553100769E+00 0.1907654588163E+00 + 0.1998857313929E+00 0.2094349505399E+00 0.2194327666774E+00 0.2298996916085E+00 + 0.2408571333824E+00 0.2523274323479E+00 0.2643338984214E+00 0.2769008495907E+00 + 0.2900536516759E+00 0.3038187593656E+00 0.3182237585468E+00 0.3332974099434E+00 + 0.3490696940756E+00 0.3655718575520E+00 0.3828364607012E+00 0.4008974265470E+00 + 0.4197900911286E+00 0.4395512551630E+00 0.4602192370407E+00 0.4818339271437E+00 + 0.5044368434680E+00 0.5280711885272E+00 0.5527819075065E+00 0.5786157476331E+00 + 0.6056213187166E+00 0.6338491548085E+00 0.6633517769201E+00 0.6941837567277E+00 + 0.7264017811850E+00 0.7600647179515E+00 0.7952336815316E+00 0.8319721000099E+00 + 0.8703457822512E+00 0.9104229854211E+00 0.9522744826652E+00 0.9959736307713E+00 + 0.1041596437617E+01 0.1089221629188E+01 0.1138930715938E+01 0.1190808058217E+01 + 0.1244940930515E+01 0.1301419584186E+01 0.1360337308348E+01 0.1421790488590E+01 + 0.1485878663098E+01 0.1552704575792E+01 0.1622374226024E+01 0.1694996914351E+01 + 0.1770685283878E+01 0.1849555356603E+01 0.1931726564196E+01 0.2017321772562E+01 + 0.2106467299530E+01 0.2199292924957E+01 0.2295931892477E+01 0.2396520902110E+01 + 0.2501200092873E+01 0.2610113014503E+01 0.2723406587340E+01 0.2841231049391E+01 + 0.2963739889512E+01 0.3091089765636E+01 0.3223440406886E+01 0.3360954498381E+01 + 0.3503797547507E+01 0.3652137730326E+01 0.3806145716818E+01 0.3965994473538E+01 + 0.4131859042276E+01 0.4303916293232E+01 0.4482344651201E+01 0.4667323793228E+01 + 0.4859034316145E+01 0.5057657372407E+01 0.5263374272594E+01 0.5476366052983E+01 + 0.5696813006533E+01 0.5924894175695E+01 0.6160786805434E+01 0.6404665754904E+01 + 0.6656702866268E+01 0.6917066289185E+01 0.7185919759598E+01 0.7463421831538E+01 + 0.7749725060762E+01 0.8044975139195E+01 0.8349309979308E+01 0.8662858747720E+01 + 0.8985740847569E+01 0.9318064849392E+01 0.9659927370554E+01 0.1001141190356E+02 + 0.1037258759394E+02 0.1074350796868E+02 0.1112420961681E+02 0.1151471082390E+02 + 0.1191501016300E+02 0.1232508504487E+02 0.1274489023115E+02 0.1317435631449E+02 + 0.1361338817064E+02 0.1406186338785E+02 0.1451963068007E+02 0.1498650829104E+02 + 0.1546228239710E+02 0.1594670551789E+02 0.1643949494442E+02 0.1694033119556E+02 + 0.1744885651460E+02 0.1796467341877E+02 0.1848734331551E+02 0.1901638520055E+02 + 0.1955127445371E+02 0.2009144174955E+02 0.2063627210099E+02 0.2118510405509E+02 + 0.2173722906107E+02 0.2229189103165E+02 0.2284828611975E+02 0.2340556273300E+02 + 0.2396282180962E+02 0.2451911737936E+02 0.2507345743375E+02 0.2562480513007E+02 + 0.2617208035325E+02 0.2671416165993E+02 0.2724988862812E+02 0.2777806463513E+02 + 0.2829746008548E+02 0.2880681610871E+02 0.2930484874544E+02 0.2979025363740E+02 + 0.3026171123486E+02 0.3071789253135E+02 0.3115746533198E+02 0.3157910105782E+02 + 0.3198148208357E+02 0.3236330960113E+02 0.3272331199546E+02 0.3306025371324E+02 + 0.3337294459781E+02 0.3366024965663E+02 0.3392109921987E+02 0.3415449944040E+02 + 0.3435954307686E+02 0.3453542049274E+02 0.3468143079498E+02 0.3479699302655E+02 + 0.3488165731780E+02 0.3493511589235E+02 0.3495721381369E+02 0.3494795935038E+02 + 0.3490753382897E+02 0.3483630083625E+02 0.3473481462579E+02 0.3460382757756E+02 + 0.3444429655535E+02 0.3425738800338E+02 0.3404448162212E+02 0.3380717246391E+02 + 0.3354727129169E+02 0.3326680304874E+02 0.3296800329510E+02 0.3265331247613E+02 + 0.3232536790165E+02 0.3198699333000E+02 0.3164118606989E+02 0.3129110153510E+02 + 0.3094003521176E+02 0.3059140202599E+02 0.3024871313023E+02 0.2991555016032E+02 + 0.2959553705120E+02 0.2929230953697E+02 0.2900948250119E+02 0.2875061538428E+02 + 0.2851917586659E+02 0.2831850227023E+02 0.2815176470715E+02 0.2802192565383E+02 + 0.2793170021134E+02 0.2788351653054E+02 0.2787947688468E+02 0.2792131990046E+02 + 0.2801038448265E+02 0.2814757598564E+02 0.2833333519714E+02 0.2856761070386E+02 + 0.2884983520550E+02 0.2917890633182E+02 0.2955317249629E+02 0.2997042428986E+02 + 0.3042789187799E+02 0.3092224881398E+02 0.3144962262196E+02 0.3200561243270E+02 + 0.3258531387640E+02 0.3318335134865E+02 0.3379391766911E+02 0.3441082104948E+02 + 0.3502753917740E+02 0.3563728010893E+02 0.3623304954455E+02 0.3680772394471E+02 + 0.3735412882194E+02 0.3786512142992E+02 0.3833367695732E+02 0.3875297722802E+02 + 0.3911650081157E+02 0.3941811336014E+02 0.3965215691415E+02 0.3981353685861E+02 + 0.3989780516931E+02 0.3990123856396E+02 0.3982091016935E+02 0.3965475333407E+02 + 0.3940161625820E+02 0.3906130617754E+02 0.3863462193194E+02 0.3812337386511E+02 + 0.3753039014685E+02 0.3685950877848E+02 0.3611555473624E+02 0.3530430192577E+02 + 0.3443241985935E+02 0.3350740522622E+02 0.3253749879883E+02 0.3153158840250E+02 + 0.3049909896595E+02 0.2944987096051E+02 0.2839402882023E+02 0.2734184120534E+02 + 0.2630357522141E+02 0.2528934692668E+02 0.2430897064308E+02 0.2337180972477E+02 + 0.2248663152317E+02 0.2166146931496E+02 0.2090349393004E+02 0.2021889767187E+02 + 0.1961279305521E+02 0.1908912851839E+02 0.1865062306764E+02 0.1829872142238E+02 + 0.1803357083895E+02 0.1785402035633E+02 0.1775764274747E+02 0.1774077898455E+02 + 0.1779860454710E+02 0.1792521642732E+02 0.1811373922932E+02 0.1835644832684E+02 + 0.1864490764895E+02 0.1897011931635E+02 0.1932268206261E+02 0.1969295515712E+02 + 0.2007122440758E+02 0.2044786676910E+02 0.2081351012793E+02 0.2115918496275E+02 + 0.2147646481333E+02 0.2175759279840E+02 0.2199559181346E+02 0.2218435649034E+02 + 0.2231872549946E+02 0.2239453330431E+02 0.2240864101802E+02 0.2235894654429E+02 + 0.2224437469289E+02 0.2206484842595E+02 0.2182124280267E+02 0.2151532353452E+02 + 0.2114967233429E+02 0.2072760143464E+02 0.2025305976488E+02 0.1973053331009E+02 + 0.1916494213989E+02 0.1856153649128E+02 0.1792579413091E+02 0.1726332101622E+02 + 0.1657975703343E+02 0.1588068832385E+02 0.1517156742883E+02 0.1445764219821E+02 + 0.1374389412561E+02 0.1303498650365E+02 0.1233522254034E+02 0.1164851334798E+02 + 0.1097835551261E+02 0.1032781777665E+02 0.9699536221786E+01 0.9095717222809E+01 + 0.8518147356056E+01 0.7968209386526E+01 0.7446903424017E+01 0.6954872328727E+01 + 0.6492430458018E+01 0.6059594876080E+01 0.5656118194275E+01 0.5281522269376E+01 + 0.4935132057062E+01 0.4616108996362E+01 0.4323483384685E+01 0.4056185290384E+01 + 0.3813073638227E+01 0.3592963190618E+01 0.3394649232174E+01 0.3216929845615E+01 + 0.3058625741533E+01 0.2918597672240E+01 0.2795761519768E+01 0.2689101199396E+01 + 0.2597679562551E+01 0.2520647516209E+01 0.2457251600076E+01 0.2406840277882E+01 + 0.2368869205125E+01 0.2342905732748E+01 0.2328632894220E+01 0.2325853102008E+01 + 0.2334491747493E+01 0.2354600854439E+01 0.2386362877310E+01 0.2430094521020E+01 + 0.2486251215767E+01 0.0000000000000E+00 0.0000000000000E+00 0.0000000000000E+00 + 0.0000000000000E+00 0.0000000000000E+00 + 7 506 + 1 0 -1 -640.73679 + 2 0 -1 -75.48546 + 2 1 1 -66.16089 + 2 1 -2 -66.16089 + 3 0 -1 -7.29406 + 3 1 1 -4.39390 + 3 1 -2 -4.39390 + 0.4409225560631E-04 0.4626355713163E-04 0.4854175890496E-04 0.5093212214653E-04 + 0.5344016687699E-04 0.5607168463760E-04 0.5883275183501E-04 0.6172974374084E-04 + 0.6476934917855E-04 0.6795858593109E-04 0.7130481690458E-04 0.7481576708519E-04 + 0.7849954132796E-04 0.8236464301822E-04 0.8641999364856E-04 0.9067495335592E-04 + 0.9513934246583E-04 0.9982346409326E-04 0.1047381278515E-03 0.1098946747234E-03 + 0.1153050031520E-03 0.1209815964095E-03 0.1269375513081E-03 0.1331866083173E-03 + 0.1397431831569E-03 0.1466223999378E-03 0.1538401259260E-03 0.1614130080092E-03 + 0.1693585109488E-03 0.1776949575055E-03 0.1864415705280E-03 0.1956185171027E-03 + 0.2052469548636E-03 0.2153490805681E-03 0.2259481810492E-03 0.2370686866599E-03 + 0.2487362273310E-03 0.2609776913704E-03 0.2738212871364E-03 0.2872966077254E-03 + 0.3014346988207E-03 0.3162681298564E-03 0.3318310686575E-03 0.3481593597245E-03 + 0.3652906063413E-03 0.3832642566905E-03 0.4021216941719E-03 0.4219063321280E-03 + 0.4426637131897E-03 0.4644416134681E-03 0.4872901518252E-03 0.5112619044722E-03 + 0.5364120251516E-03 0.5627983711745E-03 0.5904816355972E-03 0.6195254858331E-03 + 0.6499967090122E-03 0.6819653644139E-03 0.7155049433163E-03 0.7506925366182E-03 + 0.7876090106116E-03 0.8263391912961E-03 0.8669720576493E-03 0.9096009442830E-03 + 0.9543237539390E-03 0.1001243180299E-02 0.1050466941601E-02 0.1102108025592E-02 + 0.1156284946348E-02 0.1213122013544E-02 0.1272749614762E-02 0.1335304511479E-02 + 0.1400930149366E-02 0.1469776983607E-02 0.1542002819944E-02 0.1617773172211E-02 + 0.1697261637133E-02 0.1780650287223E-02 0.1868130082648E-02 0.1959901302949E-02 + 0.2056173999585E-02 0.2157168470277E-02 0.2263115756193E-02 0.2374258163069E-02 + 0.2490849807387E-02 0.2613157188819E-02 0.2741459790163E-02 0.2876050706089E-02 + 0.3017237302051E-02 0.3165341904793E-02 0.3320702525940E-02 0.3483673620235E-02 + 0.3654626880062E-02 0.3833952067949E-02 0.4022057888851E-02 0.4219372904067E-02 + 0.4426346488759E-02 0.4643449835105E-02 0.4871177003219E-02 0.5110046022081E-02 + 0.5360600042797E-02 0.5623408546631E-02 0.5899068610366E-02 0.6188206231636E-02 + 0.6491477717033E-02 0.6809571135881E-02 0.7143207842708E-02 0.7493144071602E-02 + 0.7860172605750E-02 0.8245124525616E-02 0.8648871039370E-02 0.9072325399339E-02 + 0.9516444908405E-02 0.9982233020453E-02 0.1047074153916E-01 0.1098307291957E-01 + 0.1152038267717E-01 0.1208388190922E-01 0.1267483993350E-01 0.1329458704980E-01 + 0.1394451742941E-01 0.1462609213872E-01 0.1534084230257E-01 0.1609037241379E-01 + 0.1687636379532E-01 0.1770057822173E-01 0.1856486170711E-01 0.1947114846668E-01 + 0.2042146505978E-01 0.2141793472203E-01 0.2246278189516E-01 0.2355833696274E-01 + 0.2470704120102E-01 0.2591145195398E-01 0.2717424804230E-01 0.2849823541607E-01 + 0.2988635306193E-01 0.3134167917501E-01 0.3286743760726E-01 0.3446700460335E-01 + 0.3614391583653E-01 0.3790187375660E-01 0.3974475526314E-01 0.4167661971712E-01 + 0.4370171730499E-01 0.4582449776927E-01 0.4804961952071E-01 0.5038195914717E-01 + 0.5282662133496E-01 0.5538894921923E-01 0.5807453517987E-01 0.6088923210072E-01 + 0.6383916510953E-01 0.6693074381759E-01 0.7017067507760E-01 0.7356597627956E-01 + 0.7712398920468E-01 0.8085239445788E-01 0.8475922650007E-01 0.8885288930190E-01 + 0.9314217264116E-01 0.9763626906647E-01 0.1023447915507E+00 0.1072777918577E+00 + 0.1124457796460E+00 0.1178597423354E+00 0.1235311657601E+00 0.1294720556341E+00 + 0.1356949598554E+00 0.1422129916740E+00 0.1490398537509E+00 0.1561898631334E+00 + 0.1636779771747E+00 0.1715198204242E+00 0.1797317125137E+00 0.1883306970686E+00 + 0.1973345716686E+00 0.2067619188850E+00 0.2166321384196E+00 0.2269654803720E+00 + 0.2377830796579E+00 0.2491069916032E+00 0.2609602287382E+00 0.2733667988098E+00 + 0.2863517440368E+00 0.2999411816236E+00 0.3141623455509E+00 0.3290436296583E+00 + 0.3446146320323E+00 0.3609062007087E+00 0.3779504806979E+00 0.3957809623378E+00 + 0.4144325309731E+00 0.4339415179612E+00 0.4543457529938E+00 0.4756846177245E+00 + 0.4979991006843E+00 0.5213318534621E+00 0.5457272481202E+00 0.5712314358103E+00 + 0.5978924065457E+00 0.6257600500779E+00 0.6548862178188E+00 0.6853247857379E+00 + 0.7171317181556E+00 0.7503651323422E+00 0.7850853638191E+00 0.8213550322495E+00 + 0.8592391077872E+00 0.8988049777434E+00 0.9401225134109E+00 0.9832641368704E+00 + 0.1028304887587E+01 0.1075322488585E+01 0.1124397411964E+01 0.1175612943517E+01 + 0.1229055246149E+01 0.1284813421825E+01 0.1342979571703E+01 0.1403648854100E+01 + 0.1466919539922E+01 0.1532893065135E+01 0.1601674079842E+01 0.1673370493491E+01 + 0.1748093515700E+01 0.1825957692162E+01 0.1907080935042E+01 0.1991584547244E+01 + 0.2079593239890E+01 0.2171235142309E+01 0.2266641803781E+01 0.2365948186252E+01 + 0.2469292647181E+01 0.2576816911627E+01 0.2688666032661E+01 0.2804988339104E+01 + 0.2925935369561E+01 0.3051661791695E+01 0.3182325305570E+01 0.3318086529919E+01 + 0.3459108870088E+01 0.3605558366378E+01 0.3757603521465E+01 0.3915415105520E+01 + 0.4079165937610E+01 0.4249030641940E+01 0.4425185377412E+01 0.4607807538996E+01 + 0.4797075429345E+01 0.4993167899077E+01 0.5196263954114E+01 0.5406542328487E+01 + 0.5624181020981E+01 0.5849356794027E+01 0.6082244633263E+01 0.6323017166188E+01 + 0.6571844038436E+01 0.6828891246187E+01 0.7094320423361E+01 0.7368288082300E+01 + 0.7650944806773E+01 0.7942434396261E+01 0.8242892960640E+01 0.8552447964560E+01 + 0.8871217221018E+01 0.9199307833869E+01 0.9536815089270E+01 0.9883821296363E+01 + 0.1024039457782E+02 0.1060658761128E+02 0.1098243632296E+02 0.1136795853555E+02 + 0.1176315257233E+02 0.1216799582079E+02 0.1258244325879E+02 0.1300642594766E+02 + 0.1343984949658E+02 0.1388259250400E+02 0.1433450498188E+02 0.1479540677009E+02 + 0.1526508594836E+02 0.1574329725477E+02 0.1622976052006E+02 0.1672415912855E+02 + 0.1722613851697E+02 0.1773530472378E+02 0.1825122300263E+02 0.1877341651432E+02 + 0.1930136511310E+02 0.1983450424395E+02 0.2037222396836E+02 0.2091386813766E+02 + 0.2145873373321E+02 0.2200607039433E+02 0.2255508015510E+02 0.2310491741251E+02 + 0.2365468914837E+02 0.2420345542864E+02 0.2475023020351E+02 0.2529398243231E+02 + 0.2583363755680E+02 0.2636807934652E+02 0.2689615213923E+02 0.2741666349849E+02 + 0.2792838730971E+02 0.2843006733418E+02 0.2892042123901E+02 0.2939814511862E+02 + 0.2986191852077E+02 0.3031040998710E+02 0.3074228311466E+02 0.3115620314071E+02 + 0.3155084404877E+02 0.3192489618880E+02 0.3227707439874E+02 0.3260612660892E+02 + 0.3291084290390E+02 0.3319006500965E+02 0.3344269616642E+02 0.3366771133953E+02 + 0.3386416771261E+02 0.3403121539869E+02 0.3416810829625E+02 0.3427421500807E+02 + 0.3434902973216E+02 0.3439218302474E+02 0.3440345232691E+02 0.3438277213809E+02 + 0.3433024371164E+02 0.3424614414070E+02 0.3413093469600E+02 0.3398526827222E+02 + 0.3380999579507E+02 0.3360617143880E+02 0.3337505650271E+02 0.3311812179588E+02 + 0.3283704838226E+02 0.3253372654299E+02 0.3221025282037E+02 0.3186892501752E+02 + 0.3151223504038E+02 0.3114285948395E+02 0.3076364788252E+02 0.3037760856465E+02 + 0.2998789207735E+02 0.2959777217003E+02 0.2921062435804E+02 0.2882990211681E+02 + 0.2845911079107E+02 0.2810177933895E+02 0.2776143006763E+02 0.2744154655469E+02 + 0.2714553998794E+02 0.2687671419321E+02 0.2663822966028E+02 0.2643306690908E+02 + 0.2626398957538E+02 0.2613350762521E+02 0.2604384113571E+02 0.2599688510343E+02 + 0.2599417576011E+02 0.2603685888937E+02 0.2612566064469E+02 0.2626086136933E+02 + 0.2644227291204E+02 0.2666921991735E+02 0.2694052554665E+02 0.2725450205481E+02 + 0.2760894660761E+02 0.2800114267703E+02 0.2842786729525E+02 0.2888540438398E+02 + 0.2936956430398E+02 0.2987570969169E+02 0.3039878756543E+02 0.3093336759489E+02 + 0.3147368633509E+02 0.3201369713094E+02 0.3254712530307E+02 0.3306752813025E+02 + 0.3356835905123E+02 0.3404303541988E+02 0.3448500906454E+02 0.3488783882669E+02 + 0.3524526418739E+02 0.3555127903375E+02 0.3580020457376E+02 0.3598676037715E+02 + 0.3610613250397E+02 0.3615403768263E+02 0.3612678251512E+02 0.3602131672114E+02 + 0.3583527948366E+02 0.3556703802767E+02 0.3521571765027E+02 0.3478122252413E+02 + 0.3426424671654E+02 0.3366627500198E+02 0.3298957319568E+02 0.3223716789758E+02 + 0.3141281570790E+02 0.3052096215476E+02 0.2956669075845E+02 0.2855566284167E+02 + 0.2749404887814E+02 0.2638845234779E+02 0.2524582723291E+02 0.2407339043950E+02 + 0.2287853055970E+02 0.2166871449729E+02 0.2045139355727E+02 0.1923391064578E+02 + 0.1802341023676E+02 0.1682675273230E+02 0.1565043478062E+02 0.1450051696134E+02 + 0.1338256019706E+02 0.1230157192464E+02 0.1126196292951E+02 0.1026751545257E+02 + 0.9321362909432E+01 0.8425981275089E+01 0.7583191901465E+01 0.6794175261903E+01 + 0.6059494865650E+01 0.5379130366162E+01 0.4752518705559E+01 0.4178601998048E+01 + 0.3655880758907E+01 0.3182471032599E+01 0.2756163962111E+01 0.2374486369377E+01 + 0.2034760980809E+01 0.1734165029103E+01 0.1469786088747E+01 0.1238674153439E+01 + 0.1037889133672E+01 0.8645431361246E+00 0.7158370767404E+00 0.5890913699236E+00 + 0.4817706203687E+00 0.3915024156657E+00 0.3160904714400E+00 0.2535225120539E+00 + 0.2019733756073E+00 0.1598039103235E+00 0.1255562799011E+00 0.9794631892314E-01 + 0.7585357791733E-01 0.5830967412663E-01 0.4448552213151E-01 0.3367796226096E-01 + 0.2529623850564E-01 0.1884870558144E-01 0.1393007076885E-01 0.1020940358262E-01 + 0.7419078028716E-02 0.5344750346979E-02 0.3816421208942E-02 0.2700586188926E-02 + 0.1893442216380E-02 0.1315090419547E-02 0.9046566650320E-03 0.6162392835174E-03 + 0.4155878719967E-03 0.2774165213365E-03 0.1832581809178E-03 0.1197730526121E-03 + 0.7743193076525E-04 0.4950444190087E-04 0.3129151194295E-04 0.1955058048600E-04 + 0.1207071812656E-04 0.7362641218119E-05 0.4435525089898E-05 0.2638445388488E-05 + 0.1549246678554E-05 0.8977120001955E-06 0.5131790041795E-06 0.2893238614370E-06 + 0.1608229198820E-06 0.8810921461427E-07 0.4756224058255E-07 0.2528862360754E-07 + 0.1323916722763E-07 0.6822062272233E-08 0.3458863031005E-08 0.1724856503403E-08 + 0.8456872364263E-09 0.4075069660558E-09 0.1929105265242E-09 0.8967998710594E-10 + 0.4092356143162E-10 0.1832334173129E-10 0.8046431636751E-11 0.3464132526127E-11 + 0.1461384618899E-11 0.6040098602063E-12 0.2446953128078E-12 0.9687246597290E-13 + 0.3784670001084E-13 0.1465738447659E-13 0.5521914226558E-14 0.1995959733784E-14 + 0.7040070978009E-15 0.2421613635985E-15 diff --git a/Test/Cu/i_lsms b/Test/Cu/i_lsms new file mode 100644 index 000000000..c27f691cc --- /dev/null +++ b/Test/Cu/i_lsms @@ -0,0 +1,155 @@ +systemid="cu" +system_title = "Copper (FCC) Test for LSMS 3" +pot_in_type=1 +-- write potential out. Use this only when xRepeat, yRepeat and zRepeat = 1 +pot_out_type=1 +num_atoms=1 +nspin=1 +mtasa=0 +xcFunctional={0,1} -- von Barth Hedin (LSMS_1) +-- xcFunctional={1,1,17} -- von Barth Hedin (libxc) +-- xcFunctional={1,1,12} -- Perdew & Wang +-- xcFunctional={1,20} -- Teter 93 +-- xcFunctional={1,101,130} -- GGA PBE + +iprint=0 +default_iprint=-1 +print_node=0 +-- istop="buildKKRMatrix" +istop="main" + +nscf=50 +rmsTolerance=1.e-12 + +xRepeat=1 +yRepeat=1 +zRepeat=1 +makeTypesUnique=1 + +-- energyContour = {npts=1,grid=0,ebot=-0.2,etop=0.0,eitop=0.825,eibot=0.1} +-- energyContour = {npts=11,grid=2,ebot=-0.3,etop=0.0,eitop=0.825,eibot=0.025,maxGroupSize=5} +energyContour = {npts=25,grid=2,ebot=-0.5,etop=0.0,eitop=0.825,eibot=0.0025} + +a = 6.831 + +bravais = {} +bravais[1]={0.5*a,0.5*a,0} +bravais[2]={0,0.5*a,0.5*a} +bravais[3]={0.5*a,0,0.5*a} + +site_default={lmax=3,rLIZ=12.5,rsteps={89.5,91.5,93.2,99.9},atom="Cu",Z=29,Zc=10,Zs=8,Zv=11,rad=2} + +-- Possible choices of mixing parameters +-- quantity : charge, potential, moment_magnitude, moment_direction, noQuantity +-- algorithm : simple, broyden, noAlgorithm +-- mixing = { {quantity = "charge", algorithm = "simple", mixing_parameter = 0.05} } +-- mixing = { {quantity = "potential", algorithm = "simple", mixing_parameter = 0.05} } +-- mixing = { {quantity = "potential", algorithm = "broyden", mixing_parameter = 0.05}, {quantity = "moment_magnitude", algorithm = "noAlgorithm", mixing_parameter = 0.01} } +mixing = { {quantity = "potential", algorithm = "broyden", mixing_parameter = 0.05} } + +numberOfMixQuantities = 0 +for k,v in pairs(mixing) do + numberOfMixQuantities = numberOfMixQuantities + 1 +end + +--[[ +print("Site defaults:") +for k,v in pairs(site_default) do + print(k," : ",v) +end +--]] + +site = {} +for i =1,num_atoms do site[i]={} end + +site[1].pos={0,0,0} +site[1].evec={0,0,1} + +-- set site defaults +for i =1,num_atoms do + for k,v in pairs(site_default) do + if(site[i][k]==nil) then site[i][k]=v end + end +end + + +--[[ +function deepcopy(t) +if type(t) ~= 'table' then return t end +local mt = getmetatable(t) +local res = {} +for k,v in pairs(t) do +if type(v) == 'table' then +v = deepcopy(v) +end +res[k] = v +end +-- setmetatable(res,mt) +return res +end + + +-- repeat nx*ny*nz times +ntemp=num_atoms +-- ix==1 first: +ix=0 +-- iy==1 +iy=0 +for iz=1,nz-1 do + for ib=1,num_atoms do + ntemp=ntemp+1 + site[ntemp]={pos={0,0,0},evec={0,0,1}} + site[ntemp].pos[1]=site[ib].pos[1]+bravais[1][1]*ix+bravais[2][1]*iy+bravais[3][1]*iz + site[ntemp].pos[2]=site[ib].pos[2]+bravais[1][2]*ix+bravais[2][2]*iy+bravais[3][2]*iz + site[ntemp].pos[3]=site[ib].pos[3]+bravais[1][3]*ix+bravais[2][3]*iy+bravais[3][3]*iz + site[ntemp].evec[1]=site[ib].evec[1] + site[ntemp].evec[2]=site[ib].evec[2] + site[ntemp].evec[3]=site[ib].evec[3] + site[ntemp].type=ib + end +end +-- iy!=1 +for iy =1,ny-1 do + for iz=0,nz-1 do + for ib=1,num_atoms do + ntemp=ntemp+1 + site[ntemp]={pos={0,0,0},evec={0,0,1}} + site[ntemp].pos[1]=site[ib].pos[1]+bravais[1][1]*ix+bravais[2][1]*iy+bravais[3][1]*iz + site[ntemp].pos[2]=site[ib].pos[2]+bravais[1][2]*ix+bravais[2][2]*iy+bravais[3][2]*iz + site[ntemp].pos[3]=site[ib].pos[3]+bravais[1][3]*ix+bravais[2][3]*iy+bravais[3][3]*iz + site[ntemp].evec[1]=site[ib].evec[1] + site[ntemp].evec[2]=site[ib].evec[2] + site[ntemp].evec[3]=site[ib].evec[3] + site[ntemp].type=ib + end + end +end +-- ix != 1 +for ix=1,nx-1 do + for iy =0,ny-1 do + for iz=0,nz-1 do + for ib=1,num_atoms do + ntemp=ntemp+1 + site[ntemp]={pos={0,0,0},evec={0,0,1}} + site[ntemp].pos[1]=site[ib].pos[1]+bravais[1][1]*ix+bravais[2][1]*iy+bravais[3][1]*iz + site[ntemp].pos[2]=site[ib].pos[2]+bravais[1][2]*ix+bravais[2][2]*iy+bravais[3][2]*iz + site[ntemp].pos[3]=site[ib].pos[3]+bravais[1][3]*ix+bravais[2][3]*iy+bravais[3][3]*iz + site[ntemp].evec[1]=site[ib].evec[1] + site[ntemp].evec[2]=site[ib].evec[2] + site[ntemp].evec[3]=site[ib].evec[3] + site[ntemp].type=ib + end + end + end +end +num_atoms=ntemp +bravais[1][1]=bravais[1][1]*nx +bravais[1][2]=bravais[1][2]*nx +bravais[1][3]=bravais[1][3]*nx +bravais[2][1]=bravais[2][1]*ny +bravais[2][2]=bravais[2][2]*ny +bravais[2][3]=bravais[2][3]*ny +bravais[3][1]=bravais[3][1]*nz +bravais[3][2]=bravais[3][2]*nz +bravais[3][3]=bravais[3][3]*nz +--]] diff --git a/Test/Cu/v_cu.0 b/Test/Cu/v_cu.0 new file mode 100644 index 000000000..c4409680b --- /dev/null +++ b/Test/Cu/v_cu.0 @@ -0,0 +1,395 @@ + nspin vdif :::::: Potentials for para-magnetic non-relativistic CuZn. + 1 0.0000000000000E+00 + MCPA: Copper z=29 xvalws= 11.07099 + 29. 6.90000 10. 0.6574767387009E+00 + -0.1113096740000E+02 0.8918006407633E+00 501 +-0.5799676359502E+02-0.5799668482557E+02-0.5799660413884E+02-0.5799652148817E+02 +-0.5799643682577E+02-0.5799635010264E+02-0.5799626126862E+02-0.5799617027232E+02 +-0.5799607706113E+02-0.5799598158109E+02-0.5799588377698E+02-0.5799578359222E+02 +-0.5799568096887E+02-0.5799557584753E+02-0.5799546816740E+02-0.5799535786621E+02 +-0.5799524488010E+02-0.5799512914374E+02-0.5799501059015E+02-0.5799488915075E+02 +-0.5799476475529E+02-0.5799463733178E+02-0.5799450680651E+02-0.5799437310394E+02 +-0.5799423614673E+02-0.5799409585562E+02-0.5799395214946E+02-0.5799380494507E+02 +-0.5799365415728E+02-0.5799349969885E+02-0.5799334148040E+02-0.5799317941035E+02 +-0.5799301339494E+02-0.5799284333810E+02-0.5799266914139E+02-0.5799249070403E+02 +-0.5799230792275E+02-0.5799212069175E+02-0.5799192890269E+02-0.5799173244456E+02 +-0.5799153120366E+02-0.5799132506351E+02-0.5799111390479E+02-0.5799089760530E+02 +-0.5799067603982E+02-0.5799044908011E+02-0.5799021659479E+02-0.5798997844926E+02 +-0.5798973450568E+02-0.5798948462284E+02-0.5798922865606E+02-0.5798896645715E+02 +-0.5798869787432E+02-0.5798842275205E+02-0.5798814093107E+02-0.5798785224818E+02 +-0.5798755653623E+02-0.5798725362401E+02-0.5798694333608E+02-0.5798662549277E+02 +-0.5798629991002E+02-0.5798596639926E+02-0.5798562476735E+02-0.5798527481642E+02 +-0.5798491634378E+02-0.5798454914178E+02-0.5798417299775E+02-0.5798378769376E+02 +-0.5798339300664E+02-0.5798298870773E+02-0.5798257456280E+02-0.5798215033190E+02 +-0.5798171576923E+02-0.5798127062299E+02-0.5798081463525E+02-0.5798034754176E+02 +-0.5797986907182E+02-0.5797937894815E+02-0.5797887688669E+02-0.5797836259642E+02 +-0.5797783577924E+02-0.5797729612977E+02-0.5797674333517E+02-0.5797617707494E+02 +-0.5797559702079E+02-0.5797500283640E+02-0.5797439417719E+02-0.5797377069026E+02 +-0.5797313201396E+02-0.5797247777792E+02-0.5797180760265E+02-0.5797112109941E+02 +-0.5797041786997E+02-0.5796969750634E+02-0.5796895959058E+02-0.5796820369452E+02 +-0.5796742937953E+02-0.5796663619625E+02-0.5796582368434E+02-0.5796499137217E+02 +-0.5796413877661E+02-0.5796326540271E+02-0.5796237074339E+02-0.5796145427917E+02 +-0.5796051547788E+02-0.5795955379430E+02-0.5795856866986E+02-0.5795755953234E+02 +-0.5795652579551E+02-0.5795546685877E+02-0.5795438210680E+02-0.5795327090928E+02 +-0.5795213262034E+02-0.5795096657838E+02-0.5794977210556E+02-0.5794854850741E+02 +-0.5794729507246E+02-0.5794601107179E+02-0.5794469575864E+02-0.5794334836789E+02 +-0.5794196811569E+02-0.5794055419895E+02-0.5793910579490E+02-0.5793762206057E+02 +-0.5793610213229E+02-0.5793454512521E+02-0.5793295013277E+02-0.5793131622613E+02 +-0.5792964245366E+02-0.5792792784033E+02-0.5792617138720E+02-0.5792437207076E+02 +-0.5792252884236E+02-0.5792064062759E+02-0.5791870632559E+02-0.5791672480847E+02 +-0.5791469492059E+02-0.5791261547790E+02-0.5791048526720E+02-0.5790830304545E+02 +-0.5790606753904E+02-0.5790377744299E+02-0.5790143142017E+02-0.5789902810058E+02 +-0.5789656608044E+02-0.5789404392140E+02-0.5789146014965E+02-0.5788881325512E+02 +-0.5788610169045E+02-0.5788332387016E+02-0.5788047816970E+02-0.5787756292441E+02 +-0.5787457642860E+02-0.5787151693448E+02-0.5786838265113E+02-0.5786517174343E+02 +-0.5786188233095E+02-0.5785851248683E+02-0.5785506023664E+02-0.5785152355714E+02 +-0.5784790037514E+02-0.5784418856620E+02-0.5784038595339E+02-0.5783649030596E+02 +-0.5783249933801E+02-0.5782841070712E+02-0.5782422201293E+02-0.5781993079572E+02 +-0.5781553453492E+02-0.5781103064758E+02-0.5780641648686E+02-0.5780168934041E+02 +-0.5779684642873E+02-0.5779188490356E+02-0.5778680184606E+02-0.5778159426523E+02 +-0.5777625909592E+02-0.5777079319716E+02-0.5776519335016E+02-0.5775945625647E+02 +-0.5775357853593E+02-0.5774755672472E+02-0.5774138727322E+02-0.5773506654397E+02 +-0.5772859080944E+02-0.5772195624979E+02-0.5771515895071E+02-0.5770819490096E+02 +-0.5770105999009E+02-0.5769375000593E+02-0.5768626063218E+02-0.5767858744576E+02 +-0.5767072591430E+02-0.5766267139341E+02-0.5765441912401E+02-0.5764596422947E+02 +-0.5763730171283E+02-0.5762842645390E+02-0.5761933320619E+02-0.5761001659396E+02 +-0.5760047110912E+02-0.5759069110802E+02-0.5758067080824E+02-0.5757040428530E+02 +-0.5755988546928E+02-0.5754910814139E+02-0.5753806593049E+02-0.5752675230950E+02 +-0.5751516059177E+02-0.5750328392740E+02-0.5749111529945E+02-0.5747864752009E+02 +-0.5746587322675E+02-0.5745278487811E+02-0.5743937475004E+02-0.5742563493157E+02 +-0.5741155732071E+02-0.5739713362014E+02-0.5738235533305E+02-0.5736721375873E+02 +-0.5735169998816E+02-0.5733580489958E+02-0.5731951915398E+02-0.5730283319051E+02 +-0.5728573722194E+02-0.5726822122993E+02-0.5725027496040E+02-0.5723188791882E+02 +-0.5721304936540E+02-0.5719374831033E+02-0.5717397350903E+02-0.5715371345728E+02 +-0.5713295638642E+02-0.5711169025851E+02-0.5708990276154E+02-0.5706758130462E+02 +-0.5704471301314E+02-0.5702128472411E+02-0.5699728298136E+02-0.5697269403092E+02 +-0.5694750381644E+02-0.5692169797455E+02-0.5689526183054E+02-0.5686818039391E+02 +-0.5684043835420E+02-0.5681202007682E+02-0.5678290959900E+02-0.5675309062612E+02 +-0.5672254652788E+02-0.5669126033492E+02-0.5665921473550E+02-0.5662639207242E+02 +-0.5659277434022E+02-0.5655834318262E+02-0.5652307989020E+02-0.5648696539841E+02 +-0.5644998028588E+02-0.5641210477308E+02-0.5637331872130E+02-0.5633360163210E+02 +-0.5629293264700E+02-0.5625129054775E+02-0.5620865375694E+02-0.5616500033911E+02 +-0.5612030800233E+02-0.5607455410029E+02-0.5602771563490E+02-0.5597976925939E+02 +-0.5593069128209E+02-0.5588045767059E+02-0.5582904405666E+02-0.5577642574165E+02 +-0.5572257770252E+02-0.5566747459855E+02-0.5561109077856E+02-0.5555340028878E+02 +-0.5549437688141E+02-0.5543399402367E+02-0.5537222490755E+02-0.5530904246007E+02 +-0.5524441935415E+02-0.5517832801999E+02-0.5511074065704E+02-0.5504162924629E+02 +-0.5497096556314E+02-0.5489872119062E+02-0.5482486753289E+02-0.5474937582902E+02 +-0.5467221716707E+02-0.5459336249814E+02-0.5451278265054E+02-0.5443044834392E+02 +-0.5434633020326E+02-0.5426039877251E+02-0.5417262452798E+02-0.5408297789121E+02 +-0.5399142924116E+02-0.5389794892583E+02-0.5380250727281E+02-0.5370507459904E+02 +-0.5360562121930E+02-0.5350411745346E+02-0.5340053363243E+02-0.5329484010249E+02 +-0.5318700722805E+02-0.5307700539263E+02-0.5296480499812E+02-0.5285037646202E+02 +-0.5273369021280E+02-0.5261471668335E+02-0.5249342630234E+02-0.5236978948384E+02 +-0.5224377661498E+02-0.5211535804201E+02-0.5198450405480E+02-0.5185118487021E+02 +-0.5171537061443E+02-0.5157703130481E+02-0.5143613683167E+02-0.5129265694052E+02 +-0.5114656121547E+02-0.5099781906446E+02-0.5084639970716E+02-0.5069227216651E+02 +-0.5053540526484E+02-0.5037576762573E+02-0.5021332768275E+02-0.5004805369646E+02 +-0.4987991378072E+02-0.4970887593990E+02-0.4953490811819E+02-0.4935797826232E+02 +-0.4917805439883E+02-0.4899510472695E+02-0.4880909772787E+02-0.4862000229085E+02 +-0.4842778785629E+02-0.4823242457512E+02-0.4803388348355E+02-0.4783213669110E+02 +-0.4762715757918E+02-0.4741892100628E+02-0.4720740351480E+02-0.4699258353329E+02 +-0.4677444156667E+02-0.4655296036595E+02-0.4632812506786E+02-0.4609992329435E+02 +-0.4586834520143E+02-0.4563338346768E+02-0.4539503321357E+02-0.4515329184509E+02 +-0.4490815881852E+02-0.4465963532636E+02-0.4440772391184E+02-0.4415242802226E+02 +-0.4389375151965E+02-0.4363169817227E+02-0.4336627115537E+02-0.4309747259339E+02 +-0.4282530317686E+02-0.4254976188611E+02-0.4227084585025E+02-0.4198855036296E+02 +-0.4170286906862E+02-0.4141379432169E+02-0.4112131771225E+02-0.4082543074003E+02 +-0.4052612561084E+02-0.4022339612208E+02-0.3991723859985E+02-0.3960765284779E+02 +-0.3929464306850E+02-0.3897821872057E+02-0.3865839527812E+02-0.3833519486496E+02 +-0.3800864674093E+02-0.3767878762385E+02-0.3734566183601E+02-0.3700932126970E+02 +-0.3666982517101E+02-0.3632723974567E+02-0.3598163759445E+02-0.3563309698964E+02 +-0.3528170100698E+02-0.3492753653067E+02-0.3457069315166E+02-0.3421126198252E+02 +-0.3384933441412E+02-0.3348500084244E+02-0.3311834939556E+02-0.3274946469359E+02 +-0.3237842667566E+02-0.3200530953042E+02-0.3163018076718E+02-0.3125310046595E+02 +-0.3087412074484E+02-0.3049328548217E+02-0.3011063032936E+02-0.2972618304727E+02 +-0.2933996419358E+02-0.2895198818237E+02-0.2856226472661E+02-0.2817080066182E+02 +-0.2777760213173E+02-0.2738267709552E+02-0.2698603808911E+02-0.2658770514122E+02 +-0.2618770870813E+02-0.2578609245114E+02-0.2538291564193E+02-0.2497825494713E+02 +-0.2457220532595E+02-0.2416487978099E+02-0.2375640774811E+02-0.2334693200332E+02 +-0.2293660411449E+02-0.2252557865693E+02-0.2211400663447E+02-0.2170202875447E+02 +-0.2128976935037E+02-0.2087733177947E+02-0.2046479601551E+02-0.2005221890841E+02 +-0.1963963723725E+02-0.1922707330779E+02-0.1881454252058E+02-0.1840206212148E+02 +-0.1798966027245E+02-0.1757738463872E+02-0.1716530984264E+02-0.1675354333862E+02 +-0.1634222947257E+02-0.1593155167159E+02-0.1552173284993E+02-0.1511303421079E+02 +-0.1470575267611E+02-0.1430021719750E+02-0.1389678420010E+02-0.1349583239647E+02 +-0.1309775718594E+02-0.1270296483063E+02-0.1231186657498E+02-0.1192487285287E+02 +-0.1154238770506E+02-0.1116480351097E+02-0.1079249612071E+02-0.1042582045772E+02 +-0.1006510664683E+02-0.9710656708949E+01-0.9362741849849E+01-0.9021600358365E+01 +-0.8687436117277E+01-0.8360417719317E+01-0.8040678170600E+01-0.7728315154660E+01 +-0.7423391822197E+01-0.7125938064643E+01-0.6835952223882E+01-0.6553403185801E+01 +-0.6278232801938E+01-0.6010358581234E+01-0.5749676592731E+01-0.5496064520020E+01 +-0.5249384809110E+01-0.5009487853138E+01-0.4776215159957E+01-0.4549402451795E+01 +-0.4328882650027E+01-0.4114488702448E+01-0.3906056215143E+01-0.3703425856366E+01 +-0.3506445505457E+01-0.3314972126045E+01-0.3128873349616E+01-0.2948028762987E+01 +-0.2772330901689E+01-0.2601685960384E+01-0.2436014241750E+01-0.2275250375982E+01 +-0.2119343354465E+01-0.1968256432154E+01-0.1821966963304E+01-0.1680466243259E+01 +-0.1543759434032E+01-0.1411865652336E+01-0.1284818294986E+01-0.1162665667781E+01 +-0.1045471970734E+01-0.9333186757936E+00-0.8263063146378E+00-0.7245566759430E+00 +-0.6282153954686E+00-0.5374549104383E+00-0.4524777428475E+00-0.3735200751699E+00 +-0.3008555858670E+00-0.2347995203282E+00-0.1757129836583E+00-0.1240074231686E+00 +-0.8014949234240E-01 + 0.0000000000000E+00 + 506 0.1107098951009E+02 + 0.4466231388884E-04 0.4686168755090E-04 0.4916934354115E-04 0.5159061110045E-04 + 0.5413108161603E-04 0.5679662150610E-04 0.5959338573723E-04 0.6252783200484E-04 + 0.6560673561005E-04 0.6883720506642E-04 0.7222669847273E-04 0.7578304068898E-04 + 0.7951444135522E-04 0.8342951379431E-04 0.8753729484192E-04 0.9184726564913E-04 + 0.9636937350527E-04 0.1011140547309E-03 0.1060922586933E-03 0.1113154729992E-03 + 0.1167957499226E-03 0.1225457341280E-03 0.1285786917519E-03 0.1349085409098E-03 + 0.1415498836976E-03 0.1485180397609E-03 0.1558290815084E-03 0.1634998710498E-03 + 0.1715480989428E-03 0.1799923248369E-03 0.1888520201067E-03 0.1981476125721E-03 + 0.2079005334074E-03 0.2181332663442E-03 0.2288693992835E-03 0.2401336784300E-03 + 0.2519520650754E-03 0.2643517951578E-03 0.2773614417317E-03 0.2910109804928E-03 + 0.3053318585037E-03 0.3203570662780E-03 0.3361212133847E-03 0.3526606077461E-03 + 0.3700133388061E-03 0.3882193647598E-03 0.4073206040389E-03 0.4273610312624E-03 + 0.4483867778664E-03 0.4704462376432E-03 0.4935901774246E-03 0.5178718531617E-03 + 0.5433471316609E-03 0.5700746182509E-03 0.5981157906677E-03 0.6275351394588E-03 + 0.6584003152221E-03 0.6907822830094E-03 0.7247554842421E-03 0.7603980065006E-03 + 0.7977917615691E-03 0.8370226721332E-03 0.8781808675486E-03 0.9213608891176E-03 + 0.9666619053324E-03 0.1014187937565E-02 0.1064048096705E-02 0.1116356831278E-02 + 0.1171234187585E-02 0.1228806082457E-02 0.1289204589212E-02 0.1352568237466E-02 + 0.1419042327446E-02 0.1488779259518E-02 0.1561938879638E-02 0.1638688841506E-02 + 0.1719204986215E-02 0.1803671740228E-02 0.1892282532564E-02 0.1985240232103E-02 + 0.2082757605983E-02 0.2185057800067E-02 0.2292374842570E-02 0.2404954171904E-02 + 0.2523053189927E-02 0.2646941841780E-02 0.2776903223587E-02 0.2913234219321E-02 + 0.3056246168245E-02 0.3206265564334E-02 0.3363634789229E-02 0.3528712880275E-02 + 0.3701876335316E-02 0.3883519955956E-02 0.4074057731124E-02 0.4273923762809E-02 + 0.4483573235951E-02 0.4703483434568E-02 0.4934154806262E-02 0.5176112077379E-02 + 0.5429905421182E-02 0.5696111681502E-02 0.5975335654449E-02 0.6268211430892E-02 + 0.6575403802499E-02 0.6897609734312E-02 0.7235559906899E-02 0.7590020331326E-02 + 0.7961794040273E-02 0.8351722858819E-02 0.8760689258531E-02 0.9189618298691E-02 + 0.9639479658634E-02 0.1011128976535E-01 0.1060611402069E-01 0.1112506913272E-01 + 0.1166932555589E-01 0.1224011004504E-01 0.1283870832818E-01 0.1346646790370E-01 + 0.1412480096727E-01 0.1481518747443E-01 0.1553917834492E-01 0.1629839881496E-01 + 0.1709455194414E-01 0.1792942228374E-01 0.1880487971360E-01 0.1972288345495E-01 + 0.2068548626691E-01 0.2169483883475E-01 0.2275319435814E-01 0.2386291334821E-01 + 0.2502646864234E-01 0.2624645064611E-01 0.2752557281216E-01 0.2886667736605E-01 + 0.3027274128964E-01 0.3174688257294E-01 0.3329236674564E-01 0.3491261370022E-01 + 0.3661120481865E-01 0.3839189041541E-01 0.4025859750979E-01 0.4221543794120E-01 + 0.4426671684121E-01 0.4641694147712E-01 0.4867083048177E-01 0.5103332348538E-01 + 0.5350959116511E-01 0.5610504572917E-01 0.5882535185234E-01 0.6167643808053E-01 + 0.6466450872261E-01 0.6779605624810E-01 0.7107787420996E-01 0.7451707071226E-01 + 0.7812108244313E-01 0.8189768929369E-01 0.8585502958465E-01 0.9000161592224E-01 + 0.9434635170618E-01 0.9889854831258E-01 0.1036679429754E+00 0.1086647173903E+00 + 0.1138995170657E+00 0.1193834714450E+00 0.1251282148275E+00 0.1311459081104E+00 + 0.1374492613815E+00 0.1440515573859E+00 0.1509666758962E+00 0.1582091190102E+00 + 0.1657940374051E+00 0.1737372575749E+00 0.1820553100769E+00 0.1907654588163E+00 + 0.1998857313929E+00 0.2094349505399E+00 0.2194327666774E+00 0.2298996916085E+00 + 0.2408571333824E+00 0.2523274323479E+00 0.2643338984214E+00 0.2769008495907E+00 + 0.2900536516759E+00 0.3038187593656E+00 0.3182237585468E+00 0.3332974099434E+00 + 0.3490696940756E+00 0.3655718575520E+00 0.3828364607012E+00 0.4008974265470E+00 + 0.4197900911286E+00 0.4395512551630E+00 0.4602192370407E+00 0.4818339271437E+00 + 0.5044368434680E+00 0.5280711885272E+00 0.5527819075065E+00 0.5786157476331E+00 + 0.6056213187166E+00 0.6338491548085E+00 0.6633517769201E+00 0.6941837567277E+00 + 0.7264017811850E+00 0.7600647179515E+00 0.7952336815316E+00 0.8319721000099E+00 + 0.8703457822512E+00 0.9104229854211E+00 0.9522744826652E+00 0.9959736307713E+00 + 0.1041596437617E+01 0.1089221629188E+01 0.1138930715938E+01 0.1190808058217E+01 + 0.1244940930515E+01 0.1301419584186E+01 0.1360337308348E+01 0.1421790488590E+01 + 0.1485878663098E+01 0.1552704575792E+01 0.1622374226024E+01 0.1694996914351E+01 + 0.1770685283878E+01 0.1849555356603E+01 0.1931726564196E+01 0.2017321772562E+01 + 0.2106467299530E+01 0.2199292924957E+01 0.2295931892477E+01 0.2396520902110E+01 + 0.2501200092873E+01 0.2610113014503E+01 0.2723406587340E+01 0.2841231049391E+01 + 0.2963739889512E+01 0.3091089765636E+01 0.3223440406886E+01 0.3360954498381E+01 + 0.3503797547507E+01 0.3652137730326E+01 0.3806145716818E+01 0.3965994473538E+01 + 0.4131859042276E+01 0.4303916293232E+01 0.4482344651201E+01 0.4667323793228E+01 + 0.4859034316145E+01 0.5057657372407E+01 0.5263374272594E+01 0.5476366052983E+01 + 0.5696813006533E+01 0.5924894175695E+01 0.6160786805434E+01 0.6404665754904E+01 + 0.6656702866268E+01 0.6917066289185E+01 0.7185919759598E+01 0.7463421831538E+01 + 0.7749725060762E+01 0.8044975139195E+01 0.8349309979308E+01 0.8662858747720E+01 + 0.8985740847569E+01 0.9318064849392E+01 0.9659927370554E+01 0.1001141190356E+02 + 0.1037258759394E+02 0.1074350796868E+02 0.1112420961681E+02 0.1151471082390E+02 + 0.1191501016300E+02 0.1232508504487E+02 0.1274489023115E+02 0.1317435631449E+02 + 0.1361338817064E+02 0.1406186338785E+02 0.1451963068007E+02 0.1498650829104E+02 + 0.1546228239710E+02 0.1594670551789E+02 0.1643949494442E+02 0.1694033119556E+02 + 0.1744885651460E+02 0.1796467341877E+02 0.1848734331551E+02 0.1901638520055E+02 + 0.1955127445371E+02 0.2009144174955E+02 0.2063627210099E+02 0.2118510405509E+02 + 0.2173722906107E+02 0.2229189103165E+02 0.2284828611975E+02 0.2340556273300E+02 + 0.2396282180962E+02 0.2451911737936E+02 0.2507345743375E+02 0.2562480513007E+02 + 0.2617208035325E+02 0.2671416165993E+02 0.2724988862812E+02 0.2777806463513E+02 + 0.2829746008548E+02 0.2880681610871E+02 0.2930484874544E+02 0.2979025363740E+02 + 0.3026171123486E+02 0.3071789253135E+02 0.3115746533198E+02 0.3157910105782E+02 + 0.3198148208357E+02 0.3236330960113E+02 0.3272331199546E+02 0.3306025371324E+02 + 0.3337294459781E+02 0.3366024965663E+02 0.3392109921987E+02 0.3415449944040E+02 + 0.3435954307686E+02 0.3453542049274E+02 0.3468143079498E+02 0.3479699302655E+02 + 0.3488165731780E+02 0.3493511589235E+02 0.3495721381369E+02 0.3494795935038E+02 + 0.3490753382897E+02 0.3483630083625E+02 0.3473481462579E+02 0.3460382757756E+02 + 0.3444429655535E+02 0.3425738800338E+02 0.3404448162212E+02 0.3380717246391E+02 + 0.3354727129169E+02 0.3326680304874E+02 0.3296800329510E+02 0.3265331247613E+02 + 0.3232536790165E+02 0.3198699333000E+02 0.3164118606989E+02 0.3129110153510E+02 + 0.3094003521176E+02 0.3059140202599E+02 0.3024871313023E+02 0.2991555016032E+02 + 0.2959553705120E+02 0.2929230953697E+02 0.2900948250119E+02 0.2875061538428E+02 + 0.2851917586659E+02 0.2831850227023E+02 0.2815176470715E+02 0.2802192565383E+02 + 0.2793170021134E+02 0.2788351653054E+02 0.2787947688468E+02 0.2792131990046E+02 + 0.2801038448265E+02 0.2814757598564E+02 0.2833333519714E+02 0.2856761070386E+02 + 0.2884983520550E+02 0.2917890633182E+02 0.2955317249629E+02 0.2997042428986E+02 + 0.3042789187799E+02 0.3092224881398E+02 0.3144962262196E+02 0.3200561243270E+02 + 0.3258531387640E+02 0.3318335134865E+02 0.3379391766911E+02 0.3441082104948E+02 + 0.3502753917740E+02 0.3563728010893E+02 0.3623304954455E+02 0.3680772394471E+02 + 0.3735412882194E+02 0.3786512142992E+02 0.3833367695732E+02 0.3875297722802E+02 + 0.3911650081157E+02 0.3941811336014E+02 0.3965215691415E+02 0.3981353685861E+02 + 0.3989780516931E+02 0.3990123856396E+02 0.3982091016935E+02 0.3965475333407E+02 + 0.3940161625820E+02 0.3906130617754E+02 0.3863462193194E+02 0.3812337386511E+02 + 0.3753039014685E+02 0.3685950877848E+02 0.3611555473624E+02 0.3530430192577E+02 + 0.3443241985935E+02 0.3350740522622E+02 0.3253749879883E+02 0.3153158840250E+02 + 0.3049909896595E+02 0.2944987096051E+02 0.2839402882023E+02 0.2734184120534E+02 + 0.2630357522141E+02 0.2528934692668E+02 0.2430897064308E+02 0.2337180972477E+02 + 0.2248663152317E+02 0.2166146931496E+02 0.2090349393004E+02 0.2021889767187E+02 + 0.1961279305521E+02 0.1908912851839E+02 0.1865062306764E+02 0.1829872142238E+02 + 0.1803357083895E+02 0.1785402035633E+02 0.1775764274747E+02 0.1774077898455E+02 + 0.1779860454710E+02 0.1792521642732E+02 0.1811373922932E+02 0.1835644832684E+02 + 0.1864490764895E+02 0.1897011931635E+02 0.1932268206261E+02 0.1969295515712E+02 + 0.2007122440758E+02 0.2044786676910E+02 0.2081351012793E+02 0.2115918496275E+02 + 0.2147646481333E+02 0.2175759279840E+02 0.2199559181346E+02 0.2218435649034E+02 + 0.2231872549946E+02 0.2239453330431E+02 0.2240864101802E+02 0.2235894654429E+02 + 0.2224437469289E+02 0.2206484842595E+02 0.2182124280267E+02 0.2151532353452E+02 + 0.2114967233429E+02 0.2072760143464E+02 0.2025305976488E+02 0.1973053331009E+02 + 0.1916494213989E+02 0.1856153649128E+02 0.1792579413091E+02 0.1726332101622E+02 + 0.1657975703343E+02 0.1588068832385E+02 0.1517156742883E+02 0.1445764219821E+02 + 0.1374389412561E+02 0.1303498650365E+02 0.1233522254034E+02 0.1164851334798E+02 + 0.1097835551261E+02 0.1032781777665E+02 0.9699536221786E+01 0.9095717222809E+01 + 0.8518147356056E+01 0.7968209386526E+01 0.7446903424017E+01 0.6954872328727E+01 + 0.6492430458018E+01 0.6059594876080E+01 0.5656118194275E+01 0.5281522269376E+01 + 0.4935132057062E+01 0.4616108996362E+01 0.4323483384685E+01 0.4056185290384E+01 + 0.3813073638227E+01 0.3592963190618E+01 0.3394649232174E+01 0.3216929845615E+01 + 0.3058625741533E+01 0.2918597672240E+01 0.2795761519768E+01 0.2689101199396E+01 + 0.2597679562551E+01 0.2520647516209E+01 0.2457251600076E+01 0.2406840277882E+01 + 0.2368869205125E+01 0.2342905732748E+01 0.2328632894220E+01 0.2325853102008E+01 + 0.2334491747493E+01 0.2354600854439E+01 0.2386362877310E+01 0.2430094521020E+01 + 0.2486251215767E+01 0.0000000000000E+00 0.0000000000000E+00 0.0000000000000E+00 + 0.0000000000000E+00 0.0000000000000E+00 + 7 506 + 1 0 -1 -640.73679 + 2 0 -1 -75.48546 + 2 1 1 -66.16089 + 2 1 -2 -66.16089 + 3 0 -1 -7.29406 + 3 1 1 -4.39390 + 3 1 -2 -4.39390 + 0.4409225560631E-04 0.4626355713163E-04 0.4854175890496E-04 0.5093212214653E-04 + 0.5344016687699E-04 0.5607168463760E-04 0.5883275183501E-04 0.6172974374084E-04 + 0.6476934917855E-04 0.6795858593109E-04 0.7130481690458E-04 0.7481576708519E-04 + 0.7849954132796E-04 0.8236464301822E-04 0.8641999364856E-04 0.9067495335592E-04 + 0.9513934246583E-04 0.9982346409326E-04 0.1047381278515E-03 0.1098946747234E-03 + 0.1153050031520E-03 0.1209815964095E-03 0.1269375513081E-03 0.1331866083173E-03 + 0.1397431831569E-03 0.1466223999378E-03 0.1538401259260E-03 0.1614130080092E-03 + 0.1693585109488E-03 0.1776949575055E-03 0.1864415705280E-03 0.1956185171027E-03 + 0.2052469548636E-03 0.2153490805681E-03 0.2259481810492E-03 0.2370686866599E-03 + 0.2487362273310E-03 0.2609776913704E-03 0.2738212871364E-03 0.2872966077254E-03 + 0.3014346988207E-03 0.3162681298564E-03 0.3318310686575E-03 0.3481593597245E-03 + 0.3652906063413E-03 0.3832642566905E-03 0.4021216941719E-03 0.4219063321280E-03 + 0.4426637131897E-03 0.4644416134681E-03 0.4872901518252E-03 0.5112619044722E-03 + 0.5364120251516E-03 0.5627983711745E-03 0.5904816355972E-03 0.6195254858331E-03 + 0.6499967090122E-03 0.6819653644139E-03 0.7155049433163E-03 0.7506925366182E-03 + 0.7876090106116E-03 0.8263391912961E-03 0.8669720576493E-03 0.9096009442830E-03 + 0.9543237539390E-03 0.1001243180299E-02 0.1050466941601E-02 0.1102108025592E-02 + 0.1156284946348E-02 0.1213122013544E-02 0.1272749614762E-02 0.1335304511479E-02 + 0.1400930149366E-02 0.1469776983607E-02 0.1542002819944E-02 0.1617773172211E-02 + 0.1697261637133E-02 0.1780650287223E-02 0.1868130082648E-02 0.1959901302949E-02 + 0.2056173999585E-02 0.2157168470277E-02 0.2263115756193E-02 0.2374258163069E-02 + 0.2490849807387E-02 0.2613157188819E-02 0.2741459790163E-02 0.2876050706089E-02 + 0.3017237302051E-02 0.3165341904793E-02 0.3320702525940E-02 0.3483673620235E-02 + 0.3654626880062E-02 0.3833952067949E-02 0.4022057888851E-02 0.4219372904067E-02 + 0.4426346488759E-02 0.4643449835105E-02 0.4871177003219E-02 0.5110046022081E-02 + 0.5360600042797E-02 0.5623408546631E-02 0.5899068610366E-02 0.6188206231636E-02 + 0.6491477717033E-02 0.6809571135881E-02 0.7143207842708E-02 0.7493144071602E-02 + 0.7860172605750E-02 0.8245124525616E-02 0.8648871039370E-02 0.9072325399339E-02 + 0.9516444908405E-02 0.9982233020453E-02 0.1047074153916E-01 0.1098307291957E-01 + 0.1152038267717E-01 0.1208388190922E-01 0.1267483993350E-01 0.1329458704980E-01 + 0.1394451742941E-01 0.1462609213872E-01 0.1534084230257E-01 0.1609037241379E-01 + 0.1687636379532E-01 0.1770057822173E-01 0.1856486170711E-01 0.1947114846668E-01 + 0.2042146505978E-01 0.2141793472203E-01 0.2246278189516E-01 0.2355833696274E-01 + 0.2470704120102E-01 0.2591145195398E-01 0.2717424804230E-01 0.2849823541607E-01 + 0.2988635306193E-01 0.3134167917501E-01 0.3286743760726E-01 0.3446700460335E-01 + 0.3614391583653E-01 0.3790187375660E-01 0.3974475526314E-01 0.4167661971712E-01 + 0.4370171730499E-01 0.4582449776927E-01 0.4804961952071E-01 0.5038195914717E-01 + 0.5282662133496E-01 0.5538894921923E-01 0.5807453517987E-01 0.6088923210072E-01 + 0.6383916510953E-01 0.6693074381759E-01 0.7017067507760E-01 0.7356597627956E-01 + 0.7712398920468E-01 0.8085239445788E-01 0.8475922650007E-01 0.8885288930190E-01 + 0.9314217264116E-01 0.9763626906647E-01 0.1023447915507E+00 0.1072777918577E+00 + 0.1124457796460E+00 0.1178597423354E+00 0.1235311657601E+00 0.1294720556341E+00 + 0.1356949598554E+00 0.1422129916740E+00 0.1490398537509E+00 0.1561898631334E+00 + 0.1636779771747E+00 0.1715198204242E+00 0.1797317125137E+00 0.1883306970686E+00 + 0.1973345716686E+00 0.2067619188850E+00 0.2166321384196E+00 0.2269654803720E+00 + 0.2377830796579E+00 0.2491069916032E+00 0.2609602287382E+00 0.2733667988098E+00 + 0.2863517440368E+00 0.2999411816236E+00 0.3141623455509E+00 0.3290436296583E+00 + 0.3446146320323E+00 0.3609062007087E+00 0.3779504806979E+00 0.3957809623378E+00 + 0.4144325309731E+00 0.4339415179612E+00 0.4543457529938E+00 0.4756846177245E+00 + 0.4979991006843E+00 0.5213318534621E+00 0.5457272481202E+00 0.5712314358103E+00 + 0.5978924065457E+00 0.6257600500779E+00 0.6548862178188E+00 0.6853247857379E+00 + 0.7171317181556E+00 0.7503651323422E+00 0.7850853638191E+00 0.8213550322495E+00 + 0.8592391077872E+00 0.8988049777434E+00 0.9401225134109E+00 0.9832641368704E+00 + 0.1028304887587E+01 0.1075322488585E+01 0.1124397411964E+01 0.1175612943517E+01 + 0.1229055246149E+01 0.1284813421825E+01 0.1342979571703E+01 0.1403648854100E+01 + 0.1466919539922E+01 0.1532893065135E+01 0.1601674079842E+01 0.1673370493491E+01 + 0.1748093515700E+01 0.1825957692162E+01 0.1907080935042E+01 0.1991584547244E+01 + 0.2079593239890E+01 0.2171235142309E+01 0.2266641803781E+01 0.2365948186252E+01 + 0.2469292647181E+01 0.2576816911627E+01 0.2688666032661E+01 0.2804988339104E+01 + 0.2925935369561E+01 0.3051661791695E+01 0.3182325305570E+01 0.3318086529919E+01 + 0.3459108870088E+01 0.3605558366378E+01 0.3757603521465E+01 0.3915415105520E+01 + 0.4079165937610E+01 0.4249030641940E+01 0.4425185377412E+01 0.4607807538996E+01 + 0.4797075429345E+01 0.4993167899077E+01 0.5196263954114E+01 0.5406542328487E+01 + 0.5624181020981E+01 0.5849356794027E+01 0.6082244633263E+01 0.6323017166188E+01 + 0.6571844038436E+01 0.6828891246187E+01 0.7094320423361E+01 0.7368288082300E+01 + 0.7650944806773E+01 0.7942434396261E+01 0.8242892960640E+01 0.8552447964560E+01 + 0.8871217221018E+01 0.9199307833869E+01 0.9536815089270E+01 0.9883821296363E+01 + 0.1024039457782E+02 0.1060658761128E+02 0.1098243632296E+02 0.1136795853555E+02 + 0.1176315257233E+02 0.1216799582079E+02 0.1258244325879E+02 0.1300642594766E+02 + 0.1343984949658E+02 0.1388259250400E+02 0.1433450498188E+02 0.1479540677009E+02 + 0.1526508594836E+02 0.1574329725477E+02 0.1622976052006E+02 0.1672415912855E+02 + 0.1722613851697E+02 0.1773530472378E+02 0.1825122300263E+02 0.1877341651432E+02 + 0.1930136511310E+02 0.1983450424395E+02 0.2037222396836E+02 0.2091386813766E+02 + 0.2145873373321E+02 0.2200607039433E+02 0.2255508015510E+02 0.2310491741251E+02 + 0.2365468914837E+02 0.2420345542864E+02 0.2475023020351E+02 0.2529398243231E+02 + 0.2583363755680E+02 0.2636807934652E+02 0.2689615213923E+02 0.2741666349849E+02 + 0.2792838730971E+02 0.2843006733418E+02 0.2892042123901E+02 0.2939814511862E+02 + 0.2986191852077E+02 0.3031040998710E+02 0.3074228311466E+02 0.3115620314071E+02 + 0.3155084404877E+02 0.3192489618880E+02 0.3227707439874E+02 0.3260612660892E+02 + 0.3291084290390E+02 0.3319006500965E+02 0.3344269616642E+02 0.3366771133953E+02 + 0.3386416771261E+02 0.3403121539869E+02 0.3416810829625E+02 0.3427421500807E+02 + 0.3434902973216E+02 0.3439218302474E+02 0.3440345232691E+02 0.3438277213809E+02 + 0.3433024371164E+02 0.3424614414070E+02 0.3413093469600E+02 0.3398526827222E+02 + 0.3380999579507E+02 0.3360617143880E+02 0.3337505650271E+02 0.3311812179588E+02 + 0.3283704838226E+02 0.3253372654299E+02 0.3221025282037E+02 0.3186892501752E+02 + 0.3151223504038E+02 0.3114285948395E+02 0.3076364788252E+02 0.3037760856465E+02 + 0.2998789207735E+02 0.2959777217003E+02 0.2921062435804E+02 0.2882990211681E+02 + 0.2845911079107E+02 0.2810177933895E+02 0.2776143006763E+02 0.2744154655469E+02 + 0.2714553998794E+02 0.2687671419321E+02 0.2663822966028E+02 0.2643306690908E+02 + 0.2626398957538E+02 0.2613350762521E+02 0.2604384113571E+02 0.2599688510343E+02 + 0.2599417576011E+02 0.2603685888937E+02 0.2612566064469E+02 0.2626086136933E+02 + 0.2644227291204E+02 0.2666921991735E+02 0.2694052554665E+02 0.2725450205481E+02 + 0.2760894660761E+02 0.2800114267703E+02 0.2842786729525E+02 0.2888540438398E+02 + 0.2936956430398E+02 0.2987570969169E+02 0.3039878756543E+02 0.3093336759489E+02 + 0.3147368633509E+02 0.3201369713094E+02 0.3254712530307E+02 0.3306752813025E+02 + 0.3356835905123E+02 0.3404303541988E+02 0.3448500906454E+02 0.3488783882669E+02 + 0.3524526418739E+02 0.3555127903375E+02 0.3580020457376E+02 0.3598676037715E+02 + 0.3610613250397E+02 0.3615403768263E+02 0.3612678251512E+02 0.3602131672114E+02 + 0.3583527948366E+02 0.3556703802767E+02 0.3521571765027E+02 0.3478122252413E+02 + 0.3426424671654E+02 0.3366627500198E+02 0.3298957319568E+02 0.3223716789758E+02 + 0.3141281570790E+02 0.3052096215476E+02 0.2956669075845E+02 0.2855566284167E+02 + 0.2749404887814E+02 0.2638845234779E+02 0.2524582723291E+02 0.2407339043950E+02 + 0.2287853055970E+02 0.2166871449729E+02 0.2045139355727E+02 0.1923391064578E+02 + 0.1802341023676E+02 0.1682675273230E+02 0.1565043478062E+02 0.1450051696134E+02 + 0.1338256019706E+02 0.1230157192464E+02 0.1126196292951E+02 0.1026751545257E+02 + 0.9321362909432E+01 0.8425981275089E+01 0.7583191901465E+01 0.6794175261903E+01 + 0.6059494865650E+01 0.5379130366162E+01 0.4752518705559E+01 0.4178601998048E+01 + 0.3655880758907E+01 0.3182471032599E+01 0.2756163962111E+01 0.2374486369377E+01 + 0.2034760980809E+01 0.1734165029103E+01 0.1469786088747E+01 0.1238674153439E+01 + 0.1037889133672E+01 0.8645431361246E+00 0.7158370767404E+00 0.5890913699236E+00 + 0.4817706203687E+00 0.3915024156657E+00 0.3160904714400E+00 0.2535225120539E+00 + 0.2019733756073E+00 0.1598039103235E+00 0.1255562799011E+00 0.9794631892314E-01 + 0.7585357791733E-01 0.5830967412663E-01 0.4448552213151E-01 0.3367796226096E-01 + 0.2529623850564E-01 0.1884870558144E-01 0.1393007076885E-01 0.1020940358262E-01 + 0.7419078028716E-02 0.5344750346979E-02 0.3816421208942E-02 0.2700586188926E-02 + 0.1893442216380E-02 0.1315090419547E-02 0.9046566650320E-03 0.6162392835174E-03 + 0.4155878719967E-03 0.2774165213365E-03 0.1832581809178E-03 0.1197730526121E-03 + 0.7743193076525E-04 0.4950444190087E-04 0.3129151194295E-04 0.1955058048600E-04 + 0.1207071812656E-04 0.7362641218119E-05 0.4435525089898E-05 0.2638445388488E-05 + 0.1549246678554E-05 0.8977120001955E-06 0.5131790041795E-06 0.2893238614370E-06 + 0.1608229198820E-06 0.8810921461427E-07 0.4756224058255E-07 0.2528862360754E-07 + 0.1323916722763E-07 0.6822062272233E-08 0.3458863031005E-08 0.1724856503403E-08 + 0.8456872364263E-09 0.4075069660558E-09 0.1929105265242E-09 0.8967998710594E-10 + 0.4092356143162E-10 0.1832334173129E-10 0.8046431636751E-11 0.3464132526127E-11 + 0.1461384618899E-11 0.6040098602063E-12 0.2446953128078E-12 0.9687246597290E-13 + 0.3784670001084E-13 0.1465738447659E-13 0.5521914226558E-14 0.1995959733784E-14 + 0.7040070978009E-15 0.2421613635985E-15 diff --git a/Test/Fe1024/i_lsms b/Test/Fe1024/i_lsms new file mode 100644 index 000000000..93390a1bc --- /dev/null +++ b/Test/Fe1024/i_lsms @@ -0,0 +1,155 @@ +systemid="fe2" +system_title = "Iron test for LSMS 3" +pot_in_type=1 +-- write potential out. Use this only when xRepeat, yRepeat and zRepeat = 1 +pot_out_type=1 +num_atoms=2 +nspin=3 +mtasa=0 + +iprint=0 +default_iprint=-1 +print_node=0 +-- istop="buildKKRMatrix" +istop="main" + +nscf=2 + +xRepeat=8 +yRepeat=8 +zRepeat=8 +makeTypesUnique=1 + +-- energyContour = {npts=1,grid=0,ebot=-0.2,etop=0.0,eitop=0.825,eibot=0.1} +-- energyContour = {npts=11,grid=2,ebot=-0.3,etop=0.0,eitop=0.825,eibot=0.025,maxGroupSize=5} +energyContour = {npts=31,grid=2,ebot=-0.3,etop=0.0,eitop=0.825,eibot=0.0025} + +a = 5.42 + +bravais = {} +bravais[1]={a,0,0} +bravais[2]={0,a,0} +bravais[3]={0,0,a} + +-- site_default={lmax=3,rLIZ=12.5,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} +-- site_default={lmax=3,rLIZ=8.5,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} +-- site_default={lmax=3,rLIZ=5.0,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} +site_default={lmax=3,rLIZ=0.1,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} + +-- Possible choices of mixing parameters +-- quantity : charge, potential, moment_magnitude, moment_direction, noQuantity +-- algorithm : simple, broyden, noAlgorithm +-- mixing={} +--mixing = { {quantity = "charge", algorithm = "simple", mixing_parameter = 0.05} } +mixing = { {quantity = "potential", algorithm = "simple", mixing_parameter = 0.0} } +--mixing = { {quantity = "potential", algorithm = "broyden", mixing_parameter = 0.05}, {quantity = "moment_magnitude", algorithm = "noAlgorithm", mixing_parameter = 0.01} } + +numberOfMixQuantities = 0 + +for k,v in pairs(mixing) do + numberOfMixQuantities = numberOfMixQuantities + 1 +end + +--[[ +print("Site defaults:") +for k,v in pairs(site_default) do + print(k," : ",v) +end +--]] + +site = {} +for i =1,num_atoms do site[i]={} end + +site[1].pos={0,0,0} +site[1].evec={0,0,1} +site[2].pos={0.5*a,0.5*a,0.5*a} +site[2].evec={0,0,1} + +-- set site defaults +for i =1,num_atoms do + for k,v in pairs(site_default) do + if(site[i][k]==nil) then site[i][k]=v end + end +end + + +--[[ +function deepcopy(t) +if type(t) ~= 'table' then return t end +local mt = getmetatable(t) +local res = {} +for k,v in pairs(t) do +if type(v) == 'table' then +v = deepcopy(v) +end +res[k] = v +end +-- setmetatable(res,mt) +return res +end + + +-- repeat nx*ny*nz times +ntemp=num_atoms +-- ix==1 first: +ix=0 +-- iy==1 +iy=0 +for iz=1,nz-1 do + for ib=1,num_atoms do + ntemp=ntemp+1 + site[ntemp]={pos={0,0,0},evec={0,0,1}} + site[ntemp].pos[1]=site[ib].pos[1]+bravais[1][1]*ix+bravais[2][1]*iy+bravais[3][1]*iz + site[ntemp].pos[2]=site[ib].pos[2]+bravais[1][2]*ix+bravais[2][2]*iy+bravais[3][2]*iz + site[ntemp].pos[3]=site[ib].pos[3]+bravais[1][3]*ix+bravais[2][3]*iy+bravais[3][3]*iz + site[ntemp].evec[1]=site[ib].evec[1] + site[ntemp].evec[2]=site[ib].evec[2] + site[ntemp].evec[3]=site[ib].evec[3] + site[ntemp].type=ib + end +end +-- iy!=1 +for iy =1,ny-1 do + for iz=0,nz-1 do + for ib=1,num_atoms do + ntemp=ntemp+1 + site[ntemp]={pos={0,0,0},evec={0,0,1}} + site[ntemp].pos[1]=site[ib].pos[1]+bravais[1][1]*ix+bravais[2][1]*iy+bravais[3][1]*iz + site[ntemp].pos[2]=site[ib].pos[2]+bravais[1][2]*ix+bravais[2][2]*iy+bravais[3][2]*iz + site[ntemp].pos[3]=site[ib].pos[3]+bravais[1][3]*ix+bravais[2][3]*iy+bravais[3][3]*iz + site[ntemp].evec[1]=site[ib].evec[1] + site[ntemp].evec[2]=site[ib].evec[2] + site[ntemp].evec[3]=site[ib].evec[3] + site[ntemp].type=ib + end + end +end +-- ix != 1 +for ix=1,nx-1 do + for iy =0,ny-1 do + for iz=0,nz-1 do + for ib=1,num_atoms do + ntemp=ntemp+1 + site[ntemp]={pos={0,0,0},evec={0,0,1}} + site[ntemp].pos[1]=site[ib].pos[1]+bravais[1][1]*ix+bravais[2][1]*iy+bravais[3][1]*iz + site[ntemp].pos[2]=site[ib].pos[2]+bravais[1][2]*ix+bravais[2][2]*iy+bravais[3][2]*iz + site[ntemp].pos[3]=site[ib].pos[3]+bravais[1][3]*ix+bravais[2][3]*iy+bravais[3][3]*iz + site[ntemp].evec[1]=site[ib].evec[1] + site[ntemp].evec[2]=site[ib].evec[2] + site[ntemp].evec[3]=site[ib].evec[3] + site[ntemp].type=ib + end + end + end +end +num_atoms=ntemp +bravais[1][1]=bravais[1][1]*nx +bravais[1][2]=bravais[1][2]*nx +bravais[1][3]=bravais[1][3]*nx +bravais[2][1]=bravais[2][1]*ny +bravais[2][2]=bravais[2][2]*ny +bravais[2][3]=bravais[2][3]*ny +bravais[3][1]=bravais[3][1]*nz +bravais[3][2]=bravais[3][2]*nz +bravais[3][3]=bravais[3][3]*nz +--]] diff --git a/Test/Fe1024/v_fe2.0 b/Test/Fe1024/v_fe2.0 new file mode 100755 index 000000000..f3c4e967f --- /dev/null +++ b/Test/Fe1024/v_fe2.0 @@ -0,0 +1,1542 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Fe. + 2 0.0000000000000D+00 + LSMS: xx z= 26. xvalws= 5.22926 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728400909D+02-0.5199725115555D+02-0.5199721790459D+02-0.5199718425142D+02 +-0.5199715019116D+02-0.5199711571889D+02-0.5199708082964D+02-0.5199704551834D+02 +-0.5199700977990D+02-0.5199697360915D+02-0.5199693700086D+02-0.5199689994973D+02 +-0.5199686245042D+02-0.5199682449748D+02-0.5199678608545D+02-0.5199674720876D+02 +-0.5199670786180D+02-0.5199666803887D+02-0.5199662773421D+02-0.5199658694201D+02 +-0.5199654565635D+02-0.5199650387127D+02-0.5199646158073D+02-0.5199641877860D+02 +-0.5199637545872D+02-0.5199633161480D+02-0.5199628724051D+02-0.5199624232942D+02 +-0.5199619687506D+02-0.5199615087084D+02-0.5199610431012D+02-0.5199605718616D+02 +-0.5199600949214D+02-0.5199596122116D+02-0.5199591236626D+02-0.5199586292036D+02 +-0.5199581287632D+02-0.5199576222688D+02-0.5199571096474D+02-0.5199565908248D+02 +-0.5199560657259D+02-0.5199555342748D+02-0.5199549963947D+02-0.5199544520078D+02 +-0.5199539010352D+02-0.5199533433975D+02-0.5199527790139D+02-0.5199522078028D+02 +-0.5199516296816D+02-0.5199510445666D+02-0.5199504523733D+02-0.5199498530160D+02 +-0.5199492464081D+02-0.5199486324617D+02-0.5199480110883D+02-0.5199473821977D+02 +-0.5199467456990D+02-0.5199461015004D+02-0.5199454495085D+02-0.5199447896290D+02 +-0.5199441217666D+02-0.5199434458246D+02-0.5199427617052D+02-0.5199420693096D+02 +-0.5199413685375D+02-0.5199406592876D+02-0.5199399414573D+02-0.5199392149428D+02 +-0.5199384796390D+02-0.5199377354396D+02-0.5199369822368D+02-0.5199362199218D+02 +-0.5199354483843D+02-0.5199346675127D+02-0.5199338771940D+02-0.5199330773139D+02 +-0.5199322677567D+02-0.5199314484053D+02-0.5199306191412D+02-0.5199297798443D+02 +-0.5199289303934D+02-0.5199280706654D+02-0.5199272005361D+02-0.5199263198797D+02 +-0.5199254285685D+02-0.5199245264737D+02-0.5199236134649D+02-0.5199226894099D+02 +-0.5199217541751D+02-0.5199208076251D+02-0.5199198496230D+02-0.5199188800302D+02 +-0.5199178987064D+02-0.5199169055096D+02-0.5199159002963D+02-0.5199148829207D+02 +-0.5199138532359D+02-0.5199128110928D+02-0.5199117563407D+02-0.5199106888269D+02 +-0.5199096083969D+02-0.5199085148944D+02-0.5199074081613D+02-0.5199062880373D+02 +-0.5199051543604D+02-0.5199040069664D+02-0.5199028456895D+02-0.5199016703615D+02 +-0.5199004808124D+02-0.5198992768700D+02-0.5198980583600D+02-0.5198968251063D+02 +-0.5198955769302D+02-0.5198943136512D+02-0.5198930350863D+02-0.5198917410506D+02 +-0.5198904313569D+02-0.5198891058155D+02-0.5198877642345D+02-0.5198864064200D+02 +-0.5198850321751D+02-0.5198836413012D+02-0.5198822335968D+02-0.5198808088582D+02 +-0.5198793668793D+02-0.5198779074512D+02-0.5198764303627D+02-0.5198749354000D+02 +-0.5198734223467D+02-0.5198718909837D+02-0.5198703410894D+02-0.5198687724393D+02 +-0.5198671848065D+02-0.5198655779610D+02-0.5198639516703D+02-0.5198623056988D+02 +-0.5198606398084D+02-0.5198589537577D+02-0.5198572473026D+02-0.5198555201962D+02 +-0.5198537721883D+02-0.5198520030257D+02-0.5198502124524D+02-0.5198484002091D+02 +-0.5198465660333D+02-0.5198447096595D+02-0.5198428308188D+02-0.5198409292391D+02 +-0.5198390046450D+02-0.5198370567579D+02-0.5198350852955D+02-0.5198330899725D+02 +-0.5198310704998D+02-0.5198290265850D+02-0.5198269579318D+02-0.5198248642408D+02 +-0.5198227452087D+02-0.5198206005285D+02-0.5198184298896D+02-0.5198162329776D+02 +-0.5198140094741D+02-0.5198117590571D+02-0.5198094814005D+02-0.5198071761744D+02 +-0.5198048430449D+02-0.5198024816738D+02-0.5198000917191D+02-0.5197976728344D+02 +-0.5197952246692D+02-0.5197927468690D+02-0.5197902390745D+02-0.5197877009224D+02 +-0.5197851320449D+02-0.5197825320698D+02-0.5197799006201D+02-0.5197772373146D+02 +-0.5197745417673D+02-0.5197718135875D+02-0.5197690523796D+02-0.5197662577437D+02 +-0.5197634292744D+02-0.5197605665620D+02-0.5197576691913D+02-0.5197547367423D+02 +-0.5197517687900D+02-0.5197487649041D+02-0.5197457246489D+02-0.5197426475838D+02 +-0.5197395332627D+02-0.5197363812338D+02-0.5197331910403D+02-0.5197299622195D+02 +-0.5197266943031D+02-0.5197233868173D+02-0.5197200392824D+02-0.5197166512128D+02 +-0.5197132221174D+02-0.5197097514984D+02-0.5197062388528D+02-0.5197026836709D+02 +-0.5196990854370D+02-0.5196954436291D+02-0.5196917577189D+02-0.5196880271716D+02 +-0.5196842514461D+02-0.5196804299945D+02-0.5196765622622D+02-0.5196726476881D+02 +-0.5196686857041D+02-0.5196646757354D+02-0.5196606171998D+02-0.5196565095085D+02 +-0.5196523520651D+02-0.5196481442664D+02-0.5196438855015D+02-0.5196395751522D+02 +-0.5196352125928D+02-0.5196307971901D+02-0.5196263283028D+02-0.5196218052823D+02 +-0.5196172274718D+02-0.5196125942066D+02-0.5196079048138D+02-0.5196031586126D+02 +-0.5195983549135D+02-0.5195934930191D+02-0.5195885722231D+02-0.5195835918107D+02 +-0.5195785510585D+02-0.5195734492343D+02-0.5195682855969D+02-0.5195630593961D+02 +-0.5195577698725D+02-0.5195524162577D+02-0.5195469977736D+02-0.5195415136330D+02 +-0.5195359630387D+02-0.5195303451841D+02-0.5195246592528D+02-0.5195189044181D+02 +-0.5195130798435D+02-0.5195071846824D+02-0.5195012180777D+02-0.5194951791619D+02 +-0.5194890670569D+02-0.5194828808741D+02-0.5194766197137D+02-0.5194702826653D+02 +-0.5194638688071D+02-0.5194573772064D+02-0.5194508069188D+02-0.5194441569885D+02 +-0.5194374264482D+02-0.5194306143187D+02-0.5194237196087D+02-0.5194167413149D+02 +-0.5194096784220D+02-0.5194025299021D+02-0.5193952947146D+02-0.5193879718066D+02 +-0.5193805601119D+02-0.5193730585519D+02-0.5193654660341D+02-0.5193577814533D+02 +-0.5193500036904D+02-0.5193421316129D+02-0.5193341640742D+02-0.5193260999141D+02 +-0.5193179379578D+02-0.5193096770164D+02-0.5193013158865D+02-0.5192928533501D+02 +-0.5192842881739D+02-0.5192756191098D+02-0.5192668448947D+02-0.5192579642497D+02 +-0.5192489758803D+02-0.5192398784765D+02-0.5192306707119D+02-0.5192213512442D+02 +-0.5192119187145D+02-0.5192023717474D+02-0.5191927089505D+02-0.5191829289146D+02 +-0.5191730302133D+02-0.5191630114025D+02-0.5191528710207D+02-0.5191426075883D+02 +-0.5191322196077D+02-0.5191217055632D+02-0.5191110639202D+02-0.5191002931255D+02 +-0.5190893916069D+02-0.5190783577729D+02-0.5190671900126D+02-0.5190558866954D+02 +-0.5190444461705D+02-0.5190328667673D+02-0.5190211467945D+02-0.5190092845399D+02 +-0.5189972782709D+02-0.5189851262330D+02-0.5189728266508D+02-0.5189603777267D+02 +-0.5189477776415D+02-0.5189350245533D+02-0.5189221165981D+02-0.5189090518885D+02 +-0.5188958285145D+02-0.5188824445423D+02-0.5188688980147D+02-0.5188551869503D+02 +-0.5188413093435D+02-0.5188272631641D+02-0.5188130463569D+02-0.5187986568418D+02 +-0.5187840925129D+02-0.5187693512386D+02-0.5187544308611D+02-0.5187393291962D+02 +-0.5187240440329D+02-0.5187085731330D+02-0.5186929142309D+02-0.5186770650332D+02 +-0.5186610232183D+02-0.5186447864362D+02-0.5186283523081D+02-0.5186117184259D+02 +-0.5185948823518D+02-0.5185778416183D+02-0.5185605937277D+02-0.5185431361514D+02 +-0.5185254663297D+02-0.5185075816718D+02-0.5184894795548D+02-0.5184711573237D+02 +-0.5184526122909D+02-0.5184338417356D+02-0.5184148429039D+02-0.5183956130079D+02 +-0.5183761492255D+02-0.5183564486998D+02-0.5183365085389D+02-0.5183163258155D+02 +-0.5182958975660D+02-0.5182752207907D+02-0.5182542924529D+02-0.5182331094785D+02 +-0.5182116687559D+02-0.5181899671350D+02-0.5181680014270D+02-0.5181457684041D+02 +-0.5181232647986D+02-0.5181004873028D+02-0.5180774325683D+02-0.5180540972054D+02 +-0.5180304777830D+02-0.5180065708277D+02-0.5179823728232D+02-0.5179578802103D+02 +-0.5179330893860D+02-0.5179079967027D+02-0.5178825984684D+02-0.5178568909453D+02 +-0.5178308703501D+02-0.5178045328526D+02-0.5177778745757D+02-0.5177508915948D+02 +-0.5177235799366D+02-0.5176959355795D+02-0.5176679544522D+02-0.5176396324334D+02 +-0.5176109653512D+02-0.5175819489823D+02-0.5175525790517D+02-0.5175228512318D+02 +-0.5174927611419D+02-0.5174623043474D+02-0.5174314763592D+02-0.5174002726332D+02 +-0.5173686885694D+02-0.5173367195115D+02-0.5173043607457D+02-0.5172716075006D+02 +-0.5172384549462D+02-0.5172048981932D+02-0.5171709322923D+02-0.5171365522335D+02 +-0.5171017529452D+02-0.5170665292940D+02-0.5170308760833D+02-0.5169947880525D+02 +-0.5169582598771D+02-0.5169212861671D+02-0.5168838614662D+02-0.5168459802518D+02 +-0.5168076369333D+02-0.5167688258518D+02-0.5167295412791D+02-0.5166897774168D+02 +-0.5166495283960D+02-0.5166087882755D+02-0.5165675510418D+02-0.5165258106080D+02 +-0.5164835608125D+02-0.5164407954186D+02-0.5163975081138D+02-0.5163536925080D+02 +-0.5163093421337D+02-0.5162644504442D+02-0.5162190108131D+02-0.5161730165335D+02 +-0.5161264608164D+02-0.5160793367906D+02-0.5160316375011D+02-0.5159833559084D+02 +-0.5159344848875D+02-0.5158850172268D+02-0.5158349456272D+02-0.5157842627009D+02 +-0.5157329609709D+02-0.5156810328692D+02-0.5156284707365D+02-0.5155752668206D+02 +-0.5155214132756D+02-0.5154669021608D+02-0.5154117254396D+02-0.5153558749786D+02 +-0.5152993425461D+02-0.5152421198113D+02-0.5151841983433D+02-0.5151255696093D+02 +-0.5150662249744D+02-0.5150061557002D+02-0.5149453529428D+02-0.5148838077528D+02 +-0.5148215110737D+02-0.5147584537403D+02-0.5146946264782D+02-0.5146300199022D+02 +-0.5145646245151D+02-0.5144984307067D+02-0.5144314287525D+02-0.5143636088122D+02 +-0.5142949609291D+02-0.5142254750281D+02-0.5141551409151D+02-0.5140839482753D+02 +-0.5140118866721D+02-0.5139389455459D+02-0.5138651142128D+02-0.5137903818632D+02 +-0.5137147375605D+02-0.5136381702401D+02-0.5135606687078D+02-0.5134822216388D+02 +-0.5134028175756D+02-0.5133224449278D+02-0.5132410919702D+02-0.5131587468413D+02 +-0.5130753975423D+02-0.5129910319357D+02-0.5129056377438D+02-0.5128192025477D+02 +-0.5127317137854D+02-0.5126431587514D+02-0.5125535245940D+02-0.5124627983153D+02 +-0.5123709667690D+02-0.5122780166596D+02-0.5121839345403D+02-0.5120887068125D+02 +-0.5119923197240D+02-0.5118947593678D+02-0.5117960116805D+02-0.5116960624416D+02 +-0.5115948972712D+02-0.5114925016296D+02-0.5113888608154D+02-0.5112839599644D+02 +-0.5111777840483D+02-0.5110703178733D+02-0.5109615460788D+02-0.5108514531363D+02 +-0.5107400233480D+02-0.5106272408452D+02-0.5105130895877D+02-0.5103975533619D+02 +-0.5102806157801D+02-0.5101622602790D+02-0.5100424701185D+02-0.5099212283803D+02 +-0.5097985179674D+02-0.5096743216021D+02-0.5095486218256D+02-0.5094214009961D+02 +-0.5092926412887D+02-0.5091623246932D+02-0.5090304330139D+02-0.5088969478681D+02 +-0.5087618506855D+02-0.5086251227064D+02-0.5084867449820D+02-0.5083466983722D+02 +-0.5082049635455D+02-0.5080615209778D+02-0.5079163509518D+02-0.5077694335558D+02 +-0.5076207486834D+02-0.5074702760324D+02-0.5073179951042D+02-0.5071638852033D+02 +-0.5070079254364D+02-0.5068500947122D+02-0.5066903717403D+02-0.5065287350315D+02 +-0.5063651628963D+02-0.5061996334457D+02-0.5060321245898D+02-0.5058626140382D+02 +-0.5056910792994D+02-0.5055174976809D+02-0.5053418462884D+02-0.5051641020267D+02 +-0.5049842415989D+02-0.5048022415067D+02-0.5046180780505D+02-0.5044317273295D+02 +-0.5042431652422D+02-0.5040523674861D+02-0.5038593095586D+02-0.5036639667573D+02 +-0.5034663141803D+02-0.5032663267268D+02-0.5030639790981D+02-0.5028592457977D+02 +-0.5026521011328D+02-0.5024425192145D+02-0.5022304739591D+02-0.5020159390892D+02 +-0.5017988881346D+02-0.5015792944334D+02-0.5013571311336D+02-0.5011323711944D+02 +-0.5009049873873D+02-0.5006749522980D+02-0.5004422383280D+02-0.5002068176959D+02 +-0.4999686624397D+02-0.4997277444186D+02-0.4994840353146D+02-0.4992375066350D+02 +-0.4989881297144D+02-0.4987358757171D+02-0.4984807156389D+02-0.4982226203106D+02 +-0.4979615603991D+02-0.4976975064117D+02-0.4974304286974D+02-0.4971602974502D+02 +-0.4968870827126D+02-0.4966107543776D+02-0.4963312821924D+02-0.4960486357616D+02 +-0.4957627845502D+02-0.4954736978871D+02-0.4951813449683D+02-0.4948856948612D+02 +-0.4945867165071D+02-0.4942843787257D+02-0.4939786502185D+02-0.4936694995729D+02 +-0.4933568952659D+02-0.4930408056681D+02-0.4927211990478D+02-0.4923980435752D+02 +-0.4920713073265D+02-0.4917409582880D+02-0.4914069643607D+02-0.4910692933642D+02 +-0.4907279130416D+02-0.4903827910633D+02-0.4900338950319D+02-0.4896811924867D+02 +-0.4893246509079D+02-0.4889642377211D+02-0.4885999203021D+02-0.4882316659813D+02 +-0.4878594420482D+02-0.4874832157556D+02-0.4871029543247D+02-0.4867186249491D+02 +-0.4863301947995D+02-0.4859376310277D+02-0.4855409007715D+02-0.4851399711583D+02 +-0.4847348093100D+02-0.4843253823466D+02-0.4839116573905D+02-0.4834936015704D+02 +-0.4830711820251D+02-0.4826443659074D+02-0.4822131203876D+02-0.4817774126566D+02 +-0.4813372099301D+02-0.4808924794511D+02-0.4804431884930D+02-0.4799893043625D+02 +-0.4795307944023D+02-0.4790676259938D+02-0.4785997665588D+02-0.4781271835619D+02 +-0.4776498445124D+02-0.4771677169657D+02-0.4766807685247D+02-0.4761889668409D+02 +-0.4756922796153D+02-0.4751906745988D+02-0.4746841195927D+02-0.4741725824487D+02 +-0.4736560310686D+02-0.4731344334036D+02-0.4726077574537D+02-0.4720759712663D+02 +-0.4715390429349D+02-0.4709969405976D+02-0.4704496324345D+02-0.4698970866656D+02 +-0.4693392715482D+02-0.4687761553742D+02-0.4682077064661D+02-0.4676338931742D+02 +-0.4670546838725D+02-0.4664700469545D+02-0.4658799508292D+02-0.4652843639162D+02 +-0.4646832546412D+02-0.4640765914308D+02-0.4634643427075D+02-0.4628464768840D+02 +-0.4622229623583D+02-0.4615937675077D+02-0.4609588606835D+02-0.4603182102046D+02 +-0.4596717843531D+02-0.4590195513672D+02-0.4583614794369D+02-0.4576975366979D+02 +-0.4570276912265D+02-0.4563519110351D+02-0.4556701640665D+02-0.4549824181908D+02 +-0.4542886412007D+02-0.4535888008084D+02-0.4528828646428D+02-0.4521708002473D+02 +-0.4514525750785D+02-0.4507281565054D+02-0.4499975118097D+02-0.4492606081870D+02 +-0.4485174127497D+02-0.4477678925295D+02-0.4470120144833D+02-0.4462497454985D+02 +-0.4454810524011D+02-0.4447059019649D+02-0.4439242609219D+02-0.4431360959758D+02 +-0.4423413738159D+02-0.4415400611337D+02-0.4407321246418D+02-0.4399175310947D+02 +-0.4390962473114D+02-0.4382682402010D+02-0.4374334767908D+02-0.4365919242563D+02 +-0.4357435499539D+02-0.4348883214570D+02-0.4340262065933D+02-0.4331571734857D+02 +-0.4322811905962D+02-0.4313982267710D+02-0.4305082512897D+02-0.4296112339160D+02 +-0.4287071449512D+02-0.4277959552900D+02-0.4268776364786D+02-0.4259521607738D+02 +-0.4250195012053D+02-0.4240796316384D+02-0.4231325268378D+02-0.4221781625326D+02 +-0.4212165154821D+02-0.4202475635403D+02-0.4192712857207D+02-0.4182876622603D+02 +-0.4172966746809D+02-0.4162983058491D+02-0.4152925400326D+02-0.4142793629535D+02 +-0.4132587618362D+02-0.4122307254514D+02-0.4111952441526D+02-0.4101523099069D+02 +-0.4091019163177D+02-0.4080440586392D+02-0.4069787337814D+02-0.4059059403052D+02 +-0.4048256784069D+02-0.4037379498919D+02-0.4026427581359D+02-0.4015401080347D+02 +-0.4004300059408D+02-0.3993124595881D+02-0.3981874780047D+02-0.3970550714118D+02 +-0.3959152511128D+02-0.3947680293704D+02-0.3936134192738D+02-0.3924514345974D+02 +-0.3912820896514D+02-0.3901053991273D+02-0.3889213779388D+02-0.3877300410616D+02 +-0.3865314033730D+02-0.3853254794941D+02-0.3841122836384D+02-0.3828918294671D+02 +-0.3816641299561D+02-0.3804291972752D+02-0.3791870426838D+02-0.3779376764439D+02 +-0.3766811077544D+02-0.3754173447071D+02-0.3741463942662D+02-0.3728682622747D+02 +-0.3715829534855D+02-0.3702904716206D+02-0.3689908194568D+02-0.3676839989389D+02 +-0.3663700113198D+02-0.3650488573242D+02-0.3637205373385D+02-0.3623850516215D+02 +-0.3610424005352D+02-0.3596925847947D+02-0.3583356057318D+02-0.3569714655716D+02 +-0.3556001677183D+02-0.3542217170480D+02-0.3528361202035D+02-0.3514433858906D+02 +-0.3500435251706D+02-0.3486365517474D+02-0.3472224822457D+02-0.3458013364781D+02 +-0.3443731376977D+02-0.3429379128348D+02-0.3414956927154D+02-0.3400465122587D+02 +-0.3385904106531D+02-0.3371274315081D+02-0.3356576229817D+02-0.3341810378823D+02 +-0.3326977337430D+02-0.3312077728689D+02-0.3297112223571D+02-0.3282081540879D+02 +-0.3266986446883D+02-0.3251827754673D+02-0.3236606323235D+02-0.3221323056253D+02 +-0.3205978900636D+02-0.3190574844798D+02-0.3175111916665D+02-0.3159591181450D+02 +-0.3144013739192D+02-0.3128380722060D+02-0.3112693291460D+02-0.3096952634939D+02 +-0.3081159962896D+02-0.3065316505139D+02-0.3049423507279D+02-0.3033482226994D+02 +-0.3017493930171D+02-0.3001459886954D+02-0.2985381367711D+02-0.2969259638940D+02 +-0.2953095959141D+02-0.2936891574677D+02-0.2920647715631D+02-0.2904365591713D+02 +-0.2888046388202D+02-0.2871691261992D+02-0.2855301337730D+02-0.2838877704096D+02 +-0.2822421410237D+02-0.2805933462405D+02-0.2789414820796D+02-0.2772866396645D+02 +-0.2756289049588D+02-0.2739683585338D+02-0.2723050753680D+02-0.2706391246838D+02 +-0.2689705698223D+02-0.2672994681603D+02-0.2656258710714D+02-0.2639498239345D+02 +-0.2622713661917D+02-0.2605905314574D+02-0.2589073476829D+02-0.2572218373759D+02 +-0.2555340178776D+02-0.2538439017000D+02-0.2521514969218D+02-0.2504568076457D+02 +-0.2487598345161D+02-0.2470605752972D+02-0.2453590255090D+02-0.2436551791213D+02 +-0.2419490293015D+02-0.2402405692122D+02-0.2385297928550D+02-0.2368166959536D+02 +-0.2351012768684D+02-0.2333835375355D+02-0.2316634844181D+02-0.2299411294593D+02 +-0.2282164910224D+02-0.2264895948042D+02-0.2247604747020D+02-0.2230291736187D+02 +-0.2212957441833D+02-0.2195602493665D+02-0.2178227629680D+02-0.2160833699531D+02 +-0.2143421666157D+02-0.2125992605447D+02-0.2108547703736D+02-0.2091088252957D+02 +-0.2073615643311D+02-0.2056131353347D+02-0.2038636937454D+02-0.2021134010787D+02 +-0.2003624231780D+02-0.1986109282464D+02-0.1968590846923D+02-0.1951070588338D+02 +-0.1933550125113D+02-0.1916031006739D+02-0.1898514690054D+02-0.1881002516654D+02 +-0.1863495692195D+02-0.1845995268332D+02-0.1828502127992D+02-0.1811016974578D+02 +-0.1793540325598D+02-0.1776072511080D+02-0.1758613676940D+02-0.1741163793327D+02 +-0.1723722667775D+02-0.1706289962834D+02-0.1688865217702D+02-0.1671447873257D+02 +-0.1654037299789D+02-0.1636632826691D+02-0.1619233773325D+02-0.1601839480315D+02 +-0.1584449340510D+02-0.1567062828984D+02-0.1549679531468D+02-0.1532299170720D+02 +-0.1514921630451D+02-0.1497546976480D+02-0.1480175474939D+02-0.1462807607400D+02 +-0.1445444082871D+02-0.1428085846710D+02-0.1410734086517D+02-0.1393390235146D+02 +-0.1376055970989D+02-0.1358733215727D+02-0.1341424129731D+02-0.1324131105355D+02 +-0.1306856758305D+02-0.1289603917318D+02-0.1272375612351D+02-0.1255175061484D+02 +-0.1238005656736D+02-0.1220870948967D+02-0.1203774632043D+02-0.1186720526422D+02 +-0.1169712562320D+02-0.1152754762583D+02-0.1135851225403D+02-0.1119006106993D+02 +-0.1102223604329D+02-0.1085507938069D+02-0.1068863335731D+02-0.1052294015218D+02 +-0.1035804168776D+02-0.1019397947446D+02-0.1003079446077D+02-0.9868526889628D+01 +-0.9707216161554D+01-0.9546900704939D+01-0.9387617854023D+01-0.9229403734858D+01 +-0.9072293159592D+01-0.8916319529363D+01-0.8761514745993D+01-0.8607909132693D+01 +-0.8455531363896D+01-0.8304408404305D+01-0.8154565457227D+01-0.8006025922166D+01 +-0.7858811361682D+01-0.7712941477416D+01-0.7568434095199D+01-0.7425305159081D+01 +-0.7283568734134D+01-0.7143237017788D+01-0.7004320359504D+01-0.6866827288485D+01 +-0.6730764549154D+01-0.6596137144079D+01-0.6462948384000D+01-0.6331199944618D+01 +-0.6200891929738D+01-0.6072022940407D+01-0.5944590149603D+01-0.5818589382077D+01 +-0.5694015198898D+01-0.5570860986265D+01-0.5449119048124D+01-0.5328780702141D+01 +-0.5209836378552D+01-0.5092275721431D+01-0.4976087691897D+01-0.4861260672787D+01 +-0.4747782574321D+01-0.4635640940271D+01-0.4524823054180D+01-0.4415316045125D+01 +-0.4307106992579D+01-0.4200183029885D+01-0.4094531445869D+01-0.3990139784139D+01 +-0.3886995939600D+01-0.3785088251726D+01-0.3684405594148D+01-0.3584937460106D+01 +-0.3486674043348D+01-0.3389606314047D+01-0.3293726089348D+01-0.3199026098161D+01 +-0.3105500039868D+01-0.3013142636618D+01-0.2921949678952D+01-0.2831918064533D+01 +-0.2743045829849D+01-0.2655332174788D+01-0.2568777480092D+01-0.2483383317815D+01 +-0.2399152454962D+01-0.2316088850658D+01-0.2234197647300D+01-0.2153485156272D+01 +-0.2073958838965D+01-0.1995627283965D+01-0.1918500181413D+01-0.1842588295670D+01 +-0.1767903437522D+01-0.1694458437274D+01-0.1622267120110D+01-0.1551344285168D+01 +-0.1481705689753D+01-0.1413368040087D+01-0.1346348989896D+01-0.1280667148051D+01 +-0.1216342096293D+01-0.1153394417906D+01-0.1091845737986D+01-0.1031718775725D+01 +-0.9730374088849D+00-0.9158267504133D+00-0.8601132368937D+00-0.8059247283301D+00 +-0.7532906185600D+00-0.7022419554295D+00-0.6528115697324D+00-0.6050342118170D+00 +-0.5589466947046D+00-0.5145880425354D+00-0.4719996431596D+00-0.4312254037239D+00 +-0.3923119081554D+00-0.3553085755132D+00-0.3202678182603D+00-0.2872451996103D+00 +-0.2562993012896D+00 + 0.0000000000000D+00 + 1012 0.5229258479779D+01 + 0.2150742905406D-04 0.2201934401975D-04 0.2254344131081D-04 0.2308001074793D-04 + 0.2362934904336D-04 0.2419175996469D-04 0.2476755450247D-04 0.2535705104185D-04 + 0.2596057553829D-04 0.2657846169737D-04 0.2721105115901D-04 0.2785869368592D-04 + 0.2852174735659D-04 0.2920057876285D-04 0.2989556321214D-04 0.3060708493450D-04 + 0.3133553729459D-04 0.3208132300862D-04 0.3284485436652D-04 0.3362655345933D-04 + 0.3442685241199D-04 0.3524619362168D-04 0.3608503000175D-04 0.3694382523153D-04 + 0.3782305401197D-04 0.3872320232740D-04 0.3964476771351D-04 0.4058825953159D-04 + 0.4155419924941D-04 0.4254312072866D-04 0.4355557051923D-04 0.4459210816046D-04 + 0.4565330648961D-04 0.4673975195749D-04 0.4785204495171D-04 0.4899080012754D-04 + 0.5015664674660D-04 0.5135022902361D-04 0.5257220648130D-04 0.5382325431382D-04 + 0.5510406375867D-04 0.5641534247751D-04 0.5775781494596D-04 0.5913222285265D-04 + 0.6053932550771D-04 0.6197990026094D-04 0.6345474292991D-04 0.6496466823815D-04 + 0.6651051026378D-04 0.6809312289875D-04 0.6971338031887D-04 0.7137217746513D-04 + 0.7307043053626D-04 0.7480907749308D-04 0.7658907857468D-04 0.7841141682692D-04 + 0.8027709864336D-04 0.8218715431905D-04 0.8414263861740D-04 0.8614463135050D-04 + 0.8819423797310D-04 0.9029259019072D-04 0.9244084658213D-04 0.9464019323656D-04 + 0.9689184440594D-04 0.9919704317265D-04 0.1015570621330D-03 0.1039732040969D-03 + 0.1064468028041D-03 0.1089792236573D-03 0.1115718644728D-03 0.1142261562483D-03 + 0.1169435639500D-03 0.1197255873171D-03 0.1225737616857D-03 0.1254896588328D-03 + 0.1284748878395D-03 0.1315310959746D-03 0.1346599695998D-03 0.1378632350954D-03 + 0.1411426598085D-03 0.1445000530233D-03 0.1479372669546D-03 0.1514561977641D-03 + 0.1550587866019D-03 0.1587470206711D-03 0.1625229343189D-03 0.1663886101524D-03 + 0.1703461801815D-03 0.1743978269887D-03 0.1785457849256D-03 0.1827923413391D-03 + 0.1871398378251D-03 0.1915906715131D-03 0.1961472963799D-03 0.2008122245952D-03 + 0.2055880278984D-03 0.2104773390081D-03 0.2154828530649D-03 0.2206073291079D-03 + 0.2258535915864D-03 0.2312245319072D-03 0.2367231100177D-03 0.2423523560273D-03 + 0.2481153718665D-03 0.2540153329849D-03 0.2600554900897D-03 0.2662391709247D-03 + 0.2725697820915D-03 0.2790508109132D-03 0.2856858273428D-03 0.2924784859153D-03 + 0.2994325277470D-03 0.3065517825810D-03 0.3138401708812D-03 0.3213017059753D-03 + 0.3289404962488D-03 0.3367607473897D-03 0.3447667646870D-03 0.3529629553823D-03 + 0.3613538310777D-03 0.3699440101989D-03 0.3787382205180D-03 0.3877413017338D-03 + 0.3969582081140D-03 0.4063940111991D-03 0.4160539025692D-03 0.4259431966769D-03 + 0.4360673337456D-03 0.4464318827368D-03 0.4570425443864D-03 0.4679051543124D-03 + 0.4790256861959D-03 0.4904102550358D-03 0.5020651204812D-03 0.5139966902408D-03 + 0.5262115235724D-03 0.5387163348549D-03 0.5515179972435D-03 0.5646235464104D-03 + 0.5780401843732D-03 0.5917752834137D-03 0.6058363900874D-03 0.6202312293275D-03 + 0.6349677086450D-03 0.6500539224267D-03 0.6654981563344D-03 0.6813088918062D-03 + 0.6974948106637D-03 0.7140647998269D-03 0.7310279561389D-03 0.7483935913040D-03 + 0.7661712369406D-03 0.7843706497523D-03 0.8030018168203D-03 0.8220749610184D-03 + 0.8416005465556D-03 0.8615892846469D-03 0.8820521393172D-03 0.9030003333406D-03 + 0.9244453543176D-03 0.9463989608946D-03 0.9688731891282D-03 0.9918803589975D-03 + 0.1015433081069D-02 0.1039544263315D-02 0.1064227118095D-02 0.1089495169290D-02 + 0.1115362259619D-02 0.1141842558105D-02 0.1168950567737D-02 0.1196701133289D-02 + 0.1225109449338D-02 0.1254191068456D-02 0.1283961909601D-02 0.1314438266696D-02 + 0.1345636817413D-02 0.1377574632157D-02 0.1410269183260D-02 0.1443738354387D-02 + 0.1478000450161D-02 0.1513074206015D-02 0.1548978798262D-02 0.1585733854409D-02 + 0.1623359463706D-02 0.1661876187936D-02 0.1701305072458D-02 0.1741667657505D-02 + 0.1782985989747D-02 0.1825282634108D-02 0.1868580685877D-02 0.1912903783076D-02 + 0.1958276119133D-02 0.2004722455835D-02 0.2052268136585D-02 0.2100939099962D-02 + 0.2150761893598D-02 0.2201763688371D-02 0.2253972292925D-02 0.2307416168524D-02 + 0.2362124444253D-02 0.2418126932561D-02 0.2475454145167D-02 0.2534137309329D-02 + 0.2594208384486D-02 0.2655700079287D-02 0.2718645869002D-02 0.2783080013344D-02 + 0.2849037574687D-02 0.2916554436715D-02 0.2985667323484D-02 0.3056413818931D-02 + 0.3128832386828D-02 0.3202962391187D-02 0.3278844117136D-02 0.3356518792272D-02 + 0.3436028608501D-02 0.3517416744371D-02 0.3600727387929D-02 0.3686005760082D-02 + 0.3773298138499D-02 0.3862651882061D-02 0.3954115455860D-02 0.4047738456768D-02 + 0.4143571639594D-02 0.4241666943825D-02 0.4342077520985D-02 0.4444857762604D-02 + 0.4550063328833D-02 0.4657751177697D-02 0.4767979595018D-02 0.4880808225009D-02 + 0.4996298101570D-02 0.5114511680279D-02 0.5235512871115D-02 0.5359367071918D-02 + 0.5486141202598D-02 0.5615903740128D-02 0.5748724754308D-02 0.5884675944352D-02 + 0.6023830676284D-02 0.6166264021183D-02 0.6312052794284D-02 0.6461275594959D-02 + 0.6614012847588D-02 0.6770346843357D-02 0.6930361782982D-02 0.7094143820394D-02 + 0.7261781107400D-02 0.7433363839342D-02 0.7608984301773D-02 0.7788736918176D-02 + 0.7972718298747D-02 0.8161027290261D-02 0.8353765027049D-02 0.8551034983111D-02 + 0.8752943025377D-02 0.8959597468160D-02 0.9171109128811D-02 0.9387591384603D-02 + 0.9609160230877D-02 0.9835934340477D-02 0.1006803512449D-01 0.1030558679431D-01 + 0.1054871642512D-01 0.1079755402073D-01 0.1105223257982D-01 0.1131288816368D-01 + 0.1157965996544D-01 0.1185269038080D-01 0.1213212508026D-01 0.1241811308303D-01 + 0.1271080683248D-01 0.1301036227325D-01 0.1331693893004D-01 0.1363069998813D-01 + 0.1395181237567D-01 0.1428044684765D-01 0.1461677807184D-01 0.1496098471648D-01 + 0.1531324953990D-01 0.1567375948211D-01 0.1604270575828D-01 0.1642028395434D-01 + 0.1680669412453D-01 0.1720214089116D-01 0.1760683354637D-01 0.1802098615621D-01 + 0.1844481766683D-01 0.1887855201303D-01 0.1932241822902D-01 0.1977665056168D-01 + 0.2024148858606D-01 0.2071717732349D-01 0.2120396736203D-01 0.2170211497964D-01 + 0.2221188226980D-01 0.2273353726988D-01 0.2326735409215D-01 0.2381361305754D-01 + 0.2437260083229D-01 0.2494461056731D-01 0.2552994204062D-01 0.2612890180262D-01 + 0.2674180332442D-01 0.2736896714935D-01 0.2801072104743D-01 0.2866740017320D-01 + 0.2933934722669D-01 0.3002691261781D-01 0.3073045463399D-01 0.3145033961141D-01 + 0.3218694210958D-01 0.3294064508962D-01 0.3371184009606D-01 0.3450092744243D-01 + 0.3530831640054D-01 0.3613442539362D-01 0.3697968219334D-01 0.3784452412086D-01 + 0.3872939825181D-01 0.3963476162544D-01 0.4056108145796D-01 0.4150883536008D-01 + 0.4247851155891D-01 0.4347060912422D-01 0.4448563819924D-01 0.4552412023590D-01 + 0.4658658823475D-01 0.4767358698962D-01 0.4878567333696D-01 0.4992341641008D-01 + 0.5108739789835D-01 0.5227821231135D-01 0.5349646724813D-01 0.5474278367169D-01 + 0.5601779618862D-01 0.5732215333417D-01 0.5865651786266D-01 0.6002156704340D-01 + 0.6141799296226D-01 0.6284650282880D-01 0.6430781928923D-01 0.6580268074515D-01 + 0.6733184167825D-01 0.6889607298100D-01 0.7049616229337D-01 0.7213291434581D-01 + 0.7380715130845D-01 0.7551971314661D-01 0.7727145798277D-01 0.7906326246509D-01 + 0.8089602214242D-01 0.8277065184608D-01 0.8468808607842D-01 0.8664927940812D-01 + 0.8865520687255D-01 0.9070686438707D-01 0.9280526916144D-01 0.9495146012343D-01 + 0.9714649834967D-01 0.9939146750384D-01 0.1016874742823D+00 0.1040356488672D+00 + 0.1064371453872D+00 0.1088931423856D+00 0.1114048432967D+00 0.1139734769295D+00 + 0.1166002979593D+00 0.1192865874273D+00 0.1220336532487D+00 0.1248428307276D+00 + 0.1277154830815D+00 0.1306530019730D+00 0.1336568080498D+00 0.1367283514936D+00 + 0.1398691125766D+00 0.1430806022269D+00 0.1463643626021D+00 0.1497219676713D+00 + 0.1531550238057D+00 0.1566651703780D+00 0.1602540803695D+00 0.1639234609870D+00 + 0.1676750542871D+00 0.1715106378098D+00 0.1754320252209D+00 0.1794410669619D+00 + 0.1835396509100D+00 0.1877297030455D+00 0.1920131881282D+00 0.1963921103827D+00 + 0.2008685141914D+00 0.2054444847966D+00 0.2101221490109D+00 0.2149036759359D+00 + 0.2197912776889D+00 0.2247872101386D+00 0.2298937736476D+00 0.2351133138248D+00 + 0.2404482222837D+00 0.2459009374100D+00 0.2514739451362D+00 0.2571697797240D+00 + 0.2629910245536D+00 0.2689403129212D+00 0.2750203288421D+00 0.2812338078623D+00 + 0.2875835378751D+00 0.2940723599454D+00 0.3007031691395D+00 0.3074789153608D+00 + 0.3144026041916D+00 0.3214772977396D+00 0.3287061154899D+00 0.3360922351618D+00 + 0.3436388935694D+00 0.3513493874868D+00 0.3592270745164D+00 0.3672753739607D+00 + 0.3754977676972D+00 0.3838978010545D+00 0.3924790836915D+00 0.4012452904770D+00 + 0.4102001623706D+00 0.4193475073036D+00 0.4286912010595D+00 0.4382351881538D+00 + 0.4479834827120D+00 0.4579401693452D+00 0.4681094040228D+00 0.4784954149418D+00 + 0.4891025033910D+00 0.4999350446102D+00 0.5109974886435D+00 0.5222943611853D+00 + 0.5338302644183D+00 0.5456098778426D+00 0.5576379590956D+00 0.5699193447601D+00 + 0.5824589511607D+00 0.5952617751475D+00 0.6083328948654D+00 0.6216774705074D+00 + 0.6353007450521D+00 0.6492080449824D+00 0.6634047809857D+00 0.6778964486325D+00 + 0.6926886290333D+00 0.7077869894721D+00 0.7231972840138D+00 0.7389253540860D+00 + 0.7549771290311D+00 0.7713586266289D+00 0.7880759535873D+00 0.8051353059985D+00 + 0.8225429697604D+00 0.8403053209599D+00 0.8584288262158D+00 0.8769200429817D+00 + 0.8957856198031D+00 0.9150322965294D+00 0.9346669044774D+00 0.9546963665439D+00 + 0.9751276972649D+00 0.9959680028197D+00 0.1017224480976D+01 0.1038904420974D+01 + 0.1061015203349D+01 0.1083564299686D+01 0.1106559272300D+01 0.1130007773859D+01 + 0.1153917546912D+01 0.1178296423354D+01 0.1203152323804D+01 0.1228493256899D+01 + 0.1254327318495D+01 0.1280662690787D+01 0.1307507641324D+01 0.1334870521934D+01 + 0.1362759767535D+01 0.1391183894856D+01 0.1420151501035D+01 0.1449671262109D+01 + 0.1479751931386D+01 0.1510402337698D+01 0.1541631383520D+01 0.1573448042969D+01 + 0.1605861359662D+01 0.1638880444440D+01 0.1672514472946D+01 0.1706772683055D+01 + 0.1741664372155D+01 0.1777198894269D+01 0.1813385657016D+01 0.1850234118409D+01 + 0.1887753783475D+01 0.1925954200705D+01 0.1964844958324D+01 0.2004435680370D+01 + 0.2044736022586D+01 0.2085755668115D+01 0.2127504322996D+01 0.2169991711448D+01 + 0.2213227570952D+01 0.2257221647108D+01 0.2301983688271D+01 0.2347523439972D+01 + 0.2393850639086D+01 0.2440975007782D+01 0.2488906247220D+01 0.2537654031002D+01 + 0.2587227998372D+01 0.2637637747157D+01 0.2688892826442D+01 0.2741002728983D+01 + 0.2793976883341D+01 0.2847824645743D+01 0.2902555291652D+01 0.2958178007063D+01 + 0.3014701879494D+01 0.3072135888684D+01 0.3130488897001D+01 0.3189769639525D+01 + 0.3249986713841D+01 0.3311148569513D+01 0.3373263497233D+01 0.3436339617667D+01 + 0.3500384869964D+01 0.3565406999951D+01 0.3631413547991D+01 0.3698411836514D+01 + 0.3766408957221D+01 0.3835411757947D+01 0.3905426829193D+01 0.3976460490322D+01 + 0.4048518775419D+01 0.4121607418815D+01 0.4195731840277D+01 0.4270897129857D+01 + 0.4347108032420D+01 0.4424368931831D+01 0.4502683834816D+01 0.4582056354503D+01 + 0.4662489693636D+01 0.4743986627475D+01 0.4826549486387D+01 0.4910180138127D+01 + 0.4994879969825D+01 0.5080649869681D+01 0.5167490208373D+01 0.5255400820202D+01 + 0.5344380983962D+01 0.5434429403565D+01 0.5525544188426D+01 0.5617722833617D+01 + 0.5710962199815D+01 0.5805258493041D+01 0.5900607244231D+01 0.5997003288635D+01 + 0.6094440745069D+01 0.6192912995049D+01 0.6292412661814D+01 0.6392931589269D+01 + 0.6494460820874D+01 0.6596990578488D+01 0.6700510241224D+01 0.6805008324307D+01 + 0.6910472457995D+01 0.7016889366579D+01 0.7124244847491D+01 0.7232523750568D+01 + 0.7341709957494D+01 0.7451786361463D+01 0.7562734847107D+01 0.7674536270712D+01 + 0.7787170440791D+01 0.7900616099026D+01 0.8014850901658D+01 0.8129851401340D+01 + 0.8245593029526D+01 0.8362050079436D+01 0.8479195689649D+01 0.8597001828383D+01 + 0.8715439278509D+01 0.8834477623371D+01 0.8954085233454D+01 0.9074229253973D+01 + 0.9194875593440D+01 0.9315988913276D+01 0.9437532618530D+01 0.9559468849772D+01 + 0.9681758476237D+01 0.9804361090277D+01 0.9927235003199D+01 0.1005033724256D+02 + 0.1017362355101D+02 0.1029704838669D+02 0.1042056492540D+02 0.1054412506444D+02 + 0.1066767942831D+02 0.1079117737637D+02 0.1091456701244D+02 0.1103779519646D+02 + 0.1116080755839D+02 0.1128354851420D+02 0.1140596128432D+02 0.1152798791434D+02 + 0.1164956929827D+02 0.1177064520433D+02 0.1189115430327D+02 0.1201103419951D+02 + 0.1213022146500D+02 0.1224865167586D+02 0.1236625945201D+02 0.1248297849976D+02 + 0.1259874165744D+02 0.1271348094411D+02 0.1282712761148D+02 0.1293961219902D+02 + 0.1305086459240D+02 0.1316081408518D+02 0.1326938944391D+02 0.1337651897664D+02 + 0.1348213060491D+02 0.1358615193909D+02 0.1368851035736D+02 0.1378913308811D+02 + 0.1388794729589D+02 0.1398488017086D+02 0.1407985902179D+02 0.1417281137257D+02 + 0.1426366506212D+02 0.1435234834789D+02 0.1443879001264D+02 0.1452291947466D+02 + 0.1460466690129D+02 0.1468396332564D+02 0.1476074076649D+02 0.1483493235126D+02 + 0.1490647244192D+02 0.1497529676373D+02 0.1504134253675D+02 0.1510454860984D+02 + 0.1516485559720D+02 0.1522220601698D+02 0.1527654443219D+02 0.1532781759325D+02 + 0.1537597458241D+02 0.1542096695946D+02 0.1546274890874D+02 0.1550127738702D+02 + 0.1553651227211D+02 0.1556841651189D+02 0.1559695627334D+02 0.1562210109145D+02 + 0.1564382401753D+02 0.1566210176664D+02 0.1567691486377D+02 0.1568824778841D+02 + 0.1569608911712D+02 0.1570043166360D+02 0.1570127261607D+02 0.1569861367129D+02 + 0.1569246116496D+02 0.1568282619787D+02 0.1566972475757D+02 0.1565317783486D+02 + 0.1563321153475D+02 0.1560985718135D+02 0.1558315141624D+02 0.1555313628970D+02 + 0.1551985934445D+02 0.1548337369123D+02 0.1544373807583D+02 0.1540101693692D+02 + 0.1535528045436D+02 0.1530660458716D+02 0.1525507110098D+02 0.1520076758423D+02 + 0.1514378745267D+02 0.1508422994170D+02 0.1502220008605D+02 0.1495780868635D+02 + 0.1489117226206D+02 0.1482241299046D+02 0.1475165863115D+02 0.1467904243575D+02 + 0.1460470304238D+02 0.1452878435463D+02 0.1445143540465D+02 0.1437281020013D+02 + 0.1429306755483D+02 0.1421237090260D+02 0.1413088809452D+02 0.1404879117925D+02 + 0.1396625616625D+02 0.1388346277207D+02 0.1380059414952D+02 0.1371783659988D+02 + 0.1363537926825D+02 0.1355341382212D+02 0.1347213411351D+02 0.1339173582480D+02 + 0.1331241609871D+02 0.1323437315279D+02 0.1315780587881D+02 0.1308291342766D+02 + 0.1300989478035D+02 0.1293894830568D+02 0.1287027130535D+02 0.1280405954732D+02 + 0.1274050678825D+02 0.1267980428593D+02 0.1262214030269D+02 0.1256769960087D+02 + 0.1251666293145D+02 0.1246920651702D+02 0.1242550153038D+02 0.1238571356999D+02 + 0.1235000213372D+02 0.1231852009235D+02 0.1229141316414D+02 0.1226881939222D+02 + 0.1225086862623D+02 0.1223768200985D+02 0.1222937147599D+02 0.1222603925117D+02 + 0.1222777737106D+02 0.1223466720868D+02 0.1224677901729D+02 0.1226417148958D+02 + 0.1228689133517D+02 0.1231497287802D+02 0.1234843767581D+02 0.1238729416297D+02 + 0.1243153731911D+02 0.1248114836487D+02 0.1253609448665D+02 0.1259632859227D+02 + 0.1266178909890D+02 0.1273239975523D+02 0.1280806949923D+02 0.1288869235315D+02 + 0.1297414735711D+02 0.1306429854274D+02 0.1315899494816D+02 0.1325807067533D+02 + 0.1336134499111D+02 0.1346862247282D+02 0.1357969319917D+02 0.1369433298744D+02 + 0.1381230367740D+02 0.1393335346243D+02 0.1405721726828D+02 0.1418361717951D+02 + 0.1431226291376D+02 0.1444285234362D+02 0.1457507206581D+02 0.1470859801733D+02 + 0.1484309613763D+02 0.1497822307639D+02 0.1511362694548D+02 0.1524894811426D+02 + 0.1538382004666D+02 0.1551787017849D+02 0.1565072083339D+02 0.1578199017530D+02 + 0.1591129319546D+02 0.1603824273170D+02 0.1616245051740D+02 0.1628352825765D+02 + 0.1640108872963D+02 0.1651474690448D+02 0.1662412108723D+02 0.1672883407174D+02 + 0.1682851430716D+02 0.1692279707220D+02 0.1701132565381D+02 0.1709375252614D+02 + 0.1716974052608D+02 0.1723896402125D+02 0.1730111006644D+02 0.1735587954416D+02 + 0.1740298828530D+02 0.1744216816538D+02 0.1747316817225D+02 0.1749575544089D+02 + 0.1750971625093D+02 0.1751485698260D+02 0.1751100502688D+02 0.1749800964559D+02 + 0.1747574277733D+02 0.1744409978499D+02 0.1740300014123D+02 0.1735238804766D+02 + 0.1729223298439D+02 0.1722253018618D+02 0.1714330104180D+02 0.1705459341368D+02 + 0.1695648187457D+02 0.1684906785873D+02 0.1673247972505D+02 0.1660687272995D+02 + 0.1647242890818D+02 0.1632935685981D+02 0.1617789144222D+02 0.1601829336618D+02 + 0.1585084869528D+02 0.1567586824865D+02 0.1549368690699D+02 0.1530466282265D+02 + 0.1510917653451D+02 0.1490762998916D+02 0.1470044547022D+02 0.1448806443791D+02 + 0.1427094628160D+02 0.1404956698852D+02 0.1382441773199D+02 0.1359600338336D+02 + 0.1336484095192D+02 0.1313145795774D+02 0.1289639074258D+02 0.1266018272468D+02 + 0.1242338260337D+02 0.1218654252002D+02 0.1195021618209D+02 0.1171495695744D+02 + 0.1148131594627D+02 0.1124984003849D+02 0.1102106996440D+02 0.1079553834688D+02 + 0.1057376776347D+02 0.1035626882667D+02 0.1014353829125D+02 0.9936057196884D+01 + 0.9734289054994D+01 0.9538678088120D+01 0.9349647530399D+01 0.9167597997384D+01 + 0.8992905933301D+01 0.8825922143594D+01 0.8666970420224D+01 0.8516346266999D+01 + 0.8374315731611D+01 0.8241114350747D+01 0.8116946214096D+01 0.8001983152570D+01 + 0.7896364055459D+01 0.7800194320670D+01 0.7713545441561D+01 0.7636454733225D+01 + 0.7568925200401D+01 0.7510925548528D+01 0.7462390338698D+01 0.7423220286625D+01 + 0.7393282704950D+01 0.7372412087556D+01 0.7360410833787D+01 0.7357050109802D+01 + 0.7362070843542D+01 0.7375184849138D+01 0.7396076075866D+01 0.7424401976120D+01 + 0.7459794986211D+01 0.7501864113185D+01 0.7550196620265D+01 0.7604359802945D+01 + 0.7663902847256D+01 0.7728358761219D+01 0.7797246370063D+01 0.7870072365405D+01 + 0.7946333398216D+01 0.8025518205140D+01 0.8107109757504D+01 0.8190587422172D+01 + 0.8275429123337D+01 0.8361113494303D+01 0.8447122008353D+01 0.8532941077928D+01 + 0.8618064111536D+01 0.8701993518075D+01 0.8784242648578D+01 0.8864337665829D+01 + 0.8941819332731D+01 0.9016244710878D+01 0.9087188761372D+01 0.9154245840560D+01 + 0.9217031084099D+01 0.9275181673474D+01 0.9328357979881D+01 0.9376244581215D+01 + 0.9418551148709D+01 0.9455013200639D+01 0.9485392721360D+01 0.9509478644797D+01 + 0.9527087202359D+01 0.9538062136102D+01 0.9542274778747D+01 0.9539624002998D+01 + 0.9530036043300D+01 0.9513464193959D+01 0.9489888388159D+01 0.9459314663078D+01 + 0.9421774516843D+01 0.9377324163609D+01 0.9326043693467D+01 0.9268036144314D+01 + 0.9203426493115D+01 0.9132360574297D+01 0.9055003933175D+01 0.8971540622481D+01 + 0.8882171950151D+01 0.8787115186520D+01 0.8686602239071D+01 0.8580878302773D+01 + 0.8470200493895D+01 0.8354836475027D+01 0.8235063078754D+01 0.8111164937189D+01 + 0.7983433124252D+01 0.7852163817216D+01 0.7717656983696D+01 0.7580215099831D+01 + 0.7440141905014D+01 0.7297741198086D+01 0.7153315679440D+01 0.7007165843079D+01 + 0.6859588922166D+01 0.6710877891167D+01 0.6561320527250D+01 0.6411198533128D+01 + 0.6260786723101D+01 0.6110352273646D+01 0.5960154039458D+01 0.5810441935471D+01 + 0.5661456384987D+01 0.5513427833700D+01 0.5366576329042D+01 0.5221111163955D+01 + 0.5077230583918D+01 0.4935121555751D+01 0.4794959596475D+01 0.4656908660288D+01 + 0.4521121081498D+01 0.4387737571052D+01 0.4256887264186D+01 0.4128687816522D+01 + 0.4003245545873D+01 0.3880655616880D+01 0.3761002265561D+01 0.3644359060777D+01 + 0.3530789199588D+01 0.3420345833472D+01 0.3313072422343D+01 0.3209003113371D+01 + 0.3108163141592D+01 0.3010569249384D+01 0.2916230121919D+01 0.2825146835796D+01 + 0.2737313318133D+01 0.2652716813508D+01 0.2571338356232D+01 0.2493153245580D+01 + 0.2418131521695D+01 0.2346238440047D+01 0.2277434942461D+01 0.2211678122838D+01 + 0.2148921685899D+01 0.2089116397376D+01 0.2032210524266D+01 0.1978150263893D+01 + 0.1926880160684D+01 0.1878343509721D+01 0.1832482746269D+01 0.1789239820638D+01 + 0.1748556557871D+01 0.1710375001879D+01 0.1674637743804D+01 0.1641288234472D+01 + 0.1610271080956D+01 0.1581532327338D+01 0.1555019719890D+01 0.1530682956958D+01 + 0.1508473923914D+01 0.1488346913611D+01 0.1470258832820D+01 0.1454169395155D+01 + 0.1440041301042D+01 0.1427840405245D+01 0.1417535872504D+01 0.1409100321753D+01 + 0.1402509959377D+01 0.1397744701874D+01 0.1394788288181D+01 0.1393628381826D+01 + 0.1394256662892D+01 0.1396668909610D+01 0.1400865069190D+01 0.1406849317222D+01 + 0.1414629369614D+01 0.1424336942263D+01 0.1436096575202D+01 0.1449912447024D+01 + 0.1465794674727D+01 0.1483759333931D+01 0.1503828494539D+01 0.1526030271798D+01 + 0.1550398892649D+01 0.1576974777196D+01 0.1605804635055D+01 0.1636941576215D+01 + 7 1012 + 1 0 -1 -511.89194 + 2 0 -1 -58.90181 + 2 1 1 -50.68932 + 2 1 -2 -49.77537 + 3 0 -1 -5.73317 + 3 1 1 -3.34334 + 3 1 -2 -3.22919 + 0.2122975645015D-04 0.2173507709867D-04 0.2225242316243D-04 0.2278208072829D-04 + 0.2332434268594D-04 0.2387950888954D-04 0.2444788632325D-04 0.2502978927059D-04 + 0.2562553948791D-04 0.2623546638192D-04 0.2685990719144D-04 0.2749920717353D-04 + 0.2815371979393D-04 0.2882380692207D-04 0.2950983903075D-04 0.3021219540050D-04 + 0.3093126432877D-04 0.3166744334418D-04 0.3242113942573D-04 0.3319276922733D-04 + 0.3398275930755D-04 0.3479154636487D-04 0.3561957747857D-04 0.3646731035519D-04 + 0.3733521358096D-04 0.3822376688016D-04 0.3913346137963D-04 0.4006479987955D-04 + 0.4101829713060D-04 0.4199448011777D-04 0.4299388835081D-04 0.4401707416166D-04 + 0.4506460300883D-04 0.4613705378910D-04 0.4723501915650D-04 0.4835910584899D-04 + 0.4950993502270D-04 0.5068814259429D-04 0.5189437959126D-04 0.5312931251066D-04 + 0.5439362368626D-04 0.5568801166444D-04 0.5701319158897D-04 0.5836989559491D-04 + 0.5975887321186D-04 0.6118089177673D-04 0.6263673685632D-04 0.6412721267990D-04 + 0.6565314258201D-04 0.6721536945580D-04 0.6881475621705D-04 0.7045218627922D-04 + 0.7212856403973D-04 0.7384481537777D-04 0.7560188816385D-04 0.7740075278149D-04 + 0.7924240266119D-04 0.8112785482706D-04 0.8305815045642D-04 0.8503435545263D-04 + 0.8705756103141D-04 0.8912888432116D-04 0.9124946897738D-04 0.9342048581165D-04 + 0.9564313343555D-04 0.9791863891974D-04 0.1002482584687D-03 0.1026332781112D-03 + 0.1050750144077D-03 0.1075748151735D-03 0.1101340602203D-03 0.1127541621137D-03 + 0.1154365669501D-03 0.1181827551510D-03 0.1209942422769D-03 0.1238725798590D-03 + 0.1268193562527D-03 0.1298361975089D-03 0.1329247682680D-03 0.1360867726735D-03 + 0.1393239553083D-03 0.1426381021518D-03 0.1460310415612D-03 0.1495046452749D-03 + 0.1530608294397D-03 0.1567015556625D-03 0.1604288320871D-03 0.1642447144955D-03 + 0.1681513074364D-03 0.1721507653792D-03 0.1762452938963D-03 0.1804371508722D-03 + 0.1847286477421D-03 0.1891221507592D-03 0.1936200822920D-03 0.1982249221522D-03 + 0.2029392089542D-03 0.2077655415060D-03 0.2127065802334D-03 0.2177650486382D-03 + 0.2229437347894D-03 0.2282454928513D-03 0.2336732446459D-03 0.2392299812538D-03 + 0.2449187646513D-03 0.2507427293871D-03 0.2567050842979D-03 0.2628091142650D-03 + 0.2690581820118D-03 0.2754557299435D-03 0.2820052820308D-03 0.2887104457371D-03 + 0.2955749139921D-03 0.3026024672103D-03 0.3097969753590D-03 0.3171624000731D-03 + 0.3247027968207D-03 0.3324223171196D-03 0.3403252108055D-03 0.3484158283536D-03 + 0.3566986232552D-03 0.3651781544500D-03 0.3738590888149D-03 0.3827462037126D-03 + 0.3918443895988D-03 0.4011586526914D-03 0.4106941177020D-03 0.4204560306321D-03 + 0.4304497616342D-03 0.4406808079408D-03 0.4511547968612D-03 0.4618774888502D-03 + 0.4728547806468D-03 0.4840927084883D-03 0.4955974513988D-03 0.5073753345551D-03 + 0.5194328327314D-03 0.5317765738249D-03 0.5444133424641D-03 0.5573500837015D-03 + 0.5705939067925D-03 0.5841520890639D-03 0.5980320798714D-03 0.6122415046513D-03 + 0.6267881690659D-03 0.6416800632466D-03 0.6569253661363D-03 0.6725324499326D-03 + 0.6885098846360D-03 0.7048664427037D-03 0.7216111038125D-03 0.7387530597330D-03 + 0.7563017193176D-03 0.7742667136049D-03 0.7926579010441D-03 0.8114853728404D-03 + 0.8307594584254D-03 0.8504907310562D-03 0.8706900135433D-03 0.8913683841142D-03 + 0.9125371824119D-03 0.9342080156346D-03 0.9563927648179D-03 0.9791035912634D-03 + 0.1002352943117D-02 0.1026153562102D-02 0.1050518490405D-02 0.1075461077728D-02 + 0.1100994988496D-02 0.1127134209246D-02 0.1153893056171D-02 0.1181286182852D-02 + 0.1209328588167D-02 0.1238035624379D-02 0.1267423005415D-02 0.1297506815344D-02 + 0.1328303517037D-02 0.1359829961041D-02 0.1392103394654D-02 0.1425141471212D-02 + 0.1458962259585D-02 0.1493584253904D-02 0.1529026383504D-02 0.1565308023106D-02 + 0.1602449003221D-02 0.1640469620811D-02 0.1679390650189D-02 0.1719233354165D-02 + 0.1760019495464D-02 0.1801771348394D-02 0.1844511710794D-02 0.1888263916250D-02 + 0.1933051846599D-02 0.1978899944720D-02 0.2025833227614D-02 0.2073877299798D-02 + 0.2123058366995D-02 0.2173403250151D-02 0.2224939399761D-02 0.2277694910540D-02 + 0.2331698536421D-02 0.2386979705903D-02 0.2443568537747D-02 0.2501495857040D-02 + 0.2560793211623D-02 0.2621492888896D-02 0.2683627933011D-02 0.2747232162458D-02 + 0.2812340188056D-02 0.2878987431352D-02 0.2947210143447D-02 0.3017045424251D-02 + 0.3088531242177D-02 0.3161706454285D-02 0.3236610826892D-02 0.3313285056646D-02 + 0.3391770792086D-02 0.3472110655691D-02 0.3554348266436D-02 0.3638528262858D-02 + 0.3724696326649D-02 0.3812899206788D-02 0.3903184744224D-02 0.3995601897109D-02 + 0.4090200766624D-02 0.4187032623373D-02 0.4286149934389D-02 0.4387606390746D-02 + 0.4491456935804D-02 0.4597757794082D-02 0.4706566500803D-02 0.4817941932088D-02 + 0.4931944335851D-02 0.5048635363379D-02 0.5168078101634D-02 0.5290337106279D-02 + 0.5415478435454D-02 0.5543569684307D-02 0.5674680020311D-02 0.5808880219367D-02 + 0.5946242702730D-02 0.6086841574754D-02 0.6230752661494D-02 0.6378053550168D-02 + 0.6528823629508D-02 0.6683144131013D-02 0.6841098171130D-02 0.7002770794372D-02 + 0.7168249017405D-02 0.7337621874121D-02 0.7510980461712D-02 0.7688417987773D-02 + 0.7870029818463D-02 0.8055913527720D-02 0.8246168947593D-02 0.8440898219673D-02 + 0.8640205847678D-02 0.8844198751201D-02 0.9052986320644D-02 0.9266680473381D-02 + 0.9485395711148D-02 0.9709249178711D-02 0.9938360723829D-02 0.1017285295853D-01 + 0.1041285132175D-01 0.1065848414335D-01 0.1090988270951D-01 0.1116718132961D-01 + 0.1143051740455D-01 0.1170003149653D-01 0.1197586740047D-01 0.1225817221684D-01 + 0.1254709642620D-01 0.1284279396532D-01 0.1314542230495D-01 0.1345514252930D-01 + 0.1377211941725D-01 0.1409652152530D-01 0.1442852127232D-01 0.1476829502620D-01 + 0.1511602319226D-01 0.1547189030365D-01 0.1583608511371D-01 0.1620880069022D-01 + 0.1659023451183D-01 0.1698058856639D-01 0.1738006945154D-01 0.1778888847734D-01 + 0.1820726177118D-01 0.1863541038486D-01 0.1907356040402D-01 0.1952194305980D-01 + 0.1998079484302D-01 0.2045035762063D-01 0.2093087875471D-01 0.2142261122400D-01 + 0.2192581374792D-01 0.2244075091329D-01 0.2296769330365D-01 0.2350691763133D-01 + 0.2405870687229D-01 0.2462335040374D-01 0.2520114414469D-01 0.2579239069942D-01 + 0.2639739950387D-01 0.2701648697516D-01 0.2764997666416D-01 0.2829819941123D-01 + 0.2896149350513D-01 0.2964020484531D-01 0.3033468710740D-01 0.3104530191220D-01 + 0.3177241899806D-01 0.3251641639684D-01 0.3327768061342D-01 0.3405660680881D-01 + 0.3485359898710D-01 0.3566907018606D-01 0.3650344267166D-01 0.3735714813647D-01 + 0.3823062790211D-01 0.3912433312562D-01 0.4003872501011D-01 0.4097427501948D-01 + 0.4193146509749D-01 0.4291078789111D-01 0.4391274697832D-01 0.4493785710035D-01 + 0.4598664439858D-01 0.4705964665594D-01 0.4815741354312D-01 0.4928050686955D-01 + 0.5042950083923D-01 0.5160498231153D-01 0.5280755106696D-01 0.5403782007813D-01 + 0.5529641578584D-01 0.5658397838041D-01 0.5790116208843D-01 0.5924863546488D-01 + 0.6062708169076D-01 0.6203719887636D-01 0.6347970037015D-01 0.6495531507346D-01 + 0.6646478776099D-01 0.6800887940725D-01 0.6958836751900D-01 0.7120404647380D-01 + 0.7285672786470D-01 0.7454724085125D-01 0.7627643251682D-01 0.7804516823229D-01 + 0.7985433202641D-01 0.8170482696258D-01 0.8359757552242D-01 0.8553351999606D-01 + 0.8751362287932D-01 0.8953886727772D-01 0.9161025731761D-01 0.9372881856432D-01 + 0.9589559844749D-01 0.9811166669365D-01 0.1003781157661D+00 0.1026960613124D+00 + 0.1050666426187D+00 0.1074910230727D+00 0.1099703906329D+00 0.1125059583070D+00 + 0.1150989646366D+00 0.1177506741909D+00 0.1204623780676D+00 0.1232353944021D+00 + 0.1260710688845D+00 0.1289707752849D+00 0.1319359159864D+00 0.1349679225270D+00 + 0.1380682561490D+00 0.1412384083570D+00 0.1444799014844D+00 0.1477942892678D+00 + 0.1511831574303D+00 0.1546481242725D+00 0.1581908412731D+00 0.1618129936965D+00 + 0.1655163012104D+00 0.1693025185104D+00 0.1731734359544D+00 0.1771308802047D+00 + 0.1811767148790D+00 0.1853128412094D+00 0.1895411987104D+00 0.1938637658552D+00 + 0.1982825607598D+00 0.2027996418767D+00 0.2074171086957D+00 0.2121371024533D+00 + 0.2169618068509D+00 0.2218934487801D+00 0.2269342990569D+00 0.2320866731634D+00 + 0.2373529319974D+00 0.2427354826295D+00 0.2482367790682D+00 0.2538593230323D+00 + 0.2596056647304D+00 0.2654784036474D+00 0.2714801893389D+00 0.2776137222308D+00 + 0.2838817544268D+00 0.2902870905217D+00 0.2968325884206D+00 0.3035211601645D+00 + 0.3103557727607D+00 0.3173394490192D+00 0.3244752683937D+00 0.3317663678273D+00 + 0.3392159426028D+00 0.3468272471962D+00 0.3546035961349D+00 0.3625483648577D+00 + 0.3706649905790D+00 0.3789569731540D+00 0.3874278759464D+00 0.3960813266976D+00 + 0.4049210183955D+00 0.4139507101454D+00 0.4231742280388D+00 0.4325954660221D+00 + 0.4422183867640D+00 0.4520470225197D+00 0.4620854759931D+00 0.4723379211946D+00 + 0.4828086042953D+00 0.4935018444749D+00 0.5044220347646D+00 0.5155736428822D+00 + 0.5269612120602D+00 0.5385893618646D+00 0.5504627890040D+00 0.5625862681281D+00 + 0.5749646526146D+00 0.5876028753427D+00 0.6005059494532D+00 0.6136789690924D+00 + 0.6271271101407D+00 0.6408556309226D+00 0.6548698728981D+00 0.6691752613333D+00 + 0.6837773059493D+00 0.6986816015479D+00 0.7138938286123D+00 0.7294197538810D+00 + 0.7452652308942D+00 0.7614362005101D+00 0.7779386913894D+00 0.7947788204470D+00 + 0.8119627932680D+00 0.8294969044866D+00 0.8473875381261D+00 0.8656411678975D+00 + 0.8842643574549D+00 0.9032637606047D+00 0.9226461214683D+00 0.9424182745935D+00 + 0.9625871450140D+00 0.9831597482541D+00 0.1004143190275D+01 0.1025544667362D+01 + 0.1047371465949D+01 0.1069630962376D+01 0.1092330622582D+01 0.1115478001718D+01 + 0.1139080743699D+01 0.1163146580667D+01 0.1187683332379D+01 0.1212698905512D+01 + 0.1238201292877D+01 0.1264198572546D+01 0.1290698906886D+01 0.1317710541494D+01 + 0.1345241804028D+01 0.1373301102944D+01 0.1401896926110D+01 0.1431037839321D+01 + 0.1460732484690D+01 0.1490989578921D+01 0.1521817911461D+01 0.1553226342519D+01 + 0.1585223800953D+01 0.1617819282025D+01 0.1651021845012D+01 0.1684840610666D+01 + 0.1719284758534D+01 0.1754363524114D+01 0.1790086195862D+01 0.1826462112019D+01 + 0.1863500657290D+01 0.1901211259327D+01 0.1939603385053D+01 0.1978686536792D+01 + 0.2018470248210D+01 0.2058964080068D+01 0.2100177615772D+01 0.2142120456722D+01 + 0.2184802217451D+01 0.2228232520549D+01 0.2272420991371D+01 0.2317377252521D+01 + 0.2363110918097D+01 0.2409631587718D+01 0.2456948840298D+01 0.2505072227579D+01 + 0.2554011267414D+01 0.2603775436800D+01 0.2654374164640D+01 0.2705816824249D+01 + 0.2758112725590D+01 0.2811271107225D+01 0.2865301128002D+01 0.2920211858443D+01 + 0.2976012271854D+01 0.3032711235135D+01 0.3090317499294D+01 0.3148839689666D+01 + 0.3208286295814D+01 0.3268665661132D+01 0.3329985972130D+01 0.3392255247403D+01 + 0.3455481326284D+01 0.3519671857166D+01 0.3584834285516D+01 0.3650975841540D+01 + 0.3718103527540D+01 0.3786224104928D+01 0.3855344080910D+01 0.3925469694842D+01 + 0.3996606904248D+01 0.4068761370505D+01 0.4141938444201D+01 0.4216143150155D+01 + 0.4291380172106D+01 0.4367653837082D+01 0.4444968099432D+01 0.4523326524540D+01 + 0.4602732272224D+01 0.4683188079814D+01 0.4764696244923D+01 0.4847258607911D+01 + 0.4930876534058D+01 0.5015550895439D+01 0.5101282052526D+01 0.5188069835504D+01 + 0.5275913525340D+01 0.5364811834582D+01 0.5454762887935D+01 0.5545764202593D+01 + 0.5637812668364D+01 0.5730904527600D+01 0.5825035354930D+01 0.5920200036841D+01 + 0.6016392751096D+01 0.6113606946037D+01 0.6211835319763D+01 0.6311069799237D+01 + 0.6411301519318D+01 0.6512520801757D+01 0.6614717134178D+01 0.6717879149076D+01 + 0.6821994602856D+01 0.6927050354936D+01 0.7033032346971D+01 0.7139925582197D+01 + 0.7247714104955D+01 0.7356380980422D+01 0.7465908274590D+01 0.7576277034522D+01 + 0.7687467268944D+01 0.7799457929201D+01 0.7912226890625D+01 0.8025750934367D+01 + 0.8140005729731D+01 0.8254965817070D+01 0.8370604591283D+01 0.8486894285977D+01 + 0.8603805958343D+01 0.8721309474805D+01 0.8839373497487D+01 0.8957965471583D+01 + 0.9077051613664D+01 0.9196596901005D+01 0.9316565061973D+01 0.9436918567578D+01 + 0.9557618624205D+01 0.9678625167647D+01 0.9799896858462D+01 0.9921391078761D+01 + 0.1004306393048D+02 0.1016487023519D+02 0.1028676353561D+02 0.1040869609872D+02 + 0.1053061892078D+02 0.1065248173410D+02 0.1077423301584D+02 0.1089581999877D+02 + 0.1101718868413D+02 0.1113828385666D+02 0.1125904910191D+02 0.1137942682584D+02 + 0.1149935827678D+02 0.1161878356999D+02 0.1173764171462D+02 0.1185587064341D+02 + 0.1197340724503D+02 0.1209018739920D+02 0.1220614601465D+02 0.1232121706995D+02 + 0.1243533365740D+02 0.1254842802982D+02 0.1266043165050D+02 0.1277127524634D+02 + 0.1288088886404D+02 0.1298920192971D+02 0.1309614331160D+02 0.1320164138629D+02 + 0.1330562410812D+02 0.1340801908212D+02 0.1350875364026D+02 0.1360775492116D+02 + 0.1370494995324D+02 0.1380026574132D+02 0.1389362935662D+02 0.1398496803019D+02 + 0.1407420924981D+02 0.1416128086012D+02 0.1424611116627D+02 0.1432862904069D+02 + 0.1440876403324D+02 0.1448644648440D+02 0.1456160764164D+02 0.1463417977876D+02 + 0.1470409631813D+02 0.1477129195572D+02 0.1483570278883D+02 0.1489726644633D+02 + 0.1495592222127D+02 0.1501161120574D+02 0.1506427642781D+02 0.1511386299027D+02 + 0.1516031821110D+02 0.1520359176531D+02 0.1524363582812D+02 0.1528040521898D+02 + 0.1531385754641D+02 0.1534395335325D+02 0.1537065626208D+02 0.1539393312048D+02 + 0.1541375414585D+02 0.1543009306950D+02 0.1544292727951D+02 0.1545223796216D+02 + 0.1545801024155D+02 0.1546023331695D+02 0.1545890059744D+02 0.1545400983365D+02 + 0.1544556324596D+02 0.1543356764880D+02 0.1541803457065D+02 0.1539898036925D+02 + 0.1537642634154D+02 0.1535039882796D+02 0.1532092931044D+02 0.1528805450387D+02 + 0.1525181644030D+02 0.1521226254557D+02 0.1516944570778D+02 0.1512342433713D+02 + 0.1507426241669D+02 0.1502202954350D+02 0.1496680095964D+02 0.1490865757272D+02 + 0.1484768596530D+02 0.1478397839284D+02 0.1471763276969D+02 0.1464875264266D+02 + 0.1457744715182D+02 0.1450383097801D+02 0.1442802427679D+02 0.1435015259838D+02 + 0.1427034679327D+02 0.1418874290321D+02 0.1410548203722D+02 0.1402071023247D+02 + 0.1393457829969D+02 0.1384724165293D+02 0.1375886012364D+02 0.1366959775879D+02 + 0.1357962260304D+02 0.1348910646488D+02 0.1339822466686D+02 0.1330715577980D+02 + 0.1321608134121D+02 0.1312518555808D+02 0.1303465499419D+02 0.1294467824221D+02 + 0.1285544558101D+02 0.1276714861841D+02 0.1267997991994D+02 0.1259413262403D+02 + 0.1250980004419D+02 0.1242717525885D+02 0.1234645068948D+02 0.1226781766776D+02 + 0.1219146599257D+02 0.1211758347770D+02 0.1204635549121D+02 0.1197796448732D+02 + 0.1191258953197D+02 0.1185040582321D+02 0.1179158420730D+02 0.1173629069208D+02 + 0.1168468595856D+02 0.1163692487226D+02 0.1159315599549D+02 0.1155352110209D+02 + 0.1151815469598D+02 0.1148718353503D+02 0.1146072616178D+02 0.1143889244247D+02 + 0.1142178311602D+02 0.1140948935454D+02 0.1140209233686D+02 0.1139966283678D+02 + 0.1140226082774D+02 0.1140993510519D+02 0.1142272292875D+02 0.1144064968524D+02 + 0.1146372857460D+02 0.1149196031991D+02 0.1152533290326D+02 0.1156382132880D+02 + 0.1160738741454D+02 0.1165597961412D+02 0.1170953287012D+02 0.1176796849989D+02 + 0.1183119411535D+02 0.1189910357777D+02 0.1197157698856D+02 0.1204848071701D+02 + 0.1212966746596D+02 0.1221497637600D+02 0.1230423316888D+02 0.1239725033077D+02 + 0.1249382733567D+02 0.1259375090926D+02 0.1269679533346D+02 0.1280272279167D+02 + 0.1291128375448D+02 0.1302221740584D+02 0.1313525210912D+02 0.1325010591253D+02 + 0.1336648709337D+02 0.1348409474012D+02 0.1360261937149D+02 0.1372174359123D+02 + 0.1384114277758D+02 0.1396048580566D+02 0.1407943580155D+02 0.1419765092608D+02 + 0.1431478518661D+02 0.1443048927478D+02 0.1454441142812D+02 0.1465619831308D+02 + 0.1476549592746D+02 0.1487195051928D+02 0.1497520951989D+02 0.1507492248828D+02 + 0.1517074206398D+02 0.1526232492551D+02 0.1534933275145D+02 0.1543143318112D+02 + 0.1550830077157D+02 0.1557961794797D+02 0.1564507594396D+02 0.1570437572881D+02 + 0.1575722891823D+02 0.1580335866539D+02 0.1584250052899D+02 0.1587440331524D+02 + 0.1589882989033D+02 0.1591555796049D+02 0.1592438081630D+02 0.1592510803844D+02 + 0.1591756616179D+02 0.1590159929512D+02 0.1587706969359D+02 0.1584385828154D+02 + 0.1580186512290D+02 0.1575100983720D+02 0.1569123195871D+02 0.1562249123695D+02 + 0.1554476787665D+02 0.1545806271560D+02 0.1536239733893D+02 0.1525781412875D+02 + 0.1514437624809D+02 0.1502216755847D+02 0.1489129247063D+02 0.1475187572813D+02 + 0.1460406212401D+02 0.1444801615062D+02 0.1428392158332D+02 0.1411198099888D+02 + 0.1393241522964D+02 0.1374546275490D+02 0.1355137903119D+02 0.1335043576333D+02 + 0.1314292011864D+02 0.1292913388664D+02 0.1270939258714D+02 0.1248402452972D+02 + 0.1225336982785D+02 0.1201777937125D+02 0.1177761376017D+02 0.1153324220569D+02 + 0.1128504140014D+02 0.1103339436205D+02 0.1077868926027D+02 0.1052131822179D+02 + 0.1026167612835D+02 0.1000015940663D+02 0.9737164817090D+01 0.9473088246666D+01 + 0.9208323510392D+01 0.8943261167138D+01 0.8678287354606D+01 0.8413782648689D+01 + 0.8150120952198D+01 0.7887668417870D+01 0.7626782410424D+01 0.7367810512255D+01 + 0.7111089577147D+01 0.6856944836175D+01 0.6605689059620D+01 0.6357621778576D+01 + 0.6113028569417D+01 0.5872180404071D+01 0.5635333068605D+01 0.5402726652271D+01 + 0.5174585108689D+01 0.4951115890458D+01 0.4732509658013D+01 0.4518940063093D+01 + 0.4310563606744D+01 0.4107519571314D+01 0.3909930025455D+01 0.3717899900701D+01 + 0.3531517137795D+01 0.3350852900521D+01 0.3175961854415D+01 0.3006882507418D+01 + 0.2843637609166D+01 0.2686234605393D+01 0.2534666143602D+01 0.2388910626020D+01 + 0.2248932805599D+01 0.2114684420764D+01 0.1986104864410D+01 0.1863121882663D+01 + 0.1745652298807D+01 0.1633602757816D+01 0.1526870486911D+01 0.1425344067651D+01 + 0.1328904215091D+01 0.1237424559686D+01 0.1150772427713D+01 0.1068809616148D+01 + 0.9913931580887D+00 0.9183760750247D+00 0.8496081124357D+00 0.7849364554513D+00 + 0.7242064215293D+00 0.6672621273712D+00 0.6139471275574D+00 0.5641050226618D+00 + 0.5175800348878D+00 0.4742175495586D+00 0.4338646210828D+00 0.3963704423129D+00 + 0.3615867764997D+00 0.3293683513354D+00 0.2995732148544D+00 0.2720630532321D+00 + 0.2467034707815D+00 0.2233642326902D+00 0.2019194712763D+00 0.1822478567499D+00 + 0.1642327336682D+00 0.1477622244444D+00 0.1327293014336D+00 0.1190318292464D+00 + 0.1065725790655D+00 0.9525921682581D-01 0.8500426719540D-01 0.7572505534570D-01 + 0.6734362852856D-01 0.5978665949119D-01 0.5298533375213D-01 0.4687522273735D-01 + 0.4139614473480D-01 0.3649201557103D-01 0.3211069084453D-01 0.2820380147099D-01 + 0.2472658420543D-01 0.2163770870794D-01 0.1889910261478D-01 0.1647577596641D-01 + 0.1433564623066D-01 0.1244936504301D-01 0.1079014767040D-01 0.9333606088531D-02 + 0.8057586449521D-02 0.6942011605538D-02 0.5968729247262D-02 0.5121366113861D-02 + 0.4385188634413D-02 0.3746970269980D-02 0.3194865741265D-02 0.2718292249293D-02 + 0.2307817726031D-02 0.1955056088404D-02 0.1652569412799D-02 0.1393776897745D-02 + 0.1172870439853D-02 0.9847366120634D-03 0.8248848034661D-03 0.6893812560569D-03 + 0.5747887154298D-03 0.4781113990982D-03 0.3967449774979D-03 0.3284312582634D-03 + 0.2712172636576D-03 0.2234183935981D-03 0.1835853721449D-03 0.1504746831443D-03 + 0.1230222105786D-03 0.1003198106540D-03 0.8159455542106D-04 0.6619040144209D-04 + 0.5355205138722D-04 0.4321079120846D-04 0.3477210045803D-04 0.2790484818898D-04 + 0.2233190152246D-04 0.1782198824118D-04 0.1418266855132D-04 0.1125428434880D-04 + 0.8904766856498D-05 0.7025195313453D-05 0.5526010459652D-05 0.4333796852085D-05 + 0.3388557563637D-05 0.2641413563333D-05 0.2052668070841D-05 0.1590183444862D-05 + 0.1228024735392D-05 0.9453299398051D-06 0.7253722919424D-06 0.5547846237125D-06 + 0.4229200131023D-06 0.3213266143727D-06 0.2433177983142D-06 0.1836215545666D-06 + 0.1380955642703D-06 0.1034964778941D-06 0.7729376586493D-07 0.5752008209307D-07 + 0.4265142355148D-07 0.3151151106808D-07 0.2319578320089D-07 0.1701120974173D-07 + 0.1242881489534D-07 0.9046371073667D-08 0.6559198960071D-08 0.4737402476978D-08 + 0.3408191153158D-08 0.2442208093542D-08 0.1742998768590D-08 0.1238932286038D-08 + 0.8770296193333D-09 0.6182683290111D-09 0.4340255982013D-09 0.3033950772413D-09 + 0.2111715589818D-09 0.1463438404983D-09 0.1009726185101D-09 0.6935859066118D-10 + 0.4742849271888D-10 0.3228488955626D-10 0.2187547853929D-10 0.1475212866899D-10 + 0.9901881750809D-11 0.6613860882122D-11 0.4396644350124D-11 0.2908650000322D-11 + 0.1914873227728D-11 0.1254415200484D-11 0.8176535094916D-12 0.5302708391854D-12 + 0.3421370551355D-12 0.2196087836422D-12 0.1402231518601D-12 0.8906014768602D-13 + LSMS: xx z= 26. xvalws= 2.77074 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728402963D+02-0.5199725117641D+02-0.5199721792578D+02-0.5199718427293D+02 +-0.5199715021300D+02-0.5199711574107D+02-0.5199708085214D+02-0.5199704554119D+02 +-0.5199700980309D+02-0.5199697363268D+02-0.5199693702474D+02-0.5199689997397D+02 +-0.5199686247500D+02-0.5199682452243D+02-0.5199678611076D+02-0.5199674723444D+02 +-0.5199670788785D+02-0.5199666806529D+02-0.5199662776101D+02-0.5199658696918D+02 +-0.5199654568390D+02-0.5199650389922D+02-0.5199646160907D+02-0.5199641880734D+02 +-0.5199637548785D+02-0.5199633164434D+02-0.5199628727046D+02-0.5199624235979D+02 +-0.5199619690585D+02-0.5199615090205D+02-0.5199610434176D+02-0.5199605721822D+02 +-0.5199600952464D+02-0.5199596125410D+02-0.5199591239964D+02-0.5199586295419D+02 +-0.5199581291060D+02-0.5199576226162D+02-0.5199571099994D+02-0.5199565911815D+02 +-0.5199560660874D+02-0.5199555346411D+02-0.5199549967658D+02-0.5199544523837D+02 +-0.5199539014162D+02-0.5199533437834D+02-0.5199527794048D+02-0.5199522081989D+02 +-0.5199516300828D+02-0.5199510449731D+02-0.5199504527851D+02-0.5199498534331D+02 +-0.5199492468306D+02-0.5199486328897D+02-0.5199480115217D+02-0.5199473826367D+02 +-0.5199467461436D+02-0.5199461019507D+02-0.5199454499646D+02-0.5199447900910D+02 +-0.5199441222344D+02-0.5199434462984D+02-0.5199427621849D+02-0.5199420697954D+02 +-0.5199413690295D+02-0.5199406597858D+02-0.5199399419618D+02-0.5199392154537D+02 +-0.5199384801563D+02-0.5199377359634D+02-0.5199369827672D+02-0.5199362204589D+02 +-0.5199354489281D+02-0.5199346680633D+02-0.5199338777515D+02-0.5199330778784D+02 +-0.5199322683282D+02-0.5199314489839D+02-0.5199306197270D+02-0.5199297804374D+02 +-0.5199289309939D+02-0.5199280712733D+02-0.5199272011516D+02-0.5199263205027D+02 +-0.5199254291992D+02-0.5199245271123D+02-0.5199236141114D+02-0.5199226900644D+02 +-0.5199217548376D+02-0.5199208082958D+02-0.5199198503019D+02-0.5199188807175D+02 +-0.5199178994021D+02-0.5199169062139D+02-0.5199159010092D+02-0.5199148836424D+02 +-0.5199138539665D+02-0.5199128118323D+02-0.5199117570892D+02-0.5199106895845D+02 +-0.5199096091638D+02-0.5199085156707D+02-0.5199074089471D+02-0.5199062888326D+02 +-0.5199051551654D+02-0.5199040077813D+02-0.5199028465143D+02-0.5199016711964D+02 +-0.5199004816574D+02-0.5198992777253D+02-0.5198980592257D+02-0.5198968259824D+02 +-0.5198955778170D+02-0.5198943145487D+02-0.5198930359948D+02-0.5198917419701D+02 +-0.5198904322875D+02-0.5198891067574D+02-0.5198877651879D+02-0.5198864073848D+02 +-0.5198850331517D+02-0.5198836422896D+02-0.5198822345972D+02-0.5198808098707D+02 +-0.5198793679039D+02-0.5198779084882D+02-0.5198764314123D+02-0.5198749364622D+02 +-0.5198734234217D+02-0.5198718920716D+02-0.5198703421905D+02-0.5198687735537D+02 +-0.5198671859343D+02-0.5198655791024D+02-0.5198639528254D+02-0.5198623068679D+02 +-0.5198606409915D+02-0.5198589549550D+02-0.5198572485143D+02-0.5198555214224D+02 +-0.5198537734293D+02-0.5198520042816D+02-0.5198502137235D+02-0.5198484014954D+02 +-0.5198465673351D+02-0.5198447109769D+02-0.5198428321519D+02-0.5198409305883D+02 +-0.5198390060104D+02-0.5198370581396D+02-0.5198350866939D+02-0.5198330913876D+02 +-0.5198310719319D+02-0.5198290280341D+02-0.5198269593983D+02-0.5198248657249D+02 +-0.5198227467106D+02-0.5198206020484D+02-0.5198184314277D+02-0.5198162345340D+02 +-0.5198140110492D+02-0.5198117606510D+02-0.5198094830136D+02-0.5198071778068D+02 +-0.5198048446968D+02-0.5198024833454D+02-0.5198000934107D+02-0.5197976745462D+02 +-0.5197952264015D+02-0.5197927486220D+02-0.5197902408485D+02-0.5197877027176D+02 +-0.5197851338615D+02-0.5197825339081D+02-0.5197799024804D+02-0.5197772391971D+02 +-0.5197745436723D+02-0.5197718155151D+02-0.5197690543304D+02-0.5197662597177D+02 +-0.5197634312720D+02-0.5197605685833D+02-0.5197576712367D+02-0.5197547388122D+02 +-0.5197517708846D+02-0.5197487670236D+02-0.5197457267938D+02-0.5197426497542D+02 +-0.5197395354589D+02-0.5197363834563D+02-0.5197331932893D+02-0.5197299644952D+02 +-0.5197266966059D+02-0.5197233891476D+02-0.5197200416404D+02-0.5197166535990D+02 +-0.5197132245319D+02-0.5197097539418D+02-0.5197062413252D+02-0.5197026861727D+02 +-0.5196990879687D+02-0.5196954461909D+02-0.5196917603112D+02-0.5196880297948D+02 +-0.5196842541005D+02-0.5196804326804D+02-0.5196765649801D+02-0.5196726504383D+02 +-0.5196686884871D+02-0.5196646785514D+02-0.5196606200494D+02-0.5196565123919D+02 +-0.5196523549829D+02-0.5196481472189D+02-0.5196438884890D+02-0.5196395781753D+02 +-0.5196352156518D+02-0.5196308002855D+02-0.5196263314350D+02-0.5196218084518D+02 +-0.5196172306789D+02-0.5196125974518D+02-0.5196079080977D+02-0.5196031619354D+02 +-0.5195983582758D+02-0.5195934964214D+02-0.5195885756657D+02-0.5195835952942D+02 +-0.5195785545834D+02-0.5195734528011D+02-0.5195682892060D+02-0.5195630630481D+02 +-0.5195577735679D+02-0.5195524199969D+02-0.5195470015573D+02-0.5195415174616D+02 +-0.5195359669127D+02-0.5195303491041D+02-0.5195246632192D+02-0.5195189084316D+02 +-0.5195130839046D+02-0.5195071887917D+02-0.5195012222358D+02-0.5194951833693D+02 +-0.5194890713143D+02-0.5194828851819D+02-0.5194766240726D+02-0.5194702870759D+02 +-0.5194638732701D+02-0.5194573817222D+02-0.5194508114882D+02-0.5194441616121D+02 +-0.5194374311266D+02-0.5194306190525D+02-0.5194237243986D+02-0.5194167461616D+02 +-0.5194096833262D+02-0.5194025348643D+02-0.5193952997356D+02-0.5193879768871D+02 +-0.5193805652527D+02-0.5193730637535D+02-0.5193654712973D+02-0.5193577867788D+02 +-0.5193500090790D+02-0.5193421370652D+02-0.5193341695911D+02-0.5193261054963D+02 +-0.5193179436061D+02-0.5193096827316D+02-0.5193013216694D+02-0.5192928592013D+02 +-0.5192842940944D+02-0.5192756251004D+02-0.5192668509561D+02-0.5192579703828D+02 +-0.5192489820860D+02-0.5192398847556D+02-0.5192306770652D+02-0.5192213576726D+02 +-0.5192119252189D+02-0.5192023783287D+02-0.5191927156096D+02-0.5191829356524D+02 +-0.5191730370307D+02-0.5191630183005D+02-0.5191528780001D+02-0.5191426146503D+02 +-0.5191322267532D+02-0.5191217127930D+02-0.5191110712354D+02-0.5191003005272D+02 +-0.5190893990959D+02-0.5190783653503D+02-0.5190671976795D+02-0.5190558944528D+02 +-0.5190444540195D+02-0.5190328747089D+02-0.5190211548297D+02-0.5190092926700D+02 +-0.5189972864968D+02-0.5189851345560D+02-0.5189728350719D+02-0.5189603862472D+02 +-0.5189477862625D+02-0.5189350332759D+02-0.5189221254235D+02-0.5189090608179D+02 +-0.5188958375491D+02-0.5188824536834D+02-0.5188689072635D+02-0.5188551963080D+02 +-0.5188413188114D+02-0.5188272727435D+02-0.5188130560492D+02-0.5187986666482D+02 +-0.5187841024347D+02-0.5187693612772D+02-0.5187544410178D+02-0.5187393394724D+02 +-0.5187240544300D+02-0.5187085836524D+02-0.5186929248740D+02-0.5186770758014D+02 +-0.5186610341132D+02-0.5186447974591D+02-0.5186283634606D+02-0.5186117297093D+02 +-0.5185948937678D+02-0.5185778531685D+02-0.5185606054135D+02-0.5185431479744D+02 +-0.5185254782916D+02-0.5185075937741D+02-0.5184894917991D+02-0.5184711697117D+02 +-0.5184526248242D+02-0.5184338544160D+02-0.5184148557330D+02-0.5183956259875D+02 +-0.5183761623572D+02-0.5183564619854D+02-0.5183365219802D+02-0.5183163394142D+02 +-0.5182959113240D+02-0.5182752347098D+02-0.5182543065350D+02-0.5182331237255D+02 +-0.5182116831697D+02-0.5181899817174D+02-0.5181680161800D+02-0.5181457833297D+02 +-0.5181232798987D+02-0.5181005025795D+02-0.5180774480235D+02-0.5180541128413D+02 +-0.5180304936016D+02-0.5180065868310D+02-0.5179823890134D+02-0.5179578965895D+02 +-0.5179331059564D+02-0.5179080134665D+02-0.5178826154277D+02-0.5178569081025D+02 +-0.5178308877073D+02-0.5178045504121D+02-0.5177778923399D+02-0.5177509095659D+02 +-0.5177235981171D+02-0.5176959539717D+02-0.5176679730585D+02-0.5176396512563D+02 +-0.5176109843930D+02-0.5175819682457D+02-0.5175525985390D+02-0.5175228709457D+02 +-0.5174927810849D+02-0.5174623245221D+02-0.5174314967682D+02-0.5174002932792D+02 +-0.5173687094551D+02-0.5173367406395D+02-0.5173043821187D+02-0.5172716291215D+02 +-0.5172384768177D+02-0.5172049203182D+02-0.5171709546736D+02-0.5171365748739D+02 +-0.5171017758479D+02-0.5170665524617D+02-0.5170308995189D+02-0.5169948117592D+02 +-0.5169582838578D+02-0.5169213104249D+02-0.5168838860043D+02-0.5168460050732D+02 +-0.5168076620412D+02-0.5167688512494D+02-0.5167295669696D+02-0.5166898034036D+02 +-0.5166495546822D+02-0.5166088148646D+02-0.5165675779371D+02-0.5165258378128D+02 +-0.5164835883303D+02-0.5164408232529D+02-0.5163975362681D+02-0.5163537209858D+02 +-0.5163093709386D+02-0.5162644795799D+02-0.5162190402831D+02-0.5161730463415D+02 +-0.5161264909661D+02-0.5160793672858D+02-0.5160316683457D+02-0.5159833871062D+02 +-0.5159345164422D+02-0.5158850491424D+02-0.5158349779076D+02-0.5157842953502D+02 +-0.5157329939929D+02-0.5156810662682D+02-0.5156285045165D+02-0.5155753009857D+02 +-0.5155214478300D+02-0.5154669371088D+02-0.5154117607855D+02-0.5153559107266D+02 +-0.5152993787006D+02-0.5152421563767D+02-0.5151842353238D+02-0.5151256070096D+02 +-0.5150662627991D+02-0.5150061939535D+02-0.5149453916296D+02-0.5148838468777D+02 +-0.5148215506412D+02-0.5147584937554D+02-0.5146946669454D+02-0.5146300608264D+02 +-0.5145646659012D+02-0.5144984725596D+02-0.5144314710771D+02-0.5143636516137D+02 +-0.5142950042123D+02-0.5142255187982D+02-0.5141551851771D+02-0.5140839930344D+02 +-0.5140119319335D+02-0.5139389913149D+02-0.5138651604948D+02-0.5137904286634D+02 +-0.5137147848843D+02-0.5136382180931D+02-0.5135607170955D+02-0.5134822705665D+02 +-0.5134028670491D+02-0.5133224949527D+02-0.5132411425521D+02-0.5131587979859D+02 +-0.5130754492555D+02-0.5129910842232D+02-0.5129056906116D+02-0.5128192560017D+02 +-0.5127317678315D+02-0.5126432133956D+02-0.5125535798425D+02-0.5124628541740D+02 +-0.5123710232443D+02-0.5122780737574D+02-0.5121839922671D+02-0.5120887651745D+02 +-0.5119923787276D+02-0.5118948190193D+02-0.5117960719865D+02-0.5116961234085D+02 +-0.5115949589056D+02-0.5114925639380D+02-0.5113889238044D+02-0.5112840236408D+02 +-0.5111778484188D+02-0.5110703829447D+02-0.5109616118579D+02-0.5108515196301D+02 +-0.5107400905631D+02-0.5106273087889D+02-0.5105131582667D+02-0.5103976227836D+02 +-0.5102806859514D+02-0.5101623312071D+02-0.5100425418105D+02-0.5099213008436D+02 +-0.5097985912091D+02-0.5096743956297D+02-0.5095486966464D+02-0.5094214766176D+02 +-0.5092927177183D+02-0.5091624019384D+02-0.5090305110822D+02-0.5088970267672D+02 +-0.5087619304230D+02-0.5086252032900D+02-0.5084868264193D+02-0.5083467806710D+02 +-0.5082050467136D+02-0.5080616050232D+02-0.5079164358822D+02-0.5077695193792D+02 +-0.5076208354076D+02-0.5074703636655D+02-0.5073180836542D+02-0.5071639746782D+02 +-0.5070080158445D+02-0.5068501860613D+02-0.5066904640389D+02-0.5065288282874D+02 +-0.5063652571181D+02-0.5061997286414D+02-0.5060322207678D+02-0.5058627112067D+02 +-0.5056911774669D+02-0.5055175968555D+02-0.5053419464788D+02-0.5051642032411D+02 +-0.5049843438458D+02-0.5048023447945D+02-0.5046181823877D+02-0.5044318327247D+02 +-0.5042432717038D+02-0.5040524750226D+02-0.5038594181787D+02-0.5036640764694D+02 +-0.5034664249930D+02-0.5032664386488D+02-0.5030640921379D+02-0.5028593599640D+02 +-0.5026522164341D+02-0.5024426356594D+02-0.5022305915564D+02-0.5020160578474D+02 +-0.5017990080623D+02-0.5015794155393D+02-0.5013572534263D+02-0.5011324946826D+02 +-0.5009051120796D+02-0.5006750782030D+02-0.5004423654542D+02-0.5002069460521D+02 +-0.4999687920344D+02-0.4997278752603D+02-0.4994841674120D+02-0.4992376399966D+02 +-0.4989882643488D+02-0.4987360116327D+02-0.4984808528443D+02-0.4982227588141D+02 +-0.4979617002094D+02-0.4976976475371D+02-0.4974305711462D+02-0.4971604412309D+02 +-0.4968872278335D+02-0.4966109008469D+02-0.4963314300185D+02-0.4960487849528D+02 +-0.4957629351145D+02-0.4954738498327D+02-0.4951814983035D+02-0.4948858495939D+02 +-0.4945868726453D+02-0.4942845362775D+02-0.4939788091919D+02-0.4936696599757D+02 +-0.4933570571061D+02-0.4930409689534D+02-0.4927213637859D+02-0.4923982097740D+02 +-0.4920714749935D+02-0.4917411274309D+02-0.4914071349870D+02-0.4910694654815D+02 +-0.4907280866573D+02-0.4903829661848D+02-0.4900340716666D+02-0.4896813706420D+02 +-0.4893248305909D+02-0.4889644189392D+02-0.4886001030623D+02-0.4882318502909D+02 +-0.4878596279141D+02-0.4874834031849D+02-0.4871031433244D+02-0.4867188155262D+02 +-0.4863303869609D+02-0.4859378247804D+02-0.4855410961222D+02-0.4851401681140D+02 +-0.4847350078774D+02-0.4843255825325D+02-0.4839118592018D+02-0.4834938050138D+02 +-0.4830713871075D+02-0.4826445726356D+02-0.4822133287682D+02-0.4817776226967D+02 +-0.4813374216365D+02-0.4808926928306D+02-0.4804434035526D+02-0.4799895211091D+02 +-0.4795310128431D+02-0.4790678461358D+02-0.4785999884093D+02-0.4781274071282D+02 +-0.4776500698020D+02-0.4771679439861D+02-0.4766809972836D+02-0.4761891973461D+02 +-0.4756925118748D+02-0.4751909086208D+02-0.4746843553857D+02-0.4741728200213D+02 +-0.4736562704295D+02-0.4731346745620D+02-0.4726080004188D+02-0.4720762160479D+02 +-0.4715392895431D+02-0.4709971890425D+02-0.4704498827268D+02-0.4698973388163D+02 +-0.4693395255690D+02-0.4687764112767D+02-0.4682079642628D+02-0.4676341528777D+02 +-0.4670549454962D+02-0.4664703105122D+02-0.4658802163351D+02-0.4652846313853D+02 +-0.4646835240891D+02-0.4640768628735D+02-0.4634646161617D+02-0.4628467523671D+02 +-0.4622232398885D+02-0.4615940471037D+02-0.4609591423645D+02-0.4603184939910D+02 +-0.4596720702657D+02-0.4590198394276D+02-0.4583617696675D+02-0.4576978291218D+02 +-0.4570279858676D+02-0.4563522079176D+02-0.4556704632159D+02-0.4549827196328D+02 +-0.4542889449617D+02-0.4535891069156D+02-0.4528831731237D+02-0.4521711111299D+02 +-0.4514528883912D+02-0.4507284722768D+02-0.4499978300686D+02-0.4492609289624D+02 +-0.4485177360700D+02-0.4477682184233D+02-0.4470123429783D+02-0.4462500766219D+02 +-0.4454813861790D+02-0.4447062384219D+02-0.4439246000814D+02-0.4431364378589D+02 +-0.4423417184413D+02-0.4415404085174D+02-0.4407324747964D+02-0.4399178840285D+02 +-0.4390966030283D+02-0.4382685986996D+02-0.4374338380636D+02-0.4365922882888D+02 +-0.4357439167239D+02-0.4348886909331D+02-0.4340265787340D+02-0.4331575482384D+02 +-0.4322815678953D+02-0.4313986065369D+02-0.4305086334268D+02-0.4296116183110D+02 +-0.4287075314713D+02-0.4277963437808D+02-0.4268780267613D+02-0.4259525526436D+02 +-0.4250198944278D+02-0.4240800259471D+02-0.4231329219311D+02-0.4221785580702D+02 +-0.4212169110814D+02-0.4202479587724D+02-0.4192716801066D+02-0.4182880552657D+02 +-0.4172970657123D+02-0.4162986942478D+02-0.4152929250699D+02-0.4142797438248D+02 +-0.4132591376546D+02-0.4122310952415D+02-0.4111956068435D+02-0.4101526643252D+02 +-0.4091022611799D+02-0.4080443925436D+02-0.4069790551997D+02-0.4059062475744D+02 +-0.4048259697200D+02-0.4037382232884D+02-0.4026430114924D+02-0.4015403390548D+02 +-0.4004302121449D+02-0.3993126383031D+02-0.3981876263529D+02-0.3970551863000D+02 +-0.3959153292214D+02-0.3947680671418D+02-0.3936134129010D+02-0.3924513800125D+02 +-0.3912819825140D+02-0.3901052348125D+02-0.3889211515259D+02-0.3877297473220D+02 +-0.3865310367583D+02-0.3853250341248D+02-0.3841117532917D+02-0.3828912075654D+02 +-0.3816634095549D+02-0.3804283710513D+02-0.3791861029232D+02-0.3779366150300D+02 +-0.3766799161555D+02-0.3754160139636D+02-0.3741449149782D+02-0.3728666245883D+02 +-0.3715811470790D+02-0.3702884856900D+02-0.3689886427010D+02-0.3676816195438D+02 +-0.3663674169408D+02-0.3650460350690D+02-0.3637174737474D+02-0.3623817326473D+02 +-0.3610388115218D+02-0.3596887104531D+02-0.3583314301154D+02-0.3569669720495D+02 +-0.3555953389464D+02-0.3542165349386D+02-0.3528305658922D+02-0.3514374397011D+02 +-0.3500371665774D+02-0.3486297593358D+02-0.3472152336690D+02-0.3457936084122D+02 +-0.3443649057928D+02-0.3429291516643D+02-0.3414863757211D+02-0.3400366116934D+02 +-0.3385798975190D+02-0.3371162754922D+02-0.3356457923876D+02-0.3341684995570D+02 +-0.3326844530007D+02-0.3311937134098D+02-0.3296963461820D+02-0.3281924214079D+02 +-0.3266820138293D+02-0.3251652027694D+02-0.3236420720350D+02-0.3221127097903D+02 +-0.3205772084042D+02-0.3190356642710D+02-0.3174881776049D+02-0.3159348522098D+02 +-0.3143757952257D+02-0.3128111168511D+02-0.3112409300454D+02-0.3096653502093D+02 +-0.3080844948479D+02-0.3064984832153D+02-0.3049074359439D+02-0.3033114746593D+02 +-0.3017107215833D+02-0.3001052991254D+02-0.2984953294675D+02-0.2968809341400D+02 +-0.2952622335948D+02-0.2936393467762D+02-0.2920123906907D+02-0.2903814799805D+02 +-0.2887467265011D+02-0.2871082389066D+02-0.2854661222446D+02-0.2838204775647D+02 +-0.2821714015409D+02-0.2805189861135D+02-0.2788633181514D+02-0.2772044791378D+02 +-0.2755425448842D+02-0.2738775852723D+02-0.2722096640307D+02-0.2705388385454D+02 +-0.2688651597109D+02-0.2671886718221D+02-0.2655094125117D+02-0.2638274127348D+02 +-0.2621426968047D+02-0.2604552824823D+02-0.2587651811214D+02-0.2570723978730D+02 +-0.2553769319514D+02-0.2536787769632D+02-0.2519779213021D+02-0.2502743486110D+02 +-0.2485680383129D+02-0.2468589662112D+02-0.2451471051601D+02-0.2434324258050D+02 +-0.2417148973924D+02-0.2399944886481D+02-0.2382711687194D+02-0.2365449081810D+02 +-0.2348156800981D+02-0.2330834611404D+02-0.2313482327422D+02-0.2296099822964D+02 +-0.2278687043744D+02-0.2261244019567D+02-0.2243770876615D+02-0.2226267849517D+02 +-0.2208735293014D+02-0.2191173693001D+02-0.2173583676674D+02-0.2155966021537D+02 +-0.2138321662948D+02-0.2120651699903D+02-0.2102957398727D+02-0.2085240194340D+02 +-0.2067501688787D+02-0.2049743646710D+02-0.2031967987514D+02-0.2014176773999D+02 +-0.1996372197331D+02-0.1978556558301D+02-0.1960732244950D+02-0.1942901706755D+02 +-0.1925067425750D+02-0.1907231885074D+02-0.1889397535633D+02-0.1871566761696D+02 +-0.1853741846374D+02-0.1835924938052D+02-0.1818118018868D+02-0.1800322876380D+02 +-0.1782541079491D+02-0.1764773959582D+02-0.1747022597686D+02-0.1729287818264D+02 +-0.1711570189939D+02-0.1693870033244D+02-0.1676187435187D+02-0.1658522270158D+02 +-0.1640874226459D+02-0.1623242837596D+02-0.1605627517269D+02-0.1588027596970D+02 +-0.1570442365062D+02-0.1552871106216D+02-0.1535313140208D+02-0.1517767859145D+02 +-0.1500234762341D+02-0.1482713488228D+02-0.1465203842815D+02-0.1447705824363D+02 +-0.1430219644106D+02-0.1412745742929D+02-0.1395284804054D+02-0.1377837761854D+02 +-0.1360405806987D+02-0.1342990388081D+02-0.1325593210249D+02-0.1308216230731D+02 +-0.1290861651951D+02-0.1273531912305D+02-0.1256229674959D+02-0.1238957814960D+02 +-0.1221719404907D+02-0.1204517699438D+02-0.1187356118783D+02-0.1170238231558D+02 +-0.1153167737042D+02-0.1136148447069D+02-0.1119184267735D+02-0.1102279181034D+02 +-0.1085437226576D+02-0.1068662483495D+02-0.1051959052659D+02-0.1035331039265D+02 +-0.1018782535928D+02-0.1002317606321D+02-0.9859402694342D+01-0.9696544845323D+01 +-0.9534641368482D+01-0.9373730240659D+01-0.9213848436346D+01-0.9055031809511D+01 +-0.8897314984394D+01-0.8740731255549D+01-0.8585312497336D+01-0.8431089083029D+01 +-0.8278089813661D+01-0.8126341856676D+01-0.7975870694439D+01-0.7826700082584D+01 +-0.7678852018171D+01-0.7532346717566D+01-0.7387202603932D+01-0.7243436304187D+01 +-0.7101062655233D+01-0.6960094719270D+01-0.6820543807924D+01-0.6682419514939D+01 +-0.6545729757123D+01-0.6410480823229D+01-0.6276677430423D+01-0.6144322787958D+01 +-0.6013418667669D+01-0.5883965480867D+01-0.5755962361193D+01-0.5629407252975D+01 +-0.5504297004604D+01-0.5380627466436D+01-0.5258393592702D+01-0.5137589546863D+01 +-0.5018208809882D+01-0.4900244290793D+01-0.4783688438971D+01-0.4668533357470D+01 +-0.4554770916754D+01-0.4442392868124D+01-0.4331390956131D+01-0.4221757029192D+01 +-0.4113483147635D+01-0.4006561688322D+01-0.3900985445011D+01-0.3796747723533D+01 +-0.3693842430876D+01-0.3592264157211D+01-0.3492008249906D+01-0.3393070878541D+01 +-0.3295449089976D+01-0.3199140852531D+01-0.3104145088414D+01-0.3010461693592D+01 +-0.2918091544431D+01-0.2827036490592D+01-0.2737299333835D+01-0.2648883792669D+01 +-0.2561794453010D+01-0.2476036705393D+01-0.2391616669610D+01-0.2308541108029D+01 +-0.2226817329318D+01-0.2146453084634D+01-0.2067456458802D+01-0.1989835759339D+01 +-0.1913599406514D+01-0.1838755827812D+01-0.1765313360391D+01-0.1693280165020D+01 +-0.1622664154978D+01-0.1553472943063D+01-0.1485713809518D+01-0.1419393693186D+01 +-0.1354519207570D+01-0.1291096682842D+01-0.1229132234097D+01-0.1168631855453D+01 +-0.1109601538882D+01-0.1052047416050D+01-0.9959759208814D+00-0.9413939701484D+00 +-0.8883091590719D+00-0.8367299687430D+00-0.7866659821253D+00-0.7381281054637D+00 +-0.6911287920896D+00-0.6456822658698D+00-0.6018047418553D+00-0.5595146420441D+00 +-0.5188328045500D+00-0.4797826848498D+00-0.4423905481512D+00-0.4066856522662D+00 +-0.3727004206897D+00-0.3404706058472D+00-0.3100354427093D+00-0.2814377931599D+00 +-0.2547240189175D+00 + 0.0000000000000D+00 + 1012 0.2770741520224D+01 + 0.2150927949039D-04 0.2202124536575D-04 0.2254539478646D-04 0.2308201760180D-04 + 0.2363141055333D-04 0.2419387743865D-04 0.2476972927906D-04 0.2535928449121D-04 + 0.2596286906285D-04 0.2658081673262D-04 0.2721346917432D-04 0.2786117618535D-04 + 0.2852429587973D-04 0.2920319488569D-04 0.2989824854795D-04 0.3060984113473D-04 + 0.3133836604977D-04 0.3208422604934D-04 0.3284783346437D-04 0.3362961042788D-04 + 0.3442998910781D-04 0.3524941194536D-04 0.3608833189898D-04 0.3694721269416D-04 + 0.3782652907911D-04 0.3872676708658D-04 0.3964842430179D-04 0.4059201013679D-04 + 0.4155804611131D-04 0.4254706614023D-04 0.4355961682789D-04 0.4459625776943D-04 + 0.4565756185917D-04 0.4674411560639D-04 0.4785651945856D-04 0.4899538813222D-04 + 0.5016135095172D-04 0.5135505219602D-04 0.5257715145361D-04 0.5382832398596D-04 + 0.5510926109951D-04 0.5642067052648D-04 0.5776327681476D-04 0.5913782172693D-04 + 0.6054506464885D-04 0.6198578300785D-04 0.6346077270088D-04 0.6497084853274D-04 + 0.6651684466474D-04 0.6809961507398D-04 0.6972003402351D-04 0.7137899654355D-04 + 0.7307741892426D-04 0.7481623921999D-04 0.7659641776564D-04 0.7841893770513D-04 + 0.8028480553242D-04 0.8219505164534D-04 0.8415073091254D-04 0.8615292325379D-04 + 0.8820273423416D-04 0.9030129567206D-04 0.9244976626185D-04 0.9464933221109D-04 + 0.9690120789284D-04 0.9920663651351D-04 0.1015668907964D-03 0.1039832736813D-03 + 0.1064571190411D-03 0.1089897924148D-03 0.1115826917580D-03 0.1142372482113D-03 + 0.1169549268870D-03 0.1197372276738D-03 0.1225856860613D-03 0.1255018739831D-03 + 0.1284874006808D-03 0.1315439135877D-03 0.1346730992336D-03 0.1378766841712D-03 + 0.1411564359238D-03 0.1445141639563D-03 0.1479517206680D-03 0.1514710024102D-03 + 0.1550739505263D-03 0.1587625524179D-03 0.1625388426349D-03 0.1664049039925D-03 + 0.1703628687133D-03 0.1744149195974D-03 0.1785632912194D-03 0.1828102711544D-03 + 0.1871582012321D-03 0.1916094788209D-03 0.1961665581427D-03 0.2008319516176D-03 + 0.2056082312418D-03 0.2104980299966D-03 0.2155040432913D-03 0.2206290304405D-03 + 0.2258758161753D-03 0.2312472921908D-03 0.2367464187300D-03 0.2423762262044D-03 + 0.2481398168542D-03 0.2540403664457D-03 0.2600811260106D-03 0.2662654236245D-03 + 0.2725966662290D-03 0.2790783414953D-03 0.2857140197324D-03 0.2925073558401D-03 + 0.2994620913080D-03 0.3065820562611D-03 0.3138711715547D-03 0.3213334509168D-03 + 0.3289730031429D-03 0.3367940343406D-03 0.3448008502286D-03 0.3529978584881D-03 + 0.3613895711713D-03 0.3699806071650D-03 0.3787756947128D-03 0.3877796739964D-03 + 0.3969974997780D-03 0.4064342441040D-03 0.4160950990725D-03 0.4259853796663D-03 + 0.4361105266519D-03 0.4464761095462D-03 0.4570878296540D-03 0.4679515231757D-03 + 0.4790731643881D-03 0.4904588689006D-03 0.5021148969868D-03 0.5140476569946D-03 + 0.5262637088364D-03 0.5387697675611D-03 0.5515727070097D-03 0.5646795635561D-03 + 0.5780975399370D-03 0.5918340091694D-03 0.6058965185620D-03 0.6202927938188D-03 + 0.6350307432396D-03 0.6501184620192D-03 0.6655642366457D-03 0.6813765494038D-03 + 0.6975640829812D-03 0.7141357251847D-03 0.7311005737650D-03 0.7484679413557D-03 + 0.7662473605260D-03 0.7844485889531D-03 0.8030816147148D-03 0.8221566617048D-03 + 0.8416841951763D-03 0.8616749274129D-03 0.8821398235337D-03 0.9030901074324D-03 + 0.9245372678559D-03 0.9464930646236D-03 0.9689695349932D-03 0.9919790001731D-03 + 0.1015534071988D-02 0.1039647659698D-02 0.1064332976981D-02 0.1089603549068D-02 + 0.1115473220057D-02 0.1141956160389D-02 0.1169066874495D-02 0.1196820208634D-02 + 0.1225231358897D-02 0.1254315879409D-02 0.1284089690715D-02 0.1314569088366D-02 + 0.1345770751696D-02 0.1377711752814D-02 0.1410409565795D-02 0.1443882076088D-02 + 0.1478147590144D-02 0.1513224845264D-02 0.1549133019674D-02 0.1585891742841D-02 + 0.1623521106018D-02 0.1662041673040D-02 0.1701474491365D-02 0.1741841103378D-02 + 0.1783163557945D-02 0.1825464422244D-02 0.1868766793867D-02 0.1913094313196D-02 + 0.1958471176071D-02 0.2004922146751D-02 0.2052472571166D-02 0.2101148390486D-02 + 0.2150976154989D-02 0.2201983038264D-02 0.2254196851731D-02 0.2307646059493D-02 + 0.2362359793542D-02 0.2418367869301D-02 0.2475700801533D-02 0.2534389820612D-02 + 0.2594466889165D-02 0.2655964719104D-02 0.2718916789042D-02 0.2783357362106D-02 + 0.2849321504172D-02 0.2916845102501D-02 0.2985964884814D-02 0.3056718438800D-02 + 0.3129144232066D-02 0.3203281632551D-02 0.3279170929405D-02 0.3356853354336D-02 + 0.3436371103460D-02 0.3517767359634D-02 0.3601086315312D-02 0.3686373195913D-02 + 0.3773674283724D-02 0.3863036942351D-02 0.3954509641719D-02 0.4048141983652D-02 + 0.4143984728019D-02 0.4242089819491D-02 0.4342510414893D-02 0.4445300911185D-02 + 0.4550516974067D-02 0.4658215567249D-02 0.4768454982366D-02 0.4881294869584D-02 + 0.4996796268890D-02 0.5115021642093D-02 0.5236034905549D-02 0.5359901463622D-02 + 0.5486688242898D-02 0.5616463727181D-02 0.5749297993262D-02 0.5885262747508D-02 + 0.6024431363262D-02 0.6166878919093D-02 0.6312682237899D-02 0.6461919926891D-02 + 0.6614672418475D-02 0.6771022012045D-02 0.6931052916716D-02 0.7094851295016D-02 + 0.7262505307545D-02 0.7434105158642D-02 0.7609743143066D-02 0.7789513693721D-02 + 0.7973513430440D-02 0.8161841209859D-02 0.8354598176397D-02 0.8551887814376D-02 + 0.8753816001287D-02 0.8960491062250D-02 0.9172023825667D-02 0.9388527680122D-02 + 0.9610118632529D-02 0.9836915367568D-02 0.1006903930843D-01 0.1030661467892D-01 + 0.1054976856688D-01 0.1079863098909D-01 0.1105333495749D-01 0.1131401654696D-01 + 0.1158081496451D-01 0.1185387262003D-01 0.1213333519856D-01 0.1241935173418D-01 + 0.1271207468545D-01 0.1301166001257D-01 0.1331826725616D-01 0.1363205961778D-01 + 0.1395320404221D-01 0.1428187130150D-01 0.1461823608081D-01 0.1496247706623D-01 + 0.1531477703430D-01 0.1567532294367D-01 0.1604430602860D-01 0.1642192189452D-01 + 0.1680837061563D-01 0.1720385683464D-01 0.1760858986456D-01 0.1802278379280D-01 + 0.1844665758734D-01 0.1888043520531D-01 0.1932434570378D-01 0.1977862335297D-01 + 0.2024350775185D-01 0.2071924394615D-01 0.2120608254895D-01 0.2170427986376D-01 + 0.2221409801021D-01 0.2273580505238D-01 0.2326967512987D-01 0.2381598859160D-01 + 0.2437503213237D-01 0.2494709893234D-01 0.2553248879941D-01 0.2613150831454D-01 + 0.2674447098014D-01 0.2737169737147D-01 0.2801351529124D-01 0.2867025992742D-01 + 0.2934227401421D-01 0.3002990799646D-01 0.3073352019732D-01 0.3145347698951D-01 + 0.3219015296988D-01 0.3294393113773D-01 0.3371520307664D-01 0.3450436914006D-01 + 0.3531183864059D-01 0.3613803004319D-01 0.3698337116219D-01 0.3784829936233D-01 + 0.3873326176383D-01 0.3963871545150D-01 0.4056512768813D-01 0.4151297613205D-01 + 0.4248274905905D-01 0.4347494558865D-01 0.4449007591493D-01 0.4552866154180D-01 + 0.4659123552298D-01 0.4767834270657D-01 0.4879053998454D-01 0.4992839654695D-01 + 0.5109249414114D-01 0.5228342733595D-01 0.5350180379101D-01 0.5474824453121D-01 + 0.5602338422639D-01 0.5732787147645D-01 0.5866236910176D-01 0.6002755443915D-01 + 0.6142411964345D-01 0.6285277199472D-01 0.6431423421119D-01 0.6580924476805D-01 + 0.6733855822219D-01 0.6890294554290D-01 0.7050319444864D-01 0.7214010975008D-01 + 0.7381451369925D-01 0.7552724634520D-01 0.7727916589591D-01 0.7907114908690D-01 + 0.8090409155624D-01 0.8277890822643D-01 0.8469653369292D-01 0.8665792261951D-01 + 0.8866405014071D-01 0.9071591227111D-01 0.9281452632182D-01 0.9496093132410D-01 + 0.9715618846031D-01 0.9940138150208D-01 0.1016976172560D+00 0.1040460260169D+00 + 0.1064477620282D+00 0.1089040039508D+00 0.1114159553388D+00 0.1139848451236D+00 + 0.1166119281054D+00 0.1192984854532D+00 0.1220458252122D+00 0.1248552828197D+00 + 0.1277282216288D+00 0.1306660334408D+00 0.1336701390448D+00 0.1367419887670D+00 + 0.1398830630269D+00 0.1430948729031D+00 0.1463789607067D+00 0.1497369005636D+00 + 0.1531702990050D+00 0.1566807955666D+00 0.1602700633964D+00 0.1639398098711D+00 + 0.1676917772207D+00 0.1715277431623D+00 0.1754495215419D+00 0.1794589629856D+00 + 0.1835579555582D+00 0.1877484254317D+00 0.1920323375616D+00 0.1964116963718D+00 + 0.2008885464482D+00 0.2054649732406D+00 0.2101431037732D+00 0.2149251073635D+00 + 0.2198131963488D+00 0.2248096268222D+00 0.2299166993754D+00 0.2351367598503D+00 + 0.2404722000984D+00 0.2459254587480D+00 0.2514990219789D+00 0.2571954243047D+00 + 0.2630172493626D+00 0.2689671307106D+00 0.2750477526311D+00 0.2812618509418D+00 + 0.2876122138134D+00 0.2941016825931D+00 0.3007331526352D+00 0.3075095741362D+00 + 0.3144339529771D+00 0.3215093515700D+00 0.3287388897102D+00 0.3361257454325D+00 + 0.3436731558729D+00 0.3513844181328D+00 0.3592628901485D+00 0.3673119915621D+00 + 0.3755352045968D+00 0.3839360749336D+00 0.3925182125899D+00 0.4012852927993D+00 + 0.4102410568930D+00 0.4193893131804D+00 0.4287339378299D+00 0.4382788757486D+00 + 0.4480281414604D+00 0.4579858199819D+00 0.4681560676951D+00 0.4785431132164D+00 + 0.4891512582614D+00 0.4999848785043D+00 0.5110484244305D+00 0.5223464221834D+00 + 0.5338834744021D+00 0.5456642610510D+00 0.5576935402392D+00 0.5699761490289D+00 + 0.5825170042325D+00 0.5953211031952D+00 0.6083935245653D+00 0.6217394290472D+00 + 0.6353640601390D+00 0.6492727448516D+00 0.6634708944082D+00 0.6779640049238D+00 + 0.6927576580616D+00 0.7078575216668D+00 0.7232693503742D+00 0.7389989861895D+00 + 0.7550523590420D+00 0.7714354873073D+00 0.7881544782973D+00 0.8052155287175D+00 + 0.8226249250876D+00 0.8403890441249D+00 0.8585143530879D+00 0.8770074100784D+00 + 0.8958748642992D+00 0.9151234562658D+00 0.9347600179702D+00 0.9547914729931D+00 + 0.9752248365635D+00 0.9960672155622D+00 0.1017325808468D+01 0.1039007905241D+01 + 0.1061120887144D+01 0.1083672226499D+01 0.1106669486370D+01 0.1130120320176D+01 + 0.1154032471231D+01 0.1178413772204D+01 0.1203272144493D+01 0.1228615597523D+01 + 0.1254452227950D+01 0.1280790218774D+01 0.1307637838359D+01 0.1335003439353D+01 + 0.1362895457506D+01 0.1391322410385D+01 0.1420292895972D+01 0.1449815591159D+01 + 0.1479899250115D+01 0.1510552702537D+01 0.1541784851777D+01 0.1573604672833D+01 + 0.1606021210210D+01 0.1639043575644D+01 0.1672680945677D+01 0.1706942559091D+01 + 0.1741837714186D+01 0.1777375765901D+01 0.1813566122779D+01 0.1850418243757D+01 + 0.1887941634794D+01 0.1926145845317D+01 0.1965040464488D+01 0.2004635117287D+01 + 0.2044939460400D+01 0.2085963177919D+01 0.2127715976829D+01 0.2170207582300D+01 + 0.2213447732763D+01 0.2257446174769D+01 0.2302212657626D+01 0.2347756927812D+01 + 0.2394088723154D+01 0.2441217766767D+01 0.2489153760756D+01 0.2537906379665D+01 + 0.2587485263675D+01 0.2637900011547D+01 0.2689160173295D+01 0.2741275242598D+01 + 0.2794254648931D+01 0.2848107749430D+01 0.2902843820459D+01 0.2958472048904D+01 + 0.3015001523163D+01 0.3072441223848D+01 0.3130800014182D+01 0.3190086630094D+01 + 0.3250309670002D+01 0.3311477584285D+01 0.3373598664440D+01 0.3436681031917D+01 + 0.3500732626634D+01 0.3565761195166D+01 0.3631774278604D+01 0.3698779200090D+01 + 0.3766783052007D+01 0.3835792682854D+01 0.3905814683769D+01 0.3976855374728D+01 + 0.4048920790399D+01 0.4122016665671D+01 0.4196148420834D+01 0.4271321146438D+01 + 0.4347539587809D+01 0.4424808129241D+01 0.4503130777854D+01 0.4582511147131D+01 + 0.4662952440136D+01 0.4744457432406D+01 0.4827028454547D+01 0.4910667374509D+01 + 0.4995375579573D+01 0.5081153958042D+01 0.5168002880655D+01 0.5255922181721D+01 + 0.5344911139992D+01 0.5434968459290D+01 0.5526092248881D+01 0.5618280003639D+01 + 0.5711528583982D+01 0.5805834195616D+01 0.5901192369103D+01 0.5997597939257D+01 + 0.6095045024395D+01 0.6193527005472D+01 0.6293036505099D+01 0.6393565366487D+01 + 0.6495104632331D+01 0.6597644523660D+01 0.6701174418681D+01 0.6805682831645D+01 + 0.6911157391760D+01 0.7017584822191D+01 0.7124950919171D+01 0.7233240531258D+01 + 0.7342437538781D+01 0.7452524833500D+01 0.7563484298530D+01 0.7675296788562D+01 + 0.7787942110430D+01 0.7901399004058D+01 0.8015645123842D+01 0.8130657020509D+01 + 0.8246410123503D+01 0.8362878723950D+01 0.8480035958250D+01 0.8597853792358D+01 + 0.8716303006799D+01 0.8835353182487D+01 0.8954972687391D+01 0.9075128664130D+01 + 0.9195787018538D+01 0.9316912409273D+01 0.9438468238543D+01 0.9560416644000D+01 + 0.9682718491880D+01 0.9805333371460D+01 0.9928219590896D+01 0.1005133417453D+02 + 0.1017463286171D+02 0.1029807010722D+02 0.1042159908344D+02 0.1054517168417D+02 + 0.1066873853037D+02 0.1079224897780D+02 0.1091565112659D+02 0.1103889183301D+02 + 0.1116191672323D+02 0.1128467020944D+02 0.1140709550823D+02 0.1152913466133D+02 + 0.1165072855885D+02 0.1177181696506D+02 0.1189233854680D+02 0.1201223090454D+02 + 0.1213143060625D+02 0.1224987322407D+02 0.1236749337400D+02 0.1248422475837D+02 + 0.1260000021157D+02 0.1271475174875D+02 0.1282841061773D+02 0.1294090735413D+02 + 0.1305217183979D+02 0.1316213336451D+02 0.1327072069111D+02 0.1337786212400D+02 + 0.1348348558110D+02 0.1358751866928D+02 0.1368988876325D+02 0.1379052308804D+02 + 0.1388934880491D+02 0.1398629310084D+02 0.1408128328150D+02 0.1417424686776D+02 + 0.1426511169568D+02 0.1435380601989D+02 0.1444025862047D+02 0.1452439891313D+02 + 0.1460615706273D+02 0.1468546410000D+02 0.1476225204147D+02 0.1483645401237D+02 + 0.1490800437259D+02 0.1497683884540D+02 0.1504289464893D+02 0.1510611063019D+02 + 0.1516642740155D+02 0.1522378747941D+02 0.1527813542502D+02 0.1532941798703D+02 + 0.1537758424592D+02 0.1542258575964D+02 0.1546437671057D+02 0.1550291405346D+02 + 0.1553815766392D+02 0.1557007048740D+02 0.1559861868825D+02 0.1562377179849D+02 + 0.1564550286611D+02 0.1566378860245D+02 0.1567860952827D+02 0.1568995011828D+02 + 0.1569779894358D+02 0.1570214881171D+02 0.1570299690387D+02 0.1570034490889D+02 + 0.1569419915342D+02 0.1568457072811D+02 0.1567147560898D+02 0.1565493477391D+02 + 0.1563497431333D+02 0.1561162553504D+02 0.1558492506233D+02 0.1555491492507D+02 + 0.1552164264320D+02 0.1548516130217D+02 0.1544552961962D+02 0.1540281200312D+02 + 0.1535707859803D+02 0.1530840532536D+02 0.1525687390884D+02 0.1520257189079D+02 + 0.1514559263632D+02 0.1508603532531D+02 0.1502400493172D+02 0.1495961218971D+02 + 0.1489297354623D+02 0.1482421109950D+02 0.1475345252306D+02 0.1468083097499D+02 + 0.1460648499184D+02 0.1453055836709D+02 0.1445320001360D+02 0.1437456381003D+02 + 0.1429480843075D+02 0.1421409715909D+02 0.1413259768392D+02 0.1405048187912D+02 + 0.1396792556614D+02 0.1388510825940D+02 0.1380221289467D+02 0.1371942554036D+02 + 0.1363693509198D+02 0.1355493294972D+02 0.1347361267958D+02 0.1339316965818D+02 + 0.1331380070165D+02 0.1323570367897D+02 0.1315907711016D+02 0.1308411975004D+02 + 0.1301103015787D+02 0.1294000625373D+02 0.1287124486230D+02 0.1280494124477D+02 + 0.1274128861984D+02 0.1268047767460D+02 0.1262269606643D+02 0.1256812791682D+02 + 0.1251695329838D+02 0.1246934771604D+02 0.1242548158392D+02 0.1238551969900D+02 + 0.1234962071295D+02 0.1231793660373D+02 0.1229061214824D+02 0.1226778439767D+02 + 0.1224958215706D+02 0.1223612547078D+02 0.1222752511553D+02 0.1222388210258D+02 + 0.1222528719100D+02 0.1223182041366D+02 0.1224355061775D+02 0.1226053502171D+02 + 0.1228281879023D+02 0.1231043462935D+02 0.1234340240339D+02 0.1238172877543D+02 + 0.1242540687338D+02 0.1247441598324D+02 0.1252872127141D+02 0.1258827353770D+02 + 0.1265300900087D+02 0.1272284911822D+02 0.1279770044081D+02 0.1287745450601D+02 + 0.1296198776857D+02 0.1305116157186D+02 0.1314482216032D+02 0.1324280073454D+02 + 0.1334491354991D+02 0.1345096205988D+02 0.1356073310471D+02 0.1367399914649D+02 + 0.1379051855093D+02 0.1391003591655D+02 0.1403228245150D+02 0.1415697639825D+02 + 0.1428382350615D+02 0.1441251755180D+02 0.1454274090682D+02 0.1467416515265D+02 + 0.1480645174180D+02 0.1493925270450D+02 0.1507221140012D+02 0.1520496331175D+02 + 0.1533713688305D+02 0.1546835439544D+02 0.1559823288411D+02 0.1572638509088D+02 + 0.1585242045188D+02 0.1597594611769D+02 0.1609656800349D+02 0.1621389186673D+02 + 0.1632752440935D+02 0.1643707440175D+02 0.1654215382521D+02 0.1664237902974D+02 + 0.1673737190368D+02 0.1682676105166D+02 0.1691018297723D+02 0.1698728326633D+02 + 0.1705771776761D+02 0.1712115376582D+02 0.1717727114395D+02 0.1722576353007D+02 + 0.1726633942470D+02 0.1729872330429D+02 0.1732265669667D+02 0.1733789922408D+02 + 0.1734422960952D+02 0.1734144664198D+02 0.1732937009656D+02 0.1730784160492D+02 + 0.1727672547225D+02 0.1723590943644D+02 0.1718530536559D+02 0.1712484989008D+02 + 0.1705450496536D+02 0.1697425836203D+02 0.1688412407975D+02 0.1678414268193D+02 + 0.1667438154808D+02 0.1655493504124D+02 0.1642592458792D+02 0.1628749866833D+02 + 0.1613983271513D+02 0.1598312891883D+02 0.1581761593876D+02 0.1564354851859D+02 + 0.1546120700566D+02 0.1527089677411D+02 0.1507294755170D+02 0.1486771265109D+02 + 0.1465556810624D+02 0.1443691171558D+02 0.1421216199343D+02 0.1398175703206D+02 + 0.1374615327696D+02 0.1350582421831D+02 0.1326125900230D+02 0.1301296096613D+02 + 0.1276144610103D+02 0.1250724144826D+02 0.1225088343315D+02 0.1199291614280D+02 + 0.1173388955369D+02 0.1147435771520D+02 0.1121487689618D+02 0.1095600370143D+02 + 0.1069829316549D+02 0.1044229683153D+02 0.1018856082317D+02 0.9937623917321D+01 + 0.9690015626445D+01 0.9446254298643D+01 0.9206845244038D+01 0.8972278896087D+01 + 0.8743029016360D+01 0.8519550951297D+01 0.8302279949355D+01 0.8091629546790D+01 + 0.7887990030116D+01 0.7691726983014D+01 0.7503179925129D+01 0.7322661049902D+01 + 0.7150454068046D+01 0.6986813162918D+01 0.6831962063451D+01 0.6686093239819D+01 + 0.6549367226364D+01 0.6421912075717D+01 0.6303822947394D+01 0.6195161833447D+01 + 0.6095957423078D+01 0.6006205107394D+01 0.5925867124779D+01 0.5854872846611D+01 + 0.5793119202371D+01 0.5740471242429D+01 0.5696762836121D+01 0.5661797502031D+01 + 0.5635349366701D+01 0.5617164247353D+01 0.5606960853570D+01 0.5604432102259D+01 + 0.5609246539649D+01 0.5621049863505D+01 0.5639466538232D+01 0.5664101495024D+01 + 0.5694541908766D+01 0.5730359042993D+01 0.5771110153784D+01 0.5816340443192D+01 + 0.5865585052475D+01 0.5918371085180D+01 0.5974219649957D+01 0.6032647912832D+01 + 0.6093171148637D+01 0.6155304781260D+01 0.6218566402475D+01 0.6282477759234D+01 + 0.6346566699475D+01 0.6410369066815D+01 0.6473430534781D+01 0.6535308371644D+01 + 0.6595573127395D+01 0.6653810234872D+01 0.6709621517670D+01 0.6762626598041D+01 + 0.6812464198680D+01 0.6858793332986D+01 0.6901294379138D+01 0.6939670034070D+01 + 0.6973646144233D+01 0.7002972410830D+01 0.7027422967990D+01 0.7046796833200D+01 + 0.7060918230061D+01 0.7069636784259D+01 0.7072827594374D+01 0.7070391179926D+01 + 0.7062253309715D+01 0.7048364714231D+01 0.7028700686483D+01 0.7003260576238D+01 + 0.6972067183121D+01 0.6935166054562D+01 0.6892624694966D+01 0.6844531692843D+01 + 0.6790995772965D+01 0.6732144780827D+01 0.6668124606899D+01 0.6599098058289D+01 + 0.6525243685473D+01 0.6446754571799D+01 0.6363837093418D+01 0.6276709657188D+01 + 0.6185601423998D+01 0.6090751024726D+01 0.5992405275866D+01 0.5890817901556D+01 + 0.5786248268476D+01 0.5678960139726D+01 0.5569220453475D+01 0.5457298131760D+01 + 0.5343462924443D+01 0.5227984292928D+01 0.5111130337809D+01 0.4993166774192D+01 + 0.4874355958030D+01 0.4754955966341D+01 0.4635219733799D+01 0.4515394247714D+01 + 0.4395719803061D+01 0.4276429318764D+01 0.4157747716089D+01 0.4039891359594D+01 + 0.3923067560758D+01 0.3807474144035D+01 0.3693299074769D+01 0.3580720148118D+01 + 0.3469904737816D+01 0.3361009603367D+01 0.3254180754011D+01 0.3149553367571D+01 + 0.3047251762116D+01 0.2947389418162D+01 0.2850069049006D+01 0.2755382716614D+01 + 0.2663411990420D+01 0.2574228146230D+01 0.2487892402405D+01 0.2404456190400D+01 + 0.2323961456713D+01 0.2246440993268D+01 0.2171918793250D+01 0.2100410429420D+01 + 0.2031923451965D+01 0.1966457802972D+01 0.1904006244666D+01 0.1844554798640D+01 + 0.1788083193345D+01 0.1734565317240D+01 0.1683969675070D+01 0.1636259844862D+01 + 0.1591394933364D+01 0.1549330027746D+01 0.1510016641546D+01 0.1473403152964D+01 + 0.1439435233770D+01 0.1408056267219D+01 0.1379207753531D+01 0.1352829701650D+01 + 0.1328861006133D+01 0.1307239808175D+01 0.1287903839946D+01 0.1270790751526D+01 + 0.1255838419882D+01 0.1242985239474D+01 0.1232170394175D+01 0.1223334110328D+01 + 0.1216417890857D+01 0.1211364730456D+01 0.1208119311934D+01 0.1206628183910D+01 + 0.1206839920052D+01 0.1208705260142D+01 0.1212177233248D+01 0.1217211263310D+01 + 0.1223765257423D+01 0.1231799677111D+01 0.1241277592815D+01 0.1252164721788D+01 + 0.1264429449524D+01 0.1278042834732D+01 0.1292978597814D+01 0.1309213092627D+01 + 0.1326725261233D+01 0.1345496571135D+01 0.1365510934358D+01 0.1386754607532D+01 + 0.1409215426363D+01 0.1433003097507D+01 0.1458223277591D+01 0.1484860699421D+01 + 0.1512902583279D+01 0.1542338542721D+01 0.1573160498496D+01 0.1605362600812D+01 + 0.1638941160170D+01 0.1673894586973D+01 0.1710223340083D+01 0.1747929884514D+01 + 7 1012 + 1 0 -1 -511.89150 + 2 0 -1 -58.80097 + 2 1 1 -50.61290 + 2 1 -2 -49.69692 + 3 0 -1 -5.52718 + 3 1 1 -3.14309 + 3 1 -2 -3.03034 + 0.2123373461549D-04 0.2173914995400D-04 0.2225659296114D-04 0.2278634977738D-04 + 0.2332871334728D-04 0.2388398358121D-04 0.2445246752083D-04 0.2503447950857D-04 + 0.2563034136106D-04 0.2624038254674D-04 0.2686494036763D-04 0.2750436014548D-04 + 0.2815899541226D-04 0.2882920810522D-04 0.2951536876657D-04 0.3021785674791D-04 + 0.3093706041946D-04 0.3167337738432D-04 0.3242721469777D-04 0.3319898909177D-04 + 0.3398912720483D-04 0.3479806581728D-04 0.3562625209215D-04 0.3647414382175D-04 + 0.3734220968012D-04 0.3823092948144D-04 0.3914079444457D-04 0.4007230746391D-04 + 0.4102598338660D-04 0.4200234929636D-04 0.4300194480406D-04 0.4402532234512D-04 + 0.4507304748402D-04 0.4614569922601D-04 0.4724387033618D-04 0.4836816766617D-04 + 0.4951921248852D-04 0.5069764083903D-04 0.5190410386721D-04 0.5313926819498D-04 + 0.5440381628400D-04 0.5569844681152D-04 0.5702387505533D-04 0.5838083328767D-04 + 0.5977007117859D-04 0.6119235620880D-04 0.6264847409228D-04 0.6413922920902D-04 + 0.6566544504782D-04 0.6722796465978D-04 0.6882765112238D-04 0.7046538801462D-04 + 0.7214207990339D-04 0.7385865284136D-04 0.7561605487667D-04 0.7741525657465D-04 + 0.7925725155197D-04 0.8114305702331D-04 0.8307371436110D-04 0.8505028966841D-04 + 0.8707387436545D-04 0.8914558578994D-04 0.9126656781168D-04 0.9343799146165D-04 + 0.9566105557602D-04 0.9793698745538D-04 0.1002670435396D-03 0.1026525100984D-03 + 0.1050947039390D-03 0.1075949731294D-03 0.1101546977394D-03 0.1127752905997D-03 + 0.1154581980775D-03 0.1182049008719D-03 0.1210169148270D-03 0.1238957917652D-03 + 0.1268431203390D-03 0.1298605269045D-03 0.1329496764137D-03 0.1361122733297D-03 + 0.1393500625619D-03 0.1426648304247D-03 0.1460584056178D-03 0.1495326602303D-03 + 0.1530895107681D-03 0.1567309192056D-03 0.1604588940629D-03 0.1642754915072D-03 + 0.1681828164816D-03 0.1721830238593D-03 0.1762783196258D-03 0.1804709620887D-03 + 0.1847632631165D-03 0.1891575894056D-03 0.1936563637785D-03 0.1982620665115D-03 + 0.2029772366947D-03 0.2078044736231D-03 0.2127464382210D-03 0.2178058545005D-03 + 0.2229855110531D-03 0.2282882625778D-03 0.2337170314442D-03 0.2392748092933D-03 + 0.2449646586752D-03 0.2507897147258D-03 0.2567531868833D-03 0.2628583606444D-03 + 0.2691085993625D-03 0.2755073460880D-03 0.2820581254518D-03 0.2887645455935D-03 + 0.2956303001344D-03 0.3026591701977D-03 0.3098550264756D-03 0.3172218313454D-03 + 0.3247636410353D-03 0.3324846078408D-03 0.3403889823939D-03 0.3484811159850D-03 + 0.3567654629401D-03 0.3652465830528D-03 0.3739291440747D-03 0.3828179242637D-03 + 0.3919178149916D-03 0.4012338234146D-03 0.4107710752045D-03 0.4205348173457D-03 + 0.4305304209971D-03 0.4407633844209D-03 0.4512393359813D-03 0.4619640372121D-03 + 0.4729433859575D-03 0.4841834195856D-03 0.4956903182785D-03 0.5074704083979D-03 + 0.5195301659314D-03 0.5318762200182D-03 0.5445153565579D-03 0.5574545219044D-03 + 0.5707008266453D-03 0.5842615494708D-03 0.5981441411326D-03 0.6123562284955D-03 + 0.6269056186847D-03 0.6418003033287D-03 0.6570484629028D-03 0.6726584711734D-03 + 0.6886388997468D-03 0.7049985227240D-03 0.7217463214642D-03 0.7388914894603D-03 + 0.7564434373277D-03 0.7744117979097D-03 0.7928064315026D-03 0.8116374312024D-03 + 0.8309151283763D-03 0.8506500982622D-03 0.8708531656989D-03 0.8915354109894D-03 + 0.9127081759015D-03 0.9343830698083D-03 0.9565719759715D-03 0.9792870579714D-03 + 0.1002540766287D-02 0.1026345845027D-02 0.1050715338824D-02 0.1075662599879D-02 + 0.1101201295181D-02 0.1127345413883D-02 0.1154109274864D-02 0.1181507534450D-02 + 0.1209555194328D-02 0.1238267609637D-02 0.1267660497252D-02 0.1297749944251D-02 + 0.1328552416593D-02 0.1360084767981D-02 0.1392364248945D-02 0.1425408516127D-02 + 0.1459235641785D-02 0.1493864123514D-02 0.1529312894196D-02 0.1565601332181D-02 + 0.1602749271697D-02 0.1640777013510D-02 0.1679705335822D-02 0.1719555505429D-02 + 0.1760349289133D-02 0.1802108965417D-02 0.1844857336390D-02 0.1888617740010D-02 + 0.1933414062589D-02 0.1979270751585D-02 0.2026212828687D-02 0.2074265903209D-02 + 0.2123456185786D-02 0.2173810502385D-02 0.2225356308647D-02 0.2278121704551D-02 + 0.2332135449417D-02 0.2387426977257D-02 0.2444026412476D-02 0.2501964585936D-02 + 0.2561273051389D-02 0.2621984102285D-02 0.2684130788965D-02 0.2747746936258D-02 + 0.2812867161465D-02 0.2879526892772D-02 0.2947762388071D-02 0.3017610754222D-02 + 0.3089109966753D-02 0.3162298890003D-02 0.3237217297741D-02 0.3313905894238D-02 + 0.3392406335837D-02 0.3472761253004D-02 0.3555014272883D-02 0.3639210042377D-02 + 0.3725394251736D-02 0.3813613658698D-02 0.3903916113173D-02 0.3996350582488D-02 + 0.4090967177209D-02 0.4187817177547D-02 0.4286953060364D-02 0.4388428526794D-02 + 0.4492298530489D-02 0.4598619306504D-02 0.4707448400838D-02 0.4818844700646D-02 + 0.4932868465127D-02 0.5049581357120D-02 0.5169046475404D-02 0.5291328387739D-02 + 0.5416493164639D-02 0.5544608413917D-02 0.5675743316002D-02 0.5809968660057D-02 + 0.5947356880904D-02 0.6087982096781D-02 0.6231920147946D-02 0.6379248636155D-02 + 0.6530046965011D-02 0.6684396381234D-02 0.6842380016839D-02 0.7004082932273D-02 + 0.7169592160503D-02 0.7338996752102D-02 0.7512387821327D-02 0.7689858593235D-02 + 0.7871504451850D-02 0.8057422989391D-02 0.8247714056607D-02 0.8442479814225D-02 + 0.8641824785540D-02 0.8845855910175D-02 0.9054682599025D-02 0.9268416790430D-02 + 0.9487173007575D-02 0.9711068417172D-02 0.9940222889430D-02 0.1017475905935D-01 + 0.1041480238936D-01 0.1066048123337D-01 0.1091192690214D-01 0.1116927373022D-01 + 0.1143265914425D-01 0.1170222373276D-01 0.1197811131760D-01 0.1226046902681D-01 + 0.1254944736912D-01 0.1284520031015D-01 0.1314788535014D-01 0.1345766360348D-01 + 0.1377469987990D-01 0.1409916276750D-01 0.1443122471744D-01 0.1477106213063D-01 + 0.1511885544620D-01 0.1547478923187D-01 0.1583905227632D-01 0.1621183768351D-01 + 0.1659334296907D-01 0.1698377015868D-01 0.1738332588869D-01 0.1779222150874D-01 + 0.1821067318670D-01 0.1863890201578D-01 0.1907713412394D-01 0.1952560078568D-01 + 0.1998453853608D-01 0.2045418928739D-01 0.2093480044805D-01 0.2142662504416D-01 + 0.2192992184360D-01 0.2244495548276D-01 0.2297199659585D-01 0.2351132194704D-01 + 0.2406321456527D-01 0.2462796388197D-01 0.2520586587156D-01 0.2579722319499D-01 + 0.2640234534617D-01 0.2702154880148D-01 0.2765515717239D-01 0.2830350136121D-01 + 0.2896691972007D-01 0.2964575821319D-01 0.3034037058244D-01 0.3105111851634D-01 + 0.3177837182251D-01 0.3252250860359D-01 0.3328391543683D-01 0.3406298755727D-01 + 0.3486012904465D-01 0.3567575301409D-01 0.3651028181063D-01 0.3736414720771D-01 + 0.3823779060956D-01 0.3913166325773D-01 0.4004622644169D-01 0.4098195171364D-01 + 0.4193932110758D-01 0.4291882736274D-01 0.4392097415138D-01 0.4494627631115D-01 + 0.4599526008193D-01 0.4706846334735D-01 0.4816643588104D-01 0.4928973959763D-01 + 0.5043894880863D-01 0.5161465048329D-01 0.5281744451445D-01 0.5404794398948D-01 + 0.5530677546647D-01 0.5659457925562D-01 0.5791200970601D-01 0.5925973549779D-01 + 0.6063843993988D-01 0.6204882127328D-01 0.6349159298001D-01 0.6496748409788D-01 + 0.6647723954103D-01 0.6802162042643D-01 0.6960140440641D-01 0.7121738600725D-01 + 0.7287037697395D-01 0.7456120662128D-01 0.7629072219118D-01 0.7805978921657D-01 + 0.7986929189166D-01 0.8172013344892D-01 0.8361323654265D-01 0.8554954363940D-01 + 0.8753001741513D-01 0.8955564115940D-01 0.9162741918654D-01 0.9374637725383D-01 + 0.9591356298698D-01 0.9813004631275D-01 0.1003969198990D+00 0.1027152996019D+00 + 0.1050863249211D+00 0.1075111594618D+00 0.1099909914051D+00 0.1125270339855D+00 + 0.1151205259766D+00 0.1177727321842D+00 0.1204849439476D+00 0.1232584796489D+00 + 0.1260946852301D+00 0.1289949347182D+00 0.1319606307590D+00 0.1349932051583D+00 + 0.1380941194317D+00 0.1412648653632D+00 0.1445069655708D+00 0.1478219740820D+00 + 0.1512114769165D+00 0.1546770926778D+00 0.1582204731535D+00 0.1618433039236D+00 + 0.1655473049771D+00 0.1693342313383D+00 0.1732058737000D+00 0.1771640590662D+00 + 0.1812106514032D+00 0.1853475522988D+00 0.1895767016304D+00 0.1939000782413D+00 + 0.1983197006251D+00 0.2028376276193D+00 0.2074559591063D+00 0.2121768367234D+00 + 0.2170024445803D+00 0.2219350099852D+00 0.2269768041788D+00 0.2321301430764D+00 + 0.2373973880172D+00 0.2427809465221D+00 0.2482832730585D+00 0.2539068698131D+00 + 0.2596542874715D+00 0.2655281260047D+00 0.2715310354636D+00 0.2776657167793D+00 + 0.2839349225700D+00 0.2903414579550D+00 0.2968881813739D+00 0.3035780054119D+00 + 0.3104138976312D+00 0.3173988814070D+00 0.3245360367687D+00 0.3318285012460D+00 + 0.3392794707188D+00 0.3468922002717D+00 0.3546700050516D+00 0.3626162611285D+00 + 0.3707344063591D+00 0.3790279412529D+00 0.3875004298396D+00 0.3961555005386D+00 + 0.4049968470283D+00 0.4140282291162D+00 0.4232534736091D+00 0.4326764751811D+00 + 0.4423011972414D+00 0.4521316727988D+00 0.4621720053237D+00 0.4724263696067D+00 + 0.4828990126121D+00 0.4935942543268D+00 0.5045164886027D+00 0.5156701839924D+00 + 0.5270598845772D+00 0.5386902107861D+00 0.5505658602051D+00 0.5626916083760D+00 + 0.5750723095830D+00 0.5877128976270D+00 0.6006183865849D+00 0.6137938715547D+00 + 0.6272445293836D+00 0.6409756193782D+00 0.6549924839961D+00 0.6693005495166D+00 + 0.6839053266899D+00 0.6988124113627D+00 0.7140274850788D+00 0.7295563156538D+00 + 0.7454047577210D+00 0.7615787532478D+00 0.7780843320207D+00 0.7949276120969D+00 + 0.8121148002200D+00 0.8296521921997D+00 0.8475461732513D+00 0.8658032182945D+00 + 0.8844298922086D+00 0.9034328500427D+00 0.9228188371772D+00 0.9425946894360D+00 + 0.9627673331456D+00 0.9833437851400D+00 0.1004331152707D+01 0.1025736633476D+01 + 0.1047567515241D+01 0.1069831175720D+01 0.1092535082243D+01 0.1115686791375D+01 + 0.1139293948457D+01 0.1163364287075D+01 0.1187905628445D+01 0.1212925880722D+01 + 0.1238433038208D+01 0.1264435180485D+01 0.1290940471443D+01 0.1317957158220D+01 + 0.1345493570030D+01 0.1373558116898D+01 0.1402159288280D+01 0.1431305651569D+01 + 0.1461005850494D+01 0.1491268603389D+01 0.1522102701342D+01 0.1553517006218D+01 + 0.1585520448546D+01 0.1618122025271D+01 0.1651330797361D+01 0.1685155887276D+01 + 0.1719606476280D+01 0.1754691801602D+01 0.1790421153434D+01 0.1826803871767D+01 + 0.1863849343063D+01 0.1901566996742D+01 0.1939966301501D+01 0.1979056761446D+01 + 0.2018847912032D+01 0.2059349315815D+01 0.2100570557999D+01 0.2142521241790D+01 + 0.2185210983528D+01 0.2228649407614D+01 0.2272846141215D+01 0.2317810808747D+01 + 0.2363553026124D+01 0.2410082394775D+01 0.2457408495423D+01 0.2505540881617D+01 + 0.2554489073015D+01 0.2604262548407D+01 0.2654870738488D+01 0.2706323018355D+01 + 0.2758628699743D+01 0.2811797022979D+01 0.2865837148659D+01 0.2920758149043D+01 + 0.2976568999160D+01 0.3033278567615D+01 0.3090895607108D+01 0.3149428744640D+01 + 0.3208886471423D+01 0.3269277132479D+01 0.3330608915918D+01 0.3392889841912D+01 + 0.3456127751341D+01 0.3520330294118D+01 0.3585504917195D+01 0.3651658852234D+01 + 0.3718799102956D+01 0.3786932432154D+01 0.3856065348377D+01 0.3926204092282D+01 + 0.3997354622651D+01 0.4069522602076D+01 0.4142713382310D+01 0.4216931989288D+01 + 0.4292183107814D+01 0.4368471065927D+01 0.4445799818928D+01 0.4524172933100D+01 + 0.4603593569097D+01 0.4684064465021D+01 0.4765587919192D+01 0.4848165772611D+01 + 0.4931799391130D+01 0.5016489647323D+01 0.5102236902085D+01 0.5189040985952D+01 + 0.5276901180158D+01 0.5365816197444D+01 0.5455784162617D+01 0.5546802592894D+01 + 0.5638868378017D+01 0.5731977760181D+01 0.5826126313769D+01 0.5921308924927D+01 + 0.6017519770983D+01 0.6114752299744D+01 0.6212999208681D+01 0.6312252424025D+01 + 0.6412503079799D+01 0.6513741496818D+01 0.6615957161666D+01 0.6719138705689D+01 + 0.6823273884037D+01 0.6928349554769D+01 0.7034351658067D+01 0.7141265195588D+01 + 0.7249074209985D+01 0.7357761764637D+01 0.7467309923627D+01 0.7577699732003D+01 + 0.7688911196366D+01 0.7800923265826D+01 0.7913713813378D+01 0.8027259617727D+01 + 0.8141536345630D+01 0.8256518534789D+01 0.8372179577355D+01 0.8488491704090D+01 + 0.8605425969248D+01 0.8722952236222D+01 0.8841039164025D+01 0.8959654194655D+01 + 0.9078763541413D+01 0.9198332178230D+01 0.9318323830066D+01 0.9438700964464D+01 + 0.9559424784293D+01 0.9680455221780D+01 0.9801750933887D+01 0.9923269299099D+01 + 0.1004496641570D+02 0.1016679710163D+02 0.1028871489593D+02 0.1041067206198D+02 + 0.1053261959239D+02 0.1065450721594D+02 0.1077628340626D+02 0.1089789539267D+02 + 0.1101928917306D+02 0.1114040952889D+02 0.1126120004259D+02 0.1138160311709D+02 + 0.1150155999788D+02 0.1162101079752D+02 0.1173989452270D+02 0.1185814910389D+02 + 0.1197571142774D+02 0.1209251737221D+02 0.1220850184455D+02 0.1232359882222D+02 + 0.1243774139668D+02 0.1255086182033D+02 0.1266289155645D+02 0.1277376133233D+02 + 0.1288340119558D+02 0.1299174057364D+02 0.1309870833671D+02 0.1320423286383D+02 + 0.1330824211245D+02 0.1341066369131D+02 0.1351142493681D+02 0.1361045299271D+02 + 0.1370767489335D+02 0.1380301765027D+02 0.1389640834224D+02 0.1398777420882D+02 + 0.1407704274716D+02 0.1416414181234D+02 0.1424899972093D+02 0.1433154535791D+02 + 0.1441170828680D+02 0.1448941886294D+02 0.1456460834990D+02 0.1463720903887D+02 + 0.1470715437095D+02 0.1477437906225D+02 0.1483881923166D+02 0.1490041253114D+02 + 0.1495909827839D+02 0.1501481759178D+02 0.1506751352732D+02 0.1511713121747D+02 + 0.1516361801165D+02 0.1520692361818D+02 0.1524700024742D+02 0.1528380275595D+02 + 0.1531728879140D+02 0.1534741893776D+02 0.1537415686084D+02 0.1539746945363D+02 + 0.1541732698111D+02 0.1543370322439D+02 0.1544657562364D+02 0.1545592541956D+02 + 0.1546173779302D+02 0.1546400200242D+02 0.1546271151843D+02 0.1545786415570D+02 + 0.1544946220111D+02 0.1543751253809D+02 0.1542202676661D+02 0.1540302131844D+02 + 0.1538051756708D+02 0.1535454193202D+02 0.1532512597682D+02 0.1529230650045D+02 + 0.1525612562157D+02 0.1521663085508D+02 0.1517387518057D+02 0.1512791710213D+02 + 0.1507882069905D+02 0.1502665566690D+02 0.1497149734847D+02 0.1491342675424D+02 + 0.1485253057170D+02 0.1478890116319D+02 0.1472263655178D+02 0.1465384039476D+02 + 0.1458262194423D+02 0.1450909599456D+02 0.1443338281613D+02 0.1435560807511D+02 + 0.1427590273888D+02 0.1419440296685D+02 0.1411124998625D+02 0.1402658995277D+02 + 0.1394057379573D+02 0.1385335704764D+02 0.1376509965795D+02 0.1367596579089D+02 + 0.1358612360737D+02 0.1349574503081D+02 0.1340500549696D+02 0.1331408368786D+02 + 0.1322316124986D+02 0.1313242249599D+02 0.1304205409292D+02 0.1295224473262D+02 + 0.1286318478926D+02 0.1277506596148D+02 0.1268808090072D+02 0.1260242282594D+02 + 0.1251828512526D+02 0.1243586094535D+02 0.1235534276899D+02 0.1227692198172D+02 + 0.1220078842830D+02 0.1212712995982D+02 0.1205613197253D+02 0.1198797693913D+02 + 0.1192284393379D+02 0.1186090815186D+02 0.1180234042546D+02 0.1174730673615D+02 + 0.1169596772603D+02 0.1164847820834D+02 0.1160498667924D+02 0.1156563483188D+02 + 0.1153055707436D+02 0.1149988005301D+02 0.1147372218250D+02 0.1145219318434D+02 + 0.1143539363525D+02 0.1142341452711D+02 0.1141633683999D+02 0.1141423112993D+02 + 0.1141715713298D+02 0.1142516338731D+02 0.1143828687474D+02 0.1145655268355D+02 + 0.1147997369390D+02 0.1150855028761D+02 0.1154227008374D+02 0.1158110770138D+02 + 0.1162502455129D+02 0.1167396865756D+02 0.1172787451079D+02 0.1178666295396D+02 + 0.1185024110228D+02 0.1191850229803D+02 0.1199132610159D+02 0.1206857831946D+02 + 0.1215011107019D+02 0.1223576288907D+02 0.1232535887199D+02 0.1241871085933D+02 + 0.1251561765997D+02 0.1261586531600D+02 0.1271922740805D+02 0.1282546540151D+02 + 0.1293432903330D+02 0.1304555673916D+02 0.1315887612096D+02 0.1327400445348D+02 + 0.1339064923005D+02 0.1350850874625D+02 0.1362727272054D+02 0.1374662295087D+02 + 0.1386623400591D+02 0.1398577394943D+02 0.1410490509638D+02 0.1422328479880D+02 + 0.1434056625987D+02 0.1445639937388D+02 0.1457043159027D+02 0.1468230879914D+02 + 0.1479167623614D+02 0.1489817940404D+02 0.1500146500841D+02 0.1510118190471D+02 + 0.1519698205391D+02 0.1528852148379D+02 0.1537546125281D+02 0.1545746841364D+02 + 0.1553421697307D+02 0.1560538884523D+02 0.1567067479483D+02 0.1572977536717D+02 + 0.1578240180176D+02 0.1582827692612D+02 0.1586713602663D+02 0.1589872769311D+02 + 0.1592281463392D+02 0.1593917445849D+02 0.1594760042409D+02 0.1594790214378D+02 + 0.1593990625272D+02 0.1592345702984D+02 0.1589841697221D+02 0.1586466731948D+02 + 0.1582210852585D+02 0.1577066067732D+02 0.1571026385193D+02 0.1564087842120D+02 + 0.1556248529064D+02 0.1547508607802D+02 0.1537870322780D+02 0.1527338006062D+02 + 0.1515918075676D+02 0.1503619027308D+02 0.1490451419267D+02 0.1476427850715D+02 + 0.1461562933169D+02 0.1445873255288D+02 0.1429377341010D+02 0.1412095601137D+02 + 0.1394050278444D+02 0.1375265386499D+02 0.1355766642312D+02 0.1335581393054D+02 + 0.1314738537038D+02 0.1293268439219D+02 0.1271202841511D+02 0.1248574768189D+02 + 0.1225418426740D+02 0.1201769104500D+02 0.1177663061449D+02 0.1153137419578D+02 + 0.1128230049248D+02 0.1102979452961D+02 0.1077424647032D+02 0.1051605041603D+02 + 0.1025560319513D+02 0.9993303145083D+01 0.9729548892983D+01 0.9464738139829D+01 + 0.9199266453606D+01 0.8933526076402D+01 0.8667904750745D+01 0.8402784570301D+01 + 0.8138540859996D+01 0.7875541090527D+01 0.7614143832090D+01 0.7354697751983D+01 + 0.7097540660550D+01 0.6842998609696D+01 0.6591385047920D+01 0.6343000035605D+01 + 0.6098129523858D+01 0.5857044699944D+01 0.5620001401934D+01 0.5387239604814D+01 + 0.5158982979846D+01 0.4935438528573D+01 0.4716796292366D+01 0.4503229137976D+01 + 0.4294892619056D+01 0.4091924913152D+01 0.3894446833193D+01 0.3702561912045D+01 + 0.3516356558237D+01 0.3335900280537D+01 0.3161245978670D+01 0.2992430297065D+01 + 0.2829474038194D+01 0.2672382631762D+01 0.2521146655720D+01 0.2375742404881D+01 + 0.2236132502695D+01 0.2102266551639D+01 0.1974081817541D+01 0.1851503943111D+01 + 0.1734447685940D+01 0.1622817676200D+01 0.1516509189368D+01 0.1415408929331D+01 + 0.1319395817360D+01 0.1228341782531D+01 0.1142112549373D+01 0.1060568418635D+01 + 0.9835650373019D+00 0.9109541541726D+00 0.8425843575459D+00 0.7783017917968D+00 + 0.7179508498817D+00 0.6613748390683D+00 0.6084166174653D+00 0.5589191992012D+00 + 0.5127263263911D+00 0.4696830063190D+00 0.4296360125529D+00 0.3924343490009D+00 + 0.3579296762027D+00 0.3259766994340D+00 0.2964335184742D+00 0.2691619391536D+00 + 0.2440277470488D+00 0.2209009439361D+00 0.1996559478365D+00 0.1801717576938D+00 + 0.1623320839184D+00 0.1460254461990D+00 0.1311452401368D+00 0.1175897743854D+00 + 0.1052622800912D+00 0.9407089451527D-01 0.8392862078550D-01 0.7475326577690D-01 + 0.6646735814128D-01 0.5899804851766D-01 0.5227699394346D-01 0.4624022845899D-01 + 0.4082802185442D-01 0.3598472845105D-01 0.3165862773800D-01 0.2780175860384D-01 + 0.2436974881146D-01 0.2132164126495D-01 0.1861971851162D-01 0.1622932681167D-01 + 0.1411870099424D-01 0.1225879120292D-01 0.1062309251766D-01 0.9187478324824D-02 + 0.7930038194170D-02 0.6830920911119D-02 0.5872183206948D-02 0.5037644628161D-02 + 0.4312748890659D-02 0.3684431974697D-02 0.3140997133459D-02 0.2671996911721D-02 + 0.2268122201696D-02 0.1921098300832D-02 0.1623587881022D-02 0.1369100730387D-02 + 0.1151910087150D-02 0.9669753500508D-03 0.8098709208516D-03 0.6767209113939D-03 + 0.5641394300578D-03 0.4691761498429D-03 0.3892668522563D-03 0.3221886372696D-03 + 0.2660194893607D-03 0.2191018926233D-03 0.1800101936858D-03 0.1475214192933D-03 + 0.1205892654847D-03 0.9832098695562D-04 0.7995692809159D-04 0.6485245095860D-04 + 0.5246202996510D-04 0.4232529769133D-04 0.3405484129524D-04 0.2732556374477D-04 + 0.2186543872353D-04 0.1744750226736D-04 0.1388293789508D-04 0.1101512510421D-04 + 0.8714533541124D-05 0.6874356872787D-05 0.5406791351919D-05 0.4239874261002D-05 + 0.3314806839624D-05 0.2583694952262D-05 0.2007648657315D-05 0.1555189018603D-05 + 0.1200916989437D-05 0.9244050332163D-06 0.7092773630705D-06 0.5424493283134D-06 + 0.4135005904089D-06 0.3141603589352D-06 0.2378861413798D-06 0.1795202409555D-06 + 0.1350106538765D-06 0.1011851095086D-06 0.7556879909866D-07 0.5623788451178D-07 + 0.4170219815814D-07 0.3081166707088D-07 0.2268194336078D-07 0.1663552297805D-07 + 0.1215530542863D-07 0.8848107127806D-08 0.6416106613217D-08 0.4634585104140D-08 + 0.3334643304910D-08 0.2389835688104D-08 0.1705876062949D-08 0.1212741020005D-08 + 0.8586376559590D-09 0.6054146003728D-09 0.4250856698627D-09 0.2972075512731D-09 + 0.2069101606973D-09 0.1434236365115D-09 0.9898160505409D-10 0.6800804519963D-10 + 0.4651712787494D-10 0.3167310042586D-10 0.2146695649341D-10 0.1448079937139D-10 + 0.9722622861678D-11 0.6496070631129D-11 0.4319651023999D-11 0.2858591661735D-11 + 0.1882503214946D-11 0.1233598363270D-11 0.8043412065319D-12 0.5218060130221D-12 + 0.3367856512696D-12 0.2162455335843D-12 0.1381220475631D-12 0.8775552000331D-13 diff --git a/Test/Fe1024/v_fe2.1 b/Test/Fe1024/v_fe2.1 new file mode 100755 index 000000000..f3c4e967f --- /dev/null +++ b/Test/Fe1024/v_fe2.1 @@ -0,0 +1,1542 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Fe. + 2 0.0000000000000D+00 + LSMS: xx z= 26. xvalws= 5.22926 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728400909D+02-0.5199725115555D+02-0.5199721790459D+02-0.5199718425142D+02 +-0.5199715019116D+02-0.5199711571889D+02-0.5199708082964D+02-0.5199704551834D+02 +-0.5199700977990D+02-0.5199697360915D+02-0.5199693700086D+02-0.5199689994973D+02 +-0.5199686245042D+02-0.5199682449748D+02-0.5199678608545D+02-0.5199674720876D+02 +-0.5199670786180D+02-0.5199666803887D+02-0.5199662773421D+02-0.5199658694201D+02 +-0.5199654565635D+02-0.5199650387127D+02-0.5199646158073D+02-0.5199641877860D+02 +-0.5199637545872D+02-0.5199633161480D+02-0.5199628724051D+02-0.5199624232942D+02 +-0.5199619687506D+02-0.5199615087084D+02-0.5199610431012D+02-0.5199605718616D+02 +-0.5199600949214D+02-0.5199596122116D+02-0.5199591236626D+02-0.5199586292036D+02 +-0.5199581287632D+02-0.5199576222688D+02-0.5199571096474D+02-0.5199565908248D+02 +-0.5199560657259D+02-0.5199555342748D+02-0.5199549963947D+02-0.5199544520078D+02 +-0.5199539010352D+02-0.5199533433975D+02-0.5199527790139D+02-0.5199522078028D+02 +-0.5199516296816D+02-0.5199510445666D+02-0.5199504523733D+02-0.5199498530160D+02 +-0.5199492464081D+02-0.5199486324617D+02-0.5199480110883D+02-0.5199473821977D+02 +-0.5199467456990D+02-0.5199461015004D+02-0.5199454495085D+02-0.5199447896290D+02 +-0.5199441217666D+02-0.5199434458246D+02-0.5199427617052D+02-0.5199420693096D+02 +-0.5199413685375D+02-0.5199406592876D+02-0.5199399414573D+02-0.5199392149428D+02 +-0.5199384796390D+02-0.5199377354396D+02-0.5199369822368D+02-0.5199362199218D+02 +-0.5199354483843D+02-0.5199346675127D+02-0.5199338771940D+02-0.5199330773139D+02 +-0.5199322677567D+02-0.5199314484053D+02-0.5199306191412D+02-0.5199297798443D+02 +-0.5199289303934D+02-0.5199280706654D+02-0.5199272005361D+02-0.5199263198797D+02 +-0.5199254285685D+02-0.5199245264737D+02-0.5199236134649D+02-0.5199226894099D+02 +-0.5199217541751D+02-0.5199208076251D+02-0.5199198496230D+02-0.5199188800302D+02 +-0.5199178987064D+02-0.5199169055096D+02-0.5199159002963D+02-0.5199148829207D+02 +-0.5199138532359D+02-0.5199128110928D+02-0.5199117563407D+02-0.5199106888269D+02 +-0.5199096083969D+02-0.5199085148944D+02-0.5199074081613D+02-0.5199062880373D+02 +-0.5199051543604D+02-0.5199040069664D+02-0.5199028456895D+02-0.5199016703615D+02 +-0.5199004808124D+02-0.5198992768700D+02-0.5198980583600D+02-0.5198968251063D+02 +-0.5198955769302D+02-0.5198943136512D+02-0.5198930350863D+02-0.5198917410506D+02 +-0.5198904313569D+02-0.5198891058155D+02-0.5198877642345D+02-0.5198864064200D+02 +-0.5198850321751D+02-0.5198836413012D+02-0.5198822335968D+02-0.5198808088582D+02 +-0.5198793668793D+02-0.5198779074512D+02-0.5198764303627D+02-0.5198749354000D+02 +-0.5198734223467D+02-0.5198718909837D+02-0.5198703410894D+02-0.5198687724393D+02 +-0.5198671848065D+02-0.5198655779610D+02-0.5198639516703D+02-0.5198623056988D+02 +-0.5198606398084D+02-0.5198589537577D+02-0.5198572473026D+02-0.5198555201962D+02 +-0.5198537721883D+02-0.5198520030257D+02-0.5198502124524D+02-0.5198484002091D+02 +-0.5198465660333D+02-0.5198447096595D+02-0.5198428308188D+02-0.5198409292391D+02 +-0.5198390046450D+02-0.5198370567579D+02-0.5198350852955D+02-0.5198330899725D+02 +-0.5198310704998D+02-0.5198290265850D+02-0.5198269579318D+02-0.5198248642408D+02 +-0.5198227452087D+02-0.5198206005285D+02-0.5198184298896D+02-0.5198162329776D+02 +-0.5198140094741D+02-0.5198117590571D+02-0.5198094814005D+02-0.5198071761744D+02 +-0.5198048430449D+02-0.5198024816738D+02-0.5198000917191D+02-0.5197976728344D+02 +-0.5197952246692D+02-0.5197927468690D+02-0.5197902390745D+02-0.5197877009224D+02 +-0.5197851320449D+02-0.5197825320698D+02-0.5197799006201D+02-0.5197772373146D+02 +-0.5197745417673D+02-0.5197718135875D+02-0.5197690523796D+02-0.5197662577437D+02 +-0.5197634292744D+02-0.5197605665620D+02-0.5197576691913D+02-0.5197547367423D+02 +-0.5197517687900D+02-0.5197487649041D+02-0.5197457246489D+02-0.5197426475838D+02 +-0.5197395332627D+02-0.5197363812338D+02-0.5197331910403D+02-0.5197299622195D+02 +-0.5197266943031D+02-0.5197233868173D+02-0.5197200392824D+02-0.5197166512128D+02 +-0.5197132221174D+02-0.5197097514984D+02-0.5197062388528D+02-0.5197026836709D+02 +-0.5196990854370D+02-0.5196954436291D+02-0.5196917577189D+02-0.5196880271716D+02 +-0.5196842514461D+02-0.5196804299945D+02-0.5196765622622D+02-0.5196726476881D+02 +-0.5196686857041D+02-0.5196646757354D+02-0.5196606171998D+02-0.5196565095085D+02 +-0.5196523520651D+02-0.5196481442664D+02-0.5196438855015D+02-0.5196395751522D+02 +-0.5196352125928D+02-0.5196307971901D+02-0.5196263283028D+02-0.5196218052823D+02 +-0.5196172274718D+02-0.5196125942066D+02-0.5196079048138D+02-0.5196031586126D+02 +-0.5195983549135D+02-0.5195934930191D+02-0.5195885722231D+02-0.5195835918107D+02 +-0.5195785510585D+02-0.5195734492343D+02-0.5195682855969D+02-0.5195630593961D+02 +-0.5195577698725D+02-0.5195524162577D+02-0.5195469977736D+02-0.5195415136330D+02 +-0.5195359630387D+02-0.5195303451841D+02-0.5195246592528D+02-0.5195189044181D+02 +-0.5195130798435D+02-0.5195071846824D+02-0.5195012180777D+02-0.5194951791619D+02 +-0.5194890670569D+02-0.5194828808741D+02-0.5194766197137D+02-0.5194702826653D+02 +-0.5194638688071D+02-0.5194573772064D+02-0.5194508069188D+02-0.5194441569885D+02 +-0.5194374264482D+02-0.5194306143187D+02-0.5194237196087D+02-0.5194167413149D+02 +-0.5194096784220D+02-0.5194025299021D+02-0.5193952947146D+02-0.5193879718066D+02 +-0.5193805601119D+02-0.5193730585519D+02-0.5193654660341D+02-0.5193577814533D+02 +-0.5193500036904D+02-0.5193421316129D+02-0.5193341640742D+02-0.5193260999141D+02 +-0.5193179379578D+02-0.5193096770164D+02-0.5193013158865D+02-0.5192928533501D+02 +-0.5192842881739D+02-0.5192756191098D+02-0.5192668448947D+02-0.5192579642497D+02 +-0.5192489758803D+02-0.5192398784765D+02-0.5192306707119D+02-0.5192213512442D+02 +-0.5192119187145D+02-0.5192023717474D+02-0.5191927089505D+02-0.5191829289146D+02 +-0.5191730302133D+02-0.5191630114025D+02-0.5191528710207D+02-0.5191426075883D+02 +-0.5191322196077D+02-0.5191217055632D+02-0.5191110639202D+02-0.5191002931255D+02 +-0.5190893916069D+02-0.5190783577729D+02-0.5190671900126D+02-0.5190558866954D+02 +-0.5190444461705D+02-0.5190328667673D+02-0.5190211467945D+02-0.5190092845399D+02 +-0.5189972782709D+02-0.5189851262330D+02-0.5189728266508D+02-0.5189603777267D+02 +-0.5189477776415D+02-0.5189350245533D+02-0.5189221165981D+02-0.5189090518885D+02 +-0.5188958285145D+02-0.5188824445423D+02-0.5188688980147D+02-0.5188551869503D+02 +-0.5188413093435D+02-0.5188272631641D+02-0.5188130463569D+02-0.5187986568418D+02 +-0.5187840925129D+02-0.5187693512386D+02-0.5187544308611D+02-0.5187393291962D+02 +-0.5187240440329D+02-0.5187085731330D+02-0.5186929142309D+02-0.5186770650332D+02 +-0.5186610232183D+02-0.5186447864362D+02-0.5186283523081D+02-0.5186117184259D+02 +-0.5185948823518D+02-0.5185778416183D+02-0.5185605937277D+02-0.5185431361514D+02 +-0.5185254663297D+02-0.5185075816718D+02-0.5184894795548D+02-0.5184711573237D+02 +-0.5184526122909D+02-0.5184338417356D+02-0.5184148429039D+02-0.5183956130079D+02 +-0.5183761492255D+02-0.5183564486998D+02-0.5183365085389D+02-0.5183163258155D+02 +-0.5182958975660D+02-0.5182752207907D+02-0.5182542924529D+02-0.5182331094785D+02 +-0.5182116687559D+02-0.5181899671350D+02-0.5181680014270D+02-0.5181457684041D+02 +-0.5181232647986D+02-0.5181004873028D+02-0.5180774325683D+02-0.5180540972054D+02 +-0.5180304777830D+02-0.5180065708277D+02-0.5179823728232D+02-0.5179578802103D+02 +-0.5179330893860D+02-0.5179079967027D+02-0.5178825984684D+02-0.5178568909453D+02 +-0.5178308703501D+02-0.5178045328526D+02-0.5177778745757D+02-0.5177508915948D+02 +-0.5177235799366D+02-0.5176959355795D+02-0.5176679544522D+02-0.5176396324334D+02 +-0.5176109653512D+02-0.5175819489823D+02-0.5175525790517D+02-0.5175228512318D+02 +-0.5174927611419D+02-0.5174623043474D+02-0.5174314763592D+02-0.5174002726332D+02 +-0.5173686885694D+02-0.5173367195115D+02-0.5173043607457D+02-0.5172716075006D+02 +-0.5172384549462D+02-0.5172048981932D+02-0.5171709322923D+02-0.5171365522335D+02 +-0.5171017529452D+02-0.5170665292940D+02-0.5170308760833D+02-0.5169947880525D+02 +-0.5169582598771D+02-0.5169212861671D+02-0.5168838614662D+02-0.5168459802518D+02 +-0.5168076369333D+02-0.5167688258518D+02-0.5167295412791D+02-0.5166897774168D+02 +-0.5166495283960D+02-0.5166087882755D+02-0.5165675510418D+02-0.5165258106080D+02 +-0.5164835608125D+02-0.5164407954186D+02-0.5163975081138D+02-0.5163536925080D+02 +-0.5163093421337D+02-0.5162644504442D+02-0.5162190108131D+02-0.5161730165335D+02 +-0.5161264608164D+02-0.5160793367906D+02-0.5160316375011D+02-0.5159833559084D+02 +-0.5159344848875D+02-0.5158850172268D+02-0.5158349456272D+02-0.5157842627009D+02 +-0.5157329609709D+02-0.5156810328692D+02-0.5156284707365D+02-0.5155752668206D+02 +-0.5155214132756D+02-0.5154669021608D+02-0.5154117254396D+02-0.5153558749786D+02 +-0.5152993425461D+02-0.5152421198113D+02-0.5151841983433D+02-0.5151255696093D+02 +-0.5150662249744D+02-0.5150061557002D+02-0.5149453529428D+02-0.5148838077528D+02 +-0.5148215110737D+02-0.5147584537403D+02-0.5146946264782D+02-0.5146300199022D+02 +-0.5145646245151D+02-0.5144984307067D+02-0.5144314287525D+02-0.5143636088122D+02 +-0.5142949609291D+02-0.5142254750281D+02-0.5141551409151D+02-0.5140839482753D+02 +-0.5140118866721D+02-0.5139389455459D+02-0.5138651142128D+02-0.5137903818632D+02 +-0.5137147375605D+02-0.5136381702401D+02-0.5135606687078D+02-0.5134822216388D+02 +-0.5134028175756D+02-0.5133224449278D+02-0.5132410919702D+02-0.5131587468413D+02 +-0.5130753975423D+02-0.5129910319357D+02-0.5129056377438D+02-0.5128192025477D+02 +-0.5127317137854D+02-0.5126431587514D+02-0.5125535245940D+02-0.5124627983153D+02 +-0.5123709667690D+02-0.5122780166596D+02-0.5121839345403D+02-0.5120887068125D+02 +-0.5119923197240D+02-0.5118947593678D+02-0.5117960116805D+02-0.5116960624416D+02 +-0.5115948972712D+02-0.5114925016296D+02-0.5113888608154D+02-0.5112839599644D+02 +-0.5111777840483D+02-0.5110703178733D+02-0.5109615460788D+02-0.5108514531363D+02 +-0.5107400233480D+02-0.5106272408452D+02-0.5105130895877D+02-0.5103975533619D+02 +-0.5102806157801D+02-0.5101622602790D+02-0.5100424701185D+02-0.5099212283803D+02 +-0.5097985179674D+02-0.5096743216021D+02-0.5095486218256D+02-0.5094214009961D+02 +-0.5092926412887D+02-0.5091623246932D+02-0.5090304330139D+02-0.5088969478681D+02 +-0.5087618506855D+02-0.5086251227064D+02-0.5084867449820D+02-0.5083466983722D+02 +-0.5082049635455D+02-0.5080615209778D+02-0.5079163509518D+02-0.5077694335558D+02 +-0.5076207486834D+02-0.5074702760324D+02-0.5073179951042D+02-0.5071638852033D+02 +-0.5070079254364D+02-0.5068500947122D+02-0.5066903717403D+02-0.5065287350315D+02 +-0.5063651628963D+02-0.5061996334457D+02-0.5060321245898D+02-0.5058626140382D+02 +-0.5056910792994D+02-0.5055174976809D+02-0.5053418462884D+02-0.5051641020267D+02 +-0.5049842415989D+02-0.5048022415067D+02-0.5046180780505D+02-0.5044317273295D+02 +-0.5042431652422D+02-0.5040523674861D+02-0.5038593095586D+02-0.5036639667573D+02 +-0.5034663141803D+02-0.5032663267268D+02-0.5030639790981D+02-0.5028592457977D+02 +-0.5026521011328D+02-0.5024425192145D+02-0.5022304739591D+02-0.5020159390892D+02 +-0.5017988881346D+02-0.5015792944334D+02-0.5013571311336D+02-0.5011323711944D+02 +-0.5009049873873D+02-0.5006749522980D+02-0.5004422383280D+02-0.5002068176959D+02 +-0.4999686624397D+02-0.4997277444186D+02-0.4994840353146D+02-0.4992375066350D+02 +-0.4989881297144D+02-0.4987358757171D+02-0.4984807156389D+02-0.4982226203106D+02 +-0.4979615603991D+02-0.4976975064117D+02-0.4974304286974D+02-0.4971602974502D+02 +-0.4968870827126D+02-0.4966107543776D+02-0.4963312821924D+02-0.4960486357616D+02 +-0.4957627845502D+02-0.4954736978871D+02-0.4951813449683D+02-0.4948856948612D+02 +-0.4945867165071D+02-0.4942843787257D+02-0.4939786502185D+02-0.4936694995729D+02 +-0.4933568952659D+02-0.4930408056681D+02-0.4927211990478D+02-0.4923980435752D+02 +-0.4920713073265D+02-0.4917409582880D+02-0.4914069643607D+02-0.4910692933642D+02 +-0.4907279130416D+02-0.4903827910633D+02-0.4900338950319D+02-0.4896811924867D+02 +-0.4893246509079D+02-0.4889642377211D+02-0.4885999203021D+02-0.4882316659813D+02 +-0.4878594420482D+02-0.4874832157556D+02-0.4871029543247D+02-0.4867186249491D+02 +-0.4863301947995D+02-0.4859376310277D+02-0.4855409007715D+02-0.4851399711583D+02 +-0.4847348093100D+02-0.4843253823466D+02-0.4839116573905D+02-0.4834936015704D+02 +-0.4830711820251D+02-0.4826443659074D+02-0.4822131203876D+02-0.4817774126566D+02 +-0.4813372099301D+02-0.4808924794511D+02-0.4804431884930D+02-0.4799893043625D+02 +-0.4795307944023D+02-0.4790676259938D+02-0.4785997665588D+02-0.4781271835619D+02 +-0.4776498445124D+02-0.4771677169657D+02-0.4766807685247D+02-0.4761889668409D+02 +-0.4756922796153D+02-0.4751906745988D+02-0.4746841195927D+02-0.4741725824487D+02 +-0.4736560310686D+02-0.4731344334036D+02-0.4726077574537D+02-0.4720759712663D+02 +-0.4715390429349D+02-0.4709969405976D+02-0.4704496324345D+02-0.4698970866656D+02 +-0.4693392715482D+02-0.4687761553742D+02-0.4682077064661D+02-0.4676338931742D+02 +-0.4670546838725D+02-0.4664700469545D+02-0.4658799508292D+02-0.4652843639162D+02 +-0.4646832546412D+02-0.4640765914308D+02-0.4634643427075D+02-0.4628464768840D+02 +-0.4622229623583D+02-0.4615937675077D+02-0.4609588606835D+02-0.4603182102046D+02 +-0.4596717843531D+02-0.4590195513672D+02-0.4583614794369D+02-0.4576975366979D+02 +-0.4570276912265D+02-0.4563519110351D+02-0.4556701640665D+02-0.4549824181908D+02 +-0.4542886412007D+02-0.4535888008084D+02-0.4528828646428D+02-0.4521708002473D+02 +-0.4514525750785D+02-0.4507281565054D+02-0.4499975118097D+02-0.4492606081870D+02 +-0.4485174127497D+02-0.4477678925295D+02-0.4470120144833D+02-0.4462497454985D+02 +-0.4454810524011D+02-0.4447059019649D+02-0.4439242609219D+02-0.4431360959758D+02 +-0.4423413738159D+02-0.4415400611337D+02-0.4407321246418D+02-0.4399175310947D+02 +-0.4390962473114D+02-0.4382682402010D+02-0.4374334767908D+02-0.4365919242563D+02 +-0.4357435499539D+02-0.4348883214570D+02-0.4340262065933D+02-0.4331571734857D+02 +-0.4322811905962D+02-0.4313982267710D+02-0.4305082512897D+02-0.4296112339160D+02 +-0.4287071449512D+02-0.4277959552900D+02-0.4268776364786D+02-0.4259521607738D+02 +-0.4250195012053D+02-0.4240796316384D+02-0.4231325268378D+02-0.4221781625326D+02 +-0.4212165154821D+02-0.4202475635403D+02-0.4192712857207D+02-0.4182876622603D+02 +-0.4172966746809D+02-0.4162983058491D+02-0.4152925400326D+02-0.4142793629535D+02 +-0.4132587618362D+02-0.4122307254514D+02-0.4111952441526D+02-0.4101523099069D+02 +-0.4091019163177D+02-0.4080440586392D+02-0.4069787337814D+02-0.4059059403052D+02 +-0.4048256784069D+02-0.4037379498919D+02-0.4026427581359D+02-0.4015401080347D+02 +-0.4004300059408D+02-0.3993124595881D+02-0.3981874780047D+02-0.3970550714118D+02 +-0.3959152511128D+02-0.3947680293704D+02-0.3936134192738D+02-0.3924514345974D+02 +-0.3912820896514D+02-0.3901053991273D+02-0.3889213779388D+02-0.3877300410616D+02 +-0.3865314033730D+02-0.3853254794941D+02-0.3841122836384D+02-0.3828918294671D+02 +-0.3816641299561D+02-0.3804291972752D+02-0.3791870426838D+02-0.3779376764439D+02 +-0.3766811077544D+02-0.3754173447071D+02-0.3741463942662D+02-0.3728682622747D+02 +-0.3715829534855D+02-0.3702904716206D+02-0.3689908194568D+02-0.3676839989389D+02 +-0.3663700113198D+02-0.3650488573242D+02-0.3637205373385D+02-0.3623850516215D+02 +-0.3610424005352D+02-0.3596925847947D+02-0.3583356057318D+02-0.3569714655716D+02 +-0.3556001677183D+02-0.3542217170480D+02-0.3528361202035D+02-0.3514433858906D+02 +-0.3500435251706D+02-0.3486365517474D+02-0.3472224822457D+02-0.3458013364781D+02 +-0.3443731376977D+02-0.3429379128348D+02-0.3414956927154D+02-0.3400465122587D+02 +-0.3385904106531D+02-0.3371274315081D+02-0.3356576229817D+02-0.3341810378823D+02 +-0.3326977337430D+02-0.3312077728689D+02-0.3297112223571D+02-0.3282081540879D+02 +-0.3266986446883D+02-0.3251827754673D+02-0.3236606323235D+02-0.3221323056253D+02 +-0.3205978900636D+02-0.3190574844798D+02-0.3175111916665D+02-0.3159591181450D+02 +-0.3144013739192D+02-0.3128380722060D+02-0.3112693291460D+02-0.3096952634939D+02 +-0.3081159962896D+02-0.3065316505139D+02-0.3049423507279D+02-0.3033482226994D+02 +-0.3017493930171D+02-0.3001459886954D+02-0.2985381367711D+02-0.2969259638940D+02 +-0.2953095959141D+02-0.2936891574677D+02-0.2920647715631D+02-0.2904365591713D+02 +-0.2888046388202D+02-0.2871691261992D+02-0.2855301337730D+02-0.2838877704096D+02 +-0.2822421410237D+02-0.2805933462405D+02-0.2789414820796D+02-0.2772866396645D+02 +-0.2756289049588D+02-0.2739683585338D+02-0.2723050753680D+02-0.2706391246838D+02 +-0.2689705698223D+02-0.2672994681603D+02-0.2656258710714D+02-0.2639498239345D+02 +-0.2622713661917D+02-0.2605905314574D+02-0.2589073476829D+02-0.2572218373759D+02 +-0.2555340178776D+02-0.2538439017000D+02-0.2521514969218D+02-0.2504568076457D+02 +-0.2487598345161D+02-0.2470605752972D+02-0.2453590255090D+02-0.2436551791213D+02 +-0.2419490293015D+02-0.2402405692122D+02-0.2385297928550D+02-0.2368166959536D+02 +-0.2351012768684D+02-0.2333835375355D+02-0.2316634844181D+02-0.2299411294593D+02 +-0.2282164910224D+02-0.2264895948042D+02-0.2247604747020D+02-0.2230291736187D+02 +-0.2212957441833D+02-0.2195602493665D+02-0.2178227629680D+02-0.2160833699531D+02 +-0.2143421666157D+02-0.2125992605447D+02-0.2108547703736D+02-0.2091088252957D+02 +-0.2073615643311D+02-0.2056131353347D+02-0.2038636937454D+02-0.2021134010787D+02 +-0.2003624231780D+02-0.1986109282464D+02-0.1968590846923D+02-0.1951070588338D+02 +-0.1933550125113D+02-0.1916031006739D+02-0.1898514690054D+02-0.1881002516654D+02 +-0.1863495692195D+02-0.1845995268332D+02-0.1828502127992D+02-0.1811016974578D+02 +-0.1793540325598D+02-0.1776072511080D+02-0.1758613676940D+02-0.1741163793327D+02 +-0.1723722667775D+02-0.1706289962834D+02-0.1688865217702D+02-0.1671447873257D+02 +-0.1654037299789D+02-0.1636632826691D+02-0.1619233773325D+02-0.1601839480315D+02 +-0.1584449340510D+02-0.1567062828984D+02-0.1549679531468D+02-0.1532299170720D+02 +-0.1514921630451D+02-0.1497546976480D+02-0.1480175474939D+02-0.1462807607400D+02 +-0.1445444082871D+02-0.1428085846710D+02-0.1410734086517D+02-0.1393390235146D+02 +-0.1376055970989D+02-0.1358733215727D+02-0.1341424129731D+02-0.1324131105355D+02 +-0.1306856758305D+02-0.1289603917318D+02-0.1272375612351D+02-0.1255175061484D+02 +-0.1238005656736D+02-0.1220870948967D+02-0.1203774632043D+02-0.1186720526422D+02 +-0.1169712562320D+02-0.1152754762583D+02-0.1135851225403D+02-0.1119006106993D+02 +-0.1102223604329D+02-0.1085507938069D+02-0.1068863335731D+02-0.1052294015218D+02 +-0.1035804168776D+02-0.1019397947446D+02-0.1003079446077D+02-0.9868526889628D+01 +-0.9707216161554D+01-0.9546900704939D+01-0.9387617854023D+01-0.9229403734858D+01 +-0.9072293159592D+01-0.8916319529363D+01-0.8761514745993D+01-0.8607909132693D+01 +-0.8455531363896D+01-0.8304408404305D+01-0.8154565457227D+01-0.8006025922166D+01 +-0.7858811361682D+01-0.7712941477416D+01-0.7568434095199D+01-0.7425305159081D+01 +-0.7283568734134D+01-0.7143237017788D+01-0.7004320359504D+01-0.6866827288485D+01 +-0.6730764549154D+01-0.6596137144079D+01-0.6462948384000D+01-0.6331199944618D+01 +-0.6200891929738D+01-0.6072022940407D+01-0.5944590149603D+01-0.5818589382077D+01 +-0.5694015198898D+01-0.5570860986265D+01-0.5449119048124D+01-0.5328780702141D+01 +-0.5209836378552D+01-0.5092275721431D+01-0.4976087691897D+01-0.4861260672787D+01 +-0.4747782574321D+01-0.4635640940271D+01-0.4524823054180D+01-0.4415316045125D+01 +-0.4307106992579D+01-0.4200183029885D+01-0.4094531445869D+01-0.3990139784139D+01 +-0.3886995939600D+01-0.3785088251726D+01-0.3684405594148D+01-0.3584937460106D+01 +-0.3486674043348D+01-0.3389606314047D+01-0.3293726089348D+01-0.3199026098161D+01 +-0.3105500039868D+01-0.3013142636618D+01-0.2921949678952D+01-0.2831918064533D+01 +-0.2743045829849D+01-0.2655332174788D+01-0.2568777480092D+01-0.2483383317815D+01 +-0.2399152454962D+01-0.2316088850658D+01-0.2234197647300D+01-0.2153485156272D+01 +-0.2073958838965D+01-0.1995627283965D+01-0.1918500181413D+01-0.1842588295670D+01 +-0.1767903437522D+01-0.1694458437274D+01-0.1622267120110D+01-0.1551344285168D+01 +-0.1481705689753D+01-0.1413368040087D+01-0.1346348989896D+01-0.1280667148051D+01 +-0.1216342096293D+01-0.1153394417906D+01-0.1091845737986D+01-0.1031718775725D+01 +-0.9730374088849D+00-0.9158267504133D+00-0.8601132368937D+00-0.8059247283301D+00 +-0.7532906185600D+00-0.7022419554295D+00-0.6528115697324D+00-0.6050342118170D+00 +-0.5589466947046D+00-0.5145880425354D+00-0.4719996431596D+00-0.4312254037239D+00 +-0.3923119081554D+00-0.3553085755132D+00-0.3202678182603D+00-0.2872451996103D+00 +-0.2562993012896D+00 + 0.0000000000000D+00 + 1012 0.5229258479779D+01 + 0.2150742905406D-04 0.2201934401975D-04 0.2254344131081D-04 0.2308001074793D-04 + 0.2362934904336D-04 0.2419175996469D-04 0.2476755450247D-04 0.2535705104185D-04 + 0.2596057553829D-04 0.2657846169737D-04 0.2721105115901D-04 0.2785869368592D-04 + 0.2852174735659D-04 0.2920057876285D-04 0.2989556321214D-04 0.3060708493450D-04 + 0.3133553729459D-04 0.3208132300862D-04 0.3284485436652D-04 0.3362655345933D-04 + 0.3442685241199D-04 0.3524619362168D-04 0.3608503000175D-04 0.3694382523153D-04 + 0.3782305401197D-04 0.3872320232740D-04 0.3964476771351D-04 0.4058825953159D-04 + 0.4155419924941D-04 0.4254312072866D-04 0.4355557051923D-04 0.4459210816046D-04 + 0.4565330648961D-04 0.4673975195749D-04 0.4785204495171D-04 0.4899080012754D-04 + 0.5015664674660D-04 0.5135022902361D-04 0.5257220648130D-04 0.5382325431382D-04 + 0.5510406375867D-04 0.5641534247751D-04 0.5775781494596D-04 0.5913222285265D-04 + 0.6053932550771D-04 0.6197990026094D-04 0.6345474292991D-04 0.6496466823815D-04 + 0.6651051026378D-04 0.6809312289875D-04 0.6971338031887D-04 0.7137217746513D-04 + 0.7307043053626D-04 0.7480907749308D-04 0.7658907857468D-04 0.7841141682692D-04 + 0.8027709864336D-04 0.8218715431905D-04 0.8414263861740D-04 0.8614463135050D-04 + 0.8819423797310D-04 0.9029259019072D-04 0.9244084658213D-04 0.9464019323656D-04 + 0.9689184440594D-04 0.9919704317265D-04 0.1015570621330D-03 0.1039732040969D-03 + 0.1064468028041D-03 0.1089792236573D-03 0.1115718644728D-03 0.1142261562483D-03 + 0.1169435639500D-03 0.1197255873171D-03 0.1225737616857D-03 0.1254896588328D-03 + 0.1284748878395D-03 0.1315310959746D-03 0.1346599695998D-03 0.1378632350954D-03 + 0.1411426598085D-03 0.1445000530233D-03 0.1479372669546D-03 0.1514561977641D-03 + 0.1550587866019D-03 0.1587470206711D-03 0.1625229343189D-03 0.1663886101524D-03 + 0.1703461801815D-03 0.1743978269887D-03 0.1785457849256D-03 0.1827923413391D-03 + 0.1871398378251D-03 0.1915906715131D-03 0.1961472963799D-03 0.2008122245952D-03 + 0.2055880278984D-03 0.2104773390081D-03 0.2154828530649D-03 0.2206073291079D-03 + 0.2258535915864D-03 0.2312245319072D-03 0.2367231100177D-03 0.2423523560273D-03 + 0.2481153718665D-03 0.2540153329849D-03 0.2600554900897D-03 0.2662391709247D-03 + 0.2725697820915D-03 0.2790508109132D-03 0.2856858273428D-03 0.2924784859153D-03 + 0.2994325277470D-03 0.3065517825810D-03 0.3138401708812D-03 0.3213017059753D-03 + 0.3289404962488D-03 0.3367607473897D-03 0.3447667646870D-03 0.3529629553823D-03 + 0.3613538310777D-03 0.3699440101989D-03 0.3787382205180D-03 0.3877413017338D-03 + 0.3969582081140D-03 0.4063940111991D-03 0.4160539025692D-03 0.4259431966769D-03 + 0.4360673337456D-03 0.4464318827368D-03 0.4570425443864D-03 0.4679051543124D-03 + 0.4790256861959D-03 0.4904102550358D-03 0.5020651204812D-03 0.5139966902408D-03 + 0.5262115235724D-03 0.5387163348549D-03 0.5515179972435D-03 0.5646235464104D-03 + 0.5780401843732D-03 0.5917752834137D-03 0.6058363900874D-03 0.6202312293275D-03 + 0.6349677086450D-03 0.6500539224267D-03 0.6654981563344D-03 0.6813088918062D-03 + 0.6974948106637D-03 0.7140647998269D-03 0.7310279561389D-03 0.7483935913040D-03 + 0.7661712369406D-03 0.7843706497523D-03 0.8030018168203D-03 0.8220749610184D-03 + 0.8416005465556D-03 0.8615892846469D-03 0.8820521393172D-03 0.9030003333406D-03 + 0.9244453543176D-03 0.9463989608946D-03 0.9688731891282D-03 0.9918803589975D-03 + 0.1015433081069D-02 0.1039544263315D-02 0.1064227118095D-02 0.1089495169290D-02 + 0.1115362259619D-02 0.1141842558105D-02 0.1168950567737D-02 0.1196701133289D-02 + 0.1225109449338D-02 0.1254191068456D-02 0.1283961909601D-02 0.1314438266696D-02 + 0.1345636817413D-02 0.1377574632157D-02 0.1410269183260D-02 0.1443738354387D-02 + 0.1478000450161D-02 0.1513074206015D-02 0.1548978798262D-02 0.1585733854409D-02 + 0.1623359463706D-02 0.1661876187936D-02 0.1701305072458D-02 0.1741667657505D-02 + 0.1782985989747D-02 0.1825282634108D-02 0.1868580685877D-02 0.1912903783076D-02 + 0.1958276119133D-02 0.2004722455835D-02 0.2052268136585D-02 0.2100939099962D-02 + 0.2150761893598D-02 0.2201763688371D-02 0.2253972292925D-02 0.2307416168524D-02 + 0.2362124444253D-02 0.2418126932561D-02 0.2475454145167D-02 0.2534137309329D-02 + 0.2594208384486D-02 0.2655700079287D-02 0.2718645869002D-02 0.2783080013344D-02 + 0.2849037574687D-02 0.2916554436715D-02 0.2985667323484D-02 0.3056413818931D-02 + 0.3128832386828D-02 0.3202962391187D-02 0.3278844117136D-02 0.3356518792272D-02 + 0.3436028608501D-02 0.3517416744371D-02 0.3600727387929D-02 0.3686005760082D-02 + 0.3773298138499D-02 0.3862651882061D-02 0.3954115455860D-02 0.4047738456768D-02 + 0.4143571639594D-02 0.4241666943825D-02 0.4342077520985D-02 0.4444857762604D-02 + 0.4550063328833D-02 0.4657751177697D-02 0.4767979595018D-02 0.4880808225009D-02 + 0.4996298101570D-02 0.5114511680279D-02 0.5235512871115D-02 0.5359367071918D-02 + 0.5486141202598D-02 0.5615903740128D-02 0.5748724754308D-02 0.5884675944352D-02 + 0.6023830676284D-02 0.6166264021183D-02 0.6312052794284D-02 0.6461275594959D-02 + 0.6614012847588D-02 0.6770346843357D-02 0.6930361782982D-02 0.7094143820394D-02 + 0.7261781107400D-02 0.7433363839342D-02 0.7608984301773D-02 0.7788736918176D-02 + 0.7972718298747D-02 0.8161027290261D-02 0.8353765027049D-02 0.8551034983111D-02 + 0.8752943025377D-02 0.8959597468160D-02 0.9171109128811D-02 0.9387591384603D-02 + 0.9609160230877D-02 0.9835934340477D-02 0.1006803512449D-01 0.1030558679431D-01 + 0.1054871642512D-01 0.1079755402073D-01 0.1105223257982D-01 0.1131288816368D-01 + 0.1157965996544D-01 0.1185269038080D-01 0.1213212508026D-01 0.1241811308303D-01 + 0.1271080683248D-01 0.1301036227325D-01 0.1331693893004D-01 0.1363069998813D-01 + 0.1395181237567D-01 0.1428044684765D-01 0.1461677807184D-01 0.1496098471648D-01 + 0.1531324953990D-01 0.1567375948211D-01 0.1604270575828D-01 0.1642028395434D-01 + 0.1680669412453D-01 0.1720214089116D-01 0.1760683354637D-01 0.1802098615621D-01 + 0.1844481766683D-01 0.1887855201303D-01 0.1932241822902D-01 0.1977665056168D-01 + 0.2024148858606D-01 0.2071717732349D-01 0.2120396736203D-01 0.2170211497964D-01 + 0.2221188226980D-01 0.2273353726988D-01 0.2326735409215D-01 0.2381361305754D-01 + 0.2437260083229D-01 0.2494461056731D-01 0.2552994204062D-01 0.2612890180262D-01 + 0.2674180332442D-01 0.2736896714935D-01 0.2801072104743D-01 0.2866740017320D-01 + 0.2933934722669D-01 0.3002691261781D-01 0.3073045463399D-01 0.3145033961141D-01 + 0.3218694210958D-01 0.3294064508962D-01 0.3371184009606D-01 0.3450092744243D-01 + 0.3530831640054D-01 0.3613442539362D-01 0.3697968219334D-01 0.3784452412086D-01 + 0.3872939825181D-01 0.3963476162544D-01 0.4056108145796D-01 0.4150883536008D-01 + 0.4247851155891D-01 0.4347060912422D-01 0.4448563819924D-01 0.4552412023590D-01 + 0.4658658823475D-01 0.4767358698962D-01 0.4878567333696D-01 0.4992341641008D-01 + 0.5108739789835D-01 0.5227821231135D-01 0.5349646724813D-01 0.5474278367169D-01 + 0.5601779618862D-01 0.5732215333417D-01 0.5865651786266D-01 0.6002156704340D-01 + 0.6141799296226D-01 0.6284650282880D-01 0.6430781928923D-01 0.6580268074515D-01 + 0.6733184167825D-01 0.6889607298100D-01 0.7049616229337D-01 0.7213291434581D-01 + 0.7380715130845D-01 0.7551971314661D-01 0.7727145798277D-01 0.7906326246509D-01 + 0.8089602214242D-01 0.8277065184608D-01 0.8468808607842D-01 0.8664927940812D-01 + 0.8865520687255D-01 0.9070686438707D-01 0.9280526916144D-01 0.9495146012343D-01 + 0.9714649834967D-01 0.9939146750384D-01 0.1016874742823D+00 0.1040356488672D+00 + 0.1064371453872D+00 0.1088931423856D+00 0.1114048432967D+00 0.1139734769295D+00 + 0.1166002979593D+00 0.1192865874273D+00 0.1220336532487D+00 0.1248428307276D+00 + 0.1277154830815D+00 0.1306530019730D+00 0.1336568080498D+00 0.1367283514936D+00 + 0.1398691125766D+00 0.1430806022269D+00 0.1463643626021D+00 0.1497219676713D+00 + 0.1531550238057D+00 0.1566651703780D+00 0.1602540803695D+00 0.1639234609870D+00 + 0.1676750542871D+00 0.1715106378098D+00 0.1754320252209D+00 0.1794410669619D+00 + 0.1835396509100D+00 0.1877297030455D+00 0.1920131881282D+00 0.1963921103827D+00 + 0.2008685141914D+00 0.2054444847966D+00 0.2101221490109D+00 0.2149036759359D+00 + 0.2197912776889D+00 0.2247872101386D+00 0.2298937736476D+00 0.2351133138248D+00 + 0.2404482222837D+00 0.2459009374100D+00 0.2514739451362D+00 0.2571697797240D+00 + 0.2629910245536D+00 0.2689403129212D+00 0.2750203288421D+00 0.2812338078623D+00 + 0.2875835378751D+00 0.2940723599454D+00 0.3007031691395D+00 0.3074789153608D+00 + 0.3144026041916D+00 0.3214772977396D+00 0.3287061154899D+00 0.3360922351618D+00 + 0.3436388935694D+00 0.3513493874868D+00 0.3592270745164D+00 0.3672753739607D+00 + 0.3754977676972D+00 0.3838978010545D+00 0.3924790836915D+00 0.4012452904770D+00 + 0.4102001623706D+00 0.4193475073036D+00 0.4286912010595D+00 0.4382351881538D+00 + 0.4479834827120D+00 0.4579401693452D+00 0.4681094040228D+00 0.4784954149418D+00 + 0.4891025033910D+00 0.4999350446102D+00 0.5109974886435D+00 0.5222943611853D+00 + 0.5338302644183D+00 0.5456098778426D+00 0.5576379590956D+00 0.5699193447601D+00 + 0.5824589511607D+00 0.5952617751475D+00 0.6083328948654D+00 0.6216774705074D+00 + 0.6353007450521D+00 0.6492080449824D+00 0.6634047809857D+00 0.6778964486325D+00 + 0.6926886290333D+00 0.7077869894721D+00 0.7231972840138D+00 0.7389253540860D+00 + 0.7549771290311D+00 0.7713586266289D+00 0.7880759535873D+00 0.8051353059985D+00 + 0.8225429697604D+00 0.8403053209599D+00 0.8584288262158D+00 0.8769200429817D+00 + 0.8957856198031D+00 0.9150322965294D+00 0.9346669044774D+00 0.9546963665439D+00 + 0.9751276972649D+00 0.9959680028197D+00 0.1017224480976D+01 0.1038904420974D+01 + 0.1061015203349D+01 0.1083564299686D+01 0.1106559272300D+01 0.1130007773859D+01 + 0.1153917546912D+01 0.1178296423354D+01 0.1203152323804D+01 0.1228493256899D+01 + 0.1254327318495D+01 0.1280662690787D+01 0.1307507641324D+01 0.1334870521934D+01 + 0.1362759767535D+01 0.1391183894856D+01 0.1420151501035D+01 0.1449671262109D+01 + 0.1479751931386D+01 0.1510402337698D+01 0.1541631383520D+01 0.1573448042969D+01 + 0.1605861359662D+01 0.1638880444440D+01 0.1672514472946D+01 0.1706772683055D+01 + 0.1741664372155D+01 0.1777198894269D+01 0.1813385657016D+01 0.1850234118409D+01 + 0.1887753783475D+01 0.1925954200705D+01 0.1964844958324D+01 0.2004435680370D+01 + 0.2044736022586D+01 0.2085755668115D+01 0.2127504322996D+01 0.2169991711448D+01 + 0.2213227570952D+01 0.2257221647108D+01 0.2301983688271D+01 0.2347523439972D+01 + 0.2393850639086D+01 0.2440975007782D+01 0.2488906247220D+01 0.2537654031002D+01 + 0.2587227998372D+01 0.2637637747157D+01 0.2688892826442D+01 0.2741002728983D+01 + 0.2793976883341D+01 0.2847824645743D+01 0.2902555291652D+01 0.2958178007063D+01 + 0.3014701879494D+01 0.3072135888684D+01 0.3130488897001D+01 0.3189769639525D+01 + 0.3249986713841D+01 0.3311148569513D+01 0.3373263497233D+01 0.3436339617667D+01 + 0.3500384869964D+01 0.3565406999951D+01 0.3631413547991D+01 0.3698411836514D+01 + 0.3766408957221D+01 0.3835411757947D+01 0.3905426829193D+01 0.3976460490322D+01 + 0.4048518775419D+01 0.4121607418815D+01 0.4195731840277D+01 0.4270897129857D+01 + 0.4347108032420D+01 0.4424368931831D+01 0.4502683834816D+01 0.4582056354503D+01 + 0.4662489693636D+01 0.4743986627475D+01 0.4826549486387D+01 0.4910180138127D+01 + 0.4994879969825D+01 0.5080649869681D+01 0.5167490208373D+01 0.5255400820202D+01 + 0.5344380983962D+01 0.5434429403565D+01 0.5525544188426D+01 0.5617722833617D+01 + 0.5710962199815D+01 0.5805258493041D+01 0.5900607244231D+01 0.5997003288635D+01 + 0.6094440745069D+01 0.6192912995049D+01 0.6292412661814D+01 0.6392931589269D+01 + 0.6494460820874D+01 0.6596990578488D+01 0.6700510241224D+01 0.6805008324307D+01 + 0.6910472457995D+01 0.7016889366579D+01 0.7124244847491D+01 0.7232523750568D+01 + 0.7341709957494D+01 0.7451786361463D+01 0.7562734847107D+01 0.7674536270712D+01 + 0.7787170440791D+01 0.7900616099026D+01 0.8014850901658D+01 0.8129851401340D+01 + 0.8245593029526D+01 0.8362050079436D+01 0.8479195689649D+01 0.8597001828383D+01 + 0.8715439278509D+01 0.8834477623371D+01 0.8954085233454D+01 0.9074229253973D+01 + 0.9194875593440D+01 0.9315988913276D+01 0.9437532618530D+01 0.9559468849772D+01 + 0.9681758476237D+01 0.9804361090277D+01 0.9927235003199D+01 0.1005033724256D+02 + 0.1017362355101D+02 0.1029704838669D+02 0.1042056492540D+02 0.1054412506444D+02 + 0.1066767942831D+02 0.1079117737637D+02 0.1091456701244D+02 0.1103779519646D+02 + 0.1116080755839D+02 0.1128354851420D+02 0.1140596128432D+02 0.1152798791434D+02 + 0.1164956929827D+02 0.1177064520433D+02 0.1189115430327D+02 0.1201103419951D+02 + 0.1213022146500D+02 0.1224865167586D+02 0.1236625945201D+02 0.1248297849976D+02 + 0.1259874165744D+02 0.1271348094411D+02 0.1282712761148D+02 0.1293961219902D+02 + 0.1305086459240D+02 0.1316081408518D+02 0.1326938944391D+02 0.1337651897664D+02 + 0.1348213060491D+02 0.1358615193909D+02 0.1368851035736D+02 0.1378913308811D+02 + 0.1388794729589D+02 0.1398488017086D+02 0.1407985902179D+02 0.1417281137257D+02 + 0.1426366506212D+02 0.1435234834789D+02 0.1443879001264D+02 0.1452291947466D+02 + 0.1460466690129D+02 0.1468396332564D+02 0.1476074076649D+02 0.1483493235126D+02 + 0.1490647244192D+02 0.1497529676373D+02 0.1504134253675D+02 0.1510454860984D+02 + 0.1516485559720D+02 0.1522220601698D+02 0.1527654443219D+02 0.1532781759325D+02 + 0.1537597458241D+02 0.1542096695946D+02 0.1546274890874D+02 0.1550127738702D+02 + 0.1553651227211D+02 0.1556841651189D+02 0.1559695627334D+02 0.1562210109145D+02 + 0.1564382401753D+02 0.1566210176664D+02 0.1567691486377D+02 0.1568824778841D+02 + 0.1569608911712D+02 0.1570043166360D+02 0.1570127261607D+02 0.1569861367129D+02 + 0.1569246116496D+02 0.1568282619787D+02 0.1566972475757D+02 0.1565317783486D+02 + 0.1563321153475D+02 0.1560985718135D+02 0.1558315141624D+02 0.1555313628970D+02 + 0.1551985934445D+02 0.1548337369123D+02 0.1544373807583D+02 0.1540101693692D+02 + 0.1535528045436D+02 0.1530660458716D+02 0.1525507110098D+02 0.1520076758423D+02 + 0.1514378745267D+02 0.1508422994170D+02 0.1502220008605D+02 0.1495780868635D+02 + 0.1489117226206D+02 0.1482241299046D+02 0.1475165863115D+02 0.1467904243575D+02 + 0.1460470304238D+02 0.1452878435463D+02 0.1445143540465D+02 0.1437281020013D+02 + 0.1429306755483D+02 0.1421237090260D+02 0.1413088809452D+02 0.1404879117925D+02 + 0.1396625616625D+02 0.1388346277207D+02 0.1380059414952D+02 0.1371783659988D+02 + 0.1363537926825D+02 0.1355341382212D+02 0.1347213411351D+02 0.1339173582480D+02 + 0.1331241609871D+02 0.1323437315279D+02 0.1315780587881D+02 0.1308291342766D+02 + 0.1300989478035D+02 0.1293894830568D+02 0.1287027130535D+02 0.1280405954732D+02 + 0.1274050678825D+02 0.1267980428593D+02 0.1262214030269D+02 0.1256769960087D+02 + 0.1251666293145D+02 0.1246920651702D+02 0.1242550153038D+02 0.1238571356999D+02 + 0.1235000213372D+02 0.1231852009235D+02 0.1229141316414D+02 0.1226881939222D+02 + 0.1225086862623D+02 0.1223768200985D+02 0.1222937147599D+02 0.1222603925117D+02 + 0.1222777737106D+02 0.1223466720868D+02 0.1224677901729D+02 0.1226417148958D+02 + 0.1228689133517D+02 0.1231497287802D+02 0.1234843767581D+02 0.1238729416297D+02 + 0.1243153731911D+02 0.1248114836487D+02 0.1253609448665D+02 0.1259632859227D+02 + 0.1266178909890D+02 0.1273239975523D+02 0.1280806949923D+02 0.1288869235315D+02 + 0.1297414735711D+02 0.1306429854274D+02 0.1315899494816D+02 0.1325807067533D+02 + 0.1336134499111D+02 0.1346862247282D+02 0.1357969319917D+02 0.1369433298744D+02 + 0.1381230367740D+02 0.1393335346243D+02 0.1405721726828D+02 0.1418361717951D+02 + 0.1431226291376D+02 0.1444285234362D+02 0.1457507206581D+02 0.1470859801733D+02 + 0.1484309613763D+02 0.1497822307639D+02 0.1511362694548D+02 0.1524894811426D+02 + 0.1538382004666D+02 0.1551787017849D+02 0.1565072083339D+02 0.1578199017530D+02 + 0.1591129319546D+02 0.1603824273170D+02 0.1616245051740D+02 0.1628352825765D+02 + 0.1640108872963D+02 0.1651474690448D+02 0.1662412108723D+02 0.1672883407174D+02 + 0.1682851430716D+02 0.1692279707220D+02 0.1701132565381D+02 0.1709375252614D+02 + 0.1716974052608D+02 0.1723896402125D+02 0.1730111006644D+02 0.1735587954416D+02 + 0.1740298828530D+02 0.1744216816538D+02 0.1747316817225D+02 0.1749575544089D+02 + 0.1750971625093D+02 0.1751485698260D+02 0.1751100502688D+02 0.1749800964559D+02 + 0.1747574277733D+02 0.1744409978499D+02 0.1740300014123D+02 0.1735238804766D+02 + 0.1729223298439D+02 0.1722253018618D+02 0.1714330104180D+02 0.1705459341368D+02 + 0.1695648187457D+02 0.1684906785873D+02 0.1673247972505D+02 0.1660687272995D+02 + 0.1647242890818D+02 0.1632935685981D+02 0.1617789144222D+02 0.1601829336618D+02 + 0.1585084869528D+02 0.1567586824865D+02 0.1549368690699D+02 0.1530466282265D+02 + 0.1510917653451D+02 0.1490762998916D+02 0.1470044547022D+02 0.1448806443791D+02 + 0.1427094628160D+02 0.1404956698852D+02 0.1382441773199D+02 0.1359600338336D+02 + 0.1336484095192D+02 0.1313145795774D+02 0.1289639074258D+02 0.1266018272468D+02 + 0.1242338260337D+02 0.1218654252002D+02 0.1195021618209D+02 0.1171495695744D+02 + 0.1148131594627D+02 0.1124984003849D+02 0.1102106996440D+02 0.1079553834688D+02 + 0.1057376776347D+02 0.1035626882667D+02 0.1014353829125D+02 0.9936057196884D+01 + 0.9734289054994D+01 0.9538678088120D+01 0.9349647530399D+01 0.9167597997384D+01 + 0.8992905933301D+01 0.8825922143594D+01 0.8666970420224D+01 0.8516346266999D+01 + 0.8374315731611D+01 0.8241114350747D+01 0.8116946214096D+01 0.8001983152570D+01 + 0.7896364055459D+01 0.7800194320670D+01 0.7713545441561D+01 0.7636454733225D+01 + 0.7568925200401D+01 0.7510925548528D+01 0.7462390338698D+01 0.7423220286625D+01 + 0.7393282704950D+01 0.7372412087556D+01 0.7360410833787D+01 0.7357050109802D+01 + 0.7362070843542D+01 0.7375184849138D+01 0.7396076075866D+01 0.7424401976120D+01 + 0.7459794986211D+01 0.7501864113185D+01 0.7550196620265D+01 0.7604359802945D+01 + 0.7663902847256D+01 0.7728358761219D+01 0.7797246370063D+01 0.7870072365405D+01 + 0.7946333398216D+01 0.8025518205140D+01 0.8107109757504D+01 0.8190587422172D+01 + 0.8275429123337D+01 0.8361113494303D+01 0.8447122008353D+01 0.8532941077928D+01 + 0.8618064111536D+01 0.8701993518075D+01 0.8784242648578D+01 0.8864337665829D+01 + 0.8941819332731D+01 0.9016244710878D+01 0.9087188761372D+01 0.9154245840560D+01 + 0.9217031084099D+01 0.9275181673474D+01 0.9328357979881D+01 0.9376244581215D+01 + 0.9418551148709D+01 0.9455013200639D+01 0.9485392721360D+01 0.9509478644797D+01 + 0.9527087202359D+01 0.9538062136102D+01 0.9542274778747D+01 0.9539624002998D+01 + 0.9530036043300D+01 0.9513464193959D+01 0.9489888388159D+01 0.9459314663078D+01 + 0.9421774516843D+01 0.9377324163609D+01 0.9326043693467D+01 0.9268036144314D+01 + 0.9203426493115D+01 0.9132360574297D+01 0.9055003933175D+01 0.8971540622481D+01 + 0.8882171950151D+01 0.8787115186520D+01 0.8686602239071D+01 0.8580878302773D+01 + 0.8470200493895D+01 0.8354836475027D+01 0.8235063078754D+01 0.8111164937189D+01 + 0.7983433124252D+01 0.7852163817216D+01 0.7717656983696D+01 0.7580215099831D+01 + 0.7440141905014D+01 0.7297741198086D+01 0.7153315679440D+01 0.7007165843079D+01 + 0.6859588922166D+01 0.6710877891167D+01 0.6561320527250D+01 0.6411198533128D+01 + 0.6260786723101D+01 0.6110352273646D+01 0.5960154039458D+01 0.5810441935471D+01 + 0.5661456384987D+01 0.5513427833700D+01 0.5366576329042D+01 0.5221111163955D+01 + 0.5077230583918D+01 0.4935121555751D+01 0.4794959596475D+01 0.4656908660288D+01 + 0.4521121081498D+01 0.4387737571052D+01 0.4256887264186D+01 0.4128687816522D+01 + 0.4003245545873D+01 0.3880655616880D+01 0.3761002265561D+01 0.3644359060777D+01 + 0.3530789199588D+01 0.3420345833472D+01 0.3313072422343D+01 0.3209003113371D+01 + 0.3108163141592D+01 0.3010569249384D+01 0.2916230121919D+01 0.2825146835796D+01 + 0.2737313318133D+01 0.2652716813508D+01 0.2571338356232D+01 0.2493153245580D+01 + 0.2418131521695D+01 0.2346238440047D+01 0.2277434942461D+01 0.2211678122838D+01 + 0.2148921685899D+01 0.2089116397376D+01 0.2032210524266D+01 0.1978150263893D+01 + 0.1926880160684D+01 0.1878343509721D+01 0.1832482746269D+01 0.1789239820638D+01 + 0.1748556557871D+01 0.1710375001879D+01 0.1674637743804D+01 0.1641288234472D+01 + 0.1610271080956D+01 0.1581532327338D+01 0.1555019719890D+01 0.1530682956958D+01 + 0.1508473923914D+01 0.1488346913611D+01 0.1470258832820D+01 0.1454169395155D+01 + 0.1440041301042D+01 0.1427840405245D+01 0.1417535872504D+01 0.1409100321753D+01 + 0.1402509959377D+01 0.1397744701874D+01 0.1394788288181D+01 0.1393628381826D+01 + 0.1394256662892D+01 0.1396668909610D+01 0.1400865069190D+01 0.1406849317222D+01 + 0.1414629369614D+01 0.1424336942263D+01 0.1436096575202D+01 0.1449912447024D+01 + 0.1465794674727D+01 0.1483759333931D+01 0.1503828494539D+01 0.1526030271798D+01 + 0.1550398892649D+01 0.1576974777196D+01 0.1605804635055D+01 0.1636941576215D+01 + 7 1012 + 1 0 -1 -511.89194 + 2 0 -1 -58.90181 + 2 1 1 -50.68932 + 2 1 -2 -49.77537 + 3 0 -1 -5.73317 + 3 1 1 -3.34334 + 3 1 -2 -3.22919 + 0.2122975645015D-04 0.2173507709867D-04 0.2225242316243D-04 0.2278208072829D-04 + 0.2332434268594D-04 0.2387950888954D-04 0.2444788632325D-04 0.2502978927059D-04 + 0.2562553948791D-04 0.2623546638192D-04 0.2685990719144D-04 0.2749920717353D-04 + 0.2815371979393D-04 0.2882380692207D-04 0.2950983903075D-04 0.3021219540050D-04 + 0.3093126432877D-04 0.3166744334418D-04 0.3242113942573D-04 0.3319276922733D-04 + 0.3398275930755D-04 0.3479154636487D-04 0.3561957747857D-04 0.3646731035519D-04 + 0.3733521358096D-04 0.3822376688016D-04 0.3913346137963D-04 0.4006479987955D-04 + 0.4101829713060D-04 0.4199448011777D-04 0.4299388835081D-04 0.4401707416166D-04 + 0.4506460300883D-04 0.4613705378910D-04 0.4723501915650D-04 0.4835910584899D-04 + 0.4950993502270D-04 0.5068814259429D-04 0.5189437959126D-04 0.5312931251066D-04 + 0.5439362368626D-04 0.5568801166444D-04 0.5701319158897D-04 0.5836989559491D-04 + 0.5975887321186D-04 0.6118089177673D-04 0.6263673685632D-04 0.6412721267990D-04 + 0.6565314258201D-04 0.6721536945580D-04 0.6881475621705D-04 0.7045218627922D-04 + 0.7212856403973D-04 0.7384481537777D-04 0.7560188816385D-04 0.7740075278149D-04 + 0.7924240266119D-04 0.8112785482706D-04 0.8305815045642D-04 0.8503435545263D-04 + 0.8705756103141D-04 0.8912888432116D-04 0.9124946897738D-04 0.9342048581165D-04 + 0.9564313343555D-04 0.9791863891974D-04 0.1002482584687D-03 0.1026332781112D-03 + 0.1050750144077D-03 0.1075748151735D-03 0.1101340602203D-03 0.1127541621137D-03 + 0.1154365669501D-03 0.1181827551510D-03 0.1209942422769D-03 0.1238725798590D-03 + 0.1268193562527D-03 0.1298361975089D-03 0.1329247682680D-03 0.1360867726735D-03 + 0.1393239553083D-03 0.1426381021518D-03 0.1460310415612D-03 0.1495046452749D-03 + 0.1530608294397D-03 0.1567015556625D-03 0.1604288320871D-03 0.1642447144955D-03 + 0.1681513074364D-03 0.1721507653792D-03 0.1762452938963D-03 0.1804371508722D-03 + 0.1847286477421D-03 0.1891221507592D-03 0.1936200822920D-03 0.1982249221522D-03 + 0.2029392089542D-03 0.2077655415060D-03 0.2127065802334D-03 0.2177650486382D-03 + 0.2229437347894D-03 0.2282454928513D-03 0.2336732446459D-03 0.2392299812538D-03 + 0.2449187646513D-03 0.2507427293871D-03 0.2567050842979D-03 0.2628091142650D-03 + 0.2690581820118D-03 0.2754557299435D-03 0.2820052820308D-03 0.2887104457371D-03 + 0.2955749139921D-03 0.3026024672103D-03 0.3097969753590D-03 0.3171624000731D-03 + 0.3247027968207D-03 0.3324223171196D-03 0.3403252108055D-03 0.3484158283536D-03 + 0.3566986232552D-03 0.3651781544500D-03 0.3738590888149D-03 0.3827462037126D-03 + 0.3918443895988D-03 0.4011586526914D-03 0.4106941177020D-03 0.4204560306321D-03 + 0.4304497616342D-03 0.4406808079408D-03 0.4511547968612D-03 0.4618774888502D-03 + 0.4728547806468D-03 0.4840927084883D-03 0.4955974513988D-03 0.5073753345551D-03 + 0.5194328327314D-03 0.5317765738249D-03 0.5444133424641D-03 0.5573500837015D-03 + 0.5705939067925D-03 0.5841520890639D-03 0.5980320798714D-03 0.6122415046513D-03 + 0.6267881690659D-03 0.6416800632466D-03 0.6569253661363D-03 0.6725324499326D-03 + 0.6885098846360D-03 0.7048664427037D-03 0.7216111038125D-03 0.7387530597330D-03 + 0.7563017193176D-03 0.7742667136049D-03 0.7926579010441D-03 0.8114853728404D-03 + 0.8307594584254D-03 0.8504907310562D-03 0.8706900135433D-03 0.8913683841142D-03 + 0.9125371824119D-03 0.9342080156346D-03 0.9563927648179D-03 0.9791035912634D-03 + 0.1002352943117D-02 0.1026153562102D-02 0.1050518490405D-02 0.1075461077728D-02 + 0.1100994988496D-02 0.1127134209246D-02 0.1153893056171D-02 0.1181286182852D-02 + 0.1209328588167D-02 0.1238035624379D-02 0.1267423005415D-02 0.1297506815344D-02 + 0.1328303517037D-02 0.1359829961041D-02 0.1392103394654D-02 0.1425141471212D-02 + 0.1458962259585D-02 0.1493584253904D-02 0.1529026383504D-02 0.1565308023106D-02 + 0.1602449003221D-02 0.1640469620811D-02 0.1679390650189D-02 0.1719233354165D-02 + 0.1760019495464D-02 0.1801771348394D-02 0.1844511710794D-02 0.1888263916250D-02 + 0.1933051846599D-02 0.1978899944720D-02 0.2025833227614D-02 0.2073877299798D-02 + 0.2123058366995D-02 0.2173403250151D-02 0.2224939399761D-02 0.2277694910540D-02 + 0.2331698536421D-02 0.2386979705903D-02 0.2443568537747D-02 0.2501495857040D-02 + 0.2560793211623D-02 0.2621492888896D-02 0.2683627933011D-02 0.2747232162458D-02 + 0.2812340188056D-02 0.2878987431352D-02 0.2947210143447D-02 0.3017045424251D-02 + 0.3088531242177D-02 0.3161706454285D-02 0.3236610826892D-02 0.3313285056646D-02 + 0.3391770792086D-02 0.3472110655691D-02 0.3554348266436D-02 0.3638528262858D-02 + 0.3724696326649D-02 0.3812899206788D-02 0.3903184744224D-02 0.3995601897109D-02 + 0.4090200766624D-02 0.4187032623373D-02 0.4286149934389D-02 0.4387606390746D-02 + 0.4491456935804D-02 0.4597757794082D-02 0.4706566500803D-02 0.4817941932088D-02 + 0.4931944335851D-02 0.5048635363379D-02 0.5168078101634D-02 0.5290337106279D-02 + 0.5415478435454D-02 0.5543569684307D-02 0.5674680020311D-02 0.5808880219367D-02 + 0.5946242702730D-02 0.6086841574754D-02 0.6230752661494D-02 0.6378053550168D-02 + 0.6528823629508D-02 0.6683144131013D-02 0.6841098171130D-02 0.7002770794372D-02 + 0.7168249017405D-02 0.7337621874121D-02 0.7510980461712D-02 0.7688417987773D-02 + 0.7870029818463D-02 0.8055913527720D-02 0.8246168947593D-02 0.8440898219673D-02 + 0.8640205847678D-02 0.8844198751201D-02 0.9052986320644D-02 0.9266680473381D-02 + 0.9485395711148D-02 0.9709249178711D-02 0.9938360723829D-02 0.1017285295853D-01 + 0.1041285132175D-01 0.1065848414335D-01 0.1090988270951D-01 0.1116718132961D-01 + 0.1143051740455D-01 0.1170003149653D-01 0.1197586740047D-01 0.1225817221684D-01 + 0.1254709642620D-01 0.1284279396532D-01 0.1314542230495D-01 0.1345514252930D-01 + 0.1377211941725D-01 0.1409652152530D-01 0.1442852127232D-01 0.1476829502620D-01 + 0.1511602319226D-01 0.1547189030365D-01 0.1583608511371D-01 0.1620880069022D-01 + 0.1659023451183D-01 0.1698058856639D-01 0.1738006945154D-01 0.1778888847734D-01 + 0.1820726177118D-01 0.1863541038486D-01 0.1907356040402D-01 0.1952194305980D-01 + 0.1998079484302D-01 0.2045035762063D-01 0.2093087875471D-01 0.2142261122400D-01 + 0.2192581374792D-01 0.2244075091329D-01 0.2296769330365D-01 0.2350691763133D-01 + 0.2405870687229D-01 0.2462335040374D-01 0.2520114414469D-01 0.2579239069942D-01 + 0.2639739950387D-01 0.2701648697516D-01 0.2764997666416D-01 0.2829819941123D-01 + 0.2896149350513D-01 0.2964020484531D-01 0.3033468710740D-01 0.3104530191220D-01 + 0.3177241899806D-01 0.3251641639684D-01 0.3327768061342D-01 0.3405660680881D-01 + 0.3485359898710D-01 0.3566907018606D-01 0.3650344267166D-01 0.3735714813647D-01 + 0.3823062790211D-01 0.3912433312562D-01 0.4003872501011D-01 0.4097427501948D-01 + 0.4193146509749D-01 0.4291078789111D-01 0.4391274697832D-01 0.4493785710035D-01 + 0.4598664439858D-01 0.4705964665594D-01 0.4815741354312D-01 0.4928050686955D-01 + 0.5042950083923D-01 0.5160498231153D-01 0.5280755106696D-01 0.5403782007813D-01 + 0.5529641578584D-01 0.5658397838041D-01 0.5790116208843D-01 0.5924863546488D-01 + 0.6062708169076D-01 0.6203719887636D-01 0.6347970037015D-01 0.6495531507346D-01 + 0.6646478776099D-01 0.6800887940725D-01 0.6958836751900D-01 0.7120404647380D-01 + 0.7285672786470D-01 0.7454724085125D-01 0.7627643251682D-01 0.7804516823229D-01 + 0.7985433202641D-01 0.8170482696258D-01 0.8359757552242D-01 0.8553351999606D-01 + 0.8751362287932D-01 0.8953886727772D-01 0.9161025731761D-01 0.9372881856432D-01 + 0.9589559844749D-01 0.9811166669365D-01 0.1003781157661D+00 0.1026960613124D+00 + 0.1050666426187D+00 0.1074910230727D+00 0.1099703906329D+00 0.1125059583070D+00 + 0.1150989646366D+00 0.1177506741909D+00 0.1204623780676D+00 0.1232353944021D+00 + 0.1260710688845D+00 0.1289707752849D+00 0.1319359159864D+00 0.1349679225270D+00 + 0.1380682561490D+00 0.1412384083570D+00 0.1444799014844D+00 0.1477942892678D+00 + 0.1511831574303D+00 0.1546481242725D+00 0.1581908412731D+00 0.1618129936965D+00 + 0.1655163012104D+00 0.1693025185104D+00 0.1731734359544D+00 0.1771308802047D+00 + 0.1811767148790D+00 0.1853128412094D+00 0.1895411987104D+00 0.1938637658552D+00 + 0.1982825607598D+00 0.2027996418767D+00 0.2074171086957D+00 0.2121371024533D+00 + 0.2169618068509D+00 0.2218934487801D+00 0.2269342990569D+00 0.2320866731634D+00 + 0.2373529319974D+00 0.2427354826295D+00 0.2482367790682D+00 0.2538593230323D+00 + 0.2596056647304D+00 0.2654784036474D+00 0.2714801893389D+00 0.2776137222308D+00 + 0.2838817544268D+00 0.2902870905217D+00 0.2968325884206D+00 0.3035211601645D+00 + 0.3103557727607D+00 0.3173394490192D+00 0.3244752683937D+00 0.3317663678273D+00 + 0.3392159426028D+00 0.3468272471962D+00 0.3546035961349D+00 0.3625483648577D+00 + 0.3706649905790D+00 0.3789569731540D+00 0.3874278759464D+00 0.3960813266976D+00 + 0.4049210183955D+00 0.4139507101454D+00 0.4231742280388D+00 0.4325954660221D+00 + 0.4422183867640D+00 0.4520470225197D+00 0.4620854759931D+00 0.4723379211946D+00 + 0.4828086042953D+00 0.4935018444749D+00 0.5044220347646D+00 0.5155736428822D+00 + 0.5269612120602D+00 0.5385893618646D+00 0.5504627890040D+00 0.5625862681281D+00 + 0.5749646526146D+00 0.5876028753427D+00 0.6005059494532D+00 0.6136789690924D+00 + 0.6271271101407D+00 0.6408556309226D+00 0.6548698728981D+00 0.6691752613333D+00 + 0.6837773059493D+00 0.6986816015479D+00 0.7138938286123D+00 0.7294197538810D+00 + 0.7452652308942D+00 0.7614362005101D+00 0.7779386913894D+00 0.7947788204470D+00 + 0.8119627932680D+00 0.8294969044866D+00 0.8473875381261D+00 0.8656411678975D+00 + 0.8842643574549D+00 0.9032637606047D+00 0.9226461214683D+00 0.9424182745935D+00 + 0.9625871450140D+00 0.9831597482541D+00 0.1004143190275D+01 0.1025544667362D+01 + 0.1047371465949D+01 0.1069630962376D+01 0.1092330622582D+01 0.1115478001718D+01 + 0.1139080743699D+01 0.1163146580667D+01 0.1187683332379D+01 0.1212698905512D+01 + 0.1238201292877D+01 0.1264198572546D+01 0.1290698906886D+01 0.1317710541494D+01 + 0.1345241804028D+01 0.1373301102944D+01 0.1401896926110D+01 0.1431037839321D+01 + 0.1460732484690D+01 0.1490989578921D+01 0.1521817911461D+01 0.1553226342519D+01 + 0.1585223800953D+01 0.1617819282025D+01 0.1651021845012D+01 0.1684840610666D+01 + 0.1719284758534D+01 0.1754363524114D+01 0.1790086195862D+01 0.1826462112019D+01 + 0.1863500657290D+01 0.1901211259327D+01 0.1939603385053D+01 0.1978686536792D+01 + 0.2018470248210D+01 0.2058964080068D+01 0.2100177615772D+01 0.2142120456722D+01 + 0.2184802217451D+01 0.2228232520549D+01 0.2272420991371D+01 0.2317377252521D+01 + 0.2363110918097D+01 0.2409631587718D+01 0.2456948840298D+01 0.2505072227579D+01 + 0.2554011267414D+01 0.2603775436800D+01 0.2654374164640D+01 0.2705816824249D+01 + 0.2758112725590D+01 0.2811271107225D+01 0.2865301128002D+01 0.2920211858443D+01 + 0.2976012271854D+01 0.3032711235135D+01 0.3090317499294D+01 0.3148839689666D+01 + 0.3208286295814D+01 0.3268665661132D+01 0.3329985972130D+01 0.3392255247403D+01 + 0.3455481326284D+01 0.3519671857166D+01 0.3584834285516D+01 0.3650975841540D+01 + 0.3718103527540D+01 0.3786224104928D+01 0.3855344080910D+01 0.3925469694842D+01 + 0.3996606904248D+01 0.4068761370505D+01 0.4141938444201D+01 0.4216143150155D+01 + 0.4291380172106D+01 0.4367653837082D+01 0.4444968099432D+01 0.4523326524540D+01 + 0.4602732272224D+01 0.4683188079814D+01 0.4764696244923D+01 0.4847258607911D+01 + 0.4930876534058D+01 0.5015550895439D+01 0.5101282052526D+01 0.5188069835504D+01 + 0.5275913525340D+01 0.5364811834582D+01 0.5454762887935D+01 0.5545764202593D+01 + 0.5637812668364D+01 0.5730904527600D+01 0.5825035354930D+01 0.5920200036841D+01 + 0.6016392751096D+01 0.6113606946037D+01 0.6211835319763D+01 0.6311069799237D+01 + 0.6411301519318D+01 0.6512520801757D+01 0.6614717134178D+01 0.6717879149076D+01 + 0.6821994602856D+01 0.6927050354936D+01 0.7033032346971D+01 0.7139925582197D+01 + 0.7247714104955D+01 0.7356380980422D+01 0.7465908274590D+01 0.7576277034522D+01 + 0.7687467268944D+01 0.7799457929201D+01 0.7912226890625D+01 0.8025750934367D+01 + 0.8140005729731D+01 0.8254965817070D+01 0.8370604591283D+01 0.8486894285977D+01 + 0.8603805958343D+01 0.8721309474805D+01 0.8839373497487D+01 0.8957965471583D+01 + 0.9077051613664D+01 0.9196596901005D+01 0.9316565061973D+01 0.9436918567578D+01 + 0.9557618624205D+01 0.9678625167647D+01 0.9799896858462D+01 0.9921391078761D+01 + 0.1004306393048D+02 0.1016487023519D+02 0.1028676353561D+02 0.1040869609872D+02 + 0.1053061892078D+02 0.1065248173410D+02 0.1077423301584D+02 0.1089581999877D+02 + 0.1101718868413D+02 0.1113828385666D+02 0.1125904910191D+02 0.1137942682584D+02 + 0.1149935827678D+02 0.1161878356999D+02 0.1173764171462D+02 0.1185587064341D+02 + 0.1197340724503D+02 0.1209018739920D+02 0.1220614601465D+02 0.1232121706995D+02 + 0.1243533365740D+02 0.1254842802982D+02 0.1266043165050D+02 0.1277127524634D+02 + 0.1288088886404D+02 0.1298920192971D+02 0.1309614331160D+02 0.1320164138629D+02 + 0.1330562410812D+02 0.1340801908212D+02 0.1350875364026D+02 0.1360775492116D+02 + 0.1370494995324D+02 0.1380026574132D+02 0.1389362935662D+02 0.1398496803019D+02 + 0.1407420924981D+02 0.1416128086012D+02 0.1424611116627D+02 0.1432862904069D+02 + 0.1440876403324D+02 0.1448644648440D+02 0.1456160764164D+02 0.1463417977876D+02 + 0.1470409631813D+02 0.1477129195572D+02 0.1483570278883D+02 0.1489726644633D+02 + 0.1495592222127D+02 0.1501161120574D+02 0.1506427642781D+02 0.1511386299027D+02 + 0.1516031821110D+02 0.1520359176531D+02 0.1524363582812D+02 0.1528040521898D+02 + 0.1531385754641D+02 0.1534395335325D+02 0.1537065626208D+02 0.1539393312048D+02 + 0.1541375414585D+02 0.1543009306950D+02 0.1544292727951D+02 0.1545223796216D+02 + 0.1545801024155D+02 0.1546023331695D+02 0.1545890059744D+02 0.1545400983365D+02 + 0.1544556324596D+02 0.1543356764880D+02 0.1541803457065D+02 0.1539898036925D+02 + 0.1537642634154D+02 0.1535039882796D+02 0.1532092931044D+02 0.1528805450387D+02 + 0.1525181644030D+02 0.1521226254557D+02 0.1516944570778D+02 0.1512342433713D+02 + 0.1507426241669D+02 0.1502202954350D+02 0.1496680095964D+02 0.1490865757272D+02 + 0.1484768596530D+02 0.1478397839284D+02 0.1471763276969D+02 0.1464875264266D+02 + 0.1457744715182D+02 0.1450383097801D+02 0.1442802427679D+02 0.1435015259838D+02 + 0.1427034679327D+02 0.1418874290321D+02 0.1410548203722D+02 0.1402071023247D+02 + 0.1393457829969D+02 0.1384724165293D+02 0.1375886012364D+02 0.1366959775879D+02 + 0.1357962260304D+02 0.1348910646488D+02 0.1339822466686D+02 0.1330715577980D+02 + 0.1321608134121D+02 0.1312518555808D+02 0.1303465499419D+02 0.1294467824221D+02 + 0.1285544558101D+02 0.1276714861841D+02 0.1267997991994D+02 0.1259413262403D+02 + 0.1250980004419D+02 0.1242717525885D+02 0.1234645068948D+02 0.1226781766776D+02 + 0.1219146599257D+02 0.1211758347770D+02 0.1204635549121D+02 0.1197796448732D+02 + 0.1191258953197D+02 0.1185040582321D+02 0.1179158420730D+02 0.1173629069208D+02 + 0.1168468595856D+02 0.1163692487226D+02 0.1159315599549D+02 0.1155352110209D+02 + 0.1151815469598D+02 0.1148718353503D+02 0.1146072616178D+02 0.1143889244247D+02 + 0.1142178311602D+02 0.1140948935454D+02 0.1140209233686D+02 0.1139966283678D+02 + 0.1140226082774D+02 0.1140993510519D+02 0.1142272292875D+02 0.1144064968524D+02 + 0.1146372857460D+02 0.1149196031991D+02 0.1152533290326D+02 0.1156382132880D+02 + 0.1160738741454D+02 0.1165597961412D+02 0.1170953287012D+02 0.1176796849989D+02 + 0.1183119411535D+02 0.1189910357777D+02 0.1197157698856D+02 0.1204848071701D+02 + 0.1212966746596D+02 0.1221497637600D+02 0.1230423316888D+02 0.1239725033077D+02 + 0.1249382733567D+02 0.1259375090926D+02 0.1269679533346D+02 0.1280272279167D+02 + 0.1291128375448D+02 0.1302221740584D+02 0.1313525210912D+02 0.1325010591253D+02 + 0.1336648709337D+02 0.1348409474012D+02 0.1360261937149D+02 0.1372174359123D+02 + 0.1384114277758D+02 0.1396048580566D+02 0.1407943580155D+02 0.1419765092608D+02 + 0.1431478518661D+02 0.1443048927478D+02 0.1454441142812D+02 0.1465619831308D+02 + 0.1476549592746D+02 0.1487195051928D+02 0.1497520951989D+02 0.1507492248828D+02 + 0.1517074206398D+02 0.1526232492551D+02 0.1534933275145D+02 0.1543143318112D+02 + 0.1550830077157D+02 0.1557961794797D+02 0.1564507594396D+02 0.1570437572881D+02 + 0.1575722891823D+02 0.1580335866539D+02 0.1584250052899D+02 0.1587440331524D+02 + 0.1589882989033D+02 0.1591555796049D+02 0.1592438081630D+02 0.1592510803844D+02 + 0.1591756616179D+02 0.1590159929512D+02 0.1587706969359D+02 0.1584385828154D+02 + 0.1580186512290D+02 0.1575100983720D+02 0.1569123195871D+02 0.1562249123695D+02 + 0.1554476787665D+02 0.1545806271560D+02 0.1536239733893D+02 0.1525781412875D+02 + 0.1514437624809D+02 0.1502216755847D+02 0.1489129247063D+02 0.1475187572813D+02 + 0.1460406212401D+02 0.1444801615062D+02 0.1428392158332D+02 0.1411198099888D+02 + 0.1393241522964D+02 0.1374546275490D+02 0.1355137903119D+02 0.1335043576333D+02 + 0.1314292011864D+02 0.1292913388664D+02 0.1270939258714D+02 0.1248402452972D+02 + 0.1225336982785D+02 0.1201777937125D+02 0.1177761376017D+02 0.1153324220569D+02 + 0.1128504140014D+02 0.1103339436205D+02 0.1077868926027D+02 0.1052131822179D+02 + 0.1026167612835D+02 0.1000015940663D+02 0.9737164817090D+01 0.9473088246666D+01 + 0.9208323510392D+01 0.8943261167138D+01 0.8678287354606D+01 0.8413782648689D+01 + 0.8150120952198D+01 0.7887668417870D+01 0.7626782410424D+01 0.7367810512255D+01 + 0.7111089577147D+01 0.6856944836175D+01 0.6605689059620D+01 0.6357621778576D+01 + 0.6113028569417D+01 0.5872180404071D+01 0.5635333068605D+01 0.5402726652271D+01 + 0.5174585108689D+01 0.4951115890458D+01 0.4732509658013D+01 0.4518940063093D+01 + 0.4310563606744D+01 0.4107519571314D+01 0.3909930025455D+01 0.3717899900701D+01 + 0.3531517137795D+01 0.3350852900521D+01 0.3175961854415D+01 0.3006882507418D+01 + 0.2843637609166D+01 0.2686234605393D+01 0.2534666143602D+01 0.2388910626020D+01 + 0.2248932805599D+01 0.2114684420764D+01 0.1986104864410D+01 0.1863121882663D+01 + 0.1745652298807D+01 0.1633602757816D+01 0.1526870486911D+01 0.1425344067651D+01 + 0.1328904215091D+01 0.1237424559686D+01 0.1150772427713D+01 0.1068809616148D+01 + 0.9913931580887D+00 0.9183760750247D+00 0.8496081124357D+00 0.7849364554513D+00 + 0.7242064215293D+00 0.6672621273712D+00 0.6139471275574D+00 0.5641050226618D+00 + 0.5175800348878D+00 0.4742175495586D+00 0.4338646210828D+00 0.3963704423129D+00 + 0.3615867764997D+00 0.3293683513354D+00 0.2995732148544D+00 0.2720630532321D+00 + 0.2467034707815D+00 0.2233642326902D+00 0.2019194712763D+00 0.1822478567499D+00 + 0.1642327336682D+00 0.1477622244444D+00 0.1327293014336D+00 0.1190318292464D+00 + 0.1065725790655D+00 0.9525921682581D-01 0.8500426719540D-01 0.7572505534570D-01 + 0.6734362852856D-01 0.5978665949119D-01 0.5298533375213D-01 0.4687522273735D-01 + 0.4139614473480D-01 0.3649201557103D-01 0.3211069084453D-01 0.2820380147099D-01 + 0.2472658420543D-01 0.2163770870794D-01 0.1889910261478D-01 0.1647577596641D-01 + 0.1433564623066D-01 0.1244936504301D-01 0.1079014767040D-01 0.9333606088531D-02 + 0.8057586449521D-02 0.6942011605538D-02 0.5968729247262D-02 0.5121366113861D-02 + 0.4385188634413D-02 0.3746970269980D-02 0.3194865741265D-02 0.2718292249293D-02 + 0.2307817726031D-02 0.1955056088404D-02 0.1652569412799D-02 0.1393776897745D-02 + 0.1172870439853D-02 0.9847366120634D-03 0.8248848034661D-03 0.6893812560569D-03 + 0.5747887154298D-03 0.4781113990982D-03 0.3967449774979D-03 0.3284312582634D-03 + 0.2712172636576D-03 0.2234183935981D-03 0.1835853721449D-03 0.1504746831443D-03 + 0.1230222105786D-03 0.1003198106540D-03 0.8159455542106D-04 0.6619040144209D-04 + 0.5355205138722D-04 0.4321079120846D-04 0.3477210045803D-04 0.2790484818898D-04 + 0.2233190152246D-04 0.1782198824118D-04 0.1418266855132D-04 0.1125428434880D-04 + 0.8904766856498D-05 0.7025195313453D-05 0.5526010459652D-05 0.4333796852085D-05 + 0.3388557563637D-05 0.2641413563333D-05 0.2052668070841D-05 0.1590183444862D-05 + 0.1228024735392D-05 0.9453299398051D-06 0.7253722919424D-06 0.5547846237125D-06 + 0.4229200131023D-06 0.3213266143727D-06 0.2433177983142D-06 0.1836215545666D-06 + 0.1380955642703D-06 0.1034964778941D-06 0.7729376586493D-07 0.5752008209307D-07 + 0.4265142355148D-07 0.3151151106808D-07 0.2319578320089D-07 0.1701120974173D-07 + 0.1242881489534D-07 0.9046371073667D-08 0.6559198960071D-08 0.4737402476978D-08 + 0.3408191153158D-08 0.2442208093542D-08 0.1742998768590D-08 0.1238932286038D-08 + 0.8770296193333D-09 0.6182683290111D-09 0.4340255982013D-09 0.3033950772413D-09 + 0.2111715589818D-09 0.1463438404983D-09 0.1009726185101D-09 0.6935859066118D-10 + 0.4742849271888D-10 0.3228488955626D-10 0.2187547853929D-10 0.1475212866899D-10 + 0.9901881750809D-11 0.6613860882122D-11 0.4396644350124D-11 0.2908650000322D-11 + 0.1914873227728D-11 0.1254415200484D-11 0.8176535094916D-12 0.5302708391854D-12 + 0.3421370551355D-12 0.2196087836422D-12 0.1402231518601D-12 0.8906014768602D-13 + LSMS: xx z= 26. xvalws= 2.77074 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728402963D+02-0.5199725117641D+02-0.5199721792578D+02-0.5199718427293D+02 +-0.5199715021300D+02-0.5199711574107D+02-0.5199708085214D+02-0.5199704554119D+02 +-0.5199700980309D+02-0.5199697363268D+02-0.5199693702474D+02-0.5199689997397D+02 +-0.5199686247500D+02-0.5199682452243D+02-0.5199678611076D+02-0.5199674723444D+02 +-0.5199670788785D+02-0.5199666806529D+02-0.5199662776101D+02-0.5199658696918D+02 +-0.5199654568390D+02-0.5199650389922D+02-0.5199646160907D+02-0.5199641880734D+02 +-0.5199637548785D+02-0.5199633164434D+02-0.5199628727046D+02-0.5199624235979D+02 +-0.5199619690585D+02-0.5199615090205D+02-0.5199610434176D+02-0.5199605721822D+02 +-0.5199600952464D+02-0.5199596125410D+02-0.5199591239964D+02-0.5199586295419D+02 +-0.5199581291060D+02-0.5199576226162D+02-0.5199571099994D+02-0.5199565911815D+02 +-0.5199560660874D+02-0.5199555346411D+02-0.5199549967658D+02-0.5199544523837D+02 +-0.5199539014162D+02-0.5199533437834D+02-0.5199527794048D+02-0.5199522081989D+02 +-0.5199516300828D+02-0.5199510449731D+02-0.5199504527851D+02-0.5199498534331D+02 +-0.5199492468306D+02-0.5199486328897D+02-0.5199480115217D+02-0.5199473826367D+02 +-0.5199467461436D+02-0.5199461019507D+02-0.5199454499646D+02-0.5199447900910D+02 +-0.5199441222344D+02-0.5199434462984D+02-0.5199427621849D+02-0.5199420697954D+02 +-0.5199413690295D+02-0.5199406597858D+02-0.5199399419618D+02-0.5199392154537D+02 +-0.5199384801563D+02-0.5199377359634D+02-0.5199369827672D+02-0.5199362204589D+02 +-0.5199354489281D+02-0.5199346680633D+02-0.5199338777515D+02-0.5199330778784D+02 +-0.5199322683282D+02-0.5199314489839D+02-0.5199306197270D+02-0.5199297804374D+02 +-0.5199289309939D+02-0.5199280712733D+02-0.5199272011516D+02-0.5199263205027D+02 +-0.5199254291992D+02-0.5199245271123D+02-0.5199236141114D+02-0.5199226900644D+02 +-0.5199217548376D+02-0.5199208082958D+02-0.5199198503019D+02-0.5199188807175D+02 +-0.5199178994021D+02-0.5199169062139D+02-0.5199159010092D+02-0.5199148836424D+02 +-0.5199138539665D+02-0.5199128118323D+02-0.5199117570892D+02-0.5199106895845D+02 +-0.5199096091638D+02-0.5199085156707D+02-0.5199074089471D+02-0.5199062888326D+02 +-0.5199051551654D+02-0.5199040077813D+02-0.5199028465143D+02-0.5199016711964D+02 +-0.5199004816574D+02-0.5198992777253D+02-0.5198980592257D+02-0.5198968259824D+02 +-0.5198955778170D+02-0.5198943145487D+02-0.5198930359948D+02-0.5198917419701D+02 +-0.5198904322875D+02-0.5198891067574D+02-0.5198877651879D+02-0.5198864073848D+02 +-0.5198850331517D+02-0.5198836422896D+02-0.5198822345972D+02-0.5198808098707D+02 +-0.5198793679039D+02-0.5198779084882D+02-0.5198764314123D+02-0.5198749364622D+02 +-0.5198734234217D+02-0.5198718920716D+02-0.5198703421905D+02-0.5198687735537D+02 +-0.5198671859343D+02-0.5198655791024D+02-0.5198639528254D+02-0.5198623068679D+02 +-0.5198606409915D+02-0.5198589549550D+02-0.5198572485143D+02-0.5198555214224D+02 +-0.5198537734293D+02-0.5198520042816D+02-0.5198502137235D+02-0.5198484014954D+02 +-0.5198465673351D+02-0.5198447109769D+02-0.5198428321519D+02-0.5198409305883D+02 +-0.5198390060104D+02-0.5198370581396D+02-0.5198350866939D+02-0.5198330913876D+02 +-0.5198310719319D+02-0.5198290280341D+02-0.5198269593983D+02-0.5198248657249D+02 +-0.5198227467106D+02-0.5198206020484D+02-0.5198184314277D+02-0.5198162345340D+02 +-0.5198140110492D+02-0.5198117606510D+02-0.5198094830136D+02-0.5198071778068D+02 +-0.5198048446968D+02-0.5198024833454D+02-0.5198000934107D+02-0.5197976745462D+02 +-0.5197952264015D+02-0.5197927486220D+02-0.5197902408485D+02-0.5197877027176D+02 +-0.5197851338615D+02-0.5197825339081D+02-0.5197799024804D+02-0.5197772391971D+02 +-0.5197745436723D+02-0.5197718155151D+02-0.5197690543304D+02-0.5197662597177D+02 +-0.5197634312720D+02-0.5197605685833D+02-0.5197576712367D+02-0.5197547388122D+02 +-0.5197517708846D+02-0.5197487670236D+02-0.5197457267938D+02-0.5197426497542D+02 +-0.5197395354589D+02-0.5197363834563D+02-0.5197331932893D+02-0.5197299644952D+02 +-0.5197266966059D+02-0.5197233891476D+02-0.5197200416404D+02-0.5197166535990D+02 +-0.5197132245319D+02-0.5197097539418D+02-0.5197062413252D+02-0.5197026861727D+02 +-0.5196990879687D+02-0.5196954461909D+02-0.5196917603112D+02-0.5196880297948D+02 +-0.5196842541005D+02-0.5196804326804D+02-0.5196765649801D+02-0.5196726504383D+02 +-0.5196686884871D+02-0.5196646785514D+02-0.5196606200494D+02-0.5196565123919D+02 +-0.5196523549829D+02-0.5196481472189D+02-0.5196438884890D+02-0.5196395781753D+02 +-0.5196352156518D+02-0.5196308002855D+02-0.5196263314350D+02-0.5196218084518D+02 +-0.5196172306789D+02-0.5196125974518D+02-0.5196079080977D+02-0.5196031619354D+02 +-0.5195983582758D+02-0.5195934964214D+02-0.5195885756657D+02-0.5195835952942D+02 +-0.5195785545834D+02-0.5195734528011D+02-0.5195682892060D+02-0.5195630630481D+02 +-0.5195577735679D+02-0.5195524199969D+02-0.5195470015573D+02-0.5195415174616D+02 +-0.5195359669127D+02-0.5195303491041D+02-0.5195246632192D+02-0.5195189084316D+02 +-0.5195130839046D+02-0.5195071887917D+02-0.5195012222358D+02-0.5194951833693D+02 +-0.5194890713143D+02-0.5194828851819D+02-0.5194766240726D+02-0.5194702870759D+02 +-0.5194638732701D+02-0.5194573817222D+02-0.5194508114882D+02-0.5194441616121D+02 +-0.5194374311266D+02-0.5194306190525D+02-0.5194237243986D+02-0.5194167461616D+02 +-0.5194096833262D+02-0.5194025348643D+02-0.5193952997356D+02-0.5193879768871D+02 +-0.5193805652527D+02-0.5193730637535D+02-0.5193654712973D+02-0.5193577867788D+02 +-0.5193500090790D+02-0.5193421370652D+02-0.5193341695911D+02-0.5193261054963D+02 +-0.5193179436061D+02-0.5193096827316D+02-0.5193013216694D+02-0.5192928592013D+02 +-0.5192842940944D+02-0.5192756251004D+02-0.5192668509561D+02-0.5192579703828D+02 +-0.5192489820860D+02-0.5192398847556D+02-0.5192306770652D+02-0.5192213576726D+02 +-0.5192119252189D+02-0.5192023783287D+02-0.5191927156096D+02-0.5191829356524D+02 +-0.5191730370307D+02-0.5191630183005D+02-0.5191528780001D+02-0.5191426146503D+02 +-0.5191322267532D+02-0.5191217127930D+02-0.5191110712354D+02-0.5191003005272D+02 +-0.5190893990959D+02-0.5190783653503D+02-0.5190671976795D+02-0.5190558944528D+02 +-0.5190444540195D+02-0.5190328747089D+02-0.5190211548297D+02-0.5190092926700D+02 +-0.5189972864968D+02-0.5189851345560D+02-0.5189728350719D+02-0.5189603862472D+02 +-0.5189477862625D+02-0.5189350332759D+02-0.5189221254235D+02-0.5189090608179D+02 +-0.5188958375491D+02-0.5188824536834D+02-0.5188689072635D+02-0.5188551963080D+02 +-0.5188413188114D+02-0.5188272727435D+02-0.5188130560492D+02-0.5187986666482D+02 +-0.5187841024347D+02-0.5187693612772D+02-0.5187544410178D+02-0.5187393394724D+02 +-0.5187240544300D+02-0.5187085836524D+02-0.5186929248740D+02-0.5186770758014D+02 +-0.5186610341132D+02-0.5186447974591D+02-0.5186283634606D+02-0.5186117297093D+02 +-0.5185948937678D+02-0.5185778531685D+02-0.5185606054135D+02-0.5185431479744D+02 +-0.5185254782916D+02-0.5185075937741D+02-0.5184894917991D+02-0.5184711697117D+02 +-0.5184526248242D+02-0.5184338544160D+02-0.5184148557330D+02-0.5183956259875D+02 +-0.5183761623572D+02-0.5183564619854D+02-0.5183365219802D+02-0.5183163394142D+02 +-0.5182959113240D+02-0.5182752347098D+02-0.5182543065350D+02-0.5182331237255D+02 +-0.5182116831697D+02-0.5181899817174D+02-0.5181680161800D+02-0.5181457833297D+02 +-0.5181232798987D+02-0.5181005025795D+02-0.5180774480235D+02-0.5180541128413D+02 +-0.5180304936016D+02-0.5180065868310D+02-0.5179823890134D+02-0.5179578965895D+02 +-0.5179331059564D+02-0.5179080134665D+02-0.5178826154277D+02-0.5178569081025D+02 +-0.5178308877073D+02-0.5178045504121D+02-0.5177778923399D+02-0.5177509095659D+02 +-0.5177235981171D+02-0.5176959539717D+02-0.5176679730585D+02-0.5176396512563D+02 +-0.5176109843930D+02-0.5175819682457D+02-0.5175525985390D+02-0.5175228709457D+02 +-0.5174927810849D+02-0.5174623245221D+02-0.5174314967682D+02-0.5174002932792D+02 +-0.5173687094551D+02-0.5173367406395D+02-0.5173043821187D+02-0.5172716291215D+02 +-0.5172384768177D+02-0.5172049203182D+02-0.5171709546736D+02-0.5171365748739D+02 +-0.5171017758479D+02-0.5170665524617D+02-0.5170308995189D+02-0.5169948117592D+02 +-0.5169582838578D+02-0.5169213104249D+02-0.5168838860043D+02-0.5168460050732D+02 +-0.5168076620412D+02-0.5167688512494D+02-0.5167295669696D+02-0.5166898034036D+02 +-0.5166495546822D+02-0.5166088148646D+02-0.5165675779371D+02-0.5165258378128D+02 +-0.5164835883303D+02-0.5164408232529D+02-0.5163975362681D+02-0.5163537209858D+02 +-0.5163093709386D+02-0.5162644795799D+02-0.5162190402831D+02-0.5161730463415D+02 +-0.5161264909661D+02-0.5160793672858D+02-0.5160316683457D+02-0.5159833871062D+02 +-0.5159345164422D+02-0.5158850491424D+02-0.5158349779076D+02-0.5157842953502D+02 +-0.5157329939929D+02-0.5156810662682D+02-0.5156285045165D+02-0.5155753009857D+02 +-0.5155214478300D+02-0.5154669371088D+02-0.5154117607855D+02-0.5153559107266D+02 +-0.5152993787006D+02-0.5152421563767D+02-0.5151842353238D+02-0.5151256070096D+02 +-0.5150662627991D+02-0.5150061939535D+02-0.5149453916296D+02-0.5148838468777D+02 +-0.5148215506412D+02-0.5147584937554D+02-0.5146946669454D+02-0.5146300608264D+02 +-0.5145646659012D+02-0.5144984725596D+02-0.5144314710771D+02-0.5143636516137D+02 +-0.5142950042123D+02-0.5142255187982D+02-0.5141551851771D+02-0.5140839930344D+02 +-0.5140119319335D+02-0.5139389913149D+02-0.5138651604948D+02-0.5137904286634D+02 +-0.5137147848843D+02-0.5136382180931D+02-0.5135607170955D+02-0.5134822705665D+02 +-0.5134028670491D+02-0.5133224949527D+02-0.5132411425521D+02-0.5131587979859D+02 +-0.5130754492555D+02-0.5129910842232D+02-0.5129056906116D+02-0.5128192560017D+02 +-0.5127317678315D+02-0.5126432133956D+02-0.5125535798425D+02-0.5124628541740D+02 +-0.5123710232443D+02-0.5122780737574D+02-0.5121839922671D+02-0.5120887651745D+02 +-0.5119923787276D+02-0.5118948190193D+02-0.5117960719865D+02-0.5116961234085D+02 +-0.5115949589056D+02-0.5114925639380D+02-0.5113889238044D+02-0.5112840236408D+02 +-0.5111778484188D+02-0.5110703829447D+02-0.5109616118579D+02-0.5108515196301D+02 +-0.5107400905631D+02-0.5106273087889D+02-0.5105131582667D+02-0.5103976227836D+02 +-0.5102806859514D+02-0.5101623312071D+02-0.5100425418105D+02-0.5099213008436D+02 +-0.5097985912091D+02-0.5096743956297D+02-0.5095486966464D+02-0.5094214766176D+02 +-0.5092927177183D+02-0.5091624019384D+02-0.5090305110822D+02-0.5088970267672D+02 +-0.5087619304230D+02-0.5086252032900D+02-0.5084868264193D+02-0.5083467806710D+02 +-0.5082050467136D+02-0.5080616050232D+02-0.5079164358822D+02-0.5077695193792D+02 +-0.5076208354076D+02-0.5074703636655D+02-0.5073180836542D+02-0.5071639746782D+02 +-0.5070080158445D+02-0.5068501860613D+02-0.5066904640389D+02-0.5065288282874D+02 +-0.5063652571181D+02-0.5061997286414D+02-0.5060322207678D+02-0.5058627112067D+02 +-0.5056911774669D+02-0.5055175968555D+02-0.5053419464788D+02-0.5051642032411D+02 +-0.5049843438458D+02-0.5048023447945D+02-0.5046181823877D+02-0.5044318327247D+02 +-0.5042432717038D+02-0.5040524750226D+02-0.5038594181787D+02-0.5036640764694D+02 +-0.5034664249930D+02-0.5032664386488D+02-0.5030640921379D+02-0.5028593599640D+02 +-0.5026522164341D+02-0.5024426356594D+02-0.5022305915564D+02-0.5020160578474D+02 +-0.5017990080623D+02-0.5015794155393D+02-0.5013572534263D+02-0.5011324946826D+02 +-0.5009051120796D+02-0.5006750782030D+02-0.5004423654542D+02-0.5002069460521D+02 +-0.4999687920344D+02-0.4997278752603D+02-0.4994841674120D+02-0.4992376399966D+02 +-0.4989882643488D+02-0.4987360116327D+02-0.4984808528443D+02-0.4982227588141D+02 +-0.4979617002094D+02-0.4976976475371D+02-0.4974305711462D+02-0.4971604412309D+02 +-0.4968872278335D+02-0.4966109008469D+02-0.4963314300185D+02-0.4960487849528D+02 +-0.4957629351145D+02-0.4954738498327D+02-0.4951814983035D+02-0.4948858495939D+02 +-0.4945868726453D+02-0.4942845362775D+02-0.4939788091919D+02-0.4936696599757D+02 +-0.4933570571061D+02-0.4930409689534D+02-0.4927213637859D+02-0.4923982097740D+02 +-0.4920714749935D+02-0.4917411274309D+02-0.4914071349870D+02-0.4910694654815D+02 +-0.4907280866573D+02-0.4903829661848D+02-0.4900340716666D+02-0.4896813706420D+02 +-0.4893248305909D+02-0.4889644189392D+02-0.4886001030623D+02-0.4882318502909D+02 +-0.4878596279141D+02-0.4874834031849D+02-0.4871031433244D+02-0.4867188155262D+02 +-0.4863303869609D+02-0.4859378247804D+02-0.4855410961222D+02-0.4851401681140D+02 +-0.4847350078774D+02-0.4843255825325D+02-0.4839118592018D+02-0.4834938050138D+02 +-0.4830713871075D+02-0.4826445726356D+02-0.4822133287682D+02-0.4817776226967D+02 +-0.4813374216365D+02-0.4808926928306D+02-0.4804434035526D+02-0.4799895211091D+02 +-0.4795310128431D+02-0.4790678461358D+02-0.4785999884093D+02-0.4781274071282D+02 +-0.4776500698020D+02-0.4771679439861D+02-0.4766809972836D+02-0.4761891973461D+02 +-0.4756925118748D+02-0.4751909086208D+02-0.4746843553857D+02-0.4741728200213D+02 +-0.4736562704295D+02-0.4731346745620D+02-0.4726080004188D+02-0.4720762160479D+02 +-0.4715392895431D+02-0.4709971890425D+02-0.4704498827268D+02-0.4698973388163D+02 +-0.4693395255690D+02-0.4687764112767D+02-0.4682079642628D+02-0.4676341528777D+02 +-0.4670549454962D+02-0.4664703105122D+02-0.4658802163351D+02-0.4652846313853D+02 +-0.4646835240891D+02-0.4640768628735D+02-0.4634646161617D+02-0.4628467523671D+02 +-0.4622232398885D+02-0.4615940471037D+02-0.4609591423645D+02-0.4603184939910D+02 +-0.4596720702657D+02-0.4590198394276D+02-0.4583617696675D+02-0.4576978291218D+02 +-0.4570279858676D+02-0.4563522079176D+02-0.4556704632159D+02-0.4549827196328D+02 +-0.4542889449617D+02-0.4535891069156D+02-0.4528831731237D+02-0.4521711111299D+02 +-0.4514528883912D+02-0.4507284722768D+02-0.4499978300686D+02-0.4492609289624D+02 +-0.4485177360700D+02-0.4477682184233D+02-0.4470123429783D+02-0.4462500766219D+02 +-0.4454813861790D+02-0.4447062384219D+02-0.4439246000814D+02-0.4431364378589D+02 +-0.4423417184413D+02-0.4415404085174D+02-0.4407324747964D+02-0.4399178840285D+02 +-0.4390966030283D+02-0.4382685986996D+02-0.4374338380636D+02-0.4365922882888D+02 +-0.4357439167239D+02-0.4348886909331D+02-0.4340265787340D+02-0.4331575482384D+02 +-0.4322815678953D+02-0.4313986065369D+02-0.4305086334268D+02-0.4296116183110D+02 +-0.4287075314713D+02-0.4277963437808D+02-0.4268780267613D+02-0.4259525526436D+02 +-0.4250198944278D+02-0.4240800259471D+02-0.4231329219311D+02-0.4221785580702D+02 +-0.4212169110814D+02-0.4202479587724D+02-0.4192716801066D+02-0.4182880552657D+02 +-0.4172970657123D+02-0.4162986942478D+02-0.4152929250699D+02-0.4142797438248D+02 +-0.4132591376546D+02-0.4122310952415D+02-0.4111956068435D+02-0.4101526643252D+02 +-0.4091022611799D+02-0.4080443925436D+02-0.4069790551997D+02-0.4059062475744D+02 +-0.4048259697200D+02-0.4037382232884D+02-0.4026430114924D+02-0.4015403390548D+02 +-0.4004302121449D+02-0.3993126383031D+02-0.3981876263529D+02-0.3970551863000D+02 +-0.3959153292214D+02-0.3947680671418D+02-0.3936134129010D+02-0.3924513800125D+02 +-0.3912819825140D+02-0.3901052348125D+02-0.3889211515259D+02-0.3877297473220D+02 +-0.3865310367583D+02-0.3853250341248D+02-0.3841117532917D+02-0.3828912075654D+02 +-0.3816634095549D+02-0.3804283710513D+02-0.3791861029232D+02-0.3779366150300D+02 +-0.3766799161555D+02-0.3754160139636D+02-0.3741449149782D+02-0.3728666245883D+02 +-0.3715811470790D+02-0.3702884856900D+02-0.3689886427010D+02-0.3676816195438D+02 +-0.3663674169408D+02-0.3650460350690D+02-0.3637174737474D+02-0.3623817326473D+02 +-0.3610388115218D+02-0.3596887104531D+02-0.3583314301154D+02-0.3569669720495D+02 +-0.3555953389464D+02-0.3542165349386D+02-0.3528305658922D+02-0.3514374397011D+02 +-0.3500371665774D+02-0.3486297593358D+02-0.3472152336690D+02-0.3457936084122D+02 +-0.3443649057928D+02-0.3429291516643D+02-0.3414863757211D+02-0.3400366116934D+02 +-0.3385798975190D+02-0.3371162754922D+02-0.3356457923876D+02-0.3341684995570D+02 +-0.3326844530007D+02-0.3311937134098D+02-0.3296963461820D+02-0.3281924214079D+02 +-0.3266820138293D+02-0.3251652027694D+02-0.3236420720350D+02-0.3221127097903D+02 +-0.3205772084042D+02-0.3190356642710D+02-0.3174881776049D+02-0.3159348522098D+02 +-0.3143757952257D+02-0.3128111168511D+02-0.3112409300454D+02-0.3096653502093D+02 +-0.3080844948479D+02-0.3064984832153D+02-0.3049074359439D+02-0.3033114746593D+02 +-0.3017107215833D+02-0.3001052991254D+02-0.2984953294675D+02-0.2968809341400D+02 +-0.2952622335948D+02-0.2936393467762D+02-0.2920123906907D+02-0.2903814799805D+02 +-0.2887467265011D+02-0.2871082389066D+02-0.2854661222446D+02-0.2838204775647D+02 +-0.2821714015409D+02-0.2805189861135D+02-0.2788633181514D+02-0.2772044791378D+02 +-0.2755425448842D+02-0.2738775852723D+02-0.2722096640307D+02-0.2705388385454D+02 +-0.2688651597109D+02-0.2671886718221D+02-0.2655094125117D+02-0.2638274127348D+02 +-0.2621426968047D+02-0.2604552824823D+02-0.2587651811214D+02-0.2570723978730D+02 +-0.2553769319514D+02-0.2536787769632D+02-0.2519779213021D+02-0.2502743486110D+02 +-0.2485680383129D+02-0.2468589662112D+02-0.2451471051601D+02-0.2434324258050D+02 +-0.2417148973924D+02-0.2399944886481D+02-0.2382711687194D+02-0.2365449081810D+02 +-0.2348156800981D+02-0.2330834611404D+02-0.2313482327422D+02-0.2296099822964D+02 +-0.2278687043744D+02-0.2261244019567D+02-0.2243770876615D+02-0.2226267849517D+02 +-0.2208735293014D+02-0.2191173693001D+02-0.2173583676674D+02-0.2155966021537D+02 +-0.2138321662948D+02-0.2120651699903D+02-0.2102957398727D+02-0.2085240194340D+02 +-0.2067501688787D+02-0.2049743646710D+02-0.2031967987514D+02-0.2014176773999D+02 +-0.1996372197331D+02-0.1978556558301D+02-0.1960732244950D+02-0.1942901706755D+02 +-0.1925067425750D+02-0.1907231885074D+02-0.1889397535633D+02-0.1871566761696D+02 +-0.1853741846374D+02-0.1835924938052D+02-0.1818118018868D+02-0.1800322876380D+02 +-0.1782541079491D+02-0.1764773959582D+02-0.1747022597686D+02-0.1729287818264D+02 +-0.1711570189939D+02-0.1693870033244D+02-0.1676187435187D+02-0.1658522270158D+02 +-0.1640874226459D+02-0.1623242837596D+02-0.1605627517269D+02-0.1588027596970D+02 +-0.1570442365062D+02-0.1552871106216D+02-0.1535313140208D+02-0.1517767859145D+02 +-0.1500234762341D+02-0.1482713488228D+02-0.1465203842815D+02-0.1447705824363D+02 +-0.1430219644106D+02-0.1412745742929D+02-0.1395284804054D+02-0.1377837761854D+02 +-0.1360405806987D+02-0.1342990388081D+02-0.1325593210249D+02-0.1308216230731D+02 +-0.1290861651951D+02-0.1273531912305D+02-0.1256229674959D+02-0.1238957814960D+02 +-0.1221719404907D+02-0.1204517699438D+02-0.1187356118783D+02-0.1170238231558D+02 +-0.1153167737042D+02-0.1136148447069D+02-0.1119184267735D+02-0.1102279181034D+02 +-0.1085437226576D+02-0.1068662483495D+02-0.1051959052659D+02-0.1035331039265D+02 +-0.1018782535928D+02-0.1002317606321D+02-0.9859402694342D+01-0.9696544845323D+01 +-0.9534641368482D+01-0.9373730240659D+01-0.9213848436346D+01-0.9055031809511D+01 +-0.8897314984394D+01-0.8740731255549D+01-0.8585312497336D+01-0.8431089083029D+01 +-0.8278089813661D+01-0.8126341856676D+01-0.7975870694439D+01-0.7826700082584D+01 +-0.7678852018171D+01-0.7532346717566D+01-0.7387202603932D+01-0.7243436304187D+01 +-0.7101062655233D+01-0.6960094719270D+01-0.6820543807924D+01-0.6682419514939D+01 +-0.6545729757123D+01-0.6410480823229D+01-0.6276677430423D+01-0.6144322787958D+01 +-0.6013418667669D+01-0.5883965480867D+01-0.5755962361193D+01-0.5629407252975D+01 +-0.5504297004604D+01-0.5380627466436D+01-0.5258393592702D+01-0.5137589546863D+01 +-0.5018208809882D+01-0.4900244290793D+01-0.4783688438971D+01-0.4668533357470D+01 +-0.4554770916754D+01-0.4442392868124D+01-0.4331390956131D+01-0.4221757029192D+01 +-0.4113483147635D+01-0.4006561688322D+01-0.3900985445011D+01-0.3796747723533D+01 +-0.3693842430876D+01-0.3592264157211D+01-0.3492008249906D+01-0.3393070878541D+01 +-0.3295449089976D+01-0.3199140852531D+01-0.3104145088414D+01-0.3010461693592D+01 +-0.2918091544431D+01-0.2827036490592D+01-0.2737299333835D+01-0.2648883792669D+01 +-0.2561794453010D+01-0.2476036705393D+01-0.2391616669610D+01-0.2308541108029D+01 +-0.2226817329318D+01-0.2146453084634D+01-0.2067456458802D+01-0.1989835759339D+01 +-0.1913599406514D+01-0.1838755827812D+01-0.1765313360391D+01-0.1693280165020D+01 +-0.1622664154978D+01-0.1553472943063D+01-0.1485713809518D+01-0.1419393693186D+01 +-0.1354519207570D+01-0.1291096682842D+01-0.1229132234097D+01-0.1168631855453D+01 +-0.1109601538882D+01-0.1052047416050D+01-0.9959759208814D+00-0.9413939701484D+00 +-0.8883091590719D+00-0.8367299687430D+00-0.7866659821253D+00-0.7381281054637D+00 +-0.6911287920896D+00-0.6456822658698D+00-0.6018047418553D+00-0.5595146420441D+00 +-0.5188328045500D+00-0.4797826848498D+00-0.4423905481512D+00-0.4066856522662D+00 +-0.3727004206897D+00-0.3404706058472D+00-0.3100354427093D+00-0.2814377931599D+00 +-0.2547240189175D+00 + 0.0000000000000D+00 + 1012 0.2770741520224D+01 + 0.2150927949039D-04 0.2202124536575D-04 0.2254539478646D-04 0.2308201760180D-04 + 0.2363141055333D-04 0.2419387743865D-04 0.2476972927906D-04 0.2535928449121D-04 + 0.2596286906285D-04 0.2658081673262D-04 0.2721346917432D-04 0.2786117618535D-04 + 0.2852429587973D-04 0.2920319488569D-04 0.2989824854795D-04 0.3060984113473D-04 + 0.3133836604977D-04 0.3208422604934D-04 0.3284783346437D-04 0.3362961042788D-04 + 0.3442998910781D-04 0.3524941194536D-04 0.3608833189898D-04 0.3694721269416D-04 + 0.3782652907911D-04 0.3872676708658D-04 0.3964842430179D-04 0.4059201013679D-04 + 0.4155804611131D-04 0.4254706614023D-04 0.4355961682789D-04 0.4459625776943D-04 + 0.4565756185917D-04 0.4674411560639D-04 0.4785651945856D-04 0.4899538813222D-04 + 0.5016135095172D-04 0.5135505219602D-04 0.5257715145361D-04 0.5382832398596D-04 + 0.5510926109951D-04 0.5642067052648D-04 0.5776327681476D-04 0.5913782172693D-04 + 0.6054506464885D-04 0.6198578300785D-04 0.6346077270088D-04 0.6497084853274D-04 + 0.6651684466474D-04 0.6809961507398D-04 0.6972003402351D-04 0.7137899654355D-04 + 0.7307741892426D-04 0.7481623921999D-04 0.7659641776564D-04 0.7841893770513D-04 + 0.8028480553242D-04 0.8219505164534D-04 0.8415073091254D-04 0.8615292325379D-04 + 0.8820273423416D-04 0.9030129567206D-04 0.9244976626185D-04 0.9464933221109D-04 + 0.9690120789284D-04 0.9920663651351D-04 0.1015668907964D-03 0.1039832736813D-03 + 0.1064571190411D-03 0.1089897924148D-03 0.1115826917580D-03 0.1142372482113D-03 + 0.1169549268870D-03 0.1197372276738D-03 0.1225856860613D-03 0.1255018739831D-03 + 0.1284874006808D-03 0.1315439135877D-03 0.1346730992336D-03 0.1378766841712D-03 + 0.1411564359238D-03 0.1445141639563D-03 0.1479517206680D-03 0.1514710024102D-03 + 0.1550739505263D-03 0.1587625524179D-03 0.1625388426349D-03 0.1664049039925D-03 + 0.1703628687133D-03 0.1744149195974D-03 0.1785632912194D-03 0.1828102711544D-03 + 0.1871582012321D-03 0.1916094788209D-03 0.1961665581427D-03 0.2008319516176D-03 + 0.2056082312418D-03 0.2104980299966D-03 0.2155040432913D-03 0.2206290304405D-03 + 0.2258758161753D-03 0.2312472921908D-03 0.2367464187300D-03 0.2423762262044D-03 + 0.2481398168542D-03 0.2540403664457D-03 0.2600811260106D-03 0.2662654236245D-03 + 0.2725966662290D-03 0.2790783414953D-03 0.2857140197324D-03 0.2925073558401D-03 + 0.2994620913080D-03 0.3065820562611D-03 0.3138711715547D-03 0.3213334509168D-03 + 0.3289730031429D-03 0.3367940343406D-03 0.3448008502286D-03 0.3529978584881D-03 + 0.3613895711713D-03 0.3699806071650D-03 0.3787756947128D-03 0.3877796739964D-03 + 0.3969974997780D-03 0.4064342441040D-03 0.4160950990725D-03 0.4259853796663D-03 + 0.4361105266519D-03 0.4464761095462D-03 0.4570878296540D-03 0.4679515231757D-03 + 0.4790731643881D-03 0.4904588689006D-03 0.5021148969868D-03 0.5140476569946D-03 + 0.5262637088364D-03 0.5387697675611D-03 0.5515727070097D-03 0.5646795635561D-03 + 0.5780975399370D-03 0.5918340091694D-03 0.6058965185620D-03 0.6202927938188D-03 + 0.6350307432396D-03 0.6501184620192D-03 0.6655642366457D-03 0.6813765494038D-03 + 0.6975640829812D-03 0.7141357251847D-03 0.7311005737650D-03 0.7484679413557D-03 + 0.7662473605260D-03 0.7844485889531D-03 0.8030816147148D-03 0.8221566617048D-03 + 0.8416841951763D-03 0.8616749274129D-03 0.8821398235337D-03 0.9030901074324D-03 + 0.9245372678559D-03 0.9464930646236D-03 0.9689695349932D-03 0.9919790001731D-03 + 0.1015534071988D-02 0.1039647659698D-02 0.1064332976981D-02 0.1089603549068D-02 + 0.1115473220057D-02 0.1141956160389D-02 0.1169066874495D-02 0.1196820208634D-02 + 0.1225231358897D-02 0.1254315879409D-02 0.1284089690715D-02 0.1314569088366D-02 + 0.1345770751696D-02 0.1377711752814D-02 0.1410409565795D-02 0.1443882076088D-02 + 0.1478147590144D-02 0.1513224845264D-02 0.1549133019674D-02 0.1585891742841D-02 + 0.1623521106018D-02 0.1662041673040D-02 0.1701474491365D-02 0.1741841103378D-02 + 0.1783163557945D-02 0.1825464422244D-02 0.1868766793867D-02 0.1913094313196D-02 + 0.1958471176071D-02 0.2004922146751D-02 0.2052472571166D-02 0.2101148390486D-02 + 0.2150976154989D-02 0.2201983038264D-02 0.2254196851731D-02 0.2307646059493D-02 + 0.2362359793542D-02 0.2418367869301D-02 0.2475700801533D-02 0.2534389820612D-02 + 0.2594466889165D-02 0.2655964719104D-02 0.2718916789042D-02 0.2783357362106D-02 + 0.2849321504172D-02 0.2916845102501D-02 0.2985964884814D-02 0.3056718438800D-02 + 0.3129144232066D-02 0.3203281632551D-02 0.3279170929405D-02 0.3356853354336D-02 + 0.3436371103460D-02 0.3517767359634D-02 0.3601086315312D-02 0.3686373195913D-02 + 0.3773674283724D-02 0.3863036942351D-02 0.3954509641719D-02 0.4048141983652D-02 + 0.4143984728019D-02 0.4242089819491D-02 0.4342510414893D-02 0.4445300911185D-02 + 0.4550516974067D-02 0.4658215567249D-02 0.4768454982366D-02 0.4881294869584D-02 + 0.4996796268890D-02 0.5115021642093D-02 0.5236034905549D-02 0.5359901463622D-02 + 0.5486688242898D-02 0.5616463727181D-02 0.5749297993262D-02 0.5885262747508D-02 + 0.6024431363262D-02 0.6166878919093D-02 0.6312682237899D-02 0.6461919926891D-02 + 0.6614672418475D-02 0.6771022012045D-02 0.6931052916716D-02 0.7094851295016D-02 + 0.7262505307545D-02 0.7434105158642D-02 0.7609743143066D-02 0.7789513693721D-02 + 0.7973513430440D-02 0.8161841209859D-02 0.8354598176397D-02 0.8551887814376D-02 + 0.8753816001287D-02 0.8960491062250D-02 0.9172023825667D-02 0.9388527680122D-02 + 0.9610118632529D-02 0.9836915367568D-02 0.1006903930843D-01 0.1030661467892D-01 + 0.1054976856688D-01 0.1079863098909D-01 0.1105333495749D-01 0.1131401654696D-01 + 0.1158081496451D-01 0.1185387262003D-01 0.1213333519856D-01 0.1241935173418D-01 + 0.1271207468545D-01 0.1301166001257D-01 0.1331826725616D-01 0.1363205961778D-01 + 0.1395320404221D-01 0.1428187130150D-01 0.1461823608081D-01 0.1496247706623D-01 + 0.1531477703430D-01 0.1567532294367D-01 0.1604430602860D-01 0.1642192189452D-01 + 0.1680837061563D-01 0.1720385683464D-01 0.1760858986456D-01 0.1802278379280D-01 + 0.1844665758734D-01 0.1888043520531D-01 0.1932434570378D-01 0.1977862335297D-01 + 0.2024350775185D-01 0.2071924394615D-01 0.2120608254895D-01 0.2170427986376D-01 + 0.2221409801021D-01 0.2273580505238D-01 0.2326967512987D-01 0.2381598859160D-01 + 0.2437503213237D-01 0.2494709893234D-01 0.2553248879941D-01 0.2613150831454D-01 + 0.2674447098014D-01 0.2737169737147D-01 0.2801351529124D-01 0.2867025992742D-01 + 0.2934227401421D-01 0.3002990799646D-01 0.3073352019732D-01 0.3145347698951D-01 + 0.3219015296988D-01 0.3294393113773D-01 0.3371520307664D-01 0.3450436914006D-01 + 0.3531183864059D-01 0.3613803004319D-01 0.3698337116219D-01 0.3784829936233D-01 + 0.3873326176383D-01 0.3963871545150D-01 0.4056512768813D-01 0.4151297613205D-01 + 0.4248274905905D-01 0.4347494558865D-01 0.4449007591493D-01 0.4552866154180D-01 + 0.4659123552298D-01 0.4767834270657D-01 0.4879053998454D-01 0.4992839654695D-01 + 0.5109249414114D-01 0.5228342733595D-01 0.5350180379101D-01 0.5474824453121D-01 + 0.5602338422639D-01 0.5732787147645D-01 0.5866236910176D-01 0.6002755443915D-01 + 0.6142411964345D-01 0.6285277199472D-01 0.6431423421119D-01 0.6580924476805D-01 + 0.6733855822219D-01 0.6890294554290D-01 0.7050319444864D-01 0.7214010975008D-01 + 0.7381451369925D-01 0.7552724634520D-01 0.7727916589591D-01 0.7907114908690D-01 + 0.8090409155624D-01 0.8277890822643D-01 0.8469653369292D-01 0.8665792261951D-01 + 0.8866405014071D-01 0.9071591227111D-01 0.9281452632182D-01 0.9496093132410D-01 + 0.9715618846031D-01 0.9940138150208D-01 0.1016976172560D+00 0.1040460260169D+00 + 0.1064477620282D+00 0.1089040039508D+00 0.1114159553388D+00 0.1139848451236D+00 + 0.1166119281054D+00 0.1192984854532D+00 0.1220458252122D+00 0.1248552828197D+00 + 0.1277282216288D+00 0.1306660334408D+00 0.1336701390448D+00 0.1367419887670D+00 + 0.1398830630269D+00 0.1430948729031D+00 0.1463789607067D+00 0.1497369005636D+00 + 0.1531702990050D+00 0.1566807955666D+00 0.1602700633964D+00 0.1639398098711D+00 + 0.1676917772207D+00 0.1715277431623D+00 0.1754495215419D+00 0.1794589629856D+00 + 0.1835579555582D+00 0.1877484254317D+00 0.1920323375616D+00 0.1964116963718D+00 + 0.2008885464482D+00 0.2054649732406D+00 0.2101431037732D+00 0.2149251073635D+00 + 0.2198131963488D+00 0.2248096268222D+00 0.2299166993754D+00 0.2351367598503D+00 + 0.2404722000984D+00 0.2459254587480D+00 0.2514990219789D+00 0.2571954243047D+00 + 0.2630172493626D+00 0.2689671307106D+00 0.2750477526311D+00 0.2812618509418D+00 + 0.2876122138134D+00 0.2941016825931D+00 0.3007331526352D+00 0.3075095741362D+00 + 0.3144339529771D+00 0.3215093515700D+00 0.3287388897102D+00 0.3361257454325D+00 + 0.3436731558729D+00 0.3513844181328D+00 0.3592628901485D+00 0.3673119915621D+00 + 0.3755352045968D+00 0.3839360749336D+00 0.3925182125899D+00 0.4012852927993D+00 + 0.4102410568930D+00 0.4193893131804D+00 0.4287339378299D+00 0.4382788757486D+00 + 0.4480281414604D+00 0.4579858199819D+00 0.4681560676951D+00 0.4785431132164D+00 + 0.4891512582614D+00 0.4999848785043D+00 0.5110484244305D+00 0.5223464221834D+00 + 0.5338834744021D+00 0.5456642610510D+00 0.5576935402392D+00 0.5699761490289D+00 + 0.5825170042325D+00 0.5953211031952D+00 0.6083935245653D+00 0.6217394290472D+00 + 0.6353640601390D+00 0.6492727448516D+00 0.6634708944082D+00 0.6779640049238D+00 + 0.6927576580616D+00 0.7078575216668D+00 0.7232693503742D+00 0.7389989861895D+00 + 0.7550523590420D+00 0.7714354873073D+00 0.7881544782973D+00 0.8052155287175D+00 + 0.8226249250876D+00 0.8403890441249D+00 0.8585143530879D+00 0.8770074100784D+00 + 0.8958748642992D+00 0.9151234562658D+00 0.9347600179702D+00 0.9547914729931D+00 + 0.9752248365635D+00 0.9960672155622D+00 0.1017325808468D+01 0.1039007905241D+01 + 0.1061120887144D+01 0.1083672226499D+01 0.1106669486370D+01 0.1130120320176D+01 + 0.1154032471231D+01 0.1178413772204D+01 0.1203272144493D+01 0.1228615597523D+01 + 0.1254452227950D+01 0.1280790218774D+01 0.1307637838359D+01 0.1335003439353D+01 + 0.1362895457506D+01 0.1391322410385D+01 0.1420292895972D+01 0.1449815591159D+01 + 0.1479899250115D+01 0.1510552702537D+01 0.1541784851777D+01 0.1573604672833D+01 + 0.1606021210210D+01 0.1639043575644D+01 0.1672680945677D+01 0.1706942559091D+01 + 0.1741837714186D+01 0.1777375765901D+01 0.1813566122779D+01 0.1850418243757D+01 + 0.1887941634794D+01 0.1926145845317D+01 0.1965040464488D+01 0.2004635117287D+01 + 0.2044939460400D+01 0.2085963177919D+01 0.2127715976829D+01 0.2170207582300D+01 + 0.2213447732763D+01 0.2257446174769D+01 0.2302212657626D+01 0.2347756927812D+01 + 0.2394088723154D+01 0.2441217766767D+01 0.2489153760756D+01 0.2537906379665D+01 + 0.2587485263675D+01 0.2637900011547D+01 0.2689160173295D+01 0.2741275242598D+01 + 0.2794254648931D+01 0.2848107749430D+01 0.2902843820459D+01 0.2958472048904D+01 + 0.3015001523163D+01 0.3072441223848D+01 0.3130800014182D+01 0.3190086630094D+01 + 0.3250309670002D+01 0.3311477584285D+01 0.3373598664440D+01 0.3436681031917D+01 + 0.3500732626634D+01 0.3565761195166D+01 0.3631774278604D+01 0.3698779200090D+01 + 0.3766783052007D+01 0.3835792682854D+01 0.3905814683769D+01 0.3976855374728D+01 + 0.4048920790399D+01 0.4122016665671D+01 0.4196148420834D+01 0.4271321146438D+01 + 0.4347539587809D+01 0.4424808129241D+01 0.4503130777854D+01 0.4582511147131D+01 + 0.4662952440136D+01 0.4744457432406D+01 0.4827028454547D+01 0.4910667374509D+01 + 0.4995375579573D+01 0.5081153958042D+01 0.5168002880655D+01 0.5255922181721D+01 + 0.5344911139992D+01 0.5434968459290D+01 0.5526092248881D+01 0.5618280003639D+01 + 0.5711528583982D+01 0.5805834195616D+01 0.5901192369103D+01 0.5997597939257D+01 + 0.6095045024395D+01 0.6193527005472D+01 0.6293036505099D+01 0.6393565366487D+01 + 0.6495104632331D+01 0.6597644523660D+01 0.6701174418681D+01 0.6805682831645D+01 + 0.6911157391760D+01 0.7017584822191D+01 0.7124950919171D+01 0.7233240531258D+01 + 0.7342437538781D+01 0.7452524833500D+01 0.7563484298530D+01 0.7675296788562D+01 + 0.7787942110430D+01 0.7901399004058D+01 0.8015645123842D+01 0.8130657020509D+01 + 0.8246410123503D+01 0.8362878723950D+01 0.8480035958250D+01 0.8597853792358D+01 + 0.8716303006799D+01 0.8835353182487D+01 0.8954972687391D+01 0.9075128664130D+01 + 0.9195787018538D+01 0.9316912409273D+01 0.9438468238543D+01 0.9560416644000D+01 + 0.9682718491880D+01 0.9805333371460D+01 0.9928219590896D+01 0.1005133417453D+02 + 0.1017463286171D+02 0.1029807010722D+02 0.1042159908344D+02 0.1054517168417D+02 + 0.1066873853037D+02 0.1079224897780D+02 0.1091565112659D+02 0.1103889183301D+02 + 0.1116191672323D+02 0.1128467020944D+02 0.1140709550823D+02 0.1152913466133D+02 + 0.1165072855885D+02 0.1177181696506D+02 0.1189233854680D+02 0.1201223090454D+02 + 0.1213143060625D+02 0.1224987322407D+02 0.1236749337400D+02 0.1248422475837D+02 + 0.1260000021157D+02 0.1271475174875D+02 0.1282841061773D+02 0.1294090735413D+02 + 0.1305217183979D+02 0.1316213336451D+02 0.1327072069111D+02 0.1337786212400D+02 + 0.1348348558110D+02 0.1358751866928D+02 0.1368988876325D+02 0.1379052308804D+02 + 0.1388934880491D+02 0.1398629310084D+02 0.1408128328150D+02 0.1417424686776D+02 + 0.1426511169568D+02 0.1435380601989D+02 0.1444025862047D+02 0.1452439891313D+02 + 0.1460615706273D+02 0.1468546410000D+02 0.1476225204147D+02 0.1483645401237D+02 + 0.1490800437259D+02 0.1497683884540D+02 0.1504289464893D+02 0.1510611063019D+02 + 0.1516642740155D+02 0.1522378747941D+02 0.1527813542502D+02 0.1532941798703D+02 + 0.1537758424592D+02 0.1542258575964D+02 0.1546437671057D+02 0.1550291405346D+02 + 0.1553815766392D+02 0.1557007048740D+02 0.1559861868825D+02 0.1562377179849D+02 + 0.1564550286611D+02 0.1566378860245D+02 0.1567860952827D+02 0.1568995011828D+02 + 0.1569779894358D+02 0.1570214881171D+02 0.1570299690387D+02 0.1570034490889D+02 + 0.1569419915342D+02 0.1568457072811D+02 0.1567147560898D+02 0.1565493477391D+02 + 0.1563497431333D+02 0.1561162553504D+02 0.1558492506233D+02 0.1555491492507D+02 + 0.1552164264320D+02 0.1548516130217D+02 0.1544552961962D+02 0.1540281200312D+02 + 0.1535707859803D+02 0.1530840532536D+02 0.1525687390884D+02 0.1520257189079D+02 + 0.1514559263632D+02 0.1508603532531D+02 0.1502400493172D+02 0.1495961218971D+02 + 0.1489297354623D+02 0.1482421109950D+02 0.1475345252306D+02 0.1468083097499D+02 + 0.1460648499184D+02 0.1453055836709D+02 0.1445320001360D+02 0.1437456381003D+02 + 0.1429480843075D+02 0.1421409715909D+02 0.1413259768392D+02 0.1405048187912D+02 + 0.1396792556614D+02 0.1388510825940D+02 0.1380221289467D+02 0.1371942554036D+02 + 0.1363693509198D+02 0.1355493294972D+02 0.1347361267958D+02 0.1339316965818D+02 + 0.1331380070165D+02 0.1323570367897D+02 0.1315907711016D+02 0.1308411975004D+02 + 0.1301103015787D+02 0.1294000625373D+02 0.1287124486230D+02 0.1280494124477D+02 + 0.1274128861984D+02 0.1268047767460D+02 0.1262269606643D+02 0.1256812791682D+02 + 0.1251695329838D+02 0.1246934771604D+02 0.1242548158392D+02 0.1238551969900D+02 + 0.1234962071295D+02 0.1231793660373D+02 0.1229061214824D+02 0.1226778439767D+02 + 0.1224958215706D+02 0.1223612547078D+02 0.1222752511553D+02 0.1222388210258D+02 + 0.1222528719100D+02 0.1223182041366D+02 0.1224355061775D+02 0.1226053502171D+02 + 0.1228281879023D+02 0.1231043462935D+02 0.1234340240339D+02 0.1238172877543D+02 + 0.1242540687338D+02 0.1247441598324D+02 0.1252872127141D+02 0.1258827353770D+02 + 0.1265300900087D+02 0.1272284911822D+02 0.1279770044081D+02 0.1287745450601D+02 + 0.1296198776857D+02 0.1305116157186D+02 0.1314482216032D+02 0.1324280073454D+02 + 0.1334491354991D+02 0.1345096205988D+02 0.1356073310471D+02 0.1367399914649D+02 + 0.1379051855093D+02 0.1391003591655D+02 0.1403228245150D+02 0.1415697639825D+02 + 0.1428382350615D+02 0.1441251755180D+02 0.1454274090682D+02 0.1467416515265D+02 + 0.1480645174180D+02 0.1493925270450D+02 0.1507221140012D+02 0.1520496331175D+02 + 0.1533713688305D+02 0.1546835439544D+02 0.1559823288411D+02 0.1572638509088D+02 + 0.1585242045188D+02 0.1597594611769D+02 0.1609656800349D+02 0.1621389186673D+02 + 0.1632752440935D+02 0.1643707440175D+02 0.1654215382521D+02 0.1664237902974D+02 + 0.1673737190368D+02 0.1682676105166D+02 0.1691018297723D+02 0.1698728326633D+02 + 0.1705771776761D+02 0.1712115376582D+02 0.1717727114395D+02 0.1722576353007D+02 + 0.1726633942470D+02 0.1729872330429D+02 0.1732265669667D+02 0.1733789922408D+02 + 0.1734422960952D+02 0.1734144664198D+02 0.1732937009656D+02 0.1730784160492D+02 + 0.1727672547225D+02 0.1723590943644D+02 0.1718530536559D+02 0.1712484989008D+02 + 0.1705450496536D+02 0.1697425836203D+02 0.1688412407975D+02 0.1678414268193D+02 + 0.1667438154808D+02 0.1655493504124D+02 0.1642592458792D+02 0.1628749866833D+02 + 0.1613983271513D+02 0.1598312891883D+02 0.1581761593876D+02 0.1564354851859D+02 + 0.1546120700566D+02 0.1527089677411D+02 0.1507294755170D+02 0.1486771265109D+02 + 0.1465556810624D+02 0.1443691171558D+02 0.1421216199343D+02 0.1398175703206D+02 + 0.1374615327696D+02 0.1350582421831D+02 0.1326125900230D+02 0.1301296096613D+02 + 0.1276144610103D+02 0.1250724144826D+02 0.1225088343315D+02 0.1199291614280D+02 + 0.1173388955369D+02 0.1147435771520D+02 0.1121487689618D+02 0.1095600370143D+02 + 0.1069829316549D+02 0.1044229683153D+02 0.1018856082317D+02 0.9937623917321D+01 + 0.9690015626445D+01 0.9446254298643D+01 0.9206845244038D+01 0.8972278896087D+01 + 0.8743029016360D+01 0.8519550951297D+01 0.8302279949355D+01 0.8091629546790D+01 + 0.7887990030116D+01 0.7691726983014D+01 0.7503179925129D+01 0.7322661049902D+01 + 0.7150454068046D+01 0.6986813162918D+01 0.6831962063451D+01 0.6686093239819D+01 + 0.6549367226364D+01 0.6421912075717D+01 0.6303822947394D+01 0.6195161833447D+01 + 0.6095957423078D+01 0.6006205107394D+01 0.5925867124779D+01 0.5854872846611D+01 + 0.5793119202371D+01 0.5740471242429D+01 0.5696762836121D+01 0.5661797502031D+01 + 0.5635349366701D+01 0.5617164247353D+01 0.5606960853570D+01 0.5604432102259D+01 + 0.5609246539649D+01 0.5621049863505D+01 0.5639466538232D+01 0.5664101495024D+01 + 0.5694541908766D+01 0.5730359042993D+01 0.5771110153784D+01 0.5816340443192D+01 + 0.5865585052475D+01 0.5918371085180D+01 0.5974219649957D+01 0.6032647912832D+01 + 0.6093171148637D+01 0.6155304781260D+01 0.6218566402475D+01 0.6282477759234D+01 + 0.6346566699475D+01 0.6410369066815D+01 0.6473430534781D+01 0.6535308371644D+01 + 0.6595573127395D+01 0.6653810234872D+01 0.6709621517670D+01 0.6762626598041D+01 + 0.6812464198680D+01 0.6858793332986D+01 0.6901294379138D+01 0.6939670034070D+01 + 0.6973646144233D+01 0.7002972410830D+01 0.7027422967990D+01 0.7046796833200D+01 + 0.7060918230061D+01 0.7069636784259D+01 0.7072827594374D+01 0.7070391179926D+01 + 0.7062253309715D+01 0.7048364714231D+01 0.7028700686483D+01 0.7003260576238D+01 + 0.6972067183121D+01 0.6935166054562D+01 0.6892624694966D+01 0.6844531692843D+01 + 0.6790995772965D+01 0.6732144780827D+01 0.6668124606899D+01 0.6599098058289D+01 + 0.6525243685473D+01 0.6446754571799D+01 0.6363837093418D+01 0.6276709657188D+01 + 0.6185601423998D+01 0.6090751024726D+01 0.5992405275866D+01 0.5890817901556D+01 + 0.5786248268476D+01 0.5678960139726D+01 0.5569220453475D+01 0.5457298131760D+01 + 0.5343462924443D+01 0.5227984292928D+01 0.5111130337809D+01 0.4993166774192D+01 + 0.4874355958030D+01 0.4754955966341D+01 0.4635219733799D+01 0.4515394247714D+01 + 0.4395719803061D+01 0.4276429318764D+01 0.4157747716089D+01 0.4039891359594D+01 + 0.3923067560758D+01 0.3807474144035D+01 0.3693299074769D+01 0.3580720148118D+01 + 0.3469904737816D+01 0.3361009603367D+01 0.3254180754011D+01 0.3149553367571D+01 + 0.3047251762116D+01 0.2947389418162D+01 0.2850069049006D+01 0.2755382716614D+01 + 0.2663411990420D+01 0.2574228146230D+01 0.2487892402405D+01 0.2404456190400D+01 + 0.2323961456713D+01 0.2246440993268D+01 0.2171918793250D+01 0.2100410429420D+01 + 0.2031923451965D+01 0.1966457802972D+01 0.1904006244666D+01 0.1844554798640D+01 + 0.1788083193345D+01 0.1734565317240D+01 0.1683969675070D+01 0.1636259844862D+01 + 0.1591394933364D+01 0.1549330027746D+01 0.1510016641546D+01 0.1473403152964D+01 + 0.1439435233770D+01 0.1408056267219D+01 0.1379207753531D+01 0.1352829701650D+01 + 0.1328861006133D+01 0.1307239808175D+01 0.1287903839946D+01 0.1270790751526D+01 + 0.1255838419882D+01 0.1242985239474D+01 0.1232170394175D+01 0.1223334110328D+01 + 0.1216417890857D+01 0.1211364730456D+01 0.1208119311934D+01 0.1206628183910D+01 + 0.1206839920052D+01 0.1208705260142D+01 0.1212177233248D+01 0.1217211263310D+01 + 0.1223765257423D+01 0.1231799677111D+01 0.1241277592815D+01 0.1252164721788D+01 + 0.1264429449524D+01 0.1278042834732D+01 0.1292978597814D+01 0.1309213092627D+01 + 0.1326725261233D+01 0.1345496571135D+01 0.1365510934358D+01 0.1386754607532D+01 + 0.1409215426363D+01 0.1433003097507D+01 0.1458223277591D+01 0.1484860699421D+01 + 0.1512902583279D+01 0.1542338542721D+01 0.1573160498496D+01 0.1605362600812D+01 + 0.1638941160170D+01 0.1673894586973D+01 0.1710223340083D+01 0.1747929884514D+01 + 7 1012 + 1 0 -1 -511.89150 + 2 0 -1 -58.80097 + 2 1 1 -50.61290 + 2 1 -2 -49.69692 + 3 0 -1 -5.52718 + 3 1 1 -3.14309 + 3 1 -2 -3.03034 + 0.2123373461549D-04 0.2173914995400D-04 0.2225659296114D-04 0.2278634977738D-04 + 0.2332871334728D-04 0.2388398358121D-04 0.2445246752083D-04 0.2503447950857D-04 + 0.2563034136106D-04 0.2624038254674D-04 0.2686494036763D-04 0.2750436014548D-04 + 0.2815899541226D-04 0.2882920810522D-04 0.2951536876657D-04 0.3021785674791D-04 + 0.3093706041946D-04 0.3167337738432D-04 0.3242721469777D-04 0.3319898909177D-04 + 0.3398912720483D-04 0.3479806581728D-04 0.3562625209215D-04 0.3647414382175D-04 + 0.3734220968012D-04 0.3823092948144D-04 0.3914079444457D-04 0.4007230746391D-04 + 0.4102598338660D-04 0.4200234929636D-04 0.4300194480406D-04 0.4402532234512D-04 + 0.4507304748402D-04 0.4614569922601D-04 0.4724387033618D-04 0.4836816766617D-04 + 0.4951921248852D-04 0.5069764083903D-04 0.5190410386721D-04 0.5313926819498D-04 + 0.5440381628400D-04 0.5569844681152D-04 0.5702387505533D-04 0.5838083328767D-04 + 0.5977007117859D-04 0.6119235620880D-04 0.6264847409228D-04 0.6413922920902D-04 + 0.6566544504782D-04 0.6722796465978D-04 0.6882765112238D-04 0.7046538801462D-04 + 0.7214207990339D-04 0.7385865284136D-04 0.7561605487667D-04 0.7741525657465D-04 + 0.7925725155197D-04 0.8114305702331D-04 0.8307371436110D-04 0.8505028966841D-04 + 0.8707387436545D-04 0.8914558578994D-04 0.9126656781168D-04 0.9343799146165D-04 + 0.9566105557602D-04 0.9793698745538D-04 0.1002670435396D-03 0.1026525100984D-03 + 0.1050947039390D-03 0.1075949731294D-03 0.1101546977394D-03 0.1127752905997D-03 + 0.1154581980775D-03 0.1182049008719D-03 0.1210169148270D-03 0.1238957917652D-03 + 0.1268431203390D-03 0.1298605269045D-03 0.1329496764137D-03 0.1361122733297D-03 + 0.1393500625619D-03 0.1426648304247D-03 0.1460584056178D-03 0.1495326602303D-03 + 0.1530895107681D-03 0.1567309192056D-03 0.1604588940629D-03 0.1642754915072D-03 + 0.1681828164816D-03 0.1721830238593D-03 0.1762783196258D-03 0.1804709620887D-03 + 0.1847632631165D-03 0.1891575894056D-03 0.1936563637785D-03 0.1982620665115D-03 + 0.2029772366947D-03 0.2078044736231D-03 0.2127464382210D-03 0.2178058545005D-03 + 0.2229855110531D-03 0.2282882625778D-03 0.2337170314442D-03 0.2392748092933D-03 + 0.2449646586752D-03 0.2507897147258D-03 0.2567531868833D-03 0.2628583606444D-03 + 0.2691085993625D-03 0.2755073460880D-03 0.2820581254518D-03 0.2887645455935D-03 + 0.2956303001344D-03 0.3026591701977D-03 0.3098550264756D-03 0.3172218313454D-03 + 0.3247636410353D-03 0.3324846078408D-03 0.3403889823939D-03 0.3484811159850D-03 + 0.3567654629401D-03 0.3652465830528D-03 0.3739291440747D-03 0.3828179242637D-03 + 0.3919178149916D-03 0.4012338234146D-03 0.4107710752045D-03 0.4205348173457D-03 + 0.4305304209971D-03 0.4407633844209D-03 0.4512393359813D-03 0.4619640372121D-03 + 0.4729433859575D-03 0.4841834195856D-03 0.4956903182785D-03 0.5074704083979D-03 + 0.5195301659314D-03 0.5318762200182D-03 0.5445153565579D-03 0.5574545219044D-03 + 0.5707008266453D-03 0.5842615494708D-03 0.5981441411326D-03 0.6123562284955D-03 + 0.6269056186847D-03 0.6418003033287D-03 0.6570484629028D-03 0.6726584711734D-03 + 0.6886388997468D-03 0.7049985227240D-03 0.7217463214642D-03 0.7388914894603D-03 + 0.7564434373277D-03 0.7744117979097D-03 0.7928064315026D-03 0.8116374312024D-03 + 0.8309151283763D-03 0.8506500982622D-03 0.8708531656989D-03 0.8915354109894D-03 + 0.9127081759015D-03 0.9343830698083D-03 0.9565719759715D-03 0.9792870579714D-03 + 0.1002540766287D-02 0.1026345845027D-02 0.1050715338824D-02 0.1075662599879D-02 + 0.1101201295181D-02 0.1127345413883D-02 0.1154109274864D-02 0.1181507534450D-02 + 0.1209555194328D-02 0.1238267609637D-02 0.1267660497252D-02 0.1297749944251D-02 + 0.1328552416593D-02 0.1360084767981D-02 0.1392364248945D-02 0.1425408516127D-02 + 0.1459235641785D-02 0.1493864123514D-02 0.1529312894196D-02 0.1565601332181D-02 + 0.1602749271697D-02 0.1640777013510D-02 0.1679705335822D-02 0.1719555505429D-02 + 0.1760349289133D-02 0.1802108965417D-02 0.1844857336390D-02 0.1888617740010D-02 + 0.1933414062589D-02 0.1979270751585D-02 0.2026212828687D-02 0.2074265903209D-02 + 0.2123456185786D-02 0.2173810502385D-02 0.2225356308647D-02 0.2278121704551D-02 + 0.2332135449417D-02 0.2387426977257D-02 0.2444026412476D-02 0.2501964585936D-02 + 0.2561273051389D-02 0.2621984102285D-02 0.2684130788965D-02 0.2747746936258D-02 + 0.2812867161465D-02 0.2879526892772D-02 0.2947762388071D-02 0.3017610754222D-02 + 0.3089109966753D-02 0.3162298890003D-02 0.3237217297741D-02 0.3313905894238D-02 + 0.3392406335837D-02 0.3472761253004D-02 0.3555014272883D-02 0.3639210042377D-02 + 0.3725394251736D-02 0.3813613658698D-02 0.3903916113173D-02 0.3996350582488D-02 + 0.4090967177209D-02 0.4187817177547D-02 0.4286953060364D-02 0.4388428526794D-02 + 0.4492298530489D-02 0.4598619306504D-02 0.4707448400838D-02 0.4818844700646D-02 + 0.4932868465127D-02 0.5049581357120D-02 0.5169046475404D-02 0.5291328387739D-02 + 0.5416493164639D-02 0.5544608413917D-02 0.5675743316002D-02 0.5809968660057D-02 + 0.5947356880904D-02 0.6087982096781D-02 0.6231920147946D-02 0.6379248636155D-02 + 0.6530046965011D-02 0.6684396381234D-02 0.6842380016839D-02 0.7004082932273D-02 + 0.7169592160503D-02 0.7338996752102D-02 0.7512387821327D-02 0.7689858593235D-02 + 0.7871504451850D-02 0.8057422989391D-02 0.8247714056607D-02 0.8442479814225D-02 + 0.8641824785540D-02 0.8845855910175D-02 0.9054682599025D-02 0.9268416790430D-02 + 0.9487173007575D-02 0.9711068417172D-02 0.9940222889430D-02 0.1017475905935D-01 + 0.1041480238936D-01 0.1066048123337D-01 0.1091192690214D-01 0.1116927373022D-01 + 0.1143265914425D-01 0.1170222373276D-01 0.1197811131760D-01 0.1226046902681D-01 + 0.1254944736912D-01 0.1284520031015D-01 0.1314788535014D-01 0.1345766360348D-01 + 0.1377469987990D-01 0.1409916276750D-01 0.1443122471744D-01 0.1477106213063D-01 + 0.1511885544620D-01 0.1547478923187D-01 0.1583905227632D-01 0.1621183768351D-01 + 0.1659334296907D-01 0.1698377015868D-01 0.1738332588869D-01 0.1779222150874D-01 + 0.1821067318670D-01 0.1863890201578D-01 0.1907713412394D-01 0.1952560078568D-01 + 0.1998453853608D-01 0.2045418928739D-01 0.2093480044805D-01 0.2142662504416D-01 + 0.2192992184360D-01 0.2244495548276D-01 0.2297199659585D-01 0.2351132194704D-01 + 0.2406321456527D-01 0.2462796388197D-01 0.2520586587156D-01 0.2579722319499D-01 + 0.2640234534617D-01 0.2702154880148D-01 0.2765515717239D-01 0.2830350136121D-01 + 0.2896691972007D-01 0.2964575821319D-01 0.3034037058244D-01 0.3105111851634D-01 + 0.3177837182251D-01 0.3252250860359D-01 0.3328391543683D-01 0.3406298755727D-01 + 0.3486012904465D-01 0.3567575301409D-01 0.3651028181063D-01 0.3736414720771D-01 + 0.3823779060956D-01 0.3913166325773D-01 0.4004622644169D-01 0.4098195171364D-01 + 0.4193932110758D-01 0.4291882736274D-01 0.4392097415138D-01 0.4494627631115D-01 + 0.4599526008193D-01 0.4706846334735D-01 0.4816643588104D-01 0.4928973959763D-01 + 0.5043894880863D-01 0.5161465048329D-01 0.5281744451445D-01 0.5404794398948D-01 + 0.5530677546647D-01 0.5659457925562D-01 0.5791200970601D-01 0.5925973549779D-01 + 0.6063843993988D-01 0.6204882127328D-01 0.6349159298001D-01 0.6496748409788D-01 + 0.6647723954103D-01 0.6802162042643D-01 0.6960140440641D-01 0.7121738600725D-01 + 0.7287037697395D-01 0.7456120662128D-01 0.7629072219118D-01 0.7805978921657D-01 + 0.7986929189166D-01 0.8172013344892D-01 0.8361323654265D-01 0.8554954363940D-01 + 0.8753001741513D-01 0.8955564115940D-01 0.9162741918654D-01 0.9374637725383D-01 + 0.9591356298698D-01 0.9813004631275D-01 0.1003969198990D+00 0.1027152996019D+00 + 0.1050863249211D+00 0.1075111594618D+00 0.1099909914051D+00 0.1125270339855D+00 + 0.1151205259766D+00 0.1177727321842D+00 0.1204849439476D+00 0.1232584796489D+00 + 0.1260946852301D+00 0.1289949347182D+00 0.1319606307590D+00 0.1349932051583D+00 + 0.1380941194317D+00 0.1412648653632D+00 0.1445069655708D+00 0.1478219740820D+00 + 0.1512114769165D+00 0.1546770926778D+00 0.1582204731535D+00 0.1618433039236D+00 + 0.1655473049771D+00 0.1693342313383D+00 0.1732058737000D+00 0.1771640590662D+00 + 0.1812106514032D+00 0.1853475522988D+00 0.1895767016304D+00 0.1939000782413D+00 + 0.1983197006251D+00 0.2028376276193D+00 0.2074559591063D+00 0.2121768367234D+00 + 0.2170024445803D+00 0.2219350099852D+00 0.2269768041788D+00 0.2321301430764D+00 + 0.2373973880172D+00 0.2427809465221D+00 0.2482832730585D+00 0.2539068698131D+00 + 0.2596542874715D+00 0.2655281260047D+00 0.2715310354636D+00 0.2776657167793D+00 + 0.2839349225700D+00 0.2903414579550D+00 0.2968881813739D+00 0.3035780054119D+00 + 0.3104138976312D+00 0.3173988814070D+00 0.3245360367687D+00 0.3318285012460D+00 + 0.3392794707188D+00 0.3468922002717D+00 0.3546700050516D+00 0.3626162611285D+00 + 0.3707344063591D+00 0.3790279412529D+00 0.3875004298396D+00 0.3961555005386D+00 + 0.4049968470283D+00 0.4140282291162D+00 0.4232534736091D+00 0.4326764751811D+00 + 0.4423011972414D+00 0.4521316727988D+00 0.4621720053237D+00 0.4724263696067D+00 + 0.4828990126121D+00 0.4935942543268D+00 0.5045164886027D+00 0.5156701839924D+00 + 0.5270598845772D+00 0.5386902107861D+00 0.5505658602051D+00 0.5626916083760D+00 + 0.5750723095830D+00 0.5877128976270D+00 0.6006183865849D+00 0.6137938715547D+00 + 0.6272445293836D+00 0.6409756193782D+00 0.6549924839961D+00 0.6693005495166D+00 + 0.6839053266899D+00 0.6988124113627D+00 0.7140274850788D+00 0.7295563156538D+00 + 0.7454047577210D+00 0.7615787532478D+00 0.7780843320207D+00 0.7949276120969D+00 + 0.8121148002200D+00 0.8296521921997D+00 0.8475461732513D+00 0.8658032182945D+00 + 0.8844298922086D+00 0.9034328500427D+00 0.9228188371772D+00 0.9425946894360D+00 + 0.9627673331456D+00 0.9833437851400D+00 0.1004331152707D+01 0.1025736633476D+01 + 0.1047567515241D+01 0.1069831175720D+01 0.1092535082243D+01 0.1115686791375D+01 + 0.1139293948457D+01 0.1163364287075D+01 0.1187905628445D+01 0.1212925880722D+01 + 0.1238433038208D+01 0.1264435180485D+01 0.1290940471443D+01 0.1317957158220D+01 + 0.1345493570030D+01 0.1373558116898D+01 0.1402159288280D+01 0.1431305651569D+01 + 0.1461005850494D+01 0.1491268603389D+01 0.1522102701342D+01 0.1553517006218D+01 + 0.1585520448546D+01 0.1618122025271D+01 0.1651330797361D+01 0.1685155887276D+01 + 0.1719606476280D+01 0.1754691801602D+01 0.1790421153434D+01 0.1826803871767D+01 + 0.1863849343063D+01 0.1901566996742D+01 0.1939966301501D+01 0.1979056761446D+01 + 0.2018847912032D+01 0.2059349315815D+01 0.2100570557999D+01 0.2142521241790D+01 + 0.2185210983528D+01 0.2228649407614D+01 0.2272846141215D+01 0.2317810808747D+01 + 0.2363553026124D+01 0.2410082394775D+01 0.2457408495423D+01 0.2505540881617D+01 + 0.2554489073015D+01 0.2604262548407D+01 0.2654870738488D+01 0.2706323018355D+01 + 0.2758628699743D+01 0.2811797022979D+01 0.2865837148659D+01 0.2920758149043D+01 + 0.2976568999160D+01 0.3033278567615D+01 0.3090895607108D+01 0.3149428744640D+01 + 0.3208886471423D+01 0.3269277132479D+01 0.3330608915918D+01 0.3392889841912D+01 + 0.3456127751341D+01 0.3520330294118D+01 0.3585504917195D+01 0.3651658852234D+01 + 0.3718799102956D+01 0.3786932432154D+01 0.3856065348377D+01 0.3926204092282D+01 + 0.3997354622651D+01 0.4069522602076D+01 0.4142713382310D+01 0.4216931989288D+01 + 0.4292183107814D+01 0.4368471065927D+01 0.4445799818928D+01 0.4524172933100D+01 + 0.4603593569097D+01 0.4684064465021D+01 0.4765587919192D+01 0.4848165772611D+01 + 0.4931799391130D+01 0.5016489647323D+01 0.5102236902085D+01 0.5189040985952D+01 + 0.5276901180158D+01 0.5365816197444D+01 0.5455784162617D+01 0.5546802592894D+01 + 0.5638868378017D+01 0.5731977760181D+01 0.5826126313769D+01 0.5921308924927D+01 + 0.6017519770983D+01 0.6114752299744D+01 0.6212999208681D+01 0.6312252424025D+01 + 0.6412503079799D+01 0.6513741496818D+01 0.6615957161666D+01 0.6719138705689D+01 + 0.6823273884037D+01 0.6928349554769D+01 0.7034351658067D+01 0.7141265195588D+01 + 0.7249074209985D+01 0.7357761764637D+01 0.7467309923627D+01 0.7577699732003D+01 + 0.7688911196366D+01 0.7800923265826D+01 0.7913713813378D+01 0.8027259617727D+01 + 0.8141536345630D+01 0.8256518534789D+01 0.8372179577355D+01 0.8488491704090D+01 + 0.8605425969248D+01 0.8722952236222D+01 0.8841039164025D+01 0.8959654194655D+01 + 0.9078763541413D+01 0.9198332178230D+01 0.9318323830066D+01 0.9438700964464D+01 + 0.9559424784293D+01 0.9680455221780D+01 0.9801750933887D+01 0.9923269299099D+01 + 0.1004496641570D+02 0.1016679710163D+02 0.1028871489593D+02 0.1041067206198D+02 + 0.1053261959239D+02 0.1065450721594D+02 0.1077628340626D+02 0.1089789539267D+02 + 0.1101928917306D+02 0.1114040952889D+02 0.1126120004259D+02 0.1138160311709D+02 + 0.1150155999788D+02 0.1162101079752D+02 0.1173989452270D+02 0.1185814910389D+02 + 0.1197571142774D+02 0.1209251737221D+02 0.1220850184455D+02 0.1232359882222D+02 + 0.1243774139668D+02 0.1255086182033D+02 0.1266289155645D+02 0.1277376133233D+02 + 0.1288340119558D+02 0.1299174057364D+02 0.1309870833671D+02 0.1320423286383D+02 + 0.1330824211245D+02 0.1341066369131D+02 0.1351142493681D+02 0.1361045299271D+02 + 0.1370767489335D+02 0.1380301765027D+02 0.1389640834224D+02 0.1398777420882D+02 + 0.1407704274716D+02 0.1416414181234D+02 0.1424899972093D+02 0.1433154535791D+02 + 0.1441170828680D+02 0.1448941886294D+02 0.1456460834990D+02 0.1463720903887D+02 + 0.1470715437095D+02 0.1477437906225D+02 0.1483881923166D+02 0.1490041253114D+02 + 0.1495909827839D+02 0.1501481759178D+02 0.1506751352732D+02 0.1511713121747D+02 + 0.1516361801165D+02 0.1520692361818D+02 0.1524700024742D+02 0.1528380275595D+02 + 0.1531728879140D+02 0.1534741893776D+02 0.1537415686084D+02 0.1539746945363D+02 + 0.1541732698111D+02 0.1543370322439D+02 0.1544657562364D+02 0.1545592541956D+02 + 0.1546173779302D+02 0.1546400200242D+02 0.1546271151843D+02 0.1545786415570D+02 + 0.1544946220111D+02 0.1543751253809D+02 0.1542202676661D+02 0.1540302131844D+02 + 0.1538051756708D+02 0.1535454193202D+02 0.1532512597682D+02 0.1529230650045D+02 + 0.1525612562157D+02 0.1521663085508D+02 0.1517387518057D+02 0.1512791710213D+02 + 0.1507882069905D+02 0.1502665566690D+02 0.1497149734847D+02 0.1491342675424D+02 + 0.1485253057170D+02 0.1478890116319D+02 0.1472263655178D+02 0.1465384039476D+02 + 0.1458262194423D+02 0.1450909599456D+02 0.1443338281613D+02 0.1435560807511D+02 + 0.1427590273888D+02 0.1419440296685D+02 0.1411124998625D+02 0.1402658995277D+02 + 0.1394057379573D+02 0.1385335704764D+02 0.1376509965795D+02 0.1367596579089D+02 + 0.1358612360737D+02 0.1349574503081D+02 0.1340500549696D+02 0.1331408368786D+02 + 0.1322316124986D+02 0.1313242249599D+02 0.1304205409292D+02 0.1295224473262D+02 + 0.1286318478926D+02 0.1277506596148D+02 0.1268808090072D+02 0.1260242282594D+02 + 0.1251828512526D+02 0.1243586094535D+02 0.1235534276899D+02 0.1227692198172D+02 + 0.1220078842830D+02 0.1212712995982D+02 0.1205613197253D+02 0.1198797693913D+02 + 0.1192284393379D+02 0.1186090815186D+02 0.1180234042546D+02 0.1174730673615D+02 + 0.1169596772603D+02 0.1164847820834D+02 0.1160498667924D+02 0.1156563483188D+02 + 0.1153055707436D+02 0.1149988005301D+02 0.1147372218250D+02 0.1145219318434D+02 + 0.1143539363525D+02 0.1142341452711D+02 0.1141633683999D+02 0.1141423112993D+02 + 0.1141715713298D+02 0.1142516338731D+02 0.1143828687474D+02 0.1145655268355D+02 + 0.1147997369390D+02 0.1150855028761D+02 0.1154227008374D+02 0.1158110770138D+02 + 0.1162502455129D+02 0.1167396865756D+02 0.1172787451079D+02 0.1178666295396D+02 + 0.1185024110228D+02 0.1191850229803D+02 0.1199132610159D+02 0.1206857831946D+02 + 0.1215011107019D+02 0.1223576288907D+02 0.1232535887199D+02 0.1241871085933D+02 + 0.1251561765997D+02 0.1261586531600D+02 0.1271922740805D+02 0.1282546540151D+02 + 0.1293432903330D+02 0.1304555673916D+02 0.1315887612096D+02 0.1327400445348D+02 + 0.1339064923005D+02 0.1350850874625D+02 0.1362727272054D+02 0.1374662295087D+02 + 0.1386623400591D+02 0.1398577394943D+02 0.1410490509638D+02 0.1422328479880D+02 + 0.1434056625987D+02 0.1445639937388D+02 0.1457043159027D+02 0.1468230879914D+02 + 0.1479167623614D+02 0.1489817940404D+02 0.1500146500841D+02 0.1510118190471D+02 + 0.1519698205391D+02 0.1528852148379D+02 0.1537546125281D+02 0.1545746841364D+02 + 0.1553421697307D+02 0.1560538884523D+02 0.1567067479483D+02 0.1572977536717D+02 + 0.1578240180176D+02 0.1582827692612D+02 0.1586713602663D+02 0.1589872769311D+02 + 0.1592281463392D+02 0.1593917445849D+02 0.1594760042409D+02 0.1594790214378D+02 + 0.1593990625272D+02 0.1592345702984D+02 0.1589841697221D+02 0.1586466731948D+02 + 0.1582210852585D+02 0.1577066067732D+02 0.1571026385193D+02 0.1564087842120D+02 + 0.1556248529064D+02 0.1547508607802D+02 0.1537870322780D+02 0.1527338006062D+02 + 0.1515918075676D+02 0.1503619027308D+02 0.1490451419267D+02 0.1476427850715D+02 + 0.1461562933169D+02 0.1445873255288D+02 0.1429377341010D+02 0.1412095601137D+02 + 0.1394050278444D+02 0.1375265386499D+02 0.1355766642312D+02 0.1335581393054D+02 + 0.1314738537038D+02 0.1293268439219D+02 0.1271202841511D+02 0.1248574768189D+02 + 0.1225418426740D+02 0.1201769104500D+02 0.1177663061449D+02 0.1153137419578D+02 + 0.1128230049248D+02 0.1102979452961D+02 0.1077424647032D+02 0.1051605041603D+02 + 0.1025560319513D+02 0.9993303145083D+01 0.9729548892983D+01 0.9464738139829D+01 + 0.9199266453606D+01 0.8933526076402D+01 0.8667904750745D+01 0.8402784570301D+01 + 0.8138540859996D+01 0.7875541090527D+01 0.7614143832090D+01 0.7354697751983D+01 + 0.7097540660550D+01 0.6842998609696D+01 0.6591385047920D+01 0.6343000035605D+01 + 0.6098129523858D+01 0.5857044699944D+01 0.5620001401934D+01 0.5387239604814D+01 + 0.5158982979846D+01 0.4935438528573D+01 0.4716796292366D+01 0.4503229137976D+01 + 0.4294892619056D+01 0.4091924913152D+01 0.3894446833193D+01 0.3702561912045D+01 + 0.3516356558237D+01 0.3335900280537D+01 0.3161245978670D+01 0.2992430297065D+01 + 0.2829474038194D+01 0.2672382631762D+01 0.2521146655720D+01 0.2375742404881D+01 + 0.2236132502695D+01 0.2102266551639D+01 0.1974081817541D+01 0.1851503943111D+01 + 0.1734447685940D+01 0.1622817676200D+01 0.1516509189368D+01 0.1415408929331D+01 + 0.1319395817360D+01 0.1228341782531D+01 0.1142112549373D+01 0.1060568418635D+01 + 0.9835650373019D+00 0.9109541541726D+00 0.8425843575459D+00 0.7783017917968D+00 + 0.7179508498817D+00 0.6613748390683D+00 0.6084166174653D+00 0.5589191992012D+00 + 0.5127263263911D+00 0.4696830063190D+00 0.4296360125529D+00 0.3924343490009D+00 + 0.3579296762027D+00 0.3259766994340D+00 0.2964335184742D+00 0.2691619391536D+00 + 0.2440277470488D+00 0.2209009439361D+00 0.1996559478365D+00 0.1801717576938D+00 + 0.1623320839184D+00 0.1460254461990D+00 0.1311452401368D+00 0.1175897743854D+00 + 0.1052622800912D+00 0.9407089451527D-01 0.8392862078550D-01 0.7475326577690D-01 + 0.6646735814128D-01 0.5899804851766D-01 0.5227699394346D-01 0.4624022845899D-01 + 0.4082802185442D-01 0.3598472845105D-01 0.3165862773800D-01 0.2780175860384D-01 + 0.2436974881146D-01 0.2132164126495D-01 0.1861971851162D-01 0.1622932681167D-01 + 0.1411870099424D-01 0.1225879120292D-01 0.1062309251766D-01 0.9187478324824D-02 + 0.7930038194170D-02 0.6830920911119D-02 0.5872183206948D-02 0.5037644628161D-02 + 0.4312748890659D-02 0.3684431974697D-02 0.3140997133459D-02 0.2671996911721D-02 + 0.2268122201696D-02 0.1921098300832D-02 0.1623587881022D-02 0.1369100730387D-02 + 0.1151910087150D-02 0.9669753500508D-03 0.8098709208516D-03 0.6767209113939D-03 + 0.5641394300578D-03 0.4691761498429D-03 0.3892668522563D-03 0.3221886372696D-03 + 0.2660194893607D-03 0.2191018926233D-03 0.1800101936858D-03 0.1475214192933D-03 + 0.1205892654847D-03 0.9832098695562D-04 0.7995692809159D-04 0.6485245095860D-04 + 0.5246202996510D-04 0.4232529769133D-04 0.3405484129524D-04 0.2732556374477D-04 + 0.2186543872353D-04 0.1744750226736D-04 0.1388293789508D-04 0.1101512510421D-04 + 0.8714533541124D-05 0.6874356872787D-05 0.5406791351919D-05 0.4239874261002D-05 + 0.3314806839624D-05 0.2583694952262D-05 0.2007648657315D-05 0.1555189018603D-05 + 0.1200916989437D-05 0.9244050332163D-06 0.7092773630705D-06 0.5424493283134D-06 + 0.4135005904089D-06 0.3141603589352D-06 0.2378861413798D-06 0.1795202409555D-06 + 0.1350106538765D-06 0.1011851095086D-06 0.7556879909866D-07 0.5623788451178D-07 + 0.4170219815814D-07 0.3081166707088D-07 0.2268194336078D-07 0.1663552297805D-07 + 0.1215530542863D-07 0.8848107127806D-08 0.6416106613217D-08 0.4634585104140D-08 + 0.3334643304910D-08 0.2389835688104D-08 0.1705876062949D-08 0.1212741020005D-08 + 0.8586376559590D-09 0.6054146003728D-09 0.4250856698627D-09 0.2972075512731D-09 + 0.2069101606973D-09 0.1434236365115D-09 0.9898160505409D-10 0.6800804519963D-10 + 0.4651712787494D-10 0.3167310042586D-10 0.2146695649341D-10 0.1448079937139D-10 + 0.9722622861678D-11 0.6496070631129D-11 0.4319651023999D-11 0.2858591661735D-11 + 0.1882503214946D-11 0.1233598363270D-11 0.8043412065319D-12 0.5218060130221D-12 + 0.3367856512696D-12 0.2162455335843D-12 0.1381220475631D-12 0.8775552000331D-13 diff --git a/Test/Fe16/WLrestart.jsn b/Test/Fe16/WLrestart.jsn new file mode 100644 index 000000000..50fb145cf --- /dev/null +++ b/Test/Fe16/WLrestart.jsn @@ -0,0 +1,1862 @@ +{ +"xMin" : 6.95848523e-01, +"xMax" : 9.72584852e+00, +"nX" : 903, +"kernelType" : "None", +"gamma" : 1.00000000e+00, +"accept" : 8, +"acceptSinceLastChange" : 8, +"reject" : 0, +"gammaFinal" : 1.00000000e-06, +"changeMode" : 2, +"flatnessCriterion" : 7.50000000e-01, +"histogramMinimum" : 1.00000000e+00, +"updatesPerBin" : 100, +"flipPerUpdate" : 1, +"updateCycle" : 10, +"globalUpdate.frequency" : 0, +"globalUpdate.changes" : 0, +"globalUpdate.kappa" : 1.00000000e+00, +"globalUpdate.lambda" : 1.00000000e+00, +"globalUpdate.omega" : 5.00000000e-01, +"dos" : [ +1.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +1.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +1.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +1.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +2.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +2.00000000e+00, +0.00000000e+00 +], +"histo" : [ +1.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +1.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +1.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +1.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +2.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +2.00000000e+00 +], +"rngState" : "4132175277 780088327 3409462821 1036518241 1834958505 3048448173 161811569 618488316 44795092 3918322701 1924681712 3239478144 383254043 4042306580 2146983041 3992780527 3518029708 3545545436 3901231469 1896136409 2028528556 2339662006 501326714 2060962201 2502746480 561575027 581893337 3393774360 1778912547 3626131687 2175155826 319853231 986875531 819755096 2915734330 2688355739 3482074849 2736559 2296975761 1029741190 2876812646 690154749 579200347 4027461746 1285330465 2701024045 4117700889 759495121 3332270341 2313004527 2277067795 4131855432 2722057515 1264804546 3848622725 2211267957 4100593547 959123777 2130745407 3194437393 486673947 1377371204 17472727 352317554 3955548058 159652094 1232063192 3835177280 49423123 3083993636 733092 2120519771 2573409834 1112952433 3239502554 761045320 1087580692 2540165110 641058802 1792435497 2261799288 1579184083 627146892 2165744623 2200142389 2167590760 2381418376 1793358889 3081659520 1663384067 2009658756 2689600308 739136266 2304581039 3529067263 591360555 525209271 3131882996 294230224 2076220115 3113580446 1245621585 1386885462 3203270426 123512128 12350217 354956375 4282398238 3356876605 3888857667 157639694 2616064085 1563068963 2762125883 4045394511 4180452559 3294769488 1684529556 1002945951 3181438866 22506664 691783457 2685221343 171579916 3878728600 2475806724 2030324028 3331164912 1708711359 1970023127 2859691344 2588476477 2748146879 136111222 2967685492 909517429 2835297809 3206906216 3186870716 341264097 2542035121 3353277068 548223577 3170936588 1678403446 297435620 2337555430 466603495 1132321815 1208589219 696392160 894244439 2562678859 470224582 3306867480 201364898 2075966438 1767227936 2929737987 3674877796 2654196643 3692734598 3528895099 2796780123 3048728353 842329300 191554730 2922459673 3489020079 3979110629 1022523848 2202932467 3583655201 3565113719 587085778 4176046313 3013713762 950944241 396426791 3784844662 3477431613 3594592395 2782043838 3392093507 3106564952 2829419931 1358665591 2206918825 3170783123 31522386 2988194168 1782249537 1105080928 843500134 1225290080 1521001832 3605886097 2802786495 2728923319 3996284304 903417639 1171249804 1020374987 2824535874 423621996 1988534473 2493544470 1008604435 1756003503 1488867287 1386808992 732088248 1780630732 2482101014 976561178 1543448953 2602866064 2021139923 1952599828 2360242564 2117959962 2753061860 2388623612 4138193781 2962920654 2284970429 766920861 3457264692 2879611383 815055854 2332929068 1254853997 3740375268 3799380844 4091048725 2006331129 1982546212 686850534 1907447564 2682801776 2780821066 998290361 1342433871 4195430425 607905174 3902331779 2454067926 1708133115 1170874362 2008609376 3260320415 2211196135 433538229 2728786374 2189520818 262554063 1182318347 3710237267 1221022450 715966018 2417068910 2591870721 2870691989 3418190842 4238214053 1540704231 1575580968 2095917976 4078310857 2313532447 2110690783 4056346629 4061784526 1123218514 551538993 597148360 4120175196 3581618160 3181170517 422862282 3227524138 1713114790 662317149 1230418732 928171837 1324564878 1928816105 1786535431 2878099422 3290185549 539474248 1657512683 552370646 1671741683 3655312128 1552739510 2605208763 1441755014 181878989 3124053868 1447103986 3183906156 1728556020 3502241336 3055466967 1013272474 818402132 1715099063 2900113506 397254517 4194863039 1009068739 232864647 2540223708 2608288560 2415367765 478404847 3455100648 3182600021 2115988978 434269567 4117179324 3461774077 887256537 3545801025 286388911 3451742129 1981164769 786667016 3310123729 3097811076 2224235657 2959658883 3370969234 2514770915 3345656436 2677010851 2206236470 271648054 2342188545 4292848611 3646533909 3754009956 3803931226 4160647125 1477814055 4043852216 1876372354 3133294443 3871104810 3177020907 2074304428 3479393793 759562891 164128153 1839069216 2114162633 3989947309 3611054956 1333547922 835429831 494987340 171987910 1252001001 370809172 3508925425 2535703112 1276855041 1922855120 835673414 3030664304 613287117 171219893 3423096126 3376881639 2287770315 1658692645 1262815245 3957234326 1168096164 2968737525 2655813712 2132313144 3976047964 326516571 353088456 3679188938 3205649712 2654036126 1249024881 880166166 691800469 2229503665 1673458056 4032208375 1851778863 2563757330 376742205 1794655231 340247333 1505873033 396524441 879666767 3335579166 3260764261 3335999539 506221798 4214658741 975887814 2080536343 3360539560 571586418 138896374 4234352651 2737620262 3928362291 1516365296 38056726 3599462320 3585007266 3850961033 471667319 1536883193 2310166751 1861637689 2530999841 4139843801 2710569485 827578615 2012334720 2907369459 3029312804 2820112398 1965028045 35518606 2478379033 643747771 1924139484 4123405127 3811735531 3429660832 3285177704 1948416081 1311525291 1183517742 1739192232 3979815115 2567840007 4116821529 213304419 4125718577 1473064925 2442436592 1893310111 4195361916 3747569474 828465101 2991227658 750582866 1205170309 1409813056 678418130 1171531016 3821236156 354504587 4202874632 3882511497 1893248677 1903078632 26340130 2069166240 3657122492 3725758099 831344905 811453383 3447711422 2434543565 4166886888 3358210805 4142984013 2988152326 3527824853 982082992 2809155763 190157081 3340214818 2365432395 2548636180 2894533366 3474657421 2372634704 2845748389 43024175 2774226648 1987702864 3186502468 453610222 4204736567 1392892630 2471323686 2470534280 3541393095 4269885866 3909911300 759132955 1482612480 667715263 1795580598 2337923983 3390586366 581426223 1515718634 476374295 705213300 363062054 2084697697 2407503428 2292957699 2426213835 2199989172 1987356470 4026755612 2147252133 270400031 1367820199 2369854699 2844269403 79981964 2601187879 3919438689 2270374771 3254473187 705526435 752899028 4259895275 1635503293 287311810 3348146311 587101971 1133963260 197444494 1569747226 2853653046 3654449492 3823320007 1939491435 191871982 2550916200 2586577334 1836795533 2550787344 3774101499 499856526 4035163043 969324510 502882529 3747915135 3677962142 4247339488 668043123 3114378363 585508492 542098765 4155704470 3660917119 126230230 1522675206 153049183 1637257449 3281868928 979462891 1058287769 61525060 3887730846 3905100104 1956723994 4085220955 3202629445 4112745420 877772572 3341645661 331737137 2270305335 159419296 2503600762 451751822 1083485811 1445113017 150608331 422828708 2507709208 3804045526 2086909439 4090458745 1662894632 2371871123 3266028938 3412874573 1564584271 4167008239 319160793 1225298391 4161956981 3585990452 2573113091 1630884103 997591457 996494329 2686829642 3651385850 300660150 251233608 2731448254 3271745554 1133669415 2602763402 3609598910 3119890150 2068448659 2512941629 2192028056 3536672045 1605585867 987929371 ", +"evecs" : [ +[ +1.19060707e-01, -2.71481089e-01, 9.55051081e-01, +5.27080857e-01, 6.56747366e-01, 5.39322415e-01 +], +[ +-9.21623244e-01, 3.72515596e-01, 1.08824294e-01, +2.24186680e-01, -9.11832148e-01, -3.43951256e-01 +] +], +"oldSpin" : [ +[ 1.59705918e-01, -4.03035293e-01, 9.01141816e-01], +[ -9.27376421e-01, -1.49101761e-01, -3.43135015e-01] +], +"lastChange" : [ +0, +0 +], +"position" : [ +2.76542726e+00, +6.94551768e-01 +], +"magnetizationAtPosition" : [ +0.00000000e+00, +0.00000000e+00 +], +"stepsSinceLastHistogramUpdate" : 0, +"numberOfUpdatesSinceLastBoost" : 8, +"modificationFactorChanges" : 0, +"cycleCount" : 8 +} diff --git a/Test/Fe16/i_lsms b/Test/Fe16/i_lsms new file mode 100644 index 000000000..4e5e514ff --- /dev/null +++ b/Test/Fe16/i_lsms @@ -0,0 +1,155 @@ +systemid="fe2" +system_title = "Iron test for LSMS 3" +pot_in_type=1 +-- write potential out. Use this only when xRepeat, yRepeat and zRepeat = 1 +pot_out_type=1 +num_atoms=2 +nspin=3 +mtasa=0 + +iprint=0 +default_iprint=-1 +print_node=0 +-- istop="buildKKRMatrix" +istop="main" + +nscf=2 + +xRepeat=2 +yRepeat=2 +zRepeat=2 +makeTypesUnique=1 + +-- energyContour = {npts=1,grid=0,ebot=-0.2,etop=0.0,eitop=0.825,eibot=0.1} +-- energyContour = {npts=11,grid=2,ebot=-0.3,etop=0.0,eitop=0.825,eibot=0.025,maxGroupSize=5} +energyContour = {npts=31,grid=2,ebot=-0.3,etop=0.0,eitop=0.825,eibot=0.0025} + +a = 5.42 + +bravais = {} +bravais[1]={a,0,0} +bravais[2]={0,a,0} +bravais[3]={0,0,a} + +-- site_default={lmax=3,rLIZ=12.5,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} +-- site_default={lmax=3,rLIZ=8.5,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} +-- site_default={lmax=3,rLIZ=5.0,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} +site_default={lmax=3,rLIZ=0.1,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} + +-- Possible choices of mixing parameters +-- quantity : charge, potential, moment_magnitude, moment_direction, noQuantity +-- algorithm : simple, broyden, noAlgorithm +-- mixing={} +--mixing = { {quantity = "charge", algorithm = "simple", mixing_parameter = 0.05} } +mixing = { {quantity = "potential", algorithm = "simple", mixing_parameter = 0.0} } +--mixing = { {quantity = "potential", algorithm = "broyden", mixing_parameter = 0.05}, {quantity = "moment_magnitude", algorithm = "noAlgorithm", mixing_parameter = 0.01} } + +numberOfMixQuantities = 0 + +for k,v in pairs(mixing) do + numberOfMixQuantities = numberOfMixQuantities + 1 +end + +--[[ +print("Site defaults:") +for k,v in pairs(site_default) do + print(k," : ",v) +end +--]] + +site = {} +for i =1,num_atoms do site[i]={} end + +site[1].pos={0,0,0} +site[1].evec={0,0,1} +site[2].pos={0.5*a,0.5*a,0.5*a} +site[2].evec={0,0,1} + +-- set site defaults +for i =1,num_atoms do + for k,v in pairs(site_default) do + if(site[i][k]==nil) then site[i][k]=v end + end +end + + +--[[ +function deepcopy(t) +if type(t) ~= 'table' then return t end +local mt = getmetatable(t) +local res = {} +for k,v in pairs(t) do +if type(v) == 'table' then +v = deepcopy(v) +end +res[k] = v +end +-- setmetatable(res,mt) +return res +end + + +-- repeat nx*ny*nz times +ntemp=num_atoms +-- ix==1 first: +ix=0 +-- iy==1 +iy=0 +for iz=1,nz-1 do + for ib=1,num_atoms do + ntemp=ntemp+1 + site[ntemp]={pos={0,0,0},evec={0,0,1}} + site[ntemp].pos[1]=site[ib].pos[1]+bravais[1][1]*ix+bravais[2][1]*iy+bravais[3][1]*iz + site[ntemp].pos[2]=site[ib].pos[2]+bravais[1][2]*ix+bravais[2][2]*iy+bravais[3][2]*iz + site[ntemp].pos[3]=site[ib].pos[3]+bravais[1][3]*ix+bravais[2][3]*iy+bravais[3][3]*iz + site[ntemp].evec[1]=site[ib].evec[1] + site[ntemp].evec[2]=site[ib].evec[2] + site[ntemp].evec[3]=site[ib].evec[3] + site[ntemp].type=ib + end +end +-- iy!=1 +for iy =1,ny-1 do + for iz=0,nz-1 do + for ib=1,num_atoms do + ntemp=ntemp+1 + site[ntemp]={pos={0,0,0},evec={0,0,1}} + site[ntemp].pos[1]=site[ib].pos[1]+bravais[1][1]*ix+bravais[2][1]*iy+bravais[3][1]*iz + site[ntemp].pos[2]=site[ib].pos[2]+bravais[1][2]*ix+bravais[2][2]*iy+bravais[3][2]*iz + site[ntemp].pos[3]=site[ib].pos[3]+bravais[1][3]*ix+bravais[2][3]*iy+bravais[3][3]*iz + site[ntemp].evec[1]=site[ib].evec[1] + site[ntemp].evec[2]=site[ib].evec[2] + site[ntemp].evec[3]=site[ib].evec[3] + site[ntemp].type=ib + end + end +end +-- ix != 1 +for ix=1,nx-1 do + for iy =0,ny-1 do + for iz=0,nz-1 do + for ib=1,num_atoms do + ntemp=ntemp+1 + site[ntemp]={pos={0,0,0},evec={0,0,1}} + site[ntemp].pos[1]=site[ib].pos[1]+bravais[1][1]*ix+bravais[2][1]*iy+bravais[3][1]*iz + site[ntemp].pos[2]=site[ib].pos[2]+bravais[1][2]*ix+bravais[2][2]*iy+bravais[3][2]*iz + site[ntemp].pos[3]=site[ib].pos[3]+bravais[1][3]*ix+bravais[2][3]*iy+bravais[3][3]*iz + site[ntemp].evec[1]=site[ib].evec[1] + site[ntemp].evec[2]=site[ib].evec[2] + site[ntemp].evec[3]=site[ib].evec[3] + site[ntemp].type=ib + end + end + end +end +num_atoms=ntemp +bravais[1][1]=bravais[1][1]*nx +bravais[1][2]=bravais[1][2]*nx +bravais[1][3]=bravais[1][3]*nx +bravais[2][1]=bravais[2][1]*ny +bravais[2][2]=bravais[2][2]*ny +bravais[2][3]=bravais[2][3]*ny +bravais[3][1]=bravais[3][1]*nz +bravais[3][2]=bravais[3][2]*nz +bravais[3][3]=bravais[3][3]*nz +--]] diff --git a/Test/Fe16/v_fe2.0 b/Test/Fe16/v_fe2.0 new file mode 100755 index 000000000..f3c4e967f --- /dev/null +++ b/Test/Fe16/v_fe2.0 @@ -0,0 +1,1542 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Fe. + 2 0.0000000000000D+00 + LSMS: xx z= 26. xvalws= 5.22926 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728400909D+02-0.5199725115555D+02-0.5199721790459D+02-0.5199718425142D+02 +-0.5199715019116D+02-0.5199711571889D+02-0.5199708082964D+02-0.5199704551834D+02 +-0.5199700977990D+02-0.5199697360915D+02-0.5199693700086D+02-0.5199689994973D+02 +-0.5199686245042D+02-0.5199682449748D+02-0.5199678608545D+02-0.5199674720876D+02 +-0.5199670786180D+02-0.5199666803887D+02-0.5199662773421D+02-0.5199658694201D+02 +-0.5199654565635D+02-0.5199650387127D+02-0.5199646158073D+02-0.5199641877860D+02 +-0.5199637545872D+02-0.5199633161480D+02-0.5199628724051D+02-0.5199624232942D+02 +-0.5199619687506D+02-0.5199615087084D+02-0.5199610431012D+02-0.5199605718616D+02 +-0.5199600949214D+02-0.5199596122116D+02-0.5199591236626D+02-0.5199586292036D+02 +-0.5199581287632D+02-0.5199576222688D+02-0.5199571096474D+02-0.5199565908248D+02 +-0.5199560657259D+02-0.5199555342748D+02-0.5199549963947D+02-0.5199544520078D+02 +-0.5199539010352D+02-0.5199533433975D+02-0.5199527790139D+02-0.5199522078028D+02 +-0.5199516296816D+02-0.5199510445666D+02-0.5199504523733D+02-0.5199498530160D+02 +-0.5199492464081D+02-0.5199486324617D+02-0.5199480110883D+02-0.5199473821977D+02 +-0.5199467456990D+02-0.5199461015004D+02-0.5199454495085D+02-0.5199447896290D+02 +-0.5199441217666D+02-0.5199434458246D+02-0.5199427617052D+02-0.5199420693096D+02 +-0.5199413685375D+02-0.5199406592876D+02-0.5199399414573D+02-0.5199392149428D+02 +-0.5199384796390D+02-0.5199377354396D+02-0.5199369822368D+02-0.5199362199218D+02 +-0.5199354483843D+02-0.5199346675127D+02-0.5199338771940D+02-0.5199330773139D+02 +-0.5199322677567D+02-0.5199314484053D+02-0.5199306191412D+02-0.5199297798443D+02 +-0.5199289303934D+02-0.5199280706654D+02-0.5199272005361D+02-0.5199263198797D+02 +-0.5199254285685D+02-0.5199245264737D+02-0.5199236134649D+02-0.5199226894099D+02 +-0.5199217541751D+02-0.5199208076251D+02-0.5199198496230D+02-0.5199188800302D+02 +-0.5199178987064D+02-0.5199169055096D+02-0.5199159002963D+02-0.5199148829207D+02 +-0.5199138532359D+02-0.5199128110928D+02-0.5199117563407D+02-0.5199106888269D+02 +-0.5199096083969D+02-0.5199085148944D+02-0.5199074081613D+02-0.5199062880373D+02 +-0.5199051543604D+02-0.5199040069664D+02-0.5199028456895D+02-0.5199016703615D+02 +-0.5199004808124D+02-0.5198992768700D+02-0.5198980583600D+02-0.5198968251063D+02 +-0.5198955769302D+02-0.5198943136512D+02-0.5198930350863D+02-0.5198917410506D+02 +-0.5198904313569D+02-0.5198891058155D+02-0.5198877642345D+02-0.5198864064200D+02 +-0.5198850321751D+02-0.5198836413012D+02-0.5198822335968D+02-0.5198808088582D+02 +-0.5198793668793D+02-0.5198779074512D+02-0.5198764303627D+02-0.5198749354000D+02 +-0.5198734223467D+02-0.5198718909837D+02-0.5198703410894D+02-0.5198687724393D+02 +-0.5198671848065D+02-0.5198655779610D+02-0.5198639516703D+02-0.5198623056988D+02 +-0.5198606398084D+02-0.5198589537577D+02-0.5198572473026D+02-0.5198555201962D+02 +-0.5198537721883D+02-0.5198520030257D+02-0.5198502124524D+02-0.5198484002091D+02 +-0.5198465660333D+02-0.5198447096595D+02-0.5198428308188D+02-0.5198409292391D+02 +-0.5198390046450D+02-0.5198370567579D+02-0.5198350852955D+02-0.5198330899725D+02 +-0.5198310704998D+02-0.5198290265850D+02-0.5198269579318D+02-0.5198248642408D+02 +-0.5198227452087D+02-0.5198206005285D+02-0.5198184298896D+02-0.5198162329776D+02 +-0.5198140094741D+02-0.5198117590571D+02-0.5198094814005D+02-0.5198071761744D+02 +-0.5198048430449D+02-0.5198024816738D+02-0.5198000917191D+02-0.5197976728344D+02 +-0.5197952246692D+02-0.5197927468690D+02-0.5197902390745D+02-0.5197877009224D+02 +-0.5197851320449D+02-0.5197825320698D+02-0.5197799006201D+02-0.5197772373146D+02 +-0.5197745417673D+02-0.5197718135875D+02-0.5197690523796D+02-0.5197662577437D+02 +-0.5197634292744D+02-0.5197605665620D+02-0.5197576691913D+02-0.5197547367423D+02 +-0.5197517687900D+02-0.5197487649041D+02-0.5197457246489D+02-0.5197426475838D+02 +-0.5197395332627D+02-0.5197363812338D+02-0.5197331910403D+02-0.5197299622195D+02 +-0.5197266943031D+02-0.5197233868173D+02-0.5197200392824D+02-0.5197166512128D+02 +-0.5197132221174D+02-0.5197097514984D+02-0.5197062388528D+02-0.5197026836709D+02 +-0.5196990854370D+02-0.5196954436291D+02-0.5196917577189D+02-0.5196880271716D+02 +-0.5196842514461D+02-0.5196804299945D+02-0.5196765622622D+02-0.5196726476881D+02 +-0.5196686857041D+02-0.5196646757354D+02-0.5196606171998D+02-0.5196565095085D+02 +-0.5196523520651D+02-0.5196481442664D+02-0.5196438855015D+02-0.5196395751522D+02 +-0.5196352125928D+02-0.5196307971901D+02-0.5196263283028D+02-0.5196218052823D+02 +-0.5196172274718D+02-0.5196125942066D+02-0.5196079048138D+02-0.5196031586126D+02 +-0.5195983549135D+02-0.5195934930191D+02-0.5195885722231D+02-0.5195835918107D+02 +-0.5195785510585D+02-0.5195734492343D+02-0.5195682855969D+02-0.5195630593961D+02 +-0.5195577698725D+02-0.5195524162577D+02-0.5195469977736D+02-0.5195415136330D+02 +-0.5195359630387D+02-0.5195303451841D+02-0.5195246592528D+02-0.5195189044181D+02 +-0.5195130798435D+02-0.5195071846824D+02-0.5195012180777D+02-0.5194951791619D+02 +-0.5194890670569D+02-0.5194828808741D+02-0.5194766197137D+02-0.5194702826653D+02 +-0.5194638688071D+02-0.5194573772064D+02-0.5194508069188D+02-0.5194441569885D+02 +-0.5194374264482D+02-0.5194306143187D+02-0.5194237196087D+02-0.5194167413149D+02 +-0.5194096784220D+02-0.5194025299021D+02-0.5193952947146D+02-0.5193879718066D+02 +-0.5193805601119D+02-0.5193730585519D+02-0.5193654660341D+02-0.5193577814533D+02 +-0.5193500036904D+02-0.5193421316129D+02-0.5193341640742D+02-0.5193260999141D+02 +-0.5193179379578D+02-0.5193096770164D+02-0.5193013158865D+02-0.5192928533501D+02 +-0.5192842881739D+02-0.5192756191098D+02-0.5192668448947D+02-0.5192579642497D+02 +-0.5192489758803D+02-0.5192398784765D+02-0.5192306707119D+02-0.5192213512442D+02 +-0.5192119187145D+02-0.5192023717474D+02-0.5191927089505D+02-0.5191829289146D+02 +-0.5191730302133D+02-0.5191630114025D+02-0.5191528710207D+02-0.5191426075883D+02 +-0.5191322196077D+02-0.5191217055632D+02-0.5191110639202D+02-0.5191002931255D+02 +-0.5190893916069D+02-0.5190783577729D+02-0.5190671900126D+02-0.5190558866954D+02 +-0.5190444461705D+02-0.5190328667673D+02-0.5190211467945D+02-0.5190092845399D+02 +-0.5189972782709D+02-0.5189851262330D+02-0.5189728266508D+02-0.5189603777267D+02 +-0.5189477776415D+02-0.5189350245533D+02-0.5189221165981D+02-0.5189090518885D+02 +-0.5188958285145D+02-0.5188824445423D+02-0.5188688980147D+02-0.5188551869503D+02 +-0.5188413093435D+02-0.5188272631641D+02-0.5188130463569D+02-0.5187986568418D+02 +-0.5187840925129D+02-0.5187693512386D+02-0.5187544308611D+02-0.5187393291962D+02 +-0.5187240440329D+02-0.5187085731330D+02-0.5186929142309D+02-0.5186770650332D+02 +-0.5186610232183D+02-0.5186447864362D+02-0.5186283523081D+02-0.5186117184259D+02 +-0.5185948823518D+02-0.5185778416183D+02-0.5185605937277D+02-0.5185431361514D+02 +-0.5185254663297D+02-0.5185075816718D+02-0.5184894795548D+02-0.5184711573237D+02 +-0.5184526122909D+02-0.5184338417356D+02-0.5184148429039D+02-0.5183956130079D+02 +-0.5183761492255D+02-0.5183564486998D+02-0.5183365085389D+02-0.5183163258155D+02 +-0.5182958975660D+02-0.5182752207907D+02-0.5182542924529D+02-0.5182331094785D+02 +-0.5182116687559D+02-0.5181899671350D+02-0.5181680014270D+02-0.5181457684041D+02 +-0.5181232647986D+02-0.5181004873028D+02-0.5180774325683D+02-0.5180540972054D+02 +-0.5180304777830D+02-0.5180065708277D+02-0.5179823728232D+02-0.5179578802103D+02 +-0.5179330893860D+02-0.5179079967027D+02-0.5178825984684D+02-0.5178568909453D+02 +-0.5178308703501D+02-0.5178045328526D+02-0.5177778745757D+02-0.5177508915948D+02 +-0.5177235799366D+02-0.5176959355795D+02-0.5176679544522D+02-0.5176396324334D+02 +-0.5176109653512D+02-0.5175819489823D+02-0.5175525790517D+02-0.5175228512318D+02 +-0.5174927611419D+02-0.5174623043474D+02-0.5174314763592D+02-0.5174002726332D+02 +-0.5173686885694D+02-0.5173367195115D+02-0.5173043607457D+02-0.5172716075006D+02 +-0.5172384549462D+02-0.5172048981932D+02-0.5171709322923D+02-0.5171365522335D+02 +-0.5171017529452D+02-0.5170665292940D+02-0.5170308760833D+02-0.5169947880525D+02 +-0.5169582598771D+02-0.5169212861671D+02-0.5168838614662D+02-0.5168459802518D+02 +-0.5168076369333D+02-0.5167688258518D+02-0.5167295412791D+02-0.5166897774168D+02 +-0.5166495283960D+02-0.5166087882755D+02-0.5165675510418D+02-0.5165258106080D+02 +-0.5164835608125D+02-0.5164407954186D+02-0.5163975081138D+02-0.5163536925080D+02 +-0.5163093421337D+02-0.5162644504442D+02-0.5162190108131D+02-0.5161730165335D+02 +-0.5161264608164D+02-0.5160793367906D+02-0.5160316375011D+02-0.5159833559084D+02 +-0.5159344848875D+02-0.5158850172268D+02-0.5158349456272D+02-0.5157842627009D+02 +-0.5157329609709D+02-0.5156810328692D+02-0.5156284707365D+02-0.5155752668206D+02 +-0.5155214132756D+02-0.5154669021608D+02-0.5154117254396D+02-0.5153558749786D+02 +-0.5152993425461D+02-0.5152421198113D+02-0.5151841983433D+02-0.5151255696093D+02 +-0.5150662249744D+02-0.5150061557002D+02-0.5149453529428D+02-0.5148838077528D+02 +-0.5148215110737D+02-0.5147584537403D+02-0.5146946264782D+02-0.5146300199022D+02 +-0.5145646245151D+02-0.5144984307067D+02-0.5144314287525D+02-0.5143636088122D+02 +-0.5142949609291D+02-0.5142254750281D+02-0.5141551409151D+02-0.5140839482753D+02 +-0.5140118866721D+02-0.5139389455459D+02-0.5138651142128D+02-0.5137903818632D+02 +-0.5137147375605D+02-0.5136381702401D+02-0.5135606687078D+02-0.5134822216388D+02 +-0.5134028175756D+02-0.5133224449278D+02-0.5132410919702D+02-0.5131587468413D+02 +-0.5130753975423D+02-0.5129910319357D+02-0.5129056377438D+02-0.5128192025477D+02 +-0.5127317137854D+02-0.5126431587514D+02-0.5125535245940D+02-0.5124627983153D+02 +-0.5123709667690D+02-0.5122780166596D+02-0.5121839345403D+02-0.5120887068125D+02 +-0.5119923197240D+02-0.5118947593678D+02-0.5117960116805D+02-0.5116960624416D+02 +-0.5115948972712D+02-0.5114925016296D+02-0.5113888608154D+02-0.5112839599644D+02 +-0.5111777840483D+02-0.5110703178733D+02-0.5109615460788D+02-0.5108514531363D+02 +-0.5107400233480D+02-0.5106272408452D+02-0.5105130895877D+02-0.5103975533619D+02 +-0.5102806157801D+02-0.5101622602790D+02-0.5100424701185D+02-0.5099212283803D+02 +-0.5097985179674D+02-0.5096743216021D+02-0.5095486218256D+02-0.5094214009961D+02 +-0.5092926412887D+02-0.5091623246932D+02-0.5090304330139D+02-0.5088969478681D+02 +-0.5087618506855D+02-0.5086251227064D+02-0.5084867449820D+02-0.5083466983722D+02 +-0.5082049635455D+02-0.5080615209778D+02-0.5079163509518D+02-0.5077694335558D+02 +-0.5076207486834D+02-0.5074702760324D+02-0.5073179951042D+02-0.5071638852033D+02 +-0.5070079254364D+02-0.5068500947122D+02-0.5066903717403D+02-0.5065287350315D+02 +-0.5063651628963D+02-0.5061996334457D+02-0.5060321245898D+02-0.5058626140382D+02 +-0.5056910792994D+02-0.5055174976809D+02-0.5053418462884D+02-0.5051641020267D+02 +-0.5049842415989D+02-0.5048022415067D+02-0.5046180780505D+02-0.5044317273295D+02 +-0.5042431652422D+02-0.5040523674861D+02-0.5038593095586D+02-0.5036639667573D+02 +-0.5034663141803D+02-0.5032663267268D+02-0.5030639790981D+02-0.5028592457977D+02 +-0.5026521011328D+02-0.5024425192145D+02-0.5022304739591D+02-0.5020159390892D+02 +-0.5017988881346D+02-0.5015792944334D+02-0.5013571311336D+02-0.5011323711944D+02 +-0.5009049873873D+02-0.5006749522980D+02-0.5004422383280D+02-0.5002068176959D+02 +-0.4999686624397D+02-0.4997277444186D+02-0.4994840353146D+02-0.4992375066350D+02 +-0.4989881297144D+02-0.4987358757171D+02-0.4984807156389D+02-0.4982226203106D+02 +-0.4979615603991D+02-0.4976975064117D+02-0.4974304286974D+02-0.4971602974502D+02 +-0.4968870827126D+02-0.4966107543776D+02-0.4963312821924D+02-0.4960486357616D+02 +-0.4957627845502D+02-0.4954736978871D+02-0.4951813449683D+02-0.4948856948612D+02 +-0.4945867165071D+02-0.4942843787257D+02-0.4939786502185D+02-0.4936694995729D+02 +-0.4933568952659D+02-0.4930408056681D+02-0.4927211990478D+02-0.4923980435752D+02 +-0.4920713073265D+02-0.4917409582880D+02-0.4914069643607D+02-0.4910692933642D+02 +-0.4907279130416D+02-0.4903827910633D+02-0.4900338950319D+02-0.4896811924867D+02 +-0.4893246509079D+02-0.4889642377211D+02-0.4885999203021D+02-0.4882316659813D+02 +-0.4878594420482D+02-0.4874832157556D+02-0.4871029543247D+02-0.4867186249491D+02 +-0.4863301947995D+02-0.4859376310277D+02-0.4855409007715D+02-0.4851399711583D+02 +-0.4847348093100D+02-0.4843253823466D+02-0.4839116573905D+02-0.4834936015704D+02 +-0.4830711820251D+02-0.4826443659074D+02-0.4822131203876D+02-0.4817774126566D+02 +-0.4813372099301D+02-0.4808924794511D+02-0.4804431884930D+02-0.4799893043625D+02 +-0.4795307944023D+02-0.4790676259938D+02-0.4785997665588D+02-0.4781271835619D+02 +-0.4776498445124D+02-0.4771677169657D+02-0.4766807685247D+02-0.4761889668409D+02 +-0.4756922796153D+02-0.4751906745988D+02-0.4746841195927D+02-0.4741725824487D+02 +-0.4736560310686D+02-0.4731344334036D+02-0.4726077574537D+02-0.4720759712663D+02 +-0.4715390429349D+02-0.4709969405976D+02-0.4704496324345D+02-0.4698970866656D+02 +-0.4693392715482D+02-0.4687761553742D+02-0.4682077064661D+02-0.4676338931742D+02 +-0.4670546838725D+02-0.4664700469545D+02-0.4658799508292D+02-0.4652843639162D+02 +-0.4646832546412D+02-0.4640765914308D+02-0.4634643427075D+02-0.4628464768840D+02 +-0.4622229623583D+02-0.4615937675077D+02-0.4609588606835D+02-0.4603182102046D+02 +-0.4596717843531D+02-0.4590195513672D+02-0.4583614794369D+02-0.4576975366979D+02 +-0.4570276912265D+02-0.4563519110351D+02-0.4556701640665D+02-0.4549824181908D+02 +-0.4542886412007D+02-0.4535888008084D+02-0.4528828646428D+02-0.4521708002473D+02 +-0.4514525750785D+02-0.4507281565054D+02-0.4499975118097D+02-0.4492606081870D+02 +-0.4485174127497D+02-0.4477678925295D+02-0.4470120144833D+02-0.4462497454985D+02 +-0.4454810524011D+02-0.4447059019649D+02-0.4439242609219D+02-0.4431360959758D+02 +-0.4423413738159D+02-0.4415400611337D+02-0.4407321246418D+02-0.4399175310947D+02 +-0.4390962473114D+02-0.4382682402010D+02-0.4374334767908D+02-0.4365919242563D+02 +-0.4357435499539D+02-0.4348883214570D+02-0.4340262065933D+02-0.4331571734857D+02 +-0.4322811905962D+02-0.4313982267710D+02-0.4305082512897D+02-0.4296112339160D+02 +-0.4287071449512D+02-0.4277959552900D+02-0.4268776364786D+02-0.4259521607738D+02 +-0.4250195012053D+02-0.4240796316384D+02-0.4231325268378D+02-0.4221781625326D+02 +-0.4212165154821D+02-0.4202475635403D+02-0.4192712857207D+02-0.4182876622603D+02 +-0.4172966746809D+02-0.4162983058491D+02-0.4152925400326D+02-0.4142793629535D+02 +-0.4132587618362D+02-0.4122307254514D+02-0.4111952441526D+02-0.4101523099069D+02 +-0.4091019163177D+02-0.4080440586392D+02-0.4069787337814D+02-0.4059059403052D+02 +-0.4048256784069D+02-0.4037379498919D+02-0.4026427581359D+02-0.4015401080347D+02 +-0.4004300059408D+02-0.3993124595881D+02-0.3981874780047D+02-0.3970550714118D+02 +-0.3959152511128D+02-0.3947680293704D+02-0.3936134192738D+02-0.3924514345974D+02 +-0.3912820896514D+02-0.3901053991273D+02-0.3889213779388D+02-0.3877300410616D+02 +-0.3865314033730D+02-0.3853254794941D+02-0.3841122836384D+02-0.3828918294671D+02 +-0.3816641299561D+02-0.3804291972752D+02-0.3791870426838D+02-0.3779376764439D+02 +-0.3766811077544D+02-0.3754173447071D+02-0.3741463942662D+02-0.3728682622747D+02 +-0.3715829534855D+02-0.3702904716206D+02-0.3689908194568D+02-0.3676839989389D+02 +-0.3663700113198D+02-0.3650488573242D+02-0.3637205373385D+02-0.3623850516215D+02 +-0.3610424005352D+02-0.3596925847947D+02-0.3583356057318D+02-0.3569714655716D+02 +-0.3556001677183D+02-0.3542217170480D+02-0.3528361202035D+02-0.3514433858906D+02 +-0.3500435251706D+02-0.3486365517474D+02-0.3472224822457D+02-0.3458013364781D+02 +-0.3443731376977D+02-0.3429379128348D+02-0.3414956927154D+02-0.3400465122587D+02 +-0.3385904106531D+02-0.3371274315081D+02-0.3356576229817D+02-0.3341810378823D+02 +-0.3326977337430D+02-0.3312077728689D+02-0.3297112223571D+02-0.3282081540879D+02 +-0.3266986446883D+02-0.3251827754673D+02-0.3236606323235D+02-0.3221323056253D+02 +-0.3205978900636D+02-0.3190574844798D+02-0.3175111916665D+02-0.3159591181450D+02 +-0.3144013739192D+02-0.3128380722060D+02-0.3112693291460D+02-0.3096952634939D+02 +-0.3081159962896D+02-0.3065316505139D+02-0.3049423507279D+02-0.3033482226994D+02 +-0.3017493930171D+02-0.3001459886954D+02-0.2985381367711D+02-0.2969259638940D+02 +-0.2953095959141D+02-0.2936891574677D+02-0.2920647715631D+02-0.2904365591713D+02 +-0.2888046388202D+02-0.2871691261992D+02-0.2855301337730D+02-0.2838877704096D+02 +-0.2822421410237D+02-0.2805933462405D+02-0.2789414820796D+02-0.2772866396645D+02 +-0.2756289049588D+02-0.2739683585338D+02-0.2723050753680D+02-0.2706391246838D+02 +-0.2689705698223D+02-0.2672994681603D+02-0.2656258710714D+02-0.2639498239345D+02 +-0.2622713661917D+02-0.2605905314574D+02-0.2589073476829D+02-0.2572218373759D+02 +-0.2555340178776D+02-0.2538439017000D+02-0.2521514969218D+02-0.2504568076457D+02 +-0.2487598345161D+02-0.2470605752972D+02-0.2453590255090D+02-0.2436551791213D+02 +-0.2419490293015D+02-0.2402405692122D+02-0.2385297928550D+02-0.2368166959536D+02 +-0.2351012768684D+02-0.2333835375355D+02-0.2316634844181D+02-0.2299411294593D+02 +-0.2282164910224D+02-0.2264895948042D+02-0.2247604747020D+02-0.2230291736187D+02 +-0.2212957441833D+02-0.2195602493665D+02-0.2178227629680D+02-0.2160833699531D+02 +-0.2143421666157D+02-0.2125992605447D+02-0.2108547703736D+02-0.2091088252957D+02 +-0.2073615643311D+02-0.2056131353347D+02-0.2038636937454D+02-0.2021134010787D+02 +-0.2003624231780D+02-0.1986109282464D+02-0.1968590846923D+02-0.1951070588338D+02 +-0.1933550125113D+02-0.1916031006739D+02-0.1898514690054D+02-0.1881002516654D+02 +-0.1863495692195D+02-0.1845995268332D+02-0.1828502127992D+02-0.1811016974578D+02 +-0.1793540325598D+02-0.1776072511080D+02-0.1758613676940D+02-0.1741163793327D+02 +-0.1723722667775D+02-0.1706289962834D+02-0.1688865217702D+02-0.1671447873257D+02 +-0.1654037299789D+02-0.1636632826691D+02-0.1619233773325D+02-0.1601839480315D+02 +-0.1584449340510D+02-0.1567062828984D+02-0.1549679531468D+02-0.1532299170720D+02 +-0.1514921630451D+02-0.1497546976480D+02-0.1480175474939D+02-0.1462807607400D+02 +-0.1445444082871D+02-0.1428085846710D+02-0.1410734086517D+02-0.1393390235146D+02 +-0.1376055970989D+02-0.1358733215727D+02-0.1341424129731D+02-0.1324131105355D+02 +-0.1306856758305D+02-0.1289603917318D+02-0.1272375612351D+02-0.1255175061484D+02 +-0.1238005656736D+02-0.1220870948967D+02-0.1203774632043D+02-0.1186720526422D+02 +-0.1169712562320D+02-0.1152754762583D+02-0.1135851225403D+02-0.1119006106993D+02 +-0.1102223604329D+02-0.1085507938069D+02-0.1068863335731D+02-0.1052294015218D+02 +-0.1035804168776D+02-0.1019397947446D+02-0.1003079446077D+02-0.9868526889628D+01 +-0.9707216161554D+01-0.9546900704939D+01-0.9387617854023D+01-0.9229403734858D+01 +-0.9072293159592D+01-0.8916319529363D+01-0.8761514745993D+01-0.8607909132693D+01 +-0.8455531363896D+01-0.8304408404305D+01-0.8154565457227D+01-0.8006025922166D+01 +-0.7858811361682D+01-0.7712941477416D+01-0.7568434095199D+01-0.7425305159081D+01 +-0.7283568734134D+01-0.7143237017788D+01-0.7004320359504D+01-0.6866827288485D+01 +-0.6730764549154D+01-0.6596137144079D+01-0.6462948384000D+01-0.6331199944618D+01 +-0.6200891929738D+01-0.6072022940407D+01-0.5944590149603D+01-0.5818589382077D+01 +-0.5694015198898D+01-0.5570860986265D+01-0.5449119048124D+01-0.5328780702141D+01 +-0.5209836378552D+01-0.5092275721431D+01-0.4976087691897D+01-0.4861260672787D+01 +-0.4747782574321D+01-0.4635640940271D+01-0.4524823054180D+01-0.4415316045125D+01 +-0.4307106992579D+01-0.4200183029885D+01-0.4094531445869D+01-0.3990139784139D+01 +-0.3886995939600D+01-0.3785088251726D+01-0.3684405594148D+01-0.3584937460106D+01 +-0.3486674043348D+01-0.3389606314047D+01-0.3293726089348D+01-0.3199026098161D+01 +-0.3105500039868D+01-0.3013142636618D+01-0.2921949678952D+01-0.2831918064533D+01 +-0.2743045829849D+01-0.2655332174788D+01-0.2568777480092D+01-0.2483383317815D+01 +-0.2399152454962D+01-0.2316088850658D+01-0.2234197647300D+01-0.2153485156272D+01 +-0.2073958838965D+01-0.1995627283965D+01-0.1918500181413D+01-0.1842588295670D+01 +-0.1767903437522D+01-0.1694458437274D+01-0.1622267120110D+01-0.1551344285168D+01 +-0.1481705689753D+01-0.1413368040087D+01-0.1346348989896D+01-0.1280667148051D+01 +-0.1216342096293D+01-0.1153394417906D+01-0.1091845737986D+01-0.1031718775725D+01 +-0.9730374088849D+00-0.9158267504133D+00-0.8601132368937D+00-0.8059247283301D+00 +-0.7532906185600D+00-0.7022419554295D+00-0.6528115697324D+00-0.6050342118170D+00 +-0.5589466947046D+00-0.5145880425354D+00-0.4719996431596D+00-0.4312254037239D+00 +-0.3923119081554D+00-0.3553085755132D+00-0.3202678182603D+00-0.2872451996103D+00 +-0.2562993012896D+00 + 0.0000000000000D+00 + 1012 0.5229258479779D+01 + 0.2150742905406D-04 0.2201934401975D-04 0.2254344131081D-04 0.2308001074793D-04 + 0.2362934904336D-04 0.2419175996469D-04 0.2476755450247D-04 0.2535705104185D-04 + 0.2596057553829D-04 0.2657846169737D-04 0.2721105115901D-04 0.2785869368592D-04 + 0.2852174735659D-04 0.2920057876285D-04 0.2989556321214D-04 0.3060708493450D-04 + 0.3133553729459D-04 0.3208132300862D-04 0.3284485436652D-04 0.3362655345933D-04 + 0.3442685241199D-04 0.3524619362168D-04 0.3608503000175D-04 0.3694382523153D-04 + 0.3782305401197D-04 0.3872320232740D-04 0.3964476771351D-04 0.4058825953159D-04 + 0.4155419924941D-04 0.4254312072866D-04 0.4355557051923D-04 0.4459210816046D-04 + 0.4565330648961D-04 0.4673975195749D-04 0.4785204495171D-04 0.4899080012754D-04 + 0.5015664674660D-04 0.5135022902361D-04 0.5257220648130D-04 0.5382325431382D-04 + 0.5510406375867D-04 0.5641534247751D-04 0.5775781494596D-04 0.5913222285265D-04 + 0.6053932550771D-04 0.6197990026094D-04 0.6345474292991D-04 0.6496466823815D-04 + 0.6651051026378D-04 0.6809312289875D-04 0.6971338031887D-04 0.7137217746513D-04 + 0.7307043053626D-04 0.7480907749308D-04 0.7658907857468D-04 0.7841141682692D-04 + 0.8027709864336D-04 0.8218715431905D-04 0.8414263861740D-04 0.8614463135050D-04 + 0.8819423797310D-04 0.9029259019072D-04 0.9244084658213D-04 0.9464019323656D-04 + 0.9689184440594D-04 0.9919704317265D-04 0.1015570621330D-03 0.1039732040969D-03 + 0.1064468028041D-03 0.1089792236573D-03 0.1115718644728D-03 0.1142261562483D-03 + 0.1169435639500D-03 0.1197255873171D-03 0.1225737616857D-03 0.1254896588328D-03 + 0.1284748878395D-03 0.1315310959746D-03 0.1346599695998D-03 0.1378632350954D-03 + 0.1411426598085D-03 0.1445000530233D-03 0.1479372669546D-03 0.1514561977641D-03 + 0.1550587866019D-03 0.1587470206711D-03 0.1625229343189D-03 0.1663886101524D-03 + 0.1703461801815D-03 0.1743978269887D-03 0.1785457849256D-03 0.1827923413391D-03 + 0.1871398378251D-03 0.1915906715131D-03 0.1961472963799D-03 0.2008122245952D-03 + 0.2055880278984D-03 0.2104773390081D-03 0.2154828530649D-03 0.2206073291079D-03 + 0.2258535915864D-03 0.2312245319072D-03 0.2367231100177D-03 0.2423523560273D-03 + 0.2481153718665D-03 0.2540153329849D-03 0.2600554900897D-03 0.2662391709247D-03 + 0.2725697820915D-03 0.2790508109132D-03 0.2856858273428D-03 0.2924784859153D-03 + 0.2994325277470D-03 0.3065517825810D-03 0.3138401708812D-03 0.3213017059753D-03 + 0.3289404962488D-03 0.3367607473897D-03 0.3447667646870D-03 0.3529629553823D-03 + 0.3613538310777D-03 0.3699440101989D-03 0.3787382205180D-03 0.3877413017338D-03 + 0.3969582081140D-03 0.4063940111991D-03 0.4160539025692D-03 0.4259431966769D-03 + 0.4360673337456D-03 0.4464318827368D-03 0.4570425443864D-03 0.4679051543124D-03 + 0.4790256861959D-03 0.4904102550358D-03 0.5020651204812D-03 0.5139966902408D-03 + 0.5262115235724D-03 0.5387163348549D-03 0.5515179972435D-03 0.5646235464104D-03 + 0.5780401843732D-03 0.5917752834137D-03 0.6058363900874D-03 0.6202312293275D-03 + 0.6349677086450D-03 0.6500539224267D-03 0.6654981563344D-03 0.6813088918062D-03 + 0.6974948106637D-03 0.7140647998269D-03 0.7310279561389D-03 0.7483935913040D-03 + 0.7661712369406D-03 0.7843706497523D-03 0.8030018168203D-03 0.8220749610184D-03 + 0.8416005465556D-03 0.8615892846469D-03 0.8820521393172D-03 0.9030003333406D-03 + 0.9244453543176D-03 0.9463989608946D-03 0.9688731891282D-03 0.9918803589975D-03 + 0.1015433081069D-02 0.1039544263315D-02 0.1064227118095D-02 0.1089495169290D-02 + 0.1115362259619D-02 0.1141842558105D-02 0.1168950567737D-02 0.1196701133289D-02 + 0.1225109449338D-02 0.1254191068456D-02 0.1283961909601D-02 0.1314438266696D-02 + 0.1345636817413D-02 0.1377574632157D-02 0.1410269183260D-02 0.1443738354387D-02 + 0.1478000450161D-02 0.1513074206015D-02 0.1548978798262D-02 0.1585733854409D-02 + 0.1623359463706D-02 0.1661876187936D-02 0.1701305072458D-02 0.1741667657505D-02 + 0.1782985989747D-02 0.1825282634108D-02 0.1868580685877D-02 0.1912903783076D-02 + 0.1958276119133D-02 0.2004722455835D-02 0.2052268136585D-02 0.2100939099962D-02 + 0.2150761893598D-02 0.2201763688371D-02 0.2253972292925D-02 0.2307416168524D-02 + 0.2362124444253D-02 0.2418126932561D-02 0.2475454145167D-02 0.2534137309329D-02 + 0.2594208384486D-02 0.2655700079287D-02 0.2718645869002D-02 0.2783080013344D-02 + 0.2849037574687D-02 0.2916554436715D-02 0.2985667323484D-02 0.3056413818931D-02 + 0.3128832386828D-02 0.3202962391187D-02 0.3278844117136D-02 0.3356518792272D-02 + 0.3436028608501D-02 0.3517416744371D-02 0.3600727387929D-02 0.3686005760082D-02 + 0.3773298138499D-02 0.3862651882061D-02 0.3954115455860D-02 0.4047738456768D-02 + 0.4143571639594D-02 0.4241666943825D-02 0.4342077520985D-02 0.4444857762604D-02 + 0.4550063328833D-02 0.4657751177697D-02 0.4767979595018D-02 0.4880808225009D-02 + 0.4996298101570D-02 0.5114511680279D-02 0.5235512871115D-02 0.5359367071918D-02 + 0.5486141202598D-02 0.5615903740128D-02 0.5748724754308D-02 0.5884675944352D-02 + 0.6023830676284D-02 0.6166264021183D-02 0.6312052794284D-02 0.6461275594959D-02 + 0.6614012847588D-02 0.6770346843357D-02 0.6930361782982D-02 0.7094143820394D-02 + 0.7261781107400D-02 0.7433363839342D-02 0.7608984301773D-02 0.7788736918176D-02 + 0.7972718298747D-02 0.8161027290261D-02 0.8353765027049D-02 0.8551034983111D-02 + 0.8752943025377D-02 0.8959597468160D-02 0.9171109128811D-02 0.9387591384603D-02 + 0.9609160230877D-02 0.9835934340477D-02 0.1006803512449D-01 0.1030558679431D-01 + 0.1054871642512D-01 0.1079755402073D-01 0.1105223257982D-01 0.1131288816368D-01 + 0.1157965996544D-01 0.1185269038080D-01 0.1213212508026D-01 0.1241811308303D-01 + 0.1271080683248D-01 0.1301036227325D-01 0.1331693893004D-01 0.1363069998813D-01 + 0.1395181237567D-01 0.1428044684765D-01 0.1461677807184D-01 0.1496098471648D-01 + 0.1531324953990D-01 0.1567375948211D-01 0.1604270575828D-01 0.1642028395434D-01 + 0.1680669412453D-01 0.1720214089116D-01 0.1760683354637D-01 0.1802098615621D-01 + 0.1844481766683D-01 0.1887855201303D-01 0.1932241822902D-01 0.1977665056168D-01 + 0.2024148858606D-01 0.2071717732349D-01 0.2120396736203D-01 0.2170211497964D-01 + 0.2221188226980D-01 0.2273353726988D-01 0.2326735409215D-01 0.2381361305754D-01 + 0.2437260083229D-01 0.2494461056731D-01 0.2552994204062D-01 0.2612890180262D-01 + 0.2674180332442D-01 0.2736896714935D-01 0.2801072104743D-01 0.2866740017320D-01 + 0.2933934722669D-01 0.3002691261781D-01 0.3073045463399D-01 0.3145033961141D-01 + 0.3218694210958D-01 0.3294064508962D-01 0.3371184009606D-01 0.3450092744243D-01 + 0.3530831640054D-01 0.3613442539362D-01 0.3697968219334D-01 0.3784452412086D-01 + 0.3872939825181D-01 0.3963476162544D-01 0.4056108145796D-01 0.4150883536008D-01 + 0.4247851155891D-01 0.4347060912422D-01 0.4448563819924D-01 0.4552412023590D-01 + 0.4658658823475D-01 0.4767358698962D-01 0.4878567333696D-01 0.4992341641008D-01 + 0.5108739789835D-01 0.5227821231135D-01 0.5349646724813D-01 0.5474278367169D-01 + 0.5601779618862D-01 0.5732215333417D-01 0.5865651786266D-01 0.6002156704340D-01 + 0.6141799296226D-01 0.6284650282880D-01 0.6430781928923D-01 0.6580268074515D-01 + 0.6733184167825D-01 0.6889607298100D-01 0.7049616229337D-01 0.7213291434581D-01 + 0.7380715130845D-01 0.7551971314661D-01 0.7727145798277D-01 0.7906326246509D-01 + 0.8089602214242D-01 0.8277065184608D-01 0.8468808607842D-01 0.8664927940812D-01 + 0.8865520687255D-01 0.9070686438707D-01 0.9280526916144D-01 0.9495146012343D-01 + 0.9714649834967D-01 0.9939146750384D-01 0.1016874742823D+00 0.1040356488672D+00 + 0.1064371453872D+00 0.1088931423856D+00 0.1114048432967D+00 0.1139734769295D+00 + 0.1166002979593D+00 0.1192865874273D+00 0.1220336532487D+00 0.1248428307276D+00 + 0.1277154830815D+00 0.1306530019730D+00 0.1336568080498D+00 0.1367283514936D+00 + 0.1398691125766D+00 0.1430806022269D+00 0.1463643626021D+00 0.1497219676713D+00 + 0.1531550238057D+00 0.1566651703780D+00 0.1602540803695D+00 0.1639234609870D+00 + 0.1676750542871D+00 0.1715106378098D+00 0.1754320252209D+00 0.1794410669619D+00 + 0.1835396509100D+00 0.1877297030455D+00 0.1920131881282D+00 0.1963921103827D+00 + 0.2008685141914D+00 0.2054444847966D+00 0.2101221490109D+00 0.2149036759359D+00 + 0.2197912776889D+00 0.2247872101386D+00 0.2298937736476D+00 0.2351133138248D+00 + 0.2404482222837D+00 0.2459009374100D+00 0.2514739451362D+00 0.2571697797240D+00 + 0.2629910245536D+00 0.2689403129212D+00 0.2750203288421D+00 0.2812338078623D+00 + 0.2875835378751D+00 0.2940723599454D+00 0.3007031691395D+00 0.3074789153608D+00 + 0.3144026041916D+00 0.3214772977396D+00 0.3287061154899D+00 0.3360922351618D+00 + 0.3436388935694D+00 0.3513493874868D+00 0.3592270745164D+00 0.3672753739607D+00 + 0.3754977676972D+00 0.3838978010545D+00 0.3924790836915D+00 0.4012452904770D+00 + 0.4102001623706D+00 0.4193475073036D+00 0.4286912010595D+00 0.4382351881538D+00 + 0.4479834827120D+00 0.4579401693452D+00 0.4681094040228D+00 0.4784954149418D+00 + 0.4891025033910D+00 0.4999350446102D+00 0.5109974886435D+00 0.5222943611853D+00 + 0.5338302644183D+00 0.5456098778426D+00 0.5576379590956D+00 0.5699193447601D+00 + 0.5824589511607D+00 0.5952617751475D+00 0.6083328948654D+00 0.6216774705074D+00 + 0.6353007450521D+00 0.6492080449824D+00 0.6634047809857D+00 0.6778964486325D+00 + 0.6926886290333D+00 0.7077869894721D+00 0.7231972840138D+00 0.7389253540860D+00 + 0.7549771290311D+00 0.7713586266289D+00 0.7880759535873D+00 0.8051353059985D+00 + 0.8225429697604D+00 0.8403053209599D+00 0.8584288262158D+00 0.8769200429817D+00 + 0.8957856198031D+00 0.9150322965294D+00 0.9346669044774D+00 0.9546963665439D+00 + 0.9751276972649D+00 0.9959680028197D+00 0.1017224480976D+01 0.1038904420974D+01 + 0.1061015203349D+01 0.1083564299686D+01 0.1106559272300D+01 0.1130007773859D+01 + 0.1153917546912D+01 0.1178296423354D+01 0.1203152323804D+01 0.1228493256899D+01 + 0.1254327318495D+01 0.1280662690787D+01 0.1307507641324D+01 0.1334870521934D+01 + 0.1362759767535D+01 0.1391183894856D+01 0.1420151501035D+01 0.1449671262109D+01 + 0.1479751931386D+01 0.1510402337698D+01 0.1541631383520D+01 0.1573448042969D+01 + 0.1605861359662D+01 0.1638880444440D+01 0.1672514472946D+01 0.1706772683055D+01 + 0.1741664372155D+01 0.1777198894269D+01 0.1813385657016D+01 0.1850234118409D+01 + 0.1887753783475D+01 0.1925954200705D+01 0.1964844958324D+01 0.2004435680370D+01 + 0.2044736022586D+01 0.2085755668115D+01 0.2127504322996D+01 0.2169991711448D+01 + 0.2213227570952D+01 0.2257221647108D+01 0.2301983688271D+01 0.2347523439972D+01 + 0.2393850639086D+01 0.2440975007782D+01 0.2488906247220D+01 0.2537654031002D+01 + 0.2587227998372D+01 0.2637637747157D+01 0.2688892826442D+01 0.2741002728983D+01 + 0.2793976883341D+01 0.2847824645743D+01 0.2902555291652D+01 0.2958178007063D+01 + 0.3014701879494D+01 0.3072135888684D+01 0.3130488897001D+01 0.3189769639525D+01 + 0.3249986713841D+01 0.3311148569513D+01 0.3373263497233D+01 0.3436339617667D+01 + 0.3500384869964D+01 0.3565406999951D+01 0.3631413547991D+01 0.3698411836514D+01 + 0.3766408957221D+01 0.3835411757947D+01 0.3905426829193D+01 0.3976460490322D+01 + 0.4048518775419D+01 0.4121607418815D+01 0.4195731840277D+01 0.4270897129857D+01 + 0.4347108032420D+01 0.4424368931831D+01 0.4502683834816D+01 0.4582056354503D+01 + 0.4662489693636D+01 0.4743986627475D+01 0.4826549486387D+01 0.4910180138127D+01 + 0.4994879969825D+01 0.5080649869681D+01 0.5167490208373D+01 0.5255400820202D+01 + 0.5344380983962D+01 0.5434429403565D+01 0.5525544188426D+01 0.5617722833617D+01 + 0.5710962199815D+01 0.5805258493041D+01 0.5900607244231D+01 0.5997003288635D+01 + 0.6094440745069D+01 0.6192912995049D+01 0.6292412661814D+01 0.6392931589269D+01 + 0.6494460820874D+01 0.6596990578488D+01 0.6700510241224D+01 0.6805008324307D+01 + 0.6910472457995D+01 0.7016889366579D+01 0.7124244847491D+01 0.7232523750568D+01 + 0.7341709957494D+01 0.7451786361463D+01 0.7562734847107D+01 0.7674536270712D+01 + 0.7787170440791D+01 0.7900616099026D+01 0.8014850901658D+01 0.8129851401340D+01 + 0.8245593029526D+01 0.8362050079436D+01 0.8479195689649D+01 0.8597001828383D+01 + 0.8715439278509D+01 0.8834477623371D+01 0.8954085233454D+01 0.9074229253973D+01 + 0.9194875593440D+01 0.9315988913276D+01 0.9437532618530D+01 0.9559468849772D+01 + 0.9681758476237D+01 0.9804361090277D+01 0.9927235003199D+01 0.1005033724256D+02 + 0.1017362355101D+02 0.1029704838669D+02 0.1042056492540D+02 0.1054412506444D+02 + 0.1066767942831D+02 0.1079117737637D+02 0.1091456701244D+02 0.1103779519646D+02 + 0.1116080755839D+02 0.1128354851420D+02 0.1140596128432D+02 0.1152798791434D+02 + 0.1164956929827D+02 0.1177064520433D+02 0.1189115430327D+02 0.1201103419951D+02 + 0.1213022146500D+02 0.1224865167586D+02 0.1236625945201D+02 0.1248297849976D+02 + 0.1259874165744D+02 0.1271348094411D+02 0.1282712761148D+02 0.1293961219902D+02 + 0.1305086459240D+02 0.1316081408518D+02 0.1326938944391D+02 0.1337651897664D+02 + 0.1348213060491D+02 0.1358615193909D+02 0.1368851035736D+02 0.1378913308811D+02 + 0.1388794729589D+02 0.1398488017086D+02 0.1407985902179D+02 0.1417281137257D+02 + 0.1426366506212D+02 0.1435234834789D+02 0.1443879001264D+02 0.1452291947466D+02 + 0.1460466690129D+02 0.1468396332564D+02 0.1476074076649D+02 0.1483493235126D+02 + 0.1490647244192D+02 0.1497529676373D+02 0.1504134253675D+02 0.1510454860984D+02 + 0.1516485559720D+02 0.1522220601698D+02 0.1527654443219D+02 0.1532781759325D+02 + 0.1537597458241D+02 0.1542096695946D+02 0.1546274890874D+02 0.1550127738702D+02 + 0.1553651227211D+02 0.1556841651189D+02 0.1559695627334D+02 0.1562210109145D+02 + 0.1564382401753D+02 0.1566210176664D+02 0.1567691486377D+02 0.1568824778841D+02 + 0.1569608911712D+02 0.1570043166360D+02 0.1570127261607D+02 0.1569861367129D+02 + 0.1569246116496D+02 0.1568282619787D+02 0.1566972475757D+02 0.1565317783486D+02 + 0.1563321153475D+02 0.1560985718135D+02 0.1558315141624D+02 0.1555313628970D+02 + 0.1551985934445D+02 0.1548337369123D+02 0.1544373807583D+02 0.1540101693692D+02 + 0.1535528045436D+02 0.1530660458716D+02 0.1525507110098D+02 0.1520076758423D+02 + 0.1514378745267D+02 0.1508422994170D+02 0.1502220008605D+02 0.1495780868635D+02 + 0.1489117226206D+02 0.1482241299046D+02 0.1475165863115D+02 0.1467904243575D+02 + 0.1460470304238D+02 0.1452878435463D+02 0.1445143540465D+02 0.1437281020013D+02 + 0.1429306755483D+02 0.1421237090260D+02 0.1413088809452D+02 0.1404879117925D+02 + 0.1396625616625D+02 0.1388346277207D+02 0.1380059414952D+02 0.1371783659988D+02 + 0.1363537926825D+02 0.1355341382212D+02 0.1347213411351D+02 0.1339173582480D+02 + 0.1331241609871D+02 0.1323437315279D+02 0.1315780587881D+02 0.1308291342766D+02 + 0.1300989478035D+02 0.1293894830568D+02 0.1287027130535D+02 0.1280405954732D+02 + 0.1274050678825D+02 0.1267980428593D+02 0.1262214030269D+02 0.1256769960087D+02 + 0.1251666293145D+02 0.1246920651702D+02 0.1242550153038D+02 0.1238571356999D+02 + 0.1235000213372D+02 0.1231852009235D+02 0.1229141316414D+02 0.1226881939222D+02 + 0.1225086862623D+02 0.1223768200985D+02 0.1222937147599D+02 0.1222603925117D+02 + 0.1222777737106D+02 0.1223466720868D+02 0.1224677901729D+02 0.1226417148958D+02 + 0.1228689133517D+02 0.1231497287802D+02 0.1234843767581D+02 0.1238729416297D+02 + 0.1243153731911D+02 0.1248114836487D+02 0.1253609448665D+02 0.1259632859227D+02 + 0.1266178909890D+02 0.1273239975523D+02 0.1280806949923D+02 0.1288869235315D+02 + 0.1297414735711D+02 0.1306429854274D+02 0.1315899494816D+02 0.1325807067533D+02 + 0.1336134499111D+02 0.1346862247282D+02 0.1357969319917D+02 0.1369433298744D+02 + 0.1381230367740D+02 0.1393335346243D+02 0.1405721726828D+02 0.1418361717951D+02 + 0.1431226291376D+02 0.1444285234362D+02 0.1457507206581D+02 0.1470859801733D+02 + 0.1484309613763D+02 0.1497822307639D+02 0.1511362694548D+02 0.1524894811426D+02 + 0.1538382004666D+02 0.1551787017849D+02 0.1565072083339D+02 0.1578199017530D+02 + 0.1591129319546D+02 0.1603824273170D+02 0.1616245051740D+02 0.1628352825765D+02 + 0.1640108872963D+02 0.1651474690448D+02 0.1662412108723D+02 0.1672883407174D+02 + 0.1682851430716D+02 0.1692279707220D+02 0.1701132565381D+02 0.1709375252614D+02 + 0.1716974052608D+02 0.1723896402125D+02 0.1730111006644D+02 0.1735587954416D+02 + 0.1740298828530D+02 0.1744216816538D+02 0.1747316817225D+02 0.1749575544089D+02 + 0.1750971625093D+02 0.1751485698260D+02 0.1751100502688D+02 0.1749800964559D+02 + 0.1747574277733D+02 0.1744409978499D+02 0.1740300014123D+02 0.1735238804766D+02 + 0.1729223298439D+02 0.1722253018618D+02 0.1714330104180D+02 0.1705459341368D+02 + 0.1695648187457D+02 0.1684906785873D+02 0.1673247972505D+02 0.1660687272995D+02 + 0.1647242890818D+02 0.1632935685981D+02 0.1617789144222D+02 0.1601829336618D+02 + 0.1585084869528D+02 0.1567586824865D+02 0.1549368690699D+02 0.1530466282265D+02 + 0.1510917653451D+02 0.1490762998916D+02 0.1470044547022D+02 0.1448806443791D+02 + 0.1427094628160D+02 0.1404956698852D+02 0.1382441773199D+02 0.1359600338336D+02 + 0.1336484095192D+02 0.1313145795774D+02 0.1289639074258D+02 0.1266018272468D+02 + 0.1242338260337D+02 0.1218654252002D+02 0.1195021618209D+02 0.1171495695744D+02 + 0.1148131594627D+02 0.1124984003849D+02 0.1102106996440D+02 0.1079553834688D+02 + 0.1057376776347D+02 0.1035626882667D+02 0.1014353829125D+02 0.9936057196884D+01 + 0.9734289054994D+01 0.9538678088120D+01 0.9349647530399D+01 0.9167597997384D+01 + 0.8992905933301D+01 0.8825922143594D+01 0.8666970420224D+01 0.8516346266999D+01 + 0.8374315731611D+01 0.8241114350747D+01 0.8116946214096D+01 0.8001983152570D+01 + 0.7896364055459D+01 0.7800194320670D+01 0.7713545441561D+01 0.7636454733225D+01 + 0.7568925200401D+01 0.7510925548528D+01 0.7462390338698D+01 0.7423220286625D+01 + 0.7393282704950D+01 0.7372412087556D+01 0.7360410833787D+01 0.7357050109802D+01 + 0.7362070843542D+01 0.7375184849138D+01 0.7396076075866D+01 0.7424401976120D+01 + 0.7459794986211D+01 0.7501864113185D+01 0.7550196620265D+01 0.7604359802945D+01 + 0.7663902847256D+01 0.7728358761219D+01 0.7797246370063D+01 0.7870072365405D+01 + 0.7946333398216D+01 0.8025518205140D+01 0.8107109757504D+01 0.8190587422172D+01 + 0.8275429123337D+01 0.8361113494303D+01 0.8447122008353D+01 0.8532941077928D+01 + 0.8618064111536D+01 0.8701993518075D+01 0.8784242648578D+01 0.8864337665829D+01 + 0.8941819332731D+01 0.9016244710878D+01 0.9087188761372D+01 0.9154245840560D+01 + 0.9217031084099D+01 0.9275181673474D+01 0.9328357979881D+01 0.9376244581215D+01 + 0.9418551148709D+01 0.9455013200639D+01 0.9485392721360D+01 0.9509478644797D+01 + 0.9527087202359D+01 0.9538062136102D+01 0.9542274778747D+01 0.9539624002998D+01 + 0.9530036043300D+01 0.9513464193959D+01 0.9489888388159D+01 0.9459314663078D+01 + 0.9421774516843D+01 0.9377324163609D+01 0.9326043693467D+01 0.9268036144314D+01 + 0.9203426493115D+01 0.9132360574297D+01 0.9055003933175D+01 0.8971540622481D+01 + 0.8882171950151D+01 0.8787115186520D+01 0.8686602239071D+01 0.8580878302773D+01 + 0.8470200493895D+01 0.8354836475027D+01 0.8235063078754D+01 0.8111164937189D+01 + 0.7983433124252D+01 0.7852163817216D+01 0.7717656983696D+01 0.7580215099831D+01 + 0.7440141905014D+01 0.7297741198086D+01 0.7153315679440D+01 0.7007165843079D+01 + 0.6859588922166D+01 0.6710877891167D+01 0.6561320527250D+01 0.6411198533128D+01 + 0.6260786723101D+01 0.6110352273646D+01 0.5960154039458D+01 0.5810441935471D+01 + 0.5661456384987D+01 0.5513427833700D+01 0.5366576329042D+01 0.5221111163955D+01 + 0.5077230583918D+01 0.4935121555751D+01 0.4794959596475D+01 0.4656908660288D+01 + 0.4521121081498D+01 0.4387737571052D+01 0.4256887264186D+01 0.4128687816522D+01 + 0.4003245545873D+01 0.3880655616880D+01 0.3761002265561D+01 0.3644359060777D+01 + 0.3530789199588D+01 0.3420345833472D+01 0.3313072422343D+01 0.3209003113371D+01 + 0.3108163141592D+01 0.3010569249384D+01 0.2916230121919D+01 0.2825146835796D+01 + 0.2737313318133D+01 0.2652716813508D+01 0.2571338356232D+01 0.2493153245580D+01 + 0.2418131521695D+01 0.2346238440047D+01 0.2277434942461D+01 0.2211678122838D+01 + 0.2148921685899D+01 0.2089116397376D+01 0.2032210524266D+01 0.1978150263893D+01 + 0.1926880160684D+01 0.1878343509721D+01 0.1832482746269D+01 0.1789239820638D+01 + 0.1748556557871D+01 0.1710375001879D+01 0.1674637743804D+01 0.1641288234472D+01 + 0.1610271080956D+01 0.1581532327338D+01 0.1555019719890D+01 0.1530682956958D+01 + 0.1508473923914D+01 0.1488346913611D+01 0.1470258832820D+01 0.1454169395155D+01 + 0.1440041301042D+01 0.1427840405245D+01 0.1417535872504D+01 0.1409100321753D+01 + 0.1402509959377D+01 0.1397744701874D+01 0.1394788288181D+01 0.1393628381826D+01 + 0.1394256662892D+01 0.1396668909610D+01 0.1400865069190D+01 0.1406849317222D+01 + 0.1414629369614D+01 0.1424336942263D+01 0.1436096575202D+01 0.1449912447024D+01 + 0.1465794674727D+01 0.1483759333931D+01 0.1503828494539D+01 0.1526030271798D+01 + 0.1550398892649D+01 0.1576974777196D+01 0.1605804635055D+01 0.1636941576215D+01 + 7 1012 + 1 0 -1 -511.89194 + 2 0 -1 -58.90181 + 2 1 1 -50.68932 + 2 1 -2 -49.77537 + 3 0 -1 -5.73317 + 3 1 1 -3.34334 + 3 1 -2 -3.22919 + 0.2122975645015D-04 0.2173507709867D-04 0.2225242316243D-04 0.2278208072829D-04 + 0.2332434268594D-04 0.2387950888954D-04 0.2444788632325D-04 0.2502978927059D-04 + 0.2562553948791D-04 0.2623546638192D-04 0.2685990719144D-04 0.2749920717353D-04 + 0.2815371979393D-04 0.2882380692207D-04 0.2950983903075D-04 0.3021219540050D-04 + 0.3093126432877D-04 0.3166744334418D-04 0.3242113942573D-04 0.3319276922733D-04 + 0.3398275930755D-04 0.3479154636487D-04 0.3561957747857D-04 0.3646731035519D-04 + 0.3733521358096D-04 0.3822376688016D-04 0.3913346137963D-04 0.4006479987955D-04 + 0.4101829713060D-04 0.4199448011777D-04 0.4299388835081D-04 0.4401707416166D-04 + 0.4506460300883D-04 0.4613705378910D-04 0.4723501915650D-04 0.4835910584899D-04 + 0.4950993502270D-04 0.5068814259429D-04 0.5189437959126D-04 0.5312931251066D-04 + 0.5439362368626D-04 0.5568801166444D-04 0.5701319158897D-04 0.5836989559491D-04 + 0.5975887321186D-04 0.6118089177673D-04 0.6263673685632D-04 0.6412721267990D-04 + 0.6565314258201D-04 0.6721536945580D-04 0.6881475621705D-04 0.7045218627922D-04 + 0.7212856403973D-04 0.7384481537777D-04 0.7560188816385D-04 0.7740075278149D-04 + 0.7924240266119D-04 0.8112785482706D-04 0.8305815045642D-04 0.8503435545263D-04 + 0.8705756103141D-04 0.8912888432116D-04 0.9124946897738D-04 0.9342048581165D-04 + 0.9564313343555D-04 0.9791863891974D-04 0.1002482584687D-03 0.1026332781112D-03 + 0.1050750144077D-03 0.1075748151735D-03 0.1101340602203D-03 0.1127541621137D-03 + 0.1154365669501D-03 0.1181827551510D-03 0.1209942422769D-03 0.1238725798590D-03 + 0.1268193562527D-03 0.1298361975089D-03 0.1329247682680D-03 0.1360867726735D-03 + 0.1393239553083D-03 0.1426381021518D-03 0.1460310415612D-03 0.1495046452749D-03 + 0.1530608294397D-03 0.1567015556625D-03 0.1604288320871D-03 0.1642447144955D-03 + 0.1681513074364D-03 0.1721507653792D-03 0.1762452938963D-03 0.1804371508722D-03 + 0.1847286477421D-03 0.1891221507592D-03 0.1936200822920D-03 0.1982249221522D-03 + 0.2029392089542D-03 0.2077655415060D-03 0.2127065802334D-03 0.2177650486382D-03 + 0.2229437347894D-03 0.2282454928513D-03 0.2336732446459D-03 0.2392299812538D-03 + 0.2449187646513D-03 0.2507427293871D-03 0.2567050842979D-03 0.2628091142650D-03 + 0.2690581820118D-03 0.2754557299435D-03 0.2820052820308D-03 0.2887104457371D-03 + 0.2955749139921D-03 0.3026024672103D-03 0.3097969753590D-03 0.3171624000731D-03 + 0.3247027968207D-03 0.3324223171196D-03 0.3403252108055D-03 0.3484158283536D-03 + 0.3566986232552D-03 0.3651781544500D-03 0.3738590888149D-03 0.3827462037126D-03 + 0.3918443895988D-03 0.4011586526914D-03 0.4106941177020D-03 0.4204560306321D-03 + 0.4304497616342D-03 0.4406808079408D-03 0.4511547968612D-03 0.4618774888502D-03 + 0.4728547806468D-03 0.4840927084883D-03 0.4955974513988D-03 0.5073753345551D-03 + 0.5194328327314D-03 0.5317765738249D-03 0.5444133424641D-03 0.5573500837015D-03 + 0.5705939067925D-03 0.5841520890639D-03 0.5980320798714D-03 0.6122415046513D-03 + 0.6267881690659D-03 0.6416800632466D-03 0.6569253661363D-03 0.6725324499326D-03 + 0.6885098846360D-03 0.7048664427037D-03 0.7216111038125D-03 0.7387530597330D-03 + 0.7563017193176D-03 0.7742667136049D-03 0.7926579010441D-03 0.8114853728404D-03 + 0.8307594584254D-03 0.8504907310562D-03 0.8706900135433D-03 0.8913683841142D-03 + 0.9125371824119D-03 0.9342080156346D-03 0.9563927648179D-03 0.9791035912634D-03 + 0.1002352943117D-02 0.1026153562102D-02 0.1050518490405D-02 0.1075461077728D-02 + 0.1100994988496D-02 0.1127134209246D-02 0.1153893056171D-02 0.1181286182852D-02 + 0.1209328588167D-02 0.1238035624379D-02 0.1267423005415D-02 0.1297506815344D-02 + 0.1328303517037D-02 0.1359829961041D-02 0.1392103394654D-02 0.1425141471212D-02 + 0.1458962259585D-02 0.1493584253904D-02 0.1529026383504D-02 0.1565308023106D-02 + 0.1602449003221D-02 0.1640469620811D-02 0.1679390650189D-02 0.1719233354165D-02 + 0.1760019495464D-02 0.1801771348394D-02 0.1844511710794D-02 0.1888263916250D-02 + 0.1933051846599D-02 0.1978899944720D-02 0.2025833227614D-02 0.2073877299798D-02 + 0.2123058366995D-02 0.2173403250151D-02 0.2224939399761D-02 0.2277694910540D-02 + 0.2331698536421D-02 0.2386979705903D-02 0.2443568537747D-02 0.2501495857040D-02 + 0.2560793211623D-02 0.2621492888896D-02 0.2683627933011D-02 0.2747232162458D-02 + 0.2812340188056D-02 0.2878987431352D-02 0.2947210143447D-02 0.3017045424251D-02 + 0.3088531242177D-02 0.3161706454285D-02 0.3236610826892D-02 0.3313285056646D-02 + 0.3391770792086D-02 0.3472110655691D-02 0.3554348266436D-02 0.3638528262858D-02 + 0.3724696326649D-02 0.3812899206788D-02 0.3903184744224D-02 0.3995601897109D-02 + 0.4090200766624D-02 0.4187032623373D-02 0.4286149934389D-02 0.4387606390746D-02 + 0.4491456935804D-02 0.4597757794082D-02 0.4706566500803D-02 0.4817941932088D-02 + 0.4931944335851D-02 0.5048635363379D-02 0.5168078101634D-02 0.5290337106279D-02 + 0.5415478435454D-02 0.5543569684307D-02 0.5674680020311D-02 0.5808880219367D-02 + 0.5946242702730D-02 0.6086841574754D-02 0.6230752661494D-02 0.6378053550168D-02 + 0.6528823629508D-02 0.6683144131013D-02 0.6841098171130D-02 0.7002770794372D-02 + 0.7168249017405D-02 0.7337621874121D-02 0.7510980461712D-02 0.7688417987773D-02 + 0.7870029818463D-02 0.8055913527720D-02 0.8246168947593D-02 0.8440898219673D-02 + 0.8640205847678D-02 0.8844198751201D-02 0.9052986320644D-02 0.9266680473381D-02 + 0.9485395711148D-02 0.9709249178711D-02 0.9938360723829D-02 0.1017285295853D-01 + 0.1041285132175D-01 0.1065848414335D-01 0.1090988270951D-01 0.1116718132961D-01 + 0.1143051740455D-01 0.1170003149653D-01 0.1197586740047D-01 0.1225817221684D-01 + 0.1254709642620D-01 0.1284279396532D-01 0.1314542230495D-01 0.1345514252930D-01 + 0.1377211941725D-01 0.1409652152530D-01 0.1442852127232D-01 0.1476829502620D-01 + 0.1511602319226D-01 0.1547189030365D-01 0.1583608511371D-01 0.1620880069022D-01 + 0.1659023451183D-01 0.1698058856639D-01 0.1738006945154D-01 0.1778888847734D-01 + 0.1820726177118D-01 0.1863541038486D-01 0.1907356040402D-01 0.1952194305980D-01 + 0.1998079484302D-01 0.2045035762063D-01 0.2093087875471D-01 0.2142261122400D-01 + 0.2192581374792D-01 0.2244075091329D-01 0.2296769330365D-01 0.2350691763133D-01 + 0.2405870687229D-01 0.2462335040374D-01 0.2520114414469D-01 0.2579239069942D-01 + 0.2639739950387D-01 0.2701648697516D-01 0.2764997666416D-01 0.2829819941123D-01 + 0.2896149350513D-01 0.2964020484531D-01 0.3033468710740D-01 0.3104530191220D-01 + 0.3177241899806D-01 0.3251641639684D-01 0.3327768061342D-01 0.3405660680881D-01 + 0.3485359898710D-01 0.3566907018606D-01 0.3650344267166D-01 0.3735714813647D-01 + 0.3823062790211D-01 0.3912433312562D-01 0.4003872501011D-01 0.4097427501948D-01 + 0.4193146509749D-01 0.4291078789111D-01 0.4391274697832D-01 0.4493785710035D-01 + 0.4598664439858D-01 0.4705964665594D-01 0.4815741354312D-01 0.4928050686955D-01 + 0.5042950083923D-01 0.5160498231153D-01 0.5280755106696D-01 0.5403782007813D-01 + 0.5529641578584D-01 0.5658397838041D-01 0.5790116208843D-01 0.5924863546488D-01 + 0.6062708169076D-01 0.6203719887636D-01 0.6347970037015D-01 0.6495531507346D-01 + 0.6646478776099D-01 0.6800887940725D-01 0.6958836751900D-01 0.7120404647380D-01 + 0.7285672786470D-01 0.7454724085125D-01 0.7627643251682D-01 0.7804516823229D-01 + 0.7985433202641D-01 0.8170482696258D-01 0.8359757552242D-01 0.8553351999606D-01 + 0.8751362287932D-01 0.8953886727772D-01 0.9161025731761D-01 0.9372881856432D-01 + 0.9589559844749D-01 0.9811166669365D-01 0.1003781157661D+00 0.1026960613124D+00 + 0.1050666426187D+00 0.1074910230727D+00 0.1099703906329D+00 0.1125059583070D+00 + 0.1150989646366D+00 0.1177506741909D+00 0.1204623780676D+00 0.1232353944021D+00 + 0.1260710688845D+00 0.1289707752849D+00 0.1319359159864D+00 0.1349679225270D+00 + 0.1380682561490D+00 0.1412384083570D+00 0.1444799014844D+00 0.1477942892678D+00 + 0.1511831574303D+00 0.1546481242725D+00 0.1581908412731D+00 0.1618129936965D+00 + 0.1655163012104D+00 0.1693025185104D+00 0.1731734359544D+00 0.1771308802047D+00 + 0.1811767148790D+00 0.1853128412094D+00 0.1895411987104D+00 0.1938637658552D+00 + 0.1982825607598D+00 0.2027996418767D+00 0.2074171086957D+00 0.2121371024533D+00 + 0.2169618068509D+00 0.2218934487801D+00 0.2269342990569D+00 0.2320866731634D+00 + 0.2373529319974D+00 0.2427354826295D+00 0.2482367790682D+00 0.2538593230323D+00 + 0.2596056647304D+00 0.2654784036474D+00 0.2714801893389D+00 0.2776137222308D+00 + 0.2838817544268D+00 0.2902870905217D+00 0.2968325884206D+00 0.3035211601645D+00 + 0.3103557727607D+00 0.3173394490192D+00 0.3244752683937D+00 0.3317663678273D+00 + 0.3392159426028D+00 0.3468272471962D+00 0.3546035961349D+00 0.3625483648577D+00 + 0.3706649905790D+00 0.3789569731540D+00 0.3874278759464D+00 0.3960813266976D+00 + 0.4049210183955D+00 0.4139507101454D+00 0.4231742280388D+00 0.4325954660221D+00 + 0.4422183867640D+00 0.4520470225197D+00 0.4620854759931D+00 0.4723379211946D+00 + 0.4828086042953D+00 0.4935018444749D+00 0.5044220347646D+00 0.5155736428822D+00 + 0.5269612120602D+00 0.5385893618646D+00 0.5504627890040D+00 0.5625862681281D+00 + 0.5749646526146D+00 0.5876028753427D+00 0.6005059494532D+00 0.6136789690924D+00 + 0.6271271101407D+00 0.6408556309226D+00 0.6548698728981D+00 0.6691752613333D+00 + 0.6837773059493D+00 0.6986816015479D+00 0.7138938286123D+00 0.7294197538810D+00 + 0.7452652308942D+00 0.7614362005101D+00 0.7779386913894D+00 0.7947788204470D+00 + 0.8119627932680D+00 0.8294969044866D+00 0.8473875381261D+00 0.8656411678975D+00 + 0.8842643574549D+00 0.9032637606047D+00 0.9226461214683D+00 0.9424182745935D+00 + 0.9625871450140D+00 0.9831597482541D+00 0.1004143190275D+01 0.1025544667362D+01 + 0.1047371465949D+01 0.1069630962376D+01 0.1092330622582D+01 0.1115478001718D+01 + 0.1139080743699D+01 0.1163146580667D+01 0.1187683332379D+01 0.1212698905512D+01 + 0.1238201292877D+01 0.1264198572546D+01 0.1290698906886D+01 0.1317710541494D+01 + 0.1345241804028D+01 0.1373301102944D+01 0.1401896926110D+01 0.1431037839321D+01 + 0.1460732484690D+01 0.1490989578921D+01 0.1521817911461D+01 0.1553226342519D+01 + 0.1585223800953D+01 0.1617819282025D+01 0.1651021845012D+01 0.1684840610666D+01 + 0.1719284758534D+01 0.1754363524114D+01 0.1790086195862D+01 0.1826462112019D+01 + 0.1863500657290D+01 0.1901211259327D+01 0.1939603385053D+01 0.1978686536792D+01 + 0.2018470248210D+01 0.2058964080068D+01 0.2100177615772D+01 0.2142120456722D+01 + 0.2184802217451D+01 0.2228232520549D+01 0.2272420991371D+01 0.2317377252521D+01 + 0.2363110918097D+01 0.2409631587718D+01 0.2456948840298D+01 0.2505072227579D+01 + 0.2554011267414D+01 0.2603775436800D+01 0.2654374164640D+01 0.2705816824249D+01 + 0.2758112725590D+01 0.2811271107225D+01 0.2865301128002D+01 0.2920211858443D+01 + 0.2976012271854D+01 0.3032711235135D+01 0.3090317499294D+01 0.3148839689666D+01 + 0.3208286295814D+01 0.3268665661132D+01 0.3329985972130D+01 0.3392255247403D+01 + 0.3455481326284D+01 0.3519671857166D+01 0.3584834285516D+01 0.3650975841540D+01 + 0.3718103527540D+01 0.3786224104928D+01 0.3855344080910D+01 0.3925469694842D+01 + 0.3996606904248D+01 0.4068761370505D+01 0.4141938444201D+01 0.4216143150155D+01 + 0.4291380172106D+01 0.4367653837082D+01 0.4444968099432D+01 0.4523326524540D+01 + 0.4602732272224D+01 0.4683188079814D+01 0.4764696244923D+01 0.4847258607911D+01 + 0.4930876534058D+01 0.5015550895439D+01 0.5101282052526D+01 0.5188069835504D+01 + 0.5275913525340D+01 0.5364811834582D+01 0.5454762887935D+01 0.5545764202593D+01 + 0.5637812668364D+01 0.5730904527600D+01 0.5825035354930D+01 0.5920200036841D+01 + 0.6016392751096D+01 0.6113606946037D+01 0.6211835319763D+01 0.6311069799237D+01 + 0.6411301519318D+01 0.6512520801757D+01 0.6614717134178D+01 0.6717879149076D+01 + 0.6821994602856D+01 0.6927050354936D+01 0.7033032346971D+01 0.7139925582197D+01 + 0.7247714104955D+01 0.7356380980422D+01 0.7465908274590D+01 0.7576277034522D+01 + 0.7687467268944D+01 0.7799457929201D+01 0.7912226890625D+01 0.8025750934367D+01 + 0.8140005729731D+01 0.8254965817070D+01 0.8370604591283D+01 0.8486894285977D+01 + 0.8603805958343D+01 0.8721309474805D+01 0.8839373497487D+01 0.8957965471583D+01 + 0.9077051613664D+01 0.9196596901005D+01 0.9316565061973D+01 0.9436918567578D+01 + 0.9557618624205D+01 0.9678625167647D+01 0.9799896858462D+01 0.9921391078761D+01 + 0.1004306393048D+02 0.1016487023519D+02 0.1028676353561D+02 0.1040869609872D+02 + 0.1053061892078D+02 0.1065248173410D+02 0.1077423301584D+02 0.1089581999877D+02 + 0.1101718868413D+02 0.1113828385666D+02 0.1125904910191D+02 0.1137942682584D+02 + 0.1149935827678D+02 0.1161878356999D+02 0.1173764171462D+02 0.1185587064341D+02 + 0.1197340724503D+02 0.1209018739920D+02 0.1220614601465D+02 0.1232121706995D+02 + 0.1243533365740D+02 0.1254842802982D+02 0.1266043165050D+02 0.1277127524634D+02 + 0.1288088886404D+02 0.1298920192971D+02 0.1309614331160D+02 0.1320164138629D+02 + 0.1330562410812D+02 0.1340801908212D+02 0.1350875364026D+02 0.1360775492116D+02 + 0.1370494995324D+02 0.1380026574132D+02 0.1389362935662D+02 0.1398496803019D+02 + 0.1407420924981D+02 0.1416128086012D+02 0.1424611116627D+02 0.1432862904069D+02 + 0.1440876403324D+02 0.1448644648440D+02 0.1456160764164D+02 0.1463417977876D+02 + 0.1470409631813D+02 0.1477129195572D+02 0.1483570278883D+02 0.1489726644633D+02 + 0.1495592222127D+02 0.1501161120574D+02 0.1506427642781D+02 0.1511386299027D+02 + 0.1516031821110D+02 0.1520359176531D+02 0.1524363582812D+02 0.1528040521898D+02 + 0.1531385754641D+02 0.1534395335325D+02 0.1537065626208D+02 0.1539393312048D+02 + 0.1541375414585D+02 0.1543009306950D+02 0.1544292727951D+02 0.1545223796216D+02 + 0.1545801024155D+02 0.1546023331695D+02 0.1545890059744D+02 0.1545400983365D+02 + 0.1544556324596D+02 0.1543356764880D+02 0.1541803457065D+02 0.1539898036925D+02 + 0.1537642634154D+02 0.1535039882796D+02 0.1532092931044D+02 0.1528805450387D+02 + 0.1525181644030D+02 0.1521226254557D+02 0.1516944570778D+02 0.1512342433713D+02 + 0.1507426241669D+02 0.1502202954350D+02 0.1496680095964D+02 0.1490865757272D+02 + 0.1484768596530D+02 0.1478397839284D+02 0.1471763276969D+02 0.1464875264266D+02 + 0.1457744715182D+02 0.1450383097801D+02 0.1442802427679D+02 0.1435015259838D+02 + 0.1427034679327D+02 0.1418874290321D+02 0.1410548203722D+02 0.1402071023247D+02 + 0.1393457829969D+02 0.1384724165293D+02 0.1375886012364D+02 0.1366959775879D+02 + 0.1357962260304D+02 0.1348910646488D+02 0.1339822466686D+02 0.1330715577980D+02 + 0.1321608134121D+02 0.1312518555808D+02 0.1303465499419D+02 0.1294467824221D+02 + 0.1285544558101D+02 0.1276714861841D+02 0.1267997991994D+02 0.1259413262403D+02 + 0.1250980004419D+02 0.1242717525885D+02 0.1234645068948D+02 0.1226781766776D+02 + 0.1219146599257D+02 0.1211758347770D+02 0.1204635549121D+02 0.1197796448732D+02 + 0.1191258953197D+02 0.1185040582321D+02 0.1179158420730D+02 0.1173629069208D+02 + 0.1168468595856D+02 0.1163692487226D+02 0.1159315599549D+02 0.1155352110209D+02 + 0.1151815469598D+02 0.1148718353503D+02 0.1146072616178D+02 0.1143889244247D+02 + 0.1142178311602D+02 0.1140948935454D+02 0.1140209233686D+02 0.1139966283678D+02 + 0.1140226082774D+02 0.1140993510519D+02 0.1142272292875D+02 0.1144064968524D+02 + 0.1146372857460D+02 0.1149196031991D+02 0.1152533290326D+02 0.1156382132880D+02 + 0.1160738741454D+02 0.1165597961412D+02 0.1170953287012D+02 0.1176796849989D+02 + 0.1183119411535D+02 0.1189910357777D+02 0.1197157698856D+02 0.1204848071701D+02 + 0.1212966746596D+02 0.1221497637600D+02 0.1230423316888D+02 0.1239725033077D+02 + 0.1249382733567D+02 0.1259375090926D+02 0.1269679533346D+02 0.1280272279167D+02 + 0.1291128375448D+02 0.1302221740584D+02 0.1313525210912D+02 0.1325010591253D+02 + 0.1336648709337D+02 0.1348409474012D+02 0.1360261937149D+02 0.1372174359123D+02 + 0.1384114277758D+02 0.1396048580566D+02 0.1407943580155D+02 0.1419765092608D+02 + 0.1431478518661D+02 0.1443048927478D+02 0.1454441142812D+02 0.1465619831308D+02 + 0.1476549592746D+02 0.1487195051928D+02 0.1497520951989D+02 0.1507492248828D+02 + 0.1517074206398D+02 0.1526232492551D+02 0.1534933275145D+02 0.1543143318112D+02 + 0.1550830077157D+02 0.1557961794797D+02 0.1564507594396D+02 0.1570437572881D+02 + 0.1575722891823D+02 0.1580335866539D+02 0.1584250052899D+02 0.1587440331524D+02 + 0.1589882989033D+02 0.1591555796049D+02 0.1592438081630D+02 0.1592510803844D+02 + 0.1591756616179D+02 0.1590159929512D+02 0.1587706969359D+02 0.1584385828154D+02 + 0.1580186512290D+02 0.1575100983720D+02 0.1569123195871D+02 0.1562249123695D+02 + 0.1554476787665D+02 0.1545806271560D+02 0.1536239733893D+02 0.1525781412875D+02 + 0.1514437624809D+02 0.1502216755847D+02 0.1489129247063D+02 0.1475187572813D+02 + 0.1460406212401D+02 0.1444801615062D+02 0.1428392158332D+02 0.1411198099888D+02 + 0.1393241522964D+02 0.1374546275490D+02 0.1355137903119D+02 0.1335043576333D+02 + 0.1314292011864D+02 0.1292913388664D+02 0.1270939258714D+02 0.1248402452972D+02 + 0.1225336982785D+02 0.1201777937125D+02 0.1177761376017D+02 0.1153324220569D+02 + 0.1128504140014D+02 0.1103339436205D+02 0.1077868926027D+02 0.1052131822179D+02 + 0.1026167612835D+02 0.1000015940663D+02 0.9737164817090D+01 0.9473088246666D+01 + 0.9208323510392D+01 0.8943261167138D+01 0.8678287354606D+01 0.8413782648689D+01 + 0.8150120952198D+01 0.7887668417870D+01 0.7626782410424D+01 0.7367810512255D+01 + 0.7111089577147D+01 0.6856944836175D+01 0.6605689059620D+01 0.6357621778576D+01 + 0.6113028569417D+01 0.5872180404071D+01 0.5635333068605D+01 0.5402726652271D+01 + 0.5174585108689D+01 0.4951115890458D+01 0.4732509658013D+01 0.4518940063093D+01 + 0.4310563606744D+01 0.4107519571314D+01 0.3909930025455D+01 0.3717899900701D+01 + 0.3531517137795D+01 0.3350852900521D+01 0.3175961854415D+01 0.3006882507418D+01 + 0.2843637609166D+01 0.2686234605393D+01 0.2534666143602D+01 0.2388910626020D+01 + 0.2248932805599D+01 0.2114684420764D+01 0.1986104864410D+01 0.1863121882663D+01 + 0.1745652298807D+01 0.1633602757816D+01 0.1526870486911D+01 0.1425344067651D+01 + 0.1328904215091D+01 0.1237424559686D+01 0.1150772427713D+01 0.1068809616148D+01 + 0.9913931580887D+00 0.9183760750247D+00 0.8496081124357D+00 0.7849364554513D+00 + 0.7242064215293D+00 0.6672621273712D+00 0.6139471275574D+00 0.5641050226618D+00 + 0.5175800348878D+00 0.4742175495586D+00 0.4338646210828D+00 0.3963704423129D+00 + 0.3615867764997D+00 0.3293683513354D+00 0.2995732148544D+00 0.2720630532321D+00 + 0.2467034707815D+00 0.2233642326902D+00 0.2019194712763D+00 0.1822478567499D+00 + 0.1642327336682D+00 0.1477622244444D+00 0.1327293014336D+00 0.1190318292464D+00 + 0.1065725790655D+00 0.9525921682581D-01 0.8500426719540D-01 0.7572505534570D-01 + 0.6734362852856D-01 0.5978665949119D-01 0.5298533375213D-01 0.4687522273735D-01 + 0.4139614473480D-01 0.3649201557103D-01 0.3211069084453D-01 0.2820380147099D-01 + 0.2472658420543D-01 0.2163770870794D-01 0.1889910261478D-01 0.1647577596641D-01 + 0.1433564623066D-01 0.1244936504301D-01 0.1079014767040D-01 0.9333606088531D-02 + 0.8057586449521D-02 0.6942011605538D-02 0.5968729247262D-02 0.5121366113861D-02 + 0.4385188634413D-02 0.3746970269980D-02 0.3194865741265D-02 0.2718292249293D-02 + 0.2307817726031D-02 0.1955056088404D-02 0.1652569412799D-02 0.1393776897745D-02 + 0.1172870439853D-02 0.9847366120634D-03 0.8248848034661D-03 0.6893812560569D-03 + 0.5747887154298D-03 0.4781113990982D-03 0.3967449774979D-03 0.3284312582634D-03 + 0.2712172636576D-03 0.2234183935981D-03 0.1835853721449D-03 0.1504746831443D-03 + 0.1230222105786D-03 0.1003198106540D-03 0.8159455542106D-04 0.6619040144209D-04 + 0.5355205138722D-04 0.4321079120846D-04 0.3477210045803D-04 0.2790484818898D-04 + 0.2233190152246D-04 0.1782198824118D-04 0.1418266855132D-04 0.1125428434880D-04 + 0.8904766856498D-05 0.7025195313453D-05 0.5526010459652D-05 0.4333796852085D-05 + 0.3388557563637D-05 0.2641413563333D-05 0.2052668070841D-05 0.1590183444862D-05 + 0.1228024735392D-05 0.9453299398051D-06 0.7253722919424D-06 0.5547846237125D-06 + 0.4229200131023D-06 0.3213266143727D-06 0.2433177983142D-06 0.1836215545666D-06 + 0.1380955642703D-06 0.1034964778941D-06 0.7729376586493D-07 0.5752008209307D-07 + 0.4265142355148D-07 0.3151151106808D-07 0.2319578320089D-07 0.1701120974173D-07 + 0.1242881489534D-07 0.9046371073667D-08 0.6559198960071D-08 0.4737402476978D-08 + 0.3408191153158D-08 0.2442208093542D-08 0.1742998768590D-08 0.1238932286038D-08 + 0.8770296193333D-09 0.6182683290111D-09 0.4340255982013D-09 0.3033950772413D-09 + 0.2111715589818D-09 0.1463438404983D-09 0.1009726185101D-09 0.6935859066118D-10 + 0.4742849271888D-10 0.3228488955626D-10 0.2187547853929D-10 0.1475212866899D-10 + 0.9901881750809D-11 0.6613860882122D-11 0.4396644350124D-11 0.2908650000322D-11 + 0.1914873227728D-11 0.1254415200484D-11 0.8176535094916D-12 0.5302708391854D-12 + 0.3421370551355D-12 0.2196087836422D-12 0.1402231518601D-12 0.8906014768602D-13 + LSMS: xx z= 26. xvalws= 2.77074 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728402963D+02-0.5199725117641D+02-0.5199721792578D+02-0.5199718427293D+02 +-0.5199715021300D+02-0.5199711574107D+02-0.5199708085214D+02-0.5199704554119D+02 +-0.5199700980309D+02-0.5199697363268D+02-0.5199693702474D+02-0.5199689997397D+02 +-0.5199686247500D+02-0.5199682452243D+02-0.5199678611076D+02-0.5199674723444D+02 +-0.5199670788785D+02-0.5199666806529D+02-0.5199662776101D+02-0.5199658696918D+02 +-0.5199654568390D+02-0.5199650389922D+02-0.5199646160907D+02-0.5199641880734D+02 +-0.5199637548785D+02-0.5199633164434D+02-0.5199628727046D+02-0.5199624235979D+02 +-0.5199619690585D+02-0.5199615090205D+02-0.5199610434176D+02-0.5199605721822D+02 +-0.5199600952464D+02-0.5199596125410D+02-0.5199591239964D+02-0.5199586295419D+02 +-0.5199581291060D+02-0.5199576226162D+02-0.5199571099994D+02-0.5199565911815D+02 +-0.5199560660874D+02-0.5199555346411D+02-0.5199549967658D+02-0.5199544523837D+02 +-0.5199539014162D+02-0.5199533437834D+02-0.5199527794048D+02-0.5199522081989D+02 +-0.5199516300828D+02-0.5199510449731D+02-0.5199504527851D+02-0.5199498534331D+02 +-0.5199492468306D+02-0.5199486328897D+02-0.5199480115217D+02-0.5199473826367D+02 +-0.5199467461436D+02-0.5199461019507D+02-0.5199454499646D+02-0.5199447900910D+02 +-0.5199441222344D+02-0.5199434462984D+02-0.5199427621849D+02-0.5199420697954D+02 +-0.5199413690295D+02-0.5199406597858D+02-0.5199399419618D+02-0.5199392154537D+02 +-0.5199384801563D+02-0.5199377359634D+02-0.5199369827672D+02-0.5199362204589D+02 +-0.5199354489281D+02-0.5199346680633D+02-0.5199338777515D+02-0.5199330778784D+02 +-0.5199322683282D+02-0.5199314489839D+02-0.5199306197270D+02-0.5199297804374D+02 +-0.5199289309939D+02-0.5199280712733D+02-0.5199272011516D+02-0.5199263205027D+02 +-0.5199254291992D+02-0.5199245271123D+02-0.5199236141114D+02-0.5199226900644D+02 +-0.5199217548376D+02-0.5199208082958D+02-0.5199198503019D+02-0.5199188807175D+02 +-0.5199178994021D+02-0.5199169062139D+02-0.5199159010092D+02-0.5199148836424D+02 +-0.5199138539665D+02-0.5199128118323D+02-0.5199117570892D+02-0.5199106895845D+02 +-0.5199096091638D+02-0.5199085156707D+02-0.5199074089471D+02-0.5199062888326D+02 +-0.5199051551654D+02-0.5199040077813D+02-0.5199028465143D+02-0.5199016711964D+02 +-0.5199004816574D+02-0.5198992777253D+02-0.5198980592257D+02-0.5198968259824D+02 +-0.5198955778170D+02-0.5198943145487D+02-0.5198930359948D+02-0.5198917419701D+02 +-0.5198904322875D+02-0.5198891067574D+02-0.5198877651879D+02-0.5198864073848D+02 +-0.5198850331517D+02-0.5198836422896D+02-0.5198822345972D+02-0.5198808098707D+02 +-0.5198793679039D+02-0.5198779084882D+02-0.5198764314123D+02-0.5198749364622D+02 +-0.5198734234217D+02-0.5198718920716D+02-0.5198703421905D+02-0.5198687735537D+02 +-0.5198671859343D+02-0.5198655791024D+02-0.5198639528254D+02-0.5198623068679D+02 +-0.5198606409915D+02-0.5198589549550D+02-0.5198572485143D+02-0.5198555214224D+02 +-0.5198537734293D+02-0.5198520042816D+02-0.5198502137235D+02-0.5198484014954D+02 +-0.5198465673351D+02-0.5198447109769D+02-0.5198428321519D+02-0.5198409305883D+02 +-0.5198390060104D+02-0.5198370581396D+02-0.5198350866939D+02-0.5198330913876D+02 +-0.5198310719319D+02-0.5198290280341D+02-0.5198269593983D+02-0.5198248657249D+02 +-0.5198227467106D+02-0.5198206020484D+02-0.5198184314277D+02-0.5198162345340D+02 +-0.5198140110492D+02-0.5198117606510D+02-0.5198094830136D+02-0.5198071778068D+02 +-0.5198048446968D+02-0.5198024833454D+02-0.5198000934107D+02-0.5197976745462D+02 +-0.5197952264015D+02-0.5197927486220D+02-0.5197902408485D+02-0.5197877027176D+02 +-0.5197851338615D+02-0.5197825339081D+02-0.5197799024804D+02-0.5197772391971D+02 +-0.5197745436723D+02-0.5197718155151D+02-0.5197690543304D+02-0.5197662597177D+02 +-0.5197634312720D+02-0.5197605685833D+02-0.5197576712367D+02-0.5197547388122D+02 +-0.5197517708846D+02-0.5197487670236D+02-0.5197457267938D+02-0.5197426497542D+02 +-0.5197395354589D+02-0.5197363834563D+02-0.5197331932893D+02-0.5197299644952D+02 +-0.5197266966059D+02-0.5197233891476D+02-0.5197200416404D+02-0.5197166535990D+02 +-0.5197132245319D+02-0.5197097539418D+02-0.5197062413252D+02-0.5197026861727D+02 +-0.5196990879687D+02-0.5196954461909D+02-0.5196917603112D+02-0.5196880297948D+02 +-0.5196842541005D+02-0.5196804326804D+02-0.5196765649801D+02-0.5196726504383D+02 +-0.5196686884871D+02-0.5196646785514D+02-0.5196606200494D+02-0.5196565123919D+02 +-0.5196523549829D+02-0.5196481472189D+02-0.5196438884890D+02-0.5196395781753D+02 +-0.5196352156518D+02-0.5196308002855D+02-0.5196263314350D+02-0.5196218084518D+02 +-0.5196172306789D+02-0.5196125974518D+02-0.5196079080977D+02-0.5196031619354D+02 +-0.5195983582758D+02-0.5195934964214D+02-0.5195885756657D+02-0.5195835952942D+02 +-0.5195785545834D+02-0.5195734528011D+02-0.5195682892060D+02-0.5195630630481D+02 +-0.5195577735679D+02-0.5195524199969D+02-0.5195470015573D+02-0.5195415174616D+02 +-0.5195359669127D+02-0.5195303491041D+02-0.5195246632192D+02-0.5195189084316D+02 +-0.5195130839046D+02-0.5195071887917D+02-0.5195012222358D+02-0.5194951833693D+02 +-0.5194890713143D+02-0.5194828851819D+02-0.5194766240726D+02-0.5194702870759D+02 +-0.5194638732701D+02-0.5194573817222D+02-0.5194508114882D+02-0.5194441616121D+02 +-0.5194374311266D+02-0.5194306190525D+02-0.5194237243986D+02-0.5194167461616D+02 +-0.5194096833262D+02-0.5194025348643D+02-0.5193952997356D+02-0.5193879768871D+02 +-0.5193805652527D+02-0.5193730637535D+02-0.5193654712973D+02-0.5193577867788D+02 +-0.5193500090790D+02-0.5193421370652D+02-0.5193341695911D+02-0.5193261054963D+02 +-0.5193179436061D+02-0.5193096827316D+02-0.5193013216694D+02-0.5192928592013D+02 +-0.5192842940944D+02-0.5192756251004D+02-0.5192668509561D+02-0.5192579703828D+02 +-0.5192489820860D+02-0.5192398847556D+02-0.5192306770652D+02-0.5192213576726D+02 +-0.5192119252189D+02-0.5192023783287D+02-0.5191927156096D+02-0.5191829356524D+02 +-0.5191730370307D+02-0.5191630183005D+02-0.5191528780001D+02-0.5191426146503D+02 +-0.5191322267532D+02-0.5191217127930D+02-0.5191110712354D+02-0.5191003005272D+02 +-0.5190893990959D+02-0.5190783653503D+02-0.5190671976795D+02-0.5190558944528D+02 +-0.5190444540195D+02-0.5190328747089D+02-0.5190211548297D+02-0.5190092926700D+02 +-0.5189972864968D+02-0.5189851345560D+02-0.5189728350719D+02-0.5189603862472D+02 +-0.5189477862625D+02-0.5189350332759D+02-0.5189221254235D+02-0.5189090608179D+02 +-0.5188958375491D+02-0.5188824536834D+02-0.5188689072635D+02-0.5188551963080D+02 +-0.5188413188114D+02-0.5188272727435D+02-0.5188130560492D+02-0.5187986666482D+02 +-0.5187841024347D+02-0.5187693612772D+02-0.5187544410178D+02-0.5187393394724D+02 +-0.5187240544300D+02-0.5187085836524D+02-0.5186929248740D+02-0.5186770758014D+02 +-0.5186610341132D+02-0.5186447974591D+02-0.5186283634606D+02-0.5186117297093D+02 +-0.5185948937678D+02-0.5185778531685D+02-0.5185606054135D+02-0.5185431479744D+02 +-0.5185254782916D+02-0.5185075937741D+02-0.5184894917991D+02-0.5184711697117D+02 +-0.5184526248242D+02-0.5184338544160D+02-0.5184148557330D+02-0.5183956259875D+02 +-0.5183761623572D+02-0.5183564619854D+02-0.5183365219802D+02-0.5183163394142D+02 +-0.5182959113240D+02-0.5182752347098D+02-0.5182543065350D+02-0.5182331237255D+02 +-0.5182116831697D+02-0.5181899817174D+02-0.5181680161800D+02-0.5181457833297D+02 +-0.5181232798987D+02-0.5181005025795D+02-0.5180774480235D+02-0.5180541128413D+02 +-0.5180304936016D+02-0.5180065868310D+02-0.5179823890134D+02-0.5179578965895D+02 +-0.5179331059564D+02-0.5179080134665D+02-0.5178826154277D+02-0.5178569081025D+02 +-0.5178308877073D+02-0.5178045504121D+02-0.5177778923399D+02-0.5177509095659D+02 +-0.5177235981171D+02-0.5176959539717D+02-0.5176679730585D+02-0.5176396512563D+02 +-0.5176109843930D+02-0.5175819682457D+02-0.5175525985390D+02-0.5175228709457D+02 +-0.5174927810849D+02-0.5174623245221D+02-0.5174314967682D+02-0.5174002932792D+02 +-0.5173687094551D+02-0.5173367406395D+02-0.5173043821187D+02-0.5172716291215D+02 +-0.5172384768177D+02-0.5172049203182D+02-0.5171709546736D+02-0.5171365748739D+02 +-0.5171017758479D+02-0.5170665524617D+02-0.5170308995189D+02-0.5169948117592D+02 +-0.5169582838578D+02-0.5169213104249D+02-0.5168838860043D+02-0.5168460050732D+02 +-0.5168076620412D+02-0.5167688512494D+02-0.5167295669696D+02-0.5166898034036D+02 +-0.5166495546822D+02-0.5166088148646D+02-0.5165675779371D+02-0.5165258378128D+02 +-0.5164835883303D+02-0.5164408232529D+02-0.5163975362681D+02-0.5163537209858D+02 +-0.5163093709386D+02-0.5162644795799D+02-0.5162190402831D+02-0.5161730463415D+02 +-0.5161264909661D+02-0.5160793672858D+02-0.5160316683457D+02-0.5159833871062D+02 +-0.5159345164422D+02-0.5158850491424D+02-0.5158349779076D+02-0.5157842953502D+02 +-0.5157329939929D+02-0.5156810662682D+02-0.5156285045165D+02-0.5155753009857D+02 +-0.5155214478300D+02-0.5154669371088D+02-0.5154117607855D+02-0.5153559107266D+02 +-0.5152993787006D+02-0.5152421563767D+02-0.5151842353238D+02-0.5151256070096D+02 +-0.5150662627991D+02-0.5150061939535D+02-0.5149453916296D+02-0.5148838468777D+02 +-0.5148215506412D+02-0.5147584937554D+02-0.5146946669454D+02-0.5146300608264D+02 +-0.5145646659012D+02-0.5144984725596D+02-0.5144314710771D+02-0.5143636516137D+02 +-0.5142950042123D+02-0.5142255187982D+02-0.5141551851771D+02-0.5140839930344D+02 +-0.5140119319335D+02-0.5139389913149D+02-0.5138651604948D+02-0.5137904286634D+02 +-0.5137147848843D+02-0.5136382180931D+02-0.5135607170955D+02-0.5134822705665D+02 +-0.5134028670491D+02-0.5133224949527D+02-0.5132411425521D+02-0.5131587979859D+02 +-0.5130754492555D+02-0.5129910842232D+02-0.5129056906116D+02-0.5128192560017D+02 +-0.5127317678315D+02-0.5126432133956D+02-0.5125535798425D+02-0.5124628541740D+02 +-0.5123710232443D+02-0.5122780737574D+02-0.5121839922671D+02-0.5120887651745D+02 +-0.5119923787276D+02-0.5118948190193D+02-0.5117960719865D+02-0.5116961234085D+02 +-0.5115949589056D+02-0.5114925639380D+02-0.5113889238044D+02-0.5112840236408D+02 +-0.5111778484188D+02-0.5110703829447D+02-0.5109616118579D+02-0.5108515196301D+02 +-0.5107400905631D+02-0.5106273087889D+02-0.5105131582667D+02-0.5103976227836D+02 +-0.5102806859514D+02-0.5101623312071D+02-0.5100425418105D+02-0.5099213008436D+02 +-0.5097985912091D+02-0.5096743956297D+02-0.5095486966464D+02-0.5094214766176D+02 +-0.5092927177183D+02-0.5091624019384D+02-0.5090305110822D+02-0.5088970267672D+02 +-0.5087619304230D+02-0.5086252032900D+02-0.5084868264193D+02-0.5083467806710D+02 +-0.5082050467136D+02-0.5080616050232D+02-0.5079164358822D+02-0.5077695193792D+02 +-0.5076208354076D+02-0.5074703636655D+02-0.5073180836542D+02-0.5071639746782D+02 +-0.5070080158445D+02-0.5068501860613D+02-0.5066904640389D+02-0.5065288282874D+02 +-0.5063652571181D+02-0.5061997286414D+02-0.5060322207678D+02-0.5058627112067D+02 +-0.5056911774669D+02-0.5055175968555D+02-0.5053419464788D+02-0.5051642032411D+02 +-0.5049843438458D+02-0.5048023447945D+02-0.5046181823877D+02-0.5044318327247D+02 +-0.5042432717038D+02-0.5040524750226D+02-0.5038594181787D+02-0.5036640764694D+02 +-0.5034664249930D+02-0.5032664386488D+02-0.5030640921379D+02-0.5028593599640D+02 +-0.5026522164341D+02-0.5024426356594D+02-0.5022305915564D+02-0.5020160578474D+02 +-0.5017990080623D+02-0.5015794155393D+02-0.5013572534263D+02-0.5011324946826D+02 +-0.5009051120796D+02-0.5006750782030D+02-0.5004423654542D+02-0.5002069460521D+02 +-0.4999687920344D+02-0.4997278752603D+02-0.4994841674120D+02-0.4992376399966D+02 +-0.4989882643488D+02-0.4987360116327D+02-0.4984808528443D+02-0.4982227588141D+02 +-0.4979617002094D+02-0.4976976475371D+02-0.4974305711462D+02-0.4971604412309D+02 +-0.4968872278335D+02-0.4966109008469D+02-0.4963314300185D+02-0.4960487849528D+02 +-0.4957629351145D+02-0.4954738498327D+02-0.4951814983035D+02-0.4948858495939D+02 +-0.4945868726453D+02-0.4942845362775D+02-0.4939788091919D+02-0.4936696599757D+02 +-0.4933570571061D+02-0.4930409689534D+02-0.4927213637859D+02-0.4923982097740D+02 +-0.4920714749935D+02-0.4917411274309D+02-0.4914071349870D+02-0.4910694654815D+02 +-0.4907280866573D+02-0.4903829661848D+02-0.4900340716666D+02-0.4896813706420D+02 +-0.4893248305909D+02-0.4889644189392D+02-0.4886001030623D+02-0.4882318502909D+02 +-0.4878596279141D+02-0.4874834031849D+02-0.4871031433244D+02-0.4867188155262D+02 +-0.4863303869609D+02-0.4859378247804D+02-0.4855410961222D+02-0.4851401681140D+02 +-0.4847350078774D+02-0.4843255825325D+02-0.4839118592018D+02-0.4834938050138D+02 +-0.4830713871075D+02-0.4826445726356D+02-0.4822133287682D+02-0.4817776226967D+02 +-0.4813374216365D+02-0.4808926928306D+02-0.4804434035526D+02-0.4799895211091D+02 +-0.4795310128431D+02-0.4790678461358D+02-0.4785999884093D+02-0.4781274071282D+02 +-0.4776500698020D+02-0.4771679439861D+02-0.4766809972836D+02-0.4761891973461D+02 +-0.4756925118748D+02-0.4751909086208D+02-0.4746843553857D+02-0.4741728200213D+02 +-0.4736562704295D+02-0.4731346745620D+02-0.4726080004188D+02-0.4720762160479D+02 +-0.4715392895431D+02-0.4709971890425D+02-0.4704498827268D+02-0.4698973388163D+02 +-0.4693395255690D+02-0.4687764112767D+02-0.4682079642628D+02-0.4676341528777D+02 +-0.4670549454962D+02-0.4664703105122D+02-0.4658802163351D+02-0.4652846313853D+02 +-0.4646835240891D+02-0.4640768628735D+02-0.4634646161617D+02-0.4628467523671D+02 +-0.4622232398885D+02-0.4615940471037D+02-0.4609591423645D+02-0.4603184939910D+02 +-0.4596720702657D+02-0.4590198394276D+02-0.4583617696675D+02-0.4576978291218D+02 +-0.4570279858676D+02-0.4563522079176D+02-0.4556704632159D+02-0.4549827196328D+02 +-0.4542889449617D+02-0.4535891069156D+02-0.4528831731237D+02-0.4521711111299D+02 +-0.4514528883912D+02-0.4507284722768D+02-0.4499978300686D+02-0.4492609289624D+02 +-0.4485177360700D+02-0.4477682184233D+02-0.4470123429783D+02-0.4462500766219D+02 +-0.4454813861790D+02-0.4447062384219D+02-0.4439246000814D+02-0.4431364378589D+02 +-0.4423417184413D+02-0.4415404085174D+02-0.4407324747964D+02-0.4399178840285D+02 +-0.4390966030283D+02-0.4382685986996D+02-0.4374338380636D+02-0.4365922882888D+02 +-0.4357439167239D+02-0.4348886909331D+02-0.4340265787340D+02-0.4331575482384D+02 +-0.4322815678953D+02-0.4313986065369D+02-0.4305086334268D+02-0.4296116183110D+02 +-0.4287075314713D+02-0.4277963437808D+02-0.4268780267613D+02-0.4259525526436D+02 +-0.4250198944278D+02-0.4240800259471D+02-0.4231329219311D+02-0.4221785580702D+02 +-0.4212169110814D+02-0.4202479587724D+02-0.4192716801066D+02-0.4182880552657D+02 +-0.4172970657123D+02-0.4162986942478D+02-0.4152929250699D+02-0.4142797438248D+02 +-0.4132591376546D+02-0.4122310952415D+02-0.4111956068435D+02-0.4101526643252D+02 +-0.4091022611799D+02-0.4080443925436D+02-0.4069790551997D+02-0.4059062475744D+02 +-0.4048259697200D+02-0.4037382232884D+02-0.4026430114924D+02-0.4015403390548D+02 +-0.4004302121449D+02-0.3993126383031D+02-0.3981876263529D+02-0.3970551863000D+02 +-0.3959153292214D+02-0.3947680671418D+02-0.3936134129010D+02-0.3924513800125D+02 +-0.3912819825140D+02-0.3901052348125D+02-0.3889211515259D+02-0.3877297473220D+02 +-0.3865310367583D+02-0.3853250341248D+02-0.3841117532917D+02-0.3828912075654D+02 +-0.3816634095549D+02-0.3804283710513D+02-0.3791861029232D+02-0.3779366150300D+02 +-0.3766799161555D+02-0.3754160139636D+02-0.3741449149782D+02-0.3728666245883D+02 +-0.3715811470790D+02-0.3702884856900D+02-0.3689886427010D+02-0.3676816195438D+02 +-0.3663674169408D+02-0.3650460350690D+02-0.3637174737474D+02-0.3623817326473D+02 +-0.3610388115218D+02-0.3596887104531D+02-0.3583314301154D+02-0.3569669720495D+02 +-0.3555953389464D+02-0.3542165349386D+02-0.3528305658922D+02-0.3514374397011D+02 +-0.3500371665774D+02-0.3486297593358D+02-0.3472152336690D+02-0.3457936084122D+02 +-0.3443649057928D+02-0.3429291516643D+02-0.3414863757211D+02-0.3400366116934D+02 +-0.3385798975190D+02-0.3371162754922D+02-0.3356457923876D+02-0.3341684995570D+02 +-0.3326844530007D+02-0.3311937134098D+02-0.3296963461820D+02-0.3281924214079D+02 +-0.3266820138293D+02-0.3251652027694D+02-0.3236420720350D+02-0.3221127097903D+02 +-0.3205772084042D+02-0.3190356642710D+02-0.3174881776049D+02-0.3159348522098D+02 +-0.3143757952257D+02-0.3128111168511D+02-0.3112409300454D+02-0.3096653502093D+02 +-0.3080844948479D+02-0.3064984832153D+02-0.3049074359439D+02-0.3033114746593D+02 +-0.3017107215833D+02-0.3001052991254D+02-0.2984953294675D+02-0.2968809341400D+02 +-0.2952622335948D+02-0.2936393467762D+02-0.2920123906907D+02-0.2903814799805D+02 +-0.2887467265011D+02-0.2871082389066D+02-0.2854661222446D+02-0.2838204775647D+02 +-0.2821714015409D+02-0.2805189861135D+02-0.2788633181514D+02-0.2772044791378D+02 +-0.2755425448842D+02-0.2738775852723D+02-0.2722096640307D+02-0.2705388385454D+02 +-0.2688651597109D+02-0.2671886718221D+02-0.2655094125117D+02-0.2638274127348D+02 +-0.2621426968047D+02-0.2604552824823D+02-0.2587651811214D+02-0.2570723978730D+02 +-0.2553769319514D+02-0.2536787769632D+02-0.2519779213021D+02-0.2502743486110D+02 +-0.2485680383129D+02-0.2468589662112D+02-0.2451471051601D+02-0.2434324258050D+02 +-0.2417148973924D+02-0.2399944886481D+02-0.2382711687194D+02-0.2365449081810D+02 +-0.2348156800981D+02-0.2330834611404D+02-0.2313482327422D+02-0.2296099822964D+02 +-0.2278687043744D+02-0.2261244019567D+02-0.2243770876615D+02-0.2226267849517D+02 +-0.2208735293014D+02-0.2191173693001D+02-0.2173583676674D+02-0.2155966021537D+02 +-0.2138321662948D+02-0.2120651699903D+02-0.2102957398727D+02-0.2085240194340D+02 +-0.2067501688787D+02-0.2049743646710D+02-0.2031967987514D+02-0.2014176773999D+02 +-0.1996372197331D+02-0.1978556558301D+02-0.1960732244950D+02-0.1942901706755D+02 +-0.1925067425750D+02-0.1907231885074D+02-0.1889397535633D+02-0.1871566761696D+02 +-0.1853741846374D+02-0.1835924938052D+02-0.1818118018868D+02-0.1800322876380D+02 +-0.1782541079491D+02-0.1764773959582D+02-0.1747022597686D+02-0.1729287818264D+02 +-0.1711570189939D+02-0.1693870033244D+02-0.1676187435187D+02-0.1658522270158D+02 +-0.1640874226459D+02-0.1623242837596D+02-0.1605627517269D+02-0.1588027596970D+02 +-0.1570442365062D+02-0.1552871106216D+02-0.1535313140208D+02-0.1517767859145D+02 +-0.1500234762341D+02-0.1482713488228D+02-0.1465203842815D+02-0.1447705824363D+02 +-0.1430219644106D+02-0.1412745742929D+02-0.1395284804054D+02-0.1377837761854D+02 +-0.1360405806987D+02-0.1342990388081D+02-0.1325593210249D+02-0.1308216230731D+02 +-0.1290861651951D+02-0.1273531912305D+02-0.1256229674959D+02-0.1238957814960D+02 +-0.1221719404907D+02-0.1204517699438D+02-0.1187356118783D+02-0.1170238231558D+02 +-0.1153167737042D+02-0.1136148447069D+02-0.1119184267735D+02-0.1102279181034D+02 +-0.1085437226576D+02-0.1068662483495D+02-0.1051959052659D+02-0.1035331039265D+02 +-0.1018782535928D+02-0.1002317606321D+02-0.9859402694342D+01-0.9696544845323D+01 +-0.9534641368482D+01-0.9373730240659D+01-0.9213848436346D+01-0.9055031809511D+01 +-0.8897314984394D+01-0.8740731255549D+01-0.8585312497336D+01-0.8431089083029D+01 +-0.8278089813661D+01-0.8126341856676D+01-0.7975870694439D+01-0.7826700082584D+01 +-0.7678852018171D+01-0.7532346717566D+01-0.7387202603932D+01-0.7243436304187D+01 +-0.7101062655233D+01-0.6960094719270D+01-0.6820543807924D+01-0.6682419514939D+01 +-0.6545729757123D+01-0.6410480823229D+01-0.6276677430423D+01-0.6144322787958D+01 +-0.6013418667669D+01-0.5883965480867D+01-0.5755962361193D+01-0.5629407252975D+01 +-0.5504297004604D+01-0.5380627466436D+01-0.5258393592702D+01-0.5137589546863D+01 +-0.5018208809882D+01-0.4900244290793D+01-0.4783688438971D+01-0.4668533357470D+01 +-0.4554770916754D+01-0.4442392868124D+01-0.4331390956131D+01-0.4221757029192D+01 +-0.4113483147635D+01-0.4006561688322D+01-0.3900985445011D+01-0.3796747723533D+01 +-0.3693842430876D+01-0.3592264157211D+01-0.3492008249906D+01-0.3393070878541D+01 +-0.3295449089976D+01-0.3199140852531D+01-0.3104145088414D+01-0.3010461693592D+01 +-0.2918091544431D+01-0.2827036490592D+01-0.2737299333835D+01-0.2648883792669D+01 +-0.2561794453010D+01-0.2476036705393D+01-0.2391616669610D+01-0.2308541108029D+01 +-0.2226817329318D+01-0.2146453084634D+01-0.2067456458802D+01-0.1989835759339D+01 +-0.1913599406514D+01-0.1838755827812D+01-0.1765313360391D+01-0.1693280165020D+01 +-0.1622664154978D+01-0.1553472943063D+01-0.1485713809518D+01-0.1419393693186D+01 +-0.1354519207570D+01-0.1291096682842D+01-0.1229132234097D+01-0.1168631855453D+01 +-0.1109601538882D+01-0.1052047416050D+01-0.9959759208814D+00-0.9413939701484D+00 +-0.8883091590719D+00-0.8367299687430D+00-0.7866659821253D+00-0.7381281054637D+00 +-0.6911287920896D+00-0.6456822658698D+00-0.6018047418553D+00-0.5595146420441D+00 +-0.5188328045500D+00-0.4797826848498D+00-0.4423905481512D+00-0.4066856522662D+00 +-0.3727004206897D+00-0.3404706058472D+00-0.3100354427093D+00-0.2814377931599D+00 +-0.2547240189175D+00 + 0.0000000000000D+00 + 1012 0.2770741520224D+01 + 0.2150927949039D-04 0.2202124536575D-04 0.2254539478646D-04 0.2308201760180D-04 + 0.2363141055333D-04 0.2419387743865D-04 0.2476972927906D-04 0.2535928449121D-04 + 0.2596286906285D-04 0.2658081673262D-04 0.2721346917432D-04 0.2786117618535D-04 + 0.2852429587973D-04 0.2920319488569D-04 0.2989824854795D-04 0.3060984113473D-04 + 0.3133836604977D-04 0.3208422604934D-04 0.3284783346437D-04 0.3362961042788D-04 + 0.3442998910781D-04 0.3524941194536D-04 0.3608833189898D-04 0.3694721269416D-04 + 0.3782652907911D-04 0.3872676708658D-04 0.3964842430179D-04 0.4059201013679D-04 + 0.4155804611131D-04 0.4254706614023D-04 0.4355961682789D-04 0.4459625776943D-04 + 0.4565756185917D-04 0.4674411560639D-04 0.4785651945856D-04 0.4899538813222D-04 + 0.5016135095172D-04 0.5135505219602D-04 0.5257715145361D-04 0.5382832398596D-04 + 0.5510926109951D-04 0.5642067052648D-04 0.5776327681476D-04 0.5913782172693D-04 + 0.6054506464885D-04 0.6198578300785D-04 0.6346077270088D-04 0.6497084853274D-04 + 0.6651684466474D-04 0.6809961507398D-04 0.6972003402351D-04 0.7137899654355D-04 + 0.7307741892426D-04 0.7481623921999D-04 0.7659641776564D-04 0.7841893770513D-04 + 0.8028480553242D-04 0.8219505164534D-04 0.8415073091254D-04 0.8615292325379D-04 + 0.8820273423416D-04 0.9030129567206D-04 0.9244976626185D-04 0.9464933221109D-04 + 0.9690120789284D-04 0.9920663651351D-04 0.1015668907964D-03 0.1039832736813D-03 + 0.1064571190411D-03 0.1089897924148D-03 0.1115826917580D-03 0.1142372482113D-03 + 0.1169549268870D-03 0.1197372276738D-03 0.1225856860613D-03 0.1255018739831D-03 + 0.1284874006808D-03 0.1315439135877D-03 0.1346730992336D-03 0.1378766841712D-03 + 0.1411564359238D-03 0.1445141639563D-03 0.1479517206680D-03 0.1514710024102D-03 + 0.1550739505263D-03 0.1587625524179D-03 0.1625388426349D-03 0.1664049039925D-03 + 0.1703628687133D-03 0.1744149195974D-03 0.1785632912194D-03 0.1828102711544D-03 + 0.1871582012321D-03 0.1916094788209D-03 0.1961665581427D-03 0.2008319516176D-03 + 0.2056082312418D-03 0.2104980299966D-03 0.2155040432913D-03 0.2206290304405D-03 + 0.2258758161753D-03 0.2312472921908D-03 0.2367464187300D-03 0.2423762262044D-03 + 0.2481398168542D-03 0.2540403664457D-03 0.2600811260106D-03 0.2662654236245D-03 + 0.2725966662290D-03 0.2790783414953D-03 0.2857140197324D-03 0.2925073558401D-03 + 0.2994620913080D-03 0.3065820562611D-03 0.3138711715547D-03 0.3213334509168D-03 + 0.3289730031429D-03 0.3367940343406D-03 0.3448008502286D-03 0.3529978584881D-03 + 0.3613895711713D-03 0.3699806071650D-03 0.3787756947128D-03 0.3877796739964D-03 + 0.3969974997780D-03 0.4064342441040D-03 0.4160950990725D-03 0.4259853796663D-03 + 0.4361105266519D-03 0.4464761095462D-03 0.4570878296540D-03 0.4679515231757D-03 + 0.4790731643881D-03 0.4904588689006D-03 0.5021148969868D-03 0.5140476569946D-03 + 0.5262637088364D-03 0.5387697675611D-03 0.5515727070097D-03 0.5646795635561D-03 + 0.5780975399370D-03 0.5918340091694D-03 0.6058965185620D-03 0.6202927938188D-03 + 0.6350307432396D-03 0.6501184620192D-03 0.6655642366457D-03 0.6813765494038D-03 + 0.6975640829812D-03 0.7141357251847D-03 0.7311005737650D-03 0.7484679413557D-03 + 0.7662473605260D-03 0.7844485889531D-03 0.8030816147148D-03 0.8221566617048D-03 + 0.8416841951763D-03 0.8616749274129D-03 0.8821398235337D-03 0.9030901074324D-03 + 0.9245372678559D-03 0.9464930646236D-03 0.9689695349932D-03 0.9919790001731D-03 + 0.1015534071988D-02 0.1039647659698D-02 0.1064332976981D-02 0.1089603549068D-02 + 0.1115473220057D-02 0.1141956160389D-02 0.1169066874495D-02 0.1196820208634D-02 + 0.1225231358897D-02 0.1254315879409D-02 0.1284089690715D-02 0.1314569088366D-02 + 0.1345770751696D-02 0.1377711752814D-02 0.1410409565795D-02 0.1443882076088D-02 + 0.1478147590144D-02 0.1513224845264D-02 0.1549133019674D-02 0.1585891742841D-02 + 0.1623521106018D-02 0.1662041673040D-02 0.1701474491365D-02 0.1741841103378D-02 + 0.1783163557945D-02 0.1825464422244D-02 0.1868766793867D-02 0.1913094313196D-02 + 0.1958471176071D-02 0.2004922146751D-02 0.2052472571166D-02 0.2101148390486D-02 + 0.2150976154989D-02 0.2201983038264D-02 0.2254196851731D-02 0.2307646059493D-02 + 0.2362359793542D-02 0.2418367869301D-02 0.2475700801533D-02 0.2534389820612D-02 + 0.2594466889165D-02 0.2655964719104D-02 0.2718916789042D-02 0.2783357362106D-02 + 0.2849321504172D-02 0.2916845102501D-02 0.2985964884814D-02 0.3056718438800D-02 + 0.3129144232066D-02 0.3203281632551D-02 0.3279170929405D-02 0.3356853354336D-02 + 0.3436371103460D-02 0.3517767359634D-02 0.3601086315312D-02 0.3686373195913D-02 + 0.3773674283724D-02 0.3863036942351D-02 0.3954509641719D-02 0.4048141983652D-02 + 0.4143984728019D-02 0.4242089819491D-02 0.4342510414893D-02 0.4445300911185D-02 + 0.4550516974067D-02 0.4658215567249D-02 0.4768454982366D-02 0.4881294869584D-02 + 0.4996796268890D-02 0.5115021642093D-02 0.5236034905549D-02 0.5359901463622D-02 + 0.5486688242898D-02 0.5616463727181D-02 0.5749297993262D-02 0.5885262747508D-02 + 0.6024431363262D-02 0.6166878919093D-02 0.6312682237899D-02 0.6461919926891D-02 + 0.6614672418475D-02 0.6771022012045D-02 0.6931052916716D-02 0.7094851295016D-02 + 0.7262505307545D-02 0.7434105158642D-02 0.7609743143066D-02 0.7789513693721D-02 + 0.7973513430440D-02 0.8161841209859D-02 0.8354598176397D-02 0.8551887814376D-02 + 0.8753816001287D-02 0.8960491062250D-02 0.9172023825667D-02 0.9388527680122D-02 + 0.9610118632529D-02 0.9836915367568D-02 0.1006903930843D-01 0.1030661467892D-01 + 0.1054976856688D-01 0.1079863098909D-01 0.1105333495749D-01 0.1131401654696D-01 + 0.1158081496451D-01 0.1185387262003D-01 0.1213333519856D-01 0.1241935173418D-01 + 0.1271207468545D-01 0.1301166001257D-01 0.1331826725616D-01 0.1363205961778D-01 + 0.1395320404221D-01 0.1428187130150D-01 0.1461823608081D-01 0.1496247706623D-01 + 0.1531477703430D-01 0.1567532294367D-01 0.1604430602860D-01 0.1642192189452D-01 + 0.1680837061563D-01 0.1720385683464D-01 0.1760858986456D-01 0.1802278379280D-01 + 0.1844665758734D-01 0.1888043520531D-01 0.1932434570378D-01 0.1977862335297D-01 + 0.2024350775185D-01 0.2071924394615D-01 0.2120608254895D-01 0.2170427986376D-01 + 0.2221409801021D-01 0.2273580505238D-01 0.2326967512987D-01 0.2381598859160D-01 + 0.2437503213237D-01 0.2494709893234D-01 0.2553248879941D-01 0.2613150831454D-01 + 0.2674447098014D-01 0.2737169737147D-01 0.2801351529124D-01 0.2867025992742D-01 + 0.2934227401421D-01 0.3002990799646D-01 0.3073352019732D-01 0.3145347698951D-01 + 0.3219015296988D-01 0.3294393113773D-01 0.3371520307664D-01 0.3450436914006D-01 + 0.3531183864059D-01 0.3613803004319D-01 0.3698337116219D-01 0.3784829936233D-01 + 0.3873326176383D-01 0.3963871545150D-01 0.4056512768813D-01 0.4151297613205D-01 + 0.4248274905905D-01 0.4347494558865D-01 0.4449007591493D-01 0.4552866154180D-01 + 0.4659123552298D-01 0.4767834270657D-01 0.4879053998454D-01 0.4992839654695D-01 + 0.5109249414114D-01 0.5228342733595D-01 0.5350180379101D-01 0.5474824453121D-01 + 0.5602338422639D-01 0.5732787147645D-01 0.5866236910176D-01 0.6002755443915D-01 + 0.6142411964345D-01 0.6285277199472D-01 0.6431423421119D-01 0.6580924476805D-01 + 0.6733855822219D-01 0.6890294554290D-01 0.7050319444864D-01 0.7214010975008D-01 + 0.7381451369925D-01 0.7552724634520D-01 0.7727916589591D-01 0.7907114908690D-01 + 0.8090409155624D-01 0.8277890822643D-01 0.8469653369292D-01 0.8665792261951D-01 + 0.8866405014071D-01 0.9071591227111D-01 0.9281452632182D-01 0.9496093132410D-01 + 0.9715618846031D-01 0.9940138150208D-01 0.1016976172560D+00 0.1040460260169D+00 + 0.1064477620282D+00 0.1089040039508D+00 0.1114159553388D+00 0.1139848451236D+00 + 0.1166119281054D+00 0.1192984854532D+00 0.1220458252122D+00 0.1248552828197D+00 + 0.1277282216288D+00 0.1306660334408D+00 0.1336701390448D+00 0.1367419887670D+00 + 0.1398830630269D+00 0.1430948729031D+00 0.1463789607067D+00 0.1497369005636D+00 + 0.1531702990050D+00 0.1566807955666D+00 0.1602700633964D+00 0.1639398098711D+00 + 0.1676917772207D+00 0.1715277431623D+00 0.1754495215419D+00 0.1794589629856D+00 + 0.1835579555582D+00 0.1877484254317D+00 0.1920323375616D+00 0.1964116963718D+00 + 0.2008885464482D+00 0.2054649732406D+00 0.2101431037732D+00 0.2149251073635D+00 + 0.2198131963488D+00 0.2248096268222D+00 0.2299166993754D+00 0.2351367598503D+00 + 0.2404722000984D+00 0.2459254587480D+00 0.2514990219789D+00 0.2571954243047D+00 + 0.2630172493626D+00 0.2689671307106D+00 0.2750477526311D+00 0.2812618509418D+00 + 0.2876122138134D+00 0.2941016825931D+00 0.3007331526352D+00 0.3075095741362D+00 + 0.3144339529771D+00 0.3215093515700D+00 0.3287388897102D+00 0.3361257454325D+00 + 0.3436731558729D+00 0.3513844181328D+00 0.3592628901485D+00 0.3673119915621D+00 + 0.3755352045968D+00 0.3839360749336D+00 0.3925182125899D+00 0.4012852927993D+00 + 0.4102410568930D+00 0.4193893131804D+00 0.4287339378299D+00 0.4382788757486D+00 + 0.4480281414604D+00 0.4579858199819D+00 0.4681560676951D+00 0.4785431132164D+00 + 0.4891512582614D+00 0.4999848785043D+00 0.5110484244305D+00 0.5223464221834D+00 + 0.5338834744021D+00 0.5456642610510D+00 0.5576935402392D+00 0.5699761490289D+00 + 0.5825170042325D+00 0.5953211031952D+00 0.6083935245653D+00 0.6217394290472D+00 + 0.6353640601390D+00 0.6492727448516D+00 0.6634708944082D+00 0.6779640049238D+00 + 0.6927576580616D+00 0.7078575216668D+00 0.7232693503742D+00 0.7389989861895D+00 + 0.7550523590420D+00 0.7714354873073D+00 0.7881544782973D+00 0.8052155287175D+00 + 0.8226249250876D+00 0.8403890441249D+00 0.8585143530879D+00 0.8770074100784D+00 + 0.8958748642992D+00 0.9151234562658D+00 0.9347600179702D+00 0.9547914729931D+00 + 0.9752248365635D+00 0.9960672155622D+00 0.1017325808468D+01 0.1039007905241D+01 + 0.1061120887144D+01 0.1083672226499D+01 0.1106669486370D+01 0.1130120320176D+01 + 0.1154032471231D+01 0.1178413772204D+01 0.1203272144493D+01 0.1228615597523D+01 + 0.1254452227950D+01 0.1280790218774D+01 0.1307637838359D+01 0.1335003439353D+01 + 0.1362895457506D+01 0.1391322410385D+01 0.1420292895972D+01 0.1449815591159D+01 + 0.1479899250115D+01 0.1510552702537D+01 0.1541784851777D+01 0.1573604672833D+01 + 0.1606021210210D+01 0.1639043575644D+01 0.1672680945677D+01 0.1706942559091D+01 + 0.1741837714186D+01 0.1777375765901D+01 0.1813566122779D+01 0.1850418243757D+01 + 0.1887941634794D+01 0.1926145845317D+01 0.1965040464488D+01 0.2004635117287D+01 + 0.2044939460400D+01 0.2085963177919D+01 0.2127715976829D+01 0.2170207582300D+01 + 0.2213447732763D+01 0.2257446174769D+01 0.2302212657626D+01 0.2347756927812D+01 + 0.2394088723154D+01 0.2441217766767D+01 0.2489153760756D+01 0.2537906379665D+01 + 0.2587485263675D+01 0.2637900011547D+01 0.2689160173295D+01 0.2741275242598D+01 + 0.2794254648931D+01 0.2848107749430D+01 0.2902843820459D+01 0.2958472048904D+01 + 0.3015001523163D+01 0.3072441223848D+01 0.3130800014182D+01 0.3190086630094D+01 + 0.3250309670002D+01 0.3311477584285D+01 0.3373598664440D+01 0.3436681031917D+01 + 0.3500732626634D+01 0.3565761195166D+01 0.3631774278604D+01 0.3698779200090D+01 + 0.3766783052007D+01 0.3835792682854D+01 0.3905814683769D+01 0.3976855374728D+01 + 0.4048920790399D+01 0.4122016665671D+01 0.4196148420834D+01 0.4271321146438D+01 + 0.4347539587809D+01 0.4424808129241D+01 0.4503130777854D+01 0.4582511147131D+01 + 0.4662952440136D+01 0.4744457432406D+01 0.4827028454547D+01 0.4910667374509D+01 + 0.4995375579573D+01 0.5081153958042D+01 0.5168002880655D+01 0.5255922181721D+01 + 0.5344911139992D+01 0.5434968459290D+01 0.5526092248881D+01 0.5618280003639D+01 + 0.5711528583982D+01 0.5805834195616D+01 0.5901192369103D+01 0.5997597939257D+01 + 0.6095045024395D+01 0.6193527005472D+01 0.6293036505099D+01 0.6393565366487D+01 + 0.6495104632331D+01 0.6597644523660D+01 0.6701174418681D+01 0.6805682831645D+01 + 0.6911157391760D+01 0.7017584822191D+01 0.7124950919171D+01 0.7233240531258D+01 + 0.7342437538781D+01 0.7452524833500D+01 0.7563484298530D+01 0.7675296788562D+01 + 0.7787942110430D+01 0.7901399004058D+01 0.8015645123842D+01 0.8130657020509D+01 + 0.8246410123503D+01 0.8362878723950D+01 0.8480035958250D+01 0.8597853792358D+01 + 0.8716303006799D+01 0.8835353182487D+01 0.8954972687391D+01 0.9075128664130D+01 + 0.9195787018538D+01 0.9316912409273D+01 0.9438468238543D+01 0.9560416644000D+01 + 0.9682718491880D+01 0.9805333371460D+01 0.9928219590896D+01 0.1005133417453D+02 + 0.1017463286171D+02 0.1029807010722D+02 0.1042159908344D+02 0.1054517168417D+02 + 0.1066873853037D+02 0.1079224897780D+02 0.1091565112659D+02 0.1103889183301D+02 + 0.1116191672323D+02 0.1128467020944D+02 0.1140709550823D+02 0.1152913466133D+02 + 0.1165072855885D+02 0.1177181696506D+02 0.1189233854680D+02 0.1201223090454D+02 + 0.1213143060625D+02 0.1224987322407D+02 0.1236749337400D+02 0.1248422475837D+02 + 0.1260000021157D+02 0.1271475174875D+02 0.1282841061773D+02 0.1294090735413D+02 + 0.1305217183979D+02 0.1316213336451D+02 0.1327072069111D+02 0.1337786212400D+02 + 0.1348348558110D+02 0.1358751866928D+02 0.1368988876325D+02 0.1379052308804D+02 + 0.1388934880491D+02 0.1398629310084D+02 0.1408128328150D+02 0.1417424686776D+02 + 0.1426511169568D+02 0.1435380601989D+02 0.1444025862047D+02 0.1452439891313D+02 + 0.1460615706273D+02 0.1468546410000D+02 0.1476225204147D+02 0.1483645401237D+02 + 0.1490800437259D+02 0.1497683884540D+02 0.1504289464893D+02 0.1510611063019D+02 + 0.1516642740155D+02 0.1522378747941D+02 0.1527813542502D+02 0.1532941798703D+02 + 0.1537758424592D+02 0.1542258575964D+02 0.1546437671057D+02 0.1550291405346D+02 + 0.1553815766392D+02 0.1557007048740D+02 0.1559861868825D+02 0.1562377179849D+02 + 0.1564550286611D+02 0.1566378860245D+02 0.1567860952827D+02 0.1568995011828D+02 + 0.1569779894358D+02 0.1570214881171D+02 0.1570299690387D+02 0.1570034490889D+02 + 0.1569419915342D+02 0.1568457072811D+02 0.1567147560898D+02 0.1565493477391D+02 + 0.1563497431333D+02 0.1561162553504D+02 0.1558492506233D+02 0.1555491492507D+02 + 0.1552164264320D+02 0.1548516130217D+02 0.1544552961962D+02 0.1540281200312D+02 + 0.1535707859803D+02 0.1530840532536D+02 0.1525687390884D+02 0.1520257189079D+02 + 0.1514559263632D+02 0.1508603532531D+02 0.1502400493172D+02 0.1495961218971D+02 + 0.1489297354623D+02 0.1482421109950D+02 0.1475345252306D+02 0.1468083097499D+02 + 0.1460648499184D+02 0.1453055836709D+02 0.1445320001360D+02 0.1437456381003D+02 + 0.1429480843075D+02 0.1421409715909D+02 0.1413259768392D+02 0.1405048187912D+02 + 0.1396792556614D+02 0.1388510825940D+02 0.1380221289467D+02 0.1371942554036D+02 + 0.1363693509198D+02 0.1355493294972D+02 0.1347361267958D+02 0.1339316965818D+02 + 0.1331380070165D+02 0.1323570367897D+02 0.1315907711016D+02 0.1308411975004D+02 + 0.1301103015787D+02 0.1294000625373D+02 0.1287124486230D+02 0.1280494124477D+02 + 0.1274128861984D+02 0.1268047767460D+02 0.1262269606643D+02 0.1256812791682D+02 + 0.1251695329838D+02 0.1246934771604D+02 0.1242548158392D+02 0.1238551969900D+02 + 0.1234962071295D+02 0.1231793660373D+02 0.1229061214824D+02 0.1226778439767D+02 + 0.1224958215706D+02 0.1223612547078D+02 0.1222752511553D+02 0.1222388210258D+02 + 0.1222528719100D+02 0.1223182041366D+02 0.1224355061775D+02 0.1226053502171D+02 + 0.1228281879023D+02 0.1231043462935D+02 0.1234340240339D+02 0.1238172877543D+02 + 0.1242540687338D+02 0.1247441598324D+02 0.1252872127141D+02 0.1258827353770D+02 + 0.1265300900087D+02 0.1272284911822D+02 0.1279770044081D+02 0.1287745450601D+02 + 0.1296198776857D+02 0.1305116157186D+02 0.1314482216032D+02 0.1324280073454D+02 + 0.1334491354991D+02 0.1345096205988D+02 0.1356073310471D+02 0.1367399914649D+02 + 0.1379051855093D+02 0.1391003591655D+02 0.1403228245150D+02 0.1415697639825D+02 + 0.1428382350615D+02 0.1441251755180D+02 0.1454274090682D+02 0.1467416515265D+02 + 0.1480645174180D+02 0.1493925270450D+02 0.1507221140012D+02 0.1520496331175D+02 + 0.1533713688305D+02 0.1546835439544D+02 0.1559823288411D+02 0.1572638509088D+02 + 0.1585242045188D+02 0.1597594611769D+02 0.1609656800349D+02 0.1621389186673D+02 + 0.1632752440935D+02 0.1643707440175D+02 0.1654215382521D+02 0.1664237902974D+02 + 0.1673737190368D+02 0.1682676105166D+02 0.1691018297723D+02 0.1698728326633D+02 + 0.1705771776761D+02 0.1712115376582D+02 0.1717727114395D+02 0.1722576353007D+02 + 0.1726633942470D+02 0.1729872330429D+02 0.1732265669667D+02 0.1733789922408D+02 + 0.1734422960952D+02 0.1734144664198D+02 0.1732937009656D+02 0.1730784160492D+02 + 0.1727672547225D+02 0.1723590943644D+02 0.1718530536559D+02 0.1712484989008D+02 + 0.1705450496536D+02 0.1697425836203D+02 0.1688412407975D+02 0.1678414268193D+02 + 0.1667438154808D+02 0.1655493504124D+02 0.1642592458792D+02 0.1628749866833D+02 + 0.1613983271513D+02 0.1598312891883D+02 0.1581761593876D+02 0.1564354851859D+02 + 0.1546120700566D+02 0.1527089677411D+02 0.1507294755170D+02 0.1486771265109D+02 + 0.1465556810624D+02 0.1443691171558D+02 0.1421216199343D+02 0.1398175703206D+02 + 0.1374615327696D+02 0.1350582421831D+02 0.1326125900230D+02 0.1301296096613D+02 + 0.1276144610103D+02 0.1250724144826D+02 0.1225088343315D+02 0.1199291614280D+02 + 0.1173388955369D+02 0.1147435771520D+02 0.1121487689618D+02 0.1095600370143D+02 + 0.1069829316549D+02 0.1044229683153D+02 0.1018856082317D+02 0.9937623917321D+01 + 0.9690015626445D+01 0.9446254298643D+01 0.9206845244038D+01 0.8972278896087D+01 + 0.8743029016360D+01 0.8519550951297D+01 0.8302279949355D+01 0.8091629546790D+01 + 0.7887990030116D+01 0.7691726983014D+01 0.7503179925129D+01 0.7322661049902D+01 + 0.7150454068046D+01 0.6986813162918D+01 0.6831962063451D+01 0.6686093239819D+01 + 0.6549367226364D+01 0.6421912075717D+01 0.6303822947394D+01 0.6195161833447D+01 + 0.6095957423078D+01 0.6006205107394D+01 0.5925867124779D+01 0.5854872846611D+01 + 0.5793119202371D+01 0.5740471242429D+01 0.5696762836121D+01 0.5661797502031D+01 + 0.5635349366701D+01 0.5617164247353D+01 0.5606960853570D+01 0.5604432102259D+01 + 0.5609246539649D+01 0.5621049863505D+01 0.5639466538232D+01 0.5664101495024D+01 + 0.5694541908766D+01 0.5730359042993D+01 0.5771110153784D+01 0.5816340443192D+01 + 0.5865585052475D+01 0.5918371085180D+01 0.5974219649957D+01 0.6032647912832D+01 + 0.6093171148637D+01 0.6155304781260D+01 0.6218566402475D+01 0.6282477759234D+01 + 0.6346566699475D+01 0.6410369066815D+01 0.6473430534781D+01 0.6535308371644D+01 + 0.6595573127395D+01 0.6653810234872D+01 0.6709621517670D+01 0.6762626598041D+01 + 0.6812464198680D+01 0.6858793332986D+01 0.6901294379138D+01 0.6939670034070D+01 + 0.6973646144233D+01 0.7002972410830D+01 0.7027422967990D+01 0.7046796833200D+01 + 0.7060918230061D+01 0.7069636784259D+01 0.7072827594374D+01 0.7070391179926D+01 + 0.7062253309715D+01 0.7048364714231D+01 0.7028700686483D+01 0.7003260576238D+01 + 0.6972067183121D+01 0.6935166054562D+01 0.6892624694966D+01 0.6844531692843D+01 + 0.6790995772965D+01 0.6732144780827D+01 0.6668124606899D+01 0.6599098058289D+01 + 0.6525243685473D+01 0.6446754571799D+01 0.6363837093418D+01 0.6276709657188D+01 + 0.6185601423998D+01 0.6090751024726D+01 0.5992405275866D+01 0.5890817901556D+01 + 0.5786248268476D+01 0.5678960139726D+01 0.5569220453475D+01 0.5457298131760D+01 + 0.5343462924443D+01 0.5227984292928D+01 0.5111130337809D+01 0.4993166774192D+01 + 0.4874355958030D+01 0.4754955966341D+01 0.4635219733799D+01 0.4515394247714D+01 + 0.4395719803061D+01 0.4276429318764D+01 0.4157747716089D+01 0.4039891359594D+01 + 0.3923067560758D+01 0.3807474144035D+01 0.3693299074769D+01 0.3580720148118D+01 + 0.3469904737816D+01 0.3361009603367D+01 0.3254180754011D+01 0.3149553367571D+01 + 0.3047251762116D+01 0.2947389418162D+01 0.2850069049006D+01 0.2755382716614D+01 + 0.2663411990420D+01 0.2574228146230D+01 0.2487892402405D+01 0.2404456190400D+01 + 0.2323961456713D+01 0.2246440993268D+01 0.2171918793250D+01 0.2100410429420D+01 + 0.2031923451965D+01 0.1966457802972D+01 0.1904006244666D+01 0.1844554798640D+01 + 0.1788083193345D+01 0.1734565317240D+01 0.1683969675070D+01 0.1636259844862D+01 + 0.1591394933364D+01 0.1549330027746D+01 0.1510016641546D+01 0.1473403152964D+01 + 0.1439435233770D+01 0.1408056267219D+01 0.1379207753531D+01 0.1352829701650D+01 + 0.1328861006133D+01 0.1307239808175D+01 0.1287903839946D+01 0.1270790751526D+01 + 0.1255838419882D+01 0.1242985239474D+01 0.1232170394175D+01 0.1223334110328D+01 + 0.1216417890857D+01 0.1211364730456D+01 0.1208119311934D+01 0.1206628183910D+01 + 0.1206839920052D+01 0.1208705260142D+01 0.1212177233248D+01 0.1217211263310D+01 + 0.1223765257423D+01 0.1231799677111D+01 0.1241277592815D+01 0.1252164721788D+01 + 0.1264429449524D+01 0.1278042834732D+01 0.1292978597814D+01 0.1309213092627D+01 + 0.1326725261233D+01 0.1345496571135D+01 0.1365510934358D+01 0.1386754607532D+01 + 0.1409215426363D+01 0.1433003097507D+01 0.1458223277591D+01 0.1484860699421D+01 + 0.1512902583279D+01 0.1542338542721D+01 0.1573160498496D+01 0.1605362600812D+01 + 0.1638941160170D+01 0.1673894586973D+01 0.1710223340083D+01 0.1747929884514D+01 + 7 1012 + 1 0 -1 -511.89150 + 2 0 -1 -58.80097 + 2 1 1 -50.61290 + 2 1 -2 -49.69692 + 3 0 -1 -5.52718 + 3 1 1 -3.14309 + 3 1 -2 -3.03034 + 0.2123373461549D-04 0.2173914995400D-04 0.2225659296114D-04 0.2278634977738D-04 + 0.2332871334728D-04 0.2388398358121D-04 0.2445246752083D-04 0.2503447950857D-04 + 0.2563034136106D-04 0.2624038254674D-04 0.2686494036763D-04 0.2750436014548D-04 + 0.2815899541226D-04 0.2882920810522D-04 0.2951536876657D-04 0.3021785674791D-04 + 0.3093706041946D-04 0.3167337738432D-04 0.3242721469777D-04 0.3319898909177D-04 + 0.3398912720483D-04 0.3479806581728D-04 0.3562625209215D-04 0.3647414382175D-04 + 0.3734220968012D-04 0.3823092948144D-04 0.3914079444457D-04 0.4007230746391D-04 + 0.4102598338660D-04 0.4200234929636D-04 0.4300194480406D-04 0.4402532234512D-04 + 0.4507304748402D-04 0.4614569922601D-04 0.4724387033618D-04 0.4836816766617D-04 + 0.4951921248852D-04 0.5069764083903D-04 0.5190410386721D-04 0.5313926819498D-04 + 0.5440381628400D-04 0.5569844681152D-04 0.5702387505533D-04 0.5838083328767D-04 + 0.5977007117859D-04 0.6119235620880D-04 0.6264847409228D-04 0.6413922920902D-04 + 0.6566544504782D-04 0.6722796465978D-04 0.6882765112238D-04 0.7046538801462D-04 + 0.7214207990339D-04 0.7385865284136D-04 0.7561605487667D-04 0.7741525657465D-04 + 0.7925725155197D-04 0.8114305702331D-04 0.8307371436110D-04 0.8505028966841D-04 + 0.8707387436545D-04 0.8914558578994D-04 0.9126656781168D-04 0.9343799146165D-04 + 0.9566105557602D-04 0.9793698745538D-04 0.1002670435396D-03 0.1026525100984D-03 + 0.1050947039390D-03 0.1075949731294D-03 0.1101546977394D-03 0.1127752905997D-03 + 0.1154581980775D-03 0.1182049008719D-03 0.1210169148270D-03 0.1238957917652D-03 + 0.1268431203390D-03 0.1298605269045D-03 0.1329496764137D-03 0.1361122733297D-03 + 0.1393500625619D-03 0.1426648304247D-03 0.1460584056178D-03 0.1495326602303D-03 + 0.1530895107681D-03 0.1567309192056D-03 0.1604588940629D-03 0.1642754915072D-03 + 0.1681828164816D-03 0.1721830238593D-03 0.1762783196258D-03 0.1804709620887D-03 + 0.1847632631165D-03 0.1891575894056D-03 0.1936563637785D-03 0.1982620665115D-03 + 0.2029772366947D-03 0.2078044736231D-03 0.2127464382210D-03 0.2178058545005D-03 + 0.2229855110531D-03 0.2282882625778D-03 0.2337170314442D-03 0.2392748092933D-03 + 0.2449646586752D-03 0.2507897147258D-03 0.2567531868833D-03 0.2628583606444D-03 + 0.2691085993625D-03 0.2755073460880D-03 0.2820581254518D-03 0.2887645455935D-03 + 0.2956303001344D-03 0.3026591701977D-03 0.3098550264756D-03 0.3172218313454D-03 + 0.3247636410353D-03 0.3324846078408D-03 0.3403889823939D-03 0.3484811159850D-03 + 0.3567654629401D-03 0.3652465830528D-03 0.3739291440747D-03 0.3828179242637D-03 + 0.3919178149916D-03 0.4012338234146D-03 0.4107710752045D-03 0.4205348173457D-03 + 0.4305304209971D-03 0.4407633844209D-03 0.4512393359813D-03 0.4619640372121D-03 + 0.4729433859575D-03 0.4841834195856D-03 0.4956903182785D-03 0.5074704083979D-03 + 0.5195301659314D-03 0.5318762200182D-03 0.5445153565579D-03 0.5574545219044D-03 + 0.5707008266453D-03 0.5842615494708D-03 0.5981441411326D-03 0.6123562284955D-03 + 0.6269056186847D-03 0.6418003033287D-03 0.6570484629028D-03 0.6726584711734D-03 + 0.6886388997468D-03 0.7049985227240D-03 0.7217463214642D-03 0.7388914894603D-03 + 0.7564434373277D-03 0.7744117979097D-03 0.7928064315026D-03 0.8116374312024D-03 + 0.8309151283763D-03 0.8506500982622D-03 0.8708531656989D-03 0.8915354109894D-03 + 0.9127081759015D-03 0.9343830698083D-03 0.9565719759715D-03 0.9792870579714D-03 + 0.1002540766287D-02 0.1026345845027D-02 0.1050715338824D-02 0.1075662599879D-02 + 0.1101201295181D-02 0.1127345413883D-02 0.1154109274864D-02 0.1181507534450D-02 + 0.1209555194328D-02 0.1238267609637D-02 0.1267660497252D-02 0.1297749944251D-02 + 0.1328552416593D-02 0.1360084767981D-02 0.1392364248945D-02 0.1425408516127D-02 + 0.1459235641785D-02 0.1493864123514D-02 0.1529312894196D-02 0.1565601332181D-02 + 0.1602749271697D-02 0.1640777013510D-02 0.1679705335822D-02 0.1719555505429D-02 + 0.1760349289133D-02 0.1802108965417D-02 0.1844857336390D-02 0.1888617740010D-02 + 0.1933414062589D-02 0.1979270751585D-02 0.2026212828687D-02 0.2074265903209D-02 + 0.2123456185786D-02 0.2173810502385D-02 0.2225356308647D-02 0.2278121704551D-02 + 0.2332135449417D-02 0.2387426977257D-02 0.2444026412476D-02 0.2501964585936D-02 + 0.2561273051389D-02 0.2621984102285D-02 0.2684130788965D-02 0.2747746936258D-02 + 0.2812867161465D-02 0.2879526892772D-02 0.2947762388071D-02 0.3017610754222D-02 + 0.3089109966753D-02 0.3162298890003D-02 0.3237217297741D-02 0.3313905894238D-02 + 0.3392406335837D-02 0.3472761253004D-02 0.3555014272883D-02 0.3639210042377D-02 + 0.3725394251736D-02 0.3813613658698D-02 0.3903916113173D-02 0.3996350582488D-02 + 0.4090967177209D-02 0.4187817177547D-02 0.4286953060364D-02 0.4388428526794D-02 + 0.4492298530489D-02 0.4598619306504D-02 0.4707448400838D-02 0.4818844700646D-02 + 0.4932868465127D-02 0.5049581357120D-02 0.5169046475404D-02 0.5291328387739D-02 + 0.5416493164639D-02 0.5544608413917D-02 0.5675743316002D-02 0.5809968660057D-02 + 0.5947356880904D-02 0.6087982096781D-02 0.6231920147946D-02 0.6379248636155D-02 + 0.6530046965011D-02 0.6684396381234D-02 0.6842380016839D-02 0.7004082932273D-02 + 0.7169592160503D-02 0.7338996752102D-02 0.7512387821327D-02 0.7689858593235D-02 + 0.7871504451850D-02 0.8057422989391D-02 0.8247714056607D-02 0.8442479814225D-02 + 0.8641824785540D-02 0.8845855910175D-02 0.9054682599025D-02 0.9268416790430D-02 + 0.9487173007575D-02 0.9711068417172D-02 0.9940222889430D-02 0.1017475905935D-01 + 0.1041480238936D-01 0.1066048123337D-01 0.1091192690214D-01 0.1116927373022D-01 + 0.1143265914425D-01 0.1170222373276D-01 0.1197811131760D-01 0.1226046902681D-01 + 0.1254944736912D-01 0.1284520031015D-01 0.1314788535014D-01 0.1345766360348D-01 + 0.1377469987990D-01 0.1409916276750D-01 0.1443122471744D-01 0.1477106213063D-01 + 0.1511885544620D-01 0.1547478923187D-01 0.1583905227632D-01 0.1621183768351D-01 + 0.1659334296907D-01 0.1698377015868D-01 0.1738332588869D-01 0.1779222150874D-01 + 0.1821067318670D-01 0.1863890201578D-01 0.1907713412394D-01 0.1952560078568D-01 + 0.1998453853608D-01 0.2045418928739D-01 0.2093480044805D-01 0.2142662504416D-01 + 0.2192992184360D-01 0.2244495548276D-01 0.2297199659585D-01 0.2351132194704D-01 + 0.2406321456527D-01 0.2462796388197D-01 0.2520586587156D-01 0.2579722319499D-01 + 0.2640234534617D-01 0.2702154880148D-01 0.2765515717239D-01 0.2830350136121D-01 + 0.2896691972007D-01 0.2964575821319D-01 0.3034037058244D-01 0.3105111851634D-01 + 0.3177837182251D-01 0.3252250860359D-01 0.3328391543683D-01 0.3406298755727D-01 + 0.3486012904465D-01 0.3567575301409D-01 0.3651028181063D-01 0.3736414720771D-01 + 0.3823779060956D-01 0.3913166325773D-01 0.4004622644169D-01 0.4098195171364D-01 + 0.4193932110758D-01 0.4291882736274D-01 0.4392097415138D-01 0.4494627631115D-01 + 0.4599526008193D-01 0.4706846334735D-01 0.4816643588104D-01 0.4928973959763D-01 + 0.5043894880863D-01 0.5161465048329D-01 0.5281744451445D-01 0.5404794398948D-01 + 0.5530677546647D-01 0.5659457925562D-01 0.5791200970601D-01 0.5925973549779D-01 + 0.6063843993988D-01 0.6204882127328D-01 0.6349159298001D-01 0.6496748409788D-01 + 0.6647723954103D-01 0.6802162042643D-01 0.6960140440641D-01 0.7121738600725D-01 + 0.7287037697395D-01 0.7456120662128D-01 0.7629072219118D-01 0.7805978921657D-01 + 0.7986929189166D-01 0.8172013344892D-01 0.8361323654265D-01 0.8554954363940D-01 + 0.8753001741513D-01 0.8955564115940D-01 0.9162741918654D-01 0.9374637725383D-01 + 0.9591356298698D-01 0.9813004631275D-01 0.1003969198990D+00 0.1027152996019D+00 + 0.1050863249211D+00 0.1075111594618D+00 0.1099909914051D+00 0.1125270339855D+00 + 0.1151205259766D+00 0.1177727321842D+00 0.1204849439476D+00 0.1232584796489D+00 + 0.1260946852301D+00 0.1289949347182D+00 0.1319606307590D+00 0.1349932051583D+00 + 0.1380941194317D+00 0.1412648653632D+00 0.1445069655708D+00 0.1478219740820D+00 + 0.1512114769165D+00 0.1546770926778D+00 0.1582204731535D+00 0.1618433039236D+00 + 0.1655473049771D+00 0.1693342313383D+00 0.1732058737000D+00 0.1771640590662D+00 + 0.1812106514032D+00 0.1853475522988D+00 0.1895767016304D+00 0.1939000782413D+00 + 0.1983197006251D+00 0.2028376276193D+00 0.2074559591063D+00 0.2121768367234D+00 + 0.2170024445803D+00 0.2219350099852D+00 0.2269768041788D+00 0.2321301430764D+00 + 0.2373973880172D+00 0.2427809465221D+00 0.2482832730585D+00 0.2539068698131D+00 + 0.2596542874715D+00 0.2655281260047D+00 0.2715310354636D+00 0.2776657167793D+00 + 0.2839349225700D+00 0.2903414579550D+00 0.2968881813739D+00 0.3035780054119D+00 + 0.3104138976312D+00 0.3173988814070D+00 0.3245360367687D+00 0.3318285012460D+00 + 0.3392794707188D+00 0.3468922002717D+00 0.3546700050516D+00 0.3626162611285D+00 + 0.3707344063591D+00 0.3790279412529D+00 0.3875004298396D+00 0.3961555005386D+00 + 0.4049968470283D+00 0.4140282291162D+00 0.4232534736091D+00 0.4326764751811D+00 + 0.4423011972414D+00 0.4521316727988D+00 0.4621720053237D+00 0.4724263696067D+00 + 0.4828990126121D+00 0.4935942543268D+00 0.5045164886027D+00 0.5156701839924D+00 + 0.5270598845772D+00 0.5386902107861D+00 0.5505658602051D+00 0.5626916083760D+00 + 0.5750723095830D+00 0.5877128976270D+00 0.6006183865849D+00 0.6137938715547D+00 + 0.6272445293836D+00 0.6409756193782D+00 0.6549924839961D+00 0.6693005495166D+00 + 0.6839053266899D+00 0.6988124113627D+00 0.7140274850788D+00 0.7295563156538D+00 + 0.7454047577210D+00 0.7615787532478D+00 0.7780843320207D+00 0.7949276120969D+00 + 0.8121148002200D+00 0.8296521921997D+00 0.8475461732513D+00 0.8658032182945D+00 + 0.8844298922086D+00 0.9034328500427D+00 0.9228188371772D+00 0.9425946894360D+00 + 0.9627673331456D+00 0.9833437851400D+00 0.1004331152707D+01 0.1025736633476D+01 + 0.1047567515241D+01 0.1069831175720D+01 0.1092535082243D+01 0.1115686791375D+01 + 0.1139293948457D+01 0.1163364287075D+01 0.1187905628445D+01 0.1212925880722D+01 + 0.1238433038208D+01 0.1264435180485D+01 0.1290940471443D+01 0.1317957158220D+01 + 0.1345493570030D+01 0.1373558116898D+01 0.1402159288280D+01 0.1431305651569D+01 + 0.1461005850494D+01 0.1491268603389D+01 0.1522102701342D+01 0.1553517006218D+01 + 0.1585520448546D+01 0.1618122025271D+01 0.1651330797361D+01 0.1685155887276D+01 + 0.1719606476280D+01 0.1754691801602D+01 0.1790421153434D+01 0.1826803871767D+01 + 0.1863849343063D+01 0.1901566996742D+01 0.1939966301501D+01 0.1979056761446D+01 + 0.2018847912032D+01 0.2059349315815D+01 0.2100570557999D+01 0.2142521241790D+01 + 0.2185210983528D+01 0.2228649407614D+01 0.2272846141215D+01 0.2317810808747D+01 + 0.2363553026124D+01 0.2410082394775D+01 0.2457408495423D+01 0.2505540881617D+01 + 0.2554489073015D+01 0.2604262548407D+01 0.2654870738488D+01 0.2706323018355D+01 + 0.2758628699743D+01 0.2811797022979D+01 0.2865837148659D+01 0.2920758149043D+01 + 0.2976568999160D+01 0.3033278567615D+01 0.3090895607108D+01 0.3149428744640D+01 + 0.3208886471423D+01 0.3269277132479D+01 0.3330608915918D+01 0.3392889841912D+01 + 0.3456127751341D+01 0.3520330294118D+01 0.3585504917195D+01 0.3651658852234D+01 + 0.3718799102956D+01 0.3786932432154D+01 0.3856065348377D+01 0.3926204092282D+01 + 0.3997354622651D+01 0.4069522602076D+01 0.4142713382310D+01 0.4216931989288D+01 + 0.4292183107814D+01 0.4368471065927D+01 0.4445799818928D+01 0.4524172933100D+01 + 0.4603593569097D+01 0.4684064465021D+01 0.4765587919192D+01 0.4848165772611D+01 + 0.4931799391130D+01 0.5016489647323D+01 0.5102236902085D+01 0.5189040985952D+01 + 0.5276901180158D+01 0.5365816197444D+01 0.5455784162617D+01 0.5546802592894D+01 + 0.5638868378017D+01 0.5731977760181D+01 0.5826126313769D+01 0.5921308924927D+01 + 0.6017519770983D+01 0.6114752299744D+01 0.6212999208681D+01 0.6312252424025D+01 + 0.6412503079799D+01 0.6513741496818D+01 0.6615957161666D+01 0.6719138705689D+01 + 0.6823273884037D+01 0.6928349554769D+01 0.7034351658067D+01 0.7141265195588D+01 + 0.7249074209985D+01 0.7357761764637D+01 0.7467309923627D+01 0.7577699732003D+01 + 0.7688911196366D+01 0.7800923265826D+01 0.7913713813378D+01 0.8027259617727D+01 + 0.8141536345630D+01 0.8256518534789D+01 0.8372179577355D+01 0.8488491704090D+01 + 0.8605425969248D+01 0.8722952236222D+01 0.8841039164025D+01 0.8959654194655D+01 + 0.9078763541413D+01 0.9198332178230D+01 0.9318323830066D+01 0.9438700964464D+01 + 0.9559424784293D+01 0.9680455221780D+01 0.9801750933887D+01 0.9923269299099D+01 + 0.1004496641570D+02 0.1016679710163D+02 0.1028871489593D+02 0.1041067206198D+02 + 0.1053261959239D+02 0.1065450721594D+02 0.1077628340626D+02 0.1089789539267D+02 + 0.1101928917306D+02 0.1114040952889D+02 0.1126120004259D+02 0.1138160311709D+02 + 0.1150155999788D+02 0.1162101079752D+02 0.1173989452270D+02 0.1185814910389D+02 + 0.1197571142774D+02 0.1209251737221D+02 0.1220850184455D+02 0.1232359882222D+02 + 0.1243774139668D+02 0.1255086182033D+02 0.1266289155645D+02 0.1277376133233D+02 + 0.1288340119558D+02 0.1299174057364D+02 0.1309870833671D+02 0.1320423286383D+02 + 0.1330824211245D+02 0.1341066369131D+02 0.1351142493681D+02 0.1361045299271D+02 + 0.1370767489335D+02 0.1380301765027D+02 0.1389640834224D+02 0.1398777420882D+02 + 0.1407704274716D+02 0.1416414181234D+02 0.1424899972093D+02 0.1433154535791D+02 + 0.1441170828680D+02 0.1448941886294D+02 0.1456460834990D+02 0.1463720903887D+02 + 0.1470715437095D+02 0.1477437906225D+02 0.1483881923166D+02 0.1490041253114D+02 + 0.1495909827839D+02 0.1501481759178D+02 0.1506751352732D+02 0.1511713121747D+02 + 0.1516361801165D+02 0.1520692361818D+02 0.1524700024742D+02 0.1528380275595D+02 + 0.1531728879140D+02 0.1534741893776D+02 0.1537415686084D+02 0.1539746945363D+02 + 0.1541732698111D+02 0.1543370322439D+02 0.1544657562364D+02 0.1545592541956D+02 + 0.1546173779302D+02 0.1546400200242D+02 0.1546271151843D+02 0.1545786415570D+02 + 0.1544946220111D+02 0.1543751253809D+02 0.1542202676661D+02 0.1540302131844D+02 + 0.1538051756708D+02 0.1535454193202D+02 0.1532512597682D+02 0.1529230650045D+02 + 0.1525612562157D+02 0.1521663085508D+02 0.1517387518057D+02 0.1512791710213D+02 + 0.1507882069905D+02 0.1502665566690D+02 0.1497149734847D+02 0.1491342675424D+02 + 0.1485253057170D+02 0.1478890116319D+02 0.1472263655178D+02 0.1465384039476D+02 + 0.1458262194423D+02 0.1450909599456D+02 0.1443338281613D+02 0.1435560807511D+02 + 0.1427590273888D+02 0.1419440296685D+02 0.1411124998625D+02 0.1402658995277D+02 + 0.1394057379573D+02 0.1385335704764D+02 0.1376509965795D+02 0.1367596579089D+02 + 0.1358612360737D+02 0.1349574503081D+02 0.1340500549696D+02 0.1331408368786D+02 + 0.1322316124986D+02 0.1313242249599D+02 0.1304205409292D+02 0.1295224473262D+02 + 0.1286318478926D+02 0.1277506596148D+02 0.1268808090072D+02 0.1260242282594D+02 + 0.1251828512526D+02 0.1243586094535D+02 0.1235534276899D+02 0.1227692198172D+02 + 0.1220078842830D+02 0.1212712995982D+02 0.1205613197253D+02 0.1198797693913D+02 + 0.1192284393379D+02 0.1186090815186D+02 0.1180234042546D+02 0.1174730673615D+02 + 0.1169596772603D+02 0.1164847820834D+02 0.1160498667924D+02 0.1156563483188D+02 + 0.1153055707436D+02 0.1149988005301D+02 0.1147372218250D+02 0.1145219318434D+02 + 0.1143539363525D+02 0.1142341452711D+02 0.1141633683999D+02 0.1141423112993D+02 + 0.1141715713298D+02 0.1142516338731D+02 0.1143828687474D+02 0.1145655268355D+02 + 0.1147997369390D+02 0.1150855028761D+02 0.1154227008374D+02 0.1158110770138D+02 + 0.1162502455129D+02 0.1167396865756D+02 0.1172787451079D+02 0.1178666295396D+02 + 0.1185024110228D+02 0.1191850229803D+02 0.1199132610159D+02 0.1206857831946D+02 + 0.1215011107019D+02 0.1223576288907D+02 0.1232535887199D+02 0.1241871085933D+02 + 0.1251561765997D+02 0.1261586531600D+02 0.1271922740805D+02 0.1282546540151D+02 + 0.1293432903330D+02 0.1304555673916D+02 0.1315887612096D+02 0.1327400445348D+02 + 0.1339064923005D+02 0.1350850874625D+02 0.1362727272054D+02 0.1374662295087D+02 + 0.1386623400591D+02 0.1398577394943D+02 0.1410490509638D+02 0.1422328479880D+02 + 0.1434056625987D+02 0.1445639937388D+02 0.1457043159027D+02 0.1468230879914D+02 + 0.1479167623614D+02 0.1489817940404D+02 0.1500146500841D+02 0.1510118190471D+02 + 0.1519698205391D+02 0.1528852148379D+02 0.1537546125281D+02 0.1545746841364D+02 + 0.1553421697307D+02 0.1560538884523D+02 0.1567067479483D+02 0.1572977536717D+02 + 0.1578240180176D+02 0.1582827692612D+02 0.1586713602663D+02 0.1589872769311D+02 + 0.1592281463392D+02 0.1593917445849D+02 0.1594760042409D+02 0.1594790214378D+02 + 0.1593990625272D+02 0.1592345702984D+02 0.1589841697221D+02 0.1586466731948D+02 + 0.1582210852585D+02 0.1577066067732D+02 0.1571026385193D+02 0.1564087842120D+02 + 0.1556248529064D+02 0.1547508607802D+02 0.1537870322780D+02 0.1527338006062D+02 + 0.1515918075676D+02 0.1503619027308D+02 0.1490451419267D+02 0.1476427850715D+02 + 0.1461562933169D+02 0.1445873255288D+02 0.1429377341010D+02 0.1412095601137D+02 + 0.1394050278444D+02 0.1375265386499D+02 0.1355766642312D+02 0.1335581393054D+02 + 0.1314738537038D+02 0.1293268439219D+02 0.1271202841511D+02 0.1248574768189D+02 + 0.1225418426740D+02 0.1201769104500D+02 0.1177663061449D+02 0.1153137419578D+02 + 0.1128230049248D+02 0.1102979452961D+02 0.1077424647032D+02 0.1051605041603D+02 + 0.1025560319513D+02 0.9993303145083D+01 0.9729548892983D+01 0.9464738139829D+01 + 0.9199266453606D+01 0.8933526076402D+01 0.8667904750745D+01 0.8402784570301D+01 + 0.8138540859996D+01 0.7875541090527D+01 0.7614143832090D+01 0.7354697751983D+01 + 0.7097540660550D+01 0.6842998609696D+01 0.6591385047920D+01 0.6343000035605D+01 + 0.6098129523858D+01 0.5857044699944D+01 0.5620001401934D+01 0.5387239604814D+01 + 0.5158982979846D+01 0.4935438528573D+01 0.4716796292366D+01 0.4503229137976D+01 + 0.4294892619056D+01 0.4091924913152D+01 0.3894446833193D+01 0.3702561912045D+01 + 0.3516356558237D+01 0.3335900280537D+01 0.3161245978670D+01 0.2992430297065D+01 + 0.2829474038194D+01 0.2672382631762D+01 0.2521146655720D+01 0.2375742404881D+01 + 0.2236132502695D+01 0.2102266551639D+01 0.1974081817541D+01 0.1851503943111D+01 + 0.1734447685940D+01 0.1622817676200D+01 0.1516509189368D+01 0.1415408929331D+01 + 0.1319395817360D+01 0.1228341782531D+01 0.1142112549373D+01 0.1060568418635D+01 + 0.9835650373019D+00 0.9109541541726D+00 0.8425843575459D+00 0.7783017917968D+00 + 0.7179508498817D+00 0.6613748390683D+00 0.6084166174653D+00 0.5589191992012D+00 + 0.5127263263911D+00 0.4696830063190D+00 0.4296360125529D+00 0.3924343490009D+00 + 0.3579296762027D+00 0.3259766994340D+00 0.2964335184742D+00 0.2691619391536D+00 + 0.2440277470488D+00 0.2209009439361D+00 0.1996559478365D+00 0.1801717576938D+00 + 0.1623320839184D+00 0.1460254461990D+00 0.1311452401368D+00 0.1175897743854D+00 + 0.1052622800912D+00 0.9407089451527D-01 0.8392862078550D-01 0.7475326577690D-01 + 0.6646735814128D-01 0.5899804851766D-01 0.5227699394346D-01 0.4624022845899D-01 + 0.4082802185442D-01 0.3598472845105D-01 0.3165862773800D-01 0.2780175860384D-01 + 0.2436974881146D-01 0.2132164126495D-01 0.1861971851162D-01 0.1622932681167D-01 + 0.1411870099424D-01 0.1225879120292D-01 0.1062309251766D-01 0.9187478324824D-02 + 0.7930038194170D-02 0.6830920911119D-02 0.5872183206948D-02 0.5037644628161D-02 + 0.4312748890659D-02 0.3684431974697D-02 0.3140997133459D-02 0.2671996911721D-02 + 0.2268122201696D-02 0.1921098300832D-02 0.1623587881022D-02 0.1369100730387D-02 + 0.1151910087150D-02 0.9669753500508D-03 0.8098709208516D-03 0.6767209113939D-03 + 0.5641394300578D-03 0.4691761498429D-03 0.3892668522563D-03 0.3221886372696D-03 + 0.2660194893607D-03 0.2191018926233D-03 0.1800101936858D-03 0.1475214192933D-03 + 0.1205892654847D-03 0.9832098695562D-04 0.7995692809159D-04 0.6485245095860D-04 + 0.5246202996510D-04 0.4232529769133D-04 0.3405484129524D-04 0.2732556374477D-04 + 0.2186543872353D-04 0.1744750226736D-04 0.1388293789508D-04 0.1101512510421D-04 + 0.8714533541124D-05 0.6874356872787D-05 0.5406791351919D-05 0.4239874261002D-05 + 0.3314806839624D-05 0.2583694952262D-05 0.2007648657315D-05 0.1555189018603D-05 + 0.1200916989437D-05 0.9244050332163D-06 0.7092773630705D-06 0.5424493283134D-06 + 0.4135005904089D-06 0.3141603589352D-06 0.2378861413798D-06 0.1795202409555D-06 + 0.1350106538765D-06 0.1011851095086D-06 0.7556879909866D-07 0.5623788451178D-07 + 0.4170219815814D-07 0.3081166707088D-07 0.2268194336078D-07 0.1663552297805D-07 + 0.1215530542863D-07 0.8848107127806D-08 0.6416106613217D-08 0.4634585104140D-08 + 0.3334643304910D-08 0.2389835688104D-08 0.1705876062949D-08 0.1212741020005D-08 + 0.8586376559590D-09 0.6054146003728D-09 0.4250856698627D-09 0.2972075512731D-09 + 0.2069101606973D-09 0.1434236365115D-09 0.9898160505409D-10 0.6800804519963D-10 + 0.4651712787494D-10 0.3167310042586D-10 0.2146695649341D-10 0.1448079937139D-10 + 0.9722622861678D-11 0.6496070631129D-11 0.4319651023999D-11 0.2858591661735D-11 + 0.1882503214946D-11 0.1233598363270D-11 0.8043412065319D-12 0.5218060130221D-12 + 0.3367856512696D-12 0.2162455335843D-12 0.1381220475631D-12 0.8775552000331D-13 diff --git a/Test/Fe16/v_fe2.1 b/Test/Fe16/v_fe2.1 new file mode 100755 index 000000000..f3c4e967f --- /dev/null +++ b/Test/Fe16/v_fe2.1 @@ -0,0 +1,1542 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Fe. + 2 0.0000000000000D+00 + LSMS: xx z= 26. xvalws= 5.22926 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728400909D+02-0.5199725115555D+02-0.5199721790459D+02-0.5199718425142D+02 +-0.5199715019116D+02-0.5199711571889D+02-0.5199708082964D+02-0.5199704551834D+02 +-0.5199700977990D+02-0.5199697360915D+02-0.5199693700086D+02-0.5199689994973D+02 +-0.5199686245042D+02-0.5199682449748D+02-0.5199678608545D+02-0.5199674720876D+02 +-0.5199670786180D+02-0.5199666803887D+02-0.5199662773421D+02-0.5199658694201D+02 +-0.5199654565635D+02-0.5199650387127D+02-0.5199646158073D+02-0.5199641877860D+02 +-0.5199637545872D+02-0.5199633161480D+02-0.5199628724051D+02-0.5199624232942D+02 +-0.5199619687506D+02-0.5199615087084D+02-0.5199610431012D+02-0.5199605718616D+02 +-0.5199600949214D+02-0.5199596122116D+02-0.5199591236626D+02-0.5199586292036D+02 +-0.5199581287632D+02-0.5199576222688D+02-0.5199571096474D+02-0.5199565908248D+02 +-0.5199560657259D+02-0.5199555342748D+02-0.5199549963947D+02-0.5199544520078D+02 +-0.5199539010352D+02-0.5199533433975D+02-0.5199527790139D+02-0.5199522078028D+02 +-0.5199516296816D+02-0.5199510445666D+02-0.5199504523733D+02-0.5199498530160D+02 +-0.5199492464081D+02-0.5199486324617D+02-0.5199480110883D+02-0.5199473821977D+02 +-0.5199467456990D+02-0.5199461015004D+02-0.5199454495085D+02-0.5199447896290D+02 +-0.5199441217666D+02-0.5199434458246D+02-0.5199427617052D+02-0.5199420693096D+02 +-0.5199413685375D+02-0.5199406592876D+02-0.5199399414573D+02-0.5199392149428D+02 +-0.5199384796390D+02-0.5199377354396D+02-0.5199369822368D+02-0.5199362199218D+02 +-0.5199354483843D+02-0.5199346675127D+02-0.5199338771940D+02-0.5199330773139D+02 +-0.5199322677567D+02-0.5199314484053D+02-0.5199306191412D+02-0.5199297798443D+02 +-0.5199289303934D+02-0.5199280706654D+02-0.5199272005361D+02-0.5199263198797D+02 +-0.5199254285685D+02-0.5199245264737D+02-0.5199236134649D+02-0.5199226894099D+02 +-0.5199217541751D+02-0.5199208076251D+02-0.5199198496230D+02-0.5199188800302D+02 +-0.5199178987064D+02-0.5199169055096D+02-0.5199159002963D+02-0.5199148829207D+02 +-0.5199138532359D+02-0.5199128110928D+02-0.5199117563407D+02-0.5199106888269D+02 +-0.5199096083969D+02-0.5199085148944D+02-0.5199074081613D+02-0.5199062880373D+02 +-0.5199051543604D+02-0.5199040069664D+02-0.5199028456895D+02-0.5199016703615D+02 +-0.5199004808124D+02-0.5198992768700D+02-0.5198980583600D+02-0.5198968251063D+02 +-0.5198955769302D+02-0.5198943136512D+02-0.5198930350863D+02-0.5198917410506D+02 +-0.5198904313569D+02-0.5198891058155D+02-0.5198877642345D+02-0.5198864064200D+02 +-0.5198850321751D+02-0.5198836413012D+02-0.5198822335968D+02-0.5198808088582D+02 +-0.5198793668793D+02-0.5198779074512D+02-0.5198764303627D+02-0.5198749354000D+02 +-0.5198734223467D+02-0.5198718909837D+02-0.5198703410894D+02-0.5198687724393D+02 +-0.5198671848065D+02-0.5198655779610D+02-0.5198639516703D+02-0.5198623056988D+02 +-0.5198606398084D+02-0.5198589537577D+02-0.5198572473026D+02-0.5198555201962D+02 +-0.5198537721883D+02-0.5198520030257D+02-0.5198502124524D+02-0.5198484002091D+02 +-0.5198465660333D+02-0.5198447096595D+02-0.5198428308188D+02-0.5198409292391D+02 +-0.5198390046450D+02-0.5198370567579D+02-0.5198350852955D+02-0.5198330899725D+02 +-0.5198310704998D+02-0.5198290265850D+02-0.5198269579318D+02-0.5198248642408D+02 +-0.5198227452087D+02-0.5198206005285D+02-0.5198184298896D+02-0.5198162329776D+02 +-0.5198140094741D+02-0.5198117590571D+02-0.5198094814005D+02-0.5198071761744D+02 +-0.5198048430449D+02-0.5198024816738D+02-0.5198000917191D+02-0.5197976728344D+02 +-0.5197952246692D+02-0.5197927468690D+02-0.5197902390745D+02-0.5197877009224D+02 +-0.5197851320449D+02-0.5197825320698D+02-0.5197799006201D+02-0.5197772373146D+02 +-0.5197745417673D+02-0.5197718135875D+02-0.5197690523796D+02-0.5197662577437D+02 +-0.5197634292744D+02-0.5197605665620D+02-0.5197576691913D+02-0.5197547367423D+02 +-0.5197517687900D+02-0.5197487649041D+02-0.5197457246489D+02-0.5197426475838D+02 +-0.5197395332627D+02-0.5197363812338D+02-0.5197331910403D+02-0.5197299622195D+02 +-0.5197266943031D+02-0.5197233868173D+02-0.5197200392824D+02-0.5197166512128D+02 +-0.5197132221174D+02-0.5197097514984D+02-0.5197062388528D+02-0.5197026836709D+02 +-0.5196990854370D+02-0.5196954436291D+02-0.5196917577189D+02-0.5196880271716D+02 +-0.5196842514461D+02-0.5196804299945D+02-0.5196765622622D+02-0.5196726476881D+02 +-0.5196686857041D+02-0.5196646757354D+02-0.5196606171998D+02-0.5196565095085D+02 +-0.5196523520651D+02-0.5196481442664D+02-0.5196438855015D+02-0.5196395751522D+02 +-0.5196352125928D+02-0.5196307971901D+02-0.5196263283028D+02-0.5196218052823D+02 +-0.5196172274718D+02-0.5196125942066D+02-0.5196079048138D+02-0.5196031586126D+02 +-0.5195983549135D+02-0.5195934930191D+02-0.5195885722231D+02-0.5195835918107D+02 +-0.5195785510585D+02-0.5195734492343D+02-0.5195682855969D+02-0.5195630593961D+02 +-0.5195577698725D+02-0.5195524162577D+02-0.5195469977736D+02-0.5195415136330D+02 +-0.5195359630387D+02-0.5195303451841D+02-0.5195246592528D+02-0.5195189044181D+02 +-0.5195130798435D+02-0.5195071846824D+02-0.5195012180777D+02-0.5194951791619D+02 +-0.5194890670569D+02-0.5194828808741D+02-0.5194766197137D+02-0.5194702826653D+02 +-0.5194638688071D+02-0.5194573772064D+02-0.5194508069188D+02-0.5194441569885D+02 +-0.5194374264482D+02-0.5194306143187D+02-0.5194237196087D+02-0.5194167413149D+02 +-0.5194096784220D+02-0.5194025299021D+02-0.5193952947146D+02-0.5193879718066D+02 +-0.5193805601119D+02-0.5193730585519D+02-0.5193654660341D+02-0.5193577814533D+02 +-0.5193500036904D+02-0.5193421316129D+02-0.5193341640742D+02-0.5193260999141D+02 +-0.5193179379578D+02-0.5193096770164D+02-0.5193013158865D+02-0.5192928533501D+02 +-0.5192842881739D+02-0.5192756191098D+02-0.5192668448947D+02-0.5192579642497D+02 +-0.5192489758803D+02-0.5192398784765D+02-0.5192306707119D+02-0.5192213512442D+02 +-0.5192119187145D+02-0.5192023717474D+02-0.5191927089505D+02-0.5191829289146D+02 +-0.5191730302133D+02-0.5191630114025D+02-0.5191528710207D+02-0.5191426075883D+02 +-0.5191322196077D+02-0.5191217055632D+02-0.5191110639202D+02-0.5191002931255D+02 +-0.5190893916069D+02-0.5190783577729D+02-0.5190671900126D+02-0.5190558866954D+02 +-0.5190444461705D+02-0.5190328667673D+02-0.5190211467945D+02-0.5190092845399D+02 +-0.5189972782709D+02-0.5189851262330D+02-0.5189728266508D+02-0.5189603777267D+02 +-0.5189477776415D+02-0.5189350245533D+02-0.5189221165981D+02-0.5189090518885D+02 +-0.5188958285145D+02-0.5188824445423D+02-0.5188688980147D+02-0.5188551869503D+02 +-0.5188413093435D+02-0.5188272631641D+02-0.5188130463569D+02-0.5187986568418D+02 +-0.5187840925129D+02-0.5187693512386D+02-0.5187544308611D+02-0.5187393291962D+02 +-0.5187240440329D+02-0.5187085731330D+02-0.5186929142309D+02-0.5186770650332D+02 +-0.5186610232183D+02-0.5186447864362D+02-0.5186283523081D+02-0.5186117184259D+02 +-0.5185948823518D+02-0.5185778416183D+02-0.5185605937277D+02-0.5185431361514D+02 +-0.5185254663297D+02-0.5185075816718D+02-0.5184894795548D+02-0.5184711573237D+02 +-0.5184526122909D+02-0.5184338417356D+02-0.5184148429039D+02-0.5183956130079D+02 +-0.5183761492255D+02-0.5183564486998D+02-0.5183365085389D+02-0.5183163258155D+02 +-0.5182958975660D+02-0.5182752207907D+02-0.5182542924529D+02-0.5182331094785D+02 +-0.5182116687559D+02-0.5181899671350D+02-0.5181680014270D+02-0.5181457684041D+02 +-0.5181232647986D+02-0.5181004873028D+02-0.5180774325683D+02-0.5180540972054D+02 +-0.5180304777830D+02-0.5180065708277D+02-0.5179823728232D+02-0.5179578802103D+02 +-0.5179330893860D+02-0.5179079967027D+02-0.5178825984684D+02-0.5178568909453D+02 +-0.5178308703501D+02-0.5178045328526D+02-0.5177778745757D+02-0.5177508915948D+02 +-0.5177235799366D+02-0.5176959355795D+02-0.5176679544522D+02-0.5176396324334D+02 +-0.5176109653512D+02-0.5175819489823D+02-0.5175525790517D+02-0.5175228512318D+02 +-0.5174927611419D+02-0.5174623043474D+02-0.5174314763592D+02-0.5174002726332D+02 +-0.5173686885694D+02-0.5173367195115D+02-0.5173043607457D+02-0.5172716075006D+02 +-0.5172384549462D+02-0.5172048981932D+02-0.5171709322923D+02-0.5171365522335D+02 +-0.5171017529452D+02-0.5170665292940D+02-0.5170308760833D+02-0.5169947880525D+02 +-0.5169582598771D+02-0.5169212861671D+02-0.5168838614662D+02-0.5168459802518D+02 +-0.5168076369333D+02-0.5167688258518D+02-0.5167295412791D+02-0.5166897774168D+02 +-0.5166495283960D+02-0.5166087882755D+02-0.5165675510418D+02-0.5165258106080D+02 +-0.5164835608125D+02-0.5164407954186D+02-0.5163975081138D+02-0.5163536925080D+02 +-0.5163093421337D+02-0.5162644504442D+02-0.5162190108131D+02-0.5161730165335D+02 +-0.5161264608164D+02-0.5160793367906D+02-0.5160316375011D+02-0.5159833559084D+02 +-0.5159344848875D+02-0.5158850172268D+02-0.5158349456272D+02-0.5157842627009D+02 +-0.5157329609709D+02-0.5156810328692D+02-0.5156284707365D+02-0.5155752668206D+02 +-0.5155214132756D+02-0.5154669021608D+02-0.5154117254396D+02-0.5153558749786D+02 +-0.5152993425461D+02-0.5152421198113D+02-0.5151841983433D+02-0.5151255696093D+02 +-0.5150662249744D+02-0.5150061557002D+02-0.5149453529428D+02-0.5148838077528D+02 +-0.5148215110737D+02-0.5147584537403D+02-0.5146946264782D+02-0.5146300199022D+02 +-0.5145646245151D+02-0.5144984307067D+02-0.5144314287525D+02-0.5143636088122D+02 +-0.5142949609291D+02-0.5142254750281D+02-0.5141551409151D+02-0.5140839482753D+02 +-0.5140118866721D+02-0.5139389455459D+02-0.5138651142128D+02-0.5137903818632D+02 +-0.5137147375605D+02-0.5136381702401D+02-0.5135606687078D+02-0.5134822216388D+02 +-0.5134028175756D+02-0.5133224449278D+02-0.5132410919702D+02-0.5131587468413D+02 +-0.5130753975423D+02-0.5129910319357D+02-0.5129056377438D+02-0.5128192025477D+02 +-0.5127317137854D+02-0.5126431587514D+02-0.5125535245940D+02-0.5124627983153D+02 +-0.5123709667690D+02-0.5122780166596D+02-0.5121839345403D+02-0.5120887068125D+02 +-0.5119923197240D+02-0.5118947593678D+02-0.5117960116805D+02-0.5116960624416D+02 +-0.5115948972712D+02-0.5114925016296D+02-0.5113888608154D+02-0.5112839599644D+02 +-0.5111777840483D+02-0.5110703178733D+02-0.5109615460788D+02-0.5108514531363D+02 +-0.5107400233480D+02-0.5106272408452D+02-0.5105130895877D+02-0.5103975533619D+02 +-0.5102806157801D+02-0.5101622602790D+02-0.5100424701185D+02-0.5099212283803D+02 +-0.5097985179674D+02-0.5096743216021D+02-0.5095486218256D+02-0.5094214009961D+02 +-0.5092926412887D+02-0.5091623246932D+02-0.5090304330139D+02-0.5088969478681D+02 +-0.5087618506855D+02-0.5086251227064D+02-0.5084867449820D+02-0.5083466983722D+02 +-0.5082049635455D+02-0.5080615209778D+02-0.5079163509518D+02-0.5077694335558D+02 +-0.5076207486834D+02-0.5074702760324D+02-0.5073179951042D+02-0.5071638852033D+02 +-0.5070079254364D+02-0.5068500947122D+02-0.5066903717403D+02-0.5065287350315D+02 +-0.5063651628963D+02-0.5061996334457D+02-0.5060321245898D+02-0.5058626140382D+02 +-0.5056910792994D+02-0.5055174976809D+02-0.5053418462884D+02-0.5051641020267D+02 +-0.5049842415989D+02-0.5048022415067D+02-0.5046180780505D+02-0.5044317273295D+02 +-0.5042431652422D+02-0.5040523674861D+02-0.5038593095586D+02-0.5036639667573D+02 +-0.5034663141803D+02-0.5032663267268D+02-0.5030639790981D+02-0.5028592457977D+02 +-0.5026521011328D+02-0.5024425192145D+02-0.5022304739591D+02-0.5020159390892D+02 +-0.5017988881346D+02-0.5015792944334D+02-0.5013571311336D+02-0.5011323711944D+02 +-0.5009049873873D+02-0.5006749522980D+02-0.5004422383280D+02-0.5002068176959D+02 +-0.4999686624397D+02-0.4997277444186D+02-0.4994840353146D+02-0.4992375066350D+02 +-0.4989881297144D+02-0.4987358757171D+02-0.4984807156389D+02-0.4982226203106D+02 +-0.4979615603991D+02-0.4976975064117D+02-0.4974304286974D+02-0.4971602974502D+02 +-0.4968870827126D+02-0.4966107543776D+02-0.4963312821924D+02-0.4960486357616D+02 +-0.4957627845502D+02-0.4954736978871D+02-0.4951813449683D+02-0.4948856948612D+02 +-0.4945867165071D+02-0.4942843787257D+02-0.4939786502185D+02-0.4936694995729D+02 +-0.4933568952659D+02-0.4930408056681D+02-0.4927211990478D+02-0.4923980435752D+02 +-0.4920713073265D+02-0.4917409582880D+02-0.4914069643607D+02-0.4910692933642D+02 +-0.4907279130416D+02-0.4903827910633D+02-0.4900338950319D+02-0.4896811924867D+02 +-0.4893246509079D+02-0.4889642377211D+02-0.4885999203021D+02-0.4882316659813D+02 +-0.4878594420482D+02-0.4874832157556D+02-0.4871029543247D+02-0.4867186249491D+02 +-0.4863301947995D+02-0.4859376310277D+02-0.4855409007715D+02-0.4851399711583D+02 +-0.4847348093100D+02-0.4843253823466D+02-0.4839116573905D+02-0.4834936015704D+02 +-0.4830711820251D+02-0.4826443659074D+02-0.4822131203876D+02-0.4817774126566D+02 +-0.4813372099301D+02-0.4808924794511D+02-0.4804431884930D+02-0.4799893043625D+02 +-0.4795307944023D+02-0.4790676259938D+02-0.4785997665588D+02-0.4781271835619D+02 +-0.4776498445124D+02-0.4771677169657D+02-0.4766807685247D+02-0.4761889668409D+02 +-0.4756922796153D+02-0.4751906745988D+02-0.4746841195927D+02-0.4741725824487D+02 +-0.4736560310686D+02-0.4731344334036D+02-0.4726077574537D+02-0.4720759712663D+02 +-0.4715390429349D+02-0.4709969405976D+02-0.4704496324345D+02-0.4698970866656D+02 +-0.4693392715482D+02-0.4687761553742D+02-0.4682077064661D+02-0.4676338931742D+02 +-0.4670546838725D+02-0.4664700469545D+02-0.4658799508292D+02-0.4652843639162D+02 +-0.4646832546412D+02-0.4640765914308D+02-0.4634643427075D+02-0.4628464768840D+02 +-0.4622229623583D+02-0.4615937675077D+02-0.4609588606835D+02-0.4603182102046D+02 +-0.4596717843531D+02-0.4590195513672D+02-0.4583614794369D+02-0.4576975366979D+02 +-0.4570276912265D+02-0.4563519110351D+02-0.4556701640665D+02-0.4549824181908D+02 +-0.4542886412007D+02-0.4535888008084D+02-0.4528828646428D+02-0.4521708002473D+02 +-0.4514525750785D+02-0.4507281565054D+02-0.4499975118097D+02-0.4492606081870D+02 +-0.4485174127497D+02-0.4477678925295D+02-0.4470120144833D+02-0.4462497454985D+02 +-0.4454810524011D+02-0.4447059019649D+02-0.4439242609219D+02-0.4431360959758D+02 +-0.4423413738159D+02-0.4415400611337D+02-0.4407321246418D+02-0.4399175310947D+02 +-0.4390962473114D+02-0.4382682402010D+02-0.4374334767908D+02-0.4365919242563D+02 +-0.4357435499539D+02-0.4348883214570D+02-0.4340262065933D+02-0.4331571734857D+02 +-0.4322811905962D+02-0.4313982267710D+02-0.4305082512897D+02-0.4296112339160D+02 +-0.4287071449512D+02-0.4277959552900D+02-0.4268776364786D+02-0.4259521607738D+02 +-0.4250195012053D+02-0.4240796316384D+02-0.4231325268378D+02-0.4221781625326D+02 +-0.4212165154821D+02-0.4202475635403D+02-0.4192712857207D+02-0.4182876622603D+02 +-0.4172966746809D+02-0.4162983058491D+02-0.4152925400326D+02-0.4142793629535D+02 +-0.4132587618362D+02-0.4122307254514D+02-0.4111952441526D+02-0.4101523099069D+02 +-0.4091019163177D+02-0.4080440586392D+02-0.4069787337814D+02-0.4059059403052D+02 +-0.4048256784069D+02-0.4037379498919D+02-0.4026427581359D+02-0.4015401080347D+02 +-0.4004300059408D+02-0.3993124595881D+02-0.3981874780047D+02-0.3970550714118D+02 +-0.3959152511128D+02-0.3947680293704D+02-0.3936134192738D+02-0.3924514345974D+02 +-0.3912820896514D+02-0.3901053991273D+02-0.3889213779388D+02-0.3877300410616D+02 +-0.3865314033730D+02-0.3853254794941D+02-0.3841122836384D+02-0.3828918294671D+02 +-0.3816641299561D+02-0.3804291972752D+02-0.3791870426838D+02-0.3779376764439D+02 +-0.3766811077544D+02-0.3754173447071D+02-0.3741463942662D+02-0.3728682622747D+02 +-0.3715829534855D+02-0.3702904716206D+02-0.3689908194568D+02-0.3676839989389D+02 +-0.3663700113198D+02-0.3650488573242D+02-0.3637205373385D+02-0.3623850516215D+02 +-0.3610424005352D+02-0.3596925847947D+02-0.3583356057318D+02-0.3569714655716D+02 +-0.3556001677183D+02-0.3542217170480D+02-0.3528361202035D+02-0.3514433858906D+02 +-0.3500435251706D+02-0.3486365517474D+02-0.3472224822457D+02-0.3458013364781D+02 +-0.3443731376977D+02-0.3429379128348D+02-0.3414956927154D+02-0.3400465122587D+02 +-0.3385904106531D+02-0.3371274315081D+02-0.3356576229817D+02-0.3341810378823D+02 +-0.3326977337430D+02-0.3312077728689D+02-0.3297112223571D+02-0.3282081540879D+02 +-0.3266986446883D+02-0.3251827754673D+02-0.3236606323235D+02-0.3221323056253D+02 +-0.3205978900636D+02-0.3190574844798D+02-0.3175111916665D+02-0.3159591181450D+02 +-0.3144013739192D+02-0.3128380722060D+02-0.3112693291460D+02-0.3096952634939D+02 +-0.3081159962896D+02-0.3065316505139D+02-0.3049423507279D+02-0.3033482226994D+02 +-0.3017493930171D+02-0.3001459886954D+02-0.2985381367711D+02-0.2969259638940D+02 +-0.2953095959141D+02-0.2936891574677D+02-0.2920647715631D+02-0.2904365591713D+02 +-0.2888046388202D+02-0.2871691261992D+02-0.2855301337730D+02-0.2838877704096D+02 +-0.2822421410237D+02-0.2805933462405D+02-0.2789414820796D+02-0.2772866396645D+02 +-0.2756289049588D+02-0.2739683585338D+02-0.2723050753680D+02-0.2706391246838D+02 +-0.2689705698223D+02-0.2672994681603D+02-0.2656258710714D+02-0.2639498239345D+02 +-0.2622713661917D+02-0.2605905314574D+02-0.2589073476829D+02-0.2572218373759D+02 +-0.2555340178776D+02-0.2538439017000D+02-0.2521514969218D+02-0.2504568076457D+02 +-0.2487598345161D+02-0.2470605752972D+02-0.2453590255090D+02-0.2436551791213D+02 +-0.2419490293015D+02-0.2402405692122D+02-0.2385297928550D+02-0.2368166959536D+02 +-0.2351012768684D+02-0.2333835375355D+02-0.2316634844181D+02-0.2299411294593D+02 +-0.2282164910224D+02-0.2264895948042D+02-0.2247604747020D+02-0.2230291736187D+02 +-0.2212957441833D+02-0.2195602493665D+02-0.2178227629680D+02-0.2160833699531D+02 +-0.2143421666157D+02-0.2125992605447D+02-0.2108547703736D+02-0.2091088252957D+02 +-0.2073615643311D+02-0.2056131353347D+02-0.2038636937454D+02-0.2021134010787D+02 +-0.2003624231780D+02-0.1986109282464D+02-0.1968590846923D+02-0.1951070588338D+02 +-0.1933550125113D+02-0.1916031006739D+02-0.1898514690054D+02-0.1881002516654D+02 +-0.1863495692195D+02-0.1845995268332D+02-0.1828502127992D+02-0.1811016974578D+02 +-0.1793540325598D+02-0.1776072511080D+02-0.1758613676940D+02-0.1741163793327D+02 +-0.1723722667775D+02-0.1706289962834D+02-0.1688865217702D+02-0.1671447873257D+02 +-0.1654037299789D+02-0.1636632826691D+02-0.1619233773325D+02-0.1601839480315D+02 +-0.1584449340510D+02-0.1567062828984D+02-0.1549679531468D+02-0.1532299170720D+02 +-0.1514921630451D+02-0.1497546976480D+02-0.1480175474939D+02-0.1462807607400D+02 +-0.1445444082871D+02-0.1428085846710D+02-0.1410734086517D+02-0.1393390235146D+02 +-0.1376055970989D+02-0.1358733215727D+02-0.1341424129731D+02-0.1324131105355D+02 +-0.1306856758305D+02-0.1289603917318D+02-0.1272375612351D+02-0.1255175061484D+02 +-0.1238005656736D+02-0.1220870948967D+02-0.1203774632043D+02-0.1186720526422D+02 +-0.1169712562320D+02-0.1152754762583D+02-0.1135851225403D+02-0.1119006106993D+02 +-0.1102223604329D+02-0.1085507938069D+02-0.1068863335731D+02-0.1052294015218D+02 +-0.1035804168776D+02-0.1019397947446D+02-0.1003079446077D+02-0.9868526889628D+01 +-0.9707216161554D+01-0.9546900704939D+01-0.9387617854023D+01-0.9229403734858D+01 +-0.9072293159592D+01-0.8916319529363D+01-0.8761514745993D+01-0.8607909132693D+01 +-0.8455531363896D+01-0.8304408404305D+01-0.8154565457227D+01-0.8006025922166D+01 +-0.7858811361682D+01-0.7712941477416D+01-0.7568434095199D+01-0.7425305159081D+01 +-0.7283568734134D+01-0.7143237017788D+01-0.7004320359504D+01-0.6866827288485D+01 +-0.6730764549154D+01-0.6596137144079D+01-0.6462948384000D+01-0.6331199944618D+01 +-0.6200891929738D+01-0.6072022940407D+01-0.5944590149603D+01-0.5818589382077D+01 +-0.5694015198898D+01-0.5570860986265D+01-0.5449119048124D+01-0.5328780702141D+01 +-0.5209836378552D+01-0.5092275721431D+01-0.4976087691897D+01-0.4861260672787D+01 +-0.4747782574321D+01-0.4635640940271D+01-0.4524823054180D+01-0.4415316045125D+01 +-0.4307106992579D+01-0.4200183029885D+01-0.4094531445869D+01-0.3990139784139D+01 +-0.3886995939600D+01-0.3785088251726D+01-0.3684405594148D+01-0.3584937460106D+01 +-0.3486674043348D+01-0.3389606314047D+01-0.3293726089348D+01-0.3199026098161D+01 +-0.3105500039868D+01-0.3013142636618D+01-0.2921949678952D+01-0.2831918064533D+01 +-0.2743045829849D+01-0.2655332174788D+01-0.2568777480092D+01-0.2483383317815D+01 +-0.2399152454962D+01-0.2316088850658D+01-0.2234197647300D+01-0.2153485156272D+01 +-0.2073958838965D+01-0.1995627283965D+01-0.1918500181413D+01-0.1842588295670D+01 +-0.1767903437522D+01-0.1694458437274D+01-0.1622267120110D+01-0.1551344285168D+01 +-0.1481705689753D+01-0.1413368040087D+01-0.1346348989896D+01-0.1280667148051D+01 +-0.1216342096293D+01-0.1153394417906D+01-0.1091845737986D+01-0.1031718775725D+01 +-0.9730374088849D+00-0.9158267504133D+00-0.8601132368937D+00-0.8059247283301D+00 +-0.7532906185600D+00-0.7022419554295D+00-0.6528115697324D+00-0.6050342118170D+00 +-0.5589466947046D+00-0.5145880425354D+00-0.4719996431596D+00-0.4312254037239D+00 +-0.3923119081554D+00-0.3553085755132D+00-0.3202678182603D+00-0.2872451996103D+00 +-0.2562993012896D+00 + 0.0000000000000D+00 + 1012 0.5229258479779D+01 + 0.2150742905406D-04 0.2201934401975D-04 0.2254344131081D-04 0.2308001074793D-04 + 0.2362934904336D-04 0.2419175996469D-04 0.2476755450247D-04 0.2535705104185D-04 + 0.2596057553829D-04 0.2657846169737D-04 0.2721105115901D-04 0.2785869368592D-04 + 0.2852174735659D-04 0.2920057876285D-04 0.2989556321214D-04 0.3060708493450D-04 + 0.3133553729459D-04 0.3208132300862D-04 0.3284485436652D-04 0.3362655345933D-04 + 0.3442685241199D-04 0.3524619362168D-04 0.3608503000175D-04 0.3694382523153D-04 + 0.3782305401197D-04 0.3872320232740D-04 0.3964476771351D-04 0.4058825953159D-04 + 0.4155419924941D-04 0.4254312072866D-04 0.4355557051923D-04 0.4459210816046D-04 + 0.4565330648961D-04 0.4673975195749D-04 0.4785204495171D-04 0.4899080012754D-04 + 0.5015664674660D-04 0.5135022902361D-04 0.5257220648130D-04 0.5382325431382D-04 + 0.5510406375867D-04 0.5641534247751D-04 0.5775781494596D-04 0.5913222285265D-04 + 0.6053932550771D-04 0.6197990026094D-04 0.6345474292991D-04 0.6496466823815D-04 + 0.6651051026378D-04 0.6809312289875D-04 0.6971338031887D-04 0.7137217746513D-04 + 0.7307043053626D-04 0.7480907749308D-04 0.7658907857468D-04 0.7841141682692D-04 + 0.8027709864336D-04 0.8218715431905D-04 0.8414263861740D-04 0.8614463135050D-04 + 0.8819423797310D-04 0.9029259019072D-04 0.9244084658213D-04 0.9464019323656D-04 + 0.9689184440594D-04 0.9919704317265D-04 0.1015570621330D-03 0.1039732040969D-03 + 0.1064468028041D-03 0.1089792236573D-03 0.1115718644728D-03 0.1142261562483D-03 + 0.1169435639500D-03 0.1197255873171D-03 0.1225737616857D-03 0.1254896588328D-03 + 0.1284748878395D-03 0.1315310959746D-03 0.1346599695998D-03 0.1378632350954D-03 + 0.1411426598085D-03 0.1445000530233D-03 0.1479372669546D-03 0.1514561977641D-03 + 0.1550587866019D-03 0.1587470206711D-03 0.1625229343189D-03 0.1663886101524D-03 + 0.1703461801815D-03 0.1743978269887D-03 0.1785457849256D-03 0.1827923413391D-03 + 0.1871398378251D-03 0.1915906715131D-03 0.1961472963799D-03 0.2008122245952D-03 + 0.2055880278984D-03 0.2104773390081D-03 0.2154828530649D-03 0.2206073291079D-03 + 0.2258535915864D-03 0.2312245319072D-03 0.2367231100177D-03 0.2423523560273D-03 + 0.2481153718665D-03 0.2540153329849D-03 0.2600554900897D-03 0.2662391709247D-03 + 0.2725697820915D-03 0.2790508109132D-03 0.2856858273428D-03 0.2924784859153D-03 + 0.2994325277470D-03 0.3065517825810D-03 0.3138401708812D-03 0.3213017059753D-03 + 0.3289404962488D-03 0.3367607473897D-03 0.3447667646870D-03 0.3529629553823D-03 + 0.3613538310777D-03 0.3699440101989D-03 0.3787382205180D-03 0.3877413017338D-03 + 0.3969582081140D-03 0.4063940111991D-03 0.4160539025692D-03 0.4259431966769D-03 + 0.4360673337456D-03 0.4464318827368D-03 0.4570425443864D-03 0.4679051543124D-03 + 0.4790256861959D-03 0.4904102550358D-03 0.5020651204812D-03 0.5139966902408D-03 + 0.5262115235724D-03 0.5387163348549D-03 0.5515179972435D-03 0.5646235464104D-03 + 0.5780401843732D-03 0.5917752834137D-03 0.6058363900874D-03 0.6202312293275D-03 + 0.6349677086450D-03 0.6500539224267D-03 0.6654981563344D-03 0.6813088918062D-03 + 0.6974948106637D-03 0.7140647998269D-03 0.7310279561389D-03 0.7483935913040D-03 + 0.7661712369406D-03 0.7843706497523D-03 0.8030018168203D-03 0.8220749610184D-03 + 0.8416005465556D-03 0.8615892846469D-03 0.8820521393172D-03 0.9030003333406D-03 + 0.9244453543176D-03 0.9463989608946D-03 0.9688731891282D-03 0.9918803589975D-03 + 0.1015433081069D-02 0.1039544263315D-02 0.1064227118095D-02 0.1089495169290D-02 + 0.1115362259619D-02 0.1141842558105D-02 0.1168950567737D-02 0.1196701133289D-02 + 0.1225109449338D-02 0.1254191068456D-02 0.1283961909601D-02 0.1314438266696D-02 + 0.1345636817413D-02 0.1377574632157D-02 0.1410269183260D-02 0.1443738354387D-02 + 0.1478000450161D-02 0.1513074206015D-02 0.1548978798262D-02 0.1585733854409D-02 + 0.1623359463706D-02 0.1661876187936D-02 0.1701305072458D-02 0.1741667657505D-02 + 0.1782985989747D-02 0.1825282634108D-02 0.1868580685877D-02 0.1912903783076D-02 + 0.1958276119133D-02 0.2004722455835D-02 0.2052268136585D-02 0.2100939099962D-02 + 0.2150761893598D-02 0.2201763688371D-02 0.2253972292925D-02 0.2307416168524D-02 + 0.2362124444253D-02 0.2418126932561D-02 0.2475454145167D-02 0.2534137309329D-02 + 0.2594208384486D-02 0.2655700079287D-02 0.2718645869002D-02 0.2783080013344D-02 + 0.2849037574687D-02 0.2916554436715D-02 0.2985667323484D-02 0.3056413818931D-02 + 0.3128832386828D-02 0.3202962391187D-02 0.3278844117136D-02 0.3356518792272D-02 + 0.3436028608501D-02 0.3517416744371D-02 0.3600727387929D-02 0.3686005760082D-02 + 0.3773298138499D-02 0.3862651882061D-02 0.3954115455860D-02 0.4047738456768D-02 + 0.4143571639594D-02 0.4241666943825D-02 0.4342077520985D-02 0.4444857762604D-02 + 0.4550063328833D-02 0.4657751177697D-02 0.4767979595018D-02 0.4880808225009D-02 + 0.4996298101570D-02 0.5114511680279D-02 0.5235512871115D-02 0.5359367071918D-02 + 0.5486141202598D-02 0.5615903740128D-02 0.5748724754308D-02 0.5884675944352D-02 + 0.6023830676284D-02 0.6166264021183D-02 0.6312052794284D-02 0.6461275594959D-02 + 0.6614012847588D-02 0.6770346843357D-02 0.6930361782982D-02 0.7094143820394D-02 + 0.7261781107400D-02 0.7433363839342D-02 0.7608984301773D-02 0.7788736918176D-02 + 0.7972718298747D-02 0.8161027290261D-02 0.8353765027049D-02 0.8551034983111D-02 + 0.8752943025377D-02 0.8959597468160D-02 0.9171109128811D-02 0.9387591384603D-02 + 0.9609160230877D-02 0.9835934340477D-02 0.1006803512449D-01 0.1030558679431D-01 + 0.1054871642512D-01 0.1079755402073D-01 0.1105223257982D-01 0.1131288816368D-01 + 0.1157965996544D-01 0.1185269038080D-01 0.1213212508026D-01 0.1241811308303D-01 + 0.1271080683248D-01 0.1301036227325D-01 0.1331693893004D-01 0.1363069998813D-01 + 0.1395181237567D-01 0.1428044684765D-01 0.1461677807184D-01 0.1496098471648D-01 + 0.1531324953990D-01 0.1567375948211D-01 0.1604270575828D-01 0.1642028395434D-01 + 0.1680669412453D-01 0.1720214089116D-01 0.1760683354637D-01 0.1802098615621D-01 + 0.1844481766683D-01 0.1887855201303D-01 0.1932241822902D-01 0.1977665056168D-01 + 0.2024148858606D-01 0.2071717732349D-01 0.2120396736203D-01 0.2170211497964D-01 + 0.2221188226980D-01 0.2273353726988D-01 0.2326735409215D-01 0.2381361305754D-01 + 0.2437260083229D-01 0.2494461056731D-01 0.2552994204062D-01 0.2612890180262D-01 + 0.2674180332442D-01 0.2736896714935D-01 0.2801072104743D-01 0.2866740017320D-01 + 0.2933934722669D-01 0.3002691261781D-01 0.3073045463399D-01 0.3145033961141D-01 + 0.3218694210958D-01 0.3294064508962D-01 0.3371184009606D-01 0.3450092744243D-01 + 0.3530831640054D-01 0.3613442539362D-01 0.3697968219334D-01 0.3784452412086D-01 + 0.3872939825181D-01 0.3963476162544D-01 0.4056108145796D-01 0.4150883536008D-01 + 0.4247851155891D-01 0.4347060912422D-01 0.4448563819924D-01 0.4552412023590D-01 + 0.4658658823475D-01 0.4767358698962D-01 0.4878567333696D-01 0.4992341641008D-01 + 0.5108739789835D-01 0.5227821231135D-01 0.5349646724813D-01 0.5474278367169D-01 + 0.5601779618862D-01 0.5732215333417D-01 0.5865651786266D-01 0.6002156704340D-01 + 0.6141799296226D-01 0.6284650282880D-01 0.6430781928923D-01 0.6580268074515D-01 + 0.6733184167825D-01 0.6889607298100D-01 0.7049616229337D-01 0.7213291434581D-01 + 0.7380715130845D-01 0.7551971314661D-01 0.7727145798277D-01 0.7906326246509D-01 + 0.8089602214242D-01 0.8277065184608D-01 0.8468808607842D-01 0.8664927940812D-01 + 0.8865520687255D-01 0.9070686438707D-01 0.9280526916144D-01 0.9495146012343D-01 + 0.9714649834967D-01 0.9939146750384D-01 0.1016874742823D+00 0.1040356488672D+00 + 0.1064371453872D+00 0.1088931423856D+00 0.1114048432967D+00 0.1139734769295D+00 + 0.1166002979593D+00 0.1192865874273D+00 0.1220336532487D+00 0.1248428307276D+00 + 0.1277154830815D+00 0.1306530019730D+00 0.1336568080498D+00 0.1367283514936D+00 + 0.1398691125766D+00 0.1430806022269D+00 0.1463643626021D+00 0.1497219676713D+00 + 0.1531550238057D+00 0.1566651703780D+00 0.1602540803695D+00 0.1639234609870D+00 + 0.1676750542871D+00 0.1715106378098D+00 0.1754320252209D+00 0.1794410669619D+00 + 0.1835396509100D+00 0.1877297030455D+00 0.1920131881282D+00 0.1963921103827D+00 + 0.2008685141914D+00 0.2054444847966D+00 0.2101221490109D+00 0.2149036759359D+00 + 0.2197912776889D+00 0.2247872101386D+00 0.2298937736476D+00 0.2351133138248D+00 + 0.2404482222837D+00 0.2459009374100D+00 0.2514739451362D+00 0.2571697797240D+00 + 0.2629910245536D+00 0.2689403129212D+00 0.2750203288421D+00 0.2812338078623D+00 + 0.2875835378751D+00 0.2940723599454D+00 0.3007031691395D+00 0.3074789153608D+00 + 0.3144026041916D+00 0.3214772977396D+00 0.3287061154899D+00 0.3360922351618D+00 + 0.3436388935694D+00 0.3513493874868D+00 0.3592270745164D+00 0.3672753739607D+00 + 0.3754977676972D+00 0.3838978010545D+00 0.3924790836915D+00 0.4012452904770D+00 + 0.4102001623706D+00 0.4193475073036D+00 0.4286912010595D+00 0.4382351881538D+00 + 0.4479834827120D+00 0.4579401693452D+00 0.4681094040228D+00 0.4784954149418D+00 + 0.4891025033910D+00 0.4999350446102D+00 0.5109974886435D+00 0.5222943611853D+00 + 0.5338302644183D+00 0.5456098778426D+00 0.5576379590956D+00 0.5699193447601D+00 + 0.5824589511607D+00 0.5952617751475D+00 0.6083328948654D+00 0.6216774705074D+00 + 0.6353007450521D+00 0.6492080449824D+00 0.6634047809857D+00 0.6778964486325D+00 + 0.6926886290333D+00 0.7077869894721D+00 0.7231972840138D+00 0.7389253540860D+00 + 0.7549771290311D+00 0.7713586266289D+00 0.7880759535873D+00 0.8051353059985D+00 + 0.8225429697604D+00 0.8403053209599D+00 0.8584288262158D+00 0.8769200429817D+00 + 0.8957856198031D+00 0.9150322965294D+00 0.9346669044774D+00 0.9546963665439D+00 + 0.9751276972649D+00 0.9959680028197D+00 0.1017224480976D+01 0.1038904420974D+01 + 0.1061015203349D+01 0.1083564299686D+01 0.1106559272300D+01 0.1130007773859D+01 + 0.1153917546912D+01 0.1178296423354D+01 0.1203152323804D+01 0.1228493256899D+01 + 0.1254327318495D+01 0.1280662690787D+01 0.1307507641324D+01 0.1334870521934D+01 + 0.1362759767535D+01 0.1391183894856D+01 0.1420151501035D+01 0.1449671262109D+01 + 0.1479751931386D+01 0.1510402337698D+01 0.1541631383520D+01 0.1573448042969D+01 + 0.1605861359662D+01 0.1638880444440D+01 0.1672514472946D+01 0.1706772683055D+01 + 0.1741664372155D+01 0.1777198894269D+01 0.1813385657016D+01 0.1850234118409D+01 + 0.1887753783475D+01 0.1925954200705D+01 0.1964844958324D+01 0.2004435680370D+01 + 0.2044736022586D+01 0.2085755668115D+01 0.2127504322996D+01 0.2169991711448D+01 + 0.2213227570952D+01 0.2257221647108D+01 0.2301983688271D+01 0.2347523439972D+01 + 0.2393850639086D+01 0.2440975007782D+01 0.2488906247220D+01 0.2537654031002D+01 + 0.2587227998372D+01 0.2637637747157D+01 0.2688892826442D+01 0.2741002728983D+01 + 0.2793976883341D+01 0.2847824645743D+01 0.2902555291652D+01 0.2958178007063D+01 + 0.3014701879494D+01 0.3072135888684D+01 0.3130488897001D+01 0.3189769639525D+01 + 0.3249986713841D+01 0.3311148569513D+01 0.3373263497233D+01 0.3436339617667D+01 + 0.3500384869964D+01 0.3565406999951D+01 0.3631413547991D+01 0.3698411836514D+01 + 0.3766408957221D+01 0.3835411757947D+01 0.3905426829193D+01 0.3976460490322D+01 + 0.4048518775419D+01 0.4121607418815D+01 0.4195731840277D+01 0.4270897129857D+01 + 0.4347108032420D+01 0.4424368931831D+01 0.4502683834816D+01 0.4582056354503D+01 + 0.4662489693636D+01 0.4743986627475D+01 0.4826549486387D+01 0.4910180138127D+01 + 0.4994879969825D+01 0.5080649869681D+01 0.5167490208373D+01 0.5255400820202D+01 + 0.5344380983962D+01 0.5434429403565D+01 0.5525544188426D+01 0.5617722833617D+01 + 0.5710962199815D+01 0.5805258493041D+01 0.5900607244231D+01 0.5997003288635D+01 + 0.6094440745069D+01 0.6192912995049D+01 0.6292412661814D+01 0.6392931589269D+01 + 0.6494460820874D+01 0.6596990578488D+01 0.6700510241224D+01 0.6805008324307D+01 + 0.6910472457995D+01 0.7016889366579D+01 0.7124244847491D+01 0.7232523750568D+01 + 0.7341709957494D+01 0.7451786361463D+01 0.7562734847107D+01 0.7674536270712D+01 + 0.7787170440791D+01 0.7900616099026D+01 0.8014850901658D+01 0.8129851401340D+01 + 0.8245593029526D+01 0.8362050079436D+01 0.8479195689649D+01 0.8597001828383D+01 + 0.8715439278509D+01 0.8834477623371D+01 0.8954085233454D+01 0.9074229253973D+01 + 0.9194875593440D+01 0.9315988913276D+01 0.9437532618530D+01 0.9559468849772D+01 + 0.9681758476237D+01 0.9804361090277D+01 0.9927235003199D+01 0.1005033724256D+02 + 0.1017362355101D+02 0.1029704838669D+02 0.1042056492540D+02 0.1054412506444D+02 + 0.1066767942831D+02 0.1079117737637D+02 0.1091456701244D+02 0.1103779519646D+02 + 0.1116080755839D+02 0.1128354851420D+02 0.1140596128432D+02 0.1152798791434D+02 + 0.1164956929827D+02 0.1177064520433D+02 0.1189115430327D+02 0.1201103419951D+02 + 0.1213022146500D+02 0.1224865167586D+02 0.1236625945201D+02 0.1248297849976D+02 + 0.1259874165744D+02 0.1271348094411D+02 0.1282712761148D+02 0.1293961219902D+02 + 0.1305086459240D+02 0.1316081408518D+02 0.1326938944391D+02 0.1337651897664D+02 + 0.1348213060491D+02 0.1358615193909D+02 0.1368851035736D+02 0.1378913308811D+02 + 0.1388794729589D+02 0.1398488017086D+02 0.1407985902179D+02 0.1417281137257D+02 + 0.1426366506212D+02 0.1435234834789D+02 0.1443879001264D+02 0.1452291947466D+02 + 0.1460466690129D+02 0.1468396332564D+02 0.1476074076649D+02 0.1483493235126D+02 + 0.1490647244192D+02 0.1497529676373D+02 0.1504134253675D+02 0.1510454860984D+02 + 0.1516485559720D+02 0.1522220601698D+02 0.1527654443219D+02 0.1532781759325D+02 + 0.1537597458241D+02 0.1542096695946D+02 0.1546274890874D+02 0.1550127738702D+02 + 0.1553651227211D+02 0.1556841651189D+02 0.1559695627334D+02 0.1562210109145D+02 + 0.1564382401753D+02 0.1566210176664D+02 0.1567691486377D+02 0.1568824778841D+02 + 0.1569608911712D+02 0.1570043166360D+02 0.1570127261607D+02 0.1569861367129D+02 + 0.1569246116496D+02 0.1568282619787D+02 0.1566972475757D+02 0.1565317783486D+02 + 0.1563321153475D+02 0.1560985718135D+02 0.1558315141624D+02 0.1555313628970D+02 + 0.1551985934445D+02 0.1548337369123D+02 0.1544373807583D+02 0.1540101693692D+02 + 0.1535528045436D+02 0.1530660458716D+02 0.1525507110098D+02 0.1520076758423D+02 + 0.1514378745267D+02 0.1508422994170D+02 0.1502220008605D+02 0.1495780868635D+02 + 0.1489117226206D+02 0.1482241299046D+02 0.1475165863115D+02 0.1467904243575D+02 + 0.1460470304238D+02 0.1452878435463D+02 0.1445143540465D+02 0.1437281020013D+02 + 0.1429306755483D+02 0.1421237090260D+02 0.1413088809452D+02 0.1404879117925D+02 + 0.1396625616625D+02 0.1388346277207D+02 0.1380059414952D+02 0.1371783659988D+02 + 0.1363537926825D+02 0.1355341382212D+02 0.1347213411351D+02 0.1339173582480D+02 + 0.1331241609871D+02 0.1323437315279D+02 0.1315780587881D+02 0.1308291342766D+02 + 0.1300989478035D+02 0.1293894830568D+02 0.1287027130535D+02 0.1280405954732D+02 + 0.1274050678825D+02 0.1267980428593D+02 0.1262214030269D+02 0.1256769960087D+02 + 0.1251666293145D+02 0.1246920651702D+02 0.1242550153038D+02 0.1238571356999D+02 + 0.1235000213372D+02 0.1231852009235D+02 0.1229141316414D+02 0.1226881939222D+02 + 0.1225086862623D+02 0.1223768200985D+02 0.1222937147599D+02 0.1222603925117D+02 + 0.1222777737106D+02 0.1223466720868D+02 0.1224677901729D+02 0.1226417148958D+02 + 0.1228689133517D+02 0.1231497287802D+02 0.1234843767581D+02 0.1238729416297D+02 + 0.1243153731911D+02 0.1248114836487D+02 0.1253609448665D+02 0.1259632859227D+02 + 0.1266178909890D+02 0.1273239975523D+02 0.1280806949923D+02 0.1288869235315D+02 + 0.1297414735711D+02 0.1306429854274D+02 0.1315899494816D+02 0.1325807067533D+02 + 0.1336134499111D+02 0.1346862247282D+02 0.1357969319917D+02 0.1369433298744D+02 + 0.1381230367740D+02 0.1393335346243D+02 0.1405721726828D+02 0.1418361717951D+02 + 0.1431226291376D+02 0.1444285234362D+02 0.1457507206581D+02 0.1470859801733D+02 + 0.1484309613763D+02 0.1497822307639D+02 0.1511362694548D+02 0.1524894811426D+02 + 0.1538382004666D+02 0.1551787017849D+02 0.1565072083339D+02 0.1578199017530D+02 + 0.1591129319546D+02 0.1603824273170D+02 0.1616245051740D+02 0.1628352825765D+02 + 0.1640108872963D+02 0.1651474690448D+02 0.1662412108723D+02 0.1672883407174D+02 + 0.1682851430716D+02 0.1692279707220D+02 0.1701132565381D+02 0.1709375252614D+02 + 0.1716974052608D+02 0.1723896402125D+02 0.1730111006644D+02 0.1735587954416D+02 + 0.1740298828530D+02 0.1744216816538D+02 0.1747316817225D+02 0.1749575544089D+02 + 0.1750971625093D+02 0.1751485698260D+02 0.1751100502688D+02 0.1749800964559D+02 + 0.1747574277733D+02 0.1744409978499D+02 0.1740300014123D+02 0.1735238804766D+02 + 0.1729223298439D+02 0.1722253018618D+02 0.1714330104180D+02 0.1705459341368D+02 + 0.1695648187457D+02 0.1684906785873D+02 0.1673247972505D+02 0.1660687272995D+02 + 0.1647242890818D+02 0.1632935685981D+02 0.1617789144222D+02 0.1601829336618D+02 + 0.1585084869528D+02 0.1567586824865D+02 0.1549368690699D+02 0.1530466282265D+02 + 0.1510917653451D+02 0.1490762998916D+02 0.1470044547022D+02 0.1448806443791D+02 + 0.1427094628160D+02 0.1404956698852D+02 0.1382441773199D+02 0.1359600338336D+02 + 0.1336484095192D+02 0.1313145795774D+02 0.1289639074258D+02 0.1266018272468D+02 + 0.1242338260337D+02 0.1218654252002D+02 0.1195021618209D+02 0.1171495695744D+02 + 0.1148131594627D+02 0.1124984003849D+02 0.1102106996440D+02 0.1079553834688D+02 + 0.1057376776347D+02 0.1035626882667D+02 0.1014353829125D+02 0.9936057196884D+01 + 0.9734289054994D+01 0.9538678088120D+01 0.9349647530399D+01 0.9167597997384D+01 + 0.8992905933301D+01 0.8825922143594D+01 0.8666970420224D+01 0.8516346266999D+01 + 0.8374315731611D+01 0.8241114350747D+01 0.8116946214096D+01 0.8001983152570D+01 + 0.7896364055459D+01 0.7800194320670D+01 0.7713545441561D+01 0.7636454733225D+01 + 0.7568925200401D+01 0.7510925548528D+01 0.7462390338698D+01 0.7423220286625D+01 + 0.7393282704950D+01 0.7372412087556D+01 0.7360410833787D+01 0.7357050109802D+01 + 0.7362070843542D+01 0.7375184849138D+01 0.7396076075866D+01 0.7424401976120D+01 + 0.7459794986211D+01 0.7501864113185D+01 0.7550196620265D+01 0.7604359802945D+01 + 0.7663902847256D+01 0.7728358761219D+01 0.7797246370063D+01 0.7870072365405D+01 + 0.7946333398216D+01 0.8025518205140D+01 0.8107109757504D+01 0.8190587422172D+01 + 0.8275429123337D+01 0.8361113494303D+01 0.8447122008353D+01 0.8532941077928D+01 + 0.8618064111536D+01 0.8701993518075D+01 0.8784242648578D+01 0.8864337665829D+01 + 0.8941819332731D+01 0.9016244710878D+01 0.9087188761372D+01 0.9154245840560D+01 + 0.9217031084099D+01 0.9275181673474D+01 0.9328357979881D+01 0.9376244581215D+01 + 0.9418551148709D+01 0.9455013200639D+01 0.9485392721360D+01 0.9509478644797D+01 + 0.9527087202359D+01 0.9538062136102D+01 0.9542274778747D+01 0.9539624002998D+01 + 0.9530036043300D+01 0.9513464193959D+01 0.9489888388159D+01 0.9459314663078D+01 + 0.9421774516843D+01 0.9377324163609D+01 0.9326043693467D+01 0.9268036144314D+01 + 0.9203426493115D+01 0.9132360574297D+01 0.9055003933175D+01 0.8971540622481D+01 + 0.8882171950151D+01 0.8787115186520D+01 0.8686602239071D+01 0.8580878302773D+01 + 0.8470200493895D+01 0.8354836475027D+01 0.8235063078754D+01 0.8111164937189D+01 + 0.7983433124252D+01 0.7852163817216D+01 0.7717656983696D+01 0.7580215099831D+01 + 0.7440141905014D+01 0.7297741198086D+01 0.7153315679440D+01 0.7007165843079D+01 + 0.6859588922166D+01 0.6710877891167D+01 0.6561320527250D+01 0.6411198533128D+01 + 0.6260786723101D+01 0.6110352273646D+01 0.5960154039458D+01 0.5810441935471D+01 + 0.5661456384987D+01 0.5513427833700D+01 0.5366576329042D+01 0.5221111163955D+01 + 0.5077230583918D+01 0.4935121555751D+01 0.4794959596475D+01 0.4656908660288D+01 + 0.4521121081498D+01 0.4387737571052D+01 0.4256887264186D+01 0.4128687816522D+01 + 0.4003245545873D+01 0.3880655616880D+01 0.3761002265561D+01 0.3644359060777D+01 + 0.3530789199588D+01 0.3420345833472D+01 0.3313072422343D+01 0.3209003113371D+01 + 0.3108163141592D+01 0.3010569249384D+01 0.2916230121919D+01 0.2825146835796D+01 + 0.2737313318133D+01 0.2652716813508D+01 0.2571338356232D+01 0.2493153245580D+01 + 0.2418131521695D+01 0.2346238440047D+01 0.2277434942461D+01 0.2211678122838D+01 + 0.2148921685899D+01 0.2089116397376D+01 0.2032210524266D+01 0.1978150263893D+01 + 0.1926880160684D+01 0.1878343509721D+01 0.1832482746269D+01 0.1789239820638D+01 + 0.1748556557871D+01 0.1710375001879D+01 0.1674637743804D+01 0.1641288234472D+01 + 0.1610271080956D+01 0.1581532327338D+01 0.1555019719890D+01 0.1530682956958D+01 + 0.1508473923914D+01 0.1488346913611D+01 0.1470258832820D+01 0.1454169395155D+01 + 0.1440041301042D+01 0.1427840405245D+01 0.1417535872504D+01 0.1409100321753D+01 + 0.1402509959377D+01 0.1397744701874D+01 0.1394788288181D+01 0.1393628381826D+01 + 0.1394256662892D+01 0.1396668909610D+01 0.1400865069190D+01 0.1406849317222D+01 + 0.1414629369614D+01 0.1424336942263D+01 0.1436096575202D+01 0.1449912447024D+01 + 0.1465794674727D+01 0.1483759333931D+01 0.1503828494539D+01 0.1526030271798D+01 + 0.1550398892649D+01 0.1576974777196D+01 0.1605804635055D+01 0.1636941576215D+01 + 7 1012 + 1 0 -1 -511.89194 + 2 0 -1 -58.90181 + 2 1 1 -50.68932 + 2 1 -2 -49.77537 + 3 0 -1 -5.73317 + 3 1 1 -3.34334 + 3 1 -2 -3.22919 + 0.2122975645015D-04 0.2173507709867D-04 0.2225242316243D-04 0.2278208072829D-04 + 0.2332434268594D-04 0.2387950888954D-04 0.2444788632325D-04 0.2502978927059D-04 + 0.2562553948791D-04 0.2623546638192D-04 0.2685990719144D-04 0.2749920717353D-04 + 0.2815371979393D-04 0.2882380692207D-04 0.2950983903075D-04 0.3021219540050D-04 + 0.3093126432877D-04 0.3166744334418D-04 0.3242113942573D-04 0.3319276922733D-04 + 0.3398275930755D-04 0.3479154636487D-04 0.3561957747857D-04 0.3646731035519D-04 + 0.3733521358096D-04 0.3822376688016D-04 0.3913346137963D-04 0.4006479987955D-04 + 0.4101829713060D-04 0.4199448011777D-04 0.4299388835081D-04 0.4401707416166D-04 + 0.4506460300883D-04 0.4613705378910D-04 0.4723501915650D-04 0.4835910584899D-04 + 0.4950993502270D-04 0.5068814259429D-04 0.5189437959126D-04 0.5312931251066D-04 + 0.5439362368626D-04 0.5568801166444D-04 0.5701319158897D-04 0.5836989559491D-04 + 0.5975887321186D-04 0.6118089177673D-04 0.6263673685632D-04 0.6412721267990D-04 + 0.6565314258201D-04 0.6721536945580D-04 0.6881475621705D-04 0.7045218627922D-04 + 0.7212856403973D-04 0.7384481537777D-04 0.7560188816385D-04 0.7740075278149D-04 + 0.7924240266119D-04 0.8112785482706D-04 0.8305815045642D-04 0.8503435545263D-04 + 0.8705756103141D-04 0.8912888432116D-04 0.9124946897738D-04 0.9342048581165D-04 + 0.9564313343555D-04 0.9791863891974D-04 0.1002482584687D-03 0.1026332781112D-03 + 0.1050750144077D-03 0.1075748151735D-03 0.1101340602203D-03 0.1127541621137D-03 + 0.1154365669501D-03 0.1181827551510D-03 0.1209942422769D-03 0.1238725798590D-03 + 0.1268193562527D-03 0.1298361975089D-03 0.1329247682680D-03 0.1360867726735D-03 + 0.1393239553083D-03 0.1426381021518D-03 0.1460310415612D-03 0.1495046452749D-03 + 0.1530608294397D-03 0.1567015556625D-03 0.1604288320871D-03 0.1642447144955D-03 + 0.1681513074364D-03 0.1721507653792D-03 0.1762452938963D-03 0.1804371508722D-03 + 0.1847286477421D-03 0.1891221507592D-03 0.1936200822920D-03 0.1982249221522D-03 + 0.2029392089542D-03 0.2077655415060D-03 0.2127065802334D-03 0.2177650486382D-03 + 0.2229437347894D-03 0.2282454928513D-03 0.2336732446459D-03 0.2392299812538D-03 + 0.2449187646513D-03 0.2507427293871D-03 0.2567050842979D-03 0.2628091142650D-03 + 0.2690581820118D-03 0.2754557299435D-03 0.2820052820308D-03 0.2887104457371D-03 + 0.2955749139921D-03 0.3026024672103D-03 0.3097969753590D-03 0.3171624000731D-03 + 0.3247027968207D-03 0.3324223171196D-03 0.3403252108055D-03 0.3484158283536D-03 + 0.3566986232552D-03 0.3651781544500D-03 0.3738590888149D-03 0.3827462037126D-03 + 0.3918443895988D-03 0.4011586526914D-03 0.4106941177020D-03 0.4204560306321D-03 + 0.4304497616342D-03 0.4406808079408D-03 0.4511547968612D-03 0.4618774888502D-03 + 0.4728547806468D-03 0.4840927084883D-03 0.4955974513988D-03 0.5073753345551D-03 + 0.5194328327314D-03 0.5317765738249D-03 0.5444133424641D-03 0.5573500837015D-03 + 0.5705939067925D-03 0.5841520890639D-03 0.5980320798714D-03 0.6122415046513D-03 + 0.6267881690659D-03 0.6416800632466D-03 0.6569253661363D-03 0.6725324499326D-03 + 0.6885098846360D-03 0.7048664427037D-03 0.7216111038125D-03 0.7387530597330D-03 + 0.7563017193176D-03 0.7742667136049D-03 0.7926579010441D-03 0.8114853728404D-03 + 0.8307594584254D-03 0.8504907310562D-03 0.8706900135433D-03 0.8913683841142D-03 + 0.9125371824119D-03 0.9342080156346D-03 0.9563927648179D-03 0.9791035912634D-03 + 0.1002352943117D-02 0.1026153562102D-02 0.1050518490405D-02 0.1075461077728D-02 + 0.1100994988496D-02 0.1127134209246D-02 0.1153893056171D-02 0.1181286182852D-02 + 0.1209328588167D-02 0.1238035624379D-02 0.1267423005415D-02 0.1297506815344D-02 + 0.1328303517037D-02 0.1359829961041D-02 0.1392103394654D-02 0.1425141471212D-02 + 0.1458962259585D-02 0.1493584253904D-02 0.1529026383504D-02 0.1565308023106D-02 + 0.1602449003221D-02 0.1640469620811D-02 0.1679390650189D-02 0.1719233354165D-02 + 0.1760019495464D-02 0.1801771348394D-02 0.1844511710794D-02 0.1888263916250D-02 + 0.1933051846599D-02 0.1978899944720D-02 0.2025833227614D-02 0.2073877299798D-02 + 0.2123058366995D-02 0.2173403250151D-02 0.2224939399761D-02 0.2277694910540D-02 + 0.2331698536421D-02 0.2386979705903D-02 0.2443568537747D-02 0.2501495857040D-02 + 0.2560793211623D-02 0.2621492888896D-02 0.2683627933011D-02 0.2747232162458D-02 + 0.2812340188056D-02 0.2878987431352D-02 0.2947210143447D-02 0.3017045424251D-02 + 0.3088531242177D-02 0.3161706454285D-02 0.3236610826892D-02 0.3313285056646D-02 + 0.3391770792086D-02 0.3472110655691D-02 0.3554348266436D-02 0.3638528262858D-02 + 0.3724696326649D-02 0.3812899206788D-02 0.3903184744224D-02 0.3995601897109D-02 + 0.4090200766624D-02 0.4187032623373D-02 0.4286149934389D-02 0.4387606390746D-02 + 0.4491456935804D-02 0.4597757794082D-02 0.4706566500803D-02 0.4817941932088D-02 + 0.4931944335851D-02 0.5048635363379D-02 0.5168078101634D-02 0.5290337106279D-02 + 0.5415478435454D-02 0.5543569684307D-02 0.5674680020311D-02 0.5808880219367D-02 + 0.5946242702730D-02 0.6086841574754D-02 0.6230752661494D-02 0.6378053550168D-02 + 0.6528823629508D-02 0.6683144131013D-02 0.6841098171130D-02 0.7002770794372D-02 + 0.7168249017405D-02 0.7337621874121D-02 0.7510980461712D-02 0.7688417987773D-02 + 0.7870029818463D-02 0.8055913527720D-02 0.8246168947593D-02 0.8440898219673D-02 + 0.8640205847678D-02 0.8844198751201D-02 0.9052986320644D-02 0.9266680473381D-02 + 0.9485395711148D-02 0.9709249178711D-02 0.9938360723829D-02 0.1017285295853D-01 + 0.1041285132175D-01 0.1065848414335D-01 0.1090988270951D-01 0.1116718132961D-01 + 0.1143051740455D-01 0.1170003149653D-01 0.1197586740047D-01 0.1225817221684D-01 + 0.1254709642620D-01 0.1284279396532D-01 0.1314542230495D-01 0.1345514252930D-01 + 0.1377211941725D-01 0.1409652152530D-01 0.1442852127232D-01 0.1476829502620D-01 + 0.1511602319226D-01 0.1547189030365D-01 0.1583608511371D-01 0.1620880069022D-01 + 0.1659023451183D-01 0.1698058856639D-01 0.1738006945154D-01 0.1778888847734D-01 + 0.1820726177118D-01 0.1863541038486D-01 0.1907356040402D-01 0.1952194305980D-01 + 0.1998079484302D-01 0.2045035762063D-01 0.2093087875471D-01 0.2142261122400D-01 + 0.2192581374792D-01 0.2244075091329D-01 0.2296769330365D-01 0.2350691763133D-01 + 0.2405870687229D-01 0.2462335040374D-01 0.2520114414469D-01 0.2579239069942D-01 + 0.2639739950387D-01 0.2701648697516D-01 0.2764997666416D-01 0.2829819941123D-01 + 0.2896149350513D-01 0.2964020484531D-01 0.3033468710740D-01 0.3104530191220D-01 + 0.3177241899806D-01 0.3251641639684D-01 0.3327768061342D-01 0.3405660680881D-01 + 0.3485359898710D-01 0.3566907018606D-01 0.3650344267166D-01 0.3735714813647D-01 + 0.3823062790211D-01 0.3912433312562D-01 0.4003872501011D-01 0.4097427501948D-01 + 0.4193146509749D-01 0.4291078789111D-01 0.4391274697832D-01 0.4493785710035D-01 + 0.4598664439858D-01 0.4705964665594D-01 0.4815741354312D-01 0.4928050686955D-01 + 0.5042950083923D-01 0.5160498231153D-01 0.5280755106696D-01 0.5403782007813D-01 + 0.5529641578584D-01 0.5658397838041D-01 0.5790116208843D-01 0.5924863546488D-01 + 0.6062708169076D-01 0.6203719887636D-01 0.6347970037015D-01 0.6495531507346D-01 + 0.6646478776099D-01 0.6800887940725D-01 0.6958836751900D-01 0.7120404647380D-01 + 0.7285672786470D-01 0.7454724085125D-01 0.7627643251682D-01 0.7804516823229D-01 + 0.7985433202641D-01 0.8170482696258D-01 0.8359757552242D-01 0.8553351999606D-01 + 0.8751362287932D-01 0.8953886727772D-01 0.9161025731761D-01 0.9372881856432D-01 + 0.9589559844749D-01 0.9811166669365D-01 0.1003781157661D+00 0.1026960613124D+00 + 0.1050666426187D+00 0.1074910230727D+00 0.1099703906329D+00 0.1125059583070D+00 + 0.1150989646366D+00 0.1177506741909D+00 0.1204623780676D+00 0.1232353944021D+00 + 0.1260710688845D+00 0.1289707752849D+00 0.1319359159864D+00 0.1349679225270D+00 + 0.1380682561490D+00 0.1412384083570D+00 0.1444799014844D+00 0.1477942892678D+00 + 0.1511831574303D+00 0.1546481242725D+00 0.1581908412731D+00 0.1618129936965D+00 + 0.1655163012104D+00 0.1693025185104D+00 0.1731734359544D+00 0.1771308802047D+00 + 0.1811767148790D+00 0.1853128412094D+00 0.1895411987104D+00 0.1938637658552D+00 + 0.1982825607598D+00 0.2027996418767D+00 0.2074171086957D+00 0.2121371024533D+00 + 0.2169618068509D+00 0.2218934487801D+00 0.2269342990569D+00 0.2320866731634D+00 + 0.2373529319974D+00 0.2427354826295D+00 0.2482367790682D+00 0.2538593230323D+00 + 0.2596056647304D+00 0.2654784036474D+00 0.2714801893389D+00 0.2776137222308D+00 + 0.2838817544268D+00 0.2902870905217D+00 0.2968325884206D+00 0.3035211601645D+00 + 0.3103557727607D+00 0.3173394490192D+00 0.3244752683937D+00 0.3317663678273D+00 + 0.3392159426028D+00 0.3468272471962D+00 0.3546035961349D+00 0.3625483648577D+00 + 0.3706649905790D+00 0.3789569731540D+00 0.3874278759464D+00 0.3960813266976D+00 + 0.4049210183955D+00 0.4139507101454D+00 0.4231742280388D+00 0.4325954660221D+00 + 0.4422183867640D+00 0.4520470225197D+00 0.4620854759931D+00 0.4723379211946D+00 + 0.4828086042953D+00 0.4935018444749D+00 0.5044220347646D+00 0.5155736428822D+00 + 0.5269612120602D+00 0.5385893618646D+00 0.5504627890040D+00 0.5625862681281D+00 + 0.5749646526146D+00 0.5876028753427D+00 0.6005059494532D+00 0.6136789690924D+00 + 0.6271271101407D+00 0.6408556309226D+00 0.6548698728981D+00 0.6691752613333D+00 + 0.6837773059493D+00 0.6986816015479D+00 0.7138938286123D+00 0.7294197538810D+00 + 0.7452652308942D+00 0.7614362005101D+00 0.7779386913894D+00 0.7947788204470D+00 + 0.8119627932680D+00 0.8294969044866D+00 0.8473875381261D+00 0.8656411678975D+00 + 0.8842643574549D+00 0.9032637606047D+00 0.9226461214683D+00 0.9424182745935D+00 + 0.9625871450140D+00 0.9831597482541D+00 0.1004143190275D+01 0.1025544667362D+01 + 0.1047371465949D+01 0.1069630962376D+01 0.1092330622582D+01 0.1115478001718D+01 + 0.1139080743699D+01 0.1163146580667D+01 0.1187683332379D+01 0.1212698905512D+01 + 0.1238201292877D+01 0.1264198572546D+01 0.1290698906886D+01 0.1317710541494D+01 + 0.1345241804028D+01 0.1373301102944D+01 0.1401896926110D+01 0.1431037839321D+01 + 0.1460732484690D+01 0.1490989578921D+01 0.1521817911461D+01 0.1553226342519D+01 + 0.1585223800953D+01 0.1617819282025D+01 0.1651021845012D+01 0.1684840610666D+01 + 0.1719284758534D+01 0.1754363524114D+01 0.1790086195862D+01 0.1826462112019D+01 + 0.1863500657290D+01 0.1901211259327D+01 0.1939603385053D+01 0.1978686536792D+01 + 0.2018470248210D+01 0.2058964080068D+01 0.2100177615772D+01 0.2142120456722D+01 + 0.2184802217451D+01 0.2228232520549D+01 0.2272420991371D+01 0.2317377252521D+01 + 0.2363110918097D+01 0.2409631587718D+01 0.2456948840298D+01 0.2505072227579D+01 + 0.2554011267414D+01 0.2603775436800D+01 0.2654374164640D+01 0.2705816824249D+01 + 0.2758112725590D+01 0.2811271107225D+01 0.2865301128002D+01 0.2920211858443D+01 + 0.2976012271854D+01 0.3032711235135D+01 0.3090317499294D+01 0.3148839689666D+01 + 0.3208286295814D+01 0.3268665661132D+01 0.3329985972130D+01 0.3392255247403D+01 + 0.3455481326284D+01 0.3519671857166D+01 0.3584834285516D+01 0.3650975841540D+01 + 0.3718103527540D+01 0.3786224104928D+01 0.3855344080910D+01 0.3925469694842D+01 + 0.3996606904248D+01 0.4068761370505D+01 0.4141938444201D+01 0.4216143150155D+01 + 0.4291380172106D+01 0.4367653837082D+01 0.4444968099432D+01 0.4523326524540D+01 + 0.4602732272224D+01 0.4683188079814D+01 0.4764696244923D+01 0.4847258607911D+01 + 0.4930876534058D+01 0.5015550895439D+01 0.5101282052526D+01 0.5188069835504D+01 + 0.5275913525340D+01 0.5364811834582D+01 0.5454762887935D+01 0.5545764202593D+01 + 0.5637812668364D+01 0.5730904527600D+01 0.5825035354930D+01 0.5920200036841D+01 + 0.6016392751096D+01 0.6113606946037D+01 0.6211835319763D+01 0.6311069799237D+01 + 0.6411301519318D+01 0.6512520801757D+01 0.6614717134178D+01 0.6717879149076D+01 + 0.6821994602856D+01 0.6927050354936D+01 0.7033032346971D+01 0.7139925582197D+01 + 0.7247714104955D+01 0.7356380980422D+01 0.7465908274590D+01 0.7576277034522D+01 + 0.7687467268944D+01 0.7799457929201D+01 0.7912226890625D+01 0.8025750934367D+01 + 0.8140005729731D+01 0.8254965817070D+01 0.8370604591283D+01 0.8486894285977D+01 + 0.8603805958343D+01 0.8721309474805D+01 0.8839373497487D+01 0.8957965471583D+01 + 0.9077051613664D+01 0.9196596901005D+01 0.9316565061973D+01 0.9436918567578D+01 + 0.9557618624205D+01 0.9678625167647D+01 0.9799896858462D+01 0.9921391078761D+01 + 0.1004306393048D+02 0.1016487023519D+02 0.1028676353561D+02 0.1040869609872D+02 + 0.1053061892078D+02 0.1065248173410D+02 0.1077423301584D+02 0.1089581999877D+02 + 0.1101718868413D+02 0.1113828385666D+02 0.1125904910191D+02 0.1137942682584D+02 + 0.1149935827678D+02 0.1161878356999D+02 0.1173764171462D+02 0.1185587064341D+02 + 0.1197340724503D+02 0.1209018739920D+02 0.1220614601465D+02 0.1232121706995D+02 + 0.1243533365740D+02 0.1254842802982D+02 0.1266043165050D+02 0.1277127524634D+02 + 0.1288088886404D+02 0.1298920192971D+02 0.1309614331160D+02 0.1320164138629D+02 + 0.1330562410812D+02 0.1340801908212D+02 0.1350875364026D+02 0.1360775492116D+02 + 0.1370494995324D+02 0.1380026574132D+02 0.1389362935662D+02 0.1398496803019D+02 + 0.1407420924981D+02 0.1416128086012D+02 0.1424611116627D+02 0.1432862904069D+02 + 0.1440876403324D+02 0.1448644648440D+02 0.1456160764164D+02 0.1463417977876D+02 + 0.1470409631813D+02 0.1477129195572D+02 0.1483570278883D+02 0.1489726644633D+02 + 0.1495592222127D+02 0.1501161120574D+02 0.1506427642781D+02 0.1511386299027D+02 + 0.1516031821110D+02 0.1520359176531D+02 0.1524363582812D+02 0.1528040521898D+02 + 0.1531385754641D+02 0.1534395335325D+02 0.1537065626208D+02 0.1539393312048D+02 + 0.1541375414585D+02 0.1543009306950D+02 0.1544292727951D+02 0.1545223796216D+02 + 0.1545801024155D+02 0.1546023331695D+02 0.1545890059744D+02 0.1545400983365D+02 + 0.1544556324596D+02 0.1543356764880D+02 0.1541803457065D+02 0.1539898036925D+02 + 0.1537642634154D+02 0.1535039882796D+02 0.1532092931044D+02 0.1528805450387D+02 + 0.1525181644030D+02 0.1521226254557D+02 0.1516944570778D+02 0.1512342433713D+02 + 0.1507426241669D+02 0.1502202954350D+02 0.1496680095964D+02 0.1490865757272D+02 + 0.1484768596530D+02 0.1478397839284D+02 0.1471763276969D+02 0.1464875264266D+02 + 0.1457744715182D+02 0.1450383097801D+02 0.1442802427679D+02 0.1435015259838D+02 + 0.1427034679327D+02 0.1418874290321D+02 0.1410548203722D+02 0.1402071023247D+02 + 0.1393457829969D+02 0.1384724165293D+02 0.1375886012364D+02 0.1366959775879D+02 + 0.1357962260304D+02 0.1348910646488D+02 0.1339822466686D+02 0.1330715577980D+02 + 0.1321608134121D+02 0.1312518555808D+02 0.1303465499419D+02 0.1294467824221D+02 + 0.1285544558101D+02 0.1276714861841D+02 0.1267997991994D+02 0.1259413262403D+02 + 0.1250980004419D+02 0.1242717525885D+02 0.1234645068948D+02 0.1226781766776D+02 + 0.1219146599257D+02 0.1211758347770D+02 0.1204635549121D+02 0.1197796448732D+02 + 0.1191258953197D+02 0.1185040582321D+02 0.1179158420730D+02 0.1173629069208D+02 + 0.1168468595856D+02 0.1163692487226D+02 0.1159315599549D+02 0.1155352110209D+02 + 0.1151815469598D+02 0.1148718353503D+02 0.1146072616178D+02 0.1143889244247D+02 + 0.1142178311602D+02 0.1140948935454D+02 0.1140209233686D+02 0.1139966283678D+02 + 0.1140226082774D+02 0.1140993510519D+02 0.1142272292875D+02 0.1144064968524D+02 + 0.1146372857460D+02 0.1149196031991D+02 0.1152533290326D+02 0.1156382132880D+02 + 0.1160738741454D+02 0.1165597961412D+02 0.1170953287012D+02 0.1176796849989D+02 + 0.1183119411535D+02 0.1189910357777D+02 0.1197157698856D+02 0.1204848071701D+02 + 0.1212966746596D+02 0.1221497637600D+02 0.1230423316888D+02 0.1239725033077D+02 + 0.1249382733567D+02 0.1259375090926D+02 0.1269679533346D+02 0.1280272279167D+02 + 0.1291128375448D+02 0.1302221740584D+02 0.1313525210912D+02 0.1325010591253D+02 + 0.1336648709337D+02 0.1348409474012D+02 0.1360261937149D+02 0.1372174359123D+02 + 0.1384114277758D+02 0.1396048580566D+02 0.1407943580155D+02 0.1419765092608D+02 + 0.1431478518661D+02 0.1443048927478D+02 0.1454441142812D+02 0.1465619831308D+02 + 0.1476549592746D+02 0.1487195051928D+02 0.1497520951989D+02 0.1507492248828D+02 + 0.1517074206398D+02 0.1526232492551D+02 0.1534933275145D+02 0.1543143318112D+02 + 0.1550830077157D+02 0.1557961794797D+02 0.1564507594396D+02 0.1570437572881D+02 + 0.1575722891823D+02 0.1580335866539D+02 0.1584250052899D+02 0.1587440331524D+02 + 0.1589882989033D+02 0.1591555796049D+02 0.1592438081630D+02 0.1592510803844D+02 + 0.1591756616179D+02 0.1590159929512D+02 0.1587706969359D+02 0.1584385828154D+02 + 0.1580186512290D+02 0.1575100983720D+02 0.1569123195871D+02 0.1562249123695D+02 + 0.1554476787665D+02 0.1545806271560D+02 0.1536239733893D+02 0.1525781412875D+02 + 0.1514437624809D+02 0.1502216755847D+02 0.1489129247063D+02 0.1475187572813D+02 + 0.1460406212401D+02 0.1444801615062D+02 0.1428392158332D+02 0.1411198099888D+02 + 0.1393241522964D+02 0.1374546275490D+02 0.1355137903119D+02 0.1335043576333D+02 + 0.1314292011864D+02 0.1292913388664D+02 0.1270939258714D+02 0.1248402452972D+02 + 0.1225336982785D+02 0.1201777937125D+02 0.1177761376017D+02 0.1153324220569D+02 + 0.1128504140014D+02 0.1103339436205D+02 0.1077868926027D+02 0.1052131822179D+02 + 0.1026167612835D+02 0.1000015940663D+02 0.9737164817090D+01 0.9473088246666D+01 + 0.9208323510392D+01 0.8943261167138D+01 0.8678287354606D+01 0.8413782648689D+01 + 0.8150120952198D+01 0.7887668417870D+01 0.7626782410424D+01 0.7367810512255D+01 + 0.7111089577147D+01 0.6856944836175D+01 0.6605689059620D+01 0.6357621778576D+01 + 0.6113028569417D+01 0.5872180404071D+01 0.5635333068605D+01 0.5402726652271D+01 + 0.5174585108689D+01 0.4951115890458D+01 0.4732509658013D+01 0.4518940063093D+01 + 0.4310563606744D+01 0.4107519571314D+01 0.3909930025455D+01 0.3717899900701D+01 + 0.3531517137795D+01 0.3350852900521D+01 0.3175961854415D+01 0.3006882507418D+01 + 0.2843637609166D+01 0.2686234605393D+01 0.2534666143602D+01 0.2388910626020D+01 + 0.2248932805599D+01 0.2114684420764D+01 0.1986104864410D+01 0.1863121882663D+01 + 0.1745652298807D+01 0.1633602757816D+01 0.1526870486911D+01 0.1425344067651D+01 + 0.1328904215091D+01 0.1237424559686D+01 0.1150772427713D+01 0.1068809616148D+01 + 0.9913931580887D+00 0.9183760750247D+00 0.8496081124357D+00 0.7849364554513D+00 + 0.7242064215293D+00 0.6672621273712D+00 0.6139471275574D+00 0.5641050226618D+00 + 0.5175800348878D+00 0.4742175495586D+00 0.4338646210828D+00 0.3963704423129D+00 + 0.3615867764997D+00 0.3293683513354D+00 0.2995732148544D+00 0.2720630532321D+00 + 0.2467034707815D+00 0.2233642326902D+00 0.2019194712763D+00 0.1822478567499D+00 + 0.1642327336682D+00 0.1477622244444D+00 0.1327293014336D+00 0.1190318292464D+00 + 0.1065725790655D+00 0.9525921682581D-01 0.8500426719540D-01 0.7572505534570D-01 + 0.6734362852856D-01 0.5978665949119D-01 0.5298533375213D-01 0.4687522273735D-01 + 0.4139614473480D-01 0.3649201557103D-01 0.3211069084453D-01 0.2820380147099D-01 + 0.2472658420543D-01 0.2163770870794D-01 0.1889910261478D-01 0.1647577596641D-01 + 0.1433564623066D-01 0.1244936504301D-01 0.1079014767040D-01 0.9333606088531D-02 + 0.8057586449521D-02 0.6942011605538D-02 0.5968729247262D-02 0.5121366113861D-02 + 0.4385188634413D-02 0.3746970269980D-02 0.3194865741265D-02 0.2718292249293D-02 + 0.2307817726031D-02 0.1955056088404D-02 0.1652569412799D-02 0.1393776897745D-02 + 0.1172870439853D-02 0.9847366120634D-03 0.8248848034661D-03 0.6893812560569D-03 + 0.5747887154298D-03 0.4781113990982D-03 0.3967449774979D-03 0.3284312582634D-03 + 0.2712172636576D-03 0.2234183935981D-03 0.1835853721449D-03 0.1504746831443D-03 + 0.1230222105786D-03 0.1003198106540D-03 0.8159455542106D-04 0.6619040144209D-04 + 0.5355205138722D-04 0.4321079120846D-04 0.3477210045803D-04 0.2790484818898D-04 + 0.2233190152246D-04 0.1782198824118D-04 0.1418266855132D-04 0.1125428434880D-04 + 0.8904766856498D-05 0.7025195313453D-05 0.5526010459652D-05 0.4333796852085D-05 + 0.3388557563637D-05 0.2641413563333D-05 0.2052668070841D-05 0.1590183444862D-05 + 0.1228024735392D-05 0.9453299398051D-06 0.7253722919424D-06 0.5547846237125D-06 + 0.4229200131023D-06 0.3213266143727D-06 0.2433177983142D-06 0.1836215545666D-06 + 0.1380955642703D-06 0.1034964778941D-06 0.7729376586493D-07 0.5752008209307D-07 + 0.4265142355148D-07 0.3151151106808D-07 0.2319578320089D-07 0.1701120974173D-07 + 0.1242881489534D-07 0.9046371073667D-08 0.6559198960071D-08 0.4737402476978D-08 + 0.3408191153158D-08 0.2442208093542D-08 0.1742998768590D-08 0.1238932286038D-08 + 0.8770296193333D-09 0.6182683290111D-09 0.4340255982013D-09 0.3033950772413D-09 + 0.2111715589818D-09 0.1463438404983D-09 0.1009726185101D-09 0.6935859066118D-10 + 0.4742849271888D-10 0.3228488955626D-10 0.2187547853929D-10 0.1475212866899D-10 + 0.9901881750809D-11 0.6613860882122D-11 0.4396644350124D-11 0.2908650000322D-11 + 0.1914873227728D-11 0.1254415200484D-11 0.8176535094916D-12 0.5302708391854D-12 + 0.3421370551355D-12 0.2196087836422D-12 0.1402231518601D-12 0.8906014768602D-13 + LSMS: xx z= 26. xvalws= 2.77074 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728402963D+02-0.5199725117641D+02-0.5199721792578D+02-0.5199718427293D+02 +-0.5199715021300D+02-0.5199711574107D+02-0.5199708085214D+02-0.5199704554119D+02 +-0.5199700980309D+02-0.5199697363268D+02-0.5199693702474D+02-0.5199689997397D+02 +-0.5199686247500D+02-0.5199682452243D+02-0.5199678611076D+02-0.5199674723444D+02 +-0.5199670788785D+02-0.5199666806529D+02-0.5199662776101D+02-0.5199658696918D+02 +-0.5199654568390D+02-0.5199650389922D+02-0.5199646160907D+02-0.5199641880734D+02 +-0.5199637548785D+02-0.5199633164434D+02-0.5199628727046D+02-0.5199624235979D+02 +-0.5199619690585D+02-0.5199615090205D+02-0.5199610434176D+02-0.5199605721822D+02 +-0.5199600952464D+02-0.5199596125410D+02-0.5199591239964D+02-0.5199586295419D+02 +-0.5199581291060D+02-0.5199576226162D+02-0.5199571099994D+02-0.5199565911815D+02 +-0.5199560660874D+02-0.5199555346411D+02-0.5199549967658D+02-0.5199544523837D+02 +-0.5199539014162D+02-0.5199533437834D+02-0.5199527794048D+02-0.5199522081989D+02 +-0.5199516300828D+02-0.5199510449731D+02-0.5199504527851D+02-0.5199498534331D+02 +-0.5199492468306D+02-0.5199486328897D+02-0.5199480115217D+02-0.5199473826367D+02 +-0.5199467461436D+02-0.5199461019507D+02-0.5199454499646D+02-0.5199447900910D+02 +-0.5199441222344D+02-0.5199434462984D+02-0.5199427621849D+02-0.5199420697954D+02 +-0.5199413690295D+02-0.5199406597858D+02-0.5199399419618D+02-0.5199392154537D+02 +-0.5199384801563D+02-0.5199377359634D+02-0.5199369827672D+02-0.5199362204589D+02 +-0.5199354489281D+02-0.5199346680633D+02-0.5199338777515D+02-0.5199330778784D+02 +-0.5199322683282D+02-0.5199314489839D+02-0.5199306197270D+02-0.5199297804374D+02 +-0.5199289309939D+02-0.5199280712733D+02-0.5199272011516D+02-0.5199263205027D+02 +-0.5199254291992D+02-0.5199245271123D+02-0.5199236141114D+02-0.5199226900644D+02 +-0.5199217548376D+02-0.5199208082958D+02-0.5199198503019D+02-0.5199188807175D+02 +-0.5199178994021D+02-0.5199169062139D+02-0.5199159010092D+02-0.5199148836424D+02 +-0.5199138539665D+02-0.5199128118323D+02-0.5199117570892D+02-0.5199106895845D+02 +-0.5199096091638D+02-0.5199085156707D+02-0.5199074089471D+02-0.5199062888326D+02 +-0.5199051551654D+02-0.5199040077813D+02-0.5199028465143D+02-0.5199016711964D+02 +-0.5199004816574D+02-0.5198992777253D+02-0.5198980592257D+02-0.5198968259824D+02 +-0.5198955778170D+02-0.5198943145487D+02-0.5198930359948D+02-0.5198917419701D+02 +-0.5198904322875D+02-0.5198891067574D+02-0.5198877651879D+02-0.5198864073848D+02 +-0.5198850331517D+02-0.5198836422896D+02-0.5198822345972D+02-0.5198808098707D+02 +-0.5198793679039D+02-0.5198779084882D+02-0.5198764314123D+02-0.5198749364622D+02 +-0.5198734234217D+02-0.5198718920716D+02-0.5198703421905D+02-0.5198687735537D+02 +-0.5198671859343D+02-0.5198655791024D+02-0.5198639528254D+02-0.5198623068679D+02 +-0.5198606409915D+02-0.5198589549550D+02-0.5198572485143D+02-0.5198555214224D+02 +-0.5198537734293D+02-0.5198520042816D+02-0.5198502137235D+02-0.5198484014954D+02 +-0.5198465673351D+02-0.5198447109769D+02-0.5198428321519D+02-0.5198409305883D+02 +-0.5198390060104D+02-0.5198370581396D+02-0.5198350866939D+02-0.5198330913876D+02 +-0.5198310719319D+02-0.5198290280341D+02-0.5198269593983D+02-0.5198248657249D+02 +-0.5198227467106D+02-0.5198206020484D+02-0.5198184314277D+02-0.5198162345340D+02 +-0.5198140110492D+02-0.5198117606510D+02-0.5198094830136D+02-0.5198071778068D+02 +-0.5198048446968D+02-0.5198024833454D+02-0.5198000934107D+02-0.5197976745462D+02 +-0.5197952264015D+02-0.5197927486220D+02-0.5197902408485D+02-0.5197877027176D+02 +-0.5197851338615D+02-0.5197825339081D+02-0.5197799024804D+02-0.5197772391971D+02 +-0.5197745436723D+02-0.5197718155151D+02-0.5197690543304D+02-0.5197662597177D+02 +-0.5197634312720D+02-0.5197605685833D+02-0.5197576712367D+02-0.5197547388122D+02 +-0.5197517708846D+02-0.5197487670236D+02-0.5197457267938D+02-0.5197426497542D+02 +-0.5197395354589D+02-0.5197363834563D+02-0.5197331932893D+02-0.5197299644952D+02 +-0.5197266966059D+02-0.5197233891476D+02-0.5197200416404D+02-0.5197166535990D+02 +-0.5197132245319D+02-0.5197097539418D+02-0.5197062413252D+02-0.5197026861727D+02 +-0.5196990879687D+02-0.5196954461909D+02-0.5196917603112D+02-0.5196880297948D+02 +-0.5196842541005D+02-0.5196804326804D+02-0.5196765649801D+02-0.5196726504383D+02 +-0.5196686884871D+02-0.5196646785514D+02-0.5196606200494D+02-0.5196565123919D+02 +-0.5196523549829D+02-0.5196481472189D+02-0.5196438884890D+02-0.5196395781753D+02 +-0.5196352156518D+02-0.5196308002855D+02-0.5196263314350D+02-0.5196218084518D+02 +-0.5196172306789D+02-0.5196125974518D+02-0.5196079080977D+02-0.5196031619354D+02 +-0.5195983582758D+02-0.5195934964214D+02-0.5195885756657D+02-0.5195835952942D+02 +-0.5195785545834D+02-0.5195734528011D+02-0.5195682892060D+02-0.5195630630481D+02 +-0.5195577735679D+02-0.5195524199969D+02-0.5195470015573D+02-0.5195415174616D+02 +-0.5195359669127D+02-0.5195303491041D+02-0.5195246632192D+02-0.5195189084316D+02 +-0.5195130839046D+02-0.5195071887917D+02-0.5195012222358D+02-0.5194951833693D+02 +-0.5194890713143D+02-0.5194828851819D+02-0.5194766240726D+02-0.5194702870759D+02 +-0.5194638732701D+02-0.5194573817222D+02-0.5194508114882D+02-0.5194441616121D+02 +-0.5194374311266D+02-0.5194306190525D+02-0.5194237243986D+02-0.5194167461616D+02 +-0.5194096833262D+02-0.5194025348643D+02-0.5193952997356D+02-0.5193879768871D+02 +-0.5193805652527D+02-0.5193730637535D+02-0.5193654712973D+02-0.5193577867788D+02 +-0.5193500090790D+02-0.5193421370652D+02-0.5193341695911D+02-0.5193261054963D+02 +-0.5193179436061D+02-0.5193096827316D+02-0.5193013216694D+02-0.5192928592013D+02 +-0.5192842940944D+02-0.5192756251004D+02-0.5192668509561D+02-0.5192579703828D+02 +-0.5192489820860D+02-0.5192398847556D+02-0.5192306770652D+02-0.5192213576726D+02 +-0.5192119252189D+02-0.5192023783287D+02-0.5191927156096D+02-0.5191829356524D+02 +-0.5191730370307D+02-0.5191630183005D+02-0.5191528780001D+02-0.5191426146503D+02 +-0.5191322267532D+02-0.5191217127930D+02-0.5191110712354D+02-0.5191003005272D+02 +-0.5190893990959D+02-0.5190783653503D+02-0.5190671976795D+02-0.5190558944528D+02 +-0.5190444540195D+02-0.5190328747089D+02-0.5190211548297D+02-0.5190092926700D+02 +-0.5189972864968D+02-0.5189851345560D+02-0.5189728350719D+02-0.5189603862472D+02 +-0.5189477862625D+02-0.5189350332759D+02-0.5189221254235D+02-0.5189090608179D+02 +-0.5188958375491D+02-0.5188824536834D+02-0.5188689072635D+02-0.5188551963080D+02 +-0.5188413188114D+02-0.5188272727435D+02-0.5188130560492D+02-0.5187986666482D+02 +-0.5187841024347D+02-0.5187693612772D+02-0.5187544410178D+02-0.5187393394724D+02 +-0.5187240544300D+02-0.5187085836524D+02-0.5186929248740D+02-0.5186770758014D+02 +-0.5186610341132D+02-0.5186447974591D+02-0.5186283634606D+02-0.5186117297093D+02 +-0.5185948937678D+02-0.5185778531685D+02-0.5185606054135D+02-0.5185431479744D+02 +-0.5185254782916D+02-0.5185075937741D+02-0.5184894917991D+02-0.5184711697117D+02 +-0.5184526248242D+02-0.5184338544160D+02-0.5184148557330D+02-0.5183956259875D+02 +-0.5183761623572D+02-0.5183564619854D+02-0.5183365219802D+02-0.5183163394142D+02 +-0.5182959113240D+02-0.5182752347098D+02-0.5182543065350D+02-0.5182331237255D+02 +-0.5182116831697D+02-0.5181899817174D+02-0.5181680161800D+02-0.5181457833297D+02 +-0.5181232798987D+02-0.5181005025795D+02-0.5180774480235D+02-0.5180541128413D+02 +-0.5180304936016D+02-0.5180065868310D+02-0.5179823890134D+02-0.5179578965895D+02 +-0.5179331059564D+02-0.5179080134665D+02-0.5178826154277D+02-0.5178569081025D+02 +-0.5178308877073D+02-0.5178045504121D+02-0.5177778923399D+02-0.5177509095659D+02 +-0.5177235981171D+02-0.5176959539717D+02-0.5176679730585D+02-0.5176396512563D+02 +-0.5176109843930D+02-0.5175819682457D+02-0.5175525985390D+02-0.5175228709457D+02 +-0.5174927810849D+02-0.5174623245221D+02-0.5174314967682D+02-0.5174002932792D+02 +-0.5173687094551D+02-0.5173367406395D+02-0.5173043821187D+02-0.5172716291215D+02 +-0.5172384768177D+02-0.5172049203182D+02-0.5171709546736D+02-0.5171365748739D+02 +-0.5171017758479D+02-0.5170665524617D+02-0.5170308995189D+02-0.5169948117592D+02 +-0.5169582838578D+02-0.5169213104249D+02-0.5168838860043D+02-0.5168460050732D+02 +-0.5168076620412D+02-0.5167688512494D+02-0.5167295669696D+02-0.5166898034036D+02 +-0.5166495546822D+02-0.5166088148646D+02-0.5165675779371D+02-0.5165258378128D+02 +-0.5164835883303D+02-0.5164408232529D+02-0.5163975362681D+02-0.5163537209858D+02 +-0.5163093709386D+02-0.5162644795799D+02-0.5162190402831D+02-0.5161730463415D+02 +-0.5161264909661D+02-0.5160793672858D+02-0.5160316683457D+02-0.5159833871062D+02 +-0.5159345164422D+02-0.5158850491424D+02-0.5158349779076D+02-0.5157842953502D+02 +-0.5157329939929D+02-0.5156810662682D+02-0.5156285045165D+02-0.5155753009857D+02 +-0.5155214478300D+02-0.5154669371088D+02-0.5154117607855D+02-0.5153559107266D+02 +-0.5152993787006D+02-0.5152421563767D+02-0.5151842353238D+02-0.5151256070096D+02 +-0.5150662627991D+02-0.5150061939535D+02-0.5149453916296D+02-0.5148838468777D+02 +-0.5148215506412D+02-0.5147584937554D+02-0.5146946669454D+02-0.5146300608264D+02 +-0.5145646659012D+02-0.5144984725596D+02-0.5144314710771D+02-0.5143636516137D+02 +-0.5142950042123D+02-0.5142255187982D+02-0.5141551851771D+02-0.5140839930344D+02 +-0.5140119319335D+02-0.5139389913149D+02-0.5138651604948D+02-0.5137904286634D+02 +-0.5137147848843D+02-0.5136382180931D+02-0.5135607170955D+02-0.5134822705665D+02 +-0.5134028670491D+02-0.5133224949527D+02-0.5132411425521D+02-0.5131587979859D+02 +-0.5130754492555D+02-0.5129910842232D+02-0.5129056906116D+02-0.5128192560017D+02 +-0.5127317678315D+02-0.5126432133956D+02-0.5125535798425D+02-0.5124628541740D+02 +-0.5123710232443D+02-0.5122780737574D+02-0.5121839922671D+02-0.5120887651745D+02 +-0.5119923787276D+02-0.5118948190193D+02-0.5117960719865D+02-0.5116961234085D+02 +-0.5115949589056D+02-0.5114925639380D+02-0.5113889238044D+02-0.5112840236408D+02 +-0.5111778484188D+02-0.5110703829447D+02-0.5109616118579D+02-0.5108515196301D+02 +-0.5107400905631D+02-0.5106273087889D+02-0.5105131582667D+02-0.5103976227836D+02 +-0.5102806859514D+02-0.5101623312071D+02-0.5100425418105D+02-0.5099213008436D+02 +-0.5097985912091D+02-0.5096743956297D+02-0.5095486966464D+02-0.5094214766176D+02 +-0.5092927177183D+02-0.5091624019384D+02-0.5090305110822D+02-0.5088970267672D+02 +-0.5087619304230D+02-0.5086252032900D+02-0.5084868264193D+02-0.5083467806710D+02 +-0.5082050467136D+02-0.5080616050232D+02-0.5079164358822D+02-0.5077695193792D+02 +-0.5076208354076D+02-0.5074703636655D+02-0.5073180836542D+02-0.5071639746782D+02 +-0.5070080158445D+02-0.5068501860613D+02-0.5066904640389D+02-0.5065288282874D+02 +-0.5063652571181D+02-0.5061997286414D+02-0.5060322207678D+02-0.5058627112067D+02 +-0.5056911774669D+02-0.5055175968555D+02-0.5053419464788D+02-0.5051642032411D+02 +-0.5049843438458D+02-0.5048023447945D+02-0.5046181823877D+02-0.5044318327247D+02 +-0.5042432717038D+02-0.5040524750226D+02-0.5038594181787D+02-0.5036640764694D+02 +-0.5034664249930D+02-0.5032664386488D+02-0.5030640921379D+02-0.5028593599640D+02 +-0.5026522164341D+02-0.5024426356594D+02-0.5022305915564D+02-0.5020160578474D+02 +-0.5017990080623D+02-0.5015794155393D+02-0.5013572534263D+02-0.5011324946826D+02 +-0.5009051120796D+02-0.5006750782030D+02-0.5004423654542D+02-0.5002069460521D+02 +-0.4999687920344D+02-0.4997278752603D+02-0.4994841674120D+02-0.4992376399966D+02 +-0.4989882643488D+02-0.4987360116327D+02-0.4984808528443D+02-0.4982227588141D+02 +-0.4979617002094D+02-0.4976976475371D+02-0.4974305711462D+02-0.4971604412309D+02 +-0.4968872278335D+02-0.4966109008469D+02-0.4963314300185D+02-0.4960487849528D+02 +-0.4957629351145D+02-0.4954738498327D+02-0.4951814983035D+02-0.4948858495939D+02 +-0.4945868726453D+02-0.4942845362775D+02-0.4939788091919D+02-0.4936696599757D+02 +-0.4933570571061D+02-0.4930409689534D+02-0.4927213637859D+02-0.4923982097740D+02 +-0.4920714749935D+02-0.4917411274309D+02-0.4914071349870D+02-0.4910694654815D+02 +-0.4907280866573D+02-0.4903829661848D+02-0.4900340716666D+02-0.4896813706420D+02 +-0.4893248305909D+02-0.4889644189392D+02-0.4886001030623D+02-0.4882318502909D+02 +-0.4878596279141D+02-0.4874834031849D+02-0.4871031433244D+02-0.4867188155262D+02 +-0.4863303869609D+02-0.4859378247804D+02-0.4855410961222D+02-0.4851401681140D+02 +-0.4847350078774D+02-0.4843255825325D+02-0.4839118592018D+02-0.4834938050138D+02 +-0.4830713871075D+02-0.4826445726356D+02-0.4822133287682D+02-0.4817776226967D+02 +-0.4813374216365D+02-0.4808926928306D+02-0.4804434035526D+02-0.4799895211091D+02 +-0.4795310128431D+02-0.4790678461358D+02-0.4785999884093D+02-0.4781274071282D+02 +-0.4776500698020D+02-0.4771679439861D+02-0.4766809972836D+02-0.4761891973461D+02 +-0.4756925118748D+02-0.4751909086208D+02-0.4746843553857D+02-0.4741728200213D+02 +-0.4736562704295D+02-0.4731346745620D+02-0.4726080004188D+02-0.4720762160479D+02 +-0.4715392895431D+02-0.4709971890425D+02-0.4704498827268D+02-0.4698973388163D+02 +-0.4693395255690D+02-0.4687764112767D+02-0.4682079642628D+02-0.4676341528777D+02 +-0.4670549454962D+02-0.4664703105122D+02-0.4658802163351D+02-0.4652846313853D+02 +-0.4646835240891D+02-0.4640768628735D+02-0.4634646161617D+02-0.4628467523671D+02 +-0.4622232398885D+02-0.4615940471037D+02-0.4609591423645D+02-0.4603184939910D+02 +-0.4596720702657D+02-0.4590198394276D+02-0.4583617696675D+02-0.4576978291218D+02 +-0.4570279858676D+02-0.4563522079176D+02-0.4556704632159D+02-0.4549827196328D+02 +-0.4542889449617D+02-0.4535891069156D+02-0.4528831731237D+02-0.4521711111299D+02 +-0.4514528883912D+02-0.4507284722768D+02-0.4499978300686D+02-0.4492609289624D+02 +-0.4485177360700D+02-0.4477682184233D+02-0.4470123429783D+02-0.4462500766219D+02 +-0.4454813861790D+02-0.4447062384219D+02-0.4439246000814D+02-0.4431364378589D+02 +-0.4423417184413D+02-0.4415404085174D+02-0.4407324747964D+02-0.4399178840285D+02 +-0.4390966030283D+02-0.4382685986996D+02-0.4374338380636D+02-0.4365922882888D+02 +-0.4357439167239D+02-0.4348886909331D+02-0.4340265787340D+02-0.4331575482384D+02 +-0.4322815678953D+02-0.4313986065369D+02-0.4305086334268D+02-0.4296116183110D+02 +-0.4287075314713D+02-0.4277963437808D+02-0.4268780267613D+02-0.4259525526436D+02 +-0.4250198944278D+02-0.4240800259471D+02-0.4231329219311D+02-0.4221785580702D+02 +-0.4212169110814D+02-0.4202479587724D+02-0.4192716801066D+02-0.4182880552657D+02 +-0.4172970657123D+02-0.4162986942478D+02-0.4152929250699D+02-0.4142797438248D+02 +-0.4132591376546D+02-0.4122310952415D+02-0.4111956068435D+02-0.4101526643252D+02 +-0.4091022611799D+02-0.4080443925436D+02-0.4069790551997D+02-0.4059062475744D+02 +-0.4048259697200D+02-0.4037382232884D+02-0.4026430114924D+02-0.4015403390548D+02 +-0.4004302121449D+02-0.3993126383031D+02-0.3981876263529D+02-0.3970551863000D+02 +-0.3959153292214D+02-0.3947680671418D+02-0.3936134129010D+02-0.3924513800125D+02 +-0.3912819825140D+02-0.3901052348125D+02-0.3889211515259D+02-0.3877297473220D+02 +-0.3865310367583D+02-0.3853250341248D+02-0.3841117532917D+02-0.3828912075654D+02 +-0.3816634095549D+02-0.3804283710513D+02-0.3791861029232D+02-0.3779366150300D+02 +-0.3766799161555D+02-0.3754160139636D+02-0.3741449149782D+02-0.3728666245883D+02 +-0.3715811470790D+02-0.3702884856900D+02-0.3689886427010D+02-0.3676816195438D+02 +-0.3663674169408D+02-0.3650460350690D+02-0.3637174737474D+02-0.3623817326473D+02 +-0.3610388115218D+02-0.3596887104531D+02-0.3583314301154D+02-0.3569669720495D+02 +-0.3555953389464D+02-0.3542165349386D+02-0.3528305658922D+02-0.3514374397011D+02 +-0.3500371665774D+02-0.3486297593358D+02-0.3472152336690D+02-0.3457936084122D+02 +-0.3443649057928D+02-0.3429291516643D+02-0.3414863757211D+02-0.3400366116934D+02 +-0.3385798975190D+02-0.3371162754922D+02-0.3356457923876D+02-0.3341684995570D+02 +-0.3326844530007D+02-0.3311937134098D+02-0.3296963461820D+02-0.3281924214079D+02 +-0.3266820138293D+02-0.3251652027694D+02-0.3236420720350D+02-0.3221127097903D+02 +-0.3205772084042D+02-0.3190356642710D+02-0.3174881776049D+02-0.3159348522098D+02 +-0.3143757952257D+02-0.3128111168511D+02-0.3112409300454D+02-0.3096653502093D+02 +-0.3080844948479D+02-0.3064984832153D+02-0.3049074359439D+02-0.3033114746593D+02 +-0.3017107215833D+02-0.3001052991254D+02-0.2984953294675D+02-0.2968809341400D+02 +-0.2952622335948D+02-0.2936393467762D+02-0.2920123906907D+02-0.2903814799805D+02 +-0.2887467265011D+02-0.2871082389066D+02-0.2854661222446D+02-0.2838204775647D+02 +-0.2821714015409D+02-0.2805189861135D+02-0.2788633181514D+02-0.2772044791378D+02 +-0.2755425448842D+02-0.2738775852723D+02-0.2722096640307D+02-0.2705388385454D+02 +-0.2688651597109D+02-0.2671886718221D+02-0.2655094125117D+02-0.2638274127348D+02 +-0.2621426968047D+02-0.2604552824823D+02-0.2587651811214D+02-0.2570723978730D+02 +-0.2553769319514D+02-0.2536787769632D+02-0.2519779213021D+02-0.2502743486110D+02 +-0.2485680383129D+02-0.2468589662112D+02-0.2451471051601D+02-0.2434324258050D+02 +-0.2417148973924D+02-0.2399944886481D+02-0.2382711687194D+02-0.2365449081810D+02 +-0.2348156800981D+02-0.2330834611404D+02-0.2313482327422D+02-0.2296099822964D+02 +-0.2278687043744D+02-0.2261244019567D+02-0.2243770876615D+02-0.2226267849517D+02 +-0.2208735293014D+02-0.2191173693001D+02-0.2173583676674D+02-0.2155966021537D+02 +-0.2138321662948D+02-0.2120651699903D+02-0.2102957398727D+02-0.2085240194340D+02 +-0.2067501688787D+02-0.2049743646710D+02-0.2031967987514D+02-0.2014176773999D+02 +-0.1996372197331D+02-0.1978556558301D+02-0.1960732244950D+02-0.1942901706755D+02 +-0.1925067425750D+02-0.1907231885074D+02-0.1889397535633D+02-0.1871566761696D+02 +-0.1853741846374D+02-0.1835924938052D+02-0.1818118018868D+02-0.1800322876380D+02 +-0.1782541079491D+02-0.1764773959582D+02-0.1747022597686D+02-0.1729287818264D+02 +-0.1711570189939D+02-0.1693870033244D+02-0.1676187435187D+02-0.1658522270158D+02 +-0.1640874226459D+02-0.1623242837596D+02-0.1605627517269D+02-0.1588027596970D+02 +-0.1570442365062D+02-0.1552871106216D+02-0.1535313140208D+02-0.1517767859145D+02 +-0.1500234762341D+02-0.1482713488228D+02-0.1465203842815D+02-0.1447705824363D+02 +-0.1430219644106D+02-0.1412745742929D+02-0.1395284804054D+02-0.1377837761854D+02 +-0.1360405806987D+02-0.1342990388081D+02-0.1325593210249D+02-0.1308216230731D+02 +-0.1290861651951D+02-0.1273531912305D+02-0.1256229674959D+02-0.1238957814960D+02 +-0.1221719404907D+02-0.1204517699438D+02-0.1187356118783D+02-0.1170238231558D+02 +-0.1153167737042D+02-0.1136148447069D+02-0.1119184267735D+02-0.1102279181034D+02 +-0.1085437226576D+02-0.1068662483495D+02-0.1051959052659D+02-0.1035331039265D+02 +-0.1018782535928D+02-0.1002317606321D+02-0.9859402694342D+01-0.9696544845323D+01 +-0.9534641368482D+01-0.9373730240659D+01-0.9213848436346D+01-0.9055031809511D+01 +-0.8897314984394D+01-0.8740731255549D+01-0.8585312497336D+01-0.8431089083029D+01 +-0.8278089813661D+01-0.8126341856676D+01-0.7975870694439D+01-0.7826700082584D+01 +-0.7678852018171D+01-0.7532346717566D+01-0.7387202603932D+01-0.7243436304187D+01 +-0.7101062655233D+01-0.6960094719270D+01-0.6820543807924D+01-0.6682419514939D+01 +-0.6545729757123D+01-0.6410480823229D+01-0.6276677430423D+01-0.6144322787958D+01 +-0.6013418667669D+01-0.5883965480867D+01-0.5755962361193D+01-0.5629407252975D+01 +-0.5504297004604D+01-0.5380627466436D+01-0.5258393592702D+01-0.5137589546863D+01 +-0.5018208809882D+01-0.4900244290793D+01-0.4783688438971D+01-0.4668533357470D+01 +-0.4554770916754D+01-0.4442392868124D+01-0.4331390956131D+01-0.4221757029192D+01 +-0.4113483147635D+01-0.4006561688322D+01-0.3900985445011D+01-0.3796747723533D+01 +-0.3693842430876D+01-0.3592264157211D+01-0.3492008249906D+01-0.3393070878541D+01 +-0.3295449089976D+01-0.3199140852531D+01-0.3104145088414D+01-0.3010461693592D+01 +-0.2918091544431D+01-0.2827036490592D+01-0.2737299333835D+01-0.2648883792669D+01 +-0.2561794453010D+01-0.2476036705393D+01-0.2391616669610D+01-0.2308541108029D+01 +-0.2226817329318D+01-0.2146453084634D+01-0.2067456458802D+01-0.1989835759339D+01 +-0.1913599406514D+01-0.1838755827812D+01-0.1765313360391D+01-0.1693280165020D+01 +-0.1622664154978D+01-0.1553472943063D+01-0.1485713809518D+01-0.1419393693186D+01 +-0.1354519207570D+01-0.1291096682842D+01-0.1229132234097D+01-0.1168631855453D+01 +-0.1109601538882D+01-0.1052047416050D+01-0.9959759208814D+00-0.9413939701484D+00 +-0.8883091590719D+00-0.8367299687430D+00-0.7866659821253D+00-0.7381281054637D+00 +-0.6911287920896D+00-0.6456822658698D+00-0.6018047418553D+00-0.5595146420441D+00 +-0.5188328045500D+00-0.4797826848498D+00-0.4423905481512D+00-0.4066856522662D+00 +-0.3727004206897D+00-0.3404706058472D+00-0.3100354427093D+00-0.2814377931599D+00 +-0.2547240189175D+00 + 0.0000000000000D+00 + 1012 0.2770741520224D+01 + 0.2150927949039D-04 0.2202124536575D-04 0.2254539478646D-04 0.2308201760180D-04 + 0.2363141055333D-04 0.2419387743865D-04 0.2476972927906D-04 0.2535928449121D-04 + 0.2596286906285D-04 0.2658081673262D-04 0.2721346917432D-04 0.2786117618535D-04 + 0.2852429587973D-04 0.2920319488569D-04 0.2989824854795D-04 0.3060984113473D-04 + 0.3133836604977D-04 0.3208422604934D-04 0.3284783346437D-04 0.3362961042788D-04 + 0.3442998910781D-04 0.3524941194536D-04 0.3608833189898D-04 0.3694721269416D-04 + 0.3782652907911D-04 0.3872676708658D-04 0.3964842430179D-04 0.4059201013679D-04 + 0.4155804611131D-04 0.4254706614023D-04 0.4355961682789D-04 0.4459625776943D-04 + 0.4565756185917D-04 0.4674411560639D-04 0.4785651945856D-04 0.4899538813222D-04 + 0.5016135095172D-04 0.5135505219602D-04 0.5257715145361D-04 0.5382832398596D-04 + 0.5510926109951D-04 0.5642067052648D-04 0.5776327681476D-04 0.5913782172693D-04 + 0.6054506464885D-04 0.6198578300785D-04 0.6346077270088D-04 0.6497084853274D-04 + 0.6651684466474D-04 0.6809961507398D-04 0.6972003402351D-04 0.7137899654355D-04 + 0.7307741892426D-04 0.7481623921999D-04 0.7659641776564D-04 0.7841893770513D-04 + 0.8028480553242D-04 0.8219505164534D-04 0.8415073091254D-04 0.8615292325379D-04 + 0.8820273423416D-04 0.9030129567206D-04 0.9244976626185D-04 0.9464933221109D-04 + 0.9690120789284D-04 0.9920663651351D-04 0.1015668907964D-03 0.1039832736813D-03 + 0.1064571190411D-03 0.1089897924148D-03 0.1115826917580D-03 0.1142372482113D-03 + 0.1169549268870D-03 0.1197372276738D-03 0.1225856860613D-03 0.1255018739831D-03 + 0.1284874006808D-03 0.1315439135877D-03 0.1346730992336D-03 0.1378766841712D-03 + 0.1411564359238D-03 0.1445141639563D-03 0.1479517206680D-03 0.1514710024102D-03 + 0.1550739505263D-03 0.1587625524179D-03 0.1625388426349D-03 0.1664049039925D-03 + 0.1703628687133D-03 0.1744149195974D-03 0.1785632912194D-03 0.1828102711544D-03 + 0.1871582012321D-03 0.1916094788209D-03 0.1961665581427D-03 0.2008319516176D-03 + 0.2056082312418D-03 0.2104980299966D-03 0.2155040432913D-03 0.2206290304405D-03 + 0.2258758161753D-03 0.2312472921908D-03 0.2367464187300D-03 0.2423762262044D-03 + 0.2481398168542D-03 0.2540403664457D-03 0.2600811260106D-03 0.2662654236245D-03 + 0.2725966662290D-03 0.2790783414953D-03 0.2857140197324D-03 0.2925073558401D-03 + 0.2994620913080D-03 0.3065820562611D-03 0.3138711715547D-03 0.3213334509168D-03 + 0.3289730031429D-03 0.3367940343406D-03 0.3448008502286D-03 0.3529978584881D-03 + 0.3613895711713D-03 0.3699806071650D-03 0.3787756947128D-03 0.3877796739964D-03 + 0.3969974997780D-03 0.4064342441040D-03 0.4160950990725D-03 0.4259853796663D-03 + 0.4361105266519D-03 0.4464761095462D-03 0.4570878296540D-03 0.4679515231757D-03 + 0.4790731643881D-03 0.4904588689006D-03 0.5021148969868D-03 0.5140476569946D-03 + 0.5262637088364D-03 0.5387697675611D-03 0.5515727070097D-03 0.5646795635561D-03 + 0.5780975399370D-03 0.5918340091694D-03 0.6058965185620D-03 0.6202927938188D-03 + 0.6350307432396D-03 0.6501184620192D-03 0.6655642366457D-03 0.6813765494038D-03 + 0.6975640829812D-03 0.7141357251847D-03 0.7311005737650D-03 0.7484679413557D-03 + 0.7662473605260D-03 0.7844485889531D-03 0.8030816147148D-03 0.8221566617048D-03 + 0.8416841951763D-03 0.8616749274129D-03 0.8821398235337D-03 0.9030901074324D-03 + 0.9245372678559D-03 0.9464930646236D-03 0.9689695349932D-03 0.9919790001731D-03 + 0.1015534071988D-02 0.1039647659698D-02 0.1064332976981D-02 0.1089603549068D-02 + 0.1115473220057D-02 0.1141956160389D-02 0.1169066874495D-02 0.1196820208634D-02 + 0.1225231358897D-02 0.1254315879409D-02 0.1284089690715D-02 0.1314569088366D-02 + 0.1345770751696D-02 0.1377711752814D-02 0.1410409565795D-02 0.1443882076088D-02 + 0.1478147590144D-02 0.1513224845264D-02 0.1549133019674D-02 0.1585891742841D-02 + 0.1623521106018D-02 0.1662041673040D-02 0.1701474491365D-02 0.1741841103378D-02 + 0.1783163557945D-02 0.1825464422244D-02 0.1868766793867D-02 0.1913094313196D-02 + 0.1958471176071D-02 0.2004922146751D-02 0.2052472571166D-02 0.2101148390486D-02 + 0.2150976154989D-02 0.2201983038264D-02 0.2254196851731D-02 0.2307646059493D-02 + 0.2362359793542D-02 0.2418367869301D-02 0.2475700801533D-02 0.2534389820612D-02 + 0.2594466889165D-02 0.2655964719104D-02 0.2718916789042D-02 0.2783357362106D-02 + 0.2849321504172D-02 0.2916845102501D-02 0.2985964884814D-02 0.3056718438800D-02 + 0.3129144232066D-02 0.3203281632551D-02 0.3279170929405D-02 0.3356853354336D-02 + 0.3436371103460D-02 0.3517767359634D-02 0.3601086315312D-02 0.3686373195913D-02 + 0.3773674283724D-02 0.3863036942351D-02 0.3954509641719D-02 0.4048141983652D-02 + 0.4143984728019D-02 0.4242089819491D-02 0.4342510414893D-02 0.4445300911185D-02 + 0.4550516974067D-02 0.4658215567249D-02 0.4768454982366D-02 0.4881294869584D-02 + 0.4996796268890D-02 0.5115021642093D-02 0.5236034905549D-02 0.5359901463622D-02 + 0.5486688242898D-02 0.5616463727181D-02 0.5749297993262D-02 0.5885262747508D-02 + 0.6024431363262D-02 0.6166878919093D-02 0.6312682237899D-02 0.6461919926891D-02 + 0.6614672418475D-02 0.6771022012045D-02 0.6931052916716D-02 0.7094851295016D-02 + 0.7262505307545D-02 0.7434105158642D-02 0.7609743143066D-02 0.7789513693721D-02 + 0.7973513430440D-02 0.8161841209859D-02 0.8354598176397D-02 0.8551887814376D-02 + 0.8753816001287D-02 0.8960491062250D-02 0.9172023825667D-02 0.9388527680122D-02 + 0.9610118632529D-02 0.9836915367568D-02 0.1006903930843D-01 0.1030661467892D-01 + 0.1054976856688D-01 0.1079863098909D-01 0.1105333495749D-01 0.1131401654696D-01 + 0.1158081496451D-01 0.1185387262003D-01 0.1213333519856D-01 0.1241935173418D-01 + 0.1271207468545D-01 0.1301166001257D-01 0.1331826725616D-01 0.1363205961778D-01 + 0.1395320404221D-01 0.1428187130150D-01 0.1461823608081D-01 0.1496247706623D-01 + 0.1531477703430D-01 0.1567532294367D-01 0.1604430602860D-01 0.1642192189452D-01 + 0.1680837061563D-01 0.1720385683464D-01 0.1760858986456D-01 0.1802278379280D-01 + 0.1844665758734D-01 0.1888043520531D-01 0.1932434570378D-01 0.1977862335297D-01 + 0.2024350775185D-01 0.2071924394615D-01 0.2120608254895D-01 0.2170427986376D-01 + 0.2221409801021D-01 0.2273580505238D-01 0.2326967512987D-01 0.2381598859160D-01 + 0.2437503213237D-01 0.2494709893234D-01 0.2553248879941D-01 0.2613150831454D-01 + 0.2674447098014D-01 0.2737169737147D-01 0.2801351529124D-01 0.2867025992742D-01 + 0.2934227401421D-01 0.3002990799646D-01 0.3073352019732D-01 0.3145347698951D-01 + 0.3219015296988D-01 0.3294393113773D-01 0.3371520307664D-01 0.3450436914006D-01 + 0.3531183864059D-01 0.3613803004319D-01 0.3698337116219D-01 0.3784829936233D-01 + 0.3873326176383D-01 0.3963871545150D-01 0.4056512768813D-01 0.4151297613205D-01 + 0.4248274905905D-01 0.4347494558865D-01 0.4449007591493D-01 0.4552866154180D-01 + 0.4659123552298D-01 0.4767834270657D-01 0.4879053998454D-01 0.4992839654695D-01 + 0.5109249414114D-01 0.5228342733595D-01 0.5350180379101D-01 0.5474824453121D-01 + 0.5602338422639D-01 0.5732787147645D-01 0.5866236910176D-01 0.6002755443915D-01 + 0.6142411964345D-01 0.6285277199472D-01 0.6431423421119D-01 0.6580924476805D-01 + 0.6733855822219D-01 0.6890294554290D-01 0.7050319444864D-01 0.7214010975008D-01 + 0.7381451369925D-01 0.7552724634520D-01 0.7727916589591D-01 0.7907114908690D-01 + 0.8090409155624D-01 0.8277890822643D-01 0.8469653369292D-01 0.8665792261951D-01 + 0.8866405014071D-01 0.9071591227111D-01 0.9281452632182D-01 0.9496093132410D-01 + 0.9715618846031D-01 0.9940138150208D-01 0.1016976172560D+00 0.1040460260169D+00 + 0.1064477620282D+00 0.1089040039508D+00 0.1114159553388D+00 0.1139848451236D+00 + 0.1166119281054D+00 0.1192984854532D+00 0.1220458252122D+00 0.1248552828197D+00 + 0.1277282216288D+00 0.1306660334408D+00 0.1336701390448D+00 0.1367419887670D+00 + 0.1398830630269D+00 0.1430948729031D+00 0.1463789607067D+00 0.1497369005636D+00 + 0.1531702990050D+00 0.1566807955666D+00 0.1602700633964D+00 0.1639398098711D+00 + 0.1676917772207D+00 0.1715277431623D+00 0.1754495215419D+00 0.1794589629856D+00 + 0.1835579555582D+00 0.1877484254317D+00 0.1920323375616D+00 0.1964116963718D+00 + 0.2008885464482D+00 0.2054649732406D+00 0.2101431037732D+00 0.2149251073635D+00 + 0.2198131963488D+00 0.2248096268222D+00 0.2299166993754D+00 0.2351367598503D+00 + 0.2404722000984D+00 0.2459254587480D+00 0.2514990219789D+00 0.2571954243047D+00 + 0.2630172493626D+00 0.2689671307106D+00 0.2750477526311D+00 0.2812618509418D+00 + 0.2876122138134D+00 0.2941016825931D+00 0.3007331526352D+00 0.3075095741362D+00 + 0.3144339529771D+00 0.3215093515700D+00 0.3287388897102D+00 0.3361257454325D+00 + 0.3436731558729D+00 0.3513844181328D+00 0.3592628901485D+00 0.3673119915621D+00 + 0.3755352045968D+00 0.3839360749336D+00 0.3925182125899D+00 0.4012852927993D+00 + 0.4102410568930D+00 0.4193893131804D+00 0.4287339378299D+00 0.4382788757486D+00 + 0.4480281414604D+00 0.4579858199819D+00 0.4681560676951D+00 0.4785431132164D+00 + 0.4891512582614D+00 0.4999848785043D+00 0.5110484244305D+00 0.5223464221834D+00 + 0.5338834744021D+00 0.5456642610510D+00 0.5576935402392D+00 0.5699761490289D+00 + 0.5825170042325D+00 0.5953211031952D+00 0.6083935245653D+00 0.6217394290472D+00 + 0.6353640601390D+00 0.6492727448516D+00 0.6634708944082D+00 0.6779640049238D+00 + 0.6927576580616D+00 0.7078575216668D+00 0.7232693503742D+00 0.7389989861895D+00 + 0.7550523590420D+00 0.7714354873073D+00 0.7881544782973D+00 0.8052155287175D+00 + 0.8226249250876D+00 0.8403890441249D+00 0.8585143530879D+00 0.8770074100784D+00 + 0.8958748642992D+00 0.9151234562658D+00 0.9347600179702D+00 0.9547914729931D+00 + 0.9752248365635D+00 0.9960672155622D+00 0.1017325808468D+01 0.1039007905241D+01 + 0.1061120887144D+01 0.1083672226499D+01 0.1106669486370D+01 0.1130120320176D+01 + 0.1154032471231D+01 0.1178413772204D+01 0.1203272144493D+01 0.1228615597523D+01 + 0.1254452227950D+01 0.1280790218774D+01 0.1307637838359D+01 0.1335003439353D+01 + 0.1362895457506D+01 0.1391322410385D+01 0.1420292895972D+01 0.1449815591159D+01 + 0.1479899250115D+01 0.1510552702537D+01 0.1541784851777D+01 0.1573604672833D+01 + 0.1606021210210D+01 0.1639043575644D+01 0.1672680945677D+01 0.1706942559091D+01 + 0.1741837714186D+01 0.1777375765901D+01 0.1813566122779D+01 0.1850418243757D+01 + 0.1887941634794D+01 0.1926145845317D+01 0.1965040464488D+01 0.2004635117287D+01 + 0.2044939460400D+01 0.2085963177919D+01 0.2127715976829D+01 0.2170207582300D+01 + 0.2213447732763D+01 0.2257446174769D+01 0.2302212657626D+01 0.2347756927812D+01 + 0.2394088723154D+01 0.2441217766767D+01 0.2489153760756D+01 0.2537906379665D+01 + 0.2587485263675D+01 0.2637900011547D+01 0.2689160173295D+01 0.2741275242598D+01 + 0.2794254648931D+01 0.2848107749430D+01 0.2902843820459D+01 0.2958472048904D+01 + 0.3015001523163D+01 0.3072441223848D+01 0.3130800014182D+01 0.3190086630094D+01 + 0.3250309670002D+01 0.3311477584285D+01 0.3373598664440D+01 0.3436681031917D+01 + 0.3500732626634D+01 0.3565761195166D+01 0.3631774278604D+01 0.3698779200090D+01 + 0.3766783052007D+01 0.3835792682854D+01 0.3905814683769D+01 0.3976855374728D+01 + 0.4048920790399D+01 0.4122016665671D+01 0.4196148420834D+01 0.4271321146438D+01 + 0.4347539587809D+01 0.4424808129241D+01 0.4503130777854D+01 0.4582511147131D+01 + 0.4662952440136D+01 0.4744457432406D+01 0.4827028454547D+01 0.4910667374509D+01 + 0.4995375579573D+01 0.5081153958042D+01 0.5168002880655D+01 0.5255922181721D+01 + 0.5344911139992D+01 0.5434968459290D+01 0.5526092248881D+01 0.5618280003639D+01 + 0.5711528583982D+01 0.5805834195616D+01 0.5901192369103D+01 0.5997597939257D+01 + 0.6095045024395D+01 0.6193527005472D+01 0.6293036505099D+01 0.6393565366487D+01 + 0.6495104632331D+01 0.6597644523660D+01 0.6701174418681D+01 0.6805682831645D+01 + 0.6911157391760D+01 0.7017584822191D+01 0.7124950919171D+01 0.7233240531258D+01 + 0.7342437538781D+01 0.7452524833500D+01 0.7563484298530D+01 0.7675296788562D+01 + 0.7787942110430D+01 0.7901399004058D+01 0.8015645123842D+01 0.8130657020509D+01 + 0.8246410123503D+01 0.8362878723950D+01 0.8480035958250D+01 0.8597853792358D+01 + 0.8716303006799D+01 0.8835353182487D+01 0.8954972687391D+01 0.9075128664130D+01 + 0.9195787018538D+01 0.9316912409273D+01 0.9438468238543D+01 0.9560416644000D+01 + 0.9682718491880D+01 0.9805333371460D+01 0.9928219590896D+01 0.1005133417453D+02 + 0.1017463286171D+02 0.1029807010722D+02 0.1042159908344D+02 0.1054517168417D+02 + 0.1066873853037D+02 0.1079224897780D+02 0.1091565112659D+02 0.1103889183301D+02 + 0.1116191672323D+02 0.1128467020944D+02 0.1140709550823D+02 0.1152913466133D+02 + 0.1165072855885D+02 0.1177181696506D+02 0.1189233854680D+02 0.1201223090454D+02 + 0.1213143060625D+02 0.1224987322407D+02 0.1236749337400D+02 0.1248422475837D+02 + 0.1260000021157D+02 0.1271475174875D+02 0.1282841061773D+02 0.1294090735413D+02 + 0.1305217183979D+02 0.1316213336451D+02 0.1327072069111D+02 0.1337786212400D+02 + 0.1348348558110D+02 0.1358751866928D+02 0.1368988876325D+02 0.1379052308804D+02 + 0.1388934880491D+02 0.1398629310084D+02 0.1408128328150D+02 0.1417424686776D+02 + 0.1426511169568D+02 0.1435380601989D+02 0.1444025862047D+02 0.1452439891313D+02 + 0.1460615706273D+02 0.1468546410000D+02 0.1476225204147D+02 0.1483645401237D+02 + 0.1490800437259D+02 0.1497683884540D+02 0.1504289464893D+02 0.1510611063019D+02 + 0.1516642740155D+02 0.1522378747941D+02 0.1527813542502D+02 0.1532941798703D+02 + 0.1537758424592D+02 0.1542258575964D+02 0.1546437671057D+02 0.1550291405346D+02 + 0.1553815766392D+02 0.1557007048740D+02 0.1559861868825D+02 0.1562377179849D+02 + 0.1564550286611D+02 0.1566378860245D+02 0.1567860952827D+02 0.1568995011828D+02 + 0.1569779894358D+02 0.1570214881171D+02 0.1570299690387D+02 0.1570034490889D+02 + 0.1569419915342D+02 0.1568457072811D+02 0.1567147560898D+02 0.1565493477391D+02 + 0.1563497431333D+02 0.1561162553504D+02 0.1558492506233D+02 0.1555491492507D+02 + 0.1552164264320D+02 0.1548516130217D+02 0.1544552961962D+02 0.1540281200312D+02 + 0.1535707859803D+02 0.1530840532536D+02 0.1525687390884D+02 0.1520257189079D+02 + 0.1514559263632D+02 0.1508603532531D+02 0.1502400493172D+02 0.1495961218971D+02 + 0.1489297354623D+02 0.1482421109950D+02 0.1475345252306D+02 0.1468083097499D+02 + 0.1460648499184D+02 0.1453055836709D+02 0.1445320001360D+02 0.1437456381003D+02 + 0.1429480843075D+02 0.1421409715909D+02 0.1413259768392D+02 0.1405048187912D+02 + 0.1396792556614D+02 0.1388510825940D+02 0.1380221289467D+02 0.1371942554036D+02 + 0.1363693509198D+02 0.1355493294972D+02 0.1347361267958D+02 0.1339316965818D+02 + 0.1331380070165D+02 0.1323570367897D+02 0.1315907711016D+02 0.1308411975004D+02 + 0.1301103015787D+02 0.1294000625373D+02 0.1287124486230D+02 0.1280494124477D+02 + 0.1274128861984D+02 0.1268047767460D+02 0.1262269606643D+02 0.1256812791682D+02 + 0.1251695329838D+02 0.1246934771604D+02 0.1242548158392D+02 0.1238551969900D+02 + 0.1234962071295D+02 0.1231793660373D+02 0.1229061214824D+02 0.1226778439767D+02 + 0.1224958215706D+02 0.1223612547078D+02 0.1222752511553D+02 0.1222388210258D+02 + 0.1222528719100D+02 0.1223182041366D+02 0.1224355061775D+02 0.1226053502171D+02 + 0.1228281879023D+02 0.1231043462935D+02 0.1234340240339D+02 0.1238172877543D+02 + 0.1242540687338D+02 0.1247441598324D+02 0.1252872127141D+02 0.1258827353770D+02 + 0.1265300900087D+02 0.1272284911822D+02 0.1279770044081D+02 0.1287745450601D+02 + 0.1296198776857D+02 0.1305116157186D+02 0.1314482216032D+02 0.1324280073454D+02 + 0.1334491354991D+02 0.1345096205988D+02 0.1356073310471D+02 0.1367399914649D+02 + 0.1379051855093D+02 0.1391003591655D+02 0.1403228245150D+02 0.1415697639825D+02 + 0.1428382350615D+02 0.1441251755180D+02 0.1454274090682D+02 0.1467416515265D+02 + 0.1480645174180D+02 0.1493925270450D+02 0.1507221140012D+02 0.1520496331175D+02 + 0.1533713688305D+02 0.1546835439544D+02 0.1559823288411D+02 0.1572638509088D+02 + 0.1585242045188D+02 0.1597594611769D+02 0.1609656800349D+02 0.1621389186673D+02 + 0.1632752440935D+02 0.1643707440175D+02 0.1654215382521D+02 0.1664237902974D+02 + 0.1673737190368D+02 0.1682676105166D+02 0.1691018297723D+02 0.1698728326633D+02 + 0.1705771776761D+02 0.1712115376582D+02 0.1717727114395D+02 0.1722576353007D+02 + 0.1726633942470D+02 0.1729872330429D+02 0.1732265669667D+02 0.1733789922408D+02 + 0.1734422960952D+02 0.1734144664198D+02 0.1732937009656D+02 0.1730784160492D+02 + 0.1727672547225D+02 0.1723590943644D+02 0.1718530536559D+02 0.1712484989008D+02 + 0.1705450496536D+02 0.1697425836203D+02 0.1688412407975D+02 0.1678414268193D+02 + 0.1667438154808D+02 0.1655493504124D+02 0.1642592458792D+02 0.1628749866833D+02 + 0.1613983271513D+02 0.1598312891883D+02 0.1581761593876D+02 0.1564354851859D+02 + 0.1546120700566D+02 0.1527089677411D+02 0.1507294755170D+02 0.1486771265109D+02 + 0.1465556810624D+02 0.1443691171558D+02 0.1421216199343D+02 0.1398175703206D+02 + 0.1374615327696D+02 0.1350582421831D+02 0.1326125900230D+02 0.1301296096613D+02 + 0.1276144610103D+02 0.1250724144826D+02 0.1225088343315D+02 0.1199291614280D+02 + 0.1173388955369D+02 0.1147435771520D+02 0.1121487689618D+02 0.1095600370143D+02 + 0.1069829316549D+02 0.1044229683153D+02 0.1018856082317D+02 0.9937623917321D+01 + 0.9690015626445D+01 0.9446254298643D+01 0.9206845244038D+01 0.8972278896087D+01 + 0.8743029016360D+01 0.8519550951297D+01 0.8302279949355D+01 0.8091629546790D+01 + 0.7887990030116D+01 0.7691726983014D+01 0.7503179925129D+01 0.7322661049902D+01 + 0.7150454068046D+01 0.6986813162918D+01 0.6831962063451D+01 0.6686093239819D+01 + 0.6549367226364D+01 0.6421912075717D+01 0.6303822947394D+01 0.6195161833447D+01 + 0.6095957423078D+01 0.6006205107394D+01 0.5925867124779D+01 0.5854872846611D+01 + 0.5793119202371D+01 0.5740471242429D+01 0.5696762836121D+01 0.5661797502031D+01 + 0.5635349366701D+01 0.5617164247353D+01 0.5606960853570D+01 0.5604432102259D+01 + 0.5609246539649D+01 0.5621049863505D+01 0.5639466538232D+01 0.5664101495024D+01 + 0.5694541908766D+01 0.5730359042993D+01 0.5771110153784D+01 0.5816340443192D+01 + 0.5865585052475D+01 0.5918371085180D+01 0.5974219649957D+01 0.6032647912832D+01 + 0.6093171148637D+01 0.6155304781260D+01 0.6218566402475D+01 0.6282477759234D+01 + 0.6346566699475D+01 0.6410369066815D+01 0.6473430534781D+01 0.6535308371644D+01 + 0.6595573127395D+01 0.6653810234872D+01 0.6709621517670D+01 0.6762626598041D+01 + 0.6812464198680D+01 0.6858793332986D+01 0.6901294379138D+01 0.6939670034070D+01 + 0.6973646144233D+01 0.7002972410830D+01 0.7027422967990D+01 0.7046796833200D+01 + 0.7060918230061D+01 0.7069636784259D+01 0.7072827594374D+01 0.7070391179926D+01 + 0.7062253309715D+01 0.7048364714231D+01 0.7028700686483D+01 0.7003260576238D+01 + 0.6972067183121D+01 0.6935166054562D+01 0.6892624694966D+01 0.6844531692843D+01 + 0.6790995772965D+01 0.6732144780827D+01 0.6668124606899D+01 0.6599098058289D+01 + 0.6525243685473D+01 0.6446754571799D+01 0.6363837093418D+01 0.6276709657188D+01 + 0.6185601423998D+01 0.6090751024726D+01 0.5992405275866D+01 0.5890817901556D+01 + 0.5786248268476D+01 0.5678960139726D+01 0.5569220453475D+01 0.5457298131760D+01 + 0.5343462924443D+01 0.5227984292928D+01 0.5111130337809D+01 0.4993166774192D+01 + 0.4874355958030D+01 0.4754955966341D+01 0.4635219733799D+01 0.4515394247714D+01 + 0.4395719803061D+01 0.4276429318764D+01 0.4157747716089D+01 0.4039891359594D+01 + 0.3923067560758D+01 0.3807474144035D+01 0.3693299074769D+01 0.3580720148118D+01 + 0.3469904737816D+01 0.3361009603367D+01 0.3254180754011D+01 0.3149553367571D+01 + 0.3047251762116D+01 0.2947389418162D+01 0.2850069049006D+01 0.2755382716614D+01 + 0.2663411990420D+01 0.2574228146230D+01 0.2487892402405D+01 0.2404456190400D+01 + 0.2323961456713D+01 0.2246440993268D+01 0.2171918793250D+01 0.2100410429420D+01 + 0.2031923451965D+01 0.1966457802972D+01 0.1904006244666D+01 0.1844554798640D+01 + 0.1788083193345D+01 0.1734565317240D+01 0.1683969675070D+01 0.1636259844862D+01 + 0.1591394933364D+01 0.1549330027746D+01 0.1510016641546D+01 0.1473403152964D+01 + 0.1439435233770D+01 0.1408056267219D+01 0.1379207753531D+01 0.1352829701650D+01 + 0.1328861006133D+01 0.1307239808175D+01 0.1287903839946D+01 0.1270790751526D+01 + 0.1255838419882D+01 0.1242985239474D+01 0.1232170394175D+01 0.1223334110328D+01 + 0.1216417890857D+01 0.1211364730456D+01 0.1208119311934D+01 0.1206628183910D+01 + 0.1206839920052D+01 0.1208705260142D+01 0.1212177233248D+01 0.1217211263310D+01 + 0.1223765257423D+01 0.1231799677111D+01 0.1241277592815D+01 0.1252164721788D+01 + 0.1264429449524D+01 0.1278042834732D+01 0.1292978597814D+01 0.1309213092627D+01 + 0.1326725261233D+01 0.1345496571135D+01 0.1365510934358D+01 0.1386754607532D+01 + 0.1409215426363D+01 0.1433003097507D+01 0.1458223277591D+01 0.1484860699421D+01 + 0.1512902583279D+01 0.1542338542721D+01 0.1573160498496D+01 0.1605362600812D+01 + 0.1638941160170D+01 0.1673894586973D+01 0.1710223340083D+01 0.1747929884514D+01 + 7 1012 + 1 0 -1 -511.89150 + 2 0 -1 -58.80097 + 2 1 1 -50.61290 + 2 1 -2 -49.69692 + 3 0 -1 -5.52718 + 3 1 1 -3.14309 + 3 1 -2 -3.03034 + 0.2123373461549D-04 0.2173914995400D-04 0.2225659296114D-04 0.2278634977738D-04 + 0.2332871334728D-04 0.2388398358121D-04 0.2445246752083D-04 0.2503447950857D-04 + 0.2563034136106D-04 0.2624038254674D-04 0.2686494036763D-04 0.2750436014548D-04 + 0.2815899541226D-04 0.2882920810522D-04 0.2951536876657D-04 0.3021785674791D-04 + 0.3093706041946D-04 0.3167337738432D-04 0.3242721469777D-04 0.3319898909177D-04 + 0.3398912720483D-04 0.3479806581728D-04 0.3562625209215D-04 0.3647414382175D-04 + 0.3734220968012D-04 0.3823092948144D-04 0.3914079444457D-04 0.4007230746391D-04 + 0.4102598338660D-04 0.4200234929636D-04 0.4300194480406D-04 0.4402532234512D-04 + 0.4507304748402D-04 0.4614569922601D-04 0.4724387033618D-04 0.4836816766617D-04 + 0.4951921248852D-04 0.5069764083903D-04 0.5190410386721D-04 0.5313926819498D-04 + 0.5440381628400D-04 0.5569844681152D-04 0.5702387505533D-04 0.5838083328767D-04 + 0.5977007117859D-04 0.6119235620880D-04 0.6264847409228D-04 0.6413922920902D-04 + 0.6566544504782D-04 0.6722796465978D-04 0.6882765112238D-04 0.7046538801462D-04 + 0.7214207990339D-04 0.7385865284136D-04 0.7561605487667D-04 0.7741525657465D-04 + 0.7925725155197D-04 0.8114305702331D-04 0.8307371436110D-04 0.8505028966841D-04 + 0.8707387436545D-04 0.8914558578994D-04 0.9126656781168D-04 0.9343799146165D-04 + 0.9566105557602D-04 0.9793698745538D-04 0.1002670435396D-03 0.1026525100984D-03 + 0.1050947039390D-03 0.1075949731294D-03 0.1101546977394D-03 0.1127752905997D-03 + 0.1154581980775D-03 0.1182049008719D-03 0.1210169148270D-03 0.1238957917652D-03 + 0.1268431203390D-03 0.1298605269045D-03 0.1329496764137D-03 0.1361122733297D-03 + 0.1393500625619D-03 0.1426648304247D-03 0.1460584056178D-03 0.1495326602303D-03 + 0.1530895107681D-03 0.1567309192056D-03 0.1604588940629D-03 0.1642754915072D-03 + 0.1681828164816D-03 0.1721830238593D-03 0.1762783196258D-03 0.1804709620887D-03 + 0.1847632631165D-03 0.1891575894056D-03 0.1936563637785D-03 0.1982620665115D-03 + 0.2029772366947D-03 0.2078044736231D-03 0.2127464382210D-03 0.2178058545005D-03 + 0.2229855110531D-03 0.2282882625778D-03 0.2337170314442D-03 0.2392748092933D-03 + 0.2449646586752D-03 0.2507897147258D-03 0.2567531868833D-03 0.2628583606444D-03 + 0.2691085993625D-03 0.2755073460880D-03 0.2820581254518D-03 0.2887645455935D-03 + 0.2956303001344D-03 0.3026591701977D-03 0.3098550264756D-03 0.3172218313454D-03 + 0.3247636410353D-03 0.3324846078408D-03 0.3403889823939D-03 0.3484811159850D-03 + 0.3567654629401D-03 0.3652465830528D-03 0.3739291440747D-03 0.3828179242637D-03 + 0.3919178149916D-03 0.4012338234146D-03 0.4107710752045D-03 0.4205348173457D-03 + 0.4305304209971D-03 0.4407633844209D-03 0.4512393359813D-03 0.4619640372121D-03 + 0.4729433859575D-03 0.4841834195856D-03 0.4956903182785D-03 0.5074704083979D-03 + 0.5195301659314D-03 0.5318762200182D-03 0.5445153565579D-03 0.5574545219044D-03 + 0.5707008266453D-03 0.5842615494708D-03 0.5981441411326D-03 0.6123562284955D-03 + 0.6269056186847D-03 0.6418003033287D-03 0.6570484629028D-03 0.6726584711734D-03 + 0.6886388997468D-03 0.7049985227240D-03 0.7217463214642D-03 0.7388914894603D-03 + 0.7564434373277D-03 0.7744117979097D-03 0.7928064315026D-03 0.8116374312024D-03 + 0.8309151283763D-03 0.8506500982622D-03 0.8708531656989D-03 0.8915354109894D-03 + 0.9127081759015D-03 0.9343830698083D-03 0.9565719759715D-03 0.9792870579714D-03 + 0.1002540766287D-02 0.1026345845027D-02 0.1050715338824D-02 0.1075662599879D-02 + 0.1101201295181D-02 0.1127345413883D-02 0.1154109274864D-02 0.1181507534450D-02 + 0.1209555194328D-02 0.1238267609637D-02 0.1267660497252D-02 0.1297749944251D-02 + 0.1328552416593D-02 0.1360084767981D-02 0.1392364248945D-02 0.1425408516127D-02 + 0.1459235641785D-02 0.1493864123514D-02 0.1529312894196D-02 0.1565601332181D-02 + 0.1602749271697D-02 0.1640777013510D-02 0.1679705335822D-02 0.1719555505429D-02 + 0.1760349289133D-02 0.1802108965417D-02 0.1844857336390D-02 0.1888617740010D-02 + 0.1933414062589D-02 0.1979270751585D-02 0.2026212828687D-02 0.2074265903209D-02 + 0.2123456185786D-02 0.2173810502385D-02 0.2225356308647D-02 0.2278121704551D-02 + 0.2332135449417D-02 0.2387426977257D-02 0.2444026412476D-02 0.2501964585936D-02 + 0.2561273051389D-02 0.2621984102285D-02 0.2684130788965D-02 0.2747746936258D-02 + 0.2812867161465D-02 0.2879526892772D-02 0.2947762388071D-02 0.3017610754222D-02 + 0.3089109966753D-02 0.3162298890003D-02 0.3237217297741D-02 0.3313905894238D-02 + 0.3392406335837D-02 0.3472761253004D-02 0.3555014272883D-02 0.3639210042377D-02 + 0.3725394251736D-02 0.3813613658698D-02 0.3903916113173D-02 0.3996350582488D-02 + 0.4090967177209D-02 0.4187817177547D-02 0.4286953060364D-02 0.4388428526794D-02 + 0.4492298530489D-02 0.4598619306504D-02 0.4707448400838D-02 0.4818844700646D-02 + 0.4932868465127D-02 0.5049581357120D-02 0.5169046475404D-02 0.5291328387739D-02 + 0.5416493164639D-02 0.5544608413917D-02 0.5675743316002D-02 0.5809968660057D-02 + 0.5947356880904D-02 0.6087982096781D-02 0.6231920147946D-02 0.6379248636155D-02 + 0.6530046965011D-02 0.6684396381234D-02 0.6842380016839D-02 0.7004082932273D-02 + 0.7169592160503D-02 0.7338996752102D-02 0.7512387821327D-02 0.7689858593235D-02 + 0.7871504451850D-02 0.8057422989391D-02 0.8247714056607D-02 0.8442479814225D-02 + 0.8641824785540D-02 0.8845855910175D-02 0.9054682599025D-02 0.9268416790430D-02 + 0.9487173007575D-02 0.9711068417172D-02 0.9940222889430D-02 0.1017475905935D-01 + 0.1041480238936D-01 0.1066048123337D-01 0.1091192690214D-01 0.1116927373022D-01 + 0.1143265914425D-01 0.1170222373276D-01 0.1197811131760D-01 0.1226046902681D-01 + 0.1254944736912D-01 0.1284520031015D-01 0.1314788535014D-01 0.1345766360348D-01 + 0.1377469987990D-01 0.1409916276750D-01 0.1443122471744D-01 0.1477106213063D-01 + 0.1511885544620D-01 0.1547478923187D-01 0.1583905227632D-01 0.1621183768351D-01 + 0.1659334296907D-01 0.1698377015868D-01 0.1738332588869D-01 0.1779222150874D-01 + 0.1821067318670D-01 0.1863890201578D-01 0.1907713412394D-01 0.1952560078568D-01 + 0.1998453853608D-01 0.2045418928739D-01 0.2093480044805D-01 0.2142662504416D-01 + 0.2192992184360D-01 0.2244495548276D-01 0.2297199659585D-01 0.2351132194704D-01 + 0.2406321456527D-01 0.2462796388197D-01 0.2520586587156D-01 0.2579722319499D-01 + 0.2640234534617D-01 0.2702154880148D-01 0.2765515717239D-01 0.2830350136121D-01 + 0.2896691972007D-01 0.2964575821319D-01 0.3034037058244D-01 0.3105111851634D-01 + 0.3177837182251D-01 0.3252250860359D-01 0.3328391543683D-01 0.3406298755727D-01 + 0.3486012904465D-01 0.3567575301409D-01 0.3651028181063D-01 0.3736414720771D-01 + 0.3823779060956D-01 0.3913166325773D-01 0.4004622644169D-01 0.4098195171364D-01 + 0.4193932110758D-01 0.4291882736274D-01 0.4392097415138D-01 0.4494627631115D-01 + 0.4599526008193D-01 0.4706846334735D-01 0.4816643588104D-01 0.4928973959763D-01 + 0.5043894880863D-01 0.5161465048329D-01 0.5281744451445D-01 0.5404794398948D-01 + 0.5530677546647D-01 0.5659457925562D-01 0.5791200970601D-01 0.5925973549779D-01 + 0.6063843993988D-01 0.6204882127328D-01 0.6349159298001D-01 0.6496748409788D-01 + 0.6647723954103D-01 0.6802162042643D-01 0.6960140440641D-01 0.7121738600725D-01 + 0.7287037697395D-01 0.7456120662128D-01 0.7629072219118D-01 0.7805978921657D-01 + 0.7986929189166D-01 0.8172013344892D-01 0.8361323654265D-01 0.8554954363940D-01 + 0.8753001741513D-01 0.8955564115940D-01 0.9162741918654D-01 0.9374637725383D-01 + 0.9591356298698D-01 0.9813004631275D-01 0.1003969198990D+00 0.1027152996019D+00 + 0.1050863249211D+00 0.1075111594618D+00 0.1099909914051D+00 0.1125270339855D+00 + 0.1151205259766D+00 0.1177727321842D+00 0.1204849439476D+00 0.1232584796489D+00 + 0.1260946852301D+00 0.1289949347182D+00 0.1319606307590D+00 0.1349932051583D+00 + 0.1380941194317D+00 0.1412648653632D+00 0.1445069655708D+00 0.1478219740820D+00 + 0.1512114769165D+00 0.1546770926778D+00 0.1582204731535D+00 0.1618433039236D+00 + 0.1655473049771D+00 0.1693342313383D+00 0.1732058737000D+00 0.1771640590662D+00 + 0.1812106514032D+00 0.1853475522988D+00 0.1895767016304D+00 0.1939000782413D+00 + 0.1983197006251D+00 0.2028376276193D+00 0.2074559591063D+00 0.2121768367234D+00 + 0.2170024445803D+00 0.2219350099852D+00 0.2269768041788D+00 0.2321301430764D+00 + 0.2373973880172D+00 0.2427809465221D+00 0.2482832730585D+00 0.2539068698131D+00 + 0.2596542874715D+00 0.2655281260047D+00 0.2715310354636D+00 0.2776657167793D+00 + 0.2839349225700D+00 0.2903414579550D+00 0.2968881813739D+00 0.3035780054119D+00 + 0.3104138976312D+00 0.3173988814070D+00 0.3245360367687D+00 0.3318285012460D+00 + 0.3392794707188D+00 0.3468922002717D+00 0.3546700050516D+00 0.3626162611285D+00 + 0.3707344063591D+00 0.3790279412529D+00 0.3875004298396D+00 0.3961555005386D+00 + 0.4049968470283D+00 0.4140282291162D+00 0.4232534736091D+00 0.4326764751811D+00 + 0.4423011972414D+00 0.4521316727988D+00 0.4621720053237D+00 0.4724263696067D+00 + 0.4828990126121D+00 0.4935942543268D+00 0.5045164886027D+00 0.5156701839924D+00 + 0.5270598845772D+00 0.5386902107861D+00 0.5505658602051D+00 0.5626916083760D+00 + 0.5750723095830D+00 0.5877128976270D+00 0.6006183865849D+00 0.6137938715547D+00 + 0.6272445293836D+00 0.6409756193782D+00 0.6549924839961D+00 0.6693005495166D+00 + 0.6839053266899D+00 0.6988124113627D+00 0.7140274850788D+00 0.7295563156538D+00 + 0.7454047577210D+00 0.7615787532478D+00 0.7780843320207D+00 0.7949276120969D+00 + 0.8121148002200D+00 0.8296521921997D+00 0.8475461732513D+00 0.8658032182945D+00 + 0.8844298922086D+00 0.9034328500427D+00 0.9228188371772D+00 0.9425946894360D+00 + 0.9627673331456D+00 0.9833437851400D+00 0.1004331152707D+01 0.1025736633476D+01 + 0.1047567515241D+01 0.1069831175720D+01 0.1092535082243D+01 0.1115686791375D+01 + 0.1139293948457D+01 0.1163364287075D+01 0.1187905628445D+01 0.1212925880722D+01 + 0.1238433038208D+01 0.1264435180485D+01 0.1290940471443D+01 0.1317957158220D+01 + 0.1345493570030D+01 0.1373558116898D+01 0.1402159288280D+01 0.1431305651569D+01 + 0.1461005850494D+01 0.1491268603389D+01 0.1522102701342D+01 0.1553517006218D+01 + 0.1585520448546D+01 0.1618122025271D+01 0.1651330797361D+01 0.1685155887276D+01 + 0.1719606476280D+01 0.1754691801602D+01 0.1790421153434D+01 0.1826803871767D+01 + 0.1863849343063D+01 0.1901566996742D+01 0.1939966301501D+01 0.1979056761446D+01 + 0.2018847912032D+01 0.2059349315815D+01 0.2100570557999D+01 0.2142521241790D+01 + 0.2185210983528D+01 0.2228649407614D+01 0.2272846141215D+01 0.2317810808747D+01 + 0.2363553026124D+01 0.2410082394775D+01 0.2457408495423D+01 0.2505540881617D+01 + 0.2554489073015D+01 0.2604262548407D+01 0.2654870738488D+01 0.2706323018355D+01 + 0.2758628699743D+01 0.2811797022979D+01 0.2865837148659D+01 0.2920758149043D+01 + 0.2976568999160D+01 0.3033278567615D+01 0.3090895607108D+01 0.3149428744640D+01 + 0.3208886471423D+01 0.3269277132479D+01 0.3330608915918D+01 0.3392889841912D+01 + 0.3456127751341D+01 0.3520330294118D+01 0.3585504917195D+01 0.3651658852234D+01 + 0.3718799102956D+01 0.3786932432154D+01 0.3856065348377D+01 0.3926204092282D+01 + 0.3997354622651D+01 0.4069522602076D+01 0.4142713382310D+01 0.4216931989288D+01 + 0.4292183107814D+01 0.4368471065927D+01 0.4445799818928D+01 0.4524172933100D+01 + 0.4603593569097D+01 0.4684064465021D+01 0.4765587919192D+01 0.4848165772611D+01 + 0.4931799391130D+01 0.5016489647323D+01 0.5102236902085D+01 0.5189040985952D+01 + 0.5276901180158D+01 0.5365816197444D+01 0.5455784162617D+01 0.5546802592894D+01 + 0.5638868378017D+01 0.5731977760181D+01 0.5826126313769D+01 0.5921308924927D+01 + 0.6017519770983D+01 0.6114752299744D+01 0.6212999208681D+01 0.6312252424025D+01 + 0.6412503079799D+01 0.6513741496818D+01 0.6615957161666D+01 0.6719138705689D+01 + 0.6823273884037D+01 0.6928349554769D+01 0.7034351658067D+01 0.7141265195588D+01 + 0.7249074209985D+01 0.7357761764637D+01 0.7467309923627D+01 0.7577699732003D+01 + 0.7688911196366D+01 0.7800923265826D+01 0.7913713813378D+01 0.8027259617727D+01 + 0.8141536345630D+01 0.8256518534789D+01 0.8372179577355D+01 0.8488491704090D+01 + 0.8605425969248D+01 0.8722952236222D+01 0.8841039164025D+01 0.8959654194655D+01 + 0.9078763541413D+01 0.9198332178230D+01 0.9318323830066D+01 0.9438700964464D+01 + 0.9559424784293D+01 0.9680455221780D+01 0.9801750933887D+01 0.9923269299099D+01 + 0.1004496641570D+02 0.1016679710163D+02 0.1028871489593D+02 0.1041067206198D+02 + 0.1053261959239D+02 0.1065450721594D+02 0.1077628340626D+02 0.1089789539267D+02 + 0.1101928917306D+02 0.1114040952889D+02 0.1126120004259D+02 0.1138160311709D+02 + 0.1150155999788D+02 0.1162101079752D+02 0.1173989452270D+02 0.1185814910389D+02 + 0.1197571142774D+02 0.1209251737221D+02 0.1220850184455D+02 0.1232359882222D+02 + 0.1243774139668D+02 0.1255086182033D+02 0.1266289155645D+02 0.1277376133233D+02 + 0.1288340119558D+02 0.1299174057364D+02 0.1309870833671D+02 0.1320423286383D+02 + 0.1330824211245D+02 0.1341066369131D+02 0.1351142493681D+02 0.1361045299271D+02 + 0.1370767489335D+02 0.1380301765027D+02 0.1389640834224D+02 0.1398777420882D+02 + 0.1407704274716D+02 0.1416414181234D+02 0.1424899972093D+02 0.1433154535791D+02 + 0.1441170828680D+02 0.1448941886294D+02 0.1456460834990D+02 0.1463720903887D+02 + 0.1470715437095D+02 0.1477437906225D+02 0.1483881923166D+02 0.1490041253114D+02 + 0.1495909827839D+02 0.1501481759178D+02 0.1506751352732D+02 0.1511713121747D+02 + 0.1516361801165D+02 0.1520692361818D+02 0.1524700024742D+02 0.1528380275595D+02 + 0.1531728879140D+02 0.1534741893776D+02 0.1537415686084D+02 0.1539746945363D+02 + 0.1541732698111D+02 0.1543370322439D+02 0.1544657562364D+02 0.1545592541956D+02 + 0.1546173779302D+02 0.1546400200242D+02 0.1546271151843D+02 0.1545786415570D+02 + 0.1544946220111D+02 0.1543751253809D+02 0.1542202676661D+02 0.1540302131844D+02 + 0.1538051756708D+02 0.1535454193202D+02 0.1532512597682D+02 0.1529230650045D+02 + 0.1525612562157D+02 0.1521663085508D+02 0.1517387518057D+02 0.1512791710213D+02 + 0.1507882069905D+02 0.1502665566690D+02 0.1497149734847D+02 0.1491342675424D+02 + 0.1485253057170D+02 0.1478890116319D+02 0.1472263655178D+02 0.1465384039476D+02 + 0.1458262194423D+02 0.1450909599456D+02 0.1443338281613D+02 0.1435560807511D+02 + 0.1427590273888D+02 0.1419440296685D+02 0.1411124998625D+02 0.1402658995277D+02 + 0.1394057379573D+02 0.1385335704764D+02 0.1376509965795D+02 0.1367596579089D+02 + 0.1358612360737D+02 0.1349574503081D+02 0.1340500549696D+02 0.1331408368786D+02 + 0.1322316124986D+02 0.1313242249599D+02 0.1304205409292D+02 0.1295224473262D+02 + 0.1286318478926D+02 0.1277506596148D+02 0.1268808090072D+02 0.1260242282594D+02 + 0.1251828512526D+02 0.1243586094535D+02 0.1235534276899D+02 0.1227692198172D+02 + 0.1220078842830D+02 0.1212712995982D+02 0.1205613197253D+02 0.1198797693913D+02 + 0.1192284393379D+02 0.1186090815186D+02 0.1180234042546D+02 0.1174730673615D+02 + 0.1169596772603D+02 0.1164847820834D+02 0.1160498667924D+02 0.1156563483188D+02 + 0.1153055707436D+02 0.1149988005301D+02 0.1147372218250D+02 0.1145219318434D+02 + 0.1143539363525D+02 0.1142341452711D+02 0.1141633683999D+02 0.1141423112993D+02 + 0.1141715713298D+02 0.1142516338731D+02 0.1143828687474D+02 0.1145655268355D+02 + 0.1147997369390D+02 0.1150855028761D+02 0.1154227008374D+02 0.1158110770138D+02 + 0.1162502455129D+02 0.1167396865756D+02 0.1172787451079D+02 0.1178666295396D+02 + 0.1185024110228D+02 0.1191850229803D+02 0.1199132610159D+02 0.1206857831946D+02 + 0.1215011107019D+02 0.1223576288907D+02 0.1232535887199D+02 0.1241871085933D+02 + 0.1251561765997D+02 0.1261586531600D+02 0.1271922740805D+02 0.1282546540151D+02 + 0.1293432903330D+02 0.1304555673916D+02 0.1315887612096D+02 0.1327400445348D+02 + 0.1339064923005D+02 0.1350850874625D+02 0.1362727272054D+02 0.1374662295087D+02 + 0.1386623400591D+02 0.1398577394943D+02 0.1410490509638D+02 0.1422328479880D+02 + 0.1434056625987D+02 0.1445639937388D+02 0.1457043159027D+02 0.1468230879914D+02 + 0.1479167623614D+02 0.1489817940404D+02 0.1500146500841D+02 0.1510118190471D+02 + 0.1519698205391D+02 0.1528852148379D+02 0.1537546125281D+02 0.1545746841364D+02 + 0.1553421697307D+02 0.1560538884523D+02 0.1567067479483D+02 0.1572977536717D+02 + 0.1578240180176D+02 0.1582827692612D+02 0.1586713602663D+02 0.1589872769311D+02 + 0.1592281463392D+02 0.1593917445849D+02 0.1594760042409D+02 0.1594790214378D+02 + 0.1593990625272D+02 0.1592345702984D+02 0.1589841697221D+02 0.1586466731948D+02 + 0.1582210852585D+02 0.1577066067732D+02 0.1571026385193D+02 0.1564087842120D+02 + 0.1556248529064D+02 0.1547508607802D+02 0.1537870322780D+02 0.1527338006062D+02 + 0.1515918075676D+02 0.1503619027308D+02 0.1490451419267D+02 0.1476427850715D+02 + 0.1461562933169D+02 0.1445873255288D+02 0.1429377341010D+02 0.1412095601137D+02 + 0.1394050278444D+02 0.1375265386499D+02 0.1355766642312D+02 0.1335581393054D+02 + 0.1314738537038D+02 0.1293268439219D+02 0.1271202841511D+02 0.1248574768189D+02 + 0.1225418426740D+02 0.1201769104500D+02 0.1177663061449D+02 0.1153137419578D+02 + 0.1128230049248D+02 0.1102979452961D+02 0.1077424647032D+02 0.1051605041603D+02 + 0.1025560319513D+02 0.9993303145083D+01 0.9729548892983D+01 0.9464738139829D+01 + 0.9199266453606D+01 0.8933526076402D+01 0.8667904750745D+01 0.8402784570301D+01 + 0.8138540859996D+01 0.7875541090527D+01 0.7614143832090D+01 0.7354697751983D+01 + 0.7097540660550D+01 0.6842998609696D+01 0.6591385047920D+01 0.6343000035605D+01 + 0.6098129523858D+01 0.5857044699944D+01 0.5620001401934D+01 0.5387239604814D+01 + 0.5158982979846D+01 0.4935438528573D+01 0.4716796292366D+01 0.4503229137976D+01 + 0.4294892619056D+01 0.4091924913152D+01 0.3894446833193D+01 0.3702561912045D+01 + 0.3516356558237D+01 0.3335900280537D+01 0.3161245978670D+01 0.2992430297065D+01 + 0.2829474038194D+01 0.2672382631762D+01 0.2521146655720D+01 0.2375742404881D+01 + 0.2236132502695D+01 0.2102266551639D+01 0.1974081817541D+01 0.1851503943111D+01 + 0.1734447685940D+01 0.1622817676200D+01 0.1516509189368D+01 0.1415408929331D+01 + 0.1319395817360D+01 0.1228341782531D+01 0.1142112549373D+01 0.1060568418635D+01 + 0.9835650373019D+00 0.9109541541726D+00 0.8425843575459D+00 0.7783017917968D+00 + 0.7179508498817D+00 0.6613748390683D+00 0.6084166174653D+00 0.5589191992012D+00 + 0.5127263263911D+00 0.4696830063190D+00 0.4296360125529D+00 0.3924343490009D+00 + 0.3579296762027D+00 0.3259766994340D+00 0.2964335184742D+00 0.2691619391536D+00 + 0.2440277470488D+00 0.2209009439361D+00 0.1996559478365D+00 0.1801717576938D+00 + 0.1623320839184D+00 0.1460254461990D+00 0.1311452401368D+00 0.1175897743854D+00 + 0.1052622800912D+00 0.9407089451527D-01 0.8392862078550D-01 0.7475326577690D-01 + 0.6646735814128D-01 0.5899804851766D-01 0.5227699394346D-01 0.4624022845899D-01 + 0.4082802185442D-01 0.3598472845105D-01 0.3165862773800D-01 0.2780175860384D-01 + 0.2436974881146D-01 0.2132164126495D-01 0.1861971851162D-01 0.1622932681167D-01 + 0.1411870099424D-01 0.1225879120292D-01 0.1062309251766D-01 0.9187478324824D-02 + 0.7930038194170D-02 0.6830920911119D-02 0.5872183206948D-02 0.5037644628161D-02 + 0.4312748890659D-02 0.3684431974697D-02 0.3140997133459D-02 0.2671996911721D-02 + 0.2268122201696D-02 0.1921098300832D-02 0.1623587881022D-02 0.1369100730387D-02 + 0.1151910087150D-02 0.9669753500508D-03 0.8098709208516D-03 0.6767209113939D-03 + 0.5641394300578D-03 0.4691761498429D-03 0.3892668522563D-03 0.3221886372696D-03 + 0.2660194893607D-03 0.2191018926233D-03 0.1800101936858D-03 0.1475214192933D-03 + 0.1205892654847D-03 0.9832098695562D-04 0.7995692809159D-04 0.6485245095860D-04 + 0.5246202996510D-04 0.4232529769133D-04 0.3405484129524D-04 0.2732556374477D-04 + 0.2186543872353D-04 0.1744750226736D-04 0.1388293789508D-04 0.1101512510421D-04 + 0.8714533541124D-05 0.6874356872787D-05 0.5406791351919D-05 0.4239874261002D-05 + 0.3314806839624D-05 0.2583694952262D-05 0.2007648657315D-05 0.1555189018603D-05 + 0.1200916989437D-05 0.9244050332163D-06 0.7092773630705D-06 0.5424493283134D-06 + 0.4135005904089D-06 0.3141603589352D-06 0.2378861413798D-06 0.1795202409555D-06 + 0.1350106538765D-06 0.1011851095086D-06 0.7556879909866D-07 0.5623788451178D-07 + 0.4170219815814D-07 0.3081166707088D-07 0.2268194336078D-07 0.1663552297805D-07 + 0.1215530542863D-07 0.8848107127806D-08 0.6416106613217D-08 0.4634585104140D-08 + 0.3334643304910D-08 0.2389835688104D-08 0.1705876062949D-08 0.1212741020005D-08 + 0.8586376559590D-09 0.6054146003728D-09 0.4250856698627D-09 0.2972075512731D-09 + 0.2069101606973D-09 0.1434236365115D-09 0.9898160505409D-10 0.6800804519963D-10 + 0.4651712787494D-10 0.3167310042586D-10 0.2146695649341D-10 0.1448079937139D-10 + 0.9722622861678D-11 0.6496070631129D-11 0.4319651023999D-11 0.2858591661735D-11 + 0.1882503214946D-11 0.1233598363270D-11 0.8043412065319D-12 0.5218060130221D-12 + 0.3367856512696D-12 0.2162455335843D-12 0.1381220475631D-12 0.8775552000331D-13 diff --git a/Test/Fe16_non_collinear/i_lsms b/Test/Fe16_non_collinear/i_lsms new file mode 100644 index 000000000..b7517e2ed --- /dev/null +++ b/Test/Fe16_non_collinear/i_lsms @@ -0,0 +1,183 @@ +systemid="fe16" +system_title = "Iron test for LSMS 3" +pot_in_type=1 +-- write potential out. Use this only when xRepeat, yRepeat and zRepeat = 1 +pot_out_type=1 +num_atoms=16 +nspin=3 +mtasa=0 + +iprint=0 +default_iprint=-1 +print_node=0 +-- istop="buildKKRMatrix" +istop="main" + +nscf=10 + +xRepeat=1 +yRepeat=1 +zRepeat=1 +makeTypesUnique=1 + +-- energyContour = {npts=1,grid=0,ebot=-0.2,etop=0.0,eitop=0.825,eibot=0.1} +-- energyContour = {npts=11,grid=2,ebot=-0.3,etop=0.0,eitop=0.825,eibot=0.025,maxGroupSize=5} +energyContour = {npts=31,grid=2,ebot=-0.3,etop=0.0,eitop=0.825,eibot=0.0025} + +a = 5.42 + +bravais = {} +bravais[1]={2*a,0,0} +bravais[2]={0,2*a,0} +bravais[3]={0,0,2*a} + +-- site_default={lmax=3,rLIZ=12.5,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} +-- site_default={lmax=3,rLIZ=8.5,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} +-- site_default={lmax=3,rLIZ=5.0,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} +site_default={lmax=3,rLIZ=0.1,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} + +-- Possible choices of mixing parameters +-- quantity : charge, potential, moment_magnitude, moment_direction, noQuantity +-- algorithm : simple, broyden, noAlgorithm +-- mixing={} +--mixing = { {quantity = "charge", algorithm = "simple", mixing_parameter = 0.05} } +mixing = { {quantity = "potential", algorithm = "simple", mixing_parameter = 0.0} } +--mixing = { {quantity = "potential", algorithm = "broyden", mixing_parameter = 0.05}, {quantity = "moment_magnitude", algorithm = "noAlgorithm", mixing_parameter = 0.01} } + +numberOfMixQuantities = 0 + +for k,v in pairs(mixing) do + numberOfMixQuantities = numberOfMixQuantities + 1 +end + +--[[ +print("Site defaults:") +for k,v in pairs(site_default) do + print(k," : ",v) +end +--]] + +site = {} +for i =1,num_atoms do site[i]={} end + +site[1].pos={0,0,0} +site[1].evec={-6.01703106e-02, -9.24326840e-01, -3.76828112e-01} +site[2].pos={0.5*a,0.5*a,0.5*a} +site[2].evec={1.66284657e-01, 4.88703378e-01, 8.56456900e-01} +site[3].pos={0,0,a} +site[3].evec={-4.77606288e-01, 1.87134776e-01, -8.58412959e-01} +site[4].pos={0.5*a,0.5*a,1.5*a} +site[4].evec={-6.61426471e-02, -4.07311227e-01, 9.10891165e-01} +site[5].pos={0,a,0} +site[5].evec={-3.16866029e-01, -4.72927725e-01, -8.22152836e-01} +site[6].pos={0.5*a,1.5*a,0.5*a} +site[6].evec={2.16643726e-01, 2.92801872e-01, 9.31306909e-01} +site[7].pos={a,0,0} +site[7].evec={3.84922564e-01, -4.09901956e-02, -9.22038190e-01} +site[8].pos={1.5*a,0.5*a,0.5*a} +site[8].evec={-5.01021084e-01, -5.77521615e-01, 6.44551517e-01} +site[9].pos={0,a,a} +site[9].evec={-6.13193796e-01, -3.60320339e-01, -7.02967014e-01} +site[10].pos={0.5*a,1.5*a,1.5*a} +site[10].evec={-5.54362177e-01, 3.12761231e-01, 7.71273615e-01} +site[11].pos={a,0,a} +site[11].evec={9.64642097e-02, 4.78541681e-01, 8.72749973e-01} +site[12].pos={1.5*a,0.5*a,1.5*a} +site[12].evec={1.73865934e-01, 6.31932711e-01, 7.55269281e-01} +site[13].pos={a,a,0} +site[13].evec={5.25985753e-01, -2.10046679e-03, -8.50490785e-01} +site[14].pos={1.5*a,1.5*a,0.5*a} +site[14].evec={-5.41773940e-01, 3.73771172e-01, 7.52845342e-01} +site[15].pos={a,a,a} +site[15].evec={-1.21312093e-01, 6.57454321e-01, -7.43664704e-01} +site[16].pos={1.5*a,1.5*a,1.5*a} +site[16].evec={-8.59560013e-01, -3.22995667e-01, 3.96018160e-01} + +-- set site defaults +for i =1,num_atoms do + for k,v in pairs(site_default) do + if(site[i][k]==nil) then site[i][k]=v end + end +end + + +--[[ +function deepcopy(t) +if type(t) ~= 'table' then return t end +local mt = getmetatable(t) +local res = {} +for k,v in pairs(t) do +if type(v) == 'table' then +v = deepcopy(v) +end +res[k] = v +end +-- setmetatable(res,mt) +return res +end + + +-- repeat nx*ny*nz times +ntemp=num_atoms +-- ix==1 first: +ix=0 +-- iy==1 +iy=0 +for iz=1,nz-1 do + for ib=1,num_atoms do + ntemp=ntemp+1 + site[ntemp]={pos={0,0,0},evec={0,0,1}} + site[ntemp].pos[1]=site[ib].pos[1]+bravais[1][1]*ix+bravais[2][1]*iy+bravais[3][1]*iz + site[ntemp].pos[2]=site[ib].pos[2]+bravais[1][2]*ix+bravais[2][2]*iy+bravais[3][2]*iz + site[ntemp].pos[3]=site[ib].pos[3]+bravais[1][3]*ix+bravais[2][3]*iy+bravais[3][3]*iz + site[ntemp].evec[1]=site[ib].evec[1] + site[ntemp].evec[2]=site[ib].evec[2] + site[ntemp].evec[3]=site[ib].evec[3] + site[ntemp].type=ib + end +end +-- iy!=1 +for iy =1,ny-1 do + for iz=0,nz-1 do + for ib=1,num_atoms do + ntemp=ntemp+1 + site[ntemp]={pos={0,0,0},evec={0,0,1}} + site[ntemp].pos[1]=site[ib].pos[1]+bravais[1][1]*ix+bravais[2][1]*iy+bravais[3][1]*iz + site[ntemp].pos[2]=site[ib].pos[2]+bravais[1][2]*ix+bravais[2][2]*iy+bravais[3][2]*iz + site[ntemp].pos[3]=site[ib].pos[3]+bravais[1][3]*ix+bravais[2][3]*iy+bravais[3][3]*iz + site[ntemp].evec[1]=site[ib].evec[1] + site[ntemp].evec[2]=site[ib].evec[2] + site[ntemp].evec[3]=site[ib].evec[3] + site[ntemp].type=ib + end + end +end +-- ix != 1 +for ix=1,nx-1 do + for iy =0,ny-1 do + for iz=0,nz-1 do + for ib=1,num_atoms do + ntemp=ntemp+1 + site[ntemp]={pos={0,0,0},evec={0,0,1}} + site[ntemp].pos[1]=site[ib].pos[1]+bravais[1][1]*ix+bravais[2][1]*iy+bravais[3][1]*iz + site[ntemp].pos[2]=site[ib].pos[2]+bravais[1][2]*ix+bravais[2][2]*iy+bravais[3][2]*iz + site[ntemp].pos[3]=site[ib].pos[3]+bravais[1][3]*ix+bravais[2][3]*iy+bravais[3][3]*iz + site[ntemp].evec[1]=site[ib].evec[1] + site[ntemp].evec[2]=site[ib].evec[2] + site[ntemp].evec[3]=site[ib].evec[3] + site[ntemp].type=ib + end + end + end +end +num_atoms=ntemp +bravais[1][1]=bravais[1][1]*nx +bravais[1][2]=bravais[1][2]*nx +bravais[1][3]=bravais[1][3]*nx +bravais[2][1]=bravais[2][1]*ny +bravais[2][2]=bravais[2][2]*ny +bravais[2][3]=bravais[2][3]*ny +bravais[3][1]=bravais[3][1]*nz +bravais[3][2]=bravais[3][2]*nz +bravais[3][3]=bravais[3][3]*nz +--]] diff --git a/Test/Fe16_non_collinear/v_fe16.0 b/Test/Fe16_non_collinear/v_fe16.0 new file mode 100755 index 000000000..f3c4e967f --- /dev/null +++ b/Test/Fe16_non_collinear/v_fe16.0 @@ -0,0 +1,1542 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Fe. + 2 0.0000000000000D+00 + LSMS: xx z= 26. xvalws= 5.22926 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728400909D+02-0.5199725115555D+02-0.5199721790459D+02-0.5199718425142D+02 +-0.5199715019116D+02-0.5199711571889D+02-0.5199708082964D+02-0.5199704551834D+02 +-0.5199700977990D+02-0.5199697360915D+02-0.5199693700086D+02-0.5199689994973D+02 +-0.5199686245042D+02-0.5199682449748D+02-0.5199678608545D+02-0.5199674720876D+02 +-0.5199670786180D+02-0.5199666803887D+02-0.5199662773421D+02-0.5199658694201D+02 +-0.5199654565635D+02-0.5199650387127D+02-0.5199646158073D+02-0.5199641877860D+02 +-0.5199637545872D+02-0.5199633161480D+02-0.5199628724051D+02-0.5199624232942D+02 +-0.5199619687506D+02-0.5199615087084D+02-0.5199610431012D+02-0.5199605718616D+02 +-0.5199600949214D+02-0.5199596122116D+02-0.5199591236626D+02-0.5199586292036D+02 +-0.5199581287632D+02-0.5199576222688D+02-0.5199571096474D+02-0.5199565908248D+02 +-0.5199560657259D+02-0.5199555342748D+02-0.5199549963947D+02-0.5199544520078D+02 +-0.5199539010352D+02-0.5199533433975D+02-0.5199527790139D+02-0.5199522078028D+02 +-0.5199516296816D+02-0.5199510445666D+02-0.5199504523733D+02-0.5199498530160D+02 +-0.5199492464081D+02-0.5199486324617D+02-0.5199480110883D+02-0.5199473821977D+02 +-0.5199467456990D+02-0.5199461015004D+02-0.5199454495085D+02-0.5199447896290D+02 +-0.5199441217666D+02-0.5199434458246D+02-0.5199427617052D+02-0.5199420693096D+02 +-0.5199413685375D+02-0.5199406592876D+02-0.5199399414573D+02-0.5199392149428D+02 +-0.5199384796390D+02-0.5199377354396D+02-0.5199369822368D+02-0.5199362199218D+02 +-0.5199354483843D+02-0.5199346675127D+02-0.5199338771940D+02-0.5199330773139D+02 +-0.5199322677567D+02-0.5199314484053D+02-0.5199306191412D+02-0.5199297798443D+02 +-0.5199289303934D+02-0.5199280706654D+02-0.5199272005361D+02-0.5199263198797D+02 +-0.5199254285685D+02-0.5199245264737D+02-0.5199236134649D+02-0.5199226894099D+02 +-0.5199217541751D+02-0.5199208076251D+02-0.5199198496230D+02-0.5199188800302D+02 +-0.5199178987064D+02-0.5199169055096D+02-0.5199159002963D+02-0.5199148829207D+02 +-0.5199138532359D+02-0.5199128110928D+02-0.5199117563407D+02-0.5199106888269D+02 +-0.5199096083969D+02-0.5199085148944D+02-0.5199074081613D+02-0.5199062880373D+02 +-0.5199051543604D+02-0.5199040069664D+02-0.5199028456895D+02-0.5199016703615D+02 +-0.5199004808124D+02-0.5198992768700D+02-0.5198980583600D+02-0.5198968251063D+02 +-0.5198955769302D+02-0.5198943136512D+02-0.5198930350863D+02-0.5198917410506D+02 +-0.5198904313569D+02-0.5198891058155D+02-0.5198877642345D+02-0.5198864064200D+02 +-0.5198850321751D+02-0.5198836413012D+02-0.5198822335968D+02-0.5198808088582D+02 +-0.5198793668793D+02-0.5198779074512D+02-0.5198764303627D+02-0.5198749354000D+02 +-0.5198734223467D+02-0.5198718909837D+02-0.5198703410894D+02-0.5198687724393D+02 +-0.5198671848065D+02-0.5198655779610D+02-0.5198639516703D+02-0.5198623056988D+02 +-0.5198606398084D+02-0.5198589537577D+02-0.5198572473026D+02-0.5198555201962D+02 +-0.5198537721883D+02-0.5198520030257D+02-0.5198502124524D+02-0.5198484002091D+02 +-0.5198465660333D+02-0.5198447096595D+02-0.5198428308188D+02-0.5198409292391D+02 +-0.5198390046450D+02-0.5198370567579D+02-0.5198350852955D+02-0.5198330899725D+02 +-0.5198310704998D+02-0.5198290265850D+02-0.5198269579318D+02-0.5198248642408D+02 +-0.5198227452087D+02-0.5198206005285D+02-0.5198184298896D+02-0.5198162329776D+02 +-0.5198140094741D+02-0.5198117590571D+02-0.5198094814005D+02-0.5198071761744D+02 +-0.5198048430449D+02-0.5198024816738D+02-0.5198000917191D+02-0.5197976728344D+02 +-0.5197952246692D+02-0.5197927468690D+02-0.5197902390745D+02-0.5197877009224D+02 +-0.5197851320449D+02-0.5197825320698D+02-0.5197799006201D+02-0.5197772373146D+02 +-0.5197745417673D+02-0.5197718135875D+02-0.5197690523796D+02-0.5197662577437D+02 +-0.5197634292744D+02-0.5197605665620D+02-0.5197576691913D+02-0.5197547367423D+02 +-0.5197517687900D+02-0.5197487649041D+02-0.5197457246489D+02-0.5197426475838D+02 +-0.5197395332627D+02-0.5197363812338D+02-0.5197331910403D+02-0.5197299622195D+02 +-0.5197266943031D+02-0.5197233868173D+02-0.5197200392824D+02-0.5197166512128D+02 +-0.5197132221174D+02-0.5197097514984D+02-0.5197062388528D+02-0.5197026836709D+02 +-0.5196990854370D+02-0.5196954436291D+02-0.5196917577189D+02-0.5196880271716D+02 +-0.5196842514461D+02-0.5196804299945D+02-0.5196765622622D+02-0.5196726476881D+02 +-0.5196686857041D+02-0.5196646757354D+02-0.5196606171998D+02-0.5196565095085D+02 +-0.5196523520651D+02-0.5196481442664D+02-0.5196438855015D+02-0.5196395751522D+02 +-0.5196352125928D+02-0.5196307971901D+02-0.5196263283028D+02-0.5196218052823D+02 +-0.5196172274718D+02-0.5196125942066D+02-0.5196079048138D+02-0.5196031586126D+02 +-0.5195983549135D+02-0.5195934930191D+02-0.5195885722231D+02-0.5195835918107D+02 +-0.5195785510585D+02-0.5195734492343D+02-0.5195682855969D+02-0.5195630593961D+02 +-0.5195577698725D+02-0.5195524162577D+02-0.5195469977736D+02-0.5195415136330D+02 +-0.5195359630387D+02-0.5195303451841D+02-0.5195246592528D+02-0.5195189044181D+02 +-0.5195130798435D+02-0.5195071846824D+02-0.5195012180777D+02-0.5194951791619D+02 +-0.5194890670569D+02-0.5194828808741D+02-0.5194766197137D+02-0.5194702826653D+02 +-0.5194638688071D+02-0.5194573772064D+02-0.5194508069188D+02-0.5194441569885D+02 +-0.5194374264482D+02-0.5194306143187D+02-0.5194237196087D+02-0.5194167413149D+02 +-0.5194096784220D+02-0.5194025299021D+02-0.5193952947146D+02-0.5193879718066D+02 +-0.5193805601119D+02-0.5193730585519D+02-0.5193654660341D+02-0.5193577814533D+02 +-0.5193500036904D+02-0.5193421316129D+02-0.5193341640742D+02-0.5193260999141D+02 +-0.5193179379578D+02-0.5193096770164D+02-0.5193013158865D+02-0.5192928533501D+02 +-0.5192842881739D+02-0.5192756191098D+02-0.5192668448947D+02-0.5192579642497D+02 +-0.5192489758803D+02-0.5192398784765D+02-0.5192306707119D+02-0.5192213512442D+02 +-0.5192119187145D+02-0.5192023717474D+02-0.5191927089505D+02-0.5191829289146D+02 +-0.5191730302133D+02-0.5191630114025D+02-0.5191528710207D+02-0.5191426075883D+02 +-0.5191322196077D+02-0.5191217055632D+02-0.5191110639202D+02-0.5191002931255D+02 +-0.5190893916069D+02-0.5190783577729D+02-0.5190671900126D+02-0.5190558866954D+02 +-0.5190444461705D+02-0.5190328667673D+02-0.5190211467945D+02-0.5190092845399D+02 +-0.5189972782709D+02-0.5189851262330D+02-0.5189728266508D+02-0.5189603777267D+02 +-0.5189477776415D+02-0.5189350245533D+02-0.5189221165981D+02-0.5189090518885D+02 +-0.5188958285145D+02-0.5188824445423D+02-0.5188688980147D+02-0.5188551869503D+02 +-0.5188413093435D+02-0.5188272631641D+02-0.5188130463569D+02-0.5187986568418D+02 +-0.5187840925129D+02-0.5187693512386D+02-0.5187544308611D+02-0.5187393291962D+02 +-0.5187240440329D+02-0.5187085731330D+02-0.5186929142309D+02-0.5186770650332D+02 +-0.5186610232183D+02-0.5186447864362D+02-0.5186283523081D+02-0.5186117184259D+02 +-0.5185948823518D+02-0.5185778416183D+02-0.5185605937277D+02-0.5185431361514D+02 +-0.5185254663297D+02-0.5185075816718D+02-0.5184894795548D+02-0.5184711573237D+02 +-0.5184526122909D+02-0.5184338417356D+02-0.5184148429039D+02-0.5183956130079D+02 +-0.5183761492255D+02-0.5183564486998D+02-0.5183365085389D+02-0.5183163258155D+02 +-0.5182958975660D+02-0.5182752207907D+02-0.5182542924529D+02-0.5182331094785D+02 +-0.5182116687559D+02-0.5181899671350D+02-0.5181680014270D+02-0.5181457684041D+02 +-0.5181232647986D+02-0.5181004873028D+02-0.5180774325683D+02-0.5180540972054D+02 +-0.5180304777830D+02-0.5180065708277D+02-0.5179823728232D+02-0.5179578802103D+02 +-0.5179330893860D+02-0.5179079967027D+02-0.5178825984684D+02-0.5178568909453D+02 +-0.5178308703501D+02-0.5178045328526D+02-0.5177778745757D+02-0.5177508915948D+02 +-0.5177235799366D+02-0.5176959355795D+02-0.5176679544522D+02-0.5176396324334D+02 +-0.5176109653512D+02-0.5175819489823D+02-0.5175525790517D+02-0.5175228512318D+02 +-0.5174927611419D+02-0.5174623043474D+02-0.5174314763592D+02-0.5174002726332D+02 +-0.5173686885694D+02-0.5173367195115D+02-0.5173043607457D+02-0.5172716075006D+02 +-0.5172384549462D+02-0.5172048981932D+02-0.5171709322923D+02-0.5171365522335D+02 +-0.5171017529452D+02-0.5170665292940D+02-0.5170308760833D+02-0.5169947880525D+02 +-0.5169582598771D+02-0.5169212861671D+02-0.5168838614662D+02-0.5168459802518D+02 +-0.5168076369333D+02-0.5167688258518D+02-0.5167295412791D+02-0.5166897774168D+02 +-0.5166495283960D+02-0.5166087882755D+02-0.5165675510418D+02-0.5165258106080D+02 +-0.5164835608125D+02-0.5164407954186D+02-0.5163975081138D+02-0.5163536925080D+02 +-0.5163093421337D+02-0.5162644504442D+02-0.5162190108131D+02-0.5161730165335D+02 +-0.5161264608164D+02-0.5160793367906D+02-0.5160316375011D+02-0.5159833559084D+02 +-0.5159344848875D+02-0.5158850172268D+02-0.5158349456272D+02-0.5157842627009D+02 +-0.5157329609709D+02-0.5156810328692D+02-0.5156284707365D+02-0.5155752668206D+02 +-0.5155214132756D+02-0.5154669021608D+02-0.5154117254396D+02-0.5153558749786D+02 +-0.5152993425461D+02-0.5152421198113D+02-0.5151841983433D+02-0.5151255696093D+02 +-0.5150662249744D+02-0.5150061557002D+02-0.5149453529428D+02-0.5148838077528D+02 +-0.5148215110737D+02-0.5147584537403D+02-0.5146946264782D+02-0.5146300199022D+02 +-0.5145646245151D+02-0.5144984307067D+02-0.5144314287525D+02-0.5143636088122D+02 +-0.5142949609291D+02-0.5142254750281D+02-0.5141551409151D+02-0.5140839482753D+02 +-0.5140118866721D+02-0.5139389455459D+02-0.5138651142128D+02-0.5137903818632D+02 +-0.5137147375605D+02-0.5136381702401D+02-0.5135606687078D+02-0.5134822216388D+02 +-0.5134028175756D+02-0.5133224449278D+02-0.5132410919702D+02-0.5131587468413D+02 +-0.5130753975423D+02-0.5129910319357D+02-0.5129056377438D+02-0.5128192025477D+02 +-0.5127317137854D+02-0.5126431587514D+02-0.5125535245940D+02-0.5124627983153D+02 +-0.5123709667690D+02-0.5122780166596D+02-0.5121839345403D+02-0.5120887068125D+02 +-0.5119923197240D+02-0.5118947593678D+02-0.5117960116805D+02-0.5116960624416D+02 +-0.5115948972712D+02-0.5114925016296D+02-0.5113888608154D+02-0.5112839599644D+02 +-0.5111777840483D+02-0.5110703178733D+02-0.5109615460788D+02-0.5108514531363D+02 +-0.5107400233480D+02-0.5106272408452D+02-0.5105130895877D+02-0.5103975533619D+02 +-0.5102806157801D+02-0.5101622602790D+02-0.5100424701185D+02-0.5099212283803D+02 +-0.5097985179674D+02-0.5096743216021D+02-0.5095486218256D+02-0.5094214009961D+02 +-0.5092926412887D+02-0.5091623246932D+02-0.5090304330139D+02-0.5088969478681D+02 +-0.5087618506855D+02-0.5086251227064D+02-0.5084867449820D+02-0.5083466983722D+02 +-0.5082049635455D+02-0.5080615209778D+02-0.5079163509518D+02-0.5077694335558D+02 +-0.5076207486834D+02-0.5074702760324D+02-0.5073179951042D+02-0.5071638852033D+02 +-0.5070079254364D+02-0.5068500947122D+02-0.5066903717403D+02-0.5065287350315D+02 +-0.5063651628963D+02-0.5061996334457D+02-0.5060321245898D+02-0.5058626140382D+02 +-0.5056910792994D+02-0.5055174976809D+02-0.5053418462884D+02-0.5051641020267D+02 +-0.5049842415989D+02-0.5048022415067D+02-0.5046180780505D+02-0.5044317273295D+02 +-0.5042431652422D+02-0.5040523674861D+02-0.5038593095586D+02-0.5036639667573D+02 +-0.5034663141803D+02-0.5032663267268D+02-0.5030639790981D+02-0.5028592457977D+02 +-0.5026521011328D+02-0.5024425192145D+02-0.5022304739591D+02-0.5020159390892D+02 +-0.5017988881346D+02-0.5015792944334D+02-0.5013571311336D+02-0.5011323711944D+02 +-0.5009049873873D+02-0.5006749522980D+02-0.5004422383280D+02-0.5002068176959D+02 +-0.4999686624397D+02-0.4997277444186D+02-0.4994840353146D+02-0.4992375066350D+02 +-0.4989881297144D+02-0.4987358757171D+02-0.4984807156389D+02-0.4982226203106D+02 +-0.4979615603991D+02-0.4976975064117D+02-0.4974304286974D+02-0.4971602974502D+02 +-0.4968870827126D+02-0.4966107543776D+02-0.4963312821924D+02-0.4960486357616D+02 +-0.4957627845502D+02-0.4954736978871D+02-0.4951813449683D+02-0.4948856948612D+02 +-0.4945867165071D+02-0.4942843787257D+02-0.4939786502185D+02-0.4936694995729D+02 +-0.4933568952659D+02-0.4930408056681D+02-0.4927211990478D+02-0.4923980435752D+02 +-0.4920713073265D+02-0.4917409582880D+02-0.4914069643607D+02-0.4910692933642D+02 +-0.4907279130416D+02-0.4903827910633D+02-0.4900338950319D+02-0.4896811924867D+02 +-0.4893246509079D+02-0.4889642377211D+02-0.4885999203021D+02-0.4882316659813D+02 +-0.4878594420482D+02-0.4874832157556D+02-0.4871029543247D+02-0.4867186249491D+02 +-0.4863301947995D+02-0.4859376310277D+02-0.4855409007715D+02-0.4851399711583D+02 +-0.4847348093100D+02-0.4843253823466D+02-0.4839116573905D+02-0.4834936015704D+02 +-0.4830711820251D+02-0.4826443659074D+02-0.4822131203876D+02-0.4817774126566D+02 +-0.4813372099301D+02-0.4808924794511D+02-0.4804431884930D+02-0.4799893043625D+02 +-0.4795307944023D+02-0.4790676259938D+02-0.4785997665588D+02-0.4781271835619D+02 +-0.4776498445124D+02-0.4771677169657D+02-0.4766807685247D+02-0.4761889668409D+02 +-0.4756922796153D+02-0.4751906745988D+02-0.4746841195927D+02-0.4741725824487D+02 +-0.4736560310686D+02-0.4731344334036D+02-0.4726077574537D+02-0.4720759712663D+02 +-0.4715390429349D+02-0.4709969405976D+02-0.4704496324345D+02-0.4698970866656D+02 +-0.4693392715482D+02-0.4687761553742D+02-0.4682077064661D+02-0.4676338931742D+02 +-0.4670546838725D+02-0.4664700469545D+02-0.4658799508292D+02-0.4652843639162D+02 +-0.4646832546412D+02-0.4640765914308D+02-0.4634643427075D+02-0.4628464768840D+02 +-0.4622229623583D+02-0.4615937675077D+02-0.4609588606835D+02-0.4603182102046D+02 +-0.4596717843531D+02-0.4590195513672D+02-0.4583614794369D+02-0.4576975366979D+02 +-0.4570276912265D+02-0.4563519110351D+02-0.4556701640665D+02-0.4549824181908D+02 +-0.4542886412007D+02-0.4535888008084D+02-0.4528828646428D+02-0.4521708002473D+02 +-0.4514525750785D+02-0.4507281565054D+02-0.4499975118097D+02-0.4492606081870D+02 +-0.4485174127497D+02-0.4477678925295D+02-0.4470120144833D+02-0.4462497454985D+02 +-0.4454810524011D+02-0.4447059019649D+02-0.4439242609219D+02-0.4431360959758D+02 +-0.4423413738159D+02-0.4415400611337D+02-0.4407321246418D+02-0.4399175310947D+02 +-0.4390962473114D+02-0.4382682402010D+02-0.4374334767908D+02-0.4365919242563D+02 +-0.4357435499539D+02-0.4348883214570D+02-0.4340262065933D+02-0.4331571734857D+02 +-0.4322811905962D+02-0.4313982267710D+02-0.4305082512897D+02-0.4296112339160D+02 +-0.4287071449512D+02-0.4277959552900D+02-0.4268776364786D+02-0.4259521607738D+02 +-0.4250195012053D+02-0.4240796316384D+02-0.4231325268378D+02-0.4221781625326D+02 +-0.4212165154821D+02-0.4202475635403D+02-0.4192712857207D+02-0.4182876622603D+02 +-0.4172966746809D+02-0.4162983058491D+02-0.4152925400326D+02-0.4142793629535D+02 +-0.4132587618362D+02-0.4122307254514D+02-0.4111952441526D+02-0.4101523099069D+02 +-0.4091019163177D+02-0.4080440586392D+02-0.4069787337814D+02-0.4059059403052D+02 +-0.4048256784069D+02-0.4037379498919D+02-0.4026427581359D+02-0.4015401080347D+02 +-0.4004300059408D+02-0.3993124595881D+02-0.3981874780047D+02-0.3970550714118D+02 +-0.3959152511128D+02-0.3947680293704D+02-0.3936134192738D+02-0.3924514345974D+02 +-0.3912820896514D+02-0.3901053991273D+02-0.3889213779388D+02-0.3877300410616D+02 +-0.3865314033730D+02-0.3853254794941D+02-0.3841122836384D+02-0.3828918294671D+02 +-0.3816641299561D+02-0.3804291972752D+02-0.3791870426838D+02-0.3779376764439D+02 +-0.3766811077544D+02-0.3754173447071D+02-0.3741463942662D+02-0.3728682622747D+02 +-0.3715829534855D+02-0.3702904716206D+02-0.3689908194568D+02-0.3676839989389D+02 +-0.3663700113198D+02-0.3650488573242D+02-0.3637205373385D+02-0.3623850516215D+02 +-0.3610424005352D+02-0.3596925847947D+02-0.3583356057318D+02-0.3569714655716D+02 +-0.3556001677183D+02-0.3542217170480D+02-0.3528361202035D+02-0.3514433858906D+02 +-0.3500435251706D+02-0.3486365517474D+02-0.3472224822457D+02-0.3458013364781D+02 +-0.3443731376977D+02-0.3429379128348D+02-0.3414956927154D+02-0.3400465122587D+02 +-0.3385904106531D+02-0.3371274315081D+02-0.3356576229817D+02-0.3341810378823D+02 +-0.3326977337430D+02-0.3312077728689D+02-0.3297112223571D+02-0.3282081540879D+02 +-0.3266986446883D+02-0.3251827754673D+02-0.3236606323235D+02-0.3221323056253D+02 +-0.3205978900636D+02-0.3190574844798D+02-0.3175111916665D+02-0.3159591181450D+02 +-0.3144013739192D+02-0.3128380722060D+02-0.3112693291460D+02-0.3096952634939D+02 +-0.3081159962896D+02-0.3065316505139D+02-0.3049423507279D+02-0.3033482226994D+02 +-0.3017493930171D+02-0.3001459886954D+02-0.2985381367711D+02-0.2969259638940D+02 +-0.2953095959141D+02-0.2936891574677D+02-0.2920647715631D+02-0.2904365591713D+02 +-0.2888046388202D+02-0.2871691261992D+02-0.2855301337730D+02-0.2838877704096D+02 +-0.2822421410237D+02-0.2805933462405D+02-0.2789414820796D+02-0.2772866396645D+02 +-0.2756289049588D+02-0.2739683585338D+02-0.2723050753680D+02-0.2706391246838D+02 +-0.2689705698223D+02-0.2672994681603D+02-0.2656258710714D+02-0.2639498239345D+02 +-0.2622713661917D+02-0.2605905314574D+02-0.2589073476829D+02-0.2572218373759D+02 +-0.2555340178776D+02-0.2538439017000D+02-0.2521514969218D+02-0.2504568076457D+02 +-0.2487598345161D+02-0.2470605752972D+02-0.2453590255090D+02-0.2436551791213D+02 +-0.2419490293015D+02-0.2402405692122D+02-0.2385297928550D+02-0.2368166959536D+02 +-0.2351012768684D+02-0.2333835375355D+02-0.2316634844181D+02-0.2299411294593D+02 +-0.2282164910224D+02-0.2264895948042D+02-0.2247604747020D+02-0.2230291736187D+02 +-0.2212957441833D+02-0.2195602493665D+02-0.2178227629680D+02-0.2160833699531D+02 +-0.2143421666157D+02-0.2125992605447D+02-0.2108547703736D+02-0.2091088252957D+02 +-0.2073615643311D+02-0.2056131353347D+02-0.2038636937454D+02-0.2021134010787D+02 +-0.2003624231780D+02-0.1986109282464D+02-0.1968590846923D+02-0.1951070588338D+02 +-0.1933550125113D+02-0.1916031006739D+02-0.1898514690054D+02-0.1881002516654D+02 +-0.1863495692195D+02-0.1845995268332D+02-0.1828502127992D+02-0.1811016974578D+02 +-0.1793540325598D+02-0.1776072511080D+02-0.1758613676940D+02-0.1741163793327D+02 +-0.1723722667775D+02-0.1706289962834D+02-0.1688865217702D+02-0.1671447873257D+02 +-0.1654037299789D+02-0.1636632826691D+02-0.1619233773325D+02-0.1601839480315D+02 +-0.1584449340510D+02-0.1567062828984D+02-0.1549679531468D+02-0.1532299170720D+02 +-0.1514921630451D+02-0.1497546976480D+02-0.1480175474939D+02-0.1462807607400D+02 +-0.1445444082871D+02-0.1428085846710D+02-0.1410734086517D+02-0.1393390235146D+02 +-0.1376055970989D+02-0.1358733215727D+02-0.1341424129731D+02-0.1324131105355D+02 +-0.1306856758305D+02-0.1289603917318D+02-0.1272375612351D+02-0.1255175061484D+02 +-0.1238005656736D+02-0.1220870948967D+02-0.1203774632043D+02-0.1186720526422D+02 +-0.1169712562320D+02-0.1152754762583D+02-0.1135851225403D+02-0.1119006106993D+02 +-0.1102223604329D+02-0.1085507938069D+02-0.1068863335731D+02-0.1052294015218D+02 +-0.1035804168776D+02-0.1019397947446D+02-0.1003079446077D+02-0.9868526889628D+01 +-0.9707216161554D+01-0.9546900704939D+01-0.9387617854023D+01-0.9229403734858D+01 +-0.9072293159592D+01-0.8916319529363D+01-0.8761514745993D+01-0.8607909132693D+01 +-0.8455531363896D+01-0.8304408404305D+01-0.8154565457227D+01-0.8006025922166D+01 +-0.7858811361682D+01-0.7712941477416D+01-0.7568434095199D+01-0.7425305159081D+01 +-0.7283568734134D+01-0.7143237017788D+01-0.7004320359504D+01-0.6866827288485D+01 +-0.6730764549154D+01-0.6596137144079D+01-0.6462948384000D+01-0.6331199944618D+01 +-0.6200891929738D+01-0.6072022940407D+01-0.5944590149603D+01-0.5818589382077D+01 +-0.5694015198898D+01-0.5570860986265D+01-0.5449119048124D+01-0.5328780702141D+01 +-0.5209836378552D+01-0.5092275721431D+01-0.4976087691897D+01-0.4861260672787D+01 +-0.4747782574321D+01-0.4635640940271D+01-0.4524823054180D+01-0.4415316045125D+01 +-0.4307106992579D+01-0.4200183029885D+01-0.4094531445869D+01-0.3990139784139D+01 +-0.3886995939600D+01-0.3785088251726D+01-0.3684405594148D+01-0.3584937460106D+01 +-0.3486674043348D+01-0.3389606314047D+01-0.3293726089348D+01-0.3199026098161D+01 +-0.3105500039868D+01-0.3013142636618D+01-0.2921949678952D+01-0.2831918064533D+01 +-0.2743045829849D+01-0.2655332174788D+01-0.2568777480092D+01-0.2483383317815D+01 +-0.2399152454962D+01-0.2316088850658D+01-0.2234197647300D+01-0.2153485156272D+01 +-0.2073958838965D+01-0.1995627283965D+01-0.1918500181413D+01-0.1842588295670D+01 +-0.1767903437522D+01-0.1694458437274D+01-0.1622267120110D+01-0.1551344285168D+01 +-0.1481705689753D+01-0.1413368040087D+01-0.1346348989896D+01-0.1280667148051D+01 +-0.1216342096293D+01-0.1153394417906D+01-0.1091845737986D+01-0.1031718775725D+01 +-0.9730374088849D+00-0.9158267504133D+00-0.8601132368937D+00-0.8059247283301D+00 +-0.7532906185600D+00-0.7022419554295D+00-0.6528115697324D+00-0.6050342118170D+00 +-0.5589466947046D+00-0.5145880425354D+00-0.4719996431596D+00-0.4312254037239D+00 +-0.3923119081554D+00-0.3553085755132D+00-0.3202678182603D+00-0.2872451996103D+00 +-0.2562993012896D+00 + 0.0000000000000D+00 + 1012 0.5229258479779D+01 + 0.2150742905406D-04 0.2201934401975D-04 0.2254344131081D-04 0.2308001074793D-04 + 0.2362934904336D-04 0.2419175996469D-04 0.2476755450247D-04 0.2535705104185D-04 + 0.2596057553829D-04 0.2657846169737D-04 0.2721105115901D-04 0.2785869368592D-04 + 0.2852174735659D-04 0.2920057876285D-04 0.2989556321214D-04 0.3060708493450D-04 + 0.3133553729459D-04 0.3208132300862D-04 0.3284485436652D-04 0.3362655345933D-04 + 0.3442685241199D-04 0.3524619362168D-04 0.3608503000175D-04 0.3694382523153D-04 + 0.3782305401197D-04 0.3872320232740D-04 0.3964476771351D-04 0.4058825953159D-04 + 0.4155419924941D-04 0.4254312072866D-04 0.4355557051923D-04 0.4459210816046D-04 + 0.4565330648961D-04 0.4673975195749D-04 0.4785204495171D-04 0.4899080012754D-04 + 0.5015664674660D-04 0.5135022902361D-04 0.5257220648130D-04 0.5382325431382D-04 + 0.5510406375867D-04 0.5641534247751D-04 0.5775781494596D-04 0.5913222285265D-04 + 0.6053932550771D-04 0.6197990026094D-04 0.6345474292991D-04 0.6496466823815D-04 + 0.6651051026378D-04 0.6809312289875D-04 0.6971338031887D-04 0.7137217746513D-04 + 0.7307043053626D-04 0.7480907749308D-04 0.7658907857468D-04 0.7841141682692D-04 + 0.8027709864336D-04 0.8218715431905D-04 0.8414263861740D-04 0.8614463135050D-04 + 0.8819423797310D-04 0.9029259019072D-04 0.9244084658213D-04 0.9464019323656D-04 + 0.9689184440594D-04 0.9919704317265D-04 0.1015570621330D-03 0.1039732040969D-03 + 0.1064468028041D-03 0.1089792236573D-03 0.1115718644728D-03 0.1142261562483D-03 + 0.1169435639500D-03 0.1197255873171D-03 0.1225737616857D-03 0.1254896588328D-03 + 0.1284748878395D-03 0.1315310959746D-03 0.1346599695998D-03 0.1378632350954D-03 + 0.1411426598085D-03 0.1445000530233D-03 0.1479372669546D-03 0.1514561977641D-03 + 0.1550587866019D-03 0.1587470206711D-03 0.1625229343189D-03 0.1663886101524D-03 + 0.1703461801815D-03 0.1743978269887D-03 0.1785457849256D-03 0.1827923413391D-03 + 0.1871398378251D-03 0.1915906715131D-03 0.1961472963799D-03 0.2008122245952D-03 + 0.2055880278984D-03 0.2104773390081D-03 0.2154828530649D-03 0.2206073291079D-03 + 0.2258535915864D-03 0.2312245319072D-03 0.2367231100177D-03 0.2423523560273D-03 + 0.2481153718665D-03 0.2540153329849D-03 0.2600554900897D-03 0.2662391709247D-03 + 0.2725697820915D-03 0.2790508109132D-03 0.2856858273428D-03 0.2924784859153D-03 + 0.2994325277470D-03 0.3065517825810D-03 0.3138401708812D-03 0.3213017059753D-03 + 0.3289404962488D-03 0.3367607473897D-03 0.3447667646870D-03 0.3529629553823D-03 + 0.3613538310777D-03 0.3699440101989D-03 0.3787382205180D-03 0.3877413017338D-03 + 0.3969582081140D-03 0.4063940111991D-03 0.4160539025692D-03 0.4259431966769D-03 + 0.4360673337456D-03 0.4464318827368D-03 0.4570425443864D-03 0.4679051543124D-03 + 0.4790256861959D-03 0.4904102550358D-03 0.5020651204812D-03 0.5139966902408D-03 + 0.5262115235724D-03 0.5387163348549D-03 0.5515179972435D-03 0.5646235464104D-03 + 0.5780401843732D-03 0.5917752834137D-03 0.6058363900874D-03 0.6202312293275D-03 + 0.6349677086450D-03 0.6500539224267D-03 0.6654981563344D-03 0.6813088918062D-03 + 0.6974948106637D-03 0.7140647998269D-03 0.7310279561389D-03 0.7483935913040D-03 + 0.7661712369406D-03 0.7843706497523D-03 0.8030018168203D-03 0.8220749610184D-03 + 0.8416005465556D-03 0.8615892846469D-03 0.8820521393172D-03 0.9030003333406D-03 + 0.9244453543176D-03 0.9463989608946D-03 0.9688731891282D-03 0.9918803589975D-03 + 0.1015433081069D-02 0.1039544263315D-02 0.1064227118095D-02 0.1089495169290D-02 + 0.1115362259619D-02 0.1141842558105D-02 0.1168950567737D-02 0.1196701133289D-02 + 0.1225109449338D-02 0.1254191068456D-02 0.1283961909601D-02 0.1314438266696D-02 + 0.1345636817413D-02 0.1377574632157D-02 0.1410269183260D-02 0.1443738354387D-02 + 0.1478000450161D-02 0.1513074206015D-02 0.1548978798262D-02 0.1585733854409D-02 + 0.1623359463706D-02 0.1661876187936D-02 0.1701305072458D-02 0.1741667657505D-02 + 0.1782985989747D-02 0.1825282634108D-02 0.1868580685877D-02 0.1912903783076D-02 + 0.1958276119133D-02 0.2004722455835D-02 0.2052268136585D-02 0.2100939099962D-02 + 0.2150761893598D-02 0.2201763688371D-02 0.2253972292925D-02 0.2307416168524D-02 + 0.2362124444253D-02 0.2418126932561D-02 0.2475454145167D-02 0.2534137309329D-02 + 0.2594208384486D-02 0.2655700079287D-02 0.2718645869002D-02 0.2783080013344D-02 + 0.2849037574687D-02 0.2916554436715D-02 0.2985667323484D-02 0.3056413818931D-02 + 0.3128832386828D-02 0.3202962391187D-02 0.3278844117136D-02 0.3356518792272D-02 + 0.3436028608501D-02 0.3517416744371D-02 0.3600727387929D-02 0.3686005760082D-02 + 0.3773298138499D-02 0.3862651882061D-02 0.3954115455860D-02 0.4047738456768D-02 + 0.4143571639594D-02 0.4241666943825D-02 0.4342077520985D-02 0.4444857762604D-02 + 0.4550063328833D-02 0.4657751177697D-02 0.4767979595018D-02 0.4880808225009D-02 + 0.4996298101570D-02 0.5114511680279D-02 0.5235512871115D-02 0.5359367071918D-02 + 0.5486141202598D-02 0.5615903740128D-02 0.5748724754308D-02 0.5884675944352D-02 + 0.6023830676284D-02 0.6166264021183D-02 0.6312052794284D-02 0.6461275594959D-02 + 0.6614012847588D-02 0.6770346843357D-02 0.6930361782982D-02 0.7094143820394D-02 + 0.7261781107400D-02 0.7433363839342D-02 0.7608984301773D-02 0.7788736918176D-02 + 0.7972718298747D-02 0.8161027290261D-02 0.8353765027049D-02 0.8551034983111D-02 + 0.8752943025377D-02 0.8959597468160D-02 0.9171109128811D-02 0.9387591384603D-02 + 0.9609160230877D-02 0.9835934340477D-02 0.1006803512449D-01 0.1030558679431D-01 + 0.1054871642512D-01 0.1079755402073D-01 0.1105223257982D-01 0.1131288816368D-01 + 0.1157965996544D-01 0.1185269038080D-01 0.1213212508026D-01 0.1241811308303D-01 + 0.1271080683248D-01 0.1301036227325D-01 0.1331693893004D-01 0.1363069998813D-01 + 0.1395181237567D-01 0.1428044684765D-01 0.1461677807184D-01 0.1496098471648D-01 + 0.1531324953990D-01 0.1567375948211D-01 0.1604270575828D-01 0.1642028395434D-01 + 0.1680669412453D-01 0.1720214089116D-01 0.1760683354637D-01 0.1802098615621D-01 + 0.1844481766683D-01 0.1887855201303D-01 0.1932241822902D-01 0.1977665056168D-01 + 0.2024148858606D-01 0.2071717732349D-01 0.2120396736203D-01 0.2170211497964D-01 + 0.2221188226980D-01 0.2273353726988D-01 0.2326735409215D-01 0.2381361305754D-01 + 0.2437260083229D-01 0.2494461056731D-01 0.2552994204062D-01 0.2612890180262D-01 + 0.2674180332442D-01 0.2736896714935D-01 0.2801072104743D-01 0.2866740017320D-01 + 0.2933934722669D-01 0.3002691261781D-01 0.3073045463399D-01 0.3145033961141D-01 + 0.3218694210958D-01 0.3294064508962D-01 0.3371184009606D-01 0.3450092744243D-01 + 0.3530831640054D-01 0.3613442539362D-01 0.3697968219334D-01 0.3784452412086D-01 + 0.3872939825181D-01 0.3963476162544D-01 0.4056108145796D-01 0.4150883536008D-01 + 0.4247851155891D-01 0.4347060912422D-01 0.4448563819924D-01 0.4552412023590D-01 + 0.4658658823475D-01 0.4767358698962D-01 0.4878567333696D-01 0.4992341641008D-01 + 0.5108739789835D-01 0.5227821231135D-01 0.5349646724813D-01 0.5474278367169D-01 + 0.5601779618862D-01 0.5732215333417D-01 0.5865651786266D-01 0.6002156704340D-01 + 0.6141799296226D-01 0.6284650282880D-01 0.6430781928923D-01 0.6580268074515D-01 + 0.6733184167825D-01 0.6889607298100D-01 0.7049616229337D-01 0.7213291434581D-01 + 0.7380715130845D-01 0.7551971314661D-01 0.7727145798277D-01 0.7906326246509D-01 + 0.8089602214242D-01 0.8277065184608D-01 0.8468808607842D-01 0.8664927940812D-01 + 0.8865520687255D-01 0.9070686438707D-01 0.9280526916144D-01 0.9495146012343D-01 + 0.9714649834967D-01 0.9939146750384D-01 0.1016874742823D+00 0.1040356488672D+00 + 0.1064371453872D+00 0.1088931423856D+00 0.1114048432967D+00 0.1139734769295D+00 + 0.1166002979593D+00 0.1192865874273D+00 0.1220336532487D+00 0.1248428307276D+00 + 0.1277154830815D+00 0.1306530019730D+00 0.1336568080498D+00 0.1367283514936D+00 + 0.1398691125766D+00 0.1430806022269D+00 0.1463643626021D+00 0.1497219676713D+00 + 0.1531550238057D+00 0.1566651703780D+00 0.1602540803695D+00 0.1639234609870D+00 + 0.1676750542871D+00 0.1715106378098D+00 0.1754320252209D+00 0.1794410669619D+00 + 0.1835396509100D+00 0.1877297030455D+00 0.1920131881282D+00 0.1963921103827D+00 + 0.2008685141914D+00 0.2054444847966D+00 0.2101221490109D+00 0.2149036759359D+00 + 0.2197912776889D+00 0.2247872101386D+00 0.2298937736476D+00 0.2351133138248D+00 + 0.2404482222837D+00 0.2459009374100D+00 0.2514739451362D+00 0.2571697797240D+00 + 0.2629910245536D+00 0.2689403129212D+00 0.2750203288421D+00 0.2812338078623D+00 + 0.2875835378751D+00 0.2940723599454D+00 0.3007031691395D+00 0.3074789153608D+00 + 0.3144026041916D+00 0.3214772977396D+00 0.3287061154899D+00 0.3360922351618D+00 + 0.3436388935694D+00 0.3513493874868D+00 0.3592270745164D+00 0.3672753739607D+00 + 0.3754977676972D+00 0.3838978010545D+00 0.3924790836915D+00 0.4012452904770D+00 + 0.4102001623706D+00 0.4193475073036D+00 0.4286912010595D+00 0.4382351881538D+00 + 0.4479834827120D+00 0.4579401693452D+00 0.4681094040228D+00 0.4784954149418D+00 + 0.4891025033910D+00 0.4999350446102D+00 0.5109974886435D+00 0.5222943611853D+00 + 0.5338302644183D+00 0.5456098778426D+00 0.5576379590956D+00 0.5699193447601D+00 + 0.5824589511607D+00 0.5952617751475D+00 0.6083328948654D+00 0.6216774705074D+00 + 0.6353007450521D+00 0.6492080449824D+00 0.6634047809857D+00 0.6778964486325D+00 + 0.6926886290333D+00 0.7077869894721D+00 0.7231972840138D+00 0.7389253540860D+00 + 0.7549771290311D+00 0.7713586266289D+00 0.7880759535873D+00 0.8051353059985D+00 + 0.8225429697604D+00 0.8403053209599D+00 0.8584288262158D+00 0.8769200429817D+00 + 0.8957856198031D+00 0.9150322965294D+00 0.9346669044774D+00 0.9546963665439D+00 + 0.9751276972649D+00 0.9959680028197D+00 0.1017224480976D+01 0.1038904420974D+01 + 0.1061015203349D+01 0.1083564299686D+01 0.1106559272300D+01 0.1130007773859D+01 + 0.1153917546912D+01 0.1178296423354D+01 0.1203152323804D+01 0.1228493256899D+01 + 0.1254327318495D+01 0.1280662690787D+01 0.1307507641324D+01 0.1334870521934D+01 + 0.1362759767535D+01 0.1391183894856D+01 0.1420151501035D+01 0.1449671262109D+01 + 0.1479751931386D+01 0.1510402337698D+01 0.1541631383520D+01 0.1573448042969D+01 + 0.1605861359662D+01 0.1638880444440D+01 0.1672514472946D+01 0.1706772683055D+01 + 0.1741664372155D+01 0.1777198894269D+01 0.1813385657016D+01 0.1850234118409D+01 + 0.1887753783475D+01 0.1925954200705D+01 0.1964844958324D+01 0.2004435680370D+01 + 0.2044736022586D+01 0.2085755668115D+01 0.2127504322996D+01 0.2169991711448D+01 + 0.2213227570952D+01 0.2257221647108D+01 0.2301983688271D+01 0.2347523439972D+01 + 0.2393850639086D+01 0.2440975007782D+01 0.2488906247220D+01 0.2537654031002D+01 + 0.2587227998372D+01 0.2637637747157D+01 0.2688892826442D+01 0.2741002728983D+01 + 0.2793976883341D+01 0.2847824645743D+01 0.2902555291652D+01 0.2958178007063D+01 + 0.3014701879494D+01 0.3072135888684D+01 0.3130488897001D+01 0.3189769639525D+01 + 0.3249986713841D+01 0.3311148569513D+01 0.3373263497233D+01 0.3436339617667D+01 + 0.3500384869964D+01 0.3565406999951D+01 0.3631413547991D+01 0.3698411836514D+01 + 0.3766408957221D+01 0.3835411757947D+01 0.3905426829193D+01 0.3976460490322D+01 + 0.4048518775419D+01 0.4121607418815D+01 0.4195731840277D+01 0.4270897129857D+01 + 0.4347108032420D+01 0.4424368931831D+01 0.4502683834816D+01 0.4582056354503D+01 + 0.4662489693636D+01 0.4743986627475D+01 0.4826549486387D+01 0.4910180138127D+01 + 0.4994879969825D+01 0.5080649869681D+01 0.5167490208373D+01 0.5255400820202D+01 + 0.5344380983962D+01 0.5434429403565D+01 0.5525544188426D+01 0.5617722833617D+01 + 0.5710962199815D+01 0.5805258493041D+01 0.5900607244231D+01 0.5997003288635D+01 + 0.6094440745069D+01 0.6192912995049D+01 0.6292412661814D+01 0.6392931589269D+01 + 0.6494460820874D+01 0.6596990578488D+01 0.6700510241224D+01 0.6805008324307D+01 + 0.6910472457995D+01 0.7016889366579D+01 0.7124244847491D+01 0.7232523750568D+01 + 0.7341709957494D+01 0.7451786361463D+01 0.7562734847107D+01 0.7674536270712D+01 + 0.7787170440791D+01 0.7900616099026D+01 0.8014850901658D+01 0.8129851401340D+01 + 0.8245593029526D+01 0.8362050079436D+01 0.8479195689649D+01 0.8597001828383D+01 + 0.8715439278509D+01 0.8834477623371D+01 0.8954085233454D+01 0.9074229253973D+01 + 0.9194875593440D+01 0.9315988913276D+01 0.9437532618530D+01 0.9559468849772D+01 + 0.9681758476237D+01 0.9804361090277D+01 0.9927235003199D+01 0.1005033724256D+02 + 0.1017362355101D+02 0.1029704838669D+02 0.1042056492540D+02 0.1054412506444D+02 + 0.1066767942831D+02 0.1079117737637D+02 0.1091456701244D+02 0.1103779519646D+02 + 0.1116080755839D+02 0.1128354851420D+02 0.1140596128432D+02 0.1152798791434D+02 + 0.1164956929827D+02 0.1177064520433D+02 0.1189115430327D+02 0.1201103419951D+02 + 0.1213022146500D+02 0.1224865167586D+02 0.1236625945201D+02 0.1248297849976D+02 + 0.1259874165744D+02 0.1271348094411D+02 0.1282712761148D+02 0.1293961219902D+02 + 0.1305086459240D+02 0.1316081408518D+02 0.1326938944391D+02 0.1337651897664D+02 + 0.1348213060491D+02 0.1358615193909D+02 0.1368851035736D+02 0.1378913308811D+02 + 0.1388794729589D+02 0.1398488017086D+02 0.1407985902179D+02 0.1417281137257D+02 + 0.1426366506212D+02 0.1435234834789D+02 0.1443879001264D+02 0.1452291947466D+02 + 0.1460466690129D+02 0.1468396332564D+02 0.1476074076649D+02 0.1483493235126D+02 + 0.1490647244192D+02 0.1497529676373D+02 0.1504134253675D+02 0.1510454860984D+02 + 0.1516485559720D+02 0.1522220601698D+02 0.1527654443219D+02 0.1532781759325D+02 + 0.1537597458241D+02 0.1542096695946D+02 0.1546274890874D+02 0.1550127738702D+02 + 0.1553651227211D+02 0.1556841651189D+02 0.1559695627334D+02 0.1562210109145D+02 + 0.1564382401753D+02 0.1566210176664D+02 0.1567691486377D+02 0.1568824778841D+02 + 0.1569608911712D+02 0.1570043166360D+02 0.1570127261607D+02 0.1569861367129D+02 + 0.1569246116496D+02 0.1568282619787D+02 0.1566972475757D+02 0.1565317783486D+02 + 0.1563321153475D+02 0.1560985718135D+02 0.1558315141624D+02 0.1555313628970D+02 + 0.1551985934445D+02 0.1548337369123D+02 0.1544373807583D+02 0.1540101693692D+02 + 0.1535528045436D+02 0.1530660458716D+02 0.1525507110098D+02 0.1520076758423D+02 + 0.1514378745267D+02 0.1508422994170D+02 0.1502220008605D+02 0.1495780868635D+02 + 0.1489117226206D+02 0.1482241299046D+02 0.1475165863115D+02 0.1467904243575D+02 + 0.1460470304238D+02 0.1452878435463D+02 0.1445143540465D+02 0.1437281020013D+02 + 0.1429306755483D+02 0.1421237090260D+02 0.1413088809452D+02 0.1404879117925D+02 + 0.1396625616625D+02 0.1388346277207D+02 0.1380059414952D+02 0.1371783659988D+02 + 0.1363537926825D+02 0.1355341382212D+02 0.1347213411351D+02 0.1339173582480D+02 + 0.1331241609871D+02 0.1323437315279D+02 0.1315780587881D+02 0.1308291342766D+02 + 0.1300989478035D+02 0.1293894830568D+02 0.1287027130535D+02 0.1280405954732D+02 + 0.1274050678825D+02 0.1267980428593D+02 0.1262214030269D+02 0.1256769960087D+02 + 0.1251666293145D+02 0.1246920651702D+02 0.1242550153038D+02 0.1238571356999D+02 + 0.1235000213372D+02 0.1231852009235D+02 0.1229141316414D+02 0.1226881939222D+02 + 0.1225086862623D+02 0.1223768200985D+02 0.1222937147599D+02 0.1222603925117D+02 + 0.1222777737106D+02 0.1223466720868D+02 0.1224677901729D+02 0.1226417148958D+02 + 0.1228689133517D+02 0.1231497287802D+02 0.1234843767581D+02 0.1238729416297D+02 + 0.1243153731911D+02 0.1248114836487D+02 0.1253609448665D+02 0.1259632859227D+02 + 0.1266178909890D+02 0.1273239975523D+02 0.1280806949923D+02 0.1288869235315D+02 + 0.1297414735711D+02 0.1306429854274D+02 0.1315899494816D+02 0.1325807067533D+02 + 0.1336134499111D+02 0.1346862247282D+02 0.1357969319917D+02 0.1369433298744D+02 + 0.1381230367740D+02 0.1393335346243D+02 0.1405721726828D+02 0.1418361717951D+02 + 0.1431226291376D+02 0.1444285234362D+02 0.1457507206581D+02 0.1470859801733D+02 + 0.1484309613763D+02 0.1497822307639D+02 0.1511362694548D+02 0.1524894811426D+02 + 0.1538382004666D+02 0.1551787017849D+02 0.1565072083339D+02 0.1578199017530D+02 + 0.1591129319546D+02 0.1603824273170D+02 0.1616245051740D+02 0.1628352825765D+02 + 0.1640108872963D+02 0.1651474690448D+02 0.1662412108723D+02 0.1672883407174D+02 + 0.1682851430716D+02 0.1692279707220D+02 0.1701132565381D+02 0.1709375252614D+02 + 0.1716974052608D+02 0.1723896402125D+02 0.1730111006644D+02 0.1735587954416D+02 + 0.1740298828530D+02 0.1744216816538D+02 0.1747316817225D+02 0.1749575544089D+02 + 0.1750971625093D+02 0.1751485698260D+02 0.1751100502688D+02 0.1749800964559D+02 + 0.1747574277733D+02 0.1744409978499D+02 0.1740300014123D+02 0.1735238804766D+02 + 0.1729223298439D+02 0.1722253018618D+02 0.1714330104180D+02 0.1705459341368D+02 + 0.1695648187457D+02 0.1684906785873D+02 0.1673247972505D+02 0.1660687272995D+02 + 0.1647242890818D+02 0.1632935685981D+02 0.1617789144222D+02 0.1601829336618D+02 + 0.1585084869528D+02 0.1567586824865D+02 0.1549368690699D+02 0.1530466282265D+02 + 0.1510917653451D+02 0.1490762998916D+02 0.1470044547022D+02 0.1448806443791D+02 + 0.1427094628160D+02 0.1404956698852D+02 0.1382441773199D+02 0.1359600338336D+02 + 0.1336484095192D+02 0.1313145795774D+02 0.1289639074258D+02 0.1266018272468D+02 + 0.1242338260337D+02 0.1218654252002D+02 0.1195021618209D+02 0.1171495695744D+02 + 0.1148131594627D+02 0.1124984003849D+02 0.1102106996440D+02 0.1079553834688D+02 + 0.1057376776347D+02 0.1035626882667D+02 0.1014353829125D+02 0.9936057196884D+01 + 0.9734289054994D+01 0.9538678088120D+01 0.9349647530399D+01 0.9167597997384D+01 + 0.8992905933301D+01 0.8825922143594D+01 0.8666970420224D+01 0.8516346266999D+01 + 0.8374315731611D+01 0.8241114350747D+01 0.8116946214096D+01 0.8001983152570D+01 + 0.7896364055459D+01 0.7800194320670D+01 0.7713545441561D+01 0.7636454733225D+01 + 0.7568925200401D+01 0.7510925548528D+01 0.7462390338698D+01 0.7423220286625D+01 + 0.7393282704950D+01 0.7372412087556D+01 0.7360410833787D+01 0.7357050109802D+01 + 0.7362070843542D+01 0.7375184849138D+01 0.7396076075866D+01 0.7424401976120D+01 + 0.7459794986211D+01 0.7501864113185D+01 0.7550196620265D+01 0.7604359802945D+01 + 0.7663902847256D+01 0.7728358761219D+01 0.7797246370063D+01 0.7870072365405D+01 + 0.7946333398216D+01 0.8025518205140D+01 0.8107109757504D+01 0.8190587422172D+01 + 0.8275429123337D+01 0.8361113494303D+01 0.8447122008353D+01 0.8532941077928D+01 + 0.8618064111536D+01 0.8701993518075D+01 0.8784242648578D+01 0.8864337665829D+01 + 0.8941819332731D+01 0.9016244710878D+01 0.9087188761372D+01 0.9154245840560D+01 + 0.9217031084099D+01 0.9275181673474D+01 0.9328357979881D+01 0.9376244581215D+01 + 0.9418551148709D+01 0.9455013200639D+01 0.9485392721360D+01 0.9509478644797D+01 + 0.9527087202359D+01 0.9538062136102D+01 0.9542274778747D+01 0.9539624002998D+01 + 0.9530036043300D+01 0.9513464193959D+01 0.9489888388159D+01 0.9459314663078D+01 + 0.9421774516843D+01 0.9377324163609D+01 0.9326043693467D+01 0.9268036144314D+01 + 0.9203426493115D+01 0.9132360574297D+01 0.9055003933175D+01 0.8971540622481D+01 + 0.8882171950151D+01 0.8787115186520D+01 0.8686602239071D+01 0.8580878302773D+01 + 0.8470200493895D+01 0.8354836475027D+01 0.8235063078754D+01 0.8111164937189D+01 + 0.7983433124252D+01 0.7852163817216D+01 0.7717656983696D+01 0.7580215099831D+01 + 0.7440141905014D+01 0.7297741198086D+01 0.7153315679440D+01 0.7007165843079D+01 + 0.6859588922166D+01 0.6710877891167D+01 0.6561320527250D+01 0.6411198533128D+01 + 0.6260786723101D+01 0.6110352273646D+01 0.5960154039458D+01 0.5810441935471D+01 + 0.5661456384987D+01 0.5513427833700D+01 0.5366576329042D+01 0.5221111163955D+01 + 0.5077230583918D+01 0.4935121555751D+01 0.4794959596475D+01 0.4656908660288D+01 + 0.4521121081498D+01 0.4387737571052D+01 0.4256887264186D+01 0.4128687816522D+01 + 0.4003245545873D+01 0.3880655616880D+01 0.3761002265561D+01 0.3644359060777D+01 + 0.3530789199588D+01 0.3420345833472D+01 0.3313072422343D+01 0.3209003113371D+01 + 0.3108163141592D+01 0.3010569249384D+01 0.2916230121919D+01 0.2825146835796D+01 + 0.2737313318133D+01 0.2652716813508D+01 0.2571338356232D+01 0.2493153245580D+01 + 0.2418131521695D+01 0.2346238440047D+01 0.2277434942461D+01 0.2211678122838D+01 + 0.2148921685899D+01 0.2089116397376D+01 0.2032210524266D+01 0.1978150263893D+01 + 0.1926880160684D+01 0.1878343509721D+01 0.1832482746269D+01 0.1789239820638D+01 + 0.1748556557871D+01 0.1710375001879D+01 0.1674637743804D+01 0.1641288234472D+01 + 0.1610271080956D+01 0.1581532327338D+01 0.1555019719890D+01 0.1530682956958D+01 + 0.1508473923914D+01 0.1488346913611D+01 0.1470258832820D+01 0.1454169395155D+01 + 0.1440041301042D+01 0.1427840405245D+01 0.1417535872504D+01 0.1409100321753D+01 + 0.1402509959377D+01 0.1397744701874D+01 0.1394788288181D+01 0.1393628381826D+01 + 0.1394256662892D+01 0.1396668909610D+01 0.1400865069190D+01 0.1406849317222D+01 + 0.1414629369614D+01 0.1424336942263D+01 0.1436096575202D+01 0.1449912447024D+01 + 0.1465794674727D+01 0.1483759333931D+01 0.1503828494539D+01 0.1526030271798D+01 + 0.1550398892649D+01 0.1576974777196D+01 0.1605804635055D+01 0.1636941576215D+01 + 7 1012 + 1 0 -1 -511.89194 + 2 0 -1 -58.90181 + 2 1 1 -50.68932 + 2 1 -2 -49.77537 + 3 0 -1 -5.73317 + 3 1 1 -3.34334 + 3 1 -2 -3.22919 + 0.2122975645015D-04 0.2173507709867D-04 0.2225242316243D-04 0.2278208072829D-04 + 0.2332434268594D-04 0.2387950888954D-04 0.2444788632325D-04 0.2502978927059D-04 + 0.2562553948791D-04 0.2623546638192D-04 0.2685990719144D-04 0.2749920717353D-04 + 0.2815371979393D-04 0.2882380692207D-04 0.2950983903075D-04 0.3021219540050D-04 + 0.3093126432877D-04 0.3166744334418D-04 0.3242113942573D-04 0.3319276922733D-04 + 0.3398275930755D-04 0.3479154636487D-04 0.3561957747857D-04 0.3646731035519D-04 + 0.3733521358096D-04 0.3822376688016D-04 0.3913346137963D-04 0.4006479987955D-04 + 0.4101829713060D-04 0.4199448011777D-04 0.4299388835081D-04 0.4401707416166D-04 + 0.4506460300883D-04 0.4613705378910D-04 0.4723501915650D-04 0.4835910584899D-04 + 0.4950993502270D-04 0.5068814259429D-04 0.5189437959126D-04 0.5312931251066D-04 + 0.5439362368626D-04 0.5568801166444D-04 0.5701319158897D-04 0.5836989559491D-04 + 0.5975887321186D-04 0.6118089177673D-04 0.6263673685632D-04 0.6412721267990D-04 + 0.6565314258201D-04 0.6721536945580D-04 0.6881475621705D-04 0.7045218627922D-04 + 0.7212856403973D-04 0.7384481537777D-04 0.7560188816385D-04 0.7740075278149D-04 + 0.7924240266119D-04 0.8112785482706D-04 0.8305815045642D-04 0.8503435545263D-04 + 0.8705756103141D-04 0.8912888432116D-04 0.9124946897738D-04 0.9342048581165D-04 + 0.9564313343555D-04 0.9791863891974D-04 0.1002482584687D-03 0.1026332781112D-03 + 0.1050750144077D-03 0.1075748151735D-03 0.1101340602203D-03 0.1127541621137D-03 + 0.1154365669501D-03 0.1181827551510D-03 0.1209942422769D-03 0.1238725798590D-03 + 0.1268193562527D-03 0.1298361975089D-03 0.1329247682680D-03 0.1360867726735D-03 + 0.1393239553083D-03 0.1426381021518D-03 0.1460310415612D-03 0.1495046452749D-03 + 0.1530608294397D-03 0.1567015556625D-03 0.1604288320871D-03 0.1642447144955D-03 + 0.1681513074364D-03 0.1721507653792D-03 0.1762452938963D-03 0.1804371508722D-03 + 0.1847286477421D-03 0.1891221507592D-03 0.1936200822920D-03 0.1982249221522D-03 + 0.2029392089542D-03 0.2077655415060D-03 0.2127065802334D-03 0.2177650486382D-03 + 0.2229437347894D-03 0.2282454928513D-03 0.2336732446459D-03 0.2392299812538D-03 + 0.2449187646513D-03 0.2507427293871D-03 0.2567050842979D-03 0.2628091142650D-03 + 0.2690581820118D-03 0.2754557299435D-03 0.2820052820308D-03 0.2887104457371D-03 + 0.2955749139921D-03 0.3026024672103D-03 0.3097969753590D-03 0.3171624000731D-03 + 0.3247027968207D-03 0.3324223171196D-03 0.3403252108055D-03 0.3484158283536D-03 + 0.3566986232552D-03 0.3651781544500D-03 0.3738590888149D-03 0.3827462037126D-03 + 0.3918443895988D-03 0.4011586526914D-03 0.4106941177020D-03 0.4204560306321D-03 + 0.4304497616342D-03 0.4406808079408D-03 0.4511547968612D-03 0.4618774888502D-03 + 0.4728547806468D-03 0.4840927084883D-03 0.4955974513988D-03 0.5073753345551D-03 + 0.5194328327314D-03 0.5317765738249D-03 0.5444133424641D-03 0.5573500837015D-03 + 0.5705939067925D-03 0.5841520890639D-03 0.5980320798714D-03 0.6122415046513D-03 + 0.6267881690659D-03 0.6416800632466D-03 0.6569253661363D-03 0.6725324499326D-03 + 0.6885098846360D-03 0.7048664427037D-03 0.7216111038125D-03 0.7387530597330D-03 + 0.7563017193176D-03 0.7742667136049D-03 0.7926579010441D-03 0.8114853728404D-03 + 0.8307594584254D-03 0.8504907310562D-03 0.8706900135433D-03 0.8913683841142D-03 + 0.9125371824119D-03 0.9342080156346D-03 0.9563927648179D-03 0.9791035912634D-03 + 0.1002352943117D-02 0.1026153562102D-02 0.1050518490405D-02 0.1075461077728D-02 + 0.1100994988496D-02 0.1127134209246D-02 0.1153893056171D-02 0.1181286182852D-02 + 0.1209328588167D-02 0.1238035624379D-02 0.1267423005415D-02 0.1297506815344D-02 + 0.1328303517037D-02 0.1359829961041D-02 0.1392103394654D-02 0.1425141471212D-02 + 0.1458962259585D-02 0.1493584253904D-02 0.1529026383504D-02 0.1565308023106D-02 + 0.1602449003221D-02 0.1640469620811D-02 0.1679390650189D-02 0.1719233354165D-02 + 0.1760019495464D-02 0.1801771348394D-02 0.1844511710794D-02 0.1888263916250D-02 + 0.1933051846599D-02 0.1978899944720D-02 0.2025833227614D-02 0.2073877299798D-02 + 0.2123058366995D-02 0.2173403250151D-02 0.2224939399761D-02 0.2277694910540D-02 + 0.2331698536421D-02 0.2386979705903D-02 0.2443568537747D-02 0.2501495857040D-02 + 0.2560793211623D-02 0.2621492888896D-02 0.2683627933011D-02 0.2747232162458D-02 + 0.2812340188056D-02 0.2878987431352D-02 0.2947210143447D-02 0.3017045424251D-02 + 0.3088531242177D-02 0.3161706454285D-02 0.3236610826892D-02 0.3313285056646D-02 + 0.3391770792086D-02 0.3472110655691D-02 0.3554348266436D-02 0.3638528262858D-02 + 0.3724696326649D-02 0.3812899206788D-02 0.3903184744224D-02 0.3995601897109D-02 + 0.4090200766624D-02 0.4187032623373D-02 0.4286149934389D-02 0.4387606390746D-02 + 0.4491456935804D-02 0.4597757794082D-02 0.4706566500803D-02 0.4817941932088D-02 + 0.4931944335851D-02 0.5048635363379D-02 0.5168078101634D-02 0.5290337106279D-02 + 0.5415478435454D-02 0.5543569684307D-02 0.5674680020311D-02 0.5808880219367D-02 + 0.5946242702730D-02 0.6086841574754D-02 0.6230752661494D-02 0.6378053550168D-02 + 0.6528823629508D-02 0.6683144131013D-02 0.6841098171130D-02 0.7002770794372D-02 + 0.7168249017405D-02 0.7337621874121D-02 0.7510980461712D-02 0.7688417987773D-02 + 0.7870029818463D-02 0.8055913527720D-02 0.8246168947593D-02 0.8440898219673D-02 + 0.8640205847678D-02 0.8844198751201D-02 0.9052986320644D-02 0.9266680473381D-02 + 0.9485395711148D-02 0.9709249178711D-02 0.9938360723829D-02 0.1017285295853D-01 + 0.1041285132175D-01 0.1065848414335D-01 0.1090988270951D-01 0.1116718132961D-01 + 0.1143051740455D-01 0.1170003149653D-01 0.1197586740047D-01 0.1225817221684D-01 + 0.1254709642620D-01 0.1284279396532D-01 0.1314542230495D-01 0.1345514252930D-01 + 0.1377211941725D-01 0.1409652152530D-01 0.1442852127232D-01 0.1476829502620D-01 + 0.1511602319226D-01 0.1547189030365D-01 0.1583608511371D-01 0.1620880069022D-01 + 0.1659023451183D-01 0.1698058856639D-01 0.1738006945154D-01 0.1778888847734D-01 + 0.1820726177118D-01 0.1863541038486D-01 0.1907356040402D-01 0.1952194305980D-01 + 0.1998079484302D-01 0.2045035762063D-01 0.2093087875471D-01 0.2142261122400D-01 + 0.2192581374792D-01 0.2244075091329D-01 0.2296769330365D-01 0.2350691763133D-01 + 0.2405870687229D-01 0.2462335040374D-01 0.2520114414469D-01 0.2579239069942D-01 + 0.2639739950387D-01 0.2701648697516D-01 0.2764997666416D-01 0.2829819941123D-01 + 0.2896149350513D-01 0.2964020484531D-01 0.3033468710740D-01 0.3104530191220D-01 + 0.3177241899806D-01 0.3251641639684D-01 0.3327768061342D-01 0.3405660680881D-01 + 0.3485359898710D-01 0.3566907018606D-01 0.3650344267166D-01 0.3735714813647D-01 + 0.3823062790211D-01 0.3912433312562D-01 0.4003872501011D-01 0.4097427501948D-01 + 0.4193146509749D-01 0.4291078789111D-01 0.4391274697832D-01 0.4493785710035D-01 + 0.4598664439858D-01 0.4705964665594D-01 0.4815741354312D-01 0.4928050686955D-01 + 0.5042950083923D-01 0.5160498231153D-01 0.5280755106696D-01 0.5403782007813D-01 + 0.5529641578584D-01 0.5658397838041D-01 0.5790116208843D-01 0.5924863546488D-01 + 0.6062708169076D-01 0.6203719887636D-01 0.6347970037015D-01 0.6495531507346D-01 + 0.6646478776099D-01 0.6800887940725D-01 0.6958836751900D-01 0.7120404647380D-01 + 0.7285672786470D-01 0.7454724085125D-01 0.7627643251682D-01 0.7804516823229D-01 + 0.7985433202641D-01 0.8170482696258D-01 0.8359757552242D-01 0.8553351999606D-01 + 0.8751362287932D-01 0.8953886727772D-01 0.9161025731761D-01 0.9372881856432D-01 + 0.9589559844749D-01 0.9811166669365D-01 0.1003781157661D+00 0.1026960613124D+00 + 0.1050666426187D+00 0.1074910230727D+00 0.1099703906329D+00 0.1125059583070D+00 + 0.1150989646366D+00 0.1177506741909D+00 0.1204623780676D+00 0.1232353944021D+00 + 0.1260710688845D+00 0.1289707752849D+00 0.1319359159864D+00 0.1349679225270D+00 + 0.1380682561490D+00 0.1412384083570D+00 0.1444799014844D+00 0.1477942892678D+00 + 0.1511831574303D+00 0.1546481242725D+00 0.1581908412731D+00 0.1618129936965D+00 + 0.1655163012104D+00 0.1693025185104D+00 0.1731734359544D+00 0.1771308802047D+00 + 0.1811767148790D+00 0.1853128412094D+00 0.1895411987104D+00 0.1938637658552D+00 + 0.1982825607598D+00 0.2027996418767D+00 0.2074171086957D+00 0.2121371024533D+00 + 0.2169618068509D+00 0.2218934487801D+00 0.2269342990569D+00 0.2320866731634D+00 + 0.2373529319974D+00 0.2427354826295D+00 0.2482367790682D+00 0.2538593230323D+00 + 0.2596056647304D+00 0.2654784036474D+00 0.2714801893389D+00 0.2776137222308D+00 + 0.2838817544268D+00 0.2902870905217D+00 0.2968325884206D+00 0.3035211601645D+00 + 0.3103557727607D+00 0.3173394490192D+00 0.3244752683937D+00 0.3317663678273D+00 + 0.3392159426028D+00 0.3468272471962D+00 0.3546035961349D+00 0.3625483648577D+00 + 0.3706649905790D+00 0.3789569731540D+00 0.3874278759464D+00 0.3960813266976D+00 + 0.4049210183955D+00 0.4139507101454D+00 0.4231742280388D+00 0.4325954660221D+00 + 0.4422183867640D+00 0.4520470225197D+00 0.4620854759931D+00 0.4723379211946D+00 + 0.4828086042953D+00 0.4935018444749D+00 0.5044220347646D+00 0.5155736428822D+00 + 0.5269612120602D+00 0.5385893618646D+00 0.5504627890040D+00 0.5625862681281D+00 + 0.5749646526146D+00 0.5876028753427D+00 0.6005059494532D+00 0.6136789690924D+00 + 0.6271271101407D+00 0.6408556309226D+00 0.6548698728981D+00 0.6691752613333D+00 + 0.6837773059493D+00 0.6986816015479D+00 0.7138938286123D+00 0.7294197538810D+00 + 0.7452652308942D+00 0.7614362005101D+00 0.7779386913894D+00 0.7947788204470D+00 + 0.8119627932680D+00 0.8294969044866D+00 0.8473875381261D+00 0.8656411678975D+00 + 0.8842643574549D+00 0.9032637606047D+00 0.9226461214683D+00 0.9424182745935D+00 + 0.9625871450140D+00 0.9831597482541D+00 0.1004143190275D+01 0.1025544667362D+01 + 0.1047371465949D+01 0.1069630962376D+01 0.1092330622582D+01 0.1115478001718D+01 + 0.1139080743699D+01 0.1163146580667D+01 0.1187683332379D+01 0.1212698905512D+01 + 0.1238201292877D+01 0.1264198572546D+01 0.1290698906886D+01 0.1317710541494D+01 + 0.1345241804028D+01 0.1373301102944D+01 0.1401896926110D+01 0.1431037839321D+01 + 0.1460732484690D+01 0.1490989578921D+01 0.1521817911461D+01 0.1553226342519D+01 + 0.1585223800953D+01 0.1617819282025D+01 0.1651021845012D+01 0.1684840610666D+01 + 0.1719284758534D+01 0.1754363524114D+01 0.1790086195862D+01 0.1826462112019D+01 + 0.1863500657290D+01 0.1901211259327D+01 0.1939603385053D+01 0.1978686536792D+01 + 0.2018470248210D+01 0.2058964080068D+01 0.2100177615772D+01 0.2142120456722D+01 + 0.2184802217451D+01 0.2228232520549D+01 0.2272420991371D+01 0.2317377252521D+01 + 0.2363110918097D+01 0.2409631587718D+01 0.2456948840298D+01 0.2505072227579D+01 + 0.2554011267414D+01 0.2603775436800D+01 0.2654374164640D+01 0.2705816824249D+01 + 0.2758112725590D+01 0.2811271107225D+01 0.2865301128002D+01 0.2920211858443D+01 + 0.2976012271854D+01 0.3032711235135D+01 0.3090317499294D+01 0.3148839689666D+01 + 0.3208286295814D+01 0.3268665661132D+01 0.3329985972130D+01 0.3392255247403D+01 + 0.3455481326284D+01 0.3519671857166D+01 0.3584834285516D+01 0.3650975841540D+01 + 0.3718103527540D+01 0.3786224104928D+01 0.3855344080910D+01 0.3925469694842D+01 + 0.3996606904248D+01 0.4068761370505D+01 0.4141938444201D+01 0.4216143150155D+01 + 0.4291380172106D+01 0.4367653837082D+01 0.4444968099432D+01 0.4523326524540D+01 + 0.4602732272224D+01 0.4683188079814D+01 0.4764696244923D+01 0.4847258607911D+01 + 0.4930876534058D+01 0.5015550895439D+01 0.5101282052526D+01 0.5188069835504D+01 + 0.5275913525340D+01 0.5364811834582D+01 0.5454762887935D+01 0.5545764202593D+01 + 0.5637812668364D+01 0.5730904527600D+01 0.5825035354930D+01 0.5920200036841D+01 + 0.6016392751096D+01 0.6113606946037D+01 0.6211835319763D+01 0.6311069799237D+01 + 0.6411301519318D+01 0.6512520801757D+01 0.6614717134178D+01 0.6717879149076D+01 + 0.6821994602856D+01 0.6927050354936D+01 0.7033032346971D+01 0.7139925582197D+01 + 0.7247714104955D+01 0.7356380980422D+01 0.7465908274590D+01 0.7576277034522D+01 + 0.7687467268944D+01 0.7799457929201D+01 0.7912226890625D+01 0.8025750934367D+01 + 0.8140005729731D+01 0.8254965817070D+01 0.8370604591283D+01 0.8486894285977D+01 + 0.8603805958343D+01 0.8721309474805D+01 0.8839373497487D+01 0.8957965471583D+01 + 0.9077051613664D+01 0.9196596901005D+01 0.9316565061973D+01 0.9436918567578D+01 + 0.9557618624205D+01 0.9678625167647D+01 0.9799896858462D+01 0.9921391078761D+01 + 0.1004306393048D+02 0.1016487023519D+02 0.1028676353561D+02 0.1040869609872D+02 + 0.1053061892078D+02 0.1065248173410D+02 0.1077423301584D+02 0.1089581999877D+02 + 0.1101718868413D+02 0.1113828385666D+02 0.1125904910191D+02 0.1137942682584D+02 + 0.1149935827678D+02 0.1161878356999D+02 0.1173764171462D+02 0.1185587064341D+02 + 0.1197340724503D+02 0.1209018739920D+02 0.1220614601465D+02 0.1232121706995D+02 + 0.1243533365740D+02 0.1254842802982D+02 0.1266043165050D+02 0.1277127524634D+02 + 0.1288088886404D+02 0.1298920192971D+02 0.1309614331160D+02 0.1320164138629D+02 + 0.1330562410812D+02 0.1340801908212D+02 0.1350875364026D+02 0.1360775492116D+02 + 0.1370494995324D+02 0.1380026574132D+02 0.1389362935662D+02 0.1398496803019D+02 + 0.1407420924981D+02 0.1416128086012D+02 0.1424611116627D+02 0.1432862904069D+02 + 0.1440876403324D+02 0.1448644648440D+02 0.1456160764164D+02 0.1463417977876D+02 + 0.1470409631813D+02 0.1477129195572D+02 0.1483570278883D+02 0.1489726644633D+02 + 0.1495592222127D+02 0.1501161120574D+02 0.1506427642781D+02 0.1511386299027D+02 + 0.1516031821110D+02 0.1520359176531D+02 0.1524363582812D+02 0.1528040521898D+02 + 0.1531385754641D+02 0.1534395335325D+02 0.1537065626208D+02 0.1539393312048D+02 + 0.1541375414585D+02 0.1543009306950D+02 0.1544292727951D+02 0.1545223796216D+02 + 0.1545801024155D+02 0.1546023331695D+02 0.1545890059744D+02 0.1545400983365D+02 + 0.1544556324596D+02 0.1543356764880D+02 0.1541803457065D+02 0.1539898036925D+02 + 0.1537642634154D+02 0.1535039882796D+02 0.1532092931044D+02 0.1528805450387D+02 + 0.1525181644030D+02 0.1521226254557D+02 0.1516944570778D+02 0.1512342433713D+02 + 0.1507426241669D+02 0.1502202954350D+02 0.1496680095964D+02 0.1490865757272D+02 + 0.1484768596530D+02 0.1478397839284D+02 0.1471763276969D+02 0.1464875264266D+02 + 0.1457744715182D+02 0.1450383097801D+02 0.1442802427679D+02 0.1435015259838D+02 + 0.1427034679327D+02 0.1418874290321D+02 0.1410548203722D+02 0.1402071023247D+02 + 0.1393457829969D+02 0.1384724165293D+02 0.1375886012364D+02 0.1366959775879D+02 + 0.1357962260304D+02 0.1348910646488D+02 0.1339822466686D+02 0.1330715577980D+02 + 0.1321608134121D+02 0.1312518555808D+02 0.1303465499419D+02 0.1294467824221D+02 + 0.1285544558101D+02 0.1276714861841D+02 0.1267997991994D+02 0.1259413262403D+02 + 0.1250980004419D+02 0.1242717525885D+02 0.1234645068948D+02 0.1226781766776D+02 + 0.1219146599257D+02 0.1211758347770D+02 0.1204635549121D+02 0.1197796448732D+02 + 0.1191258953197D+02 0.1185040582321D+02 0.1179158420730D+02 0.1173629069208D+02 + 0.1168468595856D+02 0.1163692487226D+02 0.1159315599549D+02 0.1155352110209D+02 + 0.1151815469598D+02 0.1148718353503D+02 0.1146072616178D+02 0.1143889244247D+02 + 0.1142178311602D+02 0.1140948935454D+02 0.1140209233686D+02 0.1139966283678D+02 + 0.1140226082774D+02 0.1140993510519D+02 0.1142272292875D+02 0.1144064968524D+02 + 0.1146372857460D+02 0.1149196031991D+02 0.1152533290326D+02 0.1156382132880D+02 + 0.1160738741454D+02 0.1165597961412D+02 0.1170953287012D+02 0.1176796849989D+02 + 0.1183119411535D+02 0.1189910357777D+02 0.1197157698856D+02 0.1204848071701D+02 + 0.1212966746596D+02 0.1221497637600D+02 0.1230423316888D+02 0.1239725033077D+02 + 0.1249382733567D+02 0.1259375090926D+02 0.1269679533346D+02 0.1280272279167D+02 + 0.1291128375448D+02 0.1302221740584D+02 0.1313525210912D+02 0.1325010591253D+02 + 0.1336648709337D+02 0.1348409474012D+02 0.1360261937149D+02 0.1372174359123D+02 + 0.1384114277758D+02 0.1396048580566D+02 0.1407943580155D+02 0.1419765092608D+02 + 0.1431478518661D+02 0.1443048927478D+02 0.1454441142812D+02 0.1465619831308D+02 + 0.1476549592746D+02 0.1487195051928D+02 0.1497520951989D+02 0.1507492248828D+02 + 0.1517074206398D+02 0.1526232492551D+02 0.1534933275145D+02 0.1543143318112D+02 + 0.1550830077157D+02 0.1557961794797D+02 0.1564507594396D+02 0.1570437572881D+02 + 0.1575722891823D+02 0.1580335866539D+02 0.1584250052899D+02 0.1587440331524D+02 + 0.1589882989033D+02 0.1591555796049D+02 0.1592438081630D+02 0.1592510803844D+02 + 0.1591756616179D+02 0.1590159929512D+02 0.1587706969359D+02 0.1584385828154D+02 + 0.1580186512290D+02 0.1575100983720D+02 0.1569123195871D+02 0.1562249123695D+02 + 0.1554476787665D+02 0.1545806271560D+02 0.1536239733893D+02 0.1525781412875D+02 + 0.1514437624809D+02 0.1502216755847D+02 0.1489129247063D+02 0.1475187572813D+02 + 0.1460406212401D+02 0.1444801615062D+02 0.1428392158332D+02 0.1411198099888D+02 + 0.1393241522964D+02 0.1374546275490D+02 0.1355137903119D+02 0.1335043576333D+02 + 0.1314292011864D+02 0.1292913388664D+02 0.1270939258714D+02 0.1248402452972D+02 + 0.1225336982785D+02 0.1201777937125D+02 0.1177761376017D+02 0.1153324220569D+02 + 0.1128504140014D+02 0.1103339436205D+02 0.1077868926027D+02 0.1052131822179D+02 + 0.1026167612835D+02 0.1000015940663D+02 0.9737164817090D+01 0.9473088246666D+01 + 0.9208323510392D+01 0.8943261167138D+01 0.8678287354606D+01 0.8413782648689D+01 + 0.8150120952198D+01 0.7887668417870D+01 0.7626782410424D+01 0.7367810512255D+01 + 0.7111089577147D+01 0.6856944836175D+01 0.6605689059620D+01 0.6357621778576D+01 + 0.6113028569417D+01 0.5872180404071D+01 0.5635333068605D+01 0.5402726652271D+01 + 0.5174585108689D+01 0.4951115890458D+01 0.4732509658013D+01 0.4518940063093D+01 + 0.4310563606744D+01 0.4107519571314D+01 0.3909930025455D+01 0.3717899900701D+01 + 0.3531517137795D+01 0.3350852900521D+01 0.3175961854415D+01 0.3006882507418D+01 + 0.2843637609166D+01 0.2686234605393D+01 0.2534666143602D+01 0.2388910626020D+01 + 0.2248932805599D+01 0.2114684420764D+01 0.1986104864410D+01 0.1863121882663D+01 + 0.1745652298807D+01 0.1633602757816D+01 0.1526870486911D+01 0.1425344067651D+01 + 0.1328904215091D+01 0.1237424559686D+01 0.1150772427713D+01 0.1068809616148D+01 + 0.9913931580887D+00 0.9183760750247D+00 0.8496081124357D+00 0.7849364554513D+00 + 0.7242064215293D+00 0.6672621273712D+00 0.6139471275574D+00 0.5641050226618D+00 + 0.5175800348878D+00 0.4742175495586D+00 0.4338646210828D+00 0.3963704423129D+00 + 0.3615867764997D+00 0.3293683513354D+00 0.2995732148544D+00 0.2720630532321D+00 + 0.2467034707815D+00 0.2233642326902D+00 0.2019194712763D+00 0.1822478567499D+00 + 0.1642327336682D+00 0.1477622244444D+00 0.1327293014336D+00 0.1190318292464D+00 + 0.1065725790655D+00 0.9525921682581D-01 0.8500426719540D-01 0.7572505534570D-01 + 0.6734362852856D-01 0.5978665949119D-01 0.5298533375213D-01 0.4687522273735D-01 + 0.4139614473480D-01 0.3649201557103D-01 0.3211069084453D-01 0.2820380147099D-01 + 0.2472658420543D-01 0.2163770870794D-01 0.1889910261478D-01 0.1647577596641D-01 + 0.1433564623066D-01 0.1244936504301D-01 0.1079014767040D-01 0.9333606088531D-02 + 0.8057586449521D-02 0.6942011605538D-02 0.5968729247262D-02 0.5121366113861D-02 + 0.4385188634413D-02 0.3746970269980D-02 0.3194865741265D-02 0.2718292249293D-02 + 0.2307817726031D-02 0.1955056088404D-02 0.1652569412799D-02 0.1393776897745D-02 + 0.1172870439853D-02 0.9847366120634D-03 0.8248848034661D-03 0.6893812560569D-03 + 0.5747887154298D-03 0.4781113990982D-03 0.3967449774979D-03 0.3284312582634D-03 + 0.2712172636576D-03 0.2234183935981D-03 0.1835853721449D-03 0.1504746831443D-03 + 0.1230222105786D-03 0.1003198106540D-03 0.8159455542106D-04 0.6619040144209D-04 + 0.5355205138722D-04 0.4321079120846D-04 0.3477210045803D-04 0.2790484818898D-04 + 0.2233190152246D-04 0.1782198824118D-04 0.1418266855132D-04 0.1125428434880D-04 + 0.8904766856498D-05 0.7025195313453D-05 0.5526010459652D-05 0.4333796852085D-05 + 0.3388557563637D-05 0.2641413563333D-05 0.2052668070841D-05 0.1590183444862D-05 + 0.1228024735392D-05 0.9453299398051D-06 0.7253722919424D-06 0.5547846237125D-06 + 0.4229200131023D-06 0.3213266143727D-06 0.2433177983142D-06 0.1836215545666D-06 + 0.1380955642703D-06 0.1034964778941D-06 0.7729376586493D-07 0.5752008209307D-07 + 0.4265142355148D-07 0.3151151106808D-07 0.2319578320089D-07 0.1701120974173D-07 + 0.1242881489534D-07 0.9046371073667D-08 0.6559198960071D-08 0.4737402476978D-08 + 0.3408191153158D-08 0.2442208093542D-08 0.1742998768590D-08 0.1238932286038D-08 + 0.8770296193333D-09 0.6182683290111D-09 0.4340255982013D-09 0.3033950772413D-09 + 0.2111715589818D-09 0.1463438404983D-09 0.1009726185101D-09 0.6935859066118D-10 + 0.4742849271888D-10 0.3228488955626D-10 0.2187547853929D-10 0.1475212866899D-10 + 0.9901881750809D-11 0.6613860882122D-11 0.4396644350124D-11 0.2908650000322D-11 + 0.1914873227728D-11 0.1254415200484D-11 0.8176535094916D-12 0.5302708391854D-12 + 0.3421370551355D-12 0.2196087836422D-12 0.1402231518601D-12 0.8906014768602D-13 + LSMS: xx z= 26. xvalws= 2.77074 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728402963D+02-0.5199725117641D+02-0.5199721792578D+02-0.5199718427293D+02 +-0.5199715021300D+02-0.5199711574107D+02-0.5199708085214D+02-0.5199704554119D+02 +-0.5199700980309D+02-0.5199697363268D+02-0.5199693702474D+02-0.5199689997397D+02 +-0.5199686247500D+02-0.5199682452243D+02-0.5199678611076D+02-0.5199674723444D+02 +-0.5199670788785D+02-0.5199666806529D+02-0.5199662776101D+02-0.5199658696918D+02 +-0.5199654568390D+02-0.5199650389922D+02-0.5199646160907D+02-0.5199641880734D+02 +-0.5199637548785D+02-0.5199633164434D+02-0.5199628727046D+02-0.5199624235979D+02 +-0.5199619690585D+02-0.5199615090205D+02-0.5199610434176D+02-0.5199605721822D+02 +-0.5199600952464D+02-0.5199596125410D+02-0.5199591239964D+02-0.5199586295419D+02 +-0.5199581291060D+02-0.5199576226162D+02-0.5199571099994D+02-0.5199565911815D+02 +-0.5199560660874D+02-0.5199555346411D+02-0.5199549967658D+02-0.5199544523837D+02 +-0.5199539014162D+02-0.5199533437834D+02-0.5199527794048D+02-0.5199522081989D+02 +-0.5199516300828D+02-0.5199510449731D+02-0.5199504527851D+02-0.5199498534331D+02 +-0.5199492468306D+02-0.5199486328897D+02-0.5199480115217D+02-0.5199473826367D+02 +-0.5199467461436D+02-0.5199461019507D+02-0.5199454499646D+02-0.5199447900910D+02 +-0.5199441222344D+02-0.5199434462984D+02-0.5199427621849D+02-0.5199420697954D+02 +-0.5199413690295D+02-0.5199406597858D+02-0.5199399419618D+02-0.5199392154537D+02 +-0.5199384801563D+02-0.5199377359634D+02-0.5199369827672D+02-0.5199362204589D+02 +-0.5199354489281D+02-0.5199346680633D+02-0.5199338777515D+02-0.5199330778784D+02 +-0.5199322683282D+02-0.5199314489839D+02-0.5199306197270D+02-0.5199297804374D+02 +-0.5199289309939D+02-0.5199280712733D+02-0.5199272011516D+02-0.5199263205027D+02 +-0.5199254291992D+02-0.5199245271123D+02-0.5199236141114D+02-0.5199226900644D+02 +-0.5199217548376D+02-0.5199208082958D+02-0.5199198503019D+02-0.5199188807175D+02 +-0.5199178994021D+02-0.5199169062139D+02-0.5199159010092D+02-0.5199148836424D+02 +-0.5199138539665D+02-0.5199128118323D+02-0.5199117570892D+02-0.5199106895845D+02 +-0.5199096091638D+02-0.5199085156707D+02-0.5199074089471D+02-0.5199062888326D+02 +-0.5199051551654D+02-0.5199040077813D+02-0.5199028465143D+02-0.5199016711964D+02 +-0.5199004816574D+02-0.5198992777253D+02-0.5198980592257D+02-0.5198968259824D+02 +-0.5198955778170D+02-0.5198943145487D+02-0.5198930359948D+02-0.5198917419701D+02 +-0.5198904322875D+02-0.5198891067574D+02-0.5198877651879D+02-0.5198864073848D+02 +-0.5198850331517D+02-0.5198836422896D+02-0.5198822345972D+02-0.5198808098707D+02 +-0.5198793679039D+02-0.5198779084882D+02-0.5198764314123D+02-0.5198749364622D+02 +-0.5198734234217D+02-0.5198718920716D+02-0.5198703421905D+02-0.5198687735537D+02 +-0.5198671859343D+02-0.5198655791024D+02-0.5198639528254D+02-0.5198623068679D+02 +-0.5198606409915D+02-0.5198589549550D+02-0.5198572485143D+02-0.5198555214224D+02 +-0.5198537734293D+02-0.5198520042816D+02-0.5198502137235D+02-0.5198484014954D+02 +-0.5198465673351D+02-0.5198447109769D+02-0.5198428321519D+02-0.5198409305883D+02 +-0.5198390060104D+02-0.5198370581396D+02-0.5198350866939D+02-0.5198330913876D+02 +-0.5198310719319D+02-0.5198290280341D+02-0.5198269593983D+02-0.5198248657249D+02 +-0.5198227467106D+02-0.5198206020484D+02-0.5198184314277D+02-0.5198162345340D+02 +-0.5198140110492D+02-0.5198117606510D+02-0.5198094830136D+02-0.5198071778068D+02 +-0.5198048446968D+02-0.5198024833454D+02-0.5198000934107D+02-0.5197976745462D+02 +-0.5197952264015D+02-0.5197927486220D+02-0.5197902408485D+02-0.5197877027176D+02 +-0.5197851338615D+02-0.5197825339081D+02-0.5197799024804D+02-0.5197772391971D+02 +-0.5197745436723D+02-0.5197718155151D+02-0.5197690543304D+02-0.5197662597177D+02 +-0.5197634312720D+02-0.5197605685833D+02-0.5197576712367D+02-0.5197547388122D+02 +-0.5197517708846D+02-0.5197487670236D+02-0.5197457267938D+02-0.5197426497542D+02 +-0.5197395354589D+02-0.5197363834563D+02-0.5197331932893D+02-0.5197299644952D+02 +-0.5197266966059D+02-0.5197233891476D+02-0.5197200416404D+02-0.5197166535990D+02 +-0.5197132245319D+02-0.5197097539418D+02-0.5197062413252D+02-0.5197026861727D+02 +-0.5196990879687D+02-0.5196954461909D+02-0.5196917603112D+02-0.5196880297948D+02 +-0.5196842541005D+02-0.5196804326804D+02-0.5196765649801D+02-0.5196726504383D+02 +-0.5196686884871D+02-0.5196646785514D+02-0.5196606200494D+02-0.5196565123919D+02 +-0.5196523549829D+02-0.5196481472189D+02-0.5196438884890D+02-0.5196395781753D+02 +-0.5196352156518D+02-0.5196308002855D+02-0.5196263314350D+02-0.5196218084518D+02 +-0.5196172306789D+02-0.5196125974518D+02-0.5196079080977D+02-0.5196031619354D+02 +-0.5195983582758D+02-0.5195934964214D+02-0.5195885756657D+02-0.5195835952942D+02 +-0.5195785545834D+02-0.5195734528011D+02-0.5195682892060D+02-0.5195630630481D+02 +-0.5195577735679D+02-0.5195524199969D+02-0.5195470015573D+02-0.5195415174616D+02 +-0.5195359669127D+02-0.5195303491041D+02-0.5195246632192D+02-0.5195189084316D+02 +-0.5195130839046D+02-0.5195071887917D+02-0.5195012222358D+02-0.5194951833693D+02 +-0.5194890713143D+02-0.5194828851819D+02-0.5194766240726D+02-0.5194702870759D+02 +-0.5194638732701D+02-0.5194573817222D+02-0.5194508114882D+02-0.5194441616121D+02 +-0.5194374311266D+02-0.5194306190525D+02-0.5194237243986D+02-0.5194167461616D+02 +-0.5194096833262D+02-0.5194025348643D+02-0.5193952997356D+02-0.5193879768871D+02 +-0.5193805652527D+02-0.5193730637535D+02-0.5193654712973D+02-0.5193577867788D+02 +-0.5193500090790D+02-0.5193421370652D+02-0.5193341695911D+02-0.5193261054963D+02 +-0.5193179436061D+02-0.5193096827316D+02-0.5193013216694D+02-0.5192928592013D+02 +-0.5192842940944D+02-0.5192756251004D+02-0.5192668509561D+02-0.5192579703828D+02 +-0.5192489820860D+02-0.5192398847556D+02-0.5192306770652D+02-0.5192213576726D+02 +-0.5192119252189D+02-0.5192023783287D+02-0.5191927156096D+02-0.5191829356524D+02 +-0.5191730370307D+02-0.5191630183005D+02-0.5191528780001D+02-0.5191426146503D+02 +-0.5191322267532D+02-0.5191217127930D+02-0.5191110712354D+02-0.5191003005272D+02 +-0.5190893990959D+02-0.5190783653503D+02-0.5190671976795D+02-0.5190558944528D+02 +-0.5190444540195D+02-0.5190328747089D+02-0.5190211548297D+02-0.5190092926700D+02 +-0.5189972864968D+02-0.5189851345560D+02-0.5189728350719D+02-0.5189603862472D+02 +-0.5189477862625D+02-0.5189350332759D+02-0.5189221254235D+02-0.5189090608179D+02 +-0.5188958375491D+02-0.5188824536834D+02-0.5188689072635D+02-0.5188551963080D+02 +-0.5188413188114D+02-0.5188272727435D+02-0.5188130560492D+02-0.5187986666482D+02 +-0.5187841024347D+02-0.5187693612772D+02-0.5187544410178D+02-0.5187393394724D+02 +-0.5187240544300D+02-0.5187085836524D+02-0.5186929248740D+02-0.5186770758014D+02 +-0.5186610341132D+02-0.5186447974591D+02-0.5186283634606D+02-0.5186117297093D+02 +-0.5185948937678D+02-0.5185778531685D+02-0.5185606054135D+02-0.5185431479744D+02 +-0.5185254782916D+02-0.5185075937741D+02-0.5184894917991D+02-0.5184711697117D+02 +-0.5184526248242D+02-0.5184338544160D+02-0.5184148557330D+02-0.5183956259875D+02 +-0.5183761623572D+02-0.5183564619854D+02-0.5183365219802D+02-0.5183163394142D+02 +-0.5182959113240D+02-0.5182752347098D+02-0.5182543065350D+02-0.5182331237255D+02 +-0.5182116831697D+02-0.5181899817174D+02-0.5181680161800D+02-0.5181457833297D+02 +-0.5181232798987D+02-0.5181005025795D+02-0.5180774480235D+02-0.5180541128413D+02 +-0.5180304936016D+02-0.5180065868310D+02-0.5179823890134D+02-0.5179578965895D+02 +-0.5179331059564D+02-0.5179080134665D+02-0.5178826154277D+02-0.5178569081025D+02 +-0.5178308877073D+02-0.5178045504121D+02-0.5177778923399D+02-0.5177509095659D+02 +-0.5177235981171D+02-0.5176959539717D+02-0.5176679730585D+02-0.5176396512563D+02 +-0.5176109843930D+02-0.5175819682457D+02-0.5175525985390D+02-0.5175228709457D+02 +-0.5174927810849D+02-0.5174623245221D+02-0.5174314967682D+02-0.5174002932792D+02 +-0.5173687094551D+02-0.5173367406395D+02-0.5173043821187D+02-0.5172716291215D+02 +-0.5172384768177D+02-0.5172049203182D+02-0.5171709546736D+02-0.5171365748739D+02 +-0.5171017758479D+02-0.5170665524617D+02-0.5170308995189D+02-0.5169948117592D+02 +-0.5169582838578D+02-0.5169213104249D+02-0.5168838860043D+02-0.5168460050732D+02 +-0.5168076620412D+02-0.5167688512494D+02-0.5167295669696D+02-0.5166898034036D+02 +-0.5166495546822D+02-0.5166088148646D+02-0.5165675779371D+02-0.5165258378128D+02 +-0.5164835883303D+02-0.5164408232529D+02-0.5163975362681D+02-0.5163537209858D+02 +-0.5163093709386D+02-0.5162644795799D+02-0.5162190402831D+02-0.5161730463415D+02 +-0.5161264909661D+02-0.5160793672858D+02-0.5160316683457D+02-0.5159833871062D+02 +-0.5159345164422D+02-0.5158850491424D+02-0.5158349779076D+02-0.5157842953502D+02 +-0.5157329939929D+02-0.5156810662682D+02-0.5156285045165D+02-0.5155753009857D+02 +-0.5155214478300D+02-0.5154669371088D+02-0.5154117607855D+02-0.5153559107266D+02 +-0.5152993787006D+02-0.5152421563767D+02-0.5151842353238D+02-0.5151256070096D+02 +-0.5150662627991D+02-0.5150061939535D+02-0.5149453916296D+02-0.5148838468777D+02 +-0.5148215506412D+02-0.5147584937554D+02-0.5146946669454D+02-0.5146300608264D+02 +-0.5145646659012D+02-0.5144984725596D+02-0.5144314710771D+02-0.5143636516137D+02 +-0.5142950042123D+02-0.5142255187982D+02-0.5141551851771D+02-0.5140839930344D+02 +-0.5140119319335D+02-0.5139389913149D+02-0.5138651604948D+02-0.5137904286634D+02 +-0.5137147848843D+02-0.5136382180931D+02-0.5135607170955D+02-0.5134822705665D+02 +-0.5134028670491D+02-0.5133224949527D+02-0.5132411425521D+02-0.5131587979859D+02 +-0.5130754492555D+02-0.5129910842232D+02-0.5129056906116D+02-0.5128192560017D+02 +-0.5127317678315D+02-0.5126432133956D+02-0.5125535798425D+02-0.5124628541740D+02 +-0.5123710232443D+02-0.5122780737574D+02-0.5121839922671D+02-0.5120887651745D+02 +-0.5119923787276D+02-0.5118948190193D+02-0.5117960719865D+02-0.5116961234085D+02 +-0.5115949589056D+02-0.5114925639380D+02-0.5113889238044D+02-0.5112840236408D+02 +-0.5111778484188D+02-0.5110703829447D+02-0.5109616118579D+02-0.5108515196301D+02 +-0.5107400905631D+02-0.5106273087889D+02-0.5105131582667D+02-0.5103976227836D+02 +-0.5102806859514D+02-0.5101623312071D+02-0.5100425418105D+02-0.5099213008436D+02 +-0.5097985912091D+02-0.5096743956297D+02-0.5095486966464D+02-0.5094214766176D+02 +-0.5092927177183D+02-0.5091624019384D+02-0.5090305110822D+02-0.5088970267672D+02 +-0.5087619304230D+02-0.5086252032900D+02-0.5084868264193D+02-0.5083467806710D+02 +-0.5082050467136D+02-0.5080616050232D+02-0.5079164358822D+02-0.5077695193792D+02 +-0.5076208354076D+02-0.5074703636655D+02-0.5073180836542D+02-0.5071639746782D+02 +-0.5070080158445D+02-0.5068501860613D+02-0.5066904640389D+02-0.5065288282874D+02 +-0.5063652571181D+02-0.5061997286414D+02-0.5060322207678D+02-0.5058627112067D+02 +-0.5056911774669D+02-0.5055175968555D+02-0.5053419464788D+02-0.5051642032411D+02 +-0.5049843438458D+02-0.5048023447945D+02-0.5046181823877D+02-0.5044318327247D+02 +-0.5042432717038D+02-0.5040524750226D+02-0.5038594181787D+02-0.5036640764694D+02 +-0.5034664249930D+02-0.5032664386488D+02-0.5030640921379D+02-0.5028593599640D+02 +-0.5026522164341D+02-0.5024426356594D+02-0.5022305915564D+02-0.5020160578474D+02 +-0.5017990080623D+02-0.5015794155393D+02-0.5013572534263D+02-0.5011324946826D+02 +-0.5009051120796D+02-0.5006750782030D+02-0.5004423654542D+02-0.5002069460521D+02 +-0.4999687920344D+02-0.4997278752603D+02-0.4994841674120D+02-0.4992376399966D+02 +-0.4989882643488D+02-0.4987360116327D+02-0.4984808528443D+02-0.4982227588141D+02 +-0.4979617002094D+02-0.4976976475371D+02-0.4974305711462D+02-0.4971604412309D+02 +-0.4968872278335D+02-0.4966109008469D+02-0.4963314300185D+02-0.4960487849528D+02 +-0.4957629351145D+02-0.4954738498327D+02-0.4951814983035D+02-0.4948858495939D+02 +-0.4945868726453D+02-0.4942845362775D+02-0.4939788091919D+02-0.4936696599757D+02 +-0.4933570571061D+02-0.4930409689534D+02-0.4927213637859D+02-0.4923982097740D+02 +-0.4920714749935D+02-0.4917411274309D+02-0.4914071349870D+02-0.4910694654815D+02 +-0.4907280866573D+02-0.4903829661848D+02-0.4900340716666D+02-0.4896813706420D+02 +-0.4893248305909D+02-0.4889644189392D+02-0.4886001030623D+02-0.4882318502909D+02 +-0.4878596279141D+02-0.4874834031849D+02-0.4871031433244D+02-0.4867188155262D+02 +-0.4863303869609D+02-0.4859378247804D+02-0.4855410961222D+02-0.4851401681140D+02 +-0.4847350078774D+02-0.4843255825325D+02-0.4839118592018D+02-0.4834938050138D+02 +-0.4830713871075D+02-0.4826445726356D+02-0.4822133287682D+02-0.4817776226967D+02 +-0.4813374216365D+02-0.4808926928306D+02-0.4804434035526D+02-0.4799895211091D+02 +-0.4795310128431D+02-0.4790678461358D+02-0.4785999884093D+02-0.4781274071282D+02 +-0.4776500698020D+02-0.4771679439861D+02-0.4766809972836D+02-0.4761891973461D+02 +-0.4756925118748D+02-0.4751909086208D+02-0.4746843553857D+02-0.4741728200213D+02 +-0.4736562704295D+02-0.4731346745620D+02-0.4726080004188D+02-0.4720762160479D+02 +-0.4715392895431D+02-0.4709971890425D+02-0.4704498827268D+02-0.4698973388163D+02 +-0.4693395255690D+02-0.4687764112767D+02-0.4682079642628D+02-0.4676341528777D+02 +-0.4670549454962D+02-0.4664703105122D+02-0.4658802163351D+02-0.4652846313853D+02 +-0.4646835240891D+02-0.4640768628735D+02-0.4634646161617D+02-0.4628467523671D+02 +-0.4622232398885D+02-0.4615940471037D+02-0.4609591423645D+02-0.4603184939910D+02 +-0.4596720702657D+02-0.4590198394276D+02-0.4583617696675D+02-0.4576978291218D+02 +-0.4570279858676D+02-0.4563522079176D+02-0.4556704632159D+02-0.4549827196328D+02 +-0.4542889449617D+02-0.4535891069156D+02-0.4528831731237D+02-0.4521711111299D+02 +-0.4514528883912D+02-0.4507284722768D+02-0.4499978300686D+02-0.4492609289624D+02 +-0.4485177360700D+02-0.4477682184233D+02-0.4470123429783D+02-0.4462500766219D+02 +-0.4454813861790D+02-0.4447062384219D+02-0.4439246000814D+02-0.4431364378589D+02 +-0.4423417184413D+02-0.4415404085174D+02-0.4407324747964D+02-0.4399178840285D+02 +-0.4390966030283D+02-0.4382685986996D+02-0.4374338380636D+02-0.4365922882888D+02 +-0.4357439167239D+02-0.4348886909331D+02-0.4340265787340D+02-0.4331575482384D+02 +-0.4322815678953D+02-0.4313986065369D+02-0.4305086334268D+02-0.4296116183110D+02 +-0.4287075314713D+02-0.4277963437808D+02-0.4268780267613D+02-0.4259525526436D+02 +-0.4250198944278D+02-0.4240800259471D+02-0.4231329219311D+02-0.4221785580702D+02 +-0.4212169110814D+02-0.4202479587724D+02-0.4192716801066D+02-0.4182880552657D+02 +-0.4172970657123D+02-0.4162986942478D+02-0.4152929250699D+02-0.4142797438248D+02 +-0.4132591376546D+02-0.4122310952415D+02-0.4111956068435D+02-0.4101526643252D+02 +-0.4091022611799D+02-0.4080443925436D+02-0.4069790551997D+02-0.4059062475744D+02 +-0.4048259697200D+02-0.4037382232884D+02-0.4026430114924D+02-0.4015403390548D+02 +-0.4004302121449D+02-0.3993126383031D+02-0.3981876263529D+02-0.3970551863000D+02 +-0.3959153292214D+02-0.3947680671418D+02-0.3936134129010D+02-0.3924513800125D+02 +-0.3912819825140D+02-0.3901052348125D+02-0.3889211515259D+02-0.3877297473220D+02 +-0.3865310367583D+02-0.3853250341248D+02-0.3841117532917D+02-0.3828912075654D+02 +-0.3816634095549D+02-0.3804283710513D+02-0.3791861029232D+02-0.3779366150300D+02 +-0.3766799161555D+02-0.3754160139636D+02-0.3741449149782D+02-0.3728666245883D+02 +-0.3715811470790D+02-0.3702884856900D+02-0.3689886427010D+02-0.3676816195438D+02 +-0.3663674169408D+02-0.3650460350690D+02-0.3637174737474D+02-0.3623817326473D+02 +-0.3610388115218D+02-0.3596887104531D+02-0.3583314301154D+02-0.3569669720495D+02 +-0.3555953389464D+02-0.3542165349386D+02-0.3528305658922D+02-0.3514374397011D+02 +-0.3500371665774D+02-0.3486297593358D+02-0.3472152336690D+02-0.3457936084122D+02 +-0.3443649057928D+02-0.3429291516643D+02-0.3414863757211D+02-0.3400366116934D+02 +-0.3385798975190D+02-0.3371162754922D+02-0.3356457923876D+02-0.3341684995570D+02 +-0.3326844530007D+02-0.3311937134098D+02-0.3296963461820D+02-0.3281924214079D+02 +-0.3266820138293D+02-0.3251652027694D+02-0.3236420720350D+02-0.3221127097903D+02 +-0.3205772084042D+02-0.3190356642710D+02-0.3174881776049D+02-0.3159348522098D+02 +-0.3143757952257D+02-0.3128111168511D+02-0.3112409300454D+02-0.3096653502093D+02 +-0.3080844948479D+02-0.3064984832153D+02-0.3049074359439D+02-0.3033114746593D+02 +-0.3017107215833D+02-0.3001052991254D+02-0.2984953294675D+02-0.2968809341400D+02 +-0.2952622335948D+02-0.2936393467762D+02-0.2920123906907D+02-0.2903814799805D+02 +-0.2887467265011D+02-0.2871082389066D+02-0.2854661222446D+02-0.2838204775647D+02 +-0.2821714015409D+02-0.2805189861135D+02-0.2788633181514D+02-0.2772044791378D+02 +-0.2755425448842D+02-0.2738775852723D+02-0.2722096640307D+02-0.2705388385454D+02 +-0.2688651597109D+02-0.2671886718221D+02-0.2655094125117D+02-0.2638274127348D+02 +-0.2621426968047D+02-0.2604552824823D+02-0.2587651811214D+02-0.2570723978730D+02 +-0.2553769319514D+02-0.2536787769632D+02-0.2519779213021D+02-0.2502743486110D+02 +-0.2485680383129D+02-0.2468589662112D+02-0.2451471051601D+02-0.2434324258050D+02 +-0.2417148973924D+02-0.2399944886481D+02-0.2382711687194D+02-0.2365449081810D+02 +-0.2348156800981D+02-0.2330834611404D+02-0.2313482327422D+02-0.2296099822964D+02 +-0.2278687043744D+02-0.2261244019567D+02-0.2243770876615D+02-0.2226267849517D+02 +-0.2208735293014D+02-0.2191173693001D+02-0.2173583676674D+02-0.2155966021537D+02 +-0.2138321662948D+02-0.2120651699903D+02-0.2102957398727D+02-0.2085240194340D+02 +-0.2067501688787D+02-0.2049743646710D+02-0.2031967987514D+02-0.2014176773999D+02 +-0.1996372197331D+02-0.1978556558301D+02-0.1960732244950D+02-0.1942901706755D+02 +-0.1925067425750D+02-0.1907231885074D+02-0.1889397535633D+02-0.1871566761696D+02 +-0.1853741846374D+02-0.1835924938052D+02-0.1818118018868D+02-0.1800322876380D+02 +-0.1782541079491D+02-0.1764773959582D+02-0.1747022597686D+02-0.1729287818264D+02 +-0.1711570189939D+02-0.1693870033244D+02-0.1676187435187D+02-0.1658522270158D+02 +-0.1640874226459D+02-0.1623242837596D+02-0.1605627517269D+02-0.1588027596970D+02 +-0.1570442365062D+02-0.1552871106216D+02-0.1535313140208D+02-0.1517767859145D+02 +-0.1500234762341D+02-0.1482713488228D+02-0.1465203842815D+02-0.1447705824363D+02 +-0.1430219644106D+02-0.1412745742929D+02-0.1395284804054D+02-0.1377837761854D+02 +-0.1360405806987D+02-0.1342990388081D+02-0.1325593210249D+02-0.1308216230731D+02 +-0.1290861651951D+02-0.1273531912305D+02-0.1256229674959D+02-0.1238957814960D+02 +-0.1221719404907D+02-0.1204517699438D+02-0.1187356118783D+02-0.1170238231558D+02 +-0.1153167737042D+02-0.1136148447069D+02-0.1119184267735D+02-0.1102279181034D+02 +-0.1085437226576D+02-0.1068662483495D+02-0.1051959052659D+02-0.1035331039265D+02 +-0.1018782535928D+02-0.1002317606321D+02-0.9859402694342D+01-0.9696544845323D+01 +-0.9534641368482D+01-0.9373730240659D+01-0.9213848436346D+01-0.9055031809511D+01 +-0.8897314984394D+01-0.8740731255549D+01-0.8585312497336D+01-0.8431089083029D+01 +-0.8278089813661D+01-0.8126341856676D+01-0.7975870694439D+01-0.7826700082584D+01 +-0.7678852018171D+01-0.7532346717566D+01-0.7387202603932D+01-0.7243436304187D+01 +-0.7101062655233D+01-0.6960094719270D+01-0.6820543807924D+01-0.6682419514939D+01 +-0.6545729757123D+01-0.6410480823229D+01-0.6276677430423D+01-0.6144322787958D+01 +-0.6013418667669D+01-0.5883965480867D+01-0.5755962361193D+01-0.5629407252975D+01 +-0.5504297004604D+01-0.5380627466436D+01-0.5258393592702D+01-0.5137589546863D+01 +-0.5018208809882D+01-0.4900244290793D+01-0.4783688438971D+01-0.4668533357470D+01 +-0.4554770916754D+01-0.4442392868124D+01-0.4331390956131D+01-0.4221757029192D+01 +-0.4113483147635D+01-0.4006561688322D+01-0.3900985445011D+01-0.3796747723533D+01 +-0.3693842430876D+01-0.3592264157211D+01-0.3492008249906D+01-0.3393070878541D+01 +-0.3295449089976D+01-0.3199140852531D+01-0.3104145088414D+01-0.3010461693592D+01 +-0.2918091544431D+01-0.2827036490592D+01-0.2737299333835D+01-0.2648883792669D+01 +-0.2561794453010D+01-0.2476036705393D+01-0.2391616669610D+01-0.2308541108029D+01 +-0.2226817329318D+01-0.2146453084634D+01-0.2067456458802D+01-0.1989835759339D+01 +-0.1913599406514D+01-0.1838755827812D+01-0.1765313360391D+01-0.1693280165020D+01 +-0.1622664154978D+01-0.1553472943063D+01-0.1485713809518D+01-0.1419393693186D+01 +-0.1354519207570D+01-0.1291096682842D+01-0.1229132234097D+01-0.1168631855453D+01 +-0.1109601538882D+01-0.1052047416050D+01-0.9959759208814D+00-0.9413939701484D+00 +-0.8883091590719D+00-0.8367299687430D+00-0.7866659821253D+00-0.7381281054637D+00 +-0.6911287920896D+00-0.6456822658698D+00-0.6018047418553D+00-0.5595146420441D+00 +-0.5188328045500D+00-0.4797826848498D+00-0.4423905481512D+00-0.4066856522662D+00 +-0.3727004206897D+00-0.3404706058472D+00-0.3100354427093D+00-0.2814377931599D+00 +-0.2547240189175D+00 + 0.0000000000000D+00 + 1012 0.2770741520224D+01 + 0.2150927949039D-04 0.2202124536575D-04 0.2254539478646D-04 0.2308201760180D-04 + 0.2363141055333D-04 0.2419387743865D-04 0.2476972927906D-04 0.2535928449121D-04 + 0.2596286906285D-04 0.2658081673262D-04 0.2721346917432D-04 0.2786117618535D-04 + 0.2852429587973D-04 0.2920319488569D-04 0.2989824854795D-04 0.3060984113473D-04 + 0.3133836604977D-04 0.3208422604934D-04 0.3284783346437D-04 0.3362961042788D-04 + 0.3442998910781D-04 0.3524941194536D-04 0.3608833189898D-04 0.3694721269416D-04 + 0.3782652907911D-04 0.3872676708658D-04 0.3964842430179D-04 0.4059201013679D-04 + 0.4155804611131D-04 0.4254706614023D-04 0.4355961682789D-04 0.4459625776943D-04 + 0.4565756185917D-04 0.4674411560639D-04 0.4785651945856D-04 0.4899538813222D-04 + 0.5016135095172D-04 0.5135505219602D-04 0.5257715145361D-04 0.5382832398596D-04 + 0.5510926109951D-04 0.5642067052648D-04 0.5776327681476D-04 0.5913782172693D-04 + 0.6054506464885D-04 0.6198578300785D-04 0.6346077270088D-04 0.6497084853274D-04 + 0.6651684466474D-04 0.6809961507398D-04 0.6972003402351D-04 0.7137899654355D-04 + 0.7307741892426D-04 0.7481623921999D-04 0.7659641776564D-04 0.7841893770513D-04 + 0.8028480553242D-04 0.8219505164534D-04 0.8415073091254D-04 0.8615292325379D-04 + 0.8820273423416D-04 0.9030129567206D-04 0.9244976626185D-04 0.9464933221109D-04 + 0.9690120789284D-04 0.9920663651351D-04 0.1015668907964D-03 0.1039832736813D-03 + 0.1064571190411D-03 0.1089897924148D-03 0.1115826917580D-03 0.1142372482113D-03 + 0.1169549268870D-03 0.1197372276738D-03 0.1225856860613D-03 0.1255018739831D-03 + 0.1284874006808D-03 0.1315439135877D-03 0.1346730992336D-03 0.1378766841712D-03 + 0.1411564359238D-03 0.1445141639563D-03 0.1479517206680D-03 0.1514710024102D-03 + 0.1550739505263D-03 0.1587625524179D-03 0.1625388426349D-03 0.1664049039925D-03 + 0.1703628687133D-03 0.1744149195974D-03 0.1785632912194D-03 0.1828102711544D-03 + 0.1871582012321D-03 0.1916094788209D-03 0.1961665581427D-03 0.2008319516176D-03 + 0.2056082312418D-03 0.2104980299966D-03 0.2155040432913D-03 0.2206290304405D-03 + 0.2258758161753D-03 0.2312472921908D-03 0.2367464187300D-03 0.2423762262044D-03 + 0.2481398168542D-03 0.2540403664457D-03 0.2600811260106D-03 0.2662654236245D-03 + 0.2725966662290D-03 0.2790783414953D-03 0.2857140197324D-03 0.2925073558401D-03 + 0.2994620913080D-03 0.3065820562611D-03 0.3138711715547D-03 0.3213334509168D-03 + 0.3289730031429D-03 0.3367940343406D-03 0.3448008502286D-03 0.3529978584881D-03 + 0.3613895711713D-03 0.3699806071650D-03 0.3787756947128D-03 0.3877796739964D-03 + 0.3969974997780D-03 0.4064342441040D-03 0.4160950990725D-03 0.4259853796663D-03 + 0.4361105266519D-03 0.4464761095462D-03 0.4570878296540D-03 0.4679515231757D-03 + 0.4790731643881D-03 0.4904588689006D-03 0.5021148969868D-03 0.5140476569946D-03 + 0.5262637088364D-03 0.5387697675611D-03 0.5515727070097D-03 0.5646795635561D-03 + 0.5780975399370D-03 0.5918340091694D-03 0.6058965185620D-03 0.6202927938188D-03 + 0.6350307432396D-03 0.6501184620192D-03 0.6655642366457D-03 0.6813765494038D-03 + 0.6975640829812D-03 0.7141357251847D-03 0.7311005737650D-03 0.7484679413557D-03 + 0.7662473605260D-03 0.7844485889531D-03 0.8030816147148D-03 0.8221566617048D-03 + 0.8416841951763D-03 0.8616749274129D-03 0.8821398235337D-03 0.9030901074324D-03 + 0.9245372678559D-03 0.9464930646236D-03 0.9689695349932D-03 0.9919790001731D-03 + 0.1015534071988D-02 0.1039647659698D-02 0.1064332976981D-02 0.1089603549068D-02 + 0.1115473220057D-02 0.1141956160389D-02 0.1169066874495D-02 0.1196820208634D-02 + 0.1225231358897D-02 0.1254315879409D-02 0.1284089690715D-02 0.1314569088366D-02 + 0.1345770751696D-02 0.1377711752814D-02 0.1410409565795D-02 0.1443882076088D-02 + 0.1478147590144D-02 0.1513224845264D-02 0.1549133019674D-02 0.1585891742841D-02 + 0.1623521106018D-02 0.1662041673040D-02 0.1701474491365D-02 0.1741841103378D-02 + 0.1783163557945D-02 0.1825464422244D-02 0.1868766793867D-02 0.1913094313196D-02 + 0.1958471176071D-02 0.2004922146751D-02 0.2052472571166D-02 0.2101148390486D-02 + 0.2150976154989D-02 0.2201983038264D-02 0.2254196851731D-02 0.2307646059493D-02 + 0.2362359793542D-02 0.2418367869301D-02 0.2475700801533D-02 0.2534389820612D-02 + 0.2594466889165D-02 0.2655964719104D-02 0.2718916789042D-02 0.2783357362106D-02 + 0.2849321504172D-02 0.2916845102501D-02 0.2985964884814D-02 0.3056718438800D-02 + 0.3129144232066D-02 0.3203281632551D-02 0.3279170929405D-02 0.3356853354336D-02 + 0.3436371103460D-02 0.3517767359634D-02 0.3601086315312D-02 0.3686373195913D-02 + 0.3773674283724D-02 0.3863036942351D-02 0.3954509641719D-02 0.4048141983652D-02 + 0.4143984728019D-02 0.4242089819491D-02 0.4342510414893D-02 0.4445300911185D-02 + 0.4550516974067D-02 0.4658215567249D-02 0.4768454982366D-02 0.4881294869584D-02 + 0.4996796268890D-02 0.5115021642093D-02 0.5236034905549D-02 0.5359901463622D-02 + 0.5486688242898D-02 0.5616463727181D-02 0.5749297993262D-02 0.5885262747508D-02 + 0.6024431363262D-02 0.6166878919093D-02 0.6312682237899D-02 0.6461919926891D-02 + 0.6614672418475D-02 0.6771022012045D-02 0.6931052916716D-02 0.7094851295016D-02 + 0.7262505307545D-02 0.7434105158642D-02 0.7609743143066D-02 0.7789513693721D-02 + 0.7973513430440D-02 0.8161841209859D-02 0.8354598176397D-02 0.8551887814376D-02 + 0.8753816001287D-02 0.8960491062250D-02 0.9172023825667D-02 0.9388527680122D-02 + 0.9610118632529D-02 0.9836915367568D-02 0.1006903930843D-01 0.1030661467892D-01 + 0.1054976856688D-01 0.1079863098909D-01 0.1105333495749D-01 0.1131401654696D-01 + 0.1158081496451D-01 0.1185387262003D-01 0.1213333519856D-01 0.1241935173418D-01 + 0.1271207468545D-01 0.1301166001257D-01 0.1331826725616D-01 0.1363205961778D-01 + 0.1395320404221D-01 0.1428187130150D-01 0.1461823608081D-01 0.1496247706623D-01 + 0.1531477703430D-01 0.1567532294367D-01 0.1604430602860D-01 0.1642192189452D-01 + 0.1680837061563D-01 0.1720385683464D-01 0.1760858986456D-01 0.1802278379280D-01 + 0.1844665758734D-01 0.1888043520531D-01 0.1932434570378D-01 0.1977862335297D-01 + 0.2024350775185D-01 0.2071924394615D-01 0.2120608254895D-01 0.2170427986376D-01 + 0.2221409801021D-01 0.2273580505238D-01 0.2326967512987D-01 0.2381598859160D-01 + 0.2437503213237D-01 0.2494709893234D-01 0.2553248879941D-01 0.2613150831454D-01 + 0.2674447098014D-01 0.2737169737147D-01 0.2801351529124D-01 0.2867025992742D-01 + 0.2934227401421D-01 0.3002990799646D-01 0.3073352019732D-01 0.3145347698951D-01 + 0.3219015296988D-01 0.3294393113773D-01 0.3371520307664D-01 0.3450436914006D-01 + 0.3531183864059D-01 0.3613803004319D-01 0.3698337116219D-01 0.3784829936233D-01 + 0.3873326176383D-01 0.3963871545150D-01 0.4056512768813D-01 0.4151297613205D-01 + 0.4248274905905D-01 0.4347494558865D-01 0.4449007591493D-01 0.4552866154180D-01 + 0.4659123552298D-01 0.4767834270657D-01 0.4879053998454D-01 0.4992839654695D-01 + 0.5109249414114D-01 0.5228342733595D-01 0.5350180379101D-01 0.5474824453121D-01 + 0.5602338422639D-01 0.5732787147645D-01 0.5866236910176D-01 0.6002755443915D-01 + 0.6142411964345D-01 0.6285277199472D-01 0.6431423421119D-01 0.6580924476805D-01 + 0.6733855822219D-01 0.6890294554290D-01 0.7050319444864D-01 0.7214010975008D-01 + 0.7381451369925D-01 0.7552724634520D-01 0.7727916589591D-01 0.7907114908690D-01 + 0.8090409155624D-01 0.8277890822643D-01 0.8469653369292D-01 0.8665792261951D-01 + 0.8866405014071D-01 0.9071591227111D-01 0.9281452632182D-01 0.9496093132410D-01 + 0.9715618846031D-01 0.9940138150208D-01 0.1016976172560D+00 0.1040460260169D+00 + 0.1064477620282D+00 0.1089040039508D+00 0.1114159553388D+00 0.1139848451236D+00 + 0.1166119281054D+00 0.1192984854532D+00 0.1220458252122D+00 0.1248552828197D+00 + 0.1277282216288D+00 0.1306660334408D+00 0.1336701390448D+00 0.1367419887670D+00 + 0.1398830630269D+00 0.1430948729031D+00 0.1463789607067D+00 0.1497369005636D+00 + 0.1531702990050D+00 0.1566807955666D+00 0.1602700633964D+00 0.1639398098711D+00 + 0.1676917772207D+00 0.1715277431623D+00 0.1754495215419D+00 0.1794589629856D+00 + 0.1835579555582D+00 0.1877484254317D+00 0.1920323375616D+00 0.1964116963718D+00 + 0.2008885464482D+00 0.2054649732406D+00 0.2101431037732D+00 0.2149251073635D+00 + 0.2198131963488D+00 0.2248096268222D+00 0.2299166993754D+00 0.2351367598503D+00 + 0.2404722000984D+00 0.2459254587480D+00 0.2514990219789D+00 0.2571954243047D+00 + 0.2630172493626D+00 0.2689671307106D+00 0.2750477526311D+00 0.2812618509418D+00 + 0.2876122138134D+00 0.2941016825931D+00 0.3007331526352D+00 0.3075095741362D+00 + 0.3144339529771D+00 0.3215093515700D+00 0.3287388897102D+00 0.3361257454325D+00 + 0.3436731558729D+00 0.3513844181328D+00 0.3592628901485D+00 0.3673119915621D+00 + 0.3755352045968D+00 0.3839360749336D+00 0.3925182125899D+00 0.4012852927993D+00 + 0.4102410568930D+00 0.4193893131804D+00 0.4287339378299D+00 0.4382788757486D+00 + 0.4480281414604D+00 0.4579858199819D+00 0.4681560676951D+00 0.4785431132164D+00 + 0.4891512582614D+00 0.4999848785043D+00 0.5110484244305D+00 0.5223464221834D+00 + 0.5338834744021D+00 0.5456642610510D+00 0.5576935402392D+00 0.5699761490289D+00 + 0.5825170042325D+00 0.5953211031952D+00 0.6083935245653D+00 0.6217394290472D+00 + 0.6353640601390D+00 0.6492727448516D+00 0.6634708944082D+00 0.6779640049238D+00 + 0.6927576580616D+00 0.7078575216668D+00 0.7232693503742D+00 0.7389989861895D+00 + 0.7550523590420D+00 0.7714354873073D+00 0.7881544782973D+00 0.8052155287175D+00 + 0.8226249250876D+00 0.8403890441249D+00 0.8585143530879D+00 0.8770074100784D+00 + 0.8958748642992D+00 0.9151234562658D+00 0.9347600179702D+00 0.9547914729931D+00 + 0.9752248365635D+00 0.9960672155622D+00 0.1017325808468D+01 0.1039007905241D+01 + 0.1061120887144D+01 0.1083672226499D+01 0.1106669486370D+01 0.1130120320176D+01 + 0.1154032471231D+01 0.1178413772204D+01 0.1203272144493D+01 0.1228615597523D+01 + 0.1254452227950D+01 0.1280790218774D+01 0.1307637838359D+01 0.1335003439353D+01 + 0.1362895457506D+01 0.1391322410385D+01 0.1420292895972D+01 0.1449815591159D+01 + 0.1479899250115D+01 0.1510552702537D+01 0.1541784851777D+01 0.1573604672833D+01 + 0.1606021210210D+01 0.1639043575644D+01 0.1672680945677D+01 0.1706942559091D+01 + 0.1741837714186D+01 0.1777375765901D+01 0.1813566122779D+01 0.1850418243757D+01 + 0.1887941634794D+01 0.1926145845317D+01 0.1965040464488D+01 0.2004635117287D+01 + 0.2044939460400D+01 0.2085963177919D+01 0.2127715976829D+01 0.2170207582300D+01 + 0.2213447732763D+01 0.2257446174769D+01 0.2302212657626D+01 0.2347756927812D+01 + 0.2394088723154D+01 0.2441217766767D+01 0.2489153760756D+01 0.2537906379665D+01 + 0.2587485263675D+01 0.2637900011547D+01 0.2689160173295D+01 0.2741275242598D+01 + 0.2794254648931D+01 0.2848107749430D+01 0.2902843820459D+01 0.2958472048904D+01 + 0.3015001523163D+01 0.3072441223848D+01 0.3130800014182D+01 0.3190086630094D+01 + 0.3250309670002D+01 0.3311477584285D+01 0.3373598664440D+01 0.3436681031917D+01 + 0.3500732626634D+01 0.3565761195166D+01 0.3631774278604D+01 0.3698779200090D+01 + 0.3766783052007D+01 0.3835792682854D+01 0.3905814683769D+01 0.3976855374728D+01 + 0.4048920790399D+01 0.4122016665671D+01 0.4196148420834D+01 0.4271321146438D+01 + 0.4347539587809D+01 0.4424808129241D+01 0.4503130777854D+01 0.4582511147131D+01 + 0.4662952440136D+01 0.4744457432406D+01 0.4827028454547D+01 0.4910667374509D+01 + 0.4995375579573D+01 0.5081153958042D+01 0.5168002880655D+01 0.5255922181721D+01 + 0.5344911139992D+01 0.5434968459290D+01 0.5526092248881D+01 0.5618280003639D+01 + 0.5711528583982D+01 0.5805834195616D+01 0.5901192369103D+01 0.5997597939257D+01 + 0.6095045024395D+01 0.6193527005472D+01 0.6293036505099D+01 0.6393565366487D+01 + 0.6495104632331D+01 0.6597644523660D+01 0.6701174418681D+01 0.6805682831645D+01 + 0.6911157391760D+01 0.7017584822191D+01 0.7124950919171D+01 0.7233240531258D+01 + 0.7342437538781D+01 0.7452524833500D+01 0.7563484298530D+01 0.7675296788562D+01 + 0.7787942110430D+01 0.7901399004058D+01 0.8015645123842D+01 0.8130657020509D+01 + 0.8246410123503D+01 0.8362878723950D+01 0.8480035958250D+01 0.8597853792358D+01 + 0.8716303006799D+01 0.8835353182487D+01 0.8954972687391D+01 0.9075128664130D+01 + 0.9195787018538D+01 0.9316912409273D+01 0.9438468238543D+01 0.9560416644000D+01 + 0.9682718491880D+01 0.9805333371460D+01 0.9928219590896D+01 0.1005133417453D+02 + 0.1017463286171D+02 0.1029807010722D+02 0.1042159908344D+02 0.1054517168417D+02 + 0.1066873853037D+02 0.1079224897780D+02 0.1091565112659D+02 0.1103889183301D+02 + 0.1116191672323D+02 0.1128467020944D+02 0.1140709550823D+02 0.1152913466133D+02 + 0.1165072855885D+02 0.1177181696506D+02 0.1189233854680D+02 0.1201223090454D+02 + 0.1213143060625D+02 0.1224987322407D+02 0.1236749337400D+02 0.1248422475837D+02 + 0.1260000021157D+02 0.1271475174875D+02 0.1282841061773D+02 0.1294090735413D+02 + 0.1305217183979D+02 0.1316213336451D+02 0.1327072069111D+02 0.1337786212400D+02 + 0.1348348558110D+02 0.1358751866928D+02 0.1368988876325D+02 0.1379052308804D+02 + 0.1388934880491D+02 0.1398629310084D+02 0.1408128328150D+02 0.1417424686776D+02 + 0.1426511169568D+02 0.1435380601989D+02 0.1444025862047D+02 0.1452439891313D+02 + 0.1460615706273D+02 0.1468546410000D+02 0.1476225204147D+02 0.1483645401237D+02 + 0.1490800437259D+02 0.1497683884540D+02 0.1504289464893D+02 0.1510611063019D+02 + 0.1516642740155D+02 0.1522378747941D+02 0.1527813542502D+02 0.1532941798703D+02 + 0.1537758424592D+02 0.1542258575964D+02 0.1546437671057D+02 0.1550291405346D+02 + 0.1553815766392D+02 0.1557007048740D+02 0.1559861868825D+02 0.1562377179849D+02 + 0.1564550286611D+02 0.1566378860245D+02 0.1567860952827D+02 0.1568995011828D+02 + 0.1569779894358D+02 0.1570214881171D+02 0.1570299690387D+02 0.1570034490889D+02 + 0.1569419915342D+02 0.1568457072811D+02 0.1567147560898D+02 0.1565493477391D+02 + 0.1563497431333D+02 0.1561162553504D+02 0.1558492506233D+02 0.1555491492507D+02 + 0.1552164264320D+02 0.1548516130217D+02 0.1544552961962D+02 0.1540281200312D+02 + 0.1535707859803D+02 0.1530840532536D+02 0.1525687390884D+02 0.1520257189079D+02 + 0.1514559263632D+02 0.1508603532531D+02 0.1502400493172D+02 0.1495961218971D+02 + 0.1489297354623D+02 0.1482421109950D+02 0.1475345252306D+02 0.1468083097499D+02 + 0.1460648499184D+02 0.1453055836709D+02 0.1445320001360D+02 0.1437456381003D+02 + 0.1429480843075D+02 0.1421409715909D+02 0.1413259768392D+02 0.1405048187912D+02 + 0.1396792556614D+02 0.1388510825940D+02 0.1380221289467D+02 0.1371942554036D+02 + 0.1363693509198D+02 0.1355493294972D+02 0.1347361267958D+02 0.1339316965818D+02 + 0.1331380070165D+02 0.1323570367897D+02 0.1315907711016D+02 0.1308411975004D+02 + 0.1301103015787D+02 0.1294000625373D+02 0.1287124486230D+02 0.1280494124477D+02 + 0.1274128861984D+02 0.1268047767460D+02 0.1262269606643D+02 0.1256812791682D+02 + 0.1251695329838D+02 0.1246934771604D+02 0.1242548158392D+02 0.1238551969900D+02 + 0.1234962071295D+02 0.1231793660373D+02 0.1229061214824D+02 0.1226778439767D+02 + 0.1224958215706D+02 0.1223612547078D+02 0.1222752511553D+02 0.1222388210258D+02 + 0.1222528719100D+02 0.1223182041366D+02 0.1224355061775D+02 0.1226053502171D+02 + 0.1228281879023D+02 0.1231043462935D+02 0.1234340240339D+02 0.1238172877543D+02 + 0.1242540687338D+02 0.1247441598324D+02 0.1252872127141D+02 0.1258827353770D+02 + 0.1265300900087D+02 0.1272284911822D+02 0.1279770044081D+02 0.1287745450601D+02 + 0.1296198776857D+02 0.1305116157186D+02 0.1314482216032D+02 0.1324280073454D+02 + 0.1334491354991D+02 0.1345096205988D+02 0.1356073310471D+02 0.1367399914649D+02 + 0.1379051855093D+02 0.1391003591655D+02 0.1403228245150D+02 0.1415697639825D+02 + 0.1428382350615D+02 0.1441251755180D+02 0.1454274090682D+02 0.1467416515265D+02 + 0.1480645174180D+02 0.1493925270450D+02 0.1507221140012D+02 0.1520496331175D+02 + 0.1533713688305D+02 0.1546835439544D+02 0.1559823288411D+02 0.1572638509088D+02 + 0.1585242045188D+02 0.1597594611769D+02 0.1609656800349D+02 0.1621389186673D+02 + 0.1632752440935D+02 0.1643707440175D+02 0.1654215382521D+02 0.1664237902974D+02 + 0.1673737190368D+02 0.1682676105166D+02 0.1691018297723D+02 0.1698728326633D+02 + 0.1705771776761D+02 0.1712115376582D+02 0.1717727114395D+02 0.1722576353007D+02 + 0.1726633942470D+02 0.1729872330429D+02 0.1732265669667D+02 0.1733789922408D+02 + 0.1734422960952D+02 0.1734144664198D+02 0.1732937009656D+02 0.1730784160492D+02 + 0.1727672547225D+02 0.1723590943644D+02 0.1718530536559D+02 0.1712484989008D+02 + 0.1705450496536D+02 0.1697425836203D+02 0.1688412407975D+02 0.1678414268193D+02 + 0.1667438154808D+02 0.1655493504124D+02 0.1642592458792D+02 0.1628749866833D+02 + 0.1613983271513D+02 0.1598312891883D+02 0.1581761593876D+02 0.1564354851859D+02 + 0.1546120700566D+02 0.1527089677411D+02 0.1507294755170D+02 0.1486771265109D+02 + 0.1465556810624D+02 0.1443691171558D+02 0.1421216199343D+02 0.1398175703206D+02 + 0.1374615327696D+02 0.1350582421831D+02 0.1326125900230D+02 0.1301296096613D+02 + 0.1276144610103D+02 0.1250724144826D+02 0.1225088343315D+02 0.1199291614280D+02 + 0.1173388955369D+02 0.1147435771520D+02 0.1121487689618D+02 0.1095600370143D+02 + 0.1069829316549D+02 0.1044229683153D+02 0.1018856082317D+02 0.9937623917321D+01 + 0.9690015626445D+01 0.9446254298643D+01 0.9206845244038D+01 0.8972278896087D+01 + 0.8743029016360D+01 0.8519550951297D+01 0.8302279949355D+01 0.8091629546790D+01 + 0.7887990030116D+01 0.7691726983014D+01 0.7503179925129D+01 0.7322661049902D+01 + 0.7150454068046D+01 0.6986813162918D+01 0.6831962063451D+01 0.6686093239819D+01 + 0.6549367226364D+01 0.6421912075717D+01 0.6303822947394D+01 0.6195161833447D+01 + 0.6095957423078D+01 0.6006205107394D+01 0.5925867124779D+01 0.5854872846611D+01 + 0.5793119202371D+01 0.5740471242429D+01 0.5696762836121D+01 0.5661797502031D+01 + 0.5635349366701D+01 0.5617164247353D+01 0.5606960853570D+01 0.5604432102259D+01 + 0.5609246539649D+01 0.5621049863505D+01 0.5639466538232D+01 0.5664101495024D+01 + 0.5694541908766D+01 0.5730359042993D+01 0.5771110153784D+01 0.5816340443192D+01 + 0.5865585052475D+01 0.5918371085180D+01 0.5974219649957D+01 0.6032647912832D+01 + 0.6093171148637D+01 0.6155304781260D+01 0.6218566402475D+01 0.6282477759234D+01 + 0.6346566699475D+01 0.6410369066815D+01 0.6473430534781D+01 0.6535308371644D+01 + 0.6595573127395D+01 0.6653810234872D+01 0.6709621517670D+01 0.6762626598041D+01 + 0.6812464198680D+01 0.6858793332986D+01 0.6901294379138D+01 0.6939670034070D+01 + 0.6973646144233D+01 0.7002972410830D+01 0.7027422967990D+01 0.7046796833200D+01 + 0.7060918230061D+01 0.7069636784259D+01 0.7072827594374D+01 0.7070391179926D+01 + 0.7062253309715D+01 0.7048364714231D+01 0.7028700686483D+01 0.7003260576238D+01 + 0.6972067183121D+01 0.6935166054562D+01 0.6892624694966D+01 0.6844531692843D+01 + 0.6790995772965D+01 0.6732144780827D+01 0.6668124606899D+01 0.6599098058289D+01 + 0.6525243685473D+01 0.6446754571799D+01 0.6363837093418D+01 0.6276709657188D+01 + 0.6185601423998D+01 0.6090751024726D+01 0.5992405275866D+01 0.5890817901556D+01 + 0.5786248268476D+01 0.5678960139726D+01 0.5569220453475D+01 0.5457298131760D+01 + 0.5343462924443D+01 0.5227984292928D+01 0.5111130337809D+01 0.4993166774192D+01 + 0.4874355958030D+01 0.4754955966341D+01 0.4635219733799D+01 0.4515394247714D+01 + 0.4395719803061D+01 0.4276429318764D+01 0.4157747716089D+01 0.4039891359594D+01 + 0.3923067560758D+01 0.3807474144035D+01 0.3693299074769D+01 0.3580720148118D+01 + 0.3469904737816D+01 0.3361009603367D+01 0.3254180754011D+01 0.3149553367571D+01 + 0.3047251762116D+01 0.2947389418162D+01 0.2850069049006D+01 0.2755382716614D+01 + 0.2663411990420D+01 0.2574228146230D+01 0.2487892402405D+01 0.2404456190400D+01 + 0.2323961456713D+01 0.2246440993268D+01 0.2171918793250D+01 0.2100410429420D+01 + 0.2031923451965D+01 0.1966457802972D+01 0.1904006244666D+01 0.1844554798640D+01 + 0.1788083193345D+01 0.1734565317240D+01 0.1683969675070D+01 0.1636259844862D+01 + 0.1591394933364D+01 0.1549330027746D+01 0.1510016641546D+01 0.1473403152964D+01 + 0.1439435233770D+01 0.1408056267219D+01 0.1379207753531D+01 0.1352829701650D+01 + 0.1328861006133D+01 0.1307239808175D+01 0.1287903839946D+01 0.1270790751526D+01 + 0.1255838419882D+01 0.1242985239474D+01 0.1232170394175D+01 0.1223334110328D+01 + 0.1216417890857D+01 0.1211364730456D+01 0.1208119311934D+01 0.1206628183910D+01 + 0.1206839920052D+01 0.1208705260142D+01 0.1212177233248D+01 0.1217211263310D+01 + 0.1223765257423D+01 0.1231799677111D+01 0.1241277592815D+01 0.1252164721788D+01 + 0.1264429449524D+01 0.1278042834732D+01 0.1292978597814D+01 0.1309213092627D+01 + 0.1326725261233D+01 0.1345496571135D+01 0.1365510934358D+01 0.1386754607532D+01 + 0.1409215426363D+01 0.1433003097507D+01 0.1458223277591D+01 0.1484860699421D+01 + 0.1512902583279D+01 0.1542338542721D+01 0.1573160498496D+01 0.1605362600812D+01 + 0.1638941160170D+01 0.1673894586973D+01 0.1710223340083D+01 0.1747929884514D+01 + 7 1012 + 1 0 -1 -511.89150 + 2 0 -1 -58.80097 + 2 1 1 -50.61290 + 2 1 -2 -49.69692 + 3 0 -1 -5.52718 + 3 1 1 -3.14309 + 3 1 -2 -3.03034 + 0.2123373461549D-04 0.2173914995400D-04 0.2225659296114D-04 0.2278634977738D-04 + 0.2332871334728D-04 0.2388398358121D-04 0.2445246752083D-04 0.2503447950857D-04 + 0.2563034136106D-04 0.2624038254674D-04 0.2686494036763D-04 0.2750436014548D-04 + 0.2815899541226D-04 0.2882920810522D-04 0.2951536876657D-04 0.3021785674791D-04 + 0.3093706041946D-04 0.3167337738432D-04 0.3242721469777D-04 0.3319898909177D-04 + 0.3398912720483D-04 0.3479806581728D-04 0.3562625209215D-04 0.3647414382175D-04 + 0.3734220968012D-04 0.3823092948144D-04 0.3914079444457D-04 0.4007230746391D-04 + 0.4102598338660D-04 0.4200234929636D-04 0.4300194480406D-04 0.4402532234512D-04 + 0.4507304748402D-04 0.4614569922601D-04 0.4724387033618D-04 0.4836816766617D-04 + 0.4951921248852D-04 0.5069764083903D-04 0.5190410386721D-04 0.5313926819498D-04 + 0.5440381628400D-04 0.5569844681152D-04 0.5702387505533D-04 0.5838083328767D-04 + 0.5977007117859D-04 0.6119235620880D-04 0.6264847409228D-04 0.6413922920902D-04 + 0.6566544504782D-04 0.6722796465978D-04 0.6882765112238D-04 0.7046538801462D-04 + 0.7214207990339D-04 0.7385865284136D-04 0.7561605487667D-04 0.7741525657465D-04 + 0.7925725155197D-04 0.8114305702331D-04 0.8307371436110D-04 0.8505028966841D-04 + 0.8707387436545D-04 0.8914558578994D-04 0.9126656781168D-04 0.9343799146165D-04 + 0.9566105557602D-04 0.9793698745538D-04 0.1002670435396D-03 0.1026525100984D-03 + 0.1050947039390D-03 0.1075949731294D-03 0.1101546977394D-03 0.1127752905997D-03 + 0.1154581980775D-03 0.1182049008719D-03 0.1210169148270D-03 0.1238957917652D-03 + 0.1268431203390D-03 0.1298605269045D-03 0.1329496764137D-03 0.1361122733297D-03 + 0.1393500625619D-03 0.1426648304247D-03 0.1460584056178D-03 0.1495326602303D-03 + 0.1530895107681D-03 0.1567309192056D-03 0.1604588940629D-03 0.1642754915072D-03 + 0.1681828164816D-03 0.1721830238593D-03 0.1762783196258D-03 0.1804709620887D-03 + 0.1847632631165D-03 0.1891575894056D-03 0.1936563637785D-03 0.1982620665115D-03 + 0.2029772366947D-03 0.2078044736231D-03 0.2127464382210D-03 0.2178058545005D-03 + 0.2229855110531D-03 0.2282882625778D-03 0.2337170314442D-03 0.2392748092933D-03 + 0.2449646586752D-03 0.2507897147258D-03 0.2567531868833D-03 0.2628583606444D-03 + 0.2691085993625D-03 0.2755073460880D-03 0.2820581254518D-03 0.2887645455935D-03 + 0.2956303001344D-03 0.3026591701977D-03 0.3098550264756D-03 0.3172218313454D-03 + 0.3247636410353D-03 0.3324846078408D-03 0.3403889823939D-03 0.3484811159850D-03 + 0.3567654629401D-03 0.3652465830528D-03 0.3739291440747D-03 0.3828179242637D-03 + 0.3919178149916D-03 0.4012338234146D-03 0.4107710752045D-03 0.4205348173457D-03 + 0.4305304209971D-03 0.4407633844209D-03 0.4512393359813D-03 0.4619640372121D-03 + 0.4729433859575D-03 0.4841834195856D-03 0.4956903182785D-03 0.5074704083979D-03 + 0.5195301659314D-03 0.5318762200182D-03 0.5445153565579D-03 0.5574545219044D-03 + 0.5707008266453D-03 0.5842615494708D-03 0.5981441411326D-03 0.6123562284955D-03 + 0.6269056186847D-03 0.6418003033287D-03 0.6570484629028D-03 0.6726584711734D-03 + 0.6886388997468D-03 0.7049985227240D-03 0.7217463214642D-03 0.7388914894603D-03 + 0.7564434373277D-03 0.7744117979097D-03 0.7928064315026D-03 0.8116374312024D-03 + 0.8309151283763D-03 0.8506500982622D-03 0.8708531656989D-03 0.8915354109894D-03 + 0.9127081759015D-03 0.9343830698083D-03 0.9565719759715D-03 0.9792870579714D-03 + 0.1002540766287D-02 0.1026345845027D-02 0.1050715338824D-02 0.1075662599879D-02 + 0.1101201295181D-02 0.1127345413883D-02 0.1154109274864D-02 0.1181507534450D-02 + 0.1209555194328D-02 0.1238267609637D-02 0.1267660497252D-02 0.1297749944251D-02 + 0.1328552416593D-02 0.1360084767981D-02 0.1392364248945D-02 0.1425408516127D-02 + 0.1459235641785D-02 0.1493864123514D-02 0.1529312894196D-02 0.1565601332181D-02 + 0.1602749271697D-02 0.1640777013510D-02 0.1679705335822D-02 0.1719555505429D-02 + 0.1760349289133D-02 0.1802108965417D-02 0.1844857336390D-02 0.1888617740010D-02 + 0.1933414062589D-02 0.1979270751585D-02 0.2026212828687D-02 0.2074265903209D-02 + 0.2123456185786D-02 0.2173810502385D-02 0.2225356308647D-02 0.2278121704551D-02 + 0.2332135449417D-02 0.2387426977257D-02 0.2444026412476D-02 0.2501964585936D-02 + 0.2561273051389D-02 0.2621984102285D-02 0.2684130788965D-02 0.2747746936258D-02 + 0.2812867161465D-02 0.2879526892772D-02 0.2947762388071D-02 0.3017610754222D-02 + 0.3089109966753D-02 0.3162298890003D-02 0.3237217297741D-02 0.3313905894238D-02 + 0.3392406335837D-02 0.3472761253004D-02 0.3555014272883D-02 0.3639210042377D-02 + 0.3725394251736D-02 0.3813613658698D-02 0.3903916113173D-02 0.3996350582488D-02 + 0.4090967177209D-02 0.4187817177547D-02 0.4286953060364D-02 0.4388428526794D-02 + 0.4492298530489D-02 0.4598619306504D-02 0.4707448400838D-02 0.4818844700646D-02 + 0.4932868465127D-02 0.5049581357120D-02 0.5169046475404D-02 0.5291328387739D-02 + 0.5416493164639D-02 0.5544608413917D-02 0.5675743316002D-02 0.5809968660057D-02 + 0.5947356880904D-02 0.6087982096781D-02 0.6231920147946D-02 0.6379248636155D-02 + 0.6530046965011D-02 0.6684396381234D-02 0.6842380016839D-02 0.7004082932273D-02 + 0.7169592160503D-02 0.7338996752102D-02 0.7512387821327D-02 0.7689858593235D-02 + 0.7871504451850D-02 0.8057422989391D-02 0.8247714056607D-02 0.8442479814225D-02 + 0.8641824785540D-02 0.8845855910175D-02 0.9054682599025D-02 0.9268416790430D-02 + 0.9487173007575D-02 0.9711068417172D-02 0.9940222889430D-02 0.1017475905935D-01 + 0.1041480238936D-01 0.1066048123337D-01 0.1091192690214D-01 0.1116927373022D-01 + 0.1143265914425D-01 0.1170222373276D-01 0.1197811131760D-01 0.1226046902681D-01 + 0.1254944736912D-01 0.1284520031015D-01 0.1314788535014D-01 0.1345766360348D-01 + 0.1377469987990D-01 0.1409916276750D-01 0.1443122471744D-01 0.1477106213063D-01 + 0.1511885544620D-01 0.1547478923187D-01 0.1583905227632D-01 0.1621183768351D-01 + 0.1659334296907D-01 0.1698377015868D-01 0.1738332588869D-01 0.1779222150874D-01 + 0.1821067318670D-01 0.1863890201578D-01 0.1907713412394D-01 0.1952560078568D-01 + 0.1998453853608D-01 0.2045418928739D-01 0.2093480044805D-01 0.2142662504416D-01 + 0.2192992184360D-01 0.2244495548276D-01 0.2297199659585D-01 0.2351132194704D-01 + 0.2406321456527D-01 0.2462796388197D-01 0.2520586587156D-01 0.2579722319499D-01 + 0.2640234534617D-01 0.2702154880148D-01 0.2765515717239D-01 0.2830350136121D-01 + 0.2896691972007D-01 0.2964575821319D-01 0.3034037058244D-01 0.3105111851634D-01 + 0.3177837182251D-01 0.3252250860359D-01 0.3328391543683D-01 0.3406298755727D-01 + 0.3486012904465D-01 0.3567575301409D-01 0.3651028181063D-01 0.3736414720771D-01 + 0.3823779060956D-01 0.3913166325773D-01 0.4004622644169D-01 0.4098195171364D-01 + 0.4193932110758D-01 0.4291882736274D-01 0.4392097415138D-01 0.4494627631115D-01 + 0.4599526008193D-01 0.4706846334735D-01 0.4816643588104D-01 0.4928973959763D-01 + 0.5043894880863D-01 0.5161465048329D-01 0.5281744451445D-01 0.5404794398948D-01 + 0.5530677546647D-01 0.5659457925562D-01 0.5791200970601D-01 0.5925973549779D-01 + 0.6063843993988D-01 0.6204882127328D-01 0.6349159298001D-01 0.6496748409788D-01 + 0.6647723954103D-01 0.6802162042643D-01 0.6960140440641D-01 0.7121738600725D-01 + 0.7287037697395D-01 0.7456120662128D-01 0.7629072219118D-01 0.7805978921657D-01 + 0.7986929189166D-01 0.8172013344892D-01 0.8361323654265D-01 0.8554954363940D-01 + 0.8753001741513D-01 0.8955564115940D-01 0.9162741918654D-01 0.9374637725383D-01 + 0.9591356298698D-01 0.9813004631275D-01 0.1003969198990D+00 0.1027152996019D+00 + 0.1050863249211D+00 0.1075111594618D+00 0.1099909914051D+00 0.1125270339855D+00 + 0.1151205259766D+00 0.1177727321842D+00 0.1204849439476D+00 0.1232584796489D+00 + 0.1260946852301D+00 0.1289949347182D+00 0.1319606307590D+00 0.1349932051583D+00 + 0.1380941194317D+00 0.1412648653632D+00 0.1445069655708D+00 0.1478219740820D+00 + 0.1512114769165D+00 0.1546770926778D+00 0.1582204731535D+00 0.1618433039236D+00 + 0.1655473049771D+00 0.1693342313383D+00 0.1732058737000D+00 0.1771640590662D+00 + 0.1812106514032D+00 0.1853475522988D+00 0.1895767016304D+00 0.1939000782413D+00 + 0.1983197006251D+00 0.2028376276193D+00 0.2074559591063D+00 0.2121768367234D+00 + 0.2170024445803D+00 0.2219350099852D+00 0.2269768041788D+00 0.2321301430764D+00 + 0.2373973880172D+00 0.2427809465221D+00 0.2482832730585D+00 0.2539068698131D+00 + 0.2596542874715D+00 0.2655281260047D+00 0.2715310354636D+00 0.2776657167793D+00 + 0.2839349225700D+00 0.2903414579550D+00 0.2968881813739D+00 0.3035780054119D+00 + 0.3104138976312D+00 0.3173988814070D+00 0.3245360367687D+00 0.3318285012460D+00 + 0.3392794707188D+00 0.3468922002717D+00 0.3546700050516D+00 0.3626162611285D+00 + 0.3707344063591D+00 0.3790279412529D+00 0.3875004298396D+00 0.3961555005386D+00 + 0.4049968470283D+00 0.4140282291162D+00 0.4232534736091D+00 0.4326764751811D+00 + 0.4423011972414D+00 0.4521316727988D+00 0.4621720053237D+00 0.4724263696067D+00 + 0.4828990126121D+00 0.4935942543268D+00 0.5045164886027D+00 0.5156701839924D+00 + 0.5270598845772D+00 0.5386902107861D+00 0.5505658602051D+00 0.5626916083760D+00 + 0.5750723095830D+00 0.5877128976270D+00 0.6006183865849D+00 0.6137938715547D+00 + 0.6272445293836D+00 0.6409756193782D+00 0.6549924839961D+00 0.6693005495166D+00 + 0.6839053266899D+00 0.6988124113627D+00 0.7140274850788D+00 0.7295563156538D+00 + 0.7454047577210D+00 0.7615787532478D+00 0.7780843320207D+00 0.7949276120969D+00 + 0.8121148002200D+00 0.8296521921997D+00 0.8475461732513D+00 0.8658032182945D+00 + 0.8844298922086D+00 0.9034328500427D+00 0.9228188371772D+00 0.9425946894360D+00 + 0.9627673331456D+00 0.9833437851400D+00 0.1004331152707D+01 0.1025736633476D+01 + 0.1047567515241D+01 0.1069831175720D+01 0.1092535082243D+01 0.1115686791375D+01 + 0.1139293948457D+01 0.1163364287075D+01 0.1187905628445D+01 0.1212925880722D+01 + 0.1238433038208D+01 0.1264435180485D+01 0.1290940471443D+01 0.1317957158220D+01 + 0.1345493570030D+01 0.1373558116898D+01 0.1402159288280D+01 0.1431305651569D+01 + 0.1461005850494D+01 0.1491268603389D+01 0.1522102701342D+01 0.1553517006218D+01 + 0.1585520448546D+01 0.1618122025271D+01 0.1651330797361D+01 0.1685155887276D+01 + 0.1719606476280D+01 0.1754691801602D+01 0.1790421153434D+01 0.1826803871767D+01 + 0.1863849343063D+01 0.1901566996742D+01 0.1939966301501D+01 0.1979056761446D+01 + 0.2018847912032D+01 0.2059349315815D+01 0.2100570557999D+01 0.2142521241790D+01 + 0.2185210983528D+01 0.2228649407614D+01 0.2272846141215D+01 0.2317810808747D+01 + 0.2363553026124D+01 0.2410082394775D+01 0.2457408495423D+01 0.2505540881617D+01 + 0.2554489073015D+01 0.2604262548407D+01 0.2654870738488D+01 0.2706323018355D+01 + 0.2758628699743D+01 0.2811797022979D+01 0.2865837148659D+01 0.2920758149043D+01 + 0.2976568999160D+01 0.3033278567615D+01 0.3090895607108D+01 0.3149428744640D+01 + 0.3208886471423D+01 0.3269277132479D+01 0.3330608915918D+01 0.3392889841912D+01 + 0.3456127751341D+01 0.3520330294118D+01 0.3585504917195D+01 0.3651658852234D+01 + 0.3718799102956D+01 0.3786932432154D+01 0.3856065348377D+01 0.3926204092282D+01 + 0.3997354622651D+01 0.4069522602076D+01 0.4142713382310D+01 0.4216931989288D+01 + 0.4292183107814D+01 0.4368471065927D+01 0.4445799818928D+01 0.4524172933100D+01 + 0.4603593569097D+01 0.4684064465021D+01 0.4765587919192D+01 0.4848165772611D+01 + 0.4931799391130D+01 0.5016489647323D+01 0.5102236902085D+01 0.5189040985952D+01 + 0.5276901180158D+01 0.5365816197444D+01 0.5455784162617D+01 0.5546802592894D+01 + 0.5638868378017D+01 0.5731977760181D+01 0.5826126313769D+01 0.5921308924927D+01 + 0.6017519770983D+01 0.6114752299744D+01 0.6212999208681D+01 0.6312252424025D+01 + 0.6412503079799D+01 0.6513741496818D+01 0.6615957161666D+01 0.6719138705689D+01 + 0.6823273884037D+01 0.6928349554769D+01 0.7034351658067D+01 0.7141265195588D+01 + 0.7249074209985D+01 0.7357761764637D+01 0.7467309923627D+01 0.7577699732003D+01 + 0.7688911196366D+01 0.7800923265826D+01 0.7913713813378D+01 0.8027259617727D+01 + 0.8141536345630D+01 0.8256518534789D+01 0.8372179577355D+01 0.8488491704090D+01 + 0.8605425969248D+01 0.8722952236222D+01 0.8841039164025D+01 0.8959654194655D+01 + 0.9078763541413D+01 0.9198332178230D+01 0.9318323830066D+01 0.9438700964464D+01 + 0.9559424784293D+01 0.9680455221780D+01 0.9801750933887D+01 0.9923269299099D+01 + 0.1004496641570D+02 0.1016679710163D+02 0.1028871489593D+02 0.1041067206198D+02 + 0.1053261959239D+02 0.1065450721594D+02 0.1077628340626D+02 0.1089789539267D+02 + 0.1101928917306D+02 0.1114040952889D+02 0.1126120004259D+02 0.1138160311709D+02 + 0.1150155999788D+02 0.1162101079752D+02 0.1173989452270D+02 0.1185814910389D+02 + 0.1197571142774D+02 0.1209251737221D+02 0.1220850184455D+02 0.1232359882222D+02 + 0.1243774139668D+02 0.1255086182033D+02 0.1266289155645D+02 0.1277376133233D+02 + 0.1288340119558D+02 0.1299174057364D+02 0.1309870833671D+02 0.1320423286383D+02 + 0.1330824211245D+02 0.1341066369131D+02 0.1351142493681D+02 0.1361045299271D+02 + 0.1370767489335D+02 0.1380301765027D+02 0.1389640834224D+02 0.1398777420882D+02 + 0.1407704274716D+02 0.1416414181234D+02 0.1424899972093D+02 0.1433154535791D+02 + 0.1441170828680D+02 0.1448941886294D+02 0.1456460834990D+02 0.1463720903887D+02 + 0.1470715437095D+02 0.1477437906225D+02 0.1483881923166D+02 0.1490041253114D+02 + 0.1495909827839D+02 0.1501481759178D+02 0.1506751352732D+02 0.1511713121747D+02 + 0.1516361801165D+02 0.1520692361818D+02 0.1524700024742D+02 0.1528380275595D+02 + 0.1531728879140D+02 0.1534741893776D+02 0.1537415686084D+02 0.1539746945363D+02 + 0.1541732698111D+02 0.1543370322439D+02 0.1544657562364D+02 0.1545592541956D+02 + 0.1546173779302D+02 0.1546400200242D+02 0.1546271151843D+02 0.1545786415570D+02 + 0.1544946220111D+02 0.1543751253809D+02 0.1542202676661D+02 0.1540302131844D+02 + 0.1538051756708D+02 0.1535454193202D+02 0.1532512597682D+02 0.1529230650045D+02 + 0.1525612562157D+02 0.1521663085508D+02 0.1517387518057D+02 0.1512791710213D+02 + 0.1507882069905D+02 0.1502665566690D+02 0.1497149734847D+02 0.1491342675424D+02 + 0.1485253057170D+02 0.1478890116319D+02 0.1472263655178D+02 0.1465384039476D+02 + 0.1458262194423D+02 0.1450909599456D+02 0.1443338281613D+02 0.1435560807511D+02 + 0.1427590273888D+02 0.1419440296685D+02 0.1411124998625D+02 0.1402658995277D+02 + 0.1394057379573D+02 0.1385335704764D+02 0.1376509965795D+02 0.1367596579089D+02 + 0.1358612360737D+02 0.1349574503081D+02 0.1340500549696D+02 0.1331408368786D+02 + 0.1322316124986D+02 0.1313242249599D+02 0.1304205409292D+02 0.1295224473262D+02 + 0.1286318478926D+02 0.1277506596148D+02 0.1268808090072D+02 0.1260242282594D+02 + 0.1251828512526D+02 0.1243586094535D+02 0.1235534276899D+02 0.1227692198172D+02 + 0.1220078842830D+02 0.1212712995982D+02 0.1205613197253D+02 0.1198797693913D+02 + 0.1192284393379D+02 0.1186090815186D+02 0.1180234042546D+02 0.1174730673615D+02 + 0.1169596772603D+02 0.1164847820834D+02 0.1160498667924D+02 0.1156563483188D+02 + 0.1153055707436D+02 0.1149988005301D+02 0.1147372218250D+02 0.1145219318434D+02 + 0.1143539363525D+02 0.1142341452711D+02 0.1141633683999D+02 0.1141423112993D+02 + 0.1141715713298D+02 0.1142516338731D+02 0.1143828687474D+02 0.1145655268355D+02 + 0.1147997369390D+02 0.1150855028761D+02 0.1154227008374D+02 0.1158110770138D+02 + 0.1162502455129D+02 0.1167396865756D+02 0.1172787451079D+02 0.1178666295396D+02 + 0.1185024110228D+02 0.1191850229803D+02 0.1199132610159D+02 0.1206857831946D+02 + 0.1215011107019D+02 0.1223576288907D+02 0.1232535887199D+02 0.1241871085933D+02 + 0.1251561765997D+02 0.1261586531600D+02 0.1271922740805D+02 0.1282546540151D+02 + 0.1293432903330D+02 0.1304555673916D+02 0.1315887612096D+02 0.1327400445348D+02 + 0.1339064923005D+02 0.1350850874625D+02 0.1362727272054D+02 0.1374662295087D+02 + 0.1386623400591D+02 0.1398577394943D+02 0.1410490509638D+02 0.1422328479880D+02 + 0.1434056625987D+02 0.1445639937388D+02 0.1457043159027D+02 0.1468230879914D+02 + 0.1479167623614D+02 0.1489817940404D+02 0.1500146500841D+02 0.1510118190471D+02 + 0.1519698205391D+02 0.1528852148379D+02 0.1537546125281D+02 0.1545746841364D+02 + 0.1553421697307D+02 0.1560538884523D+02 0.1567067479483D+02 0.1572977536717D+02 + 0.1578240180176D+02 0.1582827692612D+02 0.1586713602663D+02 0.1589872769311D+02 + 0.1592281463392D+02 0.1593917445849D+02 0.1594760042409D+02 0.1594790214378D+02 + 0.1593990625272D+02 0.1592345702984D+02 0.1589841697221D+02 0.1586466731948D+02 + 0.1582210852585D+02 0.1577066067732D+02 0.1571026385193D+02 0.1564087842120D+02 + 0.1556248529064D+02 0.1547508607802D+02 0.1537870322780D+02 0.1527338006062D+02 + 0.1515918075676D+02 0.1503619027308D+02 0.1490451419267D+02 0.1476427850715D+02 + 0.1461562933169D+02 0.1445873255288D+02 0.1429377341010D+02 0.1412095601137D+02 + 0.1394050278444D+02 0.1375265386499D+02 0.1355766642312D+02 0.1335581393054D+02 + 0.1314738537038D+02 0.1293268439219D+02 0.1271202841511D+02 0.1248574768189D+02 + 0.1225418426740D+02 0.1201769104500D+02 0.1177663061449D+02 0.1153137419578D+02 + 0.1128230049248D+02 0.1102979452961D+02 0.1077424647032D+02 0.1051605041603D+02 + 0.1025560319513D+02 0.9993303145083D+01 0.9729548892983D+01 0.9464738139829D+01 + 0.9199266453606D+01 0.8933526076402D+01 0.8667904750745D+01 0.8402784570301D+01 + 0.8138540859996D+01 0.7875541090527D+01 0.7614143832090D+01 0.7354697751983D+01 + 0.7097540660550D+01 0.6842998609696D+01 0.6591385047920D+01 0.6343000035605D+01 + 0.6098129523858D+01 0.5857044699944D+01 0.5620001401934D+01 0.5387239604814D+01 + 0.5158982979846D+01 0.4935438528573D+01 0.4716796292366D+01 0.4503229137976D+01 + 0.4294892619056D+01 0.4091924913152D+01 0.3894446833193D+01 0.3702561912045D+01 + 0.3516356558237D+01 0.3335900280537D+01 0.3161245978670D+01 0.2992430297065D+01 + 0.2829474038194D+01 0.2672382631762D+01 0.2521146655720D+01 0.2375742404881D+01 + 0.2236132502695D+01 0.2102266551639D+01 0.1974081817541D+01 0.1851503943111D+01 + 0.1734447685940D+01 0.1622817676200D+01 0.1516509189368D+01 0.1415408929331D+01 + 0.1319395817360D+01 0.1228341782531D+01 0.1142112549373D+01 0.1060568418635D+01 + 0.9835650373019D+00 0.9109541541726D+00 0.8425843575459D+00 0.7783017917968D+00 + 0.7179508498817D+00 0.6613748390683D+00 0.6084166174653D+00 0.5589191992012D+00 + 0.5127263263911D+00 0.4696830063190D+00 0.4296360125529D+00 0.3924343490009D+00 + 0.3579296762027D+00 0.3259766994340D+00 0.2964335184742D+00 0.2691619391536D+00 + 0.2440277470488D+00 0.2209009439361D+00 0.1996559478365D+00 0.1801717576938D+00 + 0.1623320839184D+00 0.1460254461990D+00 0.1311452401368D+00 0.1175897743854D+00 + 0.1052622800912D+00 0.9407089451527D-01 0.8392862078550D-01 0.7475326577690D-01 + 0.6646735814128D-01 0.5899804851766D-01 0.5227699394346D-01 0.4624022845899D-01 + 0.4082802185442D-01 0.3598472845105D-01 0.3165862773800D-01 0.2780175860384D-01 + 0.2436974881146D-01 0.2132164126495D-01 0.1861971851162D-01 0.1622932681167D-01 + 0.1411870099424D-01 0.1225879120292D-01 0.1062309251766D-01 0.9187478324824D-02 + 0.7930038194170D-02 0.6830920911119D-02 0.5872183206948D-02 0.5037644628161D-02 + 0.4312748890659D-02 0.3684431974697D-02 0.3140997133459D-02 0.2671996911721D-02 + 0.2268122201696D-02 0.1921098300832D-02 0.1623587881022D-02 0.1369100730387D-02 + 0.1151910087150D-02 0.9669753500508D-03 0.8098709208516D-03 0.6767209113939D-03 + 0.5641394300578D-03 0.4691761498429D-03 0.3892668522563D-03 0.3221886372696D-03 + 0.2660194893607D-03 0.2191018926233D-03 0.1800101936858D-03 0.1475214192933D-03 + 0.1205892654847D-03 0.9832098695562D-04 0.7995692809159D-04 0.6485245095860D-04 + 0.5246202996510D-04 0.4232529769133D-04 0.3405484129524D-04 0.2732556374477D-04 + 0.2186543872353D-04 0.1744750226736D-04 0.1388293789508D-04 0.1101512510421D-04 + 0.8714533541124D-05 0.6874356872787D-05 0.5406791351919D-05 0.4239874261002D-05 + 0.3314806839624D-05 0.2583694952262D-05 0.2007648657315D-05 0.1555189018603D-05 + 0.1200916989437D-05 0.9244050332163D-06 0.7092773630705D-06 0.5424493283134D-06 + 0.4135005904089D-06 0.3141603589352D-06 0.2378861413798D-06 0.1795202409555D-06 + 0.1350106538765D-06 0.1011851095086D-06 0.7556879909866D-07 0.5623788451178D-07 + 0.4170219815814D-07 0.3081166707088D-07 0.2268194336078D-07 0.1663552297805D-07 + 0.1215530542863D-07 0.8848107127806D-08 0.6416106613217D-08 0.4634585104140D-08 + 0.3334643304910D-08 0.2389835688104D-08 0.1705876062949D-08 0.1212741020005D-08 + 0.8586376559590D-09 0.6054146003728D-09 0.4250856698627D-09 0.2972075512731D-09 + 0.2069101606973D-09 0.1434236365115D-09 0.9898160505409D-10 0.6800804519963D-10 + 0.4651712787494D-10 0.3167310042586D-10 0.2146695649341D-10 0.1448079937139D-10 + 0.9722622861678D-11 0.6496070631129D-11 0.4319651023999D-11 0.2858591661735D-11 + 0.1882503214946D-11 0.1233598363270D-11 0.8043412065319D-12 0.5218060130221D-12 + 0.3367856512696D-12 0.2162455335843D-12 0.1381220475631D-12 0.8775552000331D-13 diff --git a/Test/Fe16_non_collinear/v_fe16.1 b/Test/Fe16_non_collinear/v_fe16.1 new file mode 100755 index 000000000..f3c4e967f --- /dev/null +++ b/Test/Fe16_non_collinear/v_fe16.1 @@ -0,0 +1,1542 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Fe. + 2 0.0000000000000D+00 + LSMS: xx z= 26. xvalws= 5.22926 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728400909D+02-0.5199725115555D+02-0.5199721790459D+02-0.5199718425142D+02 +-0.5199715019116D+02-0.5199711571889D+02-0.5199708082964D+02-0.5199704551834D+02 +-0.5199700977990D+02-0.5199697360915D+02-0.5199693700086D+02-0.5199689994973D+02 +-0.5199686245042D+02-0.5199682449748D+02-0.5199678608545D+02-0.5199674720876D+02 +-0.5199670786180D+02-0.5199666803887D+02-0.5199662773421D+02-0.5199658694201D+02 +-0.5199654565635D+02-0.5199650387127D+02-0.5199646158073D+02-0.5199641877860D+02 +-0.5199637545872D+02-0.5199633161480D+02-0.5199628724051D+02-0.5199624232942D+02 +-0.5199619687506D+02-0.5199615087084D+02-0.5199610431012D+02-0.5199605718616D+02 +-0.5199600949214D+02-0.5199596122116D+02-0.5199591236626D+02-0.5199586292036D+02 +-0.5199581287632D+02-0.5199576222688D+02-0.5199571096474D+02-0.5199565908248D+02 +-0.5199560657259D+02-0.5199555342748D+02-0.5199549963947D+02-0.5199544520078D+02 +-0.5199539010352D+02-0.5199533433975D+02-0.5199527790139D+02-0.5199522078028D+02 +-0.5199516296816D+02-0.5199510445666D+02-0.5199504523733D+02-0.5199498530160D+02 +-0.5199492464081D+02-0.5199486324617D+02-0.5199480110883D+02-0.5199473821977D+02 +-0.5199467456990D+02-0.5199461015004D+02-0.5199454495085D+02-0.5199447896290D+02 +-0.5199441217666D+02-0.5199434458246D+02-0.5199427617052D+02-0.5199420693096D+02 +-0.5199413685375D+02-0.5199406592876D+02-0.5199399414573D+02-0.5199392149428D+02 +-0.5199384796390D+02-0.5199377354396D+02-0.5199369822368D+02-0.5199362199218D+02 +-0.5199354483843D+02-0.5199346675127D+02-0.5199338771940D+02-0.5199330773139D+02 +-0.5199322677567D+02-0.5199314484053D+02-0.5199306191412D+02-0.5199297798443D+02 +-0.5199289303934D+02-0.5199280706654D+02-0.5199272005361D+02-0.5199263198797D+02 +-0.5199254285685D+02-0.5199245264737D+02-0.5199236134649D+02-0.5199226894099D+02 +-0.5199217541751D+02-0.5199208076251D+02-0.5199198496230D+02-0.5199188800302D+02 +-0.5199178987064D+02-0.5199169055096D+02-0.5199159002963D+02-0.5199148829207D+02 +-0.5199138532359D+02-0.5199128110928D+02-0.5199117563407D+02-0.5199106888269D+02 +-0.5199096083969D+02-0.5199085148944D+02-0.5199074081613D+02-0.5199062880373D+02 +-0.5199051543604D+02-0.5199040069664D+02-0.5199028456895D+02-0.5199016703615D+02 +-0.5199004808124D+02-0.5198992768700D+02-0.5198980583600D+02-0.5198968251063D+02 +-0.5198955769302D+02-0.5198943136512D+02-0.5198930350863D+02-0.5198917410506D+02 +-0.5198904313569D+02-0.5198891058155D+02-0.5198877642345D+02-0.5198864064200D+02 +-0.5198850321751D+02-0.5198836413012D+02-0.5198822335968D+02-0.5198808088582D+02 +-0.5198793668793D+02-0.5198779074512D+02-0.5198764303627D+02-0.5198749354000D+02 +-0.5198734223467D+02-0.5198718909837D+02-0.5198703410894D+02-0.5198687724393D+02 +-0.5198671848065D+02-0.5198655779610D+02-0.5198639516703D+02-0.5198623056988D+02 +-0.5198606398084D+02-0.5198589537577D+02-0.5198572473026D+02-0.5198555201962D+02 +-0.5198537721883D+02-0.5198520030257D+02-0.5198502124524D+02-0.5198484002091D+02 +-0.5198465660333D+02-0.5198447096595D+02-0.5198428308188D+02-0.5198409292391D+02 +-0.5198390046450D+02-0.5198370567579D+02-0.5198350852955D+02-0.5198330899725D+02 +-0.5198310704998D+02-0.5198290265850D+02-0.5198269579318D+02-0.5198248642408D+02 +-0.5198227452087D+02-0.5198206005285D+02-0.5198184298896D+02-0.5198162329776D+02 +-0.5198140094741D+02-0.5198117590571D+02-0.5198094814005D+02-0.5198071761744D+02 +-0.5198048430449D+02-0.5198024816738D+02-0.5198000917191D+02-0.5197976728344D+02 +-0.5197952246692D+02-0.5197927468690D+02-0.5197902390745D+02-0.5197877009224D+02 +-0.5197851320449D+02-0.5197825320698D+02-0.5197799006201D+02-0.5197772373146D+02 +-0.5197745417673D+02-0.5197718135875D+02-0.5197690523796D+02-0.5197662577437D+02 +-0.5197634292744D+02-0.5197605665620D+02-0.5197576691913D+02-0.5197547367423D+02 +-0.5197517687900D+02-0.5197487649041D+02-0.5197457246489D+02-0.5197426475838D+02 +-0.5197395332627D+02-0.5197363812338D+02-0.5197331910403D+02-0.5197299622195D+02 +-0.5197266943031D+02-0.5197233868173D+02-0.5197200392824D+02-0.5197166512128D+02 +-0.5197132221174D+02-0.5197097514984D+02-0.5197062388528D+02-0.5197026836709D+02 +-0.5196990854370D+02-0.5196954436291D+02-0.5196917577189D+02-0.5196880271716D+02 +-0.5196842514461D+02-0.5196804299945D+02-0.5196765622622D+02-0.5196726476881D+02 +-0.5196686857041D+02-0.5196646757354D+02-0.5196606171998D+02-0.5196565095085D+02 +-0.5196523520651D+02-0.5196481442664D+02-0.5196438855015D+02-0.5196395751522D+02 +-0.5196352125928D+02-0.5196307971901D+02-0.5196263283028D+02-0.5196218052823D+02 +-0.5196172274718D+02-0.5196125942066D+02-0.5196079048138D+02-0.5196031586126D+02 +-0.5195983549135D+02-0.5195934930191D+02-0.5195885722231D+02-0.5195835918107D+02 +-0.5195785510585D+02-0.5195734492343D+02-0.5195682855969D+02-0.5195630593961D+02 +-0.5195577698725D+02-0.5195524162577D+02-0.5195469977736D+02-0.5195415136330D+02 +-0.5195359630387D+02-0.5195303451841D+02-0.5195246592528D+02-0.5195189044181D+02 +-0.5195130798435D+02-0.5195071846824D+02-0.5195012180777D+02-0.5194951791619D+02 +-0.5194890670569D+02-0.5194828808741D+02-0.5194766197137D+02-0.5194702826653D+02 +-0.5194638688071D+02-0.5194573772064D+02-0.5194508069188D+02-0.5194441569885D+02 +-0.5194374264482D+02-0.5194306143187D+02-0.5194237196087D+02-0.5194167413149D+02 +-0.5194096784220D+02-0.5194025299021D+02-0.5193952947146D+02-0.5193879718066D+02 +-0.5193805601119D+02-0.5193730585519D+02-0.5193654660341D+02-0.5193577814533D+02 +-0.5193500036904D+02-0.5193421316129D+02-0.5193341640742D+02-0.5193260999141D+02 +-0.5193179379578D+02-0.5193096770164D+02-0.5193013158865D+02-0.5192928533501D+02 +-0.5192842881739D+02-0.5192756191098D+02-0.5192668448947D+02-0.5192579642497D+02 +-0.5192489758803D+02-0.5192398784765D+02-0.5192306707119D+02-0.5192213512442D+02 +-0.5192119187145D+02-0.5192023717474D+02-0.5191927089505D+02-0.5191829289146D+02 +-0.5191730302133D+02-0.5191630114025D+02-0.5191528710207D+02-0.5191426075883D+02 +-0.5191322196077D+02-0.5191217055632D+02-0.5191110639202D+02-0.5191002931255D+02 +-0.5190893916069D+02-0.5190783577729D+02-0.5190671900126D+02-0.5190558866954D+02 +-0.5190444461705D+02-0.5190328667673D+02-0.5190211467945D+02-0.5190092845399D+02 +-0.5189972782709D+02-0.5189851262330D+02-0.5189728266508D+02-0.5189603777267D+02 +-0.5189477776415D+02-0.5189350245533D+02-0.5189221165981D+02-0.5189090518885D+02 +-0.5188958285145D+02-0.5188824445423D+02-0.5188688980147D+02-0.5188551869503D+02 +-0.5188413093435D+02-0.5188272631641D+02-0.5188130463569D+02-0.5187986568418D+02 +-0.5187840925129D+02-0.5187693512386D+02-0.5187544308611D+02-0.5187393291962D+02 +-0.5187240440329D+02-0.5187085731330D+02-0.5186929142309D+02-0.5186770650332D+02 +-0.5186610232183D+02-0.5186447864362D+02-0.5186283523081D+02-0.5186117184259D+02 +-0.5185948823518D+02-0.5185778416183D+02-0.5185605937277D+02-0.5185431361514D+02 +-0.5185254663297D+02-0.5185075816718D+02-0.5184894795548D+02-0.5184711573237D+02 +-0.5184526122909D+02-0.5184338417356D+02-0.5184148429039D+02-0.5183956130079D+02 +-0.5183761492255D+02-0.5183564486998D+02-0.5183365085389D+02-0.5183163258155D+02 +-0.5182958975660D+02-0.5182752207907D+02-0.5182542924529D+02-0.5182331094785D+02 +-0.5182116687559D+02-0.5181899671350D+02-0.5181680014270D+02-0.5181457684041D+02 +-0.5181232647986D+02-0.5181004873028D+02-0.5180774325683D+02-0.5180540972054D+02 +-0.5180304777830D+02-0.5180065708277D+02-0.5179823728232D+02-0.5179578802103D+02 +-0.5179330893860D+02-0.5179079967027D+02-0.5178825984684D+02-0.5178568909453D+02 +-0.5178308703501D+02-0.5178045328526D+02-0.5177778745757D+02-0.5177508915948D+02 +-0.5177235799366D+02-0.5176959355795D+02-0.5176679544522D+02-0.5176396324334D+02 +-0.5176109653512D+02-0.5175819489823D+02-0.5175525790517D+02-0.5175228512318D+02 +-0.5174927611419D+02-0.5174623043474D+02-0.5174314763592D+02-0.5174002726332D+02 +-0.5173686885694D+02-0.5173367195115D+02-0.5173043607457D+02-0.5172716075006D+02 +-0.5172384549462D+02-0.5172048981932D+02-0.5171709322923D+02-0.5171365522335D+02 +-0.5171017529452D+02-0.5170665292940D+02-0.5170308760833D+02-0.5169947880525D+02 +-0.5169582598771D+02-0.5169212861671D+02-0.5168838614662D+02-0.5168459802518D+02 +-0.5168076369333D+02-0.5167688258518D+02-0.5167295412791D+02-0.5166897774168D+02 +-0.5166495283960D+02-0.5166087882755D+02-0.5165675510418D+02-0.5165258106080D+02 +-0.5164835608125D+02-0.5164407954186D+02-0.5163975081138D+02-0.5163536925080D+02 +-0.5163093421337D+02-0.5162644504442D+02-0.5162190108131D+02-0.5161730165335D+02 +-0.5161264608164D+02-0.5160793367906D+02-0.5160316375011D+02-0.5159833559084D+02 +-0.5159344848875D+02-0.5158850172268D+02-0.5158349456272D+02-0.5157842627009D+02 +-0.5157329609709D+02-0.5156810328692D+02-0.5156284707365D+02-0.5155752668206D+02 +-0.5155214132756D+02-0.5154669021608D+02-0.5154117254396D+02-0.5153558749786D+02 +-0.5152993425461D+02-0.5152421198113D+02-0.5151841983433D+02-0.5151255696093D+02 +-0.5150662249744D+02-0.5150061557002D+02-0.5149453529428D+02-0.5148838077528D+02 +-0.5148215110737D+02-0.5147584537403D+02-0.5146946264782D+02-0.5146300199022D+02 +-0.5145646245151D+02-0.5144984307067D+02-0.5144314287525D+02-0.5143636088122D+02 +-0.5142949609291D+02-0.5142254750281D+02-0.5141551409151D+02-0.5140839482753D+02 +-0.5140118866721D+02-0.5139389455459D+02-0.5138651142128D+02-0.5137903818632D+02 +-0.5137147375605D+02-0.5136381702401D+02-0.5135606687078D+02-0.5134822216388D+02 +-0.5134028175756D+02-0.5133224449278D+02-0.5132410919702D+02-0.5131587468413D+02 +-0.5130753975423D+02-0.5129910319357D+02-0.5129056377438D+02-0.5128192025477D+02 +-0.5127317137854D+02-0.5126431587514D+02-0.5125535245940D+02-0.5124627983153D+02 +-0.5123709667690D+02-0.5122780166596D+02-0.5121839345403D+02-0.5120887068125D+02 +-0.5119923197240D+02-0.5118947593678D+02-0.5117960116805D+02-0.5116960624416D+02 +-0.5115948972712D+02-0.5114925016296D+02-0.5113888608154D+02-0.5112839599644D+02 +-0.5111777840483D+02-0.5110703178733D+02-0.5109615460788D+02-0.5108514531363D+02 +-0.5107400233480D+02-0.5106272408452D+02-0.5105130895877D+02-0.5103975533619D+02 +-0.5102806157801D+02-0.5101622602790D+02-0.5100424701185D+02-0.5099212283803D+02 +-0.5097985179674D+02-0.5096743216021D+02-0.5095486218256D+02-0.5094214009961D+02 +-0.5092926412887D+02-0.5091623246932D+02-0.5090304330139D+02-0.5088969478681D+02 +-0.5087618506855D+02-0.5086251227064D+02-0.5084867449820D+02-0.5083466983722D+02 +-0.5082049635455D+02-0.5080615209778D+02-0.5079163509518D+02-0.5077694335558D+02 +-0.5076207486834D+02-0.5074702760324D+02-0.5073179951042D+02-0.5071638852033D+02 +-0.5070079254364D+02-0.5068500947122D+02-0.5066903717403D+02-0.5065287350315D+02 +-0.5063651628963D+02-0.5061996334457D+02-0.5060321245898D+02-0.5058626140382D+02 +-0.5056910792994D+02-0.5055174976809D+02-0.5053418462884D+02-0.5051641020267D+02 +-0.5049842415989D+02-0.5048022415067D+02-0.5046180780505D+02-0.5044317273295D+02 +-0.5042431652422D+02-0.5040523674861D+02-0.5038593095586D+02-0.5036639667573D+02 +-0.5034663141803D+02-0.5032663267268D+02-0.5030639790981D+02-0.5028592457977D+02 +-0.5026521011328D+02-0.5024425192145D+02-0.5022304739591D+02-0.5020159390892D+02 +-0.5017988881346D+02-0.5015792944334D+02-0.5013571311336D+02-0.5011323711944D+02 +-0.5009049873873D+02-0.5006749522980D+02-0.5004422383280D+02-0.5002068176959D+02 +-0.4999686624397D+02-0.4997277444186D+02-0.4994840353146D+02-0.4992375066350D+02 +-0.4989881297144D+02-0.4987358757171D+02-0.4984807156389D+02-0.4982226203106D+02 +-0.4979615603991D+02-0.4976975064117D+02-0.4974304286974D+02-0.4971602974502D+02 +-0.4968870827126D+02-0.4966107543776D+02-0.4963312821924D+02-0.4960486357616D+02 +-0.4957627845502D+02-0.4954736978871D+02-0.4951813449683D+02-0.4948856948612D+02 +-0.4945867165071D+02-0.4942843787257D+02-0.4939786502185D+02-0.4936694995729D+02 +-0.4933568952659D+02-0.4930408056681D+02-0.4927211990478D+02-0.4923980435752D+02 +-0.4920713073265D+02-0.4917409582880D+02-0.4914069643607D+02-0.4910692933642D+02 +-0.4907279130416D+02-0.4903827910633D+02-0.4900338950319D+02-0.4896811924867D+02 +-0.4893246509079D+02-0.4889642377211D+02-0.4885999203021D+02-0.4882316659813D+02 +-0.4878594420482D+02-0.4874832157556D+02-0.4871029543247D+02-0.4867186249491D+02 +-0.4863301947995D+02-0.4859376310277D+02-0.4855409007715D+02-0.4851399711583D+02 +-0.4847348093100D+02-0.4843253823466D+02-0.4839116573905D+02-0.4834936015704D+02 +-0.4830711820251D+02-0.4826443659074D+02-0.4822131203876D+02-0.4817774126566D+02 +-0.4813372099301D+02-0.4808924794511D+02-0.4804431884930D+02-0.4799893043625D+02 +-0.4795307944023D+02-0.4790676259938D+02-0.4785997665588D+02-0.4781271835619D+02 +-0.4776498445124D+02-0.4771677169657D+02-0.4766807685247D+02-0.4761889668409D+02 +-0.4756922796153D+02-0.4751906745988D+02-0.4746841195927D+02-0.4741725824487D+02 +-0.4736560310686D+02-0.4731344334036D+02-0.4726077574537D+02-0.4720759712663D+02 +-0.4715390429349D+02-0.4709969405976D+02-0.4704496324345D+02-0.4698970866656D+02 +-0.4693392715482D+02-0.4687761553742D+02-0.4682077064661D+02-0.4676338931742D+02 +-0.4670546838725D+02-0.4664700469545D+02-0.4658799508292D+02-0.4652843639162D+02 +-0.4646832546412D+02-0.4640765914308D+02-0.4634643427075D+02-0.4628464768840D+02 +-0.4622229623583D+02-0.4615937675077D+02-0.4609588606835D+02-0.4603182102046D+02 +-0.4596717843531D+02-0.4590195513672D+02-0.4583614794369D+02-0.4576975366979D+02 +-0.4570276912265D+02-0.4563519110351D+02-0.4556701640665D+02-0.4549824181908D+02 +-0.4542886412007D+02-0.4535888008084D+02-0.4528828646428D+02-0.4521708002473D+02 +-0.4514525750785D+02-0.4507281565054D+02-0.4499975118097D+02-0.4492606081870D+02 +-0.4485174127497D+02-0.4477678925295D+02-0.4470120144833D+02-0.4462497454985D+02 +-0.4454810524011D+02-0.4447059019649D+02-0.4439242609219D+02-0.4431360959758D+02 +-0.4423413738159D+02-0.4415400611337D+02-0.4407321246418D+02-0.4399175310947D+02 +-0.4390962473114D+02-0.4382682402010D+02-0.4374334767908D+02-0.4365919242563D+02 +-0.4357435499539D+02-0.4348883214570D+02-0.4340262065933D+02-0.4331571734857D+02 +-0.4322811905962D+02-0.4313982267710D+02-0.4305082512897D+02-0.4296112339160D+02 +-0.4287071449512D+02-0.4277959552900D+02-0.4268776364786D+02-0.4259521607738D+02 +-0.4250195012053D+02-0.4240796316384D+02-0.4231325268378D+02-0.4221781625326D+02 +-0.4212165154821D+02-0.4202475635403D+02-0.4192712857207D+02-0.4182876622603D+02 +-0.4172966746809D+02-0.4162983058491D+02-0.4152925400326D+02-0.4142793629535D+02 +-0.4132587618362D+02-0.4122307254514D+02-0.4111952441526D+02-0.4101523099069D+02 +-0.4091019163177D+02-0.4080440586392D+02-0.4069787337814D+02-0.4059059403052D+02 +-0.4048256784069D+02-0.4037379498919D+02-0.4026427581359D+02-0.4015401080347D+02 +-0.4004300059408D+02-0.3993124595881D+02-0.3981874780047D+02-0.3970550714118D+02 +-0.3959152511128D+02-0.3947680293704D+02-0.3936134192738D+02-0.3924514345974D+02 +-0.3912820896514D+02-0.3901053991273D+02-0.3889213779388D+02-0.3877300410616D+02 +-0.3865314033730D+02-0.3853254794941D+02-0.3841122836384D+02-0.3828918294671D+02 +-0.3816641299561D+02-0.3804291972752D+02-0.3791870426838D+02-0.3779376764439D+02 +-0.3766811077544D+02-0.3754173447071D+02-0.3741463942662D+02-0.3728682622747D+02 +-0.3715829534855D+02-0.3702904716206D+02-0.3689908194568D+02-0.3676839989389D+02 +-0.3663700113198D+02-0.3650488573242D+02-0.3637205373385D+02-0.3623850516215D+02 +-0.3610424005352D+02-0.3596925847947D+02-0.3583356057318D+02-0.3569714655716D+02 +-0.3556001677183D+02-0.3542217170480D+02-0.3528361202035D+02-0.3514433858906D+02 +-0.3500435251706D+02-0.3486365517474D+02-0.3472224822457D+02-0.3458013364781D+02 +-0.3443731376977D+02-0.3429379128348D+02-0.3414956927154D+02-0.3400465122587D+02 +-0.3385904106531D+02-0.3371274315081D+02-0.3356576229817D+02-0.3341810378823D+02 +-0.3326977337430D+02-0.3312077728689D+02-0.3297112223571D+02-0.3282081540879D+02 +-0.3266986446883D+02-0.3251827754673D+02-0.3236606323235D+02-0.3221323056253D+02 +-0.3205978900636D+02-0.3190574844798D+02-0.3175111916665D+02-0.3159591181450D+02 +-0.3144013739192D+02-0.3128380722060D+02-0.3112693291460D+02-0.3096952634939D+02 +-0.3081159962896D+02-0.3065316505139D+02-0.3049423507279D+02-0.3033482226994D+02 +-0.3017493930171D+02-0.3001459886954D+02-0.2985381367711D+02-0.2969259638940D+02 +-0.2953095959141D+02-0.2936891574677D+02-0.2920647715631D+02-0.2904365591713D+02 +-0.2888046388202D+02-0.2871691261992D+02-0.2855301337730D+02-0.2838877704096D+02 +-0.2822421410237D+02-0.2805933462405D+02-0.2789414820796D+02-0.2772866396645D+02 +-0.2756289049588D+02-0.2739683585338D+02-0.2723050753680D+02-0.2706391246838D+02 +-0.2689705698223D+02-0.2672994681603D+02-0.2656258710714D+02-0.2639498239345D+02 +-0.2622713661917D+02-0.2605905314574D+02-0.2589073476829D+02-0.2572218373759D+02 +-0.2555340178776D+02-0.2538439017000D+02-0.2521514969218D+02-0.2504568076457D+02 +-0.2487598345161D+02-0.2470605752972D+02-0.2453590255090D+02-0.2436551791213D+02 +-0.2419490293015D+02-0.2402405692122D+02-0.2385297928550D+02-0.2368166959536D+02 +-0.2351012768684D+02-0.2333835375355D+02-0.2316634844181D+02-0.2299411294593D+02 +-0.2282164910224D+02-0.2264895948042D+02-0.2247604747020D+02-0.2230291736187D+02 +-0.2212957441833D+02-0.2195602493665D+02-0.2178227629680D+02-0.2160833699531D+02 +-0.2143421666157D+02-0.2125992605447D+02-0.2108547703736D+02-0.2091088252957D+02 +-0.2073615643311D+02-0.2056131353347D+02-0.2038636937454D+02-0.2021134010787D+02 +-0.2003624231780D+02-0.1986109282464D+02-0.1968590846923D+02-0.1951070588338D+02 +-0.1933550125113D+02-0.1916031006739D+02-0.1898514690054D+02-0.1881002516654D+02 +-0.1863495692195D+02-0.1845995268332D+02-0.1828502127992D+02-0.1811016974578D+02 +-0.1793540325598D+02-0.1776072511080D+02-0.1758613676940D+02-0.1741163793327D+02 +-0.1723722667775D+02-0.1706289962834D+02-0.1688865217702D+02-0.1671447873257D+02 +-0.1654037299789D+02-0.1636632826691D+02-0.1619233773325D+02-0.1601839480315D+02 +-0.1584449340510D+02-0.1567062828984D+02-0.1549679531468D+02-0.1532299170720D+02 +-0.1514921630451D+02-0.1497546976480D+02-0.1480175474939D+02-0.1462807607400D+02 +-0.1445444082871D+02-0.1428085846710D+02-0.1410734086517D+02-0.1393390235146D+02 +-0.1376055970989D+02-0.1358733215727D+02-0.1341424129731D+02-0.1324131105355D+02 +-0.1306856758305D+02-0.1289603917318D+02-0.1272375612351D+02-0.1255175061484D+02 +-0.1238005656736D+02-0.1220870948967D+02-0.1203774632043D+02-0.1186720526422D+02 +-0.1169712562320D+02-0.1152754762583D+02-0.1135851225403D+02-0.1119006106993D+02 +-0.1102223604329D+02-0.1085507938069D+02-0.1068863335731D+02-0.1052294015218D+02 +-0.1035804168776D+02-0.1019397947446D+02-0.1003079446077D+02-0.9868526889628D+01 +-0.9707216161554D+01-0.9546900704939D+01-0.9387617854023D+01-0.9229403734858D+01 +-0.9072293159592D+01-0.8916319529363D+01-0.8761514745993D+01-0.8607909132693D+01 +-0.8455531363896D+01-0.8304408404305D+01-0.8154565457227D+01-0.8006025922166D+01 +-0.7858811361682D+01-0.7712941477416D+01-0.7568434095199D+01-0.7425305159081D+01 +-0.7283568734134D+01-0.7143237017788D+01-0.7004320359504D+01-0.6866827288485D+01 +-0.6730764549154D+01-0.6596137144079D+01-0.6462948384000D+01-0.6331199944618D+01 +-0.6200891929738D+01-0.6072022940407D+01-0.5944590149603D+01-0.5818589382077D+01 +-0.5694015198898D+01-0.5570860986265D+01-0.5449119048124D+01-0.5328780702141D+01 +-0.5209836378552D+01-0.5092275721431D+01-0.4976087691897D+01-0.4861260672787D+01 +-0.4747782574321D+01-0.4635640940271D+01-0.4524823054180D+01-0.4415316045125D+01 +-0.4307106992579D+01-0.4200183029885D+01-0.4094531445869D+01-0.3990139784139D+01 +-0.3886995939600D+01-0.3785088251726D+01-0.3684405594148D+01-0.3584937460106D+01 +-0.3486674043348D+01-0.3389606314047D+01-0.3293726089348D+01-0.3199026098161D+01 +-0.3105500039868D+01-0.3013142636618D+01-0.2921949678952D+01-0.2831918064533D+01 +-0.2743045829849D+01-0.2655332174788D+01-0.2568777480092D+01-0.2483383317815D+01 +-0.2399152454962D+01-0.2316088850658D+01-0.2234197647300D+01-0.2153485156272D+01 +-0.2073958838965D+01-0.1995627283965D+01-0.1918500181413D+01-0.1842588295670D+01 +-0.1767903437522D+01-0.1694458437274D+01-0.1622267120110D+01-0.1551344285168D+01 +-0.1481705689753D+01-0.1413368040087D+01-0.1346348989896D+01-0.1280667148051D+01 +-0.1216342096293D+01-0.1153394417906D+01-0.1091845737986D+01-0.1031718775725D+01 +-0.9730374088849D+00-0.9158267504133D+00-0.8601132368937D+00-0.8059247283301D+00 +-0.7532906185600D+00-0.7022419554295D+00-0.6528115697324D+00-0.6050342118170D+00 +-0.5589466947046D+00-0.5145880425354D+00-0.4719996431596D+00-0.4312254037239D+00 +-0.3923119081554D+00-0.3553085755132D+00-0.3202678182603D+00-0.2872451996103D+00 +-0.2562993012896D+00 + 0.0000000000000D+00 + 1012 0.5229258479779D+01 + 0.2150742905406D-04 0.2201934401975D-04 0.2254344131081D-04 0.2308001074793D-04 + 0.2362934904336D-04 0.2419175996469D-04 0.2476755450247D-04 0.2535705104185D-04 + 0.2596057553829D-04 0.2657846169737D-04 0.2721105115901D-04 0.2785869368592D-04 + 0.2852174735659D-04 0.2920057876285D-04 0.2989556321214D-04 0.3060708493450D-04 + 0.3133553729459D-04 0.3208132300862D-04 0.3284485436652D-04 0.3362655345933D-04 + 0.3442685241199D-04 0.3524619362168D-04 0.3608503000175D-04 0.3694382523153D-04 + 0.3782305401197D-04 0.3872320232740D-04 0.3964476771351D-04 0.4058825953159D-04 + 0.4155419924941D-04 0.4254312072866D-04 0.4355557051923D-04 0.4459210816046D-04 + 0.4565330648961D-04 0.4673975195749D-04 0.4785204495171D-04 0.4899080012754D-04 + 0.5015664674660D-04 0.5135022902361D-04 0.5257220648130D-04 0.5382325431382D-04 + 0.5510406375867D-04 0.5641534247751D-04 0.5775781494596D-04 0.5913222285265D-04 + 0.6053932550771D-04 0.6197990026094D-04 0.6345474292991D-04 0.6496466823815D-04 + 0.6651051026378D-04 0.6809312289875D-04 0.6971338031887D-04 0.7137217746513D-04 + 0.7307043053626D-04 0.7480907749308D-04 0.7658907857468D-04 0.7841141682692D-04 + 0.8027709864336D-04 0.8218715431905D-04 0.8414263861740D-04 0.8614463135050D-04 + 0.8819423797310D-04 0.9029259019072D-04 0.9244084658213D-04 0.9464019323656D-04 + 0.9689184440594D-04 0.9919704317265D-04 0.1015570621330D-03 0.1039732040969D-03 + 0.1064468028041D-03 0.1089792236573D-03 0.1115718644728D-03 0.1142261562483D-03 + 0.1169435639500D-03 0.1197255873171D-03 0.1225737616857D-03 0.1254896588328D-03 + 0.1284748878395D-03 0.1315310959746D-03 0.1346599695998D-03 0.1378632350954D-03 + 0.1411426598085D-03 0.1445000530233D-03 0.1479372669546D-03 0.1514561977641D-03 + 0.1550587866019D-03 0.1587470206711D-03 0.1625229343189D-03 0.1663886101524D-03 + 0.1703461801815D-03 0.1743978269887D-03 0.1785457849256D-03 0.1827923413391D-03 + 0.1871398378251D-03 0.1915906715131D-03 0.1961472963799D-03 0.2008122245952D-03 + 0.2055880278984D-03 0.2104773390081D-03 0.2154828530649D-03 0.2206073291079D-03 + 0.2258535915864D-03 0.2312245319072D-03 0.2367231100177D-03 0.2423523560273D-03 + 0.2481153718665D-03 0.2540153329849D-03 0.2600554900897D-03 0.2662391709247D-03 + 0.2725697820915D-03 0.2790508109132D-03 0.2856858273428D-03 0.2924784859153D-03 + 0.2994325277470D-03 0.3065517825810D-03 0.3138401708812D-03 0.3213017059753D-03 + 0.3289404962488D-03 0.3367607473897D-03 0.3447667646870D-03 0.3529629553823D-03 + 0.3613538310777D-03 0.3699440101989D-03 0.3787382205180D-03 0.3877413017338D-03 + 0.3969582081140D-03 0.4063940111991D-03 0.4160539025692D-03 0.4259431966769D-03 + 0.4360673337456D-03 0.4464318827368D-03 0.4570425443864D-03 0.4679051543124D-03 + 0.4790256861959D-03 0.4904102550358D-03 0.5020651204812D-03 0.5139966902408D-03 + 0.5262115235724D-03 0.5387163348549D-03 0.5515179972435D-03 0.5646235464104D-03 + 0.5780401843732D-03 0.5917752834137D-03 0.6058363900874D-03 0.6202312293275D-03 + 0.6349677086450D-03 0.6500539224267D-03 0.6654981563344D-03 0.6813088918062D-03 + 0.6974948106637D-03 0.7140647998269D-03 0.7310279561389D-03 0.7483935913040D-03 + 0.7661712369406D-03 0.7843706497523D-03 0.8030018168203D-03 0.8220749610184D-03 + 0.8416005465556D-03 0.8615892846469D-03 0.8820521393172D-03 0.9030003333406D-03 + 0.9244453543176D-03 0.9463989608946D-03 0.9688731891282D-03 0.9918803589975D-03 + 0.1015433081069D-02 0.1039544263315D-02 0.1064227118095D-02 0.1089495169290D-02 + 0.1115362259619D-02 0.1141842558105D-02 0.1168950567737D-02 0.1196701133289D-02 + 0.1225109449338D-02 0.1254191068456D-02 0.1283961909601D-02 0.1314438266696D-02 + 0.1345636817413D-02 0.1377574632157D-02 0.1410269183260D-02 0.1443738354387D-02 + 0.1478000450161D-02 0.1513074206015D-02 0.1548978798262D-02 0.1585733854409D-02 + 0.1623359463706D-02 0.1661876187936D-02 0.1701305072458D-02 0.1741667657505D-02 + 0.1782985989747D-02 0.1825282634108D-02 0.1868580685877D-02 0.1912903783076D-02 + 0.1958276119133D-02 0.2004722455835D-02 0.2052268136585D-02 0.2100939099962D-02 + 0.2150761893598D-02 0.2201763688371D-02 0.2253972292925D-02 0.2307416168524D-02 + 0.2362124444253D-02 0.2418126932561D-02 0.2475454145167D-02 0.2534137309329D-02 + 0.2594208384486D-02 0.2655700079287D-02 0.2718645869002D-02 0.2783080013344D-02 + 0.2849037574687D-02 0.2916554436715D-02 0.2985667323484D-02 0.3056413818931D-02 + 0.3128832386828D-02 0.3202962391187D-02 0.3278844117136D-02 0.3356518792272D-02 + 0.3436028608501D-02 0.3517416744371D-02 0.3600727387929D-02 0.3686005760082D-02 + 0.3773298138499D-02 0.3862651882061D-02 0.3954115455860D-02 0.4047738456768D-02 + 0.4143571639594D-02 0.4241666943825D-02 0.4342077520985D-02 0.4444857762604D-02 + 0.4550063328833D-02 0.4657751177697D-02 0.4767979595018D-02 0.4880808225009D-02 + 0.4996298101570D-02 0.5114511680279D-02 0.5235512871115D-02 0.5359367071918D-02 + 0.5486141202598D-02 0.5615903740128D-02 0.5748724754308D-02 0.5884675944352D-02 + 0.6023830676284D-02 0.6166264021183D-02 0.6312052794284D-02 0.6461275594959D-02 + 0.6614012847588D-02 0.6770346843357D-02 0.6930361782982D-02 0.7094143820394D-02 + 0.7261781107400D-02 0.7433363839342D-02 0.7608984301773D-02 0.7788736918176D-02 + 0.7972718298747D-02 0.8161027290261D-02 0.8353765027049D-02 0.8551034983111D-02 + 0.8752943025377D-02 0.8959597468160D-02 0.9171109128811D-02 0.9387591384603D-02 + 0.9609160230877D-02 0.9835934340477D-02 0.1006803512449D-01 0.1030558679431D-01 + 0.1054871642512D-01 0.1079755402073D-01 0.1105223257982D-01 0.1131288816368D-01 + 0.1157965996544D-01 0.1185269038080D-01 0.1213212508026D-01 0.1241811308303D-01 + 0.1271080683248D-01 0.1301036227325D-01 0.1331693893004D-01 0.1363069998813D-01 + 0.1395181237567D-01 0.1428044684765D-01 0.1461677807184D-01 0.1496098471648D-01 + 0.1531324953990D-01 0.1567375948211D-01 0.1604270575828D-01 0.1642028395434D-01 + 0.1680669412453D-01 0.1720214089116D-01 0.1760683354637D-01 0.1802098615621D-01 + 0.1844481766683D-01 0.1887855201303D-01 0.1932241822902D-01 0.1977665056168D-01 + 0.2024148858606D-01 0.2071717732349D-01 0.2120396736203D-01 0.2170211497964D-01 + 0.2221188226980D-01 0.2273353726988D-01 0.2326735409215D-01 0.2381361305754D-01 + 0.2437260083229D-01 0.2494461056731D-01 0.2552994204062D-01 0.2612890180262D-01 + 0.2674180332442D-01 0.2736896714935D-01 0.2801072104743D-01 0.2866740017320D-01 + 0.2933934722669D-01 0.3002691261781D-01 0.3073045463399D-01 0.3145033961141D-01 + 0.3218694210958D-01 0.3294064508962D-01 0.3371184009606D-01 0.3450092744243D-01 + 0.3530831640054D-01 0.3613442539362D-01 0.3697968219334D-01 0.3784452412086D-01 + 0.3872939825181D-01 0.3963476162544D-01 0.4056108145796D-01 0.4150883536008D-01 + 0.4247851155891D-01 0.4347060912422D-01 0.4448563819924D-01 0.4552412023590D-01 + 0.4658658823475D-01 0.4767358698962D-01 0.4878567333696D-01 0.4992341641008D-01 + 0.5108739789835D-01 0.5227821231135D-01 0.5349646724813D-01 0.5474278367169D-01 + 0.5601779618862D-01 0.5732215333417D-01 0.5865651786266D-01 0.6002156704340D-01 + 0.6141799296226D-01 0.6284650282880D-01 0.6430781928923D-01 0.6580268074515D-01 + 0.6733184167825D-01 0.6889607298100D-01 0.7049616229337D-01 0.7213291434581D-01 + 0.7380715130845D-01 0.7551971314661D-01 0.7727145798277D-01 0.7906326246509D-01 + 0.8089602214242D-01 0.8277065184608D-01 0.8468808607842D-01 0.8664927940812D-01 + 0.8865520687255D-01 0.9070686438707D-01 0.9280526916144D-01 0.9495146012343D-01 + 0.9714649834967D-01 0.9939146750384D-01 0.1016874742823D+00 0.1040356488672D+00 + 0.1064371453872D+00 0.1088931423856D+00 0.1114048432967D+00 0.1139734769295D+00 + 0.1166002979593D+00 0.1192865874273D+00 0.1220336532487D+00 0.1248428307276D+00 + 0.1277154830815D+00 0.1306530019730D+00 0.1336568080498D+00 0.1367283514936D+00 + 0.1398691125766D+00 0.1430806022269D+00 0.1463643626021D+00 0.1497219676713D+00 + 0.1531550238057D+00 0.1566651703780D+00 0.1602540803695D+00 0.1639234609870D+00 + 0.1676750542871D+00 0.1715106378098D+00 0.1754320252209D+00 0.1794410669619D+00 + 0.1835396509100D+00 0.1877297030455D+00 0.1920131881282D+00 0.1963921103827D+00 + 0.2008685141914D+00 0.2054444847966D+00 0.2101221490109D+00 0.2149036759359D+00 + 0.2197912776889D+00 0.2247872101386D+00 0.2298937736476D+00 0.2351133138248D+00 + 0.2404482222837D+00 0.2459009374100D+00 0.2514739451362D+00 0.2571697797240D+00 + 0.2629910245536D+00 0.2689403129212D+00 0.2750203288421D+00 0.2812338078623D+00 + 0.2875835378751D+00 0.2940723599454D+00 0.3007031691395D+00 0.3074789153608D+00 + 0.3144026041916D+00 0.3214772977396D+00 0.3287061154899D+00 0.3360922351618D+00 + 0.3436388935694D+00 0.3513493874868D+00 0.3592270745164D+00 0.3672753739607D+00 + 0.3754977676972D+00 0.3838978010545D+00 0.3924790836915D+00 0.4012452904770D+00 + 0.4102001623706D+00 0.4193475073036D+00 0.4286912010595D+00 0.4382351881538D+00 + 0.4479834827120D+00 0.4579401693452D+00 0.4681094040228D+00 0.4784954149418D+00 + 0.4891025033910D+00 0.4999350446102D+00 0.5109974886435D+00 0.5222943611853D+00 + 0.5338302644183D+00 0.5456098778426D+00 0.5576379590956D+00 0.5699193447601D+00 + 0.5824589511607D+00 0.5952617751475D+00 0.6083328948654D+00 0.6216774705074D+00 + 0.6353007450521D+00 0.6492080449824D+00 0.6634047809857D+00 0.6778964486325D+00 + 0.6926886290333D+00 0.7077869894721D+00 0.7231972840138D+00 0.7389253540860D+00 + 0.7549771290311D+00 0.7713586266289D+00 0.7880759535873D+00 0.8051353059985D+00 + 0.8225429697604D+00 0.8403053209599D+00 0.8584288262158D+00 0.8769200429817D+00 + 0.8957856198031D+00 0.9150322965294D+00 0.9346669044774D+00 0.9546963665439D+00 + 0.9751276972649D+00 0.9959680028197D+00 0.1017224480976D+01 0.1038904420974D+01 + 0.1061015203349D+01 0.1083564299686D+01 0.1106559272300D+01 0.1130007773859D+01 + 0.1153917546912D+01 0.1178296423354D+01 0.1203152323804D+01 0.1228493256899D+01 + 0.1254327318495D+01 0.1280662690787D+01 0.1307507641324D+01 0.1334870521934D+01 + 0.1362759767535D+01 0.1391183894856D+01 0.1420151501035D+01 0.1449671262109D+01 + 0.1479751931386D+01 0.1510402337698D+01 0.1541631383520D+01 0.1573448042969D+01 + 0.1605861359662D+01 0.1638880444440D+01 0.1672514472946D+01 0.1706772683055D+01 + 0.1741664372155D+01 0.1777198894269D+01 0.1813385657016D+01 0.1850234118409D+01 + 0.1887753783475D+01 0.1925954200705D+01 0.1964844958324D+01 0.2004435680370D+01 + 0.2044736022586D+01 0.2085755668115D+01 0.2127504322996D+01 0.2169991711448D+01 + 0.2213227570952D+01 0.2257221647108D+01 0.2301983688271D+01 0.2347523439972D+01 + 0.2393850639086D+01 0.2440975007782D+01 0.2488906247220D+01 0.2537654031002D+01 + 0.2587227998372D+01 0.2637637747157D+01 0.2688892826442D+01 0.2741002728983D+01 + 0.2793976883341D+01 0.2847824645743D+01 0.2902555291652D+01 0.2958178007063D+01 + 0.3014701879494D+01 0.3072135888684D+01 0.3130488897001D+01 0.3189769639525D+01 + 0.3249986713841D+01 0.3311148569513D+01 0.3373263497233D+01 0.3436339617667D+01 + 0.3500384869964D+01 0.3565406999951D+01 0.3631413547991D+01 0.3698411836514D+01 + 0.3766408957221D+01 0.3835411757947D+01 0.3905426829193D+01 0.3976460490322D+01 + 0.4048518775419D+01 0.4121607418815D+01 0.4195731840277D+01 0.4270897129857D+01 + 0.4347108032420D+01 0.4424368931831D+01 0.4502683834816D+01 0.4582056354503D+01 + 0.4662489693636D+01 0.4743986627475D+01 0.4826549486387D+01 0.4910180138127D+01 + 0.4994879969825D+01 0.5080649869681D+01 0.5167490208373D+01 0.5255400820202D+01 + 0.5344380983962D+01 0.5434429403565D+01 0.5525544188426D+01 0.5617722833617D+01 + 0.5710962199815D+01 0.5805258493041D+01 0.5900607244231D+01 0.5997003288635D+01 + 0.6094440745069D+01 0.6192912995049D+01 0.6292412661814D+01 0.6392931589269D+01 + 0.6494460820874D+01 0.6596990578488D+01 0.6700510241224D+01 0.6805008324307D+01 + 0.6910472457995D+01 0.7016889366579D+01 0.7124244847491D+01 0.7232523750568D+01 + 0.7341709957494D+01 0.7451786361463D+01 0.7562734847107D+01 0.7674536270712D+01 + 0.7787170440791D+01 0.7900616099026D+01 0.8014850901658D+01 0.8129851401340D+01 + 0.8245593029526D+01 0.8362050079436D+01 0.8479195689649D+01 0.8597001828383D+01 + 0.8715439278509D+01 0.8834477623371D+01 0.8954085233454D+01 0.9074229253973D+01 + 0.9194875593440D+01 0.9315988913276D+01 0.9437532618530D+01 0.9559468849772D+01 + 0.9681758476237D+01 0.9804361090277D+01 0.9927235003199D+01 0.1005033724256D+02 + 0.1017362355101D+02 0.1029704838669D+02 0.1042056492540D+02 0.1054412506444D+02 + 0.1066767942831D+02 0.1079117737637D+02 0.1091456701244D+02 0.1103779519646D+02 + 0.1116080755839D+02 0.1128354851420D+02 0.1140596128432D+02 0.1152798791434D+02 + 0.1164956929827D+02 0.1177064520433D+02 0.1189115430327D+02 0.1201103419951D+02 + 0.1213022146500D+02 0.1224865167586D+02 0.1236625945201D+02 0.1248297849976D+02 + 0.1259874165744D+02 0.1271348094411D+02 0.1282712761148D+02 0.1293961219902D+02 + 0.1305086459240D+02 0.1316081408518D+02 0.1326938944391D+02 0.1337651897664D+02 + 0.1348213060491D+02 0.1358615193909D+02 0.1368851035736D+02 0.1378913308811D+02 + 0.1388794729589D+02 0.1398488017086D+02 0.1407985902179D+02 0.1417281137257D+02 + 0.1426366506212D+02 0.1435234834789D+02 0.1443879001264D+02 0.1452291947466D+02 + 0.1460466690129D+02 0.1468396332564D+02 0.1476074076649D+02 0.1483493235126D+02 + 0.1490647244192D+02 0.1497529676373D+02 0.1504134253675D+02 0.1510454860984D+02 + 0.1516485559720D+02 0.1522220601698D+02 0.1527654443219D+02 0.1532781759325D+02 + 0.1537597458241D+02 0.1542096695946D+02 0.1546274890874D+02 0.1550127738702D+02 + 0.1553651227211D+02 0.1556841651189D+02 0.1559695627334D+02 0.1562210109145D+02 + 0.1564382401753D+02 0.1566210176664D+02 0.1567691486377D+02 0.1568824778841D+02 + 0.1569608911712D+02 0.1570043166360D+02 0.1570127261607D+02 0.1569861367129D+02 + 0.1569246116496D+02 0.1568282619787D+02 0.1566972475757D+02 0.1565317783486D+02 + 0.1563321153475D+02 0.1560985718135D+02 0.1558315141624D+02 0.1555313628970D+02 + 0.1551985934445D+02 0.1548337369123D+02 0.1544373807583D+02 0.1540101693692D+02 + 0.1535528045436D+02 0.1530660458716D+02 0.1525507110098D+02 0.1520076758423D+02 + 0.1514378745267D+02 0.1508422994170D+02 0.1502220008605D+02 0.1495780868635D+02 + 0.1489117226206D+02 0.1482241299046D+02 0.1475165863115D+02 0.1467904243575D+02 + 0.1460470304238D+02 0.1452878435463D+02 0.1445143540465D+02 0.1437281020013D+02 + 0.1429306755483D+02 0.1421237090260D+02 0.1413088809452D+02 0.1404879117925D+02 + 0.1396625616625D+02 0.1388346277207D+02 0.1380059414952D+02 0.1371783659988D+02 + 0.1363537926825D+02 0.1355341382212D+02 0.1347213411351D+02 0.1339173582480D+02 + 0.1331241609871D+02 0.1323437315279D+02 0.1315780587881D+02 0.1308291342766D+02 + 0.1300989478035D+02 0.1293894830568D+02 0.1287027130535D+02 0.1280405954732D+02 + 0.1274050678825D+02 0.1267980428593D+02 0.1262214030269D+02 0.1256769960087D+02 + 0.1251666293145D+02 0.1246920651702D+02 0.1242550153038D+02 0.1238571356999D+02 + 0.1235000213372D+02 0.1231852009235D+02 0.1229141316414D+02 0.1226881939222D+02 + 0.1225086862623D+02 0.1223768200985D+02 0.1222937147599D+02 0.1222603925117D+02 + 0.1222777737106D+02 0.1223466720868D+02 0.1224677901729D+02 0.1226417148958D+02 + 0.1228689133517D+02 0.1231497287802D+02 0.1234843767581D+02 0.1238729416297D+02 + 0.1243153731911D+02 0.1248114836487D+02 0.1253609448665D+02 0.1259632859227D+02 + 0.1266178909890D+02 0.1273239975523D+02 0.1280806949923D+02 0.1288869235315D+02 + 0.1297414735711D+02 0.1306429854274D+02 0.1315899494816D+02 0.1325807067533D+02 + 0.1336134499111D+02 0.1346862247282D+02 0.1357969319917D+02 0.1369433298744D+02 + 0.1381230367740D+02 0.1393335346243D+02 0.1405721726828D+02 0.1418361717951D+02 + 0.1431226291376D+02 0.1444285234362D+02 0.1457507206581D+02 0.1470859801733D+02 + 0.1484309613763D+02 0.1497822307639D+02 0.1511362694548D+02 0.1524894811426D+02 + 0.1538382004666D+02 0.1551787017849D+02 0.1565072083339D+02 0.1578199017530D+02 + 0.1591129319546D+02 0.1603824273170D+02 0.1616245051740D+02 0.1628352825765D+02 + 0.1640108872963D+02 0.1651474690448D+02 0.1662412108723D+02 0.1672883407174D+02 + 0.1682851430716D+02 0.1692279707220D+02 0.1701132565381D+02 0.1709375252614D+02 + 0.1716974052608D+02 0.1723896402125D+02 0.1730111006644D+02 0.1735587954416D+02 + 0.1740298828530D+02 0.1744216816538D+02 0.1747316817225D+02 0.1749575544089D+02 + 0.1750971625093D+02 0.1751485698260D+02 0.1751100502688D+02 0.1749800964559D+02 + 0.1747574277733D+02 0.1744409978499D+02 0.1740300014123D+02 0.1735238804766D+02 + 0.1729223298439D+02 0.1722253018618D+02 0.1714330104180D+02 0.1705459341368D+02 + 0.1695648187457D+02 0.1684906785873D+02 0.1673247972505D+02 0.1660687272995D+02 + 0.1647242890818D+02 0.1632935685981D+02 0.1617789144222D+02 0.1601829336618D+02 + 0.1585084869528D+02 0.1567586824865D+02 0.1549368690699D+02 0.1530466282265D+02 + 0.1510917653451D+02 0.1490762998916D+02 0.1470044547022D+02 0.1448806443791D+02 + 0.1427094628160D+02 0.1404956698852D+02 0.1382441773199D+02 0.1359600338336D+02 + 0.1336484095192D+02 0.1313145795774D+02 0.1289639074258D+02 0.1266018272468D+02 + 0.1242338260337D+02 0.1218654252002D+02 0.1195021618209D+02 0.1171495695744D+02 + 0.1148131594627D+02 0.1124984003849D+02 0.1102106996440D+02 0.1079553834688D+02 + 0.1057376776347D+02 0.1035626882667D+02 0.1014353829125D+02 0.9936057196884D+01 + 0.9734289054994D+01 0.9538678088120D+01 0.9349647530399D+01 0.9167597997384D+01 + 0.8992905933301D+01 0.8825922143594D+01 0.8666970420224D+01 0.8516346266999D+01 + 0.8374315731611D+01 0.8241114350747D+01 0.8116946214096D+01 0.8001983152570D+01 + 0.7896364055459D+01 0.7800194320670D+01 0.7713545441561D+01 0.7636454733225D+01 + 0.7568925200401D+01 0.7510925548528D+01 0.7462390338698D+01 0.7423220286625D+01 + 0.7393282704950D+01 0.7372412087556D+01 0.7360410833787D+01 0.7357050109802D+01 + 0.7362070843542D+01 0.7375184849138D+01 0.7396076075866D+01 0.7424401976120D+01 + 0.7459794986211D+01 0.7501864113185D+01 0.7550196620265D+01 0.7604359802945D+01 + 0.7663902847256D+01 0.7728358761219D+01 0.7797246370063D+01 0.7870072365405D+01 + 0.7946333398216D+01 0.8025518205140D+01 0.8107109757504D+01 0.8190587422172D+01 + 0.8275429123337D+01 0.8361113494303D+01 0.8447122008353D+01 0.8532941077928D+01 + 0.8618064111536D+01 0.8701993518075D+01 0.8784242648578D+01 0.8864337665829D+01 + 0.8941819332731D+01 0.9016244710878D+01 0.9087188761372D+01 0.9154245840560D+01 + 0.9217031084099D+01 0.9275181673474D+01 0.9328357979881D+01 0.9376244581215D+01 + 0.9418551148709D+01 0.9455013200639D+01 0.9485392721360D+01 0.9509478644797D+01 + 0.9527087202359D+01 0.9538062136102D+01 0.9542274778747D+01 0.9539624002998D+01 + 0.9530036043300D+01 0.9513464193959D+01 0.9489888388159D+01 0.9459314663078D+01 + 0.9421774516843D+01 0.9377324163609D+01 0.9326043693467D+01 0.9268036144314D+01 + 0.9203426493115D+01 0.9132360574297D+01 0.9055003933175D+01 0.8971540622481D+01 + 0.8882171950151D+01 0.8787115186520D+01 0.8686602239071D+01 0.8580878302773D+01 + 0.8470200493895D+01 0.8354836475027D+01 0.8235063078754D+01 0.8111164937189D+01 + 0.7983433124252D+01 0.7852163817216D+01 0.7717656983696D+01 0.7580215099831D+01 + 0.7440141905014D+01 0.7297741198086D+01 0.7153315679440D+01 0.7007165843079D+01 + 0.6859588922166D+01 0.6710877891167D+01 0.6561320527250D+01 0.6411198533128D+01 + 0.6260786723101D+01 0.6110352273646D+01 0.5960154039458D+01 0.5810441935471D+01 + 0.5661456384987D+01 0.5513427833700D+01 0.5366576329042D+01 0.5221111163955D+01 + 0.5077230583918D+01 0.4935121555751D+01 0.4794959596475D+01 0.4656908660288D+01 + 0.4521121081498D+01 0.4387737571052D+01 0.4256887264186D+01 0.4128687816522D+01 + 0.4003245545873D+01 0.3880655616880D+01 0.3761002265561D+01 0.3644359060777D+01 + 0.3530789199588D+01 0.3420345833472D+01 0.3313072422343D+01 0.3209003113371D+01 + 0.3108163141592D+01 0.3010569249384D+01 0.2916230121919D+01 0.2825146835796D+01 + 0.2737313318133D+01 0.2652716813508D+01 0.2571338356232D+01 0.2493153245580D+01 + 0.2418131521695D+01 0.2346238440047D+01 0.2277434942461D+01 0.2211678122838D+01 + 0.2148921685899D+01 0.2089116397376D+01 0.2032210524266D+01 0.1978150263893D+01 + 0.1926880160684D+01 0.1878343509721D+01 0.1832482746269D+01 0.1789239820638D+01 + 0.1748556557871D+01 0.1710375001879D+01 0.1674637743804D+01 0.1641288234472D+01 + 0.1610271080956D+01 0.1581532327338D+01 0.1555019719890D+01 0.1530682956958D+01 + 0.1508473923914D+01 0.1488346913611D+01 0.1470258832820D+01 0.1454169395155D+01 + 0.1440041301042D+01 0.1427840405245D+01 0.1417535872504D+01 0.1409100321753D+01 + 0.1402509959377D+01 0.1397744701874D+01 0.1394788288181D+01 0.1393628381826D+01 + 0.1394256662892D+01 0.1396668909610D+01 0.1400865069190D+01 0.1406849317222D+01 + 0.1414629369614D+01 0.1424336942263D+01 0.1436096575202D+01 0.1449912447024D+01 + 0.1465794674727D+01 0.1483759333931D+01 0.1503828494539D+01 0.1526030271798D+01 + 0.1550398892649D+01 0.1576974777196D+01 0.1605804635055D+01 0.1636941576215D+01 + 7 1012 + 1 0 -1 -511.89194 + 2 0 -1 -58.90181 + 2 1 1 -50.68932 + 2 1 -2 -49.77537 + 3 0 -1 -5.73317 + 3 1 1 -3.34334 + 3 1 -2 -3.22919 + 0.2122975645015D-04 0.2173507709867D-04 0.2225242316243D-04 0.2278208072829D-04 + 0.2332434268594D-04 0.2387950888954D-04 0.2444788632325D-04 0.2502978927059D-04 + 0.2562553948791D-04 0.2623546638192D-04 0.2685990719144D-04 0.2749920717353D-04 + 0.2815371979393D-04 0.2882380692207D-04 0.2950983903075D-04 0.3021219540050D-04 + 0.3093126432877D-04 0.3166744334418D-04 0.3242113942573D-04 0.3319276922733D-04 + 0.3398275930755D-04 0.3479154636487D-04 0.3561957747857D-04 0.3646731035519D-04 + 0.3733521358096D-04 0.3822376688016D-04 0.3913346137963D-04 0.4006479987955D-04 + 0.4101829713060D-04 0.4199448011777D-04 0.4299388835081D-04 0.4401707416166D-04 + 0.4506460300883D-04 0.4613705378910D-04 0.4723501915650D-04 0.4835910584899D-04 + 0.4950993502270D-04 0.5068814259429D-04 0.5189437959126D-04 0.5312931251066D-04 + 0.5439362368626D-04 0.5568801166444D-04 0.5701319158897D-04 0.5836989559491D-04 + 0.5975887321186D-04 0.6118089177673D-04 0.6263673685632D-04 0.6412721267990D-04 + 0.6565314258201D-04 0.6721536945580D-04 0.6881475621705D-04 0.7045218627922D-04 + 0.7212856403973D-04 0.7384481537777D-04 0.7560188816385D-04 0.7740075278149D-04 + 0.7924240266119D-04 0.8112785482706D-04 0.8305815045642D-04 0.8503435545263D-04 + 0.8705756103141D-04 0.8912888432116D-04 0.9124946897738D-04 0.9342048581165D-04 + 0.9564313343555D-04 0.9791863891974D-04 0.1002482584687D-03 0.1026332781112D-03 + 0.1050750144077D-03 0.1075748151735D-03 0.1101340602203D-03 0.1127541621137D-03 + 0.1154365669501D-03 0.1181827551510D-03 0.1209942422769D-03 0.1238725798590D-03 + 0.1268193562527D-03 0.1298361975089D-03 0.1329247682680D-03 0.1360867726735D-03 + 0.1393239553083D-03 0.1426381021518D-03 0.1460310415612D-03 0.1495046452749D-03 + 0.1530608294397D-03 0.1567015556625D-03 0.1604288320871D-03 0.1642447144955D-03 + 0.1681513074364D-03 0.1721507653792D-03 0.1762452938963D-03 0.1804371508722D-03 + 0.1847286477421D-03 0.1891221507592D-03 0.1936200822920D-03 0.1982249221522D-03 + 0.2029392089542D-03 0.2077655415060D-03 0.2127065802334D-03 0.2177650486382D-03 + 0.2229437347894D-03 0.2282454928513D-03 0.2336732446459D-03 0.2392299812538D-03 + 0.2449187646513D-03 0.2507427293871D-03 0.2567050842979D-03 0.2628091142650D-03 + 0.2690581820118D-03 0.2754557299435D-03 0.2820052820308D-03 0.2887104457371D-03 + 0.2955749139921D-03 0.3026024672103D-03 0.3097969753590D-03 0.3171624000731D-03 + 0.3247027968207D-03 0.3324223171196D-03 0.3403252108055D-03 0.3484158283536D-03 + 0.3566986232552D-03 0.3651781544500D-03 0.3738590888149D-03 0.3827462037126D-03 + 0.3918443895988D-03 0.4011586526914D-03 0.4106941177020D-03 0.4204560306321D-03 + 0.4304497616342D-03 0.4406808079408D-03 0.4511547968612D-03 0.4618774888502D-03 + 0.4728547806468D-03 0.4840927084883D-03 0.4955974513988D-03 0.5073753345551D-03 + 0.5194328327314D-03 0.5317765738249D-03 0.5444133424641D-03 0.5573500837015D-03 + 0.5705939067925D-03 0.5841520890639D-03 0.5980320798714D-03 0.6122415046513D-03 + 0.6267881690659D-03 0.6416800632466D-03 0.6569253661363D-03 0.6725324499326D-03 + 0.6885098846360D-03 0.7048664427037D-03 0.7216111038125D-03 0.7387530597330D-03 + 0.7563017193176D-03 0.7742667136049D-03 0.7926579010441D-03 0.8114853728404D-03 + 0.8307594584254D-03 0.8504907310562D-03 0.8706900135433D-03 0.8913683841142D-03 + 0.9125371824119D-03 0.9342080156346D-03 0.9563927648179D-03 0.9791035912634D-03 + 0.1002352943117D-02 0.1026153562102D-02 0.1050518490405D-02 0.1075461077728D-02 + 0.1100994988496D-02 0.1127134209246D-02 0.1153893056171D-02 0.1181286182852D-02 + 0.1209328588167D-02 0.1238035624379D-02 0.1267423005415D-02 0.1297506815344D-02 + 0.1328303517037D-02 0.1359829961041D-02 0.1392103394654D-02 0.1425141471212D-02 + 0.1458962259585D-02 0.1493584253904D-02 0.1529026383504D-02 0.1565308023106D-02 + 0.1602449003221D-02 0.1640469620811D-02 0.1679390650189D-02 0.1719233354165D-02 + 0.1760019495464D-02 0.1801771348394D-02 0.1844511710794D-02 0.1888263916250D-02 + 0.1933051846599D-02 0.1978899944720D-02 0.2025833227614D-02 0.2073877299798D-02 + 0.2123058366995D-02 0.2173403250151D-02 0.2224939399761D-02 0.2277694910540D-02 + 0.2331698536421D-02 0.2386979705903D-02 0.2443568537747D-02 0.2501495857040D-02 + 0.2560793211623D-02 0.2621492888896D-02 0.2683627933011D-02 0.2747232162458D-02 + 0.2812340188056D-02 0.2878987431352D-02 0.2947210143447D-02 0.3017045424251D-02 + 0.3088531242177D-02 0.3161706454285D-02 0.3236610826892D-02 0.3313285056646D-02 + 0.3391770792086D-02 0.3472110655691D-02 0.3554348266436D-02 0.3638528262858D-02 + 0.3724696326649D-02 0.3812899206788D-02 0.3903184744224D-02 0.3995601897109D-02 + 0.4090200766624D-02 0.4187032623373D-02 0.4286149934389D-02 0.4387606390746D-02 + 0.4491456935804D-02 0.4597757794082D-02 0.4706566500803D-02 0.4817941932088D-02 + 0.4931944335851D-02 0.5048635363379D-02 0.5168078101634D-02 0.5290337106279D-02 + 0.5415478435454D-02 0.5543569684307D-02 0.5674680020311D-02 0.5808880219367D-02 + 0.5946242702730D-02 0.6086841574754D-02 0.6230752661494D-02 0.6378053550168D-02 + 0.6528823629508D-02 0.6683144131013D-02 0.6841098171130D-02 0.7002770794372D-02 + 0.7168249017405D-02 0.7337621874121D-02 0.7510980461712D-02 0.7688417987773D-02 + 0.7870029818463D-02 0.8055913527720D-02 0.8246168947593D-02 0.8440898219673D-02 + 0.8640205847678D-02 0.8844198751201D-02 0.9052986320644D-02 0.9266680473381D-02 + 0.9485395711148D-02 0.9709249178711D-02 0.9938360723829D-02 0.1017285295853D-01 + 0.1041285132175D-01 0.1065848414335D-01 0.1090988270951D-01 0.1116718132961D-01 + 0.1143051740455D-01 0.1170003149653D-01 0.1197586740047D-01 0.1225817221684D-01 + 0.1254709642620D-01 0.1284279396532D-01 0.1314542230495D-01 0.1345514252930D-01 + 0.1377211941725D-01 0.1409652152530D-01 0.1442852127232D-01 0.1476829502620D-01 + 0.1511602319226D-01 0.1547189030365D-01 0.1583608511371D-01 0.1620880069022D-01 + 0.1659023451183D-01 0.1698058856639D-01 0.1738006945154D-01 0.1778888847734D-01 + 0.1820726177118D-01 0.1863541038486D-01 0.1907356040402D-01 0.1952194305980D-01 + 0.1998079484302D-01 0.2045035762063D-01 0.2093087875471D-01 0.2142261122400D-01 + 0.2192581374792D-01 0.2244075091329D-01 0.2296769330365D-01 0.2350691763133D-01 + 0.2405870687229D-01 0.2462335040374D-01 0.2520114414469D-01 0.2579239069942D-01 + 0.2639739950387D-01 0.2701648697516D-01 0.2764997666416D-01 0.2829819941123D-01 + 0.2896149350513D-01 0.2964020484531D-01 0.3033468710740D-01 0.3104530191220D-01 + 0.3177241899806D-01 0.3251641639684D-01 0.3327768061342D-01 0.3405660680881D-01 + 0.3485359898710D-01 0.3566907018606D-01 0.3650344267166D-01 0.3735714813647D-01 + 0.3823062790211D-01 0.3912433312562D-01 0.4003872501011D-01 0.4097427501948D-01 + 0.4193146509749D-01 0.4291078789111D-01 0.4391274697832D-01 0.4493785710035D-01 + 0.4598664439858D-01 0.4705964665594D-01 0.4815741354312D-01 0.4928050686955D-01 + 0.5042950083923D-01 0.5160498231153D-01 0.5280755106696D-01 0.5403782007813D-01 + 0.5529641578584D-01 0.5658397838041D-01 0.5790116208843D-01 0.5924863546488D-01 + 0.6062708169076D-01 0.6203719887636D-01 0.6347970037015D-01 0.6495531507346D-01 + 0.6646478776099D-01 0.6800887940725D-01 0.6958836751900D-01 0.7120404647380D-01 + 0.7285672786470D-01 0.7454724085125D-01 0.7627643251682D-01 0.7804516823229D-01 + 0.7985433202641D-01 0.8170482696258D-01 0.8359757552242D-01 0.8553351999606D-01 + 0.8751362287932D-01 0.8953886727772D-01 0.9161025731761D-01 0.9372881856432D-01 + 0.9589559844749D-01 0.9811166669365D-01 0.1003781157661D+00 0.1026960613124D+00 + 0.1050666426187D+00 0.1074910230727D+00 0.1099703906329D+00 0.1125059583070D+00 + 0.1150989646366D+00 0.1177506741909D+00 0.1204623780676D+00 0.1232353944021D+00 + 0.1260710688845D+00 0.1289707752849D+00 0.1319359159864D+00 0.1349679225270D+00 + 0.1380682561490D+00 0.1412384083570D+00 0.1444799014844D+00 0.1477942892678D+00 + 0.1511831574303D+00 0.1546481242725D+00 0.1581908412731D+00 0.1618129936965D+00 + 0.1655163012104D+00 0.1693025185104D+00 0.1731734359544D+00 0.1771308802047D+00 + 0.1811767148790D+00 0.1853128412094D+00 0.1895411987104D+00 0.1938637658552D+00 + 0.1982825607598D+00 0.2027996418767D+00 0.2074171086957D+00 0.2121371024533D+00 + 0.2169618068509D+00 0.2218934487801D+00 0.2269342990569D+00 0.2320866731634D+00 + 0.2373529319974D+00 0.2427354826295D+00 0.2482367790682D+00 0.2538593230323D+00 + 0.2596056647304D+00 0.2654784036474D+00 0.2714801893389D+00 0.2776137222308D+00 + 0.2838817544268D+00 0.2902870905217D+00 0.2968325884206D+00 0.3035211601645D+00 + 0.3103557727607D+00 0.3173394490192D+00 0.3244752683937D+00 0.3317663678273D+00 + 0.3392159426028D+00 0.3468272471962D+00 0.3546035961349D+00 0.3625483648577D+00 + 0.3706649905790D+00 0.3789569731540D+00 0.3874278759464D+00 0.3960813266976D+00 + 0.4049210183955D+00 0.4139507101454D+00 0.4231742280388D+00 0.4325954660221D+00 + 0.4422183867640D+00 0.4520470225197D+00 0.4620854759931D+00 0.4723379211946D+00 + 0.4828086042953D+00 0.4935018444749D+00 0.5044220347646D+00 0.5155736428822D+00 + 0.5269612120602D+00 0.5385893618646D+00 0.5504627890040D+00 0.5625862681281D+00 + 0.5749646526146D+00 0.5876028753427D+00 0.6005059494532D+00 0.6136789690924D+00 + 0.6271271101407D+00 0.6408556309226D+00 0.6548698728981D+00 0.6691752613333D+00 + 0.6837773059493D+00 0.6986816015479D+00 0.7138938286123D+00 0.7294197538810D+00 + 0.7452652308942D+00 0.7614362005101D+00 0.7779386913894D+00 0.7947788204470D+00 + 0.8119627932680D+00 0.8294969044866D+00 0.8473875381261D+00 0.8656411678975D+00 + 0.8842643574549D+00 0.9032637606047D+00 0.9226461214683D+00 0.9424182745935D+00 + 0.9625871450140D+00 0.9831597482541D+00 0.1004143190275D+01 0.1025544667362D+01 + 0.1047371465949D+01 0.1069630962376D+01 0.1092330622582D+01 0.1115478001718D+01 + 0.1139080743699D+01 0.1163146580667D+01 0.1187683332379D+01 0.1212698905512D+01 + 0.1238201292877D+01 0.1264198572546D+01 0.1290698906886D+01 0.1317710541494D+01 + 0.1345241804028D+01 0.1373301102944D+01 0.1401896926110D+01 0.1431037839321D+01 + 0.1460732484690D+01 0.1490989578921D+01 0.1521817911461D+01 0.1553226342519D+01 + 0.1585223800953D+01 0.1617819282025D+01 0.1651021845012D+01 0.1684840610666D+01 + 0.1719284758534D+01 0.1754363524114D+01 0.1790086195862D+01 0.1826462112019D+01 + 0.1863500657290D+01 0.1901211259327D+01 0.1939603385053D+01 0.1978686536792D+01 + 0.2018470248210D+01 0.2058964080068D+01 0.2100177615772D+01 0.2142120456722D+01 + 0.2184802217451D+01 0.2228232520549D+01 0.2272420991371D+01 0.2317377252521D+01 + 0.2363110918097D+01 0.2409631587718D+01 0.2456948840298D+01 0.2505072227579D+01 + 0.2554011267414D+01 0.2603775436800D+01 0.2654374164640D+01 0.2705816824249D+01 + 0.2758112725590D+01 0.2811271107225D+01 0.2865301128002D+01 0.2920211858443D+01 + 0.2976012271854D+01 0.3032711235135D+01 0.3090317499294D+01 0.3148839689666D+01 + 0.3208286295814D+01 0.3268665661132D+01 0.3329985972130D+01 0.3392255247403D+01 + 0.3455481326284D+01 0.3519671857166D+01 0.3584834285516D+01 0.3650975841540D+01 + 0.3718103527540D+01 0.3786224104928D+01 0.3855344080910D+01 0.3925469694842D+01 + 0.3996606904248D+01 0.4068761370505D+01 0.4141938444201D+01 0.4216143150155D+01 + 0.4291380172106D+01 0.4367653837082D+01 0.4444968099432D+01 0.4523326524540D+01 + 0.4602732272224D+01 0.4683188079814D+01 0.4764696244923D+01 0.4847258607911D+01 + 0.4930876534058D+01 0.5015550895439D+01 0.5101282052526D+01 0.5188069835504D+01 + 0.5275913525340D+01 0.5364811834582D+01 0.5454762887935D+01 0.5545764202593D+01 + 0.5637812668364D+01 0.5730904527600D+01 0.5825035354930D+01 0.5920200036841D+01 + 0.6016392751096D+01 0.6113606946037D+01 0.6211835319763D+01 0.6311069799237D+01 + 0.6411301519318D+01 0.6512520801757D+01 0.6614717134178D+01 0.6717879149076D+01 + 0.6821994602856D+01 0.6927050354936D+01 0.7033032346971D+01 0.7139925582197D+01 + 0.7247714104955D+01 0.7356380980422D+01 0.7465908274590D+01 0.7576277034522D+01 + 0.7687467268944D+01 0.7799457929201D+01 0.7912226890625D+01 0.8025750934367D+01 + 0.8140005729731D+01 0.8254965817070D+01 0.8370604591283D+01 0.8486894285977D+01 + 0.8603805958343D+01 0.8721309474805D+01 0.8839373497487D+01 0.8957965471583D+01 + 0.9077051613664D+01 0.9196596901005D+01 0.9316565061973D+01 0.9436918567578D+01 + 0.9557618624205D+01 0.9678625167647D+01 0.9799896858462D+01 0.9921391078761D+01 + 0.1004306393048D+02 0.1016487023519D+02 0.1028676353561D+02 0.1040869609872D+02 + 0.1053061892078D+02 0.1065248173410D+02 0.1077423301584D+02 0.1089581999877D+02 + 0.1101718868413D+02 0.1113828385666D+02 0.1125904910191D+02 0.1137942682584D+02 + 0.1149935827678D+02 0.1161878356999D+02 0.1173764171462D+02 0.1185587064341D+02 + 0.1197340724503D+02 0.1209018739920D+02 0.1220614601465D+02 0.1232121706995D+02 + 0.1243533365740D+02 0.1254842802982D+02 0.1266043165050D+02 0.1277127524634D+02 + 0.1288088886404D+02 0.1298920192971D+02 0.1309614331160D+02 0.1320164138629D+02 + 0.1330562410812D+02 0.1340801908212D+02 0.1350875364026D+02 0.1360775492116D+02 + 0.1370494995324D+02 0.1380026574132D+02 0.1389362935662D+02 0.1398496803019D+02 + 0.1407420924981D+02 0.1416128086012D+02 0.1424611116627D+02 0.1432862904069D+02 + 0.1440876403324D+02 0.1448644648440D+02 0.1456160764164D+02 0.1463417977876D+02 + 0.1470409631813D+02 0.1477129195572D+02 0.1483570278883D+02 0.1489726644633D+02 + 0.1495592222127D+02 0.1501161120574D+02 0.1506427642781D+02 0.1511386299027D+02 + 0.1516031821110D+02 0.1520359176531D+02 0.1524363582812D+02 0.1528040521898D+02 + 0.1531385754641D+02 0.1534395335325D+02 0.1537065626208D+02 0.1539393312048D+02 + 0.1541375414585D+02 0.1543009306950D+02 0.1544292727951D+02 0.1545223796216D+02 + 0.1545801024155D+02 0.1546023331695D+02 0.1545890059744D+02 0.1545400983365D+02 + 0.1544556324596D+02 0.1543356764880D+02 0.1541803457065D+02 0.1539898036925D+02 + 0.1537642634154D+02 0.1535039882796D+02 0.1532092931044D+02 0.1528805450387D+02 + 0.1525181644030D+02 0.1521226254557D+02 0.1516944570778D+02 0.1512342433713D+02 + 0.1507426241669D+02 0.1502202954350D+02 0.1496680095964D+02 0.1490865757272D+02 + 0.1484768596530D+02 0.1478397839284D+02 0.1471763276969D+02 0.1464875264266D+02 + 0.1457744715182D+02 0.1450383097801D+02 0.1442802427679D+02 0.1435015259838D+02 + 0.1427034679327D+02 0.1418874290321D+02 0.1410548203722D+02 0.1402071023247D+02 + 0.1393457829969D+02 0.1384724165293D+02 0.1375886012364D+02 0.1366959775879D+02 + 0.1357962260304D+02 0.1348910646488D+02 0.1339822466686D+02 0.1330715577980D+02 + 0.1321608134121D+02 0.1312518555808D+02 0.1303465499419D+02 0.1294467824221D+02 + 0.1285544558101D+02 0.1276714861841D+02 0.1267997991994D+02 0.1259413262403D+02 + 0.1250980004419D+02 0.1242717525885D+02 0.1234645068948D+02 0.1226781766776D+02 + 0.1219146599257D+02 0.1211758347770D+02 0.1204635549121D+02 0.1197796448732D+02 + 0.1191258953197D+02 0.1185040582321D+02 0.1179158420730D+02 0.1173629069208D+02 + 0.1168468595856D+02 0.1163692487226D+02 0.1159315599549D+02 0.1155352110209D+02 + 0.1151815469598D+02 0.1148718353503D+02 0.1146072616178D+02 0.1143889244247D+02 + 0.1142178311602D+02 0.1140948935454D+02 0.1140209233686D+02 0.1139966283678D+02 + 0.1140226082774D+02 0.1140993510519D+02 0.1142272292875D+02 0.1144064968524D+02 + 0.1146372857460D+02 0.1149196031991D+02 0.1152533290326D+02 0.1156382132880D+02 + 0.1160738741454D+02 0.1165597961412D+02 0.1170953287012D+02 0.1176796849989D+02 + 0.1183119411535D+02 0.1189910357777D+02 0.1197157698856D+02 0.1204848071701D+02 + 0.1212966746596D+02 0.1221497637600D+02 0.1230423316888D+02 0.1239725033077D+02 + 0.1249382733567D+02 0.1259375090926D+02 0.1269679533346D+02 0.1280272279167D+02 + 0.1291128375448D+02 0.1302221740584D+02 0.1313525210912D+02 0.1325010591253D+02 + 0.1336648709337D+02 0.1348409474012D+02 0.1360261937149D+02 0.1372174359123D+02 + 0.1384114277758D+02 0.1396048580566D+02 0.1407943580155D+02 0.1419765092608D+02 + 0.1431478518661D+02 0.1443048927478D+02 0.1454441142812D+02 0.1465619831308D+02 + 0.1476549592746D+02 0.1487195051928D+02 0.1497520951989D+02 0.1507492248828D+02 + 0.1517074206398D+02 0.1526232492551D+02 0.1534933275145D+02 0.1543143318112D+02 + 0.1550830077157D+02 0.1557961794797D+02 0.1564507594396D+02 0.1570437572881D+02 + 0.1575722891823D+02 0.1580335866539D+02 0.1584250052899D+02 0.1587440331524D+02 + 0.1589882989033D+02 0.1591555796049D+02 0.1592438081630D+02 0.1592510803844D+02 + 0.1591756616179D+02 0.1590159929512D+02 0.1587706969359D+02 0.1584385828154D+02 + 0.1580186512290D+02 0.1575100983720D+02 0.1569123195871D+02 0.1562249123695D+02 + 0.1554476787665D+02 0.1545806271560D+02 0.1536239733893D+02 0.1525781412875D+02 + 0.1514437624809D+02 0.1502216755847D+02 0.1489129247063D+02 0.1475187572813D+02 + 0.1460406212401D+02 0.1444801615062D+02 0.1428392158332D+02 0.1411198099888D+02 + 0.1393241522964D+02 0.1374546275490D+02 0.1355137903119D+02 0.1335043576333D+02 + 0.1314292011864D+02 0.1292913388664D+02 0.1270939258714D+02 0.1248402452972D+02 + 0.1225336982785D+02 0.1201777937125D+02 0.1177761376017D+02 0.1153324220569D+02 + 0.1128504140014D+02 0.1103339436205D+02 0.1077868926027D+02 0.1052131822179D+02 + 0.1026167612835D+02 0.1000015940663D+02 0.9737164817090D+01 0.9473088246666D+01 + 0.9208323510392D+01 0.8943261167138D+01 0.8678287354606D+01 0.8413782648689D+01 + 0.8150120952198D+01 0.7887668417870D+01 0.7626782410424D+01 0.7367810512255D+01 + 0.7111089577147D+01 0.6856944836175D+01 0.6605689059620D+01 0.6357621778576D+01 + 0.6113028569417D+01 0.5872180404071D+01 0.5635333068605D+01 0.5402726652271D+01 + 0.5174585108689D+01 0.4951115890458D+01 0.4732509658013D+01 0.4518940063093D+01 + 0.4310563606744D+01 0.4107519571314D+01 0.3909930025455D+01 0.3717899900701D+01 + 0.3531517137795D+01 0.3350852900521D+01 0.3175961854415D+01 0.3006882507418D+01 + 0.2843637609166D+01 0.2686234605393D+01 0.2534666143602D+01 0.2388910626020D+01 + 0.2248932805599D+01 0.2114684420764D+01 0.1986104864410D+01 0.1863121882663D+01 + 0.1745652298807D+01 0.1633602757816D+01 0.1526870486911D+01 0.1425344067651D+01 + 0.1328904215091D+01 0.1237424559686D+01 0.1150772427713D+01 0.1068809616148D+01 + 0.9913931580887D+00 0.9183760750247D+00 0.8496081124357D+00 0.7849364554513D+00 + 0.7242064215293D+00 0.6672621273712D+00 0.6139471275574D+00 0.5641050226618D+00 + 0.5175800348878D+00 0.4742175495586D+00 0.4338646210828D+00 0.3963704423129D+00 + 0.3615867764997D+00 0.3293683513354D+00 0.2995732148544D+00 0.2720630532321D+00 + 0.2467034707815D+00 0.2233642326902D+00 0.2019194712763D+00 0.1822478567499D+00 + 0.1642327336682D+00 0.1477622244444D+00 0.1327293014336D+00 0.1190318292464D+00 + 0.1065725790655D+00 0.9525921682581D-01 0.8500426719540D-01 0.7572505534570D-01 + 0.6734362852856D-01 0.5978665949119D-01 0.5298533375213D-01 0.4687522273735D-01 + 0.4139614473480D-01 0.3649201557103D-01 0.3211069084453D-01 0.2820380147099D-01 + 0.2472658420543D-01 0.2163770870794D-01 0.1889910261478D-01 0.1647577596641D-01 + 0.1433564623066D-01 0.1244936504301D-01 0.1079014767040D-01 0.9333606088531D-02 + 0.8057586449521D-02 0.6942011605538D-02 0.5968729247262D-02 0.5121366113861D-02 + 0.4385188634413D-02 0.3746970269980D-02 0.3194865741265D-02 0.2718292249293D-02 + 0.2307817726031D-02 0.1955056088404D-02 0.1652569412799D-02 0.1393776897745D-02 + 0.1172870439853D-02 0.9847366120634D-03 0.8248848034661D-03 0.6893812560569D-03 + 0.5747887154298D-03 0.4781113990982D-03 0.3967449774979D-03 0.3284312582634D-03 + 0.2712172636576D-03 0.2234183935981D-03 0.1835853721449D-03 0.1504746831443D-03 + 0.1230222105786D-03 0.1003198106540D-03 0.8159455542106D-04 0.6619040144209D-04 + 0.5355205138722D-04 0.4321079120846D-04 0.3477210045803D-04 0.2790484818898D-04 + 0.2233190152246D-04 0.1782198824118D-04 0.1418266855132D-04 0.1125428434880D-04 + 0.8904766856498D-05 0.7025195313453D-05 0.5526010459652D-05 0.4333796852085D-05 + 0.3388557563637D-05 0.2641413563333D-05 0.2052668070841D-05 0.1590183444862D-05 + 0.1228024735392D-05 0.9453299398051D-06 0.7253722919424D-06 0.5547846237125D-06 + 0.4229200131023D-06 0.3213266143727D-06 0.2433177983142D-06 0.1836215545666D-06 + 0.1380955642703D-06 0.1034964778941D-06 0.7729376586493D-07 0.5752008209307D-07 + 0.4265142355148D-07 0.3151151106808D-07 0.2319578320089D-07 0.1701120974173D-07 + 0.1242881489534D-07 0.9046371073667D-08 0.6559198960071D-08 0.4737402476978D-08 + 0.3408191153158D-08 0.2442208093542D-08 0.1742998768590D-08 0.1238932286038D-08 + 0.8770296193333D-09 0.6182683290111D-09 0.4340255982013D-09 0.3033950772413D-09 + 0.2111715589818D-09 0.1463438404983D-09 0.1009726185101D-09 0.6935859066118D-10 + 0.4742849271888D-10 0.3228488955626D-10 0.2187547853929D-10 0.1475212866899D-10 + 0.9901881750809D-11 0.6613860882122D-11 0.4396644350124D-11 0.2908650000322D-11 + 0.1914873227728D-11 0.1254415200484D-11 0.8176535094916D-12 0.5302708391854D-12 + 0.3421370551355D-12 0.2196087836422D-12 0.1402231518601D-12 0.8906014768602D-13 + LSMS: xx z= 26. xvalws= 2.77074 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728402963D+02-0.5199725117641D+02-0.5199721792578D+02-0.5199718427293D+02 +-0.5199715021300D+02-0.5199711574107D+02-0.5199708085214D+02-0.5199704554119D+02 +-0.5199700980309D+02-0.5199697363268D+02-0.5199693702474D+02-0.5199689997397D+02 +-0.5199686247500D+02-0.5199682452243D+02-0.5199678611076D+02-0.5199674723444D+02 +-0.5199670788785D+02-0.5199666806529D+02-0.5199662776101D+02-0.5199658696918D+02 +-0.5199654568390D+02-0.5199650389922D+02-0.5199646160907D+02-0.5199641880734D+02 +-0.5199637548785D+02-0.5199633164434D+02-0.5199628727046D+02-0.5199624235979D+02 +-0.5199619690585D+02-0.5199615090205D+02-0.5199610434176D+02-0.5199605721822D+02 +-0.5199600952464D+02-0.5199596125410D+02-0.5199591239964D+02-0.5199586295419D+02 +-0.5199581291060D+02-0.5199576226162D+02-0.5199571099994D+02-0.5199565911815D+02 +-0.5199560660874D+02-0.5199555346411D+02-0.5199549967658D+02-0.5199544523837D+02 +-0.5199539014162D+02-0.5199533437834D+02-0.5199527794048D+02-0.5199522081989D+02 +-0.5199516300828D+02-0.5199510449731D+02-0.5199504527851D+02-0.5199498534331D+02 +-0.5199492468306D+02-0.5199486328897D+02-0.5199480115217D+02-0.5199473826367D+02 +-0.5199467461436D+02-0.5199461019507D+02-0.5199454499646D+02-0.5199447900910D+02 +-0.5199441222344D+02-0.5199434462984D+02-0.5199427621849D+02-0.5199420697954D+02 +-0.5199413690295D+02-0.5199406597858D+02-0.5199399419618D+02-0.5199392154537D+02 +-0.5199384801563D+02-0.5199377359634D+02-0.5199369827672D+02-0.5199362204589D+02 +-0.5199354489281D+02-0.5199346680633D+02-0.5199338777515D+02-0.5199330778784D+02 +-0.5199322683282D+02-0.5199314489839D+02-0.5199306197270D+02-0.5199297804374D+02 +-0.5199289309939D+02-0.5199280712733D+02-0.5199272011516D+02-0.5199263205027D+02 +-0.5199254291992D+02-0.5199245271123D+02-0.5199236141114D+02-0.5199226900644D+02 +-0.5199217548376D+02-0.5199208082958D+02-0.5199198503019D+02-0.5199188807175D+02 +-0.5199178994021D+02-0.5199169062139D+02-0.5199159010092D+02-0.5199148836424D+02 +-0.5199138539665D+02-0.5199128118323D+02-0.5199117570892D+02-0.5199106895845D+02 +-0.5199096091638D+02-0.5199085156707D+02-0.5199074089471D+02-0.5199062888326D+02 +-0.5199051551654D+02-0.5199040077813D+02-0.5199028465143D+02-0.5199016711964D+02 +-0.5199004816574D+02-0.5198992777253D+02-0.5198980592257D+02-0.5198968259824D+02 +-0.5198955778170D+02-0.5198943145487D+02-0.5198930359948D+02-0.5198917419701D+02 +-0.5198904322875D+02-0.5198891067574D+02-0.5198877651879D+02-0.5198864073848D+02 +-0.5198850331517D+02-0.5198836422896D+02-0.5198822345972D+02-0.5198808098707D+02 +-0.5198793679039D+02-0.5198779084882D+02-0.5198764314123D+02-0.5198749364622D+02 +-0.5198734234217D+02-0.5198718920716D+02-0.5198703421905D+02-0.5198687735537D+02 +-0.5198671859343D+02-0.5198655791024D+02-0.5198639528254D+02-0.5198623068679D+02 +-0.5198606409915D+02-0.5198589549550D+02-0.5198572485143D+02-0.5198555214224D+02 +-0.5198537734293D+02-0.5198520042816D+02-0.5198502137235D+02-0.5198484014954D+02 +-0.5198465673351D+02-0.5198447109769D+02-0.5198428321519D+02-0.5198409305883D+02 +-0.5198390060104D+02-0.5198370581396D+02-0.5198350866939D+02-0.5198330913876D+02 +-0.5198310719319D+02-0.5198290280341D+02-0.5198269593983D+02-0.5198248657249D+02 +-0.5198227467106D+02-0.5198206020484D+02-0.5198184314277D+02-0.5198162345340D+02 +-0.5198140110492D+02-0.5198117606510D+02-0.5198094830136D+02-0.5198071778068D+02 +-0.5198048446968D+02-0.5198024833454D+02-0.5198000934107D+02-0.5197976745462D+02 +-0.5197952264015D+02-0.5197927486220D+02-0.5197902408485D+02-0.5197877027176D+02 +-0.5197851338615D+02-0.5197825339081D+02-0.5197799024804D+02-0.5197772391971D+02 +-0.5197745436723D+02-0.5197718155151D+02-0.5197690543304D+02-0.5197662597177D+02 +-0.5197634312720D+02-0.5197605685833D+02-0.5197576712367D+02-0.5197547388122D+02 +-0.5197517708846D+02-0.5197487670236D+02-0.5197457267938D+02-0.5197426497542D+02 +-0.5197395354589D+02-0.5197363834563D+02-0.5197331932893D+02-0.5197299644952D+02 +-0.5197266966059D+02-0.5197233891476D+02-0.5197200416404D+02-0.5197166535990D+02 +-0.5197132245319D+02-0.5197097539418D+02-0.5197062413252D+02-0.5197026861727D+02 +-0.5196990879687D+02-0.5196954461909D+02-0.5196917603112D+02-0.5196880297948D+02 +-0.5196842541005D+02-0.5196804326804D+02-0.5196765649801D+02-0.5196726504383D+02 +-0.5196686884871D+02-0.5196646785514D+02-0.5196606200494D+02-0.5196565123919D+02 +-0.5196523549829D+02-0.5196481472189D+02-0.5196438884890D+02-0.5196395781753D+02 +-0.5196352156518D+02-0.5196308002855D+02-0.5196263314350D+02-0.5196218084518D+02 +-0.5196172306789D+02-0.5196125974518D+02-0.5196079080977D+02-0.5196031619354D+02 +-0.5195983582758D+02-0.5195934964214D+02-0.5195885756657D+02-0.5195835952942D+02 +-0.5195785545834D+02-0.5195734528011D+02-0.5195682892060D+02-0.5195630630481D+02 +-0.5195577735679D+02-0.5195524199969D+02-0.5195470015573D+02-0.5195415174616D+02 +-0.5195359669127D+02-0.5195303491041D+02-0.5195246632192D+02-0.5195189084316D+02 +-0.5195130839046D+02-0.5195071887917D+02-0.5195012222358D+02-0.5194951833693D+02 +-0.5194890713143D+02-0.5194828851819D+02-0.5194766240726D+02-0.5194702870759D+02 +-0.5194638732701D+02-0.5194573817222D+02-0.5194508114882D+02-0.5194441616121D+02 +-0.5194374311266D+02-0.5194306190525D+02-0.5194237243986D+02-0.5194167461616D+02 +-0.5194096833262D+02-0.5194025348643D+02-0.5193952997356D+02-0.5193879768871D+02 +-0.5193805652527D+02-0.5193730637535D+02-0.5193654712973D+02-0.5193577867788D+02 +-0.5193500090790D+02-0.5193421370652D+02-0.5193341695911D+02-0.5193261054963D+02 +-0.5193179436061D+02-0.5193096827316D+02-0.5193013216694D+02-0.5192928592013D+02 +-0.5192842940944D+02-0.5192756251004D+02-0.5192668509561D+02-0.5192579703828D+02 +-0.5192489820860D+02-0.5192398847556D+02-0.5192306770652D+02-0.5192213576726D+02 +-0.5192119252189D+02-0.5192023783287D+02-0.5191927156096D+02-0.5191829356524D+02 +-0.5191730370307D+02-0.5191630183005D+02-0.5191528780001D+02-0.5191426146503D+02 +-0.5191322267532D+02-0.5191217127930D+02-0.5191110712354D+02-0.5191003005272D+02 +-0.5190893990959D+02-0.5190783653503D+02-0.5190671976795D+02-0.5190558944528D+02 +-0.5190444540195D+02-0.5190328747089D+02-0.5190211548297D+02-0.5190092926700D+02 +-0.5189972864968D+02-0.5189851345560D+02-0.5189728350719D+02-0.5189603862472D+02 +-0.5189477862625D+02-0.5189350332759D+02-0.5189221254235D+02-0.5189090608179D+02 +-0.5188958375491D+02-0.5188824536834D+02-0.5188689072635D+02-0.5188551963080D+02 +-0.5188413188114D+02-0.5188272727435D+02-0.5188130560492D+02-0.5187986666482D+02 +-0.5187841024347D+02-0.5187693612772D+02-0.5187544410178D+02-0.5187393394724D+02 +-0.5187240544300D+02-0.5187085836524D+02-0.5186929248740D+02-0.5186770758014D+02 +-0.5186610341132D+02-0.5186447974591D+02-0.5186283634606D+02-0.5186117297093D+02 +-0.5185948937678D+02-0.5185778531685D+02-0.5185606054135D+02-0.5185431479744D+02 +-0.5185254782916D+02-0.5185075937741D+02-0.5184894917991D+02-0.5184711697117D+02 +-0.5184526248242D+02-0.5184338544160D+02-0.5184148557330D+02-0.5183956259875D+02 +-0.5183761623572D+02-0.5183564619854D+02-0.5183365219802D+02-0.5183163394142D+02 +-0.5182959113240D+02-0.5182752347098D+02-0.5182543065350D+02-0.5182331237255D+02 +-0.5182116831697D+02-0.5181899817174D+02-0.5181680161800D+02-0.5181457833297D+02 +-0.5181232798987D+02-0.5181005025795D+02-0.5180774480235D+02-0.5180541128413D+02 +-0.5180304936016D+02-0.5180065868310D+02-0.5179823890134D+02-0.5179578965895D+02 +-0.5179331059564D+02-0.5179080134665D+02-0.5178826154277D+02-0.5178569081025D+02 +-0.5178308877073D+02-0.5178045504121D+02-0.5177778923399D+02-0.5177509095659D+02 +-0.5177235981171D+02-0.5176959539717D+02-0.5176679730585D+02-0.5176396512563D+02 +-0.5176109843930D+02-0.5175819682457D+02-0.5175525985390D+02-0.5175228709457D+02 +-0.5174927810849D+02-0.5174623245221D+02-0.5174314967682D+02-0.5174002932792D+02 +-0.5173687094551D+02-0.5173367406395D+02-0.5173043821187D+02-0.5172716291215D+02 +-0.5172384768177D+02-0.5172049203182D+02-0.5171709546736D+02-0.5171365748739D+02 +-0.5171017758479D+02-0.5170665524617D+02-0.5170308995189D+02-0.5169948117592D+02 +-0.5169582838578D+02-0.5169213104249D+02-0.5168838860043D+02-0.5168460050732D+02 +-0.5168076620412D+02-0.5167688512494D+02-0.5167295669696D+02-0.5166898034036D+02 +-0.5166495546822D+02-0.5166088148646D+02-0.5165675779371D+02-0.5165258378128D+02 +-0.5164835883303D+02-0.5164408232529D+02-0.5163975362681D+02-0.5163537209858D+02 +-0.5163093709386D+02-0.5162644795799D+02-0.5162190402831D+02-0.5161730463415D+02 +-0.5161264909661D+02-0.5160793672858D+02-0.5160316683457D+02-0.5159833871062D+02 +-0.5159345164422D+02-0.5158850491424D+02-0.5158349779076D+02-0.5157842953502D+02 +-0.5157329939929D+02-0.5156810662682D+02-0.5156285045165D+02-0.5155753009857D+02 +-0.5155214478300D+02-0.5154669371088D+02-0.5154117607855D+02-0.5153559107266D+02 +-0.5152993787006D+02-0.5152421563767D+02-0.5151842353238D+02-0.5151256070096D+02 +-0.5150662627991D+02-0.5150061939535D+02-0.5149453916296D+02-0.5148838468777D+02 +-0.5148215506412D+02-0.5147584937554D+02-0.5146946669454D+02-0.5146300608264D+02 +-0.5145646659012D+02-0.5144984725596D+02-0.5144314710771D+02-0.5143636516137D+02 +-0.5142950042123D+02-0.5142255187982D+02-0.5141551851771D+02-0.5140839930344D+02 +-0.5140119319335D+02-0.5139389913149D+02-0.5138651604948D+02-0.5137904286634D+02 +-0.5137147848843D+02-0.5136382180931D+02-0.5135607170955D+02-0.5134822705665D+02 +-0.5134028670491D+02-0.5133224949527D+02-0.5132411425521D+02-0.5131587979859D+02 +-0.5130754492555D+02-0.5129910842232D+02-0.5129056906116D+02-0.5128192560017D+02 +-0.5127317678315D+02-0.5126432133956D+02-0.5125535798425D+02-0.5124628541740D+02 +-0.5123710232443D+02-0.5122780737574D+02-0.5121839922671D+02-0.5120887651745D+02 +-0.5119923787276D+02-0.5118948190193D+02-0.5117960719865D+02-0.5116961234085D+02 +-0.5115949589056D+02-0.5114925639380D+02-0.5113889238044D+02-0.5112840236408D+02 +-0.5111778484188D+02-0.5110703829447D+02-0.5109616118579D+02-0.5108515196301D+02 +-0.5107400905631D+02-0.5106273087889D+02-0.5105131582667D+02-0.5103976227836D+02 +-0.5102806859514D+02-0.5101623312071D+02-0.5100425418105D+02-0.5099213008436D+02 +-0.5097985912091D+02-0.5096743956297D+02-0.5095486966464D+02-0.5094214766176D+02 +-0.5092927177183D+02-0.5091624019384D+02-0.5090305110822D+02-0.5088970267672D+02 +-0.5087619304230D+02-0.5086252032900D+02-0.5084868264193D+02-0.5083467806710D+02 +-0.5082050467136D+02-0.5080616050232D+02-0.5079164358822D+02-0.5077695193792D+02 +-0.5076208354076D+02-0.5074703636655D+02-0.5073180836542D+02-0.5071639746782D+02 +-0.5070080158445D+02-0.5068501860613D+02-0.5066904640389D+02-0.5065288282874D+02 +-0.5063652571181D+02-0.5061997286414D+02-0.5060322207678D+02-0.5058627112067D+02 +-0.5056911774669D+02-0.5055175968555D+02-0.5053419464788D+02-0.5051642032411D+02 +-0.5049843438458D+02-0.5048023447945D+02-0.5046181823877D+02-0.5044318327247D+02 +-0.5042432717038D+02-0.5040524750226D+02-0.5038594181787D+02-0.5036640764694D+02 +-0.5034664249930D+02-0.5032664386488D+02-0.5030640921379D+02-0.5028593599640D+02 +-0.5026522164341D+02-0.5024426356594D+02-0.5022305915564D+02-0.5020160578474D+02 +-0.5017990080623D+02-0.5015794155393D+02-0.5013572534263D+02-0.5011324946826D+02 +-0.5009051120796D+02-0.5006750782030D+02-0.5004423654542D+02-0.5002069460521D+02 +-0.4999687920344D+02-0.4997278752603D+02-0.4994841674120D+02-0.4992376399966D+02 +-0.4989882643488D+02-0.4987360116327D+02-0.4984808528443D+02-0.4982227588141D+02 +-0.4979617002094D+02-0.4976976475371D+02-0.4974305711462D+02-0.4971604412309D+02 +-0.4968872278335D+02-0.4966109008469D+02-0.4963314300185D+02-0.4960487849528D+02 +-0.4957629351145D+02-0.4954738498327D+02-0.4951814983035D+02-0.4948858495939D+02 +-0.4945868726453D+02-0.4942845362775D+02-0.4939788091919D+02-0.4936696599757D+02 +-0.4933570571061D+02-0.4930409689534D+02-0.4927213637859D+02-0.4923982097740D+02 +-0.4920714749935D+02-0.4917411274309D+02-0.4914071349870D+02-0.4910694654815D+02 +-0.4907280866573D+02-0.4903829661848D+02-0.4900340716666D+02-0.4896813706420D+02 +-0.4893248305909D+02-0.4889644189392D+02-0.4886001030623D+02-0.4882318502909D+02 +-0.4878596279141D+02-0.4874834031849D+02-0.4871031433244D+02-0.4867188155262D+02 +-0.4863303869609D+02-0.4859378247804D+02-0.4855410961222D+02-0.4851401681140D+02 +-0.4847350078774D+02-0.4843255825325D+02-0.4839118592018D+02-0.4834938050138D+02 +-0.4830713871075D+02-0.4826445726356D+02-0.4822133287682D+02-0.4817776226967D+02 +-0.4813374216365D+02-0.4808926928306D+02-0.4804434035526D+02-0.4799895211091D+02 +-0.4795310128431D+02-0.4790678461358D+02-0.4785999884093D+02-0.4781274071282D+02 +-0.4776500698020D+02-0.4771679439861D+02-0.4766809972836D+02-0.4761891973461D+02 +-0.4756925118748D+02-0.4751909086208D+02-0.4746843553857D+02-0.4741728200213D+02 +-0.4736562704295D+02-0.4731346745620D+02-0.4726080004188D+02-0.4720762160479D+02 +-0.4715392895431D+02-0.4709971890425D+02-0.4704498827268D+02-0.4698973388163D+02 +-0.4693395255690D+02-0.4687764112767D+02-0.4682079642628D+02-0.4676341528777D+02 +-0.4670549454962D+02-0.4664703105122D+02-0.4658802163351D+02-0.4652846313853D+02 +-0.4646835240891D+02-0.4640768628735D+02-0.4634646161617D+02-0.4628467523671D+02 +-0.4622232398885D+02-0.4615940471037D+02-0.4609591423645D+02-0.4603184939910D+02 +-0.4596720702657D+02-0.4590198394276D+02-0.4583617696675D+02-0.4576978291218D+02 +-0.4570279858676D+02-0.4563522079176D+02-0.4556704632159D+02-0.4549827196328D+02 +-0.4542889449617D+02-0.4535891069156D+02-0.4528831731237D+02-0.4521711111299D+02 +-0.4514528883912D+02-0.4507284722768D+02-0.4499978300686D+02-0.4492609289624D+02 +-0.4485177360700D+02-0.4477682184233D+02-0.4470123429783D+02-0.4462500766219D+02 +-0.4454813861790D+02-0.4447062384219D+02-0.4439246000814D+02-0.4431364378589D+02 +-0.4423417184413D+02-0.4415404085174D+02-0.4407324747964D+02-0.4399178840285D+02 +-0.4390966030283D+02-0.4382685986996D+02-0.4374338380636D+02-0.4365922882888D+02 +-0.4357439167239D+02-0.4348886909331D+02-0.4340265787340D+02-0.4331575482384D+02 +-0.4322815678953D+02-0.4313986065369D+02-0.4305086334268D+02-0.4296116183110D+02 +-0.4287075314713D+02-0.4277963437808D+02-0.4268780267613D+02-0.4259525526436D+02 +-0.4250198944278D+02-0.4240800259471D+02-0.4231329219311D+02-0.4221785580702D+02 +-0.4212169110814D+02-0.4202479587724D+02-0.4192716801066D+02-0.4182880552657D+02 +-0.4172970657123D+02-0.4162986942478D+02-0.4152929250699D+02-0.4142797438248D+02 +-0.4132591376546D+02-0.4122310952415D+02-0.4111956068435D+02-0.4101526643252D+02 +-0.4091022611799D+02-0.4080443925436D+02-0.4069790551997D+02-0.4059062475744D+02 +-0.4048259697200D+02-0.4037382232884D+02-0.4026430114924D+02-0.4015403390548D+02 +-0.4004302121449D+02-0.3993126383031D+02-0.3981876263529D+02-0.3970551863000D+02 +-0.3959153292214D+02-0.3947680671418D+02-0.3936134129010D+02-0.3924513800125D+02 +-0.3912819825140D+02-0.3901052348125D+02-0.3889211515259D+02-0.3877297473220D+02 +-0.3865310367583D+02-0.3853250341248D+02-0.3841117532917D+02-0.3828912075654D+02 +-0.3816634095549D+02-0.3804283710513D+02-0.3791861029232D+02-0.3779366150300D+02 +-0.3766799161555D+02-0.3754160139636D+02-0.3741449149782D+02-0.3728666245883D+02 +-0.3715811470790D+02-0.3702884856900D+02-0.3689886427010D+02-0.3676816195438D+02 +-0.3663674169408D+02-0.3650460350690D+02-0.3637174737474D+02-0.3623817326473D+02 +-0.3610388115218D+02-0.3596887104531D+02-0.3583314301154D+02-0.3569669720495D+02 +-0.3555953389464D+02-0.3542165349386D+02-0.3528305658922D+02-0.3514374397011D+02 +-0.3500371665774D+02-0.3486297593358D+02-0.3472152336690D+02-0.3457936084122D+02 +-0.3443649057928D+02-0.3429291516643D+02-0.3414863757211D+02-0.3400366116934D+02 +-0.3385798975190D+02-0.3371162754922D+02-0.3356457923876D+02-0.3341684995570D+02 +-0.3326844530007D+02-0.3311937134098D+02-0.3296963461820D+02-0.3281924214079D+02 +-0.3266820138293D+02-0.3251652027694D+02-0.3236420720350D+02-0.3221127097903D+02 +-0.3205772084042D+02-0.3190356642710D+02-0.3174881776049D+02-0.3159348522098D+02 +-0.3143757952257D+02-0.3128111168511D+02-0.3112409300454D+02-0.3096653502093D+02 +-0.3080844948479D+02-0.3064984832153D+02-0.3049074359439D+02-0.3033114746593D+02 +-0.3017107215833D+02-0.3001052991254D+02-0.2984953294675D+02-0.2968809341400D+02 +-0.2952622335948D+02-0.2936393467762D+02-0.2920123906907D+02-0.2903814799805D+02 +-0.2887467265011D+02-0.2871082389066D+02-0.2854661222446D+02-0.2838204775647D+02 +-0.2821714015409D+02-0.2805189861135D+02-0.2788633181514D+02-0.2772044791378D+02 +-0.2755425448842D+02-0.2738775852723D+02-0.2722096640307D+02-0.2705388385454D+02 +-0.2688651597109D+02-0.2671886718221D+02-0.2655094125117D+02-0.2638274127348D+02 +-0.2621426968047D+02-0.2604552824823D+02-0.2587651811214D+02-0.2570723978730D+02 +-0.2553769319514D+02-0.2536787769632D+02-0.2519779213021D+02-0.2502743486110D+02 +-0.2485680383129D+02-0.2468589662112D+02-0.2451471051601D+02-0.2434324258050D+02 +-0.2417148973924D+02-0.2399944886481D+02-0.2382711687194D+02-0.2365449081810D+02 +-0.2348156800981D+02-0.2330834611404D+02-0.2313482327422D+02-0.2296099822964D+02 +-0.2278687043744D+02-0.2261244019567D+02-0.2243770876615D+02-0.2226267849517D+02 +-0.2208735293014D+02-0.2191173693001D+02-0.2173583676674D+02-0.2155966021537D+02 +-0.2138321662948D+02-0.2120651699903D+02-0.2102957398727D+02-0.2085240194340D+02 +-0.2067501688787D+02-0.2049743646710D+02-0.2031967987514D+02-0.2014176773999D+02 +-0.1996372197331D+02-0.1978556558301D+02-0.1960732244950D+02-0.1942901706755D+02 +-0.1925067425750D+02-0.1907231885074D+02-0.1889397535633D+02-0.1871566761696D+02 +-0.1853741846374D+02-0.1835924938052D+02-0.1818118018868D+02-0.1800322876380D+02 +-0.1782541079491D+02-0.1764773959582D+02-0.1747022597686D+02-0.1729287818264D+02 +-0.1711570189939D+02-0.1693870033244D+02-0.1676187435187D+02-0.1658522270158D+02 +-0.1640874226459D+02-0.1623242837596D+02-0.1605627517269D+02-0.1588027596970D+02 +-0.1570442365062D+02-0.1552871106216D+02-0.1535313140208D+02-0.1517767859145D+02 +-0.1500234762341D+02-0.1482713488228D+02-0.1465203842815D+02-0.1447705824363D+02 +-0.1430219644106D+02-0.1412745742929D+02-0.1395284804054D+02-0.1377837761854D+02 +-0.1360405806987D+02-0.1342990388081D+02-0.1325593210249D+02-0.1308216230731D+02 +-0.1290861651951D+02-0.1273531912305D+02-0.1256229674959D+02-0.1238957814960D+02 +-0.1221719404907D+02-0.1204517699438D+02-0.1187356118783D+02-0.1170238231558D+02 +-0.1153167737042D+02-0.1136148447069D+02-0.1119184267735D+02-0.1102279181034D+02 +-0.1085437226576D+02-0.1068662483495D+02-0.1051959052659D+02-0.1035331039265D+02 +-0.1018782535928D+02-0.1002317606321D+02-0.9859402694342D+01-0.9696544845323D+01 +-0.9534641368482D+01-0.9373730240659D+01-0.9213848436346D+01-0.9055031809511D+01 +-0.8897314984394D+01-0.8740731255549D+01-0.8585312497336D+01-0.8431089083029D+01 +-0.8278089813661D+01-0.8126341856676D+01-0.7975870694439D+01-0.7826700082584D+01 +-0.7678852018171D+01-0.7532346717566D+01-0.7387202603932D+01-0.7243436304187D+01 +-0.7101062655233D+01-0.6960094719270D+01-0.6820543807924D+01-0.6682419514939D+01 +-0.6545729757123D+01-0.6410480823229D+01-0.6276677430423D+01-0.6144322787958D+01 +-0.6013418667669D+01-0.5883965480867D+01-0.5755962361193D+01-0.5629407252975D+01 +-0.5504297004604D+01-0.5380627466436D+01-0.5258393592702D+01-0.5137589546863D+01 +-0.5018208809882D+01-0.4900244290793D+01-0.4783688438971D+01-0.4668533357470D+01 +-0.4554770916754D+01-0.4442392868124D+01-0.4331390956131D+01-0.4221757029192D+01 +-0.4113483147635D+01-0.4006561688322D+01-0.3900985445011D+01-0.3796747723533D+01 +-0.3693842430876D+01-0.3592264157211D+01-0.3492008249906D+01-0.3393070878541D+01 +-0.3295449089976D+01-0.3199140852531D+01-0.3104145088414D+01-0.3010461693592D+01 +-0.2918091544431D+01-0.2827036490592D+01-0.2737299333835D+01-0.2648883792669D+01 +-0.2561794453010D+01-0.2476036705393D+01-0.2391616669610D+01-0.2308541108029D+01 +-0.2226817329318D+01-0.2146453084634D+01-0.2067456458802D+01-0.1989835759339D+01 +-0.1913599406514D+01-0.1838755827812D+01-0.1765313360391D+01-0.1693280165020D+01 +-0.1622664154978D+01-0.1553472943063D+01-0.1485713809518D+01-0.1419393693186D+01 +-0.1354519207570D+01-0.1291096682842D+01-0.1229132234097D+01-0.1168631855453D+01 +-0.1109601538882D+01-0.1052047416050D+01-0.9959759208814D+00-0.9413939701484D+00 +-0.8883091590719D+00-0.8367299687430D+00-0.7866659821253D+00-0.7381281054637D+00 +-0.6911287920896D+00-0.6456822658698D+00-0.6018047418553D+00-0.5595146420441D+00 +-0.5188328045500D+00-0.4797826848498D+00-0.4423905481512D+00-0.4066856522662D+00 +-0.3727004206897D+00-0.3404706058472D+00-0.3100354427093D+00-0.2814377931599D+00 +-0.2547240189175D+00 + 0.0000000000000D+00 + 1012 0.2770741520224D+01 + 0.2150927949039D-04 0.2202124536575D-04 0.2254539478646D-04 0.2308201760180D-04 + 0.2363141055333D-04 0.2419387743865D-04 0.2476972927906D-04 0.2535928449121D-04 + 0.2596286906285D-04 0.2658081673262D-04 0.2721346917432D-04 0.2786117618535D-04 + 0.2852429587973D-04 0.2920319488569D-04 0.2989824854795D-04 0.3060984113473D-04 + 0.3133836604977D-04 0.3208422604934D-04 0.3284783346437D-04 0.3362961042788D-04 + 0.3442998910781D-04 0.3524941194536D-04 0.3608833189898D-04 0.3694721269416D-04 + 0.3782652907911D-04 0.3872676708658D-04 0.3964842430179D-04 0.4059201013679D-04 + 0.4155804611131D-04 0.4254706614023D-04 0.4355961682789D-04 0.4459625776943D-04 + 0.4565756185917D-04 0.4674411560639D-04 0.4785651945856D-04 0.4899538813222D-04 + 0.5016135095172D-04 0.5135505219602D-04 0.5257715145361D-04 0.5382832398596D-04 + 0.5510926109951D-04 0.5642067052648D-04 0.5776327681476D-04 0.5913782172693D-04 + 0.6054506464885D-04 0.6198578300785D-04 0.6346077270088D-04 0.6497084853274D-04 + 0.6651684466474D-04 0.6809961507398D-04 0.6972003402351D-04 0.7137899654355D-04 + 0.7307741892426D-04 0.7481623921999D-04 0.7659641776564D-04 0.7841893770513D-04 + 0.8028480553242D-04 0.8219505164534D-04 0.8415073091254D-04 0.8615292325379D-04 + 0.8820273423416D-04 0.9030129567206D-04 0.9244976626185D-04 0.9464933221109D-04 + 0.9690120789284D-04 0.9920663651351D-04 0.1015668907964D-03 0.1039832736813D-03 + 0.1064571190411D-03 0.1089897924148D-03 0.1115826917580D-03 0.1142372482113D-03 + 0.1169549268870D-03 0.1197372276738D-03 0.1225856860613D-03 0.1255018739831D-03 + 0.1284874006808D-03 0.1315439135877D-03 0.1346730992336D-03 0.1378766841712D-03 + 0.1411564359238D-03 0.1445141639563D-03 0.1479517206680D-03 0.1514710024102D-03 + 0.1550739505263D-03 0.1587625524179D-03 0.1625388426349D-03 0.1664049039925D-03 + 0.1703628687133D-03 0.1744149195974D-03 0.1785632912194D-03 0.1828102711544D-03 + 0.1871582012321D-03 0.1916094788209D-03 0.1961665581427D-03 0.2008319516176D-03 + 0.2056082312418D-03 0.2104980299966D-03 0.2155040432913D-03 0.2206290304405D-03 + 0.2258758161753D-03 0.2312472921908D-03 0.2367464187300D-03 0.2423762262044D-03 + 0.2481398168542D-03 0.2540403664457D-03 0.2600811260106D-03 0.2662654236245D-03 + 0.2725966662290D-03 0.2790783414953D-03 0.2857140197324D-03 0.2925073558401D-03 + 0.2994620913080D-03 0.3065820562611D-03 0.3138711715547D-03 0.3213334509168D-03 + 0.3289730031429D-03 0.3367940343406D-03 0.3448008502286D-03 0.3529978584881D-03 + 0.3613895711713D-03 0.3699806071650D-03 0.3787756947128D-03 0.3877796739964D-03 + 0.3969974997780D-03 0.4064342441040D-03 0.4160950990725D-03 0.4259853796663D-03 + 0.4361105266519D-03 0.4464761095462D-03 0.4570878296540D-03 0.4679515231757D-03 + 0.4790731643881D-03 0.4904588689006D-03 0.5021148969868D-03 0.5140476569946D-03 + 0.5262637088364D-03 0.5387697675611D-03 0.5515727070097D-03 0.5646795635561D-03 + 0.5780975399370D-03 0.5918340091694D-03 0.6058965185620D-03 0.6202927938188D-03 + 0.6350307432396D-03 0.6501184620192D-03 0.6655642366457D-03 0.6813765494038D-03 + 0.6975640829812D-03 0.7141357251847D-03 0.7311005737650D-03 0.7484679413557D-03 + 0.7662473605260D-03 0.7844485889531D-03 0.8030816147148D-03 0.8221566617048D-03 + 0.8416841951763D-03 0.8616749274129D-03 0.8821398235337D-03 0.9030901074324D-03 + 0.9245372678559D-03 0.9464930646236D-03 0.9689695349932D-03 0.9919790001731D-03 + 0.1015534071988D-02 0.1039647659698D-02 0.1064332976981D-02 0.1089603549068D-02 + 0.1115473220057D-02 0.1141956160389D-02 0.1169066874495D-02 0.1196820208634D-02 + 0.1225231358897D-02 0.1254315879409D-02 0.1284089690715D-02 0.1314569088366D-02 + 0.1345770751696D-02 0.1377711752814D-02 0.1410409565795D-02 0.1443882076088D-02 + 0.1478147590144D-02 0.1513224845264D-02 0.1549133019674D-02 0.1585891742841D-02 + 0.1623521106018D-02 0.1662041673040D-02 0.1701474491365D-02 0.1741841103378D-02 + 0.1783163557945D-02 0.1825464422244D-02 0.1868766793867D-02 0.1913094313196D-02 + 0.1958471176071D-02 0.2004922146751D-02 0.2052472571166D-02 0.2101148390486D-02 + 0.2150976154989D-02 0.2201983038264D-02 0.2254196851731D-02 0.2307646059493D-02 + 0.2362359793542D-02 0.2418367869301D-02 0.2475700801533D-02 0.2534389820612D-02 + 0.2594466889165D-02 0.2655964719104D-02 0.2718916789042D-02 0.2783357362106D-02 + 0.2849321504172D-02 0.2916845102501D-02 0.2985964884814D-02 0.3056718438800D-02 + 0.3129144232066D-02 0.3203281632551D-02 0.3279170929405D-02 0.3356853354336D-02 + 0.3436371103460D-02 0.3517767359634D-02 0.3601086315312D-02 0.3686373195913D-02 + 0.3773674283724D-02 0.3863036942351D-02 0.3954509641719D-02 0.4048141983652D-02 + 0.4143984728019D-02 0.4242089819491D-02 0.4342510414893D-02 0.4445300911185D-02 + 0.4550516974067D-02 0.4658215567249D-02 0.4768454982366D-02 0.4881294869584D-02 + 0.4996796268890D-02 0.5115021642093D-02 0.5236034905549D-02 0.5359901463622D-02 + 0.5486688242898D-02 0.5616463727181D-02 0.5749297993262D-02 0.5885262747508D-02 + 0.6024431363262D-02 0.6166878919093D-02 0.6312682237899D-02 0.6461919926891D-02 + 0.6614672418475D-02 0.6771022012045D-02 0.6931052916716D-02 0.7094851295016D-02 + 0.7262505307545D-02 0.7434105158642D-02 0.7609743143066D-02 0.7789513693721D-02 + 0.7973513430440D-02 0.8161841209859D-02 0.8354598176397D-02 0.8551887814376D-02 + 0.8753816001287D-02 0.8960491062250D-02 0.9172023825667D-02 0.9388527680122D-02 + 0.9610118632529D-02 0.9836915367568D-02 0.1006903930843D-01 0.1030661467892D-01 + 0.1054976856688D-01 0.1079863098909D-01 0.1105333495749D-01 0.1131401654696D-01 + 0.1158081496451D-01 0.1185387262003D-01 0.1213333519856D-01 0.1241935173418D-01 + 0.1271207468545D-01 0.1301166001257D-01 0.1331826725616D-01 0.1363205961778D-01 + 0.1395320404221D-01 0.1428187130150D-01 0.1461823608081D-01 0.1496247706623D-01 + 0.1531477703430D-01 0.1567532294367D-01 0.1604430602860D-01 0.1642192189452D-01 + 0.1680837061563D-01 0.1720385683464D-01 0.1760858986456D-01 0.1802278379280D-01 + 0.1844665758734D-01 0.1888043520531D-01 0.1932434570378D-01 0.1977862335297D-01 + 0.2024350775185D-01 0.2071924394615D-01 0.2120608254895D-01 0.2170427986376D-01 + 0.2221409801021D-01 0.2273580505238D-01 0.2326967512987D-01 0.2381598859160D-01 + 0.2437503213237D-01 0.2494709893234D-01 0.2553248879941D-01 0.2613150831454D-01 + 0.2674447098014D-01 0.2737169737147D-01 0.2801351529124D-01 0.2867025992742D-01 + 0.2934227401421D-01 0.3002990799646D-01 0.3073352019732D-01 0.3145347698951D-01 + 0.3219015296988D-01 0.3294393113773D-01 0.3371520307664D-01 0.3450436914006D-01 + 0.3531183864059D-01 0.3613803004319D-01 0.3698337116219D-01 0.3784829936233D-01 + 0.3873326176383D-01 0.3963871545150D-01 0.4056512768813D-01 0.4151297613205D-01 + 0.4248274905905D-01 0.4347494558865D-01 0.4449007591493D-01 0.4552866154180D-01 + 0.4659123552298D-01 0.4767834270657D-01 0.4879053998454D-01 0.4992839654695D-01 + 0.5109249414114D-01 0.5228342733595D-01 0.5350180379101D-01 0.5474824453121D-01 + 0.5602338422639D-01 0.5732787147645D-01 0.5866236910176D-01 0.6002755443915D-01 + 0.6142411964345D-01 0.6285277199472D-01 0.6431423421119D-01 0.6580924476805D-01 + 0.6733855822219D-01 0.6890294554290D-01 0.7050319444864D-01 0.7214010975008D-01 + 0.7381451369925D-01 0.7552724634520D-01 0.7727916589591D-01 0.7907114908690D-01 + 0.8090409155624D-01 0.8277890822643D-01 0.8469653369292D-01 0.8665792261951D-01 + 0.8866405014071D-01 0.9071591227111D-01 0.9281452632182D-01 0.9496093132410D-01 + 0.9715618846031D-01 0.9940138150208D-01 0.1016976172560D+00 0.1040460260169D+00 + 0.1064477620282D+00 0.1089040039508D+00 0.1114159553388D+00 0.1139848451236D+00 + 0.1166119281054D+00 0.1192984854532D+00 0.1220458252122D+00 0.1248552828197D+00 + 0.1277282216288D+00 0.1306660334408D+00 0.1336701390448D+00 0.1367419887670D+00 + 0.1398830630269D+00 0.1430948729031D+00 0.1463789607067D+00 0.1497369005636D+00 + 0.1531702990050D+00 0.1566807955666D+00 0.1602700633964D+00 0.1639398098711D+00 + 0.1676917772207D+00 0.1715277431623D+00 0.1754495215419D+00 0.1794589629856D+00 + 0.1835579555582D+00 0.1877484254317D+00 0.1920323375616D+00 0.1964116963718D+00 + 0.2008885464482D+00 0.2054649732406D+00 0.2101431037732D+00 0.2149251073635D+00 + 0.2198131963488D+00 0.2248096268222D+00 0.2299166993754D+00 0.2351367598503D+00 + 0.2404722000984D+00 0.2459254587480D+00 0.2514990219789D+00 0.2571954243047D+00 + 0.2630172493626D+00 0.2689671307106D+00 0.2750477526311D+00 0.2812618509418D+00 + 0.2876122138134D+00 0.2941016825931D+00 0.3007331526352D+00 0.3075095741362D+00 + 0.3144339529771D+00 0.3215093515700D+00 0.3287388897102D+00 0.3361257454325D+00 + 0.3436731558729D+00 0.3513844181328D+00 0.3592628901485D+00 0.3673119915621D+00 + 0.3755352045968D+00 0.3839360749336D+00 0.3925182125899D+00 0.4012852927993D+00 + 0.4102410568930D+00 0.4193893131804D+00 0.4287339378299D+00 0.4382788757486D+00 + 0.4480281414604D+00 0.4579858199819D+00 0.4681560676951D+00 0.4785431132164D+00 + 0.4891512582614D+00 0.4999848785043D+00 0.5110484244305D+00 0.5223464221834D+00 + 0.5338834744021D+00 0.5456642610510D+00 0.5576935402392D+00 0.5699761490289D+00 + 0.5825170042325D+00 0.5953211031952D+00 0.6083935245653D+00 0.6217394290472D+00 + 0.6353640601390D+00 0.6492727448516D+00 0.6634708944082D+00 0.6779640049238D+00 + 0.6927576580616D+00 0.7078575216668D+00 0.7232693503742D+00 0.7389989861895D+00 + 0.7550523590420D+00 0.7714354873073D+00 0.7881544782973D+00 0.8052155287175D+00 + 0.8226249250876D+00 0.8403890441249D+00 0.8585143530879D+00 0.8770074100784D+00 + 0.8958748642992D+00 0.9151234562658D+00 0.9347600179702D+00 0.9547914729931D+00 + 0.9752248365635D+00 0.9960672155622D+00 0.1017325808468D+01 0.1039007905241D+01 + 0.1061120887144D+01 0.1083672226499D+01 0.1106669486370D+01 0.1130120320176D+01 + 0.1154032471231D+01 0.1178413772204D+01 0.1203272144493D+01 0.1228615597523D+01 + 0.1254452227950D+01 0.1280790218774D+01 0.1307637838359D+01 0.1335003439353D+01 + 0.1362895457506D+01 0.1391322410385D+01 0.1420292895972D+01 0.1449815591159D+01 + 0.1479899250115D+01 0.1510552702537D+01 0.1541784851777D+01 0.1573604672833D+01 + 0.1606021210210D+01 0.1639043575644D+01 0.1672680945677D+01 0.1706942559091D+01 + 0.1741837714186D+01 0.1777375765901D+01 0.1813566122779D+01 0.1850418243757D+01 + 0.1887941634794D+01 0.1926145845317D+01 0.1965040464488D+01 0.2004635117287D+01 + 0.2044939460400D+01 0.2085963177919D+01 0.2127715976829D+01 0.2170207582300D+01 + 0.2213447732763D+01 0.2257446174769D+01 0.2302212657626D+01 0.2347756927812D+01 + 0.2394088723154D+01 0.2441217766767D+01 0.2489153760756D+01 0.2537906379665D+01 + 0.2587485263675D+01 0.2637900011547D+01 0.2689160173295D+01 0.2741275242598D+01 + 0.2794254648931D+01 0.2848107749430D+01 0.2902843820459D+01 0.2958472048904D+01 + 0.3015001523163D+01 0.3072441223848D+01 0.3130800014182D+01 0.3190086630094D+01 + 0.3250309670002D+01 0.3311477584285D+01 0.3373598664440D+01 0.3436681031917D+01 + 0.3500732626634D+01 0.3565761195166D+01 0.3631774278604D+01 0.3698779200090D+01 + 0.3766783052007D+01 0.3835792682854D+01 0.3905814683769D+01 0.3976855374728D+01 + 0.4048920790399D+01 0.4122016665671D+01 0.4196148420834D+01 0.4271321146438D+01 + 0.4347539587809D+01 0.4424808129241D+01 0.4503130777854D+01 0.4582511147131D+01 + 0.4662952440136D+01 0.4744457432406D+01 0.4827028454547D+01 0.4910667374509D+01 + 0.4995375579573D+01 0.5081153958042D+01 0.5168002880655D+01 0.5255922181721D+01 + 0.5344911139992D+01 0.5434968459290D+01 0.5526092248881D+01 0.5618280003639D+01 + 0.5711528583982D+01 0.5805834195616D+01 0.5901192369103D+01 0.5997597939257D+01 + 0.6095045024395D+01 0.6193527005472D+01 0.6293036505099D+01 0.6393565366487D+01 + 0.6495104632331D+01 0.6597644523660D+01 0.6701174418681D+01 0.6805682831645D+01 + 0.6911157391760D+01 0.7017584822191D+01 0.7124950919171D+01 0.7233240531258D+01 + 0.7342437538781D+01 0.7452524833500D+01 0.7563484298530D+01 0.7675296788562D+01 + 0.7787942110430D+01 0.7901399004058D+01 0.8015645123842D+01 0.8130657020509D+01 + 0.8246410123503D+01 0.8362878723950D+01 0.8480035958250D+01 0.8597853792358D+01 + 0.8716303006799D+01 0.8835353182487D+01 0.8954972687391D+01 0.9075128664130D+01 + 0.9195787018538D+01 0.9316912409273D+01 0.9438468238543D+01 0.9560416644000D+01 + 0.9682718491880D+01 0.9805333371460D+01 0.9928219590896D+01 0.1005133417453D+02 + 0.1017463286171D+02 0.1029807010722D+02 0.1042159908344D+02 0.1054517168417D+02 + 0.1066873853037D+02 0.1079224897780D+02 0.1091565112659D+02 0.1103889183301D+02 + 0.1116191672323D+02 0.1128467020944D+02 0.1140709550823D+02 0.1152913466133D+02 + 0.1165072855885D+02 0.1177181696506D+02 0.1189233854680D+02 0.1201223090454D+02 + 0.1213143060625D+02 0.1224987322407D+02 0.1236749337400D+02 0.1248422475837D+02 + 0.1260000021157D+02 0.1271475174875D+02 0.1282841061773D+02 0.1294090735413D+02 + 0.1305217183979D+02 0.1316213336451D+02 0.1327072069111D+02 0.1337786212400D+02 + 0.1348348558110D+02 0.1358751866928D+02 0.1368988876325D+02 0.1379052308804D+02 + 0.1388934880491D+02 0.1398629310084D+02 0.1408128328150D+02 0.1417424686776D+02 + 0.1426511169568D+02 0.1435380601989D+02 0.1444025862047D+02 0.1452439891313D+02 + 0.1460615706273D+02 0.1468546410000D+02 0.1476225204147D+02 0.1483645401237D+02 + 0.1490800437259D+02 0.1497683884540D+02 0.1504289464893D+02 0.1510611063019D+02 + 0.1516642740155D+02 0.1522378747941D+02 0.1527813542502D+02 0.1532941798703D+02 + 0.1537758424592D+02 0.1542258575964D+02 0.1546437671057D+02 0.1550291405346D+02 + 0.1553815766392D+02 0.1557007048740D+02 0.1559861868825D+02 0.1562377179849D+02 + 0.1564550286611D+02 0.1566378860245D+02 0.1567860952827D+02 0.1568995011828D+02 + 0.1569779894358D+02 0.1570214881171D+02 0.1570299690387D+02 0.1570034490889D+02 + 0.1569419915342D+02 0.1568457072811D+02 0.1567147560898D+02 0.1565493477391D+02 + 0.1563497431333D+02 0.1561162553504D+02 0.1558492506233D+02 0.1555491492507D+02 + 0.1552164264320D+02 0.1548516130217D+02 0.1544552961962D+02 0.1540281200312D+02 + 0.1535707859803D+02 0.1530840532536D+02 0.1525687390884D+02 0.1520257189079D+02 + 0.1514559263632D+02 0.1508603532531D+02 0.1502400493172D+02 0.1495961218971D+02 + 0.1489297354623D+02 0.1482421109950D+02 0.1475345252306D+02 0.1468083097499D+02 + 0.1460648499184D+02 0.1453055836709D+02 0.1445320001360D+02 0.1437456381003D+02 + 0.1429480843075D+02 0.1421409715909D+02 0.1413259768392D+02 0.1405048187912D+02 + 0.1396792556614D+02 0.1388510825940D+02 0.1380221289467D+02 0.1371942554036D+02 + 0.1363693509198D+02 0.1355493294972D+02 0.1347361267958D+02 0.1339316965818D+02 + 0.1331380070165D+02 0.1323570367897D+02 0.1315907711016D+02 0.1308411975004D+02 + 0.1301103015787D+02 0.1294000625373D+02 0.1287124486230D+02 0.1280494124477D+02 + 0.1274128861984D+02 0.1268047767460D+02 0.1262269606643D+02 0.1256812791682D+02 + 0.1251695329838D+02 0.1246934771604D+02 0.1242548158392D+02 0.1238551969900D+02 + 0.1234962071295D+02 0.1231793660373D+02 0.1229061214824D+02 0.1226778439767D+02 + 0.1224958215706D+02 0.1223612547078D+02 0.1222752511553D+02 0.1222388210258D+02 + 0.1222528719100D+02 0.1223182041366D+02 0.1224355061775D+02 0.1226053502171D+02 + 0.1228281879023D+02 0.1231043462935D+02 0.1234340240339D+02 0.1238172877543D+02 + 0.1242540687338D+02 0.1247441598324D+02 0.1252872127141D+02 0.1258827353770D+02 + 0.1265300900087D+02 0.1272284911822D+02 0.1279770044081D+02 0.1287745450601D+02 + 0.1296198776857D+02 0.1305116157186D+02 0.1314482216032D+02 0.1324280073454D+02 + 0.1334491354991D+02 0.1345096205988D+02 0.1356073310471D+02 0.1367399914649D+02 + 0.1379051855093D+02 0.1391003591655D+02 0.1403228245150D+02 0.1415697639825D+02 + 0.1428382350615D+02 0.1441251755180D+02 0.1454274090682D+02 0.1467416515265D+02 + 0.1480645174180D+02 0.1493925270450D+02 0.1507221140012D+02 0.1520496331175D+02 + 0.1533713688305D+02 0.1546835439544D+02 0.1559823288411D+02 0.1572638509088D+02 + 0.1585242045188D+02 0.1597594611769D+02 0.1609656800349D+02 0.1621389186673D+02 + 0.1632752440935D+02 0.1643707440175D+02 0.1654215382521D+02 0.1664237902974D+02 + 0.1673737190368D+02 0.1682676105166D+02 0.1691018297723D+02 0.1698728326633D+02 + 0.1705771776761D+02 0.1712115376582D+02 0.1717727114395D+02 0.1722576353007D+02 + 0.1726633942470D+02 0.1729872330429D+02 0.1732265669667D+02 0.1733789922408D+02 + 0.1734422960952D+02 0.1734144664198D+02 0.1732937009656D+02 0.1730784160492D+02 + 0.1727672547225D+02 0.1723590943644D+02 0.1718530536559D+02 0.1712484989008D+02 + 0.1705450496536D+02 0.1697425836203D+02 0.1688412407975D+02 0.1678414268193D+02 + 0.1667438154808D+02 0.1655493504124D+02 0.1642592458792D+02 0.1628749866833D+02 + 0.1613983271513D+02 0.1598312891883D+02 0.1581761593876D+02 0.1564354851859D+02 + 0.1546120700566D+02 0.1527089677411D+02 0.1507294755170D+02 0.1486771265109D+02 + 0.1465556810624D+02 0.1443691171558D+02 0.1421216199343D+02 0.1398175703206D+02 + 0.1374615327696D+02 0.1350582421831D+02 0.1326125900230D+02 0.1301296096613D+02 + 0.1276144610103D+02 0.1250724144826D+02 0.1225088343315D+02 0.1199291614280D+02 + 0.1173388955369D+02 0.1147435771520D+02 0.1121487689618D+02 0.1095600370143D+02 + 0.1069829316549D+02 0.1044229683153D+02 0.1018856082317D+02 0.9937623917321D+01 + 0.9690015626445D+01 0.9446254298643D+01 0.9206845244038D+01 0.8972278896087D+01 + 0.8743029016360D+01 0.8519550951297D+01 0.8302279949355D+01 0.8091629546790D+01 + 0.7887990030116D+01 0.7691726983014D+01 0.7503179925129D+01 0.7322661049902D+01 + 0.7150454068046D+01 0.6986813162918D+01 0.6831962063451D+01 0.6686093239819D+01 + 0.6549367226364D+01 0.6421912075717D+01 0.6303822947394D+01 0.6195161833447D+01 + 0.6095957423078D+01 0.6006205107394D+01 0.5925867124779D+01 0.5854872846611D+01 + 0.5793119202371D+01 0.5740471242429D+01 0.5696762836121D+01 0.5661797502031D+01 + 0.5635349366701D+01 0.5617164247353D+01 0.5606960853570D+01 0.5604432102259D+01 + 0.5609246539649D+01 0.5621049863505D+01 0.5639466538232D+01 0.5664101495024D+01 + 0.5694541908766D+01 0.5730359042993D+01 0.5771110153784D+01 0.5816340443192D+01 + 0.5865585052475D+01 0.5918371085180D+01 0.5974219649957D+01 0.6032647912832D+01 + 0.6093171148637D+01 0.6155304781260D+01 0.6218566402475D+01 0.6282477759234D+01 + 0.6346566699475D+01 0.6410369066815D+01 0.6473430534781D+01 0.6535308371644D+01 + 0.6595573127395D+01 0.6653810234872D+01 0.6709621517670D+01 0.6762626598041D+01 + 0.6812464198680D+01 0.6858793332986D+01 0.6901294379138D+01 0.6939670034070D+01 + 0.6973646144233D+01 0.7002972410830D+01 0.7027422967990D+01 0.7046796833200D+01 + 0.7060918230061D+01 0.7069636784259D+01 0.7072827594374D+01 0.7070391179926D+01 + 0.7062253309715D+01 0.7048364714231D+01 0.7028700686483D+01 0.7003260576238D+01 + 0.6972067183121D+01 0.6935166054562D+01 0.6892624694966D+01 0.6844531692843D+01 + 0.6790995772965D+01 0.6732144780827D+01 0.6668124606899D+01 0.6599098058289D+01 + 0.6525243685473D+01 0.6446754571799D+01 0.6363837093418D+01 0.6276709657188D+01 + 0.6185601423998D+01 0.6090751024726D+01 0.5992405275866D+01 0.5890817901556D+01 + 0.5786248268476D+01 0.5678960139726D+01 0.5569220453475D+01 0.5457298131760D+01 + 0.5343462924443D+01 0.5227984292928D+01 0.5111130337809D+01 0.4993166774192D+01 + 0.4874355958030D+01 0.4754955966341D+01 0.4635219733799D+01 0.4515394247714D+01 + 0.4395719803061D+01 0.4276429318764D+01 0.4157747716089D+01 0.4039891359594D+01 + 0.3923067560758D+01 0.3807474144035D+01 0.3693299074769D+01 0.3580720148118D+01 + 0.3469904737816D+01 0.3361009603367D+01 0.3254180754011D+01 0.3149553367571D+01 + 0.3047251762116D+01 0.2947389418162D+01 0.2850069049006D+01 0.2755382716614D+01 + 0.2663411990420D+01 0.2574228146230D+01 0.2487892402405D+01 0.2404456190400D+01 + 0.2323961456713D+01 0.2246440993268D+01 0.2171918793250D+01 0.2100410429420D+01 + 0.2031923451965D+01 0.1966457802972D+01 0.1904006244666D+01 0.1844554798640D+01 + 0.1788083193345D+01 0.1734565317240D+01 0.1683969675070D+01 0.1636259844862D+01 + 0.1591394933364D+01 0.1549330027746D+01 0.1510016641546D+01 0.1473403152964D+01 + 0.1439435233770D+01 0.1408056267219D+01 0.1379207753531D+01 0.1352829701650D+01 + 0.1328861006133D+01 0.1307239808175D+01 0.1287903839946D+01 0.1270790751526D+01 + 0.1255838419882D+01 0.1242985239474D+01 0.1232170394175D+01 0.1223334110328D+01 + 0.1216417890857D+01 0.1211364730456D+01 0.1208119311934D+01 0.1206628183910D+01 + 0.1206839920052D+01 0.1208705260142D+01 0.1212177233248D+01 0.1217211263310D+01 + 0.1223765257423D+01 0.1231799677111D+01 0.1241277592815D+01 0.1252164721788D+01 + 0.1264429449524D+01 0.1278042834732D+01 0.1292978597814D+01 0.1309213092627D+01 + 0.1326725261233D+01 0.1345496571135D+01 0.1365510934358D+01 0.1386754607532D+01 + 0.1409215426363D+01 0.1433003097507D+01 0.1458223277591D+01 0.1484860699421D+01 + 0.1512902583279D+01 0.1542338542721D+01 0.1573160498496D+01 0.1605362600812D+01 + 0.1638941160170D+01 0.1673894586973D+01 0.1710223340083D+01 0.1747929884514D+01 + 7 1012 + 1 0 -1 -511.89150 + 2 0 -1 -58.80097 + 2 1 1 -50.61290 + 2 1 -2 -49.69692 + 3 0 -1 -5.52718 + 3 1 1 -3.14309 + 3 1 -2 -3.03034 + 0.2123373461549D-04 0.2173914995400D-04 0.2225659296114D-04 0.2278634977738D-04 + 0.2332871334728D-04 0.2388398358121D-04 0.2445246752083D-04 0.2503447950857D-04 + 0.2563034136106D-04 0.2624038254674D-04 0.2686494036763D-04 0.2750436014548D-04 + 0.2815899541226D-04 0.2882920810522D-04 0.2951536876657D-04 0.3021785674791D-04 + 0.3093706041946D-04 0.3167337738432D-04 0.3242721469777D-04 0.3319898909177D-04 + 0.3398912720483D-04 0.3479806581728D-04 0.3562625209215D-04 0.3647414382175D-04 + 0.3734220968012D-04 0.3823092948144D-04 0.3914079444457D-04 0.4007230746391D-04 + 0.4102598338660D-04 0.4200234929636D-04 0.4300194480406D-04 0.4402532234512D-04 + 0.4507304748402D-04 0.4614569922601D-04 0.4724387033618D-04 0.4836816766617D-04 + 0.4951921248852D-04 0.5069764083903D-04 0.5190410386721D-04 0.5313926819498D-04 + 0.5440381628400D-04 0.5569844681152D-04 0.5702387505533D-04 0.5838083328767D-04 + 0.5977007117859D-04 0.6119235620880D-04 0.6264847409228D-04 0.6413922920902D-04 + 0.6566544504782D-04 0.6722796465978D-04 0.6882765112238D-04 0.7046538801462D-04 + 0.7214207990339D-04 0.7385865284136D-04 0.7561605487667D-04 0.7741525657465D-04 + 0.7925725155197D-04 0.8114305702331D-04 0.8307371436110D-04 0.8505028966841D-04 + 0.8707387436545D-04 0.8914558578994D-04 0.9126656781168D-04 0.9343799146165D-04 + 0.9566105557602D-04 0.9793698745538D-04 0.1002670435396D-03 0.1026525100984D-03 + 0.1050947039390D-03 0.1075949731294D-03 0.1101546977394D-03 0.1127752905997D-03 + 0.1154581980775D-03 0.1182049008719D-03 0.1210169148270D-03 0.1238957917652D-03 + 0.1268431203390D-03 0.1298605269045D-03 0.1329496764137D-03 0.1361122733297D-03 + 0.1393500625619D-03 0.1426648304247D-03 0.1460584056178D-03 0.1495326602303D-03 + 0.1530895107681D-03 0.1567309192056D-03 0.1604588940629D-03 0.1642754915072D-03 + 0.1681828164816D-03 0.1721830238593D-03 0.1762783196258D-03 0.1804709620887D-03 + 0.1847632631165D-03 0.1891575894056D-03 0.1936563637785D-03 0.1982620665115D-03 + 0.2029772366947D-03 0.2078044736231D-03 0.2127464382210D-03 0.2178058545005D-03 + 0.2229855110531D-03 0.2282882625778D-03 0.2337170314442D-03 0.2392748092933D-03 + 0.2449646586752D-03 0.2507897147258D-03 0.2567531868833D-03 0.2628583606444D-03 + 0.2691085993625D-03 0.2755073460880D-03 0.2820581254518D-03 0.2887645455935D-03 + 0.2956303001344D-03 0.3026591701977D-03 0.3098550264756D-03 0.3172218313454D-03 + 0.3247636410353D-03 0.3324846078408D-03 0.3403889823939D-03 0.3484811159850D-03 + 0.3567654629401D-03 0.3652465830528D-03 0.3739291440747D-03 0.3828179242637D-03 + 0.3919178149916D-03 0.4012338234146D-03 0.4107710752045D-03 0.4205348173457D-03 + 0.4305304209971D-03 0.4407633844209D-03 0.4512393359813D-03 0.4619640372121D-03 + 0.4729433859575D-03 0.4841834195856D-03 0.4956903182785D-03 0.5074704083979D-03 + 0.5195301659314D-03 0.5318762200182D-03 0.5445153565579D-03 0.5574545219044D-03 + 0.5707008266453D-03 0.5842615494708D-03 0.5981441411326D-03 0.6123562284955D-03 + 0.6269056186847D-03 0.6418003033287D-03 0.6570484629028D-03 0.6726584711734D-03 + 0.6886388997468D-03 0.7049985227240D-03 0.7217463214642D-03 0.7388914894603D-03 + 0.7564434373277D-03 0.7744117979097D-03 0.7928064315026D-03 0.8116374312024D-03 + 0.8309151283763D-03 0.8506500982622D-03 0.8708531656989D-03 0.8915354109894D-03 + 0.9127081759015D-03 0.9343830698083D-03 0.9565719759715D-03 0.9792870579714D-03 + 0.1002540766287D-02 0.1026345845027D-02 0.1050715338824D-02 0.1075662599879D-02 + 0.1101201295181D-02 0.1127345413883D-02 0.1154109274864D-02 0.1181507534450D-02 + 0.1209555194328D-02 0.1238267609637D-02 0.1267660497252D-02 0.1297749944251D-02 + 0.1328552416593D-02 0.1360084767981D-02 0.1392364248945D-02 0.1425408516127D-02 + 0.1459235641785D-02 0.1493864123514D-02 0.1529312894196D-02 0.1565601332181D-02 + 0.1602749271697D-02 0.1640777013510D-02 0.1679705335822D-02 0.1719555505429D-02 + 0.1760349289133D-02 0.1802108965417D-02 0.1844857336390D-02 0.1888617740010D-02 + 0.1933414062589D-02 0.1979270751585D-02 0.2026212828687D-02 0.2074265903209D-02 + 0.2123456185786D-02 0.2173810502385D-02 0.2225356308647D-02 0.2278121704551D-02 + 0.2332135449417D-02 0.2387426977257D-02 0.2444026412476D-02 0.2501964585936D-02 + 0.2561273051389D-02 0.2621984102285D-02 0.2684130788965D-02 0.2747746936258D-02 + 0.2812867161465D-02 0.2879526892772D-02 0.2947762388071D-02 0.3017610754222D-02 + 0.3089109966753D-02 0.3162298890003D-02 0.3237217297741D-02 0.3313905894238D-02 + 0.3392406335837D-02 0.3472761253004D-02 0.3555014272883D-02 0.3639210042377D-02 + 0.3725394251736D-02 0.3813613658698D-02 0.3903916113173D-02 0.3996350582488D-02 + 0.4090967177209D-02 0.4187817177547D-02 0.4286953060364D-02 0.4388428526794D-02 + 0.4492298530489D-02 0.4598619306504D-02 0.4707448400838D-02 0.4818844700646D-02 + 0.4932868465127D-02 0.5049581357120D-02 0.5169046475404D-02 0.5291328387739D-02 + 0.5416493164639D-02 0.5544608413917D-02 0.5675743316002D-02 0.5809968660057D-02 + 0.5947356880904D-02 0.6087982096781D-02 0.6231920147946D-02 0.6379248636155D-02 + 0.6530046965011D-02 0.6684396381234D-02 0.6842380016839D-02 0.7004082932273D-02 + 0.7169592160503D-02 0.7338996752102D-02 0.7512387821327D-02 0.7689858593235D-02 + 0.7871504451850D-02 0.8057422989391D-02 0.8247714056607D-02 0.8442479814225D-02 + 0.8641824785540D-02 0.8845855910175D-02 0.9054682599025D-02 0.9268416790430D-02 + 0.9487173007575D-02 0.9711068417172D-02 0.9940222889430D-02 0.1017475905935D-01 + 0.1041480238936D-01 0.1066048123337D-01 0.1091192690214D-01 0.1116927373022D-01 + 0.1143265914425D-01 0.1170222373276D-01 0.1197811131760D-01 0.1226046902681D-01 + 0.1254944736912D-01 0.1284520031015D-01 0.1314788535014D-01 0.1345766360348D-01 + 0.1377469987990D-01 0.1409916276750D-01 0.1443122471744D-01 0.1477106213063D-01 + 0.1511885544620D-01 0.1547478923187D-01 0.1583905227632D-01 0.1621183768351D-01 + 0.1659334296907D-01 0.1698377015868D-01 0.1738332588869D-01 0.1779222150874D-01 + 0.1821067318670D-01 0.1863890201578D-01 0.1907713412394D-01 0.1952560078568D-01 + 0.1998453853608D-01 0.2045418928739D-01 0.2093480044805D-01 0.2142662504416D-01 + 0.2192992184360D-01 0.2244495548276D-01 0.2297199659585D-01 0.2351132194704D-01 + 0.2406321456527D-01 0.2462796388197D-01 0.2520586587156D-01 0.2579722319499D-01 + 0.2640234534617D-01 0.2702154880148D-01 0.2765515717239D-01 0.2830350136121D-01 + 0.2896691972007D-01 0.2964575821319D-01 0.3034037058244D-01 0.3105111851634D-01 + 0.3177837182251D-01 0.3252250860359D-01 0.3328391543683D-01 0.3406298755727D-01 + 0.3486012904465D-01 0.3567575301409D-01 0.3651028181063D-01 0.3736414720771D-01 + 0.3823779060956D-01 0.3913166325773D-01 0.4004622644169D-01 0.4098195171364D-01 + 0.4193932110758D-01 0.4291882736274D-01 0.4392097415138D-01 0.4494627631115D-01 + 0.4599526008193D-01 0.4706846334735D-01 0.4816643588104D-01 0.4928973959763D-01 + 0.5043894880863D-01 0.5161465048329D-01 0.5281744451445D-01 0.5404794398948D-01 + 0.5530677546647D-01 0.5659457925562D-01 0.5791200970601D-01 0.5925973549779D-01 + 0.6063843993988D-01 0.6204882127328D-01 0.6349159298001D-01 0.6496748409788D-01 + 0.6647723954103D-01 0.6802162042643D-01 0.6960140440641D-01 0.7121738600725D-01 + 0.7287037697395D-01 0.7456120662128D-01 0.7629072219118D-01 0.7805978921657D-01 + 0.7986929189166D-01 0.8172013344892D-01 0.8361323654265D-01 0.8554954363940D-01 + 0.8753001741513D-01 0.8955564115940D-01 0.9162741918654D-01 0.9374637725383D-01 + 0.9591356298698D-01 0.9813004631275D-01 0.1003969198990D+00 0.1027152996019D+00 + 0.1050863249211D+00 0.1075111594618D+00 0.1099909914051D+00 0.1125270339855D+00 + 0.1151205259766D+00 0.1177727321842D+00 0.1204849439476D+00 0.1232584796489D+00 + 0.1260946852301D+00 0.1289949347182D+00 0.1319606307590D+00 0.1349932051583D+00 + 0.1380941194317D+00 0.1412648653632D+00 0.1445069655708D+00 0.1478219740820D+00 + 0.1512114769165D+00 0.1546770926778D+00 0.1582204731535D+00 0.1618433039236D+00 + 0.1655473049771D+00 0.1693342313383D+00 0.1732058737000D+00 0.1771640590662D+00 + 0.1812106514032D+00 0.1853475522988D+00 0.1895767016304D+00 0.1939000782413D+00 + 0.1983197006251D+00 0.2028376276193D+00 0.2074559591063D+00 0.2121768367234D+00 + 0.2170024445803D+00 0.2219350099852D+00 0.2269768041788D+00 0.2321301430764D+00 + 0.2373973880172D+00 0.2427809465221D+00 0.2482832730585D+00 0.2539068698131D+00 + 0.2596542874715D+00 0.2655281260047D+00 0.2715310354636D+00 0.2776657167793D+00 + 0.2839349225700D+00 0.2903414579550D+00 0.2968881813739D+00 0.3035780054119D+00 + 0.3104138976312D+00 0.3173988814070D+00 0.3245360367687D+00 0.3318285012460D+00 + 0.3392794707188D+00 0.3468922002717D+00 0.3546700050516D+00 0.3626162611285D+00 + 0.3707344063591D+00 0.3790279412529D+00 0.3875004298396D+00 0.3961555005386D+00 + 0.4049968470283D+00 0.4140282291162D+00 0.4232534736091D+00 0.4326764751811D+00 + 0.4423011972414D+00 0.4521316727988D+00 0.4621720053237D+00 0.4724263696067D+00 + 0.4828990126121D+00 0.4935942543268D+00 0.5045164886027D+00 0.5156701839924D+00 + 0.5270598845772D+00 0.5386902107861D+00 0.5505658602051D+00 0.5626916083760D+00 + 0.5750723095830D+00 0.5877128976270D+00 0.6006183865849D+00 0.6137938715547D+00 + 0.6272445293836D+00 0.6409756193782D+00 0.6549924839961D+00 0.6693005495166D+00 + 0.6839053266899D+00 0.6988124113627D+00 0.7140274850788D+00 0.7295563156538D+00 + 0.7454047577210D+00 0.7615787532478D+00 0.7780843320207D+00 0.7949276120969D+00 + 0.8121148002200D+00 0.8296521921997D+00 0.8475461732513D+00 0.8658032182945D+00 + 0.8844298922086D+00 0.9034328500427D+00 0.9228188371772D+00 0.9425946894360D+00 + 0.9627673331456D+00 0.9833437851400D+00 0.1004331152707D+01 0.1025736633476D+01 + 0.1047567515241D+01 0.1069831175720D+01 0.1092535082243D+01 0.1115686791375D+01 + 0.1139293948457D+01 0.1163364287075D+01 0.1187905628445D+01 0.1212925880722D+01 + 0.1238433038208D+01 0.1264435180485D+01 0.1290940471443D+01 0.1317957158220D+01 + 0.1345493570030D+01 0.1373558116898D+01 0.1402159288280D+01 0.1431305651569D+01 + 0.1461005850494D+01 0.1491268603389D+01 0.1522102701342D+01 0.1553517006218D+01 + 0.1585520448546D+01 0.1618122025271D+01 0.1651330797361D+01 0.1685155887276D+01 + 0.1719606476280D+01 0.1754691801602D+01 0.1790421153434D+01 0.1826803871767D+01 + 0.1863849343063D+01 0.1901566996742D+01 0.1939966301501D+01 0.1979056761446D+01 + 0.2018847912032D+01 0.2059349315815D+01 0.2100570557999D+01 0.2142521241790D+01 + 0.2185210983528D+01 0.2228649407614D+01 0.2272846141215D+01 0.2317810808747D+01 + 0.2363553026124D+01 0.2410082394775D+01 0.2457408495423D+01 0.2505540881617D+01 + 0.2554489073015D+01 0.2604262548407D+01 0.2654870738488D+01 0.2706323018355D+01 + 0.2758628699743D+01 0.2811797022979D+01 0.2865837148659D+01 0.2920758149043D+01 + 0.2976568999160D+01 0.3033278567615D+01 0.3090895607108D+01 0.3149428744640D+01 + 0.3208886471423D+01 0.3269277132479D+01 0.3330608915918D+01 0.3392889841912D+01 + 0.3456127751341D+01 0.3520330294118D+01 0.3585504917195D+01 0.3651658852234D+01 + 0.3718799102956D+01 0.3786932432154D+01 0.3856065348377D+01 0.3926204092282D+01 + 0.3997354622651D+01 0.4069522602076D+01 0.4142713382310D+01 0.4216931989288D+01 + 0.4292183107814D+01 0.4368471065927D+01 0.4445799818928D+01 0.4524172933100D+01 + 0.4603593569097D+01 0.4684064465021D+01 0.4765587919192D+01 0.4848165772611D+01 + 0.4931799391130D+01 0.5016489647323D+01 0.5102236902085D+01 0.5189040985952D+01 + 0.5276901180158D+01 0.5365816197444D+01 0.5455784162617D+01 0.5546802592894D+01 + 0.5638868378017D+01 0.5731977760181D+01 0.5826126313769D+01 0.5921308924927D+01 + 0.6017519770983D+01 0.6114752299744D+01 0.6212999208681D+01 0.6312252424025D+01 + 0.6412503079799D+01 0.6513741496818D+01 0.6615957161666D+01 0.6719138705689D+01 + 0.6823273884037D+01 0.6928349554769D+01 0.7034351658067D+01 0.7141265195588D+01 + 0.7249074209985D+01 0.7357761764637D+01 0.7467309923627D+01 0.7577699732003D+01 + 0.7688911196366D+01 0.7800923265826D+01 0.7913713813378D+01 0.8027259617727D+01 + 0.8141536345630D+01 0.8256518534789D+01 0.8372179577355D+01 0.8488491704090D+01 + 0.8605425969248D+01 0.8722952236222D+01 0.8841039164025D+01 0.8959654194655D+01 + 0.9078763541413D+01 0.9198332178230D+01 0.9318323830066D+01 0.9438700964464D+01 + 0.9559424784293D+01 0.9680455221780D+01 0.9801750933887D+01 0.9923269299099D+01 + 0.1004496641570D+02 0.1016679710163D+02 0.1028871489593D+02 0.1041067206198D+02 + 0.1053261959239D+02 0.1065450721594D+02 0.1077628340626D+02 0.1089789539267D+02 + 0.1101928917306D+02 0.1114040952889D+02 0.1126120004259D+02 0.1138160311709D+02 + 0.1150155999788D+02 0.1162101079752D+02 0.1173989452270D+02 0.1185814910389D+02 + 0.1197571142774D+02 0.1209251737221D+02 0.1220850184455D+02 0.1232359882222D+02 + 0.1243774139668D+02 0.1255086182033D+02 0.1266289155645D+02 0.1277376133233D+02 + 0.1288340119558D+02 0.1299174057364D+02 0.1309870833671D+02 0.1320423286383D+02 + 0.1330824211245D+02 0.1341066369131D+02 0.1351142493681D+02 0.1361045299271D+02 + 0.1370767489335D+02 0.1380301765027D+02 0.1389640834224D+02 0.1398777420882D+02 + 0.1407704274716D+02 0.1416414181234D+02 0.1424899972093D+02 0.1433154535791D+02 + 0.1441170828680D+02 0.1448941886294D+02 0.1456460834990D+02 0.1463720903887D+02 + 0.1470715437095D+02 0.1477437906225D+02 0.1483881923166D+02 0.1490041253114D+02 + 0.1495909827839D+02 0.1501481759178D+02 0.1506751352732D+02 0.1511713121747D+02 + 0.1516361801165D+02 0.1520692361818D+02 0.1524700024742D+02 0.1528380275595D+02 + 0.1531728879140D+02 0.1534741893776D+02 0.1537415686084D+02 0.1539746945363D+02 + 0.1541732698111D+02 0.1543370322439D+02 0.1544657562364D+02 0.1545592541956D+02 + 0.1546173779302D+02 0.1546400200242D+02 0.1546271151843D+02 0.1545786415570D+02 + 0.1544946220111D+02 0.1543751253809D+02 0.1542202676661D+02 0.1540302131844D+02 + 0.1538051756708D+02 0.1535454193202D+02 0.1532512597682D+02 0.1529230650045D+02 + 0.1525612562157D+02 0.1521663085508D+02 0.1517387518057D+02 0.1512791710213D+02 + 0.1507882069905D+02 0.1502665566690D+02 0.1497149734847D+02 0.1491342675424D+02 + 0.1485253057170D+02 0.1478890116319D+02 0.1472263655178D+02 0.1465384039476D+02 + 0.1458262194423D+02 0.1450909599456D+02 0.1443338281613D+02 0.1435560807511D+02 + 0.1427590273888D+02 0.1419440296685D+02 0.1411124998625D+02 0.1402658995277D+02 + 0.1394057379573D+02 0.1385335704764D+02 0.1376509965795D+02 0.1367596579089D+02 + 0.1358612360737D+02 0.1349574503081D+02 0.1340500549696D+02 0.1331408368786D+02 + 0.1322316124986D+02 0.1313242249599D+02 0.1304205409292D+02 0.1295224473262D+02 + 0.1286318478926D+02 0.1277506596148D+02 0.1268808090072D+02 0.1260242282594D+02 + 0.1251828512526D+02 0.1243586094535D+02 0.1235534276899D+02 0.1227692198172D+02 + 0.1220078842830D+02 0.1212712995982D+02 0.1205613197253D+02 0.1198797693913D+02 + 0.1192284393379D+02 0.1186090815186D+02 0.1180234042546D+02 0.1174730673615D+02 + 0.1169596772603D+02 0.1164847820834D+02 0.1160498667924D+02 0.1156563483188D+02 + 0.1153055707436D+02 0.1149988005301D+02 0.1147372218250D+02 0.1145219318434D+02 + 0.1143539363525D+02 0.1142341452711D+02 0.1141633683999D+02 0.1141423112993D+02 + 0.1141715713298D+02 0.1142516338731D+02 0.1143828687474D+02 0.1145655268355D+02 + 0.1147997369390D+02 0.1150855028761D+02 0.1154227008374D+02 0.1158110770138D+02 + 0.1162502455129D+02 0.1167396865756D+02 0.1172787451079D+02 0.1178666295396D+02 + 0.1185024110228D+02 0.1191850229803D+02 0.1199132610159D+02 0.1206857831946D+02 + 0.1215011107019D+02 0.1223576288907D+02 0.1232535887199D+02 0.1241871085933D+02 + 0.1251561765997D+02 0.1261586531600D+02 0.1271922740805D+02 0.1282546540151D+02 + 0.1293432903330D+02 0.1304555673916D+02 0.1315887612096D+02 0.1327400445348D+02 + 0.1339064923005D+02 0.1350850874625D+02 0.1362727272054D+02 0.1374662295087D+02 + 0.1386623400591D+02 0.1398577394943D+02 0.1410490509638D+02 0.1422328479880D+02 + 0.1434056625987D+02 0.1445639937388D+02 0.1457043159027D+02 0.1468230879914D+02 + 0.1479167623614D+02 0.1489817940404D+02 0.1500146500841D+02 0.1510118190471D+02 + 0.1519698205391D+02 0.1528852148379D+02 0.1537546125281D+02 0.1545746841364D+02 + 0.1553421697307D+02 0.1560538884523D+02 0.1567067479483D+02 0.1572977536717D+02 + 0.1578240180176D+02 0.1582827692612D+02 0.1586713602663D+02 0.1589872769311D+02 + 0.1592281463392D+02 0.1593917445849D+02 0.1594760042409D+02 0.1594790214378D+02 + 0.1593990625272D+02 0.1592345702984D+02 0.1589841697221D+02 0.1586466731948D+02 + 0.1582210852585D+02 0.1577066067732D+02 0.1571026385193D+02 0.1564087842120D+02 + 0.1556248529064D+02 0.1547508607802D+02 0.1537870322780D+02 0.1527338006062D+02 + 0.1515918075676D+02 0.1503619027308D+02 0.1490451419267D+02 0.1476427850715D+02 + 0.1461562933169D+02 0.1445873255288D+02 0.1429377341010D+02 0.1412095601137D+02 + 0.1394050278444D+02 0.1375265386499D+02 0.1355766642312D+02 0.1335581393054D+02 + 0.1314738537038D+02 0.1293268439219D+02 0.1271202841511D+02 0.1248574768189D+02 + 0.1225418426740D+02 0.1201769104500D+02 0.1177663061449D+02 0.1153137419578D+02 + 0.1128230049248D+02 0.1102979452961D+02 0.1077424647032D+02 0.1051605041603D+02 + 0.1025560319513D+02 0.9993303145083D+01 0.9729548892983D+01 0.9464738139829D+01 + 0.9199266453606D+01 0.8933526076402D+01 0.8667904750745D+01 0.8402784570301D+01 + 0.8138540859996D+01 0.7875541090527D+01 0.7614143832090D+01 0.7354697751983D+01 + 0.7097540660550D+01 0.6842998609696D+01 0.6591385047920D+01 0.6343000035605D+01 + 0.6098129523858D+01 0.5857044699944D+01 0.5620001401934D+01 0.5387239604814D+01 + 0.5158982979846D+01 0.4935438528573D+01 0.4716796292366D+01 0.4503229137976D+01 + 0.4294892619056D+01 0.4091924913152D+01 0.3894446833193D+01 0.3702561912045D+01 + 0.3516356558237D+01 0.3335900280537D+01 0.3161245978670D+01 0.2992430297065D+01 + 0.2829474038194D+01 0.2672382631762D+01 0.2521146655720D+01 0.2375742404881D+01 + 0.2236132502695D+01 0.2102266551639D+01 0.1974081817541D+01 0.1851503943111D+01 + 0.1734447685940D+01 0.1622817676200D+01 0.1516509189368D+01 0.1415408929331D+01 + 0.1319395817360D+01 0.1228341782531D+01 0.1142112549373D+01 0.1060568418635D+01 + 0.9835650373019D+00 0.9109541541726D+00 0.8425843575459D+00 0.7783017917968D+00 + 0.7179508498817D+00 0.6613748390683D+00 0.6084166174653D+00 0.5589191992012D+00 + 0.5127263263911D+00 0.4696830063190D+00 0.4296360125529D+00 0.3924343490009D+00 + 0.3579296762027D+00 0.3259766994340D+00 0.2964335184742D+00 0.2691619391536D+00 + 0.2440277470488D+00 0.2209009439361D+00 0.1996559478365D+00 0.1801717576938D+00 + 0.1623320839184D+00 0.1460254461990D+00 0.1311452401368D+00 0.1175897743854D+00 + 0.1052622800912D+00 0.9407089451527D-01 0.8392862078550D-01 0.7475326577690D-01 + 0.6646735814128D-01 0.5899804851766D-01 0.5227699394346D-01 0.4624022845899D-01 + 0.4082802185442D-01 0.3598472845105D-01 0.3165862773800D-01 0.2780175860384D-01 + 0.2436974881146D-01 0.2132164126495D-01 0.1861971851162D-01 0.1622932681167D-01 + 0.1411870099424D-01 0.1225879120292D-01 0.1062309251766D-01 0.9187478324824D-02 + 0.7930038194170D-02 0.6830920911119D-02 0.5872183206948D-02 0.5037644628161D-02 + 0.4312748890659D-02 0.3684431974697D-02 0.3140997133459D-02 0.2671996911721D-02 + 0.2268122201696D-02 0.1921098300832D-02 0.1623587881022D-02 0.1369100730387D-02 + 0.1151910087150D-02 0.9669753500508D-03 0.8098709208516D-03 0.6767209113939D-03 + 0.5641394300578D-03 0.4691761498429D-03 0.3892668522563D-03 0.3221886372696D-03 + 0.2660194893607D-03 0.2191018926233D-03 0.1800101936858D-03 0.1475214192933D-03 + 0.1205892654847D-03 0.9832098695562D-04 0.7995692809159D-04 0.6485245095860D-04 + 0.5246202996510D-04 0.4232529769133D-04 0.3405484129524D-04 0.2732556374477D-04 + 0.2186543872353D-04 0.1744750226736D-04 0.1388293789508D-04 0.1101512510421D-04 + 0.8714533541124D-05 0.6874356872787D-05 0.5406791351919D-05 0.4239874261002D-05 + 0.3314806839624D-05 0.2583694952262D-05 0.2007648657315D-05 0.1555189018603D-05 + 0.1200916989437D-05 0.9244050332163D-06 0.7092773630705D-06 0.5424493283134D-06 + 0.4135005904089D-06 0.3141603589352D-06 0.2378861413798D-06 0.1795202409555D-06 + 0.1350106538765D-06 0.1011851095086D-06 0.7556879909866D-07 0.5623788451178D-07 + 0.4170219815814D-07 0.3081166707088D-07 0.2268194336078D-07 0.1663552297805D-07 + 0.1215530542863D-07 0.8848107127806D-08 0.6416106613217D-08 0.4634585104140D-08 + 0.3334643304910D-08 0.2389835688104D-08 0.1705876062949D-08 0.1212741020005D-08 + 0.8586376559590D-09 0.6054146003728D-09 0.4250856698627D-09 0.2972075512731D-09 + 0.2069101606973D-09 0.1434236365115D-09 0.9898160505409D-10 0.6800804519963D-10 + 0.4651712787494D-10 0.3167310042586D-10 0.2146695649341D-10 0.1448079937139D-10 + 0.9722622861678D-11 0.6496070631129D-11 0.4319651023999D-11 0.2858591661735D-11 + 0.1882503214946D-11 0.1233598363270D-11 0.8043412065319D-12 0.5218060130221D-12 + 0.3367856512696D-12 0.2162455335843D-12 0.1381220475631D-12 0.8775552000331D-13 diff --git a/Test/Fe16_non_collinear/v_fe16.10 b/Test/Fe16_non_collinear/v_fe16.10 new file mode 100755 index 000000000..f3c4e967f --- /dev/null +++ b/Test/Fe16_non_collinear/v_fe16.10 @@ -0,0 +1,1542 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Fe. + 2 0.0000000000000D+00 + LSMS: xx z= 26. xvalws= 5.22926 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728400909D+02-0.5199725115555D+02-0.5199721790459D+02-0.5199718425142D+02 +-0.5199715019116D+02-0.5199711571889D+02-0.5199708082964D+02-0.5199704551834D+02 +-0.5199700977990D+02-0.5199697360915D+02-0.5199693700086D+02-0.5199689994973D+02 +-0.5199686245042D+02-0.5199682449748D+02-0.5199678608545D+02-0.5199674720876D+02 +-0.5199670786180D+02-0.5199666803887D+02-0.5199662773421D+02-0.5199658694201D+02 +-0.5199654565635D+02-0.5199650387127D+02-0.5199646158073D+02-0.5199641877860D+02 +-0.5199637545872D+02-0.5199633161480D+02-0.5199628724051D+02-0.5199624232942D+02 +-0.5199619687506D+02-0.5199615087084D+02-0.5199610431012D+02-0.5199605718616D+02 +-0.5199600949214D+02-0.5199596122116D+02-0.5199591236626D+02-0.5199586292036D+02 +-0.5199581287632D+02-0.5199576222688D+02-0.5199571096474D+02-0.5199565908248D+02 +-0.5199560657259D+02-0.5199555342748D+02-0.5199549963947D+02-0.5199544520078D+02 +-0.5199539010352D+02-0.5199533433975D+02-0.5199527790139D+02-0.5199522078028D+02 +-0.5199516296816D+02-0.5199510445666D+02-0.5199504523733D+02-0.5199498530160D+02 +-0.5199492464081D+02-0.5199486324617D+02-0.5199480110883D+02-0.5199473821977D+02 +-0.5199467456990D+02-0.5199461015004D+02-0.5199454495085D+02-0.5199447896290D+02 +-0.5199441217666D+02-0.5199434458246D+02-0.5199427617052D+02-0.5199420693096D+02 +-0.5199413685375D+02-0.5199406592876D+02-0.5199399414573D+02-0.5199392149428D+02 +-0.5199384796390D+02-0.5199377354396D+02-0.5199369822368D+02-0.5199362199218D+02 +-0.5199354483843D+02-0.5199346675127D+02-0.5199338771940D+02-0.5199330773139D+02 +-0.5199322677567D+02-0.5199314484053D+02-0.5199306191412D+02-0.5199297798443D+02 +-0.5199289303934D+02-0.5199280706654D+02-0.5199272005361D+02-0.5199263198797D+02 +-0.5199254285685D+02-0.5199245264737D+02-0.5199236134649D+02-0.5199226894099D+02 +-0.5199217541751D+02-0.5199208076251D+02-0.5199198496230D+02-0.5199188800302D+02 +-0.5199178987064D+02-0.5199169055096D+02-0.5199159002963D+02-0.5199148829207D+02 +-0.5199138532359D+02-0.5199128110928D+02-0.5199117563407D+02-0.5199106888269D+02 +-0.5199096083969D+02-0.5199085148944D+02-0.5199074081613D+02-0.5199062880373D+02 +-0.5199051543604D+02-0.5199040069664D+02-0.5199028456895D+02-0.5199016703615D+02 +-0.5199004808124D+02-0.5198992768700D+02-0.5198980583600D+02-0.5198968251063D+02 +-0.5198955769302D+02-0.5198943136512D+02-0.5198930350863D+02-0.5198917410506D+02 +-0.5198904313569D+02-0.5198891058155D+02-0.5198877642345D+02-0.5198864064200D+02 +-0.5198850321751D+02-0.5198836413012D+02-0.5198822335968D+02-0.5198808088582D+02 +-0.5198793668793D+02-0.5198779074512D+02-0.5198764303627D+02-0.5198749354000D+02 +-0.5198734223467D+02-0.5198718909837D+02-0.5198703410894D+02-0.5198687724393D+02 +-0.5198671848065D+02-0.5198655779610D+02-0.5198639516703D+02-0.5198623056988D+02 +-0.5198606398084D+02-0.5198589537577D+02-0.5198572473026D+02-0.5198555201962D+02 +-0.5198537721883D+02-0.5198520030257D+02-0.5198502124524D+02-0.5198484002091D+02 +-0.5198465660333D+02-0.5198447096595D+02-0.5198428308188D+02-0.5198409292391D+02 +-0.5198390046450D+02-0.5198370567579D+02-0.5198350852955D+02-0.5198330899725D+02 +-0.5198310704998D+02-0.5198290265850D+02-0.5198269579318D+02-0.5198248642408D+02 +-0.5198227452087D+02-0.5198206005285D+02-0.5198184298896D+02-0.5198162329776D+02 +-0.5198140094741D+02-0.5198117590571D+02-0.5198094814005D+02-0.5198071761744D+02 +-0.5198048430449D+02-0.5198024816738D+02-0.5198000917191D+02-0.5197976728344D+02 +-0.5197952246692D+02-0.5197927468690D+02-0.5197902390745D+02-0.5197877009224D+02 +-0.5197851320449D+02-0.5197825320698D+02-0.5197799006201D+02-0.5197772373146D+02 +-0.5197745417673D+02-0.5197718135875D+02-0.5197690523796D+02-0.5197662577437D+02 +-0.5197634292744D+02-0.5197605665620D+02-0.5197576691913D+02-0.5197547367423D+02 +-0.5197517687900D+02-0.5197487649041D+02-0.5197457246489D+02-0.5197426475838D+02 +-0.5197395332627D+02-0.5197363812338D+02-0.5197331910403D+02-0.5197299622195D+02 +-0.5197266943031D+02-0.5197233868173D+02-0.5197200392824D+02-0.5197166512128D+02 +-0.5197132221174D+02-0.5197097514984D+02-0.5197062388528D+02-0.5197026836709D+02 +-0.5196990854370D+02-0.5196954436291D+02-0.5196917577189D+02-0.5196880271716D+02 +-0.5196842514461D+02-0.5196804299945D+02-0.5196765622622D+02-0.5196726476881D+02 +-0.5196686857041D+02-0.5196646757354D+02-0.5196606171998D+02-0.5196565095085D+02 +-0.5196523520651D+02-0.5196481442664D+02-0.5196438855015D+02-0.5196395751522D+02 +-0.5196352125928D+02-0.5196307971901D+02-0.5196263283028D+02-0.5196218052823D+02 +-0.5196172274718D+02-0.5196125942066D+02-0.5196079048138D+02-0.5196031586126D+02 +-0.5195983549135D+02-0.5195934930191D+02-0.5195885722231D+02-0.5195835918107D+02 +-0.5195785510585D+02-0.5195734492343D+02-0.5195682855969D+02-0.5195630593961D+02 +-0.5195577698725D+02-0.5195524162577D+02-0.5195469977736D+02-0.5195415136330D+02 +-0.5195359630387D+02-0.5195303451841D+02-0.5195246592528D+02-0.5195189044181D+02 +-0.5195130798435D+02-0.5195071846824D+02-0.5195012180777D+02-0.5194951791619D+02 +-0.5194890670569D+02-0.5194828808741D+02-0.5194766197137D+02-0.5194702826653D+02 +-0.5194638688071D+02-0.5194573772064D+02-0.5194508069188D+02-0.5194441569885D+02 +-0.5194374264482D+02-0.5194306143187D+02-0.5194237196087D+02-0.5194167413149D+02 +-0.5194096784220D+02-0.5194025299021D+02-0.5193952947146D+02-0.5193879718066D+02 +-0.5193805601119D+02-0.5193730585519D+02-0.5193654660341D+02-0.5193577814533D+02 +-0.5193500036904D+02-0.5193421316129D+02-0.5193341640742D+02-0.5193260999141D+02 +-0.5193179379578D+02-0.5193096770164D+02-0.5193013158865D+02-0.5192928533501D+02 +-0.5192842881739D+02-0.5192756191098D+02-0.5192668448947D+02-0.5192579642497D+02 +-0.5192489758803D+02-0.5192398784765D+02-0.5192306707119D+02-0.5192213512442D+02 +-0.5192119187145D+02-0.5192023717474D+02-0.5191927089505D+02-0.5191829289146D+02 +-0.5191730302133D+02-0.5191630114025D+02-0.5191528710207D+02-0.5191426075883D+02 +-0.5191322196077D+02-0.5191217055632D+02-0.5191110639202D+02-0.5191002931255D+02 +-0.5190893916069D+02-0.5190783577729D+02-0.5190671900126D+02-0.5190558866954D+02 +-0.5190444461705D+02-0.5190328667673D+02-0.5190211467945D+02-0.5190092845399D+02 +-0.5189972782709D+02-0.5189851262330D+02-0.5189728266508D+02-0.5189603777267D+02 +-0.5189477776415D+02-0.5189350245533D+02-0.5189221165981D+02-0.5189090518885D+02 +-0.5188958285145D+02-0.5188824445423D+02-0.5188688980147D+02-0.5188551869503D+02 +-0.5188413093435D+02-0.5188272631641D+02-0.5188130463569D+02-0.5187986568418D+02 +-0.5187840925129D+02-0.5187693512386D+02-0.5187544308611D+02-0.5187393291962D+02 +-0.5187240440329D+02-0.5187085731330D+02-0.5186929142309D+02-0.5186770650332D+02 +-0.5186610232183D+02-0.5186447864362D+02-0.5186283523081D+02-0.5186117184259D+02 +-0.5185948823518D+02-0.5185778416183D+02-0.5185605937277D+02-0.5185431361514D+02 +-0.5185254663297D+02-0.5185075816718D+02-0.5184894795548D+02-0.5184711573237D+02 +-0.5184526122909D+02-0.5184338417356D+02-0.5184148429039D+02-0.5183956130079D+02 +-0.5183761492255D+02-0.5183564486998D+02-0.5183365085389D+02-0.5183163258155D+02 +-0.5182958975660D+02-0.5182752207907D+02-0.5182542924529D+02-0.5182331094785D+02 +-0.5182116687559D+02-0.5181899671350D+02-0.5181680014270D+02-0.5181457684041D+02 +-0.5181232647986D+02-0.5181004873028D+02-0.5180774325683D+02-0.5180540972054D+02 +-0.5180304777830D+02-0.5180065708277D+02-0.5179823728232D+02-0.5179578802103D+02 +-0.5179330893860D+02-0.5179079967027D+02-0.5178825984684D+02-0.5178568909453D+02 +-0.5178308703501D+02-0.5178045328526D+02-0.5177778745757D+02-0.5177508915948D+02 +-0.5177235799366D+02-0.5176959355795D+02-0.5176679544522D+02-0.5176396324334D+02 +-0.5176109653512D+02-0.5175819489823D+02-0.5175525790517D+02-0.5175228512318D+02 +-0.5174927611419D+02-0.5174623043474D+02-0.5174314763592D+02-0.5174002726332D+02 +-0.5173686885694D+02-0.5173367195115D+02-0.5173043607457D+02-0.5172716075006D+02 +-0.5172384549462D+02-0.5172048981932D+02-0.5171709322923D+02-0.5171365522335D+02 +-0.5171017529452D+02-0.5170665292940D+02-0.5170308760833D+02-0.5169947880525D+02 +-0.5169582598771D+02-0.5169212861671D+02-0.5168838614662D+02-0.5168459802518D+02 +-0.5168076369333D+02-0.5167688258518D+02-0.5167295412791D+02-0.5166897774168D+02 +-0.5166495283960D+02-0.5166087882755D+02-0.5165675510418D+02-0.5165258106080D+02 +-0.5164835608125D+02-0.5164407954186D+02-0.5163975081138D+02-0.5163536925080D+02 +-0.5163093421337D+02-0.5162644504442D+02-0.5162190108131D+02-0.5161730165335D+02 +-0.5161264608164D+02-0.5160793367906D+02-0.5160316375011D+02-0.5159833559084D+02 +-0.5159344848875D+02-0.5158850172268D+02-0.5158349456272D+02-0.5157842627009D+02 +-0.5157329609709D+02-0.5156810328692D+02-0.5156284707365D+02-0.5155752668206D+02 +-0.5155214132756D+02-0.5154669021608D+02-0.5154117254396D+02-0.5153558749786D+02 +-0.5152993425461D+02-0.5152421198113D+02-0.5151841983433D+02-0.5151255696093D+02 +-0.5150662249744D+02-0.5150061557002D+02-0.5149453529428D+02-0.5148838077528D+02 +-0.5148215110737D+02-0.5147584537403D+02-0.5146946264782D+02-0.5146300199022D+02 +-0.5145646245151D+02-0.5144984307067D+02-0.5144314287525D+02-0.5143636088122D+02 +-0.5142949609291D+02-0.5142254750281D+02-0.5141551409151D+02-0.5140839482753D+02 +-0.5140118866721D+02-0.5139389455459D+02-0.5138651142128D+02-0.5137903818632D+02 +-0.5137147375605D+02-0.5136381702401D+02-0.5135606687078D+02-0.5134822216388D+02 +-0.5134028175756D+02-0.5133224449278D+02-0.5132410919702D+02-0.5131587468413D+02 +-0.5130753975423D+02-0.5129910319357D+02-0.5129056377438D+02-0.5128192025477D+02 +-0.5127317137854D+02-0.5126431587514D+02-0.5125535245940D+02-0.5124627983153D+02 +-0.5123709667690D+02-0.5122780166596D+02-0.5121839345403D+02-0.5120887068125D+02 +-0.5119923197240D+02-0.5118947593678D+02-0.5117960116805D+02-0.5116960624416D+02 +-0.5115948972712D+02-0.5114925016296D+02-0.5113888608154D+02-0.5112839599644D+02 +-0.5111777840483D+02-0.5110703178733D+02-0.5109615460788D+02-0.5108514531363D+02 +-0.5107400233480D+02-0.5106272408452D+02-0.5105130895877D+02-0.5103975533619D+02 +-0.5102806157801D+02-0.5101622602790D+02-0.5100424701185D+02-0.5099212283803D+02 +-0.5097985179674D+02-0.5096743216021D+02-0.5095486218256D+02-0.5094214009961D+02 +-0.5092926412887D+02-0.5091623246932D+02-0.5090304330139D+02-0.5088969478681D+02 +-0.5087618506855D+02-0.5086251227064D+02-0.5084867449820D+02-0.5083466983722D+02 +-0.5082049635455D+02-0.5080615209778D+02-0.5079163509518D+02-0.5077694335558D+02 +-0.5076207486834D+02-0.5074702760324D+02-0.5073179951042D+02-0.5071638852033D+02 +-0.5070079254364D+02-0.5068500947122D+02-0.5066903717403D+02-0.5065287350315D+02 +-0.5063651628963D+02-0.5061996334457D+02-0.5060321245898D+02-0.5058626140382D+02 +-0.5056910792994D+02-0.5055174976809D+02-0.5053418462884D+02-0.5051641020267D+02 +-0.5049842415989D+02-0.5048022415067D+02-0.5046180780505D+02-0.5044317273295D+02 +-0.5042431652422D+02-0.5040523674861D+02-0.5038593095586D+02-0.5036639667573D+02 +-0.5034663141803D+02-0.5032663267268D+02-0.5030639790981D+02-0.5028592457977D+02 +-0.5026521011328D+02-0.5024425192145D+02-0.5022304739591D+02-0.5020159390892D+02 +-0.5017988881346D+02-0.5015792944334D+02-0.5013571311336D+02-0.5011323711944D+02 +-0.5009049873873D+02-0.5006749522980D+02-0.5004422383280D+02-0.5002068176959D+02 +-0.4999686624397D+02-0.4997277444186D+02-0.4994840353146D+02-0.4992375066350D+02 +-0.4989881297144D+02-0.4987358757171D+02-0.4984807156389D+02-0.4982226203106D+02 +-0.4979615603991D+02-0.4976975064117D+02-0.4974304286974D+02-0.4971602974502D+02 +-0.4968870827126D+02-0.4966107543776D+02-0.4963312821924D+02-0.4960486357616D+02 +-0.4957627845502D+02-0.4954736978871D+02-0.4951813449683D+02-0.4948856948612D+02 +-0.4945867165071D+02-0.4942843787257D+02-0.4939786502185D+02-0.4936694995729D+02 +-0.4933568952659D+02-0.4930408056681D+02-0.4927211990478D+02-0.4923980435752D+02 +-0.4920713073265D+02-0.4917409582880D+02-0.4914069643607D+02-0.4910692933642D+02 +-0.4907279130416D+02-0.4903827910633D+02-0.4900338950319D+02-0.4896811924867D+02 +-0.4893246509079D+02-0.4889642377211D+02-0.4885999203021D+02-0.4882316659813D+02 +-0.4878594420482D+02-0.4874832157556D+02-0.4871029543247D+02-0.4867186249491D+02 +-0.4863301947995D+02-0.4859376310277D+02-0.4855409007715D+02-0.4851399711583D+02 +-0.4847348093100D+02-0.4843253823466D+02-0.4839116573905D+02-0.4834936015704D+02 +-0.4830711820251D+02-0.4826443659074D+02-0.4822131203876D+02-0.4817774126566D+02 +-0.4813372099301D+02-0.4808924794511D+02-0.4804431884930D+02-0.4799893043625D+02 +-0.4795307944023D+02-0.4790676259938D+02-0.4785997665588D+02-0.4781271835619D+02 +-0.4776498445124D+02-0.4771677169657D+02-0.4766807685247D+02-0.4761889668409D+02 +-0.4756922796153D+02-0.4751906745988D+02-0.4746841195927D+02-0.4741725824487D+02 +-0.4736560310686D+02-0.4731344334036D+02-0.4726077574537D+02-0.4720759712663D+02 +-0.4715390429349D+02-0.4709969405976D+02-0.4704496324345D+02-0.4698970866656D+02 +-0.4693392715482D+02-0.4687761553742D+02-0.4682077064661D+02-0.4676338931742D+02 +-0.4670546838725D+02-0.4664700469545D+02-0.4658799508292D+02-0.4652843639162D+02 +-0.4646832546412D+02-0.4640765914308D+02-0.4634643427075D+02-0.4628464768840D+02 +-0.4622229623583D+02-0.4615937675077D+02-0.4609588606835D+02-0.4603182102046D+02 +-0.4596717843531D+02-0.4590195513672D+02-0.4583614794369D+02-0.4576975366979D+02 +-0.4570276912265D+02-0.4563519110351D+02-0.4556701640665D+02-0.4549824181908D+02 +-0.4542886412007D+02-0.4535888008084D+02-0.4528828646428D+02-0.4521708002473D+02 +-0.4514525750785D+02-0.4507281565054D+02-0.4499975118097D+02-0.4492606081870D+02 +-0.4485174127497D+02-0.4477678925295D+02-0.4470120144833D+02-0.4462497454985D+02 +-0.4454810524011D+02-0.4447059019649D+02-0.4439242609219D+02-0.4431360959758D+02 +-0.4423413738159D+02-0.4415400611337D+02-0.4407321246418D+02-0.4399175310947D+02 +-0.4390962473114D+02-0.4382682402010D+02-0.4374334767908D+02-0.4365919242563D+02 +-0.4357435499539D+02-0.4348883214570D+02-0.4340262065933D+02-0.4331571734857D+02 +-0.4322811905962D+02-0.4313982267710D+02-0.4305082512897D+02-0.4296112339160D+02 +-0.4287071449512D+02-0.4277959552900D+02-0.4268776364786D+02-0.4259521607738D+02 +-0.4250195012053D+02-0.4240796316384D+02-0.4231325268378D+02-0.4221781625326D+02 +-0.4212165154821D+02-0.4202475635403D+02-0.4192712857207D+02-0.4182876622603D+02 +-0.4172966746809D+02-0.4162983058491D+02-0.4152925400326D+02-0.4142793629535D+02 +-0.4132587618362D+02-0.4122307254514D+02-0.4111952441526D+02-0.4101523099069D+02 +-0.4091019163177D+02-0.4080440586392D+02-0.4069787337814D+02-0.4059059403052D+02 +-0.4048256784069D+02-0.4037379498919D+02-0.4026427581359D+02-0.4015401080347D+02 +-0.4004300059408D+02-0.3993124595881D+02-0.3981874780047D+02-0.3970550714118D+02 +-0.3959152511128D+02-0.3947680293704D+02-0.3936134192738D+02-0.3924514345974D+02 +-0.3912820896514D+02-0.3901053991273D+02-0.3889213779388D+02-0.3877300410616D+02 +-0.3865314033730D+02-0.3853254794941D+02-0.3841122836384D+02-0.3828918294671D+02 +-0.3816641299561D+02-0.3804291972752D+02-0.3791870426838D+02-0.3779376764439D+02 +-0.3766811077544D+02-0.3754173447071D+02-0.3741463942662D+02-0.3728682622747D+02 +-0.3715829534855D+02-0.3702904716206D+02-0.3689908194568D+02-0.3676839989389D+02 +-0.3663700113198D+02-0.3650488573242D+02-0.3637205373385D+02-0.3623850516215D+02 +-0.3610424005352D+02-0.3596925847947D+02-0.3583356057318D+02-0.3569714655716D+02 +-0.3556001677183D+02-0.3542217170480D+02-0.3528361202035D+02-0.3514433858906D+02 +-0.3500435251706D+02-0.3486365517474D+02-0.3472224822457D+02-0.3458013364781D+02 +-0.3443731376977D+02-0.3429379128348D+02-0.3414956927154D+02-0.3400465122587D+02 +-0.3385904106531D+02-0.3371274315081D+02-0.3356576229817D+02-0.3341810378823D+02 +-0.3326977337430D+02-0.3312077728689D+02-0.3297112223571D+02-0.3282081540879D+02 +-0.3266986446883D+02-0.3251827754673D+02-0.3236606323235D+02-0.3221323056253D+02 +-0.3205978900636D+02-0.3190574844798D+02-0.3175111916665D+02-0.3159591181450D+02 +-0.3144013739192D+02-0.3128380722060D+02-0.3112693291460D+02-0.3096952634939D+02 +-0.3081159962896D+02-0.3065316505139D+02-0.3049423507279D+02-0.3033482226994D+02 +-0.3017493930171D+02-0.3001459886954D+02-0.2985381367711D+02-0.2969259638940D+02 +-0.2953095959141D+02-0.2936891574677D+02-0.2920647715631D+02-0.2904365591713D+02 +-0.2888046388202D+02-0.2871691261992D+02-0.2855301337730D+02-0.2838877704096D+02 +-0.2822421410237D+02-0.2805933462405D+02-0.2789414820796D+02-0.2772866396645D+02 +-0.2756289049588D+02-0.2739683585338D+02-0.2723050753680D+02-0.2706391246838D+02 +-0.2689705698223D+02-0.2672994681603D+02-0.2656258710714D+02-0.2639498239345D+02 +-0.2622713661917D+02-0.2605905314574D+02-0.2589073476829D+02-0.2572218373759D+02 +-0.2555340178776D+02-0.2538439017000D+02-0.2521514969218D+02-0.2504568076457D+02 +-0.2487598345161D+02-0.2470605752972D+02-0.2453590255090D+02-0.2436551791213D+02 +-0.2419490293015D+02-0.2402405692122D+02-0.2385297928550D+02-0.2368166959536D+02 +-0.2351012768684D+02-0.2333835375355D+02-0.2316634844181D+02-0.2299411294593D+02 +-0.2282164910224D+02-0.2264895948042D+02-0.2247604747020D+02-0.2230291736187D+02 +-0.2212957441833D+02-0.2195602493665D+02-0.2178227629680D+02-0.2160833699531D+02 +-0.2143421666157D+02-0.2125992605447D+02-0.2108547703736D+02-0.2091088252957D+02 +-0.2073615643311D+02-0.2056131353347D+02-0.2038636937454D+02-0.2021134010787D+02 +-0.2003624231780D+02-0.1986109282464D+02-0.1968590846923D+02-0.1951070588338D+02 +-0.1933550125113D+02-0.1916031006739D+02-0.1898514690054D+02-0.1881002516654D+02 +-0.1863495692195D+02-0.1845995268332D+02-0.1828502127992D+02-0.1811016974578D+02 +-0.1793540325598D+02-0.1776072511080D+02-0.1758613676940D+02-0.1741163793327D+02 +-0.1723722667775D+02-0.1706289962834D+02-0.1688865217702D+02-0.1671447873257D+02 +-0.1654037299789D+02-0.1636632826691D+02-0.1619233773325D+02-0.1601839480315D+02 +-0.1584449340510D+02-0.1567062828984D+02-0.1549679531468D+02-0.1532299170720D+02 +-0.1514921630451D+02-0.1497546976480D+02-0.1480175474939D+02-0.1462807607400D+02 +-0.1445444082871D+02-0.1428085846710D+02-0.1410734086517D+02-0.1393390235146D+02 +-0.1376055970989D+02-0.1358733215727D+02-0.1341424129731D+02-0.1324131105355D+02 +-0.1306856758305D+02-0.1289603917318D+02-0.1272375612351D+02-0.1255175061484D+02 +-0.1238005656736D+02-0.1220870948967D+02-0.1203774632043D+02-0.1186720526422D+02 +-0.1169712562320D+02-0.1152754762583D+02-0.1135851225403D+02-0.1119006106993D+02 +-0.1102223604329D+02-0.1085507938069D+02-0.1068863335731D+02-0.1052294015218D+02 +-0.1035804168776D+02-0.1019397947446D+02-0.1003079446077D+02-0.9868526889628D+01 +-0.9707216161554D+01-0.9546900704939D+01-0.9387617854023D+01-0.9229403734858D+01 +-0.9072293159592D+01-0.8916319529363D+01-0.8761514745993D+01-0.8607909132693D+01 +-0.8455531363896D+01-0.8304408404305D+01-0.8154565457227D+01-0.8006025922166D+01 +-0.7858811361682D+01-0.7712941477416D+01-0.7568434095199D+01-0.7425305159081D+01 +-0.7283568734134D+01-0.7143237017788D+01-0.7004320359504D+01-0.6866827288485D+01 +-0.6730764549154D+01-0.6596137144079D+01-0.6462948384000D+01-0.6331199944618D+01 +-0.6200891929738D+01-0.6072022940407D+01-0.5944590149603D+01-0.5818589382077D+01 +-0.5694015198898D+01-0.5570860986265D+01-0.5449119048124D+01-0.5328780702141D+01 +-0.5209836378552D+01-0.5092275721431D+01-0.4976087691897D+01-0.4861260672787D+01 +-0.4747782574321D+01-0.4635640940271D+01-0.4524823054180D+01-0.4415316045125D+01 +-0.4307106992579D+01-0.4200183029885D+01-0.4094531445869D+01-0.3990139784139D+01 +-0.3886995939600D+01-0.3785088251726D+01-0.3684405594148D+01-0.3584937460106D+01 +-0.3486674043348D+01-0.3389606314047D+01-0.3293726089348D+01-0.3199026098161D+01 +-0.3105500039868D+01-0.3013142636618D+01-0.2921949678952D+01-0.2831918064533D+01 +-0.2743045829849D+01-0.2655332174788D+01-0.2568777480092D+01-0.2483383317815D+01 +-0.2399152454962D+01-0.2316088850658D+01-0.2234197647300D+01-0.2153485156272D+01 +-0.2073958838965D+01-0.1995627283965D+01-0.1918500181413D+01-0.1842588295670D+01 +-0.1767903437522D+01-0.1694458437274D+01-0.1622267120110D+01-0.1551344285168D+01 +-0.1481705689753D+01-0.1413368040087D+01-0.1346348989896D+01-0.1280667148051D+01 +-0.1216342096293D+01-0.1153394417906D+01-0.1091845737986D+01-0.1031718775725D+01 +-0.9730374088849D+00-0.9158267504133D+00-0.8601132368937D+00-0.8059247283301D+00 +-0.7532906185600D+00-0.7022419554295D+00-0.6528115697324D+00-0.6050342118170D+00 +-0.5589466947046D+00-0.5145880425354D+00-0.4719996431596D+00-0.4312254037239D+00 +-0.3923119081554D+00-0.3553085755132D+00-0.3202678182603D+00-0.2872451996103D+00 +-0.2562993012896D+00 + 0.0000000000000D+00 + 1012 0.5229258479779D+01 + 0.2150742905406D-04 0.2201934401975D-04 0.2254344131081D-04 0.2308001074793D-04 + 0.2362934904336D-04 0.2419175996469D-04 0.2476755450247D-04 0.2535705104185D-04 + 0.2596057553829D-04 0.2657846169737D-04 0.2721105115901D-04 0.2785869368592D-04 + 0.2852174735659D-04 0.2920057876285D-04 0.2989556321214D-04 0.3060708493450D-04 + 0.3133553729459D-04 0.3208132300862D-04 0.3284485436652D-04 0.3362655345933D-04 + 0.3442685241199D-04 0.3524619362168D-04 0.3608503000175D-04 0.3694382523153D-04 + 0.3782305401197D-04 0.3872320232740D-04 0.3964476771351D-04 0.4058825953159D-04 + 0.4155419924941D-04 0.4254312072866D-04 0.4355557051923D-04 0.4459210816046D-04 + 0.4565330648961D-04 0.4673975195749D-04 0.4785204495171D-04 0.4899080012754D-04 + 0.5015664674660D-04 0.5135022902361D-04 0.5257220648130D-04 0.5382325431382D-04 + 0.5510406375867D-04 0.5641534247751D-04 0.5775781494596D-04 0.5913222285265D-04 + 0.6053932550771D-04 0.6197990026094D-04 0.6345474292991D-04 0.6496466823815D-04 + 0.6651051026378D-04 0.6809312289875D-04 0.6971338031887D-04 0.7137217746513D-04 + 0.7307043053626D-04 0.7480907749308D-04 0.7658907857468D-04 0.7841141682692D-04 + 0.8027709864336D-04 0.8218715431905D-04 0.8414263861740D-04 0.8614463135050D-04 + 0.8819423797310D-04 0.9029259019072D-04 0.9244084658213D-04 0.9464019323656D-04 + 0.9689184440594D-04 0.9919704317265D-04 0.1015570621330D-03 0.1039732040969D-03 + 0.1064468028041D-03 0.1089792236573D-03 0.1115718644728D-03 0.1142261562483D-03 + 0.1169435639500D-03 0.1197255873171D-03 0.1225737616857D-03 0.1254896588328D-03 + 0.1284748878395D-03 0.1315310959746D-03 0.1346599695998D-03 0.1378632350954D-03 + 0.1411426598085D-03 0.1445000530233D-03 0.1479372669546D-03 0.1514561977641D-03 + 0.1550587866019D-03 0.1587470206711D-03 0.1625229343189D-03 0.1663886101524D-03 + 0.1703461801815D-03 0.1743978269887D-03 0.1785457849256D-03 0.1827923413391D-03 + 0.1871398378251D-03 0.1915906715131D-03 0.1961472963799D-03 0.2008122245952D-03 + 0.2055880278984D-03 0.2104773390081D-03 0.2154828530649D-03 0.2206073291079D-03 + 0.2258535915864D-03 0.2312245319072D-03 0.2367231100177D-03 0.2423523560273D-03 + 0.2481153718665D-03 0.2540153329849D-03 0.2600554900897D-03 0.2662391709247D-03 + 0.2725697820915D-03 0.2790508109132D-03 0.2856858273428D-03 0.2924784859153D-03 + 0.2994325277470D-03 0.3065517825810D-03 0.3138401708812D-03 0.3213017059753D-03 + 0.3289404962488D-03 0.3367607473897D-03 0.3447667646870D-03 0.3529629553823D-03 + 0.3613538310777D-03 0.3699440101989D-03 0.3787382205180D-03 0.3877413017338D-03 + 0.3969582081140D-03 0.4063940111991D-03 0.4160539025692D-03 0.4259431966769D-03 + 0.4360673337456D-03 0.4464318827368D-03 0.4570425443864D-03 0.4679051543124D-03 + 0.4790256861959D-03 0.4904102550358D-03 0.5020651204812D-03 0.5139966902408D-03 + 0.5262115235724D-03 0.5387163348549D-03 0.5515179972435D-03 0.5646235464104D-03 + 0.5780401843732D-03 0.5917752834137D-03 0.6058363900874D-03 0.6202312293275D-03 + 0.6349677086450D-03 0.6500539224267D-03 0.6654981563344D-03 0.6813088918062D-03 + 0.6974948106637D-03 0.7140647998269D-03 0.7310279561389D-03 0.7483935913040D-03 + 0.7661712369406D-03 0.7843706497523D-03 0.8030018168203D-03 0.8220749610184D-03 + 0.8416005465556D-03 0.8615892846469D-03 0.8820521393172D-03 0.9030003333406D-03 + 0.9244453543176D-03 0.9463989608946D-03 0.9688731891282D-03 0.9918803589975D-03 + 0.1015433081069D-02 0.1039544263315D-02 0.1064227118095D-02 0.1089495169290D-02 + 0.1115362259619D-02 0.1141842558105D-02 0.1168950567737D-02 0.1196701133289D-02 + 0.1225109449338D-02 0.1254191068456D-02 0.1283961909601D-02 0.1314438266696D-02 + 0.1345636817413D-02 0.1377574632157D-02 0.1410269183260D-02 0.1443738354387D-02 + 0.1478000450161D-02 0.1513074206015D-02 0.1548978798262D-02 0.1585733854409D-02 + 0.1623359463706D-02 0.1661876187936D-02 0.1701305072458D-02 0.1741667657505D-02 + 0.1782985989747D-02 0.1825282634108D-02 0.1868580685877D-02 0.1912903783076D-02 + 0.1958276119133D-02 0.2004722455835D-02 0.2052268136585D-02 0.2100939099962D-02 + 0.2150761893598D-02 0.2201763688371D-02 0.2253972292925D-02 0.2307416168524D-02 + 0.2362124444253D-02 0.2418126932561D-02 0.2475454145167D-02 0.2534137309329D-02 + 0.2594208384486D-02 0.2655700079287D-02 0.2718645869002D-02 0.2783080013344D-02 + 0.2849037574687D-02 0.2916554436715D-02 0.2985667323484D-02 0.3056413818931D-02 + 0.3128832386828D-02 0.3202962391187D-02 0.3278844117136D-02 0.3356518792272D-02 + 0.3436028608501D-02 0.3517416744371D-02 0.3600727387929D-02 0.3686005760082D-02 + 0.3773298138499D-02 0.3862651882061D-02 0.3954115455860D-02 0.4047738456768D-02 + 0.4143571639594D-02 0.4241666943825D-02 0.4342077520985D-02 0.4444857762604D-02 + 0.4550063328833D-02 0.4657751177697D-02 0.4767979595018D-02 0.4880808225009D-02 + 0.4996298101570D-02 0.5114511680279D-02 0.5235512871115D-02 0.5359367071918D-02 + 0.5486141202598D-02 0.5615903740128D-02 0.5748724754308D-02 0.5884675944352D-02 + 0.6023830676284D-02 0.6166264021183D-02 0.6312052794284D-02 0.6461275594959D-02 + 0.6614012847588D-02 0.6770346843357D-02 0.6930361782982D-02 0.7094143820394D-02 + 0.7261781107400D-02 0.7433363839342D-02 0.7608984301773D-02 0.7788736918176D-02 + 0.7972718298747D-02 0.8161027290261D-02 0.8353765027049D-02 0.8551034983111D-02 + 0.8752943025377D-02 0.8959597468160D-02 0.9171109128811D-02 0.9387591384603D-02 + 0.9609160230877D-02 0.9835934340477D-02 0.1006803512449D-01 0.1030558679431D-01 + 0.1054871642512D-01 0.1079755402073D-01 0.1105223257982D-01 0.1131288816368D-01 + 0.1157965996544D-01 0.1185269038080D-01 0.1213212508026D-01 0.1241811308303D-01 + 0.1271080683248D-01 0.1301036227325D-01 0.1331693893004D-01 0.1363069998813D-01 + 0.1395181237567D-01 0.1428044684765D-01 0.1461677807184D-01 0.1496098471648D-01 + 0.1531324953990D-01 0.1567375948211D-01 0.1604270575828D-01 0.1642028395434D-01 + 0.1680669412453D-01 0.1720214089116D-01 0.1760683354637D-01 0.1802098615621D-01 + 0.1844481766683D-01 0.1887855201303D-01 0.1932241822902D-01 0.1977665056168D-01 + 0.2024148858606D-01 0.2071717732349D-01 0.2120396736203D-01 0.2170211497964D-01 + 0.2221188226980D-01 0.2273353726988D-01 0.2326735409215D-01 0.2381361305754D-01 + 0.2437260083229D-01 0.2494461056731D-01 0.2552994204062D-01 0.2612890180262D-01 + 0.2674180332442D-01 0.2736896714935D-01 0.2801072104743D-01 0.2866740017320D-01 + 0.2933934722669D-01 0.3002691261781D-01 0.3073045463399D-01 0.3145033961141D-01 + 0.3218694210958D-01 0.3294064508962D-01 0.3371184009606D-01 0.3450092744243D-01 + 0.3530831640054D-01 0.3613442539362D-01 0.3697968219334D-01 0.3784452412086D-01 + 0.3872939825181D-01 0.3963476162544D-01 0.4056108145796D-01 0.4150883536008D-01 + 0.4247851155891D-01 0.4347060912422D-01 0.4448563819924D-01 0.4552412023590D-01 + 0.4658658823475D-01 0.4767358698962D-01 0.4878567333696D-01 0.4992341641008D-01 + 0.5108739789835D-01 0.5227821231135D-01 0.5349646724813D-01 0.5474278367169D-01 + 0.5601779618862D-01 0.5732215333417D-01 0.5865651786266D-01 0.6002156704340D-01 + 0.6141799296226D-01 0.6284650282880D-01 0.6430781928923D-01 0.6580268074515D-01 + 0.6733184167825D-01 0.6889607298100D-01 0.7049616229337D-01 0.7213291434581D-01 + 0.7380715130845D-01 0.7551971314661D-01 0.7727145798277D-01 0.7906326246509D-01 + 0.8089602214242D-01 0.8277065184608D-01 0.8468808607842D-01 0.8664927940812D-01 + 0.8865520687255D-01 0.9070686438707D-01 0.9280526916144D-01 0.9495146012343D-01 + 0.9714649834967D-01 0.9939146750384D-01 0.1016874742823D+00 0.1040356488672D+00 + 0.1064371453872D+00 0.1088931423856D+00 0.1114048432967D+00 0.1139734769295D+00 + 0.1166002979593D+00 0.1192865874273D+00 0.1220336532487D+00 0.1248428307276D+00 + 0.1277154830815D+00 0.1306530019730D+00 0.1336568080498D+00 0.1367283514936D+00 + 0.1398691125766D+00 0.1430806022269D+00 0.1463643626021D+00 0.1497219676713D+00 + 0.1531550238057D+00 0.1566651703780D+00 0.1602540803695D+00 0.1639234609870D+00 + 0.1676750542871D+00 0.1715106378098D+00 0.1754320252209D+00 0.1794410669619D+00 + 0.1835396509100D+00 0.1877297030455D+00 0.1920131881282D+00 0.1963921103827D+00 + 0.2008685141914D+00 0.2054444847966D+00 0.2101221490109D+00 0.2149036759359D+00 + 0.2197912776889D+00 0.2247872101386D+00 0.2298937736476D+00 0.2351133138248D+00 + 0.2404482222837D+00 0.2459009374100D+00 0.2514739451362D+00 0.2571697797240D+00 + 0.2629910245536D+00 0.2689403129212D+00 0.2750203288421D+00 0.2812338078623D+00 + 0.2875835378751D+00 0.2940723599454D+00 0.3007031691395D+00 0.3074789153608D+00 + 0.3144026041916D+00 0.3214772977396D+00 0.3287061154899D+00 0.3360922351618D+00 + 0.3436388935694D+00 0.3513493874868D+00 0.3592270745164D+00 0.3672753739607D+00 + 0.3754977676972D+00 0.3838978010545D+00 0.3924790836915D+00 0.4012452904770D+00 + 0.4102001623706D+00 0.4193475073036D+00 0.4286912010595D+00 0.4382351881538D+00 + 0.4479834827120D+00 0.4579401693452D+00 0.4681094040228D+00 0.4784954149418D+00 + 0.4891025033910D+00 0.4999350446102D+00 0.5109974886435D+00 0.5222943611853D+00 + 0.5338302644183D+00 0.5456098778426D+00 0.5576379590956D+00 0.5699193447601D+00 + 0.5824589511607D+00 0.5952617751475D+00 0.6083328948654D+00 0.6216774705074D+00 + 0.6353007450521D+00 0.6492080449824D+00 0.6634047809857D+00 0.6778964486325D+00 + 0.6926886290333D+00 0.7077869894721D+00 0.7231972840138D+00 0.7389253540860D+00 + 0.7549771290311D+00 0.7713586266289D+00 0.7880759535873D+00 0.8051353059985D+00 + 0.8225429697604D+00 0.8403053209599D+00 0.8584288262158D+00 0.8769200429817D+00 + 0.8957856198031D+00 0.9150322965294D+00 0.9346669044774D+00 0.9546963665439D+00 + 0.9751276972649D+00 0.9959680028197D+00 0.1017224480976D+01 0.1038904420974D+01 + 0.1061015203349D+01 0.1083564299686D+01 0.1106559272300D+01 0.1130007773859D+01 + 0.1153917546912D+01 0.1178296423354D+01 0.1203152323804D+01 0.1228493256899D+01 + 0.1254327318495D+01 0.1280662690787D+01 0.1307507641324D+01 0.1334870521934D+01 + 0.1362759767535D+01 0.1391183894856D+01 0.1420151501035D+01 0.1449671262109D+01 + 0.1479751931386D+01 0.1510402337698D+01 0.1541631383520D+01 0.1573448042969D+01 + 0.1605861359662D+01 0.1638880444440D+01 0.1672514472946D+01 0.1706772683055D+01 + 0.1741664372155D+01 0.1777198894269D+01 0.1813385657016D+01 0.1850234118409D+01 + 0.1887753783475D+01 0.1925954200705D+01 0.1964844958324D+01 0.2004435680370D+01 + 0.2044736022586D+01 0.2085755668115D+01 0.2127504322996D+01 0.2169991711448D+01 + 0.2213227570952D+01 0.2257221647108D+01 0.2301983688271D+01 0.2347523439972D+01 + 0.2393850639086D+01 0.2440975007782D+01 0.2488906247220D+01 0.2537654031002D+01 + 0.2587227998372D+01 0.2637637747157D+01 0.2688892826442D+01 0.2741002728983D+01 + 0.2793976883341D+01 0.2847824645743D+01 0.2902555291652D+01 0.2958178007063D+01 + 0.3014701879494D+01 0.3072135888684D+01 0.3130488897001D+01 0.3189769639525D+01 + 0.3249986713841D+01 0.3311148569513D+01 0.3373263497233D+01 0.3436339617667D+01 + 0.3500384869964D+01 0.3565406999951D+01 0.3631413547991D+01 0.3698411836514D+01 + 0.3766408957221D+01 0.3835411757947D+01 0.3905426829193D+01 0.3976460490322D+01 + 0.4048518775419D+01 0.4121607418815D+01 0.4195731840277D+01 0.4270897129857D+01 + 0.4347108032420D+01 0.4424368931831D+01 0.4502683834816D+01 0.4582056354503D+01 + 0.4662489693636D+01 0.4743986627475D+01 0.4826549486387D+01 0.4910180138127D+01 + 0.4994879969825D+01 0.5080649869681D+01 0.5167490208373D+01 0.5255400820202D+01 + 0.5344380983962D+01 0.5434429403565D+01 0.5525544188426D+01 0.5617722833617D+01 + 0.5710962199815D+01 0.5805258493041D+01 0.5900607244231D+01 0.5997003288635D+01 + 0.6094440745069D+01 0.6192912995049D+01 0.6292412661814D+01 0.6392931589269D+01 + 0.6494460820874D+01 0.6596990578488D+01 0.6700510241224D+01 0.6805008324307D+01 + 0.6910472457995D+01 0.7016889366579D+01 0.7124244847491D+01 0.7232523750568D+01 + 0.7341709957494D+01 0.7451786361463D+01 0.7562734847107D+01 0.7674536270712D+01 + 0.7787170440791D+01 0.7900616099026D+01 0.8014850901658D+01 0.8129851401340D+01 + 0.8245593029526D+01 0.8362050079436D+01 0.8479195689649D+01 0.8597001828383D+01 + 0.8715439278509D+01 0.8834477623371D+01 0.8954085233454D+01 0.9074229253973D+01 + 0.9194875593440D+01 0.9315988913276D+01 0.9437532618530D+01 0.9559468849772D+01 + 0.9681758476237D+01 0.9804361090277D+01 0.9927235003199D+01 0.1005033724256D+02 + 0.1017362355101D+02 0.1029704838669D+02 0.1042056492540D+02 0.1054412506444D+02 + 0.1066767942831D+02 0.1079117737637D+02 0.1091456701244D+02 0.1103779519646D+02 + 0.1116080755839D+02 0.1128354851420D+02 0.1140596128432D+02 0.1152798791434D+02 + 0.1164956929827D+02 0.1177064520433D+02 0.1189115430327D+02 0.1201103419951D+02 + 0.1213022146500D+02 0.1224865167586D+02 0.1236625945201D+02 0.1248297849976D+02 + 0.1259874165744D+02 0.1271348094411D+02 0.1282712761148D+02 0.1293961219902D+02 + 0.1305086459240D+02 0.1316081408518D+02 0.1326938944391D+02 0.1337651897664D+02 + 0.1348213060491D+02 0.1358615193909D+02 0.1368851035736D+02 0.1378913308811D+02 + 0.1388794729589D+02 0.1398488017086D+02 0.1407985902179D+02 0.1417281137257D+02 + 0.1426366506212D+02 0.1435234834789D+02 0.1443879001264D+02 0.1452291947466D+02 + 0.1460466690129D+02 0.1468396332564D+02 0.1476074076649D+02 0.1483493235126D+02 + 0.1490647244192D+02 0.1497529676373D+02 0.1504134253675D+02 0.1510454860984D+02 + 0.1516485559720D+02 0.1522220601698D+02 0.1527654443219D+02 0.1532781759325D+02 + 0.1537597458241D+02 0.1542096695946D+02 0.1546274890874D+02 0.1550127738702D+02 + 0.1553651227211D+02 0.1556841651189D+02 0.1559695627334D+02 0.1562210109145D+02 + 0.1564382401753D+02 0.1566210176664D+02 0.1567691486377D+02 0.1568824778841D+02 + 0.1569608911712D+02 0.1570043166360D+02 0.1570127261607D+02 0.1569861367129D+02 + 0.1569246116496D+02 0.1568282619787D+02 0.1566972475757D+02 0.1565317783486D+02 + 0.1563321153475D+02 0.1560985718135D+02 0.1558315141624D+02 0.1555313628970D+02 + 0.1551985934445D+02 0.1548337369123D+02 0.1544373807583D+02 0.1540101693692D+02 + 0.1535528045436D+02 0.1530660458716D+02 0.1525507110098D+02 0.1520076758423D+02 + 0.1514378745267D+02 0.1508422994170D+02 0.1502220008605D+02 0.1495780868635D+02 + 0.1489117226206D+02 0.1482241299046D+02 0.1475165863115D+02 0.1467904243575D+02 + 0.1460470304238D+02 0.1452878435463D+02 0.1445143540465D+02 0.1437281020013D+02 + 0.1429306755483D+02 0.1421237090260D+02 0.1413088809452D+02 0.1404879117925D+02 + 0.1396625616625D+02 0.1388346277207D+02 0.1380059414952D+02 0.1371783659988D+02 + 0.1363537926825D+02 0.1355341382212D+02 0.1347213411351D+02 0.1339173582480D+02 + 0.1331241609871D+02 0.1323437315279D+02 0.1315780587881D+02 0.1308291342766D+02 + 0.1300989478035D+02 0.1293894830568D+02 0.1287027130535D+02 0.1280405954732D+02 + 0.1274050678825D+02 0.1267980428593D+02 0.1262214030269D+02 0.1256769960087D+02 + 0.1251666293145D+02 0.1246920651702D+02 0.1242550153038D+02 0.1238571356999D+02 + 0.1235000213372D+02 0.1231852009235D+02 0.1229141316414D+02 0.1226881939222D+02 + 0.1225086862623D+02 0.1223768200985D+02 0.1222937147599D+02 0.1222603925117D+02 + 0.1222777737106D+02 0.1223466720868D+02 0.1224677901729D+02 0.1226417148958D+02 + 0.1228689133517D+02 0.1231497287802D+02 0.1234843767581D+02 0.1238729416297D+02 + 0.1243153731911D+02 0.1248114836487D+02 0.1253609448665D+02 0.1259632859227D+02 + 0.1266178909890D+02 0.1273239975523D+02 0.1280806949923D+02 0.1288869235315D+02 + 0.1297414735711D+02 0.1306429854274D+02 0.1315899494816D+02 0.1325807067533D+02 + 0.1336134499111D+02 0.1346862247282D+02 0.1357969319917D+02 0.1369433298744D+02 + 0.1381230367740D+02 0.1393335346243D+02 0.1405721726828D+02 0.1418361717951D+02 + 0.1431226291376D+02 0.1444285234362D+02 0.1457507206581D+02 0.1470859801733D+02 + 0.1484309613763D+02 0.1497822307639D+02 0.1511362694548D+02 0.1524894811426D+02 + 0.1538382004666D+02 0.1551787017849D+02 0.1565072083339D+02 0.1578199017530D+02 + 0.1591129319546D+02 0.1603824273170D+02 0.1616245051740D+02 0.1628352825765D+02 + 0.1640108872963D+02 0.1651474690448D+02 0.1662412108723D+02 0.1672883407174D+02 + 0.1682851430716D+02 0.1692279707220D+02 0.1701132565381D+02 0.1709375252614D+02 + 0.1716974052608D+02 0.1723896402125D+02 0.1730111006644D+02 0.1735587954416D+02 + 0.1740298828530D+02 0.1744216816538D+02 0.1747316817225D+02 0.1749575544089D+02 + 0.1750971625093D+02 0.1751485698260D+02 0.1751100502688D+02 0.1749800964559D+02 + 0.1747574277733D+02 0.1744409978499D+02 0.1740300014123D+02 0.1735238804766D+02 + 0.1729223298439D+02 0.1722253018618D+02 0.1714330104180D+02 0.1705459341368D+02 + 0.1695648187457D+02 0.1684906785873D+02 0.1673247972505D+02 0.1660687272995D+02 + 0.1647242890818D+02 0.1632935685981D+02 0.1617789144222D+02 0.1601829336618D+02 + 0.1585084869528D+02 0.1567586824865D+02 0.1549368690699D+02 0.1530466282265D+02 + 0.1510917653451D+02 0.1490762998916D+02 0.1470044547022D+02 0.1448806443791D+02 + 0.1427094628160D+02 0.1404956698852D+02 0.1382441773199D+02 0.1359600338336D+02 + 0.1336484095192D+02 0.1313145795774D+02 0.1289639074258D+02 0.1266018272468D+02 + 0.1242338260337D+02 0.1218654252002D+02 0.1195021618209D+02 0.1171495695744D+02 + 0.1148131594627D+02 0.1124984003849D+02 0.1102106996440D+02 0.1079553834688D+02 + 0.1057376776347D+02 0.1035626882667D+02 0.1014353829125D+02 0.9936057196884D+01 + 0.9734289054994D+01 0.9538678088120D+01 0.9349647530399D+01 0.9167597997384D+01 + 0.8992905933301D+01 0.8825922143594D+01 0.8666970420224D+01 0.8516346266999D+01 + 0.8374315731611D+01 0.8241114350747D+01 0.8116946214096D+01 0.8001983152570D+01 + 0.7896364055459D+01 0.7800194320670D+01 0.7713545441561D+01 0.7636454733225D+01 + 0.7568925200401D+01 0.7510925548528D+01 0.7462390338698D+01 0.7423220286625D+01 + 0.7393282704950D+01 0.7372412087556D+01 0.7360410833787D+01 0.7357050109802D+01 + 0.7362070843542D+01 0.7375184849138D+01 0.7396076075866D+01 0.7424401976120D+01 + 0.7459794986211D+01 0.7501864113185D+01 0.7550196620265D+01 0.7604359802945D+01 + 0.7663902847256D+01 0.7728358761219D+01 0.7797246370063D+01 0.7870072365405D+01 + 0.7946333398216D+01 0.8025518205140D+01 0.8107109757504D+01 0.8190587422172D+01 + 0.8275429123337D+01 0.8361113494303D+01 0.8447122008353D+01 0.8532941077928D+01 + 0.8618064111536D+01 0.8701993518075D+01 0.8784242648578D+01 0.8864337665829D+01 + 0.8941819332731D+01 0.9016244710878D+01 0.9087188761372D+01 0.9154245840560D+01 + 0.9217031084099D+01 0.9275181673474D+01 0.9328357979881D+01 0.9376244581215D+01 + 0.9418551148709D+01 0.9455013200639D+01 0.9485392721360D+01 0.9509478644797D+01 + 0.9527087202359D+01 0.9538062136102D+01 0.9542274778747D+01 0.9539624002998D+01 + 0.9530036043300D+01 0.9513464193959D+01 0.9489888388159D+01 0.9459314663078D+01 + 0.9421774516843D+01 0.9377324163609D+01 0.9326043693467D+01 0.9268036144314D+01 + 0.9203426493115D+01 0.9132360574297D+01 0.9055003933175D+01 0.8971540622481D+01 + 0.8882171950151D+01 0.8787115186520D+01 0.8686602239071D+01 0.8580878302773D+01 + 0.8470200493895D+01 0.8354836475027D+01 0.8235063078754D+01 0.8111164937189D+01 + 0.7983433124252D+01 0.7852163817216D+01 0.7717656983696D+01 0.7580215099831D+01 + 0.7440141905014D+01 0.7297741198086D+01 0.7153315679440D+01 0.7007165843079D+01 + 0.6859588922166D+01 0.6710877891167D+01 0.6561320527250D+01 0.6411198533128D+01 + 0.6260786723101D+01 0.6110352273646D+01 0.5960154039458D+01 0.5810441935471D+01 + 0.5661456384987D+01 0.5513427833700D+01 0.5366576329042D+01 0.5221111163955D+01 + 0.5077230583918D+01 0.4935121555751D+01 0.4794959596475D+01 0.4656908660288D+01 + 0.4521121081498D+01 0.4387737571052D+01 0.4256887264186D+01 0.4128687816522D+01 + 0.4003245545873D+01 0.3880655616880D+01 0.3761002265561D+01 0.3644359060777D+01 + 0.3530789199588D+01 0.3420345833472D+01 0.3313072422343D+01 0.3209003113371D+01 + 0.3108163141592D+01 0.3010569249384D+01 0.2916230121919D+01 0.2825146835796D+01 + 0.2737313318133D+01 0.2652716813508D+01 0.2571338356232D+01 0.2493153245580D+01 + 0.2418131521695D+01 0.2346238440047D+01 0.2277434942461D+01 0.2211678122838D+01 + 0.2148921685899D+01 0.2089116397376D+01 0.2032210524266D+01 0.1978150263893D+01 + 0.1926880160684D+01 0.1878343509721D+01 0.1832482746269D+01 0.1789239820638D+01 + 0.1748556557871D+01 0.1710375001879D+01 0.1674637743804D+01 0.1641288234472D+01 + 0.1610271080956D+01 0.1581532327338D+01 0.1555019719890D+01 0.1530682956958D+01 + 0.1508473923914D+01 0.1488346913611D+01 0.1470258832820D+01 0.1454169395155D+01 + 0.1440041301042D+01 0.1427840405245D+01 0.1417535872504D+01 0.1409100321753D+01 + 0.1402509959377D+01 0.1397744701874D+01 0.1394788288181D+01 0.1393628381826D+01 + 0.1394256662892D+01 0.1396668909610D+01 0.1400865069190D+01 0.1406849317222D+01 + 0.1414629369614D+01 0.1424336942263D+01 0.1436096575202D+01 0.1449912447024D+01 + 0.1465794674727D+01 0.1483759333931D+01 0.1503828494539D+01 0.1526030271798D+01 + 0.1550398892649D+01 0.1576974777196D+01 0.1605804635055D+01 0.1636941576215D+01 + 7 1012 + 1 0 -1 -511.89194 + 2 0 -1 -58.90181 + 2 1 1 -50.68932 + 2 1 -2 -49.77537 + 3 0 -1 -5.73317 + 3 1 1 -3.34334 + 3 1 -2 -3.22919 + 0.2122975645015D-04 0.2173507709867D-04 0.2225242316243D-04 0.2278208072829D-04 + 0.2332434268594D-04 0.2387950888954D-04 0.2444788632325D-04 0.2502978927059D-04 + 0.2562553948791D-04 0.2623546638192D-04 0.2685990719144D-04 0.2749920717353D-04 + 0.2815371979393D-04 0.2882380692207D-04 0.2950983903075D-04 0.3021219540050D-04 + 0.3093126432877D-04 0.3166744334418D-04 0.3242113942573D-04 0.3319276922733D-04 + 0.3398275930755D-04 0.3479154636487D-04 0.3561957747857D-04 0.3646731035519D-04 + 0.3733521358096D-04 0.3822376688016D-04 0.3913346137963D-04 0.4006479987955D-04 + 0.4101829713060D-04 0.4199448011777D-04 0.4299388835081D-04 0.4401707416166D-04 + 0.4506460300883D-04 0.4613705378910D-04 0.4723501915650D-04 0.4835910584899D-04 + 0.4950993502270D-04 0.5068814259429D-04 0.5189437959126D-04 0.5312931251066D-04 + 0.5439362368626D-04 0.5568801166444D-04 0.5701319158897D-04 0.5836989559491D-04 + 0.5975887321186D-04 0.6118089177673D-04 0.6263673685632D-04 0.6412721267990D-04 + 0.6565314258201D-04 0.6721536945580D-04 0.6881475621705D-04 0.7045218627922D-04 + 0.7212856403973D-04 0.7384481537777D-04 0.7560188816385D-04 0.7740075278149D-04 + 0.7924240266119D-04 0.8112785482706D-04 0.8305815045642D-04 0.8503435545263D-04 + 0.8705756103141D-04 0.8912888432116D-04 0.9124946897738D-04 0.9342048581165D-04 + 0.9564313343555D-04 0.9791863891974D-04 0.1002482584687D-03 0.1026332781112D-03 + 0.1050750144077D-03 0.1075748151735D-03 0.1101340602203D-03 0.1127541621137D-03 + 0.1154365669501D-03 0.1181827551510D-03 0.1209942422769D-03 0.1238725798590D-03 + 0.1268193562527D-03 0.1298361975089D-03 0.1329247682680D-03 0.1360867726735D-03 + 0.1393239553083D-03 0.1426381021518D-03 0.1460310415612D-03 0.1495046452749D-03 + 0.1530608294397D-03 0.1567015556625D-03 0.1604288320871D-03 0.1642447144955D-03 + 0.1681513074364D-03 0.1721507653792D-03 0.1762452938963D-03 0.1804371508722D-03 + 0.1847286477421D-03 0.1891221507592D-03 0.1936200822920D-03 0.1982249221522D-03 + 0.2029392089542D-03 0.2077655415060D-03 0.2127065802334D-03 0.2177650486382D-03 + 0.2229437347894D-03 0.2282454928513D-03 0.2336732446459D-03 0.2392299812538D-03 + 0.2449187646513D-03 0.2507427293871D-03 0.2567050842979D-03 0.2628091142650D-03 + 0.2690581820118D-03 0.2754557299435D-03 0.2820052820308D-03 0.2887104457371D-03 + 0.2955749139921D-03 0.3026024672103D-03 0.3097969753590D-03 0.3171624000731D-03 + 0.3247027968207D-03 0.3324223171196D-03 0.3403252108055D-03 0.3484158283536D-03 + 0.3566986232552D-03 0.3651781544500D-03 0.3738590888149D-03 0.3827462037126D-03 + 0.3918443895988D-03 0.4011586526914D-03 0.4106941177020D-03 0.4204560306321D-03 + 0.4304497616342D-03 0.4406808079408D-03 0.4511547968612D-03 0.4618774888502D-03 + 0.4728547806468D-03 0.4840927084883D-03 0.4955974513988D-03 0.5073753345551D-03 + 0.5194328327314D-03 0.5317765738249D-03 0.5444133424641D-03 0.5573500837015D-03 + 0.5705939067925D-03 0.5841520890639D-03 0.5980320798714D-03 0.6122415046513D-03 + 0.6267881690659D-03 0.6416800632466D-03 0.6569253661363D-03 0.6725324499326D-03 + 0.6885098846360D-03 0.7048664427037D-03 0.7216111038125D-03 0.7387530597330D-03 + 0.7563017193176D-03 0.7742667136049D-03 0.7926579010441D-03 0.8114853728404D-03 + 0.8307594584254D-03 0.8504907310562D-03 0.8706900135433D-03 0.8913683841142D-03 + 0.9125371824119D-03 0.9342080156346D-03 0.9563927648179D-03 0.9791035912634D-03 + 0.1002352943117D-02 0.1026153562102D-02 0.1050518490405D-02 0.1075461077728D-02 + 0.1100994988496D-02 0.1127134209246D-02 0.1153893056171D-02 0.1181286182852D-02 + 0.1209328588167D-02 0.1238035624379D-02 0.1267423005415D-02 0.1297506815344D-02 + 0.1328303517037D-02 0.1359829961041D-02 0.1392103394654D-02 0.1425141471212D-02 + 0.1458962259585D-02 0.1493584253904D-02 0.1529026383504D-02 0.1565308023106D-02 + 0.1602449003221D-02 0.1640469620811D-02 0.1679390650189D-02 0.1719233354165D-02 + 0.1760019495464D-02 0.1801771348394D-02 0.1844511710794D-02 0.1888263916250D-02 + 0.1933051846599D-02 0.1978899944720D-02 0.2025833227614D-02 0.2073877299798D-02 + 0.2123058366995D-02 0.2173403250151D-02 0.2224939399761D-02 0.2277694910540D-02 + 0.2331698536421D-02 0.2386979705903D-02 0.2443568537747D-02 0.2501495857040D-02 + 0.2560793211623D-02 0.2621492888896D-02 0.2683627933011D-02 0.2747232162458D-02 + 0.2812340188056D-02 0.2878987431352D-02 0.2947210143447D-02 0.3017045424251D-02 + 0.3088531242177D-02 0.3161706454285D-02 0.3236610826892D-02 0.3313285056646D-02 + 0.3391770792086D-02 0.3472110655691D-02 0.3554348266436D-02 0.3638528262858D-02 + 0.3724696326649D-02 0.3812899206788D-02 0.3903184744224D-02 0.3995601897109D-02 + 0.4090200766624D-02 0.4187032623373D-02 0.4286149934389D-02 0.4387606390746D-02 + 0.4491456935804D-02 0.4597757794082D-02 0.4706566500803D-02 0.4817941932088D-02 + 0.4931944335851D-02 0.5048635363379D-02 0.5168078101634D-02 0.5290337106279D-02 + 0.5415478435454D-02 0.5543569684307D-02 0.5674680020311D-02 0.5808880219367D-02 + 0.5946242702730D-02 0.6086841574754D-02 0.6230752661494D-02 0.6378053550168D-02 + 0.6528823629508D-02 0.6683144131013D-02 0.6841098171130D-02 0.7002770794372D-02 + 0.7168249017405D-02 0.7337621874121D-02 0.7510980461712D-02 0.7688417987773D-02 + 0.7870029818463D-02 0.8055913527720D-02 0.8246168947593D-02 0.8440898219673D-02 + 0.8640205847678D-02 0.8844198751201D-02 0.9052986320644D-02 0.9266680473381D-02 + 0.9485395711148D-02 0.9709249178711D-02 0.9938360723829D-02 0.1017285295853D-01 + 0.1041285132175D-01 0.1065848414335D-01 0.1090988270951D-01 0.1116718132961D-01 + 0.1143051740455D-01 0.1170003149653D-01 0.1197586740047D-01 0.1225817221684D-01 + 0.1254709642620D-01 0.1284279396532D-01 0.1314542230495D-01 0.1345514252930D-01 + 0.1377211941725D-01 0.1409652152530D-01 0.1442852127232D-01 0.1476829502620D-01 + 0.1511602319226D-01 0.1547189030365D-01 0.1583608511371D-01 0.1620880069022D-01 + 0.1659023451183D-01 0.1698058856639D-01 0.1738006945154D-01 0.1778888847734D-01 + 0.1820726177118D-01 0.1863541038486D-01 0.1907356040402D-01 0.1952194305980D-01 + 0.1998079484302D-01 0.2045035762063D-01 0.2093087875471D-01 0.2142261122400D-01 + 0.2192581374792D-01 0.2244075091329D-01 0.2296769330365D-01 0.2350691763133D-01 + 0.2405870687229D-01 0.2462335040374D-01 0.2520114414469D-01 0.2579239069942D-01 + 0.2639739950387D-01 0.2701648697516D-01 0.2764997666416D-01 0.2829819941123D-01 + 0.2896149350513D-01 0.2964020484531D-01 0.3033468710740D-01 0.3104530191220D-01 + 0.3177241899806D-01 0.3251641639684D-01 0.3327768061342D-01 0.3405660680881D-01 + 0.3485359898710D-01 0.3566907018606D-01 0.3650344267166D-01 0.3735714813647D-01 + 0.3823062790211D-01 0.3912433312562D-01 0.4003872501011D-01 0.4097427501948D-01 + 0.4193146509749D-01 0.4291078789111D-01 0.4391274697832D-01 0.4493785710035D-01 + 0.4598664439858D-01 0.4705964665594D-01 0.4815741354312D-01 0.4928050686955D-01 + 0.5042950083923D-01 0.5160498231153D-01 0.5280755106696D-01 0.5403782007813D-01 + 0.5529641578584D-01 0.5658397838041D-01 0.5790116208843D-01 0.5924863546488D-01 + 0.6062708169076D-01 0.6203719887636D-01 0.6347970037015D-01 0.6495531507346D-01 + 0.6646478776099D-01 0.6800887940725D-01 0.6958836751900D-01 0.7120404647380D-01 + 0.7285672786470D-01 0.7454724085125D-01 0.7627643251682D-01 0.7804516823229D-01 + 0.7985433202641D-01 0.8170482696258D-01 0.8359757552242D-01 0.8553351999606D-01 + 0.8751362287932D-01 0.8953886727772D-01 0.9161025731761D-01 0.9372881856432D-01 + 0.9589559844749D-01 0.9811166669365D-01 0.1003781157661D+00 0.1026960613124D+00 + 0.1050666426187D+00 0.1074910230727D+00 0.1099703906329D+00 0.1125059583070D+00 + 0.1150989646366D+00 0.1177506741909D+00 0.1204623780676D+00 0.1232353944021D+00 + 0.1260710688845D+00 0.1289707752849D+00 0.1319359159864D+00 0.1349679225270D+00 + 0.1380682561490D+00 0.1412384083570D+00 0.1444799014844D+00 0.1477942892678D+00 + 0.1511831574303D+00 0.1546481242725D+00 0.1581908412731D+00 0.1618129936965D+00 + 0.1655163012104D+00 0.1693025185104D+00 0.1731734359544D+00 0.1771308802047D+00 + 0.1811767148790D+00 0.1853128412094D+00 0.1895411987104D+00 0.1938637658552D+00 + 0.1982825607598D+00 0.2027996418767D+00 0.2074171086957D+00 0.2121371024533D+00 + 0.2169618068509D+00 0.2218934487801D+00 0.2269342990569D+00 0.2320866731634D+00 + 0.2373529319974D+00 0.2427354826295D+00 0.2482367790682D+00 0.2538593230323D+00 + 0.2596056647304D+00 0.2654784036474D+00 0.2714801893389D+00 0.2776137222308D+00 + 0.2838817544268D+00 0.2902870905217D+00 0.2968325884206D+00 0.3035211601645D+00 + 0.3103557727607D+00 0.3173394490192D+00 0.3244752683937D+00 0.3317663678273D+00 + 0.3392159426028D+00 0.3468272471962D+00 0.3546035961349D+00 0.3625483648577D+00 + 0.3706649905790D+00 0.3789569731540D+00 0.3874278759464D+00 0.3960813266976D+00 + 0.4049210183955D+00 0.4139507101454D+00 0.4231742280388D+00 0.4325954660221D+00 + 0.4422183867640D+00 0.4520470225197D+00 0.4620854759931D+00 0.4723379211946D+00 + 0.4828086042953D+00 0.4935018444749D+00 0.5044220347646D+00 0.5155736428822D+00 + 0.5269612120602D+00 0.5385893618646D+00 0.5504627890040D+00 0.5625862681281D+00 + 0.5749646526146D+00 0.5876028753427D+00 0.6005059494532D+00 0.6136789690924D+00 + 0.6271271101407D+00 0.6408556309226D+00 0.6548698728981D+00 0.6691752613333D+00 + 0.6837773059493D+00 0.6986816015479D+00 0.7138938286123D+00 0.7294197538810D+00 + 0.7452652308942D+00 0.7614362005101D+00 0.7779386913894D+00 0.7947788204470D+00 + 0.8119627932680D+00 0.8294969044866D+00 0.8473875381261D+00 0.8656411678975D+00 + 0.8842643574549D+00 0.9032637606047D+00 0.9226461214683D+00 0.9424182745935D+00 + 0.9625871450140D+00 0.9831597482541D+00 0.1004143190275D+01 0.1025544667362D+01 + 0.1047371465949D+01 0.1069630962376D+01 0.1092330622582D+01 0.1115478001718D+01 + 0.1139080743699D+01 0.1163146580667D+01 0.1187683332379D+01 0.1212698905512D+01 + 0.1238201292877D+01 0.1264198572546D+01 0.1290698906886D+01 0.1317710541494D+01 + 0.1345241804028D+01 0.1373301102944D+01 0.1401896926110D+01 0.1431037839321D+01 + 0.1460732484690D+01 0.1490989578921D+01 0.1521817911461D+01 0.1553226342519D+01 + 0.1585223800953D+01 0.1617819282025D+01 0.1651021845012D+01 0.1684840610666D+01 + 0.1719284758534D+01 0.1754363524114D+01 0.1790086195862D+01 0.1826462112019D+01 + 0.1863500657290D+01 0.1901211259327D+01 0.1939603385053D+01 0.1978686536792D+01 + 0.2018470248210D+01 0.2058964080068D+01 0.2100177615772D+01 0.2142120456722D+01 + 0.2184802217451D+01 0.2228232520549D+01 0.2272420991371D+01 0.2317377252521D+01 + 0.2363110918097D+01 0.2409631587718D+01 0.2456948840298D+01 0.2505072227579D+01 + 0.2554011267414D+01 0.2603775436800D+01 0.2654374164640D+01 0.2705816824249D+01 + 0.2758112725590D+01 0.2811271107225D+01 0.2865301128002D+01 0.2920211858443D+01 + 0.2976012271854D+01 0.3032711235135D+01 0.3090317499294D+01 0.3148839689666D+01 + 0.3208286295814D+01 0.3268665661132D+01 0.3329985972130D+01 0.3392255247403D+01 + 0.3455481326284D+01 0.3519671857166D+01 0.3584834285516D+01 0.3650975841540D+01 + 0.3718103527540D+01 0.3786224104928D+01 0.3855344080910D+01 0.3925469694842D+01 + 0.3996606904248D+01 0.4068761370505D+01 0.4141938444201D+01 0.4216143150155D+01 + 0.4291380172106D+01 0.4367653837082D+01 0.4444968099432D+01 0.4523326524540D+01 + 0.4602732272224D+01 0.4683188079814D+01 0.4764696244923D+01 0.4847258607911D+01 + 0.4930876534058D+01 0.5015550895439D+01 0.5101282052526D+01 0.5188069835504D+01 + 0.5275913525340D+01 0.5364811834582D+01 0.5454762887935D+01 0.5545764202593D+01 + 0.5637812668364D+01 0.5730904527600D+01 0.5825035354930D+01 0.5920200036841D+01 + 0.6016392751096D+01 0.6113606946037D+01 0.6211835319763D+01 0.6311069799237D+01 + 0.6411301519318D+01 0.6512520801757D+01 0.6614717134178D+01 0.6717879149076D+01 + 0.6821994602856D+01 0.6927050354936D+01 0.7033032346971D+01 0.7139925582197D+01 + 0.7247714104955D+01 0.7356380980422D+01 0.7465908274590D+01 0.7576277034522D+01 + 0.7687467268944D+01 0.7799457929201D+01 0.7912226890625D+01 0.8025750934367D+01 + 0.8140005729731D+01 0.8254965817070D+01 0.8370604591283D+01 0.8486894285977D+01 + 0.8603805958343D+01 0.8721309474805D+01 0.8839373497487D+01 0.8957965471583D+01 + 0.9077051613664D+01 0.9196596901005D+01 0.9316565061973D+01 0.9436918567578D+01 + 0.9557618624205D+01 0.9678625167647D+01 0.9799896858462D+01 0.9921391078761D+01 + 0.1004306393048D+02 0.1016487023519D+02 0.1028676353561D+02 0.1040869609872D+02 + 0.1053061892078D+02 0.1065248173410D+02 0.1077423301584D+02 0.1089581999877D+02 + 0.1101718868413D+02 0.1113828385666D+02 0.1125904910191D+02 0.1137942682584D+02 + 0.1149935827678D+02 0.1161878356999D+02 0.1173764171462D+02 0.1185587064341D+02 + 0.1197340724503D+02 0.1209018739920D+02 0.1220614601465D+02 0.1232121706995D+02 + 0.1243533365740D+02 0.1254842802982D+02 0.1266043165050D+02 0.1277127524634D+02 + 0.1288088886404D+02 0.1298920192971D+02 0.1309614331160D+02 0.1320164138629D+02 + 0.1330562410812D+02 0.1340801908212D+02 0.1350875364026D+02 0.1360775492116D+02 + 0.1370494995324D+02 0.1380026574132D+02 0.1389362935662D+02 0.1398496803019D+02 + 0.1407420924981D+02 0.1416128086012D+02 0.1424611116627D+02 0.1432862904069D+02 + 0.1440876403324D+02 0.1448644648440D+02 0.1456160764164D+02 0.1463417977876D+02 + 0.1470409631813D+02 0.1477129195572D+02 0.1483570278883D+02 0.1489726644633D+02 + 0.1495592222127D+02 0.1501161120574D+02 0.1506427642781D+02 0.1511386299027D+02 + 0.1516031821110D+02 0.1520359176531D+02 0.1524363582812D+02 0.1528040521898D+02 + 0.1531385754641D+02 0.1534395335325D+02 0.1537065626208D+02 0.1539393312048D+02 + 0.1541375414585D+02 0.1543009306950D+02 0.1544292727951D+02 0.1545223796216D+02 + 0.1545801024155D+02 0.1546023331695D+02 0.1545890059744D+02 0.1545400983365D+02 + 0.1544556324596D+02 0.1543356764880D+02 0.1541803457065D+02 0.1539898036925D+02 + 0.1537642634154D+02 0.1535039882796D+02 0.1532092931044D+02 0.1528805450387D+02 + 0.1525181644030D+02 0.1521226254557D+02 0.1516944570778D+02 0.1512342433713D+02 + 0.1507426241669D+02 0.1502202954350D+02 0.1496680095964D+02 0.1490865757272D+02 + 0.1484768596530D+02 0.1478397839284D+02 0.1471763276969D+02 0.1464875264266D+02 + 0.1457744715182D+02 0.1450383097801D+02 0.1442802427679D+02 0.1435015259838D+02 + 0.1427034679327D+02 0.1418874290321D+02 0.1410548203722D+02 0.1402071023247D+02 + 0.1393457829969D+02 0.1384724165293D+02 0.1375886012364D+02 0.1366959775879D+02 + 0.1357962260304D+02 0.1348910646488D+02 0.1339822466686D+02 0.1330715577980D+02 + 0.1321608134121D+02 0.1312518555808D+02 0.1303465499419D+02 0.1294467824221D+02 + 0.1285544558101D+02 0.1276714861841D+02 0.1267997991994D+02 0.1259413262403D+02 + 0.1250980004419D+02 0.1242717525885D+02 0.1234645068948D+02 0.1226781766776D+02 + 0.1219146599257D+02 0.1211758347770D+02 0.1204635549121D+02 0.1197796448732D+02 + 0.1191258953197D+02 0.1185040582321D+02 0.1179158420730D+02 0.1173629069208D+02 + 0.1168468595856D+02 0.1163692487226D+02 0.1159315599549D+02 0.1155352110209D+02 + 0.1151815469598D+02 0.1148718353503D+02 0.1146072616178D+02 0.1143889244247D+02 + 0.1142178311602D+02 0.1140948935454D+02 0.1140209233686D+02 0.1139966283678D+02 + 0.1140226082774D+02 0.1140993510519D+02 0.1142272292875D+02 0.1144064968524D+02 + 0.1146372857460D+02 0.1149196031991D+02 0.1152533290326D+02 0.1156382132880D+02 + 0.1160738741454D+02 0.1165597961412D+02 0.1170953287012D+02 0.1176796849989D+02 + 0.1183119411535D+02 0.1189910357777D+02 0.1197157698856D+02 0.1204848071701D+02 + 0.1212966746596D+02 0.1221497637600D+02 0.1230423316888D+02 0.1239725033077D+02 + 0.1249382733567D+02 0.1259375090926D+02 0.1269679533346D+02 0.1280272279167D+02 + 0.1291128375448D+02 0.1302221740584D+02 0.1313525210912D+02 0.1325010591253D+02 + 0.1336648709337D+02 0.1348409474012D+02 0.1360261937149D+02 0.1372174359123D+02 + 0.1384114277758D+02 0.1396048580566D+02 0.1407943580155D+02 0.1419765092608D+02 + 0.1431478518661D+02 0.1443048927478D+02 0.1454441142812D+02 0.1465619831308D+02 + 0.1476549592746D+02 0.1487195051928D+02 0.1497520951989D+02 0.1507492248828D+02 + 0.1517074206398D+02 0.1526232492551D+02 0.1534933275145D+02 0.1543143318112D+02 + 0.1550830077157D+02 0.1557961794797D+02 0.1564507594396D+02 0.1570437572881D+02 + 0.1575722891823D+02 0.1580335866539D+02 0.1584250052899D+02 0.1587440331524D+02 + 0.1589882989033D+02 0.1591555796049D+02 0.1592438081630D+02 0.1592510803844D+02 + 0.1591756616179D+02 0.1590159929512D+02 0.1587706969359D+02 0.1584385828154D+02 + 0.1580186512290D+02 0.1575100983720D+02 0.1569123195871D+02 0.1562249123695D+02 + 0.1554476787665D+02 0.1545806271560D+02 0.1536239733893D+02 0.1525781412875D+02 + 0.1514437624809D+02 0.1502216755847D+02 0.1489129247063D+02 0.1475187572813D+02 + 0.1460406212401D+02 0.1444801615062D+02 0.1428392158332D+02 0.1411198099888D+02 + 0.1393241522964D+02 0.1374546275490D+02 0.1355137903119D+02 0.1335043576333D+02 + 0.1314292011864D+02 0.1292913388664D+02 0.1270939258714D+02 0.1248402452972D+02 + 0.1225336982785D+02 0.1201777937125D+02 0.1177761376017D+02 0.1153324220569D+02 + 0.1128504140014D+02 0.1103339436205D+02 0.1077868926027D+02 0.1052131822179D+02 + 0.1026167612835D+02 0.1000015940663D+02 0.9737164817090D+01 0.9473088246666D+01 + 0.9208323510392D+01 0.8943261167138D+01 0.8678287354606D+01 0.8413782648689D+01 + 0.8150120952198D+01 0.7887668417870D+01 0.7626782410424D+01 0.7367810512255D+01 + 0.7111089577147D+01 0.6856944836175D+01 0.6605689059620D+01 0.6357621778576D+01 + 0.6113028569417D+01 0.5872180404071D+01 0.5635333068605D+01 0.5402726652271D+01 + 0.5174585108689D+01 0.4951115890458D+01 0.4732509658013D+01 0.4518940063093D+01 + 0.4310563606744D+01 0.4107519571314D+01 0.3909930025455D+01 0.3717899900701D+01 + 0.3531517137795D+01 0.3350852900521D+01 0.3175961854415D+01 0.3006882507418D+01 + 0.2843637609166D+01 0.2686234605393D+01 0.2534666143602D+01 0.2388910626020D+01 + 0.2248932805599D+01 0.2114684420764D+01 0.1986104864410D+01 0.1863121882663D+01 + 0.1745652298807D+01 0.1633602757816D+01 0.1526870486911D+01 0.1425344067651D+01 + 0.1328904215091D+01 0.1237424559686D+01 0.1150772427713D+01 0.1068809616148D+01 + 0.9913931580887D+00 0.9183760750247D+00 0.8496081124357D+00 0.7849364554513D+00 + 0.7242064215293D+00 0.6672621273712D+00 0.6139471275574D+00 0.5641050226618D+00 + 0.5175800348878D+00 0.4742175495586D+00 0.4338646210828D+00 0.3963704423129D+00 + 0.3615867764997D+00 0.3293683513354D+00 0.2995732148544D+00 0.2720630532321D+00 + 0.2467034707815D+00 0.2233642326902D+00 0.2019194712763D+00 0.1822478567499D+00 + 0.1642327336682D+00 0.1477622244444D+00 0.1327293014336D+00 0.1190318292464D+00 + 0.1065725790655D+00 0.9525921682581D-01 0.8500426719540D-01 0.7572505534570D-01 + 0.6734362852856D-01 0.5978665949119D-01 0.5298533375213D-01 0.4687522273735D-01 + 0.4139614473480D-01 0.3649201557103D-01 0.3211069084453D-01 0.2820380147099D-01 + 0.2472658420543D-01 0.2163770870794D-01 0.1889910261478D-01 0.1647577596641D-01 + 0.1433564623066D-01 0.1244936504301D-01 0.1079014767040D-01 0.9333606088531D-02 + 0.8057586449521D-02 0.6942011605538D-02 0.5968729247262D-02 0.5121366113861D-02 + 0.4385188634413D-02 0.3746970269980D-02 0.3194865741265D-02 0.2718292249293D-02 + 0.2307817726031D-02 0.1955056088404D-02 0.1652569412799D-02 0.1393776897745D-02 + 0.1172870439853D-02 0.9847366120634D-03 0.8248848034661D-03 0.6893812560569D-03 + 0.5747887154298D-03 0.4781113990982D-03 0.3967449774979D-03 0.3284312582634D-03 + 0.2712172636576D-03 0.2234183935981D-03 0.1835853721449D-03 0.1504746831443D-03 + 0.1230222105786D-03 0.1003198106540D-03 0.8159455542106D-04 0.6619040144209D-04 + 0.5355205138722D-04 0.4321079120846D-04 0.3477210045803D-04 0.2790484818898D-04 + 0.2233190152246D-04 0.1782198824118D-04 0.1418266855132D-04 0.1125428434880D-04 + 0.8904766856498D-05 0.7025195313453D-05 0.5526010459652D-05 0.4333796852085D-05 + 0.3388557563637D-05 0.2641413563333D-05 0.2052668070841D-05 0.1590183444862D-05 + 0.1228024735392D-05 0.9453299398051D-06 0.7253722919424D-06 0.5547846237125D-06 + 0.4229200131023D-06 0.3213266143727D-06 0.2433177983142D-06 0.1836215545666D-06 + 0.1380955642703D-06 0.1034964778941D-06 0.7729376586493D-07 0.5752008209307D-07 + 0.4265142355148D-07 0.3151151106808D-07 0.2319578320089D-07 0.1701120974173D-07 + 0.1242881489534D-07 0.9046371073667D-08 0.6559198960071D-08 0.4737402476978D-08 + 0.3408191153158D-08 0.2442208093542D-08 0.1742998768590D-08 0.1238932286038D-08 + 0.8770296193333D-09 0.6182683290111D-09 0.4340255982013D-09 0.3033950772413D-09 + 0.2111715589818D-09 0.1463438404983D-09 0.1009726185101D-09 0.6935859066118D-10 + 0.4742849271888D-10 0.3228488955626D-10 0.2187547853929D-10 0.1475212866899D-10 + 0.9901881750809D-11 0.6613860882122D-11 0.4396644350124D-11 0.2908650000322D-11 + 0.1914873227728D-11 0.1254415200484D-11 0.8176535094916D-12 0.5302708391854D-12 + 0.3421370551355D-12 0.2196087836422D-12 0.1402231518601D-12 0.8906014768602D-13 + LSMS: xx z= 26. xvalws= 2.77074 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728402963D+02-0.5199725117641D+02-0.5199721792578D+02-0.5199718427293D+02 +-0.5199715021300D+02-0.5199711574107D+02-0.5199708085214D+02-0.5199704554119D+02 +-0.5199700980309D+02-0.5199697363268D+02-0.5199693702474D+02-0.5199689997397D+02 +-0.5199686247500D+02-0.5199682452243D+02-0.5199678611076D+02-0.5199674723444D+02 +-0.5199670788785D+02-0.5199666806529D+02-0.5199662776101D+02-0.5199658696918D+02 +-0.5199654568390D+02-0.5199650389922D+02-0.5199646160907D+02-0.5199641880734D+02 +-0.5199637548785D+02-0.5199633164434D+02-0.5199628727046D+02-0.5199624235979D+02 +-0.5199619690585D+02-0.5199615090205D+02-0.5199610434176D+02-0.5199605721822D+02 +-0.5199600952464D+02-0.5199596125410D+02-0.5199591239964D+02-0.5199586295419D+02 +-0.5199581291060D+02-0.5199576226162D+02-0.5199571099994D+02-0.5199565911815D+02 +-0.5199560660874D+02-0.5199555346411D+02-0.5199549967658D+02-0.5199544523837D+02 +-0.5199539014162D+02-0.5199533437834D+02-0.5199527794048D+02-0.5199522081989D+02 +-0.5199516300828D+02-0.5199510449731D+02-0.5199504527851D+02-0.5199498534331D+02 +-0.5199492468306D+02-0.5199486328897D+02-0.5199480115217D+02-0.5199473826367D+02 +-0.5199467461436D+02-0.5199461019507D+02-0.5199454499646D+02-0.5199447900910D+02 +-0.5199441222344D+02-0.5199434462984D+02-0.5199427621849D+02-0.5199420697954D+02 +-0.5199413690295D+02-0.5199406597858D+02-0.5199399419618D+02-0.5199392154537D+02 +-0.5199384801563D+02-0.5199377359634D+02-0.5199369827672D+02-0.5199362204589D+02 +-0.5199354489281D+02-0.5199346680633D+02-0.5199338777515D+02-0.5199330778784D+02 +-0.5199322683282D+02-0.5199314489839D+02-0.5199306197270D+02-0.5199297804374D+02 +-0.5199289309939D+02-0.5199280712733D+02-0.5199272011516D+02-0.5199263205027D+02 +-0.5199254291992D+02-0.5199245271123D+02-0.5199236141114D+02-0.5199226900644D+02 +-0.5199217548376D+02-0.5199208082958D+02-0.5199198503019D+02-0.5199188807175D+02 +-0.5199178994021D+02-0.5199169062139D+02-0.5199159010092D+02-0.5199148836424D+02 +-0.5199138539665D+02-0.5199128118323D+02-0.5199117570892D+02-0.5199106895845D+02 +-0.5199096091638D+02-0.5199085156707D+02-0.5199074089471D+02-0.5199062888326D+02 +-0.5199051551654D+02-0.5199040077813D+02-0.5199028465143D+02-0.5199016711964D+02 +-0.5199004816574D+02-0.5198992777253D+02-0.5198980592257D+02-0.5198968259824D+02 +-0.5198955778170D+02-0.5198943145487D+02-0.5198930359948D+02-0.5198917419701D+02 +-0.5198904322875D+02-0.5198891067574D+02-0.5198877651879D+02-0.5198864073848D+02 +-0.5198850331517D+02-0.5198836422896D+02-0.5198822345972D+02-0.5198808098707D+02 +-0.5198793679039D+02-0.5198779084882D+02-0.5198764314123D+02-0.5198749364622D+02 +-0.5198734234217D+02-0.5198718920716D+02-0.5198703421905D+02-0.5198687735537D+02 +-0.5198671859343D+02-0.5198655791024D+02-0.5198639528254D+02-0.5198623068679D+02 +-0.5198606409915D+02-0.5198589549550D+02-0.5198572485143D+02-0.5198555214224D+02 +-0.5198537734293D+02-0.5198520042816D+02-0.5198502137235D+02-0.5198484014954D+02 +-0.5198465673351D+02-0.5198447109769D+02-0.5198428321519D+02-0.5198409305883D+02 +-0.5198390060104D+02-0.5198370581396D+02-0.5198350866939D+02-0.5198330913876D+02 +-0.5198310719319D+02-0.5198290280341D+02-0.5198269593983D+02-0.5198248657249D+02 +-0.5198227467106D+02-0.5198206020484D+02-0.5198184314277D+02-0.5198162345340D+02 +-0.5198140110492D+02-0.5198117606510D+02-0.5198094830136D+02-0.5198071778068D+02 +-0.5198048446968D+02-0.5198024833454D+02-0.5198000934107D+02-0.5197976745462D+02 +-0.5197952264015D+02-0.5197927486220D+02-0.5197902408485D+02-0.5197877027176D+02 +-0.5197851338615D+02-0.5197825339081D+02-0.5197799024804D+02-0.5197772391971D+02 +-0.5197745436723D+02-0.5197718155151D+02-0.5197690543304D+02-0.5197662597177D+02 +-0.5197634312720D+02-0.5197605685833D+02-0.5197576712367D+02-0.5197547388122D+02 +-0.5197517708846D+02-0.5197487670236D+02-0.5197457267938D+02-0.5197426497542D+02 +-0.5197395354589D+02-0.5197363834563D+02-0.5197331932893D+02-0.5197299644952D+02 +-0.5197266966059D+02-0.5197233891476D+02-0.5197200416404D+02-0.5197166535990D+02 +-0.5197132245319D+02-0.5197097539418D+02-0.5197062413252D+02-0.5197026861727D+02 +-0.5196990879687D+02-0.5196954461909D+02-0.5196917603112D+02-0.5196880297948D+02 +-0.5196842541005D+02-0.5196804326804D+02-0.5196765649801D+02-0.5196726504383D+02 +-0.5196686884871D+02-0.5196646785514D+02-0.5196606200494D+02-0.5196565123919D+02 +-0.5196523549829D+02-0.5196481472189D+02-0.5196438884890D+02-0.5196395781753D+02 +-0.5196352156518D+02-0.5196308002855D+02-0.5196263314350D+02-0.5196218084518D+02 +-0.5196172306789D+02-0.5196125974518D+02-0.5196079080977D+02-0.5196031619354D+02 +-0.5195983582758D+02-0.5195934964214D+02-0.5195885756657D+02-0.5195835952942D+02 +-0.5195785545834D+02-0.5195734528011D+02-0.5195682892060D+02-0.5195630630481D+02 +-0.5195577735679D+02-0.5195524199969D+02-0.5195470015573D+02-0.5195415174616D+02 +-0.5195359669127D+02-0.5195303491041D+02-0.5195246632192D+02-0.5195189084316D+02 +-0.5195130839046D+02-0.5195071887917D+02-0.5195012222358D+02-0.5194951833693D+02 +-0.5194890713143D+02-0.5194828851819D+02-0.5194766240726D+02-0.5194702870759D+02 +-0.5194638732701D+02-0.5194573817222D+02-0.5194508114882D+02-0.5194441616121D+02 +-0.5194374311266D+02-0.5194306190525D+02-0.5194237243986D+02-0.5194167461616D+02 +-0.5194096833262D+02-0.5194025348643D+02-0.5193952997356D+02-0.5193879768871D+02 +-0.5193805652527D+02-0.5193730637535D+02-0.5193654712973D+02-0.5193577867788D+02 +-0.5193500090790D+02-0.5193421370652D+02-0.5193341695911D+02-0.5193261054963D+02 +-0.5193179436061D+02-0.5193096827316D+02-0.5193013216694D+02-0.5192928592013D+02 +-0.5192842940944D+02-0.5192756251004D+02-0.5192668509561D+02-0.5192579703828D+02 +-0.5192489820860D+02-0.5192398847556D+02-0.5192306770652D+02-0.5192213576726D+02 +-0.5192119252189D+02-0.5192023783287D+02-0.5191927156096D+02-0.5191829356524D+02 +-0.5191730370307D+02-0.5191630183005D+02-0.5191528780001D+02-0.5191426146503D+02 +-0.5191322267532D+02-0.5191217127930D+02-0.5191110712354D+02-0.5191003005272D+02 +-0.5190893990959D+02-0.5190783653503D+02-0.5190671976795D+02-0.5190558944528D+02 +-0.5190444540195D+02-0.5190328747089D+02-0.5190211548297D+02-0.5190092926700D+02 +-0.5189972864968D+02-0.5189851345560D+02-0.5189728350719D+02-0.5189603862472D+02 +-0.5189477862625D+02-0.5189350332759D+02-0.5189221254235D+02-0.5189090608179D+02 +-0.5188958375491D+02-0.5188824536834D+02-0.5188689072635D+02-0.5188551963080D+02 +-0.5188413188114D+02-0.5188272727435D+02-0.5188130560492D+02-0.5187986666482D+02 +-0.5187841024347D+02-0.5187693612772D+02-0.5187544410178D+02-0.5187393394724D+02 +-0.5187240544300D+02-0.5187085836524D+02-0.5186929248740D+02-0.5186770758014D+02 +-0.5186610341132D+02-0.5186447974591D+02-0.5186283634606D+02-0.5186117297093D+02 +-0.5185948937678D+02-0.5185778531685D+02-0.5185606054135D+02-0.5185431479744D+02 +-0.5185254782916D+02-0.5185075937741D+02-0.5184894917991D+02-0.5184711697117D+02 +-0.5184526248242D+02-0.5184338544160D+02-0.5184148557330D+02-0.5183956259875D+02 +-0.5183761623572D+02-0.5183564619854D+02-0.5183365219802D+02-0.5183163394142D+02 +-0.5182959113240D+02-0.5182752347098D+02-0.5182543065350D+02-0.5182331237255D+02 +-0.5182116831697D+02-0.5181899817174D+02-0.5181680161800D+02-0.5181457833297D+02 +-0.5181232798987D+02-0.5181005025795D+02-0.5180774480235D+02-0.5180541128413D+02 +-0.5180304936016D+02-0.5180065868310D+02-0.5179823890134D+02-0.5179578965895D+02 +-0.5179331059564D+02-0.5179080134665D+02-0.5178826154277D+02-0.5178569081025D+02 +-0.5178308877073D+02-0.5178045504121D+02-0.5177778923399D+02-0.5177509095659D+02 +-0.5177235981171D+02-0.5176959539717D+02-0.5176679730585D+02-0.5176396512563D+02 +-0.5176109843930D+02-0.5175819682457D+02-0.5175525985390D+02-0.5175228709457D+02 +-0.5174927810849D+02-0.5174623245221D+02-0.5174314967682D+02-0.5174002932792D+02 +-0.5173687094551D+02-0.5173367406395D+02-0.5173043821187D+02-0.5172716291215D+02 +-0.5172384768177D+02-0.5172049203182D+02-0.5171709546736D+02-0.5171365748739D+02 +-0.5171017758479D+02-0.5170665524617D+02-0.5170308995189D+02-0.5169948117592D+02 +-0.5169582838578D+02-0.5169213104249D+02-0.5168838860043D+02-0.5168460050732D+02 +-0.5168076620412D+02-0.5167688512494D+02-0.5167295669696D+02-0.5166898034036D+02 +-0.5166495546822D+02-0.5166088148646D+02-0.5165675779371D+02-0.5165258378128D+02 +-0.5164835883303D+02-0.5164408232529D+02-0.5163975362681D+02-0.5163537209858D+02 +-0.5163093709386D+02-0.5162644795799D+02-0.5162190402831D+02-0.5161730463415D+02 +-0.5161264909661D+02-0.5160793672858D+02-0.5160316683457D+02-0.5159833871062D+02 +-0.5159345164422D+02-0.5158850491424D+02-0.5158349779076D+02-0.5157842953502D+02 +-0.5157329939929D+02-0.5156810662682D+02-0.5156285045165D+02-0.5155753009857D+02 +-0.5155214478300D+02-0.5154669371088D+02-0.5154117607855D+02-0.5153559107266D+02 +-0.5152993787006D+02-0.5152421563767D+02-0.5151842353238D+02-0.5151256070096D+02 +-0.5150662627991D+02-0.5150061939535D+02-0.5149453916296D+02-0.5148838468777D+02 +-0.5148215506412D+02-0.5147584937554D+02-0.5146946669454D+02-0.5146300608264D+02 +-0.5145646659012D+02-0.5144984725596D+02-0.5144314710771D+02-0.5143636516137D+02 +-0.5142950042123D+02-0.5142255187982D+02-0.5141551851771D+02-0.5140839930344D+02 +-0.5140119319335D+02-0.5139389913149D+02-0.5138651604948D+02-0.5137904286634D+02 +-0.5137147848843D+02-0.5136382180931D+02-0.5135607170955D+02-0.5134822705665D+02 +-0.5134028670491D+02-0.5133224949527D+02-0.5132411425521D+02-0.5131587979859D+02 +-0.5130754492555D+02-0.5129910842232D+02-0.5129056906116D+02-0.5128192560017D+02 +-0.5127317678315D+02-0.5126432133956D+02-0.5125535798425D+02-0.5124628541740D+02 +-0.5123710232443D+02-0.5122780737574D+02-0.5121839922671D+02-0.5120887651745D+02 +-0.5119923787276D+02-0.5118948190193D+02-0.5117960719865D+02-0.5116961234085D+02 +-0.5115949589056D+02-0.5114925639380D+02-0.5113889238044D+02-0.5112840236408D+02 +-0.5111778484188D+02-0.5110703829447D+02-0.5109616118579D+02-0.5108515196301D+02 +-0.5107400905631D+02-0.5106273087889D+02-0.5105131582667D+02-0.5103976227836D+02 +-0.5102806859514D+02-0.5101623312071D+02-0.5100425418105D+02-0.5099213008436D+02 +-0.5097985912091D+02-0.5096743956297D+02-0.5095486966464D+02-0.5094214766176D+02 +-0.5092927177183D+02-0.5091624019384D+02-0.5090305110822D+02-0.5088970267672D+02 +-0.5087619304230D+02-0.5086252032900D+02-0.5084868264193D+02-0.5083467806710D+02 +-0.5082050467136D+02-0.5080616050232D+02-0.5079164358822D+02-0.5077695193792D+02 +-0.5076208354076D+02-0.5074703636655D+02-0.5073180836542D+02-0.5071639746782D+02 +-0.5070080158445D+02-0.5068501860613D+02-0.5066904640389D+02-0.5065288282874D+02 +-0.5063652571181D+02-0.5061997286414D+02-0.5060322207678D+02-0.5058627112067D+02 +-0.5056911774669D+02-0.5055175968555D+02-0.5053419464788D+02-0.5051642032411D+02 +-0.5049843438458D+02-0.5048023447945D+02-0.5046181823877D+02-0.5044318327247D+02 +-0.5042432717038D+02-0.5040524750226D+02-0.5038594181787D+02-0.5036640764694D+02 +-0.5034664249930D+02-0.5032664386488D+02-0.5030640921379D+02-0.5028593599640D+02 +-0.5026522164341D+02-0.5024426356594D+02-0.5022305915564D+02-0.5020160578474D+02 +-0.5017990080623D+02-0.5015794155393D+02-0.5013572534263D+02-0.5011324946826D+02 +-0.5009051120796D+02-0.5006750782030D+02-0.5004423654542D+02-0.5002069460521D+02 +-0.4999687920344D+02-0.4997278752603D+02-0.4994841674120D+02-0.4992376399966D+02 +-0.4989882643488D+02-0.4987360116327D+02-0.4984808528443D+02-0.4982227588141D+02 +-0.4979617002094D+02-0.4976976475371D+02-0.4974305711462D+02-0.4971604412309D+02 +-0.4968872278335D+02-0.4966109008469D+02-0.4963314300185D+02-0.4960487849528D+02 +-0.4957629351145D+02-0.4954738498327D+02-0.4951814983035D+02-0.4948858495939D+02 +-0.4945868726453D+02-0.4942845362775D+02-0.4939788091919D+02-0.4936696599757D+02 +-0.4933570571061D+02-0.4930409689534D+02-0.4927213637859D+02-0.4923982097740D+02 +-0.4920714749935D+02-0.4917411274309D+02-0.4914071349870D+02-0.4910694654815D+02 +-0.4907280866573D+02-0.4903829661848D+02-0.4900340716666D+02-0.4896813706420D+02 +-0.4893248305909D+02-0.4889644189392D+02-0.4886001030623D+02-0.4882318502909D+02 +-0.4878596279141D+02-0.4874834031849D+02-0.4871031433244D+02-0.4867188155262D+02 +-0.4863303869609D+02-0.4859378247804D+02-0.4855410961222D+02-0.4851401681140D+02 +-0.4847350078774D+02-0.4843255825325D+02-0.4839118592018D+02-0.4834938050138D+02 +-0.4830713871075D+02-0.4826445726356D+02-0.4822133287682D+02-0.4817776226967D+02 +-0.4813374216365D+02-0.4808926928306D+02-0.4804434035526D+02-0.4799895211091D+02 +-0.4795310128431D+02-0.4790678461358D+02-0.4785999884093D+02-0.4781274071282D+02 +-0.4776500698020D+02-0.4771679439861D+02-0.4766809972836D+02-0.4761891973461D+02 +-0.4756925118748D+02-0.4751909086208D+02-0.4746843553857D+02-0.4741728200213D+02 +-0.4736562704295D+02-0.4731346745620D+02-0.4726080004188D+02-0.4720762160479D+02 +-0.4715392895431D+02-0.4709971890425D+02-0.4704498827268D+02-0.4698973388163D+02 +-0.4693395255690D+02-0.4687764112767D+02-0.4682079642628D+02-0.4676341528777D+02 +-0.4670549454962D+02-0.4664703105122D+02-0.4658802163351D+02-0.4652846313853D+02 +-0.4646835240891D+02-0.4640768628735D+02-0.4634646161617D+02-0.4628467523671D+02 +-0.4622232398885D+02-0.4615940471037D+02-0.4609591423645D+02-0.4603184939910D+02 +-0.4596720702657D+02-0.4590198394276D+02-0.4583617696675D+02-0.4576978291218D+02 +-0.4570279858676D+02-0.4563522079176D+02-0.4556704632159D+02-0.4549827196328D+02 +-0.4542889449617D+02-0.4535891069156D+02-0.4528831731237D+02-0.4521711111299D+02 +-0.4514528883912D+02-0.4507284722768D+02-0.4499978300686D+02-0.4492609289624D+02 +-0.4485177360700D+02-0.4477682184233D+02-0.4470123429783D+02-0.4462500766219D+02 +-0.4454813861790D+02-0.4447062384219D+02-0.4439246000814D+02-0.4431364378589D+02 +-0.4423417184413D+02-0.4415404085174D+02-0.4407324747964D+02-0.4399178840285D+02 +-0.4390966030283D+02-0.4382685986996D+02-0.4374338380636D+02-0.4365922882888D+02 +-0.4357439167239D+02-0.4348886909331D+02-0.4340265787340D+02-0.4331575482384D+02 +-0.4322815678953D+02-0.4313986065369D+02-0.4305086334268D+02-0.4296116183110D+02 +-0.4287075314713D+02-0.4277963437808D+02-0.4268780267613D+02-0.4259525526436D+02 +-0.4250198944278D+02-0.4240800259471D+02-0.4231329219311D+02-0.4221785580702D+02 +-0.4212169110814D+02-0.4202479587724D+02-0.4192716801066D+02-0.4182880552657D+02 +-0.4172970657123D+02-0.4162986942478D+02-0.4152929250699D+02-0.4142797438248D+02 +-0.4132591376546D+02-0.4122310952415D+02-0.4111956068435D+02-0.4101526643252D+02 +-0.4091022611799D+02-0.4080443925436D+02-0.4069790551997D+02-0.4059062475744D+02 +-0.4048259697200D+02-0.4037382232884D+02-0.4026430114924D+02-0.4015403390548D+02 +-0.4004302121449D+02-0.3993126383031D+02-0.3981876263529D+02-0.3970551863000D+02 +-0.3959153292214D+02-0.3947680671418D+02-0.3936134129010D+02-0.3924513800125D+02 +-0.3912819825140D+02-0.3901052348125D+02-0.3889211515259D+02-0.3877297473220D+02 +-0.3865310367583D+02-0.3853250341248D+02-0.3841117532917D+02-0.3828912075654D+02 +-0.3816634095549D+02-0.3804283710513D+02-0.3791861029232D+02-0.3779366150300D+02 +-0.3766799161555D+02-0.3754160139636D+02-0.3741449149782D+02-0.3728666245883D+02 +-0.3715811470790D+02-0.3702884856900D+02-0.3689886427010D+02-0.3676816195438D+02 +-0.3663674169408D+02-0.3650460350690D+02-0.3637174737474D+02-0.3623817326473D+02 +-0.3610388115218D+02-0.3596887104531D+02-0.3583314301154D+02-0.3569669720495D+02 +-0.3555953389464D+02-0.3542165349386D+02-0.3528305658922D+02-0.3514374397011D+02 +-0.3500371665774D+02-0.3486297593358D+02-0.3472152336690D+02-0.3457936084122D+02 +-0.3443649057928D+02-0.3429291516643D+02-0.3414863757211D+02-0.3400366116934D+02 +-0.3385798975190D+02-0.3371162754922D+02-0.3356457923876D+02-0.3341684995570D+02 +-0.3326844530007D+02-0.3311937134098D+02-0.3296963461820D+02-0.3281924214079D+02 +-0.3266820138293D+02-0.3251652027694D+02-0.3236420720350D+02-0.3221127097903D+02 +-0.3205772084042D+02-0.3190356642710D+02-0.3174881776049D+02-0.3159348522098D+02 +-0.3143757952257D+02-0.3128111168511D+02-0.3112409300454D+02-0.3096653502093D+02 +-0.3080844948479D+02-0.3064984832153D+02-0.3049074359439D+02-0.3033114746593D+02 +-0.3017107215833D+02-0.3001052991254D+02-0.2984953294675D+02-0.2968809341400D+02 +-0.2952622335948D+02-0.2936393467762D+02-0.2920123906907D+02-0.2903814799805D+02 +-0.2887467265011D+02-0.2871082389066D+02-0.2854661222446D+02-0.2838204775647D+02 +-0.2821714015409D+02-0.2805189861135D+02-0.2788633181514D+02-0.2772044791378D+02 +-0.2755425448842D+02-0.2738775852723D+02-0.2722096640307D+02-0.2705388385454D+02 +-0.2688651597109D+02-0.2671886718221D+02-0.2655094125117D+02-0.2638274127348D+02 +-0.2621426968047D+02-0.2604552824823D+02-0.2587651811214D+02-0.2570723978730D+02 +-0.2553769319514D+02-0.2536787769632D+02-0.2519779213021D+02-0.2502743486110D+02 +-0.2485680383129D+02-0.2468589662112D+02-0.2451471051601D+02-0.2434324258050D+02 +-0.2417148973924D+02-0.2399944886481D+02-0.2382711687194D+02-0.2365449081810D+02 +-0.2348156800981D+02-0.2330834611404D+02-0.2313482327422D+02-0.2296099822964D+02 +-0.2278687043744D+02-0.2261244019567D+02-0.2243770876615D+02-0.2226267849517D+02 +-0.2208735293014D+02-0.2191173693001D+02-0.2173583676674D+02-0.2155966021537D+02 +-0.2138321662948D+02-0.2120651699903D+02-0.2102957398727D+02-0.2085240194340D+02 +-0.2067501688787D+02-0.2049743646710D+02-0.2031967987514D+02-0.2014176773999D+02 +-0.1996372197331D+02-0.1978556558301D+02-0.1960732244950D+02-0.1942901706755D+02 +-0.1925067425750D+02-0.1907231885074D+02-0.1889397535633D+02-0.1871566761696D+02 +-0.1853741846374D+02-0.1835924938052D+02-0.1818118018868D+02-0.1800322876380D+02 +-0.1782541079491D+02-0.1764773959582D+02-0.1747022597686D+02-0.1729287818264D+02 +-0.1711570189939D+02-0.1693870033244D+02-0.1676187435187D+02-0.1658522270158D+02 +-0.1640874226459D+02-0.1623242837596D+02-0.1605627517269D+02-0.1588027596970D+02 +-0.1570442365062D+02-0.1552871106216D+02-0.1535313140208D+02-0.1517767859145D+02 +-0.1500234762341D+02-0.1482713488228D+02-0.1465203842815D+02-0.1447705824363D+02 +-0.1430219644106D+02-0.1412745742929D+02-0.1395284804054D+02-0.1377837761854D+02 +-0.1360405806987D+02-0.1342990388081D+02-0.1325593210249D+02-0.1308216230731D+02 +-0.1290861651951D+02-0.1273531912305D+02-0.1256229674959D+02-0.1238957814960D+02 +-0.1221719404907D+02-0.1204517699438D+02-0.1187356118783D+02-0.1170238231558D+02 +-0.1153167737042D+02-0.1136148447069D+02-0.1119184267735D+02-0.1102279181034D+02 +-0.1085437226576D+02-0.1068662483495D+02-0.1051959052659D+02-0.1035331039265D+02 +-0.1018782535928D+02-0.1002317606321D+02-0.9859402694342D+01-0.9696544845323D+01 +-0.9534641368482D+01-0.9373730240659D+01-0.9213848436346D+01-0.9055031809511D+01 +-0.8897314984394D+01-0.8740731255549D+01-0.8585312497336D+01-0.8431089083029D+01 +-0.8278089813661D+01-0.8126341856676D+01-0.7975870694439D+01-0.7826700082584D+01 +-0.7678852018171D+01-0.7532346717566D+01-0.7387202603932D+01-0.7243436304187D+01 +-0.7101062655233D+01-0.6960094719270D+01-0.6820543807924D+01-0.6682419514939D+01 +-0.6545729757123D+01-0.6410480823229D+01-0.6276677430423D+01-0.6144322787958D+01 +-0.6013418667669D+01-0.5883965480867D+01-0.5755962361193D+01-0.5629407252975D+01 +-0.5504297004604D+01-0.5380627466436D+01-0.5258393592702D+01-0.5137589546863D+01 +-0.5018208809882D+01-0.4900244290793D+01-0.4783688438971D+01-0.4668533357470D+01 +-0.4554770916754D+01-0.4442392868124D+01-0.4331390956131D+01-0.4221757029192D+01 +-0.4113483147635D+01-0.4006561688322D+01-0.3900985445011D+01-0.3796747723533D+01 +-0.3693842430876D+01-0.3592264157211D+01-0.3492008249906D+01-0.3393070878541D+01 +-0.3295449089976D+01-0.3199140852531D+01-0.3104145088414D+01-0.3010461693592D+01 +-0.2918091544431D+01-0.2827036490592D+01-0.2737299333835D+01-0.2648883792669D+01 +-0.2561794453010D+01-0.2476036705393D+01-0.2391616669610D+01-0.2308541108029D+01 +-0.2226817329318D+01-0.2146453084634D+01-0.2067456458802D+01-0.1989835759339D+01 +-0.1913599406514D+01-0.1838755827812D+01-0.1765313360391D+01-0.1693280165020D+01 +-0.1622664154978D+01-0.1553472943063D+01-0.1485713809518D+01-0.1419393693186D+01 +-0.1354519207570D+01-0.1291096682842D+01-0.1229132234097D+01-0.1168631855453D+01 +-0.1109601538882D+01-0.1052047416050D+01-0.9959759208814D+00-0.9413939701484D+00 +-0.8883091590719D+00-0.8367299687430D+00-0.7866659821253D+00-0.7381281054637D+00 +-0.6911287920896D+00-0.6456822658698D+00-0.6018047418553D+00-0.5595146420441D+00 +-0.5188328045500D+00-0.4797826848498D+00-0.4423905481512D+00-0.4066856522662D+00 +-0.3727004206897D+00-0.3404706058472D+00-0.3100354427093D+00-0.2814377931599D+00 +-0.2547240189175D+00 + 0.0000000000000D+00 + 1012 0.2770741520224D+01 + 0.2150927949039D-04 0.2202124536575D-04 0.2254539478646D-04 0.2308201760180D-04 + 0.2363141055333D-04 0.2419387743865D-04 0.2476972927906D-04 0.2535928449121D-04 + 0.2596286906285D-04 0.2658081673262D-04 0.2721346917432D-04 0.2786117618535D-04 + 0.2852429587973D-04 0.2920319488569D-04 0.2989824854795D-04 0.3060984113473D-04 + 0.3133836604977D-04 0.3208422604934D-04 0.3284783346437D-04 0.3362961042788D-04 + 0.3442998910781D-04 0.3524941194536D-04 0.3608833189898D-04 0.3694721269416D-04 + 0.3782652907911D-04 0.3872676708658D-04 0.3964842430179D-04 0.4059201013679D-04 + 0.4155804611131D-04 0.4254706614023D-04 0.4355961682789D-04 0.4459625776943D-04 + 0.4565756185917D-04 0.4674411560639D-04 0.4785651945856D-04 0.4899538813222D-04 + 0.5016135095172D-04 0.5135505219602D-04 0.5257715145361D-04 0.5382832398596D-04 + 0.5510926109951D-04 0.5642067052648D-04 0.5776327681476D-04 0.5913782172693D-04 + 0.6054506464885D-04 0.6198578300785D-04 0.6346077270088D-04 0.6497084853274D-04 + 0.6651684466474D-04 0.6809961507398D-04 0.6972003402351D-04 0.7137899654355D-04 + 0.7307741892426D-04 0.7481623921999D-04 0.7659641776564D-04 0.7841893770513D-04 + 0.8028480553242D-04 0.8219505164534D-04 0.8415073091254D-04 0.8615292325379D-04 + 0.8820273423416D-04 0.9030129567206D-04 0.9244976626185D-04 0.9464933221109D-04 + 0.9690120789284D-04 0.9920663651351D-04 0.1015668907964D-03 0.1039832736813D-03 + 0.1064571190411D-03 0.1089897924148D-03 0.1115826917580D-03 0.1142372482113D-03 + 0.1169549268870D-03 0.1197372276738D-03 0.1225856860613D-03 0.1255018739831D-03 + 0.1284874006808D-03 0.1315439135877D-03 0.1346730992336D-03 0.1378766841712D-03 + 0.1411564359238D-03 0.1445141639563D-03 0.1479517206680D-03 0.1514710024102D-03 + 0.1550739505263D-03 0.1587625524179D-03 0.1625388426349D-03 0.1664049039925D-03 + 0.1703628687133D-03 0.1744149195974D-03 0.1785632912194D-03 0.1828102711544D-03 + 0.1871582012321D-03 0.1916094788209D-03 0.1961665581427D-03 0.2008319516176D-03 + 0.2056082312418D-03 0.2104980299966D-03 0.2155040432913D-03 0.2206290304405D-03 + 0.2258758161753D-03 0.2312472921908D-03 0.2367464187300D-03 0.2423762262044D-03 + 0.2481398168542D-03 0.2540403664457D-03 0.2600811260106D-03 0.2662654236245D-03 + 0.2725966662290D-03 0.2790783414953D-03 0.2857140197324D-03 0.2925073558401D-03 + 0.2994620913080D-03 0.3065820562611D-03 0.3138711715547D-03 0.3213334509168D-03 + 0.3289730031429D-03 0.3367940343406D-03 0.3448008502286D-03 0.3529978584881D-03 + 0.3613895711713D-03 0.3699806071650D-03 0.3787756947128D-03 0.3877796739964D-03 + 0.3969974997780D-03 0.4064342441040D-03 0.4160950990725D-03 0.4259853796663D-03 + 0.4361105266519D-03 0.4464761095462D-03 0.4570878296540D-03 0.4679515231757D-03 + 0.4790731643881D-03 0.4904588689006D-03 0.5021148969868D-03 0.5140476569946D-03 + 0.5262637088364D-03 0.5387697675611D-03 0.5515727070097D-03 0.5646795635561D-03 + 0.5780975399370D-03 0.5918340091694D-03 0.6058965185620D-03 0.6202927938188D-03 + 0.6350307432396D-03 0.6501184620192D-03 0.6655642366457D-03 0.6813765494038D-03 + 0.6975640829812D-03 0.7141357251847D-03 0.7311005737650D-03 0.7484679413557D-03 + 0.7662473605260D-03 0.7844485889531D-03 0.8030816147148D-03 0.8221566617048D-03 + 0.8416841951763D-03 0.8616749274129D-03 0.8821398235337D-03 0.9030901074324D-03 + 0.9245372678559D-03 0.9464930646236D-03 0.9689695349932D-03 0.9919790001731D-03 + 0.1015534071988D-02 0.1039647659698D-02 0.1064332976981D-02 0.1089603549068D-02 + 0.1115473220057D-02 0.1141956160389D-02 0.1169066874495D-02 0.1196820208634D-02 + 0.1225231358897D-02 0.1254315879409D-02 0.1284089690715D-02 0.1314569088366D-02 + 0.1345770751696D-02 0.1377711752814D-02 0.1410409565795D-02 0.1443882076088D-02 + 0.1478147590144D-02 0.1513224845264D-02 0.1549133019674D-02 0.1585891742841D-02 + 0.1623521106018D-02 0.1662041673040D-02 0.1701474491365D-02 0.1741841103378D-02 + 0.1783163557945D-02 0.1825464422244D-02 0.1868766793867D-02 0.1913094313196D-02 + 0.1958471176071D-02 0.2004922146751D-02 0.2052472571166D-02 0.2101148390486D-02 + 0.2150976154989D-02 0.2201983038264D-02 0.2254196851731D-02 0.2307646059493D-02 + 0.2362359793542D-02 0.2418367869301D-02 0.2475700801533D-02 0.2534389820612D-02 + 0.2594466889165D-02 0.2655964719104D-02 0.2718916789042D-02 0.2783357362106D-02 + 0.2849321504172D-02 0.2916845102501D-02 0.2985964884814D-02 0.3056718438800D-02 + 0.3129144232066D-02 0.3203281632551D-02 0.3279170929405D-02 0.3356853354336D-02 + 0.3436371103460D-02 0.3517767359634D-02 0.3601086315312D-02 0.3686373195913D-02 + 0.3773674283724D-02 0.3863036942351D-02 0.3954509641719D-02 0.4048141983652D-02 + 0.4143984728019D-02 0.4242089819491D-02 0.4342510414893D-02 0.4445300911185D-02 + 0.4550516974067D-02 0.4658215567249D-02 0.4768454982366D-02 0.4881294869584D-02 + 0.4996796268890D-02 0.5115021642093D-02 0.5236034905549D-02 0.5359901463622D-02 + 0.5486688242898D-02 0.5616463727181D-02 0.5749297993262D-02 0.5885262747508D-02 + 0.6024431363262D-02 0.6166878919093D-02 0.6312682237899D-02 0.6461919926891D-02 + 0.6614672418475D-02 0.6771022012045D-02 0.6931052916716D-02 0.7094851295016D-02 + 0.7262505307545D-02 0.7434105158642D-02 0.7609743143066D-02 0.7789513693721D-02 + 0.7973513430440D-02 0.8161841209859D-02 0.8354598176397D-02 0.8551887814376D-02 + 0.8753816001287D-02 0.8960491062250D-02 0.9172023825667D-02 0.9388527680122D-02 + 0.9610118632529D-02 0.9836915367568D-02 0.1006903930843D-01 0.1030661467892D-01 + 0.1054976856688D-01 0.1079863098909D-01 0.1105333495749D-01 0.1131401654696D-01 + 0.1158081496451D-01 0.1185387262003D-01 0.1213333519856D-01 0.1241935173418D-01 + 0.1271207468545D-01 0.1301166001257D-01 0.1331826725616D-01 0.1363205961778D-01 + 0.1395320404221D-01 0.1428187130150D-01 0.1461823608081D-01 0.1496247706623D-01 + 0.1531477703430D-01 0.1567532294367D-01 0.1604430602860D-01 0.1642192189452D-01 + 0.1680837061563D-01 0.1720385683464D-01 0.1760858986456D-01 0.1802278379280D-01 + 0.1844665758734D-01 0.1888043520531D-01 0.1932434570378D-01 0.1977862335297D-01 + 0.2024350775185D-01 0.2071924394615D-01 0.2120608254895D-01 0.2170427986376D-01 + 0.2221409801021D-01 0.2273580505238D-01 0.2326967512987D-01 0.2381598859160D-01 + 0.2437503213237D-01 0.2494709893234D-01 0.2553248879941D-01 0.2613150831454D-01 + 0.2674447098014D-01 0.2737169737147D-01 0.2801351529124D-01 0.2867025992742D-01 + 0.2934227401421D-01 0.3002990799646D-01 0.3073352019732D-01 0.3145347698951D-01 + 0.3219015296988D-01 0.3294393113773D-01 0.3371520307664D-01 0.3450436914006D-01 + 0.3531183864059D-01 0.3613803004319D-01 0.3698337116219D-01 0.3784829936233D-01 + 0.3873326176383D-01 0.3963871545150D-01 0.4056512768813D-01 0.4151297613205D-01 + 0.4248274905905D-01 0.4347494558865D-01 0.4449007591493D-01 0.4552866154180D-01 + 0.4659123552298D-01 0.4767834270657D-01 0.4879053998454D-01 0.4992839654695D-01 + 0.5109249414114D-01 0.5228342733595D-01 0.5350180379101D-01 0.5474824453121D-01 + 0.5602338422639D-01 0.5732787147645D-01 0.5866236910176D-01 0.6002755443915D-01 + 0.6142411964345D-01 0.6285277199472D-01 0.6431423421119D-01 0.6580924476805D-01 + 0.6733855822219D-01 0.6890294554290D-01 0.7050319444864D-01 0.7214010975008D-01 + 0.7381451369925D-01 0.7552724634520D-01 0.7727916589591D-01 0.7907114908690D-01 + 0.8090409155624D-01 0.8277890822643D-01 0.8469653369292D-01 0.8665792261951D-01 + 0.8866405014071D-01 0.9071591227111D-01 0.9281452632182D-01 0.9496093132410D-01 + 0.9715618846031D-01 0.9940138150208D-01 0.1016976172560D+00 0.1040460260169D+00 + 0.1064477620282D+00 0.1089040039508D+00 0.1114159553388D+00 0.1139848451236D+00 + 0.1166119281054D+00 0.1192984854532D+00 0.1220458252122D+00 0.1248552828197D+00 + 0.1277282216288D+00 0.1306660334408D+00 0.1336701390448D+00 0.1367419887670D+00 + 0.1398830630269D+00 0.1430948729031D+00 0.1463789607067D+00 0.1497369005636D+00 + 0.1531702990050D+00 0.1566807955666D+00 0.1602700633964D+00 0.1639398098711D+00 + 0.1676917772207D+00 0.1715277431623D+00 0.1754495215419D+00 0.1794589629856D+00 + 0.1835579555582D+00 0.1877484254317D+00 0.1920323375616D+00 0.1964116963718D+00 + 0.2008885464482D+00 0.2054649732406D+00 0.2101431037732D+00 0.2149251073635D+00 + 0.2198131963488D+00 0.2248096268222D+00 0.2299166993754D+00 0.2351367598503D+00 + 0.2404722000984D+00 0.2459254587480D+00 0.2514990219789D+00 0.2571954243047D+00 + 0.2630172493626D+00 0.2689671307106D+00 0.2750477526311D+00 0.2812618509418D+00 + 0.2876122138134D+00 0.2941016825931D+00 0.3007331526352D+00 0.3075095741362D+00 + 0.3144339529771D+00 0.3215093515700D+00 0.3287388897102D+00 0.3361257454325D+00 + 0.3436731558729D+00 0.3513844181328D+00 0.3592628901485D+00 0.3673119915621D+00 + 0.3755352045968D+00 0.3839360749336D+00 0.3925182125899D+00 0.4012852927993D+00 + 0.4102410568930D+00 0.4193893131804D+00 0.4287339378299D+00 0.4382788757486D+00 + 0.4480281414604D+00 0.4579858199819D+00 0.4681560676951D+00 0.4785431132164D+00 + 0.4891512582614D+00 0.4999848785043D+00 0.5110484244305D+00 0.5223464221834D+00 + 0.5338834744021D+00 0.5456642610510D+00 0.5576935402392D+00 0.5699761490289D+00 + 0.5825170042325D+00 0.5953211031952D+00 0.6083935245653D+00 0.6217394290472D+00 + 0.6353640601390D+00 0.6492727448516D+00 0.6634708944082D+00 0.6779640049238D+00 + 0.6927576580616D+00 0.7078575216668D+00 0.7232693503742D+00 0.7389989861895D+00 + 0.7550523590420D+00 0.7714354873073D+00 0.7881544782973D+00 0.8052155287175D+00 + 0.8226249250876D+00 0.8403890441249D+00 0.8585143530879D+00 0.8770074100784D+00 + 0.8958748642992D+00 0.9151234562658D+00 0.9347600179702D+00 0.9547914729931D+00 + 0.9752248365635D+00 0.9960672155622D+00 0.1017325808468D+01 0.1039007905241D+01 + 0.1061120887144D+01 0.1083672226499D+01 0.1106669486370D+01 0.1130120320176D+01 + 0.1154032471231D+01 0.1178413772204D+01 0.1203272144493D+01 0.1228615597523D+01 + 0.1254452227950D+01 0.1280790218774D+01 0.1307637838359D+01 0.1335003439353D+01 + 0.1362895457506D+01 0.1391322410385D+01 0.1420292895972D+01 0.1449815591159D+01 + 0.1479899250115D+01 0.1510552702537D+01 0.1541784851777D+01 0.1573604672833D+01 + 0.1606021210210D+01 0.1639043575644D+01 0.1672680945677D+01 0.1706942559091D+01 + 0.1741837714186D+01 0.1777375765901D+01 0.1813566122779D+01 0.1850418243757D+01 + 0.1887941634794D+01 0.1926145845317D+01 0.1965040464488D+01 0.2004635117287D+01 + 0.2044939460400D+01 0.2085963177919D+01 0.2127715976829D+01 0.2170207582300D+01 + 0.2213447732763D+01 0.2257446174769D+01 0.2302212657626D+01 0.2347756927812D+01 + 0.2394088723154D+01 0.2441217766767D+01 0.2489153760756D+01 0.2537906379665D+01 + 0.2587485263675D+01 0.2637900011547D+01 0.2689160173295D+01 0.2741275242598D+01 + 0.2794254648931D+01 0.2848107749430D+01 0.2902843820459D+01 0.2958472048904D+01 + 0.3015001523163D+01 0.3072441223848D+01 0.3130800014182D+01 0.3190086630094D+01 + 0.3250309670002D+01 0.3311477584285D+01 0.3373598664440D+01 0.3436681031917D+01 + 0.3500732626634D+01 0.3565761195166D+01 0.3631774278604D+01 0.3698779200090D+01 + 0.3766783052007D+01 0.3835792682854D+01 0.3905814683769D+01 0.3976855374728D+01 + 0.4048920790399D+01 0.4122016665671D+01 0.4196148420834D+01 0.4271321146438D+01 + 0.4347539587809D+01 0.4424808129241D+01 0.4503130777854D+01 0.4582511147131D+01 + 0.4662952440136D+01 0.4744457432406D+01 0.4827028454547D+01 0.4910667374509D+01 + 0.4995375579573D+01 0.5081153958042D+01 0.5168002880655D+01 0.5255922181721D+01 + 0.5344911139992D+01 0.5434968459290D+01 0.5526092248881D+01 0.5618280003639D+01 + 0.5711528583982D+01 0.5805834195616D+01 0.5901192369103D+01 0.5997597939257D+01 + 0.6095045024395D+01 0.6193527005472D+01 0.6293036505099D+01 0.6393565366487D+01 + 0.6495104632331D+01 0.6597644523660D+01 0.6701174418681D+01 0.6805682831645D+01 + 0.6911157391760D+01 0.7017584822191D+01 0.7124950919171D+01 0.7233240531258D+01 + 0.7342437538781D+01 0.7452524833500D+01 0.7563484298530D+01 0.7675296788562D+01 + 0.7787942110430D+01 0.7901399004058D+01 0.8015645123842D+01 0.8130657020509D+01 + 0.8246410123503D+01 0.8362878723950D+01 0.8480035958250D+01 0.8597853792358D+01 + 0.8716303006799D+01 0.8835353182487D+01 0.8954972687391D+01 0.9075128664130D+01 + 0.9195787018538D+01 0.9316912409273D+01 0.9438468238543D+01 0.9560416644000D+01 + 0.9682718491880D+01 0.9805333371460D+01 0.9928219590896D+01 0.1005133417453D+02 + 0.1017463286171D+02 0.1029807010722D+02 0.1042159908344D+02 0.1054517168417D+02 + 0.1066873853037D+02 0.1079224897780D+02 0.1091565112659D+02 0.1103889183301D+02 + 0.1116191672323D+02 0.1128467020944D+02 0.1140709550823D+02 0.1152913466133D+02 + 0.1165072855885D+02 0.1177181696506D+02 0.1189233854680D+02 0.1201223090454D+02 + 0.1213143060625D+02 0.1224987322407D+02 0.1236749337400D+02 0.1248422475837D+02 + 0.1260000021157D+02 0.1271475174875D+02 0.1282841061773D+02 0.1294090735413D+02 + 0.1305217183979D+02 0.1316213336451D+02 0.1327072069111D+02 0.1337786212400D+02 + 0.1348348558110D+02 0.1358751866928D+02 0.1368988876325D+02 0.1379052308804D+02 + 0.1388934880491D+02 0.1398629310084D+02 0.1408128328150D+02 0.1417424686776D+02 + 0.1426511169568D+02 0.1435380601989D+02 0.1444025862047D+02 0.1452439891313D+02 + 0.1460615706273D+02 0.1468546410000D+02 0.1476225204147D+02 0.1483645401237D+02 + 0.1490800437259D+02 0.1497683884540D+02 0.1504289464893D+02 0.1510611063019D+02 + 0.1516642740155D+02 0.1522378747941D+02 0.1527813542502D+02 0.1532941798703D+02 + 0.1537758424592D+02 0.1542258575964D+02 0.1546437671057D+02 0.1550291405346D+02 + 0.1553815766392D+02 0.1557007048740D+02 0.1559861868825D+02 0.1562377179849D+02 + 0.1564550286611D+02 0.1566378860245D+02 0.1567860952827D+02 0.1568995011828D+02 + 0.1569779894358D+02 0.1570214881171D+02 0.1570299690387D+02 0.1570034490889D+02 + 0.1569419915342D+02 0.1568457072811D+02 0.1567147560898D+02 0.1565493477391D+02 + 0.1563497431333D+02 0.1561162553504D+02 0.1558492506233D+02 0.1555491492507D+02 + 0.1552164264320D+02 0.1548516130217D+02 0.1544552961962D+02 0.1540281200312D+02 + 0.1535707859803D+02 0.1530840532536D+02 0.1525687390884D+02 0.1520257189079D+02 + 0.1514559263632D+02 0.1508603532531D+02 0.1502400493172D+02 0.1495961218971D+02 + 0.1489297354623D+02 0.1482421109950D+02 0.1475345252306D+02 0.1468083097499D+02 + 0.1460648499184D+02 0.1453055836709D+02 0.1445320001360D+02 0.1437456381003D+02 + 0.1429480843075D+02 0.1421409715909D+02 0.1413259768392D+02 0.1405048187912D+02 + 0.1396792556614D+02 0.1388510825940D+02 0.1380221289467D+02 0.1371942554036D+02 + 0.1363693509198D+02 0.1355493294972D+02 0.1347361267958D+02 0.1339316965818D+02 + 0.1331380070165D+02 0.1323570367897D+02 0.1315907711016D+02 0.1308411975004D+02 + 0.1301103015787D+02 0.1294000625373D+02 0.1287124486230D+02 0.1280494124477D+02 + 0.1274128861984D+02 0.1268047767460D+02 0.1262269606643D+02 0.1256812791682D+02 + 0.1251695329838D+02 0.1246934771604D+02 0.1242548158392D+02 0.1238551969900D+02 + 0.1234962071295D+02 0.1231793660373D+02 0.1229061214824D+02 0.1226778439767D+02 + 0.1224958215706D+02 0.1223612547078D+02 0.1222752511553D+02 0.1222388210258D+02 + 0.1222528719100D+02 0.1223182041366D+02 0.1224355061775D+02 0.1226053502171D+02 + 0.1228281879023D+02 0.1231043462935D+02 0.1234340240339D+02 0.1238172877543D+02 + 0.1242540687338D+02 0.1247441598324D+02 0.1252872127141D+02 0.1258827353770D+02 + 0.1265300900087D+02 0.1272284911822D+02 0.1279770044081D+02 0.1287745450601D+02 + 0.1296198776857D+02 0.1305116157186D+02 0.1314482216032D+02 0.1324280073454D+02 + 0.1334491354991D+02 0.1345096205988D+02 0.1356073310471D+02 0.1367399914649D+02 + 0.1379051855093D+02 0.1391003591655D+02 0.1403228245150D+02 0.1415697639825D+02 + 0.1428382350615D+02 0.1441251755180D+02 0.1454274090682D+02 0.1467416515265D+02 + 0.1480645174180D+02 0.1493925270450D+02 0.1507221140012D+02 0.1520496331175D+02 + 0.1533713688305D+02 0.1546835439544D+02 0.1559823288411D+02 0.1572638509088D+02 + 0.1585242045188D+02 0.1597594611769D+02 0.1609656800349D+02 0.1621389186673D+02 + 0.1632752440935D+02 0.1643707440175D+02 0.1654215382521D+02 0.1664237902974D+02 + 0.1673737190368D+02 0.1682676105166D+02 0.1691018297723D+02 0.1698728326633D+02 + 0.1705771776761D+02 0.1712115376582D+02 0.1717727114395D+02 0.1722576353007D+02 + 0.1726633942470D+02 0.1729872330429D+02 0.1732265669667D+02 0.1733789922408D+02 + 0.1734422960952D+02 0.1734144664198D+02 0.1732937009656D+02 0.1730784160492D+02 + 0.1727672547225D+02 0.1723590943644D+02 0.1718530536559D+02 0.1712484989008D+02 + 0.1705450496536D+02 0.1697425836203D+02 0.1688412407975D+02 0.1678414268193D+02 + 0.1667438154808D+02 0.1655493504124D+02 0.1642592458792D+02 0.1628749866833D+02 + 0.1613983271513D+02 0.1598312891883D+02 0.1581761593876D+02 0.1564354851859D+02 + 0.1546120700566D+02 0.1527089677411D+02 0.1507294755170D+02 0.1486771265109D+02 + 0.1465556810624D+02 0.1443691171558D+02 0.1421216199343D+02 0.1398175703206D+02 + 0.1374615327696D+02 0.1350582421831D+02 0.1326125900230D+02 0.1301296096613D+02 + 0.1276144610103D+02 0.1250724144826D+02 0.1225088343315D+02 0.1199291614280D+02 + 0.1173388955369D+02 0.1147435771520D+02 0.1121487689618D+02 0.1095600370143D+02 + 0.1069829316549D+02 0.1044229683153D+02 0.1018856082317D+02 0.9937623917321D+01 + 0.9690015626445D+01 0.9446254298643D+01 0.9206845244038D+01 0.8972278896087D+01 + 0.8743029016360D+01 0.8519550951297D+01 0.8302279949355D+01 0.8091629546790D+01 + 0.7887990030116D+01 0.7691726983014D+01 0.7503179925129D+01 0.7322661049902D+01 + 0.7150454068046D+01 0.6986813162918D+01 0.6831962063451D+01 0.6686093239819D+01 + 0.6549367226364D+01 0.6421912075717D+01 0.6303822947394D+01 0.6195161833447D+01 + 0.6095957423078D+01 0.6006205107394D+01 0.5925867124779D+01 0.5854872846611D+01 + 0.5793119202371D+01 0.5740471242429D+01 0.5696762836121D+01 0.5661797502031D+01 + 0.5635349366701D+01 0.5617164247353D+01 0.5606960853570D+01 0.5604432102259D+01 + 0.5609246539649D+01 0.5621049863505D+01 0.5639466538232D+01 0.5664101495024D+01 + 0.5694541908766D+01 0.5730359042993D+01 0.5771110153784D+01 0.5816340443192D+01 + 0.5865585052475D+01 0.5918371085180D+01 0.5974219649957D+01 0.6032647912832D+01 + 0.6093171148637D+01 0.6155304781260D+01 0.6218566402475D+01 0.6282477759234D+01 + 0.6346566699475D+01 0.6410369066815D+01 0.6473430534781D+01 0.6535308371644D+01 + 0.6595573127395D+01 0.6653810234872D+01 0.6709621517670D+01 0.6762626598041D+01 + 0.6812464198680D+01 0.6858793332986D+01 0.6901294379138D+01 0.6939670034070D+01 + 0.6973646144233D+01 0.7002972410830D+01 0.7027422967990D+01 0.7046796833200D+01 + 0.7060918230061D+01 0.7069636784259D+01 0.7072827594374D+01 0.7070391179926D+01 + 0.7062253309715D+01 0.7048364714231D+01 0.7028700686483D+01 0.7003260576238D+01 + 0.6972067183121D+01 0.6935166054562D+01 0.6892624694966D+01 0.6844531692843D+01 + 0.6790995772965D+01 0.6732144780827D+01 0.6668124606899D+01 0.6599098058289D+01 + 0.6525243685473D+01 0.6446754571799D+01 0.6363837093418D+01 0.6276709657188D+01 + 0.6185601423998D+01 0.6090751024726D+01 0.5992405275866D+01 0.5890817901556D+01 + 0.5786248268476D+01 0.5678960139726D+01 0.5569220453475D+01 0.5457298131760D+01 + 0.5343462924443D+01 0.5227984292928D+01 0.5111130337809D+01 0.4993166774192D+01 + 0.4874355958030D+01 0.4754955966341D+01 0.4635219733799D+01 0.4515394247714D+01 + 0.4395719803061D+01 0.4276429318764D+01 0.4157747716089D+01 0.4039891359594D+01 + 0.3923067560758D+01 0.3807474144035D+01 0.3693299074769D+01 0.3580720148118D+01 + 0.3469904737816D+01 0.3361009603367D+01 0.3254180754011D+01 0.3149553367571D+01 + 0.3047251762116D+01 0.2947389418162D+01 0.2850069049006D+01 0.2755382716614D+01 + 0.2663411990420D+01 0.2574228146230D+01 0.2487892402405D+01 0.2404456190400D+01 + 0.2323961456713D+01 0.2246440993268D+01 0.2171918793250D+01 0.2100410429420D+01 + 0.2031923451965D+01 0.1966457802972D+01 0.1904006244666D+01 0.1844554798640D+01 + 0.1788083193345D+01 0.1734565317240D+01 0.1683969675070D+01 0.1636259844862D+01 + 0.1591394933364D+01 0.1549330027746D+01 0.1510016641546D+01 0.1473403152964D+01 + 0.1439435233770D+01 0.1408056267219D+01 0.1379207753531D+01 0.1352829701650D+01 + 0.1328861006133D+01 0.1307239808175D+01 0.1287903839946D+01 0.1270790751526D+01 + 0.1255838419882D+01 0.1242985239474D+01 0.1232170394175D+01 0.1223334110328D+01 + 0.1216417890857D+01 0.1211364730456D+01 0.1208119311934D+01 0.1206628183910D+01 + 0.1206839920052D+01 0.1208705260142D+01 0.1212177233248D+01 0.1217211263310D+01 + 0.1223765257423D+01 0.1231799677111D+01 0.1241277592815D+01 0.1252164721788D+01 + 0.1264429449524D+01 0.1278042834732D+01 0.1292978597814D+01 0.1309213092627D+01 + 0.1326725261233D+01 0.1345496571135D+01 0.1365510934358D+01 0.1386754607532D+01 + 0.1409215426363D+01 0.1433003097507D+01 0.1458223277591D+01 0.1484860699421D+01 + 0.1512902583279D+01 0.1542338542721D+01 0.1573160498496D+01 0.1605362600812D+01 + 0.1638941160170D+01 0.1673894586973D+01 0.1710223340083D+01 0.1747929884514D+01 + 7 1012 + 1 0 -1 -511.89150 + 2 0 -1 -58.80097 + 2 1 1 -50.61290 + 2 1 -2 -49.69692 + 3 0 -1 -5.52718 + 3 1 1 -3.14309 + 3 1 -2 -3.03034 + 0.2123373461549D-04 0.2173914995400D-04 0.2225659296114D-04 0.2278634977738D-04 + 0.2332871334728D-04 0.2388398358121D-04 0.2445246752083D-04 0.2503447950857D-04 + 0.2563034136106D-04 0.2624038254674D-04 0.2686494036763D-04 0.2750436014548D-04 + 0.2815899541226D-04 0.2882920810522D-04 0.2951536876657D-04 0.3021785674791D-04 + 0.3093706041946D-04 0.3167337738432D-04 0.3242721469777D-04 0.3319898909177D-04 + 0.3398912720483D-04 0.3479806581728D-04 0.3562625209215D-04 0.3647414382175D-04 + 0.3734220968012D-04 0.3823092948144D-04 0.3914079444457D-04 0.4007230746391D-04 + 0.4102598338660D-04 0.4200234929636D-04 0.4300194480406D-04 0.4402532234512D-04 + 0.4507304748402D-04 0.4614569922601D-04 0.4724387033618D-04 0.4836816766617D-04 + 0.4951921248852D-04 0.5069764083903D-04 0.5190410386721D-04 0.5313926819498D-04 + 0.5440381628400D-04 0.5569844681152D-04 0.5702387505533D-04 0.5838083328767D-04 + 0.5977007117859D-04 0.6119235620880D-04 0.6264847409228D-04 0.6413922920902D-04 + 0.6566544504782D-04 0.6722796465978D-04 0.6882765112238D-04 0.7046538801462D-04 + 0.7214207990339D-04 0.7385865284136D-04 0.7561605487667D-04 0.7741525657465D-04 + 0.7925725155197D-04 0.8114305702331D-04 0.8307371436110D-04 0.8505028966841D-04 + 0.8707387436545D-04 0.8914558578994D-04 0.9126656781168D-04 0.9343799146165D-04 + 0.9566105557602D-04 0.9793698745538D-04 0.1002670435396D-03 0.1026525100984D-03 + 0.1050947039390D-03 0.1075949731294D-03 0.1101546977394D-03 0.1127752905997D-03 + 0.1154581980775D-03 0.1182049008719D-03 0.1210169148270D-03 0.1238957917652D-03 + 0.1268431203390D-03 0.1298605269045D-03 0.1329496764137D-03 0.1361122733297D-03 + 0.1393500625619D-03 0.1426648304247D-03 0.1460584056178D-03 0.1495326602303D-03 + 0.1530895107681D-03 0.1567309192056D-03 0.1604588940629D-03 0.1642754915072D-03 + 0.1681828164816D-03 0.1721830238593D-03 0.1762783196258D-03 0.1804709620887D-03 + 0.1847632631165D-03 0.1891575894056D-03 0.1936563637785D-03 0.1982620665115D-03 + 0.2029772366947D-03 0.2078044736231D-03 0.2127464382210D-03 0.2178058545005D-03 + 0.2229855110531D-03 0.2282882625778D-03 0.2337170314442D-03 0.2392748092933D-03 + 0.2449646586752D-03 0.2507897147258D-03 0.2567531868833D-03 0.2628583606444D-03 + 0.2691085993625D-03 0.2755073460880D-03 0.2820581254518D-03 0.2887645455935D-03 + 0.2956303001344D-03 0.3026591701977D-03 0.3098550264756D-03 0.3172218313454D-03 + 0.3247636410353D-03 0.3324846078408D-03 0.3403889823939D-03 0.3484811159850D-03 + 0.3567654629401D-03 0.3652465830528D-03 0.3739291440747D-03 0.3828179242637D-03 + 0.3919178149916D-03 0.4012338234146D-03 0.4107710752045D-03 0.4205348173457D-03 + 0.4305304209971D-03 0.4407633844209D-03 0.4512393359813D-03 0.4619640372121D-03 + 0.4729433859575D-03 0.4841834195856D-03 0.4956903182785D-03 0.5074704083979D-03 + 0.5195301659314D-03 0.5318762200182D-03 0.5445153565579D-03 0.5574545219044D-03 + 0.5707008266453D-03 0.5842615494708D-03 0.5981441411326D-03 0.6123562284955D-03 + 0.6269056186847D-03 0.6418003033287D-03 0.6570484629028D-03 0.6726584711734D-03 + 0.6886388997468D-03 0.7049985227240D-03 0.7217463214642D-03 0.7388914894603D-03 + 0.7564434373277D-03 0.7744117979097D-03 0.7928064315026D-03 0.8116374312024D-03 + 0.8309151283763D-03 0.8506500982622D-03 0.8708531656989D-03 0.8915354109894D-03 + 0.9127081759015D-03 0.9343830698083D-03 0.9565719759715D-03 0.9792870579714D-03 + 0.1002540766287D-02 0.1026345845027D-02 0.1050715338824D-02 0.1075662599879D-02 + 0.1101201295181D-02 0.1127345413883D-02 0.1154109274864D-02 0.1181507534450D-02 + 0.1209555194328D-02 0.1238267609637D-02 0.1267660497252D-02 0.1297749944251D-02 + 0.1328552416593D-02 0.1360084767981D-02 0.1392364248945D-02 0.1425408516127D-02 + 0.1459235641785D-02 0.1493864123514D-02 0.1529312894196D-02 0.1565601332181D-02 + 0.1602749271697D-02 0.1640777013510D-02 0.1679705335822D-02 0.1719555505429D-02 + 0.1760349289133D-02 0.1802108965417D-02 0.1844857336390D-02 0.1888617740010D-02 + 0.1933414062589D-02 0.1979270751585D-02 0.2026212828687D-02 0.2074265903209D-02 + 0.2123456185786D-02 0.2173810502385D-02 0.2225356308647D-02 0.2278121704551D-02 + 0.2332135449417D-02 0.2387426977257D-02 0.2444026412476D-02 0.2501964585936D-02 + 0.2561273051389D-02 0.2621984102285D-02 0.2684130788965D-02 0.2747746936258D-02 + 0.2812867161465D-02 0.2879526892772D-02 0.2947762388071D-02 0.3017610754222D-02 + 0.3089109966753D-02 0.3162298890003D-02 0.3237217297741D-02 0.3313905894238D-02 + 0.3392406335837D-02 0.3472761253004D-02 0.3555014272883D-02 0.3639210042377D-02 + 0.3725394251736D-02 0.3813613658698D-02 0.3903916113173D-02 0.3996350582488D-02 + 0.4090967177209D-02 0.4187817177547D-02 0.4286953060364D-02 0.4388428526794D-02 + 0.4492298530489D-02 0.4598619306504D-02 0.4707448400838D-02 0.4818844700646D-02 + 0.4932868465127D-02 0.5049581357120D-02 0.5169046475404D-02 0.5291328387739D-02 + 0.5416493164639D-02 0.5544608413917D-02 0.5675743316002D-02 0.5809968660057D-02 + 0.5947356880904D-02 0.6087982096781D-02 0.6231920147946D-02 0.6379248636155D-02 + 0.6530046965011D-02 0.6684396381234D-02 0.6842380016839D-02 0.7004082932273D-02 + 0.7169592160503D-02 0.7338996752102D-02 0.7512387821327D-02 0.7689858593235D-02 + 0.7871504451850D-02 0.8057422989391D-02 0.8247714056607D-02 0.8442479814225D-02 + 0.8641824785540D-02 0.8845855910175D-02 0.9054682599025D-02 0.9268416790430D-02 + 0.9487173007575D-02 0.9711068417172D-02 0.9940222889430D-02 0.1017475905935D-01 + 0.1041480238936D-01 0.1066048123337D-01 0.1091192690214D-01 0.1116927373022D-01 + 0.1143265914425D-01 0.1170222373276D-01 0.1197811131760D-01 0.1226046902681D-01 + 0.1254944736912D-01 0.1284520031015D-01 0.1314788535014D-01 0.1345766360348D-01 + 0.1377469987990D-01 0.1409916276750D-01 0.1443122471744D-01 0.1477106213063D-01 + 0.1511885544620D-01 0.1547478923187D-01 0.1583905227632D-01 0.1621183768351D-01 + 0.1659334296907D-01 0.1698377015868D-01 0.1738332588869D-01 0.1779222150874D-01 + 0.1821067318670D-01 0.1863890201578D-01 0.1907713412394D-01 0.1952560078568D-01 + 0.1998453853608D-01 0.2045418928739D-01 0.2093480044805D-01 0.2142662504416D-01 + 0.2192992184360D-01 0.2244495548276D-01 0.2297199659585D-01 0.2351132194704D-01 + 0.2406321456527D-01 0.2462796388197D-01 0.2520586587156D-01 0.2579722319499D-01 + 0.2640234534617D-01 0.2702154880148D-01 0.2765515717239D-01 0.2830350136121D-01 + 0.2896691972007D-01 0.2964575821319D-01 0.3034037058244D-01 0.3105111851634D-01 + 0.3177837182251D-01 0.3252250860359D-01 0.3328391543683D-01 0.3406298755727D-01 + 0.3486012904465D-01 0.3567575301409D-01 0.3651028181063D-01 0.3736414720771D-01 + 0.3823779060956D-01 0.3913166325773D-01 0.4004622644169D-01 0.4098195171364D-01 + 0.4193932110758D-01 0.4291882736274D-01 0.4392097415138D-01 0.4494627631115D-01 + 0.4599526008193D-01 0.4706846334735D-01 0.4816643588104D-01 0.4928973959763D-01 + 0.5043894880863D-01 0.5161465048329D-01 0.5281744451445D-01 0.5404794398948D-01 + 0.5530677546647D-01 0.5659457925562D-01 0.5791200970601D-01 0.5925973549779D-01 + 0.6063843993988D-01 0.6204882127328D-01 0.6349159298001D-01 0.6496748409788D-01 + 0.6647723954103D-01 0.6802162042643D-01 0.6960140440641D-01 0.7121738600725D-01 + 0.7287037697395D-01 0.7456120662128D-01 0.7629072219118D-01 0.7805978921657D-01 + 0.7986929189166D-01 0.8172013344892D-01 0.8361323654265D-01 0.8554954363940D-01 + 0.8753001741513D-01 0.8955564115940D-01 0.9162741918654D-01 0.9374637725383D-01 + 0.9591356298698D-01 0.9813004631275D-01 0.1003969198990D+00 0.1027152996019D+00 + 0.1050863249211D+00 0.1075111594618D+00 0.1099909914051D+00 0.1125270339855D+00 + 0.1151205259766D+00 0.1177727321842D+00 0.1204849439476D+00 0.1232584796489D+00 + 0.1260946852301D+00 0.1289949347182D+00 0.1319606307590D+00 0.1349932051583D+00 + 0.1380941194317D+00 0.1412648653632D+00 0.1445069655708D+00 0.1478219740820D+00 + 0.1512114769165D+00 0.1546770926778D+00 0.1582204731535D+00 0.1618433039236D+00 + 0.1655473049771D+00 0.1693342313383D+00 0.1732058737000D+00 0.1771640590662D+00 + 0.1812106514032D+00 0.1853475522988D+00 0.1895767016304D+00 0.1939000782413D+00 + 0.1983197006251D+00 0.2028376276193D+00 0.2074559591063D+00 0.2121768367234D+00 + 0.2170024445803D+00 0.2219350099852D+00 0.2269768041788D+00 0.2321301430764D+00 + 0.2373973880172D+00 0.2427809465221D+00 0.2482832730585D+00 0.2539068698131D+00 + 0.2596542874715D+00 0.2655281260047D+00 0.2715310354636D+00 0.2776657167793D+00 + 0.2839349225700D+00 0.2903414579550D+00 0.2968881813739D+00 0.3035780054119D+00 + 0.3104138976312D+00 0.3173988814070D+00 0.3245360367687D+00 0.3318285012460D+00 + 0.3392794707188D+00 0.3468922002717D+00 0.3546700050516D+00 0.3626162611285D+00 + 0.3707344063591D+00 0.3790279412529D+00 0.3875004298396D+00 0.3961555005386D+00 + 0.4049968470283D+00 0.4140282291162D+00 0.4232534736091D+00 0.4326764751811D+00 + 0.4423011972414D+00 0.4521316727988D+00 0.4621720053237D+00 0.4724263696067D+00 + 0.4828990126121D+00 0.4935942543268D+00 0.5045164886027D+00 0.5156701839924D+00 + 0.5270598845772D+00 0.5386902107861D+00 0.5505658602051D+00 0.5626916083760D+00 + 0.5750723095830D+00 0.5877128976270D+00 0.6006183865849D+00 0.6137938715547D+00 + 0.6272445293836D+00 0.6409756193782D+00 0.6549924839961D+00 0.6693005495166D+00 + 0.6839053266899D+00 0.6988124113627D+00 0.7140274850788D+00 0.7295563156538D+00 + 0.7454047577210D+00 0.7615787532478D+00 0.7780843320207D+00 0.7949276120969D+00 + 0.8121148002200D+00 0.8296521921997D+00 0.8475461732513D+00 0.8658032182945D+00 + 0.8844298922086D+00 0.9034328500427D+00 0.9228188371772D+00 0.9425946894360D+00 + 0.9627673331456D+00 0.9833437851400D+00 0.1004331152707D+01 0.1025736633476D+01 + 0.1047567515241D+01 0.1069831175720D+01 0.1092535082243D+01 0.1115686791375D+01 + 0.1139293948457D+01 0.1163364287075D+01 0.1187905628445D+01 0.1212925880722D+01 + 0.1238433038208D+01 0.1264435180485D+01 0.1290940471443D+01 0.1317957158220D+01 + 0.1345493570030D+01 0.1373558116898D+01 0.1402159288280D+01 0.1431305651569D+01 + 0.1461005850494D+01 0.1491268603389D+01 0.1522102701342D+01 0.1553517006218D+01 + 0.1585520448546D+01 0.1618122025271D+01 0.1651330797361D+01 0.1685155887276D+01 + 0.1719606476280D+01 0.1754691801602D+01 0.1790421153434D+01 0.1826803871767D+01 + 0.1863849343063D+01 0.1901566996742D+01 0.1939966301501D+01 0.1979056761446D+01 + 0.2018847912032D+01 0.2059349315815D+01 0.2100570557999D+01 0.2142521241790D+01 + 0.2185210983528D+01 0.2228649407614D+01 0.2272846141215D+01 0.2317810808747D+01 + 0.2363553026124D+01 0.2410082394775D+01 0.2457408495423D+01 0.2505540881617D+01 + 0.2554489073015D+01 0.2604262548407D+01 0.2654870738488D+01 0.2706323018355D+01 + 0.2758628699743D+01 0.2811797022979D+01 0.2865837148659D+01 0.2920758149043D+01 + 0.2976568999160D+01 0.3033278567615D+01 0.3090895607108D+01 0.3149428744640D+01 + 0.3208886471423D+01 0.3269277132479D+01 0.3330608915918D+01 0.3392889841912D+01 + 0.3456127751341D+01 0.3520330294118D+01 0.3585504917195D+01 0.3651658852234D+01 + 0.3718799102956D+01 0.3786932432154D+01 0.3856065348377D+01 0.3926204092282D+01 + 0.3997354622651D+01 0.4069522602076D+01 0.4142713382310D+01 0.4216931989288D+01 + 0.4292183107814D+01 0.4368471065927D+01 0.4445799818928D+01 0.4524172933100D+01 + 0.4603593569097D+01 0.4684064465021D+01 0.4765587919192D+01 0.4848165772611D+01 + 0.4931799391130D+01 0.5016489647323D+01 0.5102236902085D+01 0.5189040985952D+01 + 0.5276901180158D+01 0.5365816197444D+01 0.5455784162617D+01 0.5546802592894D+01 + 0.5638868378017D+01 0.5731977760181D+01 0.5826126313769D+01 0.5921308924927D+01 + 0.6017519770983D+01 0.6114752299744D+01 0.6212999208681D+01 0.6312252424025D+01 + 0.6412503079799D+01 0.6513741496818D+01 0.6615957161666D+01 0.6719138705689D+01 + 0.6823273884037D+01 0.6928349554769D+01 0.7034351658067D+01 0.7141265195588D+01 + 0.7249074209985D+01 0.7357761764637D+01 0.7467309923627D+01 0.7577699732003D+01 + 0.7688911196366D+01 0.7800923265826D+01 0.7913713813378D+01 0.8027259617727D+01 + 0.8141536345630D+01 0.8256518534789D+01 0.8372179577355D+01 0.8488491704090D+01 + 0.8605425969248D+01 0.8722952236222D+01 0.8841039164025D+01 0.8959654194655D+01 + 0.9078763541413D+01 0.9198332178230D+01 0.9318323830066D+01 0.9438700964464D+01 + 0.9559424784293D+01 0.9680455221780D+01 0.9801750933887D+01 0.9923269299099D+01 + 0.1004496641570D+02 0.1016679710163D+02 0.1028871489593D+02 0.1041067206198D+02 + 0.1053261959239D+02 0.1065450721594D+02 0.1077628340626D+02 0.1089789539267D+02 + 0.1101928917306D+02 0.1114040952889D+02 0.1126120004259D+02 0.1138160311709D+02 + 0.1150155999788D+02 0.1162101079752D+02 0.1173989452270D+02 0.1185814910389D+02 + 0.1197571142774D+02 0.1209251737221D+02 0.1220850184455D+02 0.1232359882222D+02 + 0.1243774139668D+02 0.1255086182033D+02 0.1266289155645D+02 0.1277376133233D+02 + 0.1288340119558D+02 0.1299174057364D+02 0.1309870833671D+02 0.1320423286383D+02 + 0.1330824211245D+02 0.1341066369131D+02 0.1351142493681D+02 0.1361045299271D+02 + 0.1370767489335D+02 0.1380301765027D+02 0.1389640834224D+02 0.1398777420882D+02 + 0.1407704274716D+02 0.1416414181234D+02 0.1424899972093D+02 0.1433154535791D+02 + 0.1441170828680D+02 0.1448941886294D+02 0.1456460834990D+02 0.1463720903887D+02 + 0.1470715437095D+02 0.1477437906225D+02 0.1483881923166D+02 0.1490041253114D+02 + 0.1495909827839D+02 0.1501481759178D+02 0.1506751352732D+02 0.1511713121747D+02 + 0.1516361801165D+02 0.1520692361818D+02 0.1524700024742D+02 0.1528380275595D+02 + 0.1531728879140D+02 0.1534741893776D+02 0.1537415686084D+02 0.1539746945363D+02 + 0.1541732698111D+02 0.1543370322439D+02 0.1544657562364D+02 0.1545592541956D+02 + 0.1546173779302D+02 0.1546400200242D+02 0.1546271151843D+02 0.1545786415570D+02 + 0.1544946220111D+02 0.1543751253809D+02 0.1542202676661D+02 0.1540302131844D+02 + 0.1538051756708D+02 0.1535454193202D+02 0.1532512597682D+02 0.1529230650045D+02 + 0.1525612562157D+02 0.1521663085508D+02 0.1517387518057D+02 0.1512791710213D+02 + 0.1507882069905D+02 0.1502665566690D+02 0.1497149734847D+02 0.1491342675424D+02 + 0.1485253057170D+02 0.1478890116319D+02 0.1472263655178D+02 0.1465384039476D+02 + 0.1458262194423D+02 0.1450909599456D+02 0.1443338281613D+02 0.1435560807511D+02 + 0.1427590273888D+02 0.1419440296685D+02 0.1411124998625D+02 0.1402658995277D+02 + 0.1394057379573D+02 0.1385335704764D+02 0.1376509965795D+02 0.1367596579089D+02 + 0.1358612360737D+02 0.1349574503081D+02 0.1340500549696D+02 0.1331408368786D+02 + 0.1322316124986D+02 0.1313242249599D+02 0.1304205409292D+02 0.1295224473262D+02 + 0.1286318478926D+02 0.1277506596148D+02 0.1268808090072D+02 0.1260242282594D+02 + 0.1251828512526D+02 0.1243586094535D+02 0.1235534276899D+02 0.1227692198172D+02 + 0.1220078842830D+02 0.1212712995982D+02 0.1205613197253D+02 0.1198797693913D+02 + 0.1192284393379D+02 0.1186090815186D+02 0.1180234042546D+02 0.1174730673615D+02 + 0.1169596772603D+02 0.1164847820834D+02 0.1160498667924D+02 0.1156563483188D+02 + 0.1153055707436D+02 0.1149988005301D+02 0.1147372218250D+02 0.1145219318434D+02 + 0.1143539363525D+02 0.1142341452711D+02 0.1141633683999D+02 0.1141423112993D+02 + 0.1141715713298D+02 0.1142516338731D+02 0.1143828687474D+02 0.1145655268355D+02 + 0.1147997369390D+02 0.1150855028761D+02 0.1154227008374D+02 0.1158110770138D+02 + 0.1162502455129D+02 0.1167396865756D+02 0.1172787451079D+02 0.1178666295396D+02 + 0.1185024110228D+02 0.1191850229803D+02 0.1199132610159D+02 0.1206857831946D+02 + 0.1215011107019D+02 0.1223576288907D+02 0.1232535887199D+02 0.1241871085933D+02 + 0.1251561765997D+02 0.1261586531600D+02 0.1271922740805D+02 0.1282546540151D+02 + 0.1293432903330D+02 0.1304555673916D+02 0.1315887612096D+02 0.1327400445348D+02 + 0.1339064923005D+02 0.1350850874625D+02 0.1362727272054D+02 0.1374662295087D+02 + 0.1386623400591D+02 0.1398577394943D+02 0.1410490509638D+02 0.1422328479880D+02 + 0.1434056625987D+02 0.1445639937388D+02 0.1457043159027D+02 0.1468230879914D+02 + 0.1479167623614D+02 0.1489817940404D+02 0.1500146500841D+02 0.1510118190471D+02 + 0.1519698205391D+02 0.1528852148379D+02 0.1537546125281D+02 0.1545746841364D+02 + 0.1553421697307D+02 0.1560538884523D+02 0.1567067479483D+02 0.1572977536717D+02 + 0.1578240180176D+02 0.1582827692612D+02 0.1586713602663D+02 0.1589872769311D+02 + 0.1592281463392D+02 0.1593917445849D+02 0.1594760042409D+02 0.1594790214378D+02 + 0.1593990625272D+02 0.1592345702984D+02 0.1589841697221D+02 0.1586466731948D+02 + 0.1582210852585D+02 0.1577066067732D+02 0.1571026385193D+02 0.1564087842120D+02 + 0.1556248529064D+02 0.1547508607802D+02 0.1537870322780D+02 0.1527338006062D+02 + 0.1515918075676D+02 0.1503619027308D+02 0.1490451419267D+02 0.1476427850715D+02 + 0.1461562933169D+02 0.1445873255288D+02 0.1429377341010D+02 0.1412095601137D+02 + 0.1394050278444D+02 0.1375265386499D+02 0.1355766642312D+02 0.1335581393054D+02 + 0.1314738537038D+02 0.1293268439219D+02 0.1271202841511D+02 0.1248574768189D+02 + 0.1225418426740D+02 0.1201769104500D+02 0.1177663061449D+02 0.1153137419578D+02 + 0.1128230049248D+02 0.1102979452961D+02 0.1077424647032D+02 0.1051605041603D+02 + 0.1025560319513D+02 0.9993303145083D+01 0.9729548892983D+01 0.9464738139829D+01 + 0.9199266453606D+01 0.8933526076402D+01 0.8667904750745D+01 0.8402784570301D+01 + 0.8138540859996D+01 0.7875541090527D+01 0.7614143832090D+01 0.7354697751983D+01 + 0.7097540660550D+01 0.6842998609696D+01 0.6591385047920D+01 0.6343000035605D+01 + 0.6098129523858D+01 0.5857044699944D+01 0.5620001401934D+01 0.5387239604814D+01 + 0.5158982979846D+01 0.4935438528573D+01 0.4716796292366D+01 0.4503229137976D+01 + 0.4294892619056D+01 0.4091924913152D+01 0.3894446833193D+01 0.3702561912045D+01 + 0.3516356558237D+01 0.3335900280537D+01 0.3161245978670D+01 0.2992430297065D+01 + 0.2829474038194D+01 0.2672382631762D+01 0.2521146655720D+01 0.2375742404881D+01 + 0.2236132502695D+01 0.2102266551639D+01 0.1974081817541D+01 0.1851503943111D+01 + 0.1734447685940D+01 0.1622817676200D+01 0.1516509189368D+01 0.1415408929331D+01 + 0.1319395817360D+01 0.1228341782531D+01 0.1142112549373D+01 0.1060568418635D+01 + 0.9835650373019D+00 0.9109541541726D+00 0.8425843575459D+00 0.7783017917968D+00 + 0.7179508498817D+00 0.6613748390683D+00 0.6084166174653D+00 0.5589191992012D+00 + 0.5127263263911D+00 0.4696830063190D+00 0.4296360125529D+00 0.3924343490009D+00 + 0.3579296762027D+00 0.3259766994340D+00 0.2964335184742D+00 0.2691619391536D+00 + 0.2440277470488D+00 0.2209009439361D+00 0.1996559478365D+00 0.1801717576938D+00 + 0.1623320839184D+00 0.1460254461990D+00 0.1311452401368D+00 0.1175897743854D+00 + 0.1052622800912D+00 0.9407089451527D-01 0.8392862078550D-01 0.7475326577690D-01 + 0.6646735814128D-01 0.5899804851766D-01 0.5227699394346D-01 0.4624022845899D-01 + 0.4082802185442D-01 0.3598472845105D-01 0.3165862773800D-01 0.2780175860384D-01 + 0.2436974881146D-01 0.2132164126495D-01 0.1861971851162D-01 0.1622932681167D-01 + 0.1411870099424D-01 0.1225879120292D-01 0.1062309251766D-01 0.9187478324824D-02 + 0.7930038194170D-02 0.6830920911119D-02 0.5872183206948D-02 0.5037644628161D-02 + 0.4312748890659D-02 0.3684431974697D-02 0.3140997133459D-02 0.2671996911721D-02 + 0.2268122201696D-02 0.1921098300832D-02 0.1623587881022D-02 0.1369100730387D-02 + 0.1151910087150D-02 0.9669753500508D-03 0.8098709208516D-03 0.6767209113939D-03 + 0.5641394300578D-03 0.4691761498429D-03 0.3892668522563D-03 0.3221886372696D-03 + 0.2660194893607D-03 0.2191018926233D-03 0.1800101936858D-03 0.1475214192933D-03 + 0.1205892654847D-03 0.9832098695562D-04 0.7995692809159D-04 0.6485245095860D-04 + 0.5246202996510D-04 0.4232529769133D-04 0.3405484129524D-04 0.2732556374477D-04 + 0.2186543872353D-04 0.1744750226736D-04 0.1388293789508D-04 0.1101512510421D-04 + 0.8714533541124D-05 0.6874356872787D-05 0.5406791351919D-05 0.4239874261002D-05 + 0.3314806839624D-05 0.2583694952262D-05 0.2007648657315D-05 0.1555189018603D-05 + 0.1200916989437D-05 0.9244050332163D-06 0.7092773630705D-06 0.5424493283134D-06 + 0.4135005904089D-06 0.3141603589352D-06 0.2378861413798D-06 0.1795202409555D-06 + 0.1350106538765D-06 0.1011851095086D-06 0.7556879909866D-07 0.5623788451178D-07 + 0.4170219815814D-07 0.3081166707088D-07 0.2268194336078D-07 0.1663552297805D-07 + 0.1215530542863D-07 0.8848107127806D-08 0.6416106613217D-08 0.4634585104140D-08 + 0.3334643304910D-08 0.2389835688104D-08 0.1705876062949D-08 0.1212741020005D-08 + 0.8586376559590D-09 0.6054146003728D-09 0.4250856698627D-09 0.2972075512731D-09 + 0.2069101606973D-09 0.1434236365115D-09 0.9898160505409D-10 0.6800804519963D-10 + 0.4651712787494D-10 0.3167310042586D-10 0.2146695649341D-10 0.1448079937139D-10 + 0.9722622861678D-11 0.6496070631129D-11 0.4319651023999D-11 0.2858591661735D-11 + 0.1882503214946D-11 0.1233598363270D-11 0.8043412065319D-12 0.5218060130221D-12 + 0.3367856512696D-12 0.2162455335843D-12 0.1381220475631D-12 0.8775552000331D-13 diff --git a/Test/Fe16_non_collinear/v_fe16.11 b/Test/Fe16_non_collinear/v_fe16.11 new file mode 100755 index 000000000..f3c4e967f --- /dev/null +++ b/Test/Fe16_non_collinear/v_fe16.11 @@ -0,0 +1,1542 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Fe. + 2 0.0000000000000D+00 + LSMS: xx z= 26. xvalws= 5.22926 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728400909D+02-0.5199725115555D+02-0.5199721790459D+02-0.5199718425142D+02 +-0.5199715019116D+02-0.5199711571889D+02-0.5199708082964D+02-0.5199704551834D+02 +-0.5199700977990D+02-0.5199697360915D+02-0.5199693700086D+02-0.5199689994973D+02 +-0.5199686245042D+02-0.5199682449748D+02-0.5199678608545D+02-0.5199674720876D+02 +-0.5199670786180D+02-0.5199666803887D+02-0.5199662773421D+02-0.5199658694201D+02 +-0.5199654565635D+02-0.5199650387127D+02-0.5199646158073D+02-0.5199641877860D+02 +-0.5199637545872D+02-0.5199633161480D+02-0.5199628724051D+02-0.5199624232942D+02 +-0.5199619687506D+02-0.5199615087084D+02-0.5199610431012D+02-0.5199605718616D+02 +-0.5199600949214D+02-0.5199596122116D+02-0.5199591236626D+02-0.5199586292036D+02 +-0.5199581287632D+02-0.5199576222688D+02-0.5199571096474D+02-0.5199565908248D+02 +-0.5199560657259D+02-0.5199555342748D+02-0.5199549963947D+02-0.5199544520078D+02 +-0.5199539010352D+02-0.5199533433975D+02-0.5199527790139D+02-0.5199522078028D+02 +-0.5199516296816D+02-0.5199510445666D+02-0.5199504523733D+02-0.5199498530160D+02 +-0.5199492464081D+02-0.5199486324617D+02-0.5199480110883D+02-0.5199473821977D+02 +-0.5199467456990D+02-0.5199461015004D+02-0.5199454495085D+02-0.5199447896290D+02 +-0.5199441217666D+02-0.5199434458246D+02-0.5199427617052D+02-0.5199420693096D+02 +-0.5199413685375D+02-0.5199406592876D+02-0.5199399414573D+02-0.5199392149428D+02 +-0.5199384796390D+02-0.5199377354396D+02-0.5199369822368D+02-0.5199362199218D+02 +-0.5199354483843D+02-0.5199346675127D+02-0.5199338771940D+02-0.5199330773139D+02 +-0.5199322677567D+02-0.5199314484053D+02-0.5199306191412D+02-0.5199297798443D+02 +-0.5199289303934D+02-0.5199280706654D+02-0.5199272005361D+02-0.5199263198797D+02 +-0.5199254285685D+02-0.5199245264737D+02-0.5199236134649D+02-0.5199226894099D+02 +-0.5199217541751D+02-0.5199208076251D+02-0.5199198496230D+02-0.5199188800302D+02 +-0.5199178987064D+02-0.5199169055096D+02-0.5199159002963D+02-0.5199148829207D+02 +-0.5199138532359D+02-0.5199128110928D+02-0.5199117563407D+02-0.5199106888269D+02 +-0.5199096083969D+02-0.5199085148944D+02-0.5199074081613D+02-0.5199062880373D+02 +-0.5199051543604D+02-0.5199040069664D+02-0.5199028456895D+02-0.5199016703615D+02 +-0.5199004808124D+02-0.5198992768700D+02-0.5198980583600D+02-0.5198968251063D+02 +-0.5198955769302D+02-0.5198943136512D+02-0.5198930350863D+02-0.5198917410506D+02 +-0.5198904313569D+02-0.5198891058155D+02-0.5198877642345D+02-0.5198864064200D+02 +-0.5198850321751D+02-0.5198836413012D+02-0.5198822335968D+02-0.5198808088582D+02 +-0.5198793668793D+02-0.5198779074512D+02-0.5198764303627D+02-0.5198749354000D+02 +-0.5198734223467D+02-0.5198718909837D+02-0.5198703410894D+02-0.5198687724393D+02 +-0.5198671848065D+02-0.5198655779610D+02-0.5198639516703D+02-0.5198623056988D+02 +-0.5198606398084D+02-0.5198589537577D+02-0.5198572473026D+02-0.5198555201962D+02 +-0.5198537721883D+02-0.5198520030257D+02-0.5198502124524D+02-0.5198484002091D+02 +-0.5198465660333D+02-0.5198447096595D+02-0.5198428308188D+02-0.5198409292391D+02 +-0.5198390046450D+02-0.5198370567579D+02-0.5198350852955D+02-0.5198330899725D+02 +-0.5198310704998D+02-0.5198290265850D+02-0.5198269579318D+02-0.5198248642408D+02 +-0.5198227452087D+02-0.5198206005285D+02-0.5198184298896D+02-0.5198162329776D+02 +-0.5198140094741D+02-0.5198117590571D+02-0.5198094814005D+02-0.5198071761744D+02 +-0.5198048430449D+02-0.5198024816738D+02-0.5198000917191D+02-0.5197976728344D+02 +-0.5197952246692D+02-0.5197927468690D+02-0.5197902390745D+02-0.5197877009224D+02 +-0.5197851320449D+02-0.5197825320698D+02-0.5197799006201D+02-0.5197772373146D+02 +-0.5197745417673D+02-0.5197718135875D+02-0.5197690523796D+02-0.5197662577437D+02 +-0.5197634292744D+02-0.5197605665620D+02-0.5197576691913D+02-0.5197547367423D+02 +-0.5197517687900D+02-0.5197487649041D+02-0.5197457246489D+02-0.5197426475838D+02 +-0.5197395332627D+02-0.5197363812338D+02-0.5197331910403D+02-0.5197299622195D+02 +-0.5197266943031D+02-0.5197233868173D+02-0.5197200392824D+02-0.5197166512128D+02 +-0.5197132221174D+02-0.5197097514984D+02-0.5197062388528D+02-0.5197026836709D+02 +-0.5196990854370D+02-0.5196954436291D+02-0.5196917577189D+02-0.5196880271716D+02 +-0.5196842514461D+02-0.5196804299945D+02-0.5196765622622D+02-0.5196726476881D+02 +-0.5196686857041D+02-0.5196646757354D+02-0.5196606171998D+02-0.5196565095085D+02 +-0.5196523520651D+02-0.5196481442664D+02-0.5196438855015D+02-0.5196395751522D+02 +-0.5196352125928D+02-0.5196307971901D+02-0.5196263283028D+02-0.5196218052823D+02 +-0.5196172274718D+02-0.5196125942066D+02-0.5196079048138D+02-0.5196031586126D+02 +-0.5195983549135D+02-0.5195934930191D+02-0.5195885722231D+02-0.5195835918107D+02 +-0.5195785510585D+02-0.5195734492343D+02-0.5195682855969D+02-0.5195630593961D+02 +-0.5195577698725D+02-0.5195524162577D+02-0.5195469977736D+02-0.5195415136330D+02 +-0.5195359630387D+02-0.5195303451841D+02-0.5195246592528D+02-0.5195189044181D+02 +-0.5195130798435D+02-0.5195071846824D+02-0.5195012180777D+02-0.5194951791619D+02 +-0.5194890670569D+02-0.5194828808741D+02-0.5194766197137D+02-0.5194702826653D+02 +-0.5194638688071D+02-0.5194573772064D+02-0.5194508069188D+02-0.5194441569885D+02 +-0.5194374264482D+02-0.5194306143187D+02-0.5194237196087D+02-0.5194167413149D+02 +-0.5194096784220D+02-0.5194025299021D+02-0.5193952947146D+02-0.5193879718066D+02 +-0.5193805601119D+02-0.5193730585519D+02-0.5193654660341D+02-0.5193577814533D+02 +-0.5193500036904D+02-0.5193421316129D+02-0.5193341640742D+02-0.5193260999141D+02 +-0.5193179379578D+02-0.5193096770164D+02-0.5193013158865D+02-0.5192928533501D+02 +-0.5192842881739D+02-0.5192756191098D+02-0.5192668448947D+02-0.5192579642497D+02 +-0.5192489758803D+02-0.5192398784765D+02-0.5192306707119D+02-0.5192213512442D+02 +-0.5192119187145D+02-0.5192023717474D+02-0.5191927089505D+02-0.5191829289146D+02 +-0.5191730302133D+02-0.5191630114025D+02-0.5191528710207D+02-0.5191426075883D+02 +-0.5191322196077D+02-0.5191217055632D+02-0.5191110639202D+02-0.5191002931255D+02 +-0.5190893916069D+02-0.5190783577729D+02-0.5190671900126D+02-0.5190558866954D+02 +-0.5190444461705D+02-0.5190328667673D+02-0.5190211467945D+02-0.5190092845399D+02 +-0.5189972782709D+02-0.5189851262330D+02-0.5189728266508D+02-0.5189603777267D+02 +-0.5189477776415D+02-0.5189350245533D+02-0.5189221165981D+02-0.5189090518885D+02 +-0.5188958285145D+02-0.5188824445423D+02-0.5188688980147D+02-0.5188551869503D+02 +-0.5188413093435D+02-0.5188272631641D+02-0.5188130463569D+02-0.5187986568418D+02 +-0.5187840925129D+02-0.5187693512386D+02-0.5187544308611D+02-0.5187393291962D+02 +-0.5187240440329D+02-0.5187085731330D+02-0.5186929142309D+02-0.5186770650332D+02 +-0.5186610232183D+02-0.5186447864362D+02-0.5186283523081D+02-0.5186117184259D+02 +-0.5185948823518D+02-0.5185778416183D+02-0.5185605937277D+02-0.5185431361514D+02 +-0.5185254663297D+02-0.5185075816718D+02-0.5184894795548D+02-0.5184711573237D+02 +-0.5184526122909D+02-0.5184338417356D+02-0.5184148429039D+02-0.5183956130079D+02 +-0.5183761492255D+02-0.5183564486998D+02-0.5183365085389D+02-0.5183163258155D+02 +-0.5182958975660D+02-0.5182752207907D+02-0.5182542924529D+02-0.5182331094785D+02 +-0.5182116687559D+02-0.5181899671350D+02-0.5181680014270D+02-0.5181457684041D+02 +-0.5181232647986D+02-0.5181004873028D+02-0.5180774325683D+02-0.5180540972054D+02 +-0.5180304777830D+02-0.5180065708277D+02-0.5179823728232D+02-0.5179578802103D+02 +-0.5179330893860D+02-0.5179079967027D+02-0.5178825984684D+02-0.5178568909453D+02 +-0.5178308703501D+02-0.5178045328526D+02-0.5177778745757D+02-0.5177508915948D+02 +-0.5177235799366D+02-0.5176959355795D+02-0.5176679544522D+02-0.5176396324334D+02 +-0.5176109653512D+02-0.5175819489823D+02-0.5175525790517D+02-0.5175228512318D+02 +-0.5174927611419D+02-0.5174623043474D+02-0.5174314763592D+02-0.5174002726332D+02 +-0.5173686885694D+02-0.5173367195115D+02-0.5173043607457D+02-0.5172716075006D+02 +-0.5172384549462D+02-0.5172048981932D+02-0.5171709322923D+02-0.5171365522335D+02 +-0.5171017529452D+02-0.5170665292940D+02-0.5170308760833D+02-0.5169947880525D+02 +-0.5169582598771D+02-0.5169212861671D+02-0.5168838614662D+02-0.5168459802518D+02 +-0.5168076369333D+02-0.5167688258518D+02-0.5167295412791D+02-0.5166897774168D+02 +-0.5166495283960D+02-0.5166087882755D+02-0.5165675510418D+02-0.5165258106080D+02 +-0.5164835608125D+02-0.5164407954186D+02-0.5163975081138D+02-0.5163536925080D+02 +-0.5163093421337D+02-0.5162644504442D+02-0.5162190108131D+02-0.5161730165335D+02 +-0.5161264608164D+02-0.5160793367906D+02-0.5160316375011D+02-0.5159833559084D+02 +-0.5159344848875D+02-0.5158850172268D+02-0.5158349456272D+02-0.5157842627009D+02 +-0.5157329609709D+02-0.5156810328692D+02-0.5156284707365D+02-0.5155752668206D+02 +-0.5155214132756D+02-0.5154669021608D+02-0.5154117254396D+02-0.5153558749786D+02 +-0.5152993425461D+02-0.5152421198113D+02-0.5151841983433D+02-0.5151255696093D+02 +-0.5150662249744D+02-0.5150061557002D+02-0.5149453529428D+02-0.5148838077528D+02 +-0.5148215110737D+02-0.5147584537403D+02-0.5146946264782D+02-0.5146300199022D+02 +-0.5145646245151D+02-0.5144984307067D+02-0.5144314287525D+02-0.5143636088122D+02 +-0.5142949609291D+02-0.5142254750281D+02-0.5141551409151D+02-0.5140839482753D+02 +-0.5140118866721D+02-0.5139389455459D+02-0.5138651142128D+02-0.5137903818632D+02 +-0.5137147375605D+02-0.5136381702401D+02-0.5135606687078D+02-0.5134822216388D+02 +-0.5134028175756D+02-0.5133224449278D+02-0.5132410919702D+02-0.5131587468413D+02 +-0.5130753975423D+02-0.5129910319357D+02-0.5129056377438D+02-0.5128192025477D+02 +-0.5127317137854D+02-0.5126431587514D+02-0.5125535245940D+02-0.5124627983153D+02 +-0.5123709667690D+02-0.5122780166596D+02-0.5121839345403D+02-0.5120887068125D+02 +-0.5119923197240D+02-0.5118947593678D+02-0.5117960116805D+02-0.5116960624416D+02 +-0.5115948972712D+02-0.5114925016296D+02-0.5113888608154D+02-0.5112839599644D+02 +-0.5111777840483D+02-0.5110703178733D+02-0.5109615460788D+02-0.5108514531363D+02 +-0.5107400233480D+02-0.5106272408452D+02-0.5105130895877D+02-0.5103975533619D+02 +-0.5102806157801D+02-0.5101622602790D+02-0.5100424701185D+02-0.5099212283803D+02 +-0.5097985179674D+02-0.5096743216021D+02-0.5095486218256D+02-0.5094214009961D+02 +-0.5092926412887D+02-0.5091623246932D+02-0.5090304330139D+02-0.5088969478681D+02 +-0.5087618506855D+02-0.5086251227064D+02-0.5084867449820D+02-0.5083466983722D+02 +-0.5082049635455D+02-0.5080615209778D+02-0.5079163509518D+02-0.5077694335558D+02 +-0.5076207486834D+02-0.5074702760324D+02-0.5073179951042D+02-0.5071638852033D+02 +-0.5070079254364D+02-0.5068500947122D+02-0.5066903717403D+02-0.5065287350315D+02 +-0.5063651628963D+02-0.5061996334457D+02-0.5060321245898D+02-0.5058626140382D+02 +-0.5056910792994D+02-0.5055174976809D+02-0.5053418462884D+02-0.5051641020267D+02 +-0.5049842415989D+02-0.5048022415067D+02-0.5046180780505D+02-0.5044317273295D+02 +-0.5042431652422D+02-0.5040523674861D+02-0.5038593095586D+02-0.5036639667573D+02 +-0.5034663141803D+02-0.5032663267268D+02-0.5030639790981D+02-0.5028592457977D+02 +-0.5026521011328D+02-0.5024425192145D+02-0.5022304739591D+02-0.5020159390892D+02 +-0.5017988881346D+02-0.5015792944334D+02-0.5013571311336D+02-0.5011323711944D+02 +-0.5009049873873D+02-0.5006749522980D+02-0.5004422383280D+02-0.5002068176959D+02 +-0.4999686624397D+02-0.4997277444186D+02-0.4994840353146D+02-0.4992375066350D+02 +-0.4989881297144D+02-0.4987358757171D+02-0.4984807156389D+02-0.4982226203106D+02 +-0.4979615603991D+02-0.4976975064117D+02-0.4974304286974D+02-0.4971602974502D+02 +-0.4968870827126D+02-0.4966107543776D+02-0.4963312821924D+02-0.4960486357616D+02 +-0.4957627845502D+02-0.4954736978871D+02-0.4951813449683D+02-0.4948856948612D+02 +-0.4945867165071D+02-0.4942843787257D+02-0.4939786502185D+02-0.4936694995729D+02 +-0.4933568952659D+02-0.4930408056681D+02-0.4927211990478D+02-0.4923980435752D+02 +-0.4920713073265D+02-0.4917409582880D+02-0.4914069643607D+02-0.4910692933642D+02 +-0.4907279130416D+02-0.4903827910633D+02-0.4900338950319D+02-0.4896811924867D+02 +-0.4893246509079D+02-0.4889642377211D+02-0.4885999203021D+02-0.4882316659813D+02 +-0.4878594420482D+02-0.4874832157556D+02-0.4871029543247D+02-0.4867186249491D+02 +-0.4863301947995D+02-0.4859376310277D+02-0.4855409007715D+02-0.4851399711583D+02 +-0.4847348093100D+02-0.4843253823466D+02-0.4839116573905D+02-0.4834936015704D+02 +-0.4830711820251D+02-0.4826443659074D+02-0.4822131203876D+02-0.4817774126566D+02 +-0.4813372099301D+02-0.4808924794511D+02-0.4804431884930D+02-0.4799893043625D+02 +-0.4795307944023D+02-0.4790676259938D+02-0.4785997665588D+02-0.4781271835619D+02 +-0.4776498445124D+02-0.4771677169657D+02-0.4766807685247D+02-0.4761889668409D+02 +-0.4756922796153D+02-0.4751906745988D+02-0.4746841195927D+02-0.4741725824487D+02 +-0.4736560310686D+02-0.4731344334036D+02-0.4726077574537D+02-0.4720759712663D+02 +-0.4715390429349D+02-0.4709969405976D+02-0.4704496324345D+02-0.4698970866656D+02 +-0.4693392715482D+02-0.4687761553742D+02-0.4682077064661D+02-0.4676338931742D+02 +-0.4670546838725D+02-0.4664700469545D+02-0.4658799508292D+02-0.4652843639162D+02 +-0.4646832546412D+02-0.4640765914308D+02-0.4634643427075D+02-0.4628464768840D+02 +-0.4622229623583D+02-0.4615937675077D+02-0.4609588606835D+02-0.4603182102046D+02 +-0.4596717843531D+02-0.4590195513672D+02-0.4583614794369D+02-0.4576975366979D+02 +-0.4570276912265D+02-0.4563519110351D+02-0.4556701640665D+02-0.4549824181908D+02 +-0.4542886412007D+02-0.4535888008084D+02-0.4528828646428D+02-0.4521708002473D+02 +-0.4514525750785D+02-0.4507281565054D+02-0.4499975118097D+02-0.4492606081870D+02 +-0.4485174127497D+02-0.4477678925295D+02-0.4470120144833D+02-0.4462497454985D+02 +-0.4454810524011D+02-0.4447059019649D+02-0.4439242609219D+02-0.4431360959758D+02 +-0.4423413738159D+02-0.4415400611337D+02-0.4407321246418D+02-0.4399175310947D+02 +-0.4390962473114D+02-0.4382682402010D+02-0.4374334767908D+02-0.4365919242563D+02 +-0.4357435499539D+02-0.4348883214570D+02-0.4340262065933D+02-0.4331571734857D+02 +-0.4322811905962D+02-0.4313982267710D+02-0.4305082512897D+02-0.4296112339160D+02 +-0.4287071449512D+02-0.4277959552900D+02-0.4268776364786D+02-0.4259521607738D+02 +-0.4250195012053D+02-0.4240796316384D+02-0.4231325268378D+02-0.4221781625326D+02 +-0.4212165154821D+02-0.4202475635403D+02-0.4192712857207D+02-0.4182876622603D+02 +-0.4172966746809D+02-0.4162983058491D+02-0.4152925400326D+02-0.4142793629535D+02 +-0.4132587618362D+02-0.4122307254514D+02-0.4111952441526D+02-0.4101523099069D+02 +-0.4091019163177D+02-0.4080440586392D+02-0.4069787337814D+02-0.4059059403052D+02 +-0.4048256784069D+02-0.4037379498919D+02-0.4026427581359D+02-0.4015401080347D+02 +-0.4004300059408D+02-0.3993124595881D+02-0.3981874780047D+02-0.3970550714118D+02 +-0.3959152511128D+02-0.3947680293704D+02-0.3936134192738D+02-0.3924514345974D+02 +-0.3912820896514D+02-0.3901053991273D+02-0.3889213779388D+02-0.3877300410616D+02 +-0.3865314033730D+02-0.3853254794941D+02-0.3841122836384D+02-0.3828918294671D+02 +-0.3816641299561D+02-0.3804291972752D+02-0.3791870426838D+02-0.3779376764439D+02 +-0.3766811077544D+02-0.3754173447071D+02-0.3741463942662D+02-0.3728682622747D+02 +-0.3715829534855D+02-0.3702904716206D+02-0.3689908194568D+02-0.3676839989389D+02 +-0.3663700113198D+02-0.3650488573242D+02-0.3637205373385D+02-0.3623850516215D+02 +-0.3610424005352D+02-0.3596925847947D+02-0.3583356057318D+02-0.3569714655716D+02 +-0.3556001677183D+02-0.3542217170480D+02-0.3528361202035D+02-0.3514433858906D+02 +-0.3500435251706D+02-0.3486365517474D+02-0.3472224822457D+02-0.3458013364781D+02 +-0.3443731376977D+02-0.3429379128348D+02-0.3414956927154D+02-0.3400465122587D+02 +-0.3385904106531D+02-0.3371274315081D+02-0.3356576229817D+02-0.3341810378823D+02 +-0.3326977337430D+02-0.3312077728689D+02-0.3297112223571D+02-0.3282081540879D+02 +-0.3266986446883D+02-0.3251827754673D+02-0.3236606323235D+02-0.3221323056253D+02 +-0.3205978900636D+02-0.3190574844798D+02-0.3175111916665D+02-0.3159591181450D+02 +-0.3144013739192D+02-0.3128380722060D+02-0.3112693291460D+02-0.3096952634939D+02 +-0.3081159962896D+02-0.3065316505139D+02-0.3049423507279D+02-0.3033482226994D+02 +-0.3017493930171D+02-0.3001459886954D+02-0.2985381367711D+02-0.2969259638940D+02 +-0.2953095959141D+02-0.2936891574677D+02-0.2920647715631D+02-0.2904365591713D+02 +-0.2888046388202D+02-0.2871691261992D+02-0.2855301337730D+02-0.2838877704096D+02 +-0.2822421410237D+02-0.2805933462405D+02-0.2789414820796D+02-0.2772866396645D+02 +-0.2756289049588D+02-0.2739683585338D+02-0.2723050753680D+02-0.2706391246838D+02 +-0.2689705698223D+02-0.2672994681603D+02-0.2656258710714D+02-0.2639498239345D+02 +-0.2622713661917D+02-0.2605905314574D+02-0.2589073476829D+02-0.2572218373759D+02 +-0.2555340178776D+02-0.2538439017000D+02-0.2521514969218D+02-0.2504568076457D+02 +-0.2487598345161D+02-0.2470605752972D+02-0.2453590255090D+02-0.2436551791213D+02 +-0.2419490293015D+02-0.2402405692122D+02-0.2385297928550D+02-0.2368166959536D+02 +-0.2351012768684D+02-0.2333835375355D+02-0.2316634844181D+02-0.2299411294593D+02 +-0.2282164910224D+02-0.2264895948042D+02-0.2247604747020D+02-0.2230291736187D+02 +-0.2212957441833D+02-0.2195602493665D+02-0.2178227629680D+02-0.2160833699531D+02 +-0.2143421666157D+02-0.2125992605447D+02-0.2108547703736D+02-0.2091088252957D+02 +-0.2073615643311D+02-0.2056131353347D+02-0.2038636937454D+02-0.2021134010787D+02 +-0.2003624231780D+02-0.1986109282464D+02-0.1968590846923D+02-0.1951070588338D+02 +-0.1933550125113D+02-0.1916031006739D+02-0.1898514690054D+02-0.1881002516654D+02 +-0.1863495692195D+02-0.1845995268332D+02-0.1828502127992D+02-0.1811016974578D+02 +-0.1793540325598D+02-0.1776072511080D+02-0.1758613676940D+02-0.1741163793327D+02 +-0.1723722667775D+02-0.1706289962834D+02-0.1688865217702D+02-0.1671447873257D+02 +-0.1654037299789D+02-0.1636632826691D+02-0.1619233773325D+02-0.1601839480315D+02 +-0.1584449340510D+02-0.1567062828984D+02-0.1549679531468D+02-0.1532299170720D+02 +-0.1514921630451D+02-0.1497546976480D+02-0.1480175474939D+02-0.1462807607400D+02 +-0.1445444082871D+02-0.1428085846710D+02-0.1410734086517D+02-0.1393390235146D+02 +-0.1376055970989D+02-0.1358733215727D+02-0.1341424129731D+02-0.1324131105355D+02 +-0.1306856758305D+02-0.1289603917318D+02-0.1272375612351D+02-0.1255175061484D+02 +-0.1238005656736D+02-0.1220870948967D+02-0.1203774632043D+02-0.1186720526422D+02 +-0.1169712562320D+02-0.1152754762583D+02-0.1135851225403D+02-0.1119006106993D+02 +-0.1102223604329D+02-0.1085507938069D+02-0.1068863335731D+02-0.1052294015218D+02 +-0.1035804168776D+02-0.1019397947446D+02-0.1003079446077D+02-0.9868526889628D+01 +-0.9707216161554D+01-0.9546900704939D+01-0.9387617854023D+01-0.9229403734858D+01 +-0.9072293159592D+01-0.8916319529363D+01-0.8761514745993D+01-0.8607909132693D+01 +-0.8455531363896D+01-0.8304408404305D+01-0.8154565457227D+01-0.8006025922166D+01 +-0.7858811361682D+01-0.7712941477416D+01-0.7568434095199D+01-0.7425305159081D+01 +-0.7283568734134D+01-0.7143237017788D+01-0.7004320359504D+01-0.6866827288485D+01 +-0.6730764549154D+01-0.6596137144079D+01-0.6462948384000D+01-0.6331199944618D+01 +-0.6200891929738D+01-0.6072022940407D+01-0.5944590149603D+01-0.5818589382077D+01 +-0.5694015198898D+01-0.5570860986265D+01-0.5449119048124D+01-0.5328780702141D+01 +-0.5209836378552D+01-0.5092275721431D+01-0.4976087691897D+01-0.4861260672787D+01 +-0.4747782574321D+01-0.4635640940271D+01-0.4524823054180D+01-0.4415316045125D+01 +-0.4307106992579D+01-0.4200183029885D+01-0.4094531445869D+01-0.3990139784139D+01 +-0.3886995939600D+01-0.3785088251726D+01-0.3684405594148D+01-0.3584937460106D+01 +-0.3486674043348D+01-0.3389606314047D+01-0.3293726089348D+01-0.3199026098161D+01 +-0.3105500039868D+01-0.3013142636618D+01-0.2921949678952D+01-0.2831918064533D+01 +-0.2743045829849D+01-0.2655332174788D+01-0.2568777480092D+01-0.2483383317815D+01 +-0.2399152454962D+01-0.2316088850658D+01-0.2234197647300D+01-0.2153485156272D+01 +-0.2073958838965D+01-0.1995627283965D+01-0.1918500181413D+01-0.1842588295670D+01 +-0.1767903437522D+01-0.1694458437274D+01-0.1622267120110D+01-0.1551344285168D+01 +-0.1481705689753D+01-0.1413368040087D+01-0.1346348989896D+01-0.1280667148051D+01 +-0.1216342096293D+01-0.1153394417906D+01-0.1091845737986D+01-0.1031718775725D+01 +-0.9730374088849D+00-0.9158267504133D+00-0.8601132368937D+00-0.8059247283301D+00 +-0.7532906185600D+00-0.7022419554295D+00-0.6528115697324D+00-0.6050342118170D+00 +-0.5589466947046D+00-0.5145880425354D+00-0.4719996431596D+00-0.4312254037239D+00 +-0.3923119081554D+00-0.3553085755132D+00-0.3202678182603D+00-0.2872451996103D+00 +-0.2562993012896D+00 + 0.0000000000000D+00 + 1012 0.5229258479779D+01 + 0.2150742905406D-04 0.2201934401975D-04 0.2254344131081D-04 0.2308001074793D-04 + 0.2362934904336D-04 0.2419175996469D-04 0.2476755450247D-04 0.2535705104185D-04 + 0.2596057553829D-04 0.2657846169737D-04 0.2721105115901D-04 0.2785869368592D-04 + 0.2852174735659D-04 0.2920057876285D-04 0.2989556321214D-04 0.3060708493450D-04 + 0.3133553729459D-04 0.3208132300862D-04 0.3284485436652D-04 0.3362655345933D-04 + 0.3442685241199D-04 0.3524619362168D-04 0.3608503000175D-04 0.3694382523153D-04 + 0.3782305401197D-04 0.3872320232740D-04 0.3964476771351D-04 0.4058825953159D-04 + 0.4155419924941D-04 0.4254312072866D-04 0.4355557051923D-04 0.4459210816046D-04 + 0.4565330648961D-04 0.4673975195749D-04 0.4785204495171D-04 0.4899080012754D-04 + 0.5015664674660D-04 0.5135022902361D-04 0.5257220648130D-04 0.5382325431382D-04 + 0.5510406375867D-04 0.5641534247751D-04 0.5775781494596D-04 0.5913222285265D-04 + 0.6053932550771D-04 0.6197990026094D-04 0.6345474292991D-04 0.6496466823815D-04 + 0.6651051026378D-04 0.6809312289875D-04 0.6971338031887D-04 0.7137217746513D-04 + 0.7307043053626D-04 0.7480907749308D-04 0.7658907857468D-04 0.7841141682692D-04 + 0.8027709864336D-04 0.8218715431905D-04 0.8414263861740D-04 0.8614463135050D-04 + 0.8819423797310D-04 0.9029259019072D-04 0.9244084658213D-04 0.9464019323656D-04 + 0.9689184440594D-04 0.9919704317265D-04 0.1015570621330D-03 0.1039732040969D-03 + 0.1064468028041D-03 0.1089792236573D-03 0.1115718644728D-03 0.1142261562483D-03 + 0.1169435639500D-03 0.1197255873171D-03 0.1225737616857D-03 0.1254896588328D-03 + 0.1284748878395D-03 0.1315310959746D-03 0.1346599695998D-03 0.1378632350954D-03 + 0.1411426598085D-03 0.1445000530233D-03 0.1479372669546D-03 0.1514561977641D-03 + 0.1550587866019D-03 0.1587470206711D-03 0.1625229343189D-03 0.1663886101524D-03 + 0.1703461801815D-03 0.1743978269887D-03 0.1785457849256D-03 0.1827923413391D-03 + 0.1871398378251D-03 0.1915906715131D-03 0.1961472963799D-03 0.2008122245952D-03 + 0.2055880278984D-03 0.2104773390081D-03 0.2154828530649D-03 0.2206073291079D-03 + 0.2258535915864D-03 0.2312245319072D-03 0.2367231100177D-03 0.2423523560273D-03 + 0.2481153718665D-03 0.2540153329849D-03 0.2600554900897D-03 0.2662391709247D-03 + 0.2725697820915D-03 0.2790508109132D-03 0.2856858273428D-03 0.2924784859153D-03 + 0.2994325277470D-03 0.3065517825810D-03 0.3138401708812D-03 0.3213017059753D-03 + 0.3289404962488D-03 0.3367607473897D-03 0.3447667646870D-03 0.3529629553823D-03 + 0.3613538310777D-03 0.3699440101989D-03 0.3787382205180D-03 0.3877413017338D-03 + 0.3969582081140D-03 0.4063940111991D-03 0.4160539025692D-03 0.4259431966769D-03 + 0.4360673337456D-03 0.4464318827368D-03 0.4570425443864D-03 0.4679051543124D-03 + 0.4790256861959D-03 0.4904102550358D-03 0.5020651204812D-03 0.5139966902408D-03 + 0.5262115235724D-03 0.5387163348549D-03 0.5515179972435D-03 0.5646235464104D-03 + 0.5780401843732D-03 0.5917752834137D-03 0.6058363900874D-03 0.6202312293275D-03 + 0.6349677086450D-03 0.6500539224267D-03 0.6654981563344D-03 0.6813088918062D-03 + 0.6974948106637D-03 0.7140647998269D-03 0.7310279561389D-03 0.7483935913040D-03 + 0.7661712369406D-03 0.7843706497523D-03 0.8030018168203D-03 0.8220749610184D-03 + 0.8416005465556D-03 0.8615892846469D-03 0.8820521393172D-03 0.9030003333406D-03 + 0.9244453543176D-03 0.9463989608946D-03 0.9688731891282D-03 0.9918803589975D-03 + 0.1015433081069D-02 0.1039544263315D-02 0.1064227118095D-02 0.1089495169290D-02 + 0.1115362259619D-02 0.1141842558105D-02 0.1168950567737D-02 0.1196701133289D-02 + 0.1225109449338D-02 0.1254191068456D-02 0.1283961909601D-02 0.1314438266696D-02 + 0.1345636817413D-02 0.1377574632157D-02 0.1410269183260D-02 0.1443738354387D-02 + 0.1478000450161D-02 0.1513074206015D-02 0.1548978798262D-02 0.1585733854409D-02 + 0.1623359463706D-02 0.1661876187936D-02 0.1701305072458D-02 0.1741667657505D-02 + 0.1782985989747D-02 0.1825282634108D-02 0.1868580685877D-02 0.1912903783076D-02 + 0.1958276119133D-02 0.2004722455835D-02 0.2052268136585D-02 0.2100939099962D-02 + 0.2150761893598D-02 0.2201763688371D-02 0.2253972292925D-02 0.2307416168524D-02 + 0.2362124444253D-02 0.2418126932561D-02 0.2475454145167D-02 0.2534137309329D-02 + 0.2594208384486D-02 0.2655700079287D-02 0.2718645869002D-02 0.2783080013344D-02 + 0.2849037574687D-02 0.2916554436715D-02 0.2985667323484D-02 0.3056413818931D-02 + 0.3128832386828D-02 0.3202962391187D-02 0.3278844117136D-02 0.3356518792272D-02 + 0.3436028608501D-02 0.3517416744371D-02 0.3600727387929D-02 0.3686005760082D-02 + 0.3773298138499D-02 0.3862651882061D-02 0.3954115455860D-02 0.4047738456768D-02 + 0.4143571639594D-02 0.4241666943825D-02 0.4342077520985D-02 0.4444857762604D-02 + 0.4550063328833D-02 0.4657751177697D-02 0.4767979595018D-02 0.4880808225009D-02 + 0.4996298101570D-02 0.5114511680279D-02 0.5235512871115D-02 0.5359367071918D-02 + 0.5486141202598D-02 0.5615903740128D-02 0.5748724754308D-02 0.5884675944352D-02 + 0.6023830676284D-02 0.6166264021183D-02 0.6312052794284D-02 0.6461275594959D-02 + 0.6614012847588D-02 0.6770346843357D-02 0.6930361782982D-02 0.7094143820394D-02 + 0.7261781107400D-02 0.7433363839342D-02 0.7608984301773D-02 0.7788736918176D-02 + 0.7972718298747D-02 0.8161027290261D-02 0.8353765027049D-02 0.8551034983111D-02 + 0.8752943025377D-02 0.8959597468160D-02 0.9171109128811D-02 0.9387591384603D-02 + 0.9609160230877D-02 0.9835934340477D-02 0.1006803512449D-01 0.1030558679431D-01 + 0.1054871642512D-01 0.1079755402073D-01 0.1105223257982D-01 0.1131288816368D-01 + 0.1157965996544D-01 0.1185269038080D-01 0.1213212508026D-01 0.1241811308303D-01 + 0.1271080683248D-01 0.1301036227325D-01 0.1331693893004D-01 0.1363069998813D-01 + 0.1395181237567D-01 0.1428044684765D-01 0.1461677807184D-01 0.1496098471648D-01 + 0.1531324953990D-01 0.1567375948211D-01 0.1604270575828D-01 0.1642028395434D-01 + 0.1680669412453D-01 0.1720214089116D-01 0.1760683354637D-01 0.1802098615621D-01 + 0.1844481766683D-01 0.1887855201303D-01 0.1932241822902D-01 0.1977665056168D-01 + 0.2024148858606D-01 0.2071717732349D-01 0.2120396736203D-01 0.2170211497964D-01 + 0.2221188226980D-01 0.2273353726988D-01 0.2326735409215D-01 0.2381361305754D-01 + 0.2437260083229D-01 0.2494461056731D-01 0.2552994204062D-01 0.2612890180262D-01 + 0.2674180332442D-01 0.2736896714935D-01 0.2801072104743D-01 0.2866740017320D-01 + 0.2933934722669D-01 0.3002691261781D-01 0.3073045463399D-01 0.3145033961141D-01 + 0.3218694210958D-01 0.3294064508962D-01 0.3371184009606D-01 0.3450092744243D-01 + 0.3530831640054D-01 0.3613442539362D-01 0.3697968219334D-01 0.3784452412086D-01 + 0.3872939825181D-01 0.3963476162544D-01 0.4056108145796D-01 0.4150883536008D-01 + 0.4247851155891D-01 0.4347060912422D-01 0.4448563819924D-01 0.4552412023590D-01 + 0.4658658823475D-01 0.4767358698962D-01 0.4878567333696D-01 0.4992341641008D-01 + 0.5108739789835D-01 0.5227821231135D-01 0.5349646724813D-01 0.5474278367169D-01 + 0.5601779618862D-01 0.5732215333417D-01 0.5865651786266D-01 0.6002156704340D-01 + 0.6141799296226D-01 0.6284650282880D-01 0.6430781928923D-01 0.6580268074515D-01 + 0.6733184167825D-01 0.6889607298100D-01 0.7049616229337D-01 0.7213291434581D-01 + 0.7380715130845D-01 0.7551971314661D-01 0.7727145798277D-01 0.7906326246509D-01 + 0.8089602214242D-01 0.8277065184608D-01 0.8468808607842D-01 0.8664927940812D-01 + 0.8865520687255D-01 0.9070686438707D-01 0.9280526916144D-01 0.9495146012343D-01 + 0.9714649834967D-01 0.9939146750384D-01 0.1016874742823D+00 0.1040356488672D+00 + 0.1064371453872D+00 0.1088931423856D+00 0.1114048432967D+00 0.1139734769295D+00 + 0.1166002979593D+00 0.1192865874273D+00 0.1220336532487D+00 0.1248428307276D+00 + 0.1277154830815D+00 0.1306530019730D+00 0.1336568080498D+00 0.1367283514936D+00 + 0.1398691125766D+00 0.1430806022269D+00 0.1463643626021D+00 0.1497219676713D+00 + 0.1531550238057D+00 0.1566651703780D+00 0.1602540803695D+00 0.1639234609870D+00 + 0.1676750542871D+00 0.1715106378098D+00 0.1754320252209D+00 0.1794410669619D+00 + 0.1835396509100D+00 0.1877297030455D+00 0.1920131881282D+00 0.1963921103827D+00 + 0.2008685141914D+00 0.2054444847966D+00 0.2101221490109D+00 0.2149036759359D+00 + 0.2197912776889D+00 0.2247872101386D+00 0.2298937736476D+00 0.2351133138248D+00 + 0.2404482222837D+00 0.2459009374100D+00 0.2514739451362D+00 0.2571697797240D+00 + 0.2629910245536D+00 0.2689403129212D+00 0.2750203288421D+00 0.2812338078623D+00 + 0.2875835378751D+00 0.2940723599454D+00 0.3007031691395D+00 0.3074789153608D+00 + 0.3144026041916D+00 0.3214772977396D+00 0.3287061154899D+00 0.3360922351618D+00 + 0.3436388935694D+00 0.3513493874868D+00 0.3592270745164D+00 0.3672753739607D+00 + 0.3754977676972D+00 0.3838978010545D+00 0.3924790836915D+00 0.4012452904770D+00 + 0.4102001623706D+00 0.4193475073036D+00 0.4286912010595D+00 0.4382351881538D+00 + 0.4479834827120D+00 0.4579401693452D+00 0.4681094040228D+00 0.4784954149418D+00 + 0.4891025033910D+00 0.4999350446102D+00 0.5109974886435D+00 0.5222943611853D+00 + 0.5338302644183D+00 0.5456098778426D+00 0.5576379590956D+00 0.5699193447601D+00 + 0.5824589511607D+00 0.5952617751475D+00 0.6083328948654D+00 0.6216774705074D+00 + 0.6353007450521D+00 0.6492080449824D+00 0.6634047809857D+00 0.6778964486325D+00 + 0.6926886290333D+00 0.7077869894721D+00 0.7231972840138D+00 0.7389253540860D+00 + 0.7549771290311D+00 0.7713586266289D+00 0.7880759535873D+00 0.8051353059985D+00 + 0.8225429697604D+00 0.8403053209599D+00 0.8584288262158D+00 0.8769200429817D+00 + 0.8957856198031D+00 0.9150322965294D+00 0.9346669044774D+00 0.9546963665439D+00 + 0.9751276972649D+00 0.9959680028197D+00 0.1017224480976D+01 0.1038904420974D+01 + 0.1061015203349D+01 0.1083564299686D+01 0.1106559272300D+01 0.1130007773859D+01 + 0.1153917546912D+01 0.1178296423354D+01 0.1203152323804D+01 0.1228493256899D+01 + 0.1254327318495D+01 0.1280662690787D+01 0.1307507641324D+01 0.1334870521934D+01 + 0.1362759767535D+01 0.1391183894856D+01 0.1420151501035D+01 0.1449671262109D+01 + 0.1479751931386D+01 0.1510402337698D+01 0.1541631383520D+01 0.1573448042969D+01 + 0.1605861359662D+01 0.1638880444440D+01 0.1672514472946D+01 0.1706772683055D+01 + 0.1741664372155D+01 0.1777198894269D+01 0.1813385657016D+01 0.1850234118409D+01 + 0.1887753783475D+01 0.1925954200705D+01 0.1964844958324D+01 0.2004435680370D+01 + 0.2044736022586D+01 0.2085755668115D+01 0.2127504322996D+01 0.2169991711448D+01 + 0.2213227570952D+01 0.2257221647108D+01 0.2301983688271D+01 0.2347523439972D+01 + 0.2393850639086D+01 0.2440975007782D+01 0.2488906247220D+01 0.2537654031002D+01 + 0.2587227998372D+01 0.2637637747157D+01 0.2688892826442D+01 0.2741002728983D+01 + 0.2793976883341D+01 0.2847824645743D+01 0.2902555291652D+01 0.2958178007063D+01 + 0.3014701879494D+01 0.3072135888684D+01 0.3130488897001D+01 0.3189769639525D+01 + 0.3249986713841D+01 0.3311148569513D+01 0.3373263497233D+01 0.3436339617667D+01 + 0.3500384869964D+01 0.3565406999951D+01 0.3631413547991D+01 0.3698411836514D+01 + 0.3766408957221D+01 0.3835411757947D+01 0.3905426829193D+01 0.3976460490322D+01 + 0.4048518775419D+01 0.4121607418815D+01 0.4195731840277D+01 0.4270897129857D+01 + 0.4347108032420D+01 0.4424368931831D+01 0.4502683834816D+01 0.4582056354503D+01 + 0.4662489693636D+01 0.4743986627475D+01 0.4826549486387D+01 0.4910180138127D+01 + 0.4994879969825D+01 0.5080649869681D+01 0.5167490208373D+01 0.5255400820202D+01 + 0.5344380983962D+01 0.5434429403565D+01 0.5525544188426D+01 0.5617722833617D+01 + 0.5710962199815D+01 0.5805258493041D+01 0.5900607244231D+01 0.5997003288635D+01 + 0.6094440745069D+01 0.6192912995049D+01 0.6292412661814D+01 0.6392931589269D+01 + 0.6494460820874D+01 0.6596990578488D+01 0.6700510241224D+01 0.6805008324307D+01 + 0.6910472457995D+01 0.7016889366579D+01 0.7124244847491D+01 0.7232523750568D+01 + 0.7341709957494D+01 0.7451786361463D+01 0.7562734847107D+01 0.7674536270712D+01 + 0.7787170440791D+01 0.7900616099026D+01 0.8014850901658D+01 0.8129851401340D+01 + 0.8245593029526D+01 0.8362050079436D+01 0.8479195689649D+01 0.8597001828383D+01 + 0.8715439278509D+01 0.8834477623371D+01 0.8954085233454D+01 0.9074229253973D+01 + 0.9194875593440D+01 0.9315988913276D+01 0.9437532618530D+01 0.9559468849772D+01 + 0.9681758476237D+01 0.9804361090277D+01 0.9927235003199D+01 0.1005033724256D+02 + 0.1017362355101D+02 0.1029704838669D+02 0.1042056492540D+02 0.1054412506444D+02 + 0.1066767942831D+02 0.1079117737637D+02 0.1091456701244D+02 0.1103779519646D+02 + 0.1116080755839D+02 0.1128354851420D+02 0.1140596128432D+02 0.1152798791434D+02 + 0.1164956929827D+02 0.1177064520433D+02 0.1189115430327D+02 0.1201103419951D+02 + 0.1213022146500D+02 0.1224865167586D+02 0.1236625945201D+02 0.1248297849976D+02 + 0.1259874165744D+02 0.1271348094411D+02 0.1282712761148D+02 0.1293961219902D+02 + 0.1305086459240D+02 0.1316081408518D+02 0.1326938944391D+02 0.1337651897664D+02 + 0.1348213060491D+02 0.1358615193909D+02 0.1368851035736D+02 0.1378913308811D+02 + 0.1388794729589D+02 0.1398488017086D+02 0.1407985902179D+02 0.1417281137257D+02 + 0.1426366506212D+02 0.1435234834789D+02 0.1443879001264D+02 0.1452291947466D+02 + 0.1460466690129D+02 0.1468396332564D+02 0.1476074076649D+02 0.1483493235126D+02 + 0.1490647244192D+02 0.1497529676373D+02 0.1504134253675D+02 0.1510454860984D+02 + 0.1516485559720D+02 0.1522220601698D+02 0.1527654443219D+02 0.1532781759325D+02 + 0.1537597458241D+02 0.1542096695946D+02 0.1546274890874D+02 0.1550127738702D+02 + 0.1553651227211D+02 0.1556841651189D+02 0.1559695627334D+02 0.1562210109145D+02 + 0.1564382401753D+02 0.1566210176664D+02 0.1567691486377D+02 0.1568824778841D+02 + 0.1569608911712D+02 0.1570043166360D+02 0.1570127261607D+02 0.1569861367129D+02 + 0.1569246116496D+02 0.1568282619787D+02 0.1566972475757D+02 0.1565317783486D+02 + 0.1563321153475D+02 0.1560985718135D+02 0.1558315141624D+02 0.1555313628970D+02 + 0.1551985934445D+02 0.1548337369123D+02 0.1544373807583D+02 0.1540101693692D+02 + 0.1535528045436D+02 0.1530660458716D+02 0.1525507110098D+02 0.1520076758423D+02 + 0.1514378745267D+02 0.1508422994170D+02 0.1502220008605D+02 0.1495780868635D+02 + 0.1489117226206D+02 0.1482241299046D+02 0.1475165863115D+02 0.1467904243575D+02 + 0.1460470304238D+02 0.1452878435463D+02 0.1445143540465D+02 0.1437281020013D+02 + 0.1429306755483D+02 0.1421237090260D+02 0.1413088809452D+02 0.1404879117925D+02 + 0.1396625616625D+02 0.1388346277207D+02 0.1380059414952D+02 0.1371783659988D+02 + 0.1363537926825D+02 0.1355341382212D+02 0.1347213411351D+02 0.1339173582480D+02 + 0.1331241609871D+02 0.1323437315279D+02 0.1315780587881D+02 0.1308291342766D+02 + 0.1300989478035D+02 0.1293894830568D+02 0.1287027130535D+02 0.1280405954732D+02 + 0.1274050678825D+02 0.1267980428593D+02 0.1262214030269D+02 0.1256769960087D+02 + 0.1251666293145D+02 0.1246920651702D+02 0.1242550153038D+02 0.1238571356999D+02 + 0.1235000213372D+02 0.1231852009235D+02 0.1229141316414D+02 0.1226881939222D+02 + 0.1225086862623D+02 0.1223768200985D+02 0.1222937147599D+02 0.1222603925117D+02 + 0.1222777737106D+02 0.1223466720868D+02 0.1224677901729D+02 0.1226417148958D+02 + 0.1228689133517D+02 0.1231497287802D+02 0.1234843767581D+02 0.1238729416297D+02 + 0.1243153731911D+02 0.1248114836487D+02 0.1253609448665D+02 0.1259632859227D+02 + 0.1266178909890D+02 0.1273239975523D+02 0.1280806949923D+02 0.1288869235315D+02 + 0.1297414735711D+02 0.1306429854274D+02 0.1315899494816D+02 0.1325807067533D+02 + 0.1336134499111D+02 0.1346862247282D+02 0.1357969319917D+02 0.1369433298744D+02 + 0.1381230367740D+02 0.1393335346243D+02 0.1405721726828D+02 0.1418361717951D+02 + 0.1431226291376D+02 0.1444285234362D+02 0.1457507206581D+02 0.1470859801733D+02 + 0.1484309613763D+02 0.1497822307639D+02 0.1511362694548D+02 0.1524894811426D+02 + 0.1538382004666D+02 0.1551787017849D+02 0.1565072083339D+02 0.1578199017530D+02 + 0.1591129319546D+02 0.1603824273170D+02 0.1616245051740D+02 0.1628352825765D+02 + 0.1640108872963D+02 0.1651474690448D+02 0.1662412108723D+02 0.1672883407174D+02 + 0.1682851430716D+02 0.1692279707220D+02 0.1701132565381D+02 0.1709375252614D+02 + 0.1716974052608D+02 0.1723896402125D+02 0.1730111006644D+02 0.1735587954416D+02 + 0.1740298828530D+02 0.1744216816538D+02 0.1747316817225D+02 0.1749575544089D+02 + 0.1750971625093D+02 0.1751485698260D+02 0.1751100502688D+02 0.1749800964559D+02 + 0.1747574277733D+02 0.1744409978499D+02 0.1740300014123D+02 0.1735238804766D+02 + 0.1729223298439D+02 0.1722253018618D+02 0.1714330104180D+02 0.1705459341368D+02 + 0.1695648187457D+02 0.1684906785873D+02 0.1673247972505D+02 0.1660687272995D+02 + 0.1647242890818D+02 0.1632935685981D+02 0.1617789144222D+02 0.1601829336618D+02 + 0.1585084869528D+02 0.1567586824865D+02 0.1549368690699D+02 0.1530466282265D+02 + 0.1510917653451D+02 0.1490762998916D+02 0.1470044547022D+02 0.1448806443791D+02 + 0.1427094628160D+02 0.1404956698852D+02 0.1382441773199D+02 0.1359600338336D+02 + 0.1336484095192D+02 0.1313145795774D+02 0.1289639074258D+02 0.1266018272468D+02 + 0.1242338260337D+02 0.1218654252002D+02 0.1195021618209D+02 0.1171495695744D+02 + 0.1148131594627D+02 0.1124984003849D+02 0.1102106996440D+02 0.1079553834688D+02 + 0.1057376776347D+02 0.1035626882667D+02 0.1014353829125D+02 0.9936057196884D+01 + 0.9734289054994D+01 0.9538678088120D+01 0.9349647530399D+01 0.9167597997384D+01 + 0.8992905933301D+01 0.8825922143594D+01 0.8666970420224D+01 0.8516346266999D+01 + 0.8374315731611D+01 0.8241114350747D+01 0.8116946214096D+01 0.8001983152570D+01 + 0.7896364055459D+01 0.7800194320670D+01 0.7713545441561D+01 0.7636454733225D+01 + 0.7568925200401D+01 0.7510925548528D+01 0.7462390338698D+01 0.7423220286625D+01 + 0.7393282704950D+01 0.7372412087556D+01 0.7360410833787D+01 0.7357050109802D+01 + 0.7362070843542D+01 0.7375184849138D+01 0.7396076075866D+01 0.7424401976120D+01 + 0.7459794986211D+01 0.7501864113185D+01 0.7550196620265D+01 0.7604359802945D+01 + 0.7663902847256D+01 0.7728358761219D+01 0.7797246370063D+01 0.7870072365405D+01 + 0.7946333398216D+01 0.8025518205140D+01 0.8107109757504D+01 0.8190587422172D+01 + 0.8275429123337D+01 0.8361113494303D+01 0.8447122008353D+01 0.8532941077928D+01 + 0.8618064111536D+01 0.8701993518075D+01 0.8784242648578D+01 0.8864337665829D+01 + 0.8941819332731D+01 0.9016244710878D+01 0.9087188761372D+01 0.9154245840560D+01 + 0.9217031084099D+01 0.9275181673474D+01 0.9328357979881D+01 0.9376244581215D+01 + 0.9418551148709D+01 0.9455013200639D+01 0.9485392721360D+01 0.9509478644797D+01 + 0.9527087202359D+01 0.9538062136102D+01 0.9542274778747D+01 0.9539624002998D+01 + 0.9530036043300D+01 0.9513464193959D+01 0.9489888388159D+01 0.9459314663078D+01 + 0.9421774516843D+01 0.9377324163609D+01 0.9326043693467D+01 0.9268036144314D+01 + 0.9203426493115D+01 0.9132360574297D+01 0.9055003933175D+01 0.8971540622481D+01 + 0.8882171950151D+01 0.8787115186520D+01 0.8686602239071D+01 0.8580878302773D+01 + 0.8470200493895D+01 0.8354836475027D+01 0.8235063078754D+01 0.8111164937189D+01 + 0.7983433124252D+01 0.7852163817216D+01 0.7717656983696D+01 0.7580215099831D+01 + 0.7440141905014D+01 0.7297741198086D+01 0.7153315679440D+01 0.7007165843079D+01 + 0.6859588922166D+01 0.6710877891167D+01 0.6561320527250D+01 0.6411198533128D+01 + 0.6260786723101D+01 0.6110352273646D+01 0.5960154039458D+01 0.5810441935471D+01 + 0.5661456384987D+01 0.5513427833700D+01 0.5366576329042D+01 0.5221111163955D+01 + 0.5077230583918D+01 0.4935121555751D+01 0.4794959596475D+01 0.4656908660288D+01 + 0.4521121081498D+01 0.4387737571052D+01 0.4256887264186D+01 0.4128687816522D+01 + 0.4003245545873D+01 0.3880655616880D+01 0.3761002265561D+01 0.3644359060777D+01 + 0.3530789199588D+01 0.3420345833472D+01 0.3313072422343D+01 0.3209003113371D+01 + 0.3108163141592D+01 0.3010569249384D+01 0.2916230121919D+01 0.2825146835796D+01 + 0.2737313318133D+01 0.2652716813508D+01 0.2571338356232D+01 0.2493153245580D+01 + 0.2418131521695D+01 0.2346238440047D+01 0.2277434942461D+01 0.2211678122838D+01 + 0.2148921685899D+01 0.2089116397376D+01 0.2032210524266D+01 0.1978150263893D+01 + 0.1926880160684D+01 0.1878343509721D+01 0.1832482746269D+01 0.1789239820638D+01 + 0.1748556557871D+01 0.1710375001879D+01 0.1674637743804D+01 0.1641288234472D+01 + 0.1610271080956D+01 0.1581532327338D+01 0.1555019719890D+01 0.1530682956958D+01 + 0.1508473923914D+01 0.1488346913611D+01 0.1470258832820D+01 0.1454169395155D+01 + 0.1440041301042D+01 0.1427840405245D+01 0.1417535872504D+01 0.1409100321753D+01 + 0.1402509959377D+01 0.1397744701874D+01 0.1394788288181D+01 0.1393628381826D+01 + 0.1394256662892D+01 0.1396668909610D+01 0.1400865069190D+01 0.1406849317222D+01 + 0.1414629369614D+01 0.1424336942263D+01 0.1436096575202D+01 0.1449912447024D+01 + 0.1465794674727D+01 0.1483759333931D+01 0.1503828494539D+01 0.1526030271798D+01 + 0.1550398892649D+01 0.1576974777196D+01 0.1605804635055D+01 0.1636941576215D+01 + 7 1012 + 1 0 -1 -511.89194 + 2 0 -1 -58.90181 + 2 1 1 -50.68932 + 2 1 -2 -49.77537 + 3 0 -1 -5.73317 + 3 1 1 -3.34334 + 3 1 -2 -3.22919 + 0.2122975645015D-04 0.2173507709867D-04 0.2225242316243D-04 0.2278208072829D-04 + 0.2332434268594D-04 0.2387950888954D-04 0.2444788632325D-04 0.2502978927059D-04 + 0.2562553948791D-04 0.2623546638192D-04 0.2685990719144D-04 0.2749920717353D-04 + 0.2815371979393D-04 0.2882380692207D-04 0.2950983903075D-04 0.3021219540050D-04 + 0.3093126432877D-04 0.3166744334418D-04 0.3242113942573D-04 0.3319276922733D-04 + 0.3398275930755D-04 0.3479154636487D-04 0.3561957747857D-04 0.3646731035519D-04 + 0.3733521358096D-04 0.3822376688016D-04 0.3913346137963D-04 0.4006479987955D-04 + 0.4101829713060D-04 0.4199448011777D-04 0.4299388835081D-04 0.4401707416166D-04 + 0.4506460300883D-04 0.4613705378910D-04 0.4723501915650D-04 0.4835910584899D-04 + 0.4950993502270D-04 0.5068814259429D-04 0.5189437959126D-04 0.5312931251066D-04 + 0.5439362368626D-04 0.5568801166444D-04 0.5701319158897D-04 0.5836989559491D-04 + 0.5975887321186D-04 0.6118089177673D-04 0.6263673685632D-04 0.6412721267990D-04 + 0.6565314258201D-04 0.6721536945580D-04 0.6881475621705D-04 0.7045218627922D-04 + 0.7212856403973D-04 0.7384481537777D-04 0.7560188816385D-04 0.7740075278149D-04 + 0.7924240266119D-04 0.8112785482706D-04 0.8305815045642D-04 0.8503435545263D-04 + 0.8705756103141D-04 0.8912888432116D-04 0.9124946897738D-04 0.9342048581165D-04 + 0.9564313343555D-04 0.9791863891974D-04 0.1002482584687D-03 0.1026332781112D-03 + 0.1050750144077D-03 0.1075748151735D-03 0.1101340602203D-03 0.1127541621137D-03 + 0.1154365669501D-03 0.1181827551510D-03 0.1209942422769D-03 0.1238725798590D-03 + 0.1268193562527D-03 0.1298361975089D-03 0.1329247682680D-03 0.1360867726735D-03 + 0.1393239553083D-03 0.1426381021518D-03 0.1460310415612D-03 0.1495046452749D-03 + 0.1530608294397D-03 0.1567015556625D-03 0.1604288320871D-03 0.1642447144955D-03 + 0.1681513074364D-03 0.1721507653792D-03 0.1762452938963D-03 0.1804371508722D-03 + 0.1847286477421D-03 0.1891221507592D-03 0.1936200822920D-03 0.1982249221522D-03 + 0.2029392089542D-03 0.2077655415060D-03 0.2127065802334D-03 0.2177650486382D-03 + 0.2229437347894D-03 0.2282454928513D-03 0.2336732446459D-03 0.2392299812538D-03 + 0.2449187646513D-03 0.2507427293871D-03 0.2567050842979D-03 0.2628091142650D-03 + 0.2690581820118D-03 0.2754557299435D-03 0.2820052820308D-03 0.2887104457371D-03 + 0.2955749139921D-03 0.3026024672103D-03 0.3097969753590D-03 0.3171624000731D-03 + 0.3247027968207D-03 0.3324223171196D-03 0.3403252108055D-03 0.3484158283536D-03 + 0.3566986232552D-03 0.3651781544500D-03 0.3738590888149D-03 0.3827462037126D-03 + 0.3918443895988D-03 0.4011586526914D-03 0.4106941177020D-03 0.4204560306321D-03 + 0.4304497616342D-03 0.4406808079408D-03 0.4511547968612D-03 0.4618774888502D-03 + 0.4728547806468D-03 0.4840927084883D-03 0.4955974513988D-03 0.5073753345551D-03 + 0.5194328327314D-03 0.5317765738249D-03 0.5444133424641D-03 0.5573500837015D-03 + 0.5705939067925D-03 0.5841520890639D-03 0.5980320798714D-03 0.6122415046513D-03 + 0.6267881690659D-03 0.6416800632466D-03 0.6569253661363D-03 0.6725324499326D-03 + 0.6885098846360D-03 0.7048664427037D-03 0.7216111038125D-03 0.7387530597330D-03 + 0.7563017193176D-03 0.7742667136049D-03 0.7926579010441D-03 0.8114853728404D-03 + 0.8307594584254D-03 0.8504907310562D-03 0.8706900135433D-03 0.8913683841142D-03 + 0.9125371824119D-03 0.9342080156346D-03 0.9563927648179D-03 0.9791035912634D-03 + 0.1002352943117D-02 0.1026153562102D-02 0.1050518490405D-02 0.1075461077728D-02 + 0.1100994988496D-02 0.1127134209246D-02 0.1153893056171D-02 0.1181286182852D-02 + 0.1209328588167D-02 0.1238035624379D-02 0.1267423005415D-02 0.1297506815344D-02 + 0.1328303517037D-02 0.1359829961041D-02 0.1392103394654D-02 0.1425141471212D-02 + 0.1458962259585D-02 0.1493584253904D-02 0.1529026383504D-02 0.1565308023106D-02 + 0.1602449003221D-02 0.1640469620811D-02 0.1679390650189D-02 0.1719233354165D-02 + 0.1760019495464D-02 0.1801771348394D-02 0.1844511710794D-02 0.1888263916250D-02 + 0.1933051846599D-02 0.1978899944720D-02 0.2025833227614D-02 0.2073877299798D-02 + 0.2123058366995D-02 0.2173403250151D-02 0.2224939399761D-02 0.2277694910540D-02 + 0.2331698536421D-02 0.2386979705903D-02 0.2443568537747D-02 0.2501495857040D-02 + 0.2560793211623D-02 0.2621492888896D-02 0.2683627933011D-02 0.2747232162458D-02 + 0.2812340188056D-02 0.2878987431352D-02 0.2947210143447D-02 0.3017045424251D-02 + 0.3088531242177D-02 0.3161706454285D-02 0.3236610826892D-02 0.3313285056646D-02 + 0.3391770792086D-02 0.3472110655691D-02 0.3554348266436D-02 0.3638528262858D-02 + 0.3724696326649D-02 0.3812899206788D-02 0.3903184744224D-02 0.3995601897109D-02 + 0.4090200766624D-02 0.4187032623373D-02 0.4286149934389D-02 0.4387606390746D-02 + 0.4491456935804D-02 0.4597757794082D-02 0.4706566500803D-02 0.4817941932088D-02 + 0.4931944335851D-02 0.5048635363379D-02 0.5168078101634D-02 0.5290337106279D-02 + 0.5415478435454D-02 0.5543569684307D-02 0.5674680020311D-02 0.5808880219367D-02 + 0.5946242702730D-02 0.6086841574754D-02 0.6230752661494D-02 0.6378053550168D-02 + 0.6528823629508D-02 0.6683144131013D-02 0.6841098171130D-02 0.7002770794372D-02 + 0.7168249017405D-02 0.7337621874121D-02 0.7510980461712D-02 0.7688417987773D-02 + 0.7870029818463D-02 0.8055913527720D-02 0.8246168947593D-02 0.8440898219673D-02 + 0.8640205847678D-02 0.8844198751201D-02 0.9052986320644D-02 0.9266680473381D-02 + 0.9485395711148D-02 0.9709249178711D-02 0.9938360723829D-02 0.1017285295853D-01 + 0.1041285132175D-01 0.1065848414335D-01 0.1090988270951D-01 0.1116718132961D-01 + 0.1143051740455D-01 0.1170003149653D-01 0.1197586740047D-01 0.1225817221684D-01 + 0.1254709642620D-01 0.1284279396532D-01 0.1314542230495D-01 0.1345514252930D-01 + 0.1377211941725D-01 0.1409652152530D-01 0.1442852127232D-01 0.1476829502620D-01 + 0.1511602319226D-01 0.1547189030365D-01 0.1583608511371D-01 0.1620880069022D-01 + 0.1659023451183D-01 0.1698058856639D-01 0.1738006945154D-01 0.1778888847734D-01 + 0.1820726177118D-01 0.1863541038486D-01 0.1907356040402D-01 0.1952194305980D-01 + 0.1998079484302D-01 0.2045035762063D-01 0.2093087875471D-01 0.2142261122400D-01 + 0.2192581374792D-01 0.2244075091329D-01 0.2296769330365D-01 0.2350691763133D-01 + 0.2405870687229D-01 0.2462335040374D-01 0.2520114414469D-01 0.2579239069942D-01 + 0.2639739950387D-01 0.2701648697516D-01 0.2764997666416D-01 0.2829819941123D-01 + 0.2896149350513D-01 0.2964020484531D-01 0.3033468710740D-01 0.3104530191220D-01 + 0.3177241899806D-01 0.3251641639684D-01 0.3327768061342D-01 0.3405660680881D-01 + 0.3485359898710D-01 0.3566907018606D-01 0.3650344267166D-01 0.3735714813647D-01 + 0.3823062790211D-01 0.3912433312562D-01 0.4003872501011D-01 0.4097427501948D-01 + 0.4193146509749D-01 0.4291078789111D-01 0.4391274697832D-01 0.4493785710035D-01 + 0.4598664439858D-01 0.4705964665594D-01 0.4815741354312D-01 0.4928050686955D-01 + 0.5042950083923D-01 0.5160498231153D-01 0.5280755106696D-01 0.5403782007813D-01 + 0.5529641578584D-01 0.5658397838041D-01 0.5790116208843D-01 0.5924863546488D-01 + 0.6062708169076D-01 0.6203719887636D-01 0.6347970037015D-01 0.6495531507346D-01 + 0.6646478776099D-01 0.6800887940725D-01 0.6958836751900D-01 0.7120404647380D-01 + 0.7285672786470D-01 0.7454724085125D-01 0.7627643251682D-01 0.7804516823229D-01 + 0.7985433202641D-01 0.8170482696258D-01 0.8359757552242D-01 0.8553351999606D-01 + 0.8751362287932D-01 0.8953886727772D-01 0.9161025731761D-01 0.9372881856432D-01 + 0.9589559844749D-01 0.9811166669365D-01 0.1003781157661D+00 0.1026960613124D+00 + 0.1050666426187D+00 0.1074910230727D+00 0.1099703906329D+00 0.1125059583070D+00 + 0.1150989646366D+00 0.1177506741909D+00 0.1204623780676D+00 0.1232353944021D+00 + 0.1260710688845D+00 0.1289707752849D+00 0.1319359159864D+00 0.1349679225270D+00 + 0.1380682561490D+00 0.1412384083570D+00 0.1444799014844D+00 0.1477942892678D+00 + 0.1511831574303D+00 0.1546481242725D+00 0.1581908412731D+00 0.1618129936965D+00 + 0.1655163012104D+00 0.1693025185104D+00 0.1731734359544D+00 0.1771308802047D+00 + 0.1811767148790D+00 0.1853128412094D+00 0.1895411987104D+00 0.1938637658552D+00 + 0.1982825607598D+00 0.2027996418767D+00 0.2074171086957D+00 0.2121371024533D+00 + 0.2169618068509D+00 0.2218934487801D+00 0.2269342990569D+00 0.2320866731634D+00 + 0.2373529319974D+00 0.2427354826295D+00 0.2482367790682D+00 0.2538593230323D+00 + 0.2596056647304D+00 0.2654784036474D+00 0.2714801893389D+00 0.2776137222308D+00 + 0.2838817544268D+00 0.2902870905217D+00 0.2968325884206D+00 0.3035211601645D+00 + 0.3103557727607D+00 0.3173394490192D+00 0.3244752683937D+00 0.3317663678273D+00 + 0.3392159426028D+00 0.3468272471962D+00 0.3546035961349D+00 0.3625483648577D+00 + 0.3706649905790D+00 0.3789569731540D+00 0.3874278759464D+00 0.3960813266976D+00 + 0.4049210183955D+00 0.4139507101454D+00 0.4231742280388D+00 0.4325954660221D+00 + 0.4422183867640D+00 0.4520470225197D+00 0.4620854759931D+00 0.4723379211946D+00 + 0.4828086042953D+00 0.4935018444749D+00 0.5044220347646D+00 0.5155736428822D+00 + 0.5269612120602D+00 0.5385893618646D+00 0.5504627890040D+00 0.5625862681281D+00 + 0.5749646526146D+00 0.5876028753427D+00 0.6005059494532D+00 0.6136789690924D+00 + 0.6271271101407D+00 0.6408556309226D+00 0.6548698728981D+00 0.6691752613333D+00 + 0.6837773059493D+00 0.6986816015479D+00 0.7138938286123D+00 0.7294197538810D+00 + 0.7452652308942D+00 0.7614362005101D+00 0.7779386913894D+00 0.7947788204470D+00 + 0.8119627932680D+00 0.8294969044866D+00 0.8473875381261D+00 0.8656411678975D+00 + 0.8842643574549D+00 0.9032637606047D+00 0.9226461214683D+00 0.9424182745935D+00 + 0.9625871450140D+00 0.9831597482541D+00 0.1004143190275D+01 0.1025544667362D+01 + 0.1047371465949D+01 0.1069630962376D+01 0.1092330622582D+01 0.1115478001718D+01 + 0.1139080743699D+01 0.1163146580667D+01 0.1187683332379D+01 0.1212698905512D+01 + 0.1238201292877D+01 0.1264198572546D+01 0.1290698906886D+01 0.1317710541494D+01 + 0.1345241804028D+01 0.1373301102944D+01 0.1401896926110D+01 0.1431037839321D+01 + 0.1460732484690D+01 0.1490989578921D+01 0.1521817911461D+01 0.1553226342519D+01 + 0.1585223800953D+01 0.1617819282025D+01 0.1651021845012D+01 0.1684840610666D+01 + 0.1719284758534D+01 0.1754363524114D+01 0.1790086195862D+01 0.1826462112019D+01 + 0.1863500657290D+01 0.1901211259327D+01 0.1939603385053D+01 0.1978686536792D+01 + 0.2018470248210D+01 0.2058964080068D+01 0.2100177615772D+01 0.2142120456722D+01 + 0.2184802217451D+01 0.2228232520549D+01 0.2272420991371D+01 0.2317377252521D+01 + 0.2363110918097D+01 0.2409631587718D+01 0.2456948840298D+01 0.2505072227579D+01 + 0.2554011267414D+01 0.2603775436800D+01 0.2654374164640D+01 0.2705816824249D+01 + 0.2758112725590D+01 0.2811271107225D+01 0.2865301128002D+01 0.2920211858443D+01 + 0.2976012271854D+01 0.3032711235135D+01 0.3090317499294D+01 0.3148839689666D+01 + 0.3208286295814D+01 0.3268665661132D+01 0.3329985972130D+01 0.3392255247403D+01 + 0.3455481326284D+01 0.3519671857166D+01 0.3584834285516D+01 0.3650975841540D+01 + 0.3718103527540D+01 0.3786224104928D+01 0.3855344080910D+01 0.3925469694842D+01 + 0.3996606904248D+01 0.4068761370505D+01 0.4141938444201D+01 0.4216143150155D+01 + 0.4291380172106D+01 0.4367653837082D+01 0.4444968099432D+01 0.4523326524540D+01 + 0.4602732272224D+01 0.4683188079814D+01 0.4764696244923D+01 0.4847258607911D+01 + 0.4930876534058D+01 0.5015550895439D+01 0.5101282052526D+01 0.5188069835504D+01 + 0.5275913525340D+01 0.5364811834582D+01 0.5454762887935D+01 0.5545764202593D+01 + 0.5637812668364D+01 0.5730904527600D+01 0.5825035354930D+01 0.5920200036841D+01 + 0.6016392751096D+01 0.6113606946037D+01 0.6211835319763D+01 0.6311069799237D+01 + 0.6411301519318D+01 0.6512520801757D+01 0.6614717134178D+01 0.6717879149076D+01 + 0.6821994602856D+01 0.6927050354936D+01 0.7033032346971D+01 0.7139925582197D+01 + 0.7247714104955D+01 0.7356380980422D+01 0.7465908274590D+01 0.7576277034522D+01 + 0.7687467268944D+01 0.7799457929201D+01 0.7912226890625D+01 0.8025750934367D+01 + 0.8140005729731D+01 0.8254965817070D+01 0.8370604591283D+01 0.8486894285977D+01 + 0.8603805958343D+01 0.8721309474805D+01 0.8839373497487D+01 0.8957965471583D+01 + 0.9077051613664D+01 0.9196596901005D+01 0.9316565061973D+01 0.9436918567578D+01 + 0.9557618624205D+01 0.9678625167647D+01 0.9799896858462D+01 0.9921391078761D+01 + 0.1004306393048D+02 0.1016487023519D+02 0.1028676353561D+02 0.1040869609872D+02 + 0.1053061892078D+02 0.1065248173410D+02 0.1077423301584D+02 0.1089581999877D+02 + 0.1101718868413D+02 0.1113828385666D+02 0.1125904910191D+02 0.1137942682584D+02 + 0.1149935827678D+02 0.1161878356999D+02 0.1173764171462D+02 0.1185587064341D+02 + 0.1197340724503D+02 0.1209018739920D+02 0.1220614601465D+02 0.1232121706995D+02 + 0.1243533365740D+02 0.1254842802982D+02 0.1266043165050D+02 0.1277127524634D+02 + 0.1288088886404D+02 0.1298920192971D+02 0.1309614331160D+02 0.1320164138629D+02 + 0.1330562410812D+02 0.1340801908212D+02 0.1350875364026D+02 0.1360775492116D+02 + 0.1370494995324D+02 0.1380026574132D+02 0.1389362935662D+02 0.1398496803019D+02 + 0.1407420924981D+02 0.1416128086012D+02 0.1424611116627D+02 0.1432862904069D+02 + 0.1440876403324D+02 0.1448644648440D+02 0.1456160764164D+02 0.1463417977876D+02 + 0.1470409631813D+02 0.1477129195572D+02 0.1483570278883D+02 0.1489726644633D+02 + 0.1495592222127D+02 0.1501161120574D+02 0.1506427642781D+02 0.1511386299027D+02 + 0.1516031821110D+02 0.1520359176531D+02 0.1524363582812D+02 0.1528040521898D+02 + 0.1531385754641D+02 0.1534395335325D+02 0.1537065626208D+02 0.1539393312048D+02 + 0.1541375414585D+02 0.1543009306950D+02 0.1544292727951D+02 0.1545223796216D+02 + 0.1545801024155D+02 0.1546023331695D+02 0.1545890059744D+02 0.1545400983365D+02 + 0.1544556324596D+02 0.1543356764880D+02 0.1541803457065D+02 0.1539898036925D+02 + 0.1537642634154D+02 0.1535039882796D+02 0.1532092931044D+02 0.1528805450387D+02 + 0.1525181644030D+02 0.1521226254557D+02 0.1516944570778D+02 0.1512342433713D+02 + 0.1507426241669D+02 0.1502202954350D+02 0.1496680095964D+02 0.1490865757272D+02 + 0.1484768596530D+02 0.1478397839284D+02 0.1471763276969D+02 0.1464875264266D+02 + 0.1457744715182D+02 0.1450383097801D+02 0.1442802427679D+02 0.1435015259838D+02 + 0.1427034679327D+02 0.1418874290321D+02 0.1410548203722D+02 0.1402071023247D+02 + 0.1393457829969D+02 0.1384724165293D+02 0.1375886012364D+02 0.1366959775879D+02 + 0.1357962260304D+02 0.1348910646488D+02 0.1339822466686D+02 0.1330715577980D+02 + 0.1321608134121D+02 0.1312518555808D+02 0.1303465499419D+02 0.1294467824221D+02 + 0.1285544558101D+02 0.1276714861841D+02 0.1267997991994D+02 0.1259413262403D+02 + 0.1250980004419D+02 0.1242717525885D+02 0.1234645068948D+02 0.1226781766776D+02 + 0.1219146599257D+02 0.1211758347770D+02 0.1204635549121D+02 0.1197796448732D+02 + 0.1191258953197D+02 0.1185040582321D+02 0.1179158420730D+02 0.1173629069208D+02 + 0.1168468595856D+02 0.1163692487226D+02 0.1159315599549D+02 0.1155352110209D+02 + 0.1151815469598D+02 0.1148718353503D+02 0.1146072616178D+02 0.1143889244247D+02 + 0.1142178311602D+02 0.1140948935454D+02 0.1140209233686D+02 0.1139966283678D+02 + 0.1140226082774D+02 0.1140993510519D+02 0.1142272292875D+02 0.1144064968524D+02 + 0.1146372857460D+02 0.1149196031991D+02 0.1152533290326D+02 0.1156382132880D+02 + 0.1160738741454D+02 0.1165597961412D+02 0.1170953287012D+02 0.1176796849989D+02 + 0.1183119411535D+02 0.1189910357777D+02 0.1197157698856D+02 0.1204848071701D+02 + 0.1212966746596D+02 0.1221497637600D+02 0.1230423316888D+02 0.1239725033077D+02 + 0.1249382733567D+02 0.1259375090926D+02 0.1269679533346D+02 0.1280272279167D+02 + 0.1291128375448D+02 0.1302221740584D+02 0.1313525210912D+02 0.1325010591253D+02 + 0.1336648709337D+02 0.1348409474012D+02 0.1360261937149D+02 0.1372174359123D+02 + 0.1384114277758D+02 0.1396048580566D+02 0.1407943580155D+02 0.1419765092608D+02 + 0.1431478518661D+02 0.1443048927478D+02 0.1454441142812D+02 0.1465619831308D+02 + 0.1476549592746D+02 0.1487195051928D+02 0.1497520951989D+02 0.1507492248828D+02 + 0.1517074206398D+02 0.1526232492551D+02 0.1534933275145D+02 0.1543143318112D+02 + 0.1550830077157D+02 0.1557961794797D+02 0.1564507594396D+02 0.1570437572881D+02 + 0.1575722891823D+02 0.1580335866539D+02 0.1584250052899D+02 0.1587440331524D+02 + 0.1589882989033D+02 0.1591555796049D+02 0.1592438081630D+02 0.1592510803844D+02 + 0.1591756616179D+02 0.1590159929512D+02 0.1587706969359D+02 0.1584385828154D+02 + 0.1580186512290D+02 0.1575100983720D+02 0.1569123195871D+02 0.1562249123695D+02 + 0.1554476787665D+02 0.1545806271560D+02 0.1536239733893D+02 0.1525781412875D+02 + 0.1514437624809D+02 0.1502216755847D+02 0.1489129247063D+02 0.1475187572813D+02 + 0.1460406212401D+02 0.1444801615062D+02 0.1428392158332D+02 0.1411198099888D+02 + 0.1393241522964D+02 0.1374546275490D+02 0.1355137903119D+02 0.1335043576333D+02 + 0.1314292011864D+02 0.1292913388664D+02 0.1270939258714D+02 0.1248402452972D+02 + 0.1225336982785D+02 0.1201777937125D+02 0.1177761376017D+02 0.1153324220569D+02 + 0.1128504140014D+02 0.1103339436205D+02 0.1077868926027D+02 0.1052131822179D+02 + 0.1026167612835D+02 0.1000015940663D+02 0.9737164817090D+01 0.9473088246666D+01 + 0.9208323510392D+01 0.8943261167138D+01 0.8678287354606D+01 0.8413782648689D+01 + 0.8150120952198D+01 0.7887668417870D+01 0.7626782410424D+01 0.7367810512255D+01 + 0.7111089577147D+01 0.6856944836175D+01 0.6605689059620D+01 0.6357621778576D+01 + 0.6113028569417D+01 0.5872180404071D+01 0.5635333068605D+01 0.5402726652271D+01 + 0.5174585108689D+01 0.4951115890458D+01 0.4732509658013D+01 0.4518940063093D+01 + 0.4310563606744D+01 0.4107519571314D+01 0.3909930025455D+01 0.3717899900701D+01 + 0.3531517137795D+01 0.3350852900521D+01 0.3175961854415D+01 0.3006882507418D+01 + 0.2843637609166D+01 0.2686234605393D+01 0.2534666143602D+01 0.2388910626020D+01 + 0.2248932805599D+01 0.2114684420764D+01 0.1986104864410D+01 0.1863121882663D+01 + 0.1745652298807D+01 0.1633602757816D+01 0.1526870486911D+01 0.1425344067651D+01 + 0.1328904215091D+01 0.1237424559686D+01 0.1150772427713D+01 0.1068809616148D+01 + 0.9913931580887D+00 0.9183760750247D+00 0.8496081124357D+00 0.7849364554513D+00 + 0.7242064215293D+00 0.6672621273712D+00 0.6139471275574D+00 0.5641050226618D+00 + 0.5175800348878D+00 0.4742175495586D+00 0.4338646210828D+00 0.3963704423129D+00 + 0.3615867764997D+00 0.3293683513354D+00 0.2995732148544D+00 0.2720630532321D+00 + 0.2467034707815D+00 0.2233642326902D+00 0.2019194712763D+00 0.1822478567499D+00 + 0.1642327336682D+00 0.1477622244444D+00 0.1327293014336D+00 0.1190318292464D+00 + 0.1065725790655D+00 0.9525921682581D-01 0.8500426719540D-01 0.7572505534570D-01 + 0.6734362852856D-01 0.5978665949119D-01 0.5298533375213D-01 0.4687522273735D-01 + 0.4139614473480D-01 0.3649201557103D-01 0.3211069084453D-01 0.2820380147099D-01 + 0.2472658420543D-01 0.2163770870794D-01 0.1889910261478D-01 0.1647577596641D-01 + 0.1433564623066D-01 0.1244936504301D-01 0.1079014767040D-01 0.9333606088531D-02 + 0.8057586449521D-02 0.6942011605538D-02 0.5968729247262D-02 0.5121366113861D-02 + 0.4385188634413D-02 0.3746970269980D-02 0.3194865741265D-02 0.2718292249293D-02 + 0.2307817726031D-02 0.1955056088404D-02 0.1652569412799D-02 0.1393776897745D-02 + 0.1172870439853D-02 0.9847366120634D-03 0.8248848034661D-03 0.6893812560569D-03 + 0.5747887154298D-03 0.4781113990982D-03 0.3967449774979D-03 0.3284312582634D-03 + 0.2712172636576D-03 0.2234183935981D-03 0.1835853721449D-03 0.1504746831443D-03 + 0.1230222105786D-03 0.1003198106540D-03 0.8159455542106D-04 0.6619040144209D-04 + 0.5355205138722D-04 0.4321079120846D-04 0.3477210045803D-04 0.2790484818898D-04 + 0.2233190152246D-04 0.1782198824118D-04 0.1418266855132D-04 0.1125428434880D-04 + 0.8904766856498D-05 0.7025195313453D-05 0.5526010459652D-05 0.4333796852085D-05 + 0.3388557563637D-05 0.2641413563333D-05 0.2052668070841D-05 0.1590183444862D-05 + 0.1228024735392D-05 0.9453299398051D-06 0.7253722919424D-06 0.5547846237125D-06 + 0.4229200131023D-06 0.3213266143727D-06 0.2433177983142D-06 0.1836215545666D-06 + 0.1380955642703D-06 0.1034964778941D-06 0.7729376586493D-07 0.5752008209307D-07 + 0.4265142355148D-07 0.3151151106808D-07 0.2319578320089D-07 0.1701120974173D-07 + 0.1242881489534D-07 0.9046371073667D-08 0.6559198960071D-08 0.4737402476978D-08 + 0.3408191153158D-08 0.2442208093542D-08 0.1742998768590D-08 0.1238932286038D-08 + 0.8770296193333D-09 0.6182683290111D-09 0.4340255982013D-09 0.3033950772413D-09 + 0.2111715589818D-09 0.1463438404983D-09 0.1009726185101D-09 0.6935859066118D-10 + 0.4742849271888D-10 0.3228488955626D-10 0.2187547853929D-10 0.1475212866899D-10 + 0.9901881750809D-11 0.6613860882122D-11 0.4396644350124D-11 0.2908650000322D-11 + 0.1914873227728D-11 0.1254415200484D-11 0.8176535094916D-12 0.5302708391854D-12 + 0.3421370551355D-12 0.2196087836422D-12 0.1402231518601D-12 0.8906014768602D-13 + LSMS: xx z= 26. xvalws= 2.77074 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728402963D+02-0.5199725117641D+02-0.5199721792578D+02-0.5199718427293D+02 +-0.5199715021300D+02-0.5199711574107D+02-0.5199708085214D+02-0.5199704554119D+02 +-0.5199700980309D+02-0.5199697363268D+02-0.5199693702474D+02-0.5199689997397D+02 +-0.5199686247500D+02-0.5199682452243D+02-0.5199678611076D+02-0.5199674723444D+02 +-0.5199670788785D+02-0.5199666806529D+02-0.5199662776101D+02-0.5199658696918D+02 +-0.5199654568390D+02-0.5199650389922D+02-0.5199646160907D+02-0.5199641880734D+02 +-0.5199637548785D+02-0.5199633164434D+02-0.5199628727046D+02-0.5199624235979D+02 +-0.5199619690585D+02-0.5199615090205D+02-0.5199610434176D+02-0.5199605721822D+02 +-0.5199600952464D+02-0.5199596125410D+02-0.5199591239964D+02-0.5199586295419D+02 +-0.5199581291060D+02-0.5199576226162D+02-0.5199571099994D+02-0.5199565911815D+02 +-0.5199560660874D+02-0.5199555346411D+02-0.5199549967658D+02-0.5199544523837D+02 +-0.5199539014162D+02-0.5199533437834D+02-0.5199527794048D+02-0.5199522081989D+02 +-0.5199516300828D+02-0.5199510449731D+02-0.5199504527851D+02-0.5199498534331D+02 +-0.5199492468306D+02-0.5199486328897D+02-0.5199480115217D+02-0.5199473826367D+02 +-0.5199467461436D+02-0.5199461019507D+02-0.5199454499646D+02-0.5199447900910D+02 +-0.5199441222344D+02-0.5199434462984D+02-0.5199427621849D+02-0.5199420697954D+02 +-0.5199413690295D+02-0.5199406597858D+02-0.5199399419618D+02-0.5199392154537D+02 +-0.5199384801563D+02-0.5199377359634D+02-0.5199369827672D+02-0.5199362204589D+02 +-0.5199354489281D+02-0.5199346680633D+02-0.5199338777515D+02-0.5199330778784D+02 +-0.5199322683282D+02-0.5199314489839D+02-0.5199306197270D+02-0.5199297804374D+02 +-0.5199289309939D+02-0.5199280712733D+02-0.5199272011516D+02-0.5199263205027D+02 +-0.5199254291992D+02-0.5199245271123D+02-0.5199236141114D+02-0.5199226900644D+02 +-0.5199217548376D+02-0.5199208082958D+02-0.5199198503019D+02-0.5199188807175D+02 +-0.5199178994021D+02-0.5199169062139D+02-0.5199159010092D+02-0.5199148836424D+02 +-0.5199138539665D+02-0.5199128118323D+02-0.5199117570892D+02-0.5199106895845D+02 +-0.5199096091638D+02-0.5199085156707D+02-0.5199074089471D+02-0.5199062888326D+02 +-0.5199051551654D+02-0.5199040077813D+02-0.5199028465143D+02-0.5199016711964D+02 +-0.5199004816574D+02-0.5198992777253D+02-0.5198980592257D+02-0.5198968259824D+02 +-0.5198955778170D+02-0.5198943145487D+02-0.5198930359948D+02-0.5198917419701D+02 +-0.5198904322875D+02-0.5198891067574D+02-0.5198877651879D+02-0.5198864073848D+02 +-0.5198850331517D+02-0.5198836422896D+02-0.5198822345972D+02-0.5198808098707D+02 +-0.5198793679039D+02-0.5198779084882D+02-0.5198764314123D+02-0.5198749364622D+02 +-0.5198734234217D+02-0.5198718920716D+02-0.5198703421905D+02-0.5198687735537D+02 +-0.5198671859343D+02-0.5198655791024D+02-0.5198639528254D+02-0.5198623068679D+02 +-0.5198606409915D+02-0.5198589549550D+02-0.5198572485143D+02-0.5198555214224D+02 +-0.5198537734293D+02-0.5198520042816D+02-0.5198502137235D+02-0.5198484014954D+02 +-0.5198465673351D+02-0.5198447109769D+02-0.5198428321519D+02-0.5198409305883D+02 +-0.5198390060104D+02-0.5198370581396D+02-0.5198350866939D+02-0.5198330913876D+02 +-0.5198310719319D+02-0.5198290280341D+02-0.5198269593983D+02-0.5198248657249D+02 +-0.5198227467106D+02-0.5198206020484D+02-0.5198184314277D+02-0.5198162345340D+02 +-0.5198140110492D+02-0.5198117606510D+02-0.5198094830136D+02-0.5198071778068D+02 +-0.5198048446968D+02-0.5198024833454D+02-0.5198000934107D+02-0.5197976745462D+02 +-0.5197952264015D+02-0.5197927486220D+02-0.5197902408485D+02-0.5197877027176D+02 +-0.5197851338615D+02-0.5197825339081D+02-0.5197799024804D+02-0.5197772391971D+02 +-0.5197745436723D+02-0.5197718155151D+02-0.5197690543304D+02-0.5197662597177D+02 +-0.5197634312720D+02-0.5197605685833D+02-0.5197576712367D+02-0.5197547388122D+02 +-0.5197517708846D+02-0.5197487670236D+02-0.5197457267938D+02-0.5197426497542D+02 +-0.5197395354589D+02-0.5197363834563D+02-0.5197331932893D+02-0.5197299644952D+02 +-0.5197266966059D+02-0.5197233891476D+02-0.5197200416404D+02-0.5197166535990D+02 +-0.5197132245319D+02-0.5197097539418D+02-0.5197062413252D+02-0.5197026861727D+02 +-0.5196990879687D+02-0.5196954461909D+02-0.5196917603112D+02-0.5196880297948D+02 +-0.5196842541005D+02-0.5196804326804D+02-0.5196765649801D+02-0.5196726504383D+02 +-0.5196686884871D+02-0.5196646785514D+02-0.5196606200494D+02-0.5196565123919D+02 +-0.5196523549829D+02-0.5196481472189D+02-0.5196438884890D+02-0.5196395781753D+02 +-0.5196352156518D+02-0.5196308002855D+02-0.5196263314350D+02-0.5196218084518D+02 +-0.5196172306789D+02-0.5196125974518D+02-0.5196079080977D+02-0.5196031619354D+02 +-0.5195983582758D+02-0.5195934964214D+02-0.5195885756657D+02-0.5195835952942D+02 +-0.5195785545834D+02-0.5195734528011D+02-0.5195682892060D+02-0.5195630630481D+02 +-0.5195577735679D+02-0.5195524199969D+02-0.5195470015573D+02-0.5195415174616D+02 +-0.5195359669127D+02-0.5195303491041D+02-0.5195246632192D+02-0.5195189084316D+02 +-0.5195130839046D+02-0.5195071887917D+02-0.5195012222358D+02-0.5194951833693D+02 +-0.5194890713143D+02-0.5194828851819D+02-0.5194766240726D+02-0.5194702870759D+02 +-0.5194638732701D+02-0.5194573817222D+02-0.5194508114882D+02-0.5194441616121D+02 +-0.5194374311266D+02-0.5194306190525D+02-0.5194237243986D+02-0.5194167461616D+02 +-0.5194096833262D+02-0.5194025348643D+02-0.5193952997356D+02-0.5193879768871D+02 +-0.5193805652527D+02-0.5193730637535D+02-0.5193654712973D+02-0.5193577867788D+02 +-0.5193500090790D+02-0.5193421370652D+02-0.5193341695911D+02-0.5193261054963D+02 +-0.5193179436061D+02-0.5193096827316D+02-0.5193013216694D+02-0.5192928592013D+02 +-0.5192842940944D+02-0.5192756251004D+02-0.5192668509561D+02-0.5192579703828D+02 +-0.5192489820860D+02-0.5192398847556D+02-0.5192306770652D+02-0.5192213576726D+02 +-0.5192119252189D+02-0.5192023783287D+02-0.5191927156096D+02-0.5191829356524D+02 +-0.5191730370307D+02-0.5191630183005D+02-0.5191528780001D+02-0.5191426146503D+02 +-0.5191322267532D+02-0.5191217127930D+02-0.5191110712354D+02-0.5191003005272D+02 +-0.5190893990959D+02-0.5190783653503D+02-0.5190671976795D+02-0.5190558944528D+02 +-0.5190444540195D+02-0.5190328747089D+02-0.5190211548297D+02-0.5190092926700D+02 +-0.5189972864968D+02-0.5189851345560D+02-0.5189728350719D+02-0.5189603862472D+02 +-0.5189477862625D+02-0.5189350332759D+02-0.5189221254235D+02-0.5189090608179D+02 +-0.5188958375491D+02-0.5188824536834D+02-0.5188689072635D+02-0.5188551963080D+02 +-0.5188413188114D+02-0.5188272727435D+02-0.5188130560492D+02-0.5187986666482D+02 +-0.5187841024347D+02-0.5187693612772D+02-0.5187544410178D+02-0.5187393394724D+02 +-0.5187240544300D+02-0.5187085836524D+02-0.5186929248740D+02-0.5186770758014D+02 +-0.5186610341132D+02-0.5186447974591D+02-0.5186283634606D+02-0.5186117297093D+02 +-0.5185948937678D+02-0.5185778531685D+02-0.5185606054135D+02-0.5185431479744D+02 +-0.5185254782916D+02-0.5185075937741D+02-0.5184894917991D+02-0.5184711697117D+02 +-0.5184526248242D+02-0.5184338544160D+02-0.5184148557330D+02-0.5183956259875D+02 +-0.5183761623572D+02-0.5183564619854D+02-0.5183365219802D+02-0.5183163394142D+02 +-0.5182959113240D+02-0.5182752347098D+02-0.5182543065350D+02-0.5182331237255D+02 +-0.5182116831697D+02-0.5181899817174D+02-0.5181680161800D+02-0.5181457833297D+02 +-0.5181232798987D+02-0.5181005025795D+02-0.5180774480235D+02-0.5180541128413D+02 +-0.5180304936016D+02-0.5180065868310D+02-0.5179823890134D+02-0.5179578965895D+02 +-0.5179331059564D+02-0.5179080134665D+02-0.5178826154277D+02-0.5178569081025D+02 +-0.5178308877073D+02-0.5178045504121D+02-0.5177778923399D+02-0.5177509095659D+02 +-0.5177235981171D+02-0.5176959539717D+02-0.5176679730585D+02-0.5176396512563D+02 +-0.5176109843930D+02-0.5175819682457D+02-0.5175525985390D+02-0.5175228709457D+02 +-0.5174927810849D+02-0.5174623245221D+02-0.5174314967682D+02-0.5174002932792D+02 +-0.5173687094551D+02-0.5173367406395D+02-0.5173043821187D+02-0.5172716291215D+02 +-0.5172384768177D+02-0.5172049203182D+02-0.5171709546736D+02-0.5171365748739D+02 +-0.5171017758479D+02-0.5170665524617D+02-0.5170308995189D+02-0.5169948117592D+02 +-0.5169582838578D+02-0.5169213104249D+02-0.5168838860043D+02-0.5168460050732D+02 +-0.5168076620412D+02-0.5167688512494D+02-0.5167295669696D+02-0.5166898034036D+02 +-0.5166495546822D+02-0.5166088148646D+02-0.5165675779371D+02-0.5165258378128D+02 +-0.5164835883303D+02-0.5164408232529D+02-0.5163975362681D+02-0.5163537209858D+02 +-0.5163093709386D+02-0.5162644795799D+02-0.5162190402831D+02-0.5161730463415D+02 +-0.5161264909661D+02-0.5160793672858D+02-0.5160316683457D+02-0.5159833871062D+02 +-0.5159345164422D+02-0.5158850491424D+02-0.5158349779076D+02-0.5157842953502D+02 +-0.5157329939929D+02-0.5156810662682D+02-0.5156285045165D+02-0.5155753009857D+02 +-0.5155214478300D+02-0.5154669371088D+02-0.5154117607855D+02-0.5153559107266D+02 +-0.5152993787006D+02-0.5152421563767D+02-0.5151842353238D+02-0.5151256070096D+02 +-0.5150662627991D+02-0.5150061939535D+02-0.5149453916296D+02-0.5148838468777D+02 +-0.5148215506412D+02-0.5147584937554D+02-0.5146946669454D+02-0.5146300608264D+02 +-0.5145646659012D+02-0.5144984725596D+02-0.5144314710771D+02-0.5143636516137D+02 +-0.5142950042123D+02-0.5142255187982D+02-0.5141551851771D+02-0.5140839930344D+02 +-0.5140119319335D+02-0.5139389913149D+02-0.5138651604948D+02-0.5137904286634D+02 +-0.5137147848843D+02-0.5136382180931D+02-0.5135607170955D+02-0.5134822705665D+02 +-0.5134028670491D+02-0.5133224949527D+02-0.5132411425521D+02-0.5131587979859D+02 +-0.5130754492555D+02-0.5129910842232D+02-0.5129056906116D+02-0.5128192560017D+02 +-0.5127317678315D+02-0.5126432133956D+02-0.5125535798425D+02-0.5124628541740D+02 +-0.5123710232443D+02-0.5122780737574D+02-0.5121839922671D+02-0.5120887651745D+02 +-0.5119923787276D+02-0.5118948190193D+02-0.5117960719865D+02-0.5116961234085D+02 +-0.5115949589056D+02-0.5114925639380D+02-0.5113889238044D+02-0.5112840236408D+02 +-0.5111778484188D+02-0.5110703829447D+02-0.5109616118579D+02-0.5108515196301D+02 +-0.5107400905631D+02-0.5106273087889D+02-0.5105131582667D+02-0.5103976227836D+02 +-0.5102806859514D+02-0.5101623312071D+02-0.5100425418105D+02-0.5099213008436D+02 +-0.5097985912091D+02-0.5096743956297D+02-0.5095486966464D+02-0.5094214766176D+02 +-0.5092927177183D+02-0.5091624019384D+02-0.5090305110822D+02-0.5088970267672D+02 +-0.5087619304230D+02-0.5086252032900D+02-0.5084868264193D+02-0.5083467806710D+02 +-0.5082050467136D+02-0.5080616050232D+02-0.5079164358822D+02-0.5077695193792D+02 +-0.5076208354076D+02-0.5074703636655D+02-0.5073180836542D+02-0.5071639746782D+02 +-0.5070080158445D+02-0.5068501860613D+02-0.5066904640389D+02-0.5065288282874D+02 +-0.5063652571181D+02-0.5061997286414D+02-0.5060322207678D+02-0.5058627112067D+02 +-0.5056911774669D+02-0.5055175968555D+02-0.5053419464788D+02-0.5051642032411D+02 +-0.5049843438458D+02-0.5048023447945D+02-0.5046181823877D+02-0.5044318327247D+02 +-0.5042432717038D+02-0.5040524750226D+02-0.5038594181787D+02-0.5036640764694D+02 +-0.5034664249930D+02-0.5032664386488D+02-0.5030640921379D+02-0.5028593599640D+02 +-0.5026522164341D+02-0.5024426356594D+02-0.5022305915564D+02-0.5020160578474D+02 +-0.5017990080623D+02-0.5015794155393D+02-0.5013572534263D+02-0.5011324946826D+02 +-0.5009051120796D+02-0.5006750782030D+02-0.5004423654542D+02-0.5002069460521D+02 +-0.4999687920344D+02-0.4997278752603D+02-0.4994841674120D+02-0.4992376399966D+02 +-0.4989882643488D+02-0.4987360116327D+02-0.4984808528443D+02-0.4982227588141D+02 +-0.4979617002094D+02-0.4976976475371D+02-0.4974305711462D+02-0.4971604412309D+02 +-0.4968872278335D+02-0.4966109008469D+02-0.4963314300185D+02-0.4960487849528D+02 +-0.4957629351145D+02-0.4954738498327D+02-0.4951814983035D+02-0.4948858495939D+02 +-0.4945868726453D+02-0.4942845362775D+02-0.4939788091919D+02-0.4936696599757D+02 +-0.4933570571061D+02-0.4930409689534D+02-0.4927213637859D+02-0.4923982097740D+02 +-0.4920714749935D+02-0.4917411274309D+02-0.4914071349870D+02-0.4910694654815D+02 +-0.4907280866573D+02-0.4903829661848D+02-0.4900340716666D+02-0.4896813706420D+02 +-0.4893248305909D+02-0.4889644189392D+02-0.4886001030623D+02-0.4882318502909D+02 +-0.4878596279141D+02-0.4874834031849D+02-0.4871031433244D+02-0.4867188155262D+02 +-0.4863303869609D+02-0.4859378247804D+02-0.4855410961222D+02-0.4851401681140D+02 +-0.4847350078774D+02-0.4843255825325D+02-0.4839118592018D+02-0.4834938050138D+02 +-0.4830713871075D+02-0.4826445726356D+02-0.4822133287682D+02-0.4817776226967D+02 +-0.4813374216365D+02-0.4808926928306D+02-0.4804434035526D+02-0.4799895211091D+02 +-0.4795310128431D+02-0.4790678461358D+02-0.4785999884093D+02-0.4781274071282D+02 +-0.4776500698020D+02-0.4771679439861D+02-0.4766809972836D+02-0.4761891973461D+02 +-0.4756925118748D+02-0.4751909086208D+02-0.4746843553857D+02-0.4741728200213D+02 +-0.4736562704295D+02-0.4731346745620D+02-0.4726080004188D+02-0.4720762160479D+02 +-0.4715392895431D+02-0.4709971890425D+02-0.4704498827268D+02-0.4698973388163D+02 +-0.4693395255690D+02-0.4687764112767D+02-0.4682079642628D+02-0.4676341528777D+02 +-0.4670549454962D+02-0.4664703105122D+02-0.4658802163351D+02-0.4652846313853D+02 +-0.4646835240891D+02-0.4640768628735D+02-0.4634646161617D+02-0.4628467523671D+02 +-0.4622232398885D+02-0.4615940471037D+02-0.4609591423645D+02-0.4603184939910D+02 +-0.4596720702657D+02-0.4590198394276D+02-0.4583617696675D+02-0.4576978291218D+02 +-0.4570279858676D+02-0.4563522079176D+02-0.4556704632159D+02-0.4549827196328D+02 +-0.4542889449617D+02-0.4535891069156D+02-0.4528831731237D+02-0.4521711111299D+02 +-0.4514528883912D+02-0.4507284722768D+02-0.4499978300686D+02-0.4492609289624D+02 +-0.4485177360700D+02-0.4477682184233D+02-0.4470123429783D+02-0.4462500766219D+02 +-0.4454813861790D+02-0.4447062384219D+02-0.4439246000814D+02-0.4431364378589D+02 +-0.4423417184413D+02-0.4415404085174D+02-0.4407324747964D+02-0.4399178840285D+02 +-0.4390966030283D+02-0.4382685986996D+02-0.4374338380636D+02-0.4365922882888D+02 +-0.4357439167239D+02-0.4348886909331D+02-0.4340265787340D+02-0.4331575482384D+02 +-0.4322815678953D+02-0.4313986065369D+02-0.4305086334268D+02-0.4296116183110D+02 +-0.4287075314713D+02-0.4277963437808D+02-0.4268780267613D+02-0.4259525526436D+02 +-0.4250198944278D+02-0.4240800259471D+02-0.4231329219311D+02-0.4221785580702D+02 +-0.4212169110814D+02-0.4202479587724D+02-0.4192716801066D+02-0.4182880552657D+02 +-0.4172970657123D+02-0.4162986942478D+02-0.4152929250699D+02-0.4142797438248D+02 +-0.4132591376546D+02-0.4122310952415D+02-0.4111956068435D+02-0.4101526643252D+02 +-0.4091022611799D+02-0.4080443925436D+02-0.4069790551997D+02-0.4059062475744D+02 +-0.4048259697200D+02-0.4037382232884D+02-0.4026430114924D+02-0.4015403390548D+02 +-0.4004302121449D+02-0.3993126383031D+02-0.3981876263529D+02-0.3970551863000D+02 +-0.3959153292214D+02-0.3947680671418D+02-0.3936134129010D+02-0.3924513800125D+02 +-0.3912819825140D+02-0.3901052348125D+02-0.3889211515259D+02-0.3877297473220D+02 +-0.3865310367583D+02-0.3853250341248D+02-0.3841117532917D+02-0.3828912075654D+02 +-0.3816634095549D+02-0.3804283710513D+02-0.3791861029232D+02-0.3779366150300D+02 +-0.3766799161555D+02-0.3754160139636D+02-0.3741449149782D+02-0.3728666245883D+02 +-0.3715811470790D+02-0.3702884856900D+02-0.3689886427010D+02-0.3676816195438D+02 +-0.3663674169408D+02-0.3650460350690D+02-0.3637174737474D+02-0.3623817326473D+02 +-0.3610388115218D+02-0.3596887104531D+02-0.3583314301154D+02-0.3569669720495D+02 +-0.3555953389464D+02-0.3542165349386D+02-0.3528305658922D+02-0.3514374397011D+02 +-0.3500371665774D+02-0.3486297593358D+02-0.3472152336690D+02-0.3457936084122D+02 +-0.3443649057928D+02-0.3429291516643D+02-0.3414863757211D+02-0.3400366116934D+02 +-0.3385798975190D+02-0.3371162754922D+02-0.3356457923876D+02-0.3341684995570D+02 +-0.3326844530007D+02-0.3311937134098D+02-0.3296963461820D+02-0.3281924214079D+02 +-0.3266820138293D+02-0.3251652027694D+02-0.3236420720350D+02-0.3221127097903D+02 +-0.3205772084042D+02-0.3190356642710D+02-0.3174881776049D+02-0.3159348522098D+02 +-0.3143757952257D+02-0.3128111168511D+02-0.3112409300454D+02-0.3096653502093D+02 +-0.3080844948479D+02-0.3064984832153D+02-0.3049074359439D+02-0.3033114746593D+02 +-0.3017107215833D+02-0.3001052991254D+02-0.2984953294675D+02-0.2968809341400D+02 +-0.2952622335948D+02-0.2936393467762D+02-0.2920123906907D+02-0.2903814799805D+02 +-0.2887467265011D+02-0.2871082389066D+02-0.2854661222446D+02-0.2838204775647D+02 +-0.2821714015409D+02-0.2805189861135D+02-0.2788633181514D+02-0.2772044791378D+02 +-0.2755425448842D+02-0.2738775852723D+02-0.2722096640307D+02-0.2705388385454D+02 +-0.2688651597109D+02-0.2671886718221D+02-0.2655094125117D+02-0.2638274127348D+02 +-0.2621426968047D+02-0.2604552824823D+02-0.2587651811214D+02-0.2570723978730D+02 +-0.2553769319514D+02-0.2536787769632D+02-0.2519779213021D+02-0.2502743486110D+02 +-0.2485680383129D+02-0.2468589662112D+02-0.2451471051601D+02-0.2434324258050D+02 +-0.2417148973924D+02-0.2399944886481D+02-0.2382711687194D+02-0.2365449081810D+02 +-0.2348156800981D+02-0.2330834611404D+02-0.2313482327422D+02-0.2296099822964D+02 +-0.2278687043744D+02-0.2261244019567D+02-0.2243770876615D+02-0.2226267849517D+02 +-0.2208735293014D+02-0.2191173693001D+02-0.2173583676674D+02-0.2155966021537D+02 +-0.2138321662948D+02-0.2120651699903D+02-0.2102957398727D+02-0.2085240194340D+02 +-0.2067501688787D+02-0.2049743646710D+02-0.2031967987514D+02-0.2014176773999D+02 +-0.1996372197331D+02-0.1978556558301D+02-0.1960732244950D+02-0.1942901706755D+02 +-0.1925067425750D+02-0.1907231885074D+02-0.1889397535633D+02-0.1871566761696D+02 +-0.1853741846374D+02-0.1835924938052D+02-0.1818118018868D+02-0.1800322876380D+02 +-0.1782541079491D+02-0.1764773959582D+02-0.1747022597686D+02-0.1729287818264D+02 +-0.1711570189939D+02-0.1693870033244D+02-0.1676187435187D+02-0.1658522270158D+02 +-0.1640874226459D+02-0.1623242837596D+02-0.1605627517269D+02-0.1588027596970D+02 +-0.1570442365062D+02-0.1552871106216D+02-0.1535313140208D+02-0.1517767859145D+02 +-0.1500234762341D+02-0.1482713488228D+02-0.1465203842815D+02-0.1447705824363D+02 +-0.1430219644106D+02-0.1412745742929D+02-0.1395284804054D+02-0.1377837761854D+02 +-0.1360405806987D+02-0.1342990388081D+02-0.1325593210249D+02-0.1308216230731D+02 +-0.1290861651951D+02-0.1273531912305D+02-0.1256229674959D+02-0.1238957814960D+02 +-0.1221719404907D+02-0.1204517699438D+02-0.1187356118783D+02-0.1170238231558D+02 +-0.1153167737042D+02-0.1136148447069D+02-0.1119184267735D+02-0.1102279181034D+02 +-0.1085437226576D+02-0.1068662483495D+02-0.1051959052659D+02-0.1035331039265D+02 +-0.1018782535928D+02-0.1002317606321D+02-0.9859402694342D+01-0.9696544845323D+01 +-0.9534641368482D+01-0.9373730240659D+01-0.9213848436346D+01-0.9055031809511D+01 +-0.8897314984394D+01-0.8740731255549D+01-0.8585312497336D+01-0.8431089083029D+01 +-0.8278089813661D+01-0.8126341856676D+01-0.7975870694439D+01-0.7826700082584D+01 +-0.7678852018171D+01-0.7532346717566D+01-0.7387202603932D+01-0.7243436304187D+01 +-0.7101062655233D+01-0.6960094719270D+01-0.6820543807924D+01-0.6682419514939D+01 +-0.6545729757123D+01-0.6410480823229D+01-0.6276677430423D+01-0.6144322787958D+01 +-0.6013418667669D+01-0.5883965480867D+01-0.5755962361193D+01-0.5629407252975D+01 +-0.5504297004604D+01-0.5380627466436D+01-0.5258393592702D+01-0.5137589546863D+01 +-0.5018208809882D+01-0.4900244290793D+01-0.4783688438971D+01-0.4668533357470D+01 +-0.4554770916754D+01-0.4442392868124D+01-0.4331390956131D+01-0.4221757029192D+01 +-0.4113483147635D+01-0.4006561688322D+01-0.3900985445011D+01-0.3796747723533D+01 +-0.3693842430876D+01-0.3592264157211D+01-0.3492008249906D+01-0.3393070878541D+01 +-0.3295449089976D+01-0.3199140852531D+01-0.3104145088414D+01-0.3010461693592D+01 +-0.2918091544431D+01-0.2827036490592D+01-0.2737299333835D+01-0.2648883792669D+01 +-0.2561794453010D+01-0.2476036705393D+01-0.2391616669610D+01-0.2308541108029D+01 +-0.2226817329318D+01-0.2146453084634D+01-0.2067456458802D+01-0.1989835759339D+01 +-0.1913599406514D+01-0.1838755827812D+01-0.1765313360391D+01-0.1693280165020D+01 +-0.1622664154978D+01-0.1553472943063D+01-0.1485713809518D+01-0.1419393693186D+01 +-0.1354519207570D+01-0.1291096682842D+01-0.1229132234097D+01-0.1168631855453D+01 +-0.1109601538882D+01-0.1052047416050D+01-0.9959759208814D+00-0.9413939701484D+00 +-0.8883091590719D+00-0.8367299687430D+00-0.7866659821253D+00-0.7381281054637D+00 +-0.6911287920896D+00-0.6456822658698D+00-0.6018047418553D+00-0.5595146420441D+00 +-0.5188328045500D+00-0.4797826848498D+00-0.4423905481512D+00-0.4066856522662D+00 +-0.3727004206897D+00-0.3404706058472D+00-0.3100354427093D+00-0.2814377931599D+00 +-0.2547240189175D+00 + 0.0000000000000D+00 + 1012 0.2770741520224D+01 + 0.2150927949039D-04 0.2202124536575D-04 0.2254539478646D-04 0.2308201760180D-04 + 0.2363141055333D-04 0.2419387743865D-04 0.2476972927906D-04 0.2535928449121D-04 + 0.2596286906285D-04 0.2658081673262D-04 0.2721346917432D-04 0.2786117618535D-04 + 0.2852429587973D-04 0.2920319488569D-04 0.2989824854795D-04 0.3060984113473D-04 + 0.3133836604977D-04 0.3208422604934D-04 0.3284783346437D-04 0.3362961042788D-04 + 0.3442998910781D-04 0.3524941194536D-04 0.3608833189898D-04 0.3694721269416D-04 + 0.3782652907911D-04 0.3872676708658D-04 0.3964842430179D-04 0.4059201013679D-04 + 0.4155804611131D-04 0.4254706614023D-04 0.4355961682789D-04 0.4459625776943D-04 + 0.4565756185917D-04 0.4674411560639D-04 0.4785651945856D-04 0.4899538813222D-04 + 0.5016135095172D-04 0.5135505219602D-04 0.5257715145361D-04 0.5382832398596D-04 + 0.5510926109951D-04 0.5642067052648D-04 0.5776327681476D-04 0.5913782172693D-04 + 0.6054506464885D-04 0.6198578300785D-04 0.6346077270088D-04 0.6497084853274D-04 + 0.6651684466474D-04 0.6809961507398D-04 0.6972003402351D-04 0.7137899654355D-04 + 0.7307741892426D-04 0.7481623921999D-04 0.7659641776564D-04 0.7841893770513D-04 + 0.8028480553242D-04 0.8219505164534D-04 0.8415073091254D-04 0.8615292325379D-04 + 0.8820273423416D-04 0.9030129567206D-04 0.9244976626185D-04 0.9464933221109D-04 + 0.9690120789284D-04 0.9920663651351D-04 0.1015668907964D-03 0.1039832736813D-03 + 0.1064571190411D-03 0.1089897924148D-03 0.1115826917580D-03 0.1142372482113D-03 + 0.1169549268870D-03 0.1197372276738D-03 0.1225856860613D-03 0.1255018739831D-03 + 0.1284874006808D-03 0.1315439135877D-03 0.1346730992336D-03 0.1378766841712D-03 + 0.1411564359238D-03 0.1445141639563D-03 0.1479517206680D-03 0.1514710024102D-03 + 0.1550739505263D-03 0.1587625524179D-03 0.1625388426349D-03 0.1664049039925D-03 + 0.1703628687133D-03 0.1744149195974D-03 0.1785632912194D-03 0.1828102711544D-03 + 0.1871582012321D-03 0.1916094788209D-03 0.1961665581427D-03 0.2008319516176D-03 + 0.2056082312418D-03 0.2104980299966D-03 0.2155040432913D-03 0.2206290304405D-03 + 0.2258758161753D-03 0.2312472921908D-03 0.2367464187300D-03 0.2423762262044D-03 + 0.2481398168542D-03 0.2540403664457D-03 0.2600811260106D-03 0.2662654236245D-03 + 0.2725966662290D-03 0.2790783414953D-03 0.2857140197324D-03 0.2925073558401D-03 + 0.2994620913080D-03 0.3065820562611D-03 0.3138711715547D-03 0.3213334509168D-03 + 0.3289730031429D-03 0.3367940343406D-03 0.3448008502286D-03 0.3529978584881D-03 + 0.3613895711713D-03 0.3699806071650D-03 0.3787756947128D-03 0.3877796739964D-03 + 0.3969974997780D-03 0.4064342441040D-03 0.4160950990725D-03 0.4259853796663D-03 + 0.4361105266519D-03 0.4464761095462D-03 0.4570878296540D-03 0.4679515231757D-03 + 0.4790731643881D-03 0.4904588689006D-03 0.5021148969868D-03 0.5140476569946D-03 + 0.5262637088364D-03 0.5387697675611D-03 0.5515727070097D-03 0.5646795635561D-03 + 0.5780975399370D-03 0.5918340091694D-03 0.6058965185620D-03 0.6202927938188D-03 + 0.6350307432396D-03 0.6501184620192D-03 0.6655642366457D-03 0.6813765494038D-03 + 0.6975640829812D-03 0.7141357251847D-03 0.7311005737650D-03 0.7484679413557D-03 + 0.7662473605260D-03 0.7844485889531D-03 0.8030816147148D-03 0.8221566617048D-03 + 0.8416841951763D-03 0.8616749274129D-03 0.8821398235337D-03 0.9030901074324D-03 + 0.9245372678559D-03 0.9464930646236D-03 0.9689695349932D-03 0.9919790001731D-03 + 0.1015534071988D-02 0.1039647659698D-02 0.1064332976981D-02 0.1089603549068D-02 + 0.1115473220057D-02 0.1141956160389D-02 0.1169066874495D-02 0.1196820208634D-02 + 0.1225231358897D-02 0.1254315879409D-02 0.1284089690715D-02 0.1314569088366D-02 + 0.1345770751696D-02 0.1377711752814D-02 0.1410409565795D-02 0.1443882076088D-02 + 0.1478147590144D-02 0.1513224845264D-02 0.1549133019674D-02 0.1585891742841D-02 + 0.1623521106018D-02 0.1662041673040D-02 0.1701474491365D-02 0.1741841103378D-02 + 0.1783163557945D-02 0.1825464422244D-02 0.1868766793867D-02 0.1913094313196D-02 + 0.1958471176071D-02 0.2004922146751D-02 0.2052472571166D-02 0.2101148390486D-02 + 0.2150976154989D-02 0.2201983038264D-02 0.2254196851731D-02 0.2307646059493D-02 + 0.2362359793542D-02 0.2418367869301D-02 0.2475700801533D-02 0.2534389820612D-02 + 0.2594466889165D-02 0.2655964719104D-02 0.2718916789042D-02 0.2783357362106D-02 + 0.2849321504172D-02 0.2916845102501D-02 0.2985964884814D-02 0.3056718438800D-02 + 0.3129144232066D-02 0.3203281632551D-02 0.3279170929405D-02 0.3356853354336D-02 + 0.3436371103460D-02 0.3517767359634D-02 0.3601086315312D-02 0.3686373195913D-02 + 0.3773674283724D-02 0.3863036942351D-02 0.3954509641719D-02 0.4048141983652D-02 + 0.4143984728019D-02 0.4242089819491D-02 0.4342510414893D-02 0.4445300911185D-02 + 0.4550516974067D-02 0.4658215567249D-02 0.4768454982366D-02 0.4881294869584D-02 + 0.4996796268890D-02 0.5115021642093D-02 0.5236034905549D-02 0.5359901463622D-02 + 0.5486688242898D-02 0.5616463727181D-02 0.5749297993262D-02 0.5885262747508D-02 + 0.6024431363262D-02 0.6166878919093D-02 0.6312682237899D-02 0.6461919926891D-02 + 0.6614672418475D-02 0.6771022012045D-02 0.6931052916716D-02 0.7094851295016D-02 + 0.7262505307545D-02 0.7434105158642D-02 0.7609743143066D-02 0.7789513693721D-02 + 0.7973513430440D-02 0.8161841209859D-02 0.8354598176397D-02 0.8551887814376D-02 + 0.8753816001287D-02 0.8960491062250D-02 0.9172023825667D-02 0.9388527680122D-02 + 0.9610118632529D-02 0.9836915367568D-02 0.1006903930843D-01 0.1030661467892D-01 + 0.1054976856688D-01 0.1079863098909D-01 0.1105333495749D-01 0.1131401654696D-01 + 0.1158081496451D-01 0.1185387262003D-01 0.1213333519856D-01 0.1241935173418D-01 + 0.1271207468545D-01 0.1301166001257D-01 0.1331826725616D-01 0.1363205961778D-01 + 0.1395320404221D-01 0.1428187130150D-01 0.1461823608081D-01 0.1496247706623D-01 + 0.1531477703430D-01 0.1567532294367D-01 0.1604430602860D-01 0.1642192189452D-01 + 0.1680837061563D-01 0.1720385683464D-01 0.1760858986456D-01 0.1802278379280D-01 + 0.1844665758734D-01 0.1888043520531D-01 0.1932434570378D-01 0.1977862335297D-01 + 0.2024350775185D-01 0.2071924394615D-01 0.2120608254895D-01 0.2170427986376D-01 + 0.2221409801021D-01 0.2273580505238D-01 0.2326967512987D-01 0.2381598859160D-01 + 0.2437503213237D-01 0.2494709893234D-01 0.2553248879941D-01 0.2613150831454D-01 + 0.2674447098014D-01 0.2737169737147D-01 0.2801351529124D-01 0.2867025992742D-01 + 0.2934227401421D-01 0.3002990799646D-01 0.3073352019732D-01 0.3145347698951D-01 + 0.3219015296988D-01 0.3294393113773D-01 0.3371520307664D-01 0.3450436914006D-01 + 0.3531183864059D-01 0.3613803004319D-01 0.3698337116219D-01 0.3784829936233D-01 + 0.3873326176383D-01 0.3963871545150D-01 0.4056512768813D-01 0.4151297613205D-01 + 0.4248274905905D-01 0.4347494558865D-01 0.4449007591493D-01 0.4552866154180D-01 + 0.4659123552298D-01 0.4767834270657D-01 0.4879053998454D-01 0.4992839654695D-01 + 0.5109249414114D-01 0.5228342733595D-01 0.5350180379101D-01 0.5474824453121D-01 + 0.5602338422639D-01 0.5732787147645D-01 0.5866236910176D-01 0.6002755443915D-01 + 0.6142411964345D-01 0.6285277199472D-01 0.6431423421119D-01 0.6580924476805D-01 + 0.6733855822219D-01 0.6890294554290D-01 0.7050319444864D-01 0.7214010975008D-01 + 0.7381451369925D-01 0.7552724634520D-01 0.7727916589591D-01 0.7907114908690D-01 + 0.8090409155624D-01 0.8277890822643D-01 0.8469653369292D-01 0.8665792261951D-01 + 0.8866405014071D-01 0.9071591227111D-01 0.9281452632182D-01 0.9496093132410D-01 + 0.9715618846031D-01 0.9940138150208D-01 0.1016976172560D+00 0.1040460260169D+00 + 0.1064477620282D+00 0.1089040039508D+00 0.1114159553388D+00 0.1139848451236D+00 + 0.1166119281054D+00 0.1192984854532D+00 0.1220458252122D+00 0.1248552828197D+00 + 0.1277282216288D+00 0.1306660334408D+00 0.1336701390448D+00 0.1367419887670D+00 + 0.1398830630269D+00 0.1430948729031D+00 0.1463789607067D+00 0.1497369005636D+00 + 0.1531702990050D+00 0.1566807955666D+00 0.1602700633964D+00 0.1639398098711D+00 + 0.1676917772207D+00 0.1715277431623D+00 0.1754495215419D+00 0.1794589629856D+00 + 0.1835579555582D+00 0.1877484254317D+00 0.1920323375616D+00 0.1964116963718D+00 + 0.2008885464482D+00 0.2054649732406D+00 0.2101431037732D+00 0.2149251073635D+00 + 0.2198131963488D+00 0.2248096268222D+00 0.2299166993754D+00 0.2351367598503D+00 + 0.2404722000984D+00 0.2459254587480D+00 0.2514990219789D+00 0.2571954243047D+00 + 0.2630172493626D+00 0.2689671307106D+00 0.2750477526311D+00 0.2812618509418D+00 + 0.2876122138134D+00 0.2941016825931D+00 0.3007331526352D+00 0.3075095741362D+00 + 0.3144339529771D+00 0.3215093515700D+00 0.3287388897102D+00 0.3361257454325D+00 + 0.3436731558729D+00 0.3513844181328D+00 0.3592628901485D+00 0.3673119915621D+00 + 0.3755352045968D+00 0.3839360749336D+00 0.3925182125899D+00 0.4012852927993D+00 + 0.4102410568930D+00 0.4193893131804D+00 0.4287339378299D+00 0.4382788757486D+00 + 0.4480281414604D+00 0.4579858199819D+00 0.4681560676951D+00 0.4785431132164D+00 + 0.4891512582614D+00 0.4999848785043D+00 0.5110484244305D+00 0.5223464221834D+00 + 0.5338834744021D+00 0.5456642610510D+00 0.5576935402392D+00 0.5699761490289D+00 + 0.5825170042325D+00 0.5953211031952D+00 0.6083935245653D+00 0.6217394290472D+00 + 0.6353640601390D+00 0.6492727448516D+00 0.6634708944082D+00 0.6779640049238D+00 + 0.6927576580616D+00 0.7078575216668D+00 0.7232693503742D+00 0.7389989861895D+00 + 0.7550523590420D+00 0.7714354873073D+00 0.7881544782973D+00 0.8052155287175D+00 + 0.8226249250876D+00 0.8403890441249D+00 0.8585143530879D+00 0.8770074100784D+00 + 0.8958748642992D+00 0.9151234562658D+00 0.9347600179702D+00 0.9547914729931D+00 + 0.9752248365635D+00 0.9960672155622D+00 0.1017325808468D+01 0.1039007905241D+01 + 0.1061120887144D+01 0.1083672226499D+01 0.1106669486370D+01 0.1130120320176D+01 + 0.1154032471231D+01 0.1178413772204D+01 0.1203272144493D+01 0.1228615597523D+01 + 0.1254452227950D+01 0.1280790218774D+01 0.1307637838359D+01 0.1335003439353D+01 + 0.1362895457506D+01 0.1391322410385D+01 0.1420292895972D+01 0.1449815591159D+01 + 0.1479899250115D+01 0.1510552702537D+01 0.1541784851777D+01 0.1573604672833D+01 + 0.1606021210210D+01 0.1639043575644D+01 0.1672680945677D+01 0.1706942559091D+01 + 0.1741837714186D+01 0.1777375765901D+01 0.1813566122779D+01 0.1850418243757D+01 + 0.1887941634794D+01 0.1926145845317D+01 0.1965040464488D+01 0.2004635117287D+01 + 0.2044939460400D+01 0.2085963177919D+01 0.2127715976829D+01 0.2170207582300D+01 + 0.2213447732763D+01 0.2257446174769D+01 0.2302212657626D+01 0.2347756927812D+01 + 0.2394088723154D+01 0.2441217766767D+01 0.2489153760756D+01 0.2537906379665D+01 + 0.2587485263675D+01 0.2637900011547D+01 0.2689160173295D+01 0.2741275242598D+01 + 0.2794254648931D+01 0.2848107749430D+01 0.2902843820459D+01 0.2958472048904D+01 + 0.3015001523163D+01 0.3072441223848D+01 0.3130800014182D+01 0.3190086630094D+01 + 0.3250309670002D+01 0.3311477584285D+01 0.3373598664440D+01 0.3436681031917D+01 + 0.3500732626634D+01 0.3565761195166D+01 0.3631774278604D+01 0.3698779200090D+01 + 0.3766783052007D+01 0.3835792682854D+01 0.3905814683769D+01 0.3976855374728D+01 + 0.4048920790399D+01 0.4122016665671D+01 0.4196148420834D+01 0.4271321146438D+01 + 0.4347539587809D+01 0.4424808129241D+01 0.4503130777854D+01 0.4582511147131D+01 + 0.4662952440136D+01 0.4744457432406D+01 0.4827028454547D+01 0.4910667374509D+01 + 0.4995375579573D+01 0.5081153958042D+01 0.5168002880655D+01 0.5255922181721D+01 + 0.5344911139992D+01 0.5434968459290D+01 0.5526092248881D+01 0.5618280003639D+01 + 0.5711528583982D+01 0.5805834195616D+01 0.5901192369103D+01 0.5997597939257D+01 + 0.6095045024395D+01 0.6193527005472D+01 0.6293036505099D+01 0.6393565366487D+01 + 0.6495104632331D+01 0.6597644523660D+01 0.6701174418681D+01 0.6805682831645D+01 + 0.6911157391760D+01 0.7017584822191D+01 0.7124950919171D+01 0.7233240531258D+01 + 0.7342437538781D+01 0.7452524833500D+01 0.7563484298530D+01 0.7675296788562D+01 + 0.7787942110430D+01 0.7901399004058D+01 0.8015645123842D+01 0.8130657020509D+01 + 0.8246410123503D+01 0.8362878723950D+01 0.8480035958250D+01 0.8597853792358D+01 + 0.8716303006799D+01 0.8835353182487D+01 0.8954972687391D+01 0.9075128664130D+01 + 0.9195787018538D+01 0.9316912409273D+01 0.9438468238543D+01 0.9560416644000D+01 + 0.9682718491880D+01 0.9805333371460D+01 0.9928219590896D+01 0.1005133417453D+02 + 0.1017463286171D+02 0.1029807010722D+02 0.1042159908344D+02 0.1054517168417D+02 + 0.1066873853037D+02 0.1079224897780D+02 0.1091565112659D+02 0.1103889183301D+02 + 0.1116191672323D+02 0.1128467020944D+02 0.1140709550823D+02 0.1152913466133D+02 + 0.1165072855885D+02 0.1177181696506D+02 0.1189233854680D+02 0.1201223090454D+02 + 0.1213143060625D+02 0.1224987322407D+02 0.1236749337400D+02 0.1248422475837D+02 + 0.1260000021157D+02 0.1271475174875D+02 0.1282841061773D+02 0.1294090735413D+02 + 0.1305217183979D+02 0.1316213336451D+02 0.1327072069111D+02 0.1337786212400D+02 + 0.1348348558110D+02 0.1358751866928D+02 0.1368988876325D+02 0.1379052308804D+02 + 0.1388934880491D+02 0.1398629310084D+02 0.1408128328150D+02 0.1417424686776D+02 + 0.1426511169568D+02 0.1435380601989D+02 0.1444025862047D+02 0.1452439891313D+02 + 0.1460615706273D+02 0.1468546410000D+02 0.1476225204147D+02 0.1483645401237D+02 + 0.1490800437259D+02 0.1497683884540D+02 0.1504289464893D+02 0.1510611063019D+02 + 0.1516642740155D+02 0.1522378747941D+02 0.1527813542502D+02 0.1532941798703D+02 + 0.1537758424592D+02 0.1542258575964D+02 0.1546437671057D+02 0.1550291405346D+02 + 0.1553815766392D+02 0.1557007048740D+02 0.1559861868825D+02 0.1562377179849D+02 + 0.1564550286611D+02 0.1566378860245D+02 0.1567860952827D+02 0.1568995011828D+02 + 0.1569779894358D+02 0.1570214881171D+02 0.1570299690387D+02 0.1570034490889D+02 + 0.1569419915342D+02 0.1568457072811D+02 0.1567147560898D+02 0.1565493477391D+02 + 0.1563497431333D+02 0.1561162553504D+02 0.1558492506233D+02 0.1555491492507D+02 + 0.1552164264320D+02 0.1548516130217D+02 0.1544552961962D+02 0.1540281200312D+02 + 0.1535707859803D+02 0.1530840532536D+02 0.1525687390884D+02 0.1520257189079D+02 + 0.1514559263632D+02 0.1508603532531D+02 0.1502400493172D+02 0.1495961218971D+02 + 0.1489297354623D+02 0.1482421109950D+02 0.1475345252306D+02 0.1468083097499D+02 + 0.1460648499184D+02 0.1453055836709D+02 0.1445320001360D+02 0.1437456381003D+02 + 0.1429480843075D+02 0.1421409715909D+02 0.1413259768392D+02 0.1405048187912D+02 + 0.1396792556614D+02 0.1388510825940D+02 0.1380221289467D+02 0.1371942554036D+02 + 0.1363693509198D+02 0.1355493294972D+02 0.1347361267958D+02 0.1339316965818D+02 + 0.1331380070165D+02 0.1323570367897D+02 0.1315907711016D+02 0.1308411975004D+02 + 0.1301103015787D+02 0.1294000625373D+02 0.1287124486230D+02 0.1280494124477D+02 + 0.1274128861984D+02 0.1268047767460D+02 0.1262269606643D+02 0.1256812791682D+02 + 0.1251695329838D+02 0.1246934771604D+02 0.1242548158392D+02 0.1238551969900D+02 + 0.1234962071295D+02 0.1231793660373D+02 0.1229061214824D+02 0.1226778439767D+02 + 0.1224958215706D+02 0.1223612547078D+02 0.1222752511553D+02 0.1222388210258D+02 + 0.1222528719100D+02 0.1223182041366D+02 0.1224355061775D+02 0.1226053502171D+02 + 0.1228281879023D+02 0.1231043462935D+02 0.1234340240339D+02 0.1238172877543D+02 + 0.1242540687338D+02 0.1247441598324D+02 0.1252872127141D+02 0.1258827353770D+02 + 0.1265300900087D+02 0.1272284911822D+02 0.1279770044081D+02 0.1287745450601D+02 + 0.1296198776857D+02 0.1305116157186D+02 0.1314482216032D+02 0.1324280073454D+02 + 0.1334491354991D+02 0.1345096205988D+02 0.1356073310471D+02 0.1367399914649D+02 + 0.1379051855093D+02 0.1391003591655D+02 0.1403228245150D+02 0.1415697639825D+02 + 0.1428382350615D+02 0.1441251755180D+02 0.1454274090682D+02 0.1467416515265D+02 + 0.1480645174180D+02 0.1493925270450D+02 0.1507221140012D+02 0.1520496331175D+02 + 0.1533713688305D+02 0.1546835439544D+02 0.1559823288411D+02 0.1572638509088D+02 + 0.1585242045188D+02 0.1597594611769D+02 0.1609656800349D+02 0.1621389186673D+02 + 0.1632752440935D+02 0.1643707440175D+02 0.1654215382521D+02 0.1664237902974D+02 + 0.1673737190368D+02 0.1682676105166D+02 0.1691018297723D+02 0.1698728326633D+02 + 0.1705771776761D+02 0.1712115376582D+02 0.1717727114395D+02 0.1722576353007D+02 + 0.1726633942470D+02 0.1729872330429D+02 0.1732265669667D+02 0.1733789922408D+02 + 0.1734422960952D+02 0.1734144664198D+02 0.1732937009656D+02 0.1730784160492D+02 + 0.1727672547225D+02 0.1723590943644D+02 0.1718530536559D+02 0.1712484989008D+02 + 0.1705450496536D+02 0.1697425836203D+02 0.1688412407975D+02 0.1678414268193D+02 + 0.1667438154808D+02 0.1655493504124D+02 0.1642592458792D+02 0.1628749866833D+02 + 0.1613983271513D+02 0.1598312891883D+02 0.1581761593876D+02 0.1564354851859D+02 + 0.1546120700566D+02 0.1527089677411D+02 0.1507294755170D+02 0.1486771265109D+02 + 0.1465556810624D+02 0.1443691171558D+02 0.1421216199343D+02 0.1398175703206D+02 + 0.1374615327696D+02 0.1350582421831D+02 0.1326125900230D+02 0.1301296096613D+02 + 0.1276144610103D+02 0.1250724144826D+02 0.1225088343315D+02 0.1199291614280D+02 + 0.1173388955369D+02 0.1147435771520D+02 0.1121487689618D+02 0.1095600370143D+02 + 0.1069829316549D+02 0.1044229683153D+02 0.1018856082317D+02 0.9937623917321D+01 + 0.9690015626445D+01 0.9446254298643D+01 0.9206845244038D+01 0.8972278896087D+01 + 0.8743029016360D+01 0.8519550951297D+01 0.8302279949355D+01 0.8091629546790D+01 + 0.7887990030116D+01 0.7691726983014D+01 0.7503179925129D+01 0.7322661049902D+01 + 0.7150454068046D+01 0.6986813162918D+01 0.6831962063451D+01 0.6686093239819D+01 + 0.6549367226364D+01 0.6421912075717D+01 0.6303822947394D+01 0.6195161833447D+01 + 0.6095957423078D+01 0.6006205107394D+01 0.5925867124779D+01 0.5854872846611D+01 + 0.5793119202371D+01 0.5740471242429D+01 0.5696762836121D+01 0.5661797502031D+01 + 0.5635349366701D+01 0.5617164247353D+01 0.5606960853570D+01 0.5604432102259D+01 + 0.5609246539649D+01 0.5621049863505D+01 0.5639466538232D+01 0.5664101495024D+01 + 0.5694541908766D+01 0.5730359042993D+01 0.5771110153784D+01 0.5816340443192D+01 + 0.5865585052475D+01 0.5918371085180D+01 0.5974219649957D+01 0.6032647912832D+01 + 0.6093171148637D+01 0.6155304781260D+01 0.6218566402475D+01 0.6282477759234D+01 + 0.6346566699475D+01 0.6410369066815D+01 0.6473430534781D+01 0.6535308371644D+01 + 0.6595573127395D+01 0.6653810234872D+01 0.6709621517670D+01 0.6762626598041D+01 + 0.6812464198680D+01 0.6858793332986D+01 0.6901294379138D+01 0.6939670034070D+01 + 0.6973646144233D+01 0.7002972410830D+01 0.7027422967990D+01 0.7046796833200D+01 + 0.7060918230061D+01 0.7069636784259D+01 0.7072827594374D+01 0.7070391179926D+01 + 0.7062253309715D+01 0.7048364714231D+01 0.7028700686483D+01 0.7003260576238D+01 + 0.6972067183121D+01 0.6935166054562D+01 0.6892624694966D+01 0.6844531692843D+01 + 0.6790995772965D+01 0.6732144780827D+01 0.6668124606899D+01 0.6599098058289D+01 + 0.6525243685473D+01 0.6446754571799D+01 0.6363837093418D+01 0.6276709657188D+01 + 0.6185601423998D+01 0.6090751024726D+01 0.5992405275866D+01 0.5890817901556D+01 + 0.5786248268476D+01 0.5678960139726D+01 0.5569220453475D+01 0.5457298131760D+01 + 0.5343462924443D+01 0.5227984292928D+01 0.5111130337809D+01 0.4993166774192D+01 + 0.4874355958030D+01 0.4754955966341D+01 0.4635219733799D+01 0.4515394247714D+01 + 0.4395719803061D+01 0.4276429318764D+01 0.4157747716089D+01 0.4039891359594D+01 + 0.3923067560758D+01 0.3807474144035D+01 0.3693299074769D+01 0.3580720148118D+01 + 0.3469904737816D+01 0.3361009603367D+01 0.3254180754011D+01 0.3149553367571D+01 + 0.3047251762116D+01 0.2947389418162D+01 0.2850069049006D+01 0.2755382716614D+01 + 0.2663411990420D+01 0.2574228146230D+01 0.2487892402405D+01 0.2404456190400D+01 + 0.2323961456713D+01 0.2246440993268D+01 0.2171918793250D+01 0.2100410429420D+01 + 0.2031923451965D+01 0.1966457802972D+01 0.1904006244666D+01 0.1844554798640D+01 + 0.1788083193345D+01 0.1734565317240D+01 0.1683969675070D+01 0.1636259844862D+01 + 0.1591394933364D+01 0.1549330027746D+01 0.1510016641546D+01 0.1473403152964D+01 + 0.1439435233770D+01 0.1408056267219D+01 0.1379207753531D+01 0.1352829701650D+01 + 0.1328861006133D+01 0.1307239808175D+01 0.1287903839946D+01 0.1270790751526D+01 + 0.1255838419882D+01 0.1242985239474D+01 0.1232170394175D+01 0.1223334110328D+01 + 0.1216417890857D+01 0.1211364730456D+01 0.1208119311934D+01 0.1206628183910D+01 + 0.1206839920052D+01 0.1208705260142D+01 0.1212177233248D+01 0.1217211263310D+01 + 0.1223765257423D+01 0.1231799677111D+01 0.1241277592815D+01 0.1252164721788D+01 + 0.1264429449524D+01 0.1278042834732D+01 0.1292978597814D+01 0.1309213092627D+01 + 0.1326725261233D+01 0.1345496571135D+01 0.1365510934358D+01 0.1386754607532D+01 + 0.1409215426363D+01 0.1433003097507D+01 0.1458223277591D+01 0.1484860699421D+01 + 0.1512902583279D+01 0.1542338542721D+01 0.1573160498496D+01 0.1605362600812D+01 + 0.1638941160170D+01 0.1673894586973D+01 0.1710223340083D+01 0.1747929884514D+01 + 7 1012 + 1 0 -1 -511.89150 + 2 0 -1 -58.80097 + 2 1 1 -50.61290 + 2 1 -2 -49.69692 + 3 0 -1 -5.52718 + 3 1 1 -3.14309 + 3 1 -2 -3.03034 + 0.2123373461549D-04 0.2173914995400D-04 0.2225659296114D-04 0.2278634977738D-04 + 0.2332871334728D-04 0.2388398358121D-04 0.2445246752083D-04 0.2503447950857D-04 + 0.2563034136106D-04 0.2624038254674D-04 0.2686494036763D-04 0.2750436014548D-04 + 0.2815899541226D-04 0.2882920810522D-04 0.2951536876657D-04 0.3021785674791D-04 + 0.3093706041946D-04 0.3167337738432D-04 0.3242721469777D-04 0.3319898909177D-04 + 0.3398912720483D-04 0.3479806581728D-04 0.3562625209215D-04 0.3647414382175D-04 + 0.3734220968012D-04 0.3823092948144D-04 0.3914079444457D-04 0.4007230746391D-04 + 0.4102598338660D-04 0.4200234929636D-04 0.4300194480406D-04 0.4402532234512D-04 + 0.4507304748402D-04 0.4614569922601D-04 0.4724387033618D-04 0.4836816766617D-04 + 0.4951921248852D-04 0.5069764083903D-04 0.5190410386721D-04 0.5313926819498D-04 + 0.5440381628400D-04 0.5569844681152D-04 0.5702387505533D-04 0.5838083328767D-04 + 0.5977007117859D-04 0.6119235620880D-04 0.6264847409228D-04 0.6413922920902D-04 + 0.6566544504782D-04 0.6722796465978D-04 0.6882765112238D-04 0.7046538801462D-04 + 0.7214207990339D-04 0.7385865284136D-04 0.7561605487667D-04 0.7741525657465D-04 + 0.7925725155197D-04 0.8114305702331D-04 0.8307371436110D-04 0.8505028966841D-04 + 0.8707387436545D-04 0.8914558578994D-04 0.9126656781168D-04 0.9343799146165D-04 + 0.9566105557602D-04 0.9793698745538D-04 0.1002670435396D-03 0.1026525100984D-03 + 0.1050947039390D-03 0.1075949731294D-03 0.1101546977394D-03 0.1127752905997D-03 + 0.1154581980775D-03 0.1182049008719D-03 0.1210169148270D-03 0.1238957917652D-03 + 0.1268431203390D-03 0.1298605269045D-03 0.1329496764137D-03 0.1361122733297D-03 + 0.1393500625619D-03 0.1426648304247D-03 0.1460584056178D-03 0.1495326602303D-03 + 0.1530895107681D-03 0.1567309192056D-03 0.1604588940629D-03 0.1642754915072D-03 + 0.1681828164816D-03 0.1721830238593D-03 0.1762783196258D-03 0.1804709620887D-03 + 0.1847632631165D-03 0.1891575894056D-03 0.1936563637785D-03 0.1982620665115D-03 + 0.2029772366947D-03 0.2078044736231D-03 0.2127464382210D-03 0.2178058545005D-03 + 0.2229855110531D-03 0.2282882625778D-03 0.2337170314442D-03 0.2392748092933D-03 + 0.2449646586752D-03 0.2507897147258D-03 0.2567531868833D-03 0.2628583606444D-03 + 0.2691085993625D-03 0.2755073460880D-03 0.2820581254518D-03 0.2887645455935D-03 + 0.2956303001344D-03 0.3026591701977D-03 0.3098550264756D-03 0.3172218313454D-03 + 0.3247636410353D-03 0.3324846078408D-03 0.3403889823939D-03 0.3484811159850D-03 + 0.3567654629401D-03 0.3652465830528D-03 0.3739291440747D-03 0.3828179242637D-03 + 0.3919178149916D-03 0.4012338234146D-03 0.4107710752045D-03 0.4205348173457D-03 + 0.4305304209971D-03 0.4407633844209D-03 0.4512393359813D-03 0.4619640372121D-03 + 0.4729433859575D-03 0.4841834195856D-03 0.4956903182785D-03 0.5074704083979D-03 + 0.5195301659314D-03 0.5318762200182D-03 0.5445153565579D-03 0.5574545219044D-03 + 0.5707008266453D-03 0.5842615494708D-03 0.5981441411326D-03 0.6123562284955D-03 + 0.6269056186847D-03 0.6418003033287D-03 0.6570484629028D-03 0.6726584711734D-03 + 0.6886388997468D-03 0.7049985227240D-03 0.7217463214642D-03 0.7388914894603D-03 + 0.7564434373277D-03 0.7744117979097D-03 0.7928064315026D-03 0.8116374312024D-03 + 0.8309151283763D-03 0.8506500982622D-03 0.8708531656989D-03 0.8915354109894D-03 + 0.9127081759015D-03 0.9343830698083D-03 0.9565719759715D-03 0.9792870579714D-03 + 0.1002540766287D-02 0.1026345845027D-02 0.1050715338824D-02 0.1075662599879D-02 + 0.1101201295181D-02 0.1127345413883D-02 0.1154109274864D-02 0.1181507534450D-02 + 0.1209555194328D-02 0.1238267609637D-02 0.1267660497252D-02 0.1297749944251D-02 + 0.1328552416593D-02 0.1360084767981D-02 0.1392364248945D-02 0.1425408516127D-02 + 0.1459235641785D-02 0.1493864123514D-02 0.1529312894196D-02 0.1565601332181D-02 + 0.1602749271697D-02 0.1640777013510D-02 0.1679705335822D-02 0.1719555505429D-02 + 0.1760349289133D-02 0.1802108965417D-02 0.1844857336390D-02 0.1888617740010D-02 + 0.1933414062589D-02 0.1979270751585D-02 0.2026212828687D-02 0.2074265903209D-02 + 0.2123456185786D-02 0.2173810502385D-02 0.2225356308647D-02 0.2278121704551D-02 + 0.2332135449417D-02 0.2387426977257D-02 0.2444026412476D-02 0.2501964585936D-02 + 0.2561273051389D-02 0.2621984102285D-02 0.2684130788965D-02 0.2747746936258D-02 + 0.2812867161465D-02 0.2879526892772D-02 0.2947762388071D-02 0.3017610754222D-02 + 0.3089109966753D-02 0.3162298890003D-02 0.3237217297741D-02 0.3313905894238D-02 + 0.3392406335837D-02 0.3472761253004D-02 0.3555014272883D-02 0.3639210042377D-02 + 0.3725394251736D-02 0.3813613658698D-02 0.3903916113173D-02 0.3996350582488D-02 + 0.4090967177209D-02 0.4187817177547D-02 0.4286953060364D-02 0.4388428526794D-02 + 0.4492298530489D-02 0.4598619306504D-02 0.4707448400838D-02 0.4818844700646D-02 + 0.4932868465127D-02 0.5049581357120D-02 0.5169046475404D-02 0.5291328387739D-02 + 0.5416493164639D-02 0.5544608413917D-02 0.5675743316002D-02 0.5809968660057D-02 + 0.5947356880904D-02 0.6087982096781D-02 0.6231920147946D-02 0.6379248636155D-02 + 0.6530046965011D-02 0.6684396381234D-02 0.6842380016839D-02 0.7004082932273D-02 + 0.7169592160503D-02 0.7338996752102D-02 0.7512387821327D-02 0.7689858593235D-02 + 0.7871504451850D-02 0.8057422989391D-02 0.8247714056607D-02 0.8442479814225D-02 + 0.8641824785540D-02 0.8845855910175D-02 0.9054682599025D-02 0.9268416790430D-02 + 0.9487173007575D-02 0.9711068417172D-02 0.9940222889430D-02 0.1017475905935D-01 + 0.1041480238936D-01 0.1066048123337D-01 0.1091192690214D-01 0.1116927373022D-01 + 0.1143265914425D-01 0.1170222373276D-01 0.1197811131760D-01 0.1226046902681D-01 + 0.1254944736912D-01 0.1284520031015D-01 0.1314788535014D-01 0.1345766360348D-01 + 0.1377469987990D-01 0.1409916276750D-01 0.1443122471744D-01 0.1477106213063D-01 + 0.1511885544620D-01 0.1547478923187D-01 0.1583905227632D-01 0.1621183768351D-01 + 0.1659334296907D-01 0.1698377015868D-01 0.1738332588869D-01 0.1779222150874D-01 + 0.1821067318670D-01 0.1863890201578D-01 0.1907713412394D-01 0.1952560078568D-01 + 0.1998453853608D-01 0.2045418928739D-01 0.2093480044805D-01 0.2142662504416D-01 + 0.2192992184360D-01 0.2244495548276D-01 0.2297199659585D-01 0.2351132194704D-01 + 0.2406321456527D-01 0.2462796388197D-01 0.2520586587156D-01 0.2579722319499D-01 + 0.2640234534617D-01 0.2702154880148D-01 0.2765515717239D-01 0.2830350136121D-01 + 0.2896691972007D-01 0.2964575821319D-01 0.3034037058244D-01 0.3105111851634D-01 + 0.3177837182251D-01 0.3252250860359D-01 0.3328391543683D-01 0.3406298755727D-01 + 0.3486012904465D-01 0.3567575301409D-01 0.3651028181063D-01 0.3736414720771D-01 + 0.3823779060956D-01 0.3913166325773D-01 0.4004622644169D-01 0.4098195171364D-01 + 0.4193932110758D-01 0.4291882736274D-01 0.4392097415138D-01 0.4494627631115D-01 + 0.4599526008193D-01 0.4706846334735D-01 0.4816643588104D-01 0.4928973959763D-01 + 0.5043894880863D-01 0.5161465048329D-01 0.5281744451445D-01 0.5404794398948D-01 + 0.5530677546647D-01 0.5659457925562D-01 0.5791200970601D-01 0.5925973549779D-01 + 0.6063843993988D-01 0.6204882127328D-01 0.6349159298001D-01 0.6496748409788D-01 + 0.6647723954103D-01 0.6802162042643D-01 0.6960140440641D-01 0.7121738600725D-01 + 0.7287037697395D-01 0.7456120662128D-01 0.7629072219118D-01 0.7805978921657D-01 + 0.7986929189166D-01 0.8172013344892D-01 0.8361323654265D-01 0.8554954363940D-01 + 0.8753001741513D-01 0.8955564115940D-01 0.9162741918654D-01 0.9374637725383D-01 + 0.9591356298698D-01 0.9813004631275D-01 0.1003969198990D+00 0.1027152996019D+00 + 0.1050863249211D+00 0.1075111594618D+00 0.1099909914051D+00 0.1125270339855D+00 + 0.1151205259766D+00 0.1177727321842D+00 0.1204849439476D+00 0.1232584796489D+00 + 0.1260946852301D+00 0.1289949347182D+00 0.1319606307590D+00 0.1349932051583D+00 + 0.1380941194317D+00 0.1412648653632D+00 0.1445069655708D+00 0.1478219740820D+00 + 0.1512114769165D+00 0.1546770926778D+00 0.1582204731535D+00 0.1618433039236D+00 + 0.1655473049771D+00 0.1693342313383D+00 0.1732058737000D+00 0.1771640590662D+00 + 0.1812106514032D+00 0.1853475522988D+00 0.1895767016304D+00 0.1939000782413D+00 + 0.1983197006251D+00 0.2028376276193D+00 0.2074559591063D+00 0.2121768367234D+00 + 0.2170024445803D+00 0.2219350099852D+00 0.2269768041788D+00 0.2321301430764D+00 + 0.2373973880172D+00 0.2427809465221D+00 0.2482832730585D+00 0.2539068698131D+00 + 0.2596542874715D+00 0.2655281260047D+00 0.2715310354636D+00 0.2776657167793D+00 + 0.2839349225700D+00 0.2903414579550D+00 0.2968881813739D+00 0.3035780054119D+00 + 0.3104138976312D+00 0.3173988814070D+00 0.3245360367687D+00 0.3318285012460D+00 + 0.3392794707188D+00 0.3468922002717D+00 0.3546700050516D+00 0.3626162611285D+00 + 0.3707344063591D+00 0.3790279412529D+00 0.3875004298396D+00 0.3961555005386D+00 + 0.4049968470283D+00 0.4140282291162D+00 0.4232534736091D+00 0.4326764751811D+00 + 0.4423011972414D+00 0.4521316727988D+00 0.4621720053237D+00 0.4724263696067D+00 + 0.4828990126121D+00 0.4935942543268D+00 0.5045164886027D+00 0.5156701839924D+00 + 0.5270598845772D+00 0.5386902107861D+00 0.5505658602051D+00 0.5626916083760D+00 + 0.5750723095830D+00 0.5877128976270D+00 0.6006183865849D+00 0.6137938715547D+00 + 0.6272445293836D+00 0.6409756193782D+00 0.6549924839961D+00 0.6693005495166D+00 + 0.6839053266899D+00 0.6988124113627D+00 0.7140274850788D+00 0.7295563156538D+00 + 0.7454047577210D+00 0.7615787532478D+00 0.7780843320207D+00 0.7949276120969D+00 + 0.8121148002200D+00 0.8296521921997D+00 0.8475461732513D+00 0.8658032182945D+00 + 0.8844298922086D+00 0.9034328500427D+00 0.9228188371772D+00 0.9425946894360D+00 + 0.9627673331456D+00 0.9833437851400D+00 0.1004331152707D+01 0.1025736633476D+01 + 0.1047567515241D+01 0.1069831175720D+01 0.1092535082243D+01 0.1115686791375D+01 + 0.1139293948457D+01 0.1163364287075D+01 0.1187905628445D+01 0.1212925880722D+01 + 0.1238433038208D+01 0.1264435180485D+01 0.1290940471443D+01 0.1317957158220D+01 + 0.1345493570030D+01 0.1373558116898D+01 0.1402159288280D+01 0.1431305651569D+01 + 0.1461005850494D+01 0.1491268603389D+01 0.1522102701342D+01 0.1553517006218D+01 + 0.1585520448546D+01 0.1618122025271D+01 0.1651330797361D+01 0.1685155887276D+01 + 0.1719606476280D+01 0.1754691801602D+01 0.1790421153434D+01 0.1826803871767D+01 + 0.1863849343063D+01 0.1901566996742D+01 0.1939966301501D+01 0.1979056761446D+01 + 0.2018847912032D+01 0.2059349315815D+01 0.2100570557999D+01 0.2142521241790D+01 + 0.2185210983528D+01 0.2228649407614D+01 0.2272846141215D+01 0.2317810808747D+01 + 0.2363553026124D+01 0.2410082394775D+01 0.2457408495423D+01 0.2505540881617D+01 + 0.2554489073015D+01 0.2604262548407D+01 0.2654870738488D+01 0.2706323018355D+01 + 0.2758628699743D+01 0.2811797022979D+01 0.2865837148659D+01 0.2920758149043D+01 + 0.2976568999160D+01 0.3033278567615D+01 0.3090895607108D+01 0.3149428744640D+01 + 0.3208886471423D+01 0.3269277132479D+01 0.3330608915918D+01 0.3392889841912D+01 + 0.3456127751341D+01 0.3520330294118D+01 0.3585504917195D+01 0.3651658852234D+01 + 0.3718799102956D+01 0.3786932432154D+01 0.3856065348377D+01 0.3926204092282D+01 + 0.3997354622651D+01 0.4069522602076D+01 0.4142713382310D+01 0.4216931989288D+01 + 0.4292183107814D+01 0.4368471065927D+01 0.4445799818928D+01 0.4524172933100D+01 + 0.4603593569097D+01 0.4684064465021D+01 0.4765587919192D+01 0.4848165772611D+01 + 0.4931799391130D+01 0.5016489647323D+01 0.5102236902085D+01 0.5189040985952D+01 + 0.5276901180158D+01 0.5365816197444D+01 0.5455784162617D+01 0.5546802592894D+01 + 0.5638868378017D+01 0.5731977760181D+01 0.5826126313769D+01 0.5921308924927D+01 + 0.6017519770983D+01 0.6114752299744D+01 0.6212999208681D+01 0.6312252424025D+01 + 0.6412503079799D+01 0.6513741496818D+01 0.6615957161666D+01 0.6719138705689D+01 + 0.6823273884037D+01 0.6928349554769D+01 0.7034351658067D+01 0.7141265195588D+01 + 0.7249074209985D+01 0.7357761764637D+01 0.7467309923627D+01 0.7577699732003D+01 + 0.7688911196366D+01 0.7800923265826D+01 0.7913713813378D+01 0.8027259617727D+01 + 0.8141536345630D+01 0.8256518534789D+01 0.8372179577355D+01 0.8488491704090D+01 + 0.8605425969248D+01 0.8722952236222D+01 0.8841039164025D+01 0.8959654194655D+01 + 0.9078763541413D+01 0.9198332178230D+01 0.9318323830066D+01 0.9438700964464D+01 + 0.9559424784293D+01 0.9680455221780D+01 0.9801750933887D+01 0.9923269299099D+01 + 0.1004496641570D+02 0.1016679710163D+02 0.1028871489593D+02 0.1041067206198D+02 + 0.1053261959239D+02 0.1065450721594D+02 0.1077628340626D+02 0.1089789539267D+02 + 0.1101928917306D+02 0.1114040952889D+02 0.1126120004259D+02 0.1138160311709D+02 + 0.1150155999788D+02 0.1162101079752D+02 0.1173989452270D+02 0.1185814910389D+02 + 0.1197571142774D+02 0.1209251737221D+02 0.1220850184455D+02 0.1232359882222D+02 + 0.1243774139668D+02 0.1255086182033D+02 0.1266289155645D+02 0.1277376133233D+02 + 0.1288340119558D+02 0.1299174057364D+02 0.1309870833671D+02 0.1320423286383D+02 + 0.1330824211245D+02 0.1341066369131D+02 0.1351142493681D+02 0.1361045299271D+02 + 0.1370767489335D+02 0.1380301765027D+02 0.1389640834224D+02 0.1398777420882D+02 + 0.1407704274716D+02 0.1416414181234D+02 0.1424899972093D+02 0.1433154535791D+02 + 0.1441170828680D+02 0.1448941886294D+02 0.1456460834990D+02 0.1463720903887D+02 + 0.1470715437095D+02 0.1477437906225D+02 0.1483881923166D+02 0.1490041253114D+02 + 0.1495909827839D+02 0.1501481759178D+02 0.1506751352732D+02 0.1511713121747D+02 + 0.1516361801165D+02 0.1520692361818D+02 0.1524700024742D+02 0.1528380275595D+02 + 0.1531728879140D+02 0.1534741893776D+02 0.1537415686084D+02 0.1539746945363D+02 + 0.1541732698111D+02 0.1543370322439D+02 0.1544657562364D+02 0.1545592541956D+02 + 0.1546173779302D+02 0.1546400200242D+02 0.1546271151843D+02 0.1545786415570D+02 + 0.1544946220111D+02 0.1543751253809D+02 0.1542202676661D+02 0.1540302131844D+02 + 0.1538051756708D+02 0.1535454193202D+02 0.1532512597682D+02 0.1529230650045D+02 + 0.1525612562157D+02 0.1521663085508D+02 0.1517387518057D+02 0.1512791710213D+02 + 0.1507882069905D+02 0.1502665566690D+02 0.1497149734847D+02 0.1491342675424D+02 + 0.1485253057170D+02 0.1478890116319D+02 0.1472263655178D+02 0.1465384039476D+02 + 0.1458262194423D+02 0.1450909599456D+02 0.1443338281613D+02 0.1435560807511D+02 + 0.1427590273888D+02 0.1419440296685D+02 0.1411124998625D+02 0.1402658995277D+02 + 0.1394057379573D+02 0.1385335704764D+02 0.1376509965795D+02 0.1367596579089D+02 + 0.1358612360737D+02 0.1349574503081D+02 0.1340500549696D+02 0.1331408368786D+02 + 0.1322316124986D+02 0.1313242249599D+02 0.1304205409292D+02 0.1295224473262D+02 + 0.1286318478926D+02 0.1277506596148D+02 0.1268808090072D+02 0.1260242282594D+02 + 0.1251828512526D+02 0.1243586094535D+02 0.1235534276899D+02 0.1227692198172D+02 + 0.1220078842830D+02 0.1212712995982D+02 0.1205613197253D+02 0.1198797693913D+02 + 0.1192284393379D+02 0.1186090815186D+02 0.1180234042546D+02 0.1174730673615D+02 + 0.1169596772603D+02 0.1164847820834D+02 0.1160498667924D+02 0.1156563483188D+02 + 0.1153055707436D+02 0.1149988005301D+02 0.1147372218250D+02 0.1145219318434D+02 + 0.1143539363525D+02 0.1142341452711D+02 0.1141633683999D+02 0.1141423112993D+02 + 0.1141715713298D+02 0.1142516338731D+02 0.1143828687474D+02 0.1145655268355D+02 + 0.1147997369390D+02 0.1150855028761D+02 0.1154227008374D+02 0.1158110770138D+02 + 0.1162502455129D+02 0.1167396865756D+02 0.1172787451079D+02 0.1178666295396D+02 + 0.1185024110228D+02 0.1191850229803D+02 0.1199132610159D+02 0.1206857831946D+02 + 0.1215011107019D+02 0.1223576288907D+02 0.1232535887199D+02 0.1241871085933D+02 + 0.1251561765997D+02 0.1261586531600D+02 0.1271922740805D+02 0.1282546540151D+02 + 0.1293432903330D+02 0.1304555673916D+02 0.1315887612096D+02 0.1327400445348D+02 + 0.1339064923005D+02 0.1350850874625D+02 0.1362727272054D+02 0.1374662295087D+02 + 0.1386623400591D+02 0.1398577394943D+02 0.1410490509638D+02 0.1422328479880D+02 + 0.1434056625987D+02 0.1445639937388D+02 0.1457043159027D+02 0.1468230879914D+02 + 0.1479167623614D+02 0.1489817940404D+02 0.1500146500841D+02 0.1510118190471D+02 + 0.1519698205391D+02 0.1528852148379D+02 0.1537546125281D+02 0.1545746841364D+02 + 0.1553421697307D+02 0.1560538884523D+02 0.1567067479483D+02 0.1572977536717D+02 + 0.1578240180176D+02 0.1582827692612D+02 0.1586713602663D+02 0.1589872769311D+02 + 0.1592281463392D+02 0.1593917445849D+02 0.1594760042409D+02 0.1594790214378D+02 + 0.1593990625272D+02 0.1592345702984D+02 0.1589841697221D+02 0.1586466731948D+02 + 0.1582210852585D+02 0.1577066067732D+02 0.1571026385193D+02 0.1564087842120D+02 + 0.1556248529064D+02 0.1547508607802D+02 0.1537870322780D+02 0.1527338006062D+02 + 0.1515918075676D+02 0.1503619027308D+02 0.1490451419267D+02 0.1476427850715D+02 + 0.1461562933169D+02 0.1445873255288D+02 0.1429377341010D+02 0.1412095601137D+02 + 0.1394050278444D+02 0.1375265386499D+02 0.1355766642312D+02 0.1335581393054D+02 + 0.1314738537038D+02 0.1293268439219D+02 0.1271202841511D+02 0.1248574768189D+02 + 0.1225418426740D+02 0.1201769104500D+02 0.1177663061449D+02 0.1153137419578D+02 + 0.1128230049248D+02 0.1102979452961D+02 0.1077424647032D+02 0.1051605041603D+02 + 0.1025560319513D+02 0.9993303145083D+01 0.9729548892983D+01 0.9464738139829D+01 + 0.9199266453606D+01 0.8933526076402D+01 0.8667904750745D+01 0.8402784570301D+01 + 0.8138540859996D+01 0.7875541090527D+01 0.7614143832090D+01 0.7354697751983D+01 + 0.7097540660550D+01 0.6842998609696D+01 0.6591385047920D+01 0.6343000035605D+01 + 0.6098129523858D+01 0.5857044699944D+01 0.5620001401934D+01 0.5387239604814D+01 + 0.5158982979846D+01 0.4935438528573D+01 0.4716796292366D+01 0.4503229137976D+01 + 0.4294892619056D+01 0.4091924913152D+01 0.3894446833193D+01 0.3702561912045D+01 + 0.3516356558237D+01 0.3335900280537D+01 0.3161245978670D+01 0.2992430297065D+01 + 0.2829474038194D+01 0.2672382631762D+01 0.2521146655720D+01 0.2375742404881D+01 + 0.2236132502695D+01 0.2102266551639D+01 0.1974081817541D+01 0.1851503943111D+01 + 0.1734447685940D+01 0.1622817676200D+01 0.1516509189368D+01 0.1415408929331D+01 + 0.1319395817360D+01 0.1228341782531D+01 0.1142112549373D+01 0.1060568418635D+01 + 0.9835650373019D+00 0.9109541541726D+00 0.8425843575459D+00 0.7783017917968D+00 + 0.7179508498817D+00 0.6613748390683D+00 0.6084166174653D+00 0.5589191992012D+00 + 0.5127263263911D+00 0.4696830063190D+00 0.4296360125529D+00 0.3924343490009D+00 + 0.3579296762027D+00 0.3259766994340D+00 0.2964335184742D+00 0.2691619391536D+00 + 0.2440277470488D+00 0.2209009439361D+00 0.1996559478365D+00 0.1801717576938D+00 + 0.1623320839184D+00 0.1460254461990D+00 0.1311452401368D+00 0.1175897743854D+00 + 0.1052622800912D+00 0.9407089451527D-01 0.8392862078550D-01 0.7475326577690D-01 + 0.6646735814128D-01 0.5899804851766D-01 0.5227699394346D-01 0.4624022845899D-01 + 0.4082802185442D-01 0.3598472845105D-01 0.3165862773800D-01 0.2780175860384D-01 + 0.2436974881146D-01 0.2132164126495D-01 0.1861971851162D-01 0.1622932681167D-01 + 0.1411870099424D-01 0.1225879120292D-01 0.1062309251766D-01 0.9187478324824D-02 + 0.7930038194170D-02 0.6830920911119D-02 0.5872183206948D-02 0.5037644628161D-02 + 0.4312748890659D-02 0.3684431974697D-02 0.3140997133459D-02 0.2671996911721D-02 + 0.2268122201696D-02 0.1921098300832D-02 0.1623587881022D-02 0.1369100730387D-02 + 0.1151910087150D-02 0.9669753500508D-03 0.8098709208516D-03 0.6767209113939D-03 + 0.5641394300578D-03 0.4691761498429D-03 0.3892668522563D-03 0.3221886372696D-03 + 0.2660194893607D-03 0.2191018926233D-03 0.1800101936858D-03 0.1475214192933D-03 + 0.1205892654847D-03 0.9832098695562D-04 0.7995692809159D-04 0.6485245095860D-04 + 0.5246202996510D-04 0.4232529769133D-04 0.3405484129524D-04 0.2732556374477D-04 + 0.2186543872353D-04 0.1744750226736D-04 0.1388293789508D-04 0.1101512510421D-04 + 0.8714533541124D-05 0.6874356872787D-05 0.5406791351919D-05 0.4239874261002D-05 + 0.3314806839624D-05 0.2583694952262D-05 0.2007648657315D-05 0.1555189018603D-05 + 0.1200916989437D-05 0.9244050332163D-06 0.7092773630705D-06 0.5424493283134D-06 + 0.4135005904089D-06 0.3141603589352D-06 0.2378861413798D-06 0.1795202409555D-06 + 0.1350106538765D-06 0.1011851095086D-06 0.7556879909866D-07 0.5623788451178D-07 + 0.4170219815814D-07 0.3081166707088D-07 0.2268194336078D-07 0.1663552297805D-07 + 0.1215530542863D-07 0.8848107127806D-08 0.6416106613217D-08 0.4634585104140D-08 + 0.3334643304910D-08 0.2389835688104D-08 0.1705876062949D-08 0.1212741020005D-08 + 0.8586376559590D-09 0.6054146003728D-09 0.4250856698627D-09 0.2972075512731D-09 + 0.2069101606973D-09 0.1434236365115D-09 0.9898160505409D-10 0.6800804519963D-10 + 0.4651712787494D-10 0.3167310042586D-10 0.2146695649341D-10 0.1448079937139D-10 + 0.9722622861678D-11 0.6496070631129D-11 0.4319651023999D-11 0.2858591661735D-11 + 0.1882503214946D-11 0.1233598363270D-11 0.8043412065319D-12 0.5218060130221D-12 + 0.3367856512696D-12 0.2162455335843D-12 0.1381220475631D-12 0.8775552000331D-13 diff --git a/Test/Fe16_non_collinear/v_fe16.12 b/Test/Fe16_non_collinear/v_fe16.12 new file mode 100755 index 000000000..f3c4e967f --- /dev/null +++ b/Test/Fe16_non_collinear/v_fe16.12 @@ -0,0 +1,1542 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Fe. + 2 0.0000000000000D+00 + LSMS: xx z= 26. xvalws= 5.22926 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728400909D+02-0.5199725115555D+02-0.5199721790459D+02-0.5199718425142D+02 +-0.5199715019116D+02-0.5199711571889D+02-0.5199708082964D+02-0.5199704551834D+02 +-0.5199700977990D+02-0.5199697360915D+02-0.5199693700086D+02-0.5199689994973D+02 +-0.5199686245042D+02-0.5199682449748D+02-0.5199678608545D+02-0.5199674720876D+02 +-0.5199670786180D+02-0.5199666803887D+02-0.5199662773421D+02-0.5199658694201D+02 +-0.5199654565635D+02-0.5199650387127D+02-0.5199646158073D+02-0.5199641877860D+02 +-0.5199637545872D+02-0.5199633161480D+02-0.5199628724051D+02-0.5199624232942D+02 +-0.5199619687506D+02-0.5199615087084D+02-0.5199610431012D+02-0.5199605718616D+02 +-0.5199600949214D+02-0.5199596122116D+02-0.5199591236626D+02-0.5199586292036D+02 +-0.5199581287632D+02-0.5199576222688D+02-0.5199571096474D+02-0.5199565908248D+02 +-0.5199560657259D+02-0.5199555342748D+02-0.5199549963947D+02-0.5199544520078D+02 +-0.5199539010352D+02-0.5199533433975D+02-0.5199527790139D+02-0.5199522078028D+02 +-0.5199516296816D+02-0.5199510445666D+02-0.5199504523733D+02-0.5199498530160D+02 +-0.5199492464081D+02-0.5199486324617D+02-0.5199480110883D+02-0.5199473821977D+02 +-0.5199467456990D+02-0.5199461015004D+02-0.5199454495085D+02-0.5199447896290D+02 +-0.5199441217666D+02-0.5199434458246D+02-0.5199427617052D+02-0.5199420693096D+02 +-0.5199413685375D+02-0.5199406592876D+02-0.5199399414573D+02-0.5199392149428D+02 +-0.5199384796390D+02-0.5199377354396D+02-0.5199369822368D+02-0.5199362199218D+02 +-0.5199354483843D+02-0.5199346675127D+02-0.5199338771940D+02-0.5199330773139D+02 +-0.5199322677567D+02-0.5199314484053D+02-0.5199306191412D+02-0.5199297798443D+02 +-0.5199289303934D+02-0.5199280706654D+02-0.5199272005361D+02-0.5199263198797D+02 +-0.5199254285685D+02-0.5199245264737D+02-0.5199236134649D+02-0.5199226894099D+02 +-0.5199217541751D+02-0.5199208076251D+02-0.5199198496230D+02-0.5199188800302D+02 +-0.5199178987064D+02-0.5199169055096D+02-0.5199159002963D+02-0.5199148829207D+02 +-0.5199138532359D+02-0.5199128110928D+02-0.5199117563407D+02-0.5199106888269D+02 +-0.5199096083969D+02-0.5199085148944D+02-0.5199074081613D+02-0.5199062880373D+02 +-0.5199051543604D+02-0.5199040069664D+02-0.5199028456895D+02-0.5199016703615D+02 +-0.5199004808124D+02-0.5198992768700D+02-0.5198980583600D+02-0.5198968251063D+02 +-0.5198955769302D+02-0.5198943136512D+02-0.5198930350863D+02-0.5198917410506D+02 +-0.5198904313569D+02-0.5198891058155D+02-0.5198877642345D+02-0.5198864064200D+02 +-0.5198850321751D+02-0.5198836413012D+02-0.5198822335968D+02-0.5198808088582D+02 +-0.5198793668793D+02-0.5198779074512D+02-0.5198764303627D+02-0.5198749354000D+02 +-0.5198734223467D+02-0.5198718909837D+02-0.5198703410894D+02-0.5198687724393D+02 +-0.5198671848065D+02-0.5198655779610D+02-0.5198639516703D+02-0.5198623056988D+02 +-0.5198606398084D+02-0.5198589537577D+02-0.5198572473026D+02-0.5198555201962D+02 +-0.5198537721883D+02-0.5198520030257D+02-0.5198502124524D+02-0.5198484002091D+02 +-0.5198465660333D+02-0.5198447096595D+02-0.5198428308188D+02-0.5198409292391D+02 +-0.5198390046450D+02-0.5198370567579D+02-0.5198350852955D+02-0.5198330899725D+02 +-0.5198310704998D+02-0.5198290265850D+02-0.5198269579318D+02-0.5198248642408D+02 +-0.5198227452087D+02-0.5198206005285D+02-0.5198184298896D+02-0.5198162329776D+02 +-0.5198140094741D+02-0.5198117590571D+02-0.5198094814005D+02-0.5198071761744D+02 +-0.5198048430449D+02-0.5198024816738D+02-0.5198000917191D+02-0.5197976728344D+02 +-0.5197952246692D+02-0.5197927468690D+02-0.5197902390745D+02-0.5197877009224D+02 +-0.5197851320449D+02-0.5197825320698D+02-0.5197799006201D+02-0.5197772373146D+02 +-0.5197745417673D+02-0.5197718135875D+02-0.5197690523796D+02-0.5197662577437D+02 +-0.5197634292744D+02-0.5197605665620D+02-0.5197576691913D+02-0.5197547367423D+02 +-0.5197517687900D+02-0.5197487649041D+02-0.5197457246489D+02-0.5197426475838D+02 +-0.5197395332627D+02-0.5197363812338D+02-0.5197331910403D+02-0.5197299622195D+02 +-0.5197266943031D+02-0.5197233868173D+02-0.5197200392824D+02-0.5197166512128D+02 +-0.5197132221174D+02-0.5197097514984D+02-0.5197062388528D+02-0.5197026836709D+02 +-0.5196990854370D+02-0.5196954436291D+02-0.5196917577189D+02-0.5196880271716D+02 +-0.5196842514461D+02-0.5196804299945D+02-0.5196765622622D+02-0.5196726476881D+02 +-0.5196686857041D+02-0.5196646757354D+02-0.5196606171998D+02-0.5196565095085D+02 +-0.5196523520651D+02-0.5196481442664D+02-0.5196438855015D+02-0.5196395751522D+02 +-0.5196352125928D+02-0.5196307971901D+02-0.5196263283028D+02-0.5196218052823D+02 +-0.5196172274718D+02-0.5196125942066D+02-0.5196079048138D+02-0.5196031586126D+02 +-0.5195983549135D+02-0.5195934930191D+02-0.5195885722231D+02-0.5195835918107D+02 +-0.5195785510585D+02-0.5195734492343D+02-0.5195682855969D+02-0.5195630593961D+02 +-0.5195577698725D+02-0.5195524162577D+02-0.5195469977736D+02-0.5195415136330D+02 +-0.5195359630387D+02-0.5195303451841D+02-0.5195246592528D+02-0.5195189044181D+02 +-0.5195130798435D+02-0.5195071846824D+02-0.5195012180777D+02-0.5194951791619D+02 +-0.5194890670569D+02-0.5194828808741D+02-0.5194766197137D+02-0.5194702826653D+02 +-0.5194638688071D+02-0.5194573772064D+02-0.5194508069188D+02-0.5194441569885D+02 +-0.5194374264482D+02-0.5194306143187D+02-0.5194237196087D+02-0.5194167413149D+02 +-0.5194096784220D+02-0.5194025299021D+02-0.5193952947146D+02-0.5193879718066D+02 +-0.5193805601119D+02-0.5193730585519D+02-0.5193654660341D+02-0.5193577814533D+02 +-0.5193500036904D+02-0.5193421316129D+02-0.5193341640742D+02-0.5193260999141D+02 +-0.5193179379578D+02-0.5193096770164D+02-0.5193013158865D+02-0.5192928533501D+02 +-0.5192842881739D+02-0.5192756191098D+02-0.5192668448947D+02-0.5192579642497D+02 +-0.5192489758803D+02-0.5192398784765D+02-0.5192306707119D+02-0.5192213512442D+02 +-0.5192119187145D+02-0.5192023717474D+02-0.5191927089505D+02-0.5191829289146D+02 +-0.5191730302133D+02-0.5191630114025D+02-0.5191528710207D+02-0.5191426075883D+02 +-0.5191322196077D+02-0.5191217055632D+02-0.5191110639202D+02-0.5191002931255D+02 +-0.5190893916069D+02-0.5190783577729D+02-0.5190671900126D+02-0.5190558866954D+02 +-0.5190444461705D+02-0.5190328667673D+02-0.5190211467945D+02-0.5190092845399D+02 +-0.5189972782709D+02-0.5189851262330D+02-0.5189728266508D+02-0.5189603777267D+02 +-0.5189477776415D+02-0.5189350245533D+02-0.5189221165981D+02-0.5189090518885D+02 +-0.5188958285145D+02-0.5188824445423D+02-0.5188688980147D+02-0.5188551869503D+02 +-0.5188413093435D+02-0.5188272631641D+02-0.5188130463569D+02-0.5187986568418D+02 +-0.5187840925129D+02-0.5187693512386D+02-0.5187544308611D+02-0.5187393291962D+02 +-0.5187240440329D+02-0.5187085731330D+02-0.5186929142309D+02-0.5186770650332D+02 +-0.5186610232183D+02-0.5186447864362D+02-0.5186283523081D+02-0.5186117184259D+02 +-0.5185948823518D+02-0.5185778416183D+02-0.5185605937277D+02-0.5185431361514D+02 +-0.5185254663297D+02-0.5185075816718D+02-0.5184894795548D+02-0.5184711573237D+02 +-0.5184526122909D+02-0.5184338417356D+02-0.5184148429039D+02-0.5183956130079D+02 +-0.5183761492255D+02-0.5183564486998D+02-0.5183365085389D+02-0.5183163258155D+02 +-0.5182958975660D+02-0.5182752207907D+02-0.5182542924529D+02-0.5182331094785D+02 +-0.5182116687559D+02-0.5181899671350D+02-0.5181680014270D+02-0.5181457684041D+02 +-0.5181232647986D+02-0.5181004873028D+02-0.5180774325683D+02-0.5180540972054D+02 +-0.5180304777830D+02-0.5180065708277D+02-0.5179823728232D+02-0.5179578802103D+02 +-0.5179330893860D+02-0.5179079967027D+02-0.5178825984684D+02-0.5178568909453D+02 +-0.5178308703501D+02-0.5178045328526D+02-0.5177778745757D+02-0.5177508915948D+02 +-0.5177235799366D+02-0.5176959355795D+02-0.5176679544522D+02-0.5176396324334D+02 +-0.5176109653512D+02-0.5175819489823D+02-0.5175525790517D+02-0.5175228512318D+02 +-0.5174927611419D+02-0.5174623043474D+02-0.5174314763592D+02-0.5174002726332D+02 +-0.5173686885694D+02-0.5173367195115D+02-0.5173043607457D+02-0.5172716075006D+02 +-0.5172384549462D+02-0.5172048981932D+02-0.5171709322923D+02-0.5171365522335D+02 +-0.5171017529452D+02-0.5170665292940D+02-0.5170308760833D+02-0.5169947880525D+02 +-0.5169582598771D+02-0.5169212861671D+02-0.5168838614662D+02-0.5168459802518D+02 +-0.5168076369333D+02-0.5167688258518D+02-0.5167295412791D+02-0.5166897774168D+02 +-0.5166495283960D+02-0.5166087882755D+02-0.5165675510418D+02-0.5165258106080D+02 +-0.5164835608125D+02-0.5164407954186D+02-0.5163975081138D+02-0.5163536925080D+02 +-0.5163093421337D+02-0.5162644504442D+02-0.5162190108131D+02-0.5161730165335D+02 +-0.5161264608164D+02-0.5160793367906D+02-0.5160316375011D+02-0.5159833559084D+02 +-0.5159344848875D+02-0.5158850172268D+02-0.5158349456272D+02-0.5157842627009D+02 +-0.5157329609709D+02-0.5156810328692D+02-0.5156284707365D+02-0.5155752668206D+02 +-0.5155214132756D+02-0.5154669021608D+02-0.5154117254396D+02-0.5153558749786D+02 +-0.5152993425461D+02-0.5152421198113D+02-0.5151841983433D+02-0.5151255696093D+02 +-0.5150662249744D+02-0.5150061557002D+02-0.5149453529428D+02-0.5148838077528D+02 +-0.5148215110737D+02-0.5147584537403D+02-0.5146946264782D+02-0.5146300199022D+02 +-0.5145646245151D+02-0.5144984307067D+02-0.5144314287525D+02-0.5143636088122D+02 +-0.5142949609291D+02-0.5142254750281D+02-0.5141551409151D+02-0.5140839482753D+02 +-0.5140118866721D+02-0.5139389455459D+02-0.5138651142128D+02-0.5137903818632D+02 +-0.5137147375605D+02-0.5136381702401D+02-0.5135606687078D+02-0.5134822216388D+02 +-0.5134028175756D+02-0.5133224449278D+02-0.5132410919702D+02-0.5131587468413D+02 +-0.5130753975423D+02-0.5129910319357D+02-0.5129056377438D+02-0.5128192025477D+02 +-0.5127317137854D+02-0.5126431587514D+02-0.5125535245940D+02-0.5124627983153D+02 +-0.5123709667690D+02-0.5122780166596D+02-0.5121839345403D+02-0.5120887068125D+02 +-0.5119923197240D+02-0.5118947593678D+02-0.5117960116805D+02-0.5116960624416D+02 +-0.5115948972712D+02-0.5114925016296D+02-0.5113888608154D+02-0.5112839599644D+02 +-0.5111777840483D+02-0.5110703178733D+02-0.5109615460788D+02-0.5108514531363D+02 +-0.5107400233480D+02-0.5106272408452D+02-0.5105130895877D+02-0.5103975533619D+02 +-0.5102806157801D+02-0.5101622602790D+02-0.5100424701185D+02-0.5099212283803D+02 +-0.5097985179674D+02-0.5096743216021D+02-0.5095486218256D+02-0.5094214009961D+02 +-0.5092926412887D+02-0.5091623246932D+02-0.5090304330139D+02-0.5088969478681D+02 +-0.5087618506855D+02-0.5086251227064D+02-0.5084867449820D+02-0.5083466983722D+02 +-0.5082049635455D+02-0.5080615209778D+02-0.5079163509518D+02-0.5077694335558D+02 +-0.5076207486834D+02-0.5074702760324D+02-0.5073179951042D+02-0.5071638852033D+02 +-0.5070079254364D+02-0.5068500947122D+02-0.5066903717403D+02-0.5065287350315D+02 +-0.5063651628963D+02-0.5061996334457D+02-0.5060321245898D+02-0.5058626140382D+02 +-0.5056910792994D+02-0.5055174976809D+02-0.5053418462884D+02-0.5051641020267D+02 +-0.5049842415989D+02-0.5048022415067D+02-0.5046180780505D+02-0.5044317273295D+02 +-0.5042431652422D+02-0.5040523674861D+02-0.5038593095586D+02-0.5036639667573D+02 +-0.5034663141803D+02-0.5032663267268D+02-0.5030639790981D+02-0.5028592457977D+02 +-0.5026521011328D+02-0.5024425192145D+02-0.5022304739591D+02-0.5020159390892D+02 +-0.5017988881346D+02-0.5015792944334D+02-0.5013571311336D+02-0.5011323711944D+02 +-0.5009049873873D+02-0.5006749522980D+02-0.5004422383280D+02-0.5002068176959D+02 +-0.4999686624397D+02-0.4997277444186D+02-0.4994840353146D+02-0.4992375066350D+02 +-0.4989881297144D+02-0.4987358757171D+02-0.4984807156389D+02-0.4982226203106D+02 +-0.4979615603991D+02-0.4976975064117D+02-0.4974304286974D+02-0.4971602974502D+02 +-0.4968870827126D+02-0.4966107543776D+02-0.4963312821924D+02-0.4960486357616D+02 +-0.4957627845502D+02-0.4954736978871D+02-0.4951813449683D+02-0.4948856948612D+02 +-0.4945867165071D+02-0.4942843787257D+02-0.4939786502185D+02-0.4936694995729D+02 +-0.4933568952659D+02-0.4930408056681D+02-0.4927211990478D+02-0.4923980435752D+02 +-0.4920713073265D+02-0.4917409582880D+02-0.4914069643607D+02-0.4910692933642D+02 +-0.4907279130416D+02-0.4903827910633D+02-0.4900338950319D+02-0.4896811924867D+02 +-0.4893246509079D+02-0.4889642377211D+02-0.4885999203021D+02-0.4882316659813D+02 +-0.4878594420482D+02-0.4874832157556D+02-0.4871029543247D+02-0.4867186249491D+02 +-0.4863301947995D+02-0.4859376310277D+02-0.4855409007715D+02-0.4851399711583D+02 +-0.4847348093100D+02-0.4843253823466D+02-0.4839116573905D+02-0.4834936015704D+02 +-0.4830711820251D+02-0.4826443659074D+02-0.4822131203876D+02-0.4817774126566D+02 +-0.4813372099301D+02-0.4808924794511D+02-0.4804431884930D+02-0.4799893043625D+02 +-0.4795307944023D+02-0.4790676259938D+02-0.4785997665588D+02-0.4781271835619D+02 +-0.4776498445124D+02-0.4771677169657D+02-0.4766807685247D+02-0.4761889668409D+02 +-0.4756922796153D+02-0.4751906745988D+02-0.4746841195927D+02-0.4741725824487D+02 +-0.4736560310686D+02-0.4731344334036D+02-0.4726077574537D+02-0.4720759712663D+02 +-0.4715390429349D+02-0.4709969405976D+02-0.4704496324345D+02-0.4698970866656D+02 +-0.4693392715482D+02-0.4687761553742D+02-0.4682077064661D+02-0.4676338931742D+02 +-0.4670546838725D+02-0.4664700469545D+02-0.4658799508292D+02-0.4652843639162D+02 +-0.4646832546412D+02-0.4640765914308D+02-0.4634643427075D+02-0.4628464768840D+02 +-0.4622229623583D+02-0.4615937675077D+02-0.4609588606835D+02-0.4603182102046D+02 +-0.4596717843531D+02-0.4590195513672D+02-0.4583614794369D+02-0.4576975366979D+02 +-0.4570276912265D+02-0.4563519110351D+02-0.4556701640665D+02-0.4549824181908D+02 +-0.4542886412007D+02-0.4535888008084D+02-0.4528828646428D+02-0.4521708002473D+02 +-0.4514525750785D+02-0.4507281565054D+02-0.4499975118097D+02-0.4492606081870D+02 +-0.4485174127497D+02-0.4477678925295D+02-0.4470120144833D+02-0.4462497454985D+02 +-0.4454810524011D+02-0.4447059019649D+02-0.4439242609219D+02-0.4431360959758D+02 +-0.4423413738159D+02-0.4415400611337D+02-0.4407321246418D+02-0.4399175310947D+02 +-0.4390962473114D+02-0.4382682402010D+02-0.4374334767908D+02-0.4365919242563D+02 +-0.4357435499539D+02-0.4348883214570D+02-0.4340262065933D+02-0.4331571734857D+02 +-0.4322811905962D+02-0.4313982267710D+02-0.4305082512897D+02-0.4296112339160D+02 +-0.4287071449512D+02-0.4277959552900D+02-0.4268776364786D+02-0.4259521607738D+02 +-0.4250195012053D+02-0.4240796316384D+02-0.4231325268378D+02-0.4221781625326D+02 +-0.4212165154821D+02-0.4202475635403D+02-0.4192712857207D+02-0.4182876622603D+02 +-0.4172966746809D+02-0.4162983058491D+02-0.4152925400326D+02-0.4142793629535D+02 +-0.4132587618362D+02-0.4122307254514D+02-0.4111952441526D+02-0.4101523099069D+02 +-0.4091019163177D+02-0.4080440586392D+02-0.4069787337814D+02-0.4059059403052D+02 +-0.4048256784069D+02-0.4037379498919D+02-0.4026427581359D+02-0.4015401080347D+02 +-0.4004300059408D+02-0.3993124595881D+02-0.3981874780047D+02-0.3970550714118D+02 +-0.3959152511128D+02-0.3947680293704D+02-0.3936134192738D+02-0.3924514345974D+02 +-0.3912820896514D+02-0.3901053991273D+02-0.3889213779388D+02-0.3877300410616D+02 +-0.3865314033730D+02-0.3853254794941D+02-0.3841122836384D+02-0.3828918294671D+02 +-0.3816641299561D+02-0.3804291972752D+02-0.3791870426838D+02-0.3779376764439D+02 +-0.3766811077544D+02-0.3754173447071D+02-0.3741463942662D+02-0.3728682622747D+02 +-0.3715829534855D+02-0.3702904716206D+02-0.3689908194568D+02-0.3676839989389D+02 +-0.3663700113198D+02-0.3650488573242D+02-0.3637205373385D+02-0.3623850516215D+02 +-0.3610424005352D+02-0.3596925847947D+02-0.3583356057318D+02-0.3569714655716D+02 +-0.3556001677183D+02-0.3542217170480D+02-0.3528361202035D+02-0.3514433858906D+02 +-0.3500435251706D+02-0.3486365517474D+02-0.3472224822457D+02-0.3458013364781D+02 +-0.3443731376977D+02-0.3429379128348D+02-0.3414956927154D+02-0.3400465122587D+02 +-0.3385904106531D+02-0.3371274315081D+02-0.3356576229817D+02-0.3341810378823D+02 +-0.3326977337430D+02-0.3312077728689D+02-0.3297112223571D+02-0.3282081540879D+02 +-0.3266986446883D+02-0.3251827754673D+02-0.3236606323235D+02-0.3221323056253D+02 +-0.3205978900636D+02-0.3190574844798D+02-0.3175111916665D+02-0.3159591181450D+02 +-0.3144013739192D+02-0.3128380722060D+02-0.3112693291460D+02-0.3096952634939D+02 +-0.3081159962896D+02-0.3065316505139D+02-0.3049423507279D+02-0.3033482226994D+02 +-0.3017493930171D+02-0.3001459886954D+02-0.2985381367711D+02-0.2969259638940D+02 +-0.2953095959141D+02-0.2936891574677D+02-0.2920647715631D+02-0.2904365591713D+02 +-0.2888046388202D+02-0.2871691261992D+02-0.2855301337730D+02-0.2838877704096D+02 +-0.2822421410237D+02-0.2805933462405D+02-0.2789414820796D+02-0.2772866396645D+02 +-0.2756289049588D+02-0.2739683585338D+02-0.2723050753680D+02-0.2706391246838D+02 +-0.2689705698223D+02-0.2672994681603D+02-0.2656258710714D+02-0.2639498239345D+02 +-0.2622713661917D+02-0.2605905314574D+02-0.2589073476829D+02-0.2572218373759D+02 +-0.2555340178776D+02-0.2538439017000D+02-0.2521514969218D+02-0.2504568076457D+02 +-0.2487598345161D+02-0.2470605752972D+02-0.2453590255090D+02-0.2436551791213D+02 +-0.2419490293015D+02-0.2402405692122D+02-0.2385297928550D+02-0.2368166959536D+02 +-0.2351012768684D+02-0.2333835375355D+02-0.2316634844181D+02-0.2299411294593D+02 +-0.2282164910224D+02-0.2264895948042D+02-0.2247604747020D+02-0.2230291736187D+02 +-0.2212957441833D+02-0.2195602493665D+02-0.2178227629680D+02-0.2160833699531D+02 +-0.2143421666157D+02-0.2125992605447D+02-0.2108547703736D+02-0.2091088252957D+02 +-0.2073615643311D+02-0.2056131353347D+02-0.2038636937454D+02-0.2021134010787D+02 +-0.2003624231780D+02-0.1986109282464D+02-0.1968590846923D+02-0.1951070588338D+02 +-0.1933550125113D+02-0.1916031006739D+02-0.1898514690054D+02-0.1881002516654D+02 +-0.1863495692195D+02-0.1845995268332D+02-0.1828502127992D+02-0.1811016974578D+02 +-0.1793540325598D+02-0.1776072511080D+02-0.1758613676940D+02-0.1741163793327D+02 +-0.1723722667775D+02-0.1706289962834D+02-0.1688865217702D+02-0.1671447873257D+02 +-0.1654037299789D+02-0.1636632826691D+02-0.1619233773325D+02-0.1601839480315D+02 +-0.1584449340510D+02-0.1567062828984D+02-0.1549679531468D+02-0.1532299170720D+02 +-0.1514921630451D+02-0.1497546976480D+02-0.1480175474939D+02-0.1462807607400D+02 +-0.1445444082871D+02-0.1428085846710D+02-0.1410734086517D+02-0.1393390235146D+02 +-0.1376055970989D+02-0.1358733215727D+02-0.1341424129731D+02-0.1324131105355D+02 +-0.1306856758305D+02-0.1289603917318D+02-0.1272375612351D+02-0.1255175061484D+02 +-0.1238005656736D+02-0.1220870948967D+02-0.1203774632043D+02-0.1186720526422D+02 +-0.1169712562320D+02-0.1152754762583D+02-0.1135851225403D+02-0.1119006106993D+02 +-0.1102223604329D+02-0.1085507938069D+02-0.1068863335731D+02-0.1052294015218D+02 +-0.1035804168776D+02-0.1019397947446D+02-0.1003079446077D+02-0.9868526889628D+01 +-0.9707216161554D+01-0.9546900704939D+01-0.9387617854023D+01-0.9229403734858D+01 +-0.9072293159592D+01-0.8916319529363D+01-0.8761514745993D+01-0.8607909132693D+01 +-0.8455531363896D+01-0.8304408404305D+01-0.8154565457227D+01-0.8006025922166D+01 +-0.7858811361682D+01-0.7712941477416D+01-0.7568434095199D+01-0.7425305159081D+01 +-0.7283568734134D+01-0.7143237017788D+01-0.7004320359504D+01-0.6866827288485D+01 +-0.6730764549154D+01-0.6596137144079D+01-0.6462948384000D+01-0.6331199944618D+01 +-0.6200891929738D+01-0.6072022940407D+01-0.5944590149603D+01-0.5818589382077D+01 +-0.5694015198898D+01-0.5570860986265D+01-0.5449119048124D+01-0.5328780702141D+01 +-0.5209836378552D+01-0.5092275721431D+01-0.4976087691897D+01-0.4861260672787D+01 +-0.4747782574321D+01-0.4635640940271D+01-0.4524823054180D+01-0.4415316045125D+01 +-0.4307106992579D+01-0.4200183029885D+01-0.4094531445869D+01-0.3990139784139D+01 +-0.3886995939600D+01-0.3785088251726D+01-0.3684405594148D+01-0.3584937460106D+01 +-0.3486674043348D+01-0.3389606314047D+01-0.3293726089348D+01-0.3199026098161D+01 +-0.3105500039868D+01-0.3013142636618D+01-0.2921949678952D+01-0.2831918064533D+01 +-0.2743045829849D+01-0.2655332174788D+01-0.2568777480092D+01-0.2483383317815D+01 +-0.2399152454962D+01-0.2316088850658D+01-0.2234197647300D+01-0.2153485156272D+01 +-0.2073958838965D+01-0.1995627283965D+01-0.1918500181413D+01-0.1842588295670D+01 +-0.1767903437522D+01-0.1694458437274D+01-0.1622267120110D+01-0.1551344285168D+01 +-0.1481705689753D+01-0.1413368040087D+01-0.1346348989896D+01-0.1280667148051D+01 +-0.1216342096293D+01-0.1153394417906D+01-0.1091845737986D+01-0.1031718775725D+01 +-0.9730374088849D+00-0.9158267504133D+00-0.8601132368937D+00-0.8059247283301D+00 +-0.7532906185600D+00-0.7022419554295D+00-0.6528115697324D+00-0.6050342118170D+00 +-0.5589466947046D+00-0.5145880425354D+00-0.4719996431596D+00-0.4312254037239D+00 +-0.3923119081554D+00-0.3553085755132D+00-0.3202678182603D+00-0.2872451996103D+00 +-0.2562993012896D+00 + 0.0000000000000D+00 + 1012 0.5229258479779D+01 + 0.2150742905406D-04 0.2201934401975D-04 0.2254344131081D-04 0.2308001074793D-04 + 0.2362934904336D-04 0.2419175996469D-04 0.2476755450247D-04 0.2535705104185D-04 + 0.2596057553829D-04 0.2657846169737D-04 0.2721105115901D-04 0.2785869368592D-04 + 0.2852174735659D-04 0.2920057876285D-04 0.2989556321214D-04 0.3060708493450D-04 + 0.3133553729459D-04 0.3208132300862D-04 0.3284485436652D-04 0.3362655345933D-04 + 0.3442685241199D-04 0.3524619362168D-04 0.3608503000175D-04 0.3694382523153D-04 + 0.3782305401197D-04 0.3872320232740D-04 0.3964476771351D-04 0.4058825953159D-04 + 0.4155419924941D-04 0.4254312072866D-04 0.4355557051923D-04 0.4459210816046D-04 + 0.4565330648961D-04 0.4673975195749D-04 0.4785204495171D-04 0.4899080012754D-04 + 0.5015664674660D-04 0.5135022902361D-04 0.5257220648130D-04 0.5382325431382D-04 + 0.5510406375867D-04 0.5641534247751D-04 0.5775781494596D-04 0.5913222285265D-04 + 0.6053932550771D-04 0.6197990026094D-04 0.6345474292991D-04 0.6496466823815D-04 + 0.6651051026378D-04 0.6809312289875D-04 0.6971338031887D-04 0.7137217746513D-04 + 0.7307043053626D-04 0.7480907749308D-04 0.7658907857468D-04 0.7841141682692D-04 + 0.8027709864336D-04 0.8218715431905D-04 0.8414263861740D-04 0.8614463135050D-04 + 0.8819423797310D-04 0.9029259019072D-04 0.9244084658213D-04 0.9464019323656D-04 + 0.9689184440594D-04 0.9919704317265D-04 0.1015570621330D-03 0.1039732040969D-03 + 0.1064468028041D-03 0.1089792236573D-03 0.1115718644728D-03 0.1142261562483D-03 + 0.1169435639500D-03 0.1197255873171D-03 0.1225737616857D-03 0.1254896588328D-03 + 0.1284748878395D-03 0.1315310959746D-03 0.1346599695998D-03 0.1378632350954D-03 + 0.1411426598085D-03 0.1445000530233D-03 0.1479372669546D-03 0.1514561977641D-03 + 0.1550587866019D-03 0.1587470206711D-03 0.1625229343189D-03 0.1663886101524D-03 + 0.1703461801815D-03 0.1743978269887D-03 0.1785457849256D-03 0.1827923413391D-03 + 0.1871398378251D-03 0.1915906715131D-03 0.1961472963799D-03 0.2008122245952D-03 + 0.2055880278984D-03 0.2104773390081D-03 0.2154828530649D-03 0.2206073291079D-03 + 0.2258535915864D-03 0.2312245319072D-03 0.2367231100177D-03 0.2423523560273D-03 + 0.2481153718665D-03 0.2540153329849D-03 0.2600554900897D-03 0.2662391709247D-03 + 0.2725697820915D-03 0.2790508109132D-03 0.2856858273428D-03 0.2924784859153D-03 + 0.2994325277470D-03 0.3065517825810D-03 0.3138401708812D-03 0.3213017059753D-03 + 0.3289404962488D-03 0.3367607473897D-03 0.3447667646870D-03 0.3529629553823D-03 + 0.3613538310777D-03 0.3699440101989D-03 0.3787382205180D-03 0.3877413017338D-03 + 0.3969582081140D-03 0.4063940111991D-03 0.4160539025692D-03 0.4259431966769D-03 + 0.4360673337456D-03 0.4464318827368D-03 0.4570425443864D-03 0.4679051543124D-03 + 0.4790256861959D-03 0.4904102550358D-03 0.5020651204812D-03 0.5139966902408D-03 + 0.5262115235724D-03 0.5387163348549D-03 0.5515179972435D-03 0.5646235464104D-03 + 0.5780401843732D-03 0.5917752834137D-03 0.6058363900874D-03 0.6202312293275D-03 + 0.6349677086450D-03 0.6500539224267D-03 0.6654981563344D-03 0.6813088918062D-03 + 0.6974948106637D-03 0.7140647998269D-03 0.7310279561389D-03 0.7483935913040D-03 + 0.7661712369406D-03 0.7843706497523D-03 0.8030018168203D-03 0.8220749610184D-03 + 0.8416005465556D-03 0.8615892846469D-03 0.8820521393172D-03 0.9030003333406D-03 + 0.9244453543176D-03 0.9463989608946D-03 0.9688731891282D-03 0.9918803589975D-03 + 0.1015433081069D-02 0.1039544263315D-02 0.1064227118095D-02 0.1089495169290D-02 + 0.1115362259619D-02 0.1141842558105D-02 0.1168950567737D-02 0.1196701133289D-02 + 0.1225109449338D-02 0.1254191068456D-02 0.1283961909601D-02 0.1314438266696D-02 + 0.1345636817413D-02 0.1377574632157D-02 0.1410269183260D-02 0.1443738354387D-02 + 0.1478000450161D-02 0.1513074206015D-02 0.1548978798262D-02 0.1585733854409D-02 + 0.1623359463706D-02 0.1661876187936D-02 0.1701305072458D-02 0.1741667657505D-02 + 0.1782985989747D-02 0.1825282634108D-02 0.1868580685877D-02 0.1912903783076D-02 + 0.1958276119133D-02 0.2004722455835D-02 0.2052268136585D-02 0.2100939099962D-02 + 0.2150761893598D-02 0.2201763688371D-02 0.2253972292925D-02 0.2307416168524D-02 + 0.2362124444253D-02 0.2418126932561D-02 0.2475454145167D-02 0.2534137309329D-02 + 0.2594208384486D-02 0.2655700079287D-02 0.2718645869002D-02 0.2783080013344D-02 + 0.2849037574687D-02 0.2916554436715D-02 0.2985667323484D-02 0.3056413818931D-02 + 0.3128832386828D-02 0.3202962391187D-02 0.3278844117136D-02 0.3356518792272D-02 + 0.3436028608501D-02 0.3517416744371D-02 0.3600727387929D-02 0.3686005760082D-02 + 0.3773298138499D-02 0.3862651882061D-02 0.3954115455860D-02 0.4047738456768D-02 + 0.4143571639594D-02 0.4241666943825D-02 0.4342077520985D-02 0.4444857762604D-02 + 0.4550063328833D-02 0.4657751177697D-02 0.4767979595018D-02 0.4880808225009D-02 + 0.4996298101570D-02 0.5114511680279D-02 0.5235512871115D-02 0.5359367071918D-02 + 0.5486141202598D-02 0.5615903740128D-02 0.5748724754308D-02 0.5884675944352D-02 + 0.6023830676284D-02 0.6166264021183D-02 0.6312052794284D-02 0.6461275594959D-02 + 0.6614012847588D-02 0.6770346843357D-02 0.6930361782982D-02 0.7094143820394D-02 + 0.7261781107400D-02 0.7433363839342D-02 0.7608984301773D-02 0.7788736918176D-02 + 0.7972718298747D-02 0.8161027290261D-02 0.8353765027049D-02 0.8551034983111D-02 + 0.8752943025377D-02 0.8959597468160D-02 0.9171109128811D-02 0.9387591384603D-02 + 0.9609160230877D-02 0.9835934340477D-02 0.1006803512449D-01 0.1030558679431D-01 + 0.1054871642512D-01 0.1079755402073D-01 0.1105223257982D-01 0.1131288816368D-01 + 0.1157965996544D-01 0.1185269038080D-01 0.1213212508026D-01 0.1241811308303D-01 + 0.1271080683248D-01 0.1301036227325D-01 0.1331693893004D-01 0.1363069998813D-01 + 0.1395181237567D-01 0.1428044684765D-01 0.1461677807184D-01 0.1496098471648D-01 + 0.1531324953990D-01 0.1567375948211D-01 0.1604270575828D-01 0.1642028395434D-01 + 0.1680669412453D-01 0.1720214089116D-01 0.1760683354637D-01 0.1802098615621D-01 + 0.1844481766683D-01 0.1887855201303D-01 0.1932241822902D-01 0.1977665056168D-01 + 0.2024148858606D-01 0.2071717732349D-01 0.2120396736203D-01 0.2170211497964D-01 + 0.2221188226980D-01 0.2273353726988D-01 0.2326735409215D-01 0.2381361305754D-01 + 0.2437260083229D-01 0.2494461056731D-01 0.2552994204062D-01 0.2612890180262D-01 + 0.2674180332442D-01 0.2736896714935D-01 0.2801072104743D-01 0.2866740017320D-01 + 0.2933934722669D-01 0.3002691261781D-01 0.3073045463399D-01 0.3145033961141D-01 + 0.3218694210958D-01 0.3294064508962D-01 0.3371184009606D-01 0.3450092744243D-01 + 0.3530831640054D-01 0.3613442539362D-01 0.3697968219334D-01 0.3784452412086D-01 + 0.3872939825181D-01 0.3963476162544D-01 0.4056108145796D-01 0.4150883536008D-01 + 0.4247851155891D-01 0.4347060912422D-01 0.4448563819924D-01 0.4552412023590D-01 + 0.4658658823475D-01 0.4767358698962D-01 0.4878567333696D-01 0.4992341641008D-01 + 0.5108739789835D-01 0.5227821231135D-01 0.5349646724813D-01 0.5474278367169D-01 + 0.5601779618862D-01 0.5732215333417D-01 0.5865651786266D-01 0.6002156704340D-01 + 0.6141799296226D-01 0.6284650282880D-01 0.6430781928923D-01 0.6580268074515D-01 + 0.6733184167825D-01 0.6889607298100D-01 0.7049616229337D-01 0.7213291434581D-01 + 0.7380715130845D-01 0.7551971314661D-01 0.7727145798277D-01 0.7906326246509D-01 + 0.8089602214242D-01 0.8277065184608D-01 0.8468808607842D-01 0.8664927940812D-01 + 0.8865520687255D-01 0.9070686438707D-01 0.9280526916144D-01 0.9495146012343D-01 + 0.9714649834967D-01 0.9939146750384D-01 0.1016874742823D+00 0.1040356488672D+00 + 0.1064371453872D+00 0.1088931423856D+00 0.1114048432967D+00 0.1139734769295D+00 + 0.1166002979593D+00 0.1192865874273D+00 0.1220336532487D+00 0.1248428307276D+00 + 0.1277154830815D+00 0.1306530019730D+00 0.1336568080498D+00 0.1367283514936D+00 + 0.1398691125766D+00 0.1430806022269D+00 0.1463643626021D+00 0.1497219676713D+00 + 0.1531550238057D+00 0.1566651703780D+00 0.1602540803695D+00 0.1639234609870D+00 + 0.1676750542871D+00 0.1715106378098D+00 0.1754320252209D+00 0.1794410669619D+00 + 0.1835396509100D+00 0.1877297030455D+00 0.1920131881282D+00 0.1963921103827D+00 + 0.2008685141914D+00 0.2054444847966D+00 0.2101221490109D+00 0.2149036759359D+00 + 0.2197912776889D+00 0.2247872101386D+00 0.2298937736476D+00 0.2351133138248D+00 + 0.2404482222837D+00 0.2459009374100D+00 0.2514739451362D+00 0.2571697797240D+00 + 0.2629910245536D+00 0.2689403129212D+00 0.2750203288421D+00 0.2812338078623D+00 + 0.2875835378751D+00 0.2940723599454D+00 0.3007031691395D+00 0.3074789153608D+00 + 0.3144026041916D+00 0.3214772977396D+00 0.3287061154899D+00 0.3360922351618D+00 + 0.3436388935694D+00 0.3513493874868D+00 0.3592270745164D+00 0.3672753739607D+00 + 0.3754977676972D+00 0.3838978010545D+00 0.3924790836915D+00 0.4012452904770D+00 + 0.4102001623706D+00 0.4193475073036D+00 0.4286912010595D+00 0.4382351881538D+00 + 0.4479834827120D+00 0.4579401693452D+00 0.4681094040228D+00 0.4784954149418D+00 + 0.4891025033910D+00 0.4999350446102D+00 0.5109974886435D+00 0.5222943611853D+00 + 0.5338302644183D+00 0.5456098778426D+00 0.5576379590956D+00 0.5699193447601D+00 + 0.5824589511607D+00 0.5952617751475D+00 0.6083328948654D+00 0.6216774705074D+00 + 0.6353007450521D+00 0.6492080449824D+00 0.6634047809857D+00 0.6778964486325D+00 + 0.6926886290333D+00 0.7077869894721D+00 0.7231972840138D+00 0.7389253540860D+00 + 0.7549771290311D+00 0.7713586266289D+00 0.7880759535873D+00 0.8051353059985D+00 + 0.8225429697604D+00 0.8403053209599D+00 0.8584288262158D+00 0.8769200429817D+00 + 0.8957856198031D+00 0.9150322965294D+00 0.9346669044774D+00 0.9546963665439D+00 + 0.9751276972649D+00 0.9959680028197D+00 0.1017224480976D+01 0.1038904420974D+01 + 0.1061015203349D+01 0.1083564299686D+01 0.1106559272300D+01 0.1130007773859D+01 + 0.1153917546912D+01 0.1178296423354D+01 0.1203152323804D+01 0.1228493256899D+01 + 0.1254327318495D+01 0.1280662690787D+01 0.1307507641324D+01 0.1334870521934D+01 + 0.1362759767535D+01 0.1391183894856D+01 0.1420151501035D+01 0.1449671262109D+01 + 0.1479751931386D+01 0.1510402337698D+01 0.1541631383520D+01 0.1573448042969D+01 + 0.1605861359662D+01 0.1638880444440D+01 0.1672514472946D+01 0.1706772683055D+01 + 0.1741664372155D+01 0.1777198894269D+01 0.1813385657016D+01 0.1850234118409D+01 + 0.1887753783475D+01 0.1925954200705D+01 0.1964844958324D+01 0.2004435680370D+01 + 0.2044736022586D+01 0.2085755668115D+01 0.2127504322996D+01 0.2169991711448D+01 + 0.2213227570952D+01 0.2257221647108D+01 0.2301983688271D+01 0.2347523439972D+01 + 0.2393850639086D+01 0.2440975007782D+01 0.2488906247220D+01 0.2537654031002D+01 + 0.2587227998372D+01 0.2637637747157D+01 0.2688892826442D+01 0.2741002728983D+01 + 0.2793976883341D+01 0.2847824645743D+01 0.2902555291652D+01 0.2958178007063D+01 + 0.3014701879494D+01 0.3072135888684D+01 0.3130488897001D+01 0.3189769639525D+01 + 0.3249986713841D+01 0.3311148569513D+01 0.3373263497233D+01 0.3436339617667D+01 + 0.3500384869964D+01 0.3565406999951D+01 0.3631413547991D+01 0.3698411836514D+01 + 0.3766408957221D+01 0.3835411757947D+01 0.3905426829193D+01 0.3976460490322D+01 + 0.4048518775419D+01 0.4121607418815D+01 0.4195731840277D+01 0.4270897129857D+01 + 0.4347108032420D+01 0.4424368931831D+01 0.4502683834816D+01 0.4582056354503D+01 + 0.4662489693636D+01 0.4743986627475D+01 0.4826549486387D+01 0.4910180138127D+01 + 0.4994879969825D+01 0.5080649869681D+01 0.5167490208373D+01 0.5255400820202D+01 + 0.5344380983962D+01 0.5434429403565D+01 0.5525544188426D+01 0.5617722833617D+01 + 0.5710962199815D+01 0.5805258493041D+01 0.5900607244231D+01 0.5997003288635D+01 + 0.6094440745069D+01 0.6192912995049D+01 0.6292412661814D+01 0.6392931589269D+01 + 0.6494460820874D+01 0.6596990578488D+01 0.6700510241224D+01 0.6805008324307D+01 + 0.6910472457995D+01 0.7016889366579D+01 0.7124244847491D+01 0.7232523750568D+01 + 0.7341709957494D+01 0.7451786361463D+01 0.7562734847107D+01 0.7674536270712D+01 + 0.7787170440791D+01 0.7900616099026D+01 0.8014850901658D+01 0.8129851401340D+01 + 0.8245593029526D+01 0.8362050079436D+01 0.8479195689649D+01 0.8597001828383D+01 + 0.8715439278509D+01 0.8834477623371D+01 0.8954085233454D+01 0.9074229253973D+01 + 0.9194875593440D+01 0.9315988913276D+01 0.9437532618530D+01 0.9559468849772D+01 + 0.9681758476237D+01 0.9804361090277D+01 0.9927235003199D+01 0.1005033724256D+02 + 0.1017362355101D+02 0.1029704838669D+02 0.1042056492540D+02 0.1054412506444D+02 + 0.1066767942831D+02 0.1079117737637D+02 0.1091456701244D+02 0.1103779519646D+02 + 0.1116080755839D+02 0.1128354851420D+02 0.1140596128432D+02 0.1152798791434D+02 + 0.1164956929827D+02 0.1177064520433D+02 0.1189115430327D+02 0.1201103419951D+02 + 0.1213022146500D+02 0.1224865167586D+02 0.1236625945201D+02 0.1248297849976D+02 + 0.1259874165744D+02 0.1271348094411D+02 0.1282712761148D+02 0.1293961219902D+02 + 0.1305086459240D+02 0.1316081408518D+02 0.1326938944391D+02 0.1337651897664D+02 + 0.1348213060491D+02 0.1358615193909D+02 0.1368851035736D+02 0.1378913308811D+02 + 0.1388794729589D+02 0.1398488017086D+02 0.1407985902179D+02 0.1417281137257D+02 + 0.1426366506212D+02 0.1435234834789D+02 0.1443879001264D+02 0.1452291947466D+02 + 0.1460466690129D+02 0.1468396332564D+02 0.1476074076649D+02 0.1483493235126D+02 + 0.1490647244192D+02 0.1497529676373D+02 0.1504134253675D+02 0.1510454860984D+02 + 0.1516485559720D+02 0.1522220601698D+02 0.1527654443219D+02 0.1532781759325D+02 + 0.1537597458241D+02 0.1542096695946D+02 0.1546274890874D+02 0.1550127738702D+02 + 0.1553651227211D+02 0.1556841651189D+02 0.1559695627334D+02 0.1562210109145D+02 + 0.1564382401753D+02 0.1566210176664D+02 0.1567691486377D+02 0.1568824778841D+02 + 0.1569608911712D+02 0.1570043166360D+02 0.1570127261607D+02 0.1569861367129D+02 + 0.1569246116496D+02 0.1568282619787D+02 0.1566972475757D+02 0.1565317783486D+02 + 0.1563321153475D+02 0.1560985718135D+02 0.1558315141624D+02 0.1555313628970D+02 + 0.1551985934445D+02 0.1548337369123D+02 0.1544373807583D+02 0.1540101693692D+02 + 0.1535528045436D+02 0.1530660458716D+02 0.1525507110098D+02 0.1520076758423D+02 + 0.1514378745267D+02 0.1508422994170D+02 0.1502220008605D+02 0.1495780868635D+02 + 0.1489117226206D+02 0.1482241299046D+02 0.1475165863115D+02 0.1467904243575D+02 + 0.1460470304238D+02 0.1452878435463D+02 0.1445143540465D+02 0.1437281020013D+02 + 0.1429306755483D+02 0.1421237090260D+02 0.1413088809452D+02 0.1404879117925D+02 + 0.1396625616625D+02 0.1388346277207D+02 0.1380059414952D+02 0.1371783659988D+02 + 0.1363537926825D+02 0.1355341382212D+02 0.1347213411351D+02 0.1339173582480D+02 + 0.1331241609871D+02 0.1323437315279D+02 0.1315780587881D+02 0.1308291342766D+02 + 0.1300989478035D+02 0.1293894830568D+02 0.1287027130535D+02 0.1280405954732D+02 + 0.1274050678825D+02 0.1267980428593D+02 0.1262214030269D+02 0.1256769960087D+02 + 0.1251666293145D+02 0.1246920651702D+02 0.1242550153038D+02 0.1238571356999D+02 + 0.1235000213372D+02 0.1231852009235D+02 0.1229141316414D+02 0.1226881939222D+02 + 0.1225086862623D+02 0.1223768200985D+02 0.1222937147599D+02 0.1222603925117D+02 + 0.1222777737106D+02 0.1223466720868D+02 0.1224677901729D+02 0.1226417148958D+02 + 0.1228689133517D+02 0.1231497287802D+02 0.1234843767581D+02 0.1238729416297D+02 + 0.1243153731911D+02 0.1248114836487D+02 0.1253609448665D+02 0.1259632859227D+02 + 0.1266178909890D+02 0.1273239975523D+02 0.1280806949923D+02 0.1288869235315D+02 + 0.1297414735711D+02 0.1306429854274D+02 0.1315899494816D+02 0.1325807067533D+02 + 0.1336134499111D+02 0.1346862247282D+02 0.1357969319917D+02 0.1369433298744D+02 + 0.1381230367740D+02 0.1393335346243D+02 0.1405721726828D+02 0.1418361717951D+02 + 0.1431226291376D+02 0.1444285234362D+02 0.1457507206581D+02 0.1470859801733D+02 + 0.1484309613763D+02 0.1497822307639D+02 0.1511362694548D+02 0.1524894811426D+02 + 0.1538382004666D+02 0.1551787017849D+02 0.1565072083339D+02 0.1578199017530D+02 + 0.1591129319546D+02 0.1603824273170D+02 0.1616245051740D+02 0.1628352825765D+02 + 0.1640108872963D+02 0.1651474690448D+02 0.1662412108723D+02 0.1672883407174D+02 + 0.1682851430716D+02 0.1692279707220D+02 0.1701132565381D+02 0.1709375252614D+02 + 0.1716974052608D+02 0.1723896402125D+02 0.1730111006644D+02 0.1735587954416D+02 + 0.1740298828530D+02 0.1744216816538D+02 0.1747316817225D+02 0.1749575544089D+02 + 0.1750971625093D+02 0.1751485698260D+02 0.1751100502688D+02 0.1749800964559D+02 + 0.1747574277733D+02 0.1744409978499D+02 0.1740300014123D+02 0.1735238804766D+02 + 0.1729223298439D+02 0.1722253018618D+02 0.1714330104180D+02 0.1705459341368D+02 + 0.1695648187457D+02 0.1684906785873D+02 0.1673247972505D+02 0.1660687272995D+02 + 0.1647242890818D+02 0.1632935685981D+02 0.1617789144222D+02 0.1601829336618D+02 + 0.1585084869528D+02 0.1567586824865D+02 0.1549368690699D+02 0.1530466282265D+02 + 0.1510917653451D+02 0.1490762998916D+02 0.1470044547022D+02 0.1448806443791D+02 + 0.1427094628160D+02 0.1404956698852D+02 0.1382441773199D+02 0.1359600338336D+02 + 0.1336484095192D+02 0.1313145795774D+02 0.1289639074258D+02 0.1266018272468D+02 + 0.1242338260337D+02 0.1218654252002D+02 0.1195021618209D+02 0.1171495695744D+02 + 0.1148131594627D+02 0.1124984003849D+02 0.1102106996440D+02 0.1079553834688D+02 + 0.1057376776347D+02 0.1035626882667D+02 0.1014353829125D+02 0.9936057196884D+01 + 0.9734289054994D+01 0.9538678088120D+01 0.9349647530399D+01 0.9167597997384D+01 + 0.8992905933301D+01 0.8825922143594D+01 0.8666970420224D+01 0.8516346266999D+01 + 0.8374315731611D+01 0.8241114350747D+01 0.8116946214096D+01 0.8001983152570D+01 + 0.7896364055459D+01 0.7800194320670D+01 0.7713545441561D+01 0.7636454733225D+01 + 0.7568925200401D+01 0.7510925548528D+01 0.7462390338698D+01 0.7423220286625D+01 + 0.7393282704950D+01 0.7372412087556D+01 0.7360410833787D+01 0.7357050109802D+01 + 0.7362070843542D+01 0.7375184849138D+01 0.7396076075866D+01 0.7424401976120D+01 + 0.7459794986211D+01 0.7501864113185D+01 0.7550196620265D+01 0.7604359802945D+01 + 0.7663902847256D+01 0.7728358761219D+01 0.7797246370063D+01 0.7870072365405D+01 + 0.7946333398216D+01 0.8025518205140D+01 0.8107109757504D+01 0.8190587422172D+01 + 0.8275429123337D+01 0.8361113494303D+01 0.8447122008353D+01 0.8532941077928D+01 + 0.8618064111536D+01 0.8701993518075D+01 0.8784242648578D+01 0.8864337665829D+01 + 0.8941819332731D+01 0.9016244710878D+01 0.9087188761372D+01 0.9154245840560D+01 + 0.9217031084099D+01 0.9275181673474D+01 0.9328357979881D+01 0.9376244581215D+01 + 0.9418551148709D+01 0.9455013200639D+01 0.9485392721360D+01 0.9509478644797D+01 + 0.9527087202359D+01 0.9538062136102D+01 0.9542274778747D+01 0.9539624002998D+01 + 0.9530036043300D+01 0.9513464193959D+01 0.9489888388159D+01 0.9459314663078D+01 + 0.9421774516843D+01 0.9377324163609D+01 0.9326043693467D+01 0.9268036144314D+01 + 0.9203426493115D+01 0.9132360574297D+01 0.9055003933175D+01 0.8971540622481D+01 + 0.8882171950151D+01 0.8787115186520D+01 0.8686602239071D+01 0.8580878302773D+01 + 0.8470200493895D+01 0.8354836475027D+01 0.8235063078754D+01 0.8111164937189D+01 + 0.7983433124252D+01 0.7852163817216D+01 0.7717656983696D+01 0.7580215099831D+01 + 0.7440141905014D+01 0.7297741198086D+01 0.7153315679440D+01 0.7007165843079D+01 + 0.6859588922166D+01 0.6710877891167D+01 0.6561320527250D+01 0.6411198533128D+01 + 0.6260786723101D+01 0.6110352273646D+01 0.5960154039458D+01 0.5810441935471D+01 + 0.5661456384987D+01 0.5513427833700D+01 0.5366576329042D+01 0.5221111163955D+01 + 0.5077230583918D+01 0.4935121555751D+01 0.4794959596475D+01 0.4656908660288D+01 + 0.4521121081498D+01 0.4387737571052D+01 0.4256887264186D+01 0.4128687816522D+01 + 0.4003245545873D+01 0.3880655616880D+01 0.3761002265561D+01 0.3644359060777D+01 + 0.3530789199588D+01 0.3420345833472D+01 0.3313072422343D+01 0.3209003113371D+01 + 0.3108163141592D+01 0.3010569249384D+01 0.2916230121919D+01 0.2825146835796D+01 + 0.2737313318133D+01 0.2652716813508D+01 0.2571338356232D+01 0.2493153245580D+01 + 0.2418131521695D+01 0.2346238440047D+01 0.2277434942461D+01 0.2211678122838D+01 + 0.2148921685899D+01 0.2089116397376D+01 0.2032210524266D+01 0.1978150263893D+01 + 0.1926880160684D+01 0.1878343509721D+01 0.1832482746269D+01 0.1789239820638D+01 + 0.1748556557871D+01 0.1710375001879D+01 0.1674637743804D+01 0.1641288234472D+01 + 0.1610271080956D+01 0.1581532327338D+01 0.1555019719890D+01 0.1530682956958D+01 + 0.1508473923914D+01 0.1488346913611D+01 0.1470258832820D+01 0.1454169395155D+01 + 0.1440041301042D+01 0.1427840405245D+01 0.1417535872504D+01 0.1409100321753D+01 + 0.1402509959377D+01 0.1397744701874D+01 0.1394788288181D+01 0.1393628381826D+01 + 0.1394256662892D+01 0.1396668909610D+01 0.1400865069190D+01 0.1406849317222D+01 + 0.1414629369614D+01 0.1424336942263D+01 0.1436096575202D+01 0.1449912447024D+01 + 0.1465794674727D+01 0.1483759333931D+01 0.1503828494539D+01 0.1526030271798D+01 + 0.1550398892649D+01 0.1576974777196D+01 0.1605804635055D+01 0.1636941576215D+01 + 7 1012 + 1 0 -1 -511.89194 + 2 0 -1 -58.90181 + 2 1 1 -50.68932 + 2 1 -2 -49.77537 + 3 0 -1 -5.73317 + 3 1 1 -3.34334 + 3 1 -2 -3.22919 + 0.2122975645015D-04 0.2173507709867D-04 0.2225242316243D-04 0.2278208072829D-04 + 0.2332434268594D-04 0.2387950888954D-04 0.2444788632325D-04 0.2502978927059D-04 + 0.2562553948791D-04 0.2623546638192D-04 0.2685990719144D-04 0.2749920717353D-04 + 0.2815371979393D-04 0.2882380692207D-04 0.2950983903075D-04 0.3021219540050D-04 + 0.3093126432877D-04 0.3166744334418D-04 0.3242113942573D-04 0.3319276922733D-04 + 0.3398275930755D-04 0.3479154636487D-04 0.3561957747857D-04 0.3646731035519D-04 + 0.3733521358096D-04 0.3822376688016D-04 0.3913346137963D-04 0.4006479987955D-04 + 0.4101829713060D-04 0.4199448011777D-04 0.4299388835081D-04 0.4401707416166D-04 + 0.4506460300883D-04 0.4613705378910D-04 0.4723501915650D-04 0.4835910584899D-04 + 0.4950993502270D-04 0.5068814259429D-04 0.5189437959126D-04 0.5312931251066D-04 + 0.5439362368626D-04 0.5568801166444D-04 0.5701319158897D-04 0.5836989559491D-04 + 0.5975887321186D-04 0.6118089177673D-04 0.6263673685632D-04 0.6412721267990D-04 + 0.6565314258201D-04 0.6721536945580D-04 0.6881475621705D-04 0.7045218627922D-04 + 0.7212856403973D-04 0.7384481537777D-04 0.7560188816385D-04 0.7740075278149D-04 + 0.7924240266119D-04 0.8112785482706D-04 0.8305815045642D-04 0.8503435545263D-04 + 0.8705756103141D-04 0.8912888432116D-04 0.9124946897738D-04 0.9342048581165D-04 + 0.9564313343555D-04 0.9791863891974D-04 0.1002482584687D-03 0.1026332781112D-03 + 0.1050750144077D-03 0.1075748151735D-03 0.1101340602203D-03 0.1127541621137D-03 + 0.1154365669501D-03 0.1181827551510D-03 0.1209942422769D-03 0.1238725798590D-03 + 0.1268193562527D-03 0.1298361975089D-03 0.1329247682680D-03 0.1360867726735D-03 + 0.1393239553083D-03 0.1426381021518D-03 0.1460310415612D-03 0.1495046452749D-03 + 0.1530608294397D-03 0.1567015556625D-03 0.1604288320871D-03 0.1642447144955D-03 + 0.1681513074364D-03 0.1721507653792D-03 0.1762452938963D-03 0.1804371508722D-03 + 0.1847286477421D-03 0.1891221507592D-03 0.1936200822920D-03 0.1982249221522D-03 + 0.2029392089542D-03 0.2077655415060D-03 0.2127065802334D-03 0.2177650486382D-03 + 0.2229437347894D-03 0.2282454928513D-03 0.2336732446459D-03 0.2392299812538D-03 + 0.2449187646513D-03 0.2507427293871D-03 0.2567050842979D-03 0.2628091142650D-03 + 0.2690581820118D-03 0.2754557299435D-03 0.2820052820308D-03 0.2887104457371D-03 + 0.2955749139921D-03 0.3026024672103D-03 0.3097969753590D-03 0.3171624000731D-03 + 0.3247027968207D-03 0.3324223171196D-03 0.3403252108055D-03 0.3484158283536D-03 + 0.3566986232552D-03 0.3651781544500D-03 0.3738590888149D-03 0.3827462037126D-03 + 0.3918443895988D-03 0.4011586526914D-03 0.4106941177020D-03 0.4204560306321D-03 + 0.4304497616342D-03 0.4406808079408D-03 0.4511547968612D-03 0.4618774888502D-03 + 0.4728547806468D-03 0.4840927084883D-03 0.4955974513988D-03 0.5073753345551D-03 + 0.5194328327314D-03 0.5317765738249D-03 0.5444133424641D-03 0.5573500837015D-03 + 0.5705939067925D-03 0.5841520890639D-03 0.5980320798714D-03 0.6122415046513D-03 + 0.6267881690659D-03 0.6416800632466D-03 0.6569253661363D-03 0.6725324499326D-03 + 0.6885098846360D-03 0.7048664427037D-03 0.7216111038125D-03 0.7387530597330D-03 + 0.7563017193176D-03 0.7742667136049D-03 0.7926579010441D-03 0.8114853728404D-03 + 0.8307594584254D-03 0.8504907310562D-03 0.8706900135433D-03 0.8913683841142D-03 + 0.9125371824119D-03 0.9342080156346D-03 0.9563927648179D-03 0.9791035912634D-03 + 0.1002352943117D-02 0.1026153562102D-02 0.1050518490405D-02 0.1075461077728D-02 + 0.1100994988496D-02 0.1127134209246D-02 0.1153893056171D-02 0.1181286182852D-02 + 0.1209328588167D-02 0.1238035624379D-02 0.1267423005415D-02 0.1297506815344D-02 + 0.1328303517037D-02 0.1359829961041D-02 0.1392103394654D-02 0.1425141471212D-02 + 0.1458962259585D-02 0.1493584253904D-02 0.1529026383504D-02 0.1565308023106D-02 + 0.1602449003221D-02 0.1640469620811D-02 0.1679390650189D-02 0.1719233354165D-02 + 0.1760019495464D-02 0.1801771348394D-02 0.1844511710794D-02 0.1888263916250D-02 + 0.1933051846599D-02 0.1978899944720D-02 0.2025833227614D-02 0.2073877299798D-02 + 0.2123058366995D-02 0.2173403250151D-02 0.2224939399761D-02 0.2277694910540D-02 + 0.2331698536421D-02 0.2386979705903D-02 0.2443568537747D-02 0.2501495857040D-02 + 0.2560793211623D-02 0.2621492888896D-02 0.2683627933011D-02 0.2747232162458D-02 + 0.2812340188056D-02 0.2878987431352D-02 0.2947210143447D-02 0.3017045424251D-02 + 0.3088531242177D-02 0.3161706454285D-02 0.3236610826892D-02 0.3313285056646D-02 + 0.3391770792086D-02 0.3472110655691D-02 0.3554348266436D-02 0.3638528262858D-02 + 0.3724696326649D-02 0.3812899206788D-02 0.3903184744224D-02 0.3995601897109D-02 + 0.4090200766624D-02 0.4187032623373D-02 0.4286149934389D-02 0.4387606390746D-02 + 0.4491456935804D-02 0.4597757794082D-02 0.4706566500803D-02 0.4817941932088D-02 + 0.4931944335851D-02 0.5048635363379D-02 0.5168078101634D-02 0.5290337106279D-02 + 0.5415478435454D-02 0.5543569684307D-02 0.5674680020311D-02 0.5808880219367D-02 + 0.5946242702730D-02 0.6086841574754D-02 0.6230752661494D-02 0.6378053550168D-02 + 0.6528823629508D-02 0.6683144131013D-02 0.6841098171130D-02 0.7002770794372D-02 + 0.7168249017405D-02 0.7337621874121D-02 0.7510980461712D-02 0.7688417987773D-02 + 0.7870029818463D-02 0.8055913527720D-02 0.8246168947593D-02 0.8440898219673D-02 + 0.8640205847678D-02 0.8844198751201D-02 0.9052986320644D-02 0.9266680473381D-02 + 0.9485395711148D-02 0.9709249178711D-02 0.9938360723829D-02 0.1017285295853D-01 + 0.1041285132175D-01 0.1065848414335D-01 0.1090988270951D-01 0.1116718132961D-01 + 0.1143051740455D-01 0.1170003149653D-01 0.1197586740047D-01 0.1225817221684D-01 + 0.1254709642620D-01 0.1284279396532D-01 0.1314542230495D-01 0.1345514252930D-01 + 0.1377211941725D-01 0.1409652152530D-01 0.1442852127232D-01 0.1476829502620D-01 + 0.1511602319226D-01 0.1547189030365D-01 0.1583608511371D-01 0.1620880069022D-01 + 0.1659023451183D-01 0.1698058856639D-01 0.1738006945154D-01 0.1778888847734D-01 + 0.1820726177118D-01 0.1863541038486D-01 0.1907356040402D-01 0.1952194305980D-01 + 0.1998079484302D-01 0.2045035762063D-01 0.2093087875471D-01 0.2142261122400D-01 + 0.2192581374792D-01 0.2244075091329D-01 0.2296769330365D-01 0.2350691763133D-01 + 0.2405870687229D-01 0.2462335040374D-01 0.2520114414469D-01 0.2579239069942D-01 + 0.2639739950387D-01 0.2701648697516D-01 0.2764997666416D-01 0.2829819941123D-01 + 0.2896149350513D-01 0.2964020484531D-01 0.3033468710740D-01 0.3104530191220D-01 + 0.3177241899806D-01 0.3251641639684D-01 0.3327768061342D-01 0.3405660680881D-01 + 0.3485359898710D-01 0.3566907018606D-01 0.3650344267166D-01 0.3735714813647D-01 + 0.3823062790211D-01 0.3912433312562D-01 0.4003872501011D-01 0.4097427501948D-01 + 0.4193146509749D-01 0.4291078789111D-01 0.4391274697832D-01 0.4493785710035D-01 + 0.4598664439858D-01 0.4705964665594D-01 0.4815741354312D-01 0.4928050686955D-01 + 0.5042950083923D-01 0.5160498231153D-01 0.5280755106696D-01 0.5403782007813D-01 + 0.5529641578584D-01 0.5658397838041D-01 0.5790116208843D-01 0.5924863546488D-01 + 0.6062708169076D-01 0.6203719887636D-01 0.6347970037015D-01 0.6495531507346D-01 + 0.6646478776099D-01 0.6800887940725D-01 0.6958836751900D-01 0.7120404647380D-01 + 0.7285672786470D-01 0.7454724085125D-01 0.7627643251682D-01 0.7804516823229D-01 + 0.7985433202641D-01 0.8170482696258D-01 0.8359757552242D-01 0.8553351999606D-01 + 0.8751362287932D-01 0.8953886727772D-01 0.9161025731761D-01 0.9372881856432D-01 + 0.9589559844749D-01 0.9811166669365D-01 0.1003781157661D+00 0.1026960613124D+00 + 0.1050666426187D+00 0.1074910230727D+00 0.1099703906329D+00 0.1125059583070D+00 + 0.1150989646366D+00 0.1177506741909D+00 0.1204623780676D+00 0.1232353944021D+00 + 0.1260710688845D+00 0.1289707752849D+00 0.1319359159864D+00 0.1349679225270D+00 + 0.1380682561490D+00 0.1412384083570D+00 0.1444799014844D+00 0.1477942892678D+00 + 0.1511831574303D+00 0.1546481242725D+00 0.1581908412731D+00 0.1618129936965D+00 + 0.1655163012104D+00 0.1693025185104D+00 0.1731734359544D+00 0.1771308802047D+00 + 0.1811767148790D+00 0.1853128412094D+00 0.1895411987104D+00 0.1938637658552D+00 + 0.1982825607598D+00 0.2027996418767D+00 0.2074171086957D+00 0.2121371024533D+00 + 0.2169618068509D+00 0.2218934487801D+00 0.2269342990569D+00 0.2320866731634D+00 + 0.2373529319974D+00 0.2427354826295D+00 0.2482367790682D+00 0.2538593230323D+00 + 0.2596056647304D+00 0.2654784036474D+00 0.2714801893389D+00 0.2776137222308D+00 + 0.2838817544268D+00 0.2902870905217D+00 0.2968325884206D+00 0.3035211601645D+00 + 0.3103557727607D+00 0.3173394490192D+00 0.3244752683937D+00 0.3317663678273D+00 + 0.3392159426028D+00 0.3468272471962D+00 0.3546035961349D+00 0.3625483648577D+00 + 0.3706649905790D+00 0.3789569731540D+00 0.3874278759464D+00 0.3960813266976D+00 + 0.4049210183955D+00 0.4139507101454D+00 0.4231742280388D+00 0.4325954660221D+00 + 0.4422183867640D+00 0.4520470225197D+00 0.4620854759931D+00 0.4723379211946D+00 + 0.4828086042953D+00 0.4935018444749D+00 0.5044220347646D+00 0.5155736428822D+00 + 0.5269612120602D+00 0.5385893618646D+00 0.5504627890040D+00 0.5625862681281D+00 + 0.5749646526146D+00 0.5876028753427D+00 0.6005059494532D+00 0.6136789690924D+00 + 0.6271271101407D+00 0.6408556309226D+00 0.6548698728981D+00 0.6691752613333D+00 + 0.6837773059493D+00 0.6986816015479D+00 0.7138938286123D+00 0.7294197538810D+00 + 0.7452652308942D+00 0.7614362005101D+00 0.7779386913894D+00 0.7947788204470D+00 + 0.8119627932680D+00 0.8294969044866D+00 0.8473875381261D+00 0.8656411678975D+00 + 0.8842643574549D+00 0.9032637606047D+00 0.9226461214683D+00 0.9424182745935D+00 + 0.9625871450140D+00 0.9831597482541D+00 0.1004143190275D+01 0.1025544667362D+01 + 0.1047371465949D+01 0.1069630962376D+01 0.1092330622582D+01 0.1115478001718D+01 + 0.1139080743699D+01 0.1163146580667D+01 0.1187683332379D+01 0.1212698905512D+01 + 0.1238201292877D+01 0.1264198572546D+01 0.1290698906886D+01 0.1317710541494D+01 + 0.1345241804028D+01 0.1373301102944D+01 0.1401896926110D+01 0.1431037839321D+01 + 0.1460732484690D+01 0.1490989578921D+01 0.1521817911461D+01 0.1553226342519D+01 + 0.1585223800953D+01 0.1617819282025D+01 0.1651021845012D+01 0.1684840610666D+01 + 0.1719284758534D+01 0.1754363524114D+01 0.1790086195862D+01 0.1826462112019D+01 + 0.1863500657290D+01 0.1901211259327D+01 0.1939603385053D+01 0.1978686536792D+01 + 0.2018470248210D+01 0.2058964080068D+01 0.2100177615772D+01 0.2142120456722D+01 + 0.2184802217451D+01 0.2228232520549D+01 0.2272420991371D+01 0.2317377252521D+01 + 0.2363110918097D+01 0.2409631587718D+01 0.2456948840298D+01 0.2505072227579D+01 + 0.2554011267414D+01 0.2603775436800D+01 0.2654374164640D+01 0.2705816824249D+01 + 0.2758112725590D+01 0.2811271107225D+01 0.2865301128002D+01 0.2920211858443D+01 + 0.2976012271854D+01 0.3032711235135D+01 0.3090317499294D+01 0.3148839689666D+01 + 0.3208286295814D+01 0.3268665661132D+01 0.3329985972130D+01 0.3392255247403D+01 + 0.3455481326284D+01 0.3519671857166D+01 0.3584834285516D+01 0.3650975841540D+01 + 0.3718103527540D+01 0.3786224104928D+01 0.3855344080910D+01 0.3925469694842D+01 + 0.3996606904248D+01 0.4068761370505D+01 0.4141938444201D+01 0.4216143150155D+01 + 0.4291380172106D+01 0.4367653837082D+01 0.4444968099432D+01 0.4523326524540D+01 + 0.4602732272224D+01 0.4683188079814D+01 0.4764696244923D+01 0.4847258607911D+01 + 0.4930876534058D+01 0.5015550895439D+01 0.5101282052526D+01 0.5188069835504D+01 + 0.5275913525340D+01 0.5364811834582D+01 0.5454762887935D+01 0.5545764202593D+01 + 0.5637812668364D+01 0.5730904527600D+01 0.5825035354930D+01 0.5920200036841D+01 + 0.6016392751096D+01 0.6113606946037D+01 0.6211835319763D+01 0.6311069799237D+01 + 0.6411301519318D+01 0.6512520801757D+01 0.6614717134178D+01 0.6717879149076D+01 + 0.6821994602856D+01 0.6927050354936D+01 0.7033032346971D+01 0.7139925582197D+01 + 0.7247714104955D+01 0.7356380980422D+01 0.7465908274590D+01 0.7576277034522D+01 + 0.7687467268944D+01 0.7799457929201D+01 0.7912226890625D+01 0.8025750934367D+01 + 0.8140005729731D+01 0.8254965817070D+01 0.8370604591283D+01 0.8486894285977D+01 + 0.8603805958343D+01 0.8721309474805D+01 0.8839373497487D+01 0.8957965471583D+01 + 0.9077051613664D+01 0.9196596901005D+01 0.9316565061973D+01 0.9436918567578D+01 + 0.9557618624205D+01 0.9678625167647D+01 0.9799896858462D+01 0.9921391078761D+01 + 0.1004306393048D+02 0.1016487023519D+02 0.1028676353561D+02 0.1040869609872D+02 + 0.1053061892078D+02 0.1065248173410D+02 0.1077423301584D+02 0.1089581999877D+02 + 0.1101718868413D+02 0.1113828385666D+02 0.1125904910191D+02 0.1137942682584D+02 + 0.1149935827678D+02 0.1161878356999D+02 0.1173764171462D+02 0.1185587064341D+02 + 0.1197340724503D+02 0.1209018739920D+02 0.1220614601465D+02 0.1232121706995D+02 + 0.1243533365740D+02 0.1254842802982D+02 0.1266043165050D+02 0.1277127524634D+02 + 0.1288088886404D+02 0.1298920192971D+02 0.1309614331160D+02 0.1320164138629D+02 + 0.1330562410812D+02 0.1340801908212D+02 0.1350875364026D+02 0.1360775492116D+02 + 0.1370494995324D+02 0.1380026574132D+02 0.1389362935662D+02 0.1398496803019D+02 + 0.1407420924981D+02 0.1416128086012D+02 0.1424611116627D+02 0.1432862904069D+02 + 0.1440876403324D+02 0.1448644648440D+02 0.1456160764164D+02 0.1463417977876D+02 + 0.1470409631813D+02 0.1477129195572D+02 0.1483570278883D+02 0.1489726644633D+02 + 0.1495592222127D+02 0.1501161120574D+02 0.1506427642781D+02 0.1511386299027D+02 + 0.1516031821110D+02 0.1520359176531D+02 0.1524363582812D+02 0.1528040521898D+02 + 0.1531385754641D+02 0.1534395335325D+02 0.1537065626208D+02 0.1539393312048D+02 + 0.1541375414585D+02 0.1543009306950D+02 0.1544292727951D+02 0.1545223796216D+02 + 0.1545801024155D+02 0.1546023331695D+02 0.1545890059744D+02 0.1545400983365D+02 + 0.1544556324596D+02 0.1543356764880D+02 0.1541803457065D+02 0.1539898036925D+02 + 0.1537642634154D+02 0.1535039882796D+02 0.1532092931044D+02 0.1528805450387D+02 + 0.1525181644030D+02 0.1521226254557D+02 0.1516944570778D+02 0.1512342433713D+02 + 0.1507426241669D+02 0.1502202954350D+02 0.1496680095964D+02 0.1490865757272D+02 + 0.1484768596530D+02 0.1478397839284D+02 0.1471763276969D+02 0.1464875264266D+02 + 0.1457744715182D+02 0.1450383097801D+02 0.1442802427679D+02 0.1435015259838D+02 + 0.1427034679327D+02 0.1418874290321D+02 0.1410548203722D+02 0.1402071023247D+02 + 0.1393457829969D+02 0.1384724165293D+02 0.1375886012364D+02 0.1366959775879D+02 + 0.1357962260304D+02 0.1348910646488D+02 0.1339822466686D+02 0.1330715577980D+02 + 0.1321608134121D+02 0.1312518555808D+02 0.1303465499419D+02 0.1294467824221D+02 + 0.1285544558101D+02 0.1276714861841D+02 0.1267997991994D+02 0.1259413262403D+02 + 0.1250980004419D+02 0.1242717525885D+02 0.1234645068948D+02 0.1226781766776D+02 + 0.1219146599257D+02 0.1211758347770D+02 0.1204635549121D+02 0.1197796448732D+02 + 0.1191258953197D+02 0.1185040582321D+02 0.1179158420730D+02 0.1173629069208D+02 + 0.1168468595856D+02 0.1163692487226D+02 0.1159315599549D+02 0.1155352110209D+02 + 0.1151815469598D+02 0.1148718353503D+02 0.1146072616178D+02 0.1143889244247D+02 + 0.1142178311602D+02 0.1140948935454D+02 0.1140209233686D+02 0.1139966283678D+02 + 0.1140226082774D+02 0.1140993510519D+02 0.1142272292875D+02 0.1144064968524D+02 + 0.1146372857460D+02 0.1149196031991D+02 0.1152533290326D+02 0.1156382132880D+02 + 0.1160738741454D+02 0.1165597961412D+02 0.1170953287012D+02 0.1176796849989D+02 + 0.1183119411535D+02 0.1189910357777D+02 0.1197157698856D+02 0.1204848071701D+02 + 0.1212966746596D+02 0.1221497637600D+02 0.1230423316888D+02 0.1239725033077D+02 + 0.1249382733567D+02 0.1259375090926D+02 0.1269679533346D+02 0.1280272279167D+02 + 0.1291128375448D+02 0.1302221740584D+02 0.1313525210912D+02 0.1325010591253D+02 + 0.1336648709337D+02 0.1348409474012D+02 0.1360261937149D+02 0.1372174359123D+02 + 0.1384114277758D+02 0.1396048580566D+02 0.1407943580155D+02 0.1419765092608D+02 + 0.1431478518661D+02 0.1443048927478D+02 0.1454441142812D+02 0.1465619831308D+02 + 0.1476549592746D+02 0.1487195051928D+02 0.1497520951989D+02 0.1507492248828D+02 + 0.1517074206398D+02 0.1526232492551D+02 0.1534933275145D+02 0.1543143318112D+02 + 0.1550830077157D+02 0.1557961794797D+02 0.1564507594396D+02 0.1570437572881D+02 + 0.1575722891823D+02 0.1580335866539D+02 0.1584250052899D+02 0.1587440331524D+02 + 0.1589882989033D+02 0.1591555796049D+02 0.1592438081630D+02 0.1592510803844D+02 + 0.1591756616179D+02 0.1590159929512D+02 0.1587706969359D+02 0.1584385828154D+02 + 0.1580186512290D+02 0.1575100983720D+02 0.1569123195871D+02 0.1562249123695D+02 + 0.1554476787665D+02 0.1545806271560D+02 0.1536239733893D+02 0.1525781412875D+02 + 0.1514437624809D+02 0.1502216755847D+02 0.1489129247063D+02 0.1475187572813D+02 + 0.1460406212401D+02 0.1444801615062D+02 0.1428392158332D+02 0.1411198099888D+02 + 0.1393241522964D+02 0.1374546275490D+02 0.1355137903119D+02 0.1335043576333D+02 + 0.1314292011864D+02 0.1292913388664D+02 0.1270939258714D+02 0.1248402452972D+02 + 0.1225336982785D+02 0.1201777937125D+02 0.1177761376017D+02 0.1153324220569D+02 + 0.1128504140014D+02 0.1103339436205D+02 0.1077868926027D+02 0.1052131822179D+02 + 0.1026167612835D+02 0.1000015940663D+02 0.9737164817090D+01 0.9473088246666D+01 + 0.9208323510392D+01 0.8943261167138D+01 0.8678287354606D+01 0.8413782648689D+01 + 0.8150120952198D+01 0.7887668417870D+01 0.7626782410424D+01 0.7367810512255D+01 + 0.7111089577147D+01 0.6856944836175D+01 0.6605689059620D+01 0.6357621778576D+01 + 0.6113028569417D+01 0.5872180404071D+01 0.5635333068605D+01 0.5402726652271D+01 + 0.5174585108689D+01 0.4951115890458D+01 0.4732509658013D+01 0.4518940063093D+01 + 0.4310563606744D+01 0.4107519571314D+01 0.3909930025455D+01 0.3717899900701D+01 + 0.3531517137795D+01 0.3350852900521D+01 0.3175961854415D+01 0.3006882507418D+01 + 0.2843637609166D+01 0.2686234605393D+01 0.2534666143602D+01 0.2388910626020D+01 + 0.2248932805599D+01 0.2114684420764D+01 0.1986104864410D+01 0.1863121882663D+01 + 0.1745652298807D+01 0.1633602757816D+01 0.1526870486911D+01 0.1425344067651D+01 + 0.1328904215091D+01 0.1237424559686D+01 0.1150772427713D+01 0.1068809616148D+01 + 0.9913931580887D+00 0.9183760750247D+00 0.8496081124357D+00 0.7849364554513D+00 + 0.7242064215293D+00 0.6672621273712D+00 0.6139471275574D+00 0.5641050226618D+00 + 0.5175800348878D+00 0.4742175495586D+00 0.4338646210828D+00 0.3963704423129D+00 + 0.3615867764997D+00 0.3293683513354D+00 0.2995732148544D+00 0.2720630532321D+00 + 0.2467034707815D+00 0.2233642326902D+00 0.2019194712763D+00 0.1822478567499D+00 + 0.1642327336682D+00 0.1477622244444D+00 0.1327293014336D+00 0.1190318292464D+00 + 0.1065725790655D+00 0.9525921682581D-01 0.8500426719540D-01 0.7572505534570D-01 + 0.6734362852856D-01 0.5978665949119D-01 0.5298533375213D-01 0.4687522273735D-01 + 0.4139614473480D-01 0.3649201557103D-01 0.3211069084453D-01 0.2820380147099D-01 + 0.2472658420543D-01 0.2163770870794D-01 0.1889910261478D-01 0.1647577596641D-01 + 0.1433564623066D-01 0.1244936504301D-01 0.1079014767040D-01 0.9333606088531D-02 + 0.8057586449521D-02 0.6942011605538D-02 0.5968729247262D-02 0.5121366113861D-02 + 0.4385188634413D-02 0.3746970269980D-02 0.3194865741265D-02 0.2718292249293D-02 + 0.2307817726031D-02 0.1955056088404D-02 0.1652569412799D-02 0.1393776897745D-02 + 0.1172870439853D-02 0.9847366120634D-03 0.8248848034661D-03 0.6893812560569D-03 + 0.5747887154298D-03 0.4781113990982D-03 0.3967449774979D-03 0.3284312582634D-03 + 0.2712172636576D-03 0.2234183935981D-03 0.1835853721449D-03 0.1504746831443D-03 + 0.1230222105786D-03 0.1003198106540D-03 0.8159455542106D-04 0.6619040144209D-04 + 0.5355205138722D-04 0.4321079120846D-04 0.3477210045803D-04 0.2790484818898D-04 + 0.2233190152246D-04 0.1782198824118D-04 0.1418266855132D-04 0.1125428434880D-04 + 0.8904766856498D-05 0.7025195313453D-05 0.5526010459652D-05 0.4333796852085D-05 + 0.3388557563637D-05 0.2641413563333D-05 0.2052668070841D-05 0.1590183444862D-05 + 0.1228024735392D-05 0.9453299398051D-06 0.7253722919424D-06 0.5547846237125D-06 + 0.4229200131023D-06 0.3213266143727D-06 0.2433177983142D-06 0.1836215545666D-06 + 0.1380955642703D-06 0.1034964778941D-06 0.7729376586493D-07 0.5752008209307D-07 + 0.4265142355148D-07 0.3151151106808D-07 0.2319578320089D-07 0.1701120974173D-07 + 0.1242881489534D-07 0.9046371073667D-08 0.6559198960071D-08 0.4737402476978D-08 + 0.3408191153158D-08 0.2442208093542D-08 0.1742998768590D-08 0.1238932286038D-08 + 0.8770296193333D-09 0.6182683290111D-09 0.4340255982013D-09 0.3033950772413D-09 + 0.2111715589818D-09 0.1463438404983D-09 0.1009726185101D-09 0.6935859066118D-10 + 0.4742849271888D-10 0.3228488955626D-10 0.2187547853929D-10 0.1475212866899D-10 + 0.9901881750809D-11 0.6613860882122D-11 0.4396644350124D-11 0.2908650000322D-11 + 0.1914873227728D-11 0.1254415200484D-11 0.8176535094916D-12 0.5302708391854D-12 + 0.3421370551355D-12 0.2196087836422D-12 0.1402231518601D-12 0.8906014768602D-13 + LSMS: xx z= 26. xvalws= 2.77074 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728402963D+02-0.5199725117641D+02-0.5199721792578D+02-0.5199718427293D+02 +-0.5199715021300D+02-0.5199711574107D+02-0.5199708085214D+02-0.5199704554119D+02 +-0.5199700980309D+02-0.5199697363268D+02-0.5199693702474D+02-0.5199689997397D+02 +-0.5199686247500D+02-0.5199682452243D+02-0.5199678611076D+02-0.5199674723444D+02 +-0.5199670788785D+02-0.5199666806529D+02-0.5199662776101D+02-0.5199658696918D+02 +-0.5199654568390D+02-0.5199650389922D+02-0.5199646160907D+02-0.5199641880734D+02 +-0.5199637548785D+02-0.5199633164434D+02-0.5199628727046D+02-0.5199624235979D+02 +-0.5199619690585D+02-0.5199615090205D+02-0.5199610434176D+02-0.5199605721822D+02 +-0.5199600952464D+02-0.5199596125410D+02-0.5199591239964D+02-0.5199586295419D+02 +-0.5199581291060D+02-0.5199576226162D+02-0.5199571099994D+02-0.5199565911815D+02 +-0.5199560660874D+02-0.5199555346411D+02-0.5199549967658D+02-0.5199544523837D+02 +-0.5199539014162D+02-0.5199533437834D+02-0.5199527794048D+02-0.5199522081989D+02 +-0.5199516300828D+02-0.5199510449731D+02-0.5199504527851D+02-0.5199498534331D+02 +-0.5199492468306D+02-0.5199486328897D+02-0.5199480115217D+02-0.5199473826367D+02 +-0.5199467461436D+02-0.5199461019507D+02-0.5199454499646D+02-0.5199447900910D+02 +-0.5199441222344D+02-0.5199434462984D+02-0.5199427621849D+02-0.5199420697954D+02 +-0.5199413690295D+02-0.5199406597858D+02-0.5199399419618D+02-0.5199392154537D+02 +-0.5199384801563D+02-0.5199377359634D+02-0.5199369827672D+02-0.5199362204589D+02 +-0.5199354489281D+02-0.5199346680633D+02-0.5199338777515D+02-0.5199330778784D+02 +-0.5199322683282D+02-0.5199314489839D+02-0.5199306197270D+02-0.5199297804374D+02 +-0.5199289309939D+02-0.5199280712733D+02-0.5199272011516D+02-0.5199263205027D+02 +-0.5199254291992D+02-0.5199245271123D+02-0.5199236141114D+02-0.5199226900644D+02 +-0.5199217548376D+02-0.5199208082958D+02-0.5199198503019D+02-0.5199188807175D+02 +-0.5199178994021D+02-0.5199169062139D+02-0.5199159010092D+02-0.5199148836424D+02 +-0.5199138539665D+02-0.5199128118323D+02-0.5199117570892D+02-0.5199106895845D+02 +-0.5199096091638D+02-0.5199085156707D+02-0.5199074089471D+02-0.5199062888326D+02 +-0.5199051551654D+02-0.5199040077813D+02-0.5199028465143D+02-0.5199016711964D+02 +-0.5199004816574D+02-0.5198992777253D+02-0.5198980592257D+02-0.5198968259824D+02 +-0.5198955778170D+02-0.5198943145487D+02-0.5198930359948D+02-0.5198917419701D+02 +-0.5198904322875D+02-0.5198891067574D+02-0.5198877651879D+02-0.5198864073848D+02 +-0.5198850331517D+02-0.5198836422896D+02-0.5198822345972D+02-0.5198808098707D+02 +-0.5198793679039D+02-0.5198779084882D+02-0.5198764314123D+02-0.5198749364622D+02 +-0.5198734234217D+02-0.5198718920716D+02-0.5198703421905D+02-0.5198687735537D+02 +-0.5198671859343D+02-0.5198655791024D+02-0.5198639528254D+02-0.5198623068679D+02 +-0.5198606409915D+02-0.5198589549550D+02-0.5198572485143D+02-0.5198555214224D+02 +-0.5198537734293D+02-0.5198520042816D+02-0.5198502137235D+02-0.5198484014954D+02 +-0.5198465673351D+02-0.5198447109769D+02-0.5198428321519D+02-0.5198409305883D+02 +-0.5198390060104D+02-0.5198370581396D+02-0.5198350866939D+02-0.5198330913876D+02 +-0.5198310719319D+02-0.5198290280341D+02-0.5198269593983D+02-0.5198248657249D+02 +-0.5198227467106D+02-0.5198206020484D+02-0.5198184314277D+02-0.5198162345340D+02 +-0.5198140110492D+02-0.5198117606510D+02-0.5198094830136D+02-0.5198071778068D+02 +-0.5198048446968D+02-0.5198024833454D+02-0.5198000934107D+02-0.5197976745462D+02 +-0.5197952264015D+02-0.5197927486220D+02-0.5197902408485D+02-0.5197877027176D+02 +-0.5197851338615D+02-0.5197825339081D+02-0.5197799024804D+02-0.5197772391971D+02 +-0.5197745436723D+02-0.5197718155151D+02-0.5197690543304D+02-0.5197662597177D+02 +-0.5197634312720D+02-0.5197605685833D+02-0.5197576712367D+02-0.5197547388122D+02 +-0.5197517708846D+02-0.5197487670236D+02-0.5197457267938D+02-0.5197426497542D+02 +-0.5197395354589D+02-0.5197363834563D+02-0.5197331932893D+02-0.5197299644952D+02 +-0.5197266966059D+02-0.5197233891476D+02-0.5197200416404D+02-0.5197166535990D+02 +-0.5197132245319D+02-0.5197097539418D+02-0.5197062413252D+02-0.5197026861727D+02 +-0.5196990879687D+02-0.5196954461909D+02-0.5196917603112D+02-0.5196880297948D+02 +-0.5196842541005D+02-0.5196804326804D+02-0.5196765649801D+02-0.5196726504383D+02 +-0.5196686884871D+02-0.5196646785514D+02-0.5196606200494D+02-0.5196565123919D+02 +-0.5196523549829D+02-0.5196481472189D+02-0.5196438884890D+02-0.5196395781753D+02 +-0.5196352156518D+02-0.5196308002855D+02-0.5196263314350D+02-0.5196218084518D+02 +-0.5196172306789D+02-0.5196125974518D+02-0.5196079080977D+02-0.5196031619354D+02 +-0.5195983582758D+02-0.5195934964214D+02-0.5195885756657D+02-0.5195835952942D+02 +-0.5195785545834D+02-0.5195734528011D+02-0.5195682892060D+02-0.5195630630481D+02 +-0.5195577735679D+02-0.5195524199969D+02-0.5195470015573D+02-0.5195415174616D+02 +-0.5195359669127D+02-0.5195303491041D+02-0.5195246632192D+02-0.5195189084316D+02 +-0.5195130839046D+02-0.5195071887917D+02-0.5195012222358D+02-0.5194951833693D+02 +-0.5194890713143D+02-0.5194828851819D+02-0.5194766240726D+02-0.5194702870759D+02 +-0.5194638732701D+02-0.5194573817222D+02-0.5194508114882D+02-0.5194441616121D+02 +-0.5194374311266D+02-0.5194306190525D+02-0.5194237243986D+02-0.5194167461616D+02 +-0.5194096833262D+02-0.5194025348643D+02-0.5193952997356D+02-0.5193879768871D+02 +-0.5193805652527D+02-0.5193730637535D+02-0.5193654712973D+02-0.5193577867788D+02 +-0.5193500090790D+02-0.5193421370652D+02-0.5193341695911D+02-0.5193261054963D+02 +-0.5193179436061D+02-0.5193096827316D+02-0.5193013216694D+02-0.5192928592013D+02 +-0.5192842940944D+02-0.5192756251004D+02-0.5192668509561D+02-0.5192579703828D+02 +-0.5192489820860D+02-0.5192398847556D+02-0.5192306770652D+02-0.5192213576726D+02 +-0.5192119252189D+02-0.5192023783287D+02-0.5191927156096D+02-0.5191829356524D+02 +-0.5191730370307D+02-0.5191630183005D+02-0.5191528780001D+02-0.5191426146503D+02 +-0.5191322267532D+02-0.5191217127930D+02-0.5191110712354D+02-0.5191003005272D+02 +-0.5190893990959D+02-0.5190783653503D+02-0.5190671976795D+02-0.5190558944528D+02 +-0.5190444540195D+02-0.5190328747089D+02-0.5190211548297D+02-0.5190092926700D+02 +-0.5189972864968D+02-0.5189851345560D+02-0.5189728350719D+02-0.5189603862472D+02 +-0.5189477862625D+02-0.5189350332759D+02-0.5189221254235D+02-0.5189090608179D+02 +-0.5188958375491D+02-0.5188824536834D+02-0.5188689072635D+02-0.5188551963080D+02 +-0.5188413188114D+02-0.5188272727435D+02-0.5188130560492D+02-0.5187986666482D+02 +-0.5187841024347D+02-0.5187693612772D+02-0.5187544410178D+02-0.5187393394724D+02 +-0.5187240544300D+02-0.5187085836524D+02-0.5186929248740D+02-0.5186770758014D+02 +-0.5186610341132D+02-0.5186447974591D+02-0.5186283634606D+02-0.5186117297093D+02 +-0.5185948937678D+02-0.5185778531685D+02-0.5185606054135D+02-0.5185431479744D+02 +-0.5185254782916D+02-0.5185075937741D+02-0.5184894917991D+02-0.5184711697117D+02 +-0.5184526248242D+02-0.5184338544160D+02-0.5184148557330D+02-0.5183956259875D+02 +-0.5183761623572D+02-0.5183564619854D+02-0.5183365219802D+02-0.5183163394142D+02 +-0.5182959113240D+02-0.5182752347098D+02-0.5182543065350D+02-0.5182331237255D+02 +-0.5182116831697D+02-0.5181899817174D+02-0.5181680161800D+02-0.5181457833297D+02 +-0.5181232798987D+02-0.5181005025795D+02-0.5180774480235D+02-0.5180541128413D+02 +-0.5180304936016D+02-0.5180065868310D+02-0.5179823890134D+02-0.5179578965895D+02 +-0.5179331059564D+02-0.5179080134665D+02-0.5178826154277D+02-0.5178569081025D+02 +-0.5178308877073D+02-0.5178045504121D+02-0.5177778923399D+02-0.5177509095659D+02 +-0.5177235981171D+02-0.5176959539717D+02-0.5176679730585D+02-0.5176396512563D+02 +-0.5176109843930D+02-0.5175819682457D+02-0.5175525985390D+02-0.5175228709457D+02 +-0.5174927810849D+02-0.5174623245221D+02-0.5174314967682D+02-0.5174002932792D+02 +-0.5173687094551D+02-0.5173367406395D+02-0.5173043821187D+02-0.5172716291215D+02 +-0.5172384768177D+02-0.5172049203182D+02-0.5171709546736D+02-0.5171365748739D+02 +-0.5171017758479D+02-0.5170665524617D+02-0.5170308995189D+02-0.5169948117592D+02 +-0.5169582838578D+02-0.5169213104249D+02-0.5168838860043D+02-0.5168460050732D+02 +-0.5168076620412D+02-0.5167688512494D+02-0.5167295669696D+02-0.5166898034036D+02 +-0.5166495546822D+02-0.5166088148646D+02-0.5165675779371D+02-0.5165258378128D+02 +-0.5164835883303D+02-0.5164408232529D+02-0.5163975362681D+02-0.5163537209858D+02 +-0.5163093709386D+02-0.5162644795799D+02-0.5162190402831D+02-0.5161730463415D+02 +-0.5161264909661D+02-0.5160793672858D+02-0.5160316683457D+02-0.5159833871062D+02 +-0.5159345164422D+02-0.5158850491424D+02-0.5158349779076D+02-0.5157842953502D+02 +-0.5157329939929D+02-0.5156810662682D+02-0.5156285045165D+02-0.5155753009857D+02 +-0.5155214478300D+02-0.5154669371088D+02-0.5154117607855D+02-0.5153559107266D+02 +-0.5152993787006D+02-0.5152421563767D+02-0.5151842353238D+02-0.5151256070096D+02 +-0.5150662627991D+02-0.5150061939535D+02-0.5149453916296D+02-0.5148838468777D+02 +-0.5148215506412D+02-0.5147584937554D+02-0.5146946669454D+02-0.5146300608264D+02 +-0.5145646659012D+02-0.5144984725596D+02-0.5144314710771D+02-0.5143636516137D+02 +-0.5142950042123D+02-0.5142255187982D+02-0.5141551851771D+02-0.5140839930344D+02 +-0.5140119319335D+02-0.5139389913149D+02-0.5138651604948D+02-0.5137904286634D+02 +-0.5137147848843D+02-0.5136382180931D+02-0.5135607170955D+02-0.5134822705665D+02 +-0.5134028670491D+02-0.5133224949527D+02-0.5132411425521D+02-0.5131587979859D+02 +-0.5130754492555D+02-0.5129910842232D+02-0.5129056906116D+02-0.5128192560017D+02 +-0.5127317678315D+02-0.5126432133956D+02-0.5125535798425D+02-0.5124628541740D+02 +-0.5123710232443D+02-0.5122780737574D+02-0.5121839922671D+02-0.5120887651745D+02 +-0.5119923787276D+02-0.5118948190193D+02-0.5117960719865D+02-0.5116961234085D+02 +-0.5115949589056D+02-0.5114925639380D+02-0.5113889238044D+02-0.5112840236408D+02 +-0.5111778484188D+02-0.5110703829447D+02-0.5109616118579D+02-0.5108515196301D+02 +-0.5107400905631D+02-0.5106273087889D+02-0.5105131582667D+02-0.5103976227836D+02 +-0.5102806859514D+02-0.5101623312071D+02-0.5100425418105D+02-0.5099213008436D+02 +-0.5097985912091D+02-0.5096743956297D+02-0.5095486966464D+02-0.5094214766176D+02 +-0.5092927177183D+02-0.5091624019384D+02-0.5090305110822D+02-0.5088970267672D+02 +-0.5087619304230D+02-0.5086252032900D+02-0.5084868264193D+02-0.5083467806710D+02 +-0.5082050467136D+02-0.5080616050232D+02-0.5079164358822D+02-0.5077695193792D+02 +-0.5076208354076D+02-0.5074703636655D+02-0.5073180836542D+02-0.5071639746782D+02 +-0.5070080158445D+02-0.5068501860613D+02-0.5066904640389D+02-0.5065288282874D+02 +-0.5063652571181D+02-0.5061997286414D+02-0.5060322207678D+02-0.5058627112067D+02 +-0.5056911774669D+02-0.5055175968555D+02-0.5053419464788D+02-0.5051642032411D+02 +-0.5049843438458D+02-0.5048023447945D+02-0.5046181823877D+02-0.5044318327247D+02 +-0.5042432717038D+02-0.5040524750226D+02-0.5038594181787D+02-0.5036640764694D+02 +-0.5034664249930D+02-0.5032664386488D+02-0.5030640921379D+02-0.5028593599640D+02 +-0.5026522164341D+02-0.5024426356594D+02-0.5022305915564D+02-0.5020160578474D+02 +-0.5017990080623D+02-0.5015794155393D+02-0.5013572534263D+02-0.5011324946826D+02 +-0.5009051120796D+02-0.5006750782030D+02-0.5004423654542D+02-0.5002069460521D+02 +-0.4999687920344D+02-0.4997278752603D+02-0.4994841674120D+02-0.4992376399966D+02 +-0.4989882643488D+02-0.4987360116327D+02-0.4984808528443D+02-0.4982227588141D+02 +-0.4979617002094D+02-0.4976976475371D+02-0.4974305711462D+02-0.4971604412309D+02 +-0.4968872278335D+02-0.4966109008469D+02-0.4963314300185D+02-0.4960487849528D+02 +-0.4957629351145D+02-0.4954738498327D+02-0.4951814983035D+02-0.4948858495939D+02 +-0.4945868726453D+02-0.4942845362775D+02-0.4939788091919D+02-0.4936696599757D+02 +-0.4933570571061D+02-0.4930409689534D+02-0.4927213637859D+02-0.4923982097740D+02 +-0.4920714749935D+02-0.4917411274309D+02-0.4914071349870D+02-0.4910694654815D+02 +-0.4907280866573D+02-0.4903829661848D+02-0.4900340716666D+02-0.4896813706420D+02 +-0.4893248305909D+02-0.4889644189392D+02-0.4886001030623D+02-0.4882318502909D+02 +-0.4878596279141D+02-0.4874834031849D+02-0.4871031433244D+02-0.4867188155262D+02 +-0.4863303869609D+02-0.4859378247804D+02-0.4855410961222D+02-0.4851401681140D+02 +-0.4847350078774D+02-0.4843255825325D+02-0.4839118592018D+02-0.4834938050138D+02 +-0.4830713871075D+02-0.4826445726356D+02-0.4822133287682D+02-0.4817776226967D+02 +-0.4813374216365D+02-0.4808926928306D+02-0.4804434035526D+02-0.4799895211091D+02 +-0.4795310128431D+02-0.4790678461358D+02-0.4785999884093D+02-0.4781274071282D+02 +-0.4776500698020D+02-0.4771679439861D+02-0.4766809972836D+02-0.4761891973461D+02 +-0.4756925118748D+02-0.4751909086208D+02-0.4746843553857D+02-0.4741728200213D+02 +-0.4736562704295D+02-0.4731346745620D+02-0.4726080004188D+02-0.4720762160479D+02 +-0.4715392895431D+02-0.4709971890425D+02-0.4704498827268D+02-0.4698973388163D+02 +-0.4693395255690D+02-0.4687764112767D+02-0.4682079642628D+02-0.4676341528777D+02 +-0.4670549454962D+02-0.4664703105122D+02-0.4658802163351D+02-0.4652846313853D+02 +-0.4646835240891D+02-0.4640768628735D+02-0.4634646161617D+02-0.4628467523671D+02 +-0.4622232398885D+02-0.4615940471037D+02-0.4609591423645D+02-0.4603184939910D+02 +-0.4596720702657D+02-0.4590198394276D+02-0.4583617696675D+02-0.4576978291218D+02 +-0.4570279858676D+02-0.4563522079176D+02-0.4556704632159D+02-0.4549827196328D+02 +-0.4542889449617D+02-0.4535891069156D+02-0.4528831731237D+02-0.4521711111299D+02 +-0.4514528883912D+02-0.4507284722768D+02-0.4499978300686D+02-0.4492609289624D+02 +-0.4485177360700D+02-0.4477682184233D+02-0.4470123429783D+02-0.4462500766219D+02 +-0.4454813861790D+02-0.4447062384219D+02-0.4439246000814D+02-0.4431364378589D+02 +-0.4423417184413D+02-0.4415404085174D+02-0.4407324747964D+02-0.4399178840285D+02 +-0.4390966030283D+02-0.4382685986996D+02-0.4374338380636D+02-0.4365922882888D+02 +-0.4357439167239D+02-0.4348886909331D+02-0.4340265787340D+02-0.4331575482384D+02 +-0.4322815678953D+02-0.4313986065369D+02-0.4305086334268D+02-0.4296116183110D+02 +-0.4287075314713D+02-0.4277963437808D+02-0.4268780267613D+02-0.4259525526436D+02 +-0.4250198944278D+02-0.4240800259471D+02-0.4231329219311D+02-0.4221785580702D+02 +-0.4212169110814D+02-0.4202479587724D+02-0.4192716801066D+02-0.4182880552657D+02 +-0.4172970657123D+02-0.4162986942478D+02-0.4152929250699D+02-0.4142797438248D+02 +-0.4132591376546D+02-0.4122310952415D+02-0.4111956068435D+02-0.4101526643252D+02 +-0.4091022611799D+02-0.4080443925436D+02-0.4069790551997D+02-0.4059062475744D+02 +-0.4048259697200D+02-0.4037382232884D+02-0.4026430114924D+02-0.4015403390548D+02 +-0.4004302121449D+02-0.3993126383031D+02-0.3981876263529D+02-0.3970551863000D+02 +-0.3959153292214D+02-0.3947680671418D+02-0.3936134129010D+02-0.3924513800125D+02 +-0.3912819825140D+02-0.3901052348125D+02-0.3889211515259D+02-0.3877297473220D+02 +-0.3865310367583D+02-0.3853250341248D+02-0.3841117532917D+02-0.3828912075654D+02 +-0.3816634095549D+02-0.3804283710513D+02-0.3791861029232D+02-0.3779366150300D+02 +-0.3766799161555D+02-0.3754160139636D+02-0.3741449149782D+02-0.3728666245883D+02 +-0.3715811470790D+02-0.3702884856900D+02-0.3689886427010D+02-0.3676816195438D+02 +-0.3663674169408D+02-0.3650460350690D+02-0.3637174737474D+02-0.3623817326473D+02 +-0.3610388115218D+02-0.3596887104531D+02-0.3583314301154D+02-0.3569669720495D+02 +-0.3555953389464D+02-0.3542165349386D+02-0.3528305658922D+02-0.3514374397011D+02 +-0.3500371665774D+02-0.3486297593358D+02-0.3472152336690D+02-0.3457936084122D+02 +-0.3443649057928D+02-0.3429291516643D+02-0.3414863757211D+02-0.3400366116934D+02 +-0.3385798975190D+02-0.3371162754922D+02-0.3356457923876D+02-0.3341684995570D+02 +-0.3326844530007D+02-0.3311937134098D+02-0.3296963461820D+02-0.3281924214079D+02 +-0.3266820138293D+02-0.3251652027694D+02-0.3236420720350D+02-0.3221127097903D+02 +-0.3205772084042D+02-0.3190356642710D+02-0.3174881776049D+02-0.3159348522098D+02 +-0.3143757952257D+02-0.3128111168511D+02-0.3112409300454D+02-0.3096653502093D+02 +-0.3080844948479D+02-0.3064984832153D+02-0.3049074359439D+02-0.3033114746593D+02 +-0.3017107215833D+02-0.3001052991254D+02-0.2984953294675D+02-0.2968809341400D+02 +-0.2952622335948D+02-0.2936393467762D+02-0.2920123906907D+02-0.2903814799805D+02 +-0.2887467265011D+02-0.2871082389066D+02-0.2854661222446D+02-0.2838204775647D+02 +-0.2821714015409D+02-0.2805189861135D+02-0.2788633181514D+02-0.2772044791378D+02 +-0.2755425448842D+02-0.2738775852723D+02-0.2722096640307D+02-0.2705388385454D+02 +-0.2688651597109D+02-0.2671886718221D+02-0.2655094125117D+02-0.2638274127348D+02 +-0.2621426968047D+02-0.2604552824823D+02-0.2587651811214D+02-0.2570723978730D+02 +-0.2553769319514D+02-0.2536787769632D+02-0.2519779213021D+02-0.2502743486110D+02 +-0.2485680383129D+02-0.2468589662112D+02-0.2451471051601D+02-0.2434324258050D+02 +-0.2417148973924D+02-0.2399944886481D+02-0.2382711687194D+02-0.2365449081810D+02 +-0.2348156800981D+02-0.2330834611404D+02-0.2313482327422D+02-0.2296099822964D+02 +-0.2278687043744D+02-0.2261244019567D+02-0.2243770876615D+02-0.2226267849517D+02 +-0.2208735293014D+02-0.2191173693001D+02-0.2173583676674D+02-0.2155966021537D+02 +-0.2138321662948D+02-0.2120651699903D+02-0.2102957398727D+02-0.2085240194340D+02 +-0.2067501688787D+02-0.2049743646710D+02-0.2031967987514D+02-0.2014176773999D+02 +-0.1996372197331D+02-0.1978556558301D+02-0.1960732244950D+02-0.1942901706755D+02 +-0.1925067425750D+02-0.1907231885074D+02-0.1889397535633D+02-0.1871566761696D+02 +-0.1853741846374D+02-0.1835924938052D+02-0.1818118018868D+02-0.1800322876380D+02 +-0.1782541079491D+02-0.1764773959582D+02-0.1747022597686D+02-0.1729287818264D+02 +-0.1711570189939D+02-0.1693870033244D+02-0.1676187435187D+02-0.1658522270158D+02 +-0.1640874226459D+02-0.1623242837596D+02-0.1605627517269D+02-0.1588027596970D+02 +-0.1570442365062D+02-0.1552871106216D+02-0.1535313140208D+02-0.1517767859145D+02 +-0.1500234762341D+02-0.1482713488228D+02-0.1465203842815D+02-0.1447705824363D+02 +-0.1430219644106D+02-0.1412745742929D+02-0.1395284804054D+02-0.1377837761854D+02 +-0.1360405806987D+02-0.1342990388081D+02-0.1325593210249D+02-0.1308216230731D+02 +-0.1290861651951D+02-0.1273531912305D+02-0.1256229674959D+02-0.1238957814960D+02 +-0.1221719404907D+02-0.1204517699438D+02-0.1187356118783D+02-0.1170238231558D+02 +-0.1153167737042D+02-0.1136148447069D+02-0.1119184267735D+02-0.1102279181034D+02 +-0.1085437226576D+02-0.1068662483495D+02-0.1051959052659D+02-0.1035331039265D+02 +-0.1018782535928D+02-0.1002317606321D+02-0.9859402694342D+01-0.9696544845323D+01 +-0.9534641368482D+01-0.9373730240659D+01-0.9213848436346D+01-0.9055031809511D+01 +-0.8897314984394D+01-0.8740731255549D+01-0.8585312497336D+01-0.8431089083029D+01 +-0.8278089813661D+01-0.8126341856676D+01-0.7975870694439D+01-0.7826700082584D+01 +-0.7678852018171D+01-0.7532346717566D+01-0.7387202603932D+01-0.7243436304187D+01 +-0.7101062655233D+01-0.6960094719270D+01-0.6820543807924D+01-0.6682419514939D+01 +-0.6545729757123D+01-0.6410480823229D+01-0.6276677430423D+01-0.6144322787958D+01 +-0.6013418667669D+01-0.5883965480867D+01-0.5755962361193D+01-0.5629407252975D+01 +-0.5504297004604D+01-0.5380627466436D+01-0.5258393592702D+01-0.5137589546863D+01 +-0.5018208809882D+01-0.4900244290793D+01-0.4783688438971D+01-0.4668533357470D+01 +-0.4554770916754D+01-0.4442392868124D+01-0.4331390956131D+01-0.4221757029192D+01 +-0.4113483147635D+01-0.4006561688322D+01-0.3900985445011D+01-0.3796747723533D+01 +-0.3693842430876D+01-0.3592264157211D+01-0.3492008249906D+01-0.3393070878541D+01 +-0.3295449089976D+01-0.3199140852531D+01-0.3104145088414D+01-0.3010461693592D+01 +-0.2918091544431D+01-0.2827036490592D+01-0.2737299333835D+01-0.2648883792669D+01 +-0.2561794453010D+01-0.2476036705393D+01-0.2391616669610D+01-0.2308541108029D+01 +-0.2226817329318D+01-0.2146453084634D+01-0.2067456458802D+01-0.1989835759339D+01 +-0.1913599406514D+01-0.1838755827812D+01-0.1765313360391D+01-0.1693280165020D+01 +-0.1622664154978D+01-0.1553472943063D+01-0.1485713809518D+01-0.1419393693186D+01 +-0.1354519207570D+01-0.1291096682842D+01-0.1229132234097D+01-0.1168631855453D+01 +-0.1109601538882D+01-0.1052047416050D+01-0.9959759208814D+00-0.9413939701484D+00 +-0.8883091590719D+00-0.8367299687430D+00-0.7866659821253D+00-0.7381281054637D+00 +-0.6911287920896D+00-0.6456822658698D+00-0.6018047418553D+00-0.5595146420441D+00 +-0.5188328045500D+00-0.4797826848498D+00-0.4423905481512D+00-0.4066856522662D+00 +-0.3727004206897D+00-0.3404706058472D+00-0.3100354427093D+00-0.2814377931599D+00 +-0.2547240189175D+00 + 0.0000000000000D+00 + 1012 0.2770741520224D+01 + 0.2150927949039D-04 0.2202124536575D-04 0.2254539478646D-04 0.2308201760180D-04 + 0.2363141055333D-04 0.2419387743865D-04 0.2476972927906D-04 0.2535928449121D-04 + 0.2596286906285D-04 0.2658081673262D-04 0.2721346917432D-04 0.2786117618535D-04 + 0.2852429587973D-04 0.2920319488569D-04 0.2989824854795D-04 0.3060984113473D-04 + 0.3133836604977D-04 0.3208422604934D-04 0.3284783346437D-04 0.3362961042788D-04 + 0.3442998910781D-04 0.3524941194536D-04 0.3608833189898D-04 0.3694721269416D-04 + 0.3782652907911D-04 0.3872676708658D-04 0.3964842430179D-04 0.4059201013679D-04 + 0.4155804611131D-04 0.4254706614023D-04 0.4355961682789D-04 0.4459625776943D-04 + 0.4565756185917D-04 0.4674411560639D-04 0.4785651945856D-04 0.4899538813222D-04 + 0.5016135095172D-04 0.5135505219602D-04 0.5257715145361D-04 0.5382832398596D-04 + 0.5510926109951D-04 0.5642067052648D-04 0.5776327681476D-04 0.5913782172693D-04 + 0.6054506464885D-04 0.6198578300785D-04 0.6346077270088D-04 0.6497084853274D-04 + 0.6651684466474D-04 0.6809961507398D-04 0.6972003402351D-04 0.7137899654355D-04 + 0.7307741892426D-04 0.7481623921999D-04 0.7659641776564D-04 0.7841893770513D-04 + 0.8028480553242D-04 0.8219505164534D-04 0.8415073091254D-04 0.8615292325379D-04 + 0.8820273423416D-04 0.9030129567206D-04 0.9244976626185D-04 0.9464933221109D-04 + 0.9690120789284D-04 0.9920663651351D-04 0.1015668907964D-03 0.1039832736813D-03 + 0.1064571190411D-03 0.1089897924148D-03 0.1115826917580D-03 0.1142372482113D-03 + 0.1169549268870D-03 0.1197372276738D-03 0.1225856860613D-03 0.1255018739831D-03 + 0.1284874006808D-03 0.1315439135877D-03 0.1346730992336D-03 0.1378766841712D-03 + 0.1411564359238D-03 0.1445141639563D-03 0.1479517206680D-03 0.1514710024102D-03 + 0.1550739505263D-03 0.1587625524179D-03 0.1625388426349D-03 0.1664049039925D-03 + 0.1703628687133D-03 0.1744149195974D-03 0.1785632912194D-03 0.1828102711544D-03 + 0.1871582012321D-03 0.1916094788209D-03 0.1961665581427D-03 0.2008319516176D-03 + 0.2056082312418D-03 0.2104980299966D-03 0.2155040432913D-03 0.2206290304405D-03 + 0.2258758161753D-03 0.2312472921908D-03 0.2367464187300D-03 0.2423762262044D-03 + 0.2481398168542D-03 0.2540403664457D-03 0.2600811260106D-03 0.2662654236245D-03 + 0.2725966662290D-03 0.2790783414953D-03 0.2857140197324D-03 0.2925073558401D-03 + 0.2994620913080D-03 0.3065820562611D-03 0.3138711715547D-03 0.3213334509168D-03 + 0.3289730031429D-03 0.3367940343406D-03 0.3448008502286D-03 0.3529978584881D-03 + 0.3613895711713D-03 0.3699806071650D-03 0.3787756947128D-03 0.3877796739964D-03 + 0.3969974997780D-03 0.4064342441040D-03 0.4160950990725D-03 0.4259853796663D-03 + 0.4361105266519D-03 0.4464761095462D-03 0.4570878296540D-03 0.4679515231757D-03 + 0.4790731643881D-03 0.4904588689006D-03 0.5021148969868D-03 0.5140476569946D-03 + 0.5262637088364D-03 0.5387697675611D-03 0.5515727070097D-03 0.5646795635561D-03 + 0.5780975399370D-03 0.5918340091694D-03 0.6058965185620D-03 0.6202927938188D-03 + 0.6350307432396D-03 0.6501184620192D-03 0.6655642366457D-03 0.6813765494038D-03 + 0.6975640829812D-03 0.7141357251847D-03 0.7311005737650D-03 0.7484679413557D-03 + 0.7662473605260D-03 0.7844485889531D-03 0.8030816147148D-03 0.8221566617048D-03 + 0.8416841951763D-03 0.8616749274129D-03 0.8821398235337D-03 0.9030901074324D-03 + 0.9245372678559D-03 0.9464930646236D-03 0.9689695349932D-03 0.9919790001731D-03 + 0.1015534071988D-02 0.1039647659698D-02 0.1064332976981D-02 0.1089603549068D-02 + 0.1115473220057D-02 0.1141956160389D-02 0.1169066874495D-02 0.1196820208634D-02 + 0.1225231358897D-02 0.1254315879409D-02 0.1284089690715D-02 0.1314569088366D-02 + 0.1345770751696D-02 0.1377711752814D-02 0.1410409565795D-02 0.1443882076088D-02 + 0.1478147590144D-02 0.1513224845264D-02 0.1549133019674D-02 0.1585891742841D-02 + 0.1623521106018D-02 0.1662041673040D-02 0.1701474491365D-02 0.1741841103378D-02 + 0.1783163557945D-02 0.1825464422244D-02 0.1868766793867D-02 0.1913094313196D-02 + 0.1958471176071D-02 0.2004922146751D-02 0.2052472571166D-02 0.2101148390486D-02 + 0.2150976154989D-02 0.2201983038264D-02 0.2254196851731D-02 0.2307646059493D-02 + 0.2362359793542D-02 0.2418367869301D-02 0.2475700801533D-02 0.2534389820612D-02 + 0.2594466889165D-02 0.2655964719104D-02 0.2718916789042D-02 0.2783357362106D-02 + 0.2849321504172D-02 0.2916845102501D-02 0.2985964884814D-02 0.3056718438800D-02 + 0.3129144232066D-02 0.3203281632551D-02 0.3279170929405D-02 0.3356853354336D-02 + 0.3436371103460D-02 0.3517767359634D-02 0.3601086315312D-02 0.3686373195913D-02 + 0.3773674283724D-02 0.3863036942351D-02 0.3954509641719D-02 0.4048141983652D-02 + 0.4143984728019D-02 0.4242089819491D-02 0.4342510414893D-02 0.4445300911185D-02 + 0.4550516974067D-02 0.4658215567249D-02 0.4768454982366D-02 0.4881294869584D-02 + 0.4996796268890D-02 0.5115021642093D-02 0.5236034905549D-02 0.5359901463622D-02 + 0.5486688242898D-02 0.5616463727181D-02 0.5749297993262D-02 0.5885262747508D-02 + 0.6024431363262D-02 0.6166878919093D-02 0.6312682237899D-02 0.6461919926891D-02 + 0.6614672418475D-02 0.6771022012045D-02 0.6931052916716D-02 0.7094851295016D-02 + 0.7262505307545D-02 0.7434105158642D-02 0.7609743143066D-02 0.7789513693721D-02 + 0.7973513430440D-02 0.8161841209859D-02 0.8354598176397D-02 0.8551887814376D-02 + 0.8753816001287D-02 0.8960491062250D-02 0.9172023825667D-02 0.9388527680122D-02 + 0.9610118632529D-02 0.9836915367568D-02 0.1006903930843D-01 0.1030661467892D-01 + 0.1054976856688D-01 0.1079863098909D-01 0.1105333495749D-01 0.1131401654696D-01 + 0.1158081496451D-01 0.1185387262003D-01 0.1213333519856D-01 0.1241935173418D-01 + 0.1271207468545D-01 0.1301166001257D-01 0.1331826725616D-01 0.1363205961778D-01 + 0.1395320404221D-01 0.1428187130150D-01 0.1461823608081D-01 0.1496247706623D-01 + 0.1531477703430D-01 0.1567532294367D-01 0.1604430602860D-01 0.1642192189452D-01 + 0.1680837061563D-01 0.1720385683464D-01 0.1760858986456D-01 0.1802278379280D-01 + 0.1844665758734D-01 0.1888043520531D-01 0.1932434570378D-01 0.1977862335297D-01 + 0.2024350775185D-01 0.2071924394615D-01 0.2120608254895D-01 0.2170427986376D-01 + 0.2221409801021D-01 0.2273580505238D-01 0.2326967512987D-01 0.2381598859160D-01 + 0.2437503213237D-01 0.2494709893234D-01 0.2553248879941D-01 0.2613150831454D-01 + 0.2674447098014D-01 0.2737169737147D-01 0.2801351529124D-01 0.2867025992742D-01 + 0.2934227401421D-01 0.3002990799646D-01 0.3073352019732D-01 0.3145347698951D-01 + 0.3219015296988D-01 0.3294393113773D-01 0.3371520307664D-01 0.3450436914006D-01 + 0.3531183864059D-01 0.3613803004319D-01 0.3698337116219D-01 0.3784829936233D-01 + 0.3873326176383D-01 0.3963871545150D-01 0.4056512768813D-01 0.4151297613205D-01 + 0.4248274905905D-01 0.4347494558865D-01 0.4449007591493D-01 0.4552866154180D-01 + 0.4659123552298D-01 0.4767834270657D-01 0.4879053998454D-01 0.4992839654695D-01 + 0.5109249414114D-01 0.5228342733595D-01 0.5350180379101D-01 0.5474824453121D-01 + 0.5602338422639D-01 0.5732787147645D-01 0.5866236910176D-01 0.6002755443915D-01 + 0.6142411964345D-01 0.6285277199472D-01 0.6431423421119D-01 0.6580924476805D-01 + 0.6733855822219D-01 0.6890294554290D-01 0.7050319444864D-01 0.7214010975008D-01 + 0.7381451369925D-01 0.7552724634520D-01 0.7727916589591D-01 0.7907114908690D-01 + 0.8090409155624D-01 0.8277890822643D-01 0.8469653369292D-01 0.8665792261951D-01 + 0.8866405014071D-01 0.9071591227111D-01 0.9281452632182D-01 0.9496093132410D-01 + 0.9715618846031D-01 0.9940138150208D-01 0.1016976172560D+00 0.1040460260169D+00 + 0.1064477620282D+00 0.1089040039508D+00 0.1114159553388D+00 0.1139848451236D+00 + 0.1166119281054D+00 0.1192984854532D+00 0.1220458252122D+00 0.1248552828197D+00 + 0.1277282216288D+00 0.1306660334408D+00 0.1336701390448D+00 0.1367419887670D+00 + 0.1398830630269D+00 0.1430948729031D+00 0.1463789607067D+00 0.1497369005636D+00 + 0.1531702990050D+00 0.1566807955666D+00 0.1602700633964D+00 0.1639398098711D+00 + 0.1676917772207D+00 0.1715277431623D+00 0.1754495215419D+00 0.1794589629856D+00 + 0.1835579555582D+00 0.1877484254317D+00 0.1920323375616D+00 0.1964116963718D+00 + 0.2008885464482D+00 0.2054649732406D+00 0.2101431037732D+00 0.2149251073635D+00 + 0.2198131963488D+00 0.2248096268222D+00 0.2299166993754D+00 0.2351367598503D+00 + 0.2404722000984D+00 0.2459254587480D+00 0.2514990219789D+00 0.2571954243047D+00 + 0.2630172493626D+00 0.2689671307106D+00 0.2750477526311D+00 0.2812618509418D+00 + 0.2876122138134D+00 0.2941016825931D+00 0.3007331526352D+00 0.3075095741362D+00 + 0.3144339529771D+00 0.3215093515700D+00 0.3287388897102D+00 0.3361257454325D+00 + 0.3436731558729D+00 0.3513844181328D+00 0.3592628901485D+00 0.3673119915621D+00 + 0.3755352045968D+00 0.3839360749336D+00 0.3925182125899D+00 0.4012852927993D+00 + 0.4102410568930D+00 0.4193893131804D+00 0.4287339378299D+00 0.4382788757486D+00 + 0.4480281414604D+00 0.4579858199819D+00 0.4681560676951D+00 0.4785431132164D+00 + 0.4891512582614D+00 0.4999848785043D+00 0.5110484244305D+00 0.5223464221834D+00 + 0.5338834744021D+00 0.5456642610510D+00 0.5576935402392D+00 0.5699761490289D+00 + 0.5825170042325D+00 0.5953211031952D+00 0.6083935245653D+00 0.6217394290472D+00 + 0.6353640601390D+00 0.6492727448516D+00 0.6634708944082D+00 0.6779640049238D+00 + 0.6927576580616D+00 0.7078575216668D+00 0.7232693503742D+00 0.7389989861895D+00 + 0.7550523590420D+00 0.7714354873073D+00 0.7881544782973D+00 0.8052155287175D+00 + 0.8226249250876D+00 0.8403890441249D+00 0.8585143530879D+00 0.8770074100784D+00 + 0.8958748642992D+00 0.9151234562658D+00 0.9347600179702D+00 0.9547914729931D+00 + 0.9752248365635D+00 0.9960672155622D+00 0.1017325808468D+01 0.1039007905241D+01 + 0.1061120887144D+01 0.1083672226499D+01 0.1106669486370D+01 0.1130120320176D+01 + 0.1154032471231D+01 0.1178413772204D+01 0.1203272144493D+01 0.1228615597523D+01 + 0.1254452227950D+01 0.1280790218774D+01 0.1307637838359D+01 0.1335003439353D+01 + 0.1362895457506D+01 0.1391322410385D+01 0.1420292895972D+01 0.1449815591159D+01 + 0.1479899250115D+01 0.1510552702537D+01 0.1541784851777D+01 0.1573604672833D+01 + 0.1606021210210D+01 0.1639043575644D+01 0.1672680945677D+01 0.1706942559091D+01 + 0.1741837714186D+01 0.1777375765901D+01 0.1813566122779D+01 0.1850418243757D+01 + 0.1887941634794D+01 0.1926145845317D+01 0.1965040464488D+01 0.2004635117287D+01 + 0.2044939460400D+01 0.2085963177919D+01 0.2127715976829D+01 0.2170207582300D+01 + 0.2213447732763D+01 0.2257446174769D+01 0.2302212657626D+01 0.2347756927812D+01 + 0.2394088723154D+01 0.2441217766767D+01 0.2489153760756D+01 0.2537906379665D+01 + 0.2587485263675D+01 0.2637900011547D+01 0.2689160173295D+01 0.2741275242598D+01 + 0.2794254648931D+01 0.2848107749430D+01 0.2902843820459D+01 0.2958472048904D+01 + 0.3015001523163D+01 0.3072441223848D+01 0.3130800014182D+01 0.3190086630094D+01 + 0.3250309670002D+01 0.3311477584285D+01 0.3373598664440D+01 0.3436681031917D+01 + 0.3500732626634D+01 0.3565761195166D+01 0.3631774278604D+01 0.3698779200090D+01 + 0.3766783052007D+01 0.3835792682854D+01 0.3905814683769D+01 0.3976855374728D+01 + 0.4048920790399D+01 0.4122016665671D+01 0.4196148420834D+01 0.4271321146438D+01 + 0.4347539587809D+01 0.4424808129241D+01 0.4503130777854D+01 0.4582511147131D+01 + 0.4662952440136D+01 0.4744457432406D+01 0.4827028454547D+01 0.4910667374509D+01 + 0.4995375579573D+01 0.5081153958042D+01 0.5168002880655D+01 0.5255922181721D+01 + 0.5344911139992D+01 0.5434968459290D+01 0.5526092248881D+01 0.5618280003639D+01 + 0.5711528583982D+01 0.5805834195616D+01 0.5901192369103D+01 0.5997597939257D+01 + 0.6095045024395D+01 0.6193527005472D+01 0.6293036505099D+01 0.6393565366487D+01 + 0.6495104632331D+01 0.6597644523660D+01 0.6701174418681D+01 0.6805682831645D+01 + 0.6911157391760D+01 0.7017584822191D+01 0.7124950919171D+01 0.7233240531258D+01 + 0.7342437538781D+01 0.7452524833500D+01 0.7563484298530D+01 0.7675296788562D+01 + 0.7787942110430D+01 0.7901399004058D+01 0.8015645123842D+01 0.8130657020509D+01 + 0.8246410123503D+01 0.8362878723950D+01 0.8480035958250D+01 0.8597853792358D+01 + 0.8716303006799D+01 0.8835353182487D+01 0.8954972687391D+01 0.9075128664130D+01 + 0.9195787018538D+01 0.9316912409273D+01 0.9438468238543D+01 0.9560416644000D+01 + 0.9682718491880D+01 0.9805333371460D+01 0.9928219590896D+01 0.1005133417453D+02 + 0.1017463286171D+02 0.1029807010722D+02 0.1042159908344D+02 0.1054517168417D+02 + 0.1066873853037D+02 0.1079224897780D+02 0.1091565112659D+02 0.1103889183301D+02 + 0.1116191672323D+02 0.1128467020944D+02 0.1140709550823D+02 0.1152913466133D+02 + 0.1165072855885D+02 0.1177181696506D+02 0.1189233854680D+02 0.1201223090454D+02 + 0.1213143060625D+02 0.1224987322407D+02 0.1236749337400D+02 0.1248422475837D+02 + 0.1260000021157D+02 0.1271475174875D+02 0.1282841061773D+02 0.1294090735413D+02 + 0.1305217183979D+02 0.1316213336451D+02 0.1327072069111D+02 0.1337786212400D+02 + 0.1348348558110D+02 0.1358751866928D+02 0.1368988876325D+02 0.1379052308804D+02 + 0.1388934880491D+02 0.1398629310084D+02 0.1408128328150D+02 0.1417424686776D+02 + 0.1426511169568D+02 0.1435380601989D+02 0.1444025862047D+02 0.1452439891313D+02 + 0.1460615706273D+02 0.1468546410000D+02 0.1476225204147D+02 0.1483645401237D+02 + 0.1490800437259D+02 0.1497683884540D+02 0.1504289464893D+02 0.1510611063019D+02 + 0.1516642740155D+02 0.1522378747941D+02 0.1527813542502D+02 0.1532941798703D+02 + 0.1537758424592D+02 0.1542258575964D+02 0.1546437671057D+02 0.1550291405346D+02 + 0.1553815766392D+02 0.1557007048740D+02 0.1559861868825D+02 0.1562377179849D+02 + 0.1564550286611D+02 0.1566378860245D+02 0.1567860952827D+02 0.1568995011828D+02 + 0.1569779894358D+02 0.1570214881171D+02 0.1570299690387D+02 0.1570034490889D+02 + 0.1569419915342D+02 0.1568457072811D+02 0.1567147560898D+02 0.1565493477391D+02 + 0.1563497431333D+02 0.1561162553504D+02 0.1558492506233D+02 0.1555491492507D+02 + 0.1552164264320D+02 0.1548516130217D+02 0.1544552961962D+02 0.1540281200312D+02 + 0.1535707859803D+02 0.1530840532536D+02 0.1525687390884D+02 0.1520257189079D+02 + 0.1514559263632D+02 0.1508603532531D+02 0.1502400493172D+02 0.1495961218971D+02 + 0.1489297354623D+02 0.1482421109950D+02 0.1475345252306D+02 0.1468083097499D+02 + 0.1460648499184D+02 0.1453055836709D+02 0.1445320001360D+02 0.1437456381003D+02 + 0.1429480843075D+02 0.1421409715909D+02 0.1413259768392D+02 0.1405048187912D+02 + 0.1396792556614D+02 0.1388510825940D+02 0.1380221289467D+02 0.1371942554036D+02 + 0.1363693509198D+02 0.1355493294972D+02 0.1347361267958D+02 0.1339316965818D+02 + 0.1331380070165D+02 0.1323570367897D+02 0.1315907711016D+02 0.1308411975004D+02 + 0.1301103015787D+02 0.1294000625373D+02 0.1287124486230D+02 0.1280494124477D+02 + 0.1274128861984D+02 0.1268047767460D+02 0.1262269606643D+02 0.1256812791682D+02 + 0.1251695329838D+02 0.1246934771604D+02 0.1242548158392D+02 0.1238551969900D+02 + 0.1234962071295D+02 0.1231793660373D+02 0.1229061214824D+02 0.1226778439767D+02 + 0.1224958215706D+02 0.1223612547078D+02 0.1222752511553D+02 0.1222388210258D+02 + 0.1222528719100D+02 0.1223182041366D+02 0.1224355061775D+02 0.1226053502171D+02 + 0.1228281879023D+02 0.1231043462935D+02 0.1234340240339D+02 0.1238172877543D+02 + 0.1242540687338D+02 0.1247441598324D+02 0.1252872127141D+02 0.1258827353770D+02 + 0.1265300900087D+02 0.1272284911822D+02 0.1279770044081D+02 0.1287745450601D+02 + 0.1296198776857D+02 0.1305116157186D+02 0.1314482216032D+02 0.1324280073454D+02 + 0.1334491354991D+02 0.1345096205988D+02 0.1356073310471D+02 0.1367399914649D+02 + 0.1379051855093D+02 0.1391003591655D+02 0.1403228245150D+02 0.1415697639825D+02 + 0.1428382350615D+02 0.1441251755180D+02 0.1454274090682D+02 0.1467416515265D+02 + 0.1480645174180D+02 0.1493925270450D+02 0.1507221140012D+02 0.1520496331175D+02 + 0.1533713688305D+02 0.1546835439544D+02 0.1559823288411D+02 0.1572638509088D+02 + 0.1585242045188D+02 0.1597594611769D+02 0.1609656800349D+02 0.1621389186673D+02 + 0.1632752440935D+02 0.1643707440175D+02 0.1654215382521D+02 0.1664237902974D+02 + 0.1673737190368D+02 0.1682676105166D+02 0.1691018297723D+02 0.1698728326633D+02 + 0.1705771776761D+02 0.1712115376582D+02 0.1717727114395D+02 0.1722576353007D+02 + 0.1726633942470D+02 0.1729872330429D+02 0.1732265669667D+02 0.1733789922408D+02 + 0.1734422960952D+02 0.1734144664198D+02 0.1732937009656D+02 0.1730784160492D+02 + 0.1727672547225D+02 0.1723590943644D+02 0.1718530536559D+02 0.1712484989008D+02 + 0.1705450496536D+02 0.1697425836203D+02 0.1688412407975D+02 0.1678414268193D+02 + 0.1667438154808D+02 0.1655493504124D+02 0.1642592458792D+02 0.1628749866833D+02 + 0.1613983271513D+02 0.1598312891883D+02 0.1581761593876D+02 0.1564354851859D+02 + 0.1546120700566D+02 0.1527089677411D+02 0.1507294755170D+02 0.1486771265109D+02 + 0.1465556810624D+02 0.1443691171558D+02 0.1421216199343D+02 0.1398175703206D+02 + 0.1374615327696D+02 0.1350582421831D+02 0.1326125900230D+02 0.1301296096613D+02 + 0.1276144610103D+02 0.1250724144826D+02 0.1225088343315D+02 0.1199291614280D+02 + 0.1173388955369D+02 0.1147435771520D+02 0.1121487689618D+02 0.1095600370143D+02 + 0.1069829316549D+02 0.1044229683153D+02 0.1018856082317D+02 0.9937623917321D+01 + 0.9690015626445D+01 0.9446254298643D+01 0.9206845244038D+01 0.8972278896087D+01 + 0.8743029016360D+01 0.8519550951297D+01 0.8302279949355D+01 0.8091629546790D+01 + 0.7887990030116D+01 0.7691726983014D+01 0.7503179925129D+01 0.7322661049902D+01 + 0.7150454068046D+01 0.6986813162918D+01 0.6831962063451D+01 0.6686093239819D+01 + 0.6549367226364D+01 0.6421912075717D+01 0.6303822947394D+01 0.6195161833447D+01 + 0.6095957423078D+01 0.6006205107394D+01 0.5925867124779D+01 0.5854872846611D+01 + 0.5793119202371D+01 0.5740471242429D+01 0.5696762836121D+01 0.5661797502031D+01 + 0.5635349366701D+01 0.5617164247353D+01 0.5606960853570D+01 0.5604432102259D+01 + 0.5609246539649D+01 0.5621049863505D+01 0.5639466538232D+01 0.5664101495024D+01 + 0.5694541908766D+01 0.5730359042993D+01 0.5771110153784D+01 0.5816340443192D+01 + 0.5865585052475D+01 0.5918371085180D+01 0.5974219649957D+01 0.6032647912832D+01 + 0.6093171148637D+01 0.6155304781260D+01 0.6218566402475D+01 0.6282477759234D+01 + 0.6346566699475D+01 0.6410369066815D+01 0.6473430534781D+01 0.6535308371644D+01 + 0.6595573127395D+01 0.6653810234872D+01 0.6709621517670D+01 0.6762626598041D+01 + 0.6812464198680D+01 0.6858793332986D+01 0.6901294379138D+01 0.6939670034070D+01 + 0.6973646144233D+01 0.7002972410830D+01 0.7027422967990D+01 0.7046796833200D+01 + 0.7060918230061D+01 0.7069636784259D+01 0.7072827594374D+01 0.7070391179926D+01 + 0.7062253309715D+01 0.7048364714231D+01 0.7028700686483D+01 0.7003260576238D+01 + 0.6972067183121D+01 0.6935166054562D+01 0.6892624694966D+01 0.6844531692843D+01 + 0.6790995772965D+01 0.6732144780827D+01 0.6668124606899D+01 0.6599098058289D+01 + 0.6525243685473D+01 0.6446754571799D+01 0.6363837093418D+01 0.6276709657188D+01 + 0.6185601423998D+01 0.6090751024726D+01 0.5992405275866D+01 0.5890817901556D+01 + 0.5786248268476D+01 0.5678960139726D+01 0.5569220453475D+01 0.5457298131760D+01 + 0.5343462924443D+01 0.5227984292928D+01 0.5111130337809D+01 0.4993166774192D+01 + 0.4874355958030D+01 0.4754955966341D+01 0.4635219733799D+01 0.4515394247714D+01 + 0.4395719803061D+01 0.4276429318764D+01 0.4157747716089D+01 0.4039891359594D+01 + 0.3923067560758D+01 0.3807474144035D+01 0.3693299074769D+01 0.3580720148118D+01 + 0.3469904737816D+01 0.3361009603367D+01 0.3254180754011D+01 0.3149553367571D+01 + 0.3047251762116D+01 0.2947389418162D+01 0.2850069049006D+01 0.2755382716614D+01 + 0.2663411990420D+01 0.2574228146230D+01 0.2487892402405D+01 0.2404456190400D+01 + 0.2323961456713D+01 0.2246440993268D+01 0.2171918793250D+01 0.2100410429420D+01 + 0.2031923451965D+01 0.1966457802972D+01 0.1904006244666D+01 0.1844554798640D+01 + 0.1788083193345D+01 0.1734565317240D+01 0.1683969675070D+01 0.1636259844862D+01 + 0.1591394933364D+01 0.1549330027746D+01 0.1510016641546D+01 0.1473403152964D+01 + 0.1439435233770D+01 0.1408056267219D+01 0.1379207753531D+01 0.1352829701650D+01 + 0.1328861006133D+01 0.1307239808175D+01 0.1287903839946D+01 0.1270790751526D+01 + 0.1255838419882D+01 0.1242985239474D+01 0.1232170394175D+01 0.1223334110328D+01 + 0.1216417890857D+01 0.1211364730456D+01 0.1208119311934D+01 0.1206628183910D+01 + 0.1206839920052D+01 0.1208705260142D+01 0.1212177233248D+01 0.1217211263310D+01 + 0.1223765257423D+01 0.1231799677111D+01 0.1241277592815D+01 0.1252164721788D+01 + 0.1264429449524D+01 0.1278042834732D+01 0.1292978597814D+01 0.1309213092627D+01 + 0.1326725261233D+01 0.1345496571135D+01 0.1365510934358D+01 0.1386754607532D+01 + 0.1409215426363D+01 0.1433003097507D+01 0.1458223277591D+01 0.1484860699421D+01 + 0.1512902583279D+01 0.1542338542721D+01 0.1573160498496D+01 0.1605362600812D+01 + 0.1638941160170D+01 0.1673894586973D+01 0.1710223340083D+01 0.1747929884514D+01 + 7 1012 + 1 0 -1 -511.89150 + 2 0 -1 -58.80097 + 2 1 1 -50.61290 + 2 1 -2 -49.69692 + 3 0 -1 -5.52718 + 3 1 1 -3.14309 + 3 1 -2 -3.03034 + 0.2123373461549D-04 0.2173914995400D-04 0.2225659296114D-04 0.2278634977738D-04 + 0.2332871334728D-04 0.2388398358121D-04 0.2445246752083D-04 0.2503447950857D-04 + 0.2563034136106D-04 0.2624038254674D-04 0.2686494036763D-04 0.2750436014548D-04 + 0.2815899541226D-04 0.2882920810522D-04 0.2951536876657D-04 0.3021785674791D-04 + 0.3093706041946D-04 0.3167337738432D-04 0.3242721469777D-04 0.3319898909177D-04 + 0.3398912720483D-04 0.3479806581728D-04 0.3562625209215D-04 0.3647414382175D-04 + 0.3734220968012D-04 0.3823092948144D-04 0.3914079444457D-04 0.4007230746391D-04 + 0.4102598338660D-04 0.4200234929636D-04 0.4300194480406D-04 0.4402532234512D-04 + 0.4507304748402D-04 0.4614569922601D-04 0.4724387033618D-04 0.4836816766617D-04 + 0.4951921248852D-04 0.5069764083903D-04 0.5190410386721D-04 0.5313926819498D-04 + 0.5440381628400D-04 0.5569844681152D-04 0.5702387505533D-04 0.5838083328767D-04 + 0.5977007117859D-04 0.6119235620880D-04 0.6264847409228D-04 0.6413922920902D-04 + 0.6566544504782D-04 0.6722796465978D-04 0.6882765112238D-04 0.7046538801462D-04 + 0.7214207990339D-04 0.7385865284136D-04 0.7561605487667D-04 0.7741525657465D-04 + 0.7925725155197D-04 0.8114305702331D-04 0.8307371436110D-04 0.8505028966841D-04 + 0.8707387436545D-04 0.8914558578994D-04 0.9126656781168D-04 0.9343799146165D-04 + 0.9566105557602D-04 0.9793698745538D-04 0.1002670435396D-03 0.1026525100984D-03 + 0.1050947039390D-03 0.1075949731294D-03 0.1101546977394D-03 0.1127752905997D-03 + 0.1154581980775D-03 0.1182049008719D-03 0.1210169148270D-03 0.1238957917652D-03 + 0.1268431203390D-03 0.1298605269045D-03 0.1329496764137D-03 0.1361122733297D-03 + 0.1393500625619D-03 0.1426648304247D-03 0.1460584056178D-03 0.1495326602303D-03 + 0.1530895107681D-03 0.1567309192056D-03 0.1604588940629D-03 0.1642754915072D-03 + 0.1681828164816D-03 0.1721830238593D-03 0.1762783196258D-03 0.1804709620887D-03 + 0.1847632631165D-03 0.1891575894056D-03 0.1936563637785D-03 0.1982620665115D-03 + 0.2029772366947D-03 0.2078044736231D-03 0.2127464382210D-03 0.2178058545005D-03 + 0.2229855110531D-03 0.2282882625778D-03 0.2337170314442D-03 0.2392748092933D-03 + 0.2449646586752D-03 0.2507897147258D-03 0.2567531868833D-03 0.2628583606444D-03 + 0.2691085993625D-03 0.2755073460880D-03 0.2820581254518D-03 0.2887645455935D-03 + 0.2956303001344D-03 0.3026591701977D-03 0.3098550264756D-03 0.3172218313454D-03 + 0.3247636410353D-03 0.3324846078408D-03 0.3403889823939D-03 0.3484811159850D-03 + 0.3567654629401D-03 0.3652465830528D-03 0.3739291440747D-03 0.3828179242637D-03 + 0.3919178149916D-03 0.4012338234146D-03 0.4107710752045D-03 0.4205348173457D-03 + 0.4305304209971D-03 0.4407633844209D-03 0.4512393359813D-03 0.4619640372121D-03 + 0.4729433859575D-03 0.4841834195856D-03 0.4956903182785D-03 0.5074704083979D-03 + 0.5195301659314D-03 0.5318762200182D-03 0.5445153565579D-03 0.5574545219044D-03 + 0.5707008266453D-03 0.5842615494708D-03 0.5981441411326D-03 0.6123562284955D-03 + 0.6269056186847D-03 0.6418003033287D-03 0.6570484629028D-03 0.6726584711734D-03 + 0.6886388997468D-03 0.7049985227240D-03 0.7217463214642D-03 0.7388914894603D-03 + 0.7564434373277D-03 0.7744117979097D-03 0.7928064315026D-03 0.8116374312024D-03 + 0.8309151283763D-03 0.8506500982622D-03 0.8708531656989D-03 0.8915354109894D-03 + 0.9127081759015D-03 0.9343830698083D-03 0.9565719759715D-03 0.9792870579714D-03 + 0.1002540766287D-02 0.1026345845027D-02 0.1050715338824D-02 0.1075662599879D-02 + 0.1101201295181D-02 0.1127345413883D-02 0.1154109274864D-02 0.1181507534450D-02 + 0.1209555194328D-02 0.1238267609637D-02 0.1267660497252D-02 0.1297749944251D-02 + 0.1328552416593D-02 0.1360084767981D-02 0.1392364248945D-02 0.1425408516127D-02 + 0.1459235641785D-02 0.1493864123514D-02 0.1529312894196D-02 0.1565601332181D-02 + 0.1602749271697D-02 0.1640777013510D-02 0.1679705335822D-02 0.1719555505429D-02 + 0.1760349289133D-02 0.1802108965417D-02 0.1844857336390D-02 0.1888617740010D-02 + 0.1933414062589D-02 0.1979270751585D-02 0.2026212828687D-02 0.2074265903209D-02 + 0.2123456185786D-02 0.2173810502385D-02 0.2225356308647D-02 0.2278121704551D-02 + 0.2332135449417D-02 0.2387426977257D-02 0.2444026412476D-02 0.2501964585936D-02 + 0.2561273051389D-02 0.2621984102285D-02 0.2684130788965D-02 0.2747746936258D-02 + 0.2812867161465D-02 0.2879526892772D-02 0.2947762388071D-02 0.3017610754222D-02 + 0.3089109966753D-02 0.3162298890003D-02 0.3237217297741D-02 0.3313905894238D-02 + 0.3392406335837D-02 0.3472761253004D-02 0.3555014272883D-02 0.3639210042377D-02 + 0.3725394251736D-02 0.3813613658698D-02 0.3903916113173D-02 0.3996350582488D-02 + 0.4090967177209D-02 0.4187817177547D-02 0.4286953060364D-02 0.4388428526794D-02 + 0.4492298530489D-02 0.4598619306504D-02 0.4707448400838D-02 0.4818844700646D-02 + 0.4932868465127D-02 0.5049581357120D-02 0.5169046475404D-02 0.5291328387739D-02 + 0.5416493164639D-02 0.5544608413917D-02 0.5675743316002D-02 0.5809968660057D-02 + 0.5947356880904D-02 0.6087982096781D-02 0.6231920147946D-02 0.6379248636155D-02 + 0.6530046965011D-02 0.6684396381234D-02 0.6842380016839D-02 0.7004082932273D-02 + 0.7169592160503D-02 0.7338996752102D-02 0.7512387821327D-02 0.7689858593235D-02 + 0.7871504451850D-02 0.8057422989391D-02 0.8247714056607D-02 0.8442479814225D-02 + 0.8641824785540D-02 0.8845855910175D-02 0.9054682599025D-02 0.9268416790430D-02 + 0.9487173007575D-02 0.9711068417172D-02 0.9940222889430D-02 0.1017475905935D-01 + 0.1041480238936D-01 0.1066048123337D-01 0.1091192690214D-01 0.1116927373022D-01 + 0.1143265914425D-01 0.1170222373276D-01 0.1197811131760D-01 0.1226046902681D-01 + 0.1254944736912D-01 0.1284520031015D-01 0.1314788535014D-01 0.1345766360348D-01 + 0.1377469987990D-01 0.1409916276750D-01 0.1443122471744D-01 0.1477106213063D-01 + 0.1511885544620D-01 0.1547478923187D-01 0.1583905227632D-01 0.1621183768351D-01 + 0.1659334296907D-01 0.1698377015868D-01 0.1738332588869D-01 0.1779222150874D-01 + 0.1821067318670D-01 0.1863890201578D-01 0.1907713412394D-01 0.1952560078568D-01 + 0.1998453853608D-01 0.2045418928739D-01 0.2093480044805D-01 0.2142662504416D-01 + 0.2192992184360D-01 0.2244495548276D-01 0.2297199659585D-01 0.2351132194704D-01 + 0.2406321456527D-01 0.2462796388197D-01 0.2520586587156D-01 0.2579722319499D-01 + 0.2640234534617D-01 0.2702154880148D-01 0.2765515717239D-01 0.2830350136121D-01 + 0.2896691972007D-01 0.2964575821319D-01 0.3034037058244D-01 0.3105111851634D-01 + 0.3177837182251D-01 0.3252250860359D-01 0.3328391543683D-01 0.3406298755727D-01 + 0.3486012904465D-01 0.3567575301409D-01 0.3651028181063D-01 0.3736414720771D-01 + 0.3823779060956D-01 0.3913166325773D-01 0.4004622644169D-01 0.4098195171364D-01 + 0.4193932110758D-01 0.4291882736274D-01 0.4392097415138D-01 0.4494627631115D-01 + 0.4599526008193D-01 0.4706846334735D-01 0.4816643588104D-01 0.4928973959763D-01 + 0.5043894880863D-01 0.5161465048329D-01 0.5281744451445D-01 0.5404794398948D-01 + 0.5530677546647D-01 0.5659457925562D-01 0.5791200970601D-01 0.5925973549779D-01 + 0.6063843993988D-01 0.6204882127328D-01 0.6349159298001D-01 0.6496748409788D-01 + 0.6647723954103D-01 0.6802162042643D-01 0.6960140440641D-01 0.7121738600725D-01 + 0.7287037697395D-01 0.7456120662128D-01 0.7629072219118D-01 0.7805978921657D-01 + 0.7986929189166D-01 0.8172013344892D-01 0.8361323654265D-01 0.8554954363940D-01 + 0.8753001741513D-01 0.8955564115940D-01 0.9162741918654D-01 0.9374637725383D-01 + 0.9591356298698D-01 0.9813004631275D-01 0.1003969198990D+00 0.1027152996019D+00 + 0.1050863249211D+00 0.1075111594618D+00 0.1099909914051D+00 0.1125270339855D+00 + 0.1151205259766D+00 0.1177727321842D+00 0.1204849439476D+00 0.1232584796489D+00 + 0.1260946852301D+00 0.1289949347182D+00 0.1319606307590D+00 0.1349932051583D+00 + 0.1380941194317D+00 0.1412648653632D+00 0.1445069655708D+00 0.1478219740820D+00 + 0.1512114769165D+00 0.1546770926778D+00 0.1582204731535D+00 0.1618433039236D+00 + 0.1655473049771D+00 0.1693342313383D+00 0.1732058737000D+00 0.1771640590662D+00 + 0.1812106514032D+00 0.1853475522988D+00 0.1895767016304D+00 0.1939000782413D+00 + 0.1983197006251D+00 0.2028376276193D+00 0.2074559591063D+00 0.2121768367234D+00 + 0.2170024445803D+00 0.2219350099852D+00 0.2269768041788D+00 0.2321301430764D+00 + 0.2373973880172D+00 0.2427809465221D+00 0.2482832730585D+00 0.2539068698131D+00 + 0.2596542874715D+00 0.2655281260047D+00 0.2715310354636D+00 0.2776657167793D+00 + 0.2839349225700D+00 0.2903414579550D+00 0.2968881813739D+00 0.3035780054119D+00 + 0.3104138976312D+00 0.3173988814070D+00 0.3245360367687D+00 0.3318285012460D+00 + 0.3392794707188D+00 0.3468922002717D+00 0.3546700050516D+00 0.3626162611285D+00 + 0.3707344063591D+00 0.3790279412529D+00 0.3875004298396D+00 0.3961555005386D+00 + 0.4049968470283D+00 0.4140282291162D+00 0.4232534736091D+00 0.4326764751811D+00 + 0.4423011972414D+00 0.4521316727988D+00 0.4621720053237D+00 0.4724263696067D+00 + 0.4828990126121D+00 0.4935942543268D+00 0.5045164886027D+00 0.5156701839924D+00 + 0.5270598845772D+00 0.5386902107861D+00 0.5505658602051D+00 0.5626916083760D+00 + 0.5750723095830D+00 0.5877128976270D+00 0.6006183865849D+00 0.6137938715547D+00 + 0.6272445293836D+00 0.6409756193782D+00 0.6549924839961D+00 0.6693005495166D+00 + 0.6839053266899D+00 0.6988124113627D+00 0.7140274850788D+00 0.7295563156538D+00 + 0.7454047577210D+00 0.7615787532478D+00 0.7780843320207D+00 0.7949276120969D+00 + 0.8121148002200D+00 0.8296521921997D+00 0.8475461732513D+00 0.8658032182945D+00 + 0.8844298922086D+00 0.9034328500427D+00 0.9228188371772D+00 0.9425946894360D+00 + 0.9627673331456D+00 0.9833437851400D+00 0.1004331152707D+01 0.1025736633476D+01 + 0.1047567515241D+01 0.1069831175720D+01 0.1092535082243D+01 0.1115686791375D+01 + 0.1139293948457D+01 0.1163364287075D+01 0.1187905628445D+01 0.1212925880722D+01 + 0.1238433038208D+01 0.1264435180485D+01 0.1290940471443D+01 0.1317957158220D+01 + 0.1345493570030D+01 0.1373558116898D+01 0.1402159288280D+01 0.1431305651569D+01 + 0.1461005850494D+01 0.1491268603389D+01 0.1522102701342D+01 0.1553517006218D+01 + 0.1585520448546D+01 0.1618122025271D+01 0.1651330797361D+01 0.1685155887276D+01 + 0.1719606476280D+01 0.1754691801602D+01 0.1790421153434D+01 0.1826803871767D+01 + 0.1863849343063D+01 0.1901566996742D+01 0.1939966301501D+01 0.1979056761446D+01 + 0.2018847912032D+01 0.2059349315815D+01 0.2100570557999D+01 0.2142521241790D+01 + 0.2185210983528D+01 0.2228649407614D+01 0.2272846141215D+01 0.2317810808747D+01 + 0.2363553026124D+01 0.2410082394775D+01 0.2457408495423D+01 0.2505540881617D+01 + 0.2554489073015D+01 0.2604262548407D+01 0.2654870738488D+01 0.2706323018355D+01 + 0.2758628699743D+01 0.2811797022979D+01 0.2865837148659D+01 0.2920758149043D+01 + 0.2976568999160D+01 0.3033278567615D+01 0.3090895607108D+01 0.3149428744640D+01 + 0.3208886471423D+01 0.3269277132479D+01 0.3330608915918D+01 0.3392889841912D+01 + 0.3456127751341D+01 0.3520330294118D+01 0.3585504917195D+01 0.3651658852234D+01 + 0.3718799102956D+01 0.3786932432154D+01 0.3856065348377D+01 0.3926204092282D+01 + 0.3997354622651D+01 0.4069522602076D+01 0.4142713382310D+01 0.4216931989288D+01 + 0.4292183107814D+01 0.4368471065927D+01 0.4445799818928D+01 0.4524172933100D+01 + 0.4603593569097D+01 0.4684064465021D+01 0.4765587919192D+01 0.4848165772611D+01 + 0.4931799391130D+01 0.5016489647323D+01 0.5102236902085D+01 0.5189040985952D+01 + 0.5276901180158D+01 0.5365816197444D+01 0.5455784162617D+01 0.5546802592894D+01 + 0.5638868378017D+01 0.5731977760181D+01 0.5826126313769D+01 0.5921308924927D+01 + 0.6017519770983D+01 0.6114752299744D+01 0.6212999208681D+01 0.6312252424025D+01 + 0.6412503079799D+01 0.6513741496818D+01 0.6615957161666D+01 0.6719138705689D+01 + 0.6823273884037D+01 0.6928349554769D+01 0.7034351658067D+01 0.7141265195588D+01 + 0.7249074209985D+01 0.7357761764637D+01 0.7467309923627D+01 0.7577699732003D+01 + 0.7688911196366D+01 0.7800923265826D+01 0.7913713813378D+01 0.8027259617727D+01 + 0.8141536345630D+01 0.8256518534789D+01 0.8372179577355D+01 0.8488491704090D+01 + 0.8605425969248D+01 0.8722952236222D+01 0.8841039164025D+01 0.8959654194655D+01 + 0.9078763541413D+01 0.9198332178230D+01 0.9318323830066D+01 0.9438700964464D+01 + 0.9559424784293D+01 0.9680455221780D+01 0.9801750933887D+01 0.9923269299099D+01 + 0.1004496641570D+02 0.1016679710163D+02 0.1028871489593D+02 0.1041067206198D+02 + 0.1053261959239D+02 0.1065450721594D+02 0.1077628340626D+02 0.1089789539267D+02 + 0.1101928917306D+02 0.1114040952889D+02 0.1126120004259D+02 0.1138160311709D+02 + 0.1150155999788D+02 0.1162101079752D+02 0.1173989452270D+02 0.1185814910389D+02 + 0.1197571142774D+02 0.1209251737221D+02 0.1220850184455D+02 0.1232359882222D+02 + 0.1243774139668D+02 0.1255086182033D+02 0.1266289155645D+02 0.1277376133233D+02 + 0.1288340119558D+02 0.1299174057364D+02 0.1309870833671D+02 0.1320423286383D+02 + 0.1330824211245D+02 0.1341066369131D+02 0.1351142493681D+02 0.1361045299271D+02 + 0.1370767489335D+02 0.1380301765027D+02 0.1389640834224D+02 0.1398777420882D+02 + 0.1407704274716D+02 0.1416414181234D+02 0.1424899972093D+02 0.1433154535791D+02 + 0.1441170828680D+02 0.1448941886294D+02 0.1456460834990D+02 0.1463720903887D+02 + 0.1470715437095D+02 0.1477437906225D+02 0.1483881923166D+02 0.1490041253114D+02 + 0.1495909827839D+02 0.1501481759178D+02 0.1506751352732D+02 0.1511713121747D+02 + 0.1516361801165D+02 0.1520692361818D+02 0.1524700024742D+02 0.1528380275595D+02 + 0.1531728879140D+02 0.1534741893776D+02 0.1537415686084D+02 0.1539746945363D+02 + 0.1541732698111D+02 0.1543370322439D+02 0.1544657562364D+02 0.1545592541956D+02 + 0.1546173779302D+02 0.1546400200242D+02 0.1546271151843D+02 0.1545786415570D+02 + 0.1544946220111D+02 0.1543751253809D+02 0.1542202676661D+02 0.1540302131844D+02 + 0.1538051756708D+02 0.1535454193202D+02 0.1532512597682D+02 0.1529230650045D+02 + 0.1525612562157D+02 0.1521663085508D+02 0.1517387518057D+02 0.1512791710213D+02 + 0.1507882069905D+02 0.1502665566690D+02 0.1497149734847D+02 0.1491342675424D+02 + 0.1485253057170D+02 0.1478890116319D+02 0.1472263655178D+02 0.1465384039476D+02 + 0.1458262194423D+02 0.1450909599456D+02 0.1443338281613D+02 0.1435560807511D+02 + 0.1427590273888D+02 0.1419440296685D+02 0.1411124998625D+02 0.1402658995277D+02 + 0.1394057379573D+02 0.1385335704764D+02 0.1376509965795D+02 0.1367596579089D+02 + 0.1358612360737D+02 0.1349574503081D+02 0.1340500549696D+02 0.1331408368786D+02 + 0.1322316124986D+02 0.1313242249599D+02 0.1304205409292D+02 0.1295224473262D+02 + 0.1286318478926D+02 0.1277506596148D+02 0.1268808090072D+02 0.1260242282594D+02 + 0.1251828512526D+02 0.1243586094535D+02 0.1235534276899D+02 0.1227692198172D+02 + 0.1220078842830D+02 0.1212712995982D+02 0.1205613197253D+02 0.1198797693913D+02 + 0.1192284393379D+02 0.1186090815186D+02 0.1180234042546D+02 0.1174730673615D+02 + 0.1169596772603D+02 0.1164847820834D+02 0.1160498667924D+02 0.1156563483188D+02 + 0.1153055707436D+02 0.1149988005301D+02 0.1147372218250D+02 0.1145219318434D+02 + 0.1143539363525D+02 0.1142341452711D+02 0.1141633683999D+02 0.1141423112993D+02 + 0.1141715713298D+02 0.1142516338731D+02 0.1143828687474D+02 0.1145655268355D+02 + 0.1147997369390D+02 0.1150855028761D+02 0.1154227008374D+02 0.1158110770138D+02 + 0.1162502455129D+02 0.1167396865756D+02 0.1172787451079D+02 0.1178666295396D+02 + 0.1185024110228D+02 0.1191850229803D+02 0.1199132610159D+02 0.1206857831946D+02 + 0.1215011107019D+02 0.1223576288907D+02 0.1232535887199D+02 0.1241871085933D+02 + 0.1251561765997D+02 0.1261586531600D+02 0.1271922740805D+02 0.1282546540151D+02 + 0.1293432903330D+02 0.1304555673916D+02 0.1315887612096D+02 0.1327400445348D+02 + 0.1339064923005D+02 0.1350850874625D+02 0.1362727272054D+02 0.1374662295087D+02 + 0.1386623400591D+02 0.1398577394943D+02 0.1410490509638D+02 0.1422328479880D+02 + 0.1434056625987D+02 0.1445639937388D+02 0.1457043159027D+02 0.1468230879914D+02 + 0.1479167623614D+02 0.1489817940404D+02 0.1500146500841D+02 0.1510118190471D+02 + 0.1519698205391D+02 0.1528852148379D+02 0.1537546125281D+02 0.1545746841364D+02 + 0.1553421697307D+02 0.1560538884523D+02 0.1567067479483D+02 0.1572977536717D+02 + 0.1578240180176D+02 0.1582827692612D+02 0.1586713602663D+02 0.1589872769311D+02 + 0.1592281463392D+02 0.1593917445849D+02 0.1594760042409D+02 0.1594790214378D+02 + 0.1593990625272D+02 0.1592345702984D+02 0.1589841697221D+02 0.1586466731948D+02 + 0.1582210852585D+02 0.1577066067732D+02 0.1571026385193D+02 0.1564087842120D+02 + 0.1556248529064D+02 0.1547508607802D+02 0.1537870322780D+02 0.1527338006062D+02 + 0.1515918075676D+02 0.1503619027308D+02 0.1490451419267D+02 0.1476427850715D+02 + 0.1461562933169D+02 0.1445873255288D+02 0.1429377341010D+02 0.1412095601137D+02 + 0.1394050278444D+02 0.1375265386499D+02 0.1355766642312D+02 0.1335581393054D+02 + 0.1314738537038D+02 0.1293268439219D+02 0.1271202841511D+02 0.1248574768189D+02 + 0.1225418426740D+02 0.1201769104500D+02 0.1177663061449D+02 0.1153137419578D+02 + 0.1128230049248D+02 0.1102979452961D+02 0.1077424647032D+02 0.1051605041603D+02 + 0.1025560319513D+02 0.9993303145083D+01 0.9729548892983D+01 0.9464738139829D+01 + 0.9199266453606D+01 0.8933526076402D+01 0.8667904750745D+01 0.8402784570301D+01 + 0.8138540859996D+01 0.7875541090527D+01 0.7614143832090D+01 0.7354697751983D+01 + 0.7097540660550D+01 0.6842998609696D+01 0.6591385047920D+01 0.6343000035605D+01 + 0.6098129523858D+01 0.5857044699944D+01 0.5620001401934D+01 0.5387239604814D+01 + 0.5158982979846D+01 0.4935438528573D+01 0.4716796292366D+01 0.4503229137976D+01 + 0.4294892619056D+01 0.4091924913152D+01 0.3894446833193D+01 0.3702561912045D+01 + 0.3516356558237D+01 0.3335900280537D+01 0.3161245978670D+01 0.2992430297065D+01 + 0.2829474038194D+01 0.2672382631762D+01 0.2521146655720D+01 0.2375742404881D+01 + 0.2236132502695D+01 0.2102266551639D+01 0.1974081817541D+01 0.1851503943111D+01 + 0.1734447685940D+01 0.1622817676200D+01 0.1516509189368D+01 0.1415408929331D+01 + 0.1319395817360D+01 0.1228341782531D+01 0.1142112549373D+01 0.1060568418635D+01 + 0.9835650373019D+00 0.9109541541726D+00 0.8425843575459D+00 0.7783017917968D+00 + 0.7179508498817D+00 0.6613748390683D+00 0.6084166174653D+00 0.5589191992012D+00 + 0.5127263263911D+00 0.4696830063190D+00 0.4296360125529D+00 0.3924343490009D+00 + 0.3579296762027D+00 0.3259766994340D+00 0.2964335184742D+00 0.2691619391536D+00 + 0.2440277470488D+00 0.2209009439361D+00 0.1996559478365D+00 0.1801717576938D+00 + 0.1623320839184D+00 0.1460254461990D+00 0.1311452401368D+00 0.1175897743854D+00 + 0.1052622800912D+00 0.9407089451527D-01 0.8392862078550D-01 0.7475326577690D-01 + 0.6646735814128D-01 0.5899804851766D-01 0.5227699394346D-01 0.4624022845899D-01 + 0.4082802185442D-01 0.3598472845105D-01 0.3165862773800D-01 0.2780175860384D-01 + 0.2436974881146D-01 0.2132164126495D-01 0.1861971851162D-01 0.1622932681167D-01 + 0.1411870099424D-01 0.1225879120292D-01 0.1062309251766D-01 0.9187478324824D-02 + 0.7930038194170D-02 0.6830920911119D-02 0.5872183206948D-02 0.5037644628161D-02 + 0.4312748890659D-02 0.3684431974697D-02 0.3140997133459D-02 0.2671996911721D-02 + 0.2268122201696D-02 0.1921098300832D-02 0.1623587881022D-02 0.1369100730387D-02 + 0.1151910087150D-02 0.9669753500508D-03 0.8098709208516D-03 0.6767209113939D-03 + 0.5641394300578D-03 0.4691761498429D-03 0.3892668522563D-03 0.3221886372696D-03 + 0.2660194893607D-03 0.2191018926233D-03 0.1800101936858D-03 0.1475214192933D-03 + 0.1205892654847D-03 0.9832098695562D-04 0.7995692809159D-04 0.6485245095860D-04 + 0.5246202996510D-04 0.4232529769133D-04 0.3405484129524D-04 0.2732556374477D-04 + 0.2186543872353D-04 0.1744750226736D-04 0.1388293789508D-04 0.1101512510421D-04 + 0.8714533541124D-05 0.6874356872787D-05 0.5406791351919D-05 0.4239874261002D-05 + 0.3314806839624D-05 0.2583694952262D-05 0.2007648657315D-05 0.1555189018603D-05 + 0.1200916989437D-05 0.9244050332163D-06 0.7092773630705D-06 0.5424493283134D-06 + 0.4135005904089D-06 0.3141603589352D-06 0.2378861413798D-06 0.1795202409555D-06 + 0.1350106538765D-06 0.1011851095086D-06 0.7556879909866D-07 0.5623788451178D-07 + 0.4170219815814D-07 0.3081166707088D-07 0.2268194336078D-07 0.1663552297805D-07 + 0.1215530542863D-07 0.8848107127806D-08 0.6416106613217D-08 0.4634585104140D-08 + 0.3334643304910D-08 0.2389835688104D-08 0.1705876062949D-08 0.1212741020005D-08 + 0.8586376559590D-09 0.6054146003728D-09 0.4250856698627D-09 0.2972075512731D-09 + 0.2069101606973D-09 0.1434236365115D-09 0.9898160505409D-10 0.6800804519963D-10 + 0.4651712787494D-10 0.3167310042586D-10 0.2146695649341D-10 0.1448079937139D-10 + 0.9722622861678D-11 0.6496070631129D-11 0.4319651023999D-11 0.2858591661735D-11 + 0.1882503214946D-11 0.1233598363270D-11 0.8043412065319D-12 0.5218060130221D-12 + 0.3367856512696D-12 0.2162455335843D-12 0.1381220475631D-12 0.8775552000331D-13 diff --git a/Test/Fe16_non_collinear/v_fe16.13 b/Test/Fe16_non_collinear/v_fe16.13 new file mode 100755 index 000000000..f3c4e967f --- /dev/null +++ b/Test/Fe16_non_collinear/v_fe16.13 @@ -0,0 +1,1542 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Fe. + 2 0.0000000000000D+00 + LSMS: xx z= 26. xvalws= 5.22926 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728400909D+02-0.5199725115555D+02-0.5199721790459D+02-0.5199718425142D+02 +-0.5199715019116D+02-0.5199711571889D+02-0.5199708082964D+02-0.5199704551834D+02 +-0.5199700977990D+02-0.5199697360915D+02-0.5199693700086D+02-0.5199689994973D+02 +-0.5199686245042D+02-0.5199682449748D+02-0.5199678608545D+02-0.5199674720876D+02 +-0.5199670786180D+02-0.5199666803887D+02-0.5199662773421D+02-0.5199658694201D+02 +-0.5199654565635D+02-0.5199650387127D+02-0.5199646158073D+02-0.5199641877860D+02 +-0.5199637545872D+02-0.5199633161480D+02-0.5199628724051D+02-0.5199624232942D+02 +-0.5199619687506D+02-0.5199615087084D+02-0.5199610431012D+02-0.5199605718616D+02 +-0.5199600949214D+02-0.5199596122116D+02-0.5199591236626D+02-0.5199586292036D+02 +-0.5199581287632D+02-0.5199576222688D+02-0.5199571096474D+02-0.5199565908248D+02 +-0.5199560657259D+02-0.5199555342748D+02-0.5199549963947D+02-0.5199544520078D+02 +-0.5199539010352D+02-0.5199533433975D+02-0.5199527790139D+02-0.5199522078028D+02 +-0.5199516296816D+02-0.5199510445666D+02-0.5199504523733D+02-0.5199498530160D+02 +-0.5199492464081D+02-0.5199486324617D+02-0.5199480110883D+02-0.5199473821977D+02 +-0.5199467456990D+02-0.5199461015004D+02-0.5199454495085D+02-0.5199447896290D+02 +-0.5199441217666D+02-0.5199434458246D+02-0.5199427617052D+02-0.5199420693096D+02 +-0.5199413685375D+02-0.5199406592876D+02-0.5199399414573D+02-0.5199392149428D+02 +-0.5199384796390D+02-0.5199377354396D+02-0.5199369822368D+02-0.5199362199218D+02 +-0.5199354483843D+02-0.5199346675127D+02-0.5199338771940D+02-0.5199330773139D+02 +-0.5199322677567D+02-0.5199314484053D+02-0.5199306191412D+02-0.5199297798443D+02 +-0.5199289303934D+02-0.5199280706654D+02-0.5199272005361D+02-0.5199263198797D+02 +-0.5199254285685D+02-0.5199245264737D+02-0.5199236134649D+02-0.5199226894099D+02 +-0.5199217541751D+02-0.5199208076251D+02-0.5199198496230D+02-0.5199188800302D+02 +-0.5199178987064D+02-0.5199169055096D+02-0.5199159002963D+02-0.5199148829207D+02 +-0.5199138532359D+02-0.5199128110928D+02-0.5199117563407D+02-0.5199106888269D+02 +-0.5199096083969D+02-0.5199085148944D+02-0.5199074081613D+02-0.5199062880373D+02 +-0.5199051543604D+02-0.5199040069664D+02-0.5199028456895D+02-0.5199016703615D+02 +-0.5199004808124D+02-0.5198992768700D+02-0.5198980583600D+02-0.5198968251063D+02 +-0.5198955769302D+02-0.5198943136512D+02-0.5198930350863D+02-0.5198917410506D+02 +-0.5198904313569D+02-0.5198891058155D+02-0.5198877642345D+02-0.5198864064200D+02 +-0.5198850321751D+02-0.5198836413012D+02-0.5198822335968D+02-0.5198808088582D+02 +-0.5198793668793D+02-0.5198779074512D+02-0.5198764303627D+02-0.5198749354000D+02 +-0.5198734223467D+02-0.5198718909837D+02-0.5198703410894D+02-0.5198687724393D+02 +-0.5198671848065D+02-0.5198655779610D+02-0.5198639516703D+02-0.5198623056988D+02 +-0.5198606398084D+02-0.5198589537577D+02-0.5198572473026D+02-0.5198555201962D+02 +-0.5198537721883D+02-0.5198520030257D+02-0.5198502124524D+02-0.5198484002091D+02 +-0.5198465660333D+02-0.5198447096595D+02-0.5198428308188D+02-0.5198409292391D+02 +-0.5198390046450D+02-0.5198370567579D+02-0.5198350852955D+02-0.5198330899725D+02 +-0.5198310704998D+02-0.5198290265850D+02-0.5198269579318D+02-0.5198248642408D+02 +-0.5198227452087D+02-0.5198206005285D+02-0.5198184298896D+02-0.5198162329776D+02 +-0.5198140094741D+02-0.5198117590571D+02-0.5198094814005D+02-0.5198071761744D+02 +-0.5198048430449D+02-0.5198024816738D+02-0.5198000917191D+02-0.5197976728344D+02 +-0.5197952246692D+02-0.5197927468690D+02-0.5197902390745D+02-0.5197877009224D+02 +-0.5197851320449D+02-0.5197825320698D+02-0.5197799006201D+02-0.5197772373146D+02 +-0.5197745417673D+02-0.5197718135875D+02-0.5197690523796D+02-0.5197662577437D+02 +-0.5197634292744D+02-0.5197605665620D+02-0.5197576691913D+02-0.5197547367423D+02 +-0.5197517687900D+02-0.5197487649041D+02-0.5197457246489D+02-0.5197426475838D+02 +-0.5197395332627D+02-0.5197363812338D+02-0.5197331910403D+02-0.5197299622195D+02 +-0.5197266943031D+02-0.5197233868173D+02-0.5197200392824D+02-0.5197166512128D+02 +-0.5197132221174D+02-0.5197097514984D+02-0.5197062388528D+02-0.5197026836709D+02 +-0.5196990854370D+02-0.5196954436291D+02-0.5196917577189D+02-0.5196880271716D+02 +-0.5196842514461D+02-0.5196804299945D+02-0.5196765622622D+02-0.5196726476881D+02 +-0.5196686857041D+02-0.5196646757354D+02-0.5196606171998D+02-0.5196565095085D+02 +-0.5196523520651D+02-0.5196481442664D+02-0.5196438855015D+02-0.5196395751522D+02 +-0.5196352125928D+02-0.5196307971901D+02-0.5196263283028D+02-0.5196218052823D+02 +-0.5196172274718D+02-0.5196125942066D+02-0.5196079048138D+02-0.5196031586126D+02 +-0.5195983549135D+02-0.5195934930191D+02-0.5195885722231D+02-0.5195835918107D+02 +-0.5195785510585D+02-0.5195734492343D+02-0.5195682855969D+02-0.5195630593961D+02 +-0.5195577698725D+02-0.5195524162577D+02-0.5195469977736D+02-0.5195415136330D+02 +-0.5195359630387D+02-0.5195303451841D+02-0.5195246592528D+02-0.5195189044181D+02 +-0.5195130798435D+02-0.5195071846824D+02-0.5195012180777D+02-0.5194951791619D+02 +-0.5194890670569D+02-0.5194828808741D+02-0.5194766197137D+02-0.5194702826653D+02 +-0.5194638688071D+02-0.5194573772064D+02-0.5194508069188D+02-0.5194441569885D+02 +-0.5194374264482D+02-0.5194306143187D+02-0.5194237196087D+02-0.5194167413149D+02 +-0.5194096784220D+02-0.5194025299021D+02-0.5193952947146D+02-0.5193879718066D+02 +-0.5193805601119D+02-0.5193730585519D+02-0.5193654660341D+02-0.5193577814533D+02 +-0.5193500036904D+02-0.5193421316129D+02-0.5193341640742D+02-0.5193260999141D+02 +-0.5193179379578D+02-0.5193096770164D+02-0.5193013158865D+02-0.5192928533501D+02 +-0.5192842881739D+02-0.5192756191098D+02-0.5192668448947D+02-0.5192579642497D+02 +-0.5192489758803D+02-0.5192398784765D+02-0.5192306707119D+02-0.5192213512442D+02 +-0.5192119187145D+02-0.5192023717474D+02-0.5191927089505D+02-0.5191829289146D+02 +-0.5191730302133D+02-0.5191630114025D+02-0.5191528710207D+02-0.5191426075883D+02 +-0.5191322196077D+02-0.5191217055632D+02-0.5191110639202D+02-0.5191002931255D+02 +-0.5190893916069D+02-0.5190783577729D+02-0.5190671900126D+02-0.5190558866954D+02 +-0.5190444461705D+02-0.5190328667673D+02-0.5190211467945D+02-0.5190092845399D+02 +-0.5189972782709D+02-0.5189851262330D+02-0.5189728266508D+02-0.5189603777267D+02 +-0.5189477776415D+02-0.5189350245533D+02-0.5189221165981D+02-0.5189090518885D+02 +-0.5188958285145D+02-0.5188824445423D+02-0.5188688980147D+02-0.5188551869503D+02 +-0.5188413093435D+02-0.5188272631641D+02-0.5188130463569D+02-0.5187986568418D+02 +-0.5187840925129D+02-0.5187693512386D+02-0.5187544308611D+02-0.5187393291962D+02 +-0.5187240440329D+02-0.5187085731330D+02-0.5186929142309D+02-0.5186770650332D+02 +-0.5186610232183D+02-0.5186447864362D+02-0.5186283523081D+02-0.5186117184259D+02 +-0.5185948823518D+02-0.5185778416183D+02-0.5185605937277D+02-0.5185431361514D+02 +-0.5185254663297D+02-0.5185075816718D+02-0.5184894795548D+02-0.5184711573237D+02 +-0.5184526122909D+02-0.5184338417356D+02-0.5184148429039D+02-0.5183956130079D+02 +-0.5183761492255D+02-0.5183564486998D+02-0.5183365085389D+02-0.5183163258155D+02 +-0.5182958975660D+02-0.5182752207907D+02-0.5182542924529D+02-0.5182331094785D+02 +-0.5182116687559D+02-0.5181899671350D+02-0.5181680014270D+02-0.5181457684041D+02 +-0.5181232647986D+02-0.5181004873028D+02-0.5180774325683D+02-0.5180540972054D+02 +-0.5180304777830D+02-0.5180065708277D+02-0.5179823728232D+02-0.5179578802103D+02 +-0.5179330893860D+02-0.5179079967027D+02-0.5178825984684D+02-0.5178568909453D+02 +-0.5178308703501D+02-0.5178045328526D+02-0.5177778745757D+02-0.5177508915948D+02 +-0.5177235799366D+02-0.5176959355795D+02-0.5176679544522D+02-0.5176396324334D+02 +-0.5176109653512D+02-0.5175819489823D+02-0.5175525790517D+02-0.5175228512318D+02 +-0.5174927611419D+02-0.5174623043474D+02-0.5174314763592D+02-0.5174002726332D+02 +-0.5173686885694D+02-0.5173367195115D+02-0.5173043607457D+02-0.5172716075006D+02 +-0.5172384549462D+02-0.5172048981932D+02-0.5171709322923D+02-0.5171365522335D+02 +-0.5171017529452D+02-0.5170665292940D+02-0.5170308760833D+02-0.5169947880525D+02 +-0.5169582598771D+02-0.5169212861671D+02-0.5168838614662D+02-0.5168459802518D+02 +-0.5168076369333D+02-0.5167688258518D+02-0.5167295412791D+02-0.5166897774168D+02 +-0.5166495283960D+02-0.5166087882755D+02-0.5165675510418D+02-0.5165258106080D+02 +-0.5164835608125D+02-0.5164407954186D+02-0.5163975081138D+02-0.5163536925080D+02 +-0.5163093421337D+02-0.5162644504442D+02-0.5162190108131D+02-0.5161730165335D+02 +-0.5161264608164D+02-0.5160793367906D+02-0.5160316375011D+02-0.5159833559084D+02 +-0.5159344848875D+02-0.5158850172268D+02-0.5158349456272D+02-0.5157842627009D+02 +-0.5157329609709D+02-0.5156810328692D+02-0.5156284707365D+02-0.5155752668206D+02 +-0.5155214132756D+02-0.5154669021608D+02-0.5154117254396D+02-0.5153558749786D+02 +-0.5152993425461D+02-0.5152421198113D+02-0.5151841983433D+02-0.5151255696093D+02 +-0.5150662249744D+02-0.5150061557002D+02-0.5149453529428D+02-0.5148838077528D+02 +-0.5148215110737D+02-0.5147584537403D+02-0.5146946264782D+02-0.5146300199022D+02 +-0.5145646245151D+02-0.5144984307067D+02-0.5144314287525D+02-0.5143636088122D+02 +-0.5142949609291D+02-0.5142254750281D+02-0.5141551409151D+02-0.5140839482753D+02 +-0.5140118866721D+02-0.5139389455459D+02-0.5138651142128D+02-0.5137903818632D+02 +-0.5137147375605D+02-0.5136381702401D+02-0.5135606687078D+02-0.5134822216388D+02 +-0.5134028175756D+02-0.5133224449278D+02-0.5132410919702D+02-0.5131587468413D+02 +-0.5130753975423D+02-0.5129910319357D+02-0.5129056377438D+02-0.5128192025477D+02 +-0.5127317137854D+02-0.5126431587514D+02-0.5125535245940D+02-0.5124627983153D+02 +-0.5123709667690D+02-0.5122780166596D+02-0.5121839345403D+02-0.5120887068125D+02 +-0.5119923197240D+02-0.5118947593678D+02-0.5117960116805D+02-0.5116960624416D+02 +-0.5115948972712D+02-0.5114925016296D+02-0.5113888608154D+02-0.5112839599644D+02 +-0.5111777840483D+02-0.5110703178733D+02-0.5109615460788D+02-0.5108514531363D+02 +-0.5107400233480D+02-0.5106272408452D+02-0.5105130895877D+02-0.5103975533619D+02 +-0.5102806157801D+02-0.5101622602790D+02-0.5100424701185D+02-0.5099212283803D+02 +-0.5097985179674D+02-0.5096743216021D+02-0.5095486218256D+02-0.5094214009961D+02 +-0.5092926412887D+02-0.5091623246932D+02-0.5090304330139D+02-0.5088969478681D+02 +-0.5087618506855D+02-0.5086251227064D+02-0.5084867449820D+02-0.5083466983722D+02 +-0.5082049635455D+02-0.5080615209778D+02-0.5079163509518D+02-0.5077694335558D+02 +-0.5076207486834D+02-0.5074702760324D+02-0.5073179951042D+02-0.5071638852033D+02 +-0.5070079254364D+02-0.5068500947122D+02-0.5066903717403D+02-0.5065287350315D+02 +-0.5063651628963D+02-0.5061996334457D+02-0.5060321245898D+02-0.5058626140382D+02 +-0.5056910792994D+02-0.5055174976809D+02-0.5053418462884D+02-0.5051641020267D+02 +-0.5049842415989D+02-0.5048022415067D+02-0.5046180780505D+02-0.5044317273295D+02 +-0.5042431652422D+02-0.5040523674861D+02-0.5038593095586D+02-0.5036639667573D+02 +-0.5034663141803D+02-0.5032663267268D+02-0.5030639790981D+02-0.5028592457977D+02 +-0.5026521011328D+02-0.5024425192145D+02-0.5022304739591D+02-0.5020159390892D+02 +-0.5017988881346D+02-0.5015792944334D+02-0.5013571311336D+02-0.5011323711944D+02 +-0.5009049873873D+02-0.5006749522980D+02-0.5004422383280D+02-0.5002068176959D+02 +-0.4999686624397D+02-0.4997277444186D+02-0.4994840353146D+02-0.4992375066350D+02 +-0.4989881297144D+02-0.4987358757171D+02-0.4984807156389D+02-0.4982226203106D+02 +-0.4979615603991D+02-0.4976975064117D+02-0.4974304286974D+02-0.4971602974502D+02 +-0.4968870827126D+02-0.4966107543776D+02-0.4963312821924D+02-0.4960486357616D+02 +-0.4957627845502D+02-0.4954736978871D+02-0.4951813449683D+02-0.4948856948612D+02 +-0.4945867165071D+02-0.4942843787257D+02-0.4939786502185D+02-0.4936694995729D+02 +-0.4933568952659D+02-0.4930408056681D+02-0.4927211990478D+02-0.4923980435752D+02 +-0.4920713073265D+02-0.4917409582880D+02-0.4914069643607D+02-0.4910692933642D+02 +-0.4907279130416D+02-0.4903827910633D+02-0.4900338950319D+02-0.4896811924867D+02 +-0.4893246509079D+02-0.4889642377211D+02-0.4885999203021D+02-0.4882316659813D+02 +-0.4878594420482D+02-0.4874832157556D+02-0.4871029543247D+02-0.4867186249491D+02 +-0.4863301947995D+02-0.4859376310277D+02-0.4855409007715D+02-0.4851399711583D+02 +-0.4847348093100D+02-0.4843253823466D+02-0.4839116573905D+02-0.4834936015704D+02 +-0.4830711820251D+02-0.4826443659074D+02-0.4822131203876D+02-0.4817774126566D+02 +-0.4813372099301D+02-0.4808924794511D+02-0.4804431884930D+02-0.4799893043625D+02 +-0.4795307944023D+02-0.4790676259938D+02-0.4785997665588D+02-0.4781271835619D+02 +-0.4776498445124D+02-0.4771677169657D+02-0.4766807685247D+02-0.4761889668409D+02 +-0.4756922796153D+02-0.4751906745988D+02-0.4746841195927D+02-0.4741725824487D+02 +-0.4736560310686D+02-0.4731344334036D+02-0.4726077574537D+02-0.4720759712663D+02 +-0.4715390429349D+02-0.4709969405976D+02-0.4704496324345D+02-0.4698970866656D+02 +-0.4693392715482D+02-0.4687761553742D+02-0.4682077064661D+02-0.4676338931742D+02 +-0.4670546838725D+02-0.4664700469545D+02-0.4658799508292D+02-0.4652843639162D+02 +-0.4646832546412D+02-0.4640765914308D+02-0.4634643427075D+02-0.4628464768840D+02 +-0.4622229623583D+02-0.4615937675077D+02-0.4609588606835D+02-0.4603182102046D+02 +-0.4596717843531D+02-0.4590195513672D+02-0.4583614794369D+02-0.4576975366979D+02 +-0.4570276912265D+02-0.4563519110351D+02-0.4556701640665D+02-0.4549824181908D+02 +-0.4542886412007D+02-0.4535888008084D+02-0.4528828646428D+02-0.4521708002473D+02 +-0.4514525750785D+02-0.4507281565054D+02-0.4499975118097D+02-0.4492606081870D+02 +-0.4485174127497D+02-0.4477678925295D+02-0.4470120144833D+02-0.4462497454985D+02 +-0.4454810524011D+02-0.4447059019649D+02-0.4439242609219D+02-0.4431360959758D+02 +-0.4423413738159D+02-0.4415400611337D+02-0.4407321246418D+02-0.4399175310947D+02 +-0.4390962473114D+02-0.4382682402010D+02-0.4374334767908D+02-0.4365919242563D+02 +-0.4357435499539D+02-0.4348883214570D+02-0.4340262065933D+02-0.4331571734857D+02 +-0.4322811905962D+02-0.4313982267710D+02-0.4305082512897D+02-0.4296112339160D+02 +-0.4287071449512D+02-0.4277959552900D+02-0.4268776364786D+02-0.4259521607738D+02 +-0.4250195012053D+02-0.4240796316384D+02-0.4231325268378D+02-0.4221781625326D+02 +-0.4212165154821D+02-0.4202475635403D+02-0.4192712857207D+02-0.4182876622603D+02 +-0.4172966746809D+02-0.4162983058491D+02-0.4152925400326D+02-0.4142793629535D+02 +-0.4132587618362D+02-0.4122307254514D+02-0.4111952441526D+02-0.4101523099069D+02 +-0.4091019163177D+02-0.4080440586392D+02-0.4069787337814D+02-0.4059059403052D+02 +-0.4048256784069D+02-0.4037379498919D+02-0.4026427581359D+02-0.4015401080347D+02 +-0.4004300059408D+02-0.3993124595881D+02-0.3981874780047D+02-0.3970550714118D+02 +-0.3959152511128D+02-0.3947680293704D+02-0.3936134192738D+02-0.3924514345974D+02 +-0.3912820896514D+02-0.3901053991273D+02-0.3889213779388D+02-0.3877300410616D+02 +-0.3865314033730D+02-0.3853254794941D+02-0.3841122836384D+02-0.3828918294671D+02 +-0.3816641299561D+02-0.3804291972752D+02-0.3791870426838D+02-0.3779376764439D+02 +-0.3766811077544D+02-0.3754173447071D+02-0.3741463942662D+02-0.3728682622747D+02 +-0.3715829534855D+02-0.3702904716206D+02-0.3689908194568D+02-0.3676839989389D+02 +-0.3663700113198D+02-0.3650488573242D+02-0.3637205373385D+02-0.3623850516215D+02 +-0.3610424005352D+02-0.3596925847947D+02-0.3583356057318D+02-0.3569714655716D+02 +-0.3556001677183D+02-0.3542217170480D+02-0.3528361202035D+02-0.3514433858906D+02 +-0.3500435251706D+02-0.3486365517474D+02-0.3472224822457D+02-0.3458013364781D+02 +-0.3443731376977D+02-0.3429379128348D+02-0.3414956927154D+02-0.3400465122587D+02 +-0.3385904106531D+02-0.3371274315081D+02-0.3356576229817D+02-0.3341810378823D+02 +-0.3326977337430D+02-0.3312077728689D+02-0.3297112223571D+02-0.3282081540879D+02 +-0.3266986446883D+02-0.3251827754673D+02-0.3236606323235D+02-0.3221323056253D+02 +-0.3205978900636D+02-0.3190574844798D+02-0.3175111916665D+02-0.3159591181450D+02 +-0.3144013739192D+02-0.3128380722060D+02-0.3112693291460D+02-0.3096952634939D+02 +-0.3081159962896D+02-0.3065316505139D+02-0.3049423507279D+02-0.3033482226994D+02 +-0.3017493930171D+02-0.3001459886954D+02-0.2985381367711D+02-0.2969259638940D+02 +-0.2953095959141D+02-0.2936891574677D+02-0.2920647715631D+02-0.2904365591713D+02 +-0.2888046388202D+02-0.2871691261992D+02-0.2855301337730D+02-0.2838877704096D+02 +-0.2822421410237D+02-0.2805933462405D+02-0.2789414820796D+02-0.2772866396645D+02 +-0.2756289049588D+02-0.2739683585338D+02-0.2723050753680D+02-0.2706391246838D+02 +-0.2689705698223D+02-0.2672994681603D+02-0.2656258710714D+02-0.2639498239345D+02 +-0.2622713661917D+02-0.2605905314574D+02-0.2589073476829D+02-0.2572218373759D+02 +-0.2555340178776D+02-0.2538439017000D+02-0.2521514969218D+02-0.2504568076457D+02 +-0.2487598345161D+02-0.2470605752972D+02-0.2453590255090D+02-0.2436551791213D+02 +-0.2419490293015D+02-0.2402405692122D+02-0.2385297928550D+02-0.2368166959536D+02 +-0.2351012768684D+02-0.2333835375355D+02-0.2316634844181D+02-0.2299411294593D+02 +-0.2282164910224D+02-0.2264895948042D+02-0.2247604747020D+02-0.2230291736187D+02 +-0.2212957441833D+02-0.2195602493665D+02-0.2178227629680D+02-0.2160833699531D+02 +-0.2143421666157D+02-0.2125992605447D+02-0.2108547703736D+02-0.2091088252957D+02 +-0.2073615643311D+02-0.2056131353347D+02-0.2038636937454D+02-0.2021134010787D+02 +-0.2003624231780D+02-0.1986109282464D+02-0.1968590846923D+02-0.1951070588338D+02 +-0.1933550125113D+02-0.1916031006739D+02-0.1898514690054D+02-0.1881002516654D+02 +-0.1863495692195D+02-0.1845995268332D+02-0.1828502127992D+02-0.1811016974578D+02 +-0.1793540325598D+02-0.1776072511080D+02-0.1758613676940D+02-0.1741163793327D+02 +-0.1723722667775D+02-0.1706289962834D+02-0.1688865217702D+02-0.1671447873257D+02 +-0.1654037299789D+02-0.1636632826691D+02-0.1619233773325D+02-0.1601839480315D+02 +-0.1584449340510D+02-0.1567062828984D+02-0.1549679531468D+02-0.1532299170720D+02 +-0.1514921630451D+02-0.1497546976480D+02-0.1480175474939D+02-0.1462807607400D+02 +-0.1445444082871D+02-0.1428085846710D+02-0.1410734086517D+02-0.1393390235146D+02 +-0.1376055970989D+02-0.1358733215727D+02-0.1341424129731D+02-0.1324131105355D+02 +-0.1306856758305D+02-0.1289603917318D+02-0.1272375612351D+02-0.1255175061484D+02 +-0.1238005656736D+02-0.1220870948967D+02-0.1203774632043D+02-0.1186720526422D+02 +-0.1169712562320D+02-0.1152754762583D+02-0.1135851225403D+02-0.1119006106993D+02 +-0.1102223604329D+02-0.1085507938069D+02-0.1068863335731D+02-0.1052294015218D+02 +-0.1035804168776D+02-0.1019397947446D+02-0.1003079446077D+02-0.9868526889628D+01 +-0.9707216161554D+01-0.9546900704939D+01-0.9387617854023D+01-0.9229403734858D+01 +-0.9072293159592D+01-0.8916319529363D+01-0.8761514745993D+01-0.8607909132693D+01 +-0.8455531363896D+01-0.8304408404305D+01-0.8154565457227D+01-0.8006025922166D+01 +-0.7858811361682D+01-0.7712941477416D+01-0.7568434095199D+01-0.7425305159081D+01 +-0.7283568734134D+01-0.7143237017788D+01-0.7004320359504D+01-0.6866827288485D+01 +-0.6730764549154D+01-0.6596137144079D+01-0.6462948384000D+01-0.6331199944618D+01 +-0.6200891929738D+01-0.6072022940407D+01-0.5944590149603D+01-0.5818589382077D+01 +-0.5694015198898D+01-0.5570860986265D+01-0.5449119048124D+01-0.5328780702141D+01 +-0.5209836378552D+01-0.5092275721431D+01-0.4976087691897D+01-0.4861260672787D+01 +-0.4747782574321D+01-0.4635640940271D+01-0.4524823054180D+01-0.4415316045125D+01 +-0.4307106992579D+01-0.4200183029885D+01-0.4094531445869D+01-0.3990139784139D+01 +-0.3886995939600D+01-0.3785088251726D+01-0.3684405594148D+01-0.3584937460106D+01 +-0.3486674043348D+01-0.3389606314047D+01-0.3293726089348D+01-0.3199026098161D+01 +-0.3105500039868D+01-0.3013142636618D+01-0.2921949678952D+01-0.2831918064533D+01 +-0.2743045829849D+01-0.2655332174788D+01-0.2568777480092D+01-0.2483383317815D+01 +-0.2399152454962D+01-0.2316088850658D+01-0.2234197647300D+01-0.2153485156272D+01 +-0.2073958838965D+01-0.1995627283965D+01-0.1918500181413D+01-0.1842588295670D+01 +-0.1767903437522D+01-0.1694458437274D+01-0.1622267120110D+01-0.1551344285168D+01 +-0.1481705689753D+01-0.1413368040087D+01-0.1346348989896D+01-0.1280667148051D+01 +-0.1216342096293D+01-0.1153394417906D+01-0.1091845737986D+01-0.1031718775725D+01 +-0.9730374088849D+00-0.9158267504133D+00-0.8601132368937D+00-0.8059247283301D+00 +-0.7532906185600D+00-0.7022419554295D+00-0.6528115697324D+00-0.6050342118170D+00 +-0.5589466947046D+00-0.5145880425354D+00-0.4719996431596D+00-0.4312254037239D+00 +-0.3923119081554D+00-0.3553085755132D+00-0.3202678182603D+00-0.2872451996103D+00 +-0.2562993012896D+00 + 0.0000000000000D+00 + 1012 0.5229258479779D+01 + 0.2150742905406D-04 0.2201934401975D-04 0.2254344131081D-04 0.2308001074793D-04 + 0.2362934904336D-04 0.2419175996469D-04 0.2476755450247D-04 0.2535705104185D-04 + 0.2596057553829D-04 0.2657846169737D-04 0.2721105115901D-04 0.2785869368592D-04 + 0.2852174735659D-04 0.2920057876285D-04 0.2989556321214D-04 0.3060708493450D-04 + 0.3133553729459D-04 0.3208132300862D-04 0.3284485436652D-04 0.3362655345933D-04 + 0.3442685241199D-04 0.3524619362168D-04 0.3608503000175D-04 0.3694382523153D-04 + 0.3782305401197D-04 0.3872320232740D-04 0.3964476771351D-04 0.4058825953159D-04 + 0.4155419924941D-04 0.4254312072866D-04 0.4355557051923D-04 0.4459210816046D-04 + 0.4565330648961D-04 0.4673975195749D-04 0.4785204495171D-04 0.4899080012754D-04 + 0.5015664674660D-04 0.5135022902361D-04 0.5257220648130D-04 0.5382325431382D-04 + 0.5510406375867D-04 0.5641534247751D-04 0.5775781494596D-04 0.5913222285265D-04 + 0.6053932550771D-04 0.6197990026094D-04 0.6345474292991D-04 0.6496466823815D-04 + 0.6651051026378D-04 0.6809312289875D-04 0.6971338031887D-04 0.7137217746513D-04 + 0.7307043053626D-04 0.7480907749308D-04 0.7658907857468D-04 0.7841141682692D-04 + 0.8027709864336D-04 0.8218715431905D-04 0.8414263861740D-04 0.8614463135050D-04 + 0.8819423797310D-04 0.9029259019072D-04 0.9244084658213D-04 0.9464019323656D-04 + 0.9689184440594D-04 0.9919704317265D-04 0.1015570621330D-03 0.1039732040969D-03 + 0.1064468028041D-03 0.1089792236573D-03 0.1115718644728D-03 0.1142261562483D-03 + 0.1169435639500D-03 0.1197255873171D-03 0.1225737616857D-03 0.1254896588328D-03 + 0.1284748878395D-03 0.1315310959746D-03 0.1346599695998D-03 0.1378632350954D-03 + 0.1411426598085D-03 0.1445000530233D-03 0.1479372669546D-03 0.1514561977641D-03 + 0.1550587866019D-03 0.1587470206711D-03 0.1625229343189D-03 0.1663886101524D-03 + 0.1703461801815D-03 0.1743978269887D-03 0.1785457849256D-03 0.1827923413391D-03 + 0.1871398378251D-03 0.1915906715131D-03 0.1961472963799D-03 0.2008122245952D-03 + 0.2055880278984D-03 0.2104773390081D-03 0.2154828530649D-03 0.2206073291079D-03 + 0.2258535915864D-03 0.2312245319072D-03 0.2367231100177D-03 0.2423523560273D-03 + 0.2481153718665D-03 0.2540153329849D-03 0.2600554900897D-03 0.2662391709247D-03 + 0.2725697820915D-03 0.2790508109132D-03 0.2856858273428D-03 0.2924784859153D-03 + 0.2994325277470D-03 0.3065517825810D-03 0.3138401708812D-03 0.3213017059753D-03 + 0.3289404962488D-03 0.3367607473897D-03 0.3447667646870D-03 0.3529629553823D-03 + 0.3613538310777D-03 0.3699440101989D-03 0.3787382205180D-03 0.3877413017338D-03 + 0.3969582081140D-03 0.4063940111991D-03 0.4160539025692D-03 0.4259431966769D-03 + 0.4360673337456D-03 0.4464318827368D-03 0.4570425443864D-03 0.4679051543124D-03 + 0.4790256861959D-03 0.4904102550358D-03 0.5020651204812D-03 0.5139966902408D-03 + 0.5262115235724D-03 0.5387163348549D-03 0.5515179972435D-03 0.5646235464104D-03 + 0.5780401843732D-03 0.5917752834137D-03 0.6058363900874D-03 0.6202312293275D-03 + 0.6349677086450D-03 0.6500539224267D-03 0.6654981563344D-03 0.6813088918062D-03 + 0.6974948106637D-03 0.7140647998269D-03 0.7310279561389D-03 0.7483935913040D-03 + 0.7661712369406D-03 0.7843706497523D-03 0.8030018168203D-03 0.8220749610184D-03 + 0.8416005465556D-03 0.8615892846469D-03 0.8820521393172D-03 0.9030003333406D-03 + 0.9244453543176D-03 0.9463989608946D-03 0.9688731891282D-03 0.9918803589975D-03 + 0.1015433081069D-02 0.1039544263315D-02 0.1064227118095D-02 0.1089495169290D-02 + 0.1115362259619D-02 0.1141842558105D-02 0.1168950567737D-02 0.1196701133289D-02 + 0.1225109449338D-02 0.1254191068456D-02 0.1283961909601D-02 0.1314438266696D-02 + 0.1345636817413D-02 0.1377574632157D-02 0.1410269183260D-02 0.1443738354387D-02 + 0.1478000450161D-02 0.1513074206015D-02 0.1548978798262D-02 0.1585733854409D-02 + 0.1623359463706D-02 0.1661876187936D-02 0.1701305072458D-02 0.1741667657505D-02 + 0.1782985989747D-02 0.1825282634108D-02 0.1868580685877D-02 0.1912903783076D-02 + 0.1958276119133D-02 0.2004722455835D-02 0.2052268136585D-02 0.2100939099962D-02 + 0.2150761893598D-02 0.2201763688371D-02 0.2253972292925D-02 0.2307416168524D-02 + 0.2362124444253D-02 0.2418126932561D-02 0.2475454145167D-02 0.2534137309329D-02 + 0.2594208384486D-02 0.2655700079287D-02 0.2718645869002D-02 0.2783080013344D-02 + 0.2849037574687D-02 0.2916554436715D-02 0.2985667323484D-02 0.3056413818931D-02 + 0.3128832386828D-02 0.3202962391187D-02 0.3278844117136D-02 0.3356518792272D-02 + 0.3436028608501D-02 0.3517416744371D-02 0.3600727387929D-02 0.3686005760082D-02 + 0.3773298138499D-02 0.3862651882061D-02 0.3954115455860D-02 0.4047738456768D-02 + 0.4143571639594D-02 0.4241666943825D-02 0.4342077520985D-02 0.4444857762604D-02 + 0.4550063328833D-02 0.4657751177697D-02 0.4767979595018D-02 0.4880808225009D-02 + 0.4996298101570D-02 0.5114511680279D-02 0.5235512871115D-02 0.5359367071918D-02 + 0.5486141202598D-02 0.5615903740128D-02 0.5748724754308D-02 0.5884675944352D-02 + 0.6023830676284D-02 0.6166264021183D-02 0.6312052794284D-02 0.6461275594959D-02 + 0.6614012847588D-02 0.6770346843357D-02 0.6930361782982D-02 0.7094143820394D-02 + 0.7261781107400D-02 0.7433363839342D-02 0.7608984301773D-02 0.7788736918176D-02 + 0.7972718298747D-02 0.8161027290261D-02 0.8353765027049D-02 0.8551034983111D-02 + 0.8752943025377D-02 0.8959597468160D-02 0.9171109128811D-02 0.9387591384603D-02 + 0.9609160230877D-02 0.9835934340477D-02 0.1006803512449D-01 0.1030558679431D-01 + 0.1054871642512D-01 0.1079755402073D-01 0.1105223257982D-01 0.1131288816368D-01 + 0.1157965996544D-01 0.1185269038080D-01 0.1213212508026D-01 0.1241811308303D-01 + 0.1271080683248D-01 0.1301036227325D-01 0.1331693893004D-01 0.1363069998813D-01 + 0.1395181237567D-01 0.1428044684765D-01 0.1461677807184D-01 0.1496098471648D-01 + 0.1531324953990D-01 0.1567375948211D-01 0.1604270575828D-01 0.1642028395434D-01 + 0.1680669412453D-01 0.1720214089116D-01 0.1760683354637D-01 0.1802098615621D-01 + 0.1844481766683D-01 0.1887855201303D-01 0.1932241822902D-01 0.1977665056168D-01 + 0.2024148858606D-01 0.2071717732349D-01 0.2120396736203D-01 0.2170211497964D-01 + 0.2221188226980D-01 0.2273353726988D-01 0.2326735409215D-01 0.2381361305754D-01 + 0.2437260083229D-01 0.2494461056731D-01 0.2552994204062D-01 0.2612890180262D-01 + 0.2674180332442D-01 0.2736896714935D-01 0.2801072104743D-01 0.2866740017320D-01 + 0.2933934722669D-01 0.3002691261781D-01 0.3073045463399D-01 0.3145033961141D-01 + 0.3218694210958D-01 0.3294064508962D-01 0.3371184009606D-01 0.3450092744243D-01 + 0.3530831640054D-01 0.3613442539362D-01 0.3697968219334D-01 0.3784452412086D-01 + 0.3872939825181D-01 0.3963476162544D-01 0.4056108145796D-01 0.4150883536008D-01 + 0.4247851155891D-01 0.4347060912422D-01 0.4448563819924D-01 0.4552412023590D-01 + 0.4658658823475D-01 0.4767358698962D-01 0.4878567333696D-01 0.4992341641008D-01 + 0.5108739789835D-01 0.5227821231135D-01 0.5349646724813D-01 0.5474278367169D-01 + 0.5601779618862D-01 0.5732215333417D-01 0.5865651786266D-01 0.6002156704340D-01 + 0.6141799296226D-01 0.6284650282880D-01 0.6430781928923D-01 0.6580268074515D-01 + 0.6733184167825D-01 0.6889607298100D-01 0.7049616229337D-01 0.7213291434581D-01 + 0.7380715130845D-01 0.7551971314661D-01 0.7727145798277D-01 0.7906326246509D-01 + 0.8089602214242D-01 0.8277065184608D-01 0.8468808607842D-01 0.8664927940812D-01 + 0.8865520687255D-01 0.9070686438707D-01 0.9280526916144D-01 0.9495146012343D-01 + 0.9714649834967D-01 0.9939146750384D-01 0.1016874742823D+00 0.1040356488672D+00 + 0.1064371453872D+00 0.1088931423856D+00 0.1114048432967D+00 0.1139734769295D+00 + 0.1166002979593D+00 0.1192865874273D+00 0.1220336532487D+00 0.1248428307276D+00 + 0.1277154830815D+00 0.1306530019730D+00 0.1336568080498D+00 0.1367283514936D+00 + 0.1398691125766D+00 0.1430806022269D+00 0.1463643626021D+00 0.1497219676713D+00 + 0.1531550238057D+00 0.1566651703780D+00 0.1602540803695D+00 0.1639234609870D+00 + 0.1676750542871D+00 0.1715106378098D+00 0.1754320252209D+00 0.1794410669619D+00 + 0.1835396509100D+00 0.1877297030455D+00 0.1920131881282D+00 0.1963921103827D+00 + 0.2008685141914D+00 0.2054444847966D+00 0.2101221490109D+00 0.2149036759359D+00 + 0.2197912776889D+00 0.2247872101386D+00 0.2298937736476D+00 0.2351133138248D+00 + 0.2404482222837D+00 0.2459009374100D+00 0.2514739451362D+00 0.2571697797240D+00 + 0.2629910245536D+00 0.2689403129212D+00 0.2750203288421D+00 0.2812338078623D+00 + 0.2875835378751D+00 0.2940723599454D+00 0.3007031691395D+00 0.3074789153608D+00 + 0.3144026041916D+00 0.3214772977396D+00 0.3287061154899D+00 0.3360922351618D+00 + 0.3436388935694D+00 0.3513493874868D+00 0.3592270745164D+00 0.3672753739607D+00 + 0.3754977676972D+00 0.3838978010545D+00 0.3924790836915D+00 0.4012452904770D+00 + 0.4102001623706D+00 0.4193475073036D+00 0.4286912010595D+00 0.4382351881538D+00 + 0.4479834827120D+00 0.4579401693452D+00 0.4681094040228D+00 0.4784954149418D+00 + 0.4891025033910D+00 0.4999350446102D+00 0.5109974886435D+00 0.5222943611853D+00 + 0.5338302644183D+00 0.5456098778426D+00 0.5576379590956D+00 0.5699193447601D+00 + 0.5824589511607D+00 0.5952617751475D+00 0.6083328948654D+00 0.6216774705074D+00 + 0.6353007450521D+00 0.6492080449824D+00 0.6634047809857D+00 0.6778964486325D+00 + 0.6926886290333D+00 0.7077869894721D+00 0.7231972840138D+00 0.7389253540860D+00 + 0.7549771290311D+00 0.7713586266289D+00 0.7880759535873D+00 0.8051353059985D+00 + 0.8225429697604D+00 0.8403053209599D+00 0.8584288262158D+00 0.8769200429817D+00 + 0.8957856198031D+00 0.9150322965294D+00 0.9346669044774D+00 0.9546963665439D+00 + 0.9751276972649D+00 0.9959680028197D+00 0.1017224480976D+01 0.1038904420974D+01 + 0.1061015203349D+01 0.1083564299686D+01 0.1106559272300D+01 0.1130007773859D+01 + 0.1153917546912D+01 0.1178296423354D+01 0.1203152323804D+01 0.1228493256899D+01 + 0.1254327318495D+01 0.1280662690787D+01 0.1307507641324D+01 0.1334870521934D+01 + 0.1362759767535D+01 0.1391183894856D+01 0.1420151501035D+01 0.1449671262109D+01 + 0.1479751931386D+01 0.1510402337698D+01 0.1541631383520D+01 0.1573448042969D+01 + 0.1605861359662D+01 0.1638880444440D+01 0.1672514472946D+01 0.1706772683055D+01 + 0.1741664372155D+01 0.1777198894269D+01 0.1813385657016D+01 0.1850234118409D+01 + 0.1887753783475D+01 0.1925954200705D+01 0.1964844958324D+01 0.2004435680370D+01 + 0.2044736022586D+01 0.2085755668115D+01 0.2127504322996D+01 0.2169991711448D+01 + 0.2213227570952D+01 0.2257221647108D+01 0.2301983688271D+01 0.2347523439972D+01 + 0.2393850639086D+01 0.2440975007782D+01 0.2488906247220D+01 0.2537654031002D+01 + 0.2587227998372D+01 0.2637637747157D+01 0.2688892826442D+01 0.2741002728983D+01 + 0.2793976883341D+01 0.2847824645743D+01 0.2902555291652D+01 0.2958178007063D+01 + 0.3014701879494D+01 0.3072135888684D+01 0.3130488897001D+01 0.3189769639525D+01 + 0.3249986713841D+01 0.3311148569513D+01 0.3373263497233D+01 0.3436339617667D+01 + 0.3500384869964D+01 0.3565406999951D+01 0.3631413547991D+01 0.3698411836514D+01 + 0.3766408957221D+01 0.3835411757947D+01 0.3905426829193D+01 0.3976460490322D+01 + 0.4048518775419D+01 0.4121607418815D+01 0.4195731840277D+01 0.4270897129857D+01 + 0.4347108032420D+01 0.4424368931831D+01 0.4502683834816D+01 0.4582056354503D+01 + 0.4662489693636D+01 0.4743986627475D+01 0.4826549486387D+01 0.4910180138127D+01 + 0.4994879969825D+01 0.5080649869681D+01 0.5167490208373D+01 0.5255400820202D+01 + 0.5344380983962D+01 0.5434429403565D+01 0.5525544188426D+01 0.5617722833617D+01 + 0.5710962199815D+01 0.5805258493041D+01 0.5900607244231D+01 0.5997003288635D+01 + 0.6094440745069D+01 0.6192912995049D+01 0.6292412661814D+01 0.6392931589269D+01 + 0.6494460820874D+01 0.6596990578488D+01 0.6700510241224D+01 0.6805008324307D+01 + 0.6910472457995D+01 0.7016889366579D+01 0.7124244847491D+01 0.7232523750568D+01 + 0.7341709957494D+01 0.7451786361463D+01 0.7562734847107D+01 0.7674536270712D+01 + 0.7787170440791D+01 0.7900616099026D+01 0.8014850901658D+01 0.8129851401340D+01 + 0.8245593029526D+01 0.8362050079436D+01 0.8479195689649D+01 0.8597001828383D+01 + 0.8715439278509D+01 0.8834477623371D+01 0.8954085233454D+01 0.9074229253973D+01 + 0.9194875593440D+01 0.9315988913276D+01 0.9437532618530D+01 0.9559468849772D+01 + 0.9681758476237D+01 0.9804361090277D+01 0.9927235003199D+01 0.1005033724256D+02 + 0.1017362355101D+02 0.1029704838669D+02 0.1042056492540D+02 0.1054412506444D+02 + 0.1066767942831D+02 0.1079117737637D+02 0.1091456701244D+02 0.1103779519646D+02 + 0.1116080755839D+02 0.1128354851420D+02 0.1140596128432D+02 0.1152798791434D+02 + 0.1164956929827D+02 0.1177064520433D+02 0.1189115430327D+02 0.1201103419951D+02 + 0.1213022146500D+02 0.1224865167586D+02 0.1236625945201D+02 0.1248297849976D+02 + 0.1259874165744D+02 0.1271348094411D+02 0.1282712761148D+02 0.1293961219902D+02 + 0.1305086459240D+02 0.1316081408518D+02 0.1326938944391D+02 0.1337651897664D+02 + 0.1348213060491D+02 0.1358615193909D+02 0.1368851035736D+02 0.1378913308811D+02 + 0.1388794729589D+02 0.1398488017086D+02 0.1407985902179D+02 0.1417281137257D+02 + 0.1426366506212D+02 0.1435234834789D+02 0.1443879001264D+02 0.1452291947466D+02 + 0.1460466690129D+02 0.1468396332564D+02 0.1476074076649D+02 0.1483493235126D+02 + 0.1490647244192D+02 0.1497529676373D+02 0.1504134253675D+02 0.1510454860984D+02 + 0.1516485559720D+02 0.1522220601698D+02 0.1527654443219D+02 0.1532781759325D+02 + 0.1537597458241D+02 0.1542096695946D+02 0.1546274890874D+02 0.1550127738702D+02 + 0.1553651227211D+02 0.1556841651189D+02 0.1559695627334D+02 0.1562210109145D+02 + 0.1564382401753D+02 0.1566210176664D+02 0.1567691486377D+02 0.1568824778841D+02 + 0.1569608911712D+02 0.1570043166360D+02 0.1570127261607D+02 0.1569861367129D+02 + 0.1569246116496D+02 0.1568282619787D+02 0.1566972475757D+02 0.1565317783486D+02 + 0.1563321153475D+02 0.1560985718135D+02 0.1558315141624D+02 0.1555313628970D+02 + 0.1551985934445D+02 0.1548337369123D+02 0.1544373807583D+02 0.1540101693692D+02 + 0.1535528045436D+02 0.1530660458716D+02 0.1525507110098D+02 0.1520076758423D+02 + 0.1514378745267D+02 0.1508422994170D+02 0.1502220008605D+02 0.1495780868635D+02 + 0.1489117226206D+02 0.1482241299046D+02 0.1475165863115D+02 0.1467904243575D+02 + 0.1460470304238D+02 0.1452878435463D+02 0.1445143540465D+02 0.1437281020013D+02 + 0.1429306755483D+02 0.1421237090260D+02 0.1413088809452D+02 0.1404879117925D+02 + 0.1396625616625D+02 0.1388346277207D+02 0.1380059414952D+02 0.1371783659988D+02 + 0.1363537926825D+02 0.1355341382212D+02 0.1347213411351D+02 0.1339173582480D+02 + 0.1331241609871D+02 0.1323437315279D+02 0.1315780587881D+02 0.1308291342766D+02 + 0.1300989478035D+02 0.1293894830568D+02 0.1287027130535D+02 0.1280405954732D+02 + 0.1274050678825D+02 0.1267980428593D+02 0.1262214030269D+02 0.1256769960087D+02 + 0.1251666293145D+02 0.1246920651702D+02 0.1242550153038D+02 0.1238571356999D+02 + 0.1235000213372D+02 0.1231852009235D+02 0.1229141316414D+02 0.1226881939222D+02 + 0.1225086862623D+02 0.1223768200985D+02 0.1222937147599D+02 0.1222603925117D+02 + 0.1222777737106D+02 0.1223466720868D+02 0.1224677901729D+02 0.1226417148958D+02 + 0.1228689133517D+02 0.1231497287802D+02 0.1234843767581D+02 0.1238729416297D+02 + 0.1243153731911D+02 0.1248114836487D+02 0.1253609448665D+02 0.1259632859227D+02 + 0.1266178909890D+02 0.1273239975523D+02 0.1280806949923D+02 0.1288869235315D+02 + 0.1297414735711D+02 0.1306429854274D+02 0.1315899494816D+02 0.1325807067533D+02 + 0.1336134499111D+02 0.1346862247282D+02 0.1357969319917D+02 0.1369433298744D+02 + 0.1381230367740D+02 0.1393335346243D+02 0.1405721726828D+02 0.1418361717951D+02 + 0.1431226291376D+02 0.1444285234362D+02 0.1457507206581D+02 0.1470859801733D+02 + 0.1484309613763D+02 0.1497822307639D+02 0.1511362694548D+02 0.1524894811426D+02 + 0.1538382004666D+02 0.1551787017849D+02 0.1565072083339D+02 0.1578199017530D+02 + 0.1591129319546D+02 0.1603824273170D+02 0.1616245051740D+02 0.1628352825765D+02 + 0.1640108872963D+02 0.1651474690448D+02 0.1662412108723D+02 0.1672883407174D+02 + 0.1682851430716D+02 0.1692279707220D+02 0.1701132565381D+02 0.1709375252614D+02 + 0.1716974052608D+02 0.1723896402125D+02 0.1730111006644D+02 0.1735587954416D+02 + 0.1740298828530D+02 0.1744216816538D+02 0.1747316817225D+02 0.1749575544089D+02 + 0.1750971625093D+02 0.1751485698260D+02 0.1751100502688D+02 0.1749800964559D+02 + 0.1747574277733D+02 0.1744409978499D+02 0.1740300014123D+02 0.1735238804766D+02 + 0.1729223298439D+02 0.1722253018618D+02 0.1714330104180D+02 0.1705459341368D+02 + 0.1695648187457D+02 0.1684906785873D+02 0.1673247972505D+02 0.1660687272995D+02 + 0.1647242890818D+02 0.1632935685981D+02 0.1617789144222D+02 0.1601829336618D+02 + 0.1585084869528D+02 0.1567586824865D+02 0.1549368690699D+02 0.1530466282265D+02 + 0.1510917653451D+02 0.1490762998916D+02 0.1470044547022D+02 0.1448806443791D+02 + 0.1427094628160D+02 0.1404956698852D+02 0.1382441773199D+02 0.1359600338336D+02 + 0.1336484095192D+02 0.1313145795774D+02 0.1289639074258D+02 0.1266018272468D+02 + 0.1242338260337D+02 0.1218654252002D+02 0.1195021618209D+02 0.1171495695744D+02 + 0.1148131594627D+02 0.1124984003849D+02 0.1102106996440D+02 0.1079553834688D+02 + 0.1057376776347D+02 0.1035626882667D+02 0.1014353829125D+02 0.9936057196884D+01 + 0.9734289054994D+01 0.9538678088120D+01 0.9349647530399D+01 0.9167597997384D+01 + 0.8992905933301D+01 0.8825922143594D+01 0.8666970420224D+01 0.8516346266999D+01 + 0.8374315731611D+01 0.8241114350747D+01 0.8116946214096D+01 0.8001983152570D+01 + 0.7896364055459D+01 0.7800194320670D+01 0.7713545441561D+01 0.7636454733225D+01 + 0.7568925200401D+01 0.7510925548528D+01 0.7462390338698D+01 0.7423220286625D+01 + 0.7393282704950D+01 0.7372412087556D+01 0.7360410833787D+01 0.7357050109802D+01 + 0.7362070843542D+01 0.7375184849138D+01 0.7396076075866D+01 0.7424401976120D+01 + 0.7459794986211D+01 0.7501864113185D+01 0.7550196620265D+01 0.7604359802945D+01 + 0.7663902847256D+01 0.7728358761219D+01 0.7797246370063D+01 0.7870072365405D+01 + 0.7946333398216D+01 0.8025518205140D+01 0.8107109757504D+01 0.8190587422172D+01 + 0.8275429123337D+01 0.8361113494303D+01 0.8447122008353D+01 0.8532941077928D+01 + 0.8618064111536D+01 0.8701993518075D+01 0.8784242648578D+01 0.8864337665829D+01 + 0.8941819332731D+01 0.9016244710878D+01 0.9087188761372D+01 0.9154245840560D+01 + 0.9217031084099D+01 0.9275181673474D+01 0.9328357979881D+01 0.9376244581215D+01 + 0.9418551148709D+01 0.9455013200639D+01 0.9485392721360D+01 0.9509478644797D+01 + 0.9527087202359D+01 0.9538062136102D+01 0.9542274778747D+01 0.9539624002998D+01 + 0.9530036043300D+01 0.9513464193959D+01 0.9489888388159D+01 0.9459314663078D+01 + 0.9421774516843D+01 0.9377324163609D+01 0.9326043693467D+01 0.9268036144314D+01 + 0.9203426493115D+01 0.9132360574297D+01 0.9055003933175D+01 0.8971540622481D+01 + 0.8882171950151D+01 0.8787115186520D+01 0.8686602239071D+01 0.8580878302773D+01 + 0.8470200493895D+01 0.8354836475027D+01 0.8235063078754D+01 0.8111164937189D+01 + 0.7983433124252D+01 0.7852163817216D+01 0.7717656983696D+01 0.7580215099831D+01 + 0.7440141905014D+01 0.7297741198086D+01 0.7153315679440D+01 0.7007165843079D+01 + 0.6859588922166D+01 0.6710877891167D+01 0.6561320527250D+01 0.6411198533128D+01 + 0.6260786723101D+01 0.6110352273646D+01 0.5960154039458D+01 0.5810441935471D+01 + 0.5661456384987D+01 0.5513427833700D+01 0.5366576329042D+01 0.5221111163955D+01 + 0.5077230583918D+01 0.4935121555751D+01 0.4794959596475D+01 0.4656908660288D+01 + 0.4521121081498D+01 0.4387737571052D+01 0.4256887264186D+01 0.4128687816522D+01 + 0.4003245545873D+01 0.3880655616880D+01 0.3761002265561D+01 0.3644359060777D+01 + 0.3530789199588D+01 0.3420345833472D+01 0.3313072422343D+01 0.3209003113371D+01 + 0.3108163141592D+01 0.3010569249384D+01 0.2916230121919D+01 0.2825146835796D+01 + 0.2737313318133D+01 0.2652716813508D+01 0.2571338356232D+01 0.2493153245580D+01 + 0.2418131521695D+01 0.2346238440047D+01 0.2277434942461D+01 0.2211678122838D+01 + 0.2148921685899D+01 0.2089116397376D+01 0.2032210524266D+01 0.1978150263893D+01 + 0.1926880160684D+01 0.1878343509721D+01 0.1832482746269D+01 0.1789239820638D+01 + 0.1748556557871D+01 0.1710375001879D+01 0.1674637743804D+01 0.1641288234472D+01 + 0.1610271080956D+01 0.1581532327338D+01 0.1555019719890D+01 0.1530682956958D+01 + 0.1508473923914D+01 0.1488346913611D+01 0.1470258832820D+01 0.1454169395155D+01 + 0.1440041301042D+01 0.1427840405245D+01 0.1417535872504D+01 0.1409100321753D+01 + 0.1402509959377D+01 0.1397744701874D+01 0.1394788288181D+01 0.1393628381826D+01 + 0.1394256662892D+01 0.1396668909610D+01 0.1400865069190D+01 0.1406849317222D+01 + 0.1414629369614D+01 0.1424336942263D+01 0.1436096575202D+01 0.1449912447024D+01 + 0.1465794674727D+01 0.1483759333931D+01 0.1503828494539D+01 0.1526030271798D+01 + 0.1550398892649D+01 0.1576974777196D+01 0.1605804635055D+01 0.1636941576215D+01 + 7 1012 + 1 0 -1 -511.89194 + 2 0 -1 -58.90181 + 2 1 1 -50.68932 + 2 1 -2 -49.77537 + 3 0 -1 -5.73317 + 3 1 1 -3.34334 + 3 1 -2 -3.22919 + 0.2122975645015D-04 0.2173507709867D-04 0.2225242316243D-04 0.2278208072829D-04 + 0.2332434268594D-04 0.2387950888954D-04 0.2444788632325D-04 0.2502978927059D-04 + 0.2562553948791D-04 0.2623546638192D-04 0.2685990719144D-04 0.2749920717353D-04 + 0.2815371979393D-04 0.2882380692207D-04 0.2950983903075D-04 0.3021219540050D-04 + 0.3093126432877D-04 0.3166744334418D-04 0.3242113942573D-04 0.3319276922733D-04 + 0.3398275930755D-04 0.3479154636487D-04 0.3561957747857D-04 0.3646731035519D-04 + 0.3733521358096D-04 0.3822376688016D-04 0.3913346137963D-04 0.4006479987955D-04 + 0.4101829713060D-04 0.4199448011777D-04 0.4299388835081D-04 0.4401707416166D-04 + 0.4506460300883D-04 0.4613705378910D-04 0.4723501915650D-04 0.4835910584899D-04 + 0.4950993502270D-04 0.5068814259429D-04 0.5189437959126D-04 0.5312931251066D-04 + 0.5439362368626D-04 0.5568801166444D-04 0.5701319158897D-04 0.5836989559491D-04 + 0.5975887321186D-04 0.6118089177673D-04 0.6263673685632D-04 0.6412721267990D-04 + 0.6565314258201D-04 0.6721536945580D-04 0.6881475621705D-04 0.7045218627922D-04 + 0.7212856403973D-04 0.7384481537777D-04 0.7560188816385D-04 0.7740075278149D-04 + 0.7924240266119D-04 0.8112785482706D-04 0.8305815045642D-04 0.8503435545263D-04 + 0.8705756103141D-04 0.8912888432116D-04 0.9124946897738D-04 0.9342048581165D-04 + 0.9564313343555D-04 0.9791863891974D-04 0.1002482584687D-03 0.1026332781112D-03 + 0.1050750144077D-03 0.1075748151735D-03 0.1101340602203D-03 0.1127541621137D-03 + 0.1154365669501D-03 0.1181827551510D-03 0.1209942422769D-03 0.1238725798590D-03 + 0.1268193562527D-03 0.1298361975089D-03 0.1329247682680D-03 0.1360867726735D-03 + 0.1393239553083D-03 0.1426381021518D-03 0.1460310415612D-03 0.1495046452749D-03 + 0.1530608294397D-03 0.1567015556625D-03 0.1604288320871D-03 0.1642447144955D-03 + 0.1681513074364D-03 0.1721507653792D-03 0.1762452938963D-03 0.1804371508722D-03 + 0.1847286477421D-03 0.1891221507592D-03 0.1936200822920D-03 0.1982249221522D-03 + 0.2029392089542D-03 0.2077655415060D-03 0.2127065802334D-03 0.2177650486382D-03 + 0.2229437347894D-03 0.2282454928513D-03 0.2336732446459D-03 0.2392299812538D-03 + 0.2449187646513D-03 0.2507427293871D-03 0.2567050842979D-03 0.2628091142650D-03 + 0.2690581820118D-03 0.2754557299435D-03 0.2820052820308D-03 0.2887104457371D-03 + 0.2955749139921D-03 0.3026024672103D-03 0.3097969753590D-03 0.3171624000731D-03 + 0.3247027968207D-03 0.3324223171196D-03 0.3403252108055D-03 0.3484158283536D-03 + 0.3566986232552D-03 0.3651781544500D-03 0.3738590888149D-03 0.3827462037126D-03 + 0.3918443895988D-03 0.4011586526914D-03 0.4106941177020D-03 0.4204560306321D-03 + 0.4304497616342D-03 0.4406808079408D-03 0.4511547968612D-03 0.4618774888502D-03 + 0.4728547806468D-03 0.4840927084883D-03 0.4955974513988D-03 0.5073753345551D-03 + 0.5194328327314D-03 0.5317765738249D-03 0.5444133424641D-03 0.5573500837015D-03 + 0.5705939067925D-03 0.5841520890639D-03 0.5980320798714D-03 0.6122415046513D-03 + 0.6267881690659D-03 0.6416800632466D-03 0.6569253661363D-03 0.6725324499326D-03 + 0.6885098846360D-03 0.7048664427037D-03 0.7216111038125D-03 0.7387530597330D-03 + 0.7563017193176D-03 0.7742667136049D-03 0.7926579010441D-03 0.8114853728404D-03 + 0.8307594584254D-03 0.8504907310562D-03 0.8706900135433D-03 0.8913683841142D-03 + 0.9125371824119D-03 0.9342080156346D-03 0.9563927648179D-03 0.9791035912634D-03 + 0.1002352943117D-02 0.1026153562102D-02 0.1050518490405D-02 0.1075461077728D-02 + 0.1100994988496D-02 0.1127134209246D-02 0.1153893056171D-02 0.1181286182852D-02 + 0.1209328588167D-02 0.1238035624379D-02 0.1267423005415D-02 0.1297506815344D-02 + 0.1328303517037D-02 0.1359829961041D-02 0.1392103394654D-02 0.1425141471212D-02 + 0.1458962259585D-02 0.1493584253904D-02 0.1529026383504D-02 0.1565308023106D-02 + 0.1602449003221D-02 0.1640469620811D-02 0.1679390650189D-02 0.1719233354165D-02 + 0.1760019495464D-02 0.1801771348394D-02 0.1844511710794D-02 0.1888263916250D-02 + 0.1933051846599D-02 0.1978899944720D-02 0.2025833227614D-02 0.2073877299798D-02 + 0.2123058366995D-02 0.2173403250151D-02 0.2224939399761D-02 0.2277694910540D-02 + 0.2331698536421D-02 0.2386979705903D-02 0.2443568537747D-02 0.2501495857040D-02 + 0.2560793211623D-02 0.2621492888896D-02 0.2683627933011D-02 0.2747232162458D-02 + 0.2812340188056D-02 0.2878987431352D-02 0.2947210143447D-02 0.3017045424251D-02 + 0.3088531242177D-02 0.3161706454285D-02 0.3236610826892D-02 0.3313285056646D-02 + 0.3391770792086D-02 0.3472110655691D-02 0.3554348266436D-02 0.3638528262858D-02 + 0.3724696326649D-02 0.3812899206788D-02 0.3903184744224D-02 0.3995601897109D-02 + 0.4090200766624D-02 0.4187032623373D-02 0.4286149934389D-02 0.4387606390746D-02 + 0.4491456935804D-02 0.4597757794082D-02 0.4706566500803D-02 0.4817941932088D-02 + 0.4931944335851D-02 0.5048635363379D-02 0.5168078101634D-02 0.5290337106279D-02 + 0.5415478435454D-02 0.5543569684307D-02 0.5674680020311D-02 0.5808880219367D-02 + 0.5946242702730D-02 0.6086841574754D-02 0.6230752661494D-02 0.6378053550168D-02 + 0.6528823629508D-02 0.6683144131013D-02 0.6841098171130D-02 0.7002770794372D-02 + 0.7168249017405D-02 0.7337621874121D-02 0.7510980461712D-02 0.7688417987773D-02 + 0.7870029818463D-02 0.8055913527720D-02 0.8246168947593D-02 0.8440898219673D-02 + 0.8640205847678D-02 0.8844198751201D-02 0.9052986320644D-02 0.9266680473381D-02 + 0.9485395711148D-02 0.9709249178711D-02 0.9938360723829D-02 0.1017285295853D-01 + 0.1041285132175D-01 0.1065848414335D-01 0.1090988270951D-01 0.1116718132961D-01 + 0.1143051740455D-01 0.1170003149653D-01 0.1197586740047D-01 0.1225817221684D-01 + 0.1254709642620D-01 0.1284279396532D-01 0.1314542230495D-01 0.1345514252930D-01 + 0.1377211941725D-01 0.1409652152530D-01 0.1442852127232D-01 0.1476829502620D-01 + 0.1511602319226D-01 0.1547189030365D-01 0.1583608511371D-01 0.1620880069022D-01 + 0.1659023451183D-01 0.1698058856639D-01 0.1738006945154D-01 0.1778888847734D-01 + 0.1820726177118D-01 0.1863541038486D-01 0.1907356040402D-01 0.1952194305980D-01 + 0.1998079484302D-01 0.2045035762063D-01 0.2093087875471D-01 0.2142261122400D-01 + 0.2192581374792D-01 0.2244075091329D-01 0.2296769330365D-01 0.2350691763133D-01 + 0.2405870687229D-01 0.2462335040374D-01 0.2520114414469D-01 0.2579239069942D-01 + 0.2639739950387D-01 0.2701648697516D-01 0.2764997666416D-01 0.2829819941123D-01 + 0.2896149350513D-01 0.2964020484531D-01 0.3033468710740D-01 0.3104530191220D-01 + 0.3177241899806D-01 0.3251641639684D-01 0.3327768061342D-01 0.3405660680881D-01 + 0.3485359898710D-01 0.3566907018606D-01 0.3650344267166D-01 0.3735714813647D-01 + 0.3823062790211D-01 0.3912433312562D-01 0.4003872501011D-01 0.4097427501948D-01 + 0.4193146509749D-01 0.4291078789111D-01 0.4391274697832D-01 0.4493785710035D-01 + 0.4598664439858D-01 0.4705964665594D-01 0.4815741354312D-01 0.4928050686955D-01 + 0.5042950083923D-01 0.5160498231153D-01 0.5280755106696D-01 0.5403782007813D-01 + 0.5529641578584D-01 0.5658397838041D-01 0.5790116208843D-01 0.5924863546488D-01 + 0.6062708169076D-01 0.6203719887636D-01 0.6347970037015D-01 0.6495531507346D-01 + 0.6646478776099D-01 0.6800887940725D-01 0.6958836751900D-01 0.7120404647380D-01 + 0.7285672786470D-01 0.7454724085125D-01 0.7627643251682D-01 0.7804516823229D-01 + 0.7985433202641D-01 0.8170482696258D-01 0.8359757552242D-01 0.8553351999606D-01 + 0.8751362287932D-01 0.8953886727772D-01 0.9161025731761D-01 0.9372881856432D-01 + 0.9589559844749D-01 0.9811166669365D-01 0.1003781157661D+00 0.1026960613124D+00 + 0.1050666426187D+00 0.1074910230727D+00 0.1099703906329D+00 0.1125059583070D+00 + 0.1150989646366D+00 0.1177506741909D+00 0.1204623780676D+00 0.1232353944021D+00 + 0.1260710688845D+00 0.1289707752849D+00 0.1319359159864D+00 0.1349679225270D+00 + 0.1380682561490D+00 0.1412384083570D+00 0.1444799014844D+00 0.1477942892678D+00 + 0.1511831574303D+00 0.1546481242725D+00 0.1581908412731D+00 0.1618129936965D+00 + 0.1655163012104D+00 0.1693025185104D+00 0.1731734359544D+00 0.1771308802047D+00 + 0.1811767148790D+00 0.1853128412094D+00 0.1895411987104D+00 0.1938637658552D+00 + 0.1982825607598D+00 0.2027996418767D+00 0.2074171086957D+00 0.2121371024533D+00 + 0.2169618068509D+00 0.2218934487801D+00 0.2269342990569D+00 0.2320866731634D+00 + 0.2373529319974D+00 0.2427354826295D+00 0.2482367790682D+00 0.2538593230323D+00 + 0.2596056647304D+00 0.2654784036474D+00 0.2714801893389D+00 0.2776137222308D+00 + 0.2838817544268D+00 0.2902870905217D+00 0.2968325884206D+00 0.3035211601645D+00 + 0.3103557727607D+00 0.3173394490192D+00 0.3244752683937D+00 0.3317663678273D+00 + 0.3392159426028D+00 0.3468272471962D+00 0.3546035961349D+00 0.3625483648577D+00 + 0.3706649905790D+00 0.3789569731540D+00 0.3874278759464D+00 0.3960813266976D+00 + 0.4049210183955D+00 0.4139507101454D+00 0.4231742280388D+00 0.4325954660221D+00 + 0.4422183867640D+00 0.4520470225197D+00 0.4620854759931D+00 0.4723379211946D+00 + 0.4828086042953D+00 0.4935018444749D+00 0.5044220347646D+00 0.5155736428822D+00 + 0.5269612120602D+00 0.5385893618646D+00 0.5504627890040D+00 0.5625862681281D+00 + 0.5749646526146D+00 0.5876028753427D+00 0.6005059494532D+00 0.6136789690924D+00 + 0.6271271101407D+00 0.6408556309226D+00 0.6548698728981D+00 0.6691752613333D+00 + 0.6837773059493D+00 0.6986816015479D+00 0.7138938286123D+00 0.7294197538810D+00 + 0.7452652308942D+00 0.7614362005101D+00 0.7779386913894D+00 0.7947788204470D+00 + 0.8119627932680D+00 0.8294969044866D+00 0.8473875381261D+00 0.8656411678975D+00 + 0.8842643574549D+00 0.9032637606047D+00 0.9226461214683D+00 0.9424182745935D+00 + 0.9625871450140D+00 0.9831597482541D+00 0.1004143190275D+01 0.1025544667362D+01 + 0.1047371465949D+01 0.1069630962376D+01 0.1092330622582D+01 0.1115478001718D+01 + 0.1139080743699D+01 0.1163146580667D+01 0.1187683332379D+01 0.1212698905512D+01 + 0.1238201292877D+01 0.1264198572546D+01 0.1290698906886D+01 0.1317710541494D+01 + 0.1345241804028D+01 0.1373301102944D+01 0.1401896926110D+01 0.1431037839321D+01 + 0.1460732484690D+01 0.1490989578921D+01 0.1521817911461D+01 0.1553226342519D+01 + 0.1585223800953D+01 0.1617819282025D+01 0.1651021845012D+01 0.1684840610666D+01 + 0.1719284758534D+01 0.1754363524114D+01 0.1790086195862D+01 0.1826462112019D+01 + 0.1863500657290D+01 0.1901211259327D+01 0.1939603385053D+01 0.1978686536792D+01 + 0.2018470248210D+01 0.2058964080068D+01 0.2100177615772D+01 0.2142120456722D+01 + 0.2184802217451D+01 0.2228232520549D+01 0.2272420991371D+01 0.2317377252521D+01 + 0.2363110918097D+01 0.2409631587718D+01 0.2456948840298D+01 0.2505072227579D+01 + 0.2554011267414D+01 0.2603775436800D+01 0.2654374164640D+01 0.2705816824249D+01 + 0.2758112725590D+01 0.2811271107225D+01 0.2865301128002D+01 0.2920211858443D+01 + 0.2976012271854D+01 0.3032711235135D+01 0.3090317499294D+01 0.3148839689666D+01 + 0.3208286295814D+01 0.3268665661132D+01 0.3329985972130D+01 0.3392255247403D+01 + 0.3455481326284D+01 0.3519671857166D+01 0.3584834285516D+01 0.3650975841540D+01 + 0.3718103527540D+01 0.3786224104928D+01 0.3855344080910D+01 0.3925469694842D+01 + 0.3996606904248D+01 0.4068761370505D+01 0.4141938444201D+01 0.4216143150155D+01 + 0.4291380172106D+01 0.4367653837082D+01 0.4444968099432D+01 0.4523326524540D+01 + 0.4602732272224D+01 0.4683188079814D+01 0.4764696244923D+01 0.4847258607911D+01 + 0.4930876534058D+01 0.5015550895439D+01 0.5101282052526D+01 0.5188069835504D+01 + 0.5275913525340D+01 0.5364811834582D+01 0.5454762887935D+01 0.5545764202593D+01 + 0.5637812668364D+01 0.5730904527600D+01 0.5825035354930D+01 0.5920200036841D+01 + 0.6016392751096D+01 0.6113606946037D+01 0.6211835319763D+01 0.6311069799237D+01 + 0.6411301519318D+01 0.6512520801757D+01 0.6614717134178D+01 0.6717879149076D+01 + 0.6821994602856D+01 0.6927050354936D+01 0.7033032346971D+01 0.7139925582197D+01 + 0.7247714104955D+01 0.7356380980422D+01 0.7465908274590D+01 0.7576277034522D+01 + 0.7687467268944D+01 0.7799457929201D+01 0.7912226890625D+01 0.8025750934367D+01 + 0.8140005729731D+01 0.8254965817070D+01 0.8370604591283D+01 0.8486894285977D+01 + 0.8603805958343D+01 0.8721309474805D+01 0.8839373497487D+01 0.8957965471583D+01 + 0.9077051613664D+01 0.9196596901005D+01 0.9316565061973D+01 0.9436918567578D+01 + 0.9557618624205D+01 0.9678625167647D+01 0.9799896858462D+01 0.9921391078761D+01 + 0.1004306393048D+02 0.1016487023519D+02 0.1028676353561D+02 0.1040869609872D+02 + 0.1053061892078D+02 0.1065248173410D+02 0.1077423301584D+02 0.1089581999877D+02 + 0.1101718868413D+02 0.1113828385666D+02 0.1125904910191D+02 0.1137942682584D+02 + 0.1149935827678D+02 0.1161878356999D+02 0.1173764171462D+02 0.1185587064341D+02 + 0.1197340724503D+02 0.1209018739920D+02 0.1220614601465D+02 0.1232121706995D+02 + 0.1243533365740D+02 0.1254842802982D+02 0.1266043165050D+02 0.1277127524634D+02 + 0.1288088886404D+02 0.1298920192971D+02 0.1309614331160D+02 0.1320164138629D+02 + 0.1330562410812D+02 0.1340801908212D+02 0.1350875364026D+02 0.1360775492116D+02 + 0.1370494995324D+02 0.1380026574132D+02 0.1389362935662D+02 0.1398496803019D+02 + 0.1407420924981D+02 0.1416128086012D+02 0.1424611116627D+02 0.1432862904069D+02 + 0.1440876403324D+02 0.1448644648440D+02 0.1456160764164D+02 0.1463417977876D+02 + 0.1470409631813D+02 0.1477129195572D+02 0.1483570278883D+02 0.1489726644633D+02 + 0.1495592222127D+02 0.1501161120574D+02 0.1506427642781D+02 0.1511386299027D+02 + 0.1516031821110D+02 0.1520359176531D+02 0.1524363582812D+02 0.1528040521898D+02 + 0.1531385754641D+02 0.1534395335325D+02 0.1537065626208D+02 0.1539393312048D+02 + 0.1541375414585D+02 0.1543009306950D+02 0.1544292727951D+02 0.1545223796216D+02 + 0.1545801024155D+02 0.1546023331695D+02 0.1545890059744D+02 0.1545400983365D+02 + 0.1544556324596D+02 0.1543356764880D+02 0.1541803457065D+02 0.1539898036925D+02 + 0.1537642634154D+02 0.1535039882796D+02 0.1532092931044D+02 0.1528805450387D+02 + 0.1525181644030D+02 0.1521226254557D+02 0.1516944570778D+02 0.1512342433713D+02 + 0.1507426241669D+02 0.1502202954350D+02 0.1496680095964D+02 0.1490865757272D+02 + 0.1484768596530D+02 0.1478397839284D+02 0.1471763276969D+02 0.1464875264266D+02 + 0.1457744715182D+02 0.1450383097801D+02 0.1442802427679D+02 0.1435015259838D+02 + 0.1427034679327D+02 0.1418874290321D+02 0.1410548203722D+02 0.1402071023247D+02 + 0.1393457829969D+02 0.1384724165293D+02 0.1375886012364D+02 0.1366959775879D+02 + 0.1357962260304D+02 0.1348910646488D+02 0.1339822466686D+02 0.1330715577980D+02 + 0.1321608134121D+02 0.1312518555808D+02 0.1303465499419D+02 0.1294467824221D+02 + 0.1285544558101D+02 0.1276714861841D+02 0.1267997991994D+02 0.1259413262403D+02 + 0.1250980004419D+02 0.1242717525885D+02 0.1234645068948D+02 0.1226781766776D+02 + 0.1219146599257D+02 0.1211758347770D+02 0.1204635549121D+02 0.1197796448732D+02 + 0.1191258953197D+02 0.1185040582321D+02 0.1179158420730D+02 0.1173629069208D+02 + 0.1168468595856D+02 0.1163692487226D+02 0.1159315599549D+02 0.1155352110209D+02 + 0.1151815469598D+02 0.1148718353503D+02 0.1146072616178D+02 0.1143889244247D+02 + 0.1142178311602D+02 0.1140948935454D+02 0.1140209233686D+02 0.1139966283678D+02 + 0.1140226082774D+02 0.1140993510519D+02 0.1142272292875D+02 0.1144064968524D+02 + 0.1146372857460D+02 0.1149196031991D+02 0.1152533290326D+02 0.1156382132880D+02 + 0.1160738741454D+02 0.1165597961412D+02 0.1170953287012D+02 0.1176796849989D+02 + 0.1183119411535D+02 0.1189910357777D+02 0.1197157698856D+02 0.1204848071701D+02 + 0.1212966746596D+02 0.1221497637600D+02 0.1230423316888D+02 0.1239725033077D+02 + 0.1249382733567D+02 0.1259375090926D+02 0.1269679533346D+02 0.1280272279167D+02 + 0.1291128375448D+02 0.1302221740584D+02 0.1313525210912D+02 0.1325010591253D+02 + 0.1336648709337D+02 0.1348409474012D+02 0.1360261937149D+02 0.1372174359123D+02 + 0.1384114277758D+02 0.1396048580566D+02 0.1407943580155D+02 0.1419765092608D+02 + 0.1431478518661D+02 0.1443048927478D+02 0.1454441142812D+02 0.1465619831308D+02 + 0.1476549592746D+02 0.1487195051928D+02 0.1497520951989D+02 0.1507492248828D+02 + 0.1517074206398D+02 0.1526232492551D+02 0.1534933275145D+02 0.1543143318112D+02 + 0.1550830077157D+02 0.1557961794797D+02 0.1564507594396D+02 0.1570437572881D+02 + 0.1575722891823D+02 0.1580335866539D+02 0.1584250052899D+02 0.1587440331524D+02 + 0.1589882989033D+02 0.1591555796049D+02 0.1592438081630D+02 0.1592510803844D+02 + 0.1591756616179D+02 0.1590159929512D+02 0.1587706969359D+02 0.1584385828154D+02 + 0.1580186512290D+02 0.1575100983720D+02 0.1569123195871D+02 0.1562249123695D+02 + 0.1554476787665D+02 0.1545806271560D+02 0.1536239733893D+02 0.1525781412875D+02 + 0.1514437624809D+02 0.1502216755847D+02 0.1489129247063D+02 0.1475187572813D+02 + 0.1460406212401D+02 0.1444801615062D+02 0.1428392158332D+02 0.1411198099888D+02 + 0.1393241522964D+02 0.1374546275490D+02 0.1355137903119D+02 0.1335043576333D+02 + 0.1314292011864D+02 0.1292913388664D+02 0.1270939258714D+02 0.1248402452972D+02 + 0.1225336982785D+02 0.1201777937125D+02 0.1177761376017D+02 0.1153324220569D+02 + 0.1128504140014D+02 0.1103339436205D+02 0.1077868926027D+02 0.1052131822179D+02 + 0.1026167612835D+02 0.1000015940663D+02 0.9737164817090D+01 0.9473088246666D+01 + 0.9208323510392D+01 0.8943261167138D+01 0.8678287354606D+01 0.8413782648689D+01 + 0.8150120952198D+01 0.7887668417870D+01 0.7626782410424D+01 0.7367810512255D+01 + 0.7111089577147D+01 0.6856944836175D+01 0.6605689059620D+01 0.6357621778576D+01 + 0.6113028569417D+01 0.5872180404071D+01 0.5635333068605D+01 0.5402726652271D+01 + 0.5174585108689D+01 0.4951115890458D+01 0.4732509658013D+01 0.4518940063093D+01 + 0.4310563606744D+01 0.4107519571314D+01 0.3909930025455D+01 0.3717899900701D+01 + 0.3531517137795D+01 0.3350852900521D+01 0.3175961854415D+01 0.3006882507418D+01 + 0.2843637609166D+01 0.2686234605393D+01 0.2534666143602D+01 0.2388910626020D+01 + 0.2248932805599D+01 0.2114684420764D+01 0.1986104864410D+01 0.1863121882663D+01 + 0.1745652298807D+01 0.1633602757816D+01 0.1526870486911D+01 0.1425344067651D+01 + 0.1328904215091D+01 0.1237424559686D+01 0.1150772427713D+01 0.1068809616148D+01 + 0.9913931580887D+00 0.9183760750247D+00 0.8496081124357D+00 0.7849364554513D+00 + 0.7242064215293D+00 0.6672621273712D+00 0.6139471275574D+00 0.5641050226618D+00 + 0.5175800348878D+00 0.4742175495586D+00 0.4338646210828D+00 0.3963704423129D+00 + 0.3615867764997D+00 0.3293683513354D+00 0.2995732148544D+00 0.2720630532321D+00 + 0.2467034707815D+00 0.2233642326902D+00 0.2019194712763D+00 0.1822478567499D+00 + 0.1642327336682D+00 0.1477622244444D+00 0.1327293014336D+00 0.1190318292464D+00 + 0.1065725790655D+00 0.9525921682581D-01 0.8500426719540D-01 0.7572505534570D-01 + 0.6734362852856D-01 0.5978665949119D-01 0.5298533375213D-01 0.4687522273735D-01 + 0.4139614473480D-01 0.3649201557103D-01 0.3211069084453D-01 0.2820380147099D-01 + 0.2472658420543D-01 0.2163770870794D-01 0.1889910261478D-01 0.1647577596641D-01 + 0.1433564623066D-01 0.1244936504301D-01 0.1079014767040D-01 0.9333606088531D-02 + 0.8057586449521D-02 0.6942011605538D-02 0.5968729247262D-02 0.5121366113861D-02 + 0.4385188634413D-02 0.3746970269980D-02 0.3194865741265D-02 0.2718292249293D-02 + 0.2307817726031D-02 0.1955056088404D-02 0.1652569412799D-02 0.1393776897745D-02 + 0.1172870439853D-02 0.9847366120634D-03 0.8248848034661D-03 0.6893812560569D-03 + 0.5747887154298D-03 0.4781113990982D-03 0.3967449774979D-03 0.3284312582634D-03 + 0.2712172636576D-03 0.2234183935981D-03 0.1835853721449D-03 0.1504746831443D-03 + 0.1230222105786D-03 0.1003198106540D-03 0.8159455542106D-04 0.6619040144209D-04 + 0.5355205138722D-04 0.4321079120846D-04 0.3477210045803D-04 0.2790484818898D-04 + 0.2233190152246D-04 0.1782198824118D-04 0.1418266855132D-04 0.1125428434880D-04 + 0.8904766856498D-05 0.7025195313453D-05 0.5526010459652D-05 0.4333796852085D-05 + 0.3388557563637D-05 0.2641413563333D-05 0.2052668070841D-05 0.1590183444862D-05 + 0.1228024735392D-05 0.9453299398051D-06 0.7253722919424D-06 0.5547846237125D-06 + 0.4229200131023D-06 0.3213266143727D-06 0.2433177983142D-06 0.1836215545666D-06 + 0.1380955642703D-06 0.1034964778941D-06 0.7729376586493D-07 0.5752008209307D-07 + 0.4265142355148D-07 0.3151151106808D-07 0.2319578320089D-07 0.1701120974173D-07 + 0.1242881489534D-07 0.9046371073667D-08 0.6559198960071D-08 0.4737402476978D-08 + 0.3408191153158D-08 0.2442208093542D-08 0.1742998768590D-08 0.1238932286038D-08 + 0.8770296193333D-09 0.6182683290111D-09 0.4340255982013D-09 0.3033950772413D-09 + 0.2111715589818D-09 0.1463438404983D-09 0.1009726185101D-09 0.6935859066118D-10 + 0.4742849271888D-10 0.3228488955626D-10 0.2187547853929D-10 0.1475212866899D-10 + 0.9901881750809D-11 0.6613860882122D-11 0.4396644350124D-11 0.2908650000322D-11 + 0.1914873227728D-11 0.1254415200484D-11 0.8176535094916D-12 0.5302708391854D-12 + 0.3421370551355D-12 0.2196087836422D-12 0.1402231518601D-12 0.8906014768602D-13 + LSMS: xx z= 26. xvalws= 2.77074 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728402963D+02-0.5199725117641D+02-0.5199721792578D+02-0.5199718427293D+02 +-0.5199715021300D+02-0.5199711574107D+02-0.5199708085214D+02-0.5199704554119D+02 +-0.5199700980309D+02-0.5199697363268D+02-0.5199693702474D+02-0.5199689997397D+02 +-0.5199686247500D+02-0.5199682452243D+02-0.5199678611076D+02-0.5199674723444D+02 +-0.5199670788785D+02-0.5199666806529D+02-0.5199662776101D+02-0.5199658696918D+02 +-0.5199654568390D+02-0.5199650389922D+02-0.5199646160907D+02-0.5199641880734D+02 +-0.5199637548785D+02-0.5199633164434D+02-0.5199628727046D+02-0.5199624235979D+02 +-0.5199619690585D+02-0.5199615090205D+02-0.5199610434176D+02-0.5199605721822D+02 +-0.5199600952464D+02-0.5199596125410D+02-0.5199591239964D+02-0.5199586295419D+02 +-0.5199581291060D+02-0.5199576226162D+02-0.5199571099994D+02-0.5199565911815D+02 +-0.5199560660874D+02-0.5199555346411D+02-0.5199549967658D+02-0.5199544523837D+02 +-0.5199539014162D+02-0.5199533437834D+02-0.5199527794048D+02-0.5199522081989D+02 +-0.5199516300828D+02-0.5199510449731D+02-0.5199504527851D+02-0.5199498534331D+02 +-0.5199492468306D+02-0.5199486328897D+02-0.5199480115217D+02-0.5199473826367D+02 +-0.5199467461436D+02-0.5199461019507D+02-0.5199454499646D+02-0.5199447900910D+02 +-0.5199441222344D+02-0.5199434462984D+02-0.5199427621849D+02-0.5199420697954D+02 +-0.5199413690295D+02-0.5199406597858D+02-0.5199399419618D+02-0.5199392154537D+02 +-0.5199384801563D+02-0.5199377359634D+02-0.5199369827672D+02-0.5199362204589D+02 +-0.5199354489281D+02-0.5199346680633D+02-0.5199338777515D+02-0.5199330778784D+02 +-0.5199322683282D+02-0.5199314489839D+02-0.5199306197270D+02-0.5199297804374D+02 +-0.5199289309939D+02-0.5199280712733D+02-0.5199272011516D+02-0.5199263205027D+02 +-0.5199254291992D+02-0.5199245271123D+02-0.5199236141114D+02-0.5199226900644D+02 +-0.5199217548376D+02-0.5199208082958D+02-0.5199198503019D+02-0.5199188807175D+02 +-0.5199178994021D+02-0.5199169062139D+02-0.5199159010092D+02-0.5199148836424D+02 +-0.5199138539665D+02-0.5199128118323D+02-0.5199117570892D+02-0.5199106895845D+02 +-0.5199096091638D+02-0.5199085156707D+02-0.5199074089471D+02-0.5199062888326D+02 +-0.5199051551654D+02-0.5199040077813D+02-0.5199028465143D+02-0.5199016711964D+02 +-0.5199004816574D+02-0.5198992777253D+02-0.5198980592257D+02-0.5198968259824D+02 +-0.5198955778170D+02-0.5198943145487D+02-0.5198930359948D+02-0.5198917419701D+02 +-0.5198904322875D+02-0.5198891067574D+02-0.5198877651879D+02-0.5198864073848D+02 +-0.5198850331517D+02-0.5198836422896D+02-0.5198822345972D+02-0.5198808098707D+02 +-0.5198793679039D+02-0.5198779084882D+02-0.5198764314123D+02-0.5198749364622D+02 +-0.5198734234217D+02-0.5198718920716D+02-0.5198703421905D+02-0.5198687735537D+02 +-0.5198671859343D+02-0.5198655791024D+02-0.5198639528254D+02-0.5198623068679D+02 +-0.5198606409915D+02-0.5198589549550D+02-0.5198572485143D+02-0.5198555214224D+02 +-0.5198537734293D+02-0.5198520042816D+02-0.5198502137235D+02-0.5198484014954D+02 +-0.5198465673351D+02-0.5198447109769D+02-0.5198428321519D+02-0.5198409305883D+02 +-0.5198390060104D+02-0.5198370581396D+02-0.5198350866939D+02-0.5198330913876D+02 +-0.5198310719319D+02-0.5198290280341D+02-0.5198269593983D+02-0.5198248657249D+02 +-0.5198227467106D+02-0.5198206020484D+02-0.5198184314277D+02-0.5198162345340D+02 +-0.5198140110492D+02-0.5198117606510D+02-0.5198094830136D+02-0.5198071778068D+02 +-0.5198048446968D+02-0.5198024833454D+02-0.5198000934107D+02-0.5197976745462D+02 +-0.5197952264015D+02-0.5197927486220D+02-0.5197902408485D+02-0.5197877027176D+02 +-0.5197851338615D+02-0.5197825339081D+02-0.5197799024804D+02-0.5197772391971D+02 +-0.5197745436723D+02-0.5197718155151D+02-0.5197690543304D+02-0.5197662597177D+02 +-0.5197634312720D+02-0.5197605685833D+02-0.5197576712367D+02-0.5197547388122D+02 +-0.5197517708846D+02-0.5197487670236D+02-0.5197457267938D+02-0.5197426497542D+02 +-0.5197395354589D+02-0.5197363834563D+02-0.5197331932893D+02-0.5197299644952D+02 +-0.5197266966059D+02-0.5197233891476D+02-0.5197200416404D+02-0.5197166535990D+02 +-0.5197132245319D+02-0.5197097539418D+02-0.5197062413252D+02-0.5197026861727D+02 +-0.5196990879687D+02-0.5196954461909D+02-0.5196917603112D+02-0.5196880297948D+02 +-0.5196842541005D+02-0.5196804326804D+02-0.5196765649801D+02-0.5196726504383D+02 +-0.5196686884871D+02-0.5196646785514D+02-0.5196606200494D+02-0.5196565123919D+02 +-0.5196523549829D+02-0.5196481472189D+02-0.5196438884890D+02-0.5196395781753D+02 +-0.5196352156518D+02-0.5196308002855D+02-0.5196263314350D+02-0.5196218084518D+02 +-0.5196172306789D+02-0.5196125974518D+02-0.5196079080977D+02-0.5196031619354D+02 +-0.5195983582758D+02-0.5195934964214D+02-0.5195885756657D+02-0.5195835952942D+02 +-0.5195785545834D+02-0.5195734528011D+02-0.5195682892060D+02-0.5195630630481D+02 +-0.5195577735679D+02-0.5195524199969D+02-0.5195470015573D+02-0.5195415174616D+02 +-0.5195359669127D+02-0.5195303491041D+02-0.5195246632192D+02-0.5195189084316D+02 +-0.5195130839046D+02-0.5195071887917D+02-0.5195012222358D+02-0.5194951833693D+02 +-0.5194890713143D+02-0.5194828851819D+02-0.5194766240726D+02-0.5194702870759D+02 +-0.5194638732701D+02-0.5194573817222D+02-0.5194508114882D+02-0.5194441616121D+02 +-0.5194374311266D+02-0.5194306190525D+02-0.5194237243986D+02-0.5194167461616D+02 +-0.5194096833262D+02-0.5194025348643D+02-0.5193952997356D+02-0.5193879768871D+02 +-0.5193805652527D+02-0.5193730637535D+02-0.5193654712973D+02-0.5193577867788D+02 +-0.5193500090790D+02-0.5193421370652D+02-0.5193341695911D+02-0.5193261054963D+02 +-0.5193179436061D+02-0.5193096827316D+02-0.5193013216694D+02-0.5192928592013D+02 +-0.5192842940944D+02-0.5192756251004D+02-0.5192668509561D+02-0.5192579703828D+02 +-0.5192489820860D+02-0.5192398847556D+02-0.5192306770652D+02-0.5192213576726D+02 +-0.5192119252189D+02-0.5192023783287D+02-0.5191927156096D+02-0.5191829356524D+02 +-0.5191730370307D+02-0.5191630183005D+02-0.5191528780001D+02-0.5191426146503D+02 +-0.5191322267532D+02-0.5191217127930D+02-0.5191110712354D+02-0.5191003005272D+02 +-0.5190893990959D+02-0.5190783653503D+02-0.5190671976795D+02-0.5190558944528D+02 +-0.5190444540195D+02-0.5190328747089D+02-0.5190211548297D+02-0.5190092926700D+02 +-0.5189972864968D+02-0.5189851345560D+02-0.5189728350719D+02-0.5189603862472D+02 +-0.5189477862625D+02-0.5189350332759D+02-0.5189221254235D+02-0.5189090608179D+02 +-0.5188958375491D+02-0.5188824536834D+02-0.5188689072635D+02-0.5188551963080D+02 +-0.5188413188114D+02-0.5188272727435D+02-0.5188130560492D+02-0.5187986666482D+02 +-0.5187841024347D+02-0.5187693612772D+02-0.5187544410178D+02-0.5187393394724D+02 +-0.5187240544300D+02-0.5187085836524D+02-0.5186929248740D+02-0.5186770758014D+02 +-0.5186610341132D+02-0.5186447974591D+02-0.5186283634606D+02-0.5186117297093D+02 +-0.5185948937678D+02-0.5185778531685D+02-0.5185606054135D+02-0.5185431479744D+02 +-0.5185254782916D+02-0.5185075937741D+02-0.5184894917991D+02-0.5184711697117D+02 +-0.5184526248242D+02-0.5184338544160D+02-0.5184148557330D+02-0.5183956259875D+02 +-0.5183761623572D+02-0.5183564619854D+02-0.5183365219802D+02-0.5183163394142D+02 +-0.5182959113240D+02-0.5182752347098D+02-0.5182543065350D+02-0.5182331237255D+02 +-0.5182116831697D+02-0.5181899817174D+02-0.5181680161800D+02-0.5181457833297D+02 +-0.5181232798987D+02-0.5181005025795D+02-0.5180774480235D+02-0.5180541128413D+02 +-0.5180304936016D+02-0.5180065868310D+02-0.5179823890134D+02-0.5179578965895D+02 +-0.5179331059564D+02-0.5179080134665D+02-0.5178826154277D+02-0.5178569081025D+02 +-0.5178308877073D+02-0.5178045504121D+02-0.5177778923399D+02-0.5177509095659D+02 +-0.5177235981171D+02-0.5176959539717D+02-0.5176679730585D+02-0.5176396512563D+02 +-0.5176109843930D+02-0.5175819682457D+02-0.5175525985390D+02-0.5175228709457D+02 +-0.5174927810849D+02-0.5174623245221D+02-0.5174314967682D+02-0.5174002932792D+02 +-0.5173687094551D+02-0.5173367406395D+02-0.5173043821187D+02-0.5172716291215D+02 +-0.5172384768177D+02-0.5172049203182D+02-0.5171709546736D+02-0.5171365748739D+02 +-0.5171017758479D+02-0.5170665524617D+02-0.5170308995189D+02-0.5169948117592D+02 +-0.5169582838578D+02-0.5169213104249D+02-0.5168838860043D+02-0.5168460050732D+02 +-0.5168076620412D+02-0.5167688512494D+02-0.5167295669696D+02-0.5166898034036D+02 +-0.5166495546822D+02-0.5166088148646D+02-0.5165675779371D+02-0.5165258378128D+02 +-0.5164835883303D+02-0.5164408232529D+02-0.5163975362681D+02-0.5163537209858D+02 +-0.5163093709386D+02-0.5162644795799D+02-0.5162190402831D+02-0.5161730463415D+02 +-0.5161264909661D+02-0.5160793672858D+02-0.5160316683457D+02-0.5159833871062D+02 +-0.5159345164422D+02-0.5158850491424D+02-0.5158349779076D+02-0.5157842953502D+02 +-0.5157329939929D+02-0.5156810662682D+02-0.5156285045165D+02-0.5155753009857D+02 +-0.5155214478300D+02-0.5154669371088D+02-0.5154117607855D+02-0.5153559107266D+02 +-0.5152993787006D+02-0.5152421563767D+02-0.5151842353238D+02-0.5151256070096D+02 +-0.5150662627991D+02-0.5150061939535D+02-0.5149453916296D+02-0.5148838468777D+02 +-0.5148215506412D+02-0.5147584937554D+02-0.5146946669454D+02-0.5146300608264D+02 +-0.5145646659012D+02-0.5144984725596D+02-0.5144314710771D+02-0.5143636516137D+02 +-0.5142950042123D+02-0.5142255187982D+02-0.5141551851771D+02-0.5140839930344D+02 +-0.5140119319335D+02-0.5139389913149D+02-0.5138651604948D+02-0.5137904286634D+02 +-0.5137147848843D+02-0.5136382180931D+02-0.5135607170955D+02-0.5134822705665D+02 +-0.5134028670491D+02-0.5133224949527D+02-0.5132411425521D+02-0.5131587979859D+02 +-0.5130754492555D+02-0.5129910842232D+02-0.5129056906116D+02-0.5128192560017D+02 +-0.5127317678315D+02-0.5126432133956D+02-0.5125535798425D+02-0.5124628541740D+02 +-0.5123710232443D+02-0.5122780737574D+02-0.5121839922671D+02-0.5120887651745D+02 +-0.5119923787276D+02-0.5118948190193D+02-0.5117960719865D+02-0.5116961234085D+02 +-0.5115949589056D+02-0.5114925639380D+02-0.5113889238044D+02-0.5112840236408D+02 +-0.5111778484188D+02-0.5110703829447D+02-0.5109616118579D+02-0.5108515196301D+02 +-0.5107400905631D+02-0.5106273087889D+02-0.5105131582667D+02-0.5103976227836D+02 +-0.5102806859514D+02-0.5101623312071D+02-0.5100425418105D+02-0.5099213008436D+02 +-0.5097985912091D+02-0.5096743956297D+02-0.5095486966464D+02-0.5094214766176D+02 +-0.5092927177183D+02-0.5091624019384D+02-0.5090305110822D+02-0.5088970267672D+02 +-0.5087619304230D+02-0.5086252032900D+02-0.5084868264193D+02-0.5083467806710D+02 +-0.5082050467136D+02-0.5080616050232D+02-0.5079164358822D+02-0.5077695193792D+02 +-0.5076208354076D+02-0.5074703636655D+02-0.5073180836542D+02-0.5071639746782D+02 +-0.5070080158445D+02-0.5068501860613D+02-0.5066904640389D+02-0.5065288282874D+02 +-0.5063652571181D+02-0.5061997286414D+02-0.5060322207678D+02-0.5058627112067D+02 +-0.5056911774669D+02-0.5055175968555D+02-0.5053419464788D+02-0.5051642032411D+02 +-0.5049843438458D+02-0.5048023447945D+02-0.5046181823877D+02-0.5044318327247D+02 +-0.5042432717038D+02-0.5040524750226D+02-0.5038594181787D+02-0.5036640764694D+02 +-0.5034664249930D+02-0.5032664386488D+02-0.5030640921379D+02-0.5028593599640D+02 +-0.5026522164341D+02-0.5024426356594D+02-0.5022305915564D+02-0.5020160578474D+02 +-0.5017990080623D+02-0.5015794155393D+02-0.5013572534263D+02-0.5011324946826D+02 +-0.5009051120796D+02-0.5006750782030D+02-0.5004423654542D+02-0.5002069460521D+02 +-0.4999687920344D+02-0.4997278752603D+02-0.4994841674120D+02-0.4992376399966D+02 +-0.4989882643488D+02-0.4987360116327D+02-0.4984808528443D+02-0.4982227588141D+02 +-0.4979617002094D+02-0.4976976475371D+02-0.4974305711462D+02-0.4971604412309D+02 +-0.4968872278335D+02-0.4966109008469D+02-0.4963314300185D+02-0.4960487849528D+02 +-0.4957629351145D+02-0.4954738498327D+02-0.4951814983035D+02-0.4948858495939D+02 +-0.4945868726453D+02-0.4942845362775D+02-0.4939788091919D+02-0.4936696599757D+02 +-0.4933570571061D+02-0.4930409689534D+02-0.4927213637859D+02-0.4923982097740D+02 +-0.4920714749935D+02-0.4917411274309D+02-0.4914071349870D+02-0.4910694654815D+02 +-0.4907280866573D+02-0.4903829661848D+02-0.4900340716666D+02-0.4896813706420D+02 +-0.4893248305909D+02-0.4889644189392D+02-0.4886001030623D+02-0.4882318502909D+02 +-0.4878596279141D+02-0.4874834031849D+02-0.4871031433244D+02-0.4867188155262D+02 +-0.4863303869609D+02-0.4859378247804D+02-0.4855410961222D+02-0.4851401681140D+02 +-0.4847350078774D+02-0.4843255825325D+02-0.4839118592018D+02-0.4834938050138D+02 +-0.4830713871075D+02-0.4826445726356D+02-0.4822133287682D+02-0.4817776226967D+02 +-0.4813374216365D+02-0.4808926928306D+02-0.4804434035526D+02-0.4799895211091D+02 +-0.4795310128431D+02-0.4790678461358D+02-0.4785999884093D+02-0.4781274071282D+02 +-0.4776500698020D+02-0.4771679439861D+02-0.4766809972836D+02-0.4761891973461D+02 +-0.4756925118748D+02-0.4751909086208D+02-0.4746843553857D+02-0.4741728200213D+02 +-0.4736562704295D+02-0.4731346745620D+02-0.4726080004188D+02-0.4720762160479D+02 +-0.4715392895431D+02-0.4709971890425D+02-0.4704498827268D+02-0.4698973388163D+02 +-0.4693395255690D+02-0.4687764112767D+02-0.4682079642628D+02-0.4676341528777D+02 +-0.4670549454962D+02-0.4664703105122D+02-0.4658802163351D+02-0.4652846313853D+02 +-0.4646835240891D+02-0.4640768628735D+02-0.4634646161617D+02-0.4628467523671D+02 +-0.4622232398885D+02-0.4615940471037D+02-0.4609591423645D+02-0.4603184939910D+02 +-0.4596720702657D+02-0.4590198394276D+02-0.4583617696675D+02-0.4576978291218D+02 +-0.4570279858676D+02-0.4563522079176D+02-0.4556704632159D+02-0.4549827196328D+02 +-0.4542889449617D+02-0.4535891069156D+02-0.4528831731237D+02-0.4521711111299D+02 +-0.4514528883912D+02-0.4507284722768D+02-0.4499978300686D+02-0.4492609289624D+02 +-0.4485177360700D+02-0.4477682184233D+02-0.4470123429783D+02-0.4462500766219D+02 +-0.4454813861790D+02-0.4447062384219D+02-0.4439246000814D+02-0.4431364378589D+02 +-0.4423417184413D+02-0.4415404085174D+02-0.4407324747964D+02-0.4399178840285D+02 +-0.4390966030283D+02-0.4382685986996D+02-0.4374338380636D+02-0.4365922882888D+02 +-0.4357439167239D+02-0.4348886909331D+02-0.4340265787340D+02-0.4331575482384D+02 +-0.4322815678953D+02-0.4313986065369D+02-0.4305086334268D+02-0.4296116183110D+02 +-0.4287075314713D+02-0.4277963437808D+02-0.4268780267613D+02-0.4259525526436D+02 +-0.4250198944278D+02-0.4240800259471D+02-0.4231329219311D+02-0.4221785580702D+02 +-0.4212169110814D+02-0.4202479587724D+02-0.4192716801066D+02-0.4182880552657D+02 +-0.4172970657123D+02-0.4162986942478D+02-0.4152929250699D+02-0.4142797438248D+02 +-0.4132591376546D+02-0.4122310952415D+02-0.4111956068435D+02-0.4101526643252D+02 +-0.4091022611799D+02-0.4080443925436D+02-0.4069790551997D+02-0.4059062475744D+02 +-0.4048259697200D+02-0.4037382232884D+02-0.4026430114924D+02-0.4015403390548D+02 +-0.4004302121449D+02-0.3993126383031D+02-0.3981876263529D+02-0.3970551863000D+02 +-0.3959153292214D+02-0.3947680671418D+02-0.3936134129010D+02-0.3924513800125D+02 +-0.3912819825140D+02-0.3901052348125D+02-0.3889211515259D+02-0.3877297473220D+02 +-0.3865310367583D+02-0.3853250341248D+02-0.3841117532917D+02-0.3828912075654D+02 +-0.3816634095549D+02-0.3804283710513D+02-0.3791861029232D+02-0.3779366150300D+02 +-0.3766799161555D+02-0.3754160139636D+02-0.3741449149782D+02-0.3728666245883D+02 +-0.3715811470790D+02-0.3702884856900D+02-0.3689886427010D+02-0.3676816195438D+02 +-0.3663674169408D+02-0.3650460350690D+02-0.3637174737474D+02-0.3623817326473D+02 +-0.3610388115218D+02-0.3596887104531D+02-0.3583314301154D+02-0.3569669720495D+02 +-0.3555953389464D+02-0.3542165349386D+02-0.3528305658922D+02-0.3514374397011D+02 +-0.3500371665774D+02-0.3486297593358D+02-0.3472152336690D+02-0.3457936084122D+02 +-0.3443649057928D+02-0.3429291516643D+02-0.3414863757211D+02-0.3400366116934D+02 +-0.3385798975190D+02-0.3371162754922D+02-0.3356457923876D+02-0.3341684995570D+02 +-0.3326844530007D+02-0.3311937134098D+02-0.3296963461820D+02-0.3281924214079D+02 +-0.3266820138293D+02-0.3251652027694D+02-0.3236420720350D+02-0.3221127097903D+02 +-0.3205772084042D+02-0.3190356642710D+02-0.3174881776049D+02-0.3159348522098D+02 +-0.3143757952257D+02-0.3128111168511D+02-0.3112409300454D+02-0.3096653502093D+02 +-0.3080844948479D+02-0.3064984832153D+02-0.3049074359439D+02-0.3033114746593D+02 +-0.3017107215833D+02-0.3001052991254D+02-0.2984953294675D+02-0.2968809341400D+02 +-0.2952622335948D+02-0.2936393467762D+02-0.2920123906907D+02-0.2903814799805D+02 +-0.2887467265011D+02-0.2871082389066D+02-0.2854661222446D+02-0.2838204775647D+02 +-0.2821714015409D+02-0.2805189861135D+02-0.2788633181514D+02-0.2772044791378D+02 +-0.2755425448842D+02-0.2738775852723D+02-0.2722096640307D+02-0.2705388385454D+02 +-0.2688651597109D+02-0.2671886718221D+02-0.2655094125117D+02-0.2638274127348D+02 +-0.2621426968047D+02-0.2604552824823D+02-0.2587651811214D+02-0.2570723978730D+02 +-0.2553769319514D+02-0.2536787769632D+02-0.2519779213021D+02-0.2502743486110D+02 +-0.2485680383129D+02-0.2468589662112D+02-0.2451471051601D+02-0.2434324258050D+02 +-0.2417148973924D+02-0.2399944886481D+02-0.2382711687194D+02-0.2365449081810D+02 +-0.2348156800981D+02-0.2330834611404D+02-0.2313482327422D+02-0.2296099822964D+02 +-0.2278687043744D+02-0.2261244019567D+02-0.2243770876615D+02-0.2226267849517D+02 +-0.2208735293014D+02-0.2191173693001D+02-0.2173583676674D+02-0.2155966021537D+02 +-0.2138321662948D+02-0.2120651699903D+02-0.2102957398727D+02-0.2085240194340D+02 +-0.2067501688787D+02-0.2049743646710D+02-0.2031967987514D+02-0.2014176773999D+02 +-0.1996372197331D+02-0.1978556558301D+02-0.1960732244950D+02-0.1942901706755D+02 +-0.1925067425750D+02-0.1907231885074D+02-0.1889397535633D+02-0.1871566761696D+02 +-0.1853741846374D+02-0.1835924938052D+02-0.1818118018868D+02-0.1800322876380D+02 +-0.1782541079491D+02-0.1764773959582D+02-0.1747022597686D+02-0.1729287818264D+02 +-0.1711570189939D+02-0.1693870033244D+02-0.1676187435187D+02-0.1658522270158D+02 +-0.1640874226459D+02-0.1623242837596D+02-0.1605627517269D+02-0.1588027596970D+02 +-0.1570442365062D+02-0.1552871106216D+02-0.1535313140208D+02-0.1517767859145D+02 +-0.1500234762341D+02-0.1482713488228D+02-0.1465203842815D+02-0.1447705824363D+02 +-0.1430219644106D+02-0.1412745742929D+02-0.1395284804054D+02-0.1377837761854D+02 +-0.1360405806987D+02-0.1342990388081D+02-0.1325593210249D+02-0.1308216230731D+02 +-0.1290861651951D+02-0.1273531912305D+02-0.1256229674959D+02-0.1238957814960D+02 +-0.1221719404907D+02-0.1204517699438D+02-0.1187356118783D+02-0.1170238231558D+02 +-0.1153167737042D+02-0.1136148447069D+02-0.1119184267735D+02-0.1102279181034D+02 +-0.1085437226576D+02-0.1068662483495D+02-0.1051959052659D+02-0.1035331039265D+02 +-0.1018782535928D+02-0.1002317606321D+02-0.9859402694342D+01-0.9696544845323D+01 +-0.9534641368482D+01-0.9373730240659D+01-0.9213848436346D+01-0.9055031809511D+01 +-0.8897314984394D+01-0.8740731255549D+01-0.8585312497336D+01-0.8431089083029D+01 +-0.8278089813661D+01-0.8126341856676D+01-0.7975870694439D+01-0.7826700082584D+01 +-0.7678852018171D+01-0.7532346717566D+01-0.7387202603932D+01-0.7243436304187D+01 +-0.7101062655233D+01-0.6960094719270D+01-0.6820543807924D+01-0.6682419514939D+01 +-0.6545729757123D+01-0.6410480823229D+01-0.6276677430423D+01-0.6144322787958D+01 +-0.6013418667669D+01-0.5883965480867D+01-0.5755962361193D+01-0.5629407252975D+01 +-0.5504297004604D+01-0.5380627466436D+01-0.5258393592702D+01-0.5137589546863D+01 +-0.5018208809882D+01-0.4900244290793D+01-0.4783688438971D+01-0.4668533357470D+01 +-0.4554770916754D+01-0.4442392868124D+01-0.4331390956131D+01-0.4221757029192D+01 +-0.4113483147635D+01-0.4006561688322D+01-0.3900985445011D+01-0.3796747723533D+01 +-0.3693842430876D+01-0.3592264157211D+01-0.3492008249906D+01-0.3393070878541D+01 +-0.3295449089976D+01-0.3199140852531D+01-0.3104145088414D+01-0.3010461693592D+01 +-0.2918091544431D+01-0.2827036490592D+01-0.2737299333835D+01-0.2648883792669D+01 +-0.2561794453010D+01-0.2476036705393D+01-0.2391616669610D+01-0.2308541108029D+01 +-0.2226817329318D+01-0.2146453084634D+01-0.2067456458802D+01-0.1989835759339D+01 +-0.1913599406514D+01-0.1838755827812D+01-0.1765313360391D+01-0.1693280165020D+01 +-0.1622664154978D+01-0.1553472943063D+01-0.1485713809518D+01-0.1419393693186D+01 +-0.1354519207570D+01-0.1291096682842D+01-0.1229132234097D+01-0.1168631855453D+01 +-0.1109601538882D+01-0.1052047416050D+01-0.9959759208814D+00-0.9413939701484D+00 +-0.8883091590719D+00-0.8367299687430D+00-0.7866659821253D+00-0.7381281054637D+00 +-0.6911287920896D+00-0.6456822658698D+00-0.6018047418553D+00-0.5595146420441D+00 +-0.5188328045500D+00-0.4797826848498D+00-0.4423905481512D+00-0.4066856522662D+00 +-0.3727004206897D+00-0.3404706058472D+00-0.3100354427093D+00-0.2814377931599D+00 +-0.2547240189175D+00 + 0.0000000000000D+00 + 1012 0.2770741520224D+01 + 0.2150927949039D-04 0.2202124536575D-04 0.2254539478646D-04 0.2308201760180D-04 + 0.2363141055333D-04 0.2419387743865D-04 0.2476972927906D-04 0.2535928449121D-04 + 0.2596286906285D-04 0.2658081673262D-04 0.2721346917432D-04 0.2786117618535D-04 + 0.2852429587973D-04 0.2920319488569D-04 0.2989824854795D-04 0.3060984113473D-04 + 0.3133836604977D-04 0.3208422604934D-04 0.3284783346437D-04 0.3362961042788D-04 + 0.3442998910781D-04 0.3524941194536D-04 0.3608833189898D-04 0.3694721269416D-04 + 0.3782652907911D-04 0.3872676708658D-04 0.3964842430179D-04 0.4059201013679D-04 + 0.4155804611131D-04 0.4254706614023D-04 0.4355961682789D-04 0.4459625776943D-04 + 0.4565756185917D-04 0.4674411560639D-04 0.4785651945856D-04 0.4899538813222D-04 + 0.5016135095172D-04 0.5135505219602D-04 0.5257715145361D-04 0.5382832398596D-04 + 0.5510926109951D-04 0.5642067052648D-04 0.5776327681476D-04 0.5913782172693D-04 + 0.6054506464885D-04 0.6198578300785D-04 0.6346077270088D-04 0.6497084853274D-04 + 0.6651684466474D-04 0.6809961507398D-04 0.6972003402351D-04 0.7137899654355D-04 + 0.7307741892426D-04 0.7481623921999D-04 0.7659641776564D-04 0.7841893770513D-04 + 0.8028480553242D-04 0.8219505164534D-04 0.8415073091254D-04 0.8615292325379D-04 + 0.8820273423416D-04 0.9030129567206D-04 0.9244976626185D-04 0.9464933221109D-04 + 0.9690120789284D-04 0.9920663651351D-04 0.1015668907964D-03 0.1039832736813D-03 + 0.1064571190411D-03 0.1089897924148D-03 0.1115826917580D-03 0.1142372482113D-03 + 0.1169549268870D-03 0.1197372276738D-03 0.1225856860613D-03 0.1255018739831D-03 + 0.1284874006808D-03 0.1315439135877D-03 0.1346730992336D-03 0.1378766841712D-03 + 0.1411564359238D-03 0.1445141639563D-03 0.1479517206680D-03 0.1514710024102D-03 + 0.1550739505263D-03 0.1587625524179D-03 0.1625388426349D-03 0.1664049039925D-03 + 0.1703628687133D-03 0.1744149195974D-03 0.1785632912194D-03 0.1828102711544D-03 + 0.1871582012321D-03 0.1916094788209D-03 0.1961665581427D-03 0.2008319516176D-03 + 0.2056082312418D-03 0.2104980299966D-03 0.2155040432913D-03 0.2206290304405D-03 + 0.2258758161753D-03 0.2312472921908D-03 0.2367464187300D-03 0.2423762262044D-03 + 0.2481398168542D-03 0.2540403664457D-03 0.2600811260106D-03 0.2662654236245D-03 + 0.2725966662290D-03 0.2790783414953D-03 0.2857140197324D-03 0.2925073558401D-03 + 0.2994620913080D-03 0.3065820562611D-03 0.3138711715547D-03 0.3213334509168D-03 + 0.3289730031429D-03 0.3367940343406D-03 0.3448008502286D-03 0.3529978584881D-03 + 0.3613895711713D-03 0.3699806071650D-03 0.3787756947128D-03 0.3877796739964D-03 + 0.3969974997780D-03 0.4064342441040D-03 0.4160950990725D-03 0.4259853796663D-03 + 0.4361105266519D-03 0.4464761095462D-03 0.4570878296540D-03 0.4679515231757D-03 + 0.4790731643881D-03 0.4904588689006D-03 0.5021148969868D-03 0.5140476569946D-03 + 0.5262637088364D-03 0.5387697675611D-03 0.5515727070097D-03 0.5646795635561D-03 + 0.5780975399370D-03 0.5918340091694D-03 0.6058965185620D-03 0.6202927938188D-03 + 0.6350307432396D-03 0.6501184620192D-03 0.6655642366457D-03 0.6813765494038D-03 + 0.6975640829812D-03 0.7141357251847D-03 0.7311005737650D-03 0.7484679413557D-03 + 0.7662473605260D-03 0.7844485889531D-03 0.8030816147148D-03 0.8221566617048D-03 + 0.8416841951763D-03 0.8616749274129D-03 0.8821398235337D-03 0.9030901074324D-03 + 0.9245372678559D-03 0.9464930646236D-03 0.9689695349932D-03 0.9919790001731D-03 + 0.1015534071988D-02 0.1039647659698D-02 0.1064332976981D-02 0.1089603549068D-02 + 0.1115473220057D-02 0.1141956160389D-02 0.1169066874495D-02 0.1196820208634D-02 + 0.1225231358897D-02 0.1254315879409D-02 0.1284089690715D-02 0.1314569088366D-02 + 0.1345770751696D-02 0.1377711752814D-02 0.1410409565795D-02 0.1443882076088D-02 + 0.1478147590144D-02 0.1513224845264D-02 0.1549133019674D-02 0.1585891742841D-02 + 0.1623521106018D-02 0.1662041673040D-02 0.1701474491365D-02 0.1741841103378D-02 + 0.1783163557945D-02 0.1825464422244D-02 0.1868766793867D-02 0.1913094313196D-02 + 0.1958471176071D-02 0.2004922146751D-02 0.2052472571166D-02 0.2101148390486D-02 + 0.2150976154989D-02 0.2201983038264D-02 0.2254196851731D-02 0.2307646059493D-02 + 0.2362359793542D-02 0.2418367869301D-02 0.2475700801533D-02 0.2534389820612D-02 + 0.2594466889165D-02 0.2655964719104D-02 0.2718916789042D-02 0.2783357362106D-02 + 0.2849321504172D-02 0.2916845102501D-02 0.2985964884814D-02 0.3056718438800D-02 + 0.3129144232066D-02 0.3203281632551D-02 0.3279170929405D-02 0.3356853354336D-02 + 0.3436371103460D-02 0.3517767359634D-02 0.3601086315312D-02 0.3686373195913D-02 + 0.3773674283724D-02 0.3863036942351D-02 0.3954509641719D-02 0.4048141983652D-02 + 0.4143984728019D-02 0.4242089819491D-02 0.4342510414893D-02 0.4445300911185D-02 + 0.4550516974067D-02 0.4658215567249D-02 0.4768454982366D-02 0.4881294869584D-02 + 0.4996796268890D-02 0.5115021642093D-02 0.5236034905549D-02 0.5359901463622D-02 + 0.5486688242898D-02 0.5616463727181D-02 0.5749297993262D-02 0.5885262747508D-02 + 0.6024431363262D-02 0.6166878919093D-02 0.6312682237899D-02 0.6461919926891D-02 + 0.6614672418475D-02 0.6771022012045D-02 0.6931052916716D-02 0.7094851295016D-02 + 0.7262505307545D-02 0.7434105158642D-02 0.7609743143066D-02 0.7789513693721D-02 + 0.7973513430440D-02 0.8161841209859D-02 0.8354598176397D-02 0.8551887814376D-02 + 0.8753816001287D-02 0.8960491062250D-02 0.9172023825667D-02 0.9388527680122D-02 + 0.9610118632529D-02 0.9836915367568D-02 0.1006903930843D-01 0.1030661467892D-01 + 0.1054976856688D-01 0.1079863098909D-01 0.1105333495749D-01 0.1131401654696D-01 + 0.1158081496451D-01 0.1185387262003D-01 0.1213333519856D-01 0.1241935173418D-01 + 0.1271207468545D-01 0.1301166001257D-01 0.1331826725616D-01 0.1363205961778D-01 + 0.1395320404221D-01 0.1428187130150D-01 0.1461823608081D-01 0.1496247706623D-01 + 0.1531477703430D-01 0.1567532294367D-01 0.1604430602860D-01 0.1642192189452D-01 + 0.1680837061563D-01 0.1720385683464D-01 0.1760858986456D-01 0.1802278379280D-01 + 0.1844665758734D-01 0.1888043520531D-01 0.1932434570378D-01 0.1977862335297D-01 + 0.2024350775185D-01 0.2071924394615D-01 0.2120608254895D-01 0.2170427986376D-01 + 0.2221409801021D-01 0.2273580505238D-01 0.2326967512987D-01 0.2381598859160D-01 + 0.2437503213237D-01 0.2494709893234D-01 0.2553248879941D-01 0.2613150831454D-01 + 0.2674447098014D-01 0.2737169737147D-01 0.2801351529124D-01 0.2867025992742D-01 + 0.2934227401421D-01 0.3002990799646D-01 0.3073352019732D-01 0.3145347698951D-01 + 0.3219015296988D-01 0.3294393113773D-01 0.3371520307664D-01 0.3450436914006D-01 + 0.3531183864059D-01 0.3613803004319D-01 0.3698337116219D-01 0.3784829936233D-01 + 0.3873326176383D-01 0.3963871545150D-01 0.4056512768813D-01 0.4151297613205D-01 + 0.4248274905905D-01 0.4347494558865D-01 0.4449007591493D-01 0.4552866154180D-01 + 0.4659123552298D-01 0.4767834270657D-01 0.4879053998454D-01 0.4992839654695D-01 + 0.5109249414114D-01 0.5228342733595D-01 0.5350180379101D-01 0.5474824453121D-01 + 0.5602338422639D-01 0.5732787147645D-01 0.5866236910176D-01 0.6002755443915D-01 + 0.6142411964345D-01 0.6285277199472D-01 0.6431423421119D-01 0.6580924476805D-01 + 0.6733855822219D-01 0.6890294554290D-01 0.7050319444864D-01 0.7214010975008D-01 + 0.7381451369925D-01 0.7552724634520D-01 0.7727916589591D-01 0.7907114908690D-01 + 0.8090409155624D-01 0.8277890822643D-01 0.8469653369292D-01 0.8665792261951D-01 + 0.8866405014071D-01 0.9071591227111D-01 0.9281452632182D-01 0.9496093132410D-01 + 0.9715618846031D-01 0.9940138150208D-01 0.1016976172560D+00 0.1040460260169D+00 + 0.1064477620282D+00 0.1089040039508D+00 0.1114159553388D+00 0.1139848451236D+00 + 0.1166119281054D+00 0.1192984854532D+00 0.1220458252122D+00 0.1248552828197D+00 + 0.1277282216288D+00 0.1306660334408D+00 0.1336701390448D+00 0.1367419887670D+00 + 0.1398830630269D+00 0.1430948729031D+00 0.1463789607067D+00 0.1497369005636D+00 + 0.1531702990050D+00 0.1566807955666D+00 0.1602700633964D+00 0.1639398098711D+00 + 0.1676917772207D+00 0.1715277431623D+00 0.1754495215419D+00 0.1794589629856D+00 + 0.1835579555582D+00 0.1877484254317D+00 0.1920323375616D+00 0.1964116963718D+00 + 0.2008885464482D+00 0.2054649732406D+00 0.2101431037732D+00 0.2149251073635D+00 + 0.2198131963488D+00 0.2248096268222D+00 0.2299166993754D+00 0.2351367598503D+00 + 0.2404722000984D+00 0.2459254587480D+00 0.2514990219789D+00 0.2571954243047D+00 + 0.2630172493626D+00 0.2689671307106D+00 0.2750477526311D+00 0.2812618509418D+00 + 0.2876122138134D+00 0.2941016825931D+00 0.3007331526352D+00 0.3075095741362D+00 + 0.3144339529771D+00 0.3215093515700D+00 0.3287388897102D+00 0.3361257454325D+00 + 0.3436731558729D+00 0.3513844181328D+00 0.3592628901485D+00 0.3673119915621D+00 + 0.3755352045968D+00 0.3839360749336D+00 0.3925182125899D+00 0.4012852927993D+00 + 0.4102410568930D+00 0.4193893131804D+00 0.4287339378299D+00 0.4382788757486D+00 + 0.4480281414604D+00 0.4579858199819D+00 0.4681560676951D+00 0.4785431132164D+00 + 0.4891512582614D+00 0.4999848785043D+00 0.5110484244305D+00 0.5223464221834D+00 + 0.5338834744021D+00 0.5456642610510D+00 0.5576935402392D+00 0.5699761490289D+00 + 0.5825170042325D+00 0.5953211031952D+00 0.6083935245653D+00 0.6217394290472D+00 + 0.6353640601390D+00 0.6492727448516D+00 0.6634708944082D+00 0.6779640049238D+00 + 0.6927576580616D+00 0.7078575216668D+00 0.7232693503742D+00 0.7389989861895D+00 + 0.7550523590420D+00 0.7714354873073D+00 0.7881544782973D+00 0.8052155287175D+00 + 0.8226249250876D+00 0.8403890441249D+00 0.8585143530879D+00 0.8770074100784D+00 + 0.8958748642992D+00 0.9151234562658D+00 0.9347600179702D+00 0.9547914729931D+00 + 0.9752248365635D+00 0.9960672155622D+00 0.1017325808468D+01 0.1039007905241D+01 + 0.1061120887144D+01 0.1083672226499D+01 0.1106669486370D+01 0.1130120320176D+01 + 0.1154032471231D+01 0.1178413772204D+01 0.1203272144493D+01 0.1228615597523D+01 + 0.1254452227950D+01 0.1280790218774D+01 0.1307637838359D+01 0.1335003439353D+01 + 0.1362895457506D+01 0.1391322410385D+01 0.1420292895972D+01 0.1449815591159D+01 + 0.1479899250115D+01 0.1510552702537D+01 0.1541784851777D+01 0.1573604672833D+01 + 0.1606021210210D+01 0.1639043575644D+01 0.1672680945677D+01 0.1706942559091D+01 + 0.1741837714186D+01 0.1777375765901D+01 0.1813566122779D+01 0.1850418243757D+01 + 0.1887941634794D+01 0.1926145845317D+01 0.1965040464488D+01 0.2004635117287D+01 + 0.2044939460400D+01 0.2085963177919D+01 0.2127715976829D+01 0.2170207582300D+01 + 0.2213447732763D+01 0.2257446174769D+01 0.2302212657626D+01 0.2347756927812D+01 + 0.2394088723154D+01 0.2441217766767D+01 0.2489153760756D+01 0.2537906379665D+01 + 0.2587485263675D+01 0.2637900011547D+01 0.2689160173295D+01 0.2741275242598D+01 + 0.2794254648931D+01 0.2848107749430D+01 0.2902843820459D+01 0.2958472048904D+01 + 0.3015001523163D+01 0.3072441223848D+01 0.3130800014182D+01 0.3190086630094D+01 + 0.3250309670002D+01 0.3311477584285D+01 0.3373598664440D+01 0.3436681031917D+01 + 0.3500732626634D+01 0.3565761195166D+01 0.3631774278604D+01 0.3698779200090D+01 + 0.3766783052007D+01 0.3835792682854D+01 0.3905814683769D+01 0.3976855374728D+01 + 0.4048920790399D+01 0.4122016665671D+01 0.4196148420834D+01 0.4271321146438D+01 + 0.4347539587809D+01 0.4424808129241D+01 0.4503130777854D+01 0.4582511147131D+01 + 0.4662952440136D+01 0.4744457432406D+01 0.4827028454547D+01 0.4910667374509D+01 + 0.4995375579573D+01 0.5081153958042D+01 0.5168002880655D+01 0.5255922181721D+01 + 0.5344911139992D+01 0.5434968459290D+01 0.5526092248881D+01 0.5618280003639D+01 + 0.5711528583982D+01 0.5805834195616D+01 0.5901192369103D+01 0.5997597939257D+01 + 0.6095045024395D+01 0.6193527005472D+01 0.6293036505099D+01 0.6393565366487D+01 + 0.6495104632331D+01 0.6597644523660D+01 0.6701174418681D+01 0.6805682831645D+01 + 0.6911157391760D+01 0.7017584822191D+01 0.7124950919171D+01 0.7233240531258D+01 + 0.7342437538781D+01 0.7452524833500D+01 0.7563484298530D+01 0.7675296788562D+01 + 0.7787942110430D+01 0.7901399004058D+01 0.8015645123842D+01 0.8130657020509D+01 + 0.8246410123503D+01 0.8362878723950D+01 0.8480035958250D+01 0.8597853792358D+01 + 0.8716303006799D+01 0.8835353182487D+01 0.8954972687391D+01 0.9075128664130D+01 + 0.9195787018538D+01 0.9316912409273D+01 0.9438468238543D+01 0.9560416644000D+01 + 0.9682718491880D+01 0.9805333371460D+01 0.9928219590896D+01 0.1005133417453D+02 + 0.1017463286171D+02 0.1029807010722D+02 0.1042159908344D+02 0.1054517168417D+02 + 0.1066873853037D+02 0.1079224897780D+02 0.1091565112659D+02 0.1103889183301D+02 + 0.1116191672323D+02 0.1128467020944D+02 0.1140709550823D+02 0.1152913466133D+02 + 0.1165072855885D+02 0.1177181696506D+02 0.1189233854680D+02 0.1201223090454D+02 + 0.1213143060625D+02 0.1224987322407D+02 0.1236749337400D+02 0.1248422475837D+02 + 0.1260000021157D+02 0.1271475174875D+02 0.1282841061773D+02 0.1294090735413D+02 + 0.1305217183979D+02 0.1316213336451D+02 0.1327072069111D+02 0.1337786212400D+02 + 0.1348348558110D+02 0.1358751866928D+02 0.1368988876325D+02 0.1379052308804D+02 + 0.1388934880491D+02 0.1398629310084D+02 0.1408128328150D+02 0.1417424686776D+02 + 0.1426511169568D+02 0.1435380601989D+02 0.1444025862047D+02 0.1452439891313D+02 + 0.1460615706273D+02 0.1468546410000D+02 0.1476225204147D+02 0.1483645401237D+02 + 0.1490800437259D+02 0.1497683884540D+02 0.1504289464893D+02 0.1510611063019D+02 + 0.1516642740155D+02 0.1522378747941D+02 0.1527813542502D+02 0.1532941798703D+02 + 0.1537758424592D+02 0.1542258575964D+02 0.1546437671057D+02 0.1550291405346D+02 + 0.1553815766392D+02 0.1557007048740D+02 0.1559861868825D+02 0.1562377179849D+02 + 0.1564550286611D+02 0.1566378860245D+02 0.1567860952827D+02 0.1568995011828D+02 + 0.1569779894358D+02 0.1570214881171D+02 0.1570299690387D+02 0.1570034490889D+02 + 0.1569419915342D+02 0.1568457072811D+02 0.1567147560898D+02 0.1565493477391D+02 + 0.1563497431333D+02 0.1561162553504D+02 0.1558492506233D+02 0.1555491492507D+02 + 0.1552164264320D+02 0.1548516130217D+02 0.1544552961962D+02 0.1540281200312D+02 + 0.1535707859803D+02 0.1530840532536D+02 0.1525687390884D+02 0.1520257189079D+02 + 0.1514559263632D+02 0.1508603532531D+02 0.1502400493172D+02 0.1495961218971D+02 + 0.1489297354623D+02 0.1482421109950D+02 0.1475345252306D+02 0.1468083097499D+02 + 0.1460648499184D+02 0.1453055836709D+02 0.1445320001360D+02 0.1437456381003D+02 + 0.1429480843075D+02 0.1421409715909D+02 0.1413259768392D+02 0.1405048187912D+02 + 0.1396792556614D+02 0.1388510825940D+02 0.1380221289467D+02 0.1371942554036D+02 + 0.1363693509198D+02 0.1355493294972D+02 0.1347361267958D+02 0.1339316965818D+02 + 0.1331380070165D+02 0.1323570367897D+02 0.1315907711016D+02 0.1308411975004D+02 + 0.1301103015787D+02 0.1294000625373D+02 0.1287124486230D+02 0.1280494124477D+02 + 0.1274128861984D+02 0.1268047767460D+02 0.1262269606643D+02 0.1256812791682D+02 + 0.1251695329838D+02 0.1246934771604D+02 0.1242548158392D+02 0.1238551969900D+02 + 0.1234962071295D+02 0.1231793660373D+02 0.1229061214824D+02 0.1226778439767D+02 + 0.1224958215706D+02 0.1223612547078D+02 0.1222752511553D+02 0.1222388210258D+02 + 0.1222528719100D+02 0.1223182041366D+02 0.1224355061775D+02 0.1226053502171D+02 + 0.1228281879023D+02 0.1231043462935D+02 0.1234340240339D+02 0.1238172877543D+02 + 0.1242540687338D+02 0.1247441598324D+02 0.1252872127141D+02 0.1258827353770D+02 + 0.1265300900087D+02 0.1272284911822D+02 0.1279770044081D+02 0.1287745450601D+02 + 0.1296198776857D+02 0.1305116157186D+02 0.1314482216032D+02 0.1324280073454D+02 + 0.1334491354991D+02 0.1345096205988D+02 0.1356073310471D+02 0.1367399914649D+02 + 0.1379051855093D+02 0.1391003591655D+02 0.1403228245150D+02 0.1415697639825D+02 + 0.1428382350615D+02 0.1441251755180D+02 0.1454274090682D+02 0.1467416515265D+02 + 0.1480645174180D+02 0.1493925270450D+02 0.1507221140012D+02 0.1520496331175D+02 + 0.1533713688305D+02 0.1546835439544D+02 0.1559823288411D+02 0.1572638509088D+02 + 0.1585242045188D+02 0.1597594611769D+02 0.1609656800349D+02 0.1621389186673D+02 + 0.1632752440935D+02 0.1643707440175D+02 0.1654215382521D+02 0.1664237902974D+02 + 0.1673737190368D+02 0.1682676105166D+02 0.1691018297723D+02 0.1698728326633D+02 + 0.1705771776761D+02 0.1712115376582D+02 0.1717727114395D+02 0.1722576353007D+02 + 0.1726633942470D+02 0.1729872330429D+02 0.1732265669667D+02 0.1733789922408D+02 + 0.1734422960952D+02 0.1734144664198D+02 0.1732937009656D+02 0.1730784160492D+02 + 0.1727672547225D+02 0.1723590943644D+02 0.1718530536559D+02 0.1712484989008D+02 + 0.1705450496536D+02 0.1697425836203D+02 0.1688412407975D+02 0.1678414268193D+02 + 0.1667438154808D+02 0.1655493504124D+02 0.1642592458792D+02 0.1628749866833D+02 + 0.1613983271513D+02 0.1598312891883D+02 0.1581761593876D+02 0.1564354851859D+02 + 0.1546120700566D+02 0.1527089677411D+02 0.1507294755170D+02 0.1486771265109D+02 + 0.1465556810624D+02 0.1443691171558D+02 0.1421216199343D+02 0.1398175703206D+02 + 0.1374615327696D+02 0.1350582421831D+02 0.1326125900230D+02 0.1301296096613D+02 + 0.1276144610103D+02 0.1250724144826D+02 0.1225088343315D+02 0.1199291614280D+02 + 0.1173388955369D+02 0.1147435771520D+02 0.1121487689618D+02 0.1095600370143D+02 + 0.1069829316549D+02 0.1044229683153D+02 0.1018856082317D+02 0.9937623917321D+01 + 0.9690015626445D+01 0.9446254298643D+01 0.9206845244038D+01 0.8972278896087D+01 + 0.8743029016360D+01 0.8519550951297D+01 0.8302279949355D+01 0.8091629546790D+01 + 0.7887990030116D+01 0.7691726983014D+01 0.7503179925129D+01 0.7322661049902D+01 + 0.7150454068046D+01 0.6986813162918D+01 0.6831962063451D+01 0.6686093239819D+01 + 0.6549367226364D+01 0.6421912075717D+01 0.6303822947394D+01 0.6195161833447D+01 + 0.6095957423078D+01 0.6006205107394D+01 0.5925867124779D+01 0.5854872846611D+01 + 0.5793119202371D+01 0.5740471242429D+01 0.5696762836121D+01 0.5661797502031D+01 + 0.5635349366701D+01 0.5617164247353D+01 0.5606960853570D+01 0.5604432102259D+01 + 0.5609246539649D+01 0.5621049863505D+01 0.5639466538232D+01 0.5664101495024D+01 + 0.5694541908766D+01 0.5730359042993D+01 0.5771110153784D+01 0.5816340443192D+01 + 0.5865585052475D+01 0.5918371085180D+01 0.5974219649957D+01 0.6032647912832D+01 + 0.6093171148637D+01 0.6155304781260D+01 0.6218566402475D+01 0.6282477759234D+01 + 0.6346566699475D+01 0.6410369066815D+01 0.6473430534781D+01 0.6535308371644D+01 + 0.6595573127395D+01 0.6653810234872D+01 0.6709621517670D+01 0.6762626598041D+01 + 0.6812464198680D+01 0.6858793332986D+01 0.6901294379138D+01 0.6939670034070D+01 + 0.6973646144233D+01 0.7002972410830D+01 0.7027422967990D+01 0.7046796833200D+01 + 0.7060918230061D+01 0.7069636784259D+01 0.7072827594374D+01 0.7070391179926D+01 + 0.7062253309715D+01 0.7048364714231D+01 0.7028700686483D+01 0.7003260576238D+01 + 0.6972067183121D+01 0.6935166054562D+01 0.6892624694966D+01 0.6844531692843D+01 + 0.6790995772965D+01 0.6732144780827D+01 0.6668124606899D+01 0.6599098058289D+01 + 0.6525243685473D+01 0.6446754571799D+01 0.6363837093418D+01 0.6276709657188D+01 + 0.6185601423998D+01 0.6090751024726D+01 0.5992405275866D+01 0.5890817901556D+01 + 0.5786248268476D+01 0.5678960139726D+01 0.5569220453475D+01 0.5457298131760D+01 + 0.5343462924443D+01 0.5227984292928D+01 0.5111130337809D+01 0.4993166774192D+01 + 0.4874355958030D+01 0.4754955966341D+01 0.4635219733799D+01 0.4515394247714D+01 + 0.4395719803061D+01 0.4276429318764D+01 0.4157747716089D+01 0.4039891359594D+01 + 0.3923067560758D+01 0.3807474144035D+01 0.3693299074769D+01 0.3580720148118D+01 + 0.3469904737816D+01 0.3361009603367D+01 0.3254180754011D+01 0.3149553367571D+01 + 0.3047251762116D+01 0.2947389418162D+01 0.2850069049006D+01 0.2755382716614D+01 + 0.2663411990420D+01 0.2574228146230D+01 0.2487892402405D+01 0.2404456190400D+01 + 0.2323961456713D+01 0.2246440993268D+01 0.2171918793250D+01 0.2100410429420D+01 + 0.2031923451965D+01 0.1966457802972D+01 0.1904006244666D+01 0.1844554798640D+01 + 0.1788083193345D+01 0.1734565317240D+01 0.1683969675070D+01 0.1636259844862D+01 + 0.1591394933364D+01 0.1549330027746D+01 0.1510016641546D+01 0.1473403152964D+01 + 0.1439435233770D+01 0.1408056267219D+01 0.1379207753531D+01 0.1352829701650D+01 + 0.1328861006133D+01 0.1307239808175D+01 0.1287903839946D+01 0.1270790751526D+01 + 0.1255838419882D+01 0.1242985239474D+01 0.1232170394175D+01 0.1223334110328D+01 + 0.1216417890857D+01 0.1211364730456D+01 0.1208119311934D+01 0.1206628183910D+01 + 0.1206839920052D+01 0.1208705260142D+01 0.1212177233248D+01 0.1217211263310D+01 + 0.1223765257423D+01 0.1231799677111D+01 0.1241277592815D+01 0.1252164721788D+01 + 0.1264429449524D+01 0.1278042834732D+01 0.1292978597814D+01 0.1309213092627D+01 + 0.1326725261233D+01 0.1345496571135D+01 0.1365510934358D+01 0.1386754607532D+01 + 0.1409215426363D+01 0.1433003097507D+01 0.1458223277591D+01 0.1484860699421D+01 + 0.1512902583279D+01 0.1542338542721D+01 0.1573160498496D+01 0.1605362600812D+01 + 0.1638941160170D+01 0.1673894586973D+01 0.1710223340083D+01 0.1747929884514D+01 + 7 1012 + 1 0 -1 -511.89150 + 2 0 -1 -58.80097 + 2 1 1 -50.61290 + 2 1 -2 -49.69692 + 3 0 -1 -5.52718 + 3 1 1 -3.14309 + 3 1 -2 -3.03034 + 0.2123373461549D-04 0.2173914995400D-04 0.2225659296114D-04 0.2278634977738D-04 + 0.2332871334728D-04 0.2388398358121D-04 0.2445246752083D-04 0.2503447950857D-04 + 0.2563034136106D-04 0.2624038254674D-04 0.2686494036763D-04 0.2750436014548D-04 + 0.2815899541226D-04 0.2882920810522D-04 0.2951536876657D-04 0.3021785674791D-04 + 0.3093706041946D-04 0.3167337738432D-04 0.3242721469777D-04 0.3319898909177D-04 + 0.3398912720483D-04 0.3479806581728D-04 0.3562625209215D-04 0.3647414382175D-04 + 0.3734220968012D-04 0.3823092948144D-04 0.3914079444457D-04 0.4007230746391D-04 + 0.4102598338660D-04 0.4200234929636D-04 0.4300194480406D-04 0.4402532234512D-04 + 0.4507304748402D-04 0.4614569922601D-04 0.4724387033618D-04 0.4836816766617D-04 + 0.4951921248852D-04 0.5069764083903D-04 0.5190410386721D-04 0.5313926819498D-04 + 0.5440381628400D-04 0.5569844681152D-04 0.5702387505533D-04 0.5838083328767D-04 + 0.5977007117859D-04 0.6119235620880D-04 0.6264847409228D-04 0.6413922920902D-04 + 0.6566544504782D-04 0.6722796465978D-04 0.6882765112238D-04 0.7046538801462D-04 + 0.7214207990339D-04 0.7385865284136D-04 0.7561605487667D-04 0.7741525657465D-04 + 0.7925725155197D-04 0.8114305702331D-04 0.8307371436110D-04 0.8505028966841D-04 + 0.8707387436545D-04 0.8914558578994D-04 0.9126656781168D-04 0.9343799146165D-04 + 0.9566105557602D-04 0.9793698745538D-04 0.1002670435396D-03 0.1026525100984D-03 + 0.1050947039390D-03 0.1075949731294D-03 0.1101546977394D-03 0.1127752905997D-03 + 0.1154581980775D-03 0.1182049008719D-03 0.1210169148270D-03 0.1238957917652D-03 + 0.1268431203390D-03 0.1298605269045D-03 0.1329496764137D-03 0.1361122733297D-03 + 0.1393500625619D-03 0.1426648304247D-03 0.1460584056178D-03 0.1495326602303D-03 + 0.1530895107681D-03 0.1567309192056D-03 0.1604588940629D-03 0.1642754915072D-03 + 0.1681828164816D-03 0.1721830238593D-03 0.1762783196258D-03 0.1804709620887D-03 + 0.1847632631165D-03 0.1891575894056D-03 0.1936563637785D-03 0.1982620665115D-03 + 0.2029772366947D-03 0.2078044736231D-03 0.2127464382210D-03 0.2178058545005D-03 + 0.2229855110531D-03 0.2282882625778D-03 0.2337170314442D-03 0.2392748092933D-03 + 0.2449646586752D-03 0.2507897147258D-03 0.2567531868833D-03 0.2628583606444D-03 + 0.2691085993625D-03 0.2755073460880D-03 0.2820581254518D-03 0.2887645455935D-03 + 0.2956303001344D-03 0.3026591701977D-03 0.3098550264756D-03 0.3172218313454D-03 + 0.3247636410353D-03 0.3324846078408D-03 0.3403889823939D-03 0.3484811159850D-03 + 0.3567654629401D-03 0.3652465830528D-03 0.3739291440747D-03 0.3828179242637D-03 + 0.3919178149916D-03 0.4012338234146D-03 0.4107710752045D-03 0.4205348173457D-03 + 0.4305304209971D-03 0.4407633844209D-03 0.4512393359813D-03 0.4619640372121D-03 + 0.4729433859575D-03 0.4841834195856D-03 0.4956903182785D-03 0.5074704083979D-03 + 0.5195301659314D-03 0.5318762200182D-03 0.5445153565579D-03 0.5574545219044D-03 + 0.5707008266453D-03 0.5842615494708D-03 0.5981441411326D-03 0.6123562284955D-03 + 0.6269056186847D-03 0.6418003033287D-03 0.6570484629028D-03 0.6726584711734D-03 + 0.6886388997468D-03 0.7049985227240D-03 0.7217463214642D-03 0.7388914894603D-03 + 0.7564434373277D-03 0.7744117979097D-03 0.7928064315026D-03 0.8116374312024D-03 + 0.8309151283763D-03 0.8506500982622D-03 0.8708531656989D-03 0.8915354109894D-03 + 0.9127081759015D-03 0.9343830698083D-03 0.9565719759715D-03 0.9792870579714D-03 + 0.1002540766287D-02 0.1026345845027D-02 0.1050715338824D-02 0.1075662599879D-02 + 0.1101201295181D-02 0.1127345413883D-02 0.1154109274864D-02 0.1181507534450D-02 + 0.1209555194328D-02 0.1238267609637D-02 0.1267660497252D-02 0.1297749944251D-02 + 0.1328552416593D-02 0.1360084767981D-02 0.1392364248945D-02 0.1425408516127D-02 + 0.1459235641785D-02 0.1493864123514D-02 0.1529312894196D-02 0.1565601332181D-02 + 0.1602749271697D-02 0.1640777013510D-02 0.1679705335822D-02 0.1719555505429D-02 + 0.1760349289133D-02 0.1802108965417D-02 0.1844857336390D-02 0.1888617740010D-02 + 0.1933414062589D-02 0.1979270751585D-02 0.2026212828687D-02 0.2074265903209D-02 + 0.2123456185786D-02 0.2173810502385D-02 0.2225356308647D-02 0.2278121704551D-02 + 0.2332135449417D-02 0.2387426977257D-02 0.2444026412476D-02 0.2501964585936D-02 + 0.2561273051389D-02 0.2621984102285D-02 0.2684130788965D-02 0.2747746936258D-02 + 0.2812867161465D-02 0.2879526892772D-02 0.2947762388071D-02 0.3017610754222D-02 + 0.3089109966753D-02 0.3162298890003D-02 0.3237217297741D-02 0.3313905894238D-02 + 0.3392406335837D-02 0.3472761253004D-02 0.3555014272883D-02 0.3639210042377D-02 + 0.3725394251736D-02 0.3813613658698D-02 0.3903916113173D-02 0.3996350582488D-02 + 0.4090967177209D-02 0.4187817177547D-02 0.4286953060364D-02 0.4388428526794D-02 + 0.4492298530489D-02 0.4598619306504D-02 0.4707448400838D-02 0.4818844700646D-02 + 0.4932868465127D-02 0.5049581357120D-02 0.5169046475404D-02 0.5291328387739D-02 + 0.5416493164639D-02 0.5544608413917D-02 0.5675743316002D-02 0.5809968660057D-02 + 0.5947356880904D-02 0.6087982096781D-02 0.6231920147946D-02 0.6379248636155D-02 + 0.6530046965011D-02 0.6684396381234D-02 0.6842380016839D-02 0.7004082932273D-02 + 0.7169592160503D-02 0.7338996752102D-02 0.7512387821327D-02 0.7689858593235D-02 + 0.7871504451850D-02 0.8057422989391D-02 0.8247714056607D-02 0.8442479814225D-02 + 0.8641824785540D-02 0.8845855910175D-02 0.9054682599025D-02 0.9268416790430D-02 + 0.9487173007575D-02 0.9711068417172D-02 0.9940222889430D-02 0.1017475905935D-01 + 0.1041480238936D-01 0.1066048123337D-01 0.1091192690214D-01 0.1116927373022D-01 + 0.1143265914425D-01 0.1170222373276D-01 0.1197811131760D-01 0.1226046902681D-01 + 0.1254944736912D-01 0.1284520031015D-01 0.1314788535014D-01 0.1345766360348D-01 + 0.1377469987990D-01 0.1409916276750D-01 0.1443122471744D-01 0.1477106213063D-01 + 0.1511885544620D-01 0.1547478923187D-01 0.1583905227632D-01 0.1621183768351D-01 + 0.1659334296907D-01 0.1698377015868D-01 0.1738332588869D-01 0.1779222150874D-01 + 0.1821067318670D-01 0.1863890201578D-01 0.1907713412394D-01 0.1952560078568D-01 + 0.1998453853608D-01 0.2045418928739D-01 0.2093480044805D-01 0.2142662504416D-01 + 0.2192992184360D-01 0.2244495548276D-01 0.2297199659585D-01 0.2351132194704D-01 + 0.2406321456527D-01 0.2462796388197D-01 0.2520586587156D-01 0.2579722319499D-01 + 0.2640234534617D-01 0.2702154880148D-01 0.2765515717239D-01 0.2830350136121D-01 + 0.2896691972007D-01 0.2964575821319D-01 0.3034037058244D-01 0.3105111851634D-01 + 0.3177837182251D-01 0.3252250860359D-01 0.3328391543683D-01 0.3406298755727D-01 + 0.3486012904465D-01 0.3567575301409D-01 0.3651028181063D-01 0.3736414720771D-01 + 0.3823779060956D-01 0.3913166325773D-01 0.4004622644169D-01 0.4098195171364D-01 + 0.4193932110758D-01 0.4291882736274D-01 0.4392097415138D-01 0.4494627631115D-01 + 0.4599526008193D-01 0.4706846334735D-01 0.4816643588104D-01 0.4928973959763D-01 + 0.5043894880863D-01 0.5161465048329D-01 0.5281744451445D-01 0.5404794398948D-01 + 0.5530677546647D-01 0.5659457925562D-01 0.5791200970601D-01 0.5925973549779D-01 + 0.6063843993988D-01 0.6204882127328D-01 0.6349159298001D-01 0.6496748409788D-01 + 0.6647723954103D-01 0.6802162042643D-01 0.6960140440641D-01 0.7121738600725D-01 + 0.7287037697395D-01 0.7456120662128D-01 0.7629072219118D-01 0.7805978921657D-01 + 0.7986929189166D-01 0.8172013344892D-01 0.8361323654265D-01 0.8554954363940D-01 + 0.8753001741513D-01 0.8955564115940D-01 0.9162741918654D-01 0.9374637725383D-01 + 0.9591356298698D-01 0.9813004631275D-01 0.1003969198990D+00 0.1027152996019D+00 + 0.1050863249211D+00 0.1075111594618D+00 0.1099909914051D+00 0.1125270339855D+00 + 0.1151205259766D+00 0.1177727321842D+00 0.1204849439476D+00 0.1232584796489D+00 + 0.1260946852301D+00 0.1289949347182D+00 0.1319606307590D+00 0.1349932051583D+00 + 0.1380941194317D+00 0.1412648653632D+00 0.1445069655708D+00 0.1478219740820D+00 + 0.1512114769165D+00 0.1546770926778D+00 0.1582204731535D+00 0.1618433039236D+00 + 0.1655473049771D+00 0.1693342313383D+00 0.1732058737000D+00 0.1771640590662D+00 + 0.1812106514032D+00 0.1853475522988D+00 0.1895767016304D+00 0.1939000782413D+00 + 0.1983197006251D+00 0.2028376276193D+00 0.2074559591063D+00 0.2121768367234D+00 + 0.2170024445803D+00 0.2219350099852D+00 0.2269768041788D+00 0.2321301430764D+00 + 0.2373973880172D+00 0.2427809465221D+00 0.2482832730585D+00 0.2539068698131D+00 + 0.2596542874715D+00 0.2655281260047D+00 0.2715310354636D+00 0.2776657167793D+00 + 0.2839349225700D+00 0.2903414579550D+00 0.2968881813739D+00 0.3035780054119D+00 + 0.3104138976312D+00 0.3173988814070D+00 0.3245360367687D+00 0.3318285012460D+00 + 0.3392794707188D+00 0.3468922002717D+00 0.3546700050516D+00 0.3626162611285D+00 + 0.3707344063591D+00 0.3790279412529D+00 0.3875004298396D+00 0.3961555005386D+00 + 0.4049968470283D+00 0.4140282291162D+00 0.4232534736091D+00 0.4326764751811D+00 + 0.4423011972414D+00 0.4521316727988D+00 0.4621720053237D+00 0.4724263696067D+00 + 0.4828990126121D+00 0.4935942543268D+00 0.5045164886027D+00 0.5156701839924D+00 + 0.5270598845772D+00 0.5386902107861D+00 0.5505658602051D+00 0.5626916083760D+00 + 0.5750723095830D+00 0.5877128976270D+00 0.6006183865849D+00 0.6137938715547D+00 + 0.6272445293836D+00 0.6409756193782D+00 0.6549924839961D+00 0.6693005495166D+00 + 0.6839053266899D+00 0.6988124113627D+00 0.7140274850788D+00 0.7295563156538D+00 + 0.7454047577210D+00 0.7615787532478D+00 0.7780843320207D+00 0.7949276120969D+00 + 0.8121148002200D+00 0.8296521921997D+00 0.8475461732513D+00 0.8658032182945D+00 + 0.8844298922086D+00 0.9034328500427D+00 0.9228188371772D+00 0.9425946894360D+00 + 0.9627673331456D+00 0.9833437851400D+00 0.1004331152707D+01 0.1025736633476D+01 + 0.1047567515241D+01 0.1069831175720D+01 0.1092535082243D+01 0.1115686791375D+01 + 0.1139293948457D+01 0.1163364287075D+01 0.1187905628445D+01 0.1212925880722D+01 + 0.1238433038208D+01 0.1264435180485D+01 0.1290940471443D+01 0.1317957158220D+01 + 0.1345493570030D+01 0.1373558116898D+01 0.1402159288280D+01 0.1431305651569D+01 + 0.1461005850494D+01 0.1491268603389D+01 0.1522102701342D+01 0.1553517006218D+01 + 0.1585520448546D+01 0.1618122025271D+01 0.1651330797361D+01 0.1685155887276D+01 + 0.1719606476280D+01 0.1754691801602D+01 0.1790421153434D+01 0.1826803871767D+01 + 0.1863849343063D+01 0.1901566996742D+01 0.1939966301501D+01 0.1979056761446D+01 + 0.2018847912032D+01 0.2059349315815D+01 0.2100570557999D+01 0.2142521241790D+01 + 0.2185210983528D+01 0.2228649407614D+01 0.2272846141215D+01 0.2317810808747D+01 + 0.2363553026124D+01 0.2410082394775D+01 0.2457408495423D+01 0.2505540881617D+01 + 0.2554489073015D+01 0.2604262548407D+01 0.2654870738488D+01 0.2706323018355D+01 + 0.2758628699743D+01 0.2811797022979D+01 0.2865837148659D+01 0.2920758149043D+01 + 0.2976568999160D+01 0.3033278567615D+01 0.3090895607108D+01 0.3149428744640D+01 + 0.3208886471423D+01 0.3269277132479D+01 0.3330608915918D+01 0.3392889841912D+01 + 0.3456127751341D+01 0.3520330294118D+01 0.3585504917195D+01 0.3651658852234D+01 + 0.3718799102956D+01 0.3786932432154D+01 0.3856065348377D+01 0.3926204092282D+01 + 0.3997354622651D+01 0.4069522602076D+01 0.4142713382310D+01 0.4216931989288D+01 + 0.4292183107814D+01 0.4368471065927D+01 0.4445799818928D+01 0.4524172933100D+01 + 0.4603593569097D+01 0.4684064465021D+01 0.4765587919192D+01 0.4848165772611D+01 + 0.4931799391130D+01 0.5016489647323D+01 0.5102236902085D+01 0.5189040985952D+01 + 0.5276901180158D+01 0.5365816197444D+01 0.5455784162617D+01 0.5546802592894D+01 + 0.5638868378017D+01 0.5731977760181D+01 0.5826126313769D+01 0.5921308924927D+01 + 0.6017519770983D+01 0.6114752299744D+01 0.6212999208681D+01 0.6312252424025D+01 + 0.6412503079799D+01 0.6513741496818D+01 0.6615957161666D+01 0.6719138705689D+01 + 0.6823273884037D+01 0.6928349554769D+01 0.7034351658067D+01 0.7141265195588D+01 + 0.7249074209985D+01 0.7357761764637D+01 0.7467309923627D+01 0.7577699732003D+01 + 0.7688911196366D+01 0.7800923265826D+01 0.7913713813378D+01 0.8027259617727D+01 + 0.8141536345630D+01 0.8256518534789D+01 0.8372179577355D+01 0.8488491704090D+01 + 0.8605425969248D+01 0.8722952236222D+01 0.8841039164025D+01 0.8959654194655D+01 + 0.9078763541413D+01 0.9198332178230D+01 0.9318323830066D+01 0.9438700964464D+01 + 0.9559424784293D+01 0.9680455221780D+01 0.9801750933887D+01 0.9923269299099D+01 + 0.1004496641570D+02 0.1016679710163D+02 0.1028871489593D+02 0.1041067206198D+02 + 0.1053261959239D+02 0.1065450721594D+02 0.1077628340626D+02 0.1089789539267D+02 + 0.1101928917306D+02 0.1114040952889D+02 0.1126120004259D+02 0.1138160311709D+02 + 0.1150155999788D+02 0.1162101079752D+02 0.1173989452270D+02 0.1185814910389D+02 + 0.1197571142774D+02 0.1209251737221D+02 0.1220850184455D+02 0.1232359882222D+02 + 0.1243774139668D+02 0.1255086182033D+02 0.1266289155645D+02 0.1277376133233D+02 + 0.1288340119558D+02 0.1299174057364D+02 0.1309870833671D+02 0.1320423286383D+02 + 0.1330824211245D+02 0.1341066369131D+02 0.1351142493681D+02 0.1361045299271D+02 + 0.1370767489335D+02 0.1380301765027D+02 0.1389640834224D+02 0.1398777420882D+02 + 0.1407704274716D+02 0.1416414181234D+02 0.1424899972093D+02 0.1433154535791D+02 + 0.1441170828680D+02 0.1448941886294D+02 0.1456460834990D+02 0.1463720903887D+02 + 0.1470715437095D+02 0.1477437906225D+02 0.1483881923166D+02 0.1490041253114D+02 + 0.1495909827839D+02 0.1501481759178D+02 0.1506751352732D+02 0.1511713121747D+02 + 0.1516361801165D+02 0.1520692361818D+02 0.1524700024742D+02 0.1528380275595D+02 + 0.1531728879140D+02 0.1534741893776D+02 0.1537415686084D+02 0.1539746945363D+02 + 0.1541732698111D+02 0.1543370322439D+02 0.1544657562364D+02 0.1545592541956D+02 + 0.1546173779302D+02 0.1546400200242D+02 0.1546271151843D+02 0.1545786415570D+02 + 0.1544946220111D+02 0.1543751253809D+02 0.1542202676661D+02 0.1540302131844D+02 + 0.1538051756708D+02 0.1535454193202D+02 0.1532512597682D+02 0.1529230650045D+02 + 0.1525612562157D+02 0.1521663085508D+02 0.1517387518057D+02 0.1512791710213D+02 + 0.1507882069905D+02 0.1502665566690D+02 0.1497149734847D+02 0.1491342675424D+02 + 0.1485253057170D+02 0.1478890116319D+02 0.1472263655178D+02 0.1465384039476D+02 + 0.1458262194423D+02 0.1450909599456D+02 0.1443338281613D+02 0.1435560807511D+02 + 0.1427590273888D+02 0.1419440296685D+02 0.1411124998625D+02 0.1402658995277D+02 + 0.1394057379573D+02 0.1385335704764D+02 0.1376509965795D+02 0.1367596579089D+02 + 0.1358612360737D+02 0.1349574503081D+02 0.1340500549696D+02 0.1331408368786D+02 + 0.1322316124986D+02 0.1313242249599D+02 0.1304205409292D+02 0.1295224473262D+02 + 0.1286318478926D+02 0.1277506596148D+02 0.1268808090072D+02 0.1260242282594D+02 + 0.1251828512526D+02 0.1243586094535D+02 0.1235534276899D+02 0.1227692198172D+02 + 0.1220078842830D+02 0.1212712995982D+02 0.1205613197253D+02 0.1198797693913D+02 + 0.1192284393379D+02 0.1186090815186D+02 0.1180234042546D+02 0.1174730673615D+02 + 0.1169596772603D+02 0.1164847820834D+02 0.1160498667924D+02 0.1156563483188D+02 + 0.1153055707436D+02 0.1149988005301D+02 0.1147372218250D+02 0.1145219318434D+02 + 0.1143539363525D+02 0.1142341452711D+02 0.1141633683999D+02 0.1141423112993D+02 + 0.1141715713298D+02 0.1142516338731D+02 0.1143828687474D+02 0.1145655268355D+02 + 0.1147997369390D+02 0.1150855028761D+02 0.1154227008374D+02 0.1158110770138D+02 + 0.1162502455129D+02 0.1167396865756D+02 0.1172787451079D+02 0.1178666295396D+02 + 0.1185024110228D+02 0.1191850229803D+02 0.1199132610159D+02 0.1206857831946D+02 + 0.1215011107019D+02 0.1223576288907D+02 0.1232535887199D+02 0.1241871085933D+02 + 0.1251561765997D+02 0.1261586531600D+02 0.1271922740805D+02 0.1282546540151D+02 + 0.1293432903330D+02 0.1304555673916D+02 0.1315887612096D+02 0.1327400445348D+02 + 0.1339064923005D+02 0.1350850874625D+02 0.1362727272054D+02 0.1374662295087D+02 + 0.1386623400591D+02 0.1398577394943D+02 0.1410490509638D+02 0.1422328479880D+02 + 0.1434056625987D+02 0.1445639937388D+02 0.1457043159027D+02 0.1468230879914D+02 + 0.1479167623614D+02 0.1489817940404D+02 0.1500146500841D+02 0.1510118190471D+02 + 0.1519698205391D+02 0.1528852148379D+02 0.1537546125281D+02 0.1545746841364D+02 + 0.1553421697307D+02 0.1560538884523D+02 0.1567067479483D+02 0.1572977536717D+02 + 0.1578240180176D+02 0.1582827692612D+02 0.1586713602663D+02 0.1589872769311D+02 + 0.1592281463392D+02 0.1593917445849D+02 0.1594760042409D+02 0.1594790214378D+02 + 0.1593990625272D+02 0.1592345702984D+02 0.1589841697221D+02 0.1586466731948D+02 + 0.1582210852585D+02 0.1577066067732D+02 0.1571026385193D+02 0.1564087842120D+02 + 0.1556248529064D+02 0.1547508607802D+02 0.1537870322780D+02 0.1527338006062D+02 + 0.1515918075676D+02 0.1503619027308D+02 0.1490451419267D+02 0.1476427850715D+02 + 0.1461562933169D+02 0.1445873255288D+02 0.1429377341010D+02 0.1412095601137D+02 + 0.1394050278444D+02 0.1375265386499D+02 0.1355766642312D+02 0.1335581393054D+02 + 0.1314738537038D+02 0.1293268439219D+02 0.1271202841511D+02 0.1248574768189D+02 + 0.1225418426740D+02 0.1201769104500D+02 0.1177663061449D+02 0.1153137419578D+02 + 0.1128230049248D+02 0.1102979452961D+02 0.1077424647032D+02 0.1051605041603D+02 + 0.1025560319513D+02 0.9993303145083D+01 0.9729548892983D+01 0.9464738139829D+01 + 0.9199266453606D+01 0.8933526076402D+01 0.8667904750745D+01 0.8402784570301D+01 + 0.8138540859996D+01 0.7875541090527D+01 0.7614143832090D+01 0.7354697751983D+01 + 0.7097540660550D+01 0.6842998609696D+01 0.6591385047920D+01 0.6343000035605D+01 + 0.6098129523858D+01 0.5857044699944D+01 0.5620001401934D+01 0.5387239604814D+01 + 0.5158982979846D+01 0.4935438528573D+01 0.4716796292366D+01 0.4503229137976D+01 + 0.4294892619056D+01 0.4091924913152D+01 0.3894446833193D+01 0.3702561912045D+01 + 0.3516356558237D+01 0.3335900280537D+01 0.3161245978670D+01 0.2992430297065D+01 + 0.2829474038194D+01 0.2672382631762D+01 0.2521146655720D+01 0.2375742404881D+01 + 0.2236132502695D+01 0.2102266551639D+01 0.1974081817541D+01 0.1851503943111D+01 + 0.1734447685940D+01 0.1622817676200D+01 0.1516509189368D+01 0.1415408929331D+01 + 0.1319395817360D+01 0.1228341782531D+01 0.1142112549373D+01 0.1060568418635D+01 + 0.9835650373019D+00 0.9109541541726D+00 0.8425843575459D+00 0.7783017917968D+00 + 0.7179508498817D+00 0.6613748390683D+00 0.6084166174653D+00 0.5589191992012D+00 + 0.5127263263911D+00 0.4696830063190D+00 0.4296360125529D+00 0.3924343490009D+00 + 0.3579296762027D+00 0.3259766994340D+00 0.2964335184742D+00 0.2691619391536D+00 + 0.2440277470488D+00 0.2209009439361D+00 0.1996559478365D+00 0.1801717576938D+00 + 0.1623320839184D+00 0.1460254461990D+00 0.1311452401368D+00 0.1175897743854D+00 + 0.1052622800912D+00 0.9407089451527D-01 0.8392862078550D-01 0.7475326577690D-01 + 0.6646735814128D-01 0.5899804851766D-01 0.5227699394346D-01 0.4624022845899D-01 + 0.4082802185442D-01 0.3598472845105D-01 0.3165862773800D-01 0.2780175860384D-01 + 0.2436974881146D-01 0.2132164126495D-01 0.1861971851162D-01 0.1622932681167D-01 + 0.1411870099424D-01 0.1225879120292D-01 0.1062309251766D-01 0.9187478324824D-02 + 0.7930038194170D-02 0.6830920911119D-02 0.5872183206948D-02 0.5037644628161D-02 + 0.4312748890659D-02 0.3684431974697D-02 0.3140997133459D-02 0.2671996911721D-02 + 0.2268122201696D-02 0.1921098300832D-02 0.1623587881022D-02 0.1369100730387D-02 + 0.1151910087150D-02 0.9669753500508D-03 0.8098709208516D-03 0.6767209113939D-03 + 0.5641394300578D-03 0.4691761498429D-03 0.3892668522563D-03 0.3221886372696D-03 + 0.2660194893607D-03 0.2191018926233D-03 0.1800101936858D-03 0.1475214192933D-03 + 0.1205892654847D-03 0.9832098695562D-04 0.7995692809159D-04 0.6485245095860D-04 + 0.5246202996510D-04 0.4232529769133D-04 0.3405484129524D-04 0.2732556374477D-04 + 0.2186543872353D-04 0.1744750226736D-04 0.1388293789508D-04 0.1101512510421D-04 + 0.8714533541124D-05 0.6874356872787D-05 0.5406791351919D-05 0.4239874261002D-05 + 0.3314806839624D-05 0.2583694952262D-05 0.2007648657315D-05 0.1555189018603D-05 + 0.1200916989437D-05 0.9244050332163D-06 0.7092773630705D-06 0.5424493283134D-06 + 0.4135005904089D-06 0.3141603589352D-06 0.2378861413798D-06 0.1795202409555D-06 + 0.1350106538765D-06 0.1011851095086D-06 0.7556879909866D-07 0.5623788451178D-07 + 0.4170219815814D-07 0.3081166707088D-07 0.2268194336078D-07 0.1663552297805D-07 + 0.1215530542863D-07 0.8848107127806D-08 0.6416106613217D-08 0.4634585104140D-08 + 0.3334643304910D-08 0.2389835688104D-08 0.1705876062949D-08 0.1212741020005D-08 + 0.8586376559590D-09 0.6054146003728D-09 0.4250856698627D-09 0.2972075512731D-09 + 0.2069101606973D-09 0.1434236365115D-09 0.9898160505409D-10 0.6800804519963D-10 + 0.4651712787494D-10 0.3167310042586D-10 0.2146695649341D-10 0.1448079937139D-10 + 0.9722622861678D-11 0.6496070631129D-11 0.4319651023999D-11 0.2858591661735D-11 + 0.1882503214946D-11 0.1233598363270D-11 0.8043412065319D-12 0.5218060130221D-12 + 0.3367856512696D-12 0.2162455335843D-12 0.1381220475631D-12 0.8775552000331D-13 diff --git a/Test/Fe16_non_collinear/v_fe16.14 b/Test/Fe16_non_collinear/v_fe16.14 new file mode 100755 index 000000000..f3c4e967f --- /dev/null +++ b/Test/Fe16_non_collinear/v_fe16.14 @@ -0,0 +1,1542 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Fe. + 2 0.0000000000000D+00 + LSMS: xx z= 26. xvalws= 5.22926 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728400909D+02-0.5199725115555D+02-0.5199721790459D+02-0.5199718425142D+02 +-0.5199715019116D+02-0.5199711571889D+02-0.5199708082964D+02-0.5199704551834D+02 +-0.5199700977990D+02-0.5199697360915D+02-0.5199693700086D+02-0.5199689994973D+02 +-0.5199686245042D+02-0.5199682449748D+02-0.5199678608545D+02-0.5199674720876D+02 +-0.5199670786180D+02-0.5199666803887D+02-0.5199662773421D+02-0.5199658694201D+02 +-0.5199654565635D+02-0.5199650387127D+02-0.5199646158073D+02-0.5199641877860D+02 +-0.5199637545872D+02-0.5199633161480D+02-0.5199628724051D+02-0.5199624232942D+02 +-0.5199619687506D+02-0.5199615087084D+02-0.5199610431012D+02-0.5199605718616D+02 +-0.5199600949214D+02-0.5199596122116D+02-0.5199591236626D+02-0.5199586292036D+02 +-0.5199581287632D+02-0.5199576222688D+02-0.5199571096474D+02-0.5199565908248D+02 +-0.5199560657259D+02-0.5199555342748D+02-0.5199549963947D+02-0.5199544520078D+02 +-0.5199539010352D+02-0.5199533433975D+02-0.5199527790139D+02-0.5199522078028D+02 +-0.5199516296816D+02-0.5199510445666D+02-0.5199504523733D+02-0.5199498530160D+02 +-0.5199492464081D+02-0.5199486324617D+02-0.5199480110883D+02-0.5199473821977D+02 +-0.5199467456990D+02-0.5199461015004D+02-0.5199454495085D+02-0.5199447896290D+02 +-0.5199441217666D+02-0.5199434458246D+02-0.5199427617052D+02-0.5199420693096D+02 +-0.5199413685375D+02-0.5199406592876D+02-0.5199399414573D+02-0.5199392149428D+02 +-0.5199384796390D+02-0.5199377354396D+02-0.5199369822368D+02-0.5199362199218D+02 +-0.5199354483843D+02-0.5199346675127D+02-0.5199338771940D+02-0.5199330773139D+02 +-0.5199322677567D+02-0.5199314484053D+02-0.5199306191412D+02-0.5199297798443D+02 +-0.5199289303934D+02-0.5199280706654D+02-0.5199272005361D+02-0.5199263198797D+02 +-0.5199254285685D+02-0.5199245264737D+02-0.5199236134649D+02-0.5199226894099D+02 +-0.5199217541751D+02-0.5199208076251D+02-0.5199198496230D+02-0.5199188800302D+02 +-0.5199178987064D+02-0.5199169055096D+02-0.5199159002963D+02-0.5199148829207D+02 +-0.5199138532359D+02-0.5199128110928D+02-0.5199117563407D+02-0.5199106888269D+02 +-0.5199096083969D+02-0.5199085148944D+02-0.5199074081613D+02-0.5199062880373D+02 +-0.5199051543604D+02-0.5199040069664D+02-0.5199028456895D+02-0.5199016703615D+02 +-0.5199004808124D+02-0.5198992768700D+02-0.5198980583600D+02-0.5198968251063D+02 +-0.5198955769302D+02-0.5198943136512D+02-0.5198930350863D+02-0.5198917410506D+02 +-0.5198904313569D+02-0.5198891058155D+02-0.5198877642345D+02-0.5198864064200D+02 +-0.5198850321751D+02-0.5198836413012D+02-0.5198822335968D+02-0.5198808088582D+02 +-0.5198793668793D+02-0.5198779074512D+02-0.5198764303627D+02-0.5198749354000D+02 +-0.5198734223467D+02-0.5198718909837D+02-0.5198703410894D+02-0.5198687724393D+02 +-0.5198671848065D+02-0.5198655779610D+02-0.5198639516703D+02-0.5198623056988D+02 +-0.5198606398084D+02-0.5198589537577D+02-0.5198572473026D+02-0.5198555201962D+02 +-0.5198537721883D+02-0.5198520030257D+02-0.5198502124524D+02-0.5198484002091D+02 +-0.5198465660333D+02-0.5198447096595D+02-0.5198428308188D+02-0.5198409292391D+02 +-0.5198390046450D+02-0.5198370567579D+02-0.5198350852955D+02-0.5198330899725D+02 +-0.5198310704998D+02-0.5198290265850D+02-0.5198269579318D+02-0.5198248642408D+02 +-0.5198227452087D+02-0.5198206005285D+02-0.5198184298896D+02-0.5198162329776D+02 +-0.5198140094741D+02-0.5198117590571D+02-0.5198094814005D+02-0.5198071761744D+02 +-0.5198048430449D+02-0.5198024816738D+02-0.5198000917191D+02-0.5197976728344D+02 +-0.5197952246692D+02-0.5197927468690D+02-0.5197902390745D+02-0.5197877009224D+02 +-0.5197851320449D+02-0.5197825320698D+02-0.5197799006201D+02-0.5197772373146D+02 +-0.5197745417673D+02-0.5197718135875D+02-0.5197690523796D+02-0.5197662577437D+02 +-0.5197634292744D+02-0.5197605665620D+02-0.5197576691913D+02-0.5197547367423D+02 +-0.5197517687900D+02-0.5197487649041D+02-0.5197457246489D+02-0.5197426475838D+02 +-0.5197395332627D+02-0.5197363812338D+02-0.5197331910403D+02-0.5197299622195D+02 +-0.5197266943031D+02-0.5197233868173D+02-0.5197200392824D+02-0.5197166512128D+02 +-0.5197132221174D+02-0.5197097514984D+02-0.5197062388528D+02-0.5197026836709D+02 +-0.5196990854370D+02-0.5196954436291D+02-0.5196917577189D+02-0.5196880271716D+02 +-0.5196842514461D+02-0.5196804299945D+02-0.5196765622622D+02-0.5196726476881D+02 +-0.5196686857041D+02-0.5196646757354D+02-0.5196606171998D+02-0.5196565095085D+02 +-0.5196523520651D+02-0.5196481442664D+02-0.5196438855015D+02-0.5196395751522D+02 +-0.5196352125928D+02-0.5196307971901D+02-0.5196263283028D+02-0.5196218052823D+02 +-0.5196172274718D+02-0.5196125942066D+02-0.5196079048138D+02-0.5196031586126D+02 +-0.5195983549135D+02-0.5195934930191D+02-0.5195885722231D+02-0.5195835918107D+02 +-0.5195785510585D+02-0.5195734492343D+02-0.5195682855969D+02-0.5195630593961D+02 +-0.5195577698725D+02-0.5195524162577D+02-0.5195469977736D+02-0.5195415136330D+02 +-0.5195359630387D+02-0.5195303451841D+02-0.5195246592528D+02-0.5195189044181D+02 +-0.5195130798435D+02-0.5195071846824D+02-0.5195012180777D+02-0.5194951791619D+02 +-0.5194890670569D+02-0.5194828808741D+02-0.5194766197137D+02-0.5194702826653D+02 +-0.5194638688071D+02-0.5194573772064D+02-0.5194508069188D+02-0.5194441569885D+02 +-0.5194374264482D+02-0.5194306143187D+02-0.5194237196087D+02-0.5194167413149D+02 +-0.5194096784220D+02-0.5194025299021D+02-0.5193952947146D+02-0.5193879718066D+02 +-0.5193805601119D+02-0.5193730585519D+02-0.5193654660341D+02-0.5193577814533D+02 +-0.5193500036904D+02-0.5193421316129D+02-0.5193341640742D+02-0.5193260999141D+02 +-0.5193179379578D+02-0.5193096770164D+02-0.5193013158865D+02-0.5192928533501D+02 +-0.5192842881739D+02-0.5192756191098D+02-0.5192668448947D+02-0.5192579642497D+02 +-0.5192489758803D+02-0.5192398784765D+02-0.5192306707119D+02-0.5192213512442D+02 +-0.5192119187145D+02-0.5192023717474D+02-0.5191927089505D+02-0.5191829289146D+02 +-0.5191730302133D+02-0.5191630114025D+02-0.5191528710207D+02-0.5191426075883D+02 +-0.5191322196077D+02-0.5191217055632D+02-0.5191110639202D+02-0.5191002931255D+02 +-0.5190893916069D+02-0.5190783577729D+02-0.5190671900126D+02-0.5190558866954D+02 +-0.5190444461705D+02-0.5190328667673D+02-0.5190211467945D+02-0.5190092845399D+02 +-0.5189972782709D+02-0.5189851262330D+02-0.5189728266508D+02-0.5189603777267D+02 +-0.5189477776415D+02-0.5189350245533D+02-0.5189221165981D+02-0.5189090518885D+02 +-0.5188958285145D+02-0.5188824445423D+02-0.5188688980147D+02-0.5188551869503D+02 +-0.5188413093435D+02-0.5188272631641D+02-0.5188130463569D+02-0.5187986568418D+02 +-0.5187840925129D+02-0.5187693512386D+02-0.5187544308611D+02-0.5187393291962D+02 +-0.5187240440329D+02-0.5187085731330D+02-0.5186929142309D+02-0.5186770650332D+02 +-0.5186610232183D+02-0.5186447864362D+02-0.5186283523081D+02-0.5186117184259D+02 +-0.5185948823518D+02-0.5185778416183D+02-0.5185605937277D+02-0.5185431361514D+02 +-0.5185254663297D+02-0.5185075816718D+02-0.5184894795548D+02-0.5184711573237D+02 +-0.5184526122909D+02-0.5184338417356D+02-0.5184148429039D+02-0.5183956130079D+02 +-0.5183761492255D+02-0.5183564486998D+02-0.5183365085389D+02-0.5183163258155D+02 +-0.5182958975660D+02-0.5182752207907D+02-0.5182542924529D+02-0.5182331094785D+02 +-0.5182116687559D+02-0.5181899671350D+02-0.5181680014270D+02-0.5181457684041D+02 +-0.5181232647986D+02-0.5181004873028D+02-0.5180774325683D+02-0.5180540972054D+02 +-0.5180304777830D+02-0.5180065708277D+02-0.5179823728232D+02-0.5179578802103D+02 +-0.5179330893860D+02-0.5179079967027D+02-0.5178825984684D+02-0.5178568909453D+02 +-0.5178308703501D+02-0.5178045328526D+02-0.5177778745757D+02-0.5177508915948D+02 +-0.5177235799366D+02-0.5176959355795D+02-0.5176679544522D+02-0.5176396324334D+02 +-0.5176109653512D+02-0.5175819489823D+02-0.5175525790517D+02-0.5175228512318D+02 +-0.5174927611419D+02-0.5174623043474D+02-0.5174314763592D+02-0.5174002726332D+02 +-0.5173686885694D+02-0.5173367195115D+02-0.5173043607457D+02-0.5172716075006D+02 +-0.5172384549462D+02-0.5172048981932D+02-0.5171709322923D+02-0.5171365522335D+02 +-0.5171017529452D+02-0.5170665292940D+02-0.5170308760833D+02-0.5169947880525D+02 +-0.5169582598771D+02-0.5169212861671D+02-0.5168838614662D+02-0.5168459802518D+02 +-0.5168076369333D+02-0.5167688258518D+02-0.5167295412791D+02-0.5166897774168D+02 +-0.5166495283960D+02-0.5166087882755D+02-0.5165675510418D+02-0.5165258106080D+02 +-0.5164835608125D+02-0.5164407954186D+02-0.5163975081138D+02-0.5163536925080D+02 +-0.5163093421337D+02-0.5162644504442D+02-0.5162190108131D+02-0.5161730165335D+02 +-0.5161264608164D+02-0.5160793367906D+02-0.5160316375011D+02-0.5159833559084D+02 +-0.5159344848875D+02-0.5158850172268D+02-0.5158349456272D+02-0.5157842627009D+02 +-0.5157329609709D+02-0.5156810328692D+02-0.5156284707365D+02-0.5155752668206D+02 +-0.5155214132756D+02-0.5154669021608D+02-0.5154117254396D+02-0.5153558749786D+02 +-0.5152993425461D+02-0.5152421198113D+02-0.5151841983433D+02-0.5151255696093D+02 +-0.5150662249744D+02-0.5150061557002D+02-0.5149453529428D+02-0.5148838077528D+02 +-0.5148215110737D+02-0.5147584537403D+02-0.5146946264782D+02-0.5146300199022D+02 +-0.5145646245151D+02-0.5144984307067D+02-0.5144314287525D+02-0.5143636088122D+02 +-0.5142949609291D+02-0.5142254750281D+02-0.5141551409151D+02-0.5140839482753D+02 +-0.5140118866721D+02-0.5139389455459D+02-0.5138651142128D+02-0.5137903818632D+02 +-0.5137147375605D+02-0.5136381702401D+02-0.5135606687078D+02-0.5134822216388D+02 +-0.5134028175756D+02-0.5133224449278D+02-0.5132410919702D+02-0.5131587468413D+02 +-0.5130753975423D+02-0.5129910319357D+02-0.5129056377438D+02-0.5128192025477D+02 +-0.5127317137854D+02-0.5126431587514D+02-0.5125535245940D+02-0.5124627983153D+02 +-0.5123709667690D+02-0.5122780166596D+02-0.5121839345403D+02-0.5120887068125D+02 +-0.5119923197240D+02-0.5118947593678D+02-0.5117960116805D+02-0.5116960624416D+02 +-0.5115948972712D+02-0.5114925016296D+02-0.5113888608154D+02-0.5112839599644D+02 +-0.5111777840483D+02-0.5110703178733D+02-0.5109615460788D+02-0.5108514531363D+02 +-0.5107400233480D+02-0.5106272408452D+02-0.5105130895877D+02-0.5103975533619D+02 +-0.5102806157801D+02-0.5101622602790D+02-0.5100424701185D+02-0.5099212283803D+02 +-0.5097985179674D+02-0.5096743216021D+02-0.5095486218256D+02-0.5094214009961D+02 +-0.5092926412887D+02-0.5091623246932D+02-0.5090304330139D+02-0.5088969478681D+02 +-0.5087618506855D+02-0.5086251227064D+02-0.5084867449820D+02-0.5083466983722D+02 +-0.5082049635455D+02-0.5080615209778D+02-0.5079163509518D+02-0.5077694335558D+02 +-0.5076207486834D+02-0.5074702760324D+02-0.5073179951042D+02-0.5071638852033D+02 +-0.5070079254364D+02-0.5068500947122D+02-0.5066903717403D+02-0.5065287350315D+02 +-0.5063651628963D+02-0.5061996334457D+02-0.5060321245898D+02-0.5058626140382D+02 +-0.5056910792994D+02-0.5055174976809D+02-0.5053418462884D+02-0.5051641020267D+02 +-0.5049842415989D+02-0.5048022415067D+02-0.5046180780505D+02-0.5044317273295D+02 +-0.5042431652422D+02-0.5040523674861D+02-0.5038593095586D+02-0.5036639667573D+02 +-0.5034663141803D+02-0.5032663267268D+02-0.5030639790981D+02-0.5028592457977D+02 +-0.5026521011328D+02-0.5024425192145D+02-0.5022304739591D+02-0.5020159390892D+02 +-0.5017988881346D+02-0.5015792944334D+02-0.5013571311336D+02-0.5011323711944D+02 +-0.5009049873873D+02-0.5006749522980D+02-0.5004422383280D+02-0.5002068176959D+02 +-0.4999686624397D+02-0.4997277444186D+02-0.4994840353146D+02-0.4992375066350D+02 +-0.4989881297144D+02-0.4987358757171D+02-0.4984807156389D+02-0.4982226203106D+02 +-0.4979615603991D+02-0.4976975064117D+02-0.4974304286974D+02-0.4971602974502D+02 +-0.4968870827126D+02-0.4966107543776D+02-0.4963312821924D+02-0.4960486357616D+02 +-0.4957627845502D+02-0.4954736978871D+02-0.4951813449683D+02-0.4948856948612D+02 +-0.4945867165071D+02-0.4942843787257D+02-0.4939786502185D+02-0.4936694995729D+02 +-0.4933568952659D+02-0.4930408056681D+02-0.4927211990478D+02-0.4923980435752D+02 +-0.4920713073265D+02-0.4917409582880D+02-0.4914069643607D+02-0.4910692933642D+02 +-0.4907279130416D+02-0.4903827910633D+02-0.4900338950319D+02-0.4896811924867D+02 +-0.4893246509079D+02-0.4889642377211D+02-0.4885999203021D+02-0.4882316659813D+02 +-0.4878594420482D+02-0.4874832157556D+02-0.4871029543247D+02-0.4867186249491D+02 +-0.4863301947995D+02-0.4859376310277D+02-0.4855409007715D+02-0.4851399711583D+02 +-0.4847348093100D+02-0.4843253823466D+02-0.4839116573905D+02-0.4834936015704D+02 +-0.4830711820251D+02-0.4826443659074D+02-0.4822131203876D+02-0.4817774126566D+02 +-0.4813372099301D+02-0.4808924794511D+02-0.4804431884930D+02-0.4799893043625D+02 +-0.4795307944023D+02-0.4790676259938D+02-0.4785997665588D+02-0.4781271835619D+02 +-0.4776498445124D+02-0.4771677169657D+02-0.4766807685247D+02-0.4761889668409D+02 +-0.4756922796153D+02-0.4751906745988D+02-0.4746841195927D+02-0.4741725824487D+02 +-0.4736560310686D+02-0.4731344334036D+02-0.4726077574537D+02-0.4720759712663D+02 +-0.4715390429349D+02-0.4709969405976D+02-0.4704496324345D+02-0.4698970866656D+02 +-0.4693392715482D+02-0.4687761553742D+02-0.4682077064661D+02-0.4676338931742D+02 +-0.4670546838725D+02-0.4664700469545D+02-0.4658799508292D+02-0.4652843639162D+02 +-0.4646832546412D+02-0.4640765914308D+02-0.4634643427075D+02-0.4628464768840D+02 +-0.4622229623583D+02-0.4615937675077D+02-0.4609588606835D+02-0.4603182102046D+02 +-0.4596717843531D+02-0.4590195513672D+02-0.4583614794369D+02-0.4576975366979D+02 +-0.4570276912265D+02-0.4563519110351D+02-0.4556701640665D+02-0.4549824181908D+02 +-0.4542886412007D+02-0.4535888008084D+02-0.4528828646428D+02-0.4521708002473D+02 +-0.4514525750785D+02-0.4507281565054D+02-0.4499975118097D+02-0.4492606081870D+02 +-0.4485174127497D+02-0.4477678925295D+02-0.4470120144833D+02-0.4462497454985D+02 +-0.4454810524011D+02-0.4447059019649D+02-0.4439242609219D+02-0.4431360959758D+02 +-0.4423413738159D+02-0.4415400611337D+02-0.4407321246418D+02-0.4399175310947D+02 +-0.4390962473114D+02-0.4382682402010D+02-0.4374334767908D+02-0.4365919242563D+02 +-0.4357435499539D+02-0.4348883214570D+02-0.4340262065933D+02-0.4331571734857D+02 +-0.4322811905962D+02-0.4313982267710D+02-0.4305082512897D+02-0.4296112339160D+02 +-0.4287071449512D+02-0.4277959552900D+02-0.4268776364786D+02-0.4259521607738D+02 +-0.4250195012053D+02-0.4240796316384D+02-0.4231325268378D+02-0.4221781625326D+02 +-0.4212165154821D+02-0.4202475635403D+02-0.4192712857207D+02-0.4182876622603D+02 +-0.4172966746809D+02-0.4162983058491D+02-0.4152925400326D+02-0.4142793629535D+02 +-0.4132587618362D+02-0.4122307254514D+02-0.4111952441526D+02-0.4101523099069D+02 +-0.4091019163177D+02-0.4080440586392D+02-0.4069787337814D+02-0.4059059403052D+02 +-0.4048256784069D+02-0.4037379498919D+02-0.4026427581359D+02-0.4015401080347D+02 +-0.4004300059408D+02-0.3993124595881D+02-0.3981874780047D+02-0.3970550714118D+02 +-0.3959152511128D+02-0.3947680293704D+02-0.3936134192738D+02-0.3924514345974D+02 +-0.3912820896514D+02-0.3901053991273D+02-0.3889213779388D+02-0.3877300410616D+02 +-0.3865314033730D+02-0.3853254794941D+02-0.3841122836384D+02-0.3828918294671D+02 +-0.3816641299561D+02-0.3804291972752D+02-0.3791870426838D+02-0.3779376764439D+02 +-0.3766811077544D+02-0.3754173447071D+02-0.3741463942662D+02-0.3728682622747D+02 +-0.3715829534855D+02-0.3702904716206D+02-0.3689908194568D+02-0.3676839989389D+02 +-0.3663700113198D+02-0.3650488573242D+02-0.3637205373385D+02-0.3623850516215D+02 +-0.3610424005352D+02-0.3596925847947D+02-0.3583356057318D+02-0.3569714655716D+02 +-0.3556001677183D+02-0.3542217170480D+02-0.3528361202035D+02-0.3514433858906D+02 +-0.3500435251706D+02-0.3486365517474D+02-0.3472224822457D+02-0.3458013364781D+02 +-0.3443731376977D+02-0.3429379128348D+02-0.3414956927154D+02-0.3400465122587D+02 +-0.3385904106531D+02-0.3371274315081D+02-0.3356576229817D+02-0.3341810378823D+02 +-0.3326977337430D+02-0.3312077728689D+02-0.3297112223571D+02-0.3282081540879D+02 +-0.3266986446883D+02-0.3251827754673D+02-0.3236606323235D+02-0.3221323056253D+02 +-0.3205978900636D+02-0.3190574844798D+02-0.3175111916665D+02-0.3159591181450D+02 +-0.3144013739192D+02-0.3128380722060D+02-0.3112693291460D+02-0.3096952634939D+02 +-0.3081159962896D+02-0.3065316505139D+02-0.3049423507279D+02-0.3033482226994D+02 +-0.3017493930171D+02-0.3001459886954D+02-0.2985381367711D+02-0.2969259638940D+02 +-0.2953095959141D+02-0.2936891574677D+02-0.2920647715631D+02-0.2904365591713D+02 +-0.2888046388202D+02-0.2871691261992D+02-0.2855301337730D+02-0.2838877704096D+02 +-0.2822421410237D+02-0.2805933462405D+02-0.2789414820796D+02-0.2772866396645D+02 +-0.2756289049588D+02-0.2739683585338D+02-0.2723050753680D+02-0.2706391246838D+02 +-0.2689705698223D+02-0.2672994681603D+02-0.2656258710714D+02-0.2639498239345D+02 +-0.2622713661917D+02-0.2605905314574D+02-0.2589073476829D+02-0.2572218373759D+02 +-0.2555340178776D+02-0.2538439017000D+02-0.2521514969218D+02-0.2504568076457D+02 +-0.2487598345161D+02-0.2470605752972D+02-0.2453590255090D+02-0.2436551791213D+02 +-0.2419490293015D+02-0.2402405692122D+02-0.2385297928550D+02-0.2368166959536D+02 +-0.2351012768684D+02-0.2333835375355D+02-0.2316634844181D+02-0.2299411294593D+02 +-0.2282164910224D+02-0.2264895948042D+02-0.2247604747020D+02-0.2230291736187D+02 +-0.2212957441833D+02-0.2195602493665D+02-0.2178227629680D+02-0.2160833699531D+02 +-0.2143421666157D+02-0.2125992605447D+02-0.2108547703736D+02-0.2091088252957D+02 +-0.2073615643311D+02-0.2056131353347D+02-0.2038636937454D+02-0.2021134010787D+02 +-0.2003624231780D+02-0.1986109282464D+02-0.1968590846923D+02-0.1951070588338D+02 +-0.1933550125113D+02-0.1916031006739D+02-0.1898514690054D+02-0.1881002516654D+02 +-0.1863495692195D+02-0.1845995268332D+02-0.1828502127992D+02-0.1811016974578D+02 +-0.1793540325598D+02-0.1776072511080D+02-0.1758613676940D+02-0.1741163793327D+02 +-0.1723722667775D+02-0.1706289962834D+02-0.1688865217702D+02-0.1671447873257D+02 +-0.1654037299789D+02-0.1636632826691D+02-0.1619233773325D+02-0.1601839480315D+02 +-0.1584449340510D+02-0.1567062828984D+02-0.1549679531468D+02-0.1532299170720D+02 +-0.1514921630451D+02-0.1497546976480D+02-0.1480175474939D+02-0.1462807607400D+02 +-0.1445444082871D+02-0.1428085846710D+02-0.1410734086517D+02-0.1393390235146D+02 +-0.1376055970989D+02-0.1358733215727D+02-0.1341424129731D+02-0.1324131105355D+02 +-0.1306856758305D+02-0.1289603917318D+02-0.1272375612351D+02-0.1255175061484D+02 +-0.1238005656736D+02-0.1220870948967D+02-0.1203774632043D+02-0.1186720526422D+02 +-0.1169712562320D+02-0.1152754762583D+02-0.1135851225403D+02-0.1119006106993D+02 +-0.1102223604329D+02-0.1085507938069D+02-0.1068863335731D+02-0.1052294015218D+02 +-0.1035804168776D+02-0.1019397947446D+02-0.1003079446077D+02-0.9868526889628D+01 +-0.9707216161554D+01-0.9546900704939D+01-0.9387617854023D+01-0.9229403734858D+01 +-0.9072293159592D+01-0.8916319529363D+01-0.8761514745993D+01-0.8607909132693D+01 +-0.8455531363896D+01-0.8304408404305D+01-0.8154565457227D+01-0.8006025922166D+01 +-0.7858811361682D+01-0.7712941477416D+01-0.7568434095199D+01-0.7425305159081D+01 +-0.7283568734134D+01-0.7143237017788D+01-0.7004320359504D+01-0.6866827288485D+01 +-0.6730764549154D+01-0.6596137144079D+01-0.6462948384000D+01-0.6331199944618D+01 +-0.6200891929738D+01-0.6072022940407D+01-0.5944590149603D+01-0.5818589382077D+01 +-0.5694015198898D+01-0.5570860986265D+01-0.5449119048124D+01-0.5328780702141D+01 +-0.5209836378552D+01-0.5092275721431D+01-0.4976087691897D+01-0.4861260672787D+01 +-0.4747782574321D+01-0.4635640940271D+01-0.4524823054180D+01-0.4415316045125D+01 +-0.4307106992579D+01-0.4200183029885D+01-0.4094531445869D+01-0.3990139784139D+01 +-0.3886995939600D+01-0.3785088251726D+01-0.3684405594148D+01-0.3584937460106D+01 +-0.3486674043348D+01-0.3389606314047D+01-0.3293726089348D+01-0.3199026098161D+01 +-0.3105500039868D+01-0.3013142636618D+01-0.2921949678952D+01-0.2831918064533D+01 +-0.2743045829849D+01-0.2655332174788D+01-0.2568777480092D+01-0.2483383317815D+01 +-0.2399152454962D+01-0.2316088850658D+01-0.2234197647300D+01-0.2153485156272D+01 +-0.2073958838965D+01-0.1995627283965D+01-0.1918500181413D+01-0.1842588295670D+01 +-0.1767903437522D+01-0.1694458437274D+01-0.1622267120110D+01-0.1551344285168D+01 +-0.1481705689753D+01-0.1413368040087D+01-0.1346348989896D+01-0.1280667148051D+01 +-0.1216342096293D+01-0.1153394417906D+01-0.1091845737986D+01-0.1031718775725D+01 +-0.9730374088849D+00-0.9158267504133D+00-0.8601132368937D+00-0.8059247283301D+00 +-0.7532906185600D+00-0.7022419554295D+00-0.6528115697324D+00-0.6050342118170D+00 +-0.5589466947046D+00-0.5145880425354D+00-0.4719996431596D+00-0.4312254037239D+00 +-0.3923119081554D+00-0.3553085755132D+00-0.3202678182603D+00-0.2872451996103D+00 +-0.2562993012896D+00 + 0.0000000000000D+00 + 1012 0.5229258479779D+01 + 0.2150742905406D-04 0.2201934401975D-04 0.2254344131081D-04 0.2308001074793D-04 + 0.2362934904336D-04 0.2419175996469D-04 0.2476755450247D-04 0.2535705104185D-04 + 0.2596057553829D-04 0.2657846169737D-04 0.2721105115901D-04 0.2785869368592D-04 + 0.2852174735659D-04 0.2920057876285D-04 0.2989556321214D-04 0.3060708493450D-04 + 0.3133553729459D-04 0.3208132300862D-04 0.3284485436652D-04 0.3362655345933D-04 + 0.3442685241199D-04 0.3524619362168D-04 0.3608503000175D-04 0.3694382523153D-04 + 0.3782305401197D-04 0.3872320232740D-04 0.3964476771351D-04 0.4058825953159D-04 + 0.4155419924941D-04 0.4254312072866D-04 0.4355557051923D-04 0.4459210816046D-04 + 0.4565330648961D-04 0.4673975195749D-04 0.4785204495171D-04 0.4899080012754D-04 + 0.5015664674660D-04 0.5135022902361D-04 0.5257220648130D-04 0.5382325431382D-04 + 0.5510406375867D-04 0.5641534247751D-04 0.5775781494596D-04 0.5913222285265D-04 + 0.6053932550771D-04 0.6197990026094D-04 0.6345474292991D-04 0.6496466823815D-04 + 0.6651051026378D-04 0.6809312289875D-04 0.6971338031887D-04 0.7137217746513D-04 + 0.7307043053626D-04 0.7480907749308D-04 0.7658907857468D-04 0.7841141682692D-04 + 0.8027709864336D-04 0.8218715431905D-04 0.8414263861740D-04 0.8614463135050D-04 + 0.8819423797310D-04 0.9029259019072D-04 0.9244084658213D-04 0.9464019323656D-04 + 0.9689184440594D-04 0.9919704317265D-04 0.1015570621330D-03 0.1039732040969D-03 + 0.1064468028041D-03 0.1089792236573D-03 0.1115718644728D-03 0.1142261562483D-03 + 0.1169435639500D-03 0.1197255873171D-03 0.1225737616857D-03 0.1254896588328D-03 + 0.1284748878395D-03 0.1315310959746D-03 0.1346599695998D-03 0.1378632350954D-03 + 0.1411426598085D-03 0.1445000530233D-03 0.1479372669546D-03 0.1514561977641D-03 + 0.1550587866019D-03 0.1587470206711D-03 0.1625229343189D-03 0.1663886101524D-03 + 0.1703461801815D-03 0.1743978269887D-03 0.1785457849256D-03 0.1827923413391D-03 + 0.1871398378251D-03 0.1915906715131D-03 0.1961472963799D-03 0.2008122245952D-03 + 0.2055880278984D-03 0.2104773390081D-03 0.2154828530649D-03 0.2206073291079D-03 + 0.2258535915864D-03 0.2312245319072D-03 0.2367231100177D-03 0.2423523560273D-03 + 0.2481153718665D-03 0.2540153329849D-03 0.2600554900897D-03 0.2662391709247D-03 + 0.2725697820915D-03 0.2790508109132D-03 0.2856858273428D-03 0.2924784859153D-03 + 0.2994325277470D-03 0.3065517825810D-03 0.3138401708812D-03 0.3213017059753D-03 + 0.3289404962488D-03 0.3367607473897D-03 0.3447667646870D-03 0.3529629553823D-03 + 0.3613538310777D-03 0.3699440101989D-03 0.3787382205180D-03 0.3877413017338D-03 + 0.3969582081140D-03 0.4063940111991D-03 0.4160539025692D-03 0.4259431966769D-03 + 0.4360673337456D-03 0.4464318827368D-03 0.4570425443864D-03 0.4679051543124D-03 + 0.4790256861959D-03 0.4904102550358D-03 0.5020651204812D-03 0.5139966902408D-03 + 0.5262115235724D-03 0.5387163348549D-03 0.5515179972435D-03 0.5646235464104D-03 + 0.5780401843732D-03 0.5917752834137D-03 0.6058363900874D-03 0.6202312293275D-03 + 0.6349677086450D-03 0.6500539224267D-03 0.6654981563344D-03 0.6813088918062D-03 + 0.6974948106637D-03 0.7140647998269D-03 0.7310279561389D-03 0.7483935913040D-03 + 0.7661712369406D-03 0.7843706497523D-03 0.8030018168203D-03 0.8220749610184D-03 + 0.8416005465556D-03 0.8615892846469D-03 0.8820521393172D-03 0.9030003333406D-03 + 0.9244453543176D-03 0.9463989608946D-03 0.9688731891282D-03 0.9918803589975D-03 + 0.1015433081069D-02 0.1039544263315D-02 0.1064227118095D-02 0.1089495169290D-02 + 0.1115362259619D-02 0.1141842558105D-02 0.1168950567737D-02 0.1196701133289D-02 + 0.1225109449338D-02 0.1254191068456D-02 0.1283961909601D-02 0.1314438266696D-02 + 0.1345636817413D-02 0.1377574632157D-02 0.1410269183260D-02 0.1443738354387D-02 + 0.1478000450161D-02 0.1513074206015D-02 0.1548978798262D-02 0.1585733854409D-02 + 0.1623359463706D-02 0.1661876187936D-02 0.1701305072458D-02 0.1741667657505D-02 + 0.1782985989747D-02 0.1825282634108D-02 0.1868580685877D-02 0.1912903783076D-02 + 0.1958276119133D-02 0.2004722455835D-02 0.2052268136585D-02 0.2100939099962D-02 + 0.2150761893598D-02 0.2201763688371D-02 0.2253972292925D-02 0.2307416168524D-02 + 0.2362124444253D-02 0.2418126932561D-02 0.2475454145167D-02 0.2534137309329D-02 + 0.2594208384486D-02 0.2655700079287D-02 0.2718645869002D-02 0.2783080013344D-02 + 0.2849037574687D-02 0.2916554436715D-02 0.2985667323484D-02 0.3056413818931D-02 + 0.3128832386828D-02 0.3202962391187D-02 0.3278844117136D-02 0.3356518792272D-02 + 0.3436028608501D-02 0.3517416744371D-02 0.3600727387929D-02 0.3686005760082D-02 + 0.3773298138499D-02 0.3862651882061D-02 0.3954115455860D-02 0.4047738456768D-02 + 0.4143571639594D-02 0.4241666943825D-02 0.4342077520985D-02 0.4444857762604D-02 + 0.4550063328833D-02 0.4657751177697D-02 0.4767979595018D-02 0.4880808225009D-02 + 0.4996298101570D-02 0.5114511680279D-02 0.5235512871115D-02 0.5359367071918D-02 + 0.5486141202598D-02 0.5615903740128D-02 0.5748724754308D-02 0.5884675944352D-02 + 0.6023830676284D-02 0.6166264021183D-02 0.6312052794284D-02 0.6461275594959D-02 + 0.6614012847588D-02 0.6770346843357D-02 0.6930361782982D-02 0.7094143820394D-02 + 0.7261781107400D-02 0.7433363839342D-02 0.7608984301773D-02 0.7788736918176D-02 + 0.7972718298747D-02 0.8161027290261D-02 0.8353765027049D-02 0.8551034983111D-02 + 0.8752943025377D-02 0.8959597468160D-02 0.9171109128811D-02 0.9387591384603D-02 + 0.9609160230877D-02 0.9835934340477D-02 0.1006803512449D-01 0.1030558679431D-01 + 0.1054871642512D-01 0.1079755402073D-01 0.1105223257982D-01 0.1131288816368D-01 + 0.1157965996544D-01 0.1185269038080D-01 0.1213212508026D-01 0.1241811308303D-01 + 0.1271080683248D-01 0.1301036227325D-01 0.1331693893004D-01 0.1363069998813D-01 + 0.1395181237567D-01 0.1428044684765D-01 0.1461677807184D-01 0.1496098471648D-01 + 0.1531324953990D-01 0.1567375948211D-01 0.1604270575828D-01 0.1642028395434D-01 + 0.1680669412453D-01 0.1720214089116D-01 0.1760683354637D-01 0.1802098615621D-01 + 0.1844481766683D-01 0.1887855201303D-01 0.1932241822902D-01 0.1977665056168D-01 + 0.2024148858606D-01 0.2071717732349D-01 0.2120396736203D-01 0.2170211497964D-01 + 0.2221188226980D-01 0.2273353726988D-01 0.2326735409215D-01 0.2381361305754D-01 + 0.2437260083229D-01 0.2494461056731D-01 0.2552994204062D-01 0.2612890180262D-01 + 0.2674180332442D-01 0.2736896714935D-01 0.2801072104743D-01 0.2866740017320D-01 + 0.2933934722669D-01 0.3002691261781D-01 0.3073045463399D-01 0.3145033961141D-01 + 0.3218694210958D-01 0.3294064508962D-01 0.3371184009606D-01 0.3450092744243D-01 + 0.3530831640054D-01 0.3613442539362D-01 0.3697968219334D-01 0.3784452412086D-01 + 0.3872939825181D-01 0.3963476162544D-01 0.4056108145796D-01 0.4150883536008D-01 + 0.4247851155891D-01 0.4347060912422D-01 0.4448563819924D-01 0.4552412023590D-01 + 0.4658658823475D-01 0.4767358698962D-01 0.4878567333696D-01 0.4992341641008D-01 + 0.5108739789835D-01 0.5227821231135D-01 0.5349646724813D-01 0.5474278367169D-01 + 0.5601779618862D-01 0.5732215333417D-01 0.5865651786266D-01 0.6002156704340D-01 + 0.6141799296226D-01 0.6284650282880D-01 0.6430781928923D-01 0.6580268074515D-01 + 0.6733184167825D-01 0.6889607298100D-01 0.7049616229337D-01 0.7213291434581D-01 + 0.7380715130845D-01 0.7551971314661D-01 0.7727145798277D-01 0.7906326246509D-01 + 0.8089602214242D-01 0.8277065184608D-01 0.8468808607842D-01 0.8664927940812D-01 + 0.8865520687255D-01 0.9070686438707D-01 0.9280526916144D-01 0.9495146012343D-01 + 0.9714649834967D-01 0.9939146750384D-01 0.1016874742823D+00 0.1040356488672D+00 + 0.1064371453872D+00 0.1088931423856D+00 0.1114048432967D+00 0.1139734769295D+00 + 0.1166002979593D+00 0.1192865874273D+00 0.1220336532487D+00 0.1248428307276D+00 + 0.1277154830815D+00 0.1306530019730D+00 0.1336568080498D+00 0.1367283514936D+00 + 0.1398691125766D+00 0.1430806022269D+00 0.1463643626021D+00 0.1497219676713D+00 + 0.1531550238057D+00 0.1566651703780D+00 0.1602540803695D+00 0.1639234609870D+00 + 0.1676750542871D+00 0.1715106378098D+00 0.1754320252209D+00 0.1794410669619D+00 + 0.1835396509100D+00 0.1877297030455D+00 0.1920131881282D+00 0.1963921103827D+00 + 0.2008685141914D+00 0.2054444847966D+00 0.2101221490109D+00 0.2149036759359D+00 + 0.2197912776889D+00 0.2247872101386D+00 0.2298937736476D+00 0.2351133138248D+00 + 0.2404482222837D+00 0.2459009374100D+00 0.2514739451362D+00 0.2571697797240D+00 + 0.2629910245536D+00 0.2689403129212D+00 0.2750203288421D+00 0.2812338078623D+00 + 0.2875835378751D+00 0.2940723599454D+00 0.3007031691395D+00 0.3074789153608D+00 + 0.3144026041916D+00 0.3214772977396D+00 0.3287061154899D+00 0.3360922351618D+00 + 0.3436388935694D+00 0.3513493874868D+00 0.3592270745164D+00 0.3672753739607D+00 + 0.3754977676972D+00 0.3838978010545D+00 0.3924790836915D+00 0.4012452904770D+00 + 0.4102001623706D+00 0.4193475073036D+00 0.4286912010595D+00 0.4382351881538D+00 + 0.4479834827120D+00 0.4579401693452D+00 0.4681094040228D+00 0.4784954149418D+00 + 0.4891025033910D+00 0.4999350446102D+00 0.5109974886435D+00 0.5222943611853D+00 + 0.5338302644183D+00 0.5456098778426D+00 0.5576379590956D+00 0.5699193447601D+00 + 0.5824589511607D+00 0.5952617751475D+00 0.6083328948654D+00 0.6216774705074D+00 + 0.6353007450521D+00 0.6492080449824D+00 0.6634047809857D+00 0.6778964486325D+00 + 0.6926886290333D+00 0.7077869894721D+00 0.7231972840138D+00 0.7389253540860D+00 + 0.7549771290311D+00 0.7713586266289D+00 0.7880759535873D+00 0.8051353059985D+00 + 0.8225429697604D+00 0.8403053209599D+00 0.8584288262158D+00 0.8769200429817D+00 + 0.8957856198031D+00 0.9150322965294D+00 0.9346669044774D+00 0.9546963665439D+00 + 0.9751276972649D+00 0.9959680028197D+00 0.1017224480976D+01 0.1038904420974D+01 + 0.1061015203349D+01 0.1083564299686D+01 0.1106559272300D+01 0.1130007773859D+01 + 0.1153917546912D+01 0.1178296423354D+01 0.1203152323804D+01 0.1228493256899D+01 + 0.1254327318495D+01 0.1280662690787D+01 0.1307507641324D+01 0.1334870521934D+01 + 0.1362759767535D+01 0.1391183894856D+01 0.1420151501035D+01 0.1449671262109D+01 + 0.1479751931386D+01 0.1510402337698D+01 0.1541631383520D+01 0.1573448042969D+01 + 0.1605861359662D+01 0.1638880444440D+01 0.1672514472946D+01 0.1706772683055D+01 + 0.1741664372155D+01 0.1777198894269D+01 0.1813385657016D+01 0.1850234118409D+01 + 0.1887753783475D+01 0.1925954200705D+01 0.1964844958324D+01 0.2004435680370D+01 + 0.2044736022586D+01 0.2085755668115D+01 0.2127504322996D+01 0.2169991711448D+01 + 0.2213227570952D+01 0.2257221647108D+01 0.2301983688271D+01 0.2347523439972D+01 + 0.2393850639086D+01 0.2440975007782D+01 0.2488906247220D+01 0.2537654031002D+01 + 0.2587227998372D+01 0.2637637747157D+01 0.2688892826442D+01 0.2741002728983D+01 + 0.2793976883341D+01 0.2847824645743D+01 0.2902555291652D+01 0.2958178007063D+01 + 0.3014701879494D+01 0.3072135888684D+01 0.3130488897001D+01 0.3189769639525D+01 + 0.3249986713841D+01 0.3311148569513D+01 0.3373263497233D+01 0.3436339617667D+01 + 0.3500384869964D+01 0.3565406999951D+01 0.3631413547991D+01 0.3698411836514D+01 + 0.3766408957221D+01 0.3835411757947D+01 0.3905426829193D+01 0.3976460490322D+01 + 0.4048518775419D+01 0.4121607418815D+01 0.4195731840277D+01 0.4270897129857D+01 + 0.4347108032420D+01 0.4424368931831D+01 0.4502683834816D+01 0.4582056354503D+01 + 0.4662489693636D+01 0.4743986627475D+01 0.4826549486387D+01 0.4910180138127D+01 + 0.4994879969825D+01 0.5080649869681D+01 0.5167490208373D+01 0.5255400820202D+01 + 0.5344380983962D+01 0.5434429403565D+01 0.5525544188426D+01 0.5617722833617D+01 + 0.5710962199815D+01 0.5805258493041D+01 0.5900607244231D+01 0.5997003288635D+01 + 0.6094440745069D+01 0.6192912995049D+01 0.6292412661814D+01 0.6392931589269D+01 + 0.6494460820874D+01 0.6596990578488D+01 0.6700510241224D+01 0.6805008324307D+01 + 0.6910472457995D+01 0.7016889366579D+01 0.7124244847491D+01 0.7232523750568D+01 + 0.7341709957494D+01 0.7451786361463D+01 0.7562734847107D+01 0.7674536270712D+01 + 0.7787170440791D+01 0.7900616099026D+01 0.8014850901658D+01 0.8129851401340D+01 + 0.8245593029526D+01 0.8362050079436D+01 0.8479195689649D+01 0.8597001828383D+01 + 0.8715439278509D+01 0.8834477623371D+01 0.8954085233454D+01 0.9074229253973D+01 + 0.9194875593440D+01 0.9315988913276D+01 0.9437532618530D+01 0.9559468849772D+01 + 0.9681758476237D+01 0.9804361090277D+01 0.9927235003199D+01 0.1005033724256D+02 + 0.1017362355101D+02 0.1029704838669D+02 0.1042056492540D+02 0.1054412506444D+02 + 0.1066767942831D+02 0.1079117737637D+02 0.1091456701244D+02 0.1103779519646D+02 + 0.1116080755839D+02 0.1128354851420D+02 0.1140596128432D+02 0.1152798791434D+02 + 0.1164956929827D+02 0.1177064520433D+02 0.1189115430327D+02 0.1201103419951D+02 + 0.1213022146500D+02 0.1224865167586D+02 0.1236625945201D+02 0.1248297849976D+02 + 0.1259874165744D+02 0.1271348094411D+02 0.1282712761148D+02 0.1293961219902D+02 + 0.1305086459240D+02 0.1316081408518D+02 0.1326938944391D+02 0.1337651897664D+02 + 0.1348213060491D+02 0.1358615193909D+02 0.1368851035736D+02 0.1378913308811D+02 + 0.1388794729589D+02 0.1398488017086D+02 0.1407985902179D+02 0.1417281137257D+02 + 0.1426366506212D+02 0.1435234834789D+02 0.1443879001264D+02 0.1452291947466D+02 + 0.1460466690129D+02 0.1468396332564D+02 0.1476074076649D+02 0.1483493235126D+02 + 0.1490647244192D+02 0.1497529676373D+02 0.1504134253675D+02 0.1510454860984D+02 + 0.1516485559720D+02 0.1522220601698D+02 0.1527654443219D+02 0.1532781759325D+02 + 0.1537597458241D+02 0.1542096695946D+02 0.1546274890874D+02 0.1550127738702D+02 + 0.1553651227211D+02 0.1556841651189D+02 0.1559695627334D+02 0.1562210109145D+02 + 0.1564382401753D+02 0.1566210176664D+02 0.1567691486377D+02 0.1568824778841D+02 + 0.1569608911712D+02 0.1570043166360D+02 0.1570127261607D+02 0.1569861367129D+02 + 0.1569246116496D+02 0.1568282619787D+02 0.1566972475757D+02 0.1565317783486D+02 + 0.1563321153475D+02 0.1560985718135D+02 0.1558315141624D+02 0.1555313628970D+02 + 0.1551985934445D+02 0.1548337369123D+02 0.1544373807583D+02 0.1540101693692D+02 + 0.1535528045436D+02 0.1530660458716D+02 0.1525507110098D+02 0.1520076758423D+02 + 0.1514378745267D+02 0.1508422994170D+02 0.1502220008605D+02 0.1495780868635D+02 + 0.1489117226206D+02 0.1482241299046D+02 0.1475165863115D+02 0.1467904243575D+02 + 0.1460470304238D+02 0.1452878435463D+02 0.1445143540465D+02 0.1437281020013D+02 + 0.1429306755483D+02 0.1421237090260D+02 0.1413088809452D+02 0.1404879117925D+02 + 0.1396625616625D+02 0.1388346277207D+02 0.1380059414952D+02 0.1371783659988D+02 + 0.1363537926825D+02 0.1355341382212D+02 0.1347213411351D+02 0.1339173582480D+02 + 0.1331241609871D+02 0.1323437315279D+02 0.1315780587881D+02 0.1308291342766D+02 + 0.1300989478035D+02 0.1293894830568D+02 0.1287027130535D+02 0.1280405954732D+02 + 0.1274050678825D+02 0.1267980428593D+02 0.1262214030269D+02 0.1256769960087D+02 + 0.1251666293145D+02 0.1246920651702D+02 0.1242550153038D+02 0.1238571356999D+02 + 0.1235000213372D+02 0.1231852009235D+02 0.1229141316414D+02 0.1226881939222D+02 + 0.1225086862623D+02 0.1223768200985D+02 0.1222937147599D+02 0.1222603925117D+02 + 0.1222777737106D+02 0.1223466720868D+02 0.1224677901729D+02 0.1226417148958D+02 + 0.1228689133517D+02 0.1231497287802D+02 0.1234843767581D+02 0.1238729416297D+02 + 0.1243153731911D+02 0.1248114836487D+02 0.1253609448665D+02 0.1259632859227D+02 + 0.1266178909890D+02 0.1273239975523D+02 0.1280806949923D+02 0.1288869235315D+02 + 0.1297414735711D+02 0.1306429854274D+02 0.1315899494816D+02 0.1325807067533D+02 + 0.1336134499111D+02 0.1346862247282D+02 0.1357969319917D+02 0.1369433298744D+02 + 0.1381230367740D+02 0.1393335346243D+02 0.1405721726828D+02 0.1418361717951D+02 + 0.1431226291376D+02 0.1444285234362D+02 0.1457507206581D+02 0.1470859801733D+02 + 0.1484309613763D+02 0.1497822307639D+02 0.1511362694548D+02 0.1524894811426D+02 + 0.1538382004666D+02 0.1551787017849D+02 0.1565072083339D+02 0.1578199017530D+02 + 0.1591129319546D+02 0.1603824273170D+02 0.1616245051740D+02 0.1628352825765D+02 + 0.1640108872963D+02 0.1651474690448D+02 0.1662412108723D+02 0.1672883407174D+02 + 0.1682851430716D+02 0.1692279707220D+02 0.1701132565381D+02 0.1709375252614D+02 + 0.1716974052608D+02 0.1723896402125D+02 0.1730111006644D+02 0.1735587954416D+02 + 0.1740298828530D+02 0.1744216816538D+02 0.1747316817225D+02 0.1749575544089D+02 + 0.1750971625093D+02 0.1751485698260D+02 0.1751100502688D+02 0.1749800964559D+02 + 0.1747574277733D+02 0.1744409978499D+02 0.1740300014123D+02 0.1735238804766D+02 + 0.1729223298439D+02 0.1722253018618D+02 0.1714330104180D+02 0.1705459341368D+02 + 0.1695648187457D+02 0.1684906785873D+02 0.1673247972505D+02 0.1660687272995D+02 + 0.1647242890818D+02 0.1632935685981D+02 0.1617789144222D+02 0.1601829336618D+02 + 0.1585084869528D+02 0.1567586824865D+02 0.1549368690699D+02 0.1530466282265D+02 + 0.1510917653451D+02 0.1490762998916D+02 0.1470044547022D+02 0.1448806443791D+02 + 0.1427094628160D+02 0.1404956698852D+02 0.1382441773199D+02 0.1359600338336D+02 + 0.1336484095192D+02 0.1313145795774D+02 0.1289639074258D+02 0.1266018272468D+02 + 0.1242338260337D+02 0.1218654252002D+02 0.1195021618209D+02 0.1171495695744D+02 + 0.1148131594627D+02 0.1124984003849D+02 0.1102106996440D+02 0.1079553834688D+02 + 0.1057376776347D+02 0.1035626882667D+02 0.1014353829125D+02 0.9936057196884D+01 + 0.9734289054994D+01 0.9538678088120D+01 0.9349647530399D+01 0.9167597997384D+01 + 0.8992905933301D+01 0.8825922143594D+01 0.8666970420224D+01 0.8516346266999D+01 + 0.8374315731611D+01 0.8241114350747D+01 0.8116946214096D+01 0.8001983152570D+01 + 0.7896364055459D+01 0.7800194320670D+01 0.7713545441561D+01 0.7636454733225D+01 + 0.7568925200401D+01 0.7510925548528D+01 0.7462390338698D+01 0.7423220286625D+01 + 0.7393282704950D+01 0.7372412087556D+01 0.7360410833787D+01 0.7357050109802D+01 + 0.7362070843542D+01 0.7375184849138D+01 0.7396076075866D+01 0.7424401976120D+01 + 0.7459794986211D+01 0.7501864113185D+01 0.7550196620265D+01 0.7604359802945D+01 + 0.7663902847256D+01 0.7728358761219D+01 0.7797246370063D+01 0.7870072365405D+01 + 0.7946333398216D+01 0.8025518205140D+01 0.8107109757504D+01 0.8190587422172D+01 + 0.8275429123337D+01 0.8361113494303D+01 0.8447122008353D+01 0.8532941077928D+01 + 0.8618064111536D+01 0.8701993518075D+01 0.8784242648578D+01 0.8864337665829D+01 + 0.8941819332731D+01 0.9016244710878D+01 0.9087188761372D+01 0.9154245840560D+01 + 0.9217031084099D+01 0.9275181673474D+01 0.9328357979881D+01 0.9376244581215D+01 + 0.9418551148709D+01 0.9455013200639D+01 0.9485392721360D+01 0.9509478644797D+01 + 0.9527087202359D+01 0.9538062136102D+01 0.9542274778747D+01 0.9539624002998D+01 + 0.9530036043300D+01 0.9513464193959D+01 0.9489888388159D+01 0.9459314663078D+01 + 0.9421774516843D+01 0.9377324163609D+01 0.9326043693467D+01 0.9268036144314D+01 + 0.9203426493115D+01 0.9132360574297D+01 0.9055003933175D+01 0.8971540622481D+01 + 0.8882171950151D+01 0.8787115186520D+01 0.8686602239071D+01 0.8580878302773D+01 + 0.8470200493895D+01 0.8354836475027D+01 0.8235063078754D+01 0.8111164937189D+01 + 0.7983433124252D+01 0.7852163817216D+01 0.7717656983696D+01 0.7580215099831D+01 + 0.7440141905014D+01 0.7297741198086D+01 0.7153315679440D+01 0.7007165843079D+01 + 0.6859588922166D+01 0.6710877891167D+01 0.6561320527250D+01 0.6411198533128D+01 + 0.6260786723101D+01 0.6110352273646D+01 0.5960154039458D+01 0.5810441935471D+01 + 0.5661456384987D+01 0.5513427833700D+01 0.5366576329042D+01 0.5221111163955D+01 + 0.5077230583918D+01 0.4935121555751D+01 0.4794959596475D+01 0.4656908660288D+01 + 0.4521121081498D+01 0.4387737571052D+01 0.4256887264186D+01 0.4128687816522D+01 + 0.4003245545873D+01 0.3880655616880D+01 0.3761002265561D+01 0.3644359060777D+01 + 0.3530789199588D+01 0.3420345833472D+01 0.3313072422343D+01 0.3209003113371D+01 + 0.3108163141592D+01 0.3010569249384D+01 0.2916230121919D+01 0.2825146835796D+01 + 0.2737313318133D+01 0.2652716813508D+01 0.2571338356232D+01 0.2493153245580D+01 + 0.2418131521695D+01 0.2346238440047D+01 0.2277434942461D+01 0.2211678122838D+01 + 0.2148921685899D+01 0.2089116397376D+01 0.2032210524266D+01 0.1978150263893D+01 + 0.1926880160684D+01 0.1878343509721D+01 0.1832482746269D+01 0.1789239820638D+01 + 0.1748556557871D+01 0.1710375001879D+01 0.1674637743804D+01 0.1641288234472D+01 + 0.1610271080956D+01 0.1581532327338D+01 0.1555019719890D+01 0.1530682956958D+01 + 0.1508473923914D+01 0.1488346913611D+01 0.1470258832820D+01 0.1454169395155D+01 + 0.1440041301042D+01 0.1427840405245D+01 0.1417535872504D+01 0.1409100321753D+01 + 0.1402509959377D+01 0.1397744701874D+01 0.1394788288181D+01 0.1393628381826D+01 + 0.1394256662892D+01 0.1396668909610D+01 0.1400865069190D+01 0.1406849317222D+01 + 0.1414629369614D+01 0.1424336942263D+01 0.1436096575202D+01 0.1449912447024D+01 + 0.1465794674727D+01 0.1483759333931D+01 0.1503828494539D+01 0.1526030271798D+01 + 0.1550398892649D+01 0.1576974777196D+01 0.1605804635055D+01 0.1636941576215D+01 + 7 1012 + 1 0 -1 -511.89194 + 2 0 -1 -58.90181 + 2 1 1 -50.68932 + 2 1 -2 -49.77537 + 3 0 -1 -5.73317 + 3 1 1 -3.34334 + 3 1 -2 -3.22919 + 0.2122975645015D-04 0.2173507709867D-04 0.2225242316243D-04 0.2278208072829D-04 + 0.2332434268594D-04 0.2387950888954D-04 0.2444788632325D-04 0.2502978927059D-04 + 0.2562553948791D-04 0.2623546638192D-04 0.2685990719144D-04 0.2749920717353D-04 + 0.2815371979393D-04 0.2882380692207D-04 0.2950983903075D-04 0.3021219540050D-04 + 0.3093126432877D-04 0.3166744334418D-04 0.3242113942573D-04 0.3319276922733D-04 + 0.3398275930755D-04 0.3479154636487D-04 0.3561957747857D-04 0.3646731035519D-04 + 0.3733521358096D-04 0.3822376688016D-04 0.3913346137963D-04 0.4006479987955D-04 + 0.4101829713060D-04 0.4199448011777D-04 0.4299388835081D-04 0.4401707416166D-04 + 0.4506460300883D-04 0.4613705378910D-04 0.4723501915650D-04 0.4835910584899D-04 + 0.4950993502270D-04 0.5068814259429D-04 0.5189437959126D-04 0.5312931251066D-04 + 0.5439362368626D-04 0.5568801166444D-04 0.5701319158897D-04 0.5836989559491D-04 + 0.5975887321186D-04 0.6118089177673D-04 0.6263673685632D-04 0.6412721267990D-04 + 0.6565314258201D-04 0.6721536945580D-04 0.6881475621705D-04 0.7045218627922D-04 + 0.7212856403973D-04 0.7384481537777D-04 0.7560188816385D-04 0.7740075278149D-04 + 0.7924240266119D-04 0.8112785482706D-04 0.8305815045642D-04 0.8503435545263D-04 + 0.8705756103141D-04 0.8912888432116D-04 0.9124946897738D-04 0.9342048581165D-04 + 0.9564313343555D-04 0.9791863891974D-04 0.1002482584687D-03 0.1026332781112D-03 + 0.1050750144077D-03 0.1075748151735D-03 0.1101340602203D-03 0.1127541621137D-03 + 0.1154365669501D-03 0.1181827551510D-03 0.1209942422769D-03 0.1238725798590D-03 + 0.1268193562527D-03 0.1298361975089D-03 0.1329247682680D-03 0.1360867726735D-03 + 0.1393239553083D-03 0.1426381021518D-03 0.1460310415612D-03 0.1495046452749D-03 + 0.1530608294397D-03 0.1567015556625D-03 0.1604288320871D-03 0.1642447144955D-03 + 0.1681513074364D-03 0.1721507653792D-03 0.1762452938963D-03 0.1804371508722D-03 + 0.1847286477421D-03 0.1891221507592D-03 0.1936200822920D-03 0.1982249221522D-03 + 0.2029392089542D-03 0.2077655415060D-03 0.2127065802334D-03 0.2177650486382D-03 + 0.2229437347894D-03 0.2282454928513D-03 0.2336732446459D-03 0.2392299812538D-03 + 0.2449187646513D-03 0.2507427293871D-03 0.2567050842979D-03 0.2628091142650D-03 + 0.2690581820118D-03 0.2754557299435D-03 0.2820052820308D-03 0.2887104457371D-03 + 0.2955749139921D-03 0.3026024672103D-03 0.3097969753590D-03 0.3171624000731D-03 + 0.3247027968207D-03 0.3324223171196D-03 0.3403252108055D-03 0.3484158283536D-03 + 0.3566986232552D-03 0.3651781544500D-03 0.3738590888149D-03 0.3827462037126D-03 + 0.3918443895988D-03 0.4011586526914D-03 0.4106941177020D-03 0.4204560306321D-03 + 0.4304497616342D-03 0.4406808079408D-03 0.4511547968612D-03 0.4618774888502D-03 + 0.4728547806468D-03 0.4840927084883D-03 0.4955974513988D-03 0.5073753345551D-03 + 0.5194328327314D-03 0.5317765738249D-03 0.5444133424641D-03 0.5573500837015D-03 + 0.5705939067925D-03 0.5841520890639D-03 0.5980320798714D-03 0.6122415046513D-03 + 0.6267881690659D-03 0.6416800632466D-03 0.6569253661363D-03 0.6725324499326D-03 + 0.6885098846360D-03 0.7048664427037D-03 0.7216111038125D-03 0.7387530597330D-03 + 0.7563017193176D-03 0.7742667136049D-03 0.7926579010441D-03 0.8114853728404D-03 + 0.8307594584254D-03 0.8504907310562D-03 0.8706900135433D-03 0.8913683841142D-03 + 0.9125371824119D-03 0.9342080156346D-03 0.9563927648179D-03 0.9791035912634D-03 + 0.1002352943117D-02 0.1026153562102D-02 0.1050518490405D-02 0.1075461077728D-02 + 0.1100994988496D-02 0.1127134209246D-02 0.1153893056171D-02 0.1181286182852D-02 + 0.1209328588167D-02 0.1238035624379D-02 0.1267423005415D-02 0.1297506815344D-02 + 0.1328303517037D-02 0.1359829961041D-02 0.1392103394654D-02 0.1425141471212D-02 + 0.1458962259585D-02 0.1493584253904D-02 0.1529026383504D-02 0.1565308023106D-02 + 0.1602449003221D-02 0.1640469620811D-02 0.1679390650189D-02 0.1719233354165D-02 + 0.1760019495464D-02 0.1801771348394D-02 0.1844511710794D-02 0.1888263916250D-02 + 0.1933051846599D-02 0.1978899944720D-02 0.2025833227614D-02 0.2073877299798D-02 + 0.2123058366995D-02 0.2173403250151D-02 0.2224939399761D-02 0.2277694910540D-02 + 0.2331698536421D-02 0.2386979705903D-02 0.2443568537747D-02 0.2501495857040D-02 + 0.2560793211623D-02 0.2621492888896D-02 0.2683627933011D-02 0.2747232162458D-02 + 0.2812340188056D-02 0.2878987431352D-02 0.2947210143447D-02 0.3017045424251D-02 + 0.3088531242177D-02 0.3161706454285D-02 0.3236610826892D-02 0.3313285056646D-02 + 0.3391770792086D-02 0.3472110655691D-02 0.3554348266436D-02 0.3638528262858D-02 + 0.3724696326649D-02 0.3812899206788D-02 0.3903184744224D-02 0.3995601897109D-02 + 0.4090200766624D-02 0.4187032623373D-02 0.4286149934389D-02 0.4387606390746D-02 + 0.4491456935804D-02 0.4597757794082D-02 0.4706566500803D-02 0.4817941932088D-02 + 0.4931944335851D-02 0.5048635363379D-02 0.5168078101634D-02 0.5290337106279D-02 + 0.5415478435454D-02 0.5543569684307D-02 0.5674680020311D-02 0.5808880219367D-02 + 0.5946242702730D-02 0.6086841574754D-02 0.6230752661494D-02 0.6378053550168D-02 + 0.6528823629508D-02 0.6683144131013D-02 0.6841098171130D-02 0.7002770794372D-02 + 0.7168249017405D-02 0.7337621874121D-02 0.7510980461712D-02 0.7688417987773D-02 + 0.7870029818463D-02 0.8055913527720D-02 0.8246168947593D-02 0.8440898219673D-02 + 0.8640205847678D-02 0.8844198751201D-02 0.9052986320644D-02 0.9266680473381D-02 + 0.9485395711148D-02 0.9709249178711D-02 0.9938360723829D-02 0.1017285295853D-01 + 0.1041285132175D-01 0.1065848414335D-01 0.1090988270951D-01 0.1116718132961D-01 + 0.1143051740455D-01 0.1170003149653D-01 0.1197586740047D-01 0.1225817221684D-01 + 0.1254709642620D-01 0.1284279396532D-01 0.1314542230495D-01 0.1345514252930D-01 + 0.1377211941725D-01 0.1409652152530D-01 0.1442852127232D-01 0.1476829502620D-01 + 0.1511602319226D-01 0.1547189030365D-01 0.1583608511371D-01 0.1620880069022D-01 + 0.1659023451183D-01 0.1698058856639D-01 0.1738006945154D-01 0.1778888847734D-01 + 0.1820726177118D-01 0.1863541038486D-01 0.1907356040402D-01 0.1952194305980D-01 + 0.1998079484302D-01 0.2045035762063D-01 0.2093087875471D-01 0.2142261122400D-01 + 0.2192581374792D-01 0.2244075091329D-01 0.2296769330365D-01 0.2350691763133D-01 + 0.2405870687229D-01 0.2462335040374D-01 0.2520114414469D-01 0.2579239069942D-01 + 0.2639739950387D-01 0.2701648697516D-01 0.2764997666416D-01 0.2829819941123D-01 + 0.2896149350513D-01 0.2964020484531D-01 0.3033468710740D-01 0.3104530191220D-01 + 0.3177241899806D-01 0.3251641639684D-01 0.3327768061342D-01 0.3405660680881D-01 + 0.3485359898710D-01 0.3566907018606D-01 0.3650344267166D-01 0.3735714813647D-01 + 0.3823062790211D-01 0.3912433312562D-01 0.4003872501011D-01 0.4097427501948D-01 + 0.4193146509749D-01 0.4291078789111D-01 0.4391274697832D-01 0.4493785710035D-01 + 0.4598664439858D-01 0.4705964665594D-01 0.4815741354312D-01 0.4928050686955D-01 + 0.5042950083923D-01 0.5160498231153D-01 0.5280755106696D-01 0.5403782007813D-01 + 0.5529641578584D-01 0.5658397838041D-01 0.5790116208843D-01 0.5924863546488D-01 + 0.6062708169076D-01 0.6203719887636D-01 0.6347970037015D-01 0.6495531507346D-01 + 0.6646478776099D-01 0.6800887940725D-01 0.6958836751900D-01 0.7120404647380D-01 + 0.7285672786470D-01 0.7454724085125D-01 0.7627643251682D-01 0.7804516823229D-01 + 0.7985433202641D-01 0.8170482696258D-01 0.8359757552242D-01 0.8553351999606D-01 + 0.8751362287932D-01 0.8953886727772D-01 0.9161025731761D-01 0.9372881856432D-01 + 0.9589559844749D-01 0.9811166669365D-01 0.1003781157661D+00 0.1026960613124D+00 + 0.1050666426187D+00 0.1074910230727D+00 0.1099703906329D+00 0.1125059583070D+00 + 0.1150989646366D+00 0.1177506741909D+00 0.1204623780676D+00 0.1232353944021D+00 + 0.1260710688845D+00 0.1289707752849D+00 0.1319359159864D+00 0.1349679225270D+00 + 0.1380682561490D+00 0.1412384083570D+00 0.1444799014844D+00 0.1477942892678D+00 + 0.1511831574303D+00 0.1546481242725D+00 0.1581908412731D+00 0.1618129936965D+00 + 0.1655163012104D+00 0.1693025185104D+00 0.1731734359544D+00 0.1771308802047D+00 + 0.1811767148790D+00 0.1853128412094D+00 0.1895411987104D+00 0.1938637658552D+00 + 0.1982825607598D+00 0.2027996418767D+00 0.2074171086957D+00 0.2121371024533D+00 + 0.2169618068509D+00 0.2218934487801D+00 0.2269342990569D+00 0.2320866731634D+00 + 0.2373529319974D+00 0.2427354826295D+00 0.2482367790682D+00 0.2538593230323D+00 + 0.2596056647304D+00 0.2654784036474D+00 0.2714801893389D+00 0.2776137222308D+00 + 0.2838817544268D+00 0.2902870905217D+00 0.2968325884206D+00 0.3035211601645D+00 + 0.3103557727607D+00 0.3173394490192D+00 0.3244752683937D+00 0.3317663678273D+00 + 0.3392159426028D+00 0.3468272471962D+00 0.3546035961349D+00 0.3625483648577D+00 + 0.3706649905790D+00 0.3789569731540D+00 0.3874278759464D+00 0.3960813266976D+00 + 0.4049210183955D+00 0.4139507101454D+00 0.4231742280388D+00 0.4325954660221D+00 + 0.4422183867640D+00 0.4520470225197D+00 0.4620854759931D+00 0.4723379211946D+00 + 0.4828086042953D+00 0.4935018444749D+00 0.5044220347646D+00 0.5155736428822D+00 + 0.5269612120602D+00 0.5385893618646D+00 0.5504627890040D+00 0.5625862681281D+00 + 0.5749646526146D+00 0.5876028753427D+00 0.6005059494532D+00 0.6136789690924D+00 + 0.6271271101407D+00 0.6408556309226D+00 0.6548698728981D+00 0.6691752613333D+00 + 0.6837773059493D+00 0.6986816015479D+00 0.7138938286123D+00 0.7294197538810D+00 + 0.7452652308942D+00 0.7614362005101D+00 0.7779386913894D+00 0.7947788204470D+00 + 0.8119627932680D+00 0.8294969044866D+00 0.8473875381261D+00 0.8656411678975D+00 + 0.8842643574549D+00 0.9032637606047D+00 0.9226461214683D+00 0.9424182745935D+00 + 0.9625871450140D+00 0.9831597482541D+00 0.1004143190275D+01 0.1025544667362D+01 + 0.1047371465949D+01 0.1069630962376D+01 0.1092330622582D+01 0.1115478001718D+01 + 0.1139080743699D+01 0.1163146580667D+01 0.1187683332379D+01 0.1212698905512D+01 + 0.1238201292877D+01 0.1264198572546D+01 0.1290698906886D+01 0.1317710541494D+01 + 0.1345241804028D+01 0.1373301102944D+01 0.1401896926110D+01 0.1431037839321D+01 + 0.1460732484690D+01 0.1490989578921D+01 0.1521817911461D+01 0.1553226342519D+01 + 0.1585223800953D+01 0.1617819282025D+01 0.1651021845012D+01 0.1684840610666D+01 + 0.1719284758534D+01 0.1754363524114D+01 0.1790086195862D+01 0.1826462112019D+01 + 0.1863500657290D+01 0.1901211259327D+01 0.1939603385053D+01 0.1978686536792D+01 + 0.2018470248210D+01 0.2058964080068D+01 0.2100177615772D+01 0.2142120456722D+01 + 0.2184802217451D+01 0.2228232520549D+01 0.2272420991371D+01 0.2317377252521D+01 + 0.2363110918097D+01 0.2409631587718D+01 0.2456948840298D+01 0.2505072227579D+01 + 0.2554011267414D+01 0.2603775436800D+01 0.2654374164640D+01 0.2705816824249D+01 + 0.2758112725590D+01 0.2811271107225D+01 0.2865301128002D+01 0.2920211858443D+01 + 0.2976012271854D+01 0.3032711235135D+01 0.3090317499294D+01 0.3148839689666D+01 + 0.3208286295814D+01 0.3268665661132D+01 0.3329985972130D+01 0.3392255247403D+01 + 0.3455481326284D+01 0.3519671857166D+01 0.3584834285516D+01 0.3650975841540D+01 + 0.3718103527540D+01 0.3786224104928D+01 0.3855344080910D+01 0.3925469694842D+01 + 0.3996606904248D+01 0.4068761370505D+01 0.4141938444201D+01 0.4216143150155D+01 + 0.4291380172106D+01 0.4367653837082D+01 0.4444968099432D+01 0.4523326524540D+01 + 0.4602732272224D+01 0.4683188079814D+01 0.4764696244923D+01 0.4847258607911D+01 + 0.4930876534058D+01 0.5015550895439D+01 0.5101282052526D+01 0.5188069835504D+01 + 0.5275913525340D+01 0.5364811834582D+01 0.5454762887935D+01 0.5545764202593D+01 + 0.5637812668364D+01 0.5730904527600D+01 0.5825035354930D+01 0.5920200036841D+01 + 0.6016392751096D+01 0.6113606946037D+01 0.6211835319763D+01 0.6311069799237D+01 + 0.6411301519318D+01 0.6512520801757D+01 0.6614717134178D+01 0.6717879149076D+01 + 0.6821994602856D+01 0.6927050354936D+01 0.7033032346971D+01 0.7139925582197D+01 + 0.7247714104955D+01 0.7356380980422D+01 0.7465908274590D+01 0.7576277034522D+01 + 0.7687467268944D+01 0.7799457929201D+01 0.7912226890625D+01 0.8025750934367D+01 + 0.8140005729731D+01 0.8254965817070D+01 0.8370604591283D+01 0.8486894285977D+01 + 0.8603805958343D+01 0.8721309474805D+01 0.8839373497487D+01 0.8957965471583D+01 + 0.9077051613664D+01 0.9196596901005D+01 0.9316565061973D+01 0.9436918567578D+01 + 0.9557618624205D+01 0.9678625167647D+01 0.9799896858462D+01 0.9921391078761D+01 + 0.1004306393048D+02 0.1016487023519D+02 0.1028676353561D+02 0.1040869609872D+02 + 0.1053061892078D+02 0.1065248173410D+02 0.1077423301584D+02 0.1089581999877D+02 + 0.1101718868413D+02 0.1113828385666D+02 0.1125904910191D+02 0.1137942682584D+02 + 0.1149935827678D+02 0.1161878356999D+02 0.1173764171462D+02 0.1185587064341D+02 + 0.1197340724503D+02 0.1209018739920D+02 0.1220614601465D+02 0.1232121706995D+02 + 0.1243533365740D+02 0.1254842802982D+02 0.1266043165050D+02 0.1277127524634D+02 + 0.1288088886404D+02 0.1298920192971D+02 0.1309614331160D+02 0.1320164138629D+02 + 0.1330562410812D+02 0.1340801908212D+02 0.1350875364026D+02 0.1360775492116D+02 + 0.1370494995324D+02 0.1380026574132D+02 0.1389362935662D+02 0.1398496803019D+02 + 0.1407420924981D+02 0.1416128086012D+02 0.1424611116627D+02 0.1432862904069D+02 + 0.1440876403324D+02 0.1448644648440D+02 0.1456160764164D+02 0.1463417977876D+02 + 0.1470409631813D+02 0.1477129195572D+02 0.1483570278883D+02 0.1489726644633D+02 + 0.1495592222127D+02 0.1501161120574D+02 0.1506427642781D+02 0.1511386299027D+02 + 0.1516031821110D+02 0.1520359176531D+02 0.1524363582812D+02 0.1528040521898D+02 + 0.1531385754641D+02 0.1534395335325D+02 0.1537065626208D+02 0.1539393312048D+02 + 0.1541375414585D+02 0.1543009306950D+02 0.1544292727951D+02 0.1545223796216D+02 + 0.1545801024155D+02 0.1546023331695D+02 0.1545890059744D+02 0.1545400983365D+02 + 0.1544556324596D+02 0.1543356764880D+02 0.1541803457065D+02 0.1539898036925D+02 + 0.1537642634154D+02 0.1535039882796D+02 0.1532092931044D+02 0.1528805450387D+02 + 0.1525181644030D+02 0.1521226254557D+02 0.1516944570778D+02 0.1512342433713D+02 + 0.1507426241669D+02 0.1502202954350D+02 0.1496680095964D+02 0.1490865757272D+02 + 0.1484768596530D+02 0.1478397839284D+02 0.1471763276969D+02 0.1464875264266D+02 + 0.1457744715182D+02 0.1450383097801D+02 0.1442802427679D+02 0.1435015259838D+02 + 0.1427034679327D+02 0.1418874290321D+02 0.1410548203722D+02 0.1402071023247D+02 + 0.1393457829969D+02 0.1384724165293D+02 0.1375886012364D+02 0.1366959775879D+02 + 0.1357962260304D+02 0.1348910646488D+02 0.1339822466686D+02 0.1330715577980D+02 + 0.1321608134121D+02 0.1312518555808D+02 0.1303465499419D+02 0.1294467824221D+02 + 0.1285544558101D+02 0.1276714861841D+02 0.1267997991994D+02 0.1259413262403D+02 + 0.1250980004419D+02 0.1242717525885D+02 0.1234645068948D+02 0.1226781766776D+02 + 0.1219146599257D+02 0.1211758347770D+02 0.1204635549121D+02 0.1197796448732D+02 + 0.1191258953197D+02 0.1185040582321D+02 0.1179158420730D+02 0.1173629069208D+02 + 0.1168468595856D+02 0.1163692487226D+02 0.1159315599549D+02 0.1155352110209D+02 + 0.1151815469598D+02 0.1148718353503D+02 0.1146072616178D+02 0.1143889244247D+02 + 0.1142178311602D+02 0.1140948935454D+02 0.1140209233686D+02 0.1139966283678D+02 + 0.1140226082774D+02 0.1140993510519D+02 0.1142272292875D+02 0.1144064968524D+02 + 0.1146372857460D+02 0.1149196031991D+02 0.1152533290326D+02 0.1156382132880D+02 + 0.1160738741454D+02 0.1165597961412D+02 0.1170953287012D+02 0.1176796849989D+02 + 0.1183119411535D+02 0.1189910357777D+02 0.1197157698856D+02 0.1204848071701D+02 + 0.1212966746596D+02 0.1221497637600D+02 0.1230423316888D+02 0.1239725033077D+02 + 0.1249382733567D+02 0.1259375090926D+02 0.1269679533346D+02 0.1280272279167D+02 + 0.1291128375448D+02 0.1302221740584D+02 0.1313525210912D+02 0.1325010591253D+02 + 0.1336648709337D+02 0.1348409474012D+02 0.1360261937149D+02 0.1372174359123D+02 + 0.1384114277758D+02 0.1396048580566D+02 0.1407943580155D+02 0.1419765092608D+02 + 0.1431478518661D+02 0.1443048927478D+02 0.1454441142812D+02 0.1465619831308D+02 + 0.1476549592746D+02 0.1487195051928D+02 0.1497520951989D+02 0.1507492248828D+02 + 0.1517074206398D+02 0.1526232492551D+02 0.1534933275145D+02 0.1543143318112D+02 + 0.1550830077157D+02 0.1557961794797D+02 0.1564507594396D+02 0.1570437572881D+02 + 0.1575722891823D+02 0.1580335866539D+02 0.1584250052899D+02 0.1587440331524D+02 + 0.1589882989033D+02 0.1591555796049D+02 0.1592438081630D+02 0.1592510803844D+02 + 0.1591756616179D+02 0.1590159929512D+02 0.1587706969359D+02 0.1584385828154D+02 + 0.1580186512290D+02 0.1575100983720D+02 0.1569123195871D+02 0.1562249123695D+02 + 0.1554476787665D+02 0.1545806271560D+02 0.1536239733893D+02 0.1525781412875D+02 + 0.1514437624809D+02 0.1502216755847D+02 0.1489129247063D+02 0.1475187572813D+02 + 0.1460406212401D+02 0.1444801615062D+02 0.1428392158332D+02 0.1411198099888D+02 + 0.1393241522964D+02 0.1374546275490D+02 0.1355137903119D+02 0.1335043576333D+02 + 0.1314292011864D+02 0.1292913388664D+02 0.1270939258714D+02 0.1248402452972D+02 + 0.1225336982785D+02 0.1201777937125D+02 0.1177761376017D+02 0.1153324220569D+02 + 0.1128504140014D+02 0.1103339436205D+02 0.1077868926027D+02 0.1052131822179D+02 + 0.1026167612835D+02 0.1000015940663D+02 0.9737164817090D+01 0.9473088246666D+01 + 0.9208323510392D+01 0.8943261167138D+01 0.8678287354606D+01 0.8413782648689D+01 + 0.8150120952198D+01 0.7887668417870D+01 0.7626782410424D+01 0.7367810512255D+01 + 0.7111089577147D+01 0.6856944836175D+01 0.6605689059620D+01 0.6357621778576D+01 + 0.6113028569417D+01 0.5872180404071D+01 0.5635333068605D+01 0.5402726652271D+01 + 0.5174585108689D+01 0.4951115890458D+01 0.4732509658013D+01 0.4518940063093D+01 + 0.4310563606744D+01 0.4107519571314D+01 0.3909930025455D+01 0.3717899900701D+01 + 0.3531517137795D+01 0.3350852900521D+01 0.3175961854415D+01 0.3006882507418D+01 + 0.2843637609166D+01 0.2686234605393D+01 0.2534666143602D+01 0.2388910626020D+01 + 0.2248932805599D+01 0.2114684420764D+01 0.1986104864410D+01 0.1863121882663D+01 + 0.1745652298807D+01 0.1633602757816D+01 0.1526870486911D+01 0.1425344067651D+01 + 0.1328904215091D+01 0.1237424559686D+01 0.1150772427713D+01 0.1068809616148D+01 + 0.9913931580887D+00 0.9183760750247D+00 0.8496081124357D+00 0.7849364554513D+00 + 0.7242064215293D+00 0.6672621273712D+00 0.6139471275574D+00 0.5641050226618D+00 + 0.5175800348878D+00 0.4742175495586D+00 0.4338646210828D+00 0.3963704423129D+00 + 0.3615867764997D+00 0.3293683513354D+00 0.2995732148544D+00 0.2720630532321D+00 + 0.2467034707815D+00 0.2233642326902D+00 0.2019194712763D+00 0.1822478567499D+00 + 0.1642327336682D+00 0.1477622244444D+00 0.1327293014336D+00 0.1190318292464D+00 + 0.1065725790655D+00 0.9525921682581D-01 0.8500426719540D-01 0.7572505534570D-01 + 0.6734362852856D-01 0.5978665949119D-01 0.5298533375213D-01 0.4687522273735D-01 + 0.4139614473480D-01 0.3649201557103D-01 0.3211069084453D-01 0.2820380147099D-01 + 0.2472658420543D-01 0.2163770870794D-01 0.1889910261478D-01 0.1647577596641D-01 + 0.1433564623066D-01 0.1244936504301D-01 0.1079014767040D-01 0.9333606088531D-02 + 0.8057586449521D-02 0.6942011605538D-02 0.5968729247262D-02 0.5121366113861D-02 + 0.4385188634413D-02 0.3746970269980D-02 0.3194865741265D-02 0.2718292249293D-02 + 0.2307817726031D-02 0.1955056088404D-02 0.1652569412799D-02 0.1393776897745D-02 + 0.1172870439853D-02 0.9847366120634D-03 0.8248848034661D-03 0.6893812560569D-03 + 0.5747887154298D-03 0.4781113990982D-03 0.3967449774979D-03 0.3284312582634D-03 + 0.2712172636576D-03 0.2234183935981D-03 0.1835853721449D-03 0.1504746831443D-03 + 0.1230222105786D-03 0.1003198106540D-03 0.8159455542106D-04 0.6619040144209D-04 + 0.5355205138722D-04 0.4321079120846D-04 0.3477210045803D-04 0.2790484818898D-04 + 0.2233190152246D-04 0.1782198824118D-04 0.1418266855132D-04 0.1125428434880D-04 + 0.8904766856498D-05 0.7025195313453D-05 0.5526010459652D-05 0.4333796852085D-05 + 0.3388557563637D-05 0.2641413563333D-05 0.2052668070841D-05 0.1590183444862D-05 + 0.1228024735392D-05 0.9453299398051D-06 0.7253722919424D-06 0.5547846237125D-06 + 0.4229200131023D-06 0.3213266143727D-06 0.2433177983142D-06 0.1836215545666D-06 + 0.1380955642703D-06 0.1034964778941D-06 0.7729376586493D-07 0.5752008209307D-07 + 0.4265142355148D-07 0.3151151106808D-07 0.2319578320089D-07 0.1701120974173D-07 + 0.1242881489534D-07 0.9046371073667D-08 0.6559198960071D-08 0.4737402476978D-08 + 0.3408191153158D-08 0.2442208093542D-08 0.1742998768590D-08 0.1238932286038D-08 + 0.8770296193333D-09 0.6182683290111D-09 0.4340255982013D-09 0.3033950772413D-09 + 0.2111715589818D-09 0.1463438404983D-09 0.1009726185101D-09 0.6935859066118D-10 + 0.4742849271888D-10 0.3228488955626D-10 0.2187547853929D-10 0.1475212866899D-10 + 0.9901881750809D-11 0.6613860882122D-11 0.4396644350124D-11 0.2908650000322D-11 + 0.1914873227728D-11 0.1254415200484D-11 0.8176535094916D-12 0.5302708391854D-12 + 0.3421370551355D-12 0.2196087836422D-12 0.1402231518601D-12 0.8906014768602D-13 + LSMS: xx z= 26. xvalws= 2.77074 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728402963D+02-0.5199725117641D+02-0.5199721792578D+02-0.5199718427293D+02 +-0.5199715021300D+02-0.5199711574107D+02-0.5199708085214D+02-0.5199704554119D+02 +-0.5199700980309D+02-0.5199697363268D+02-0.5199693702474D+02-0.5199689997397D+02 +-0.5199686247500D+02-0.5199682452243D+02-0.5199678611076D+02-0.5199674723444D+02 +-0.5199670788785D+02-0.5199666806529D+02-0.5199662776101D+02-0.5199658696918D+02 +-0.5199654568390D+02-0.5199650389922D+02-0.5199646160907D+02-0.5199641880734D+02 +-0.5199637548785D+02-0.5199633164434D+02-0.5199628727046D+02-0.5199624235979D+02 +-0.5199619690585D+02-0.5199615090205D+02-0.5199610434176D+02-0.5199605721822D+02 +-0.5199600952464D+02-0.5199596125410D+02-0.5199591239964D+02-0.5199586295419D+02 +-0.5199581291060D+02-0.5199576226162D+02-0.5199571099994D+02-0.5199565911815D+02 +-0.5199560660874D+02-0.5199555346411D+02-0.5199549967658D+02-0.5199544523837D+02 +-0.5199539014162D+02-0.5199533437834D+02-0.5199527794048D+02-0.5199522081989D+02 +-0.5199516300828D+02-0.5199510449731D+02-0.5199504527851D+02-0.5199498534331D+02 +-0.5199492468306D+02-0.5199486328897D+02-0.5199480115217D+02-0.5199473826367D+02 +-0.5199467461436D+02-0.5199461019507D+02-0.5199454499646D+02-0.5199447900910D+02 +-0.5199441222344D+02-0.5199434462984D+02-0.5199427621849D+02-0.5199420697954D+02 +-0.5199413690295D+02-0.5199406597858D+02-0.5199399419618D+02-0.5199392154537D+02 +-0.5199384801563D+02-0.5199377359634D+02-0.5199369827672D+02-0.5199362204589D+02 +-0.5199354489281D+02-0.5199346680633D+02-0.5199338777515D+02-0.5199330778784D+02 +-0.5199322683282D+02-0.5199314489839D+02-0.5199306197270D+02-0.5199297804374D+02 +-0.5199289309939D+02-0.5199280712733D+02-0.5199272011516D+02-0.5199263205027D+02 +-0.5199254291992D+02-0.5199245271123D+02-0.5199236141114D+02-0.5199226900644D+02 +-0.5199217548376D+02-0.5199208082958D+02-0.5199198503019D+02-0.5199188807175D+02 +-0.5199178994021D+02-0.5199169062139D+02-0.5199159010092D+02-0.5199148836424D+02 +-0.5199138539665D+02-0.5199128118323D+02-0.5199117570892D+02-0.5199106895845D+02 +-0.5199096091638D+02-0.5199085156707D+02-0.5199074089471D+02-0.5199062888326D+02 +-0.5199051551654D+02-0.5199040077813D+02-0.5199028465143D+02-0.5199016711964D+02 +-0.5199004816574D+02-0.5198992777253D+02-0.5198980592257D+02-0.5198968259824D+02 +-0.5198955778170D+02-0.5198943145487D+02-0.5198930359948D+02-0.5198917419701D+02 +-0.5198904322875D+02-0.5198891067574D+02-0.5198877651879D+02-0.5198864073848D+02 +-0.5198850331517D+02-0.5198836422896D+02-0.5198822345972D+02-0.5198808098707D+02 +-0.5198793679039D+02-0.5198779084882D+02-0.5198764314123D+02-0.5198749364622D+02 +-0.5198734234217D+02-0.5198718920716D+02-0.5198703421905D+02-0.5198687735537D+02 +-0.5198671859343D+02-0.5198655791024D+02-0.5198639528254D+02-0.5198623068679D+02 +-0.5198606409915D+02-0.5198589549550D+02-0.5198572485143D+02-0.5198555214224D+02 +-0.5198537734293D+02-0.5198520042816D+02-0.5198502137235D+02-0.5198484014954D+02 +-0.5198465673351D+02-0.5198447109769D+02-0.5198428321519D+02-0.5198409305883D+02 +-0.5198390060104D+02-0.5198370581396D+02-0.5198350866939D+02-0.5198330913876D+02 +-0.5198310719319D+02-0.5198290280341D+02-0.5198269593983D+02-0.5198248657249D+02 +-0.5198227467106D+02-0.5198206020484D+02-0.5198184314277D+02-0.5198162345340D+02 +-0.5198140110492D+02-0.5198117606510D+02-0.5198094830136D+02-0.5198071778068D+02 +-0.5198048446968D+02-0.5198024833454D+02-0.5198000934107D+02-0.5197976745462D+02 +-0.5197952264015D+02-0.5197927486220D+02-0.5197902408485D+02-0.5197877027176D+02 +-0.5197851338615D+02-0.5197825339081D+02-0.5197799024804D+02-0.5197772391971D+02 +-0.5197745436723D+02-0.5197718155151D+02-0.5197690543304D+02-0.5197662597177D+02 +-0.5197634312720D+02-0.5197605685833D+02-0.5197576712367D+02-0.5197547388122D+02 +-0.5197517708846D+02-0.5197487670236D+02-0.5197457267938D+02-0.5197426497542D+02 +-0.5197395354589D+02-0.5197363834563D+02-0.5197331932893D+02-0.5197299644952D+02 +-0.5197266966059D+02-0.5197233891476D+02-0.5197200416404D+02-0.5197166535990D+02 +-0.5197132245319D+02-0.5197097539418D+02-0.5197062413252D+02-0.5197026861727D+02 +-0.5196990879687D+02-0.5196954461909D+02-0.5196917603112D+02-0.5196880297948D+02 +-0.5196842541005D+02-0.5196804326804D+02-0.5196765649801D+02-0.5196726504383D+02 +-0.5196686884871D+02-0.5196646785514D+02-0.5196606200494D+02-0.5196565123919D+02 +-0.5196523549829D+02-0.5196481472189D+02-0.5196438884890D+02-0.5196395781753D+02 +-0.5196352156518D+02-0.5196308002855D+02-0.5196263314350D+02-0.5196218084518D+02 +-0.5196172306789D+02-0.5196125974518D+02-0.5196079080977D+02-0.5196031619354D+02 +-0.5195983582758D+02-0.5195934964214D+02-0.5195885756657D+02-0.5195835952942D+02 +-0.5195785545834D+02-0.5195734528011D+02-0.5195682892060D+02-0.5195630630481D+02 +-0.5195577735679D+02-0.5195524199969D+02-0.5195470015573D+02-0.5195415174616D+02 +-0.5195359669127D+02-0.5195303491041D+02-0.5195246632192D+02-0.5195189084316D+02 +-0.5195130839046D+02-0.5195071887917D+02-0.5195012222358D+02-0.5194951833693D+02 +-0.5194890713143D+02-0.5194828851819D+02-0.5194766240726D+02-0.5194702870759D+02 +-0.5194638732701D+02-0.5194573817222D+02-0.5194508114882D+02-0.5194441616121D+02 +-0.5194374311266D+02-0.5194306190525D+02-0.5194237243986D+02-0.5194167461616D+02 +-0.5194096833262D+02-0.5194025348643D+02-0.5193952997356D+02-0.5193879768871D+02 +-0.5193805652527D+02-0.5193730637535D+02-0.5193654712973D+02-0.5193577867788D+02 +-0.5193500090790D+02-0.5193421370652D+02-0.5193341695911D+02-0.5193261054963D+02 +-0.5193179436061D+02-0.5193096827316D+02-0.5193013216694D+02-0.5192928592013D+02 +-0.5192842940944D+02-0.5192756251004D+02-0.5192668509561D+02-0.5192579703828D+02 +-0.5192489820860D+02-0.5192398847556D+02-0.5192306770652D+02-0.5192213576726D+02 +-0.5192119252189D+02-0.5192023783287D+02-0.5191927156096D+02-0.5191829356524D+02 +-0.5191730370307D+02-0.5191630183005D+02-0.5191528780001D+02-0.5191426146503D+02 +-0.5191322267532D+02-0.5191217127930D+02-0.5191110712354D+02-0.5191003005272D+02 +-0.5190893990959D+02-0.5190783653503D+02-0.5190671976795D+02-0.5190558944528D+02 +-0.5190444540195D+02-0.5190328747089D+02-0.5190211548297D+02-0.5190092926700D+02 +-0.5189972864968D+02-0.5189851345560D+02-0.5189728350719D+02-0.5189603862472D+02 +-0.5189477862625D+02-0.5189350332759D+02-0.5189221254235D+02-0.5189090608179D+02 +-0.5188958375491D+02-0.5188824536834D+02-0.5188689072635D+02-0.5188551963080D+02 +-0.5188413188114D+02-0.5188272727435D+02-0.5188130560492D+02-0.5187986666482D+02 +-0.5187841024347D+02-0.5187693612772D+02-0.5187544410178D+02-0.5187393394724D+02 +-0.5187240544300D+02-0.5187085836524D+02-0.5186929248740D+02-0.5186770758014D+02 +-0.5186610341132D+02-0.5186447974591D+02-0.5186283634606D+02-0.5186117297093D+02 +-0.5185948937678D+02-0.5185778531685D+02-0.5185606054135D+02-0.5185431479744D+02 +-0.5185254782916D+02-0.5185075937741D+02-0.5184894917991D+02-0.5184711697117D+02 +-0.5184526248242D+02-0.5184338544160D+02-0.5184148557330D+02-0.5183956259875D+02 +-0.5183761623572D+02-0.5183564619854D+02-0.5183365219802D+02-0.5183163394142D+02 +-0.5182959113240D+02-0.5182752347098D+02-0.5182543065350D+02-0.5182331237255D+02 +-0.5182116831697D+02-0.5181899817174D+02-0.5181680161800D+02-0.5181457833297D+02 +-0.5181232798987D+02-0.5181005025795D+02-0.5180774480235D+02-0.5180541128413D+02 +-0.5180304936016D+02-0.5180065868310D+02-0.5179823890134D+02-0.5179578965895D+02 +-0.5179331059564D+02-0.5179080134665D+02-0.5178826154277D+02-0.5178569081025D+02 +-0.5178308877073D+02-0.5178045504121D+02-0.5177778923399D+02-0.5177509095659D+02 +-0.5177235981171D+02-0.5176959539717D+02-0.5176679730585D+02-0.5176396512563D+02 +-0.5176109843930D+02-0.5175819682457D+02-0.5175525985390D+02-0.5175228709457D+02 +-0.5174927810849D+02-0.5174623245221D+02-0.5174314967682D+02-0.5174002932792D+02 +-0.5173687094551D+02-0.5173367406395D+02-0.5173043821187D+02-0.5172716291215D+02 +-0.5172384768177D+02-0.5172049203182D+02-0.5171709546736D+02-0.5171365748739D+02 +-0.5171017758479D+02-0.5170665524617D+02-0.5170308995189D+02-0.5169948117592D+02 +-0.5169582838578D+02-0.5169213104249D+02-0.5168838860043D+02-0.5168460050732D+02 +-0.5168076620412D+02-0.5167688512494D+02-0.5167295669696D+02-0.5166898034036D+02 +-0.5166495546822D+02-0.5166088148646D+02-0.5165675779371D+02-0.5165258378128D+02 +-0.5164835883303D+02-0.5164408232529D+02-0.5163975362681D+02-0.5163537209858D+02 +-0.5163093709386D+02-0.5162644795799D+02-0.5162190402831D+02-0.5161730463415D+02 +-0.5161264909661D+02-0.5160793672858D+02-0.5160316683457D+02-0.5159833871062D+02 +-0.5159345164422D+02-0.5158850491424D+02-0.5158349779076D+02-0.5157842953502D+02 +-0.5157329939929D+02-0.5156810662682D+02-0.5156285045165D+02-0.5155753009857D+02 +-0.5155214478300D+02-0.5154669371088D+02-0.5154117607855D+02-0.5153559107266D+02 +-0.5152993787006D+02-0.5152421563767D+02-0.5151842353238D+02-0.5151256070096D+02 +-0.5150662627991D+02-0.5150061939535D+02-0.5149453916296D+02-0.5148838468777D+02 +-0.5148215506412D+02-0.5147584937554D+02-0.5146946669454D+02-0.5146300608264D+02 +-0.5145646659012D+02-0.5144984725596D+02-0.5144314710771D+02-0.5143636516137D+02 +-0.5142950042123D+02-0.5142255187982D+02-0.5141551851771D+02-0.5140839930344D+02 +-0.5140119319335D+02-0.5139389913149D+02-0.5138651604948D+02-0.5137904286634D+02 +-0.5137147848843D+02-0.5136382180931D+02-0.5135607170955D+02-0.5134822705665D+02 +-0.5134028670491D+02-0.5133224949527D+02-0.5132411425521D+02-0.5131587979859D+02 +-0.5130754492555D+02-0.5129910842232D+02-0.5129056906116D+02-0.5128192560017D+02 +-0.5127317678315D+02-0.5126432133956D+02-0.5125535798425D+02-0.5124628541740D+02 +-0.5123710232443D+02-0.5122780737574D+02-0.5121839922671D+02-0.5120887651745D+02 +-0.5119923787276D+02-0.5118948190193D+02-0.5117960719865D+02-0.5116961234085D+02 +-0.5115949589056D+02-0.5114925639380D+02-0.5113889238044D+02-0.5112840236408D+02 +-0.5111778484188D+02-0.5110703829447D+02-0.5109616118579D+02-0.5108515196301D+02 +-0.5107400905631D+02-0.5106273087889D+02-0.5105131582667D+02-0.5103976227836D+02 +-0.5102806859514D+02-0.5101623312071D+02-0.5100425418105D+02-0.5099213008436D+02 +-0.5097985912091D+02-0.5096743956297D+02-0.5095486966464D+02-0.5094214766176D+02 +-0.5092927177183D+02-0.5091624019384D+02-0.5090305110822D+02-0.5088970267672D+02 +-0.5087619304230D+02-0.5086252032900D+02-0.5084868264193D+02-0.5083467806710D+02 +-0.5082050467136D+02-0.5080616050232D+02-0.5079164358822D+02-0.5077695193792D+02 +-0.5076208354076D+02-0.5074703636655D+02-0.5073180836542D+02-0.5071639746782D+02 +-0.5070080158445D+02-0.5068501860613D+02-0.5066904640389D+02-0.5065288282874D+02 +-0.5063652571181D+02-0.5061997286414D+02-0.5060322207678D+02-0.5058627112067D+02 +-0.5056911774669D+02-0.5055175968555D+02-0.5053419464788D+02-0.5051642032411D+02 +-0.5049843438458D+02-0.5048023447945D+02-0.5046181823877D+02-0.5044318327247D+02 +-0.5042432717038D+02-0.5040524750226D+02-0.5038594181787D+02-0.5036640764694D+02 +-0.5034664249930D+02-0.5032664386488D+02-0.5030640921379D+02-0.5028593599640D+02 +-0.5026522164341D+02-0.5024426356594D+02-0.5022305915564D+02-0.5020160578474D+02 +-0.5017990080623D+02-0.5015794155393D+02-0.5013572534263D+02-0.5011324946826D+02 +-0.5009051120796D+02-0.5006750782030D+02-0.5004423654542D+02-0.5002069460521D+02 +-0.4999687920344D+02-0.4997278752603D+02-0.4994841674120D+02-0.4992376399966D+02 +-0.4989882643488D+02-0.4987360116327D+02-0.4984808528443D+02-0.4982227588141D+02 +-0.4979617002094D+02-0.4976976475371D+02-0.4974305711462D+02-0.4971604412309D+02 +-0.4968872278335D+02-0.4966109008469D+02-0.4963314300185D+02-0.4960487849528D+02 +-0.4957629351145D+02-0.4954738498327D+02-0.4951814983035D+02-0.4948858495939D+02 +-0.4945868726453D+02-0.4942845362775D+02-0.4939788091919D+02-0.4936696599757D+02 +-0.4933570571061D+02-0.4930409689534D+02-0.4927213637859D+02-0.4923982097740D+02 +-0.4920714749935D+02-0.4917411274309D+02-0.4914071349870D+02-0.4910694654815D+02 +-0.4907280866573D+02-0.4903829661848D+02-0.4900340716666D+02-0.4896813706420D+02 +-0.4893248305909D+02-0.4889644189392D+02-0.4886001030623D+02-0.4882318502909D+02 +-0.4878596279141D+02-0.4874834031849D+02-0.4871031433244D+02-0.4867188155262D+02 +-0.4863303869609D+02-0.4859378247804D+02-0.4855410961222D+02-0.4851401681140D+02 +-0.4847350078774D+02-0.4843255825325D+02-0.4839118592018D+02-0.4834938050138D+02 +-0.4830713871075D+02-0.4826445726356D+02-0.4822133287682D+02-0.4817776226967D+02 +-0.4813374216365D+02-0.4808926928306D+02-0.4804434035526D+02-0.4799895211091D+02 +-0.4795310128431D+02-0.4790678461358D+02-0.4785999884093D+02-0.4781274071282D+02 +-0.4776500698020D+02-0.4771679439861D+02-0.4766809972836D+02-0.4761891973461D+02 +-0.4756925118748D+02-0.4751909086208D+02-0.4746843553857D+02-0.4741728200213D+02 +-0.4736562704295D+02-0.4731346745620D+02-0.4726080004188D+02-0.4720762160479D+02 +-0.4715392895431D+02-0.4709971890425D+02-0.4704498827268D+02-0.4698973388163D+02 +-0.4693395255690D+02-0.4687764112767D+02-0.4682079642628D+02-0.4676341528777D+02 +-0.4670549454962D+02-0.4664703105122D+02-0.4658802163351D+02-0.4652846313853D+02 +-0.4646835240891D+02-0.4640768628735D+02-0.4634646161617D+02-0.4628467523671D+02 +-0.4622232398885D+02-0.4615940471037D+02-0.4609591423645D+02-0.4603184939910D+02 +-0.4596720702657D+02-0.4590198394276D+02-0.4583617696675D+02-0.4576978291218D+02 +-0.4570279858676D+02-0.4563522079176D+02-0.4556704632159D+02-0.4549827196328D+02 +-0.4542889449617D+02-0.4535891069156D+02-0.4528831731237D+02-0.4521711111299D+02 +-0.4514528883912D+02-0.4507284722768D+02-0.4499978300686D+02-0.4492609289624D+02 +-0.4485177360700D+02-0.4477682184233D+02-0.4470123429783D+02-0.4462500766219D+02 +-0.4454813861790D+02-0.4447062384219D+02-0.4439246000814D+02-0.4431364378589D+02 +-0.4423417184413D+02-0.4415404085174D+02-0.4407324747964D+02-0.4399178840285D+02 +-0.4390966030283D+02-0.4382685986996D+02-0.4374338380636D+02-0.4365922882888D+02 +-0.4357439167239D+02-0.4348886909331D+02-0.4340265787340D+02-0.4331575482384D+02 +-0.4322815678953D+02-0.4313986065369D+02-0.4305086334268D+02-0.4296116183110D+02 +-0.4287075314713D+02-0.4277963437808D+02-0.4268780267613D+02-0.4259525526436D+02 +-0.4250198944278D+02-0.4240800259471D+02-0.4231329219311D+02-0.4221785580702D+02 +-0.4212169110814D+02-0.4202479587724D+02-0.4192716801066D+02-0.4182880552657D+02 +-0.4172970657123D+02-0.4162986942478D+02-0.4152929250699D+02-0.4142797438248D+02 +-0.4132591376546D+02-0.4122310952415D+02-0.4111956068435D+02-0.4101526643252D+02 +-0.4091022611799D+02-0.4080443925436D+02-0.4069790551997D+02-0.4059062475744D+02 +-0.4048259697200D+02-0.4037382232884D+02-0.4026430114924D+02-0.4015403390548D+02 +-0.4004302121449D+02-0.3993126383031D+02-0.3981876263529D+02-0.3970551863000D+02 +-0.3959153292214D+02-0.3947680671418D+02-0.3936134129010D+02-0.3924513800125D+02 +-0.3912819825140D+02-0.3901052348125D+02-0.3889211515259D+02-0.3877297473220D+02 +-0.3865310367583D+02-0.3853250341248D+02-0.3841117532917D+02-0.3828912075654D+02 +-0.3816634095549D+02-0.3804283710513D+02-0.3791861029232D+02-0.3779366150300D+02 +-0.3766799161555D+02-0.3754160139636D+02-0.3741449149782D+02-0.3728666245883D+02 +-0.3715811470790D+02-0.3702884856900D+02-0.3689886427010D+02-0.3676816195438D+02 +-0.3663674169408D+02-0.3650460350690D+02-0.3637174737474D+02-0.3623817326473D+02 +-0.3610388115218D+02-0.3596887104531D+02-0.3583314301154D+02-0.3569669720495D+02 +-0.3555953389464D+02-0.3542165349386D+02-0.3528305658922D+02-0.3514374397011D+02 +-0.3500371665774D+02-0.3486297593358D+02-0.3472152336690D+02-0.3457936084122D+02 +-0.3443649057928D+02-0.3429291516643D+02-0.3414863757211D+02-0.3400366116934D+02 +-0.3385798975190D+02-0.3371162754922D+02-0.3356457923876D+02-0.3341684995570D+02 +-0.3326844530007D+02-0.3311937134098D+02-0.3296963461820D+02-0.3281924214079D+02 +-0.3266820138293D+02-0.3251652027694D+02-0.3236420720350D+02-0.3221127097903D+02 +-0.3205772084042D+02-0.3190356642710D+02-0.3174881776049D+02-0.3159348522098D+02 +-0.3143757952257D+02-0.3128111168511D+02-0.3112409300454D+02-0.3096653502093D+02 +-0.3080844948479D+02-0.3064984832153D+02-0.3049074359439D+02-0.3033114746593D+02 +-0.3017107215833D+02-0.3001052991254D+02-0.2984953294675D+02-0.2968809341400D+02 +-0.2952622335948D+02-0.2936393467762D+02-0.2920123906907D+02-0.2903814799805D+02 +-0.2887467265011D+02-0.2871082389066D+02-0.2854661222446D+02-0.2838204775647D+02 +-0.2821714015409D+02-0.2805189861135D+02-0.2788633181514D+02-0.2772044791378D+02 +-0.2755425448842D+02-0.2738775852723D+02-0.2722096640307D+02-0.2705388385454D+02 +-0.2688651597109D+02-0.2671886718221D+02-0.2655094125117D+02-0.2638274127348D+02 +-0.2621426968047D+02-0.2604552824823D+02-0.2587651811214D+02-0.2570723978730D+02 +-0.2553769319514D+02-0.2536787769632D+02-0.2519779213021D+02-0.2502743486110D+02 +-0.2485680383129D+02-0.2468589662112D+02-0.2451471051601D+02-0.2434324258050D+02 +-0.2417148973924D+02-0.2399944886481D+02-0.2382711687194D+02-0.2365449081810D+02 +-0.2348156800981D+02-0.2330834611404D+02-0.2313482327422D+02-0.2296099822964D+02 +-0.2278687043744D+02-0.2261244019567D+02-0.2243770876615D+02-0.2226267849517D+02 +-0.2208735293014D+02-0.2191173693001D+02-0.2173583676674D+02-0.2155966021537D+02 +-0.2138321662948D+02-0.2120651699903D+02-0.2102957398727D+02-0.2085240194340D+02 +-0.2067501688787D+02-0.2049743646710D+02-0.2031967987514D+02-0.2014176773999D+02 +-0.1996372197331D+02-0.1978556558301D+02-0.1960732244950D+02-0.1942901706755D+02 +-0.1925067425750D+02-0.1907231885074D+02-0.1889397535633D+02-0.1871566761696D+02 +-0.1853741846374D+02-0.1835924938052D+02-0.1818118018868D+02-0.1800322876380D+02 +-0.1782541079491D+02-0.1764773959582D+02-0.1747022597686D+02-0.1729287818264D+02 +-0.1711570189939D+02-0.1693870033244D+02-0.1676187435187D+02-0.1658522270158D+02 +-0.1640874226459D+02-0.1623242837596D+02-0.1605627517269D+02-0.1588027596970D+02 +-0.1570442365062D+02-0.1552871106216D+02-0.1535313140208D+02-0.1517767859145D+02 +-0.1500234762341D+02-0.1482713488228D+02-0.1465203842815D+02-0.1447705824363D+02 +-0.1430219644106D+02-0.1412745742929D+02-0.1395284804054D+02-0.1377837761854D+02 +-0.1360405806987D+02-0.1342990388081D+02-0.1325593210249D+02-0.1308216230731D+02 +-0.1290861651951D+02-0.1273531912305D+02-0.1256229674959D+02-0.1238957814960D+02 +-0.1221719404907D+02-0.1204517699438D+02-0.1187356118783D+02-0.1170238231558D+02 +-0.1153167737042D+02-0.1136148447069D+02-0.1119184267735D+02-0.1102279181034D+02 +-0.1085437226576D+02-0.1068662483495D+02-0.1051959052659D+02-0.1035331039265D+02 +-0.1018782535928D+02-0.1002317606321D+02-0.9859402694342D+01-0.9696544845323D+01 +-0.9534641368482D+01-0.9373730240659D+01-0.9213848436346D+01-0.9055031809511D+01 +-0.8897314984394D+01-0.8740731255549D+01-0.8585312497336D+01-0.8431089083029D+01 +-0.8278089813661D+01-0.8126341856676D+01-0.7975870694439D+01-0.7826700082584D+01 +-0.7678852018171D+01-0.7532346717566D+01-0.7387202603932D+01-0.7243436304187D+01 +-0.7101062655233D+01-0.6960094719270D+01-0.6820543807924D+01-0.6682419514939D+01 +-0.6545729757123D+01-0.6410480823229D+01-0.6276677430423D+01-0.6144322787958D+01 +-0.6013418667669D+01-0.5883965480867D+01-0.5755962361193D+01-0.5629407252975D+01 +-0.5504297004604D+01-0.5380627466436D+01-0.5258393592702D+01-0.5137589546863D+01 +-0.5018208809882D+01-0.4900244290793D+01-0.4783688438971D+01-0.4668533357470D+01 +-0.4554770916754D+01-0.4442392868124D+01-0.4331390956131D+01-0.4221757029192D+01 +-0.4113483147635D+01-0.4006561688322D+01-0.3900985445011D+01-0.3796747723533D+01 +-0.3693842430876D+01-0.3592264157211D+01-0.3492008249906D+01-0.3393070878541D+01 +-0.3295449089976D+01-0.3199140852531D+01-0.3104145088414D+01-0.3010461693592D+01 +-0.2918091544431D+01-0.2827036490592D+01-0.2737299333835D+01-0.2648883792669D+01 +-0.2561794453010D+01-0.2476036705393D+01-0.2391616669610D+01-0.2308541108029D+01 +-0.2226817329318D+01-0.2146453084634D+01-0.2067456458802D+01-0.1989835759339D+01 +-0.1913599406514D+01-0.1838755827812D+01-0.1765313360391D+01-0.1693280165020D+01 +-0.1622664154978D+01-0.1553472943063D+01-0.1485713809518D+01-0.1419393693186D+01 +-0.1354519207570D+01-0.1291096682842D+01-0.1229132234097D+01-0.1168631855453D+01 +-0.1109601538882D+01-0.1052047416050D+01-0.9959759208814D+00-0.9413939701484D+00 +-0.8883091590719D+00-0.8367299687430D+00-0.7866659821253D+00-0.7381281054637D+00 +-0.6911287920896D+00-0.6456822658698D+00-0.6018047418553D+00-0.5595146420441D+00 +-0.5188328045500D+00-0.4797826848498D+00-0.4423905481512D+00-0.4066856522662D+00 +-0.3727004206897D+00-0.3404706058472D+00-0.3100354427093D+00-0.2814377931599D+00 +-0.2547240189175D+00 + 0.0000000000000D+00 + 1012 0.2770741520224D+01 + 0.2150927949039D-04 0.2202124536575D-04 0.2254539478646D-04 0.2308201760180D-04 + 0.2363141055333D-04 0.2419387743865D-04 0.2476972927906D-04 0.2535928449121D-04 + 0.2596286906285D-04 0.2658081673262D-04 0.2721346917432D-04 0.2786117618535D-04 + 0.2852429587973D-04 0.2920319488569D-04 0.2989824854795D-04 0.3060984113473D-04 + 0.3133836604977D-04 0.3208422604934D-04 0.3284783346437D-04 0.3362961042788D-04 + 0.3442998910781D-04 0.3524941194536D-04 0.3608833189898D-04 0.3694721269416D-04 + 0.3782652907911D-04 0.3872676708658D-04 0.3964842430179D-04 0.4059201013679D-04 + 0.4155804611131D-04 0.4254706614023D-04 0.4355961682789D-04 0.4459625776943D-04 + 0.4565756185917D-04 0.4674411560639D-04 0.4785651945856D-04 0.4899538813222D-04 + 0.5016135095172D-04 0.5135505219602D-04 0.5257715145361D-04 0.5382832398596D-04 + 0.5510926109951D-04 0.5642067052648D-04 0.5776327681476D-04 0.5913782172693D-04 + 0.6054506464885D-04 0.6198578300785D-04 0.6346077270088D-04 0.6497084853274D-04 + 0.6651684466474D-04 0.6809961507398D-04 0.6972003402351D-04 0.7137899654355D-04 + 0.7307741892426D-04 0.7481623921999D-04 0.7659641776564D-04 0.7841893770513D-04 + 0.8028480553242D-04 0.8219505164534D-04 0.8415073091254D-04 0.8615292325379D-04 + 0.8820273423416D-04 0.9030129567206D-04 0.9244976626185D-04 0.9464933221109D-04 + 0.9690120789284D-04 0.9920663651351D-04 0.1015668907964D-03 0.1039832736813D-03 + 0.1064571190411D-03 0.1089897924148D-03 0.1115826917580D-03 0.1142372482113D-03 + 0.1169549268870D-03 0.1197372276738D-03 0.1225856860613D-03 0.1255018739831D-03 + 0.1284874006808D-03 0.1315439135877D-03 0.1346730992336D-03 0.1378766841712D-03 + 0.1411564359238D-03 0.1445141639563D-03 0.1479517206680D-03 0.1514710024102D-03 + 0.1550739505263D-03 0.1587625524179D-03 0.1625388426349D-03 0.1664049039925D-03 + 0.1703628687133D-03 0.1744149195974D-03 0.1785632912194D-03 0.1828102711544D-03 + 0.1871582012321D-03 0.1916094788209D-03 0.1961665581427D-03 0.2008319516176D-03 + 0.2056082312418D-03 0.2104980299966D-03 0.2155040432913D-03 0.2206290304405D-03 + 0.2258758161753D-03 0.2312472921908D-03 0.2367464187300D-03 0.2423762262044D-03 + 0.2481398168542D-03 0.2540403664457D-03 0.2600811260106D-03 0.2662654236245D-03 + 0.2725966662290D-03 0.2790783414953D-03 0.2857140197324D-03 0.2925073558401D-03 + 0.2994620913080D-03 0.3065820562611D-03 0.3138711715547D-03 0.3213334509168D-03 + 0.3289730031429D-03 0.3367940343406D-03 0.3448008502286D-03 0.3529978584881D-03 + 0.3613895711713D-03 0.3699806071650D-03 0.3787756947128D-03 0.3877796739964D-03 + 0.3969974997780D-03 0.4064342441040D-03 0.4160950990725D-03 0.4259853796663D-03 + 0.4361105266519D-03 0.4464761095462D-03 0.4570878296540D-03 0.4679515231757D-03 + 0.4790731643881D-03 0.4904588689006D-03 0.5021148969868D-03 0.5140476569946D-03 + 0.5262637088364D-03 0.5387697675611D-03 0.5515727070097D-03 0.5646795635561D-03 + 0.5780975399370D-03 0.5918340091694D-03 0.6058965185620D-03 0.6202927938188D-03 + 0.6350307432396D-03 0.6501184620192D-03 0.6655642366457D-03 0.6813765494038D-03 + 0.6975640829812D-03 0.7141357251847D-03 0.7311005737650D-03 0.7484679413557D-03 + 0.7662473605260D-03 0.7844485889531D-03 0.8030816147148D-03 0.8221566617048D-03 + 0.8416841951763D-03 0.8616749274129D-03 0.8821398235337D-03 0.9030901074324D-03 + 0.9245372678559D-03 0.9464930646236D-03 0.9689695349932D-03 0.9919790001731D-03 + 0.1015534071988D-02 0.1039647659698D-02 0.1064332976981D-02 0.1089603549068D-02 + 0.1115473220057D-02 0.1141956160389D-02 0.1169066874495D-02 0.1196820208634D-02 + 0.1225231358897D-02 0.1254315879409D-02 0.1284089690715D-02 0.1314569088366D-02 + 0.1345770751696D-02 0.1377711752814D-02 0.1410409565795D-02 0.1443882076088D-02 + 0.1478147590144D-02 0.1513224845264D-02 0.1549133019674D-02 0.1585891742841D-02 + 0.1623521106018D-02 0.1662041673040D-02 0.1701474491365D-02 0.1741841103378D-02 + 0.1783163557945D-02 0.1825464422244D-02 0.1868766793867D-02 0.1913094313196D-02 + 0.1958471176071D-02 0.2004922146751D-02 0.2052472571166D-02 0.2101148390486D-02 + 0.2150976154989D-02 0.2201983038264D-02 0.2254196851731D-02 0.2307646059493D-02 + 0.2362359793542D-02 0.2418367869301D-02 0.2475700801533D-02 0.2534389820612D-02 + 0.2594466889165D-02 0.2655964719104D-02 0.2718916789042D-02 0.2783357362106D-02 + 0.2849321504172D-02 0.2916845102501D-02 0.2985964884814D-02 0.3056718438800D-02 + 0.3129144232066D-02 0.3203281632551D-02 0.3279170929405D-02 0.3356853354336D-02 + 0.3436371103460D-02 0.3517767359634D-02 0.3601086315312D-02 0.3686373195913D-02 + 0.3773674283724D-02 0.3863036942351D-02 0.3954509641719D-02 0.4048141983652D-02 + 0.4143984728019D-02 0.4242089819491D-02 0.4342510414893D-02 0.4445300911185D-02 + 0.4550516974067D-02 0.4658215567249D-02 0.4768454982366D-02 0.4881294869584D-02 + 0.4996796268890D-02 0.5115021642093D-02 0.5236034905549D-02 0.5359901463622D-02 + 0.5486688242898D-02 0.5616463727181D-02 0.5749297993262D-02 0.5885262747508D-02 + 0.6024431363262D-02 0.6166878919093D-02 0.6312682237899D-02 0.6461919926891D-02 + 0.6614672418475D-02 0.6771022012045D-02 0.6931052916716D-02 0.7094851295016D-02 + 0.7262505307545D-02 0.7434105158642D-02 0.7609743143066D-02 0.7789513693721D-02 + 0.7973513430440D-02 0.8161841209859D-02 0.8354598176397D-02 0.8551887814376D-02 + 0.8753816001287D-02 0.8960491062250D-02 0.9172023825667D-02 0.9388527680122D-02 + 0.9610118632529D-02 0.9836915367568D-02 0.1006903930843D-01 0.1030661467892D-01 + 0.1054976856688D-01 0.1079863098909D-01 0.1105333495749D-01 0.1131401654696D-01 + 0.1158081496451D-01 0.1185387262003D-01 0.1213333519856D-01 0.1241935173418D-01 + 0.1271207468545D-01 0.1301166001257D-01 0.1331826725616D-01 0.1363205961778D-01 + 0.1395320404221D-01 0.1428187130150D-01 0.1461823608081D-01 0.1496247706623D-01 + 0.1531477703430D-01 0.1567532294367D-01 0.1604430602860D-01 0.1642192189452D-01 + 0.1680837061563D-01 0.1720385683464D-01 0.1760858986456D-01 0.1802278379280D-01 + 0.1844665758734D-01 0.1888043520531D-01 0.1932434570378D-01 0.1977862335297D-01 + 0.2024350775185D-01 0.2071924394615D-01 0.2120608254895D-01 0.2170427986376D-01 + 0.2221409801021D-01 0.2273580505238D-01 0.2326967512987D-01 0.2381598859160D-01 + 0.2437503213237D-01 0.2494709893234D-01 0.2553248879941D-01 0.2613150831454D-01 + 0.2674447098014D-01 0.2737169737147D-01 0.2801351529124D-01 0.2867025992742D-01 + 0.2934227401421D-01 0.3002990799646D-01 0.3073352019732D-01 0.3145347698951D-01 + 0.3219015296988D-01 0.3294393113773D-01 0.3371520307664D-01 0.3450436914006D-01 + 0.3531183864059D-01 0.3613803004319D-01 0.3698337116219D-01 0.3784829936233D-01 + 0.3873326176383D-01 0.3963871545150D-01 0.4056512768813D-01 0.4151297613205D-01 + 0.4248274905905D-01 0.4347494558865D-01 0.4449007591493D-01 0.4552866154180D-01 + 0.4659123552298D-01 0.4767834270657D-01 0.4879053998454D-01 0.4992839654695D-01 + 0.5109249414114D-01 0.5228342733595D-01 0.5350180379101D-01 0.5474824453121D-01 + 0.5602338422639D-01 0.5732787147645D-01 0.5866236910176D-01 0.6002755443915D-01 + 0.6142411964345D-01 0.6285277199472D-01 0.6431423421119D-01 0.6580924476805D-01 + 0.6733855822219D-01 0.6890294554290D-01 0.7050319444864D-01 0.7214010975008D-01 + 0.7381451369925D-01 0.7552724634520D-01 0.7727916589591D-01 0.7907114908690D-01 + 0.8090409155624D-01 0.8277890822643D-01 0.8469653369292D-01 0.8665792261951D-01 + 0.8866405014071D-01 0.9071591227111D-01 0.9281452632182D-01 0.9496093132410D-01 + 0.9715618846031D-01 0.9940138150208D-01 0.1016976172560D+00 0.1040460260169D+00 + 0.1064477620282D+00 0.1089040039508D+00 0.1114159553388D+00 0.1139848451236D+00 + 0.1166119281054D+00 0.1192984854532D+00 0.1220458252122D+00 0.1248552828197D+00 + 0.1277282216288D+00 0.1306660334408D+00 0.1336701390448D+00 0.1367419887670D+00 + 0.1398830630269D+00 0.1430948729031D+00 0.1463789607067D+00 0.1497369005636D+00 + 0.1531702990050D+00 0.1566807955666D+00 0.1602700633964D+00 0.1639398098711D+00 + 0.1676917772207D+00 0.1715277431623D+00 0.1754495215419D+00 0.1794589629856D+00 + 0.1835579555582D+00 0.1877484254317D+00 0.1920323375616D+00 0.1964116963718D+00 + 0.2008885464482D+00 0.2054649732406D+00 0.2101431037732D+00 0.2149251073635D+00 + 0.2198131963488D+00 0.2248096268222D+00 0.2299166993754D+00 0.2351367598503D+00 + 0.2404722000984D+00 0.2459254587480D+00 0.2514990219789D+00 0.2571954243047D+00 + 0.2630172493626D+00 0.2689671307106D+00 0.2750477526311D+00 0.2812618509418D+00 + 0.2876122138134D+00 0.2941016825931D+00 0.3007331526352D+00 0.3075095741362D+00 + 0.3144339529771D+00 0.3215093515700D+00 0.3287388897102D+00 0.3361257454325D+00 + 0.3436731558729D+00 0.3513844181328D+00 0.3592628901485D+00 0.3673119915621D+00 + 0.3755352045968D+00 0.3839360749336D+00 0.3925182125899D+00 0.4012852927993D+00 + 0.4102410568930D+00 0.4193893131804D+00 0.4287339378299D+00 0.4382788757486D+00 + 0.4480281414604D+00 0.4579858199819D+00 0.4681560676951D+00 0.4785431132164D+00 + 0.4891512582614D+00 0.4999848785043D+00 0.5110484244305D+00 0.5223464221834D+00 + 0.5338834744021D+00 0.5456642610510D+00 0.5576935402392D+00 0.5699761490289D+00 + 0.5825170042325D+00 0.5953211031952D+00 0.6083935245653D+00 0.6217394290472D+00 + 0.6353640601390D+00 0.6492727448516D+00 0.6634708944082D+00 0.6779640049238D+00 + 0.6927576580616D+00 0.7078575216668D+00 0.7232693503742D+00 0.7389989861895D+00 + 0.7550523590420D+00 0.7714354873073D+00 0.7881544782973D+00 0.8052155287175D+00 + 0.8226249250876D+00 0.8403890441249D+00 0.8585143530879D+00 0.8770074100784D+00 + 0.8958748642992D+00 0.9151234562658D+00 0.9347600179702D+00 0.9547914729931D+00 + 0.9752248365635D+00 0.9960672155622D+00 0.1017325808468D+01 0.1039007905241D+01 + 0.1061120887144D+01 0.1083672226499D+01 0.1106669486370D+01 0.1130120320176D+01 + 0.1154032471231D+01 0.1178413772204D+01 0.1203272144493D+01 0.1228615597523D+01 + 0.1254452227950D+01 0.1280790218774D+01 0.1307637838359D+01 0.1335003439353D+01 + 0.1362895457506D+01 0.1391322410385D+01 0.1420292895972D+01 0.1449815591159D+01 + 0.1479899250115D+01 0.1510552702537D+01 0.1541784851777D+01 0.1573604672833D+01 + 0.1606021210210D+01 0.1639043575644D+01 0.1672680945677D+01 0.1706942559091D+01 + 0.1741837714186D+01 0.1777375765901D+01 0.1813566122779D+01 0.1850418243757D+01 + 0.1887941634794D+01 0.1926145845317D+01 0.1965040464488D+01 0.2004635117287D+01 + 0.2044939460400D+01 0.2085963177919D+01 0.2127715976829D+01 0.2170207582300D+01 + 0.2213447732763D+01 0.2257446174769D+01 0.2302212657626D+01 0.2347756927812D+01 + 0.2394088723154D+01 0.2441217766767D+01 0.2489153760756D+01 0.2537906379665D+01 + 0.2587485263675D+01 0.2637900011547D+01 0.2689160173295D+01 0.2741275242598D+01 + 0.2794254648931D+01 0.2848107749430D+01 0.2902843820459D+01 0.2958472048904D+01 + 0.3015001523163D+01 0.3072441223848D+01 0.3130800014182D+01 0.3190086630094D+01 + 0.3250309670002D+01 0.3311477584285D+01 0.3373598664440D+01 0.3436681031917D+01 + 0.3500732626634D+01 0.3565761195166D+01 0.3631774278604D+01 0.3698779200090D+01 + 0.3766783052007D+01 0.3835792682854D+01 0.3905814683769D+01 0.3976855374728D+01 + 0.4048920790399D+01 0.4122016665671D+01 0.4196148420834D+01 0.4271321146438D+01 + 0.4347539587809D+01 0.4424808129241D+01 0.4503130777854D+01 0.4582511147131D+01 + 0.4662952440136D+01 0.4744457432406D+01 0.4827028454547D+01 0.4910667374509D+01 + 0.4995375579573D+01 0.5081153958042D+01 0.5168002880655D+01 0.5255922181721D+01 + 0.5344911139992D+01 0.5434968459290D+01 0.5526092248881D+01 0.5618280003639D+01 + 0.5711528583982D+01 0.5805834195616D+01 0.5901192369103D+01 0.5997597939257D+01 + 0.6095045024395D+01 0.6193527005472D+01 0.6293036505099D+01 0.6393565366487D+01 + 0.6495104632331D+01 0.6597644523660D+01 0.6701174418681D+01 0.6805682831645D+01 + 0.6911157391760D+01 0.7017584822191D+01 0.7124950919171D+01 0.7233240531258D+01 + 0.7342437538781D+01 0.7452524833500D+01 0.7563484298530D+01 0.7675296788562D+01 + 0.7787942110430D+01 0.7901399004058D+01 0.8015645123842D+01 0.8130657020509D+01 + 0.8246410123503D+01 0.8362878723950D+01 0.8480035958250D+01 0.8597853792358D+01 + 0.8716303006799D+01 0.8835353182487D+01 0.8954972687391D+01 0.9075128664130D+01 + 0.9195787018538D+01 0.9316912409273D+01 0.9438468238543D+01 0.9560416644000D+01 + 0.9682718491880D+01 0.9805333371460D+01 0.9928219590896D+01 0.1005133417453D+02 + 0.1017463286171D+02 0.1029807010722D+02 0.1042159908344D+02 0.1054517168417D+02 + 0.1066873853037D+02 0.1079224897780D+02 0.1091565112659D+02 0.1103889183301D+02 + 0.1116191672323D+02 0.1128467020944D+02 0.1140709550823D+02 0.1152913466133D+02 + 0.1165072855885D+02 0.1177181696506D+02 0.1189233854680D+02 0.1201223090454D+02 + 0.1213143060625D+02 0.1224987322407D+02 0.1236749337400D+02 0.1248422475837D+02 + 0.1260000021157D+02 0.1271475174875D+02 0.1282841061773D+02 0.1294090735413D+02 + 0.1305217183979D+02 0.1316213336451D+02 0.1327072069111D+02 0.1337786212400D+02 + 0.1348348558110D+02 0.1358751866928D+02 0.1368988876325D+02 0.1379052308804D+02 + 0.1388934880491D+02 0.1398629310084D+02 0.1408128328150D+02 0.1417424686776D+02 + 0.1426511169568D+02 0.1435380601989D+02 0.1444025862047D+02 0.1452439891313D+02 + 0.1460615706273D+02 0.1468546410000D+02 0.1476225204147D+02 0.1483645401237D+02 + 0.1490800437259D+02 0.1497683884540D+02 0.1504289464893D+02 0.1510611063019D+02 + 0.1516642740155D+02 0.1522378747941D+02 0.1527813542502D+02 0.1532941798703D+02 + 0.1537758424592D+02 0.1542258575964D+02 0.1546437671057D+02 0.1550291405346D+02 + 0.1553815766392D+02 0.1557007048740D+02 0.1559861868825D+02 0.1562377179849D+02 + 0.1564550286611D+02 0.1566378860245D+02 0.1567860952827D+02 0.1568995011828D+02 + 0.1569779894358D+02 0.1570214881171D+02 0.1570299690387D+02 0.1570034490889D+02 + 0.1569419915342D+02 0.1568457072811D+02 0.1567147560898D+02 0.1565493477391D+02 + 0.1563497431333D+02 0.1561162553504D+02 0.1558492506233D+02 0.1555491492507D+02 + 0.1552164264320D+02 0.1548516130217D+02 0.1544552961962D+02 0.1540281200312D+02 + 0.1535707859803D+02 0.1530840532536D+02 0.1525687390884D+02 0.1520257189079D+02 + 0.1514559263632D+02 0.1508603532531D+02 0.1502400493172D+02 0.1495961218971D+02 + 0.1489297354623D+02 0.1482421109950D+02 0.1475345252306D+02 0.1468083097499D+02 + 0.1460648499184D+02 0.1453055836709D+02 0.1445320001360D+02 0.1437456381003D+02 + 0.1429480843075D+02 0.1421409715909D+02 0.1413259768392D+02 0.1405048187912D+02 + 0.1396792556614D+02 0.1388510825940D+02 0.1380221289467D+02 0.1371942554036D+02 + 0.1363693509198D+02 0.1355493294972D+02 0.1347361267958D+02 0.1339316965818D+02 + 0.1331380070165D+02 0.1323570367897D+02 0.1315907711016D+02 0.1308411975004D+02 + 0.1301103015787D+02 0.1294000625373D+02 0.1287124486230D+02 0.1280494124477D+02 + 0.1274128861984D+02 0.1268047767460D+02 0.1262269606643D+02 0.1256812791682D+02 + 0.1251695329838D+02 0.1246934771604D+02 0.1242548158392D+02 0.1238551969900D+02 + 0.1234962071295D+02 0.1231793660373D+02 0.1229061214824D+02 0.1226778439767D+02 + 0.1224958215706D+02 0.1223612547078D+02 0.1222752511553D+02 0.1222388210258D+02 + 0.1222528719100D+02 0.1223182041366D+02 0.1224355061775D+02 0.1226053502171D+02 + 0.1228281879023D+02 0.1231043462935D+02 0.1234340240339D+02 0.1238172877543D+02 + 0.1242540687338D+02 0.1247441598324D+02 0.1252872127141D+02 0.1258827353770D+02 + 0.1265300900087D+02 0.1272284911822D+02 0.1279770044081D+02 0.1287745450601D+02 + 0.1296198776857D+02 0.1305116157186D+02 0.1314482216032D+02 0.1324280073454D+02 + 0.1334491354991D+02 0.1345096205988D+02 0.1356073310471D+02 0.1367399914649D+02 + 0.1379051855093D+02 0.1391003591655D+02 0.1403228245150D+02 0.1415697639825D+02 + 0.1428382350615D+02 0.1441251755180D+02 0.1454274090682D+02 0.1467416515265D+02 + 0.1480645174180D+02 0.1493925270450D+02 0.1507221140012D+02 0.1520496331175D+02 + 0.1533713688305D+02 0.1546835439544D+02 0.1559823288411D+02 0.1572638509088D+02 + 0.1585242045188D+02 0.1597594611769D+02 0.1609656800349D+02 0.1621389186673D+02 + 0.1632752440935D+02 0.1643707440175D+02 0.1654215382521D+02 0.1664237902974D+02 + 0.1673737190368D+02 0.1682676105166D+02 0.1691018297723D+02 0.1698728326633D+02 + 0.1705771776761D+02 0.1712115376582D+02 0.1717727114395D+02 0.1722576353007D+02 + 0.1726633942470D+02 0.1729872330429D+02 0.1732265669667D+02 0.1733789922408D+02 + 0.1734422960952D+02 0.1734144664198D+02 0.1732937009656D+02 0.1730784160492D+02 + 0.1727672547225D+02 0.1723590943644D+02 0.1718530536559D+02 0.1712484989008D+02 + 0.1705450496536D+02 0.1697425836203D+02 0.1688412407975D+02 0.1678414268193D+02 + 0.1667438154808D+02 0.1655493504124D+02 0.1642592458792D+02 0.1628749866833D+02 + 0.1613983271513D+02 0.1598312891883D+02 0.1581761593876D+02 0.1564354851859D+02 + 0.1546120700566D+02 0.1527089677411D+02 0.1507294755170D+02 0.1486771265109D+02 + 0.1465556810624D+02 0.1443691171558D+02 0.1421216199343D+02 0.1398175703206D+02 + 0.1374615327696D+02 0.1350582421831D+02 0.1326125900230D+02 0.1301296096613D+02 + 0.1276144610103D+02 0.1250724144826D+02 0.1225088343315D+02 0.1199291614280D+02 + 0.1173388955369D+02 0.1147435771520D+02 0.1121487689618D+02 0.1095600370143D+02 + 0.1069829316549D+02 0.1044229683153D+02 0.1018856082317D+02 0.9937623917321D+01 + 0.9690015626445D+01 0.9446254298643D+01 0.9206845244038D+01 0.8972278896087D+01 + 0.8743029016360D+01 0.8519550951297D+01 0.8302279949355D+01 0.8091629546790D+01 + 0.7887990030116D+01 0.7691726983014D+01 0.7503179925129D+01 0.7322661049902D+01 + 0.7150454068046D+01 0.6986813162918D+01 0.6831962063451D+01 0.6686093239819D+01 + 0.6549367226364D+01 0.6421912075717D+01 0.6303822947394D+01 0.6195161833447D+01 + 0.6095957423078D+01 0.6006205107394D+01 0.5925867124779D+01 0.5854872846611D+01 + 0.5793119202371D+01 0.5740471242429D+01 0.5696762836121D+01 0.5661797502031D+01 + 0.5635349366701D+01 0.5617164247353D+01 0.5606960853570D+01 0.5604432102259D+01 + 0.5609246539649D+01 0.5621049863505D+01 0.5639466538232D+01 0.5664101495024D+01 + 0.5694541908766D+01 0.5730359042993D+01 0.5771110153784D+01 0.5816340443192D+01 + 0.5865585052475D+01 0.5918371085180D+01 0.5974219649957D+01 0.6032647912832D+01 + 0.6093171148637D+01 0.6155304781260D+01 0.6218566402475D+01 0.6282477759234D+01 + 0.6346566699475D+01 0.6410369066815D+01 0.6473430534781D+01 0.6535308371644D+01 + 0.6595573127395D+01 0.6653810234872D+01 0.6709621517670D+01 0.6762626598041D+01 + 0.6812464198680D+01 0.6858793332986D+01 0.6901294379138D+01 0.6939670034070D+01 + 0.6973646144233D+01 0.7002972410830D+01 0.7027422967990D+01 0.7046796833200D+01 + 0.7060918230061D+01 0.7069636784259D+01 0.7072827594374D+01 0.7070391179926D+01 + 0.7062253309715D+01 0.7048364714231D+01 0.7028700686483D+01 0.7003260576238D+01 + 0.6972067183121D+01 0.6935166054562D+01 0.6892624694966D+01 0.6844531692843D+01 + 0.6790995772965D+01 0.6732144780827D+01 0.6668124606899D+01 0.6599098058289D+01 + 0.6525243685473D+01 0.6446754571799D+01 0.6363837093418D+01 0.6276709657188D+01 + 0.6185601423998D+01 0.6090751024726D+01 0.5992405275866D+01 0.5890817901556D+01 + 0.5786248268476D+01 0.5678960139726D+01 0.5569220453475D+01 0.5457298131760D+01 + 0.5343462924443D+01 0.5227984292928D+01 0.5111130337809D+01 0.4993166774192D+01 + 0.4874355958030D+01 0.4754955966341D+01 0.4635219733799D+01 0.4515394247714D+01 + 0.4395719803061D+01 0.4276429318764D+01 0.4157747716089D+01 0.4039891359594D+01 + 0.3923067560758D+01 0.3807474144035D+01 0.3693299074769D+01 0.3580720148118D+01 + 0.3469904737816D+01 0.3361009603367D+01 0.3254180754011D+01 0.3149553367571D+01 + 0.3047251762116D+01 0.2947389418162D+01 0.2850069049006D+01 0.2755382716614D+01 + 0.2663411990420D+01 0.2574228146230D+01 0.2487892402405D+01 0.2404456190400D+01 + 0.2323961456713D+01 0.2246440993268D+01 0.2171918793250D+01 0.2100410429420D+01 + 0.2031923451965D+01 0.1966457802972D+01 0.1904006244666D+01 0.1844554798640D+01 + 0.1788083193345D+01 0.1734565317240D+01 0.1683969675070D+01 0.1636259844862D+01 + 0.1591394933364D+01 0.1549330027746D+01 0.1510016641546D+01 0.1473403152964D+01 + 0.1439435233770D+01 0.1408056267219D+01 0.1379207753531D+01 0.1352829701650D+01 + 0.1328861006133D+01 0.1307239808175D+01 0.1287903839946D+01 0.1270790751526D+01 + 0.1255838419882D+01 0.1242985239474D+01 0.1232170394175D+01 0.1223334110328D+01 + 0.1216417890857D+01 0.1211364730456D+01 0.1208119311934D+01 0.1206628183910D+01 + 0.1206839920052D+01 0.1208705260142D+01 0.1212177233248D+01 0.1217211263310D+01 + 0.1223765257423D+01 0.1231799677111D+01 0.1241277592815D+01 0.1252164721788D+01 + 0.1264429449524D+01 0.1278042834732D+01 0.1292978597814D+01 0.1309213092627D+01 + 0.1326725261233D+01 0.1345496571135D+01 0.1365510934358D+01 0.1386754607532D+01 + 0.1409215426363D+01 0.1433003097507D+01 0.1458223277591D+01 0.1484860699421D+01 + 0.1512902583279D+01 0.1542338542721D+01 0.1573160498496D+01 0.1605362600812D+01 + 0.1638941160170D+01 0.1673894586973D+01 0.1710223340083D+01 0.1747929884514D+01 + 7 1012 + 1 0 -1 -511.89150 + 2 0 -1 -58.80097 + 2 1 1 -50.61290 + 2 1 -2 -49.69692 + 3 0 -1 -5.52718 + 3 1 1 -3.14309 + 3 1 -2 -3.03034 + 0.2123373461549D-04 0.2173914995400D-04 0.2225659296114D-04 0.2278634977738D-04 + 0.2332871334728D-04 0.2388398358121D-04 0.2445246752083D-04 0.2503447950857D-04 + 0.2563034136106D-04 0.2624038254674D-04 0.2686494036763D-04 0.2750436014548D-04 + 0.2815899541226D-04 0.2882920810522D-04 0.2951536876657D-04 0.3021785674791D-04 + 0.3093706041946D-04 0.3167337738432D-04 0.3242721469777D-04 0.3319898909177D-04 + 0.3398912720483D-04 0.3479806581728D-04 0.3562625209215D-04 0.3647414382175D-04 + 0.3734220968012D-04 0.3823092948144D-04 0.3914079444457D-04 0.4007230746391D-04 + 0.4102598338660D-04 0.4200234929636D-04 0.4300194480406D-04 0.4402532234512D-04 + 0.4507304748402D-04 0.4614569922601D-04 0.4724387033618D-04 0.4836816766617D-04 + 0.4951921248852D-04 0.5069764083903D-04 0.5190410386721D-04 0.5313926819498D-04 + 0.5440381628400D-04 0.5569844681152D-04 0.5702387505533D-04 0.5838083328767D-04 + 0.5977007117859D-04 0.6119235620880D-04 0.6264847409228D-04 0.6413922920902D-04 + 0.6566544504782D-04 0.6722796465978D-04 0.6882765112238D-04 0.7046538801462D-04 + 0.7214207990339D-04 0.7385865284136D-04 0.7561605487667D-04 0.7741525657465D-04 + 0.7925725155197D-04 0.8114305702331D-04 0.8307371436110D-04 0.8505028966841D-04 + 0.8707387436545D-04 0.8914558578994D-04 0.9126656781168D-04 0.9343799146165D-04 + 0.9566105557602D-04 0.9793698745538D-04 0.1002670435396D-03 0.1026525100984D-03 + 0.1050947039390D-03 0.1075949731294D-03 0.1101546977394D-03 0.1127752905997D-03 + 0.1154581980775D-03 0.1182049008719D-03 0.1210169148270D-03 0.1238957917652D-03 + 0.1268431203390D-03 0.1298605269045D-03 0.1329496764137D-03 0.1361122733297D-03 + 0.1393500625619D-03 0.1426648304247D-03 0.1460584056178D-03 0.1495326602303D-03 + 0.1530895107681D-03 0.1567309192056D-03 0.1604588940629D-03 0.1642754915072D-03 + 0.1681828164816D-03 0.1721830238593D-03 0.1762783196258D-03 0.1804709620887D-03 + 0.1847632631165D-03 0.1891575894056D-03 0.1936563637785D-03 0.1982620665115D-03 + 0.2029772366947D-03 0.2078044736231D-03 0.2127464382210D-03 0.2178058545005D-03 + 0.2229855110531D-03 0.2282882625778D-03 0.2337170314442D-03 0.2392748092933D-03 + 0.2449646586752D-03 0.2507897147258D-03 0.2567531868833D-03 0.2628583606444D-03 + 0.2691085993625D-03 0.2755073460880D-03 0.2820581254518D-03 0.2887645455935D-03 + 0.2956303001344D-03 0.3026591701977D-03 0.3098550264756D-03 0.3172218313454D-03 + 0.3247636410353D-03 0.3324846078408D-03 0.3403889823939D-03 0.3484811159850D-03 + 0.3567654629401D-03 0.3652465830528D-03 0.3739291440747D-03 0.3828179242637D-03 + 0.3919178149916D-03 0.4012338234146D-03 0.4107710752045D-03 0.4205348173457D-03 + 0.4305304209971D-03 0.4407633844209D-03 0.4512393359813D-03 0.4619640372121D-03 + 0.4729433859575D-03 0.4841834195856D-03 0.4956903182785D-03 0.5074704083979D-03 + 0.5195301659314D-03 0.5318762200182D-03 0.5445153565579D-03 0.5574545219044D-03 + 0.5707008266453D-03 0.5842615494708D-03 0.5981441411326D-03 0.6123562284955D-03 + 0.6269056186847D-03 0.6418003033287D-03 0.6570484629028D-03 0.6726584711734D-03 + 0.6886388997468D-03 0.7049985227240D-03 0.7217463214642D-03 0.7388914894603D-03 + 0.7564434373277D-03 0.7744117979097D-03 0.7928064315026D-03 0.8116374312024D-03 + 0.8309151283763D-03 0.8506500982622D-03 0.8708531656989D-03 0.8915354109894D-03 + 0.9127081759015D-03 0.9343830698083D-03 0.9565719759715D-03 0.9792870579714D-03 + 0.1002540766287D-02 0.1026345845027D-02 0.1050715338824D-02 0.1075662599879D-02 + 0.1101201295181D-02 0.1127345413883D-02 0.1154109274864D-02 0.1181507534450D-02 + 0.1209555194328D-02 0.1238267609637D-02 0.1267660497252D-02 0.1297749944251D-02 + 0.1328552416593D-02 0.1360084767981D-02 0.1392364248945D-02 0.1425408516127D-02 + 0.1459235641785D-02 0.1493864123514D-02 0.1529312894196D-02 0.1565601332181D-02 + 0.1602749271697D-02 0.1640777013510D-02 0.1679705335822D-02 0.1719555505429D-02 + 0.1760349289133D-02 0.1802108965417D-02 0.1844857336390D-02 0.1888617740010D-02 + 0.1933414062589D-02 0.1979270751585D-02 0.2026212828687D-02 0.2074265903209D-02 + 0.2123456185786D-02 0.2173810502385D-02 0.2225356308647D-02 0.2278121704551D-02 + 0.2332135449417D-02 0.2387426977257D-02 0.2444026412476D-02 0.2501964585936D-02 + 0.2561273051389D-02 0.2621984102285D-02 0.2684130788965D-02 0.2747746936258D-02 + 0.2812867161465D-02 0.2879526892772D-02 0.2947762388071D-02 0.3017610754222D-02 + 0.3089109966753D-02 0.3162298890003D-02 0.3237217297741D-02 0.3313905894238D-02 + 0.3392406335837D-02 0.3472761253004D-02 0.3555014272883D-02 0.3639210042377D-02 + 0.3725394251736D-02 0.3813613658698D-02 0.3903916113173D-02 0.3996350582488D-02 + 0.4090967177209D-02 0.4187817177547D-02 0.4286953060364D-02 0.4388428526794D-02 + 0.4492298530489D-02 0.4598619306504D-02 0.4707448400838D-02 0.4818844700646D-02 + 0.4932868465127D-02 0.5049581357120D-02 0.5169046475404D-02 0.5291328387739D-02 + 0.5416493164639D-02 0.5544608413917D-02 0.5675743316002D-02 0.5809968660057D-02 + 0.5947356880904D-02 0.6087982096781D-02 0.6231920147946D-02 0.6379248636155D-02 + 0.6530046965011D-02 0.6684396381234D-02 0.6842380016839D-02 0.7004082932273D-02 + 0.7169592160503D-02 0.7338996752102D-02 0.7512387821327D-02 0.7689858593235D-02 + 0.7871504451850D-02 0.8057422989391D-02 0.8247714056607D-02 0.8442479814225D-02 + 0.8641824785540D-02 0.8845855910175D-02 0.9054682599025D-02 0.9268416790430D-02 + 0.9487173007575D-02 0.9711068417172D-02 0.9940222889430D-02 0.1017475905935D-01 + 0.1041480238936D-01 0.1066048123337D-01 0.1091192690214D-01 0.1116927373022D-01 + 0.1143265914425D-01 0.1170222373276D-01 0.1197811131760D-01 0.1226046902681D-01 + 0.1254944736912D-01 0.1284520031015D-01 0.1314788535014D-01 0.1345766360348D-01 + 0.1377469987990D-01 0.1409916276750D-01 0.1443122471744D-01 0.1477106213063D-01 + 0.1511885544620D-01 0.1547478923187D-01 0.1583905227632D-01 0.1621183768351D-01 + 0.1659334296907D-01 0.1698377015868D-01 0.1738332588869D-01 0.1779222150874D-01 + 0.1821067318670D-01 0.1863890201578D-01 0.1907713412394D-01 0.1952560078568D-01 + 0.1998453853608D-01 0.2045418928739D-01 0.2093480044805D-01 0.2142662504416D-01 + 0.2192992184360D-01 0.2244495548276D-01 0.2297199659585D-01 0.2351132194704D-01 + 0.2406321456527D-01 0.2462796388197D-01 0.2520586587156D-01 0.2579722319499D-01 + 0.2640234534617D-01 0.2702154880148D-01 0.2765515717239D-01 0.2830350136121D-01 + 0.2896691972007D-01 0.2964575821319D-01 0.3034037058244D-01 0.3105111851634D-01 + 0.3177837182251D-01 0.3252250860359D-01 0.3328391543683D-01 0.3406298755727D-01 + 0.3486012904465D-01 0.3567575301409D-01 0.3651028181063D-01 0.3736414720771D-01 + 0.3823779060956D-01 0.3913166325773D-01 0.4004622644169D-01 0.4098195171364D-01 + 0.4193932110758D-01 0.4291882736274D-01 0.4392097415138D-01 0.4494627631115D-01 + 0.4599526008193D-01 0.4706846334735D-01 0.4816643588104D-01 0.4928973959763D-01 + 0.5043894880863D-01 0.5161465048329D-01 0.5281744451445D-01 0.5404794398948D-01 + 0.5530677546647D-01 0.5659457925562D-01 0.5791200970601D-01 0.5925973549779D-01 + 0.6063843993988D-01 0.6204882127328D-01 0.6349159298001D-01 0.6496748409788D-01 + 0.6647723954103D-01 0.6802162042643D-01 0.6960140440641D-01 0.7121738600725D-01 + 0.7287037697395D-01 0.7456120662128D-01 0.7629072219118D-01 0.7805978921657D-01 + 0.7986929189166D-01 0.8172013344892D-01 0.8361323654265D-01 0.8554954363940D-01 + 0.8753001741513D-01 0.8955564115940D-01 0.9162741918654D-01 0.9374637725383D-01 + 0.9591356298698D-01 0.9813004631275D-01 0.1003969198990D+00 0.1027152996019D+00 + 0.1050863249211D+00 0.1075111594618D+00 0.1099909914051D+00 0.1125270339855D+00 + 0.1151205259766D+00 0.1177727321842D+00 0.1204849439476D+00 0.1232584796489D+00 + 0.1260946852301D+00 0.1289949347182D+00 0.1319606307590D+00 0.1349932051583D+00 + 0.1380941194317D+00 0.1412648653632D+00 0.1445069655708D+00 0.1478219740820D+00 + 0.1512114769165D+00 0.1546770926778D+00 0.1582204731535D+00 0.1618433039236D+00 + 0.1655473049771D+00 0.1693342313383D+00 0.1732058737000D+00 0.1771640590662D+00 + 0.1812106514032D+00 0.1853475522988D+00 0.1895767016304D+00 0.1939000782413D+00 + 0.1983197006251D+00 0.2028376276193D+00 0.2074559591063D+00 0.2121768367234D+00 + 0.2170024445803D+00 0.2219350099852D+00 0.2269768041788D+00 0.2321301430764D+00 + 0.2373973880172D+00 0.2427809465221D+00 0.2482832730585D+00 0.2539068698131D+00 + 0.2596542874715D+00 0.2655281260047D+00 0.2715310354636D+00 0.2776657167793D+00 + 0.2839349225700D+00 0.2903414579550D+00 0.2968881813739D+00 0.3035780054119D+00 + 0.3104138976312D+00 0.3173988814070D+00 0.3245360367687D+00 0.3318285012460D+00 + 0.3392794707188D+00 0.3468922002717D+00 0.3546700050516D+00 0.3626162611285D+00 + 0.3707344063591D+00 0.3790279412529D+00 0.3875004298396D+00 0.3961555005386D+00 + 0.4049968470283D+00 0.4140282291162D+00 0.4232534736091D+00 0.4326764751811D+00 + 0.4423011972414D+00 0.4521316727988D+00 0.4621720053237D+00 0.4724263696067D+00 + 0.4828990126121D+00 0.4935942543268D+00 0.5045164886027D+00 0.5156701839924D+00 + 0.5270598845772D+00 0.5386902107861D+00 0.5505658602051D+00 0.5626916083760D+00 + 0.5750723095830D+00 0.5877128976270D+00 0.6006183865849D+00 0.6137938715547D+00 + 0.6272445293836D+00 0.6409756193782D+00 0.6549924839961D+00 0.6693005495166D+00 + 0.6839053266899D+00 0.6988124113627D+00 0.7140274850788D+00 0.7295563156538D+00 + 0.7454047577210D+00 0.7615787532478D+00 0.7780843320207D+00 0.7949276120969D+00 + 0.8121148002200D+00 0.8296521921997D+00 0.8475461732513D+00 0.8658032182945D+00 + 0.8844298922086D+00 0.9034328500427D+00 0.9228188371772D+00 0.9425946894360D+00 + 0.9627673331456D+00 0.9833437851400D+00 0.1004331152707D+01 0.1025736633476D+01 + 0.1047567515241D+01 0.1069831175720D+01 0.1092535082243D+01 0.1115686791375D+01 + 0.1139293948457D+01 0.1163364287075D+01 0.1187905628445D+01 0.1212925880722D+01 + 0.1238433038208D+01 0.1264435180485D+01 0.1290940471443D+01 0.1317957158220D+01 + 0.1345493570030D+01 0.1373558116898D+01 0.1402159288280D+01 0.1431305651569D+01 + 0.1461005850494D+01 0.1491268603389D+01 0.1522102701342D+01 0.1553517006218D+01 + 0.1585520448546D+01 0.1618122025271D+01 0.1651330797361D+01 0.1685155887276D+01 + 0.1719606476280D+01 0.1754691801602D+01 0.1790421153434D+01 0.1826803871767D+01 + 0.1863849343063D+01 0.1901566996742D+01 0.1939966301501D+01 0.1979056761446D+01 + 0.2018847912032D+01 0.2059349315815D+01 0.2100570557999D+01 0.2142521241790D+01 + 0.2185210983528D+01 0.2228649407614D+01 0.2272846141215D+01 0.2317810808747D+01 + 0.2363553026124D+01 0.2410082394775D+01 0.2457408495423D+01 0.2505540881617D+01 + 0.2554489073015D+01 0.2604262548407D+01 0.2654870738488D+01 0.2706323018355D+01 + 0.2758628699743D+01 0.2811797022979D+01 0.2865837148659D+01 0.2920758149043D+01 + 0.2976568999160D+01 0.3033278567615D+01 0.3090895607108D+01 0.3149428744640D+01 + 0.3208886471423D+01 0.3269277132479D+01 0.3330608915918D+01 0.3392889841912D+01 + 0.3456127751341D+01 0.3520330294118D+01 0.3585504917195D+01 0.3651658852234D+01 + 0.3718799102956D+01 0.3786932432154D+01 0.3856065348377D+01 0.3926204092282D+01 + 0.3997354622651D+01 0.4069522602076D+01 0.4142713382310D+01 0.4216931989288D+01 + 0.4292183107814D+01 0.4368471065927D+01 0.4445799818928D+01 0.4524172933100D+01 + 0.4603593569097D+01 0.4684064465021D+01 0.4765587919192D+01 0.4848165772611D+01 + 0.4931799391130D+01 0.5016489647323D+01 0.5102236902085D+01 0.5189040985952D+01 + 0.5276901180158D+01 0.5365816197444D+01 0.5455784162617D+01 0.5546802592894D+01 + 0.5638868378017D+01 0.5731977760181D+01 0.5826126313769D+01 0.5921308924927D+01 + 0.6017519770983D+01 0.6114752299744D+01 0.6212999208681D+01 0.6312252424025D+01 + 0.6412503079799D+01 0.6513741496818D+01 0.6615957161666D+01 0.6719138705689D+01 + 0.6823273884037D+01 0.6928349554769D+01 0.7034351658067D+01 0.7141265195588D+01 + 0.7249074209985D+01 0.7357761764637D+01 0.7467309923627D+01 0.7577699732003D+01 + 0.7688911196366D+01 0.7800923265826D+01 0.7913713813378D+01 0.8027259617727D+01 + 0.8141536345630D+01 0.8256518534789D+01 0.8372179577355D+01 0.8488491704090D+01 + 0.8605425969248D+01 0.8722952236222D+01 0.8841039164025D+01 0.8959654194655D+01 + 0.9078763541413D+01 0.9198332178230D+01 0.9318323830066D+01 0.9438700964464D+01 + 0.9559424784293D+01 0.9680455221780D+01 0.9801750933887D+01 0.9923269299099D+01 + 0.1004496641570D+02 0.1016679710163D+02 0.1028871489593D+02 0.1041067206198D+02 + 0.1053261959239D+02 0.1065450721594D+02 0.1077628340626D+02 0.1089789539267D+02 + 0.1101928917306D+02 0.1114040952889D+02 0.1126120004259D+02 0.1138160311709D+02 + 0.1150155999788D+02 0.1162101079752D+02 0.1173989452270D+02 0.1185814910389D+02 + 0.1197571142774D+02 0.1209251737221D+02 0.1220850184455D+02 0.1232359882222D+02 + 0.1243774139668D+02 0.1255086182033D+02 0.1266289155645D+02 0.1277376133233D+02 + 0.1288340119558D+02 0.1299174057364D+02 0.1309870833671D+02 0.1320423286383D+02 + 0.1330824211245D+02 0.1341066369131D+02 0.1351142493681D+02 0.1361045299271D+02 + 0.1370767489335D+02 0.1380301765027D+02 0.1389640834224D+02 0.1398777420882D+02 + 0.1407704274716D+02 0.1416414181234D+02 0.1424899972093D+02 0.1433154535791D+02 + 0.1441170828680D+02 0.1448941886294D+02 0.1456460834990D+02 0.1463720903887D+02 + 0.1470715437095D+02 0.1477437906225D+02 0.1483881923166D+02 0.1490041253114D+02 + 0.1495909827839D+02 0.1501481759178D+02 0.1506751352732D+02 0.1511713121747D+02 + 0.1516361801165D+02 0.1520692361818D+02 0.1524700024742D+02 0.1528380275595D+02 + 0.1531728879140D+02 0.1534741893776D+02 0.1537415686084D+02 0.1539746945363D+02 + 0.1541732698111D+02 0.1543370322439D+02 0.1544657562364D+02 0.1545592541956D+02 + 0.1546173779302D+02 0.1546400200242D+02 0.1546271151843D+02 0.1545786415570D+02 + 0.1544946220111D+02 0.1543751253809D+02 0.1542202676661D+02 0.1540302131844D+02 + 0.1538051756708D+02 0.1535454193202D+02 0.1532512597682D+02 0.1529230650045D+02 + 0.1525612562157D+02 0.1521663085508D+02 0.1517387518057D+02 0.1512791710213D+02 + 0.1507882069905D+02 0.1502665566690D+02 0.1497149734847D+02 0.1491342675424D+02 + 0.1485253057170D+02 0.1478890116319D+02 0.1472263655178D+02 0.1465384039476D+02 + 0.1458262194423D+02 0.1450909599456D+02 0.1443338281613D+02 0.1435560807511D+02 + 0.1427590273888D+02 0.1419440296685D+02 0.1411124998625D+02 0.1402658995277D+02 + 0.1394057379573D+02 0.1385335704764D+02 0.1376509965795D+02 0.1367596579089D+02 + 0.1358612360737D+02 0.1349574503081D+02 0.1340500549696D+02 0.1331408368786D+02 + 0.1322316124986D+02 0.1313242249599D+02 0.1304205409292D+02 0.1295224473262D+02 + 0.1286318478926D+02 0.1277506596148D+02 0.1268808090072D+02 0.1260242282594D+02 + 0.1251828512526D+02 0.1243586094535D+02 0.1235534276899D+02 0.1227692198172D+02 + 0.1220078842830D+02 0.1212712995982D+02 0.1205613197253D+02 0.1198797693913D+02 + 0.1192284393379D+02 0.1186090815186D+02 0.1180234042546D+02 0.1174730673615D+02 + 0.1169596772603D+02 0.1164847820834D+02 0.1160498667924D+02 0.1156563483188D+02 + 0.1153055707436D+02 0.1149988005301D+02 0.1147372218250D+02 0.1145219318434D+02 + 0.1143539363525D+02 0.1142341452711D+02 0.1141633683999D+02 0.1141423112993D+02 + 0.1141715713298D+02 0.1142516338731D+02 0.1143828687474D+02 0.1145655268355D+02 + 0.1147997369390D+02 0.1150855028761D+02 0.1154227008374D+02 0.1158110770138D+02 + 0.1162502455129D+02 0.1167396865756D+02 0.1172787451079D+02 0.1178666295396D+02 + 0.1185024110228D+02 0.1191850229803D+02 0.1199132610159D+02 0.1206857831946D+02 + 0.1215011107019D+02 0.1223576288907D+02 0.1232535887199D+02 0.1241871085933D+02 + 0.1251561765997D+02 0.1261586531600D+02 0.1271922740805D+02 0.1282546540151D+02 + 0.1293432903330D+02 0.1304555673916D+02 0.1315887612096D+02 0.1327400445348D+02 + 0.1339064923005D+02 0.1350850874625D+02 0.1362727272054D+02 0.1374662295087D+02 + 0.1386623400591D+02 0.1398577394943D+02 0.1410490509638D+02 0.1422328479880D+02 + 0.1434056625987D+02 0.1445639937388D+02 0.1457043159027D+02 0.1468230879914D+02 + 0.1479167623614D+02 0.1489817940404D+02 0.1500146500841D+02 0.1510118190471D+02 + 0.1519698205391D+02 0.1528852148379D+02 0.1537546125281D+02 0.1545746841364D+02 + 0.1553421697307D+02 0.1560538884523D+02 0.1567067479483D+02 0.1572977536717D+02 + 0.1578240180176D+02 0.1582827692612D+02 0.1586713602663D+02 0.1589872769311D+02 + 0.1592281463392D+02 0.1593917445849D+02 0.1594760042409D+02 0.1594790214378D+02 + 0.1593990625272D+02 0.1592345702984D+02 0.1589841697221D+02 0.1586466731948D+02 + 0.1582210852585D+02 0.1577066067732D+02 0.1571026385193D+02 0.1564087842120D+02 + 0.1556248529064D+02 0.1547508607802D+02 0.1537870322780D+02 0.1527338006062D+02 + 0.1515918075676D+02 0.1503619027308D+02 0.1490451419267D+02 0.1476427850715D+02 + 0.1461562933169D+02 0.1445873255288D+02 0.1429377341010D+02 0.1412095601137D+02 + 0.1394050278444D+02 0.1375265386499D+02 0.1355766642312D+02 0.1335581393054D+02 + 0.1314738537038D+02 0.1293268439219D+02 0.1271202841511D+02 0.1248574768189D+02 + 0.1225418426740D+02 0.1201769104500D+02 0.1177663061449D+02 0.1153137419578D+02 + 0.1128230049248D+02 0.1102979452961D+02 0.1077424647032D+02 0.1051605041603D+02 + 0.1025560319513D+02 0.9993303145083D+01 0.9729548892983D+01 0.9464738139829D+01 + 0.9199266453606D+01 0.8933526076402D+01 0.8667904750745D+01 0.8402784570301D+01 + 0.8138540859996D+01 0.7875541090527D+01 0.7614143832090D+01 0.7354697751983D+01 + 0.7097540660550D+01 0.6842998609696D+01 0.6591385047920D+01 0.6343000035605D+01 + 0.6098129523858D+01 0.5857044699944D+01 0.5620001401934D+01 0.5387239604814D+01 + 0.5158982979846D+01 0.4935438528573D+01 0.4716796292366D+01 0.4503229137976D+01 + 0.4294892619056D+01 0.4091924913152D+01 0.3894446833193D+01 0.3702561912045D+01 + 0.3516356558237D+01 0.3335900280537D+01 0.3161245978670D+01 0.2992430297065D+01 + 0.2829474038194D+01 0.2672382631762D+01 0.2521146655720D+01 0.2375742404881D+01 + 0.2236132502695D+01 0.2102266551639D+01 0.1974081817541D+01 0.1851503943111D+01 + 0.1734447685940D+01 0.1622817676200D+01 0.1516509189368D+01 0.1415408929331D+01 + 0.1319395817360D+01 0.1228341782531D+01 0.1142112549373D+01 0.1060568418635D+01 + 0.9835650373019D+00 0.9109541541726D+00 0.8425843575459D+00 0.7783017917968D+00 + 0.7179508498817D+00 0.6613748390683D+00 0.6084166174653D+00 0.5589191992012D+00 + 0.5127263263911D+00 0.4696830063190D+00 0.4296360125529D+00 0.3924343490009D+00 + 0.3579296762027D+00 0.3259766994340D+00 0.2964335184742D+00 0.2691619391536D+00 + 0.2440277470488D+00 0.2209009439361D+00 0.1996559478365D+00 0.1801717576938D+00 + 0.1623320839184D+00 0.1460254461990D+00 0.1311452401368D+00 0.1175897743854D+00 + 0.1052622800912D+00 0.9407089451527D-01 0.8392862078550D-01 0.7475326577690D-01 + 0.6646735814128D-01 0.5899804851766D-01 0.5227699394346D-01 0.4624022845899D-01 + 0.4082802185442D-01 0.3598472845105D-01 0.3165862773800D-01 0.2780175860384D-01 + 0.2436974881146D-01 0.2132164126495D-01 0.1861971851162D-01 0.1622932681167D-01 + 0.1411870099424D-01 0.1225879120292D-01 0.1062309251766D-01 0.9187478324824D-02 + 0.7930038194170D-02 0.6830920911119D-02 0.5872183206948D-02 0.5037644628161D-02 + 0.4312748890659D-02 0.3684431974697D-02 0.3140997133459D-02 0.2671996911721D-02 + 0.2268122201696D-02 0.1921098300832D-02 0.1623587881022D-02 0.1369100730387D-02 + 0.1151910087150D-02 0.9669753500508D-03 0.8098709208516D-03 0.6767209113939D-03 + 0.5641394300578D-03 0.4691761498429D-03 0.3892668522563D-03 0.3221886372696D-03 + 0.2660194893607D-03 0.2191018926233D-03 0.1800101936858D-03 0.1475214192933D-03 + 0.1205892654847D-03 0.9832098695562D-04 0.7995692809159D-04 0.6485245095860D-04 + 0.5246202996510D-04 0.4232529769133D-04 0.3405484129524D-04 0.2732556374477D-04 + 0.2186543872353D-04 0.1744750226736D-04 0.1388293789508D-04 0.1101512510421D-04 + 0.8714533541124D-05 0.6874356872787D-05 0.5406791351919D-05 0.4239874261002D-05 + 0.3314806839624D-05 0.2583694952262D-05 0.2007648657315D-05 0.1555189018603D-05 + 0.1200916989437D-05 0.9244050332163D-06 0.7092773630705D-06 0.5424493283134D-06 + 0.4135005904089D-06 0.3141603589352D-06 0.2378861413798D-06 0.1795202409555D-06 + 0.1350106538765D-06 0.1011851095086D-06 0.7556879909866D-07 0.5623788451178D-07 + 0.4170219815814D-07 0.3081166707088D-07 0.2268194336078D-07 0.1663552297805D-07 + 0.1215530542863D-07 0.8848107127806D-08 0.6416106613217D-08 0.4634585104140D-08 + 0.3334643304910D-08 0.2389835688104D-08 0.1705876062949D-08 0.1212741020005D-08 + 0.8586376559590D-09 0.6054146003728D-09 0.4250856698627D-09 0.2972075512731D-09 + 0.2069101606973D-09 0.1434236365115D-09 0.9898160505409D-10 0.6800804519963D-10 + 0.4651712787494D-10 0.3167310042586D-10 0.2146695649341D-10 0.1448079937139D-10 + 0.9722622861678D-11 0.6496070631129D-11 0.4319651023999D-11 0.2858591661735D-11 + 0.1882503214946D-11 0.1233598363270D-11 0.8043412065319D-12 0.5218060130221D-12 + 0.3367856512696D-12 0.2162455335843D-12 0.1381220475631D-12 0.8775552000331D-13 diff --git a/Test/Fe16_non_collinear/v_fe16.15 b/Test/Fe16_non_collinear/v_fe16.15 new file mode 100755 index 000000000..f3c4e967f --- /dev/null +++ b/Test/Fe16_non_collinear/v_fe16.15 @@ -0,0 +1,1542 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Fe. + 2 0.0000000000000D+00 + LSMS: xx z= 26. xvalws= 5.22926 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728400909D+02-0.5199725115555D+02-0.5199721790459D+02-0.5199718425142D+02 +-0.5199715019116D+02-0.5199711571889D+02-0.5199708082964D+02-0.5199704551834D+02 +-0.5199700977990D+02-0.5199697360915D+02-0.5199693700086D+02-0.5199689994973D+02 +-0.5199686245042D+02-0.5199682449748D+02-0.5199678608545D+02-0.5199674720876D+02 +-0.5199670786180D+02-0.5199666803887D+02-0.5199662773421D+02-0.5199658694201D+02 +-0.5199654565635D+02-0.5199650387127D+02-0.5199646158073D+02-0.5199641877860D+02 +-0.5199637545872D+02-0.5199633161480D+02-0.5199628724051D+02-0.5199624232942D+02 +-0.5199619687506D+02-0.5199615087084D+02-0.5199610431012D+02-0.5199605718616D+02 +-0.5199600949214D+02-0.5199596122116D+02-0.5199591236626D+02-0.5199586292036D+02 +-0.5199581287632D+02-0.5199576222688D+02-0.5199571096474D+02-0.5199565908248D+02 +-0.5199560657259D+02-0.5199555342748D+02-0.5199549963947D+02-0.5199544520078D+02 +-0.5199539010352D+02-0.5199533433975D+02-0.5199527790139D+02-0.5199522078028D+02 +-0.5199516296816D+02-0.5199510445666D+02-0.5199504523733D+02-0.5199498530160D+02 +-0.5199492464081D+02-0.5199486324617D+02-0.5199480110883D+02-0.5199473821977D+02 +-0.5199467456990D+02-0.5199461015004D+02-0.5199454495085D+02-0.5199447896290D+02 +-0.5199441217666D+02-0.5199434458246D+02-0.5199427617052D+02-0.5199420693096D+02 +-0.5199413685375D+02-0.5199406592876D+02-0.5199399414573D+02-0.5199392149428D+02 +-0.5199384796390D+02-0.5199377354396D+02-0.5199369822368D+02-0.5199362199218D+02 +-0.5199354483843D+02-0.5199346675127D+02-0.5199338771940D+02-0.5199330773139D+02 +-0.5199322677567D+02-0.5199314484053D+02-0.5199306191412D+02-0.5199297798443D+02 +-0.5199289303934D+02-0.5199280706654D+02-0.5199272005361D+02-0.5199263198797D+02 +-0.5199254285685D+02-0.5199245264737D+02-0.5199236134649D+02-0.5199226894099D+02 +-0.5199217541751D+02-0.5199208076251D+02-0.5199198496230D+02-0.5199188800302D+02 +-0.5199178987064D+02-0.5199169055096D+02-0.5199159002963D+02-0.5199148829207D+02 +-0.5199138532359D+02-0.5199128110928D+02-0.5199117563407D+02-0.5199106888269D+02 +-0.5199096083969D+02-0.5199085148944D+02-0.5199074081613D+02-0.5199062880373D+02 +-0.5199051543604D+02-0.5199040069664D+02-0.5199028456895D+02-0.5199016703615D+02 +-0.5199004808124D+02-0.5198992768700D+02-0.5198980583600D+02-0.5198968251063D+02 +-0.5198955769302D+02-0.5198943136512D+02-0.5198930350863D+02-0.5198917410506D+02 +-0.5198904313569D+02-0.5198891058155D+02-0.5198877642345D+02-0.5198864064200D+02 +-0.5198850321751D+02-0.5198836413012D+02-0.5198822335968D+02-0.5198808088582D+02 +-0.5198793668793D+02-0.5198779074512D+02-0.5198764303627D+02-0.5198749354000D+02 +-0.5198734223467D+02-0.5198718909837D+02-0.5198703410894D+02-0.5198687724393D+02 +-0.5198671848065D+02-0.5198655779610D+02-0.5198639516703D+02-0.5198623056988D+02 +-0.5198606398084D+02-0.5198589537577D+02-0.5198572473026D+02-0.5198555201962D+02 +-0.5198537721883D+02-0.5198520030257D+02-0.5198502124524D+02-0.5198484002091D+02 +-0.5198465660333D+02-0.5198447096595D+02-0.5198428308188D+02-0.5198409292391D+02 +-0.5198390046450D+02-0.5198370567579D+02-0.5198350852955D+02-0.5198330899725D+02 +-0.5198310704998D+02-0.5198290265850D+02-0.5198269579318D+02-0.5198248642408D+02 +-0.5198227452087D+02-0.5198206005285D+02-0.5198184298896D+02-0.5198162329776D+02 +-0.5198140094741D+02-0.5198117590571D+02-0.5198094814005D+02-0.5198071761744D+02 +-0.5198048430449D+02-0.5198024816738D+02-0.5198000917191D+02-0.5197976728344D+02 +-0.5197952246692D+02-0.5197927468690D+02-0.5197902390745D+02-0.5197877009224D+02 +-0.5197851320449D+02-0.5197825320698D+02-0.5197799006201D+02-0.5197772373146D+02 +-0.5197745417673D+02-0.5197718135875D+02-0.5197690523796D+02-0.5197662577437D+02 +-0.5197634292744D+02-0.5197605665620D+02-0.5197576691913D+02-0.5197547367423D+02 +-0.5197517687900D+02-0.5197487649041D+02-0.5197457246489D+02-0.5197426475838D+02 +-0.5197395332627D+02-0.5197363812338D+02-0.5197331910403D+02-0.5197299622195D+02 +-0.5197266943031D+02-0.5197233868173D+02-0.5197200392824D+02-0.5197166512128D+02 +-0.5197132221174D+02-0.5197097514984D+02-0.5197062388528D+02-0.5197026836709D+02 +-0.5196990854370D+02-0.5196954436291D+02-0.5196917577189D+02-0.5196880271716D+02 +-0.5196842514461D+02-0.5196804299945D+02-0.5196765622622D+02-0.5196726476881D+02 +-0.5196686857041D+02-0.5196646757354D+02-0.5196606171998D+02-0.5196565095085D+02 +-0.5196523520651D+02-0.5196481442664D+02-0.5196438855015D+02-0.5196395751522D+02 +-0.5196352125928D+02-0.5196307971901D+02-0.5196263283028D+02-0.5196218052823D+02 +-0.5196172274718D+02-0.5196125942066D+02-0.5196079048138D+02-0.5196031586126D+02 +-0.5195983549135D+02-0.5195934930191D+02-0.5195885722231D+02-0.5195835918107D+02 +-0.5195785510585D+02-0.5195734492343D+02-0.5195682855969D+02-0.5195630593961D+02 +-0.5195577698725D+02-0.5195524162577D+02-0.5195469977736D+02-0.5195415136330D+02 +-0.5195359630387D+02-0.5195303451841D+02-0.5195246592528D+02-0.5195189044181D+02 +-0.5195130798435D+02-0.5195071846824D+02-0.5195012180777D+02-0.5194951791619D+02 +-0.5194890670569D+02-0.5194828808741D+02-0.5194766197137D+02-0.5194702826653D+02 +-0.5194638688071D+02-0.5194573772064D+02-0.5194508069188D+02-0.5194441569885D+02 +-0.5194374264482D+02-0.5194306143187D+02-0.5194237196087D+02-0.5194167413149D+02 +-0.5194096784220D+02-0.5194025299021D+02-0.5193952947146D+02-0.5193879718066D+02 +-0.5193805601119D+02-0.5193730585519D+02-0.5193654660341D+02-0.5193577814533D+02 +-0.5193500036904D+02-0.5193421316129D+02-0.5193341640742D+02-0.5193260999141D+02 +-0.5193179379578D+02-0.5193096770164D+02-0.5193013158865D+02-0.5192928533501D+02 +-0.5192842881739D+02-0.5192756191098D+02-0.5192668448947D+02-0.5192579642497D+02 +-0.5192489758803D+02-0.5192398784765D+02-0.5192306707119D+02-0.5192213512442D+02 +-0.5192119187145D+02-0.5192023717474D+02-0.5191927089505D+02-0.5191829289146D+02 +-0.5191730302133D+02-0.5191630114025D+02-0.5191528710207D+02-0.5191426075883D+02 +-0.5191322196077D+02-0.5191217055632D+02-0.5191110639202D+02-0.5191002931255D+02 +-0.5190893916069D+02-0.5190783577729D+02-0.5190671900126D+02-0.5190558866954D+02 +-0.5190444461705D+02-0.5190328667673D+02-0.5190211467945D+02-0.5190092845399D+02 +-0.5189972782709D+02-0.5189851262330D+02-0.5189728266508D+02-0.5189603777267D+02 +-0.5189477776415D+02-0.5189350245533D+02-0.5189221165981D+02-0.5189090518885D+02 +-0.5188958285145D+02-0.5188824445423D+02-0.5188688980147D+02-0.5188551869503D+02 +-0.5188413093435D+02-0.5188272631641D+02-0.5188130463569D+02-0.5187986568418D+02 +-0.5187840925129D+02-0.5187693512386D+02-0.5187544308611D+02-0.5187393291962D+02 +-0.5187240440329D+02-0.5187085731330D+02-0.5186929142309D+02-0.5186770650332D+02 +-0.5186610232183D+02-0.5186447864362D+02-0.5186283523081D+02-0.5186117184259D+02 +-0.5185948823518D+02-0.5185778416183D+02-0.5185605937277D+02-0.5185431361514D+02 +-0.5185254663297D+02-0.5185075816718D+02-0.5184894795548D+02-0.5184711573237D+02 +-0.5184526122909D+02-0.5184338417356D+02-0.5184148429039D+02-0.5183956130079D+02 +-0.5183761492255D+02-0.5183564486998D+02-0.5183365085389D+02-0.5183163258155D+02 +-0.5182958975660D+02-0.5182752207907D+02-0.5182542924529D+02-0.5182331094785D+02 +-0.5182116687559D+02-0.5181899671350D+02-0.5181680014270D+02-0.5181457684041D+02 +-0.5181232647986D+02-0.5181004873028D+02-0.5180774325683D+02-0.5180540972054D+02 +-0.5180304777830D+02-0.5180065708277D+02-0.5179823728232D+02-0.5179578802103D+02 +-0.5179330893860D+02-0.5179079967027D+02-0.5178825984684D+02-0.5178568909453D+02 +-0.5178308703501D+02-0.5178045328526D+02-0.5177778745757D+02-0.5177508915948D+02 +-0.5177235799366D+02-0.5176959355795D+02-0.5176679544522D+02-0.5176396324334D+02 +-0.5176109653512D+02-0.5175819489823D+02-0.5175525790517D+02-0.5175228512318D+02 +-0.5174927611419D+02-0.5174623043474D+02-0.5174314763592D+02-0.5174002726332D+02 +-0.5173686885694D+02-0.5173367195115D+02-0.5173043607457D+02-0.5172716075006D+02 +-0.5172384549462D+02-0.5172048981932D+02-0.5171709322923D+02-0.5171365522335D+02 +-0.5171017529452D+02-0.5170665292940D+02-0.5170308760833D+02-0.5169947880525D+02 +-0.5169582598771D+02-0.5169212861671D+02-0.5168838614662D+02-0.5168459802518D+02 +-0.5168076369333D+02-0.5167688258518D+02-0.5167295412791D+02-0.5166897774168D+02 +-0.5166495283960D+02-0.5166087882755D+02-0.5165675510418D+02-0.5165258106080D+02 +-0.5164835608125D+02-0.5164407954186D+02-0.5163975081138D+02-0.5163536925080D+02 +-0.5163093421337D+02-0.5162644504442D+02-0.5162190108131D+02-0.5161730165335D+02 +-0.5161264608164D+02-0.5160793367906D+02-0.5160316375011D+02-0.5159833559084D+02 +-0.5159344848875D+02-0.5158850172268D+02-0.5158349456272D+02-0.5157842627009D+02 +-0.5157329609709D+02-0.5156810328692D+02-0.5156284707365D+02-0.5155752668206D+02 +-0.5155214132756D+02-0.5154669021608D+02-0.5154117254396D+02-0.5153558749786D+02 +-0.5152993425461D+02-0.5152421198113D+02-0.5151841983433D+02-0.5151255696093D+02 +-0.5150662249744D+02-0.5150061557002D+02-0.5149453529428D+02-0.5148838077528D+02 +-0.5148215110737D+02-0.5147584537403D+02-0.5146946264782D+02-0.5146300199022D+02 +-0.5145646245151D+02-0.5144984307067D+02-0.5144314287525D+02-0.5143636088122D+02 +-0.5142949609291D+02-0.5142254750281D+02-0.5141551409151D+02-0.5140839482753D+02 +-0.5140118866721D+02-0.5139389455459D+02-0.5138651142128D+02-0.5137903818632D+02 +-0.5137147375605D+02-0.5136381702401D+02-0.5135606687078D+02-0.5134822216388D+02 +-0.5134028175756D+02-0.5133224449278D+02-0.5132410919702D+02-0.5131587468413D+02 +-0.5130753975423D+02-0.5129910319357D+02-0.5129056377438D+02-0.5128192025477D+02 +-0.5127317137854D+02-0.5126431587514D+02-0.5125535245940D+02-0.5124627983153D+02 +-0.5123709667690D+02-0.5122780166596D+02-0.5121839345403D+02-0.5120887068125D+02 +-0.5119923197240D+02-0.5118947593678D+02-0.5117960116805D+02-0.5116960624416D+02 +-0.5115948972712D+02-0.5114925016296D+02-0.5113888608154D+02-0.5112839599644D+02 +-0.5111777840483D+02-0.5110703178733D+02-0.5109615460788D+02-0.5108514531363D+02 +-0.5107400233480D+02-0.5106272408452D+02-0.5105130895877D+02-0.5103975533619D+02 +-0.5102806157801D+02-0.5101622602790D+02-0.5100424701185D+02-0.5099212283803D+02 +-0.5097985179674D+02-0.5096743216021D+02-0.5095486218256D+02-0.5094214009961D+02 +-0.5092926412887D+02-0.5091623246932D+02-0.5090304330139D+02-0.5088969478681D+02 +-0.5087618506855D+02-0.5086251227064D+02-0.5084867449820D+02-0.5083466983722D+02 +-0.5082049635455D+02-0.5080615209778D+02-0.5079163509518D+02-0.5077694335558D+02 +-0.5076207486834D+02-0.5074702760324D+02-0.5073179951042D+02-0.5071638852033D+02 +-0.5070079254364D+02-0.5068500947122D+02-0.5066903717403D+02-0.5065287350315D+02 +-0.5063651628963D+02-0.5061996334457D+02-0.5060321245898D+02-0.5058626140382D+02 +-0.5056910792994D+02-0.5055174976809D+02-0.5053418462884D+02-0.5051641020267D+02 +-0.5049842415989D+02-0.5048022415067D+02-0.5046180780505D+02-0.5044317273295D+02 +-0.5042431652422D+02-0.5040523674861D+02-0.5038593095586D+02-0.5036639667573D+02 +-0.5034663141803D+02-0.5032663267268D+02-0.5030639790981D+02-0.5028592457977D+02 +-0.5026521011328D+02-0.5024425192145D+02-0.5022304739591D+02-0.5020159390892D+02 +-0.5017988881346D+02-0.5015792944334D+02-0.5013571311336D+02-0.5011323711944D+02 +-0.5009049873873D+02-0.5006749522980D+02-0.5004422383280D+02-0.5002068176959D+02 +-0.4999686624397D+02-0.4997277444186D+02-0.4994840353146D+02-0.4992375066350D+02 +-0.4989881297144D+02-0.4987358757171D+02-0.4984807156389D+02-0.4982226203106D+02 +-0.4979615603991D+02-0.4976975064117D+02-0.4974304286974D+02-0.4971602974502D+02 +-0.4968870827126D+02-0.4966107543776D+02-0.4963312821924D+02-0.4960486357616D+02 +-0.4957627845502D+02-0.4954736978871D+02-0.4951813449683D+02-0.4948856948612D+02 +-0.4945867165071D+02-0.4942843787257D+02-0.4939786502185D+02-0.4936694995729D+02 +-0.4933568952659D+02-0.4930408056681D+02-0.4927211990478D+02-0.4923980435752D+02 +-0.4920713073265D+02-0.4917409582880D+02-0.4914069643607D+02-0.4910692933642D+02 +-0.4907279130416D+02-0.4903827910633D+02-0.4900338950319D+02-0.4896811924867D+02 +-0.4893246509079D+02-0.4889642377211D+02-0.4885999203021D+02-0.4882316659813D+02 +-0.4878594420482D+02-0.4874832157556D+02-0.4871029543247D+02-0.4867186249491D+02 +-0.4863301947995D+02-0.4859376310277D+02-0.4855409007715D+02-0.4851399711583D+02 +-0.4847348093100D+02-0.4843253823466D+02-0.4839116573905D+02-0.4834936015704D+02 +-0.4830711820251D+02-0.4826443659074D+02-0.4822131203876D+02-0.4817774126566D+02 +-0.4813372099301D+02-0.4808924794511D+02-0.4804431884930D+02-0.4799893043625D+02 +-0.4795307944023D+02-0.4790676259938D+02-0.4785997665588D+02-0.4781271835619D+02 +-0.4776498445124D+02-0.4771677169657D+02-0.4766807685247D+02-0.4761889668409D+02 +-0.4756922796153D+02-0.4751906745988D+02-0.4746841195927D+02-0.4741725824487D+02 +-0.4736560310686D+02-0.4731344334036D+02-0.4726077574537D+02-0.4720759712663D+02 +-0.4715390429349D+02-0.4709969405976D+02-0.4704496324345D+02-0.4698970866656D+02 +-0.4693392715482D+02-0.4687761553742D+02-0.4682077064661D+02-0.4676338931742D+02 +-0.4670546838725D+02-0.4664700469545D+02-0.4658799508292D+02-0.4652843639162D+02 +-0.4646832546412D+02-0.4640765914308D+02-0.4634643427075D+02-0.4628464768840D+02 +-0.4622229623583D+02-0.4615937675077D+02-0.4609588606835D+02-0.4603182102046D+02 +-0.4596717843531D+02-0.4590195513672D+02-0.4583614794369D+02-0.4576975366979D+02 +-0.4570276912265D+02-0.4563519110351D+02-0.4556701640665D+02-0.4549824181908D+02 +-0.4542886412007D+02-0.4535888008084D+02-0.4528828646428D+02-0.4521708002473D+02 +-0.4514525750785D+02-0.4507281565054D+02-0.4499975118097D+02-0.4492606081870D+02 +-0.4485174127497D+02-0.4477678925295D+02-0.4470120144833D+02-0.4462497454985D+02 +-0.4454810524011D+02-0.4447059019649D+02-0.4439242609219D+02-0.4431360959758D+02 +-0.4423413738159D+02-0.4415400611337D+02-0.4407321246418D+02-0.4399175310947D+02 +-0.4390962473114D+02-0.4382682402010D+02-0.4374334767908D+02-0.4365919242563D+02 +-0.4357435499539D+02-0.4348883214570D+02-0.4340262065933D+02-0.4331571734857D+02 +-0.4322811905962D+02-0.4313982267710D+02-0.4305082512897D+02-0.4296112339160D+02 +-0.4287071449512D+02-0.4277959552900D+02-0.4268776364786D+02-0.4259521607738D+02 +-0.4250195012053D+02-0.4240796316384D+02-0.4231325268378D+02-0.4221781625326D+02 +-0.4212165154821D+02-0.4202475635403D+02-0.4192712857207D+02-0.4182876622603D+02 +-0.4172966746809D+02-0.4162983058491D+02-0.4152925400326D+02-0.4142793629535D+02 +-0.4132587618362D+02-0.4122307254514D+02-0.4111952441526D+02-0.4101523099069D+02 +-0.4091019163177D+02-0.4080440586392D+02-0.4069787337814D+02-0.4059059403052D+02 +-0.4048256784069D+02-0.4037379498919D+02-0.4026427581359D+02-0.4015401080347D+02 +-0.4004300059408D+02-0.3993124595881D+02-0.3981874780047D+02-0.3970550714118D+02 +-0.3959152511128D+02-0.3947680293704D+02-0.3936134192738D+02-0.3924514345974D+02 +-0.3912820896514D+02-0.3901053991273D+02-0.3889213779388D+02-0.3877300410616D+02 +-0.3865314033730D+02-0.3853254794941D+02-0.3841122836384D+02-0.3828918294671D+02 +-0.3816641299561D+02-0.3804291972752D+02-0.3791870426838D+02-0.3779376764439D+02 +-0.3766811077544D+02-0.3754173447071D+02-0.3741463942662D+02-0.3728682622747D+02 +-0.3715829534855D+02-0.3702904716206D+02-0.3689908194568D+02-0.3676839989389D+02 +-0.3663700113198D+02-0.3650488573242D+02-0.3637205373385D+02-0.3623850516215D+02 +-0.3610424005352D+02-0.3596925847947D+02-0.3583356057318D+02-0.3569714655716D+02 +-0.3556001677183D+02-0.3542217170480D+02-0.3528361202035D+02-0.3514433858906D+02 +-0.3500435251706D+02-0.3486365517474D+02-0.3472224822457D+02-0.3458013364781D+02 +-0.3443731376977D+02-0.3429379128348D+02-0.3414956927154D+02-0.3400465122587D+02 +-0.3385904106531D+02-0.3371274315081D+02-0.3356576229817D+02-0.3341810378823D+02 +-0.3326977337430D+02-0.3312077728689D+02-0.3297112223571D+02-0.3282081540879D+02 +-0.3266986446883D+02-0.3251827754673D+02-0.3236606323235D+02-0.3221323056253D+02 +-0.3205978900636D+02-0.3190574844798D+02-0.3175111916665D+02-0.3159591181450D+02 +-0.3144013739192D+02-0.3128380722060D+02-0.3112693291460D+02-0.3096952634939D+02 +-0.3081159962896D+02-0.3065316505139D+02-0.3049423507279D+02-0.3033482226994D+02 +-0.3017493930171D+02-0.3001459886954D+02-0.2985381367711D+02-0.2969259638940D+02 +-0.2953095959141D+02-0.2936891574677D+02-0.2920647715631D+02-0.2904365591713D+02 +-0.2888046388202D+02-0.2871691261992D+02-0.2855301337730D+02-0.2838877704096D+02 +-0.2822421410237D+02-0.2805933462405D+02-0.2789414820796D+02-0.2772866396645D+02 +-0.2756289049588D+02-0.2739683585338D+02-0.2723050753680D+02-0.2706391246838D+02 +-0.2689705698223D+02-0.2672994681603D+02-0.2656258710714D+02-0.2639498239345D+02 +-0.2622713661917D+02-0.2605905314574D+02-0.2589073476829D+02-0.2572218373759D+02 +-0.2555340178776D+02-0.2538439017000D+02-0.2521514969218D+02-0.2504568076457D+02 +-0.2487598345161D+02-0.2470605752972D+02-0.2453590255090D+02-0.2436551791213D+02 +-0.2419490293015D+02-0.2402405692122D+02-0.2385297928550D+02-0.2368166959536D+02 +-0.2351012768684D+02-0.2333835375355D+02-0.2316634844181D+02-0.2299411294593D+02 +-0.2282164910224D+02-0.2264895948042D+02-0.2247604747020D+02-0.2230291736187D+02 +-0.2212957441833D+02-0.2195602493665D+02-0.2178227629680D+02-0.2160833699531D+02 +-0.2143421666157D+02-0.2125992605447D+02-0.2108547703736D+02-0.2091088252957D+02 +-0.2073615643311D+02-0.2056131353347D+02-0.2038636937454D+02-0.2021134010787D+02 +-0.2003624231780D+02-0.1986109282464D+02-0.1968590846923D+02-0.1951070588338D+02 +-0.1933550125113D+02-0.1916031006739D+02-0.1898514690054D+02-0.1881002516654D+02 +-0.1863495692195D+02-0.1845995268332D+02-0.1828502127992D+02-0.1811016974578D+02 +-0.1793540325598D+02-0.1776072511080D+02-0.1758613676940D+02-0.1741163793327D+02 +-0.1723722667775D+02-0.1706289962834D+02-0.1688865217702D+02-0.1671447873257D+02 +-0.1654037299789D+02-0.1636632826691D+02-0.1619233773325D+02-0.1601839480315D+02 +-0.1584449340510D+02-0.1567062828984D+02-0.1549679531468D+02-0.1532299170720D+02 +-0.1514921630451D+02-0.1497546976480D+02-0.1480175474939D+02-0.1462807607400D+02 +-0.1445444082871D+02-0.1428085846710D+02-0.1410734086517D+02-0.1393390235146D+02 +-0.1376055970989D+02-0.1358733215727D+02-0.1341424129731D+02-0.1324131105355D+02 +-0.1306856758305D+02-0.1289603917318D+02-0.1272375612351D+02-0.1255175061484D+02 +-0.1238005656736D+02-0.1220870948967D+02-0.1203774632043D+02-0.1186720526422D+02 +-0.1169712562320D+02-0.1152754762583D+02-0.1135851225403D+02-0.1119006106993D+02 +-0.1102223604329D+02-0.1085507938069D+02-0.1068863335731D+02-0.1052294015218D+02 +-0.1035804168776D+02-0.1019397947446D+02-0.1003079446077D+02-0.9868526889628D+01 +-0.9707216161554D+01-0.9546900704939D+01-0.9387617854023D+01-0.9229403734858D+01 +-0.9072293159592D+01-0.8916319529363D+01-0.8761514745993D+01-0.8607909132693D+01 +-0.8455531363896D+01-0.8304408404305D+01-0.8154565457227D+01-0.8006025922166D+01 +-0.7858811361682D+01-0.7712941477416D+01-0.7568434095199D+01-0.7425305159081D+01 +-0.7283568734134D+01-0.7143237017788D+01-0.7004320359504D+01-0.6866827288485D+01 +-0.6730764549154D+01-0.6596137144079D+01-0.6462948384000D+01-0.6331199944618D+01 +-0.6200891929738D+01-0.6072022940407D+01-0.5944590149603D+01-0.5818589382077D+01 +-0.5694015198898D+01-0.5570860986265D+01-0.5449119048124D+01-0.5328780702141D+01 +-0.5209836378552D+01-0.5092275721431D+01-0.4976087691897D+01-0.4861260672787D+01 +-0.4747782574321D+01-0.4635640940271D+01-0.4524823054180D+01-0.4415316045125D+01 +-0.4307106992579D+01-0.4200183029885D+01-0.4094531445869D+01-0.3990139784139D+01 +-0.3886995939600D+01-0.3785088251726D+01-0.3684405594148D+01-0.3584937460106D+01 +-0.3486674043348D+01-0.3389606314047D+01-0.3293726089348D+01-0.3199026098161D+01 +-0.3105500039868D+01-0.3013142636618D+01-0.2921949678952D+01-0.2831918064533D+01 +-0.2743045829849D+01-0.2655332174788D+01-0.2568777480092D+01-0.2483383317815D+01 +-0.2399152454962D+01-0.2316088850658D+01-0.2234197647300D+01-0.2153485156272D+01 +-0.2073958838965D+01-0.1995627283965D+01-0.1918500181413D+01-0.1842588295670D+01 +-0.1767903437522D+01-0.1694458437274D+01-0.1622267120110D+01-0.1551344285168D+01 +-0.1481705689753D+01-0.1413368040087D+01-0.1346348989896D+01-0.1280667148051D+01 +-0.1216342096293D+01-0.1153394417906D+01-0.1091845737986D+01-0.1031718775725D+01 +-0.9730374088849D+00-0.9158267504133D+00-0.8601132368937D+00-0.8059247283301D+00 +-0.7532906185600D+00-0.7022419554295D+00-0.6528115697324D+00-0.6050342118170D+00 +-0.5589466947046D+00-0.5145880425354D+00-0.4719996431596D+00-0.4312254037239D+00 +-0.3923119081554D+00-0.3553085755132D+00-0.3202678182603D+00-0.2872451996103D+00 +-0.2562993012896D+00 + 0.0000000000000D+00 + 1012 0.5229258479779D+01 + 0.2150742905406D-04 0.2201934401975D-04 0.2254344131081D-04 0.2308001074793D-04 + 0.2362934904336D-04 0.2419175996469D-04 0.2476755450247D-04 0.2535705104185D-04 + 0.2596057553829D-04 0.2657846169737D-04 0.2721105115901D-04 0.2785869368592D-04 + 0.2852174735659D-04 0.2920057876285D-04 0.2989556321214D-04 0.3060708493450D-04 + 0.3133553729459D-04 0.3208132300862D-04 0.3284485436652D-04 0.3362655345933D-04 + 0.3442685241199D-04 0.3524619362168D-04 0.3608503000175D-04 0.3694382523153D-04 + 0.3782305401197D-04 0.3872320232740D-04 0.3964476771351D-04 0.4058825953159D-04 + 0.4155419924941D-04 0.4254312072866D-04 0.4355557051923D-04 0.4459210816046D-04 + 0.4565330648961D-04 0.4673975195749D-04 0.4785204495171D-04 0.4899080012754D-04 + 0.5015664674660D-04 0.5135022902361D-04 0.5257220648130D-04 0.5382325431382D-04 + 0.5510406375867D-04 0.5641534247751D-04 0.5775781494596D-04 0.5913222285265D-04 + 0.6053932550771D-04 0.6197990026094D-04 0.6345474292991D-04 0.6496466823815D-04 + 0.6651051026378D-04 0.6809312289875D-04 0.6971338031887D-04 0.7137217746513D-04 + 0.7307043053626D-04 0.7480907749308D-04 0.7658907857468D-04 0.7841141682692D-04 + 0.8027709864336D-04 0.8218715431905D-04 0.8414263861740D-04 0.8614463135050D-04 + 0.8819423797310D-04 0.9029259019072D-04 0.9244084658213D-04 0.9464019323656D-04 + 0.9689184440594D-04 0.9919704317265D-04 0.1015570621330D-03 0.1039732040969D-03 + 0.1064468028041D-03 0.1089792236573D-03 0.1115718644728D-03 0.1142261562483D-03 + 0.1169435639500D-03 0.1197255873171D-03 0.1225737616857D-03 0.1254896588328D-03 + 0.1284748878395D-03 0.1315310959746D-03 0.1346599695998D-03 0.1378632350954D-03 + 0.1411426598085D-03 0.1445000530233D-03 0.1479372669546D-03 0.1514561977641D-03 + 0.1550587866019D-03 0.1587470206711D-03 0.1625229343189D-03 0.1663886101524D-03 + 0.1703461801815D-03 0.1743978269887D-03 0.1785457849256D-03 0.1827923413391D-03 + 0.1871398378251D-03 0.1915906715131D-03 0.1961472963799D-03 0.2008122245952D-03 + 0.2055880278984D-03 0.2104773390081D-03 0.2154828530649D-03 0.2206073291079D-03 + 0.2258535915864D-03 0.2312245319072D-03 0.2367231100177D-03 0.2423523560273D-03 + 0.2481153718665D-03 0.2540153329849D-03 0.2600554900897D-03 0.2662391709247D-03 + 0.2725697820915D-03 0.2790508109132D-03 0.2856858273428D-03 0.2924784859153D-03 + 0.2994325277470D-03 0.3065517825810D-03 0.3138401708812D-03 0.3213017059753D-03 + 0.3289404962488D-03 0.3367607473897D-03 0.3447667646870D-03 0.3529629553823D-03 + 0.3613538310777D-03 0.3699440101989D-03 0.3787382205180D-03 0.3877413017338D-03 + 0.3969582081140D-03 0.4063940111991D-03 0.4160539025692D-03 0.4259431966769D-03 + 0.4360673337456D-03 0.4464318827368D-03 0.4570425443864D-03 0.4679051543124D-03 + 0.4790256861959D-03 0.4904102550358D-03 0.5020651204812D-03 0.5139966902408D-03 + 0.5262115235724D-03 0.5387163348549D-03 0.5515179972435D-03 0.5646235464104D-03 + 0.5780401843732D-03 0.5917752834137D-03 0.6058363900874D-03 0.6202312293275D-03 + 0.6349677086450D-03 0.6500539224267D-03 0.6654981563344D-03 0.6813088918062D-03 + 0.6974948106637D-03 0.7140647998269D-03 0.7310279561389D-03 0.7483935913040D-03 + 0.7661712369406D-03 0.7843706497523D-03 0.8030018168203D-03 0.8220749610184D-03 + 0.8416005465556D-03 0.8615892846469D-03 0.8820521393172D-03 0.9030003333406D-03 + 0.9244453543176D-03 0.9463989608946D-03 0.9688731891282D-03 0.9918803589975D-03 + 0.1015433081069D-02 0.1039544263315D-02 0.1064227118095D-02 0.1089495169290D-02 + 0.1115362259619D-02 0.1141842558105D-02 0.1168950567737D-02 0.1196701133289D-02 + 0.1225109449338D-02 0.1254191068456D-02 0.1283961909601D-02 0.1314438266696D-02 + 0.1345636817413D-02 0.1377574632157D-02 0.1410269183260D-02 0.1443738354387D-02 + 0.1478000450161D-02 0.1513074206015D-02 0.1548978798262D-02 0.1585733854409D-02 + 0.1623359463706D-02 0.1661876187936D-02 0.1701305072458D-02 0.1741667657505D-02 + 0.1782985989747D-02 0.1825282634108D-02 0.1868580685877D-02 0.1912903783076D-02 + 0.1958276119133D-02 0.2004722455835D-02 0.2052268136585D-02 0.2100939099962D-02 + 0.2150761893598D-02 0.2201763688371D-02 0.2253972292925D-02 0.2307416168524D-02 + 0.2362124444253D-02 0.2418126932561D-02 0.2475454145167D-02 0.2534137309329D-02 + 0.2594208384486D-02 0.2655700079287D-02 0.2718645869002D-02 0.2783080013344D-02 + 0.2849037574687D-02 0.2916554436715D-02 0.2985667323484D-02 0.3056413818931D-02 + 0.3128832386828D-02 0.3202962391187D-02 0.3278844117136D-02 0.3356518792272D-02 + 0.3436028608501D-02 0.3517416744371D-02 0.3600727387929D-02 0.3686005760082D-02 + 0.3773298138499D-02 0.3862651882061D-02 0.3954115455860D-02 0.4047738456768D-02 + 0.4143571639594D-02 0.4241666943825D-02 0.4342077520985D-02 0.4444857762604D-02 + 0.4550063328833D-02 0.4657751177697D-02 0.4767979595018D-02 0.4880808225009D-02 + 0.4996298101570D-02 0.5114511680279D-02 0.5235512871115D-02 0.5359367071918D-02 + 0.5486141202598D-02 0.5615903740128D-02 0.5748724754308D-02 0.5884675944352D-02 + 0.6023830676284D-02 0.6166264021183D-02 0.6312052794284D-02 0.6461275594959D-02 + 0.6614012847588D-02 0.6770346843357D-02 0.6930361782982D-02 0.7094143820394D-02 + 0.7261781107400D-02 0.7433363839342D-02 0.7608984301773D-02 0.7788736918176D-02 + 0.7972718298747D-02 0.8161027290261D-02 0.8353765027049D-02 0.8551034983111D-02 + 0.8752943025377D-02 0.8959597468160D-02 0.9171109128811D-02 0.9387591384603D-02 + 0.9609160230877D-02 0.9835934340477D-02 0.1006803512449D-01 0.1030558679431D-01 + 0.1054871642512D-01 0.1079755402073D-01 0.1105223257982D-01 0.1131288816368D-01 + 0.1157965996544D-01 0.1185269038080D-01 0.1213212508026D-01 0.1241811308303D-01 + 0.1271080683248D-01 0.1301036227325D-01 0.1331693893004D-01 0.1363069998813D-01 + 0.1395181237567D-01 0.1428044684765D-01 0.1461677807184D-01 0.1496098471648D-01 + 0.1531324953990D-01 0.1567375948211D-01 0.1604270575828D-01 0.1642028395434D-01 + 0.1680669412453D-01 0.1720214089116D-01 0.1760683354637D-01 0.1802098615621D-01 + 0.1844481766683D-01 0.1887855201303D-01 0.1932241822902D-01 0.1977665056168D-01 + 0.2024148858606D-01 0.2071717732349D-01 0.2120396736203D-01 0.2170211497964D-01 + 0.2221188226980D-01 0.2273353726988D-01 0.2326735409215D-01 0.2381361305754D-01 + 0.2437260083229D-01 0.2494461056731D-01 0.2552994204062D-01 0.2612890180262D-01 + 0.2674180332442D-01 0.2736896714935D-01 0.2801072104743D-01 0.2866740017320D-01 + 0.2933934722669D-01 0.3002691261781D-01 0.3073045463399D-01 0.3145033961141D-01 + 0.3218694210958D-01 0.3294064508962D-01 0.3371184009606D-01 0.3450092744243D-01 + 0.3530831640054D-01 0.3613442539362D-01 0.3697968219334D-01 0.3784452412086D-01 + 0.3872939825181D-01 0.3963476162544D-01 0.4056108145796D-01 0.4150883536008D-01 + 0.4247851155891D-01 0.4347060912422D-01 0.4448563819924D-01 0.4552412023590D-01 + 0.4658658823475D-01 0.4767358698962D-01 0.4878567333696D-01 0.4992341641008D-01 + 0.5108739789835D-01 0.5227821231135D-01 0.5349646724813D-01 0.5474278367169D-01 + 0.5601779618862D-01 0.5732215333417D-01 0.5865651786266D-01 0.6002156704340D-01 + 0.6141799296226D-01 0.6284650282880D-01 0.6430781928923D-01 0.6580268074515D-01 + 0.6733184167825D-01 0.6889607298100D-01 0.7049616229337D-01 0.7213291434581D-01 + 0.7380715130845D-01 0.7551971314661D-01 0.7727145798277D-01 0.7906326246509D-01 + 0.8089602214242D-01 0.8277065184608D-01 0.8468808607842D-01 0.8664927940812D-01 + 0.8865520687255D-01 0.9070686438707D-01 0.9280526916144D-01 0.9495146012343D-01 + 0.9714649834967D-01 0.9939146750384D-01 0.1016874742823D+00 0.1040356488672D+00 + 0.1064371453872D+00 0.1088931423856D+00 0.1114048432967D+00 0.1139734769295D+00 + 0.1166002979593D+00 0.1192865874273D+00 0.1220336532487D+00 0.1248428307276D+00 + 0.1277154830815D+00 0.1306530019730D+00 0.1336568080498D+00 0.1367283514936D+00 + 0.1398691125766D+00 0.1430806022269D+00 0.1463643626021D+00 0.1497219676713D+00 + 0.1531550238057D+00 0.1566651703780D+00 0.1602540803695D+00 0.1639234609870D+00 + 0.1676750542871D+00 0.1715106378098D+00 0.1754320252209D+00 0.1794410669619D+00 + 0.1835396509100D+00 0.1877297030455D+00 0.1920131881282D+00 0.1963921103827D+00 + 0.2008685141914D+00 0.2054444847966D+00 0.2101221490109D+00 0.2149036759359D+00 + 0.2197912776889D+00 0.2247872101386D+00 0.2298937736476D+00 0.2351133138248D+00 + 0.2404482222837D+00 0.2459009374100D+00 0.2514739451362D+00 0.2571697797240D+00 + 0.2629910245536D+00 0.2689403129212D+00 0.2750203288421D+00 0.2812338078623D+00 + 0.2875835378751D+00 0.2940723599454D+00 0.3007031691395D+00 0.3074789153608D+00 + 0.3144026041916D+00 0.3214772977396D+00 0.3287061154899D+00 0.3360922351618D+00 + 0.3436388935694D+00 0.3513493874868D+00 0.3592270745164D+00 0.3672753739607D+00 + 0.3754977676972D+00 0.3838978010545D+00 0.3924790836915D+00 0.4012452904770D+00 + 0.4102001623706D+00 0.4193475073036D+00 0.4286912010595D+00 0.4382351881538D+00 + 0.4479834827120D+00 0.4579401693452D+00 0.4681094040228D+00 0.4784954149418D+00 + 0.4891025033910D+00 0.4999350446102D+00 0.5109974886435D+00 0.5222943611853D+00 + 0.5338302644183D+00 0.5456098778426D+00 0.5576379590956D+00 0.5699193447601D+00 + 0.5824589511607D+00 0.5952617751475D+00 0.6083328948654D+00 0.6216774705074D+00 + 0.6353007450521D+00 0.6492080449824D+00 0.6634047809857D+00 0.6778964486325D+00 + 0.6926886290333D+00 0.7077869894721D+00 0.7231972840138D+00 0.7389253540860D+00 + 0.7549771290311D+00 0.7713586266289D+00 0.7880759535873D+00 0.8051353059985D+00 + 0.8225429697604D+00 0.8403053209599D+00 0.8584288262158D+00 0.8769200429817D+00 + 0.8957856198031D+00 0.9150322965294D+00 0.9346669044774D+00 0.9546963665439D+00 + 0.9751276972649D+00 0.9959680028197D+00 0.1017224480976D+01 0.1038904420974D+01 + 0.1061015203349D+01 0.1083564299686D+01 0.1106559272300D+01 0.1130007773859D+01 + 0.1153917546912D+01 0.1178296423354D+01 0.1203152323804D+01 0.1228493256899D+01 + 0.1254327318495D+01 0.1280662690787D+01 0.1307507641324D+01 0.1334870521934D+01 + 0.1362759767535D+01 0.1391183894856D+01 0.1420151501035D+01 0.1449671262109D+01 + 0.1479751931386D+01 0.1510402337698D+01 0.1541631383520D+01 0.1573448042969D+01 + 0.1605861359662D+01 0.1638880444440D+01 0.1672514472946D+01 0.1706772683055D+01 + 0.1741664372155D+01 0.1777198894269D+01 0.1813385657016D+01 0.1850234118409D+01 + 0.1887753783475D+01 0.1925954200705D+01 0.1964844958324D+01 0.2004435680370D+01 + 0.2044736022586D+01 0.2085755668115D+01 0.2127504322996D+01 0.2169991711448D+01 + 0.2213227570952D+01 0.2257221647108D+01 0.2301983688271D+01 0.2347523439972D+01 + 0.2393850639086D+01 0.2440975007782D+01 0.2488906247220D+01 0.2537654031002D+01 + 0.2587227998372D+01 0.2637637747157D+01 0.2688892826442D+01 0.2741002728983D+01 + 0.2793976883341D+01 0.2847824645743D+01 0.2902555291652D+01 0.2958178007063D+01 + 0.3014701879494D+01 0.3072135888684D+01 0.3130488897001D+01 0.3189769639525D+01 + 0.3249986713841D+01 0.3311148569513D+01 0.3373263497233D+01 0.3436339617667D+01 + 0.3500384869964D+01 0.3565406999951D+01 0.3631413547991D+01 0.3698411836514D+01 + 0.3766408957221D+01 0.3835411757947D+01 0.3905426829193D+01 0.3976460490322D+01 + 0.4048518775419D+01 0.4121607418815D+01 0.4195731840277D+01 0.4270897129857D+01 + 0.4347108032420D+01 0.4424368931831D+01 0.4502683834816D+01 0.4582056354503D+01 + 0.4662489693636D+01 0.4743986627475D+01 0.4826549486387D+01 0.4910180138127D+01 + 0.4994879969825D+01 0.5080649869681D+01 0.5167490208373D+01 0.5255400820202D+01 + 0.5344380983962D+01 0.5434429403565D+01 0.5525544188426D+01 0.5617722833617D+01 + 0.5710962199815D+01 0.5805258493041D+01 0.5900607244231D+01 0.5997003288635D+01 + 0.6094440745069D+01 0.6192912995049D+01 0.6292412661814D+01 0.6392931589269D+01 + 0.6494460820874D+01 0.6596990578488D+01 0.6700510241224D+01 0.6805008324307D+01 + 0.6910472457995D+01 0.7016889366579D+01 0.7124244847491D+01 0.7232523750568D+01 + 0.7341709957494D+01 0.7451786361463D+01 0.7562734847107D+01 0.7674536270712D+01 + 0.7787170440791D+01 0.7900616099026D+01 0.8014850901658D+01 0.8129851401340D+01 + 0.8245593029526D+01 0.8362050079436D+01 0.8479195689649D+01 0.8597001828383D+01 + 0.8715439278509D+01 0.8834477623371D+01 0.8954085233454D+01 0.9074229253973D+01 + 0.9194875593440D+01 0.9315988913276D+01 0.9437532618530D+01 0.9559468849772D+01 + 0.9681758476237D+01 0.9804361090277D+01 0.9927235003199D+01 0.1005033724256D+02 + 0.1017362355101D+02 0.1029704838669D+02 0.1042056492540D+02 0.1054412506444D+02 + 0.1066767942831D+02 0.1079117737637D+02 0.1091456701244D+02 0.1103779519646D+02 + 0.1116080755839D+02 0.1128354851420D+02 0.1140596128432D+02 0.1152798791434D+02 + 0.1164956929827D+02 0.1177064520433D+02 0.1189115430327D+02 0.1201103419951D+02 + 0.1213022146500D+02 0.1224865167586D+02 0.1236625945201D+02 0.1248297849976D+02 + 0.1259874165744D+02 0.1271348094411D+02 0.1282712761148D+02 0.1293961219902D+02 + 0.1305086459240D+02 0.1316081408518D+02 0.1326938944391D+02 0.1337651897664D+02 + 0.1348213060491D+02 0.1358615193909D+02 0.1368851035736D+02 0.1378913308811D+02 + 0.1388794729589D+02 0.1398488017086D+02 0.1407985902179D+02 0.1417281137257D+02 + 0.1426366506212D+02 0.1435234834789D+02 0.1443879001264D+02 0.1452291947466D+02 + 0.1460466690129D+02 0.1468396332564D+02 0.1476074076649D+02 0.1483493235126D+02 + 0.1490647244192D+02 0.1497529676373D+02 0.1504134253675D+02 0.1510454860984D+02 + 0.1516485559720D+02 0.1522220601698D+02 0.1527654443219D+02 0.1532781759325D+02 + 0.1537597458241D+02 0.1542096695946D+02 0.1546274890874D+02 0.1550127738702D+02 + 0.1553651227211D+02 0.1556841651189D+02 0.1559695627334D+02 0.1562210109145D+02 + 0.1564382401753D+02 0.1566210176664D+02 0.1567691486377D+02 0.1568824778841D+02 + 0.1569608911712D+02 0.1570043166360D+02 0.1570127261607D+02 0.1569861367129D+02 + 0.1569246116496D+02 0.1568282619787D+02 0.1566972475757D+02 0.1565317783486D+02 + 0.1563321153475D+02 0.1560985718135D+02 0.1558315141624D+02 0.1555313628970D+02 + 0.1551985934445D+02 0.1548337369123D+02 0.1544373807583D+02 0.1540101693692D+02 + 0.1535528045436D+02 0.1530660458716D+02 0.1525507110098D+02 0.1520076758423D+02 + 0.1514378745267D+02 0.1508422994170D+02 0.1502220008605D+02 0.1495780868635D+02 + 0.1489117226206D+02 0.1482241299046D+02 0.1475165863115D+02 0.1467904243575D+02 + 0.1460470304238D+02 0.1452878435463D+02 0.1445143540465D+02 0.1437281020013D+02 + 0.1429306755483D+02 0.1421237090260D+02 0.1413088809452D+02 0.1404879117925D+02 + 0.1396625616625D+02 0.1388346277207D+02 0.1380059414952D+02 0.1371783659988D+02 + 0.1363537926825D+02 0.1355341382212D+02 0.1347213411351D+02 0.1339173582480D+02 + 0.1331241609871D+02 0.1323437315279D+02 0.1315780587881D+02 0.1308291342766D+02 + 0.1300989478035D+02 0.1293894830568D+02 0.1287027130535D+02 0.1280405954732D+02 + 0.1274050678825D+02 0.1267980428593D+02 0.1262214030269D+02 0.1256769960087D+02 + 0.1251666293145D+02 0.1246920651702D+02 0.1242550153038D+02 0.1238571356999D+02 + 0.1235000213372D+02 0.1231852009235D+02 0.1229141316414D+02 0.1226881939222D+02 + 0.1225086862623D+02 0.1223768200985D+02 0.1222937147599D+02 0.1222603925117D+02 + 0.1222777737106D+02 0.1223466720868D+02 0.1224677901729D+02 0.1226417148958D+02 + 0.1228689133517D+02 0.1231497287802D+02 0.1234843767581D+02 0.1238729416297D+02 + 0.1243153731911D+02 0.1248114836487D+02 0.1253609448665D+02 0.1259632859227D+02 + 0.1266178909890D+02 0.1273239975523D+02 0.1280806949923D+02 0.1288869235315D+02 + 0.1297414735711D+02 0.1306429854274D+02 0.1315899494816D+02 0.1325807067533D+02 + 0.1336134499111D+02 0.1346862247282D+02 0.1357969319917D+02 0.1369433298744D+02 + 0.1381230367740D+02 0.1393335346243D+02 0.1405721726828D+02 0.1418361717951D+02 + 0.1431226291376D+02 0.1444285234362D+02 0.1457507206581D+02 0.1470859801733D+02 + 0.1484309613763D+02 0.1497822307639D+02 0.1511362694548D+02 0.1524894811426D+02 + 0.1538382004666D+02 0.1551787017849D+02 0.1565072083339D+02 0.1578199017530D+02 + 0.1591129319546D+02 0.1603824273170D+02 0.1616245051740D+02 0.1628352825765D+02 + 0.1640108872963D+02 0.1651474690448D+02 0.1662412108723D+02 0.1672883407174D+02 + 0.1682851430716D+02 0.1692279707220D+02 0.1701132565381D+02 0.1709375252614D+02 + 0.1716974052608D+02 0.1723896402125D+02 0.1730111006644D+02 0.1735587954416D+02 + 0.1740298828530D+02 0.1744216816538D+02 0.1747316817225D+02 0.1749575544089D+02 + 0.1750971625093D+02 0.1751485698260D+02 0.1751100502688D+02 0.1749800964559D+02 + 0.1747574277733D+02 0.1744409978499D+02 0.1740300014123D+02 0.1735238804766D+02 + 0.1729223298439D+02 0.1722253018618D+02 0.1714330104180D+02 0.1705459341368D+02 + 0.1695648187457D+02 0.1684906785873D+02 0.1673247972505D+02 0.1660687272995D+02 + 0.1647242890818D+02 0.1632935685981D+02 0.1617789144222D+02 0.1601829336618D+02 + 0.1585084869528D+02 0.1567586824865D+02 0.1549368690699D+02 0.1530466282265D+02 + 0.1510917653451D+02 0.1490762998916D+02 0.1470044547022D+02 0.1448806443791D+02 + 0.1427094628160D+02 0.1404956698852D+02 0.1382441773199D+02 0.1359600338336D+02 + 0.1336484095192D+02 0.1313145795774D+02 0.1289639074258D+02 0.1266018272468D+02 + 0.1242338260337D+02 0.1218654252002D+02 0.1195021618209D+02 0.1171495695744D+02 + 0.1148131594627D+02 0.1124984003849D+02 0.1102106996440D+02 0.1079553834688D+02 + 0.1057376776347D+02 0.1035626882667D+02 0.1014353829125D+02 0.9936057196884D+01 + 0.9734289054994D+01 0.9538678088120D+01 0.9349647530399D+01 0.9167597997384D+01 + 0.8992905933301D+01 0.8825922143594D+01 0.8666970420224D+01 0.8516346266999D+01 + 0.8374315731611D+01 0.8241114350747D+01 0.8116946214096D+01 0.8001983152570D+01 + 0.7896364055459D+01 0.7800194320670D+01 0.7713545441561D+01 0.7636454733225D+01 + 0.7568925200401D+01 0.7510925548528D+01 0.7462390338698D+01 0.7423220286625D+01 + 0.7393282704950D+01 0.7372412087556D+01 0.7360410833787D+01 0.7357050109802D+01 + 0.7362070843542D+01 0.7375184849138D+01 0.7396076075866D+01 0.7424401976120D+01 + 0.7459794986211D+01 0.7501864113185D+01 0.7550196620265D+01 0.7604359802945D+01 + 0.7663902847256D+01 0.7728358761219D+01 0.7797246370063D+01 0.7870072365405D+01 + 0.7946333398216D+01 0.8025518205140D+01 0.8107109757504D+01 0.8190587422172D+01 + 0.8275429123337D+01 0.8361113494303D+01 0.8447122008353D+01 0.8532941077928D+01 + 0.8618064111536D+01 0.8701993518075D+01 0.8784242648578D+01 0.8864337665829D+01 + 0.8941819332731D+01 0.9016244710878D+01 0.9087188761372D+01 0.9154245840560D+01 + 0.9217031084099D+01 0.9275181673474D+01 0.9328357979881D+01 0.9376244581215D+01 + 0.9418551148709D+01 0.9455013200639D+01 0.9485392721360D+01 0.9509478644797D+01 + 0.9527087202359D+01 0.9538062136102D+01 0.9542274778747D+01 0.9539624002998D+01 + 0.9530036043300D+01 0.9513464193959D+01 0.9489888388159D+01 0.9459314663078D+01 + 0.9421774516843D+01 0.9377324163609D+01 0.9326043693467D+01 0.9268036144314D+01 + 0.9203426493115D+01 0.9132360574297D+01 0.9055003933175D+01 0.8971540622481D+01 + 0.8882171950151D+01 0.8787115186520D+01 0.8686602239071D+01 0.8580878302773D+01 + 0.8470200493895D+01 0.8354836475027D+01 0.8235063078754D+01 0.8111164937189D+01 + 0.7983433124252D+01 0.7852163817216D+01 0.7717656983696D+01 0.7580215099831D+01 + 0.7440141905014D+01 0.7297741198086D+01 0.7153315679440D+01 0.7007165843079D+01 + 0.6859588922166D+01 0.6710877891167D+01 0.6561320527250D+01 0.6411198533128D+01 + 0.6260786723101D+01 0.6110352273646D+01 0.5960154039458D+01 0.5810441935471D+01 + 0.5661456384987D+01 0.5513427833700D+01 0.5366576329042D+01 0.5221111163955D+01 + 0.5077230583918D+01 0.4935121555751D+01 0.4794959596475D+01 0.4656908660288D+01 + 0.4521121081498D+01 0.4387737571052D+01 0.4256887264186D+01 0.4128687816522D+01 + 0.4003245545873D+01 0.3880655616880D+01 0.3761002265561D+01 0.3644359060777D+01 + 0.3530789199588D+01 0.3420345833472D+01 0.3313072422343D+01 0.3209003113371D+01 + 0.3108163141592D+01 0.3010569249384D+01 0.2916230121919D+01 0.2825146835796D+01 + 0.2737313318133D+01 0.2652716813508D+01 0.2571338356232D+01 0.2493153245580D+01 + 0.2418131521695D+01 0.2346238440047D+01 0.2277434942461D+01 0.2211678122838D+01 + 0.2148921685899D+01 0.2089116397376D+01 0.2032210524266D+01 0.1978150263893D+01 + 0.1926880160684D+01 0.1878343509721D+01 0.1832482746269D+01 0.1789239820638D+01 + 0.1748556557871D+01 0.1710375001879D+01 0.1674637743804D+01 0.1641288234472D+01 + 0.1610271080956D+01 0.1581532327338D+01 0.1555019719890D+01 0.1530682956958D+01 + 0.1508473923914D+01 0.1488346913611D+01 0.1470258832820D+01 0.1454169395155D+01 + 0.1440041301042D+01 0.1427840405245D+01 0.1417535872504D+01 0.1409100321753D+01 + 0.1402509959377D+01 0.1397744701874D+01 0.1394788288181D+01 0.1393628381826D+01 + 0.1394256662892D+01 0.1396668909610D+01 0.1400865069190D+01 0.1406849317222D+01 + 0.1414629369614D+01 0.1424336942263D+01 0.1436096575202D+01 0.1449912447024D+01 + 0.1465794674727D+01 0.1483759333931D+01 0.1503828494539D+01 0.1526030271798D+01 + 0.1550398892649D+01 0.1576974777196D+01 0.1605804635055D+01 0.1636941576215D+01 + 7 1012 + 1 0 -1 -511.89194 + 2 0 -1 -58.90181 + 2 1 1 -50.68932 + 2 1 -2 -49.77537 + 3 0 -1 -5.73317 + 3 1 1 -3.34334 + 3 1 -2 -3.22919 + 0.2122975645015D-04 0.2173507709867D-04 0.2225242316243D-04 0.2278208072829D-04 + 0.2332434268594D-04 0.2387950888954D-04 0.2444788632325D-04 0.2502978927059D-04 + 0.2562553948791D-04 0.2623546638192D-04 0.2685990719144D-04 0.2749920717353D-04 + 0.2815371979393D-04 0.2882380692207D-04 0.2950983903075D-04 0.3021219540050D-04 + 0.3093126432877D-04 0.3166744334418D-04 0.3242113942573D-04 0.3319276922733D-04 + 0.3398275930755D-04 0.3479154636487D-04 0.3561957747857D-04 0.3646731035519D-04 + 0.3733521358096D-04 0.3822376688016D-04 0.3913346137963D-04 0.4006479987955D-04 + 0.4101829713060D-04 0.4199448011777D-04 0.4299388835081D-04 0.4401707416166D-04 + 0.4506460300883D-04 0.4613705378910D-04 0.4723501915650D-04 0.4835910584899D-04 + 0.4950993502270D-04 0.5068814259429D-04 0.5189437959126D-04 0.5312931251066D-04 + 0.5439362368626D-04 0.5568801166444D-04 0.5701319158897D-04 0.5836989559491D-04 + 0.5975887321186D-04 0.6118089177673D-04 0.6263673685632D-04 0.6412721267990D-04 + 0.6565314258201D-04 0.6721536945580D-04 0.6881475621705D-04 0.7045218627922D-04 + 0.7212856403973D-04 0.7384481537777D-04 0.7560188816385D-04 0.7740075278149D-04 + 0.7924240266119D-04 0.8112785482706D-04 0.8305815045642D-04 0.8503435545263D-04 + 0.8705756103141D-04 0.8912888432116D-04 0.9124946897738D-04 0.9342048581165D-04 + 0.9564313343555D-04 0.9791863891974D-04 0.1002482584687D-03 0.1026332781112D-03 + 0.1050750144077D-03 0.1075748151735D-03 0.1101340602203D-03 0.1127541621137D-03 + 0.1154365669501D-03 0.1181827551510D-03 0.1209942422769D-03 0.1238725798590D-03 + 0.1268193562527D-03 0.1298361975089D-03 0.1329247682680D-03 0.1360867726735D-03 + 0.1393239553083D-03 0.1426381021518D-03 0.1460310415612D-03 0.1495046452749D-03 + 0.1530608294397D-03 0.1567015556625D-03 0.1604288320871D-03 0.1642447144955D-03 + 0.1681513074364D-03 0.1721507653792D-03 0.1762452938963D-03 0.1804371508722D-03 + 0.1847286477421D-03 0.1891221507592D-03 0.1936200822920D-03 0.1982249221522D-03 + 0.2029392089542D-03 0.2077655415060D-03 0.2127065802334D-03 0.2177650486382D-03 + 0.2229437347894D-03 0.2282454928513D-03 0.2336732446459D-03 0.2392299812538D-03 + 0.2449187646513D-03 0.2507427293871D-03 0.2567050842979D-03 0.2628091142650D-03 + 0.2690581820118D-03 0.2754557299435D-03 0.2820052820308D-03 0.2887104457371D-03 + 0.2955749139921D-03 0.3026024672103D-03 0.3097969753590D-03 0.3171624000731D-03 + 0.3247027968207D-03 0.3324223171196D-03 0.3403252108055D-03 0.3484158283536D-03 + 0.3566986232552D-03 0.3651781544500D-03 0.3738590888149D-03 0.3827462037126D-03 + 0.3918443895988D-03 0.4011586526914D-03 0.4106941177020D-03 0.4204560306321D-03 + 0.4304497616342D-03 0.4406808079408D-03 0.4511547968612D-03 0.4618774888502D-03 + 0.4728547806468D-03 0.4840927084883D-03 0.4955974513988D-03 0.5073753345551D-03 + 0.5194328327314D-03 0.5317765738249D-03 0.5444133424641D-03 0.5573500837015D-03 + 0.5705939067925D-03 0.5841520890639D-03 0.5980320798714D-03 0.6122415046513D-03 + 0.6267881690659D-03 0.6416800632466D-03 0.6569253661363D-03 0.6725324499326D-03 + 0.6885098846360D-03 0.7048664427037D-03 0.7216111038125D-03 0.7387530597330D-03 + 0.7563017193176D-03 0.7742667136049D-03 0.7926579010441D-03 0.8114853728404D-03 + 0.8307594584254D-03 0.8504907310562D-03 0.8706900135433D-03 0.8913683841142D-03 + 0.9125371824119D-03 0.9342080156346D-03 0.9563927648179D-03 0.9791035912634D-03 + 0.1002352943117D-02 0.1026153562102D-02 0.1050518490405D-02 0.1075461077728D-02 + 0.1100994988496D-02 0.1127134209246D-02 0.1153893056171D-02 0.1181286182852D-02 + 0.1209328588167D-02 0.1238035624379D-02 0.1267423005415D-02 0.1297506815344D-02 + 0.1328303517037D-02 0.1359829961041D-02 0.1392103394654D-02 0.1425141471212D-02 + 0.1458962259585D-02 0.1493584253904D-02 0.1529026383504D-02 0.1565308023106D-02 + 0.1602449003221D-02 0.1640469620811D-02 0.1679390650189D-02 0.1719233354165D-02 + 0.1760019495464D-02 0.1801771348394D-02 0.1844511710794D-02 0.1888263916250D-02 + 0.1933051846599D-02 0.1978899944720D-02 0.2025833227614D-02 0.2073877299798D-02 + 0.2123058366995D-02 0.2173403250151D-02 0.2224939399761D-02 0.2277694910540D-02 + 0.2331698536421D-02 0.2386979705903D-02 0.2443568537747D-02 0.2501495857040D-02 + 0.2560793211623D-02 0.2621492888896D-02 0.2683627933011D-02 0.2747232162458D-02 + 0.2812340188056D-02 0.2878987431352D-02 0.2947210143447D-02 0.3017045424251D-02 + 0.3088531242177D-02 0.3161706454285D-02 0.3236610826892D-02 0.3313285056646D-02 + 0.3391770792086D-02 0.3472110655691D-02 0.3554348266436D-02 0.3638528262858D-02 + 0.3724696326649D-02 0.3812899206788D-02 0.3903184744224D-02 0.3995601897109D-02 + 0.4090200766624D-02 0.4187032623373D-02 0.4286149934389D-02 0.4387606390746D-02 + 0.4491456935804D-02 0.4597757794082D-02 0.4706566500803D-02 0.4817941932088D-02 + 0.4931944335851D-02 0.5048635363379D-02 0.5168078101634D-02 0.5290337106279D-02 + 0.5415478435454D-02 0.5543569684307D-02 0.5674680020311D-02 0.5808880219367D-02 + 0.5946242702730D-02 0.6086841574754D-02 0.6230752661494D-02 0.6378053550168D-02 + 0.6528823629508D-02 0.6683144131013D-02 0.6841098171130D-02 0.7002770794372D-02 + 0.7168249017405D-02 0.7337621874121D-02 0.7510980461712D-02 0.7688417987773D-02 + 0.7870029818463D-02 0.8055913527720D-02 0.8246168947593D-02 0.8440898219673D-02 + 0.8640205847678D-02 0.8844198751201D-02 0.9052986320644D-02 0.9266680473381D-02 + 0.9485395711148D-02 0.9709249178711D-02 0.9938360723829D-02 0.1017285295853D-01 + 0.1041285132175D-01 0.1065848414335D-01 0.1090988270951D-01 0.1116718132961D-01 + 0.1143051740455D-01 0.1170003149653D-01 0.1197586740047D-01 0.1225817221684D-01 + 0.1254709642620D-01 0.1284279396532D-01 0.1314542230495D-01 0.1345514252930D-01 + 0.1377211941725D-01 0.1409652152530D-01 0.1442852127232D-01 0.1476829502620D-01 + 0.1511602319226D-01 0.1547189030365D-01 0.1583608511371D-01 0.1620880069022D-01 + 0.1659023451183D-01 0.1698058856639D-01 0.1738006945154D-01 0.1778888847734D-01 + 0.1820726177118D-01 0.1863541038486D-01 0.1907356040402D-01 0.1952194305980D-01 + 0.1998079484302D-01 0.2045035762063D-01 0.2093087875471D-01 0.2142261122400D-01 + 0.2192581374792D-01 0.2244075091329D-01 0.2296769330365D-01 0.2350691763133D-01 + 0.2405870687229D-01 0.2462335040374D-01 0.2520114414469D-01 0.2579239069942D-01 + 0.2639739950387D-01 0.2701648697516D-01 0.2764997666416D-01 0.2829819941123D-01 + 0.2896149350513D-01 0.2964020484531D-01 0.3033468710740D-01 0.3104530191220D-01 + 0.3177241899806D-01 0.3251641639684D-01 0.3327768061342D-01 0.3405660680881D-01 + 0.3485359898710D-01 0.3566907018606D-01 0.3650344267166D-01 0.3735714813647D-01 + 0.3823062790211D-01 0.3912433312562D-01 0.4003872501011D-01 0.4097427501948D-01 + 0.4193146509749D-01 0.4291078789111D-01 0.4391274697832D-01 0.4493785710035D-01 + 0.4598664439858D-01 0.4705964665594D-01 0.4815741354312D-01 0.4928050686955D-01 + 0.5042950083923D-01 0.5160498231153D-01 0.5280755106696D-01 0.5403782007813D-01 + 0.5529641578584D-01 0.5658397838041D-01 0.5790116208843D-01 0.5924863546488D-01 + 0.6062708169076D-01 0.6203719887636D-01 0.6347970037015D-01 0.6495531507346D-01 + 0.6646478776099D-01 0.6800887940725D-01 0.6958836751900D-01 0.7120404647380D-01 + 0.7285672786470D-01 0.7454724085125D-01 0.7627643251682D-01 0.7804516823229D-01 + 0.7985433202641D-01 0.8170482696258D-01 0.8359757552242D-01 0.8553351999606D-01 + 0.8751362287932D-01 0.8953886727772D-01 0.9161025731761D-01 0.9372881856432D-01 + 0.9589559844749D-01 0.9811166669365D-01 0.1003781157661D+00 0.1026960613124D+00 + 0.1050666426187D+00 0.1074910230727D+00 0.1099703906329D+00 0.1125059583070D+00 + 0.1150989646366D+00 0.1177506741909D+00 0.1204623780676D+00 0.1232353944021D+00 + 0.1260710688845D+00 0.1289707752849D+00 0.1319359159864D+00 0.1349679225270D+00 + 0.1380682561490D+00 0.1412384083570D+00 0.1444799014844D+00 0.1477942892678D+00 + 0.1511831574303D+00 0.1546481242725D+00 0.1581908412731D+00 0.1618129936965D+00 + 0.1655163012104D+00 0.1693025185104D+00 0.1731734359544D+00 0.1771308802047D+00 + 0.1811767148790D+00 0.1853128412094D+00 0.1895411987104D+00 0.1938637658552D+00 + 0.1982825607598D+00 0.2027996418767D+00 0.2074171086957D+00 0.2121371024533D+00 + 0.2169618068509D+00 0.2218934487801D+00 0.2269342990569D+00 0.2320866731634D+00 + 0.2373529319974D+00 0.2427354826295D+00 0.2482367790682D+00 0.2538593230323D+00 + 0.2596056647304D+00 0.2654784036474D+00 0.2714801893389D+00 0.2776137222308D+00 + 0.2838817544268D+00 0.2902870905217D+00 0.2968325884206D+00 0.3035211601645D+00 + 0.3103557727607D+00 0.3173394490192D+00 0.3244752683937D+00 0.3317663678273D+00 + 0.3392159426028D+00 0.3468272471962D+00 0.3546035961349D+00 0.3625483648577D+00 + 0.3706649905790D+00 0.3789569731540D+00 0.3874278759464D+00 0.3960813266976D+00 + 0.4049210183955D+00 0.4139507101454D+00 0.4231742280388D+00 0.4325954660221D+00 + 0.4422183867640D+00 0.4520470225197D+00 0.4620854759931D+00 0.4723379211946D+00 + 0.4828086042953D+00 0.4935018444749D+00 0.5044220347646D+00 0.5155736428822D+00 + 0.5269612120602D+00 0.5385893618646D+00 0.5504627890040D+00 0.5625862681281D+00 + 0.5749646526146D+00 0.5876028753427D+00 0.6005059494532D+00 0.6136789690924D+00 + 0.6271271101407D+00 0.6408556309226D+00 0.6548698728981D+00 0.6691752613333D+00 + 0.6837773059493D+00 0.6986816015479D+00 0.7138938286123D+00 0.7294197538810D+00 + 0.7452652308942D+00 0.7614362005101D+00 0.7779386913894D+00 0.7947788204470D+00 + 0.8119627932680D+00 0.8294969044866D+00 0.8473875381261D+00 0.8656411678975D+00 + 0.8842643574549D+00 0.9032637606047D+00 0.9226461214683D+00 0.9424182745935D+00 + 0.9625871450140D+00 0.9831597482541D+00 0.1004143190275D+01 0.1025544667362D+01 + 0.1047371465949D+01 0.1069630962376D+01 0.1092330622582D+01 0.1115478001718D+01 + 0.1139080743699D+01 0.1163146580667D+01 0.1187683332379D+01 0.1212698905512D+01 + 0.1238201292877D+01 0.1264198572546D+01 0.1290698906886D+01 0.1317710541494D+01 + 0.1345241804028D+01 0.1373301102944D+01 0.1401896926110D+01 0.1431037839321D+01 + 0.1460732484690D+01 0.1490989578921D+01 0.1521817911461D+01 0.1553226342519D+01 + 0.1585223800953D+01 0.1617819282025D+01 0.1651021845012D+01 0.1684840610666D+01 + 0.1719284758534D+01 0.1754363524114D+01 0.1790086195862D+01 0.1826462112019D+01 + 0.1863500657290D+01 0.1901211259327D+01 0.1939603385053D+01 0.1978686536792D+01 + 0.2018470248210D+01 0.2058964080068D+01 0.2100177615772D+01 0.2142120456722D+01 + 0.2184802217451D+01 0.2228232520549D+01 0.2272420991371D+01 0.2317377252521D+01 + 0.2363110918097D+01 0.2409631587718D+01 0.2456948840298D+01 0.2505072227579D+01 + 0.2554011267414D+01 0.2603775436800D+01 0.2654374164640D+01 0.2705816824249D+01 + 0.2758112725590D+01 0.2811271107225D+01 0.2865301128002D+01 0.2920211858443D+01 + 0.2976012271854D+01 0.3032711235135D+01 0.3090317499294D+01 0.3148839689666D+01 + 0.3208286295814D+01 0.3268665661132D+01 0.3329985972130D+01 0.3392255247403D+01 + 0.3455481326284D+01 0.3519671857166D+01 0.3584834285516D+01 0.3650975841540D+01 + 0.3718103527540D+01 0.3786224104928D+01 0.3855344080910D+01 0.3925469694842D+01 + 0.3996606904248D+01 0.4068761370505D+01 0.4141938444201D+01 0.4216143150155D+01 + 0.4291380172106D+01 0.4367653837082D+01 0.4444968099432D+01 0.4523326524540D+01 + 0.4602732272224D+01 0.4683188079814D+01 0.4764696244923D+01 0.4847258607911D+01 + 0.4930876534058D+01 0.5015550895439D+01 0.5101282052526D+01 0.5188069835504D+01 + 0.5275913525340D+01 0.5364811834582D+01 0.5454762887935D+01 0.5545764202593D+01 + 0.5637812668364D+01 0.5730904527600D+01 0.5825035354930D+01 0.5920200036841D+01 + 0.6016392751096D+01 0.6113606946037D+01 0.6211835319763D+01 0.6311069799237D+01 + 0.6411301519318D+01 0.6512520801757D+01 0.6614717134178D+01 0.6717879149076D+01 + 0.6821994602856D+01 0.6927050354936D+01 0.7033032346971D+01 0.7139925582197D+01 + 0.7247714104955D+01 0.7356380980422D+01 0.7465908274590D+01 0.7576277034522D+01 + 0.7687467268944D+01 0.7799457929201D+01 0.7912226890625D+01 0.8025750934367D+01 + 0.8140005729731D+01 0.8254965817070D+01 0.8370604591283D+01 0.8486894285977D+01 + 0.8603805958343D+01 0.8721309474805D+01 0.8839373497487D+01 0.8957965471583D+01 + 0.9077051613664D+01 0.9196596901005D+01 0.9316565061973D+01 0.9436918567578D+01 + 0.9557618624205D+01 0.9678625167647D+01 0.9799896858462D+01 0.9921391078761D+01 + 0.1004306393048D+02 0.1016487023519D+02 0.1028676353561D+02 0.1040869609872D+02 + 0.1053061892078D+02 0.1065248173410D+02 0.1077423301584D+02 0.1089581999877D+02 + 0.1101718868413D+02 0.1113828385666D+02 0.1125904910191D+02 0.1137942682584D+02 + 0.1149935827678D+02 0.1161878356999D+02 0.1173764171462D+02 0.1185587064341D+02 + 0.1197340724503D+02 0.1209018739920D+02 0.1220614601465D+02 0.1232121706995D+02 + 0.1243533365740D+02 0.1254842802982D+02 0.1266043165050D+02 0.1277127524634D+02 + 0.1288088886404D+02 0.1298920192971D+02 0.1309614331160D+02 0.1320164138629D+02 + 0.1330562410812D+02 0.1340801908212D+02 0.1350875364026D+02 0.1360775492116D+02 + 0.1370494995324D+02 0.1380026574132D+02 0.1389362935662D+02 0.1398496803019D+02 + 0.1407420924981D+02 0.1416128086012D+02 0.1424611116627D+02 0.1432862904069D+02 + 0.1440876403324D+02 0.1448644648440D+02 0.1456160764164D+02 0.1463417977876D+02 + 0.1470409631813D+02 0.1477129195572D+02 0.1483570278883D+02 0.1489726644633D+02 + 0.1495592222127D+02 0.1501161120574D+02 0.1506427642781D+02 0.1511386299027D+02 + 0.1516031821110D+02 0.1520359176531D+02 0.1524363582812D+02 0.1528040521898D+02 + 0.1531385754641D+02 0.1534395335325D+02 0.1537065626208D+02 0.1539393312048D+02 + 0.1541375414585D+02 0.1543009306950D+02 0.1544292727951D+02 0.1545223796216D+02 + 0.1545801024155D+02 0.1546023331695D+02 0.1545890059744D+02 0.1545400983365D+02 + 0.1544556324596D+02 0.1543356764880D+02 0.1541803457065D+02 0.1539898036925D+02 + 0.1537642634154D+02 0.1535039882796D+02 0.1532092931044D+02 0.1528805450387D+02 + 0.1525181644030D+02 0.1521226254557D+02 0.1516944570778D+02 0.1512342433713D+02 + 0.1507426241669D+02 0.1502202954350D+02 0.1496680095964D+02 0.1490865757272D+02 + 0.1484768596530D+02 0.1478397839284D+02 0.1471763276969D+02 0.1464875264266D+02 + 0.1457744715182D+02 0.1450383097801D+02 0.1442802427679D+02 0.1435015259838D+02 + 0.1427034679327D+02 0.1418874290321D+02 0.1410548203722D+02 0.1402071023247D+02 + 0.1393457829969D+02 0.1384724165293D+02 0.1375886012364D+02 0.1366959775879D+02 + 0.1357962260304D+02 0.1348910646488D+02 0.1339822466686D+02 0.1330715577980D+02 + 0.1321608134121D+02 0.1312518555808D+02 0.1303465499419D+02 0.1294467824221D+02 + 0.1285544558101D+02 0.1276714861841D+02 0.1267997991994D+02 0.1259413262403D+02 + 0.1250980004419D+02 0.1242717525885D+02 0.1234645068948D+02 0.1226781766776D+02 + 0.1219146599257D+02 0.1211758347770D+02 0.1204635549121D+02 0.1197796448732D+02 + 0.1191258953197D+02 0.1185040582321D+02 0.1179158420730D+02 0.1173629069208D+02 + 0.1168468595856D+02 0.1163692487226D+02 0.1159315599549D+02 0.1155352110209D+02 + 0.1151815469598D+02 0.1148718353503D+02 0.1146072616178D+02 0.1143889244247D+02 + 0.1142178311602D+02 0.1140948935454D+02 0.1140209233686D+02 0.1139966283678D+02 + 0.1140226082774D+02 0.1140993510519D+02 0.1142272292875D+02 0.1144064968524D+02 + 0.1146372857460D+02 0.1149196031991D+02 0.1152533290326D+02 0.1156382132880D+02 + 0.1160738741454D+02 0.1165597961412D+02 0.1170953287012D+02 0.1176796849989D+02 + 0.1183119411535D+02 0.1189910357777D+02 0.1197157698856D+02 0.1204848071701D+02 + 0.1212966746596D+02 0.1221497637600D+02 0.1230423316888D+02 0.1239725033077D+02 + 0.1249382733567D+02 0.1259375090926D+02 0.1269679533346D+02 0.1280272279167D+02 + 0.1291128375448D+02 0.1302221740584D+02 0.1313525210912D+02 0.1325010591253D+02 + 0.1336648709337D+02 0.1348409474012D+02 0.1360261937149D+02 0.1372174359123D+02 + 0.1384114277758D+02 0.1396048580566D+02 0.1407943580155D+02 0.1419765092608D+02 + 0.1431478518661D+02 0.1443048927478D+02 0.1454441142812D+02 0.1465619831308D+02 + 0.1476549592746D+02 0.1487195051928D+02 0.1497520951989D+02 0.1507492248828D+02 + 0.1517074206398D+02 0.1526232492551D+02 0.1534933275145D+02 0.1543143318112D+02 + 0.1550830077157D+02 0.1557961794797D+02 0.1564507594396D+02 0.1570437572881D+02 + 0.1575722891823D+02 0.1580335866539D+02 0.1584250052899D+02 0.1587440331524D+02 + 0.1589882989033D+02 0.1591555796049D+02 0.1592438081630D+02 0.1592510803844D+02 + 0.1591756616179D+02 0.1590159929512D+02 0.1587706969359D+02 0.1584385828154D+02 + 0.1580186512290D+02 0.1575100983720D+02 0.1569123195871D+02 0.1562249123695D+02 + 0.1554476787665D+02 0.1545806271560D+02 0.1536239733893D+02 0.1525781412875D+02 + 0.1514437624809D+02 0.1502216755847D+02 0.1489129247063D+02 0.1475187572813D+02 + 0.1460406212401D+02 0.1444801615062D+02 0.1428392158332D+02 0.1411198099888D+02 + 0.1393241522964D+02 0.1374546275490D+02 0.1355137903119D+02 0.1335043576333D+02 + 0.1314292011864D+02 0.1292913388664D+02 0.1270939258714D+02 0.1248402452972D+02 + 0.1225336982785D+02 0.1201777937125D+02 0.1177761376017D+02 0.1153324220569D+02 + 0.1128504140014D+02 0.1103339436205D+02 0.1077868926027D+02 0.1052131822179D+02 + 0.1026167612835D+02 0.1000015940663D+02 0.9737164817090D+01 0.9473088246666D+01 + 0.9208323510392D+01 0.8943261167138D+01 0.8678287354606D+01 0.8413782648689D+01 + 0.8150120952198D+01 0.7887668417870D+01 0.7626782410424D+01 0.7367810512255D+01 + 0.7111089577147D+01 0.6856944836175D+01 0.6605689059620D+01 0.6357621778576D+01 + 0.6113028569417D+01 0.5872180404071D+01 0.5635333068605D+01 0.5402726652271D+01 + 0.5174585108689D+01 0.4951115890458D+01 0.4732509658013D+01 0.4518940063093D+01 + 0.4310563606744D+01 0.4107519571314D+01 0.3909930025455D+01 0.3717899900701D+01 + 0.3531517137795D+01 0.3350852900521D+01 0.3175961854415D+01 0.3006882507418D+01 + 0.2843637609166D+01 0.2686234605393D+01 0.2534666143602D+01 0.2388910626020D+01 + 0.2248932805599D+01 0.2114684420764D+01 0.1986104864410D+01 0.1863121882663D+01 + 0.1745652298807D+01 0.1633602757816D+01 0.1526870486911D+01 0.1425344067651D+01 + 0.1328904215091D+01 0.1237424559686D+01 0.1150772427713D+01 0.1068809616148D+01 + 0.9913931580887D+00 0.9183760750247D+00 0.8496081124357D+00 0.7849364554513D+00 + 0.7242064215293D+00 0.6672621273712D+00 0.6139471275574D+00 0.5641050226618D+00 + 0.5175800348878D+00 0.4742175495586D+00 0.4338646210828D+00 0.3963704423129D+00 + 0.3615867764997D+00 0.3293683513354D+00 0.2995732148544D+00 0.2720630532321D+00 + 0.2467034707815D+00 0.2233642326902D+00 0.2019194712763D+00 0.1822478567499D+00 + 0.1642327336682D+00 0.1477622244444D+00 0.1327293014336D+00 0.1190318292464D+00 + 0.1065725790655D+00 0.9525921682581D-01 0.8500426719540D-01 0.7572505534570D-01 + 0.6734362852856D-01 0.5978665949119D-01 0.5298533375213D-01 0.4687522273735D-01 + 0.4139614473480D-01 0.3649201557103D-01 0.3211069084453D-01 0.2820380147099D-01 + 0.2472658420543D-01 0.2163770870794D-01 0.1889910261478D-01 0.1647577596641D-01 + 0.1433564623066D-01 0.1244936504301D-01 0.1079014767040D-01 0.9333606088531D-02 + 0.8057586449521D-02 0.6942011605538D-02 0.5968729247262D-02 0.5121366113861D-02 + 0.4385188634413D-02 0.3746970269980D-02 0.3194865741265D-02 0.2718292249293D-02 + 0.2307817726031D-02 0.1955056088404D-02 0.1652569412799D-02 0.1393776897745D-02 + 0.1172870439853D-02 0.9847366120634D-03 0.8248848034661D-03 0.6893812560569D-03 + 0.5747887154298D-03 0.4781113990982D-03 0.3967449774979D-03 0.3284312582634D-03 + 0.2712172636576D-03 0.2234183935981D-03 0.1835853721449D-03 0.1504746831443D-03 + 0.1230222105786D-03 0.1003198106540D-03 0.8159455542106D-04 0.6619040144209D-04 + 0.5355205138722D-04 0.4321079120846D-04 0.3477210045803D-04 0.2790484818898D-04 + 0.2233190152246D-04 0.1782198824118D-04 0.1418266855132D-04 0.1125428434880D-04 + 0.8904766856498D-05 0.7025195313453D-05 0.5526010459652D-05 0.4333796852085D-05 + 0.3388557563637D-05 0.2641413563333D-05 0.2052668070841D-05 0.1590183444862D-05 + 0.1228024735392D-05 0.9453299398051D-06 0.7253722919424D-06 0.5547846237125D-06 + 0.4229200131023D-06 0.3213266143727D-06 0.2433177983142D-06 0.1836215545666D-06 + 0.1380955642703D-06 0.1034964778941D-06 0.7729376586493D-07 0.5752008209307D-07 + 0.4265142355148D-07 0.3151151106808D-07 0.2319578320089D-07 0.1701120974173D-07 + 0.1242881489534D-07 0.9046371073667D-08 0.6559198960071D-08 0.4737402476978D-08 + 0.3408191153158D-08 0.2442208093542D-08 0.1742998768590D-08 0.1238932286038D-08 + 0.8770296193333D-09 0.6182683290111D-09 0.4340255982013D-09 0.3033950772413D-09 + 0.2111715589818D-09 0.1463438404983D-09 0.1009726185101D-09 0.6935859066118D-10 + 0.4742849271888D-10 0.3228488955626D-10 0.2187547853929D-10 0.1475212866899D-10 + 0.9901881750809D-11 0.6613860882122D-11 0.4396644350124D-11 0.2908650000322D-11 + 0.1914873227728D-11 0.1254415200484D-11 0.8176535094916D-12 0.5302708391854D-12 + 0.3421370551355D-12 0.2196087836422D-12 0.1402231518601D-12 0.8906014768602D-13 + LSMS: xx z= 26. xvalws= 2.77074 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728402963D+02-0.5199725117641D+02-0.5199721792578D+02-0.5199718427293D+02 +-0.5199715021300D+02-0.5199711574107D+02-0.5199708085214D+02-0.5199704554119D+02 +-0.5199700980309D+02-0.5199697363268D+02-0.5199693702474D+02-0.5199689997397D+02 +-0.5199686247500D+02-0.5199682452243D+02-0.5199678611076D+02-0.5199674723444D+02 +-0.5199670788785D+02-0.5199666806529D+02-0.5199662776101D+02-0.5199658696918D+02 +-0.5199654568390D+02-0.5199650389922D+02-0.5199646160907D+02-0.5199641880734D+02 +-0.5199637548785D+02-0.5199633164434D+02-0.5199628727046D+02-0.5199624235979D+02 +-0.5199619690585D+02-0.5199615090205D+02-0.5199610434176D+02-0.5199605721822D+02 +-0.5199600952464D+02-0.5199596125410D+02-0.5199591239964D+02-0.5199586295419D+02 +-0.5199581291060D+02-0.5199576226162D+02-0.5199571099994D+02-0.5199565911815D+02 +-0.5199560660874D+02-0.5199555346411D+02-0.5199549967658D+02-0.5199544523837D+02 +-0.5199539014162D+02-0.5199533437834D+02-0.5199527794048D+02-0.5199522081989D+02 +-0.5199516300828D+02-0.5199510449731D+02-0.5199504527851D+02-0.5199498534331D+02 +-0.5199492468306D+02-0.5199486328897D+02-0.5199480115217D+02-0.5199473826367D+02 +-0.5199467461436D+02-0.5199461019507D+02-0.5199454499646D+02-0.5199447900910D+02 +-0.5199441222344D+02-0.5199434462984D+02-0.5199427621849D+02-0.5199420697954D+02 +-0.5199413690295D+02-0.5199406597858D+02-0.5199399419618D+02-0.5199392154537D+02 +-0.5199384801563D+02-0.5199377359634D+02-0.5199369827672D+02-0.5199362204589D+02 +-0.5199354489281D+02-0.5199346680633D+02-0.5199338777515D+02-0.5199330778784D+02 +-0.5199322683282D+02-0.5199314489839D+02-0.5199306197270D+02-0.5199297804374D+02 +-0.5199289309939D+02-0.5199280712733D+02-0.5199272011516D+02-0.5199263205027D+02 +-0.5199254291992D+02-0.5199245271123D+02-0.5199236141114D+02-0.5199226900644D+02 +-0.5199217548376D+02-0.5199208082958D+02-0.5199198503019D+02-0.5199188807175D+02 +-0.5199178994021D+02-0.5199169062139D+02-0.5199159010092D+02-0.5199148836424D+02 +-0.5199138539665D+02-0.5199128118323D+02-0.5199117570892D+02-0.5199106895845D+02 +-0.5199096091638D+02-0.5199085156707D+02-0.5199074089471D+02-0.5199062888326D+02 +-0.5199051551654D+02-0.5199040077813D+02-0.5199028465143D+02-0.5199016711964D+02 +-0.5199004816574D+02-0.5198992777253D+02-0.5198980592257D+02-0.5198968259824D+02 +-0.5198955778170D+02-0.5198943145487D+02-0.5198930359948D+02-0.5198917419701D+02 +-0.5198904322875D+02-0.5198891067574D+02-0.5198877651879D+02-0.5198864073848D+02 +-0.5198850331517D+02-0.5198836422896D+02-0.5198822345972D+02-0.5198808098707D+02 +-0.5198793679039D+02-0.5198779084882D+02-0.5198764314123D+02-0.5198749364622D+02 +-0.5198734234217D+02-0.5198718920716D+02-0.5198703421905D+02-0.5198687735537D+02 +-0.5198671859343D+02-0.5198655791024D+02-0.5198639528254D+02-0.5198623068679D+02 +-0.5198606409915D+02-0.5198589549550D+02-0.5198572485143D+02-0.5198555214224D+02 +-0.5198537734293D+02-0.5198520042816D+02-0.5198502137235D+02-0.5198484014954D+02 +-0.5198465673351D+02-0.5198447109769D+02-0.5198428321519D+02-0.5198409305883D+02 +-0.5198390060104D+02-0.5198370581396D+02-0.5198350866939D+02-0.5198330913876D+02 +-0.5198310719319D+02-0.5198290280341D+02-0.5198269593983D+02-0.5198248657249D+02 +-0.5198227467106D+02-0.5198206020484D+02-0.5198184314277D+02-0.5198162345340D+02 +-0.5198140110492D+02-0.5198117606510D+02-0.5198094830136D+02-0.5198071778068D+02 +-0.5198048446968D+02-0.5198024833454D+02-0.5198000934107D+02-0.5197976745462D+02 +-0.5197952264015D+02-0.5197927486220D+02-0.5197902408485D+02-0.5197877027176D+02 +-0.5197851338615D+02-0.5197825339081D+02-0.5197799024804D+02-0.5197772391971D+02 +-0.5197745436723D+02-0.5197718155151D+02-0.5197690543304D+02-0.5197662597177D+02 +-0.5197634312720D+02-0.5197605685833D+02-0.5197576712367D+02-0.5197547388122D+02 +-0.5197517708846D+02-0.5197487670236D+02-0.5197457267938D+02-0.5197426497542D+02 +-0.5197395354589D+02-0.5197363834563D+02-0.5197331932893D+02-0.5197299644952D+02 +-0.5197266966059D+02-0.5197233891476D+02-0.5197200416404D+02-0.5197166535990D+02 +-0.5197132245319D+02-0.5197097539418D+02-0.5197062413252D+02-0.5197026861727D+02 +-0.5196990879687D+02-0.5196954461909D+02-0.5196917603112D+02-0.5196880297948D+02 +-0.5196842541005D+02-0.5196804326804D+02-0.5196765649801D+02-0.5196726504383D+02 +-0.5196686884871D+02-0.5196646785514D+02-0.5196606200494D+02-0.5196565123919D+02 +-0.5196523549829D+02-0.5196481472189D+02-0.5196438884890D+02-0.5196395781753D+02 +-0.5196352156518D+02-0.5196308002855D+02-0.5196263314350D+02-0.5196218084518D+02 +-0.5196172306789D+02-0.5196125974518D+02-0.5196079080977D+02-0.5196031619354D+02 +-0.5195983582758D+02-0.5195934964214D+02-0.5195885756657D+02-0.5195835952942D+02 +-0.5195785545834D+02-0.5195734528011D+02-0.5195682892060D+02-0.5195630630481D+02 +-0.5195577735679D+02-0.5195524199969D+02-0.5195470015573D+02-0.5195415174616D+02 +-0.5195359669127D+02-0.5195303491041D+02-0.5195246632192D+02-0.5195189084316D+02 +-0.5195130839046D+02-0.5195071887917D+02-0.5195012222358D+02-0.5194951833693D+02 +-0.5194890713143D+02-0.5194828851819D+02-0.5194766240726D+02-0.5194702870759D+02 +-0.5194638732701D+02-0.5194573817222D+02-0.5194508114882D+02-0.5194441616121D+02 +-0.5194374311266D+02-0.5194306190525D+02-0.5194237243986D+02-0.5194167461616D+02 +-0.5194096833262D+02-0.5194025348643D+02-0.5193952997356D+02-0.5193879768871D+02 +-0.5193805652527D+02-0.5193730637535D+02-0.5193654712973D+02-0.5193577867788D+02 +-0.5193500090790D+02-0.5193421370652D+02-0.5193341695911D+02-0.5193261054963D+02 +-0.5193179436061D+02-0.5193096827316D+02-0.5193013216694D+02-0.5192928592013D+02 +-0.5192842940944D+02-0.5192756251004D+02-0.5192668509561D+02-0.5192579703828D+02 +-0.5192489820860D+02-0.5192398847556D+02-0.5192306770652D+02-0.5192213576726D+02 +-0.5192119252189D+02-0.5192023783287D+02-0.5191927156096D+02-0.5191829356524D+02 +-0.5191730370307D+02-0.5191630183005D+02-0.5191528780001D+02-0.5191426146503D+02 +-0.5191322267532D+02-0.5191217127930D+02-0.5191110712354D+02-0.5191003005272D+02 +-0.5190893990959D+02-0.5190783653503D+02-0.5190671976795D+02-0.5190558944528D+02 +-0.5190444540195D+02-0.5190328747089D+02-0.5190211548297D+02-0.5190092926700D+02 +-0.5189972864968D+02-0.5189851345560D+02-0.5189728350719D+02-0.5189603862472D+02 +-0.5189477862625D+02-0.5189350332759D+02-0.5189221254235D+02-0.5189090608179D+02 +-0.5188958375491D+02-0.5188824536834D+02-0.5188689072635D+02-0.5188551963080D+02 +-0.5188413188114D+02-0.5188272727435D+02-0.5188130560492D+02-0.5187986666482D+02 +-0.5187841024347D+02-0.5187693612772D+02-0.5187544410178D+02-0.5187393394724D+02 +-0.5187240544300D+02-0.5187085836524D+02-0.5186929248740D+02-0.5186770758014D+02 +-0.5186610341132D+02-0.5186447974591D+02-0.5186283634606D+02-0.5186117297093D+02 +-0.5185948937678D+02-0.5185778531685D+02-0.5185606054135D+02-0.5185431479744D+02 +-0.5185254782916D+02-0.5185075937741D+02-0.5184894917991D+02-0.5184711697117D+02 +-0.5184526248242D+02-0.5184338544160D+02-0.5184148557330D+02-0.5183956259875D+02 +-0.5183761623572D+02-0.5183564619854D+02-0.5183365219802D+02-0.5183163394142D+02 +-0.5182959113240D+02-0.5182752347098D+02-0.5182543065350D+02-0.5182331237255D+02 +-0.5182116831697D+02-0.5181899817174D+02-0.5181680161800D+02-0.5181457833297D+02 +-0.5181232798987D+02-0.5181005025795D+02-0.5180774480235D+02-0.5180541128413D+02 +-0.5180304936016D+02-0.5180065868310D+02-0.5179823890134D+02-0.5179578965895D+02 +-0.5179331059564D+02-0.5179080134665D+02-0.5178826154277D+02-0.5178569081025D+02 +-0.5178308877073D+02-0.5178045504121D+02-0.5177778923399D+02-0.5177509095659D+02 +-0.5177235981171D+02-0.5176959539717D+02-0.5176679730585D+02-0.5176396512563D+02 +-0.5176109843930D+02-0.5175819682457D+02-0.5175525985390D+02-0.5175228709457D+02 +-0.5174927810849D+02-0.5174623245221D+02-0.5174314967682D+02-0.5174002932792D+02 +-0.5173687094551D+02-0.5173367406395D+02-0.5173043821187D+02-0.5172716291215D+02 +-0.5172384768177D+02-0.5172049203182D+02-0.5171709546736D+02-0.5171365748739D+02 +-0.5171017758479D+02-0.5170665524617D+02-0.5170308995189D+02-0.5169948117592D+02 +-0.5169582838578D+02-0.5169213104249D+02-0.5168838860043D+02-0.5168460050732D+02 +-0.5168076620412D+02-0.5167688512494D+02-0.5167295669696D+02-0.5166898034036D+02 +-0.5166495546822D+02-0.5166088148646D+02-0.5165675779371D+02-0.5165258378128D+02 +-0.5164835883303D+02-0.5164408232529D+02-0.5163975362681D+02-0.5163537209858D+02 +-0.5163093709386D+02-0.5162644795799D+02-0.5162190402831D+02-0.5161730463415D+02 +-0.5161264909661D+02-0.5160793672858D+02-0.5160316683457D+02-0.5159833871062D+02 +-0.5159345164422D+02-0.5158850491424D+02-0.5158349779076D+02-0.5157842953502D+02 +-0.5157329939929D+02-0.5156810662682D+02-0.5156285045165D+02-0.5155753009857D+02 +-0.5155214478300D+02-0.5154669371088D+02-0.5154117607855D+02-0.5153559107266D+02 +-0.5152993787006D+02-0.5152421563767D+02-0.5151842353238D+02-0.5151256070096D+02 +-0.5150662627991D+02-0.5150061939535D+02-0.5149453916296D+02-0.5148838468777D+02 +-0.5148215506412D+02-0.5147584937554D+02-0.5146946669454D+02-0.5146300608264D+02 +-0.5145646659012D+02-0.5144984725596D+02-0.5144314710771D+02-0.5143636516137D+02 +-0.5142950042123D+02-0.5142255187982D+02-0.5141551851771D+02-0.5140839930344D+02 +-0.5140119319335D+02-0.5139389913149D+02-0.5138651604948D+02-0.5137904286634D+02 +-0.5137147848843D+02-0.5136382180931D+02-0.5135607170955D+02-0.5134822705665D+02 +-0.5134028670491D+02-0.5133224949527D+02-0.5132411425521D+02-0.5131587979859D+02 +-0.5130754492555D+02-0.5129910842232D+02-0.5129056906116D+02-0.5128192560017D+02 +-0.5127317678315D+02-0.5126432133956D+02-0.5125535798425D+02-0.5124628541740D+02 +-0.5123710232443D+02-0.5122780737574D+02-0.5121839922671D+02-0.5120887651745D+02 +-0.5119923787276D+02-0.5118948190193D+02-0.5117960719865D+02-0.5116961234085D+02 +-0.5115949589056D+02-0.5114925639380D+02-0.5113889238044D+02-0.5112840236408D+02 +-0.5111778484188D+02-0.5110703829447D+02-0.5109616118579D+02-0.5108515196301D+02 +-0.5107400905631D+02-0.5106273087889D+02-0.5105131582667D+02-0.5103976227836D+02 +-0.5102806859514D+02-0.5101623312071D+02-0.5100425418105D+02-0.5099213008436D+02 +-0.5097985912091D+02-0.5096743956297D+02-0.5095486966464D+02-0.5094214766176D+02 +-0.5092927177183D+02-0.5091624019384D+02-0.5090305110822D+02-0.5088970267672D+02 +-0.5087619304230D+02-0.5086252032900D+02-0.5084868264193D+02-0.5083467806710D+02 +-0.5082050467136D+02-0.5080616050232D+02-0.5079164358822D+02-0.5077695193792D+02 +-0.5076208354076D+02-0.5074703636655D+02-0.5073180836542D+02-0.5071639746782D+02 +-0.5070080158445D+02-0.5068501860613D+02-0.5066904640389D+02-0.5065288282874D+02 +-0.5063652571181D+02-0.5061997286414D+02-0.5060322207678D+02-0.5058627112067D+02 +-0.5056911774669D+02-0.5055175968555D+02-0.5053419464788D+02-0.5051642032411D+02 +-0.5049843438458D+02-0.5048023447945D+02-0.5046181823877D+02-0.5044318327247D+02 +-0.5042432717038D+02-0.5040524750226D+02-0.5038594181787D+02-0.5036640764694D+02 +-0.5034664249930D+02-0.5032664386488D+02-0.5030640921379D+02-0.5028593599640D+02 +-0.5026522164341D+02-0.5024426356594D+02-0.5022305915564D+02-0.5020160578474D+02 +-0.5017990080623D+02-0.5015794155393D+02-0.5013572534263D+02-0.5011324946826D+02 +-0.5009051120796D+02-0.5006750782030D+02-0.5004423654542D+02-0.5002069460521D+02 +-0.4999687920344D+02-0.4997278752603D+02-0.4994841674120D+02-0.4992376399966D+02 +-0.4989882643488D+02-0.4987360116327D+02-0.4984808528443D+02-0.4982227588141D+02 +-0.4979617002094D+02-0.4976976475371D+02-0.4974305711462D+02-0.4971604412309D+02 +-0.4968872278335D+02-0.4966109008469D+02-0.4963314300185D+02-0.4960487849528D+02 +-0.4957629351145D+02-0.4954738498327D+02-0.4951814983035D+02-0.4948858495939D+02 +-0.4945868726453D+02-0.4942845362775D+02-0.4939788091919D+02-0.4936696599757D+02 +-0.4933570571061D+02-0.4930409689534D+02-0.4927213637859D+02-0.4923982097740D+02 +-0.4920714749935D+02-0.4917411274309D+02-0.4914071349870D+02-0.4910694654815D+02 +-0.4907280866573D+02-0.4903829661848D+02-0.4900340716666D+02-0.4896813706420D+02 +-0.4893248305909D+02-0.4889644189392D+02-0.4886001030623D+02-0.4882318502909D+02 +-0.4878596279141D+02-0.4874834031849D+02-0.4871031433244D+02-0.4867188155262D+02 +-0.4863303869609D+02-0.4859378247804D+02-0.4855410961222D+02-0.4851401681140D+02 +-0.4847350078774D+02-0.4843255825325D+02-0.4839118592018D+02-0.4834938050138D+02 +-0.4830713871075D+02-0.4826445726356D+02-0.4822133287682D+02-0.4817776226967D+02 +-0.4813374216365D+02-0.4808926928306D+02-0.4804434035526D+02-0.4799895211091D+02 +-0.4795310128431D+02-0.4790678461358D+02-0.4785999884093D+02-0.4781274071282D+02 +-0.4776500698020D+02-0.4771679439861D+02-0.4766809972836D+02-0.4761891973461D+02 +-0.4756925118748D+02-0.4751909086208D+02-0.4746843553857D+02-0.4741728200213D+02 +-0.4736562704295D+02-0.4731346745620D+02-0.4726080004188D+02-0.4720762160479D+02 +-0.4715392895431D+02-0.4709971890425D+02-0.4704498827268D+02-0.4698973388163D+02 +-0.4693395255690D+02-0.4687764112767D+02-0.4682079642628D+02-0.4676341528777D+02 +-0.4670549454962D+02-0.4664703105122D+02-0.4658802163351D+02-0.4652846313853D+02 +-0.4646835240891D+02-0.4640768628735D+02-0.4634646161617D+02-0.4628467523671D+02 +-0.4622232398885D+02-0.4615940471037D+02-0.4609591423645D+02-0.4603184939910D+02 +-0.4596720702657D+02-0.4590198394276D+02-0.4583617696675D+02-0.4576978291218D+02 +-0.4570279858676D+02-0.4563522079176D+02-0.4556704632159D+02-0.4549827196328D+02 +-0.4542889449617D+02-0.4535891069156D+02-0.4528831731237D+02-0.4521711111299D+02 +-0.4514528883912D+02-0.4507284722768D+02-0.4499978300686D+02-0.4492609289624D+02 +-0.4485177360700D+02-0.4477682184233D+02-0.4470123429783D+02-0.4462500766219D+02 +-0.4454813861790D+02-0.4447062384219D+02-0.4439246000814D+02-0.4431364378589D+02 +-0.4423417184413D+02-0.4415404085174D+02-0.4407324747964D+02-0.4399178840285D+02 +-0.4390966030283D+02-0.4382685986996D+02-0.4374338380636D+02-0.4365922882888D+02 +-0.4357439167239D+02-0.4348886909331D+02-0.4340265787340D+02-0.4331575482384D+02 +-0.4322815678953D+02-0.4313986065369D+02-0.4305086334268D+02-0.4296116183110D+02 +-0.4287075314713D+02-0.4277963437808D+02-0.4268780267613D+02-0.4259525526436D+02 +-0.4250198944278D+02-0.4240800259471D+02-0.4231329219311D+02-0.4221785580702D+02 +-0.4212169110814D+02-0.4202479587724D+02-0.4192716801066D+02-0.4182880552657D+02 +-0.4172970657123D+02-0.4162986942478D+02-0.4152929250699D+02-0.4142797438248D+02 +-0.4132591376546D+02-0.4122310952415D+02-0.4111956068435D+02-0.4101526643252D+02 +-0.4091022611799D+02-0.4080443925436D+02-0.4069790551997D+02-0.4059062475744D+02 +-0.4048259697200D+02-0.4037382232884D+02-0.4026430114924D+02-0.4015403390548D+02 +-0.4004302121449D+02-0.3993126383031D+02-0.3981876263529D+02-0.3970551863000D+02 +-0.3959153292214D+02-0.3947680671418D+02-0.3936134129010D+02-0.3924513800125D+02 +-0.3912819825140D+02-0.3901052348125D+02-0.3889211515259D+02-0.3877297473220D+02 +-0.3865310367583D+02-0.3853250341248D+02-0.3841117532917D+02-0.3828912075654D+02 +-0.3816634095549D+02-0.3804283710513D+02-0.3791861029232D+02-0.3779366150300D+02 +-0.3766799161555D+02-0.3754160139636D+02-0.3741449149782D+02-0.3728666245883D+02 +-0.3715811470790D+02-0.3702884856900D+02-0.3689886427010D+02-0.3676816195438D+02 +-0.3663674169408D+02-0.3650460350690D+02-0.3637174737474D+02-0.3623817326473D+02 +-0.3610388115218D+02-0.3596887104531D+02-0.3583314301154D+02-0.3569669720495D+02 +-0.3555953389464D+02-0.3542165349386D+02-0.3528305658922D+02-0.3514374397011D+02 +-0.3500371665774D+02-0.3486297593358D+02-0.3472152336690D+02-0.3457936084122D+02 +-0.3443649057928D+02-0.3429291516643D+02-0.3414863757211D+02-0.3400366116934D+02 +-0.3385798975190D+02-0.3371162754922D+02-0.3356457923876D+02-0.3341684995570D+02 +-0.3326844530007D+02-0.3311937134098D+02-0.3296963461820D+02-0.3281924214079D+02 +-0.3266820138293D+02-0.3251652027694D+02-0.3236420720350D+02-0.3221127097903D+02 +-0.3205772084042D+02-0.3190356642710D+02-0.3174881776049D+02-0.3159348522098D+02 +-0.3143757952257D+02-0.3128111168511D+02-0.3112409300454D+02-0.3096653502093D+02 +-0.3080844948479D+02-0.3064984832153D+02-0.3049074359439D+02-0.3033114746593D+02 +-0.3017107215833D+02-0.3001052991254D+02-0.2984953294675D+02-0.2968809341400D+02 +-0.2952622335948D+02-0.2936393467762D+02-0.2920123906907D+02-0.2903814799805D+02 +-0.2887467265011D+02-0.2871082389066D+02-0.2854661222446D+02-0.2838204775647D+02 +-0.2821714015409D+02-0.2805189861135D+02-0.2788633181514D+02-0.2772044791378D+02 +-0.2755425448842D+02-0.2738775852723D+02-0.2722096640307D+02-0.2705388385454D+02 +-0.2688651597109D+02-0.2671886718221D+02-0.2655094125117D+02-0.2638274127348D+02 +-0.2621426968047D+02-0.2604552824823D+02-0.2587651811214D+02-0.2570723978730D+02 +-0.2553769319514D+02-0.2536787769632D+02-0.2519779213021D+02-0.2502743486110D+02 +-0.2485680383129D+02-0.2468589662112D+02-0.2451471051601D+02-0.2434324258050D+02 +-0.2417148973924D+02-0.2399944886481D+02-0.2382711687194D+02-0.2365449081810D+02 +-0.2348156800981D+02-0.2330834611404D+02-0.2313482327422D+02-0.2296099822964D+02 +-0.2278687043744D+02-0.2261244019567D+02-0.2243770876615D+02-0.2226267849517D+02 +-0.2208735293014D+02-0.2191173693001D+02-0.2173583676674D+02-0.2155966021537D+02 +-0.2138321662948D+02-0.2120651699903D+02-0.2102957398727D+02-0.2085240194340D+02 +-0.2067501688787D+02-0.2049743646710D+02-0.2031967987514D+02-0.2014176773999D+02 +-0.1996372197331D+02-0.1978556558301D+02-0.1960732244950D+02-0.1942901706755D+02 +-0.1925067425750D+02-0.1907231885074D+02-0.1889397535633D+02-0.1871566761696D+02 +-0.1853741846374D+02-0.1835924938052D+02-0.1818118018868D+02-0.1800322876380D+02 +-0.1782541079491D+02-0.1764773959582D+02-0.1747022597686D+02-0.1729287818264D+02 +-0.1711570189939D+02-0.1693870033244D+02-0.1676187435187D+02-0.1658522270158D+02 +-0.1640874226459D+02-0.1623242837596D+02-0.1605627517269D+02-0.1588027596970D+02 +-0.1570442365062D+02-0.1552871106216D+02-0.1535313140208D+02-0.1517767859145D+02 +-0.1500234762341D+02-0.1482713488228D+02-0.1465203842815D+02-0.1447705824363D+02 +-0.1430219644106D+02-0.1412745742929D+02-0.1395284804054D+02-0.1377837761854D+02 +-0.1360405806987D+02-0.1342990388081D+02-0.1325593210249D+02-0.1308216230731D+02 +-0.1290861651951D+02-0.1273531912305D+02-0.1256229674959D+02-0.1238957814960D+02 +-0.1221719404907D+02-0.1204517699438D+02-0.1187356118783D+02-0.1170238231558D+02 +-0.1153167737042D+02-0.1136148447069D+02-0.1119184267735D+02-0.1102279181034D+02 +-0.1085437226576D+02-0.1068662483495D+02-0.1051959052659D+02-0.1035331039265D+02 +-0.1018782535928D+02-0.1002317606321D+02-0.9859402694342D+01-0.9696544845323D+01 +-0.9534641368482D+01-0.9373730240659D+01-0.9213848436346D+01-0.9055031809511D+01 +-0.8897314984394D+01-0.8740731255549D+01-0.8585312497336D+01-0.8431089083029D+01 +-0.8278089813661D+01-0.8126341856676D+01-0.7975870694439D+01-0.7826700082584D+01 +-0.7678852018171D+01-0.7532346717566D+01-0.7387202603932D+01-0.7243436304187D+01 +-0.7101062655233D+01-0.6960094719270D+01-0.6820543807924D+01-0.6682419514939D+01 +-0.6545729757123D+01-0.6410480823229D+01-0.6276677430423D+01-0.6144322787958D+01 +-0.6013418667669D+01-0.5883965480867D+01-0.5755962361193D+01-0.5629407252975D+01 +-0.5504297004604D+01-0.5380627466436D+01-0.5258393592702D+01-0.5137589546863D+01 +-0.5018208809882D+01-0.4900244290793D+01-0.4783688438971D+01-0.4668533357470D+01 +-0.4554770916754D+01-0.4442392868124D+01-0.4331390956131D+01-0.4221757029192D+01 +-0.4113483147635D+01-0.4006561688322D+01-0.3900985445011D+01-0.3796747723533D+01 +-0.3693842430876D+01-0.3592264157211D+01-0.3492008249906D+01-0.3393070878541D+01 +-0.3295449089976D+01-0.3199140852531D+01-0.3104145088414D+01-0.3010461693592D+01 +-0.2918091544431D+01-0.2827036490592D+01-0.2737299333835D+01-0.2648883792669D+01 +-0.2561794453010D+01-0.2476036705393D+01-0.2391616669610D+01-0.2308541108029D+01 +-0.2226817329318D+01-0.2146453084634D+01-0.2067456458802D+01-0.1989835759339D+01 +-0.1913599406514D+01-0.1838755827812D+01-0.1765313360391D+01-0.1693280165020D+01 +-0.1622664154978D+01-0.1553472943063D+01-0.1485713809518D+01-0.1419393693186D+01 +-0.1354519207570D+01-0.1291096682842D+01-0.1229132234097D+01-0.1168631855453D+01 +-0.1109601538882D+01-0.1052047416050D+01-0.9959759208814D+00-0.9413939701484D+00 +-0.8883091590719D+00-0.8367299687430D+00-0.7866659821253D+00-0.7381281054637D+00 +-0.6911287920896D+00-0.6456822658698D+00-0.6018047418553D+00-0.5595146420441D+00 +-0.5188328045500D+00-0.4797826848498D+00-0.4423905481512D+00-0.4066856522662D+00 +-0.3727004206897D+00-0.3404706058472D+00-0.3100354427093D+00-0.2814377931599D+00 +-0.2547240189175D+00 + 0.0000000000000D+00 + 1012 0.2770741520224D+01 + 0.2150927949039D-04 0.2202124536575D-04 0.2254539478646D-04 0.2308201760180D-04 + 0.2363141055333D-04 0.2419387743865D-04 0.2476972927906D-04 0.2535928449121D-04 + 0.2596286906285D-04 0.2658081673262D-04 0.2721346917432D-04 0.2786117618535D-04 + 0.2852429587973D-04 0.2920319488569D-04 0.2989824854795D-04 0.3060984113473D-04 + 0.3133836604977D-04 0.3208422604934D-04 0.3284783346437D-04 0.3362961042788D-04 + 0.3442998910781D-04 0.3524941194536D-04 0.3608833189898D-04 0.3694721269416D-04 + 0.3782652907911D-04 0.3872676708658D-04 0.3964842430179D-04 0.4059201013679D-04 + 0.4155804611131D-04 0.4254706614023D-04 0.4355961682789D-04 0.4459625776943D-04 + 0.4565756185917D-04 0.4674411560639D-04 0.4785651945856D-04 0.4899538813222D-04 + 0.5016135095172D-04 0.5135505219602D-04 0.5257715145361D-04 0.5382832398596D-04 + 0.5510926109951D-04 0.5642067052648D-04 0.5776327681476D-04 0.5913782172693D-04 + 0.6054506464885D-04 0.6198578300785D-04 0.6346077270088D-04 0.6497084853274D-04 + 0.6651684466474D-04 0.6809961507398D-04 0.6972003402351D-04 0.7137899654355D-04 + 0.7307741892426D-04 0.7481623921999D-04 0.7659641776564D-04 0.7841893770513D-04 + 0.8028480553242D-04 0.8219505164534D-04 0.8415073091254D-04 0.8615292325379D-04 + 0.8820273423416D-04 0.9030129567206D-04 0.9244976626185D-04 0.9464933221109D-04 + 0.9690120789284D-04 0.9920663651351D-04 0.1015668907964D-03 0.1039832736813D-03 + 0.1064571190411D-03 0.1089897924148D-03 0.1115826917580D-03 0.1142372482113D-03 + 0.1169549268870D-03 0.1197372276738D-03 0.1225856860613D-03 0.1255018739831D-03 + 0.1284874006808D-03 0.1315439135877D-03 0.1346730992336D-03 0.1378766841712D-03 + 0.1411564359238D-03 0.1445141639563D-03 0.1479517206680D-03 0.1514710024102D-03 + 0.1550739505263D-03 0.1587625524179D-03 0.1625388426349D-03 0.1664049039925D-03 + 0.1703628687133D-03 0.1744149195974D-03 0.1785632912194D-03 0.1828102711544D-03 + 0.1871582012321D-03 0.1916094788209D-03 0.1961665581427D-03 0.2008319516176D-03 + 0.2056082312418D-03 0.2104980299966D-03 0.2155040432913D-03 0.2206290304405D-03 + 0.2258758161753D-03 0.2312472921908D-03 0.2367464187300D-03 0.2423762262044D-03 + 0.2481398168542D-03 0.2540403664457D-03 0.2600811260106D-03 0.2662654236245D-03 + 0.2725966662290D-03 0.2790783414953D-03 0.2857140197324D-03 0.2925073558401D-03 + 0.2994620913080D-03 0.3065820562611D-03 0.3138711715547D-03 0.3213334509168D-03 + 0.3289730031429D-03 0.3367940343406D-03 0.3448008502286D-03 0.3529978584881D-03 + 0.3613895711713D-03 0.3699806071650D-03 0.3787756947128D-03 0.3877796739964D-03 + 0.3969974997780D-03 0.4064342441040D-03 0.4160950990725D-03 0.4259853796663D-03 + 0.4361105266519D-03 0.4464761095462D-03 0.4570878296540D-03 0.4679515231757D-03 + 0.4790731643881D-03 0.4904588689006D-03 0.5021148969868D-03 0.5140476569946D-03 + 0.5262637088364D-03 0.5387697675611D-03 0.5515727070097D-03 0.5646795635561D-03 + 0.5780975399370D-03 0.5918340091694D-03 0.6058965185620D-03 0.6202927938188D-03 + 0.6350307432396D-03 0.6501184620192D-03 0.6655642366457D-03 0.6813765494038D-03 + 0.6975640829812D-03 0.7141357251847D-03 0.7311005737650D-03 0.7484679413557D-03 + 0.7662473605260D-03 0.7844485889531D-03 0.8030816147148D-03 0.8221566617048D-03 + 0.8416841951763D-03 0.8616749274129D-03 0.8821398235337D-03 0.9030901074324D-03 + 0.9245372678559D-03 0.9464930646236D-03 0.9689695349932D-03 0.9919790001731D-03 + 0.1015534071988D-02 0.1039647659698D-02 0.1064332976981D-02 0.1089603549068D-02 + 0.1115473220057D-02 0.1141956160389D-02 0.1169066874495D-02 0.1196820208634D-02 + 0.1225231358897D-02 0.1254315879409D-02 0.1284089690715D-02 0.1314569088366D-02 + 0.1345770751696D-02 0.1377711752814D-02 0.1410409565795D-02 0.1443882076088D-02 + 0.1478147590144D-02 0.1513224845264D-02 0.1549133019674D-02 0.1585891742841D-02 + 0.1623521106018D-02 0.1662041673040D-02 0.1701474491365D-02 0.1741841103378D-02 + 0.1783163557945D-02 0.1825464422244D-02 0.1868766793867D-02 0.1913094313196D-02 + 0.1958471176071D-02 0.2004922146751D-02 0.2052472571166D-02 0.2101148390486D-02 + 0.2150976154989D-02 0.2201983038264D-02 0.2254196851731D-02 0.2307646059493D-02 + 0.2362359793542D-02 0.2418367869301D-02 0.2475700801533D-02 0.2534389820612D-02 + 0.2594466889165D-02 0.2655964719104D-02 0.2718916789042D-02 0.2783357362106D-02 + 0.2849321504172D-02 0.2916845102501D-02 0.2985964884814D-02 0.3056718438800D-02 + 0.3129144232066D-02 0.3203281632551D-02 0.3279170929405D-02 0.3356853354336D-02 + 0.3436371103460D-02 0.3517767359634D-02 0.3601086315312D-02 0.3686373195913D-02 + 0.3773674283724D-02 0.3863036942351D-02 0.3954509641719D-02 0.4048141983652D-02 + 0.4143984728019D-02 0.4242089819491D-02 0.4342510414893D-02 0.4445300911185D-02 + 0.4550516974067D-02 0.4658215567249D-02 0.4768454982366D-02 0.4881294869584D-02 + 0.4996796268890D-02 0.5115021642093D-02 0.5236034905549D-02 0.5359901463622D-02 + 0.5486688242898D-02 0.5616463727181D-02 0.5749297993262D-02 0.5885262747508D-02 + 0.6024431363262D-02 0.6166878919093D-02 0.6312682237899D-02 0.6461919926891D-02 + 0.6614672418475D-02 0.6771022012045D-02 0.6931052916716D-02 0.7094851295016D-02 + 0.7262505307545D-02 0.7434105158642D-02 0.7609743143066D-02 0.7789513693721D-02 + 0.7973513430440D-02 0.8161841209859D-02 0.8354598176397D-02 0.8551887814376D-02 + 0.8753816001287D-02 0.8960491062250D-02 0.9172023825667D-02 0.9388527680122D-02 + 0.9610118632529D-02 0.9836915367568D-02 0.1006903930843D-01 0.1030661467892D-01 + 0.1054976856688D-01 0.1079863098909D-01 0.1105333495749D-01 0.1131401654696D-01 + 0.1158081496451D-01 0.1185387262003D-01 0.1213333519856D-01 0.1241935173418D-01 + 0.1271207468545D-01 0.1301166001257D-01 0.1331826725616D-01 0.1363205961778D-01 + 0.1395320404221D-01 0.1428187130150D-01 0.1461823608081D-01 0.1496247706623D-01 + 0.1531477703430D-01 0.1567532294367D-01 0.1604430602860D-01 0.1642192189452D-01 + 0.1680837061563D-01 0.1720385683464D-01 0.1760858986456D-01 0.1802278379280D-01 + 0.1844665758734D-01 0.1888043520531D-01 0.1932434570378D-01 0.1977862335297D-01 + 0.2024350775185D-01 0.2071924394615D-01 0.2120608254895D-01 0.2170427986376D-01 + 0.2221409801021D-01 0.2273580505238D-01 0.2326967512987D-01 0.2381598859160D-01 + 0.2437503213237D-01 0.2494709893234D-01 0.2553248879941D-01 0.2613150831454D-01 + 0.2674447098014D-01 0.2737169737147D-01 0.2801351529124D-01 0.2867025992742D-01 + 0.2934227401421D-01 0.3002990799646D-01 0.3073352019732D-01 0.3145347698951D-01 + 0.3219015296988D-01 0.3294393113773D-01 0.3371520307664D-01 0.3450436914006D-01 + 0.3531183864059D-01 0.3613803004319D-01 0.3698337116219D-01 0.3784829936233D-01 + 0.3873326176383D-01 0.3963871545150D-01 0.4056512768813D-01 0.4151297613205D-01 + 0.4248274905905D-01 0.4347494558865D-01 0.4449007591493D-01 0.4552866154180D-01 + 0.4659123552298D-01 0.4767834270657D-01 0.4879053998454D-01 0.4992839654695D-01 + 0.5109249414114D-01 0.5228342733595D-01 0.5350180379101D-01 0.5474824453121D-01 + 0.5602338422639D-01 0.5732787147645D-01 0.5866236910176D-01 0.6002755443915D-01 + 0.6142411964345D-01 0.6285277199472D-01 0.6431423421119D-01 0.6580924476805D-01 + 0.6733855822219D-01 0.6890294554290D-01 0.7050319444864D-01 0.7214010975008D-01 + 0.7381451369925D-01 0.7552724634520D-01 0.7727916589591D-01 0.7907114908690D-01 + 0.8090409155624D-01 0.8277890822643D-01 0.8469653369292D-01 0.8665792261951D-01 + 0.8866405014071D-01 0.9071591227111D-01 0.9281452632182D-01 0.9496093132410D-01 + 0.9715618846031D-01 0.9940138150208D-01 0.1016976172560D+00 0.1040460260169D+00 + 0.1064477620282D+00 0.1089040039508D+00 0.1114159553388D+00 0.1139848451236D+00 + 0.1166119281054D+00 0.1192984854532D+00 0.1220458252122D+00 0.1248552828197D+00 + 0.1277282216288D+00 0.1306660334408D+00 0.1336701390448D+00 0.1367419887670D+00 + 0.1398830630269D+00 0.1430948729031D+00 0.1463789607067D+00 0.1497369005636D+00 + 0.1531702990050D+00 0.1566807955666D+00 0.1602700633964D+00 0.1639398098711D+00 + 0.1676917772207D+00 0.1715277431623D+00 0.1754495215419D+00 0.1794589629856D+00 + 0.1835579555582D+00 0.1877484254317D+00 0.1920323375616D+00 0.1964116963718D+00 + 0.2008885464482D+00 0.2054649732406D+00 0.2101431037732D+00 0.2149251073635D+00 + 0.2198131963488D+00 0.2248096268222D+00 0.2299166993754D+00 0.2351367598503D+00 + 0.2404722000984D+00 0.2459254587480D+00 0.2514990219789D+00 0.2571954243047D+00 + 0.2630172493626D+00 0.2689671307106D+00 0.2750477526311D+00 0.2812618509418D+00 + 0.2876122138134D+00 0.2941016825931D+00 0.3007331526352D+00 0.3075095741362D+00 + 0.3144339529771D+00 0.3215093515700D+00 0.3287388897102D+00 0.3361257454325D+00 + 0.3436731558729D+00 0.3513844181328D+00 0.3592628901485D+00 0.3673119915621D+00 + 0.3755352045968D+00 0.3839360749336D+00 0.3925182125899D+00 0.4012852927993D+00 + 0.4102410568930D+00 0.4193893131804D+00 0.4287339378299D+00 0.4382788757486D+00 + 0.4480281414604D+00 0.4579858199819D+00 0.4681560676951D+00 0.4785431132164D+00 + 0.4891512582614D+00 0.4999848785043D+00 0.5110484244305D+00 0.5223464221834D+00 + 0.5338834744021D+00 0.5456642610510D+00 0.5576935402392D+00 0.5699761490289D+00 + 0.5825170042325D+00 0.5953211031952D+00 0.6083935245653D+00 0.6217394290472D+00 + 0.6353640601390D+00 0.6492727448516D+00 0.6634708944082D+00 0.6779640049238D+00 + 0.6927576580616D+00 0.7078575216668D+00 0.7232693503742D+00 0.7389989861895D+00 + 0.7550523590420D+00 0.7714354873073D+00 0.7881544782973D+00 0.8052155287175D+00 + 0.8226249250876D+00 0.8403890441249D+00 0.8585143530879D+00 0.8770074100784D+00 + 0.8958748642992D+00 0.9151234562658D+00 0.9347600179702D+00 0.9547914729931D+00 + 0.9752248365635D+00 0.9960672155622D+00 0.1017325808468D+01 0.1039007905241D+01 + 0.1061120887144D+01 0.1083672226499D+01 0.1106669486370D+01 0.1130120320176D+01 + 0.1154032471231D+01 0.1178413772204D+01 0.1203272144493D+01 0.1228615597523D+01 + 0.1254452227950D+01 0.1280790218774D+01 0.1307637838359D+01 0.1335003439353D+01 + 0.1362895457506D+01 0.1391322410385D+01 0.1420292895972D+01 0.1449815591159D+01 + 0.1479899250115D+01 0.1510552702537D+01 0.1541784851777D+01 0.1573604672833D+01 + 0.1606021210210D+01 0.1639043575644D+01 0.1672680945677D+01 0.1706942559091D+01 + 0.1741837714186D+01 0.1777375765901D+01 0.1813566122779D+01 0.1850418243757D+01 + 0.1887941634794D+01 0.1926145845317D+01 0.1965040464488D+01 0.2004635117287D+01 + 0.2044939460400D+01 0.2085963177919D+01 0.2127715976829D+01 0.2170207582300D+01 + 0.2213447732763D+01 0.2257446174769D+01 0.2302212657626D+01 0.2347756927812D+01 + 0.2394088723154D+01 0.2441217766767D+01 0.2489153760756D+01 0.2537906379665D+01 + 0.2587485263675D+01 0.2637900011547D+01 0.2689160173295D+01 0.2741275242598D+01 + 0.2794254648931D+01 0.2848107749430D+01 0.2902843820459D+01 0.2958472048904D+01 + 0.3015001523163D+01 0.3072441223848D+01 0.3130800014182D+01 0.3190086630094D+01 + 0.3250309670002D+01 0.3311477584285D+01 0.3373598664440D+01 0.3436681031917D+01 + 0.3500732626634D+01 0.3565761195166D+01 0.3631774278604D+01 0.3698779200090D+01 + 0.3766783052007D+01 0.3835792682854D+01 0.3905814683769D+01 0.3976855374728D+01 + 0.4048920790399D+01 0.4122016665671D+01 0.4196148420834D+01 0.4271321146438D+01 + 0.4347539587809D+01 0.4424808129241D+01 0.4503130777854D+01 0.4582511147131D+01 + 0.4662952440136D+01 0.4744457432406D+01 0.4827028454547D+01 0.4910667374509D+01 + 0.4995375579573D+01 0.5081153958042D+01 0.5168002880655D+01 0.5255922181721D+01 + 0.5344911139992D+01 0.5434968459290D+01 0.5526092248881D+01 0.5618280003639D+01 + 0.5711528583982D+01 0.5805834195616D+01 0.5901192369103D+01 0.5997597939257D+01 + 0.6095045024395D+01 0.6193527005472D+01 0.6293036505099D+01 0.6393565366487D+01 + 0.6495104632331D+01 0.6597644523660D+01 0.6701174418681D+01 0.6805682831645D+01 + 0.6911157391760D+01 0.7017584822191D+01 0.7124950919171D+01 0.7233240531258D+01 + 0.7342437538781D+01 0.7452524833500D+01 0.7563484298530D+01 0.7675296788562D+01 + 0.7787942110430D+01 0.7901399004058D+01 0.8015645123842D+01 0.8130657020509D+01 + 0.8246410123503D+01 0.8362878723950D+01 0.8480035958250D+01 0.8597853792358D+01 + 0.8716303006799D+01 0.8835353182487D+01 0.8954972687391D+01 0.9075128664130D+01 + 0.9195787018538D+01 0.9316912409273D+01 0.9438468238543D+01 0.9560416644000D+01 + 0.9682718491880D+01 0.9805333371460D+01 0.9928219590896D+01 0.1005133417453D+02 + 0.1017463286171D+02 0.1029807010722D+02 0.1042159908344D+02 0.1054517168417D+02 + 0.1066873853037D+02 0.1079224897780D+02 0.1091565112659D+02 0.1103889183301D+02 + 0.1116191672323D+02 0.1128467020944D+02 0.1140709550823D+02 0.1152913466133D+02 + 0.1165072855885D+02 0.1177181696506D+02 0.1189233854680D+02 0.1201223090454D+02 + 0.1213143060625D+02 0.1224987322407D+02 0.1236749337400D+02 0.1248422475837D+02 + 0.1260000021157D+02 0.1271475174875D+02 0.1282841061773D+02 0.1294090735413D+02 + 0.1305217183979D+02 0.1316213336451D+02 0.1327072069111D+02 0.1337786212400D+02 + 0.1348348558110D+02 0.1358751866928D+02 0.1368988876325D+02 0.1379052308804D+02 + 0.1388934880491D+02 0.1398629310084D+02 0.1408128328150D+02 0.1417424686776D+02 + 0.1426511169568D+02 0.1435380601989D+02 0.1444025862047D+02 0.1452439891313D+02 + 0.1460615706273D+02 0.1468546410000D+02 0.1476225204147D+02 0.1483645401237D+02 + 0.1490800437259D+02 0.1497683884540D+02 0.1504289464893D+02 0.1510611063019D+02 + 0.1516642740155D+02 0.1522378747941D+02 0.1527813542502D+02 0.1532941798703D+02 + 0.1537758424592D+02 0.1542258575964D+02 0.1546437671057D+02 0.1550291405346D+02 + 0.1553815766392D+02 0.1557007048740D+02 0.1559861868825D+02 0.1562377179849D+02 + 0.1564550286611D+02 0.1566378860245D+02 0.1567860952827D+02 0.1568995011828D+02 + 0.1569779894358D+02 0.1570214881171D+02 0.1570299690387D+02 0.1570034490889D+02 + 0.1569419915342D+02 0.1568457072811D+02 0.1567147560898D+02 0.1565493477391D+02 + 0.1563497431333D+02 0.1561162553504D+02 0.1558492506233D+02 0.1555491492507D+02 + 0.1552164264320D+02 0.1548516130217D+02 0.1544552961962D+02 0.1540281200312D+02 + 0.1535707859803D+02 0.1530840532536D+02 0.1525687390884D+02 0.1520257189079D+02 + 0.1514559263632D+02 0.1508603532531D+02 0.1502400493172D+02 0.1495961218971D+02 + 0.1489297354623D+02 0.1482421109950D+02 0.1475345252306D+02 0.1468083097499D+02 + 0.1460648499184D+02 0.1453055836709D+02 0.1445320001360D+02 0.1437456381003D+02 + 0.1429480843075D+02 0.1421409715909D+02 0.1413259768392D+02 0.1405048187912D+02 + 0.1396792556614D+02 0.1388510825940D+02 0.1380221289467D+02 0.1371942554036D+02 + 0.1363693509198D+02 0.1355493294972D+02 0.1347361267958D+02 0.1339316965818D+02 + 0.1331380070165D+02 0.1323570367897D+02 0.1315907711016D+02 0.1308411975004D+02 + 0.1301103015787D+02 0.1294000625373D+02 0.1287124486230D+02 0.1280494124477D+02 + 0.1274128861984D+02 0.1268047767460D+02 0.1262269606643D+02 0.1256812791682D+02 + 0.1251695329838D+02 0.1246934771604D+02 0.1242548158392D+02 0.1238551969900D+02 + 0.1234962071295D+02 0.1231793660373D+02 0.1229061214824D+02 0.1226778439767D+02 + 0.1224958215706D+02 0.1223612547078D+02 0.1222752511553D+02 0.1222388210258D+02 + 0.1222528719100D+02 0.1223182041366D+02 0.1224355061775D+02 0.1226053502171D+02 + 0.1228281879023D+02 0.1231043462935D+02 0.1234340240339D+02 0.1238172877543D+02 + 0.1242540687338D+02 0.1247441598324D+02 0.1252872127141D+02 0.1258827353770D+02 + 0.1265300900087D+02 0.1272284911822D+02 0.1279770044081D+02 0.1287745450601D+02 + 0.1296198776857D+02 0.1305116157186D+02 0.1314482216032D+02 0.1324280073454D+02 + 0.1334491354991D+02 0.1345096205988D+02 0.1356073310471D+02 0.1367399914649D+02 + 0.1379051855093D+02 0.1391003591655D+02 0.1403228245150D+02 0.1415697639825D+02 + 0.1428382350615D+02 0.1441251755180D+02 0.1454274090682D+02 0.1467416515265D+02 + 0.1480645174180D+02 0.1493925270450D+02 0.1507221140012D+02 0.1520496331175D+02 + 0.1533713688305D+02 0.1546835439544D+02 0.1559823288411D+02 0.1572638509088D+02 + 0.1585242045188D+02 0.1597594611769D+02 0.1609656800349D+02 0.1621389186673D+02 + 0.1632752440935D+02 0.1643707440175D+02 0.1654215382521D+02 0.1664237902974D+02 + 0.1673737190368D+02 0.1682676105166D+02 0.1691018297723D+02 0.1698728326633D+02 + 0.1705771776761D+02 0.1712115376582D+02 0.1717727114395D+02 0.1722576353007D+02 + 0.1726633942470D+02 0.1729872330429D+02 0.1732265669667D+02 0.1733789922408D+02 + 0.1734422960952D+02 0.1734144664198D+02 0.1732937009656D+02 0.1730784160492D+02 + 0.1727672547225D+02 0.1723590943644D+02 0.1718530536559D+02 0.1712484989008D+02 + 0.1705450496536D+02 0.1697425836203D+02 0.1688412407975D+02 0.1678414268193D+02 + 0.1667438154808D+02 0.1655493504124D+02 0.1642592458792D+02 0.1628749866833D+02 + 0.1613983271513D+02 0.1598312891883D+02 0.1581761593876D+02 0.1564354851859D+02 + 0.1546120700566D+02 0.1527089677411D+02 0.1507294755170D+02 0.1486771265109D+02 + 0.1465556810624D+02 0.1443691171558D+02 0.1421216199343D+02 0.1398175703206D+02 + 0.1374615327696D+02 0.1350582421831D+02 0.1326125900230D+02 0.1301296096613D+02 + 0.1276144610103D+02 0.1250724144826D+02 0.1225088343315D+02 0.1199291614280D+02 + 0.1173388955369D+02 0.1147435771520D+02 0.1121487689618D+02 0.1095600370143D+02 + 0.1069829316549D+02 0.1044229683153D+02 0.1018856082317D+02 0.9937623917321D+01 + 0.9690015626445D+01 0.9446254298643D+01 0.9206845244038D+01 0.8972278896087D+01 + 0.8743029016360D+01 0.8519550951297D+01 0.8302279949355D+01 0.8091629546790D+01 + 0.7887990030116D+01 0.7691726983014D+01 0.7503179925129D+01 0.7322661049902D+01 + 0.7150454068046D+01 0.6986813162918D+01 0.6831962063451D+01 0.6686093239819D+01 + 0.6549367226364D+01 0.6421912075717D+01 0.6303822947394D+01 0.6195161833447D+01 + 0.6095957423078D+01 0.6006205107394D+01 0.5925867124779D+01 0.5854872846611D+01 + 0.5793119202371D+01 0.5740471242429D+01 0.5696762836121D+01 0.5661797502031D+01 + 0.5635349366701D+01 0.5617164247353D+01 0.5606960853570D+01 0.5604432102259D+01 + 0.5609246539649D+01 0.5621049863505D+01 0.5639466538232D+01 0.5664101495024D+01 + 0.5694541908766D+01 0.5730359042993D+01 0.5771110153784D+01 0.5816340443192D+01 + 0.5865585052475D+01 0.5918371085180D+01 0.5974219649957D+01 0.6032647912832D+01 + 0.6093171148637D+01 0.6155304781260D+01 0.6218566402475D+01 0.6282477759234D+01 + 0.6346566699475D+01 0.6410369066815D+01 0.6473430534781D+01 0.6535308371644D+01 + 0.6595573127395D+01 0.6653810234872D+01 0.6709621517670D+01 0.6762626598041D+01 + 0.6812464198680D+01 0.6858793332986D+01 0.6901294379138D+01 0.6939670034070D+01 + 0.6973646144233D+01 0.7002972410830D+01 0.7027422967990D+01 0.7046796833200D+01 + 0.7060918230061D+01 0.7069636784259D+01 0.7072827594374D+01 0.7070391179926D+01 + 0.7062253309715D+01 0.7048364714231D+01 0.7028700686483D+01 0.7003260576238D+01 + 0.6972067183121D+01 0.6935166054562D+01 0.6892624694966D+01 0.6844531692843D+01 + 0.6790995772965D+01 0.6732144780827D+01 0.6668124606899D+01 0.6599098058289D+01 + 0.6525243685473D+01 0.6446754571799D+01 0.6363837093418D+01 0.6276709657188D+01 + 0.6185601423998D+01 0.6090751024726D+01 0.5992405275866D+01 0.5890817901556D+01 + 0.5786248268476D+01 0.5678960139726D+01 0.5569220453475D+01 0.5457298131760D+01 + 0.5343462924443D+01 0.5227984292928D+01 0.5111130337809D+01 0.4993166774192D+01 + 0.4874355958030D+01 0.4754955966341D+01 0.4635219733799D+01 0.4515394247714D+01 + 0.4395719803061D+01 0.4276429318764D+01 0.4157747716089D+01 0.4039891359594D+01 + 0.3923067560758D+01 0.3807474144035D+01 0.3693299074769D+01 0.3580720148118D+01 + 0.3469904737816D+01 0.3361009603367D+01 0.3254180754011D+01 0.3149553367571D+01 + 0.3047251762116D+01 0.2947389418162D+01 0.2850069049006D+01 0.2755382716614D+01 + 0.2663411990420D+01 0.2574228146230D+01 0.2487892402405D+01 0.2404456190400D+01 + 0.2323961456713D+01 0.2246440993268D+01 0.2171918793250D+01 0.2100410429420D+01 + 0.2031923451965D+01 0.1966457802972D+01 0.1904006244666D+01 0.1844554798640D+01 + 0.1788083193345D+01 0.1734565317240D+01 0.1683969675070D+01 0.1636259844862D+01 + 0.1591394933364D+01 0.1549330027746D+01 0.1510016641546D+01 0.1473403152964D+01 + 0.1439435233770D+01 0.1408056267219D+01 0.1379207753531D+01 0.1352829701650D+01 + 0.1328861006133D+01 0.1307239808175D+01 0.1287903839946D+01 0.1270790751526D+01 + 0.1255838419882D+01 0.1242985239474D+01 0.1232170394175D+01 0.1223334110328D+01 + 0.1216417890857D+01 0.1211364730456D+01 0.1208119311934D+01 0.1206628183910D+01 + 0.1206839920052D+01 0.1208705260142D+01 0.1212177233248D+01 0.1217211263310D+01 + 0.1223765257423D+01 0.1231799677111D+01 0.1241277592815D+01 0.1252164721788D+01 + 0.1264429449524D+01 0.1278042834732D+01 0.1292978597814D+01 0.1309213092627D+01 + 0.1326725261233D+01 0.1345496571135D+01 0.1365510934358D+01 0.1386754607532D+01 + 0.1409215426363D+01 0.1433003097507D+01 0.1458223277591D+01 0.1484860699421D+01 + 0.1512902583279D+01 0.1542338542721D+01 0.1573160498496D+01 0.1605362600812D+01 + 0.1638941160170D+01 0.1673894586973D+01 0.1710223340083D+01 0.1747929884514D+01 + 7 1012 + 1 0 -1 -511.89150 + 2 0 -1 -58.80097 + 2 1 1 -50.61290 + 2 1 -2 -49.69692 + 3 0 -1 -5.52718 + 3 1 1 -3.14309 + 3 1 -2 -3.03034 + 0.2123373461549D-04 0.2173914995400D-04 0.2225659296114D-04 0.2278634977738D-04 + 0.2332871334728D-04 0.2388398358121D-04 0.2445246752083D-04 0.2503447950857D-04 + 0.2563034136106D-04 0.2624038254674D-04 0.2686494036763D-04 0.2750436014548D-04 + 0.2815899541226D-04 0.2882920810522D-04 0.2951536876657D-04 0.3021785674791D-04 + 0.3093706041946D-04 0.3167337738432D-04 0.3242721469777D-04 0.3319898909177D-04 + 0.3398912720483D-04 0.3479806581728D-04 0.3562625209215D-04 0.3647414382175D-04 + 0.3734220968012D-04 0.3823092948144D-04 0.3914079444457D-04 0.4007230746391D-04 + 0.4102598338660D-04 0.4200234929636D-04 0.4300194480406D-04 0.4402532234512D-04 + 0.4507304748402D-04 0.4614569922601D-04 0.4724387033618D-04 0.4836816766617D-04 + 0.4951921248852D-04 0.5069764083903D-04 0.5190410386721D-04 0.5313926819498D-04 + 0.5440381628400D-04 0.5569844681152D-04 0.5702387505533D-04 0.5838083328767D-04 + 0.5977007117859D-04 0.6119235620880D-04 0.6264847409228D-04 0.6413922920902D-04 + 0.6566544504782D-04 0.6722796465978D-04 0.6882765112238D-04 0.7046538801462D-04 + 0.7214207990339D-04 0.7385865284136D-04 0.7561605487667D-04 0.7741525657465D-04 + 0.7925725155197D-04 0.8114305702331D-04 0.8307371436110D-04 0.8505028966841D-04 + 0.8707387436545D-04 0.8914558578994D-04 0.9126656781168D-04 0.9343799146165D-04 + 0.9566105557602D-04 0.9793698745538D-04 0.1002670435396D-03 0.1026525100984D-03 + 0.1050947039390D-03 0.1075949731294D-03 0.1101546977394D-03 0.1127752905997D-03 + 0.1154581980775D-03 0.1182049008719D-03 0.1210169148270D-03 0.1238957917652D-03 + 0.1268431203390D-03 0.1298605269045D-03 0.1329496764137D-03 0.1361122733297D-03 + 0.1393500625619D-03 0.1426648304247D-03 0.1460584056178D-03 0.1495326602303D-03 + 0.1530895107681D-03 0.1567309192056D-03 0.1604588940629D-03 0.1642754915072D-03 + 0.1681828164816D-03 0.1721830238593D-03 0.1762783196258D-03 0.1804709620887D-03 + 0.1847632631165D-03 0.1891575894056D-03 0.1936563637785D-03 0.1982620665115D-03 + 0.2029772366947D-03 0.2078044736231D-03 0.2127464382210D-03 0.2178058545005D-03 + 0.2229855110531D-03 0.2282882625778D-03 0.2337170314442D-03 0.2392748092933D-03 + 0.2449646586752D-03 0.2507897147258D-03 0.2567531868833D-03 0.2628583606444D-03 + 0.2691085993625D-03 0.2755073460880D-03 0.2820581254518D-03 0.2887645455935D-03 + 0.2956303001344D-03 0.3026591701977D-03 0.3098550264756D-03 0.3172218313454D-03 + 0.3247636410353D-03 0.3324846078408D-03 0.3403889823939D-03 0.3484811159850D-03 + 0.3567654629401D-03 0.3652465830528D-03 0.3739291440747D-03 0.3828179242637D-03 + 0.3919178149916D-03 0.4012338234146D-03 0.4107710752045D-03 0.4205348173457D-03 + 0.4305304209971D-03 0.4407633844209D-03 0.4512393359813D-03 0.4619640372121D-03 + 0.4729433859575D-03 0.4841834195856D-03 0.4956903182785D-03 0.5074704083979D-03 + 0.5195301659314D-03 0.5318762200182D-03 0.5445153565579D-03 0.5574545219044D-03 + 0.5707008266453D-03 0.5842615494708D-03 0.5981441411326D-03 0.6123562284955D-03 + 0.6269056186847D-03 0.6418003033287D-03 0.6570484629028D-03 0.6726584711734D-03 + 0.6886388997468D-03 0.7049985227240D-03 0.7217463214642D-03 0.7388914894603D-03 + 0.7564434373277D-03 0.7744117979097D-03 0.7928064315026D-03 0.8116374312024D-03 + 0.8309151283763D-03 0.8506500982622D-03 0.8708531656989D-03 0.8915354109894D-03 + 0.9127081759015D-03 0.9343830698083D-03 0.9565719759715D-03 0.9792870579714D-03 + 0.1002540766287D-02 0.1026345845027D-02 0.1050715338824D-02 0.1075662599879D-02 + 0.1101201295181D-02 0.1127345413883D-02 0.1154109274864D-02 0.1181507534450D-02 + 0.1209555194328D-02 0.1238267609637D-02 0.1267660497252D-02 0.1297749944251D-02 + 0.1328552416593D-02 0.1360084767981D-02 0.1392364248945D-02 0.1425408516127D-02 + 0.1459235641785D-02 0.1493864123514D-02 0.1529312894196D-02 0.1565601332181D-02 + 0.1602749271697D-02 0.1640777013510D-02 0.1679705335822D-02 0.1719555505429D-02 + 0.1760349289133D-02 0.1802108965417D-02 0.1844857336390D-02 0.1888617740010D-02 + 0.1933414062589D-02 0.1979270751585D-02 0.2026212828687D-02 0.2074265903209D-02 + 0.2123456185786D-02 0.2173810502385D-02 0.2225356308647D-02 0.2278121704551D-02 + 0.2332135449417D-02 0.2387426977257D-02 0.2444026412476D-02 0.2501964585936D-02 + 0.2561273051389D-02 0.2621984102285D-02 0.2684130788965D-02 0.2747746936258D-02 + 0.2812867161465D-02 0.2879526892772D-02 0.2947762388071D-02 0.3017610754222D-02 + 0.3089109966753D-02 0.3162298890003D-02 0.3237217297741D-02 0.3313905894238D-02 + 0.3392406335837D-02 0.3472761253004D-02 0.3555014272883D-02 0.3639210042377D-02 + 0.3725394251736D-02 0.3813613658698D-02 0.3903916113173D-02 0.3996350582488D-02 + 0.4090967177209D-02 0.4187817177547D-02 0.4286953060364D-02 0.4388428526794D-02 + 0.4492298530489D-02 0.4598619306504D-02 0.4707448400838D-02 0.4818844700646D-02 + 0.4932868465127D-02 0.5049581357120D-02 0.5169046475404D-02 0.5291328387739D-02 + 0.5416493164639D-02 0.5544608413917D-02 0.5675743316002D-02 0.5809968660057D-02 + 0.5947356880904D-02 0.6087982096781D-02 0.6231920147946D-02 0.6379248636155D-02 + 0.6530046965011D-02 0.6684396381234D-02 0.6842380016839D-02 0.7004082932273D-02 + 0.7169592160503D-02 0.7338996752102D-02 0.7512387821327D-02 0.7689858593235D-02 + 0.7871504451850D-02 0.8057422989391D-02 0.8247714056607D-02 0.8442479814225D-02 + 0.8641824785540D-02 0.8845855910175D-02 0.9054682599025D-02 0.9268416790430D-02 + 0.9487173007575D-02 0.9711068417172D-02 0.9940222889430D-02 0.1017475905935D-01 + 0.1041480238936D-01 0.1066048123337D-01 0.1091192690214D-01 0.1116927373022D-01 + 0.1143265914425D-01 0.1170222373276D-01 0.1197811131760D-01 0.1226046902681D-01 + 0.1254944736912D-01 0.1284520031015D-01 0.1314788535014D-01 0.1345766360348D-01 + 0.1377469987990D-01 0.1409916276750D-01 0.1443122471744D-01 0.1477106213063D-01 + 0.1511885544620D-01 0.1547478923187D-01 0.1583905227632D-01 0.1621183768351D-01 + 0.1659334296907D-01 0.1698377015868D-01 0.1738332588869D-01 0.1779222150874D-01 + 0.1821067318670D-01 0.1863890201578D-01 0.1907713412394D-01 0.1952560078568D-01 + 0.1998453853608D-01 0.2045418928739D-01 0.2093480044805D-01 0.2142662504416D-01 + 0.2192992184360D-01 0.2244495548276D-01 0.2297199659585D-01 0.2351132194704D-01 + 0.2406321456527D-01 0.2462796388197D-01 0.2520586587156D-01 0.2579722319499D-01 + 0.2640234534617D-01 0.2702154880148D-01 0.2765515717239D-01 0.2830350136121D-01 + 0.2896691972007D-01 0.2964575821319D-01 0.3034037058244D-01 0.3105111851634D-01 + 0.3177837182251D-01 0.3252250860359D-01 0.3328391543683D-01 0.3406298755727D-01 + 0.3486012904465D-01 0.3567575301409D-01 0.3651028181063D-01 0.3736414720771D-01 + 0.3823779060956D-01 0.3913166325773D-01 0.4004622644169D-01 0.4098195171364D-01 + 0.4193932110758D-01 0.4291882736274D-01 0.4392097415138D-01 0.4494627631115D-01 + 0.4599526008193D-01 0.4706846334735D-01 0.4816643588104D-01 0.4928973959763D-01 + 0.5043894880863D-01 0.5161465048329D-01 0.5281744451445D-01 0.5404794398948D-01 + 0.5530677546647D-01 0.5659457925562D-01 0.5791200970601D-01 0.5925973549779D-01 + 0.6063843993988D-01 0.6204882127328D-01 0.6349159298001D-01 0.6496748409788D-01 + 0.6647723954103D-01 0.6802162042643D-01 0.6960140440641D-01 0.7121738600725D-01 + 0.7287037697395D-01 0.7456120662128D-01 0.7629072219118D-01 0.7805978921657D-01 + 0.7986929189166D-01 0.8172013344892D-01 0.8361323654265D-01 0.8554954363940D-01 + 0.8753001741513D-01 0.8955564115940D-01 0.9162741918654D-01 0.9374637725383D-01 + 0.9591356298698D-01 0.9813004631275D-01 0.1003969198990D+00 0.1027152996019D+00 + 0.1050863249211D+00 0.1075111594618D+00 0.1099909914051D+00 0.1125270339855D+00 + 0.1151205259766D+00 0.1177727321842D+00 0.1204849439476D+00 0.1232584796489D+00 + 0.1260946852301D+00 0.1289949347182D+00 0.1319606307590D+00 0.1349932051583D+00 + 0.1380941194317D+00 0.1412648653632D+00 0.1445069655708D+00 0.1478219740820D+00 + 0.1512114769165D+00 0.1546770926778D+00 0.1582204731535D+00 0.1618433039236D+00 + 0.1655473049771D+00 0.1693342313383D+00 0.1732058737000D+00 0.1771640590662D+00 + 0.1812106514032D+00 0.1853475522988D+00 0.1895767016304D+00 0.1939000782413D+00 + 0.1983197006251D+00 0.2028376276193D+00 0.2074559591063D+00 0.2121768367234D+00 + 0.2170024445803D+00 0.2219350099852D+00 0.2269768041788D+00 0.2321301430764D+00 + 0.2373973880172D+00 0.2427809465221D+00 0.2482832730585D+00 0.2539068698131D+00 + 0.2596542874715D+00 0.2655281260047D+00 0.2715310354636D+00 0.2776657167793D+00 + 0.2839349225700D+00 0.2903414579550D+00 0.2968881813739D+00 0.3035780054119D+00 + 0.3104138976312D+00 0.3173988814070D+00 0.3245360367687D+00 0.3318285012460D+00 + 0.3392794707188D+00 0.3468922002717D+00 0.3546700050516D+00 0.3626162611285D+00 + 0.3707344063591D+00 0.3790279412529D+00 0.3875004298396D+00 0.3961555005386D+00 + 0.4049968470283D+00 0.4140282291162D+00 0.4232534736091D+00 0.4326764751811D+00 + 0.4423011972414D+00 0.4521316727988D+00 0.4621720053237D+00 0.4724263696067D+00 + 0.4828990126121D+00 0.4935942543268D+00 0.5045164886027D+00 0.5156701839924D+00 + 0.5270598845772D+00 0.5386902107861D+00 0.5505658602051D+00 0.5626916083760D+00 + 0.5750723095830D+00 0.5877128976270D+00 0.6006183865849D+00 0.6137938715547D+00 + 0.6272445293836D+00 0.6409756193782D+00 0.6549924839961D+00 0.6693005495166D+00 + 0.6839053266899D+00 0.6988124113627D+00 0.7140274850788D+00 0.7295563156538D+00 + 0.7454047577210D+00 0.7615787532478D+00 0.7780843320207D+00 0.7949276120969D+00 + 0.8121148002200D+00 0.8296521921997D+00 0.8475461732513D+00 0.8658032182945D+00 + 0.8844298922086D+00 0.9034328500427D+00 0.9228188371772D+00 0.9425946894360D+00 + 0.9627673331456D+00 0.9833437851400D+00 0.1004331152707D+01 0.1025736633476D+01 + 0.1047567515241D+01 0.1069831175720D+01 0.1092535082243D+01 0.1115686791375D+01 + 0.1139293948457D+01 0.1163364287075D+01 0.1187905628445D+01 0.1212925880722D+01 + 0.1238433038208D+01 0.1264435180485D+01 0.1290940471443D+01 0.1317957158220D+01 + 0.1345493570030D+01 0.1373558116898D+01 0.1402159288280D+01 0.1431305651569D+01 + 0.1461005850494D+01 0.1491268603389D+01 0.1522102701342D+01 0.1553517006218D+01 + 0.1585520448546D+01 0.1618122025271D+01 0.1651330797361D+01 0.1685155887276D+01 + 0.1719606476280D+01 0.1754691801602D+01 0.1790421153434D+01 0.1826803871767D+01 + 0.1863849343063D+01 0.1901566996742D+01 0.1939966301501D+01 0.1979056761446D+01 + 0.2018847912032D+01 0.2059349315815D+01 0.2100570557999D+01 0.2142521241790D+01 + 0.2185210983528D+01 0.2228649407614D+01 0.2272846141215D+01 0.2317810808747D+01 + 0.2363553026124D+01 0.2410082394775D+01 0.2457408495423D+01 0.2505540881617D+01 + 0.2554489073015D+01 0.2604262548407D+01 0.2654870738488D+01 0.2706323018355D+01 + 0.2758628699743D+01 0.2811797022979D+01 0.2865837148659D+01 0.2920758149043D+01 + 0.2976568999160D+01 0.3033278567615D+01 0.3090895607108D+01 0.3149428744640D+01 + 0.3208886471423D+01 0.3269277132479D+01 0.3330608915918D+01 0.3392889841912D+01 + 0.3456127751341D+01 0.3520330294118D+01 0.3585504917195D+01 0.3651658852234D+01 + 0.3718799102956D+01 0.3786932432154D+01 0.3856065348377D+01 0.3926204092282D+01 + 0.3997354622651D+01 0.4069522602076D+01 0.4142713382310D+01 0.4216931989288D+01 + 0.4292183107814D+01 0.4368471065927D+01 0.4445799818928D+01 0.4524172933100D+01 + 0.4603593569097D+01 0.4684064465021D+01 0.4765587919192D+01 0.4848165772611D+01 + 0.4931799391130D+01 0.5016489647323D+01 0.5102236902085D+01 0.5189040985952D+01 + 0.5276901180158D+01 0.5365816197444D+01 0.5455784162617D+01 0.5546802592894D+01 + 0.5638868378017D+01 0.5731977760181D+01 0.5826126313769D+01 0.5921308924927D+01 + 0.6017519770983D+01 0.6114752299744D+01 0.6212999208681D+01 0.6312252424025D+01 + 0.6412503079799D+01 0.6513741496818D+01 0.6615957161666D+01 0.6719138705689D+01 + 0.6823273884037D+01 0.6928349554769D+01 0.7034351658067D+01 0.7141265195588D+01 + 0.7249074209985D+01 0.7357761764637D+01 0.7467309923627D+01 0.7577699732003D+01 + 0.7688911196366D+01 0.7800923265826D+01 0.7913713813378D+01 0.8027259617727D+01 + 0.8141536345630D+01 0.8256518534789D+01 0.8372179577355D+01 0.8488491704090D+01 + 0.8605425969248D+01 0.8722952236222D+01 0.8841039164025D+01 0.8959654194655D+01 + 0.9078763541413D+01 0.9198332178230D+01 0.9318323830066D+01 0.9438700964464D+01 + 0.9559424784293D+01 0.9680455221780D+01 0.9801750933887D+01 0.9923269299099D+01 + 0.1004496641570D+02 0.1016679710163D+02 0.1028871489593D+02 0.1041067206198D+02 + 0.1053261959239D+02 0.1065450721594D+02 0.1077628340626D+02 0.1089789539267D+02 + 0.1101928917306D+02 0.1114040952889D+02 0.1126120004259D+02 0.1138160311709D+02 + 0.1150155999788D+02 0.1162101079752D+02 0.1173989452270D+02 0.1185814910389D+02 + 0.1197571142774D+02 0.1209251737221D+02 0.1220850184455D+02 0.1232359882222D+02 + 0.1243774139668D+02 0.1255086182033D+02 0.1266289155645D+02 0.1277376133233D+02 + 0.1288340119558D+02 0.1299174057364D+02 0.1309870833671D+02 0.1320423286383D+02 + 0.1330824211245D+02 0.1341066369131D+02 0.1351142493681D+02 0.1361045299271D+02 + 0.1370767489335D+02 0.1380301765027D+02 0.1389640834224D+02 0.1398777420882D+02 + 0.1407704274716D+02 0.1416414181234D+02 0.1424899972093D+02 0.1433154535791D+02 + 0.1441170828680D+02 0.1448941886294D+02 0.1456460834990D+02 0.1463720903887D+02 + 0.1470715437095D+02 0.1477437906225D+02 0.1483881923166D+02 0.1490041253114D+02 + 0.1495909827839D+02 0.1501481759178D+02 0.1506751352732D+02 0.1511713121747D+02 + 0.1516361801165D+02 0.1520692361818D+02 0.1524700024742D+02 0.1528380275595D+02 + 0.1531728879140D+02 0.1534741893776D+02 0.1537415686084D+02 0.1539746945363D+02 + 0.1541732698111D+02 0.1543370322439D+02 0.1544657562364D+02 0.1545592541956D+02 + 0.1546173779302D+02 0.1546400200242D+02 0.1546271151843D+02 0.1545786415570D+02 + 0.1544946220111D+02 0.1543751253809D+02 0.1542202676661D+02 0.1540302131844D+02 + 0.1538051756708D+02 0.1535454193202D+02 0.1532512597682D+02 0.1529230650045D+02 + 0.1525612562157D+02 0.1521663085508D+02 0.1517387518057D+02 0.1512791710213D+02 + 0.1507882069905D+02 0.1502665566690D+02 0.1497149734847D+02 0.1491342675424D+02 + 0.1485253057170D+02 0.1478890116319D+02 0.1472263655178D+02 0.1465384039476D+02 + 0.1458262194423D+02 0.1450909599456D+02 0.1443338281613D+02 0.1435560807511D+02 + 0.1427590273888D+02 0.1419440296685D+02 0.1411124998625D+02 0.1402658995277D+02 + 0.1394057379573D+02 0.1385335704764D+02 0.1376509965795D+02 0.1367596579089D+02 + 0.1358612360737D+02 0.1349574503081D+02 0.1340500549696D+02 0.1331408368786D+02 + 0.1322316124986D+02 0.1313242249599D+02 0.1304205409292D+02 0.1295224473262D+02 + 0.1286318478926D+02 0.1277506596148D+02 0.1268808090072D+02 0.1260242282594D+02 + 0.1251828512526D+02 0.1243586094535D+02 0.1235534276899D+02 0.1227692198172D+02 + 0.1220078842830D+02 0.1212712995982D+02 0.1205613197253D+02 0.1198797693913D+02 + 0.1192284393379D+02 0.1186090815186D+02 0.1180234042546D+02 0.1174730673615D+02 + 0.1169596772603D+02 0.1164847820834D+02 0.1160498667924D+02 0.1156563483188D+02 + 0.1153055707436D+02 0.1149988005301D+02 0.1147372218250D+02 0.1145219318434D+02 + 0.1143539363525D+02 0.1142341452711D+02 0.1141633683999D+02 0.1141423112993D+02 + 0.1141715713298D+02 0.1142516338731D+02 0.1143828687474D+02 0.1145655268355D+02 + 0.1147997369390D+02 0.1150855028761D+02 0.1154227008374D+02 0.1158110770138D+02 + 0.1162502455129D+02 0.1167396865756D+02 0.1172787451079D+02 0.1178666295396D+02 + 0.1185024110228D+02 0.1191850229803D+02 0.1199132610159D+02 0.1206857831946D+02 + 0.1215011107019D+02 0.1223576288907D+02 0.1232535887199D+02 0.1241871085933D+02 + 0.1251561765997D+02 0.1261586531600D+02 0.1271922740805D+02 0.1282546540151D+02 + 0.1293432903330D+02 0.1304555673916D+02 0.1315887612096D+02 0.1327400445348D+02 + 0.1339064923005D+02 0.1350850874625D+02 0.1362727272054D+02 0.1374662295087D+02 + 0.1386623400591D+02 0.1398577394943D+02 0.1410490509638D+02 0.1422328479880D+02 + 0.1434056625987D+02 0.1445639937388D+02 0.1457043159027D+02 0.1468230879914D+02 + 0.1479167623614D+02 0.1489817940404D+02 0.1500146500841D+02 0.1510118190471D+02 + 0.1519698205391D+02 0.1528852148379D+02 0.1537546125281D+02 0.1545746841364D+02 + 0.1553421697307D+02 0.1560538884523D+02 0.1567067479483D+02 0.1572977536717D+02 + 0.1578240180176D+02 0.1582827692612D+02 0.1586713602663D+02 0.1589872769311D+02 + 0.1592281463392D+02 0.1593917445849D+02 0.1594760042409D+02 0.1594790214378D+02 + 0.1593990625272D+02 0.1592345702984D+02 0.1589841697221D+02 0.1586466731948D+02 + 0.1582210852585D+02 0.1577066067732D+02 0.1571026385193D+02 0.1564087842120D+02 + 0.1556248529064D+02 0.1547508607802D+02 0.1537870322780D+02 0.1527338006062D+02 + 0.1515918075676D+02 0.1503619027308D+02 0.1490451419267D+02 0.1476427850715D+02 + 0.1461562933169D+02 0.1445873255288D+02 0.1429377341010D+02 0.1412095601137D+02 + 0.1394050278444D+02 0.1375265386499D+02 0.1355766642312D+02 0.1335581393054D+02 + 0.1314738537038D+02 0.1293268439219D+02 0.1271202841511D+02 0.1248574768189D+02 + 0.1225418426740D+02 0.1201769104500D+02 0.1177663061449D+02 0.1153137419578D+02 + 0.1128230049248D+02 0.1102979452961D+02 0.1077424647032D+02 0.1051605041603D+02 + 0.1025560319513D+02 0.9993303145083D+01 0.9729548892983D+01 0.9464738139829D+01 + 0.9199266453606D+01 0.8933526076402D+01 0.8667904750745D+01 0.8402784570301D+01 + 0.8138540859996D+01 0.7875541090527D+01 0.7614143832090D+01 0.7354697751983D+01 + 0.7097540660550D+01 0.6842998609696D+01 0.6591385047920D+01 0.6343000035605D+01 + 0.6098129523858D+01 0.5857044699944D+01 0.5620001401934D+01 0.5387239604814D+01 + 0.5158982979846D+01 0.4935438528573D+01 0.4716796292366D+01 0.4503229137976D+01 + 0.4294892619056D+01 0.4091924913152D+01 0.3894446833193D+01 0.3702561912045D+01 + 0.3516356558237D+01 0.3335900280537D+01 0.3161245978670D+01 0.2992430297065D+01 + 0.2829474038194D+01 0.2672382631762D+01 0.2521146655720D+01 0.2375742404881D+01 + 0.2236132502695D+01 0.2102266551639D+01 0.1974081817541D+01 0.1851503943111D+01 + 0.1734447685940D+01 0.1622817676200D+01 0.1516509189368D+01 0.1415408929331D+01 + 0.1319395817360D+01 0.1228341782531D+01 0.1142112549373D+01 0.1060568418635D+01 + 0.9835650373019D+00 0.9109541541726D+00 0.8425843575459D+00 0.7783017917968D+00 + 0.7179508498817D+00 0.6613748390683D+00 0.6084166174653D+00 0.5589191992012D+00 + 0.5127263263911D+00 0.4696830063190D+00 0.4296360125529D+00 0.3924343490009D+00 + 0.3579296762027D+00 0.3259766994340D+00 0.2964335184742D+00 0.2691619391536D+00 + 0.2440277470488D+00 0.2209009439361D+00 0.1996559478365D+00 0.1801717576938D+00 + 0.1623320839184D+00 0.1460254461990D+00 0.1311452401368D+00 0.1175897743854D+00 + 0.1052622800912D+00 0.9407089451527D-01 0.8392862078550D-01 0.7475326577690D-01 + 0.6646735814128D-01 0.5899804851766D-01 0.5227699394346D-01 0.4624022845899D-01 + 0.4082802185442D-01 0.3598472845105D-01 0.3165862773800D-01 0.2780175860384D-01 + 0.2436974881146D-01 0.2132164126495D-01 0.1861971851162D-01 0.1622932681167D-01 + 0.1411870099424D-01 0.1225879120292D-01 0.1062309251766D-01 0.9187478324824D-02 + 0.7930038194170D-02 0.6830920911119D-02 0.5872183206948D-02 0.5037644628161D-02 + 0.4312748890659D-02 0.3684431974697D-02 0.3140997133459D-02 0.2671996911721D-02 + 0.2268122201696D-02 0.1921098300832D-02 0.1623587881022D-02 0.1369100730387D-02 + 0.1151910087150D-02 0.9669753500508D-03 0.8098709208516D-03 0.6767209113939D-03 + 0.5641394300578D-03 0.4691761498429D-03 0.3892668522563D-03 0.3221886372696D-03 + 0.2660194893607D-03 0.2191018926233D-03 0.1800101936858D-03 0.1475214192933D-03 + 0.1205892654847D-03 0.9832098695562D-04 0.7995692809159D-04 0.6485245095860D-04 + 0.5246202996510D-04 0.4232529769133D-04 0.3405484129524D-04 0.2732556374477D-04 + 0.2186543872353D-04 0.1744750226736D-04 0.1388293789508D-04 0.1101512510421D-04 + 0.8714533541124D-05 0.6874356872787D-05 0.5406791351919D-05 0.4239874261002D-05 + 0.3314806839624D-05 0.2583694952262D-05 0.2007648657315D-05 0.1555189018603D-05 + 0.1200916989437D-05 0.9244050332163D-06 0.7092773630705D-06 0.5424493283134D-06 + 0.4135005904089D-06 0.3141603589352D-06 0.2378861413798D-06 0.1795202409555D-06 + 0.1350106538765D-06 0.1011851095086D-06 0.7556879909866D-07 0.5623788451178D-07 + 0.4170219815814D-07 0.3081166707088D-07 0.2268194336078D-07 0.1663552297805D-07 + 0.1215530542863D-07 0.8848107127806D-08 0.6416106613217D-08 0.4634585104140D-08 + 0.3334643304910D-08 0.2389835688104D-08 0.1705876062949D-08 0.1212741020005D-08 + 0.8586376559590D-09 0.6054146003728D-09 0.4250856698627D-09 0.2972075512731D-09 + 0.2069101606973D-09 0.1434236365115D-09 0.9898160505409D-10 0.6800804519963D-10 + 0.4651712787494D-10 0.3167310042586D-10 0.2146695649341D-10 0.1448079937139D-10 + 0.9722622861678D-11 0.6496070631129D-11 0.4319651023999D-11 0.2858591661735D-11 + 0.1882503214946D-11 0.1233598363270D-11 0.8043412065319D-12 0.5218060130221D-12 + 0.3367856512696D-12 0.2162455335843D-12 0.1381220475631D-12 0.8775552000331D-13 diff --git a/Test/Fe16_non_collinear/v_fe16.2 b/Test/Fe16_non_collinear/v_fe16.2 new file mode 100755 index 000000000..f3c4e967f --- /dev/null +++ b/Test/Fe16_non_collinear/v_fe16.2 @@ -0,0 +1,1542 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Fe. + 2 0.0000000000000D+00 + LSMS: xx z= 26. xvalws= 5.22926 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728400909D+02-0.5199725115555D+02-0.5199721790459D+02-0.5199718425142D+02 +-0.5199715019116D+02-0.5199711571889D+02-0.5199708082964D+02-0.5199704551834D+02 +-0.5199700977990D+02-0.5199697360915D+02-0.5199693700086D+02-0.5199689994973D+02 +-0.5199686245042D+02-0.5199682449748D+02-0.5199678608545D+02-0.5199674720876D+02 +-0.5199670786180D+02-0.5199666803887D+02-0.5199662773421D+02-0.5199658694201D+02 +-0.5199654565635D+02-0.5199650387127D+02-0.5199646158073D+02-0.5199641877860D+02 +-0.5199637545872D+02-0.5199633161480D+02-0.5199628724051D+02-0.5199624232942D+02 +-0.5199619687506D+02-0.5199615087084D+02-0.5199610431012D+02-0.5199605718616D+02 +-0.5199600949214D+02-0.5199596122116D+02-0.5199591236626D+02-0.5199586292036D+02 +-0.5199581287632D+02-0.5199576222688D+02-0.5199571096474D+02-0.5199565908248D+02 +-0.5199560657259D+02-0.5199555342748D+02-0.5199549963947D+02-0.5199544520078D+02 +-0.5199539010352D+02-0.5199533433975D+02-0.5199527790139D+02-0.5199522078028D+02 +-0.5199516296816D+02-0.5199510445666D+02-0.5199504523733D+02-0.5199498530160D+02 +-0.5199492464081D+02-0.5199486324617D+02-0.5199480110883D+02-0.5199473821977D+02 +-0.5199467456990D+02-0.5199461015004D+02-0.5199454495085D+02-0.5199447896290D+02 +-0.5199441217666D+02-0.5199434458246D+02-0.5199427617052D+02-0.5199420693096D+02 +-0.5199413685375D+02-0.5199406592876D+02-0.5199399414573D+02-0.5199392149428D+02 +-0.5199384796390D+02-0.5199377354396D+02-0.5199369822368D+02-0.5199362199218D+02 +-0.5199354483843D+02-0.5199346675127D+02-0.5199338771940D+02-0.5199330773139D+02 +-0.5199322677567D+02-0.5199314484053D+02-0.5199306191412D+02-0.5199297798443D+02 +-0.5199289303934D+02-0.5199280706654D+02-0.5199272005361D+02-0.5199263198797D+02 +-0.5199254285685D+02-0.5199245264737D+02-0.5199236134649D+02-0.5199226894099D+02 +-0.5199217541751D+02-0.5199208076251D+02-0.5199198496230D+02-0.5199188800302D+02 +-0.5199178987064D+02-0.5199169055096D+02-0.5199159002963D+02-0.5199148829207D+02 +-0.5199138532359D+02-0.5199128110928D+02-0.5199117563407D+02-0.5199106888269D+02 +-0.5199096083969D+02-0.5199085148944D+02-0.5199074081613D+02-0.5199062880373D+02 +-0.5199051543604D+02-0.5199040069664D+02-0.5199028456895D+02-0.5199016703615D+02 +-0.5199004808124D+02-0.5198992768700D+02-0.5198980583600D+02-0.5198968251063D+02 +-0.5198955769302D+02-0.5198943136512D+02-0.5198930350863D+02-0.5198917410506D+02 +-0.5198904313569D+02-0.5198891058155D+02-0.5198877642345D+02-0.5198864064200D+02 +-0.5198850321751D+02-0.5198836413012D+02-0.5198822335968D+02-0.5198808088582D+02 +-0.5198793668793D+02-0.5198779074512D+02-0.5198764303627D+02-0.5198749354000D+02 +-0.5198734223467D+02-0.5198718909837D+02-0.5198703410894D+02-0.5198687724393D+02 +-0.5198671848065D+02-0.5198655779610D+02-0.5198639516703D+02-0.5198623056988D+02 +-0.5198606398084D+02-0.5198589537577D+02-0.5198572473026D+02-0.5198555201962D+02 +-0.5198537721883D+02-0.5198520030257D+02-0.5198502124524D+02-0.5198484002091D+02 +-0.5198465660333D+02-0.5198447096595D+02-0.5198428308188D+02-0.5198409292391D+02 +-0.5198390046450D+02-0.5198370567579D+02-0.5198350852955D+02-0.5198330899725D+02 +-0.5198310704998D+02-0.5198290265850D+02-0.5198269579318D+02-0.5198248642408D+02 +-0.5198227452087D+02-0.5198206005285D+02-0.5198184298896D+02-0.5198162329776D+02 +-0.5198140094741D+02-0.5198117590571D+02-0.5198094814005D+02-0.5198071761744D+02 +-0.5198048430449D+02-0.5198024816738D+02-0.5198000917191D+02-0.5197976728344D+02 +-0.5197952246692D+02-0.5197927468690D+02-0.5197902390745D+02-0.5197877009224D+02 +-0.5197851320449D+02-0.5197825320698D+02-0.5197799006201D+02-0.5197772373146D+02 +-0.5197745417673D+02-0.5197718135875D+02-0.5197690523796D+02-0.5197662577437D+02 +-0.5197634292744D+02-0.5197605665620D+02-0.5197576691913D+02-0.5197547367423D+02 +-0.5197517687900D+02-0.5197487649041D+02-0.5197457246489D+02-0.5197426475838D+02 +-0.5197395332627D+02-0.5197363812338D+02-0.5197331910403D+02-0.5197299622195D+02 +-0.5197266943031D+02-0.5197233868173D+02-0.5197200392824D+02-0.5197166512128D+02 +-0.5197132221174D+02-0.5197097514984D+02-0.5197062388528D+02-0.5197026836709D+02 +-0.5196990854370D+02-0.5196954436291D+02-0.5196917577189D+02-0.5196880271716D+02 +-0.5196842514461D+02-0.5196804299945D+02-0.5196765622622D+02-0.5196726476881D+02 +-0.5196686857041D+02-0.5196646757354D+02-0.5196606171998D+02-0.5196565095085D+02 +-0.5196523520651D+02-0.5196481442664D+02-0.5196438855015D+02-0.5196395751522D+02 +-0.5196352125928D+02-0.5196307971901D+02-0.5196263283028D+02-0.5196218052823D+02 +-0.5196172274718D+02-0.5196125942066D+02-0.5196079048138D+02-0.5196031586126D+02 +-0.5195983549135D+02-0.5195934930191D+02-0.5195885722231D+02-0.5195835918107D+02 +-0.5195785510585D+02-0.5195734492343D+02-0.5195682855969D+02-0.5195630593961D+02 +-0.5195577698725D+02-0.5195524162577D+02-0.5195469977736D+02-0.5195415136330D+02 +-0.5195359630387D+02-0.5195303451841D+02-0.5195246592528D+02-0.5195189044181D+02 +-0.5195130798435D+02-0.5195071846824D+02-0.5195012180777D+02-0.5194951791619D+02 +-0.5194890670569D+02-0.5194828808741D+02-0.5194766197137D+02-0.5194702826653D+02 +-0.5194638688071D+02-0.5194573772064D+02-0.5194508069188D+02-0.5194441569885D+02 +-0.5194374264482D+02-0.5194306143187D+02-0.5194237196087D+02-0.5194167413149D+02 +-0.5194096784220D+02-0.5194025299021D+02-0.5193952947146D+02-0.5193879718066D+02 +-0.5193805601119D+02-0.5193730585519D+02-0.5193654660341D+02-0.5193577814533D+02 +-0.5193500036904D+02-0.5193421316129D+02-0.5193341640742D+02-0.5193260999141D+02 +-0.5193179379578D+02-0.5193096770164D+02-0.5193013158865D+02-0.5192928533501D+02 +-0.5192842881739D+02-0.5192756191098D+02-0.5192668448947D+02-0.5192579642497D+02 +-0.5192489758803D+02-0.5192398784765D+02-0.5192306707119D+02-0.5192213512442D+02 +-0.5192119187145D+02-0.5192023717474D+02-0.5191927089505D+02-0.5191829289146D+02 +-0.5191730302133D+02-0.5191630114025D+02-0.5191528710207D+02-0.5191426075883D+02 +-0.5191322196077D+02-0.5191217055632D+02-0.5191110639202D+02-0.5191002931255D+02 +-0.5190893916069D+02-0.5190783577729D+02-0.5190671900126D+02-0.5190558866954D+02 +-0.5190444461705D+02-0.5190328667673D+02-0.5190211467945D+02-0.5190092845399D+02 +-0.5189972782709D+02-0.5189851262330D+02-0.5189728266508D+02-0.5189603777267D+02 +-0.5189477776415D+02-0.5189350245533D+02-0.5189221165981D+02-0.5189090518885D+02 +-0.5188958285145D+02-0.5188824445423D+02-0.5188688980147D+02-0.5188551869503D+02 +-0.5188413093435D+02-0.5188272631641D+02-0.5188130463569D+02-0.5187986568418D+02 +-0.5187840925129D+02-0.5187693512386D+02-0.5187544308611D+02-0.5187393291962D+02 +-0.5187240440329D+02-0.5187085731330D+02-0.5186929142309D+02-0.5186770650332D+02 +-0.5186610232183D+02-0.5186447864362D+02-0.5186283523081D+02-0.5186117184259D+02 +-0.5185948823518D+02-0.5185778416183D+02-0.5185605937277D+02-0.5185431361514D+02 +-0.5185254663297D+02-0.5185075816718D+02-0.5184894795548D+02-0.5184711573237D+02 +-0.5184526122909D+02-0.5184338417356D+02-0.5184148429039D+02-0.5183956130079D+02 +-0.5183761492255D+02-0.5183564486998D+02-0.5183365085389D+02-0.5183163258155D+02 +-0.5182958975660D+02-0.5182752207907D+02-0.5182542924529D+02-0.5182331094785D+02 +-0.5182116687559D+02-0.5181899671350D+02-0.5181680014270D+02-0.5181457684041D+02 +-0.5181232647986D+02-0.5181004873028D+02-0.5180774325683D+02-0.5180540972054D+02 +-0.5180304777830D+02-0.5180065708277D+02-0.5179823728232D+02-0.5179578802103D+02 +-0.5179330893860D+02-0.5179079967027D+02-0.5178825984684D+02-0.5178568909453D+02 +-0.5178308703501D+02-0.5178045328526D+02-0.5177778745757D+02-0.5177508915948D+02 +-0.5177235799366D+02-0.5176959355795D+02-0.5176679544522D+02-0.5176396324334D+02 +-0.5176109653512D+02-0.5175819489823D+02-0.5175525790517D+02-0.5175228512318D+02 +-0.5174927611419D+02-0.5174623043474D+02-0.5174314763592D+02-0.5174002726332D+02 +-0.5173686885694D+02-0.5173367195115D+02-0.5173043607457D+02-0.5172716075006D+02 +-0.5172384549462D+02-0.5172048981932D+02-0.5171709322923D+02-0.5171365522335D+02 +-0.5171017529452D+02-0.5170665292940D+02-0.5170308760833D+02-0.5169947880525D+02 +-0.5169582598771D+02-0.5169212861671D+02-0.5168838614662D+02-0.5168459802518D+02 +-0.5168076369333D+02-0.5167688258518D+02-0.5167295412791D+02-0.5166897774168D+02 +-0.5166495283960D+02-0.5166087882755D+02-0.5165675510418D+02-0.5165258106080D+02 +-0.5164835608125D+02-0.5164407954186D+02-0.5163975081138D+02-0.5163536925080D+02 +-0.5163093421337D+02-0.5162644504442D+02-0.5162190108131D+02-0.5161730165335D+02 +-0.5161264608164D+02-0.5160793367906D+02-0.5160316375011D+02-0.5159833559084D+02 +-0.5159344848875D+02-0.5158850172268D+02-0.5158349456272D+02-0.5157842627009D+02 +-0.5157329609709D+02-0.5156810328692D+02-0.5156284707365D+02-0.5155752668206D+02 +-0.5155214132756D+02-0.5154669021608D+02-0.5154117254396D+02-0.5153558749786D+02 +-0.5152993425461D+02-0.5152421198113D+02-0.5151841983433D+02-0.5151255696093D+02 +-0.5150662249744D+02-0.5150061557002D+02-0.5149453529428D+02-0.5148838077528D+02 +-0.5148215110737D+02-0.5147584537403D+02-0.5146946264782D+02-0.5146300199022D+02 +-0.5145646245151D+02-0.5144984307067D+02-0.5144314287525D+02-0.5143636088122D+02 +-0.5142949609291D+02-0.5142254750281D+02-0.5141551409151D+02-0.5140839482753D+02 +-0.5140118866721D+02-0.5139389455459D+02-0.5138651142128D+02-0.5137903818632D+02 +-0.5137147375605D+02-0.5136381702401D+02-0.5135606687078D+02-0.5134822216388D+02 +-0.5134028175756D+02-0.5133224449278D+02-0.5132410919702D+02-0.5131587468413D+02 +-0.5130753975423D+02-0.5129910319357D+02-0.5129056377438D+02-0.5128192025477D+02 +-0.5127317137854D+02-0.5126431587514D+02-0.5125535245940D+02-0.5124627983153D+02 +-0.5123709667690D+02-0.5122780166596D+02-0.5121839345403D+02-0.5120887068125D+02 +-0.5119923197240D+02-0.5118947593678D+02-0.5117960116805D+02-0.5116960624416D+02 +-0.5115948972712D+02-0.5114925016296D+02-0.5113888608154D+02-0.5112839599644D+02 +-0.5111777840483D+02-0.5110703178733D+02-0.5109615460788D+02-0.5108514531363D+02 +-0.5107400233480D+02-0.5106272408452D+02-0.5105130895877D+02-0.5103975533619D+02 +-0.5102806157801D+02-0.5101622602790D+02-0.5100424701185D+02-0.5099212283803D+02 +-0.5097985179674D+02-0.5096743216021D+02-0.5095486218256D+02-0.5094214009961D+02 +-0.5092926412887D+02-0.5091623246932D+02-0.5090304330139D+02-0.5088969478681D+02 +-0.5087618506855D+02-0.5086251227064D+02-0.5084867449820D+02-0.5083466983722D+02 +-0.5082049635455D+02-0.5080615209778D+02-0.5079163509518D+02-0.5077694335558D+02 +-0.5076207486834D+02-0.5074702760324D+02-0.5073179951042D+02-0.5071638852033D+02 +-0.5070079254364D+02-0.5068500947122D+02-0.5066903717403D+02-0.5065287350315D+02 +-0.5063651628963D+02-0.5061996334457D+02-0.5060321245898D+02-0.5058626140382D+02 +-0.5056910792994D+02-0.5055174976809D+02-0.5053418462884D+02-0.5051641020267D+02 +-0.5049842415989D+02-0.5048022415067D+02-0.5046180780505D+02-0.5044317273295D+02 +-0.5042431652422D+02-0.5040523674861D+02-0.5038593095586D+02-0.5036639667573D+02 +-0.5034663141803D+02-0.5032663267268D+02-0.5030639790981D+02-0.5028592457977D+02 +-0.5026521011328D+02-0.5024425192145D+02-0.5022304739591D+02-0.5020159390892D+02 +-0.5017988881346D+02-0.5015792944334D+02-0.5013571311336D+02-0.5011323711944D+02 +-0.5009049873873D+02-0.5006749522980D+02-0.5004422383280D+02-0.5002068176959D+02 +-0.4999686624397D+02-0.4997277444186D+02-0.4994840353146D+02-0.4992375066350D+02 +-0.4989881297144D+02-0.4987358757171D+02-0.4984807156389D+02-0.4982226203106D+02 +-0.4979615603991D+02-0.4976975064117D+02-0.4974304286974D+02-0.4971602974502D+02 +-0.4968870827126D+02-0.4966107543776D+02-0.4963312821924D+02-0.4960486357616D+02 +-0.4957627845502D+02-0.4954736978871D+02-0.4951813449683D+02-0.4948856948612D+02 +-0.4945867165071D+02-0.4942843787257D+02-0.4939786502185D+02-0.4936694995729D+02 +-0.4933568952659D+02-0.4930408056681D+02-0.4927211990478D+02-0.4923980435752D+02 +-0.4920713073265D+02-0.4917409582880D+02-0.4914069643607D+02-0.4910692933642D+02 +-0.4907279130416D+02-0.4903827910633D+02-0.4900338950319D+02-0.4896811924867D+02 +-0.4893246509079D+02-0.4889642377211D+02-0.4885999203021D+02-0.4882316659813D+02 +-0.4878594420482D+02-0.4874832157556D+02-0.4871029543247D+02-0.4867186249491D+02 +-0.4863301947995D+02-0.4859376310277D+02-0.4855409007715D+02-0.4851399711583D+02 +-0.4847348093100D+02-0.4843253823466D+02-0.4839116573905D+02-0.4834936015704D+02 +-0.4830711820251D+02-0.4826443659074D+02-0.4822131203876D+02-0.4817774126566D+02 +-0.4813372099301D+02-0.4808924794511D+02-0.4804431884930D+02-0.4799893043625D+02 +-0.4795307944023D+02-0.4790676259938D+02-0.4785997665588D+02-0.4781271835619D+02 +-0.4776498445124D+02-0.4771677169657D+02-0.4766807685247D+02-0.4761889668409D+02 +-0.4756922796153D+02-0.4751906745988D+02-0.4746841195927D+02-0.4741725824487D+02 +-0.4736560310686D+02-0.4731344334036D+02-0.4726077574537D+02-0.4720759712663D+02 +-0.4715390429349D+02-0.4709969405976D+02-0.4704496324345D+02-0.4698970866656D+02 +-0.4693392715482D+02-0.4687761553742D+02-0.4682077064661D+02-0.4676338931742D+02 +-0.4670546838725D+02-0.4664700469545D+02-0.4658799508292D+02-0.4652843639162D+02 +-0.4646832546412D+02-0.4640765914308D+02-0.4634643427075D+02-0.4628464768840D+02 +-0.4622229623583D+02-0.4615937675077D+02-0.4609588606835D+02-0.4603182102046D+02 +-0.4596717843531D+02-0.4590195513672D+02-0.4583614794369D+02-0.4576975366979D+02 +-0.4570276912265D+02-0.4563519110351D+02-0.4556701640665D+02-0.4549824181908D+02 +-0.4542886412007D+02-0.4535888008084D+02-0.4528828646428D+02-0.4521708002473D+02 +-0.4514525750785D+02-0.4507281565054D+02-0.4499975118097D+02-0.4492606081870D+02 +-0.4485174127497D+02-0.4477678925295D+02-0.4470120144833D+02-0.4462497454985D+02 +-0.4454810524011D+02-0.4447059019649D+02-0.4439242609219D+02-0.4431360959758D+02 +-0.4423413738159D+02-0.4415400611337D+02-0.4407321246418D+02-0.4399175310947D+02 +-0.4390962473114D+02-0.4382682402010D+02-0.4374334767908D+02-0.4365919242563D+02 +-0.4357435499539D+02-0.4348883214570D+02-0.4340262065933D+02-0.4331571734857D+02 +-0.4322811905962D+02-0.4313982267710D+02-0.4305082512897D+02-0.4296112339160D+02 +-0.4287071449512D+02-0.4277959552900D+02-0.4268776364786D+02-0.4259521607738D+02 +-0.4250195012053D+02-0.4240796316384D+02-0.4231325268378D+02-0.4221781625326D+02 +-0.4212165154821D+02-0.4202475635403D+02-0.4192712857207D+02-0.4182876622603D+02 +-0.4172966746809D+02-0.4162983058491D+02-0.4152925400326D+02-0.4142793629535D+02 +-0.4132587618362D+02-0.4122307254514D+02-0.4111952441526D+02-0.4101523099069D+02 +-0.4091019163177D+02-0.4080440586392D+02-0.4069787337814D+02-0.4059059403052D+02 +-0.4048256784069D+02-0.4037379498919D+02-0.4026427581359D+02-0.4015401080347D+02 +-0.4004300059408D+02-0.3993124595881D+02-0.3981874780047D+02-0.3970550714118D+02 +-0.3959152511128D+02-0.3947680293704D+02-0.3936134192738D+02-0.3924514345974D+02 +-0.3912820896514D+02-0.3901053991273D+02-0.3889213779388D+02-0.3877300410616D+02 +-0.3865314033730D+02-0.3853254794941D+02-0.3841122836384D+02-0.3828918294671D+02 +-0.3816641299561D+02-0.3804291972752D+02-0.3791870426838D+02-0.3779376764439D+02 +-0.3766811077544D+02-0.3754173447071D+02-0.3741463942662D+02-0.3728682622747D+02 +-0.3715829534855D+02-0.3702904716206D+02-0.3689908194568D+02-0.3676839989389D+02 +-0.3663700113198D+02-0.3650488573242D+02-0.3637205373385D+02-0.3623850516215D+02 +-0.3610424005352D+02-0.3596925847947D+02-0.3583356057318D+02-0.3569714655716D+02 +-0.3556001677183D+02-0.3542217170480D+02-0.3528361202035D+02-0.3514433858906D+02 +-0.3500435251706D+02-0.3486365517474D+02-0.3472224822457D+02-0.3458013364781D+02 +-0.3443731376977D+02-0.3429379128348D+02-0.3414956927154D+02-0.3400465122587D+02 +-0.3385904106531D+02-0.3371274315081D+02-0.3356576229817D+02-0.3341810378823D+02 +-0.3326977337430D+02-0.3312077728689D+02-0.3297112223571D+02-0.3282081540879D+02 +-0.3266986446883D+02-0.3251827754673D+02-0.3236606323235D+02-0.3221323056253D+02 +-0.3205978900636D+02-0.3190574844798D+02-0.3175111916665D+02-0.3159591181450D+02 +-0.3144013739192D+02-0.3128380722060D+02-0.3112693291460D+02-0.3096952634939D+02 +-0.3081159962896D+02-0.3065316505139D+02-0.3049423507279D+02-0.3033482226994D+02 +-0.3017493930171D+02-0.3001459886954D+02-0.2985381367711D+02-0.2969259638940D+02 +-0.2953095959141D+02-0.2936891574677D+02-0.2920647715631D+02-0.2904365591713D+02 +-0.2888046388202D+02-0.2871691261992D+02-0.2855301337730D+02-0.2838877704096D+02 +-0.2822421410237D+02-0.2805933462405D+02-0.2789414820796D+02-0.2772866396645D+02 +-0.2756289049588D+02-0.2739683585338D+02-0.2723050753680D+02-0.2706391246838D+02 +-0.2689705698223D+02-0.2672994681603D+02-0.2656258710714D+02-0.2639498239345D+02 +-0.2622713661917D+02-0.2605905314574D+02-0.2589073476829D+02-0.2572218373759D+02 +-0.2555340178776D+02-0.2538439017000D+02-0.2521514969218D+02-0.2504568076457D+02 +-0.2487598345161D+02-0.2470605752972D+02-0.2453590255090D+02-0.2436551791213D+02 +-0.2419490293015D+02-0.2402405692122D+02-0.2385297928550D+02-0.2368166959536D+02 +-0.2351012768684D+02-0.2333835375355D+02-0.2316634844181D+02-0.2299411294593D+02 +-0.2282164910224D+02-0.2264895948042D+02-0.2247604747020D+02-0.2230291736187D+02 +-0.2212957441833D+02-0.2195602493665D+02-0.2178227629680D+02-0.2160833699531D+02 +-0.2143421666157D+02-0.2125992605447D+02-0.2108547703736D+02-0.2091088252957D+02 +-0.2073615643311D+02-0.2056131353347D+02-0.2038636937454D+02-0.2021134010787D+02 +-0.2003624231780D+02-0.1986109282464D+02-0.1968590846923D+02-0.1951070588338D+02 +-0.1933550125113D+02-0.1916031006739D+02-0.1898514690054D+02-0.1881002516654D+02 +-0.1863495692195D+02-0.1845995268332D+02-0.1828502127992D+02-0.1811016974578D+02 +-0.1793540325598D+02-0.1776072511080D+02-0.1758613676940D+02-0.1741163793327D+02 +-0.1723722667775D+02-0.1706289962834D+02-0.1688865217702D+02-0.1671447873257D+02 +-0.1654037299789D+02-0.1636632826691D+02-0.1619233773325D+02-0.1601839480315D+02 +-0.1584449340510D+02-0.1567062828984D+02-0.1549679531468D+02-0.1532299170720D+02 +-0.1514921630451D+02-0.1497546976480D+02-0.1480175474939D+02-0.1462807607400D+02 +-0.1445444082871D+02-0.1428085846710D+02-0.1410734086517D+02-0.1393390235146D+02 +-0.1376055970989D+02-0.1358733215727D+02-0.1341424129731D+02-0.1324131105355D+02 +-0.1306856758305D+02-0.1289603917318D+02-0.1272375612351D+02-0.1255175061484D+02 +-0.1238005656736D+02-0.1220870948967D+02-0.1203774632043D+02-0.1186720526422D+02 +-0.1169712562320D+02-0.1152754762583D+02-0.1135851225403D+02-0.1119006106993D+02 +-0.1102223604329D+02-0.1085507938069D+02-0.1068863335731D+02-0.1052294015218D+02 +-0.1035804168776D+02-0.1019397947446D+02-0.1003079446077D+02-0.9868526889628D+01 +-0.9707216161554D+01-0.9546900704939D+01-0.9387617854023D+01-0.9229403734858D+01 +-0.9072293159592D+01-0.8916319529363D+01-0.8761514745993D+01-0.8607909132693D+01 +-0.8455531363896D+01-0.8304408404305D+01-0.8154565457227D+01-0.8006025922166D+01 +-0.7858811361682D+01-0.7712941477416D+01-0.7568434095199D+01-0.7425305159081D+01 +-0.7283568734134D+01-0.7143237017788D+01-0.7004320359504D+01-0.6866827288485D+01 +-0.6730764549154D+01-0.6596137144079D+01-0.6462948384000D+01-0.6331199944618D+01 +-0.6200891929738D+01-0.6072022940407D+01-0.5944590149603D+01-0.5818589382077D+01 +-0.5694015198898D+01-0.5570860986265D+01-0.5449119048124D+01-0.5328780702141D+01 +-0.5209836378552D+01-0.5092275721431D+01-0.4976087691897D+01-0.4861260672787D+01 +-0.4747782574321D+01-0.4635640940271D+01-0.4524823054180D+01-0.4415316045125D+01 +-0.4307106992579D+01-0.4200183029885D+01-0.4094531445869D+01-0.3990139784139D+01 +-0.3886995939600D+01-0.3785088251726D+01-0.3684405594148D+01-0.3584937460106D+01 +-0.3486674043348D+01-0.3389606314047D+01-0.3293726089348D+01-0.3199026098161D+01 +-0.3105500039868D+01-0.3013142636618D+01-0.2921949678952D+01-0.2831918064533D+01 +-0.2743045829849D+01-0.2655332174788D+01-0.2568777480092D+01-0.2483383317815D+01 +-0.2399152454962D+01-0.2316088850658D+01-0.2234197647300D+01-0.2153485156272D+01 +-0.2073958838965D+01-0.1995627283965D+01-0.1918500181413D+01-0.1842588295670D+01 +-0.1767903437522D+01-0.1694458437274D+01-0.1622267120110D+01-0.1551344285168D+01 +-0.1481705689753D+01-0.1413368040087D+01-0.1346348989896D+01-0.1280667148051D+01 +-0.1216342096293D+01-0.1153394417906D+01-0.1091845737986D+01-0.1031718775725D+01 +-0.9730374088849D+00-0.9158267504133D+00-0.8601132368937D+00-0.8059247283301D+00 +-0.7532906185600D+00-0.7022419554295D+00-0.6528115697324D+00-0.6050342118170D+00 +-0.5589466947046D+00-0.5145880425354D+00-0.4719996431596D+00-0.4312254037239D+00 +-0.3923119081554D+00-0.3553085755132D+00-0.3202678182603D+00-0.2872451996103D+00 +-0.2562993012896D+00 + 0.0000000000000D+00 + 1012 0.5229258479779D+01 + 0.2150742905406D-04 0.2201934401975D-04 0.2254344131081D-04 0.2308001074793D-04 + 0.2362934904336D-04 0.2419175996469D-04 0.2476755450247D-04 0.2535705104185D-04 + 0.2596057553829D-04 0.2657846169737D-04 0.2721105115901D-04 0.2785869368592D-04 + 0.2852174735659D-04 0.2920057876285D-04 0.2989556321214D-04 0.3060708493450D-04 + 0.3133553729459D-04 0.3208132300862D-04 0.3284485436652D-04 0.3362655345933D-04 + 0.3442685241199D-04 0.3524619362168D-04 0.3608503000175D-04 0.3694382523153D-04 + 0.3782305401197D-04 0.3872320232740D-04 0.3964476771351D-04 0.4058825953159D-04 + 0.4155419924941D-04 0.4254312072866D-04 0.4355557051923D-04 0.4459210816046D-04 + 0.4565330648961D-04 0.4673975195749D-04 0.4785204495171D-04 0.4899080012754D-04 + 0.5015664674660D-04 0.5135022902361D-04 0.5257220648130D-04 0.5382325431382D-04 + 0.5510406375867D-04 0.5641534247751D-04 0.5775781494596D-04 0.5913222285265D-04 + 0.6053932550771D-04 0.6197990026094D-04 0.6345474292991D-04 0.6496466823815D-04 + 0.6651051026378D-04 0.6809312289875D-04 0.6971338031887D-04 0.7137217746513D-04 + 0.7307043053626D-04 0.7480907749308D-04 0.7658907857468D-04 0.7841141682692D-04 + 0.8027709864336D-04 0.8218715431905D-04 0.8414263861740D-04 0.8614463135050D-04 + 0.8819423797310D-04 0.9029259019072D-04 0.9244084658213D-04 0.9464019323656D-04 + 0.9689184440594D-04 0.9919704317265D-04 0.1015570621330D-03 0.1039732040969D-03 + 0.1064468028041D-03 0.1089792236573D-03 0.1115718644728D-03 0.1142261562483D-03 + 0.1169435639500D-03 0.1197255873171D-03 0.1225737616857D-03 0.1254896588328D-03 + 0.1284748878395D-03 0.1315310959746D-03 0.1346599695998D-03 0.1378632350954D-03 + 0.1411426598085D-03 0.1445000530233D-03 0.1479372669546D-03 0.1514561977641D-03 + 0.1550587866019D-03 0.1587470206711D-03 0.1625229343189D-03 0.1663886101524D-03 + 0.1703461801815D-03 0.1743978269887D-03 0.1785457849256D-03 0.1827923413391D-03 + 0.1871398378251D-03 0.1915906715131D-03 0.1961472963799D-03 0.2008122245952D-03 + 0.2055880278984D-03 0.2104773390081D-03 0.2154828530649D-03 0.2206073291079D-03 + 0.2258535915864D-03 0.2312245319072D-03 0.2367231100177D-03 0.2423523560273D-03 + 0.2481153718665D-03 0.2540153329849D-03 0.2600554900897D-03 0.2662391709247D-03 + 0.2725697820915D-03 0.2790508109132D-03 0.2856858273428D-03 0.2924784859153D-03 + 0.2994325277470D-03 0.3065517825810D-03 0.3138401708812D-03 0.3213017059753D-03 + 0.3289404962488D-03 0.3367607473897D-03 0.3447667646870D-03 0.3529629553823D-03 + 0.3613538310777D-03 0.3699440101989D-03 0.3787382205180D-03 0.3877413017338D-03 + 0.3969582081140D-03 0.4063940111991D-03 0.4160539025692D-03 0.4259431966769D-03 + 0.4360673337456D-03 0.4464318827368D-03 0.4570425443864D-03 0.4679051543124D-03 + 0.4790256861959D-03 0.4904102550358D-03 0.5020651204812D-03 0.5139966902408D-03 + 0.5262115235724D-03 0.5387163348549D-03 0.5515179972435D-03 0.5646235464104D-03 + 0.5780401843732D-03 0.5917752834137D-03 0.6058363900874D-03 0.6202312293275D-03 + 0.6349677086450D-03 0.6500539224267D-03 0.6654981563344D-03 0.6813088918062D-03 + 0.6974948106637D-03 0.7140647998269D-03 0.7310279561389D-03 0.7483935913040D-03 + 0.7661712369406D-03 0.7843706497523D-03 0.8030018168203D-03 0.8220749610184D-03 + 0.8416005465556D-03 0.8615892846469D-03 0.8820521393172D-03 0.9030003333406D-03 + 0.9244453543176D-03 0.9463989608946D-03 0.9688731891282D-03 0.9918803589975D-03 + 0.1015433081069D-02 0.1039544263315D-02 0.1064227118095D-02 0.1089495169290D-02 + 0.1115362259619D-02 0.1141842558105D-02 0.1168950567737D-02 0.1196701133289D-02 + 0.1225109449338D-02 0.1254191068456D-02 0.1283961909601D-02 0.1314438266696D-02 + 0.1345636817413D-02 0.1377574632157D-02 0.1410269183260D-02 0.1443738354387D-02 + 0.1478000450161D-02 0.1513074206015D-02 0.1548978798262D-02 0.1585733854409D-02 + 0.1623359463706D-02 0.1661876187936D-02 0.1701305072458D-02 0.1741667657505D-02 + 0.1782985989747D-02 0.1825282634108D-02 0.1868580685877D-02 0.1912903783076D-02 + 0.1958276119133D-02 0.2004722455835D-02 0.2052268136585D-02 0.2100939099962D-02 + 0.2150761893598D-02 0.2201763688371D-02 0.2253972292925D-02 0.2307416168524D-02 + 0.2362124444253D-02 0.2418126932561D-02 0.2475454145167D-02 0.2534137309329D-02 + 0.2594208384486D-02 0.2655700079287D-02 0.2718645869002D-02 0.2783080013344D-02 + 0.2849037574687D-02 0.2916554436715D-02 0.2985667323484D-02 0.3056413818931D-02 + 0.3128832386828D-02 0.3202962391187D-02 0.3278844117136D-02 0.3356518792272D-02 + 0.3436028608501D-02 0.3517416744371D-02 0.3600727387929D-02 0.3686005760082D-02 + 0.3773298138499D-02 0.3862651882061D-02 0.3954115455860D-02 0.4047738456768D-02 + 0.4143571639594D-02 0.4241666943825D-02 0.4342077520985D-02 0.4444857762604D-02 + 0.4550063328833D-02 0.4657751177697D-02 0.4767979595018D-02 0.4880808225009D-02 + 0.4996298101570D-02 0.5114511680279D-02 0.5235512871115D-02 0.5359367071918D-02 + 0.5486141202598D-02 0.5615903740128D-02 0.5748724754308D-02 0.5884675944352D-02 + 0.6023830676284D-02 0.6166264021183D-02 0.6312052794284D-02 0.6461275594959D-02 + 0.6614012847588D-02 0.6770346843357D-02 0.6930361782982D-02 0.7094143820394D-02 + 0.7261781107400D-02 0.7433363839342D-02 0.7608984301773D-02 0.7788736918176D-02 + 0.7972718298747D-02 0.8161027290261D-02 0.8353765027049D-02 0.8551034983111D-02 + 0.8752943025377D-02 0.8959597468160D-02 0.9171109128811D-02 0.9387591384603D-02 + 0.9609160230877D-02 0.9835934340477D-02 0.1006803512449D-01 0.1030558679431D-01 + 0.1054871642512D-01 0.1079755402073D-01 0.1105223257982D-01 0.1131288816368D-01 + 0.1157965996544D-01 0.1185269038080D-01 0.1213212508026D-01 0.1241811308303D-01 + 0.1271080683248D-01 0.1301036227325D-01 0.1331693893004D-01 0.1363069998813D-01 + 0.1395181237567D-01 0.1428044684765D-01 0.1461677807184D-01 0.1496098471648D-01 + 0.1531324953990D-01 0.1567375948211D-01 0.1604270575828D-01 0.1642028395434D-01 + 0.1680669412453D-01 0.1720214089116D-01 0.1760683354637D-01 0.1802098615621D-01 + 0.1844481766683D-01 0.1887855201303D-01 0.1932241822902D-01 0.1977665056168D-01 + 0.2024148858606D-01 0.2071717732349D-01 0.2120396736203D-01 0.2170211497964D-01 + 0.2221188226980D-01 0.2273353726988D-01 0.2326735409215D-01 0.2381361305754D-01 + 0.2437260083229D-01 0.2494461056731D-01 0.2552994204062D-01 0.2612890180262D-01 + 0.2674180332442D-01 0.2736896714935D-01 0.2801072104743D-01 0.2866740017320D-01 + 0.2933934722669D-01 0.3002691261781D-01 0.3073045463399D-01 0.3145033961141D-01 + 0.3218694210958D-01 0.3294064508962D-01 0.3371184009606D-01 0.3450092744243D-01 + 0.3530831640054D-01 0.3613442539362D-01 0.3697968219334D-01 0.3784452412086D-01 + 0.3872939825181D-01 0.3963476162544D-01 0.4056108145796D-01 0.4150883536008D-01 + 0.4247851155891D-01 0.4347060912422D-01 0.4448563819924D-01 0.4552412023590D-01 + 0.4658658823475D-01 0.4767358698962D-01 0.4878567333696D-01 0.4992341641008D-01 + 0.5108739789835D-01 0.5227821231135D-01 0.5349646724813D-01 0.5474278367169D-01 + 0.5601779618862D-01 0.5732215333417D-01 0.5865651786266D-01 0.6002156704340D-01 + 0.6141799296226D-01 0.6284650282880D-01 0.6430781928923D-01 0.6580268074515D-01 + 0.6733184167825D-01 0.6889607298100D-01 0.7049616229337D-01 0.7213291434581D-01 + 0.7380715130845D-01 0.7551971314661D-01 0.7727145798277D-01 0.7906326246509D-01 + 0.8089602214242D-01 0.8277065184608D-01 0.8468808607842D-01 0.8664927940812D-01 + 0.8865520687255D-01 0.9070686438707D-01 0.9280526916144D-01 0.9495146012343D-01 + 0.9714649834967D-01 0.9939146750384D-01 0.1016874742823D+00 0.1040356488672D+00 + 0.1064371453872D+00 0.1088931423856D+00 0.1114048432967D+00 0.1139734769295D+00 + 0.1166002979593D+00 0.1192865874273D+00 0.1220336532487D+00 0.1248428307276D+00 + 0.1277154830815D+00 0.1306530019730D+00 0.1336568080498D+00 0.1367283514936D+00 + 0.1398691125766D+00 0.1430806022269D+00 0.1463643626021D+00 0.1497219676713D+00 + 0.1531550238057D+00 0.1566651703780D+00 0.1602540803695D+00 0.1639234609870D+00 + 0.1676750542871D+00 0.1715106378098D+00 0.1754320252209D+00 0.1794410669619D+00 + 0.1835396509100D+00 0.1877297030455D+00 0.1920131881282D+00 0.1963921103827D+00 + 0.2008685141914D+00 0.2054444847966D+00 0.2101221490109D+00 0.2149036759359D+00 + 0.2197912776889D+00 0.2247872101386D+00 0.2298937736476D+00 0.2351133138248D+00 + 0.2404482222837D+00 0.2459009374100D+00 0.2514739451362D+00 0.2571697797240D+00 + 0.2629910245536D+00 0.2689403129212D+00 0.2750203288421D+00 0.2812338078623D+00 + 0.2875835378751D+00 0.2940723599454D+00 0.3007031691395D+00 0.3074789153608D+00 + 0.3144026041916D+00 0.3214772977396D+00 0.3287061154899D+00 0.3360922351618D+00 + 0.3436388935694D+00 0.3513493874868D+00 0.3592270745164D+00 0.3672753739607D+00 + 0.3754977676972D+00 0.3838978010545D+00 0.3924790836915D+00 0.4012452904770D+00 + 0.4102001623706D+00 0.4193475073036D+00 0.4286912010595D+00 0.4382351881538D+00 + 0.4479834827120D+00 0.4579401693452D+00 0.4681094040228D+00 0.4784954149418D+00 + 0.4891025033910D+00 0.4999350446102D+00 0.5109974886435D+00 0.5222943611853D+00 + 0.5338302644183D+00 0.5456098778426D+00 0.5576379590956D+00 0.5699193447601D+00 + 0.5824589511607D+00 0.5952617751475D+00 0.6083328948654D+00 0.6216774705074D+00 + 0.6353007450521D+00 0.6492080449824D+00 0.6634047809857D+00 0.6778964486325D+00 + 0.6926886290333D+00 0.7077869894721D+00 0.7231972840138D+00 0.7389253540860D+00 + 0.7549771290311D+00 0.7713586266289D+00 0.7880759535873D+00 0.8051353059985D+00 + 0.8225429697604D+00 0.8403053209599D+00 0.8584288262158D+00 0.8769200429817D+00 + 0.8957856198031D+00 0.9150322965294D+00 0.9346669044774D+00 0.9546963665439D+00 + 0.9751276972649D+00 0.9959680028197D+00 0.1017224480976D+01 0.1038904420974D+01 + 0.1061015203349D+01 0.1083564299686D+01 0.1106559272300D+01 0.1130007773859D+01 + 0.1153917546912D+01 0.1178296423354D+01 0.1203152323804D+01 0.1228493256899D+01 + 0.1254327318495D+01 0.1280662690787D+01 0.1307507641324D+01 0.1334870521934D+01 + 0.1362759767535D+01 0.1391183894856D+01 0.1420151501035D+01 0.1449671262109D+01 + 0.1479751931386D+01 0.1510402337698D+01 0.1541631383520D+01 0.1573448042969D+01 + 0.1605861359662D+01 0.1638880444440D+01 0.1672514472946D+01 0.1706772683055D+01 + 0.1741664372155D+01 0.1777198894269D+01 0.1813385657016D+01 0.1850234118409D+01 + 0.1887753783475D+01 0.1925954200705D+01 0.1964844958324D+01 0.2004435680370D+01 + 0.2044736022586D+01 0.2085755668115D+01 0.2127504322996D+01 0.2169991711448D+01 + 0.2213227570952D+01 0.2257221647108D+01 0.2301983688271D+01 0.2347523439972D+01 + 0.2393850639086D+01 0.2440975007782D+01 0.2488906247220D+01 0.2537654031002D+01 + 0.2587227998372D+01 0.2637637747157D+01 0.2688892826442D+01 0.2741002728983D+01 + 0.2793976883341D+01 0.2847824645743D+01 0.2902555291652D+01 0.2958178007063D+01 + 0.3014701879494D+01 0.3072135888684D+01 0.3130488897001D+01 0.3189769639525D+01 + 0.3249986713841D+01 0.3311148569513D+01 0.3373263497233D+01 0.3436339617667D+01 + 0.3500384869964D+01 0.3565406999951D+01 0.3631413547991D+01 0.3698411836514D+01 + 0.3766408957221D+01 0.3835411757947D+01 0.3905426829193D+01 0.3976460490322D+01 + 0.4048518775419D+01 0.4121607418815D+01 0.4195731840277D+01 0.4270897129857D+01 + 0.4347108032420D+01 0.4424368931831D+01 0.4502683834816D+01 0.4582056354503D+01 + 0.4662489693636D+01 0.4743986627475D+01 0.4826549486387D+01 0.4910180138127D+01 + 0.4994879969825D+01 0.5080649869681D+01 0.5167490208373D+01 0.5255400820202D+01 + 0.5344380983962D+01 0.5434429403565D+01 0.5525544188426D+01 0.5617722833617D+01 + 0.5710962199815D+01 0.5805258493041D+01 0.5900607244231D+01 0.5997003288635D+01 + 0.6094440745069D+01 0.6192912995049D+01 0.6292412661814D+01 0.6392931589269D+01 + 0.6494460820874D+01 0.6596990578488D+01 0.6700510241224D+01 0.6805008324307D+01 + 0.6910472457995D+01 0.7016889366579D+01 0.7124244847491D+01 0.7232523750568D+01 + 0.7341709957494D+01 0.7451786361463D+01 0.7562734847107D+01 0.7674536270712D+01 + 0.7787170440791D+01 0.7900616099026D+01 0.8014850901658D+01 0.8129851401340D+01 + 0.8245593029526D+01 0.8362050079436D+01 0.8479195689649D+01 0.8597001828383D+01 + 0.8715439278509D+01 0.8834477623371D+01 0.8954085233454D+01 0.9074229253973D+01 + 0.9194875593440D+01 0.9315988913276D+01 0.9437532618530D+01 0.9559468849772D+01 + 0.9681758476237D+01 0.9804361090277D+01 0.9927235003199D+01 0.1005033724256D+02 + 0.1017362355101D+02 0.1029704838669D+02 0.1042056492540D+02 0.1054412506444D+02 + 0.1066767942831D+02 0.1079117737637D+02 0.1091456701244D+02 0.1103779519646D+02 + 0.1116080755839D+02 0.1128354851420D+02 0.1140596128432D+02 0.1152798791434D+02 + 0.1164956929827D+02 0.1177064520433D+02 0.1189115430327D+02 0.1201103419951D+02 + 0.1213022146500D+02 0.1224865167586D+02 0.1236625945201D+02 0.1248297849976D+02 + 0.1259874165744D+02 0.1271348094411D+02 0.1282712761148D+02 0.1293961219902D+02 + 0.1305086459240D+02 0.1316081408518D+02 0.1326938944391D+02 0.1337651897664D+02 + 0.1348213060491D+02 0.1358615193909D+02 0.1368851035736D+02 0.1378913308811D+02 + 0.1388794729589D+02 0.1398488017086D+02 0.1407985902179D+02 0.1417281137257D+02 + 0.1426366506212D+02 0.1435234834789D+02 0.1443879001264D+02 0.1452291947466D+02 + 0.1460466690129D+02 0.1468396332564D+02 0.1476074076649D+02 0.1483493235126D+02 + 0.1490647244192D+02 0.1497529676373D+02 0.1504134253675D+02 0.1510454860984D+02 + 0.1516485559720D+02 0.1522220601698D+02 0.1527654443219D+02 0.1532781759325D+02 + 0.1537597458241D+02 0.1542096695946D+02 0.1546274890874D+02 0.1550127738702D+02 + 0.1553651227211D+02 0.1556841651189D+02 0.1559695627334D+02 0.1562210109145D+02 + 0.1564382401753D+02 0.1566210176664D+02 0.1567691486377D+02 0.1568824778841D+02 + 0.1569608911712D+02 0.1570043166360D+02 0.1570127261607D+02 0.1569861367129D+02 + 0.1569246116496D+02 0.1568282619787D+02 0.1566972475757D+02 0.1565317783486D+02 + 0.1563321153475D+02 0.1560985718135D+02 0.1558315141624D+02 0.1555313628970D+02 + 0.1551985934445D+02 0.1548337369123D+02 0.1544373807583D+02 0.1540101693692D+02 + 0.1535528045436D+02 0.1530660458716D+02 0.1525507110098D+02 0.1520076758423D+02 + 0.1514378745267D+02 0.1508422994170D+02 0.1502220008605D+02 0.1495780868635D+02 + 0.1489117226206D+02 0.1482241299046D+02 0.1475165863115D+02 0.1467904243575D+02 + 0.1460470304238D+02 0.1452878435463D+02 0.1445143540465D+02 0.1437281020013D+02 + 0.1429306755483D+02 0.1421237090260D+02 0.1413088809452D+02 0.1404879117925D+02 + 0.1396625616625D+02 0.1388346277207D+02 0.1380059414952D+02 0.1371783659988D+02 + 0.1363537926825D+02 0.1355341382212D+02 0.1347213411351D+02 0.1339173582480D+02 + 0.1331241609871D+02 0.1323437315279D+02 0.1315780587881D+02 0.1308291342766D+02 + 0.1300989478035D+02 0.1293894830568D+02 0.1287027130535D+02 0.1280405954732D+02 + 0.1274050678825D+02 0.1267980428593D+02 0.1262214030269D+02 0.1256769960087D+02 + 0.1251666293145D+02 0.1246920651702D+02 0.1242550153038D+02 0.1238571356999D+02 + 0.1235000213372D+02 0.1231852009235D+02 0.1229141316414D+02 0.1226881939222D+02 + 0.1225086862623D+02 0.1223768200985D+02 0.1222937147599D+02 0.1222603925117D+02 + 0.1222777737106D+02 0.1223466720868D+02 0.1224677901729D+02 0.1226417148958D+02 + 0.1228689133517D+02 0.1231497287802D+02 0.1234843767581D+02 0.1238729416297D+02 + 0.1243153731911D+02 0.1248114836487D+02 0.1253609448665D+02 0.1259632859227D+02 + 0.1266178909890D+02 0.1273239975523D+02 0.1280806949923D+02 0.1288869235315D+02 + 0.1297414735711D+02 0.1306429854274D+02 0.1315899494816D+02 0.1325807067533D+02 + 0.1336134499111D+02 0.1346862247282D+02 0.1357969319917D+02 0.1369433298744D+02 + 0.1381230367740D+02 0.1393335346243D+02 0.1405721726828D+02 0.1418361717951D+02 + 0.1431226291376D+02 0.1444285234362D+02 0.1457507206581D+02 0.1470859801733D+02 + 0.1484309613763D+02 0.1497822307639D+02 0.1511362694548D+02 0.1524894811426D+02 + 0.1538382004666D+02 0.1551787017849D+02 0.1565072083339D+02 0.1578199017530D+02 + 0.1591129319546D+02 0.1603824273170D+02 0.1616245051740D+02 0.1628352825765D+02 + 0.1640108872963D+02 0.1651474690448D+02 0.1662412108723D+02 0.1672883407174D+02 + 0.1682851430716D+02 0.1692279707220D+02 0.1701132565381D+02 0.1709375252614D+02 + 0.1716974052608D+02 0.1723896402125D+02 0.1730111006644D+02 0.1735587954416D+02 + 0.1740298828530D+02 0.1744216816538D+02 0.1747316817225D+02 0.1749575544089D+02 + 0.1750971625093D+02 0.1751485698260D+02 0.1751100502688D+02 0.1749800964559D+02 + 0.1747574277733D+02 0.1744409978499D+02 0.1740300014123D+02 0.1735238804766D+02 + 0.1729223298439D+02 0.1722253018618D+02 0.1714330104180D+02 0.1705459341368D+02 + 0.1695648187457D+02 0.1684906785873D+02 0.1673247972505D+02 0.1660687272995D+02 + 0.1647242890818D+02 0.1632935685981D+02 0.1617789144222D+02 0.1601829336618D+02 + 0.1585084869528D+02 0.1567586824865D+02 0.1549368690699D+02 0.1530466282265D+02 + 0.1510917653451D+02 0.1490762998916D+02 0.1470044547022D+02 0.1448806443791D+02 + 0.1427094628160D+02 0.1404956698852D+02 0.1382441773199D+02 0.1359600338336D+02 + 0.1336484095192D+02 0.1313145795774D+02 0.1289639074258D+02 0.1266018272468D+02 + 0.1242338260337D+02 0.1218654252002D+02 0.1195021618209D+02 0.1171495695744D+02 + 0.1148131594627D+02 0.1124984003849D+02 0.1102106996440D+02 0.1079553834688D+02 + 0.1057376776347D+02 0.1035626882667D+02 0.1014353829125D+02 0.9936057196884D+01 + 0.9734289054994D+01 0.9538678088120D+01 0.9349647530399D+01 0.9167597997384D+01 + 0.8992905933301D+01 0.8825922143594D+01 0.8666970420224D+01 0.8516346266999D+01 + 0.8374315731611D+01 0.8241114350747D+01 0.8116946214096D+01 0.8001983152570D+01 + 0.7896364055459D+01 0.7800194320670D+01 0.7713545441561D+01 0.7636454733225D+01 + 0.7568925200401D+01 0.7510925548528D+01 0.7462390338698D+01 0.7423220286625D+01 + 0.7393282704950D+01 0.7372412087556D+01 0.7360410833787D+01 0.7357050109802D+01 + 0.7362070843542D+01 0.7375184849138D+01 0.7396076075866D+01 0.7424401976120D+01 + 0.7459794986211D+01 0.7501864113185D+01 0.7550196620265D+01 0.7604359802945D+01 + 0.7663902847256D+01 0.7728358761219D+01 0.7797246370063D+01 0.7870072365405D+01 + 0.7946333398216D+01 0.8025518205140D+01 0.8107109757504D+01 0.8190587422172D+01 + 0.8275429123337D+01 0.8361113494303D+01 0.8447122008353D+01 0.8532941077928D+01 + 0.8618064111536D+01 0.8701993518075D+01 0.8784242648578D+01 0.8864337665829D+01 + 0.8941819332731D+01 0.9016244710878D+01 0.9087188761372D+01 0.9154245840560D+01 + 0.9217031084099D+01 0.9275181673474D+01 0.9328357979881D+01 0.9376244581215D+01 + 0.9418551148709D+01 0.9455013200639D+01 0.9485392721360D+01 0.9509478644797D+01 + 0.9527087202359D+01 0.9538062136102D+01 0.9542274778747D+01 0.9539624002998D+01 + 0.9530036043300D+01 0.9513464193959D+01 0.9489888388159D+01 0.9459314663078D+01 + 0.9421774516843D+01 0.9377324163609D+01 0.9326043693467D+01 0.9268036144314D+01 + 0.9203426493115D+01 0.9132360574297D+01 0.9055003933175D+01 0.8971540622481D+01 + 0.8882171950151D+01 0.8787115186520D+01 0.8686602239071D+01 0.8580878302773D+01 + 0.8470200493895D+01 0.8354836475027D+01 0.8235063078754D+01 0.8111164937189D+01 + 0.7983433124252D+01 0.7852163817216D+01 0.7717656983696D+01 0.7580215099831D+01 + 0.7440141905014D+01 0.7297741198086D+01 0.7153315679440D+01 0.7007165843079D+01 + 0.6859588922166D+01 0.6710877891167D+01 0.6561320527250D+01 0.6411198533128D+01 + 0.6260786723101D+01 0.6110352273646D+01 0.5960154039458D+01 0.5810441935471D+01 + 0.5661456384987D+01 0.5513427833700D+01 0.5366576329042D+01 0.5221111163955D+01 + 0.5077230583918D+01 0.4935121555751D+01 0.4794959596475D+01 0.4656908660288D+01 + 0.4521121081498D+01 0.4387737571052D+01 0.4256887264186D+01 0.4128687816522D+01 + 0.4003245545873D+01 0.3880655616880D+01 0.3761002265561D+01 0.3644359060777D+01 + 0.3530789199588D+01 0.3420345833472D+01 0.3313072422343D+01 0.3209003113371D+01 + 0.3108163141592D+01 0.3010569249384D+01 0.2916230121919D+01 0.2825146835796D+01 + 0.2737313318133D+01 0.2652716813508D+01 0.2571338356232D+01 0.2493153245580D+01 + 0.2418131521695D+01 0.2346238440047D+01 0.2277434942461D+01 0.2211678122838D+01 + 0.2148921685899D+01 0.2089116397376D+01 0.2032210524266D+01 0.1978150263893D+01 + 0.1926880160684D+01 0.1878343509721D+01 0.1832482746269D+01 0.1789239820638D+01 + 0.1748556557871D+01 0.1710375001879D+01 0.1674637743804D+01 0.1641288234472D+01 + 0.1610271080956D+01 0.1581532327338D+01 0.1555019719890D+01 0.1530682956958D+01 + 0.1508473923914D+01 0.1488346913611D+01 0.1470258832820D+01 0.1454169395155D+01 + 0.1440041301042D+01 0.1427840405245D+01 0.1417535872504D+01 0.1409100321753D+01 + 0.1402509959377D+01 0.1397744701874D+01 0.1394788288181D+01 0.1393628381826D+01 + 0.1394256662892D+01 0.1396668909610D+01 0.1400865069190D+01 0.1406849317222D+01 + 0.1414629369614D+01 0.1424336942263D+01 0.1436096575202D+01 0.1449912447024D+01 + 0.1465794674727D+01 0.1483759333931D+01 0.1503828494539D+01 0.1526030271798D+01 + 0.1550398892649D+01 0.1576974777196D+01 0.1605804635055D+01 0.1636941576215D+01 + 7 1012 + 1 0 -1 -511.89194 + 2 0 -1 -58.90181 + 2 1 1 -50.68932 + 2 1 -2 -49.77537 + 3 0 -1 -5.73317 + 3 1 1 -3.34334 + 3 1 -2 -3.22919 + 0.2122975645015D-04 0.2173507709867D-04 0.2225242316243D-04 0.2278208072829D-04 + 0.2332434268594D-04 0.2387950888954D-04 0.2444788632325D-04 0.2502978927059D-04 + 0.2562553948791D-04 0.2623546638192D-04 0.2685990719144D-04 0.2749920717353D-04 + 0.2815371979393D-04 0.2882380692207D-04 0.2950983903075D-04 0.3021219540050D-04 + 0.3093126432877D-04 0.3166744334418D-04 0.3242113942573D-04 0.3319276922733D-04 + 0.3398275930755D-04 0.3479154636487D-04 0.3561957747857D-04 0.3646731035519D-04 + 0.3733521358096D-04 0.3822376688016D-04 0.3913346137963D-04 0.4006479987955D-04 + 0.4101829713060D-04 0.4199448011777D-04 0.4299388835081D-04 0.4401707416166D-04 + 0.4506460300883D-04 0.4613705378910D-04 0.4723501915650D-04 0.4835910584899D-04 + 0.4950993502270D-04 0.5068814259429D-04 0.5189437959126D-04 0.5312931251066D-04 + 0.5439362368626D-04 0.5568801166444D-04 0.5701319158897D-04 0.5836989559491D-04 + 0.5975887321186D-04 0.6118089177673D-04 0.6263673685632D-04 0.6412721267990D-04 + 0.6565314258201D-04 0.6721536945580D-04 0.6881475621705D-04 0.7045218627922D-04 + 0.7212856403973D-04 0.7384481537777D-04 0.7560188816385D-04 0.7740075278149D-04 + 0.7924240266119D-04 0.8112785482706D-04 0.8305815045642D-04 0.8503435545263D-04 + 0.8705756103141D-04 0.8912888432116D-04 0.9124946897738D-04 0.9342048581165D-04 + 0.9564313343555D-04 0.9791863891974D-04 0.1002482584687D-03 0.1026332781112D-03 + 0.1050750144077D-03 0.1075748151735D-03 0.1101340602203D-03 0.1127541621137D-03 + 0.1154365669501D-03 0.1181827551510D-03 0.1209942422769D-03 0.1238725798590D-03 + 0.1268193562527D-03 0.1298361975089D-03 0.1329247682680D-03 0.1360867726735D-03 + 0.1393239553083D-03 0.1426381021518D-03 0.1460310415612D-03 0.1495046452749D-03 + 0.1530608294397D-03 0.1567015556625D-03 0.1604288320871D-03 0.1642447144955D-03 + 0.1681513074364D-03 0.1721507653792D-03 0.1762452938963D-03 0.1804371508722D-03 + 0.1847286477421D-03 0.1891221507592D-03 0.1936200822920D-03 0.1982249221522D-03 + 0.2029392089542D-03 0.2077655415060D-03 0.2127065802334D-03 0.2177650486382D-03 + 0.2229437347894D-03 0.2282454928513D-03 0.2336732446459D-03 0.2392299812538D-03 + 0.2449187646513D-03 0.2507427293871D-03 0.2567050842979D-03 0.2628091142650D-03 + 0.2690581820118D-03 0.2754557299435D-03 0.2820052820308D-03 0.2887104457371D-03 + 0.2955749139921D-03 0.3026024672103D-03 0.3097969753590D-03 0.3171624000731D-03 + 0.3247027968207D-03 0.3324223171196D-03 0.3403252108055D-03 0.3484158283536D-03 + 0.3566986232552D-03 0.3651781544500D-03 0.3738590888149D-03 0.3827462037126D-03 + 0.3918443895988D-03 0.4011586526914D-03 0.4106941177020D-03 0.4204560306321D-03 + 0.4304497616342D-03 0.4406808079408D-03 0.4511547968612D-03 0.4618774888502D-03 + 0.4728547806468D-03 0.4840927084883D-03 0.4955974513988D-03 0.5073753345551D-03 + 0.5194328327314D-03 0.5317765738249D-03 0.5444133424641D-03 0.5573500837015D-03 + 0.5705939067925D-03 0.5841520890639D-03 0.5980320798714D-03 0.6122415046513D-03 + 0.6267881690659D-03 0.6416800632466D-03 0.6569253661363D-03 0.6725324499326D-03 + 0.6885098846360D-03 0.7048664427037D-03 0.7216111038125D-03 0.7387530597330D-03 + 0.7563017193176D-03 0.7742667136049D-03 0.7926579010441D-03 0.8114853728404D-03 + 0.8307594584254D-03 0.8504907310562D-03 0.8706900135433D-03 0.8913683841142D-03 + 0.9125371824119D-03 0.9342080156346D-03 0.9563927648179D-03 0.9791035912634D-03 + 0.1002352943117D-02 0.1026153562102D-02 0.1050518490405D-02 0.1075461077728D-02 + 0.1100994988496D-02 0.1127134209246D-02 0.1153893056171D-02 0.1181286182852D-02 + 0.1209328588167D-02 0.1238035624379D-02 0.1267423005415D-02 0.1297506815344D-02 + 0.1328303517037D-02 0.1359829961041D-02 0.1392103394654D-02 0.1425141471212D-02 + 0.1458962259585D-02 0.1493584253904D-02 0.1529026383504D-02 0.1565308023106D-02 + 0.1602449003221D-02 0.1640469620811D-02 0.1679390650189D-02 0.1719233354165D-02 + 0.1760019495464D-02 0.1801771348394D-02 0.1844511710794D-02 0.1888263916250D-02 + 0.1933051846599D-02 0.1978899944720D-02 0.2025833227614D-02 0.2073877299798D-02 + 0.2123058366995D-02 0.2173403250151D-02 0.2224939399761D-02 0.2277694910540D-02 + 0.2331698536421D-02 0.2386979705903D-02 0.2443568537747D-02 0.2501495857040D-02 + 0.2560793211623D-02 0.2621492888896D-02 0.2683627933011D-02 0.2747232162458D-02 + 0.2812340188056D-02 0.2878987431352D-02 0.2947210143447D-02 0.3017045424251D-02 + 0.3088531242177D-02 0.3161706454285D-02 0.3236610826892D-02 0.3313285056646D-02 + 0.3391770792086D-02 0.3472110655691D-02 0.3554348266436D-02 0.3638528262858D-02 + 0.3724696326649D-02 0.3812899206788D-02 0.3903184744224D-02 0.3995601897109D-02 + 0.4090200766624D-02 0.4187032623373D-02 0.4286149934389D-02 0.4387606390746D-02 + 0.4491456935804D-02 0.4597757794082D-02 0.4706566500803D-02 0.4817941932088D-02 + 0.4931944335851D-02 0.5048635363379D-02 0.5168078101634D-02 0.5290337106279D-02 + 0.5415478435454D-02 0.5543569684307D-02 0.5674680020311D-02 0.5808880219367D-02 + 0.5946242702730D-02 0.6086841574754D-02 0.6230752661494D-02 0.6378053550168D-02 + 0.6528823629508D-02 0.6683144131013D-02 0.6841098171130D-02 0.7002770794372D-02 + 0.7168249017405D-02 0.7337621874121D-02 0.7510980461712D-02 0.7688417987773D-02 + 0.7870029818463D-02 0.8055913527720D-02 0.8246168947593D-02 0.8440898219673D-02 + 0.8640205847678D-02 0.8844198751201D-02 0.9052986320644D-02 0.9266680473381D-02 + 0.9485395711148D-02 0.9709249178711D-02 0.9938360723829D-02 0.1017285295853D-01 + 0.1041285132175D-01 0.1065848414335D-01 0.1090988270951D-01 0.1116718132961D-01 + 0.1143051740455D-01 0.1170003149653D-01 0.1197586740047D-01 0.1225817221684D-01 + 0.1254709642620D-01 0.1284279396532D-01 0.1314542230495D-01 0.1345514252930D-01 + 0.1377211941725D-01 0.1409652152530D-01 0.1442852127232D-01 0.1476829502620D-01 + 0.1511602319226D-01 0.1547189030365D-01 0.1583608511371D-01 0.1620880069022D-01 + 0.1659023451183D-01 0.1698058856639D-01 0.1738006945154D-01 0.1778888847734D-01 + 0.1820726177118D-01 0.1863541038486D-01 0.1907356040402D-01 0.1952194305980D-01 + 0.1998079484302D-01 0.2045035762063D-01 0.2093087875471D-01 0.2142261122400D-01 + 0.2192581374792D-01 0.2244075091329D-01 0.2296769330365D-01 0.2350691763133D-01 + 0.2405870687229D-01 0.2462335040374D-01 0.2520114414469D-01 0.2579239069942D-01 + 0.2639739950387D-01 0.2701648697516D-01 0.2764997666416D-01 0.2829819941123D-01 + 0.2896149350513D-01 0.2964020484531D-01 0.3033468710740D-01 0.3104530191220D-01 + 0.3177241899806D-01 0.3251641639684D-01 0.3327768061342D-01 0.3405660680881D-01 + 0.3485359898710D-01 0.3566907018606D-01 0.3650344267166D-01 0.3735714813647D-01 + 0.3823062790211D-01 0.3912433312562D-01 0.4003872501011D-01 0.4097427501948D-01 + 0.4193146509749D-01 0.4291078789111D-01 0.4391274697832D-01 0.4493785710035D-01 + 0.4598664439858D-01 0.4705964665594D-01 0.4815741354312D-01 0.4928050686955D-01 + 0.5042950083923D-01 0.5160498231153D-01 0.5280755106696D-01 0.5403782007813D-01 + 0.5529641578584D-01 0.5658397838041D-01 0.5790116208843D-01 0.5924863546488D-01 + 0.6062708169076D-01 0.6203719887636D-01 0.6347970037015D-01 0.6495531507346D-01 + 0.6646478776099D-01 0.6800887940725D-01 0.6958836751900D-01 0.7120404647380D-01 + 0.7285672786470D-01 0.7454724085125D-01 0.7627643251682D-01 0.7804516823229D-01 + 0.7985433202641D-01 0.8170482696258D-01 0.8359757552242D-01 0.8553351999606D-01 + 0.8751362287932D-01 0.8953886727772D-01 0.9161025731761D-01 0.9372881856432D-01 + 0.9589559844749D-01 0.9811166669365D-01 0.1003781157661D+00 0.1026960613124D+00 + 0.1050666426187D+00 0.1074910230727D+00 0.1099703906329D+00 0.1125059583070D+00 + 0.1150989646366D+00 0.1177506741909D+00 0.1204623780676D+00 0.1232353944021D+00 + 0.1260710688845D+00 0.1289707752849D+00 0.1319359159864D+00 0.1349679225270D+00 + 0.1380682561490D+00 0.1412384083570D+00 0.1444799014844D+00 0.1477942892678D+00 + 0.1511831574303D+00 0.1546481242725D+00 0.1581908412731D+00 0.1618129936965D+00 + 0.1655163012104D+00 0.1693025185104D+00 0.1731734359544D+00 0.1771308802047D+00 + 0.1811767148790D+00 0.1853128412094D+00 0.1895411987104D+00 0.1938637658552D+00 + 0.1982825607598D+00 0.2027996418767D+00 0.2074171086957D+00 0.2121371024533D+00 + 0.2169618068509D+00 0.2218934487801D+00 0.2269342990569D+00 0.2320866731634D+00 + 0.2373529319974D+00 0.2427354826295D+00 0.2482367790682D+00 0.2538593230323D+00 + 0.2596056647304D+00 0.2654784036474D+00 0.2714801893389D+00 0.2776137222308D+00 + 0.2838817544268D+00 0.2902870905217D+00 0.2968325884206D+00 0.3035211601645D+00 + 0.3103557727607D+00 0.3173394490192D+00 0.3244752683937D+00 0.3317663678273D+00 + 0.3392159426028D+00 0.3468272471962D+00 0.3546035961349D+00 0.3625483648577D+00 + 0.3706649905790D+00 0.3789569731540D+00 0.3874278759464D+00 0.3960813266976D+00 + 0.4049210183955D+00 0.4139507101454D+00 0.4231742280388D+00 0.4325954660221D+00 + 0.4422183867640D+00 0.4520470225197D+00 0.4620854759931D+00 0.4723379211946D+00 + 0.4828086042953D+00 0.4935018444749D+00 0.5044220347646D+00 0.5155736428822D+00 + 0.5269612120602D+00 0.5385893618646D+00 0.5504627890040D+00 0.5625862681281D+00 + 0.5749646526146D+00 0.5876028753427D+00 0.6005059494532D+00 0.6136789690924D+00 + 0.6271271101407D+00 0.6408556309226D+00 0.6548698728981D+00 0.6691752613333D+00 + 0.6837773059493D+00 0.6986816015479D+00 0.7138938286123D+00 0.7294197538810D+00 + 0.7452652308942D+00 0.7614362005101D+00 0.7779386913894D+00 0.7947788204470D+00 + 0.8119627932680D+00 0.8294969044866D+00 0.8473875381261D+00 0.8656411678975D+00 + 0.8842643574549D+00 0.9032637606047D+00 0.9226461214683D+00 0.9424182745935D+00 + 0.9625871450140D+00 0.9831597482541D+00 0.1004143190275D+01 0.1025544667362D+01 + 0.1047371465949D+01 0.1069630962376D+01 0.1092330622582D+01 0.1115478001718D+01 + 0.1139080743699D+01 0.1163146580667D+01 0.1187683332379D+01 0.1212698905512D+01 + 0.1238201292877D+01 0.1264198572546D+01 0.1290698906886D+01 0.1317710541494D+01 + 0.1345241804028D+01 0.1373301102944D+01 0.1401896926110D+01 0.1431037839321D+01 + 0.1460732484690D+01 0.1490989578921D+01 0.1521817911461D+01 0.1553226342519D+01 + 0.1585223800953D+01 0.1617819282025D+01 0.1651021845012D+01 0.1684840610666D+01 + 0.1719284758534D+01 0.1754363524114D+01 0.1790086195862D+01 0.1826462112019D+01 + 0.1863500657290D+01 0.1901211259327D+01 0.1939603385053D+01 0.1978686536792D+01 + 0.2018470248210D+01 0.2058964080068D+01 0.2100177615772D+01 0.2142120456722D+01 + 0.2184802217451D+01 0.2228232520549D+01 0.2272420991371D+01 0.2317377252521D+01 + 0.2363110918097D+01 0.2409631587718D+01 0.2456948840298D+01 0.2505072227579D+01 + 0.2554011267414D+01 0.2603775436800D+01 0.2654374164640D+01 0.2705816824249D+01 + 0.2758112725590D+01 0.2811271107225D+01 0.2865301128002D+01 0.2920211858443D+01 + 0.2976012271854D+01 0.3032711235135D+01 0.3090317499294D+01 0.3148839689666D+01 + 0.3208286295814D+01 0.3268665661132D+01 0.3329985972130D+01 0.3392255247403D+01 + 0.3455481326284D+01 0.3519671857166D+01 0.3584834285516D+01 0.3650975841540D+01 + 0.3718103527540D+01 0.3786224104928D+01 0.3855344080910D+01 0.3925469694842D+01 + 0.3996606904248D+01 0.4068761370505D+01 0.4141938444201D+01 0.4216143150155D+01 + 0.4291380172106D+01 0.4367653837082D+01 0.4444968099432D+01 0.4523326524540D+01 + 0.4602732272224D+01 0.4683188079814D+01 0.4764696244923D+01 0.4847258607911D+01 + 0.4930876534058D+01 0.5015550895439D+01 0.5101282052526D+01 0.5188069835504D+01 + 0.5275913525340D+01 0.5364811834582D+01 0.5454762887935D+01 0.5545764202593D+01 + 0.5637812668364D+01 0.5730904527600D+01 0.5825035354930D+01 0.5920200036841D+01 + 0.6016392751096D+01 0.6113606946037D+01 0.6211835319763D+01 0.6311069799237D+01 + 0.6411301519318D+01 0.6512520801757D+01 0.6614717134178D+01 0.6717879149076D+01 + 0.6821994602856D+01 0.6927050354936D+01 0.7033032346971D+01 0.7139925582197D+01 + 0.7247714104955D+01 0.7356380980422D+01 0.7465908274590D+01 0.7576277034522D+01 + 0.7687467268944D+01 0.7799457929201D+01 0.7912226890625D+01 0.8025750934367D+01 + 0.8140005729731D+01 0.8254965817070D+01 0.8370604591283D+01 0.8486894285977D+01 + 0.8603805958343D+01 0.8721309474805D+01 0.8839373497487D+01 0.8957965471583D+01 + 0.9077051613664D+01 0.9196596901005D+01 0.9316565061973D+01 0.9436918567578D+01 + 0.9557618624205D+01 0.9678625167647D+01 0.9799896858462D+01 0.9921391078761D+01 + 0.1004306393048D+02 0.1016487023519D+02 0.1028676353561D+02 0.1040869609872D+02 + 0.1053061892078D+02 0.1065248173410D+02 0.1077423301584D+02 0.1089581999877D+02 + 0.1101718868413D+02 0.1113828385666D+02 0.1125904910191D+02 0.1137942682584D+02 + 0.1149935827678D+02 0.1161878356999D+02 0.1173764171462D+02 0.1185587064341D+02 + 0.1197340724503D+02 0.1209018739920D+02 0.1220614601465D+02 0.1232121706995D+02 + 0.1243533365740D+02 0.1254842802982D+02 0.1266043165050D+02 0.1277127524634D+02 + 0.1288088886404D+02 0.1298920192971D+02 0.1309614331160D+02 0.1320164138629D+02 + 0.1330562410812D+02 0.1340801908212D+02 0.1350875364026D+02 0.1360775492116D+02 + 0.1370494995324D+02 0.1380026574132D+02 0.1389362935662D+02 0.1398496803019D+02 + 0.1407420924981D+02 0.1416128086012D+02 0.1424611116627D+02 0.1432862904069D+02 + 0.1440876403324D+02 0.1448644648440D+02 0.1456160764164D+02 0.1463417977876D+02 + 0.1470409631813D+02 0.1477129195572D+02 0.1483570278883D+02 0.1489726644633D+02 + 0.1495592222127D+02 0.1501161120574D+02 0.1506427642781D+02 0.1511386299027D+02 + 0.1516031821110D+02 0.1520359176531D+02 0.1524363582812D+02 0.1528040521898D+02 + 0.1531385754641D+02 0.1534395335325D+02 0.1537065626208D+02 0.1539393312048D+02 + 0.1541375414585D+02 0.1543009306950D+02 0.1544292727951D+02 0.1545223796216D+02 + 0.1545801024155D+02 0.1546023331695D+02 0.1545890059744D+02 0.1545400983365D+02 + 0.1544556324596D+02 0.1543356764880D+02 0.1541803457065D+02 0.1539898036925D+02 + 0.1537642634154D+02 0.1535039882796D+02 0.1532092931044D+02 0.1528805450387D+02 + 0.1525181644030D+02 0.1521226254557D+02 0.1516944570778D+02 0.1512342433713D+02 + 0.1507426241669D+02 0.1502202954350D+02 0.1496680095964D+02 0.1490865757272D+02 + 0.1484768596530D+02 0.1478397839284D+02 0.1471763276969D+02 0.1464875264266D+02 + 0.1457744715182D+02 0.1450383097801D+02 0.1442802427679D+02 0.1435015259838D+02 + 0.1427034679327D+02 0.1418874290321D+02 0.1410548203722D+02 0.1402071023247D+02 + 0.1393457829969D+02 0.1384724165293D+02 0.1375886012364D+02 0.1366959775879D+02 + 0.1357962260304D+02 0.1348910646488D+02 0.1339822466686D+02 0.1330715577980D+02 + 0.1321608134121D+02 0.1312518555808D+02 0.1303465499419D+02 0.1294467824221D+02 + 0.1285544558101D+02 0.1276714861841D+02 0.1267997991994D+02 0.1259413262403D+02 + 0.1250980004419D+02 0.1242717525885D+02 0.1234645068948D+02 0.1226781766776D+02 + 0.1219146599257D+02 0.1211758347770D+02 0.1204635549121D+02 0.1197796448732D+02 + 0.1191258953197D+02 0.1185040582321D+02 0.1179158420730D+02 0.1173629069208D+02 + 0.1168468595856D+02 0.1163692487226D+02 0.1159315599549D+02 0.1155352110209D+02 + 0.1151815469598D+02 0.1148718353503D+02 0.1146072616178D+02 0.1143889244247D+02 + 0.1142178311602D+02 0.1140948935454D+02 0.1140209233686D+02 0.1139966283678D+02 + 0.1140226082774D+02 0.1140993510519D+02 0.1142272292875D+02 0.1144064968524D+02 + 0.1146372857460D+02 0.1149196031991D+02 0.1152533290326D+02 0.1156382132880D+02 + 0.1160738741454D+02 0.1165597961412D+02 0.1170953287012D+02 0.1176796849989D+02 + 0.1183119411535D+02 0.1189910357777D+02 0.1197157698856D+02 0.1204848071701D+02 + 0.1212966746596D+02 0.1221497637600D+02 0.1230423316888D+02 0.1239725033077D+02 + 0.1249382733567D+02 0.1259375090926D+02 0.1269679533346D+02 0.1280272279167D+02 + 0.1291128375448D+02 0.1302221740584D+02 0.1313525210912D+02 0.1325010591253D+02 + 0.1336648709337D+02 0.1348409474012D+02 0.1360261937149D+02 0.1372174359123D+02 + 0.1384114277758D+02 0.1396048580566D+02 0.1407943580155D+02 0.1419765092608D+02 + 0.1431478518661D+02 0.1443048927478D+02 0.1454441142812D+02 0.1465619831308D+02 + 0.1476549592746D+02 0.1487195051928D+02 0.1497520951989D+02 0.1507492248828D+02 + 0.1517074206398D+02 0.1526232492551D+02 0.1534933275145D+02 0.1543143318112D+02 + 0.1550830077157D+02 0.1557961794797D+02 0.1564507594396D+02 0.1570437572881D+02 + 0.1575722891823D+02 0.1580335866539D+02 0.1584250052899D+02 0.1587440331524D+02 + 0.1589882989033D+02 0.1591555796049D+02 0.1592438081630D+02 0.1592510803844D+02 + 0.1591756616179D+02 0.1590159929512D+02 0.1587706969359D+02 0.1584385828154D+02 + 0.1580186512290D+02 0.1575100983720D+02 0.1569123195871D+02 0.1562249123695D+02 + 0.1554476787665D+02 0.1545806271560D+02 0.1536239733893D+02 0.1525781412875D+02 + 0.1514437624809D+02 0.1502216755847D+02 0.1489129247063D+02 0.1475187572813D+02 + 0.1460406212401D+02 0.1444801615062D+02 0.1428392158332D+02 0.1411198099888D+02 + 0.1393241522964D+02 0.1374546275490D+02 0.1355137903119D+02 0.1335043576333D+02 + 0.1314292011864D+02 0.1292913388664D+02 0.1270939258714D+02 0.1248402452972D+02 + 0.1225336982785D+02 0.1201777937125D+02 0.1177761376017D+02 0.1153324220569D+02 + 0.1128504140014D+02 0.1103339436205D+02 0.1077868926027D+02 0.1052131822179D+02 + 0.1026167612835D+02 0.1000015940663D+02 0.9737164817090D+01 0.9473088246666D+01 + 0.9208323510392D+01 0.8943261167138D+01 0.8678287354606D+01 0.8413782648689D+01 + 0.8150120952198D+01 0.7887668417870D+01 0.7626782410424D+01 0.7367810512255D+01 + 0.7111089577147D+01 0.6856944836175D+01 0.6605689059620D+01 0.6357621778576D+01 + 0.6113028569417D+01 0.5872180404071D+01 0.5635333068605D+01 0.5402726652271D+01 + 0.5174585108689D+01 0.4951115890458D+01 0.4732509658013D+01 0.4518940063093D+01 + 0.4310563606744D+01 0.4107519571314D+01 0.3909930025455D+01 0.3717899900701D+01 + 0.3531517137795D+01 0.3350852900521D+01 0.3175961854415D+01 0.3006882507418D+01 + 0.2843637609166D+01 0.2686234605393D+01 0.2534666143602D+01 0.2388910626020D+01 + 0.2248932805599D+01 0.2114684420764D+01 0.1986104864410D+01 0.1863121882663D+01 + 0.1745652298807D+01 0.1633602757816D+01 0.1526870486911D+01 0.1425344067651D+01 + 0.1328904215091D+01 0.1237424559686D+01 0.1150772427713D+01 0.1068809616148D+01 + 0.9913931580887D+00 0.9183760750247D+00 0.8496081124357D+00 0.7849364554513D+00 + 0.7242064215293D+00 0.6672621273712D+00 0.6139471275574D+00 0.5641050226618D+00 + 0.5175800348878D+00 0.4742175495586D+00 0.4338646210828D+00 0.3963704423129D+00 + 0.3615867764997D+00 0.3293683513354D+00 0.2995732148544D+00 0.2720630532321D+00 + 0.2467034707815D+00 0.2233642326902D+00 0.2019194712763D+00 0.1822478567499D+00 + 0.1642327336682D+00 0.1477622244444D+00 0.1327293014336D+00 0.1190318292464D+00 + 0.1065725790655D+00 0.9525921682581D-01 0.8500426719540D-01 0.7572505534570D-01 + 0.6734362852856D-01 0.5978665949119D-01 0.5298533375213D-01 0.4687522273735D-01 + 0.4139614473480D-01 0.3649201557103D-01 0.3211069084453D-01 0.2820380147099D-01 + 0.2472658420543D-01 0.2163770870794D-01 0.1889910261478D-01 0.1647577596641D-01 + 0.1433564623066D-01 0.1244936504301D-01 0.1079014767040D-01 0.9333606088531D-02 + 0.8057586449521D-02 0.6942011605538D-02 0.5968729247262D-02 0.5121366113861D-02 + 0.4385188634413D-02 0.3746970269980D-02 0.3194865741265D-02 0.2718292249293D-02 + 0.2307817726031D-02 0.1955056088404D-02 0.1652569412799D-02 0.1393776897745D-02 + 0.1172870439853D-02 0.9847366120634D-03 0.8248848034661D-03 0.6893812560569D-03 + 0.5747887154298D-03 0.4781113990982D-03 0.3967449774979D-03 0.3284312582634D-03 + 0.2712172636576D-03 0.2234183935981D-03 0.1835853721449D-03 0.1504746831443D-03 + 0.1230222105786D-03 0.1003198106540D-03 0.8159455542106D-04 0.6619040144209D-04 + 0.5355205138722D-04 0.4321079120846D-04 0.3477210045803D-04 0.2790484818898D-04 + 0.2233190152246D-04 0.1782198824118D-04 0.1418266855132D-04 0.1125428434880D-04 + 0.8904766856498D-05 0.7025195313453D-05 0.5526010459652D-05 0.4333796852085D-05 + 0.3388557563637D-05 0.2641413563333D-05 0.2052668070841D-05 0.1590183444862D-05 + 0.1228024735392D-05 0.9453299398051D-06 0.7253722919424D-06 0.5547846237125D-06 + 0.4229200131023D-06 0.3213266143727D-06 0.2433177983142D-06 0.1836215545666D-06 + 0.1380955642703D-06 0.1034964778941D-06 0.7729376586493D-07 0.5752008209307D-07 + 0.4265142355148D-07 0.3151151106808D-07 0.2319578320089D-07 0.1701120974173D-07 + 0.1242881489534D-07 0.9046371073667D-08 0.6559198960071D-08 0.4737402476978D-08 + 0.3408191153158D-08 0.2442208093542D-08 0.1742998768590D-08 0.1238932286038D-08 + 0.8770296193333D-09 0.6182683290111D-09 0.4340255982013D-09 0.3033950772413D-09 + 0.2111715589818D-09 0.1463438404983D-09 0.1009726185101D-09 0.6935859066118D-10 + 0.4742849271888D-10 0.3228488955626D-10 0.2187547853929D-10 0.1475212866899D-10 + 0.9901881750809D-11 0.6613860882122D-11 0.4396644350124D-11 0.2908650000322D-11 + 0.1914873227728D-11 0.1254415200484D-11 0.8176535094916D-12 0.5302708391854D-12 + 0.3421370551355D-12 0.2196087836422D-12 0.1402231518601D-12 0.8906014768602D-13 + LSMS: xx z= 26. xvalws= 2.77074 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728402963D+02-0.5199725117641D+02-0.5199721792578D+02-0.5199718427293D+02 +-0.5199715021300D+02-0.5199711574107D+02-0.5199708085214D+02-0.5199704554119D+02 +-0.5199700980309D+02-0.5199697363268D+02-0.5199693702474D+02-0.5199689997397D+02 +-0.5199686247500D+02-0.5199682452243D+02-0.5199678611076D+02-0.5199674723444D+02 +-0.5199670788785D+02-0.5199666806529D+02-0.5199662776101D+02-0.5199658696918D+02 +-0.5199654568390D+02-0.5199650389922D+02-0.5199646160907D+02-0.5199641880734D+02 +-0.5199637548785D+02-0.5199633164434D+02-0.5199628727046D+02-0.5199624235979D+02 +-0.5199619690585D+02-0.5199615090205D+02-0.5199610434176D+02-0.5199605721822D+02 +-0.5199600952464D+02-0.5199596125410D+02-0.5199591239964D+02-0.5199586295419D+02 +-0.5199581291060D+02-0.5199576226162D+02-0.5199571099994D+02-0.5199565911815D+02 +-0.5199560660874D+02-0.5199555346411D+02-0.5199549967658D+02-0.5199544523837D+02 +-0.5199539014162D+02-0.5199533437834D+02-0.5199527794048D+02-0.5199522081989D+02 +-0.5199516300828D+02-0.5199510449731D+02-0.5199504527851D+02-0.5199498534331D+02 +-0.5199492468306D+02-0.5199486328897D+02-0.5199480115217D+02-0.5199473826367D+02 +-0.5199467461436D+02-0.5199461019507D+02-0.5199454499646D+02-0.5199447900910D+02 +-0.5199441222344D+02-0.5199434462984D+02-0.5199427621849D+02-0.5199420697954D+02 +-0.5199413690295D+02-0.5199406597858D+02-0.5199399419618D+02-0.5199392154537D+02 +-0.5199384801563D+02-0.5199377359634D+02-0.5199369827672D+02-0.5199362204589D+02 +-0.5199354489281D+02-0.5199346680633D+02-0.5199338777515D+02-0.5199330778784D+02 +-0.5199322683282D+02-0.5199314489839D+02-0.5199306197270D+02-0.5199297804374D+02 +-0.5199289309939D+02-0.5199280712733D+02-0.5199272011516D+02-0.5199263205027D+02 +-0.5199254291992D+02-0.5199245271123D+02-0.5199236141114D+02-0.5199226900644D+02 +-0.5199217548376D+02-0.5199208082958D+02-0.5199198503019D+02-0.5199188807175D+02 +-0.5199178994021D+02-0.5199169062139D+02-0.5199159010092D+02-0.5199148836424D+02 +-0.5199138539665D+02-0.5199128118323D+02-0.5199117570892D+02-0.5199106895845D+02 +-0.5199096091638D+02-0.5199085156707D+02-0.5199074089471D+02-0.5199062888326D+02 +-0.5199051551654D+02-0.5199040077813D+02-0.5199028465143D+02-0.5199016711964D+02 +-0.5199004816574D+02-0.5198992777253D+02-0.5198980592257D+02-0.5198968259824D+02 +-0.5198955778170D+02-0.5198943145487D+02-0.5198930359948D+02-0.5198917419701D+02 +-0.5198904322875D+02-0.5198891067574D+02-0.5198877651879D+02-0.5198864073848D+02 +-0.5198850331517D+02-0.5198836422896D+02-0.5198822345972D+02-0.5198808098707D+02 +-0.5198793679039D+02-0.5198779084882D+02-0.5198764314123D+02-0.5198749364622D+02 +-0.5198734234217D+02-0.5198718920716D+02-0.5198703421905D+02-0.5198687735537D+02 +-0.5198671859343D+02-0.5198655791024D+02-0.5198639528254D+02-0.5198623068679D+02 +-0.5198606409915D+02-0.5198589549550D+02-0.5198572485143D+02-0.5198555214224D+02 +-0.5198537734293D+02-0.5198520042816D+02-0.5198502137235D+02-0.5198484014954D+02 +-0.5198465673351D+02-0.5198447109769D+02-0.5198428321519D+02-0.5198409305883D+02 +-0.5198390060104D+02-0.5198370581396D+02-0.5198350866939D+02-0.5198330913876D+02 +-0.5198310719319D+02-0.5198290280341D+02-0.5198269593983D+02-0.5198248657249D+02 +-0.5198227467106D+02-0.5198206020484D+02-0.5198184314277D+02-0.5198162345340D+02 +-0.5198140110492D+02-0.5198117606510D+02-0.5198094830136D+02-0.5198071778068D+02 +-0.5198048446968D+02-0.5198024833454D+02-0.5198000934107D+02-0.5197976745462D+02 +-0.5197952264015D+02-0.5197927486220D+02-0.5197902408485D+02-0.5197877027176D+02 +-0.5197851338615D+02-0.5197825339081D+02-0.5197799024804D+02-0.5197772391971D+02 +-0.5197745436723D+02-0.5197718155151D+02-0.5197690543304D+02-0.5197662597177D+02 +-0.5197634312720D+02-0.5197605685833D+02-0.5197576712367D+02-0.5197547388122D+02 +-0.5197517708846D+02-0.5197487670236D+02-0.5197457267938D+02-0.5197426497542D+02 +-0.5197395354589D+02-0.5197363834563D+02-0.5197331932893D+02-0.5197299644952D+02 +-0.5197266966059D+02-0.5197233891476D+02-0.5197200416404D+02-0.5197166535990D+02 +-0.5197132245319D+02-0.5197097539418D+02-0.5197062413252D+02-0.5197026861727D+02 +-0.5196990879687D+02-0.5196954461909D+02-0.5196917603112D+02-0.5196880297948D+02 +-0.5196842541005D+02-0.5196804326804D+02-0.5196765649801D+02-0.5196726504383D+02 +-0.5196686884871D+02-0.5196646785514D+02-0.5196606200494D+02-0.5196565123919D+02 +-0.5196523549829D+02-0.5196481472189D+02-0.5196438884890D+02-0.5196395781753D+02 +-0.5196352156518D+02-0.5196308002855D+02-0.5196263314350D+02-0.5196218084518D+02 +-0.5196172306789D+02-0.5196125974518D+02-0.5196079080977D+02-0.5196031619354D+02 +-0.5195983582758D+02-0.5195934964214D+02-0.5195885756657D+02-0.5195835952942D+02 +-0.5195785545834D+02-0.5195734528011D+02-0.5195682892060D+02-0.5195630630481D+02 +-0.5195577735679D+02-0.5195524199969D+02-0.5195470015573D+02-0.5195415174616D+02 +-0.5195359669127D+02-0.5195303491041D+02-0.5195246632192D+02-0.5195189084316D+02 +-0.5195130839046D+02-0.5195071887917D+02-0.5195012222358D+02-0.5194951833693D+02 +-0.5194890713143D+02-0.5194828851819D+02-0.5194766240726D+02-0.5194702870759D+02 +-0.5194638732701D+02-0.5194573817222D+02-0.5194508114882D+02-0.5194441616121D+02 +-0.5194374311266D+02-0.5194306190525D+02-0.5194237243986D+02-0.5194167461616D+02 +-0.5194096833262D+02-0.5194025348643D+02-0.5193952997356D+02-0.5193879768871D+02 +-0.5193805652527D+02-0.5193730637535D+02-0.5193654712973D+02-0.5193577867788D+02 +-0.5193500090790D+02-0.5193421370652D+02-0.5193341695911D+02-0.5193261054963D+02 +-0.5193179436061D+02-0.5193096827316D+02-0.5193013216694D+02-0.5192928592013D+02 +-0.5192842940944D+02-0.5192756251004D+02-0.5192668509561D+02-0.5192579703828D+02 +-0.5192489820860D+02-0.5192398847556D+02-0.5192306770652D+02-0.5192213576726D+02 +-0.5192119252189D+02-0.5192023783287D+02-0.5191927156096D+02-0.5191829356524D+02 +-0.5191730370307D+02-0.5191630183005D+02-0.5191528780001D+02-0.5191426146503D+02 +-0.5191322267532D+02-0.5191217127930D+02-0.5191110712354D+02-0.5191003005272D+02 +-0.5190893990959D+02-0.5190783653503D+02-0.5190671976795D+02-0.5190558944528D+02 +-0.5190444540195D+02-0.5190328747089D+02-0.5190211548297D+02-0.5190092926700D+02 +-0.5189972864968D+02-0.5189851345560D+02-0.5189728350719D+02-0.5189603862472D+02 +-0.5189477862625D+02-0.5189350332759D+02-0.5189221254235D+02-0.5189090608179D+02 +-0.5188958375491D+02-0.5188824536834D+02-0.5188689072635D+02-0.5188551963080D+02 +-0.5188413188114D+02-0.5188272727435D+02-0.5188130560492D+02-0.5187986666482D+02 +-0.5187841024347D+02-0.5187693612772D+02-0.5187544410178D+02-0.5187393394724D+02 +-0.5187240544300D+02-0.5187085836524D+02-0.5186929248740D+02-0.5186770758014D+02 +-0.5186610341132D+02-0.5186447974591D+02-0.5186283634606D+02-0.5186117297093D+02 +-0.5185948937678D+02-0.5185778531685D+02-0.5185606054135D+02-0.5185431479744D+02 +-0.5185254782916D+02-0.5185075937741D+02-0.5184894917991D+02-0.5184711697117D+02 +-0.5184526248242D+02-0.5184338544160D+02-0.5184148557330D+02-0.5183956259875D+02 +-0.5183761623572D+02-0.5183564619854D+02-0.5183365219802D+02-0.5183163394142D+02 +-0.5182959113240D+02-0.5182752347098D+02-0.5182543065350D+02-0.5182331237255D+02 +-0.5182116831697D+02-0.5181899817174D+02-0.5181680161800D+02-0.5181457833297D+02 +-0.5181232798987D+02-0.5181005025795D+02-0.5180774480235D+02-0.5180541128413D+02 +-0.5180304936016D+02-0.5180065868310D+02-0.5179823890134D+02-0.5179578965895D+02 +-0.5179331059564D+02-0.5179080134665D+02-0.5178826154277D+02-0.5178569081025D+02 +-0.5178308877073D+02-0.5178045504121D+02-0.5177778923399D+02-0.5177509095659D+02 +-0.5177235981171D+02-0.5176959539717D+02-0.5176679730585D+02-0.5176396512563D+02 +-0.5176109843930D+02-0.5175819682457D+02-0.5175525985390D+02-0.5175228709457D+02 +-0.5174927810849D+02-0.5174623245221D+02-0.5174314967682D+02-0.5174002932792D+02 +-0.5173687094551D+02-0.5173367406395D+02-0.5173043821187D+02-0.5172716291215D+02 +-0.5172384768177D+02-0.5172049203182D+02-0.5171709546736D+02-0.5171365748739D+02 +-0.5171017758479D+02-0.5170665524617D+02-0.5170308995189D+02-0.5169948117592D+02 +-0.5169582838578D+02-0.5169213104249D+02-0.5168838860043D+02-0.5168460050732D+02 +-0.5168076620412D+02-0.5167688512494D+02-0.5167295669696D+02-0.5166898034036D+02 +-0.5166495546822D+02-0.5166088148646D+02-0.5165675779371D+02-0.5165258378128D+02 +-0.5164835883303D+02-0.5164408232529D+02-0.5163975362681D+02-0.5163537209858D+02 +-0.5163093709386D+02-0.5162644795799D+02-0.5162190402831D+02-0.5161730463415D+02 +-0.5161264909661D+02-0.5160793672858D+02-0.5160316683457D+02-0.5159833871062D+02 +-0.5159345164422D+02-0.5158850491424D+02-0.5158349779076D+02-0.5157842953502D+02 +-0.5157329939929D+02-0.5156810662682D+02-0.5156285045165D+02-0.5155753009857D+02 +-0.5155214478300D+02-0.5154669371088D+02-0.5154117607855D+02-0.5153559107266D+02 +-0.5152993787006D+02-0.5152421563767D+02-0.5151842353238D+02-0.5151256070096D+02 +-0.5150662627991D+02-0.5150061939535D+02-0.5149453916296D+02-0.5148838468777D+02 +-0.5148215506412D+02-0.5147584937554D+02-0.5146946669454D+02-0.5146300608264D+02 +-0.5145646659012D+02-0.5144984725596D+02-0.5144314710771D+02-0.5143636516137D+02 +-0.5142950042123D+02-0.5142255187982D+02-0.5141551851771D+02-0.5140839930344D+02 +-0.5140119319335D+02-0.5139389913149D+02-0.5138651604948D+02-0.5137904286634D+02 +-0.5137147848843D+02-0.5136382180931D+02-0.5135607170955D+02-0.5134822705665D+02 +-0.5134028670491D+02-0.5133224949527D+02-0.5132411425521D+02-0.5131587979859D+02 +-0.5130754492555D+02-0.5129910842232D+02-0.5129056906116D+02-0.5128192560017D+02 +-0.5127317678315D+02-0.5126432133956D+02-0.5125535798425D+02-0.5124628541740D+02 +-0.5123710232443D+02-0.5122780737574D+02-0.5121839922671D+02-0.5120887651745D+02 +-0.5119923787276D+02-0.5118948190193D+02-0.5117960719865D+02-0.5116961234085D+02 +-0.5115949589056D+02-0.5114925639380D+02-0.5113889238044D+02-0.5112840236408D+02 +-0.5111778484188D+02-0.5110703829447D+02-0.5109616118579D+02-0.5108515196301D+02 +-0.5107400905631D+02-0.5106273087889D+02-0.5105131582667D+02-0.5103976227836D+02 +-0.5102806859514D+02-0.5101623312071D+02-0.5100425418105D+02-0.5099213008436D+02 +-0.5097985912091D+02-0.5096743956297D+02-0.5095486966464D+02-0.5094214766176D+02 +-0.5092927177183D+02-0.5091624019384D+02-0.5090305110822D+02-0.5088970267672D+02 +-0.5087619304230D+02-0.5086252032900D+02-0.5084868264193D+02-0.5083467806710D+02 +-0.5082050467136D+02-0.5080616050232D+02-0.5079164358822D+02-0.5077695193792D+02 +-0.5076208354076D+02-0.5074703636655D+02-0.5073180836542D+02-0.5071639746782D+02 +-0.5070080158445D+02-0.5068501860613D+02-0.5066904640389D+02-0.5065288282874D+02 +-0.5063652571181D+02-0.5061997286414D+02-0.5060322207678D+02-0.5058627112067D+02 +-0.5056911774669D+02-0.5055175968555D+02-0.5053419464788D+02-0.5051642032411D+02 +-0.5049843438458D+02-0.5048023447945D+02-0.5046181823877D+02-0.5044318327247D+02 +-0.5042432717038D+02-0.5040524750226D+02-0.5038594181787D+02-0.5036640764694D+02 +-0.5034664249930D+02-0.5032664386488D+02-0.5030640921379D+02-0.5028593599640D+02 +-0.5026522164341D+02-0.5024426356594D+02-0.5022305915564D+02-0.5020160578474D+02 +-0.5017990080623D+02-0.5015794155393D+02-0.5013572534263D+02-0.5011324946826D+02 +-0.5009051120796D+02-0.5006750782030D+02-0.5004423654542D+02-0.5002069460521D+02 +-0.4999687920344D+02-0.4997278752603D+02-0.4994841674120D+02-0.4992376399966D+02 +-0.4989882643488D+02-0.4987360116327D+02-0.4984808528443D+02-0.4982227588141D+02 +-0.4979617002094D+02-0.4976976475371D+02-0.4974305711462D+02-0.4971604412309D+02 +-0.4968872278335D+02-0.4966109008469D+02-0.4963314300185D+02-0.4960487849528D+02 +-0.4957629351145D+02-0.4954738498327D+02-0.4951814983035D+02-0.4948858495939D+02 +-0.4945868726453D+02-0.4942845362775D+02-0.4939788091919D+02-0.4936696599757D+02 +-0.4933570571061D+02-0.4930409689534D+02-0.4927213637859D+02-0.4923982097740D+02 +-0.4920714749935D+02-0.4917411274309D+02-0.4914071349870D+02-0.4910694654815D+02 +-0.4907280866573D+02-0.4903829661848D+02-0.4900340716666D+02-0.4896813706420D+02 +-0.4893248305909D+02-0.4889644189392D+02-0.4886001030623D+02-0.4882318502909D+02 +-0.4878596279141D+02-0.4874834031849D+02-0.4871031433244D+02-0.4867188155262D+02 +-0.4863303869609D+02-0.4859378247804D+02-0.4855410961222D+02-0.4851401681140D+02 +-0.4847350078774D+02-0.4843255825325D+02-0.4839118592018D+02-0.4834938050138D+02 +-0.4830713871075D+02-0.4826445726356D+02-0.4822133287682D+02-0.4817776226967D+02 +-0.4813374216365D+02-0.4808926928306D+02-0.4804434035526D+02-0.4799895211091D+02 +-0.4795310128431D+02-0.4790678461358D+02-0.4785999884093D+02-0.4781274071282D+02 +-0.4776500698020D+02-0.4771679439861D+02-0.4766809972836D+02-0.4761891973461D+02 +-0.4756925118748D+02-0.4751909086208D+02-0.4746843553857D+02-0.4741728200213D+02 +-0.4736562704295D+02-0.4731346745620D+02-0.4726080004188D+02-0.4720762160479D+02 +-0.4715392895431D+02-0.4709971890425D+02-0.4704498827268D+02-0.4698973388163D+02 +-0.4693395255690D+02-0.4687764112767D+02-0.4682079642628D+02-0.4676341528777D+02 +-0.4670549454962D+02-0.4664703105122D+02-0.4658802163351D+02-0.4652846313853D+02 +-0.4646835240891D+02-0.4640768628735D+02-0.4634646161617D+02-0.4628467523671D+02 +-0.4622232398885D+02-0.4615940471037D+02-0.4609591423645D+02-0.4603184939910D+02 +-0.4596720702657D+02-0.4590198394276D+02-0.4583617696675D+02-0.4576978291218D+02 +-0.4570279858676D+02-0.4563522079176D+02-0.4556704632159D+02-0.4549827196328D+02 +-0.4542889449617D+02-0.4535891069156D+02-0.4528831731237D+02-0.4521711111299D+02 +-0.4514528883912D+02-0.4507284722768D+02-0.4499978300686D+02-0.4492609289624D+02 +-0.4485177360700D+02-0.4477682184233D+02-0.4470123429783D+02-0.4462500766219D+02 +-0.4454813861790D+02-0.4447062384219D+02-0.4439246000814D+02-0.4431364378589D+02 +-0.4423417184413D+02-0.4415404085174D+02-0.4407324747964D+02-0.4399178840285D+02 +-0.4390966030283D+02-0.4382685986996D+02-0.4374338380636D+02-0.4365922882888D+02 +-0.4357439167239D+02-0.4348886909331D+02-0.4340265787340D+02-0.4331575482384D+02 +-0.4322815678953D+02-0.4313986065369D+02-0.4305086334268D+02-0.4296116183110D+02 +-0.4287075314713D+02-0.4277963437808D+02-0.4268780267613D+02-0.4259525526436D+02 +-0.4250198944278D+02-0.4240800259471D+02-0.4231329219311D+02-0.4221785580702D+02 +-0.4212169110814D+02-0.4202479587724D+02-0.4192716801066D+02-0.4182880552657D+02 +-0.4172970657123D+02-0.4162986942478D+02-0.4152929250699D+02-0.4142797438248D+02 +-0.4132591376546D+02-0.4122310952415D+02-0.4111956068435D+02-0.4101526643252D+02 +-0.4091022611799D+02-0.4080443925436D+02-0.4069790551997D+02-0.4059062475744D+02 +-0.4048259697200D+02-0.4037382232884D+02-0.4026430114924D+02-0.4015403390548D+02 +-0.4004302121449D+02-0.3993126383031D+02-0.3981876263529D+02-0.3970551863000D+02 +-0.3959153292214D+02-0.3947680671418D+02-0.3936134129010D+02-0.3924513800125D+02 +-0.3912819825140D+02-0.3901052348125D+02-0.3889211515259D+02-0.3877297473220D+02 +-0.3865310367583D+02-0.3853250341248D+02-0.3841117532917D+02-0.3828912075654D+02 +-0.3816634095549D+02-0.3804283710513D+02-0.3791861029232D+02-0.3779366150300D+02 +-0.3766799161555D+02-0.3754160139636D+02-0.3741449149782D+02-0.3728666245883D+02 +-0.3715811470790D+02-0.3702884856900D+02-0.3689886427010D+02-0.3676816195438D+02 +-0.3663674169408D+02-0.3650460350690D+02-0.3637174737474D+02-0.3623817326473D+02 +-0.3610388115218D+02-0.3596887104531D+02-0.3583314301154D+02-0.3569669720495D+02 +-0.3555953389464D+02-0.3542165349386D+02-0.3528305658922D+02-0.3514374397011D+02 +-0.3500371665774D+02-0.3486297593358D+02-0.3472152336690D+02-0.3457936084122D+02 +-0.3443649057928D+02-0.3429291516643D+02-0.3414863757211D+02-0.3400366116934D+02 +-0.3385798975190D+02-0.3371162754922D+02-0.3356457923876D+02-0.3341684995570D+02 +-0.3326844530007D+02-0.3311937134098D+02-0.3296963461820D+02-0.3281924214079D+02 +-0.3266820138293D+02-0.3251652027694D+02-0.3236420720350D+02-0.3221127097903D+02 +-0.3205772084042D+02-0.3190356642710D+02-0.3174881776049D+02-0.3159348522098D+02 +-0.3143757952257D+02-0.3128111168511D+02-0.3112409300454D+02-0.3096653502093D+02 +-0.3080844948479D+02-0.3064984832153D+02-0.3049074359439D+02-0.3033114746593D+02 +-0.3017107215833D+02-0.3001052991254D+02-0.2984953294675D+02-0.2968809341400D+02 +-0.2952622335948D+02-0.2936393467762D+02-0.2920123906907D+02-0.2903814799805D+02 +-0.2887467265011D+02-0.2871082389066D+02-0.2854661222446D+02-0.2838204775647D+02 +-0.2821714015409D+02-0.2805189861135D+02-0.2788633181514D+02-0.2772044791378D+02 +-0.2755425448842D+02-0.2738775852723D+02-0.2722096640307D+02-0.2705388385454D+02 +-0.2688651597109D+02-0.2671886718221D+02-0.2655094125117D+02-0.2638274127348D+02 +-0.2621426968047D+02-0.2604552824823D+02-0.2587651811214D+02-0.2570723978730D+02 +-0.2553769319514D+02-0.2536787769632D+02-0.2519779213021D+02-0.2502743486110D+02 +-0.2485680383129D+02-0.2468589662112D+02-0.2451471051601D+02-0.2434324258050D+02 +-0.2417148973924D+02-0.2399944886481D+02-0.2382711687194D+02-0.2365449081810D+02 +-0.2348156800981D+02-0.2330834611404D+02-0.2313482327422D+02-0.2296099822964D+02 +-0.2278687043744D+02-0.2261244019567D+02-0.2243770876615D+02-0.2226267849517D+02 +-0.2208735293014D+02-0.2191173693001D+02-0.2173583676674D+02-0.2155966021537D+02 +-0.2138321662948D+02-0.2120651699903D+02-0.2102957398727D+02-0.2085240194340D+02 +-0.2067501688787D+02-0.2049743646710D+02-0.2031967987514D+02-0.2014176773999D+02 +-0.1996372197331D+02-0.1978556558301D+02-0.1960732244950D+02-0.1942901706755D+02 +-0.1925067425750D+02-0.1907231885074D+02-0.1889397535633D+02-0.1871566761696D+02 +-0.1853741846374D+02-0.1835924938052D+02-0.1818118018868D+02-0.1800322876380D+02 +-0.1782541079491D+02-0.1764773959582D+02-0.1747022597686D+02-0.1729287818264D+02 +-0.1711570189939D+02-0.1693870033244D+02-0.1676187435187D+02-0.1658522270158D+02 +-0.1640874226459D+02-0.1623242837596D+02-0.1605627517269D+02-0.1588027596970D+02 +-0.1570442365062D+02-0.1552871106216D+02-0.1535313140208D+02-0.1517767859145D+02 +-0.1500234762341D+02-0.1482713488228D+02-0.1465203842815D+02-0.1447705824363D+02 +-0.1430219644106D+02-0.1412745742929D+02-0.1395284804054D+02-0.1377837761854D+02 +-0.1360405806987D+02-0.1342990388081D+02-0.1325593210249D+02-0.1308216230731D+02 +-0.1290861651951D+02-0.1273531912305D+02-0.1256229674959D+02-0.1238957814960D+02 +-0.1221719404907D+02-0.1204517699438D+02-0.1187356118783D+02-0.1170238231558D+02 +-0.1153167737042D+02-0.1136148447069D+02-0.1119184267735D+02-0.1102279181034D+02 +-0.1085437226576D+02-0.1068662483495D+02-0.1051959052659D+02-0.1035331039265D+02 +-0.1018782535928D+02-0.1002317606321D+02-0.9859402694342D+01-0.9696544845323D+01 +-0.9534641368482D+01-0.9373730240659D+01-0.9213848436346D+01-0.9055031809511D+01 +-0.8897314984394D+01-0.8740731255549D+01-0.8585312497336D+01-0.8431089083029D+01 +-0.8278089813661D+01-0.8126341856676D+01-0.7975870694439D+01-0.7826700082584D+01 +-0.7678852018171D+01-0.7532346717566D+01-0.7387202603932D+01-0.7243436304187D+01 +-0.7101062655233D+01-0.6960094719270D+01-0.6820543807924D+01-0.6682419514939D+01 +-0.6545729757123D+01-0.6410480823229D+01-0.6276677430423D+01-0.6144322787958D+01 +-0.6013418667669D+01-0.5883965480867D+01-0.5755962361193D+01-0.5629407252975D+01 +-0.5504297004604D+01-0.5380627466436D+01-0.5258393592702D+01-0.5137589546863D+01 +-0.5018208809882D+01-0.4900244290793D+01-0.4783688438971D+01-0.4668533357470D+01 +-0.4554770916754D+01-0.4442392868124D+01-0.4331390956131D+01-0.4221757029192D+01 +-0.4113483147635D+01-0.4006561688322D+01-0.3900985445011D+01-0.3796747723533D+01 +-0.3693842430876D+01-0.3592264157211D+01-0.3492008249906D+01-0.3393070878541D+01 +-0.3295449089976D+01-0.3199140852531D+01-0.3104145088414D+01-0.3010461693592D+01 +-0.2918091544431D+01-0.2827036490592D+01-0.2737299333835D+01-0.2648883792669D+01 +-0.2561794453010D+01-0.2476036705393D+01-0.2391616669610D+01-0.2308541108029D+01 +-0.2226817329318D+01-0.2146453084634D+01-0.2067456458802D+01-0.1989835759339D+01 +-0.1913599406514D+01-0.1838755827812D+01-0.1765313360391D+01-0.1693280165020D+01 +-0.1622664154978D+01-0.1553472943063D+01-0.1485713809518D+01-0.1419393693186D+01 +-0.1354519207570D+01-0.1291096682842D+01-0.1229132234097D+01-0.1168631855453D+01 +-0.1109601538882D+01-0.1052047416050D+01-0.9959759208814D+00-0.9413939701484D+00 +-0.8883091590719D+00-0.8367299687430D+00-0.7866659821253D+00-0.7381281054637D+00 +-0.6911287920896D+00-0.6456822658698D+00-0.6018047418553D+00-0.5595146420441D+00 +-0.5188328045500D+00-0.4797826848498D+00-0.4423905481512D+00-0.4066856522662D+00 +-0.3727004206897D+00-0.3404706058472D+00-0.3100354427093D+00-0.2814377931599D+00 +-0.2547240189175D+00 + 0.0000000000000D+00 + 1012 0.2770741520224D+01 + 0.2150927949039D-04 0.2202124536575D-04 0.2254539478646D-04 0.2308201760180D-04 + 0.2363141055333D-04 0.2419387743865D-04 0.2476972927906D-04 0.2535928449121D-04 + 0.2596286906285D-04 0.2658081673262D-04 0.2721346917432D-04 0.2786117618535D-04 + 0.2852429587973D-04 0.2920319488569D-04 0.2989824854795D-04 0.3060984113473D-04 + 0.3133836604977D-04 0.3208422604934D-04 0.3284783346437D-04 0.3362961042788D-04 + 0.3442998910781D-04 0.3524941194536D-04 0.3608833189898D-04 0.3694721269416D-04 + 0.3782652907911D-04 0.3872676708658D-04 0.3964842430179D-04 0.4059201013679D-04 + 0.4155804611131D-04 0.4254706614023D-04 0.4355961682789D-04 0.4459625776943D-04 + 0.4565756185917D-04 0.4674411560639D-04 0.4785651945856D-04 0.4899538813222D-04 + 0.5016135095172D-04 0.5135505219602D-04 0.5257715145361D-04 0.5382832398596D-04 + 0.5510926109951D-04 0.5642067052648D-04 0.5776327681476D-04 0.5913782172693D-04 + 0.6054506464885D-04 0.6198578300785D-04 0.6346077270088D-04 0.6497084853274D-04 + 0.6651684466474D-04 0.6809961507398D-04 0.6972003402351D-04 0.7137899654355D-04 + 0.7307741892426D-04 0.7481623921999D-04 0.7659641776564D-04 0.7841893770513D-04 + 0.8028480553242D-04 0.8219505164534D-04 0.8415073091254D-04 0.8615292325379D-04 + 0.8820273423416D-04 0.9030129567206D-04 0.9244976626185D-04 0.9464933221109D-04 + 0.9690120789284D-04 0.9920663651351D-04 0.1015668907964D-03 0.1039832736813D-03 + 0.1064571190411D-03 0.1089897924148D-03 0.1115826917580D-03 0.1142372482113D-03 + 0.1169549268870D-03 0.1197372276738D-03 0.1225856860613D-03 0.1255018739831D-03 + 0.1284874006808D-03 0.1315439135877D-03 0.1346730992336D-03 0.1378766841712D-03 + 0.1411564359238D-03 0.1445141639563D-03 0.1479517206680D-03 0.1514710024102D-03 + 0.1550739505263D-03 0.1587625524179D-03 0.1625388426349D-03 0.1664049039925D-03 + 0.1703628687133D-03 0.1744149195974D-03 0.1785632912194D-03 0.1828102711544D-03 + 0.1871582012321D-03 0.1916094788209D-03 0.1961665581427D-03 0.2008319516176D-03 + 0.2056082312418D-03 0.2104980299966D-03 0.2155040432913D-03 0.2206290304405D-03 + 0.2258758161753D-03 0.2312472921908D-03 0.2367464187300D-03 0.2423762262044D-03 + 0.2481398168542D-03 0.2540403664457D-03 0.2600811260106D-03 0.2662654236245D-03 + 0.2725966662290D-03 0.2790783414953D-03 0.2857140197324D-03 0.2925073558401D-03 + 0.2994620913080D-03 0.3065820562611D-03 0.3138711715547D-03 0.3213334509168D-03 + 0.3289730031429D-03 0.3367940343406D-03 0.3448008502286D-03 0.3529978584881D-03 + 0.3613895711713D-03 0.3699806071650D-03 0.3787756947128D-03 0.3877796739964D-03 + 0.3969974997780D-03 0.4064342441040D-03 0.4160950990725D-03 0.4259853796663D-03 + 0.4361105266519D-03 0.4464761095462D-03 0.4570878296540D-03 0.4679515231757D-03 + 0.4790731643881D-03 0.4904588689006D-03 0.5021148969868D-03 0.5140476569946D-03 + 0.5262637088364D-03 0.5387697675611D-03 0.5515727070097D-03 0.5646795635561D-03 + 0.5780975399370D-03 0.5918340091694D-03 0.6058965185620D-03 0.6202927938188D-03 + 0.6350307432396D-03 0.6501184620192D-03 0.6655642366457D-03 0.6813765494038D-03 + 0.6975640829812D-03 0.7141357251847D-03 0.7311005737650D-03 0.7484679413557D-03 + 0.7662473605260D-03 0.7844485889531D-03 0.8030816147148D-03 0.8221566617048D-03 + 0.8416841951763D-03 0.8616749274129D-03 0.8821398235337D-03 0.9030901074324D-03 + 0.9245372678559D-03 0.9464930646236D-03 0.9689695349932D-03 0.9919790001731D-03 + 0.1015534071988D-02 0.1039647659698D-02 0.1064332976981D-02 0.1089603549068D-02 + 0.1115473220057D-02 0.1141956160389D-02 0.1169066874495D-02 0.1196820208634D-02 + 0.1225231358897D-02 0.1254315879409D-02 0.1284089690715D-02 0.1314569088366D-02 + 0.1345770751696D-02 0.1377711752814D-02 0.1410409565795D-02 0.1443882076088D-02 + 0.1478147590144D-02 0.1513224845264D-02 0.1549133019674D-02 0.1585891742841D-02 + 0.1623521106018D-02 0.1662041673040D-02 0.1701474491365D-02 0.1741841103378D-02 + 0.1783163557945D-02 0.1825464422244D-02 0.1868766793867D-02 0.1913094313196D-02 + 0.1958471176071D-02 0.2004922146751D-02 0.2052472571166D-02 0.2101148390486D-02 + 0.2150976154989D-02 0.2201983038264D-02 0.2254196851731D-02 0.2307646059493D-02 + 0.2362359793542D-02 0.2418367869301D-02 0.2475700801533D-02 0.2534389820612D-02 + 0.2594466889165D-02 0.2655964719104D-02 0.2718916789042D-02 0.2783357362106D-02 + 0.2849321504172D-02 0.2916845102501D-02 0.2985964884814D-02 0.3056718438800D-02 + 0.3129144232066D-02 0.3203281632551D-02 0.3279170929405D-02 0.3356853354336D-02 + 0.3436371103460D-02 0.3517767359634D-02 0.3601086315312D-02 0.3686373195913D-02 + 0.3773674283724D-02 0.3863036942351D-02 0.3954509641719D-02 0.4048141983652D-02 + 0.4143984728019D-02 0.4242089819491D-02 0.4342510414893D-02 0.4445300911185D-02 + 0.4550516974067D-02 0.4658215567249D-02 0.4768454982366D-02 0.4881294869584D-02 + 0.4996796268890D-02 0.5115021642093D-02 0.5236034905549D-02 0.5359901463622D-02 + 0.5486688242898D-02 0.5616463727181D-02 0.5749297993262D-02 0.5885262747508D-02 + 0.6024431363262D-02 0.6166878919093D-02 0.6312682237899D-02 0.6461919926891D-02 + 0.6614672418475D-02 0.6771022012045D-02 0.6931052916716D-02 0.7094851295016D-02 + 0.7262505307545D-02 0.7434105158642D-02 0.7609743143066D-02 0.7789513693721D-02 + 0.7973513430440D-02 0.8161841209859D-02 0.8354598176397D-02 0.8551887814376D-02 + 0.8753816001287D-02 0.8960491062250D-02 0.9172023825667D-02 0.9388527680122D-02 + 0.9610118632529D-02 0.9836915367568D-02 0.1006903930843D-01 0.1030661467892D-01 + 0.1054976856688D-01 0.1079863098909D-01 0.1105333495749D-01 0.1131401654696D-01 + 0.1158081496451D-01 0.1185387262003D-01 0.1213333519856D-01 0.1241935173418D-01 + 0.1271207468545D-01 0.1301166001257D-01 0.1331826725616D-01 0.1363205961778D-01 + 0.1395320404221D-01 0.1428187130150D-01 0.1461823608081D-01 0.1496247706623D-01 + 0.1531477703430D-01 0.1567532294367D-01 0.1604430602860D-01 0.1642192189452D-01 + 0.1680837061563D-01 0.1720385683464D-01 0.1760858986456D-01 0.1802278379280D-01 + 0.1844665758734D-01 0.1888043520531D-01 0.1932434570378D-01 0.1977862335297D-01 + 0.2024350775185D-01 0.2071924394615D-01 0.2120608254895D-01 0.2170427986376D-01 + 0.2221409801021D-01 0.2273580505238D-01 0.2326967512987D-01 0.2381598859160D-01 + 0.2437503213237D-01 0.2494709893234D-01 0.2553248879941D-01 0.2613150831454D-01 + 0.2674447098014D-01 0.2737169737147D-01 0.2801351529124D-01 0.2867025992742D-01 + 0.2934227401421D-01 0.3002990799646D-01 0.3073352019732D-01 0.3145347698951D-01 + 0.3219015296988D-01 0.3294393113773D-01 0.3371520307664D-01 0.3450436914006D-01 + 0.3531183864059D-01 0.3613803004319D-01 0.3698337116219D-01 0.3784829936233D-01 + 0.3873326176383D-01 0.3963871545150D-01 0.4056512768813D-01 0.4151297613205D-01 + 0.4248274905905D-01 0.4347494558865D-01 0.4449007591493D-01 0.4552866154180D-01 + 0.4659123552298D-01 0.4767834270657D-01 0.4879053998454D-01 0.4992839654695D-01 + 0.5109249414114D-01 0.5228342733595D-01 0.5350180379101D-01 0.5474824453121D-01 + 0.5602338422639D-01 0.5732787147645D-01 0.5866236910176D-01 0.6002755443915D-01 + 0.6142411964345D-01 0.6285277199472D-01 0.6431423421119D-01 0.6580924476805D-01 + 0.6733855822219D-01 0.6890294554290D-01 0.7050319444864D-01 0.7214010975008D-01 + 0.7381451369925D-01 0.7552724634520D-01 0.7727916589591D-01 0.7907114908690D-01 + 0.8090409155624D-01 0.8277890822643D-01 0.8469653369292D-01 0.8665792261951D-01 + 0.8866405014071D-01 0.9071591227111D-01 0.9281452632182D-01 0.9496093132410D-01 + 0.9715618846031D-01 0.9940138150208D-01 0.1016976172560D+00 0.1040460260169D+00 + 0.1064477620282D+00 0.1089040039508D+00 0.1114159553388D+00 0.1139848451236D+00 + 0.1166119281054D+00 0.1192984854532D+00 0.1220458252122D+00 0.1248552828197D+00 + 0.1277282216288D+00 0.1306660334408D+00 0.1336701390448D+00 0.1367419887670D+00 + 0.1398830630269D+00 0.1430948729031D+00 0.1463789607067D+00 0.1497369005636D+00 + 0.1531702990050D+00 0.1566807955666D+00 0.1602700633964D+00 0.1639398098711D+00 + 0.1676917772207D+00 0.1715277431623D+00 0.1754495215419D+00 0.1794589629856D+00 + 0.1835579555582D+00 0.1877484254317D+00 0.1920323375616D+00 0.1964116963718D+00 + 0.2008885464482D+00 0.2054649732406D+00 0.2101431037732D+00 0.2149251073635D+00 + 0.2198131963488D+00 0.2248096268222D+00 0.2299166993754D+00 0.2351367598503D+00 + 0.2404722000984D+00 0.2459254587480D+00 0.2514990219789D+00 0.2571954243047D+00 + 0.2630172493626D+00 0.2689671307106D+00 0.2750477526311D+00 0.2812618509418D+00 + 0.2876122138134D+00 0.2941016825931D+00 0.3007331526352D+00 0.3075095741362D+00 + 0.3144339529771D+00 0.3215093515700D+00 0.3287388897102D+00 0.3361257454325D+00 + 0.3436731558729D+00 0.3513844181328D+00 0.3592628901485D+00 0.3673119915621D+00 + 0.3755352045968D+00 0.3839360749336D+00 0.3925182125899D+00 0.4012852927993D+00 + 0.4102410568930D+00 0.4193893131804D+00 0.4287339378299D+00 0.4382788757486D+00 + 0.4480281414604D+00 0.4579858199819D+00 0.4681560676951D+00 0.4785431132164D+00 + 0.4891512582614D+00 0.4999848785043D+00 0.5110484244305D+00 0.5223464221834D+00 + 0.5338834744021D+00 0.5456642610510D+00 0.5576935402392D+00 0.5699761490289D+00 + 0.5825170042325D+00 0.5953211031952D+00 0.6083935245653D+00 0.6217394290472D+00 + 0.6353640601390D+00 0.6492727448516D+00 0.6634708944082D+00 0.6779640049238D+00 + 0.6927576580616D+00 0.7078575216668D+00 0.7232693503742D+00 0.7389989861895D+00 + 0.7550523590420D+00 0.7714354873073D+00 0.7881544782973D+00 0.8052155287175D+00 + 0.8226249250876D+00 0.8403890441249D+00 0.8585143530879D+00 0.8770074100784D+00 + 0.8958748642992D+00 0.9151234562658D+00 0.9347600179702D+00 0.9547914729931D+00 + 0.9752248365635D+00 0.9960672155622D+00 0.1017325808468D+01 0.1039007905241D+01 + 0.1061120887144D+01 0.1083672226499D+01 0.1106669486370D+01 0.1130120320176D+01 + 0.1154032471231D+01 0.1178413772204D+01 0.1203272144493D+01 0.1228615597523D+01 + 0.1254452227950D+01 0.1280790218774D+01 0.1307637838359D+01 0.1335003439353D+01 + 0.1362895457506D+01 0.1391322410385D+01 0.1420292895972D+01 0.1449815591159D+01 + 0.1479899250115D+01 0.1510552702537D+01 0.1541784851777D+01 0.1573604672833D+01 + 0.1606021210210D+01 0.1639043575644D+01 0.1672680945677D+01 0.1706942559091D+01 + 0.1741837714186D+01 0.1777375765901D+01 0.1813566122779D+01 0.1850418243757D+01 + 0.1887941634794D+01 0.1926145845317D+01 0.1965040464488D+01 0.2004635117287D+01 + 0.2044939460400D+01 0.2085963177919D+01 0.2127715976829D+01 0.2170207582300D+01 + 0.2213447732763D+01 0.2257446174769D+01 0.2302212657626D+01 0.2347756927812D+01 + 0.2394088723154D+01 0.2441217766767D+01 0.2489153760756D+01 0.2537906379665D+01 + 0.2587485263675D+01 0.2637900011547D+01 0.2689160173295D+01 0.2741275242598D+01 + 0.2794254648931D+01 0.2848107749430D+01 0.2902843820459D+01 0.2958472048904D+01 + 0.3015001523163D+01 0.3072441223848D+01 0.3130800014182D+01 0.3190086630094D+01 + 0.3250309670002D+01 0.3311477584285D+01 0.3373598664440D+01 0.3436681031917D+01 + 0.3500732626634D+01 0.3565761195166D+01 0.3631774278604D+01 0.3698779200090D+01 + 0.3766783052007D+01 0.3835792682854D+01 0.3905814683769D+01 0.3976855374728D+01 + 0.4048920790399D+01 0.4122016665671D+01 0.4196148420834D+01 0.4271321146438D+01 + 0.4347539587809D+01 0.4424808129241D+01 0.4503130777854D+01 0.4582511147131D+01 + 0.4662952440136D+01 0.4744457432406D+01 0.4827028454547D+01 0.4910667374509D+01 + 0.4995375579573D+01 0.5081153958042D+01 0.5168002880655D+01 0.5255922181721D+01 + 0.5344911139992D+01 0.5434968459290D+01 0.5526092248881D+01 0.5618280003639D+01 + 0.5711528583982D+01 0.5805834195616D+01 0.5901192369103D+01 0.5997597939257D+01 + 0.6095045024395D+01 0.6193527005472D+01 0.6293036505099D+01 0.6393565366487D+01 + 0.6495104632331D+01 0.6597644523660D+01 0.6701174418681D+01 0.6805682831645D+01 + 0.6911157391760D+01 0.7017584822191D+01 0.7124950919171D+01 0.7233240531258D+01 + 0.7342437538781D+01 0.7452524833500D+01 0.7563484298530D+01 0.7675296788562D+01 + 0.7787942110430D+01 0.7901399004058D+01 0.8015645123842D+01 0.8130657020509D+01 + 0.8246410123503D+01 0.8362878723950D+01 0.8480035958250D+01 0.8597853792358D+01 + 0.8716303006799D+01 0.8835353182487D+01 0.8954972687391D+01 0.9075128664130D+01 + 0.9195787018538D+01 0.9316912409273D+01 0.9438468238543D+01 0.9560416644000D+01 + 0.9682718491880D+01 0.9805333371460D+01 0.9928219590896D+01 0.1005133417453D+02 + 0.1017463286171D+02 0.1029807010722D+02 0.1042159908344D+02 0.1054517168417D+02 + 0.1066873853037D+02 0.1079224897780D+02 0.1091565112659D+02 0.1103889183301D+02 + 0.1116191672323D+02 0.1128467020944D+02 0.1140709550823D+02 0.1152913466133D+02 + 0.1165072855885D+02 0.1177181696506D+02 0.1189233854680D+02 0.1201223090454D+02 + 0.1213143060625D+02 0.1224987322407D+02 0.1236749337400D+02 0.1248422475837D+02 + 0.1260000021157D+02 0.1271475174875D+02 0.1282841061773D+02 0.1294090735413D+02 + 0.1305217183979D+02 0.1316213336451D+02 0.1327072069111D+02 0.1337786212400D+02 + 0.1348348558110D+02 0.1358751866928D+02 0.1368988876325D+02 0.1379052308804D+02 + 0.1388934880491D+02 0.1398629310084D+02 0.1408128328150D+02 0.1417424686776D+02 + 0.1426511169568D+02 0.1435380601989D+02 0.1444025862047D+02 0.1452439891313D+02 + 0.1460615706273D+02 0.1468546410000D+02 0.1476225204147D+02 0.1483645401237D+02 + 0.1490800437259D+02 0.1497683884540D+02 0.1504289464893D+02 0.1510611063019D+02 + 0.1516642740155D+02 0.1522378747941D+02 0.1527813542502D+02 0.1532941798703D+02 + 0.1537758424592D+02 0.1542258575964D+02 0.1546437671057D+02 0.1550291405346D+02 + 0.1553815766392D+02 0.1557007048740D+02 0.1559861868825D+02 0.1562377179849D+02 + 0.1564550286611D+02 0.1566378860245D+02 0.1567860952827D+02 0.1568995011828D+02 + 0.1569779894358D+02 0.1570214881171D+02 0.1570299690387D+02 0.1570034490889D+02 + 0.1569419915342D+02 0.1568457072811D+02 0.1567147560898D+02 0.1565493477391D+02 + 0.1563497431333D+02 0.1561162553504D+02 0.1558492506233D+02 0.1555491492507D+02 + 0.1552164264320D+02 0.1548516130217D+02 0.1544552961962D+02 0.1540281200312D+02 + 0.1535707859803D+02 0.1530840532536D+02 0.1525687390884D+02 0.1520257189079D+02 + 0.1514559263632D+02 0.1508603532531D+02 0.1502400493172D+02 0.1495961218971D+02 + 0.1489297354623D+02 0.1482421109950D+02 0.1475345252306D+02 0.1468083097499D+02 + 0.1460648499184D+02 0.1453055836709D+02 0.1445320001360D+02 0.1437456381003D+02 + 0.1429480843075D+02 0.1421409715909D+02 0.1413259768392D+02 0.1405048187912D+02 + 0.1396792556614D+02 0.1388510825940D+02 0.1380221289467D+02 0.1371942554036D+02 + 0.1363693509198D+02 0.1355493294972D+02 0.1347361267958D+02 0.1339316965818D+02 + 0.1331380070165D+02 0.1323570367897D+02 0.1315907711016D+02 0.1308411975004D+02 + 0.1301103015787D+02 0.1294000625373D+02 0.1287124486230D+02 0.1280494124477D+02 + 0.1274128861984D+02 0.1268047767460D+02 0.1262269606643D+02 0.1256812791682D+02 + 0.1251695329838D+02 0.1246934771604D+02 0.1242548158392D+02 0.1238551969900D+02 + 0.1234962071295D+02 0.1231793660373D+02 0.1229061214824D+02 0.1226778439767D+02 + 0.1224958215706D+02 0.1223612547078D+02 0.1222752511553D+02 0.1222388210258D+02 + 0.1222528719100D+02 0.1223182041366D+02 0.1224355061775D+02 0.1226053502171D+02 + 0.1228281879023D+02 0.1231043462935D+02 0.1234340240339D+02 0.1238172877543D+02 + 0.1242540687338D+02 0.1247441598324D+02 0.1252872127141D+02 0.1258827353770D+02 + 0.1265300900087D+02 0.1272284911822D+02 0.1279770044081D+02 0.1287745450601D+02 + 0.1296198776857D+02 0.1305116157186D+02 0.1314482216032D+02 0.1324280073454D+02 + 0.1334491354991D+02 0.1345096205988D+02 0.1356073310471D+02 0.1367399914649D+02 + 0.1379051855093D+02 0.1391003591655D+02 0.1403228245150D+02 0.1415697639825D+02 + 0.1428382350615D+02 0.1441251755180D+02 0.1454274090682D+02 0.1467416515265D+02 + 0.1480645174180D+02 0.1493925270450D+02 0.1507221140012D+02 0.1520496331175D+02 + 0.1533713688305D+02 0.1546835439544D+02 0.1559823288411D+02 0.1572638509088D+02 + 0.1585242045188D+02 0.1597594611769D+02 0.1609656800349D+02 0.1621389186673D+02 + 0.1632752440935D+02 0.1643707440175D+02 0.1654215382521D+02 0.1664237902974D+02 + 0.1673737190368D+02 0.1682676105166D+02 0.1691018297723D+02 0.1698728326633D+02 + 0.1705771776761D+02 0.1712115376582D+02 0.1717727114395D+02 0.1722576353007D+02 + 0.1726633942470D+02 0.1729872330429D+02 0.1732265669667D+02 0.1733789922408D+02 + 0.1734422960952D+02 0.1734144664198D+02 0.1732937009656D+02 0.1730784160492D+02 + 0.1727672547225D+02 0.1723590943644D+02 0.1718530536559D+02 0.1712484989008D+02 + 0.1705450496536D+02 0.1697425836203D+02 0.1688412407975D+02 0.1678414268193D+02 + 0.1667438154808D+02 0.1655493504124D+02 0.1642592458792D+02 0.1628749866833D+02 + 0.1613983271513D+02 0.1598312891883D+02 0.1581761593876D+02 0.1564354851859D+02 + 0.1546120700566D+02 0.1527089677411D+02 0.1507294755170D+02 0.1486771265109D+02 + 0.1465556810624D+02 0.1443691171558D+02 0.1421216199343D+02 0.1398175703206D+02 + 0.1374615327696D+02 0.1350582421831D+02 0.1326125900230D+02 0.1301296096613D+02 + 0.1276144610103D+02 0.1250724144826D+02 0.1225088343315D+02 0.1199291614280D+02 + 0.1173388955369D+02 0.1147435771520D+02 0.1121487689618D+02 0.1095600370143D+02 + 0.1069829316549D+02 0.1044229683153D+02 0.1018856082317D+02 0.9937623917321D+01 + 0.9690015626445D+01 0.9446254298643D+01 0.9206845244038D+01 0.8972278896087D+01 + 0.8743029016360D+01 0.8519550951297D+01 0.8302279949355D+01 0.8091629546790D+01 + 0.7887990030116D+01 0.7691726983014D+01 0.7503179925129D+01 0.7322661049902D+01 + 0.7150454068046D+01 0.6986813162918D+01 0.6831962063451D+01 0.6686093239819D+01 + 0.6549367226364D+01 0.6421912075717D+01 0.6303822947394D+01 0.6195161833447D+01 + 0.6095957423078D+01 0.6006205107394D+01 0.5925867124779D+01 0.5854872846611D+01 + 0.5793119202371D+01 0.5740471242429D+01 0.5696762836121D+01 0.5661797502031D+01 + 0.5635349366701D+01 0.5617164247353D+01 0.5606960853570D+01 0.5604432102259D+01 + 0.5609246539649D+01 0.5621049863505D+01 0.5639466538232D+01 0.5664101495024D+01 + 0.5694541908766D+01 0.5730359042993D+01 0.5771110153784D+01 0.5816340443192D+01 + 0.5865585052475D+01 0.5918371085180D+01 0.5974219649957D+01 0.6032647912832D+01 + 0.6093171148637D+01 0.6155304781260D+01 0.6218566402475D+01 0.6282477759234D+01 + 0.6346566699475D+01 0.6410369066815D+01 0.6473430534781D+01 0.6535308371644D+01 + 0.6595573127395D+01 0.6653810234872D+01 0.6709621517670D+01 0.6762626598041D+01 + 0.6812464198680D+01 0.6858793332986D+01 0.6901294379138D+01 0.6939670034070D+01 + 0.6973646144233D+01 0.7002972410830D+01 0.7027422967990D+01 0.7046796833200D+01 + 0.7060918230061D+01 0.7069636784259D+01 0.7072827594374D+01 0.7070391179926D+01 + 0.7062253309715D+01 0.7048364714231D+01 0.7028700686483D+01 0.7003260576238D+01 + 0.6972067183121D+01 0.6935166054562D+01 0.6892624694966D+01 0.6844531692843D+01 + 0.6790995772965D+01 0.6732144780827D+01 0.6668124606899D+01 0.6599098058289D+01 + 0.6525243685473D+01 0.6446754571799D+01 0.6363837093418D+01 0.6276709657188D+01 + 0.6185601423998D+01 0.6090751024726D+01 0.5992405275866D+01 0.5890817901556D+01 + 0.5786248268476D+01 0.5678960139726D+01 0.5569220453475D+01 0.5457298131760D+01 + 0.5343462924443D+01 0.5227984292928D+01 0.5111130337809D+01 0.4993166774192D+01 + 0.4874355958030D+01 0.4754955966341D+01 0.4635219733799D+01 0.4515394247714D+01 + 0.4395719803061D+01 0.4276429318764D+01 0.4157747716089D+01 0.4039891359594D+01 + 0.3923067560758D+01 0.3807474144035D+01 0.3693299074769D+01 0.3580720148118D+01 + 0.3469904737816D+01 0.3361009603367D+01 0.3254180754011D+01 0.3149553367571D+01 + 0.3047251762116D+01 0.2947389418162D+01 0.2850069049006D+01 0.2755382716614D+01 + 0.2663411990420D+01 0.2574228146230D+01 0.2487892402405D+01 0.2404456190400D+01 + 0.2323961456713D+01 0.2246440993268D+01 0.2171918793250D+01 0.2100410429420D+01 + 0.2031923451965D+01 0.1966457802972D+01 0.1904006244666D+01 0.1844554798640D+01 + 0.1788083193345D+01 0.1734565317240D+01 0.1683969675070D+01 0.1636259844862D+01 + 0.1591394933364D+01 0.1549330027746D+01 0.1510016641546D+01 0.1473403152964D+01 + 0.1439435233770D+01 0.1408056267219D+01 0.1379207753531D+01 0.1352829701650D+01 + 0.1328861006133D+01 0.1307239808175D+01 0.1287903839946D+01 0.1270790751526D+01 + 0.1255838419882D+01 0.1242985239474D+01 0.1232170394175D+01 0.1223334110328D+01 + 0.1216417890857D+01 0.1211364730456D+01 0.1208119311934D+01 0.1206628183910D+01 + 0.1206839920052D+01 0.1208705260142D+01 0.1212177233248D+01 0.1217211263310D+01 + 0.1223765257423D+01 0.1231799677111D+01 0.1241277592815D+01 0.1252164721788D+01 + 0.1264429449524D+01 0.1278042834732D+01 0.1292978597814D+01 0.1309213092627D+01 + 0.1326725261233D+01 0.1345496571135D+01 0.1365510934358D+01 0.1386754607532D+01 + 0.1409215426363D+01 0.1433003097507D+01 0.1458223277591D+01 0.1484860699421D+01 + 0.1512902583279D+01 0.1542338542721D+01 0.1573160498496D+01 0.1605362600812D+01 + 0.1638941160170D+01 0.1673894586973D+01 0.1710223340083D+01 0.1747929884514D+01 + 7 1012 + 1 0 -1 -511.89150 + 2 0 -1 -58.80097 + 2 1 1 -50.61290 + 2 1 -2 -49.69692 + 3 0 -1 -5.52718 + 3 1 1 -3.14309 + 3 1 -2 -3.03034 + 0.2123373461549D-04 0.2173914995400D-04 0.2225659296114D-04 0.2278634977738D-04 + 0.2332871334728D-04 0.2388398358121D-04 0.2445246752083D-04 0.2503447950857D-04 + 0.2563034136106D-04 0.2624038254674D-04 0.2686494036763D-04 0.2750436014548D-04 + 0.2815899541226D-04 0.2882920810522D-04 0.2951536876657D-04 0.3021785674791D-04 + 0.3093706041946D-04 0.3167337738432D-04 0.3242721469777D-04 0.3319898909177D-04 + 0.3398912720483D-04 0.3479806581728D-04 0.3562625209215D-04 0.3647414382175D-04 + 0.3734220968012D-04 0.3823092948144D-04 0.3914079444457D-04 0.4007230746391D-04 + 0.4102598338660D-04 0.4200234929636D-04 0.4300194480406D-04 0.4402532234512D-04 + 0.4507304748402D-04 0.4614569922601D-04 0.4724387033618D-04 0.4836816766617D-04 + 0.4951921248852D-04 0.5069764083903D-04 0.5190410386721D-04 0.5313926819498D-04 + 0.5440381628400D-04 0.5569844681152D-04 0.5702387505533D-04 0.5838083328767D-04 + 0.5977007117859D-04 0.6119235620880D-04 0.6264847409228D-04 0.6413922920902D-04 + 0.6566544504782D-04 0.6722796465978D-04 0.6882765112238D-04 0.7046538801462D-04 + 0.7214207990339D-04 0.7385865284136D-04 0.7561605487667D-04 0.7741525657465D-04 + 0.7925725155197D-04 0.8114305702331D-04 0.8307371436110D-04 0.8505028966841D-04 + 0.8707387436545D-04 0.8914558578994D-04 0.9126656781168D-04 0.9343799146165D-04 + 0.9566105557602D-04 0.9793698745538D-04 0.1002670435396D-03 0.1026525100984D-03 + 0.1050947039390D-03 0.1075949731294D-03 0.1101546977394D-03 0.1127752905997D-03 + 0.1154581980775D-03 0.1182049008719D-03 0.1210169148270D-03 0.1238957917652D-03 + 0.1268431203390D-03 0.1298605269045D-03 0.1329496764137D-03 0.1361122733297D-03 + 0.1393500625619D-03 0.1426648304247D-03 0.1460584056178D-03 0.1495326602303D-03 + 0.1530895107681D-03 0.1567309192056D-03 0.1604588940629D-03 0.1642754915072D-03 + 0.1681828164816D-03 0.1721830238593D-03 0.1762783196258D-03 0.1804709620887D-03 + 0.1847632631165D-03 0.1891575894056D-03 0.1936563637785D-03 0.1982620665115D-03 + 0.2029772366947D-03 0.2078044736231D-03 0.2127464382210D-03 0.2178058545005D-03 + 0.2229855110531D-03 0.2282882625778D-03 0.2337170314442D-03 0.2392748092933D-03 + 0.2449646586752D-03 0.2507897147258D-03 0.2567531868833D-03 0.2628583606444D-03 + 0.2691085993625D-03 0.2755073460880D-03 0.2820581254518D-03 0.2887645455935D-03 + 0.2956303001344D-03 0.3026591701977D-03 0.3098550264756D-03 0.3172218313454D-03 + 0.3247636410353D-03 0.3324846078408D-03 0.3403889823939D-03 0.3484811159850D-03 + 0.3567654629401D-03 0.3652465830528D-03 0.3739291440747D-03 0.3828179242637D-03 + 0.3919178149916D-03 0.4012338234146D-03 0.4107710752045D-03 0.4205348173457D-03 + 0.4305304209971D-03 0.4407633844209D-03 0.4512393359813D-03 0.4619640372121D-03 + 0.4729433859575D-03 0.4841834195856D-03 0.4956903182785D-03 0.5074704083979D-03 + 0.5195301659314D-03 0.5318762200182D-03 0.5445153565579D-03 0.5574545219044D-03 + 0.5707008266453D-03 0.5842615494708D-03 0.5981441411326D-03 0.6123562284955D-03 + 0.6269056186847D-03 0.6418003033287D-03 0.6570484629028D-03 0.6726584711734D-03 + 0.6886388997468D-03 0.7049985227240D-03 0.7217463214642D-03 0.7388914894603D-03 + 0.7564434373277D-03 0.7744117979097D-03 0.7928064315026D-03 0.8116374312024D-03 + 0.8309151283763D-03 0.8506500982622D-03 0.8708531656989D-03 0.8915354109894D-03 + 0.9127081759015D-03 0.9343830698083D-03 0.9565719759715D-03 0.9792870579714D-03 + 0.1002540766287D-02 0.1026345845027D-02 0.1050715338824D-02 0.1075662599879D-02 + 0.1101201295181D-02 0.1127345413883D-02 0.1154109274864D-02 0.1181507534450D-02 + 0.1209555194328D-02 0.1238267609637D-02 0.1267660497252D-02 0.1297749944251D-02 + 0.1328552416593D-02 0.1360084767981D-02 0.1392364248945D-02 0.1425408516127D-02 + 0.1459235641785D-02 0.1493864123514D-02 0.1529312894196D-02 0.1565601332181D-02 + 0.1602749271697D-02 0.1640777013510D-02 0.1679705335822D-02 0.1719555505429D-02 + 0.1760349289133D-02 0.1802108965417D-02 0.1844857336390D-02 0.1888617740010D-02 + 0.1933414062589D-02 0.1979270751585D-02 0.2026212828687D-02 0.2074265903209D-02 + 0.2123456185786D-02 0.2173810502385D-02 0.2225356308647D-02 0.2278121704551D-02 + 0.2332135449417D-02 0.2387426977257D-02 0.2444026412476D-02 0.2501964585936D-02 + 0.2561273051389D-02 0.2621984102285D-02 0.2684130788965D-02 0.2747746936258D-02 + 0.2812867161465D-02 0.2879526892772D-02 0.2947762388071D-02 0.3017610754222D-02 + 0.3089109966753D-02 0.3162298890003D-02 0.3237217297741D-02 0.3313905894238D-02 + 0.3392406335837D-02 0.3472761253004D-02 0.3555014272883D-02 0.3639210042377D-02 + 0.3725394251736D-02 0.3813613658698D-02 0.3903916113173D-02 0.3996350582488D-02 + 0.4090967177209D-02 0.4187817177547D-02 0.4286953060364D-02 0.4388428526794D-02 + 0.4492298530489D-02 0.4598619306504D-02 0.4707448400838D-02 0.4818844700646D-02 + 0.4932868465127D-02 0.5049581357120D-02 0.5169046475404D-02 0.5291328387739D-02 + 0.5416493164639D-02 0.5544608413917D-02 0.5675743316002D-02 0.5809968660057D-02 + 0.5947356880904D-02 0.6087982096781D-02 0.6231920147946D-02 0.6379248636155D-02 + 0.6530046965011D-02 0.6684396381234D-02 0.6842380016839D-02 0.7004082932273D-02 + 0.7169592160503D-02 0.7338996752102D-02 0.7512387821327D-02 0.7689858593235D-02 + 0.7871504451850D-02 0.8057422989391D-02 0.8247714056607D-02 0.8442479814225D-02 + 0.8641824785540D-02 0.8845855910175D-02 0.9054682599025D-02 0.9268416790430D-02 + 0.9487173007575D-02 0.9711068417172D-02 0.9940222889430D-02 0.1017475905935D-01 + 0.1041480238936D-01 0.1066048123337D-01 0.1091192690214D-01 0.1116927373022D-01 + 0.1143265914425D-01 0.1170222373276D-01 0.1197811131760D-01 0.1226046902681D-01 + 0.1254944736912D-01 0.1284520031015D-01 0.1314788535014D-01 0.1345766360348D-01 + 0.1377469987990D-01 0.1409916276750D-01 0.1443122471744D-01 0.1477106213063D-01 + 0.1511885544620D-01 0.1547478923187D-01 0.1583905227632D-01 0.1621183768351D-01 + 0.1659334296907D-01 0.1698377015868D-01 0.1738332588869D-01 0.1779222150874D-01 + 0.1821067318670D-01 0.1863890201578D-01 0.1907713412394D-01 0.1952560078568D-01 + 0.1998453853608D-01 0.2045418928739D-01 0.2093480044805D-01 0.2142662504416D-01 + 0.2192992184360D-01 0.2244495548276D-01 0.2297199659585D-01 0.2351132194704D-01 + 0.2406321456527D-01 0.2462796388197D-01 0.2520586587156D-01 0.2579722319499D-01 + 0.2640234534617D-01 0.2702154880148D-01 0.2765515717239D-01 0.2830350136121D-01 + 0.2896691972007D-01 0.2964575821319D-01 0.3034037058244D-01 0.3105111851634D-01 + 0.3177837182251D-01 0.3252250860359D-01 0.3328391543683D-01 0.3406298755727D-01 + 0.3486012904465D-01 0.3567575301409D-01 0.3651028181063D-01 0.3736414720771D-01 + 0.3823779060956D-01 0.3913166325773D-01 0.4004622644169D-01 0.4098195171364D-01 + 0.4193932110758D-01 0.4291882736274D-01 0.4392097415138D-01 0.4494627631115D-01 + 0.4599526008193D-01 0.4706846334735D-01 0.4816643588104D-01 0.4928973959763D-01 + 0.5043894880863D-01 0.5161465048329D-01 0.5281744451445D-01 0.5404794398948D-01 + 0.5530677546647D-01 0.5659457925562D-01 0.5791200970601D-01 0.5925973549779D-01 + 0.6063843993988D-01 0.6204882127328D-01 0.6349159298001D-01 0.6496748409788D-01 + 0.6647723954103D-01 0.6802162042643D-01 0.6960140440641D-01 0.7121738600725D-01 + 0.7287037697395D-01 0.7456120662128D-01 0.7629072219118D-01 0.7805978921657D-01 + 0.7986929189166D-01 0.8172013344892D-01 0.8361323654265D-01 0.8554954363940D-01 + 0.8753001741513D-01 0.8955564115940D-01 0.9162741918654D-01 0.9374637725383D-01 + 0.9591356298698D-01 0.9813004631275D-01 0.1003969198990D+00 0.1027152996019D+00 + 0.1050863249211D+00 0.1075111594618D+00 0.1099909914051D+00 0.1125270339855D+00 + 0.1151205259766D+00 0.1177727321842D+00 0.1204849439476D+00 0.1232584796489D+00 + 0.1260946852301D+00 0.1289949347182D+00 0.1319606307590D+00 0.1349932051583D+00 + 0.1380941194317D+00 0.1412648653632D+00 0.1445069655708D+00 0.1478219740820D+00 + 0.1512114769165D+00 0.1546770926778D+00 0.1582204731535D+00 0.1618433039236D+00 + 0.1655473049771D+00 0.1693342313383D+00 0.1732058737000D+00 0.1771640590662D+00 + 0.1812106514032D+00 0.1853475522988D+00 0.1895767016304D+00 0.1939000782413D+00 + 0.1983197006251D+00 0.2028376276193D+00 0.2074559591063D+00 0.2121768367234D+00 + 0.2170024445803D+00 0.2219350099852D+00 0.2269768041788D+00 0.2321301430764D+00 + 0.2373973880172D+00 0.2427809465221D+00 0.2482832730585D+00 0.2539068698131D+00 + 0.2596542874715D+00 0.2655281260047D+00 0.2715310354636D+00 0.2776657167793D+00 + 0.2839349225700D+00 0.2903414579550D+00 0.2968881813739D+00 0.3035780054119D+00 + 0.3104138976312D+00 0.3173988814070D+00 0.3245360367687D+00 0.3318285012460D+00 + 0.3392794707188D+00 0.3468922002717D+00 0.3546700050516D+00 0.3626162611285D+00 + 0.3707344063591D+00 0.3790279412529D+00 0.3875004298396D+00 0.3961555005386D+00 + 0.4049968470283D+00 0.4140282291162D+00 0.4232534736091D+00 0.4326764751811D+00 + 0.4423011972414D+00 0.4521316727988D+00 0.4621720053237D+00 0.4724263696067D+00 + 0.4828990126121D+00 0.4935942543268D+00 0.5045164886027D+00 0.5156701839924D+00 + 0.5270598845772D+00 0.5386902107861D+00 0.5505658602051D+00 0.5626916083760D+00 + 0.5750723095830D+00 0.5877128976270D+00 0.6006183865849D+00 0.6137938715547D+00 + 0.6272445293836D+00 0.6409756193782D+00 0.6549924839961D+00 0.6693005495166D+00 + 0.6839053266899D+00 0.6988124113627D+00 0.7140274850788D+00 0.7295563156538D+00 + 0.7454047577210D+00 0.7615787532478D+00 0.7780843320207D+00 0.7949276120969D+00 + 0.8121148002200D+00 0.8296521921997D+00 0.8475461732513D+00 0.8658032182945D+00 + 0.8844298922086D+00 0.9034328500427D+00 0.9228188371772D+00 0.9425946894360D+00 + 0.9627673331456D+00 0.9833437851400D+00 0.1004331152707D+01 0.1025736633476D+01 + 0.1047567515241D+01 0.1069831175720D+01 0.1092535082243D+01 0.1115686791375D+01 + 0.1139293948457D+01 0.1163364287075D+01 0.1187905628445D+01 0.1212925880722D+01 + 0.1238433038208D+01 0.1264435180485D+01 0.1290940471443D+01 0.1317957158220D+01 + 0.1345493570030D+01 0.1373558116898D+01 0.1402159288280D+01 0.1431305651569D+01 + 0.1461005850494D+01 0.1491268603389D+01 0.1522102701342D+01 0.1553517006218D+01 + 0.1585520448546D+01 0.1618122025271D+01 0.1651330797361D+01 0.1685155887276D+01 + 0.1719606476280D+01 0.1754691801602D+01 0.1790421153434D+01 0.1826803871767D+01 + 0.1863849343063D+01 0.1901566996742D+01 0.1939966301501D+01 0.1979056761446D+01 + 0.2018847912032D+01 0.2059349315815D+01 0.2100570557999D+01 0.2142521241790D+01 + 0.2185210983528D+01 0.2228649407614D+01 0.2272846141215D+01 0.2317810808747D+01 + 0.2363553026124D+01 0.2410082394775D+01 0.2457408495423D+01 0.2505540881617D+01 + 0.2554489073015D+01 0.2604262548407D+01 0.2654870738488D+01 0.2706323018355D+01 + 0.2758628699743D+01 0.2811797022979D+01 0.2865837148659D+01 0.2920758149043D+01 + 0.2976568999160D+01 0.3033278567615D+01 0.3090895607108D+01 0.3149428744640D+01 + 0.3208886471423D+01 0.3269277132479D+01 0.3330608915918D+01 0.3392889841912D+01 + 0.3456127751341D+01 0.3520330294118D+01 0.3585504917195D+01 0.3651658852234D+01 + 0.3718799102956D+01 0.3786932432154D+01 0.3856065348377D+01 0.3926204092282D+01 + 0.3997354622651D+01 0.4069522602076D+01 0.4142713382310D+01 0.4216931989288D+01 + 0.4292183107814D+01 0.4368471065927D+01 0.4445799818928D+01 0.4524172933100D+01 + 0.4603593569097D+01 0.4684064465021D+01 0.4765587919192D+01 0.4848165772611D+01 + 0.4931799391130D+01 0.5016489647323D+01 0.5102236902085D+01 0.5189040985952D+01 + 0.5276901180158D+01 0.5365816197444D+01 0.5455784162617D+01 0.5546802592894D+01 + 0.5638868378017D+01 0.5731977760181D+01 0.5826126313769D+01 0.5921308924927D+01 + 0.6017519770983D+01 0.6114752299744D+01 0.6212999208681D+01 0.6312252424025D+01 + 0.6412503079799D+01 0.6513741496818D+01 0.6615957161666D+01 0.6719138705689D+01 + 0.6823273884037D+01 0.6928349554769D+01 0.7034351658067D+01 0.7141265195588D+01 + 0.7249074209985D+01 0.7357761764637D+01 0.7467309923627D+01 0.7577699732003D+01 + 0.7688911196366D+01 0.7800923265826D+01 0.7913713813378D+01 0.8027259617727D+01 + 0.8141536345630D+01 0.8256518534789D+01 0.8372179577355D+01 0.8488491704090D+01 + 0.8605425969248D+01 0.8722952236222D+01 0.8841039164025D+01 0.8959654194655D+01 + 0.9078763541413D+01 0.9198332178230D+01 0.9318323830066D+01 0.9438700964464D+01 + 0.9559424784293D+01 0.9680455221780D+01 0.9801750933887D+01 0.9923269299099D+01 + 0.1004496641570D+02 0.1016679710163D+02 0.1028871489593D+02 0.1041067206198D+02 + 0.1053261959239D+02 0.1065450721594D+02 0.1077628340626D+02 0.1089789539267D+02 + 0.1101928917306D+02 0.1114040952889D+02 0.1126120004259D+02 0.1138160311709D+02 + 0.1150155999788D+02 0.1162101079752D+02 0.1173989452270D+02 0.1185814910389D+02 + 0.1197571142774D+02 0.1209251737221D+02 0.1220850184455D+02 0.1232359882222D+02 + 0.1243774139668D+02 0.1255086182033D+02 0.1266289155645D+02 0.1277376133233D+02 + 0.1288340119558D+02 0.1299174057364D+02 0.1309870833671D+02 0.1320423286383D+02 + 0.1330824211245D+02 0.1341066369131D+02 0.1351142493681D+02 0.1361045299271D+02 + 0.1370767489335D+02 0.1380301765027D+02 0.1389640834224D+02 0.1398777420882D+02 + 0.1407704274716D+02 0.1416414181234D+02 0.1424899972093D+02 0.1433154535791D+02 + 0.1441170828680D+02 0.1448941886294D+02 0.1456460834990D+02 0.1463720903887D+02 + 0.1470715437095D+02 0.1477437906225D+02 0.1483881923166D+02 0.1490041253114D+02 + 0.1495909827839D+02 0.1501481759178D+02 0.1506751352732D+02 0.1511713121747D+02 + 0.1516361801165D+02 0.1520692361818D+02 0.1524700024742D+02 0.1528380275595D+02 + 0.1531728879140D+02 0.1534741893776D+02 0.1537415686084D+02 0.1539746945363D+02 + 0.1541732698111D+02 0.1543370322439D+02 0.1544657562364D+02 0.1545592541956D+02 + 0.1546173779302D+02 0.1546400200242D+02 0.1546271151843D+02 0.1545786415570D+02 + 0.1544946220111D+02 0.1543751253809D+02 0.1542202676661D+02 0.1540302131844D+02 + 0.1538051756708D+02 0.1535454193202D+02 0.1532512597682D+02 0.1529230650045D+02 + 0.1525612562157D+02 0.1521663085508D+02 0.1517387518057D+02 0.1512791710213D+02 + 0.1507882069905D+02 0.1502665566690D+02 0.1497149734847D+02 0.1491342675424D+02 + 0.1485253057170D+02 0.1478890116319D+02 0.1472263655178D+02 0.1465384039476D+02 + 0.1458262194423D+02 0.1450909599456D+02 0.1443338281613D+02 0.1435560807511D+02 + 0.1427590273888D+02 0.1419440296685D+02 0.1411124998625D+02 0.1402658995277D+02 + 0.1394057379573D+02 0.1385335704764D+02 0.1376509965795D+02 0.1367596579089D+02 + 0.1358612360737D+02 0.1349574503081D+02 0.1340500549696D+02 0.1331408368786D+02 + 0.1322316124986D+02 0.1313242249599D+02 0.1304205409292D+02 0.1295224473262D+02 + 0.1286318478926D+02 0.1277506596148D+02 0.1268808090072D+02 0.1260242282594D+02 + 0.1251828512526D+02 0.1243586094535D+02 0.1235534276899D+02 0.1227692198172D+02 + 0.1220078842830D+02 0.1212712995982D+02 0.1205613197253D+02 0.1198797693913D+02 + 0.1192284393379D+02 0.1186090815186D+02 0.1180234042546D+02 0.1174730673615D+02 + 0.1169596772603D+02 0.1164847820834D+02 0.1160498667924D+02 0.1156563483188D+02 + 0.1153055707436D+02 0.1149988005301D+02 0.1147372218250D+02 0.1145219318434D+02 + 0.1143539363525D+02 0.1142341452711D+02 0.1141633683999D+02 0.1141423112993D+02 + 0.1141715713298D+02 0.1142516338731D+02 0.1143828687474D+02 0.1145655268355D+02 + 0.1147997369390D+02 0.1150855028761D+02 0.1154227008374D+02 0.1158110770138D+02 + 0.1162502455129D+02 0.1167396865756D+02 0.1172787451079D+02 0.1178666295396D+02 + 0.1185024110228D+02 0.1191850229803D+02 0.1199132610159D+02 0.1206857831946D+02 + 0.1215011107019D+02 0.1223576288907D+02 0.1232535887199D+02 0.1241871085933D+02 + 0.1251561765997D+02 0.1261586531600D+02 0.1271922740805D+02 0.1282546540151D+02 + 0.1293432903330D+02 0.1304555673916D+02 0.1315887612096D+02 0.1327400445348D+02 + 0.1339064923005D+02 0.1350850874625D+02 0.1362727272054D+02 0.1374662295087D+02 + 0.1386623400591D+02 0.1398577394943D+02 0.1410490509638D+02 0.1422328479880D+02 + 0.1434056625987D+02 0.1445639937388D+02 0.1457043159027D+02 0.1468230879914D+02 + 0.1479167623614D+02 0.1489817940404D+02 0.1500146500841D+02 0.1510118190471D+02 + 0.1519698205391D+02 0.1528852148379D+02 0.1537546125281D+02 0.1545746841364D+02 + 0.1553421697307D+02 0.1560538884523D+02 0.1567067479483D+02 0.1572977536717D+02 + 0.1578240180176D+02 0.1582827692612D+02 0.1586713602663D+02 0.1589872769311D+02 + 0.1592281463392D+02 0.1593917445849D+02 0.1594760042409D+02 0.1594790214378D+02 + 0.1593990625272D+02 0.1592345702984D+02 0.1589841697221D+02 0.1586466731948D+02 + 0.1582210852585D+02 0.1577066067732D+02 0.1571026385193D+02 0.1564087842120D+02 + 0.1556248529064D+02 0.1547508607802D+02 0.1537870322780D+02 0.1527338006062D+02 + 0.1515918075676D+02 0.1503619027308D+02 0.1490451419267D+02 0.1476427850715D+02 + 0.1461562933169D+02 0.1445873255288D+02 0.1429377341010D+02 0.1412095601137D+02 + 0.1394050278444D+02 0.1375265386499D+02 0.1355766642312D+02 0.1335581393054D+02 + 0.1314738537038D+02 0.1293268439219D+02 0.1271202841511D+02 0.1248574768189D+02 + 0.1225418426740D+02 0.1201769104500D+02 0.1177663061449D+02 0.1153137419578D+02 + 0.1128230049248D+02 0.1102979452961D+02 0.1077424647032D+02 0.1051605041603D+02 + 0.1025560319513D+02 0.9993303145083D+01 0.9729548892983D+01 0.9464738139829D+01 + 0.9199266453606D+01 0.8933526076402D+01 0.8667904750745D+01 0.8402784570301D+01 + 0.8138540859996D+01 0.7875541090527D+01 0.7614143832090D+01 0.7354697751983D+01 + 0.7097540660550D+01 0.6842998609696D+01 0.6591385047920D+01 0.6343000035605D+01 + 0.6098129523858D+01 0.5857044699944D+01 0.5620001401934D+01 0.5387239604814D+01 + 0.5158982979846D+01 0.4935438528573D+01 0.4716796292366D+01 0.4503229137976D+01 + 0.4294892619056D+01 0.4091924913152D+01 0.3894446833193D+01 0.3702561912045D+01 + 0.3516356558237D+01 0.3335900280537D+01 0.3161245978670D+01 0.2992430297065D+01 + 0.2829474038194D+01 0.2672382631762D+01 0.2521146655720D+01 0.2375742404881D+01 + 0.2236132502695D+01 0.2102266551639D+01 0.1974081817541D+01 0.1851503943111D+01 + 0.1734447685940D+01 0.1622817676200D+01 0.1516509189368D+01 0.1415408929331D+01 + 0.1319395817360D+01 0.1228341782531D+01 0.1142112549373D+01 0.1060568418635D+01 + 0.9835650373019D+00 0.9109541541726D+00 0.8425843575459D+00 0.7783017917968D+00 + 0.7179508498817D+00 0.6613748390683D+00 0.6084166174653D+00 0.5589191992012D+00 + 0.5127263263911D+00 0.4696830063190D+00 0.4296360125529D+00 0.3924343490009D+00 + 0.3579296762027D+00 0.3259766994340D+00 0.2964335184742D+00 0.2691619391536D+00 + 0.2440277470488D+00 0.2209009439361D+00 0.1996559478365D+00 0.1801717576938D+00 + 0.1623320839184D+00 0.1460254461990D+00 0.1311452401368D+00 0.1175897743854D+00 + 0.1052622800912D+00 0.9407089451527D-01 0.8392862078550D-01 0.7475326577690D-01 + 0.6646735814128D-01 0.5899804851766D-01 0.5227699394346D-01 0.4624022845899D-01 + 0.4082802185442D-01 0.3598472845105D-01 0.3165862773800D-01 0.2780175860384D-01 + 0.2436974881146D-01 0.2132164126495D-01 0.1861971851162D-01 0.1622932681167D-01 + 0.1411870099424D-01 0.1225879120292D-01 0.1062309251766D-01 0.9187478324824D-02 + 0.7930038194170D-02 0.6830920911119D-02 0.5872183206948D-02 0.5037644628161D-02 + 0.4312748890659D-02 0.3684431974697D-02 0.3140997133459D-02 0.2671996911721D-02 + 0.2268122201696D-02 0.1921098300832D-02 0.1623587881022D-02 0.1369100730387D-02 + 0.1151910087150D-02 0.9669753500508D-03 0.8098709208516D-03 0.6767209113939D-03 + 0.5641394300578D-03 0.4691761498429D-03 0.3892668522563D-03 0.3221886372696D-03 + 0.2660194893607D-03 0.2191018926233D-03 0.1800101936858D-03 0.1475214192933D-03 + 0.1205892654847D-03 0.9832098695562D-04 0.7995692809159D-04 0.6485245095860D-04 + 0.5246202996510D-04 0.4232529769133D-04 0.3405484129524D-04 0.2732556374477D-04 + 0.2186543872353D-04 0.1744750226736D-04 0.1388293789508D-04 0.1101512510421D-04 + 0.8714533541124D-05 0.6874356872787D-05 0.5406791351919D-05 0.4239874261002D-05 + 0.3314806839624D-05 0.2583694952262D-05 0.2007648657315D-05 0.1555189018603D-05 + 0.1200916989437D-05 0.9244050332163D-06 0.7092773630705D-06 0.5424493283134D-06 + 0.4135005904089D-06 0.3141603589352D-06 0.2378861413798D-06 0.1795202409555D-06 + 0.1350106538765D-06 0.1011851095086D-06 0.7556879909866D-07 0.5623788451178D-07 + 0.4170219815814D-07 0.3081166707088D-07 0.2268194336078D-07 0.1663552297805D-07 + 0.1215530542863D-07 0.8848107127806D-08 0.6416106613217D-08 0.4634585104140D-08 + 0.3334643304910D-08 0.2389835688104D-08 0.1705876062949D-08 0.1212741020005D-08 + 0.8586376559590D-09 0.6054146003728D-09 0.4250856698627D-09 0.2972075512731D-09 + 0.2069101606973D-09 0.1434236365115D-09 0.9898160505409D-10 0.6800804519963D-10 + 0.4651712787494D-10 0.3167310042586D-10 0.2146695649341D-10 0.1448079937139D-10 + 0.9722622861678D-11 0.6496070631129D-11 0.4319651023999D-11 0.2858591661735D-11 + 0.1882503214946D-11 0.1233598363270D-11 0.8043412065319D-12 0.5218060130221D-12 + 0.3367856512696D-12 0.2162455335843D-12 0.1381220475631D-12 0.8775552000331D-13 diff --git a/Test/Fe16_non_collinear/v_fe16.3 b/Test/Fe16_non_collinear/v_fe16.3 new file mode 100755 index 000000000..f3c4e967f --- /dev/null +++ b/Test/Fe16_non_collinear/v_fe16.3 @@ -0,0 +1,1542 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Fe. + 2 0.0000000000000D+00 + LSMS: xx z= 26. xvalws= 5.22926 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728400909D+02-0.5199725115555D+02-0.5199721790459D+02-0.5199718425142D+02 +-0.5199715019116D+02-0.5199711571889D+02-0.5199708082964D+02-0.5199704551834D+02 +-0.5199700977990D+02-0.5199697360915D+02-0.5199693700086D+02-0.5199689994973D+02 +-0.5199686245042D+02-0.5199682449748D+02-0.5199678608545D+02-0.5199674720876D+02 +-0.5199670786180D+02-0.5199666803887D+02-0.5199662773421D+02-0.5199658694201D+02 +-0.5199654565635D+02-0.5199650387127D+02-0.5199646158073D+02-0.5199641877860D+02 +-0.5199637545872D+02-0.5199633161480D+02-0.5199628724051D+02-0.5199624232942D+02 +-0.5199619687506D+02-0.5199615087084D+02-0.5199610431012D+02-0.5199605718616D+02 +-0.5199600949214D+02-0.5199596122116D+02-0.5199591236626D+02-0.5199586292036D+02 +-0.5199581287632D+02-0.5199576222688D+02-0.5199571096474D+02-0.5199565908248D+02 +-0.5199560657259D+02-0.5199555342748D+02-0.5199549963947D+02-0.5199544520078D+02 +-0.5199539010352D+02-0.5199533433975D+02-0.5199527790139D+02-0.5199522078028D+02 +-0.5199516296816D+02-0.5199510445666D+02-0.5199504523733D+02-0.5199498530160D+02 +-0.5199492464081D+02-0.5199486324617D+02-0.5199480110883D+02-0.5199473821977D+02 +-0.5199467456990D+02-0.5199461015004D+02-0.5199454495085D+02-0.5199447896290D+02 +-0.5199441217666D+02-0.5199434458246D+02-0.5199427617052D+02-0.5199420693096D+02 +-0.5199413685375D+02-0.5199406592876D+02-0.5199399414573D+02-0.5199392149428D+02 +-0.5199384796390D+02-0.5199377354396D+02-0.5199369822368D+02-0.5199362199218D+02 +-0.5199354483843D+02-0.5199346675127D+02-0.5199338771940D+02-0.5199330773139D+02 +-0.5199322677567D+02-0.5199314484053D+02-0.5199306191412D+02-0.5199297798443D+02 +-0.5199289303934D+02-0.5199280706654D+02-0.5199272005361D+02-0.5199263198797D+02 +-0.5199254285685D+02-0.5199245264737D+02-0.5199236134649D+02-0.5199226894099D+02 +-0.5199217541751D+02-0.5199208076251D+02-0.5199198496230D+02-0.5199188800302D+02 +-0.5199178987064D+02-0.5199169055096D+02-0.5199159002963D+02-0.5199148829207D+02 +-0.5199138532359D+02-0.5199128110928D+02-0.5199117563407D+02-0.5199106888269D+02 +-0.5199096083969D+02-0.5199085148944D+02-0.5199074081613D+02-0.5199062880373D+02 +-0.5199051543604D+02-0.5199040069664D+02-0.5199028456895D+02-0.5199016703615D+02 +-0.5199004808124D+02-0.5198992768700D+02-0.5198980583600D+02-0.5198968251063D+02 +-0.5198955769302D+02-0.5198943136512D+02-0.5198930350863D+02-0.5198917410506D+02 +-0.5198904313569D+02-0.5198891058155D+02-0.5198877642345D+02-0.5198864064200D+02 +-0.5198850321751D+02-0.5198836413012D+02-0.5198822335968D+02-0.5198808088582D+02 +-0.5198793668793D+02-0.5198779074512D+02-0.5198764303627D+02-0.5198749354000D+02 +-0.5198734223467D+02-0.5198718909837D+02-0.5198703410894D+02-0.5198687724393D+02 +-0.5198671848065D+02-0.5198655779610D+02-0.5198639516703D+02-0.5198623056988D+02 +-0.5198606398084D+02-0.5198589537577D+02-0.5198572473026D+02-0.5198555201962D+02 +-0.5198537721883D+02-0.5198520030257D+02-0.5198502124524D+02-0.5198484002091D+02 +-0.5198465660333D+02-0.5198447096595D+02-0.5198428308188D+02-0.5198409292391D+02 +-0.5198390046450D+02-0.5198370567579D+02-0.5198350852955D+02-0.5198330899725D+02 +-0.5198310704998D+02-0.5198290265850D+02-0.5198269579318D+02-0.5198248642408D+02 +-0.5198227452087D+02-0.5198206005285D+02-0.5198184298896D+02-0.5198162329776D+02 +-0.5198140094741D+02-0.5198117590571D+02-0.5198094814005D+02-0.5198071761744D+02 +-0.5198048430449D+02-0.5198024816738D+02-0.5198000917191D+02-0.5197976728344D+02 +-0.5197952246692D+02-0.5197927468690D+02-0.5197902390745D+02-0.5197877009224D+02 +-0.5197851320449D+02-0.5197825320698D+02-0.5197799006201D+02-0.5197772373146D+02 +-0.5197745417673D+02-0.5197718135875D+02-0.5197690523796D+02-0.5197662577437D+02 +-0.5197634292744D+02-0.5197605665620D+02-0.5197576691913D+02-0.5197547367423D+02 +-0.5197517687900D+02-0.5197487649041D+02-0.5197457246489D+02-0.5197426475838D+02 +-0.5197395332627D+02-0.5197363812338D+02-0.5197331910403D+02-0.5197299622195D+02 +-0.5197266943031D+02-0.5197233868173D+02-0.5197200392824D+02-0.5197166512128D+02 +-0.5197132221174D+02-0.5197097514984D+02-0.5197062388528D+02-0.5197026836709D+02 +-0.5196990854370D+02-0.5196954436291D+02-0.5196917577189D+02-0.5196880271716D+02 +-0.5196842514461D+02-0.5196804299945D+02-0.5196765622622D+02-0.5196726476881D+02 +-0.5196686857041D+02-0.5196646757354D+02-0.5196606171998D+02-0.5196565095085D+02 +-0.5196523520651D+02-0.5196481442664D+02-0.5196438855015D+02-0.5196395751522D+02 +-0.5196352125928D+02-0.5196307971901D+02-0.5196263283028D+02-0.5196218052823D+02 +-0.5196172274718D+02-0.5196125942066D+02-0.5196079048138D+02-0.5196031586126D+02 +-0.5195983549135D+02-0.5195934930191D+02-0.5195885722231D+02-0.5195835918107D+02 +-0.5195785510585D+02-0.5195734492343D+02-0.5195682855969D+02-0.5195630593961D+02 +-0.5195577698725D+02-0.5195524162577D+02-0.5195469977736D+02-0.5195415136330D+02 +-0.5195359630387D+02-0.5195303451841D+02-0.5195246592528D+02-0.5195189044181D+02 +-0.5195130798435D+02-0.5195071846824D+02-0.5195012180777D+02-0.5194951791619D+02 +-0.5194890670569D+02-0.5194828808741D+02-0.5194766197137D+02-0.5194702826653D+02 +-0.5194638688071D+02-0.5194573772064D+02-0.5194508069188D+02-0.5194441569885D+02 +-0.5194374264482D+02-0.5194306143187D+02-0.5194237196087D+02-0.5194167413149D+02 +-0.5194096784220D+02-0.5194025299021D+02-0.5193952947146D+02-0.5193879718066D+02 +-0.5193805601119D+02-0.5193730585519D+02-0.5193654660341D+02-0.5193577814533D+02 +-0.5193500036904D+02-0.5193421316129D+02-0.5193341640742D+02-0.5193260999141D+02 +-0.5193179379578D+02-0.5193096770164D+02-0.5193013158865D+02-0.5192928533501D+02 +-0.5192842881739D+02-0.5192756191098D+02-0.5192668448947D+02-0.5192579642497D+02 +-0.5192489758803D+02-0.5192398784765D+02-0.5192306707119D+02-0.5192213512442D+02 +-0.5192119187145D+02-0.5192023717474D+02-0.5191927089505D+02-0.5191829289146D+02 +-0.5191730302133D+02-0.5191630114025D+02-0.5191528710207D+02-0.5191426075883D+02 +-0.5191322196077D+02-0.5191217055632D+02-0.5191110639202D+02-0.5191002931255D+02 +-0.5190893916069D+02-0.5190783577729D+02-0.5190671900126D+02-0.5190558866954D+02 +-0.5190444461705D+02-0.5190328667673D+02-0.5190211467945D+02-0.5190092845399D+02 +-0.5189972782709D+02-0.5189851262330D+02-0.5189728266508D+02-0.5189603777267D+02 +-0.5189477776415D+02-0.5189350245533D+02-0.5189221165981D+02-0.5189090518885D+02 +-0.5188958285145D+02-0.5188824445423D+02-0.5188688980147D+02-0.5188551869503D+02 +-0.5188413093435D+02-0.5188272631641D+02-0.5188130463569D+02-0.5187986568418D+02 +-0.5187840925129D+02-0.5187693512386D+02-0.5187544308611D+02-0.5187393291962D+02 +-0.5187240440329D+02-0.5187085731330D+02-0.5186929142309D+02-0.5186770650332D+02 +-0.5186610232183D+02-0.5186447864362D+02-0.5186283523081D+02-0.5186117184259D+02 +-0.5185948823518D+02-0.5185778416183D+02-0.5185605937277D+02-0.5185431361514D+02 +-0.5185254663297D+02-0.5185075816718D+02-0.5184894795548D+02-0.5184711573237D+02 +-0.5184526122909D+02-0.5184338417356D+02-0.5184148429039D+02-0.5183956130079D+02 +-0.5183761492255D+02-0.5183564486998D+02-0.5183365085389D+02-0.5183163258155D+02 +-0.5182958975660D+02-0.5182752207907D+02-0.5182542924529D+02-0.5182331094785D+02 +-0.5182116687559D+02-0.5181899671350D+02-0.5181680014270D+02-0.5181457684041D+02 +-0.5181232647986D+02-0.5181004873028D+02-0.5180774325683D+02-0.5180540972054D+02 +-0.5180304777830D+02-0.5180065708277D+02-0.5179823728232D+02-0.5179578802103D+02 +-0.5179330893860D+02-0.5179079967027D+02-0.5178825984684D+02-0.5178568909453D+02 +-0.5178308703501D+02-0.5178045328526D+02-0.5177778745757D+02-0.5177508915948D+02 +-0.5177235799366D+02-0.5176959355795D+02-0.5176679544522D+02-0.5176396324334D+02 +-0.5176109653512D+02-0.5175819489823D+02-0.5175525790517D+02-0.5175228512318D+02 +-0.5174927611419D+02-0.5174623043474D+02-0.5174314763592D+02-0.5174002726332D+02 +-0.5173686885694D+02-0.5173367195115D+02-0.5173043607457D+02-0.5172716075006D+02 +-0.5172384549462D+02-0.5172048981932D+02-0.5171709322923D+02-0.5171365522335D+02 +-0.5171017529452D+02-0.5170665292940D+02-0.5170308760833D+02-0.5169947880525D+02 +-0.5169582598771D+02-0.5169212861671D+02-0.5168838614662D+02-0.5168459802518D+02 +-0.5168076369333D+02-0.5167688258518D+02-0.5167295412791D+02-0.5166897774168D+02 +-0.5166495283960D+02-0.5166087882755D+02-0.5165675510418D+02-0.5165258106080D+02 +-0.5164835608125D+02-0.5164407954186D+02-0.5163975081138D+02-0.5163536925080D+02 +-0.5163093421337D+02-0.5162644504442D+02-0.5162190108131D+02-0.5161730165335D+02 +-0.5161264608164D+02-0.5160793367906D+02-0.5160316375011D+02-0.5159833559084D+02 +-0.5159344848875D+02-0.5158850172268D+02-0.5158349456272D+02-0.5157842627009D+02 +-0.5157329609709D+02-0.5156810328692D+02-0.5156284707365D+02-0.5155752668206D+02 +-0.5155214132756D+02-0.5154669021608D+02-0.5154117254396D+02-0.5153558749786D+02 +-0.5152993425461D+02-0.5152421198113D+02-0.5151841983433D+02-0.5151255696093D+02 +-0.5150662249744D+02-0.5150061557002D+02-0.5149453529428D+02-0.5148838077528D+02 +-0.5148215110737D+02-0.5147584537403D+02-0.5146946264782D+02-0.5146300199022D+02 +-0.5145646245151D+02-0.5144984307067D+02-0.5144314287525D+02-0.5143636088122D+02 +-0.5142949609291D+02-0.5142254750281D+02-0.5141551409151D+02-0.5140839482753D+02 +-0.5140118866721D+02-0.5139389455459D+02-0.5138651142128D+02-0.5137903818632D+02 +-0.5137147375605D+02-0.5136381702401D+02-0.5135606687078D+02-0.5134822216388D+02 +-0.5134028175756D+02-0.5133224449278D+02-0.5132410919702D+02-0.5131587468413D+02 +-0.5130753975423D+02-0.5129910319357D+02-0.5129056377438D+02-0.5128192025477D+02 +-0.5127317137854D+02-0.5126431587514D+02-0.5125535245940D+02-0.5124627983153D+02 +-0.5123709667690D+02-0.5122780166596D+02-0.5121839345403D+02-0.5120887068125D+02 +-0.5119923197240D+02-0.5118947593678D+02-0.5117960116805D+02-0.5116960624416D+02 +-0.5115948972712D+02-0.5114925016296D+02-0.5113888608154D+02-0.5112839599644D+02 +-0.5111777840483D+02-0.5110703178733D+02-0.5109615460788D+02-0.5108514531363D+02 +-0.5107400233480D+02-0.5106272408452D+02-0.5105130895877D+02-0.5103975533619D+02 +-0.5102806157801D+02-0.5101622602790D+02-0.5100424701185D+02-0.5099212283803D+02 +-0.5097985179674D+02-0.5096743216021D+02-0.5095486218256D+02-0.5094214009961D+02 +-0.5092926412887D+02-0.5091623246932D+02-0.5090304330139D+02-0.5088969478681D+02 +-0.5087618506855D+02-0.5086251227064D+02-0.5084867449820D+02-0.5083466983722D+02 +-0.5082049635455D+02-0.5080615209778D+02-0.5079163509518D+02-0.5077694335558D+02 +-0.5076207486834D+02-0.5074702760324D+02-0.5073179951042D+02-0.5071638852033D+02 +-0.5070079254364D+02-0.5068500947122D+02-0.5066903717403D+02-0.5065287350315D+02 +-0.5063651628963D+02-0.5061996334457D+02-0.5060321245898D+02-0.5058626140382D+02 +-0.5056910792994D+02-0.5055174976809D+02-0.5053418462884D+02-0.5051641020267D+02 +-0.5049842415989D+02-0.5048022415067D+02-0.5046180780505D+02-0.5044317273295D+02 +-0.5042431652422D+02-0.5040523674861D+02-0.5038593095586D+02-0.5036639667573D+02 +-0.5034663141803D+02-0.5032663267268D+02-0.5030639790981D+02-0.5028592457977D+02 +-0.5026521011328D+02-0.5024425192145D+02-0.5022304739591D+02-0.5020159390892D+02 +-0.5017988881346D+02-0.5015792944334D+02-0.5013571311336D+02-0.5011323711944D+02 +-0.5009049873873D+02-0.5006749522980D+02-0.5004422383280D+02-0.5002068176959D+02 +-0.4999686624397D+02-0.4997277444186D+02-0.4994840353146D+02-0.4992375066350D+02 +-0.4989881297144D+02-0.4987358757171D+02-0.4984807156389D+02-0.4982226203106D+02 +-0.4979615603991D+02-0.4976975064117D+02-0.4974304286974D+02-0.4971602974502D+02 +-0.4968870827126D+02-0.4966107543776D+02-0.4963312821924D+02-0.4960486357616D+02 +-0.4957627845502D+02-0.4954736978871D+02-0.4951813449683D+02-0.4948856948612D+02 +-0.4945867165071D+02-0.4942843787257D+02-0.4939786502185D+02-0.4936694995729D+02 +-0.4933568952659D+02-0.4930408056681D+02-0.4927211990478D+02-0.4923980435752D+02 +-0.4920713073265D+02-0.4917409582880D+02-0.4914069643607D+02-0.4910692933642D+02 +-0.4907279130416D+02-0.4903827910633D+02-0.4900338950319D+02-0.4896811924867D+02 +-0.4893246509079D+02-0.4889642377211D+02-0.4885999203021D+02-0.4882316659813D+02 +-0.4878594420482D+02-0.4874832157556D+02-0.4871029543247D+02-0.4867186249491D+02 +-0.4863301947995D+02-0.4859376310277D+02-0.4855409007715D+02-0.4851399711583D+02 +-0.4847348093100D+02-0.4843253823466D+02-0.4839116573905D+02-0.4834936015704D+02 +-0.4830711820251D+02-0.4826443659074D+02-0.4822131203876D+02-0.4817774126566D+02 +-0.4813372099301D+02-0.4808924794511D+02-0.4804431884930D+02-0.4799893043625D+02 +-0.4795307944023D+02-0.4790676259938D+02-0.4785997665588D+02-0.4781271835619D+02 +-0.4776498445124D+02-0.4771677169657D+02-0.4766807685247D+02-0.4761889668409D+02 +-0.4756922796153D+02-0.4751906745988D+02-0.4746841195927D+02-0.4741725824487D+02 +-0.4736560310686D+02-0.4731344334036D+02-0.4726077574537D+02-0.4720759712663D+02 +-0.4715390429349D+02-0.4709969405976D+02-0.4704496324345D+02-0.4698970866656D+02 +-0.4693392715482D+02-0.4687761553742D+02-0.4682077064661D+02-0.4676338931742D+02 +-0.4670546838725D+02-0.4664700469545D+02-0.4658799508292D+02-0.4652843639162D+02 +-0.4646832546412D+02-0.4640765914308D+02-0.4634643427075D+02-0.4628464768840D+02 +-0.4622229623583D+02-0.4615937675077D+02-0.4609588606835D+02-0.4603182102046D+02 +-0.4596717843531D+02-0.4590195513672D+02-0.4583614794369D+02-0.4576975366979D+02 +-0.4570276912265D+02-0.4563519110351D+02-0.4556701640665D+02-0.4549824181908D+02 +-0.4542886412007D+02-0.4535888008084D+02-0.4528828646428D+02-0.4521708002473D+02 +-0.4514525750785D+02-0.4507281565054D+02-0.4499975118097D+02-0.4492606081870D+02 +-0.4485174127497D+02-0.4477678925295D+02-0.4470120144833D+02-0.4462497454985D+02 +-0.4454810524011D+02-0.4447059019649D+02-0.4439242609219D+02-0.4431360959758D+02 +-0.4423413738159D+02-0.4415400611337D+02-0.4407321246418D+02-0.4399175310947D+02 +-0.4390962473114D+02-0.4382682402010D+02-0.4374334767908D+02-0.4365919242563D+02 +-0.4357435499539D+02-0.4348883214570D+02-0.4340262065933D+02-0.4331571734857D+02 +-0.4322811905962D+02-0.4313982267710D+02-0.4305082512897D+02-0.4296112339160D+02 +-0.4287071449512D+02-0.4277959552900D+02-0.4268776364786D+02-0.4259521607738D+02 +-0.4250195012053D+02-0.4240796316384D+02-0.4231325268378D+02-0.4221781625326D+02 +-0.4212165154821D+02-0.4202475635403D+02-0.4192712857207D+02-0.4182876622603D+02 +-0.4172966746809D+02-0.4162983058491D+02-0.4152925400326D+02-0.4142793629535D+02 +-0.4132587618362D+02-0.4122307254514D+02-0.4111952441526D+02-0.4101523099069D+02 +-0.4091019163177D+02-0.4080440586392D+02-0.4069787337814D+02-0.4059059403052D+02 +-0.4048256784069D+02-0.4037379498919D+02-0.4026427581359D+02-0.4015401080347D+02 +-0.4004300059408D+02-0.3993124595881D+02-0.3981874780047D+02-0.3970550714118D+02 +-0.3959152511128D+02-0.3947680293704D+02-0.3936134192738D+02-0.3924514345974D+02 +-0.3912820896514D+02-0.3901053991273D+02-0.3889213779388D+02-0.3877300410616D+02 +-0.3865314033730D+02-0.3853254794941D+02-0.3841122836384D+02-0.3828918294671D+02 +-0.3816641299561D+02-0.3804291972752D+02-0.3791870426838D+02-0.3779376764439D+02 +-0.3766811077544D+02-0.3754173447071D+02-0.3741463942662D+02-0.3728682622747D+02 +-0.3715829534855D+02-0.3702904716206D+02-0.3689908194568D+02-0.3676839989389D+02 +-0.3663700113198D+02-0.3650488573242D+02-0.3637205373385D+02-0.3623850516215D+02 +-0.3610424005352D+02-0.3596925847947D+02-0.3583356057318D+02-0.3569714655716D+02 +-0.3556001677183D+02-0.3542217170480D+02-0.3528361202035D+02-0.3514433858906D+02 +-0.3500435251706D+02-0.3486365517474D+02-0.3472224822457D+02-0.3458013364781D+02 +-0.3443731376977D+02-0.3429379128348D+02-0.3414956927154D+02-0.3400465122587D+02 +-0.3385904106531D+02-0.3371274315081D+02-0.3356576229817D+02-0.3341810378823D+02 +-0.3326977337430D+02-0.3312077728689D+02-0.3297112223571D+02-0.3282081540879D+02 +-0.3266986446883D+02-0.3251827754673D+02-0.3236606323235D+02-0.3221323056253D+02 +-0.3205978900636D+02-0.3190574844798D+02-0.3175111916665D+02-0.3159591181450D+02 +-0.3144013739192D+02-0.3128380722060D+02-0.3112693291460D+02-0.3096952634939D+02 +-0.3081159962896D+02-0.3065316505139D+02-0.3049423507279D+02-0.3033482226994D+02 +-0.3017493930171D+02-0.3001459886954D+02-0.2985381367711D+02-0.2969259638940D+02 +-0.2953095959141D+02-0.2936891574677D+02-0.2920647715631D+02-0.2904365591713D+02 +-0.2888046388202D+02-0.2871691261992D+02-0.2855301337730D+02-0.2838877704096D+02 +-0.2822421410237D+02-0.2805933462405D+02-0.2789414820796D+02-0.2772866396645D+02 +-0.2756289049588D+02-0.2739683585338D+02-0.2723050753680D+02-0.2706391246838D+02 +-0.2689705698223D+02-0.2672994681603D+02-0.2656258710714D+02-0.2639498239345D+02 +-0.2622713661917D+02-0.2605905314574D+02-0.2589073476829D+02-0.2572218373759D+02 +-0.2555340178776D+02-0.2538439017000D+02-0.2521514969218D+02-0.2504568076457D+02 +-0.2487598345161D+02-0.2470605752972D+02-0.2453590255090D+02-0.2436551791213D+02 +-0.2419490293015D+02-0.2402405692122D+02-0.2385297928550D+02-0.2368166959536D+02 +-0.2351012768684D+02-0.2333835375355D+02-0.2316634844181D+02-0.2299411294593D+02 +-0.2282164910224D+02-0.2264895948042D+02-0.2247604747020D+02-0.2230291736187D+02 +-0.2212957441833D+02-0.2195602493665D+02-0.2178227629680D+02-0.2160833699531D+02 +-0.2143421666157D+02-0.2125992605447D+02-0.2108547703736D+02-0.2091088252957D+02 +-0.2073615643311D+02-0.2056131353347D+02-0.2038636937454D+02-0.2021134010787D+02 +-0.2003624231780D+02-0.1986109282464D+02-0.1968590846923D+02-0.1951070588338D+02 +-0.1933550125113D+02-0.1916031006739D+02-0.1898514690054D+02-0.1881002516654D+02 +-0.1863495692195D+02-0.1845995268332D+02-0.1828502127992D+02-0.1811016974578D+02 +-0.1793540325598D+02-0.1776072511080D+02-0.1758613676940D+02-0.1741163793327D+02 +-0.1723722667775D+02-0.1706289962834D+02-0.1688865217702D+02-0.1671447873257D+02 +-0.1654037299789D+02-0.1636632826691D+02-0.1619233773325D+02-0.1601839480315D+02 +-0.1584449340510D+02-0.1567062828984D+02-0.1549679531468D+02-0.1532299170720D+02 +-0.1514921630451D+02-0.1497546976480D+02-0.1480175474939D+02-0.1462807607400D+02 +-0.1445444082871D+02-0.1428085846710D+02-0.1410734086517D+02-0.1393390235146D+02 +-0.1376055970989D+02-0.1358733215727D+02-0.1341424129731D+02-0.1324131105355D+02 +-0.1306856758305D+02-0.1289603917318D+02-0.1272375612351D+02-0.1255175061484D+02 +-0.1238005656736D+02-0.1220870948967D+02-0.1203774632043D+02-0.1186720526422D+02 +-0.1169712562320D+02-0.1152754762583D+02-0.1135851225403D+02-0.1119006106993D+02 +-0.1102223604329D+02-0.1085507938069D+02-0.1068863335731D+02-0.1052294015218D+02 +-0.1035804168776D+02-0.1019397947446D+02-0.1003079446077D+02-0.9868526889628D+01 +-0.9707216161554D+01-0.9546900704939D+01-0.9387617854023D+01-0.9229403734858D+01 +-0.9072293159592D+01-0.8916319529363D+01-0.8761514745993D+01-0.8607909132693D+01 +-0.8455531363896D+01-0.8304408404305D+01-0.8154565457227D+01-0.8006025922166D+01 +-0.7858811361682D+01-0.7712941477416D+01-0.7568434095199D+01-0.7425305159081D+01 +-0.7283568734134D+01-0.7143237017788D+01-0.7004320359504D+01-0.6866827288485D+01 +-0.6730764549154D+01-0.6596137144079D+01-0.6462948384000D+01-0.6331199944618D+01 +-0.6200891929738D+01-0.6072022940407D+01-0.5944590149603D+01-0.5818589382077D+01 +-0.5694015198898D+01-0.5570860986265D+01-0.5449119048124D+01-0.5328780702141D+01 +-0.5209836378552D+01-0.5092275721431D+01-0.4976087691897D+01-0.4861260672787D+01 +-0.4747782574321D+01-0.4635640940271D+01-0.4524823054180D+01-0.4415316045125D+01 +-0.4307106992579D+01-0.4200183029885D+01-0.4094531445869D+01-0.3990139784139D+01 +-0.3886995939600D+01-0.3785088251726D+01-0.3684405594148D+01-0.3584937460106D+01 +-0.3486674043348D+01-0.3389606314047D+01-0.3293726089348D+01-0.3199026098161D+01 +-0.3105500039868D+01-0.3013142636618D+01-0.2921949678952D+01-0.2831918064533D+01 +-0.2743045829849D+01-0.2655332174788D+01-0.2568777480092D+01-0.2483383317815D+01 +-0.2399152454962D+01-0.2316088850658D+01-0.2234197647300D+01-0.2153485156272D+01 +-0.2073958838965D+01-0.1995627283965D+01-0.1918500181413D+01-0.1842588295670D+01 +-0.1767903437522D+01-0.1694458437274D+01-0.1622267120110D+01-0.1551344285168D+01 +-0.1481705689753D+01-0.1413368040087D+01-0.1346348989896D+01-0.1280667148051D+01 +-0.1216342096293D+01-0.1153394417906D+01-0.1091845737986D+01-0.1031718775725D+01 +-0.9730374088849D+00-0.9158267504133D+00-0.8601132368937D+00-0.8059247283301D+00 +-0.7532906185600D+00-0.7022419554295D+00-0.6528115697324D+00-0.6050342118170D+00 +-0.5589466947046D+00-0.5145880425354D+00-0.4719996431596D+00-0.4312254037239D+00 +-0.3923119081554D+00-0.3553085755132D+00-0.3202678182603D+00-0.2872451996103D+00 +-0.2562993012896D+00 + 0.0000000000000D+00 + 1012 0.5229258479779D+01 + 0.2150742905406D-04 0.2201934401975D-04 0.2254344131081D-04 0.2308001074793D-04 + 0.2362934904336D-04 0.2419175996469D-04 0.2476755450247D-04 0.2535705104185D-04 + 0.2596057553829D-04 0.2657846169737D-04 0.2721105115901D-04 0.2785869368592D-04 + 0.2852174735659D-04 0.2920057876285D-04 0.2989556321214D-04 0.3060708493450D-04 + 0.3133553729459D-04 0.3208132300862D-04 0.3284485436652D-04 0.3362655345933D-04 + 0.3442685241199D-04 0.3524619362168D-04 0.3608503000175D-04 0.3694382523153D-04 + 0.3782305401197D-04 0.3872320232740D-04 0.3964476771351D-04 0.4058825953159D-04 + 0.4155419924941D-04 0.4254312072866D-04 0.4355557051923D-04 0.4459210816046D-04 + 0.4565330648961D-04 0.4673975195749D-04 0.4785204495171D-04 0.4899080012754D-04 + 0.5015664674660D-04 0.5135022902361D-04 0.5257220648130D-04 0.5382325431382D-04 + 0.5510406375867D-04 0.5641534247751D-04 0.5775781494596D-04 0.5913222285265D-04 + 0.6053932550771D-04 0.6197990026094D-04 0.6345474292991D-04 0.6496466823815D-04 + 0.6651051026378D-04 0.6809312289875D-04 0.6971338031887D-04 0.7137217746513D-04 + 0.7307043053626D-04 0.7480907749308D-04 0.7658907857468D-04 0.7841141682692D-04 + 0.8027709864336D-04 0.8218715431905D-04 0.8414263861740D-04 0.8614463135050D-04 + 0.8819423797310D-04 0.9029259019072D-04 0.9244084658213D-04 0.9464019323656D-04 + 0.9689184440594D-04 0.9919704317265D-04 0.1015570621330D-03 0.1039732040969D-03 + 0.1064468028041D-03 0.1089792236573D-03 0.1115718644728D-03 0.1142261562483D-03 + 0.1169435639500D-03 0.1197255873171D-03 0.1225737616857D-03 0.1254896588328D-03 + 0.1284748878395D-03 0.1315310959746D-03 0.1346599695998D-03 0.1378632350954D-03 + 0.1411426598085D-03 0.1445000530233D-03 0.1479372669546D-03 0.1514561977641D-03 + 0.1550587866019D-03 0.1587470206711D-03 0.1625229343189D-03 0.1663886101524D-03 + 0.1703461801815D-03 0.1743978269887D-03 0.1785457849256D-03 0.1827923413391D-03 + 0.1871398378251D-03 0.1915906715131D-03 0.1961472963799D-03 0.2008122245952D-03 + 0.2055880278984D-03 0.2104773390081D-03 0.2154828530649D-03 0.2206073291079D-03 + 0.2258535915864D-03 0.2312245319072D-03 0.2367231100177D-03 0.2423523560273D-03 + 0.2481153718665D-03 0.2540153329849D-03 0.2600554900897D-03 0.2662391709247D-03 + 0.2725697820915D-03 0.2790508109132D-03 0.2856858273428D-03 0.2924784859153D-03 + 0.2994325277470D-03 0.3065517825810D-03 0.3138401708812D-03 0.3213017059753D-03 + 0.3289404962488D-03 0.3367607473897D-03 0.3447667646870D-03 0.3529629553823D-03 + 0.3613538310777D-03 0.3699440101989D-03 0.3787382205180D-03 0.3877413017338D-03 + 0.3969582081140D-03 0.4063940111991D-03 0.4160539025692D-03 0.4259431966769D-03 + 0.4360673337456D-03 0.4464318827368D-03 0.4570425443864D-03 0.4679051543124D-03 + 0.4790256861959D-03 0.4904102550358D-03 0.5020651204812D-03 0.5139966902408D-03 + 0.5262115235724D-03 0.5387163348549D-03 0.5515179972435D-03 0.5646235464104D-03 + 0.5780401843732D-03 0.5917752834137D-03 0.6058363900874D-03 0.6202312293275D-03 + 0.6349677086450D-03 0.6500539224267D-03 0.6654981563344D-03 0.6813088918062D-03 + 0.6974948106637D-03 0.7140647998269D-03 0.7310279561389D-03 0.7483935913040D-03 + 0.7661712369406D-03 0.7843706497523D-03 0.8030018168203D-03 0.8220749610184D-03 + 0.8416005465556D-03 0.8615892846469D-03 0.8820521393172D-03 0.9030003333406D-03 + 0.9244453543176D-03 0.9463989608946D-03 0.9688731891282D-03 0.9918803589975D-03 + 0.1015433081069D-02 0.1039544263315D-02 0.1064227118095D-02 0.1089495169290D-02 + 0.1115362259619D-02 0.1141842558105D-02 0.1168950567737D-02 0.1196701133289D-02 + 0.1225109449338D-02 0.1254191068456D-02 0.1283961909601D-02 0.1314438266696D-02 + 0.1345636817413D-02 0.1377574632157D-02 0.1410269183260D-02 0.1443738354387D-02 + 0.1478000450161D-02 0.1513074206015D-02 0.1548978798262D-02 0.1585733854409D-02 + 0.1623359463706D-02 0.1661876187936D-02 0.1701305072458D-02 0.1741667657505D-02 + 0.1782985989747D-02 0.1825282634108D-02 0.1868580685877D-02 0.1912903783076D-02 + 0.1958276119133D-02 0.2004722455835D-02 0.2052268136585D-02 0.2100939099962D-02 + 0.2150761893598D-02 0.2201763688371D-02 0.2253972292925D-02 0.2307416168524D-02 + 0.2362124444253D-02 0.2418126932561D-02 0.2475454145167D-02 0.2534137309329D-02 + 0.2594208384486D-02 0.2655700079287D-02 0.2718645869002D-02 0.2783080013344D-02 + 0.2849037574687D-02 0.2916554436715D-02 0.2985667323484D-02 0.3056413818931D-02 + 0.3128832386828D-02 0.3202962391187D-02 0.3278844117136D-02 0.3356518792272D-02 + 0.3436028608501D-02 0.3517416744371D-02 0.3600727387929D-02 0.3686005760082D-02 + 0.3773298138499D-02 0.3862651882061D-02 0.3954115455860D-02 0.4047738456768D-02 + 0.4143571639594D-02 0.4241666943825D-02 0.4342077520985D-02 0.4444857762604D-02 + 0.4550063328833D-02 0.4657751177697D-02 0.4767979595018D-02 0.4880808225009D-02 + 0.4996298101570D-02 0.5114511680279D-02 0.5235512871115D-02 0.5359367071918D-02 + 0.5486141202598D-02 0.5615903740128D-02 0.5748724754308D-02 0.5884675944352D-02 + 0.6023830676284D-02 0.6166264021183D-02 0.6312052794284D-02 0.6461275594959D-02 + 0.6614012847588D-02 0.6770346843357D-02 0.6930361782982D-02 0.7094143820394D-02 + 0.7261781107400D-02 0.7433363839342D-02 0.7608984301773D-02 0.7788736918176D-02 + 0.7972718298747D-02 0.8161027290261D-02 0.8353765027049D-02 0.8551034983111D-02 + 0.8752943025377D-02 0.8959597468160D-02 0.9171109128811D-02 0.9387591384603D-02 + 0.9609160230877D-02 0.9835934340477D-02 0.1006803512449D-01 0.1030558679431D-01 + 0.1054871642512D-01 0.1079755402073D-01 0.1105223257982D-01 0.1131288816368D-01 + 0.1157965996544D-01 0.1185269038080D-01 0.1213212508026D-01 0.1241811308303D-01 + 0.1271080683248D-01 0.1301036227325D-01 0.1331693893004D-01 0.1363069998813D-01 + 0.1395181237567D-01 0.1428044684765D-01 0.1461677807184D-01 0.1496098471648D-01 + 0.1531324953990D-01 0.1567375948211D-01 0.1604270575828D-01 0.1642028395434D-01 + 0.1680669412453D-01 0.1720214089116D-01 0.1760683354637D-01 0.1802098615621D-01 + 0.1844481766683D-01 0.1887855201303D-01 0.1932241822902D-01 0.1977665056168D-01 + 0.2024148858606D-01 0.2071717732349D-01 0.2120396736203D-01 0.2170211497964D-01 + 0.2221188226980D-01 0.2273353726988D-01 0.2326735409215D-01 0.2381361305754D-01 + 0.2437260083229D-01 0.2494461056731D-01 0.2552994204062D-01 0.2612890180262D-01 + 0.2674180332442D-01 0.2736896714935D-01 0.2801072104743D-01 0.2866740017320D-01 + 0.2933934722669D-01 0.3002691261781D-01 0.3073045463399D-01 0.3145033961141D-01 + 0.3218694210958D-01 0.3294064508962D-01 0.3371184009606D-01 0.3450092744243D-01 + 0.3530831640054D-01 0.3613442539362D-01 0.3697968219334D-01 0.3784452412086D-01 + 0.3872939825181D-01 0.3963476162544D-01 0.4056108145796D-01 0.4150883536008D-01 + 0.4247851155891D-01 0.4347060912422D-01 0.4448563819924D-01 0.4552412023590D-01 + 0.4658658823475D-01 0.4767358698962D-01 0.4878567333696D-01 0.4992341641008D-01 + 0.5108739789835D-01 0.5227821231135D-01 0.5349646724813D-01 0.5474278367169D-01 + 0.5601779618862D-01 0.5732215333417D-01 0.5865651786266D-01 0.6002156704340D-01 + 0.6141799296226D-01 0.6284650282880D-01 0.6430781928923D-01 0.6580268074515D-01 + 0.6733184167825D-01 0.6889607298100D-01 0.7049616229337D-01 0.7213291434581D-01 + 0.7380715130845D-01 0.7551971314661D-01 0.7727145798277D-01 0.7906326246509D-01 + 0.8089602214242D-01 0.8277065184608D-01 0.8468808607842D-01 0.8664927940812D-01 + 0.8865520687255D-01 0.9070686438707D-01 0.9280526916144D-01 0.9495146012343D-01 + 0.9714649834967D-01 0.9939146750384D-01 0.1016874742823D+00 0.1040356488672D+00 + 0.1064371453872D+00 0.1088931423856D+00 0.1114048432967D+00 0.1139734769295D+00 + 0.1166002979593D+00 0.1192865874273D+00 0.1220336532487D+00 0.1248428307276D+00 + 0.1277154830815D+00 0.1306530019730D+00 0.1336568080498D+00 0.1367283514936D+00 + 0.1398691125766D+00 0.1430806022269D+00 0.1463643626021D+00 0.1497219676713D+00 + 0.1531550238057D+00 0.1566651703780D+00 0.1602540803695D+00 0.1639234609870D+00 + 0.1676750542871D+00 0.1715106378098D+00 0.1754320252209D+00 0.1794410669619D+00 + 0.1835396509100D+00 0.1877297030455D+00 0.1920131881282D+00 0.1963921103827D+00 + 0.2008685141914D+00 0.2054444847966D+00 0.2101221490109D+00 0.2149036759359D+00 + 0.2197912776889D+00 0.2247872101386D+00 0.2298937736476D+00 0.2351133138248D+00 + 0.2404482222837D+00 0.2459009374100D+00 0.2514739451362D+00 0.2571697797240D+00 + 0.2629910245536D+00 0.2689403129212D+00 0.2750203288421D+00 0.2812338078623D+00 + 0.2875835378751D+00 0.2940723599454D+00 0.3007031691395D+00 0.3074789153608D+00 + 0.3144026041916D+00 0.3214772977396D+00 0.3287061154899D+00 0.3360922351618D+00 + 0.3436388935694D+00 0.3513493874868D+00 0.3592270745164D+00 0.3672753739607D+00 + 0.3754977676972D+00 0.3838978010545D+00 0.3924790836915D+00 0.4012452904770D+00 + 0.4102001623706D+00 0.4193475073036D+00 0.4286912010595D+00 0.4382351881538D+00 + 0.4479834827120D+00 0.4579401693452D+00 0.4681094040228D+00 0.4784954149418D+00 + 0.4891025033910D+00 0.4999350446102D+00 0.5109974886435D+00 0.5222943611853D+00 + 0.5338302644183D+00 0.5456098778426D+00 0.5576379590956D+00 0.5699193447601D+00 + 0.5824589511607D+00 0.5952617751475D+00 0.6083328948654D+00 0.6216774705074D+00 + 0.6353007450521D+00 0.6492080449824D+00 0.6634047809857D+00 0.6778964486325D+00 + 0.6926886290333D+00 0.7077869894721D+00 0.7231972840138D+00 0.7389253540860D+00 + 0.7549771290311D+00 0.7713586266289D+00 0.7880759535873D+00 0.8051353059985D+00 + 0.8225429697604D+00 0.8403053209599D+00 0.8584288262158D+00 0.8769200429817D+00 + 0.8957856198031D+00 0.9150322965294D+00 0.9346669044774D+00 0.9546963665439D+00 + 0.9751276972649D+00 0.9959680028197D+00 0.1017224480976D+01 0.1038904420974D+01 + 0.1061015203349D+01 0.1083564299686D+01 0.1106559272300D+01 0.1130007773859D+01 + 0.1153917546912D+01 0.1178296423354D+01 0.1203152323804D+01 0.1228493256899D+01 + 0.1254327318495D+01 0.1280662690787D+01 0.1307507641324D+01 0.1334870521934D+01 + 0.1362759767535D+01 0.1391183894856D+01 0.1420151501035D+01 0.1449671262109D+01 + 0.1479751931386D+01 0.1510402337698D+01 0.1541631383520D+01 0.1573448042969D+01 + 0.1605861359662D+01 0.1638880444440D+01 0.1672514472946D+01 0.1706772683055D+01 + 0.1741664372155D+01 0.1777198894269D+01 0.1813385657016D+01 0.1850234118409D+01 + 0.1887753783475D+01 0.1925954200705D+01 0.1964844958324D+01 0.2004435680370D+01 + 0.2044736022586D+01 0.2085755668115D+01 0.2127504322996D+01 0.2169991711448D+01 + 0.2213227570952D+01 0.2257221647108D+01 0.2301983688271D+01 0.2347523439972D+01 + 0.2393850639086D+01 0.2440975007782D+01 0.2488906247220D+01 0.2537654031002D+01 + 0.2587227998372D+01 0.2637637747157D+01 0.2688892826442D+01 0.2741002728983D+01 + 0.2793976883341D+01 0.2847824645743D+01 0.2902555291652D+01 0.2958178007063D+01 + 0.3014701879494D+01 0.3072135888684D+01 0.3130488897001D+01 0.3189769639525D+01 + 0.3249986713841D+01 0.3311148569513D+01 0.3373263497233D+01 0.3436339617667D+01 + 0.3500384869964D+01 0.3565406999951D+01 0.3631413547991D+01 0.3698411836514D+01 + 0.3766408957221D+01 0.3835411757947D+01 0.3905426829193D+01 0.3976460490322D+01 + 0.4048518775419D+01 0.4121607418815D+01 0.4195731840277D+01 0.4270897129857D+01 + 0.4347108032420D+01 0.4424368931831D+01 0.4502683834816D+01 0.4582056354503D+01 + 0.4662489693636D+01 0.4743986627475D+01 0.4826549486387D+01 0.4910180138127D+01 + 0.4994879969825D+01 0.5080649869681D+01 0.5167490208373D+01 0.5255400820202D+01 + 0.5344380983962D+01 0.5434429403565D+01 0.5525544188426D+01 0.5617722833617D+01 + 0.5710962199815D+01 0.5805258493041D+01 0.5900607244231D+01 0.5997003288635D+01 + 0.6094440745069D+01 0.6192912995049D+01 0.6292412661814D+01 0.6392931589269D+01 + 0.6494460820874D+01 0.6596990578488D+01 0.6700510241224D+01 0.6805008324307D+01 + 0.6910472457995D+01 0.7016889366579D+01 0.7124244847491D+01 0.7232523750568D+01 + 0.7341709957494D+01 0.7451786361463D+01 0.7562734847107D+01 0.7674536270712D+01 + 0.7787170440791D+01 0.7900616099026D+01 0.8014850901658D+01 0.8129851401340D+01 + 0.8245593029526D+01 0.8362050079436D+01 0.8479195689649D+01 0.8597001828383D+01 + 0.8715439278509D+01 0.8834477623371D+01 0.8954085233454D+01 0.9074229253973D+01 + 0.9194875593440D+01 0.9315988913276D+01 0.9437532618530D+01 0.9559468849772D+01 + 0.9681758476237D+01 0.9804361090277D+01 0.9927235003199D+01 0.1005033724256D+02 + 0.1017362355101D+02 0.1029704838669D+02 0.1042056492540D+02 0.1054412506444D+02 + 0.1066767942831D+02 0.1079117737637D+02 0.1091456701244D+02 0.1103779519646D+02 + 0.1116080755839D+02 0.1128354851420D+02 0.1140596128432D+02 0.1152798791434D+02 + 0.1164956929827D+02 0.1177064520433D+02 0.1189115430327D+02 0.1201103419951D+02 + 0.1213022146500D+02 0.1224865167586D+02 0.1236625945201D+02 0.1248297849976D+02 + 0.1259874165744D+02 0.1271348094411D+02 0.1282712761148D+02 0.1293961219902D+02 + 0.1305086459240D+02 0.1316081408518D+02 0.1326938944391D+02 0.1337651897664D+02 + 0.1348213060491D+02 0.1358615193909D+02 0.1368851035736D+02 0.1378913308811D+02 + 0.1388794729589D+02 0.1398488017086D+02 0.1407985902179D+02 0.1417281137257D+02 + 0.1426366506212D+02 0.1435234834789D+02 0.1443879001264D+02 0.1452291947466D+02 + 0.1460466690129D+02 0.1468396332564D+02 0.1476074076649D+02 0.1483493235126D+02 + 0.1490647244192D+02 0.1497529676373D+02 0.1504134253675D+02 0.1510454860984D+02 + 0.1516485559720D+02 0.1522220601698D+02 0.1527654443219D+02 0.1532781759325D+02 + 0.1537597458241D+02 0.1542096695946D+02 0.1546274890874D+02 0.1550127738702D+02 + 0.1553651227211D+02 0.1556841651189D+02 0.1559695627334D+02 0.1562210109145D+02 + 0.1564382401753D+02 0.1566210176664D+02 0.1567691486377D+02 0.1568824778841D+02 + 0.1569608911712D+02 0.1570043166360D+02 0.1570127261607D+02 0.1569861367129D+02 + 0.1569246116496D+02 0.1568282619787D+02 0.1566972475757D+02 0.1565317783486D+02 + 0.1563321153475D+02 0.1560985718135D+02 0.1558315141624D+02 0.1555313628970D+02 + 0.1551985934445D+02 0.1548337369123D+02 0.1544373807583D+02 0.1540101693692D+02 + 0.1535528045436D+02 0.1530660458716D+02 0.1525507110098D+02 0.1520076758423D+02 + 0.1514378745267D+02 0.1508422994170D+02 0.1502220008605D+02 0.1495780868635D+02 + 0.1489117226206D+02 0.1482241299046D+02 0.1475165863115D+02 0.1467904243575D+02 + 0.1460470304238D+02 0.1452878435463D+02 0.1445143540465D+02 0.1437281020013D+02 + 0.1429306755483D+02 0.1421237090260D+02 0.1413088809452D+02 0.1404879117925D+02 + 0.1396625616625D+02 0.1388346277207D+02 0.1380059414952D+02 0.1371783659988D+02 + 0.1363537926825D+02 0.1355341382212D+02 0.1347213411351D+02 0.1339173582480D+02 + 0.1331241609871D+02 0.1323437315279D+02 0.1315780587881D+02 0.1308291342766D+02 + 0.1300989478035D+02 0.1293894830568D+02 0.1287027130535D+02 0.1280405954732D+02 + 0.1274050678825D+02 0.1267980428593D+02 0.1262214030269D+02 0.1256769960087D+02 + 0.1251666293145D+02 0.1246920651702D+02 0.1242550153038D+02 0.1238571356999D+02 + 0.1235000213372D+02 0.1231852009235D+02 0.1229141316414D+02 0.1226881939222D+02 + 0.1225086862623D+02 0.1223768200985D+02 0.1222937147599D+02 0.1222603925117D+02 + 0.1222777737106D+02 0.1223466720868D+02 0.1224677901729D+02 0.1226417148958D+02 + 0.1228689133517D+02 0.1231497287802D+02 0.1234843767581D+02 0.1238729416297D+02 + 0.1243153731911D+02 0.1248114836487D+02 0.1253609448665D+02 0.1259632859227D+02 + 0.1266178909890D+02 0.1273239975523D+02 0.1280806949923D+02 0.1288869235315D+02 + 0.1297414735711D+02 0.1306429854274D+02 0.1315899494816D+02 0.1325807067533D+02 + 0.1336134499111D+02 0.1346862247282D+02 0.1357969319917D+02 0.1369433298744D+02 + 0.1381230367740D+02 0.1393335346243D+02 0.1405721726828D+02 0.1418361717951D+02 + 0.1431226291376D+02 0.1444285234362D+02 0.1457507206581D+02 0.1470859801733D+02 + 0.1484309613763D+02 0.1497822307639D+02 0.1511362694548D+02 0.1524894811426D+02 + 0.1538382004666D+02 0.1551787017849D+02 0.1565072083339D+02 0.1578199017530D+02 + 0.1591129319546D+02 0.1603824273170D+02 0.1616245051740D+02 0.1628352825765D+02 + 0.1640108872963D+02 0.1651474690448D+02 0.1662412108723D+02 0.1672883407174D+02 + 0.1682851430716D+02 0.1692279707220D+02 0.1701132565381D+02 0.1709375252614D+02 + 0.1716974052608D+02 0.1723896402125D+02 0.1730111006644D+02 0.1735587954416D+02 + 0.1740298828530D+02 0.1744216816538D+02 0.1747316817225D+02 0.1749575544089D+02 + 0.1750971625093D+02 0.1751485698260D+02 0.1751100502688D+02 0.1749800964559D+02 + 0.1747574277733D+02 0.1744409978499D+02 0.1740300014123D+02 0.1735238804766D+02 + 0.1729223298439D+02 0.1722253018618D+02 0.1714330104180D+02 0.1705459341368D+02 + 0.1695648187457D+02 0.1684906785873D+02 0.1673247972505D+02 0.1660687272995D+02 + 0.1647242890818D+02 0.1632935685981D+02 0.1617789144222D+02 0.1601829336618D+02 + 0.1585084869528D+02 0.1567586824865D+02 0.1549368690699D+02 0.1530466282265D+02 + 0.1510917653451D+02 0.1490762998916D+02 0.1470044547022D+02 0.1448806443791D+02 + 0.1427094628160D+02 0.1404956698852D+02 0.1382441773199D+02 0.1359600338336D+02 + 0.1336484095192D+02 0.1313145795774D+02 0.1289639074258D+02 0.1266018272468D+02 + 0.1242338260337D+02 0.1218654252002D+02 0.1195021618209D+02 0.1171495695744D+02 + 0.1148131594627D+02 0.1124984003849D+02 0.1102106996440D+02 0.1079553834688D+02 + 0.1057376776347D+02 0.1035626882667D+02 0.1014353829125D+02 0.9936057196884D+01 + 0.9734289054994D+01 0.9538678088120D+01 0.9349647530399D+01 0.9167597997384D+01 + 0.8992905933301D+01 0.8825922143594D+01 0.8666970420224D+01 0.8516346266999D+01 + 0.8374315731611D+01 0.8241114350747D+01 0.8116946214096D+01 0.8001983152570D+01 + 0.7896364055459D+01 0.7800194320670D+01 0.7713545441561D+01 0.7636454733225D+01 + 0.7568925200401D+01 0.7510925548528D+01 0.7462390338698D+01 0.7423220286625D+01 + 0.7393282704950D+01 0.7372412087556D+01 0.7360410833787D+01 0.7357050109802D+01 + 0.7362070843542D+01 0.7375184849138D+01 0.7396076075866D+01 0.7424401976120D+01 + 0.7459794986211D+01 0.7501864113185D+01 0.7550196620265D+01 0.7604359802945D+01 + 0.7663902847256D+01 0.7728358761219D+01 0.7797246370063D+01 0.7870072365405D+01 + 0.7946333398216D+01 0.8025518205140D+01 0.8107109757504D+01 0.8190587422172D+01 + 0.8275429123337D+01 0.8361113494303D+01 0.8447122008353D+01 0.8532941077928D+01 + 0.8618064111536D+01 0.8701993518075D+01 0.8784242648578D+01 0.8864337665829D+01 + 0.8941819332731D+01 0.9016244710878D+01 0.9087188761372D+01 0.9154245840560D+01 + 0.9217031084099D+01 0.9275181673474D+01 0.9328357979881D+01 0.9376244581215D+01 + 0.9418551148709D+01 0.9455013200639D+01 0.9485392721360D+01 0.9509478644797D+01 + 0.9527087202359D+01 0.9538062136102D+01 0.9542274778747D+01 0.9539624002998D+01 + 0.9530036043300D+01 0.9513464193959D+01 0.9489888388159D+01 0.9459314663078D+01 + 0.9421774516843D+01 0.9377324163609D+01 0.9326043693467D+01 0.9268036144314D+01 + 0.9203426493115D+01 0.9132360574297D+01 0.9055003933175D+01 0.8971540622481D+01 + 0.8882171950151D+01 0.8787115186520D+01 0.8686602239071D+01 0.8580878302773D+01 + 0.8470200493895D+01 0.8354836475027D+01 0.8235063078754D+01 0.8111164937189D+01 + 0.7983433124252D+01 0.7852163817216D+01 0.7717656983696D+01 0.7580215099831D+01 + 0.7440141905014D+01 0.7297741198086D+01 0.7153315679440D+01 0.7007165843079D+01 + 0.6859588922166D+01 0.6710877891167D+01 0.6561320527250D+01 0.6411198533128D+01 + 0.6260786723101D+01 0.6110352273646D+01 0.5960154039458D+01 0.5810441935471D+01 + 0.5661456384987D+01 0.5513427833700D+01 0.5366576329042D+01 0.5221111163955D+01 + 0.5077230583918D+01 0.4935121555751D+01 0.4794959596475D+01 0.4656908660288D+01 + 0.4521121081498D+01 0.4387737571052D+01 0.4256887264186D+01 0.4128687816522D+01 + 0.4003245545873D+01 0.3880655616880D+01 0.3761002265561D+01 0.3644359060777D+01 + 0.3530789199588D+01 0.3420345833472D+01 0.3313072422343D+01 0.3209003113371D+01 + 0.3108163141592D+01 0.3010569249384D+01 0.2916230121919D+01 0.2825146835796D+01 + 0.2737313318133D+01 0.2652716813508D+01 0.2571338356232D+01 0.2493153245580D+01 + 0.2418131521695D+01 0.2346238440047D+01 0.2277434942461D+01 0.2211678122838D+01 + 0.2148921685899D+01 0.2089116397376D+01 0.2032210524266D+01 0.1978150263893D+01 + 0.1926880160684D+01 0.1878343509721D+01 0.1832482746269D+01 0.1789239820638D+01 + 0.1748556557871D+01 0.1710375001879D+01 0.1674637743804D+01 0.1641288234472D+01 + 0.1610271080956D+01 0.1581532327338D+01 0.1555019719890D+01 0.1530682956958D+01 + 0.1508473923914D+01 0.1488346913611D+01 0.1470258832820D+01 0.1454169395155D+01 + 0.1440041301042D+01 0.1427840405245D+01 0.1417535872504D+01 0.1409100321753D+01 + 0.1402509959377D+01 0.1397744701874D+01 0.1394788288181D+01 0.1393628381826D+01 + 0.1394256662892D+01 0.1396668909610D+01 0.1400865069190D+01 0.1406849317222D+01 + 0.1414629369614D+01 0.1424336942263D+01 0.1436096575202D+01 0.1449912447024D+01 + 0.1465794674727D+01 0.1483759333931D+01 0.1503828494539D+01 0.1526030271798D+01 + 0.1550398892649D+01 0.1576974777196D+01 0.1605804635055D+01 0.1636941576215D+01 + 7 1012 + 1 0 -1 -511.89194 + 2 0 -1 -58.90181 + 2 1 1 -50.68932 + 2 1 -2 -49.77537 + 3 0 -1 -5.73317 + 3 1 1 -3.34334 + 3 1 -2 -3.22919 + 0.2122975645015D-04 0.2173507709867D-04 0.2225242316243D-04 0.2278208072829D-04 + 0.2332434268594D-04 0.2387950888954D-04 0.2444788632325D-04 0.2502978927059D-04 + 0.2562553948791D-04 0.2623546638192D-04 0.2685990719144D-04 0.2749920717353D-04 + 0.2815371979393D-04 0.2882380692207D-04 0.2950983903075D-04 0.3021219540050D-04 + 0.3093126432877D-04 0.3166744334418D-04 0.3242113942573D-04 0.3319276922733D-04 + 0.3398275930755D-04 0.3479154636487D-04 0.3561957747857D-04 0.3646731035519D-04 + 0.3733521358096D-04 0.3822376688016D-04 0.3913346137963D-04 0.4006479987955D-04 + 0.4101829713060D-04 0.4199448011777D-04 0.4299388835081D-04 0.4401707416166D-04 + 0.4506460300883D-04 0.4613705378910D-04 0.4723501915650D-04 0.4835910584899D-04 + 0.4950993502270D-04 0.5068814259429D-04 0.5189437959126D-04 0.5312931251066D-04 + 0.5439362368626D-04 0.5568801166444D-04 0.5701319158897D-04 0.5836989559491D-04 + 0.5975887321186D-04 0.6118089177673D-04 0.6263673685632D-04 0.6412721267990D-04 + 0.6565314258201D-04 0.6721536945580D-04 0.6881475621705D-04 0.7045218627922D-04 + 0.7212856403973D-04 0.7384481537777D-04 0.7560188816385D-04 0.7740075278149D-04 + 0.7924240266119D-04 0.8112785482706D-04 0.8305815045642D-04 0.8503435545263D-04 + 0.8705756103141D-04 0.8912888432116D-04 0.9124946897738D-04 0.9342048581165D-04 + 0.9564313343555D-04 0.9791863891974D-04 0.1002482584687D-03 0.1026332781112D-03 + 0.1050750144077D-03 0.1075748151735D-03 0.1101340602203D-03 0.1127541621137D-03 + 0.1154365669501D-03 0.1181827551510D-03 0.1209942422769D-03 0.1238725798590D-03 + 0.1268193562527D-03 0.1298361975089D-03 0.1329247682680D-03 0.1360867726735D-03 + 0.1393239553083D-03 0.1426381021518D-03 0.1460310415612D-03 0.1495046452749D-03 + 0.1530608294397D-03 0.1567015556625D-03 0.1604288320871D-03 0.1642447144955D-03 + 0.1681513074364D-03 0.1721507653792D-03 0.1762452938963D-03 0.1804371508722D-03 + 0.1847286477421D-03 0.1891221507592D-03 0.1936200822920D-03 0.1982249221522D-03 + 0.2029392089542D-03 0.2077655415060D-03 0.2127065802334D-03 0.2177650486382D-03 + 0.2229437347894D-03 0.2282454928513D-03 0.2336732446459D-03 0.2392299812538D-03 + 0.2449187646513D-03 0.2507427293871D-03 0.2567050842979D-03 0.2628091142650D-03 + 0.2690581820118D-03 0.2754557299435D-03 0.2820052820308D-03 0.2887104457371D-03 + 0.2955749139921D-03 0.3026024672103D-03 0.3097969753590D-03 0.3171624000731D-03 + 0.3247027968207D-03 0.3324223171196D-03 0.3403252108055D-03 0.3484158283536D-03 + 0.3566986232552D-03 0.3651781544500D-03 0.3738590888149D-03 0.3827462037126D-03 + 0.3918443895988D-03 0.4011586526914D-03 0.4106941177020D-03 0.4204560306321D-03 + 0.4304497616342D-03 0.4406808079408D-03 0.4511547968612D-03 0.4618774888502D-03 + 0.4728547806468D-03 0.4840927084883D-03 0.4955974513988D-03 0.5073753345551D-03 + 0.5194328327314D-03 0.5317765738249D-03 0.5444133424641D-03 0.5573500837015D-03 + 0.5705939067925D-03 0.5841520890639D-03 0.5980320798714D-03 0.6122415046513D-03 + 0.6267881690659D-03 0.6416800632466D-03 0.6569253661363D-03 0.6725324499326D-03 + 0.6885098846360D-03 0.7048664427037D-03 0.7216111038125D-03 0.7387530597330D-03 + 0.7563017193176D-03 0.7742667136049D-03 0.7926579010441D-03 0.8114853728404D-03 + 0.8307594584254D-03 0.8504907310562D-03 0.8706900135433D-03 0.8913683841142D-03 + 0.9125371824119D-03 0.9342080156346D-03 0.9563927648179D-03 0.9791035912634D-03 + 0.1002352943117D-02 0.1026153562102D-02 0.1050518490405D-02 0.1075461077728D-02 + 0.1100994988496D-02 0.1127134209246D-02 0.1153893056171D-02 0.1181286182852D-02 + 0.1209328588167D-02 0.1238035624379D-02 0.1267423005415D-02 0.1297506815344D-02 + 0.1328303517037D-02 0.1359829961041D-02 0.1392103394654D-02 0.1425141471212D-02 + 0.1458962259585D-02 0.1493584253904D-02 0.1529026383504D-02 0.1565308023106D-02 + 0.1602449003221D-02 0.1640469620811D-02 0.1679390650189D-02 0.1719233354165D-02 + 0.1760019495464D-02 0.1801771348394D-02 0.1844511710794D-02 0.1888263916250D-02 + 0.1933051846599D-02 0.1978899944720D-02 0.2025833227614D-02 0.2073877299798D-02 + 0.2123058366995D-02 0.2173403250151D-02 0.2224939399761D-02 0.2277694910540D-02 + 0.2331698536421D-02 0.2386979705903D-02 0.2443568537747D-02 0.2501495857040D-02 + 0.2560793211623D-02 0.2621492888896D-02 0.2683627933011D-02 0.2747232162458D-02 + 0.2812340188056D-02 0.2878987431352D-02 0.2947210143447D-02 0.3017045424251D-02 + 0.3088531242177D-02 0.3161706454285D-02 0.3236610826892D-02 0.3313285056646D-02 + 0.3391770792086D-02 0.3472110655691D-02 0.3554348266436D-02 0.3638528262858D-02 + 0.3724696326649D-02 0.3812899206788D-02 0.3903184744224D-02 0.3995601897109D-02 + 0.4090200766624D-02 0.4187032623373D-02 0.4286149934389D-02 0.4387606390746D-02 + 0.4491456935804D-02 0.4597757794082D-02 0.4706566500803D-02 0.4817941932088D-02 + 0.4931944335851D-02 0.5048635363379D-02 0.5168078101634D-02 0.5290337106279D-02 + 0.5415478435454D-02 0.5543569684307D-02 0.5674680020311D-02 0.5808880219367D-02 + 0.5946242702730D-02 0.6086841574754D-02 0.6230752661494D-02 0.6378053550168D-02 + 0.6528823629508D-02 0.6683144131013D-02 0.6841098171130D-02 0.7002770794372D-02 + 0.7168249017405D-02 0.7337621874121D-02 0.7510980461712D-02 0.7688417987773D-02 + 0.7870029818463D-02 0.8055913527720D-02 0.8246168947593D-02 0.8440898219673D-02 + 0.8640205847678D-02 0.8844198751201D-02 0.9052986320644D-02 0.9266680473381D-02 + 0.9485395711148D-02 0.9709249178711D-02 0.9938360723829D-02 0.1017285295853D-01 + 0.1041285132175D-01 0.1065848414335D-01 0.1090988270951D-01 0.1116718132961D-01 + 0.1143051740455D-01 0.1170003149653D-01 0.1197586740047D-01 0.1225817221684D-01 + 0.1254709642620D-01 0.1284279396532D-01 0.1314542230495D-01 0.1345514252930D-01 + 0.1377211941725D-01 0.1409652152530D-01 0.1442852127232D-01 0.1476829502620D-01 + 0.1511602319226D-01 0.1547189030365D-01 0.1583608511371D-01 0.1620880069022D-01 + 0.1659023451183D-01 0.1698058856639D-01 0.1738006945154D-01 0.1778888847734D-01 + 0.1820726177118D-01 0.1863541038486D-01 0.1907356040402D-01 0.1952194305980D-01 + 0.1998079484302D-01 0.2045035762063D-01 0.2093087875471D-01 0.2142261122400D-01 + 0.2192581374792D-01 0.2244075091329D-01 0.2296769330365D-01 0.2350691763133D-01 + 0.2405870687229D-01 0.2462335040374D-01 0.2520114414469D-01 0.2579239069942D-01 + 0.2639739950387D-01 0.2701648697516D-01 0.2764997666416D-01 0.2829819941123D-01 + 0.2896149350513D-01 0.2964020484531D-01 0.3033468710740D-01 0.3104530191220D-01 + 0.3177241899806D-01 0.3251641639684D-01 0.3327768061342D-01 0.3405660680881D-01 + 0.3485359898710D-01 0.3566907018606D-01 0.3650344267166D-01 0.3735714813647D-01 + 0.3823062790211D-01 0.3912433312562D-01 0.4003872501011D-01 0.4097427501948D-01 + 0.4193146509749D-01 0.4291078789111D-01 0.4391274697832D-01 0.4493785710035D-01 + 0.4598664439858D-01 0.4705964665594D-01 0.4815741354312D-01 0.4928050686955D-01 + 0.5042950083923D-01 0.5160498231153D-01 0.5280755106696D-01 0.5403782007813D-01 + 0.5529641578584D-01 0.5658397838041D-01 0.5790116208843D-01 0.5924863546488D-01 + 0.6062708169076D-01 0.6203719887636D-01 0.6347970037015D-01 0.6495531507346D-01 + 0.6646478776099D-01 0.6800887940725D-01 0.6958836751900D-01 0.7120404647380D-01 + 0.7285672786470D-01 0.7454724085125D-01 0.7627643251682D-01 0.7804516823229D-01 + 0.7985433202641D-01 0.8170482696258D-01 0.8359757552242D-01 0.8553351999606D-01 + 0.8751362287932D-01 0.8953886727772D-01 0.9161025731761D-01 0.9372881856432D-01 + 0.9589559844749D-01 0.9811166669365D-01 0.1003781157661D+00 0.1026960613124D+00 + 0.1050666426187D+00 0.1074910230727D+00 0.1099703906329D+00 0.1125059583070D+00 + 0.1150989646366D+00 0.1177506741909D+00 0.1204623780676D+00 0.1232353944021D+00 + 0.1260710688845D+00 0.1289707752849D+00 0.1319359159864D+00 0.1349679225270D+00 + 0.1380682561490D+00 0.1412384083570D+00 0.1444799014844D+00 0.1477942892678D+00 + 0.1511831574303D+00 0.1546481242725D+00 0.1581908412731D+00 0.1618129936965D+00 + 0.1655163012104D+00 0.1693025185104D+00 0.1731734359544D+00 0.1771308802047D+00 + 0.1811767148790D+00 0.1853128412094D+00 0.1895411987104D+00 0.1938637658552D+00 + 0.1982825607598D+00 0.2027996418767D+00 0.2074171086957D+00 0.2121371024533D+00 + 0.2169618068509D+00 0.2218934487801D+00 0.2269342990569D+00 0.2320866731634D+00 + 0.2373529319974D+00 0.2427354826295D+00 0.2482367790682D+00 0.2538593230323D+00 + 0.2596056647304D+00 0.2654784036474D+00 0.2714801893389D+00 0.2776137222308D+00 + 0.2838817544268D+00 0.2902870905217D+00 0.2968325884206D+00 0.3035211601645D+00 + 0.3103557727607D+00 0.3173394490192D+00 0.3244752683937D+00 0.3317663678273D+00 + 0.3392159426028D+00 0.3468272471962D+00 0.3546035961349D+00 0.3625483648577D+00 + 0.3706649905790D+00 0.3789569731540D+00 0.3874278759464D+00 0.3960813266976D+00 + 0.4049210183955D+00 0.4139507101454D+00 0.4231742280388D+00 0.4325954660221D+00 + 0.4422183867640D+00 0.4520470225197D+00 0.4620854759931D+00 0.4723379211946D+00 + 0.4828086042953D+00 0.4935018444749D+00 0.5044220347646D+00 0.5155736428822D+00 + 0.5269612120602D+00 0.5385893618646D+00 0.5504627890040D+00 0.5625862681281D+00 + 0.5749646526146D+00 0.5876028753427D+00 0.6005059494532D+00 0.6136789690924D+00 + 0.6271271101407D+00 0.6408556309226D+00 0.6548698728981D+00 0.6691752613333D+00 + 0.6837773059493D+00 0.6986816015479D+00 0.7138938286123D+00 0.7294197538810D+00 + 0.7452652308942D+00 0.7614362005101D+00 0.7779386913894D+00 0.7947788204470D+00 + 0.8119627932680D+00 0.8294969044866D+00 0.8473875381261D+00 0.8656411678975D+00 + 0.8842643574549D+00 0.9032637606047D+00 0.9226461214683D+00 0.9424182745935D+00 + 0.9625871450140D+00 0.9831597482541D+00 0.1004143190275D+01 0.1025544667362D+01 + 0.1047371465949D+01 0.1069630962376D+01 0.1092330622582D+01 0.1115478001718D+01 + 0.1139080743699D+01 0.1163146580667D+01 0.1187683332379D+01 0.1212698905512D+01 + 0.1238201292877D+01 0.1264198572546D+01 0.1290698906886D+01 0.1317710541494D+01 + 0.1345241804028D+01 0.1373301102944D+01 0.1401896926110D+01 0.1431037839321D+01 + 0.1460732484690D+01 0.1490989578921D+01 0.1521817911461D+01 0.1553226342519D+01 + 0.1585223800953D+01 0.1617819282025D+01 0.1651021845012D+01 0.1684840610666D+01 + 0.1719284758534D+01 0.1754363524114D+01 0.1790086195862D+01 0.1826462112019D+01 + 0.1863500657290D+01 0.1901211259327D+01 0.1939603385053D+01 0.1978686536792D+01 + 0.2018470248210D+01 0.2058964080068D+01 0.2100177615772D+01 0.2142120456722D+01 + 0.2184802217451D+01 0.2228232520549D+01 0.2272420991371D+01 0.2317377252521D+01 + 0.2363110918097D+01 0.2409631587718D+01 0.2456948840298D+01 0.2505072227579D+01 + 0.2554011267414D+01 0.2603775436800D+01 0.2654374164640D+01 0.2705816824249D+01 + 0.2758112725590D+01 0.2811271107225D+01 0.2865301128002D+01 0.2920211858443D+01 + 0.2976012271854D+01 0.3032711235135D+01 0.3090317499294D+01 0.3148839689666D+01 + 0.3208286295814D+01 0.3268665661132D+01 0.3329985972130D+01 0.3392255247403D+01 + 0.3455481326284D+01 0.3519671857166D+01 0.3584834285516D+01 0.3650975841540D+01 + 0.3718103527540D+01 0.3786224104928D+01 0.3855344080910D+01 0.3925469694842D+01 + 0.3996606904248D+01 0.4068761370505D+01 0.4141938444201D+01 0.4216143150155D+01 + 0.4291380172106D+01 0.4367653837082D+01 0.4444968099432D+01 0.4523326524540D+01 + 0.4602732272224D+01 0.4683188079814D+01 0.4764696244923D+01 0.4847258607911D+01 + 0.4930876534058D+01 0.5015550895439D+01 0.5101282052526D+01 0.5188069835504D+01 + 0.5275913525340D+01 0.5364811834582D+01 0.5454762887935D+01 0.5545764202593D+01 + 0.5637812668364D+01 0.5730904527600D+01 0.5825035354930D+01 0.5920200036841D+01 + 0.6016392751096D+01 0.6113606946037D+01 0.6211835319763D+01 0.6311069799237D+01 + 0.6411301519318D+01 0.6512520801757D+01 0.6614717134178D+01 0.6717879149076D+01 + 0.6821994602856D+01 0.6927050354936D+01 0.7033032346971D+01 0.7139925582197D+01 + 0.7247714104955D+01 0.7356380980422D+01 0.7465908274590D+01 0.7576277034522D+01 + 0.7687467268944D+01 0.7799457929201D+01 0.7912226890625D+01 0.8025750934367D+01 + 0.8140005729731D+01 0.8254965817070D+01 0.8370604591283D+01 0.8486894285977D+01 + 0.8603805958343D+01 0.8721309474805D+01 0.8839373497487D+01 0.8957965471583D+01 + 0.9077051613664D+01 0.9196596901005D+01 0.9316565061973D+01 0.9436918567578D+01 + 0.9557618624205D+01 0.9678625167647D+01 0.9799896858462D+01 0.9921391078761D+01 + 0.1004306393048D+02 0.1016487023519D+02 0.1028676353561D+02 0.1040869609872D+02 + 0.1053061892078D+02 0.1065248173410D+02 0.1077423301584D+02 0.1089581999877D+02 + 0.1101718868413D+02 0.1113828385666D+02 0.1125904910191D+02 0.1137942682584D+02 + 0.1149935827678D+02 0.1161878356999D+02 0.1173764171462D+02 0.1185587064341D+02 + 0.1197340724503D+02 0.1209018739920D+02 0.1220614601465D+02 0.1232121706995D+02 + 0.1243533365740D+02 0.1254842802982D+02 0.1266043165050D+02 0.1277127524634D+02 + 0.1288088886404D+02 0.1298920192971D+02 0.1309614331160D+02 0.1320164138629D+02 + 0.1330562410812D+02 0.1340801908212D+02 0.1350875364026D+02 0.1360775492116D+02 + 0.1370494995324D+02 0.1380026574132D+02 0.1389362935662D+02 0.1398496803019D+02 + 0.1407420924981D+02 0.1416128086012D+02 0.1424611116627D+02 0.1432862904069D+02 + 0.1440876403324D+02 0.1448644648440D+02 0.1456160764164D+02 0.1463417977876D+02 + 0.1470409631813D+02 0.1477129195572D+02 0.1483570278883D+02 0.1489726644633D+02 + 0.1495592222127D+02 0.1501161120574D+02 0.1506427642781D+02 0.1511386299027D+02 + 0.1516031821110D+02 0.1520359176531D+02 0.1524363582812D+02 0.1528040521898D+02 + 0.1531385754641D+02 0.1534395335325D+02 0.1537065626208D+02 0.1539393312048D+02 + 0.1541375414585D+02 0.1543009306950D+02 0.1544292727951D+02 0.1545223796216D+02 + 0.1545801024155D+02 0.1546023331695D+02 0.1545890059744D+02 0.1545400983365D+02 + 0.1544556324596D+02 0.1543356764880D+02 0.1541803457065D+02 0.1539898036925D+02 + 0.1537642634154D+02 0.1535039882796D+02 0.1532092931044D+02 0.1528805450387D+02 + 0.1525181644030D+02 0.1521226254557D+02 0.1516944570778D+02 0.1512342433713D+02 + 0.1507426241669D+02 0.1502202954350D+02 0.1496680095964D+02 0.1490865757272D+02 + 0.1484768596530D+02 0.1478397839284D+02 0.1471763276969D+02 0.1464875264266D+02 + 0.1457744715182D+02 0.1450383097801D+02 0.1442802427679D+02 0.1435015259838D+02 + 0.1427034679327D+02 0.1418874290321D+02 0.1410548203722D+02 0.1402071023247D+02 + 0.1393457829969D+02 0.1384724165293D+02 0.1375886012364D+02 0.1366959775879D+02 + 0.1357962260304D+02 0.1348910646488D+02 0.1339822466686D+02 0.1330715577980D+02 + 0.1321608134121D+02 0.1312518555808D+02 0.1303465499419D+02 0.1294467824221D+02 + 0.1285544558101D+02 0.1276714861841D+02 0.1267997991994D+02 0.1259413262403D+02 + 0.1250980004419D+02 0.1242717525885D+02 0.1234645068948D+02 0.1226781766776D+02 + 0.1219146599257D+02 0.1211758347770D+02 0.1204635549121D+02 0.1197796448732D+02 + 0.1191258953197D+02 0.1185040582321D+02 0.1179158420730D+02 0.1173629069208D+02 + 0.1168468595856D+02 0.1163692487226D+02 0.1159315599549D+02 0.1155352110209D+02 + 0.1151815469598D+02 0.1148718353503D+02 0.1146072616178D+02 0.1143889244247D+02 + 0.1142178311602D+02 0.1140948935454D+02 0.1140209233686D+02 0.1139966283678D+02 + 0.1140226082774D+02 0.1140993510519D+02 0.1142272292875D+02 0.1144064968524D+02 + 0.1146372857460D+02 0.1149196031991D+02 0.1152533290326D+02 0.1156382132880D+02 + 0.1160738741454D+02 0.1165597961412D+02 0.1170953287012D+02 0.1176796849989D+02 + 0.1183119411535D+02 0.1189910357777D+02 0.1197157698856D+02 0.1204848071701D+02 + 0.1212966746596D+02 0.1221497637600D+02 0.1230423316888D+02 0.1239725033077D+02 + 0.1249382733567D+02 0.1259375090926D+02 0.1269679533346D+02 0.1280272279167D+02 + 0.1291128375448D+02 0.1302221740584D+02 0.1313525210912D+02 0.1325010591253D+02 + 0.1336648709337D+02 0.1348409474012D+02 0.1360261937149D+02 0.1372174359123D+02 + 0.1384114277758D+02 0.1396048580566D+02 0.1407943580155D+02 0.1419765092608D+02 + 0.1431478518661D+02 0.1443048927478D+02 0.1454441142812D+02 0.1465619831308D+02 + 0.1476549592746D+02 0.1487195051928D+02 0.1497520951989D+02 0.1507492248828D+02 + 0.1517074206398D+02 0.1526232492551D+02 0.1534933275145D+02 0.1543143318112D+02 + 0.1550830077157D+02 0.1557961794797D+02 0.1564507594396D+02 0.1570437572881D+02 + 0.1575722891823D+02 0.1580335866539D+02 0.1584250052899D+02 0.1587440331524D+02 + 0.1589882989033D+02 0.1591555796049D+02 0.1592438081630D+02 0.1592510803844D+02 + 0.1591756616179D+02 0.1590159929512D+02 0.1587706969359D+02 0.1584385828154D+02 + 0.1580186512290D+02 0.1575100983720D+02 0.1569123195871D+02 0.1562249123695D+02 + 0.1554476787665D+02 0.1545806271560D+02 0.1536239733893D+02 0.1525781412875D+02 + 0.1514437624809D+02 0.1502216755847D+02 0.1489129247063D+02 0.1475187572813D+02 + 0.1460406212401D+02 0.1444801615062D+02 0.1428392158332D+02 0.1411198099888D+02 + 0.1393241522964D+02 0.1374546275490D+02 0.1355137903119D+02 0.1335043576333D+02 + 0.1314292011864D+02 0.1292913388664D+02 0.1270939258714D+02 0.1248402452972D+02 + 0.1225336982785D+02 0.1201777937125D+02 0.1177761376017D+02 0.1153324220569D+02 + 0.1128504140014D+02 0.1103339436205D+02 0.1077868926027D+02 0.1052131822179D+02 + 0.1026167612835D+02 0.1000015940663D+02 0.9737164817090D+01 0.9473088246666D+01 + 0.9208323510392D+01 0.8943261167138D+01 0.8678287354606D+01 0.8413782648689D+01 + 0.8150120952198D+01 0.7887668417870D+01 0.7626782410424D+01 0.7367810512255D+01 + 0.7111089577147D+01 0.6856944836175D+01 0.6605689059620D+01 0.6357621778576D+01 + 0.6113028569417D+01 0.5872180404071D+01 0.5635333068605D+01 0.5402726652271D+01 + 0.5174585108689D+01 0.4951115890458D+01 0.4732509658013D+01 0.4518940063093D+01 + 0.4310563606744D+01 0.4107519571314D+01 0.3909930025455D+01 0.3717899900701D+01 + 0.3531517137795D+01 0.3350852900521D+01 0.3175961854415D+01 0.3006882507418D+01 + 0.2843637609166D+01 0.2686234605393D+01 0.2534666143602D+01 0.2388910626020D+01 + 0.2248932805599D+01 0.2114684420764D+01 0.1986104864410D+01 0.1863121882663D+01 + 0.1745652298807D+01 0.1633602757816D+01 0.1526870486911D+01 0.1425344067651D+01 + 0.1328904215091D+01 0.1237424559686D+01 0.1150772427713D+01 0.1068809616148D+01 + 0.9913931580887D+00 0.9183760750247D+00 0.8496081124357D+00 0.7849364554513D+00 + 0.7242064215293D+00 0.6672621273712D+00 0.6139471275574D+00 0.5641050226618D+00 + 0.5175800348878D+00 0.4742175495586D+00 0.4338646210828D+00 0.3963704423129D+00 + 0.3615867764997D+00 0.3293683513354D+00 0.2995732148544D+00 0.2720630532321D+00 + 0.2467034707815D+00 0.2233642326902D+00 0.2019194712763D+00 0.1822478567499D+00 + 0.1642327336682D+00 0.1477622244444D+00 0.1327293014336D+00 0.1190318292464D+00 + 0.1065725790655D+00 0.9525921682581D-01 0.8500426719540D-01 0.7572505534570D-01 + 0.6734362852856D-01 0.5978665949119D-01 0.5298533375213D-01 0.4687522273735D-01 + 0.4139614473480D-01 0.3649201557103D-01 0.3211069084453D-01 0.2820380147099D-01 + 0.2472658420543D-01 0.2163770870794D-01 0.1889910261478D-01 0.1647577596641D-01 + 0.1433564623066D-01 0.1244936504301D-01 0.1079014767040D-01 0.9333606088531D-02 + 0.8057586449521D-02 0.6942011605538D-02 0.5968729247262D-02 0.5121366113861D-02 + 0.4385188634413D-02 0.3746970269980D-02 0.3194865741265D-02 0.2718292249293D-02 + 0.2307817726031D-02 0.1955056088404D-02 0.1652569412799D-02 0.1393776897745D-02 + 0.1172870439853D-02 0.9847366120634D-03 0.8248848034661D-03 0.6893812560569D-03 + 0.5747887154298D-03 0.4781113990982D-03 0.3967449774979D-03 0.3284312582634D-03 + 0.2712172636576D-03 0.2234183935981D-03 0.1835853721449D-03 0.1504746831443D-03 + 0.1230222105786D-03 0.1003198106540D-03 0.8159455542106D-04 0.6619040144209D-04 + 0.5355205138722D-04 0.4321079120846D-04 0.3477210045803D-04 0.2790484818898D-04 + 0.2233190152246D-04 0.1782198824118D-04 0.1418266855132D-04 0.1125428434880D-04 + 0.8904766856498D-05 0.7025195313453D-05 0.5526010459652D-05 0.4333796852085D-05 + 0.3388557563637D-05 0.2641413563333D-05 0.2052668070841D-05 0.1590183444862D-05 + 0.1228024735392D-05 0.9453299398051D-06 0.7253722919424D-06 0.5547846237125D-06 + 0.4229200131023D-06 0.3213266143727D-06 0.2433177983142D-06 0.1836215545666D-06 + 0.1380955642703D-06 0.1034964778941D-06 0.7729376586493D-07 0.5752008209307D-07 + 0.4265142355148D-07 0.3151151106808D-07 0.2319578320089D-07 0.1701120974173D-07 + 0.1242881489534D-07 0.9046371073667D-08 0.6559198960071D-08 0.4737402476978D-08 + 0.3408191153158D-08 0.2442208093542D-08 0.1742998768590D-08 0.1238932286038D-08 + 0.8770296193333D-09 0.6182683290111D-09 0.4340255982013D-09 0.3033950772413D-09 + 0.2111715589818D-09 0.1463438404983D-09 0.1009726185101D-09 0.6935859066118D-10 + 0.4742849271888D-10 0.3228488955626D-10 0.2187547853929D-10 0.1475212866899D-10 + 0.9901881750809D-11 0.6613860882122D-11 0.4396644350124D-11 0.2908650000322D-11 + 0.1914873227728D-11 0.1254415200484D-11 0.8176535094916D-12 0.5302708391854D-12 + 0.3421370551355D-12 0.2196087836422D-12 0.1402231518601D-12 0.8906014768602D-13 + LSMS: xx z= 26. xvalws= 2.77074 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728402963D+02-0.5199725117641D+02-0.5199721792578D+02-0.5199718427293D+02 +-0.5199715021300D+02-0.5199711574107D+02-0.5199708085214D+02-0.5199704554119D+02 +-0.5199700980309D+02-0.5199697363268D+02-0.5199693702474D+02-0.5199689997397D+02 +-0.5199686247500D+02-0.5199682452243D+02-0.5199678611076D+02-0.5199674723444D+02 +-0.5199670788785D+02-0.5199666806529D+02-0.5199662776101D+02-0.5199658696918D+02 +-0.5199654568390D+02-0.5199650389922D+02-0.5199646160907D+02-0.5199641880734D+02 +-0.5199637548785D+02-0.5199633164434D+02-0.5199628727046D+02-0.5199624235979D+02 +-0.5199619690585D+02-0.5199615090205D+02-0.5199610434176D+02-0.5199605721822D+02 +-0.5199600952464D+02-0.5199596125410D+02-0.5199591239964D+02-0.5199586295419D+02 +-0.5199581291060D+02-0.5199576226162D+02-0.5199571099994D+02-0.5199565911815D+02 +-0.5199560660874D+02-0.5199555346411D+02-0.5199549967658D+02-0.5199544523837D+02 +-0.5199539014162D+02-0.5199533437834D+02-0.5199527794048D+02-0.5199522081989D+02 +-0.5199516300828D+02-0.5199510449731D+02-0.5199504527851D+02-0.5199498534331D+02 +-0.5199492468306D+02-0.5199486328897D+02-0.5199480115217D+02-0.5199473826367D+02 +-0.5199467461436D+02-0.5199461019507D+02-0.5199454499646D+02-0.5199447900910D+02 +-0.5199441222344D+02-0.5199434462984D+02-0.5199427621849D+02-0.5199420697954D+02 +-0.5199413690295D+02-0.5199406597858D+02-0.5199399419618D+02-0.5199392154537D+02 +-0.5199384801563D+02-0.5199377359634D+02-0.5199369827672D+02-0.5199362204589D+02 +-0.5199354489281D+02-0.5199346680633D+02-0.5199338777515D+02-0.5199330778784D+02 +-0.5199322683282D+02-0.5199314489839D+02-0.5199306197270D+02-0.5199297804374D+02 +-0.5199289309939D+02-0.5199280712733D+02-0.5199272011516D+02-0.5199263205027D+02 +-0.5199254291992D+02-0.5199245271123D+02-0.5199236141114D+02-0.5199226900644D+02 +-0.5199217548376D+02-0.5199208082958D+02-0.5199198503019D+02-0.5199188807175D+02 +-0.5199178994021D+02-0.5199169062139D+02-0.5199159010092D+02-0.5199148836424D+02 +-0.5199138539665D+02-0.5199128118323D+02-0.5199117570892D+02-0.5199106895845D+02 +-0.5199096091638D+02-0.5199085156707D+02-0.5199074089471D+02-0.5199062888326D+02 +-0.5199051551654D+02-0.5199040077813D+02-0.5199028465143D+02-0.5199016711964D+02 +-0.5199004816574D+02-0.5198992777253D+02-0.5198980592257D+02-0.5198968259824D+02 +-0.5198955778170D+02-0.5198943145487D+02-0.5198930359948D+02-0.5198917419701D+02 +-0.5198904322875D+02-0.5198891067574D+02-0.5198877651879D+02-0.5198864073848D+02 +-0.5198850331517D+02-0.5198836422896D+02-0.5198822345972D+02-0.5198808098707D+02 +-0.5198793679039D+02-0.5198779084882D+02-0.5198764314123D+02-0.5198749364622D+02 +-0.5198734234217D+02-0.5198718920716D+02-0.5198703421905D+02-0.5198687735537D+02 +-0.5198671859343D+02-0.5198655791024D+02-0.5198639528254D+02-0.5198623068679D+02 +-0.5198606409915D+02-0.5198589549550D+02-0.5198572485143D+02-0.5198555214224D+02 +-0.5198537734293D+02-0.5198520042816D+02-0.5198502137235D+02-0.5198484014954D+02 +-0.5198465673351D+02-0.5198447109769D+02-0.5198428321519D+02-0.5198409305883D+02 +-0.5198390060104D+02-0.5198370581396D+02-0.5198350866939D+02-0.5198330913876D+02 +-0.5198310719319D+02-0.5198290280341D+02-0.5198269593983D+02-0.5198248657249D+02 +-0.5198227467106D+02-0.5198206020484D+02-0.5198184314277D+02-0.5198162345340D+02 +-0.5198140110492D+02-0.5198117606510D+02-0.5198094830136D+02-0.5198071778068D+02 +-0.5198048446968D+02-0.5198024833454D+02-0.5198000934107D+02-0.5197976745462D+02 +-0.5197952264015D+02-0.5197927486220D+02-0.5197902408485D+02-0.5197877027176D+02 +-0.5197851338615D+02-0.5197825339081D+02-0.5197799024804D+02-0.5197772391971D+02 +-0.5197745436723D+02-0.5197718155151D+02-0.5197690543304D+02-0.5197662597177D+02 +-0.5197634312720D+02-0.5197605685833D+02-0.5197576712367D+02-0.5197547388122D+02 +-0.5197517708846D+02-0.5197487670236D+02-0.5197457267938D+02-0.5197426497542D+02 +-0.5197395354589D+02-0.5197363834563D+02-0.5197331932893D+02-0.5197299644952D+02 +-0.5197266966059D+02-0.5197233891476D+02-0.5197200416404D+02-0.5197166535990D+02 +-0.5197132245319D+02-0.5197097539418D+02-0.5197062413252D+02-0.5197026861727D+02 +-0.5196990879687D+02-0.5196954461909D+02-0.5196917603112D+02-0.5196880297948D+02 +-0.5196842541005D+02-0.5196804326804D+02-0.5196765649801D+02-0.5196726504383D+02 +-0.5196686884871D+02-0.5196646785514D+02-0.5196606200494D+02-0.5196565123919D+02 +-0.5196523549829D+02-0.5196481472189D+02-0.5196438884890D+02-0.5196395781753D+02 +-0.5196352156518D+02-0.5196308002855D+02-0.5196263314350D+02-0.5196218084518D+02 +-0.5196172306789D+02-0.5196125974518D+02-0.5196079080977D+02-0.5196031619354D+02 +-0.5195983582758D+02-0.5195934964214D+02-0.5195885756657D+02-0.5195835952942D+02 +-0.5195785545834D+02-0.5195734528011D+02-0.5195682892060D+02-0.5195630630481D+02 +-0.5195577735679D+02-0.5195524199969D+02-0.5195470015573D+02-0.5195415174616D+02 +-0.5195359669127D+02-0.5195303491041D+02-0.5195246632192D+02-0.5195189084316D+02 +-0.5195130839046D+02-0.5195071887917D+02-0.5195012222358D+02-0.5194951833693D+02 +-0.5194890713143D+02-0.5194828851819D+02-0.5194766240726D+02-0.5194702870759D+02 +-0.5194638732701D+02-0.5194573817222D+02-0.5194508114882D+02-0.5194441616121D+02 +-0.5194374311266D+02-0.5194306190525D+02-0.5194237243986D+02-0.5194167461616D+02 +-0.5194096833262D+02-0.5194025348643D+02-0.5193952997356D+02-0.5193879768871D+02 +-0.5193805652527D+02-0.5193730637535D+02-0.5193654712973D+02-0.5193577867788D+02 +-0.5193500090790D+02-0.5193421370652D+02-0.5193341695911D+02-0.5193261054963D+02 +-0.5193179436061D+02-0.5193096827316D+02-0.5193013216694D+02-0.5192928592013D+02 +-0.5192842940944D+02-0.5192756251004D+02-0.5192668509561D+02-0.5192579703828D+02 +-0.5192489820860D+02-0.5192398847556D+02-0.5192306770652D+02-0.5192213576726D+02 +-0.5192119252189D+02-0.5192023783287D+02-0.5191927156096D+02-0.5191829356524D+02 +-0.5191730370307D+02-0.5191630183005D+02-0.5191528780001D+02-0.5191426146503D+02 +-0.5191322267532D+02-0.5191217127930D+02-0.5191110712354D+02-0.5191003005272D+02 +-0.5190893990959D+02-0.5190783653503D+02-0.5190671976795D+02-0.5190558944528D+02 +-0.5190444540195D+02-0.5190328747089D+02-0.5190211548297D+02-0.5190092926700D+02 +-0.5189972864968D+02-0.5189851345560D+02-0.5189728350719D+02-0.5189603862472D+02 +-0.5189477862625D+02-0.5189350332759D+02-0.5189221254235D+02-0.5189090608179D+02 +-0.5188958375491D+02-0.5188824536834D+02-0.5188689072635D+02-0.5188551963080D+02 +-0.5188413188114D+02-0.5188272727435D+02-0.5188130560492D+02-0.5187986666482D+02 +-0.5187841024347D+02-0.5187693612772D+02-0.5187544410178D+02-0.5187393394724D+02 +-0.5187240544300D+02-0.5187085836524D+02-0.5186929248740D+02-0.5186770758014D+02 +-0.5186610341132D+02-0.5186447974591D+02-0.5186283634606D+02-0.5186117297093D+02 +-0.5185948937678D+02-0.5185778531685D+02-0.5185606054135D+02-0.5185431479744D+02 +-0.5185254782916D+02-0.5185075937741D+02-0.5184894917991D+02-0.5184711697117D+02 +-0.5184526248242D+02-0.5184338544160D+02-0.5184148557330D+02-0.5183956259875D+02 +-0.5183761623572D+02-0.5183564619854D+02-0.5183365219802D+02-0.5183163394142D+02 +-0.5182959113240D+02-0.5182752347098D+02-0.5182543065350D+02-0.5182331237255D+02 +-0.5182116831697D+02-0.5181899817174D+02-0.5181680161800D+02-0.5181457833297D+02 +-0.5181232798987D+02-0.5181005025795D+02-0.5180774480235D+02-0.5180541128413D+02 +-0.5180304936016D+02-0.5180065868310D+02-0.5179823890134D+02-0.5179578965895D+02 +-0.5179331059564D+02-0.5179080134665D+02-0.5178826154277D+02-0.5178569081025D+02 +-0.5178308877073D+02-0.5178045504121D+02-0.5177778923399D+02-0.5177509095659D+02 +-0.5177235981171D+02-0.5176959539717D+02-0.5176679730585D+02-0.5176396512563D+02 +-0.5176109843930D+02-0.5175819682457D+02-0.5175525985390D+02-0.5175228709457D+02 +-0.5174927810849D+02-0.5174623245221D+02-0.5174314967682D+02-0.5174002932792D+02 +-0.5173687094551D+02-0.5173367406395D+02-0.5173043821187D+02-0.5172716291215D+02 +-0.5172384768177D+02-0.5172049203182D+02-0.5171709546736D+02-0.5171365748739D+02 +-0.5171017758479D+02-0.5170665524617D+02-0.5170308995189D+02-0.5169948117592D+02 +-0.5169582838578D+02-0.5169213104249D+02-0.5168838860043D+02-0.5168460050732D+02 +-0.5168076620412D+02-0.5167688512494D+02-0.5167295669696D+02-0.5166898034036D+02 +-0.5166495546822D+02-0.5166088148646D+02-0.5165675779371D+02-0.5165258378128D+02 +-0.5164835883303D+02-0.5164408232529D+02-0.5163975362681D+02-0.5163537209858D+02 +-0.5163093709386D+02-0.5162644795799D+02-0.5162190402831D+02-0.5161730463415D+02 +-0.5161264909661D+02-0.5160793672858D+02-0.5160316683457D+02-0.5159833871062D+02 +-0.5159345164422D+02-0.5158850491424D+02-0.5158349779076D+02-0.5157842953502D+02 +-0.5157329939929D+02-0.5156810662682D+02-0.5156285045165D+02-0.5155753009857D+02 +-0.5155214478300D+02-0.5154669371088D+02-0.5154117607855D+02-0.5153559107266D+02 +-0.5152993787006D+02-0.5152421563767D+02-0.5151842353238D+02-0.5151256070096D+02 +-0.5150662627991D+02-0.5150061939535D+02-0.5149453916296D+02-0.5148838468777D+02 +-0.5148215506412D+02-0.5147584937554D+02-0.5146946669454D+02-0.5146300608264D+02 +-0.5145646659012D+02-0.5144984725596D+02-0.5144314710771D+02-0.5143636516137D+02 +-0.5142950042123D+02-0.5142255187982D+02-0.5141551851771D+02-0.5140839930344D+02 +-0.5140119319335D+02-0.5139389913149D+02-0.5138651604948D+02-0.5137904286634D+02 +-0.5137147848843D+02-0.5136382180931D+02-0.5135607170955D+02-0.5134822705665D+02 +-0.5134028670491D+02-0.5133224949527D+02-0.5132411425521D+02-0.5131587979859D+02 +-0.5130754492555D+02-0.5129910842232D+02-0.5129056906116D+02-0.5128192560017D+02 +-0.5127317678315D+02-0.5126432133956D+02-0.5125535798425D+02-0.5124628541740D+02 +-0.5123710232443D+02-0.5122780737574D+02-0.5121839922671D+02-0.5120887651745D+02 +-0.5119923787276D+02-0.5118948190193D+02-0.5117960719865D+02-0.5116961234085D+02 +-0.5115949589056D+02-0.5114925639380D+02-0.5113889238044D+02-0.5112840236408D+02 +-0.5111778484188D+02-0.5110703829447D+02-0.5109616118579D+02-0.5108515196301D+02 +-0.5107400905631D+02-0.5106273087889D+02-0.5105131582667D+02-0.5103976227836D+02 +-0.5102806859514D+02-0.5101623312071D+02-0.5100425418105D+02-0.5099213008436D+02 +-0.5097985912091D+02-0.5096743956297D+02-0.5095486966464D+02-0.5094214766176D+02 +-0.5092927177183D+02-0.5091624019384D+02-0.5090305110822D+02-0.5088970267672D+02 +-0.5087619304230D+02-0.5086252032900D+02-0.5084868264193D+02-0.5083467806710D+02 +-0.5082050467136D+02-0.5080616050232D+02-0.5079164358822D+02-0.5077695193792D+02 +-0.5076208354076D+02-0.5074703636655D+02-0.5073180836542D+02-0.5071639746782D+02 +-0.5070080158445D+02-0.5068501860613D+02-0.5066904640389D+02-0.5065288282874D+02 +-0.5063652571181D+02-0.5061997286414D+02-0.5060322207678D+02-0.5058627112067D+02 +-0.5056911774669D+02-0.5055175968555D+02-0.5053419464788D+02-0.5051642032411D+02 +-0.5049843438458D+02-0.5048023447945D+02-0.5046181823877D+02-0.5044318327247D+02 +-0.5042432717038D+02-0.5040524750226D+02-0.5038594181787D+02-0.5036640764694D+02 +-0.5034664249930D+02-0.5032664386488D+02-0.5030640921379D+02-0.5028593599640D+02 +-0.5026522164341D+02-0.5024426356594D+02-0.5022305915564D+02-0.5020160578474D+02 +-0.5017990080623D+02-0.5015794155393D+02-0.5013572534263D+02-0.5011324946826D+02 +-0.5009051120796D+02-0.5006750782030D+02-0.5004423654542D+02-0.5002069460521D+02 +-0.4999687920344D+02-0.4997278752603D+02-0.4994841674120D+02-0.4992376399966D+02 +-0.4989882643488D+02-0.4987360116327D+02-0.4984808528443D+02-0.4982227588141D+02 +-0.4979617002094D+02-0.4976976475371D+02-0.4974305711462D+02-0.4971604412309D+02 +-0.4968872278335D+02-0.4966109008469D+02-0.4963314300185D+02-0.4960487849528D+02 +-0.4957629351145D+02-0.4954738498327D+02-0.4951814983035D+02-0.4948858495939D+02 +-0.4945868726453D+02-0.4942845362775D+02-0.4939788091919D+02-0.4936696599757D+02 +-0.4933570571061D+02-0.4930409689534D+02-0.4927213637859D+02-0.4923982097740D+02 +-0.4920714749935D+02-0.4917411274309D+02-0.4914071349870D+02-0.4910694654815D+02 +-0.4907280866573D+02-0.4903829661848D+02-0.4900340716666D+02-0.4896813706420D+02 +-0.4893248305909D+02-0.4889644189392D+02-0.4886001030623D+02-0.4882318502909D+02 +-0.4878596279141D+02-0.4874834031849D+02-0.4871031433244D+02-0.4867188155262D+02 +-0.4863303869609D+02-0.4859378247804D+02-0.4855410961222D+02-0.4851401681140D+02 +-0.4847350078774D+02-0.4843255825325D+02-0.4839118592018D+02-0.4834938050138D+02 +-0.4830713871075D+02-0.4826445726356D+02-0.4822133287682D+02-0.4817776226967D+02 +-0.4813374216365D+02-0.4808926928306D+02-0.4804434035526D+02-0.4799895211091D+02 +-0.4795310128431D+02-0.4790678461358D+02-0.4785999884093D+02-0.4781274071282D+02 +-0.4776500698020D+02-0.4771679439861D+02-0.4766809972836D+02-0.4761891973461D+02 +-0.4756925118748D+02-0.4751909086208D+02-0.4746843553857D+02-0.4741728200213D+02 +-0.4736562704295D+02-0.4731346745620D+02-0.4726080004188D+02-0.4720762160479D+02 +-0.4715392895431D+02-0.4709971890425D+02-0.4704498827268D+02-0.4698973388163D+02 +-0.4693395255690D+02-0.4687764112767D+02-0.4682079642628D+02-0.4676341528777D+02 +-0.4670549454962D+02-0.4664703105122D+02-0.4658802163351D+02-0.4652846313853D+02 +-0.4646835240891D+02-0.4640768628735D+02-0.4634646161617D+02-0.4628467523671D+02 +-0.4622232398885D+02-0.4615940471037D+02-0.4609591423645D+02-0.4603184939910D+02 +-0.4596720702657D+02-0.4590198394276D+02-0.4583617696675D+02-0.4576978291218D+02 +-0.4570279858676D+02-0.4563522079176D+02-0.4556704632159D+02-0.4549827196328D+02 +-0.4542889449617D+02-0.4535891069156D+02-0.4528831731237D+02-0.4521711111299D+02 +-0.4514528883912D+02-0.4507284722768D+02-0.4499978300686D+02-0.4492609289624D+02 +-0.4485177360700D+02-0.4477682184233D+02-0.4470123429783D+02-0.4462500766219D+02 +-0.4454813861790D+02-0.4447062384219D+02-0.4439246000814D+02-0.4431364378589D+02 +-0.4423417184413D+02-0.4415404085174D+02-0.4407324747964D+02-0.4399178840285D+02 +-0.4390966030283D+02-0.4382685986996D+02-0.4374338380636D+02-0.4365922882888D+02 +-0.4357439167239D+02-0.4348886909331D+02-0.4340265787340D+02-0.4331575482384D+02 +-0.4322815678953D+02-0.4313986065369D+02-0.4305086334268D+02-0.4296116183110D+02 +-0.4287075314713D+02-0.4277963437808D+02-0.4268780267613D+02-0.4259525526436D+02 +-0.4250198944278D+02-0.4240800259471D+02-0.4231329219311D+02-0.4221785580702D+02 +-0.4212169110814D+02-0.4202479587724D+02-0.4192716801066D+02-0.4182880552657D+02 +-0.4172970657123D+02-0.4162986942478D+02-0.4152929250699D+02-0.4142797438248D+02 +-0.4132591376546D+02-0.4122310952415D+02-0.4111956068435D+02-0.4101526643252D+02 +-0.4091022611799D+02-0.4080443925436D+02-0.4069790551997D+02-0.4059062475744D+02 +-0.4048259697200D+02-0.4037382232884D+02-0.4026430114924D+02-0.4015403390548D+02 +-0.4004302121449D+02-0.3993126383031D+02-0.3981876263529D+02-0.3970551863000D+02 +-0.3959153292214D+02-0.3947680671418D+02-0.3936134129010D+02-0.3924513800125D+02 +-0.3912819825140D+02-0.3901052348125D+02-0.3889211515259D+02-0.3877297473220D+02 +-0.3865310367583D+02-0.3853250341248D+02-0.3841117532917D+02-0.3828912075654D+02 +-0.3816634095549D+02-0.3804283710513D+02-0.3791861029232D+02-0.3779366150300D+02 +-0.3766799161555D+02-0.3754160139636D+02-0.3741449149782D+02-0.3728666245883D+02 +-0.3715811470790D+02-0.3702884856900D+02-0.3689886427010D+02-0.3676816195438D+02 +-0.3663674169408D+02-0.3650460350690D+02-0.3637174737474D+02-0.3623817326473D+02 +-0.3610388115218D+02-0.3596887104531D+02-0.3583314301154D+02-0.3569669720495D+02 +-0.3555953389464D+02-0.3542165349386D+02-0.3528305658922D+02-0.3514374397011D+02 +-0.3500371665774D+02-0.3486297593358D+02-0.3472152336690D+02-0.3457936084122D+02 +-0.3443649057928D+02-0.3429291516643D+02-0.3414863757211D+02-0.3400366116934D+02 +-0.3385798975190D+02-0.3371162754922D+02-0.3356457923876D+02-0.3341684995570D+02 +-0.3326844530007D+02-0.3311937134098D+02-0.3296963461820D+02-0.3281924214079D+02 +-0.3266820138293D+02-0.3251652027694D+02-0.3236420720350D+02-0.3221127097903D+02 +-0.3205772084042D+02-0.3190356642710D+02-0.3174881776049D+02-0.3159348522098D+02 +-0.3143757952257D+02-0.3128111168511D+02-0.3112409300454D+02-0.3096653502093D+02 +-0.3080844948479D+02-0.3064984832153D+02-0.3049074359439D+02-0.3033114746593D+02 +-0.3017107215833D+02-0.3001052991254D+02-0.2984953294675D+02-0.2968809341400D+02 +-0.2952622335948D+02-0.2936393467762D+02-0.2920123906907D+02-0.2903814799805D+02 +-0.2887467265011D+02-0.2871082389066D+02-0.2854661222446D+02-0.2838204775647D+02 +-0.2821714015409D+02-0.2805189861135D+02-0.2788633181514D+02-0.2772044791378D+02 +-0.2755425448842D+02-0.2738775852723D+02-0.2722096640307D+02-0.2705388385454D+02 +-0.2688651597109D+02-0.2671886718221D+02-0.2655094125117D+02-0.2638274127348D+02 +-0.2621426968047D+02-0.2604552824823D+02-0.2587651811214D+02-0.2570723978730D+02 +-0.2553769319514D+02-0.2536787769632D+02-0.2519779213021D+02-0.2502743486110D+02 +-0.2485680383129D+02-0.2468589662112D+02-0.2451471051601D+02-0.2434324258050D+02 +-0.2417148973924D+02-0.2399944886481D+02-0.2382711687194D+02-0.2365449081810D+02 +-0.2348156800981D+02-0.2330834611404D+02-0.2313482327422D+02-0.2296099822964D+02 +-0.2278687043744D+02-0.2261244019567D+02-0.2243770876615D+02-0.2226267849517D+02 +-0.2208735293014D+02-0.2191173693001D+02-0.2173583676674D+02-0.2155966021537D+02 +-0.2138321662948D+02-0.2120651699903D+02-0.2102957398727D+02-0.2085240194340D+02 +-0.2067501688787D+02-0.2049743646710D+02-0.2031967987514D+02-0.2014176773999D+02 +-0.1996372197331D+02-0.1978556558301D+02-0.1960732244950D+02-0.1942901706755D+02 +-0.1925067425750D+02-0.1907231885074D+02-0.1889397535633D+02-0.1871566761696D+02 +-0.1853741846374D+02-0.1835924938052D+02-0.1818118018868D+02-0.1800322876380D+02 +-0.1782541079491D+02-0.1764773959582D+02-0.1747022597686D+02-0.1729287818264D+02 +-0.1711570189939D+02-0.1693870033244D+02-0.1676187435187D+02-0.1658522270158D+02 +-0.1640874226459D+02-0.1623242837596D+02-0.1605627517269D+02-0.1588027596970D+02 +-0.1570442365062D+02-0.1552871106216D+02-0.1535313140208D+02-0.1517767859145D+02 +-0.1500234762341D+02-0.1482713488228D+02-0.1465203842815D+02-0.1447705824363D+02 +-0.1430219644106D+02-0.1412745742929D+02-0.1395284804054D+02-0.1377837761854D+02 +-0.1360405806987D+02-0.1342990388081D+02-0.1325593210249D+02-0.1308216230731D+02 +-0.1290861651951D+02-0.1273531912305D+02-0.1256229674959D+02-0.1238957814960D+02 +-0.1221719404907D+02-0.1204517699438D+02-0.1187356118783D+02-0.1170238231558D+02 +-0.1153167737042D+02-0.1136148447069D+02-0.1119184267735D+02-0.1102279181034D+02 +-0.1085437226576D+02-0.1068662483495D+02-0.1051959052659D+02-0.1035331039265D+02 +-0.1018782535928D+02-0.1002317606321D+02-0.9859402694342D+01-0.9696544845323D+01 +-0.9534641368482D+01-0.9373730240659D+01-0.9213848436346D+01-0.9055031809511D+01 +-0.8897314984394D+01-0.8740731255549D+01-0.8585312497336D+01-0.8431089083029D+01 +-0.8278089813661D+01-0.8126341856676D+01-0.7975870694439D+01-0.7826700082584D+01 +-0.7678852018171D+01-0.7532346717566D+01-0.7387202603932D+01-0.7243436304187D+01 +-0.7101062655233D+01-0.6960094719270D+01-0.6820543807924D+01-0.6682419514939D+01 +-0.6545729757123D+01-0.6410480823229D+01-0.6276677430423D+01-0.6144322787958D+01 +-0.6013418667669D+01-0.5883965480867D+01-0.5755962361193D+01-0.5629407252975D+01 +-0.5504297004604D+01-0.5380627466436D+01-0.5258393592702D+01-0.5137589546863D+01 +-0.5018208809882D+01-0.4900244290793D+01-0.4783688438971D+01-0.4668533357470D+01 +-0.4554770916754D+01-0.4442392868124D+01-0.4331390956131D+01-0.4221757029192D+01 +-0.4113483147635D+01-0.4006561688322D+01-0.3900985445011D+01-0.3796747723533D+01 +-0.3693842430876D+01-0.3592264157211D+01-0.3492008249906D+01-0.3393070878541D+01 +-0.3295449089976D+01-0.3199140852531D+01-0.3104145088414D+01-0.3010461693592D+01 +-0.2918091544431D+01-0.2827036490592D+01-0.2737299333835D+01-0.2648883792669D+01 +-0.2561794453010D+01-0.2476036705393D+01-0.2391616669610D+01-0.2308541108029D+01 +-0.2226817329318D+01-0.2146453084634D+01-0.2067456458802D+01-0.1989835759339D+01 +-0.1913599406514D+01-0.1838755827812D+01-0.1765313360391D+01-0.1693280165020D+01 +-0.1622664154978D+01-0.1553472943063D+01-0.1485713809518D+01-0.1419393693186D+01 +-0.1354519207570D+01-0.1291096682842D+01-0.1229132234097D+01-0.1168631855453D+01 +-0.1109601538882D+01-0.1052047416050D+01-0.9959759208814D+00-0.9413939701484D+00 +-0.8883091590719D+00-0.8367299687430D+00-0.7866659821253D+00-0.7381281054637D+00 +-0.6911287920896D+00-0.6456822658698D+00-0.6018047418553D+00-0.5595146420441D+00 +-0.5188328045500D+00-0.4797826848498D+00-0.4423905481512D+00-0.4066856522662D+00 +-0.3727004206897D+00-0.3404706058472D+00-0.3100354427093D+00-0.2814377931599D+00 +-0.2547240189175D+00 + 0.0000000000000D+00 + 1012 0.2770741520224D+01 + 0.2150927949039D-04 0.2202124536575D-04 0.2254539478646D-04 0.2308201760180D-04 + 0.2363141055333D-04 0.2419387743865D-04 0.2476972927906D-04 0.2535928449121D-04 + 0.2596286906285D-04 0.2658081673262D-04 0.2721346917432D-04 0.2786117618535D-04 + 0.2852429587973D-04 0.2920319488569D-04 0.2989824854795D-04 0.3060984113473D-04 + 0.3133836604977D-04 0.3208422604934D-04 0.3284783346437D-04 0.3362961042788D-04 + 0.3442998910781D-04 0.3524941194536D-04 0.3608833189898D-04 0.3694721269416D-04 + 0.3782652907911D-04 0.3872676708658D-04 0.3964842430179D-04 0.4059201013679D-04 + 0.4155804611131D-04 0.4254706614023D-04 0.4355961682789D-04 0.4459625776943D-04 + 0.4565756185917D-04 0.4674411560639D-04 0.4785651945856D-04 0.4899538813222D-04 + 0.5016135095172D-04 0.5135505219602D-04 0.5257715145361D-04 0.5382832398596D-04 + 0.5510926109951D-04 0.5642067052648D-04 0.5776327681476D-04 0.5913782172693D-04 + 0.6054506464885D-04 0.6198578300785D-04 0.6346077270088D-04 0.6497084853274D-04 + 0.6651684466474D-04 0.6809961507398D-04 0.6972003402351D-04 0.7137899654355D-04 + 0.7307741892426D-04 0.7481623921999D-04 0.7659641776564D-04 0.7841893770513D-04 + 0.8028480553242D-04 0.8219505164534D-04 0.8415073091254D-04 0.8615292325379D-04 + 0.8820273423416D-04 0.9030129567206D-04 0.9244976626185D-04 0.9464933221109D-04 + 0.9690120789284D-04 0.9920663651351D-04 0.1015668907964D-03 0.1039832736813D-03 + 0.1064571190411D-03 0.1089897924148D-03 0.1115826917580D-03 0.1142372482113D-03 + 0.1169549268870D-03 0.1197372276738D-03 0.1225856860613D-03 0.1255018739831D-03 + 0.1284874006808D-03 0.1315439135877D-03 0.1346730992336D-03 0.1378766841712D-03 + 0.1411564359238D-03 0.1445141639563D-03 0.1479517206680D-03 0.1514710024102D-03 + 0.1550739505263D-03 0.1587625524179D-03 0.1625388426349D-03 0.1664049039925D-03 + 0.1703628687133D-03 0.1744149195974D-03 0.1785632912194D-03 0.1828102711544D-03 + 0.1871582012321D-03 0.1916094788209D-03 0.1961665581427D-03 0.2008319516176D-03 + 0.2056082312418D-03 0.2104980299966D-03 0.2155040432913D-03 0.2206290304405D-03 + 0.2258758161753D-03 0.2312472921908D-03 0.2367464187300D-03 0.2423762262044D-03 + 0.2481398168542D-03 0.2540403664457D-03 0.2600811260106D-03 0.2662654236245D-03 + 0.2725966662290D-03 0.2790783414953D-03 0.2857140197324D-03 0.2925073558401D-03 + 0.2994620913080D-03 0.3065820562611D-03 0.3138711715547D-03 0.3213334509168D-03 + 0.3289730031429D-03 0.3367940343406D-03 0.3448008502286D-03 0.3529978584881D-03 + 0.3613895711713D-03 0.3699806071650D-03 0.3787756947128D-03 0.3877796739964D-03 + 0.3969974997780D-03 0.4064342441040D-03 0.4160950990725D-03 0.4259853796663D-03 + 0.4361105266519D-03 0.4464761095462D-03 0.4570878296540D-03 0.4679515231757D-03 + 0.4790731643881D-03 0.4904588689006D-03 0.5021148969868D-03 0.5140476569946D-03 + 0.5262637088364D-03 0.5387697675611D-03 0.5515727070097D-03 0.5646795635561D-03 + 0.5780975399370D-03 0.5918340091694D-03 0.6058965185620D-03 0.6202927938188D-03 + 0.6350307432396D-03 0.6501184620192D-03 0.6655642366457D-03 0.6813765494038D-03 + 0.6975640829812D-03 0.7141357251847D-03 0.7311005737650D-03 0.7484679413557D-03 + 0.7662473605260D-03 0.7844485889531D-03 0.8030816147148D-03 0.8221566617048D-03 + 0.8416841951763D-03 0.8616749274129D-03 0.8821398235337D-03 0.9030901074324D-03 + 0.9245372678559D-03 0.9464930646236D-03 0.9689695349932D-03 0.9919790001731D-03 + 0.1015534071988D-02 0.1039647659698D-02 0.1064332976981D-02 0.1089603549068D-02 + 0.1115473220057D-02 0.1141956160389D-02 0.1169066874495D-02 0.1196820208634D-02 + 0.1225231358897D-02 0.1254315879409D-02 0.1284089690715D-02 0.1314569088366D-02 + 0.1345770751696D-02 0.1377711752814D-02 0.1410409565795D-02 0.1443882076088D-02 + 0.1478147590144D-02 0.1513224845264D-02 0.1549133019674D-02 0.1585891742841D-02 + 0.1623521106018D-02 0.1662041673040D-02 0.1701474491365D-02 0.1741841103378D-02 + 0.1783163557945D-02 0.1825464422244D-02 0.1868766793867D-02 0.1913094313196D-02 + 0.1958471176071D-02 0.2004922146751D-02 0.2052472571166D-02 0.2101148390486D-02 + 0.2150976154989D-02 0.2201983038264D-02 0.2254196851731D-02 0.2307646059493D-02 + 0.2362359793542D-02 0.2418367869301D-02 0.2475700801533D-02 0.2534389820612D-02 + 0.2594466889165D-02 0.2655964719104D-02 0.2718916789042D-02 0.2783357362106D-02 + 0.2849321504172D-02 0.2916845102501D-02 0.2985964884814D-02 0.3056718438800D-02 + 0.3129144232066D-02 0.3203281632551D-02 0.3279170929405D-02 0.3356853354336D-02 + 0.3436371103460D-02 0.3517767359634D-02 0.3601086315312D-02 0.3686373195913D-02 + 0.3773674283724D-02 0.3863036942351D-02 0.3954509641719D-02 0.4048141983652D-02 + 0.4143984728019D-02 0.4242089819491D-02 0.4342510414893D-02 0.4445300911185D-02 + 0.4550516974067D-02 0.4658215567249D-02 0.4768454982366D-02 0.4881294869584D-02 + 0.4996796268890D-02 0.5115021642093D-02 0.5236034905549D-02 0.5359901463622D-02 + 0.5486688242898D-02 0.5616463727181D-02 0.5749297993262D-02 0.5885262747508D-02 + 0.6024431363262D-02 0.6166878919093D-02 0.6312682237899D-02 0.6461919926891D-02 + 0.6614672418475D-02 0.6771022012045D-02 0.6931052916716D-02 0.7094851295016D-02 + 0.7262505307545D-02 0.7434105158642D-02 0.7609743143066D-02 0.7789513693721D-02 + 0.7973513430440D-02 0.8161841209859D-02 0.8354598176397D-02 0.8551887814376D-02 + 0.8753816001287D-02 0.8960491062250D-02 0.9172023825667D-02 0.9388527680122D-02 + 0.9610118632529D-02 0.9836915367568D-02 0.1006903930843D-01 0.1030661467892D-01 + 0.1054976856688D-01 0.1079863098909D-01 0.1105333495749D-01 0.1131401654696D-01 + 0.1158081496451D-01 0.1185387262003D-01 0.1213333519856D-01 0.1241935173418D-01 + 0.1271207468545D-01 0.1301166001257D-01 0.1331826725616D-01 0.1363205961778D-01 + 0.1395320404221D-01 0.1428187130150D-01 0.1461823608081D-01 0.1496247706623D-01 + 0.1531477703430D-01 0.1567532294367D-01 0.1604430602860D-01 0.1642192189452D-01 + 0.1680837061563D-01 0.1720385683464D-01 0.1760858986456D-01 0.1802278379280D-01 + 0.1844665758734D-01 0.1888043520531D-01 0.1932434570378D-01 0.1977862335297D-01 + 0.2024350775185D-01 0.2071924394615D-01 0.2120608254895D-01 0.2170427986376D-01 + 0.2221409801021D-01 0.2273580505238D-01 0.2326967512987D-01 0.2381598859160D-01 + 0.2437503213237D-01 0.2494709893234D-01 0.2553248879941D-01 0.2613150831454D-01 + 0.2674447098014D-01 0.2737169737147D-01 0.2801351529124D-01 0.2867025992742D-01 + 0.2934227401421D-01 0.3002990799646D-01 0.3073352019732D-01 0.3145347698951D-01 + 0.3219015296988D-01 0.3294393113773D-01 0.3371520307664D-01 0.3450436914006D-01 + 0.3531183864059D-01 0.3613803004319D-01 0.3698337116219D-01 0.3784829936233D-01 + 0.3873326176383D-01 0.3963871545150D-01 0.4056512768813D-01 0.4151297613205D-01 + 0.4248274905905D-01 0.4347494558865D-01 0.4449007591493D-01 0.4552866154180D-01 + 0.4659123552298D-01 0.4767834270657D-01 0.4879053998454D-01 0.4992839654695D-01 + 0.5109249414114D-01 0.5228342733595D-01 0.5350180379101D-01 0.5474824453121D-01 + 0.5602338422639D-01 0.5732787147645D-01 0.5866236910176D-01 0.6002755443915D-01 + 0.6142411964345D-01 0.6285277199472D-01 0.6431423421119D-01 0.6580924476805D-01 + 0.6733855822219D-01 0.6890294554290D-01 0.7050319444864D-01 0.7214010975008D-01 + 0.7381451369925D-01 0.7552724634520D-01 0.7727916589591D-01 0.7907114908690D-01 + 0.8090409155624D-01 0.8277890822643D-01 0.8469653369292D-01 0.8665792261951D-01 + 0.8866405014071D-01 0.9071591227111D-01 0.9281452632182D-01 0.9496093132410D-01 + 0.9715618846031D-01 0.9940138150208D-01 0.1016976172560D+00 0.1040460260169D+00 + 0.1064477620282D+00 0.1089040039508D+00 0.1114159553388D+00 0.1139848451236D+00 + 0.1166119281054D+00 0.1192984854532D+00 0.1220458252122D+00 0.1248552828197D+00 + 0.1277282216288D+00 0.1306660334408D+00 0.1336701390448D+00 0.1367419887670D+00 + 0.1398830630269D+00 0.1430948729031D+00 0.1463789607067D+00 0.1497369005636D+00 + 0.1531702990050D+00 0.1566807955666D+00 0.1602700633964D+00 0.1639398098711D+00 + 0.1676917772207D+00 0.1715277431623D+00 0.1754495215419D+00 0.1794589629856D+00 + 0.1835579555582D+00 0.1877484254317D+00 0.1920323375616D+00 0.1964116963718D+00 + 0.2008885464482D+00 0.2054649732406D+00 0.2101431037732D+00 0.2149251073635D+00 + 0.2198131963488D+00 0.2248096268222D+00 0.2299166993754D+00 0.2351367598503D+00 + 0.2404722000984D+00 0.2459254587480D+00 0.2514990219789D+00 0.2571954243047D+00 + 0.2630172493626D+00 0.2689671307106D+00 0.2750477526311D+00 0.2812618509418D+00 + 0.2876122138134D+00 0.2941016825931D+00 0.3007331526352D+00 0.3075095741362D+00 + 0.3144339529771D+00 0.3215093515700D+00 0.3287388897102D+00 0.3361257454325D+00 + 0.3436731558729D+00 0.3513844181328D+00 0.3592628901485D+00 0.3673119915621D+00 + 0.3755352045968D+00 0.3839360749336D+00 0.3925182125899D+00 0.4012852927993D+00 + 0.4102410568930D+00 0.4193893131804D+00 0.4287339378299D+00 0.4382788757486D+00 + 0.4480281414604D+00 0.4579858199819D+00 0.4681560676951D+00 0.4785431132164D+00 + 0.4891512582614D+00 0.4999848785043D+00 0.5110484244305D+00 0.5223464221834D+00 + 0.5338834744021D+00 0.5456642610510D+00 0.5576935402392D+00 0.5699761490289D+00 + 0.5825170042325D+00 0.5953211031952D+00 0.6083935245653D+00 0.6217394290472D+00 + 0.6353640601390D+00 0.6492727448516D+00 0.6634708944082D+00 0.6779640049238D+00 + 0.6927576580616D+00 0.7078575216668D+00 0.7232693503742D+00 0.7389989861895D+00 + 0.7550523590420D+00 0.7714354873073D+00 0.7881544782973D+00 0.8052155287175D+00 + 0.8226249250876D+00 0.8403890441249D+00 0.8585143530879D+00 0.8770074100784D+00 + 0.8958748642992D+00 0.9151234562658D+00 0.9347600179702D+00 0.9547914729931D+00 + 0.9752248365635D+00 0.9960672155622D+00 0.1017325808468D+01 0.1039007905241D+01 + 0.1061120887144D+01 0.1083672226499D+01 0.1106669486370D+01 0.1130120320176D+01 + 0.1154032471231D+01 0.1178413772204D+01 0.1203272144493D+01 0.1228615597523D+01 + 0.1254452227950D+01 0.1280790218774D+01 0.1307637838359D+01 0.1335003439353D+01 + 0.1362895457506D+01 0.1391322410385D+01 0.1420292895972D+01 0.1449815591159D+01 + 0.1479899250115D+01 0.1510552702537D+01 0.1541784851777D+01 0.1573604672833D+01 + 0.1606021210210D+01 0.1639043575644D+01 0.1672680945677D+01 0.1706942559091D+01 + 0.1741837714186D+01 0.1777375765901D+01 0.1813566122779D+01 0.1850418243757D+01 + 0.1887941634794D+01 0.1926145845317D+01 0.1965040464488D+01 0.2004635117287D+01 + 0.2044939460400D+01 0.2085963177919D+01 0.2127715976829D+01 0.2170207582300D+01 + 0.2213447732763D+01 0.2257446174769D+01 0.2302212657626D+01 0.2347756927812D+01 + 0.2394088723154D+01 0.2441217766767D+01 0.2489153760756D+01 0.2537906379665D+01 + 0.2587485263675D+01 0.2637900011547D+01 0.2689160173295D+01 0.2741275242598D+01 + 0.2794254648931D+01 0.2848107749430D+01 0.2902843820459D+01 0.2958472048904D+01 + 0.3015001523163D+01 0.3072441223848D+01 0.3130800014182D+01 0.3190086630094D+01 + 0.3250309670002D+01 0.3311477584285D+01 0.3373598664440D+01 0.3436681031917D+01 + 0.3500732626634D+01 0.3565761195166D+01 0.3631774278604D+01 0.3698779200090D+01 + 0.3766783052007D+01 0.3835792682854D+01 0.3905814683769D+01 0.3976855374728D+01 + 0.4048920790399D+01 0.4122016665671D+01 0.4196148420834D+01 0.4271321146438D+01 + 0.4347539587809D+01 0.4424808129241D+01 0.4503130777854D+01 0.4582511147131D+01 + 0.4662952440136D+01 0.4744457432406D+01 0.4827028454547D+01 0.4910667374509D+01 + 0.4995375579573D+01 0.5081153958042D+01 0.5168002880655D+01 0.5255922181721D+01 + 0.5344911139992D+01 0.5434968459290D+01 0.5526092248881D+01 0.5618280003639D+01 + 0.5711528583982D+01 0.5805834195616D+01 0.5901192369103D+01 0.5997597939257D+01 + 0.6095045024395D+01 0.6193527005472D+01 0.6293036505099D+01 0.6393565366487D+01 + 0.6495104632331D+01 0.6597644523660D+01 0.6701174418681D+01 0.6805682831645D+01 + 0.6911157391760D+01 0.7017584822191D+01 0.7124950919171D+01 0.7233240531258D+01 + 0.7342437538781D+01 0.7452524833500D+01 0.7563484298530D+01 0.7675296788562D+01 + 0.7787942110430D+01 0.7901399004058D+01 0.8015645123842D+01 0.8130657020509D+01 + 0.8246410123503D+01 0.8362878723950D+01 0.8480035958250D+01 0.8597853792358D+01 + 0.8716303006799D+01 0.8835353182487D+01 0.8954972687391D+01 0.9075128664130D+01 + 0.9195787018538D+01 0.9316912409273D+01 0.9438468238543D+01 0.9560416644000D+01 + 0.9682718491880D+01 0.9805333371460D+01 0.9928219590896D+01 0.1005133417453D+02 + 0.1017463286171D+02 0.1029807010722D+02 0.1042159908344D+02 0.1054517168417D+02 + 0.1066873853037D+02 0.1079224897780D+02 0.1091565112659D+02 0.1103889183301D+02 + 0.1116191672323D+02 0.1128467020944D+02 0.1140709550823D+02 0.1152913466133D+02 + 0.1165072855885D+02 0.1177181696506D+02 0.1189233854680D+02 0.1201223090454D+02 + 0.1213143060625D+02 0.1224987322407D+02 0.1236749337400D+02 0.1248422475837D+02 + 0.1260000021157D+02 0.1271475174875D+02 0.1282841061773D+02 0.1294090735413D+02 + 0.1305217183979D+02 0.1316213336451D+02 0.1327072069111D+02 0.1337786212400D+02 + 0.1348348558110D+02 0.1358751866928D+02 0.1368988876325D+02 0.1379052308804D+02 + 0.1388934880491D+02 0.1398629310084D+02 0.1408128328150D+02 0.1417424686776D+02 + 0.1426511169568D+02 0.1435380601989D+02 0.1444025862047D+02 0.1452439891313D+02 + 0.1460615706273D+02 0.1468546410000D+02 0.1476225204147D+02 0.1483645401237D+02 + 0.1490800437259D+02 0.1497683884540D+02 0.1504289464893D+02 0.1510611063019D+02 + 0.1516642740155D+02 0.1522378747941D+02 0.1527813542502D+02 0.1532941798703D+02 + 0.1537758424592D+02 0.1542258575964D+02 0.1546437671057D+02 0.1550291405346D+02 + 0.1553815766392D+02 0.1557007048740D+02 0.1559861868825D+02 0.1562377179849D+02 + 0.1564550286611D+02 0.1566378860245D+02 0.1567860952827D+02 0.1568995011828D+02 + 0.1569779894358D+02 0.1570214881171D+02 0.1570299690387D+02 0.1570034490889D+02 + 0.1569419915342D+02 0.1568457072811D+02 0.1567147560898D+02 0.1565493477391D+02 + 0.1563497431333D+02 0.1561162553504D+02 0.1558492506233D+02 0.1555491492507D+02 + 0.1552164264320D+02 0.1548516130217D+02 0.1544552961962D+02 0.1540281200312D+02 + 0.1535707859803D+02 0.1530840532536D+02 0.1525687390884D+02 0.1520257189079D+02 + 0.1514559263632D+02 0.1508603532531D+02 0.1502400493172D+02 0.1495961218971D+02 + 0.1489297354623D+02 0.1482421109950D+02 0.1475345252306D+02 0.1468083097499D+02 + 0.1460648499184D+02 0.1453055836709D+02 0.1445320001360D+02 0.1437456381003D+02 + 0.1429480843075D+02 0.1421409715909D+02 0.1413259768392D+02 0.1405048187912D+02 + 0.1396792556614D+02 0.1388510825940D+02 0.1380221289467D+02 0.1371942554036D+02 + 0.1363693509198D+02 0.1355493294972D+02 0.1347361267958D+02 0.1339316965818D+02 + 0.1331380070165D+02 0.1323570367897D+02 0.1315907711016D+02 0.1308411975004D+02 + 0.1301103015787D+02 0.1294000625373D+02 0.1287124486230D+02 0.1280494124477D+02 + 0.1274128861984D+02 0.1268047767460D+02 0.1262269606643D+02 0.1256812791682D+02 + 0.1251695329838D+02 0.1246934771604D+02 0.1242548158392D+02 0.1238551969900D+02 + 0.1234962071295D+02 0.1231793660373D+02 0.1229061214824D+02 0.1226778439767D+02 + 0.1224958215706D+02 0.1223612547078D+02 0.1222752511553D+02 0.1222388210258D+02 + 0.1222528719100D+02 0.1223182041366D+02 0.1224355061775D+02 0.1226053502171D+02 + 0.1228281879023D+02 0.1231043462935D+02 0.1234340240339D+02 0.1238172877543D+02 + 0.1242540687338D+02 0.1247441598324D+02 0.1252872127141D+02 0.1258827353770D+02 + 0.1265300900087D+02 0.1272284911822D+02 0.1279770044081D+02 0.1287745450601D+02 + 0.1296198776857D+02 0.1305116157186D+02 0.1314482216032D+02 0.1324280073454D+02 + 0.1334491354991D+02 0.1345096205988D+02 0.1356073310471D+02 0.1367399914649D+02 + 0.1379051855093D+02 0.1391003591655D+02 0.1403228245150D+02 0.1415697639825D+02 + 0.1428382350615D+02 0.1441251755180D+02 0.1454274090682D+02 0.1467416515265D+02 + 0.1480645174180D+02 0.1493925270450D+02 0.1507221140012D+02 0.1520496331175D+02 + 0.1533713688305D+02 0.1546835439544D+02 0.1559823288411D+02 0.1572638509088D+02 + 0.1585242045188D+02 0.1597594611769D+02 0.1609656800349D+02 0.1621389186673D+02 + 0.1632752440935D+02 0.1643707440175D+02 0.1654215382521D+02 0.1664237902974D+02 + 0.1673737190368D+02 0.1682676105166D+02 0.1691018297723D+02 0.1698728326633D+02 + 0.1705771776761D+02 0.1712115376582D+02 0.1717727114395D+02 0.1722576353007D+02 + 0.1726633942470D+02 0.1729872330429D+02 0.1732265669667D+02 0.1733789922408D+02 + 0.1734422960952D+02 0.1734144664198D+02 0.1732937009656D+02 0.1730784160492D+02 + 0.1727672547225D+02 0.1723590943644D+02 0.1718530536559D+02 0.1712484989008D+02 + 0.1705450496536D+02 0.1697425836203D+02 0.1688412407975D+02 0.1678414268193D+02 + 0.1667438154808D+02 0.1655493504124D+02 0.1642592458792D+02 0.1628749866833D+02 + 0.1613983271513D+02 0.1598312891883D+02 0.1581761593876D+02 0.1564354851859D+02 + 0.1546120700566D+02 0.1527089677411D+02 0.1507294755170D+02 0.1486771265109D+02 + 0.1465556810624D+02 0.1443691171558D+02 0.1421216199343D+02 0.1398175703206D+02 + 0.1374615327696D+02 0.1350582421831D+02 0.1326125900230D+02 0.1301296096613D+02 + 0.1276144610103D+02 0.1250724144826D+02 0.1225088343315D+02 0.1199291614280D+02 + 0.1173388955369D+02 0.1147435771520D+02 0.1121487689618D+02 0.1095600370143D+02 + 0.1069829316549D+02 0.1044229683153D+02 0.1018856082317D+02 0.9937623917321D+01 + 0.9690015626445D+01 0.9446254298643D+01 0.9206845244038D+01 0.8972278896087D+01 + 0.8743029016360D+01 0.8519550951297D+01 0.8302279949355D+01 0.8091629546790D+01 + 0.7887990030116D+01 0.7691726983014D+01 0.7503179925129D+01 0.7322661049902D+01 + 0.7150454068046D+01 0.6986813162918D+01 0.6831962063451D+01 0.6686093239819D+01 + 0.6549367226364D+01 0.6421912075717D+01 0.6303822947394D+01 0.6195161833447D+01 + 0.6095957423078D+01 0.6006205107394D+01 0.5925867124779D+01 0.5854872846611D+01 + 0.5793119202371D+01 0.5740471242429D+01 0.5696762836121D+01 0.5661797502031D+01 + 0.5635349366701D+01 0.5617164247353D+01 0.5606960853570D+01 0.5604432102259D+01 + 0.5609246539649D+01 0.5621049863505D+01 0.5639466538232D+01 0.5664101495024D+01 + 0.5694541908766D+01 0.5730359042993D+01 0.5771110153784D+01 0.5816340443192D+01 + 0.5865585052475D+01 0.5918371085180D+01 0.5974219649957D+01 0.6032647912832D+01 + 0.6093171148637D+01 0.6155304781260D+01 0.6218566402475D+01 0.6282477759234D+01 + 0.6346566699475D+01 0.6410369066815D+01 0.6473430534781D+01 0.6535308371644D+01 + 0.6595573127395D+01 0.6653810234872D+01 0.6709621517670D+01 0.6762626598041D+01 + 0.6812464198680D+01 0.6858793332986D+01 0.6901294379138D+01 0.6939670034070D+01 + 0.6973646144233D+01 0.7002972410830D+01 0.7027422967990D+01 0.7046796833200D+01 + 0.7060918230061D+01 0.7069636784259D+01 0.7072827594374D+01 0.7070391179926D+01 + 0.7062253309715D+01 0.7048364714231D+01 0.7028700686483D+01 0.7003260576238D+01 + 0.6972067183121D+01 0.6935166054562D+01 0.6892624694966D+01 0.6844531692843D+01 + 0.6790995772965D+01 0.6732144780827D+01 0.6668124606899D+01 0.6599098058289D+01 + 0.6525243685473D+01 0.6446754571799D+01 0.6363837093418D+01 0.6276709657188D+01 + 0.6185601423998D+01 0.6090751024726D+01 0.5992405275866D+01 0.5890817901556D+01 + 0.5786248268476D+01 0.5678960139726D+01 0.5569220453475D+01 0.5457298131760D+01 + 0.5343462924443D+01 0.5227984292928D+01 0.5111130337809D+01 0.4993166774192D+01 + 0.4874355958030D+01 0.4754955966341D+01 0.4635219733799D+01 0.4515394247714D+01 + 0.4395719803061D+01 0.4276429318764D+01 0.4157747716089D+01 0.4039891359594D+01 + 0.3923067560758D+01 0.3807474144035D+01 0.3693299074769D+01 0.3580720148118D+01 + 0.3469904737816D+01 0.3361009603367D+01 0.3254180754011D+01 0.3149553367571D+01 + 0.3047251762116D+01 0.2947389418162D+01 0.2850069049006D+01 0.2755382716614D+01 + 0.2663411990420D+01 0.2574228146230D+01 0.2487892402405D+01 0.2404456190400D+01 + 0.2323961456713D+01 0.2246440993268D+01 0.2171918793250D+01 0.2100410429420D+01 + 0.2031923451965D+01 0.1966457802972D+01 0.1904006244666D+01 0.1844554798640D+01 + 0.1788083193345D+01 0.1734565317240D+01 0.1683969675070D+01 0.1636259844862D+01 + 0.1591394933364D+01 0.1549330027746D+01 0.1510016641546D+01 0.1473403152964D+01 + 0.1439435233770D+01 0.1408056267219D+01 0.1379207753531D+01 0.1352829701650D+01 + 0.1328861006133D+01 0.1307239808175D+01 0.1287903839946D+01 0.1270790751526D+01 + 0.1255838419882D+01 0.1242985239474D+01 0.1232170394175D+01 0.1223334110328D+01 + 0.1216417890857D+01 0.1211364730456D+01 0.1208119311934D+01 0.1206628183910D+01 + 0.1206839920052D+01 0.1208705260142D+01 0.1212177233248D+01 0.1217211263310D+01 + 0.1223765257423D+01 0.1231799677111D+01 0.1241277592815D+01 0.1252164721788D+01 + 0.1264429449524D+01 0.1278042834732D+01 0.1292978597814D+01 0.1309213092627D+01 + 0.1326725261233D+01 0.1345496571135D+01 0.1365510934358D+01 0.1386754607532D+01 + 0.1409215426363D+01 0.1433003097507D+01 0.1458223277591D+01 0.1484860699421D+01 + 0.1512902583279D+01 0.1542338542721D+01 0.1573160498496D+01 0.1605362600812D+01 + 0.1638941160170D+01 0.1673894586973D+01 0.1710223340083D+01 0.1747929884514D+01 + 7 1012 + 1 0 -1 -511.89150 + 2 0 -1 -58.80097 + 2 1 1 -50.61290 + 2 1 -2 -49.69692 + 3 0 -1 -5.52718 + 3 1 1 -3.14309 + 3 1 -2 -3.03034 + 0.2123373461549D-04 0.2173914995400D-04 0.2225659296114D-04 0.2278634977738D-04 + 0.2332871334728D-04 0.2388398358121D-04 0.2445246752083D-04 0.2503447950857D-04 + 0.2563034136106D-04 0.2624038254674D-04 0.2686494036763D-04 0.2750436014548D-04 + 0.2815899541226D-04 0.2882920810522D-04 0.2951536876657D-04 0.3021785674791D-04 + 0.3093706041946D-04 0.3167337738432D-04 0.3242721469777D-04 0.3319898909177D-04 + 0.3398912720483D-04 0.3479806581728D-04 0.3562625209215D-04 0.3647414382175D-04 + 0.3734220968012D-04 0.3823092948144D-04 0.3914079444457D-04 0.4007230746391D-04 + 0.4102598338660D-04 0.4200234929636D-04 0.4300194480406D-04 0.4402532234512D-04 + 0.4507304748402D-04 0.4614569922601D-04 0.4724387033618D-04 0.4836816766617D-04 + 0.4951921248852D-04 0.5069764083903D-04 0.5190410386721D-04 0.5313926819498D-04 + 0.5440381628400D-04 0.5569844681152D-04 0.5702387505533D-04 0.5838083328767D-04 + 0.5977007117859D-04 0.6119235620880D-04 0.6264847409228D-04 0.6413922920902D-04 + 0.6566544504782D-04 0.6722796465978D-04 0.6882765112238D-04 0.7046538801462D-04 + 0.7214207990339D-04 0.7385865284136D-04 0.7561605487667D-04 0.7741525657465D-04 + 0.7925725155197D-04 0.8114305702331D-04 0.8307371436110D-04 0.8505028966841D-04 + 0.8707387436545D-04 0.8914558578994D-04 0.9126656781168D-04 0.9343799146165D-04 + 0.9566105557602D-04 0.9793698745538D-04 0.1002670435396D-03 0.1026525100984D-03 + 0.1050947039390D-03 0.1075949731294D-03 0.1101546977394D-03 0.1127752905997D-03 + 0.1154581980775D-03 0.1182049008719D-03 0.1210169148270D-03 0.1238957917652D-03 + 0.1268431203390D-03 0.1298605269045D-03 0.1329496764137D-03 0.1361122733297D-03 + 0.1393500625619D-03 0.1426648304247D-03 0.1460584056178D-03 0.1495326602303D-03 + 0.1530895107681D-03 0.1567309192056D-03 0.1604588940629D-03 0.1642754915072D-03 + 0.1681828164816D-03 0.1721830238593D-03 0.1762783196258D-03 0.1804709620887D-03 + 0.1847632631165D-03 0.1891575894056D-03 0.1936563637785D-03 0.1982620665115D-03 + 0.2029772366947D-03 0.2078044736231D-03 0.2127464382210D-03 0.2178058545005D-03 + 0.2229855110531D-03 0.2282882625778D-03 0.2337170314442D-03 0.2392748092933D-03 + 0.2449646586752D-03 0.2507897147258D-03 0.2567531868833D-03 0.2628583606444D-03 + 0.2691085993625D-03 0.2755073460880D-03 0.2820581254518D-03 0.2887645455935D-03 + 0.2956303001344D-03 0.3026591701977D-03 0.3098550264756D-03 0.3172218313454D-03 + 0.3247636410353D-03 0.3324846078408D-03 0.3403889823939D-03 0.3484811159850D-03 + 0.3567654629401D-03 0.3652465830528D-03 0.3739291440747D-03 0.3828179242637D-03 + 0.3919178149916D-03 0.4012338234146D-03 0.4107710752045D-03 0.4205348173457D-03 + 0.4305304209971D-03 0.4407633844209D-03 0.4512393359813D-03 0.4619640372121D-03 + 0.4729433859575D-03 0.4841834195856D-03 0.4956903182785D-03 0.5074704083979D-03 + 0.5195301659314D-03 0.5318762200182D-03 0.5445153565579D-03 0.5574545219044D-03 + 0.5707008266453D-03 0.5842615494708D-03 0.5981441411326D-03 0.6123562284955D-03 + 0.6269056186847D-03 0.6418003033287D-03 0.6570484629028D-03 0.6726584711734D-03 + 0.6886388997468D-03 0.7049985227240D-03 0.7217463214642D-03 0.7388914894603D-03 + 0.7564434373277D-03 0.7744117979097D-03 0.7928064315026D-03 0.8116374312024D-03 + 0.8309151283763D-03 0.8506500982622D-03 0.8708531656989D-03 0.8915354109894D-03 + 0.9127081759015D-03 0.9343830698083D-03 0.9565719759715D-03 0.9792870579714D-03 + 0.1002540766287D-02 0.1026345845027D-02 0.1050715338824D-02 0.1075662599879D-02 + 0.1101201295181D-02 0.1127345413883D-02 0.1154109274864D-02 0.1181507534450D-02 + 0.1209555194328D-02 0.1238267609637D-02 0.1267660497252D-02 0.1297749944251D-02 + 0.1328552416593D-02 0.1360084767981D-02 0.1392364248945D-02 0.1425408516127D-02 + 0.1459235641785D-02 0.1493864123514D-02 0.1529312894196D-02 0.1565601332181D-02 + 0.1602749271697D-02 0.1640777013510D-02 0.1679705335822D-02 0.1719555505429D-02 + 0.1760349289133D-02 0.1802108965417D-02 0.1844857336390D-02 0.1888617740010D-02 + 0.1933414062589D-02 0.1979270751585D-02 0.2026212828687D-02 0.2074265903209D-02 + 0.2123456185786D-02 0.2173810502385D-02 0.2225356308647D-02 0.2278121704551D-02 + 0.2332135449417D-02 0.2387426977257D-02 0.2444026412476D-02 0.2501964585936D-02 + 0.2561273051389D-02 0.2621984102285D-02 0.2684130788965D-02 0.2747746936258D-02 + 0.2812867161465D-02 0.2879526892772D-02 0.2947762388071D-02 0.3017610754222D-02 + 0.3089109966753D-02 0.3162298890003D-02 0.3237217297741D-02 0.3313905894238D-02 + 0.3392406335837D-02 0.3472761253004D-02 0.3555014272883D-02 0.3639210042377D-02 + 0.3725394251736D-02 0.3813613658698D-02 0.3903916113173D-02 0.3996350582488D-02 + 0.4090967177209D-02 0.4187817177547D-02 0.4286953060364D-02 0.4388428526794D-02 + 0.4492298530489D-02 0.4598619306504D-02 0.4707448400838D-02 0.4818844700646D-02 + 0.4932868465127D-02 0.5049581357120D-02 0.5169046475404D-02 0.5291328387739D-02 + 0.5416493164639D-02 0.5544608413917D-02 0.5675743316002D-02 0.5809968660057D-02 + 0.5947356880904D-02 0.6087982096781D-02 0.6231920147946D-02 0.6379248636155D-02 + 0.6530046965011D-02 0.6684396381234D-02 0.6842380016839D-02 0.7004082932273D-02 + 0.7169592160503D-02 0.7338996752102D-02 0.7512387821327D-02 0.7689858593235D-02 + 0.7871504451850D-02 0.8057422989391D-02 0.8247714056607D-02 0.8442479814225D-02 + 0.8641824785540D-02 0.8845855910175D-02 0.9054682599025D-02 0.9268416790430D-02 + 0.9487173007575D-02 0.9711068417172D-02 0.9940222889430D-02 0.1017475905935D-01 + 0.1041480238936D-01 0.1066048123337D-01 0.1091192690214D-01 0.1116927373022D-01 + 0.1143265914425D-01 0.1170222373276D-01 0.1197811131760D-01 0.1226046902681D-01 + 0.1254944736912D-01 0.1284520031015D-01 0.1314788535014D-01 0.1345766360348D-01 + 0.1377469987990D-01 0.1409916276750D-01 0.1443122471744D-01 0.1477106213063D-01 + 0.1511885544620D-01 0.1547478923187D-01 0.1583905227632D-01 0.1621183768351D-01 + 0.1659334296907D-01 0.1698377015868D-01 0.1738332588869D-01 0.1779222150874D-01 + 0.1821067318670D-01 0.1863890201578D-01 0.1907713412394D-01 0.1952560078568D-01 + 0.1998453853608D-01 0.2045418928739D-01 0.2093480044805D-01 0.2142662504416D-01 + 0.2192992184360D-01 0.2244495548276D-01 0.2297199659585D-01 0.2351132194704D-01 + 0.2406321456527D-01 0.2462796388197D-01 0.2520586587156D-01 0.2579722319499D-01 + 0.2640234534617D-01 0.2702154880148D-01 0.2765515717239D-01 0.2830350136121D-01 + 0.2896691972007D-01 0.2964575821319D-01 0.3034037058244D-01 0.3105111851634D-01 + 0.3177837182251D-01 0.3252250860359D-01 0.3328391543683D-01 0.3406298755727D-01 + 0.3486012904465D-01 0.3567575301409D-01 0.3651028181063D-01 0.3736414720771D-01 + 0.3823779060956D-01 0.3913166325773D-01 0.4004622644169D-01 0.4098195171364D-01 + 0.4193932110758D-01 0.4291882736274D-01 0.4392097415138D-01 0.4494627631115D-01 + 0.4599526008193D-01 0.4706846334735D-01 0.4816643588104D-01 0.4928973959763D-01 + 0.5043894880863D-01 0.5161465048329D-01 0.5281744451445D-01 0.5404794398948D-01 + 0.5530677546647D-01 0.5659457925562D-01 0.5791200970601D-01 0.5925973549779D-01 + 0.6063843993988D-01 0.6204882127328D-01 0.6349159298001D-01 0.6496748409788D-01 + 0.6647723954103D-01 0.6802162042643D-01 0.6960140440641D-01 0.7121738600725D-01 + 0.7287037697395D-01 0.7456120662128D-01 0.7629072219118D-01 0.7805978921657D-01 + 0.7986929189166D-01 0.8172013344892D-01 0.8361323654265D-01 0.8554954363940D-01 + 0.8753001741513D-01 0.8955564115940D-01 0.9162741918654D-01 0.9374637725383D-01 + 0.9591356298698D-01 0.9813004631275D-01 0.1003969198990D+00 0.1027152996019D+00 + 0.1050863249211D+00 0.1075111594618D+00 0.1099909914051D+00 0.1125270339855D+00 + 0.1151205259766D+00 0.1177727321842D+00 0.1204849439476D+00 0.1232584796489D+00 + 0.1260946852301D+00 0.1289949347182D+00 0.1319606307590D+00 0.1349932051583D+00 + 0.1380941194317D+00 0.1412648653632D+00 0.1445069655708D+00 0.1478219740820D+00 + 0.1512114769165D+00 0.1546770926778D+00 0.1582204731535D+00 0.1618433039236D+00 + 0.1655473049771D+00 0.1693342313383D+00 0.1732058737000D+00 0.1771640590662D+00 + 0.1812106514032D+00 0.1853475522988D+00 0.1895767016304D+00 0.1939000782413D+00 + 0.1983197006251D+00 0.2028376276193D+00 0.2074559591063D+00 0.2121768367234D+00 + 0.2170024445803D+00 0.2219350099852D+00 0.2269768041788D+00 0.2321301430764D+00 + 0.2373973880172D+00 0.2427809465221D+00 0.2482832730585D+00 0.2539068698131D+00 + 0.2596542874715D+00 0.2655281260047D+00 0.2715310354636D+00 0.2776657167793D+00 + 0.2839349225700D+00 0.2903414579550D+00 0.2968881813739D+00 0.3035780054119D+00 + 0.3104138976312D+00 0.3173988814070D+00 0.3245360367687D+00 0.3318285012460D+00 + 0.3392794707188D+00 0.3468922002717D+00 0.3546700050516D+00 0.3626162611285D+00 + 0.3707344063591D+00 0.3790279412529D+00 0.3875004298396D+00 0.3961555005386D+00 + 0.4049968470283D+00 0.4140282291162D+00 0.4232534736091D+00 0.4326764751811D+00 + 0.4423011972414D+00 0.4521316727988D+00 0.4621720053237D+00 0.4724263696067D+00 + 0.4828990126121D+00 0.4935942543268D+00 0.5045164886027D+00 0.5156701839924D+00 + 0.5270598845772D+00 0.5386902107861D+00 0.5505658602051D+00 0.5626916083760D+00 + 0.5750723095830D+00 0.5877128976270D+00 0.6006183865849D+00 0.6137938715547D+00 + 0.6272445293836D+00 0.6409756193782D+00 0.6549924839961D+00 0.6693005495166D+00 + 0.6839053266899D+00 0.6988124113627D+00 0.7140274850788D+00 0.7295563156538D+00 + 0.7454047577210D+00 0.7615787532478D+00 0.7780843320207D+00 0.7949276120969D+00 + 0.8121148002200D+00 0.8296521921997D+00 0.8475461732513D+00 0.8658032182945D+00 + 0.8844298922086D+00 0.9034328500427D+00 0.9228188371772D+00 0.9425946894360D+00 + 0.9627673331456D+00 0.9833437851400D+00 0.1004331152707D+01 0.1025736633476D+01 + 0.1047567515241D+01 0.1069831175720D+01 0.1092535082243D+01 0.1115686791375D+01 + 0.1139293948457D+01 0.1163364287075D+01 0.1187905628445D+01 0.1212925880722D+01 + 0.1238433038208D+01 0.1264435180485D+01 0.1290940471443D+01 0.1317957158220D+01 + 0.1345493570030D+01 0.1373558116898D+01 0.1402159288280D+01 0.1431305651569D+01 + 0.1461005850494D+01 0.1491268603389D+01 0.1522102701342D+01 0.1553517006218D+01 + 0.1585520448546D+01 0.1618122025271D+01 0.1651330797361D+01 0.1685155887276D+01 + 0.1719606476280D+01 0.1754691801602D+01 0.1790421153434D+01 0.1826803871767D+01 + 0.1863849343063D+01 0.1901566996742D+01 0.1939966301501D+01 0.1979056761446D+01 + 0.2018847912032D+01 0.2059349315815D+01 0.2100570557999D+01 0.2142521241790D+01 + 0.2185210983528D+01 0.2228649407614D+01 0.2272846141215D+01 0.2317810808747D+01 + 0.2363553026124D+01 0.2410082394775D+01 0.2457408495423D+01 0.2505540881617D+01 + 0.2554489073015D+01 0.2604262548407D+01 0.2654870738488D+01 0.2706323018355D+01 + 0.2758628699743D+01 0.2811797022979D+01 0.2865837148659D+01 0.2920758149043D+01 + 0.2976568999160D+01 0.3033278567615D+01 0.3090895607108D+01 0.3149428744640D+01 + 0.3208886471423D+01 0.3269277132479D+01 0.3330608915918D+01 0.3392889841912D+01 + 0.3456127751341D+01 0.3520330294118D+01 0.3585504917195D+01 0.3651658852234D+01 + 0.3718799102956D+01 0.3786932432154D+01 0.3856065348377D+01 0.3926204092282D+01 + 0.3997354622651D+01 0.4069522602076D+01 0.4142713382310D+01 0.4216931989288D+01 + 0.4292183107814D+01 0.4368471065927D+01 0.4445799818928D+01 0.4524172933100D+01 + 0.4603593569097D+01 0.4684064465021D+01 0.4765587919192D+01 0.4848165772611D+01 + 0.4931799391130D+01 0.5016489647323D+01 0.5102236902085D+01 0.5189040985952D+01 + 0.5276901180158D+01 0.5365816197444D+01 0.5455784162617D+01 0.5546802592894D+01 + 0.5638868378017D+01 0.5731977760181D+01 0.5826126313769D+01 0.5921308924927D+01 + 0.6017519770983D+01 0.6114752299744D+01 0.6212999208681D+01 0.6312252424025D+01 + 0.6412503079799D+01 0.6513741496818D+01 0.6615957161666D+01 0.6719138705689D+01 + 0.6823273884037D+01 0.6928349554769D+01 0.7034351658067D+01 0.7141265195588D+01 + 0.7249074209985D+01 0.7357761764637D+01 0.7467309923627D+01 0.7577699732003D+01 + 0.7688911196366D+01 0.7800923265826D+01 0.7913713813378D+01 0.8027259617727D+01 + 0.8141536345630D+01 0.8256518534789D+01 0.8372179577355D+01 0.8488491704090D+01 + 0.8605425969248D+01 0.8722952236222D+01 0.8841039164025D+01 0.8959654194655D+01 + 0.9078763541413D+01 0.9198332178230D+01 0.9318323830066D+01 0.9438700964464D+01 + 0.9559424784293D+01 0.9680455221780D+01 0.9801750933887D+01 0.9923269299099D+01 + 0.1004496641570D+02 0.1016679710163D+02 0.1028871489593D+02 0.1041067206198D+02 + 0.1053261959239D+02 0.1065450721594D+02 0.1077628340626D+02 0.1089789539267D+02 + 0.1101928917306D+02 0.1114040952889D+02 0.1126120004259D+02 0.1138160311709D+02 + 0.1150155999788D+02 0.1162101079752D+02 0.1173989452270D+02 0.1185814910389D+02 + 0.1197571142774D+02 0.1209251737221D+02 0.1220850184455D+02 0.1232359882222D+02 + 0.1243774139668D+02 0.1255086182033D+02 0.1266289155645D+02 0.1277376133233D+02 + 0.1288340119558D+02 0.1299174057364D+02 0.1309870833671D+02 0.1320423286383D+02 + 0.1330824211245D+02 0.1341066369131D+02 0.1351142493681D+02 0.1361045299271D+02 + 0.1370767489335D+02 0.1380301765027D+02 0.1389640834224D+02 0.1398777420882D+02 + 0.1407704274716D+02 0.1416414181234D+02 0.1424899972093D+02 0.1433154535791D+02 + 0.1441170828680D+02 0.1448941886294D+02 0.1456460834990D+02 0.1463720903887D+02 + 0.1470715437095D+02 0.1477437906225D+02 0.1483881923166D+02 0.1490041253114D+02 + 0.1495909827839D+02 0.1501481759178D+02 0.1506751352732D+02 0.1511713121747D+02 + 0.1516361801165D+02 0.1520692361818D+02 0.1524700024742D+02 0.1528380275595D+02 + 0.1531728879140D+02 0.1534741893776D+02 0.1537415686084D+02 0.1539746945363D+02 + 0.1541732698111D+02 0.1543370322439D+02 0.1544657562364D+02 0.1545592541956D+02 + 0.1546173779302D+02 0.1546400200242D+02 0.1546271151843D+02 0.1545786415570D+02 + 0.1544946220111D+02 0.1543751253809D+02 0.1542202676661D+02 0.1540302131844D+02 + 0.1538051756708D+02 0.1535454193202D+02 0.1532512597682D+02 0.1529230650045D+02 + 0.1525612562157D+02 0.1521663085508D+02 0.1517387518057D+02 0.1512791710213D+02 + 0.1507882069905D+02 0.1502665566690D+02 0.1497149734847D+02 0.1491342675424D+02 + 0.1485253057170D+02 0.1478890116319D+02 0.1472263655178D+02 0.1465384039476D+02 + 0.1458262194423D+02 0.1450909599456D+02 0.1443338281613D+02 0.1435560807511D+02 + 0.1427590273888D+02 0.1419440296685D+02 0.1411124998625D+02 0.1402658995277D+02 + 0.1394057379573D+02 0.1385335704764D+02 0.1376509965795D+02 0.1367596579089D+02 + 0.1358612360737D+02 0.1349574503081D+02 0.1340500549696D+02 0.1331408368786D+02 + 0.1322316124986D+02 0.1313242249599D+02 0.1304205409292D+02 0.1295224473262D+02 + 0.1286318478926D+02 0.1277506596148D+02 0.1268808090072D+02 0.1260242282594D+02 + 0.1251828512526D+02 0.1243586094535D+02 0.1235534276899D+02 0.1227692198172D+02 + 0.1220078842830D+02 0.1212712995982D+02 0.1205613197253D+02 0.1198797693913D+02 + 0.1192284393379D+02 0.1186090815186D+02 0.1180234042546D+02 0.1174730673615D+02 + 0.1169596772603D+02 0.1164847820834D+02 0.1160498667924D+02 0.1156563483188D+02 + 0.1153055707436D+02 0.1149988005301D+02 0.1147372218250D+02 0.1145219318434D+02 + 0.1143539363525D+02 0.1142341452711D+02 0.1141633683999D+02 0.1141423112993D+02 + 0.1141715713298D+02 0.1142516338731D+02 0.1143828687474D+02 0.1145655268355D+02 + 0.1147997369390D+02 0.1150855028761D+02 0.1154227008374D+02 0.1158110770138D+02 + 0.1162502455129D+02 0.1167396865756D+02 0.1172787451079D+02 0.1178666295396D+02 + 0.1185024110228D+02 0.1191850229803D+02 0.1199132610159D+02 0.1206857831946D+02 + 0.1215011107019D+02 0.1223576288907D+02 0.1232535887199D+02 0.1241871085933D+02 + 0.1251561765997D+02 0.1261586531600D+02 0.1271922740805D+02 0.1282546540151D+02 + 0.1293432903330D+02 0.1304555673916D+02 0.1315887612096D+02 0.1327400445348D+02 + 0.1339064923005D+02 0.1350850874625D+02 0.1362727272054D+02 0.1374662295087D+02 + 0.1386623400591D+02 0.1398577394943D+02 0.1410490509638D+02 0.1422328479880D+02 + 0.1434056625987D+02 0.1445639937388D+02 0.1457043159027D+02 0.1468230879914D+02 + 0.1479167623614D+02 0.1489817940404D+02 0.1500146500841D+02 0.1510118190471D+02 + 0.1519698205391D+02 0.1528852148379D+02 0.1537546125281D+02 0.1545746841364D+02 + 0.1553421697307D+02 0.1560538884523D+02 0.1567067479483D+02 0.1572977536717D+02 + 0.1578240180176D+02 0.1582827692612D+02 0.1586713602663D+02 0.1589872769311D+02 + 0.1592281463392D+02 0.1593917445849D+02 0.1594760042409D+02 0.1594790214378D+02 + 0.1593990625272D+02 0.1592345702984D+02 0.1589841697221D+02 0.1586466731948D+02 + 0.1582210852585D+02 0.1577066067732D+02 0.1571026385193D+02 0.1564087842120D+02 + 0.1556248529064D+02 0.1547508607802D+02 0.1537870322780D+02 0.1527338006062D+02 + 0.1515918075676D+02 0.1503619027308D+02 0.1490451419267D+02 0.1476427850715D+02 + 0.1461562933169D+02 0.1445873255288D+02 0.1429377341010D+02 0.1412095601137D+02 + 0.1394050278444D+02 0.1375265386499D+02 0.1355766642312D+02 0.1335581393054D+02 + 0.1314738537038D+02 0.1293268439219D+02 0.1271202841511D+02 0.1248574768189D+02 + 0.1225418426740D+02 0.1201769104500D+02 0.1177663061449D+02 0.1153137419578D+02 + 0.1128230049248D+02 0.1102979452961D+02 0.1077424647032D+02 0.1051605041603D+02 + 0.1025560319513D+02 0.9993303145083D+01 0.9729548892983D+01 0.9464738139829D+01 + 0.9199266453606D+01 0.8933526076402D+01 0.8667904750745D+01 0.8402784570301D+01 + 0.8138540859996D+01 0.7875541090527D+01 0.7614143832090D+01 0.7354697751983D+01 + 0.7097540660550D+01 0.6842998609696D+01 0.6591385047920D+01 0.6343000035605D+01 + 0.6098129523858D+01 0.5857044699944D+01 0.5620001401934D+01 0.5387239604814D+01 + 0.5158982979846D+01 0.4935438528573D+01 0.4716796292366D+01 0.4503229137976D+01 + 0.4294892619056D+01 0.4091924913152D+01 0.3894446833193D+01 0.3702561912045D+01 + 0.3516356558237D+01 0.3335900280537D+01 0.3161245978670D+01 0.2992430297065D+01 + 0.2829474038194D+01 0.2672382631762D+01 0.2521146655720D+01 0.2375742404881D+01 + 0.2236132502695D+01 0.2102266551639D+01 0.1974081817541D+01 0.1851503943111D+01 + 0.1734447685940D+01 0.1622817676200D+01 0.1516509189368D+01 0.1415408929331D+01 + 0.1319395817360D+01 0.1228341782531D+01 0.1142112549373D+01 0.1060568418635D+01 + 0.9835650373019D+00 0.9109541541726D+00 0.8425843575459D+00 0.7783017917968D+00 + 0.7179508498817D+00 0.6613748390683D+00 0.6084166174653D+00 0.5589191992012D+00 + 0.5127263263911D+00 0.4696830063190D+00 0.4296360125529D+00 0.3924343490009D+00 + 0.3579296762027D+00 0.3259766994340D+00 0.2964335184742D+00 0.2691619391536D+00 + 0.2440277470488D+00 0.2209009439361D+00 0.1996559478365D+00 0.1801717576938D+00 + 0.1623320839184D+00 0.1460254461990D+00 0.1311452401368D+00 0.1175897743854D+00 + 0.1052622800912D+00 0.9407089451527D-01 0.8392862078550D-01 0.7475326577690D-01 + 0.6646735814128D-01 0.5899804851766D-01 0.5227699394346D-01 0.4624022845899D-01 + 0.4082802185442D-01 0.3598472845105D-01 0.3165862773800D-01 0.2780175860384D-01 + 0.2436974881146D-01 0.2132164126495D-01 0.1861971851162D-01 0.1622932681167D-01 + 0.1411870099424D-01 0.1225879120292D-01 0.1062309251766D-01 0.9187478324824D-02 + 0.7930038194170D-02 0.6830920911119D-02 0.5872183206948D-02 0.5037644628161D-02 + 0.4312748890659D-02 0.3684431974697D-02 0.3140997133459D-02 0.2671996911721D-02 + 0.2268122201696D-02 0.1921098300832D-02 0.1623587881022D-02 0.1369100730387D-02 + 0.1151910087150D-02 0.9669753500508D-03 0.8098709208516D-03 0.6767209113939D-03 + 0.5641394300578D-03 0.4691761498429D-03 0.3892668522563D-03 0.3221886372696D-03 + 0.2660194893607D-03 0.2191018926233D-03 0.1800101936858D-03 0.1475214192933D-03 + 0.1205892654847D-03 0.9832098695562D-04 0.7995692809159D-04 0.6485245095860D-04 + 0.5246202996510D-04 0.4232529769133D-04 0.3405484129524D-04 0.2732556374477D-04 + 0.2186543872353D-04 0.1744750226736D-04 0.1388293789508D-04 0.1101512510421D-04 + 0.8714533541124D-05 0.6874356872787D-05 0.5406791351919D-05 0.4239874261002D-05 + 0.3314806839624D-05 0.2583694952262D-05 0.2007648657315D-05 0.1555189018603D-05 + 0.1200916989437D-05 0.9244050332163D-06 0.7092773630705D-06 0.5424493283134D-06 + 0.4135005904089D-06 0.3141603589352D-06 0.2378861413798D-06 0.1795202409555D-06 + 0.1350106538765D-06 0.1011851095086D-06 0.7556879909866D-07 0.5623788451178D-07 + 0.4170219815814D-07 0.3081166707088D-07 0.2268194336078D-07 0.1663552297805D-07 + 0.1215530542863D-07 0.8848107127806D-08 0.6416106613217D-08 0.4634585104140D-08 + 0.3334643304910D-08 0.2389835688104D-08 0.1705876062949D-08 0.1212741020005D-08 + 0.8586376559590D-09 0.6054146003728D-09 0.4250856698627D-09 0.2972075512731D-09 + 0.2069101606973D-09 0.1434236365115D-09 0.9898160505409D-10 0.6800804519963D-10 + 0.4651712787494D-10 0.3167310042586D-10 0.2146695649341D-10 0.1448079937139D-10 + 0.9722622861678D-11 0.6496070631129D-11 0.4319651023999D-11 0.2858591661735D-11 + 0.1882503214946D-11 0.1233598363270D-11 0.8043412065319D-12 0.5218060130221D-12 + 0.3367856512696D-12 0.2162455335843D-12 0.1381220475631D-12 0.8775552000331D-13 diff --git a/Test/Fe16_non_collinear/v_fe16.4 b/Test/Fe16_non_collinear/v_fe16.4 new file mode 100755 index 000000000..f3c4e967f --- /dev/null +++ b/Test/Fe16_non_collinear/v_fe16.4 @@ -0,0 +1,1542 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Fe. + 2 0.0000000000000D+00 + LSMS: xx z= 26. xvalws= 5.22926 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728400909D+02-0.5199725115555D+02-0.5199721790459D+02-0.5199718425142D+02 +-0.5199715019116D+02-0.5199711571889D+02-0.5199708082964D+02-0.5199704551834D+02 +-0.5199700977990D+02-0.5199697360915D+02-0.5199693700086D+02-0.5199689994973D+02 +-0.5199686245042D+02-0.5199682449748D+02-0.5199678608545D+02-0.5199674720876D+02 +-0.5199670786180D+02-0.5199666803887D+02-0.5199662773421D+02-0.5199658694201D+02 +-0.5199654565635D+02-0.5199650387127D+02-0.5199646158073D+02-0.5199641877860D+02 +-0.5199637545872D+02-0.5199633161480D+02-0.5199628724051D+02-0.5199624232942D+02 +-0.5199619687506D+02-0.5199615087084D+02-0.5199610431012D+02-0.5199605718616D+02 +-0.5199600949214D+02-0.5199596122116D+02-0.5199591236626D+02-0.5199586292036D+02 +-0.5199581287632D+02-0.5199576222688D+02-0.5199571096474D+02-0.5199565908248D+02 +-0.5199560657259D+02-0.5199555342748D+02-0.5199549963947D+02-0.5199544520078D+02 +-0.5199539010352D+02-0.5199533433975D+02-0.5199527790139D+02-0.5199522078028D+02 +-0.5199516296816D+02-0.5199510445666D+02-0.5199504523733D+02-0.5199498530160D+02 +-0.5199492464081D+02-0.5199486324617D+02-0.5199480110883D+02-0.5199473821977D+02 +-0.5199467456990D+02-0.5199461015004D+02-0.5199454495085D+02-0.5199447896290D+02 +-0.5199441217666D+02-0.5199434458246D+02-0.5199427617052D+02-0.5199420693096D+02 +-0.5199413685375D+02-0.5199406592876D+02-0.5199399414573D+02-0.5199392149428D+02 +-0.5199384796390D+02-0.5199377354396D+02-0.5199369822368D+02-0.5199362199218D+02 +-0.5199354483843D+02-0.5199346675127D+02-0.5199338771940D+02-0.5199330773139D+02 +-0.5199322677567D+02-0.5199314484053D+02-0.5199306191412D+02-0.5199297798443D+02 +-0.5199289303934D+02-0.5199280706654D+02-0.5199272005361D+02-0.5199263198797D+02 +-0.5199254285685D+02-0.5199245264737D+02-0.5199236134649D+02-0.5199226894099D+02 +-0.5199217541751D+02-0.5199208076251D+02-0.5199198496230D+02-0.5199188800302D+02 +-0.5199178987064D+02-0.5199169055096D+02-0.5199159002963D+02-0.5199148829207D+02 +-0.5199138532359D+02-0.5199128110928D+02-0.5199117563407D+02-0.5199106888269D+02 +-0.5199096083969D+02-0.5199085148944D+02-0.5199074081613D+02-0.5199062880373D+02 +-0.5199051543604D+02-0.5199040069664D+02-0.5199028456895D+02-0.5199016703615D+02 +-0.5199004808124D+02-0.5198992768700D+02-0.5198980583600D+02-0.5198968251063D+02 +-0.5198955769302D+02-0.5198943136512D+02-0.5198930350863D+02-0.5198917410506D+02 +-0.5198904313569D+02-0.5198891058155D+02-0.5198877642345D+02-0.5198864064200D+02 +-0.5198850321751D+02-0.5198836413012D+02-0.5198822335968D+02-0.5198808088582D+02 +-0.5198793668793D+02-0.5198779074512D+02-0.5198764303627D+02-0.5198749354000D+02 +-0.5198734223467D+02-0.5198718909837D+02-0.5198703410894D+02-0.5198687724393D+02 +-0.5198671848065D+02-0.5198655779610D+02-0.5198639516703D+02-0.5198623056988D+02 +-0.5198606398084D+02-0.5198589537577D+02-0.5198572473026D+02-0.5198555201962D+02 +-0.5198537721883D+02-0.5198520030257D+02-0.5198502124524D+02-0.5198484002091D+02 +-0.5198465660333D+02-0.5198447096595D+02-0.5198428308188D+02-0.5198409292391D+02 +-0.5198390046450D+02-0.5198370567579D+02-0.5198350852955D+02-0.5198330899725D+02 +-0.5198310704998D+02-0.5198290265850D+02-0.5198269579318D+02-0.5198248642408D+02 +-0.5198227452087D+02-0.5198206005285D+02-0.5198184298896D+02-0.5198162329776D+02 +-0.5198140094741D+02-0.5198117590571D+02-0.5198094814005D+02-0.5198071761744D+02 +-0.5198048430449D+02-0.5198024816738D+02-0.5198000917191D+02-0.5197976728344D+02 +-0.5197952246692D+02-0.5197927468690D+02-0.5197902390745D+02-0.5197877009224D+02 +-0.5197851320449D+02-0.5197825320698D+02-0.5197799006201D+02-0.5197772373146D+02 +-0.5197745417673D+02-0.5197718135875D+02-0.5197690523796D+02-0.5197662577437D+02 +-0.5197634292744D+02-0.5197605665620D+02-0.5197576691913D+02-0.5197547367423D+02 +-0.5197517687900D+02-0.5197487649041D+02-0.5197457246489D+02-0.5197426475838D+02 +-0.5197395332627D+02-0.5197363812338D+02-0.5197331910403D+02-0.5197299622195D+02 +-0.5197266943031D+02-0.5197233868173D+02-0.5197200392824D+02-0.5197166512128D+02 +-0.5197132221174D+02-0.5197097514984D+02-0.5197062388528D+02-0.5197026836709D+02 +-0.5196990854370D+02-0.5196954436291D+02-0.5196917577189D+02-0.5196880271716D+02 +-0.5196842514461D+02-0.5196804299945D+02-0.5196765622622D+02-0.5196726476881D+02 +-0.5196686857041D+02-0.5196646757354D+02-0.5196606171998D+02-0.5196565095085D+02 +-0.5196523520651D+02-0.5196481442664D+02-0.5196438855015D+02-0.5196395751522D+02 +-0.5196352125928D+02-0.5196307971901D+02-0.5196263283028D+02-0.5196218052823D+02 +-0.5196172274718D+02-0.5196125942066D+02-0.5196079048138D+02-0.5196031586126D+02 +-0.5195983549135D+02-0.5195934930191D+02-0.5195885722231D+02-0.5195835918107D+02 +-0.5195785510585D+02-0.5195734492343D+02-0.5195682855969D+02-0.5195630593961D+02 +-0.5195577698725D+02-0.5195524162577D+02-0.5195469977736D+02-0.5195415136330D+02 +-0.5195359630387D+02-0.5195303451841D+02-0.5195246592528D+02-0.5195189044181D+02 +-0.5195130798435D+02-0.5195071846824D+02-0.5195012180777D+02-0.5194951791619D+02 +-0.5194890670569D+02-0.5194828808741D+02-0.5194766197137D+02-0.5194702826653D+02 +-0.5194638688071D+02-0.5194573772064D+02-0.5194508069188D+02-0.5194441569885D+02 +-0.5194374264482D+02-0.5194306143187D+02-0.5194237196087D+02-0.5194167413149D+02 +-0.5194096784220D+02-0.5194025299021D+02-0.5193952947146D+02-0.5193879718066D+02 +-0.5193805601119D+02-0.5193730585519D+02-0.5193654660341D+02-0.5193577814533D+02 +-0.5193500036904D+02-0.5193421316129D+02-0.5193341640742D+02-0.5193260999141D+02 +-0.5193179379578D+02-0.5193096770164D+02-0.5193013158865D+02-0.5192928533501D+02 +-0.5192842881739D+02-0.5192756191098D+02-0.5192668448947D+02-0.5192579642497D+02 +-0.5192489758803D+02-0.5192398784765D+02-0.5192306707119D+02-0.5192213512442D+02 +-0.5192119187145D+02-0.5192023717474D+02-0.5191927089505D+02-0.5191829289146D+02 +-0.5191730302133D+02-0.5191630114025D+02-0.5191528710207D+02-0.5191426075883D+02 +-0.5191322196077D+02-0.5191217055632D+02-0.5191110639202D+02-0.5191002931255D+02 +-0.5190893916069D+02-0.5190783577729D+02-0.5190671900126D+02-0.5190558866954D+02 +-0.5190444461705D+02-0.5190328667673D+02-0.5190211467945D+02-0.5190092845399D+02 +-0.5189972782709D+02-0.5189851262330D+02-0.5189728266508D+02-0.5189603777267D+02 +-0.5189477776415D+02-0.5189350245533D+02-0.5189221165981D+02-0.5189090518885D+02 +-0.5188958285145D+02-0.5188824445423D+02-0.5188688980147D+02-0.5188551869503D+02 +-0.5188413093435D+02-0.5188272631641D+02-0.5188130463569D+02-0.5187986568418D+02 +-0.5187840925129D+02-0.5187693512386D+02-0.5187544308611D+02-0.5187393291962D+02 +-0.5187240440329D+02-0.5187085731330D+02-0.5186929142309D+02-0.5186770650332D+02 +-0.5186610232183D+02-0.5186447864362D+02-0.5186283523081D+02-0.5186117184259D+02 +-0.5185948823518D+02-0.5185778416183D+02-0.5185605937277D+02-0.5185431361514D+02 +-0.5185254663297D+02-0.5185075816718D+02-0.5184894795548D+02-0.5184711573237D+02 +-0.5184526122909D+02-0.5184338417356D+02-0.5184148429039D+02-0.5183956130079D+02 +-0.5183761492255D+02-0.5183564486998D+02-0.5183365085389D+02-0.5183163258155D+02 +-0.5182958975660D+02-0.5182752207907D+02-0.5182542924529D+02-0.5182331094785D+02 +-0.5182116687559D+02-0.5181899671350D+02-0.5181680014270D+02-0.5181457684041D+02 +-0.5181232647986D+02-0.5181004873028D+02-0.5180774325683D+02-0.5180540972054D+02 +-0.5180304777830D+02-0.5180065708277D+02-0.5179823728232D+02-0.5179578802103D+02 +-0.5179330893860D+02-0.5179079967027D+02-0.5178825984684D+02-0.5178568909453D+02 +-0.5178308703501D+02-0.5178045328526D+02-0.5177778745757D+02-0.5177508915948D+02 +-0.5177235799366D+02-0.5176959355795D+02-0.5176679544522D+02-0.5176396324334D+02 +-0.5176109653512D+02-0.5175819489823D+02-0.5175525790517D+02-0.5175228512318D+02 +-0.5174927611419D+02-0.5174623043474D+02-0.5174314763592D+02-0.5174002726332D+02 +-0.5173686885694D+02-0.5173367195115D+02-0.5173043607457D+02-0.5172716075006D+02 +-0.5172384549462D+02-0.5172048981932D+02-0.5171709322923D+02-0.5171365522335D+02 +-0.5171017529452D+02-0.5170665292940D+02-0.5170308760833D+02-0.5169947880525D+02 +-0.5169582598771D+02-0.5169212861671D+02-0.5168838614662D+02-0.5168459802518D+02 +-0.5168076369333D+02-0.5167688258518D+02-0.5167295412791D+02-0.5166897774168D+02 +-0.5166495283960D+02-0.5166087882755D+02-0.5165675510418D+02-0.5165258106080D+02 +-0.5164835608125D+02-0.5164407954186D+02-0.5163975081138D+02-0.5163536925080D+02 +-0.5163093421337D+02-0.5162644504442D+02-0.5162190108131D+02-0.5161730165335D+02 +-0.5161264608164D+02-0.5160793367906D+02-0.5160316375011D+02-0.5159833559084D+02 +-0.5159344848875D+02-0.5158850172268D+02-0.5158349456272D+02-0.5157842627009D+02 +-0.5157329609709D+02-0.5156810328692D+02-0.5156284707365D+02-0.5155752668206D+02 +-0.5155214132756D+02-0.5154669021608D+02-0.5154117254396D+02-0.5153558749786D+02 +-0.5152993425461D+02-0.5152421198113D+02-0.5151841983433D+02-0.5151255696093D+02 +-0.5150662249744D+02-0.5150061557002D+02-0.5149453529428D+02-0.5148838077528D+02 +-0.5148215110737D+02-0.5147584537403D+02-0.5146946264782D+02-0.5146300199022D+02 +-0.5145646245151D+02-0.5144984307067D+02-0.5144314287525D+02-0.5143636088122D+02 +-0.5142949609291D+02-0.5142254750281D+02-0.5141551409151D+02-0.5140839482753D+02 +-0.5140118866721D+02-0.5139389455459D+02-0.5138651142128D+02-0.5137903818632D+02 +-0.5137147375605D+02-0.5136381702401D+02-0.5135606687078D+02-0.5134822216388D+02 +-0.5134028175756D+02-0.5133224449278D+02-0.5132410919702D+02-0.5131587468413D+02 +-0.5130753975423D+02-0.5129910319357D+02-0.5129056377438D+02-0.5128192025477D+02 +-0.5127317137854D+02-0.5126431587514D+02-0.5125535245940D+02-0.5124627983153D+02 +-0.5123709667690D+02-0.5122780166596D+02-0.5121839345403D+02-0.5120887068125D+02 +-0.5119923197240D+02-0.5118947593678D+02-0.5117960116805D+02-0.5116960624416D+02 +-0.5115948972712D+02-0.5114925016296D+02-0.5113888608154D+02-0.5112839599644D+02 +-0.5111777840483D+02-0.5110703178733D+02-0.5109615460788D+02-0.5108514531363D+02 +-0.5107400233480D+02-0.5106272408452D+02-0.5105130895877D+02-0.5103975533619D+02 +-0.5102806157801D+02-0.5101622602790D+02-0.5100424701185D+02-0.5099212283803D+02 +-0.5097985179674D+02-0.5096743216021D+02-0.5095486218256D+02-0.5094214009961D+02 +-0.5092926412887D+02-0.5091623246932D+02-0.5090304330139D+02-0.5088969478681D+02 +-0.5087618506855D+02-0.5086251227064D+02-0.5084867449820D+02-0.5083466983722D+02 +-0.5082049635455D+02-0.5080615209778D+02-0.5079163509518D+02-0.5077694335558D+02 +-0.5076207486834D+02-0.5074702760324D+02-0.5073179951042D+02-0.5071638852033D+02 +-0.5070079254364D+02-0.5068500947122D+02-0.5066903717403D+02-0.5065287350315D+02 +-0.5063651628963D+02-0.5061996334457D+02-0.5060321245898D+02-0.5058626140382D+02 +-0.5056910792994D+02-0.5055174976809D+02-0.5053418462884D+02-0.5051641020267D+02 +-0.5049842415989D+02-0.5048022415067D+02-0.5046180780505D+02-0.5044317273295D+02 +-0.5042431652422D+02-0.5040523674861D+02-0.5038593095586D+02-0.5036639667573D+02 +-0.5034663141803D+02-0.5032663267268D+02-0.5030639790981D+02-0.5028592457977D+02 +-0.5026521011328D+02-0.5024425192145D+02-0.5022304739591D+02-0.5020159390892D+02 +-0.5017988881346D+02-0.5015792944334D+02-0.5013571311336D+02-0.5011323711944D+02 +-0.5009049873873D+02-0.5006749522980D+02-0.5004422383280D+02-0.5002068176959D+02 +-0.4999686624397D+02-0.4997277444186D+02-0.4994840353146D+02-0.4992375066350D+02 +-0.4989881297144D+02-0.4987358757171D+02-0.4984807156389D+02-0.4982226203106D+02 +-0.4979615603991D+02-0.4976975064117D+02-0.4974304286974D+02-0.4971602974502D+02 +-0.4968870827126D+02-0.4966107543776D+02-0.4963312821924D+02-0.4960486357616D+02 +-0.4957627845502D+02-0.4954736978871D+02-0.4951813449683D+02-0.4948856948612D+02 +-0.4945867165071D+02-0.4942843787257D+02-0.4939786502185D+02-0.4936694995729D+02 +-0.4933568952659D+02-0.4930408056681D+02-0.4927211990478D+02-0.4923980435752D+02 +-0.4920713073265D+02-0.4917409582880D+02-0.4914069643607D+02-0.4910692933642D+02 +-0.4907279130416D+02-0.4903827910633D+02-0.4900338950319D+02-0.4896811924867D+02 +-0.4893246509079D+02-0.4889642377211D+02-0.4885999203021D+02-0.4882316659813D+02 +-0.4878594420482D+02-0.4874832157556D+02-0.4871029543247D+02-0.4867186249491D+02 +-0.4863301947995D+02-0.4859376310277D+02-0.4855409007715D+02-0.4851399711583D+02 +-0.4847348093100D+02-0.4843253823466D+02-0.4839116573905D+02-0.4834936015704D+02 +-0.4830711820251D+02-0.4826443659074D+02-0.4822131203876D+02-0.4817774126566D+02 +-0.4813372099301D+02-0.4808924794511D+02-0.4804431884930D+02-0.4799893043625D+02 +-0.4795307944023D+02-0.4790676259938D+02-0.4785997665588D+02-0.4781271835619D+02 +-0.4776498445124D+02-0.4771677169657D+02-0.4766807685247D+02-0.4761889668409D+02 +-0.4756922796153D+02-0.4751906745988D+02-0.4746841195927D+02-0.4741725824487D+02 +-0.4736560310686D+02-0.4731344334036D+02-0.4726077574537D+02-0.4720759712663D+02 +-0.4715390429349D+02-0.4709969405976D+02-0.4704496324345D+02-0.4698970866656D+02 +-0.4693392715482D+02-0.4687761553742D+02-0.4682077064661D+02-0.4676338931742D+02 +-0.4670546838725D+02-0.4664700469545D+02-0.4658799508292D+02-0.4652843639162D+02 +-0.4646832546412D+02-0.4640765914308D+02-0.4634643427075D+02-0.4628464768840D+02 +-0.4622229623583D+02-0.4615937675077D+02-0.4609588606835D+02-0.4603182102046D+02 +-0.4596717843531D+02-0.4590195513672D+02-0.4583614794369D+02-0.4576975366979D+02 +-0.4570276912265D+02-0.4563519110351D+02-0.4556701640665D+02-0.4549824181908D+02 +-0.4542886412007D+02-0.4535888008084D+02-0.4528828646428D+02-0.4521708002473D+02 +-0.4514525750785D+02-0.4507281565054D+02-0.4499975118097D+02-0.4492606081870D+02 +-0.4485174127497D+02-0.4477678925295D+02-0.4470120144833D+02-0.4462497454985D+02 +-0.4454810524011D+02-0.4447059019649D+02-0.4439242609219D+02-0.4431360959758D+02 +-0.4423413738159D+02-0.4415400611337D+02-0.4407321246418D+02-0.4399175310947D+02 +-0.4390962473114D+02-0.4382682402010D+02-0.4374334767908D+02-0.4365919242563D+02 +-0.4357435499539D+02-0.4348883214570D+02-0.4340262065933D+02-0.4331571734857D+02 +-0.4322811905962D+02-0.4313982267710D+02-0.4305082512897D+02-0.4296112339160D+02 +-0.4287071449512D+02-0.4277959552900D+02-0.4268776364786D+02-0.4259521607738D+02 +-0.4250195012053D+02-0.4240796316384D+02-0.4231325268378D+02-0.4221781625326D+02 +-0.4212165154821D+02-0.4202475635403D+02-0.4192712857207D+02-0.4182876622603D+02 +-0.4172966746809D+02-0.4162983058491D+02-0.4152925400326D+02-0.4142793629535D+02 +-0.4132587618362D+02-0.4122307254514D+02-0.4111952441526D+02-0.4101523099069D+02 +-0.4091019163177D+02-0.4080440586392D+02-0.4069787337814D+02-0.4059059403052D+02 +-0.4048256784069D+02-0.4037379498919D+02-0.4026427581359D+02-0.4015401080347D+02 +-0.4004300059408D+02-0.3993124595881D+02-0.3981874780047D+02-0.3970550714118D+02 +-0.3959152511128D+02-0.3947680293704D+02-0.3936134192738D+02-0.3924514345974D+02 +-0.3912820896514D+02-0.3901053991273D+02-0.3889213779388D+02-0.3877300410616D+02 +-0.3865314033730D+02-0.3853254794941D+02-0.3841122836384D+02-0.3828918294671D+02 +-0.3816641299561D+02-0.3804291972752D+02-0.3791870426838D+02-0.3779376764439D+02 +-0.3766811077544D+02-0.3754173447071D+02-0.3741463942662D+02-0.3728682622747D+02 +-0.3715829534855D+02-0.3702904716206D+02-0.3689908194568D+02-0.3676839989389D+02 +-0.3663700113198D+02-0.3650488573242D+02-0.3637205373385D+02-0.3623850516215D+02 +-0.3610424005352D+02-0.3596925847947D+02-0.3583356057318D+02-0.3569714655716D+02 +-0.3556001677183D+02-0.3542217170480D+02-0.3528361202035D+02-0.3514433858906D+02 +-0.3500435251706D+02-0.3486365517474D+02-0.3472224822457D+02-0.3458013364781D+02 +-0.3443731376977D+02-0.3429379128348D+02-0.3414956927154D+02-0.3400465122587D+02 +-0.3385904106531D+02-0.3371274315081D+02-0.3356576229817D+02-0.3341810378823D+02 +-0.3326977337430D+02-0.3312077728689D+02-0.3297112223571D+02-0.3282081540879D+02 +-0.3266986446883D+02-0.3251827754673D+02-0.3236606323235D+02-0.3221323056253D+02 +-0.3205978900636D+02-0.3190574844798D+02-0.3175111916665D+02-0.3159591181450D+02 +-0.3144013739192D+02-0.3128380722060D+02-0.3112693291460D+02-0.3096952634939D+02 +-0.3081159962896D+02-0.3065316505139D+02-0.3049423507279D+02-0.3033482226994D+02 +-0.3017493930171D+02-0.3001459886954D+02-0.2985381367711D+02-0.2969259638940D+02 +-0.2953095959141D+02-0.2936891574677D+02-0.2920647715631D+02-0.2904365591713D+02 +-0.2888046388202D+02-0.2871691261992D+02-0.2855301337730D+02-0.2838877704096D+02 +-0.2822421410237D+02-0.2805933462405D+02-0.2789414820796D+02-0.2772866396645D+02 +-0.2756289049588D+02-0.2739683585338D+02-0.2723050753680D+02-0.2706391246838D+02 +-0.2689705698223D+02-0.2672994681603D+02-0.2656258710714D+02-0.2639498239345D+02 +-0.2622713661917D+02-0.2605905314574D+02-0.2589073476829D+02-0.2572218373759D+02 +-0.2555340178776D+02-0.2538439017000D+02-0.2521514969218D+02-0.2504568076457D+02 +-0.2487598345161D+02-0.2470605752972D+02-0.2453590255090D+02-0.2436551791213D+02 +-0.2419490293015D+02-0.2402405692122D+02-0.2385297928550D+02-0.2368166959536D+02 +-0.2351012768684D+02-0.2333835375355D+02-0.2316634844181D+02-0.2299411294593D+02 +-0.2282164910224D+02-0.2264895948042D+02-0.2247604747020D+02-0.2230291736187D+02 +-0.2212957441833D+02-0.2195602493665D+02-0.2178227629680D+02-0.2160833699531D+02 +-0.2143421666157D+02-0.2125992605447D+02-0.2108547703736D+02-0.2091088252957D+02 +-0.2073615643311D+02-0.2056131353347D+02-0.2038636937454D+02-0.2021134010787D+02 +-0.2003624231780D+02-0.1986109282464D+02-0.1968590846923D+02-0.1951070588338D+02 +-0.1933550125113D+02-0.1916031006739D+02-0.1898514690054D+02-0.1881002516654D+02 +-0.1863495692195D+02-0.1845995268332D+02-0.1828502127992D+02-0.1811016974578D+02 +-0.1793540325598D+02-0.1776072511080D+02-0.1758613676940D+02-0.1741163793327D+02 +-0.1723722667775D+02-0.1706289962834D+02-0.1688865217702D+02-0.1671447873257D+02 +-0.1654037299789D+02-0.1636632826691D+02-0.1619233773325D+02-0.1601839480315D+02 +-0.1584449340510D+02-0.1567062828984D+02-0.1549679531468D+02-0.1532299170720D+02 +-0.1514921630451D+02-0.1497546976480D+02-0.1480175474939D+02-0.1462807607400D+02 +-0.1445444082871D+02-0.1428085846710D+02-0.1410734086517D+02-0.1393390235146D+02 +-0.1376055970989D+02-0.1358733215727D+02-0.1341424129731D+02-0.1324131105355D+02 +-0.1306856758305D+02-0.1289603917318D+02-0.1272375612351D+02-0.1255175061484D+02 +-0.1238005656736D+02-0.1220870948967D+02-0.1203774632043D+02-0.1186720526422D+02 +-0.1169712562320D+02-0.1152754762583D+02-0.1135851225403D+02-0.1119006106993D+02 +-0.1102223604329D+02-0.1085507938069D+02-0.1068863335731D+02-0.1052294015218D+02 +-0.1035804168776D+02-0.1019397947446D+02-0.1003079446077D+02-0.9868526889628D+01 +-0.9707216161554D+01-0.9546900704939D+01-0.9387617854023D+01-0.9229403734858D+01 +-0.9072293159592D+01-0.8916319529363D+01-0.8761514745993D+01-0.8607909132693D+01 +-0.8455531363896D+01-0.8304408404305D+01-0.8154565457227D+01-0.8006025922166D+01 +-0.7858811361682D+01-0.7712941477416D+01-0.7568434095199D+01-0.7425305159081D+01 +-0.7283568734134D+01-0.7143237017788D+01-0.7004320359504D+01-0.6866827288485D+01 +-0.6730764549154D+01-0.6596137144079D+01-0.6462948384000D+01-0.6331199944618D+01 +-0.6200891929738D+01-0.6072022940407D+01-0.5944590149603D+01-0.5818589382077D+01 +-0.5694015198898D+01-0.5570860986265D+01-0.5449119048124D+01-0.5328780702141D+01 +-0.5209836378552D+01-0.5092275721431D+01-0.4976087691897D+01-0.4861260672787D+01 +-0.4747782574321D+01-0.4635640940271D+01-0.4524823054180D+01-0.4415316045125D+01 +-0.4307106992579D+01-0.4200183029885D+01-0.4094531445869D+01-0.3990139784139D+01 +-0.3886995939600D+01-0.3785088251726D+01-0.3684405594148D+01-0.3584937460106D+01 +-0.3486674043348D+01-0.3389606314047D+01-0.3293726089348D+01-0.3199026098161D+01 +-0.3105500039868D+01-0.3013142636618D+01-0.2921949678952D+01-0.2831918064533D+01 +-0.2743045829849D+01-0.2655332174788D+01-0.2568777480092D+01-0.2483383317815D+01 +-0.2399152454962D+01-0.2316088850658D+01-0.2234197647300D+01-0.2153485156272D+01 +-0.2073958838965D+01-0.1995627283965D+01-0.1918500181413D+01-0.1842588295670D+01 +-0.1767903437522D+01-0.1694458437274D+01-0.1622267120110D+01-0.1551344285168D+01 +-0.1481705689753D+01-0.1413368040087D+01-0.1346348989896D+01-0.1280667148051D+01 +-0.1216342096293D+01-0.1153394417906D+01-0.1091845737986D+01-0.1031718775725D+01 +-0.9730374088849D+00-0.9158267504133D+00-0.8601132368937D+00-0.8059247283301D+00 +-0.7532906185600D+00-0.7022419554295D+00-0.6528115697324D+00-0.6050342118170D+00 +-0.5589466947046D+00-0.5145880425354D+00-0.4719996431596D+00-0.4312254037239D+00 +-0.3923119081554D+00-0.3553085755132D+00-0.3202678182603D+00-0.2872451996103D+00 +-0.2562993012896D+00 + 0.0000000000000D+00 + 1012 0.5229258479779D+01 + 0.2150742905406D-04 0.2201934401975D-04 0.2254344131081D-04 0.2308001074793D-04 + 0.2362934904336D-04 0.2419175996469D-04 0.2476755450247D-04 0.2535705104185D-04 + 0.2596057553829D-04 0.2657846169737D-04 0.2721105115901D-04 0.2785869368592D-04 + 0.2852174735659D-04 0.2920057876285D-04 0.2989556321214D-04 0.3060708493450D-04 + 0.3133553729459D-04 0.3208132300862D-04 0.3284485436652D-04 0.3362655345933D-04 + 0.3442685241199D-04 0.3524619362168D-04 0.3608503000175D-04 0.3694382523153D-04 + 0.3782305401197D-04 0.3872320232740D-04 0.3964476771351D-04 0.4058825953159D-04 + 0.4155419924941D-04 0.4254312072866D-04 0.4355557051923D-04 0.4459210816046D-04 + 0.4565330648961D-04 0.4673975195749D-04 0.4785204495171D-04 0.4899080012754D-04 + 0.5015664674660D-04 0.5135022902361D-04 0.5257220648130D-04 0.5382325431382D-04 + 0.5510406375867D-04 0.5641534247751D-04 0.5775781494596D-04 0.5913222285265D-04 + 0.6053932550771D-04 0.6197990026094D-04 0.6345474292991D-04 0.6496466823815D-04 + 0.6651051026378D-04 0.6809312289875D-04 0.6971338031887D-04 0.7137217746513D-04 + 0.7307043053626D-04 0.7480907749308D-04 0.7658907857468D-04 0.7841141682692D-04 + 0.8027709864336D-04 0.8218715431905D-04 0.8414263861740D-04 0.8614463135050D-04 + 0.8819423797310D-04 0.9029259019072D-04 0.9244084658213D-04 0.9464019323656D-04 + 0.9689184440594D-04 0.9919704317265D-04 0.1015570621330D-03 0.1039732040969D-03 + 0.1064468028041D-03 0.1089792236573D-03 0.1115718644728D-03 0.1142261562483D-03 + 0.1169435639500D-03 0.1197255873171D-03 0.1225737616857D-03 0.1254896588328D-03 + 0.1284748878395D-03 0.1315310959746D-03 0.1346599695998D-03 0.1378632350954D-03 + 0.1411426598085D-03 0.1445000530233D-03 0.1479372669546D-03 0.1514561977641D-03 + 0.1550587866019D-03 0.1587470206711D-03 0.1625229343189D-03 0.1663886101524D-03 + 0.1703461801815D-03 0.1743978269887D-03 0.1785457849256D-03 0.1827923413391D-03 + 0.1871398378251D-03 0.1915906715131D-03 0.1961472963799D-03 0.2008122245952D-03 + 0.2055880278984D-03 0.2104773390081D-03 0.2154828530649D-03 0.2206073291079D-03 + 0.2258535915864D-03 0.2312245319072D-03 0.2367231100177D-03 0.2423523560273D-03 + 0.2481153718665D-03 0.2540153329849D-03 0.2600554900897D-03 0.2662391709247D-03 + 0.2725697820915D-03 0.2790508109132D-03 0.2856858273428D-03 0.2924784859153D-03 + 0.2994325277470D-03 0.3065517825810D-03 0.3138401708812D-03 0.3213017059753D-03 + 0.3289404962488D-03 0.3367607473897D-03 0.3447667646870D-03 0.3529629553823D-03 + 0.3613538310777D-03 0.3699440101989D-03 0.3787382205180D-03 0.3877413017338D-03 + 0.3969582081140D-03 0.4063940111991D-03 0.4160539025692D-03 0.4259431966769D-03 + 0.4360673337456D-03 0.4464318827368D-03 0.4570425443864D-03 0.4679051543124D-03 + 0.4790256861959D-03 0.4904102550358D-03 0.5020651204812D-03 0.5139966902408D-03 + 0.5262115235724D-03 0.5387163348549D-03 0.5515179972435D-03 0.5646235464104D-03 + 0.5780401843732D-03 0.5917752834137D-03 0.6058363900874D-03 0.6202312293275D-03 + 0.6349677086450D-03 0.6500539224267D-03 0.6654981563344D-03 0.6813088918062D-03 + 0.6974948106637D-03 0.7140647998269D-03 0.7310279561389D-03 0.7483935913040D-03 + 0.7661712369406D-03 0.7843706497523D-03 0.8030018168203D-03 0.8220749610184D-03 + 0.8416005465556D-03 0.8615892846469D-03 0.8820521393172D-03 0.9030003333406D-03 + 0.9244453543176D-03 0.9463989608946D-03 0.9688731891282D-03 0.9918803589975D-03 + 0.1015433081069D-02 0.1039544263315D-02 0.1064227118095D-02 0.1089495169290D-02 + 0.1115362259619D-02 0.1141842558105D-02 0.1168950567737D-02 0.1196701133289D-02 + 0.1225109449338D-02 0.1254191068456D-02 0.1283961909601D-02 0.1314438266696D-02 + 0.1345636817413D-02 0.1377574632157D-02 0.1410269183260D-02 0.1443738354387D-02 + 0.1478000450161D-02 0.1513074206015D-02 0.1548978798262D-02 0.1585733854409D-02 + 0.1623359463706D-02 0.1661876187936D-02 0.1701305072458D-02 0.1741667657505D-02 + 0.1782985989747D-02 0.1825282634108D-02 0.1868580685877D-02 0.1912903783076D-02 + 0.1958276119133D-02 0.2004722455835D-02 0.2052268136585D-02 0.2100939099962D-02 + 0.2150761893598D-02 0.2201763688371D-02 0.2253972292925D-02 0.2307416168524D-02 + 0.2362124444253D-02 0.2418126932561D-02 0.2475454145167D-02 0.2534137309329D-02 + 0.2594208384486D-02 0.2655700079287D-02 0.2718645869002D-02 0.2783080013344D-02 + 0.2849037574687D-02 0.2916554436715D-02 0.2985667323484D-02 0.3056413818931D-02 + 0.3128832386828D-02 0.3202962391187D-02 0.3278844117136D-02 0.3356518792272D-02 + 0.3436028608501D-02 0.3517416744371D-02 0.3600727387929D-02 0.3686005760082D-02 + 0.3773298138499D-02 0.3862651882061D-02 0.3954115455860D-02 0.4047738456768D-02 + 0.4143571639594D-02 0.4241666943825D-02 0.4342077520985D-02 0.4444857762604D-02 + 0.4550063328833D-02 0.4657751177697D-02 0.4767979595018D-02 0.4880808225009D-02 + 0.4996298101570D-02 0.5114511680279D-02 0.5235512871115D-02 0.5359367071918D-02 + 0.5486141202598D-02 0.5615903740128D-02 0.5748724754308D-02 0.5884675944352D-02 + 0.6023830676284D-02 0.6166264021183D-02 0.6312052794284D-02 0.6461275594959D-02 + 0.6614012847588D-02 0.6770346843357D-02 0.6930361782982D-02 0.7094143820394D-02 + 0.7261781107400D-02 0.7433363839342D-02 0.7608984301773D-02 0.7788736918176D-02 + 0.7972718298747D-02 0.8161027290261D-02 0.8353765027049D-02 0.8551034983111D-02 + 0.8752943025377D-02 0.8959597468160D-02 0.9171109128811D-02 0.9387591384603D-02 + 0.9609160230877D-02 0.9835934340477D-02 0.1006803512449D-01 0.1030558679431D-01 + 0.1054871642512D-01 0.1079755402073D-01 0.1105223257982D-01 0.1131288816368D-01 + 0.1157965996544D-01 0.1185269038080D-01 0.1213212508026D-01 0.1241811308303D-01 + 0.1271080683248D-01 0.1301036227325D-01 0.1331693893004D-01 0.1363069998813D-01 + 0.1395181237567D-01 0.1428044684765D-01 0.1461677807184D-01 0.1496098471648D-01 + 0.1531324953990D-01 0.1567375948211D-01 0.1604270575828D-01 0.1642028395434D-01 + 0.1680669412453D-01 0.1720214089116D-01 0.1760683354637D-01 0.1802098615621D-01 + 0.1844481766683D-01 0.1887855201303D-01 0.1932241822902D-01 0.1977665056168D-01 + 0.2024148858606D-01 0.2071717732349D-01 0.2120396736203D-01 0.2170211497964D-01 + 0.2221188226980D-01 0.2273353726988D-01 0.2326735409215D-01 0.2381361305754D-01 + 0.2437260083229D-01 0.2494461056731D-01 0.2552994204062D-01 0.2612890180262D-01 + 0.2674180332442D-01 0.2736896714935D-01 0.2801072104743D-01 0.2866740017320D-01 + 0.2933934722669D-01 0.3002691261781D-01 0.3073045463399D-01 0.3145033961141D-01 + 0.3218694210958D-01 0.3294064508962D-01 0.3371184009606D-01 0.3450092744243D-01 + 0.3530831640054D-01 0.3613442539362D-01 0.3697968219334D-01 0.3784452412086D-01 + 0.3872939825181D-01 0.3963476162544D-01 0.4056108145796D-01 0.4150883536008D-01 + 0.4247851155891D-01 0.4347060912422D-01 0.4448563819924D-01 0.4552412023590D-01 + 0.4658658823475D-01 0.4767358698962D-01 0.4878567333696D-01 0.4992341641008D-01 + 0.5108739789835D-01 0.5227821231135D-01 0.5349646724813D-01 0.5474278367169D-01 + 0.5601779618862D-01 0.5732215333417D-01 0.5865651786266D-01 0.6002156704340D-01 + 0.6141799296226D-01 0.6284650282880D-01 0.6430781928923D-01 0.6580268074515D-01 + 0.6733184167825D-01 0.6889607298100D-01 0.7049616229337D-01 0.7213291434581D-01 + 0.7380715130845D-01 0.7551971314661D-01 0.7727145798277D-01 0.7906326246509D-01 + 0.8089602214242D-01 0.8277065184608D-01 0.8468808607842D-01 0.8664927940812D-01 + 0.8865520687255D-01 0.9070686438707D-01 0.9280526916144D-01 0.9495146012343D-01 + 0.9714649834967D-01 0.9939146750384D-01 0.1016874742823D+00 0.1040356488672D+00 + 0.1064371453872D+00 0.1088931423856D+00 0.1114048432967D+00 0.1139734769295D+00 + 0.1166002979593D+00 0.1192865874273D+00 0.1220336532487D+00 0.1248428307276D+00 + 0.1277154830815D+00 0.1306530019730D+00 0.1336568080498D+00 0.1367283514936D+00 + 0.1398691125766D+00 0.1430806022269D+00 0.1463643626021D+00 0.1497219676713D+00 + 0.1531550238057D+00 0.1566651703780D+00 0.1602540803695D+00 0.1639234609870D+00 + 0.1676750542871D+00 0.1715106378098D+00 0.1754320252209D+00 0.1794410669619D+00 + 0.1835396509100D+00 0.1877297030455D+00 0.1920131881282D+00 0.1963921103827D+00 + 0.2008685141914D+00 0.2054444847966D+00 0.2101221490109D+00 0.2149036759359D+00 + 0.2197912776889D+00 0.2247872101386D+00 0.2298937736476D+00 0.2351133138248D+00 + 0.2404482222837D+00 0.2459009374100D+00 0.2514739451362D+00 0.2571697797240D+00 + 0.2629910245536D+00 0.2689403129212D+00 0.2750203288421D+00 0.2812338078623D+00 + 0.2875835378751D+00 0.2940723599454D+00 0.3007031691395D+00 0.3074789153608D+00 + 0.3144026041916D+00 0.3214772977396D+00 0.3287061154899D+00 0.3360922351618D+00 + 0.3436388935694D+00 0.3513493874868D+00 0.3592270745164D+00 0.3672753739607D+00 + 0.3754977676972D+00 0.3838978010545D+00 0.3924790836915D+00 0.4012452904770D+00 + 0.4102001623706D+00 0.4193475073036D+00 0.4286912010595D+00 0.4382351881538D+00 + 0.4479834827120D+00 0.4579401693452D+00 0.4681094040228D+00 0.4784954149418D+00 + 0.4891025033910D+00 0.4999350446102D+00 0.5109974886435D+00 0.5222943611853D+00 + 0.5338302644183D+00 0.5456098778426D+00 0.5576379590956D+00 0.5699193447601D+00 + 0.5824589511607D+00 0.5952617751475D+00 0.6083328948654D+00 0.6216774705074D+00 + 0.6353007450521D+00 0.6492080449824D+00 0.6634047809857D+00 0.6778964486325D+00 + 0.6926886290333D+00 0.7077869894721D+00 0.7231972840138D+00 0.7389253540860D+00 + 0.7549771290311D+00 0.7713586266289D+00 0.7880759535873D+00 0.8051353059985D+00 + 0.8225429697604D+00 0.8403053209599D+00 0.8584288262158D+00 0.8769200429817D+00 + 0.8957856198031D+00 0.9150322965294D+00 0.9346669044774D+00 0.9546963665439D+00 + 0.9751276972649D+00 0.9959680028197D+00 0.1017224480976D+01 0.1038904420974D+01 + 0.1061015203349D+01 0.1083564299686D+01 0.1106559272300D+01 0.1130007773859D+01 + 0.1153917546912D+01 0.1178296423354D+01 0.1203152323804D+01 0.1228493256899D+01 + 0.1254327318495D+01 0.1280662690787D+01 0.1307507641324D+01 0.1334870521934D+01 + 0.1362759767535D+01 0.1391183894856D+01 0.1420151501035D+01 0.1449671262109D+01 + 0.1479751931386D+01 0.1510402337698D+01 0.1541631383520D+01 0.1573448042969D+01 + 0.1605861359662D+01 0.1638880444440D+01 0.1672514472946D+01 0.1706772683055D+01 + 0.1741664372155D+01 0.1777198894269D+01 0.1813385657016D+01 0.1850234118409D+01 + 0.1887753783475D+01 0.1925954200705D+01 0.1964844958324D+01 0.2004435680370D+01 + 0.2044736022586D+01 0.2085755668115D+01 0.2127504322996D+01 0.2169991711448D+01 + 0.2213227570952D+01 0.2257221647108D+01 0.2301983688271D+01 0.2347523439972D+01 + 0.2393850639086D+01 0.2440975007782D+01 0.2488906247220D+01 0.2537654031002D+01 + 0.2587227998372D+01 0.2637637747157D+01 0.2688892826442D+01 0.2741002728983D+01 + 0.2793976883341D+01 0.2847824645743D+01 0.2902555291652D+01 0.2958178007063D+01 + 0.3014701879494D+01 0.3072135888684D+01 0.3130488897001D+01 0.3189769639525D+01 + 0.3249986713841D+01 0.3311148569513D+01 0.3373263497233D+01 0.3436339617667D+01 + 0.3500384869964D+01 0.3565406999951D+01 0.3631413547991D+01 0.3698411836514D+01 + 0.3766408957221D+01 0.3835411757947D+01 0.3905426829193D+01 0.3976460490322D+01 + 0.4048518775419D+01 0.4121607418815D+01 0.4195731840277D+01 0.4270897129857D+01 + 0.4347108032420D+01 0.4424368931831D+01 0.4502683834816D+01 0.4582056354503D+01 + 0.4662489693636D+01 0.4743986627475D+01 0.4826549486387D+01 0.4910180138127D+01 + 0.4994879969825D+01 0.5080649869681D+01 0.5167490208373D+01 0.5255400820202D+01 + 0.5344380983962D+01 0.5434429403565D+01 0.5525544188426D+01 0.5617722833617D+01 + 0.5710962199815D+01 0.5805258493041D+01 0.5900607244231D+01 0.5997003288635D+01 + 0.6094440745069D+01 0.6192912995049D+01 0.6292412661814D+01 0.6392931589269D+01 + 0.6494460820874D+01 0.6596990578488D+01 0.6700510241224D+01 0.6805008324307D+01 + 0.6910472457995D+01 0.7016889366579D+01 0.7124244847491D+01 0.7232523750568D+01 + 0.7341709957494D+01 0.7451786361463D+01 0.7562734847107D+01 0.7674536270712D+01 + 0.7787170440791D+01 0.7900616099026D+01 0.8014850901658D+01 0.8129851401340D+01 + 0.8245593029526D+01 0.8362050079436D+01 0.8479195689649D+01 0.8597001828383D+01 + 0.8715439278509D+01 0.8834477623371D+01 0.8954085233454D+01 0.9074229253973D+01 + 0.9194875593440D+01 0.9315988913276D+01 0.9437532618530D+01 0.9559468849772D+01 + 0.9681758476237D+01 0.9804361090277D+01 0.9927235003199D+01 0.1005033724256D+02 + 0.1017362355101D+02 0.1029704838669D+02 0.1042056492540D+02 0.1054412506444D+02 + 0.1066767942831D+02 0.1079117737637D+02 0.1091456701244D+02 0.1103779519646D+02 + 0.1116080755839D+02 0.1128354851420D+02 0.1140596128432D+02 0.1152798791434D+02 + 0.1164956929827D+02 0.1177064520433D+02 0.1189115430327D+02 0.1201103419951D+02 + 0.1213022146500D+02 0.1224865167586D+02 0.1236625945201D+02 0.1248297849976D+02 + 0.1259874165744D+02 0.1271348094411D+02 0.1282712761148D+02 0.1293961219902D+02 + 0.1305086459240D+02 0.1316081408518D+02 0.1326938944391D+02 0.1337651897664D+02 + 0.1348213060491D+02 0.1358615193909D+02 0.1368851035736D+02 0.1378913308811D+02 + 0.1388794729589D+02 0.1398488017086D+02 0.1407985902179D+02 0.1417281137257D+02 + 0.1426366506212D+02 0.1435234834789D+02 0.1443879001264D+02 0.1452291947466D+02 + 0.1460466690129D+02 0.1468396332564D+02 0.1476074076649D+02 0.1483493235126D+02 + 0.1490647244192D+02 0.1497529676373D+02 0.1504134253675D+02 0.1510454860984D+02 + 0.1516485559720D+02 0.1522220601698D+02 0.1527654443219D+02 0.1532781759325D+02 + 0.1537597458241D+02 0.1542096695946D+02 0.1546274890874D+02 0.1550127738702D+02 + 0.1553651227211D+02 0.1556841651189D+02 0.1559695627334D+02 0.1562210109145D+02 + 0.1564382401753D+02 0.1566210176664D+02 0.1567691486377D+02 0.1568824778841D+02 + 0.1569608911712D+02 0.1570043166360D+02 0.1570127261607D+02 0.1569861367129D+02 + 0.1569246116496D+02 0.1568282619787D+02 0.1566972475757D+02 0.1565317783486D+02 + 0.1563321153475D+02 0.1560985718135D+02 0.1558315141624D+02 0.1555313628970D+02 + 0.1551985934445D+02 0.1548337369123D+02 0.1544373807583D+02 0.1540101693692D+02 + 0.1535528045436D+02 0.1530660458716D+02 0.1525507110098D+02 0.1520076758423D+02 + 0.1514378745267D+02 0.1508422994170D+02 0.1502220008605D+02 0.1495780868635D+02 + 0.1489117226206D+02 0.1482241299046D+02 0.1475165863115D+02 0.1467904243575D+02 + 0.1460470304238D+02 0.1452878435463D+02 0.1445143540465D+02 0.1437281020013D+02 + 0.1429306755483D+02 0.1421237090260D+02 0.1413088809452D+02 0.1404879117925D+02 + 0.1396625616625D+02 0.1388346277207D+02 0.1380059414952D+02 0.1371783659988D+02 + 0.1363537926825D+02 0.1355341382212D+02 0.1347213411351D+02 0.1339173582480D+02 + 0.1331241609871D+02 0.1323437315279D+02 0.1315780587881D+02 0.1308291342766D+02 + 0.1300989478035D+02 0.1293894830568D+02 0.1287027130535D+02 0.1280405954732D+02 + 0.1274050678825D+02 0.1267980428593D+02 0.1262214030269D+02 0.1256769960087D+02 + 0.1251666293145D+02 0.1246920651702D+02 0.1242550153038D+02 0.1238571356999D+02 + 0.1235000213372D+02 0.1231852009235D+02 0.1229141316414D+02 0.1226881939222D+02 + 0.1225086862623D+02 0.1223768200985D+02 0.1222937147599D+02 0.1222603925117D+02 + 0.1222777737106D+02 0.1223466720868D+02 0.1224677901729D+02 0.1226417148958D+02 + 0.1228689133517D+02 0.1231497287802D+02 0.1234843767581D+02 0.1238729416297D+02 + 0.1243153731911D+02 0.1248114836487D+02 0.1253609448665D+02 0.1259632859227D+02 + 0.1266178909890D+02 0.1273239975523D+02 0.1280806949923D+02 0.1288869235315D+02 + 0.1297414735711D+02 0.1306429854274D+02 0.1315899494816D+02 0.1325807067533D+02 + 0.1336134499111D+02 0.1346862247282D+02 0.1357969319917D+02 0.1369433298744D+02 + 0.1381230367740D+02 0.1393335346243D+02 0.1405721726828D+02 0.1418361717951D+02 + 0.1431226291376D+02 0.1444285234362D+02 0.1457507206581D+02 0.1470859801733D+02 + 0.1484309613763D+02 0.1497822307639D+02 0.1511362694548D+02 0.1524894811426D+02 + 0.1538382004666D+02 0.1551787017849D+02 0.1565072083339D+02 0.1578199017530D+02 + 0.1591129319546D+02 0.1603824273170D+02 0.1616245051740D+02 0.1628352825765D+02 + 0.1640108872963D+02 0.1651474690448D+02 0.1662412108723D+02 0.1672883407174D+02 + 0.1682851430716D+02 0.1692279707220D+02 0.1701132565381D+02 0.1709375252614D+02 + 0.1716974052608D+02 0.1723896402125D+02 0.1730111006644D+02 0.1735587954416D+02 + 0.1740298828530D+02 0.1744216816538D+02 0.1747316817225D+02 0.1749575544089D+02 + 0.1750971625093D+02 0.1751485698260D+02 0.1751100502688D+02 0.1749800964559D+02 + 0.1747574277733D+02 0.1744409978499D+02 0.1740300014123D+02 0.1735238804766D+02 + 0.1729223298439D+02 0.1722253018618D+02 0.1714330104180D+02 0.1705459341368D+02 + 0.1695648187457D+02 0.1684906785873D+02 0.1673247972505D+02 0.1660687272995D+02 + 0.1647242890818D+02 0.1632935685981D+02 0.1617789144222D+02 0.1601829336618D+02 + 0.1585084869528D+02 0.1567586824865D+02 0.1549368690699D+02 0.1530466282265D+02 + 0.1510917653451D+02 0.1490762998916D+02 0.1470044547022D+02 0.1448806443791D+02 + 0.1427094628160D+02 0.1404956698852D+02 0.1382441773199D+02 0.1359600338336D+02 + 0.1336484095192D+02 0.1313145795774D+02 0.1289639074258D+02 0.1266018272468D+02 + 0.1242338260337D+02 0.1218654252002D+02 0.1195021618209D+02 0.1171495695744D+02 + 0.1148131594627D+02 0.1124984003849D+02 0.1102106996440D+02 0.1079553834688D+02 + 0.1057376776347D+02 0.1035626882667D+02 0.1014353829125D+02 0.9936057196884D+01 + 0.9734289054994D+01 0.9538678088120D+01 0.9349647530399D+01 0.9167597997384D+01 + 0.8992905933301D+01 0.8825922143594D+01 0.8666970420224D+01 0.8516346266999D+01 + 0.8374315731611D+01 0.8241114350747D+01 0.8116946214096D+01 0.8001983152570D+01 + 0.7896364055459D+01 0.7800194320670D+01 0.7713545441561D+01 0.7636454733225D+01 + 0.7568925200401D+01 0.7510925548528D+01 0.7462390338698D+01 0.7423220286625D+01 + 0.7393282704950D+01 0.7372412087556D+01 0.7360410833787D+01 0.7357050109802D+01 + 0.7362070843542D+01 0.7375184849138D+01 0.7396076075866D+01 0.7424401976120D+01 + 0.7459794986211D+01 0.7501864113185D+01 0.7550196620265D+01 0.7604359802945D+01 + 0.7663902847256D+01 0.7728358761219D+01 0.7797246370063D+01 0.7870072365405D+01 + 0.7946333398216D+01 0.8025518205140D+01 0.8107109757504D+01 0.8190587422172D+01 + 0.8275429123337D+01 0.8361113494303D+01 0.8447122008353D+01 0.8532941077928D+01 + 0.8618064111536D+01 0.8701993518075D+01 0.8784242648578D+01 0.8864337665829D+01 + 0.8941819332731D+01 0.9016244710878D+01 0.9087188761372D+01 0.9154245840560D+01 + 0.9217031084099D+01 0.9275181673474D+01 0.9328357979881D+01 0.9376244581215D+01 + 0.9418551148709D+01 0.9455013200639D+01 0.9485392721360D+01 0.9509478644797D+01 + 0.9527087202359D+01 0.9538062136102D+01 0.9542274778747D+01 0.9539624002998D+01 + 0.9530036043300D+01 0.9513464193959D+01 0.9489888388159D+01 0.9459314663078D+01 + 0.9421774516843D+01 0.9377324163609D+01 0.9326043693467D+01 0.9268036144314D+01 + 0.9203426493115D+01 0.9132360574297D+01 0.9055003933175D+01 0.8971540622481D+01 + 0.8882171950151D+01 0.8787115186520D+01 0.8686602239071D+01 0.8580878302773D+01 + 0.8470200493895D+01 0.8354836475027D+01 0.8235063078754D+01 0.8111164937189D+01 + 0.7983433124252D+01 0.7852163817216D+01 0.7717656983696D+01 0.7580215099831D+01 + 0.7440141905014D+01 0.7297741198086D+01 0.7153315679440D+01 0.7007165843079D+01 + 0.6859588922166D+01 0.6710877891167D+01 0.6561320527250D+01 0.6411198533128D+01 + 0.6260786723101D+01 0.6110352273646D+01 0.5960154039458D+01 0.5810441935471D+01 + 0.5661456384987D+01 0.5513427833700D+01 0.5366576329042D+01 0.5221111163955D+01 + 0.5077230583918D+01 0.4935121555751D+01 0.4794959596475D+01 0.4656908660288D+01 + 0.4521121081498D+01 0.4387737571052D+01 0.4256887264186D+01 0.4128687816522D+01 + 0.4003245545873D+01 0.3880655616880D+01 0.3761002265561D+01 0.3644359060777D+01 + 0.3530789199588D+01 0.3420345833472D+01 0.3313072422343D+01 0.3209003113371D+01 + 0.3108163141592D+01 0.3010569249384D+01 0.2916230121919D+01 0.2825146835796D+01 + 0.2737313318133D+01 0.2652716813508D+01 0.2571338356232D+01 0.2493153245580D+01 + 0.2418131521695D+01 0.2346238440047D+01 0.2277434942461D+01 0.2211678122838D+01 + 0.2148921685899D+01 0.2089116397376D+01 0.2032210524266D+01 0.1978150263893D+01 + 0.1926880160684D+01 0.1878343509721D+01 0.1832482746269D+01 0.1789239820638D+01 + 0.1748556557871D+01 0.1710375001879D+01 0.1674637743804D+01 0.1641288234472D+01 + 0.1610271080956D+01 0.1581532327338D+01 0.1555019719890D+01 0.1530682956958D+01 + 0.1508473923914D+01 0.1488346913611D+01 0.1470258832820D+01 0.1454169395155D+01 + 0.1440041301042D+01 0.1427840405245D+01 0.1417535872504D+01 0.1409100321753D+01 + 0.1402509959377D+01 0.1397744701874D+01 0.1394788288181D+01 0.1393628381826D+01 + 0.1394256662892D+01 0.1396668909610D+01 0.1400865069190D+01 0.1406849317222D+01 + 0.1414629369614D+01 0.1424336942263D+01 0.1436096575202D+01 0.1449912447024D+01 + 0.1465794674727D+01 0.1483759333931D+01 0.1503828494539D+01 0.1526030271798D+01 + 0.1550398892649D+01 0.1576974777196D+01 0.1605804635055D+01 0.1636941576215D+01 + 7 1012 + 1 0 -1 -511.89194 + 2 0 -1 -58.90181 + 2 1 1 -50.68932 + 2 1 -2 -49.77537 + 3 0 -1 -5.73317 + 3 1 1 -3.34334 + 3 1 -2 -3.22919 + 0.2122975645015D-04 0.2173507709867D-04 0.2225242316243D-04 0.2278208072829D-04 + 0.2332434268594D-04 0.2387950888954D-04 0.2444788632325D-04 0.2502978927059D-04 + 0.2562553948791D-04 0.2623546638192D-04 0.2685990719144D-04 0.2749920717353D-04 + 0.2815371979393D-04 0.2882380692207D-04 0.2950983903075D-04 0.3021219540050D-04 + 0.3093126432877D-04 0.3166744334418D-04 0.3242113942573D-04 0.3319276922733D-04 + 0.3398275930755D-04 0.3479154636487D-04 0.3561957747857D-04 0.3646731035519D-04 + 0.3733521358096D-04 0.3822376688016D-04 0.3913346137963D-04 0.4006479987955D-04 + 0.4101829713060D-04 0.4199448011777D-04 0.4299388835081D-04 0.4401707416166D-04 + 0.4506460300883D-04 0.4613705378910D-04 0.4723501915650D-04 0.4835910584899D-04 + 0.4950993502270D-04 0.5068814259429D-04 0.5189437959126D-04 0.5312931251066D-04 + 0.5439362368626D-04 0.5568801166444D-04 0.5701319158897D-04 0.5836989559491D-04 + 0.5975887321186D-04 0.6118089177673D-04 0.6263673685632D-04 0.6412721267990D-04 + 0.6565314258201D-04 0.6721536945580D-04 0.6881475621705D-04 0.7045218627922D-04 + 0.7212856403973D-04 0.7384481537777D-04 0.7560188816385D-04 0.7740075278149D-04 + 0.7924240266119D-04 0.8112785482706D-04 0.8305815045642D-04 0.8503435545263D-04 + 0.8705756103141D-04 0.8912888432116D-04 0.9124946897738D-04 0.9342048581165D-04 + 0.9564313343555D-04 0.9791863891974D-04 0.1002482584687D-03 0.1026332781112D-03 + 0.1050750144077D-03 0.1075748151735D-03 0.1101340602203D-03 0.1127541621137D-03 + 0.1154365669501D-03 0.1181827551510D-03 0.1209942422769D-03 0.1238725798590D-03 + 0.1268193562527D-03 0.1298361975089D-03 0.1329247682680D-03 0.1360867726735D-03 + 0.1393239553083D-03 0.1426381021518D-03 0.1460310415612D-03 0.1495046452749D-03 + 0.1530608294397D-03 0.1567015556625D-03 0.1604288320871D-03 0.1642447144955D-03 + 0.1681513074364D-03 0.1721507653792D-03 0.1762452938963D-03 0.1804371508722D-03 + 0.1847286477421D-03 0.1891221507592D-03 0.1936200822920D-03 0.1982249221522D-03 + 0.2029392089542D-03 0.2077655415060D-03 0.2127065802334D-03 0.2177650486382D-03 + 0.2229437347894D-03 0.2282454928513D-03 0.2336732446459D-03 0.2392299812538D-03 + 0.2449187646513D-03 0.2507427293871D-03 0.2567050842979D-03 0.2628091142650D-03 + 0.2690581820118D-03 0.2754557299435D-03 0.2820052820308D-03 0.2887104457371D-03 + 0.2955749139921D-03 0.3026024672103D-03 0.3097969753590D-03 0.3171624000731D-03 + 0.3247027968207D-03 0.3324223171196D-03 0.3403252108055D-03 0.3484158283536D-03 + 0.3566986232552D-03 0.3651781544500D-03 0.3738590888149D-03 0.3827462037126D-03 + 0.3918443895988D-03 0.4011586526914D-03 0.4106941177020D-03 0.4204560306321D-03 + 0.4304497616342D-03 0.4406808079408D-03 0.4511547968612D-03 0.4618774888502D-03 + 0.4728547806468D-03 0.4840927084883D-03 0.4955974513988D-03 0.5073753345551D-03 + 0.5194328327314D-03 0.5317765738249D-03 0.5444133424641D-03 0.5573500837015D-03 + 0.5705939067925D-03 0.5841520890639D-03 0.5980320798714D-03 0.6122415046513D-03 + 0.6267881690659D-03 0.6416800632466D-03 0.6569253661363D-03 0.6725324499326D-03 + 0.6885098846360D-03 0.7048664427037D-03 0.7216111038125D-03 0.7387530597330D-03 + 0.7563017193176D-03 0.7742667136049D-03 0.7926579010441D-03 0.8114853728404D-03 + 0.8307594584254D-03 0.8504907310562D-03 0.8706900135433D-03 0.8913683841142D-03 + 0.9125371824119D-03 0.9342080156346D-03 0.9563927648179D-03 0.9791035912634D-03 + 0.1002352943117D-02 0.1026153562102D-02 0.1050518490405D-02 0.1075461077728D-02 + 0.1100994988496D-02 0.1127134209246D-02 0.1153893056171D-02 0.1181286182852D-02 + 0.1209328588167D-02 0.1238035624379D-02 0.1267423005415D-02 0.1297506815344D-02 + 0.1328303517037D-02 0.1359829961041D-02 0.1392103394654D-02 0.1425141471212D-02 + 0.1458962259585D-02 0.1493584253904D-02 0.1529026383504D-02 0.1565308023106D-02 + 0.1602449003221D-02 0.1640469620811D-02 0.1679390650189D-02 0.1719233354165D-02 + 0.1760019495464D-02 0.1801771348394D-02 0.1844511710794D-02 0.1888263916250D-02 + 0.1933051846599D-02 0.1978899944720D-02 0.2025833227614D-02 0.2073877299798D-02 + 0.2123058366995D-02 0.2173403250151D-02 0.2224939399761D-02 0.2277694910540D-02 + 0.2331698536421D-02 0.2386979705903D-02 0.2443568537747D-02 0.2501495857040D-02 + 0.2560793211623D-02 0.2621492888896D-02 0.2683627933011D-02 0.2747232162458D-02 + 0.2812340188056D-02 0.2878987431352D-02 0.2947210143447D-02 0.3017045424251D-02 + 0.3088531242177D-02 0.3161706454285D-02 0.3236610826892D-02 0.3313285056646D-02 + 0.3391770792086D-02 0.3472110655691D-02 0.3554348266436D-02 0.3638528262858D-02 + 0.3724696326649D-02 0.3812899206788D-02 0.3903184744224D-02 0.3995601897109D-02 + 0.4090200766624D-02 0.4187032623373D-02 0.4286149934389D-02 0.4387606390746D-02 + 0.4491456935804D-02 0.4597757794082D-02 0.4706566500803D-02 0.4817941932088D-02 + 0.4931944335851D-02 0.5048635363379D-02 0.5168078101634D-02 0.5290337106279D-02 + 0.5415478435454D-02 0.5543569684307D-02 0.5674680020311D-02 0.5808880219367D-02 + 0.5946242702730D-02 0.6086841574754D-02 0.6230752661494D-02 0.6378053550168D-02 + 0.6528823629508D-02 0.6683144131013D-02 0.6841098171130D-02 0.7002770794372D-02 + 0.7168249017405D-02 0.7337621874121D-02 0.7510980461712D-02 0.7688417987773D-02 + 0.7870029818463D-02 0.8055913527720D-02 0.8246168947593D-02 0.8440898219673D-02 + 0.8640205847678D-02 0.8844198751201D-02 0.9052986320644D-02 0.9266680473381D-02 + 0.9485395711148D-02 0.9709249178711D-02 0.9938360723829D-02 0.1017285295853D-01 + 0.1041285132175D-01 0.1065848414335D-01 0.1090988270951D-01 0.1116718132961D-01 + 0.1143051740455D-01 0.1170003149653D-01 0.1197586740047D-01 0.1225817221684D-01 + 0.1254709642620D-01 0.1284279396532D-01 0.1314542230495D-01 0.1345514252930D-01 + 0.1377211941725D-01 0.1409652152530D-01 0.1442852127232D-01 0.1476829502620D-01 + 0.1511602319226D-01 0.1547189030365D-01 0.1583608511371D-01 0.1620880069022D-01 + 0.1659023451183D-01 0.1698058856639D-01 0.1738006945154D-01 0.1778888847734D-01 + 0.1820726177118D-01 0.1863541038486D-01 0.1907356040402D-01 0.1952194305980D-01 + 0.1998079484302D-01 0.2045035762063D-01 0.2093087875471D-01 0.2142261122400D-01 + 0.2192581374792D-01 0.2244075091329D-01 0.2296769330365D-01 0.2350691763133D-01 + 0.2405870687229D-01 0.2462335040374D-01 0.2520114414469D-01 0.2579239069942D-01 + 0.2639739950387D-01 0.2701648697516D-01 0.2764997666416D-01 0.2829819941123D-01 + 0.2896149350513D-01 0.2964020484531D-01 0.3033468710740D-01 0.3104530191220D-01 + 0.3177241899806D-01 0.3251641639684D-01 0.3327768061342D-01 0.3405660680881D-01 + 0.3485359898710D-01 0.3566907018606D-01 0.3650344267166D-01 0.3735714813647D-01 + 0.3823062790211D-01 0.3912433312562D-01 0.4003872501011D-01 0.4097427501948D-01 + 0.4193146509749D-01 0.4291078789111D-01 0.4391274697832D-01 0.4493785710035D-01 + 0.4598664439858D-01 0.4705964665594D-01 0.4815741354312D-01 0.4928050686955D-01 + 0.5042950083923D-01 0.5160498231153D-01 0.5280755106696D-01 0.5403782007813D-01 + 0.5529641578584D-01 0.5658397838041D-01 0.5790116208843D-01 0.5924863546488D-01 + 0.6062708169076D-01 0.6203719887636D-01 0.6347970037015D-01 0.6495531507346D-01 + 0.6646478776099D-01 0.6800887940725D-01 0.6958836751900D-01 0.7120404647380D-01 + 0.7285672786470D-01 0.7454724085125D-01 0.7627643251682D-01 0.7804516823229D-01 + 0.7985433202641D-01 0.8170482696258D-01 0.8359757552242D-01 0.8553351999606D-01 + 0.8751362287932D-01 0.8953886727772D-01 0.9161025731761D-01 0.9372881856432D-01 + 0.9589559844749D-01 0.9811166669365D-01 0.1003781157661D+00 0.1026960613124D+00 + 0.1050666426187D+00 0.1074910230727D+00 0.1099703906329D+00 0.1125059583070D+00 + 0.1150989646366D+00 0.1177506741909D+00 0.1204623780676D+00 0.1232353944021D+00 + 0.1260710688845D+00 0.1289707752849D+00 0.1319359159864D+00 0.1349679225270D+00 + 0.1380682561490D+00 0.1412384083570D+00 0.1444799014844D+00 0.1477942892678D+00 + 0.1511831574303D+00 0.1546481242725D+00 0.1581908412731D+00 0.1618129936965D+00 + 0.1655163012104D+00 0.1693025185104D+00 0.1731734359544D+00 0.1771308802047D+00 + 0.1811767148790D+00 0.1853128412094D+00 0.1895411987104D+00 0.1938637658552D+00 + 0.1982825607598D+00 0.2027996418767D+00 0.2074171086957D+00 0.2121371024533D+00 + 0.2169618068509D+00 0.2218934487801D+00 0.2269342990569D+00 0.2320866731634D+00 + 0.2373529319974D+00 0.2427354826295D+00 0.2482367790682D+00 0.2538593230323D+00 + 0.2596056647304D+00 0.2654784036474D+00 0.2714801893389D+00 0.2776137222308D+00 + 0.2838817544268D+00 0.2902870905217D+00 0.2968325884206D+00 0.3035211601645D+00 + 0.3103557727607D+00 0.3173394490192D+00 0.3244752683937D+00 0.3317663678273D+00 + 0.3392159426028D+00 0.3468272471962D+00 0.3546035961349D+00 0.3625483648577D+00 + 0.3706649905790D+00 0.3789569731540D+00 0.3874278759464D+00 0.3960813266976D+00 + 0.4049210183955D+00 0.4139507101454D+00 0.4231742280388D+00 0.4325954660221D+00 + 0.4422183867640D+00 0.4520470225197D+00 0.4620854759931D+00 0.4723379211946D+00 + 0.4828086042953D+00 0.4935018444749D+00 0.5044220347646D+00 0.5155736428822D+00 + 0.5269612120602D+00 0.5385893618646D+00 0.5504627890040D+00 0.5625862681281D+00 + 0.5749646526146D+00 0.5876028753427D+00 0.6005059494532D+00 0.6136789690924D+00 + 0.6271271101407D+00 0.6408556309226D+00 0.6548698728981D+00 0.6691752613333D+00 + 0.6837773059493D+00 0.6986816015479D+00 0.7138938286123D+00 0.7294197538810D+00 + 0.7452652308942D+00 0.7614362005101D+00 0.7779386913894D+00 0.7947788204470D+00 + 0.8119627932680D+00 0.8294969044866D+00 0.8473875381261D+00 0.8656411678975D+00 + 0.8842643574549D+00 0.9032637606047D+00 0.9226461214683D+00 0.9424182745935D+00 + 0.9625871450140D+00 0.9831597482541D+00 0.1004143190275D+01 0.1025544667362D+01 + 0.1047371465949D+01 0.1069630962376D+01 0.1092330622582D+01 0.1115478001718D+01 + 0.1139080743699D+01 0.1163146580667D+01 0.1187683332379D+01 0.1212698905512D+01 + 0.1238201292877D+01 0.1264198572546D+01 0.1290698906886D+01 0.1317710541494D+01 + 0.1345241804028D+01 0.1373301102944D+01 0.1401896926110D+01 0.1431037839321D+01 + 0.1460732484690D+01 0.1490989578921D+01 0.1521817911461D+01 0.1553226342519D+01 + 0.1585223800953D+01 0.1617819282025D+01 0.1651021845012D+01 0.1684840610666D+01 + 0.1719284758534D+01 0.1754363524114D+01 0.1790086195862D+01 0.1826462112019D+01 + 0.1863500657290D+01 0.1901211259327D+01 0.1939603385053D+01 0.1978686536792D+01 + 0.2018470248210D+01 0.2058964080068D+01 0.2100177615772D+01 0.2142120456722D+01 + 0.2184802217451D+01 0.2228232520549D+01 0.2272420991371D+01 0.2317377252521D+01 + 0.2363110918097D+01 0.2409631587718D+01 0.2456948840298D+01 0.2505072227579D+01 + 0.2554011267414D+01 0.2603775436800D+01 0.2654374164640D+01 0.2705816824249D+01 + 0.2758112725590D+01 0.2811271107225D+01 0.2865301128002D+01 0.2920211858443D+01 + 0.2976012271854D+01 0.3032711235135D+01 0.3090317499294D+01 0.3148839689666D+01 + 0.3208286295814D+01 0.3268665661132D+01 0.3329985972130D+01 0.3392255247403D+01 + 0.3455481326284D+01 0.3519671857166D+01 0.3584834285516D+01 0.3650975841540D+01 + 0.3718103527540D+01 0.3786224104928D+01 0.3855344080910D+01 0.3925469694842D+01 + 0.3996606904248D+01 0.4068761370505D+01 0.4141938444201D+01 0.4216143150155D+01 + 0.4291380172106D+01 0.4367653837082D+01 0.4444968099432D+01 0.4523326524540D+01 + 0.4602732272224D+01 0.4683188079814D+01 0.4764696244923D+01 0.4847258607911D+01 + 0.4930876534058D+01 0.5015550895439D+01 0.5101282052526D+01 0.5188069835504D+01 + 0.5275913525340D+01 0.5364811834582D+01 0.5454762887935D+01 0.5545764202593D+01 + 0.5637812668364D+01 0.5730904527600D+01 0.5825035354930D+01 0.5920200036841D+01 + 0.6016392751096D+01 0.6113606946037D+01 0.6211835319763D+01 0.6311069799237D+01 + 0.6411301519318D+01 0.6512520801757D+01 0.6614717134178D+01 0.6717879149076D+01 + 0.6821994602856D+01 0.6927050354936D+01 0.7033032346971D+01 0.7139925582197D+01 + 0.7247714104955D+01 0.7356380980422D+01 0.7465908274590D+01 0.7576277034522D+01 + 0.7687467268944D+01 0.7799457929201D+01 0.7912226890625D+01 0.8025750934367D+01 + 0.8140005729731D+01 0.8254965817070D+01 0.8370604591283D+01 0.8486894285977D+01 + 0.8603805958343D+01 0.8721309474805D+01 0.8839373497487D+01 0.8957965471583D+01 + 0.9077051613664D+01 0.9196596901005D+01 0.9316565061973D+01 0.9436918567578D+01 + 0.9557618624205D+01 0.9678625167647D+01 0.9799896858462D+01 0.9921391078761D+01 + 0.1004306393048D+02 0.1016487023519D+02 0.1028676353561D+02 0.1040869609872D+02 + 0.1053061892078D+02 0.1065248173410D+02 0.1077423301584D+02 0.1089581999877D+02 + 0.1101718868413D+02 0.1113828385666D+02 0.1125904910191D+02 0.1137942682584D+02 + 0.1149935827678D+02 0.1161878356999D+02 0.1173764171462D+02 0.1185587064341D+02 + 0.1197340724503D+02 0.1209018739920D+02 0.1220614601465D+02 0.1232121706995D+02 + 0.1243533365740D+02 0.1254842802982D+02 0.1266043165050D+02 0.1277127524634D+02 + 0.1288088886404D+02 0.1298920192971D+02 0.1309614331160D+02 0.1320164138629D+02 + 0.1330562410812D+02 0.1340801908212D+02 0.1350875364026D+02 0.1360775492116D+02 + 0.1370494995324D+02 0.1380026574132D+02 0.1389362935662D+02 0.1398496803019D+02 + 0.1407420924981D+02 0.1416128086012D+02 0.1424611116627D+02 0.1432862904069D+02 + 0.1440876403324D+02 0.1448644648440D+02 0.1456160764164D+02 0.1463417977876D+02 + 0.1470409631813D+02 0.1477129195572D+02 0.1483570278883D+02 0.1489726644633D+02 + 0.1495592222127D+02 0.1501161120574D+02 0.1506427642781D+02 0.1511386299027D+02 + 0.1516031821110D+02 0.1520359176531D+02 0.1524363582812D+02 0.1528040521898D+02 + 0.1531385754641D+02 0.1534395335325D+02 0.1537065626208D+02 0.1539393312048D+02 + 0.1541375414585D+02 0.1543009306950D+02 0.1544292727951D+02 0.1545223796216D+02 + 0.1545801024155D+02 0.1546023331695D+02 0.1545890059744D+02 0.1545400983365D+02 + 0.1544556324596D+02 0.1543356764880D+02 0.1541803457065D+02 0.1539898036925D+02 + 0.1537642634154D+02 0.1535039882796D+02 0.1532092931044D+02 0.1528805450387D+02 + 0.1525181644030D+02 0.1521226254557D+02 0.1516944570778D+02 0.1512342433713D+02 + 0.1507426241669D+02 0.1502202954350D+02 0.1496680095964D+02 0.1490865757272D+02 + 0.1484768596530D+02 0.1478397839284D+02 0.1471763276969D+02 0.1464875264266D+02 + 0.1457744715182D+02 0.1450383097801D+02 0.1442802427679D+02 0.1435015259838D+02 + 0.1427034679327D+02 0.1418874290321D+02 0.1410548203722D+02 0.1402071023247D+02 + 0.1393457829969D+02 0.1384724165293D+02 0.1375886012364D+02 0.1366959775879D+02 + 0.1357962260304D+02 0.1348910646488D+02 0.1339822466686D+02 0.1330715577980D+02 + 0.1321608134121D+02 0.1312518555808D+02 0.1303465499419D+02 0.1294467824221D+02 + 0.1285544558101D+02 0.1276714861841D+02 0.1267997991994D+02 0.1259413262403D+02 + 0.1250980004419D+02 0.1242717525885D+02 0.1234645068948D+02 0.1226781766776D+02 + 0.1219146599257D+02 0.1211758347770D+02 0.1204635549121D+02 0.1197796448732D+02 + 0.1191258953197D+02 0.1185040582321D+02 0.1179158420730D+02 0.1173629069208D+02 + 0.1168468595856D+02 0.1163692487226D+02 0.1159315599549D+02 0.1155352110209D+02 + 0.1151815469598D+02 0.1148718353503D+02 0.1146072616178D+02 0.1143889244247D+02 + 0.1142178311602D+02 0.1140948935454D+02 0.1140209233686D+02 0.1139966283678D+02 + 0.1140226082774D+02 0.1140993510519D+02 0.1142272292875D+02 0.1144064968524D+02 + 0.1146372857460D+02 0.1149196031991D+02 0.1152533290326D+02 0.1156382132880D+02 + 0.1160738741454D+02 0.1165597961412D+02 0.1170953287012D+02 0.1176796849989D+02 + 0.1183119411535D+02 0.1189910357777D+02 0.1197157698856D+02 0.1204848071701D+02 + 0.1212966746596D+02 0.1221497637600D+02 0.1230423316888D+02 0.1239725033077D+02 + 0.1249382733567D+02 0.1259375090926D+02 0.1269679533346D+02 0.1280272279167D+02 + 0.1291128375448D+02 0.1302221740584D+02 0.1313525210912D+02 0.1325010591253D+02 + 0.1336648709337D+02 0.1348409474012D+02 0.1360261937149D+02 0.1372174359123D+02 + 0.1384114277758D+02 0.1396048580566D+02 0.1407943580155D+02 0.1419765092608D+02 + 0.1431478518661D+02 0.1443048927478D+02 0.1454441142812D+02 0.1465619831308D+02 + 0.1476549592746D+02 0.1487195051928D+02 0.1497520951989D+02 0.1507492248828D+02 + 0.1517074206398D+02 0.1526232492551D+02 0.1534933275145D+02 0.1543143318112D+02 + 0.1550830077157D+02 0.1557961794797D+02 0.1564507594396D+02 0.1570437572881D+02 + 0.1575722891823D+02 0.1580335866539D+02 0.1584250052899D+02 0.1587440331524D+02 + 0.1589882989033D+02 0.1591555796049D+02 0.1592438081630D+02 0.1592510803844D+02 + 0.1591756616179D+02 0.1590159929512D+02 0.1587706969359D+02 0.1584385828154D+02 + 0.1580186512290D+02 0.1575100983720D+02 0.1569123195871D+02 0.1562249123695D+02 + 0.1554476787665D+02 0.1545806271560D+02 0.1536239733893D+02 0.1525781412875D+02 + 0.1514437624809D+02 0.1502216755847D+02 0.1489129247063D+02 0.1475187572813D+02 + 0.1460406212401D+02 0.1444801615062D+02 0.1428392158332D+02 0.1411198099888D+02 + 0.1393241522964D+02 0.1374546275490D+02 0.1355137903119D+02 0.1335043576333D+02 + 0.1314292011864D+02 0.1292913388664D+02 0.1270939258714D+02 0.1248402452972D+02 + 0.1225336982785D+02 0.1201777937125D+02 0.1177761376017D+02 0.1153324220569D+02 + 0.1128504140014D+02 0.1103339436205D+02 0.1077868926027D+02 0.1052131822179D+02 + 0.1026167612835D+02 0.1000015940663D+02 0.9737164817090D+01 0.9473088246666D+01 + 0.9208323510392D+01 0.8943261167138D+01 0.8678287354606D+01 0.8413782648689D+01 + 0.8150120952198D+01 0.7887668417870D+01 0.7626782410424D+01 0.7367810512255D+01 + 0.7111089577147D+01 0.6856944836175D+01 0.6605689059620D+01 0.6357621778576D+01 + 0.6113028569417D+01 0.5872180404071D+01 0.5635333068605D+01 0.5402726652271D+01 + 0.5174585108689D+01 0.4951115890458D+01 0.4732509658013D+01 0.4518940063093D+01 + 0.4310563606744D+01 0.4107519571314D+01 0.3909930025455D+01 0.3717899900701D+01 + 0.3531517137795D+01 0.3350852900521D+01 0.3175961854415D+01 0.3006882507418D+01 + 0.2843637609166D+01 0.2686234605393D+01 0.2534666143602D+01 0.2388910626020D+01 + 0.2248932805599D+01 0.2114684420764D+01 0.1986104864410D+01 0.1863121882663D+01 + 0.1745652298807D+01 0.1633602757816D+01 0.1526870486911D+01 0.1425344067651D+01 + 0.1328904215091D+01 0.1237424559686D+01 0.1150772427713D+01 0.1068809616148D+01 + 0.9913931580887D+00 0.9183760750247D+00 0.8496081124357D+00 0.7849364554513D+00 + 0.7242064215293D+00 0.6672621273712D+00 0.6139471275574D+00 0.5641050226618D+00 + 0.5175800348878D+00 0.4742175495586D+00 0.4338646210828D+00 0.3963704423129D+00 + 0.3615867764997D+00 0.3293683513354D+00 0.2995732148544D+00 0.2720630532321D+00 + 0.2467034707815D+00 0.2233642326902D+00 0.2019194712763D+00 0.1822478567499D+00 + 0.1642327336682D+00 0.1477622244444D+00 0.1327293014336D+00 0.1190318292464D+00 + 0.1065725790655D+00 0.9525921682581D-01 0.8500426719540D-01 0.7572505534570D-01 + 0.6734362852856D-01 0.5978665949119D-01 0.5298533375213D-01 0.4687522273735D-01 + 0.4139614473480D-01 0.3649201557103D-01 0.3211069084453D-01 0.2820380147099D-01 + 0.2472658420543D-01 0.2163770870794D-01 0.1889910261478D-01 0.1647577596641D-01 + 0.1433564623066D-01 0.1244936504301D-01 0.1079014767040D-01 0.9333606088531D-02 + 0.8057586449521D-02 0.6942011605538D-02 0.5968729247262D-02 0.5121366113861D-02 + 0.4385188634413D-02 0.3746970269980D-02 0.3194865741265D-02 0.2718292249293D-02 + 0.2307817726031D-02 0.1955056088404D-02 0.1652569412799D-02 0.1393776897745D-02 + 0.1172870439853D-02 0.9847366120634D-03 0.8248848034661D-03 0.6893812560569D-03 + 0.5747887154298D-03 0.4781113990982D-03 0.3967449774979D-03 0.3284312582634D-03 + 0.2712172636576D-03 0.2234183935981D-03 0.1835853721449D-03 0.1504746831443D-03 + 0.1230222105786D-03 0.1003198106540D-03 0.8159455542106D-04 0.6619040144209D-04 + 0.5355205138722D-04 0.4321079120846D-04 0.3477210045803D-04 0.2790484818898D-04 + 0.2233190152246D-04 0.1782198824118D-04 0.1418266855132D-04 0.1125428434880D-04 + 0.8904766856498D-05 0.7025195313453D-05 0.5526010459652D-05 0.4333796852085D-05 + 0.3388557563637D-05 0.2641413563333D-05 0.2052668070841D-05 0.1590183444862D-05 + 0.1228024735392D-05 0.9453299398051D-06 0.7253722919424D-06 0.5547846237125D-06 + 0.4229200131023D-06 0.3213266143727D-06 0.2433177983142D-06 0.1836215545666D-06 + 0.1380955642703D-06 0.1034964778941D-06 0.7729376586493D-07 0.5752008209307D-07 + 0.4265142355148D-07 0.3151151106808D-07 0.2319578320089D-07 0.1701120974173D-07 + 0.1242881489534D-07 0.9046371073667D-08 0.6559198960071D-08 0.4737402476978D-08 + 0.3408191153158D-08 0.2442208093542D-08 0.1742998768590D-08 0.1238932286038D-08 + 0.8770296193333D-09 0.6182683290111D-09 0.4340255982013D-09 0.3033950772413D-09 + 0.2111715589818D-09 0.1463438404983D-09 0.1009726185101D-09 0.6935859066118D-10 + 0.4742849271888D-10 0.3228488955626D-10 0.2187547853929D-10 0.1475212866899D-10 + 0.9901881750809D-11 0.6613860882122D-11 0.4396644350124D-11 0.2908650000322D-11 + 0.1914873227728D-11 0.1254415200484D-11 0.8176535094916D-12 0.5302708391854D-12 + 0.3421370551355D-12 0.2196087836422D-12 0.1402231518601D-12 0.8906014768602D-13 + LSMS: xx z= 26. xvalws= 2.77074 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728402963D+02-0.5199725117641D+02-0.5199721792578D+02-0.5199718427293D+02 +-0.5199715021300D+02-0.5199711574107D+02-0.5199708085214D+02-0.5199704554119D+02 +-0.5199700980309D+02-0.5199697363268D+02-0.5199693702474D+02-0.5199689997397D+02 +-0.5199686247500D+02-0.5199682452243D+02-0.5199678611076D+02-0.5199674723444D+02 +-0.5199670788785D+02-0.5199666806529D+02-0.5199662776101D+02-0.5199658696918D+02 +-0.5199654568390D+02-0.5199650389922D+02-0.5199646160907D+02-0.5199641880734D+02 +-0.5199637548785D+02-0.5199633164434D+02-0.5199628727046D+02-0.5199624235979D+02 +-0.5199619690585D+02-0.5199615090205D+02-0.5199610434176D+02-0.5199605721822D+02 +-0.5199600952464D+02-0.5199596125410D+02-0.5199591239964D+02-0.5199586295419D+02 +-0.5199581291060D+02-0.5199576226162D+02-0.5199571099994D+02-0.5199565911815D+02 +-0.5199560660874D+02-0.5199555346411D+02-0.5199549967658D+02-0.5199544523837D+02 +-0.5199539014162D+02-0.5199533437834D+02-0.5199527794048D+02-0.5199522081989D+02 +-0.5199516300828D+02-0.5199510449731D+02-0.5199504527851D+02-0.5199498534331D+02 +-0.5199492468306D+02-0.5199486328897D+02-0.5199480115217D+02-0.5199473826367D+02 +-0.5199467461436D+02-0.5199461019507D+02-0.5199454499646D+02-0.5199447900910D+02 +-0.5199441222344D+02-0.5199434462984D+02-0.5199427621849D+02-0.5199420697954D+02 +-0.5199413690295D+02-0.5199406597858D+02-0.5199399419618D+02-0.5199392154537D+02 +-0.5199384801563D+02-0.5199377359634D+02-0.5199369827672D+02-0.5199362204589D+02 +-0.5199354489281D+02-0.5199346680633D+02-0.5199338777515D+02-0.5199330778784D+02 +-0.5199322683282D+02-0.5199314489839D+02-0.5199306197270D+02-0.5199297804374D+02 +-0.5199289309939D+02-0.5199280712733D+02-0.5199272011516D+02-0.5199263205027D+02 +-0.5199254291992D+02-0.5199245271123D+02-0.5199236141114D+02-0.5199226900644D+02 +-0.5199217548376D+02-0.5199208082958D+02-0.5199198503019D+02-0.5199188807175D+02 +-0.5199178994021D+02-0.5199169062139D+02-0.5199159010092D+02-0.5199148836424D+02 +-0.5199138539665D+02-0.5199128118323D+02-0.5199117570892D+02-0.5199106895845D+02 +-0.5199096091638D+02-0.5199085156707D+02-0.5199074089471D+02-0.5199062888326D+02 +-0.5199051551654D+02-0.5199040077813D+02-0.5199028465143D+02-0.5199016711964D+02 +-0.5199004816574D+02-0.5198992777253D+02-0.5198980592257D+02-0.5198968259824D+02 +-0.5198955778170D+02-0.5198943145487D+02-0.5198930359948D+02-0.5198917419701D+02 +-0.5198904322875D+02-0.5198891067574D+02-0.5198877651879D+02-0.5198864073848D+02 +-0.5198850331517D+02-0.5198836422896D+02-0.5198822345972D+02-0.5198808098707D+02 +-0.5198793679039D+02-0.5198779084882D+02-0.5198764314123D+02-0.5198749364622D+02 +-0.5198734234217D+02-0.5198718920716D+02-0.5198703421905D+02-0.5198687735537D+02 +-0.5198671859343D+02-0.5198655791024D+02-0.5198639528254D+02-0.5198623068679D+02 +-0.5198606409915D+02-0.5198589549550D+02-0.5198572485143D+02-0.5198555214224D+02 +-0.5198537734293D+02-0.5198520042816D+02-0.5198502137235D+02-0.5198484014954D+02 +-0.5198465673351D+02-0.5198447109769D+02-0.5198428321519D+02-0.5198409305883D+02 +-0.5198390060104D+02-0.5198370581396D+02-0.5198350866939D+02-0.5198330913876D+02 +-0.5198310719319D+02-0.5198290280341D+02-0.5198269593983D+02-0.5198248657249D+02 +-0.5198227467106D+02-0.5198206020484D+02-0.5198184314277D+02-0.5198162345340D+02 +-0.5198140110492D+02-0.5198117606510D+02-0.5198094830136D+02-0.5198071778068D+02 +-0.5198048446968D+02-0.5198024833454D+02-0.5198000934107D+02-0.5197976745462D+02 +-0.5197952264015D+02-0.5197927486220D+02-0.5197902408485D+02-0.5197877027176D+02 +-0.5197851338615D+02-0.5197825339081D+02-0.5197799024804D+02-0.5197772391971D+02 +-0.5197745436723D+02-0.5197718155151D+02-0.5197690543304D+02-0.5197662597177D+02 +-0.5197634312720D+02-0.5197605685833D+02-0.5197576712367D+02-0.5197547388122D+02 +-0.5197517708846D+02-0.5197487670236D+02-0.5197457267938D+02-0.5197426497542D+02 +-0.5197395354589D+02-0.5197363834563D+02-0.5197331932893D+02-0.5197299644952D+02 +-0.5197266966059D+02-0.5197233891476D+02-0.5197200416404D+02-0.5197166535990D+02 +-0.5197132245319D+02-0.5197097539418D+02-0.5197062413252D+02-0.5197026861727D+02 +-0.5196990879687D+02-0.5196954461909D+02-0.5196917603112D+02-0.5196880297948D+02 +-0.5196842541005D+02-0.5196804326804D+02-0.5196765649801D+02-0.5196726504383D+02 +-0.5196686884871D+02-0.5196646785514D+02-0.5196606200494D+02-0.5196565123919D+02 +-0.5196523549829D+02-0.5196481472189D+02-0.5196438884890D+02-0.5196395781753D+02 +-0.5196352156518D+02-0.5196308002855D+02-0.5196263314350D+02-0.5196218084518D+02 +-0.5196172306789D+02-0.5196125974518D+02-0.5196079080977D+02-0.5196031619354D+02 +-0.5195983582758D+02-0.5195934964214D+02-0.5195885756657D+02-0.5195835952942D+02 +-0.5195785545834D+02-0.5195734528011D+02-0.5195682892060D+02-0.5195630630481D+02 +-0.5195577735679D+02-0.5195524199969D+02-0.5195470015573D+02-0.5195415174616D+02 +-0.5195359669127D+02-0.5195303491041D+02-0.5195246632192D+02-0.5195189084316D+02 +-0.5195130839046D+02-0.5195071887917D+02-0.5195012222358D+02-0.5194951833693D+02 +-0.5194890713143D+02-0.5194828851819D+02-0.5194766240726D+02-0.5194702870759D+02 +-0.5194638732701D+02-0.5194573817222D+02-0.5194508114882D+02-0.5194441616121D+02 +-0.5194374311266D+02-0.5194306190525D+02-0.5194237243986D+02-0.5194167461616D+02 +-0.5194096833262D+02-0.5194025348643D+02-0.5193952997356D+02-0.5193879768871D+02 +-0.5193805652527D+02-0.5193730637535D+02-0.5193654712973D+02-0.5193577867788D+02 +-0.5193500090790D+02-0.5193421370652D+02-0.5193341695911D+02-0.5193261054963D+02 +-0.5193179436061D+02-0.5193096827316D+02-0.5193013216694D+02-0.5192928592013D+02 +-0.5192842940944D+02-0.5192756251004D+02-0.5192668509561D+02-0.5192579703828D+02 +-0.5192489820860D+02-0.5192398847556D+02-0.5192306770652D+02-0.5192213576726D+02 +-0.5192119252189D+02-0.5192023783287D+02-0.5191927156096D+02-0.5191829356524D+02 +-0.5191730370307D+02-0.5191630183005D+02-0.5191528780001D+02-0.5191426146503D+02 +-0.5191322267532D+02-0.5191217127930D+02-0.5191110712354D+02-0.5191003005272D+02 +-0.5190893990959D+02-0.5190783653503D+02-0.5190671976795D+02-0.5190558944528D+02 +-0.5190444540195D+02-0.5190328747089D+02-0.5190211548297D+02-0.5190092926700D+02 +-0.5189972864968D+02-0.5189851345560D+02-0.5189728350719D+02-0.5189603862472D+02 +-0.5189477862625D+02-0.5189350332759D+02-0.5189221254235D+02-0.5189090608179D+02 +-0.5188958375491D+02-0.5188824536834D+02-0.5188689072635D+02-0.5188551963080D+02 +-0.5188413188114D+02-0.5188272727435D+02-0.5188130560492D+02-0.5187986666482D+02 +-0.5187841024347D+02-0.5187693612772D+02-0.5187544410178D+02-0.5187393394724D+02 +-0.5187240544300D+02-0.5187085836524D+02-0.5186929248740D+02-0.5186770758014D+02 +-0.5186610341132D+02-0.5186447974591D+02-0.5186283634606D+02-0.5186117297093D+02 +-0.5185948937678D+02-0.5185778531685D+02-0.5185606054135D+02-0.5185431479744D+02 +-0.5185254782916D+02-0.5185075937741D+02-0.5184894917991D+02-0.5184711697117D+02 +-0.5184526248242D+02-0.5184338544160D+02-0.5184148557330D+02-0.5183956259875D+02 +-0.5183761623572D+02-0.5183564619854D+02-0.5183365219802D+02-0.5183163394142D+02 +-0.5182959113240D+02-0.5182752347098D+02-0.5182543065350D+02-0.5182331237255D+02 +-0.5182116831697D+02-0.5181899817174D+02-0.5181680161800D+02-0.5181457833297D+02 +-0.5181232798987D+02-0.5181005025795D+02-0.5180774480235D+02-0.5180541128413D+02 +-0.5180304936016D+02-0.5180065868310D+02-0.5179823890134D+02-0.5179578965895D+02 +-0.5179331059564D+02-0.5179080134665D+02-0.5178826154277D+02-0.5178569081025D+02 +-0.5178308877073D+02-0.5178045504121D+02-0.5177778923399D+02-0.5177509095659D+02 +-0.5177235981171D+02-0.5176959539717D+02-0.5176679730585D+02-0.5176396512563D+02 +-0.5176109843930D+02-0.5175819682457D+02-0.5175525985390D+02-0.5175228709457D+02 +-0.5174927810849D+02-0.5174623245221D+02-0.5174314967682D+02-0.5174002932792D+02 +-0.5173687094551D+02-0.5173367406395D+02-0.5173043821187D+02-0.5172716291215D+02 +-0.5172384768177D+02-0.5172049203182D+02-0.5171709546736D+02-0.5171365748739D+02 +-0.5171017758479D+02-0.5170665524617D+02-0.5170308995189D+02-0.5169948117592D+02 +-0.5169582838578D+02-0.5169213104249D+02-0.5168838860043D+02-0.5168460050732D+02 +-0.5168076620412D+02-0.5167688512494D+02-0.5167295669696D+02-0.5166898034036D+02 +-0.5166495546822D+02-0.5166088148646D+02-0.5165675779371D+02-0.5165258378128D+02 +-0.5164835883303D+02-0.5164408232529D+02-0.5163975362681D+02-0.5163537209858D+02 +-0.5163093709386D+02-0.5162644795799D+02-0.5162190402831D+02-0.5161730463415D+02 +-0.5161264909661D+02-0.5160793672858D+02-0.5160316683457D+02-0.5159833871062D+02 +-0.5159345164422D+02-0.5158850491424D+02-0.5158349779076D+02-0.5157842953502D+02 +-0.5157329939929D+02-0.5156810662682D+02-0.5156285045165D+02-0.5155753009857D+02 +-0.5155214478300D+02-0.5154669371088D+02-0.5154117607855D+02-0.5153559107266D+02 +-0.5152993787006D+02-0.5152421563767D+02-0.5151842353238D+02-0.5151256070096D+02 +-0.5150662627991D+02-0.5150061939535D+02-0.5149453916296D+02-0.5148838468777D+02 +-0.5148215506412D+02-0.5147584937554D+02-0.5146946669454D+02-0.5146300608264D+02 +-0.5145646659012D+02-0.5144984725596D+02-0.5144314710771D+02-0.5143636516137D+02 +-0.5142950042123D+02-0.5142255187982D+02-0.5141551851771D+02-0.5140839930344D+02 +-0.5140119319335D+02-0.5139389913149D+02-0.5138651604948D+02-0.5137904286634D+02 +-0.5137147848843D+02-0.5136382180931D+02-0.5135607170955D+02-0.5134822705665D+02 +-0.5134028670491D+02-0.5133224949527D+02-0.5132411425521D+02-0.5131587979859D+02 +-0.5130754492555D+02-0.5129910842232D+02-0.5129056906116D+02-0.5128192560017D+02 +-0.5127317678315D+02-0.5126432133956D+02-0.5125535798425D+02-0.5124628541740D+02 +-0.5123710232443D+02-0.5122780737574D+02-0.5121839922671D+02-0.5120887651745D+02 +-0.5119923787276D+02-0.5118948190193D+02-0.5117960719865D+02-0.5116961234085D+02 +-0.5115949589056D+02-0.5114925639380D+02-0.5113889238044D+02-0.5112840236408D+02 +-0.5111778484188D+02-0.5110703829447D+02-0.5109616118579D+02-0.5108515196301D+02 +-0.5107400905631D+02-0.5106273087889D+02-0.5105131582667D+02-0.5103976227836D+02 +-0.5102806859514D+02-0.5101623312071D+02-0.5100425418105D+02-0.5099213008436D+02 +-0.5097985912091D+02-0.5096743956297D+02-0.5095486966464D+02-0.5094214766176D+02 +-0.5092927177183D+02-0.5091624019384D+02-0.5090305110822D+02-0.5088970267672D+02 +-0.5087619304230D+02-0.5086252032900D+02-0.5084868264193D+02-0.5083467806710D+02 +-0.5082050467136D+02-0.5080616050232D+02-0.5079164358822D+02-0.5077695193792D+02 +-0.5076208354076D+02-0.5074703636655D+02-0.5073180836542D+02-0.5071639746782D+02 +-0.5070080158445D+02-0.5068501860613D+02-0.5066904640389D+02-0.5065288282874D+02 +-0.5063652571181D+02-0.5061997286414D+02-0.5060322207678D+02-0.5058627112067D+02 +-0.5056911774669D+02-0.5055175968555D+02-0.5053419464788D+02-0.5051642032411D+02 +-0.5049843438458D+02-0.5048023447945D+02-0.5046181823877D+02-0.5044318327247D+02 +-0.5042432717038D+02-0.5040524750226D+02-0.5038594181787D+02-0.5036640764694D+02 +-0.5034664249930D+02-0.5032664386488D+02-0.5030640921379D+02-0.5028593599640D+02 +-0.5026522164341D+02-0.5024426356594D+02-0.5022305915564D+02-0.5020160578474D+02 +-0.5017990080623D+02-0.5015794155393D+02-0.5013572534263D+02-0.5011324946826D+02 +-0.5009051120796D+02-0.5006750782030D+02-0.5004423654542D+02-0.5002069460521D+02 +-0.4999687920344D+02-0.4997278752603D+02-0.4994841674120D+02-0.4992376399966D+02 +-0.4989882643488D+02-0.4987360116327D+02-0.4984808528443D+02-0.4982227588141D+02 +-0.4979617002094D+02-0.4976976475371D+02-0.4974305711462D+02-0.4971604412309D+02 +-0.4968872278335D+02-0.4966109008469D+02-0.4963314300185D+02-0.4960487849528D+02 +-0.4957629351145D+02-0.4954738498327D+02-0.4951814983035D+02-0.4948858495939D+02 +-0.4945868726453D+02-0.4942845362775D+02-0.4939788091919D+02-0.4936696599757D+02 +-0.4933570571061D+02-0.4930409689534D+02-0.4927213637859D+02-0.4923982097740D+02 +-0.4920714749935D+02-0.4917411274309D+02-0.4914071349870D+02-0.4910694654815D+02 +-0.4907280866573D+02-0.4903829661848D+02-0.4900340716666D+02-0.4896813706420D+02 +-0.4893248305909D+02-0.4889644189392D+02-0.4886001030623D+02-0.4882318502909D+02 +-0.4878596279141D+02-0.4874834031849D+02-0.4871031433244D+02-0.4867188155262D+02 +-0.4863303869609D+02-0.4859378247804D+02-0.4855410961222D+02-0.4851401681140D+02 +-0.4847350078774D+02-0.4843255825325D+02-0.4839118592018D+02-0.4834938050138D+02 +-0.4830713871075D+02-0.4826445726356D+02-0.4822133287682D+02-0.4817776226967D+02 +-0.4813374216365D+02-0.4808926928306D+02-0.4804434035526D+02-0.4799895211091D+02 +-0.4795310128431D+02-0.4790678461358D+02-0.4785999884093D+02-0.4781274071282D+02 +-0.4776500698020D+02-0.4771679439861D+02-0.4766809972836D+02-0.4761891973461D+02 +-0.4756925118748D+02-0.4751909086208D+02-0.4746843553857D+02-0.4741728200213D+02 +-0.4736562704295D+02-0.4731346745620D+02-0.4726080004188D+02-0.4720762160479D+02 +-0.4715392895431D+02-0.4709971890425D+02-0.4704498827268D+02-0.4698973388163D+02 +-0.4693395255690D+02-0.4687764112767D+02-0.4682079642628D+02-0.4676341528777D+02 +-0.4670549454962D+02-0.4664703105122D+02-0.4658802163351D+02-0.4652846313853D+02 +-0.4646835240891D+02-0.4640768628735D+02-0.4634646161617D+02-0.4628467523671D+02 +-0.4622232398885D+02-0.4615940471037D+02-0.4609591423645D+02-0.4603184939910D+02 +-0.4596720702657D+02-0.4590198394276D+02-0.4583617696675D+02-0.4576978291218D+02 +-0.4570279858676D+02-0.4563522079176D+02-0.4556704632159D+02-0.4549827196328D+02 +-0.4542889449617D+02-0.4535891069156D+02-0.4528831731237D+02-0.4521711111299D+02 +-0.4514528883912D+02-0.4507284722768D+02-0.4499978300686D+02-0.4492609289624D+02 +-0.4485177360700D+02-0.4477682184233D+02-0.4470123429783D+02-0.4462500766219D+02 +-0.4454813861790D+02-0.4447062384219D+02-0.4439246000814D+02-0.4431364378589D+02 +-0.4423417184413D+02-0.4415404085174D+02-0.4407324747964D+02-0.4399178840285D+02 +-0.4390966030283D+02-0.4382685986996D+02-0.4374338380636D+02-0.4365922882888D+02 +-0.4357439167239D+02-0.4348886909331D+02-0.4340265787340D+02-0.4331575482384D+02 +-0.4322815678953D+02-0.4313986065369D+02-0.4305086334268D+02-0.4296116183110D+02 +-0.4287075314713D+02-0.4277963437808D+02-0.4268780267613D+02-0.4259525526436D+02 +-0.4250198944278D+02-0.4240800259471D+02-0.4231329219311D+02-0.4221785580702D+02 +-0.4212169110814D+02-0.4202479587724D+02-0.4192716801066D+02-0.4182880552657D+02 +-0.4172970657123D+02-0.4162986942478D+02-0.4152929250699D+02-0.4142797438248D+02 +-0.4132591376546D+02-0.4122310952415D+02-0.4111956068435D+02-0.4101526643252D+02 +-0.4091022611799D+02-0.4080443925436D+02-0.4069790551997D+02-0.4059062475744D+02 +-0.4048259697200D+02-0.4037382232884D+02-0.4026430114924D+02-0.4015403390548D+02 +-0.4004302121449D+02-0.3993126383031D+02-0.3981876263529D+02-0.3970551863000D+02 +-0.3959153292214D+02-0.3947680671418D+02-0.3936134129010D+02-0.3924513800125D+02 +-0.3912819825140D+02-0.3901052348125D+02-0.3889211515259D+02-0.3877297473220D+02 +-0.3865310367583D+02-0.3853250341248D+02-0.3841117532917D+02-0.3828912075654D+02 +-0.3816634095549D+02-0.3804283710513D+02-0.3791861029232D+02-0.3779366150300D+02 +-0.3766799161555D+02-0.3754160139636D+02-0.3741449149782D+02-0.3728666245883D+02 +-0.3715811470790D+02-0.3702884856900D+02-0.3689886427010D+02-0.3676816195438D+02 +-0.3663674169408D+02-0.3650460350690D+02-0.3637174737474D+02-0.3623817326473D+02 +-0.3610388115218D+02-0.3596887104531D+02-0.3583314301154D+02-0.3569669720495D+02 +-0.3555953389464D+02-0.3542165349386D+02-0.3528305658922D+02-0.3514374397011D+02 +-0.3500371665774D+02-0.3486297593358D+02-0.3472152336690D+02-0.3457936084122D+02 +-0.3443649057928D+02-0.3429291516643D+02-0.3414863757211D+02-0.3400366116934D+02 +-0.3385798975190D+02-0.3371162754922D+02-0.3356457923876D+02-0.3341684995570D+02 +-0.3326844530007D+02-0.3311937134098D+02-0.3296963461820D+02-0.3281924214079D+02 +-0.3266820138293D+02-0.3251652027694D+02-0.3236420720350D+02-0.3221127097903D+02 +-0.3205772084042D+02-0.3190356642710D+02-0.3174881776049D+02-0.3159348522098D+02 +-0.3143757952257D+02-0.3128111168511D+02-0.3112409300454D+02-0.3096653502093D+02 +-0.3080844948479D+02-0.3064984832153D+02-0.3049074359439D+02-0.3033114746593D+02 +-0.3017107215833D+02-0.3001052991254D+02-0.2984953294675D+02-0.2968809341400D+02 +-0.2952622335948D+02-0.2936393467762D+02-0.2920123906907D+02-0.2903814799805D+02 +-0.2887467265011D+02-0.2871082389066D+02-0.2854661222446D+02-0.2838204775647D+02 +-0.2821714015409D+02-0.2805189861135D+02-0.2788633181514D+02-0.2772044791378D+02 +-0.2755425448842D+02-0.2738775852723D+02-0.2722096640307D+02-0.2705388385454D+02 +-0.2688651597109D+02-0.2671886718221D+02-0.2655094125117D+02-0.2638274127348D+02 +-0.2621426968047D+02-0.2604552824823D+02-0.2587651811214D+02-0.2570723978730D+02 +-0.2553769319514D+02-0.2536787769632D+02-0.2519779213021D+02-0.2502743486110D+02 +-0.2485680383129D+02-0.2468589662112D+02-0.2451471051601D+02-0.2434324258050D+02 +-0.2417148973924D+02-0.2399944886481D+02-0.2382711687194D+02-0.2365449081810D+02 +-0.2348156800981D+02-0.2330834611404D+02-0.2313482327422D+02-0.2296099822964D+02 +-0.2278687043744D+02-0.2261244019567D+02-0.2243770876615D+02-0.2226267849517D+02 +-0.2208735293014D+02-0.2191173693001D+02-0.2173583676674D+02-0.2155966021537D+02 +-0.2138321662948D+02-0.2120651699903D+02-0.2102957398727D+02-0.2085240194340D+02 +-0.2067501688787D+02-0.2049743646710D+02-0.2031967987514D+02-0.2014176773999D+02 +-0.1996372197331D+02-0.1978556558301D+02-0.1960732244950D+02-0.1942901706755D+02 +-0.1925067425750D+02-0.1907231885074D+02-0.1889397535633D+02-0.1871566761696D+02 +-0.1853741846374D+02-0.1835924938052D+02-0.1818118018868D+02-0.1800322876380D+02 +-0.1782541079491D+02-0.1764773959582D+02-0.1747022597686D+02-0.1729287818264D+02 +-0.1711570189939D+02-0.1693870033244D+02-0.1676187435187D+02-0.1658522270158D+02 +-0.1640874226459D+02-0.1623242837596D+02-0.1605627517269D+02-0.1588027596970D+02 +-0.1570442365062D+02-0.1552871106216D+02-0.1535313140208D+02-0.1517767859145D+02 +-0.1500234762341D+02-0.1482713488228D+02-0.1465203842815D+02-0.1447705824363D+02 +-0.1430219644106D+02-0.1412745742929D+02-0.1395284804054D+02-0.1377837761854D+02 +-0.1360405806987D+02-0.1342990388081D+02-0.1325593210249D+02-0.1308216230731D+02 +-0.1290861651951D+02-0.1273531912305D+02-0.1256229674959D+02-0.1238957814960D+02 +-0.1221719404907D+02-0.1204517699438D+02-0.1187356118783D+02-0.1170238231558D+02 +-0.1153167737042D+02-0.1136148447069D+02-0.1119184267735D+02-0.1102279181034D+02 +-0.1085437226576D+02-0.1068662483495D+02-0.1051959052659D+02-0.1035331039265D+02 +-0.1018782535928D+02-0.1002317606321D+02-0.9859402694342D+01-0.9696544845323D+01 +-0.9534641368482D+01-0.9373730240659D+01-0.9213848436346D+01-0.9055031809511D+01 +-0.8897314984394D+01-0.8740731255549D+01-0.8585312497336D+01-0.8431089083029D+01 +-0.8278089813661D+01-0.8126341856676D+01-0.7975870694439D+01-0.7826700082584D+01 +-0.7678852018171D+01-0.7532346717566D+01-0.7387202603932D+01-0.7243436304187D+01 +-0.7101062655233D+01-0.6960094719270D+01-0.6820543807924D+01-0.6682419514939D+01 +-0.6545729757123D+01-0.6410480823229D+01-0.6276677430423D+01-0.6144322787958D+01 +-0.6013418667669D+01-0.5883965480867D+01-0.5755962361193D+01-0.5629407252975D+01 +-0.5504297004604D+01-0.5380627466436D+01-0.5258393592702D+01-0.5137589546863D+01 +-0.5018208809882D+01-0.4900244290793D+01-0.4783688438971D+01-0.4668533357470D+01 +-0.4554770916754D+01-0.4442392868124D+01-0.4331390956131D+01-0.4221757029192D+01 +-0.4113483147635D+01-0.4006561688322D+01-0.3900985445011D+01-0.3796747723533D+01 +-0.3693842430876D+01-0.3592264157211D+01-0.3492008249906D+01-0.3393070878541D+01 +-0.3295449089976D+01-0.3199140852531D+01-0.3104145088414D+01-0.3010461693592D+01 +-0.2918091544431D+01-0.2827036490592D+01-0.2737299333835D+01-0.2648883792669D+01 +-0.2561794453010D+01-0.2476036705393D+01-0.2391616669610D+01-0.2308541108029D+01 +-0.2226817329318D+01-0.2146453084634D+01-0.2067456458802D+01-0.1989835759339D+01 +-0.1913599406514D+01-0.1838755827812D+01-0.1765313360391D+01-0.1693280165020D+01 +-0.1622664154978D+01-0.1553472943063D+01-0.1485713809518D+01-0.1419393693186D+01 +-0.1354519207570D+01-0.1291096682842D+01-0.1229132234097D+01-0.1168631855453D+01 +-0.1109601538882D+01-0.1052047416050D+01-0.9959759208814D+00-0.9413939701484D+00 +-0.8883091590719D+00-0.8367299687430D+00-0.7866659821253D+00-0.7381281054637D+00 +-0.6911287920896D+00-0.6456822658698D+00-0.6018047418553D+00-0.5595146420441D+00 +-0.5188328045500D+00-0.4797826848498D+00-0.4423905481512D+00-0.4066856522662D+00 +-0.3727004206897D+00-0.3404706058472D+00-0.3100354427093D+00-0.2814377931599D+00 +-0.2547240189175D+00 + 0.0000000000000D+00 + 1012 0.2770741520224D+01 + 0.2150927949039D-04 0.2202124536575D-04 0.2254539478646D-04 0.2308201760180D-04 + 0.2363141055333D-04 0.2419387743865D-04 0.2476972927906D-04 0.2535928449121D-04 + 0.2596286906285D-04 0.2658081673262D-04 0.2721346917432D-04 0.2786117618535D-04 + 0.2852429587973D-04 0.2920319488569D-04 0.2989824854795D-04 0.3060984113473D-04 + 0.3133836604977D-04 0.3208422604934D-04 0.3284783346437D-04 0.3362961042788D-04 + 0.3442998910781D-04 0.3524941194536D-04 0.3608833189898D-04 0.3694721269416D-04 + 0.3782652907911D-04 0.3872676708658D-04 0.3964842430179D-04 0.4059201013679D-04 + 0.4155804611131D-04 0.4254706614023D-04 0.4355961682789D-04 0.4459625776943D-04 + 0.4565756185917D-04 0.4674411560639D-04 0.4785651945856D-04 0.4899538813222D-04 + 0.5016135095172D-04 0.5135505219602D-04 0.5257715145361D-04 0.5382832398596D-04 + 0.5510926109951D-04 0.5642067052648D-04 0.5776327681476D-04 0.5913782172693D-04 + 0.6054506464885D-04 0.6198578300785D-04 0.6346077270088D-04 0.6497084853274D-04 + 0.6651684466474D-04 0.6809961507398D-04 0.6972003402351D-04 0.7137899654355D-04 + 0.7307741892426D-04 0.7481623921999D-04 0.7659641776564D-04 0.7841893770513D-04 + 0.8028480553242D-04 0.8219505164534D-04 0.8415073091254D-04 0.8615292325379D-04 + 0.8820273423416D-04 0.9030129567206D-04 0.9244976626185D-04 0.9464933221109D-04 + 0.9690120789284D-04 0.9920663651351D-04 0.1015668907964D-03 0.1039832736813D-03 + 0.1064571190411D-03 0.1089897924148D-03 0.1115826917580D-03 0.1142372482113D-03 + 0.1169549268870D-03 0.1197372276738D-03 0.1225856860613D-03 0.1255018739831D-03 + 0.1284874006808D-03 0.1315439135877D-03 0.1346730992336D-03 0.1378766841712D-03 + 0.1411564359238D-03 0.1445141639563D-03 0.1479517206680D-03 0.1514710024102D-03 + 0.1550739505263D-03 0.1587625524179D-03 0.1625388426349D-03 0.1664049039925D-03 + 0.1703628687133D-03 0.1744149195974D-03 0.1785632912194D-03 0.1828102711544D-03 + 0.1871582012321D-03 0.1916094788209D-03 0.1961665581427D-03 0.2008319516176D-03 + 0.2056082312418D-03 0.2104980299966D-03 0.2155040432913D-03 0.2206290304405D-03 + 0.2258758161753D-03 0.2312472921908D-03 0.2367464187300D-03 0.2423762262044D-03 + 0.2481398168542D-03 0.2540403664457D-03 0.2600811260106D-03 0.2662654236245D-03 + 0.2725966662290D-03 0.2790783414953D-03 0.2857140197324D-03 0.2925073558401D-03 + 0.2994620913080D-03 0.3065820562611D-03 0.3138711715547D-03 0.3213334509168D-03 + 0.3289730031429D-03 0.3367940343406D-03 0.3448008502286D-03 0.3529978584881D-03 + 0.3613895711713D-03 0.3699806071650D-03 0.3787756947128D-03 0.3877796739964D-03 + 0.3969974997780D-03 0.4064342441040D-03 0.4160950990725D-03 0.4259853796663D-03 + 0.4361105266519D-03 0.4464761095462D-03 0.4570878296540D-03 0.4679515231757D-03 + 0.4790731643881D-03 0.4904588689006D-03 0.5021148969868D-03 0.5140476569946D-03 + 0.5262637088364D-03 0.5387697675611D-03 0.5515727070097D-03 0.5646795635561D-03 + 0.5780975399370D-03 0.5918340091694D-03 0.6058965185620D-03 0.6202927938188D-03 + 0.6350307432396D-03 0.6501184620192D-03 0.6655642366457D-03 0.6813765494038D-03 + 0.6975640829812D-03 0.7141357251847D-03 0.7311005737650D-03 0.7484679413557D-03 + 0.7662473605260D-03 0.7844485889531D-03 0.8030816147148D-03 0.8221566617048D-03 + 0.8416841951763D-03 0.8616749274129D-03 0.8821398235337D-03 0.9030901074324D-03 + 0.9245372678559D-03 0.9464930646236D-03 0.9689695349932D-03 0.9919790001731D-03 + 0.1015534071988D-02 0.1039647659698D-02 0.1064332976981D-02 0.1089603549068D-02 + 0.1115473220057D-02 0.1141956160389D-02 0.1169066874495D-02 0.1196820208634D-02 + 0.1225231358897D-02 0.1254315879409D-02 0.1284089690715D-02 0.1314569088366D-02 + 0.1345770751696D-02 0.1377711752814D-02 0.1410409565795D-02 0.1443882076088D-02 + 0.1478147590144D-02 0.1513224845264D-02 0.1549133019674D-02 0.1585891742841D-02 + 0.1623521106018D-02 0.1662041673040D-02 0.1701474491365D-02 0.1741841103378D-02 + 0.1783163557945D-02 0.1825464422244D-02 0.1868766793867D-02 0.1913094313196D-02 + 0.1958471176071D-02 0.2004922146751D-02 0.2052472571166D-02 0.2101148390486D-02 + 0.2150976154989D-02 0.2201983038264D-02 0.2254196851731D-02 0.2307646059493D-02 + 0.2362359793542D-02 0.2418367869301D-02 0.2475700801533D-02 0.2534389820612D-02 + 0.2594466889165D-02 0.2655964719104D-02 0.2718916789042D-02 0.2783357362106D-02 + 0.2849321504172D-02 0.2916845102501D-02 0.2985964884814D-02 0.3056718438800D-02 + 0.3129144232066D-02 0.3203281632551D-02 0.3279170929405D-02 0.3356853354336D-02 + 0.3436371103460D-02 0.3517767359634D-02 0.3601086315312D-02 0.3686373195913D-02 + 0.3773674283724D-02 0.3863036942351D-02 0.3954509641719D-02 0.4048141983652D-02 + 0.4143984728019D-02 0.4242089819491D-02 0.4342510414893D-02 0.4445300911185D-02 + 0.4550516974067D-02 0.4658215567249D-02 0.4768454982366D-02 0.4881294869584D-02 + 0.4996796268890D-02 0.5115021642093D-02 0.5236034905549D-02 0.5359901463622D-02 + 0.5486688242898D-02 0.5616463727181D-02 0.5749297993262D-02 0.5885262747508D-02 + 0.6024431363262D-02 0.6166878919093D-02 0.6312682237899D-02 0.6461919926891D-02 + 0.6614672418475D-02 0.6771022012045D-02 0.6931052916716D-02 0.7094851295016D-02 + 0.7262505307545D-02 0.7434105158642D-02 0.7609743143066D-02 0.7789513693721D-02 + 0.7973513430440D-02 0.8161841209859D-02 0.8354598176397D-02 0.8551887814376D-02 + 0.8753816001287D-02 0.8960491062250D-02 0.9172023825667D-02 0.9388527680122D-02 + 0.9610118632529D-02 0.9836915367568D-02 0.1006903930843D-01 0.1030661467892D-01 + 0.1054976856688D-01 0.1079863098909D-01 0.1105333495749D-01 0.1131401654696D-01 + 0.1158081496451D-01 0.1185387262003D-01 0.1213333519856D-01 0.1241935173418D-01 + 0.1271207468545D-01 0.1301166001257D-01 0.1331826725616D-01 0.1363205961778D-01 + 0.1395320404221D-01 0.1428187130150D-01 0.1461823608081D-01 0.1496247706623D-01 + 0.1531477703430D-01 0.1567532294367D-01 0.1604430602860D-01 0.1642192189452D-01 + 0.1680837061563D-01 0.1720385683464D-01 0.1760858986456D-01 0.1802278379280D-01 + 0.1844665758734D-01 0.1888043520531D-01 0.1932434570378D-01 0.1977862335297D-01 + 0.2024350775185D-01 0.2071924394615D-01 0.2120608254895D-01 0.2170427986376D-01 + 0.2221409801021D-01 0.2273580505238D-01 0.2326967512987D-01 0.2381598859160D-01 + 0.2437503213237D-01 0.2494709893234D-01 0.2553248879941D-01 0.2613150831454D-01 + 0.2674447098014D-01 0.2737169737147D-01 0.2801351529124D-01 0.2867025992742D-01 + 0.2934227401421D-01 0.3002990799646D-01 0.3073352019732D-01 0.3145347698951D-01 + 0.3219015296988D-01 0.3294393113773D-01 0.3371520307664D-01 0.3450436914006D-01 + 0.3531183864059D-01 0.3613803004319D-01 0.3698337116219D-01 0.3784829936233D-01 + 0.3873326176383D-01 0.3963871545150D-01 0.4056512768813D-01 0.4151297613205D-01 + 0.4248274905905D-01 0.4347494558865D-01 0.4449007591493D-01 0.4552866154180D-01 + 0.4659123552298D-01 0.4767834270657D-01 0.4879053998454D-01 0.4992839654695D-01 + 0.5109249414114D-01 0.5228342733595D-01 0.5350180379101D-01 0.5474824453121D-01 + 0.5602338422639D-01 0.5732787147645D-01 0.5866236910176D-01 0.6002755443915D-01 + 0.6142411964345D-01 0.6285277199472D-01 0.6431423421119D-01 0.6580924476805D-01 + 0.6733855822219D-01 0.6890294554290D-01 0.7050319444864D-01 0.7214010975008D-01 + 0.7381451369925D-01 0.7552724634520D-01 0.7727916589591D-01 0.7907114908690D-01 + 0.8090409155624D-01 0.8277890822643D-01 0.8469653369292D-01 0.8665792261951D-01 + 0.8866405014071D-01 0.9071591227111D-01 0.9281452632182D-01 0.9496093132410D-01 + 0.9715618846031D-01 0.9940138150208D-01 0.1016976172560D+00 0.1040460260169D+00 + 0.1064477620282D+00 0.1089040039508D+00 0.1114159553388D+00 0.1139848451236D+00 + 0.1166119281054D+00 0.1192984854532D+00 0.1220458252122D+00 0.1248552828197D+00 + 0.1277282216288D+00 0.1306660334408D+00 0.1336701390448D+00 0.1367419887670D+00 + 0.1398830630269D+00 0.1430948729031D+00 0.1463789607067D+00 0.1497369005636D+00 + 0.1531702990050D+00 0.1566807955666D+00 0.1602700633964D+00 0.1639398098711D+00 + 0.1676917772207D+00 0.1715277431623D+00 0.1754495215419D+00 0.1794589629856D+00 + 0.1835579555582D+00 0.1877484254317D+00 0.1920323375616D+00 0.1964116963718D+00 + 0.2008885464482D+00 0.2054649732406D+00 0.2101431037732D+00 0.2149251073635D+00 + 0.2198131963488D+00 0.2248096268222D+00 0.2299166993754D+00 0.2351367598503D+00 + 0.2404722000984D+00 0.2459254587480D+00 0.2514990219789D+00 0.2571954243047D+00 + 0.2630172493626D+00 0.2689671307106D+00 0.2750477526311D+00 0.2812618509418D+00 + 0.2876122138134D+00 0.2941016825931D+00 0.3007331526352D+00 0.3075095741362D+00 + 0.3144339529771D+00 0.3215093515700D+00 0.3287388897102D+00 0.3361257454325D+00 + 0.3436731558729D+00 0.3513844181328D+00 0.3592628901485D+00 0.3673119915621D+00 + 0.3755352045968D+00 0.3839360749336D+00 0.3925182125899D+00 0.4012852927993D+00 + 0.4102410568930D+00 0.4193893131804D+00 0.4287339378299D+00 0.4382788757486D+00 + 0.4480281414604D+00 0.4579858199819D+00 0.4681560676951D+00 0.4785431132164D+00 + 0.4891512582614D+00 0.4999848785043D+00 0.5110484244305D+00 0.5223464221834D+00 + 0.5338834744021D+00 0.5456642610510D+00 0.5576935402392D+00 0.5699761490289D+00 + 0.5825170042325D+00 0.5953211031952D+00 0.6083935245653D+00 0.6217394290472D+00 + 0.6353640601390D+00 0.6492727448516D+00 0.6634708944082D+00 0.6779640049238D+00 + 0.6927576580616D+00 0.7078575216668D+00 0.7232693503742D+00 0.7389989861895D+00 + 0.7550523590420D+00 0.7714354873073D+00 0.7881544782973D+00 0.8052155287175D+00 + 0.8226249250876D+00 0.8403890441249D+00 0.8585143530879D+00 0.8770074100784D+00 + 0.8958748642992D+00 0.9151234562658D+00 0.9347600179702D+00 0.9547914729931D+00 + 0.9752248365635D+00 0.9960672155622D+00 0.1017325808468D+01 0.1039007905241D+01 + 0.1061120887144D+01 0.1083672226499D+01 0.1106669486370D+01 0.1130120320176D+01 + 0.1154032471231D+01 0.1178413772204D+01 0.1203272144493D+01 0.1228615597523D+01 + 0.1254452227950D+01 0.1280790218774D+01 0.1307637838359D+01 0.1335003439353D+01 + 0.1362895457506D+01 0.1391322410385D+01 0.1420292895972D+01 0.1449815591159D+01 + 0.1479899250115D+01 0.1510552702537D+01 0.1541784851777D+01 0.1573604672833D+01 + 0.1606021210210D+01 0.1639043575644D+01 0.1672680945677D+01 0.1706942559091D+01 + 0.1741837714186D+01 0.1777375765901D+01 0.1813566122779D+01 0.1850418243757D+01 + 0.1887941634794D+01 0.1926145845317D+01 0.1965040464488D+01 0.2004635117287D+01 + 0.2044939460400D+01 0.2085963177919D+01 0.2127715976829D+01 0.2170207582300D+01 + 0.2213447732763D+01 0.2257446174769D+01 0.2302212657626D+01 0.2347756927812D+01 + 0.2394088723154D+01 0.2441217766767D+01 0.2489153760756D+01 0.2537906379665D+01 + 0.2587485263675D+01 0.2637900011547D+01 0.2689160173295D+01 0.2741275242598D+01 + 0.2794254648931D+01 0.2848107749430D+01 0.2902843820459D+01 0.2958472048904D+01 + 0.3015001523163D+01 0.3072441223848D+01 0.3130800014182D+01 0.3190086630094D+01 + 0.3250309670002D+01 0.3311477584285D+01 0.3373598664440D+01 0.3436681031917D+01 + 0.3500732626634D+01 0.3565761195166D+01 0.3631774278604D+01 0.3698779200090D+01 + 0.3766783052007D+01 0.3835792682854D+01 0.3905814683769D+01 0.3976855374728D+01 + 0.4048920790399D+01 0.4122016665671D+01 0.4196148420834D+01 0.4271321146438D+01 + 0.4347539587809D+01 0.4424808129241D+01 0.4503130777854D+01 0.4582511147131D+01 + 0.4662952440136D+01 0.4744457432406D+01 0.4827028454547D+01 0.4910667374509D+01 + 0.4995375579573D+01 0.5081153958042D+01 0.5168002880655D+01 0.5255922181721D+01 + 0.5344911139992D+01 0.5434968459290D+01 0.5526092248881D+01 0.5618280003639D+01 + 0.5711528583982D+01 0.5805834195616D+01 0.5901192369103D+01 0.5997597939257D+01 + 0.6095045024395D+01 0.6193527005472D+01 0.6293036505099D+01 0.6393565366487D+01 + 0.6495104632331D+01 0.6597644523660D+01 0.6701174418681D+01 0.6805682831645D+01 + 0.6911157391760D+01 0.7017584822191D+01 0.7124950919171D+01 0.7233240531258D+01 + 0.7342437538781D+01 0.7452524833500D+01 0.7563484298530D+01 0.7675296788562D+01 + 0.7787942110430D+01 0.7901399004058D+01 0.8015645123842D+01 0.8130657020509D+01 + 0.8246410123503D+01 0.8362878723950D+01 0.8480035958250D+01 0.8597853792358D+01 + 0.8716303006799D+01 0.8835353182487D+01 0.8954972687391D+01 0.9075128664130D+01 + 0.9195787018538D+01 0.9316912409273D+01 0.9438468238543D+01 0.9560416644000D+01 + 0.9682718491880D+01 0.9805333371460D+01 0.9928219590896D+01 0.1005133417453D+02 + 0.1017463286171D+02 0.1029807010722D+02 0.1042159908344D+02 0.1054517168417D+02 + 0.1066873853037D+02 0.1079224897780D+02 0.1091565112659D+02 0.1103889183301D+02 + 0.1116191672323D+02 0.1128467020944D+02 0.1140709550823D+02 0.1152913466133D+02 + 0.1165072855885D+02 0.1177181696506D+02 0.1189233854680D+02 0.1201223090454D+02 + 0.1213143060625D+02 0.1224987322407D+02 0.1236749337400D+02 0.1248422475837D+02 + 0.1260000021157D+02 0.1271475174875D+02 0.1282841061773D+02 0.1294090735413D+02 + 0.1305217183979D+02 0.1316213336451D+02 0.1327072069111D+02 0.1337786212400D+02 + 0.1348348558110D+02 0.1358751866928D+02 0.1368988876325D+02 0.1379052308804D+02 + 0.1388934880491D+02 0.1398629310084D+02 0.1408128328150D+02 0.1417424686776D+02 + 0.1426511169568D+02 0.1435380601989D+02 0.1444025862047D+02 0.1452439891313D+02 + 0.1460615706273D+02 0.1468546410000D+02 0.1476225204147D+02 0.1483645401237D+02 + 0.1490800437259D+02 0.1497683884540D+02 0.1504289464893D+02 0.1510611063019D+02 + 0.1516642740155D+02 0.1522378747941D+02 0.1527813542502D+02 0.1532941798703D+02 + 0.1537758424592D+02 0.1542258575964D+02 0.1546437671057D+02 0.1550291405346D+02 + 0.1553815766392D+02 0.1557007048740D+02 0.1559861868825D+02 0.1562377179849D+02 + 0.1564550286611D+02 0.1566378860245D+02 0.1567860952827D+02 0.1568995011828D+02 + 0.1569779894358D+02 0.1570214881171D+02 0.1570299690387D+02 0.1570034490889D+02 + 0.1569419915342D+02 0.1568457072811D+02 0.1567147560898D+02 0.1565493477391D+02 + 0.1563497431333D+02 0.1561162553504D+02 0.1558492506233D+02 0.1555491492507D+02 + 0.1552164264320D+02 0.1548516130217D+02 0.1544552961962D+02 0.1540281200312D+02 + 0.1535707859803D+02 0.1530840532536D+02 0.1525687390884D+02 0.1520257189079D+02 + 0.1514559263632D+02 0.1508603532531D+02 0.1502400493172D+02 0.1495961218971D+02 + 0.1489297354623D+02 0.1482421109950D+02 0.1475345252306D+02 0.1468083097499D+02 + 0.1460648499184D+02 0.1453055836709D+02 0.1445320001360D+02 0.1437456381003D+02 + 0.1429480843075D+02 0.1421409715909D+02 0.1413259768392D+02 0.1405048187912D+02 + 0.1396792556614D+02 0.1388510825940D+02 0.1380221289467D+02 0.1371942554036D+02 + 0.1363693509198D+02 0.1355493294972D+02 0.1347361267958D+02 0.1339316965818D+02 + 0.1331380070165D+02 0.1323570367897D+02 0.1315907711016D+02 0.1308411975004D+02 + 0.1301103015787D+02 0.1294000625373D+02 0.1287124486230D+02 0.1280494124477D+02 + 0.1274128861984D+02 0.1268047767460D+02 0.1262269606643D+02 0.1256812791682D+02 + 0.1251695329838D+02 0.1246934771604D+02 0.1242548158392D+02 0.1238551969900D+02 + 0.1234962071295D+02 0.1231793660373D+02 0.1229061214824D+02 0.1226778439767D+02 + 0.1224958215706D+02 0.1223612547078D+02 0.1222752511553D+02 0.1222388210258D+02 + 0.1222528719100D+02 0.1223182041366D+02 0.1224355061775D+02 0.1226053502171D+02 + 0.1228281879023D+02 0.1231043462935D+02 0.1234340240339D+02 0.1238172877543D+02 + 0.1242540687338D+02 0.1247441598324D+02 0.1252872127141D+02 0.1258827353770D+02 + 0.1265300900087D+02 0.1272284911822D+02 0.1279770044081D+02 0.1287745450601D+02 + 0.1296198776857D+02 0.1305116157186D+02 0.1314482216032D+02 0.1324280073454D+02 + 0.1334491354991D+02 0.1345096205988D+02 0.1356073310471D+02 0.1367399914649D+02 + 0.1379051855093D+02 0.1391003591655D+02 0.1403228245150D+02 0.1415697639825D+02 + 0.1428382350615D+02 0.1441251755180D+02 0.1454274090682D+02 0.1467416515265D+02 + 0.1480645174180D+02 0.1493925270450D+02 0.1507221140012D+02 0.1520496331175D+02 + 0.1533713688305D+02 0.1546835439544D+02 0.1559823288411D+02 0.1572638509088D+02 + 0.1585242045188D+02 0.1597594611769D+02 0.1609656800349D+02 0.1621389186673D+02 + 0.1632752440935D+02 0.1643707440175D+02 0.1654215382521D+02 0.1664237902974D+02 + 0.1673737190368D+02 0.1682676105166D+02 0.1691018297723D+02 0.1698728326633D+02 + 0.1705771776761D+02 0.1712115376582D+02 0.1717727114395D+02 0.1722576353007D+02 + 0.1726633942470D+02 0.1729872330429D+02 0.1732265669667D+02 0.1733789922408D+02 + 0.1734422960952D+02 0.1734144664198D+02 0.1732937009656D+02 0.1730784160492D+02 + 0.1727672547225D+02 0.1723590943644D+02 0.1718530536559D+02 0.1712484989008D+02 + 0.1705450496536D+02 0.1697425836203D+02 0.1688412407975D+02 0.1678414268193D+02 + 0.1667438154808D+02 0.1655493504124D+02 0.1642592458792D+02 0.1628749866833D+02 + 0.1613983271513D+02 0.1598312891883D+02 0.1581761593876D+02 0.1564354851859D+02 + 0.1546120700566D+02 0.1527089677411D+02 0.1507294755170D+02 0.1486771265109D+02 + 0.1465556810624D+02 0.1443691171558D+02 0.1421216199343D+02 0.1398175703206D+02 + 0.1374615327696D+02 0.1350582421831D+02 0.1326125900230D+02 0.1301296096613D+02 + 0.1276144610103D+02 0.1250724144826D+02 0.1225088343315D+02 0.1199291614280D+02 + 0.1173388955369D+02 0.1147435771520D+02 0.1121487689618D+02 0.1095600370143D+02 + 0.1069829316549D+02 0.1044229683153D+02 0.1018856082317D+02 0.9937623917321D+01 + 0.9690015626445D+01 0.9446254298643D+01 0.9206845244038D+01 0.8972278896087D+01 + 0.8743029016360D+01 0.8519550951297D+01 0.8302279949355D+01 0.8091629546790D+01 + 0.7887990030116D+01 0.7691726983014D+01 0.7503179925129D+01 0.7322661049902D+01 + 0.7150454068046D+01 0.6986813162918D+01 0.6831962063451D+01 0.6686093239819D+01 + 0.6549367226364D+01 0.6421912075717D+01 0.6303822947394D+01 0.6195161833447D+01 + 0.6095957423078D+01 0.6006205107394D+01 0.5925867124779D+01 0.5854872846611D+01 + 0.5793119202371D+01 0.5740471242429D+01 0.5696762836121D+01 0.5661797502031D+01 + 0.5635349366701D+01 0.5617164247353D+01 0.5606960853570D+01 0.5604432102259D+01 + 0.5609246539649D+01 0.5621049863505D+01 0.5639466538232D+01 0.5664101495024D+01 + 0.5694541908766D+01 0.5730359042993D+01 0.5771110153784D+01 0.5816340443192D+01 + 0.5865585052475D+01 0.5918371085180D+01 0.5974219649957D+01 0.6032647912832D+01 + 0.6093171148637D+01 0.6155304781260D+01 0.6218566402475D+01 0.6282477759234D+01 + 0.6346566699475D+01 0.6410369066815D+01 0.6473430534781D+01 0.6535308371644D+01 + 0.6595573127395D+01 0.6653810234872D+01 0.6709621517670D+01 0.6762626598041D+01 + 0.6812464198680D+01 0.6858793332986D+01 0.6901294379138D+01 0.6939670034070D+01 + 0.6973646144233D+01 0.7002972410830D+01 0.7027422967990D+01 0.7046796833200D+01 + 0.7060918230061D+01 0.7069636784259D+01 0.7072827594374D+01 0.7070391179926D+01 + 0.7062253309715D+01 0.7048364714231D+01 0.7028700686483D+01 0.7003260576238D+01 + 0.6972067183121D+01 0.6935166054562D+01 0.6892624694966D+01 0.6844531692843D+01 + 0.6790995772965D+01 0.6732144780827D+01 0.6668124606899D+01 0.6599098058289D+01 + 0.6525243685473D+01 0.6446754571799D+01 0.6363837093418D+01 0.6276709657188D+01 + 0.6185601423998D+01 0.6090751024726D+01 0.5992405275866D+01 0.5890817901556D+01 + 0.5786248268476D+01 0.5678960139726D+01 0.5569220453475D+01 0.5457298131760D+01 + 0.5343462924443D+01 0.5227984292928D+01 0.5111130337809D+01 0.4993166774192D+01 + 0.4874355958030D+01 0.4754955966341D+01 0.4635219733799D+01 0.4515394247714D+01 + 0.4395719803061D+01 0.4276429318764D+01 0.4157747716089D+01 0.4039891359594D+01 + 0.3923067560758D+01 0.3807474144035D+01 0.3693299074769D+01 0.3580720148118D+01 + 0.3469904737816D+01 0.3361009603367D+01 0.3254180754011D+01 0.3149553367571D+01 + 0.3047251762116D+01 0.2947389418162D+01 0.2850069049006D+01 0.2755382716614D+01 + 0.2663411990420D+01 0.2574228146230D+01 0.2487892402405D+01 0.2404456190400D+01 + 0.2323961456713D+01 0.2246440993268D+01 0.2171918793250D+01 0.2100410429420D+01 + 0.2031923451965D+01 0.1966457802972D+01 0.1904006244666D+01 0.1844554798640D+01 + 0.1788083193345D+01 0.1734565317240D+01 0.1683969675070D+01 0.1636259844862D+01 + 0.1591394933364D+01 0.1549330027746D+01 0.1510016641546D+01 0.1473403152964D+01 + 0.1439435233770D+01 0.1408056267219D+01 0.1379207753531D+01 0.1352829701650D+01 + 0.1328861006133D+01 0.1307239808175D+01 0.1287903839946D+01 0.1270790751526D+01 + 0.1255838419882D+01 0.1242985239474D+01 0.1232170394175D+01 0.1223334110328D+01 + 0.1216417890857D+01 0.1211364730456D+01 0.1208119311934D+01 0.1206628183910D+01 + 0.1206839920052D+01 0.1208705260142D+01 0.1212177233248D+01 0.1217211263310D+01 + 0.1223765257423D+01 0.1231799677111D+01 0.1241277592815D+01 0.1252164721788D+01 + 0.1264429449524D+01 0.1278042834732D+01 0.1292978597814D+01 0.1309213092627D+01 + 0.1326725261233D+01 0.1345496571135D+01 0.1365510934358D+01 0.1386754607532D+01 + 0.1409215426363D+01 0.1433003097507D+01 0.1458223277591D+01 0.1484860699421D+01 + 0.1512902583279D+01 0.1542338542721D+01 0.1573160498496D+01 0.1605362600812D+01 + 0.1638941160170D+01 0.1673894586973D+01 0.1710223340083D+01 0.1747929884514D+01 + 7 1012 + 1 0 -1 -511.89150 + 2 0 -1 -58.80097 + 2 1 1 -50.61290 + 2 1 -2 -49.69692 + 3 0 -1 -5.52718 + 3 1 1 -3.14309 + 3 1 -2 -3.03034 + 0.2123373461549D-04 0.2173914995400D-04 0.2225659296114D-04 0.2278634977738D-04 + 0.2332871334728D-04 0.2388398358121D-04 0.2445246752083D-04 0.2503447950857D-04 + 0.2563034136106D-04 0.2624038254674D-04 0.2686494036763D-04 0.2750436014548D-04 + 0.2815899541226D-04 0.2882920810522D-04 0.2951536876657D-04 0.3021785674791D-04 + 0.3093706041946D-04 0.3167337738432D-04 0.3242721469777D-04 0.3319898909177D-04 + 0.3398912720483D-04 0.3479806581728D-04 0.3562625209215D-04 0.3647414382175D-04 + 0.3734220968012D-04 0.3823092948144D-04 0.3914079444457D-04 0.4007230746391D-04 + 0.4102598338660D-04 0.4200234929636D-04 0.4300194480406D-04 0.4402532234512D-04 + 0.4507304748402D-04 0.4614569922601D-04 0.4724387033618D-04 0.4836816766617D-04 + 0.4951921248852D-04 0.5069764083903D-04 0.5190410386721D-04 0.5313926819498D-04 + 0.5440381628400D-04 0.5569844681152D-04 0.5702387505533D-04 0.5838083328767D-04 + 0.5977007117859D-04 0.6119235620880D-04 0.6264847409228D-04 0.6413922920902D-04 + 0.6566544504782D-04 0.6722796465978D-04 0.6882765112238D-04 0.7046538801462D-04 + 0.7214207990339D-04 0.7385865284136D-04 0.7561605487667D-04 0.7741525657465D-04 + 0.7925725155197D-04 0.8114305702331D-04 0.8307371436110D-04 0.8505028966841D-04 + 0.8707387436545D-04 0.8914558578994D-04 0.9126656781168D-04 0.9343799146165D-04 + 0.9566105557602D-04 0.9793698745538D-04 0.1002670435396D-03 0.1026525100984D-03 + 0.1050947039390D-03 0.1075949731294D-03 0.1101546977394D-03 0.1127752905997D-03 + 0.1154581980775D-03 0.1182049008719D-03 0.1210169148270D-03 0.1238957917652D-03 + 0.1268431203390D-03 0.1298605269045D-03 0.1329496764137D-03 0.1361122733297D-03 + 0.1393500625619D-03 0.1426648304247D-03 0.1460584056178D-03 0.1495326602303D-03 + 0.1530895107681D-03 0.1567309192056D-03 0.1604588940629D-03 0.1642754915072D-03 + 0.1681828164816D-03 0.1721830238593D-03 0.1762783196258D-03 0.1804709620887D-03 + 0.1847632631165D-03 0.1891575894056D-03 0.1936563637785D-03 0.1982620665115D-03 + 0.2029772366947D-03 0.2078044736231D-03 0.2127464382210D-03 0.2178058545005D-03 + 0.2229855110531D-03 0.2282882625778D-03 0.2337170314442D-03 0.2392748092933D-03 + 0.2449646586752D-03 0.2507897147258D-03 0.2567531868833D-03 0.2628583606444D-03 + 0.2691085993625D-03 0.2755073460880D-03 0.2820581254518D-03 0.2887645455935D-03 + 0.2956303001344D-03 0.3026591701977D-03 0.3098550264756D-03 0.3172218313454D-03 + 0.3247636410353D-03 0.3324846078408D-03 0.3403889823939D-03 0.3484811159850D-03 + 0.3567654629401D-03 0.3652465830528D-03 0.3739291440747D-03 0.3828179242637D-03 + 0.3919178149916D-03 0.4012338234146D-03 0.4107710752045D-03 0.4205348173457D-03 + 0.4305304209971D-03 0.4407633844209D-03 0.4512393359813D-03 0.4619640372121D-03 + 0.4729433859575D-03 0.4841834195856D-03 0.4956903182785D-03 0.5074704083979D-03 + 0.5195301659314D-03 0.5318762200182D-03 0.5445153565579D-03 0.5574545219044D-03 + 0.5707008266453D-03 0.5842615494708D-03 0.5981441411326D-03 0.6123562284955D-03 + 0.6269056186847D-03 0.6418003033287D-03 0.6570484629028D-03 0.6726584711734D-03 + 0.6886388997468D-03 0.7049985227240D-03 0.7217463214642D-03 0.7388914894603D-03 + 0.7564434373277D-03 0.7744117979097D-03 0.7928064315026D-03 0.8116374312024D-03 + 0.8309151283763D-03 0.8506500982622D-03 0.8708531656989D-03 0.8915354109894D-03 + 0.9127081759015D-03 0.9343830698083D-03 0.9565719759715D-03 0.9792870579714D-03 + 0.1002540766287D-02 0.1026345845027D-02 0.1050715338824D-02 0.1075662599879D-02 + 0.1101201295181D-02 0.1127345413883D-02 0.1154109274864D-02 0.1181507534450D-02 + 0.1209555194328D-02 0.1238267609637D-02 0.1267660497252D-02 0.1297749944251D-02 + 0.1328552416593D-02 0.1360084767981D-02 0.1392364248945D-02 0.1425408516127D-02 + 0.1459235641785D-02 0.1493864123514D-02 0.1529312894196D-02 0.1565601332181D-02 + 0.1602749271697D-02 0.1640777013510D-02 0.1679705335822D-02 0.1719555505429D-02 + 0.1760349289133D-02 0.1802108965417D-02 0.1844857336390D-02 0.1888617740010D-02 + 0.1933414062589D-02 0.1979270751585D-02 0.2026212828687D-02 0.2074265903209D-02 + 0.2123456185786D-02 0.2173810502385D-02 0.2225356308647D-02 0.2278121704551D-02 + 0.2332135449417D-02 0.2387426977257D-02 0.2444026412476D-02 0.2501964585936D-02 + 0.2561273051389D-02 0.2621984102285D-02 0.2684130788965D-02 0.2747746936258D-02 + 0.2812867161465D-02 0.2879526892772D-02 0.2947762388071D-02 0.3017610754222D-02 + 0.3089109966753D-02 0.3162298890003D-02 0.3237217297741D-02 0.3313905894238D-02 + 0.3392406335837D-02 0.3472761253004D-02 0.3555014272883D-02 0.3639210042377D-02 + 0.3725394251736D-02 0.3813613658698D-02 0.3903916113173D-02 0.3996350582488D-02 + 0.4090967177209D-02 0.4187817177547D-02 0.4286953060364D-02 0.4388428526794D-02 + 0.4492298530489D-02 0.4598619306504D-02 0.4707448400838D-02 0.4818844700646D-02 + 0.4932868465127D-02 0.5049581357120D-02 0.5169046475404D-02 0.5291328387739D-02 + 0.5416493164639D-02 0.5544608413917D-02 0.5675743316002D-02 0.5809968660057D-02 + 0.5947356880904D-02 0.6087982096781D-02 0.6231920147946D-02 0.6379248636155D-02 + 0.6530046965011D-02 0.6684396381234D-02 0.6842380016839D-02 0.7004082932273D-02 + 0.7169592160503D-02 0.7338996752102D-02 0.7512387821327D-02 0.7689858593235D-02 + 0.7871504451850D-02 0.8057422989391D-02 0.8247714056607D-02 0.8442479814225D-02 + 0.8641824785540D-02 0.8845855910175D-02 0.9054682599025D-02 0.9268416790430D-02 + 0.9487173007575D-02 0.9711068417172D-02 0.9940222889430D-02 0.1017475905935D-01 + 0.1041480238936D-01 0.1066048123337D-01 0.1091192690214D-01 0.1116927373022D-01 + 0.1143265914425D-01 0.1170222373276D-01 0.1197811131760D-01 0.1226046902681D-01 + 0.1254944736912D-01 0.1284520031015D-01 0.1314788535014D-01 0.1345766360348D-01 + 0.1377469987990D-01 0.1409916276750D-01 0.1443122471744D-01 0.1477106213063D-01 + 0.1511885544620D-01 0.1547478923187D-01 0.1583905227632D-01 0.1621183768351D-01 + 0.1659334296907D-01 0.1698377015868D-01 0.1738332588869D-01 0.1779222150874D-01 + 0.1821067318670D-01 0.1863890201578D-01 0.1907713412394D-01 0.1952560078568D-01 + 0.1998453853608D-01 0.2045418928739D-01 0.2093480044805D-01 0.2142662504416D-01 + 0.2192992184360D-01 0.2244495548276D-01 0.2297199659585D-01 0.2351132194704D-01 + 0.2406321456527D-01 0.2462796388197D-01 0.2520586587156D-01 0.2579722319499D-01 + 0.2640234534617D-01 0.2702154880148D-01 0.2765515717239D-01 0.2830350136121D-01 + 0.2896691972007D-01 0.2964575821319D-01 0.3034037058244D-01 0.3105111851634D-01 + 0.3177837182251D-01 0.3252250860359D-01 0.3328391543683D-01 0.3406298755727D-01 + 0.3486012904465D-01 0.3567575301409D-01 0.3651028181063D-01 0.3736414720771D-01 + 0.3823779060956D-01 0.3913166325773D-01 0.4004622644169D-01 0.4098195171364D-01 + 0.4193932110758D-01 0.4291882736274D-01 0.4392097415138D-01 0.4494627631115D-01 + 0.4599526008193D-01 0.4706846334735D-01 0.4816643588104D-01 0.4928973959763D-01 + 0.5043894880863D-01 0.5161465048329D-01 0.5281744451445D-01 0.5404794398948D-01 + 0.5530677546647D-01 0.5659457925562D-01 0.5791200970601D-01 0.5925973549779D-01 + 0.6063843993988D-01 0.6204882127328D-01 0.6349159298001D-01 0.6496748409788D-01 + 0.6647723954103D-01 0.6802162042643D-01 0.6960140440641D-01 0.7121738600725D-01 + 0.7287037697395D-01 0.7456120662128D-01 0.7629072219118D-01 0.7805978921657D-01 + 0.7986929189166D-01 0.8172013344892D-01 0.8361323654265D-01 0.8554954363940D-01 + 0.8753001741513D-01 0.8955564115940D-01 0.9162741918654D-01 0.9374637725383D-01 + 0.9591356298698D-01 0.9813004631275D-01 0.1003969198990D+00 0.1027152996019D+00 + 0.1050863249211D+00 0.1075111594618D+00 0.1099909914051D+00 0.1125270339855D+00 + 0.1151205259766D+00 0.1177727321842D+00 0.1204849439476D+00 0.1232584796489D+00 + 0.1260946852301D+00 0.1289949347182D+00 0.1319606307590D+00 0.1349932051583D+00 + 0.1380941194317D+00 0.1412648653632D+00 0.1445069655708D+00 0.1478219740820D+00 + 0.1512114769165D+00 0.1546770926778D+00 0.1582204731535D+00 0.1618433039236D+00 + 0.1655473049771D+00 0.1693342313383D+00 0.1732058737000D+00 0.1771640590662D+00 + 0.1812106514032D+00 0.1853475522988D+00 0.1895767016304D+00 0.1939000782413D+00 + 0.1983197006251D+00 0.2028376276193D+00 0.2074559591063D+00 0.2121768367234D+00 + 0.2170024445803D+00 0.2219350099852D+00 0.2269768041788D+00 0.2321301430764D+00 + 0.2373973880172D+00 0.2427809465221D+00 0.2482832730585D+00 0.2539068698131D+00 + 0.2596542874715D+00 0.2655281260047D+00 0.2715310354636D+00 0.2776657167793D+00 + 0.2839349225700D+00 0.2903414579550D+00 0.2968881813739D+00 0.3035780054119D+00 + 0.3104138976312D+00 0.3173988814070D+00 0.3245360367687D+00 0.3318285012460D+00 + 0.3392794707188D+00 0.3468922002717D+00 0.3546700050516D+00 0.3626162611285D+00 + 0.3707344063591D+00 0.3790279412529D+00 0.3875004298396D+00 0.3961555005386D+00 + 0.4049968470283D+00 0.4140282291162D+00 0.4232534736091D+00 0.4326764751811D+00 + 0.4423011972414D+00 0.4521316727988D+00 0.4621720053237D+00 0.4724263696067D+00 + 0.4828990126121D+00 0.4935942543268D+00 0.5045164886027D+00 0.5156701839924D+00 + 0.5270598845772D+00 0.5386902107861D+00 0.5505658602051D+00 0.5626916083760D+00 + 0.5750723095830D+00 0.5877128976270D+00 0.6006183865849D+00 0.6137938715547D+00 + 0.6272445293836D+00 0.6409756193782D+00 0.6549924839961D+00 0.6693005495166D+00 + 0.6839053266899D+00 0.6988124113627D+00 0.7140274850788D+00 0.7295563156538D+00 + 0.7454047577210D+00 0.7615787532478D+00 0.7780843320207D+00 0.7949276120969D+00 + 0.8121148002200D+00 0.8296521921997D+00 0.8475461732513D+00 0.8658032182945D+00 + 0.8844298922086D+00 0.9034328500427D+00 0.9228188371772D+00 0.9425946894360D+00 + 0.9627673331456D+00 0.9833437851400D+00 0.1004331152707D+01 0.1025736633476D+01 + 0.1047567515241D+01 0.1069831175720D+01 0.1092535082243D+01 0.1115686791375D+01 + 0.1139293948457D+01 0.1163364287075D+01 0.1187905628445D+01 0.1212925880722D+01 + 0.1238433038208D+01 0.1264435180485D+01 0.1290940471443D+01 0.1317957158220D+01 + 0.1345493570030D+01 0.1373558116898D+01 0.1402159288280D+01 0.1431305651569D+01 + 0.1461005850494D+01 0.1491268603389D+01 0.1522102701342D+01 0.1553517006218D+01 + 0.1585520448546D+01 0.1618122025271D+01 0.1651330797361D+01 0.1685155887276D+01 + 0.1719606476280D+01 0.1754691801602D+01 0.1790421153434D+01 0.1826803871767D+01 + 0.1863849343063D+01 0.1901566996742D+01 0.1939966301501D+01 0.1979056761446D+01 + 0.2018847912032D+01 0.2059349315815D+01 0.2100570557999D+01 0.2142521241790D+01 + 0.2185210983528D+01 0.2228649407614D+01 0.2272846141215D+01 0.2317810808747D+01 + 0.2363553026124D+01 0.2410082394775D+01 0.2457408495423D+01 0.2505540881617D+01 + 0.2554489073015D+01 0.2604262548407D+01 0.2654870738488D+01 0.2706323018355D+01 + 0.2758628699743D+01 0.2811797022979D+01 0.2865837148659D+01 0.2920758149043D+01 + 0.2976568999160D+01 0.3033278567615D+01 0.3090895607108D+01 0.3149428744640D+01 + 0.3208886471423D+01 0.3269277132479D+01 0.3330608915918D+01 0.3392889841912D+01 + 0.3456127751341D+01 0.3520330294118D+01 0.3585504917195D+01 0.3651658852234D+01 + 0.3718799102956D+01 0.3786932432154D+01 0.3856065348377D+01 0.3926204092282D+01 + 0.3997354622651D+01 0.4069522602076D+01 0.4142713382310D+01 0.4216931989288D+01 + 0.4292183107814D+01 0.4368471065927D+01 0.4445799818928D+01 0.4524172933100D+01 + 0.4603593569097D+01 0.4684064465021D+01 0.4765587919192D+01 0.4848165772611D+01 + 0.4931799391130D+01 0.5016489647323D+01 0.5102236902085D+01 0.5189040985952D+01 + 0.5276901180158D+01 0.5365816197444D+01 0.5455784162617D+01 0.5546802592894D+01 + 0.5638868378017D+01 0.5731977760181D+01 0.5826126313769D+01 0.5921308924927D+01 + 0.6017519770983D+01 0.6114752299744D+01 0.6212999208681D+01 0.6312252424025D+01 + 0.6412503079799D+01 0.6513741496818D+01 0.6615957161666D+01 0.6719138705689D+01 + 0.6823273884037D+01 0.6928349554769D+01 0.7034351658067D+01 0.7141265195588D+01 + 0.7249074209985D+01 0.7357761764637D+01 0.7467309923627D+01 0.7577699732003D+01 + 0.7688911196366D+01 0.7800923265826D+01 0.7913713813378D+01 0.8027259617727D+01 + 0.8141536345630D+01 0.8256518534789D+01 0.8372179577355D+01 0.8488491704090D+01 + 0.8605425969248D+01 0.8722952236222D+01 0.8841039164025D+01 0.8959654194655D+01 + 0.9078763541413D+01 0.9198332178230D+01 0.9318323830066D+01 0.9438700964464D+01 + 0.9559424784293D+01 0.9680455221780D+01 0.9801750933887D+01 0.9923269299099D+01 + 0.1004496641570D+02 0.1016679710163D+02 0.1028871489593D+02 0.1041067206198D+02 + 0.1053261959239D+02 0.1065450721594D+02 0.1077628340626D+02 0.1089789539267D+02 + 0.1101928917306D+02 0.1114040952889D+02 0.1126120004259D+02 0.1138160311709D+02 + 0.1150155999788D+02 0.1162101079752D+02 0.1173989452270D+02 0.1185814910389D+02 + 0.1197571142774D+02 0.1209251737221D+02 0.1220850184455D+02 0.1232359882222D+02 + 0.1243774139668D+02 0.1255086182033D+02 0.1266289155645D+02 0.1277376133233D+02 + 0.1288340119558D+02 0.1299174057364D+02 0.1309870833671D+02 0.1320423286383D+02 + 0.1330824211245D+02 0.1341066369131D+02 0.1351142493681D+02 0.1361045299271D+02 + 0.1370767489335D+02 0.1380301765027D+02 0.1389640834224D+02 0.1398777420882D+02 + 0.1407704274716D+02 0.1416414181234D+02 0.1424899972093D+02 0.1433154535791D+02 + 0.1441170828680D+02 0.1448941886294D+02 0.1456460834990D+02 0.1463720903887D+02 + 0.1470715437095D+02 0.1477437906225D+02 0.1483881923166D+02 0.1490041253114D+02 + 0.1495909827839D+02 0.1501481759178D+02 0.1506751352732D+02 0.1511713121747D+02 + 0.1516361801165D+02 0.1520692361818D+02 0.1524700024742D+02 0.1528380275595D+02 + 0.1531728879140D+02 0.1534741893776D+02 0.1537415686084D+02 0.1539746945363D+02 + 0.1541732698111D+02 0.1543370322439D+02 0.1544657562364D+02 0.1545592541956D+02 + 0.1546173779302D+02 0.1546400200242D+02 0.1546271151843D+02 0.1545786415570D+02 + 0.1544946220111D+02 0.1543751253809D+02 0.1542202676661D+02 0.1540302131844D+02 + 0.1538051756708D+02 0.1535454193202D+02 0.1532512597682D+02 0.1529230650045D+02 + 0.1525612562157D+02 0.1521663085508D+02 0.1517387518057D+02 0.1512791710213D+02 + 0.1507882069905D+02 0.1502665566690D+02 0.1497149734847D+02 0.1491342675424D+02 + 0.1485253057170D+02 0.1478890116319D+02 0.1472263655178D+02 0.1465384039476D+02 + 0.1458262194423D+02 0.1450909599456D+02 0.1443338281613D+02 0.1435560807511D+02 + 0.1427590273888D+02 0.1419440296685D+02 0.1411124998625D+02 0.1402658995277D+02 + 0.1394057379573D+02 0.1385335704764D+02 0.1376509965795D+02 0.1367596579089D+02 + 0.1358612360737D+02 0.1349574503081D+02 0.1340500549696D+02 0.1331408368786D+02 + 0.1322316124986D+02 0.1313242249599D+02 0.1304205409292D+02 0.1295224473262D+02 + 0.1286318478926D+02 0.1277506596148D+02 0.1268808090072D+02 0.1260242282594D+02 + 0.1251828512526D+02 0.1243586094535D+02 0.1235534276899D+02 0.1227692198172D+02 + 0.1220078842830D+02 0.1212712995982D+02 0.1205613197253D+02 0.1198797693913D+02 + 0.1192284393379D+02 0.1186090815186D+02 0.1180234042546D+02 0.1174730673615D+02 + 0.1169596772603D+02 0.1164847820834D+02 0.1160498667924D+02 0.1156563483188D+02 + 0.1153055707436D+02 0.1149988005301D+02 0.1147372218250D+02 0.1145219318434D+02 + 0.1143539363525D+02 0.1142341452711D+02 0.1141633683999D+02 0.1141423112993D+02 + 0.1141715713298D+02 0.1142516338731D+02 0.1143828687474D+02 0.1145655268355D+02 + 0.1147997369390D+02 0.1150855028761D+02 0.1154227008374D+02 0.1158110770138D+02 + 0.1162502455129D+02 0.1167396865756D+02 0.1172787451079D+02 0.1178666295396D+02 + 0.1185024110228D+02 0.1191850229803D+02 0.1199132610159D+02 0.1206857831946D+02 + 0.1215011107019D+02 0.1223576288907D+02 0.1232535887199D+02 0.1241871085933D+02 + 0.1251561765997D+02 0.1261586531600D+02 0.1271922740805D+02 0.1282546540151D+02 + 0.1293432903330D+02 0.1304555673916D+02 0.1315887612096D+02 0.1327400445348D+02 + 0.1339064923005D+02 0.1350850874625D+02 0.1362727272054D+02 0.1374662295087D+02 + 0.1386623400591D+02 0.1398577394943D+02 0.1410490509638D+02 0.1422328479880D+02 + 0.1434056625987D+02 0.1445639937388D+02 0.1457043159027D+02 0.1468230879914D+02 + 0.1479167623614D+02 0.1489817940404D+02 0.1500146500841D+02 0.1510118190471D+02 + 0.1519698205391D+02 0.1528852148379D+02 0.1537546125281D+02 0.1545746841364D+02 + 0.1553421697307D+02 0.1560538884523D+02 0.1567067479483D+02 0.1572977536717D+02 + 0.1578240180176D+02 0.1582827692612D+02 0.1586713602663D+02 0.1589872769311D+02 + 0.1592281463392D+02 0.1593917445849D+02 0.1594760042409D+02 0.1594790214378D+02 + 0.1593990625272D+02 0.1592345702984D+02 0.1589841697221D+02 0.1586466731948D+02 + 0.1582210852585D+02 0.1577066067732D+02 0.1571026385193D+02 0.1564087842120D+02 + 0.1556248529064D+02 0.1547508607802D+02 0.1537870322780D+02 0.1527338006062D+02 + 0.1515918075676D+02 0.1503619027308D+02 0.1490451419267D+02 0.1476427850715D+02 + 0.1461562933169D+02 0.1445873255288D+02 0.1429377341010D+02 0.1412095601137D+02 + 0.1394050278444D+02 0.1375265386499D+02 0.1355766642312D+02 0.1335581393054D+02 + 0.1314738537038D+02 0.1293268439219D+02 0.1271202841511D+02 0.1248574768189D+02 + 0.1225418426740D+02 0.1201769104500D+02 0.1177663061449D+02 0.1153137419578D+02 + 0.1128230049248D+02 0.1102979452961D+02 0.1077424647032D+02 0.1051605041603D+02 + 0.1025560319513D+02 0.9993303145083D+01 0.9729548892983D+01 0.9464738139829D+01 + 0.9199266453606D+01 0.8933526076402D+01 0.8667904750745D+01 0.8402784570301D+01 + 0.8138540859996D+01 0.7875541090527D+01 0.7614143832090D+01 0.7354697751983D+01 + 0.7097540660550D+01 0.6842998609696D+01 0.6591385047920D+01 0.6343000035605D+01 + 0.6098129523858D+01 0.5857044699944D+01 0.5620001401934D+01 0.5387239604814D+01 + 0.5158982979846D+01 0.4935438528573D+01 0.4716796292366D+01 0.4503229137976D+01 + 0.4294892619056D+01 0.4091924913152D+01 0.3894446833193D+01 0.3702561912045D+01 + 0.3516356558237D+01 0.3335900280537D+01 0.3161245978670D+01 0.2992430297065D+01 + 0.2829474038194D+01 0.2672382631762D+01 0.2521146655720D+01 0.2375742404881D+01 + 0.2236132502695D+01 0.2102266551639D+01 0.1974081817541D+01 0.1851503943111D+01 + 0.1734447685940D+01 0.1622817676200D+01 0.1516509189368D+01 0.1415408929331D+01 + 0.1319395817360D+01 0.1228341782531D+01 0.1142112549373D+01 0.1060568418635D+01 + 0.9835650373019D+00 0.9109541541726D+00 0.8425843575459D+00 0.7783017917968D+00 + 0.7179508498817D+00 0.6613748390683D+00 0.6084166174653D+00 0.5589191992012D+00 + 0.5127263263911D+00 0.4696830063190D+00 0.4296360125529D+00 0.3924343490009D+00 + 0.3579296762027D+00 0.3259766994340D+00 0.2964335184742D+00 0.2691619391536D+00 + 0.2440277470488D+00 0.2209009439361D+00 0.1996559478365D+00 0.1801717576938D+00 + 0.1623320839184D+00 0.1460254461990D+00 0.1311452401368D+00 0.1175897743854D+00 + 0.1052622800912D+00 0.9407089451527D-01 0.8392862078550D-01 0.7475326577690D-01 + 0.6646735814128D-01 0.5899804851766D-01 0.5227699394346D-01 0.4624022845899D-01 + 0.4082802185442D-01 0.3598472845105D-01 0.3165862773800D-01 0.2780175860384D-01 + 0.2436974881146D-01 0.2132164126495D-01 0.1861971851162D-01 0.1622932681167D-01 + 0.1411870099424D-01 0.1225879120292D-01 0.1062309251766D-01 0.9187478324824D-02 + 0.7930038194170D-02 0.6830920911119D-02 0.5872183206948D-02 0.5037644628161D-02 + 0.4312748890659D-02 0.3684431974697D-02 0.3140997133459D-02 0.2671996911721D-02 + 0.2268122201696D-02 0.1921098300832D-02 0.1623587881022D-02 0.1369100730387D-02 + 0.1151910087150D-02 0.9669753500508D-03 0.8098709208516D-03 0.6767209113939D-03 + 0.5641394300578D-03 0.4691761498429D-03 0.3892668522563D-03 0.3221886372696D-03 + 0.2660194893607D-03 0.2191018926233D-03 0.1800101936858D-03 0.1475214192933D-03 + 0.1205892654847D-03 0.9832098695562D-04 0.7995692809159D-04 0.6485245095860D-04 + 0.5246202996510D-04 0.4232529769133D-04 0.3405484129524D-04 0.2732556374477D-04 + 0.2186543872353D-04 0.1744750226736D-04 0.1388293789508D-04 0.1101512510421D-04 + 0.8714533541124D-05 0.6874356872787D-05 0.5406791351919D-05 0.4239874261002D-05 + 0.3314806839624D-05 0.2583694952262D-05 0.2007648657315D-05 0.1555189018603D-05 + 0.1200916989437D-05 0.9244050332163D-06 0.7092773630705D-06 0.5424493283134D-06 + 0.4135005904089D-06 0.3141603589352D-06 0.2378861413798D-06 0.1795202409555D-06 + 0.1350106538765D-06 0.1011851095086D-06 0.7556879909866D-07 0.5623788451178D-07 + 0.4170219815814D-07 0.3081166707088D-07 0.2268194336078D-07 0.1663552297805D-07 + 0.1215530542863D-07 0.8848107127806D-08 0.6416106613217D-08 0.4634585104140D-08 + 0.3334643304910D-08 0.2389835688104D-08 0.1705876062949D-08 0.1212741020005D-08 + 0.8586376559590D-09 0.6054146003728D-09 0.4250856698627D-09 0.2972075512731D-09 + 0.2069101606973D-09 0.1434236365115D-09 0.9898160505409D-10 0.6800804519963D-10 + 0.4651712787494D-10 0.3167310042586D-10 0.2146695649341D-10 0.1448079937139D-10 + 0.9722622861678D-11 0.6496070631129D-11 0.4319651023999D-11 0.2858591661735D-11 + 0.1882503214946D-11 0.1233598363270D-11 0.8043412065319D-12 0.5218060130221D-12 + 0.3367856512696D-12 0.2162455335843D-12 0.1381220475631D-12 0.8775552000331D-13 diff --git a/Test/Fe16_non_collinear/v_fe16.5 b/Test/Fe16_non_collinear/v_fe16.5 new file mode 100755 index 000000000..f3c4e967f --- /dev/null +++ b/Test/Fe16_non_collinear/v_fe16.5 @@ -0,0 +1,1542 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Fe. + 2 0.0000000000000D+00 + LSMS: xx z= 26. xvalws= 5.22926 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728400909D+02-0.5199725115555D+02-0.5199721790459D+02-0.5199718425142D+02 +-0.5199715019116D+02-0.5199711571889D+02-0.5199708082964D+02-0.5199704551834D+02 +-0.5199700977990D+02-0.5199697360915D+02-0.5199693700086D+02-0.5199689994973D+02 +-0.5199686245042D+02-0.5199682449748D+02-0.5199678608545D+02-0.5199674720876D+02 +-0.5199670786180D+02-0.5199666803887D+02-0.5199662773421D+02-0.5199658694201D+02 +-0.5199654565635D+02-0.5199650387127D+02-0.5199646158073D+02-0.5199641877860D+02 +-0.5199637545872D+02-0.5199633161480D+02-0.5199628724051D+02-0.5199624232942D+02 +-0.5199619687506D+02-0.5199615087084D+02-0.5199610431012D+02-0.5199605718616D+02 +-0.5199600949214D+02-0.5199596122116D+02-0.5199591236626D+02-0.5199586292036D+02 +-0.5199581287632D+02-0.5199576222688D+02-0.5199571096474D+02-0.5199565908248D+02 +-0.5199560657259D+02-0.5199555342748D+02-0.5199549963947D+02-0.5199544520078D+02 +-0.5199539010352D+02-0.5199533433975D+02-0.5199527790139D+02-0.5199522078028D+02 +-0.5199516296816D+02-0.5199510445666D+02-0.5199504523733D+02-0.5199498530160D+02 +-0.5199492464081D+02-0.5199486324617D+02-0.5199480110883D+02-0.5199473821977D+02 +-0.5199467456990D+02-0.5199461015004D+02-0.5199454495085D+02-0.5199447896290D+02 +-0.5199441217666D+02-0.5199434458246D+02-0.5199427617052D+02-0.5199420693096D+02 +-0.5199413685375D+02-0.5199406592876D+02-0.5199399414573D+02-0.5199392149428D+02 +-0.5199384796390D+02-0.5199377354396D+02-0.5199369822368D+02-0.5199362199218D+02 +-0.5199354483843D+02-0.5199346675127D+02-0.5199338771940D+02-0.5199330773139D+02 +-0.5199322677567D+02-0.5199314484053D+02-0.5199306191412D+02-0.5199297798443D+02 +-0.5199289303934D+02-0.5199280706654D+02-0.5199272005361D+02-0.5199263198797D+02 +-0.5199254285685D+02-0.5199245264737D+02-0.5199236134649D+02-0.5199226894099D+02 +-0.5199217541751D+02-0.5199208076251D+02-0.5199198496230D+02-0.5199188800302D+02 +-0.5199178987064D+02-0.5199169055096D+02-0.5199159002963D+02-0.5199148829207D+02 +-0.5199138532359D+02-0.5199128110928D+02-0.5199117563407D+02-0.5199106888269D+02 +-0.5199096083969D+02-0.5199085148944D+02-0.5199074081613D+02-0.5199062880373D+02 +-0.5199051543604D+02-0.5199040069664D+02-0.5199028456895D+02-0.5199016703615D+02 +-0.5199004808124D+02-0.5198992768700D+02-0.5198980583600D+02-0.5198968251063D+02 +-0.5198955769302D+02-0.5198943136512D+02-0.5198930350863D+02-0.5198917410506D+02 +-0.5198904313569D+02-0.5198891058155D+02-0.5198877642345D+02-0.5198864064200D+02 +-0.5198850321751D+02-0.5198836413012D+02-0.5198822335968D+02-0.5198808088582D+02 +-0.5198793668793D+02-0.5198779074512D+02-0.5198764303627D+02-0.5198749354000D+02 +-0.5198734223467D+02-0.5198718909837D+02-0.5198703410894D+02-0.5198687724393D+02 +-0.5198671848065D+02-0.5198655779610D+02-0.5198639516703D+02-0.5198623056988D+02 +-0.5198606398084D+02-0.5198589537577D+02-0.5198572473026D+02-0.5198555201962D+02 +-0.5198537721883D+02-0.5198520030257D+02-0.5198502124524D+02-0.5198484002091D+02 +-0.5198465660333D+02-0.5198447096595D+02-0.5198428308188D+02-0.5198409292391D+02 +-0.5198390046450D+02-0.5198370567579D+02-0.5198350852955D+02-0.5198330899725D+02 +-0.5198310704998D+02-0.5198290265850D+02-0.5198269579318D+02-0.5198248642408D+02 +-0.5198227452087D+02-0.5198206005285D+02-0.5198184298896D+02-0.5198162329776D+02 +-0.5198140094741D+02-0.5198117590571D+02-0.5198094814005D+02-0.5198071761744D+02 +-0.5198048430449D+02-0.5198024816738D+02-0.5198000917191D+02-0.5197976728344D+02 +-0.5197952246692D+02-0.5197927468690D+02-0.5197902390745D+02-0.5197877009224D+02 +-0.5197851320449D+02-0.5197825320698D+02-0.5197799006201D+02-0.5197772373146D+02 +-0.5197745417673D+02-0.5197718135875D+02-0.5197690523796D+02-0.5197662577437D+02 +-0.5197634292744D+02-0.5197605665620D+02-0.5197576691913D+02-0.5197547367423D+02 +-0.5197517687900D+02-0.5197487649041D+02-0.5197457246489D+02-0.5197426475838D+02 +-0.5197395332627D+02-0.5197363812338D+02-0.5197331910403D+02-0.5197299622195D+02 +-0.5197266943031D+02-0.5197233868173D+02-0.5197200392824D+02-0.5197166512128D+02 +-0.5197132221174D+02-0.5197097514984D+02-0.5197062388528D+02-0.5197026836709D+02 +-0.5196990854370D+02-0.5196954436291D+02-0.5196917577189D+02-0.5196880271716D+02 +-0.5196842514461D+02-0.5196804299945D+02-0.5196765622622D+02-0.5196726476881D+02 +-0.5196686857041D+02-0.5196646757354D+02-0.5196606171998D+02-0.5196565095085D+02 +-0.5196523520651D+02-0.5196481442664D+02-0.5196438855015D+02-0.5196395751522D+02 +-0.5196352125928D+02-0.5196307971901D+02-0.5196263283028D+02-0.5196218052823D+02 +-0.5196172274718D+02-0.5196125942066D+02-0.5196079048138D+02-0.5196031586126D+02 +-0.5195983549135D+02-0.5195934930191D+02-0.5195885722231D+02-0.5195835918107D+02 +-0.5195785510585D+02-0.5195734492343D+02-0.5195682855969D+02-0.5195630593961D+02 +-0.5195577698725D+02-0.5195524162577D+02-0.5195469977736D+02-0.5195415136330D+02 +-0.5195359630387D+02-0.5195303451841D+02-0.5195246592528D+02-0.5195189044181D+02 +-0.5195130798435D+02-0.5195071846824D+02-0.5195012180777D+02-0.5194951791619D+02 +-0.5194890670569D+02-0.5194828808741D+02-0.5194766197137D+02-0.5194702826653D+02 +-0.5194638688071D+02-0.5194573772064D+02-0.5194508069188D+02-0.5194441569885D+02 +-0.5194374264482D+02-0.5194306143187D+02-0.5194237196087D+02-0.5194167413149D+02 +-0.5194096784220D+02-0.5194025299021D+02-0.5193952947146D+02-0.5193879718066D+02 +-0.5193805601119D+02-0.5193730585519D+02-0.5193654660341D+02-0.5193577814533D+02 +-0.5193500036904D+02-0.5193421316129D+02-0.5193341640742D+02-0.5193260999141D+02 +-0.5193179379578D+02-0.5193096770164D+02-0.5193013158865D+02-0.5192928533501D+02 +-0.5192842881739D+02-0.5192756191098D+02-0.5192668448947D+02-0.5192579642497D+02 +-0.5192489758803D+02-0.5192398784765D+02-0.5192306707119D+02-0.5192213512442D+02 +-0.5192119187145D+02-0.5192023717474D+02-0.5191927089505D+02-0.5191829289146D+02 +-0.5191730302133D+02-0.5191630114025D+02-0.5191528710207D+02-0.5191426075883D+02 +-0.5191322196077D+02-0.5191217055632D+02-0.5191110639202D+02-0.5191002931255D+02 +-0.5190893916069D+02-0.5190783577729D+02-0.5190671900126D+02-0.5190558866954D+02 +-0.5190444461705D+02-0.5190328667673D+02-0.5190211467945D+02-0.5190092845399D+02 +-0.5189972782709D+02-0.5189851262330D+02-0.5189728266508D+02-0.5189603777267D+02 +-0.5189477776415D+02-0.5189350245533D+02-0.5189221165981D+02-0.5189090518885D+02 +-0.5188958285145D+02-0.5188824445423D+02-0.5188688980147D+02-0.5188551869503D+02 +-0.5188413093435D+02-0.5188272631641D+02-0.5188130463569D+02-0.5187986568418D+02 +-0.5187840925129D+02-0.5187693512386D+02-0.5187544308611D+02-0.5187393291962D+02 +-0.5187240440329D+02-0.5187085731330D+02-0.5186929142309D+02-0.5186770650332D+02 +-0.5186610232183D+02-0.5186447864362D+02-0.5186283523081D+02-0.5186117184259D+02 +-0.5185948823518D+02-0.5185778416183D+02-0.5185605937277D+02-0.5185431361514D+02 +-0.5185254663297D+02-0.5185075816718D+02-0.5184894795548D+02-0.5184711573237D+02 +-0.5184526122909D+02-0.5184338417356D+02-0.5184148429039D+02-0.5183956130079D+02 +-0.5183761492255D+02-0.5183564486998D+02-0.5183365085389D+02-0.5183163258155D+02 +-0.5182958975660D+02-0.5182752207907D+02-0.5182542924529D+02-0.5182331094785D+02 +-0.5182116687559D+02-0.5181899671350D+02-0.5181680014270D+02-0.5181457684041D+02 +-0.5181232647986D+02-0.5181004873028D+02-0.5180774325683D+02-0.5180540972054D+02 +-0.5180304777830D+02-0.5180065708277D+02-0.5179823728232D+02-0.5179578802103D+02 +-0.5179330893860D+02-0.5179079967027D+02-0.5178825984684D+02-0.5178568909453D+02 +-0.5178308703501D+02-0.5178045328526D+02-0.5177778745757D+02-0.5177508915948D+02 +-0.5177235799366D+02-0.5176959355795D+02-0.5176679544522D+02-0.5176396324334D+02 +-0.5176109653512D+02-0.5175819489823D+02-0.5175525790517D+02-0.5175228512318D+02 +-0.5174927611419D+02-0.5174623043474D+02-0.5174314763592D+02-0.5174002726332D+02 +-0.5173686885694D+02-0.5173367195115D+02-0.5173043607457D+02-0.5172716075006D+02 +-0.5172384549462D+02-0.5172048981932D+02-0.5171709322923D+02-0.5171365522335D+02 +-0.5171017529452D+02-0.5170665292940D+02-0.5170308760833D+02-0.5169947880525D+02 +-0.5169582598771D+02-0.5169212861671D+02-0.5168838614662D+02-0.5168459802518D+02 +-0.5168076369333D+02-0.5167688258518D+02-0.5167295412791D+02-0.5166897774168D+02 +-0.5166495283960D+02-0.5166087882755D+02-0.5165675510418D+02-0.5165258106080D+02 +-0.5164835608125D+02-0.5164407954186D+02-0.5163975081138D+02-0.5163536925080D+02 +-0.5163093421337D+02-0.5162644504442D+02-0.5162190108131D+02-0.5161730165335D+02 +-0.5161264608164D+02-0.5160793367906D+02-0.5160316375011D+02-0.5159833559084D+02 +-0.5159344848875D+02-0.5158850172268D+02-0.5158349456272D+02-0.5157842627009D+02 +-0.5157329609709D+02-0.5156810328692D+02-0.5156284707365D+02-0.5155752668206D+02 +-0.5155214132756D+02-0.5154669021608D+02-0.5154117254396D+02-0.5153558749786D+02 +-0.5152993425461D+02-0.5152421198113D+02-0.5151841983433D+02-0.5151255696093D+02 +-0.5150662249744D+02-0.5150061557002D+02-0.5149453529428D+02-0.5148838077528D+02 +-0.5148215110737D+02-0.5147584537403D+02-0.5146946264782D+02-0.5146300199022D+02 +-0.5145646245151D+02-0.5144984307067D+02-0.5144314287525D+02-0.5143636088122D+02 +-0.5142949609291D+02-0.5142254750281D+02-0.5141551409151D+02-0.5140839482753D+02 +-0.5140118866721D+02-0.5139389455459D+02-0.5138651142128D+02-0.5137903818632D+02 +-0.5137147375605D+02-0.5136381702401D+02-0.5135606687078D+02-0.5134822216388D+02 +-0.5134028175756D+02-0.5133224449278D+02-0.5132410919702D+02-0.5131587468413D+02 +-0.5130753975423D+02-0.5129910319357D+02-0.5129056377438D+02-0.5128192025477D+02 +-0.5127317137854D+02-0.5126431587514D+02-0.5125535245940D+02-0.5124627983153D+02 +-0.5123709667690D+02-0.5122780166596D+02-0.5121839345403D+02-0.5120887068125D+02 +-0.5119923197240D+02-0.5118947593678D+02-0.5117960116805D+02-0.5116960624416D+02 +-0.5115948972712D+02-0.5114925016296D+02-0.5113888608154D+02-0.5112839599644D+02 +-0.5111777840483D+02-0.5110703178733D+02-0.5109615460788D+02-0.5108514531363D+02 +-0.5107400233480D+02-0.5106272408452D+02-0.5105130895877D+02-0.5103975533619D+02 +-0.5102806157801D+02-0.5101622602790D+02-0.5100424701185D+02-0.5099212283803D+02 +-0.5097985179674D+02-0.5096743216021D+02-0.5095486218256D+02-0.5094214009961D+02 +-0.5092926412887D+02-0.5091623246932D+02-0.5090304330139D+02-0.5088969478681D+02 +-0.5087618506855D+02-0.5086251227064D+02-0.5084867449820D+02-0.5083466983722D+02 +-0.5082049635455D+02-0.5080615209778D+02-0.5079163509518D+02-0.5077694335558D+02 +-0.5076207486834D+02-0.5074702760324D+02-0.5073179951042D+02-0.5071638852033D+02 +-0.5070079254364D+02-0.5068500947122D+02-0.5066903717403D+02-0.5065287350315D+02 +-0.5063651628963D+02-0.5061996334457D+02-0.5060321245898D+02-0.5058626140382D+02 +-0.5056910792994D+02-0.5055174976809D+02-0.5053418462884D+02-0.5051641020267D+02 +-0.5049842415989D+02-0.5048022415067D+02-0.5046180780505D+02-0.5044317273295D+02 +-0.5042431652422D+02-0.5040523674861D+02-0.5038593095586D+02-0.5036639667573D+02 +-0.5034663141803D+02-0.5032663267268D+02-0.5030639790981D+02-0.5028592457977D+02 +-0.5026521011328D+02-0.5024425192145D+02-0.5022304739591D+02-0.5020159390892D+02 +-0.5017988881346D+02-0.5015792944334D+02-0.5013571311336D+02-0.5011323711944D+02 +-0.5009049873873D+02-0.5006749522980D+02-0.5004422383280D+02-0.5002068176959D+02 +-0.4999686624397D+02-0.4997277444186D+02-0.4994840353146D+02-0.4992375066350D+02 +-0.4989881297144D+02-0.4987358757171D+02-0.4984807156389D+02-0.4982226203106D+02 +-0.4979615603991D+02-0.4976975064117D+02-0.4974304286974D+02-0.4971602974502D+02 +-0.4968870827126D+02-0.4966107543776D+02-0.4963312821924D+02-0.4960486357616D+02 +-0.4957627845502D+02-0.4954736978871D+02-0.4951813449683D+02-0.4948856948612D+02 +-0.4945867165071D+02-0.4942843787257D+02-0.4939786502185D+02-0.4936694995729D+02 +-0.4933568952659D+02-0.4930408056681D+02-0.4927211990478D+02-0.4923980435752D+02 +-0.4920713073265D+02-0.4917409582880D+02-0.4914069643607D+02-0.4910692933642D+02 +-0.4907279130416D+02-0.4903827910633D+02-0.4900338950319D+02-0.4896811924867D+02 +-0.4893246509079D+02-0.4889642377211D+02-0.4885999203021D+02-0.4882316659813D+02 +-0.4878594420482D+02-0.4874832157556D+02-0.4871029543247D+02-0.4867186249491D+02 +-0.4863301947995D+02-0.4859376310277D+02-0.4855409007715D+02-0.4851399711583D+02 +-0.4847348093100D+02-0.4843253823466D+02-0.4839116573905D+02-0.4834936015704D+02 +-0.4830711820251D+02-0.4826443659074D+02-0.4822131203876D+02-0.4817774126566D+02 +-0.4813372099301D+02-0.4808924794511D+02-0.4804431884930D+02-0.4799893043625D+02 +-0.4795307944023D+02-0.4790676259938D+02-0.4785997665588D+02-0.4781271835619D+02 +-0.4776498445124D+02-0.4771677169657D+02-0.4766807685247D+02-0.4761889668409D+02 +-0.4756922796153D+02-0.4751906745988D+02-0.4746841195927D+02-0.4741725824487D+02 +-0.4736560310686D+02-0.4731344334036D+02-0.4726077574537D+02-0.4720759712663D+02 +-0.4715390429349D+02-0.4709969405976D+02-0.4704496324345D+02-0.4698970866656D+02 +-0.4693392715482D+02-0.4687761553742D+02-0.4682077064661D+02-0.4676338931742D+02 +-0.4670546838725D+02-0.4664700469545D+02-0.4658799508292D+02-0.4652843639162D+02 +-0.4646832546412D+02-0.4640765914308D+02-0.4634643427075D+02-0.4628464768840D+02 +-0.4622229623583D+02-0.4615937675077D+02-0.4609588606835D+02-0.4603182102046D+02 +-0.4596717843531D+02-0.4590195513672D+02-0.4583614794369D+02-0.4576975366979D+02 +-0.4570276912265D+02-0.4563519110351D+02-0.4556701640665D+02-0.4549824181908D+02 +-0.4542886412007D+02-0.4535888008084D+02-0.4528828646428D+02-0.4521708002473D+02 +-0.4514525750785D+02-0.4507281565054D+02-0.4499975118097D+02-0.4492606081870D+02 +-0.4485174127497D+02-0.4477678925295D+02-0.4470120144833D+02-0.4462497454985D+02 +-0.4454810524011D+02-0.4447059019649D+02-0.4439242609219D+02-0.4431360959758D+02 +-0.4423413738159D+02-0.4415400611337D+02-0.4407321246418D+02-0.4399175310947D+02 +-0.4390962473114D+02-0.4382682402010D+02-0.4374334767908D+02-0.4365919242563D+02 +-0.4357435499539D+02-0.4348883214570D+02-0.4340262065933D+02-0.4331571734857D+02 +-0.4322811905962D+02-0.4313982267710D+02-0.4305082512897D+02-0.4296112339160D+02 +-0.4287071449512D+02-0.4277959552900D+02-0.4268776364786D+02-0.4259521607738D+02 +-0.4250195012053D+02-0.4240796316384D+02-0.4231325268378D+02-0.4221781625326D+02 +-0.4212165154821D+02-0.4202475635403D+02-0.4192712857207D+02-0.4182876622603D+02 +-0.4172966746809D+02-0.4162983058491D+02-0.4152925400326D+02-0.4142793629535D+02 +-0.4132587618362D+02-0.4122307254514D+02-0.4111952441526D+02-0.4101523099069D+02 +-0.4091019163177D+02-0.4080440586392D+02-0.4069787337814D+02-0.4059059403052D+02 +-0.4048256784069D+02-0.4037379498919D+02-0.4026427581359D+02-0.4015401080347D+02 +-0.4004300059408D+02-0.3993124595881D+02-0.3981874780047D+02-0.3970550714118D+02 +-0.3959152511128D+02-0.3947680293704D+02-0.3936134192738D+02-0.3924514345974D+02 +-0.3912820896514D+02-0.3901053991273D+02-0.3889213779388D+02-0.3877300410616D+02 +-0.3865314033730D+02-0.3853254794941D+02-0.3841122836384D+02-0.3828918294671D+02 +-0.3816641299561D+02-0.3804291972752D+02-0.3791870426838D+02-0.3779376764439D+02 +-0.3766811077544D+02-0.3754173447071D+02-0.3741463942662D+02-0.3728682622747D+02 +-0.3715829534855D+02-0.3702904716206D+02-0.3689908194568D+02-0.3676839989389D+02 +-0.3663700113198D+02-0.3650488573242D+02-0.3637205373385D+02-0.3623850516215D+02 +-0.3610424005352D+02-0.3596925847947D+02-0.3583356057318D+02-0.3569714655716D+02 +-0.3556001677183D+02-0.3542217170480D+02-0.3528361202035D+02-0.3514433858906D+02 +-0.3500435251706D+02-0.3486365517474D+02-0.3472224822457D+02-0.3458013364781D+02 +-0.3443731376977D+02-0.3429379128348D+02-0.3414956927154D+02-0.3400465122587D+02 +-0.3385904106531D+02-0.3371274315081D+02-0.3356576229817D+02-0.3341810378823D+02 +-0.3326977337430D+02-0.3312077728689D+02-0.3297112223571D+02-0.3282081540879D+02 +-0.3266986446883D+02-0.3251827754673D+02-0.3236606323235D+02-0.3221323056253D+02 +-0.3205978900636D+02-0.3190574844798D+02-0.3175111916665D+02-0.3159591181450D+02 +-0.3144013739192D+02-0.3128380722060D+02-0.3112693291460D+02-0.3096952634939D+02 +-0.3081159962896D+02-0.3065316505139D+02-0.3049423507279D+02-0.3033482226994D+02 +-0.3017493930171D+02-0.3001459886954D+02-0.2985381367711D+02-0.2969259638940D+02 +-0.2953095959141D+02-0.2936891574677D+02-0.2920647715631D+02-0.2904365591713D+02 +-0.2888046388202D+02-0.2871691261992D+02-0.2855301337730D+02-0.2838877704096D+02 +-0.2822421410237D+02-0.2805933462405D+02-0.2789414820796D+02-0.2772866396645D+02 +-0.2756289049588D+02-0.2739683585338D+02-0.2723050753680D+02-0.2706391246838D+02 +-0.2689705698223D+02-0.2672994681603D+02-0.2656258710714D+02-0.2639498239345D+02 +-0.2622713661917D+02-0.2605905314574D+02-0.2589073476829D+02-0.2572218373759D+02 +-0.2555340178776D+02-0.2538439017000D+02-0.2521514969218D+02-0.2504568076457D+02 +-0.2487598345161D+02-0.2470605752972D+02-0.2453590255090D+02-0.2436551791213D+02 +-0.2419490293015D+02-0.2402405692122D+02-0.2385297928550D+02-0.2368166959536D+02 +-0.2351012768684D+02-0.2333835375355D+02-0.2316634844181D+02-0.2299411294593D+02 +-0.2282164910224D+02-0.2264895948042D+02-0.2247604747020D+02-0.2230291736187D+02 +-0.2212957441833D+02-0.2195602493665D+02-0.2178227629680D+02-0.2160833699531D+02 +-0.2143421666157D+02-0.2125992605447D+02-0.2108547703736D+02-0.2091088252957D+02 +-0.2073615643311D+02-0.2056131353347D+02-0.2038636937454D+02-0.2021134010787D+02 +-0.2003624231780D+02-0.1986109282464D+02-0.1968590846923D+02-0.1951070588338D+02 +-0.1933550125113D+02-0.1916031006739D+02-0.1898514690054D+02-0.1881002516654D+02 +-0.1863495692195D+02-0.1845995268332D+02-0.1828502127992D+02-0.1811016974578D+02 +-0.1793540325598D+02-0.1776072511080D+02-0.1758613676940D+02-0.1741163793327D+02 +-0.1723722667775D+02-0.1706289962834D+02-0.1688865217702D+02-0.1671447873257D+02 +-0.1654037299789D+02-0.1636632826691D+02-0.1619233773325D+02-0.1601839480315D+02 +-0.1584449340510D+02-0.1567062828984D+02-0.1549679531468D+02-0.1532299170720D+02 +-0.1514921630451D+02-0.1497546976480D+02-0.1480175474939D+02-0.1462807607400D+02 +-0.1445444082871D+02-0.1428085846710D+02-0.1410734086517D+02-0.1393390235146D+02 +-0.1376055970989D+02-0.1358733215727D+02-0.1341424129731D+02-0.1324131105355D+02 +-0.1306856758305D+02-0.1289603917318D+02-0.1272375612351D+02-0.1255175061484D+02 +-0.1238005656736D+02-0.1220870948967D+02-0.1203774632043D+02-0.1186720526422D+02 +-0.1169712562320D+02-0.1152754762583D+02-0.1135851225403D+02-0.1119006106993D+02 +-0.1102223604329D+02-0.1085507938069D+02-0.1068863335731D+02-0.1052294015218D+02 +-0.1035804168776D+02-0.1019397947446D+02-0.1003079446077D+02-0.9868526889628D+01 +-0.9707216161554D+01-0.9546900704939D+01-0.9387617854023D+01-0.9229403734858D+01 +-0.9072293159592D+01-0.8916319529363D+01-0.8761514745993D+01-0.8607909132693D+01 +-0.8455531363896D+01-0.8304408404305D+01-0.8154565457227D+01-0.8006025922166D+01 +-0.7858811361682D+01-0.7712941477416D+01-0.7568434095199D+01-0.7425305159081D+01 +-0.7283568734134D+01-0.7143237017788D+01-0.7004320359504D+01-0.6866827288485D+01 +-0.6730764549154D+01-0.6596137144079D+01-0.6462948384000D+01-0.6331199944618D+01 +-0.6200891929738D+01-0.6072022940407D+01-0.5944590149603D+01-0.5818589382077D+01 +-0.5694015198898D+01-0.5570860986265D+01-0.5449119048124D+01-0.5328780702141D+01 +-0.5209836378552D+01-0.5092275721431D+01-0.4976087691897D+01-0.4861260672787D+01 +-0.4747782574321D+01-0.4635640940271D+01-0.4524823054180D+01-0.4415316045125D+01 +-0.4307106992579D+01-0.4200183029885D+01-0.4094531445869D+01-0.3990139784139D+01 +-0.3886995939600D+01-0.3785088251726D+01-0.3684405594148D+01-0.3584937460106D+01 +-0.3486674043348D+01-0.3389606314047D+01-0.3293726089348D+01-0.3199026098161D+01 +-0.3105500039868D+01-0.3013142636618D+01-0.2921949678952D+01-0.2831918064533D+01 +-0.2743045829849D+01-0.2655332174788D+01-0.2568777480092D+01-0.2483383317815D+01 +-0.2399152454962D+01-0.2316088850658D+01-0.2234197647300D+01-0.2153485156272D+01 +-0.2073958838965D+01-0.1995627283965D+01-0.1918500181413D+01-0.1842588295670D+01 +-0.1767903437522D+01-0.1694458437274D+01-0.1622267120110D+01-0.1551344285168D+01 +-0.1481705689753D+01-0.1413368040087D+01-0.1346348989896D+01-0.1280667148051D+01 +-0.1216342096293D+01-0.1153394417906D+01-0.1091845737986D+01-0.1031718775725D+01 +-0.9730374088849D+00-0.9158267504133D+00-0.8601132368937D+00-0.8059247283301D+00 +-0.7532906185600D+00-0.7022419554295D+00-0.6528115697324D+00-0.6050342118170D+00 +-0.5589466947046D+00-0.5145880425354D+00-0.4719996431596D+00-0.4312254037239D+00 +-0.3923119081554D+00-0.3553085755132D+00-0.3202678182603D+00-0.2872451996103D+00 +-0.2562993012896D+00 + 0.0000000000000D+00 + 1012 0.5229258479779D+01 + 0.2150742905406D-04 0.2201934401975D-04 0.2254344131081D-04 0.2308001074793D-04 + 0.2362934904336D-04 0.2419175996469D-04 0.2476755450247D-04 0.2535705104185D-04 + 0.2596057553829D-04 0.2657846169737D-04 0.2721105115901D-04 0.2785869368592D-04 + 0.2852174735659D-04 0.2920057876285D-04 0.2989556321214D-04 0.3060708493450D-04 + 0.3133553729459D-04 0.3208132300862D-04 0.3284485436652D-04 0.3362655345933D-04 + 0.3442685241199D-04 0.3524619362168D-04 0.3608503000175D-04 0.3694382523153D-04 + 0.3782305401197D-04 0.3872320232740D-04 0.3964476771351D-04 0.4058825953159D-04 + 0.4155419924941D-04 0.4254312072866D-04 0.4355557051923D-04 0.4459210816046D-04 + 0.4565330648961D-04 0.4673975195749D-04 0.4785204495171D-04 0.4899080012754D-04 + 0.5015664674660D-04 0.5135022902361D-04 0.5257220648130D-04 0.5382325431382D-04 + 0.5510406375867D-04 0.5641534247751D-04 0.5775781494596D-04 0.5913222285265D-04 + 0.6053932550771D-04 0.6197990026094D-04 0.6345474292991D-04 0.6496466823815D-04 + 0.6651051026378D-04 0.6809312289875D-04 0.6971338031887D-04 0.7137217746513D-04 + 0.7307043053626D-04 0.7480907749308D-04 0.7658907857468D-04 0.7841141682692D-04 + 0.8027709864336D-04 0.8218715431905D-04 0.8414263861740D-04 0.8614463135050D-04 + 0.8819423797310D-04 0.9029259019072D-04 0.9244084658213D-04 0.9464019323656D-04 + 0.9689184440594D-04 0.9919704317265D-04 0.1015570621330D-03 0.1039732040969D-03 + 0.1064468028041D-03 0.1089792236573D-03 0.1115718644728D-03 0.1142261562483D-03 + 0.1169435639500D-03 0.1197255873171D-03 0.1225737616857D-03 0.1254896588328D-03 + 0.1284748878395D-03 0.1315310959746D-03 0.1346599695998D-03 0.1378632350954D-03 + 0.1411426598085D-03 0.1445000530233D-03 0.1479372669546D-03 0.1514561977641D-03 + 0.1550587866019D-03 0.1587470206711D-03 0.1625229343189D-03 0.1663886101524D-03 + 0.1703461801815D-03 0.1743978269887D-03 0.1785457849256D-03 0.1827923413391D-03 + 0.1871398378251D-03 0.1915906715131D-03 0.1961472963799D-03 0.2008122245952D-03 + 0.2055880278984D-03 0.2104773390081D-03 0.2154828530649D-03 0.2206073291079D-03 + 0.2258535915864D-03 0.2312245319072D-03 0.2367231100177D-03 0.2423523560273D-03 + 0.2481153718665D-03 0.2540153329849D-03 0.2600554900897D-03 0.2662391709247D-03 + 0.2725697820915D-03 0.2790508109132D-03 0.2856858273428D-03 0.2924784859153D-03 + 0.2994325277470D-03 0.3065517825810D-03 0.3138401708812D-03 0.3213017059753D-03 + 0.3289404962488D-03 0.3367607473897D-03 0.3447667646870D-03 0.3529629553823D-03 + 0.3613538310777D-03 0.3699440101989D-03 0.3787382205180D-03 0.3877413017338D-03 + 0.3969582081140D-03 0.4063940111991D-03 0.4160539025692D-03 0.4259431966769D-03 + 0.4360673337456D-03 0.4464318827368D-03 0.4570425443864D-03 0.4679051543124D-03 + 0.4790256861959D-03 0.4904102550358D-03 0.5020651204812D-03 0.5139966902408D-03 + 0.5262115235724D-03 0.5387163348549D-03 0.5515179972435D-03 0.5646235464104D-03 + 0.5780401843732D-03 0.5917752834137D-03 0.6058363900874D-03 0.6202312293275D-03 + 0.6349677086450D-03 0.6500539224267D-03 0.6654981563344D-03 0.6813088918062D-03 + 0.6974948106637D-03 0.7140647998269D-03 0.7310279561389D-03 0.7483935913040D-03 + 0.7661712369406D-03 0.7843706497523D-03 0.8030018168203D-03 0.8220749610184D-03 + 0.8416005465556D-03 0.8615892846469D-03 0.8820521393172D-03 0.9030003333406D-03 + 0.9244453543176D-03 0.9463989608946D-03 0.9688731891282D-03 0.9918803589975D-03 + 0.1015433081069D-02 0.1039544263315D-02 0.1064227118095D-02 0.1089495169290D-02 + 0.1115362259619D-02 0.1141842558105D-02 0.1168950567737D-02 0.1196701133289D-02 + 0.1225109449338D-02 0.1254191068456D-02 0.1283961909601D-02 0.1314438266696D-02 + 0.1345636817413D-02 0.1377574632157D-02 0.1410269183260D-02 0.1443738354387D-02 + 0.1478000450161D-02 0.1513074206015D-02 0.1548978798262D-02 0.1585733854409D-02 + 0.1623359463706D-02 0.1661876187936D-02 0.1701305072458D-02 0.1741667657505D-02 + 0.1782985989747D-02 0.1825282634108D-02 0.1868580685877D-02 0.1912903783076D-02 + 0.1958276119133D-02 0.2004722455835D-02 0.2052268136585D-02 0.2100939099962D-02 + 0.2150761893598D-02 0.2201763688371D-02 0.2253972292925D-02 0.2307416168524D-02 + 0.2362124444253D-02 0.2418126932561D-02 0.2475454145167D-02 0.2534137309329D-02 + 0.2594208384486D-02 0.2655700079287D-02 0.2718645869002D-02 0.2783080013344D-02 + 0.2849037574687D-02 0.2916554436715D-02 0.2985667323484D-02 0.3056413818931D-02 + 0.3128832386828D-02 0.3202962391187D-02 0.3278844117136D-02 0.3356518792272D-02 + 0.3436028608501D-02 0.3517416744371D-02 0.3600727387929D-02 0.3686005760082D-02 + 0.3773298138499D-02 0.3862651882061D-02 0.3954115455860D-02 0.4047738456768D-02 + 0.4143571639594D-02 0.4241666943825D-02 0.4342077520985D-02 0.4444857762604D-02 + 0.4550063328833D-02 0.4657751177697D-02 0.4767979595018D-02 0.4880808225009D-02 + 0.4996298101570D-02 0.5114511680279D-02 0.5235512871115D-02 0.5359367071918D-02 + 0.5486141202598D-02 0.5615903740128D-02 0.5748724754308D-02 0.5884675944352D-02 + 0.6023830676284D-02 0.6166264021183D-02 0.6312052794284D-02 0.6461275594959D-02 + 0.6614012847588D-02 0.6770346843357D-02 0.6930361782982D-02 0.7094143820394D-02 + 0.7261781107400D-02 0.7433363839342D-02 0.7608984301773D-02 0.7788736918176D-02 + 0.7972718298747D-02 0.8161027290261D-02 0.8353765027049D-02 0.8551034983111D-02 + 0.8752943025377D-02 0.8959597468160D-02 0.9171109128811D-02 0.9387591384603D-02 + 0.9609160230877D-02 0.9835934340477D-02 0.1006803512449D-01 0.1030558679431D-01 + 0.1054871642512D-01 0.1079755402073D-01 0.1105223257982D-01 0.1131288816368D-01 + 0.1157965996544D-01 0.1185269038080D-01 0.1213212508026D-01 0.1241811308303D-01 + 0.1271080683248D-01 0.1301036227325D-01 0.1331693893004D-01 0.1363069998813D-01 + 0.1395181237567D-01 0.1428044684765D-01 0.1461677807184D-01 0.1496098471648D-01 + 0.1531324953990D-01 0.1567375948211D-01 0.1604270575828D-01 0.1642028395434D-01 + 0.1680669412453D-01 0.1720214089116D-01 0.1760683354637D-01 0.1802098615621D-01 + 0.1844481766683D-01 0.1887855201303D-01 0.1932241822902D-01 0.1977665056168D-01 + 0.2024148858606D-01 0.2071717732349D-01 0.2120396736203D-01 0.2170211497964D-01 + 0.2221188226980D-01 0.2273353726988D-01 0.2326735409215D-01 0.2381361305754D-01 + 0.2437260083229D-01 0.2494461056731D-01 0.2552994204062D-01 0.2612890180262D-01 + 0.2674180332442D-01 0.2736896714935D-01 0.2801072104743D-01 0.2866740017320D-01 + 0.2933934722669D-01 0.3002691261781D-01 0.3073045463399D-01 0.3145033961141D-01 + 0.3218694210958D-01 0.3294064508962D-01 0.3371184009606D-01 0.3450092744243D-01 + 0.3530831640054D-01 0.3613442539362D-01 0.3697968219334D-01 0.3784452412086D-01 + 0.3872939825181D-01 0.3963476162544D-01 0.4056108145796D-01 0.4150883536008D-01 + 0.4247851155891D-01 0.4347060912422D-01 0.4448563819924D-01 0.4552412023590D-01 + 0.4658658823475D-01 0.4767358698962D-01 0.4878567333696D-01 0.4992341641008D-01 + 0.5108739789835D-01 0.5227821231135D-01 0.5349646724813D-01 0.5474278367169D-01 + 0.5601779618862D-01 0.5732215333417D-01 0.5865651786266D-01 0.6002156704340D-01 + 0.6141799296226D-01 0.6284650282880D-01 0.6430781928923D-01 0.6580268074515D-01 + 0.6733184167825D-01 0.6889607298100D-01 0.7049616229337D-01 0.7213291434581D-01 + 0.7380715130845D-01 0.7551971314661D-01 0.7727145798277D-01 0.7906326246509D-01 + 0.8089602214242D-01 0.8277065184608D-01 0.8468808607842D-01 0.8664927940812D-01 + 0.8865520687255D-01 0.9070686438707D-01 0.9280526916144D-01 0.9495146012343D-01 + 0.9714649834967D-01 0.9939146750384D-01 0.1016874742823D+00 0.1040356488672D+00 + 0.1064371453872D+00 0.1088931423856D+00 0.1114048432967D+00 0.1139734769295D+00 + 0.1166002979593D+00 0.1192865874273D+00 0.1220336532487D+00 0.1248428307276D+00 + 0.1277154830815D+00 0.1306530019730D+00 0.1336568080498D+00 0.1367283514936D+00 + 0.1398691125766D+00 0.1430806022269D+00 0.1463643626021D+00 0.1497219676713D+00 + 0.1531550238057D+00 0.1566651703780D+00 0.1602540803695D+00 0.1639234609870D+00 + 0.1676750542871D+00 0.1715106378098D+00 0.1754320252209D+00 0.1794410669619D+00 + 0.1835396509100D+00 0.1877297030455D+00 0.1920131881282D+00 0.1963921103827D+00 + 0.2008685141914D+00 0.2054444847966D+00 0.2101221490109D+00 0.2149036759359D+00 + 0.2197912776889D+00 0.2247872101386D+00 0.2298937736476D+00 0.2351133138248D+00 + 0.2404482222837D+00 0.2459009374100D+00 0.2514739451362D+00 0.2571697797240D+00 + 0.2629910245536D+00 0.2689403129212D+00 0.2750203288421D+00 0.2812338078623D+00 + 0.2875835378751D+00 0.2940723599454D+00 0.3007031691395D+00 0.3074789153608D+00 + 0.3144026041916D+00 0.3214772977396D+00 0.3287061154899D+00 0.3360922351618D+00 + 0.3436388935694D+00 0.3513493874868D+00 0.3592270745164D+00 0.3672753739607D+00 + 0.3754977676972D+00 0.3838978010545D+00 0.3924790836915D+00 0.4012452904770D+00 + 0.4102001623706D+00 0.4193475073036D+00 0.4286912010595D+00 0.4382351881538D+00 + 0.4479834827120D+00 0.4579401693452D+00 0.4681094040228D+00 0.4784954149418D+00 + 0.4891025033910D+00 0.4999350446102D+00 0.5109974886435D+00 0.5222943611853D+00 + 0.5338302644183D+00 0.5456098778426D+00 0.5576379590956D+00 0.5699193447601D+00 + 0.5824589511607D+00 0.5952617751475D+00 0.6083328948654D+00 0.6216774705074D+00 + 0.6353007450521D+00 0.6492080449824D+00 0.6634047809857D+00 0.6778964486325D+00 + 0.6926886290333D+00 0.7077869894721D+00 0.7231972840138D+00 0.7389253540860D+00 + 0.7549771290311D+00 0.7713586266289D+00 0.7880759535873D+00 0.8051353059985D+00 + 0.8225429697604D+00 0.8403053209599D+00 0.8584288262158D+00 0.8769200429817D+00 + 0.8957856198031D+00 0.9150322965294D+00 0.9346669044774D+00 0.9546963665439D+00 + 0.9751276972649D+00 0.9959680028197D+00 0.1017224480976D+01 0.1038904420974D+01 + 0.1061015203349D+01 0.1083564299686D+01 0.1106559272300D+01 0.1130007773859D+01 + 0.1153917546912D+01 0.1178296423354D+01 0.1203152323804D+01 0.1228493256899D+01 + 0.1254327318495D+01 0.1280662690787D+01 0.1307507641324D+01 0.1334870521934D+01 + 0.1362759767535D+01 0.1391183894856D+01 0.1420151501035D+01 0.1449671262109D+01 + 0.1479751931386D+01 0.1510402337698D+01 0.1541631383520D+01 0.1573448042969D+01 + 0.1605861359662D+01 0.1638880444440D+01 0.1672514472946D+01 0.1706772683055D+01 + 0.1741664372155D+01 0.1777198894269D+01 0.1813385657016D+01 0.1850234118409D+01 + 0.1887753783475D+01 0.1925954200705D+01 0.1964844958324D+01 0.2004435680370D+01 + 0.2044736022586D+01 0.2085755668115D+01 0.2127504322996D+01 0.2169991711448D+01 + 0.2213227570952D+01 0.2257221647108D+01 0.2301983688271D+01 0.2347523439972D+01 + 0.2393850639086D+01 0.2440975007782D+01 0.2488906247220D+01 0.2537654031002D+01 + 0.2587227998372D+01 0.2637637747157D+01 0.2688892826442D+01 0.2741002728983D+01 + 0.2793976883341D+01 0.2847824645743D+01 0.2902555291652D+01 0.2958178007063D+01 + 0.3014701879494D+01 0.3072135888684D+01 0.3130488897001D+01 0.3189769639525D+01 + 0.3249986713841D+01 0.3311148569513D+01 0.3373263497233D+01 0.3436339617667D+01 + 0.3500384869964D+01 0.3565406999951D+01 0.3631413547991D+01 0.3698411836514D+01 + 0.3766408957221D+01 0.3835411757947D+01 0.3905426829193D+01 0.3976460490322D+01 + 0.4048518775419D+01 0.4121607418815D+01 0.4195731840277D+01 0.4270897129857D+01 + 0.4347108032420D+01 0.4424368931831D+01 0.4502683834816D+01 0.4582056354503D+01 + 0.4662489693636D+01 0.4743986627475D+01 0.4826549486387D+01 0.4910180138127D+01 + 0.4994879969825D+01 0.5080649869681D+01 0.5167490208373D+01 0.5255400820202D+01 + 0.5344380983962D+01 0.5434429403565D+01 0.5525544188426D+01 0.5617722833617D+01 + 0.5710962199815D+01 0.5805258493041D+01 0.5900607244231D+01 0.5997003288635D+01 + 0.6094440745069D+01 0.6192912995049D+01 0.6292412661814D+01 0.6392931589269D+01 + 0.6494460820874D+01 0.6596990578488D+01 0.6700510241224D+01 0.6805008324307D+01 + 0.6910472457995D+01 0.7016889366579D+01 0.7124244847491D+01 0.7232523750568D+01 + 0.7341709957494D+01 0.7451786361463D+01 0.7562734847107D+01 0.7674536270712D+01 + 0.7787170440791D+01 0.7900616099026D+01 0.8014850901658D+01 0.8129851401340D+01 + 0.8245593029526D+01 0.8362050079436D+01 0.8479195689649D+01 0.8597001828383D+01 + 0.8715439278509D+01 0.8834477623371D+01 0.8954085233454D+01 0.9074229253973D+01 + 0.9194875593440D+01 0.9315988913276D+01 0.9437532618530D+01 0.9559468849772D+01 + 0.9681758476237D+01 0.9804361090277D+01 0.9927235003199D+01 0.1005033724256D+02 + 0.1017362355101D+02 0.1029704838669D+02 0.1042056492540D+02 0.1054412506444D+02 + 0.1066767942831D+02 0.1079117737637D+02 0.1091456701244D+02 0.1103779519646D+02 + 0.1116080755839D+02 0.1128354851420D+02 0.1140596128432D+02 0.1152798791434D+02 + 0.1164956929827D+02 0.1177064520433D+02 0.1189115430327D+02 0.1201103419951D+02 + 0.1213022146500D+02 0.1224865167586D+02 0.1236625945201D+02 0.1248297849976D+02 + 0.1259874165744D+02 0.1271348094411D+02 0.1282712761148D+02 0.1293961219902D+02 + 0.1305086459240D+02 0.1316081408518D+02 0.1326938944391D+02 0.1337651897664D+02 + 0.1348213060491D+02 0.1358615193909D+02 0.1368851035736D+02 0.1378913308811D+02 + 0.1388794729589D+02 0.1398488017086D+02 0.1407985902179D+02 0.1417281137257D+02 + 0.1426366506212D+02 0.1435234834789D+02 0.1443879001264D+02 0.1452291947466D+02 + 0.1460466690129D+02 0.1468396332564D+02 0.1476074076649D+02 0.1483493235126D+02 + 0.1490647244192D+02 0.1497529676373D+02 0.1504134253675D+02 0.1510454860984D+02 + 0.1516485559720D+02 0.1522220601698D+02 0.1527654443219D+02 0.1532781759325D+02 + 0.1537597458241D+02 0.1542096695946D+02 0.1546274890874D+02 0.1550127738702D+02 + 0.1553651227211D+02 0.1556841651189D+02 0.1559695627334D+02 0.1562210109145D+02 + 0.1564382401753D+02 0.1566210176664D+02 0.1567691486377D+02 0.1568824778841D+02 + 0.1569608911712D+02 0.1570043166360D+02 0.1570127261607D+02 0.1569861367129D+02 + 0.1569246116496D+02 0.1568282619787D+02 0.1566972475757D+02 0.1565317783486D+02 + 0.1563321153475D+02 0.1560985718135D+02 0.1558315141624D+02 0.1555313628970D+02 + 0.1551985934445D+02 0.1548337369123D+02 0.1544373807583D+02 0.1540101693692D+02 + 0.1535528045436D+02 0.1530660458716D+02 0.1525507110098D+02 0.1520076758423D+02 + 0.1514378745267D+02 0.1508422994170D+02 0.1502220008605D+02 0.1495780868635D+02 + 0.1489117226206D+02 0.1482241299046D+02 0.1475165863115D+02 0.1467904243575D+02 + 0.1460470304238D+02 0.1452878435463D+02 0.1445143540465D+02 0.1437281020013D+02 + 0.1429306755483D+02 0.1421237090260D+02 0.1413088809452D+02 0.1404879117925D+02 + 0.1396625616625D+02 0.1388346277207D+02 0.1380059414952D+02 0.1371783659988D+02 + 0.1363537926825D+02 0.1355341382212D+02 0.1347213411351D+02 0.1339173582480D+02 + 0.1331241609871D+02 0.1323437315279D+02 0.1315780587881D+02 0.1308291342766D+02 + 0.1300989478035D+02 0.1293894830568D+02 0.1287027130535D+02 0.1280405954732D+02 + 0.1274050678825D+02 0.1267980428593D+02 0.1262214030269D+02 0.1256769960087D+02 + 0.1251666293145D+02 0.1246920651702D+02 0.1242550153038D+02 0.1238571356999D+02 + 0.1235000213372D+02 0.1231852009235D+02 0.1229141316414D+02 0.1226881939222D+02 + 0.1225086862623D+02 0.1223768200985D+02 0.1222937147599D+02 0.1222603925117D+02 + 0.1222777737106D+02 0.1223466720868D+02 0.1224677901729D+02 0.1226417148958D+02 + 0.1228689133517D+02 0.1231497287802D+02 0.1234843767581D+02 0.1238729416297D+02 + 0.1243153731911D+02 0.1248114836487D+02 0.1253609448665D+02 0.1259632859227D+02 + 0.1266178909890D+02 0.1273239975523D+02 0.1280806949923D+02 0.1288869235315D+02 + 0.1297414735711D+02 0.1306429854274D+02 0.1315899494816D+02 0.1325807067533D+02 + 0.1336134499111D+02 0.1346862247282D+02 0.1357969319917D+02 0.1369433298744D+02 + 0.1381230367740D+02 0.1393335346243D+02 0.1405721726828D+02 0.1418361717951D+02 + 0.1431226291376D+02 0.1444285234362D+02 0.1457507206581D+02 0.1470859801733D+02 + 0.1484309613763D+02 0.1497822307639D+02 0.1511362694548D+02 0.1524894811426D+02 + 0.1538382004666D+02 0.1551787017849D+02 0.1565072083339D+02 0.1578199017530D+02 + 0.1591129319546D+02 0.1603824273170D+02 0.1616245051740D+02 0.1628352825765D+02 + 0.1640108872963D+02 0.1651474690448D+02 0.1662412108723D+02 0.1672883407174D+02 + 0.1682851430716D+02 0.1692279707220D+02 0.1701132565381D+02 0.1709375252614D+02 + 0.1716974052608D+02 0.1723896402125D+02 0.1730111006644D+02 0.1735587954416D+02 + 0.1740298828530D+02 0.1744216816538D+02 0.1747316817225D+02 0.1749575544089D+02 + 0.1750971625093D+02 0.1751485698260D+02 0.1751100502688D+02 0.1749800964559D+02 + 0.1747574277733D+02 0.1744409978499D+02 0.1740300014123D+02 0.1735238804766D+02 + 0.1729223298439D+02 0.1722253018618D+02 0.1714330104180D+02 0.1705459341368D+02 + 0.1695648187457D+02 0.1684906785873D+02 0.1673247972505D+02 0.1660687272995D+02 + 0.1647242890818D+02 0.1632935685981D+02 0.1617789144222D+02 0.1601829336618D+02 + 0.1585084869528D+02 0.1567586824865D+02 0.1549368690699D+02 0.1530466282265D+02 + 0.1510917653451D+02 0.1490762998916D+02 0.1470044547022D+02 0.1448806443791D+02 + 0.1427094628160D+02 0.1404956698852D+02 0.1382441773199D+02 0.1359600338336D+02 + 0.1336484095192D+02 0.1313145795774D+02 0.1289639074258D+02 0.1266018272468D+02 + 0.1242338260337D+02 0.1218654252002D+02 0.1195021618209D+02 0.1171495695744D+02 + 0.1148131594627D+02 0.1124984003849D+02 0.1102106996440D+02 0.1079553834688D+02 + 0.1057376776347D+02 0.1035626882667D+02 0.1014353829125D+02 0.9936057196884D+01 + 0.9734289054994D+01 0.9538678088120D+01 0.9349647530399D+01 0.9167597997384D+01 + 0.8992905933301D+01 0.8825922143594D+01 0.8666970420224D+01 0.8516346266999D+01 + 0.8374315731611D+01 0.8241114350747D+01 0.8116946214096D+01 0.8001983152570D+01 + 0.7896364055459D+01 0.7800194320670D+01 0.7713545441561D+01 0.7636454733225D+01 + 0.7568925200401D+01 0.7510925548528D+01 0.7462390338698D+01 0.7423220286625D+01 + 0.7393282704950D+01 0.7372412087556D+01 0.7360410833787D+01 0.7357050109802D+01 + 0.7362070843542D+01 0.7375184849138D+01 0.7396076075866D+01 0.7424401976120D+01 + 0.7459794986211D+01 0.7501864113185D+01 0.7550196620265D+01 0.7604359802945D+01 + 0.7663902847256D+01 0.7728358761219D+01 0.7797246370063D+01 0.7870072365405D+01 + 0.7946333398216D+01 0.8025518205140D+01 0.8107109757504D+01 0.8190587422172D+01 + 0.8275429123337D+01 0.8361113494303D+01 0.8447122008353D+01 0.8532941077928D+01 + 0.8618064111536D+01 0.8701993518075D+01 0.8784242648578D+01 0.8864337665829D+01 + 0.8941819332731D+01 0.9016244710878D+01 0.9087188761372D+01 0.9154245840560D+01 + 0.9217031084099D+01 0.9275181673474D+01 0.9328357979881D+01 0.9376244581215D+01 + 0.9418551148709D+01 0.9455013200639D+01 0.9485392721360D+01 0.9509478644797D+01 + 0.9527087202359D+01 0.9538062136102D+01 0.9542274778747D+01 0.9539624002998D+01 + 0.9530036043300D+01 0.9513464193959D+01 0.9489888388159D+01 0.9459314663078D+01 + 0.9421774516843D+01 0.9377324163609D+01 0.9326043693467D+01 0.9268036144314D+01 + 0.9203426493115D+01 0.9132360574297D+01 0.9055003933175D+01 0.8971540622481D+01 + 0.8882171950151D+01 0.8787115186520D+01 0.8686602239071D+01 0.8580878302773D+01 + 0.8470200493895D+01 0.8354836475027D+01 0.8235063078754D+01 0.8111164937189D+01 + 0.7983433124252D+01 0.7852163817216D+01 0.7717656983696D+01 0.7580215099831D+01 + 0.7440141905014D+01 0.7297741198086D+01 0.7153315679440D+01 0.7007165843079D+01 + 0.6859588922166D+01 0.6710877891167D+01 0.6561320527250D+01 0.6411198533128D+01 + 0.6260786723101D+01 0.6110352273646D+01 0.5960154039458D+01 0.5810441935471D+01 + 0.5661456384987D+01 0.5513427833700D+01 0.5366576329042D+01 0.5221111163955D+01 + 0.5077230583918D+01 0.4935121555751D+01 0.4794959596475D+01 0.4656908660288D+01 + 0.4521121081498D+01 0.4387737571052D+01 0.4256887264186D+01 0.4128687816522D+01 + 0.4003245545873D+01 0.3880655616880D+01 0.3761002265561D+01 0.3644359060777D+01 + 0.3530789199588D+01 0.3420345833472D+01 0.3313072422343D+01 0.3209003113371D+01 + 0.3108163141592D+01 0.3010569249384D+01 0.2916230121919D+01 0.2825146835796D+01 + 0.2737313318133D+01 0.2652716813508D+01 0.2571338356232D+01 0.2493153245580D+01 + 0.2418131521695D+01 0.2346238440047D+01 0.2277434942461D+01 0.2211678122838D+01 + 0.2148921685899D+01 0.2089116397376D+01 0.2032210524266D+01 0.1978150263893D+01 + 0.1926880160684D+01 0.1878343509721D+01 0.1832482746269D+01 0.1789239820638D+01 + 0.1748556557871D+01 0.1710375001879D+01 0.1674637743804D+01 0.1641288234472D+01 + 0.1610271080956D+01 0.1581532327338D+01 0.1555019719890D+01 0.1530682956958D+01 + 0.1508473923914D+01 0.1488346913611D+01 0.1470258832820D+01 0.1454169395155D+01 + 0.1440041301042D+01 0.1427840405245D+01 0.1417535872504D+01 0.1409100321753D+01 + 0.1402509959377D+01 0.1397744701874D+01 0.1394788288181D+01 0.1393628381826D+01 + 0.1394256662892D+01 0.1396668909610D+01 0.1400865069190D+01 0.1406849317222D+01 + 0.1414629369614D+01 0.1424336942263D+01 0.1436096575202D+01 0.1449912447024D+01 + 0.1465794674727D+01 0.1483759333931D+01 0.1503828494539D+01 0.1526030271798D+01 + 0.1550398892649D+01 0.1576974777196D+01 0.1605804635055D+01 0.1636941576215D+01 + 7 1012 + 1 0 -1 -511.89194 + 2 0 -1 -58.90181 + 2 1 1 -50.68932 + 2 1 -2 -49.77537 + 3 0 -1 -5.73317 + 3 1 1 -3.34334 + 3 1 -2 -3.22919 + 0.2122975645015D-04 0.2173507709867D-04 0.2225242316243D-04 0.2278208072829D-04 + 0.2332434268594D-04 0.2387950888954D-04 0.2444788632325D-04 0.2502978927059D-04 + 0.2562553948791D-04 0.2623546638192D-04 0.2685990719144D-04 0.2749920717353D-04 + 0.2815371979393D-04 0.2882380692207D-04 0.2950983903075D-04 0.3021219540050D-04 + 0.3093126432877D-04 0.3166744334418D-04 0.3242113942573D-04 0.3319276922733D-04 + 0.3398275930755D-04 0.3479154636487D-04 0.3561957747857D-04 0.3646731035519D-04 + 0.3733521358096D-04 0.3822376688016D-04 0.3913346137963D-04 0.4006479987955D-04 + 0.4101829713060D-04 0.4199448011777D-04 0.4299388835081D-04 0.4401707416166D-04 + 0.4506460300883D-04 0.4613705378910D-04 0.4723501915650D-04 0.4835910584899D-04 + 0.4950993502270D-04 0.5068814259429D-04 0.5189437959126D-04 0.5312931251066D-04 + 0.5439362368626D-04 0.5568801166444D-04 0.5701319158897D-04 0.5836989559491D-04 + 0.5975887321186D-04 0.6118089177673D-04 0.6263673685632D-04 0.6412721267990D-04 + 0.6565314258201D-04 0.6721536945580D-04 0.6881475621705D-04 0.7045218627922D-04 + 0.7212856403973D-04 0.7384481537777D-04 0.7560188816385D-04 0.7740075278149D-04 + 0.7924240266119D-04 0.8112785482706D-04 0.8305815045642D-04 0.8503435545263D-04 + 0.8705756103141D-04 0.8912888432116D-04 0.9124946897738D-04 0.9342048581165D-04 + 0.9564313343555D-04 0.9791863891974D-04 0.1002482584687D-03 0.1026332781112D-03 + 0.1050750144077D-03 0.1075748151735D-03 0.1101340602203D-03 0.1127541621137D-03 + 0.1154365669501D-03 0.1181827551510D-03 0.1209942422769D-03 0.1238725798590D-03 + 0.1268193562527D-03 0.1298361975089D-03 0.1329247682680D-03 0.1360867726735D-03 + 0.1393239553083D-03 0.1426381021518D-03 0.1460310415612D-03 0.1495046452749D-03 + 0.1530608294397D-03 0.1567015556625D-03 0.1604288320871D-03 0.1642447144955D-03 + 0.1681513074364D-03 0.1721507653792D-03 0.1762452938963D-03 0.1804371508722D-03 + 0.1847286477421D-03 0.1891221507592D-03 0.1936200822920D-03 0.1982249221522D-03 + 0.2029392089542D-03 0.2077655415060D-03 0.2127065802334D-03 0.2177650486382D-03 + 0.2229437347894D-03 0.2282454928513D-03 0.2336732446459D-03 0.2392299812538D-03 + 0.2449187646513D-03 0.2507427293871D-03 0.2567050842979D-03 0.2628091142650D-03 + 0.2690581820118D-03 0.2754557299435D-03 0.2820052820308D-03 0.2887104457371D-03 + 0.2955749139921D-03 0.3026024672103D-03 0.3097969753590D-03 0.3171624000731D-03 + 0.3247027968207D-03 0.3324223171196D-03 0.3403252108055D-03 0.3484158283536D-03 + 0.3566986232552D-03 0.3651781544500D-03 0.3738590888149D-03 0.3827462037126D-03 + 0.3918443895988D-03 0.4011586526914D-03 0.4106941177020D-03 0.4204560306321D-03 + 0.4304497616342D-03 0.4406808079408D-03 0.4511547968612D-03 0.4618774888502D-03 + 0.4728547806468D-03 0.4840927084883D-03 0.4955974513988D-03 0.5073753345551D-03 + 0.5194328327314D-03 0.5317765738249D-03 0.5444133424641D-03 0.5573500837015D-03 + 0.5705939067925D-03 0.5841520890639D-03 0.5980320798714D-03 0.6122415046513D-03 + 0.6267881690659D-03 0.6416800632466D-03 0.6569253661363D-03 0.6725324499326D-03 + 0.6885098846360D-03 0.7048664427037D-03 0.7216111038125D-03 0.7387530597330D-03 + 0.7563017193176D-03 0.7742667136049D-03 0.7926579010441D-03 0.8114853728404D-03 + 0.8307594584254D-03 0.8504907310562D-03 0.8706900135433D-03 0.8913683841142D-03 + 0.9125371824119D-03 0.9342080156346D-03 0.9563927648179D-03 0.9791035912634D-03 + 0.1002352943117D-02 0.1026153562102D-02 0.1050518490405D-02 0.1075461077728D-02 + 0.1100994988496D-02 0.1127134209246D-02 0.1153893056171D-02 0.1181286182852D-02 + 0.1209328588167D-02 0.1238035624379D-02 0.1267423005415D-02 0.1297506815344D-02 + 0.1328303517037D-02 0.1359829961041D-02 0.1392103394654D-02 0.1425141471212D-02 + 0.1458962259585D-02 0.1493584253904D-02 0.1529026383504D-02 0.1565308023106D-02 + 0.1602449003221D-02 0.1640469620811D-02 0.1679390650189D-02 0.1719233354165D-02 + 0.1760019495464D-02 0.1801771348394D-02 0.1844511710794D-02 0.1888263916250D-02 + 0.1933051846599D-02 0.1978899944720D-02 0.2025833227614D-02 0.2073877299798D-02 + 0.2123058366995D-02 0.2173403250151D-02 0.2224939399761D-02 0.2277694910540D-02 + 0.2331698536421D-02 0.2386979705903D-02 0.2443568537747D-02 0.2501495857040D-02 + 0.2560793211623D-02 0.2621492888896D-02 0.2683627933011D-02 0.2747232162458D-02 + 0.2812340188056D-02 0.2878987431352D-02 0.2947210143447D-02 0.3017045424251D-02 + 0.3088531242177D-02 0.3161706454285D-02 0.3236610826892D-02 0.3313285056646D-02 + 0.3391770792086D-02 0.3472110655691D-02 0.3554348266436D-02 0.3638528262858D-02 + 0.3724696326649D-02 0.3812899206788D-02 0.3903184744224D-02 0.3995601897109D-02 + 0.4090200766624D-02 0.4187032623373D-02 0.4286149934389D-02 0.4387606390746D-02 + 0.4491456935804D-02 0.4597757794082D-02 0.4706566500803D-02 0.4817941932088D-02 + 0.4931944335851D-02 0.5048635363379D-02 0.5168078101634D-02 0.5290337106279D-02 + 0.5415478435454D-02 0.5543569684307D-02 0.5674680020311D-02 0.5808880219367D-02 + 0.5946242702730D-02 0.6086841574754D-02 0.6230752661494D-02 0.6378053550168D-02 + 0.6528823629508D-02 0.6683144131013D-02 0.6841098171130D-02 0.7002770794372D-02 + 0.7168249017405D-02 0.7337621874121D-02 0.7510980461712D-02 0.7688417987773D-02 + 0.7870029818463D-02 0.8055913527720D-02 0.8246168947593D-02 0.8440898219673D-02 + 0.8640205847678D-02 0.8844198751201D-02 0.9052986320644D-02 0.9266680473381D-02 + 0.9485395711148D-02 0.9709249178711D-02 0.9938360723829D-02 0.1017285295853D-01 + 0.1041285132175D-01 0.1065848414335D-01 0.1090988270951D-01 0.1116718132961D-01 + 0.1143051740455D-01 0.1170003149653D-01 0.1197586740047D-01 0.1225817221684D-01 + 0.1254709642620D-01 0.1284279396532D-01 0.1314542230495D-01 0.1345514252930D-01 + 0.1377211941725D-01 0.1409652152530D-01 0.1442852127232D-01 0.1476829502620D-01 + 0.1511602319226D-01 0.1547189030365D-01 0.1583608511371D-01 0.1620880069022D-01 + 0.1659023451183D-01 0.1698058856639D-01 0.1738006945154D-01 0.1778888847734D-01 + 0.1820726177118D-01 0.1863541038486D-01 0.1907356040402D-01 0.1952194305980D-01 + 0.1998079484302D-01 0.2045035762063D-01 0.2093087875471D-01 0.2142261122400D-01 + 0.2192581374792D-01 0.2244075091329D-01 0.2296769330365D-01 0.2350691763133D-01 + 0.2405870687229D-01 0.2462335040374D-01 0.2520114414469D-01 0.2579239069942D-01 + 0.2639739950387D-01 0.2701648697516D-01 0.2764997666416D-01 0.2829819941123D-01 + 0.2896149350513D-01 0.2964020484531D-01 0.3033468710740D-01 0.3104530191220D-01 + 0.3177241899806D-01 0.3251641639684D-01 0.3327768061342D-01 0.3405660680881D-01 + 0.3485359898710D-01 0.3566907018606D-01 0.3650344267166D-01 0.3735714813647D-01 + 0.3823062790211D-01 0.3912433312562D-01 0.4003872501011D-01 0.4097427501948D-01 + 0.4193146509749D-01 0.4291078789111D-01 0.4391274697832D-01 0.4493785710035D-01 + 0.4598664439858D-01 0.4705964665594D-01 0.4815741354312D-01 0.4928050686955D-01 + 0.5042950083923D-01 0.5160498231153D-01 0.5280755106696D-01 0.5403782007813D-01 + 0.5529641578584D-01 0.5658397838041D-01 0.5790116208843D-01 0.5924863546488D-01 + 0.6062708169076D-01 0.6203719887636D-01 0.6347970037015D-01 0.6495531507346D-01 + 0.6646478776099D-01 0.6800887940725D-01 0.6958836751900D-01 0.7120404647380D-01 + 0.7285672786470D-01 0.7454724085125D-01 0.7627643251682D-01 0.7804516823229D-01 + 0.7985433202641D-01 0.8170482696258D-01 0.8359757552242D-01 0.8553351999606D-01 + 0.8751362287932D-01 0.8953886727772D-01 0.9161025731761D-01 0.9372881856432D-01 + 0.9589559844749D-01 0.9811166669365D-01 0.1003781157661D+00 0.1026960613124D+00 + 0.1050666426187D+00 0.1074910230727D+00 0.1099703906329D+00 0.1125059583070D+00 + 0.1150989646366D+00 0.1177506741909D+00 0.1204623780676D+00 0.1232353944021D+00 + 0.1260710688845D+00 0.1289707752849D+00 0.1319359159864D+00 0.1349679225270D+00 + 0.1380682561490D+00 0.1412384083570D+00 0.1444799014844D+00 0.1477942892678D+00 + 0.1511831574303D+00 0.1546481242725D+00 0.1581908412731D+00 0.1618129936965D+00 + 0.1655163012104D+00 0.1693025185104D+00 0.1731734359544D+00 0.1771308802047D+00 + 0.1811767148790D+00 0.1853128412094D+00 0.1895411987104D+00 0.1938637658552D+00 + 0.1982825607598D+00 0.2027996418767D+00 0.2074171086957D+00 0.2121371024533D+00 + 0.2169618068509D+00 0.2218934487801D+00 0.2269342990569D+00 0.2320866731634D+00 + 0.2373529319974D+00 0.2427354826295D+00 0.2482367790682D+00 0.2538593230323D+00 + 0.2596056647304D+00 0.2654784036474D+00 0.2714801893389D+00 0.2776137222308D+00 + 0.2838817544268D+00 0.2902870905217D+00 0.2968325884206D+00 0.3035211601645D+00 + 0.3103557727607D+00 0.3173394490192D+00 0.3244752683937D+00 0.3317663678273D+00 + 0.3392159426028D+00 0.3468272471962D+00 0.3546035961349D+00 0.3625483648577D+00 + 0.3706649905790D+00 0.3789569731540D+00 0.3874278759464D+00 0.3960813266976D+00 + 0.4049210183955D+00 0.4139507101454D+00 0.4231742280388D+00 0.4325954660221D+00 + 0.4422183867640D+00 0.4520470225197D+00 0.4620854759931D+00 0.4723379211946D+00 + 0.4828086042953D+00 0.4935018444749D+00 0.5044220347646D+00 0.5155736428822D+00 + 0.5269612120602D+00 0.5385893618646D+00 0.5504627890040D+00 0.5625862681281D+00 + 0.5749646526146D+00 0.5876028753427D+00 0.6005059494532D+00 0.6136789690924D+00 + 0.6271271101407D+00 0.6408556309226D+00 0.6548698728981D+00 0.6691752613333D+00 + 0.6837773059493D+00 0.6986816015479D+00 0.7138938286123D+00 0.7294197538810D+00 + 0.7452652308942D+00 0.7614362005101D+00 0.7779386913894D+00 0.7947788204470D+00 + 0.8119627932680D+00 0.8294969044866D+00 0.8473875381261D+00 0.8656411678975D+00 + 0.8842643574549D+00 0.9032637606047D+00 0.9226461214683D+00 0.9424182745935D+00 + 0.9625871450140D+00 0.9831597482541D+00 0.1004143190275D+01 0.1025544667362D+01 + 0.1047371465949D+01 0.1069630962376D+01 0.1092330622582D+01 0.1115478001718D+01 + 0.1139080743699D+01 0.1163146580667D+01 0.1187683332379D+01 0.1212698905512D+01 + 0.1238201292877D+01 0.1264198572546D+01 0.1290698906886D+01 0.1317710541494D+01 + 0.1345241804028D+01 0.1373301102944D+01 0.1401896926110D+01 0.1431037839321D+01 + 0.1460732484690D+01 0.1490989578921D+01 0.1521817911461D+01 0.1553226342519D+01 + 0.1585223800953D+01 0.1617819282025D+01 0.1651021845012D+01 0.1684840610666D+01 + 0.1719284758534D+01 0.1754363524114D+01 0.1790086195862D+01 0.1826462112019D+01 + 0.1863500657290D+01 0.1901211259327D+01 0.1939603385053D+01 0.1978686536792D+01 + 0.2018470248210D+01 0.2058964080068D+01 0.2100177615772D+01 0.2142120456722D+01 + 0.2184802217451D+01 0.2228232520549D+01 0.2272420991371D+01 0.2317377252521D+01 + 0.2363110918097D+01 0.2409631587718D+01 0.2456948840298D+01 0.2505072227579D+01 + 0.2554011267414D+01 0.2603775436800D+01 0.2654374164640D+01 0.2705816824249D+01 + 0.2758112725590D+01 0.2811271107225D+01 0.2865301128002D+01 0.2920211858443D+01 + 0.2976012271854D+01 0.3032711235135D+01 0.3090317499294D+01 0.3148839689666D+01 + 0.3208286295814D+01 0.3268665661132D+01 0.3329985972130D+01 0.3392255247403D+01 + 0.3455481326284D+01 0.3519671857166D+01 0.3584834285516D+01 0.3650975841540D+01 + 0.3718103527540D+01 0.3786224104928D+01 0.3855344080910D+01 0.3925469694842D+01 + 0.3996606904248D+01 0.4068761370505D+01 0.4141938444201D+01 0.4216143150155D+01 + 0.4291380172106D+01 0.4367653837082D+01 0.4444968099432D+01 0.4523326524540D+01 + 0.4602732272224D+01 0.4683188079814D+01 0.4764696244923D+01 0.4847258607911D+01 + 0.4930876534058D+01 0.5015550895439D+01 0.5101282052526D+01 0.5188069835504D+01 + 0.5275913525340D+01 0.5364811834582D+01 0.5454762887935D+01 0.5545764202593D+01 + 0.5637812668364D+01 0.5730904527600D+01 0.5825035354930D+01 0.5920200036841D+01 + 0.6016392751096D+01 0.6113606946037D+01 0.6211835319763D+01 0.6311069799237D+01 + 0.6411301519318D+01 0.6512520801757D+01 0.6614717134178D+01 0.6717879149076D+01 + 0.6821994602856D+01 0.6927050354936D+01 0.7033032346971D+01 0.7139925582197D+01 + 0.7247714104955D+01 0.7356380980422D+01 0.7465908274590D+01 0.7576277034522D+01 + 0.7687467268944D+01 0.7799457929201D+01 0.7912226890625D+01 0.8025750934367D+01 + 0.8140005729731D+01 0.8254965817070D+01 0.8370604591283D+01 0.8486894285977D+01 + 0.8603805958343D+01 0.8721309474805D+01 0.8839373497487D+01 0.8957965471583D+01 + 0.9077051613664D+01 0.9196596901005D+01 0.9316565061973D+01 0.9436918567578D+01 + 0.9557618624205D+01 0.9678625167647D+01 0.9799896858462D+01 0.9921391078761D+01 + 0.1004306393048D+02 0.1016487023519D+02 0.1028676353561D+02 0.1040869609872D+02 + 0.1053061892078D+02 0.1065248173410D+02 0.1077423301584D+02 0.1089581999877D+02 + 0.1101718868413D+02 0.1113828385666D+02 0.1125904910191D+02 0.1137942682584D+02 + 0.1149935827678D+02 0.1161878356999D+02 0.1173764171462D+02 0.1185587064341D+02 + 0.1197340724503D+02 0.1209018739920D+02 0.1220614601465D+02 0.1232121706995D+02 + 0.1243533365740D+02 0.1254842802982D+02 0.1266043165050D+02 0.1277127524634D+02 + 0.1288088886404D+02 0.1298920192971D+02 0.1309614331160D+02 0.1320164138629D+02 + 0.1330562410812D+02 0.1340801908212D+02 0.1350875364026D+02 0.1360775492116D+02 + 0.1370494995324D+02 0.1380026574132D+02 0.1389362935662D+02 0.1398496803019D+02 + 0.1407420924981D+02 0.1416128086012D+02 0.1424611116627D+02 0.1432862904069D+02 + 0.1440876403324D+02 0.1448644648440D+02 0.1456160764164D+02 0.1463417977876D+02 + 0.1470409631813D+02 0.1477129195572D+02 0.1483570278883D+02 0.1489726644633D+02 + 0.1495592222127D+02 0.1501161120574D+02 0.1506427642781D+02 0.1511386299027D+02 + 0.1516031821110D+02 0.1520359176531D+02 0.1524363582812D+02 0.1528040521898D+02 + 0.1531385754641D+02 0.1534395335325D+02 0.1537065626208D+02 0.1539393312048D+02 + 0.1541375414585D+02 0.1543009306950D+02 0.1544292727951D+02 0.1545223796216D+02 + 0.1545801024155D+02 0.1546023331695D+02 0.1545890059744D+02 0.1545400983365D+02 + 0.1544556324596D+02 0.1543356764880D+02 0.1541803457065D+02 0.1539898036925D+02 + 0.1537642634154D+02 0.1535039882796D+02 0.1532092931044D+02 0.1528805450387D+02 + 0.1525181644030D+02 0.1521226254557D+02 0.1516944570778D+02 0.1512342433713D+02 + 0.1507426241669D+02 0.1502202954350D+02 0.1496680095964D+02 0.1490865757272D+02 + 0.1484768596530D+02 0.1478397839284D+02 0.1471763276969D+02 0.1464875264266D+02 + 0.1457744715182D+02 0.1450383097801D+02 0.1442802427679D+02 0.1435015259838D+02 + 0.1427034679327D+02 0.1418874290321D+02 0.1410548203722D+02 0.1402071023247D+02 + 0.1393457829969D+02 0.1384724165293D+02 0.1375886012364D+02 0.1366959775879D+02 + 0.1357962260304D+02 0.1348910646488D+02 0.1339822466686D+02 0.1330715577980D+02 + 0.1321608134121D+02 0.1312518555808D+02 0.1303465499419D+02 0.1294467824221D+02 + 0.1285544558101D+02 0.1276714861841D+02 0.1267997991994D+02 0.1259413262403D+02 + 0.1250980004419D+02 0.1242717525885D+02 0.1234645068948D+02 0.1226781766776D+02 + 0.1219146599257D+02 0.1211758347770D+02 0.1204635549121D+02 0.1197796448732D+02 + 0.1191258953197D+02 0.1185040582321D+02 0.1179158420730D+02 0.1173629069208D+02 + 0.1168468595856D+02 0.1163692487226D+02 0.1159315599549D+02 0.1155352110209D+02 + 0.1151815469598D+02 0.1148718353503D+02 0.1146072616178D+02 0.1143889244247D+02 + 0.1142178311602D+02 0.1140948935454D+02 0.1140209233686D+02 0.1139966283678D+02 + 0.1140226082774D+02 0.1140993510519D+02 0.1142272292875D+02 0.1144064968524D+02 + 0.1146372857460D+02 0.1149196031991D+02 0.1152533290326D+02 0.1156382132880D+02 + 0.1160738741454D+02 0.1165597961412D+02 0.1170953287012D+02 0.1176796849989D+02 + 0.1183119411535D+02 0.1189910357777D+02 0.1197157698856D+02 0.1204848071701D+02 + 0.1212966746596D+02 0.1221497637600D+02 0.1230423316888D+02 0.1239725033077D+02 + 0.1249382733567D+02 0.1259375090926D+02 0.1269679533346D+02 0.1280272279167D+02 + 0.1291128375448D+02 0.1302221740584D+02 0.1313525210912D+02 0.1325010591253D+02 + 0.1336648709337D+02 0.1348409474012D+02 0.1360261937149D+02 0.1372174359123D+02 + 0.1384114277758D+02 0.1396048580566D+02 0.1407943580155D+02 0.1419765092608D+02 + 0.1431478518661D+02 0.1443048927478D+02 0.1454441142812D+02 0.1465619831308D+02 + 0.1476549592746D+02 0.1487195051928D+02 0.1497520951989D+02 0.1507492248828D+02 + 0.1517074206398D+02 0.1526232492551D+02 0.1534933275145D+02 0.1543143318112D+02 + 0.1550830077157D+02 0.1557961794797D+02 0.1564507594396D+02 0.1570437572881D+02 + 0.1575722891823D+02 0.1580335866539D+02 0.1584250052899D+02 0.1587440331524D+02 + 0.1589882989033D+02 0.1591555796049D+02 0.1592438081630D+02 0.1592510803844D+02 + 0.1591756616179D+02 0.1590159929512D+02 0.1587706969359D+02 0.1584385828154D+02 + 0.1580186512290D+02 0.1575100983720D+02 0.1569123195871D+02 0.1562249123695D+02 + 0.1554476787665D+02 0.1545806271560D+02 0.1536239733893D+02 0.1525781412875D+02 + 0.1514437624809D+02 0.1502216755847D+02 0.1489129247063D+02 0.1475187572813D+02 + 0.1460406212401D+02 0.1444801615062D+02 0.1428392158332D+02 0.1411198099888D+02 + 0.1393241522964D+02 0.1374546275490D+02 0.1355137903119D+02 0.1335043576333D+02 + 0.1314292011864D+02 0.1292913388664D+02 0.1270939258714D+02 0.1248402452972D+02 + 0.1225336982785D+02 0.1201777937125D+02 0.1177761376017D+02 0.1153324220569D+02 + 0.1128504140014D+02 0.1103339436205D+02 0.1077868926027D+02 0.1052131822179D+02 + 0.1026167612835D+02 0.1000015940663D+02 0.9737164817090D+01 0.9473088246666D+01 + 0.9208323510392D+01 0.8943261167138D+01 0.8678287354606D+01 0.8413782648689D+01 + 0.8150120952198D+01 0.7887668417870D+01 0.7626782410424D+01 0.7367810512255D+01 + 0.7111089577147D+01 0.6856944836175D+01 0.6605689059620D+01 0.6357621778576D+01 + 0.6113028569417D+01 0.5872180404071D+01 0.5635333068605D+01 0.5402726652271D+01 + 0.5174585108689D+01 0.4951115890458D+01 0.4732509658013D+01 0.4518940063093D+01 + 0.4310563606744D+01 0.4107519571314D+01 0.3909930025455D+01 0.3717899900701D+01 + 0.3531517137795D+01 0.3350852900521D+01 0.3175961854415D+01 0.3006882507418D+01 + 0.2843637609166D+01 0.2686234605393D+01 0.2534666143602D+01 0.2388910626020D+01 + 0.2248932805599D+01 0.2114684420764D+01 0.1986104864410D+01 0.1863121882663D+01 + 0.1745652298807D+01 0.1633602757816D+01 0.1526870486911D+01 0.1425344067651D+01 + 0.1328904215091D+01 0.1237424559686D+01 0.1150772427713D+01 0.1068809616148D+01 + 0.9913931580887D+00 0.9183760750247D+00 0.8496081124357D+00 0.7849364554513D+00 + 0.7242064215293D+00 0.6672621273712D+00 0.6139471275574D+00 0.5641050226618D+00 + 0.5175800348878D+00 0.4742175495586D+00 0.4338646210828D+00 0.3963704423129D+00 + 0.3615867764997D+00 0.3293683513354D+00 0.2995732148544D+00 0.2720630532321D+00 + 0.2467034707815D+00 0.2233642326902D+00 0.2019194712763D+00 0.1822478567499D+00 + 0.1642327336682D+00 0.1477622244444D+00 0.1327293014336D+00 0.1190318292464D+00 + 0.1065725790655D+00 0.9525921682581D-01 0.8500426719540D-01 0.7572505534570D-01 + 0.6734362852856D-01 0.5978665949119D-01 0.5298533375213D-01 0.4687522273735D-01 + 0.4139614473480D-01 0.3649201557103D-01 0.3211069084453D-01 0.2820380147099D-01 + 0.2472658420543D-01 0.2163770870794D-01 0.1889910261478D-01 0.1647577596641D-01 + 0.1433564623066D-01 0.1244936504301D-01 0.1079014767040D-01 0.9333606088531D-02 + 0.8057586449521D-02 0.6942011605538D-02 0.5968729247262D-02 0.5121366113861D-02 + 0.4385188634413D-02 0.3746970269980D-02 0.3194865741265D-02 0.2718292249293D-02 + 0.2307817726031D-02 0.1955056088404D-02 0.1652569412799D-02 0.1393776897745D-02 + 0.1172870439853D-02 0.9847366120634D-03 0.8248848034661D-03 0.6893812560569D-03 + 0.5747887154298D-03 0.4781113990982D-03 0.3967449774979D-03 0.3284312582634D-03 + 0.2712172636576D-03 0.2234183935981D-03 0.1835853721449D-03 0.1504746831443D-03 + 0.1230222105786D-03 0.1003198106540D-03 0.8159455542106D-04 0.6619040144209D-04 + 0.5355205138722D-04 0.4321079120846D-04 0.3477210045803D-04 0.2790484818898D-04 + 0.2233190152246D-04 0.1782198824118D-04 0.1418266855132D-04 0.1125428434880D-04 + 0.8904766856498D-05 0.7025195313453D-05 0.5526010459652D-05 0.4333796852085D-05 + 0.3388557563637D-05 0.2641413563333D-05 0.2052668070841D-05 0.1590183444862D-05 + 0.1228024735392D-05 0.9453299398051D-06 0.7253722919424D-06 0.5547846237125D-06 + 0.4229200131023D-06 0.3213266143727D-06 0.2433177983142D-06 0.1836215545666D-06 + 0.1380955642703D-06 0.1034964778941D-06 0.7729376586493D-07 0.5752008209307D-07 + 0.4265142355148D-07 0.3151151106808D-07 0.2319578320089D-07 0.1701120974173D-07 + 0.1242881489534D-07 0.9046371073667D-08 0.6559198960071D-08 0.4737402476978D-08 + 0.3408191153158D-08 0.2442208093542D-08 0.1742998768590D-08 0.1238932286038D-08 + 0.8770296193333D-09 0.6182683290111D-09 0.4340255982013D-09 0.3033950772413D-09 + 0.2111715589818D-09 0.1463438404983D-09 0.1009726185101D-09 0.6935859066118D-10 + 0.4742849271888D-10 0.3228488955626D-10 0.2187547853929D-10 0.1475212866899D-10 + 0.9901881750809D-11 0.6613860882122D-11 0.4396644350124D-11 0.2908650000322D-11 + 0.1914873227728D-11 0.1254415200484D-11 0.8176535094916D-12 0.5302708391854D-12 + 0.3421370551355D-12 0.2196087836422D-12 0.1402231518601D-12 0.8906014768602D-13 + LSMS: xx z= 26. xvalws= 2.77074 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728402963D+02-0.5199725117641D+02-0.5199721792578D+02-0.5199718427293D+02 +-0.5199715021300D+02-0.5199711574107D+02-0.5199708085214D+02-0.5199704554119D+02 +-0.5199700980309D+02-0.5199697363268D+02-0.5199693702474D+02-0.5199689997397D+02 +-0.5199686247500D+02-0.5199682452243D+02-0.5199678611076D+02-0.5199674723444D+02 +-0.5199670788785D+02-0.5199666806529D+02-0.5199662776101D+02-0.5199658696918D+02 +-0.5199654568390D+02-0.5199650389922D+02-0.5199646160907D+02-0.5199641880734D+02 +-0.5199637548785D+02-0.5199633164434D+02-0.5199628727046D+02-0.5199624235979D+02 +-0.5199619690585D+02-0.5199615090205D+02-0.5199610434176D+02-0.5199605721822D+02 +-0.5199600952464D+02-0.5199596125410D+02-0.5199591239964D+02-0.5199586295419D+02 +-0.5199581291060D+02-0.5199576226162D+02-0.5199571099994D+02-0.5199565911815D+02 +-0.5199560660874D+02-0.5199555346411D+02-0.5199549967658D+02-0.5199544523837D+02 +-0.5199539014162D+02-0.5199533437834D+02-0.5199527794048D+02-0.5199522081989D+02 +-0.5199516300828D+02-0.5199510449731D+02-0.5199504527851D+02-0.5199498534331D+02 +-0.5199492468306D+02-0.5199486328897D+02-0.5199480115217D+02-0.5199473826367D+02 +-0.5199467461436D+02-0.5199461019507D+02-0.5199454499646D+02-0.5199447900910D+02 +-0.5199441222344D+02-0.5199434462984D+02-0.5199427621849D+02-0.5199420697954D+02 +-0.5199413690295D+02-0.5199406597858D+02-0.5199399419618D+02-0.5199392154537D+02 +-0.5199384801563D+02-0.5199377359634D+02-0.5199369827672D+02-0.5199362204589D+02 +-0.5199354489281D+02-0.5199346680633D+02-0.5199338777515D+02-0.5199330778784D+02 +-0.5199322683282D+02-0.5199314489839D+02-0.5199306197270D+02-0.5199297804374D+02 +-0.5199289309939D+02-0.5199280712733D+02-0.5199272011516D+02-0.5199263205027D+02 +-0.5199254291992D+02-0.5199245271123D+02-0.5199236141114D+02-0.5199226900644D+02 +-0.5199217548376D+02-0.5199208082958D+02-0.5199198503019D+02-0.5199188807175D+02 +-0.5199178994021D+02-0.5199169062139D+02-0.5199159010092D+02-0.5199148836424D+02 +-0.5199138539665D+02-0.5199128118323D+02-0.5199117570892D+02-0.5199106895845D+02 +-0.5199096091638D+02-0.5199085156707D+02-0.5199074089471D+02-0.5199062888326D+02 +-0.5199051551654D+02-0.5199040077813D+02-0.5199028465143D+02-0.5199016711964D+02 +-0.5199004816574D+02-0.5198992777253D+02-0.5198980592257D+02-0.5198968259824D+02 +-0.5198955778170D+02-0.5198943145487D+02-0.5198930359948D+02-0.5198917419701D+02 +-0.5198904322875D+02-0.5198891067574D+02-0.5198877651879D+02-0.5198864073848D+02 +-0.5198850331517D+02-0.5198836422896D+02-0.5198822345972D+02-0.5198808098707D+02 +-0.5198793679039D+02-0.5198779084882D+02-0.5198764314123D+02-0.5198749364622D+02 +-0.5198734234217D+02-0.5198718920716D+02-0.5198703421905D+02-0.5198687735537D+02 +-0.5198671859343D+02-0.5198655791024D+02-0.5198639528254D+02-0.5198623068679D+02 +-0.5198606409915D+02-0.5198589549550D+02-0.5198572485143D+02-0.5198555214224D+02 +-0.5198537734293D+02-0.5198520042816D+02-0.5198502137235D+02-0.5198484014954D+02 +-0.5198465673351D+02-0.5198447109769D+02-0.5198428321519D+02-0.5198409305883D+02 +-0.5198390060104D+02-0.5198370581396D+02-0.5198350866939D+02-0.5198330913876D+02 +-0.5198310719319D+02-0.5198290280341D+02-0.5198269593983D+02-0.5198248657249D+02 +-0.5198227467106D+02-0.5198206020484D+02-0.5198184314277D+02-0.5198162345340D+02 +-0.5198140110492D+02-0.5198117606510D+02-0.5198094830136D+02-0.5198071778068D+02 +-0.5198048446968D+02-0.5198024833454D+02-0.5198000934107D+02-0.5197976745462D+02 +-0.5197952264015D+02-0.5197927486220D+02-0.5197902408485D+02-0.5197877027176D+02 +-0.5197851338615D+02-0.5197825339081D+02-0.5197799024804D+02-0.5197772391971D+02 +-0.5197745436723D+02-0.5197718155151D+02-0.5197690543304D+02-0.5197662597177D+02 +-0.5197634312720D+02-0.5197605685833D+02-0.5197576712367D+02-0.5197547388122D+02 +-0.5197517708846D+02-0.5197487670236D+02-0.5197457267938D+02-0.5197426497542D+02 +-0.5197395354589D+02-0.5197363834563D+02-0.5197331932893D+02-0.5197299644952D+02 +-0.5197266966059D+02-0.5197233891476D+02-0.5197200416404D+02-0.5197166535990D+02 +-0.5197132245319D+02-0.5197097539418D+02-0.5197062413252D+02-0.5197026861727D+02 +-0.5196990879687D+02-0.5196954461909D+02-0.5196917603112D+02-0.5196880297948D+02 +-0.5196842541005D+02-0.5196804326804D+02-0.5196765649801D+02-0.5196726504383D+02 +-0.5196686884871D+02-0.5196646785514D+02-0.5196606200494D+02-0.5196565123919D+02 +-0.5196523549829D+02-0.5196481472189D+02-0.5196438884890D+02-0.5196395781753D+02 +-0.5196352156518D+02-0.5196308002855D+02-0.5196263314350D+02-0.5196218084518D+02 +-0.5196172306789D+02-0.5196125974518D+02-0.5196079080977D+02-0.5196031619354D+02 +-0.5195983582758D+02-0.5195934964214D+02-0.5195885756657D+02-0.5195835952942D+02 +-0.5195785545834D+02-0.5195734528011D+02-0.5195682892060D+02-0.5195630630481D+02 +-0.5195577735679D+02-0.5195524199969D+02-0.5195470015573D+02-0.5195415174616D+02 +-0.5195359669127D+02-0.5195303491041D+02-0.5195246632192D+02-0.5195189084316D+02 +-0.5195130839046D+02-0.5195071887917D+02-0.5195012222358D+02-0.5194951833693D+02 +-0.5194890713143D+02-0.5194828851819D+02-0.5194766240726D+02-0.5194702870759D+02 +-0.5194638732701D+02-0.5194573817222D+02-0.5194508114882D+02-0.5194441616121D+02 +-0.5194374311266D+02-0.5194306190525D+02-0.5194237243986D+02-0.5194167461616D+02 +-0.5194096833262D+02-0.5194025348643D+02-0.5193952997356D+02-0.5193879768871D+02 +-0.5193805652527D+02-0.5193730637535D+02-0.5193654712973D+02-0.5193577867788D+02 +-0.5193500090790D+02-0.5193421370652D+02-0.5193341695911D+02-0.5193261054963D+02 +-0.5193179436061D+02-0.5193096827316D+02-0.5193013216694D+02-0.5192928592013D+02 +-0.5192842940944D+02-0.5192756251004D+02-0.5192668509561D+02-0.5192579703828D+02 +-0.5192489820860D+02-0.5192398847556D+02-0.5192306770652D+02-0.5192213576726D+02 +-0.5192119252189D+02-0.5192023783287D+02-0.5191927156096D+02-0.5191829356524D+02 +-0.5191730370307D+02-0.5191630183005D+02-0.5191528780001D+02-0.5191426146503D+02 +-0.5191322267532D+02-0.5191217127930D+02-0.5191110712354D+02-0.5191003005272D+02 +-0.5190893990959D+02-0.5190783653503D+02-0.5190671976795D+02-0.5190558944528D+02 +-0.5190444540195D+02-0.5190328747089D+02-0.5190211548297D+02-0.5190092926700D+02 +-0.5189972864968D+02-0.5189851345560D+02-0.5189728350719D+02-0.5189603862472D+02 +-0.5189477862625D+02-0.5189350332759D+02-0.5189221254235D+02-0.5189090608179D+02 +-0.5188958375491D+02-0.5188824536834D+02-0.5188689072635D+02-0.5188551963080D+02 +-0.5188413188114D+02-0.5188272727435D+02-0.5188130560492D+02-0.5187986666482D+02 +-0.5187841024347D+02-0.5187693612772D+02-0.5187544410178D+02-0.5187393394724D+02 +-0.5187240544300D+02-0.5187085836524D+02-0.5186929248740D+02-0.5186770758014D+02 +-0.5186610341132D+02-0.5186447974591D+02-0.5186283634606D+02-0.5186117297093D+02 +-0.5185948937678D+02-0.5185778531685D+02-0.5185606054135D+02-0.5185431479744D+02 +-0.5185254782916D+02-0.5185075937741D+02-0.5184894917991D+02-0.5184711697117D+02 +-0.5184526248242D+02-0.5184338544160D+02-0.5184148557330D+02-0.5183956259875D+02 +-0.5183761623572D+02-0.5183564619854D+02-0.5183365219802D+02-0.5183163394142D+02 +-0.5182959113240D+02-0.5182752347098D+02-0.5182543065350D+02-0.5182331237255D+02 +-0.5182116831697D+02-0.5181899817174D+02-0.5181680161800D+02-0.5181457833297D+02 +-0.5181232798987D+02-0.5181005025795D+02-0.5180774480235D+02-0.5180541128413D+02 +-0.5180304936016D+02-0.5180065868310D+02-0.5179823890134D+02-0.5179578965895D+02 +-0.5179331059564D+02-0.5179080134665D+02-0.5178826154277D+02-0.5178569081025D+02 +-0.5178308877073D+02-0.5178045504121D+02-0.5177778923399D+02-0.5177509095659D+02 +-0.5177235981171D+02-0.5176959539717D+02-0.5176679730585D+02-0.5176396512563D+02 +-0.5176109843930D+02-0.5175819682457D+02-0.5175525985390D+02-0.5175228709457D+02 +-0.5174927810849D+02-0.5174623245221D+02-0.5174314967682D+02-0.5174002932792D+02 +-0.5173687094551D+02-0.5173367406395D+02-0.5173043821187D+02-0.5172716291215D+02 +-0.5172384768177D+02-0.5172049203182D+02-0.5171709546736D+02-0.5171365748739D+02 +-0.5171017758479D+02-0.5170665524617D+02-0.5170308995189D+02-0.5169948117592D+02 +-0.5169582838578D+02-0.5169213104249D+02-0.5168838860043D+02-0.5168460050732D+02 +-0.5168076620412D+02-0.5167688512494D+02-0.5167295669696D+02-0.5166898034036D+02 +-0.5166495546822D+02-0.5166088148646D+02-0.5165675779371D+02-0.5165258378128D+02 +-0.5164835883303D+02-0.5164408232529D+02-0.5163975362681D+02-0.5163537209858D+02 +-0.5163093709386D+02-0.5162644795799D+02-0.5162190402831D+02-0.5161730463415D+02 +-0.5161264909661D+02-0.5160793672858D+02-0.5160316683457D+02-0.5159833871062D+02 +-0.5159345164422D+02-0.5158850491424D+02-0.5158349779076D+02-0.5157842953502D+02 +-0.5157329939929D+02-0.5156810662682D+02-0.5156285045165D+02-0.5155753009857D+02 +-0.5155214478300D+02-0.5154669371088D+02-0.5154117607855D+02-0.5153559107266D+02 +-0.5152993787006D+02-0.5152421563767D+02-0.5151842353238D+02-0.5151256070096D+02 +-0.5150662627991D+02-0.5150061939535D+02-0.5149453916296D+02-0.5148838468777D+02 +-0.5148215506412D+02-0.5147584937554D+02-0.5146946669454D+02-0.5146300608264D+02 +-0.5145646659012D+02-0.5144984725596D+02-0.5144314710771D+02-0.5143636516137D+02 +-0.5142950042123D+02-0.5142255187982D+02-0.5141551851771D+02-0.5140839930344D+02 +-0.5140119319335D+02-0.5139389913149D+02-0.5138651604948D+02-0.5137904286634D+02 +-0.5137147848843D+02-0.5136382180931D+02-0.5135607170955D+02-0.5134822705665D+02 +-0.5134028670491D+02-0.5133224949527D+02-0.5132411425521D+02-0.5131587979859D+02 +-0.5130754492555D+02-0.5129910842232D+02-0.5129056906116D+02-0.5128192560017D+02 +-0.5127317678315D+02-0.5126432133956D+02-0.5125535798425D+02-0.5124628541740D+02 +-0.5123710232443D+02-0.5122780737574D+02-0.5121839922671D+02-0.5120887651745D+02 +-0.5119923787276D+02-0.5118948190193D+02-0.5117960719865D+02-0.5116961234085D+02 +-0.5115949589056D+02-0.5114925639380D+02-0.5113889238044D+02-0.5112840236408D+02 +-0.5111778484188D+02-0.5110703829447D+02-0.5109616118579D+02-0.5108515196301D+02 +-0.5107400905631D+02-0.5106273087889D+02-0.5105131582667D+02-0.5103976227836D+02 +-0.5102806859514D+02-0.5101623312071D+02-0.5100425418105D+02-0.5099213008436D+02 +-0.5097985912091D+02-0.5096743956297D+02-0.5095486966464D+02-0.5094214766176D+02 +-0.5092927177183D+02-0.5091624019384D+02-0.5090305110822D+02-0.5088970267672D+02 +-0.5087619304230D+02-0.5086252032900D+02-0.5084868264193D+02-0.5083467806710D+02 +-0.5082050467136D+02-0.5080616050232D+02-0.5079164358822D+02-0.5077695193792D+02 +-0.5076208354076D+02-0.5074703636655D+02-0.5073180836542D+02-0.5071639746782D+02 +-0.5070080158445D+02-0.5068501860613D+02-0.5066904640389D+02-0.5065288282874D+02 +-0.5063652571181D+02-0.5061997286414D+02-0.5060322207678D+02-0.5058627112067D+02 +-0.5056911774669D+02-0.5055175968555D+02-0.5053419464788D+02-0.5051642032411D+02 +-0.5049843438458D+02-0.5048023447945D+02-0.5046181823877D+02-0.5044318327247D+02 +-0.5042432717038D+02-0.5040524750226D+02-0.5038594181787D+02-0.5036640764694D+02 +-0.5034664249930D+02-0.5032664386488D+02-0.5030640921379D+02-0.5028593599640D+02 +-0.5026522164341D+02-0.5024426356594D+02-0.5022305915564D+02-0.5020160578474D+02 +-0.5017990080623D+02-0.5015794155393D+02-0.5013572534263D+02-0.5011324946826D+02 +-0.5009051120796D+02-0.5006750782030D+02-0.5004423654542D+02-0.5002069460521D+02 +-0.4999687920344D+02-0.4997278752603D+02-0.4994841674120D+02-0.4992376399966D+02 +-0.4989882643488D+02-0.4987360116327D+02-0.4984808528443D+02-0.4982227588141D+02 +-0.4979617002094D+02-0.4976976475371D+02-0.4974305711462D+02-0.4971604412309D+02 +-0.4968872278335D+02-0.4966109008469D+02-0.4963314300185D+02-0.4960487849528D+02 +-0.4957629351145D+02-0.4954738498327D+02-0.4951814983035D+02-0.4948858495939D+02 +-0.4945868726453D+02-0.4942845362775D+02-0.4939788091919D+02-0.4936696599757D+02 +-0.4933570571061D+02-0.4930409689534D+02-0.4927213637859D+02-0.4923982097740D+02 +-0.4920714749935D+02-0.4917411274309D+02-0.4914071349870D+02-0.4910694654815D+02 +-0.4907280866573D+02-0.4903829661848D+02-0.4900340716666D+02-0.4896813706420D+02 +-0.4893248305909D+02-0.4889644189392D+02-0.4886001030623D+02-0.4882318502909D+02 +-0.4878596279141D+02-0.4874834031849D+02-0.4871031433244D+02-0.4867188155262D+02 +-0.4863303869609D+02-0.4859378247804D+02-0.4855410961222D+02-0.4851401681140D+02 +-0.4847350078774D+02-0.4843255825325D+02-0.4839118592018D+02-0.4834938050138D+02 +-0.4830713871075D+02-0.4826445726356D+02-0.4822133287682D+02-0.4817776226967D+02 +-0.4813374216365D+02-0.4808926928306D+02-0.4804434035526D+02-0.4799895211091D+02 +-0.4795310128431D+02-0.4790678461358D+02-0.4785999884093D+02-0.4781274071282D+02 +-0.4776500698020D+02-0.4771679439861D+02-0.4766809972836D+02-0.4761891973461D+02 +-0.4756925118748D+02-0.4751909086208D+02-0.4746843553857D+02-0.4741728200213D+02 +-0.4736562704295D+02-0.4731346745620D+02-0.4726080004188D+02-0.4720762160479D+02 +-0.4715392895431D+02-0.4709971890425D+02-0.4704498827268D+02-0.4698973388163D+02 +-0.4693395255690D+02-0.4687764112767D+02-0.4682079642628D+02-0.4676341528777D+02 +-0.4670549454962D+02-0.4664703105122D+02-0.4658802163351D+02-0.4652846313853D+02 +-0.4646835240891D+02-0.4640768628735D+02-0.4634646161617D+02-0.4628467523671D+02 +-0.4622232398885D+02-0.4615940471037D+02-0.4609591423645D+02-0.4603184939910D+02 +-0.4596720702657D+02-0.4590198394276D+02-0.4583617696675D+02-0.4576978291218D+02 +-0.4570279858676D+02-0.4563522079176D+02-0.4556704632159D+02-0.4549827196328D+02 +-0.4542889449617D+02-0.4535891069156D+02-0.4528831731237D+02-0.4521711111299D+02 +-0.4514528883912D+02-0.4507284722768D+02-0.4499978300686D+02-0.4492609289624D+02 +-0.4485177360700D+02-0.4477682184233D+02-0.4470123429783D+02-0.4462500766219D+02 +-0.4454813861790D+02-0.4447062384219D+02-0.4439246000814D+02-0.4431364378589D+02 +-0.4423417184413D+02-0.4415404085174D+02-0.4407324747964D+02-0.4399178840285D+02 +-0.4390966030283D+02-0.4382685986996D+02-0.4374338380636D+02-0.4365922882888D+02 +-0.4357439167239D+02-0.4348886909331D+02-0.4340265787340D+02-0.4331575482384D+02 +-0.4322815678953D+02-0.4313986065369D+02-0.4305086334268D+02-0.4296116183110D+02 +-0.4287075314713D+02-0.4277963437808D+02-0.4268780267613D+02-0.4259525526436D+02 +-0.4250198944278D+02-0.4240800259471D+02-0.4231329219311D+02-0.4221785580702D+02 +-0.4212169110814D+02-0.4202479587724D+02-0.4192716801066D+02-0.4182880552657D+02 +-0.4172970657123D+02-0.4162986942478D+02-0.4152929250699D+02-0.4142797438248D+02 +-0.4132591376546D+02-0.4122310952415D+02-0.4111956068435D+02-0.4101526643252D+02 +-0.4091022611799D+02-0.4080443925436D+02-0.4069790551997D+02-0.4059062475744D+02 +-0.4048259697200D+02-0.4037382232884D+02-0.4026430114924D+02-0.4015403390548D+02 +-0.4004302121449D+02-0.3993126383031D+02-0.3981876263529D+02-0.3970551863000D+02 +-0.3959153292214D+02-0.3947680671418D+02-0.3936134129010D+02-0.3924513800125D+02 +-0.3912819825140D+02-0.3901052348125D+02-0.3889211515259D+02-0.3877297473220D+02 +-0.3865310367583D+02-0.3853250341248D+02-0.3841117532917D+02-0.3828912075654D+02 +-0.3816634095549D+02-0.3804283710513D+02-0.3791861029232D+02-0.3779366150300D+02 +-0.3766799161555D+02-0.3754160139636D+02-0.3741449149782D+02-0.3728666245883D+02 +-0.3715811470790D+02-0.3702884856900D+02-0.3689886427010D+02-0.3676816195438D+02 +-0.3663674169408D+02-0.3650460350690D+02-0.3637174737474D+02-0.3623817326473D+02 +-0.3610388115218D+02-0.3596887104531D+02-0.3583314301154D+02-0.3569669720495D+02 +-0.3555953389464D+02-0.3542165349386D+02-0.3528305658922D+02-0.3514374397011D+02 +-0.3500371665774D+02-0.3486297593358D+02-0.3472152336690D+02-0.3457936084122D+02 +-0.3443649057928D+02-0.3429291516643D+02-0.3414863757211D+02-0.3400366116934D+02 +-0.3385798975190D+02-0.3371162754922D+02-0.3356457923876D+02-0.3341684995570D+02 +-0.3326844530007D+02-0.3311937134098D+02-0.3296963461820D+02-0.3281924214079D+02 +-0.3266820138293D+02-0.3251652027694D+02-0.3236420720350D+02-0.3221127097903D+02 +-0.3205772084042D+02-0.3190356642710D+02-0.3174881776049D+02-0.3159348522098D+02 +-0.3143757952257D+02-0.3128111168511D+02-0.3112409300454D+02-0.3096653502093D+02 +-0.3080844948479D+02-0.3064984832153D+02-0.3049074359439D+02-0.3033114746593D+02 +-0.3017107215833D+02-0.3001052991254D+02-0.2984953294675D+02-0.2968809341400D+02 +-0.2952622335948D+02-0.2936393467762D+02-0.2920123906907D+02-0.2903814799805D+02 +-0.2887467265011D+02-0.2871082389066D+02-0.2854661222446D+02-0.2838204775647D+02 +-0.2821714015409D+02-0.2805189861135D+02-0.2788633181514D+02-0.2772044791378D+02 +-0.2755425448842D+02-0.2738775852723D+02-0.2722096640307D+02-0.2705388385454D+02 +-0.2688651597109D+02-0.2671886718221D+02-0.2655094125117D+02-0.2638274127348D+02 +-0.2621426968047D+02-0.2604552824823D+02-0.2587651811214D+02-0.2570723978730D+02 +-0.2553769319514D+02-0.2536787769632D+02-0.2519779213021D+02-0.2502743486110D+02 +-0.2485680383129D+02-0.2468589662112D+02-0.2451471051601D+02-0.2434324258050D+02 +-0.2417148973924D+02-0.2399944886481D+02-0.2382711687194D+02-0.2365449081810D+02 +-0.2348156800981D+02-0.2330834611404D+02-0.2313482327422D+02-0.2296099822964D+02 +-0.2278687043744D+02-0.2261244019567D+02-0.2243770876615D+02-0.2226267849517D+02 +-0.2208735293014D+02-0.2191173693001D+02-0.2173583676674D+02-0.2155966021537D+02 +-0.2138321662948D+02-0.2120651699903D+02-0.2102957398727D+02-0.2085240194340D+02 +-0.2067501688787D+02-0.2049743646710D+02-0.2031967987514D+02-0.2014176773999D+02 +-0.1996372197331D+02-0.1978556558301D+02-0.1960732244950D+02-0.1942901706755D+02 +-0.1925067425750D+02-0.1907231885074D+02-0.1889397535633D+02-0.1871566761696D+02 +-0.1853741846374D+02-0.1835924938052D+02-0.1818118018868D+02-0.1800322876380D+02 +-0.1782541079491D+02-0.1764773959582D+02-0.1747022597686D+02-0.1729287818264D+02 +-0.1711570189939D+02-0.1693870033244D+02-0.1676187435187D+02-0.1658522270158D+02 +-0.1640874226459D+02-0.1623242837596D+02-0.1605627517269D+02-0.1588027596970D+02 +-0.1570442365062D+02-0.1552871106216D+02-0.1535313140208D+02-0.1517767859145D+02 +-0.1500234762341D+02-0.1482713488228D+02-0.1465203842815D+02-0.1447705824363D+02 +-0.1430219644106D+02-0.1412745742929D+02-0.1395284804054D+02-0.1377837761854D+02 +-0.1360405806987D+02-0.1342990388081D+02-0.1325593210249D+02-0.1308216230731D+02 +-0.1290861651951D+02-0.1273531912305D+02-0.1256229674959D+02-0.1238957814960D+02 +-0.1221719404907D+02-0.1204517699438D+02-0.1187356118783D+02-0.1170238231558D+02 +-0.1153167737042D+02-0.1136148447069D+02-0.1119184267735D+02-0.1102279181034D+02 +-0.1085437226576D+02-0.1068662483495D+02-0.1051959052659D+02-0.1035331039265D+02 +-0.1018782535928D+02-0.1002317606321D+02-0.9859402694342D+01-0.9696544845323D+01 +-0.9534641368482D+01-0.9373730240659D+01-0.9213848436346D+01-0.9055031809511D+01 +-0.8897314984394D+01-0.8740731255549D+01-0.8585312497336D+01-0.8431089083029D+01 +-0.8278089813661D+01-0.8126341856676D+01-0.7975870694439D+01-0.7826700082584D+01 +-0.7678852018171D+01-0.7532346717566D+01-0.7387202603932D+01-0.7243436304187D+01 +-0.7101062655233D+01-0.6960094719270D+01-0.6820543807924D+01-0.6682419514939D+01 +-0.6545729757123D+01-0.6410480823229D+01-0.6276677430423D+01-0.6144322787958D+01 +-0.6013418667669D+01-0.5883965480867D+01-0.5755962361193D+01-0.5629407252975D+01 +-0.5504297004604D+01-0.5380627466436D+01-0.5258393592702D+01-0.5137589546863D+01 +-0.5018208809882D+01-0.4900244290793D+01-0.4783688438971D+01-0.4668533357470D+01 +-0.4554770916754D+01-0.4442392868124D+01-0.4331390956131D+01-0.4221757029192D+01 +-0.4113483147635D+01-0.4006561688322D+01-0.3900985445011D+01-0.3796747723533D+01 +-0.3693842430876D+01-0.3592264157211D+01-0.3492008249906D+01-0.3393070878541D+01 +-0.3295449089976D+01-0.3199140852531D+01-0.3104145088414D+01-0.3010461693592D+01 +-0.2918091544431D+01-0.2827036490592D+01-0.2737299333835D+01-0.2648883792669D+01 +-0.2561794453010D+01-0.2476036705393D+01-0.2391616669610D+01-0.2308541108029D+01 +-0.2226817329318D+01-0.2146453084634D+01-0.2067456458802D+01-0.1989835759339D+01 +-0.1913599406514D+01-0.1838755827812D+01-0.1765313360391D+01-0.1693280165020D+01 +-0.1622664154978D+01-0.1553472943063D+01-0.1485713809518D+01-0.1419393693186D+01 +-0.1354519207570D+01-0.1291096682842D+01-0.1229132234097D+01-0.1168631855453D+01 +-0.1109601538882D+01-0.1052047416050D+01-0.9959759208814D+00-0.9413939701484D+00 +-0.8883091590719D+00-0.8367299687430D+00-0.7866659821253D+00-0.7381281054637D+00 +-0.6911287920896D+00-0.6456822658698D+00-0.6018047418553D+00-0.5595146420441D+00 +-0.5188328045500D+00-0.4797826848498D+00-0.4423905481512D+00-0.4066856522662D+00 +-0.3727004206897D+00-0.3404706058472D+00-0.3100354427093D+00-0.2814377931599D+00 +-0.2547240189175D+00 + 0.0000000000000D+00 + 1012 0.2770741520224D+01 + 0.2150927949039D-04 0.2202124536575D-04 0.2254539478646D-04 0.2308201760180D-04 + 0.2363141055333D-04 0.2419387743865D-04 0.2476972927906D-04 0.2535928449121D-04 + 0.2596286906285D-04 0.2658081673262D-04 0.2721346917432D-04 0.2786117618535D-04 + 0.2852429587973D-04 0.2920319488569D-04 0.2989824854795D-04 0.3060984113473D-04 + 0.3133836604977D-04 0.3208422604934D-04 0.3284783346437D-04 0.3362961042788D-04 + 0.3442998910781D-04 0.3524941194536D-04 0.3608833189898D-04 0.3694721269416D-04 + 0.3782652907911D-04 0.3872676708658D-04 0.3964842430179D-04 0.4059201013679D-04 + 0.4155804611131D-04 0.4254706614023D-04 0.4355961682789D-04 0.4459625776943D-04 + 0.4565756185917D-04 0.4674411560639D-04 0.4785651945856D-04 0.4899538813222D-04 + 0.5016135095172D-04 0.5135505219602D-04 0.5257715145361D-04 0.5382832398596D-04 + 0.5510926109951D-04 0.5642067052648D-04 0.5776327681476D-04 0.5913782172693D-04 + 0.6054506464885D-04 0.6198578300785D-04 0.6346077270088D-04 0.6497084853274D-04 + 0.6651684466474D-04 0.6809961507398D-04 0.6972003402351D-04 0.7137899654355D-04 + 0.7307741892426D-04 0.7481623921999D-04 0.7659641776564D-04 0.7841893770513D-04 + 0.8028480553242D-04 0.8219505164534D-04 0.8415073091254D-04 0.8615292325379D-04 + 0.8820273423416D-04 0.9030129567206D-04 0.9244976626185D-04 0.9464933221109D-04 + 0.9690120789284D-04 0.9920663651351D-04 0.1015668907964D-03 0.1039832736813D-03 + 0.1064571190411D-03 0.1089897924148D-03 0.1115826917580D-03 0.1142372482113D-03 + 0.1169549268870D-03 0.1197372276738D-03 0.1225856860613D-03 0.1255018739831D-03 + 0.1284874006808D-03 0.1315439135877D-03 0.1346730992336D-03 0.1378766841712D-03 + 0.1411564359238D-03 0.1445141639563D-03 0.1479517206680D-03 0.1514710024102D-03 + 0.1550739505263D-03 0.1587625524179D-03 0.1625388426349D-03 0.1664049039925D-03 + 0.1703628687133D-03 0.1744149195974D-03 0.1785632912194D-03 0.1828102711544D-03 + 0.1871582012321D-03 0.1916094788209D-03 0.1961665581427D-03 0.2008319516176D-03 + 0.2056082312418D-03 0.2104980299966D-03 0.2155040432913D-03 0.2206290304405D-03 + 0.2258758161753D-03 0.2312472921908D-03 0.2367464187300D-03 0.2423762262044D-03 + 0.2481398168542D-03 0.2540403664457D-03 0.2600811260106D-03 0.2662654236245D-03 + 0.2725966662290D-03 0.2790783414953D-03 0.2857140197324D-03 0.2925073558401D-03 + 0.2994620913080D-03 0.3065820562611D-03 0.3138711715547D-03 0.3213334509168D-03 + 0.3289730031429D-03 0.3367940343406D-03 0.3448008502286D-03 0.3529978584881D-03 + 0.3613895711713D-03 0.3699806071650D-03 0.3787756947128D-03 0.3877796739964D-03 + 0.3969974997780D-03 0.4064342441040D-03 0.4160950990725D-03 0.4259853796663D-03 + 0.4361105266519D-03 0.4464761095462D-03 0.4570878296540D-03 0.4679515231757D-03 + 0.4790731643881D-03 0.4904588689006D-03 0.5021148969868D-03 0.5140476569946D-03 + 0.5262637088364D-03 0.5387697675611D-03 0.5515727070097D-03 0.5646795635561D-03 + 0.5780975399370D-03 0.5918340091694D-03 0.6058965185620D-03 0.6202927938188D-03 + 0.6350307432396D-03 0.6501184620192D-03 0.6655642366457D-03 0.6813765494038D-03 + 0.6975640829812D-03 0.7141357251847D-03 0.7311005737650D-03 0.7484679413557D-03 + 0.7662473605260D-03 0.7844485889531D-03 0.8030816147148D-03 0.8221566617048D-03 + 0.8416841951763D-03 0.8616749274129D-03 0.8821398235337D-03 0.9030901074324D-03 + 0.9245372678559D-03 0.9464930646236D-03 0.9689695349932D-03 0.9919790001731D-03 + 0.1015534071988D-02 0.1039647659698D-02 0.1064332976981D-02 0.1089603549068D-02 + 0.1115473220057D-02 0.1141956160389D-02 0.1169066874495D-02 0.1196820208634D-02 + 0.1225231358897D-02 0.1254315879409D-02 0.1284089690715D-02 0.1314569088366D-02 + 0.1345770751696D-02 0.1377711752814D-02 0.1410409565795D-02 0.1443882076088D-02 + 0.1478147590144D-02 0.1513224845264D-02 0.1549133019674D-02 0.1585891742841D-02 + 0.1623521106018D-02 0.1662041673040D-02 0.1701474491365D-02 0.1741841103378D-02 + 0.1783163557945D-02 0.1825464422244D-02 0.1868766793867D-02 0.1913094313196D-02 + 0.1958471176071D-02 0.2004922146751D-02 0.2052472571166D-02 0.2101148390486D-02 + 0.2150976154989D-02 0.2201983038264D-02 0.2254196851731D-02 0.2307646059493D-02 + 0.2362359793542D-02 0.2418367869301D-02 0.2475700801533D-02 0.2534389820612D-02 + 0.2594466889165D-02 0.2655964719104D-02 0.2718916789042D-02 0.2783357362106D-02 + 0.2849321504172D-02 0.2916845102501D-02 0.2985964884814D-02 0.3056718438800D-02 + 0.3129144232066D-02 0.3203281632551D-02 0.3279170929405D-02 0.3356853354336D-02 + 0.3436371103460D-02 0.3517767359634D-02 0.3601086315312D-02 0.3686373195913D-02 + 0.3773674283724D-02 0.3863036942351D-02 0.3954509641719D-02 0.4048141983652D-02 + 0.4143984728019D-02 0.4242089819491D-02 0.4342510414893D-02 0.4445300911185D-02 + 0.4550516974067D-02 0.4658215567249D-02 0.4768454982366D-02 0.4881294869584D-02 + 0.4996796268890D-02 0.5115021642093D-02 0.5236034905549D-02 0.5359901463622D-02 + 0.5486688242898D-02 0.5616463727181D-02 0.5749297993262D-02 0.5885262747508D-02 + 0.6024431363262D-02 0.6166878919093D-02 0.6312682237899D-02 0.6461919926891D-02 + 0.6614672418475D-02 0.6771022012045D-02 0.6931052916716D-02 0.7094851295016D-02 + 0.7262505307545D-02 0.7434105158642D-02 0.7609743143066D-02 0.7789513693721D-02 + 0.7973513430440D-02 0.8161841209859D-02 0.8354598176397D-02 0.8551887814376D-02 + 0.8753816001287D-02 0.8960491062250D-02 0.9172023825667D-02 0.9388527680122D-02 + 0.9610118632529D-02 0.9836915367568D-02 0.1006903930843D-01 0.1030661467892D-01 + 0.1054976856688D-01 0.1079863098909D-01 0.1105333495749D-01 0.1131401654696D-01 + 0.1158081496451D-01 0.1185387262003D-01 0.1213333519856D-01 0.1241935173418D-01 + 0.1271207468545D-01 0.1301166001257D-01 0.1331826725616D-01 0.1363205961778D-01 + 0.1395320404221D-01 0.1428187130150D-01 0.1461823608081D-01 0.1496247706623D-01 + 0.1531477703430D-01 0.1567532294367D-01 0.1604430602860D-01 0.1642192189452D-01 + 0.1680837061563D-01 0.1720385683464D-01 0.1760858986456D-01 0.1802278379280D-01 + 0.1844665758734D-01 0.1888043520531D-01 0.1932434570378D-01 0.1977862335297D-01 + 0.2024350775185D-01 0.2071924394615D-01 0.2120608254895D-01 0.2170427986376D-01 + 0.2221409801021D-01 0.2273580505238D-01 0.2326967512987D-01 0.2381598859160D-01 + 0.2437503213237D-01 0.2494709893234D-01 0.2553248879941D-01 0.2613150831454D-01 + 0.2674447098014D-01 0.2737169737147D-01 0.2801351529124D-01 0.2867025992742D-01 + 0.2934227401421D-01 0.3002990799646D-01 0.3073352019732D-01 0.3145347698951D-01 + 0.3219015296988D-01 0.3294393113773D-01 0.3371520307664D-01 0.3450436914006D-01 + 0.3531183864059D-01 0.3613803004319D-01 0.3698337116219D-01 0.3784829936233D-01 + 0.3873326176383D-01 0.3963871545150D-01 0.4056512768813D-01 0.4151297613205D-01 + 0.4248274905905D-01 0.4347494558865D-01 0.4449007591493D-01 0.4552866154180D-01 + 0.4659123552298D-01 0.4767834270657D-01 0.4879053998454D-01 0.4992839654695D-01 + 0.5109249414114D-01 0.5228342733595D-01 0.5350180379101D-01 0.5474824453121D-01 + 0.5602338422639D-01 0.5732787147645D-01 0.5866236910176D-01 0.6002755443915D-01 + 0.6142411964345D-01 0.6285277199472D-01 0.6431423421119D-01 0.6580924476805D-01 + 0.6733855822219D-01 0.6890294554290D-01 0.7050319444864D-01 0.7214010975008D-01 + 0.7381451369925D-01 0.7552724634520D-01 0.7727916589591D-01 0.7907114908690D-01 + 0.8090409155624D-01 0.8277890822643D-01 0.8469653369292D-01 0.8665792261951D-01 + 0.8866405014071D-01 0.9071591227111D-01 0.9281452632182D-01 0.9496093132410D-01 + 0.9715618846031D-01 0.9940138150208D-01 0.1016976172560D+00 0.1040460260169D+00 + 0.1064477620282D+00 0.1089040039508D+00 0.1114159553388D+00 0.1139848451236D+00 + 0.1166119281054D+00 0.1192984854532D+00 0.1220458252122D+00 0.1248552828197D+00 + 0.1277282216288D+00 0.1306660334408D+00 0.1336701390448D+00 0.1367419887670D+00 + 0.1398830630269D+00 0.1430948729031D+00 0.1463789607067D+00 0.1497369005636D+00 + 0.1531702990050D+00 0.1566807955666D+00 0.1602700633964D+00 0.1639398098711D+00 + 0.1676917772207D+00 0.1715277431623D+00 0.1754495215419D+00 0.1794589629856D+00 + 0.1835579555582D+00 0.1877484254317D+00 0.1920323375616D+00 0.1964116963718D+00 + 0.2008885464482D+00 0.2054649732406D+00 0.2101431037732D+00 0.2149251073635D+00 + 0.2198131963488D+00 0.2248096268222D+00 0.2299166993754D+00 0.2351367598503D+00 + 0.2404722000984D+00 0.2459254587480D+00 0.2514990219789D+00 0.2571954243047D+00 + 0.2630172493626D+00 0.2689671307106D+00 0.2750477526311D+00 0.2812618509418D+00 + 0.2876122138134D+00 0.2941016825931D+00 0.3007331526352D+00 0.3075095741362D+00 + 0.3144339529771D+00 0.3215093515700D+00 0.3287388897102D+00 0.3361257454325D+00 + 0.3436731558729D+00 0.3513844181328D+00 0.3592628901485D+00 0.3673119915621D+00 + 0.3755352045968D+00 0.3839360749336D+00 0.3925182125899D+00 0.4012852927993D+00 + 0.4102410568930D+00 0.4193893131804D+00 0.4287339378299D+00 0.4382788757486D+00 + 0.4480281414604D+00 0.4579858199819D+00 0.4681560676951D+00 0.4785431132164D+00 + 0.4891512582614D+00 0.4999848785043D+00 0.5110484244305D+00 0.5223464221834D+00 + 0.5338834744021D+00 0.5456642610510D+00 0.5576935402392D+00 0.5699761490289D+00 + 0.5825170042325D+00 0.5953211031952D+00 0.6083935245653D+00 0.6217394290472D+00 + 0.6353640601390D+00 0.6492727448516D+00 0.6634708944082D+00 0.6779640049238D+00 + 0.6927576580616D+00 0.7078575216668D+00 0.7232693503742D+00 0.7389989861895D+00 + 0.7550523590420D+00 0.7714354873073D+00 0.7881544782973D+00 0.8052155287175D+00 + 0.8226249250876D+00 0.8403890441249D+00 0.8585143530879D+00 0.8770074100784D+00 + 0.8958748642992D+00 0.9151234562658D+00 0.9347600179702D+00 0.9547914729931D+00 + 0.9752248365635D+00 0.9960672155622D+00 0.1017325808468D+01 0.1039007905241D+01 + 0.1061120887144D+01 0.1083672226499D+01 0.1106669486370D+01 0.1130120320176D+01 + 0.1154032471231D+01 0.1178413772204D+01 0.1203272144493D+01 0.1228615597523D+01 + 0.1254452227950D+01 0.1280790218774D+01 0.1307637838359D+01 0.1335003439353D+01 + 0.1362895457506D+01 0.1391322410385D+01 0.1420292895972D+01 0.1449815591159D+01 + 0.1479899250115D+01 0.1510552702537D+01 0.1541784851777D+01 0.1573604672833D+01 + 0.1606021210210D+01 0.1639043575644D+01 0.1672680945677D+01 0.1706942559091D+01 + 0.1741837714186D+01 0.1777375765901D+01 0.1813566122779D+01 0.1850418243757D+01 + 0.1887941634794D+01 0.1926145845317D+01 0.1965040464488D+01 0.2004635117287D+01 + 0.2044939460400D+01 0.2085963177919D+01 0.2127715976829D+01 0.2170207582300D+01 + 0.2213447732763D+01 0.2257446174769D+01 0.2302212657626D+01 0.2347756927812D+01 + 0.2394088723154D+01 0.2441217766767D+01 0.2489153760756D+01 0.2537906379665D+01 + 0.2587485263675D+01 0.2637900011547D+01 0.2689160173295D+01 0.2741275242598D+01 + 0.2794254648931D+01 0.2848107749430D+01 0.2902843820459D+01 0.2958472048904D+01 + 0.3015001523163D+01 0.3072441223848D+01 0.3130800014182D+01 0.3190086630094D+01 + 0.3250309670002D+01 0.3311477584285D+01 0.3373598664440D+01 0.3436681031917D+01 + 0.3500732626634D+01 0.3565761195166D+01 0.3631774278604D+01 0.3698779200090D+01 + 0.3766783052007D+01 0.3835792682854D+01 0.3905814683769D+01 0.3976855374728D+01 + 0.4048920790399D+01 0.4122016665671D+01 0.4196148420834D+01 0.4271321146438D+01 + 0.4347539587809D+01 0.4424808129241D+01 0.4503130777854D+01 0.4582511147131D+01 + 0.4662952440136D+01 0.4744457432406D+01 0.4827028454547D+01 0.4910667374509D+01 + 0.4995375579573D+01 0.5081153958042D+01 0.5168002880655D+01 0.5255922181721D+01 + 0.5344911139992D+01 0.5434968459290D+01 0.5526092248881D+01 0.5618280003639D+01 + 0.5711528583982D+01 0.5805834195616D+01 0.5901192369103D+01 0.5997597939257D+01 + 0.6095045024395D+01 0.6193527005472D+01 0.6293036505099D+01 0.6393565366487D+01 + 0.6495104632331D+01 0.6597644523660D+01 0.6701174418681D+01 0.6805682831645D+01 + 0.6911157391760D+01 0.7017584822191D+01 0.7124950919171D+01 0.7233240531258D+01 + 0.7342437538781D+01 0.7452524833500D+01 0.7563484298530D+01 0.7675296788562D+01 + 0.7787942110430D+01 0.7901399004058D+01 0.8015645123842D+01 0.8130657020509D+01 + 0.8246410123503D+01 0.8362878723950D+01 0.8480035958250D+01 0.8597853792358D+01 + 0.8716303006799D+01 0.8835353182487D+01 0.8954972687391D+01 0.9075128664130D+01 + 0.9195787018538D+01 0.9316912409273D+01 0.9438468238543D+01 0.9560416644000D+01 + 0.9682718491880D+01 0.9805333371460D+01 0.9928219590896D+01 0.1005133417453D+02 + 0.1017463286171D+02 0.1029807010722D+02 0.1042159908344D+02 0.1054517168417D+02 + 0.1066873853037D+02 0.1079224897780D+02 0.1091565112659D+02 0.1103889183301D+02 + 0.1116191672323D+02 0.1128467020944D+02 0.1140709550823D+02 0.1152913466133D+02 + 0.1165072855885D+02 0.1177181696506D+02 0.1189233854680D+02 0.1201223090454D+02 + 0.1213143060625D+02 0.1224987322407D+02 0.1236749337400D+02 0.1248422475837D+02 + 0.1260000021157D+02 0.1271475174875D+02 0.1282841061773D+02 0.1294090735413D+02 + 0.1305217183979D+02 0.1316213336451D+02 0.1327072069111D+02 0.1337786212400D+02 + 0.1348348558110D+02 0.1358751866928D+02 0.1368988876325D+02 0.1379052308804D+02 + 0.1388934880491D+02 0.1398629310084D+02 0.1408128328150D+02 0.1417424686776D+02 + 0.1426511169568D+02 0.1435380601989D+02 0.1444025862047D+02 0.1452439891313D+02 + 0.1460615706273D+02 0.1468546410000D+02 0.1476225204147D+02 0.1483645401237D+02 + 0.1490800437259D+02 0.1497683884540D+02 0.1504289464893D+02 0.1510611063019D+02 + 0.1516642740155D+02 0.1522378747941D+02 0.1527813542502D+02 0.1532941798703D+02 + 0.1537758424592D+02 0.1542258575964D+02 0.1546437671057D+02 0.1550291405346D+02 + 0.1553815766392D+02 0.1557007048740D+02 0.1559861868825D+02 0.1562377179849D+02 + 0.1564550286611D+02 0.1566378860245D+02 0.1567860952827D+02 0.1568995011828D+02 + 0.1569779894358D+02 0.1570214881171D+02 0.1570299690387D+02 0.1570034490889D+02 + 0.1569419915342D+02 0.1568457072811D+02 0.1567147560898D+02 0.1565493477391D+02 + 0.1563497431333D+02 0.1561162553504D+02 0.1558492506233D+02 0.1555491492507D+02 + 0.1552164264320D+02 0.1548516130217D+02 0.1544552961962D+02 0.1540281200312D+02 + 0.1535707859803D+02 0.1530840532536D+02 0.1525687390884D+02 0.1520257189079D+02 + 0.1514559263632D+02 0.1508603532531D+02 0.1502400493172D+02 0.1495961218971D+02 + 0.1489297354623D+02 0.1482421109950D+02 0.1475345252306D+02 0.1468083097499D+02 + 0.1460648499184D+02 0.1453055836709D+02 0.1445320001360D+02 0.1437456381003D+02 + 0.1429480843075D+02 0.1421409715909D+02 0.1413259768392D+02 0.1405048187912D+02 + 0.1396792556614D+02 0.1388510825940D+02 0.1380221289467D+02 0.1371942554036D+02 + 0.1363693509198D+02 0.1355493294972D+02 0.1347361267958D+02 0.1339316965818D+02 + 0.1331380070165D+02 0.1323570367897D+02 0.1315907711016D+02 0.1308411975004D+02 + 0.1301103015787D+02 0.1294000625373D+02 0.1287124486230D+02 0.1280494124477D+02 + 0.1274128861984D+02 0.1268047767460D+02 0.1262269606643D+02 0.1256812791682D+02 + 0.1251695329838D+02 0.1246934771604D+02 0.1242548158392D+02 0.1238551969900D+02 + 0.1234962071295D+02 0.1231793660373D+02 0.1229061214824D+02 0.1226778439767D+02 + 0.1224958215706D+02 0.1223612547078D+02 0.1222752511553D+02 0.1222388210258D+02 + 0.1222528719100D+02 0.1223182041366D+02 0.1224355061775D+02 0.1226053502171D+02 + 0.1228281879023D+02 0.1231043462935D+02 0.1234340240339D+02 0.1238172877543D+02 + 0.1242540687338D+02 0.1247441598324D+02 0.1252872127141D+02 0.1258827353770D+02 + 0.1265300900087D+02 0.1272284911822D+02 0.1279770044081D+02 0.1287745450601D+02 + 0.1296198776857D+02 0.1305116157186D+02 0.1314482216032D+02 0.1324280073454D+02 + 0.1334491354991D+02 0.1345096205988D+02 0.1356073310471D+02 0.1367399914649D+02 + 0.1379051855093D+02 0.1391003591655D+02 0.1403228245150D+02 0.1415697639825D+02 + 0.1428382350615D+02 0.1441251755180D+02 0.1454274090682D+02 0.1467416515265D+02 + 0.1480645174180D+02 0.1493925270450D+02 0.1507221140012D+02 0.1520496331175D+02 + 0.1533713688305D+02 0.1546835439544D+02 0.1559823288411D+02 0.1572638509088D+02 + 0.1585242045188D+02 0.1597594611769D+02 0.1609656800349D+02 0.1621389186673D+02 + 0.1632752440935D+02 0.1643707440175D+02 0.1654215382521D+02 0.1664237902974D+02 + 0.1673737190368D+02 0.1682676105166D+02 0.1691018297723D+02 0.1698728326633D+02 + 0.1705771776761D+02 0.1712115376582D+02 0.1717727114395D+02 0.1722576353007D+02 + 0.1726633942470D+02 0.1729872330429D+02 0.1732265669667D+02 0.1733789922408D+02 + 0.1734422960952D+02 0.1734144664198D+02 0.1732937009656D+02 0.1730784160492D+02 + 0.1727672547225D+02 0.1723590943644D+02 0.1718530536559D+02 0.1712484989008D+02 + 0.1705450496536D+02 0.1697425836203D+02 0.1688412407975D+02 0.1678414268193D+02 + 0.1667438154808D+02 0.1655493504124D+02 0.1642592458792D+02 0.1628749866833D+02 + 0.1613983271513D+02 0.1598312891883D+02 0.1581761593876D+02 0.1564354851859D+02 + 0.1546120700566D+02 0.1527089677411D+02 0.1507294755170D+02 0.1486771265109D+02 + 0.1465556810624D+02 0.1443691171558D+02 0.1421216199343D+02 0.1398175703206D+02 + 0.1374615327696D+02 0.1350582421831D+02 0.1326125900230D+02 0.1301296096613D+02 + 0.1276144610103D+02 0.1250724144826D+02 0.1225088343315D+02 0.1199291614280D+02 + 0.1173388955369D+02 0.1147435771520D+02 0.1121487689618D+02 0.1095600370143D+02 + 0.1069829316549D+02 0.1044229683153D+02 0.1018856082317D+02 0.9937623917321D+01 + 0.9690015626445D+01 0.9446254298643D+01 0.9206845244038D+01 0.8972278896087D+01 + 0.8743029016360D+01 0.8519550951297D+01 0.8302279949355D+01 0.8091629546790D+01 + 0.7887990030116D+01 0.7691726983014D+01 0.7503179925129D+01 0.7322661049902D+01 + 0.7150454068046D+01 0.6986813162918D+01 0.6831962063451D+01 0.6686093239819D+01 + 0.6549367226364D+01 0.6421912075717D+01 0.6303822947394D+01 0.6195161833447D+01 + 0.6095957423078D+01 0.6006205107394D+01 0.5925867124779D+01 0.5854872846611D+01 + 0.5793119202371D+01 0.5740471242429D+01 0.5696762836121D+01 0.5661797502031D+01 + 0.5635349366701D+01 0.5617164247353D+01 0.5606960853570D+01 0.5604432102259D+01 + 0.5609246539649D+01 0.5621049863505D+01 0.5639466538232D+01 0.5664101495024D+01 + 0.5694541908766D+01 0.5730359042993D+01 0.5771110153784D+01 0.5816340443192D+01 + 0.5865585052475D+01 0.5918371085180D+01 0.5974219649957D+01 0.6032647912832D+01 + 0.6093171148637D+01 0.6155304781260D+01 0.6218566402475D+01 0.6282477759234D+01 + 0.6346566699475D+01 0.6410369066815D+01 0.6473430534781D+01 0.6535308371644D+01 + 0.6595573127395D+01 0.6653810234872D+01 0.6709621517670D+01 0.6762626598041D+01 + 0.6812464198680D+01 0.6858793332986D+01 0.6901294379138D+01 0.6939670034070D+01 + 0.6973646144233D+01 0.7002972410830D+01 0.7027422967990D+01 0.7046796833200D+01 + 0.7060918230061D+01 0.7069636784259D+01 0.7072827594374D+01 0.7070391179926D+01 + 0.7062253309715D+01 0.7048364714231D+01 0.7028700686483D+01 0.7003260576238D+01 + 0.6972067183121D+01 0.6935166054562D+01 0.6892624694966D+01 0.6844531692843D+01 + 0.6790995772965D+01 0.6732144780827D+01 0.6668124606899D+01 0.6599098058289D+01 + 0.6525243685473D+01 0.6446754571799D+01 0.6363837093418D+01 0.6276709657188D+01 + 0.6185601423998D+01 0.6090751024726D+01 0.5992405275866D+01 0.5890817901556D+01 + 0.5786248268476D+01 0.5678960139726D+01 0.5569220453475D+01 0.5457298131760D+01 + 0.5343462924443D+01 0.5227984292928D+01 0.5111130337809D+01 0.4993166774192D+01 + 0.4874355958030D+01 0.4754955966341D+01 0.4635219733799D+01 0.4515394247714D+01 + 0.4395719803061D+01 0.4276429318764D+01 0.4157747716089D+01 0.4039891359594D+01 + 0.3923067560758D+01 0.3807474144035D+01 0.3693299074769D+01 0.3580720148118D+01 + 0.3469904737816D+01 0.3361009603367D+01 0.3254180754011D+01 0.3149553367571D+01 + 0.3047251762116D+01 0.2947389418162D+01 0.2850069049006D+01 0.2755382716614D+01 + 0.2663411990420D+01 0.2574228146230D+01 0.2487892402405D+01 0.2404456190400D+01 + 0.2323961456713D+01 0.2246440993268D+01 0.2171918793250D+01 0.2100410429420D+01 + 0.2031923451965D+01 0.1966457802972D+01 0.1904006244666D+01 0.1844554798640D+01 + 0.1788083193345D+01 0.1734565317240D+01 0.1683969675070D+01 0.1636259844862D+01 + 0.1591394933364D+01 0.1549330027746D+01 0.1510016641546D+01 0.1473403152964D+01 + 0.1439435233770D+01 0.1408056267219D+01 0.1379207753531D+01 0.1352829701650D+01 + 0.1328861006133D+01 0.1307239808175D+01 0.1287903839946D+01 0.1270790751526D+01 + 0.1255838419882D+01 0.1242985239474D+01 0.1232170394175D+01 0.1223334110328D+01 + 0.1216417890857D+01 0.1211364730456D+01 0.1208119311934D+01 0.1206628183910D+01 + 0.1206839920052D+01 0.1208705260142D+01 0.1212177233248D+01 0.1217211263310D+01 + 0.1223765257423D+01 0.1231799677111D+01 0.1241277592815D+01 0.1252164721788D+01 + 0.1264429449524D+01 0.1278042834732D+01 0.1292978597814D+01 0.1309213092627D+01 + 0.1326725261233D+01 0.1345496571135D+01 0.1365510934358D+01 0.1386754607532D+01 + 0.1409215426363D+01 0.1433003097507D+01 0.1458223277591D+01 0.1484860699421D+01 + 0.1512902583279D+01 0.1542338542721D+01 0.1573160498496D+01 0.1605362600812D+01 + 0.1638941160170D+01 0.1673894586973D+01 0.1710223340083D+01 0.1747929884514D+01 + 7 1012 + 1 0 -1 -511.89150 + 2 0 -1 -58.80097 + 2 1 1 -50.61290 + 2 1 -2 -49.69692 + 3 0 -1 -5.52718 + 3 1 1 -3.14309 + 3 1 -2 -3.03034 + 0.2123373461549D-04 0.2173914995400D-04 0.2225659296114D-04 0.2278634977738D-04 + 0.2332871334728D-04 0.2388398358121D-04 0.2445246752083D-04 0.2503447950857D-04 + 0.2563034136106D-04 0.2624038254674D-04 0.2686494036763D-04 0.2750436014548D-04 + 0.2815899541226D-04 0.2882920810522D-04 0.2951536876657D-04 0.3021785674791D-04 + 0.3093706041946D-04 0.3167337738432D-04 0.3242721469777D-04 0.3319898909177D-04 + 0.3398912720483D-04 0.3479806581728D-04 0.3562625209215D-04 0.3647414382175D-04 + 0.3734220968012D-04 0.3823092948144D-04 0.3914079444457D-04 0.4007230746391D-04 + 0.4102598338660D-04 0.4200234929636D-04 0.4300194480406D-04 0.4402532234512D-04 + 0.4507304748402D-04 0.4614569922601D-04 0.4724387033618D-04 0.4836816766617D-04 + 0.4951921248852D-04 0.5069764083903D-04 0.5190410386721D-04 0.5313926819498D-04 + 0.5440381628400D-04 0.5569844681152D-04 0.5702387505533D-04 0.5838083328767D-04 + 0.5977007117859D-04 0.6119235620880D-04 0.6264847409228D-04 0.6413922920902D-04 + 0.6566544504782D-04 0.6722796465978D-04 0.6882765112238D-04 0.7046538801462D-04 + 0.7214207990339D-04 0.7385865284136D-04 0.7561605487667D-04 0.7741525657465D-04 + 0.7925725155197D-04 0.8114305702331D-04 0.8307371436110D-04 0.8505028966841D-04 + 0.8707387436545D-04 0.8914558578994D-04 0.9126656781168D-04 0.9343799146165D-04 + 0.9566105557602D-04 0.9793698745538D-04 0.1002670435396D-03 0.1026525100984D-03 + 0.1050947039390D-03 0.1075949731294D-03 0.1101546977394D-03 0.1127752905997D-03 + 0.1154581980775D-03 0.1182049008719D-03 0.1210169148270D-03 0.1238957917652D-03 + 0.1268431203390D-03 0.1298605269045D-03 0.1329496764137D-03 0.1361122733297D-03 + 0.1393500625619D-03 0.1426648304247D-03 0.1460584056178D-03 0.1495326602303D-03 + 0.1530895107681D-03 0.1567309192056D-03 0.1604588940629D-03 0.1642754915072D-03 + 0.1681828164816D-03 0.1721830238593D-03 0.1762783196258D-03 0.1804709620887D-03 + 0.1847632631165D-03 0.1891575894056D-03 0.1936563637785D-03 0.1982620665115D-03 + 0.2029772366947D-03 0.2078044736231D-03 0.2127464382210D-03 0.2178058545005D-03 + 0.2229855110531D-03 0.2282882625778D-03 0.2337170314442D-03 0.2392748092933D-03 + 0.2449646586752D-03 0.2507897147258D-03 0.2567531868833D-03 0.2628583606444D-03 + 0.2691085993625D-03 0.2755073460880D-03 0.2820581254518D-03 0.2887645455935D-03 + 0.2956303001344D-03 0.3026591701977D-03 0.3098550264756D-03 0.3172218313454D-03 + 0.3247636410353D-03 0.3324846078408D-03 0.3403889823939D-03 0.3484811159850D-03 + 0.3567654629401D-03 0.3652465830528D-03 0.3739291440747D-03 0.3828179242637D-03 + 0.3919178149916D-03 0.4012338234146D-03 0.4107710752045D-03 0.4205348173457D-03 + 0.4305304209971D-03 0.4407633844209D-03 0.4512393359813D-03 0.4619640372121D-03 + 0.4729433859575D-03 0.4841834195856D-03 0.4956903182785D-03 0.5074704083979D-03 + 0.5195301659314D-03 0.5318762200182D-03 0.5445153565579D-03 0.5574545219044D-03 + 0.5707008266453D-03 0.5842615494708D-03 0.5981441411326D-03 0.6123562284955D-03 + 0.6269056186847D-03 0.6418003033287D-03 0.6570484629028D-03 0.6726584711734D-03 + 0.6886388997468D-03 0.7049985227240D-03 0.7217463214642D-03 0.7388914894603D-03 + 0.7564434373277D-03 0.7744117979097D-03 0.7928064315026D-03 0.8116374312024D-03 + 0.8309151283763D-03 0.8506500982622D-03 0.8708531656989D-03 0.8915354109894D-03 + 0.9127081759015D-03 0.9343830698083D-03 0.9565719759715D-03 0.9792870579714D-03 + 0.1002540766287D-02 0.1026345845027D-02 0.1050715338824D-02 0.1075662599879D-02 + 0.1101201295181D-02 0.1127345413883D-02 0.1154109274864D-02 0.1181507534450D-02 + 0.1209555194328D-02 0.1238267609637D-02 0.1267660497252D-02 0.1297749944251D-02 + 0.1328552416593D-02 0.1360084767981D-02 0.1392364248945D-02 0.1425408516127D-02 + 0.1459235641785D-02 0.1493864123514D-02 0.1529312894196D-02 0.1565601332181D-02 + 0.1602749271697D-02 0.1640777013510D-02 0.1679705335822D-02 0.1719555505429D-02 + 0.1760349289133D-02 0.1802108965417D-02 0.1844857336390D-02 0.1888617740010D-02 + 0.1933414062589D-02 0.1979270751585D-02 0.2026212828687D-02 0.2074265903209D-02 + 0.2123456185786D-02 0.2173810502385D-02 0.2225356308647D-02 0.2278121704551D-02 + 0.2332135449417D-02 0.2387426977257D-02 0.2444026412476D-02 0.2501964585936D-02 + 0.2561273051389D-02 0.2621984102285D-02 0.2684130788965D-02 0.2747746936258D-02 + 0.2812867161465D-02 0.2879526892772D-02 0.2947762388071D-02 0.3017610754222D-02 + 0.3089109966753D-02 0.3162298890003D-02 0.3237217297741D-02 0.3313905894238D-02 + 0.3392406335837D-02 0.3472761253004D-02 0.3555014272883D-02 0.3639210042377D-02 + 0.3725394251736D-02 0.3813613658698D-02 0.3903916113173D-02 0.3996350582488D-02 + 0.4090967177209D-02 0.4187817177547D-02 0.4286953060364D-02 0.4388428526794D-02 + 0.4492298530489D-02 0.4598619306504D-02 0.4707448400838D-02 0.4818844700646D-02 + 0.4932868465127D-02 0.5049581357120D-02 0.5169046475404D-02 0.5291328387739D-02 + 0.5416493164639D-02 0.5544608413917D-02 0.5675743316002D-02 0.5809968660057D-02 + 0.5947356880904D-02 0.6087982096781D-02 0.6231920147946D-02 0.6379248636155D-02 + 0.6530046965011D-02 0.6684396381234D-02 0.6842380016839D-02 0.7004082932273D-02 + 0.7169592160503D-02 0.7338996752102D-02 0.7512387821327D-02 0.7689858593235D-02 + 0.7871504451850D-02 0.8057422989391D-02 0.8247714056607D-02 0.8442479814225D-02 + 0.8641824785540D-02 0.8845855910175D-02 0.9054682599025D-02 0.9268416790430D-02 + 0.9487173007575D-02 0.9711068417172D-02 0.9940222889430D-02 0.1017475905935D-01 + 0.1041480238936D-01 0.1066048123337D-01 0.1091192690214D-01 0.1116927373022D-01 + 0.1143265914425D-01 0.1170222373276D-01 0.1197811131760D-01 0.1226046902681D-01 + 0.1254944736912D-01 0.1284520031015D-01 0.1314788535014D-01 0.1345766360348D-01 + 0.1377469987990D-01 0.1409916276750D-01 0.1443122471744D-01 0.1477106213063D-01 + 0.1511885544620D-01 0.1547478923187D-01 0.1583905227632D-01 0.1621183768351D-01 + 0.1659334296907D-01 0.1698377015868D-01 0.1738332588869D-01 0.1779222150874D-01 + 0.1821067318670D-01 0.1863890201578D-01 0.1907713412394D-01 0.1952560078568D-01 + 0.1998453853608D-01 0.2045418928739D-01 0.2093480044805D-01 0.2142662504416D-01 + 0.2192992184360D-01 0.2244495548276D-01 0.2297199659585D-01 0.2351132194704D-01 + 0.2406321456527D-01 0.2462796388197D-01 0.2520586587156D-01 0.2579722319499D-01 + 0.2640234534617D-01 0.2702154880148D-01 0.2765515717239D-01 0.2830350136121D-01 + 0.2896691972007D-01 0.2964575821319D-01 0.3034037058244D-01 0.3105111851634D-01 + 0.3177837182251D-01 0.3252250860359D-01 0.3328391543683D-01 0.3406298755727D-01 + 0.3486012904465D-01 0.3567575301409D-01 0.3651028181063D-01 0.3736414720771D-01 + 0.3823779060956D-01 0.3913166325773D-01 0.4004622644169D-01 0.4098195171364D-01 + 0.4193932110758D-01 0.4291882736274D-01 0.4392097415138D-01 0.4494627631115D-01 + 0.4599526008193D-01 0.4706846334735D-01 0.4816643588104D-01 0.4928973959763D-01 + 0.5043894880863D-01 0.5161465048329D-01 0.5281744451445D-01 0.5404794398948D-01 + 0.5530677546647D-01 0.5659457925562D-01 0.5791200970601D-01 0.5925973549779D-01 + 0.6063843993988D-01 0.6204882127328D-01 0.6349159298001D-01 0.6496748409788D-01 + 0.6647723954103D-01 0.6802162042643D-01 0.6960140440641D-01 0.7121738600725D-01 + 0.7287037697395D-01 0.7456120662128D-01 0.7629072219118D-01 0.7805978921657D-01 + 0.7986929189166D-01 0.8172013344892D-01 0.8361323654265D-01 0.8554954363940D-01 + 0.8753001741513D-01 0.8955564115940D-01 0.9162741918654D-01 0.9374637725383D-01 + 0.9591356298698D-01 0.9813004631275D-01 0.1003969198990D+00 0.1027152996019D+00 + 0.1050863249211D+00 0.1075111594618D+00 0.1099909914051D+00 0.1125270339855D+00 + 0.1151205259766D+00 0.1177727321842D+00 0.1204849439476D+00 0.1232584796489D+00 + 0.1260946852301D+00 0.1289949347182D+00 0.1319606307590D+00 0.1349932051583D+00 + 0.1380941194317D+00 0.1412648653632D+00 0.1445069655708D+00 0.1478219740820D+00 + 0.1512114769165D+00 0.1546770926778D+00 0.1582204731535D+00 0.1618433039236D+00 + 0.1655473049771D+00 0.1693342313383D+00 0.1732058737000D+00 0.1771640590662D+00 + 0.1812106514032D+00 0.1853475522988D+00 0.1895767016304D+00 0.1939000782413D+00 + 0.1983197006251D+00 0.2028376276193D+00 0.2074559591063D+00 0.2121768367234D+00 + 0.2170024445803D+00 0.2219350099852D+00 0.2269768041788D+00 0.2321301430764D+00 + 0.2373973880172D+00 0.2427809465221D+00 0.2482832730585D+00 0.2539068698131D+00 + 0.2596542874715D+00 0.2655281260047D+00 0.2715310354636D+00 0.2776657167793D+00 + 0.2839349225700D+00 0.2903414579550D+00 0.2968881813739D+00 0.3035780054119D+00 + 0.3104138976312D+00 0.3173988814070D+00 0.3245360367687D+00 0.3318285012460D+00 + 0.3392794707188D+00 0.3468922002717D+00 0.3546700050516D+00 0.3626162611285D+00 + 0.3707344063591D+00 0.3790279412529D+00 0.3875004298396D+00 0.3961555005386D+00 + 0.4049968470283D+00 0.4140282291162D+00 0.4232534736091D+00 0.4326764751811D+00 + 0.4423011972414D+00 0.4521316727988D+00 0.4621720053237D+00 0.4724263696067D+00 + 0.4828990126121D+00 0.4935942543268D+00 0.5045164886027D+00 0.5156701839924D+00 + 0.5270598845772D+00 0.5386902107861D+00 0.5505658602051D+00 0.5626916083760D+00 + 0.5750723095830D+00 0.5877128976270D+00 0.6006183865849D+00 0.6137938715547D+00 + 0.6272445293836D+00 0.6409756193782D+00 0.6549924839961D+00 0.6693005495166D+00 + 0.6839053266899D+00 0.6988124113627D+00 0.7140274850788D+00 0.7295563156538D+00 + 0.7454047577210D+00 0.7615787532478D+00 0.7780843320207D+00 0.7949276120969D+00 + 0.8121148002200D+00 0.8296521921997D+00 0.8475461732513D+00 0.8658032182945D+00 + 0.8844298922086D+00 0.9034328500427D+00 0.9228188371772D+00 0.9425946894360D+00 + 0.9627673331456D+00 0.9833437851400D+00 0.1004331152707D+01 0.1025736633476D+01 + 0.1047567515241D+01 0.1069831175720D+01 0.1092535082243D+01 0.1115686791375D+01 + 0.1139293948457D+01 0.1163364287075D+01 0.1187905628445D+01 0.1212925880722D+01 + 0.1238433038208D+01 0.1264435180485D+01 0.1290940471443D+01 0.1317957158220D+01 + 0.1345493570030D+01 0.1373558116898D+01 0.1402159288280D+01 0.1431305651569D+01 + 0.1461005850494D+01 0.1491268603389D+01 0.1522102701342D+01 0.1553517006218D+01 + 0.1585520448546D+01 0.1618122025271D+01 0.1651330797361D+01 0.1685155887276D+01 + 0.1719606476280D+01 0.1754691801602D+01 0.1790421153434D+01 0.1826803871767D+01 + 0.1863849343063D+01 0.1901566996742D+01 0.1939966301501D+01 0.1979056761446D+01 + 0.2018847912032D+01 0.2059349315815D+01 0.2100570557999D+01 0.2142521241790D+01 + 0.2185210983528D+01 0.2228649407614D+01 0.2272846141215D+01 0.2317810808747D+01 + 0.2363553026124D+01 0.2410082394775D+01 0.2457408495423D+01 0.2505540881617D+01 + 0.2554489073015D+01 0.2604262548407D+01 0.2654870738488D+01 0.2706323018355D+01 + 0.2758628699743D+01 0.2811797022979D+01 0.2865837148659D+01 0.2920758149043D+01 + 0.2976568999160D+01 0.3033278567615D+01 0.3090895607108D+01 0.3149428744640D+01 + 0.3208886471423D+01 0.3269277132479D+01 0.3330608915918D+01 0.3392889841912D+01 + 0.3456127751341D+01 0.3520330294118D+01 0.3585504917195D+01 0.3651658852234D+01 + 0.3718799102956D+01 0.3786932432154D+01 0.3856065348377D+01 0.3926204092282D+01 + 0.3997354622651D+01 0.4069522602076D+01 0.4142713382310D+01 0.4216931989288D+01 + 0.4292183107814D+01 0.4368471065927D+01 0.4445799818928D+01 0.4524172933100D+01 + 0.4603593569097D+01 0.4684064465021D+01 0.4765587919192D+01 0.4848165772611D+01 + 0.4931799391130D+01 0.5016489647323D+01 0.5102236902085D+01 0.5189040985952D+01 + 0.5276901180158D+01 0.5365816197444D+01 0.5455784162617D+01 0.5546802592894D+01 + 0.5638868378017D+01 0.5731977760181D+01 0.5826126313769D+01 0.5921308924927D+01 + 0.6017519770983D+01 0.6114752299744D+01 0.6212999208681D+01 0.6312252424025D+01 + 0.6412503079799D+01 0.6513741496818D+01 0.6615957161666D+01 0.6719138705689D+01 + 0.6823273884037D+01 0.6928349554769D+01 0.7034351658067D+01 0.7141265195588D+01 + 0.7249074209985D+01 0.7357761764637D+01 0.7467309923627D+01 0.7577699732003D+01 + 0.7688911196366D+01 0.7800923265826D+01 0.7913713813378D+01 0.8027259617727D+01 + 0.8141536345630D+01 0.8256518534789D+01 0.8372179577355D+01 0.8488491704090D+01 + 0.8605425969248D+01 0.8722952236222D+01 0.8841039164025D+01 0.8959654194655D+01 + 0.9078763541413D+01 0.9198332178230D+01 0.9318323830066D+01 0.9438700964464D+01 + 0.9559424784293D+01 0.9680455221780D+01 0.9801750933887D+01 0.9923269299099D+01 + 0.1004496641570D+02 0.1016679710163D+02 0.1028871489593D+02 0.1041067206198D+02 + 0.1053261959239D+02 0.1065450721594D+02 0.1077628340626D+02 0.1089789539267D+02 + 0.1101928917306D+02 0.1114040952889D+02 0.1126120004259D+02 0.1138160311709D+02 + 0.1150155999788D+02 0.1162101079752D+02 0.1173989452270D+02 0.1185814910389D+02 + 0.1197571142774D+02 0.1209251737221D+02 0.1220850184455D+02 0.1232359882222D+02 + 0.1243774139668D+02 0.1255086182033D+02 0.1266289155645D+02 0.1277376133233D+02 + 0.1288340119558D+02 0.1299174057364D+02 0.1309870833671D+02 0.1320423286383D+02 + 0.1330824211245D+02 0.1341066369131D+02 0.1351142493681D+02 0.1361045299271D+02 + 0.1370767489335D+02 0.1380301765027D+02 0.1389640834224D+02 0.1398777420882D+02 + 0.1407704274716D+02 0.1416414181234D+02 0.1424899972093D+02 0.1433154535791D+02 + 0.1441170828680D+02 0.1448941886294D+02 0.1456460834990D+02 0.1463720903887D+02 + 0.1470715437095D+02 0.1477437906225D+02 0.1483881923166D+02 0.1490041253114D+02 + 0.1495909827839D+02 0.1501481759178D+02 0.1506751352732D+02 0.1511713121747D+02 + 0.1516361801165D+02 0.1520692361818D+02 0.1524700024742D+02 0.1528380275595D+02 + 0.1531728879140D+02 0.1534741893776D+02 0.1537415686084D+02 0.1539746945363D+02 + 0.1541732698111D+02 0.1543370322439D+02 0.1544657562364D+02 0.1545592541956D+02 + 0.1546173779302D+02 0.1546400200242D+02 0.1546271151843D+02 0.1545786415570D+02 + 0.1544946220111D+02 0.1543751253809D+02 0.1542202676661D+02 0.1540302131844D+02 + 0.1538051756708D+02 0.1535454193202D+02 0.1532512597682D+02 0.1529230650045D+02 + 0.1525612562157D+02 0.1521663085508D+02 0.1517387518057D+02 0.1512791710213D+02 + 0.1507882069905D+02 0.1502665566690D+02 0.1497149734847D+02 0.1491342675424D+02 + 0.1485253057170D+02 0.1478890116319D+02 0.1472263655178D+02 0.1465384039476D+02 + 0.1458262194423D+02 0.1450909599456D+02 0.1443338281613D+02 0.1435560807511D+02 + 0.1427590273888D+02 0.1419440296685D+02 0.1411124998625D+02 0.1402658995277D+02 + 0.1394057379573D+02 0.1385335704764D+02 0.1376509965795D+02 0.1367596579089D+02 + 0.1358612360737D+02 0.1349574503081D+02 0.1340500549696D+02 0.1331408368786D+02 + 0.1322316124986D+02 0.1313242249599D+02 0.1304205409292D+02 0.1295224473262D+02 + 0.1286318478926D+02 0.1277506596148D+02 0.1268808090072D+02 0.1260242282594D+02 + 0.1251828512526D+02 0.1243586094535D+02 0.1235534276899D+02 0.1227692198172D+02 + 0.1220078842830D+02 0.1212712995982D+02 0.1205613197253D+02 0.1198797693913D+02 + 0.1192284393379D+02 0.1186090815186D+02 0.1180234042546D+02 0.1174730673615D+02 + 0.1169596772603D+02 0.1164847820834D+02 0.1160498667924D+02 0.1156563483188D+02 + 0.1153055707436D+02 0.1149988005301D+02 0.1147372218250D+02 0.1145219318434D+02 + 0.1143539363525D+02 0.1142341452711D+02 0.1141633683999D+02 0.1141423112993D+02 + 0.1141715713298D+02 0.1142516338731D+02 0.1143828687474D+02 0.1145655268355D+02 + 0.1147997369390D+02 0.1150855028761D+02 0.1154227008374D+02 0.1158110770138D+02 + 0.1162502455129D+02 0.1167396865756D+02 0.1172787451079D+02 0.1178666295396D+02 + 0.1185024110228D+02 0.1191850229803D+02 0.1199132610159D+02 0.1206857831946D+02 + 0.1215011107019D+02 0.1223576288907D+02 0.1232535887199D+02 0.1241871085933D+02 + 0.1251561765997D+02 0.1261586531600D+02 0.1271922740805D+02 0.1282546540151D+02 + 0.1293432903330D+02 0.1304555673916D+02 0.1315887612096D+02 0.1327400445348D+02 + 0.1339064923005D+02 0.1350850874625D+02 0.1362727272054D+02 0.1374662295087D+02 + 0.1386623400591D+02 0.1398577394943D+02 0.1410490509638D+02 0.1422328479880D+02 + 0.1434056625987D+02 0.1445639937388D+02 0.1457043159027D+02 0.1468230879914D+02 + 0.1479167623614D+02 0.1489817940404D+02 0.1500146500841D+02 0.1510118190471D+02 + 0.1519698205391D+02 0.1528852148379D+02 0.1537546125281D+02 0.1545746841364D+02 + 0.1553421697307D+02 0.1560538884523D+02 0.1567067479483D+02 0.1572977536717D+02 + 0.1578240180176D+02 0.1582827692612D+02 0.1586713602663D+02 0.1589872769311D+02 + 0.1592281463392D+02 0.1593917445849D+02 0.1594760042409D+02 0.1594790214378D+02 + 0.1593990625272D+02 0.1592345702984D+02 0.1589841697221D+02 0.1586466731948D+02 + 0.1582210852585D+02 0.1577066067732D+02 0.1571026385193D+02 0.1564087842120D+02 + 0.1556248529064D+02 0.1547508607802D+02 0.1537870322780D+02 0.1527338006062D+02 + 0.1515918075676D+02 0.1503619027308D+02 0.1490451419267D+02 0.1476427850715D+02 + 0.1461562933169D+02 0.1445873255288D+02 0.1429377341010D+02 0.1412095601137D+02 + 0.1394050278444D+02 0.1375265386499D+02 0.1355766642312D+02 0.1335581393054D+02 + 0.1314738537038D+02 0.1293268439219D+02 0.1271202841511D+02 0.1248574768189D+02 + 0.1225418426740D+02 0.1201769104500D+02 0.1177663061449D+02 0.1153137419578D+02 + 0.1128230049248D+02 0.1102979452961D+02 0.1077424647032D+02 0.1051605041603D+02 + 0.1025560319513D+02 0.9993303145083D+01 0.9729548892983D+01 0.9464738139829D+01 + 0.9199266453606D+01 0.8933526076402D+01 0.8667904750745D+01 0.8402784570301D+01 + 0.8138540859996D+01 0.7875541090527D+01 0.7614143832090D+01 0.7354697751983D+01 + 0.7097540660550D+01 0.6842998609696D+01 0.6591385047920D+01 0.6343000035605D+01 + 0.6098129523858D+01 0.5857044699944D+01 0.5620001401934D+01 0.5387239604814D+01 + 0.5158982979846D+01 0.4935438528573D+01 0.4716796292366D+01 0.4503229137976D+01 + 0.4294892619056D+01 0.4091924913152D+01 0.3894446833193D+01 0.3702561912045D+01 + 0.3516356558237D+01 0.3335900280537D+01 0.3161245978670D+01 0.2992430297065D+01 + 0.2829474038194D+01 0.2672382631762D+01 0.2521146655720D+01 0.2375742404881D+01 + 0.2236132502695D+01 0.2102266551639D+01 0.1974081817541D+01 0.1851503943111D+01 + 0.1734447685940D+01 0.1622817676200D+01 0.1516509189368D+01 0.1415408929331D+01 + 0.1319395817360D+01 0.1228341782531D+01 0.1142112549373D+01 0.1060568418635D+01 + 0.9835650373019D+00 0.9109541541726D+00 0.8425843575459D+00 0.7783017917968D+00 + 0.7179508498817D+00 0.6613748390683D+00 0.6084166174653D+00 0.5589191992012D+00 + 0.5127263263911D+00 0.4696830063190D+00 0.4296360125529D+00 0.3924343490009D+00 + 0.3579296762027D+00 0.3259766994340D+00 0.2964335184742D+00 0.2691619391536D+00 + 0.2440277470488D+00 0.2209009439361D+00 0.1996559478365D+00 0.1801717576938D+00 + 0.1623320839184D+00 0.1460254461990D+00 0.1311452401368D+00 0.1175897743854D+00 + 0.1052622800912D+00 0.9407089451527D-01 0.8392862078550D-01 0.7475326577690D-01 + 0.6646735814128D-01 0.5899804851766D-01 0.5227699394346D-01 0.4624022845899D-01 + 0.4082802185442D-01 0.3598472845105D-01 0.3165862773800D-01 0.2780175860384D-01 + 0.2436974881146D-01 0.2132164126495D-01 0.1861971851162D-01 0.1622932681167D-01 + 0.1411870099424D-01 0.1225879120292D-01 0.1062309251766D-01 0.9187478324824D-02 + 0.7930038194170D-02 0.6830920911119D-02 0.5872183206948D-02 0.5037644628161D-02 + 0.4312748890659D-02 0.3684431974697D-02 0.3140997133459D-02 0.2671996911721D-02 + 0.2268122201696D-02 0.1921098300832D-02 0.1623587881022D-02 0.1369100730387D-02 + 0.1151910087150D-02 0.9669753500508D-03 0.8098709208516D-03 0.6767209113939D-03 + 0.5641394300578D-03 0.4691761498429D-03 0.3892668522563D-03 0.3221886372696D-03 + 0.2660194893607D-03 0.2191018926233D-03 0.1800101936858D-03 0.1475214192933D-03 + 0.1205892654847D-03 0.9832098695562D-04 0.7995692809159D-04 0.6485245095860D-04 + 0.5246202996510D-04 0.4232529769133D-04 0.3405484129524D-04 0.2732556374477D-04 + 0.2186543872353D-04 0.1744750226736D-04 0.1388293789508D-04 0.1101512510421D-04 + 0.8714533541124D-05 0.6874356872787D-05 0.5406791351919D-05 0.4239874261002D-05 + 0.3314806839624D-05 0.2583694952262D-05 0.2007648657315D-05 0.1555189018603D-05 + 0.1200916989437D-05 0.9244050332163D-06 0.7092773630705D-06 0.5424493283134D-06 + 0.4135005904089D-06 0.3141603589352D-06 0.2378861413798D-06 0.1795202409555D-06 + 0.1350106538765D-06 0.1011851095086D-06 0.7556879909866D-07 0.5623788451178D-07 + 0.4170219815814D-07 0.3081166707088D-07 0.2268194336078D-07 0.1663552297805D-07 + 0.1215530542863D-07 0.8848107127806D-08 0.6416106613217D-08 0.4634585104140D-08 + 0.3334643304910D-08 0.2389835688104D-08 0.1705876062949D-08 0.1212741020005D-08 + 0.8586376559590D-09 0.6054146003728D-09 0.4250856698627D-09 0.2972075512731D-09 + 0.2069101606973D-09 0.1434236365115D-09 0.9898160505409D-10 0.6800804519963D-10 + 0.4651712787494D-10 0.3167310042586D-10 0.2146695649341D-10 0.1448079937139D-10 + 0.9722622861678D-11 0.6496070631129D-11 0.4319651023999D-11 0.2858591661735D-11 + 0.1882503214946D-11 0.1233598363270D-11 0.8043412065319D-12 0.5218060130221D-12 + 0.3367856512696D-12 0.2162455335843D-12 0.1381220475631D-12 0.8775552000331D-13 diff --git a/Test/Fe16_non_collinear/v_fe16.6 b/Test/Fe16_non_collinear/v_fe16.6 new file mode 100755 index 000000000..f3c4e967f --- /dev/null +++ b/Test/Fe16_non_collinear/v_fe16.6 @@ -0,0 +1,1542 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Fe. + 2 0.0000000000000D+00 + LSMS: xx z= 26. xvalws= 5.22926 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728400909D+02-0.5199725115555D+02-0.5199721790459D+02-0.5199718425142D+02 +-0.5199715019116D+02-0.5199711571889D+02-0.5199708082964D+02-0.5199704551834D+02 +-0.5199700977990D+02-0.5199697360915D+02-0.5199693700086D+02-0.5199689994973D+02 +-0.5199686245042D+02-0.5199682449748D+02-0.5199678608545D+02-0.5199674720876D+02 +-0.5199670786180D+02-0.5199666803887D+02-0.5199662773421D+02-0.5199658694201D+02 +-0.5199654565635D+02-0.5199650387127D+02-0.5199646158073D+02-0.5199641877860D+02 +-0.5199637545872D+02-0.5199633161480D+02-0.5199628724051D+02-0.5199624232942D+02 +-0.5199619687506D+02-0.5199615087084D+02-0.5199610431012D+02-0.5199605718616D+02 +-0.5199600949214D+02-0.5199596122116D+02-0.5199591236626D+02-0.5199586292036D+02 +-0.5199581287632D+02-0.5199576222688D+02-0.5199571096474D+02-0.5199565908248D+02 +-0.5199560657259D+02-0.5199555342748D+02-0.5199549963947D+02-0.5199544520078D+02 +-0.5199539010352D+02-0.5199533433975D+02-0.5199527790139D+02-0.5199522078028D+02 +-0.5199516296816D+02-0.5199510445666D+02-0.5199504523733D+02-0.5199498530160D+02 +-0.5199492464081D+02-0.5199486324617D+02-0.5199480110883D+02-0.5199473821977D+02 +-0.5199467456990D+02-0.5199461015004D+02-0.5199454495085D+02-0.5199447896290D+02 +-0.5199441217666D+02-0.5199434458246D+02-0.5199427617052D+02-0.5199420693096D+02 +-0.5199413685375D+02-0.5199406592876D+02-0.5199399414573D+02-0.5199392149428D+02 +-0.5199384796390D+02-0.5199377354396D+02-0.5199369822368D+02-0.5199362199218D+02 +-0.5199354483843D+02-0.5199346675127D+02-0.5199338771940D+02-0.5199330773139D+02 +-0.5199322677567D+02-0.5199314484053D+02-0.5199306191412D+02-0.5199297798443D+02 +-0.5199289303934D+02-0.5199280706654D+02-0.5199272005361D+02-0.5199263198797D+02 +-0.5199254285685D+02-0.5199245264737D+02-0.5199236134649D+02-0.5199226894099D+02 +-0.5199217541751D+02-0.5199208076251D+02-0.5199198496230D+02-0.5199188800302D+02 +-0.5199178987064D+02-0.5199169055096D+02-0.5199159002963D+02-0.5199148829207D+02 +-0.5199138532359D+02-0.5199128110928D+02-0.5199117563407D+02-0.5199106888269D+02 +-0.5199096083969D+02-0.5199085148944D+02-0.5199074081613D+02-0.5199062880373D+02 +-0.5199051543604D+02-0.5199040069664D+02-0.5199028456895D+02-0.5199016703615D+02 +-0.5199004808124D+02-0.5198992768700D+02-0.5198980583600D+02-0.5198968251063D+02 +-0.5198955769302D+02-0.5198943136512D+02-0.5198930350863D+02-0.5198917410506D+02 +-0.5198904313569D+02-0.5198891058155D+02-0.5198877642345D+02-0.5198864064200D+02 +-0.5198850321751D+02-0.5198836413012D+02-0.5198822335968D+02-0.5198808088582D+02 +-0.5198793668793D+02-0.5198779074512D+02-0.5198764303627D+02-0.5198749354000D+02 +-0.5198734223467D+02-0.5198718909837D+02-0.5198703410894D+02-0.5198687724393D+02 +-0.5198671848065D+02-0.5198655779610D+02-0.5198639516703D+02-0.5198623056988D+02 +-0.5198606398084D+02-0.5198589537577D+02-0.5198572473026D+02-0.5198555201962D+02 +-0.5198537721883D+02-0.5198520030257D+02-0.5198502124524D+02-0.5198484002091D+02 +-0.5198465660333D+02-0.5198447096595D+02-0.5198428308188D+02-0.5198409292391D+02 +-0.5198390046450D+02-0.5198370567579D+02-0.5198350852955D+02-0.5198330899725D+02 +-0.5198310704998D+02-0.5198290265850D+02-0.5198269579318D+02-0.5198248642408D+02 +-0.5198227452087D+02-0.5198206005285D+02-0.5198184298896D+02-0.5198162329776D+02 +-0.5198140094741D+02-0.5198117590571D+02-0.5198094814005D+02-0.5198071761744D+02 +-0.5198048430449D+02-0.5198024816738D+02-0.5198000917191D+02-0.5197976728344D+02 +-0.5197952246692D+02-0.5197927468690D+02-0.5197902390745D+02-0.5197877009224D+02 +-0.5197851320449D+02-0.5197825320698D+02-0.5197799006201D+02-0.5197772373146D+02 +-0.5197745417673D+02-0.5197718135875D+02-0.5197690523796D+02-0.5197662577437D+02 +-0.5197634292744D+02-0.5197605665620D+02-0.5197576691913D+02-0.5197547367423D+02 +-0.5197517687900D+02-0.5197487649041D+02-0.5197457246489D+02-0.5197426475838D+02 +-0.5197395332627D+02-0.5197363812338D+02-0.5197331910403D+02-0.5197299622195D+02 +-0.5197266943031D+02-0.5197233868173D+02-0.5197200392824D+02-0.5197166512128D+02 +-0.5197132221174D+02-0.5197097514984D+02-0.5197062388528D+02-0.5197026836709D+02 +-0.5196990854370D+02-0.5196954436291D+02-0.5196917577189D+02-0.5196880271716D+02 +-0.5196842514461D+02-0.5196804299945D+02-0.5196765622622D+02-0.5196726476881D+02 +-0.5196686857041D+02-0.5196646757354D+02-0.5196606171998D+02-0.5196565095085D+02 +-0.5196523520651D+02-0.5196481442664D+02-0.5196438855015D+02-0.5196395751522D+02 +-0.5196352125928D+02-0.5196307971901D+02-0.5196263283028D+02-0.5196218052823D+02 +-0.5196172274718D+02-0.5196125942066D+02-0.5196079048138D+02-0.5196031586126D+02 +-0.5195983549135D+02-0.5195934930191D+02-0.5195885722231D+02-0.5195835918107D+02 +-0.5195785510585D+02-0.5195734492343D+02-0.5195682855969D+02-0.5195630593961D+02 +-0.5195577698725D+02-0.5195524162577D+02-0.5195469977736D+02-0.5195415136330D+02 +-0.5195359630387D+02-0.5195303451841D+02-0.5195246592528D+02-0.5195189044181D+02 +-0.5195130798435D+02-0.5195071846824D+02-0.5195012180777D+02-0.5194951791619D+02 +-0.5194890670569D+02-0.5194828808741D+02-0.5194766197137D+02-0.5194702826653D+02 +-0.5194638688071D+02-0.5194573772064D+02-0.5194508069188D+02-0.5194441569885D+02 +-0.5194374264482D+02-0.5194306143187D+02-0.5194237196087D+02-0.5194167413149D+02 +-0.5194096784220D+02-0.5194025299021D+02-0.5193952947146D+02-0.5193879718066D+02 +-0.5193805601119D+02-0.5193730585519D+02-0.5193654660341D+02-0.5193577814533D+02 +-0.5193500036904D+02-0.5193421316129D+02-0.5193341640742D+02-0.5193260999141D+02 +-0.5193179379578D+02-0.5193096770164D+02-0.5193013158865D+02-0.5192928533501D+02 +-0.5192842881739D+02-0.5192756191098D+02-0.5192668448947D+02-0.5192579642497D+02 +-0.5192489758803D+02-0.5192398784765D+02-0.5192306707119D+02-0.5192213512442D+02 +-0.5192119187145D+02-0.5192023717474D+02-0.5191927089505D+02-0.5191829289146D+02 +-0.5191730302133D+02-0.5191630114025D+02-0.5191528710207D+02-0.5191426075883D+02 +-0.5191322196077D+02-0.5191217055632D+02-0.5191110639202D+02-0.5191002931255D+02 +-0.5190893916069D+02-0.5190783577729D+02-0.5190671900126D+02-0.5190558866954D+02 +-0.5190444461705D+02-0.5190328667673D+02-0.5190211467945D+02-0.5190092845399D+02 +-0.5189972782709D+02-0.5189851262330D+02-0.5189728266508D+02-0.5189603777267D+02 +-0.5189477776415D+02-0.5189350245533D+02-0.5189221165981D+02-0.5189090518885D+02 +-0.5188958285145D+02-0.5188824445423D+02-0.5188688980147D+02-0.5188551869503D+02 +-0.5188413093435D+02-0.5188272631641D+02-0.5188130463569D+02-0.5187986568418D+02 +-0.5187840925129D+02-0.5187693512386D+02-0.5187544308611D+02-0.5187393291962D+02 +-0.5187240440329D+02-0.5187085731330D+02-0.5186929142309D+02-0.5186770650332D+02 +-0.5186610232183D+02-0.5186447864362D+02-0.5186283523081D+02-0.5186117184259D+02 +-0.5185948823518D+02-0.5185778416183D+02-0.5185605937277D+02-0.5185431361514D+02 +-0.5185254663297D+02-0.5185075816718D+02-0.5184894795548D+02-0.5184711573237D+02 +-0.5184526122909D+02-0.5184338417356D+02-0.5184148429039D+02-0.5183956130079D+02 +-0.5183761492255D+02-0.5183564486998D+02-0.5183365085389D+02-0.5183163258155D+02 +-0.5182958975660D+02-0.5182752207907D+02-0.5182542924529D+02-0.5182331094785D+02 +-0.5182116687559D+02-0.5181899671350D+02-0.5181680014270D+02-0.5181457684041D+02 +-0.5181232647986D+02-0.5181004873028D+02-0.5180774325683D+02-0.5180540972054D+02 +-0.5180304777830D+02-0.5180065708277D+02-0.5179823728232D+02-0.5179578802103D+02 +-0.5179330893860D+02-0.5179079967027D+02-0.5178825984684D+02-0.5178568909453D+02 +-0.5178308703501D+02-0.5178045328526D+02-0.5177778745757D+02-0.5177508915948D+02 +-0.5177235799366D+02-0.5176959355795D+02-0.5176679544522D+02-0.5176396324334D+02 +-0.5176109653512D+02-0.5175819489823D+02-0.5175525790517D+02-0.5175228512318D+02 +-0.5174927611419D+02-0.5174623043474D+02-0.5174314763592D+02-0.5174002726332D+02 +-0.5173686885694D+02-0.5173367195115D+02-0.5173043607457D+02-0.5172716075006D+02 +-0.5172384549462D+02-0.5172048981932D+02-0.5171709322923D+02-0.5171365522335D+02 +-0.5171017529452D+02-0.5170665292940D+02-0.5170308760833D+02-0.5169947880525D+02 +-0.5169582598771D+02-0.5169212861671D+02-0.5168838614662D+02-0.5168459802518D+02 +-0.5168076369333D+02-0.5167688258518D+02-0.5167295412791D+02-0.5166897774168D+02 +-0.5166495283960D+02-0.5166087882755D+02-0.5165675510418D+02-0.5165258106080D+02 +-0.5164835608125D+02-0.5164407954186D+02-0.5163975081138D+02-0.5163536925080D+02 +-0.5163093421337D+02-0.5162644504442D+02-0.5162190108131D+02-0.5161730165335D+02 +-0.5161264608164D+02-0.5160793367906D+02-0.5160316375011D+02-0.5159833559084D+02 +-0.5159344848875D+02-0.5158850172268D+02-0.5158349456272D+02-0.5157842627009D+02 +-0.5157329609709D+02-0.5156810328692D+02-0.5156284707365D+02-0.5155752668206D+02 +-0.5155214132756D+02-0.5154669021608D+02-0.5154117254396D+02-0.5153558749786D+02 +-0.5152993425461D+02-0.5152421198113D+02-0.5151841983433D+02-0.5151255696093D+02 +-0.5150662249744D+02-0.5150061557002D+02-0.5149453529428D+02-0.5148838077528D+02 +-0.5148215110737D+02-0.5147584537403D+02-0.5146946264782D+02-0.5146300199022D+02 +-0.5145646245151D+02-0.5144984307067D+02-0.5144314287525D+02-0.5143636088122D+02 +-0.5142949609291D+02-0.5142254750281D+02-0.5141551409151D+02-0.5140839482753D+02 +-0.5140118866721D+02-0.5139389455459D+02-0.5138651142128D+02-0.5137903818632D+02 +-0.5137147375605D+02-0.5136381702401D+02-0.5135606687078D+02-0.5134822216388D+02 +-0.5134028175756D+02-0.5133224449278D+02-0.5132410919702D+02-0.5131587468413D+02 +-0.5130753975423D+02-0.5129910319357D+02-0.5129056377438D+02-0.5128192025477D+02 +-0.5127317137854D+02-0.5126431587514D+02-0.5125535245940D+02-0.5124627983153D+02 +-0.5123709667690D+02-0.5122780166596D+02-0.5121839345403D+02-0.5120887068125D+02 +-0.5119923197240D+02-0.5118947593678D+02-0.5117960116805D+02-0.5116960624416D+02 +-0.5115948972712D+02-0.5114925016296D+02-0.5113888608154D+02-0.5112839599644D+02 +-0.5111777840483D+02-0.5110703178733D+02-0.5109615460788D+02-0.5108514531363D+02 +-0.5107400233480D+02-0.5106272408452D+02-0.5105130895877D+02-0.5103975533619D+02 +-0.5102806157801D+02-0.5101622602790D+02-0.5100424701185D+02-0.5099212283803D+02 +-0.5097985179674D+02-0.5096743216021D+02-0.5095486218256D+02-0.5094214009961D+02 +-0.5092926412887D+02-0.5091623246932D+02-0.5090304330139D+02-0.5088969478681D+02 +-0.5087618506855D+02-0.5086251227064D+02-0.5084867449820D+02-0.5083466983722D+02 +-0.5082049635455D+02-0.5080615209778D+02-0.5079163509518D+02-0.5077694335558D+02 +-0.5076207486834D+02-0.5074702760324D+02-0.5073179951042D+02-0.5071638852033D+02 +-0.5070079254364D+02-0.5068500947122D+02-0.5066903717403D+02-0.5065287350315D+02 +-0.5063651628963D+02-0.5061996334457D+02-0.5060321245898D+02-0.5058626140382D+02 +-0.5056910792994D+02-0.5055174976809D+02-0.5053418462884D+02-0.5051641020267D+02 +-0.5049842415989D+02-0.5048022415067D+02-0.5046180780505D+02-0.5044317273295D+02 +-0.5042431652422D+02-0.5040523674861D+02-0.5038593095586D+02-0.5036639667573D+02 +-0.5034663141803D+02-0.5032663267268D+02-0.5030639790981D+02-0.5028592457977D+02 +-0.5026521011328D+02-0.5024425192145D+02-0.5022304739591D+02-0.5020159390892D+02 +-0.5017988881346D+02-0.5015792944334D+02-0.5013571311336D+02-0.5011323711944D+02 +-0.5009049873873D+02-0.5006749522980D+02-0.5004422383280D+02-0.5002068176959D+02 +-0.4999686624397D+02-0.4997277444186D+02-0.4994840353146D+02-0.4992375066350D+02 +-0.4989881297144D+02-0.4987358757171D+02-0.4984807156389D+02-0.4982226203106D+02 +-0.4979615603991D+02-0.4976975064117D+02-0.4974304286974D+02-0.4971602974502D+02 +-0.4968870827126D+02-0.4966107543776D+02-0.4963312821924D+02-0.4960486357616D+02 +-0.4957627845502D+02-0.4954736978871D+02-0.4951813449683D+02-0.4948856948612D+02 +-0.4945867165071D+02-0.4942843787257D+02-0.4939786502185D+02-0.4936694995729D+02 +-0.4933568952659D+02-0.4930408056681D+02-0.4927211990478D+02-0.4923980435752D+02 +-0.4920713073265D+02-0.4917409582880D+02-0.4914069643607D+02-0.4910692933642D+02 +-0.4907279130416D+02-0.4903827910633D+02-0.4900338950319D+02-0.4896811924867D+02 +-0.4893246509079D+02-0.4889642377211D+02-0.4885999203021D+02-0.4882316659813D+02 +-0.4878594420482D+02-0.4874832157556D+02-0.4871029543247D+02-0.4867186249491D+02 +-0.4863301947995D+02-0.4859376310277D+02-0.4855409007715D+02-0.4851399711583D+02 +-0.4847348093100D+02-0.4843253823466D+02-0.4839116573905D+02-0.4834936015704D+02 +-0.4830711820251D+02-0.4826443659074D+02-0.4822131203876D+02-0.4817774126566D+02 +-0.4813372099301D+02-0.4808924794511D+02-0.4804431884930D+02-0.4799893043625D+02 +-0.4795307944023D+02-0.4790676259938D+02-0.4785997665588D+02-0.4781271835619D+02 +-0.4776498445124D+02-0.4771677169657D+02-0.4766807685247D+02-0.4761889668409D+02 +-0.4756922796153D+02-0.4751906745988D+02-0.4746841195927D+02-0.4741725824487D+02 +-0.4736560310686D+02-0.4731344334036D+02-0.4726077574537D+02-0.4720759712663D+02 +-0.4715390429349D+02-0.4709969405976D+02-0.4704496324345D+02-0.4698970866656D+02 +-0.4693392715482D+02-0.4687761553742D+02-0.4682077064661D+02-0.4676338931742D+02 +-0.4670546838725D+02-0.4664700469545D+02-0.4658799508292D+02-0.4652843639162D+02 +-0.4646832546412D+02-0.4640765914308D+02-0.4634643427075D+02-0.4628464768840D+02 +-0.4622229623583D+02-0.4615937675077D+02-0.4609588606835D+02-0.4603182102046D+02 +-0.4596717843531D+02-0.4590195513672D+02-0.4583614794369D+02-0.4576975366979D+02 +-0.4570276912265D+02-0.4563519110351D+02-0.4556701640665D+02-0.4549824181908D+02 +-0.4542886412007D+02-0.4535888008084D+02-0.4528828646428D+02-0.4521708002473D+02 +-0.4514525750785D+02-0.4507281565054D+02-0.4499975118097D+02-0.4492606081870D+02 +-0.4485174127497D+02-0.4477678925295D+02-0.4470120144833D+02-0.4462497454985D+02 +-0.4454810524011D+02-0.4447059019649D+02-0.4439242609219D+02-0.4431360959758D+02 +-0.4423413738159D+02-0.4415400611337D+02-0.4407321246418D+02-0.4399175310947D+02 +-0.4390962473114D+02-0.4382682402010D+02-0.4374334767908D+02-0.4365919242563D+02 +-0.4357435499539D+02-0.4348883214570D+02-0.4340262065933D+02-0.4331571734857D+02 +-0.4322811905962D+02-0.4313982267710D+02-0.4305082512897D+02-0.4296112339160D+02 +-0.4287071449512D+02-0.4277959552900D+02-0.4268776364786D+02-0.4259521607738D+02 +-0.4250195012053D+02-0.4240796316384D+02-0.4231325268378D+02-0.4221781625326D+02 +-0.4212165154821D+02-0.4202475635403D+02-0.4192712857207D+02-0.4182876622603D+02 +-0.4172966746809D+02-0.4162983058491D+02-0.4152925400326D+02-0.4142793629535D+02 +-0.4132587618362D+02-0.4122307254514D+02-0.4111952441526D+02-0.4101523099069D+02 +-0.4091019163177D+02-0.4080440586392D+02-0.4069787337814D+02-0.4059059403052D+02 +-0.4048256784069D+02-0.4037379498919D+02-0.4026427581359D+02-0.4015401080347D+02 +-0.4004300059408D+02-0.3993124595881D+02-0.3981874780047D+02-0.3970550714118D+02 +-0.3959152511128D+02-0.3947680293704D+02-0.3936134192738D+02-0.3924514345974D+02 +-0.3912820896514D+02-0.3901053991273D+02-0.3889213779388D+02-0.3877300410616D+02 +-0.3865314033730D+02-0.3853254794941D+02-0.3841122836384D+02-0.3828918294671D+02 +-0.3816641299561D+02-0.3804291972752D+02-0.3791870426838D+02-0.3779376764439D+02 +-0.3766811077544D+02-0.3754173447071D+02-0.3741463942662D+02-0.3728682622747D+02 +-0.3715829534855D+02-0.3702904716206D+02-0.3689908194568D+02-0.3676839989389D+02 +-0.3663700113198D+02-0.3650488573242D+02-0.3637205373385D+02-0.3623850516215D+02 +-0.3610424005352D+02-0.3596925847947D+02-0.3583356057318D+02-0.3569714655716D+02 +-0.3556001677183D+02-0.3542217170480D+02-0.3528361202035D+02-0.3514433858906D+02 +-0.3500435251706D+02-0.3486365517474D+02-0.3472224822457D+02-0.3458013364781D+02 +-0.3443731376977D+02-0.3429379128348D+02-0.3414956927154D+02-0.3400465122587D+02 +-0.3385904106531D+02-0.3371274315081D+02-0.3356576229817D+02-0.3341810378823D+02 +-0.3326977337430D+02-0.3312077728689D+02-0.3297112223571D+02-0.3282081540879D+02 +-0.3266986446883D+02-0.3251827754673D+02-0.3236606323235D+02-0.3221323056253D+02 +-0.3205978900636D+02-0.3190574844798D+02-0.3175111916665D+02-0.3159591181450D+02 +-0.3144013739192D+02-0.3128380722060D+02-0.3112693291460D+02-0.3096952634939D+02 +-0.3081159962896D+02-0.3065316505139D+02-0.3049423507279D+02-0.3033482226994D+02 +-0.3017493930171D+02-0.3001459886954D+02-0.2985381367711D+02-0.2969259638940D+02 +-0.2953095959141D+02-0.2936891574677D+02-0.2920647715631D+02-0.2904365591713D+02 +-0.2888046388202D+02-0.2871691261992D+02-0.2855301337730D+02-0.2838877704096D+02 +-0.2822421410237D+02-0.2805933462405D+02-0.2789414820796D+02-0.2772866396645D+02 +-0.2756289049588D+02-0.2739683585338D+02-0.2723050753680D+02-0.2706391246838D+02 +-0.2689705698223D+02-0.2672994681603D+02-0.2656258710714D+02-0.2639498239345D+02 +-0.2622713661917D+02-0.2605905314574D+02-0.2589073476829D+02-0.2572218373759D+02 +-0.2555340178776D+02-0.2538439017000D+02-0.2521514969218D+02-0.2504568076457D+02 +-0.2487598345161D+02-0.2470605752972D+02-0.2453590255090D+02-0.2436551791213D+02 +-0.2419490293015D+02-0.2402405692122D+02-0.2385297928550D+02-0.2368166959536D+02 +-0.2351012768684D+02-0.2333835375355D+02-0.2316634844181D+02-0.2299411294593D+02 +-0.2282164910224D+02-0.2264895948042D+02-0.2247604747020D+02-0.2230291736187D+02 +-0.2212957441833D+02-0.2195602493665D+02-0.2178227629680D+02-0.2160833699531D+02 +-0.2143421666157D+02-0.2125992605447D+02-0.2108547703736D+02-0.2091088252957D+02 +-0.2073615643311D+02-0.2056131353347D+02-0.2038636937454D+02-0.2021134010787D+02 +-0.2003624231780D+02-0.1986109282464D+02-0.1968590846923D+02-0.1951070588338D+02 +-0.1933550125113D+02-0.1916031006739D+02-0.1898514690054D+02-0.1881002516654D+02 +-0.1863495692195D+02-0.1845995268332D+02-0.1828502127992D+02-0.1811016974578D+02 +-0.1793540325598D+02-0.1776072511080D+02-0.1758613676940D+02-0.1741163793327D+02 +-0.1723722667775D+02-0.1706289962834D+02-0.1688865217702D+02-0.1671447873257D+02 +-0.1654037299789D+02-0.1636632826691D+02-0.1619233773325D+02-0.1601839480315D+02 +-0.1584449340510D+02-0.1567062828984D+02-0.1549679531468D+02-0.1532299170720D+02 +-0.1514921630451D+02-0.1497546976480D+02-0.1480175474939D+02-0.1462807607400D+02 +-0.1445444082871D+02-0.1428085846710D+02-0.1410734086517D+02-0.1393390235146D+02 +-0.1376055970989D+02-0.1358733215727D+02-0.1341424129731D+02-0.1324131105355D+02 +-0.1306856758305D+02-0.1289603917318D+02-0.1272375612351D+02-0.1255175061484D+02 +-0.1238005656736D+02-0.1220870948967D+02-0.1203774632043D+02-0.1186720526422D+02 +-0.1169712562320D+02-0.1152754762583D+02-0.1135851225403D+02-0.1119006106993D+02 +-0.1102223604329D+02-0.1085507938069D+02-0.1068863335731D+02-0.1052294015218D+02 +-0.1035804168776D+02-0.1019397947446D+02-0.1003079446077D+02-0.9868526889628D+01 +-0.9707216161554D+01-0.9546900704939D+01-0.9387617854023D+01-0.9229403734858D+01 +-0.9072293159592D+01-0.8916319529363D+01-0.8761514745993D+01-0.8607909132693D+01 +-0.8455531363896D+01-0.8304408404305D+01-0.8154565457227D+01-0.8006025922166D+01 +-0.7858811361682D+01-0.7712941477416D+01-0.7568434095199D+01-0.7425305159081D+01 +-0.7283568734134D+01-0.7143237017788D+01-0.7004320359504D+01-0.6866827288485D+01 +-0.6730764549154D+01-0.6596137144079D+01-0.6462948384000D+01-0.6331199944618D+01 +-0.6200891929738D+01-0.6072022940407D+01-0.5944590149603D+01-0.5818589382077D+01 +-0.5694015198898D+01-0.5570860986265D+01-0.5449119048124D+01-0.5328780702141D+01 +-0.5209836378552D+01-0.5092275721431D+01-0.4976087691897D+01-0.4861260672787D+01 +-0.4747782574321D+01-0.4635640940271D+01-0.4524823054180D+01-0.4415316045125D+01 +-0.4307106992579D+01-0.4200183029885D+01-0.4094531445869D+01-0.3990139784139D+01 +-0.3886995939600D+01-0.3785088251726D+01-0.3684405594148D+01-0.3584937460106D+01 +-0.3486674043348D+01-0.3389606314047D+01-0.3293726089348D+01-0.3199026098161D+01 +-0.3105500039868D+01-0.3013142636618D+01-0.2921949678952D+01-0.2831918064533D+01 +-0.2743045829849D+01-0.2655332174788D+01-0.2568777480092D+01-0.2483383317815D+01 +-0.2399152454962D+01-0.2316088850658D+01-0.2234197647300D+01-0.2153485156272D+01 +-0.2073958838965D+01-0.1995627283965D+01-0.1918500181413D+01-0.1842588295670D+01 +-0.1767903437522D+01-0.1694458437274D+01-0.1622267120110D+01-0.1551344285168D+01 +-0.1481705689753D+01-0.1413368040087D+01-0.1346348989896D+01-0.1280667148051D+01 +-0.1216342096293D+01-0.1153394417906D+01-0.1091845737986D+01-0.1031718775725D+01 +-0.9730374088849D+00-0.9158267504133D+00-0.8601132368937D+00-0.8059247283301D+00 +-0.7532906185600D+00-0.7022419554295D+00-0.6528115697324D+00-0.6050342118170D+00 +-0.5589466947046D+00-0.5145880425354D+00-0.4719996431596D+00-0.4312254037239D+00 +-0.3923119081554D+00-0.3553085755132D+00-0.3202678182603D+00-0.2872451996103D+00 +-0.2562993012896D+00 + 0.0000000000000D+00 + 1012 0.5229258479779D+01 + 0.2150742905406D-04 0.2201934401975D-04 0.2254344131081D-04 0.2308001074793D-04 + 0.2362934904336D-04 0.2419175996469D-04 0.2476755450247D-04 0.2535705104185D-04 + 0.2596057553829D-04 0.2657846169737D-04 0.2721105115901D-04 0.2785869368592D-04 + 0.2852174735659D-04 0.2920057876285D-04 0.2989556321214D-04 0.3060708493450D-04 + 0.3133553729459D-04 0.3208132300862D-04 0.3284485436652D-04 0.3362655345933D-04 + 0.3442685241199D-04 0.3524619362168D-04 0.3608503000175D-04 0.3694382523153D-04 + 0.3782305401197D-04 0.3872320232740D-04 0.3964476771351D-04 0.4058825953159D-04 + 0.4155419924941D-04 0.4254312072866D-04 0.4355557051923D-04 0.4459210816046D-04 + 0.4565330648961D-04 0.4673975195749D-04 0.4785204495171D-04 0.4899080012754D-04 + 0.5015664674660D-04 0.5135022902361D-04 0.5257220648130D-04 0.5382325431382D-04 + 0.5510406375867D-04 0.5641534247751D-04 0.5775781494596D-04 0.5913222285265D-04 + 0.6053932550771D-04 0.6197990026094D-04 0.6345474292991D-04 0.6496466823815D-04 + 0.6651051026378D-04 0.6809312289875D-04 0.6971338031887D-04 0.7137217746513D-04 + 0.7307043053626D-04 0.7480907749308D-04 0.7658907857468D-04 0.7841141682692D-04 + 0.8027709864336D-04 0.8218715431905D-04 0.8414263861740D-04 0.8614463135050D-04 + 0.8819423797310D-04 0.9029259019072D-04 0.9244084658213D-04 0.9464019323656D-04 + 0.9689184440594D-04 0.9919704317265D-04 0.1015570621330D-03 0.1039732040969D-03 + 0.1064468028041D-03 0.1089792236573D-03 0.1115718644728D-03 0.1142261562483D-03 + 0.1169435639500D-03 0.1197255873171D-03 0.1225737616857D-03 0.1254896588328D-03 + 0.1284748878395D-03 0.1315310959746D-03 0.1346599695998D-03 0.1378632350954D-03 + 0.1411426598085D-03 0.1445000530233D-03 0.1479372669546D-03 0.1514561977641D-03 + 0.1550587866019D-03 0.1587470206711D-03 0.1625229343189D-03 0.1663886101524D-03 + 0.1703461801815D-03 0.1743978269887D-03 0.1785457849256D-03 0.1827923413391D-03 + 0.1871398378251D-03 0.1915906715131D-03 0.1961472963799D-03 0.2008122245952D-03 + 0.2055880278984D-03 0.2104773390081D-03 0.2154828530649D-03 0.2206073291079D-03 + 0.2258535915864D-03 0.2312245319072D-03 0.2367231100177D-03 0.2423523560273D-03 + 0.2481153718665D-03 0.2540153329849D-03 0.2600554900897D-03 0.2662391709247D-03 + 0.2725697820915D-03 0.2790508109132D-03 0.2856858273428D-03 0.2924784859153D-03 + 0.2994325277470D-03 0.3065517825810D-03 0.3138401708812D-03 0.3213017059753D-03 + 0.3289404962488D-03 0.3367607473897D-03 0.3447667646870D-03 0.3529629553823D-03 + 0.3613538310777D-03 0.3699440101989D-03 0.3787382205180D-03 0.3877413017338D-03 + 0.3969582081140D-03 0.4063940111991D-03 0.4160539025692D-03 0.4259431966769D-03 + 0.4360673337456D-03 0.4464318827368D-03 0.4570425443864D-03 0.4679051543124D-03 + 0.4790256861959D-03 0.4904102550358D-03 0.5020651204812D-03 0.5139966902408D-03 + 0.5262115235724D-03 0.5387163348549D-03 0.5515179972435D-03 0.5646235464104D-03 + 0.5780401843732D-03 0.5917752834137D-03 0.6058363900874D-03 0.6202312293275D-03 + 0.6349677086450D-03 0.6500539224267D-03 0.6654981563344D-03 0.6813088918062D-03 + 0.6974948106637D-03 0.7140647998269D-03 0.7310279561389D-03 0.7483935913040D-03 + 0.7661712369406D-03 0.7843706497523D-03 0.8030018168203D-03 0.8220749610184D-03 + 0.8416005465556D-03 0.8615892846469D-03 0.8820521393172D-03 0.9030003333406D-03 + 0.9244453543176D-03 0.9463989608946D-03 0.9688731891282D-03 0.9918803589975D-03 + 0.1015433081069D-02 0.1039544263315D-02 0.1064227118095D-02 0.1089495169290D-02 + 0.1115362259619D-02 0.1141842558105D-02 0.1168950567737D-02 0.1196701133289D-02 + 0.1225109449338D-02 0.1254191068456D-02 0.1283961909601D-02 0.1314438266696D-02 + 0.1345636817413D-02 0.1377574632157D-02 0.1410269183260D-02 0.1443738354387D-02 + 0.1478000450161D-02 0.1513074206015D-02 0.1548978798262D-02 0.1585733854409D-02 + 0.1623359463706D-02 0.1661876187936D-02 0.1701305072458D-02 0.1741667657505D-02 + 0.1782985989747D-02 0.1825282634108D-02 0.1868580685877D-02 0.1912903783076D-02 + 0.1958276119133D-02 0.2004722455835D-02 0.2052268136585D-02 0.2100939099962D-02 + 0.2150761893598D-02 0.2201763688371D-02 0.2253972292925D-02 0.2307416168524D-02 + 0.2362124444253D-02 0.2418126932561D-02 0.2475454145167D-02 0.2534137309329D-02 + 0.2594208384486D-02 0.2655700079287D-02 0.2718645869002D-02 0.2783080013344D-02 + 0.2849037574687D-02 0.2916554436715D-02 0.2985667323484D-02 0.3056413818931D-02 + 0.3128832386828D-02 0.3202962391187D-02 0.3278844117136D-02 0.3356518792272D-02 + 0.3436028608501D-02 0.3517416744371D-02 0.3600727387929D-02 0.3686005760082D-02 + 0.3773298138499D-02 0.3862651882061D-02 0.3954115455860D-02 0.4047738456768D-02 + 0.4143571639594D-02 0.4241666943825D-02 0.4342077520985D-02 0.4444857762604D-02 + 0.4550063328833D-02 0.4657751177697D-02 0.4767979595018D-02 0.4880808225009D-02 + 0.4996298101570D-02 0.5114511680279D-02 0.5235512871115D-02 0.5359367071918D-02 + 0.5486141202598D-02 0.5615903740128D-02 0.5748724754308D-02 0.5884675944352D-02 + 0.6023830676284D-02 0.6166264021183D-02 0.6312052794284D-02 0.6461275594959D-02 + 0.6614012847588D-02 0.6770346843357D-02 0.6930361782982D-02 0.7094143820394D-02 + 0.7261781107400D-02 0.7433363839342D-02 0.7608984301773D-02 0.7788736918176D-02 + 0.7972718298747D-02 0.8161027290261D-02 0.8353765027049D-02 0.8551034983111D-02 + 0.8752943025377D-02 0.8959597468160D-02 0.9171109128811D-02 0.9387591384603D-02 + 0.9609160230877D-02 0.9835934340477D-02 0.1006803512449D-01 0.1030558679431D-01 + 0.1054871642512D-01 0.1079755402073D-01 0.1105223257982D-01 0.1131288816368D-01 + 0.1157965996544D-01 0.1185269038080D-01 0.1213212508026D-01 0.1241811308303D-01 + 0.1271080683248D-01 0.1301036227325D-01 0.1331693893004D-01 0.1363069998813D-01 + 0.1395181237567D-01 0.1428044684765D-01 0.1461677807184D-01 0.1496098471648D-01 + 0.1531324953990D-01 0.1567375948211D-01 0.1604270575828D-01 0.1642028395434D-01 + 0.1680669412453D-01 0.1720214089116D-01 0.1760683354637D-01 0.1802098615621D-01 + 0.1844481766683D-01 0.1887855201303D-01 0.1932241822902D-01 0.1977665056168D-01 + 0.2024148858606D-01 0.2071717732349D-01 0.2120396736203D-01 0.2170211497964D-01 + 0.2221188226980D-01 0.2273353726988D-01 0.2326735409215D-01 0.2381361305754D-01 + 0.2437260083229D-01 0.2494461056731D-01 0.2552994204062D-01 0.2612890180262D-01 + 0.2674180332442D-01 0.2736896714935D-01 0.2801072104743D-01 0.2866740017320D-01 + 0.2933934722669D-01 0.3002691261781D-01 0.3073045463399D-01 0.3145033961141D-01 + 0.3218694210958D-01 0.3294064508962D-01 0.3371184009606D-01 0.3450092744243D-01 + 0.3530831640054D-01 0.3613442539362D-01 0.3697968219334D-01 0.3784452412086D-01 + 0.3872939825181D-01 0.3963476162544D-01 0.4056108145796D-01 0.4150883536008D-01 + 0.4247851155891D-01 0.4347060912422D-01 0.4448563819924D-01 0.4552412023590D-01 + 0.4658658823475D-01 0.4767358698962D-01 0.4878567333696D-01 0.4992341641008D-01 + 0.5108739789835D-01 0.5227821231135D-01 0.5349646724813D-01 0.5474278367169D-01 + 0.5601779618862D-01 0.5732215333417D-01 0.5865651786266D-01 0.6002156704340D-01 + 0.6141799296226D-01 0.6284650282880D-01 0.6430781928923D-01 0.6580268074515D-01 + 0.6733184167825D-01 0.6889607298100D-01 0.7049616229337D-01 0.7213291434581D-01 + 0.7380715130845D-01 0.7551971314661D-01 0.7727145798277D-01 0.7906326246509D-01 + 0.8089602214242D-01 0.8277065184608D-01 0.8468808607842D-01 0.8664927940812D-01 + 0.8865520687255D-01 0.9070686438707D-01 0.9280526916144D-01 0.9495146012343D-01 + 0.9714649834967D-01 0.9939146750384D-01 0.1016874742823D+00 0.1040356488672D+00 + 0.1064371453872D+00 0.1088931423856D+00 0.1114048432967D+00 0.1139734769295D+00 + 0.1166002979593D+00 0.1192865874273D+00 0.1220336532487D+00 0.1248428307276D+00 + 0.1277154830815D+00 0.1306530019730D+00 0.1336568080498D+00 0.1367283514936D+00 + 0.1398691125766D+00 0.1430806022269D+00 0.1463643626021D+00 0.1497219676713D+00 + 0.1531550238057D+00 0.1566651703780D+00 0.1602540803695D+00 0.1639234609870D+00 + 0.1676750542871D+00 0.1715106378098D+00 0.1754320252209D+00 0.1794410669619D+00 + 0.1835396509100D+00 0.1877297030455D+00 0.1920131881282D+00 0.1963921103827D+00 + 0.2008685141914D+00 0.2054444847966D+00 0.2101221490109D+00 0.2149036759359D+00 + 0.2197912776889D+00 0.2247872101386D+00 0.2298937736476D+00 0.2351133138248D+00 + 0.2404482222837D+00 0.2459009374100D+00 0.2514739451362D+00 0.2571697797240D+00 + 0.2629910245536D+00 0.2689403129212D+00 0.2750203288421D+00 0.2812338078623D+00 + 0.2875835378751D+00 0.2940723599454D+00 0.3007031691395D+00 0.3074789153608D+00 + 0.3144026041916D+00 0.3214772977396D+00 0.3287061154899D+00 0.3360922351618D+00 + 0.3436388935694D+00 0.3513493874868D+00 0.3592270745164D+00 0.3672753739607D+00 + 0.3754977676972D+00 0.3838978010545D+00 0.3924790836915D+00 0.4012452904770D+00 + 0.4102001623706D+00 0.4193475073036D+00 0.4286912010595D+00 0.4382351881538D+00 + 0.4479834827120D+00 0.4579401693452D+00 0.4681094040228D+00 0.4784954149418D+00 + 0.4891025033910D+00 0.4999350446102D+00 0.5109974886435D+00 0.5222943611853D+00 + 0.5338302644183D+00 0.5456098778426D+00 0.5576379590956D+00 0.5699193447601D+00 + 0.5824589511607D+00 0.5952617751475D+00 0.6083328948654D+00 0.6216774705074D+00 + 0.6353007450521D+00 0.6492080449824D+00 0.6634047809857D+00 0.6778964486325D+00 + 0.6926886290333D+00 0.7077869894721D+00 0.7231972840138D+00 0.7389253540860D+00 + 0.7549771290311D+00 0.7713586266289D+00 0.7880759535873D+00 0.8051353059985D+00 + 0.8225429697604D+00 0.8403053209599D+00 0.8584288262158D+00 0.8769200429817D+00 + 0.8957856198031D+00 0.9150322965294D+00 0.9346669044774D+00 0.9546963665439D+00 + 0.9751276972649D+00 0.9959680028197D+00 0.1017224480976D+01 0.1038904420974D+01 + 0.1061015203349D+01 0.1083564299686D+01 0.1106559272300D+01 0.1130007773859D+01 + 0.1153917546912D+01 0.1178296423354D+01 0.1203152323804D+01 0.1228493256899D+01 + 0.1254327318495D+01 0.1280662690787D+01 0.1307507641324D+01 0.1334870521934D+01 + 0.1362759767535D+01 0.1391183894856D+01 0.1420151501035D+01 0.1449671262109D+01 + 0.1479751931386D+01 0.1510402337698D+01 0.1541631383520D+01 0.1573448042969D+01 + 0.1605861359662D+01 0.1638880444440D+01 0.1672514472946D+01 0.1706772683055D+01 + 0.1741664372155D+01 0.1777198894269D+01 0.1813385657016D+01 0.1850234118409D+01 + 0.1887753783475D+01 0.1925954200705D+01 0.1964844958324D+01 0.2004435680370D+01 + 0.2044736022586D+01 0.2085755668115D+01 0.2127504322996D+01 0.2169991711448D+01 + 0.2213227570952D+01 0.2257221647108D+01 0.2301983688271D+01 0.2347523439972D+01 + 0.2393850639086D+01 0.2440975007782D+01 0.2488906247220D+01 0.2537654031002D+01 + 0.2587227998372D+01 0.2637637747157D+01 0.2688892826442D+01 0.2741002728983D+01 + 0.2793976883341D+01 0.2847824645743D+01 0.2902555291652D+01 0.2958178007063D+01 + 0.3014701879494D+01 0.3072135888684D+01 0.3130488897001D+01 0.3189769639525D+01 + 0.3249986713841D+01 0.3311148569513D+01 0.3373263497233D+01 0.3436339617667D+01 + 0.3500384869964D+01 0.3565406999951D+01 0.3631413547991D+01 0.3698411836514D+01 + 0.3766408957221D+01 0.3835411757947D+01 0.3905426829193D+01 0.3976460490322D+01 + 0.4048518775419D+01 0.4121607418815D+01 0.4195731840277D+01 0.4270897129857D+01 + 0.4347108032420D+01 0.4424368931831D+01 0.4502683834816D+01 0.4582056354503D+01 + 0.4662489693636D+01 0.4743986627475D+01 0.4826549486387D+01 0.4910180138127D+01 + 0.4994879969825D+01 0.5080649869681D+01 0.5167490208373D+01 0.5255400820202D+01 + 0.5344380983962D+01 0.5434429403565D+01 0.5525544188426D+01 0.5617722833617D+01 + 0.5710962199815D+01 0.5805258493041D+01 0.5900607244231D+01 0.5997003288635D+01 + 0.6094440745069D+01 0.6192912995049D+01 0.6292412661814D+01 0.6392931589269D+01 + 0.6494460820874D+01 0.6596990578488D+01 0.6700510241224D+01 0.6805008324307D+01 + 0.6910472457995D+01 0.7016889366579D+01 0.7124244847491D+01 0.7232523750568D+01 + 0.7341709957494D+01 0.7451786361463D+01 0.7562734847107D+01 0.7674536270712D+01 + 0.7787170440791D+01 0.7900616099026D+01 0.8014850901658D+01 0.8129851401340D+01 + 0.8245593029526D+01 0.8362050079436D+01 0.8479195689649D+01 0.8597001828383D+01 + 0.8715439278509D+01 0.8834477623371D+01 0.8954085233454D+01 0.9074229253973D+01 + 0.9194875593440D+01 0.9315988913276D+01 0.9437532618530D+01 0.9559468849772D+01 + 0.9681758476237D+01 0.9804361090277D+01 0.9927235003199D+01 0.1005033724256D+02 + 0.1017362355101D+02 0.1029704838669D+02 0.1042056492540D+02 0.1054412506444D+02 + 0.1066767942831D+02 0.1079117737637D+02 0.1091456701244D+02 0.1103779519646D+02 + 0.1116080755839D+02 0.1128354851420D+02 0.1140596128432D+02 0.1152798791434D+02 + 0.1164956929827D+02 0.1177064520433D+02 0.1189115430327D+02 0.1201103419951D+02 + 0.1213022146500D+02 0.1224865167586D+02 0.1236625945201D+02 0.1248297849976D+02 + 0.1259874165744D+02 0.1271348094411D+02 0.1282712761148D+02 0.1293961219902D+02 + 0.1305086459240D+02 0.1316081408518D+02 0.1326938944391D+02 0.1337651897664D+02 + 0.1348213060491D+02 0.1358615193909D+02 0.1368851035736D+02 0.1378913308811D+02 + 0.1388794729589D+02 0.1398488017086D+02 0.1407985902179D+02 0.1417281137257D+02 + 0.1426366506212D+02 0.1435234834789D+02 0.1443879001264D+02 0.1452291947466D+02 + 0.1460466690129D+02 0.1468396332564D+02 0.1476074076649D+02 0.1483493235126D+02 + 0.1490647244192D+02 0.1497529676373D+02 0.1504134253675D+02 0.1510454860984D+02 + 0.1516485559720D+02 0.1522220601698D+02 0.1527654443219D+02 0.1532781759325D+02 + 0.1537597458241D+02 0.1542096695946D+02 0.1546274890874D+02 0.1550127738702D+02 + 0.1553651227211D+02 0.1556841651189D+02 0.1559695627334D+02 0.1562210109145D+02 + 0.1564382401753D+02 0.1566210176664D+02 0.1567691486377D+02 0.1568824778841D+02 + 0.1569608911712D+02 0.1570043166360D+02 0.1570127261607D+02 0.1569861367129D+02 + 0.1569246116496D+02 0.1568282619787D+02 0.1566972475757D+02 0.1565317783486D+02 + 0.1563321153475D+02 0.1560985718135D+02 0.1558315141624D+02 0.1555313628970D+02 + 0.1551985934445D+02 0.1548337369123D+02 0.1544373807583D+02 0.1540101693692D+02 + 0.1535528045436D+02 0.1530660458716D+02 0.1525507110098D+02 0.1520076758423D+02 + 0.1514378745267D+02 0.1508422994170D+02 0.1502220008605D+02 0.1495780868635D+02 + 0.1489117226206D+02 0.1482241299046D+02 0.1475165863115D+02 0.1467904243575D+02 + 0.1460470304238D+02 0.1452878435463D+02 0.1445143540465D+02 0.1437281020013D+02 + 0.1429306755483D+02 0.1421237090260D+02 0.1413088809452D+02 0.1404879117925D+02 + 0.1396625616625D+02 0.1388346277207D+02 0.1380059414952D+02 0.1371783659988D+02 + 0.1363537926825D+02 0.1355341382212D+02 0.1347213411351D+02 0.1339173582480D+02 + 0.1331241609871D+02 0.1323437315279D+02 0.1315780587881D+02 0.1308291342766D+02 + 0.1300989478035D+02 0.1293894830568D+02 0.1287027130535D+02 0.1280405954732D+02 + 0.1274050678825D+02 0.1267980428593D+02 0.1262214030269D+02 0.1256769960087D+02 + 0.1251666293145D+02 0.1246920651702D+02 0.1242550153038D+02 0.1238571356999D+02 + 0.1235000213372D+02 0.1231852009235D+02 0.1229141316414D+02 0.1226881939222D+02 + 0.1225086862623D+02 0.1223768200985D+02 0.1222937147599D+02 0.1222603925117D+02 + 0.1222777737106D+02 0.1223466720868D+02 0.1224677901729D+02 0.1226417148958D+02 + 0.1228689133517D+02 0.1231497287802D+02 0.1234843767581D+02 0.1238729416297D+02 + 0.1243153731911D+02 0.1248114836487D+02 0.1253609448665D+02 0.1259632859227D+02 + 0.1266178909890D+02 0.1273239975523D+02 0.1280806949923D+02 0.1288869235315D+02 + 0.1297414735711D+02 0.1306429854274D+02 0.1315899494816D+02 0.1325807067533D+02 + 0.1336134499111D+02 0.1346862247282D+02 0.1357969319917D+02 0.1369433298744D+02 + 0.1381230367740D+02 0.1393335346243D+02 0.1405721726828D+02 0.1418361717951D+02 + 0.1431226291376D+02 0.1444285234362D+02 0.1457507206581D+02 0.1470859801733D+02 + 0.1484309613763D+02 0.1497822307639D+02 0.1511362694548D+02 0.1524894811426D+02 + 0.1538382004666D+02 0.1551787017849D+02 0.1565072083339D+02 0.1578199017530D+02 + 0.1591129319546D+02 0.1603824273170D+02 0.1616245051740D+02 0.1628352825765D+02 + 0.1640108872963D+02 0.1651474690448D+02 0.1662412108723D+02 0.1672883407174D+02 + 0.1682851430716D+02 0.1692279707220D+02 0.1701132565381D+02 0.1709375252614D+02 + 0.1716974052608D+02 0.1723896402125D+02 0.1730111006644D+02 0.1735587954416D+02 + 0.1740298828530D+02 0.1744216816538D+02 0.1747316817225D+02 0.1749575544089D+02 + 0.1750971625093D+02 0.1751485698260D+02 0.1751100502688D+02 0.1749800964559D+02 + 0.1747574277733D+02 0.1744409978499D+02 0.1740300014123D+02 0.1735238804766D+02 + 0.1729223298439D+02 0.1722253018618D+02 0.1714330104180D+02 0.1705459341368D+02 + 0.1695648187457D+02 0.1684906785873D+02 0.1673247972505D+02 0.1660687272995D+02 + 0.1647242890818D+02 0.1632935685981D+02 0.1617789144222D+02 0.1601829336618D+02 + 0.1585084869528D+02 0.1567586824865D+02 0.1549368690699D+02 0.1530466282265D+02 + 0.1510917653451D+02 0.1490762998916D+02 0.1470044547022D+02 0.1448806443791D+02 + 0.1427094628160D+02 0.1404956698852D+02 0.1382441773199D+02 0.1359600338336D+02 + 0.1336484095192D+02 0.1313145795774D+02 0.1289639074258D+02 0.1266018272468D+02 + 0.1242338260337D+02 0.1218654252002D+02 0.1195021618209D+02 0.1171495695744D+02 + 0.1148131594627D+02 0.1124984003849D+02 0.1102106996440D+02 0.1079553834688D+02 + 0.1057376776347D+02 0.1035626882667D+02 0.1014353829125D+02 0.9936057196884D+01 + 0.9734289054994D+01 0.9538678088120D+01 0.9349647530399D+01 0.9167597997384D+01 + 0.8992905933301D+01 0.8825922143594D+01 0.8666970420224D+01 0.8516346266999D+01 + 0.8374315731611D+01 0.8241114350747D+01 0.8116946214096D+01 0.8001983152570D+01 + 0.7896364055459D+01 0.7800194320670D+01 0.7713545441561D+01 0.7636454733225D+01 + 0.7568925200401D+01 0.7510925548528D+01 0.7462390338698D+01 0.7423220286625D+01 + 0.7393282704950D+01 0.7372412087556D+01 0.7360410833787D+01 0.7357050109802D+01 + 0.7362070843542D+01 0.7375184849138D+01 0.7396076075866D+01 0.7424401976120D+01 + 0.7459794986211D+01 0.7501864113185D+01 0.7550196620265D+01 0.7604359802945D+01 + 0.7663902847256D+01 0.7728358761219D+01 0.7797246370063D+01 0.7870072365405D+01 + 0.7946333398216D+01 0.8025518205140D+01 0.8107109757504D+01 0.8190587422172D+01 + 0.8275429123337D+01 0.8361113494303D+01 0.8447122008353D+01 0.8532941077928D+01 + 0.8618064111536D+01 0.8701993518075D+01 0.8784242648578D+01 0.8864337665829D+01 + 0.8941819332731D+01 0.9016244710878D+01 0.9087188761372D+01 0.9154245840560D+01 + 0.9217031084099D+01 0.9275181673474D+01 0.9328357979881D+01 0.9376244581215D+01 + 0.9418551148709D+01 0.9455013200639D+01 0.9485392721360D+01 0.9509478644797D+01 + 0.9527087202359D+01 0.9538062136102D+01 0.9542274778747D+01 0.9539624002998D+01 + 0.9530036043300D+01 0.9513464193959D+01 0.9489888388159D+01 0.9459314663078D+01 + 0.9421774516843D+01 0.9377324163609D+01 0.9326043693467D+01 0.9268036144314D+01 + 0.9203426493115D+01 0.9132360574297D+01 0.9055003933175D+01 0.8971540622481D+01 + 0.8882171950151D+01 0.8787115186520D+01 0.8686602239071D+01 0.8580878302773D+01 + 0.8470200493895D+01 0.8354836475027D+01 0.8235063078754D+01 0.8111164937189D+01 + 0.7983433124252D+01 0.7852163817216D+01 0.7717656983696D+01 0.7580215099831D+01 + 0.7440141905014D+01 0.7297741198086D+01 0.7153315679440D+01 0.7007165843079D+01 + 0.6859588922166D+01 0.6710877891167D+01 0.6561320527250D+01 0.6411198533128D+01 + 0.6260786723101D+01 0.6110352273646D+01 0.5960154039458D+01 0.5810441935471D+01 + 0.5661456384987D+01 0.5513427833700D+01 0.5366576329042D+01 0.5221111163955D+01 + 0.5077230583918D+01 0.4935121555751D+01 0.4794959596475D+01 0.4656908660288D+01 + 0.4521121081498D+01 0.4387737571052D+01 0.4256887264186D+01 0.4128687816522D+01 + 0.4003245545873D+01 0.3880655616880D+01 0.3761002265561D+01 0.3644359060777D+01 + 0.3530789199588D+01 0.3420345833472D+01 0.3313072422343D+01 0.3209003113371D+01 + 0.3108163141592D+01 0.3010569249384D+01 0.2916230121919D+01 0.2825146835796D+01 + 0.2737313318133D+01 0.2652716813508D+01 0.2571338356232D+01 0.2493153245580D+01 + 0.2418131521695D+01 0.2346238440047D+01 0.2277434942461D+01 0.2211678122838D+01 + 0.2148921685899D+01 0.2089116397376D+01 0.2032210524266D+01 0.1978150263893D+01 + 0.1926880160684D+01 0.1878343509721D+01 0.1832482746269D+01 0.1789239820638D+01 + 0.1748556557871D+01 0.1710375001879D+01 0.1674637743804D+01 0.1641288234472D+01 + 0.1610271080956D+01 0.1581532327338D+01 0.1555019719890D+01 0.1530682956958D+01 + 0.1508473923914D+01 0.1488346913611D+01 0.1470258832820D+01 0.1454169395155D+01 + 0.1440041301042D+01 0.1427840405245D+01 0.1417535872504D+01 0.1409100321753D+01 + 0.1402509959377D+01 0.1397744701874D+01 0.1394788288181D+01 0.1393628381826D+01 + 0.1394256662892D+01 0.1396668909610D+01 0.1400865069190D+01 0.1406849317222D+01 + 0.1414629369614D+01 0.1424336942263D+01 0.1436096575202D+01 0.1449912447024D+01 + 0.1465794674727D+01 0.1483759333931D+01 0.1503828494539D+01 0.1526030271798D+01 + 0.1550398892649D+01 0.1576974777196D+01 0.1605804635055D+01 0.1636941576215D+01 + 7 1012 + 1 0 -1 -511.89194 + 2 0 -1 -58.90181 + 2 1 1 -50.68932 + 2 1 -2 -49.77537 + 3 0 -1 -5.73317 + 3 1 1 -3.34334 + 3 1 -2 -3.22919 + 0.2122975645015D-04 0.2173507709867D-04 0.2225242316243D-04 0.2278208072829D-04 + 0.2332434268594D-04 0.2387950888954D-04 0.2444788632325D-04 0.2502978927059D-04 + 0.2562553948791D-04 0.2623546638192D-04 0.2685990719144D-04 0.2749920717353D-04 + 0.2815371979393D-04 0.2882380692207D-04 0.2950983903075D-04 0.3021219540050D-04 + 0.3093126432877D-04 0.3166744334418D-04 0.3242113942573D-04 0.3319276922733D-04 + 0.3398275930755D-04 0.3479154636487D-04 0.3561957747857D-04 0.3646731035519D-04 + 0.3733521358096D-04 0.3822376688016D-04 0.3913346137963D-04 0.4006479987955D-04 + 0.4101829713060D-04 0.4199448011777D-04 0.4299388835081D-04 0.4401707416166D-04 + 0.4506460300883D-04 0.4613705378910D-04 0.4723501915650D-04 0.4835910584899D-04 + 0.4950993502270D-04 0.5068814259429D-04 0.5189437959126D-04 0.5312931251066D-04 + 0.5439362368626D-04 0.5568801166444D-04 0.5701319158897D-04 0.5836989559491D-04 + 0.5975887321186D-04 0.6118089177673D-04 0.6263673685632D-04 0.6412721267990D-04 + 0.6565314258201D-04 0.6721536945580D-04 0.6881475621705D-04 0.7045218627922D-04 + 0.7212856403973D-04 0.7384481537777D-04 0.7560188816385D-04 0.7740075278149D-04 + 0.7924240266119D-04 0.8112785482706D-04 0.8305815045642D-04 0.8503435545263D-04 + 0.8705756103141D-04 0.8912888432116D-04 0.9124946897738D-04 0.9342048581165D-04 + 0.9564313343555D-04 0.9791863891974D-04 0.1002482584687D-03 0.1026332781112D-03 + 0.1050750144077D-03 0.1075748151735D-03 0.1101340602203D-03 0.1127541621137D-03 + 0.1154365669501D-03 0.1181827551510D-03 0.1209942422769D-03 0.1238725798590D-03 + 0.1268193562527D-03 0.1298361975089D-03 0.1329247682680D-03 0.1360867726735D-03 + 0.1393239553083D-03 0.1426381021518D-03 0.1460310415612D-03 0.1495046452749D-03 + 0.1530608294397D-03 0.1567015556625D-03 0.1604288320871D-03 0.1642447144955D-03 + 0.1681513074364D-03 0.1721507653792D-03 0.1762452938963D-03 0.1804371508722D-03 + 0.1847286477421D-03 0.1891221507592D-03 0.1936200822920D-03 0.1982249221522D-03 + 0.2029392089542D-03 0.2077655415060D-03 0.2127065802334D-03 0.2177650486382D-03 + 0.2229437347894D-03 0.2282454928513D-03 0.2336732446459D-03 0.2392299812538D-03 + 0.2449187646513D-03 0.2507427293871D-03 0.2567050842979D-03 0.2628091142650D-03 + 0.2690581820118D-03 0.2754557299435D-03 0.2820052820308D-03 0.2887104457371D-03 + 0.2955749139921D-03 0.3026024672103D-03 0.3097969753590D-03 0.3171624000731D-03 + 0.3247027968207D-03 0.3324223171196D-03 0.3403252108055D-03 0.3484158283536D-03 + 0.3566986232552D-03 0.3651781544500D-03 0.3738590888149D-03 0.3827462037126D-03 + 0.3918443895988D-03 0.4011586526914D-03 0.4106941177020D-03 0.4204560306321D-03 + 0.4304497616342D-03 0.4406808079408D-03 0.4511547968612D-03 0.4618774888502D-03 + 0.4728547806468D-03 0.4840927084883D-03 0.4955974513988D-03 0.5073753345551D-03 + 0.5194328327314D-03 0.5317765738249D-03 0.5444133424641D-03 0.5573500837015D-03 + 0.5705939067925D-03 0.5841520890639D-03 0.5980320798714D-03 0.6122415046513D-03 + 0.6267881690659D-03 0.6416800632466D-03 0.6569253661363D-03 0.6725324499326D-03 + 0.6885098846360D-03 0.7048664427037D-03 0.7216111038125D-03 0.7387530597330D-03 + 0.7563017193176D-03 0.7742667136049D-03 0.7926579010441D-03 0.8114853728404D-03 + 0.8307594584254D-03 0.8504907310562D-03 0.8706900135433D-03 0.8913683841142D-03 + 0.9125371824119D-03 0.9342080156346D-03 0.9563927648179D-03 0.9791035912634D-03 + 0.1002352943117D-02 0.1026153562102D-02 0.1050518490405D-02 0.1075461077728D-02 + 0.1100994988496D-02 0.1127134209246D-02 0.1153893056171D-02 0.1181286182852D-02 + 0.1209328588167D-02 0.1238035624379D-02 0.1267423005415D-02 0.1297506815344D-02 + 0.1328303517037D-02 0.1359829961041D-02 0.1392103394654D-02 0.1425141471212D-02 + 0.1458962259585D-02 0.1493584253904D-02 0.1529026383504D-02 0.1565308023106D-02 + 0.1602449003221D-02 0.1640469620811D-02 0.1679390650189D-02 0.1719233354165D-02 + 0.1760019495464D-02 0.1801771348394D-02 0.1844511710794D-02 0.1888263916250D-02 + 0.1933051846599D-02 0.1978899944720D-02 0.2025833227614D-02 0.2073877299798D-02 + 0.2123058366995D-02 0.2173403250151D-02 0.2224939399761D-02 0.2277694910540D-02 + 0.2331698536421D-02 0.2386979705903D-02 0.2443568537747D-02 0.2501495857040D-02 + 0.2560793211623D-02 0.2621492888896D-02 0.2683627933011D-02 0.2747232162458D-02 + 0.2812340188056D-02 0.2878987431352D-02 0.2947210143447D-02 0.3017045424251D-02 + 0.3088531242177D-02 0.3161706454285D-02 0.3236610826892D-02 0.3313285056646D-02 + 0.3391770792086D-02 0.3472110655691D-02 0.3554348266436D-02 0.3638528262858D-02 + 0.3724696326649D-02 0.3812899206788D-02 0.3903184744224D-02 0.3995601897109D-02 + 0.4090200766624D-02 0.4187032623373D-02 0.4286149934389D-02 0.4387606390746D-02 + 0.4491456935804D-02 0.4597757794082D-02 0.4706566500803D-02 0.4817941932088D-02 + 0.4931944335851D-02 0.5048635363379D-02 0.5168078101634D-02 0.5290337106279D-02 + 0.5415478435454D-02 0.5543569684307D-02 0.5674680020311D-02 0.5808880219367D-02 + 0.5946242702730D-02 0.6086841574754D-02 0.6230752661494D-02 0.6378053550168D-02 + 0.6528823629508D-02 0.6683144131013D-02 0.6841098171130D-02 0.7002770794372D-02 + 0.7168249017405D-02 0.7337621874121D-02 0.7510980461712D-02 0.7688417987773D-02 + 0.7870029818463D-02 0.8055913527720D-02 0.8246168947593D-02 0.8440898219673D-02 + 0.8640205847678D-02 0.8844198751201D-02 0.9052986320644D-02 0.9266680473381D-02 + 0.9485395711148D-02 0.9709249178711D-02 0.9938360723829D-02 0.1017285295853D-01 + 0.1041285132175D-01 0.1065848414335D-01 0.1090988270951D-01 0.1116718132961D-01 + 0.1143051740455D-01 0.1170003149653D-01 0.1197586740047D-01 0.1225817221684D-01 + 0.1254709642620D-01 0.1284279396532D-01 0.1314542230495D-01 0.1345514252930D-01 + 0.1377211941725D-01 0.1409652152530D-01 0.1442852127232D-01 0.1476829502620D-01 + 0.1511602319226D-01 0.1547189030365D-01 0.1583608511371D-01 0.1620880069022D-01 + 0.1659023451183D-01 0.1698058856639D-01 0.1738006945154D-01 0.1778888847734D-01 + 0.1820726177118D-01 0.1863541038486D-01 0.1907356040402D-01 0.1952194305980D-01 + 0.1998079484302D-01 0.2045035762063D-01 0.2093087875471D-01 0.2142261122400D-01 + 0.2192581374792D-01 0.2244075091329D-01 0.2296769330365D-01 0.2350691763133D-01 + 0.2405870687229D-01 0.2462335040374D-01 0.2520114414469D-01 0.2579239069942D-01 + 0.2639739950387D-01 0.2701648697516D-01 0.2764997666416D-01 0.2829819941123D-01 + 0.2896149350513D-01 0.2964020484531D-01 0.3033468710740D-01 0.3104530191220D-01 + 0.3177241899806D-01 0.3251641639684D-01 0.3327768061342D-01 0.3405660680881D-01 + 0.3485359898710D-01 0.3566907018606D-01 0.3650344267166D-01 0.3735714813647D-01 + 0.3823062790211D-01 0.3912433312562D-01 0.4003872501011D-01 0.4097427501948D-01 + 0.4193146509749D-01 0.4291078789111D-01 0.4391274697832D-01 0.4493785710035D-01 + 0.4598664439858D-01 0.4705964665594D-01 0.4815741354312D-01 0.4928050686955D-01 + 0.5042950083923D-01 0.5160498231153D-01 0.5280755106696D-01 0.5403782007813D-01 + 0.5529641578584D-01 0.5658397838041D-01 0.5790116208843D-01 0.5924863546488D-01 + 0.6062708169076D-01 0.6203719887636D-01 0.6347970037015D-01 0.6495531507346D-01 + 0.6646478776099D-01 0.6800887940725D-01 0.6958836751900D-01 0.7120404647380D-01 + 0.7285672786470D-01 0.7454724085125D-01 0.7627643251682D-01 0.7804516823229D-01 + 0.7985433202641D-01 0.8170482696258D-01 0.8359757552242D-01 0.8553351999606D-01 + 0.8751362287932D-01 0.8953886727772D-01 0.9161025731761D-01 0.9372881856432D-01 + 0.9589559844749D-01 0.9811166669365D-01 0.1003781157661D+00 0.1026960613124D+00 + 0.1050666426187D+00 0.1074910230727D+00 0.1099703906329D+00 0.1125059583070D+00 + 0.1150989646366D+00 0.1177506741909D+00 0.1204623780676D+00 0.1232353944021D+00 + 0.1260710688845D+00 0.1289707752849D+00 0.1319359159864D+00 0.1349679225270D+00 + 0.1380682561490D+00 0.1412384083570D+00 0.1444799014844D+00 0.1477942892678D+00 + 0.1511831574303D+00 0.1546481242725D+00 0.1581908412731D+00 0.1618129936965D+00 + 0.1655163012104D+00 0.1693025185104D+00 0.1731734359544D+00 0.1771308802047D+00 + 0.1811767148790D+00 0.1853128412094D+00 0.1895411987104D+00 0.1938637658552D+00 + 0.1982825607598D+00 0.2027996418767D+00 0.2074171086957D+00 0.2121371024533D+00 + 0.2169618068509D+00 0.2218934487801D+00 0.2269342990569D+00 0.2320866731634D+00 + 0.2373529319974D+00 0.2427354826295D+00 0.2482367790682D+00 0.2538593230323D+00 + 0.2596056647304D+00 0.2654784036474D+00 0.2714801893389D+00 0.2776137222308D+00 + 0.2838817544268D+00 0.2902870905217D+00 0.2968325884206D+00 0.3035211601645D+00 + 0.3103557727607D+00 0.3173394490192D+00 0.3244752683937D+00 0.3317663678273D+00 + 0.3392159426028D+00 0.3468272471962D+00 0.3546035961349D+00 0.3625483648577D+00 + 0.3706649905790D+00 0.3789569731540D+00 0.3874278759464D+00 0.3960813266976D+00 + 0.4049210183955D+00 0.4139507101454D+00 0.4231742280388D+00 0.4325954660221D+00 + 0.4422183867640D+00 0.4520470225197D+00 0.4620854759931D+00 0.4723379211946D+00 + 0.4828086042953D+00 0.4935018444749D+00 0.5044220347646D+00 0.5155736428822D+00 + 0.5269612120602D+00 0.5385893618646D+00 0.5504627890040D+00 0.5625862681281D+00 + 0.5749646526146D+00 0.5876028753427D+00 0.6005059494532D+00 0.6136789690924D+00 + 0.6271271101407D+00 0.6408556309226D+00 0.6548698728981D+00 0.6691752613333D+00 + 0.6837773059493D+00 0.6986816015479D+00 0.7138938286123D+00 0.7294197538810D+00 + 0.7452652308942D+00 0.7614362005101D+00 0.7779386913894D+00 0.7947788204470D+00 + 0.8119627932680D+00 0.8294969044866D+00 0.8473875381261D+00 0.8656411678975D+00 + 0.8842643574549D+00 0.9032637606047D+00 0.9226461214683D+00 0.9424182745935D+00 + 0.9625871450140D+00 0.9831597482541D+00 0.1004143190275D+01 0.1025544667362D+01 + 0.1047371465949D+01 0.1069630962376D+01 0.1092330622582D+01 0.1115478001718D+01 + 0.1139080743699D+01 0.1163146580667D+01 0.1187683332379D+01 0.1212698905512D+01 + 0.1238201292877D+01 0.1264198572546D+01 0.1290698906886D+01 0.1317710541494D+01 + 0.1345241804028D+01 0.1373301102944D+01 0.1401896926110D+01 0.1431037839321D+01 + 0.1460732484690D+01 0.1490989578921D+01 0.1521817911461D+01 0.1553226342519D+01 + 0.1585223800953D+01 0.1617819282025D+01 0.1651021845012D+01 0.1684840610666D+01 + 0.1719284758534D+01 0.1754363524114D+01 0.1790086195862D+01 0.1826462112019D+01 + 0.1863500657290D+01 0.1901211259327D+01 0.1939603385053D+01 0.1978686536792D+01 + 0.2018470248210D+01 0.2058964080068D+01 0.2100177615772D+01 0.2142120456722D+01 + 0.2184802217451D+01 0.2228232520549D+01 0.2272420991371D+01 0.2317377252521D+01 + 0.2363110918097D+01 0.2409631587718D+01 0.2456948840298D+01 0.2505072227579D+01 + 0.2554011267414D+01 0.2603775436800D+01 0.2654374164640D+01 0.2705816824249D+01 + 0.2758112725590D+01 0.2811271107225D+01 0.2865301128002D+01 0.2920211858443D+01 + 0.2976012271854D+01 0.3032711235135D+01 0.3090317499294D+01 0.3148839689666D+01 + 0.3208286295814D+01 0.3268665661132D+01 0.3329985972130D+01 0.3392255247403D+01 + 0.3455481326284D+01 0.3519671857166D+01 0.3584834285516D+01 0.3650975841540D+01 + 0.3718103527540D+01 0.3786224104928D+01 0.3855344080910D+01 0.3925469694842D+01 + 0.3996606904248D+01 0.4068761370505D+01 0.4141938444201D+01 0.4216143150155D+01 + 0.4291380172106D+01 0.4367653837082D+01 0.4444968099432D+01 0.4523326524540D+01 + 0.4602732272224D+01 0.4683188079814D+01 0.4764696244923D+01 0.4847258607911D+01 + 0.4930876534058D+01 0.5015550895439D+01 0.5101282052526D+01 0.5188069835504D+01 + 0.5275913525340D+01 0.5364811834582D+01 0.5454762887935D+01 0.5545764202593D+01 + 0.5637812668364D+01 0.5730904527600D+01 0.5825035354930D+01 0.5920200036841D+01 + 0.6016392751096D+01 0.6113606946037D+01 0.6211835319763D+01 0.6311069799237D+01 + 0.6411301519318D+01 0.6512520801757D+01 0.6614717134178D+01 0.6717879149076D+01 + 0.6821994602856D+01 0.6927050354936D+01 0.7033032346971D+01 0.7139925582197D+01 + 0.7247714104955D+01 0.7356380980422D+01 0.7465908274590D+01 0.7576277034522D+01 + 0.7687467268944D+01 0.7799457929201D+01 0.7912226890625D+01 0.8025750934367D+01 + 0.8140005729731D+01 0.8254965817070D+01 0.8370604591283D+01 0.8486894285977D+01 + 0.8603805958343D+01 0.8721309474805D+01 0.8839373497487D+01 0.8957965471583D+01 + 0.9077051613664D+01 0.9196596901005D+01 0.9316565061973D+01 0.9436918567578D+01 + 0.9557618624205D+01 0.9678625167647D+01 0.9799896858462D+01 0.9921391078761D+01 + 0.1004306393048D+02 0.1016487023519D+02 0.1028676353561D+02 0.1040869609872D+02 + 0.1053061892078D+02 0.1065248173410D+02 0.1077423301584D+02 0.1089581999877D+02 + 0.1101718868413D+02 0.1113828385666D+02 0.1125904910191D+02 0.1137942682584D+02 + 0.1149935827678D+02 0.1161878356999D+02 0.1173764171462D+02 0.1185587064341D+02 + 0.1197340724503D+02 0.1209018739920D+02 0.1220614601465D+02 0.1232121706995D+02 + 0.1243533365740D+02 0.1254842802982D+02 0.1266043165050D+02 0.1277127524634D+02 + 0.1288088886404D+02 0.1298920192971D+02 0.1309614331160D+02 0.1320164138629D+02 + 0.1330562410812D+02 0.1340801908212D+02 0.1350875364026D+02 0.1360775492116D+02 + 0.1370494995324D+02 0.1380026574132D+02 0.1389362935662D+02 0.1398496803019D+02 + 0.1407420924981D+02 0.1416128086012D+02 0.1424611116627D+02 0.1432862904069D+02 + 0.1440876403324D+02 0.1448644648440D+02 0.1456160764164D+02 0.1463417977876D+02 + 0.1470409631813D+02 0.1477129195572D+02 0.1483570278883D+02 0.1489726644633D+02 + 0.1495592222127D+02 0.1501161120574D+02 0.1506427642781D+02 0.1511386299027D+02 + 0.1516031821110D+02 0.1520359176531D+02 0.1524363582812D+02 0.1528040521898D+02 + 0.1531385754641D+02 0.1534395335325D+02 0.1537065626208D+02 0.1539393312048D+02 + 0.1541375414585D+02 0.1543009306950D+02 0.1544292727951D+02 0.1545223796216D+02 + 0.1545801024155D+02 0.1546023331695D+02 0.1545890059744D+02 0.1545400983365D+02 + 0.1544556324596D+02 0.1543356764880D+02 0.1541803457065D+02 0.1539898036925D+02 + 0.1537642634154D+02 0.1535039882796D+02 0.1532092931044D+02 0.1528805450387D+02 + 0.1525181644030D+02 0.1521226254557D+02 0.1516944570778D+02 0.1512342433713D+02 + 0.1507426241669D+02 0.1502202954350D+02 0.1496680095964D+02 0.1490865757272D+02 + 0.1484768596530D+02 0.1478397839284D+02 0.1471763276969D+02 0.1464875264266D+02 + 0.1457744715182D+02 0.1450383097801D+02 0.1442802427679D+02 0.1435015259838D+02 + 0.1427034679327D+02 0.1418874290321D+02 0.1410548203722D+02 0.1402071023247D+02 + 0.1393457829969D+02 0.1384724165293D+02 0.1375886012364D+02 0.1366959775879D+02 + 0.1357962260304D+02 0.1348910646488D+02 0.1339822466686D+02 0.1330715577980D+02 + 0.1321608134121D+02 0.1312518555808D+02 0.1303465499419D+02 0.1294467824221D+02 + 0.1285544558101D+02 0.1276714861841D+02 0.1267997991994D+02 0.1259413262403D+02 + 0.1250980004419D+02 0.1242717525885D+02 0.1234645068948D+02 0.1226781766776D+02 + 0.1219146599257D+02 0.1211758347770D+02 0.1204635549121D+02 0.1197796448732D+02 + 0.1191258953197D+02 0.1185040582321D+02 0.1179158420730D+02 0.1173629069208D+02 + 0.1168468595856D+02 0.1163692487226D+02 0.1159315599549D+02 0.1155352110209D+02 + 0.1151815469598D+02 0.1148718353503D+02 0.1146072616178D+02 0.1143889244247D+02 + 0.1142178311602D+02 0.1140948935454D+02 0.1140209233686D+02 0.1139966283678D+02 + 0.1140226082774D+02 0.1140993510519D+02 0.1142272292875D+02 0.1144064968524D+02 + 0.1146372857460D+02 0.1149196031991D+02 0.1152533290326D+02 0.1156382132880D+02 + 0.1160738741454D+02 0.1165597961412D+02 0.1170953287012D+02 0.1176796849989D+02 + 0.1183119411535D+02 0.1189910357777D+02 0.1197157698856D+02 0.1204848071701D+02 + 0.1212966746596D+02 0.1221497637600D+02 0.1230423316888D+02 0.1239725033077D+02 + 0.1249382733567D+02 0.1259375090926D+02 0.1269679533346D+02 0.1280272279167D+02 + 0.1291128375448D+02 0.1302221740584D+02 0.1313525210912D+02 0.1325010591253D+02 + 0.1336648709337D+02 0.1348409474012D+02 0.1360261937149D+02 0.1372174359123D+02 + 0.1384114277758D+02 0.1396048580566D+02 0.1407943580155D+02 0.1419765092608D+02 + 0.1431478518661D+02 0.1443048927478D+02 0.1454441142812D+02 0.1465619831308D+02 + 0.1476549592746D+02 0.1487195051928D+02 0.1497520951989D+02 0.1507492248828D+02 + 0.1517074206398D+02 0.1526232492551D+02 0.1534933275145D+02 0.1543143318112D+02 + 0.1550830077157D+02 0.1557961794797D+02 0.1564507594396D+02 0.1570437572881D+02 + 0.1575722891823D+02 0.1580335866539D+02 0.1584250052899D+02 0.1587440331524D+02 + 0.1589882989033D+02 0.1591555796049D+02 0.1592438081630D+02 0.1592510803844D+02 + 0.1591756616179D+02 0.1590159929512D+02 0.1587706969359D+02 0.1584385828154D+02 + 0.1580186512290D+02 0.1575100983720D+02 0.1569123195871D+02 0.1562249123695D+02 + 0.1554476787665D+02 0.1545806271560D+02 0.1536239733893D+02 0.1525781412875D+02 + 0.1514437624809D+02 0.1502216755847D+02 0.1489129247063D+02 0.1475187572813D+02 + 0.1460406212401D+02 0.1444801615062D+02 0.1428392158332D+02 0.1411198099888D+02 + 0.1393241522964D+02 0.1374546275490D+02 0.1355137903119D+02 0.1335043576333D+02 + 0.1314292011864D+02 0.1292913388664D+02 0.1270939258714D+02 0.1248402452972D+02 + 0.1225336982785D+02 0.1201777937125D+02 0.1177761376017D+02 0.1153324220569D+02 + 0.1128504140014D+02 0.1103339436205D+02 0.1077868926027D+02 0.1052131822179D+02 + 0.1026167612835D+02 0.1000015940663D+02 0.9737164817090D+01 0.9473088246666D+01 + 0.9208323510392D+01 0.8943261167138D+01 0.8678287354606D+01 0.8413782648689D+01 + 0.8150120952198D+01 0.7887668417870D+01 0.7626782410424D+01 0.7367810512255D+01 + 0.7111089577147D+01 0.6856944836175D+01 0.6605689059620D+01 0.6357621778576D+01 + 0.6113028569417D+01 0.5872180404071D+01 0.5635333068605D+01 0.5402726652271D+01 + 0.5174585108689D+01 0.4951115890458D+01 0.4732509658013D+01 0.4518940063093D+01 + 0.4310563606744D+01 0.4107519571314D+01 0.3909930025455D+01 0.3717899900701D+01 + 0.3531517137795D+01 0.3350852900521D+01 0.3175961854415D+01 0.3006882507418D+01 + 0.2843637609166D+01 0.2686234605393D+01 0.2534666143602D+01 0.2388910626020D+01 + 0.2248932805599D+01 0.2114684420764D+01 0.1986104864410D+01 0.1863121882663D+01 + 0.1745652298807D+01 0.1633602757816D+01 0.1526870486911D+01 0.1425344067651D+01 + 0.1328904215091D+01 0.1237424559686D+01 0.1150772427713D+01 0.1068809616148D+01 + 0.9913931580887D+00 0.9183760750247D+00 0.8496081124357D+00 0.7849364554513D+00 + 0.7242064215293D+00 0.6672621273712D+00 0.6139471275574D+00 0.5641050226618D+00 + 0.5175800348878D+00 0.4742175495586D+00 0.4338646210828D+00 0.3963704423129D+00 + 0.3615867764997D+00 0.3293683513354D+00 0.2995732148544D+00 0.2720630532321D+00 + 0.2467034707815D+00 0.2233642326902D+00 0.2019194712763D+00 0.1822478567499D+00 + 0.1642327336682D+00 0.1477622244444D+00 0.1327293014336D+00 0.1190318292464D+00 + 0.1065725790655D+00 0.9525921682581D-01 0.8500426719540D-01 0.7572505534570D-01 + 0.6734362852856D-01 0.5978665949119D-01 0.5298533375213D-01 0.4687522273735D-01 + 0.4139614473480D-01 0.3649201557103D-01 0.3211069084453D-01 0.2820380147099D-01 + 0.2472658420543D-01 0.2163770870794D-01 0.1889910261478D-01 0.1647577596641D-01 + 0.1433564623066D-01 0.1244936504301D-01 0.1079014767040D-01 0.9333606088531D-02 + 0.8057586449521D-02 0.6942011605538D-02 0.5968729247262D-02 0.5121366113861D-02 + 0.4385188634413D-02 0.3746970269980D-02 0.3194865741265D-02 0.2718292249293D-02 + 0.2307817726031D-02 0.1955056088404D-02 0.1652569412799D-02 0.1393776897745D-02 + 0.1172870439853D-02 0.9847366120634D-03 0.8248848034661D-03 0.6893812560569D-03 + 0.5747887154298D-03 0.4781113990982D-03 0.3967449774979D-03 0.3284312582634D-03 + 0.2712172636576D-03 0.2234183935981D-03 0.1835853721449D-03 0.1504746831443D-03 + 0.1230222105786D-03 0.1003198106540D-03 0.8159455542106D-04 0.6619040144209D-04 + 0.5355205138722D-04 0.4321079120846D-04 0.3477210045803D-04 0.2790484818898D-04 + 0.2233190152246D-04 0.1782198824118D-04 0.1418266855132D-04 0.1125428434880D-04 + 0.8904766856498D-05 0.7025195313453D-05 0.5526010459652D-05 0.4333796852085D-05 + 0.3388557563637D-05 0.2641413563333D-05 0.2052668070841D-05 0.1590183444862D-05 + 0.1228024735392D-05 0.9453299398051D-06 0.7253722919424D-06 0.5547846237125D-06 + 0.4229200131023D-06 0.3213266143727D-06 0.2433177983142D-06 0.1836215545666D-06 + 0.1380955642703D-06 0.1034964778941D-06 0.7729376586493D-07 0.5752008209307D-07 + 0.4265142355148D-07 0.3151151106808D-07 0.2319578320089D-07 0.1701120974173D-07 + 0.1242881489534D-07 0.9046371073667D-08 0.6559198960071D-08 0.4737402476978D-08 + 0.3408191153158D-08 0.2442208093542D-08 0.1742998768590D-08 0.1238932286038D-08 + 0.8770296193333D-09 0.6182683290111D-09 0.4340255982013D-09 0.3033950772413D-09 + 0.2111715589818D-09 0.1463438404983D-09 0.1009726185101D-09 0.6935859066118D-10 + 0.4742849271888D-10 0.3228488955626D-10 0.2187547853929D-10 0.1475212866899D-10 + 0.9901881750809D-11 0.6613860882122D-11 0.4396644350124D-11 0.2908650000322D-11 + 0.1914873227728D-11 0.1254415200484D-11 0.8176535094916D-12 0.5302708391854D-12 + 0.3421370551355D-12 0.2196087836422D-12 0.1402231518601D-12 0.8906014768602D-13 + LSMS: xx z= 26. xvalws= 2.77074 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728402963D+02-0.5199725117641D+02-0.5199721792578D+02-0.5199718427293D+02 +-0.5199715021300D+02-0.5199711574107D+02-0.5199708085214D+02-0.5199704554119D+02 +-0.5199700980309D+02-0.5199697363268D+02-0.5199693702474D+02-0.5199689997397D+02 +-0.5199686247500D+02-0.5199682452243D+02-0.5199678611076D+02-0.5199674723444D+02 +-0.5199670788785D+02-0.5199666806529D+02-0.5199662776101D+02-0.5199658696918D+02 +-0.5199654568390D+02-0.5199650389922D+02-0.5199646160907D+02-0.5199641880734D+02 +-0.5199637548785D+02-0.5199633164434D+02-0.5199628727046D+02-0.5199624235979D+02 +-0.5199619690585D+02-0.5199615090205D+02-0.5199610434176D+02-0.5199605721822D+02 +-0.5199600952464D+02-0.5199596125410D+02-0.5199591239964D+02-0.5199586295419D+02 +-0.5199581291060D+02-0.5199576226162D+02-0.5199571099994D+02-0.5199565911815D+02 +-0.5199560660874D+02-0.5199555346411D+02-0.5199549967658D+02-0.5199544523837D+02 +-0.5199539014162D+02-0.5199533437834D+02-0.5199527794048D+02-0.5199522081989D+02 +-0.5199516300828D+02-0.5199510449731D+02-0.5199504527851D+02-0.5199498534331D+02 +-0.5199492468306D+02-0.5199486328897D+02-0.5199480115217D+02-0.5199473826367D+02 +-0.5199467461436D+02-0.5199461019507D+02-0.5199454499646D+02-0.5199447900910D+02 +-0.5199441222344D+02-0.5199434462984D+02-0.5199427621849D+02-0.5199420697954D+02 +-0.5199413690295D+02-0.5199406597858D+02-0.5199399419618D+02-0.5199392154537D+02 +-0.5199384801563D+02-0.5199377359634D+02-0.5199369827672D+02-0.5199362204589D+02 +-0.5199354489281D+02-0.5199346680633D+02-0.5199338777515D+02-0.5199330778784D+02 +-0.5199322683282D+02-0.5199314489839D+02-0.5199306197270D+02-0.5199297804374D+02 +-0.5199289309939D+02-0.5199280712733D+02-0.5199272011516D+02-0.5199263205027D+02 +-0.5199254291992D+02-0.5199245271123D+02-0.5199236141114D+02-0.5199226900644D+02 +-0.5199217548376D+02-0.5199208082958D+02-0.5199198503019D+02-0.5199188807175D+02 +-0.5199178994021D+02-0.5199169062139D+02-0.5199159010092D+02-0.5199148836424D+02 +-0.5199138539665D+02-0.5199128118323D+02-0.5199117570892D+02-0.5199106895845D+02 +-0.5199096091638D+02-0.5199085156707D+02-0.5199074089471D+02-0.5199062888326D+02 +-0.5199051551654D+02-0.5199040077813D+02-0.5199028465143D+02-0.5199016711964D+02 +-0.5199004816574D+02-0.5198992777253D+02-0.5198980592257D+02-0.5198968259824D+02 +-0.5198955778170D+02-0.5198943145487D+02-0.5198930359948D+02-0.5198917419701D+02 +-0.5198904322875D+02-0.5198891067574D+02-0.5198877651879D+02-0.5198864073848D+02 +-0.5198850331517D+02-0.5198836422896D+02-0.5198822345972D+02-0.5198808098707D+02 +-0.5198793679039D+02-0.5198779084882D+02-0.5198764314123D+02-0.5198749364622D+02 +-0.5198734234217D+02-0.5198718920716D+02-0.5198703421905D+02-0.5198687735537D+02 +-0.5198671859343D+02-0.5198655791024D+02-0.5198639528254D+02-0.5198623068679D+02 +-0.5198606409915D+02-0.5198589549550D+02-0.5198572485143D+02-0.5198555214224D+02 +-0.5198537734293D+02-0.5198520042816D+02-0.5198502137235D+02-0.5198484014954D+02 +-0.5198465673351D+02-0.5198447109769D+02-0.5198428321519D+02-0.5198409305883D+02 +-0.5198390060104D+02-0.5198370581396D+02-0.5198350866939D+02-0.5198330913876D+02 +-0.5198310719319D+02-0.5198290280341D+02-0.5198269593983D+02-0.5198248657249D+02 +-0.5198227467106D+02-0.5198206020484D+02-0.5198184314277D+02-0.5198162345340D+02 +-0.5198140110492D+02-0.5198117606510D+02-0.5198094830136D+02-0.5198071778068D+02 +-0.5198048446968D+02-0.5198024833454D+02-0.5198000934107D+02-0.5197976745462D+02 +-0.5197952264015D+02-0.5197927486220D+02-0.5197902408485D+02-0.5197877027176D+02 +-0.5197851338615D+02-0.5197825339081D+02-0.5197799024804D+02-0.5197772391971D+02 +-0.5197745436723D+02-0.5197718155151D+02-0.5197690543304D+02-0.5197662597177D+02 +-0.5197634312720D+02-0.5197605685833D+02-0.5197576712367D+02-0.5197547388122D+02 +-0.5197517708846D+02-0.5197487670236D+02-0.5197457267938D+02-0.5197426497542D+02 +-0.5197395354589D+02-0.5197363834563D+02-0.5197331932893D+02-0.5197299644952D+02 +-0.5197266966059D+02-0.5197233891476D+02-0.5197200416404D+02-0.5197166535990D+02 +-0.5197132245319D+02-0.5197097539418D+02-0.5197062413252D+02-0.5197026861727D+02 +-0.5196990879687D+02-0.5196954461909D+02-0.5196917603112D+02-0.5196880297948D+02 +-0.5196842541005D+02-0.5196804326804D+02-0.5196765649801D+02-0.5196726504383D+02 +-0.5196686884871D+02-0.5196646785514D+02-0.5196606200494D+02-0.5196565123919D+02 +-0.5196523549829D+02-0.5196481472189D+02-0.5196438884890D+02-0.5196395781753D+02 +-0.5196352156518D+02-0.5196308002855D+02-0.5196263314350D+02-0.5196218084518D+02 +-0.5196172306789D+02-0.5196125974518D+02-0.5196079080977D+02-0.5196031619354D+02 +-0.5195983582758D+02-0.5195934964214D+02-0.5195885756657D+02-0.5195835952942D+02 +-0.5195785545834D+02-0.5195734528011D+02-0.5195682892060D+02-0.5195630630481D+02 +-0.5195577735679D+02-0.5195524199969D+02-0.5195470015573D+02-0.5195415174616D+02 +-0.5195359669127D+02-0.5195303491041D+02-0.5195246632192D+02-0.5195189084316D+02 +-0.5195130839046D+02-0.5195071887917D+02-0.5195012222358D+02-0.5194951833693D+02 +-0.5194890713143D+02-0.5194828851819D+02-0.5194766240726D+02-0.5194702870759D+02 +-0.5194638732701D+02-0.5194573817222D+02-0.5194508114882D+02-0.5194441616121D+02 +-0.5194374311266D+02-0.5194306190525D+02-0.5194237243986D+02-0.5194167461616D+02 +-0.5194096833262D+02-0.5194025348643D+02-0.5193952997356D+02-0.5193879768871D+02 +-0.5193805652527D+02-0.5193730637535D+02-0.5193654712973D+02-0.5193577867788D+02 +-0.5193500090790D+02-0.5193421370652D+02-0.5193341695911D+02-0.5193261054963D+02 +-0.5193179436061D+02-0.5193096827316D+02-0.5193013216694D+02-0.5192928592013D+02 +-0.5192842940944D+02-0.5192756251004D+02-0.5192668509561D+02-0.5192579703828D+02 +-0.5192489820860D+02-0.5192398847556D+02-0.5192306770652D+02-0.5192213576726D+02 +-0.5192119252189D+02-0.5192023783287D+02-0.5191927156096D+02-0.5191829356524D+02 +-0.5191730370307D+02-0.5191630183005D+02-0.5191528780001D+02-0.5191426146503D+02 +-0.5191322267532D+02-0.5191217127930D+02-0.5191110712354D+02-0.5191003005272D+02 +-0.5190893990959D+02-0.5190783653503D+02-0.5190671976795D+02-0.5190558944528D+02 +-0.5190444540195D+02-0.5190328747089D+02-0.5190211548297D+02-0.5190092926700D+02 +-0.5189972864968D+02-0.5189851345560D+02-0.5189728350719D+02-0.5189603862472D+02 +-0.5189477862625D+02-0.5189350332759D+02-0.5189221254235D+02-0.5189090608179D+02 +-0.5188958375491D+02-0.5188824536834D+02-0.5188689072635D+02-0.5188551963080D+02 +-0.5188413188114D+02-0.5188272727435D+02-0.5188130560492D+02-0.5187986666482D+02 +-0.5187841024347D+02-0.5187693612772D+02-0.5187544410178D+02-0.5187393394724D+02 +-0.5187240544300D+02-0.5187085836524D+02-0.5186929248740D+02-0.5186770758014D+02 +-0.5186610341132D+02-0.5186447974591D+02-0.5186283634606D+02-0.5186117297093D+02 +-0.5185948937678D+02-0.5185778531685D+02-0.5185606054135D+02-0.5185431479744D+02 +-0.5185254782916D+02-0.5185075937741D+02-0.5184894917991D+02-0.5184711697117D+02 +-0.5184526248242D+02-0.5184338544160D+02-0.5184148557330D+02-0.5183956259875D+02 +-0.5183761623572D+02-0.5183564619854D+02-0.5183365219802D+02-0.5183163394142D+02 +-0.5182959113240D+02-0.5182752347098D+02-0.5182543065350D+02-0.5182331237255D+02 +-0.5182116831697D+02-0.5181899817174D+02-0.5181680161800D+02-0.5181457833297D+02 +-0.5181232798987D+02-0.5181005025795D+02-0.5180774480235D+02-0.5180541128413D+02 +-0.5180304936016D+02-0.5180065868310D+02-0.5179823890134D+02-0.5179578965895D+02 +-0.5179331059564D+02-0.5179080134665D+02-0.5178826154277D+02-0.5178569081025D+02 +-0.5178308877073D+02-0.5178045504121D+02-0.5177778923399D+02-0.5177509095659D+02 +-0.5177235981171D+02-0.5176959539717D+02-0.5176679730585D+02-0.5176396512563D+02 +-0.5176109843930D+02-0.5175819682457D+02-0.5175525985390D+02-0.5175228709457D+02 +-0.5174927810849D+02-0.5174623245221D+02-0.5174314967682D+02-0.5174002932792D+02 +-0.5173687094551D+02-0.5173367406395D+02-0.5173043821187D+02-0.5172716291215D+02 +-0.5172384768177D+02-0.5172049203182D+02-0.5171709546736D+02-0.5171365748739D+02 +-0.5171017758479D+02-0.5170665524617D+02-0.5170308995189D+02-0.5169948117592D+02 +-0.5169582838578D+02-0.5169213104249D+02-0.5168838860043D+02-0.5168460050732D+02 +-0.5168076620412D+02-0.5167688512494D+02-0.5167295669696D+02-0.5166898034036D+02 +-0.5166495546822D+02-0.5166088148646D+02-0.5165675779371D+02-0.5165258378128D+02 +-0.5164835883303D+02-0.5164408232529D+02-0.5163975362681D+02-0.5163537209858D+02 +-0.5163093709386D+02-0.5162644795799D+02-0.5162190402831D+02-0.5161730463415D+02 +-0.5161264909661D+02-0.5160793672858D+02-0.5160316683457D+02-0.5159833871062D+02 +-0.5159345164422D+02-0.5158850491424D+02-0.5158349779076D+02-0.5157842953502D+02 +-0.5157329939929D+02-0.5156810662682D+02-0.5156285045165D+02-0.5155753009857D+02 +-0.5155214478300D+02-0.5154669371088D+02-0.5154117607855D+02-0.5153559107266D+02 +-0.5152993787006D+02-0.5152421563767D+02-0.5151842353238D+02-0.5151256070096D+02 +-0.5150662627991D+02-0.5150061939535D+02-0.5149453916296D+02-0.5148838468777D+02 +-0.5148215506412D+02-0.5147584937554D+02-0.5146946669454D+02-0.5146300608264D+02 +-0.5145646659012D+02-0.5144984725596D+02-0.5144314710771D+02-0.5143636516137D+02 +-0.5142950042123D+02-0.5142255187982D+02-0.5141551851771D+02-0.5140839930344D+02 +-0.5140119319335D+02-0.5139389913149D+02-0.5138651604948D+02-0.5137904286634D+02 +-0.5137147848843D+02-0.5136382180931D+02-0.5135607170955D+02-0.5134822705665D+02 +-0.5134028670491D+02-0.5133224949527D+02-0.5132411425521D+02-0.5131587979859D+02 +-0.5130754492555D+02-0.5129910842232D+02-0.5129056906116D+02-0.5128192560017D+02 +-0.5127317678315D+02-0.5126432133956D+02-0.5125535798425D+02-0.5124628541740D+02 +-0.5123710232443D+02-0.5122780737574D+02-0.5121839922671D+02-0.5120887651745D+02 +-0.5119923787276D+02-0.5118948190193D+02-0.5117960719865D+02-0.5116961234085D+02 +-0.5115949589056D+02-0.5114925639380D+02-0.5113889238044D+02-0.5112840236408D+02 +-0.5111778484188D+02-0.5110703829447D+02-0.5109616118579D+02-0.5108515196301D+02 +-0.5107400905631D+02-0.5106273087889D+02-0.5105131582667D+02-0.5103976227836D+02 +-0.5102806859514D+02-0.5101623312071D+02-0.5100425418105D+02-0.5099213008436D+02 +-0.5097985912091D+02-0.5096743956297D+02-0.5095486966464D+02-0.5094214766176D+02 +-0.5092927177183D+02-0.5091624019384D+02-0.5090305110822D+02-0.5088970267672D+02 +-0.5087619304230D+02-0.5086252032900D+02-0.5084868264193D+02-0.5083467806710D+02 +-0.5082050467136D+02-0.5080616050232D+02-0.5079164358822D+02-0.5077695193792D+02 +-0.5076208354076D+02-0.5074703636655D+02-0.5073180836542D+02-0.5071639746782D+02 +-0.5070080158445D+02-0.5068501860613D+02-0.5066904640389D+02-0.5065288282874D+02 +-0.5063652571181D+02-0.5061997286414D+02-0.5060322207678D+02-0.5058627112067D+02 +-0.5056911774669D+02-0.5055175968555D+02-0.5053419464788D+02-0.5051642032411D+02 +-0.5049843438458D+02-0.5048023447945D+02-0.5046181823877D+02-0.5044318327247D+02 +-0.5042432717038D+02-0.5040524750226D+02-0.5038594181787D+02-0.5036640764694D+02 +-0.5034664249930D+02-0.5032664386488D+02-0.5030640921379D+02-0.5028593599640D+02 +-0.5026522164341D+02-0.5024426356594D+02-0.5022305915564D+02-0.5020160578474D+02 +-0.5017990080623D+02-0.5015794155393D+02-0.5013572534263D+02-0.5011324946826D+02 +-0.5009051120796D+02-0.5006750782030D+02-0.5004423654542D+02-0.5002069460521D+02 +-0.4999687920344D+02-0.4997278752603D+02-0.4994841674120D+02-0.4992376399966D+02 +-0.4989882643488D+02-0.4987360116327D+02-0.4984808528443D+02-0.4982227588141D+02 +-0.4979617002094D+02-0.4976976475371D+02-0.4974305711462D+02-0.4971604412309D+02 +-0.4968872278335D+02-0.4966109008469D+02-0.4963314300185D+02-0.4960487849528D+02 +-0.4957629351145D+02-0.4954738498327D+02-0.4951814983035D+02-0.4948858495939D+02 +-0.4945868726453D+02-0.4942845362775D+02-0.4939788091919D+02-0.4936696599757D+02 +-0.4933570571061D+02-0.4930409689534D+02-0.4927213637859D+02-0.4923982097740D+02 +-0.4920714749935D+02-0.4917411274309D+02-0.4914071349870D+02-0.4910694654815D+02 +-0.4907280866573D+02-0.4903829661848D+02-0.4900340716666D+02-0.4896813706420D+02 +-0.4893248305909D+02-0.4889644189392D+02-0.4886001030623D+02-0.4882318502909D+02 +-0.4878596279141D+02-0.4874834031849D+02-0.4871031433244D+02-0.4867188155262D+02 +-0.4863303869609D+02-0.4859378247804D+02-0.4855410961222D+02-0.4851401681140D+02 +-0.4847350078774D+02-0.4843255825325D+02-0.4839118592018D+02-0.4834938050138D+02 +-0.4830713871075D+02-0.4826445726356D+02-0.4822133287682D+02-0.4817776226967D+02 +-0.4813374216365D+02-0.4808926928306D+02-0.4804434035526D+02-0.4799895211091D+02 +-0.4795310128431D+02-0.4790678461358D+02-0.4785999884093D+02-0.4781274071282D+02 +-0.4776500698020D+02-0.4771679439861D+02-0.4766809972836D+02-0.4761891973461D+02 +-0.4756925118748D+02-0.4751909086208D+02-0.4746843553857D+02-0.4741728200213D+02 +-0.4736562704295D+02-0.4731346745620D+02-0.4726080004188D+02-0.4720762160479D+02 +-0.4715392895431D+02-0.4709971890425D+02-0.4704498827268D+02-0.4698973388163D+02 +-0.4693395255690D+02-0.4687764112767D+02-0.4682079642628D+02-0.4676341528777D+02 +-0.4670549454962D+02-0.4664703105122D+02-0.4658802163351D+02-0.4652846313853D+02 +-0.4646835240891D+02-0.4640768628735D+02-0.4634646161617D+02-0.4628467523671D+02 +-0.4622232398885D+02-0.4615940471037D+02-0.4609591423645D+02-0.4603184939910D+02 +-0.4596720702657D+02-0.4590198394276D+02-0.4583617696675D+02-0.4576978291218D+02 +-0.4570279858676D+02-0.4563522079176D+02-0.4556704632159D+02-0.4549827196328D+02 +-0.4542889449617D+02-0.4535891069156D+02-0.4528831731237D+02-0.4521711111299D+02 +-0.4514528883912D+02-0.4507284722768D+02-0.4499978300686D+02-0.4492609289624D+02 +-0.4485177360700D+02-0.4477682184233D+02-0.4470123429783D+02-0.4462500766219D+02 +-0.4454813861790D+02-0.4447062384219D+02-0.4439246000814D+02-0.4431364378589D+02 +-0.4423417184413D+02-0.4415404085174D+02-0.4407324747964D+02-0.4399178840285D+02 +-0.4390966030283D+02-0.4382685986996D+02-0.4374338380636D+02-0.4365922882888D+02 +-0.4357439167239D+02-0.4348886909331D+02-0.4340265787340D+02-0.4331575482384D+02 +-0.4322815678953D+02-0.4313986065369D+02-0.4305086334268D+02-0.4296116183110D+02 +-0.4287075314713D+02-0.4277963437808D+02-0.4268780267613D+02-0.4259525526436D+02 +-0.4250198944278D+02-0.4240800259471D+02-0.4231329219311D+02-0.4221785580702D+02 +-0.4212169110814D+02-0.4202479587724D+02-0.4192716801066D+02-0.4182880552657D+02 +-0.4172970657123D+02-0.4162986942478D+02-0.4152929250699D+02-0.4142797438248D+02 +-0.4132591376546D+02-0.4122310952415D+02-0.4111956068435D+02-0.4101526643252D+02 +-0.4091022611799D+02-0.4080443925436D+02-0.4069790551997D+02-0.4059062475744D+02 +-0.4048259697200D+02-0.4037382232884D+02-0.4026430114924D+02-0.4015403390548D+02 +-0.4004302121449D+02-0.3993126383031D+02-0.3981876263529D+02-0.3970551863000D+02 +-0.3959153292214D+02-0.3947680671418D+02-0.3936134129010D+02-0.3924513800125D+02 +-0.3912819825140D+02-0.3901052348125D+02-0.3889211515259D+02-0.3877297473220D+02 +-0.3865310367583D+02-0.3853250341248D+02-0.3841117532917D+02-0.3828912075654D+02 +-0.3816634095549D+02-0.3804283710513D+02-0.3791861029232D+02-0.3779366150300D+02 +-0.3766799161555D+02-0.3754160139636D+02-0.3741449149782D+02-0.3728666245883D+02 +-0.3715811470790D+02-0.3702884856900D+02-0.3689886427010D+02-0.3676816195438D+02 +-0.3663674169408D+02-0.3650460350690D+02-0.3637174737474D+02-0.3623817326473D+02 +-0.3610388115218D+02-0.3596887104531D+02-0.3583314301154D+02-0.3569669720495D+02 +-0.3555953389464D+02-0.3542165349386D+02-0.3528305658922D+02-0.3514374397011D+02 +-0.3500371665774D+02-0.3486297593358D+02-0.3472152336690D+02-0.3457936084122D+02 +-0.3443649057928D+02-0.3429291516643D+02-0.3414863757211D+02-0.3400366116934D+02 +-0.3385798975190D+02-0.3371162754922D+02-0.3356457923876D+02-0.3341684995570D+02 +-0.3326844530007D+02-0.3311937134098D+02-0.3296963461820D+02-0.3281924214079D+02 +-0.3266820138293D+02-0.3251652027694D+02-0.3236420720350D+02-0.3221127097903D+02 +-0.3205772084042D+02-0.3190356642710D+02-0.3174881776049D+02-0.3159348522098D+02 +-0.3143757952257D+02-0.3128111168511D+02-0.3112409300454D+02-0.3096653502093D+02 +-0.3080844948479D+02-0.3064984832153D+02-0.3049074359439D+02-0.3033114746593D+02 +-0.3017107215833D+02-0.3001052991254D+02-0.2984953294675D+02-0.2968809341400D+02 +-0.2952622335948D+02-0.2936393467762D+02-0.2920123906907D+02-0.2903814799805D+02 +-0.2887467265011D+02-0.2871082389066D+02-0.2854661222446D+02-0.2838204775647D+02 +-0.2821714015409D+02-0.2805189861135D+02-0.2788633181514D+02-0.2772044791378D+02 +-0.2755425448842D+02-0.2738775852723D+02-0.2722096640307D+02-0.2705388385454D+02 +-0.2688651597109D+02-0.2671886718221D+02-0.2655094125117D+02-0.2638274127348D+02 +-0.2621426968047D+02-0.2604552824823D+02-0.2587651811214D+02-0.2570723978730D+02 +-0.2553769319514D+02-0.2536787769632D+02-0.2519779213021D+02-0.2502743486110D+02 +-0.2485680383129D+02-0.2468589662112D+02-0.2451471051601D+02-0.2434324258050D+02 +-0.2417148973924D+02-0.2399944886481D+02-0.2382711687194D+02-0.2365449081810D+02 +-0.2348156800981D+02-0.2330834611404D+02-0.2313482327422D+02-0.2296099822964D+02 +-0.2278687043744D+02-0.2261244019567D+02-0.2243770876615D+02-0.2226267849517D+02 +-0.2208735293014D+02-0.2191173693001D+02-0.2173583676674D+02-0.2155966021537D+02 +-0.2138321662948D+02-0.2120651699903D+02-0.2102957398727D+02-0.2085240194340D+02 +-0.2067501688787D+02-0.2049743646710D+02-0.2031967987514D+02-0.2014176773999D+02 +-0.1996372197331D+02-0.1978556558301D+02-0.1960732244950D+02-0.1942901706755D+02 +-0.1925067425750D+02-0.1907231885074D+02-0.1889397535633D+02-0.1871566761696D+02 +-0.1853741846374D+02-0.1835924938052D+02-0.1818118018868D+02-0.1800322876380D+02 +-0.1782541079491D+02-0.1764773959582D+02-0.1747022597686D+02-0.1729287818264D+02 +-0.1711570189939D+02-0.1693870033244D+02-0.1676187435187D+02-0.1658522270158D+02 +-0.1640874226459D+02-0.1623242837596D+02-0.1605627517269D+02-0.1588027596970D+02 +-0.1570442365062D+02-0.1552871106216D+02-0.1535313140208D+02-0.1517767859145D+02 +-0.1500234762341D+02-0.1482713488228D+02-0.1465203842815D+02-0.1447705824363D+02 +-0.1430219644106D+02-0.1412745742929D+02-0.1395284804054D+02-0.1377837761854D+02 +-0.1360405806987D+02-0.1342990388081D+02-0.1325593210249D+02-0.1308216230731D+02 +-0.1290861651951D+02-0.1273531912305D+02-0.1256229674959D+02-0.1238957814960D+02 +-0.1221719404907D+02-0.1204517699438D+02-0.1187356118783D+02-0.1170238231558D+02 +-0.1153167737042D+02-0.1136148447069D+02-0.1119184267735D+02-0.1102279181034D+02 +-0.1085437226576D+02-0.1068662483495D+02-0.1051959052659D+02-0.1035331039265D+02 +-0.1018782535928D+02-0.1002317606321D+02-0.9859402694342D+01-0.9696544845323D+01 +-0.9534641368482D+01-0.9373730240659D+01-0.9213848436346D+01-0.9055031809511D+01 +-0.8897314984394D+01-0.8740731255549D+01-0.8585312497336D+01-0.8431089083029D+01 +-0.8278089813661D+01-0.8126341856676D+01-0.7975870694439D+01-0.7826700082584D+01 +-0.7678852018171D+01-0.7532346717566D+01-0.7387202603932D+01-0.7243436304187D+01 +-0.7101062655233D+01-0.6960094719270D+01-0.6820543807924D+01-0.6682419514939D+01 +-0.6545729757123D+01-0.6410480823229D+01-0.6276677430423D+01-0.6144322787958D+01 +-0.6013418667669D+01-0.5883965480867D+01-0.5755962361193D+01-0.5629407252975D+01 +-0.5504297004604D+01-0.5380627466436D+01-0.5258393592702D+01-0.5137589546863D+01 +-0.5018208809882D+01-0.4900244290793D+01-0.4783688438971D+01-0.4668533357470D+01 +-0.4554770916754D+01-0.4442392868124D+01-0.4331390956131D+01-0.4221757029192D+01 +-0.4113483147635D+01-0.4006561688322D+01-0.3900985445011D+01-0.3796747723533D+01 +-0.3693842430876D+01-0.3592264157211D+01-0.3492008249906D+01-0.3393070878541D+01 +-0.3295449089976D+01-0.3199140852531D+01-0.3104145088414D+01-0.3010461693592D+01 +-0.2918091544431D+01-0.2827036490592D+01-0.2737299333835D+01-0.2648883792669D+01 +-0.2561794453010D+01-0.2476036705393D+01-0.2391616669610D+01-0.2308541108029D+01 +-0.2226817329318D+01-0.2146453084634D+01-0.2067456458802D+01-0.1989835759339D+01 +-0.1913599406514D+01-0.1838755827812D+01-0.1765313360391D+01-0.1693280165020D+01 +-0.1622664154978D+01-0.1553472943063D+01-0.1485713809518D+01-0.1419393693186D+01 +-0.1354519207570D+01-0.1291096682842D+01-0.1229132234097D+01-0.1168631855453D+01 +-0.1109601538882D+01-0.1052047416050D+01-0.9959759208814D+00-0.9413939701484D+00 +-0.8883091590719D+00-0.8367299687430D+00-0.7866659821253D+00-0.7381281054637D+00 +-0.6911287920896D+00-0.6456822658698D+00-0.6018047418553D+00-0.5595146420441D+00 +-0.5188328045500D+00-0.4797826848498D+00-0.4423905481512D+00-0.4066856522662D+00 +-0.3727004206897D+00-0.3404706058472D+00-0.3100354427093D+00-0.2814377931599D+00 +-0.2547240189175D+00 + 0.0000000000000D+00 + 1012 0.2770741520224D+01 + 0.2150927949039D-04 0.2202124536575D-04 0.2254539478646D-04 0.2308201760180D-04 + 0.2363141055333D-04 0.2419387743865D-04 0.2476972927906D-04 0.2535928449121D-04 + 0.2596286906285D-04 0.2658081673262D-04 0.2721346917432D-04 0.2786117618535D-04 + 0.2852429587973D-04 0.2920319488569D-04 0.2989824854795D-04 0.3060984113473D-04 + 0.3133836604977D-04 0.3208422604934D-04 0.3284783346437D-04 0.3362961042788D-04 + 0.3442998910781D-04 0.3524941194536D-04 0.3608833189898D-04 0.3694721269416D-04 + 0.3782652907911D-04 0.3872676708658D-04 0.3964842430179D-04 0.4059201013679D-04 + 0.4155804611131D-04 0.4254706614023D-04 0.4355961682789D-04 0.4459625776943D-04 + 0.4565756185917D-04 0.4674411560639D-04 0.4785651945856D-04 0.4899538813222D-04 + 0.5016135095172D-04 0.5135505219602D-04 0.5257715145361D-04 0.5382832398596D-04 + 0.5510926109951D-04 0.5642067052648D-04 0.5776327681476D-04 0.5913782172693D-04 + 0.6054506464885D-04 0.6198578300785D-04 0.6346077270088D-04 0.6497084853274D-04 + 0.6651684466474D-04 0.6809961507398D-04 0.6972003402351D-04 0.7137899654355D-04 + 0.7307741892426D-04 0.7481623921999D-04 0.7659641776564D-04 0.7841893770513D-04 + 0.8028480553242D-04 0.8219505164534D-04 0.8415073091254D-04 0.8615292325379D-04 + 0.8820273423416D-04 0.9030129567206D-04 0.9244976626185D-04 0.9464933221109D-04 + 0.9690120789284D-04 0.9920663651351D-04 0.1015668907964D-03 0.1039832736813D-03 + 0.1064571190411D-03 0.1089897924148D-03 0.1115826917580D-03 0.1142372482113D-03 + 0.1169549268870D-03 0.1197372276738D-03 0.1225856860613D-03 0.1255018739831D-03 + 0.1284874006808D-03 0.1315439135877D-03 0.1346730992336D-03 0.1378766841712D-03 + 0.1411564359238D-03 0.1445141639563D-03 0.1479517206680D-03 0.1514710024102D-03 + 0.1550739505263D-03 0.1587625524179D-03 0.1625388426349D-03 0.1664049039925D-03 + 0.1703628687133D-03 0.1744149195974D-03 0.1785632912194D-03 0.1828102711544D-03 + 0.1871582012321D-03 0.1916094788209D-03 0.1961665581427D-03 0.2008319516176D-03 + 0.2056082312418D-03 0.2104980299966D-03 0.2155040432913D-03 0.2206290304405D-03 + 0.2258758161753D-03 0.2312472921908D-03 0.2367464187300D-03 0.2423762262044D-03 + 0.2481398168542D-03 0.2540403664457D-03 0.2600811260106D-03 0.2662654236245D-03 + 0.2725966662290D-03 0.2790783414953D-03 0.2857140197324D-03 0.2925073558401D-03 + 0.2994620913080D-03 0.3065820562611D-03 0.3138711715547D-03 0.3213334509168D-03 + 0.3289730031429D-03 0.3367940343406D-03 0.3448008502286D-03 0.3529978584881D-03 + 0.3613895711713D-03 0.3699806071650D-03 0.3787756947128D-03 0.3877796739964D-03 + 0.3969974997780D-03 0.4064342441040D-03 0.4160950990725D-03 0.4259853796663D-03 + 0.4361105266519D-03 0.4464761095462D-03 0.4570878296540D-03 0.4679515231757D-03 + 0.4790731643881D-03 0.4904588689006D-03 0.5021148969868D-03 0.5140476569946D-03 + 0.5262637088364D-03 0.5387697675611D-03 0.5515727070097D-03 0.5646795635561D-03 + 0.5780975399370D-03 0.5918340091694D-03 0.6058965185620D-03 0.6202927938188D-03 + 0.6350307432396D-03 0.6501184620192D-03 0.6655642366457D-03 0.6813765494038D-03 + 0.6975640829812D-03 0.7141357251847D-03 0.7311005737650D-03 0.7484679413557D-03 + 0.7662473605260D-03 0.7844485889531D-03 0.8030816147148D-03 0.8221566617048D-03 + 0.8416841951763D-03 0.8616749274129D-03 0.8821398235337D-03 0.9030901074324D-03 + 0.9245372678559D-03 0.9464930646236D-03 0.9689695349932D-03 0.9919790001731D-03 + 0.1015534071988D-02 0.1039647659698D-02 0.1064332976981D-02 0.1089603549068D-02 + 0.1115473220057D-02 0.1141956160389D-02 0.1169066874495D-02 0.1196820208634D-02 + 0.1225231358897D-02 0.1254315879409D-02 0.1284089690715D-02 0.1314569088366D-02 + 0.1345770751696D-02 0.1377711752814D-02 0.1410409565795D-02 0.1443882076088D-02 + 0.1478147590144D-02 0.1513224845264D-02 0.1549133019674D-02 0.1585891742841D-02 + 0.1623521106018D-02 0.1662041673040D-02 0.1701474491365D-02 0.1741841103378D-02 + 0.1783163557945D-02 0.1825464422244D-02 0.1868766793867D-02 0.1913094313196D-02 + 0.1958471176071D-02 0.2004922146751D-02 0.2052472571166D-02 0.2101148390486D-02 + 0.2150976154989D-02 0.2201983038264D-02 0.2254196851731D-02 0.2307646059493D-02 + 0.2362359793542D-02 0.2418367869301D-02 0.2475700801533D-02 0.2534389820612D-02 + 0.2594466889165D-02 0.2655964719104D-02 0.2718916789042D-02 0.2783357362106D-02 + 0.2849321504172D-02 0.2916845102501D-02 0.2985964884814D-02 0.3056718438800D-02 + 0.3129144232066D-02 0.3203281632551D-02 0.3279170929405D-02 0.3356853354336D-02 + 0.3436371103460D-02 0.3517767359634D-02 0.3601086315312D-02 0.3686373195913D-02 + 0.3773674283724D-02 0.3863036942351D-02 0.3954509641719D-02 0.4048141983652D-02 + 0.4143984728019D-02 0.4242089819491D-02 0.4342510414893D-02 0.4445300911185D-02 + 0.4550516974067D-02 0.4658215567249D-02 0.4768454982366D-02 0.4881294869584D-02 + 0.4996796268890D-02 0.5115021642093D-02 0.5236034905549D-02 0.5359901463622D-02 + 0.5486688242898D-02 0.5616463727181D-02 0.5749297993262D-02 0.5885262747508D-02 + 0.6024431363262D-02 0.6166878919093D-02 0.6312682237899D-02 0.6461919926891D-02 + 0.6614672418475D-02 0.6771022012045D-02 0.6931052916716D-02 0.7094851295016D-02 + 0.7262505307545D-02 0.7434105158642D-02 0.7609743143066D-02 0.7789513693721D-02 + 0.7973513430440D-02 0.8161841209859D-02 0.8354598176397D-02 0.8551887814376D-02 + 0.8753816001287D-02 0.8960491062250D-02 0.9172023825667D-02 0.9388527680122D-02 + 0.9610118632529D-02 0.9836915367568D-02 0.1006903930843D-01 0.1030661467892D-01 + 0.1054976856688D-01 0.1079863098909D-01 0.1105333495749D-01 0.1131401654696D-01 + 0.1158081496451D-01 0.1185387262003D-01 0.1213333519856D-01 0.1241935173418D-01 + 0.1271207468545D-01 0.1301166001257D-01 0.1331826725616D-01 0.1363205961778D-01 + 0.1395320404221D-01 0.1428187130150D-01 0.1461823608081D-01 0.1496247706623D-01 + 0.1531477703430D-01 0.1567532294367D-01 0.1604430602860D-01 0.1642192189452D-01 + 0.1680837061563D-01 0.1720385683464D-01 0.1760858986456D-01 0.1802278379280D-01 + 0.1844665758734D-01 0.1888043520531D-01 0.1932434570378D-01 0.1977862335297D-01 + 0.2024350775185D-01 0.2071924394615D-01 0.2120608254895D-01 0.2170427986376D-01 + 0.2221409801021D-01 0.2273580505238D-01 0.2326967512987D-01 0.2381598859160D-01 + 0.2437503213237D-01 0.2494709893234D-01 0.2553248879941D-01 0.2613150831454D-01 + 0.2674447098014D-01 0.2737169737147D-01 0.2801351529124D-01 0.2867025992742D-01 + 0.2934227401421D-01 0.3002990799646D-01 0.3073352019732D-01 0.3145347698951D-01 + 0.3219015296988D-01 0.3294393113773D-01 0.3371520307664D-01 0.3450436914006D-01 + 0.3531183864059D-01 0.3613803004319D-01 0.3698337116219D-01 0.3784829936233D-01 + 0.3873326176383D-01 0.3963871545150D-01 0.4056512768813D-01 0.4151297613205D-01 + 0.4248274905905D-01 0.4347494558865D-01 0.4449007591493D-01 0.4552866154180D-01 + 0.4659123552298D-01 0.4767834270657D-01 0.4879053998454D-01 0.4992839654695D-01 + 0.5109249414114D-01 0.5228342733595D-01 0.5350180379101D-01 0.5474824453121D-01 + 0.5602338422639D-01 0.5732787147645D-01 0.5866236910176D-01 0.6002755443915D-01 + 0.6142411964345D-01 0.6285277199472D-01 0.6431423421119D-01 0.6580924476805D-01 + 0.6733855822219D-01 0.6890294554290D-01 0.7050319444864D-01 0.7214010975008D-01 + 0.7381451369925D-01 0.7552724634520D-01 0.7727916589591D-01 0.7907114908690D-01 + 0.8090409155624D-01 0.8277890822643D-01 0.8469653369292D-01 0.8665792261951D-01 + 0.8866405014071D-01 0.9071591227111D-01 0.9281452632182D-01 0.9496093132410D-01 + 0.9715618846031D-01 0.9940138150208D-01 0.1016976172560D+00 0.1040460260169D+00 + 0.1064477620282D+00 0.1089040039508D+00 0.1114159553388D+00 0.1139848451236D+00 + 0.1166119281054D+00 0.1192984854532D+00 0.1220458252122D+00 0.1248552828197D+00 + 0.1277282216288D+00 0.1306660334408D+00 0.1336701390448D+00 0.1367419887670D+00 + 0.1398830630269D+00 0.1430948729031D+00 0.1463789607067D+00 0.1497369005636D+00 + 0.1531702990050D+00 0.1566807955666D+00 0.1602700633964D+00 0.1639398098711D+00 + 0.1676917772207D+00 0.1715277431623D+00 0.1754495215419D+00 0.1794589629856D+00 + 0.1835579555582D+00 0.1877484254317D+00 0.1920323375616D+00 0.1964116963718D+00 + 0.2008885464482D+00 0.2054649732406D+00 0.2101431037732D+00 0.2149251073635D+00 + 0.2198131963488D+00 0.2248096268222D+00 0.2299166993754D+00 0.2351367598503D+00 + 0.2404722000984D+00 0.2459254587480D+00 0.2514990219789D+00 0.2571954243047D+00 + 0.2630172493626D+00 0.2689671307106D+00 0.2750477526311D+00 0.2812618509418D+00 + 0.2876122138134D+00 0.2941016825931D+00 0.3007331526352D+00 0.3075095741362D+00 + 0.3144339529771D+00 0.3215093515700D+00 0.3287388897102D+00 0.3361257454325D+00 + 0.3436731558729D+00 0.3513844181328D+00 0.3592628901485D+00 0.3673119915621D+00 + 0.3755352045968D+00 0.3839360749336D+00 0.3925182125899D+00 0.4012852927993D+00 + 0.4102410568930D+00 0.4193893131804D+00 0.4287339378299D+00 0.4382788757486D+00 + 0.4480281414604D+00 0.4579858199819D+00 0.4681560676951D+00 0.4785431132164D+00 + 0.4891512582614D+00 0.4999848785043D+00 0.5110484244305D+00 0.5223464221834D+00 + 0.5338834744021D+00 0.5456642610510D+00 0.5576935402392D+00 0.5699761490289D+00 + 0.5825170042325D+00 0.5953211031952D+00 0.6083935245653D+00 0.6217394290472D+00 + 0.6353640601390D+00 0.6492727448516D+00 0.6634708944082D+00 0.6779640049238D+00 + 0.6927576580616D+00 0.7078575216668D+00 0.7232693503742D+00 0.7389989861895D+00 + 0.7550523590420D+00 0.7714354873073D+00 0.7881544782973D+00 0.8052155287175D+00 + 0.8226249250876D+00 0.8403890441249D+00 0.8585143530879D+00 0.8770074100784D+00 + 0.8958748642992D+00 0.9151234562658D+00 0.9347600179702D+00 0.9547914729931D+00 + 0.9752248365635D+00 0.9960672155622D+00 0.1017325808468D+01 0.1039007905241D+01 + 0.1061120887144D+01 0.1083672226499D+01 0.1106669486370D+01 0.1130120320176D+01 + 0.1154032471231D+01 0.1178413772204D+01 0.1203272144493D+01 0.1228615597523D+01 + 0.1254452227950D+01 0.1280790218774D+01 0.1307637838359D+01 0.1335003439353D+01 + 0.1362895457506D+01 0.1391322410385D+01 0.1420292895972D+01 0.1449815591159D+01 + 0.1479899250115D+01 0.1510552702537D+01 0.1541784851777D+01 0.1573604672833D+01 + 0.1606021210210D+01 0.1639043575644D+01 0.1672680945677D+01 0.1706942559091D+01 + 0.1741837714186D+01 0.1777375765901D+01 0.1813566122779D+01 0.1850418243757D+01 + 0.1887941634794D+01 0.1926145845317D+01 0.1965040464488D+01 0.2004635117287D+01 + 0.2044939460400D+01 0.2085963177919D+01 0.2127715976829D+01 0.2170207582300D+01 + 0.2213447732763D+01 0.2257446174769D+01 0.2302212657626D+01 0.2347756927812D+01 + 0.2394088723154D+01 0.2441217766767D+01 0.2489153760756D+01 0.2537906379665D+01 + 0.2587485263675D+01 0.2637900011547D+01 0.2689160173295D+01 0.2741275242598D+01 + 0.2794254648931D+01 0.2848107749430D+01 0.2902843820459D+01 0.2958472048904D+01 + 0.3015001523163D+01 0.3072441223848D+01 0.3130800014182D+01 0.3190086630094D+01 + 0.3250309670002D+01 0.3311477584285D+01 0.3373598664440D+01 0.3436681031917D+01 + 0.3500732626634D+01 0.3565761195166D+01 0.3631774278604D+01 0.3698779200090D+01 + 0.3766783052007D+01 0.3835792682854D+01 0.3905814683769D+01 0.3976855374728D+01 + 0.4048920790399D+01 0.4122016665671D+01 0.4196148420834D+01 0.4271321146438D+01 + 0.4347539587809D+01 0.4424808129241D+01 0.4503130777854D+01 0.4582511147131D+01 + 0.4662952440136D+01 0.4744457432406D+01 0.4827028454547D+01 0.4910667374509D+01 + 0.4995375579573D+01 0.5081153958042D+01 0.5168002880655D+01 0.5255922181721D+01 + 0.5344911139992D+01 0.5434968459290D+01 0.5526092248881D+01 0.5618280003639D+01 + 0.5711528583982D+01 0.5805834195616D+01 0.5901192369103D+01 0.5997597939257D+01 + 0.6095045024395D+01 0.6193527005472D+01 0.6293036505099D+01 0.6393565366487D+01 + 0.6495104632331D+01 0.6597644523660D+01 0.6701174418681D+01 0.6805682831645D+01 + 0.6911157391760D+01 0.7017584822191D+01 0.7124950919171D+01 0.7233240531258D+01 + 0.7342437538781D+01 0.7452524833500D+01 0.7563484298530D+01 0.7675296788562D+01 + 0.7787942110430D+01 0.7901399004058D+01 0.8015645123842D+01 0.8130657020509D+01 + 0.8246410123503D+01 0.8362878723950D+01 0.8480035958250D+01 0.8597853792358D+01 + 0.8716303006799D+01 0.8835353182487D+01 0.8954972687391D+01 0.9075128664130D+01 + 0.9195787018538D+01 0.9316912409273D+01 0.9438468238543D+01 0.9560416644000D+01 + 0.9682718491880D+01 0.9805333371460D+01 0.9928219590896D+01 0.1005133417453D+02 + 0.1017463286171D+02 0.1029807010722D+02 0.1042159908344D+02 0.1054517168417D+02 + 0.1066873853037D+02 0.1079224897780D+02 0.1091565112659D+02 0.1103889183301D+02 + 0.1116191672323D+02 0.1128467020944D+02 0.1140709550823D+02 0.1152913466133D+02 + 0.1165072855885D+02 0.1177181696506D+02 0.1189233854680D+02 0.1201223090454D+02 + 0.1213143060625D+02 0.1224987322407D+02 0.1236749337400D+02 0.1248422475837D+02 + 0.1260000021157D+02 0.1271475174875D+02 0.1282841061773D+02 0.1294090735413D+02 + 0.1305217183979D+02 0.1316213336451D+02 0.1327072069111D+02 0.1337786212400D+02 + 0.1348348558110D+02 0.1358751866928D+02 0.1368988876325D+02 0.1379052308804D+02 + 0.1388934880491D+02 0.1398629310084D+02 0.1408128328150D+02 0.1417424686776D+02 + 0.1426511169568D+02 0.1435380601989D+02 0.1444025862047D+02 0.1452439891313D+02 + 0.1460615706273D+02 0.1468546410000D+02 0.1476225204147D+02 0.1483645401237D+02 + 0.1490800437259D+02 0.1497683884540D+02 0.1504289464893D+02 0.1510611063019D+02 + 0.1516642740155D+02 0.1522378747941D+02 0.1527813542502D+02 0.1532941798703D+02 + 0.1537758424592D+02 0.1542258575964D+02 0.1546437671057D+02 0.1550291405346D+02 + 0.1553815766392D+02 0.1557007048740D+02 0.1559861868825D+02 0.1562377179849D+02 + 0.1564550286611D+02 0.1566378860245D+02 0.1567860952827D+02 0.1568995011828D+02 + 0.1569779894358D+02 0.1570214881171D+02 0.1570299690387D+02 0.1570034490889D+02 + 0.1569419915342D+02 0.1568457072811D+02 0.1567147560898D+02 0.1565493477391D+02 + 0.1563497431333D+02 0.1561162553504D+02 0.1558492506233D+02 0.1555491492507D+02 + 0.1552164264320D+02 0.1548516130217D+02 0.1544552961962D+02 0.1540281200312D+02 + 0.1535707859803D+02 0.1530840532536D+02 0.1525687390884D+02 0.1520257189079D+02 + 0.1514559263632D+02 0.1508603532531D+02 0.1502400493172D+02 0.1495961218971D+02 + 0.1489297354623D+02 0.1482421109950D+02 0.1475345252306D+02 0.1468083097499D+02 + 0.1460648499184D+02 0.1453055836709D+02 0.1445320001360D+02 0.1437456381003D+02 + 0.1429480843075D+02 0.1421409715909D+02 0.1413259768392D+02 0.1405048187912D+02 + 0.1396792556614D+02 0.1388510825940D+02 0.1380221289467D+02 0.1371942554036D+02 + 0.1363693509198D+02 0.1355493294972D+02 0.1347361267958D+02 0.1339316965818D+02 + 0.1331380070165D+02 0.1323570367897D+02 0.1315907711016D+02 0.1308411975004D+02 + 0.1301103015787D+02 0.1294000625373D+02 0.1287124486230D+02 0.1280494124477D+02 + 0.1274128861984D+02 0.1268047767460D+02 0.1262269606643D+02 0.1256812791682D+02 + 0.1251695329838D+02 0.1246934771604D+02 0.1242548158392D+02 0.1238551969900D+02 + 0.1234962071295D+02 0.1231793660373D+02 0.1229061214824D+02 0.1226778439767D+02 + 0.1224958215706D+02 0.1223612547078D+02 0.1222752511553D+02 0.1222388210258D+02 + 0.1222528719100D+02 0.1223182041366D+02 0.1224355061775D+02 0.1226053502171D+02 + 0.1228281879023D+02 0.1231043462935D+02 0.1234340240339D+02 0.1238172877543D+02 + 0.1242540687338D+02 0.1247441598324D+02 0.1252872127141D+02 0.1258827353770D+02 + 0.1265300900087D+02 0.1272284911822D+02 0.1279770044081D+02 0.1287745450601D+02 + 0.1296198776857D+02 0.1305116157186D+02 0.1314482216032D+02 0.1324280073454D+02 + 0.1334491354991D+02 0.1345096205988D+02 0.1356073310471D+02 0.1367399914649D+02 + 0.1379051855093D+02 0.1391003591655D+02 0.1403228245150D+02 0.1415697639825D+02 + 0.1428382350615D+02 0.1441251755180D+02 0.1454274090682D+02 0.1467416515265D+02 + 0.1480645174180D+02 0.1493925270450D+02 0.1507221140012D+02 0.1520496331175D+02 + 0.1533713688305D+02 0.1546835439544D+02 0.1559823288411D+02 0.1572638509088D+02 + 0.1585242045188D+02 0.1597594611769D+02 0.1609656800349D+02 0.1621389186673D+02 + 0.1632752440935D+02 0.1643707440175D+02 0.1654215382521D+02 0.1664237902974D+02 + 0.1673737190368D+02 0.1682676105166D+02 0.1691018297723D+02 0.1698728326633D+02 + 0.1705771776761D+02 0.1712115376582D+02 0.1717727114395D+02 0.1722576353007D+02 + 0.1726633942470D+02 0.1729872330429D+02 0.1732265669667D+02 0.1733789922408D+02 + 0.1734422960952D+02 0.1734144664198D+02 0.1732937009656D+02 0.1730784160492D+02 + 0.1727672547225D+02 0.1723590943644D+02 0.1718530536559D+02 0.1712484989008D+02 + 0.1705450496536D+02 0.1697425836203D+02 0.1688412407975D+02 0.1678414268193D+02 + 0.1667438154808D+02 0.1655493504124D+02 0.1642592458792D+02 0.1628749866833D+02 + 0.1613983271513D+02 0.1598312891883D+02 0.1581761593876D+02 0.1564354851859D+02 + 0.1546120700566D+02 0.1527089677411D+02 0.1507294755170D+02 0.1486771265109D+02 + 0.1465556810624D+02 0.1443691171558D+02 0.1421216199343D+02 0.1398175703206D+02 + 0.1374615327696D+02 0.1350582421831D+02 0.1326125900230D+02 0.1301296096613D+02 + 0.1276144610103D+02 0.1250724144826D+02 0.1225088343315D+02 0.1199291614280D+02 + 0.1173388955369D+02 0.1147435771520D+02 0.1121487689618D+02 0.1095600370143D+02 + 0.1069829316549D+02 0.1044229683153D+02 0.1018856082317D+02 0.9937623917321D+01 + 0.9690015626445D+01 0.9446254298643D+01 0.9206845244038D+01 0.8972278896087D+01 + 0.8743029016360D+01 0.8519550951297D+01 0.8302279949355D+01 0.8091629546790D+01 + 0.7887990030116D+01 0.7691726983014D+01 0.7503179925129D+01 0.7322661049902D+01 + 0.7150454068046D+01 0.6986813162918D+01 0.6831962063451D+01 0.6686093239819D+01 + 0.6549367226364D+01 0.6421912075717D+01 0.6303822947394D+01 0.6195161833447D+01 + 0.6095957423078D+01 0.6006205107394D+01 0.5925867124779D+01 0.5854872846611D+01 + 0.5793119202371D+01 0.5740471242429D+01 0.5696762836121D+01 0.5661797502031D+01 + 0.5635349366701D+01 0.5617164247353D+01 0.5606960853570D+01 0.5604432102259D+01 + 0.5609246539649D+01 0.5621049863505D+01 0.5639466538232D+01 0.5664101495024D+01 + 0.5694541908766D+01 0.5730359042993D+01 0.5771110153784D+01 0.5816340443192D+01 + 0.5865585052475D+01 0.5918371085180D+01 0.5974219649957D+01 0.6032647912832D+01 + 0.6093171148637D+01 0.6155304781260D+01 0.6218566402475D+01 0.6282477759234D+01 + 0.6346566699475D+01 0.6410369066815D+01 0.6473430534781D+01 0.6535308371644D+01 + 0.6595573127395D+01 0.6653810234872D+01 0.6709621517670D+01 0.6762626598041D+01 + 0.6812464198680D+01 0.6858793332986D+01 0.6901294379138D+01 0.6939670034070D+01 + 0.6973646144233D+01 0.7002972410830D+01 0.7027422967990D+01 0.7046796833200D+01 + 0.7060918230061D+01 0.7069636784259D+01 0.7072827594374D+01 0.7070391179926D+01 + 0.7062253309715D+01 0.7048364714231D+01 0.7028700686483D+01 0.7003260576238D+01 + 0.6972067183121D+01 0.6935166054562D+01 0.6892624694966D+01 0.6844531692843D+01 + 0.6790995772965D+01 0.6732144780827D+01 0.6668124606899D+01 0.6599098058289D+01 + 0.6525243685473D+01 0.6446754571799D+01 0.6363837093418D+01 0.6276709657188D+01 + 0.6185601423998D+01 0.6090751024726D+01 0.5992405275866D+01 0.5890817901556D+01 + 0.5786248268476D+01 0.5678960139726D+01 0.5569220453475D+01 0.5457298131760D+01 + 0.5343462924443D+01 0.5227984292928D+01 0.5111130337809D+01 0.4993166774192D+01 + 0.4874355958030D+01 0.4754955966341D+01 0.4635219733799D+01 0.4515394247714D+01 + 0.4395719803061D+01 0.4276429318764D+01 0.4157747716089D+01 0.4039891359594D+01 + 0.3923067560758D+01 0.3807474144035D+01 0.3693299074769D+01 0.3580720148118D+01 + 0.3469904737816D+01 0.3361009603367D+01 0.3254180754011D+01 0.3149553367571D+01 + 0.3047251762116D+01 0.2947389418162D+01 0.2850069049006D+01 0.2755382716614D+01 + 0.2663411990420D+01 0.2574228146230D+01 0.2487892402405D+01 0.2404456190400D+01 + 0.2323961456713D+01 0.2246440993268D+01 0.2171918793250D+01 0.2100410429420D+01 + 0.2031923451965D+01 0.1966457802972D+01 0.1904006244666D+01 0.1844554798640D+01 + 0.1788083193345D+01 0.1734565317240D+01 0.1683969675070D+01 0.1636259844862D+01 + 0.1591394933364D+01 0.1549330027746D+01 0.1510016641546D+01 0.1473403152964D+01 + 0.1439435233770D+01 0.1408056267219D+01 0.1379207753531D+01 0.1352829701650D+01 + 0.1328861006133D+01 0.1307239808175D+01 0.1287903839946D+01 0.1270790751526D+01 + 0.1255838419882D+01 0.1242985239474D+01 0.1232170394175D+01 0.1223334110328D+01 + 0.1216417890857D+01 0.1211364730456D+01 0.1208119311934D+01 0.1206628183910D+01 + 0.1206839920052D+01 0.1208705260142D+01 0.1212177233248D+01 0.1217211263310D+01 + 0.1223765257423D+01 0.1231799677111D+01 0.1241277592815D+01 0.1252164721788D+01 + 0.1264429449524D+01 0.1278042834732D+01 0.1292978597814D+01 0.1309213092627D+01 + 0.1326725261233D+01 0.1345496571135D+01 0.1365510934358D+01 0.1386754607532D+01 + 0.1409215426363D+01 0.1433003097507D+01 0.1458223277591D+01 0.1484860699421D+01 + 0.1512902583279D+01 0.1542338542721D+01 0.1573160498496D+01 0.1605362600812D+01 + 0.1638941160170D+01 0.1673894586973D+01 0.1710223340083D+01 0.1747929884514D+01 + 7 1012 + 1 0 -1 -511.89150 + 2 0 -1 -58.80097 + 2 1 1 -50.61290 + 2 1 -2 -49.69692 + 3 0 -1 -5.52718 + 3 1 1 -3.14309 + 3 1 -2 -3.03034 + 0.2123373461549D-04 0.2173914995400D-04 0.2225659296114D-04 0.2278634977738D-04 + 0.2332871334728D-04 0.2388398358121D-04 0.2445246752083D-04 0.2503447950857D-04 + 0.2563034136106D-04 0.2624038254674D-04 0.2686494036763D-04 0.2750436014548D-04 + 0.2815899541226D-04 0.2882920810522D-04 0.2951536876657D-04 0.3021785674791D-04 + 0.3093706041946D-04 0.3167337738432D-04 0.3242721469777D-04 0.3319898909177D-04 + 0.3398912720483D-04 0.3479806581728D-04 0.3562625209215D-04 0.3647414382175D-04 + 0.3734220968012D-04 0.3823092948144D-04 0.3914079444457D-04 0.4007230746391D-04 + 0.4102598338660D-04 0.4200234929636D-04 0.4300194480406D-04 0.4402532234512D-04 + 0.4507304748402D-04 0.4614569922601D-04 0.4724387033618D-04 0.4836816766617D-04 + 0.4951921248852D-04 0.5069764083903D-04 0.5190410386721D-04 0.5313926819498D-04 + 0.5440381628400D-04 0.5569844681152D-04 0.5702387505533D-04 0.5838083328767D-04 + 0.5977007117859D-04 0.6119235620880D-04 0.6264847409228D-04 0.6413922920902D-04 + 0.6566544504782D-04 0.6722796465978D-04 0.6882765112238D-04 0.7046538801462D-04 + 0.7214207990339D-04 0.7385865284136D-04 0.7561605487667D-04 0.7741525657465D-04 + 0.7925725155197D-04 0.8114305702331D-04 0.8307371436110D-04 0.8505028966841D-04 + 0.8707387436545D-04 0.8914558578994D-04 0.9126656781168D-04 0.9343799146165D-04 + 0.9566105557602D-04 0.9793698745538D-04 0.1002670435396D-03 0.1026525100984D-03 + 0.1050947039390D-03 0.1075949731294D-03 0.1101546977394D-03 0.1127752905997D-03 + 0.1154581980775D-03 0.1182049008719D-03 0.1210169148270D-03 0.1238957917652D-03 + 0.1268431203390D-03 0.1298605269045D-03 0.1329496764137D-03 0.1361122733297D-03 + 0.1393500625619D-03 0.1426648304247D-03 0.1460584056178D-03 0.1495326602303D-03 + 0.1530895107681D-03 0.1567309192056D-03 0.1604588940629D-03 0.1642754915072D-03 + 0.1681828164816D-03 0.1721830238593D-03 0.1762783196258D-03 0.1804709620887D-03 + 0.1847632631165D-03 0.1891575894056D-03 0.1936563637785D-03 0.1982620665115D-03 + 0.2029772366947D-03 0.2078044736231D-03 0.2127464382210D-03 0.2178058545005D-03 + 0.2229855110531D-03 0.2282882625778D-03 0.2337170314442D-03 0.2392748092933D-03 + 0.2449646586752D-03 0.2507897147258D-03 0.2567531868833D-03 0.2628583606444D-03 + 0.2691085993625D-03 0.2755073460880D-03 0.2820581254518D-03 0.2887645455935D-03 + 0.2956303001344D-03 0.3026591701977D-03 0.3098550264756D-03 0.3172218313454D-03 + 0.3247636410353D-03 0.3324846078408D-03 0.3403889823939D-03 0.3484811159850D-03 + 0.3567654629401D-03 0.3652465830528D-03 0.3739291440747D-03 0.3828179242637D-03 + 0.3919178149916D-03 0.4012338234146D-03 0.4107710752045D-03 0.4205348173457D-03 + 0.4305304209971D-03 0.4407633844209D-03 0.4512393359813D-03 0.4619640372121D-03 + 0.4729433859575D-03 0.4841834195856D-03 0.4956903182785D-03 0.5074704083979D-03 + 0.5195301659314D-03 0.5318762200182D-03 0.5445153565579D-03 0.5574545219044D-03 + 0.5707008266453D-03 0.5842615494708D-03 0.5981441411326D-03 0.6123562284955D-03 + 0.6269056186847D-03 0.6418003033287D-03 0.6570484629028D-03 0.6726584711734D-03 + 0.6886388997468D-03 0.7049985227240D-03 0.7217463214642D-03 0.7388914894603D-03 + 0.7564434373277D-03 0.7744117979097D-03 0.7928064315026D-03 0.8116374312024D-03 + 0.8309151283763D-03 0.8506500982622D-03 0.8708531656989D-03 0.8915354109894D-03 + 0.9127081759015D-03 0.9343830698083D-03 0.9565719759715D-03 0.9792870579714D-03 + 0.1002540766287D-02 0.1026345845027D-02 0.1050715338824D-02 0.1075662599879D-02 + 0.1101201295181D-02 0.1127345413883D-02 0.1154109274864D-02 0.1181507534450D-02 + 0.1209555194328D-02 0.1238267609637D-02 0.1267660497252D-02 0.1297749944251D-02 + 0.1328552416593D-02 0.1360084767981D-02 0.1392364248945D-02 0.1425408516127D-02 + 0.1459235641785D-02 0.1493864123514D-02 0.1529312894196D-02 0.1565601332181D-02 + 0.1602749271697D-02 0.1640777013510D-02 0.1679705335822D-02 0.1719555505429D-02 + 0.1760349289133D-02 0.1802108965417D-02 0.1844857336390D-02 0.1888617740010D-02 + 0.1933414062589D-02 0.1979270751585D-02 0.2026212828687D-02 0.2074265903209D-02 + 0.2123456185786D-02 0.2173810502385D-02 0.2225356308647D-02 0.2278121704551D-02 + 0.2332135449417D-02 0.2387426977257D-02 0.2444026412476D-02 0.2501964585936D-02 + 0.2561273051389D-02 0.2621984102285D-02 0.2684130788965D-02 0.2747746936258D-02 + 0.2812867161465D-02 0.2879526892772D-02 0.2947762388071D-02 0.3017610754222D-02 + 0.3089109966753D-02 0.3162298890003D-02 0.3237217297741D-02 0.3313905894238D-02 + 0.3392406335837D-02 0.3472761253004D-02 0.3555014272883D-02 0.3639210042377D-02 + 0.3725394251736D-02 0.3813613658698D-02 0.3903916113173D-02 0.3996350582488D-02 + 0.4090967177209D-02 0.4187817177547D-02 0.4286953060364D-02 0.4388428526794D-02 + 0.4492298530489D-02 0.4598619306504D-02 0.4707448400838D-02 0.4818844700646D-02 + 0.4932868465127D-02 0.5049581357120D-02 0.5169046475404D-02 0.5291328387739D-02 + 0.5416493164639D-02 0.5544608413917D-02 0.5675743316002D-02 0.5809968660057D-02 + 0.5947356880904D-02 0.6087982096781D-02 0.6231920147946D-02 0.6379248636155D-02 + 0.6530046965011D-02 0.6684396381234D-02 0.6842380016839D-02 0.7004082932273D-02 + 0.7169592160503D-02 0.7338996752102D-02 0.7512387821327D-02 0.7689858593235D-02 + 0.7871504451850D-02 0.8057422989391D-02 0.8247714056607D-02 0.8442479814225D-02 + 0.8641824785540D-02 0.8845855910175D-02 0.9054682599025D-02 0.9268416790430D-02 + 0.9487173007575D-02 0.9711068417172D-02 0.9940222889430D-02 0.1017475905935D-01 + 0.1041480238936D-01 0.1066048123337D-01 0.1091192690214D-01 0.1116927373022D-01 + 0.1143265914425D-01 0.1170222373276D-01 0.1197811131760D-01 0.1226046902681D-01 + 0.1254944736912D-01 0.1284520031015D-01 0.1314788535014D-01 0.1345766360348D-01 + 0.1377469987990D-01 0.1409916276750D-01 0.1443122471744D-01 0.1477106213063D-01 + 0.1511885544620D-01 0.1547478923187D-01 0.1583905227632D-01 0.1621183768351D-01 + 0.1659334296907D-01 0.1698377015868D-01 0.1738332588869D-01 0.1779222150874D-01 + 0.1821067318670D-01 0.1863890201578D-01 0.1907713412394D-01 0.1952560078568D-01 + 0.1998453853608D-01 0.2045418928739D-01 0.2093480044805D-01 0.2142662504416D-01 + 0.2192992184360D-01 0.2244495548276D-01 0.2297199659585D-01 0.2351132194704D-01 + 0.2406321456527D-01 0.2462796388197D-01 0.2520586587156D-01 0.2579722319499D-01 + 0.2640234534617D-01 0.2702154880148D-01 0.2765515717239D-01 0.2830350136121D-01 + 0.2896691972007D-01 0.2964575821319D-01 0.3034037058244D-01 0.3105111851634D-01 + 0.3177837182251D-01 0.3252250860359D-01 0.3328391543683D-01 0.3406298755727D-01 + 0.3486012904465D-01 0.3567575301409D-01 0.3651028181063D-01 0.3736414720771D-01 + 0.3823779060956D-01 0.3913166325773D-01 0.4004622644169D-01 0.4098195171364D-01 + 0.4193932110758D-01 0.4291882736274D-01 0.4392097415138D-01 0.4494627631115D-01 + 0.4599526008193D-01 0.4706846334735D-01 0.4816643588104D-01 0.4928973959763D-01 + 0.5043894880863D-01 0.5161465048329D-01 0.5281744451445D-01 0.5404794398948D-01 + 0.5530677546647D-01 0.5659457925562D-01 0.5791200970601D-01 0.5925973549779D-01 + 0.6063843993988D-01 0.6204882127328D-01 0.6349159298001D-01 0.6496748409788D-01 + 0.6647723954103D-01 0.6802162042643D-01 0.6960140440641D-01 0.7121738600725D-01 + 0.7287037697395D-01 0.7456120662128D-01 0.7629072219118D-01 0.7805978921657D-01 + 0.7986929189166D-01 0.8172013344892D-01 0.8361323654265D-01 0.8554954363940D-01 + 0.8753001741513D-01 0.8955564115940D-01 0.9162741918654D-01 0.9374637725383D-01 + 0.9591356298698D-01 0.9813004631275D-01 0.1003969198990D+00 0.1027152996019D+00 + 0.1050863249211D+00 0.1075111594618D+00 0.1099909914051D+00 0.1125270339855D+00 + 0.1151205259766D+00 0.1177727321842D+00 0.1204849439476D+00 0.1232584796489D+00 + 0.1260946852301D+00 0.1289949347182D+00 0.1319606307590D+00 0.1349932051583D+00 + 0.1380941194317D+00 0.1412648653632D+00 0.1445069655708D+00 0.1478219740820D+00 + 0.1512114769165D+00 0.1546770926778D+00 0.1582204731535D+00 0.1618433039236D+00 + 0.1655473049771D+00 0.1693342313383D+00 0.1732058737000D+00 0.1771640590662D+00 + 0.1812106514032D+00 0.1853475522988D+00 0.1895767016304D+00 0.1939000782413D+00 + 0.1983197006251D+00 0.2028376276193D+00 0.2074559591063D+00 0.2121768367234D+00 + 0.2170024445803D+00 0.2219350099852D+00 0.2269768041788D+00 0.2321301430764D+00 + 0.2373973880172D+00 0.2427809465221D+00 0.2482832730585D+00 0.2539068698131D+00 + 0.2596542874715D+00 0.2655281260047D+00 0.2715310354636D+00 0.2776657167793D+00 + 0.2839349225700D+00 0.2903414579550D+00 0.2968881813739D+00 0.3035780054119D+00 + 0.3104138976312D+00 0.3173988814070D+00 0.3245360367687D+00 0.3318285012460D+00 + 0.3392794707188D+00 0.3468922002717D+00 0.3546700050516D+00 0.3626162611285D+00 + 0.3707344063591D+00 0.3790279412529D+00 0.3875004298396D+00 0.3961555005386D+00 + 0.4049968470283D+00 0.4140282291162D+00 0.4232534736091D+00 0.4326764751811D+00 + 0.4423011972414D+00 0.4521316727988D+00 0.4621720053237D+00 0.4724263696067D+00 + 0.4828990126121D+00 0.4935942543268D+00 0.5045164886027D+00 0.5156701839924D+00 + 0.5270598845772D+00 0.5386902107861D+00 0.5505658602051D+00 0.5626916083760D+00 + 0.5750723095830D+00 0.5877128976270D+00 0.6006183865849D+00 0.6137938715547D+00 + 0.6272445293836D+00 0.6409756193782D+00 0.6549924839961D+00 0.6693005495166D+00 + 0.6839053266899D+00 0.6988124113627D+00 0.7140274850788D+00 0.7295563156538D+00 + 0.7454047577210D+00 0.7615787532478D+00 0.7780843320207D+00 0.7949276120969D+00 + 0.8121148002200D+00 0.8296521921997D+00 0.8475461732513D+00 0.8658032182945D+00 + 0.8844298922086D+00 0.9034328500427D+00 0.9228188371772D+00 0.9425946894360D+00 + 0.9627673331456D+00 0.9833437851400D+00 0.1004331152707D+01 0.1025736633476D+01 + 0.1047567515241D+01 0.1069831175720D+01 0.1092535082243D+01 0.1115686791375D+01 + 0.1139293948457D+01 0.1163364287075D+01 0.1187905628445D+01 0.1212925880722D+01 + 0.1238433038208D+01 0.1264435180485D+01 0.1290940471443D+01 0.1317957158220D+01 + 0.1345493570030D+01 0.1373558116898D+01 0.1402159288280D+01 0.1431305651569D+01 + 0.1461005850494D+01 0.1491268603389D+01 0.1522102701342D+01 0.1553517006218D+01 + 0.1585520448546D+01 0.1618122025271D+01 0.1651330797361D+01 0.1685155887276D+01 + 0.1719606476280D+01 0.1754691801602D+01 0.1790421153434D+01 0.1826803871767D+01 + 0.1863849343063D+01 0.1901566996742D+01 0.1939966301501D+01 0.1979056761446D+01 + 0.2018847912032D+01 0.2059349315815D+01 0.2100570557999D+01 0.2142521241790D+01 + 0.2185210983528D+01 0.2228649407614D+01 0.2272846141215D+01 0.2317810808747D+01 + 0.2363553026124D+01 0.2410082394775D+01 0.2457408495423D+01 0.2505540881617D+01 + 0.2554489073015D+01 0.2604262548407D+01 0.2654870738488D+01 0.2706323018355D+01 + 0.2758628699743D+01 0.2811797022979D+01 0.2865837148659D+01 0.2920758149043D+01 + 0.2976568999160D+01 0.3033278567615D+01 0.3090895607108D+01 0.3149428744640D+01 + 0.3208886471423D+01 0.3269277132479D+01 0.3330608915918D+01 0.3392889841912D+01 + 0.3456127751341D+01 0.3520330294118D+01 0.3585504917195D+01 0.3651658852234D+01 + 0.3718799102956D+01 0.3786932432154D+01 0.3856065348377D+01 0.3926204092282D+01 + 0.3997354622651D+01 0.4069522602076D+01 0.4142713382310D+01 0.4216931989288D+01 + 0.4292183107814D+01 0.4368471065927D+01 0.4445799818928D+01 0.4524172933100D+01 + 0.4603593569097D+01 0.4684064465021D+01 0.4765587919192D+01 0.4848165772611D+01 + 0.4931799391130D+01 0.5016489647323D+01 0.5102236902085D+01 0.5189040985952D+01 + 0.5276901180158D+01 0.5365816197444D+01 0.5455784162617D+01 0.5546802592894D+01 + 0.5638868378017D+01 0.5731977760181D+01 0.5826126313769D+01 0.5921308924927D+01 + 0.6017519770983D+01 0.6114752299744D+01 0.6212999208681D+01 0.6312252424025D+01 + 0.6412503079799D+01 0.6513741496818D+01 0.6615957161666D+01 0.6719138705689D+01 + 0.6823273884037D+01 0.6928349554769D+01 0.7034351658067D+01 0.7141265195588D+01 + 0.7249074209985D+01 0.7357761764637D+01 0.7467309923627D+01 0.7577699732003D+01 + 0.7688911196366D+01 0.7800923265826D+01 0.7913713813378D+01 0.8027259617727D+01 + 0.8141536345630D+01 0.8256518534789D+01 0.8372179577355D+01 0.8488491704090D+01 + 0.8605425969248D+01 0.8722952236222D+01 0.8841039164025D+01 0.8959654194655D+01 + 0.9078763541413D+01 0.9198332178230D+01 0.9318323830066D+01 0.9438700964464D+01 + 0.9559424784293D+01 0.9680455221780D+01 0.9801750933887D+01 0.9923269299099D+01 + 0.1004496641570D+02 0.1016679710163D+02 0.1028871489593D+02 0.1041067206198D+02 + 0.1053261959239D+02 0.1065450721594D+02 0.1077628340626D+02 0.1089789539267D+02 + 0.1101928917306D+02 0.1114040952889D+02 0.1126120004259D+02 0.1138160311709D+02 + 0.1150155999788D+02 0.1162101079752D+02 0.1173989452270D+02 0.1185814910389D+02 + 0.1197571142774D+02 0.1209251737221D+02 0.1220850184455D+02 0.1232359882222D+02 + 0.1243774139668D+02 0.1255086182033D+02 0.1266289155645D+02 0.1277376133233D+02 + 0.1288340119558D+02 0.1299174057364D+02 0.1309870833671D+02 0.1320423286383D+02 + 0.1330824211245D+02 0.1341066369131D+02 0.1351142493681D+02 0.1361045299271D+02 + 0.1370767489335D+02 0.1380301765027D+02 0.1389640834224D+02 0.1398777420882D+02 + 0.1407704274716D+02 0.1416414181234D+02 0.1424899972093D+02 0.1433154535791D+02 + 0.1441170828680D+02 0.1448941886294D+02 0.1456460834990D+02 0.1463720903887D+02 + 0.1470715437095D+02 0.1477437906225D+02 0.1483881923166D+02 0.1490041253114D+02 + 0.1495909827839D+02 0.1501481759178D+02 0.1506751352732D+02 0.1511713121747D+02 + 0.1516361801165D+02 0.1520692361818D+02 0.1524700024742D+02 0.1528380275595D+02 + 0.1531728879140D+02 0.1534741893776D+02 0.1537415686084D+02 0.1539746945363D+02 + 0.1541732698111D+02 0.1543370322439D+02 0.1544657562364D+02 0.1545592541956D+02 + 0.1546173779302D+02 0.1546400200242D+02 0.1546271151843D+02 0.1545786415570D+02 + 0.1544946220111D+02 0.1543751253809D+02 0.1542202676661D+02 0.1540302131844D+02 + 0.1538051756708D+02 0.1535454193202D+02 0.1532512597682D+02 0.1529230650045D+02 + 0.1525612562157D+02 0.1521663085508D+02 0.1517387518057D+02 0.1512791710213D+02 + 0.1507882069905D+02 0.1502665566690D+02 0.1497149734847D+02 0.1491342675424D+02 + 0.1485253057170D+02 0.1478890116319D+02 0.1472263655178D+02 0.1465384039476D+02 + 0.1458262194423D+02 0.1450909599456D+02 0.1443338281613D+02 0.1435560807511D+02 + 0.1427590273888D+02 0.1419440296685D+02 0.1411124998625D+02 0.1402658995277D+02 + 0.1394057379573D+02 0.1385335704764D+02 0.1376509965795D+02 0.1367596579089D+02 + 0.1358612360737D+02 0.1349574503081D+02 0.1340500549696D+02 0.1331408368786D+02 + 0.1322316124986D+02 0.1313242249599D+02 0.1304205409292D+02 0.1295224473262D+02 + 0.1286318478926D+02 0.1277506596148D+02 0.1268808090072D+02 0.1260242282594D+02 + 0.1251828512526D+02 0.1243586094535D+02 0.1235534276899D+02 0.1227692198172D+02 + 0.1220078842830D+02 0.1212712995982D+02 0.1205613197253D+02 0.1198797693913D+02 + 0.1192284393379D+02 0.1186090815186D+02 0.1180234042546D+02 0.1174730673615D+02 + 0.1169596772603D+02 0.1164847820834D+02 0.1160498667924D+02 0.1156563483188D+02 + 0.1153055707436D+02 0.1149988005301D+02 0.1147372218250D+02 0.1145219318434D+02 + 0.1143539363525D+02 0.1142341452711D+02 0.1141633683999D+02 0.1141423112993D+02 + 0.1141715713298D+02 0.1142516338731D+02 0.1143828687474D+02 0.1145655268355D+02 + 0.1147997369390D+02 0.1150855028761D+02 0.1154227008374D+02 0.1158110770138D+02 + 0.1162502455129D+02 0.1167396865756D+02 0.1172787451079D+02 0.1178666295396D+02 + 0.1185024110228D+02 0.1191850229803D+02 0.1199132610159D+02 0.1206857831946D+02 + 0.1215011107019D+02 0.1223576288907D+02 0.1232535887199D+02 0.1241871085933D+02 + 0.1251561765997D+02 0.1261586531600D+02 0.1271922740805D+02 0.1282546540151D+02 + 0.1293432903330D+02 0.1304555673916D+02 0.1315887612096D+02 0.1327400445348D+02 + 0.1339064923005D+02 0.1350850874625D+02 0.1362727272054D+02 0.1374662295087D+02 + 0.1386623400591D+02 0.1398577394943D+02 0.1410490509638D+02 0.1422328479880D+02 + 0.1434056625987D+02 0.1445639937388D+02 0.1457043159027D+02 0.1468230879914D+02 + 0.1479167623614D+02 0.1489817940404D+02 0.1500146500841D+02 0.1510118190471D+02 + 0.1519698205391D+02 0.1528852148379D+02 0.1537546125281D+02 0.1545746841364D+02 + 0.1553421697307D+02 0.1560538884523D+02 0.1567067479483D+02 0.1572977536717D+02 + 0.1578240180176D+02 0.1582827692612D+02 0.1586713602663D+02 0.1589872769311D+02 + 0.1592281463392D+02 0.1593917445849D+02 0.1594760042409D+02 0.1594790214378D+02 + 0.1593990625272D+02 0.1592345702984D+02 0.1589841697221D+02 0.1586466731948D+02 + 0.1582210852585D+02 0.1577066067732D+02 0.1571026385193D+02 0.1564087842120D+02 + 0.1556248529064D+02 0.1547508607802D+02 0.1537870322780D+02 0.1527338006062D+02 + 0.1515918075676D+02 0.1503619027308D+02 0.1490451419267D+02 0.1476427850715D+02 + 0.1461562933169D+02 0.1445873255288D+02 0.1429377341010D+02 0.1412095601137D+02 + 0.1394050278444D+02 0.1375265386499D+02 0.1355766642312D+02 0.1335581393054D+02 + 0.1314738537038D+02 0.1293268439219D+02 0.1271202841511D+02 0.1248574768189D+02 + 0.1225418426740D+02 0.1201769104500D+02 0.1177663061449D+02 0.1153137419578D+02 + 0.1128230049248D+02 0.1102979452961D+02 0.1077424647032D+02 0.1051605041603D+02 + 0.1025560319513D+02 0.9993303145083D+01 0.9729548892983D+01 0.9464738139829D+01 + 0.9199266453606D+01 0.8933526076402D+01 0.8667904750745D+01 0.8402784570301D+01 + 0.8138540859996D+01 0.7875541090527D+01 0.7614143832090D+01 0.7354697751983D+01 + 0.7097540660550D+01 0.6842998609696D+01 0.6591385047920D+01 0.6343000035605D+01 + 0.6098129523858D+01 0.5857044699944D+01 0.5620001401934D+01 0.5387239604814D+01 + 0.5158982979846D+01 0.4935438528573D+01 0.4716796292366D+01 0.4503229137976D+01 + 0.4294892619056D+01 0.4091924913152D+01 0.3894446833193D+01 0.3702561912045D+01 + 0.3516356558237D+01 0.3335900280537D+01 0.3161245978670D+01 0.2992430297065D+01 + 0.2829474038194D+01 0.2672382631762D+01 0.2521146655720D+01 0.2375742404881D+01 + 0.2236132502695D+01 0.2102266551639D+01 0.1974081817541D+01 0.1851503943111D+01 + 0.1734447685940D+01 0.1622817676200D+01 0.1516509189368D+01 0.1415408929331D+01 + 0.1319395817360D+01 0.1228341782531D+01 0.1142112549373D+01 0.1060568418635D+01 + 0.9835650373019D+00 0.9109541541726D+00 0.8425843575459D+00 0.7783017917968D+00 + 0.7179508498817D+00 0.6613748390683D+00 0.6084166174653D+00 0.5589191992012D+00 + 0.5127263263911D+00 0.4696830063190D+00 0.4296360125529D+00 0.3924343490009D+00 + 0.3579296762027D+00 0.3259766994340D+00 0.2964335184742D+00 0.2691619391536D+00 + 0.2440277470488D+00 0.2209009439361D+00 0.1996559478365D+00 0.1801717576938D+00 + 0.1623320839184D+00 0.1460254461990D+00 0.1311452401368D+00 0.1175897743854D+00 + 0.1052622800912D+00 0.9407089451527D-01 0.8392862078550D-01 0.7475326577690D-01 + 0.6646735814128D-01 0.5899804851766D-01 0.5227699394346D-01 0.4624022845899D-01 + 0.4082802185442D-01 0.3598472845105D-01 0.3165862773800D-01 0.2780175860384D-01 + 0.2436974881146D-01 0.2132164126495D-01 0.1861971851162D-01 0.1622932681167D-01 + 0.1411870099424D-01 0.1225879120292D-01 0.1062309251766D-01 0.9187478324824D-02 + 0.7930038194170D-02 0.6830920911119D-02 0.5872183206948D-02 0.5037644628161D-02 + 0.4312748890659D-02 0.3684431974697D-02 0.3140997133459D-02 0.2671996911721D-02 + 0.2268122201696D-02 0.1921098300832D-02 0.1623587881022D-02 0.1369100730387D-02 + 0.1151910087150D-02 0.9669753500508D-03 0.8098709208516D-03 0.6767209113939D-03 + 0.5641394300578D-03 0.4691761498429D-03 0.3892668522563D-03 0.3221886372696D-03 + 0.2660194893607D-03 0.2191018926233D-03 0.1800101936858D-03 0.1475214192933D-03 + 0.1205892654847D-03 0.9832098695562D-04 0.7995692809159D-04 0.6485245095860D-04 + 0.5246202996510D-04 0.4232529769133D-04 0.3405484129524D-04 0.2732556374477D-04 + 0.2186543872353D-04 0.1744750226736D-04 0.1388293789508D-04 0.1101512510421D-04 + 0.8714533541124D-05 0.6874356872787D-05 0.5406791351919D-05 0.4239874261002D-05 + 0.3314806839624D-05 0.2583694952262D-05 0.2007648657315D-05 0.1555189018603D-05 + 0.1200916989437D-05 0.9244050332163D-06 0.7092773630705D-06 0.5424493283134D-06 + 0.4135005904089D-06 0.3141603589352D-06 0.2378861413798D-06 0.1795202409555D-06 + 0.1350106538765D-06 0.1011851095086D-06 0.7556879909866D-07 0.5623788451178D-07 + 0.4170219815814D-07 0.3081166707088D-07 0.2268194336078D-07 0.1663552297805D-07 + 0.1215530542863D-07 0.8848107127806D-08 0.6416106613217D-08 0.4634585104140D-08 + 0.3334643304910D-08 0.2389835688104D-08 0.1705876062949D-08 0.1212741020005D-08 + 0.8586376559590D-09 0.6054146003728D-09 0.4250856698627D-09 0.2972075512731D-09 + 0.2069101606973D-09 0.1434236365115D-09 0.9898160505409D-10 0.6800804519963D-10 + 0.4651712787494D-10 0.3167310042586D-10 0.2146695649341D-10 0.1448079937139D-10 + 0.9722622861678D-11 0.6496070631129D-11 0.4319651023999D-11 0.2858591661735D-11 + 0.1882503214946D-11 0.1233598363270D-11 0.8043412065319D-12 0.5218060130221D-12 + 0.3367856512696D-12 0.2162455335843D-12 0.1381220475631D-12 0.8775552000331D-13 diff --git a/Test/Fe16_non_collinear/v_fe16.7 b/Test/Fe16_non_collinear/v_fe16.7 new file mode 100755 index 000000000..f3c4e967f --- /dev/null +++ b/Test/Fe16_non_collinear/v_fe16.7 @@ -0,0 +1,1542 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Fe. + 2 0.0000000000000D+00 + LSMS: xx z= 26. xvalws= 5.22926 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728400909D+02-0.5199725115555D+02-0.5199721790459D+02-0.5199718425142D+02 +-0.5199715019116D+02-0.5199711571889D+02-0.5199708082964D+02-0.5199704551834D+02 +-0.5199700977990D+02-0.5199697360915D+02-0.5199693700086D+02-0.5199689994973D+02 +-0.5199686245042D+02-0.5199682449748D+02-0.5199678608545D+02-0.5199674720876D+02 +-0.5199670786180D+02-0.5199666803887D+02-0.5199662773421D+02-0.5199658694201D+02 +-0.5199654565635D+02-0.5199650387127D+02-0.5199646158073D+02-0.5199641877860D+02 +-0.5199637545872D+02-0.5199633161480D+02-0.5199628724051D+02-0.5199624232942D+02 +-0.5199619687506D+02-0.5199615087084D+02-0.5199610431012D+02-0.5199605718616D+02 +-0.5199600949214D+02-0.5199596122116D+02-0.5199591236626D+02-0.5199586292036D+02 +-0.5199581287632D+02-0.5199576222688D+02-0.5199571096474D+02-0.5199565908248D+02 +-0.5199560657259D+02-0.5199555342748D+02-0.5199549963947D+02-0.5199544520078D+02 +-0.5199539010352D+02-0.5199533433975D+02-0.5199527790139D+02-0.5199522078028D+02 +-0.5199516296816D+02-0.5199510445666D+02-0.5199504523733D+02-0.5199498530160D+02 +-0.5199492464081D+02-0.5199486324617D+02-0.5199480110883D+02-0.5199473821977D+02 +-0.5199467456990D+02-0.5199461015004D+02-0.5199454495085D+02-0.5199447896290D+02 +-0.5199441217666D+02-0.5199434458246D+02-0.5199427617052D+02-0.5199420693096D+02 +-0.5199413685375D+02-0.5199406592876D+02-0.5199399414573D+02-0.5199392149428D+02 +-0.5199384796390D+02-0.5199377354396D+02-0.5199369822368D+02-0.5199362199218D+02 +-0.5199354483843D+02-0.5199346675127D+02-0.5199338771940D+02-0.5199330773139D+02 +-0.5199322677567D+02-0.5199314484053D+02-0.5199306191412D+02-0.5199297798443D+02 +-0.5199289303934D+02-0.5199280706654D+02-0.5199272005361D+02-0.5199263198797D+02 +-0.5199254285685D+02-0.5199245264737D+02-0.5199236134649D+02-0.5199226894099D+02 +-0.5199217541751D+02-0.5199208076251D+02-0.5199198496230D+02-0.5199188800302D+02 +-0.5199178987064D+02-0.5199169055096D+02-0.5199159002963D+02-0.5199148829207D+02 +-0.5199138532359D+02-0.5199128110928D+02-0.5199117563407D+02-0.5199106888269D+02 +-0.5199096083969D+02-0.5199085148944D+02-0.5199074081613D+02-0.5199062880373D+02 +-0.5199051543604D+02-0.5199040069664D+02-0.5199028456895D+02-0.5199016703615D+02 +-0.5199004808124D+02-0.5198992768700D+02-0.5198980583600D+02-0.5198968251063D+02 +-0.5198955769302D+02-0.5198943136512D+02-0.5198930350863D+02-0.5198917410506D+02 +-0.5198904313569D+02-0.5198891058155D+02-0.5198877642345D+02-0.5198864064200D+02 +-0.5198850321751D+02-0.5198836413012D+02-0.5198822335968D+02-0.5198808088582D+02 +-0.5198793668793D+02-0.5198779074512D+02-0.5198764303627D+02-0.5198749354000D+02 +-0.5198734223467D+02-0.5198718909837D+02-0.5198703410894D+02-0.5198687724393D+02 +-0.5198671848065D+02-0.5198655779610D+02-0.5198639516703D+02-0.5198623056988D+02 +-0.5198606398084D+02-0.5198589537577D+02-0.5198572473026D+02-0.5198555201962D+02 +-0.5198537721883D+02-0.5198520030257D+02-0.5198502124524D+02-0.5198484002091D+02 +-0.5198465660333D+02-0.5198447096595D+02-0.5198428308188D+02-0.5198409292391D+02 +-0.5198390046450D+02-0.5198370567579D+02-0.5198350852955D+02-0.5198330899725D+02 +-0.5198310704998D+02-0.5198290265850D+02-0.5198269579318D+02-0.5198248642408D+02 +-0.5198227452087D+02-0.5198206005285D+02-0.5198184298896D+02-0.5198162329776D+02 +-0.5198140094741D+02-0.5198117590571D+02-0.5198094814005D+02-0.5198071761744D+02 +-0.5198048430449D+02-0.5198024816738D+02-0.5198000917191D+02-0.5197976728344D+02 +-0.5197952246692D+02-0.5197927468690D+02-0.5197902390745D+02-0.5197877009224D+02 +-0.5197851320449D+02-0.5197825320698D+02-0.5197799006201D+02-0.5197772373146D+02 +-0.5197745417673D+02-0.5197718135875D+02-0.5197690523796D+02-0.5197662577437D+02 +-0.5197634292744D+02-0.5197605665620D+02-0.5197576691913D+02-0.5197547367423D+02 +-0.5197517687900D+02-0.5197487649041D+02-0.5197457246489D+02-0.5197426475838D+02 +-0.5197395332627D+02-0.5197363812338D+02-0.5197331910403D+02-0.5197299622195D+02 +-0.5197266943031D+02-0.5197233868173D+02-0.5197200392824D+02-0.5197166512128D+02 +-0.5197132221174D+02-0.5197097514984D+02-0.5197062388528D+02-0.5197026836709D+02 +-0.5196990854370D+02-0.5196954436291D+02-0.5196917577189D+02-0.5196880271716D+02 +-0.5196842514461D+02-0.5196804299945D+02-0.5196765622622D+02-0.5196726476881D+02 +-0.5196686857041D+02-0.5196646757354D+02-0.5196606171998D+02-0.5196565095085D+02 +-0.5196523520651D+02-0.5196481442664D+02-0.5196438855015D+02-0.5196395751522D+02 +-0.5196352125928D+02-0.5196307971901D+02-0.5196263283028D+02-0.5196218052823D+02 +-0.5196172274718D+02-0.5196125942066D+02-0.5196079048138D+02-0.5196031586126D+02 +-0.5195983549135D+02-0.5195934930191D+02-0.5195885722231D+02-0.5195835918107D+02 +-0.5195785510585D+02-0.5195734492343D+02-0.5195682855969D+02-0.5195630593961D+02 +-0.5195577698725D+02-0.5195524162577D+02-0.5195469977736D+02-0.5195415136330D+02 +-0.5195359630387D+02-0.5195303451841D+02-0.5195246592528D+02-0.5195189044181D+02 +-0.5195130798435D+02-0.5195071846824D+02-0.5195012180777D+02-0.5194951791619D+02 +-0.5194890670569D+02-0.5194828808741D+02-0.5194766197137D+02-0.5194702826653D+02 +-0.5194638688071D+02-0.5194573772064D+02-0.5194508069188D+02-0.5194441569885D+02 +-0.5194374264482D+02-0.5194306143187D+02-0.5194237196087D+02-0.5194167413149D+02 +-0.5194096784220D+02-0.5194025299021D+02-0.5193952947146D+02-0.5193879718066D+02 +-0.5193805601119D+02-0.5193730585519D+02-0.5193654660341D+02-0.5193577814533D+02 +-0.5193500036904D+02-0.5193421316129D+02-0.5193341640742D+02-0.5193260999141D+02 +-0.5193179379578D+02-0.5193096770164D+02-0.5193013158865D+02-0.5192928533501D+02 +-0.5192842881739D+02-0.5192756191098D+02-0.5192668448947D+02-0.5192579642497D+02 +-0.5192489758803D+02-0.5192398784765D+02-0.5192306707119D+02-0.5192213512442D+02 +-0.5192119187145D+02-0.5192023717474D+02-0.5191927089505D+02-0.5191829289146D+02 +-0.5191730302133D+02-0.5191630114025D+02-0.5191528710207D+02-0.5191426075883D+02 +-0.5191322196077D+02-0.5191217055632D+02-0.5191110639202D+02-0.5191002931255D+02 +-0.5190893916069D+02-0.5190783577729D+02-0.5190671900126D+02-0.5190558866954D+02 +-0.5190444461705D+02-0.5190328667673D+02-0.5190211467945D+02-0.5190092845399D+02 +-0.5189972782709D+02-0.5189851262330D+02-0.5189728266508D+02-0.5189603777267D+02 +-0.5189477776415D+02-0.5189350245533D+02-0.5189221165981D+02-0.5189090518885D+02 +-0.5188958285145D+02-0.5188824445423D+02-0.5188688980147D+02-0.5188551869503D+02 +-0.5188413093435D+02-0.5188272631641D+02-0.5188130463569D+02-0.5187986568418D+02 +-0.5187840925129D+02-0.5187693512386D+02-0.5187544308611D+02-0.5187393291962D+02 +-0.5187240440329D+02-0.5187085731330D+02-0.5186929142309D+02-0.5186770650332D+02 +-0.5186610232183D+02-0.5186447864362D+02-0.5186283523081D+02-0.5186117184259D+02 +-0.5185948823518D+02-0.5185778416183D+02-0.5185605937277D+02-0.5185431361514D+02 +-0.5185254663297D+02-0.5185075816718D+02-0.5184894795548D+02-0.5184711573237D+02 +-0.5184526122909D+02-0.5184338417356D+02-0.5184148429039D+02-0.5183956130079D+02 +-0.5183761492255D+02-0.5183564486998D+02-0.5183365085389D+02-0.5183163258155D+02 +-0.5182958975660D+02-0.5182752207907D+02-0.5182542924529D+02-0.5182331094785D+02 +-0.5182116687559D+02-0.5181899671350D+02-0.5181680014270D+02-0.5181457684041D+02 +-0.5181232647986D+02-0.5181004873028D+02-0.5180774325683D+02-0.5180540972054D+02 +-0.5180304777830D+02-0.5180065708277D+02-0.5179823728232D+02-0.5179578802103D+02 +-0.5179330893860D+02-0.5179079967027D+02-0.5178825984684D+02-0.5178568909453D+02 +-0.5178308703501D+02-0.5178045328526D+02-0.5177778745757D+02-0.5177508915948D+02 +-0.5177235799366D+02-0.5176959355795D+02-0.5176679544522D+02-0.5176396324334D+02 +-0.5176109653512D+02-0.5175819489823D+02-0.5175525790517D+02-0.5175228512318D+02 +-0.5174927611419D+02-0.5174623043474D+02-0.5174314763592D+02-0.5174002726332D+02 +-0.5173686885694D+02-0.5173367195115D+02-0.5173043607457D+02-0.5172716075006D+02 +-0.5172384549462D+02-0.5172048981932D+02-0.5171709322923D+02-0.5171365522335D+02 +-0.5171017529452D+02-0.5170665292940D+02-0.5170308760833D+02-0.5169947880525D+02 +-0.5169582598771D+02-0.5169212861671D+02-0.5168838614662D+02-0.5168459802518D+02 +-0.5168076369333D+02-0.5167688258518D+02-0.5167295412791D+02-0.5166897774168D+02 +-0.5166495283960D+02-0.5166087882755D+02-0.5165675510418D+02-0.5165258106080D+02 +-0.5164835608125D+02-0.5164407954186D+02-0.5163975081138D+02-0.5163536925080D+02 +-0.5163093421337D+02-0.5162644504442D+02-0.5162190108131D+02-0.5161730165335D+02 +-0.5161264608164D+02-0.5160793367906D+02-0.5160316375011D+02-0.5159833559084D+02 +-0.5159344848875D+02-0.5158850172268D+02-0.5158349456272D+02-0.5157842627009D+02 +-0.5157329609709D+02-0.5156810328692D+02-0.5156284707365D+02-0.5155752668206D+02 +-0.5155214132756D+02-0.5154669021608D+02-0.5154117254396D+02-0.5153558749786D+02 +-0.5152993425461D+02-0.5152421198113D+02-0.5151841983433D+02-0.5151255696093D+02 +-0.5150662249744D+02-0.5150061557002D+02-0.5149453529428D+02-0.5148838077528D+02 +-0.5148215110737D+02-0.5147584537403D+02-0.5146946264782D+02-0.5146300199022D+02 +-0.5145646245151D+02-0.5144984307067D+02-0.5144314287525D+02-0.5143636088122D+02 +-0.5142949609291D+02-0.5142254750281D+02-0.5141551409151D+02-0.5140839482753D+02 +-0.5140118866721D+02-0.5139389455459D+02-0.5138651142128D+02-0.5137903818632D+02 +-0.5137147375605D+02-0.5136381702401D+02-0.5135606687078D+02-0.5134822216388D+02 +-0.5134028175756D+02-0.5133224449278D+02-0.5132410919702D+02-0.5131587468413D+02 +-0.5130753975423D+02-0.5129910319357D+02-0.5129056377438D+02-0.5128192025477D+02 +-0.5127317137854D+02-0.5126431587514D+02-0.5125535245940D+02-0.5124627983153D+02 +-0.5123709667690D+02-0.5122780166596D+02-0.5121839345403D+02-0.5120887068125D+02 +-0.5119923197240D+02-0.5118947593678D+02-0.5117960116805D+02-0.5116960624416D+02 +-0.5115948972712D+02-0.5114925016296D+02-0.5113888608154D+02-0.5112839599644D+02 +-0.5111777840483D+02-0.5110703178733D+02-0.5109615460788D+02-0.5108514531363D+02 +-0.5107400233480D+02-0.5106272408452D+02-0.5105130895877D+02-0.5103975533619D+02 +-0.5102806157801D+02-0.5101622602790D+02-0.5100424701185D+02-0.5099212283803D+02 +-0.5097985179674D+02-0.5096743216021D+02-0.5095486218256D+02-0.5094214009961D+02 +-0.5092926412887D+02-0.5091623246932D+02-0.5090304330139D+02-0.5088969478681D+02 +-0.5087618506855D+02-0.5086251227064D+02-0.5084867449820D+02-0.5083466983722D+02 +-0.5082049635455D+02-0.5080615209778D+02-0.5079163509518D+02-0.5077694335558D+02 +-0.5076207486834D+02-0.5074702760324D+02-0.5073179951042D+02-0.5071638852033D+02 +-0.5070079254364D+02-0.5068500947122D+02-0.5066903717403D+02-0.5065287350315D+02 +-0.5063651628963D+02-0.5061996334457D+02-0.5060321245898D+02-0.5058626140382D+02 +-0.5056910792994D+02-0.5055174976809D+02-0.5053418462884D+02-0.5051641020267D+02 +-0.5049842415989D+02-0.5048022415067D+02-0.5046180780505D+02-0.5044317273295D+02 +-0.5042431652422D+02-0.5040523674861D+02-0.5038593095586D+02-0.5036639667573D+02 +-0.5034663141803D+02-0.5032663267268D+02-0.5030639790981D+02-0.5028592457977D+02 +-0.5026521011328D+02-0.5024425192145D+02-0.5022304739591D+02-0.5020159390892D+02 +-0.5017988881346D+02-0.5015792944334D+02-0.5013571311336D+02-0.5011323711944D+02 +-0.5009049873873D+02-0.5006749522980D+02-0.5004422383280D+02-0.5002068176959D+02 +-0.4999686624397D+02-0.4997277444186D+02-0.4994840353146D+02-0.4992375066350D+02 +-0.4989881297144D+02-0.4987358757171D+02-0.4984807156389D+02-0.4982226203106D+02 +-0.4979615603991D+02-0.4976975064117D+02-0.4974304286974D+02-0.4971602974502D+02 +-0.4968870827126D+02-0.4966107543776D+02-0.4963312821924D+02-0.4960486357616D+02 +-0.4957627845502D+02-0.4954736978871D+02-0.4951813449683D+02-0.4948856948612D+02 +-0.4945867165071D+02-0.4942843787257D+02-0.4939786502185D+02-0.4936694995729D+02 +-0.4933568952659D+02-0.4930408056681D+02-0.4927211990478D+02-0.4923980435752D+02 +-0.4920713073265D+02-0.4917409582880D+02-0.4914069643607D+02-0.4910692933642D+02 +-0.4907279130416D+02-0.4903827910633D+02-0.4900338950319D+02-0.4896811924867D+02 +-0.4893246509079D+02-0.4889642377211D+02-0.4885999203021D+02-0.4882316659813D+02 +-0.4878594420482D+02-0.4874832157556D+02-0.4871029543247D+02-0.4867186249491D+02 +-0.4863301947995D+02-0.4859376310277D+02-0.4855409007715D+02-0.4851399711583D+02 +-0.4847348093100D+02-0.4843253823466D+02-0.4839116573905D+02-0.4834936015704D+02 +-0.4830711820251D+02-0.4826443659074D+02-0.4822131203876D+02-0.4817774126566D+02 +-0.4813372099301D+02-0.4808924794511D+02-0.4804431884930D+02-0.4799893043625D+02 +-0.4795307944023D+02-0.4790676259938D+02-0.4785997665588D+02-0.4781271835619D+02 +-0.4776498445124D+02-0.4771677169657D+02-0.4766807685247D+02-0.4761889668409D+02 +-0.4756922796153D+02-0.4751906745988D+02-0.4746841195927D+02-0.4741725824487D+02 +-0.4736560310686D+02-0.4731344334036D+02-0.4726077574537D+02-0.4720759712663D+02 +-0.4715390429349D+02-0.4709969405976D+02-0.4704496324345D+02-0.4698970866656D+02 +-0.4693392715482D+02-0.4687761553742D+02-0.4682077064661D+02-0.4676338931742D+02 +-0.4670546838725D+02-0.4664700469545D+02-0.4658799508292D+02-0.4652843639162D+02 +-0.4646832546412D+02-0.4640765914308D+02-0.4634643427075D+02-0.4628464768840D+02 +-0.4622229623583D+02-0.4615937675077D+02-0.4609588606835D+02-0.4603182102046D+02 +-0.4596717843531D+02-0.4590195513672D+02-0.4583614794369D+02-0.4576975366979D+02 +-0.4570276912265D+02-0.4563519110351D+02-0.4556701640665D+02-0.4549824181908D+02 +-0.4542886412007D+02-0.4535888008084D+02-0.4528828646428D+02-0.4521708002473D+02 +-0.4514525750785D+02-0.4507281565054D+02-0.4499975118097D+02-0.4492606081870D+02 +-0.4485174127497D+02-0.4477678925295D+02-0.4470120144833D+02-0.4462497454985D+02 +-0.4454810524011D+02-0.4447059019649D+02-0.4439242609219D+02-0.4431360959758D+02 +-0.4423413738159D+02-0.4415400611337D+02-0.4407321246418D+02-0.4399175310947D+02 +-0.4390962473114D+02-0.4382682402010D+02-0.4374334767908D+02-0.4365919242563D+02 +-0.4357435499539D+02-0.4348883214570D+02-0.4340262065933D+02-0.4331571734857D+02 +-0.4322811905962D+02-0.4313982267710D+02-0.4305082512897D+02-0.4296112339160D+02 +-0.4287071449512D+02-0.4277959552900D+02-0.4268776364786D+02-0.4259521607738D+02 +-0.4250195012053D+02-0.4240796316384D+02-0.4231325268378D+02-0.4221781625326D+02 +-0.4212165154821D+02-0.4202475635403D+02-0.4192712857207D+02-0.4182876622603D+02 +-0.4172966746809D+02-0.4162983058491D+02-0.4152925400326D+02-0.4142793629535D+02 +-0.4132587618362D+02-0.4122307254514D+02-0.4111952441526D+02-0.4101523099069D+02 +-0.4091019163177D+02-0.4080440586392D+02-0.4069787337814D+02-0.4059059403052D+02 +-0.4048256784069D+02-0.4037379498919D+02-0.4026427581359D+02-0.4015401080347D+02 +-0.4004300059408D+02-0.3993124595881D+02-0.3981874780047D+02-0.3970550714118D+02 +-0.3959152511128D+02-0.3947680293704D+02-0.3936134192738D+02-0.3924514345974D+02 +-0.3912820896514D+02-0.3901053991273D+02-0.3889213779388D+02-0.3877300410616D+02 +-0.3865314033730D+02-0.3853254794941D+02-0.3841122836384D+02-0.3828918294671D+02 +-0.3816641299561D+02-0.3804291972752D+02-0.3791870426838D+02-0.3779376764439D+02 +-0.3766811077544D+02-0.3754173447071D+02-0.3741463942662D+02-0.3728682622747D+02 +-0.3715829534855D+02-0.3702904716206D+02-0.3689908194568D+02-0.3676839989389D+02 +-0.3663700113198D+02-0.3650488573242D+02-0.3637205373385D+02-0.3623850516215D+02 +-0.3610424005352D+02-0.3596925847947D+02-0.3583356057318D+02-0.3569714655716D+02 +-0.3556001677183D+02-0.3542217170480D+02-0.3528361202035D+02-0.3514433858906D+02 +-0.3500435251706D+02-0.3486365517474D+02-0.3472224822457D+02-0.3458013364781D+02 +-0.3443731376977D+02-0.3429379128348D+02-0.3414956927154D+02-0.3400465122587D+02 +-0.3385904106531D+02-0.3371274315081D+02-0.3356576229817D+02-0.3341810378823D+02 +-0.3326977337430D+02-0.3312077728689D+02-0.3297112223571D+02-0.3282081540879D+02 +-0.3266986446883D+02-0.3251827754673D+02-0.3236606323235D+02-0.3221323056253D+02 +-0.3205978900636D+02-0.3190574844798D+02-0.3175111916665D+02-0.3159591181450D+02 +-0.3144013739192D+02-0.3128380722060D+02-0.3112693291460D+02-0.3096952634939D+02 +-0.3081159962896D+02-0.3065316505139D+02-0.3049423507279D+02-0.3033482226994D+02 +-0.3017493930171D+02-0.3001459886954D+02-0.2985381367711D+02-0.2969259638940D+02 +-0.2953095959141D+02-0.2936891574677D+02-0.2920647715631D+02-0.2904365591713D+02 +-0.2888046388202D+02-0.2871691261992D+02-0.2855301337730D+02-0.2838877704096D+02 +-0.2822421410237D+02-0.2805933462405D+02-0.2789414820796D+02-0.2772866396645D+02 +-0.2756289049588D+02-0.2739683585338D+02-0.2723050753680D+02-0.2706391246838D+02 +-0.2689705698223D+02-0.2672994681603D+02-0.2656258710714D+02-0.2639498239345D+02 +-0.2622713661917D+02-0.2605905314574D+02-0.2589073476829D+02-0.2572218373759D+02 +-0.2555340178776D+02-0.2538439017000D+02-0.2521514969218D+02-0.2504568076457D+02 +-0.2487598345161D+02-0.2470605752972D+02-0.2453590255090D+02-0.2436551791213D+02 +-0.2419490293015D+02-0.2402405692122D+02-0.2385297928550D+02-0.2368166959536D+02 +-0.2351012768684D+02-0.2333835375355D+02-0.2316634844181D+02-0.2299411294593D+02 +-0.2282164910224D+02-0.2264895948042D+02-0.2247604747020D+02-0.2230291736187D+02 +-0.2212957441833D+02-0.2195602493665D+02-0.2178227629680D+02-0.2160833699531D+02 +-0.2143421666157D+02-0.2125992605447D+02-0.2108547703736D+02-0.2091088252957D+02 +-0.2073615643311D+02-0.2056131353347D+02-0.2038636937454D+02-0.2021134010787D+02 +-0.2003624231780D+02-0.1986109282464D+02-0.1968590846923D+02-0.1951070588338D+02 +-0.1933550125113D+02-0.1916031006739D+02-0.1898514690054D+02-0.1881002516654D+02 +-0.1863495692195D+02-0.1845995268332D+02-0.1828502127992D+02-0.1811016974578D+02 +-0.1793540325598D+02-0.1776072511080D+02-0.1758613676940D+02-0.1741163793327D+02 +-0.1723722667775D+02-0.1706289962834D+02-0.1688865217702D+02-0.1671447873257D+02 +-0.1654037299789D+02-0.1636632826691D+02-0.1619233773325D+02-0.1601839480315D+02 +-0.1584449340510D+02-0.1567062828984D+02-0.1549679531468D+02-0.1532299170720D+02 +-0.1514921630451D+02-0.1497546976480D+02-0.1480175474939D+02-0.1462807607400D+02 +-0.1445444082871D+02-0.1428085846710D+02-0.1410734086517D+02-0.1393390235146D+02 +-0.1376055970989D+02-0.1358733215727D+02-0.1341424129731D+02-0.1324131105355D+02 +-0.1306856758305D+02-0.1289603917318D+02-0.1272375612351D+02-0.1255175061484D+02 +-0.1238005656736D+02-0.1220870948967D+02-0.1203774632043D+02-0.1186720526422D+02 +-0.1169712562320D+02-0.1152754762583D+02-0.1135851225403D+02-0.1119006106993D+02 +-0.1102223604329D+02-0.1085507938069D+02-0.1068863335731D+02-0.1052294015218D+02 +-0.1035804168776D+02-0.1019397947446D+02-0.1003079446077D+02-0.9868526889628D+01 +-0.9707216161554D+01-0.9546900704939D+01-0.9387617854023D+01-0.9229403734858D+01 +-0.9072293159592D+01-0.8916319529363D+01-0.8761514745993D+01-0.8607909132693D+01 +-0.8455531363896D+01-0.8304408404305D+01-0.8154565457227D+01-0.8006025922166D+01 +-0.7858811361682D+01-0.7712941477416D+01-0.7568434095199D+01-0.7425305159081D+01 +-0.7283568734134D+01-0.7143237017788D+01-0.7004320359504D+01-0.6866827288485D+01 +-0.6730764549154D+01-0.6596137144079D+01-0.6462948384000D+01-0.6331199944618D+01 +-0.6200891929738D+01-0.6072022940407D+01-0.5944590149603D+01-0.5818589382077D+01 +-0.5694015198898D+01-0.5570860986265D+01-0.5449119048124D+01-0.5328780702141D+01 +-0.5209836378552D+01-0.5092275721431D+01-0.4976087691897D+01-0.4861260672787D+01 +-0.4747782574321D+01-0.4635640940271D+01-0.4524823054180D+01-0.4415316045125D+01 +-0.4307106992579D+01-0.4200183029885D+01-0.4094531445869D+01-0.3990139784139D+01 +-0.3886995939600D+01-0.3785088251726D+01-0.3684405594148D+01-0.3584937460106D+01 +-0.3486674043348D+01-0.3389606314047D+01-0.3293726089348D+01-0.3199026098161D+01 +-0.3105500039868D+01-0.3013142636618D+01-0.2921949678952D+01-0.2831918064533D+01 +-0.2743045829849D+01-0.2655332174788D+01-0.2568777480092D+01-0.2483383317815D+01 +-0.2399152454962D+01-0.2316088850658D+01-0.2234197647300D+01-0.2153485156272D+01 +-0.2073958838965D+01-0.1995627283965D+01-0.1918500181413D+01-0.1842588295670D+01 +-0.1767903437522D+01-0.1694458437274D+01-0.1622267120110D+01-0.1551344285168D+01 +-0.1481705689753D+01-0.1413368040087D+01-0.1346348989896D+01-0.1280667148051D+01 +-0.1216342096293D+01-0.1153394417906D+01-0.1091845737986D+01-0.1031718775725D+01 +-0.9730374088849D+00-0.9158267504133D+00-0.8601132368937D+00-0.8059247283301D+00 +-0.7532906185600D+00-0.7022419554295D+00-0.6528115697324D+00-0.6050342118170D+00 +-0.5589466947046D+00-0.5145880425354D+00-0.4719996431596D+00-0.4312254037239D+00 +-0.3923119081554D+00-0.3553085755132D+00-0.3202678182603D+00-0.2872451996103D+00 +-0.2562993012896D+00 + 0.0000000000000D+00 + 1012 0.5229258479779D+01 + 0.2150742905406D-04 0.2201934401975D-04 0.2254344131081D-04 0.2308001074793D-04 + 0.2362934904336D-04 0.2419175996469D-04 0.2476755450247D-04 0.2535705104185D-04 + 0.2596057553829D-04 0.2657846169737D-04 0.2721105115901D-04 0.2785869368592D-04 + 0.2852174735659D-04 0.2920057876285D-04 0.2989556321214D-04 0.3060708493450D-04 + 0.3133553729459D-04 0.3208132300862D-04 0.3284485436652D-04 0.3362655345933D-04 + 0.3442685241199D-04 0.3524619362168D-04 0.3608503000175D-04 0.3694382523153D-04 + 0.3782305401197D-04 0.3872320232740D-04 0.3964476771351D-04 0.4058825953159D-04 + 0.4155419924941D-04 0.4254312072866D-04 0.4355557051923D-04 0.4459210816046D-04 + 0.4565330648961D-04 0.4673975195749D-04 0.4785204495171D-04 0.4899080012754D-04 + 0.5015664674660D-04 0.5135022902361D-04 0.5257220648130D-04 0.5382325431382D-04 + 0.5510406375867D-04 0.5641534247751D-04 0.5775781494596D-04 0.5913222285265D-04 + 0.6053932550771D-04 0.6197990026094D-04 0.6345474292991D-04 0.6496466823815D-04 + 0.6651051026378D-04 0.6809312289875D-04 0.6971338031887D-04 0.7137217746513D-04 + 0.7307043053626D-04 0.7480907749308D-04 0.7658907857468D-04 0.7841141682692D-04 + 0.8027709864336D-04 0.8218715431905D-04 0.8414263861740D-04 0.8614463135050D-04 + 0.8819423797310D-04 0.9029259019072D-04 0.9244084658213D-04 0.9464019323656D-04 + 0.9689184440594D-04 0.9919704317265D-04 0.1015570621330D-03 0.1039732040969D-03 + 0.1064468028041D-03 0.1089792236573D-03 0.1115718644728D-03 0.1142261562483D-03 + 0.1169435639500D-03 0.1197255873171D-03 0.1225737616857D-03 0.1254896588328D-03 + 0.1284748878395D-03 0.1315310959746D-03 0.1346599695998D-03 0.1378632350954D-03 + 0.1411426598085D-03 0.1445000530233D-03 0.1479372669546D-03 0.1514561977641D-03 + 0.1550587866019D-03 0.1587470206711D-03 0.1625229343189D-03 0.1663886101524D-03 + 0.1703461801815D-03 0.1743978269887D-03 0.1785457849256D-03 0.1827923413391D-03 + 0.1871398378251D-03 0.1915906715131D-03 0.1961472963799D-03 0.2008122245952D-03 + 0.2055880278984D-03 0.2104773390081D-03 0.2154828530649D-03 0.2206073291079D-03 + 0.2258535915864D-03 0.2312245319072D-03 0.2367231100177D-03 0.2423523560273D-03 + 0.2481153718665D-03 0.2540153329849D-03 0.2600554900897D-03 0.2662391709247D-03 + 0.2725697820915D-03 0.2790508109132D-03 0.2856858273428D-03 0.2924784859153D-03 + 0.2994325277470D-03 0.3065517825810D-03 0.3138401708812D-03 0.3213017059753D-03 + 0.3289404962488D-03 0.3367607473897D-03 0.3447667646870D-03 0.3529629553823D-03 + 0.3613538310777D-03 0.3699440101989D-03 0.3787382205180D-03 0.3877413017338D-03 + 0.3969582081140D-03 0.4063940111991D-03 0.4160539025692D-03 0.4259431966769D-03 + 0.4360673337456D-03 0.4464318827368D-03 0.4570425443864D-03 0.4679051543124D-03 + 0.4790256861959D-03 0.4904102550358D-03 0.5020651204812D-03 0.5139966902408D-03 + 0.5262115235724D-03 0.5387163348549D-03 0.5515179972435D-03 0.5646235464104D-03 + 0.5780401843732D-03 0.5917752834137D-03 0.6058363900874D-03 0.6202312293275D-03 + 0.6349677086450D-03 0.6500539224267D-03 0.6654981563344D-03 0.6813088918062D-03 + 0.6974948106637D-03 0.7140647998269D-03 0.7310279561389D-03 0.7483935913040D-03 + 0.7661712369406D-03 0.7843706497523D-03 0.8030018168203D-03 0.8220749610184D-03 + 0.8416005465556D-03 0.8615892846469D-03 0.8820521393172D-03 0.9030003333406D-03 + 0.9244453543176D-03 0.9463989608946D-03 0.9688731891282D-03 0.9918803589975D-03 + 0.1015433081069D-02 0.1039544263315D-02 0.1064227118095D-02 0.1089495169290D-02 + 0.1115362259619D-02 0.1141842558105D-02 0.1168950567737D-02 0.1196701133289D-02 + 0.1225109449338D-02 0.1254191068456D-02 0.1283961909601D-02 0.1314438266696D-02 + 0.1345636817413D-02 0.1377574632157D-02 0.1410269183260D-02 0.1443738354387D-02 + 0.1478000450161D-02 0.1513074206015D-02 0.1548978798262D-02 0.1585733854409D-02 + 0.1623359463706D-02 0.1661876187936D-02 0.1701305072458D-02 0.1741667657505D-02 + 0.1782985989747D-02 0.1825282634108D-02 0.1868580685877D-02 0.1912903783076D-02 + 0.1958276119133D-02 0.2004722455835D-02 0.2052268136585D-02 0.2100939099962D-02 + 0.2150761893598D-02 0.2201763688371D-02 0.2253972292925D-02 0.2307416168524D-02 + 0.2362124444253D-02 0.2418126932561D-02 0.2475454145167D-02 0.2534137309329D-02 + 0.2594208384486D-02 0.2655700079287D-02 0.2718645869002D-02 0.2783080013344D-02 + 0.2849037574687D-02 0.2916554436715D-02 0.2985667323484D-02 0.3056413818931D-02 + 0.3128832386828D-02 0.3202962391187D-02 0.3278844117136D-02 0.3356518792272D-02 + 0.3436028608501D-02 0.3517416744371D-02 0.3600727387929D-02 0.3686005760082D-02 + 0.3773298138499D-02 0.3862651882061D-02 0.3954115455860D-02 0.4047738456768D-02 + 0.4143571639594D-02 0.4241666943825D-02 0.4342077520985D-02 0.4444857762604D-02 + 0.4550063328833D-02 0.4657751177697D-02 0.4767979595018D-02 0.4880808225009D-02 + 0.4996298101570D-02 0.5114511680279D-02 0.5235512871115D-02 0.5359367071918D-02 + 0.5486141202598D-02 0.5615903740128D-02 0.5748724754308D-02 0.5884675944352D-02 + 0.6023830676284D-02 0.6166264021183D-02 0.6312052794284D-02 0.6461275594959D-02 + 0.6614012847588D-02 0.6770346843357D-02 0.6930361782982D-02 0.7094143820394D-02 + 0.7261781107400D-02 0.7433363839342D-02 0.7608984301773D-02 0.7788736918176D-02 + 0.7972718298747D-02 0.8161027290261D-02 0.8353765027049D-02 0.8551034983111D-02 + 0.8752943025377D-02 0.8959597468160D-02 0.9171109128811D-02 0.9387591384603D-02 + 0.9609160230877D-02 0.9835934340477D-02 0.1006803512449D-01 0.1030558679431D-01 + 0.1054871642512D-01 0.1079755402073D-01 0.1105223257982D-01 0.1131288816368D-01 + 0.1157965996544D-01 0.1185269038080D-01 0.1213212508026D-01 0.1241811308303D-01 + 0.1271080683248D-01 0.1301036227325D-01 0.1331693893004D-01 0.1363069998813D-01 + 0.1395181237567D-01 0.1428044684765D-01 0.1461677807184D-01 0.1496098471648D-01 + 0.1531324953990D-01 0.1567375948211D-01 0.1604270575828D-01 0.1642028395434D-01 + 0.1680669412453D-01 0.1720214089116D-01 0.1760683354637D-01 0.1802098615621D-01 + 0.1844481766683D-01 0.1887855201303D-01 0.1932241822902D-01 0.1977665056168D-01 + 0.2024148858606D-01 0.2071717732349D-01 0.2120396736203D-01 0.2170211497964D-01 + 0.2221188226980D-01 0.2273353726988D-01 0.2326735409215D-01 0.2381361305754D-01 + 0.2437260083229D-01 0.2494461056731D-01 0.2552994204062D-01 0.2612890180262D-01 + 0.2674180332442D-01 0.2736896714935D-01 0.2801072104743D-01 0.2866740017320D-01 + 0.2933934722669D-01 0.3002691261781D-01 0.3073045463399D-01 0.3145033961141D-01 + 0.3218694210958D-01 0.3294064508962D-01 0.3371184009606D-01 0.3450092744243D-01 + 0.3530831640054D-01 0.3613442539362D-01 0.3697968219334D-01 0.3784452412086D-01 + 0.3872939825181D-01 0.3963476162544D-01 0.4056108145796D-01 0.4150883536008D-01 + 0.4247851155891D-01 0.4347060912422D-01 0.4448563819924D-01 0.4552412023590D-01 + 0.4658658823475D-01 0.4767358698962D-01 0.4878567333696D-01 0.4992341641008D-01 + 0.5108739789835D-01 0.5227821231135D-01 0.5349646724813D-01 0.5474278367169D-01 + 0.5601779618862D-01 0.5732215333417D-01 0.5865651786266D-01 0.6002156704340D-01 + 0.6141799296226D-01 0.6284650282880D-01 0.6430781928923D-01 0.6580268074515D-01 + 0.6733184167825D-01 0.6889607298100D-01 0.7049616229337D-01 0.7213291434581D-01 + 0.7380715130845D-01 0.7551971314661D-01 0.7727145798277D-01 0.7906326246509D-01 + 0.8089602214242D-01 0.8277065184608D-01 0.8468808607842D-01 0.8664927940812D-01 + 0.8865520687255D-01 0.9070686438707D-01 0.9280526916144D-01 0.9495146012343D-01 + 0.9714649834967D-01 0.9939146750384D-01 0.1016874742823D+00 0.1040356488672D+00 + 0.1064371453872D+00 0.1088931423856D+00 0.1114048432967D+00 0.1139734769295D+00 + 0.1166002979593D+00 0.1192865874273D+00 0.1220336532487D+00 0.1248428307276D+00 + 0.1277154830815D+00 0.1306530019730D+00 0.1336568080498D+00 0.1367283514936D+00 + 0.1398691125766D+00 0.1430806022269D+00 0.1463643626021D+00 0.1497219676713D+00 + 0.1531550238057D+00 0.1566651703780D+00 0.1602540803695D+00 0.1639234609870D+00 + 0.1676750542871D+00 0.1715106378098D+00 0.1754320252209D+00 0.1794410669619D+00 + 0.1835396509100D+00 0.1877297030455D+00 0.1920131881282D+00 0.1963921103827D+00 + 0.2008685141914D+00 0.2054444847966D+00 0.2101221490109D+00 0.2149036759359D+00 + 0.2197912776889D+00 0.2247872101386D+00 0.2298937736476D+00 0.2351133138248D+00 + 0.2404482222837D+00 0.2459009374100D+00 0.2514739451362D+00 0.2571697797240D+00 + 0.2629910245536D+00 0.2689403129212D+00 0.2750203288421D+00 0.2812338078623D+00 + 0.2875835378751D+00 0.2940723599454D+00 0.3007031691395D+00 0.3074789153608D+00 + 0.3144026041916D+00 0.3214772977396D+00 0.3287061154899D+00 0.3360922351618D+00 + 0.3436388935694D+00 0.3513493874868D+00 0.3592270745164D+00 0.3672753739607D+00 + 0.3754977676972D+00 0.3838978010545D+00 0.3924790836915D+00 0.4012452904770D+00 + 0.4102001623706D+00 0.4193475073036D+00 0.4286912010595D+00 0.4382351881538D+00 + 0.4479834827120D+00 0.4579401693452D+00 0.4681094040228D+00 0.4784954149418D+00 + 0.4891025033910D+00 0.4999350446102D+00 0.5109974886435D+00 0.5222943611853D+00 + 0.5338302644183D+00 0.5456098778426D+00 0.5576379590956D+00 0.5699193447601D+00 + 0.5824589511607D+00 0.5952617751475D+00 0.6083328948654D+00 0.6216774705074D+00 + 0.6353007450521D+00 0.6492080449824D+00 0.6634047809857D+00 0.6778964486325D+00 + 0.6926886290333D+00 0.7077869894721D+00 0.7231972840138D+00 0.7389253540860D+00 + 0.7549771290311D+00 0.7713586266289D+00 0.7880759535873D+00 0.8051353059985D+00 + 0.8225429697604D+00 0.8403053209599D+00 0.8584288262158D+00 0.8769200429817D+00 + 0.8957856198031D+00 0.9150322965294D+00 0.9346669044774D+00 0.9546963665439D+00 + 0.9751276972649D+00 0.9959680028197D+00 0.1017224480976D+01 0.1038904420974D+01 + 0.1061015203349D+01 0.1083564299686D+01 0.1106559272300D+01 0.1130007773859D+01 + 0.1153917546912D+01 0.1178296423354D+01 0.1203152323804D+01 0.1228493256899D+01 + 0.1254327318495D+01 0.1280662690787D+01 0.1307507641324D+01 0.1334870521934D+01 + 0.1362759767535D+01 0.1391183894856D+01 0.1420151501035D+01 0.1449671262109D+01 + 0.1479751931386D+01 0.1510402337698D+01 0.1541631383520D+01 0.1573448042969D+01 + 0.1605861359662D+01 0.1638880444440D+01 0.1672514472946D+01 0.1706772683055D+01 + 0.1741664372155D+01 0.1777198894269D+01 0.1813385657016D+01 0.1850234118409D+01 + 0.1887753783475D+01 0.1925954200705D+01 0.1964844958324D+01 0.2004435680370D+01 + 0.2044736022586D+01 0.2085755668115D+01 0.2127504322996D+01 0.2169991711448D+01 + 0.2213227570952D+01 0.2257221647108D+01 0.2301983688271D+01 0.2347523439972D+01 + 0.2393850639086D+01 0.2440975007782D+01 0.2488906247220D+01 0.2537654031002D+01 + 0.2587227998372D+01 0.2637637747157D+01 0.2688892826442D+01 0.2741002728983D+01 + 0.2793976883341D+01 0.2847824645743D+01 0.2902555291652D+01 0.2958178007063D+01 + 0.3014701879494D+01 0.3072135888684D+01 0.3130488897001D+01 0.3189769639525D+01 + 0.3249986713841D+01 0.3311148569513D+01 0.3373263497233D+01 0.3436339617667D+01 + 0.3500384869964D+01 0.3565406999951D+01 0.3631413547991D+01 0.3698411836514D+01 + 0.3766408957221D+01 0.3835411757947D+01 0.3905426829193D+01 0.3976460490322D+01 + 0.4048518775419D+01 0.4121607418815D+01 0.4195731840277D+01 0.4270897129857D+01 + 0.4347108032420D+01 0.4424368931831D+01 0.4502683834816D+01 0.4582056354503D+01 + 0.4662489693636D+01 0.4743986627475D+01 0.4826549486387D+01 0.4910180138127D+01 + 0.4994879969825D+01 0.5080649869681D+01 0.5167490208373D+01 0.5255400820202D+01 + 0.5344380983962D+01 0.5434429403565D+01 0.5525544188426D+01 0.5617722833617D+01 + 0.5710962199815D+01 0.5805258493041D+01 0.5900607244231D+01 0.5997003288635D+01 + 0.6094440745069D+01 0.6192912995049D+01 0.6292412661814D+01 0.6392931589269D+01 + 0.6494460820874D+01 0.6596990578488D+01 0.6700510241224D+01 0.6805008324307D+01 + 0.6910472457995D+01 0.7016889366579D+01 0.7124244847491D+01 0.7232523750568D+01 + 0.7341709957494D+01 0.7451786361463D+01 0.7562734847107D+01 0.7674536270712D+01 + 0.7787170440791D+01 0.7900616099026D+01 0.8014850901658D+01 0.8129851401340D+01 + 0.8245593029526D+01 0.8362050079436D+01 0.8479195689649D+01 0.8597001828383D+01 + 0.8715439278509D+01 0.8834477623371D+01 0.8954085233454D+01 0.9074229253973D+01 + 0.9194875593440D+01 0.9315988913276D+01 0.9437532618530D+01 0.9559468849772D+01 + 0.9681758476237D+01 0.9804361090277D+01 0.9927235003199D+01 0.1005033724256D+02 + 0.1017362355101D+02 0.1029704838669D+02 0.1042056492540D+02 0.1054412506444D+02 + 0.1066767942831D+02 0.1079117737637D+02 0.1091456701244D+02 0.1103779519646D+02 + 0.1116080755839D+02 0.1128354851420D+02 0.1140596128432D+02 0.1152798791434D+02 + 0.1164956929827D+02 0.1177064520433D+02 0.1189115430327D+02 0.1201103419951D+02 + 0.1213022146500D+02 0.1224865167586D+02 0.1236625945201D+02 0.1248297849976D+02 + 0.1259874165744D+02 0.1271348094411D+02 0.1282712761148D+02 0.1293961219902D+02 + 0.1305086459240D+02 0.1316081408518D+02 0.1326938944391D+02 0.1337651897664D+02 + 0.1348213060491D+02 0.1358615193909D+02 0.1368851035736D+02 0.1378913308811D+02 + 0.1388794729589D+02 0.1398488017086D+02 0.1407985902179D+02 0.1417281137257D+02 + 0.1426366506212D+02 0.1435234834789D+02 0.1443879001264D+02 0.1452291947466D+02 + 0.1460466690129D+02 0.1468396332564D+02 0.1476074076649D+02 0.1483493235126D+02 + 0.1490647244192D+02 0.1497529676373D+02 0.1504134253675D+02 0.1510454860984D+02 + 0.1516485559720D+02 0.1522220601698D+02 0.1527654443219D+02 0.1532781759325D+02 + 0.1537597458241D+02 0.1542096695946D+02 0.1546274890874D+02 0.1550127738702D+02 + 0.1553651227211D+02 0.1556841651189D+02 0.1559695627334D+02 0.1562210109145D+02 + 0.1564382401753D+02 0.1566210176664D+02 0.1567691486377D+02 0.1568824778841D+02 + 0.1569608911712D+02 0.1570043166360D+02 0.1570127261607D+02 0.1569861367129D+02 + 0.1569246116496D+02 0.1568282619787D+02 0.1566972475757D+02 0.1565317783486D+02 + 0.1563321153475D+02 0.1560985718135D+02 0.1558315141624D+02 0.1555313628970D+02 + 0.1551985934445D+02 0.1548337369123D+02 0.1544373807583D+02 0.1540101693692D+02 + 0.1535528045436D+02 0.1530660458716D+02 0.1525507110098D+02 0.1520076758423D+02 + 0.1514378745267D+02 0.1508422994170D+02 0.1502220008605D+02 0.1495780868635D+02 + 0.1489117226206D+02 0.1482241299046D+02 0.1475165863115D+02 0.1467904243575D+02 + 0.1460470304238D+02 0.1452878435463D+02 0.1445143540465D+02 0.1437281020013D+02 + 0.1429306755483D+02 0.1421237090260D+02 0.1413088809452D+02 0.1404879117925D+02 + 0.1396625616625D+02 0.1388346277207D+02 0.1380059414952D+02 0.1371783659988D+02 + 0.1363537926825D+02 0.1355341382212D+02 0.1347213411351D+02 0.1339173582480D+02 + 0.1331241609871D+02 0.1323437315279D+02 0.1315780587881D+02 0.1308291342766D+02 + 0.1300989478035D+02 0.1293894830568D+02 0.1287027130535D+02 0.1280405954732D+02 + 0.1274050678825D+02 0.1267980428593D+02 0.1262214030269D+02 0.1256769960087D+02 + 0.1251666293145D+02 0.1246920651702D+02 0.1242550153038D+02 0.1238571356999D+02 + 0.1235000213372D+02 0.1231852009235D+02 0.1229141316414D+02 0.1226881939222D+02 + 0.1225086862623D+02 0.1223768200985D+02 0.1222937147599D+02 0.1222603925117D+02 + 0.1222777737106D+02 0.1223466720868D+02 0.1224677901729D+02 0.1226417148958D+02 + 0.1228689133517D+02 0.1231497287802D+02 0.1234843767581D+02 0.1238729416297D+02 + 0.1243153731911D+02 0.1248114836487D+02 0.1253609448665D+02 0.1259632859227D+02 + 0.1266178909890D+02 0.1273239975523D+02 0.1280806949923D+02 0.1288869235315D+02 + 0.1297414735711D+02 0.1306429854274D+02 0.1315899494816D+02 0.1325807067533D+02 + 0.1336134499111D+02 0.1346862247282D+02 0.1357969319917D+02 0.1369433298744D+02 + 0.1381230367740D+02 0.1393335346243D+02 0.1405721726828D+02 0.1418361717951D+02 + 0.1431226291376D+02 0.1444285234362D+02 0.1457507206581D+02 0.1470859801733D+02 + 0.1484309613763D+02 0.1497822307639D+02 0.1511362694548D+02 0.1524894811426D+02 + 0.1538382004666D+02 0.1551787017849D+02 0.1565072083339D+02 0.1578199017530D+02 + 0.1591129319546D+02 0.1603824273170D+02 0.1616245051740D+02 0.1628352825765D+02 + 0.1640108872963D+02 0.1651474690448D+02 0.1662412108723D+02 0.1672883407174D+02 + 0.1682851430716D+02 0.1692279707220D+02 0.1701132565381D+02 0.1709375252614D+02 + 0.1716974052608D+02 0.1723896402125D+02 0.1730111006644D+02 0.1735587954416D+02 + 0.1740298828530D+02 0.1744216816538D+02 0.1747316817225D+02 0.1749575544089D+02 + 0.1750971625093D+02 0.1751485698260D+02 0.1751100502688D+02 0.1749800964559D+02 + 0.1747574277733D+02 0.1744409978499D+02 0.1740300014123D+02 0.1735238804766D+02 + 0.1729223298439D+02 0.1722253018618D+02 0.1714330104180D+02 0.1705459341368D+02 + 0.1695648187457D+02 0.1684906785873D+02 0.1673247972505D+02 0.1660687272995D+02 + 0.1647242890818D+02 0.1632935685981D+02 0.1617789144222D+02 0.1601829336618D+02 + 0.1585084869528D+02 0.1567586824865D+02 0.1549368690699D+02 0.1530466282265D+02 + 0.1510917653451D+02 0.1490762998916D+02 0.1470044547022D+02 0.1448806443791D+02 + 0.1427094628160D+02 0.1404956698852D+02 0.1382441773199D+02 0.1359600338336D+02 + 0.1336484095192D+02 0.1313145795774D+02 0.1289639074258D+02 0.1266018272468D+02 + 0.1242338260337D+02 0.1218654252002D+02 0.1195021618209D+02 0.1171495695744D+02 + 0.1148131594627D+02 0.1124984003849D+02 0.1102106996440D+02 0.1079553834688D+02 + 0.1057376776347D+02 0.1035626882667D+02 0.1014353829125D+02 0.9936057196884D+01 + 0.9734289054994D+01 0.9538678088120D+01 0.9349647530399D+01 0.9167597997384D+01 + 0.8992905933301D+01 0.8825922143594D+01 0.8666970420224D+01 0.8516346266999D+01 + 0.8374315731611D+01 0.8241114350747D+01 0.8116946214096D+01 0.8001983152570D+01 + 0.7896364055459D+01 0.7800194320670D+01 0.7713545441561D+01 0.7636454733225D+01 + 0.7568925200401D+01 0.7510925548528D+01 0.7462390338698D+01 0.7423220286625D+01 + 0.7393282704950D+01 0.7372412087556D+01 0.7360410833787D+01 0.7357050109802D+01 + 0.7362070843542D+01 0.7375184849138D+01 0.7396076075866D+01 0.7424401976120D+01 + 0.7459794986211D+01 0.7501864113185D+01 0.7550196620265D+01 0.7604359802945D+01 + 0.7663902847256D+01 0.7728358761219D+01 0.7797246370063D+01 0.7870072365405D+01 + 0.7946333398216D+01 0.8025518205140D+01 0.8107109757504D+01 0.8190587422172D+01 + 0.8275429123337D+01 0.8361113494303D+01 0.8447122008353D+01 0.8532941077928D+01 + 0.8618064111536D+01 0.8701993518075D+01 0.8784242648578D+01 0.8864337665829D+01 + 0.8941819332731D+01 0.9016244710878D+01 0.9087188761372D+01 0.9154245840560D+01 + 0.9217031084099D+01 0.9275181673474D+01 0.9328357979881D+01 0.9376244581215D+01 + 0.9418551148709D+01 0.9455013200639D+01 0.9485392721360D+01 0.9509478644797D+01 + 0.9527087202359D+01 0.9538062136102D+01 0.9542274778747D+01 0.9539624002998D+01 + 0.9530036043300D+01 0.9513464193959D+01 0.9489888388159D+01 0.9459314663078D+01 + 0.9421774516843D+01 0.9377324163609D+01 0.9326043693467D+01 0.9268036144314D+01 + 0.9203426493115D+01 0.9132360574297D+01 0.9055003933175D+01 0.8971540622481D+01 + 0.8882171950151D+01 0.8787115186520D+01 0.8686602239071D+01 0.8580878302773D+01 + 0.8470200493895D+01 0.8354836475027D+01 0.8235063078754D+01 0.8111164937189D+01 + 0.7983433124252D+01 0.7852163817216D+01 0.7717656983696D+01 0.7580215099831D+01 + 0.7440141905014D+01 0.7297741198086D+01 0.7153315679440D+01 0.7007165843079D+01 + 0.6859588922166D+01 0.6710877891167D+01 0.6561320527250D+01 0.6411198533128D+01 + 0.6260786723101D+01 0.6110352273646D+01 0.5960154039458D+01 0.5810441935471D+01 + 0.5661456384987D+01 0.5513427833700D+01 0.5366576329042D+01 0.5221111163955D+01 + 0.5077230583918D+01 0.4935121555751D+01 0.4794959596475D+01 0.4656908660288D+01 + 0.4521121081498D+01 0.4387737571052D+01 0.4256887264186D+01 0.4128687816522D+01 + 0.4003245545873D+01 0.3880655616880D+01 0.3761002265561D+01 0.3644359060777D+01 + 0.3530789199588D+01 0.3420345833472D+01 0.3313072422343D+01 0.3209003113371D+01 + 0.3108163141592D+01 0.3010569249384D+01 0.2916230121919D+01 0.2825146835796D+01 + 0.2737313318133D+01 0.2652716813508D+01 0.2571338356232D+01 0.2493153245580D+01 + 0.2418131521695D+01 0.2346238440047D+01 0.2277434942461D+01 0.2211678122838D+01 + 0.2148921685899D+01 0.2089116397376D+01 0.2032210524266D+01 0.1978150263893D+01 + 0.1926880160684D+01 0.1878343509721D+01 0.1832482746269D+01 0.1789239820638D+01 + 0.1748556557871D+01 0.1710375001879D+01 0.1674637743804D+01 0.1641288234472D+01 + 0.1610271080956D+01 0.1581532327338D+01 0.1555019719890D+01 0.1530682956958D+01 + 0.1508473923914D+01 0.1488346913611D+01 0.1470258832820D+01 0.1454169395155D+01 + 0.1440041301042D+01 0.1427840405245D+01 0.1417535872504D+01 0.1409100321753D+01 + 0.1402509959377D+01 0.1397744701874D+01 0.1394788288181D+01 0.1393628381826D+01 + 0.1394256662892D+01 0.1396668909610D+01 0.1400865069190D+01 0.1406849317222D+01 + 0.1414629369614D+01 0.1424336942263D+01 0.1436096575202D+01 0.1449912447024D+01 + 0.1465794674727D+01 0.1483759333931D+01 0.1503828494539D+01 0.1526030271798D+01 + 0.1550398892649D+01 0.1576974777196D+01 0.1605804635055D+01 0.1636941576215D+01 + 7 1012 + 1 0 -1 -511.89194 + 2 0 -1 -58.90181 + 2 1 1 -50.68932 + 2 1 -2 -49.77537 + 3 0 -1 -5.73317 + 3 1 1 -3.34334 + 3 1 -2 -3.22919 + 0.2122975645015D-04 0.2173507709867D-04 0.2225242316243D-04 0.2278208072829D-04 + 0.2332434268594D-04 0.2387950888954D-04 0.2444788632325D-04 0.2502978927059D-04 + 0.2562553948791D-04 0.2623546638192D-04 0.2685990719144D-04 0.2749920717353D-04 + 0.2815371979393D-04 0.2882380692207D-04 0.2950983903075D-04 0.3021219540050D-04 + 0.3093126432877D-04 0.3166744334418D-04 0.3242113942573D-04 0.3319276922733D-04 + 0.3398275930755D-04 0.3479154636487D-04 0.3561957747857D-04 0.3646731035519D-04 + 0.3733521358096D-04 0.3822376688016D-04 0.3913346137963D-04 0.4006479987955D-04 + 0.4101829713060D-04 0.4199448011777D-04 0.4299388835081D-04 0.4401707416166D-04 + 0.4506460300883D-04 0.4613705378910D-04 0.4723501915650D-04 0.4835910584899D-04 + 0.4950993502270D-04 0.5068814259429D-04 0.5189437959126D-04 0.5312931251066D-04 + 0.5439362368626D-04 0.5568801166444D-04 0.5701319158897D-04 0.5836989559491D-04 + 0.5975887321186D-04 0.6118089177673D-04 0.6263673685632D-04 0.6412721267990D-04 + 0.6565314258201D-04 0.6721536945580D-04 0.6881475621705D-04 0.7045218627922D-04 + 0.7212856403973D-04 0.7384481537777D-04 0.7560188816385D-04 0.7740075278149D-04 + 0.7924240266119D-04 0.8112785482706D-04 0.8305815045642D-04 0.8503435545263D-04 + 0.8705756103141D-04 0.8912888432116D-04 0.9124946897738D-04 0.9342048581165D-04 + 0.9564313343555D-04 0.9791863891974D-04 0.1002482584687D-03 0.1026332781112D-03 + 0.1050750144077D-03 0.1075748151735D-03 0.1101340602203D-03 0.1127541621137D-03 + 0.1154365669501D-03 0.1181827551510D-03 0.1209942422769D-03 0.1238725798590D-03 + 0.1268193562527D-03 0.1298361975089D-03 0.1329247682680D-03 0.1360867726735D-03 + 0.1393239553083D-03 0.1426381021518D-03 0.1460310415612D-03 0.1495046452749D-03 + 0.1530608294397D-03 0.1567015556625D-03 0.1604288320871D-03 0.1642447144955D-03 + 0.1681513074364D-03 0.1721507653792D-03 0.1762452938963D-03 0.1804371508722D-03 + 0.1847286477421D-03 0.1891221507592D-03 0.1936200822920D-03 0.1982249221522D-03 + 0.2029392089542D-03 0.2077655415060D-03 0.2127065802334D-03 0.2177650486382D-03 + 0.2229437347894D-03 0.2282454928513D-03 0.2336732446459D-03 0.2392299812538D-03 + 0.2449187646513D-03 0.2507427293871D-03 0.2567050842979D-03 0.2628091142650D-03 + 0.2690581820118D-03 0.2754557299435D-03 0.2820052820308D-03 0.2887104457371D-03 + 0.2955749139921D-03 0.3026024672103D-03 0.3097969753590D-03 0.3171624000731D-03 + 0.3247027968207D-03 0.3324223171196D-03 0.3403252108055D-03 0.3484158283536D-03 + 0.3566986232552D-03 0.3651781544500D-03 0.3738590888149D-03 0.3827462037126D-03 + 0.3918443895988D-03 0.4011586526914D-03 0.4106941177020D-03 0.4204560306321D-03 + 0.4304497616342D-03 0.4406808079408D-03 0.4511547968612D-03 0.4618774888502D-03 + 0.4728547806468D-03 0.4840927084883D-03 0.4955974513988D-03 0.5073753345551D-03 + 0.5194328327314D-03 0.5317765738249D-03 0.5444133424641D-03 0.5573500837015D-03 + 0.5705939067925D-03 0.5841520890639D-03 0.5980320798714D-03 0.6122415046513D-03 + 0.6267881690659D-03 0.6416800632466D-03 0.6569253661363D-03 0.6725324499326D-03 + 0.6885098846360D-03 0.7048664427037D-03 0.7216111038125D-03 0.7387530597330D-03 + 0.7563017193176D-03 0.7742667136049D-03 0.7926579010441D-03 0.8114853728404D-03 + 0.8307594584254D-03 0.8504907310562D-03 0.8706900135433D-03 0.8913683841142D-03 + 0.9125371824119D-03 0.9342080156346D-03 0.9563927648179D-03 0.9791035912634D-03 + 0.1002352943117D-02 0.1026153562102D-02 0.1050518490405D-02 0.1075461077728D-02 + 0.1100994988496D-02 0.1127134209246D-02 0.1153893056171D-02 0.1181286182852D-02 + 0.1209328588167D-02 0.1238035624379D-02 0.1267423005415D-02 0.1297506815344D-02 + 0.1328303517037D-02 0.1359829961041D-02 0.1392103394654D-02 0.1425141471212D-02 + 0.1458962259585D-02 0.1493584253904D-02 0.1529026383504D-02 0.1565308023106D-02 + 0.1602449003221D-02 0.1640469620811D-02 0.1679390650189D-02 0.1719233354165D-02 + 0.1760019495464D-02 0.1801771348394D-02 0.1844511710794D-02 0.1888263916250D-02 + 0.1933051846599D-02 0.1978899944720D-02 0.2025833227614D-02 0.2073877299798D-02 + 0.2123058366995D-02 0.2173403250151D-02 0.2224939399761D-02 0.2277694910540D-02 + 0.2331698536421D-02 0.2386979705903D-02 0.2443568537747D-02 0.2501495857040D-02 + 0.2560793211623D-02 0.2621492888896D-02 0.2683627933011D-02 0.2747232162458D-02 + 0.2812340188056D-02 0.2878987431352D-02 0.2947210143447D-02 0.3017045424251D-02 + 0.3088531242177D-02 0.3161706454285D-02 0.3236610826892D-02 0.3313285056646D-02 + 0.3391770792086D-02 0.3472110655691D-02 0.3554348266436D-02 0.3638528262858D-02 + 0.3724696326649D-02 0.3812899206788D-02 0.3903184744224D-02 0.3995601897109D-02 + 0.4090200766624D-02 0.4187032623373D-02 0.4286149934389D-02 0.4387606390746D-02 + 0.4491456935804D-02 0.4597757794082D-02 0.4706566500803D-02 0.4817941932088D-02 + 0.4931944335851D-02 0.5048635363379D-02 0.5168078101634D-02 0.5290337106279D-02 + 0.5415478435454D-02 0.5543569684307D-02 0.5674680020311D-02 0.5808880219367D-02 + 0.5946242702730D-02 0.6086841574754D-02 0.6230752661494D-02 0.6378053550168D-02 + 0.6528823629508D-02 0.6683144131013D-02 0.6841098171130D-02 0.7002770794372D-02 + 0.7168249017405D-02 0.7337621874121D-02 0.7510980461712D-02 0.7688417987773D-02 + 0.7870029818463D-02 0.8055913527720D-02 0.8246168947593D-02 0.8440898219673D-02 + 0.8640205847678D-02 0.8844198751201D-02 0.9052986320644D-02 0.9266680473381D-02 + 0.9485395711148D-02 0.9709249178711D-02 0.9938360723829D-02 0.1017285295853D-01 + 0.1041285132175D-01 0.1065848414335D-01 0.1090988270951D-01 0.1116718132961D-01 + 0.1143051740455D-01 0.1170003149653D-01 0.1197586740047D-01 0.1225817221684D-01 + 0.1254709642620D-01 0.1284279396532D-01 0.1314542230495D-01 0.1345514252930D-01 + 0.1377211941725D-01 0.1409652152530D-01 0.1442852127232D-01 0.1476829502620D-01 + 0.1511602319226D-01 0.1547189030365D-01 0.1583608511371D-01 0.1620880069022D-01 + 0.1659023451183D-01 0.1698058856639D-01 0.1738006945154D-01 0.1778888847734D-01 + 0.1820726177118D-01 0.1863541038486D-01 0.1907356040402D-01 0.1952194305980D-01 + 0.1998079484302D-01 0.2045035762063D-01 0.2093087875471D-01 0.2142261122400D-01 + 0.2192581374792D-01 0.2244075091329D-01 0.2296769330365D-01 0.2350691763133D-01 + 0.2405870687229D-01 0.2462335040374D-01 0.2520114414469D-01 0.2579239069942D-01 + 0.2639739950387D-01 0.2701648697516D-01 0.2764997666416D-01 0.2829819941123D-01 + 0.2896149350513D-01 0.2964020484531D-01 0.3033468710740D-01 0.3104530191220D-01 + 0.3177241899806D-01 0.3251641639684D-01 0.3327768061342D-01 0.3405660680881D-01 + 0.3485359898710D-01 0.3566907018606D-01 0.3650344267166D-01 0.3735714813647D-01 + 0.3823062790211D-01 0.3912433312562D-01 0.4003872501011D-01 0.4097427501948D-01 + 0.4193146509749D-01 0.4291078789111D-01 0.4391274697832D-01 0.4493785710035D-01 + 0.4598664439858D-01 0.4705964665594D-01 0.4815741354312D-01 0.4928050686955D-01 + 0.5042950083923D-01 0.5160498231153D-01 0.5280755106696D-01 0.5403782007813D-01 + 0.5529641578584D-01 0.5658397838041D-01 0.5790116208843D-01 0.5924863546488D-01 + 0.6062708169076D-01 0.6203719887636D-01 0.6347970037015D-01 0.6495531507346D-01 + 0.6646478776099D-01 0.6800887940725D-01 0.6958836751900D-01 0.7120404647380D-01 + 0.7285672786470D-01 0.7454724085125D-01 0.7627643251682D-01 0.7804516823229D-01 + 0.7985433202641D-01 0.8170482696258D-01 0.8359757552242D-01 0.8553351999606D-01 + 0.8751362287932D-01 0.8953886727772D-01 0.9161025731761D-01 0.9372881856432D-01 + 0.9589559844749D-01 0.9811166669365D-01 0.1003781157661D+00 0.1026960613124D+00 + 0.1050666426187D+00 0.1074910230727D+00 0.1099703906329D+00 0.1125059583070D+00 + 0.1150989646366D+00 0.1177506741909D+00 0.1204623780676D+00 0.1232353944021D+00 + 0.1260710688845D+00 0.1289707752849D+00 0.1319359159864D+00 0.1349679225270D+00 + 0.1380682561490D+00 0.1412384083570D+00 0.1444799014844D+00 0.1477942892678D+00 + 0.1511831574303D+00 0.1546481242725D+00 0.1581908412731D+00 0.1618129936965D+00 + 0.1655163012104D+00 0.1693025185104D+00 0.1731734359544D+00 0.1771308802047D+00 + 0.1811767148790D+00 0.1853128412094D+00 0.1895411987104D+00 0.1938637658552D+00 + 0.1982825607598D+00 0.2027996418767D+00 0.2074171086957D+00 0.2121371024533D+00 + 0.2169618068509D+00 0.2218934487801D+00 0.2269342990569D+00 0.2320866731634D+00 + 0.2373529319974D+00 0.2427354826295D+00 0.2482367790682D+00 0.2538593230323D+00 + 0.2596056647304D+00 0.2654784036474D+00 0.2714801893389D+00 0.2776137222308D+00 + 0.2838817544268D+00 0.2902870905217D+00 0.2968325884206D+00 0.3035211601645D+00 + 0.3103557727607D+00 0.3173394490192D+00 0.3244752683937D+00 0.3317663678273D+00 + 0.3392159426028D+00 0.3468272471962D+00 0.3546035961349D+00 0.3625483648577D+00 + 0.3706649905790D+00 0.3789569731540D+00 0.3874278759464D+00 0.3960813266976D+00 + 0.4049210183955D+00 0.4139507101454D+00 0.4231742280388D+00 0.4325954660221D+00 + 0.4422183867640D+00 0.4520470225197D+00 0.4620854759931D+00 0.4723379211946D+00 + 0.4828086042953D+00 0.4935018444749D+00 0.5044220347646D+00 0.5155736428822D+00 + 0.5269612120602D+00 0.5385893618646D+00 0.5504627890040D+00 0.5625862681281D+00 + 0.5749646526146D+00 0.5876028753427D+00 0.6005059494532D+00 0.6136789690924D+00 + 0.6271271101407D+00 0.6408556309226D+00 0.6548698728981D+00 0.6691752613333D+00 + 0.6837773059493D+00 0.6986816015479D+00 0.7138938286123D+00 0.7294197538810D+00 + 0.7452652308942D+00 0.7614362005101D+00 0.7779386913894D+00 0.7947788204470D+00 + 0.8119627932680D+00 0.8294969044866D+00 0.8473875381261D+00 0.8656411678975D+00 + 0.8842643574549D+00 0.9032637606047D+00 0.9226461214683D+00 0.9424182745935D+00 + 0.9625871450140D+00 0.9831597482541D+00 0.1004143190275D+01 0.1025544667362D+01 + 0.1047371465949D+01 0.1069630962376D+01 0.1092330622582D+01 0.1115478001718D+01 + 0.1139080743699D+01 0.1163146580667D+01 0.1187683332379D+01 0.1212698905512D+01 + 0.1238201292877D+01 0.1264198572546D+01 0.1290698906886D+01 0.1317710541494D+01 + 0.1345241804028D+01 0.1373301102944D+01 0.1401896926110D+01 0.1431037839321D+01 + 0.1460732484690D+01 0.1490989578921D+01 0.1521817911461D+01 0.1553226342519D+01 + 0.1585223800953D+01 0.1617819282025D+01 0.1651021845012D+01 0.1684840610666D+01 + 0.1719284758534D+01 0.1754363524114D+01 0.1790086195862D+01 0.1826462112019D+01 + 0.1863500657290D+01 0.1901211259327D+01 0.1939603385053D+01 0.1978686536792D+01 + 0.2018470248210D+01 0.2058964080068D+01 0.2100177615772D+01 0.2142120456722D+01 + 0.2184802217451D+01 0.2228232520549D+01 0.2272420991371D+01 0.2317377252521D+01 + 0.2363110918097D+01 0.2409631587718D+01 0.2456948840298D+01 0.2505072227579D+01 + 0.2554011267414D+01 0.2603775436800D+01 0.2654374164640D+01 0.2705816824249D+01 + 0.2758112725590D+01 0.2811271107225D+01 0.2865301128002D+01 0.2920211858443D+01 + 0.2976012271854D+01 0.3032711235135D+01 0.3090317499294D+01 0.3148839689666D+01 + 0.3208286295814D+01 0.3268665661132D+01 0.3329985972130D+01 0.3392255247403D+01 + 0.3455481326284D+01 0.3519671857166D+01 0.3584834285516D+01 0.3650975841540D+01 + 0.3718103527540D+01 0.3786224104928D+01 0.3855344080910D+01 0.3925469694842D+01 + 0.3996606904248D+01 0.4068761370505D+01 0.4141938444201D+01 0.4216143150155D+01 + 0.4291380172106D+01 0.4367653837082D+01 0.4444968099432D+01 0.4523326524540D+01 + 0.4602732272224D+01 0.4683188079814D+01 0.4764696244923D+01 0.4847258607911D+01 + 0.4930876534058D+01 0.5015550895439D+01 0.5101282052526D+01 0.5188069835504D+01 + 0.5275913525340D+01 0.5364811834582D+01 0.5454762887935D+01 0.5545764202593D+01 + 0.5637812668364D+01 0.5730904527600D+01 0.5825035354930D+01 0.5920200036841D+01 + 0.6016392751096D+01 0.6113606946037D+01 0.6211835319763D+01 0.6311069799237D+01 + 0.6411301519318D+01 0.6512520801757D+01 0.6614717134178D+01 0.6717879149076D+01 + 0.6821994602856D+01 0.6927050354936D+01 0.7033032346971D+01 0.7139925582197D+01 + 0.7247714104955D+01 0.7356380980422D+01 0.7465908274590D+01 0.7576277034522D+01 + 0.7687467268944D+01 0.7799457929201D+01 0.7912226890625D+01 0.8025750934367D+01 + 0.8140005729731D+01 0.8254965817070D+01 0.8370604591283D+01 0.8486894285977D+01 + 0.8603805958343D+01 0.8721309474805D+01 0.8839373497487D+01 0.8957965471583D+01 + 0.9077051613664D+01 0.9196596901005D+01 0.9316565061973D+01 0.9436918567578D+01 + 0.9557618624205D+01 0.9678625167647D+01 0.9799896858462D+01 0.9921391078761D+01 + 0.1004306393048D+02 0.1016487023519D+02 0.1028676353561D+02 0.1040869609872D+02 + 0.1053061892078D+02 0.1065248173410D+02 0.1077423301584D+02 0.1089581999877D+02 + 0.1101718868413D+02 0.1113828385666D+02 0.1125904910191D+02 0.1137942682584D+02 + 0.1149935827678D+02 0.1161878356999D+02 0.1173764171462D+02 0.1185587064341D+02 + 0.1197340724503D+02 0.1209018739920D+02 0.1220614601465D+02 0.1232121706995D+02 + 0.1243533365740D+02 0.1254842802982D+02 0.1266043165050D+02 0.1277127524634D+02 + 0.1288088886404D+02 0.1298920192971D+02 0.1309614331160D+02 0.1320164138629D+02 + 0.1330562410812D+02 0.1340801908212D+02 0.1350875364026D+02 0.1360775492116D+02 + 0.1370494995324D+02 0.1380026574132D+02 0.1389362935662D+02 0.1398496803019D+02 + 0.1407420924981D+02 0.1416128086012D+02 0.1424611116627D+02 0.1432862904069D+02 + 0.1440876403324D+02 0.1448644648440D+02 0.1456160764164D+02 0.1463417977876D+02 + 0.1470409631813D+02 0.1477129195572D+02 0.1483570278883D+02 0.1489726644633D+02 + 0.1495592222127D+02 0.1501161120574D+02 0.1506427642781D+02 0.1511386299027D+02 + 0.1516031821110D+02 0.1520359176531D+02 0.1524363582812D+02 0.1528040521898D+02 + 0.1531385754641D+02 0.1534395335325D+02 0.1537065626208D+02 0.1539393312048D+02 + 0.1541375414585D+02 0.1543009306950D+02 0.1544292727951D+02 0.1545223796216D+02 + 0.1545801024155D+02 0.1546023331695D+02 0.1545890059744D+02 0.1545400983365D+02 + 0.1544556324596D+02 0.1543356764880D+02 0.1541803457065D+02 0.1539898036925D+02 + 0.1537642634154D+02 0.1535039882796D+02 0.1532092931044D+02 0.1528805450387D+02 + 0.1525181644030D+02 0.1521226254557D+02 0.1516944570778D+02 0.1512342433713D+02 + 0.1507426241669D+02 0.1502202954350D+02 0.1496680095964D+02 0.1490865757272D+02 + 0.1484768596530D+02 0.1478397839284D+02 0.1471763276969D+02 0.1464875264266D+02 + 0.1457744715182D+02 0.1450383097801D+02 0.1442802427679D+02 0.1435015259838D+02 + 0.1427034679327D+02 0.1418874290321D+02 0.1410548203722D+02 0.1402071023247D+02 + 0.1393457829969D+02 0.1384724165293D+02 0.1375886012364D+02 0.1366959775879D+02 + 0.1357962260304D+02 0.1348910646488D+02 0.1339822466686D+02 0.1330715577980D+02 + 0.1321608134121D+02 0.1312518555808D+02 0.1303465499419D+02 0.1294467824221D+02 + 0.1285544558101D+02 0.1276714861841D+02 0.1267997991994D+02 0.1259413262403D+02 + 0.1250980004419D+02 0.1242717525885D+02 0.1234645068948D+02 0.1226781766776D+02 + 0.1219146599257D+02 0.1211758347770D+02 0.1204635549121D+02 0.1197796448732D+02 + 0.1191258953197D+02 0.1185040582321D+02 0.1179158420730D+02 0.1173629069208D+02 + 0.1168468595856D+02 0.1163692487226D+02 0.1159315599549D+02 0.1155352110209D+02 + 0.1151815469598D+02 0.1148718353503D+02 0.1146072616178D+02 0.1143889244247D+02 + 0.1142178311602D+02 0.1140948935454D+02 0.1140209233686D+02 0.1139966283678D+02 + 0.1140226082774D+02 0.1140993510519D+02 0.1142272292875D+02 0.1144064968524D+02 + 0.1146372857460D+02 0.1149196031991D+02 0.1152533290326D+02 0.1156382132880D+02 + 0.1160738741454D+02 0.1165597961412D+02 0.1170953287012D+02 0.1176796849989D+02 + 0.1183119411535D+02 0.1189910357777D+02 0.1197157698856D+02 0.1204848071701D+02 + 0.1212966746596D+02 0.1221497637600D+02 0.1230423316888D+02 0.1239725033077D+02 + 0.1249382733567D+02 0.1259375090926D+02 0.1269679533346D+02 0.1280272279167D+02 + 0.1291128375448D+02 0.1302221740584D+02 0.1313525210912D+02 0.1325010591253D+02 + 0.1336648709337D+02 0.1348409474012D+02 0.1360261937149D+02 0.1372174359123D+02 + 0.1384114277758D+02 0.1396048580566D+02 0.1407943580155D+02 0.1419765092608D+02 + 0.1431478518661D+02 0.1443048927478D+02 0.1454441142812D+02 0.1465619831308D+02 + 0.1476549592746D+02 0.1487195051928D+02 0.1497520951989D+02 0.1507492248828D+02 + 0.1517074206398D+02 0.1526232492551D+02 0.1534933275145D+02 0.1543143318112D+02 + 0.1550830077157D+02 0.1557961794797D+02 0.1564507594396D+02 0.1570437572881D+02 + 0.1575722891823D+02 0.1580335866539D+02 0.1584250052899D+02 0.1587440331524D+02 + 0.1589882989033D+02 0.1591555796049D+02 0.1592438081630D+02 0.1592510803844D+02 + 0.1591756616179D+02 0.1590159929512D+02 0.1587706969359D+02 0.1584385828154D+02 + 0.1580186512290D+02 0.1575100983720D+02 0.1569123195871D+02 0.1562249123695D+02 + 0.1554476787665D+02 0.1545806271560D+02 0.1536239733893D+02 0.1525781412875D+02 + 0.1514437624809D+02 0.1502216755847D+02 0.1489129247063D+02 0.1475187572813D+02 + 0.1460406212401D+02 0.1444801615062D+02 0.1428392158332D+02 0.1411198099888D+02 + 0.1393241522964D+02 0.1374546275490D+02 0.1355137903119D+02 0.1335043576333D+02 + 0.1314292011864D+02 0.1292913388664D+02 0.1270939258714D+02 0.1248402452972D+02 + 0.1225336982785D+02 0.1201777937125D+02 0.1177761376017D+02 0.1153324220569D+02 + 0.1128504140014D+02 0.1103339436205D+02 0.1077868926027D+02 0.1052131822179D+02 + 0.1026167612835D+02 0.1000015940663D+02 0.9737164817090D+01 0.9473088246666D+01 + 0.9208323510392D+01 0.8943261167138D+01 0.8678287354606D+01 0.8413782648689D+01 + 0.8150120952198D+01 0.7887668417870D+01 0.7626782410424D+01 0.7367810512255D+01 + 0.7111089577147D+01 0.6856944836175D+01 0.6605689059620D+01 0.6357621778576D+01 + 0.6113028569417D+01 0.5872180404071D+01 0.5635333068605D+01 0.5402726652271D+01 + 0.5174585108689D+01 0.4951115890458D+01 0.4732509658013D+01 0.4518940063093D+01 + 0.4310563606744D+01 0.4107519571314D+01 0.3909930025455D+01 0.3717899900701D+01 + 0.3531517137795D+01 0.3350852900521D+01 0.3175961854415D+01 0.3006882507418D+01 + 0.2843637609166D+01 0.2686234605393D+01 0.2534666143602D+01 0.2388910626020D+01 + 0.2248932805599D+01 0.2114684420764D+01 0.1986104864410D+01 0.1863121882663D+01 + 0.1745652298807D+01 0.1633602757816D+01 0.1526870486911D+01 0.1425344067651D+01 + 0.1328904215091D+01 0.1237424559686D+01 0.1150772427713D+01 0.1068809616148D+01 + 0.9913931580887D+00 0.9183760750247D+00 0.8496081124357D+00 0.7849364554513D+00 + 0.7242064215293D+00 0.6672621273712D+00 0.6139471275574D+00 0.5641050226618D+00 + 0.5175800348878D+00 0.4742175495586D+00 0.4338646210828D+00 0.3963704423129D+00 + 0.3615867764997D+00 0.3293683513354D+00 0.2995732148544D+00 0.2720630532321D+00 + 0.2467034707815D+00 0.2233642326902D+00 0.2019194712763D+00 0.1822478567499D+00 + 0.1642327336682D+00 0.1477622244444D+00 0.1327293014336D+00 0.1190318292464D+00 + 0.1065725790655D+00 0.9525921682581D-01 0.8500426719540D-01 0.7572505534570D-01 + 0.6734362852856D-01 0.5978665949119D-01 0.5298533375213D-01 0.4687522273735D-01 + 0.4139614473480D-01 0.3649201557103D-01 0.3211069084453D-01 0.2820380147099D-01 + 0.2472658420543D-01 0.2163770870794D-01 0.1889910261478D-01 0.1647577596641D-01 + 0.1433564623066D-01 0.1244936504301D-01 0.1079014767040D-01 0.9333606088531D-02 + 0.8057586449521D-02 0.6942011605538D-02 0.5968729247262D-02 0.5121366113861D-02 + 0.4385188634413D-02 0.3746970269980D-02 0.3194865741265D-02 0.2718292249293D-02 + 0.2307817726031D-02 0.1955056088404D-02 0.1652569412799D-02 0.1393776897745D-02 + 0.1172870439853D-02 0.9847366120634D-03 0.8248848034661D-03 0.6893812560569D-03 + 0.5747887154298D-03 0.4781113990982D-03 0.3967449774979D-03 0.3284312582634D-03 + 0.2712172636576D-03 0.2234183935981D-03 0.1835853721449D-03 0.1504746831443D-03 + 0.1230222105786D-03 0.1003198106540D-03 0.8159455542106D-04 0.6619040144209D-04 + 0.5355205138722D-04 0.4321079120846D-04 0.3477210045803D-04 0.2790484818898D-04 + 0.2233190152246D-04 0.1782198824118D-04 0.1418266855132D-04 0.1125428434880D-04 + 0.8904766856498D-05 0.7025195313453D-05 0.5526010459652D-05 0.4333796852085D-05 + 0.3388557563637D-05 0.2641413563333D-05 0.2052668070841D-05 0.1590183444862D-05 + 0.1228024735392D-05 0.9453299398051D-06 0.7253722919424D-06 0.5547846237125D-06 + 0.4229200131023D-06 0.3213266143727D-06 0.2433177983142D-06 0.1836215545666D-06 + 0.1380955642703D-06 0.1034964778941D-06 0.7729376586493D-07 0.5752008209307D-07 + 0.4265142355148D-07 0.3151151106808D-07 0.2319578320089D-07 0.1701120974173D-07 + 0.1242881489534D-07 0.9046371073667D-08 0.6559198960071D-08 0.4737402476978D-08 + 0.3408191153158D-08 0.2442208093542D-08 0.1742998768590D-08 0.1238932286038D-08 + 0.8770296193333D-09 0.6182683290111D-09 0.4340255982013D-09 0.3033950772413D-09 + 0.2111715589818D-09 0.1463438404983D-09 0.1009726185101D-09 0.6935859066118D-10 + 0.4742849271888D-10 0.3228488955626D-10 0.2187547853929D-10 0.1475212866899D-10 + 0.9901881750809D-11 0.6613860882122D-11 0.4396644350124D-11 0.2908650000322D-11 + 0.1914873227728D-11 0.1254415200484D-11 0.8176535094916D-12 0.5302708391854D-12 + 0.3421370551355D-12 0.2196087836422D-12 0.1402231518601D-12 0.8906014768602D-13 + LSMS: xx z= 26. xvalws= 2.77074 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728402963D+02-0.5199725117641D+02-0.5199721792578D+02-0.5199718427293D+02 +-0.5199715021300D+02-0.5199711574107D+02-0.5199708085214D+02-0.5199704554119D+02 +-0.5199700980309D+02-0.5199697363268D+02-0.5199693702474D+02-0.5199689997397D+02 +-0.5199686247500D+02-0.5199682452243D+02-0.5199678611076D+02-0.5199674723444D+02 +-0.5199670788785D+02-0.5199666806529D+02-0.5199662776101D+02-0.5199658696918D+02 +-0.5199654568390D+02-0.5199650389922D+02-0.5199646160907D+02-0.5199641880734D+02 +-0.5199637548785D+02-0.5199633164434D+02-0.5199628727046D+02-0.5199624235979D+02 +-0.5199619690585D+02-0.5199615090205D+02-0.5199610434176D+02-0.5199605721822D+02 +-0.5199600952464D+02-0.5199596125410D+02-0.5199591239964D+02-0.5199586295419D+02 +-0.5199581291060D+02-0.5199576226162D+02-0.5199571099994D+02-0.5199565911815D+02 +-0.5199560660874D+02-0.5199555346411D+02-0.5199549967658D+02-0.5199544523837D+02 +-0.5199539014162D+02-0.5199533437834D+02-0.5199527794048D+02-0.5199522081989D+02 +-0.5199516300828D+02-0.5199510449731D+02-0.5199504527851D+02-0.5199498534331D+02 +-0.5199492468306D+02-0.5199486328897D+02-0.5199480115217D+02-0.5199473826367D+02 +-0.5199467461436D+02-0.5199461019507D+02-0.5199454499646D+02-0.5199447900910D+02 +-0.5199441222344D+02-0.5199434462984D+02-0.5199427621849D+02-0.5199420697954D+02 +-0.5199413690295D+02-0.5199406597858D+02-0.5199399419618D+02-0.5199392154537D+02 +-0.5199384801563D+02-0.5199377359634D+02-0.5199369827672D+02-0.5199362204589D+02 +-0.5199354489281D+02-0.5199346680633D+02-0.5199338777515D+02-0.5199330778784D+02 +-0.5199322683282D+02-0.5199314489839D+02-0.5199306197270D+02-0.5199297804374D+02 +-0.5199289309939D+02-0.5199280712733D+02-0.5199272011516D+02-0.5199263205027D+02 +-0.5199254291992D+02-0.5199245271123D+02-0.5199236141114D+02-0.5199226900644D+02 +-0.5199217548376D+02-0.5199208082958D+02-0.5199198503019D+02-0.5199188807175D+02 +-0.5199178994021D+02-0.5199169062139D+02-0.5199159010092D+02-0.5199148836424D+02 +-0.5199138539665D+02-0.5199128118323D+02-0.5199117570892D+02-0.5199106895845D+02 +-0.5199096091638D+02-0.5199085156707D+02-0.5199074089471D+02-0.5199062888326D+02 +-0.5199051551654D+02-0.5199040077813D+02-0.5199028465143D+02-0.5199016711964D+02 +-0.5199004816574D+02-0.5198992777253D+02-0.5198980592257D+02-0.5198968259824D+02 +-0.5198955778170D+02-0.5198943145487D+02-0.5198930359948D+02-0.5198917419701D+02 +-0.5198904322875D+02-0.5198891067574D+02-0.5198877651879D+02-0.5198864073848D+02 +-0.5198850331517D+02-0.5198836422896D+02-0.5198822345972D+02-0.5198808098707D+02 +-0.5198793679039D+02-0.5198779084882D+02-0.5198764314123D+02-0.5198749364622D+02 +-0.5198734234217D+02-0.5198718920716D+02-0.5198703421905D+02-0.5198687735537D+02 +-0.5198671859343D+02-0.5198655791024D+02-0.5198639528254D+02-0.5198623068679D+02 +-0.5198606409915D+02-0.5198589549550D+02-0.5198572485143D+02-0.5198555214224D+02 +-0.5198537734293D+02-0.5198520042816D+02-0.5198502137235D+02-0.5198484014954D+02 +-0.5198465673351D+02-0.5198447109769D+02-0.5198428321519D+02-0.5198409305883D+02 +-0.5198390060104D+02-0.5198370581396D+02-0.5198350866939D+02-0.5198330913876D+02 +-0.5198310719319D+02-0.5198290280341D+02-0.5198269593983D+02-0.5198248657249D+02 +-0.5198227467106D+02-0.5198206020484D+02-0.5198184314277D+02-0.5198162345340D+02 +-0.5198140110492D+02-0.5198117606510D+02-0.5198094830136D+02-0.5198071778068D+02 +-0.5198048446968D+02-0.5198024833454D+02-0.5198000934107D+02-0.5197976745462D+02 +-0.5197952264015D+02-0.5197927486220D+02-0.5197902408485D+02-0.5197877027176D+02 +-0.5197851338615D+02-0.5197825339081D+02-0.5197799024804D+02-0.5197772391971D+02 +-0.5197745436723D+02-0.5197718155151D+02-0.5197690543304D+02-0.5197662597177D+02 +-0.5197634312720D+02-0.5197605685833D+02-0.5197576712367D+02-0.5197547388122D+02 +-0.5197517708846D+02-0.5197487670236D+02-0.5197457267938D+02-0.5197426497542D+02 +-0.5197395354589D+02-0.5197363834563D+02-0.5197331932893D+02-0.5197299644952D+02 +-0.5197266966059D+02-0.5197233891476D+02-0.5197200416404D+02-0.5197166535990D+02 +-0.5197132245319D+02-0.5197097539418D+02-0.5197062413252D+02-0.5197026861727D+02 +-0.5196990879687D+02-0.5196954461909D+02-0.5196917603112D+02-0.5196880297948D+02 +-0.5196842541005D+02-0.5196804326804D+02-0.5196765649801D+02-0.5196726504383D+02 +-0.5196686884871D+02-0.5196646785514D+02-0.5196606200494D+02-0.5196565123919D+02 +-0.5196523549829D+02-0.5196481472189D+02-0.5196438884890D+02-0.5196395781753D+02 +-0.5196352156518D+02-0.5196308002855D+02-0.5196263314350D+02-0.5196218084518D+02 +-0.5196172306789D+02-0.5196125974518D+02-0.5196079080977D+02-0.5196031619354D+02 +-0.5195983582758D+02-0.5195934964214D+02-0.5195885756657D+02-0.5195835952942D+02 +-0.5195785545834D+02-0.5195734528011D+02-0.5195682892060D+02-0.5195630630481D+02 +-0.5195577735679D+02-0.5195524199969D+02-0.5195470015573D+02-0.5195415174616D+02 +-0.5195359669127D+02-0.5195303491041D+02-0.5195246632192D+02-0.5195189084316D+02 +-0.5195130839046D+02-0.5195071887917D+02-0.5195012222358D+02-0.5194951833693D+02 +-0.5194890713143D+02-0.5194828851819D+02-0.5194766240726D+02-0.5194702870759D+02 +-0.5194638732701D+02-0.5194573817222D+02-0.5194508114882D+02-0.5194441616121D+02 +-0.5194374311266D+02-0.5194306190525D+02-0.5194237243986D+02-0.5194167461616D+02 +-0.5194096833262D+02-0.5194025348643D+02-0.5193952997356D+02-0.5193879768871D+02 +-0.5193805652527D+02-0.5193730637535D+02-0.5193654712973D+02-0.5193577867788D+02 +-0.5193500090790D+02-0.5193421370652D+02-0.5193341695911D+02-0.5193261054963D+02 +-0.5193179436061D+02-0.5193096827316D+02-0.5193013216694D+02-0.5192928592013D+02 +-0.5192842940944D+02-0.5192756251004D+02-0.5192668509561D+02-0.5192579703828D+02 +-0.5192489820860D+02-0.5192398847556D+02-0.5192306770652D+02-0.5192213576726D+02 +-0.5192119252189D+02-0.5192023783287D+02-0.5191927156096D+02-0.5191829356524D+02 +-0.5191730370307D+02-0.5191630183005D+02-0.5191528780001D+02-0.5191426146503D+02 +-0.5191322267532D+02-0.5191217127930D+02-0.5191110712354D+02-0.5191003005272D+02 +-0.5190893990959D+02-0.5190783653503D+02-0.5190671976795D+02-0.5190558944528D+02 +-0.5190444540195D+02-0.5190328747089D+02-0.5190211548297D+02-0.5190092926700D+02 +-0.5189972864968D+02-0.5189851345560D+02-0.5189728350719D+02-0.5189603862472D+02 +-0.5189477862625D+02-0.5189350332759D+02-0.5189221254235D+02-0.5189090608179D+02 +-0.5188958375491D+02-0.5188824536834D+02-0.5188689072635D+02-0.5188551963080D+02 +-0.5188413188114D+02-0.5188272727435D+02-0.5188130560492D+02-0.5187986666482D+02 +-0.5187841024347D+02-0.5187693612772D+02-0.5187544410178D+02-0.5187393394724D+02 +-0.5187240544300D+02-0.5187085836524D+02-0.5186929248740D+02-0.5186770758014D+02 +-0.5186610341132D+02-0.5186447974591D+02-0.5186283634606D+02-0.5186117297093D+02 +-0.5185948937678D+02-0.5185778531685D+02-0.5185606054135D+02-0.5185431479744D+02 +-0.5185254782916D+02-0.5185075937741D+02-0.5184894917991D+02-0.5184711697117D+02 +-0.5184526248242D+02-0.5184338544160D+02-0.5184148557330D+02-0.5183956259875D+02 +-0.5183761623572D+02-0.5183564619854D+02-0.5183365219802D+02-0.5183163394142D+02 +-0.5182959113240D+02-0.5182752347098D+02-0.5182543065350D+02-0.5182331237255D+02 +-0.5182116831697D+02-0.5181899817174D+02-0.5181680161800D+02-0.5181457833297D+02 +-0.5181232798987D+02-0.5181005025795D+02-0.5180774480235D+02-0.5180541128413D+02 +-0.5180304936016D+02-0.5180065868310D+02-0.5179823890134D+02-0.5179578965895D+02 +-0.5179331059564D+02-0.5179080134665D+02-0.5178826154277D+02-0.5178569081025D+02 +-0.5178308877073D+02-0.5178045504121D+02-0.5177778923399D+02-0.5177509095659D+02 +-0.5177235981171D+02-0.5176959539717D+02-0.5176679730585D+02-0.5176396512563D+02 +-0.5176109843930D+02-0.5175819682457D+02-0.5175525985390D+02-0.5175228709457D+02 +-0.5174927810849D+02-0.5174623245221D+02-0.5174314967682D+02-0.5174002932792D+02 +-0.5173687094551D+02-0.5173367406395D+02-0.5173043821187D+02-0.5172716291215D+02 +-0.5172384768177D+02-0.5172049203182D+02-0.5171709546736D+02-0.5171365748739D+02 +-0.5171017758479D+02-0.5170665524617D+02-0.5170308995189D+02-0.5169948117592D+02 +-0.5169582838578D+02-0.5169213104249D+02-0.5168838860043D+02-0.5168460050732D+02 +-0.5168076620412D+02-0.5167688512494D+02-0.5167295669696D+02-0.5166898034036D+02 +-0.5166495546822D+02-0.5166088148646D+02-0.5165675779371D+02-0.5165258378128D+02 +-0.5164835883303D+02-0.5164408232529D+02-0.5163975362681D+02-0.5163537209858D+02 +-0.5163093709386D+02-0.5162644795799D+02-0.5162190402831D+02-0.5161730463415D+02 +-0.5161264909661D+02-0.5160793672858D+02-0.5160316683457D+02-0.5159833871062D+02 +-0.5159345164422D+02-0.5158850491424D+02-0.5158349779076D+02-0.5157842953502D+02 +-0.5157329939929D+02-0.5156810662682D+02-0.5156285045165D+02-0.5155753009857D+02 +-0.5155214478300D+02-0.5154669371088D+02-0.5154117607855D+02-0.5153559107266D+02 +-0.5152993787006D+02-0.5152421563767D+02-0.5151842353238D+02-0.5151256070096D+02 +-0.5150662627991D+02-0.5150061939535D+02-0.5149453916296D+02-0.5148838468777D+02 +-0.5148215506412D+02-0.5147584937554D+02-0.5146946669454D+02-0.5146300608264D+02 +-0.5145646659012D+02-0.5144984725596D+02-0.5144314710771D+02-0.5143636516137D+02 +-0.5142950042123D+02-0.5142255187982D+02-0.5141551851771D+02-0.5140839930344D+02 +-0.5140119319335D+02-0.5139389913149D+02-0.5138651604948D+02-0.5137904286634D+02 +-0.5137147848843D+02-0.5136382180931D+02-0.5135607170955D+02-0.5134822705665D+02 +-0.5134028670491D+02-0.5133224949527D+02-0.5132411425521D+02-0.5131587979859D+02 +-0.5130754492555D+02-0.5129910842232D+02-0.5129056906116D+02-0.5128192560017D+02 +-0.5127317678315D+02-0.5126432133956D+02-0.5125535798425D+02-0.5124628541740D+02 +-0.5123710232443D+02-0.5122780737574D+02-0.5121839922671D+02-0.5120887651745D+02 +-0.5119923787276D+02-0.5118948190193D+02-0.5117960719865D+02-0.5116961234085D+02 +-0.5115949589056D+02-0.5114925639380D+02-0.5113889238044D+02-0.5112840236408D+02 +-0.5111778484188D+02-0.5110703829447D+02-0.5109616118579D+02-0.5108515196301D+02 +-0.5107400905631D+02-0.5106273087889D+02-0.5105131582667D+02-0.5103976227836D+02 +-0.5102806859514D+02-0.5101623312071D+02-0.5100425418105D+02-0.5099213008436D+02 +-0.5097985912091D+02-0.5096743956297D+02-0.5095486966464D+02-0.5094214766176D+02 +-0.5092927177183D+02-0.5091624019384D+02-0.5090305110822D+02-0.5088970267672D+02 +-0.5087619304230D+02-0.5086252032900D+02-0.5084868264193D+02-0.5083467806710D+02 +-0.5082050467136D+02-0.5080616050232D+02-0.5079164358822D+02-0.5077695193792D+02 +-0.5076208354076D+02-0.5074703636655D+02-0.5073180836542D+02-0.5071639746782D+02 +-0.5070080158445D+02-0.5068501860613D+02-0.5066904640389D+02-0.5065288282874D+02 +-0.5063652571181D+02-0.5061997286414D+02-0.5060322207678D+02-0.5058627112067D+02 +-0.5056911774669D+02-0.5055175968555D+02-0.5053419464788D+02-0.5051642032411D+02 +-0.5049843438458D+02-0.5048023447945D+02-0.5046181823877D+02-0.5044318327247D+02 +-0.5042432717038D+02-0.5040524750226D+02-0.5038594181787D+02-0.5036640764694D+02 +-0.5034664249930D+02-0.5032664386488D+02-0.5030640921379D+02-0.5028593599640D+02 +-0.5026522164341D+02-0.5024426356594D+02-0.5022305915564D+02-0.5020160578474D+02 +-0.5017990080623D+02-0.5015794155393D+02-0.5013572534263D+02-0.5011324946826D+02 +-0.5009051120796D+02-0.5006750782030D+02-0.5004423654542D+02-0.5002069460521D+02 +-0.4999687920344D+02-0.4997278752603D+02-0.4994841674120D+02-0.4992376399966D+02 +-0.4989882643488D+02-0.4987360116327D+02-0.4984808528443D+02-0.4982227588141D+02 +-0.4979617002094D+02-0.4976976475371D+02-0.4974305711462D+02-0.4971604412309D+02 +-0.4968872278335D+02-0.4966109008469D+02-0.4963314300185D+02-0.4960487849528D+02 +-0.4957629351145D+02-0.4954738498327D+02-0.4951814983035D+02-0.4948858495939D+02 +-0.4945868726453D+02-0.4942845362775D+02-0.4939788091919D+02-0.4936696599757D+02 +-0.4933570571061D+02-0.4930409689534D+02-0.4927213637859D+02-0.4923982097740D+02 +-0.4920714749935D+02-0.4917411274309D+02-0.4914071349870D+02-0.4910694654815D+02 +-0.4907280866573D+02-0.4903829661848D+02-0.4900340716666D+02-0.4896813706420D+02 +-0.4893248305909D+02-0.4889644189392D+02-0.4886001030623D+02-0.4882318502909D+02 +-0.4878596279141D+02-0.4874834031849D+02-0.4871031433244D+02-0.4867188155262D+02 +-0.4863303869609D+02-0.4859378247804D+02-0.4855410961222D+02-0.4851401681140D+02 +-0.4847350078774D+02-0.4843255825325D+02-0.4839118592018D+02-0.4834938050138D+02 +-0.4830713871075D+02-0.4826445726356D+02-0.4822133287682D+02-0.4817776226967D+02 +-0.4813374216365D+02-0.4808926928306D+02-0.4804434035526D+02-0.4799895211091D+02 +-0.4795310128431D+02-0.4790678461358D+02-0.4785999884093D+02-0.4781274071282D+02 +-0.4776500698020D+02-0.4771679439861D+02-0.4766809972836D+02-0.4761891973461D+02 +-0.4756925118748D+02-0.4751909086208D+02-0.4746843553857D+02-0.4741728200213D+02 +-0.4736562704295D+02-0.4731346745620D+02-0.4726080004188D+02-0.4720762160479D+02 +-0.4715392895431D+02-0.4709971890425D+02-0.4704498827268D+02-0.4698973388163D+02 +-0.4693395255690D+02-0.4687764112767D+02-0.4682079642628D+02-0.4676341528777D+02 +-0.4670549454962D+02-0.4664703105122D+02-0.4658802163351D+02-0.4652846313853D+02 +-0.4646835240891D+02-0.4640768628735D+02-0.4634646161617D+02-0.4628467523671D+02 +-0.4622232398885D+02-0.4615940471037D+02-0.4609591423645D+02-0.4603184939910D+02 +-0.4596720702657D+02-0.4590198394276D+02-0.4583617696675D+02-0.4576978291218D+02 +-0.4570279858676D+02-0.4563522079176D+02-0.4556704632159D+02-0.4549827196328D+02 +-0.4542889449617D+02-0.4535891069156D+02-0.4528831731237D+02-0.4521711111299D+02 +-0.4514528883912D+02-0.4507284722768D+02-0.4499978300686D+02-0.4492609289624D+02 +-0.4485177360700D+02-0.4477682184233D+02-0.4470123429783D+02-0.4462500766219D+02 +-0.4454813861790D+02-0.4447062384219D+02-0.4439246000814D+02-0.4431364378589D+02 +-0.4423417184413D+02-0.4415404085174D+02-0.4407324747964D+02-0.4399178840285D+02 +-0.4390966030283D+02-0.4382685986996D+02-0.4374338380636D+02-0.4365922882888D+02 +-0.4357439167239D+02-0.4348886909331D+02-0.4340265787340D+02-0.4331575482384D+02 +-0.4322815678953D+02-0.4313986065369D+02-0.4305086334268D+02-0.4296116183110D+02 +-0.4287075314713D+02-0.4277963437808D+02-0.4268780267613D+02-0.4259525526436D+02 +-0.4250198944278D+02-0.4240800259471D+02-0.4231329219311D+02-0.4221785580702D+02 +-0.4212169110814D+02-0.4202479587724D+02-0.4192716801066D+02-0.4182880552657D+02 +-0.4172970657123D+02-0.4162986942478D+02-0.4152929250699D+02-0.4142797438248D+02 +-0.4132591376546D+02-0.4122310952415D+02-0.4111956068435D+02-0.4101526643252D+02 +-0.4091022611799D+02-0.4080443925436D+02-0.4069790551997D+02-0.4059062475744D+02 +-0.4048259697200D+02-0.4037382232884D+02-0.4026430114924D+02-0.4015403390548D+02 +-0.4004302121449D+02-0.3993126383031D+02-0.3981876263529D+02-0.3970551863000D+02 +-0.3959153292214D+02-0.3947680671418D+02-0.3936134129010D+02-0.3924513800125D+02 +-0.3912819825140D+02-0.3901052348125D+02-0.3889211515259D+02-0.3877297473220D+02 +-0.3865310367583D+02-0.3853250341248D+02-0.3841117532917D+02-0.3828912075654D+02 +-0.3816634095549D+02-0.3804283710513D+02-0.3791861029232D+02-0.3779366150300D+02 +-0.3766799161555D+02-0.3754160139636D+02-0.3741449149782D+02-0.3728666245883D+02 +-0.3715811470790D+02-0.3702884856900D+02-0.3689886427010D+02-0.3676816195438D+02 +-0.3663674169408D+02-0.3650460350690D+02-0.3637174737474D+02-0.3623817326473D+02 +-0.3610388115218D+02-0.3596887104531D+02-0.3583314301154D+02-0.3569669720495D+02 +-0.3555953389464D+02-0.3542165349386D+02-0.3528305658922D+02-0.3514374397011D+02 +-0.3500371665774D+02-0.3486297593358D+02-0.3472152336690D+02-0.3457936084122D+02 +-0.3443649057928D+02-0.3429291516643D+02-0.3414863757211D+02-0.3400366116934D+02 +-0.3385798975190D+02-0.3371162754922D+02-0.3356457923876D+02-0.3341684995570D+02 +-0.3326844530007D+02-0.3311937134098D+02-0.3296963461820D+02-0.3281924214079D+02 +-0.3266820138293D+02-0.3251652027694D+02-0.3236420720350D+02-0.3221127097903D+02 +-0.3205772084042D+02-0.3190356642710D+02-0.3174881776049D+02-0.3159348522098D+02 +-0.3143757952257D+02-0.3128111168511D+02-0.3112409300454D+02-0.3096653502093D+02 +-0.3080844948479D+02-0.3064984832153D+02-0.3049074359439D+02-0.3033114746593D+02 +-0.3017107215833D+02-0.3001052991254D+02-0.2984953294675D+02-0.2968809341400D+02 +-0.2952622335948D+02-0.2936393467762D+02-0.2920123906907D+02-0.2903814799805D+02 +-0.2887467265011D+02-0.2871082389066D+02-0.2854661222446D+02-0.2838204775647D+02 +-0.2821714015409D+02-0.2805189861135D+02-0.2788633181514D+02-0.2772044791378D+02 +-0.2755425448842D+02-0.2738775852723D+02-0.2722096640307D+02-0.2705388385454D+02 +-0.2688651597109D+02-0.2671886718221D+02-0.2655094125117D+02-0.2638274127348D+02 +-0.2621426968047D+02-0.2604552824823D+02-0.2587651811214D+02-0.2570723978730D+02 +-0.2553769319514D+02-0.2536787769632D+02-0.2519779213021D+02-0.2502743486110D+02 +-0.2485680383129D+02-0.2468589662112D+02-0.2451471051601D+02-0.2434324258050D+02 +-0.2417148973924D+02-0.2399944886481D+02-0.2382711687194D+02-0.2365449081810D+02 +-0.2348156800981D+02-0.2330834611404D+02-0.2313482327422D+02-0.2296099822964D+02 +-0.2278687043744D+02-0.2261244019567D+02-0.2243770876615D+02-0.2226267849517D+02 +-0.2208735293014D+02-0.2191173693001D+02-0.2173583676674D+02-0.2155966021537D+02 +-0.2138321662948D+02-0.2120651699903D+02-0.2102957398727D+02-0.2085240194340D+02 +-0.2067501688787D+02-0.2049743646710D+02-0.2031967987514D+02-0.2014176773999D+02 +-0.1996372197331D+02-0.1978556558301D+02-0.1960732244950D+02-0.1942901706755D+02 +-0.1925067425750D+02-0.1907231885074D+02-0.1889397535633D+02-0.1871566761696D+02 +-0.1853741846374D+02-0.1835924938052D+02-0.1818118018868D+02-0.1800322876380D+02 +-0.1782541079491D+02-0.1764773959582D+02-0.1747022597686D+02-0.1729287818264D+02 +-0.1711570189939D+02-0.1693870033244D+02-0.1676187435187D+02-0.1658522270158D+02 +-0.1640874226459D+02-0.1623242837596D+02-0.1605627517269D+02-0.1588027596970D+02 +-0.1570442365062D+02-0.1552871106216D+02-0.1535313140208D+02-0.1517767859145D+02 +-0.1500234762341D+02-0.1482713488228D+02-0.1465203842815D+02-0.1447705824363D+02 +-0.1430219644106D+02-0.1412745742929D+02-0.1395284804054D+02-0.1377837761854D+02 +-0.1360405806987D+02-0.1342990388081D+02-0.1325593210249D+02-0.1308216230731D+02 +-0.1290861651951D+02-0.1273531912305D+02-0.1256229674959D+02-0.1238957814960D+02 +-0.1221719404907D+02-0.1204517699438D+02-0.1187356118783D+02-0.1170238231558D+02 +-0.1153167737042D+02-0.1136148447069D+02-0.1119184267735D+02-0.1102279181034D+02 +-0.1085437226576D+02-0.1068662483495D+02-0.1051959052659D+02-0.1035331039265D+02 +-0.1018782535928D+02-0.1002317606321D+02-0.9859402694342D+01-0.9696544845323D+01 +-0.9534641368482D+01-0.9373730240659D+01-0.9213848436346D+01-0.9055031809511D+01 +-0.8897314984394D+01-0.8740731255549D+01-0.8585312497336D+01-0.8431089083029D+01 +-0.8278089813661D+01-0.8126341856676D+01-0.7975870694439D+01-0.7826700082584D+01 +-0.7678852018171D+01-0.7532346717566D+01-0.7387202603932D+01-0.7243436304187D+01 +-0.7101062655233D+01-0.6960094719270D+01-0.6820543807924D+01-0.6682419514939D+01 +-0.6545729757123D+01-0.6410480823229D+01-0.6276677430423D+01-0.6144322787958D+01 +-0.6013418667669D+01-0.5883965480867D+01-0.5755962361193D+01-0.5629407252975D+01 +-0.5504297004604D+01-0.5380627466436D+01-0.5258393592702D+01-0.5137589546863D+01 +-0.5018208809882D+01-0.4900244290793D+01-0.4783688438971D+01-0.4668533357470D+01 +-0.4554770916754D+01-0.4442392868124D+01-0.4331390956131D+01-0.4221757029192D+01 +-0.4113483147635D+01-0.4006561688322D+01-0.3900985445011D+01-0.3796747723533D+01 +-0.3693842430876D+01-0.3592264157211D+01-0.3492008249906D+01-0.3393070878541D+01 +-0.3295449089976D+01-0.3199140852531D+01-0.3104145088414D+01-0.3010461693592D+01 +-0.2918091544431D+01-0.2827036490592D+01-0.2737299333835D+01-0.2648883792669D+01 +-0.2561794453010D+01-0.2476036705393D+01-0.2391616669610D+01-0.2308541108029D+01 +-0.2226817329318D+01-0.2146453084634D+01-0.2067456458802D+01-0.1989835759339D+01 +-0.1913599406514D+01-0.1838755827812D+01-0.1765313360391D+01-0.1693280165020D+01 +-0.1622664154978D+01-0.1553472943063D+01-0.1485713809518D+01-0.1419393693186D+01 +-0.1354519207570D+01-0.1291096682842D+01-0.1229132234097D+01-0.1168631855453D+01 +-0.1109601538882D+01-0.1052047416050D+01-0.9959759208814D+00-0.9413939701484D+00 +-0.8883091590719D+00-0.8367299687430D+00-0.7866659821253D+00-0.7381281054637D+00 +-0.6911287920896D+00-0.6456822658698D+00-0.6018047418553D+00-0.5595146420441D+00 +-0.5188328045500D+00-0.4797826848498D+00-0.4423905481512D+00-0.4066856522662D+00 +-0.3727004206897D+00-0.3404706058472D+00-0.3100354427093D+00-0.2814377931599D+00 +-0.2547240189175D+00 + 0.0000000000000D+00 + 1012 0.2770741520224D+01 + 0.2150927949039D-04 0.2202124536575D-04 0.2254539478646D-04 0.2308201760180D-04 + 0.2363141055333D-04 0.2419387743865D-04 0.2476972927906D-04 0.2535928449121D-04 + 0.2596286906285D-04 0.2658081673262D-04 0.2721346917432D-04 0.2786117618535D-04 + 0.2852429587973D-04 0.2920319488569D-04 0.2989824854795D-04 0.3060984113473D-04 + 0.3133836604977D-04 0.3208422604934D-04 0.3284783346437D-04 0.3362961042788D-04 + 0.3442998910781D-04 0.3524941194536D-04 0.3608833189898D-04 0.3694721269416D-04 + 0.3782652907911D-04 0.3872676708658D-04 0.3964842430179D-04 0.4059201013679D-04 + 0.4155804611131D-04 0.4254706614023D-04 0.4355961682789D-04 0.4459625776943D-04 + 0.4565756185917D-04 0.4674411560639D-04 0.4785651945856D-04 0.4899538813222D-04 + 0.5016135095172D-04 0.5135505219602D-04 0.5257715145361D-04 0.5382832398596D-04 + 0.5510926109951D-04 0.5642067052648D-04 0.5776327681476D-04 0.5913782172693D-04 + 0.6054506464885D-04 0.6198578300785D-04 0.6346077270088D-04 0.6497084853274D-04 + 0.6651684466474D-04 0.6809961507398D-04 0.6972003402351D-04 0.7137899654355D-04 + 0.7307741892426D-04 0.7481623921999D-04 0.7659641776564D-04 0.7841893770513D-04 + 0.8028480553242D-04 0.8219505164534D-04 0.8415073091254D-04 0.8615292325379D-04 + 0.8820273423416D-04 0.9030129567206D-04 0.9244976626185D-04 0.9464933221109D-04 + 0.9690120789284D-04 0.9920663651351D-04 0.1015668907964D-03 0.1039832736813D-03 + 0.1064571190411D-03 0.1089897924148D-03 0.1115826917580D-03 0.1142372482113D-03 + 0.1169549268870D-03 0.1197372276738D-03 0.1225856860613D-03 0.1255018739831D-03 + 0.1284874006808D-03 0.1315439135877D-03 0.1346730992336D-03 0.1378766841712D-03 + 0.1411564359238D-03 0.1445141639563D-03 0.1479517206680D-03 0.1514710024102D-03 + 0.1550739505263D-03 0.1587625524179D-03 0.1625388426349D-03 0.1664049039925D-03 + 0.1703628687133D-03 0.1744149195974D-03 0.1785632912194D-03 0.1828102711544D-03 + 0.1871582012321D-03 0.1916094788209D-03 0.1961665581427D-03 0.2008319516176D-03 + 0.2056082312418D-03 0.2104980299966D-03 0.2155040432913D-03 0.2206290304405D-03 + 0.2258758161753D-03 0.2312472921908D-03 0.2367464187300D-03 0.2423762262044D-03 + 0.2481398168542D-03 0.2540403664457D-03 0.2600811260106D-03 0.2662654236245D-03 + 0.2725966662290D-03 0.2790783414953D-03 0.2857140197324D-03 0.2925073558401D-03 + 0.2994620913080D-03 0.3065820562611D-03 0.3138711715547D-03 0.3213334509168D-03 + 0.3289730031429D-03 0.3367940343406D-03 0.3448008502286D-03 0.3529978584881D-03 + 0.3613895711713D-03 0.3699806071650D-03 0.3787756947128D-03 0.3877796739964D-03 + 0.3969974997780D-03 0.4064342441040D-03 0.4160950990725D-03 0.4259853796663D-03 + 0.4361105266519D-03 0.4464761095462D-03 0.4570878296540D-03 0.4679515231757D-03 + 0.4790731643881D-03 0.4904588689006D-03 0.5021148969868D-03 0.5140476569946D-03 + 0.5262637088364D-03 0.5387697675611D-03 0.5515727070097D-03 0.5646795635561D-03 + 0.5780975399370D-03 0.5918340091694D-03 0.6058965185620D-03 0.6202927938188D-03 + 0.6350307432396D-03 0.6501184620192D-03 0.6655642366457D-03 0.6813765494038D-03 + 0.6975640829812D-03 0.7141357251847D-03 0.7311005737650D-03 0.7484679413557D-03 + 0.7662473605260D-03 0.7844485889531D-03 0.8030816147148D-03 0.8221566617048D-03 + 0.8416841951763D-03 0.8616749274129D-03 0.8821398235337D-03 0.9030901074324D-03 + 0.9245372678559D-03 0.9464930646236D-03 0.9689695349932D-03 0.9919790001731D-03 + 0.1015534071988D-02 0.1039647659698D-02 0.1064332976981D-02 0.1089603549068D-02 + 0.1115473220057D-02 0.1141956160389D-02 0.1169066874495D-02 0.1196820208634D-02 + 0.1225231358897D-02 0.1254315879409D-02 0.1284089690715D-02 0.1314569088366D-02 + 0.1345770751696D-02 0.1377711752814D-02 0.1410409565795D-02 0.1443882076088D-02 + 0.1478147590144D-02 0.1513224845264D-02 0.1549133019674D-02 0.1585891742841D-02 + 0.1623521106018D-02 0.1662041673040D-02 0.1701474491365D-02 0.1741841103378D-02 + 0.1783163557945D-02 0.1825464422244D-02 0.1868766793867D-02 0.1913094313196D-02 + 0.1958471176071D-02 0.2004922146751D-02 0.2052472571166D-02 0.2101148390486D-02 + 0.2150976154989D-02 0.2201983038264D-02 0.2254196851731D-02 0.2307646059493D-02 + 0.2362359793542D-02 0.2418367869301D-02 0.2475700801533D-02 0.2534389820612D-02 + 0.2594466889165D-02 0.2655964719104D-02 0.2718916789042D-02 0.2783357362106D-02 + 0.2849321504172D-02 0.2916845102501D-02 0.2985964884814D-02 0.3056718438800D-02 + 0.3129144232066D-02 0.3203281632551D-02 0.3279170929405D-02 0.3356853354336D-02 + 0.3436371103460D-02 0.3517767359634D-02 0.3601086315312D-02 0.3686373195913D-02 + 0.3773674283724D-02 0.3863036942351D-02 0.3954509641719D-02 0.4048141983652D-02 + 0.4143984728019D-02 0.4242089819491D-02 0.4342510414893D-02 0.4445300911185D-02 + 0.4550516974067D-02 0.4658215567249D-02 0.4768454982366D-02 0.4881294869584D-02 + 0.4996796268890D-02 0.5115021642093D-02 0.5236034905549D-02 0.5359901463622D-02 + 0.5486688242898D-02 0.5616463727181D-02 0.5749297993262D-02 0.5885262747508D-02 + 0.6024431363262D-02 0.6166878919093D-02 0.6312682237899D-02 0.6461919926891D-02 + 0.6614672418475D-02 0.6771022012045D-02 0.6931052916716D-02 0.7094851295016D-02 + 0.7262505307545D-02 0.7434105158642D-02 0.7609743143066D-02 0.7789513693721D-02 + 0.7973513430440D-02 0.8161841209859D-02 0.8354598176397D-02 0.8551887814376D-02 + 0.8753816001287D-02 0.8960491062250D-02 0.9172023825667D-02 0.9388527680122D-02 + 0.9610118632529D-02 0.9836915367568D-02 0.1006903930843D-01 0.1030661467892D-01 + 0.1054976856688D-01 0.1079863098909D-01 0.1105333495749D-01 0.1131401654696D-01 + 0.1158081496451D-01 0.1185387262003D-01 0.1213333519856D-01 0.1241935173418D-01 + 0.1271207468545D-01 0.1301166001257D-01 0.1331826725616D-01 0.1363205961778D-01 + 0.1395320404221D-01 0.1428187130150D-01 0.1461823608081D-01 0.1496247706623D-01 + 0.1531477703430D-01 0.1567532294367D-01 0.1604430602860D-01 0.1642192189452D-01 + 0.1680837061563D-01 0.1720385683464D-01 0.1760858986456D-01 0.1802278379280D-01 + 0.1844665758734D-01 0.1888043520531D-01 0.1932434570378D-01 0.1977862335297D-01 + 0.2024350775185D-01 0.2071924394615D-01 0.2120608254895D-01 0.2170427986376D-01 + 0.2221409801021D-01 0.2273580505238D-01 0.2326967512987D-01 0.2381598859160D-01 + 0.2437503213237D-01 0.2494709893234D-01 0.2553248879941D-01 0.2613150831454D-01 + 0.2674447098014D-01 0.2737169737147D-01 0.2801351529124D-01 0.2867025992742D-01 + 0.2934227401421D-01 0.3002990799646D-01 0.3073352019732D-01 0.3145347698951D-01 + 0.3219015296988D-01 0.3294393113773D-01 0.3371520307664D-01 0.3450436914006D-01 + 0.3531183864059D-01 0.3613803004319D-01 0.3698337116219D-01 0.3784829936233D-01 + 0.3873326176383D-01 0.3963871545150D-01 0.4056512768813D-01 0.4151297613205D-01 + 0.4248274905905D-01 0.4347494558865D-01 0.4449007591493D-01 0.4552866154180D-01 + 0.4659123552298D-01 0.4767834270657D-01 0.4879053998454D-01 0.4992839654695D-01 + 0.5109249414114D-01 0.5228342733595D-01 0.5350180379101D-01 0.5474824453121D-01 + 0.5602338422639D-01 0.5732787147645D-01 0.5866236910176D-01 0.6002755443915D-01 + 0.6142411964345D-01 0.6285277199472D-01 0.6431423421119D-01 0.6580924476805D-01 + 0.6733855822219D-01 0.6890294554290D-01 0.7050319444864D-01 0.7214010975008D-01 + 0.7381451369925D-01 0.7552724634520D-01 0.7727916589591D-01 0.7907114908690D-01 + 0.8090409155624D-01 0.8277890822643D-01 0.8469653369292D-01 0.8665792261951D-01 + 0.8866405014071D-01 0.9071591227111D-01 0.9281452632182D-01 0.9496093132410D-01 + 0.9715618846031D-01 0.9940138150208D-01 0.1016976172560D+00 0.1040460260169D+00 + 0.1064477620282D+00 0.1089040039508D+00 0.1114159553388D+00 0.1139848451236D+00 + 0.1166119281054D+00 0.1192984854532D+00 0.1220458252122D+00 0.1248552828197D+00 + 0.1277282216288D+00 0.1306660334408D+00 0.1336701390448D+00 0.1367419887670D+00 + 0.1398830630269D+00 0.1430948729031D+00 0.1463789607067D+00 0.1497369005636D+00 + 0.1531702990050D+00 0.1566807955666D+00 0.1602700633964D+00 0.1639398098711D+00 + 0.1676917772207D+00 0.1715277431623D+00 0.1754495215419D+00 0.1794589629856D+00 + 0.1835579555582D+00 0.1877484254317D+00 0.1920323375616D+00 0.1964116963718D+00 + 0.2008885464482D+00 0.2054649732406D+00 0.2101431037732D+00 0.2149251073635D+00 + 0.2198131963488D+00 0.2248096268222D+00 0.2299166993754D+00 0.2351367598503D+00 + 0.2404722000984D+00 0.2459254587480D+00 0.2514990219789D+00 0.2571954243047D+00 + 0.2630172493626D+00 0.2689671307106D+00 0.2750477526311D+00 0.2812618509418D+00 + 0.2876122138134D+00 0.2941016825931D+00 0.3007331526352D+00 0.3075095741362D+00 + 0.3144339529771D+00 0.3215093515700D+00 0.3287388897102D+00 0.3361257454325D+00 + 0.3436731558729D+00 0.3513844181328D+00 0.3592628901485D+00 0.3673119915621D+00 + 0.3755352045968D+00 0.3839360749336D+00 0.3925182125899D+00 0.4012852927993D+00 + 0.4102410568930D+00 0.4193893131804D+00 0.4287339378299D+00 0.4382788757486D+00 + 0.4480281414604D+00 0.4579858199819D+00 0.4681560676951D+00 0.4785431132164D+00 + 0.4891512582614D+00 0.4999848785043D+00 0.5110484244305D+00 0.5223464221834D+00 + 0.5338834744021D+00 0.5456642610510D+00 0.5576935402392D+00 0.5699761490289D+00 + 0.5825170042325D+00 0.5953211031952D+00 0.6083935245653D+00 0.6217394290472D+00 + 0.6353640601390D+00 0.6492727448516D+00 0.6634708944082D+00 0.6779640049238D+00 + 0.6927576580616D+00 0.7078575216668D+00 0.7232693503742D+00 0.7389989861895D+00 + 0.7550523590420D+00 0.7714354873073D+00 0.7881544782973D+00 0.8052155287175D+00 + 0.8226249250876D+00 0.8403890441249D+00 0.8585143530879D+00 0.8770074100784D+00 + 0.8958748642992D+00 0.9151234562658D+00 0.9347600179702D+00 0.9547914729931D+00 + 0.9752248365635D+00 0.9960672155622D+00 0.1017325808468D+01 0.1039007905241D+01 + 0.1061120887144D+01 0.1083672226499D+01 0.1106669486370D+01 0.1130120320176D+01 + 0.1154032471231D+01 0.1178413772204D+01 0.1203272144493D+01 0.1228615597523D+01 + 0.1254452227950D+01 0.1280790218774D+01 0.1307637838359D+01 0.1335003439353D+01 + 0.1362895457506D+01 0.1391322410385D+01 0.1420292895972D+01 0.1449815591159D+01 + 0.1479899250115D+01 0.1510552702537D+01 0.1541784851777D+01 0.1573604672833D+01 + 0.1606021210210D+01 0.1639043575644D+01 0.1672680945677D+01 0.1706942559091D+01 + 0.1741837714186D+01 0.1777375765901D+01 0.1813566122779D+01 0.1850418243757D+01 + 0.1887941634794D+01 0.1926145845317D+01 0.1965040464488D+01 0.2004635117287D+01 + 0.2044939460400D+01 0.2085963177919D+01 0.2127715976829D+01 0.2170207582300D+01 + 0.2213447732763D+01 0.2257446174769D+01 0.2302212657626D+01 0.2347756927812D+01 + 0.2394088723154D+01 0.2441217766767D+01 0.2489153760756D+01 0.2537906379665D+01 + 0.2587485263675D+01 0.2637900011547D+01 0.2689160173295D+01 0.2741275242598D+01 + 0.2794254648931D+01 0.2848107749430D+01 0.2902843820459D+01 0.2958472048904D+01 + 0.3015001523163D+01 0.3072441223848D+01 0.3130800014182D+01 0.3190086630094D+01 + 0.3250309670002D+01 0.3311477584285D+01 0.3373598664440D+01 0.3436681031917D+01 + 0.3500732626634D+01 0.3565761195166D+01 0.3631774278604D+01 0.3698779200090D+01 + 0.3766783052007D+01 0.3835792682854D+01 0.3905814683769D+01 0.3976855374728D+01 + 0.4048920790399D+01 0.4122016665671D+01 0.4196148420834D+01 0.4271321146438D+01 + 0.4347539587809D+01 0.4424808129241D+01 0.4503130777854D+01 0.4582511147131D+01 + 0.4662952440136D+01 0.4744457432406D+01 0.4827028454547D+01 0.4910667374509D+01 + 0.4995375579573D+01 0.5081153958042D+01 0.5168002880655D+01 0.5255922181721D+01 + 0.5344911139992D+01 0.5434968459290D+01 0.5526092248881D+01 0.5618280003639D+01 + 0.5711528583982D+01 0.5805834195616D+01 0.5901192369103D+01 0.5997597939257D+01 + 0.6095045024395D+01 0.6193527005472D+01 0.6293036505099D+01 0.6393565366487D+01 + 0.6495104632331D+01 0.6597644523660D+01 0.6701174418681D+01 0.6805682831645D+01 + 0.6911157391760D+01 0.7017584822191D+01 0.7124950919171D+01 0.7233240531258D+01 + 0.7342437538781D+01 0.7452524833500D+01 0.7563484298530D+01 0.7675296788562D+01 + 0.7787942110430D+01 0.7901399004058D+01 0.8015645123842D+01 0.8130657020509D+01 + 0.8246410123503D+01 0.8362878723950D+01 0.8480035958250D+01 0.8597853792358D+01 + 0.8716303006799D+01 0.8835353182487D+01 0.8954972687391D+01 0.9075128664130D+01 + 0.9195787018538D+01 0.9316912409273D+01 0.9438468238543D+01 0.9560416644000D+01 + 0.9682718491880D+01 0.9805333371460D+01 0.9928219590896D+01 0.1005133417453D+02 + 0.1017463286171D+02 0.1029807010722D+02 0.1042159908344D+02 0.1054517168417D+02 + 0.1066873853037D+02 0.1079224897780D+02 0.1091565112659D+02 0.1103889183301D+02 + 0.1116191672323D+02 0.1128467020944D+02 0.1140709550823D+02 0.1152913466133D+02 + 0.1165072855885D+02 0.1177181696506D+02 0.1189233854680D+02 0.1201223090454D+02 + 0.1213143060625D+02 0.1224987322407D+02 0.1236749337400D+02 0.1248422475837D+02 + 0.1260000021157D+02 0.1271475174875D+02 0.1282841061773D+02 0.1294090735413D+02 + 0.1305217183979D+02 0.1316213336451D+02 0.1327072069111D+02 0.1337786212400D+02 + 0.1348348558110D+02 0.1358751866928D+02 0.1368988876325D+02 0.1379052308804D+02 + 0.1388934880491D+02 0.1398629310084D+02 0.1408128328150D+02 0.1417424686776D+02 + 0.1426511169568D+02 0.1435380601989D+02 0.1444025862047D+02 0.1452439891313D+02 + 0.1460615706273D+02 0.1468546410000D+02 0.1476225204147D+02 0.1483645401237D+02 + 0.1490800437259D+02 0.1497683884540D+02 0.1504289464893D+02 0.1510611063019D+02 + 0.1516642740155D+02 0.1522378747941D+02 0.1527813542502D+02 0.1532941798703D+02 + 0.1537758424592D+02 0.1542258575964D+02 0.1546437671057D+02 0.1550291405346D+02 + 0.1553815766392D+02 0.1557007048740D+02 0.1559861868825D+02 0.1562377179849D+02 + 0.1564550286611D+02 0.1566378860245D+02 0.1567860952827D+02 0.1568995011828D+02 + 0.1569779894358D+02 0.1570214881171D+02 0.1570299690387D+02 0.1570034490889D+02 + 0.1569419915342D+02 0.1568457072811D+02 0.1567147560898D+02 0.1565493477391D+02 + 0.1563497431333D+02 0.1561162553504D+02 0.1558492506233D+02 0.1555491492507D+02 + 0.1552164264320D+02 0.1548516130217D+02 0.1544552961962D+02 0.1540281200312D+02 + 0.1535707859803D+02 0.1530840532536D+02 0.1525687390884D+02 0.1520257189079D+02 + 0.1514559263632D+02 0.1508603532531D+02 0.1502400493172D+02 0.1495961218971D+02 + 0.1489297354623D+02 0.1482421109950D+02 0.1475345252306D+02 0.1468083097499D+02 + 0.1460648499184D+02 0.1453055836709D+02 0.1445320001360D+02 0.1437456381003D+02 + 0.1429480843075D+02 0.1421409715909D+02 0.1413259768392D+02 0.1405048187912D+02 + 0.1396792556614D+02 0.1388510825940D+02 0.1380221289467D+02 0.1371942554036D+02 + 0.1363693509198D+02 0.1355493294972D+02 0.1347361267958D+02 0.1339316965818D+02 + 0.1331380070165D+02 0.1323570367897D+02 0.1315907711016D+02 0.1308411975004D+02 + 0.1301103015787D+02 0.1294000625373D+02 0.1287124486230D+02 0.1280494124477D+02 + 0.1274128861984D+02 0.1268047767460D+02 0.1262269606643D+02 0.1256812791682D+02 + 0.1251695329838D+02 0.1246934771604D+02 0.1242548158392D+02 0.1238551969900D+02 + 0.1234962071295D+02 0.1231793660373D+02 0.1229061214824D+02 0.1226778439767D+02 + 0.1224958215706D+02 0.1223612547078D+02 0.1222752511553D+02 0.1222388210258D+02 + 0.1222528719100D+02 0.1223182041366D+02 0.1224355061775D+02 0.1226053502171D+02 + 0.1228281879023D+02 0.1231043462935D+02 0.1234340240339D+02 0.1238172877543D+02 + 0.1242540687338D+02 0.1247441598324D+02 0.1252872127141D+02 0.1258827353770D+02 + 0.1265300900087D+02 0.1272284911822D+02 0.1279770044081D+02 0.1287745450601D+02 + 0.1296198776857D+02 0.1305116157186D+02 0.1314482216032D+02 0.1324280073454D+02 + 0.1334491354991D+02 0.1345096205988D+02 0.1356073310471D+02 0.1367399914649D+02 + 0.1379051855093D+02 0.1391003591655D+02 0.1403228245150D+02 0.1415697639825D+02 + 0.1428382350615D+02 0.1441251755180D+02 0.1454274090682D+02 0.1467416515265D+02 + 0.1480645174180D+02 0.1493925270450D+02 0.1507221140012D+02 0.1520496331175D+02 + 0.1533713688305D+02 0.1546835439544D+02 0.1559823288411D+02 0.1572638509088D+02 + 0.1585242045188D+02 0.1597594611769D+02 0.1609656800349D+02 0.1621389186673D+02 + 0.1632752440935D+02 0.1643707440175D+02 0.1654215382521D+02 0.1664237902974D+02 + 0.1673737190368D+02 0.1682676105166D+02 0.1691018297723D+02 0.1698728326633D+02 + 0.1705771776761D+02 0.1712115376582D+02 0.1717727114395D+02 0.1722576353007D+02 + 0.1726633942470D+02 0.1729872330429D+02 0.1732265669667D+02 0.1733789922408D+02 + 0.1734422960952D+02 0.1734144664198D+02 0.1732937009656D+02 0.1730784160492D+02 + 0.1727672547225D+02 0.1723590943644D+02 0.1718530536559D+02 0.1712484989008D+02 + 0.1705450496536D+02 0.1697425836203D+02 0.1688412407975D+02 0.1678414268193D+02 + 0.1667438154808D+02 0.1655493504124D+02 0.1642592458792D+02 0.1628749866833D+02 + 0.1613983271513D+02 0.1598312891883D+02 0.1581761593876D+02 0.1564354851859D+02 + 0.1546120700566D+02 0.1527089677411D+02 0.1507294755170D+02 0.1486771265109D+02 + 0.1465556810624D+02 0.1443691171558D+02 0.1421216199343D+02 0.1398175703206D+02 + 0.1374615327696D+02 0.1350582421831D+02 0.1326125900230D+02 0.1301296096613D+02 + 0.1276144610103D+02 0.1250724144826D+02 0.1225088343315D+02 0.1199291614280D+02 + 0.1173388955369D+02 0.1147435771520D+02 0.1121487689618D+02 0.1095600370143D+02 + 0.1069829316549D+02 0.1044229683153D+02 0.1018856082317D+02 0.9937623917321D+01 + 0.9690015626445D+01 0.9446254298643D+01 0.9206845244038D+01 0.8972278896087D+01 + 0.8743029016360D+01 0.8519550951297D+01 0.8302279949355D+01 0.8091629546790D+01 + 0.7887990030116D+01 0.7691726983014D+01 0.7503179925129D+01 0.7322661049902D+01 + 0.7150454068046D+01 0.6986813162918D+01 0.6831962063451D+01 0.6686093239819D+01 + 0.6549367226364D+01 0.6421912075717D+01 0.6303822947394D+01 0.6195161833447D+01 + 0.6095957423078D+01 0.6006205107394D+01 0.5925867124779D+01 0.5854872846611D+01 + 0.5793119202371D+01 0.5740471242429D+01 0.5696762836121D+01 0.5661797502031D+01 + 0.5635349366701D+01 0.5617164247353D+01 0.5606960853570D+01 0.5604432102259D+01 + 0.5609246539649D+01 0.5621049863505D+01 0.5639466538232D+01 0.5664101495024D+01 + 0.5694541908766D+01 0.5730359042993D+01 0.5771110153784D+01 0.5816340443192D+01 + 0.5865585052475D+01 0.5918371085180D+01 0.5974219649957D+01 0.6032647912832D+01 + 0.6093171148637D+01 0.6155304781260D+01 0.6218566402475D+01 0.6282477759234D+01 + 0.6346566699475D+01 0.6410369066815D+01 0.6473430534781D+01 0.6535308371644D+01 + 0.6595573127395D+01 0.6653810234872D+01 0.6709621517670D+01 0.6762626598041D+01 + 0.6812464198680D+01 0.6858793332986D+01 0.6901294379138D+01 0.6939670034070D+01 + 0.6973646144233D+01 0.7002972410830D+01 0.7027422967990D+01 0.7046796833200D+01 + 0.7060918230061D+01 0.7069636784259D+01 0.7072827594374D+01 0.7070391179926D+01 + 0.7062253309715D+01 0.7048364714231D+01 0.7028700686483D+01 0.7003260576238D+01 + 0.6972067183121D+01 0.6935166054562D+01 0.6892624694966D+01 0.6844531692843D+01 + 0.6790995772965D+01 0.6732144780827D+01 0.6668124606899D+01 0.6599098058289D+01 + 0.6525243685473D+01 0.6446754571799D+01 0.6363837093418D+01 0.6276709657188D+01 + 0.6185601423998D+01 0.6090751024726D+01 0.5992405275866D+01 0.5890817901556D+01 + 0.5786248268476D+01 0.5678960139726D+01 0.5569220453475D+01 0.5457298131760D+01 + 0.5343462924443D+01 0.5227984292928D+01 0.5111130337809D+01 0.4993166774192D+01 + 0.4874355958030D+01 0.4754955966341D+01 0.4635219733799D+01 0.4515394247714D+01 + 0.4395719803061D+01 0.4276429318764D+01 0.4157747716089D+01 0.4039891359594D+01 + 0.3923067560758D+01 0.3807474144035D+01 0.3693299074769D+01 0.3580720148118D+01 + 0.3469904737816D+01 0.3361009603367D+01 0.3254180754011D+01 0.3149553367571D+01 + 0.3047251762116D+01 0.2947389418162D+01 0.2850069049006D+01 0.2755382716614D+01 + 0.2663411990420D+01 0.2574228146230D+01 0.2487892402405D+01 0.2404456190400D+01 + 0.2323961456713D+01 0.2246440993268D+01 0.2171918793250D+01 0.2100410429420D+01 + 0.2031923451965D+01 0.1966457802972D+01 0.1904006244666D+01 0.1844554798640D+01 + 0.1788083193345D+01 0.1734565317240D+01 0.1683969675070D+01 0.1636259844862D+01 + 0.1591394933364D+01 0.1549330027746D+01 0.1510016641546D+01 0.1473403152964D+01 + 0.1439435233770D+01 0.1408056267219D+01 0.1379207753531D+01 0.1352829701650D+01 + 0.1328861006133D+01 0.1307239808175D+01 0.1287903839946D+01 0.1270790751526D+01 + 0.1255838419882D+01 0.1242985239474D+01 0.1232170394175D+01 0.1223334110328D+01 + 0.1216417890857D+01 0.1211364730456D+01 0.1208119311934D+01 0.1206628183910D+01 + 0.1206839920052D+01 0.1208705260142D+01 0.1212177233248D+01 0.1217211263310D+01 + 0.1223765257423D+01 0.1231799677111D+01 0.1241277592815D+01 0.1252164721788D+01 + 0.1264429449524D+01 0.1278042834732D+01 0.1292978597814D+01 0.1309213092627D+01 + 0.1326725261233D+01 0.1345496571135D+01 0.1365510934358D+01 0.1386754607532D+01 + 0.1409215426363D+01 0.1433003097507D+01 0.1458223277591D+01 0.1484860699421D+01 + 0.1512902583279D+01 0.1542338542721D+01 0.1573160498496D+01 0.1605362600812D+01 + 0.1638941160170D+01 0.1673894586973D+01 0.1710223340083D+01 0.1747929884514D+01 + 7 1012 + 1 0 -1 -511.89150 + 2 0 -1 -58.80097 + 2 1 1 -50.61290 + 2 1 -2 -49.69692 + 3 0 -1 -5.52718 + 3 1 1 -3.14309 + 3 1 -2 -3.03034 + 0.2123373461549D-04 0.2173914995400D-04 0.2225659296114D-04 0.2278634977738D-04 + 0.2332871334728D-04 0.2388398358121D-04 0.2445246752083D-04 0.2503447950857D-04 + 0.2563034136106D-04 0.2624038254674D-04 0.2686494036763D-04 0.2750436014548D-04 + 0.2815899541226D-04 0.2882920810522D-04 0.2951536876657D-04 0.3021785674791D-04 + 0.3093706041946D-04 0.3167337738432D-04 0.3242721469777D-04 0.3319898909177D-04 + 0.3398912720483D-04 0.3479806581728D-04 0.3562625209215D-04 0.3647414382175D-04 + 0.3734220968012D-04 0.3823092948144D-04 0.3914079444457D-04 0.4007230746391D-04 + 0.4102598338660D-04 0.4200234929636D-04 0.4300194480406D-04 0.4402532234512D-04 + 0.4507304748402D-04 0.4614569922601D-04 0.4724387033618D-04 0.4836816766617D-04 + 0.4951921248852D-04 0.5069764083903D-04 0.5190410386721D-04 0.5313926819498D-04 + 0.5440381628400D-04 0.5569844681152D-04 0.5702387505533D-04 0.5838083328767D-04 + 0.5977007117859D-04 0.6119235620880D-04 0.6264847409228D-04 0.6413922920902D-04 + 0.6566544504782D-04 0.6722796465978D-04 0.6882765112238D-04 0.7046538801462D-04 + 0.7214207990339D-04 0.7385865284136D-04 0.7561605487667D-04 0.7741525657465D-04 + 0.7925725155197D-04 0.8114305702331D-04 0.8307371436110D-04 0.8505028966841D-04 + 0.8707387436545D-04 0.8914558578994D-04 0.9126656781168D-04 0.9343799146165D-04 + 0.9566105557602D-04 0.9793698745538D-04 0.1002670435396D-03 0.1026525100984D-03 + 0.1050947039390D-03 0.1075949731294D-03 0.1101546977394D-03 0.1127752905997D-03 + 0.1154581980775D-03 0.1182049008719D-03 0.1210169148270D-03 0.1238957917652D-03 + 0.1268431203390D-03 0.1298605269045D-03 0.1329496764137D-03 0.1361122733297D-03 + 0.1393500625619D-03 0.1426648304247D-03 0.1460584056178D-03 0.1495326602303D-03 + 0.1530895107681D-03 0.1567309192056D-03 0.1604588940629D-03 0.1642754915072D-03 + 0.1681828164816D-03 0.1721830238593D-03 0.1762783196258D-03 0.1804709620887D-03 + 0.1847632631165D-03 0.1891575894056D-03 0.1936563637785D-03 0.1982620665115D-03 + 0.2029772366947D-03 0.2078044736231D-03 0.2127464382210D-03 0.2178058545005D-03 + 0.2229855110531D-03 0.2282882625778D-03 0.2337170314442D-03 0.2392748092933D-03 + 0.2449646586752D-03 0.2507897147258D-03 0.2567531868833D-03 0.2628583606444D-03 + 0.2691085993625D-03 0.2755073460880D-03 0.2820581254518D-03 0.2887645455935D-03 + 0.2956303001344D-03 0.3026591701977D-03 0.3098550264756D-03 0.3172218313454D-03 + 0.3247636410353D-03 0.3324846078408D-03 0.3403889823939D-03 0.3484811159850D-03 + 0.3567654629401D-03 0.3652465830528D-03 0.3739291440747D-03 0.3828179242637D-03 + 0.3919178149916D-03 0.4012338234146D-03 0.4107710752045D-03 0.4205348173457D-03 + 0.4305304209971D-03 0.4407633844209D-03 0.4512393359813D-03 0.4619640372121D-03 + 0.4729433859575D-03 0.4841834195856D-03 0.4956903182785D-03 0.5074704083979D-03 + 0.5195301659314D-03 0.5318762200182D-03 0.5445153565579D-03 0.5574545219044D-03 + 0.5707008266453D-03 0.5842615494708D-03 0.5981441411326D-03 0.6123562284955D-03 + 0.6269056186847D-03 0.6418003033287D-03 0.6570484629028D-03 0.6726584711734D-03 + 0.6886388997468D-03 0.7049985227240D-03 0.7217463214642D-03 0.7388914894603D-03 + 0.7564434373277D-03 0.7744117979097D-03 0.7928064315026D-03 0.8116374312024D-03 + 0.8309151283763D-03 0.8506500982622D-03 0.8708531656989D-03 0.8915354109894D-03 + 0.9127081759015D-03 0.9343830698083D-03 0.9565719759715D-03 0.9792870579714D-03 + 0.1002540766287D-02 0.1026345845027D-02 0.1050715338824D-02 0.1075662599879D-02 + 0.1101201295181D-02 0.1127345413883D-02 0.1154109274864D-02 0.1181507534450D-02 + 0.1209555194328D-02 0.1238267609637D-02 0.1267660497252D-02 0.1297749944251D-02 + 0.1328552416593D-02 0.1360084767981D-02 0.1392364248945D-02 0.1425408516127D-02 + 0.1459235641785D-02 0.1493864123514D-02 0.1529312894196D-02 0.1565601332181D-02 + 0.1602749271697D-02 0.1640777013510D-02 0.1679705335822D-02 0.1719555505429D-02 + 0.1760349289133D-02 0.1802108965417D-02 0.1844857336390D-02 0.1888617740010D-02 + 0.1933414062589D-02 0.1979270751585D-02 0.2026212828687D-02 0.2074265903209D-02 + 0.2123456185786D-02 0.2173810502385D-02 0.2225356308647D-02 0.2278121704551D-02 + 0.2332135449417D-02 0.2387426977257D-02 0.2444026412476D-02 0.2501964585936D-02 + 0.2561273051389D-02 0.2621984102285D-02 0.2684130788965D-02 0.2747746936258D-02 + 0.2812867161465D-02 0.2879526892772D-02 0.2947762388071D-02 0.3017610754222D-02 + 0.3089109966753D-02 0.3162298890003D-02 0.3237217297741D-02 0.3313905894238D-02 + 0.3392406335837D-02 0.3472761253004D-02 0.3555014272883D-02 0.3639210042377D-02 + 0.3725394251736D-02 0.3813613658698D-02 0.3903916113173D-02 0.3996350582488D-02 + 0.4090967177209D-02 0.4187817177547D-02 0.4286953060364D-02 0.4388428526794D-02 + 0.4492298530489D-02 0.4598619306504D-02 0.4707448400838D-02 0.4818844700646D-02 + 0.4932868465127D-02 0.5049581357120D-02 0.5169046475404D-02 0.5291328387739D-02 + 0.5416493164639D-02 0.5544608413917D-02 0.5675743316002D-02 0.5809968660057D-02 + 0.5947356880904D-02 0.6087982096781D-02 0.6231920147946D-02 0.6379248636155D-02 + 0.6530046965011D-02 0.6684396381234D-02 0.6842380016839D-02 0.7004082932273D-02 + 0.7169592160503D-02 0.7338996752102D-02 0.7512387821327D-02 0.7689858593235D-02 + 0.7871504451850D-02 0.8057422989391D-02 0.8247714056607D-02 0.8442479814225D-02 + 0.8641824785540D-02 0.8845855910175D-02 0.9054682599025D-02 0.9268416790430D-02 + 0.9487173007575D-02 0.9711068417172D-02 0.9940222889430D-02 0.1017475905935D-01 + 0.1041480238936D-01 0.1066048123337D-01 0.1091192690214D-01 0.1116927373022D-01 + 0.1143265914425D-01 0.1170222373276D-01 0.1197811131760D-01 0.1226046902681D-01 + 0.1254944736912D-01 0.1284520031015D-01 0.1314788535014D-01 0.1345766360348D-01 + 0.1377469987990D-01 0.1409916276750D-01 0.1443122471744D-01 0.1477106213063D-01 + 0.1511885544620D-01 0.1547478923187D-01 0.1583905227632D-01 0.1621183768351D-01 + 0.1659334296907D-01 0.1698377015868D-01 0.1738332588869D-01 0.1779222150874D-01 + 0.1821067318670D-01 0.1863890201578D-01 0.1907713412394D-01 0.1952560078568D-01 + 0.1998453853608D-01 0.2045418928739D-01 0.2093480044805D-01 0.2142662504416D-01 + 0.2192992184360D-01 0.2244495548276D-01 0.2297199659585D-01 0.2351132194704D-01 + 0.2406321456527D-01 0.2462796388197D-01 0.2520586587156D-01 0.2579722319499D-01 + 0.2640234534617D-01 0.2702154880148D-01 0.2765515717239D-01 0.2830350136121D-01 + 0.2896691972007D-01 0.2964575821319D-01 0.3034037058244D-01 0.3105111851634D-01 + 0.3177837182251D-01 0.3252250860359D-01 0.3328391543683D-01 0.3406298755727D-01 + 0.3486012904465D-01 0.3567575301409D-01 0.3651028181063D-01 0.3736414720771D-01 + 0.3823779060956D-01 0.3913166325773D-01 0.4004622644169D-01 0.4098195171364D-01 + 0.4193932110758D-01 0.4291882736274D-01 0.4392097415138D-01 0.4494627631115D-01 + 0.4599526008193D-01 0.4706846334735D-01 0.4816643588104D-01 0.4928973959763D-01 + 0.5043894880863D-01 0.5161465048329D-01 0.5281744451445D-01 0.5404794398948D-01 + 0.5530677546647D-01 0.5659457925562D-01 0.5791200970601D-01 0.5925973549779D-01 + 0.6063843993988D-01 0.6204882127328D-01 0.6349159298001D-01 0.6496748409788D-01 + 0.6647723954103D-01 0.6802162042643D-01 0.6960140440641D-01 0.7121738600725D-01 + 0.7287037697395D-01 0.7456120662128D-01 0.7629072219118D-01 0.7805978921657D-01 + 0.7986929189166D-01 0.8172013344892D-01 0.8361323654265D-01 0.8554954363940D-01 + 0.8753001741513D-01 0.8955564115940D-01 0.9162741918654D-01 0.9374637725383D-01 + 0.9591356298698D-01 0.9813004631275D-01 0.1003969198990D+00 0.1027152996019D+00 + 0.1050863249211D+00 0.1075111594618D+00 0.1099909914051D+00 0.1125270339855D+00 + 0.1151205259766D+00 0.1177727321842D+00 0.1204849439476D+00 0.1232584796489D+00 + 0.1260946852301D+00 0.1289949347182D+00 0.1319606307590D+00 0.1349932051583D+00 + 0.1380941194317D+00 0.1412648653632D+00 0.1445069655708D+00 0.1478219740820D+00 + 0.1512114769165D+00 0.1546770926778D+00 0.1582204731535D+00 0.1618433039236D+00 + 0.1655473049771D+00 0.1693342313383D+00 0.1732058737000D+00 0.1771640590662D+00 + 0.1812106514032D+00 0.1853475522988D+00 0.1895767016304D+00 0.1939000782413D+00 + 0.1983197006251D+00 0.2028376276193D+00 0.2074559591063D+00 0.2121768367234D+00 + 0.2170024445803D+00 0.2219350099852D+00 0.2269768041788D+00 0.2321301430764D+00 + 0.2373973880172D+00 0.2427809465221D+00 0.2482832730585D+00 0.2539068698131D+00 + 0.2596542874715D+00 0.2655281260047D+00 0.2715310354636D+00 0.2776657167793D+00 + 0.2839349225700D+00 0.2903414579550D+00 0.2968881813739D+00 0.3035780054119D+00 + 0.3104138976312D+00 0.3173988814070D+00 0.3245360367687D+00 0.3318285012460D+00 + 0.3392794707188D+00 0.3468922002717D+00 0.3546700050516D+00 0.3626162611285D+00 + 0.3707344063591D+00 0.3790279412529D+00 0.3875004298396D+00 0.3961555005386D+00 + 0.4049968470283D+00 0.4140282291162D+00 0.4232534736091D+00 0.4326764751811D+00 + 0.4423011972414D+00 0.4521316727988D+00 0.4621720053237D+00 0.4724263696067D+00 + 0.4828990126121D+00 0.4935942543268D+00 0.5045164886027D+00 0.5156701839924D+00 + 0.5270598845772D+00 0.5386902107861D+00 0.5505658602051D+00 0.5626916083760D+00 + 0.5750723095830D+00 0.5877128976270D+00 0.6006183865849D+00 0.6137938715547D+00 + 0.6272445293836D+00 0.6409756193782D+00 0.6549924839961D+00 0.6693005495166D+00 + 0.6839053266899D+00 0.6988124113627D+00 0.7140274850788D+00 0.7295563156538D+00 + 0.7454047577210D+00 0.7615787532478D+00 0.7780843320207D+00 0.7949276120969D+00 + 0.8121148002200D+00 0.8296521921997D+00 0.8475461732513D+00 0.8658032182945D+00 + 0.8844298922086D+00 0.9034328500427D+00 0.9228188371772D+00 0.9425946894360D+00 + 0.9627673331456D+00 0.9833437851400D+00 0.1004331152707D+01 0.1025736633476D+01 + 0.1047567515241D+01 0.1069831175720D+01 0.1092535082243D+01 0.1115686791375D+01 + 0.1139293948457D+01 0.1163364287075D+01 0.1187905628445D+01 0.1212925880722D+01 + 0.1238433038208D+01 0.1264435180485D+01 0.1290940471443D+01 0.1317957158220D+01 + 0.1345493570030D+01 0.1373558116898D+01 0.1402159288280D+01 0.1431305651569D+01 + 0.1461005850494D+01 0.1491268603389D+01 0.1522102701342D+01 0.1553517006218D+01 + 0.1585520448546D+01 0.1618122025271D+01 0.1651330797361D+01 0.1685155887276D+01 + 0.1719606476280D+01 0.1754691801602D+01 0.1790421153434D+01 0.1826803871767D+01 + 0.1863849343063D+01 0.1901566996742D+01 0.1939966301501D+01 0.1979056761446D+01 + 0.2018847912032D+01 0.2059349315815D+01 0.2100570557999D+01 0.2142521241790D+01 + 0.2185210983528D+01 0.2228649407614D+01 0.2272846141215D+01 0.2317810808747D+01 + 0.2363553026124D+01 0.2410082394775D+01 0.2457408495423D+01 0.2505540881617D+01 + 0.2554489073015D+01 0.2604262548407D+01 0.2654870738488D+01 0.2706323018355D+01 + 0.2758628699743D+01 0.2811797022979D+01 0.2865837148659D+01 0.2920758149043D+01 + 0.2976568999160D+01 0.3033278567615D+01 0.3090895607108D+01 0.3149428744640D+01 + 0.3208886471423D+01 0.3269277132479D+01 0.3330608915918D+01 0.3392889841912D+01 + 0.3456127751341D+01 0.3520330294118D+01 0.3585504917195D+01 0.3651658852234D+01 + 0.3718799102956D+01 0.3786932432154D+01 0.3856065348377D+01 0.3926204092282D+01 + 0.3997354622651D+01 0.4069522602076D+01 0.4142713382310D+01 0.4216931989288D+01 + 0.4292183107814D+01 0.4368471065927D+01 0.4445799818928D+01 0.4524172933100D+01 + 0.4603593569097D+01 0.4684064465021D+01 0.4765587919192D+01 0.4848165772611D+01 + 0.4931799391130D+01 0.5016489647323D+01 0.5102236902085D+01 0.5189040985952D+01 + 0.5276901180158D+01 0.5365816197444D+01 0.5455784162617D+01 0.5546802592894D+01 + 0.5638868378017D+01 0.5731977760181D+01 0.5826126313769D+01 0.5921308924927D+01 + 0.6017519770983D+01 0.6114752299744D+01 0.6212999208681D+01 0.6312252424025D+01 + 0.6412503079799D+01 0.6513741496818D+01 0.6615957161666D+01 0.6719138705689D+01 + 0.6823273884037D+01 0.6928349554769D+01 0.7034351658067D+01 0.7141265195588D+01 + 0.7249074209985D+01 0.7357761764637D+01 0.7467309923627D+01 0.7577699732003D+01 + 0.7688911196366D+01 0.7800923265826D+01 0.7913713813378D+01 0.8027259617727D+01 + 0.8141536345630D+01 0.8256518534789D+01 0.8372179577355D+01 0.8488491704090D+01 + 0.8605425969248D+01 0.8722952236222D+01 0.8841039164025D+01 0.8959654194655D+01 + 0.9078763541413D+01 0.9198332178230D+01 0.9318323830066D+01 0.9438700964464D+01 + 0.9559424784293D+01 0.9680455221780D+01 0.9801750933887D+01 0.9923269299099D+01 + 0.1004496641570D+02 0.1016679710163D+02 0.1028871489593D+02 0.1041067206198D+02 + 0.1053261959239D+02 0.1065450721594D+02 0.1077628340626D+02 0.1089789539267D+02 + 0.1101928917306D+02 0.1114040952889D+02 0.1126120004259D+02 0.1138160311709D+02 + 0.1150155999788D+02 0.1162101079752D+02 0.1173989452270D+02 0.1185814910389D+02 + 0.1197571142774D+02 0.1209251737221D+02 0.1220850184455D+02 0.1232359882222D+02 + 0.1243774139668D+02 0.1255086182033D+02 0.1266289155645D+02 0.1277376133233D+02 + 0.1288340119558D+02 0.1299174057364D+02 0.1309870833671D+02 0.1320423286383D+02 + 0.1330824211245D+02 0.1341066369131D+02 0.1351142493681D+02 0.1361045299271D+02 + 0.1370767489335D+02 0.1380301765027D+02 0.1389640834224D+02 0.1398777420882D+02 + 0.1407704274716D+02 0.1416414181234D+02 0.1424899972093D+02 0.1433154535791D+02 + 0.1441170828680D+02 0.1448941886294D+02 0.1456460834990D+02 0.1463720903887D+02 + 0.1470715437095D+02 0.1477437906225D+02 0.1483881923166D+02 0.1490041253114D+02 + 0.1495909827839D+02 0.1501481759178D+02 0.1506751352732D+02 0.1511713121747D+02 + 0.1516361801165D+02 0.1520692361818D+02 0.1524700024742D+02 0.1528380275595D+02 + 0.1531728879140D+02 0.1534741893776D+02 0.1537415686084D+02 0.1539746945363D+02 + 0.1541732698111D+02 0.1543370322439D+02 0.1544657562364D+02 0.1545592541956D+02 + 0.1546173779302D+02 0.1546400200242D+02 0.1546271151843D+02 0.1545786415570D+02 + 0.1544946220111D+02 0.1543751253809D+02 0.1542202676661D+02 0.1540302131844D+02 + 0.1538051756708D+02 0.1535454193202D+02 0.1532512597682D+02 0.1529230650045D+02 + 0.1525612562157D+02 0.1521663085508D+02 0.1517387518057D+02 0.1512791710213D+02 + 0.1507882069905D+02 0.1502665566690D+02 0.1497149734847D+02 0.1491342675424D+02 + 0.1485253057170D+02 0.1478890116319D+02 0.1472263655178D+02 0.1465384039476D+02 + 0.1458262194423D+02 0.1450909599456D+02 0.1443338281613D+02 0.1435560807511D+02 + 0.1427590273888D+02 0.1419440296685D+02 0.1411124998625D+02 0.1402658995277D+02 + 0.1394057379573D+02 0.1385335704764D+02 0.1376509965795D+02 0.1367596579089D+02 + 0.1358612360737D+02 0.1349574503081D+02 0.1340500549696D+02 0.1331408368786D+02 + 0.1322316124986D+02 0.1313242249599D+02 0.1304205409292D+02 0.1295224473262D+02 + 0.1286318478926D+02 0.1277506596148D+02 0.1268808090072D+02 0.1260242282594D+02 + 0.1251828512526D+02 0.1243586094535D+02 0.1235534276899D+02 0.1227692198172D+02 + 0.1220078842830D+02 0.1212712995982D+02 0.1205613197253D+02 0.1198797693913D+02 + 0.1192284393379D+02 0.1186090815186D+02 0.1180234042546D+02 0.1174730673615D+02 + 0.1169596772603D+02 0.1164847820834D+02 0.1160498667924D+02 0.1156563483188D+02 + 0.1153055707436D+02 0.1149988005301D+02 0.1147372218250D+02 0.1145219318434D+02 + 0.1143539363525D+02 0.1142341452711D+02 0.1141633683999D+02 0.1141423112993D+02 + 0.1141715713298D+02 0.1142516338731D+02 0.1143828687474D+02 0.1145655268355D+02 + 0.1147997369390D+02 0.1150855028761D+02 0.1154227008374D+02 0.1158110770138D+02 + 0.1162502455129D+02 0.1167396865756D+02 0.1172787451079D+02 0.1178666295396D+02 + 0.1185024110228D+02 0.1191850229803D+02 0.1199132610159D+02 0.1206857831946D+02 + 0.1215011107019D+02 0.1223576288907D+02 0.1232535887199D+02 0.1241871085933D+02 + 0.1251561765997D+02 0.1261586531600D+02 0.1271922740805D+02 0.1282546540151D+02 + 0.1293432903330D+02 0.1304555673916D+02 0.1315887612096D+02 0.1327400445348D+02 + 0.1339064923005D+02 0.1350850874625D+02 0.1362727272054D+02 0.1374662295087D+02 + 0.1386623400591D+02 0.1398577394943D+02 0.1410490509638D+02 0.1422328479880D+02 + 0.1434056625987D+02 0.1445639937388D+02 0.1457043159027D+02 0.1468230879914D+02 + 0.1479167623614D+02 0.1489817940404D+02 0.1500146500841D+02 0.1510118190471D+02 + 0.1519698205391D+02 0.1528852148379D+02 0.1537546125281D+02 0.1545746841364D+02 + 0.1553421697307D+02 0.1560538884523D+02 0.1567067479483D+02 0.1572977536717D+02 + 0.1578240180176D+02 0.1582827692612D+02 0.1586713602663D+02 0.1589872769311D+02 + 0.1592281463392D+02 0.1593917445849D+02 0.1594760042409D+02 0.1594790214378D+02 + 0.1593990625272D+02 0.1592345702984D+02 0.1589841697221D+02 0.1586466731948D+02 + 0.1582210852585D+02 0.1577066067732D+02 0.1571026385193D+02 0.1564087842120D+02 + 0.1556248529064D+02 0.1547508607802D+02 0.1537870322780D+02 0.1527338006062D+02 + 0.1515918075676D+02 0.1503619027308D+02 0.1490451419267D+02 0.1476427850715D+02 + 0.1461562933169D+02 0.1445873255288D+02 0.1429377341010D+02 0.1412095601137D+02 + 0.1394050278444D+02 0.1375265386499D+02 0.1355766642312D+02 0.1335581393054D+02 + 0.1314738537038D+02 0.1293268439219D+02 0.1271202841511D+02 0.1248574768189D+02 + 0.1225418426740D+02 0.1201769104500D+02 0.1177663061449D+02 0.1153137419578D+02 + 0.1128230049248D+02 0.1102979452961D+02 0.1077424647032D+02 0.1051605041603D+02 + 0.1025560319513D+02 0.9993303145083D+01 0.9729548892983D+01 0.9464738139829D+01 + 0.9199266453606D+01 0.8933526076402D+01 0.8667904750745D+01 0.8402784570301D+01 + 0.8138540859996D+01 0.7875541090527D+01 0.7614143832090D+01 0.7354697751983D+01 + 0.7097540660550D+01 0.6842998609696D+01 0.6591385047920D+01 0.6343000035605D+01 + 0.6098129523858D+01 0.5857044699944D+01 0.5620001401934D+01 0.5387239604814D+01 + 0.5158982979846D+01 0.4935438528573D+01 0.4716796292366D+01 0.4503229137976D+01 + 0.4294892619056D+01 0.4091924913152D+01 0.3894446833193D+01 0.3702561912045D+01 + 0.3516356558237D+01 0.3335900280537D+01 0.3161245978670D+01 0.2992430297065D+01 + 0.2829474038194D+01 0.2672382631762D+01 0.2521146655720D+01 0.2375742404881D+01 + 0.2236132502695D+01 0.2102266551639D+01 0.1974081817541D+01 0.1851503943111D+01 + 0.1734447685940D+01 0.1622817676200D+01 0.1516509189368D+01 0.1415408929331D+01 + 0.1319395817360D+01 0.1228341782531D+01 0.1142112549373D+01 0.1060568418635D+01 + 0.9835650373019D+00 0.9109541541726D+00 0.8425843575459D+00 0.7783017917968D+00 + 0.7179508498817D+00 0.6613748390683D+00 0.6084166174653D+00 0.5589191992012D+00 + 0.5127263263911D+00 0.4696830063190D+00 0.4296360125529D+00 0.3924343490009D+00 + 0.3579296762027D+00 0.3259766994340D+00 0.2964335184742D+00 0.2691619391536D+00 + 0.2440277470488D+00 0.2209009439361D+00 0.1996559478365D+00 0.1801717576938D+00 + 0.1623320839184D+00 0.1460254461990D+00 0.1311452401368D+00 0.1175897743854D+00 + 0.1052622800912D+00 0.9407089451527D-01 0.8392862078550D-01 0.7475326577690D-01 + 0.6646735814128D-01 0.5899804851766D-01 0.5227699394346D-01 0.4624022845899D-01 + 0.4082802185442D-01 0.3598472845105D-01 0.3165862773800D-01 0.2780175860384D-01 + 0.2436974881146D-01 0.2132164126495D-01 0.1861971851162D-01 0.1622932681167D-01 + 0.1411870099424D-01 0.1225879120292D-01 0.1062309251766D-01 0.9187478324824D-02 + 0.7930038194170D-02 0.6830920911119D-02 0.5872183206948D-02 0.5037644628161D-02 + 0.4312748890659D-02 0.3684431974697D-02 0.3140997133459D-02 0.2671996911721D-02 + 0.2268122201696D-02 0.1921098300832D-02 0.1623587881022D-02 0.1369100730387D-02 + 0.1151910087150D-02 0.9669753500508D-03 0.8098709208516D-03 0.6767209113939D-03 + 0.5641394300578D-03 0.4691761498429D-03 0.3892668522563D-03 0.3221886372696D-03 + 0.2660194893607D-03 0.2191018926233D-03 0.1800101936858D-03 0.1475214192933D-03 + 0.1205892654847D-03 0.9832098695562D-04 0.7995692809159D-04 0.6485245095860D-04 + 0.5246202996510D-04 0.4232529769133D-04 0.3405484129524D-04 0.2732556374477D-04 + 0.2186543872353D-04 0.1744750226736D-04 0.1388293789508D-04 0.1101512510421D-04 + 0.8714533541124D-05 0.6874356872787D-05 0.5406791351919D-05 0.4239874261002D-05 + 0.3314806839624D-05 0.2583694952262D-05 0.2007648657315D-05 0.1555189018603D-05 + 0.1200916989437D-05 0.9244050332163D-06 0.7092773630705D-06 0.5424493283134D-06 + 0.4135005904089D-06 0.3141603589352D-06 0.2378861413798D-06 0.1795202409555D-06 + 0.1350106538765D-06 0.1011851095086D-06 0.7556879909866D-07 0.5623788451178D-07 + 0.4170219815814D-07 0.3081166707088D-07 0.2268194336078D-07 0.1663552297805D-07 + 0.1215530542863D-07 0.8848107127806D-08 0.6416106613217D-08 0.4634585104140D-08 + 0.3334643304910D-08 0.2389835688104D-08 0.1705876062949D-08 0.1212741020005D-08 + 0.8586376559590D-09 0.6054146003728D-09 0.4250856698627D-09 0.2972075512731D-09 + 0.2069101606973D-09 0.1434236365115D-09 0.9898160505409D-10 0.6800804519963D-10 + 0.4651712787494D-10 0.3167310042586D-10 0.2146695649341D-10 0.1448079937139D-10 + 0.9722622861678D-11 0.6496070631129D-11 0.4319651023999D-11 0.2858591661735D-11 + 0.1882503214946D-11 0.1233598363270D-11 0.8043412065319D-12 0.5218060130221D-12 + 0.3367856512696D-12 0.2162455335843D-12 0.1381220475631D-12 0.8775552000331D-13 diff --git a/Test/Fe16_non_collinear/v_fe16.8 b/Test/Fe16_non_collinear/v_fe16.8 new file mode 100755 index 000000000..f3c4e967f --- /dev/null +++ b/Test/Fe16_non_collinear/v_fe16.8 @@ -0,0 +1,1542 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Fe. + 2 0.0000000000000D+00 + LSMS: xx z= 26. xvalws= 5.22926 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728400909D+02-0.5199725115555D+02-0.5199721790459D+02-0.5199718425142D+02 +-0.5199715019116D+02-0.5199711571889D+02-0.5199708082964D+02-0.5199704551834D+02 +-0.5199700977990D+02-0.5199697360915D+02-0.5199693700086D+02-0.5199689994973D+02 +-0.5199686245042D+02-0.5199682449748D+02-0.5199678608545D+02-0.5199674720876D+02 +-0.5199670786180D+02-0.5199666803887D+02-0.5199662773421D+02-0.5199658694201D+02 +-0.5199654565635D+02-0.5199650387127D+02-0.5199646158073D+02-0.5199641877860D+02 +-0.5199637545872D+02-0.5199633161480D+02-0.5199628724051D+02-0.5199624232942D+02 +-0.5199619687506D+02-0.5199615087084D+02-0.5199610431012D+02-0.5199605718616D+02 +-0.5199600949214D+02-0.5199596122116D+02-0.5199591236626D+02-0.5199586292036D+02 +-0.5199581287632D+02-0.5199576222688D+02-0.5199571096474D+02-0.5199565908248D+02 +-0.5199560657259D+02-0.5199555342748D+02-0.5199549963947D+02-0.5199544520078D+02 +-0.5199539010352D+02-0.5199533433975D+02-0.5199527790139D+02-0.5199522078028D+02 +-0.5199516296816D+02-0.5199510445666D+02-0.5199504523733D+02-0.5199498530160D+02 +-0.5199492464081D+02-0.5199486324617D+02-0.5199480110883D+02-0.5199473821977D+02 +-0.5199467456990D+02-0.5199461015004D+02-0.5199454495085D+02-0.5199447896290D+02 +-0.5199441217666D+02-0.5199434458246D+02-0.5199427617052D+02-0.5199420693096D+02 +-0.5199413685375D+02-0.5199406592876D+02-0.5199399414573D+02-0.5199392149428D+02 +-0.5199384796390D+02-0.5199377354396D+02-0.5199369822368D+02-0.5199362199218D+02 +-0.5199354483843D+02-0.5199346675127D+02-0.5199338771940D+02-0.5199330773139D+02 +-0.5199322677567D+02-0.5199314484053D+02-0.5199306191412D+02-0.5199297798443D+02 +-0.5199289303934D+02-0.5199280706654D+02-0.5199272005361D+02-0.5199263198797D+02 +-0.5199254285685D+02-0.5199245264737D+02-0.5199236134649D+02-0.5199226894099D+02 +-0.5199217541751D+02-0.5199208076251D+02-0.5199198496230D+02-0.5199188800302D+02 +-0.5199178987064D+02-0.5199169055096D+02-0.5199159002963D+02-0.5199148829207D+02 +-0.5199138532359D+02-0.5199128110928D+02-0.5199117563407D+02-0.5199106888269D+02 +-0.5199096083969D+02-0.5199085148944D+02-0.5199074081613D+02-0.5199062880373D+02 +-0.5199051543604D+02-0.5199040069664D+02-0.5199028456895D+02-0.5199016703615D+02 +-0.5199004808124D+02-0.5198992768700D+02-0.5198980583600D+02-0.5198968251063D+02 +-0.5198955769302D+02-0.5198943136512D+02-0.5198930350863D+02-0.5198917410506D+02 +-0.5198904313569D+02-0.5198891058155D+02-0.5198877642345D+02-0.5198864064200D+02 +-0.5198850321751D+02-0.5198836413012D+02-0.5198822335968D+02-0.5198808088582D+02 +-0.5198793668793D+02-0.5198779074512D+02-0.5198764303627D+02-0.5198749354000D+02 +-0.5198734223467D+02-0.5198718909837D+02-0.5198703410894D+02-0.5198687724393D+02 +-0.5198671848065D+02-0.5198655779610D+02-0.5198639516703D+02-0.5198623056988D+02 +-0.5198606398084D+02-0.5198589537577D+02-0.5198572473026D+02-0.5198555201962D+02 +-0.5198537721883D+02-0.5198520030257D+02-0.5198502124524D+02-0.5198484002091D+02 +-0.5198465660333D+02-0.5198447096595D+02-0.5198428308188D+02-0.5198409292391D+02 +-0.5198390046450D+02-0.5198370567579D+02-0.5198350852955D+02-0.5198330899725D+02 +-0.5198310704998D+02-0.5198290265850D+02-0.5198269579318D+02-0.5198248642408D+02 +-0.5198227452087D+02-0.5198206005285D+02-0.5198184298896D+02-0.5198162329776D+02 +-0.5198140094741D+02-0.5198117590571D+02-0.5198094814005D+02-0.5198071761744D+02 +-0.5198048430449D+02-0.5198024816738D+02-0.5198000917191D+02-0.5197976728344D+02 +-0.5197952246692D+02-0.5197927468690D+02-0.5197902390745D+02-0.5197877009224D+02 +-0.5197851320449D+02-0.5197825320698D+02-0.5197799006201D+02-0.5197772373146D+02 +-0.5197745417673D+02-0.5197718135875D+02-0.5197690523796D+02-0.5197662577437D+02 +-0.5197634292744D+02-0.5197605665620D+02-0.5197576691913D+02-0.5197547367423D+02 +-0.5197517687900D+02-0.5197487649041D+02-0.5197457246489D+02-0.5197426475838D+02 +-0.5197395332627D+02-0.5197363812338D+02-0.5197331910403D+02-0.5197299622195D+02 +-0.5197266943031D+02-0.5197233868173D+02-0.5197200392824D+02-0.5197166512128D+02 +-0.5197132221174D+02-0.5197097514984D+02-0.5197062388528D+02-0.5197026836709D+02 +-0.5196990854370D+02-0.5196954436291D+02-0.5196917577189D+02-0.5196880271716D+02 +-0.5196842514461D+02-0.5196804299945D+02-0.5196765622622D+02-0.5196726476881D+02 +-0.5196686857041D+02-0.5196646757354D+02-0.5196606171998D+02-0.5196565095085D+02 +-0.5196523520651D+02-0.5196481442664D+02-0.5196438855015D+02-0.5196395751522D+02 +-0.5196352125928D+02-0.5196307971901D+02-0.5196263283028D+02-0.5196218052823D+02 +-0.5196172274718D+02-0.5196125942066D+02-0.5196079048138D+02-0.5196031586126D+02 +-0.5195983549135D+02-0.5195934930191D+02-0.5195885722231D+02-0.5195835918107D+02 +-0.5195785510585D+02-0.5195734492343D+02-0.5195682855969D+02-0.5195630593961D+02 +-0.5195577698725D+02-0.5195524162577D+02-0.5195469977736D+02-0.5195415136330D+02 +-0.5195359630387D+02-0.5195303451841D+02-0.5195246592528D+02-0.5195189044181D+02 +-0.5195130798435D+02-0.5195071846824D+02-0.5195012180777D+02-0.5194951791619D+02 +-0.5194890670569D+02-0.5194828808741D+02-0.5194766197137D+02-0.5194702826653D+02 +-0.5194638688071D+02-0.5194573772064D+02-0.5194508069188D+02-0.5194441569885D+02 +-0.5194374264482D+02-0.5194306143187D+02-0.5194237196087D+02-0.5194167413149D+02 +-0.5194096784220D+02-0.5194025299021D+02-0.5193952947146D+02-0.5193879718066D+02 +-0.5193805601119D+02-0.5193730585519D+02-0.5193654660341D+02-0.5193577814533D+02 +-0.5193500036904D+02-0.5193421316129D+02-0.5193341640742D+02-0.5193260999141D+02 +-0.5193179379578D+02-0.5193096770164D+02-0.5193013158865D+02-0.5192928533501D+02 +-0.5192842881739D+02-0.5192756191098D+02-0.5192668448947D+02-0.5192579642497D+02 +-0.5192489758803D+02-0.5192398784765D+02-0.5192306707119D+02-0.5192213512442D+02 +-0.5192119187145D+02-0.5192023717474D+02-0.5191927089505D+02-0.5191829289146D+02 +-0.5191730302133D+02-0.5191630114025D+02-0.5191528710207D+02-0.5191426075883D+02 +-0.5191322196077D+02-0.5191217055632D+02-0.5191110639202D+02-0.5191002931255D+02 +-0.5190893916069D+02-0.5190783577729D+02-0.5190671900126D+02-0.5190558866954D+02 +-0.5190444461705D+02-0.5190328667673D+02-0.5190211467945D+02-0.5190092845399D+02 +-0.5189972782709D+02-0.5189851262330D+02-0.5189728266508D+02-0.5189603777267D+02 +-0.5189477776415D+02-0.5189350245533D+02-0.5189221165981D+02-0.5189090518885D+02 +-0.5188958285145D+02-0.5188824445423D+02-0.5188688980147D+02-0.5188551869503D+02 +-0.5188413093435D+02-0.5188272631641D+02-0.5188130463569D+02-0.5187986568418D+02 +-0.5187840925129D+02-0.5187693512386D+02-0.5187544308611D+02-0.5187393291962D+02 +-0.5187240440329D+02-0.5187085731330D+02-0.5186929142309D+02-0.5186770650332D+02 +-0.5186610232183D+02-0.5186447864362D+02-0.5186283523081D+02-0.5186117184259D+02 +-0.5185948823518D+02-0.5185778416183D+02-0.5185605937277D+02-0.5185431361514D+02 +-0.5185254663297D+02-0.5185075816718D+02-0.5184894795548D+02-0.5184711573237D+02 +-0.5184526122909D+02-0.5184338417356D+02-0.5184148429039D+02-0.5183956130079D+02 +-0.5183761492255D+02-0.5183564486998D+02-0.5183365085389D+02-0.5183163258155D+02 +-0.5182958975660D+02-0.5182752207907D+02-0.5182542924529D+02-0.5182331094785D+02 +-0.5182116687559D+02-0.5181899671350D+02-0.5181680014270D+02-0.5181457684041D+02 +-0.5181232647986D+02-0.5181004873028D+02-0.5180774325683D+02-0.5180540972054D+02 +-0.5180304777830D+02-0.5180065708277D+02-0.5179823728232D+02-0.5179578802103D+02 +-0.5179330893860D+02-0.5179079967027D+02-0.5178825984684D+02-0.5178568909453D+02 +-0.5178308703501D+02-0.5178045328526D+02-0.5177778745757D+02-0.5177508915948D+02 +-0.5177235799366D+02-0.5176959355795D+02-0.5176679544522D+02-0.5176396324334D+02 +-0.5176109653512D+02-0.5175819489823D+02-0.5175525790517D+02-0.5175228512318D+02 +-0.5174927611419D+02-0.5174623043474D+02-0.5174314763592D+02-0.5174002726332D+02 +-0.5173686885694D+02-0.5173367195115D+02-0.5173043607457D+02-0.5172716075006D+02 +-0.5172384549462D+02-0.5172048981932D+02-0.5171709322923D+02-0.5171365522335D+02 +-0.5171017529452D+02-0.5170665292940D+02-0.5170308760833D+02-0.5169947880525D+02 +-0.5169582598771D+02-0.5169212861671D+02-0.5168838614662D+02-0.5168459802518D+02 +-0.5168076369333D+02-0.5167688258518D+02-0.5167295412791D+02-0.5166897774168D+02 +-0.5166495283960D+02-0.5166087882755D+02-0.5165675510418D+02-0.5165258106080D+02 +-0.5164835608125D+02-0.5164407954186D+02-0.5163975081138D+02-0.5163536925080D+02 +-0.5163093421337D+02-0.5162644504442D+02-0.5162190108131D+02-0.5161730165335D+02 +-0.5161264608164D+02-0.5160793367906D+02-0.5160316375011D+02-0.5159833559084D+02 +-0.5159344848875D+02-0.5158850172268D+02-0.5158349456272D+02-0.5157842627009D+02 +-0.5157329609709D+02-0.5156810328692D+02-0.5156284707365D+02-0.5155752668206D+02 +-0.5155214132756D+02-0.5154669021608D+02-0.5154117254396D+02-0.5153558749786D+02 +-0.5152993425461D+02-0.5152421198113D+02-0.5151841983433D+02-0.5151255696093D+02 +-0.5150662249744D+02-0.5150061557002D+02-0.5149453529428D+02-0.5148838077528D+02 +-0.5148215110737D+02-0.5147584537403D+02-0.5146946264782D+02-0.5146300199022D+02 +-0.5145646245151D+02-0.5144984307067D+02-0.5144314287525D+02-0.5143636088122D+02 +-0.5142949609291D+02-0.5142254750281D+02-0.5141551409151D+02-0.5140839482753D+02 +-0.5140118866721D+02-0.5139389455459D+02-0.5138651142128D+02-0.5137903818632D+02 +-0.5137147375605D+02-0.5136381702401D+02-0.5135606687078D+02-0.5134822216388D+02 +-0.5134028175756D+02-0.5133224449278D+02-0.5132410919702D+02-0.5131587468413D+02 +-0.5130753975423D+02-0.5129910319357D+02-0.5129056377438D+02-0.5128192025477D+02 +-0.5127317137854D+02-0.5126431587514D+02-0.5125535245940D+02-0.5124627983153D+02 +-0.5123709667690D+02-0.5122780166596D+02-0.5121839345403D+02-0.5120887068125D+02 +-0.5119923197240D+02-0.5118947593678D+02-0.5117960116805D+02-0.5116960624416D+02 +-0.5115948972712D+02-0.5114925016296D+02-0.5113888608154D+02-0.5112839599644D+02 +-0.5111777840483D+02-0.5110703178733D+02-0.5109615460788D+02-0.5108514531363D+02 +-0.5107400233480D+02-0.5106272408452D+02-0.5105130895877D+02-0.5103975533619D+02 +-0.5102806157801D+02-0.5101622602790D+02-0.5100424701185D+02-0.5099212283803D+02 +-0.5097985179674D+02-0.5096743216021D+02-0.5095486218256D+02-0.5094214009961D+02 +-0.5092926412887D+02-0.5091623246932D+02-0.5090304330139D+02-0.5088969478681D+02 +-0.5087618506855D+02-0.5086251227064D+02-0.5084867449820D+02-0.5083466983722D+02 +-0.5082049635455D+02-0.5080615209778D+02-0.5079163509518D+02-0.5077694335558D+02 +-0.5076207486834D+02-0.5074702760324D+02-0.5073179951042D+02-0.5071638852033D+02 +-0.5070079254364D+02-0.5068500947122D+02-0.5066903717403D+02-0.5065287350315D+02 +-0.5063651628963D+02-0.5061996334457D+02-0.5060321245898D+02-0.5058626140382D+02 +-0.5056910792994D+02-0.5055174976809D+02-0.5053418462884D+02-0.5051641020267D+02 +-0.5049842415989D+02-0.5048022415067D+02-0.5046180780505D+02-0.5044317273295D+02 +-0.5042431652422D+02-0.5040523674861D+02-0.5038593095586D+02-0.5036639667573D+02 +-0.5034663141803D+02-0.5032663267268D+02-0.5030639790981D+02-0.5028592457977D+02 +-0.5026521011328D+02-0.5024425192145D+02-0.5022304739591D+02-0.5020159390892D+02 +-0.5017988881346D+02-0.5015792944334D+02-0.5013571311336D+02-0.5011323711944D+02 +-0.5009049873873D+02-0.5006749522980D+02-0.5004422383280D+02-0.5002068176959D+02 +-0.4999686624397D+02-0.4997277444186D+02-0.4994840353146D+02-0.4992375066350D+02 +-0.4989881297144D+02-0.4987358757171D+02-0.4984807156389D+02-0.4982226203106D+02 +-0.4979615603991D+02-0.4976975064117D+02-0.4974304286974D+02-0.4971602974502D+02 +-0.4968870827126D+02-0.4966107543776D+02-0.4963312821924D+02-0.4960486357616D+02 +-0.4957627845502D+02-0.4954736978871D+02-0.4951813449683D+02-0.4948856948612D+02 +-0.4945867165071D+02-0.4942843787257D+02-0.4939786502185D+02-0.4936694995729D+02 +-0.4933568952659D+02-0.4930408056681D+02-0.4927211990478D+02-0.4923980435752D+02 +-0.4920713073265D+02-0.4917409582880D+02-0.4914069643607D+02-0.4910692933642D+02 +-0.4907279130416D+02-0.4903827910633D+02-0.4900338950319D+02-0.4896811924867D+02 +-0.4893246509079D+02-0.4889642377211D+02-0.4885999203021D+02-0.4882316659813D+02 +-0.4878594420482D+02-0.4874832157556D+02-0.4871029543247D+02-0.4867186249491D+02 +-0.4863301947995D+02-0.4859376310277D+02-0.4855409007715D+02-0.4851399711583D+02 +-0.4847348093100D+02-0.4843253823466D+02-0.4839116573905D+02-0.4834936015704D+02 +-0.4830711820251D+02-0.4826443659074D+02-0.4822131203876D+02-0.4817774126566D+02 +-0.4813372099301D+02-0.4808924794511D+02-0.4804431884930D+02-0.4799893043625D+02 +-0.4795307944023D+02-0.4790676259938D+02-0.4785997665588D+02-0.4781271835619D+02 +-0.4776498445124D+02-0.4771677169657D+02-0.4766807685247D+02-0.4761889668409D+02 +-0.4756922796153D+02-0.4751906745988D+02-0.4746841195927D+02-0.4741725824487D+02 +-0.4736560310686D+02-0.4731344334036D+02-0.4726077574537D+02-0.4720759712663D+02 +-0.4715390429349D+02-0.4709969405976D+02-0.4704496324345D+02-0.4698970866656D+02 +-0.4693392715482D+02-0.4687761553742D+02-0.4682077064661D+02-0.4676338931742D+02 +-0.4670546838725D+02-0.4664700469545D+02-0.4658799508292D+02-0.4652843639162D+02 +-0.4646832546412D+02-0.4640765914308D+02-0.4634643427075D+02-0.4628464768840D+02 +-0.4622229623583D+02-0.4615937675077D+02-0.4609588606835D+02-0.4603182102046D+02 +-0.4596717843531D+02-0.4590195513672D+02-0.4583614794369D+02-0.4576975366979D+02 +-0.4570276912265D+02-0.4563519110351D+02-0.4556701640665D+02-0.4549824181908D+02 +-0.4542886412007D+02-0.4535888008084D+02-0.4528828646428D+02-0.4521708002473D+02 +-0.4514525750785D+02-0.4507281565054D+02-0.4499975118097D+02-0.4492606081870D+02 +-0.4485174127497D+02-0.4477678925295D+02-0.4470120144833D+02-0.4462497454985D+02 +-0.4454810524011D+02-0.4447059019649D+02-0.4439242609219D+02-0.4431360959758D+02 +-0.4423413738159D+02-0.4415400611337D+02-0.4407321246418D+02-0.4399175310947D+02 +-0.4390962473114D+02-0.4382682402010D+02-0.4374334767908D+02-0.4365919242563D+02 +-0.4357435499539D+02-0.4348883214570D+02-0.4340262065933D+02-0.4331571734857D+02 +-0.4322811905962D+02-0.4313982267710D+02-0.4305082512897D+02-0.4296112339160D+02 +-0.4287071449512D+02-0.4277959552900D+02-0.4268776364786D+02-0.4259521607738D+02 +-0.4250195012053D+02-0.4240796316384D+02-0.4231325268378D+02-0.4221781625326D+02 +-0.4212165154821D+02-0.4202475635403D+02-0.4192712857207D+02-0.4182876622603D+02 +-0.4172966746809D+02-0.4162983058491D+02-0.4152925400326D+02-0.4142793629535D+02 +-0.4132587618362D+02-0.4122307254514D+02-0.4111952441526D+02-0.4101523099069D+02 +-0.4091019163177D+02-0.4080440586392D+02-0.4069787337814D+02-0.4059059403052D+02 +-0.4048256784069D+02-0.4037379498919D+02-0.4026427581359D+02-0.4015401080347D+02 +-0.4004300059408D+02-0.3993124595881D+02-0.3981874780047D+02-0.3970550714118D+02 +-0.3959152511128D+02-0.3947680293704D+02-0.3936134192738D+02-0.3924514345974D+02 +-0.3912820896514D+02-0.3901053991273D+02-0.3889213779388D+02-0.3877300410616D+02 +-0.3865314033730D+02-0.3853254794941D+02-0.3841122836384D+02-0.3828918294671D+02 +-0.3816641299561D+02-0.3804291972752D+02-0.3791870426838D+02-0.3779376764439D+02 +-0.3766811077544D+02-0.3754173447071D+02-0.3741463942662D+02-0.3728682622747D+02 +-0.3715829534855D+02-0.3702904716206D+02-0.3689908194568D+02-0.3676839989389D+02 +-0.3663700113198D+02-0.3650488573242D+02-0.3637205373385D+02-0.3623850516215D+02 +-0.3610424005352D+02-0.3596925847947D+02-0.3583356057318D+02-0.3569714655716D+02 +-0.3556001677183D+02-0.3542217170480D+02-0.3528361202035D+02-0.3514433858906D+02 +-0.3500435251706D+02-0.3486365517474D+02-0.3472224822457D+02-0.3458013364781D+02 +-0.3443731376977D+02-0.3429379128348D+02-0.3414956927154D+02-0.3400465122587D+02 +-0.3385904106531D+02-0.3371274315081D+02-0.3356576229817D+02-0.3341810378823D+02 +-0.3326977337430D+02-0.3312077728689D+02-0.3297112223571D+02-0.3282081540879D+02 +-0.3266986446883D+02-0.3251827754673D+02-0.3236606323235D+02-0.3221323056253D+02 +-0.3205978900636D+02-0.3190574844798D+02-0.3175111916665D+02-0.3159591181450D+02 +-0.3144013739192D+02-0.3128380722060D+02-0.3112693291460D+02-0.3096952634939D+02 +-0.3081159962896D+02-0.3065316505139D+02-0.3049423507279D+02-0.3033482226994D+02 +-0.3017493930171D+02-0.3001459886954D+02-0.2985381367711D+02-0.2969259638940D+02 +-0.2953095959141D+02-0.2936891574677D+02-0.2920647715631D+02-0.2904365591713D+02 +-0.2888046388202D+02-0.2871691261992D+02-0.2855301337730D+02-0.2838877704096D+02 +-0.2822421410237D+02-0.2805933462405D+02-0.2789414820796D+02-0.2772866396645D+02 +-0.2756289049588D+02-0.2739683585338D+02-0.2723050753680D+02-0.2706391246838D+02 +-0.2689705698223D+02-0.2672994681603D+02-0.2656258710714D+02-0.2639498239345D+02 +-0.2622713661917D+02-0.2605905314574D+02-0.2589073476829D+02-0.2572218373759D+02 +-0.2555340178776D+02-0.2538439017000D+02-0.2521514969218D+02-0.2504568076457D+02 +-0.2487598345161D+02-0.2470605752972D+02-0.2453590255090D+02-0.2436551791213D+02 +-0.2419490293015D+02-0.2402405692122D+02-0.2385297928550D+02-0.2368166959536D+02 +-0.2351012768684D+02-0.2333835375355D+02-0.2316634844181D+02-0.2299411294593D+02 +-0.2282164910224D+02-0.2264895948042D+02-0.2247604747020D+02-0.2230291736187D+02 +-0.2212957441833D+02-0.2195602493665D+02-0.2178227629680D+02-0.2160833699531D+02 +-0.2143421666157D+02-0.2125992605447D+02-0.2108547703736D+02-0.2091088252957D+02 +-0.2073615643311D+02-0.2056131353347D+02-0.2038636937454D+02-0.2021134010787D+02 +-0.2003624231780D+02-0.1986109282464D+02-0.1968590846923D+02-0.1951070588338D+02 +-0.1933550125113D+02-0.1916031006739D+02-0.1898514690054D+02-0.1881002516654D+02 +-0.1863495692195D+02-0.1845995268332D+02-0.1828502127992D+02-0.1811016974578D+02 +-0.1793540325598D+02-0.1776072511080D+02-0.1758613676940D+02-0.1741163793327D+02 +-0.1723722667775D+02-0.1706289962834D+02-0.1688865217702D+02-0.1671447873257D+02 +-0.1654037299789D+02-0.1636632826691D+02-0.1619233773325D+02-0.1601839480315D+02 +-0.1584449340510D+02-0.1567062828984D+02-0.1549679531468D+02-0.1532299170720D+02 +-0.1514921630451D+02-0.1497546976480D+02-0.1480175474939D+02-0.1462807607400D+02 +-0.1445444082871D+02-0.1428085846710D+02-0.1410734086517D+02-0.1393390235146D+02 +-0.1376055970989D+02-0.1358733215727D+02-0.1341424129731D+02-0.1324131105355D+02 +-0.1306856758305D+02-0.1289603917318D+02-0.1272375612351D+02-0.1255175061484D+02 +-0.1238005656736D+02-0.1220870948967D+02-0.1203774632043D+02-0.1186720526422D+02 +-0.1169712562320D+02-0.1152754762583D+02-0.1135851225403D+02-0.1119006106993D+02 +-0.1102223604329D+02-0.1085507938069D+02-0.1068863335731D+02-0.1052294015218D+02 +-0.1035804168776D+02-0.1019397947446D+02-0.1003079446077D+02-0.9868526889628D+01 +-0.9707216161554D+01-0.9546900704939D+01-0.9387617854023D+01-0.9229403734858D+01 +-0.9072293159592D+01-0.8916319529363D+01-0.8761514745993D+01-0.8607909132693D+01 +-0.8455531363896D+01-0.8304408404305D+01-0.8154565457227D+01-0.8006025922166D+01 +-0.7858811361682D+01-0.7712941477416D+01-0.7568434095199D+01-0.7425305159081D+01 +-0.7283568734134D+01-0.7143237017788D+01-0.7004320359504D+01-0.6866827288485D+01 +-0.6730764549154D+01-0.6596137144079D+01-0.6462948384000D+01-0.6331199944618D+01 +-0.6200891929738D+01-0.6072022940407D+01-0.5944590149603D+01-0.5818589382077D+01 +-0.5694015198898D+01-0.5570860986265D+01-0.5449119048124D+01-0.5328780702141D+01 +-0.5209836378552D+01-0.5092275721431D+01-0.4976087691897D+01-0.4861260672787D+01 +-0.4747782574321D+01-0.4635640940271D+01-0.4524823054180D+01-0.4415316045125D+01 +-0.4307106992579D+01-0.4200183029885D+01-0.4094531445869D+01-0.3990139784139D+01 +-0.3886995939600D+01-0.3785088251726D+01-0.3684405594148D+01-0.3584937460106D+01 +-0.3486674043348D+01-0.3389606314047D+01-0.3293726089348D+01-0.3199026098161D+01 +-0.3105500039868D+01-0.3013142636618D+01-0.2921949678952D+01-0.2831918064533D+01 +-0.2743045829849D+01-0.2655332174788D+01-0.2568777480092D+01-0.2483383317815D+01 +-0.2399152454962D+01-0.2316088850658D+01-0.2234197647300D+01-0.2153485156272D+01 +-0.2073958838965D+01-0.1995627283965D+01-0.1918500181413D+01-0.1842588295670D+01 +-0.1767903437522D+01-0.1694458437274D+01-0.1622267120110D+01-0.1551344285168D+01 +-0.1481705689753D+01-0.1413368040087D+01-0.1346348989896D+01-0.1280667148051D+01 +-0.1216342096293D+01-0.1153394417906D+01-0.1091845737986D+01-0.1031718775725D+01 +-0.9730374088849D+00-0.9158267504133D+00-0.8601132368937D+00-0.8059247283301D+00 +-0.7532906185600D+00-0.7022419554295D+00-0.6528115697324D+00-0.6050342118170D+00 +-0.5589466947046D+00-0.5145880425354D+00-0.4719996431596D+00-0.4312254037239D+00 +-0.3923119081554D+00-0.3553085755132D+00-0.3202678182603D+00-0.2872451996103D+00 +-0.2562993012896D+00 + 0.0000000000000D+00 + 1012 0.5229258479779D+01 + 0.2150742905406D-04 0.2201934401975D-04 0.2254344131081D-04 0.2308001074793D-04 + 0.2362934904336D-04 0.2419175996469D-04 0.2476755450247D-04 0.2535705104185D-04 + 0.2596057553829D-04 0.2657846169737D-04 0.2721105115901D-04 0.2785869368592D-04 + 0.2852174735659D-04 0.2920057876285D-04 0.2989556321214D-04 0.3060708493450D-04 + 0.3133553729459D-04 0.3208132300862D-04 0.3284485436652D-04 0.3362655345933D-04 + 0.3442685241199D-04 0.3524619362168D-04 0.3608503000175D-04 0.3694382523153D-04 + 0.3782305401197D-04 0.3872320232740D-04 0.3964476771351D-04 0.4058825953159D-04 + 0.4155419924941D-04 0.4254312072866D-04 0.4355557051923D-04 0.4459210816046D-04 + 0.4565330648961D-04 0.4673975195749D-04 0.4785204495171D-04 0.4899080012754D-04 + 0.5015664674660D-04 0.5135022902361D-04 0.5257220648130D-04 0.5382325431382D-04 + 0.5510406375867D-04 0.5641534247751D-04 0.5775781494596D-04 0.5913222285265D-04 + 0.6053932550771D-04 0.6197990026094D-04 0.6345474292991D-04 0.6496466823815D-04 + 0.6651051026378D-04 0.6809312289875D-04 0.6971338031887D-04 0.7137217746513D-04 + 0.7307043053626D-04 0.7480907749308D-04 0.7658907857468D-04 0.7841141682692D-04 + 0.8027709864336D-04 0.8218715431905D-04 0.8414263861740D-04 0.8614463135050D-04 + 0.8819423797310D-04 0.9029259019072D-04 0.9244084658213D-04 0.9464019323656D-04 + 0.9689184440594D-04 0.9919704317265D-04 0.1015570621330D-03 0.1039732040969D-03 + 0.1064468028041D-03 0.1089792236573D-03 0.1115718644728D-03 0.1142261562483D-03 + 0.1169435639500D-03 0.1197255873171D-03 0.1225737616857D-03 0.1254896588328D-03 + 0.1284748878395D-03 0.1315310959746D-03 0.1346599695998D-03 0.1378632350954D-03 + 0.1411426598085D-03 0.1445000530233D-03 0.1479372669546D-03 0.1514561977641D-03 + 0.1550587866019D-03 0.1587470206711D-03 0.1625229343189D-03 0.1663886101524D-03 + 0.1703461801815D-03 0.1743978269887D-03 0.1785457849256D-03 0.1827923413391D-03 + 0.1871398378251D-03 0.1915906715131D-03 0.1961472963799D-03 0.2008122245952D-03 + 0.2055880278984D-03 0.2104773390081D-03 0.2154828530649D-03 0.2206073291079D-03 + 0.2258535915864D-03 0.2312245319072D-03 0.2367231100177D-03 0.2423523560273D-03 + 0.2481153718665D-03 0.2540153329849D-03 0.2600554900897D-03 0.2662391709247D-03 + 0.2725697820915D-03 0.2790508109132D-03 0.2856858273428D-03 0.2924784859153D-03 + 0.2994325277470D-03 0.3065517825810D-03 0.3138401708812D-03 0.3213017059753D-03 + 0.3289404962488D-03 0.3367607473897D-03 0.3447667646870D-03 0.3529629553823D-03 + 0.3613538310777D-03 0.3699440101989D-03 0.3787382205180D-03 0.3877413017338D-03 + 0.3969582081140D-03 0.4063940111991D-03 0.4160539025692D-03 0.4259431966769D-03 + 0.4360673337456D-03 0.4464318827368D-03 0.4570425443864D-03 0.4679051543124D-03 + 0.4790256861959D-03 0.4904102550358D-03 0.5020651204812D-03 0.5139966902408D-03 + 0.5262115235724D-03 0.5387163348549D-03 0.5515179972435D-03 0.5646235464104D-03 + 0.5780401843732D-03 0.5917752834137D-03 0.6058363900874D-03 0.6202312293275D-03 + 0.6349677086450D-03 0.6500539224267D-03 0.6654981563344D-03 0.6813088918062D-03 + 0.6974948106637D-03 0.7140647998269D-03 0.7310279561389D-03 0.7483935913040D-03 + 0.7661712369406D-03 0.7843706497523D-03 0.8030018168203D-03 0.8220749610184D-03 + 0.8416005465556D-03 0.8615892846469D-03 0.8820521393172D-03 0.9030003333406D-03 + 0.9244453543176D-03 0.9463989608946D-03 0.9688731891282D-03 0.9918803589975D-03 + 0.1015433081069D-02 0.1039544263315D-02 0.1064227118095D-02 0.1089495169290D-02 + 0.1115362259619D-02 0.1141842558105D-02 0.1168950567737D-02 0.1196701133289D-02 + 0.1225109449338D-02 0.1254191068456D-02 0.1283961909601D-02 0.1314438266696D-02 + 0.1345636817413D-02 0.1377574632157D-02 0.1410269183260D-02 0.1443738354387D-02 + 0.1478000450161D-02 0.1513074206015D-02 0.1548978798262D-02 0.1585733854409D-02 + 0.1623359463706D-02 0.1661876187936D-02 0.1701305072458D-02 0.1741667657505D-02 + 0.1782985989747D-02 0.1825282634108D-02 0.1868580685877D-02 0.1912903783076D-02 + 0.1958276119133D-02 0.2004722455835D-02 0.2052268136585D-02 0.2100939099962D-02 + 0.2150761893598D-02 0.2201763688371D-02 0.2253972292925D-02 0.2307416168524D-02 + 0.2362124444253D-02 0.2418126932561D-02 0.2475454145167D-02 0.2534137309329D-02 + 0.2594208384486D-02 0.2655700079287D-02 0.2718645869002D-02 0.2783080013344D-02 + 0.2849037574687D-02 0.2916554436715D-02 0.2985667323484D-02 0.3056413818931D-02 + 0.3128832386828D-02 0.3202962391187D-02 0.3278844117136D-02 0.3356518792272D-02 + 0.3436028608501D-02 0.3517416744371D-02 0.3600727387929D-02 0.3686005760082D-02 + 0.3773298138499D-02 0.3862651882061D-02 0.3954115455860D-02 0.4047738456768D-02 + 0.4143571639594D-02 0.4241666943825D-02 0.4342077520985D-02 0.4444857762604D-02 + 0.4550063328833D-02 0.4657751177697D-02 0.4767979595018D-02 0.4880808225009D-02 + 0.4996298101570D-02 0.5114511680279D-02 0.5235512871115D-02 0.5359367071918D-02 + 0.5486141202598D-02 0.5615903740128D-02 0.5748724754308D-02 0.5884675944352D-02 + 0.6023830676284D-02 0.6166264021183D-02 0.6312052794284D-02 0.6461275594959D-02 + 0.6614012847588D-02 0.6770346843357D-02 0.6930361782982D-02 0.7094143820394D-02 + 0.7261781107400D-02 0.7433363839342D-02 0.7608984301773D-02 0.7788736918176D-02 + 0.7972718298747D-02 0.8161027290261D-02 0.8353765027049D-02 0.8551034983111D-02 + 0.8752943025377D-02 0.8959597468160D-02 0.9171109128811D-02 0.9387591384603D-02 + 0.9609160230877D-02 0.9835934340477D-02 0.1006803512449D-01 0.1030558679431D-01 + 0.1054871642512D-01 0.1079755402073D-01 0.1105223257982D-01 0.1131288816368D-01 + 0.1157965996544D-01 0.1185269038080D-01 0.1213212508026D-01 0.1241811308303D-01 + 0.1271080683248D-01 0.1301036227325D-01 0.1331693893004D-01 0.1363069998813D-01 + 0.1395181237567D-01 0.1428044684765D-01 0.1461677807184D-01 0.1496098471648D-01 + 0.1531324953990D-01 0.1567375948211D-01 0.1604270575828D-01 0.1642028395434D-01 + 0.1680669412453D-01 0.1720214089116D-01 0.1760683354637D-01 0.1802098615621D-01 + 0.1844481766683D-01 0.1887855201303D-01 0.1932241822902D-01 0.1977665056168D-01 + 0.2024148858606D-01 0.2071717732349D-01 0.2120396736203D-01 0.2170211497964D-01 + 0.2221188226980D-01 0.2273353726988D-01 0.2326735409215D-01 0.2381361305754D-01 + 0.2437260083229D-01 0.2494461056731D-01 0.2552994204062D-01 0.2612890180262D-01 + 0.2674180332442D-01 0.2736896714935D-01 0.2801072104743D-01 0.2866740017320D-01 + 0.2933934722669D-01 0.3002691261781D-01 0.3073045463399D-01 0.3145033961141D-01 + 0.3218694210958D-01 0.3294064508962D-01 0.3371184009606D-01 0.3450092744243D-01 + 0.3530831640054D-01 0.3613442539362D-01 0.3697968219334D-01 0.3784452412086D-01 + 0.3872939825181D-01 0.3963476162544D-01 0.4056108145796D-01 0.4150883536008D-01 + 0.4247851155891D-01 0.4347060912422D-01 0.4448563819924D-01 0.4552412023590D-01 + 0.4658658823475D-01 0.4767358698962D-01 0.4878567333696D-01 0.4992341641008D-01 + 0.5108739789835D-01 0.5227821231135D-01 0.5349646724813D-01 0.5474278367169D-01 + 0.5601779618862D-01 0.5732215333417D-01 0.5865651786266D-01 0.6002156704340D-01 + 0.6141799296226D-01 0.6284650282880D-01 0.6430781928923D-01 0.6580268074515D-01 + 0.6733184167825D-01 0.6889607298100D-01 0.7049616229337D-01 0.7213291434581D-01 + 0.7380715130845D-01 0.7551971314661D-01 0.7727145798277D-01 0.7906326246509D-01 + 0.8089602214242D-01 0.8277065184608D-01 0.8468808607842D-01 0.8664927940812D-01 + 0.8865520687255D-01 0.9070686438707D-01 0.9280526916144D-01 0.9495146012343D-01 + 0.9714649834967D-01 0.9939146750384D-01 0.1016874742823D+00 0.1040356488672D+00 + 0.1064371453872D+00 0.1088931423856D+00 0.1114048432967D+00 0.1139734769295D+00 + 0.1166002979593D+00 0.1192865874273D+00 0.1220336532487D+00 0.1248428307276D+00 + 0.1277154830815D+00 0.1306530019730D+00 0.1336568080498D+00 0.1367283514936D+00 + 0.1398691125766D+00 0.1430806022269D+00 0.1463643626021D+00 0.1497219676713D+00 + 0.1531550238057D+00 0.1566651703780D+00 0.1602540803695D+00 0.1639234609870D+00 + 0.1676750542871D+00 0.1715106378098D+00 0.1754320252209D+00 0.1794410669619D+00 + 0.1835396509100D+00 0.1877297030455D+00 0.1920131881282D+00 0.1963921103827D+00 + 0.2008685141914D+00 0.2054444847966D+00 0.2101221490109D+00 0.2149036759359D+00 + 0.2197912776889D+00 0.2247872101386D+00 0.2298937736476D+00 0.2351133138248D+00 + 0.2404482222837D+00 0.2459009374100D+00 0.2514739451362D+00 0.2571697797240D+00 + 0.2629910245536D+00 0.2689403129212D+00 0.2750203288421D+00 0.2812338078623D+00 + 0.2875835378751D+00 0.2940723599454D+00 0.3007031691395D+00 0.3074789153608D+00 + 0.3144026041916D+00 0.3214772977396D+00 0.3287061154899D+00 0.3360922351618D+00 + 0.3436388935694D+00 0.3513493874868D+00 0.3592270745164D+00 0.3672753739607D+00 + 0.3754977676972D+00 0.3838978010545D+00 0.3924790836915D+00 0.4012452904770D+00 + 0.4102001623706D+00 0.4193475073036D+00 0.4286912010595D+00 0.4382351881538D+00 + 0.4479834827120D+00 0.4579401693452D+00 0.4681094040228D+00 0.4784954149418D+00 + 0.4891025033910D+00 0.4999350446102D+00 0.5109974886435D+00 0.5222943611853D+00 + 0.5338302644183D+00 0.5456098778426D+00 0.5576379590956D+00 0.5699193447601D+00 + 0.5824589511607D+00 0.5952617751475D+00 0.6083328948654D+00 0.6216774705074D+00 + 0.6353007450521D+00 0.6492080449824D+00 0.6634047809857D+00 0.6778964486325D+00 + 0.6926886290333D+00 0.7077869894721D+00 0.7231972840138D+00 0.7389253540860D+00 + 0.7549771290311D+00 0.7713586266289D+00 0.7880759535873D+00 0.8051353059985D+00 + 0.8225429697604D+00 0.8403053209599D+00 0.8584288262158D+00 0.8769200429817D+00 + 0.8957856198031D+00 0.9150322965294D+00 0.9346669044774D+00 0.9546963665439D+00 + 0.9751276972649D+00 0.9959680028197D+00 0.1017224480976D+01 0.1038904420974D+01 + 0.1061015203349D+01 0.1083564299686D+01 0.1106559272300D+01 0.1130007773859D+01 + 0.1153917546912D+01 0.1178296423354D+01 0.1203152323804D+01 0.1228493256899D+01 + 0.1254327318495D+01 0.1280662690787D+01 0.1307507641324D+01 0.1334870521934D+01 + 0.1362759767535D+01 0.1391183894856D+01 0.1420151501035D+01 0.1449671262109D+01 + 0.1479751931386D+01 0.1510402337698D+01 0.1541631383520D+01 0.1573448042969D+01 + 0.1605861359662D+01 0.1638880444440D+01 0.1672514472946D+01 0.1706772683055D+01 + 0.1741664372155D+01 0.1777198894269D+01 0.1813385657016D+01 0.1850234118409D+01 + 0.1887753783475D+01 0.1925954200705D+01 0.1964844958324D+01 0.2004435680370D+01 + 0.2044736022586D+01 0.2085755668115D+01 0.2127504322996D+01 0.2169991711448D+01 + 0.2213227570952D+01 0.2257221647108D+01 0.2301983688271D+01 0.2347523439972D+01 + 0.2393850639086D+01 0.2440975007782D+01 0.2488906247220D+01 0.2537654031002D+01 + 0.2587227998372D+01 0.2637637747157D+01 0.2688892826442D+01 0.2741002728983D+01 + 0.2793976883341D+01 0.2847824645743D+01 0.2902555291652D+01 0.2958178007063D+01 + 0.3014701879494D+01 0.3072135888684D+01 0.3130488897001D+01 0.3189769639525D+01 + 0.3249986713841D+01 0.3311148569513D+01 0.3373263497233D+01 0.3436339617667D+01 + 0.3500384869964D+01 0.3565406999951D+01 0.3631413547991D+01 0.3698411836514D+01 + 0.3766408957221D+01 0.3835411757947D+01 0.3905426829193D+01 0.3976460490322D+01 + 0.4048518775419D+01 0.4121607418815D+01 0.4195731840277D+01 0.4270897129857D+01 + 0.4347108032420D+01 0.4424368931831D+01 0.4502683834816D+01 0.4582056354503D+01 + 0.4662489693636D+01 0.4743986627475D+01 0.4826549486387D+01 0.4910180138127D+01 + 0.4994879969825D+01 0.5080649869681D+01 0.5167490208373D+01 0.5255400820202D+01 + 0.5344380983962D+01 0.5434429403565D+01 0.5525544188426D+01 0.5617722833617D+01 + 0.5710962199815D+01 0.5805258493041D+01 0.5900607244231D+01 0.5997003288635D+01 + 0.6094440745069D+01 0.6192912995049D+01 0.6292412661814D+01 0.6392931589269D+01 + 0.6494460820874D+01 0.6596990578488D+01 0.6700510241224D+01 0.6805008324307D+01 + 0.6910472457995D+01 0.7016889366579D+01 0.7124244847491D+01 0.7232523750568D+01 + 0.7341709957494D+01 0.7451786361463D+01 0.7562734847107D+01 0.7674536270712D+01 + 0.7787170440791D+01 0.7900616099026D+01 0.8014850901658D+01 0.8129851401340D+01 + 0.8245593029526D+01 0.8362050079436D+01 0.8479195689649D+01 0.8597001828383D+01 + 0.8715439278509D+01 0.8834477623371D+01 0.8954085233454D+01 0.9074229253973D+01 + 0.9194875593440D+01 0.9315988913276D+01 0.9437532618530D+01 0.9559468849772D+01 + 0.9681758476237D+01 0.9804361090277D+01 0.9927235003199D+01 0.1005033724256D+02 + 0.1017362355101D+02 0.1029704838669D+02 0.1042056492540D+02 0.1054412506444D+02 + 0.1066767942831D+02 0.1079117737637D+02 0.1091456701244D+02 0.1103779519646D+02 + 0.1116080755839D+02 0.1128354851420D+02 0.1140596128432D+02 0.1152798791434D+02 + 0.1164956929827D+02 0.1177064520433D+02 0.1189115430327D+02 0.1201103419951D+02 + 0.1213022146500D+02 0.1224865167586D+02 0.1236625945201D+02 0.1248297849976D+02 + 0.1259874165744D+02 0.1271348094411D+02 0.1282712761148D+02 0.1293961219902D+02 + 0.1305086459240D+02 0.1316081408518D+02 0.1326938944391D+02 0.1337651897664D+02 + 0.1348213060491D+02 0.1358615193909D+02 0.1368851035736D+02 0.1378913308811D+02 + 0.1388794729589D+02 0.1398488017086D+02 0.1407985902179D+02 0.1417281137257D+02 + 0.1426366506212D+02 0.1435234834789D+02 0.1443879001264D+02 0.1452291947466D+02 + 0.1460466690129D+02 0.1468396332564D+02 0.1476074076649D+02 0.1483493235126D+02 + 0.1490647244192D+02 0.1497529676373D+02 0.1504134253675D+02 0.1510454860984D+02 + 0.1516485559720D+02 0.1522220601698D+02 0.1527654443219D+02 0.1532781759325D+02 + 0.1537597458241D+02 0.1542096695946D+02 0.1546274890874D+02 0.1550127738702D+02 + 0.1553651227211D+02 0.1556841651189D+02 0.1559695627334D+02 0.1562210109145D+02 + 0.1564382401753D+02 0.1566210176664D+02 0.1567691486377D+02 0.1568824778841D+02 + 0.1569608911712D+02 0.1570043166360D+02 0.1570127261607D+02 0.1569861367129D+02 + 0.1569246116496D+02 0.1568282619787D+02 0.1566972475757D+02 0.1565317783486D+02 + 0.1563321153475D+02 0.1560985718135D+02 0.1558315141624D+02 0.1555313628970D+02 + 0.1551985934445D+02 0.1548337369123D+02 0.1544373807583D+02 0.1540101693692D+02 + 0.1535528045436D+02 0.1530660458716D+02 0.1525507110098D+02 0.1520076758423D+02 + 0.1514378745267D+02 0.1508422994170D+02 0.1502220008605D+02 0.1495780868635D+02 + 0.1489117226206D+02 0.1482241299046D+02 0.1475165863115D+02 0.1467904243575D+02 + 0.1460470304238D+02 0.1452878435463D+02 0.1445143540465D+02 0.1437281020013D+02 + 0.1429306755483D+02 0.1421237090260D+02 0.1413088809452D+02 0.1404879117925D+02 + 0.1396625616625D+02 0.1388346277207D+02 0.1380059414952D+02 0.1371783659988D+02 + 0.1363537926825D+02 0.1355341382212D+02 0.1347213411351D+02 0.1339173582480D+02 + 0.1331241609871D+02 0.1323437315279D+02 0.1315780587881D+02 0.1308291342766D+02 + 0.1300989478035D+02 0.1293894830568D+02 0.1287027130535D+02 0.1280405954732D+02 + 0.1274050678825D+02 0.1267980428593D+02 0.1262214030269D+02 0.1256769960087D+02 + 0.1251666293145D+02 0.1246920651702D+02 0.1242550153038D+02 0.1238571356999D+02 + 0.1235000213372D+02 0.1231852009235D+02 0.1229141316414D+02 0.1226881939222D+02 + 0.1225086862623D+02 0.1223768200985D+02 0.1222937147599D+02 0.1222603925117D+02 + 0.1222777737106D+02 0.1223466720868D+02 0.1224677901729D+02 0.1226417148958D+02 + 0.1228689133517D+02 0.1231497287802D+02 0.1234843767581D+02 0.1238729416297D+02 + 0.1243153731911D+02 0.1248114836487D+02 0.1253609448665D+02 0.1259632859227D+02 + 0.1266178909890D+02 0.1273239975523D+02 0.1280806949923D+02 0.1288869235315D+02 + 0.1297414735711D+02 0.1306429854274D+02 0.1315899494816D+02 0.1325807067533D+02 + 0.1336134499111D+02 0.1346862247282D+02 0.1357969319917D+02 0.1369433298744D+02 + 0.1381230367740D+02 0.1393335346243D+02 0.1405721726828D+02 0.1418361717951D+02 + 0.1431226291376D+02 0.1444285234362D+02 0.1457507206581D+02 0.1470859801733D+02 + 0.1484309613763D+02 0.1497822307639D+02 0.1511362694548D+02 0.1524894811426D+02 + 0.1538382004666D+02 0.1551787017849D+02 0.1565072083339D+02 0.1578199017530D+02 + 0.1591129319546D+02 0.1603824273170D+02 0.1616245051740D+02 0.1628352825765D+02 + 0.1640108872963D+02 0.1651474690448D+02 0.1662412108723D+02 0.1672883407174D+02 + 0.1682851430716D+02 0.1692279707220D+02 0.1701132565381D+02 0.1709375252614D+02 + 0.1716974052608D+02 0.1723896402125D+02 0.1730111006644D+02 0.1735587954416D+02 + 0.1740298828530D+02 0.1744216816538D+02 0.1747316817225D+02 0.1749575544089D+02 + 0.1750971625093D+02 0.1751485698260D+02 0.1751100502688D+02 0.1749800964559D+02 + 0.1747574277733D+02 0.1744409978499D+02 0.1740300014123D+02 0.1735238804766D+02 + 0.1729223298439D+02 0.1722253018618D+02 0.1714330104180D+02 0.1705459341368D+02 + 0.1695648187457D+02 0.1684906785873D+02 0.1673247972505D+02 0.1660687272995D+02 + 0.1647242890818D+02 0.1632935685981D+02 0.1617789144222D+02 0.1601829336618D+02 + 0.1585084869528D+02 0.1567586824865D+02 0.1549368690699D+02 0.1530466282265D+02 + 0.1510917653451D+02 0.1490762998916D+02 0.1470044547022D+02 0.1448806443791D+02 + 0.1427094628160D+02 0.1404956698852D+02 0.1382441773199D+02 0.1359600338336D+02 + 0.1336484095192D+02 0.1313145795774D+02 0.1289639074258D+02 0.1266018272468D+02 + 0.1242338260337D+02 0.1218654252002D+02 0.1195021618209D+02 0.1171495695744D+02 + 0.1148131594627D+02 0.1124984003849D+02 0.1102106996440D+02 0.1079553834688D+02 + 0.1057376776347D+02 0.1035626882667D+02 0.1014353829125D+02 0.9936057196884D+01 + 0.9734289054994D+01 0.9538678088120D+01 0.9349647530399D+01 0.9167597997384D+01 + 0.8992905933301D+01 0.8825922143594D+01 0.8666970420224D+01 0.8516346266999D+01 + 0.8374315731611D+01 0.8241114350747D+01 0.8116946214096D+01 0.8001983152570D+01 + 0.7896364055459D+01 0.7800194320670D+01 0.7713545441561D+01 0.7636454733225D+01 + 0.7568925200401D+01 0.7510925548528D+01 0.7462390338698D+01 0.7423220286625D+01 + 0.7393282704950D+01 0.7372412087556D+01 0.7360410833787D+01 0.7357050109802D+01 + 0.7362070843542D+01 0.7375184849138D+01 0.7396076075866D+01 0.7424401976120D+01 + 0.7459794986211D+01 0.7501864113185D+01 0.7550196620265D+01 0.7604359802945D+01 + 0.7663902847256D+01 0.7728358761219D+01 0.7797246370063D+01 0.7870072365405D+01 + 0.7946333398216D+01 0.8025518205140D+01 0.8107109757504D+01 0.8190587422172D+01 + 0.8275429123337D+01 0.8361113494303D+01 0.8447122008353D+01 0.8532941077928D+01 + 0.8618064111536D+01 0.8701993518075D+01 0.8784242648578D+01 0.8864337665829D+01 + 0.8941819332731D+01 0.9016244710878D+01 0.9087188761372D+01 0.9154245840560D+01 + 0.9217031084099D+01 0.9275181673474D+01 0.9328357979881D+01 0.9376244581215D+01 + 0.9418551148709D+01 0.9455013200639D+01 0.9485392721360D+01 0.9509478644797D+01 + 0.9527087202359D+01 0.9538062136102D+01 0.9542274778747D+01 0.9539624002998D+01 + 0.9530036043300D+01 0.9513464193959D+01 0.9489888388159D+01 0.9459314663078D+01 + 0.9421774516843D+01 0.9377324163609D+01 0.9326043693467D+01 0.9268036144314D+01 + 0.9203426493115D+01 0.9132360574297D+01 0.9055003933175D+01 0.8971540622481D+01 + 0.8882171950151D+01 0.8787115186520D+01 0.8686602239071D+01 0.8580878302773D+01 + 0.8470200493895D+01 0.8354836475027D+01 0.8235063078754D+01 0.8111164937189D+01 + 0.7983433124252D+01 0.7852163817216D+01 0.7717656983696D+01 0.7580215099831D+01 + 0.7440141905014D+01 0.7297741198086D+01 0.7153315679440D+01 0.7007165843079D+01 + 0.6859588922166D+01 0.6710877891167D+01 0.6561320527250D+01 0.6411198533128D+01 + 0.6260786723101D+01 0.6110352273646D+01 0.5960154039458D+01 0.5810441935471D+01 + 0.5661456384987D+01 0.5513427833700D+01 0.5366576329042D+01 0.5221111163955D+01 + 0.5077230583918D+01 0.4935121555751D+01 0.4794959596475D+01 0.4656908660288D+01 + 0.4521121081498D+01 0.4387737571052D+01 0.4256887264186D+01 0.4128687816522D+01 + 0.4003245545873D+01 0.3880655616880D+01 0.3761002265561D+01 0.3644359060777D+01 + 0.3530789199588D+01 0.3420345833472D+01 0.3313072422343D+01 0.3209003113371D+01 + 0.3108163141592D+01 0.3010569249384D+01 0.2916230121919D+01 0.2825146835796D+01 + 0.2737313318133D+01 0.2652716813508D+01 0.2571338356232D+01 0.2493153245580D+01 + 0.2418131521695D+01 0.2346238440047D+01 0.2277434942461D+01 0.2211678122838D+01 + 0.2148921685899D+01 0.2089116397376D+01 0.2032210524266D+01 0.1978150263893D+01 + 0.1926880160684D+01 0.1878343509721D+01 0.1832482746269D+01 0.1789239820638D+01 + 0.1748556557871D+01 0.1710375001879D+01 0.1674637743804D+01 0.1641288234472D+01 + 0.1610271080956D+01 0.1581532327338D+01 0.1555019719890D+01 0.1530682956958D+01 + 0.1508473923914D+01 0.1488346913611D+01 0.1470258832820D+01 0.1454169395155D+01 + 0.1440041301042D+01 0.1427840405245D+01 0.1417535872504D+01 0.1409100321753D+01 + 0.1402509959377D+01 0.1397744701874D+01 0.1394788288181D+01 0.1393628381826D+01 + 0.1394256662892D+01 0.1396668909610D+01 0.1400865069190D+01 0.1406849317222D+01 + 0.1414629369614D+01 0.1424336942263D+01 0.1436096575202D+01 0.1449912447024D+01 + 0.1465794674727D+01 0.1483759333931D+01 0.1503828494539D+01 0.1526030271798D+01 + 0.1550398892649D+01 0.1576974777196D+01 0.1605804635055D+01 0.1636941576215D+01 + 7 1012 + 1 0 -1 -511.89194 + 2 0 -1 -58.90181 + 2 1 1 -50.68932 + 2 1 -2 -49.77537 + 3 0 -1 -5.73317 + 3 1 1 -3.34334 + 3 1 -2 -3.22919 + 0.2122975645015D-04 0.2173507709867D-04 0.2225242316243D-04 0.2278208072829D-04 + 0.2332434268594D-04 0.2387950888954D-04 0.2444788632325D-04 0.2502978927059D-04 + 0.2562553948791D-04 0.2623546638192D-04 0.2685990719144D-04 0.2749920717353D-04 + 0.2815371979393D-04 0.2882380692207D-04 0.2950983903075D-04 0.3021219540050D-04 + 0.3093126432877D-04 0.3166744334418D-04 0.3242113942573D-04 0.3319276922733D-04 + 0.3398275930755D-04 0.3479154636487D-04 0.3561957747857D-04 0.3646731035519D-04 + 0.3733521358096D-04 0.3822376688016D-04 0.3913346137963D-04 0.4006479987955D-04 + 0.4101829713060D-04 0.4199448011777D-04 0.4299388835081D-04 0.4401707416166D-04 + 0.4506460300883D-04 0.4613705378910D-04 0.4723501915650D-04 0.4835910584899D-04 + 0.4950993502270D-04 0.5068814259429D-04 0.5189437959126D-04 0.5312931251066D-04 + 0.5439362368626D-04 0.5568801166444D-04 0.5701319158897D-04 0.5836989559491D-04 + 0.5975887321186D-04 0.6118089177673D-04 0.6263673685632D-04 0.6412721267990D-04 + 0.6565314258201D-04 0.6721536945580D-04 0.6881475621705D-04 0.7045218627922D-04 + 0.7212856403973D-04 0.7384481537777D-04 0.7560188816385D-04 0.7740075278149D-04 + 0.7924240266119D-04 0.8112785482706D-04 0.8305815045642D-04 0.8503435545263D-04 + 0.8705756103141D-04 0.8912888432116D-04 0.9124946897738D-04 0.9342048581165D-04 + 0.9564313343555D-04 0.9791863891974D-04 0.1002482584687D-03 0.1026332781112D-03 + 0.1050750144077D-03 0.1075748151735D-03 0.1101340602203D-03 0.1127541621137D-03 + 0.1154365669501D-03 0.1181827551510D-03 0.1209942422769D-03 0.1238725798590D-03 + 0.1268193562527D-03 0.1298361975089D-03 0.1329247682680D-03 0.1360867726735D-03 + 0.1393239553083D-03 0.1426381021518D-03 0.1460310415612D-03 0.1495046452749D-03 + 0.1530608294397D-03 0.1567015556625D-03 0.1604288320871D-03 0.1642447144955D-03 + 0.1681513074364D-03 0.1721507653792D-03 0.1762452938963D-03 0.1804371508722D-03 + 0.1847286477421D-03 0.1891221507592D-03 0.1936200822920D-03 0.1982249221522D-03 + 0.2029392089542D-03 0.2077655415060D-03 0.2127065802334D-03 0.2177650486382D-03 + 0.2229437347894D-03 0.2282454928513D-03 0.2336732446459D-03 0.2392299812538D-03 + 0.2449187646513D-03 0.2507427293871D-03 0.2567050842979D-03 0.2628091142650D-03 + 0.2690581820118D-03 0.2754557299435D-03 0.2820052820308D-03 0.2887104457371D-03 + 0.2955749139921D-03 0.3026024672103D-03 0.3097969753590D-03 0.3171624000731D-03 + 0.3247027968207D-03 0.3324223171196D-03 0.3403252108055D-03 0.3484158283536D-03 + 0.3566986232552D-03 0.3651781544500D-03 0.3738590888149D-03 0.3827462037126D-03 + 0.3918443895988D-03 0.4011586526914D-03 0.4106941177020D-03 0.4204560306321D-03 + 0.4304497616342D-03 0.4406808079408D-03 0.4511547968612D-03 0.4618774888502D-03 + 0.4728547806468D-03 0.4840927084883D-03 0.4955974513988D-03 0.5073753345551D-03 + 0.5194328327314D-03 0.5317765738249D-03 0.5444133424641D-03 0.5573500837015D-03 + 0.5705939067925D-03 0.5841520890639D-03 0.5980320798714D-03 0.6122415046513D-03 + 0.6267881690659D-03 0.6416800632466D-03 0.6569253661363D-03 0.6725324499326D-03 + 0.6885098846360D-03 0.7048664427037D-03 0.7216111038125D-03 0.7387530597330D-03 + 0.7563017193176D-03 0.7742667136049D-03 0.7926579010441D-03 0.8114853728404D-03 + 0.8307594584254D-03 0.8504907310562D-03 0.8706900135433D-03 0.8913683841142D-03 + 0.9125371824119D-03 0.9342080156346D-03 0.9563927648179D-03 0.9791035912634D-03 + 0.1002352943117D-02 0.1026153562102D-02 0.1050518490405D-02 0.1075461077728D-02 + 0.1100994988496D-02 0.1127134209246D-02 0.1153893056171D-02 0.1181286182852D-02 + 0.1209328588167D-02 0.1238035624379D-02 0.1267423005415D-02 0.1297506815344D-02 + 0.1328303517037D-02 0.1359829961041D-02 0.1392103394654D-02 0.1425141471212D-02 + 0.1458962259585D-02 0.1493584253904D-02 0.1529026383504D-02 0.1565308023106D-02 + 0.1602449003221D-02 0.1640469620811D-02 0.1679390650189D-02 0.1719233354165D-02 + 0.1760019495464D-02 0.1801771348394D-02 0.1844511710794D-02 0.1888263916250D-02 + 0.1933051846599D-02 0.1978899944720D-02 0.2025833227614D-02 0.2073877299798D-02 + 0.2123058366995D-02 0.2173403250151D-02 0.2224939399761D-02 0.2277694910540D-02 + 0.2331698536421D-02 0.2386979705903D-02 0.2443568537747D-02 0.2501495857040D-02 + 0.2560793211623D-02 0.2621492888896D-02 0.2683627933011D-02 0.2747232162458D-02 + 0.2812340188056D-02 0.2878987431352D-02 0.2947210143447D-02 0.3017045424251D-02 + 0.3088531242177D-02 0.3161706454285D-02 0.3236610826892D-02 0.3313285056646D-02 + 0.3391770792086D-02 0.3472110655691D-02 0.3554348266436D-02 0.3638528262858D-02 + 0.3724696326649D-02 0.3812899206788D-02 0.3903184744224D-02 0.3995601897109D-02 + 0.4090200766624D-02 0.4187032623373D-02 0.4286149934389D-02 0.4387606390746D-02 + 0.4491456935804D-02 0.4597757794082D-02 0.4706566500803D-02 0.4817941932088D-02 + 0.4931944335851D-02 0.5048635363379D-02 0.5168078101634D-02 0.5290337106279D-02 + 0.5415478435454D-02 0.5543569684307D-02 0.5674680020311D-02 0.5808880219367D-02 + 0.5946242702730D-02 0.6086841574754D-02 0.6230752661494D-02 0.6378053550168D-02 + 0.6528823629508D-02 0.6683144131013D-02 0.6841098171130D-02 0.7002770794372D-02 + 0.7168249017405D-02 0.7337621874121D-02 0.7510980461712D-02 0.7688417987773D-02 + 0.7870029818463D-02 0.8055913527720D-02 0.8246168947593D-02 0.8440898219673D-02 + 0.8640205847678D-02 0.8844198751201D-02 0.9052986320644D-02 0.9266680473381D-02 + 0.9485395711148D-02 0.9709249178711D-02 0.9938360723829D-02 0.1017285295853D-01 + 0.1041285132175D-01 0.1065848414335D-01 0.1090988270951D-01 0.1116718132961D-01 + 0.1143051740455D-01 0.1170003149653D-01 0.1197586740047D-01 0.1225817221684D-01 + 0.1254709642620D-01 0.1284279396532D-01 0.1314542230495D-01 0.1345514252930D-01 + 0.1377211941725D-01 0.1409652152530D-01 0.1442852127232D-01 0.1476829502620D-01 + 0.1511602319226D-01 0.1547189030365D-01 0.1583608511371D-01 0.1620880069022D-01 + 0.1659023451183D-01 0.1698058856639D-01 0.1738006945154D-01 0.1778888847734D-01 + 0.1820726177118D-01 0.1863541038486D-01 0.1907356040402D-01 0.1952194305980D-01 + 0.1998079484302D-01 0.2045035762063D-01 0.2093087875471D-01 0.2142261122400D-01 + 0.2192581374792D-01 0.2244075091329D-01 0.2296769330365D-01 0.2350691763133D-01 + 0.2405870687229D-01 0.2462335040374D-01 0.2520114414469D-01 0.2579239069942D-01 + 0.2639739950387D-01 0.2701648697516D-01 0.2764997666416D-01 0.2829819941123D-01 + 0.2896149350513D-01 0.2964020484531D-01 0.3033468710740D-01 0.3104530191220D-01 + 0.3177241899806D-01 0.3251641639684D-01 0.3327768061342D-01 0.3405660680881D-01 + 0.3485359898710D-01 0.3566907018606D-01 0.3650344267166D-01 0.3735714813647D-01 + 0.3823062790211D-01 0.3912433312562D-01 0.4003872501011D-01 0.4097427501948D-01 + 0.4193146509749D-01 0.4291078789111D-01 0.4391274697832D-01 0.4493785710035D-01 + 0.4598664439858D-01 0.4705964665594D-01 0.4815741354312D-01 0.4928050686955D-01 + 0.5042950083923D-01 0.5160498231153D-01 0.5280755106696D-01 0.5403782007813D-01 + 0.5529641578584D-01 0.5658397838041D-01 0.5790116208843D-01 0.5924863546488D-01 + 0.6062708169076D-01 0.6203719887636D-01 0.6347970037015D-01 0.6495531507346D-01 + 0.6646478776099D-01 0.6800887940725D-01 0.6958836751900D-01 0.7120404647380D-01 + 0.7285672786470D-01 0.7454724085125D-01 0.7627643251682D-01 0.7804516823229D-01 + 0.7985433202641D-01 0.8170482696258D-01 0.8359757552242D-01 0.8553351999606D-01 + 0.8751362287932D-01 0.8953886727772D-01 0.9161025731761D-01 0.9372881856432D-01 + 0.9589559844749D-01 0.9811166669365D-01 0.1003781157661D+00 0.1026960613124D+00 + 0.1050666426187D+00 0.1074910230727D+00 0.1099703906329D+00 0.1125059583070D+00 + 0.1150989646366D+00 0.1177506741909D+00 0.1204623780676D+00 0.1232353944021D+00 + 0.1260710688845D+00 0.1289707752849D+00 0.1319359159864D+00 0.1349679225270D+00 + 0.1380682561490D+00 0.1412384083570D+00 0.1444799014844D+00 0.1477942892678D+00 + 0.1511831574303D+00 0.1546481242725D+00 0.1581908412731D+00 0.1618129936965D+00 + 0.1655163012104D+00 0.1693025185104D+00 0.1731734359544D+00 0.1771308802047D+00 + 0.1811767148790D+00 0.1853128412094D+00 0.1895411987104D+00 0.1938637658552D+00 + 0.1982825607598D+00 0.2027996418767D+00 0.2074171086957D+00 0.2121371024533D+00 + 0.2169618068509D+00 0.2218934487801D+00 0.2269342990569D+00 0.2320866731634D+00 + 0.2373529319974D+00 0.2427354826295D+00 0.2482367790682D+00 0.2538593230323D+00 + 0.2596056647304D+00 0.2654784036474D+00 0.2714801893389D+00 0.2776137222308D+00 + 0.2838817544268D+00 0.2902870905217D+00 0.2968325884206D+00 0.3035211601645D+00 + 0.3103557727607D+00 0.3173394490192D+00 0.3244752683937D+00 0.3317663678273D+00 + 0.3392159426028D+00 0.3468272471962D+00 0.3546035961349D+00 0.3625483648577D+00 + 0.3706649905790D+00 0.3789569731540D+00 0.3874278759464D+00 0.3960813266976D+00 + 0.4049210183955D+00 0.4139507101454D+00 0.4231742280388D+00 0.4325954660221D+00 + 0.4422183867640D+00 0.4520470225197D+00 0.4620854759931D+00 0.4723379211946D+00 + 0.4828086042953D+00 0.4935018444749D+00 0.5044220347646D+00 0.5155736428822D+00 + 0.5269612120602D+00 0.5385893618646D+00 0.5504627890040D+00 0.5625862681281D+00 + 0.5749646526146D+00 0.5876028753427D+00 0.6005059494532D+00 0.6136789690924D+00 + 0.6271271101407D+00 0.6408556309226D+00 0.6548698728981D+00 0.6691752613333D+00 + 0.6837773059493D+00 0.6986816015479D+00 0.7138938286123D+00 0.7294197538810D+00 + 0.7452652308942D+00 0.7614362005101D+00 0.7779386913894D+00 0.7947788204470D+00 + 0.8119627932680D+00 0.8294969044866D+00 0.8473875381261D+00 0.8656411678975D+00 + 0.8842643574549D+00 0.9032637606047D+00 0.9226461214683D+00 0.9424182745935D+00 + 0.9625871450140D+00 0.9831597482541D+00 0.1004143190275D+01 0.1025544667362D+01 + 0.1047371465949D+01 0.1069630962376D+01 0.1092330622582D+01 0.1115478001718D+01 + 0.1139080743699D+01 0.1163146580667D+01 0.1187683332379D+01 0.1212698905512D+01 + 0.1238201292877D+01 0.1264198572546D+01 0.1290698906886D+01 0.1317710541494D+01 + 0.1345241804028D+01 0.1373301102944D+01 0.1401896926110D+01 0.1431037839321D+01 + 0.1460732484690D+01 0.1490989578921D+01 0.1521817911461D+01 0.1553226342519D+01 + 0.1585223800953D+01 0.1617819282025D+01 0.1651021845012D+01 0.1684840610666D+01 + 0.1719284758534D+01 0.1754363524114D+01 0.1790086195862D+01 0.1826462112019D+01 + 0.1863500657290D+01 0.1901211259327D+01 0.1939603385053D+01 0.1978686536792D+01 + 0.2018470248210D+01 0.2058964080068D+01 0.2100177615772D+01 0.2142120456722D+01 + 0.2184802217451D+01 0.2228232520549D+01 0.2272420991371D+01 0.2317377252521D+01 + 0.2363110918097D+01 0.2409631587718D+01 0.2456948840298D+01 0.2505072227579D+01 + 0.2554011267414D+01 0.2603775436800D+01 0.2654374164640D+01 0.2705816824249D+01 + 0.2758112725590D+01 0.2811271107225D+01 0.2865301128002D+01 0.2920211858443D+01 + 0.2976012271854D+01 0.3032711235135D+01 0.3090317499294D+01 0.3148839689666D+01 + 0.3208286295814D+01 0.3268665661132D+01 0.3329985972130D+01 0.3392255247403D+01 + 0.3455481326284D+01 0.3519671857166D+01 0.3584834285516D+01 0.3650975841540D+01 + 0.3718103527540D+01 0.3786224104928D+01 0.3855344080910D+01 0.3925469694842D+01 + 0.3996606904248D+01 0.4068761370505D+01 0.4141938444201D+01 0.4216143150155D+01 + 0.4291380172106D+01 0.4367653837082D+01 0.4444968099432D+01 0.4523326524540D+01 + 0.4602732272224D+01 0.4683188079814D+01 0.4764696244923D+01 0.4847258607911D+01 + 0.4930876534058D+01 0.5015550895439D+01 0.5101282052526D+01 0.5188069835504D+01 + 0.5275913525340D+01 0.5364811834582D+01 0.5454762887935D+01 0.5545764202593D+01 + 0.5637812668364D+01 0.5730904527600D+01 0.5825035354930D+01 0.5920200036841D+01 + 0.6016392751096D+01 0.6113606946037D+01 0.6211835319763D+01 0.6311069799237D+01 + 0.6411301519318D+01 0.6512520801757D+01 0.6614717134178D+01 0.6717879149076D+01 + 0.6821994602856D+01 0.6927050354936D+01 0.7033032346971D+01 0.7139925582197D+01 + 0.7247714104955D+01 0.7356380980422D+01 0.7465908274590D+01 0.7576277034522D+01 + 0.7687467268944D+01 0.7799457929201D+01 0.7912226890625D+01 0.8025750934367D+01 + 0.8140005729731D+01 0.8254965817070D+01 0.8370604591283D+01 0.8486894285977D+01 + 0.8603805958343D+01 0.8721309474805D+01 0.8839373497487D+01 0.8957965471583D+01 + 0.9077051613664D+01 0.9196596901005D+01 0.9316565061973D+01 0.9436918567578D+01 + 0.9557618624205D+01 0.9678625167647D+01 0.9799896858462D+01 0.9921391078761D+01 + 0.1004306393048D+02 0.1016487023519D+02 0.1028676353561D+02 0.1040869609872D+02 + 0.1053061892078D+02 0.1065248173410D+02 0.1077423301584D+02 0.1089581999877D+02 + 0.1101718868413D+02 0.1113828385666D+02 0.1125904910191D+02 0.1137942682584D+02 + 0.1149935827678D+02 0.1161878356999D+02 0.1173764171462D+02 0.1185587064341D+02 + 0.1197340724503D+02 0.1209018739920D+02 0.1220614601465D+02 0.1232121706995D+02 + 0.1243533365740D+02 0.1254842802982D+02 0.1266043165050D+02 0.1277127524634D+02 + 0.1288088886404D+02 0.1298920192971D+02 0.1309614331160D+02 0.1320164138629D+02 + 0.1330562410812D+02 0.1340801908212D+02 0.1350875364026D+02 0.1360775492116D+02 + 0.1370494995324D+02 0.1380026574132D+02 0.1389362935662D+02 0.1398496803019D+02 + 0.1407420924981D+02 0.1416128086012D+02 0.1424611116627D+02 0.1432862904069D+02 + 0.1440876403324D+02 0.1448644648440D+02 0.1456160764164D+02 0.1463417977876D+02 + 0.1470409631813D+02 0.1477129195572D+02 0.1483570278883D+02 0.1489726644633D+02 + 0.1495592222127D+02 0.1501161120574D+02 0.1506427642781D+02 0.1511386299027D+02 + 0.1516031821110D+02 0.1520359176531D+02 0.1524363582812D+02 0.1528040521898D+02 + 0.1531385754641D+02 0.1534395335325D+02 0.1537065626208D+02 0.1539393312048D+02 + 0.1541375414585D+02 0.1543009306950D+02 0.1544292727951D+02 0.1545223796216D+02 + 0.1545801024155D+02 0.1546023331695D+02 0.1545890059744D+02 0.1545400983365D+02 + 0.1544556324596D+02 0.1543356764880D+02 0.1541803457065D+02 0.1539898036925D+02 + 0.1537642634154D+02 0.1535039882796D+02 0.1532092931044D+02 0.1528805450387D+02 + 0.1525181644030D+02 0.1521226254557D+02 0.1516944570778D+02 0.1512342433713D+02 + 0.1507426241669D+02 0.1502202954350D+02 0.1496680095964D+02 0.1490865757272D+02 + 0.1484768596530D+02 0.1478397839284D+02 0.1471763276969D+02 0.1464875264266D+02 + 0.1457744715182D+02 0.1450383097801D+02 0.1442802427679D+02 0.1435015259838D+02 + 0.1427034679327D+02 0.1418874290321D+02 0.1410548203722D+02 0.1402071023247D+02 + 0.1393457829969D+02 0.1384724165293D+02 0.1375886012364D+02 0.1366959775879D+02 + 0.1357962260304D+02 0.1348910646488D+02 0.1339822466686D+02 0.1330715577980D+02 + 0.1321608134121D+02 0.1312518555808D+02 0.1303465499419D+02 0.1294467824221D+02 + 0.1285544558101D+02 0.1276714861841D+02 0.1267997991994D+02 0.1259413262403D+02 + 0.1250980004419D+02 0.1242717525885D+02 0.1234645068948D+02 0.1226781766776D+02 + 0.1219146599257D+02 0.1211758347770D+02 0.1204635549121D+02 0.1197796448732D+02 + 0.1191258953197D+02 0.1185040582321D+02 0.1179158420730D+02 0.1173629069208D+02 + 0.1168468595856D+02 0.1163692487226D+02 0.1159315599549D+02 0.1155352110209D+02 + 0.1151815469598D+02 0.1148718353503D+02 0.1146072616178D+02 0.1143889244247D+02 + 0.1142178311602D+02 0.1140948935454D+02 0.1140209233686D+02 0.1139966283678D+02 + 0.1140226082774D+02 0.1140993510519D+02 0.1142272292875D+02 0.1144064968524D+02 + 0.1146372857460D+02 0.1149196031991D+02 0.1152533290326D+02 0.1156382132880D+02 + 0.1160738741454D+02 0.1165597961412D+02 0.1170953287012D+02 0.1176796849989D+02 + 0.1183119411535D+02 0.1189910357777D+02 0.1197157698856D+02 0.1204848071701D+02 + 0.1212966746596D+02 0.1221497637600D+02 0.1230423316888D+02 0.1239725033077D+02 + 0.1249382733567D+02 0.1259375090926D+02 0.1269679533346D+02 0.1280272279167D+02 + 0.1291128375448D+02 0.1302221740584D+02 0.1313525210912D+02 0.1325010591253D+02 + 0.1336648709337D+02 0.1348409474012D+02 0.1360261937149D+02 0.1372174359123D+02 + 0.1384114277758D+02 0.1396048580566D+02 0.1407943580155D+02 0.1419765092608D+02 + 0.1431478518661D+02 0.1443048927478D+02 0.1454441142812D+02 0.1465619831308D+02 + 0.1476549592746D+02 0.1487195051928D+02 0.1497520951989D+02 0.1507492248828D+02 + 0.1517074206398D+02 0.1526232492551D+02 0.1534933275145D+02 0.1543143318112D+02 + 0.1550830077157D+02 0.1557961794797D+02 0.1564507594396D+02 0.1570437572881D+02 + 0.1575722891823D+02 0.1580335866539D+02 0.1584250052899D+02 0.1587440331524D+02 + 0.1589882989033D+02 0.1591555796049D+02 0.1592438081630D+02 0.1592510803844D+02 + 0.1591756616179D+02 0.1590159929512D+02 0.1587706969359D+02 0.1584385828154D+02 + 0.1580186512290D+02 0.1575100983720D+02 0.1569123195871D+02 0.1562249123695D+02 + 0.1554476787665D+02 0.1545806271560D+02 0.1536239733893D+02 0.1525781412875D+02 + 0.1514437624809D+02 0.1502216755847D+02 0.1489129247063D+02 0.1475187572813D+02 + 0.1460406212401D+02 0.1444801615062D+02 0.1428392158332D+02 0.1411198099888D+02 + 0.1393241522964D+02 0.1374546275490D+02 0.1355137903119D+02 0.1335043576333D+02 + 0.1314292011864D+02 0.1292913388664D+02 0.1270939258714D+02 0.1248402452972D+02 + 0.1225336982785D+02 0.1201777937125D+02 0.1177761376017D+02 0.1153324220569D+02 + 0.1128504140014D+02 0.1103339436205D+02 0.1077868926027D+02 0.1052131822179D+02 + 0.1026167612835D+02 0.1000015940663D+02 0.9737164817090D+01 0.9473088246666D+01 + 0.9208323510392D+01 0.8943261167138D+01 0.8678287354606D+01 0.8413782648689D+01 + 0.8150120952198D+01 0.7887668417870D+01 0.7626782410424D+01 0.7367810512255D+01 + 0.7111089577147D+01 0.6856944836175D+01 0.6605689059620D+01 0.6357621778576D+01 + 0.6113028569417D+01 0.5872180404071D+01 0.5635333068605D+01 0.5402726652271D+01 + 0.5174585108689D+01 0.4951115890458D+01 0.4732509658013D+01 0.4518940063093D+01 + 0.4310563606744D+01 0.4107519571314D+01 0.3909930025455D+01 0.3717899900701D+01 + 0.3531517137795D+01 0.3350852900521D+01 0.3175961854415D+01 0.3006882507418D+01 + 0.2843637609166D+01 0.2686234605393D+01 0.2534666143602D+01 0.2388910626020D+01 + 0.2248932805599D+01 0.2114684420764D+01 0.1986104864410D+01 0.1863121882663D+01 + 0.1745652298807D+01 0.1633602757816D+01 0.1526870486911D+01 0.1425344067651D+01 + 0.1328904215091D+01 0.1237424559686D+01 0.1150772427713D+01 0.1068809616148D+01 + 0.9913931580887D+00 0.9183760750247D+00 0.8496081124357D+00 0.7849364554513D+00 + 0.7242064215293D+00 0.6672621273712D+00 0.6139471275574D+00 0.5641050226618D+00 + 0.5175800348878D+00 0.4742175495586D+00 0.4338646210828D+00 0.3963704423129D+00 + 0.3615867764997D+00 0.3293683513354D+00 0.2995732148544D+00 0.2720630532321D+00 + 0.2467034707815D+00 0.2233642326902D+00 0.2019194712763D+00 0.1822478567499D+00 + 0.1642327336682D+00 0.1477622244444D+00 0.1327293014336D+00 0.1190318292464D+00 + 0.1065725790655D+00 0.9525921682581D-01 0.8500426719540D-01 0.7572505534570D-01 + 0.6734362852856D-01 0.5978665949119D-01 0.5298533375213D-01 0.4687522273735D-01 + 0.4139614473480D-01 0.3649201557103D-01 0.3211069084453D-01 0.2820380147099D-01 + 0.2472658420543D-01 0.2163770870794D-01 0.1889910261478D-01 0.1647577596641D-01 + 0.1433564623066D-01 0.1244936504301D-01 0.1079014767040D-01 0.9333606088531D-02 + 0.8057586449521D-02 0.6942011605538D-02 0.5968729247262D-02 0.5121366113861D-02 + 0.4385188634413D-02 0.3746970269980D-02 0.3194865741265D-02 0.2718292249293D-02 + 0.2307817726031D-02 0.1955056088404D-02 0.1652569412799D-02 0.1393776897745D-02 + 0.1172870439853D-02 0.9847366120634D-03 0.8248848034661D-03 0.6893812560569D-03 + 0.5747887154298D-03 0.4781113990982D-03 0.3967449774979D-03 0.3284312582634D-03 + 0.2712172636576D-03 0.2234183935981D-03 0.1835853721449D-03 0.1504746831443D-03 + 0.1230222105786D-03 0.1003198106540D-03 0.8159455542106D-04 0.6619040144209D-04 + 0.5355205138722D-04 0.4321079120846D-04 0.3477210045803D-04 0.2790484818898D-04 + 0.2233190152246D-04 0.1782198824118D-04 0.1418266855132D-04 0.1125428434880D-04 + 0.8904766856498D-05 0.7025195313453D-05 0.5526010459652D-05 0.4333796852085D-05 + 0.3388557563637D-05 0.2641413563333D-05 0.2052668070841D-05 0.1590183444862D-05 + 0.1228024735392D-05 0.9453299398051D-06 0.7253722919424D-06 0.5547846237125D-06 + 0.4229200131023D-06 0.3213266143727D-06 0.2433177983142D-06 0.1836215545666D-06 + 0.1380955642703D-06 0.1034964778941D-06 0.7729376586493D-07 0.5752008209307D-07 + 0.4265142355148D-07 0.3151151106808D-07 0.2319578320089D-07 0.1701120974173D-07 + 0.1242881489534D-07 0.9046371073667D-08 0.6559198960071D-08 0.4737402476978D-08 + 0.3408191153158D-08 0.2442208093542D-08 0.1742998768590D-08 0.1238932286038D-08 + 0.8770296193333D-09 0.6182683290111D-09 0.4340255982013D-09 0.3033950772413D-09 + 0.2111715589818D-09 0.1463438404983D-09 0.1009726185101D-09 0.6935859066118D-10 + 0.4742849271888D-10 0.3228488955626D-10 0.2187547853929D-10 0.1475212866899D-10 + 0.9901881750809D-11 0.6613860882122D-11 0.4396644350124D-11 0.2908650000322D-11 + 0.1914873227728D-11 0.1254415200484D-11 0.8176535094916D-12 0.5302708391854D-12 + 0.3421370551355D-12 0.2196087836422D-12 0.1402231518601D-12 0.8906014768602D-13 + LSMS: xx z= 26. xvalws= 2.77074 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728402963D+02-0.5199725117641D+02-0.5199721792578D+02-0.5199718427293D+02 +-0.5199715021300D+02-0.5199711574107D+02-0.5199708085214D+02-0.5199704554119D+02 +-0.5199700980309D+02-0.5199697363268D+02-0.5199693702474D+02-0.5199689997397D+02 +-0.5199686247500D+02-0.5199682452243D+02-0.5199678611076D+02-0.5199674723444D+02 +-0.5199670788785D+02-0.5199666806529D+02-0.5199662776101D+02-0.5199658696918D+02 +-0.5199654568390D+02-0.5199650389922D+02-0.5199646160907D+02-0.5199641880734D+02 +-0.5199637548785D+02-0.5199633164434D+02-0.5199628727046D+02-0.5199624235979D+02 +-0.5199619690585D+02-0.5199615090205D+02-0.5199610434176D+02-0.5199605721822D+02 +-0.5199600952464D+02-0.5199596125410D+02-0.5199591239964D+02-0.5199586295419D+02 +-0.5199581291060D+02-0.5199576226162D+02-0.5199571099994D+02-0.5199565911815D+02 +-0.5199560660874D+02-0.5199555346411D+02-0.5199549967658D+02-0.5199544523837D+02 +-0.5199539014162D+02-0.5199533437834D+02-0.5199527794048D+02-0.5199522081989D+02 +-0.5199516300828D+02-0.5199510449731D+02-0.5199504527851D+02-0.5199498534331D+02 +-0.5199492468306D+02-0.5199486328897D+02-0.5199480115217D+02-0.5199473826367D+02 +-0.5199467461436D+02-0.5199461019507D+02-0.5199454499646D+02-0.5199447900910D+02 +-0.5199441222344D+02-0.5199434462984D+02-0.5199427621849D+02-0.5199420697954D+02 +-0.5199413690295D+02-0.5199406597858D+02-0.5199399419618D+02-0.5199392154537D+02 +-0.5199384801563D+02-0.5199377359634D+02-0.5199369827672D+02-0.5199362204589D+02 +-0.5199354489281D+02-0.5199346680633D+02-0.5199338777515D+02-0.5199330778784D+02 +-0.5199322683282D+02-0.5199314489839D+02-0.5199306197270D+02-0.5199297804374D+02 +-0.5199289309939D+02-0.5199280712733D+02-0.5199272011516D+02-0.5199263205027D+02 +-0.5199254291992D+02-0.5199245271123D+02-0.5199236141114D+02-0.5199226900644D+02 +-0.5199217548376D+02-0.5199208082958D+02-0.5199198503019D+02-0.5199188807175D+02 +-0.5199178994021D+02-0.5199169062139D+02-0.5199159010092D+02-0.5199148836424D+02 +-0.5199138539665D+02-0.5199128118323D+02-0.5199117570892D+02-0.5199106895845D+02 +-0.5199096091638D+02-0.5199085156707D+02-0.5199074089471D+02-0.5199062888326D+02 +-0.5199051551654D+02-0.5199040077813D+02-0.5199028465143D+02-0.5199016711964D+02 +-0.5199004816574D+02-0.5198992777253D+02-0.5198980592257D+02-0.5198968259824D+02 +-0.5198955778170D+02-0.5198943145487D+02-0.5198930359948D+02-0.5198917419701D+02 +-0.5198904322875D+02-0.5198891067574D+02-0.5198877651879D+02-0.5198864073848D+02 +-0.5198850331517D+02-0.5198836422896D+02-0.5198822345972D+02-0.5198808098707D+02 +-0.5198793679039D+02-0.5198779084882D+02-0.5198764314123D+02-0.5198749364622D+02 +-0.5198734234217D+02-0.5198718920716D+02-0.5198703421905D+02-0.5198687735537D+02 +-0.5198671859343D+02-0.5198655791024D+02-0.5198639528254D+02-0.5198623068679D+02 +-0.5198606409915D+02-0.5198589549550D+02-0.5198572485143D+02-0.5198555214224D+02 +-0.5198537734293D+02-0.5198520042816D+02-0.5198502137235D+02-0.5198484014954D+02 +-0.5198465673351D+02-0.5198447109769D+02-0.5198428321519D+02-0.5198409305883D+02 +-0.5198390060104D+02-0.5198370581396D+02-0.5198350866939D+02-0.5198330913876D+02 +-0.5198310719319D+02-0.5198290280341D+02-0.5198269593983D+02-0.5198248657249D+02 +-0.5198227467106D+02-0.5198206020484D+02-0.5198184314277D+02-0.5198162345340D+02 +-0.5198140110492D+02-0.5198117606510D+02-0.5198094830136D+02-0.5198071778068D+02 +-0.5198048446968D+02-0.5198024833454D+02-0.5198000934107D+02-0.5197976745462D+02 +-0.5197952264015D+02-0.5197927486220D+02-0.5197902408485D+02-0.5197877027176D+02 +-0.5197851338615D+02-0.5197825339081D+02-0.5197799024804D+02-0.5197772391971D+02 +-0.5197745436723D+02-0.5197718155151D+02-0.5197690543304D+02-0.5197662597177D+02 +-0.5197634312720D+02-0.5197605685833D+02-0.5197576712367D+02-0.5197547388122D+02 +-0.5197517708846D+02-0.5197487670236D+02-0.5197457267938D+02-0.5197426497542D+02 +-0.5197395354589D+02-0.5197363834563D+02-0.5197331932893D+02-0.5197299644952D+02 +-0.5197266966059D+02-0.5197233891476D+02-0.5197200416404D+02-0.5197166535990D+02 +-0.5197132245319D+02-0.5197097539418D+02-0.5197062413252D+02-0.5197026861727D+02 +-0.5196990879687D+02-0.5196954461909D+02-0.5196917603112D+02-0.5196880297948D+02 +-0.5196842541005D+02-0.5196804326804D+02-0.5196765649801D+02-0.5196726504383D+02 +-0.5196686884871D+02-0.5196646785514D+02-0.5196606200494D+02-0.5196565123919D+02 +-0.5196523549829D+02-0.5196481472189D+02-0.5196438884890D+02-0.5196395781753D+02 +-0.5196352156518D+02-0.5196308002855D+02-0.5196263314350D+02-0.5196218084518D+02 +-0.5196172306789D+02-0.5196125974518D+02-0.5196079080977D+02-0.5196031619354D+02 +-0.5195983582758D+02-0.5195934964214D+02-0.5195885756657D+02-0.5195835952942D+02 +-0.5195785545834D+02-0.5195734528011D+02-0.5195682892060D+02-0.5195630630481D+02 +-0.5195577735679D+02-0.5195524199969D+02-0.5195470015573D+02-0.5195415174616D+02 +-0.5195359669127D+02-0.5195303491041D+02-0.5195246632192D+02-0.5195189084316D+02 +-0.5195130839046D+02-0.5195071887917D+02-0.5195012222358D+02-0.5194951833693D+02 +-0.5194890713143D+02-0.5194828851819D+02-0.5194766240726D+02-0.5194702870759D+02 +-0.5194638732701D+02-0.5194573817222D+02-0.5194508114882D+02-0.5194441616121D+02 +-0.5194374311266D+02-0.5194306190525D+02-0.5194237243986D+02-0.5194167461616D+02 +-0.5194096833262D+02-0.5194025348643D+02-0.5193952997356D+02-0.5193879768871D+02 +-0.5193805652527D+02-0.5193730637535D+02-0.5193654712973D+02-0.5193577867788D+02 +-0.5193500090790D+02-0.5193421370652D+02-0.5193341695911D+02-0.5193261054963D+02 +-0.5193179436061D+02-0.5193096827316D+02-0.5193013216694D+02-0.5192928592013D+02 +-0.5192842940944D+02-0.5192756251004D+02-0.5192668509561D+02-0.5192579703828D+02 +-0.5192489820860D+02-0.5192398847556D+02-0.5192306770652D+02-0.5192213576726D+02 +-0.5192119252189D+02-0.5192023783287D+02-0.5191927156096D+02-0.5191829356524D+02 +-0.5191730370307D+02-0.5191630183005D+02-0.5191528780001D+02-0.5191426146503D+02 +-0.5191322267532D+02-0.5191217127930D+02-0.5191110712354D+02-0.5191003005272D+02 +-0.5190893990959D+02-0.5190783653503D+02-0.5190671976795D+02-0.5190558944528D+02 +-0.5190444540195D+02-0.5190328747089D+02-0.5190211548297D+02-0.5190092926700D+02 +-0.5189972864968D+02-0.5189851345560D+02-0.5189728350719D+02-0.5189603862472D+02 +-0.5189477862625D+02-0.5189350332759D+02-0.5189221254235D+02-0.5189090608179D+02 +-0.5188958375491D+02-0.5188824536834D+02-0.5188689072635D+02-0.5188551963080D+02 +-0.5188413188114D+02-0.5188272727435D+02-0.5188130560492D+02-0.5187986666482D+02 +-0.5187841024347D+02-0.5187693612772D+02-0.5187544410178D+02-0.5187393394724D+02 +-0.5187240544300D+02-0.5187085836524D+02-0.5186929248740D+02-0.5186770758014D+02 +-0.5186610341132D+02-0.5186447974591D+02-0.5186283634606D+02-0.5186117297093D+02 +-0.5185948937678D+02-0.5185778531685D+02-0.5185606054135D+02-0.5185431479744D+02 +-0.5185254782916D+02-0.5185075937741D+02-0.5184894917991D+02-0.5184711697117D+02 +-0.5184526248242D+02-0.5184338544160D+02-0.5184148557330D+02-0.5183956259875D+02 +-0.5183761623572D+02-0.5183564619854D+02-0.5183365219802D+02-0.5183163394142D+02 +-0.5182959113240D+02-0.5182752347098D+02-0.5182543065350D+02-0.5182331237255D+02 +-0.5182116831697D+02-0.5181899817174D+02-0.5181680161800D+02-0.5181457833297D+02 +-0.5181232798987D+02-0.5181005025795D+02-0.5180774480235D+02-0.5180541128413D+02 +-0.5180304936016D+02-0.5180065868310D+02-0.5179823890134D+02-0.5179578965895D+02 +-0.5179331059564D+02-0.5179080134665D+02-0.5178826154277D+02-0.5178569081025D+02 +-0.5178308877073D+02-0.5178045504121D+02-0.5177778923399D+02-0.5177509095659D+02 +-0.5177235981171D+02-0.5176959539717D+02-0.5176679730585D+02-0.5176396512563D+02 +-0.5176109843930D+02-0.5175819682457D+02-0.5175525985390D+02-0.5175228709457D+02 +-0.5174927810849D+02-0.5174623245221D+02-0.5174314967682D+02-0.5174002932792D+02 +-0.5173687094551D+02-0.5173367406395D+02-0.5173043821187D+02-0.5172716291215D+02 +-0.5172384768177D+02-0.5172049203182D+02-0.5171709546736D+02-0.5171365748739D+02 +-0.5171017758479D+02-0.5170665524617D+02-0.5170308995189D+02-0.5169948117592D+02 +-0.5169582838578D+02-0.5169213104249D+02-0.5168838860043D+02-0.5168460050732D+02 +-0.5168076620412D+02-0.5167688512494D+02-0.5167295669696D+02-0.5166898034036D+02 +-0.5166495546822D+02-0.5166088148646D+02-0.5165675779371D+02-0.5165258378128D+02 +-0.5164835883303D+02-0.5164408232529D+02-0.5163975362681D+02-0.5163537209858D+02 +-0.5163093709386D+02-0.5162644795799D+02-0.5162190402831D+02-0.5161730463415D+02 +-0.5161264909661D+02-0.5160793672858D+02-0.5160316683457D+02-0.5159833871062D+02 +-0.5159345164422D+02-0.5158850491424D+02-0.5158349779076D+02-0.5157842953502D+02 +-0.5157329939929D+02-0.5156810662682D+02-0.5156285045165D+02-0.5155753009857D+02 +-0.5155214478300D+02-0.5154669371088D+02-0.5154117607855D+02-0.5153559107266D+02 +-0.5152993787006D+02-0.5152421563767D+02-0.5151842353238D+02-0.5151256070096D+02 +-0.5150662627991D+02-0.5150061939535D+02-0.5149453916296D+02-0.5148838468777D+02 +-0.5148215506412D+02-0.5147584937554D+02-0.5146946669454D+02-0.5146300608264D+02 +-0.5145646659012D+02-0.5144984725596D+02-0.5144314710771D+02-0.5143636516137D+02 +-0.5142950042123D+02-0.5142255187982D+02-0.5141551851771D+02-0.5140839930344D+02 +-0.5140119319335D+02-0.5139389913149D+02-0.5138651604948D+02-0.5137904286634D+02 +-0.5137147848843D+02-0.5136382180931D+02-0.5135607170955D+02-0.5134822705665D+02 +-0.5134028670491D+02-0.5133224949527D+02-0.5132411425521D+02-0.5131587979859D+02 +-0.5130754492555D+02-0.5129910842232D+02-0.5129056906116D+02-0.5128192560017D+02 +-0.5127317678315D+02-0.5126432133956D+02-0.5125535798425D+02-0.5124628541740D+02 +-0.5123710232443D+02-0.5122780737574D+02-0.5121839922671D+02-0.5120887651745D+02 +-0.5119923787276D+02-0.5118948190193D+02-0.5117960719865D+02-0.5116961234085D+02 +-0.5115949589056D+02-0.5114925639380D+02-0.5113889238044D+02-0.5112840236408D+02 +-0.5111778484188D+02-0.5110703829447D+02-0.5109616118579D+02-0.5108515196301D+02 +-0.5107400905631D+02-0.5106273087889D+02-0.5105131582667D+02-0.5103976227836D+02 +-0.5102806859514D+02-0.5101623312071D+02-0.5100425418105D+02-0.5099213008436D+02 +-0.5097985912091D+02-0.5096743956297D+02-0.5095486966464D+02-0.5094214766176D+02 +-0.5092927177183D+02-0.5091624019384D+02-0.5090305110822D+02-0.5088970267672D+02 +-0.5087619304230D+02-0.5086252032900D+02-0.5084868264193D+02-0.5083467806710D+02 +-0.5082050467136D+02-0.5080616050232D+02-0.5079164358822D+02-0.5077695193792D+02 +-0.5076208354076D+02-0.5074703636655D+02-0.5073180836542D+02-0.5071639746782D+02 +-0.5070080158445D+02-0.5068501860613D+02-0.5066904640389D+02-0.5065288282874D+02 +-0.5063652571181D+02-0.5061997286414D+02-0.5060322207678D+02-0.5058627112067D+02 +-0.5056911774669D+02-0.5055175968555D+02-0.5053419464788D+02-0.5051642032411D+02 +-0.5049843438458D+02-0.5048023447945D+02-0.5046181823877D+02-0.5044318327247D+02 +-0.5042432717038D+02-0.5040524750226D+02-0.5038594181787D+02-0.5036640764694D+02 +-0.5034664249930D+02-0.5032664386488D+02-0.5030640921379D+02-0.5028593599640D+02 +-0.5026522164341D+02-0.5024426356594D+02-0.5022305915564D+02-0.5020160578474D+02 +-0.5017990080623D+02-0.5015794155393D+02-0.5013572534263D+02-0.5011324946826D+02 +-0.5009051120796D+02-0.5006750782030D+02-0.5004423654542D+02-0.5002069460521D+02 +-0.4999687920344D+02-0.4997278752603D+02-0.4994841674120D+02-0.4992376399966D+02 +-0.4989882643488D+02-0.4987360116327D+02-0.4984808528443D+02-0.4982227588141D+02 +-0.4979617002094D+02-0.4976976475371D+02-0.4974305711462D+02-0.4971604412309D+02 +-0.4968872278335D+02-0.4966109008469D+02-0.4963314300185D+02-0.4960487849528D+02 +-0.4957629351145D+02-0.4954738498327D+02-0.4951814983035D+02-0.4948858495939D+02 +-0.4945868726453D+02-0.4942845362775D+02-0.4939788091919D+02-0.4936696599757D+02 +-0.4933570571061D+02-0.4930409689534D+02-0.4927213637859D+02-0.4923982097740D+02 +-0.4920714749935D+02-0.4917411274309D+02-0.4914071349870D+02-0.4910694654815D+02 +-0.4907280866573D+02-0.4903829661848D+02-0.4900340716666D+02-0.4896813706420D+02 +-0.4893248305909D+02-0.4889644189392D+02-0.4886001030623D+02-0.4882318502909D+02 +-0.4878596279141D+02-0.4874834031849D+02-0.4871031433244D+02-0.4867188155262D+02 +-0.4863303869609D+02-0.4859378247804D+02-0.4855410961222D+02-0.4851401681140D+02 +-0.4847350078774D+02-0.4843255825325D+02-0.4839118592018D+02-0.4834938050138D+02 +-0.4830713871075D+02-0.4826445726356D+02-0.4822133287682D+02-0.4817776226967D+02 +-0.4813374216365D+02-0.4808926928306D+02-0.4804434035526D+02-0.4799895211091D+02 +-0.4795310128431D+02-0.4790678461358D+02-0.4785999884093D+02-0.4781274071282D+02 +-0.4776500698020D+02-0.4771679439861D+02-0.4766809972836D+02-0.4761891973461D+02 +-0.4756925118748D+02-0.4751909086208D+02-0.4746843553857D+02-0.4741728200213D+02 +-0.4736562704295D+02-0.4731346745620D+02-0.4726080004188D+02-0.4720762160479D+02 +-0.4715392895431D+02-0.4709971890425D+02-0.4704498827268D+02-0.4698973388163D+02 +-0.4693395255690D+02-0.4687764112767D+02-0.4682079642628D+02-0.4676341528777D+02 +-0.4670549454962D+02-0.4664703105122D+02-0.4658802163351D+02-0.4652846313853D+02 +-0.4646835240891D+02-0.4640768628735D+02-0.4634646161617D+02-0.4628467523671D+02 +-0.4622232398885D+02-0.4615940471037D+02-0.4609591423645D+02-0.4603184939910D+02 +-0.4596720702657D+02-0.4590198394276D+02-0.4583617696675D+02-0.4576978291218D+02 +-0.4570279858676D+02-0.4563522079176D+02-0.4556704632159D+02-0.4549827196328D+02 +-0.4542889449617D+02-0.4535891069156D+02-0.4528831731237D+02-0.4521711111299D+02 +-0.4514528883912D+02-0.4507284722768D+02-0.4499978300686D+02-0.4492609289624D+02 +-0.4485177360700D+02-0.4477682184233D+02-0.4470123429783D+02-0.4462500766219D+02 +-0.4454813861790D+02-0.4447062384219D+02-0.4439246000814D+02-0.4431364378589D+02 +-0.4423417184413D+02-0.4415404085174D+02-0.4407324747964D+02-0.4399178840285D+02 +-0.4390966030283D+02-0.4382685986996D+02-0.4374338380636D+02-0.4365922882888D+02 +-0.4357439167239D+02-0.4348886909331D+02-0.4340265787340D+02-0.4331575482384D+02 +-0.4322815678953D+02-0.4313986065369D+02-0.4305086334268D+02-0.4296116183110D+02 +-0.4287075314713D+02-0.4277963437808D+02-0.4268780267613D+02-0.4259525526436D+02 +-0.4250198944278D+02-0.4240800259471D+02-0.4231329219311D+02-0.4221785580702D+02 +-0.4212169110814D+02-0.4202479587724D+02-0.4192716801066D+02-0.4182880552657D+02 +-0.4172970657123D+02-0.4162986942478D+02-0.4152929250699D+02-0.4142797438248D+02 +-0.4132591376546D+02-0.4122310952415D+02-0.4111956068435D+02-0.4101526643252D+02 +-0.4091022611799D+02-0.4080443925436D+02-0.4069790551997D+02-0.4059062475744D+02 +-0.4048259697200D+02-0.4037382232884D+02-0.4026430114924D+02-0.4015403390548D+02 +-0.4004302121449D+02-0.3993126383031D+02-0.3981876263529D+02-0.3970551863000D+02 +-0.3959153292214D+02-0.3947680671418D+02-0.3936134129010D+02-0.3924513800125D+02 +-0.3912819825140D+02-0.3901052348125D+02-0.3889211515259D+02-0.3877297473220D+02 +-0.3865310367583D+02-0.3853250341248D+02-0.3841117532917D+02-0.3828912075654D+02 +-0.3816634095549D+02-0.3804283710513D+02-0.3791861029232D+02-0.3779366150300D+02 +-0.3766799161555D+02-0.3754160139636D+02-0.3741449149782D+02-0.3728666245883D+02 +-0.3715811470790D+02-0.3702884856900D+02-0.3689886427010D+02-0.3676816195438D+02 +-0.3663674169408D+02-0.3650460350690D+02-0.3637174737474D+02-0.3623817326473D+02 +-0.3610388115218D+02-0.3596887104531D+02-0.3583314301154D+02-0.3569669720495D+02 +-0.3555953389464D+02-0.3542165349386D+02-0.3528305658922D+02-0.3514374397011D+02 +-0.3500371665774D+02-0.3486297593358D+02-0.3472152336690D+02-0.3457936084122D+02 +-0.3443649057928D+02-0.3429291516643D+02-0.3414863757211D+02-0.3400366116934D+02 +-0.3385798975190D+02-0.3371162754922D+02-0.3356457923876D+02-0.3341684995570D+02 +-0.3326844530007D+02-0.3311937134098D+02-0.3296963461820D+02-0.3281924214079D+02 +-0.3266820138293D+02-0.3251652027694D+02-0.3236420720350D+02-0.3221127097903D+02 +-0.3205772084042D+02-0.3190356642710D+02-0.3174881776049D+02-0.3159348522098D+02 +-0.3143757952257D+02-0.3128111168511D+02-0.3112409300454D+02-0.3096653502093D+02 +-0.3080844948479D+02-0.3064984832153D+02-0.3049074359439D+02-0.3033114746593D+02 +-0.3017107215833D+02-0.3001052991254D+02-0.2984953294675D+02-0.2968809341400D+02 +-0.2952622335948D+02-0.2936393467762D+02-0.2920123906907D+02-0.2903814799805D+02 +-0.2887467265011D+02-0.2871082389066D+02-0.2854661222446D+02-0.2838204775647D+02 +-0.2821714015409D+02-0.2805189861135D+02-0.2788633181514D+02-0.2772044791378D+02 +-0.2755425448842D+02-0.2738775852723D+02-0.2722096640307D+02-0.2705388385454D+02 +-0.2688651597109D+02-0.2671886718221D+02-0.2655094125117D+02-0.2638274127348D+02 +-0.2621426968047D+02-0.2604552824823D+02-0.2587651811214D+02-0.2570723978730D+02 +-0.2553769319514D+02-0.2536787769632D+02-0.2519779213021D+02-0.2502743486110D+02 +-0.2485680383129D+02-0.2468589662112D+02-0.2451471051601D+02-0.2434324258050D+02 +-0.2417148973924D+02-0.2399944886481D+02-0.2382711687194D+02-0.2365449081810D+02 +-0.2348156800981D+02-0.2330834611404D+02-0.2313482327422D+02-0.2296099822964D+02 +-0.2278687043744D+02-0.2261244019567D+02-0.2243770876615D+02-0.2226267849517D+02 +-0.2208735293014D+02-0.2191173693001D+02-0.2173583676674D+02-0.2155966021537D+02 +-0.2138321662948D+02-0.2120651699903D+02-0.2102957398727D+02-0.2085240194340D+02 +-0.2067501688787D+02-0.2049743646710D+02-0.2031967987514D+02-0.2014176773999D+02 +-0.1996372197331D+02-0.1978556558301D+02-0.1960732244950D+02-0.1942901706755D+02 +-0.1925067425750D+02-0.1907231885074D+02-0.1889397535633D+02-0.1871566761696D+02 +-0.1853741846374D+02-0.1835924938052D+02-0.1818118018868D+02-0.1800322876380D+02 +-0.1782541079491D+02-0.1764773959582D+02-0.1747022597686D+02-0.1729287818264D+02 +-0.1711570189939D+02-0.1693870033244D+02-0.1676187435187D+02-0.1658522270158D+02 +-0.1640874226459D+02-0.1623242837596D+02-0.1605627517269D+02-0.1588027596970D+02 +-0.1570442365062D+02-0.1552871106216D+02-0.1535313140208D+02-0.1517767859145D+02 +-0.1500234762341D+02-0.1482713488228D+02-0.1465203842815D+02-0.1447705824363D+02 +-0.1430219644106D+02-0.1412745742929D+02-0.1395284804054D+02-0.1377837761854D+02 +-0.1360405806987D+02-0.1342990388081D+02-0.1325593210249D+02-0.1308216230731D+02 +-0.1290861651951D+02-0.1273531912305D+02-0.1256229674959D+02-0.1238957814960D+02 +-0.1221719404907D+02-0.1204517699438D+02-0.1187356118783D+02-0.1170238231558D+02 +-0.1153167737042D+02-0.1136148447069D+02-0.1119184267735D+02-0.1102279181034D+02 +-0.1085437226576D+02-0.1068662483495D+02-0.1051959052659D+02-0.1035331039265D+02 +-0.1018782535928D+02-0.1002317606321D+02-0.9859402694342D+01-0.9696544845323D+01 +-0.9534641368482D+01-0.9373730240659D+01-0.9213848436346D+01-0.9055031809511D+01 +-0.8897314984394D+01-0.8740731255549D+01-0.8585312497336D+01-0.8431089083029D+01 +-0.8278089813661D+01-0.8126341856676D+01-0.7975870694439D+01-0.7826700082584D+01 +-0.7678852018171D+01-0.7532346717566D+01-0.7387202603932D+01-0.7243436304187D+01 +-0.7101062655233D+01-0.6960094719270D+01-0.6820543807924D+01-0.6682419514939D+01 +-0.6545729757123D+01-0.6410480823229D+01-0.6276677430423D+01-0.6144322787958D+01 +-0.6013418667669D+01-0.5883965480867D+01-0.5755962361193D+01-0.5629407252975D+01 +-0.5504297004604D+01-0.5380627466436D+01-0.5258393592702D+01-0.5137589546863D+01 +-0.5018208809882D+01-0.4900244290793D+01-0.4783688438971D+01-0.4668533357470D+01 +-0.4554770916754D+01-0.4442392868124D+01-0.4331390956131D+01-0.4221757029192D+01 +-0.4113483147635D+01-0.4006561688322D+01-0.3900985445011D+01-0.3796747723533D+01 +-0.3693842430876D+01-0.3592264157211D+01-0.3492008249906D+01-0.3393070878541D+01 +-0.3295449089976D+01-0.3199140852531D+01-0.3104145088414D+01-0.3010461693592D+01 +-0.2918091544431D+01-0.2827036490592D+01-0.2737299333835D+01-0.2648883792669D+01 +-0.2561794453010D+01-0.2476036705393D+01-0.2391616669610D+01-0.2308541108029D+01 +-0.2226817329318D+01-0.2146453084634D+01-0.2067456458802D+01-0.1989835759339D+01 +-0.1913599406514D+01-0.1838755827812D+01-0.1765313360391D+01-0.1693280165020D+01 +-0.1622664154978D+01-0.1553472943063D+01-0.1485713809518D+01-0.1419393693186D+01 +-0.1354519207570D+01-0.1291096682842D+01-0.1229132234097D+01-0.1168631855453D+01 +-0.1109601538882D+01-0.1052047416050D+01-0.9959759208814D+00-0.9413939701484D+00 +-0.8883091590719D+00-0.8367299687430D+00-0.7866659821253D+00-0.7381281054637D+00 +-0.6911287920896D+00-0.6456822658698D+00-0.6018047418553D+00-0.5595146420441D+00 +-0.5188328045500D+00-0.4797826848498D+00-0.4423905481512D+00-0.4066856522662D+00 +-0.3727004206897D+00-0.3404706058472D+00-0.3100354427093D+00-0.2814377931599D+00 +-0.2547240189175D+00 + 0.0000000000000D+00 + 1012 0.2770741520224D+01 + 0.2150927949039D-04 0.2202124536575D-04 0.2254539478646D-04 0.2308201760180D-04 + 0.2363141055333D-04 0.2419387743865D-04 0.2476972927906D-04 0.2535928449121D-04 + 0.2596286906285D-04 0.2658081673262D-04 0.2721346917432D-04 0.2786117618535D-04 + 0.2852429587973D-04 0.2920319488569D-04 0.2989824854795D-04 0.3060984113473D-04 + 0.3133836604977D-04 0.3208422604934D-04 0.3284783346437D-04 0.3362961042788D-04 + 0.3442998910781D-04 0.3524941194536D-04 0.3608833189898D-04 0.3694721269416D-04 + 0.3782652907911D-04 0.3872676708658D-04 0.3964842430179D-04 0.4059201013679D-04 + 0.4155804611131D-04 0.4254706614023D-04 0.4355961682789D-04 0.4459625776943D-04 + 0.4565756185917D-04 0.4674411560639D-04 0.4785651945856D-04 0.4899538813222D-04 + 0.5016135095172D-04 0.5135505219602D-04 0.5257715145361D-04 0.5382832398596D-04 + 0.5510926109951D-04 0.5642067052648D-04 0.5776327681476D-04 0.5913782172693D-04 + 0.6054506464885D-04 0.6198578300785D-04 0.6346077270088D-04 0.6497084853274D-04 + 0.6651684466474D-04 0.6809961507398D-04 0.6972003402351D-04 0.7137899654355D-04 + 0.7307741892426D-04 0.7481623921999D-04 0.7659641776564D-04 0.7841893770513D-04 + 0.8028480553242D-04 0.8219505164534D-04 0.8415073091254D-04 0.8615292325379D-04 + 0.8820273423416D-04 0.9030129567206D-04 0.9244976626185D-04 0.9464933221109D-04 + 0.9690120789284D-04 0.9920663651351D-04 0.1015668907964D-03 0.1039832736813D-03 + 0.1064571190411D-03 0.1089897924148D-03 0.1115826917580D-03 0.1142372482113D-03 + 0.1169549268870D-03 0.1197372276738D-03 0.1225856860613D-03 0.1255018739831D-03 + 0.1284874006808D-03 0.1315439135877D-03 0.1346730992336D-03 0.1378766841712D-03 + 0.1411564359238D-03 0.1445141639563D-03 0.1479517206680D-03 0.1514710024102D-03 + 0.1550739505263D-03 0.1587625524179D-03 0.1625388426349D-03 0.1664049039925D-03 + 0.1703628687133D-03 0.1744149195974D-03 0.1785632912194D-03 0.1828102711544D-03 + 0.1871582012321D-03 0.1916094788209D-03 0.1961665581427D-03 0.2008319516176D-03 + 0.2056082312418D-03 0.2104980299966D-03 0.2155040432913D-03 0.2206290304405D-03 + 0.2258758161753D-03 0.2312472921908D-03 0.2367464187300D-03 0.2423762262044D-03 + 0.2481398168542D-03 0.2540403664457D-03 0.2600811260106D-03 0.2662654236245D-03 + 0.2725966662290D-03 0.2790783414953D-03 0.2857140197324D-03 0.2925073558401D-03 + 0.2994620913080D-03 0.3065820562611D-03 0.3138711715547D-03 0.3213334509168D-03 + 0.3289730031429D-03 0.3367940343406D-03 0.3448008502286D-03 0.3529978584881D-03 + 0.3613895711713D-03 0.3699806071650D-03 0.3787756947128D-03 0.3877796739964D-03 + 0.3969974997780D-03 0.4064342441040D-03 0.4160950990725D-03 0.4259853796663D-03 + 0.4361105266519D-03 0.4464761095462D-03 0.4570878296540D-03 0.4679515231757D-03 + 0.4790731643881D-03 0.4904588689006D-03 0.5021148969868D-03 0.5140476569946D-03 + 0.5262637088364D-03 0.5387697675611D-03 0.5515727070097D-03 0.5646795635561D-03 + 0.5780975399370D-03 0.5918340091694D-03 0.6058965185620D-03 0.6202927938188D-03 + 0.6350307432396D-03 0.6501184620192D-03 0.6655642366457D-03 0.6813765494038D-03 + 0.6975640829812D-03 0.7141357251847D-03 0.7311005737650D-03 0.7484679413557D-03 + 0.7662473605260D-03 0.7844485889531D-03 0.8030816147148D-03 0.8221566617048D-03 + 0.8416841951763D-03 0.8616749274129D-03 0.8821398235337D-03 0.9030901074324D-03 + 0.9245372678559D-03 0.9464930646236D-03 0.9689695349932D-03 0.9919790001731D-03 + 0.1015534071988D-02 0.1039647659698D-02 0.1064332976981D-02 0.1089603549068D-02 + 0.1115473220057D-02 0.1141956160389D-02 0.1169066874495D-02 0.1196820208634D-02 + 0.1225231358897D-02 0.1254315879409D-02 0.1284089690715D-02 0.1314569088366D-02 + 0.1345770751696D-02 0.1377711752814D-02 0.1410409565795D-02 0.1443882076088D-02 + 0.1478147590144D-02 0.1513224845264D-02 0.1549133019674D-02 0.1585891742841D-02 + 0.1623521106018D-02 0.1662041673040D-02 0.1701474491365D-02 0.1741841103378D-02 + 0.1783163557945D-02 0.1825464422244D-02 0.1868766793867D-02 0.1913094313196D-02 + 0.1958471176071D-02 0.2004922146751D-02 0.2052472571166D-02 0.2101148390486D-02 + 0.2150976154989D-02 0.2201983038264D-02 0.2254196851731D-02 0.2307646059493D-02 + 0.2362359793542D-02 0.2418367869301D-02 0.2475700801533D-02 0.2534389820612D-02 + 0.2594466889165D-02 0.2655964719104D-02 0.2718916789042D-02 0.2783357362106D-02 + 0.2849321504172D-02 0.2916845102501D-02 0.2985964884814D-02 0.3056718438800D-02 + 0.3129144232066D-02 0.3203281632551D-02 0.3279170929405D-02 0.3356853354336D-02 + 0.3436371103460D-02 0.3517767359634D-02 0.3601086315312D-02 0.3686373195913D-02 + 0.3773674283724D-02 0.3863036942351D-02 0.3954509641719D-02 0.4048141983652D-02 + 0.4143984728019D-02 0.4242089819491D-02 0.4342510414893D-02 0.4445300911185D-02 + 0.4550516974067D-02 0.4658215567249D-02 0.4768454982366D-02 0.4881294869584D-02 + 0.4996796268890D-02 0.5115021642093D-02 0.5236034905549D-02 0.5359901463622D-02 + 0.5486688242898D-02 0.5616463727181D-02 0.5749297993262D-02 0.5885262747508D-02 + 0.6024431363262D-02 0.6166878919093D-02 0.6312682237899D-02 0.6461919926891D-02 + 0.6614672418475D-02 0.6771022012045D-02 0.6931052916716D-02 0.7094851295016D-02 + 0.7262505307545D-02 0.7434105158642D-02 0.7609743143066D-02 0.7789513693721D-02 + 0.7973513430440D-02 0.8161841209859D-02 0.8354598176397D-02 0.8551887814376D-02 + 0.8753816001287D-02 0.8960491062250D-02 0.9172023825667D-02 0.9388527680122D-02 + 0.9610118632529D-02 0.9836915367568D-02 0.1006903930843D-01 0.1030661467892D-01 + 0.1054976856688D-01 0.1079863098909D-01 0.1105333495749D-01 0.1131401654696D-01 + 0.1158081496451D-01 0.1185387262003D-01 0.1213333519856D-01 0.1241935173418D-01 + 0.1271207468545D-01 0.1301166001257D-01 0.1331826725616D-01 0.1363205961778D-01 + 0.1395320404221D-01 0.1428187130150D-01 0.1461823608081D-01 0.1496247706623D-01 + 0.1531477703430D-01 0.1567532294367D-01 0.1604430602860D-01 0.1642192189452D-01 + 0.1680837061563D-01 0.1720385683464D-01 0.1760858986456D-01 0.1802278379280D-01 + 0.1844665758734D-01 0.1888043520531D-01 0.1932434570378D-01 0.1977862335297D-01 + 0.2024350775185D-01 0.2071924394615D-01 0.2120608254895D-01 0.2170427986376D-01 + 0.2221409801021D-01 0.2273580505238D-01 0.2326967512987D-01 0.2381598859160D-01 + 0.2437503213237D-01 0.2494709893234D-01 0.2553248879941D-01 0.2613150831454D-01 + 0.2674447098014D-01 0.2737169737147D-01 0.2801351529124D-01 0.2867025992742D-01 + 0.2934227401421D-01 0.3002990799646D-01 0.3073352019732D-01 0.3145347698951D-01 + 0.3219015296988D-01 0.3294393113773D-01 0.3371520307664D-01 0.3450436914006D-01 + 0.3531183864059D-01 0.3613803004319D-01 0.3698337116219D-01 0.3784829936233D-01 + 0.3873326176383D-01 0.3963871545150D-01 0.4056512768813D-01 0.4151297613205D-01 + 0.4248274905905D-01 0.4347494558865D-01 0.4449007591493D-01 0.4552866154180D-01 + 0.4659123552298D-01 0.4767834270657D-01 0.4879053998454D-01 0.4992839654695D-01 + 0.5109249414114D-01 0.5228342733595D-01 0.5350180379101D-01 0.5474824453121D-01 + 0.5602338422639D-01 0.5732787147645D-01 0.5866236910176D-01 0.6002755443915D-01 + 0.6142411964345D-01 0.6285277199472D-01 0.6431423421119D-01 0.6580924476805D-01 + 0.6733855822219D-01 0.6890294554290D-01 0.7050319444864D-01 0.7214010975008D-01 + 0.7381451369925D-01 0.7552724634520D-01 0.7727916589591D-01 0.7907114908690D-01 + 0.8090409155624D-01 0.8277890822643D-01 0.8469653369292D-01 0.8665792261951D-01 + 0.8866405014071D-01 0.9071591227111D-01 0.9281452632182D-01 0.9496093132410D-01 + 0.9715618846031D-01 0.9940138150208D-01 0.1016976172560D+00 0.1040460260169D+00 + 0.1064477620282D+00 0.1089040039508D+00 0.1114159553388D+00 0.1139848451236D+00 + 0.1166119281054D+00 0.1192984854532D+00 0.1220458252122D+00 0.1248552828197D+00 + 0.1277282216288D+00 0.1306660334408D+00 0.1336701390448D+00 0.1367419887670D+00 + 0.1398830630269D+00 0.1430948729031D+00 0.1463789607067D+00 0.1497369005636D+00 + 0.1531702990050D+00 0.1566807955666D+00 0.1602700633964D+00 0.1639398098711D+00 + 0.1676917772207D+00 0.1715277431623D+00 0.1754495215419D+00 0.1794589629856D+00 + 0.1835579555582D+00 0.1877484254317D+00 0.1920323375616D+00 0.1964116963718D+00 + 0.2008885464482D+00 0.2054649732406D+00 0.2101431037732D+00 0.2149251073635D+00 + 0.2198131963488D+00 0.2248096268222D+00 0.2299166993754D+00 0.2351367598503D+00 + 0.2404722000984D+00 0.2459254587480D+00 0.2514990219789D+00 0.2571954243047D+00 + 0.2630172493626D+00 0.2689671307106D+00 0.2750477526311D+00 0.2812618509418D+00 + 0.2876122138134D+00 0.2941016825931D+00 0.3007331526352D+00 0.3075095741362D+00 + 0.3144339529771D+00 0.3215093515700D+00 0.3287388897102D+00 0.3361257454325D+00 + 0.3436731558729D+00 0.3513844181328D+00 0.3592628901485D+00 0.3673119915621D+00 + 0.3755352045968D+00 0.3839360749336D+00 0.3925182125899D+00 0.4012852927993D+00 + 0.4102410568930D+00 0.4193893131804D+00 0.4287339378299D+00 0.4382788757486D+00 + 0.4480281414604D+00 0.4579858199819D+00 0.4681560676951D+00 0.4785431132164D+00 + 0.4891512582614D+00 0.4999848785043D+00 0.5110484244305D+00 0.5223464221834D+00 + 0.5338834744021D+00 0.5456642610510D+00 0.5576935402392D+00 0.5699761490289D+00 + 0.5825170042325D+00 0.5953211031952D+00 0.6083935245653D+00 0.6217394290472D+00 + 0.6353640601390D+00 0.6492727448516D+00 0.6634708944082D+00 0.6779640049238D+00 + 0.6927576580616D+00 0.7078575216668D+00 0.7232693503742D+00 0.7389989861895D+00 + 0.7550523590420D+00 0.7714354873073D+00 0.7881544782973D+00 0.8052155287175D+00 + 0.8226249250876D+00 0.8403890441249D+00 0.8585143530879D+00 0.8770074100784D+00 + 0.8958748642992D+00 0.9151234562658D+00 0.9347600179702D+00 0.9547914729931D+00 + 0.9752248365635D+00 0.9960672155622D+00 0.1017325808468D+01 0.1039007905241D+01 + 0.1061120887144D+01 0.1083672226499D+01 0.1106669486370D+01 0.1130120320176D+01 + 0.1154032471231D+01 0.1178413772204D+01 0.1203272144493D+01 0.1228615597523D+01 + 0.1254452227950D+01 0.1280790218774D+01 0.1307637838359D+01 0.1335003439353D+01 + 0.1362895457506D+01 0.1391322410385D+01 0.1420292895972D+01 0.1449815591159D+01 + 0.1479899250115D+01 0.1510552702537D+01 0.1541784851777D+01 0.1573604672833D+01 + 0.1606021210210D+01 0.1639043575644D+01 0.1672680945677D+01 0.1706942559091D+01 + 0.1741837714186D+01 0.1777375765901D+01 0.1813566122779D+01 0.1850418243757D+01 + 0.1887941634794D+01 0.1926145845317D+01 0.1965040464488D+01 0.2004635117287D+01 + 0.2044939460400D+01 0.2085963177919D+01 0.2127715976829D+01 0.2170207582300D+01 + 0.2213447732763D+01 0.2257446174769D+01 0.2302212657626D+01 0.2347756927812D+01 + 0.2394088723154D+01 0.2441217766767D+01 0.2489153760756D+01 0.2537906379665D+01 + 0.2587485263675D+01 0.2637900011547D+01 0.2689160173295D+01 0.2741275242598D+01 + 0.2794254648931D+01 0.2848107749430D+01 0.2902843820459D+01 0.2958472048904D+01 + 0.3015001523163D+01 0.3072441223848D+01 0.3130800014182D+01 0.3190086630094D+01 + 0.3250309670002D+01 0.3311477584285D+01 0.3373598664440D+01 0.3436681031917D+01 + 0.3500732626634D+01 0.3565761195166D+01 0.3631774278604D+01 0.3698779200090D+01 + 0.3766783052007D+01 0.3835792682854D+01 0.3905814683769D+01 0.3976855374728D+01 + 0.4048920790399D+01 0.4122016665671D+01 0.4196148420834D+01 0.4271321146438D+01 + 0.4347539587809D+01 0.4424808129241D+01 0.4503130777854D+01 0.4582511147131D+01 + 0.4662952440136D+01 0.4744457432406D+01 0.4827028454547D+01 0.4910667374509D+01 + 0.4995375579573D+01 0.5081153958042D+01 0.5168002880655D+01 0.5255922181721D+01 + 0.5344911139992D+01 0.5434968459290D+01 0.5526092248881D+01 0.5618280003639D+01 + 0.5711528583982D+01 0.5805834195616D+01 0.5901192369103D+01 0.5997597939257D+01 + 0.6095045024395D+01 0.6193527005472D+01 0.6293036505099D+01 0.6393565366487D+01 + 0.6495104632331D+01 0.6597644523660D+01 0.6701174418681D+01 0.6805682831645D+01 + 0.6911157391760D+01 0.7017584822191D+01 0.7124950919171D+01 0.7233240531258D+01 + 0.7342437538781D+01 0.7452524833500D+01 0.7563484298530D+01 0.7675296788562D+01 + 0.7787942110430D+01 0.7901399004058D+01 0.8015645123842D+01 0.8130657020509D+01 + 0.8246410123503D+01 0.8362878723950D+01 0.8480035958250D+01 0.8597853792358D+01 + 0.8716303006799D+01 0.8835353182487D+01 0.8954972687391D+01 0.9075128664130D+01 + 0.9195787018538D+01 0.9316912409273D+01 0.9438468238543D+01 0.9560416644000D+01 + 0.9682718491880D+01 0.9805333371460D+01 0.9928219590896D+01 0.1005133417453D+02 + 0.1017463286171D+02 0.1029807010722D+02 0.1042159908344D+02 0.1054517168417D+02 + 0.1066873853037D+02 0.1079224897780D+02 0.1091565112659D+02 0.1103889183301D+02 + 0.1116191672323D+02 0.1128467020944D+02 0.1140709550823D+02 0.1152913466133D+02 + 0.1165072855885D+02 0.1177181696506D+02 0.1189233854680D+02 0.1201223090454D+02 + 0.1213143060625D+02 0.1224987322407D+02 0.1236749337400D+02 0.1248422475837D+02 + 0.1260000021157D+02 0.1271475174875D+02 0.1282841061773D+02 0.1294090735413D+02 + 0.1305217183979D+02 0.1316213336451D+02 0.1327072069111D+02 0.1337786212400D+02 + 0.1348348558110D+02 0.1358751866928D+02 0.1368988876325D+02 0.1379052308804D+02 + 0.1388934880491D+02 0.1398629310084D+02 0.1408128328150D+02 0.1417424686776D+02 + 0.1426511169568D+02 0.1435380601989D+02 0.1444025862047D+02 0.1452439891313D+02 + 0.1460615706273D+02 0.1468546410000D+02 0.1476225204147D+02 0.1483645401237D+02 + 0.1490800437259D+02 0.1497683884540D+02 0.1504289464893D+02 0.1510611063019D+02 + 0.1516642740155D+02 0.1522378747941D+02 0.1527813542502D+02 0.1532941798703D+02 + 0.1537758424592D+02 0.1542258575964D+02 0.1546437671057D+02 0.1550291405346D+02 + 0.1553815766392D+02 0.1557007048740D+02 0.1559861868825D+02 0.1562377179849D+02 + 0.1564550286611D+02 0.1566378860245D+02 0.1567860952827D+02 0.1568995011828D+02 + 0.1569779894358D+02 0.1570214881171D+02 0.1570299690387D+02 0.1570034490889D+02 + 0.1569419915342D+02 0.1568457072811D+02 0.1567147560898D+02 0.1565493477391D+02 + 0.1563497431333D+02 0.1561162553504D+02 0.1558492506233D+02 0.1555491492507D+02 + 0.1552164264320D+02 0.1548516130217D+02 0.1544552961962D+02 0.1540281200312D+02 + 0.1535707859803D+02 0.1530840532536D+02 0.1525687390884D+02 0.1520257189079D+02 + 0.1514559263632D+02 0.1508603532531D+02 0.1502400493172D+02 0.1495961218971D+02 + 0.1489297354623D+02 0.1482421109950D+02 0.1475345252306D+02 0.1468083097499D+02 + 0.1460648499184D+02 0.1453055836709D+02 0.1445320001360D+02 0.1437456381003D+02 + 0.1429480843075D+02 0.1421409715909D+02 0.1413259768392D+02 0.1405048187912D+02 + 0.1396792556614D+02 0.1388510825940D+02 0.1380221289467D+02 0.1371942554036D+02 + 0.1363693509198D+02 0.1355493294972D+02 0.1347361267958D+02 0.1339316965818D+02 + 0.1331380070165D+02 0.1323570367897D+02 0.1315907711016D+02 0.1308411975004D+02 + 0.1301103015787D+02 0.1294000625373D+02 0.1287124486230D+02 0.1280494124477D+02 + 0.1274128861984D+02 0.1268047767460D+02 0.1262269606643D+02 0.1256812791682D+02 + 0.1251695329838D+02 0.1246934771604D+02 0.1242548158392D+02 0.1238551969900D+02 + 0.1234962071295D+02 0.1231793660373D+02 0.1229061214824D+02 0.1226778439767D+02 + 0.1224958215706D+02 0.1223612547078D+02 0.1222752511553D+02 0.1222388210258D+02 + 0.1222528719100D+02 0.1223182041366D+02 0.1224355061775D+02 0.1226053502171D+02 + 0.1228281879023D+02 0.1231043462935D+02 0.1234340240339D+02 0.1238172877543D+02 + 0.1242540687338D+02 0.1247441598324D+02 0.1252872127141D+02 0.1258827353770D+02 + 0.1265300900087D+02 0.1272284911822D+02 0.1279770044081D+02 0.1287745450601D+02 + 0.1296198776857D+02 0.1305116157186D+02 0.1314482216032D+02 0.1324280073454D+02 + 0.1334491354991D+02 0.1345096205988D+02 0.1356073310471D+02 0.1367399914649D+02 + 0.1379051855093D+02 0.1391003591655D+02 0.1403228245150D+02 0.1415697639825D+02 + 0.1428382350615D+02 0.1441251755180D+02 0.1454274090682D+02 0.1467416515265D+02 + 0.1480645174180D+02 0.1493925270450D+02 0.1507221140012D+02 0.1520496331175D+02 + 0.1533713688305D+02 0.1546835439544D+02 0.1559823288411D+02 0.1572638509088D+02 + 0.1585242045188D+02 0.1597594611769D+02 0.1609656800349D+02 0.1621389186673D+02 + 0.1632752440935D+02 0.1643707440175D+02 0.1654215382521D+02 0.1664237902974D+02 + 0.1673737190368D+02 0.1682676105166D+02 0.1691018297723D+02 0.1698728326633D+02 + 0.1705771776761D+02 0.1712115376582D+02 0.1717727114395D+02 0.1722576353007D+02 + 0.1726633942470D+02 0.1729872330429D+02 0.1732265669667D+02 0.1733789922408D+02 + 0.1734422960952D+02 0.1734144664198D+02 0.1732937009656D+02 0.1730784160492D+02 + 0.1727672547225D+02 0.1723590943644D+02 0.1718530536559D+02 0.1712484989008D+02 + 0.1705450496536D+02 0.1697425836203D+02 0.1688412407975D+02 0.1678414268193D+02 + 0.1667438154808D+02 0.1655493504124D+02 0.1642592458792D+02 0.1628749866833D+02 + 0.1613983271513D+02 0.1598312891883D+02 0.1581761593876D+02 0.1564354851859D+02 + 0.1546120700566D+02 0.1527089677411D+02 0.1507294755170D+02 0.1486771265109D+02 + 0.1465556810624D+02 0.1443691171558D+02 0.1421216199343D+02 0.1398175703206D+02 + 0.1374615327696D+02 0.1350582421831D+02 0.1326125900230D+02 0.1301296096613D+02 + 0.1276144610103D+02 0.1250724144826D+02 0.1225088343315D+02 0.1199291614280D+02 + 0.1173388955369D+02 0.1147435771520D+02 0.1121487689618D+02 0.1095600370143D+02 + 0.1069829316549D+02 0.1044229683153D+02 0.1018856082317D+02 0.9937623917321D+01 + 0.9690015626445D+01 0.9446254298643D+01 0.9206845244038D+01 0.8972278896087D+01 + 0.8743029016360D+01 0.8519550951297D+01 0.8302279949355D+01 0.8091629546790D+01 + 0.7887990030116D+01 0.7691726983014D+01 0.7503179925129D+01 0.7322661049902D+01 + 0.7150454068046D+01 0.6986813162918D+01 0.6831962063451D+01 0.6686093239819D+01 + 0.6549367226364D+01 0.6421912075717D+01 0.6303822947394D+01 0.6195161833447D+01 + 0.6095957423078D+01 0.6006205107394D+01 0.5925867124779D+01 0.5854872846611D+01 + 0.5793119202371D+01 0.5740471242429D+01 0.5696762836121D+01 0.5661797502031D+01 + 0.5635349366701D+01 0.5617164247353D+01 0.5606960853570D+01 0.5604432102259D+01 + 0.5609246539649D+01 0.5621049863505D+01 0.5639466538232D+01 0.5664101495024D+01 + 0.5694541908766D+01 0.5730359042993D+01 0.5771110153784D+01 0.5816340443192D+01 + 0.5865585052475D+01 0.5918371085180D+01 0.5974219649957D+01 0.6032647912832D+01 + 0.6093171148637D+01 0.6155304781260D+01 0.6218566402475D+01 0.6282477759234D+01 + 0.6346566699475D+01 0.6410369066815D+01 0.6473430534781D+01 0.6535308371644D+01 + 0.6595573127395D+01 0.6653810234872D+01 0.6709621517670D+01 0.6762626598041D+01 + 0.6812464198680D+01 0.6858793332986D+01 0.6901294379138D+01 0.6939670034070D+01 + 0.6973646144233D+01 0.7002972410830D+01 0.7027422967990D+01 0.7046796833200D+01 + 0.7060918230061D+01 0.7069636784259D+01 0.7072827594374D+01 0.7070391179926D+01 + 0.7062253309715D+01 0.7048364714231D+01 0.7028700686483D+01 0.7003260576238D+01 + 0.6972067183121D+01 0.6935166054562D+01 0.6892624694966D+01 0.6844531692843D+01 + 0.6790995772965D+01 0.6732144780827D+01 0.6668124606899D+01 0.6599098058289D+01 + 0.6525243685473D+01 0.6446754571799D+01 0.6363837093418D+01 0.6276709657188D+01 + 0.6185601423998D+01 0.6090751024726D+01 0.5992405275866D+01 0.5890817901556D+01 + 0.5786248268476D+01 0.5678960139726D+01 0.5569220453475D+01 0.5457298131760D+01 + 0.5343462924443D+01 0.5227984292928D+01 0.5111130337809D+01 0.4993166774192D+01 + 0.4874355958030D+01 0.4754955966341D+01 0.4635219733799D+01 0.4515394247714D+01 + 0.4395719803061D+01 0.4276429318764D+01 0.4157747716089D+01 0.4039891359594D+01 + 0.3923067560758D+01 0.3807474144035D+01 0.3693299074769D+01 0.3580720148118D+01 + 0.3469904737816D+01 0.3361009603367D+01 0.3254180754011D+01 0.3149553367571D+01 + 0.3047251762116D+01 0.2947389418162D+01 0.2850069049006D+01 0.2755382716614D+01 + 0.2663411990420D+01 0.2574228146230D+01 0.2487892402405D+01 0.2404456190400D+01 + 0.2323961456713D+01 0.2246440993268D+01 0.2171918793250D+01 0.2100410429420D+01 + 0.2031923451965D+01 0.1966457802972D+01 0.1904006244666D+01 0.1844554798640D+01 + 0.1788083193345D+01 0.1734565317240D+01 0.1683969675070D+01 0.1636259844862D+01 + 0.1591394933364D+01 0.1549330027746D+01 0.1510016641546D+01 0.1473403152964D+01 + 0.1439435233770D+01 0.1408056267219D+01 0.1379207753531D+01 0.1352829701650D+01 + 0.1328861006133D+01 0.1307239808175D+01 0.1287903839946D+01 0.1270790751526D+01 + 0.1255838419882D+01 0.1242985239474D+01 0.1232170394175D+01 0.1223334110328D+01 + 0.1216417890857D+01 0.1211364730456D+01 0.1208119311934D+01 0.1206628183910D+01 + 0.1206839920052D+01 0.1208705260142D+01 0.1212177233248D+01 0.1217211263310D+01 + 0.1223765257423D+01 0.1231799677111D+01 0.1241277592815D+01 0.1252164721788D+01 + 0.1264429449524D+01 0.1278042834732D+01 0.1292978597814D+01 0.1309213092627D+01 + 0.1326725261233D+01 0.1345496571135D+01 0.1365510934358D+01 0.1386754607532D+01 + 0.1409215426363D+01 0.1433003097507D+01 0.1458223277591D+01 0.1484860699421D+01 + 0.1512902583279D+01 0.1542338542721D+01 0.1573160498496D+01 0.1605362600812D+01 + 0.1638941160170D+01 0.1673894586973D+01 0.1710223340083D+01 0.1747929884514D+01 + 7 1012 + 1 0 -1 -511.89150 + 2 0 -1 -58.80097 + 2 1 1 -50.61290 + 2 1 -2 -49.69692 + 3 0 -1 -5.52718 + 3 1 1 -3.14309 + 3 1 -2 -3.03034 + 0.2123373461549D-04 0.2173914995400D-04 0.2225659296114D-04 0.2278634977738D-04 + 0.2332871334728D-04 0.2388398358121D-04 0.2445246752083D-04 0.2503447950857D-04 + 0.2563034136106D-04 0.2624038254674D-04 0.2686494036763D-04 0.2750436014548D-04 + 0.2815899541226D-04 0.2882920810522D-04 0.2951536876657D-04 0.3021785674791D-04 + 0.3093706041946D-04 0.3167337738432D-04 0.3242721469777D-04 0.3319898909177D-04 + 0.3398912720483D-04 0.3479806581728D-04 0.3562625209215D-04 0.3647414382175D-04 + 0.3734220968012D-04 0.3823092948144D-04 0.3914079444457D-04 0.4007230746391D-04 + 0.4102598338660D-04 0.4200234929636D-04 0.4300194480406D-04 0.4402532234512D-04 + 0.4507304748402D-04 0.4614569922601D-04 0.4724387033618D-04 0.4836816766617D-04 + 0.4951921248852D-04 0.5069764083903D-04 0.5190410386721D-04 0.5313926819498D-04 + 0.5440381628400D-04 0.5569844681152D-04 0.5702387505533D-04 0.5838083328767D-04 + 0.5977007117859D-04 0.6119235620880D-04 0.6264847409228D-04 0.6413922920902D-04 + 0.6566544504782D-04 0.6722796465978D-04 0.6882765112238D-04 0.7046538801462D-04 + 0.7214207990339D-04 0.7385865284136D-04 0.7561605487667D-04 0.7741525657465D-04 + 0.7925725155197D-04 0.8114305702331D-04 0.8307371436110D-04 0.8505028966841D-04 + 0.8707387436545D-04 0.8914558578994D-04 0.9126656781168D-04 0.9343799146165D-04 + 0.9566105557602D-04 0.9793698745538D-04 0.1002670435396D-03 0.1026525100984D-03 + 0.1050947039390D-03 0.1075949731294D-03 0.1101546977394D-03 0.1127752905997D-03 + 0.1154581980775D-03 0.1182049008719D-03 0.1210169148270D-03 0.1238957917652D-03 + 0.1268431203390D-03 0.1298605269045D-03 0.1329496764137D-03 0.1361122733297D-03 + 0.1393500625619D-03 0.1426648304247D-03 0.1460584056178D-03 0.1495326602303D-03 + 0.1530895107681D-03 0.1567309192056D-03 0.1604588940629D-03 0.1642754915072D-03 + 0.1681828164816D-03 0.1721830238593D-03 0.1762783196258D-03 0.1804709620887D-03 + 0.1847632631165D-03 0.1891575894056D-03 0.1936563637785D-03 0.1982620665115D-03 + 0.2029772366947D-03 0.2078044736231D-03 0.2127464382210D-03 0.2178058545005D-03 + 0.2229855110531D-03 0.2282882625778D-03 0.2337170314442D-03 0.2392748092933D-03 + 0.2449646586752D-03 0.2507897147258D-03 0.2567531868833D-03 0.2628583606444D-03 + 0.2691085993625D-03 0.2755073460880D-03 0.2820581254518D-03 0.2887645455935D-03 + 0.2956303001344D-03 0.3026591701977D-03 0.3098550264756D-03 0.3172218313454D-03 + 0.3247636410353D-03 0.3324846078408D-03 0.3403889823939D-03 0.3484811159850D-03 + 0.3567654629401D-03 0.3652465830528D-03 0.3739291440747D-03 0.3828179242637D-03 + 0.3919178149916D-03 0.4012338234146D-03 0.4107710752045D-03 0.4205348173457D-03 + 0.4305304209971D-03 0.4407633844209D-03 0.4512393359813D-03 0.4619640372121D-03 + 0.4729433859575D-03 0.4841834195856D-03 0.4956903182785D-03 0.5074704083979D-03 + 0.5195301659314D-03 0.5318762200182D-03 0.5445153565579D-03 0.5574545219044D-03 + 0.5707008266453D-03 0.5842615494708D-03 0.5981441411326D-03 0.6123562284955D-03 + 0.6269056186847D-03 0.6418003033287D-03 0.6570484629028D-03 0.6726584711734D-03 + 0.6886388997468D-03 0.7049985227240D-03 0.7217463214642D-03 0.7388914894603D-03 + 0.7564434373277D-03 0.7744117979097D-03 0.7928064315026D-03 0.8116374312024D-03 + 0.8309151283763D-03 0.8506500982622D-03 0.8708531656989D-03 0.8915354109894D-03 + 0.9127081759015D-03 0.9343830698083D-03 0.9565719759715D-03 0.9792870579714D-03 + 0.1002540766287D-02 0.1026345845027D-02 0.1050715338824D-02 0.1075662599879D-02 + 0.1101201295181D-02 0.1127345413883D-02 0.1154109274864D-02 0.1181507534450D-02 + 0.1209555194328D-02 0.1238267609637D-02 0.1267660497252D-02 0.1297749944251D-02 + 0.1328552416593D-02 0.1360084767981D-02 0.1392364248945D-02 0.1425408516127D-02 + 0.1459235641785D-02 0.1493864123514D-02 0.1529312894196D-02 0.1565601332181D-02 + 0.1602749271697D-02 0.1640777013510D-02 0.1679705335822D-02 0.1719555505429D-02 + 0.1760349289133D-02 0.1802108965417D-02 0.1844857336390D-02 0.1888617740010D-02 + 0.1933414062589D-02 0.1979270751585D-02 0.2026212828687D-02 0.2074265903209D-02 + 0.2123456185786D-02 0.2173810502385D-02 0.2225356308647D-02 0.2278121704551D-02 + 0.2332135449417D-02 0.2387426977257D-02 0.2444026412476D-02 0.2501964585936D-02 + 0.2561273051389D-02 0.2621984102285D-02 0.2684130788965D-02 0.2747746936258D-02 + 0.2812867161465D-02 0.2879526892772D-02 0.2947762388071D-02 0.3017610754222D-02 + 0.3089109966753D-02 0.3162298890003D-02 0.3237217297741D-02 0.3313905894238D-02 + 0.3392406335837D-02 0.3472761253004D-02 0.3555014272883D-02 0.3639210042377D-02 + 0.3725394251736D-02 0.3813613658698D-02 0.3903916113173D-02 0.3996350582488D-02 + 0.4090967177209D-02 0.4187817177547D-02 0.4286953060364D-02 0.4388428526794D-02 + 0.4492298530489D-02 0.4598619306504D-02 0.4707448400838D-02 0.4818844700646D-02 + 0.4932868465127D-02 0.5049581357120D-02 0.5169046475404D-02 0.5291328387739D-02 + 0.5416493164639D-02 0.5544608413917D-02 0.5675743316002D-02 0.5809968660057D-02 + 0.5947356880904D-02 0.6087982096781D-02 0.6231920147946D-02 0.6379248636155D-02 + 0.6530046965011D-02 0.6684396381234D-02 0.6842380016839D-02 0.7004082932273D-02 + 0.7169592160503D-02 0.7338996752102D-02 0.7512387821327D-02 0.7689858593235D-02 + 0.7871504451850D-02 0.8057422989391D-02 0.8247714056607D-02 0.8442479814225D-02 + 0.8641824785540D-02 0.8845855910175D-02 0.9054682599025D-02 0.9268416790430D-02 + 0.9487173007575D-02 0.9711068417172D-02 0.9940222889430D-02 0.1017475905935D-01 + 0.1041480238936D-01 0.1066048123337D-01 0.1091192690214D-01 0.1116927373022D-01 + 0.1143265914425D-01 0.1170222373276D-01 0.1197811131760D-01 0.1226046902681D-01 + 0.1254944736912D-01 0.1284520031015D-01 0.1314788535014D-01 0.1345766360348D-01 + 0.1377469987990D-01 0.1409916276750D-01 0.1443122471744D-01 0.1477106213063D-01 + 0.1511885544620D-01 0.1547478923187D-01 0.1583905227632D-01 0.1621183768351D-01 + 0.1659334296907D-01 0.1698377015868D-01 0.1738332588869D-01 0.1779222150874D-01 + 0.1821067318670D-01 0.1863890201578D-01 0.1907713412394D-01 0.1952560078568D-01 + 0.1998453853608D-01 0.2045418928739D-01 0.2093480044805D-01 0.2142662504416D-01 + 0.2192992184360D-01 0.2244495548276D-01 0.2297199659585D-01 0.2351132194704D-01 + 0.2406321456527D-01 0.2462796388197D-01 0.2520586587156D-01 0.2579722319499D-01 + 0.2640234534617D-01 0.2702154880148D-01 0.2765515717239D-01 0.2830350136121D-01 + 0.2896691972007D-01 0.2964575821319D-01 0.3034037058244D-01 0.3105111851634D-01 + 0.3177837182251D-01 0.3252250860359D-01 0.3328391543683D-01 0.3406298755727D-01 + 0.3486012904465D-01 0.3567575301409D-01 0.3651028181063D-01 0.3736414720771D-01 + 0.3823779060956D-01 0.3913166325773D-01 0.4004622644169D-01 0.4098195171364D-01 + 0.4193932110758D-01 0.4291882736274D-01 0.4392097415138D-01 0.4494627631115D-01 + 0.4599526008193D-01 0.4706846334735D-01 0.4816643588104D-01 0.4928973959763D-01 + 0.5043894880863D-01 0.5161465048329D-01 0.5281744451445D-01 0.5404794398948D-01 + 0.5530677546647D-01 0.5659457925562D-01 0.5791200970601D-01 0.5925973549779D-01 + 0.6063843993988D-01 0.6204882127328D-01 0.6349159298001D-01 0.6496748409788D-01 + 0.6647723954103D-01 0.6802162042643D-01 0.6960140440641D-01 0.7121738600725D-01 + 0.7287037697395D-01 0.7456120662128D-01 0.7629072219118D-01 0.7805978921657D-01 + 0.7986929189166D-01 0.8172013344892D-01 0.8361323654265D-01 0.8554954363940D-01 + 0.8753001741513D-01 0.8955564115940D-01 0.9162741918654D-01 0.9374637725383D-01 + 0.9591356298698D-01 0.9813004631275D-01 0.1003969198990D+00 0.1027152996019D+00 + 0.1050863249211D+00 0.1075111594618D+00 0.1099909914051D+00 0.1125270339855D+00 + 0.1151205259766D+00 0.1177727321842D+00 0.1204849439476D+00 0.1232584796489D+00 + 0.1260946852301D+00 0.1289949347182D+00 0.1319606307590D+00 0.1349932051583D+00 + 0.1380941194317D+00 0.1412648653632D+00 0.1445069655708D+00 0.1478219740820D+00 + 0.1512114769165D+00 0.1546770926778D+00 0.1582204731535D+00 0.1618433039236D+00 + 0.1655473049771D+00 0.1693342313383D+00 0.1732058737000D+00 0.1771640590662D+00 + 0.1812106514032D+00 0.1853475522988D+00 0.1895767016304D+00 0.1939000782413D+00 + 0.1983197006251D+00 0.2028376276193D+00 0.2074559591063D+00 0.2121768367234D+00 + 0.2170024445803D+00 0.2219350099852D+00 0.2269768041788D+00 0.2321301430764D+00 + 0.2373973880172D+00 0.2427809465221D+00 0.2482832730585D+00 0.2539068698131D+00 + 0.2596542874715D+00 0.2655281260047D+00 0.2715310354636D+00 0.2776657167793D+00 + 0.2839349225700D+00 0.2903414579550D+00 0.2968881813739D+00 0.3035780054119D+00 + 0.3104138976312D+00 0.3173988814070D+00 0.3245360367687D+00 0.3318285012460D+00 + 0.3392794707188D+00 0.3468922002717D+00 0.3546700050516D+00 0.3626162611285D+00 + 0.3707344063591D+00 0.3790279412529D+00 0.3875004298396D+00 0.3961555005386D+00 + 0.4049968470283D+00 0.4140282291162D+00 0.4232534736091D+00 0.4326764751811D+00 + 0.4423011972414D+00 0.4521316727988D+00 0.4621720053237D+00 0.4724263696067D+00 + 0.4828990126121D+00 0.4935942543268D+00 0.5045164886027D+00 0.5156701839924D+00 + 0.5270598845772D+00 0.5386902107861D+00 0.5505658602051D+00 0.5626916083760D+00 + 0.5750723095830D+00 0.5877128976270D+00 0.6006183865849D+00 0.6137938715547D+00 + 0.6272445293836D+00 0.6409756193782D+00 0.6549924839961D+00 0.6693005495166D+00 + 0.6839053266899D+00 0.6988124113627D+00 0.7140274850788D+00 0.7295563156538D+00 + 0.7454047577210D+00 0.7615787532478D+00 0.7780843320207D+00 0.7949276120969D+00 + 0.8121148002200D+00 0.8296521921997D+00 0.8475461732513D+00 0.8658032182945D+00 + 0.8844298922086D+00 0.9034328500427D+00 0.9228188371772D+00 0.9425946894360D+00 + 0.9627673331456D+00 0.9833437851400D+00 0.1004331152707D+01 0.1025736633476D+01 + 0.1047567515241D+01 0.1069831175720D+01 0.1092535082243D+01 0.1115686791375D+01 + 0.1139293948457D+01 0.1163364287075D+01 0.1187905628445D+01 0.1212925880722D+01 + 0.1238433038208D+01 0.1264435180485D+01 0.1290940471443D+01 0.1317957158220D+01 + 0.1345493570030D+01 0.1373558116898D+01 0.1402159288280D+01 0.1431305651569D+01 + 0.1461005850494D+01 0.1491268603389D+01 0.1522102701342D+01 0.1553517006218D+01 + 0.1585520448546D+01 0.1618122025271D+01 0.1651330797361D+01 0.1685155887276D+01 + 0.1719606476280D+01 0.1754691801602D+01 0.1790421153434D+01 0.1826803871767D+01 + 0.1863849343063D+01 0.1901566996742D+01 0.1939966301501D+01 0.1979056761446D+01 + 0.2018847912032D+01 0.2059349315815D+01 0.2100570557999D+01 0.2142521241790D+01 + 0.2185210983528D+01 0.2228649407614D+01 0.2272846141215D+01 0.2317810808747D+01 + 0.2363553026124D+01 0.2410082394775D+01 0.2457408495423D+01 0.2505540881617D+01 + 0.2554489073015D+01 0.2604262548407D+01 0.2654870738488D+01 0.2706323018355D+01 + 0.2758628699743D+01 0.2811797022979D+01 0.2865837148659D+01 0.2920758149043D+01 + 0.2976568999160D+01 0.3033278567615D+01 0.3090895607108D+01 0.3149428744640D+01 + 0.3208886471423D+01 0.3269277132479D+01 0.3330608915918D+01 0.3392889841912D+01 + 0.3456127751341D+01 0.3520330294118D+01 0.3585504917195D+01 0.3651658852234D+01 + 0.3718799102956D+01 0.3786932432154D+01 0.3856065348377D+01 0.3926204092282D+01 + 0.3997354622651D+01 0.4069522602076D+01 0.4142713382310D+01 0.4216931989288D+01 + 0.4292183107814D+01 0.4368471065927D+01 0.4445799818928D+01 0.4524172933100D+01 + 0.4603593569097D+01 0.4684064465021D+01 0.4765587919192D+01 0.4848165772611D+01 + 0.4931799391130D+01 0.5016489647323D+01 0.5102236902085D+01 0.5189040985952D+01 + 0.5276901180158D+01 0.5365816197444D+01 0.5455784162617D+01 0.5546802592894D+01 + 0.5638868378017D+01 0.5731977760181D+01 0.5826126313769D+01 0.5921308924927D+01 + 0.6017519770983D+01 0.6114752299744D+01 0.6212999208681D+01 0.6312252424025D+01 + 0.6412503079799D+01 0.6513741496818D+01 0.6615957161666D+01 0.6719138705689D+01 + 0.6823273884037D+01 0.6928349554769D+01 0.7034351658067D+01 0.7141265195588D+01 + 0.7249074209985D+01 0.7357761764637D+01 0.7467309923627D+01 0.7577699732003D+01 + 0.7688911196366D+01 0.7800923265826D+01 0.7913713813378D+01 0.8027259617727D+01 + 0.8141536345630D+01 0.8256518534789D+01 0.8372179577355D+01 0.8488491704090D+01 + 0.8605425969248D+01 0.8722952236222D+01 0.8841039164025D+01 0.8959654194655D+01 + 0.9078763541413D+01 0.9198332178230D+01 0.9318323830066D+01 0.9438700964464D+01 + 0.9559424784293D+01 0.9680455221780D+01 0.9801750933887D+01 0.9923269299099D+01 + 0.1004496641570D+02 0.1016679710163D+02 0.1028871489593D+02 0.1041067206198D+02 + 0.1053261959239D+02 0.1065450721594D+02 0.1077628340626D+02 0.1089789539267D+02 + 0.1101928917306D+02 0.1114040952889D+02 0.1126120004259D+02 0.1138160311709D+02 + 0.1150155999788D+02 0.1162101079752D+02 0.1173989452270D+02 0.1185814910389D+02 + 0.1197571142774D+02 0.1209251737221D+02 0.1220850184455D+02 0.1232359882222D+02 + 0.1243774139668D+02 0.1255086182033D+02 0.1266289155645D+02 0.1277376133233D+02 + 0.1288340119558D+02 0.1299174057364D+02 0.1309870833671D+02 0.1320423286383D+02 + 0.1330824211245D+02 0.1341066369131D+02 0.1351142493681D+02 0.1361045299271D+02 + 0.1370767489335D+02 0.1380301765027D+02 0.1389640834224D+02 0.1398777420882D+02 + 0.1407704274716D+02 0.1416414181234D+02 0.1424899972093D+02 0.1433154535791D+02 + 0.1441170828680D+02 0.1448941886294D+02 0.1456460834990D+02 0.1463720903887D+02 + 0.1470715437095D+02 0.1477437906225D+02 0.1483881923166D+02 0.1490041253114D+02 + 0.1495909827839D+02 0.1501481759178D+02 0.1506751352732D+02 0.1511713121747D+02 + 0.1516361801165D+02 0.1520692361818D+02 0.1524700024742D+02 0.1528380275595D+02 + 0.1531728879140D+02 0.1534741893776D+02 0.1537415686084D+02 0.1539746945363D+02 + 0.1541732698111D+02 0.1543370322439D+02 0.1544657562364D+02 0.1545592541956D+02 + 0.1546173779302D+02 0.1546400200242D+02 0.1546271151843D+02 0.1545786415570D+02 + 0.1544946220111D+02 0.1543751253809D+02 0.1542202676661D+02 0.1540302131844D+02 + 0.1538051756708D+02 0.1535454193202D+02 0.1532512597682D+02 0.1529230650045D+02 + 0.1525612562157D+02 0.1521663085508D+02 0.1517387518057D+02 0.1512791710213D+02 + 0.1507882069905D+02 0.1502665566690D+02 0.1497149734847D+02 0.1491342675424D+02 + 0.1485253057170D+02 0.1478890116319D+02 0.1472263655178D+02 0.1465384039476D+02 + 0.1458262194423D+02 0.1450909599456D+02 0.1443338281613D+02 0.1435560807511D+02 + 0.1427590273888D+02 0.1419440296685D+02 0.1411124998625D+02 0.1402658995277D+02 + 0.1394057379573D+02 0.1385335704764D+02 0.1376509965795D+02 0.1367596579089D+02 + 0.1358612360737D+02 0.1349574503081D+02 0.1340500549696D+02 0.1331408368786D+02 + 0.1322316124986D+02 0.1313242249599D+02 0.1304205409292D+02 0.1295224473262D+02 + 0.1286318478926D+02 0.1277506596148D+02 0.1268808090072D+02 0.1260242282594D+02 + 0.1251828512526D+02 0.1243586094535D+02 0.1235534276899D+02 0.1227692198172D+02 + 0.1220078842830D+02 0.1212712995982D+02 0.1205613197253D+02 0.1198797693913D+02 + 0.1192284393379D+02 0.1186090815186D+02 0.1180234042546D+02 0.1174730673615D+02 + 0.1169596772603D+02 0.1164847820834D+02 0.1160498667924D+02 0.1156563483188D+02 + 0.1153055707436D+02 0.1149988005301D+02 0.1147372218250D+02 0.1145219318434D+02 + 0.1143539363525D+02 0.1142341452711D+02 0.1141633683999D+02 0.1141423112993D+02 + 0.1141715713298D+02 0.1142516338731D+02 0.1143828687474D+02 0.1145655268355D+02 + 0.1147997369390D+02 0.1150855028761D+02 0.1154227008374D+02 0.1158110770138D+02 + 0.1162502455129D+02 0.1167396865756D+02 0.1172787451079D+02 0.1178666295396D+02 + 0.1185024110228D+02 0.1191850229803D+02 0.1199132610159D+02 0.1206857831946D+02 + 0.1215011107019D+02 0.1223576288907D+02 0.1232535887199D+02 0.1241871085933D+02 + 0.1251561765997D+02 0.1261586531600D+02 0.1271922740805D+02 0.1282546540151D+02 + 0.1293432903330D+02 0.1304555673916D+02 0.1315887612096D+02 0.1327400445348D+02 + 0.1339064923005D+02 0.1350850874625D+02 0.1362727272054D+02 0.1374662295087D+02 + 0.1386623400591D+02 0.1398577394943D+02 0.1410490509638D+02 0.1422328479880D+02 + 0.1434056625987D+02 0.1445639937388D+02 0.1457043159027D+02 0.1468230879914D+02 + 0.1479167623614D+02 0.1489817940404D+02 0.1500146500841D+02 0.1510118190471D+02 + 0.1519698205391D+02 0.1528852148379D+02 0.1537546125281D+02 0.1545746841364D+02 + 0.1553421697307D+02 0.1560538884523D+02 0.1567067479483D+02 0.1572977536717D+02 + 0.1578240180176D+02 0.1582827692612D+02 0.1586713602663D+02 0.1589872769311D+02 + 0.1592281463392D+02 0.1593917445849D+02 0.1594760042409D+02 0.1594790214378D+02 + 0.1593990625272D+02 0.1592345702984D+02 0.1589841697221D+02 0.1586466731948D+02 + 0.1582210852585D+02 0.1577066067732D+02 0.1571026385193D+02 0.1564087842120D+02 + 0.1556248529064D+02 0.1547508607802D+02 0.1537870322780D+02 0.1527338006062D+02 + 0.1515918075676D+02 0.1503619027308D+02 0.1490451419267D+02 0.1476427850715D+02 + 0.1461562933169D+02 0.1445873255288D+02 0.1429377341010D+02 0.1412095601137D+02 + 0.1394050278444D+02 0.1375265386499D+02 0.1355766642312D+02 0.1335581393054D+02 + 0.1314738537038D+02 0.1293268439219D+02 0.1271202841511D+02 0.1248574768189D+02 + 0.1225418426740D+02 0.1201769104500D+02 0.1177663061449D+02 0.1153137419578D+02 + 0.1128230049248D+02 0.1102979452961D+02 0.1077424647032D+02 0.1051605041603D+02 + 0.1025560319513D+02 0.9993303145083D+01 0.9729548892983D+01 0.9464738139829D+01 + 0.9199266453606D+01 0.8933526076402D+01 0.8667904750745D+01 0.8402784570301D+01 + 0.8138540859996D+01 0.7875541090527D+01 0.7614143832090D+01 0.7354697751983D+01 + 0.7097540660550D+01 0.6842998609696D+01 0.6591385047920D+01 0.6343000035605D+01 + 0.6098129523858D+01 0.5857044699944D+01 0.5620001401934D+01 0.5387239604814D+01 + 0.5158982979846D+01 0.4935438528573D+01 0.4716796292366D+01 0.4503229137976D+01 + 0.4294892619056D+01 0.4091924913152D+01 0.3894446833193D+01 0.3702561912045D+01 + 0.3516356558237D+01 0.3335900280537D+01 0.3161245978670D+01 0.2992430297065D+01 + 0.2829474038194D+01 0.2672382631762D+01 0.2521146655720D+01 0.2375742404881D+01 + 0.2236132502695D+01 0.2102266551639D+01 0.1974081817541D+01 0.1851503943111D+01 + 0.1734447685940D+01 0.1622817676200D+01 0.1516509189368D+01 0.1415408929331D+01 + 0.1319395817360D+01 0.1228341782531D+01 0.1142112549373D+01 0.1060568418635D+01 + 0.9835650373019D+00 0.9109541541726D+00 0.8425843575459D+00 0.7783017917968D+00 + 0.7179508498817D+00 0.6613748390683D+00 0.6084166174653D+00 0.5589191992012D+00 + 0.5127263263911D+00 0.4696830063190D+00 0.4296360125529D+00 0.3924343490009D+00 + 0.3579296762027D+00 0.3259766994340D+00 0.2964335184742D+00 0.2691619391536D+00 + 0.2440277470488D+00 0.2209009439361D+00 0.1996559478365D+00 0.1801717576938D+00 + 0.1623320839184D+00 0.1460254461990D+00 0.1311452401368D+00 0.1175897743854D+00 + 0.1052622800912D+00 0.9407089451527D-01 0.8392862078550D-01 0.7475326577690D-01 + 0.6646735814128D-01 0.5899804851766D-01 0.5227699394346D-01 0.4624022845899D-01 + 0.4082802185442D-01 0.3598472845105D-01 0.3165862773800D-01 0.2780175860384D-01 + 0.2436974881146D-01 0.2132164126495D-01 0.1861971851162D-01 0.1622932681167D-01 + 0.1411870099424D-01 0.1225879120292D-01 0.1062309251766D-01 0.9187478324824D-02 + 0.7930038194170D-02 0.6830920911119D-02 0.5872183206948D-02 0.5037644628161D-02 + 0.4312748890659D-02 0.3684431974697D-02 0.3140997133459D-02 0.2671996911721D-02 + 0.2268122201696D-02 0.1921098300832D-02 0.1623587881022D-02 0.1369100730387D-02 + 0.1151910087150D-02 0.9669753500508D-03 0.8098709208516D-03 0.6767209113939D-03 + 0.5641394300578D-03 0.4691761498429D-03 0.3892668522563D-03 0.3221886372696D-03 + 0.2660194893607D-03 0.2191018926233D-03 0.1800101936858D-03 0.1475214192933D-03 + 0.1205892654847D-03 0.9832098695562D-04 0.7995692809159D-04 0.6485245095860D-04 + 0.5246202996510D-04 0.4232529769133D-04 0.3405484129524D-04 0.2732556374477D-04 + 0.2186543872353D-04 0.1744750226736D-04 0.1388293789508D-04 0.1101512510421D-04 + 0.8714533541124D-05 0.6874356872787D-05 0.5406791351919D-05 0.4239874261002D-05 + 0.3314806839624D-05 0.2583694952262D-05 0.2007648657315D-05 0.1555189018603D-05 + 0.1200916989437D-05 0.9244050332163D-06 0.7092773630705D-06 0.5424493283134D-06 + 0.4135005904089D-06 0.3141603589352D-06 0.2378861413798D-06 0.1795202409555D-06 + 0.1350106538765D-06 0.1011851095086D-06 0.7556879909866D-07 0.5623788451178D-07 + 0.4170219815814D-07 0.3081166707088D-07 0.2268194336078D-07 0.1663552297805D-07 + 0.1215530542863D-07 0.8848107127806D-08 0.6416106613217D-08 0.4634585104140D-08 + 0.3334643304910D-08 0.2389835688104D-08 0.1705876062949D-08 0.1212741020005D-08 + 0.8586376559590D-09 0.6054146003728D-09 0.4250856698627D-09 0.2972075512731D-09 + 0.2069101606973D-09 0.1434236365115D-09 0.9898160505409D-10 0.6800804519963D-10 + 0.4651712787494D-10 0.3167310042586D-10 0.2146695649341D-10 0.1448079937139D-10 + 0.9722622861678D-11 0.6496070631129D-11 0.4319651023999D-11 0.2858591661735D-11 + 0.1882503214946D-11 0.1233598363270D-11 0.8043412065319D-12 0.5218060130221D-12 + 0.3367856512696D-12 0.2162455335843D-12 0.1381220475631D-12 0.8775552000331D-13 diff --git a/Test/Fe16_non_collinear/v_fe16.9 b/Test/Fe16_non_collinear/v_fe16.9 new file mode 100755 index 000000000..f3c4e967f --- /dev/null +++ b/Test/Fe16_non_collinear/v_fe16.9 @@ -0,0 +1,1542 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Fe. + 2 0.0000000000000D+00 + LSMS: xx z= 26. xvalws= 5.22926 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728400909D+02-0.5199725115555D+02-0.5199721790459D+02-0.5199718425142D+02 +-0.5199715019116D+02-0.5199711571889D+02-0.5199708082964D+02-0.5199704551834D+02 +-0.5199700977990D+02-0.5199697360915D+02-0.5199693700086D+02-0.5199689994973D+02 +-0.5199686245042D+02-0.5199682449748D+02-0.5199678608545D+02-0.5199674720876D+02 +-0.5199670786180D+02-0.5199666803887D+02-0.5199662773421D+02-0.5199658694201D+02 +-0.5199654565635D+02-0.5199650387127D+02-0.5199646158073D+02-0.5199641877860D+02 +-0.5199637545872D+02-0.5199633161480D+02-0.5199628724051D+02-0.5199624232942D+02 +-0.5199619687506D+02-0.5199615087084D+02-0.5199610431012D+02-0.5199605718616D+02 +-0.5199600949214D+02-0.5199596122116D+02-0.5199591236626D+02-0.5199586292036D+02 +-0.5199581287632D+02-0.5199576222688D+02-0.5199571096474D+02-0.5199565908248D+02 +-0.5199560657259D+02-0.5199555342748D+02-0.5199549963947D+02-0.5199544520078D+02 +-0.5199539010352D+02-0.5199533433975D+02-0.5199527790139D+02-0.5199522078028D+02 +-0.5199516296816D+02-0.5199510445666D+02-0.5199504523733D+02-0.5199498530160D+02 +-0.5199492464081D+02-0.5199486324617D+02-0.5199480110883D+02-0.5199473821977D+02 +-0.5199467456990D+02-0.5199461015004D+02-0.5199454495085D+02-0.5199447896290D+02 +-0.5199441217666D+02-0.5199434458246D+02-0.5199427617052D+02-0.5199420693096D+02 +-0.5199413685375D+02-0.5199406592876D+02-0.5199399414573D+02-0.5199392149428D+02 +-0.5199384796390D+02-0.5199377354396D+02-0.5199369822368D+02-0.5199362199218D+02 +-0.5199354483843D+02-0.5199346675127D+02-0.5199338771940D+02-0.5199330773139D+02 +-0.5199322677567D+02-0.5199314484053D+02-0.5199306191412D+02-0.5199297798443D+02 +-0.5199289303934D+02-0.5199280706654D+02-0.5199272005361D+02-0.5199263198797D+02 +-0.5199254285685D+02-0.5199245264737D+02-0.5199236134649D+02-0.5199226894099D+02 +-0.5199217541751D+02-0.5199208076251D+02-0.5199198496230D+02-0.5199188800302D+02 +-0.5199178987064D+02-0.5199169055096D+02-0.5199159002963D+02-0.5199148829207D+02 +-0.5199138532359D+02-0.5199128110928D+02-0.5199117563407D+02-0.5199106888269D+02 +-0.5199096083969D+02-0.5199085148944D+02-0.5199074081613D+02-0.5199062880373D+02 +-0.5199051543604D+02-0.5199040069664D+02-0.5199028456895D+02-0.5199016703615D+02 +-0.5199004808124D+02-0.5198992768700D+02-0.5198980583600D+02-0.5198968251063D+02 +-0.5198955769302D+02-0.5198943136512D+02-0.5198930350863D+02-0.5198917410506D+02 +-0.5198904313569D+02-0.5198891058155D+02-0.5198877642345D+02-0.5198864064200D+02 +-0.5198850321751D+02-0.5198836413012D+02-0.5198822335968D+02-0.5198808088582D+02 +-0.5198793668793D+02-0.5198779074512D+02-0.5198764303627D+02-0.5198749354000D+02 +-0.5198734223467D+02-0.5198718909837D+02-0.5198703410894D+02-0.5198687724393D+02 +-0.5198671848065D+02-0.5198655779610D+02-0.5198639516703D+02-0.5198623056988D+02 +-0.5198606398084D+02-0.5198589537577D+02-0.5198572473026D+02-0.5198555201962D+02 +-0.5198537721883D+02-0.5198520030257D+02-0.5198502124524D+02-0.5198484002091D+02 +-0.5198465660333D+02-0.5198447096595D+02-0.5198428308188D+02-0.5198409292391D+02 +-0.5198390046450D+02-0.5198370567579D+02-0.5198350852955D+02-0.5198330899725D+02 +-0.5198310704998D+02-0.5198290265850D+02-0.5198269579318D+02-0.5198248642408D+02 +-0.5198227452087D+02-0.5198206005285D+02-0.5198184298896D+02-0.5198162329776D+02 +-0.5198140094741D+02-0.5198117590571D+02-0.5198094814005D+02-0.5198071761744D+02 +-0.5198048430449D+02-0.5198024816738D+02-0.5198000917191D+02-0.5197976728344D+02 +-0.5197952246692D+02-0.5197927468690D+02-0.5197902390745D+02-0.5197877009224D+02 +-0.5197851320449D+02-0.5197825320698D+02-0.5197799006201D+02-0.5197772373146D+02 +-0.5197745417673D+02-0.5197718135875D+02-0.5197690523796D+02-0.5197662577437D+02 +-0.5197634292744D+02-0.5197605665620D+02-0.5197576691913D+02-0.5197547367423D+02 +-0.5197517687900D+02-0.5197487649041D+02-0.5197457246489D+02-0.5197426475838D+02 +-0.5197395332627D+02-0.5197363812338D+02-0.5197331910403D+02-0.5197299622195D+02 +-0.5197266943031D+02-0.5197233868173D+02-0.5197200392824D+02-0.5197166512128D+02 +-0.5197132221174D+02-0.5197097514984D+02-0.5197062388528D+02-0.5197026836709D+02 +-0.5196990854370D+02-0.5196954436291D+02-0.5196917577189D+02-0.5196880271716D+02 +-0.5196842514461D+02-0.5196804299945D+02-0.5196765622622D+02-0.5196726476881D+02 +-0.5196686857041D+02-0.5196646757354D+02-0.5196606171998D+02-0.5196565095085D+02 +-0.5196523520651D+02-0.5196481442664D+02-0.5196438855015D+02-0.5196395751522D+02 +-0.5196352125928D+02-0.5196307971901D+02-0.5196263283028D+02-0.5196218052823D+02 +-0.5196172274718D+02-0.5196125942066D+02-0.5196079048138D+02-0.5196031586126D+02 +-0.5195983549135D+02-0.5195934930191D+02-0.5195885722231D+02-0.5195835918107D+02 +-0.5195785510585D+02-0.5195734492343D+02-0.5195682855969D+02-0.5195630593961D+02 +-0.5195577698725D+02-0.5195524162577D+02-0.5195469977736D+02-0.5195415136330D+02 +-0.5195359630387D+02-0.5195303451841D+02-0.5195246592528D+02-0.5195189044181D+02 +-0.5195130798435D+02-0.5195071846824D+02-0.5195012180777D+02-0.5194951791619D+02 +-0.5194890670569D+02-0.5194828808741D+02-0.5194766197137D+02-0.5194702826653D+02 +-0.5194638688071D+02-0.5194573772064D+02-0.5194508069188D+02-0.5194441569885D+02 +-0.5194374264482D+02-0.5194306143187D+02-0.5194237196087D+02-0.5194167413149D+02 +-0.5194096784220D+02-0.5194025299021D+02-0.5193952947146D+02-0.5193879718066D+02 +-0.5193805601119D+02-0.5193730585519D+02-0.5193654660341D+02-0.5193577814533D+02 +-0.5193500036904D+02-0.5193421316129D+02-0.5193341640742D+02-0.5193260999141D+02 +-0.5193179379578D+02-0.5193096770164D+02-0.5193013158865D+02-0.5192928533501D+02 +-0.5192842881739D+02-0.5192756191098D+02-0.5192668448947D+02-0.5192579642497D+02 +-0.5192489758803D+02-0.5192398784765D+02-0.5192306707119D+02-0.5192213512442D+02 +-0.5192119187145D+02-0.5192023717474D+02-0.5191927089505D+02-0.5191829289146D+02 +-0.5191730302133D+02-0.5191630114025D+02-0.5191528710207D+02-0.5191426075883D+02 +-0.5191322196077D+02-0.5191217055632D+02-0.5191110639202D+02-0.5191002931255D+02 +-0.5190893916069D+02-0.5190783577729D+02-0.5190671900126D+02-0.5190558866954D+02 +-0.5190444461705D+02-0.5190328667673D+02-0.5190211467945D+02-0.5190092845399D+02 +-0.5189972782709D+02-0.5189851262330D+02-0.5189728266508D+02-0.5189603777267D+02 +-0.5189477776415D+02-0.5189350245533D+02-0.5189221165981D+02-0.5189090518885D+02 +-0.5188958285145D+02-0.5188824445423D+02-0.5188688980147D+02-0.5188551869503D+02 +-0.5188413093435D+02-0.5188272631641D+02-0.5188130463569D+02-0.5187986568418D+02 +-0.5187840925129D+02-0.5187693512386D+02-0.5187544308611D+02-0.5187393291962D+02 +-0.5187240440329D+02-0.5187085731330D+02-0.5186929142309D+02-0.5186770650332D+02 +-0.5186610232183D+02-0.5186447864362D+02-0.5186283523081D+02-0.5186117184259D+02 +-0.5185948823518D+02-0.5185778416183D+02-0.5185605937277D+02-0.5185431361514D+02 +-0.5185254663297D+02-0.5185075816718D+02-0.5184894795548D+02-0.5184711573237D+02 +-0.5184526122909D+02-0.5184338417356D+02-0.5184148429039D+02-0.5183956130079D+02 +-0.5183761492255D+02-0.5183564486998D+02-0.5183365085389D+02-0.5183163258155D+02 +-0.5182958975660D+02-0.5182752207907D+02-0.5182542924529D+02-0.5182331094785D+02 +-0.5182116687559D+02-0.5181899671350D+02-0.5181680014270D+02-0.5181457684041D+02 +-0.5181232647986D+02-0.5181004873028D+02-0.5180774325683D+02-0.5180540972054D+02 +-0.5180304777830D+02-0.5180065708277D+02-0.5179823728232D+02-0.5179578802103D+02 +-0.5179330893860D+02-0.5179079967027D+02-0.5178825984684D+02-0.5178568909453D+02 +-0.5178308703501D+02-0.5178045328526D+02-0.5177778745757D+02-0.5177508915948D+02 +-0.5177235799366D+02-0.5176959355795D+02-0.5176679544522D+02-0.5176396324334D+02 +-0.5176109653512D+02-0.5175819489823D+02-0.5175525790517D+02-0.5175228512318D+02 +-0.5174927611419D+02-0.5174623043474D+02-0.5174314763592D+02-0.5174002726332D+02 +-0.5173686885694D+02-0.5173367195115D+02-0.5173043607457D+02-0.5172716075006D+02 +-0.5172384549462D+02-0.5172048981932D+02-0.5171709322923D+02-0.5171365522335D+02 +-0.5171017529452D+02-0.5170665292940D+02-0.5170308760833D+02-0.5169947880525D+02 +-0.5169582598771D+02-0.5169212861671D+02-0.5168838614662D+02-0.5168459802518D+02 +-0.5168076369333D+02-0.5167688258518D+02-0.5167295412791D+02-0.5166897774168D+02 +-0.5166495283960D+02-0.5166087882755D+02-0.5165675510418D+02-0.5165258106080D+02 +-0.5164835608125D+02-0.5164407954186D+02-0.5163975081138D+02-0.5163536925080D+02 +-0.5163093421337D+02-0.5162644504442D+02-0.5162190108131D+02-0.5161730165335D+02 +-0.5161264608164D+02-0.5160793367906D+02-0.5160316375011D+02-0.5159833559084D+02 +-0.5159344848875D+02-0.5158850172268D+02-0.5158349456272D+02-0.5157842627009D+02 +-0.5157329609709D+02-0.5156810328692D+02-0.5156284707365D+02-0.5155752668206D+02 +-0.5155214132756D+02-0.5154669021608D+02-0.5154117254396D+02-0.5153558749786D+02 +-0.5152993425461D+02-0.5152421198113D+02-0.5151841983433D+02-0.5151255696093D+02 +-0.5150662249744D+02-0.5150061557002D+02-0.5149453529428D+02-0.5148838077528D+02 +-0.5148215110737D+02-0.5147584537403D+02-0.5146946264782D+02-0.5146300199022D+02 +-0.5145646245151D+02-0.5144984307067D+02-0.5144314287525D+02-0.5143636088122D+02 +-0.5142949609291D+02-0.5142254750281D+02-0.5141551409151D+02-0.5140839482753D+02 +-0.5140118866721D+02-0.5139389455459D+02-0.5138651142128D+02-0.5137903818632D+02 +-0.5137147375605D+02-0.5136381702401D+02-0.5135606687078D+02-0.5134822216388D+02 +-0.5134028175756D+02-0.5133224449278D+02-0.5132410919702D+02-0.5131587468413D+02 +-0.5130753975423D+02-0.5129910319357D+02-0.5129056377438D+02-0.5128192025477D+02 +-0.5127317137854D+02-0.5126431587514D+02-0.5125535245940D+02-0.5124627983153D+02 +-0.5123709667690D+02-0.5122780166596D+02-0.5121839345403D+02-0.5120887068125D+02 +-0.5119923197240D+02-0.5118947593678D+02-0.5117960116805D+02-0.5116960624416D+02 +-0.5115948972712D+02-0.5114925016296D+02-0.5113888608154D+02-0.5112839599644D+02 +-0.5111777840483D+02-0.5110703178733D+02-0.5109615460788D+02-0.5108514531363D+02 +-0.5107400233480D+02-0.5106272408452D+02-0.5105130895877D+02-0.5103975533619D+02 +-0.5102806157801D+02-0.5101622602790D+02-0.5100424701185D+02-0.5099212283803D+02 +-0.5097985179674D+02-0.5096743216021D+02-0.5095486218256D+02-0.5094214009961D+02 +-0.5092926412887D+02-0.5091623246932D+02-0.5090304330139D+02-0.5088969478681D+02 +-0.5087618506855D+02-0.5086251227064D+02-0.5084867449820D+02-0.5083466983722D+02 +-0.5082049635455D+02-0.5080615209778D+02-0.5079163509518D+02-0.5077694335558D+02 +-0.5076207486834D+02-0.5074702760324D+02-0.5073179951042D+02-0.5071638852033D+02 +-0.5070079254364D+02-0.5068500947122D+02-0.5066903717403D+02-0.5065287350315D+02 +-0.5063651628963D+02-0.5061996334457D+02-0.5060321245898D+02-0.5058626140382D+02 +-0.5056910792994D+02-0.5055174976809D+02-0.5053418462884D+02-0.5051641020267D+02 +-0.5049842415989D+02-0.5048022415067D+02-0.5046180780505D+02-0.5044317273295D+02 +-0.5042431652422D+02-0.5040523674861D+02-0.5038593095586D+02-0.5036639667573D+02 +-0.5034663141803D+02-0.5032663267268D+02-0.5030639790981D+02-0.5028592457977D+02 +-0.5026521011328D+02-0.5024425192145D+02-0.5022304739591D+02-0.5020159390892D+02 +-0.5017988881346D+02-0.5015792944334D+02-0.5013571311336D+02-0.5011323711944D+02 +-0.5009049873873D+02-0.5006749522980D+02-0.5004422383280D+02-0.5002068176959D+02 +-0.4999686624397D+02-0.4997277444186D+02-0.4994840353146D+02-0.4992375066350D+02 +-0.4989881297144D+02-0.4987358757171D+02-0.4984807156389D+02-0.4982226203106D+02 +-0.4979615603991D+02-0.4976975064117D+02-0.4974304286974D+02-0.4971602974502D+02 +-0.4968870827126D+02-0.4966107543776D+02-0.4963312821924D+02-0.4960486357616D+02 +-0.4957627845502D+02-0.4954736978871D+02-0.4951813449683D+02-0.4948856948612D+02 +-0.4945867165071D+02-0.4942843787257D+02-0.4939786502185D+02-0.4936694995729D+02 +-0.4933568952659D+02-0.4930408056681D+02-0.4927211990478D+02-0.4923980435752D+02 +-0.4920713073265D+02-0.4917409582880D+02-0.4914069643607D+02-0.4910692933642D+02 +-0.4907279130416D+02-0.4903827910633D+02-0.4900338950319D+02-0.4896811924867D+02 +-0.4893246509079D+02-0.4889642377211D+02-0.4885999203021D+02-0.4882316659813D+02 +-0.4878594420482D+02-0.4874832157556D+02-0.4871029543247D+02-0.4867186249491D+02 +-0.4863301947995D+02-0.4859376310277D+02-0.4855409007715D+02-0.4851399711583D+02 +-0.4847348093100D+02-0.4843253823466D+02-0.4839116573905D+02-0.4834936015704D+02 +-0.4830711820251D+02-0.4826443659074D+02-0.4822131203876D+02-0.4817774126566D+02 +-0.4813372099301D+02-0.4808924794511D+02-0.4804431884930D+02-0.4799893043625D+02 +-0.4795307944023D+02-0.4790676259938D+02-0.4785997665588D+02-0.4781271835619D+02 +-0.4776498445124D+02-0.4771677169657D+02-0.4766807685247D+02-0.4761889668409D+02 +-0.4756922796153D+02-0.4751906745988D+02-0.4746841195927D+02-0.4741725824487D+02 +-0.4736560310686D+02-0.4731344334036D+02-0.4726077574537D+02-0.4720759712663D+02 +-0.4715390429349D+02-0.4709969405976D+02-0.4704496324345D+02-0.4698970866656D+02 +-0.4693392715482D+02-0.4687761553742D+02-0.4682077064661D+02-0.4676338931742D+02 +-0.4670546838725D+02-0.4664700469545D+02-0.4658799508292D+02-0.4652843639162D+02 +-0.4646832546412D+02-0.4640765914308D+02-0.4634643427075D+02-0.4628464768840D+02 +-0.4622229623583D+02-0.4615937675077D+02-0.4609588606835D+02-0.4603182102046D+02 +-0.4596717843531D+02-0.4590195513672D+02-0.4583614794369D+02-0.4576975366979D+02 +-0.4570276912265D+02-0.4563519110351D+02-0.4556701640665D+02-0.4549824181908D+02 +-0.4542886412007D+02-0.4535888008084D+02-0.4528828646428D+02-0.4521708002473D+02 +-0.4514525750785D+02-0.4507281565054D+02-0.4499975118097D+02-0.4492606081870D+02 +-0.4485174127497D+02-0.4477678925295D+02-0.4470120144833D+02-0.4462497454985D+02 +-0.4454810524011D+02-0.4447059019649D+02-0.4439242609219D+02-0.4431360959758D+02 +-0.4423413738159D+02-0.4415400611337D+02-0.4407321246418D+02-0.4399175310947D+02 +-0.4390962473114D+02-0.4382682402010D+02-0.4374334767908D+02-0.4365919242563D+02 +-0.4357435499539D+02-0.4348883214570D+02-0.4340262065933D+02-0.4331571734857D+02 +-0.4322811905962D+02-0.4313982267710D+02-0.4305082512897D+02-0.4296112339160D+02 +-0.4287071449512D+02-0.4277959552900D+02-0.4268776364786D+02-0.4259521607738D+02 +-0.4250195012053D+02-0.4240796316384D+02-0.4231325268378D+02-0.4221781625326D+02 +-0.4212165154821D+02-0.4202475635403D+02-0.4192712857207D+02-0.4182876622603D+02 +-0.4172966746809D+02-0.4162983058491D+02-0.4152925400326D+02-0.4142793629535D+02 +-0.4132587618362D+02-0.4122307254514D+02-0.4111952441526D+02-0.4101523099069D+02 +-0.4091019163177D+02-0.4080440586392D+02-0.4069787337814D+02-0.4059059403052D+02 +-0.4048256784069D+02-0.4037379498919D+02-0.4026427581359D+02-0.4015401080347D+02 +-0.4004300059408D+02-0.3993124595881D+02-0.3981874780047D+02-0.3970550714118D+02 +-0.3959152511128D+02-0.3947680293704D+02-0.3936134192738D+02-0.3924514345974D+02 +-0.3912820896514D+02-0.3901053991273D+02-0.3889213779388D+02-0.3877300410616D+02 +-0.3865314033730D+02-0.3853254794941D+02-0.3841122836384D+02-0.3828918294671D+02 +-0.3816641299561D+02-0.3804291972752D+02-0.3791870426838D+02-0.3779376764439D+02 +-0.3766811077544D+02-0.3754173447071D+02-0.3741463942662D+02-0.3728682622747D+02 +-0.3715829534855D+02-0.3702904716206D+02-0.3689908194568D+02-0.3676839989389D+02 +-0.3663700113198D+02-0.3650488573242D+02-0.3637205373385D+02-0.3623850516215D+02 +-0.3610424005352D+02-0.3596925847947D+02-0.3583356057318D+02-0.3569714655716D+02 +-0.3556001677183D+02-0.3542217170480D+02-0.3528361202035D+02-0.3514433858906D+02 +-0.3500435251706D+02-0.3486365517474D+02-0.3472224822457D+02-0.3458013364781D+02 +-0.3443731376977D+02-0.3429379128348D+02-0.3414956927154D+02-0.3400465122587D+02 +-0.3385904106531D+02-0.3371274315081D+02-0.3356576229817D+02-0.3341810378823D+02 +-0.3326977337430D+02-0.3312077728689D+02-0.3297112223571D+02-0.3282081540879D+02 +-0.3266986446883D+02-0.3251827754673D+02-0.3236606323235D+02-0.3221323056253D+02 +-0.3205978900636D+02-0.3190574844798D+02-0.3175111916665D+02-0.3159591181450D+02 +-0.3144013739192D+02-0.3128380722060D+02-0.3112693291460D+02-0.3096952634939D+02 +-0.3081159962896D+02-0.3065316505139D+02-0.3049423507279D+02-0.3033482226994D+02 +-0.3017493930171D+02-0.3001459886954D+02-0.2985381367711D+02-0.2969259638940D+02 +-0.2953095959141D+02-0.2936891574677D+02-0.2920647715631D+02-0.2904365591713D+02 +-0.2888046388202D+02-0.2871691261992D+02-0.2855301337730D+02-0.2838877704096D+02 +-0.2822421410237D+02-0.2805933462405D+02-0.2789414820796D+02-0.2772866396645D+02 +-0.2756289049588D+02-0.2739683585338D+02-0.2723050753680D+02-0.2706391246838D+02 +-0.2689705698223D+02-0.2672994681603D+02-0.2656258710714D+02-0.2639498239345D+02 +-0.2622713661917D+02-0.2605905314574D+02-0.2589073476829D+02-0.2572218373759D+02 +-0.2555340178776D+02-0.2538439017000D+02-0.2521514969218D+02-0.2504568076457D+02 +-0.2487598345161D+02-0.2470605752972D+02-0.2453590255090D+02-0.2436551791213D+02 +-0.2419490293015D+02-0.2402405692122D+02-0.2385297928550D+02-0.2368166959536D+02 +-0.2351012768684D+02-0.2333835375355D+02-0.2316634844181D+02-0.2299411294593D+02 +-0.2282164910224D+02-0.2264895948042D+02-0.2247604747020D+02-0.2230291736187D+02 +-0.2212957441833D+02-0.2195602493665D+02-0.2178227629680D+02-0.2160833699531D+02 +-0.2143421666157D+02-0.2125992605447D+02-0.2108547703736D+02-0.2091088252957D+02 +-0.2073615643311D+02-0.2056131353347D+02-0.2038636937454D+02-0.2021134010787D+02 +-0.2003624231780D+02-0.1986109282464D+02-0.1968590846923D+02-0.1951070588338D+02 +-0.1933550125113D+02-0.1916031006739D+02-0.1898514690054D+02-0.1881002516654D+02 +-0.1863495692195D+02-0.1845995268332D+02-0.1828502127992D+02-0.1811016974578D+02 +-0.1793540325598D+02-0.1776072511080D+02-0.1758613676940D+02-0.1741163793327D+02 +-0.1723722667775D+02-0.1706289962834D+02-0.1688865217702D+02-0.1671447873257D+02 +-0.1654037299789D+02-0.1636632826691D+02-0.1619233773325D+02-0.1601839480315D+02 +-0.1584449340510D+02-0.1567062828984D+02-0.1549679531468D+02-0.1532299170720D+02 +-0.1514921630451D+02-0.1497546976480D+02-0.1480175474939D+02-0.1462807607400D+02 +-0.1445444082871D+02-0.1428085846710D+02-0.1410734086517D+02-0.1393390235146D+02 +-0.1376055970989D+02-0.1358733215727D+02-0.1341424129731D+02-0.1324131105355D+02 +-0.1306856758305D+02-0.1289603917318D+02-0.1272375612351D+02-0.1255175061484D+02 +-0.1238005656736D+02-0.1220870948967D+02-0.1203774632043D+02-0.1186720526422D+02 +-0.1169712562320D+02-0.1152754762583D+02-0.1135851225403D+02-0.1119006106993D+02 +-0.1102223604329D+02-0.1085507938069D+02-0.1068863335731D+02-0.1052294015218D+02 +-0.1035804168776D+02-0.1019397947446D+02-0.1003079446077D+02-0.9868526889628D+01 +-0.9707216161554D+01-0.9546900704939D+01-0.9387617854023D+01-0.9229403734858D+01 +-0.9072293159592D+01-0.8916319529363D+01-0.8761514745993D+01-0.8607909132693D+01 +-0.8455531363896D+01-0.8304408404305D+01-0.8154565457227D+01-0.8006025922166D+01 +-0.7858811361682D+01-0.7712941477416D+01-0.7568434095199D+01-0.7425305159081D+01 +-0.7283568734134D+01-0.7143237017788D+01-0.7004320359504D+01-0.6866827288485D+01 +-0.6730764549154D+01-0.6596137144079D+01-0.6462948384000D+01-0.6331199944618D+01 +-0.6200891929738D+01-0.6072022940407D+01-0.5944590149603D+01-0.5818589382077D+01 +-0.5694015198898D+01-0.5570860986265D+01-0.5449119048124D+01-0.5328780702141D+01 +-0.5209836378552D+01-0.5092275721431D+01-0.4976087691897D+01-0.4861260672787D+01 +-0.4747782574321D+01-0.4635640940271D+01-0.4524823054180D+01-0.4415316045125D+01 +-0.4307106992579D+01-0.4200183029885D+01-0.4094531445869D+01-0.3990139784139D+01 +-0.3886995939600D+01-0.3785088251726D+01-0.3684405594148D+01-0.3584937460106D+01 +-0.3486674043348D+01-0.3389606314047D+01-0.3293726089348D+01-0.3199026098161D+01 +-0.3105500039868D+01-0.3013142636618D+01-0.2921949678952D+01-0.2831918064533D+01 +-0.2743045829849D+01-0.2655332174788D+01-0.2568777480092D+01-0.2483383317815D+01 +-0.2399152454962D+01-0.2316088850658D+01-0.2234197647300D+01-0.2153485156272D+01 +-0.2073958838965D+01-0.1995627283965D+01-0.1918500181413D+01-0.1842588295670D+01 +-0.1767903437522D+01-0.1694458437274D+01-0.1622267120110D+01-0.1551344285168D+01 +-0.1481705689753D+01-0.1413368040087D+01-0.1346348989896D+01-0.1280667148051D+01 +-0.1216342096293D+01-0.1153394417906D+01-0.1091845737986D+01-0.1031718775725D+01 +-0.9730374088849D+00-0.9158267504133D+00-0.8601132368937D+00-0.8059247283301D+00 +-0.7532906185600D+00-0.7022419554295D+00-0.6528115697324D+00-0.6050342118170D+00 +-0.5589466947046D+00-0.5145880425354D+00-0.4719996431596D+00-0.4312254037239D+00 +-0.3923119081554D+00-0.3553085755132D+00-0.3202678182603D+00-0.2872451996103D+00 +-0.2562993012896D+00 + 0.0000000000000D+00 + 1012 0.5229258479779D+01 + 0.2150742905406D-04 0.2201934401975D-04 0.2254344131081D-04 0.2308001074793D-04 + 0.2362934904336D-04 0.2419175996469D-04 0.2476755450247D-04 0.2535705104185D-04 + 0.2596057553829D-04 0.2657846169737D-04 0.2721105115901D-04 0.2785869368592D-04 + 0.2852174735659D-04 0.2920057876285D-04 0.2989556321214D-04 0.3060708493450D-04 + 0.3133553729459D-04 0.3208132300862D-04 0.3284485436652D-04 0.3362655345933D-04 + 0.3442685241199D-04 0.3524619362168D-04 0.3608503000175D-04 0.3694382523153D-04 + 0.3782305401197D-04 0.3872320232740D-04 0.3964476771351D-04 0.4058825953159D-04 + 0.4155419924941D-04 0.4254312072866D-04 0.4355557051923D-04 0.4459210816046D-04 + 0.4565330648961D-04 0.4673975195749D-04 0.4785204495171D-04 0.4899080012754D-04 + 0.5015664674660D-04 0.5135022902361D-04 0.5257220648130D-04 0.5382325431382D-04 + 0.5510406375867D-04 0.5641534247751D-04 0.5775781494596D-04 0.5913222285265D-04 + 0.6053932550771D-04 0.6197990026094D-04 0.6345474292991D-04 0.6496466823815D-04 + 0.6651051026378D-04 0.6809312289875D-04 0.6971338031887D-04 0.7137217746513D-04 + 0.7307043053626D-04 0.7480907749308D-04 0.7658907857468D-04 0.7841141682692D-04 + 0.8027709864336D-04 0.8218715431905D-04 0.8414263861740D-04 0.8614463135050D-04 + 0.8819423797310D-04 0.9029259019072D-04 0.9244084658213D-04 0.9464019323656D-04 + 0.9689184440594D-04 0.9919704317265D-04 0.1015570621330D-03 0.1039732040969D-03 + 0.1064468028041D-03 0.1089792236573D-03 0.1115718644728D-03 0.1142261562483D-03 + 0.1169435639500D-03 0.1197255873171D-03 0.1225737616857D-03 0.1254896588328D-03 + 0.1284748878395D-03 0.1315310959746D-03 0.1346599695998D-03 0.1378632350954D-03 + 0.1411426598085D-03 0.1445000530233D-03 0.1479372669546D-03 0.1514561977641D-03 + 0.1550587866019D-03 0.1587470206711D-03 0.1625229343189D-03 0.1663886101524D-03 + 0.1703461801815D-03 0.1743978269887D-03 0.1785457849256D-03 0.1827923413391D-03 + 0.1871398378251D-03 0.1915906715131D-03 0.1961472963799D-03 0.2008122245952D-03 + 0.2055880278984D-03 0.2104773390081D-03 0.2154828530649D-03 0.2206073291079D-03 + 0.2258535915864D-03 0.2312245319072D-03 0.2367231100177D-03 0.2423523560273D-03 + 0.2481153718665D-03 0.2540153329849D-03 0.2600554900897D-03 0.2662391709247D-03 + 0.2725697820915D-03 0.2790508109132D-03 0.2856858273428D-03 0.2924784859153D-03 + 0.2994325277470D-03 0.3065517825810D-03 0.3138401708812D-03 0.3213017059753D-03 + 0.3289404962488D-03 0.3367607473897D-03 0.3447667646870D-03 0.3529629553823D-03 + 0.3613538310777D-03 0.3699440101989D-03 0.3787382205180D-03 0.3877413017338D-03 + 0.3969582081140D-03 0.4063940111991D-03 0.4160539025692D-03 0.4259431966769D-03 + 0.4360673337456D-03 0.4464318827368D-03 0.4570425443864D-03 0.4679051543124D-03 + 0.4790256861959D-03 0.4904102550358D-03 0.5020651204812D-03 0.5139966902408D-03 + 0.5262115235724D-03 0.5387163348549D-03 0.5515179972435D-03 0.5646235464104D-03 + 0.5780401843732D-03 0.5917752834137D-03 0.6058363900874D-03 0.6202312293275D-03 + 0.6349677086450D-03 0.6500539224267D-03 0.6654981563344D-03 0.6813088918062D-03 + 0.6974948106637D-03 0.7140647998269D-03 0.7310279561389D-03 0.7483935913040D-03 + 0.7661712369406D-03 0.7843706497523D-03 0.8030018168203D-03 0.8220749610184D-03 + 0.8416005465556D-03 0.8615892846469D-03 0.8820521393172D-03 0.9030003333406D-03 + 0.9244453543176D-03 0.9463989608946D-03 0.9688731891282D-03 0.9918803589975D-03 + 0.1015433081069D-02 0.1039544263315D-02 0.1064227118095D-02 0.1089495169290D-02 + 0.1115362259619D-02 0.1141842558105D-02 0.1168950567737D-02 0.1196701133289D-02 + 0.1225109449338D-02 0.1254191068456D-02 0.1283961909601D-02 0.1314438266696D-02 + 0.1345636817413D-02 0.1377574632157D-02 0.1410269183260D-02 0.1443738354387D-02 + 0.1478000450161D-02 0.1513074206015D-02 0.1548978798262D-02 0.1585733854409D-02 + 0.1623359463706D-02 0.1661876187936D-02 0.1701305072458D-02 0.1741667657505D-02 + 0.1782985989747D-02 0.1825282634108D-02 0.1868580685877D-02 0.1912903783076D-02 + 0.1958276119133D-02 0.2004722455835D-02 0.2052268136585D-02 0.2100939099962D-02 + 0.2150761893598D-02 0.2201763688371D-02 0.2253972292925D-02 0.2307416168524D-02 + 0.2362124444253D-02 0.2418126932561D-02 0.2475454145167D-02 0.2534137309329D-02 + 0.2594208384486D-02 0.2655700079287D-02 0.2718645869002D-02 0.2783080013344D-02 + 0.2849037574687D-02 0.2916554436715D-02 0.2985667323484D-02 0.3056413818931D-02 + 0.3128832386828D-02 0.3202962391187D-02 0.3278844117136D-02 0.3356518792272D-02 + 0.3436028608501D-02 0.3517416744371D-02 0.3600727387929D-02 0.3686005760082D-02 + 0.3773298138499D-02 0.3862651882061D-02 0.3954115455860D-02 0.4047738456768D-02 + 0.4143571639594D-02 0.4241666943825D-02 0.4342077520985D-02 0.4444857762604D-02 + 0.4550063328833D-02 0.4657751177697D-02 0.4767979595018D-02 0.4880808225009D-02 + 0.4996298101570D-02 0.5114511680279D-02 0.5235512871115D-02 0.5359367071918D-02 + 0.5486141202598D-02 0.5615903740128D-02 0.5748724754308D-02 0.5884675944352D-02 + 0.6023830676284D-02 0.6166264021183D-02 0.6312052794284D-02 0.6461275594959D-02 + 0.6614012847588D-02 0.6770346843357D-02 0.6930361782982D-02 0.7094143820394D-02 + 0.7261781107400D-02 0.7433363839342D-02 0.7608984301773D-02 0.7788736918176D-02 + 0.7972718298747D-02 0.8161027290261D-02 0.8353765027049D-02 0.8551034983111D-02 + 0.8752943025377D-02 0.8959597468160D-02 0.9171109128811D-02 0.9387591384603D-02 + 0.9609160230877D-02 0.9835934340477D-02 0.1006803512449D-01 0.1030558679431D-01 + 0.1054871642512D-01 0.1079755402073D-01 0.1105223257982D-01 0.1131288816368D-01 + 0.1157965996544D-01 0.1185269038080D-01 0.1213212508026D-01 0.1241811308303D-01 + 0.1271080683248D-01 0.1301036227325D-01 0.1331693893004D-01 0.1363069998813D-01 + 0.1395181237567D-01 0.1428044684765D-01 0.1461677807184D-01 0.1496098471648D-01 + 0.1531324953990D-01 0.1567375948211D-01 0.1604270575828D-01 0.1642028395434D-01 + 0.1680669412453D-01 0.1720214089116D-01 0.1760683354637D-01 0.1802098615621D-01 + 0.1844481766683D-01 0.1887855201303D-01 0.1932241822902D-01 0.1977665056168D-01 + 0.2024148858606D-01 0.2071717732349D-01 0.2120396736203D-01 0.2170211497964D-01 + 0.2221188226980D-01 0.2273353726988D-01 0.2326735409215D-01 0.2381361305754D-01 + 0.2437260083229D-01 0.2494461056731D-01 0.2552994204062D-01 0.2612890180262D-01 + 0.2674180332442D-01 0.2736896714935D-01 0.2801072104743D-01 0.2866740017320D-01 + 0.2933934722669D-01 0.3002691261781D-01 0.3073045463399D-01 0.3145033961141D-01 + 0.3218694210958D-01 0.3294064508962D-01 0.3371184009606D-01 0.3450092744243D-01 + 0.3530831640054D-01 0.3613442539362D-01 0.3697968219334D-01 0.3784452412086D-01 + 0.3872939825181D-01 0.3963476162544D-01 0.4056108145796D-01 0.4150883536008D-01 + 0.4247851155891D-01 0.4347060912422D-01 0.4448563819924D-01 0.4552412023590D-01 + 0.4658658823475D-01 0.4767358698962D-01 0.4878567333696D-01 0.4992341641008D-01 + 0.5108739789835D-01 0.5227821231135D-01 0.5349646724813D-01 0.5474278367169D-01 + 0.5601779618862D-01 0.5732215333417D-01 0.5865651786266D-01 0.6002156704340D-01 + 0.6141799296226D-01 0.6284650282880D-01 0.6430781928923D-01 0.6580268074515D-01 + 0.6733184167825D-01 0.6889607298100D-01 0.7049616229337D-01 0.7213291434581D-01 + 0.7380715130845D-01 0.7551971314661D-01 0.7727145798277D-01 0.7906326246509D-01 + 0.8089602214242D-01 0.8277065184608D-01 0.8468808607842D-01 0.8664927940812D-01 + 0.8865520687255D-01 0.9070686438707D-01 0.9280526916144D-01 0.9495146012343D-01 + 0.9714649834967D-01 0.9939146750384D-01 0.1016874742823D+00 0.1040356488672D+00 + 0.1064371453872D+00 0.1088931423856D+00 0.1114048432967D+00 0.1139734769295D+00 + 0.1166002979593D+00 0.1192865874273D+00 0.1220336532487D+00 0.1248428307276D+00 + 0.1277154830815D+00 0.1306530019730D+00 0.1336568080498D+00 0.1367283514936D+00 + 0.1398691125766D+00 0.1430806022269D+00 0.1463643626021D+00 0.1497219676713D+00 + 0.1531550238057D+00 0.1566651703780D+00 0.1602540803695D+00 0.1639234609870D+00 + 0.1676750542871D+00 0.1715106378098D+00 0.1754320252209D+00 0.1794410669619D+00 + 0.1835396509100D+00 0.1877297030455D+00 0.1920131881282D+00 0.1963921103827D+00 + 0.2008685141914D+00 0.2054444847966D+00 0.2101221490109D+00 0.2149036759359D+00 + 0.2197912776889D+00 0.2247872101386D+00 0.2298937736476D+00 0.2351133138248D+00 + 0.2404482222837D+00 0.2459009374100D+00 0.2514739451362D+00 0.2571697797240D+00 + 0.2629910245536D+00 0.2689403129212D+00 0.2750203288421D+00 0.2812338078623D+00 + 0.2875835378751D+00 0.2940723599454D+00 0.3007031691395D+00 0.3074789153608D+00 + 0.3144026041916D+00 0.3214772977396D+00 0.3287061154899D+00 0.3360922351618D+00 + 0.3436388935694D+00 0.3513493874868D+00 0.3592270745164D+00 0.3672753739607D+00 + 0.3754977676972D+00 0.3838978010545D+00 0.3924790836915D+00 0.4012452904770D+00 + 0.4102001623706D+00 0.4193475073036D+00 0.4286912010595D+00 0.4382351881538D+00 + 0.4479834827120D+00 0.4579401693452D+00 0.4681094040228D+00 0.4784954149418D+00 + 0.4891025033910D+00 0.4999350446102D+00 0.5109974886435D+00 0.5222943611853D+00 + 0.5338302644183D+00 0.5456098778426D+00 0.5576379590956D+00 0.5699193447601D+00 + 0.5824589511607D+00 0.5952617751475D+00 0.6083328948654D+00 0.6216774705074D+00 + 0.6353007450521D+00 0.6492080449824D+00 0.6634047809857D+00 0.6778964486325D+00 + 0.6926886290333D+00 0.7077869894721D+00 0.7231972840138D+00 0.7389253540860D+00 + 0.7549771290311D+00 0.7713586266289D+00 0.7880759535873D+00 0.8051353059985D+00 + 0.8225429697604D+00 0.8403053209599D+00 0.8584288262158D+00 0.8769200429817D+00 + 0.8957856198031D+00 0.9150322965294D+00 0.9346669044774D+00 0.9546963665439D+00 + 0.9751276972649D+00 0.9959680028197D+00 0.1017224480976D+01 0.1038904420974D+01 + 0.1061015203349D+01 0.1083564299686D+01 0.1106559272300D+01 0.1130007773859D+01 + 0.1153917546912D+01 0.1178296423354D+01 0.1203152323804D+01 0.1228493256899D+01 + 0.1254327318495D+01 0.1280662690787D+01 0.1307507641324D+01 0.1334870521934D+01 + 0.1362759767535D+01 0.1391183894856D+01 0.1420151501035D+01 0.1449671262109D+01 + 0.1479751931386D+01 0.1510402337698D+01 0.1541631383520D+01 0.1573448042969D+01 + 0.1605861359662D+01 0.1638880444440D+01 0.1672514472946D+01 0.1706772683055D+01 + 0.1741664372155D+01 0.1777198894269D+01 0.1813385657016D+01 0.1850234118409D+01 + 0.1887753783475D+01 0.1925954200705D+01 0.1964844958324D+01 0.2004435680370D+01 + 0.2044736022586D+01 0.2085755668115D+01 0.2127504322996D+01 0.2169991711448D+01 + 0.2213227570952D+01 0.2257221647108D+01 0.2301983688271D+01 0.2347523439972D+01 + 0.2393850639086D+01 0.2440975007782D+01 0.2488906247220D+01 0.2537654031002D+01 + 0.2587227998372D+01 0.2637637747157D+01 0.2688892826442D+01 0.2741002728983D+01 + 0.2793976883341D+01 0.2847824645743D+01 0.2902555291652D+01 0.2958178007063D+01 + 0.3014701879494D+01 0.3072135888684D+01 0.3130488897001D+01 0.3189769639525D+01 + 0.3249986713841D+01 0.3311148569513D+01 0.3373263497233D+01 0.3436339617667D+01 + 0.3500384869964D+01 0.3565406999951D+01 0.3631413547991D+01 0.3698411836514D+01 + 0.3766408957221D+01 0.3835411757947D+01 0.3905426829193D+01 0.3976460490322D+01 + 0.4048518775419D+01 0.4121607418815D+01 0.4195731840277D+01 0.4270897129857D+01 + 0.4347108032420D+01 0.4424368931831D+01 0.4502683834816D+01 0.4582056354503D+01 + 0.4662489693636D+01 0.4743986627475D+01 0.4826549486387D+01 0.4910180138127D+01 + 0.4994879969825D+01 0.5080649869681D+01 0.5167490208373D+01 0.5255400820202D+01 + 0.5344380983962D+01 0.5434429403565D+01 0.5525544188426D+01 0.5617722833617D+01 + 0.5710962199815D+01 0.5805258493041D+01 0.5900607244231D+01 0.5997003288635D+01 + 0.6094440745069D+01 0.6192912995049D+01 0.6292412661814D+01 0.6392931589269D+01 + 0.6494460820874D+01 0.6596990578488D+01 0.6700510241224D+01 0.6805008324307D+01 + 0.6910472457995D+01 0.7016889366579D+01 0.7124244847491D+01 0.7232523750568D+01 + 0.7341709957494D+01 0.7451786361463D+01 0.7562734847107D+01 0.7674536270712D+01 + 0.7787170440791D+01 0.7900616099026D+01 0.8014850901658D+01 0.8129851401340D+01 + 0.8245593029526D+01 0.8362050079436D+01 0.8479195689649D+01 0.8597001828383D+01 + 0.8715439278509D+01 0.8834477623371D+01 0.8954085233454D+01 0.9074229253973D+01 + 0.9194875593440D+01 0.9315988913276D+01 0.9437532618530D+01 0.9559468849772D+01 + 0.9681758476237D+01 0.9804361090277D+01 0.9927235003199D+01 0.1005033724256D+02 + 0.1017362355101D+02 0.1029704838669D+02 0.1042056492540D+02 0.1054412506444D+02 + 0.1066767942831D+02 0.1079117737637D+02 0.1091456701244D+02 0.1103779519646D+02 + 0.1116080755839D+02 0.1128354851420D+02 0.1140596128432D+02 0.1152798791434D+02 + 0.1164956929827D+02 0.1177064520433D+02 0.1189115430327D+02 0.1201103419951D+02 + 0.1213022146500D+02 0.1224865167586D+02 0.1236625945201D+02 0.1248297849976D+02 + 0.1259874165744D+02 0.1271348094411D+02 0.1282712761148D+02 0.1293961219902D+02 + 0.1305086459240D+02 0.1316081408518D+02 0.1326938944391D+02 0.1337651897664D+02 + 0.1348213060491D+02 0.1358615193909D+02 0.1368851035736D+02 0.1378913308811D+02 + 0.1388794729589D+02 0.1398488017086D+02 0.1407985902179D+02 0.1417281137257D+02 + 0.1426366506212D+02 0.1435234834789D+02 0.1443879001264D+02 0.1452291947466D+02 + 0.1460466690129D+02 0.1468396332564D+02 0.1476074076649D+02 0.1483493235126D+02 + 0.1490647244192D+02 0.1497529676373D+02 0.1504134253675D+02 0.1510454860984D+02 + 0.1516485559720D+02 0.1522220601698D+02 0.1527654443219D+02 0.1532781759325D+02 + 0.1537597458241D+02 0.1542096695946D+02 0.1546274890874D+02 0.1550127738702D+02 + 0.1553651227211D+02 0.1556841651189D+02 0.1559695627334D+02 0.1562210109145D+02 + 0.1564382401753D+02 0.1566210176664D+02 0.1567691486377D+02 0.1568824778841D+02 + 0.1569608911712D+02 0.1570043166360D+02 0.1570127261607D+02 0.1569861367129D+02 + 0.1569246116496D+02 0.1568282619787D+02 0.1566972475757D+02 0.1565317783486D+02 + 0.1563321153475D+02 0.1560985718135D+02 0.1558315141624D+02 0.1555313628970D+02 + 0.1551985934445D+02 0.1548337369123D+02 0.1544373807583D+02 0.1540101693692D+02 + 0.1535528045436D+02 0.1530660458716D+02 0.1525507110098D+02 0.1520076758423D+02 + 0.1514378745267D+02 0.1508422994170D+02 0.1502220008605D+02 0.1495780868635D+02 + 0.1489117226206D+02 0.1482241299046D+02 0.1475165863115D+02 0.1467904243575D+02 + 0.1460470304238D+02 0.1452878435463D+02 0.1445143540465D+02 0.1437281020013D+02 + 0.1429306755483D+02 0.1421237090260D+02 0.1413088809452D+02 0.1404879117925D+02 + 0.1396625616625D+02 0.1388346277207D+02 0.1380059414952D+02 0.1371783659988D+02 + 0.1363537926825D+02 0.1355341382212D+02 0.1347213411351D+02 0.1339173582480D+02 + 0.1331241609871D+02 0.1323437315279D+02 0.1315780587881D+02 0.1308291342766D+02 + 0.1300989478035D+02 0.1293894830568D+02 0.1287027130535D+02 0.1280405954732D+02 + 0.1274050678825D+02 0.1267980428593D+02 0.1262214030269D+02 0.1256769960087D+02 + 0.1251666293145D+02 0.1246920651702D+02 0.1242550153038D+02 0.1238571356999D+02 + 0.1235000213372D+02 0.1231852009235D+02 0.1229141316414D+02 0.1226881939222D+02 + 0.1225086862623D+02 0.1223768200985D+02 0.1222937147599D+02 0.1222603925117D+02 + 0.1222777737106D+02 0.1223466720868D+02 0.1224677901729D+02 0.1226417148958D+02 + 0.1228689133517D+02 0.1231497287802D+02 0.1234843767581D+02 0.1238729416297D+02 + 0.1243153731911D+02 0.1248114836487D+02 0.1253609448665D+02 0.1259632859227D+02 + 0.1266178909890D+02 0.1273239975523D+02 0.1280806949923D+02 0.1288869235315D+02 + 0.1297414735711D+02 0.1306429854274D+02 0.1315899494816D+02 0.1325807067533D+02 + 0.1336134499111D+02 0.1346862247282D+02 0.1357969319917D+02 0.1369433298744D+02 + 0.1381230367740D+02 0.1393335346243D+02 0.1405721726828D+02 0.1418361717951D+02 + 0.1431226291376D+02 0.1444285234362D+02 0.1457507206581D+02 0.1470859801733D+02 + 0.1484309613763D+02 0.1497822307639D+02 0.1511362694548D+02 0.1524894811426D+02 + 0.1538382004666D+02 0.1551787017849D+02 0.1565072083339D+02 0.1578199017530D+02 + 0.1591129319546D+02 0.1603824273170D+02 0.1616245051740D+02 0.1628352825765D+02 + 0.1640108872963D+02 0.1651474690448D+02 0.1662412108723D+02 0.1672883407174D+02 + 0.1682851430716D+02 0.1692279707220D+02 0.1701132565381D+02 0.1709375252614D+02 + 0.1716974052608D+02 0.1723896402125D+02 0.1730111006644D+02 0.1735587954416D+02 + 0.1740298828530D+02 0.1744216816538D+02 0.1747316817225D+02 0.1749575544089D+02 + 0.1750971625093D+02 0.1751485698260D+02 0.1751100502688D+02 0.1749800964559D+02 + 0.1747574277733D+02 0.1744409978499D+02 0.1740300014123D+02 0.1735238804766D+02 + 0.1729223298439D+02 0.1722253018618D+02 0.1714330104180D+02 0.1705459341368D+02 + 0.1695648187457D+02 0.1684906785873D+02 0.1673247972505D+02 0.1660687272995D+02 + 0.1647242890818D+02 0.1632935685981D+02 0.1617789144222D+02 0.1601829336618D+02 + 0.1585084869528D+02 0.1567586824865D+02 0.1549368690699D+02 0.1530466282265D+02 + 0.1510917653451D+02 0.1490762998916D+02 0.1470044547022D+02 0.1448806443791D+02 + 0.1427094628160D+02 0.1404956698852D+02 0.1382441773199D+02 0.1359600338336D+02 + 0.1336484095192D+02 0.1313145795774D+02 0.1289639074258D+02 0.1266018272468D+02 + 0.1242338260337D+02 0.1218654252002D+02 0.1195021618209D+02 0.1171495695744D+02 + 0.1148131594627D+02 0.1124984003849D+02 0.1102106996440D+02 0.1079553834688D+02 + 0.1057376776347D+02 0.1035626882667D+02 0.1014353829125D+02 0.9936057196884D+01 + 0.9734289054994D+01 0.9538678088120D+01 0.9349647530399D+01 0.9167597997384D+01 + 0.8992905933301D+01 0.8825922143594D+01 0.8666970420224D+01 0.8516346266999D+01 + 0.8374315731611D+01 0.8241114350747D+01 0.8116946214096D+01 0.8001983152570D+01 + 0.7896364055459D+01 0.7800194320670D+01 0.7713545441561D+01 0.7636454733225D+01 + 0.7568925200401D+01 0.7510925548528D+01 0.7462390338698D+01 0.7423220286625D+01 + 0.7393282704950D+01 0.7372412087556D+01 0.7360410833787D+01 0.7357050109802D+01 + 0.7362070843542D+01 0.7375184849138D+01 0.7396076075866D+01 0.7424401976120D+01 + 0.7459794986211D+01 0.7501864113185D+01 0.7550196620265D+01 0.7604359802945D+01 + 0.7663902847256D+01 0.7728358761219D+01 0.7797246370063D+01 0.7870072365405D+01 + 0.7946333398216D+01 0.8025518205140D+01 0.8107109757504D+01 0.8190587422172D+01 + 0.8275429123337D+01 0.8361113494303D+01 0.8447122008353D+01 0.8532941077928D+01 + 0.8618064111536D+01 0.8701993518075D+01 0.8784242648578D+01 0.8864337665829D+01 + 0.8941819332731D+01 0.9016244710878D+01 0.9087188761372D+01 0.9154245840560D+01 + 0.9217031084099D+01 0.9275181673474D+01 0.9328357979881D+01 0.9376244581215D+01 + 0.9418551148709D+01 0.9455013200639D+01 0.9485392721360D+01 0.9509478644797D+01 + 0.9527087202359D+01 0.9538062136102D+01 0.9542274778747D+01 0.9539624002998D+01 + 0.9530036043300D+01 0.9513464193959D+01 0.9489888388159D+01 0.9459314663078D+01 + 0.9421774516843D+01 0.9377324163609D+01 0.9326043693467D+01 0.9268036144314D+01 + 0.9203426493115D+01 0.9132360574297D+01 0.9055003933175D+01 0.8971540622481D+01 + 0.8882171950151D+01 0.8787115186520D+01 0.8686602239071D+01 0.8580878302773D+01 + 0.8470200493895D+01 0.8354836475027D+01 0.8235063078754D+01 0.8111164937189D+01 + 0.7983433124252D+01 0.7852163817216D+01 0.7717656983696D+01 0.7580215099831D+01 + 0.7440141905014D+01 0.7297741198086D+01 0.7153315679440D+01 0.7007165843079D+01 + 0.6859588922166D+01 0.6710877891167D+01 0.6561320527250D+01 0.6411198533128D+01 + 0.6260786723101D+01 0.6110352273646D+01 0.5960154039458D+01 0.5810441935471D+01 + 0.5661456384987D+01 0.5513427833700D+01 0.5366576329042D+01 0.5221111163955D+01 + 0.5077230583918D+01 0.4935121555751D+01 0.4794959596475D+01 0.4656908660288D+01 + 0.4521121081498D+01 0.4387737571052D+01 0.4256887264186D+01 0.4128687816522D+01 + 0.4003245545873D+01 0.3880655616880D+01 0.3761002265561D+01 0.3644359060777D+01 + 0.3530789199588D+01 0.3420345833472D+01 0.3313072422343D+01 0.3209003113371D+01 + 0.3108163141592D+01 0.3010569249384D+01 0.2916230121919D+01 0.2825146835796D+01 + 0.2737313318133D+01 0.2652716813508D+01 0.2571338356232D+01 0.2493153245580D+01 + 0.2418131521695D+01 0.2346238440047D+01 0.2277434942461D+01 0.2211678122838D+01 + 0.2148921685899D+01 0.2089116397376D+01 0.2032210524266D+01 0.1978150263893D+01 + 0.1926880160684D+01 0.1878343509721D+01 0.1832482746269D+01 0.1789239820638D+01 + 0.1748556557871D+01 0.1710375001879D+01 0.1674637743804D+01 0.1641288234472D+01 + 0.1610271080956D+01 0.1581532327338D+01 0.1555019719890D+01 0.1530682956958D+01 + 0.1508473923914D+01 0.1488346913611D+01 0.1470258832820D+01 0.1454169395155D+01 + 0.1440041301042D+01 0.1427840405245D+01 0.1417535872504D+01 0.1409100321753D+01 + 0.1402509959377D+01 0.1397744701874D+01 0.1394788288181D+01 0.1393628381826D+01 + 0.1394256662892D+01 0.1396668909610D+01 0.1400865069190D+01 0.1406849317222D+01 + 0.1414629369614D+01 0.1424336942263D+01 0.1436096575202D+01 0.1449912447024D+01 + 0.1465794674727D+01 0.1483759333931D+01 0.1503828494539D+01 0.1526030271798D+01 + 0.1550398892649D+01 0.1576974777196D+01 0.1605804635055D+01 0.1636941576215D+01 + 7 1012 + 1 0 -1 -511.89194 + 2 0 -1 -58.90181 + 2 1 1 -50.68932 + 2 1 -2 -49.77537 + 3 0 -1 -5.73317 + 3 1 1 -3.34334 + 3 1 -2 -3.22919 + 0.2122975645015D-04 0.2173507709867D-04 0.2225242316243D-04 0.2278208072829D-04 + 0.2332434268594D-04 0.2387950888954D-04 0.2444788632325D-04 0.2502978927059D-04 + 0.2562553948791D-04 0.2623546638192D-04 0.2685990719144D-04 0.2749920717353D-04 + 0.2815371979393D-04 0.2882380692207D-04 0.2950983903075D-04 0.3021219540050D-04 + 0.3093126432877D-04 0.3166744334418D-04 0.3242113942573D-04 0.3319276922733D-04 + 0.3398275930755D-04 0.3479154636487D-04 0.3561957747857D-04 0.3646731035519D-04 + 0.3733521358096D-04 0.3822376688016D-04 0.3913346137963D-04 0.4006479987955D-04 + 0.4101829713060D-04 0.4199448011777D-04 0.4299388835081D-04 0.4401707416166D-04 + 0.4506460300883D-04 0.4613705378910D-04 0.4723501915650D-04 0.4835910584899D-04 + 0.4950993502270D-04 0.5068814259429D-04 0.5189437959126D-04 0.5312931251066D-04 + 0.5439362368626D-04 0.5568801166444D-04 0.5701319158897D-04 0.5836989559491D-04 + 0.5975887321186D-04 0.6118089177673D-04 0.6263673685632D-04 0.6412721267990D-04 + 0.6565314258201D-04 0.6721536945580D-04 0.6881475621705D-04 0.7045218627922D-04 + 0.7212856403973D-04 0.7384481537777D-04 0.7560188816385D-04 0.7740075278149D-04 + 0.7924240266119D-04 0.8112785482706D-04 0.8305815045642D-04 0.8503435545263D-04 + 0.8705756103141D-04 0.8912888432116D-04 0.9124946897738D-04 0.9342048581165D-04 + 0.9564313343555D-04 0.9791863891974D-04 0.1002482584687D-03 0.1026332781112D-03 + 0.1050750144077D-03 0.1075748151735D-03 0.1101340602203D-03 0.1127541621137D-03 + 0.1154365669501D-03 0.1181827551510D-03 0.1209942422769D-03 0.1238725798590D-03 + 0.1268193562527D-03 0.1298361975089D-03 0.1329247682680D-03 0.1360867726735D-03 + 0.1393239553083D-03 0.1426381021518D-03 0.1460310415612D-03 0.1495046452749D-03 + 0.1530608294397D-03 0.1567015556625D-03 0.1604288320871D-03 0.1642447144955D-03 + 0.1681513074364D-03 0.1721507653792D-03 0.1762452938963D-03 0.1804371508722D-03 + 0.1847286477421D-03 0.1891221507592D-03 0.1936200822920D-03 0.1982249221522D-03 + 0.2029392089542D-03 0.2077655415060D-03 0.2127065802334D-03 0.2177650486382D-03 + 0.2229437347894D-03 0.2282454928513D-03 0.2336732446459D-03 0.2392299812538D-03 + 0.2449187646513D-03 0.2507427293871D-03 0.2567050842979D-03 0.2628091142650D-03 + 0.2690581820118D-03 0.2754557299435D-03 0.2820052820308D-03 0.2887104457371D-03 + 0.2955749139921D-03 0.3026024672103D-03 0.3097969753590D-03 0.3171624000731D-03 + 0.3247027968207D-03 0.3324223171196D-03 0.3403252108055D-03 0.3484158283536D-03 + 0.3566986232552D-03 0.3651781544500D-03 0.3738590888149D-03 0.3827462037126D-03 + 0.3918443895988D-03 0.4011586526914D-03 0.4106941177020D-03 0.4204560306321D-03 + 0.4304497616342D-03 0.4406808079408D-03 0.4511547968612D-03 0.4618774888502D-03 + 0.4728547806468D-03 0.4840927084883D-03 0.4955974513988D-03 0.5073753345551D-03 + 0.5194328327314D-03 0.5317765738249D-03 0.5444133424641D-03 0.5573500837015D-03 + 0.5705939067925D-03 0.5841520890639D-03 0.5980320798714D-03 0.6122415046513D-03 + 0.6267881690659D-03 0.6416800632466D-03 0.6569253661363D-03 0.6725324499326D-03 + 0.6885098846360D-03 0.7048664427037D-03 0.7216111038125D-03 0.7387530597330D-03 + 0.7563017193176D-03 0.7742667136049D-03 0.7926579010441D-03 0.8114853728404D-03 + 0.8307594584254D-03 0.8504907310562D-03 0.8706900135433D-03 0.8913683841142D-03 + 0.9125371824119D-03 0.9342080156346D-03 0.9563927648179D-03 0.9791035912634D-03 + 0.1002352943117D-02 0.1026153562102D-02 0.1050518490405D-02 0.1075461077728D-02 + 0.1100994988496D-02 0.1127134209246D-02 0.1153893056171D-02 0.1181286182852D-02 + 0.1209328588167D-02 0.1238035624379D-02 0.1267423005415D-02 0.1297506815344D-02 + 0.1328303517037D-02 0.1359829961041D-02 0.1392103394654D-02 0.1425141471212D-02 + 0.1458962259585D-02 0.1493584253904D-02 0.1529026383504D-02 0.1565308023106D-02 + 0.1602449003221D-02 0.1640469620811D-02 0.1679390650189D-02 0.1719233354165D-02 + 0.1760019495464D-02 0.1801771348394D-02 0.1844511710794D-02 0.1888263916250D-02 + 0.1933051846599D-02 0.1978899944720D-02 0.2025833227614D-02 0.2073877299798D-02 + 0.2123058366995D-02 0.2173403250151D-02 0.2224939399761D-02 0.2277694910540D-02 + 0.2331698536421D-02 0.2386979705903D-02 0.2443568537747D-02 0.2501495857040D-02 + 0.2560793211623D-02 0.2621492888896D-02 0.2683627933011D-02 0.2747232162458D-02 + 0.2812340188056D-02 0.2878987431352D-02 0.2947210143447D-02 0.3017045424251D-02 + 0.3088531242177D-02 0.3161706454285D-02 0.3236610826892D-02 0.3313285056646D-02 + 0.3391770792086D-02 0.3472110655691D-02 0.3554348266436D-02 0.3638528262858D-02 + 0.3724696326649D-02 0.3812899206788D-02 0.3903184744224D-02 0.3995601897109D-02 + 0.4090200766624D-02 0.4187032623373D-02 0.4286149934389D-02 0.4387606390746D-02 + 0.4491456935804D-02 0.4597757794082D-02 0.4706566500803D-02 0.4817941932088D-02 + 0.4931944335851D-02 0.5048635363379D-02 0.5168078101634D-02 0.5290337106279D-02 + 0.5415478435454D-02 0.5543569684307D-02 0.5674680020311D-02 0.5808880219367D-02 + 0.5946242702730D-02 0.6086841574754D-02 0.6230752661494D-02 0.6378053550168D-02 + 0.6528823629508D-02 0.6683144131013D-02 0.6841098171130D-02 0.7002770794372D-02 + 0.7168249017405D-02 0.7337621874121D-02 0.7510980461712D-02 0.7688417987773D-02 + 0.7870029818463D-02 0.8055913527720D-02 0.8246168947593D-02 0.8440898219673D-02 + 0.8640205847678D-02 0.8844198751201D-02 0.9052986320644D-02 0.9266680473381D-02 + 0.9485395711148D-02 0.9709249178711D-02 0.9938360723829D-02 0.1017285295853D-01 + 0.1041285132175D-01 0.1065848414335D-01 0.1090988270951D-01 0.1116718132961D-01 + 0.1143051740455D-01 0.1170003149653D-01 0.1197586740047D-01 0.1225817221684D-01 + 0.1254709642620D-01 0.1284279396532D-01 0.1314542230495D-01 0.1345514252930D-01 + 0.1377211941725D-01 0.1409652152530D-01 0.1442852127232D-01 0.1476829502620D-01 + 0.1511602319226D-01 0.1547189030365D-01 0.1583608511371D-01 0.1620880069022D-01 + 0.1659023451183D-01 0.1698058856639D-01 0.1738006945154D-01 0.1778888847734D-01 + 0.1820726177118D-01 0.1863541038486D-01 0.1907356040402D-01 0.1952194305980D-01 + 0.1998079484302D-01 0.2045035762063D-01 0.2093087875471D-01 0.2142261122400D-01 + 0.2192581374792D-01 0.2244075091329D-01 0.2296769330365D-01 0.2350691763133D-01 + 0.2405870687229D-01 0.2462335040374D-01 0.2520114414469D-01 0.2579239069942D-01 + 0.2639739950387D-01 0.2701648697516D-01 0.2764997666416D-01 0.2829819941123D-01 + 0.2896149350513D-01 0.2964020484531D-01 0.3033468710740D-01 0.3104530191220D-01 + 0.3177241899806D-01 0.3251641639684D-01 0.3327768061342D-01 0.3405660680881D-01 + 0.3485359898710D-01 0.3566907018606D-01 0.3650344267166D-01 0.3735714813647D-01 + 0.3823062790211D-01 0.3912433312562D-01 0.4003872501011D-01 0.4097427501948D-01 + 0.4193146509749D-01 0.4291078789111D-01 0.4391274697832D-01 0.4493785710035D-01 + 0.4598664439858D-01 0.4705964665594D-01 0.4815741354312D-01 0.4928050686955D-01 + 0.5042950083923D-01 0.5160498231153D-01 0.5280755106696D-01 0.5403782007813D-01 + 0.5529641578584D-01 0.5658397838041D-01 0.5790116208843D-01 0.5924863546488D-01 + 0.6062708169076D-01 0.6203719887636D-01 0.6347970037015D-01 0.6495531507346D-01 + 0.6646478776099D-01 0.6800887940725D-01 0.6958836751900D-01 0.7120404647380D-01 + 0.7285672786470D-01 0.7454724085125D-01 0.7627643251682D-01 0.7804516823229D-01 + 0.7985433202641D-01 0.8170482696258D-01 0.8359757552242D-01 0.8553351999606D-01 + 0.8751362287932D-01 0.8953886727772D-01 0.9161025731761D-01 0.9372881856432D-01 + 0.9589559844749D-01 0.9811166669365D-01 0.1003781157661D+00 0.1026960613124D+00 + 0.1050666426187D+00 0.1074910230727D+00 0.1099703906329D+00 0.1125059583070D+00 + 0.1150989646366D+00 0.1177506741909D+00 0.1204623780676D+00 0.1232353944021D+00 + 0.1260710688845D+00 0.1289707752849D+00 0.1319359159864D+00 0.1349679225270D+00 + 0.1380682561490D+00 0.1412384083570D+00 0.1444799014844D+00 0.1477942892678D+00 + 0.1511831574303D+00 0.1546481242725D+00 0.1581908412731D+00 0.1618129936965D+00 + 0.1655163012104D+00 0.1693025185104D+00 0.1731734359544D+00 0.1771308802047D+00 + 0.1811767148790D+00 0.1853128412094D+00 0.1895411987104D+00 0.1938637658552D+00 + 0.1982825607598D+00 0.2027996418767D+00 0.2074171086957D+00 0.2121371024533D+00 + 0.2169618068509D+00 0.2218934487801D+00 0.2269342990569D+00 0.2320866731634D+00 + 0.2373529319974D+00 0.2427354826295D+00 0.2482367790682D+00 0.2538593230323D+00 + 0.2596056647304D+00 0.2654784036474D+00 0.2714801893389D+00 0.2776137222308D+00 + 0.2838817544268D+00 0.2902870905217D+00 0.2968325884206D+00 0.3035211601645D+00 + 0.3103557727607D+00 0.3173394490192D+00 0.3244752683937D+00 0.3317663678273D+00 + 0.3392159426028D+00 0.3468272471962D+00 0.3546035961349D+00 0.3625483648577D+00 + 0.3706649905790D+00 0.3789569731540D+00 0.3874278759464D+00 0.3960813266976D+00 + 0.4049210183955D+00 0.4139507101454D+00 0.4231742280388D+00 0.4325954660221D+00 + 0.4422183867640D+00 0.4520470225197D+00 0.4620854759931D+00 0.4723379211946D+00 + 0.4828086042953D+00 0.4935018444749D+00 0.5044220347646D+00 0.5155736428822D+00 + 0.5269612120602D+00 0.5385893618646D+00 0.5504627890040D+00 0.5625862681281D+00 + 0.5749646526146D+00 0.5876028753427D+00 0.6005059494532D+00 0.6136789690924D+00 + 0.6271271101407D+00 0.6408556309226D+00 0.6548698728981D+00 0.6691752613333D+00 + 0.6837773059493D+00 0.6986816015479D+00 0.7138938286123D+00 0.7294197538810D+00 + 0.7452652308942D+00 0.7614362005101D+00 0.7779386913894D+00 0.7947788204470D+00 + 0.8119627932680D+00 0.8294969044866D+00 0.8473875381261D+00 0.8656411678975D+00 + 0.8842643574549D+00 0.9032637606047D+00 0.9226461214683D+00 0.9424182745935D+00 + 0.9625871450140D+00 0.9831597482541D+00 0.1004143190275D+01 0.1025544667362D+01 + 0.1047371465949D+01 0.1069630962376D+01 0.1092330622582D+01 0.1115478001718D+01 + 0.1139080743699D+01 0.1163146580667D+01 0.1187683332379D+01 0.1212698905512D+01 + 0.1238201292877D+01 0.1264198572546D+01 0.1290698906886D+01 0.1317710541494D+01 + 0.1345241804028D+01 0.1373301102944D+01 0.1401896926110D+01 0.1431037839321D+01 + 0.1460732484690D+01 0.1490989578921D+01 0.1521817911461D+01 0.1553226342519D+01 + 0.1585223800953D+01 0.1617819282025D+01 0.1651021845012D+01 0.1684840610666D+01 + 0.1719284758534D+01 0.1754363524114D+01 0.1790086195862D+01 0.1826462112019D+01 + 0.1863500657290D+01 0.1901211259327D+01 0.1939603385053D+01 0.1978686536792D+01 + 0.2018470248210D+01 0.2058964080068D+01 0.2100177615772D+01 0.2142120456722D+01 + 0.2184802217451D+01 0.2228232520549D+01 0.2272420991371D+01 0.2317377252521D+01 + 0.2363110918097D+01 0.2409631587718D+01 0.2456948840298D+01 0.2505072227579D+01 + 0.2554011267414D+01 0.2603775436800D+01 0.2654374164640D+01 0.2705816824249D+01 + 0.2758112725590D+01 0.2811271107225D+01 0.2865301128002D+01 0.2920211858443D+01 + 0.2976012271854D+01 0.3032711235135D+01 0.3090317499294D+01 0.3148839689666D+01 + 0.3208286295814D+01 0.3268665661132D+01 0.3329985972130D+01 0.3392255247403D+01 + 0.3455481326284D+01 0.3519671857166D+01 0.3584834285516D+01 0.3650975841540D+01 + 0.3718103527540D+01 0.3786224104928D+01 0.3855344080910D+01 0.3925469694842D+01 + 0.3996606904248D+01 0.4068761370505D+01 0.4141938444201D+01 0.4216143150155D+01 + 0.4291380172106D+01 0.4367653837082D+01 0.4444968099432D+01 0.4523326524540D+01 + 0.4602732272224D+01 0.4683188079814D+01 0.4764696244923D+01 0.4847258607911D+01 + 0.4930876534058D+01 0.5015550895439D+01 0.5101282052526D+01 0.5188069835504D+01 + 0.5275913525340D+01 0.5364811834582D+01 0.5454762887935D+01 0.5545764202593D+01 + 0.5637812668364D+01 0.5730904527600D+01 0.5825035354930D+01 0.5920200036841D+01 + 0.6016392751096D+01 0.6113606946037D+01 0.6211835319763D+01 0.6311069799237D+01 + 0.6411301519318D+01 0.6512520801757D+01 0.6614717134178D+01 0.6717879149076D+01 + 0.6821994602856D+01 0.6927050354936D+01 0.7033032346971D+01 0.7139925582197D+01 + 0.7247714104955D+01 0.7356380980422D+01 0.7465908274590D+01 0.7576277034522D+01 + 0.7687467268944D+01 0.7799457929201D+01 0.7912226890625D+01 0.8025750934367D+01 + 0.8140005729731D+01 0.8254965817070D+01 0.8370604591283D+01 0.8486894285977D+01 + 0.8603805958343D+01 0.8721309474805D+01 0.8839373497487D+01 0.8957965471583D+01 + 0.9077051613664D+01 0.9196596901005D+01 0.9316565061973D+01 0.9436918567578D+01 + 0.9557618624205D+01 0.9678625167647D+01 0.9799896858462D+01 0.9921391078761D+01 + 0.1004306393048D+02 0.1016487023519D+02 0.1028676353561D+02 0.1040869609872D+02 + 0.1053061892078D+02 0.1065248173410D+02 0.1077423301584D+02 0.1089581999877D+02 + 0.1101718868413D+02 0.1113828385666D+02 0.1125904910191D+02 0.1137942682584D+02 + 0.1149935827678D+02 0.1161878356999D+02 0.1173764171462D+02 0.1185587064341D+02 + 0.1197340724503D+02 0.1209018739920D+02 0.1220614601465D+02 0.1232121706995D+02 + 0.1243533365740D+02 0.1254842802982D+02 0.1266043165050D+02 0.1277127524634D+02 + 0.1288088886404D+02 0.1298920192971D+02 0.1309614331160D+02 0.1320164138629D+02 + 0.1330562410812D+02 0.1340801908212D+02 0.1350875364026D+02 0.1360775492116D+02 + 0.1370494995324D+02 0.1380026574132D+02 0.1389362935662D+02 0.1398496803019D+02 + 0.1407420924981D+02 0.1416128086012D+02 0.1424611116627D+02 0.1432862904069D+02 + 0.1440876403324D+02 0.1448644648440D+02 0.1456160764164D+02 0.1463417977876D+02 + 0.1470409631813D+02 0.1477129195572D+02 0.1483570278883D+02 0.1489726644633D+02 + 0.1495592222127D+02 0.1501161120574D+02 0.1506427642781D+02 0.1511386299027D+02 + 0.1516031821110D+02 0.1520359176531D+02 0.1524363582812D+02 0.1528040521898D+02 + 0.1531385754641D+02 0.1534395335325D+02 0.1537065626208D+02 0.1539393312048D+02 + 0.1541375414585D+02 0.1543009306950D+02 0.1544292727951D+02 0.1545223796216D+02 + 0.1545801024155D+02 0.1546023331695D+02 0.1545890059744D+02 0.1545400983365D+02 + 0.1544556324596D+02 0.1543356764880D+02 0.1541803457065D+02 0.1539898036925D+02 + 0.1537642634154D+02 0.1535039882796D+02 0.1532092931044D+02 0.1528805450387D+02 + 0.1525181644030D+02 0.1521226254557D+02 0.1516944570778D+02 0.1512342433713D+02 + 0.1507426241669D+02 0.1502202954350D+02 0.1496680095964D+02 0.1490865757272D+02 + 0.1484768596530D+02 0.1478397839284D+02 0.1471763276969D+02 0.1464875264266D+02 + 0.1457744715182D+02 0.1450383097801D+02 0.1442802427679D+02 0.1435015259838D+02 + 0.1427034679327D+02 0.1418874290321D+02 0.1410548203722D+02 0.1402071023247D+02 + 0.1393457829969D+02 0.1384724165293D+02 0.1375886012364D+02 0.1366959775879D+02 + 0.1357962260304D+02 0.1348910646488D+02 0.1339822466686D+02 0.1330715577980D+02 + 0.1321608134121D+02 0.1312518555808D+02 0.1303465499419D+02 0.1294467824221D+02 + 0.1285544558101D+02 0.1276714861841D+02 0.1267997991994D+02 0.1259413262403D+02 + 0.1250980004419D+02 0.1242717525885D+02 0.1234645068948D+02 0.1226781766776D+02 + 0.1219146599257D+02 0.1211758347770D+02 0.1204635549121D+02 0.1197796448732D+02 + 0.1191258953197D+02 0.1185040582321D+02 0.1179158420730D+02 0.1173629069208D+02 + 0.1168468595856D+02 0.1163692487226D+02 0.1159315599549D+02 0.1155352110209D+02 + 0.1151815469598D+02 0.1148718353503D+02 0.1146072616178D+02 0.1143889244247D+02 + 0.1142178311602D+02 0.1140948935454D+02 0.1140209233686D+02 0.1139966283678D+02 + 0.1140226082774D+02 0.1140993510519D+02 0.1142272292875D+02 0.1144064968524D+02 + 0.1146372857460D+02 0.1149196031991D+02 0.1152533290326D+02 0.1156382132880D+02 + 0.1160738741454D+02 0.1165597961412D+02 0.1170953287012D+02 0.1176796849989D+02 + 0.1183119411535D+02 0.1189910357777D+02 0.1197157698856D+02 0.1204848071701D+02 + 0.1212966746596D+02 0.1221497637600D+02 0.1230423316888D+02 0.1239725033077D+02 + 0.1249382733567D+02 0.1259375090926D+02 0.1269679533346D+02 0.1280272279167D+02 + 0.1291128375448D+02 0.1302221740584D+02 0.1313525210912D+02 0.1325010591253D+02 + 0.1336648709337D+02 0.1348409474012D+02 0.1360261937149D+02 0.1372174359123D+02 + 0.1384114277758D+02 0.1396048580566D+02 0.1407943580155D+02 0.1419765092608D+02 + 0.1431478518661D+02 0.1443048927478D+02 0.1454441142812D+02 0.1465619831308D+02 + 0.1476549592746D+02 0.1487195051928D+02 0.1497520951989D+02 0.1507492248828D+02 + 0.1517074206398D+02 0.1526232492551D+02 0.1534933275145D+02 0.1543143318112D+02 + 0.1550830077157D+02 0.1557961794797D+02 0.1564507594396D+02 0.1570437572881D+02 + 0.1575722891823D+02 0.1580335866539D+02 0.1584250052899D+02 0.1587440331524D+02 + 0.1589882989033D+02 0.1591555796049D+02 0.1592438081630D+02 0.1592510803844D+02 + 0.1591756616179D+02 0.1590159929512D+02 0.1587706969359D+02 0.1584385828154D+02 + 0.1580186512290D+02 0.1575100983720D+02 0.1569123195871D+02 0.1562249123695D+02 + 0.1554476787665D+02 0.1545806271560D+02 0.1536239733893D+02 0.1525781412875D+02 + 0.1514437624809D+02 0.1502216755847D+02 0.1489129247063D+02 0.1475187572813D+02 + 0.1460406212401D+02 0.1444801615062D+02 0.1428392158332D+02 0.1411198099888D+02 + 0.1393241522964D+02 0.1374546275490D+02 0.1355137903119D+02 0.1335043576333D+02 + 0.1314292011864D+02 0.1292913388664D+02 0.1270939258714D+02 0.1248402452972D+02 + 0.1225336982785D+02 0.1201777937125D+02 0.1177761376017D+02 0.1153324220569D+02 + 0.1128504140014D+02 0.1103339436205D+02 0.1077868926027D+02 0.1052131822179D+02 + 0.1026167612835D+02 0.1000015940663D+02 0.9737164817090D+01 0.9473088246666D+01 + 0.9208323510392D+01 0.8943261167138D+01 0.8678287354606D+01 0.8413782648689D+01 + 0.8150120952198D+01 0.7887668417870D+01 0.7626782410424D+01 0.7367810512255D+01 + 0.7111089577147D+01 0.6856944836175D+01 0.6605689059620D+01 0.6357621778576D+01 + 0.6113028569417D+01 0.5872180404071D+01 0.5635333068605D+01 0.5402726652271D+01 + 0.5174585108689D+01 0.4951115890458D+01 0.4732509658013D+01 0.4518940063093D+01 + 0.4310563606744D+01 0.4107519571314D+01 0.3909930025455D+01 0.3717899900701D+01 + 0.3531517137795D+01 0.3350852900521D+01 0.3175961854415D+01 0.3006882507418D+01 + 0.2843637609166D+01 0.2686234605393D+01 0.2534666143602D+01 0.2388910626020D+01 + 0.2248932805599D+01 0.2114684420764D+01 0.1986104864410D+01 0.1863121882663D+01 + 0.1745652298807D+01 0.1633602757816D+01 0.1526870486911D+01 0.1425344067651D+01 + 0.1328904215091D+01 0.1237424559686D+01 0.1150772427713D+01 0.1068809616148D+01 + 0.9913931580887D+00 0.9183760750247D+00 0.8496081124357D+00 0.7849364554513D+00 + 0.7242064215293D+00 0.6672621273712D+00 0.6139471275574D+00 0.5641050226618D+00 + 0.5175800348878D+00 0.4742175495586D+00 0.4338646210828D+00 0.3963704423129D+00 + 0.3615867764997D+00 0.3293683513354D+00 0.2995732148544D+00 0.2720630532321D+00 + 0.2467034707815D+00 0.2233642326902D+00 0.2019194712763D+00 0.1822478567499D+00 + 0.1642327336682D+00 0.1477622244444D+00 0.1327293014336D+00 0.1190318292464D+00 + 0.1065725790655D+00 0.9525921682581D-01 0.8500426719540D-01 0.7572505534570D-01 + 0.6734362852856D-01 0.5978665949119D-01 0.5298533375213D-01 0.4687522273735D-01 + 0.4139614473480D-01 0.3649201557103D-01 0.3211069084453D-01 0.2820380147099D-01 + 0.2472658420543D-01 0.2163770870794D-01 0.1889910261478D-01 0.1647577596641D-01 + 0.1433564623066D-01 0.1244936504301D-01 0.1079014767040D-01 0.9333606088531D-02 + 0.8057586449521D-02 0.6942011605538D-02 0.5968729247262D-02 0.5121366113861D-02 + 0.4385188634413D-02 0.3746970269980D-02 0.3194865741265D-02 0.2718292249293D-02 + 0.2307817726031D-02 0.1955056088404D-02 0.1652569412799D-02 0.1393776897745D-02 + 0.1172870439853D-02 0.9847366120634D-03 0.8248848034661D-03 0.6893812560569D-03 + 0.5747887154298D-03 0.4781113990982D-03 0.3967449774979D-03 0.3284312582634D-03 + 0.2712172636576D-03 0.2234183935981D-03 0.1835853721449D-03 0.1504746831443D-03 + 0.1230222105786D-03 0.1003198106540D-03 0.8159455542106D-04 0.6619040144209D-04 + 0.5355205138722D-04 0.4321079120846D-04 0.3477210045803D-04 0.2790484818898D-04 + 0.2233190152246D-04 0.1782198824118D-04 0.1418266855132D-04 0.1125428434880D-04 + 0.8904766856498D-05 0.7025195313453D-05 0.5526010459652D-05 0.4333796852085D-05 + 0.3388557563637D-05 0.2641413563333D-05 0.2052668070841D-05 0.1590183444862D-05 + 0.1228024735392D-05 0.9453299398051D-06 0.7253722919424D-06 0.5547846237125D-06 + 0.4229200131023D-06 0.3213266143727D-06 0.2433177983142D-06 0.1836215545666D-06 + 0.1380955642703D-06 0.1034964778941D-06 0.7729376586493D-07 0.5752008209307D-07 + 0.4265142355148D-07 0.3151151106808D-07 0.2319578320089D-07 0.1701120974173D-07 + 0.1242881489534D-07 0.9046371073667D-08 0.6559198960071D-08 0.4737402476978D-08 + 0.3408191153158D-08 0.2442208093542D-08 0.1742998768590D-08 0.1238932286038D-08 + 0.8770296193333D-09 0.6182683290111D-09 0.4340255982013D-09 0.3033950772413D-09 + 0.2111715589818D-09 0.1463438404983D-09 0.1009726185101D-09 0.6935859066118D-10 + 0.4742849271888D-10 0.3228488955626D-10 0.2187547853929D-10 0.1475212866899D-10 + 0.9901881750809D-11 0.6613860882122D-11 0.4396644350124D-11 0.2908650000322D-11 + 0.1914873227728D-11 0.1254415200484D-11 0.8176535094916D-12 0.5302708391854D-12 + 0.3421370551355D-12 0.2196087836422D-12 0.1402231518601D-12 0.8906014768602D-13 + LSMS: xx z= 26. xvalws= 2.77074 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728402963D+02-0.5199725117641D+02-0.5199721792578D+02-0.5199718427293D+02 +-0.5199715021300D+02-0.5199711574107D+02-0.5199708085214D+02-0.5199704554119D+02 +-0.5199700980309D+02-0.5199697363268D+02-0.5199693702474D+02-0.5199689997397D+02 +-0.5199686247500D+02-0.5199682452243D+02-0.5199678611076D+02-0.5199674723444D+02 +-0.5199670788785D+02-0.5199666806529D+02-0.5199662776101D+02-0.5199658696918D+02 +-0.5199654568390D+02-0.5199650389922D+02-0.5199646160907D+02-0.5199641880734D+02 +-0.5199637548785D+02-0.5199633164434D+02-0.5199628727046D+02-0.5199624235979D+02 +-0.5199619690585D+02-0.5199615090205D+02-0.5199610434176D+02-0.5199605721822D+02 +-0.5199600952464D+02-0.5199596125410D+02-0.5199591239964D+02-0.5199586295419D+02 +-0.5199581291060D+02-0.5199576226162D+02-0.5199571099994D+02-0.5199565911815D+02 +-0.5199560660874D+02-0.5199555346411D+02-0.5199549967658D+02-0.5199544523837D+02 +-0.5199539014162D+02-0.5199533437834D+02-0.5199527794048D+02-0.5199522081989D+02 +-0.5199516300828D+02-0.5199510449731D+02-0.5199504527851D+02-0.5199498534331D+02 +-0.5199492468306D+02-0.5199486328897D+02-0.5199480115217D+02-0.5199473826367D+02 +-0.5199467461436D+02-0.5199461019507D+02-0.5199454499646D+02-0.5199447900910D+02 +-0.5199441222344D+02-0.5199434462984D+02-0.5199427621849D+02-0.5199420697954D+02 +-0.5199413690295D+02-0.5199406597858D+02-0.5199399419618D+02-0.5199392154537D+02 +-0.5199384801563D+02-0.5199377359634D+02-0.5199369827672D+02-0.5199362204589D+02 +-0.5199354489281D+02-0.5199346680633D+02-0.5199338777515D+02-0.5199330778784D+02 +-0.5199322683282D+02-0.5199314489839D+02-0.5199306197270D+02-0.5199297804374D+02 +-0.5199289309939D+02-0.5199280712733D+02-0.5199272011516D+02-0.5199263205027D+02 +-0.5199254291992D+02-0.5199245271123D+02-0.5199236141114D+02-0.5199226900644D+02 +-0.5199217548376D+02-0.5199208082958D+02-0.5199198503019D+02-0.5199188807175D+02 +-0.5199178994021D+02-0.5199169062139D+02-0.5199159010092D+02-0.5199148836424D+02 +-0.5199138539665D+02-0.5199128118323D+02-0.5199117570892D+02-0.5199106895845D+02 +-0.5199096091638D+02-0.5199085156707D+02-0.5199074089471D+02-0.5199062888326D+02 +-0.5199051551654D+02-0.5199040077813D+02-0.5199028465143D+02-0.5199016711964D+02 +-0.5199004816574D+02-0.5198992777253D+02-0.5198980592257D+02-0.5198968259824D+02 +-0.5198955778170D+02-0.5198943145487D+02-0.5198930359948D+02-0.5198917419701D+02 +-0.5198904322875D+02-0.5198891067574D+02-0.5198877651879D+02-0.5198864073848D+02 +-0.5198850331517D+02-0.5198836422896D+02-0.5198822345972D+02-0.5198808098707D+02 +-0.5198793679039D+02-0.5198779084882D+02-0.5198764314123D+02-0.5198749364622D+02 +-0.5198734234217D+02-0.5198718920716D+02-0.5198703421905D+02-0.5198687735537D+02 +-0.5198671859343D+02-0.5198655791024D+02-0.5198639528254D+02-0.5198623068679D+02 +-0.5198606409915D+02-0.5198589549550D+02-0.5198572485143D+02-0.5198555214224D+02 +-0.5198537734293D+02-0.5198520042816D+02-0.5198502137235D+02-0.5198484014954D+02 +-0.5198465673351D+02-0.5198447109769D+02-0.5198428321519D+02-0.5198409305883D+02 +-0.5198390060104D+02-0.5198370581396D+02-0.5198350866939D+02-0.5198330913876D+02 +-0.5198310719319D+02-0.5198290280341D+02-0.5198269593983D+02-0.5198248657249D+02 +-0.5198227467106D+02-0.5198206020484D+02-0.5198184314277D+02-0.5198162345340D+02 +-0.5198140110492D+02-0.5198117606510D+02-0.5198094830136D+02-0.5198071778068D+02 +-0.5198048446968D+02-0.5198024833454D+02-0.5198000934107D+02-0.5197976745462D+02 +-0.5197952264015D+02-0.5197927486220D+02-0.5197902408485D+02-0.5197877027176D+02 +-0.5197851338615D+02-0.5197825339081D+02-0.5197799024804D+02-0.5197772391971D+02 +-0.5197745436723D+02-0.5197718155151D+02-0.5197690543304D+02-0.5197662597177D+02 +-0.5197634312720D+02-0.5197605685833D+02-0.5197576712367D+02-0.5197547388122D+02 +-0.5197517708846D+02-0.5197487670236D+02-0.5197457267938D+02-0.5197426497542D+02 +-0.5197395354589D+02-0.5197363834563D+02-0.5197331932893D+02-0.5197299644952D+02 +-0.5197266966059D+02-0.5197233891476D+02-0.5197200416404D+02-0.5197166535990D+02 +-0.5197132245319D+02-0.5197097539418D+02-0.5197062413252D+02-0.5197026861727D+02 +-0.5196990879687D+02-0.5196954461909D+02-0.5196917603112D+02-0.5196880297948D+02 +-0.5196842541005D+02-0.5196804326804D+02-0.5196765649801D+02-0.5196726504383D+02 +-0.5196686884871D+02-0.5196646785514D+02-0.5196606200494D+02-0.5196565123919D+02 +-0.5196523549829D+02-0.5196481472189D+02-0.5196438884890D+02-0.5196395781753D+02 +-0.5196352156518D+02-0.5196308002855D+02-0.5196263314350D+02-0.5196218084518D+02 +-0.5196172306789D+02-0.5196125974518D+02-0.5196079080977D+02-0.5196031619354D+02 +-0.5195983582758D+02-0.5195934964214D+02-0.5195885756657D+02-0.5195835952942D+02 +-0.5195785545834D+02-0.5195734528011D+02-0.5195682892060D+02-0.5195630630481D+02 +-0.5195577735679D+02-0.5195524199969D+02-0.5195470015573D+02-0.5195415174616D+02 +-0.5195359669127D+02-0.5195303491041D+02-0.5195246632192D+02-0.5195189084316D+02 +-0.5195130839046D+02-0.5195071887917D+02-0.5195012222358D+02-0.5194951833693D+02 +-0.5194890713143D+02-0.5194828851819D+02-0.5194766240726D+02-0.5194702870759D+02 +-0.5194638732701D+02-0.5194573817222D+02-0.5194508114882D+02-0.5194441616121D+02 +-0.5194374311266D+02-0.5194306190525D+02-0.5194237243986D+02-0.5194167461616D+02 +-0.5194096833262D+02-0.5194025348643D+02-0.5193952997356D+02-0.5193879768871D+02 +-0.5193805652527D+02-0.5193730637535D+02-0.5193654712973D+02-0.5193577867788D+02 +-0.5193500090790D+02-0.5193421370652D+02-0.5193341695911D+02-0.5193261054963D+02 +-0.5193179436061D+02-0.5193096827316D+02-0.5193013216694D+02-0.5192928592013D+02 +-0.5192842940944D+02-0.5192756251004D+02-0.5192668509561D+02-0.5192579703828D+02 +-0.5192489820860D+02-0.5192398847556D+02-0.5192306770652D+02-0.5192213576726D+02 +-0.5192119252189D+02-0.5192023783287D+02-0.5191927156096D+02-0.5191829356524D+02 +-0.5191730370307D+02-0.5191630183005D+02-0.5191528780001D+02-0.5191426146503D+02 +-0.5191322267532D+02-0.5191217127930D+02-0.5191110712354D+02-0.5191003005272D+02 +-0.5190893990959D+02-0.5190783653503D+02-0.5190671976795D+02-0.5190558944528D+02 +-0.5190444540195D+02-0.5190328747089D+02-0.5190211548297D+02-0.5190092926700D+02 +-0.5189972864968D+02-0.5189851345560D+02-0.5189728350719D+02-0.5189603862472D+02 +-0.5189477862625D+02-0.5189350332759D+02-0.5189221254235D+02-0.5189090608179D+02 +-0.5188958375491D+02-0.5188824536834D+02-0.5188689072635D+02-0.5188551963080D+02 +-0.5188413188114D+02-0.5188272727435D+02-0.5188130560492D+02-0.5187986666482D+02 +-0.5187841024347D+02-0.5187693612772D+02-0.5187544410178D+02-0.5187393394724D+02 +-0.5187240544300D+02-0.5187085836524D+02-0.5186929248740D+02-0.5186770758014D+02 +-0.5186610341132D+02-0.5186447974591D+02-0.5186283634606D+02-0.5186117297093D+02 +-0.5185948937678D+02-0.5185778531685D+02-0.5185606054135D+02-0.5185431479744D+02 +-0.5185254782916D+02-0.5185075937741D+02-0.5184894917991D+02-0.5184711697117D+02 +-0.5184526248242D+02-0.5184338544160D+02-0.5184148557330D+02-0.5183956259875D+02 +-0.5183761623572D+02-0.5183564619854D+02-0.5183365219802D+02-0.5183163394142D+02 +-0.5182959113240D+02-0.5182752347098D+02-0.5182543065350D+02-0.5182331237255D+02 +-0.5182116831697D+02-0.5181899817174D+02-0.5181680161800D+02-0.5181457833297D+02 +-0.5181232798987D+02-0.5181005025795D+02-0.5180774480235D+02-0.5180541128413D+02 +-0.5180304936016D+02-0.5180065868310D+02-0.5179823890134D+02-0.5179578965895D+02 +-0.5179331059564D+02-0.5179080134665D+02-0.5178826154277D+02-0.5178569081025D+02 +-0.5178308877073D+02-0.5178045504121D+02-0.5177778923399D+02-0.5177509095659D+02 +-0.5177235981171D+02-0.5176959539717D+02-0.5176679730585D+02-0.5176396512563D+02 +-0.5176109843930D+02-0.5175819682457D+02-0.5175525985390D+02-0.5175228709457D+02 +-0.5174927810849D+02-0.5174623245221D+02-0.5174314967682D+02-0.5174002932792D+02 +-0.5173687094551D+02-0.5173367406395D+02-0.5173043821187D+02-0.5172716291215D+02 +-0.5172384768177D+02-0.5172049203182D+02-0.5171709546736D+02-0.5171365748739D+02 +-0.5171017758479D+02-0.5170665524617D+02-0.5170308995189D+02-0.5169948117592D+02 +-0.5169582838578D+02-0.5169213104249D+02-0.5168838860043D+02-0.5168460050732D+02 +-0.5168076620412D+02-0.5167688512494D+02-0.5167295669696D+02-0.5166898034036D+02 +-0.5166495546822D+02-0.5166088148646D+02-0.5165675779371D+02-0.5165258378128D+02 +-0.5164835883303D+02-0.5164408232529D+02-0.5163975362681D+02-0.5163537209858D+02 +-0.5163093709386D+02-0.5162644795799D+02-0.5162190402831D+02-0.5161730463415D+02 +-0.5161264909661D+02-0.5160793672858D+02-0.5160316683457D+02-0.5159833871062D+02 +-0.5159345164422D+02-0.5158850491424D+02-0.5158349779076D+02-0.5157842953502D+02 +-0.5157329939929D+02-0.5156810662682D+02-0.5156285045165D+02-0.5155753009857D+02 +-0.5155214478300D+02-0.5154669371088D+02-0.5154117607855D+02-0.5153559107266D+02 +-0.5152993787006D+02-0.5152421563767D+02-0.5151842353238D+02-0.5151256070096D+02 +-0.5150662627991D+02-0.5150061939535D+02-0.5149453916296D+02-0.5148838468777D+02 +-0.5148215506412D+02-0.5147584937554D+02-0.5146946669454D+02-0.5146300608264D+02 +-0.5145646659012D+02-0.5144984725596D+02-0.5144314710771D+02-0.5143636516137D+02 +-0.5142950042123D+02-0.5142255187982D+02-0.5141551851771D+02-0.5140839930344D+02 +-0.5140119319335D+02-0.5139389913149D+02-0.5138651604948D+02-0.5137904286634D+02 +-0.5137147848843D+02-0.5136382180931D+02-0.5135607170955D+02-0.5134822705665D+02 +-0.5134028670491D+02-0.5133224949527D+02-0.5132411425521D+02-0.5131587979859D+02 +-0.5130754492555D+02-0.5129910842232D+02-0.5129056906116D+02-0.5128192560017D+02 +-0.5127317678315D+02-0.5126432133956D+02-0.5125535798425D+02-0.5124628541740D+02 +-0.5123710232443D+02-0.5122780737574D+02-0.5121839922671D+02-0.5120887651745D+02 +-0.5119923787276D+02-0.5118948190193D+02-0.5117960719865D+02-0.5116961234085D+02 +-0.5115949589056D+02-0.5114925639380D+02-0.5113889238044D+02-0.5112840236408D+02 +-0.5111778484188D+02-0.5110703829447D+02-0.5109616118579D+02-0.5108515196301D+02 +-0.5107400905631D+02-0.5106273087889D+02-0.5105131582667D+02-0.5103976227836D+02 +-0.5102806859514D+02-0.5101623312071D+02-0.5100425418105D+02-0.5099213008436D+02 +-0.5097985912091D+02-0.5096743956297D+02-0.5095486966464D+02-0.5094214766176D+02 +-0.5092927177183D+02-0.5091624019384D+02-0.5090305110822D+02-0.5088970267672D+02 +-0.5087619304230D+02-0.5086252032900D+02-0.5084868264193D+02-0.5083467806710D+02 +-0.5082050467136D+02-0.5080616050232D+02-0.5079164358822D+02-0.5077695193792D+02 +-0.5076208354076D+02-0.5074703636655D+02-0.5073180836542D+02-0.5071639746782D+02 +-0.5070080158445D+02-0.5068501860613D+02-0.5066904640389D+02-0.5065288282874D+02 +-0.5063652571181D+02-0.5061997286414D+02-0.5060322207678D+02-0.5058627112067D+02 +-0.5056911774669D+02-0.5055175968555D+02-0.5053419464788D+02-0.5051642032411D+02 +-0.5049843438458D+02-0.5048023447945D+02-0.5046181823877D+02-0.5044318327247D+02 +-0.5042432717038D+02-0.5040524750226D+02-0.5038594181787D+02-0.5036640764694D+02 +-0.5034664249930D+02-0.5032664386488D+02-0.5030640921379D+02-0.5028593599640D+02 +-0.5026522164341D+02-0.5024426356594D+02-0.5022305915564D+02-0.5020160578474D+02 +-0.5017990080623D+02-0.5015794155393D+02-0.5013572534263D+02-0.5011324946826D+02 +-0.5009051120796D+02-0.5006750782030D+02-0.5004423654542D+02-0.5002069460521D+02 +-0.4999687920344D+02-0.4997278752603D+02-0.4994841674120D+02-0.4992376399966D+02 +-0.4989882643488D+02-0.4987360116327D+02-0.4984808528443D+02-0.4982227588141D+02 +-0.4979617002094D+02-0.4976976475371D+02-0.4974305711462D+02-0.4971604412309D+02 +-0.4968872278335D+02-0.4966109008469D+02-0.4963314300185D+02-0.4960487849528D+02 +-0.4957629351145D+02-0.4954738498327D+02-0.4951814983035D+02-0.4948858495939D+02 +-0.4945868726453D+02-0.4942845362775D+02-0.4939788091919D+02-0.4936696599757D+02 +-0.4933570571061D+02-0.4930409689534D+02-0.4927213637859D+02-0.4923982097740D+02 +-0.4920714749935D+02-0.4917411274309D+02-0.4914071349870D+02-0.4910694654815D+02 +-0.4907280866573D+02-0.4903829661848D+02-0.4900340716666D+02-0.4896813706420D+02 +-0.4893248305909D+02-0.4889644189392D+02-0.4886001030623D+02-0.4882318502909D+02 +-0.4878596279141D+02-0.4874834031849D+02-0.4871031433244D+02-0.4867188155262D+02 +-0.4863303869609D+02-0.4859378247804D+02-0.4855410961222D+02-0.4851401681140D+02 +-0.4847350078774D+02-0.4843255825325D+02-0.4839118592018D+02-0.4834938050138D+02 +-0.4830713871075D+02-0.4826445726356D+02-0.4822133287682D+02-0.4817776226967D+02 +-0.4813374216365D+02-0.4808926928306D+02-0.4804434035526D+02-0.4799895211091D+02 +-0.4795310128431D+02-0.4790678461358D+02-0.4785999884093D+02-0.4781274071282D+02 +-0.4776500698020D+02-0.4771679439861D+02-0.4766809972836D+02-0.4761891973461D+02 +-0.4756925118748D+02-0.4751909086208D+02-0.4746843553857D+02-0.4741728200213D+02 +-0.4736562704295D+02-0.4731346745620D+02-0.4726080004188D+02-0.4720762160479D+02 +-0.4715392895431D+02-0.4709971890425D+02-0.4704498827268D+02-0.4698973388163D+02 +-0.4693395255690D+02-0.4687764112767D+02-0.4682079642628D+02-0.4676341528777D+02 +-0.4670549454962D+02-0.4664703105122D+02-0.4658802163351D+02-0.4652846313853D+02 +-0.4646835240891D+02-0.4640768628735D+02-0.4634646161617D+02-0.4628467523671D+02 +-0.4622232398885D+02-0.4615940471037D+02-0.4609591423645D+02-0.4603184939910D+02 +-0.4596720702657D+02-0.4590198394276D+02-0.4583617696675D+02-0.4576978291218D+02 +-0.4570279858676D+02-0.4563522079176D+02-0.4556704632159D+02-0.4549827196328D+02 +-0.4542889449617D+02-0.4535891069156D+02-0.4528831731237D+02-0.4521711111299D+02 +-0.4514528883912D+02-0.4507284722768D+02-0.4499978300686D+02-0.4492609289624D+02 +-0.4485177360700D+02-0.4477682184233D+02-0.4470123429783D+02-0.4462500766219D+02 +-0.4454813861790D+02-0.4447062384219D+02-0.4439246000814D+02-0.4431364378589D+02 +-0.4423417184413D+02-0.4415404085174D+02-0.4407324747964D+02-0.4399178840285D+02 +-0.4390966030283D+02-0.4382685986996D+02-0.4374338380636D+02-0.4365922882888D+02 +-0.4357439167239D+02-0.4348886909331D+02-0.4340265787340D+02-0.4331575482384D+02 +-0.4322815678953D+02-0.4313986065369D+02-0.4305086334268D+02-0.4296116183110D+02 +-0.4287075314713D+02-0.4277963437808D+02-0.4268780267613D+02-0.4259525526436D+02 +-0.4250198944278D+02-0.4240800259471D+02-0.4231329219311D+02-0.4221785580702D+02 +-0.4212169110814D+02-0.4202479587724D+02-0.4192716801066D+02-0.4182880552657D+02 +-0.4172970657123D+02-0.4162986942478D+02-0.4152929250699D+02-0.4142797438248D+02 +-0.4132591376546D+02-0.4122310952415D+02-0.4111956068435D+02-0.4101526643252D+02 +-0.4091022611799D+02-0.4080443925436D+02-0.4069790551997D+02-0.4059062475744D+02 +-0.4048259697200D+02-0.4037382232884D+02-0.4026430114924D+02-0.4015403390548D+02 +-0.4004302121449D+02-0.3993126383031D+02-0.3981876263529D+02-0.3970551863000D+02 +-0.3959153292214D+02-0.3947680671418D+02-0.3936134129010D+02-0.3924513800125D+02 +-0.3912819825140D+02-0.3901052348125D+02-0.3889211515259D+02-0.3877297473220D+02 +-0.3865310367583D+02-0.3853250341248D+02-0.3841117532917D+02-0.3828912075654D+02 +-0.3816634095549D+02-0.3804283710513D+02-0.3791861029232D+02-0.3779366150300D+02 +-0.3766799161555D+02-0.3754160139636D+02-0.3741449149782D+02-0.3728666245883D+02 +-0.3715811470790D+02-0.3702884856900D+02-0.3689886427010D+02-0.3676816195438D+02 +-0.3663674169408D+02-0.3650460350690D+02-0.3637174737474D+02-0.3623817326473D+02 +-0.3610388115218D+02-0.3596887104531D+02-0.3583314301154D+02-0.3569669720495D+02 +-0.3555953389464D+02-0.3542165349386D+02-0.3528305658922D+02-0.3514374397011D+02 +-0.3500371665774D+02-0.3486297593358D+02-0.3472152336690D+02-0.3457936084122D+02 +-0.3443649057928D+02-0.3429291516643D+02-0.3414863757211D+02-0.3400366116934D+02 +-0.3385798975190D+02-0.3371162754922D+02-0.3356457923876D+02-0.3341684995570D+02 +-0.3326844530007D+02-0.3311937134098D+02-0.3296963461820D+02-0.3281924214079D+02 +-0.3266820138293D+02-0.3251652027694D+02-0.3236420720350D+02-0.3221127097903D+02 +-0.3205772084042D+02-0.3190356642710D+02-0.3174881776049D+02-0.3159348522098D+02 +-0.3143757952257D+02-0.3128111168511D+02-0.3112409300454D+02-0.3096653502093D+02 +-0.3080844948479D+02-0.3064984832153D+02-0.3049074359439D+02-0.3033114746593D+02 +-0.3017107215833D+02-0.3001052991254D+02-0.2984953294675D+02-0.2968809341400D+02 +-0.2952622335948D+02-0.2936393467762D+02-0.2920123906907D+02-0.2903814799805D+02 +-0.2887467265011D+02-0.2871082389066D+02-0.2854661222446D+02-0.2838204775647D+02 +-0.2821714015409D+02-0.2805189861135D+02-0.2788633181514D+02-0.2772044791378D+02 +-0.2755425448842D+02-0.2738775852723D+02-0.2722096640307D+02-0.2705388385454D+02 +-0.2688651597109D+02-0.2671886718221D+02-0.2655094125117D+02-0.2638274127348D+02 +-0.2621426968047D+02-0.2604552824823D+02-0.2587651811214D+02-0.2570723978730D+02 +-0.2553769319514D+02-0.2536787769632D+02-0.2519779213021D+02-0.2502743486110D+02 +-0.2485680383129D+02-0.2468589662112D+02-0.2451471051601D+02-0.2434324258050D+02 +-0.2417148973924D+02-0.2399944886481D+02-0.2382711687194D+02-0.2365449081810D+02 +-0.2348156800981D+02-0.2330834611404D+02-0.2313482327422D+02-0.2296099822964D+02 +-0.2278687043744D+02-0.2261244019567D+02-0.2243770876615D+02-0.2226267849517D+02 +-0.2208735293014D+02-0.2191173693001D+02-0.2173583676674D+02-0.2155966021537D+02 +-0.2138321662948D+02-0.2120651699903D+02-0.2102957398727D+02-0.2085240194340D+02 +-0.2067501688787D+02-0.2049743646710D+02-0.2031967987514D+02-0.2014176773999D+02 +-0.1996372197331D+02-0.1978556558301D+02-0.1960732244950D+02-0.1942901706755D+02 +-0.1925067425750D+02-0.1907231885074D+02-0.1889397535633D+02-0.1871566761696D+02 +-0.1853741846374D+02-0.1835924938052D+02-0.1818118018868D+02-0.1800322876380D+02 +-0.1782541079491D+02-0.1764773959582D+02-0.1747022597686D+02-0.1729287818264D+02 +-0.1711570189939D+02-0.1693870033244D+02-0.1676187435187D+02-0.1658522270158D+02 +-0.1640874226459D+02-0.1623242837596D+02-0.1605627517269D+02-0.1588027596970D+02 +-0.1570442365062D+02-0.1552871106216D+02-0.1535313140208D+02-0.1517767859145D+02 +-0.1500234762341D+02-0.1482713488228D+02-0.1465203842815D+02-0.1447705824363D+02 +-0.1430219644106D+02-0.1412745742929D+02-0.1395284804054D+02-0.1377837761854D+02 +-0.1360405806987D+02-0.1342990388081D+02-0.1325593210249D+02-0.1308216230731D+02 +-0.1290861651951D+02-0.1273531912305D+02-0.1256229674959D+02-0.1238957814960D+02 +-0.1221719404907D+02-0.1204517699438D+02-0.1187356118783D+02-0.1170238231558D+02 +-0.1153167737042D+02-0.1136148447069D+02-0.1119184267735D+02-0.1102279181034D+02 +-0.1085437226576D+02-0.1068662483495D+02-0.1051959052659D+02-0.1035331039265D+02 +-0.1018782535928D+02-0.1002317606321D+02-0.9859402694342D+01-0.9696544845323D+01 +-0.9534641368482D+01-0.9373730240659D+01-0.9213848436346D+01-0.9055031809511D+01 +-0.8897314984394D+01-0.8740731255549D+01-0.8585312497336D+01-0.8431089083029D+01 +-0.8278089813661D+01-0.8126341856676D+01-0.7975870694439D+01-0.7826700082584D+01 +-0.7678852018171D+01-0.7532346717566D+01-0.7387202603932D+01-0.7243436304187D+01 +-0.7101062655233D+01-0.6960094719270D+01-0.6820543807924D+01-0.6682419514939D+01 +-0.6545729757123D+01-0.6410480823229D+01-0.6276677430423D+01-0.6144322787958D+01 +-0.6013418667669D+01-0.5883965480867D+01-0.5755962361193D+01-0.5629407252975D+01 +-0.5504297004604D+01-0.5380627466436D+01-0.5258393592702D+01-0.5137589546863D+01 +-0.5018208809882D+01-0.4900244290793D+01-0.4783688438971D+01-0.4668533357470D+01 +-0.4554770916754D+01-0.4442392868124D+01-0.4331390956131D+01-0.4221757029192D+01 +-0.4113483147635D+01-0.4006561688322D+01-0.3900985445011D+01-0.3796747723533D+01 +-0.3693842430876D+01-0.3592264157211D+01-0.3492008249906D+01-0.3393070878541D+01 +-0.3295449089976D+01-0.3199140852531D+01-0.3104145088414D+01-0.3010461693592D+01 +-0.2918091544431D+01-0.2827036490592D+01-0.2737299333835D+01-0.2648883792669D+01 +-0.2561794453010D+01-0.2476036705393D+01-0.2391616669610D+01-0.2308541108029D+01 +-0.2226817329318D+01-0.2146453084634D+01-0.2067456458802D+01-0.1989835759339D+01 +-0.1913599406514D+01-0.1838755827812D+01-0.1765313360391D+01-0.1693280165020D+01 +-0.1622664154978D+01-0.1553472943063D+01-0.1485713809518D+01-0.1419393693186D+01 +-0.1354519207570D+01-0.1291096682842D+01-0.1229132234097D+01-0.1168631855453D+01 +-0.1109601538882D+01-0.1052047416050D+01-0.9959759208814D+00-0.9413939701484D+00 +-0.8883091590719D+00-0.8367299687430D+00-0.7866659821253D+00-0.7381281054637D+00 +-0.6911287920896D+00-0.6456822658698D+00-0.6018047418553D+00-0.5595146420441D+00 +-0.5188328045500D+00-0.4797826848498D+00-0.4423905481512D+00-0.4066856522662D+00 +-0.3727004206897D+00-0.3404706058472D+00-0.3100354427093D+00-0.2814377931599D+00 +-0.2547240189175D+00 + 0.0000000000000D+00 + 1012 0.2770741520224D+01 + 0.2150927949039D-04 0.2202124536575D-04 0.2254539478646D-04 0.2308201760180D-04 + 0.2363141055333D-04 0.2419387743865D-04 0.2476972927906D-04 0.2535928449121D-04 + 0.2596286906285D-04 0.2658081673262D-04 0.2721346917432D-04 0.2786117618535D-04 + 0.2852429587973D-04 0.2920319488569D-04 0.2989824854795D-04 0.3060984113473D-04 + 0.3133836604977D-04 0.3208422604934D-04 0.3284783346437D-04 0.3362961042788D-04 + 0.3442998910781D-04 0.3524941194536D-04 0.3608833189898D-04 0.3694721269416D-04 + 0.3782652907911D-04 0.3872676708658D-04 0.3964842430179D-04 0.4059201013679D-04 + 0.4155804611131D-04 0.4254706614023D-04 0.4355961682789D-04 0.4459625776943D-04 + 0.4565756185917D-04 0.4674411560639D-04 0.4785651945856D-04 0.4899538813222D-04 + 0.5016135095172D-04 0.5135505219602D-04 0.5257715145361D-04 0.5382832398596D-04 + 0.5510926109951D-04 0.5642067052648D-04 0.5776327681476D-04 0.5913782172693D-04 + 0.6054506464885D-04 0.6198578300785D-04 0.6346077270088D-04 0.6497084853274D-04 + 0.6651684466474D-04 0.6809961507398D-04 0.6972003402351D-04 0.7137899654355D-04 + 0.7307741892426D-04 0.7481623921999D-04 0.7659641776564D-04 0.7841893770513D-04 + 0.8028480553242D-04 0.8219505164534D-04 0.8415073091254D-04 0.8615292325379D-04 + 0.8820273423416D-04 0.9030129567206D-04 0.9244976626185D-04 0.9464933221109D-04 + 0.9690120789284D-04 0.9920663651351D-04 0.1015668907964D-03 0.1039832736813D-03 + 0.1064571190411D-03 0.1089897924148D-03 0.1115826917580D-03 0.1142372482113D-03 + 0.1169549268870D-03 0.1197372276738D-03 0.1225856860613D-03 0.1255018739831D-03 + 0.1284874006808D-03 0.1315439135877D-03 0.1346730992336D-03 0.1378766841712D-03 + 0.1411564359238D-03 0.1445141639563D-03 0.1479517206680D-03 0.1514710024102D-03 + 0.1550739505263D-03 0.1587625524179D-03 0.1625388426349D-03 0.1664049039925D-03 + 0.1703628687133D-03 0.1744149195974D-03 0.1785632912194D-03 0.1828102711544D-03 + 0.1871582012321D-03 0.1916094788209D-03 0.1961665581427D-03 0.2008319516176D-03 + 0.2056082312418D-03 0.2104980299966D-03 0.2155040432913D-03 0.2206290304405D-03 + 0.2258758161753D-03 0.2312472921908D-03 0.2367464187300D-03 0.2423762262044D-03 + 0.2481398168542D-03 0.2540403664457D-03 0.2600811260106D-03 0.2662654236245D-03 + 0.2725966662290D-03 0.2790783414953D-03 0.2857140197324D-03 0.2925073558401D-03 + 0.2994620913080D-03 0.3065820562611D-03 0.3138711715547D-03 0.3213334509168D-03 + 0.3289730031429D-03 0.3367940343406D-03 0.3448008502286D-03 0.3529978584881D-03 + 0.3613895711713D-03 0.3699806071650D-03 0.3787756947128D-03 0.3877796739964D-03 + 0.3969974997780D-03 0.4064342441040D-03 0.4160950990725D-03 0.4259853796663D-03 + 0.4361105266519D-03 0.4464761095462D-03 0.4570878296540D-03 0.4679515231757D-03 + 0.4790731643881D-03 0.4904588689006D-03 0.5021148969868D-03 0.5140476569946D-03 + 0.5262637088364D-03 0.5387697675611D-03 0.5515727070097D-03 0.5646795635561D-03 + 0.5780975399370D-03 0.5918340091694D-03 0.6058965185620D-03 0.6202927938188D-03 + 0.6350307432396D-03 0.6501184620192D-03 0.6655642366457D-03 0.6813765494038D-03 + 0.6975640829812D-03 0.7141357251847D-03 0.7311005737650D-03 0.7484679413557D-03 + 0.7662473605260D-03 0.7844485889531D-03 0.8030816147148D-03 0.8221566617048D-03 + 0.8416841951763D-03 0.8616749274129D-03 0.8821398235337D-03 0.9030901074324D-03 + 0.9245372678559D-03 0.9464930646236D-03 0.9689695349932D-03 0.9919790001731D-03 + 0.1015534071988D-02 0.1039647659698D-02 0.1064332976981D-02 0.1089603549068D-02 + 0.1115473220057D-02 0.1141956160389D-02 0.1169066874495D-02 0.1196820208634D-02 + 0.1225231358897D-02 0.1254315879409D-02 0.1284089690715D-02 0.1314569088366D-02 + 0.1345770751696D-02 0.1377711752814D-02 0.1410409565795D-02 0.1443882076088D-02 + 0.1478147590144D-02 0.1513224845264D-02 0.1549133019674D-02 0.1585891742841D-02 + 0.1623521106018D-02 0.1662041673040D-02 0.1701474491365D-02 0.1741841103378D-02 + 0.1783163557945D-02 0.1825464422244D-02 0.1868766793867D-02 0.1913094313196D-02 + 0.1958471176071D-02 0.2004922146751D-02 0.2052472571166D-02 0.2101148390486D-02 + 0.2150976154989D-02 0.2201983038264D-02 0.2254196851731D-02 0.2307646059493D-02 + 0.2362359793542D-02 0.2418367869301D-02 0.2475700801533D-02 0.2534389820612D-02 + 0.2594466889165D-02 0.2655964719104D-02 0.2718916789042D-02 0.2783357362106D-02 + 0.2849321504172D-02 0.2916845102501D-02 0.2985964884814D-02 0.3056718438800D-02 + 0.3129144232066D-02 0.3203281632551D-02 0.3279170929405D-02 0.3356853354336D-02 + 0.3436371103460D-02 0.3517767359634D-02 0.3601086315312D-02 0.3686373195913D-02 + 0.3773674283724D-02 0.3863036942351D-02 0.3954509641719D-02 0.4048141983652D-02 + 0.4143984728019D-02 0.4242089819491D-02 0.4342510414893D-02 0.4445300911185D-02 + 0.4550516974067D-02 0.4658215567249D-02 0.4768454982366D-02 0.4881294869584D-02 + 0.4996796268890D-02 0.5115021642093D-02 0.5236034905549D-02 0.5359901463622D-02 + 0.5486688242898D-02 0.5616463727181D-02 0.5749297993262D-02 0.5885262747508D-02 + 0.6024431363262D-02 0.6166878919093D-02 0.6312682237899D-02 0.6461919926891D-02 + 0.6614672418475D-02 0.6771022012045D-02 0.6931052916716D-02 0.7094851295016D-02 + 0.7262505307545D-02 0.7434105158642D-02 0.7609743143066D-02 0.7789513693721D-02 + 0.7973513430440D-02 0.8161841209859D-02 0.8354598176397D-02 0.8551887814376D-02 + 0.8753816001287D-02 0.8960491062250D-02 0.9172023825667D-02 0.9388527680122D-02 + 0.9610118632529D-02 0.9836915367568D-02 0.1006903930843D-01 0.1030661467892D-01 + 0.1054976856688D-01 0.1079863098909D-01 0.1105333495749D-01 0.1131401654696D-01 + 0.1158081496451D-01 0.1185387262003D-01 0.1213333519856D-01 0.1241935173418D-01 + 0.1271207468545D-01 0.1301166001257D-01 0.1331826725616D-01 0.1363205961778D-01 + 0.1395320404221D-01 0.1428187130150D-01 0.1461823608081D-01 0.1496247706623D-01 + 0.1531477703430D-01 0.1567532294367D-01 0.1604430602860D-01 0.1642192189452D-01 + 0.1680837061563D-01 0.1720385683464D-01 0.1760858986456D-01 0.1802278379280D-01 + 0.1844665758734D-01 0.1888043520531D-01 0.1932434570378D-01 0.1977862335297D-01 + 0.2024350775185D-01 0.2071924394615D-01 0.2120608254895D-01 0.2170427986376D-01 + 0.2221409801021D-01 0.2273580505238D-01 0.2326967512987D-01 0.2381598859160D-01 + 0.2437503213237D-01 0.2494709893234D-01 0.2553248879941D-01 0.2613150831454D-01 + 0.2674447098014D-01 0.2737169737147D-01 0.2801351529124D-01 0.2867025992742D-01 + 0.2934227401421D-01 0.3002990799646D-01 0.3073352019732D-01 0.3145347698951D-01 + 0.3219015296988D-01 0.3294393113773D-01 0.3371520307664D-01 0.3450436914006D-01 + 0.3531183864059D-01 0.3613803004319D-01 0.3698337116219D-01 0.3784829936233D-01 + 0.3873326176383D-01 0.3963871545150D-01 0.4056512768813D-01 0.4151297613205D-01 + 0.4248274905905D-01 0.4347494558865D-01 0.4449007591493D-01 0.4552866154180D-01 + 0.4659123552298D-01 0.4767834270657D-01 0.4879053998454D-01 0.4992839654695D-01 + 0.5109249414114D-01 0.5228342733595D-01 0.5350180379101D-01 0.5474824453121D-01 + 0.5602338422639D-01 0.5732787147645D-01 0.5866236910176D-01 0.6002755443915D-01 + 0.6142411964345D-01 0.6285277199472D-01 0.6431423421119D-01 0.6580924476805D-01 + 0.6733855822219D-01 0.6890294554290D-01 0.7050319444864D-01 0.7214010975008D-01 + 0.7381451369925D-01 0.7552724634520D-01 0.7727916589591D-01 0.7907114908690D-01 + 0.8090409155624D-01 0.8277890822643D-01 0.8469653369292D-01 0.8665792261951D-01 + 0.8866405014071D-01 0.9071591227111D-01 0.9281452632182D-01 0.9496093132410D-01 + 0.9715618846031D-01 0.9940138150208D-01 0.1016976172560D+00 0.1040460260169D+00 + 0.1064477620282D+00 0.1089040039508D+00 0.1114159553388D+00 0.1139848451236D+00 + 0.1166119281054D+00 0.1192984854532D+00 0.1220458252122D+00 0.1248552828197D+00 + 0.1277282216288D+00 0.1306660334408D+00 0.1336701390448D+00 0.1367419887670D+00 + 0.1398830630269D+00 0.1430948729031D+00 0.1463789607067D+00 0.1497369005636D+00 + 0.1531702990050D+00 0.1566807955666D+00 0.1602700633964D+00 0.1639398098711D+00 + 0.1676917772207D+00 0.1715277431623D+00 0.1754495215419D+00 0.1794589629856D+00 + 0.1835579555582D+00 0.1877484254317D+00 0.1920323375616D+00 0.1964116963718D+00 + 0.2008885464482D+00 0.2054649732406D+00 0.2101431037732D+00 0.2149251073635D+00 + 0.2198131963488D+00 0.2248096268222D+00 0.2299166993754D+00 0.2351367598503D+00 + 0.2404722000984D+00 0.2459254587480D+00 0.2514990219789D+00 0.2571954243047D+00 + 0.2630172493626D+00 0.2689671307106D+00 0.2750477526311D+00 0.2812618509418D+00 + 0.2876122138134D+00 0.2941016825931D+00 0.3007331526352D+00 0.3075095741362D+00 + 0.3144339529771D+00 0.3215093515700D+00 0.3287388897102D+00 0.3361257454325D+00 + 0.3436731558729D+00 0.3513844181328D+00 0.3592628901485D+00 0.3673119915621D+00 + 0.3755352045968D+00 0.3839360749336D+00 0.3925182125899D+00 0.4012852927993D+00 + 0.4102410568930D+00 0.4193893131804D+00 0.4287339378299D+00 0.4382788757486D+00 + 0.4480281414604D+00 0.4579858199819D+00 0.4681560676951D+00 0.4785431132164D+00 + 0.4891512582614D+00 0.4999848785043D+00 0.5110484244305D+00 0.5223464221834D+00 + 0.5338834744021D+00 0.5456642610510D+00 0.5576935402392D+00 0.5699761490289D+00 + 0.5825170042325D+00 0.5953211031952D+00 0.6083935245653D+00 0.6217394290472D+00 + 0.6353640601390D+00 0.6492727448516D+00 0.6634708944082D+00 0.6779640049238D+00 + 0.6927576580616D+00 0.7078575216668D+00 0.7232693503742D+00 0.7389989861895D+00 + 0.7550523590420D+00 0.7714354873073D+00 0.7881544782973D+00 0.8052155287175D+00 + 0.8226249250876D+00 0.8403890441249D+00 0.8585143530879D+00 0.8770074100784D+00 + 0.8958748642992D+00 0.9151234562658D+00 0.9347600179702D+00 0.9547914729931D+00 + 0.9752248365635D+00 0.9960672155622D+00 0.1017325808468D+01 0.1039007905241D+01 + 0.1061120887144D+01 0.1083672226499D+01 0.1106669486370D+01 0.1130120320176D+01 + 0.1154032471231D+01 0.1178413772204D+01 0.1203272144493D+01 0.1228615597523D+01 + 0.1254452227950D+01 0.1280790218774D+01 0.1307637838359D+01 0.1335003439353D+01 + 0.1362895457506D+01 0.1391322410385D+01 0.1420292895972D+01 0.1449815591159D+01 + 0.1479899250115D+01 0.1510552702537D+01 0.1541784851777D+01 0.1573604672833D+01 + 0.1606021210210D+01 0.1639043575644D+01 0.1672680945677D+01 0.1706942559091D+01 + 0.1741837714186D+01 0.1777375765901D+01 0.1813566122779D+01 0.1850418243757D+01 + 0.1887941634794D+01 0.1926145845317D+01 0.1965040464488D+01 0.2004635117287D+01 + 0.2044939460400D+01 0.2085963177919D+01 0.2127715976829D+01 0.2170207582300D+01 + 0.2213447732763D+01 0.2257446174769D+01 0.2302212657626D+01 0.2347756927812D+01 + 0.2394088723154D+01 0.2441217766767D+01 0.2489153760756D+01 0.2537906379665D+01 + 0.2587485263675D+01 0.2637900011547D+01 0.2689160173295D+01 0.2741275242598D+01 + 0.2794254648931D+01 0.2848107749430D+01 0.2902843820459D+01 0.2958472048904D+01 + 0.3015001523163D+01 0.3072441223848D+01 0.3130800014182D+01 0.3190086630094D+01 + 0.3250309670002D+01 0.3311477584285D+01 0.3373598664440D+01 0.3436681031917D+01 + 0.3500732626634D+01 0.3565761195166D+01 0.3631774278604D+01 0.3698779200090D+01 + 0.3766783052007D+01 0.3835792682854D+01 0.3905814683769D+01 0.3976855374728D+01 + 0.4048920790399D+01 0.4122016665671D+01 0.4196148420834D+01 0.4271321146438D+01 + 0.4347539587809D+01 0.4424808129241D+01 0.4503130777854D+01 0.4582511147131D+01 + 0.4662952440136D+01 0.4744457432406D+01 0.4827028454547D+01 0.4910667374509D+01 + 0.4995375579573D+01 0.5081153958042D+01 0.5168002880655D+01 0.5255922181721D+01 + 0.5344911139992D+01 0.5434968459290D+01 0.5526092248881D+01 0.5618280003639D+01 + 0.5711528583982D+01 0.5805834195616D+01 0.5901192369103D+01 0.5997597939257D+01 + 0.6095045024395D+01 0.6193527005472D+01 0.6293036505099D+01 0.6393565366487D+01 + 0.6495104632331D+01 0.6597644523660D+01 0.6701174418681D+01 0.6805682831645D+01 + 0.6911157391760D+01 0.7017584822191D+01 0.7124950919171D+01 0.7233240531258D+01 + 0.7342437538781D+01 0.7452524833500D+01 0.7563484298530D+01 0.7675296788562D+01 + 0.7787942110430D+01 0.7901399004058D+01 0.8015645123842D+01 0.8130657020509D+01 + 0.8246410123503D+01 0.8362878723950D+01 0.8480035958250D+01 0.8597853792358D+01 + 0.8716303006799D+01 0.8835353182487D+01 0.8954972687391D+01 0.9075128664130D+01 + 0.9195787018538D+01 0.9316912409273D+01 0.9438468238543D+01 0.9560416644000D+01 + 0.9682718491880D+01 0.9805333371460D+01 0.9928219590896D+01 0.1005133417453D+02 + 0.1017463286171D+02 0.1029807010722D+02 0.1042159908344D+02 0.1054517168417D+02 + 0.1066873853037D+02 0.1079224897780D+02 0.1091565112659D+02 0.1103889183301D+02 + 0.1116191672323D+02 0.1128467020944D+02 0.1140709550823D+02 0.1152913466133D+02 + 0.1165072855885D+02 0.1177181696506D+02 0.1189233854680D+02 0.1201223090454D+02 + 0.1213143060625D+02 0.1224987322407D+02 0.1236749337400D+02 0.1248422475837D+02 + 0.1260000021157D+02 0.1271475174875D+02 0.1282841061773D+02 0.1294090735413D+02 + 0.1305217183979D+02 0.1316213336451D+02 0.1327072069111D+02 0.1337786212400D+02 + 0.1348348558110D+02 0.1358751866928D+02 0.1368988876325D+02 0.1379052308804D+02 + 0.1388934880491D+02 0.1398629310084D+02 0.1408128328150D+02 0.1417424686776D+02 + 0.1426511169568D+02 0.1435380601989D+02 0.1444025862047D+02 0.1452439891313D+02 + 0.1460615706273D+02 0.1468546410000D+02 0.1476225204147D+02 0.1483645401237D+02 + 0.1490800437259D+02 0.1497683884540D+02 0.1504289464893D+02 0.1510611063019D+02 + 0.1516642740155D+02 0.1522378747941D+02 0.1527813542502D+02 0.1532941798703D+02 + 0.1537758424592D+02 0.1542258575964D+02 0.1546437671057D+02 0.1550291405346D+02 + 0.1553815766392D+02 0.1557007048740D+02 0.1559861868825D+02 0.1562377179849D+02 + 0.1564550286611D+02 0.1566378860245D+02 0.1567860952827D+02 0.1568995011828D+02 + 0.1569779894358D+02 0.1570214881171D+02 0.1570299690387D+02 0.1570034490889D+02 + 0.1569419915342D+02 0.1568457072811D+02 0.1567147560898D+02 0.1565493477391D+02 + 0.1563497431333D+02 0.1561162553504D+02 0.1558492506233D+02 0.1555491492507D+02 + 0.1552164264320D+02 0.1548516130217D+02 0.1544552961962D+02 0.1540281200312D+02 + 0.1535707859803D+02 0.1530840532536D+02 0.1525687390884D+02 0.1520257189079D+02 + 0.1514559263632D+02 0.1508603532531D+02 0.1502400493172D+02 0.1495961218971D+02 + 0.1489297354623D+02 0.1482421109950D+02 0.1475345252306D+02 0.1468083097499D+02 + 0.1460648499184D+02 0.1453055836709D+02 0.1445320001360D+02 0.1437456381003D+02 + 0.1429480843075D+02 0.1421409715909D+02 0.1413259768392D+02 0.1405048187912D+02 + 0.1396792556614D+02 0.1388510825940D+02 0.1380221289467D+02 0.1371942554036D+02 + 0.1363693509198D+02 0.1355493294972D+02 0.1347361267958D+02 0.1339316965818D+02 + 0.1331380070165D+02 0.1323570367897D+02 0.1315907711016D+02 0.1308411975004D+02 + 0.1301103015787D+02 0.1294000625373D+02 0.1287124486230D+02 0.1280494124477D+02 + 0.1274128861984D+02 0.1268047767460D+02 0.1262269606643D+02 0.1256812791682D+02 + 0.1251695329838D+02 0.1246934771604D+02 0.1242548158392D+02 0.1238551969900D+02 + 0.1234962071295D+02 0.1231793660373D+02 0.1229061214824D+02 0.1226778439767D+02 + 0.1224958215706D+02 0.1223612547078D+02 0.1222752511553D+02 0.1222388210258D+02 + 0.1222528719100D+02 0.1223182041366D+02 0.1224355061775D+02 0.1226053502171D+02 + 0.1228281879023D+02 0.1231043462935D+02 0.1234340240339D+02 0.1238172877543D+02 + 0.1242540687338D+02 0.1247441598324D+02 0.1252872127141D+02 0.1258827353770D+02 + 0.1265300900087D+02 0.1272284911822D+02 0.1279770044081D+02 0.1287745450601D+02 + 0.1296198776857D+02 0.1305116157186D+02 0.1314482216032D+02 0.1324280073454D+02 + 0.1334491354991D+02 0.1345096205988D+02 0.1356073310471D+02 0.1367399914649D+02 + 0.1379051855093D+02 0.1391003591655D+02 0.1403228245150D+02 0.1415697639825D+02 + 0.1428382350615D+02 0.1441251755180D+02 0.1454274090682D+02 0.1467416515265D+02 + 0.1480645174180D+02 0.1493925270450D+02 0.1507221140012D+02 0.1520496331175D+02 + 0.1533713688305D+02 0.1546835439544D+02 0.1559823288411D+02 0.1572638509088D+02 + 0.1585242045188D+02 0.1597594611769D+02 0.1609656800349D+02 0.1621389186673D+02 + 0.1632752440935D+02 0.1643707440175D+02 0.1654215382521D+02 0.1664237902974D+02 + 0.1673737190368D+02 0.1682676105166D+02 0.1691018297723D+02 0.1698728326633D+02 + 0.1705771776761D+02 0.1712115376582D+02 0.1717727114395D+02 0.1722576353007D+02 + 0.1726633942470D+02 0.1729872330429D+02 0.1732265669667D+02 0.1733789922408D+02 + 0.1734422960952D+02 0.1734144664198D+02 0.1732937009656D+02 0.1730784160492D+02 + 0.1727672547225D+02 0.1723590943644D+02 0.1718530536559D+02 0.1712484989008D+02 + 0.1705450496536D+02 0.1697425836203D+02 0.1688412407975D+02 0.1678414268193D+02 + 0.1667438154808D+02 0.1655493504124D+02 0.1642592458792D+02 0.1628749866833D+02 + 0.1613983271513D+02 0.1598312891883D+02 0.1581761593876D+02 0.1564354851859D+02 + 0.1546120700566D+02 0.1527089677411D+02 0.1507294755170D+02 0.1486771265109D+02 + 0.1465556810624D+02 0.1443691171558D+02 0.1421216199343D+02 0.1398175703206D+02 + 0.1374615327696D+02 0.1350582421831D+02 0.1326125900230D+02 0.1301296096613D+02 + 0.1276144610103D+02 0.1250724144826D+02 0.1225088343315D+02 0.1199291614280D+02 + 0.1173388955369D+02 0.1147435771520D+02 0.1121487689618D+02 0.1095600370143D+02 + 0.1069829316549D+02 0.1044229683153D+02 0.1018856082317D+02 0.9937623917321D+01 + 0.9690015626445D+01 0.9446254298643D+01 0.9206845244038D+01 0.8972278896087D+01 + 0.8743029016360D+01 0.8519550951297D+01 0.8302279949355D+01 0.8091629546790D+01 + 0.7887990030116D+01 0.7691726983014D+01 0.7503179925129D+01 0.7322661049902D+01 + 0.7150454068046D+01 0.6986813162918D+01 0.6831962063451D+01 0.6686093239819D+01 + 0.6549367226364D+01 0.6421912075717D+01 0.6303822947394D+01 0.6195161833447D+01 + 0.6095957423078D+01 0.6006205107394D+01 0.5925867124779D+01 0.5854872846611D+01 + 0.5793119202371D+01 0.5740471242429D+01 0.5696762836121D+01 0.5661797502031D+01 + 0.5635349366701D+01 0.5617164247353D+01 0.5606960853570D+01 0.5604432102259D+01 + 0.5609246539649D+01 0.5621049863505D+01 0.5639466538232D+01 0.5664101495024D+01 + 0.5694541908766D+01 0.5730359042993D+01 0.5771110153784D+01 0.5816340443192D+01 + 0.5865585052475D+01 0.5918371085180D+01 0.5974219649957D+01 0.6032647912832D+01 + 0.6093171148637D+01 0.6155304781260D+01 0.6218566402475D+01 0.6282477759234D+01 + 0.6346566699475D+01 0.6410369066815D+01 0.6473430534781D+01 0.6535308371644D+01 + 0.6595573127395D+01 0.6653810234872D+01 0.6709621517670D+01 0.6762626598041D+01 + 0.6812464198680D+01 0.6858793332986D+01 0.6901294379138D+01 0.6939670034070D+01 + 0.6973646144233D+01 0.7002972410830D+01 0.7027422967990D+01 0.7046796833200D+01 + 0.7060918230061D+01 0.7069636784259D+01 0.7072827594374D+01 0.7070391179926D+01 + 0.7062253309715D+01 0.7048364714231D+01 0.7028700686483D+01 0.7003260576238D+01 + 0.6972067183121D+01 0.6935166054562D+01 0.6892624694966D+01 0.6844531692843D+01 + 0.6790995772965D+01 0.6732144780827D+01 0.6668124606899D+01 0.6599098058289D+01 + 0.6525243685473D+01 0.6446754571799D+01 0.6363837093418D+01 0.6276709657188D+01 + 0.6185601423998D+01 0.6090751024726D+01 0.5992405275866D+01 0.5890817901556D+01 + 0.5786248268476D+01 0.5678960139726D+01 0.5569220453475D+01 0.5457298131760D+01 + 0.5343462924443D+01 0.5227984292928D+01 0.5111130337809D+01 0.4993166774192D+01 + 0.4874355958030D+01 0.4754955966341D+01 0.4635219733799D+01 0.4515394247714D+01 + 0.4395719803061D+01 0.4276429318764D+01 0.4157747716089D+01 0.4039891359594D+01 + 0.3923067560758D+01 0.3807474144035D+01 0.3693299074769D+01 0.3580720148118D+01 + 0.3469904737816D+01 0.3361009603367D+01 0.3254180754011D+01 0.3149553367571D+01 + 0.3047251762116D+01 0.2947389418162D+01 0.2850069049006D+01 0.2755382716614D+01 + 0.2663411990420D+01 0.2574228146230D+01 0.2487892402405D+01 0.2404456190400D+01 + 0.2323961456713D+01 0.2246440993268D+01 0.2171918793250D+01 0.2100410429420D+01 + 0.2031923451965D+01 0.1966457802972D+01 0.1904006244666D+01 0.1844554798640D+01 + 0.1788083193345D+01 0.1734565317240D+01 0.1683969675070D+01 0.1636259844862D+01 + 0.1591394933364D+01 0.1549330027746D+01 0.1510016641546D+01 0.1473403152964D+01 + 0.1439435233770D+01 0.1408056267219D+01 0.1379207753531D+01 0.1352829701650D+01 + 0.1328861006133D+01 0.1307239808175D+01 0.1287903839946D+01 0.1270790751526D+01 + 0.1255838419882D+01 0.1242985239474D+01 0.1232170394175D+01 0.1223334110328D+01 + 0.1216417890857D+01 0.1211364730456D+01 0.1208119311934D+01 0.1206628183910D+01 + 0.1206839920052D+01 0.1208705260142D+01 0.1212177233248D+01 0.1217211263310D+01 + 0.1223765257423D+01 0.1231799677111D+01 0.1241277592815D+01 0.1252164721788D+01 + 0.1264429449524D+01 0.1278042834732D+01 0.1292978597814D+01 0.1309213092627D+01 + 0.1326725261233D+01 0.1345496571135D+01 0.1365510934358D+01 0.1386754607532D+01 + 0.1409215426363D+01 0.1433003097507D+01 0.1458223277591D+01 0.1484860699421D+01 + 0.1512902583279D+01 0.1542338542721D+01 0.1573160498496D+01 0.1605362600812D+01 + 0.1638941160170D+01 0.1673894586973D+01 0.1710223340083D+01 0.1747929884514D+01 + 7 1012 + 1 0 -1 -511.89150 + 2 0 -1 -58.80097 + 2 1 1 -50.61290 + 2 1 -2 -49.69692 + 3 0 -1 -5.52718 + 3 1 1 -3.14309 + 3 1 -2 -3.03034 + 0.2123373461549D-04 0.2173914995400D-04 0.2225659296114D-04 0.2278634977738D-04 + 0.2332871334728D-04 0.2388398358121D-04 0.2445246752083D-04 0.2503447950857D-04 + 0.2563034136106D-04 0.2624038254674D-04 0.2686494036763D-04 0.2750436014548D-04 + 0.2815899541226D-04 0.2882920810522D-04 0.2951536876657D-04 0.3021785674791D-04 + 0.3093706041946D-04 0.3167337738432D-04 0.3242721469777D-04 0.3319898909177D-04 + 0.3398912720483D-04 0.3479806581728D-04 0.3562625209215D-04 0.3647414382175D-04 + 0.3734220968012D-04 0.3823092948144D-04 0.3914079444457D-04 0.4007230746391D-04 + 0.4102598338660D-04 0.4200234929636D-04 0.4300194480406D-04 0.4402532234512D-04 + 0.4507304748402D-04 0.4614569922601D-04 0.4724387033618D-04 0.4836816766617D-04 + 0.4951921248852D-04 0.5069764083903D-04 0.5190410386721D-04 0.5313926819498D-04 + 0.5440381628400D-04 0.5569844681152D-04 0.5702387505533D-04 0.5838083328767D-04 + 0.5977007117859D-04 0.6119235620880D-04 0.6264847409228D-04 0.6413922920902D-04 + 0.6566544504782D-04 0.6722796465978D-04 0.6882765112238D-04 0.7046538801462D-04 + 0.7214207990339D-04 0.7385865284136D-04 0.7561605487667D-04 0.7741525657465D-04 + 0.7925725155197D-04 0.8114305702331D-04 0.8307371436110D-04 0.8505028966841D-04 + 0.8707387436545D-04 0.8914558578994D-04 0.9126656781168D-04 0.9343799146165D-04 + 0.9566105557602D-04 0.9793698745538D-04 0.1002670435396D-03 0.1026525100984D-03 + 0.1050947039390D-03 0.1075949731294D-03 0.1101546977394D-03 0.1127752905997D-03 + 0.1154581980775D-03 0.1182049008719D-03 0.1210169148270D-03 0.1238957917652D-03 + 0.1268431203390D-03 0.1298605269045D-03 0.1329496764137D-03 0.1361122733297D-03 + 0.1393500625619D-03 0.1426648304247D-03 0.1460584056178D-03 0.1495326602303D-03 + 0.1530895107681D-03 0.1567309192056D-03 0.1604588940629D-03 0.1642754915072D-03 + 0.1681828164816D-03 0.1721830238593D-03 0.1762783196258D-03 0.1804709620887D-03 + 0.1847632631165D-03 0.1891575894056D-03 0.1936563637785D-03 0.1982620665115D-03 + 0.2029772366947D-03 0.2078044736231D-03 0.2127464382210D-03 0.2178058545005D-03 + 0.2229855110531D-03 0.2282882625778D-03 0.2337170314442D-03 0.2392748092933D-03 + 0.2449646586752D-03 0.2507897147258D-03 0.2567531868833D-03 0.2628583606444D-03 + 0.2691085993625D-03 0.2755073460880D-03 0.2820581254518D-03 0.2887645455935D-03 + 0.2956303001344D-03 0.3026591701977D-03 0.3098550264756D-03 0.3172218313454D-03 + 0.3247636410353D-03 0.3324846078408D-03 0.3403889823939D-03 0.3484811159850D-03 + 0.3567654629401D-03 0.3652465830528D-03 0.3739291440747D-03 0.3828179242637D-03 + 0.3919178149916D-03 0.4012338234146D-03 0.4107710752045D-03 0.4205348173457D-03 + 0.4305304209971D-03 0.4407633844209D-03 0.4512393359813D-03 0.4619640372121D-03 + 0.4729433859575D-03 0.4841834195856D-03 0.4956903182785D-03 0.5074704083979D-03 + 0.5195301659314D-03 0.5318762200182D-03 0.5445153565579D-03 0.5574545219044D-03 + 0.5707008266453D-03 0.5842615494708D-03 0.5981441411326D-03 0.6123562284955D-03 + 0.6269056186847D-03 0.6418003033287D-03 0.6570484629028D-03 0.6726584711734D-03 + 0.6886388997468D-03 0.7049985227240D-03 0.7217463214642D-03 0.7388914894603D-03 + 0.7564434373277D-03 0.7744117979097D-03 0.7928064315026D-03 0.8116374312024D-03 + 0.8309151283763D-03 0.8506500982622D-03 0.8708531656989D-03 0.8915354109894D-03 + 0.9127081759015D-03 0.9343830698083D-03 0.9565719759715D-03 0.9792870579714D-03 + 0.1002540766287D-02 0.1026345845027D-02 0.1050715338824D-02 0.1075662599879D-02 + 0.1101201295181D-02 0.1127345413883D-02 0.1154109274864D-02 0.1181507534450D-02 + 0.1209555194328D-02 0.1238267609637D-02 0.1267660497252D-02 0.1297749944251D-02 + 0.1328552416593D-02 0.1360084767981D-02 0.1392364248945D-02 0.1425408516127D-02 + 0.1459235641785D-02 0.1493864123514D-02 0.1529312894196D-02 0.1565601332181D-02 + 0.1602749271697D-02 0.1640777013510D-02 0.1679705335822D-02 0.1719555505429D-02 + 0.1760349289133D-02 0.1802108965417D-02 0.1844857336390D-02 0.1888617740010D-02 + 0.1933414062589D-02 0.1979270751585D-02 0.2026212828687D-02 0.2074265903209D-02 + 0.2123456185786D-02 0.2173810502385D-02 0.2225356308647D-02 0.2278121704551D-02 + 0.2332135449417D-02 0.2387426977257D-02 0.2444026412476D-02 0.2501964585936D-02 + 0.2561273051389D-02 0.2621984102285D-02 0.2684130788965D-02 0.2747746936258D-02 + 0.2812867161465D-02 0.2879526892772D-02 0.2947762388071D-02 0.3017610754222D-02 + 0.3089109966753D-02 0.3162298890003D-02 0.3237217297741D-02 0.3313905894238D-02 + 0.3392406335837D-02 0.3472761253004D-02 0.3555014272883D-02 0.3639210042377D-02 + 0.3725394251736D-02 0.3813613658698D-02 0.3903916113173D-02 0.3996350582488D-02 + 0.4090967177209D-02 0.4187817177547D-02 0.4286953060364D-02 0.4388428526794D-02 + 0.4492298530489D-02 0.4598619306504D-02 0.4707448400838D-02 0.4818844700646D-02 + 0.4932868465127D-02 0.5049581357120D-02 0.5169046475404D-02 0.5291328387739D-02 + 0.5416493164639D-02 0.5544608413917D-02 0.5675743316002D-02 0.5809968660057D-02 + 0.5947356880904D-02 0.6087982096781D-02 0.6231920147946D-02 0.6379248636155D-02 + 0.6530046965011D-02 0.6684396381234D-02 0.6842380016839D-02 0.7004082932273D-02 + 0.7169592160503D-02 0.7338996752102D-02 0.7512387821327D-02 0.7689858593235D-02 + 0.7871504451850D-02 0.8057422989391D-02 0.8247714056607D-02 0.8442479814225D-02 + 0.8641824785540D-02 0.8845855910175D-02 0.9054682599025D-02 0.9268416790430D-02 + 0.9487173007575D-02 0.9711068417172D-02 0.9940222889430D-02 0.1017475905935D-01 + 0.1041480238936D-01 0.1066048123337D-01 0.1091192690214D-01 0.1116927373022D-01 + 0.1143265914425D-01 0.1170222373276D-01 0.1197811131760D-01 0.1226046902681D-01 + 0.1254944736912D-01 0.1284520031015D-01 0.1314788535014D-01 0.1345766360348D-01 + 0.1377469987990D-01 0.1409916276750D-01 0.1443122471744D-01 0.1477106213063D-01 + 0.1511885544620D-01 0.1547478923187D-01 0.1583905227632D-01 0.1621183768351D-01 + 0.1659334296907D-01 0.1698377015868D-01 0.1738332588869D-01 0.1779222150874D-01 + 0.1821067318670D-01 0.1863890201578D-01 0.1907713412394D-01 0.1952560078568D-01 + 0.1998453853608D-01 0.2045418928739D-01 0.2093480044805D-01 0.2142662504416D-01 + 0.2192992184360D-01 0.2244495548276D-01 0.2297199659585D-01 0.2351132194704D-01 + 0.2406321456527D-01 0.2462796388197D-01 0.2520586587156D-01 0.2579722319499D-01 + 0.2640234534617D-01 0.2702154880148D-01 0.2765515717239D-01 0.2830350136121D-01 + 0.2896691972007D-01 0.2964575821319D-01 0.3034037058244D-01 0.3105111851634D-01 + 0.3177837182251D-01 0.3252250860359D-01 0.3328391543683D-01 0.3406298755727D-01 + 0.3486012904465D-01 0.3567575301409D-01 0.3651028181063D-01 0.3736414720771D-01 + 0.3823779060956D-01 0.3913166325773D-01 0.4004622644169D-01 0.4098195171364D-01 + 0.4193932110758D-01 0.4291882736274D-01 0.4392097415138D-01 0.4494627631115D-01 + 0.4599526008193D-01 0.4706846334735D-01 0.4816643588104D-01 0.4928973959763D-01 + 0.5043894880863D-01 0.5161465048329D-01 0.5281744451445D-01 0.5404794398948D-01 + 0.5530677546647D-01 0.5659457925562D-01 0.5791200970601D-01 0.5925973549779D-01 + 0.6063843993988D-01 0.6204882127328D-01 0.6349159298001D-01 0.6496748409788D-01 + 0.6647723954103D-01 0.6802162042643D-01 0.6960140440641D-01 0.7121738600725D-01 + 0.7287037697395D-01 0.7456120662128D-01 0.7629072219118D-01 0.7805978921657D-01 + 0.7986929189166D-01 0.8172013344892D-01 0.8361323654265D-01 0.8554954363940D-01 + 0.8753001741513D-01 0.8955564115940D-01 0.9162741918654D-01 0.9374637725383D-01 + 0.9591356298698D-01 0.9813004631275D-01 0.1003969198990D+00 0.1027152996019D+00 + 0.1050863249211D+00 0.1075111594618D+00 0.1099909914051D+00 0.1125270339855D+00 + 0.1151205259766D+00 0.1177727321842D+00 0.1204849439476D+00 0.1232584796489D+00 + 0.1260946852301D+00 0.1289949347182D+00 0.1319606307590D+00 0.1349932051583D+00 + 0.1380941194317D+00 0.1412648653632D+00 0.1445069655708D+00 0.1478219740820D+00 + 0.1512114769165D+00 0.1546770926778D+00 0.1582204731535D+00 0.1618433039236D+00 + 0.1655473049771D+00 0.1693342313383D+00 0.1732058737000D+00 0.1771640590662D+00 + 0.1812106514032D+00 0.1853475522988D+00 0.1895767016304D+00 0.1939000782413D+00 + 0.1983197006251D+00 0.2028376276193D+00 0.2074559591063D+00 0.2121768367234D+00 + 0.2170024445803D+00 0.2219350099852D+00 0.2269768041788D+00 0.2321301430764D+00 + 0.2373973880172D+00 0.2427809465221D+00 0.2482832730585D+00 0.2539068698131D+00 + 0.2596542874715D+00 0.2655281260047D+00 0.2715310354636D+00 0.2776657167793D+00 + 0.2839349225700D+00 0.2903414579550D+00 0.2968881813739D+00 0.3035780054119D+00 + 0.3104138976312D+00 0.3173988814070D+00 0.3245360367687D+00 0.3318285012460D+00 + 0.3392794707188D+00 0.3468922002717D+00 0.3546700050516D+00 0.3626162611285D+00 + 0.3707344063591D+00 0.3790279412529D+00 0.3875004298396D+00 0.3961555005386D+00 + 0.4049968470283D+00 0.4140282291162D+00 0.4232534736091D+00 0.4326764751811D+00 + 0.4423011972414D+00 0.4521316727988D+00 0.4621720053237D+00 0.4724263696067D+00 + 0.4828990126121D+00 0.4935942543268D+00 0.5045164886027D+00 0.5156701839924D+00 + 0.5270598845772D+00 0.5386902107861D+00 0.5505658602051D+00 0.5626916083760D+00 + 0.5750723095830D+00 0.5877128976270D+00 0.6006183865849D+00 0.6137938715547D+00 + 0.6272445293836D+00 0.6409756193782D+00 0.6549924839961D+00 0.6693005495166D+00 + 0.6839053266899D+00 0.6988124113627D+00 0.7140274850788D+00 0.7295563156538D+00 + 0.7454047577210D+00 0.7615787532478D+00 0.7780843320207D+00 0.7949276120969D+00 + 0.8121148002200D+00 0.8296521921997D+00 0.8475461732513D+00 0.8658032182945D+00 + 0.8844298922086D+00 0.9034328500427D+00 0.9228188371772D+00 0.9425946894360D+00 + 0.9627673331456D+00 0.9833437851400D+00 0.1004331152707D+01 0.1025736633476D+01 + 0.1047567515241D+01 0.1069831175720D+01 0.1092535082243D+01 0.1115686791375D+01 + 0.1139293948457D+01 0.1163364287075D+01 0.1187905628445D+01 0.1212925880722D+01 + 0.1238433038208D+01 0.1264435180485D+01 0.1290940471443D+01 0.1317957158220D+01 + 0.1345493570030D+01 0.1373558116898D+01 0.1402159288280D+01 0.1431305651569D+01 + 0.1461005850494D+01 0.1491268603389D+01 0.1522102701342D+01 0.1553517006218D+01 + 0.1585520448546D+01 0.1618122025271D+01 0.1651330797361D+01 0.1685155887276D+01 + 0.1719606476280D+01 0.1754691801602D+01 0.1790421153434D+01 0.1826803871767D+01 + 0.1863849343063D+01 0.1901566996742D+01 0.1939966301501D+01 0.1979056761446D+01 + 0.2018847912032D+01 0.2059349315815D+01 0.2100570557999D+01 0.2142521241790D+01 + 0.2185210983528D+01 0.2228649407614D+01 0.2272846141215D+01 0.2317810808747D+01 + 0.2363553026124D+01 0.2410082394775D+01 0.2457408495423D+01 0.2505540881617D+01 + 0.2554489073015D+01 0.2604262548407D+01 0.2654870738488D+01 0.2706323018355D+01 + 0.2758628699743D+01 0.2811797022979D+01 0.2865837148659D+01 0.2920758149043D+01 + 0.2976568999160D+01 0.3033278567615D+01 0.3090895607108D+01 0.3149428744640D+01 + 0.3208886471423D+01 0.3269277132479D+01 0.3330608915918D+01 0.3392889841912D+01 + 0.3456127751341D+01 0.3520330294118D+01 0.3585504917195D+01 0.3651658852234D+01 + 0.3718799102956D+01 0.3786932432154D+01 0.3856065348377D+01 0.3926204092282D+01 + 0.3997354622651D+01 0.4069522602076D+01 0.4142713382310D+01 0.4216931989288D+01 + 0.4292183107814D+01 0.4368471065927D+01 0.4445799818928D+01 0.4524172933100D+01 + 0.4603593569097D+01 0.4684064465021D+01 0.4765587919192D+01 0.4848165772611D+01 + 0.4931799391130D+01 0.5016489647323D+01 0.5102236902085D+01 0.5189040985952D+01 + 0.5276901180158D+01 0.5365816197444D+01 0.5455784162617D+01 0.5546802592894D+01 + 0.5638868378017D+01 0.5731977760181D+01 0.5826126313769D+01 0.5921308924927D+01 + 0.6017519770983D+01 0.6114752299744D+01 0.6212999208681D+01 0.6312252424025D+01 + 0.6412503079799D+01 0.6513741496818D+01 0.6615957161666D+01 0.6719138705689D+01 + 0.6823273884037D+01 0.6928349554769D+01 0.7034351658067D+01 0.7141265195588D+01 + 0.7249074209985D+01 0.7357761764637D+01 0.7467309923627D+01 0.7577699732003D+01 + 0.7688911196366D+01 0.7800923265826D+01 0.7913713813378D+01 0.8027259617727D+01 + 0.8141536345630D+01 0.8256518534789D+01 0.8372179577355D+01 0.8488491704090D+01 + 0.8605425969248D+01 0.8722952236222D+01 0.8841039164025D+01 0.8959654194655D+01 + 0.9078763541413D+01 0.9198332178230D+01 0.9318323830066D+01 0.9438700964464D+01 + 0.9559424784293D+01 0.9680455221780D+01 0.9801750933887D+01 0.9923269299099D+01 + 0.1004496641570D+02 0.1016679710163D+02 0.1028871489593D+02 0.1041067206198D+02 + 0.1053261959239D+02 0.1065450721594D+02 0.1077628340626D+02 0.1089789539267D+02 + 0.1101928917306D+02 0.1114040952889D+02 0.1126120004259D+02 0.1138160311709D+02 + 0.1150155999788D+02 0.1162101079752D+02 0.1173989452270D+02 0.1185814910389D+02 + 0.1197571142774D+02 0.1209251737221D+02 0.1220850184455D+02 0.1232359882222D+02 + 0.1243774139668D+02 0.1255086182033D+02 0.1266289155645D+02 0.1277376133233D+02 + 0.1288340119558D+02 0.1299174057364D+02 0.1309870833671D+02 0.1320423286383D+02 + 0.1330824211245D+02 0.1341066369131D+02 0.1351142493681D+02 0.1361045299271D+02 + 0.1370767489335D+02 0.1380301765027D+02 0.1389640834224D+02 0.1398777420882D+02 + 0.1407704274716D+02 0.1416414181234D+02 0.1424899972093D+02 0.1433154535791D+02 + 0.1441170828680D+02 0.1448941886294D+02 0.1456460834990D+02 0.1463720903887D+02 + 0.1470715437095D+02 0.1477437906225D+02 0.1483881923166D+02 0.1490041253114D+02 + 0.1495909827839D+02 0.1501481759178D+02 0.1506751352732D+02 0.1511713121747D+02 + 0.1516361801165D+02 0.1520692361818D+02 0.1524700024742D+02 0.1528380275595D+02 + 0.1531728879140D+02 0.1534741893776D+02 0.1537415686084D+02 0.1539746945363D+02 + 0.1541732698111D+02 0.1543370322439D+02 0.1544657562364D+02 0.1545592541956D+02 + 0.1546173779302D+02 0.1546400200242D+02 0.1546271151843D+02 0.1545786415570D+02 + 0.1544946220111D+02 0.1543751253809D+02 0.1542202676661D+02 0.1540302131844D+02 + 0.1538051756708D+02 0.1535454193202D+02 0.1532512597682D+02 0.1529230650045D+02 + 0.1525612562157D+02 0.1521663085508D+02 0.1517387518057D+02 0.1512791710213D+02 + 0.1507882069905D+02 0.1502665566690D+02 0.1497149734847D+02 0.1491342675424D+02 + 0.1485253057170D+02 0.1478890116319D+02 0.1472263655178D+02 0.1465384039476D+02 + 0.1458262194423D+02 0.1450909599456D+02 0.1443338281613D+02 0.1435560807511D+02 + 0.1427590273888D+02 0.1419440296685D+02 0.1411124998625D+02 0.1402658995277D+02 + 0.1394057379573D+02 0.1385335704764D+02 0.1376509965795D+02 0.1367596579089D+02 + 0.1358612360737D+02 0.1349574503081D+02 0.1340500549696D+02 0.1331408368786D+02 + 0.1322316124986D+02 0.1313242249599D+02 0.1304205409292D+02 0.1295224473262D+02 + 0.1286318478926D+02 0.1277506596148D+02 0.1268808090072D+02 0.1260242282594D+02 + 0.1251828512526D+02 0.1243586094535D+02 0.1235534276899D+02 0.1227692198172D+02 + 0.1220078842830D+02 0.1212712995982D+02 0.1205613197253D+02 0.1198797693913D+02 + 0.1192284393379D+02 0.1186090815186D+02 0.1180234042546D+02 0.1174730673615D+02 + 0.1169596772603D+02 0.1164847820834D+02 0.1160498667924D+02 0.1156563483188D+02 + 0.1153055707436D+02 0.1149988005301D+02 0.1147372218250D+02 0.1145219318434D+02 + 0.1143539363525D+02 0.1142341452711D+02 0.1141633683999D+02 0.1141423112993D+02 + 0.1141715713298D+02 0.1142516338731D+02 0.1143828687474D+02 0.1145655268355D+02 + 0.1147997369390D+02 0.1150855028761D+02 0.1154227008374D+02 0.1158110770138D+02 + 0.1162502455129D+02 0.1167396865756D+02 0.1172787451079D+02 0.1178666295396D+02 + 0.1185024110228D+02 0.1191850229803D+02 0.1199132610159D+02 0.1206857831946D+02 + 0.1215011107019D+02 0.1223576288907D+02 0.1232535887199D+02 0.1241871085933D+02 + 0.1251561765997D+02 0.1261586531600D+02 0.1271922740805D+02 0.1282546540151D+02 + 0.1293432903330D+02 0.1304555673916D+02 0.1315887612096D+02 0.1327400445348D+02 + 0.1339064923005D+02 0.1350850874625D+02 0.1362727272054D+02 0.1374662295087D+02 + 0.1386623400591D+02 0.1398577394943D+02 0.1410490509638D+02 0.1422328479880D+02 + 0.1434056625987D+02 0.1445639937388D+02 0.1457043159027D+02 0.1468230879914D+02 + 0.1479167623614D+02 0.1489817940404D+02 0.1500146500841D+02 0.1510118190471D+02 + 0.1519698205391D+02 0.1528852148379D+02 0.1537546125281D+02 0.1545746841364D+02 + 0.1553421697307D+02 0.1560538884523D+02 0.1567067479483D+02 0.1572977536717D+02 + 0.1578240180176D+02 0.1582827692612D+02 0.1586713602663D+02 0.1589872769311D+02 + 0.1592281463392D+02 0.1593917445849D+02 0.1594760042409D+02 0.1594790214378D+02 + 0.1593990625272D+02 0.1592345702984D+02 0.1589841697221D+02 0.1586466731948D+02 + 0.1582210852585D+02 0.1577066067732D+02 0.1571026385193D+02 0.1564087842120D+02 + 0.1556248529064D+02 0.1547508607802D+02 0.1537870322780D+02 0.1527338006062D+02 + 0.1515918075676D+02 0.1503619027308D+02 0.1490451419267D+02 0.1476427850715D+02 + 0.1461562933169D+02 0.1445873255288D+02 0.1429377341010D+02 0.1412095601137D+02 + 0.1394050278444D+02 0.1375265386499D+02 0.1355766642312D+02 0.1335581393054D+02 + 0.1314738537038D+02 0.1293268439219D+02 0.1271202841511D+02 0.1248574768189D+02 + 0.1225418426740D+02 0.1201769104500D+02 0.1177663061449D+02 0.1153137419578D+02 + 0.1128230049248D+02 0.1102979452961D+02 0.1077424647032D+02 0.1051605041603D+02 + 0.1025560319513D+02 0.9993303145083D+01 0.9729548892983D+01 0.9464738139829D+01 + 0.9199266453606D+01 0.8933526076402D+01 0.8667904750745D+01 0.8402784570301D+01 + 0.8138540859996D+01 0.7875541090527D+01 0.7614143832090D+01 0.7354697751983D+01 + 0.7097540660550D+01 0.6842998609696D+01 0.6591385047920D+01 0.6343000035605D+01 + 0.6098129523858D+01 0.5857044699944D+01 0.5620001401934D+01 0.5387239604814D+01 + 0.5158982979846D+01 0.4935438528573D+01 0.4716796292366D+01 0.4503229137976D+01 + 0.4294892619056D+01 0.4091924913152D+01 0.3894446833193D+01 0.3702561912045D+01 + 0.3516356558237D+01 0.3335900280537D+01 0.3161245978670D+01 0.2992430297065D+01 + 0.2829474038194D+01 0.2672382631762D+01 0.2521146655720D+01 0.2375742404881D+01 + 0.2236132502695D+01 0.2102266551639D+01 0.1974081817541D+01 0.1851503943111D+01 + 0.1734447685940D+01 0.1622817676200D+01 0.1516509189368D+01 0.1415408929331D+01 + 0.1319395817360D+01 0.1228341782531D+01 0.1142112549373D+01 0.1060568418635D+01 + 0.9835650373019D+00 0.9109541541726D+00 0.8425843575459D+00 0.7783017917968D+00 + 0.7179508498817D+00 0.6613748390683D+00 0.6084166174653D+00 0.5589191992012D+00 + 0.5127263263911D+00 0.4696830063190D+00 0.4296360125529D+00 0.3924343490009D+00 + 0.3579296762027D+00 0.3259766994340D+00 0.2964335184742D+00 0.2691619391536D+00 + 0.2440277470488D+00 0.2209009439361D+00 0.1996559478365D+00 0.1801717576938D+00 + 0.1623320839184D+00 0.1460254461990D+00 0.1311452401368D+00 0.1175897743854D+00 + 0.1052622800912D+00 0.9407089451527D-01 0.8392862078550D-01 0.7475326577690D-01 + 0.6646735814128D-01 0.5899804851766D-01 0.5227699394346D-01 0.4624022845899D-01 + 0.4082802185442D-01 0.3598472845105D-01 0.3165862773800D-01 0.2780175860384D-01 + 0.2436974881146D-01 0.2132164126495D-01 0.1861971851162D-01 0.1622932681167D-01 + 0.1411870099424D-01 0.1225879120292D-01 0.1062309251766D-01 0.9187478324824D-02 + 0.7930038194170D-02 0.6830920911119D-02 0.5872183206948D-02 0.5037644628161D-02 + 0.4312748890659D-02 0.3684431974697D-02 0.3140997133459D-02 0.2671996911721D-02 + 0.2268122201696D-02 0.1921098300832D-02 0.1623587881022D-02 0.1369100730387D-02 + 0.1151910087150D-02 0.9669753500508D-03 0.8098709208516D-03 0.6767209113939D-03 + 0.5641394300578D-03 0.4691761498429D-03 0.3892668522563D-03 0.3221886372696D-03 + 0.2660194893607D-03 0.2191018926233D-03 0.1800101936858D-03 0.1475214192933D-03 + 0.1205892654847D-03 0.9832098695562D-04 0.7995692809159D-04 0.6485245095860D-04 + 0.5246202996510D-04 0.4232529769133D-04 0.3405484129524D-04 0.2732556374477D-04 + 0.2186543872353D-04 0.1744750226736D-04 0.1388293789508D-04 0.1101512510421D-04 + 0.8714533541124D-05 0.6874356872787D-05 0.5406791351919D-05 0.4239874261002D-05 + 0.3314806839624D-05 0.2583694952262D-05 0.2007648657315D-05 0.1555189018603D-05 + 0.1200916989437D-05 0.9244050332163D-06 0.7092773630705D-06 0.5424493283134D-06 + 0.4135005904089D-06 0.3141603589352D-06 0.2378861413798D-06 0.1795202409555D-06 + 0.1350106538765D-06 0.1011851095086D-06 0.7556879909866D-07 0.5623788451178D-07 + 0.4170219815814D-07 0.3081166707088D-07 0.2268194336078D-07 0.1663552297805D-07 + 0.1215530542863D-07 0.8848107127806D-08 0.6416106613217D-08 0.4634585104140D-08 + 0.3334643304910D-08 0.2389835688104D-08 0.1705876062949D-08 0.1212741020005D-08 + 0.8586376559590D-09 0.6054146003728D-09 0.4250856698627D-09 0.2972075512731D-09 + 0.2069101606973D-09 0.1434236365115D-09 0.9898160505409D-10 0.6800804519963D-10 + 0.4651712787494D-10 0.3167310042586D-10 0.2146695649341D-10 0.1448079937139D-10 + 0.9722622861678D-11 0.6496070631129D-11 0.4319651023999D-11 0.2858591661735D-11 + 0.1882503214946D-11 0.1233598363270D-11 0.8043412065319D-12 0.5218060130221D-12 + 0.3367856512696D-12 0.2162455335843D-12 0.1381220475631D-12 0.8775552000331D-13 diff --git a/Test/Fe2/i_lsms b/Test/Fe2/i_lsms new file mode 100644 index 000000000..80d3e9185 --- /dev/null +++ b/Test/Fe2/i_lsms @@ -0,0 +1,161 @@ +systemid="fe2" +system_title = "Iron test for LSMS 3" +pot_in_type=1 +-- write potential out. Use this only when xRepeat, yRepeat and zRepeat = 1 +pot_out_type=1 +num_atoms=2 +nspin=3 +mtasa=0 +xcFunctional={0,1} -- von Barth Hedin (LSMS_1) +-- xcFunctional={1,1,17} -- von Barth Hedin (libxc) +-- xcFunctional={1,1,12} -- Perdew & Wang +-- xcFunctional={1,20} -- Teter 93 +-- xcFunctional={1,101,130} -- GGA PBE + +iprint=0 +default_iprint=-1 +print_node=0 +-- istop="buildKKRMatrix" +istop="main" + +nscf=20 + +xRepeat=1 +yRepeat=1 +zRepeat=1 +makeTypesUnique=1 + +-- energyContour = {npts=1,grid=0,ebot=-0.2,etop=0.0,eitop=0.825,eibot=0.1} +-- energyContour = {npts=11,grid=2,ebot=-0.3,etop=0.0,eitop=0.825,eibot=0.025,maxGroupSize=5} +energyContour = {npts=31,grid=2,ebot=-0.3,etop=0.0,eitop=0.825,eibot=0.0025} + +a = 5.42 + +bravais = {} +bravais[1]={a,0,0} +bravais[2]={0,a,0} +bravais[3]={0,0,a} + +-- site_default={lmax=3,rLIZ=12.5,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} +site_default={lmax=3,rLIZ=8.5,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} +-- site_default={lmax=3,rLIZ=5.0,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} +-- site_default={lmax=3,rLIZ=0.1,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} + +-- Possible choices of mixing parameters +-- quantity : charge, potential, moment_magnitude, moment_direction, noQuantity +-- algorithm : simple, broyden, noAlgorithm +-- mixing={} +--mixing = { {quantity = "charge", algorithm = "simple", mixing_parameter = 0.05} } +-- mixing = { {quantity = "potential", algorithm = "simple", mixing_parameter = 0.0} } +mixing = { {quantity = "potential", algorithm = "broyden", mixing_parameter = 0.05} } +--mixing = { {quantity = "potential", algorithm = "broyden", mixing_parameter = 0.05}, {quantity = "moment_magnitude", algorithm = "noAlgorithm", mixing_parameter = 0.01} } + +numberOfMixQuantities = 0 + +for k,v in pairs(mixing) do + numberOfMixQuantities = numberOfMixQuantities + 1 +end + +--[[ +print("Site defaults:") +for k,v in pairs(site_default) do + print(k," : ",v) +end +--]] + +site = {} +for i =1,num_atoms do site[i]={} end + +site[1].pos={0,0,0} +site[1].evec={0,0,1} +site[2].pos={0.5*a,0.5*a,0.5*a} +site[2].evec={0,0,1} + +-- set site defaults +for i =1,num_atoms do + for k,v in pairs(site_default) do + if(site[i][k]==nil) then site[i][k]=v end + end +end + + +--[[ +function deepcopy(t) +if type(t) ~= 'table' then return t end +local mt = getmetatable(t) +local res = {} +for k,v in pairs(t) do +if type(v) == 'table' then +v = deepcopy(v) +end +res[k] = v +end +-- setmetatable(res,mt) +return res +end + + +-- repeat nx*ny*nz times +ntemp=num_atoms +-- ix==1 first: +ix=0 +-- iy==1 +iy=0 +for iz=1,nz-1 do + for ib=1,num_atoms do + ntemp=ntemp+1 + site[ntemp]={pos={0,0,0},evec={0,0,1}} + site[ntemp].pos[1]=site[ib].pos[1]+bravais[1][1]*ix+bravais[2][1]*iy+bravais[3][1]*iz + site[ntemp].pos[2]=site[ib].pos[2]+bravais[1][2]*ix+bravais[2][2]*iy+bravais[3][2]*iz + site[ntemp].pos[3]=site[ib].pos[3]+bravais[1][3]*ix+bravais[2][3]*iy+bravais[3][3]*iz + site[ntemp].evec[1]=site[ib].evec[1] + site[ntemp].evec[2]=site[ib].evec[2] + site[ntemp].evec[3]=site[ib].evec[3] + site[ntemp].type=ib + end +end +-- iy!=1 +for iy =1,ny-1 do + for iz=0,nz-1 do + for ib=1,num_atoms do + ntemp=ntemp+1 + site[ntemp]={pos={0,0,0},evec={0,0,1}} + site[ntemp].pos[1]=site[ib].pos[1]+bravais[1][1]*ix+bravais[2][1]*iy+bravais[3][1]*iz + site[ntemp].pos[2]=site[ib].pos[2]+bravais[1][2]*ix+bravais[2][2]*iy+bravais[3][2]*iz + site[ntemp].pos[3]=site[ib].pos[3]+bravais[1][3]*ix+bravais[2][3]*iy+bravais[3][3]*iz + site[ntemp].evec[1]=site[ib].evec[1] + site[ntemp].evec[2]=site[ib].evec[2] + site[ntemp].evec[3]=site[ib].evec[3] + site[ntemp].type=ib + end + end +end +-- ix != 1 +for ix=1,nx-1 do + for iy =0,ny-1 do + for iz=0,nz-1 do + for ib=1,num_atoms do + ntemp=ntemp+1 + site[ntemp]={pos={0,0,0},evec={0,0,1}} + site[ntemp].pos[1]=site[ib].pos[1]+bravais[1][1]*ix+bravais[2][1]*iy+bravais[3][1]*iz + site[ntemp].pos[2]=site[ib].pos[2]+bravais[1][2]*ix+bravais[2][2]*iy+bravais[3][2]*iz + site[ntemp].pos[3]=site[ib].pos[3]+bravais[1][3]*ix+bravais[2][3]*iy+bravais[3][3]*iz + site[ntemp].evec[1]=site[ib].evec[1] + site[ntemp].evec[2]=site[ib].evec[2] + site[ntemp].evec[3]=site[ib].evec[3] + site[ntemp].type=ib + end + end + end +end +num_atoms=ntemp +bravais[1][1]=bravais[1][1]*nx +bravais[1][2]=bravais[1][2]*nx +bravais[1][3]=bravais[1][3]*nx +bravais[2][1]=bravais[2][1]*ny +bravais[2][2]=bravais[2][2]*ny +bravais[2][3]=bravais[2][3]*ny +bravais[3][1]=bravais[3][1]*nz +bravais[3][2]=bravais[3][2]*nz +bravais[3][3]=bravais[3][3]*nz +--]] diff --git a/Test/Fe2/v_fe2.0 b/Test/Fe2/v_fe2.0 new file mode 100755 index 000000000..f3c4e967f --- /dev/null +++ b/Test/Fe2/v_fe2.0 @@ -0,0 +1,1542 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Fe. + 2 0.0000000000000D+00 + LSMS: xx z= 26. xvalws= 5.22926 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728400909D+02-0.5199725115555D+02-0.5199721790459D+02-0.5199718425142D+02 +-0.5199715019116D+02-0.5199711571889D+02-0.5199708082964D+02-0.5199704551834D+02 +-0.5199700977990D+02-0.5199697360915D+02-0.5199693700086D+02-0.5199689994973D+02 +-0.5199686245042D+02-0.5199682449748D+02-0.5199678608545D+02-0.5199674720876D+02 +-0.5199670786180D+02-0.5199666803887D+02-0.5199662773421D+02-0.5199658694201D+02 +-0.5199654565635D+02-0.5199650387127D+02-0.5199646158073D+02-0.5199641877860D+02 +-0.5199637545872D+02-0.5199633161480D+02-0.5199628724051D+02-0.5199624232942D+02 +-0.5199619687506D+02-0.5199615087084D+02-0.5199610431012D+02-0.5199605718616D+02 +-0.5199600949214D+02-0.5199596122116D+02-0.5199591236626D+02-0.5199586292036D+02 +-0.5199581287632D+02-0.5199576222688D+02-0.5199571096474D+02-0.5199565908248D+02 +-0.5199560657259D+02-0.5199555342748D+02-0.5199549963947D+02-0.5199544520078D+02 +-0.5199539010352D+02-0.5199533433975D+02-0.5199527790139D+02-0.5199522078028D+02 +-0.5199516296816D+02-0.5199510445666D+02-0.5199504523733D+02-0.5199498530160D+02 +-0.5199492464081D+02-0.5199486324617D+02-0.5199480110883D+02-0.5199473821977D+02 +-0.5199467456990D+02-0.5199461015004D+02-0.5199454495085D+02-0.5199447896290D+02 +-0.5199441217666D+02-0.5199434458246D+02-0.5199427617052D+02-0.5199420693096D+02 +-0.5199413685375D+02-0.5199406592876D+02-0.5199399414573D+02-0.5199392149428D+02 +-0.5199384796390D+02-0.5199377354396D+02-0.5199369822368D+02-0.5199362199218D+02 +-0.5199354483843D+02-0.5199346675127D+02-0.5199338771940D+02-0.5199330773139D+02 +-0.5199322677567D+02-0.5199314484053D+02-0.5199306191412D+02-0.5199297798443D+02 +-0.5199289303934D+02-0.5199280706654D+02-0.5199272005361D+02-0.5199263198797D+02 +-0.5199254285685D+02-0.5199245264737D+02-0.5199236134649D+02-0.5199226894099D+02 +-0.5199217541751D+02-0.5199208076251D+02-0.5199198496230D+02-0.5199188800302D+02 +-0.5199178987064D+02-0.5199169055096D+02-0.5199159002963D+02-0.5199148829207D+02 +-0.5199138532359D+02-0.5199128110928D+02-0.5199117563407D+02-0.5199106888269D+02 +-0.5199096083969D+02-0.5199085148944D+02-0.5199074081613D+02-0.5199062880373D+02 +-0.5199051543604D+02-0.5199040069664D+02-0.5199028456895D+02-0.5199016703615D+02 +-0.5199004808124D+02-0.5198992768700D+02-0.5198980583600D+02-0.5198968251063D+02 +-0.5198955769302D+02-0.5198943136512D+02-0.5198930350863D+02-0.5198917410506D+02 +-0.5198904313569D+02-0.5198891058155D+02-0.5198877642345D+02-0.5198864064200D+02 +-0.5198850321751D+02-0.5198836413012D+02-0.5198822335968D+02-0.5198808088582D+02 +-0.5198793668793D+02-0.5198779074512D+02-0.5198764303627D+02-0.5198749354000D+02 +-0.5198734223467D+02-0.5198718909837D+02-0.5198703410894D+02-0.5198687724393D+02 +-0.5198671848065D+02-0.5198655779610D+02-0.5198639516703D+02-0.5198623056988D+02 +-0.5198606398084D+02-0.5198589537577D+02-0.5198572473026D+02-0.5198555201962D+02 +-0.5198537721883D+02-0.5198520030257D+02-0.5198502124524D+02-0.5198484002091D+02 +-0.5198465660333D+02-0.5198447096595D+02-0.5198428308188D+02-0.5198409292391D+02 +-0.5198390046450D+02-0.5198370567579D+02-0.5198350852955D+02-0.5198330899725D+02 +-0.5198310704998D+02-0.5198290265850D+02-0.5198269579318D+02-0.5198248642408D+02 +-0.5198227452087D+02-0.5198206005285D+02-0.5198184298896D+02-0.5198162329776D+02 +-0.5198140094741D+02-0.5198117590571D+02-0.5198094814005D+02-0.5198071761744D+02 +-0.5198048430449D+02-0.5198024816738D+02-0.5198000917191D+02-0.5197976728344D+02 +-0.5197952246692D+02-0.5197927468690D+02-0.5197902390745D+02-0.5197877009224D+02 +-0.5197851320449D+02-0.5197825320698D+02-0.5197799006201D+02-0.5197772373146D+02 +-0.5197745417673D+02-0.5197718135875D+02-0.5197690523796D+02-0.5197662577437D+02 +-0.5197634292744D+02-0.5197605665620D+02-0.5197576691913D+02-0.5197547367423D+02 +-0.5197517687900D+02-0.5197487649041D+02-0.5197457246489D+02-0.5197426475838D+02 +-0.5197395332627D+02-0.5197363812338D+02-0.5197331910403D+02-0.5197299622195D+02 +-0.5197266943031D+02-0.5197233868173D+02-0.5197200392824D+02-0.5197166512128D+02 +-0.5197132221174D+02-0.5197097514984D+02-0.5197062388528D+02-0.5197026836709D+02 +-0.5196990854370D+02-0.5196954436291D+02-0.5196917577189D+02-0.5196880271716D+02 +-0.5196842514461D+02-0.5196804299945D+02-0.5196765622622D+02-0.5196726476881D+02 +-0.5196686857041D+02-0.5196646757354D+02-0.5196606171998D+02-0.5196565095085D+02 +-0.5196523520651D+02-0.5196481442664D+02-0.5196438855015D+02-0.5196395751522D+02 +-0.5196352125928D+02-0.5196307971901D+02-0.5196263283028D+02-0.5196218052823D+02 +-0.5196172274718D+02-0.5196125942066D+02-0.5196079048138D+02-0.5196031586126D+02 +-0.5195983549135D+02-0.5195934930191D+02-0.5195885722231D+02-0.5195835918107D+02 +-0.5195785510585D+02-0.5195734492343D+02-0.5195682855969D+02-0.5195630593961D+02 +-0.5195577698725D+02-0.5195524162577D+02-0.5195469977736D+02-0.5195415136330D+02 +-0.5195359630387D+02-0.5195303451841D+02-0.5195246592528D+02-0.5195189044181D+02 +-0.5195130798435D+02-0.5195071846824D+02-0.5195012180777D+02-0.5194951791619D+02 +-0.5194890670569D+02-0.5194828808741D+02-0.5194766197137D+02-0.5194702826653D+02 +-0.5194638688071D+02-0.5194573772064D+02-0.5194508069188D+02-0.5194441569885D+02 +-0.5194374264482D+02-0.5194306143187D+02-0.5194237196087D+02-0.5194167413149D+02 +-0.5194096784220D+02-0.5194025299021D+02-0.5193952947146D+02-0.5193879718066D+02 +-0.5193805601119D+02-0.5193730585519D+02-0.5193654660341D+02-0.5193577814533D+02 +-0.5193500036904D+02-0.5193421316129D+02-0.5193341640742D+02-0.5193260999141D+02 +-0.5193179379578D+02-0.5193096770164D+02-0.5193013158865D+02-0.5192928533501D+02 +-0.5192842881739D+02-0.5192756191098D+02-0.5192668448947D+02-0.5192579642497D+02 +-0.5192489758803D+02-0.5192398784765D+02-0.5192306707119D+02-0.5192213512442D+02 +-0.5192119187145D+02-0.5192023717474D+02-0.5191927089505D+02-0.5191829289146D+02 +-0.5191730302133D+02-0.5191630114025D+02-0.5191528710207D+02-0.5191426075883D+02 +-0.5191322196077D+02-0.5191217055632D+02-0.5191110639202D+02-0.5191002931255D+02 +-0.5190893916069D+02-0.5190783577729D+02-0.5190671900126D+02-0.5190558866954D+02 +-0.5190444461705D+02-0.5190328667673D+02-0.5190211467945D+02-0.5190092845399D+02 +-0.5189972782709D+02-0.5189851262330D+02-0.5189728266508D+02-0.5189603777267D+02 +-0.5189477776415D+02-0.5189350245533D+02-0.5189221165981D+02-0.5189090518885D+02 +-0.5188958285145D+02-0.5188824445423D+02-0.5188688980147D+02-0.5188551869503D+02 +-0.5188413093435D+02-0.5188272631641D+02-0.5188130463569D+02-0.5187986568418D+02 +-0.5187840925129D+02-0.5187693512386D+02-0.5187544308611D+02-0.5187393291962D+02 +-0.5187240440329D+02-0.5187085731330D+02-0.5186929142309D+02-0.5186770650332D+02 +-0.5186610232183D+02-0.5186447864362D+02-0.5186283523081D+02-0.5186117184259D+02 +-0.5185948823518D+02-0.5185778416183D+02-0.5185605937277D+02-0.5185431361514D+02 +-0.5185254663297D+02-0.5185075816718D+02-0.5184894795548D+02-0.5184711573237D+02 +-0.5184526122909D+02-0.5184338417356D+02-0.5184148429039D+02-0.5183956130079D+02 +-0.5183761492255D+02-0.5183564486998D+02-0.5183365085389D+02-0.5183163258155D+02 +-0.5182958975660D+02-0.5182752207907D+02-0.5182542924529D+02-0.5182331094785D+02 +-0.5182116687559D+02-0.5181899671350D+02-0.5181680014270D+02-0.5181457684041D+02 +-0.5181232647986D+02-0.5181004873028D+02-0.5180774325683D+02-0.5180540972054D+02 +-0.5180304777830D+02-0.5180065708277D+02-0.5179823728232D+02-0.5179578802103D+02 +-0.5179330893860D+02-0.5179079967027D+02-0.5178825984684D+02-0.5178568909453D+02 +-0.5178308703501D+02-0.5178045328526D+02-0.5177778745757D+02-0.5177508915948D+02 +-0.5177235799366D+02-0.5176959355795D+02-0.5176679544522D+02-0.5176396324334D+02 +-0.5176109653512D+02-0.5175819489823D+02-0.5175525790517D+02-0.5175228512318D+02 +-0.5174927611419D+02-0.5174623043474D+02-0.5174314763592D+02-0.5174002726332D+02 +-0.5173686885694D+02-0.5173367195115D+02-0.5173043607457D+02-0.5172716075006D+02 +-0.5172384549462D+02-0.5172048981932D+02-0.5171709322923D+02-0.5171365522335D+02 +-0.5171017529452D+02-0.5170665292940D+02-0.5170308760833D+02-0.5169947880525D+02 +-0.5169582598771D+02-0.5169212861671D+02-0.5168838614662D+02-0.5168459802518D+02 +-0.5168076369333D+02-0.5167688258518D+02-0.5167295412791D+02-0.5166897774168D+02 +-0.5166495283960D+02-0.5166087882755D+02-0.5165675510418D+02-0.5165258106080D+02 +-0.5164835608125D+02-0.5164407954186D+02-0.5163975081138D+02-0.5163536925080D+02 +-0.5163093421337D+02-0.5162644504442D+02-0.5162190108131D+02-0.5161730165335D+02 +-0.5161264608164D+02-0.5160793367906D+02-0.5160316375011D+02-0.5159833559084D+02 +-0.5159344848875D+02-0.5158850172268D+02-0.5158349456272D+02-0.5157842627009D+02 +-0.5157329609709D+02-0.5156810328692D+02-0.5156284707365D+02-0.5155752668206D+02 +-0.5155214132756D+02-0.5154669021608D+02-0.5154117254396D+02-0.5153558749786D+02 +-0.5152993425461D+02-0.5152421198113D+02-0.5151841983433D+02-0.5151255696093D+02 +-0.5150662249744D+02-0.5150061557002D+02-0.5149453529428D+02-0.5148838077528D+02 +-0.5148215110737D+02-0.5147584537403D+02-0.5146946264782D+02-0.5146300199022D+02 +-0.5145646245151D+02-0.5144984307067D+02-0.5144314287525D+02-0.5143636088122D+02 +-0.5142949609291D+02-0.5142254750281D+02-0.5141551409151D+02-0.5140839482753D+02 +-0.5140118866721D+02-0.5139389455459D+02-0.5138651142128D+02-0.5137903818632D+02 +-0.5137147375605D+02-0.5136381702401D+02-0.5135606687078D+02-0.5134822216388D+02 +-0.5134028175756D+02-0.5133224449278D+02-0.5132410919702D+02-0.5131587468413D+02 +-0.5130753975423D+02-0.5129910319357D+02-0.5129056377438D+02-0.5128192025477D+02 +-0.5127317137854D+02-0.5126431587514D+02-0.5125535245940D+02-0.5124627983153D+02 +-0.5123709667690D+02-0.5122780166596D+02-0.5121839345403D+02-0.5120887068125D+02 +-0.5119923197240D+02-0.5118947593678D+02-0.5117960116805D+02-0.5116960624416D+02 +-0.5115948972712D+02-0.5114925016296D+02-0.5113888608154D+02-0.5112839599644D+02 +-0.5111777840483D+02-0.5110703178733D+02-0.5109615460788D+02-0.5108514531363D+02 +-0.5107400233480D+02-0.5106272408452D+02-0.5105130895877D+02-0.5103975533619D+02 +-0.5102806157801D+02-0.5101622602790D+02-0.5100424701185D+02-0.5099212283803D+02 +-0.5097985179674D+02-0.5096743216021D+02-0.5095486218256D+02-0.5094214009961D+02 +-0.5092926412887D+02-0.5091623246932D+02-0.5090304330139D+02-0.5088969478681D+02 +-0.5087618506855D+02-0.5086251227064D+02-0.5084867449820D+02-0.5083466983722D+02 +-0.5082049635455D+02-0.5080615209778D+02-0.5079163509518D+02-0.5077694335558D+02 +-0.5076207486834D+02-0.5074702760324D+02-0.5073179951042D+02-0.5071638852033D+02 +-0.5070079254364D+02-0.5068500947122D+02-0.5066903717403D+02-0.5065287350315D+02 +-0.5063651628963D+02-0.5061996334457D+02-0.5060321245898D+02-0.5058626140382D+02 +-0.5056910792994D+02-0.5055174976809D+02-0.5053418462884D+02-0.5051641020267D+02 +-0.5049842415989D+02-0.5048022415067D+02-0.5046180780505D+02-0.5044317273295D+02 +-0.5042431652422D+02-0.5040523674861D+02-0.5038593095586D+02-0.5036639667573D+02 +-0.5034663141803D+02-0.5032663267268D+02-0.5030639790981D+02-0.5028592457977D+02 +-0.5026521011328D+02-0.5024425192145D+02-0.5022304739591D+02-0.5020159390892D+02 +-0.5017988881346D+02-0.5015792944334D+02-0.5013571311336D+02-0.5011323711944D+02 +-0.5009049873873D+02-0.5006749522980D+02-0.5004422383280D+02-0.5002068176959D+02 +-0.4999686624397D+02-0.4997277444186D+02-0.4994840353146D+02-0.4992375066350D+02 +-0.4989881297144D+02-0.4987358757171D+02-0.4984807156389D+02-0.4982226203106D+02 +-0.4979615603991D+02-0.4976975064117D+02-0.4974304286974D+02-0.4971602974502D+02 +-0.4968870827126D+02-0.4966107543776D+02-0.4963312821924D+02-0.4960486357616D+02 +-0.4957627845502D+02-0.4954736978871D+02-0.4951813449683D+02-0.4948856948612D+02 +-0.4945867165071D+02-0.4942843787257D+02-0.4939786502185D+02-0.4936694995729D+02 +-0.4933568952659D+02-0.4930408056681D+02-0.4927211990478D+02-0.4923980435752D+02 +-0.4920713073265D+02-0.4917409582880D+02-0.4914069643607D+02-0.4910692933642D+02 +-0.4907279130416D+02-0.4903827910633D+02-0.4900338950319D+02-0.4896811924867D+02 +-0.4893246509079D+02-0.4889642377211D+02-0.4885999203021D+02-0.4882316659813D+02 +-0.4878594420482D+02-0.4874832157556D+02-0.4871029543247D+02-0.4867186249491D+02 +-0.4863301947995D+02-0.4859376310277D+02-0.4855409007715D+02-0.4851399711583D+02 +-0.4847348093100D+02-0.4843253823466D+02-0.4839116573905D+02-0.4834936015704D+02 +-0.4830711820251D+02-0.4826443659074D+02-0.4822131203876D+02-0.4817774126566D+02 +-0.4813372099301D+02-0.4808924794511D+02-0.4804431884930D+02-0.4799893043625D+02 +-0.4795307944023D+02-0.4790676259938D+02-0.4785997665588D+02-0.4781271835619D+02 +-0.4776498445124D+02-0.4771677169657D+02-0.4766807685247D+02-0.4761889668409D+02 +-0.4756922796153D+02-0.4751906745988D+02-0.4746841195927D+02-0.4741725824487D+02 +-0.4736560310686D+02-0.4731344334036D+02-0.4726077574537D+02-0.4720759712663D+02 +-0.4715390429349D+02-0.4709969405976D+02-0.4704496324345D+02-0.4698970866656D+02 +-0.4693392715482D+02-0.4687761553742D+02-0.4682077064661D+02-0.4676338931742D+02 +-0.4670546838725D+02-0.4664700469545D+02-0.4658799508292D+02-0.4652843639162D+02 +-0.4646832546412D+02-0.4640765914308D+02-0.4634643427075D+02-0.4628464768840D+02 +-0.4622229623583D+02-0.4615937675077D+02-0.4609588606835D+02-0.4603182102046D+02 +-0.4596717843531D+02-0.4590195513672D+02-0.4583614794369D+02-0.4576975366979D+02 +-0.4570276912265D+02-0.4563519110351D+02-0.4556701640665D+02-0.4549824181908D+02 +-0.4542886412007D+02-0.4535888008084D+02-0.4528828646428D+02-0.4521708002473D+02 +-0.4514525750785D+02-0.4507281565054D+02-0.4499975118097D+02-0.4492606081870D+02 +-0.4485174127497D+02-0.4477678925295D+02-0.4470120144833D+02-0.4462497454985D+02 +-0.4454810524011D+02-0.4447059019649D+02-0.4439242609219D+02-0.4431360959758D+02 +-0.4423413738159D+02-0.4415400611337D+02-0.4407321246418D+02-0.4399175310947D+02 +-0.4390962473114D+02-0.4382682402010D+02-0.4374334767908D+02-0.4365919242563D+02 +-0.4357435499539D+02-0.4348883214570D+02-0.4340262065933D+02-0.4331571734857D+02 +-0.4322811905962D+02-0.4313982267710D+02-0.4305082512897D+02-0.4296112339160D+02 +-0.4287071449512D+02-0.4277959552900D+02-0.4268776364786D+02-0.4259521607738D+02 +-0.4250195012053D+02-0.4240796316384D+02-0.4231325268378D+02-0.4221781625326D+02 +-0.4212165154821D+02-0.4202475635403D+02-0.4192712857207D+02-0.4182876622603D+02 +-0.4172966746809D+02-0.4162983058491D+02-0.4152925400326D+02-0.4142793629535D+02 +-0.4132587618362D+02-0.4122307254514D+02-0.4111952441526D+02-0.4101523099069D+02 +-0.4091019163177D+02-0.4080440586392D+02-0.4069787337814D+02-0.4059059403052D+02 +-0.4048256784069D+02-0.4037379498919D+02-0.4026427581359D+02-0.4015401080347D+02 +-0.4004300059408D+02-0.3993124595881D+02-0.3981874780047D+02-0.3970550714118D+02 +-0.3959152511128D+02-0.3947680293704D+02-0.3936134192738D+02-0.3924514345974D+02 +-0.3912820896514D+02-0.3901053991273D+02-0.3889213779388D+02-0.3877300410616D+02 +-0.3865314033730D+02-0.3853254794941D+02-0.3841122836384D+02-0.3828918294671D+02 +-0.3816641299561D+02-0.3804291972752D+02-0.3791870426838D+02-0.3779376764439D+02 +-0.3766811077544D+02-0.3754173447071D+02-0.3741463942662D+02-0.3728682622747D+02 +-0.3715829534855D+02-0.3702904716206D+02-0.3689908194568D+02-0.3676839989389D+02 +-0.3663700113198D+02-0.3650488573242D+02-0.3637205373385D+02-0.3623850516215D+02 +-0.3610424005352D+02-0.3596925847947D+02-0.3583356057318D+02-0.3569714655716D+02 +-0.3556001677183D+02-0.3542217170480D+02-0.3528361202035D+02-0.3514433858906D+02 +-0.3500435251706D+02-0.3486365517474D+02-0.3472224822457D+02-0.3458013364781D+02 +-0.3443731376977D+02-0.3429379128348D+02-0.3414956927154D+02-0.3400465122587D+02 +-0.3385904106531D+02-0.3371274315081D+02-0.3356576229817D+02-0.3341810378823D+02 +-0.3326977337430D+02-0.3312077728689D+02-0.3297112223571D+02-0.3282081540879D+02 +-0.3266986446883D+02-0.3251827754673D+02-0.3236606323235D+02-0.3221323056253D+02 +-0.3205978900636D+02-0.3190574844798D+02-0.3175111916665D+02-0.3159591181450D+02 +-0.3144013739192D+02-0.3128380722060D+02-0.3112693291460D+02-0.3096952634939D+02 +-0.3081159962896D+02-0.3065316505139D+02-0.3049423507279D+02-0.3033482226994D+02 +-0.3017493930171D+02-0.3001459886954D+02-0.2985381367711D+02-0.2969259638940D+02 +-0.2953095959141D+02-0.2936891574677D+02-0.2920647715631D+02-0.2904365591713D+02 +-0.2888046388202D+02-0.2871691261992D+02-0.2855301337730D+02-0.2838877704096D+02 +-0.2822421410237D+02-0.2805933462405D+02-0.2789414820796D+02-0.2772866396645D+02 +-0.2756289049588D+02-0.2739683585338D+02-0.2723050753680D+02-0.2706391246838D+02 +-0.2689705698223D+02-0.2672994681603D+02-0.2656258710714D+02-0.2639498239345D+02 +-0.2622713661917D+02-0.2605905314574D+02-0.2589073476829D+02-0.2572218373759D+02 +-0.2555340178776D+02-0.2538439017000D+02-0.2521514969218D+02-0.2504568076457D+02 +-0.2487598345161D+02-0.2470605752972D+02-0.2453590255090D+02-0.2436551791213D+02 +-0.2419490293015D+02-0.2402405692122D+02-0.2385297928550D+02-0.2368166959536D+02 +-0.2351012768684D+02-0.2333835375355D+02-0.2316634844181D+02-0.2299411294593D+02 +-0.2282164910224D+02-0.2264895948042D+02-0.2247604747020D+02-0.2230291736187D+02 +-0.2212957441833D+02-0.2195602493665D+02-0.2178227629680D+02-0.2160833699531D+02 +-0.2143421666157D+02-0.2125992605447D+02-0.2108547703736D+02-0.2091088252957D+02 +-0.2073615643311D+02-0.2056131353347D+02-0.2038636937454D+02-0.2021134010787D+02 +-0.2003624231780D+02-0.1986109282464D+02-0.1968590846923D+02-0.1951070588338D+02 +-0.1933550125113D+02-0.1916031006739D+02-0.1898514690054D+02-0.1881002516654D+02 +-0.1863495692195D+02-0.1845995268332D+02-0.1828502127992D+02-0.1811016974578D+02 +-0.1793540325598D+02-0.1776072511080D+02-0.1758613676940D+02-0.1741163793327D+02 +-0.1723722667775D+02-0.1706289962834D+02-0.1688865217702D+02-0.1671447873257D+02 +-0.1654037299789D+02-0.1636632826691D+02-0.1619233773325D+02-0.1601839480315D+02 +-0.1584449340510D+02-0.1567062828984D+02-0.1549679531468D+02-0.1532299170720D+02 +-0.1514921630451D+02-0.1497546976480D+02-0.1480175474939D+02-0.1462807607400D+02 +-0.1445444082871D+02-0.1428085846710D+02-0.1410734086517D+02-0.1393390235146D+02 +-0.1376055970989D+02-0.1358733215727D+02-0.1341424129731D+02-0.1324131105355D+02 +-0.1306856758305D+02-0.1289603917318D+02-0.1272375612351D+02-0.1255175061484D+02 +-0.1238005656736D+02-0.1220870948967D+02-0.1203774632043D+02-0.1186720526422D+02 +-0.1169712562320D+02-0.1152754762583D+02-0.1135851225403D+02-0.1119006106993D+02 +-0.1102223604329D+02-0.1085507938069D+02-0.1068863335731D+02-0.1052294015218D+02 +-0.1035804168776D+02-0.1019397947446D+02-0.1003079446077D+02-0.9868526889628D+01 +-0.9707216161554D+01-0.9546900704939D+01-0.9387617854023D+01-0.9229403734858D+01 +-0.9072293159592D+01-0.8916319529363D+01-0.8761514745993D+01-0.8607909132693D+01 +-0.8455531363896D+01-0.8304408404305D+01-0.8154565457227D+01-0.8006025922166D+01 +-0.7858811361682D+01-0.7712941477416D+01-0.7568434095199D+01-0.7425305159081D+01 +-0.7283568734134D+01-0.7143237017788D+01-0.7004320359504D+01-0.6866827288485D+01 +-0.6730764549154D+01-0.6596137144079D+01-0.6462948384000D+01-0.6331199944618D+01 +-0.6200891929738D+01-0.6072022940407D+01-0.5944590149603D+01-0.5818589382077D+01 +-0.5694015198898D+01-0.5570860986265D+01-0.5449119048124D+01-0.5328780702141D+01 +-0.5209836378552D+01-0.5092275721431D+01-0.4976087691897D+01-0.4861260672787D+01 +-0.4747782574321D+01-0.4635640940271D+01-0.4524823054180D+01-0.4415316045125D+01 +-0.4307106992579D+01-0.4200183029885D+01-0.4094531445869D+01-0.3990139784139D+01 +-0.3886995939600D+01-0.3785088251726D+01-0.3684405594148D+01-0.3584937460106D+01 +-0.3486674043348D+01-0.3389606314047D+01-0.3293726089348D+01-0.3199026098161D+01 +-0.3105500039868D+01-0.3013142636618D+01-0.2921949678952D+01-0.2831918064533D+01 +-0.2743045829849D+01-0.2655332174788D+01-0.2568777480092D+01-0.2483383317815D+01 +-0.2399152454962D+01-0.2316088850658D+01-0.2234197647300D+01-0.2153485156272D+01 +-0.2073958838965D+01-0.1995627283965D+01-0.1918500181413D+01-0.1842588295670D+01 +-0.1767903437522D+01-0.1694458437274D+01-0.1622267120110D+01-0.1551344285168D+01 +-0.1481705689753D+01-0.1413368040087D+01-0.1346348989896D+01-0.1280667148051D+01 +-0.1216342096293D+01-0.1153394417906D+01-0.1091845737986D+01-0.1031718775725D+01 +-0.9730374088849D+00-0.9158267504133D+00-0.8601132368937D+00-0.8059247283301D+00 +-0.7532906185600D+00-0.7022419554295D+00-0.6528115697324D+00-0.6050342118170D+00 +-0.5589466947046D+00-0.5145880425354D+00-0.4719996431596D+00-0.4312254037239D+00 +-0.3923119081554D+00-0.3553085755132D+00-0.3202678182603D+00-0.2872451996103D+00 +-0.2562993012896D+00 + 0.0000000000000D+00 + 1012 0.5229258479779D+01 + 0.2150742905406D-04 0.2201934401975D-04 0.2254344131081D-04 0.2308001074793D-04 + 0.2362934904336D-04 0.2419175996469D-04 0.2476755450247D-04 0.2535705104185D-04 + 0.2596057553829D-04 0.2657846169737D-04 0.2721105115901D-04 0.2785869368592D-04 + 0.2852174735659D-04 0.2920057876285D-04 0.2989556321214D-04 0.3060708493450D-04 + 0.3133553729459D-04 0.3208132300862D-04 0.3284485436652D-04 0.3362655345933D-04 + 0.3442685241199D-04 0.3524619362168D-04 0.3608503000175D-04 0.3694382523153D-04 + 0.3782305401197D-04 0.3872320232740D-04 0.3964476771351D-04 0.4058825953159D-04 + 0.4155419924941D-04 0.4254312072866D-04 0.4355557051923D-04 0.4459210816046D-04 + 0.4565330648961D-04 0.4673975195749D-04 0.4785204495171D-04 0.4899080012754D-04 + 0.5015664674660D-04 0.5135022902361D-04 0.5257220648130D-04 0.5382325431382D-04 + 0.5510406375867D-04 0.5641534247751D-04 0.5775781494596D-04 0.5913222285265D-04 + 0.6053932550771D-04 0.6197990026094D-04 0.6345474292991D-04 0.6496466823815D-04 + 0.6651051026378D-04 0.6809312289875D-04 0.6971338031887D-04 0.7137217746513D-04 + 0.7307043053626D-04 0.7480907749308D-04 0.7658907857468D-04 0.7841141682692D-04 + 0.8027709864336D-04 0.8218715431905D-04 0.8414263861740D-04 0.8614463135050D-04 + 0.8819423797310D-04 0.9029259019072D-04 0.9244084658213D-04 0.9464019323656D-04 + 0.9689184440594D-04 0.9919704317265D-04 0.1015570621330D-03 0.1039732040969D-03 + 0.1064468028041D-03 0.1089792236573D-03 0.1115718644728D-03 0.1142261562483D-03 + 0.1169435639500D-03 0.1197255873171D-03 0.1225737616857D-03 0.1254896588328D-03 + 0.1284748878395D-03 0.1315310959746D-03 0.1346599695998D-03 0.1378632350954D-03 + 0.1411426598085D-03 0.1445000530233D-03 0.1479372669546D-03 0.1514561977641D-03 + 0.1550587866019D-03 0.1587470206711D-03 0.1625229343189D-03 0.1663886101524D-03 + 0.1703461801815D-03 0.1743978269887D-03 0.1785457849256D-03 0.1827923413391D-03 + 0.1871398378251D-03 0.1915906715131D-03 0.1961472963799D-03 0.2008122245952D-03 + 0.2055880278984D-03 0.2104773390081D-03 0.2154828530649D-03 0.2206073291079D-03 + 0.2258535915864D-03 0.2312245319072D-03 0.2367231100177D-03 0.2423523560273D-03 + 0.2481153718665D-03 0.2540153329849D-03 0.2600554900897D-03 0.2662391709247D-03 + 0.2725697820915D-03 0.2790508109132D-03 0.2856858273428D-03 0.2924784859153D-03 + 0.2994325277470D-03 0.3065517825810D-03 0.3138401708812D-03 0.3213017059753D-03 + 0.3289404962488D-03 0.3367607473897D-03 0.3447667646870D-03 0.3529629553823D-03 + 0.3613538310777D-03 0.3699440101989D-03 0.3787382205180D-03 0.3877413017338D-03 + 0.3969582081140D-03 0.4063940111991D-03 0.4160539025692D-03 0.4259431966769D-03 + 0.4360673337456D-03 0.4464318827368D-03 0.4570425443864D-03 0.4679051543124D-03 + 0.4790256861959D-03 0.4904102550358D-03 0.5020651204812D-03 0.5139966902408D-03 + 0.5262115235724D-03 0.5387163348549D-03 0.5515179972435D-03 0.5646235464104D-03 + 0.5780401843732D-03 0.5917752834137D-03 0.6058363900874D-03 0.6202312293275D-03 + 0.6349677086450D-03 0.6500539224267D-03 0.6654981563344D-03 0.6813088918062D-03 + 0.6974948106637D-03 0.7140647998269D-03 0.7310279561389D-03 0.7483935913040D-03 + 0.7661712369406D-03 0.7843706497523D-03 0.8030018168203D-03 0.8220749610184D-03 + 0.8416005465556D-03 0.8615892846469D-03 0.8820521393172D-03 0.9030003333406D-03 + 0.9244453543176D-03 0.9463989608946D-03 0.9688731891282D-03 0.9918803589975D-03 + 0.1015433081069D-02 0.1039544263315D-02 0.1064227118095D-02 0.1089495169290D-02 + 0.1115362259619D-02 0.1141842558105D-02 0.1168950567737D-02 0.1196701133289D-02 + 0.1225109449338D-02 0.1254191068456D-02 0.1283961909601D-02 0.1314438266696D-02 + 0.1345636817413D-02 0.1377574632157D-02 0.1410269183260D-02 0.1443738354387D-02 + 0.1478000450161D-02 0.1513074206015D-02 0.1548978798262D-02 0.1585733854409D-02 + 0.1623359463706D-02 0.1661876187936D-02 0.1701305072458D-02 0.1741667657505D-02 + 0.1782985989747D-02 0.1825282634108D-02 0.1868580685877D-02 0.1912903783076D-02 + 0.1958276119133D-02 0.2004722455835D-02 0.2052268136585D-02 0.2100939099962D-02 + 0.2150761893598D-02 0.2201763688371D-02 0.2253972292925D-02 0.2307416168524D-02 + 0.2362124444253D-02 0.2418126932561D-02 0.2475454145167D-02 0.2534137309329D-02 + 0.2594208384486D-02 0.2655700079287D-02 0.2718645869002D-02 0.2783080013344D-02 + 0.2849037574687D-02 0.2916554436715D-02 0.2985667323484D-02 0.3056413818931D-02 + 0.3128832386828D-02 0.3202962391187D-02 0.3278844117136D-02 0.3356518792272D-02 + 0.3436028608501D-02 0.3517416744371D-02 0.3600727387929D-02 0.3686005760082D-02 + 0.3773298138499D-02 0.3862651882061D-02 0.3954115455860D-02 0.4047738456768D-02 + 0.4143571639594D-02 0.4241666943825D-02 0.4342077520985D-02 0.4444857762604D-02 + 0.4550063328833D-02 0.4657751177697D-02 0.4767979595018D-02 0.4880808225009D-02 + 0.4996298101570D-02 0.5114511680279D-02 0.5235512871115D-02 0.5359367071918D-02 + 0.5486141202598D-02 0.5615903740128D-02 0.5748724754308D-02 0.5884675944352D-02 + 0.6023830676284D-02 0.6166264021183D-02 0.6312052794284D-02 0.6461275594959D-02 + 0.6614012847588D-02 0.6770346843357D-02 0.6930361782982D-02 0.7094143820394D-02 + 0.7261781107400D-02 0.7433363839342D-02 0.7608984301773D-02 0.7788736918176D-02 + 0.7972718298747D-02 0.8161027290261D-02 0.8353765027049D-02 0.8551034983111D-02 + 0.8752943025377D-02 0.8959597468160D-02 0.9171109128811D-02 0.9387591384603D-02 + 0.9609160230877D-02 0.9835934340477D-02 0.1006803512449D-01 0.1030558679431D-01 + 0.1054871642512D-01 0.1079755402073D-01 0.1105223257982D-01 0.1131288816368D-01 + 0.1157965996544D-01 0.1185269038080D-01 0.1213212508026D-01 0.1241811308303D-01 + 0.1271080683248D-01 0.1301036227325D-01 0.1331693893004D-01 0.1363069998813D-01 + 0.1395181237567D-01 0.1428044684765D-01 0.1461677807184D-01 0.1496098471648D-01 + 0.1531324953990D-01 0.1567375948211D-01 0.1604270575828D-01 0.1642028395434D-01 + 0.1680669412453D-01 0.1720214089116D-01 0.1760683354637D-01 0.1802098615621D-01 + 0.1844481766683D-01 0.1887855201303D-01 0.1932241822902D-01 0.1977665056168D-01 + 0.2024148858606D-01 0.2071717732349D-01 0.2120396736203D-01 0.2170211497964D-01 + 0.2221188226980D-01 0.2273353726988D-01 0.2326735409215D-01 0.2381361305754D-01 + 0.2437260083229D-01 0.2494461056731D-01 0.2552994204062D-01 0.2612890180262D-01 + 0.2674180332442D-01 0.2736896714935D-01 0.2801072104743D-01 0.2866740017320D-01 + 0.2933934722669D-01 0.3002691261781D-01 0.3073045463399D-01 0.3145033961141D-01 + 0.3218694210958D-01 0.3294064508962D-01 0.3371184009606D-01 0.3450092744243D-01 + 0.3530831640054D-01 0.3613442539362D-01 0.3697968219334D-01 0.3784452412086D-01 + 0.3872939825181D-01 0.3963476162544D-01 0.4056108145796D-01 0.4150883536008D-01 + 0.4247851155891D-01 0.4347060912422D-01 0.4448563819924D-01 0.4552412023590D-01 + 0.4658658823475D-01 0.4767358698962D-01 0.4878567333696D-01 0.4992341641008D-01 + 0.5108739789835D-01 0.5227821231135D-01 0.5349646724813D-01 0.5474278367169D-01 + 0.5601779618862D-01 0.5732215333417D-01 0.5865651786266D-01 0.6002156704340D-01 + 0.6141799296226D-01 0.6284650282880D-01 0.6430781928923D-01 0.6580268074515D-01 + 0.6733184167825D-01 0.6889607298100D-01 0.7049616229337D-01 0.7213291434581D-01 + 0.7380715130845D-01 0.7551971314661D-01 0.7727145798277D-01 0.7906326246509D-01 + 0.8089602214242D-01 0.8277065184608D-01 0.8468808607842D-01 0.8664927940812D-01 + 0.8865520687255D-01 0.9070686438707D-01 0.9280526916144D-01 0.9495146012343D-01 + 0.9714649834967D-01 0.9939146750384D-01 0.1016874742823D+00 0.1040356488672D+00 + 0.1064371453872D+00 0.1088931423856D+00 0.1114048432967D+00 0.1139734769295D+00 + 0.1166002979593D+00 0.1192865874273D+00 0.1220336532487D+00 0.1248428307276D+00 + 0.1277154830815D+00 0.1306530019730D+00 0.1336568080498D+00 0.1367283514936D+00 + 0.1398691125766D+00 0.1430806022269D+00 0.1463643626021D+00 0.1497219676713D+00 + 0.1531550238057D+00 0.1566651703780D+00 0.1602540803695D+00 0.1639234609870D+00 + 0.1676750542871D+00 0.1715106378098D+00 0.1754320252209D+00 0.1794410669619D+00 + 0.1835396509100D+00 0.1877297030455D+00 0.1920131881282D+00 0.1963921103827D+00 + 0.2008685141914D+00 0.2054444847966D+00 0.2101221490109D+00 0.2149036759359D+00 + 0.2197912776889D+00 0.2247872101386D+00 0.2298937736476D+00 0.2351133138248D+00 + 0.2404482222837D+00 0.2459009374100D+00 0.2514739451362D+00 0.2571697797240D+00 + 0.2629910245536D+00 0.2689403129212D+00 0.2750203288421D+00 0.2812338078623D+00 + 0.2875835378751D+00 0.2940723599454D+00 0.3007031691395D+00 0.3074789153608D+00 + 0.3144026041916D+00 0.3214772977396D+00 0.3287061154899D+00 0.3360922351618D+00 + 0.3436388935694D+00 0.3513493874868D+00 0.3592270745164D+00 0.3672753739607D+00 + 0.3754977676972D+00 0.3838978010545D+00 0.3924790836915D+00 0.4012452904770D+00 + 0.4102001623706D+00 0.4193475073036D+00 0.4286912010595D+00 0.4382351881538D+00 + 0.4479834827120D+00 0.4579401693452D+00 0.4681094040228D+00 0.4784954149418D+00 + 0.4891025033910D+00 0.4999350446102D+00 0.5109974886435D+00 0.5222943611853D+00 + 0.5338302644183D+00 0.5456098778426D+00 0.5576379590956D+00 0.5699193447601D+00 + 0.5824589511607D+00 0.5952617751475D+00 0.6083328948654D+00 0.6216774705074D+00 + 0.6353007450521D+00 0.6492080449824D+00 0.6634047809857D+00 0.6778964486325D+00 + 0.6926886290333D+00 0.7077869894721D+00 0.7231972840138D+00 0.7389253540860D+00 + 0.7549771290311D+00 0.7713586266289D+00 0.7880759535873D+00 0.8051353059985D+00 + 0.8225429697604D+00 0.8403053209599D+00 0.8584288262158D+00 0.8769200429817D+00 + 0.8957856198031D+00 0.9150322965294D+00 0.9346669044774D+00 0.9546963665439D+00 + 0.9751276972649D+00 0.9959680028197D+00 0.1017224480976D+01 0.1038904420974D+01 + 0.1061015203349D+01 0.1083564299686D+01 0.1106559272300D+01 0.1130007773859D+01 + 0.1153917546912D+01 0.1178296423354D+01 0.1203152323804D+01 0.1228493256899D+01 + 0.1254327318495D+01 0.1280662690787D+01 0.1307507641324D+01 0.1334870521934D+01 + 0.1362759767535D+01 0.1391183894856D+01 0.1420151501035D+01 0.1449671262109D+01 + 0.1479751931386D+01 0.1510402337698D+01 0.1541631383520D+01 0.1573448042969D+01 + 0.1605861359662D+01 0.1638880444440D+01 0.1672514472946D+01 0.1706772683055D+01 + 0.1741664372155D+01 0.1777198894269D+01 0.1813385657016D+01 0.1850234118409D+01 + 0.1887753783475D+01 0.1925954200705D+01 0.1964844958324D+01 0.2004435680370D+01 + 0.2044736022586D+01 0.2085755668115D+01 0.2127504322996D+01 0.2169991711448D+01 + 0.2213227570952D+01 0.2257221647108D+01 0.2301983688271D+01 0.2347523439972D+01 + 0.2393850639086D+01 0.2440975007782D+01 0.2488906247220D+01 0.2537654031002D+01 + 0.2587227998372D+01 0.2637637747157D+01 0.2688892826442D+01 0.2741002728983D+01 + 0.2793976883341D+01 0.2847824645743D+01 0.2902555291652D+01 0.2958178007063D+01 + 0.3014701879494D+01 0.3072135888684D+01 0.3130488897001D+01 0.3189769639525D+01 + 0.3249986713841D+01 0.3311148569513D+01 0.3373263497233D+01 0.3436339617667D+01 + 0.3500384869964D+01 0.3565406999951D+01 0.3631413547991D+01 0.3698411836514D+01 + 0.3766408957221D+01 0.3835411757947D+01 0.3905426829193D+01 0.3976460490322D+01 + 0.4048518775419D+01 0.4121607418815D+01 0.4195731840277D+01 0.4270897129857D+01 + 0.4347108032420D+01 0.4424368931831D+01 0.4502683834816D+01 0.4582056354503D+01 + 0.4662489693636D+01 0.4743986627475D+01 0.4826549486387D+01 0.4910180138127D+01 + 0.4994879969825D+01 0.5080649869681D+01 0.5167490208373D+01 0.5255400820202D+01 + 0.5344380983962D+01 0.5434429403565D+01 0.5525544188426D+01 0.5617722833617D+01 + 0.5710962199815D+01 0.5805258493041D+01 0.5900607244231D+01 0.5997003288635D+01 + 0.6094440745069D+01 0.6192912995049D+01 0.6292412661814D+01 0.6392931589269D+01 + 0.6494460820874D+01 0.6596990578488D+01 0.6700510241224D+01 0.6805008324307D+01 + 0.6910472457995D+01 0.7016889366579D+01 0.7124244847491D+01 0.7232523750568D+01 + 0.7341709957494D+01 0.7451786361463D+01 0.7562734847107D+01 0.7674536270712D+01 + 0.7787170440791D+01 0.7900616099026D+01 0.8014850901658D+01 0.8129851401340D+01 + 0.8245593029526D+01 0.8362050079436D+01 0.8479195689649D+01 0.8597001828383D+01 + 0.8715439278509D+01 0.8834477623371D+01 0.8954085233454D+01 0.9074229253973D+01 + 0.9194875593440D+01 0.9315988913276D+01 0.9437532618530D+01 0.9559468849772D+01 + 0.9681758476237D+01 0.9804361090277D+01 0.9927235003199D+01 0.1005033724256D+02 + 0.1017362355101D+02 0.1029704838669D+02 0.1042056492540D+02 0.1054412506444D+02 + 0.1066767942831D+02 0.1079117737637D+02 0.1091456701244D+02 0.1103779519646D+02 + 0.1116080755839D+02 0.1128354851420D+02 0.1140596128432D+02 0.1152798791434D+02 + 0.1164956929827D+02 0.1177064520433D+02 0.1189115430327D+02 0.1201103419951D+02 + 0.1213022146500D+02 0.1224865167586D+02 0.1236625945201D+02 0.1248297849976D+02 + 0.1259874165744D+02 0.1271348094411D+02 0.1282712761148D+02 0.1293961219902D+02 + 0.1305086459240D+02 0.1316081408518D+02 0.1326938944391D+02 0.1337651897664D+02 + 0.1348213060491D+02 0.1358615193909D+02 0.1368851035736D+02 0.1378913308811D+02 + 0.1388794729589D+02 0.1398488017086D+02 0.1407985902179D+02 0.1417281137257D+02 + 0.1426366506212D+02 0.1435234834789D+02 0.1443879001264D+02 0.1452291947466D+02 + 0.1460466690129D+02 0.1468396332564D+02 0.1476074076649D+02 0.1483493235126D+02 + 0.1490647244192D+02 0.1497529676373D+02 0.1504134253675D+02 0.1510454860984D+02 + 0.1516485559720D+02 0.1522220601698D+02 0.1527654443219D+02 0.1532781759325D+02 + 0.1537597458241D+02 0.1542096695946D+02 0.1546274890874D+02 0.1550127738702D+02 + 0.1553651227211D+02 0.1556841651189D+02 0.1559695627334D+02 0.1562210109145D+02 + 0.1564382401753D+02 0.1566210176664D+02 0.1567691486377D+02 0.1568824778841D+02 + 0.1569608911712D+02 0.1570043166360D+02 0.1570127261607D+02 0.1569861367129D+02 + 0.1569246116496D+02 0.1568282619787D+02 0.1566972475757D+02 0.1565317783486D+02 + 0.1563321153475D+02 0.1560985718135D+02 0.1558315141624D+02 0.1555313628970D+02 + 0.1551985934445D+02 0.1548337369123D+02 0.1544373807583D+02 0.1540101693692D+02 + 0.1535528045436D+02 0.1530660458716D+02 0.1525507110098D+02 0.1520076758423D+02 + 0.1514378745267D+02 0.1508422994170D+02 0.1502220008605D+02 0.1495780868635D+02 + 0.1489117226206D+02 0.1482241299046D+02 0.1475165863115D+02 0.1467904243575D+02 + 0.1460470304238D+02 0.1452878435463D+02 0.1445143540465D+02 0.1437281020013D+02 + 0.1429306755483D+02 0.1421237090260D+02 0.1413088809452D+02 0.1404879117925D+02 + 0.1396625616625D+02 0.1388346277207D+02 0.1380059414952D+02 0.1371783659988D+02 + 0.1363537926825D+02 0.1355341382212D+02 0.1347213411351D+02 0.1339173582480D+02 + 0.1331241609871D+02 0.1323437315279D+02 0.1315780587881D+02 0.1308291342766D+02 + 0.1300989478035D+02 0.1293894830568D+02 0.1287027130535D+02 0.1280405954732D+02 + 0.1274050678825D+02 0.1267980428593D+02 0.1262214030269D+02 0.1256769960087D+02 + 0.1251666293145D+02 0.1246920651702D+02 0.1242550153038D+02 0.1238571356999D+02 + 0.1235000213372D+02 0.1231852009235D+02 0.1229141316414D+02 0.1226881939222D+02 + 0.1225086862623D+02 0.1223768200985D+02 0.1222937147599D+02 0.1222603925117D+02 + 0.1222777737106D+02 0.1223466720868D+02 0.1224677901729D+02 0.1226417148958D+02 + 0.1228689133517D+02 0.1231497287802D+02 0.1234843767581D+02 0.1238729416297D+02 + 0.1243153731911D+02 0.1248114836487D+02 0.1253609448665D+02 0.1259632859227D+02 + 0.1266178909890D+02 0.1273239975523D+02 0.1280806949923D+02 0.1288869235315D+02 + 0.1297414735711D+02 0.1306429854274D+02 0.1315899494816D+02 0.1325807067533D+02 + 0.1336134499111D+02 0.1346862247282D+02 0.1357969319917D+02 0.1369433298744D+02 + 0.1381230367740D+02 0.1393335346243D+02 0.1405721726828D+02 0.1418361717951D+02 + 0.1431226291376D+02 0.1444285234362D+02 0.1457507206581D+02 0.1470859801733D+02 + 0.1484309613763D+02 0.1497822307639D+02 0.1511362694548D+02 0.1524894811426D+02 + 0.1538382004666D+02 0.1551787017849D+02 0.1565072083339D+02 0.1578199017530D+02 + 0.1591129319546D+02 0.1603824273170D+02 0.1616245051740D+02 0.1628352825765D+02 + 0.1640108872963D+02 0.1651474690448D+02 0.1662412108723D+02 0.1672883407174D+02 + 0.1682851430716D+02 0.1692279707220D+02 0.1701132565381D+02 0.1709375252614D+02 + 0.1716974052608D+02 0.1723896402125D+02 0.1730111006644D+02 0.1735587954416D+02 + 0.1740298828530D+02 0.1744216816538D+02 0.1747316817225D+02 0.1749575544089D+02 + 0.1750971625093D+02 0.1751485698260D+02 0.1751100502688D+02 0.1749800964559D+02 + 0.1747574277733D+02 0.1744409978499D+02 0.1740300014123D+02 0.1735238804766D+02 + 0.1729223298439D+02 0.1722253018618D+02 0.1714330104180D+02 0.1705459341368D+02 + 0.1695648187457D+02 0.1684906785873D+02 0.1673247972505D+02 0.1660687272995D+02 + 0.1647242890818D+02 0.1632935685981D+02 0.1617789144222D+02 0.1601829336618D+02 + 0.1585084869528D+02 0.1567586824865D+02 0.1549368690699D+02 0.1530466282265D+02 + 0.1510917653451D+02 0.1490762998916D+02 0.1470044547022D+02 0.1448806443791D+02 + 0.1427094628160D+02 0.1404956698852D+02 0.1382441773199D+02 0.1359600338336D+02 + 0.1336484095192D+02 0.1313145795774D+02 0.1289639074258D+02 0.1266018272468D+02 + 0.1242338260337D+02 0.1218654252002D+02 0.1195021618209D+02 0.1171495695744D+02 + 0.1148131594627D+02 0.1124984003849D+02 0.1102106996440D+02 0.1079553834688D+02 + 0.1057376776347D+02 0.1035626882667D+02 0.1014353829125D+02 0.9936057196884D+01 + 0.9734289054994D+01 0.9538678088120D+01 0.9349647530399D+01 0.9167597997384D+01 + 0.8992905933301D+01 0.8825922143594D+01 0.8666970420224D+01 0.8516346266999D+01 + 0.8374315731611D+01 0.8241114350747D+01 0.8116946214096D+01 0.8001983152570D+01 + 0.7896364055459D+01 0.7800194320670D+01 0.7713545441561D+01 0.7636454733225D+01 + 0.7568925200401D+01 0.7510925548528D+01 0.7462390338698D+01 0.7423220286625D+01 + 0.7393282704950D+01 0.7372412087556D+01 0.7360410833787D+01 0.7357050109802D+01 + 0.7362070843542D+01 0.7375184849138D+01 0.7396076075866D+01 0.7424401976120D+01 + 0.7459794986211D+01 0.7501864113185D+01 0.7550196620265D+01 0.7604359802945D+01 + 0.7663902847256D+01 0.7728358761219D+01 0.7797246370063D+01 0.7870072365405D+01 + 0.7946333398216D+01 0.8025518205140D+01 0.8107109757504D+01 0.8190587422172D+01 + 0.8275429123337D+01 0.8361113494303D+01 0.8447122008353D+01 0.8532941077928D+01 + 0.8618064111536D+01 0.8701993518075D+01 0.8784242648578D+01 0.8864337665829D+01 + 0.8941819332731D+01 0.9016244710878D+01 0.9087188761372D+01 0.9154245840560D+01 + 0.9217031084099D+01 0.9275181673474D+01 0.9328357979881D+01 0.9376244581215D+01 + 0.9418551148709D+01 0.9455013200639D+01 0.9485392721360D+01 0.9509478644797D+01 + 0.9527087202359D+01 0.9538062136102D+01 0.9542274778747D+01 0.9539624002998D+01 + 0.9530036043300D+01 0.9513464193959D+01 0.9489888388159D+01 0.9459314663078D+01 + 0.9421774516843D+01 0.9377324163609D+01 0.9326043693467D+01 0.9268036144314D+01 + 0.9203426493115D+01 0.9132360574297D+01 0.9055003933175D+01 0.8971540622481D+01 + 0.8882171950151D+01 0.8787115186520D+01 0.8686602239071D+01 0.8580878302773D+01 + 0.8470200493895D+01 0.8354836475027D+01 0.8235063078754D+01 0.8111164937189D+01 + 0.7983433124252D+01 0.7852163817216D+01 0.7717656983696D+01 0.7580215099831D+01 + 0.7440141905014D+01 0.7297741198086D+01 0.7153315679440D+01 0.7007165843079D+01 + 0.6859588922166D+01 0.6710877891167D+01 0.6561320527250D+01 0.6411198533128D+01 + 0.6260786723101D+01 0.6110352273646D+01 0.5960154039458D+01 0.5810441935471D+01 + 0.5661456384987D+01 0.5513427833700D+01 0.5366576329042D+01 0.5221111163955D+01 + 0.5077230583918D+01 0.4935121555751D+01 0.4794959596475D+01 0.4656908660288D+01 + 0.4521121081498D+01 0.4387737571052D+01 0.4256887264186D+01 0.4128687816522D+01 + 0.4003245545873D+01 0.3880655616880D+01 0.3761002265561D+01 0.3644359060777D+01 + 0.3530789199588D+01 0.3420345833472D+01 0.3313072422343D+01 0.3209003113371D+01 + 0.3108163141592D+01 0.3010569249384D+01 0.2916230121919D+01 0.2825146835796D+01 + 0.2737313318133D+01 0.2652716813508D+01 0.2571338356232D+01 0.2493153245580D+01 + 0.2418131521695D+01 0.2346238440047D+01 0.2277434942461D+01 0.2211678122838D+01 + 0.2148921685899D+01 0.2089116397376D+01 0.2032210524266D+01 0.1978150263893D+01 + 0.1926880160684D+01 0.1878343509721D+01 0.1832482746269D+01 0.1789239820638D+01 + 0.1748556557871D+01 0.1710375001879D+01 0.1674637743804D+01 0.1641288234472D+01 + 0.1610271080956D+01 0.1581532327338D+01 0.1555019719890D+01 0.1530682956958D+01 + 0.1508473923914D+01 0.1488346913611D+01 0.1470258832820D+01 0.1454169395155D+01 + 0.1440041301042D+01 0.1427840405245D+01 0.1417535872504D+01 0.1409100321753D+01 + 0.1402509959377D+01 0.1397744701874D+01 0.1394788288181D+01 0.1393628381826D+01 + 0.1394256662892D+01 0.1396668909610D+01 0.1400865069190D+01 0.1406849317222D+01 + 0.1414629369614D+01 0.1424336942263D+01 0.1436096575202D+01 0.1449912447024D+01 + 0.1465794674727D+01 0.1483759333931D+01 0.1503828494539D+01 0.1526030271798D+01 + 0.1550398892649D+01 0.1576974777196D+01 0.1605804635055D+01 0.1636941576215D+01 + 7 1012 + 1 0 -1 -511.89194 + 2 0 -1 -58.90181 + 2 1 1 -50.68932 + 2 1 -2 -49.77537 + 3 0 -1 -5.73317 + 3 1 1 -3.34334 + 3 1 -2 -3.22919 + 0.2122975645015D-04 0.2173507709867D-04 0.2225242316243D-04 0.2278208072829D-04 + 0.2332434268594D-04 0.2387950888954D-04 0.2444788632325D-04 0.2502978927059D-04 + 0.2562553948791D-04 0.2623546638192D-04 0.2685990719144D-04 0.2749920717353D-04 + 0.2815371979393D-04 0.2882380692207D-04 0.2950983903075D-04 0.3021219540050D-04 + 0.3093126432877D-04 0.3166744334418D-04 0.3242113942573D-04 0.3319276922733D-04 + 0.3398275930755D-04 0.3479154636487D-04 0.3561957747857D-04 0.3646731035519D-04 + 0.3733521358096D-04 0.3822376688016D-04 0.3913346137963D-04 0.4006479987955D-04 + 0.4101829713060D-04 0.4199448011777D-04 0.4299388835081D-04 0.4401707416166D-04 + 0.4506460300883D-04 0.4613705378910D-04 0.4723501915650D-04 0.4835910584899D-04 + 0.4950993502270D-04 0.5068814259429D-04 0.5189437959126D-04 0.5312931251066D-04 + 0.5439362368626D-04 0.5568801166444D-04 0.5701319158897D-04 0.5836989559491D-04 + 0.5975887321186D-04 0.6118089177673D-04 0.6263673685632D-04 0.6412721267990D-04 + 0.6565314258201D-04 0.6721536945580D-04 0.6881475621705D-04 0.7045218627922D-04 + 0.7212856403973D-04 0.7384481537777D-04 0.7560188816385D-04 0.7740075278149D-04 + 0.7924240266119D-04 0.8112785482706D-04 0.8305815045642D-04 0.8503435545263D-04 + 0.8705756103141D-04 0.8912888432116D-04 0.9124946897738D-04 0.9342048581165D-04 + 0.9564313343555D-04 0.9791863891974D-04 0.1002482584687D-03 0.1026332781112D-03 + 0.1050750144077D-03 0.1075748151735D-03 0.1101340602203D-03 0.1127541621137D-03 + 0.1154365669501D-03 0.1181827551510D-03 0.1209942422769D-03 0.1238725798590D-03 + 0.1268193562527D-03 0.1298361975089D-03 0.1329247682680D-03 0.1360867726735D-03 + 0.1393239553083D-03 0.1426381021518D-03 0.1460310415612D-03 0.1495046452749D-03 + 0.1530608294397D-03 0.1567015556625D-03 0.1604288320871D-03 0.1642447144955D-03 + 0.1681513074364D-03 0.1721507653792D-03 0.1762452938963D-03 0.1804371508722D-03 + 0.1847286477421D-03 0.1891221507592D-03 0.1936200822920D-03 0.1982249221522D-03 + 0.2029392089542D-03 0.2077655415060D-03 0.2127065802334D-03 0.2177650486382D-03 + 0.2229437347894D-03 0.2282454928513D-03 0.2336732446459D-03 0.2392299812538D-03 + 0.2449187646513D-03 0.2507427293871D-03 0.2567050842979D-03 0.2628091142650D-03 + 0.2690581820118D-03 0.2754557299435D-03 0.2820052820308D-03 0.2887104457371D-03 + 0.2955749139921D-03 0.3026024672103D-03 0.3097969753590D-03 0.3171624000731D-03 + 0.3247027968207D-03 0.3324223171196D-03 0.3403252108055D-03 0.3484158283536D-03 + 0.3566986232552D-03 0.3651781544500D-03 0.3738590888149D-03 0.3827462037126D-03 + 0.3918443895988D-03 0.4011586526914D-03 0.4106941177020D-03 0.4204560306321D-03 + 0.4304497616342D-03 0.4406808079408D-03 0.4511547968612D-03 0.4618774888502D-03 + 0.4728547806468D-03 0.4840927084883D-03 0.4955974513988D-03 0.5073753345551D-03 + 0.5194328327314D-03 0.5317765738249D-03 0.5444133424641D-03 0.5573500837015D-03 + 0.5705939067925D-03 0.5841520890639D-03 0.5980320798714D-03 0.6122415046513D-03 + 0.6267881690659D-03 0.6416800632466D-03 0.6569253661363D-03 0.6725324499326D-03 + 0.6885098846360D-03 0.7048664427037D-03 0.7216111038125D-03 0.7387530597330D-03 + 0.7563017193176D-03 0.7742667136049D-03 0.7926579010441D-03 0.8114853728404D-03 + 0.8307594584254D-03 0.8504907310562D-03 0.8706900135433D-03 0.8913683841142D-03 + 0.9125371824119D-03 0.9342080156346D-03 0.9563927648179D-03 0.9791035912634D-03 + 0.1002352943117D-02 0.1026153562102D-02 0.1050518490405D-02 0.1075461077728D-02 + 0.1100994988496D-02 0.1127134209246D-02 0.1153893056171D-02 0.1181286182852D-02 + 0.1209328588167D-02 0.1238035624379D-02 0.1267423005415D-02 0.1297506815344D-02 + 0.1328303517037D-02 0.1359829961041D-02 0.1392103394654D-02 0.1425141471212D-02 + 0.1458962259585D-02 0.1493584253904D-02 0.1529026383504D-02 0.1565308023106D-02 + 0.1602449003221D-02 0.1640469620811D-02 0.1679390650189D-02 0.1719233354165D-02 + 0.1760019495464D-02 0.1801771348394D-02 0.1844511710794D-02 0.1888263916250D-02 + 0.1933051846599D-02 0.1978899944720D-02 0.2025833227614D-02 0.2073877299798D-02 + 0.2123058366995D-02 0.2173403250151D-02 0.2224939399761D-02 0.2277694910540D-02 + 0.2331698536421D-02 0.2386979705903D-02 0.2443568537747D-02 0.2501495857040D-02 + 0.2560793211623D-02 0.2621492888896D-02 0.2683627933011D-02 0.2747232162458D-02 + 0.2812340188056D-02 0.2878987431352D-02 0.2947210143447D-02 0.3017045424251D-02 + 0.3088531242177D-02 0.3161706454285D-02 0.3236610826892D-02 0.3313285056646D-02 + 0.3391770792086D-02 0.3472110655691D-02 0.3554348266436D-02 0.3638528262858D-02 + 0.3724696326649D-02 0.3812899206788D-02 0.3903184744224D-02 0.3995601897109D-02 + 0.4090200766624D-02 0.4187032623373D-02 0.4286149934389D-02 0.4387606390746D-02 + 0.4491456935804D-02 0.4597757794082D-02 0.4706566500803D-02 0.4817941932088D-02 + 0.4931944335851D-02 0.5048635363379D-02 0.5168078101634D-02 0.5290337106279D-02 + 0.5415478435454D-02 0.5543569684307D-02 0.5674680020311D-02 0.5808880219367D-02 + 0.5946242702730D-02 0.6086841574754D-02 0.6230752661494D-02 0.6378053550168D-02 + 0.6528823629508D-02 0.6683144131013D-02 0.6841098171130D-02 0.7002770794372D-02 + 0.7168249017405D-02 0.7337621874121D-02 0.7510980461712D-02 0.7688417987773D-02 + 0.7870029818463D-02 0.8055913527720D-02 0.8246168947593D-02 0.8440898219673D-02 + 0.8640205847678D-02 0.8844198751201D-02 0.9052986320644D-02 0.9266680473381D-02 + 0.9485395711148D-02 0.9709249178711D-02 0.9938360723829D-02 0.1017285295853D-01 + 0.1041285132175D-01 0.1065848414335D-01 0.1090988270951D-01 0.1116718132961D-01 + 0.1143051740455D-01 0.1170003149653D-01 0.1197586740047D-01 0.1225817221684D-01 + 0.1254709642620D-01 0.1284279396532D-01 0.1314542230495D-01 0.1345514252930D-01 + 0.1377211941725D-01 0.1409652152530D-01 0.1442852127232D-01 0.1476829502620D-01 + 0.1511602319226D-01 0.1547189030365D-01 0.1583608511371D-01 0.1620880069022D-01 + 0.1659023451183D-01 0.1698058856639D-01 0.1738006945154D-01 0.1778888847734D-01 + 0.1820726177118D-01 0.1863541038486D-01 0.1907356040402D-01 0.1952194305980D-01 + 0.1998079484302D-01 0.2045035762063D-01 0.2093087875471D-01 0.2142261122400D-01 + 0.2192581374792D-01 0.2244075091329D-01 0.2296769330365D-01 0.2350691763133D-01 + 0.2405870687229D-01 0.2462335040374D-01 0.2520114414469D-01 0.2579239069942D-01 + 0.2639739950387D-01 0.2701648697516D-01 0.2764997666416D-01 0.2829819941123D-01 + 0.2896149350513D-01 0.2964020484531D-01 0.3033468710740D-01 0.3104530191220D-01 + 0.3177241899806D-01 0.3251641639684D-01 0.3327768061342D-01 0.3405660680881D-01 + 0.3485359898710D-01 0.3566907018606D-01 0.3650344267166D-01 0.3735714813647D-01 + 0.3823062790211D-01 0.3912433312562D-01 0.4003872501011D-01 0.4097427501948D-01 + 0.4193146509749D-01 0.4291078789111D-01 0.4391274697832D-01 0.4493785710035D-01 + 0.4598664439858D-01 0.4705964665594D-01 0.4815741354312D-01 0.4928050686955D-01 + 0.5042950083923D-01 0.5160498231153D-01 0.5280755106696D-01 0.5403782007813D-01 + 0.5529641578584D-01 0.5658397838041D-01 0.5790116208843D-01 0.5924863546488D-01 + 0.6062708169076D-01 0.6203719887636D-01 0.6347970037015D-01 0.6495531507346D-01 + 0.6646478776099D-01 0.6800887940725D-01 0.6958836751900D-01 0.7120404647380D-01 + 0.7285672786470D-01 0.7454724085125D-01 0.7627643251682D-01 0.7804516823229D-01 + 0.7985433202641D-01 0.8170482696258D-01 0.8359757552242D-01 0.8553351999606D-01 + 0.8751362287932D-01 0.8953886727772D-01 0.9161025731761D-01 0.9372881856432D-01 + 0.9589559844749D-01 0.9811166669365D-01 0.1003781157661D+00 0.1026960613124D+00 + 0.1050666426187D+00 0.1074910230727D+00 0.1099703906329D+00 0.1125059583070D+00 + 0.1150989646366D+00 0.1177506741909D+00 0.1204623780676D+00 0.1232353944021D+00 + 0.1260710688845D+00 0.1289707752849D+00 0.1319359159864D+00 0.1349679225270D+00 + 0.1380682561490D+00 0.1412384083570D+00 0.1444799014844D+00 0.1477942892678D+00 + 0.1511831574303D+00 0.1546481242725D+00 0.1581908412731D+00 0.1618129936965D+00 + 0.1655163012104D+00 0.1693025185104D+00 0.1731734359544D+00 0.1771308802047D+00 + 0.1811767148790D+00 0.1853128412094D+00 0.1895411987104D+00 0.1938637658552D+00 + 0.1982825607598D+00 0.2027996418767D+00 0.2074171086957D+00 0.2121371024533D+00 + 0.2169618068509D+00 0.2218934487801D+00 0.2269342990569D+00 0.2320866731634D+00 + 0.2373529319974D+00 0.2427354826295D+00 0.2482367790682D+00 0.2538593230323D+00 + 0.2596056647304D+00 0.2654784036474D+00 0.2714801893389D+00 0.2776137222308D+00 + 0.2838817544268D+00 0.2902870905217D+00 0.2968325884206D+00 0.3035211601645D+00 + 0.3103557727607D+00 0.3173394490192D+00 0.3244752683937D+00 0.3317663678273D+00 + 0.3392159426028D+00 0.3468272471962D+00 0.3546035961349D+00 0.3625483648577D+00 + 0.3706649905790D+00 0.3789569731540D+00 0.3874278759464D+00 0.3960813266976D+00 + 0.4049210183955D+00 0.4139507101454D+00 0.4231742280388D+00 0.4325954660221D+00 + 0.4422183867640D+00 0.4520470225197D+00 0.4620854759931D+00 0.4723379211946D+00 + 0.4828086042953D+00 0.4935018444749D+00 0.5044220347646D+00 0.5155736428822D+00 + 0.5269612120602D+00 0.5385893618646D+00 0.5504627890040D+00 0.5625862681281D+00 + 0.5749646526146D+00 0.5876028753427D+00 0.6005059494532D+00 0.6136789690924D+00 + 0.6271271101407D+00 0.6408556309226D+00 0.6548698728981D+00 0.6691752613333D+00 + 0.6837773059493D+00 0.6986816015479D+00 0.7138938286123D+00 0.7294197538810D+00 + 0.7452652308942D+00 0.7614362005101D+00 0.7779386913894D+00 0.7947788204470D+00 + 0.8119627932680D+00 0.8294969044866D+00 0.8473875381261D+00 0.8656411678975D+00 + 0.8842643574549D+00 0.9032637606047D+00 0.9226461214683D+00 0.9424182745935D+00 + 0.9625871450140D+00 0.9831597482541D+00 0.1004143190275D+01 0.1025544667362D+01 + 0.1047371465949D+01 0.1069630962376D+01 0.1092330622582D+01 0.1115478001718D+01 + 0.1139080743699D+01 0.1163146580667D+01 0.1187683332379D+01 0.1212698905512D+01 + 0.1238201292877D+01 0.1264198572546D+01 0.1290698906886D+01 0.1317710541494D+01 + 0.1345241804028D+01 0.1373301102944D+01 0.1401896926110D+01 0.1431037839321D+01 + 0.1460732484690D+01 0.1490989578921D+01 0.1521817911461D+01 0.1553226342519D+01 + 0.1585223800953D+01 0.1617819282025D+01 0.1651021845012D+01 0.1684840610666D+01 + 0.1719284758534D+01 0.1754363524114D+01 0.1790086195862D+01 0.1826462112019D+01 + 0.1863500657290D+01 0.1901211259327D+01 0.1939603385053D+01 0.1978686536792D+01 + 0.2018470248210D+01 0.2058964080068D+01 0.2100177615772D+01 0.2142120456722D+01 + 0.2184802217451D+01 0.2228232520549D+01 0.2272420991371D+01 0.2317377252521D+01 + 0.2363110918097D+01 0.2409631587718D+01 0.2456948840298D+01 0.2505072227579D+01 + 0.2554011267414D+01 0.2603775436800D+01 0.2654374164640D+01 0.2705816824249D+01 + 0.2758112725590D+01 0.2811271107225D+01 0.2865301128002D+01 0.2920211858443D+01 + 0.2976012271854D+01 0.3032711235135D+01 0.3090317499294D+01 0.3148839689666D+01 + 0.3208286295814D+01 0.3268665661132D+01 0.3329985972130D+01 0.3392255247403D+01 + 0.3455481326284D+01 0.3519671857166D+01 0.3584834285516D+01 0.3650975841540D+01 + 0.3718103527540D+01 0.3786224104928D+01 0.3855344080910D+01 0.3925469694842D+01 + 0.3996606904248D+01 0.4068761370505D+01 0.4141938444201D+01 0.4216143150155D+01 + 0.4291380172106D+01 0.4367653837082D+01 0.4444968099432D+01 0.4523326524540D+01 + 0.4602732272224D+01 0.4683188079814D+01 0.4764696244923D+01 0.4847258607911D+01 + 0.4930876534058D+01 0.5015550895439D+01 0.5101282052526D+01 0.5188069835504D+01 + 0.5275913525340D+01 0.5364811834582D+01 0.5454762887935D+01 0.5545764202593D+01 + 0.5637812668364D+01 0.5730904527600D+01 0.5825035354930D+01 0.5920200036841D+01 + 0.6016392751096D+01 0.6113606946037D+01 0.6211835319763D+01 0.6311069799237D+01 + 0.6411301519318D+01 0.6512520801757D+01 0.6614717134178D+01 0.6717879149076D+01 + 0.6821994602856D+01 0.6927050354936D+01 0.7033032346971D+01 0.7139925582197D+01 + 0.7247714104955D+01 0.7356380980422D+01 0.7465908274590D+01 0.7576277034522D+01 + 0.7687467268944D+01 0.7799457929201D+01 0.7912226890625D+01 0.8025750934367D+01 + 0.8140005729731D+01 0.8254965817070D+01 0.8370604591283D+01 0.8486894285977D+01 + 0.8603805958343D+01 0.8721309474805D+01 0.8839373497487D+01 0.8957965471583D+01 + 0.9077051613664D+01 0.9196596901005D+01 0.9316565061973D+01 0.9436918567578D+01 + 0.9557618624205D+01 0.9678625167647D+01 0.9799896858462D+01 0.9921391078761D+01 + 0.1004306393048D+02 0.1016487023519D+02 0.1028676353561D+02 0.1040869609872D+02 + 0.1053061892078D+02 0.1065248173410D+02 0.1077423301584D+02 0.1089581999877D+02 + 0.1101718868413D+02 0.1113828385666D+02 0.1125904910191D+02 0.1137942682584D+02 + 0.1149935827678D+02 0.1161878356999D+02 0.1173764171462D+02 0.1185587064341D+02 + 0.1197340724503D+02 0.1209018739920D+02 0.1220614601465D+02 0.1232121706995D+02 + 0.1243533365740D+02 0.1254842802982D+02 0.1266043165050D+02 0.1277127524634D+02 + 0.1288088886404D+02 0.1298920192971D+02 0.1309614331160D+02 0.1320164138629D+02 + 0.1330562410812D+02 0.1340801908212D+02 0.1350875364026D+02 0.1360775492116D+02 + 0.1370494995324D+02 0.1380026574132D+02 0.1389362935662D+02 0.1398496803019D+02 + 0.1407420924981D+02 0.1416128086012D+02 0.1424611116627D+02 0.1432862904069D+02 + 0.1440876403324D+02 0.1448644648440D+02 0.1456160764164D+02 0.1463417977876D+02 + 0.1470409631813D+02 0.1477129195572D+02 0.1483570278883D+02 0.1489726644633D+02 + 0.1495592222127D+02 0.1501161120574D+02 0.1506427642781D+02 0.1511386299027D+02 + 0.1516031821110D+02 0.1520359176531D+02 0.1524363582812D+02 0.1528040521898D+02 + 0.1531385754641D+02 0.1534395335325D+02 0.1537065626208D+02 0.1539393312048D+02 + 0.1541375414585D+02 0.1543009306950D+02 0.1544292727951D+02 0.1545223796216D+02 + 0.1545801024155D+02 0.1546023331695D+02 0.1545890059744D+02 0.1545400983365D+02 + 0.1544556324596D+02 0.1543356764880D+02 0.1541803457065D+02 0.1539898036925D+02 + 0.1537642634154D+02 0.1535039882796D+02 0.1532092931044D+02 0.1528805450387D+02 + 0.1525181644030D+02 0.1521226254557D+02 0.1516944570778D+02 0.1512342433713D+02 + 0.1507426241669D+02 0.1502202954350D+02 0.1496680095964D+02 0.1490865757272D+02 + 0.1484768596530D+02 0.1478397839284D+02 0.1471763276969D+02 0.1464875264266D+02 + 0.1457744715182D+02 0.1450383097801D+02 0.1442802427679D+02 0.1435015259838D+02 + 0.1427034679327D+02 0.1418874290321D+02 0.1410548203722D+02 0.1402071023247D+02 + 0.1393457829969D+02 0.1384724165293D+02 0.1375886012364D+02 0.1366959775879D+02 + 0.1357962260304D+02 0.1348910646488D+02 0.1339822466686D+02 0.1330715577980D+02 + 0.1321608134121D+02 0.1312518555808D+02 0.1303465499419D+02 0.1294467824221D+02 + 0.1285544558101D+02 0.1276714861841D+02 0.1267997991994D+02 0.1259413262403D+02 + 0.1250980004419D+02 0.1242717525885D+02 0.1234645068948D+02 0.1226781766776D+02 + 0.1219146599257D+02 0.1211758347770D+02 0.1204635549121D+02 0.1197796448732D+02 + 0.1191258953197D+02 0.1185040582321D+02 0.1179158420730D+02 0.1173629069208D+02 + 0.1168468595856D+02 0.1163692487226D+02 0.1159315599549D+02 0.1155352110209D+02 + 0.1151815469598D+02 0.1148718353503D+02 0.1146072616178D+02 0.1143889244247D+02 + 0.1142178311602D+02 0.1140948935454D+02 0.1140209233686D+02 0.1139966283678D+02 + 0.1140226082774D+02 0.1140993510519D+02 0.1142272292875D+02 0.1144064968524D+02 + 0.1146372857460D+02 0.1149196031991D+02 0.1152533290326D+02 0.1156382132880D+02 + 0.1160738741454D+02 0.1165597961412D+02 0.1170953287012D+02 0.1176796849989D+02 + 0.1183119411535D+02 0.1189910357777D+02 0.1197157698856D+02 0.1204848071701D+02 + 0.1212966746596D+02 0.1221497637600D+02 0.1230423316888D+02 0.1239725033077D+02 + 0.1249382733567D+02 0.1259375090926D+02 0.1269679533346D+02 0.1280272279167D+02 + 0.1291128375448D+02 0.1302221740584D+02 0.1313525210912D+02 0.1325010591253D+02 + 0.1336648709337D+02 0.1348409474012D+02 0.1360261937149D+02 0.1372174359123D+02 + 0.1384114277758D+02 0.1396048580566D+02 0.1407943580155D+02 0.1419765092608D+02 + 0.1431478518661D+02 0.1443048927478D+02 0.1454441142812D+02 0.1465619831308D+02 + 0.1476549592746D+02 0.1487195051928D+02 0.1497520951989D+02 0.1507492248828D+02 + 0.1517074206398D+02 0.1526232492551D+02 0.1534933275145D+02 0.1543143318112D+02 + 0.1550830077157D+02 0.1557961794797D+02 0.1564507594396D+02 0.1570437572881D+02 + 0.1575722891823D+02 0.1580335866539D+02 0.1584250052899D+02 0.1587440331524D+02 + 0.1589882989033D+02 0.1591555796049D+02 0.1592438081630D+02 0.1592510803844D+02 + 0.1591756616179D+02 0.1590159929512D+02 0.1587706969359D+02 0.1584385828154D+02 + 0.1580186512290D+02 0.1575100983720D+02 0.1569123195871D+02 0.1562249123695D+02 + 0.1554476787665D+02 0.1545806271560D+02 0.1536239733893D+02 0.1525781412875D+02 + 0.1514437624809D+02 0.1502216755847D+02 0.1489129247063D+02 0.1475187572813D+02 + 0.1460406212401D+02 0.1444801615062D+02 0.1428392158332D+02 0.1411198099888D+02 + 0.1393241522964D+02 0.1374546275490D+02 0.1355137903119D+02 0.1335043576333D+02 + 0.1314292011864D+02 0.1292913388664D+02 0.1270939258714D+02 0.1248402452972D+02 + 0.1225336982785D+02 0.1201777937125D+02 0.1177761376017D+02 0.1153324220569D+02 + 0.1128504140014D+02 0.1103339436205D+02 0.1077868926027D+02 0.1052131822179D+02 + 0.1026167612835D+02 0.1000015940663D+02 0.9737164817090D+01 0.9473088246666D+01 + 0.9208323510392D+01 0.8943261167138D+01 0.8678287354606D+01 0.8413782648689D+01 + 0.8150120952198D+01 0.7887668417870D+01 0.7626782410424D+01 0.7367810512255D+01 + 0.7111089577147D+01 0.6856944836175D+01 0.6605689059620D+01 0.6357621778576D+01 + 0.6113028569417D+01 0.5872180404071D+01 0.5635333068605D+01 0.5402726652271D+01 + 0.5174585108689D+01 0.4951115890458D+01 0.4732509658013D+01 0.4518940063093D+01 + 0.4310563606744D+01 0.4107519571314D+01 0.3909930025455D+01 0.3717899900701D+01 + 0.3531517137795D+01 0.3350852900521D+01 0.3175961854415D+01 0.3006882507418D+01 + 0.2843637609166D+01 0.2686234605393D+01 0.2534666143602D+01 0.2388910626020D+01 + 0.2248932805599D+01 0.2114684420764D+01 0.1986104864410D+01 0.1863121882663D+01 + 0.1745652298807D+01 0.1633602757816D+01 0.1526870486911D+01 0.1425344067651D+01 + 0.1328904215091D+01 0.1237424559686D+01 0.1150772427713D+01 0.1068809616148D+01 + 0.9913931580887D+00 0.9183760750247D+00 0.8496081124357D+00 0.7849364554513D+00 + 0.7242064215293D+00 0.6672621273712D+00 0.6139471275574D+00 0.5641050226618D+00 + 0.5175800348878D+00 0.4742175495586D+00 0.4338646210828D+00 0.3963704423129D+00 + 0.3615867764997D+00 0.3293683513354D+00 0.2995732148544D+00 0.2720630532321D+00 + 0.2467034707815D+00 0.2233642326902D+00 0.2019194712763D+00 0.1822478567499D+00 + 0.1642327336682D+00 0.1477622244444D+00 0.1327293014336D+00 0.1190318292464D+00 + 0.1065725790655D+00 0.9525921682581D-01 0.8500426719540D-01 0.7572505534570D-01 + 0.6734362852856D-01 0.5978665949119D-01 0.5298533375213D-01 0.4687522273735D-01 + 0.4139614473480D-01 0.3649201557103D-01 0.3211069084453D-01 0.2820380147099D-01 + 0.2472658420543D-01 0.2163770870794D-01 0.1889910261478D-01 0.1647577596641D-01 + 0.1433564623066D-01 0.1244936504301D-01 0.1079014767040D-01 0.9333606088531D-02 + 0.8057586449521D-02 0.6942011605538D-02 0.5968729247262D-02 0.5121366113861D-02 + 0.4385188634413D-02 0.3746970269980D-02 0.3194865741265D-02 0.2718292249293D-02 + 0.2307817726031D-02 0.1955056088404D-02 0.1652569412799D-02 0.1393776897745D-02 + 0.1172870439853D-02 0.9847366120634D-03 0.8248848034661D-03 0.6893812560569D-03 + 0.5747887154298D-03 0.4781113990982D-03 0.3967449774979D-03 0.3284312582634D-03 + 0.2712172636576D-03 0.2234183935981D-03 0.1835853721449D-03 0.1504746831443D-03 + 0.1230222105786D-03 0.1003198106540D-03 0.8159455542106D-04 0.6619040144209D-04 + 0.5355205138722D-04 0.4321079120846D-04 0.3477210045803D-04 0.2790484818898D-04 + 0.2233190152246D-04 0.1782198824118D-04 0.1418266855132D-04 0.1125428434880D-04 + 0.8904766856498D-05 0.7025195313453D-05 0.5526010459652D-05 0.4333796852085D-05 + 0.3388557563637D-05 0.2641413563333D-05 0.2052668070841D-05 0.1590183444862D-05 + 0.1228024735392D-05 0.9453299398051D-06 0.7253722919424D-06 0.5547846237125D-06 + 0.4229200131023D-06 0.3213266143727D-06 0.2433177983142D-06 0.1836215545666D-06 + 0.1380955642703D-06 0.1034964778941D-06 0.7729376586493D-07 0.5752008209307D-07 + 0.4265142355148D-07 0.3151151106808D-07 0.2319578320089D-07 0.1701120974173D-07 + 0.1242881489534D-07 0.9046371073667D-08 0.6559198960071D-08 0.4737402476978D-08 + 0.3408191153158D-08 0.2442208093542D-08 0.1742998768590D-08 0.1238932286038D-08 + 0.8770296193333D-09 0.6182683290111D-09 0.4340255982013D-09 0.3033950772413D-09 + 0.2111715589818D-09 0.1463438404983D-09 0.1009726185101D-09 0.6935859066118D-10 + 0.4742849271888D-10 0.3228488955626D-10 0.2187547853929D-10 0.1475212866899D-10 + 0.9901881750809D-11 0.6613860882122D-11 0.4396644350124D-11 0.2908650000322D-11 + 0.1914873227728D-11 0.1254415200484D-11 0.8176535094916D-12 0.5302708391854D-12 + 0.3421370551355D-12 0.2196087836422D-12 0.1402231518601D-12 0.8906014768602D-13 + LSMS: xx z= 26. xvalws= 2.77074 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728402963D+02-0.5199725117641D+02-0.5199721792578D+02-0.5199718427293D+02 +-0.5199715021300D+02-0.5199711574107D+02-0.5199708085214D+02-0.5199704554119D+02 +-0.5199700980309D+02-0.5199697363268D+02-0.5199693702474D+02-0.5199689997397D+02 +-0.5199686247500D+02-0.5199682452243D+02-0.5199678611076D+02-0.5199674723444D+02 +-0.5199670788785D+02-0.5199666806529D+02-0.5199662776101D+02-0.5199658696918D+02 +-0.5199654568390D+02-0.5199650389922D+02-0.5199646160907D+02-0.5199641880734D+02 +-0.5199637548785D+02-0.5199633164434D+02-0.5199628727046D+02-0.5199624235979D+02 +-0.5199619690585D+02-0.5199615090205D+02-0.5199610434176D+02-0.5199605721822D+02 +-0.5199600952464D+02-0.5199596125410D+02-0.5199591239964D+02-0.5199586295419D+02 +-0.5199581291060D+02-0.5199576226162D+02-0.5199571099994D+02-0.5199565911815D+02 +-0.5199560660874D+02-0.5199555346411D+02-0.5199549967658D+02-0.5199544523837D+02 +-0.5199539014162D+02-0.5199533437834D+02-0.5199527794048D+02-0.5199522081989D+02 +-0.5199516300828D+02-0.5199510449731D+02-0.5199504527851D+02-0.5199498534331D+02 +-0.5199492468306D+02-0.5199486328897D+02-0.5199480115217D+02-0.5199473826367D+02 +-0.5199467461436D+02-0.5199461019507D+02-0.5199454499646D+02-0.5199447900910D+02 +-0.5199441222344D+02-0.5199434462984D+02-0.5199427621849D+02-0.5199420697954D+02 +-0.5199413690295D+02-0.5199406597858D+02-0.5199399419618D+02-0.5199392154537D+02 +-0.5199384801563D+02-0.5199377359634D+02-0.5199369827672D+02-0.5199362204589D+02 +-0.5199354489281D+02-0.5199346680633D+02-0.5199338777515D+02-0.5199330778784D+02 +-0.5199322683282D+02-0.5199314489839D+02-0.5199306197270D+02-0.5199297804374D+02 +-0.5199289309939D+02-0.5199280712733D+02-0.5199272011516D+02-0.5199263205027D+02 +-0.5199254291992D+02-0.5199245271123D+02-0.5199236141114D+02-0.5199226900644D+02 +-0.5199217548376D+02-0.5199208082958D+02-0.5199198503019D+02-0.5199188807175D+02 +-0.5199178994021D+02-0.5199169062139D+02-0.5199159010092D+02-0.5199148836424D+02 +-0.5199138539665D+02-0.5199128118323D+02-0.5199117570892D+02-0.5199106895845D+02 +-0.5199096091638D+02-0.5199085156707D+02-0.5199074089471D+02-0.5199062888326D+02 +-0.5199051551654D+02-0.5199040077813D+02-0.5199028465143D+02-0.5199016711964D+02 +-0.5199004816574D+02-0.5198992777253D+02-0.5198980592257D+02-0.5198968259824D+02 +-0.5198955778170D+02-0.5198943145487D+02-0.5198930359948D+02-0.5198917419701D+02 +-0.5198904322875D+02-0.5198891067574D+02-0.5198877651879D+02-0.5198864073848D+02 +-0.5198850331517D+02-0.5198836422896D+02-0.5198822345972D+02-0.5198808098707D+02 +-0.5198793679039D+02-0.5198779084882D+02-0.5198764314123D+02-0.5198749364622D+02 +-0.5198734234217D+02-0.5198718920716D+02-0.5198703421905D+02-0.5198687735537D+02 +-0.5198671859343D+02-0.5198655791024D+02-0.5198639528254D+02-0.5198623068679D+02 +-0.5198606409915D+02-0.5198589549550D+02-0.5198572485143D+02-0.5198555214224D+02 +-0.5198537734293D+02-0.5198520042816D+02-0.5198502137235D+02-0.5198484014954D+02 +-0.5198465673351D+02-0.5198447109769D+02-0.5198428321519D+02-0.5198409305883D+02 +-0.5198390060104D+02-0.5198370581396D+02-0.5198350866939D+02-0.5198330913876D+02 +-0.5198310719319D+02-0.5198290280341D+02-0.5198269593983D+02-0.5198248657249D+02 +-0.5198227467106D+02-0.5198206020484D+02-0.5198184314277D+02-0.5198162345340D+02 +-0.5198140110492D+02-0.5198117606510D+02-0.5198094830136D+02-0.5198071778068D+02 +-0.5198048446968D+02-0.5198024833454D+02-0.5198000934107D+02-0.5197976745462D+02 +-0.5197952264015D+02-0.5197927486220D+02-0.5197902408485D+02-0.5197877027176D+02 +-0.5197851338615D+02-0.5197825339081D+02-0.5197799024804D+02-0.5197772391971D+02 +-0.5197745436723D+02-0.5197718155151D+02-0.5197690543304D+02-0.5197662597177D+02 +-0.5197634312720D+02-0.5197605685833D+02-0.5197576712367D+02-0.5197547388122D+02 +-0.5197517708846D+02-0.5197487670236D+02-0.5197457267938D+02-0.5197426497542D+02 +-0.5197395354589D+02-0.5197363834563D+02-0.5197331932893D+02-0.5197299644952D+02 +-0.5197266966059D+02-0.5197233891476D+02-0.5197200416404D+02-0.5197166535990D+02 +-0.5197132245319D+02-0.5197097539418D+02-0.5197062413252D+02-0.5197026861727D+02 +-0.5196990879687D+02-0.5196954461909D+02-0.5196917603112D+02-0.5196880297948D+02 +-0.5196842541005D+02-0.5196804326804D+02-0.5196765649801D+02-0.5196726504383D+02 +-0.5196686884871D+02-0.5196646785514D+02-0.5196606200494D+02-0.5196565123919D+02 +-0.5196523549829D+02-0.5196481472189D+02-0.5196438884890D+02-0.5196395781753D+02 +-0.5196352156518D+02-0.5196308002855D+02-0.5196263314350D+02-0.5196218084518D+02 +-0.5196172306789D+02-0.5196125974518D+02-0.5196079080977D+02-0.5196031619354D+02 +-0.5195983582758D+02-0.5195934964214D+02-0.5195885756657D+02-0.5195835952942D+02 +-0.5195785545834D+02-0.5195734528011D+02-0.5195682892060D+02-0.5195630630481D+02 +-0.5195577735679D+02-0.5195524199969D+02-0.5195470015573D+02-0.5195415174616D+02 +-0.5195359669127D+02-0.5195303491041D+02-0.5195246632192D+02-0.5195189084316D+02 +-0.5195130839046D+02-0.5195071887917D+02-0.5195012222358D+02-0.5194951833693D+02 +-0.5194890713143D+02-0.5194828851819D+02-0.5194766240726D+02-0.5194702870759D+02 +-0.5194638732701D+02-0.5194573817222D+02-0.5194508114882D+02-0.5194441616121D+02 +-0.5194374311266D+02-0.5194306190525D+02-0.5194237243986D+02-0.5194167461616D+02 +-0.5194096833262D+02-0.5194025348643D+02-0.5193952997356D+02-0.5193879768871D+02 +-0.5193805652527D+02-0.5193730637535D+02-0.5193654712973D+02-0.5193577867788D+02 +-0.5193500090790D+02-0.5193421370652D+02-0.5193341695911D+02-0.5193261054963D+02 +-0.5193179436061D+02-0.5193096827316D+02-0.5193013216694D+02-0.5192928592013D+02 +-0.5192842940944D+02-0.5192756251004D+02-0.5192668509561D+02-0.5192579703828D+02 +-0.5192489820860D+02-0.5192398847556D+02-0.5192306770652D+02-0.5192213576726D+02 +-0.5192119252189D+02-0.5192023783287D+02-0.5191927156096D+02-0.5191829356524D+02 +-0.5191730370307D+02-0.5191630183005D+02-0.5191528780001D+02-0.5191426146503D+02 +-0.5191322267532D+02-0.5191217127930D+02-0.5191110712354D+02-0.5191003005272D+02 +-0.5190893990959D+02-0.5190783653503D+02-0.5190671976795D+02-0.5190558944528D+02 +-0.5190444540195D+02-0.5190328747089D+02-0.5190211548297D+02-0.5190092926700D+02 +-0.5189972864968D+02-0.5189851345560D+02-0.5189728350719D+02-0.5189603862472D+02 +-0.5189477862625D+02-0.5189350332759D+02-0.5189221254235D+02-0.5189090608179D+02 +-0.5188958375491D+02-0.5188824536834D+02-0.5188689072635D+02-0.5188551963080D+02 +-0.5188413188114D+02-0.5188272727435D+02-0.5188130560492D+02-0.5187986666482D+02 +-0.5187841024347D+02-0.5187693612772D+02-0.5187544410178D+02-0.5187393394724D+02 +-0.5187240544300D+02-0.5187085836524D+02-0.5186929248740D+02-0.5186770758014D+02 +-0.5186610341132D+02-0.5186447974591D+02-0.5186283634606D+02-0.5186117297093D+02 +-0.5185948937678D+02-0.5185778531685D+02-0.5185606054135D+02-0.5185431479744D+02 +-0.5185254782916D+02-0.5185075937741D+02-0.5184894917991D+02-0.5184711697117D+02 +-0.5184526248242D+02-0.5184338544160D+02-0.5184148557330D+02-0.5183956259875D+02 +-0.5183761623572D+02-0.5183564619854D+02-0.5183365219802D+02-0.5183163394142D+02 +-0.5182959113240D+02-0.5182752347098D+02-0.5182543065350D+02-0.5182331237255D+02 +-0.5182116831697D+02-0.5181899817174D+02-0.5181680161800D+02-0.5181457833297D+02 +-0.5181232798987D+02-0.5181005025795D+02-0.5180774480235D+02-0.5180541128413D+02 +-0.5180304936016D+02-0.5180065868310D+02-0.5179823890134D+02-0.5179578965895D+02 +-0.5179331059564D+02-0.5179080134665D+02-0.5178826154277D+02-0.5178569081025D+02 +-0.5178308877073D+02-0.5178045504121D+02-0.5177778923399D+02-0.5177509095659D+02 +-0.5177235981171D+02-0.5176959539717D+02-0.5176679730585D+02-0.5176396512563D+02 +-0.5176109843930D+02-0.5175819682457D+02-0.5175525985390D+02-0.5175228709457D+02 +-0.5174927810849D+02-0.5174623245221D+02-0.5174314967682D+02-0.5174002932792D+02 +-0.5173687094551D+02-0.5173367406395D+02-0.5173043821187D+02-0.5172716291215D+02 +-0.5172384768177D+02-0.5172049203182D+02-0.5171709546736D+02-0.5171365748739D+02 +-0.5171017758479D+02-0.5170665524617D+02-0.5170308995189D+02-0.5169948117592D+02 +-0.5169582838578D+02-0.5169213104249D+02-0.5168838860043D+02-0.5168460050732D+02 +-0.5168076620412D+02-0.5167688512494D+02-0.5167295669696D+02-0.5166898034036D+02 +-0.5166495546822D+02-0.5166088148646D+02-0.5165675779371D+02-0.5165258378128D+02 +-0.5164835883303D+02-0.5164408232529D+02-0.5163975362681D+02-0.5163537209858D+02 +-0.5163093709386D+02-0.5162644795799D+02-0.5162190402831D+02-0.5161730463415D+02 +-0.5161264909661D+02-0.5160793672858D+02-0.5160316683457D+02-0.5159833871062D+02 +-0.5159345164422D+02-0.5158850491424D+02-0.5158349779076D+02-0.5157842953502D+02 +-0.5157329939929D+02-0.5156810662682D+02-0.5156285045165D+02-0.5155753009857D+02 +-0.5155214478300D+02-0.5154669371088D+02-0.5154117607855D+02-0.5153559107266D+02 +-0.5152993787006D+02-0.5152421563767D+02-0.5151842353238D+02-0.5151256070096D+02 +-0.5150662627991D+02-0.5150061939535D+02-0.5149453916296D+02-0.5148838468777D+02 +-0.5148215506412D+02-0.5147584937554D+02-0.5146946669454D+02-0.5146300608264D+02 +-0.5145646659012D+02-0.5144984725596D+02-0.5144314710771D+02-0.5143636516137D+02 +-0.5142950042123D+02-0.5142255187982D+02-0.5141551851771D+02-0.5140839930344D+02 +-0.5140119319335D+02-0.5139389913149D+02-0.5138651604948D+02-0.5137904286634D+02 +-0.5137147848843D+02-0.5136382180931D+02-0.5135607170955D+02-0.5134822705665D+02 +-0.5134028670491D+02-0.5133224949527D+02-0.5132411425521D+02-0.5131587979859D+02 +-0.5130754492555D+02-0.5129910842232D+02-0.5129056906116D+02-0.5128192560017D+02 +-0.5127317678315D+02-0.5126432133956D+02-0.5125535798425D+02-0.5124628541740D+02 +-0.5123710232443D+02-0.5122780737574D+02-0.5121839922671D+02-0.5120887651745D+02 +-0.5119923787276D+02-0.5118948190193D+02-0.5117960719865D+02-0.5116961234085D+02 +-0.5115949589056D+02-0.5114925639380D+02-0.5113889238044D+02-0.5112840236408D+02 +-0.5111778484188D+02-0.5110703829447D+02-0.5109616118579D+02-0.5108515196301D+02 +-0.5107400905631D+02-0.5106273087889D+02-0.5105131582667D+02-0.5103976227836D+02 +-0.5102806859514D+02-0.5101623312071D+02-0.5100425418105D+02-0.5099213008436D+02 +-0.5097985912091D+02-0.5096743956297D+02-0.5095486966464D+02-0.5094214766176D+02 +-0.5092927177183D+02-0.5091624019384D+02-0.5090305110822D+02-0.5088970267672D+02 +-0.5087619304230D+02-0.5086252032900D+02-0.5084868264193D+02-0.5083467806710D+02 +-0.5082050467136D+02-0.5080616050232D+02-0.5079164358822D+02-0.5077695193792D+02 +-0.5076208354076D+02-0.5074703636655D+02-0.5073180836542D+02-0.5071639746782D+02 +-0.5070080158445D+02-0.5068501860613D+02-0.5066904640389D+02-0.5065288282874D+02 +-0.5063652571181D+02-0.5061997286414D+02-0.5060322207678D+02-0.5058627112067D+02 +-0.5056911774669D+02-0.5055175968555D+02-0.5053419464788D+02-0.5051642032411D+02 +-0.5049843438458D+02-0.5048023447945D+02-0.5046181823877D+02-0.5044318327247D+02 +-0.5042432717038D+02-0.5040524750226D+02-0.5038594181787D+02-0.5036640764694D+02 +-0.5034664249930D+02-0.5032664386488D+02-0.5030640921379D+02-0.5028593599640D+02 +-0.5026522164341D+02-0.5024426356594D+02-0.5022305915564D+02-0.5020160578474D+02 +-0.5017990080623D+02-0.5015794155393D+02-0.5013572534263D+02-0.5011324946826D+02 +-0.5009051120796D+02-0.5006750782030D+02-0.5004423654542D+02-0.5002069460521D+02 +-0.4999687920344D+02-0.4997278752603D+02-0.4994841674120D+02-0.4992376399966D+02 +-0.4989882643488D+02-0.4987360116327D+02-0.4984808528443D+02-0.4982227588141D+02 +-0.4979617002094D+02-0.4976976475371D+02-0.4974305711462D+02-0.4971604412309D+02 +-0.4968872278335D+02-0.4966109008469D+02-0.4963314300185D+02-0.4960487849528D+02 +-0.4957629351145D+02-0.4954738498327D+02-0.4951814983035D+02-0.4948858495939D+02 +-0.4945868726453D+02-0.4942845362775D+02-0.4939788091919D+02-0.4936696599757D+02 +-0.4933570571061D+02-0.4930409689534D+02-0.4927213637859D+02-0.4923982097740D+02 +-0.4920714749935D+02-0.4917411274309D+02-0.4914071349870D+02-0.4910694654815D+02 +-0.4907280866573D+02-0.4903829661848D+02-0.4900340716666D+02-0.4896813706420D+02 +-0.4893248305909D+02-0.4889644189392D+02-0.4886001030623D+02-0.4882318502909D+02 +-0.4878596279141D+02-0.4874834031849D+02-0.4871031433244D+02-0.4867188155262D+02 +-0.4863303869609D+02-0.4859378247804D+02-0.4855410961222D+02-0.4851401681140D+02 +-0.4847350078774D+02-0.4843255825325D+02-0.4839118592018D+02-0.4834938050138D+02 +-0.4830713871075D+02-0.4826445726356D+02-0.4822133287682D+02-0.4817776226967D+02 +-0.4813374216365D+02-0.4808926928306D+02-0.4804434035526D+02-0.4799895211091D+02 +-0.4795310128431D+02-0.4790678461358D+02-0.4785999884093D+02-0.4781274071282D+02 +-0.4776500698020D+02-0.4771679439861D+02-0.4766809972836D+02-0.4761891973461D+02 +-0.4756925118748D+02-0.4751909086208D+02-0.4746843553857D+02-0.4741728200213D+02 +-0.4736562704295D+02-0.4731346745620D+02-0.4726080004188D+02-0.4720762160479D+02 +-0.4715392895431D+02-0.4709971890425D+02-0.4704498827268D+02-0.4698973388163D+02 +-0.4693395255690D+02-0.4687764112767D+02-0.4682079642628D+02-0.4676341528777D+02 +-0.4670549454962D+02-0.4664703105122D+02-0.4658802163351D+02-0.4652846313853D+02 +-0.4646835240891D+02-0.4640768628735D+02-0.4634646161617D+02-0.4628467523671D+02 +-0.4622232398885D+02-0.4615940471037D+02-0.4609591423645D+02-0.4603184939910D+02 +-0.4596720702657D+02-0.4590198394276D+02-0.4583617696675D+02-0.4576978291218D+02 +-0.4570279858676D+02-0.4563522079176D+02-0.4556704632159D+02-0.4549827196328D+02 +-0.4542889449617D+02-0.4535891069156D+02-0.4528831731237D+02-0.4521711111299D+02 +-0.4514528883912D+02-0.4507284722768D+02-0.4499978300686D+02-0.4492609289624D+02 +-0.4485177360700D+02-0.4477682184233D+02-0.4470123429783D+02-0.4462500766219D+02 +-0.4454813861790D+02-0.4447062384219D+02-0.4439246000814D+02-0.4431364378589D+02 +-0.4423417184413D+02-0.4415404085174D+02-0.4407324747964D+02-0.4399178840285D+02 +-0.4390966030283D+02-0.4382685986996D+02-0.4374338380636D+02-0.4365922882888D+02 +-0.4357439167239D+02-0.4348886909331D+02-0.4340265787340D+02-0.4331575482384D+02 +-0.4322815678953D+02-0.4313986065369D+02-0.4305086334268D+02-0.4296116183110D+02 +-0.4287075314713D+02-0.4277963437808D+02-0.4268780267613D+02-0.4259525526436D+02 +-0.4250198944278D+02-0.4240800259471D+02-0.4231329219311D+02-0.4221785580702D+02 +-0.4212169110814D+02-0.4202479587724D+02-0.4192716801066D+02-0.4182880552657D+02 +-0.4172970657123D+02-0.4162986942478D+02-0.4152929250699D+02-0.4142797438248D+02 +-0.4132591376546D+02-0.4122310952415D+02-0.4111956068435D+02-0.4101526643252D+02 +-0.4091022611799D+02-0.4080443925436D+02-0.4069790551997D+02-0.4059062475744D+02 +-0.4048259697200D+02-0.4037382232884D+02-0.4026430114924D+02-0.4015403390548D+02 +-0.4004302121449D+02-0.3993126383031D+02-0.3981876263529D+02-0.3970551863000D+02 +-0.3959153292214D+02-0.3947680671418D+02-0.3936134129010D+02-0.3924513800125D+02 +-0.3912819825140D+02-0.3901052348125D+02-0.3889211515259D+02-0.3877297473220D+02 +-0.3865310367583D+02-0.3853250341248D+02-0.3841117532917D+02-0.3828912075654D+02 +-0.3816634095549D+02-0.3804283710513D+02-0.3791861029232D+02-0.3779366150300D+02 +-0.3766799161555D+02-0.3754160139636D+02-0.3741449149782D+02-0.3728666245883D+02 +-0.3715811470790D+02-0.3702884856900D+02-0.3689886427010D+02-0.3676816195438D+02 +-0.3663674169408D+02-0.3650460350690D+02-0.3637174737474D+02-0.3623817326473D+02 +-0.3610388115218D+02-0.3596887104531D+02-0.3583314301154D+02-0.3569669720495D+02 +-0.3555953389464D+02-0.3542165349386D+02-0.3528305658922D+02-0.3514374397011D+02 +-0.3500371665774D+02-0.3486297593358D+02-0.3472152336690D+02-0.3457936084122D+02 +-0.3443649057928D+02-0.3429291516643D+02-0.3414863757211D+02-0.3400366116934D+02 +-0.3385798975190D+02-0.3371162754922D+02-0.3356457923876D+02-0.3341684995570D+02 +-0.3326844530007D+02-0.3311937134098D+02-0.3296963461820D+02-0.3281924214079D+02 +-0.3266820138293D+02-0.3251652027694D+02-0.3236420720350D+02-0.3221127097903D+02 +-0.3205772084042D+02-0.3190356642710D+02-0.3174881776049D+02-0.3159348522098D+02 +-0.3143757952257D+02-0.3128111168511D+02-0.3112409300454D+02-0.3096653502093D+02 +-0.3080844948479D+02-0.3064984832153D+02-0.3049074359439D+02-0.3033114746593D+02 +-0.3017107215833D+02-0.3001052991254D+02-0.2984953294675D+02-0.2968809341400D+02 +-0.2952622335948D+02-0.2936393467762D+02-0.2920123906907D+02-0.2903814799805D+02 +-0.2887467265011D+02-0.2871082389066D+02-0.2854661222446D+02-0.2838204775647D+02 +-0.2821714015409D+02-0.2805189861135D+02-0.2788633181514D+02-0.2772044791378D+02 +-0.2755425448842D+02-0.2738775852723D+02-0.2722096640307D+02-0.2705388385454D+02 +-0.2688651597109D+02-0.2671886718221D+02-0.2655094125117D+02-0.2638274127348D+02 +-0.2621426968047D+02-0.2604552824823D+02-0.2587651811214D+02-0.2570723978730D+02 +-0.2553769319514D+02-0.2536787769632D+02-0.2519779213021D+02-0.2502743486110D+02 +-0.2485680383129D+02-0.2468589662112D+02-0.2451471051601D+02-0.2434324258050D+02 +-0.2417148973924D+02-0.2399944886481D+02-0.2382711687194D+02-0.2365449081810D+02 +-0.2348156800981D+02-0.2330834611404D+02-0.2313482327422D+02-0.2296099822964D+02 +-0.2278687043744D+02-0.2261244019567D+02-0.2243770876615D+02-0.2226267849517D+02 +-0.2208735293014D+02-0.2191173693001D+02-0.2173583676674D+02-0.2155966021537D+02 +-0.2138321662948D+02-0.2120651699903D+02-0.2102957398727D+02-0.2085240194340D+02 +-0.2067501688787D+02-0.2049743646710D+02-0.2031967987514D+02-0.2014176773999D+02 +-0.1996372197331D+02-0.1978556558301D+02-0.1960732244950D+02-0.1942901706755D+02 +-0.1925067425750D+02-0.1907231885074D+02-0.1889397535633D+02-0.1871566761696D+02 +-0.1853741846374D+02-0.1835924938052D+02-0.1818118018868D+02-0.1800322876380D+02 +-0.1782541079491D+02-0.1764773959582D+02-0.1747022597686D+02-0.1729287818264D+02 +-0.1711570189939D+02-0.1693870033244D+02-0.1676187435187D+02-0.1658522270158D+02 +-0.1640874226459D+02-0.1623242837596D+02-0.1605627517269D+02-0.1588027596970D+02 +-0.1570442365062D+02-0.1552871106216D+02-0.1535313140208D+02-0.1517767859145D+02 +-0.1500234762341D+02-0.1482713488228D+02-0.1465203842815D+02-0.1447705824363D+02 +-0.1430219644106D+02-0.1412745742929D+02-0.1395284804054D+02-0.1377837761854D+02 +-0.1360405806987D+02-0.1342990388081D+02-0.1325593210249D+02-0.1308216230731D+02 +-0.1290861651951D+02-0.1273531912305D+02-0.1256229674959D+02-0.1238957814960D+02 +-0.1221719404907D+02-0.1204517699438D+02-0.1187356118783D+02-0.1170238231558D+02 +-0.1153167737042D+02-0.1136148447069D+02-0.1119184267735D+02-0.1102279181034D+02 +-0.1085437226576D+02-0.1068662483495D+02-0.1051959052659D+02-0.1035331039265D+02 +-0.1018782535928D+02-0.1002317606321D+02-0.9859402694342D+01-0.9696544845323D+01 +-0.9534641368482D+01-0.9373730240659D+01-0.9213848436346D+01-0.9055031809511D+01 +-0.8897314984394D+01-0.8740731255549D+01-0.8585312497336D+01-0.8431089083029D+01 +-0.8278089813661D+01-0.8126341856676D+01-0.7975870694439D+01-0.7826700082584D+01 +-0.7678852018171D+01-0.7532346717566D+01-0.7387202603932D+01-0.7243436304187D+01 +-0.7101062655233D+01-0.6960094719270D+01-0.6820543807924D+01-0.6682419514939D+01 +-0.6545729757123D+01-0.6410480823229D+01-0.6276677430423D+01-0.6144322787958D+01 +-0.6013418667669D+01-0.5883965480867D+01-0.5755962361193D+01-0.5629407252975D+01 +-0.5504297004604D+01-0.5380627466436D+01-0.5258393592702D+01-0.5137589546863D+01 +-0.5018208809882D+01-0.4900244290793D+01-0.4783688438971D+01-0.4668533357470D+01 +-0.4554770916754D+01-0.4442392868124D+01-0.4331390956131D+01-0.4221757029192D+01 +-0.4113483147635D+01-0.4006561688322D+01-0.3900985445011D+01-0.3796747723533D+01 +-0.3693842430876D+01-0.3592264157211D+01-0.3492008249906D+01-0.3393070878541D+01 +-0.3295449089976D+01-0.3199140852531D+01-0.3104145088414D+01-0.3010461693592D+01 +-0.2918091544431D+01-0.2827036490592D+01-0.2737299333835D+01-0.2648883792669D+01 +-0.2561794453010D+01-0.2476036705393D+01-0.2391616669610D+01-0.2308541108029D+01 +-0.2226817329318D+01-0.2146453084634D+01-0.2067456458802D+01-0.1989835759339D+01 +-0.1913599406514D+01-0.1838755827812D+01-0.1765313360391D+01-0.1693280165020D+01 +-0.1622664154978D+01-0.1553472943063D+01-0.1485713809518D+01-0.1419393693186D+01 +-0.1354519207570D+01-0.1291096682842D+01-0.1229132234097D+01-0.1168631855453D+01 +-0.1109601538882D+01-0.1052047416050D+01-0.9959759208814D+00-0.9413939701484D+00 +-0.8883091590719D+00-0.8367299687430D+00-0.7866659821253D+00-0.7381281054637D+00 +-0.6911287920896D+00-0.6456822658698D+00-0.6018047418553D+00-0.5595146420441D+00 +-0.5188328045500D+00-0.4797826848498D+00-0.4423905481512D+00-0.4066856522662D+00 +-0.3727004206897D+00-0.3404706058472D+00-0.3100354427093D+00-0.2814377931599D+00 +-0.2547240189175D+00 + 0.0000000000000D+00 + 1012 0.2770741520224D+01 + 0.2150927949039D-04 0.2202124536575D-04 0.2254539478646D-04 0.2308201760180D-04 + 0.2363141055333D-04 0.2419387743865D-04 0.2476972927906D-04 0.2535928449121D-04 + 0.2596286906285D-04 0.2658081673262D-04 0.2721346917432D-04 0.2786117618535D-04 + 0.2852429587973D-04 0.2920319488569D-04 0.2989824854795D-04 0.3060984113473D-04 + 0.3133836604977D-04 0.3208422604934D-04 0.3284783346437D-04 0.3362961042788D-04 + 0.3442998910781D-04 0.3524941194536D-04 0.3608833189898D-04 0.3694721269416D-04 + 0.3782652907911D-04 0.3872676708658D-04 0.3964842430179D-04 0.4059201013679D-04 + 0.4155804611131D-04 0.4254706614023D-04 0.4355961682789D-04 0.4459625776943D-04 + 0.4565756185917D-04 0.4674411560639D-04 0.4785651945856D-04 0.4899538813222D-04 + 0.5016135095172D-04 0.5135505219602D-04 0.5257715145361D-04 0.5382832398596D-04 + 0.5510926109951D-04 0.5642067052648D-04 0.5776327681476D-04 0.5913782172693D-04 + 0.6054506464885D-04 0.6198578300785D-04 0.6346077270088D-04 0.6497084853274D-04 + 0.6651684466474D-04 0.6809961507398D-04 0.6972003402351D-04 0.7137899654355D-04 + 0.7307741892426D-04 0.7481623921999D-04 0.7659641776564D-04 0.7841893770513D-04 + 0.8028480553242D-04 0.8219505164534D-04 0.8415073091254D-04 0.8615292325379D-04 + 0.8820273423416D-04 0.9030129567206D-04 0.9244976626185D-04 0.9464933221109D-04 + 0.9690120789284D-04 0.9920663651351D-04 0.1015668907964D-03 0.1039832736813D-03 + 0.1064571190411D-03 0.1089897924148D-03 0.1115826917580D-03 0.1142372482113D-03 + 0.1169549268870D-03 0.1197372276738D-03 0.1225856860613D-03 0.1255018739831D-03 + 0.1284874006808D-03 0.1315439135877D-03 0.1346730992336D-03 0.1378766841712D-03 + 0.1411564359238D-03 0.1445141639563D-03 0.1479517206680D-03 0.1514710024102D-03 + 0.1550739505263D-03 0.1587625524179D-03 0.1625388426349D-03 0.1664049039925D-03 + 0.1703628687133D-03 0.1744149195974D-03 0.1785632912194D-03 0.1828102711544D-03 + 0.1871582012321D-03 0.1916094788209D-03 0.1961665581427D-03 0.2008319516176D-03 + 0.2056082312418D-03 0.2104980299966D-03 0.2155040432913D-03 0.2206290304405D-03 + 0.2258758161753D-03 0.2312472921908D-03 0.2367464187300D-03 0.2423762262044D-03 + 0.2481398168542D-03 0.2540403664457D-03 0.2600811260106D-03 0.2662654236245D-03 + 0.2725966662290D-03 0.2790783414953D-03 0.2857140197324D-03 0.2925073558401D-03 + 0.2994620913080D-03 0.3065820562611D-03 0.3138711715547D-03 0.3213334509168D-03 + 0.3289730031429D-03 0.3367940343406D-03 0.3448008502286D-03 0.3529978584881D-03 + 0.3613895711713D-03 0.3699806071650D-03 0.3787756947128D-03 0.3877796739964D-03 + 0.3969974997780D-03 0.4064342441040D-03 0.4160950990725D-03 0.4259853796663D-03 + 0.4361105266519D-03 0.4464761095462D-03 0.4570878296540D-03 0.4679515231757D-03 + 0.4790731643881D-03 0.4904588689006D-03 0.5021148969868D-03 0.5140476569946D-03 + 0.5262637088364D-03 0.5387697675611D-03 0.5515727070097D-03 0.5646795635561D-03 + 0.5780975399370D-03 0.5918340091694D-03 0.6058965185620D-03 0.6202927938188D-03 + 0.6350307432396D-03 0.6501184620192D-03 0.6655642366457D-03 0.6813765494038D-03 + 0.6975640829812D-03 0.7141357251847D-03 0.7311005737650D-03 0.7484679413557D-03 + 0.7662473605260D-03 0.7844485889531D-03 0.8030816147148D-03 0.8221566617048D-03 + 0.8416841951763D-03 0.8616749274129D-03 0.8821398235337D-03 0.9030901074324D-03 + 0.9245372678559D-03 0.9464930646236D-03 0.9689695349932D-03 0.9919790001731D-03 + 0.1015534071988D-02 0.1039647659698D-02 0.1064332976981D-02 0.1089603549068D-02 + 0.1115473220057D-02 0.1141956160389D-02 0.1169066874495D-02 0.1196820208634D-02 + 0.1225231358897D-02 0.1254315879409D-02 0.1284089690715D-02 0.1314569088366D-02 + 0.1345770751696D-02 0.1377711752814D-02 0.1410409565795D-02 0.1443882076088D-02 + 0.1478147590144D-02 0.1513224845264D-02 0.1549133019674D-02 0.1585891742841D-02 + 0.1623521106018D-02 0.1662041673040D-02 0.1701474491365D-02 0.1741841103378D-02 + 0.1783163557945D-02 0.1825464422244D-02 0.1868766793867D-02 0.1913094313196D-02 + 0.1958471176071D-02 0.2004922146751D-02 0.2052472571166D-02 0.2101148390486D-02 + 0.2150976154989D-02 0.2201983038264D-02 0.2254196851731D-02 0.2307646059493D-02 + 0.2362359793542D-02 0.2418367869301D-02 0.2475700801533D-02 0.2534389820612D-02 + 0.2594466889165D-02 0.2655964719104D-02 0.2718916789042D-02 0.2783357362106D-02 + 0.2849321504172D-02 0.2916845102501D-02 0.2985964884814D-02 0.3056718438800D-02 + 0.3129144232066D-02 0.3203281632551D-02 0.3279170929405D-02 0.3356853354336D-02 + 0.3436371103460D-02 0.3517767359634D-02 0.3601086315312D-02 0.3686373195913D-02 + 0.3773674283724D-02 0.3863036942351D-02 0.3954509641719D-02 0.4048141983652D-02 + 0.4143984728019D-02 0.4242089819491D-02 0.4342510414893D-02 0.4445300911185D-02 + 0.4550516974067D-02 0.4658215567249D-02 0.4768454982366D-02 0.4881294869584D-02 + 0.4996796268890D-02 0.5115021642093D-02 0.5236034905549D-02 0.5359901463622D-02 + 0.5486688242898D-02 0.5616463727181D-02 0.5749297993262D-02 0.5885262747508D-02 + 0.6024431363262D-02 0.6166878919093D-02 0.6312682237899D-02 0.6461919926891D-02 + 0.6614672418475D-02 0.6771022012045D-02 0.6931052916716D-02 0.7094851295016D-02 + 0.7262505307545D-02 0.7434105158642D-02 0.7609743143066D-02 0.7789513693721D-02 + 0.7973513430440D-02 0.8161841209859D-02 0.8354598176397D-02 0.8551887814376D-02 + 0.8753816001287D-02 0.8960491062250D-02 0.9172023825667D-02 0.9388527680122D-02 + 0.9610118632529D-02 0.9836915367568D-02 0.1006903930843D-01 0.1030661467892D-01 + 0.1054976856688D-01 0.1079863098909D-01 0.1105333495749D-01 0.1131401654696D-01 + 0.1158081496451D-01 0.1185387262003D-01 0.1213333519856D-01 0.1241935173418D-01 + 0.1271207468545D-01 0.1301166001257D-01 0.1331826725616D-01 0.1363205961778D-01 + 0.1395320404221D-01 0.1428187130150D-01 0.1461823608081D-01 0.1496247706623D-01 + 0.1531477703430D-01 0.1567532294367D-01 0.1604430602860D-01 0.1642192189452D-01 + 0.1680837061563D-01 0.1720385683464D-01 0.1760858986456D-01 0.1802278379280D-01 + 0.1844665758734D-01 0.1888043520531D-01 0.1932434570378D-01 0.1977862335297D-01 + 0.2024350775185D-01 0.2071924394615D-01 0.2120608254895D-01 0.2170427986376D-01 + 0.2221409801021D-01 0.2273580505238D-01 0.2326967512987D-01 0.2381598859160D-01 + 0.2437503213237D-01 0.2494709893234D-01 0.2553248879941D-01 0.2613150831454D-01 + 0.2674447098014D-01 0.2737169737147D-01 0.2801351529124D-01 0.2867025992742D-01 + 0.2934227401421D-01 0.3002990799646D-01 0.3073352019732D-01 0.3145347698951D-01 + 0.3219015296988D-01 0.3294393113773D-01 0.3371520307664D-01 0.3450436914006D-01 + 0.3531183864059D-01 0.3613803004319D-01 0.3698337116219D-01 0.3784829936233D-01 + 0.3873326176383D-01 0.3963871545150D-01 0.4056512768813D-01 0.4151297613205D-01 + 0.4248274905905D-01 0.4347494558865D-01 0.4449007591493D-01 0.4552866154180D-01 + 0.4659123552298D-01 0.4767834270657D-01 0.4879053998454D-01 0.4992839654695D-01 + 0.5109249414114D-01 0.5228342733595D-01 0.5350180379101D-01 0.5474824453121D-01 + 0.5602338422639D-01 0.5732787147645D-01 0.5866236910176D-01 0.6002755443915D-01 + 0.6142411964345D-01 0.6285277199472D-01 0.6431423421119D-01 0.6580924476805D-01 + 0.6733855822219D-01 0.6890294554290D-01 0.7050319444864D-01 0.7214010975008D-01 + 0.7381451369925D-01 0.7552724634520D-01 0.7727916589591D-01 0.7907114908690D-01 + 0.8090409155624D-01 0.8277890822643D-01 0.8469653369292D-01 0.8665792261951D-01 + 0.8866405014071D-01 0.9071591227111D-01 0.9281452632182D-01 0.9496093132410D-01 + 0.9715618846031D-01 0.9940138150208D-01 0.1016976172560D+00 0.1040460260169D+00 + 0.1064477620282D+00 0.1089040039508D+00 0.1114159553388D+00 0.1139848451236D+00 + 0.1166119281054D+00 0.1192984854532D+00 0.1220458252122D+00 0.1248552828197D+00 + 0.1277282216288D+00 0.1306660334408D+00 0.1336701390448D+00 0.1367419887670D+00 + 0.1398830630269D+00 0.1430948729031D+00 0.1463789607067D+00 0.1497369005636D+00 + 0.1531702990050D+00 0.1566807955666D+00 0.1602700633964D+00 0.1639398098711D+00 + 0.1676917772207D+00 0.1715277431623D+00 0.1754495215419D+00 0.1794589629856D+00 + 0.1835579555582D+00 0.1877484254317D+00 0.1920323375616D+00 0.1964116963718D+00 + 0.2008885464482D+00 0.2054649732406D+00 0.2101431037732D+00 0.2149251073635D+00 + 0.2198131963488D+00 0.2248096268222D+00 0.2299166993754D+00 0.2351367598503D+00 + 0.2404722000984D+00 0.2459254587480D+00 0.2514990219789D+00 0.2571954243047D+00 + 0.2630172493626D+00 0.2689671307106D+00 0.2750477526311D+00 0.2812618509418D+00 + 0.2876122138134D+00 0.2941016825931D+00 0.3007331526352D+00 0.3075095741362D+00 + 0.3144339529771D+00 0.3215093515700D+00 0.3287388897102D+00 0.3361257454325D+00 + 0.3436731558729D+00 0.3513844181328D+00 0.3592628901485D+00 0.3673119915621D+00 + 0.3755352045968D+00 0.3839360749336D+00 0.3925182125899D+00 0.4012852927993D+00 + 0.4102410568930D+00 0.4193893131804D+00 0.4287339378299D+00 0.4382788757486D+00 + 0.4480281414604D+00 0.4579858199819D+00 0.4681560676951D+00 0.4785431132164D+00 + 0.4891512582614D+00 0.4999848785043D+00 0.5110484244305D+00 0.5223464221834D+00 + 0.5338834744021D+00 0.5456642610510D+00 0.5576935402392D+00 0.5699761490289D+00 + 0.5825170042325D+00 0.5953211031952D+00 0.6083935245653D+00 0.6217394290472D+00 + 0.6353640601390D+00 0.6492727448516D+00 0.6634708944082D+00 0.6779640049238D+00 + 0.6927576580616D+00 0.7078575216668D+00 0.7232693503742D+00 0.7389989861895D+00 + 0.7550523590420D+00 0.7714354873073D+00 0.7881544782973D+00 0.8052155287175D+00 + 0.8226249250876D+00 0.8403890441249D+00 0.8585143530879D+00 0.8770074100784D+00 + 0.8958748642992D+00 0.9151234562658D+00 0.9347600179702D+00 0.9547914729931D+00 + 0.9752248365635D+00 0.9960672155622D+00 0.1017325808468D+01 0.1039007905241D+01 + 0.1061120887144D+01 0.1083672226499D+01 0.1106669486370D+01 0.1130120320176D+01 + 0.1154032471231D+01 0.1178413772204D+01 0.1203272144493D+01 0.1228615597523D+01 + 0.1254452227950D+01 0.1280790218774D+01 0.1307637838359D+01 0.1335003439353D+01 + 0.1362895457506D+01 0.1391322410385D+01 0.1420292895972D+01 0.1449815591159D+01 + 0.1479899250115D+01 0.1510552702537D+01 0.1541784851777D+01 0.1573604672833D+01 + 0.1606021210210D+01 0.1639043575644D+01 0.1672680945677D+01 0.1706942559091D+01 + 0.1741837714186D+01 0.1777375765901D+01 0.1813566122779D+01 0.1850418243757D+01 + 0.1887941634794D+01 0.1926145845317D+01 0.1965040464488D+01 0.2004635117287D+01 + 0.2044939460400D+01 0.2085963177919D+01 0.2127715976829D+01 0.2170207582300D+01 + 0.2213447732763D+01 0.2257446174769D+01 0.2302212657626D+01 0.2347756927812D+01 + 0.2394088723154D+01 0.2441217766767D+01 0.2489153760756D+01 0.2537906379665D+01 + 0.2587485263675D+01 0.2637900011547D+01 0.2689160173295D+01 0.2741275242598D+01 + 0.2794254648931D+01 0.2848107749430D+01 0.2902843820459D+01 0.2958472048904D+01 + 0.3015001523163D+01 0.3072441223848D+01 0.3130800014182D+01 0.3190086630094D+01 + 0.3250309670002D+01 0.3311477584285D+01 0.3373598664440D+01 0.3436681031917D+01 + 0.3500732626634D+01 0.3565761195166D+01 0.3631774278604D+01 0.3698779200090D+01 + 0.3766783052007D+01 0.3835792682854D+01 0.3905814683769D+01 0.3976855374728D+01 + 0.4048920790399D+01 0.4122016665671D+01 0.4196148420834D+01 0.4271321146438D+01 + 0.4347539587809D+01 0.4424808129241D+01 0.4503130777854D+01 0.4582511147131D+01 + 0.4662952440136D+01 0.4744457432406D+01 0.4827028454547D+01 0.4910667374509D+01 + 0.4995375579573D+01 0.5081153958042D+01 0.5168002880655D+01 0.5255922181721D+01 + 0.5344911139992D+01 0.5434968459290D+01 0.5526092248881D+01 0.5618280003639D+01 + 0.5711528583982D+01 0.5805834195616D+01 0.5901192369103D+01 0.5997597939257D+01 + 0.6095045024395D+01 0.6193527005472D+01 0.6293036505099D+01 0.6393565366487D+01 + 0.6495104632331D+01 0.6597644523660D+01 0.6701174418681D+01 0.6805682831645D+01 + 0.6911157391760D+01 0.7017584822191D+01 0.7124950919171D+01 0.7233240531258D+01 + 0.7342437538781D+01 0.7452524833500D+01 0.7563484298530D+01 0.7675296788562D+01 + 0.7787942110430D+01 0.7901399004058D+01 0.8015645123842D+01 0.8130657020509D+01 + 0.8246410123503D+01 0.8362878723950D+01 0.8480035958250D+01 0.8597853792358D+01 + 0.8716303006799D+01 0.8835353182487D+01 0.8954972687391D+01 0.9075128664130D+01 + 0.9195787018538D+01 0.9316912409273D+01 0.9438468238543D+01 0.9560416644000D+01 + 0.9682718491880D+01 0.9805333371460D+01 0.9928219590896D+01 0.1005133417453D+02 + 0.1017463286171D+02 0.1029807010722D+02 0.1042159908344D+02 0.1054517168417D+02 + 0.1066873853037D+02 0.1079224897780D+02 0.1091565112659D+02 0.1103889183301D+02 + 0.1116191672323D+02 0.1128467020944D+02 0.1140709550823D+02 0.1152913466133D+02 + 0.1165072855885D+02 0.1177181696506D+02 0.1189233854680D+02 0.1201223090454D+02 + 0.1213143060625D+02 0.1224987322407D+02 0.1236749337400D+02 0.1248422475837D+02 + 0.1260000021157D+02 0.1271475174875D+02 0.1282841061773D+02 0.1294090735413D+02 + 0.1305217183979D+02 0.1316213336451D+02 0.1327072069111D+02 0.1337786212400D+02 + 0.1348348558110D+02 0.1358751866928D+02 0.1368988876325D+02 0.1379052308804D+02 + 0.1388934880491D+02 0.1398629310084D+02 0.1408128328150D+02 0.1417424686776D+02 + 0.1426511169568D+02 0.1435380601989D+02 0.1444025862047D+02 0.1452439891313D+02 + 0.1460615706273D+02 0.1468546410000D+02 0.1476225204147D+02 0.1483645401237D+02 + 0.1490800437259D+02 0.1497683884540D+02 0.1504289464893D+02 0.1510611063019D+02 + 0.1516642740155D+02 0.1522378747941D+02 0.1527813542502D+02 0.1532941798703D+02 + 0.1537758424592D+02 0.1542258575964D+02 0.1546437671057D+02 0.1550291405346D+02 + 0.1553815766392D+02 0.1557007048740D+02 0.1559861868825D+02 0.1562377179849D+02 + 0.1564550286611D+02 0.1566378860245D+02 0.1567860952827D+02 0.1568995011828D+02 + 0.1569779894358D+02 0.1570214881171D+02 0.1570299690387D+02 0.1570034490889D+02 + 0.1569419915342D+02 0.1568457072811D+02 0.1567147560898D+02 0.1565493477391D+02 + 0.1563497431333D+02 0.1561162553504D+02 0.1558492506233D+02 0.1555491492507D+02 + 0.1552164264320D+02 0.1548516130217D+02 0.1544552961962D+02 0.1540281200312D+02 + 0.1535707859803D+02 0.1530840532536D+02 0.1525687390884D+02 0.1520257189079D+02 + 0.1514559263632D+02 0.1508603532531D+02 0.1502400493172D+02 0.1495961218971D+02 + 0.1489297354623D+02 0.1482421109950D+02 0.1475345252306D+02 0.1468083097499D+02 + 0.1460648499184D+02 0.1453055836709D+02 0.1445320001360D+02 0.1437456381003D+02 + 0.1429480843075D+02 0.1421409715909D+02 0.1413259768392D+02 0.1405048187912D+02 + 0.1396792556614D+02 0.1388510825940D+02 0.1380221289467D+02 0.1371942554036D+02 + 0.1363693509198D+02 0.1355493294972D+02 0.1347361267958D+02 0.1339316965818D+02 + 0.1331380070165D+02 0.1323570367897D+02 0.1315907711016D+02 0.1308411975004D+02 + 0.1301103015787D+02 0.1294000625373D+02 0.1287124486230D+02 0.1280494124477D+02 + 0.1274128861984D+02 0.1268047767460D+02 0.1262269606643D+02 0.1256812791682D+02 + 0.1251695329838D+02 0.1246934771604D+02 0.1242548158392D+02 0.1238551969900D+02 + 0.1234962071295D+02 0.1231793660373D+02 0.1229061214824D+02 0.1226778439767D+02 + 0.1224958215706D+02 0.1223612547078D+02 0.1222752511553D+02 0.1222388210258D+02 + 0.1222528719100D+02 0.1223182041366D+02 0.1224355061775D+02 0.1226053502171D+02 + 0.1228281879023D+02 0.1231043462935D+02 0.1234340240339D+02 0.1238172877543D+02 + 0.1242540687338D+02 0.1247441598324D+02 0.1252872127141D+02 0.1258827353770D+02 + 0.1265300900087D+02 0.1272284911822D+02 0.1279770044081D+02 0.1287745450601D+02 + 0.1296198776857D+02 0.1305116157186D+02 0.1314482216032D+02 0.1324280073454D+02 + 0.1334491354991D+02 0.1345096205988D+02 0.1356073310471D+02 0.1367399914649D+02 + 0.1379051855093D+02 0.1391003591655D+02 0.1403228245150D+02 0.1415697639825D+02 + 0.1428382350615D+02 0.1441251755180D+02 0.1454274090682D+02 0.1467416515265D+02 + 0.1480645174180D+02 0.1493925270450D+02 0.1507221140012D+02 0.1520496331175D+02 + 0.1533713688305D+02 0.1546835439544D+02 0.1559823288411D+02 0.1572638509088D+02 + 0.1585242045188D+02 0.1597594611769D+02 0.1609656800349D+02 0.1621389186673D+02 + 0.1632752440935D+02 0.1643707440175D+02 0.1654215382521D+02 0.1664237902974D+02 + 0.1673737190368D+02 0.1682676105166D+02 0.1691018297723D+02 0.1698728326633D+02 + 0.1705771776761D+02 0.1712115376582D+02 0.1717727114395D+02 0.1722576353007D+02 + 0.1726633942470D+02 0.1729872330429D+02 0.1732265669667D+02 0.1733789922408D+02 + 0.1734422960952D+02 0.1734144664198D+02 0.1732937009656D+02 0.1730784160492D+02 + 0.1727672547225D+02 0.1723590943644D+02 0.1718530536559D+02 0.1712484989008D+02 + 0.1705450496536D+02 0.1697425836203D+02 0.1688412407975D+02 0.1678414268193D+02 + 0.1667438154808D+02 0.1655493504124D+02 0.1642592458792D+02 0.1628749866833D+02 + 0.1613983271513D+02 0.1598312891883D+02 0.1581761593876D+02 0.1564354851859D+02 + 0.1546120700566D+02 0.1527089677411D+02 0.1507294755170D+02 0.1486771265109D+02 + 0.1465556810624D+02 0.1443691171558D+02 0.1421216199343D+02 0.1398175703206D+02 + 0.1374615327696D+02 0.1350582421831D+02 0.1326125900230D+02 0.1301296096613D+02 + 0.1276144610103D+02 0.1250724144826D+02 0.1225088343315D+02 0.1199291614280D+02 + 0.1173388955369D+02 0.1147435771520D+02 0.1121487689618D+02 0.1095600370143D+02 + 0.1069829316549D+02 0.1044229683153D+02 0.1018856082317D+02 0.9937623917321D+01 + 0.9690015626445D+01 0.9446254298643D+01 0.9206845244038D+01 0.8972278896087D+01 + 0.8743029016360D+01 0.8519550951297D+01 0.8302279949355D+01 0.8091629546790D+01 + 0.7887990030116D+01 0.7691726983014D+01 0.7503179925129D+01 0.7322661049902D+01 + 0.7150454068046D+01 0.6986813162918D+01 0.6831962063451D+01 0.6686093239819D+01 + 0.6549367226364D+01 0.6421912075717D+01 0.6303822947394D+01 0.6195161833447D+01 + 0.6095957423078D+01 0.6006205107394D+01 0.5925867124779D+01 0.5854872846611D+01 + 0.5793119202371D+01 0.5740471242429D+01 0.5696762836121D+01 0.5661797502031D+01 + 0.5635349366701D+01 0.5617164247353D+01 0.5606960853570D+01 0.5604432102259D+01 + 0.5609246539649D+01 0.5621049863505D+01 0.5639466538232D+01 0.5664101495024D+01 + 0.5694541908766D+01 0.5730359042993D+01 0.5771110153784D+01 0.5816340443192D+01 + 0.5865585052475D+01 0.5918371085180D+01 0.5974219649957D+01 0.6032647912832D+01 + 0.6093171148637D+01 0.6155304781260D+01 0.6218566402475D+01 0.6282477759234D+01 + 0.6346566699475D+01 0.6410369066815D+01 0.6473430534781D+01 0.6535308371644D+01 + 0.6595573127395D+01 0.6653810234872D+01 0.6709621517670D+01 0.6762626598041D+01 + 0.6812464198680D+01 0.6858793332986D+01 0.6901294379138D+01 0.6939670034070D+01 + 0.6973646144233D+01 0.7002972410830D+01 0.7027422967990D+01 0.7046796833200D+01 + 0.7060918230061D+01 0.7069636784259D+01 0.7072827594374D+01 0.7070391179926D+01 + 0.7062253309715D+01 0.7048364714231D+01 0.7028700686483D+01 0.7003260576238D+01 + 0.6972067183121D+01 0.6935166054562D+01 0.6892624694966D+01 0.6844531692843D+01 + 0.6790995772965D+01 0.6732144780827D+01 0.6668124606899D+01 0.6599098058289D+01 + 0.6525243685473D+01 0.6446754571799D+01 0.6363837093418D+01 0.6276709657188D+01 + 0.6185601423998D+01 0.6090751024726D+01 0.5992405275866D+01 0.5890817901556D+01 + 0.5786248268476D+01 0.5678960139726D+01 0.5569220453475D+01 0.5457298131760D+01 + 0.5343462924443D+01 0.5227984292928D+01 0.5111130337809D+01 0.4993166774192D+01 + 0.4874355958030D+01 0.4754955966341D+01 0.4635219733799D+01 0.4515394247714D+01 + 0.4395719803061D+01 0.4276429318764D+01 0.4157747716089D+01 0.4039891359594D+01 + 0.3923067560758D+01 0.3807474144035D+01 0.3693299074769D+01 0.3580720148118D+01 + 0.3469904737816D+01 0.3361009603367D+01 0.3254180754011D+01 0.3149553367571D+01 + 0.3047251762116D+01 0.2947389418162D+01 0.2850069049006D+01 0.2755382716614D+01 + 0.2663411990420D+01 0.2574228146230D+01 0.2487892402405D+01 0.2404456190400D+01 + 0.2323961456713D+01 0.2246440993268D+01 0.2171918793250D+01 0.2100410429420D+01 + 0.2031923451965D+01 0.1966457802972D+01 0.1904006244666D+01 0.1844554798640D+01 + 0.1788083193345D+01 0.1734565317240D+01 0.1683969675070D+01 0.1636259844862D+01 + 0.1591394933364D+01 0.1549330027746D+01 0.1510016641546D+01 0.1473403152964D+01 + 0.1439435233770D+01 0.1408056267219D+01 0.1379207753531D+01 0.1352829701650D+01 + 0.1328861006133D+01 0.1307239808175D+01 0.1287903839946D+01 0.1270790751526D+01 + 0.1255838419882D+01 0.1242985239474D+01 0.1232170394175D+01 0.1223334110328D+01 + 0.1216417890857D+01 0.1211364730456D+01 0.1208119311934D+01 0.1206628183910D+01 + 0.1206839920052D+01 0.1208705260142D+01 0.1212177233248D+01 0.1217211263310D+01 + 0.1223765257423D+01 0.1231799677111D+01 0.1241277592815D+01 0.1252164721788D+01 + 0.1264429449524D+01 0.1278042834732D+01 0.1292978597814D+01 0.1309213092627D+01 + 0.1326725261233D+01 0.1345496571135D+01 0.1365510934358D+01 0.1386754607532D+01 + 0.1409215426363D+01 0.1433003097507D+01 0.1458223277591D+01 0.1484860699421D+01 + 0.1512902583279D+01 0.1542338542721D+01 0.1573160498496D+01 0.1605362600812D+01 + 0.1638941160170D+01 0.1673894586973D+01 0.1710223340083D+01 0.1747929884514D+01 + 7 1012 + 1 0 -1 -511.89150 + 2 0 -1 -58.80097 + 2 1 1 -50.61290 + 2 1 -2 -49.69692 + 3 0 -1 -5.52718 + 3 1 1 -3.14309 + 3 1 -2 -3.03034 + 0.2123373461549D-04 0.2173914995400D-04 0.2225659296114D-04 0.2278634977738D-04 + 0.2332871334728D-04 0.2388398358121D-04 0.2445246752083D-04 0.2503447950857D-04 + 0.2563034136106D-04 0.2624038254674D-04 0.2686494036763D-04 0.2750436014548D-04 + 0.2815899541226D-04 0.2882920810522D-04 0.2951536876657D-04 0.3021785674791D-04 + 0.3093706041946D-04 0.3167337738432D-04 0.3242721469777D-04 0.3319898909177D-04 + 0.3398912720483D-04 0.3479806581728D-04 0.3562625209215D-04 0.3647414382175D-04 + 0.3734220968012D-04 0.3823092948144D-04 0.3914079444457D-04 0.4007230746391D-04 + 0.4102598338660D-04 0.4200234929636D-04 0.4300194480406D-04 0.4402532234512D-04 + 0.4507304748402D-04 0.4614569922601D-04 0.4724387033618D-04 0.4836816766617D-04 + 0.4951921248852D-04 0.5069764083903D-04 0.5190410386721D-04 0.5313926819498D-04 + 0.5440381628400D-04 0.5569844681152D-04 0.5702387505533D-04 0.5838083328767D-04 + 0.5977007117859D-04 0.6119235620880D-04 0.6264847409228D-04 0.6413922920902D-04 + 0.6566544504782D-04 0.6722796465978D-04 0.6882765112238D-04 0.7046538801462D-04 + 0.7214207990339D-04 0.7385865284136D-04 0.7561605487667D-04 0.7741525657465D-04 + 0.7925725155197D-04 0.8114305702331D-04 0.8307371436110D-04 0.8505028966841D-04 + 0.8707387436545D-04 0.8914558578994D-04 0.9126656781168D-04 0.9343799146165D-04 + 0.9566105557602D-04 0.9793698745538D-04 0.1002670435396D-03 0.1026525100984D-03 + 0.1050947039390D-03 0.1075949731294D-03 0.1101546977394D-03 0.1127752905997D-03 + 0.1154581980775D-03 0.1182049008719D-03 0.1210169148270D-03 0.1238957917652D-03 + 0.1268431203390D-03 0.1298605269045D-03 0.1329496764137D-03 0.1361122733297D-03 + 0.1393500625619D-03 0.1426648304247D-03 0.1460584056178D-03 0.1495326602303D-03 + 0.1530895107681D-03 0.1567309192056D-03 0.1604588940629D-03 0.1642754915072D-03 + 0.1681828164816D-03 0.1721830238593D-03 0.1762783196258D-03 0.1804709620887D-03 + 0.1847632631165D-03 0.1891575894056D-03 0.1936563637785D-03 0.1982620665115D-03 + 0.2029772366947D-03 0.2078044736231D-03 0.2127464382210D-03 0.2178058545005D-03 + 0.2229855110531D-03 0.2282882625778D-03 0.2337170314442D-03 0.2392748092933D-03 + 0.2449646586752D-03 0.2507897147258D-03 0.2567531868833D-03 0.2628583606444D-03 + 0.2691085993625D-03 0.2755073460880D-03 0.2820581254518D-03 0.2887645455935D-03 + 0.2956303001344D-03 0.3026591701977D-03 0.3098550264756D-03 0.3172218313454D-03 + 0.3247636410353D-03 0.3324846078408D-03 0.3403889823939D-03 0.3484811159850D-03 + 0.3567654629401D-03 0.3652465830528D-03 0.3739291440747D-03 0.3828179242637D-03 + 0.3919178149916D-03 0.4012338234146D-03 0.4107710752045D-03 0.4205348173457D-03 + 0.4305304209971D-03 0.4407633844209D-03 0.4512393359813D-03 0.4619640372121D-03 + 0.4729433859575D-03 0.4841834195856D-03 0.4956903182785D-03 0.5074704083979D-03 + 0.5195301659314D-03 0.5318762200182D-03 0.5445153565579D-03 0.5574545219044D-03 + 0.5707008266453D-03 0.5842615494708D-03 0.5981441411326D-03 0.6123562284955D-03 + 0.6269056186847D-03 0.6418003033287D-03 0.6570484629028D-03 0.6726584711734D-03 + 0.6886388997468D-03 0.7049985227240D-03 0.7217463214642D-03 0.7388914894603D-03 + 0.7564434373277D-03 0.7744117979097D-03 0.7928064315026D-03 0.8116374312024D-03 + 0.8309151283763D-03 0.8506500982622D-03 0.8708531656989D-03 0.8915354109894D-03 + 0.9127081759015D-03 0.9343830698083D-03 0.9565719759715D-03 0.9792870579714D-03 + 0.1002540766287D-02 0.1026345845027D-02 0.1050715338824D-02 0.1075662599879D-02 + 0.1101201295181D-02 0.1127345413883D-02 0.1154109274864D-02 0.1181507534450D-02 + 0.1209555194328D-02 0.1238267609637D-02 0.1267660497252D-02 0.1297749944251D-02 + 0.1328552416593D-02 0.1360084767981D-02 0.1392364248945D-02 0.1425408516127D-02 + 0.1459235641785D-02 0.1493864123514D-02 0.1529312894196D-02 0.1565601332181D-02 + 0.1602749271697D-02 0.1640777013510D-02 0.1679705335822D-02 0.1719555505429D-02 + 0.1760349289133D-02 0.1802108965417D-02 0.1844857336390D-02 0.1888617740010D-02 + 0.1933414062589D-02 0.1979270751585D-02 0.2026212828687D-02 0.2074265903209D-02 + 0.2123456185786D-02 0.2173810502385D-02 0.2225356308647D-02 0.2278121704551D-02 + 0.2332135449417D-02 0.2387426977257D-02 0.2444026412476D-02 0.2501964585936D-02 + 0.2561273051389D-02 0.2621984102285D-02 0.2684130788965D-02 0.2747746936258D-02 + 0.2812867161465D-02 0.2879526892772D-02 0.2947762388071D-02 0.3017610754222D-02 + 0.3089109966753D-02 0.3162298890003D-02 0.3237217297741D-02 0.3313905894238D-02 + 0.3392406335837D-02 0.3472761253004D-02 0.3555014272883D-02 0.3639210042377D-02 + 0.3725394251736D-02 0.3813613658698D-02 0.3903916113173D-02 0.3996350582488D-02 + 0.4090967177209D-02 0.4187817177547D-02 0.4286953060364D-02 0.4388428526794D-02 + 0.4492298530489D-02 0.4598619306504D-02 0.4707448400838D-02 0.4818844700646D-02 + 0.4932868465127D-02 0.5049581357120D-02 0.5169046475404D-02 0.5291328387739D-02 + 0.5416493164639D-02 0.5544608413917D-02 0.5675743316002D-02 0.5809968660057D-02 + 0.5947356880904D-02 0.6087982096781D-02 0.6231920147946D-02 0.6379248636155D-02 + 0.6530046965011D-02 0.6684396381234D-02 0.6842380016839D-02 0.7004082932273D-02 + 0.7169592160503D-02 0.7338996752102D-02 0.7512387821327D-02 0.7689858593235D-02 + 0.7871504451850D-02 0.8057422989391D-02 0.8247714056607D-02 0.8442479814225D-02 + 0.8641824785540D-02 0.8845855910175D-02 0.9054682599025D-02 0.9268416790430D-02 + 0.9487173007575D-02 0.9711068417172D-02 0.9940222889430D-02 0.1017475905935D-01 + 0.1041480238936D-01 0.1066048123337D-01 0.1091192690214D-01 0.1116927373022D-01 + 0.1143265914425D-01 0.1170222373276D-01 0.1197811131760D-01 0.1226046902681D-01 + 0.1254944736912D-01 0.1284520031015D-01 0.1314788535014D-01 0.1345766360348D-01 + 0.1377469987990D-01 0.1409916276750D-01 0.1443122471744D-01 0.1477106213063D-01 + 0.1511885544620D-01 0.1547478923187D-01 0.1583905227632D-01 0.1621183768351D-01 + 0.1659334296907D-01 0.1698377015868D-01 0.1738332588869D-01 0.1779222150874D-01 + 0.1821067318670D-01 0.1863890201578D-01 0.1907713412394D-01 0.1952560078568D-01 + 0.1998453853608D-01 0.2045418928739D-01 0.2093480044805D-01 0.2142662504416D-01 + 0.2192992184360D-01 0.2244495548276D-01 0.2297199659585D-01 0.2351132194704D-01 + 0.2406321456527D-01 0.2462796388197D-01 0.2520586587156D-01 0.2579722319499D-01 + 0.2640234534617D-01 0.2702154880148D-01 0.2765515717239D-01 0.2830350136121D-01 + 0.2896691972007D-01 0.2964575821319D-01 0.3034037058244D-01 0.3105111851634D-01 + 0.3177837182251D-01 0.3252250860359D-01 0.3328391543683D-01 0.3406298755727D-01 + 0.3486012904465D-01 0.3567575301409D-01 0.3651028181063D-01 0.3736414720771D-01 + 0.3823779060956D-01 0.3913166325773D-01 0.4004622644169D-01 0.4098195171364D-01 + 0.4193932110758D-01 0.4291882736274D-01 0.4392097415138D-01 0.4494627631115D-01 + 0.4599526008193D-01 0.4706846334735D-01 0.4816643588104D-01 0.4928973959763D-01 + 0.5043894880863D-01 0.5161465048329D-01 0.5281744451445D-01 0.5404794398948D-01 + 0.5530677546647D-01 0.5659457925562D-01 0.5791200970601D-01 0.5925973549779D-01 + 0.6063843993988D-01 0.6204882127328D-01 0.6349159298001D-01 0.6496748409788D-01 + 0.6647723954103D-01 0.6802162042643D-01 0.6960140440641D-01 0.7121738600725D-01 + 0.7287037697395D-01 0.7456120662128D-01 0.7629072219118D-01 0.7805978921657D-01 + 0.7986929189166D-01 0.8172013344892D-01 0.8361323654265D-01 0.8554954363940D-01 + 0.8753001741513D-01 0.8955564115940D-01 0.9162741918654D-01 0.9374637725383D-01 + 0.9591356298698D-01 0.9813004631275D-01 0.1003969198990D+00 0.1027152996019D+00 + 0.1050863249211D+00 0.1075111594618D+00 0.1099909914051D+00 0.1125270339855D+00 + 0.1151205259766D+00 0.1177727321842D+00 0.1204849439476D+00 0.1232584796489D+00 + 0.1260946852301D+00 0.1289949347182D+00 0.1319606307590D+00 0.1349932051583D+00 + 0.1380941194317D+00 0.1412648653632D+00 0.1445069655708D+00 0.1478219740820D+00 + 0.1512114769165D+00 0.1546770926778D+00 0.1582204731535D+00 0.1618433039236D+00 + 0.1655473049771D+00 0.1693342313383D+00 0.1732058737000D+00 0.1771640590662D+00 + 0.1812106514032D+00 0.1853475522988D+00 0.1895767016304D+00 0.1939000782413D+00 + 0.1983197006251D+00 0.2028376276193D+00 0.2074559591063D+00 0.2121768367234D+00 + 0.2170024445803D+00 0.2219350099852D+00 0.2269768041788D+00 0.2321301430764D+00 + 0.2373973880172D+00 0.2427809465221D+00 0.2482832730585D+00 0.2539068698131D+00 + 0.2596542874715D+00 0.2655281260047D+00 0.2715310354636D+00 0.2776657167793D+00 + 0.2839349225700D+00 0.2903414579550D+00 0.2968881813739D+00 0.3035780054119D+00 + 0.3104138976312D+00 0.3173988814070D+00 0.3245360367687D+00 0.3318285012460D+00 + 0.3392794707188D+00 0.3468922002717D+00 0.3546700050516D+00 0.3626162611285D+00 + 0.3707344063591D+00 0.3790279412529D+00 0.3875004298396D+00 0.3961555005386D+00 + 0.4049968470283D+00 0.4140282291162D+00 0.4232534736091D+00 0.4326764751811D+00 + 0.4423011972414D+00 0.4521316727988D+00 0.4621720053237D+00 0.4724263696067D+00 + 0.4828990126121D+00 0.4935942543268D+00 0.5045164886027D+00 0.5156701839924D+00 + 0.5270598845772D+00 0.5386902107861D+00 0.5505658602051D+00 0.5626916083760D+00 + 0.5750723095830D+00 0.5877128976270D+00 0.6006183865849D+00 0.6137938715547D+00 + 0.6272445293836D+00 0.6409756193782D+00 0.6549924839961D+00 0.6693005495166D+00 + 0.6839053266899D+00 0.6988124113627D+00 0.7140274850788D+00 0.7295563156538D+00 + 0.7454047577210D+00 0.7615787532478D+00 0.7780843320207D+00 0.7949276120969D+00 + 0.8121148002200D+00 0.8296521921997D+00 0.8475461732513D+00 0.8658032182945D+00 + 0.8844298922086D+00 0.9034328500427D+00 0.9228188371772D+00 0.9425946894360D+00 + 0.9627673331456D+00 0.9833437851400D+00 0.1004331152707D+01 0.1025736633476D+01 + 0.1047567515241D+01 0.1069831175720D+01 0.1092535082243D+01 0.1115686791375D+01 + 0.1139293948457D+01 0.1163364287075D+01 0.1187905628445D+01 0.1212925880722D+01 + 0.1238433038208D+01 0.1264435180485D+01 0.1290940471443D+01 0.1317957158220D+01 + 0.1345493570030D+01 0.1373558116898D+01 0.1402159288280D+01 0.1431305651569D+01 + 0.1461005850494D+01 0.1491268603389D+01 0.1522102701342D+01 0.1553517006218D+01 + 0.1585520448546D+01 0.1618122025271D+01 0.1651330797361D+01 0.1685155887276D+01 + 0.1719606476280D+01 0.1754691801602D+01 0.1790421153434D+01 0.1826803871767D+01 + 0.1863849343063D+01 0.1901566996742D+01 0.1939966301501D+01 0.1979056761446D+01 + 0.2018847912032D+01 0.2059349315815D+01 0.2100570557999D+01 0.2142521241790D+01 + 0.2185210983528D+01 0.2228649407614D+01 0.2272846141215D+01 0.2317810808747D+01 + 0.2363553026124D+01 0.2410082394775D+01 0.2457408495423D+01 0.2505540881617D+01 + 0.2554489073015D+01 0.2604262548407D+01 0.2654870738488D+01 0.2706323018355D+01 + 0.2758628699743D+01 0.2811797022979D+01 0.2865837148659D+01 0.2920758149043D+01 + 0.2976568999160D+01 0.3033278567615D+01 0.3090895607108D+01 0.3149428744640D+01 + 0.3208886471423D+01 0.3269277132479D+01 0.3330608915918D+01 0.3392889841912D+01 + 0.3456127751341D+01 0.3520330294118D+01 0.3585504917195D+01 0.3651658852234D+01 + 0.3718799102956D+01 0.3786932432154D+01 0.3856065348377D+01 0.3926204092282D+01 + 0.3997354622651D+01 0.4069522602076D+01 0.4142713382310D+01 0.4216931989288D+01 + 0.4292183107814D+01 0.4368471065927D+01 0.4445799818928D+01 0.4524172933100D+01 + 0.4603593569097D+01 0.4684064465021D+01 0.4765587919192D+01 0.4848165772611D+01 + 0.4931799391130D+01 0.5016489647323D+01 0.5102236902085D+01 0.5189040985952D+01 + 0.5276901180158D+01 0.5365816197444D+01 0.5455784162617D+01 0.5546802592894D+01 + 0.5638868378017D+01 0.5731977760181D+01 0.5826126313769D+01 0.5921308924927D+01 + 0.6017519770983D+01 0.6114752299744D+01 0.6212999208681D+01 0.6312252424025D+01 + 0.6412503079799D+01 0.6513741496818D+01 0.6615957161666D+01 0.6719138705689D+01 + 0.6823273884037D+01 0.6928349554769D+01 0.7034351658067D+01 0.7141265195588D+01 + 0.7249074209985D+01 0.7357761764637D+01 0.7467309923627D+01 0.7577699732003D+01 + 0.7688911196366D+01 0.7800923265826D+01 0.7913713813378D+01 0.8027259617727D+01 + 0.8141536345630D+01 0.8256518534789D+01 0.8372179577355D+01 0.8488491704090D+01 + 0.8605425969248D+01 0.8722952236222D+01 0.8841039164025D+01 0.8959654194655D+01 + 0.9078763541413D+01 0.9198332178230D+01 0.9318323830066D+01 0.9438700964464D+01 + 0.9559424784293D+01 0.9680455221780D+01 0.9801750933887D+01 0.9923269299099D+01 + 0.1004496641570D+02 0.1016679710163D+02 0.1028871489593D+02 0.1041067206198D+02 + 0.1053261959239D+02 0.1065450721594D+02 0.1077628340626D+02 0.1089789539267D+02 + 0.1101928917306D+02 0.1114040952889D+02 0.1126120004259D+02 0.1138160311709D+02 + 0.1150155999788D+02 0.1162101079752D+02 0.1173989452270D+02 0.1185814910389D+02 + 0.1197571142774D+02 0.1209251737221D+02 0.1220850184455D+02 0.1232359882222D+02 + 0.1243774139668D+02 0.1255086182033D+02 0.1266289155645D+02 0.1277376133233D+02 + 0.1288340119558D+02 0.1299174057364D+02 0.1309870833671D+02 0.1320423286383D+02 + 0.1330824211245D+02 0.1341066369131D+02 0.1351142493681D+02 0.1361045299271D+02 + 0.1370767489335D+02 0.1380301765027D+02 0.1389640834224D+02 0.1398777420882D+02 + 0.1407704274716D+02 0.1416414181234D+02 0.1424899972093D+02 0.1433154535791D+02 + 0.1441170828680D+02 0.1448941886294D+02 0.1456460834990D+02 0.1463720903887D+02 + 0.1470715437095D+02 0.1477437906225D+02 0.1483881923166D+02 0.1490041253114D+02 + 0.1495909827839D+02 0.1501481759178D+02 0.1506751352732D+02 0.1511713121747D+02 + 0.1516361801165D+02 0.1520692361818D+02 0.1524700024742D+02 0.1528380275595D+02 + 0.1531728879140D+02 0.1534741893776D+02 0.1537415686084D+02 0.1539746945363D+02 + 0.1541732698111D+02 0.1543370322439D+02 0.1544657562364D+02 0.1545592541956D+02 + 0.1546173779302D+02 0.1546400200242D+02 0.1546271151843D+02 0.1545786415570D+02 + 0.1544946220111D+02 0.1543751253809D+02 0.1542202676661D+02 0.1540302131844D+02 + 0.1538051756708D+02 0.1535454193202D+02 0.1532512597682D+02 0.1529230650045D+02 + 0.1525612562157D+02 0.1521663085508D+02 0.1517387518057D+02 0.1512791710213D+02 + 0.1507882069905D+02 0.1502665566690D+02 0.1497149734847D+02 0.1491342675424D+02 + 0.1485253057170D+02 0.1478890116319D+02 0.1472263655178D+02 0.1465384039476D+02 + 0.1458262194423D+02 0.1450909599456D+02 0.1443338281613D+02 0.1435560807511D+02 + 0.1427590273888D+02 0.1419440296685D+02 0.1411124998625D+02 0.1402658995277D+02 + 0.1394057379573D+02 0.1385335704764D+02 0.1376509965795D+02 0.1367596579089D+02 + 0.1358612360737D+02 0.1349574503081D+02 0.1340500549696D+02 0.1331408368786D+02 + 0.1322316124986D+02 0.1313242249599D+02 0.1304205409292D+02 0.1295224473262D+02 + 0.1286318478926D+02 0.1277506596148D+02 0.1268808090072D+02 0.1260242282594D+02 + 0.1251828512526D+02 0.1243586094535D+02 0.1235534276899D+02 0.1227692198172D+02 + 0.1220078842830D+02 0.1212712995982D+02 0.1205613197253D+02 0.1198797693913D+02 + 0.1192284393379D+02 0.1186090815186D+02 0.1180234042546D+02 0.1174730673615D+02 + 0.1169596772603D+02 0.1164847820834D+02 0.1160498667924D+02 0.1156563483188D+02 + 0.1153055707436D+02 0.1149988005301D+02 0.1147372218250D+02 0.1145219318434D+02 + 0.1143539363525D+02 0.1142341452711D+02 0.1141633683999D+02 0.1141423112993D+02 + 0.1141715713298D+02 0.1142516338731D+02 0.1143828687474D+02 0.1145655268355D+02 + 0.1147997369390D+02 0.1150855028761D+02 0.1154227008374D+02 0.1158110770138D+02 + 0.1162502455129D+02 0.1167396865756D+02 0.1172787451079D+02 0.1178666295396D+02 + 0.1185024110228D+02 0.1191850229803D+02 0.1199132610159D+02 0.1206857831946D+02 + 0.1215011107019D+02 0.1223576288907D+02 0.1232535887199D+02 0.1241871085933D+02 + 0.1251561765997D+02 0.1261586531600D+02 0.1271922740805D+02 0.1282546540151D+02 + 0.1293432903330D+02 0.1304555673916D+02 0.1315887612096D+02 0.1327400445348D+02 + 0.1339064923005D+02 0.1350850874625D+02 0.1362727272054D+02 0.1374662295087D+02 + 0.1386623400591D+02 0.1398577394943D+02 0.1410490509638D+02 0.1422328479880D+02 + 0.1434056625987D+02 0.1445639937388D+02 0.1457043159027D+02 0.1468230879914D+02 + 0.1479167623614D+02 0.1489817940404D+02 0.1500146500841D+02 0.1510118190471D+02 + 0.1519698205391D+02 0.1528852148379D+02 0.1537546125281D+02 0.1545746841364D+02 + 0.1553421697307D+02 0.1560538884523D+02 0.1567067479483D+02 0.1572977536717D+02 + 0.1578240180176D+02 0.1582827692612D+02 0.1586713602663D+02 0.1589872769311D+02 + 0.1592281463392D+02 0.1593917445849D+02 0.1594760042409D+02 0.1594790214378D+02 + 0.1593990625272D+02 0.1592345702984D+02 0.1589841697221D+02 0.1586466731948D+02 + 0.1582210852585D+02 0.1577066067732D+02 0.1571026385193D+02 0.1564087842120D+02 + 0.1556248529064D+02 0.1547508607802D+02 0.1537870322780D+02 0.1527338006062D+02 + 0.1515918075676D+02 0.1503619027308D+02 0.1490451419267D+02 0.1476427850715D+02 + 0.1461562933169D+02 0.1445873255288D+02 0.1429377341010D+02 0.1412095601137D+02 + 0.1394050278444D+02 0.1375265386499D+02 0.1355766642312D+02 0.1335581393054D+02 + 0.1314738537038D+02 0.1293268439219D+02 0.1271202841511D+02 0.1248574768189D+02 + 0.1225418426740D+02 0.1201769104500D+02 0.1177663061449D+02 0.1153137419578D+02 + 0.1128230049248D+02 0.1102979452961D+02 0.1077424647032D+02 0.1051605041603D+02 + 0.1025560319513D+02 0.9993303145083D+01 0.9729548892983D+01 0.9464738139829D+01 + 0.9199266453606D+01 0.8933526076402D+01 0.8667904750745D+01 0.8402784570301D+01 + 0.8138540859996D+01 0.7875541090527D+01 0.7614143832090D+01 0.7354697751983D+01 + 0.7097540660550D+01 0.6842998609696D+01 0.6591385047920D+01 0.6343000035605D+01 + 0.6098129523858D+01 0.5857044699944D+01 0.5620001401934D+01 0.5387239604814D+01 + 0.5158982979846D+01 0.4935438528573D+01 0.4716796292366D+01 0.4503229137976D+01 + 0.4294892619056D+01 0.4091924913152D+01 0.3894446833193D+01 0.3702561912045D+01 + 0.3516356558237D+01 0.3335900280537D+01 0.3161245978670D+01 0.2992430297065D+01 + 0.2829474038194D+01 0.2672382631762D+01 0.2521146655720D+01 0.2375742404881D+01 + 0.2236132502695D+01 0.2102266551639D+01 0.1974081817541D+01 0.1851503943111D+01 + 0.1734447685940D+01 0.1622817676200D+01 0.1516509189368D+01 0.1415408929331D+01 + 0.1319395817360D+01 0.1228341782531D+01 0.1142112549373D+01 0.1060568418635D+01 + 0.9835650373019D+00 0.9109541541726D+00 0.8425843575459D+00 0.7783017917968D+00 + 0.7179508498817D+00 0.6613748390683D+00 0.6084166174653D+00 0.5589191992012D+00 + 0.5127263263911D+00 0.4696830063190D+00 0.4296360125529D+00 0.3924343490009D+00 + 0.3579296762027D+00 0.3259766994340D+00 0.2964335184742D+00 0.2691619391536D+00 + 0.2440277470488D+00 0.2209009439361D+00 0.1996559478365D+00 0.1801717576938D+00 + 0.1623320839184D+00 0.1460254461990D+00 0.1311452401368D+00 0.1175897743854D+00 + 0.1052622800912D+00 0.9407089451527D-01 0.8392862078550D-01 0.7475326577690D-01 + 0.6646735814128D-01 0.5899804851766D-01 0.5227699394346D-01 0.4624022845899D-01 + 0.4082802185442D-01 0.3598472845105D-01 0.3165862773800D-01 0.2780175860384D-01 + 0.2436974881146D-01 0.2132164126495D-01 0.1861971851162D-01 0.1622932681167D-01 + 0.1411870099424D-01 0.1225879120292D-01 0.1062309251766D-01 0.9187478324824D-02 + 0.7930038194170D-02 0.6830920911119D-02 0.5872183206948D-02 0.5037644628161D-02 + 0.4312748890659D-02 0.3684431974697D-02 0.3140997133459D-02 0.2671996911721D-02 + 0.2268122201696D-02 0.1921098300832D-02 0.1623587881022D-02 0.1369100730387D-02 + 0.1151910087150D-02 0.9669753500508D-03 0.8098709208516D-03 0.6767209113939D-03 + 0.5641394300578D-03 0.4691761498429D-03 0.3892668522563D-03 0.3221886372696D-03 + 0.2660194893607D-03 0.2191018926233D-03 0.1800101936858D-03 0.1475214192933D-03 + 0.1205892654847D-03 0.9832098695562D-04 0.7995692809159D-04 0.6485245095860D-04 + 0.5246202996510D-04 0.4232529769133D-04 0.3405484129524D-04 0.2732556374477D-04 + 0.2186543872353D-04 0.1744750226736D-04 0.1388293789508D-04 0.1101512510421D-04 + 0.8714533541124D-05 0.6874356872787D-05 0.5406791351919D-05 0.4239874261002D-05 + 0.3314806839624D-05 0.2583694952262D-05 0.2007648657315D-05 0.1555189018603D-05 + 0.1200916989437D-05 0.9244050332163D-06 0.7092773630705D-06 0.5424493283134D-06 + 0.4135005904089D-06 0.3141603589352D-06 0.2378861413798D-06 0.1795202409555D-06 + 0.1350106538765D-06 0.1011851095086D-06 0.7556879909866D-07 0.5623788451178D-07 + 0.4170219815814D-07 0.3081166707088D-07 0.2268194336078D-07 0.1663552297805D-07 + 0.1215530542863D-07 0.8848107127806D-08 0.6416106613217D-08 0.4634585104140D-08 + 0.3334643304910D-08 0.2389835688104D-08 0.1705876062949D-08 0.1212741020005D-08 + 0.8586376559590D-09 0.6054146003728D-09 0.4250856698627D-09 0.2972075512731D-09 + 0.2069101606973D-09 0.1434236365115D-09 0.9898160505409D-10 0.6800804519963D-10 + 0.4651712787494D-10 0.3167310042586D-10 0.2146695649341D-10 0.1448079937139D-10 + 0.9722622861678D-11 0.6496070631129D-11 0.4319651023999D-11 0.2858591661735D-11 + 0.1882503214946D-11 0.1233598363270D-11 0.8043412065319D-12 0.5218060130221D-12 + 0.3367856512696D-12 0.2162455335843D-12 0.1381220475631D-12 0.8775552000331D-13 diff --git a/Test/Fe2/v_fe2.1 b/Test/Fe2/v_fe2.1 new file mode 100755 index 000000000..f3c4e967f --- /dev/null +++ b/Test/Fe2/v_fe2.1 @@ -0,0 +1,1542 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Fe. + 2 0.0000000000000D+00 + LSMS: xx z= 26. xvalws= 5.22926 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728400909D+02-0.5199725115555D+02-0.5199721790459D+02-0.5199718425142D+02 +-0.5199715019116D+02-0.5199711571889D+02-0.5199708082964D+02-0.5199704551834D+02 +-0.5199700977990D+02-0.5199697360915D+02-0.5199693700086D+02-0.5199689994973D+02 +-0.5199686245042D+02-0.5199682449748D+02-0.5199678608545D+02-0.5199674720876D+02 +-0.5199670786180D+02-0.5199666803887D+02-0.5199662773421D+02-0.5199658694201D+02 +-0.5199654565635D+02-0.5199650387127D+02-0.5199646158073D+02-0.5199641877860D+02 +-0.5199637545872D+02-0.5199633161480D+02-0.5199628724051D+02-0.5199624232942D+02 +-0.5199619687506D+02-0.5199615087084D+02-0.5199610431012D+02-0.5199605718616D+02 +-0.5199600949214D+02-0.5199596122116D+02-0.5199591236626D+02-0.5199586292036D+02 +-0.5199581287632D+02-0.5199576222688D+02-0.5199571096474D+02-0.5199565908248D+02 +-0.5199560657259D+02-0.5199555342748D+02-0.5199549963947D+02-0.5199544520078D+02 +-0.5199539010352D+02-0.5199533433975D+02-0.5199527790139D+02-0.5199522078028D+02 +-0.5199516296816D+02-0.5199510445666D+02-0.5199504523733D+02-0.5199498530160D+02 +-0.5199492464081D+02-0.5199486324617D+02-0.5199480110883D+02-0.5199473821977D+02 +-0.5199467456990D+02-0.5199461015004D+02-0.5199454495085D+02-0.5199447896290D+02 +-0.5199441217666D+02-0.5199434458246D+02-0.5199427617052D+02-0.5199420693096D+02 +-0.5199413685375D+02-0.5199406592876D+02-0.5199399414573D+02-0.5199392149428D+02 +-0.5199384796390D+02-0.5199377354396D+02-0.5199369822368D+02-0.5199362199218D+02 +-0.5199354483843D+02-0.5199346675127D+02-0.5199338771940D+02-0.5199330773139D+02 +-0.5199322677567D+02-0.5199314484053D+02-0.5199306191412D+02-0.5199297798443D+02 +-0.5199289303934D+02-0.5199280706654D+02-0.5199272005361D+02-0.5199263198797D+02 +-0.5199254285685D+02-0.5199245264737D+02-0.5199236134649D+02-0.5199226894099D+02 +-0.5199217541751D+02-0.5199208076251D+02-0.5199198496230D+02-0.5199188800302D+02 +-0.5199178987064D+02-0.5199169055096D+02-0.5199159002963D+02-0.5199148829207D+02 +-0.5199138532359D+02-0.5199128110928D+02-0.5199117563407D+02-0.5199106888269D+02 +-0.5199096083969D+02-0.5199085148944D+02-0.5199074081613D+02-0.5199062880373D+02 +-0.5199051543604D+02-0.5199040069664D+02-0.5199028456895D+02-0.5199016703615D+02 +-0.5199004808124D+02-0.5198992768700D+02-0.5198980583600D+02-0.5198968251063D+02 +-0.5198955769302D+02-0.5198943136512D+02-0.5198930350863D+02-0.5198917410506D+02 +-0.5198904313569D+02-0.5198891058155D+02-0.5198877642345D+02-0.5198864064200D+02 +-0.5198850321751D+02-0.5198836413012D+02-0.5198822335968D+02-0.5198808088582D+02 +-0.5198793668793D+02-0.5198779074512D+02-0.5198764303627D+02-0.5198749354000D+02 +-0.5198734223467D+02-0.5198718909837D+02-0.5198703410894D+02-0.5198687724393D+02 +-0.5198671848065D+02-0.5198655779610D+02-0.5198639516703D+02-0.5198623056988D+02 +-0.5198606398084D+02-0.5198589537577D+02-0.5198572473026D+02-0.5198555201962D+02 +-0.5198537721883D+02-0.5198520030257D+02-0.5198502124524D+02-0.5198484002091D+02 +-0.5198465660333D+02-0.5198447096595D+02-0.5198428308188D+02-0.5198409292391D+02 +-0.5198390046450D+02-0.5198370567579D+02-0.5198350852955D+02-0.5198330899725D+02 +-0.5198310704998D+02-0.5198290265850D+02-0.5198269579318D+02-0.5198248642408D+02 +-0.5198227452087D+02-0.5198206005285D+02-0.5198184298896D+02-0.5198162329776D+02 +-0.5198140094741D+02-0.5198117590571D+02-0.5198094814005D+02-0.5198071761744D+02 +-0.5198048430449D+02-0.5198024816738D+02-0.5198000917191D+02-0.5197976728344D+02 +-0.5197952246692D+02-0.5197927468690D+02-0.5197902390745D+02-0.5197877009224D+02 +-0.5197851320449D+02-0.5197825320698D+02-0.5197799006201D+02-0.5197772373146D+02 +-0.5197745417673D+02-0.5197718135875D+02-0.5197690523796D+02-0.5197662577437D+02 +-0.5197634292744D+02-0.5197605665620D+02-0.5197576691913D+02-0.5197547367423D+02 +-0.5197517687900D+02-0.5197487649041D+02-0.5197457246489D+02-0.5197426475838D+02 +-0.5197395332627D+02-0.5197363812338D+02-0.5197331910403D+02-0.5197299622195D+02 +-0.5197266943031D+02-0.5197233868173D+02-0.5197200392824D+02-0.5197166512128D+02 +-0.5197132221174D+02-0.5197097514984D+02-0.5197062388528D+02-0.5197026836709D+02 +-0.5196990854370D+02-0.5196954436291D+02-0.5196917577189D+02-0.5196880271716D+02 +-0.5196842514461D+02-0.5196804299945D+02-0.5196765622622D+02-0.5196726476881D+02 +-0.5196686857041D+02-0.5196646757354D+02-0.5196606171998D+02-0.5196565095085D+02 +-0.5196523520651D+02-0.5196481442664D+02-0.5196438855015D+02-0.5196395751522D+02 +-0.5196352125928D+02-0.5196307971901D+02-0.5196263283028D+02-0.5196218052823D+02 +-0.5196172274718D+02-0.5196125942066D+02-0.5196079048138D+02-0.5196031586126D+02 +-0.5195983549135D+02-0.5195934930191D+02-0.5195885722231D+02-0.5195835918107D+02 +-0.5195785510585D+02-0.5195734492343D+02-0.5195682855969D+02-0.5195630593961D+02 +-0.5195577698725D+02-0.5195524162577D+02-0.5195469977736D+02-0.5195415136330D+02 +-0.5195359630387D+02-0.5195303451841D+02-0.5195246592528D+02-0.5195189044181D+02 +-0.5195130798435D+02-0.5195071846824D+02-0.5195012180777D+02-0.5194951791619D+02 +-0.5194890670569D+02-0.5194828808741D+02-0.5194766197137D+02-0.5194702826653D+02 +-0.5194638688071D+02-0.5194573772064D+02-0.5194508069188D+02-0.5194441569885D+02 +-0.5194374264482D+02-0.5194306143187D+02-0.5194237196087D+02-0.5194167413149D+02 +-0.5194096784220D+02-0.5194025299021D+02-0.5193952947146D+02-0.5193879718066D+02 +-0.5193805601119D+02-0.5193730585519D+02-0.5193654660341D+02-0.5193577814533D+02 +-0.5193500036904D+02-0.5193421316129D+02-0.5193341640742D+02-0.5193260999141D+02 +-0.5193179379578D+02-0.5193096770164D+02-0.5193013158865D+02-0.5192928533501D+02 +-0.5192842881739D+02-0.5192756191098D+02-0.5192668448947D+02-0.5192579642497D+02 +-0.5192489758803D+02-0.5192398784765D+02-0.5192306707119D+02-0.5192213512442D+02 +-0.5192119187145D+02-0.5192023717474D+02-0.5191927089505D+02-0.5191829289146D+02 +-0.5191730302133D+02-0.5191630114025D+02-0.5191528710207D+02-0.5191426075883D+02 +-0.5191322196077D+02-0.5191217055632D+02-0.5191110639202D+02-0.5191002931255D+02 +-0.5190893916069D+02-0.5190783577729D+02-0.5190671900126D+02-0.5190558866954D+02 +-0.5190444461705D+02-0.5190328667673D+02-0.5190211467945D+02-0.5190092845399D+02 +-0.5189972782709D+02-0.5189851262330D+02-0.5189728266508D+02-0.5189603777267D+02 +-0.5189477776415D+02-0.5189350245533D+02-0.5189221165981D+02-0.5189090518885D+02 +-0.5188958285145D+02-0.5188824445423D+02-0.5188688980147D+02-0.5188551869503D+02 +-0.5188413093435D+02-0.5188272631641D+02-0.5188130463569D+02-0.5187986568418D+02 +-0.5187840925129D+02-0.5187693512386D+02-0.5187544308611D+02-0.5187393291962D+02 +-0.5187240440329D+02-0.5187085731330D+02-0.5186929142309D+02-0.5186770650332D+02 +-0.5186610232183D+02-0.5186447864362D+02-0.5186283523081D+02-0.5186117184259D+02 +-0.5185948823518D+02-0.5185778416183D+02-0.5185605937277D+02-0.5185431361514D+02 +-0.5185254663297D+02-0.5185075816718D+02-0.5184894795548D+02-0.5184711573237D+02 +-0.5184526122909D+02-0.5184338417356D+02-0.5184148429039D+02-0.5183956130079D+02 +-0.5183761492255D+02-0.5183564486998D+02-0.5183365085389D+02-0.5183163258155D+02 +-0.5182958975660D+02-0.5182752207907D+02-0.5182542924529D+02-0.5182331094785D+02 +-0.5182116687559D+02-0.5181899671350D+02-0.5181680014270D+02-0.5181457684041D+02 +-0.5181232647986D+02-0.5181004873028D+02-0.5180774325683D+02-0.5180540972054D+02 +-0.5180304777830D+02-0.5180065708277D+02-0.5179823728232D+02-0.5179578802103D+02 +-0.5179330893860D+02-0.5179079967027D+02-0.5178825984684D+02-0.5178568909453D+02 +-0.5178308703501D+02-0.5178045328526D+02-0.5177778745757D+02-0.5177508915948D+02 +-0.5177235799366D+02-0.5176959355795D+02-0.5176679544522D+02-0.5176396324334D+02 +-0.5176109653512D+02-0.5175819489823D+02-0.5175525790517D+02-0.5175228512318D+02 +-0.5174927611419D+02-0.5174623043474D+02-0.5174314763592D+02-0.5174002726332D+02 +-0.5173686885694D+02-0.5173367195115D+02-0.5173043607457D+02-0.5172716075006D+02 +-0.5172384549462D+02-0.5172048981932D+02-0.5171709322923D+02-0.5171365522335D+02 +-0.5171017529452D+02-0.5170665292940D+02-0.5170308760833D+02-0.5169947880525D+02 +-0.5169582598771D+02-0.5169212861671D+02-0.5168838614662D+02-0.5168459802518D+02 +-0.5168076369333D+02-0.5167688258518D+02-0.5167295412791D+02-0.5166897774168D+02 +-0.5166495283960D+02-0.5166087882755D+02-0.5165675510418D+02-0.5165258106080D+02 +-0.5164835608125D+02-0.5164407954186D+02-0.5163975081138D+02-0.5163536925080D+02 +-0.5163093421337D+02-0.5162644504442D+02-0.5162190108131D+02-0.5161730165335D+02 +-0.5161264608164D+02-0.5160793367906D+02-0.5160316375011D+02-0.5159833559084D+02 +-0.5159344848875D+02-0.5158850172268D+02-0.5158349456272D+02-0.5157842627009D+02 +-0.5157329609709D+02-0.5156810328692D+02-0.5156284707365D+02-0.5155752668206D+02 +-0.5155214132756D+02-0.5154669021608D+02-0.5154117254396D+02-0.5153558749786D+02 +-0.5152993425461D+02-0.5152421198113D+02-0.5151841983433D+02-0.5151255696093D+02 +-0.5150662249744D+02-0.5150061557002D+02-0.5149453529428D+02-0.5148838077528D+02 +-0.5148215110737D+02-0.5147584537403D+02-0.5146946264782D+02-0.5146300199022D+02 +-0.5145646245151D+02-0.5144984307067D+02-0.5144314287525D+02-0.5143636088122D+02 +-0.5142949609291D+02-0.5142254750281D+02-0.5141551409151D+02-0.5140839482753D+02 +-0.5140118866721D+02-0.5139389455459D+02-0.5138651142128D+02-0.5137903818632D+02 +-0.5137147375605D+02-0.5136381702401D+02-0.5135606687078D+02-0.5134822216388D+02 +-0.5134028175756D+02-0.5133224449278D+02-0.5132410919702D+02-0.5131587468413D+02 +-0.5130753975423D+02-0.5129910319357D+02-0.5129056377438D+02-0.5128192025477D+02 +-0.5127317137854D+02-0.5126431587514D+02-0.5125535245940D+02-0.5124627983153D+02 +-0.5123709667690D+02-0.5122780166596D+02-0.5121839345403D+02-0.5120887068125D+02 +-0.5119923197240D+02-0.5118947593678D+02-0.5117960116805D+02-0.5116960624416D+02 +-0.5115948972712D+02-0.5114925016296D+02-0.5113888608154D+02-0.5112839599644D+02 +-0.5111777840483D+02-0.5110703178733D+02-0.5109615460788D+02-0.5108514531363D+02 +-0.5107400233480D+02-0.5106272408452D+02-0.5105130895877D+02-0.5103975533619D+02 +-0.5102806157801D+02-0.5101622602790D+02-0.5100424701185D+02-0.5099212283803D+02 +-0.5097985179674D+02-0.5096743216021D+02-0.5095486218256D+02-0.5094214009961D+02 +-0.5092926412887D+02-0.5091623246932D+02-0.5090304330139D+02-0.5088969478681D+02 +-0.5087618506855D+02-0.5086251227064D+02-0.5084867449820D+02-0.5083466983722D+02 +-0.5082049635455D+02-0.5080615209778D+02-0.5079163509518D+02-0.5077694335558D+02 +-0.5076207486834D+02-0.5074702760324D+02-0.5073179951042D+02-0.5071638852033D+02 +-0.5070079254364D+02-0.5068500947122D+02-0.5066903717403D+02-0.5065287350315D+02 +-0.5063651628963D+02-0.5061996334457D+02-0.5060321245898D+02-0.5058626140382D+02 +-0.5056910792994D+02-0.5055174976809D+02-0.5053418462884D+02-0.5051641020267D+02 +-0.5049842415989D+02-0.5048022415067D+02-0.5046180780505D+02-0.5044317273295D+02 +-0.5042431652422D+02-0.5040523674861D+02-0.5038593095586D+02-0.5036639667573D+02 +-0.5034663141803D+02-0.5032663267268D+02-0.5030639790981D+02-0.5028592457977D+02 +-0.5026521011328D+02-0.5024425192145D+02-0.5022304739591D+02-0.5020159390892D+02 +-0.5017988881346D+02-0.5015792944334D+02-0.5013571311336D+02-0.5011323711944D+02 +-0.5009049873873D+02-0.5006749522980D+02-0.5004422383280D+02-0.5002068176959D+02 +-0.4999686624397D+02-0.4997277444186D+02-0.4994840353146D+02-0.4992375066350D+02 +-0.4989881297144D+02-0.4987358757171D+02-0.4984807156389D+02-0.4982226203106D+02 +-0.4979615603991D+02-0.4976975064117D+02-0.4974304286974D+02-0.4971602974502D+02 +-0.4968870827126D+02-0.4966107543776D+02-0.4963312821924D+02-0.4960486357616D+02 +-0.4957627845502D+02-0.4954736978871D+02-0.4951813449683D+02-0.4948856948612D+02 +-0.4945867165071D+02-0.4942843787257D+02-0.4939786502185D+02-0.4936694995729D+02 +-0.4933568952659D+02-0.4930408056681D+02-0.4927211990478D+02-0.4923980435752D+02 +-0.4920713073265D+02-0.4917409582880D+02-0.4914069643607D+02-0.4910692933642D+02 +-0.4907279130416D+02-0.4903827910633D+02-0.4900338950319D+02-0.4896811924867D+02 +-0.4893246509079D+02-0.4889642377211D+02-0.4885999203021D+02-0.4882316659813D+02 +-0.4878594420482D+02-0.4874832157556D+02-0.4871029543247D+02-0.4867186249491D+02 +-0.4863301947995D+02-0.4859376310277D+02-0.4855409007715D+02-0.4851399711583D+02 +-0.4847348093100D+02-0.4843253823466D+02-0.4839116573905D+02-0.4834936015704D+02 +-0.4830711820251D+02-0.4826443659074D+02-0.4822131203876D+02-0.4817774126566D+02 +-0.4813372099301D+02-0.4808924794511D+02-0.4804431884930D+02-0.4799893043625D+02 +-0.4795307944023D+02-0.4790676259938D+02-0.4785997665588D+02-0.4781271835619D+02 +-0.4776498445124D+02-0.4771677169657D+02-0.4766807685247D+02-0.4761889668409D+02 +-0.4756922796153D+02-0.4751906745988D+02-0.4746841195927D+02-0.4741725824487D+02 +-0.4736560310686D+02-0.4731344334036D+02-0.4726077574537D+02-0.4720759712663D+02 +-0.4715390429349D+02-0.4709969405976D+02-0.4704496324345D+02-0.4698970866656D+02 +-0.4693392715482D+02-0.4687761553742D+02-0.4682077064661D+02-0.4676338931742D+02 +-0.4670546838725D+02-0.4664700469545D+02-0.4658799508292D+02-0.4652843639162D+02 +-0.4646832546412D+02-0.4640765914308D+02-0.4634643427075D+02-0.4628464768840D+02 +-0.4622229623583D+02-0.4615937675077D+02-0.4609588606835D+02-0.4603182102046D+02 +-0.4596717843531D+02-0.4590195513672D+02-0.4583614794369D+02-0.4576975366979D+02 +-0.4570276912265D+02-0.4563519110351D+02-0.4556701640665D+02-0.4549824181908D+02 +-0.4542886412007D+02-0.4535888008084D+02-0.4528828646428D+02-0.4521708002473D+02 +-0.4514525750785D+02-0.4507281565054D+02-0.4499975118097D+02-0.4492606081870D+02 +-0.4485174127497D+02-0.4477678925295D+02-0.4470120144833D+02-0.4462497454985D+02 +-0.4454810524011D+02-0.4447059019649D+02-0.4439242609219D+02-0.4431360959758D+02 +-0.4423413738159D+02-0.4415400611337D+02-0.4407321246418D+02-0.4399175310947D+02 +-0.4390962473114D+02-0.4382682402010D+02-0.4374334767908D+02-0.4365919242563D+02 +-0.4357435499539D+02-0.4348883214570D+02-0.4340262065933D+02-0.4331571734857D+02 +-0.4322811905962D+02-0.4313982267710D+02-0.4305082512897D+02-0.4296112339160D+02 +-0.4287071449512D+02-0.4277959552900D+02-0.4268776364786D+02-0.4259521607738D+02 +-0.4250195012053D+02-0.4240796316384D+02-0.4231325268378D+02-0.4221781625326D+02 +-0.4212165154821D+02-0.4202475635403D+02-0.4192712857207D+02-0.4182876622603D+02 +-0.4172966746809D+02-0.4162983058491D+02-0.4152925400326D+02-0.4142793629535D+02 +-0.4132587618362D+02-0.4122307254514D+02-0.4111952441526D+02-0.4101523099069D+02 +-0.4091019163177D+02-0.4080440586392D+02-0.4069787337814D+02-0.4059059403052D+02 +-0.4048256784069D+02-0.4037379498919D+02-0.4026427581359D+02-0.4015401080347D+02 +-0.4004300059408D+02-0.3993124595881D+02-0.3981874780047D+02-0.3970550714118D+02 +-0.3959152511128D+02-0.3947680293704D+02-0.3936134192738D+02-0.3924514345974D+02 +-0.3912820896514D+02-0.3901053991273D+02-0.3889213779388D+02-0.3877300410616D+02 +-0.3865314033730D+02-0.3853254794941D+02-0.3841122836384D+02-0.3828918294671D+02 +-0.3816641299561D+02-0.3804291972752D+02-0.3791870426838D+02-0.3779376764439D+02 +-0.3766811077544D+02-0.3754173447071D+02-0.3741463942662D+02-0.3728682622747D+02 +-0.3715829534855D+02-0.3702904716206D+02-0.3689908194568D+02-0.3676839989389D+02 +-0.3663700113198D+02-0.3650488573242D+02-0.3637205373385D+02-0.3623850516215D+02 +-0.3610424005352D+02-0.3596925847947D+02-0.3583356057318D+02-0.3569714655716D+02 +-0.3556001677183D+02-0.3542217170480D+02-0.3528361202035D+02-0.3514433858906D+02 +-0.3500435251706D+02-0.3486365517474D+02-0.3472224822457D+02-0.3458013364781D+02 +-0.3443731376977D+02-0.3429379128348D+02-0.3414956927154D+02-0.3400465122587D+02 +-0.3385904106531D+02-0.3371274315081D+02-0.3356576229817D+02-0.3341810378823D+02 +-0.3326977337430D+02-0.3312077728689D+02-0.3297112223571D+02-0.3282081540879D+02 +-0.3266986446883D+02-0.3251827754673D+02-0.3236606323235D+02-0.3221323056253D+02 +-0.3205978900636D+02-0.3190574844798D+02-0.3175111916665D+02-0.3159591181450D+02 +-0.3144013739192D+02-0.3128380722060D+02-0.3112693291460D+02-0.3096952634939D+02 +-0.3081159962896D+02-0.3065316505139D+02-0.3049423507279D+02-0.3033482226994D+02 +-0.3017493930171D+02-0.3001459886954D+02-0.2985381367711D+02-0.2969259638940D+02 +-0.2953095959141D+02-0.2936891574677D+02-0.2920647715631D+02-0.2904365591713D+02 +-0.2888046388202D+02-0.2871691261992D+02-0.2855301337730D+02-0.2838877704096D+02 +-0.2822421410237D+02-0.2805933462405D+02-0.2789414820796D+02-0.2772866396645D+02 +-0.2756289049588D+02-0.2739683585338D+02-0.2723050753680D+02-0.2706391246838D+02 +-0.2689705698223D+02-0.2672994681603D+02-0.2656258710714D+02-0.2639498239345D+02 +-0.2622713661917D+02-0.2605905314574D+02-0.2589073476829D+02-0.2572218373759D+02 +-0.2555340178776D+02-0.2538439017000D+02-0.2521514969218D+02-0.2504568076457D+02 +-0.2487598345161D+02-0.2470605752972D+02-0.2453590255090D+02-0.2436551791213D+02 +-0.2419490293015D+02-0.2402405692122D+02-0.2385297928550D+02-0.2368166959536D+02 +-0.2351012768684D+02-0.2333835375355D+02-0.2316634844181D+02-0.2299411294593D+02 +-0.2282164910224D+02-0.2264895948042D+02-0.2247604747020D+02-0.2230291736187D+02 +-0.2212957441833D+02-0.2195602493665D+02-0.2178227629680D+02-0.2160833699531D+02 +-0.2143421666157D+02-0.2125992605447D+02-0.2108547703736D+02-0.2091088252957D+02 +-0.2073615643311D+02-0.2056131353347D+02-0.2038636937454D+02-0.2021134010787D+02 +-0.2003624231780D+02-0.1986109282464D+02-0.1968590846923D+02-0.1951070588338D+02 +-0.1933550125113D+02-0.1916031006739D+02-0.1898514690054D+02-0.1881002516654D+02 +-0.1863495692195D+02-0.1845995268332D+02-0.1828502127992D+02-0.1811016974578D+02 +-0.1793540325598D+02-0.1776072511080D+02-0.1758613676940D+02-0.1741163793327D+02 +-0.1723722667775D+02-0.1706289962834D+02-0.1688865217702D+02-0.1671447873257D+02 +-0.1654037299789D+02-0.1636632826691D+02-0.1619233773325D+02-0.1601839480315D+02 +-0.1584449340510D+02-0.1567062828984D+02-0.1549679531468D+02-0.1532299170720D+02 +-0.1514921630451D+02-0.1497546976480D+02-0.1480175474939D+02-0.1462807607400D+02 +-0.1445444082871D+02-0.1428085846710D+02-0.1410734086517D+02-0.1393390235146D+02 +-0.1376055970989D+02-0.1358733215727D+02-0.1341424129731D+02-0.1324131105355D+02 +-0.1306856758305D+02-0.1289603917318D+02-0.1272375612351D+02-0.1255175061484D+02 +-0.1238005656736D+02-0.1220870948967D+02-0.1203774632043D+02-0.1186720526422D+02 +-0.1169712562320D+02-0.1152754762583D+02-0.1135851225403D+02-0.1119006106993D+02 +-0.1102223604329D+02-0.1085507938069D+02-0.1068863335731D+02-0.1052294015218D+02 +-0.1035804168776D+02-0.1019397947446D+02-0.1003079446077D+02-0.9868526889628D+01 +-0.9707216161554D+01-0.9546900704939D+01-0.9387617854023D+01-0.9229403734858D+01 +-0.9072293159592D+01-0.8916319529363D+01-0.8761514745993D+01-0.8607909132693D+01 +-0.8455531363896D+01-0.8304408404305D+01-0.8154565457227D+01-0.8006025922166D+01 +-0.7858811361682D+01-0.7712941477416D+01-0.7568434095199D+01-0.7425305159081D+01 +-0.7283568734134D+01-0.7143237017788D+01-0.7004320359504D+01-0.6866827288485D+01 +-0.6730764549154D+01-0.6596137144079D+01-0.6462948384000D+01-0.6331199944618D+01 +-0.6200891929738D+01-0.6072022940407D+01-0.5944590149603D+01-0.5818589382077D+01 +-0.5694015198898D+01-0.5570860986265D+01-0.5449119048124D+01-0.5328780702141D+01 +-0.5209836378552D+01-0.5092275721431D+01-0.4976087691897D+01-0.4861260672787D+01 +-0.4747782574321D+01-0.4635640940271D+01-0.4524823054180D+01-0.4415316045125D+01 +-0.4307106992579D+01-0.4200183029885D+01-0.4094531445869D+01-0.3990139784139D+01 +-0.3886995939600D+01-0.3785088251726D+01-0.3684405594148D+01-0.3584937460106D+01 +-0.3486674043348D+01-0.3389606314047D+01-0.3293726089348D+01-0.3199026098161D+01 +-0.3105500039868D+01-0.3013142636618D+01-0.2921949678952D+01-0.2831918064533D+01 +-0.2743045829849D+01-0.2655332174788D+01-0.2568777480092D+01-0.2483383317815D+01 +-0.2399152454962D+01-0.2316088850658D+01-0.2234197647300D+01-0.2153485156272D+01 +-0.2073958838965D+01-0.1995627283965D+01-0.1918500181413D+01-0.1842588295670D+01 +-0.1767903437522D+01-0.1694458437274D+01-0.1622267120110D+01-0.1551344285168D+01 +-0.1481705689753D+01-0.1413368040087D+01-0.1346348989896D+01-0.1280667148051D+01 +-0.1216342096293D+01-0.1153394417906D+01-0.1091845737986D+01-0.1031718775725D+01 +-0.9730374088849D+00-0.9158267504133D+00-0.8601132368937D+00-0.8059247283301D+00 +-0.7532906185600D+00-0.7022419554295D+00-0.6528115697324D+00-0.6050342118170D+00 +-0.5589466947046D+00-0.5145880425354D+00-0.4719996431596D+00-0.4312254037239D+00 +-0.3923119081554D+00-0.3553085755132D+00-0.3202678182603D+00-0.2872451996103D+00 +-0.2562993012896D+00 + 0.0000000000000D+00 + 1012 0.5229258479779D+01 + 0.2150742905406D-04 0.2201934401975D-04 0.2254344131081D-04 0.2308001074793D-04 + 0.2362934904336D-04 0.2419175996469D-04 0.2476755450247D-04 0.2535705104185D-04 + 0.2596057553829D-04 0.2657846169737D-04 0.2721105115901D-04 0.2785869368592D-04 + 0.2852174735659D-04 0.2920057876285D-04 0.2989556321214D-04 0.3060708493450D-04 + 0.3133553729459D-04 0.3208132300862D-04 0.3284485436652D-04 0.3362655345933D-04 + 0.3442685241199D-04 0.3524619362168D-04 0.3608503000175D-04 0.3694382523153D-04 + 0.3782305401197D-04 0.3872320232740D-04 0.3964476771351D-04 0.4058825953159D-04 + 0.4155419924941D-04 0.4254312072866D-04 0.4355557051923D-04 0.4459210816046D-04 + 0.4565330648961D-04 0.4673975195749D-04 0.4785204495171D-04 0.4899080012754D-04 + 0.5015664674660D-04 0.5135022902361D-04 0.5257220648130D-04 0.5382325431382D-04 + 0.5510406375867D-04 0.5641534247751D-04 0.5775781494596D-04 0.5913222285265D-04 + 0.6053932550771D-04 0.6197990026094D-04 0.6345474292991D-04 0.6496466823815D-04 + 0.6651051026378D-04 0.6809312289875D-04 0.6971338031887D-04 0.7137217746513D-04 + 0.7307043053626D-04 0.7480907749308D-04 0.7658907857468D-04 0.7841141682692D-04 + 0.8027709864336D-04 0.8218715431905D-04 0.8414263861740D-04 0.8614463135050D-04 + 0.8819423797310D-04 0.9029259019072D-04 0.9244084658213D-04 0.9464019323656D-04 + 0.9689184440594D-04 0.9919704317265D-04 0.1015570621330D-03 0.1039732040969D-03 + 0.1064468028041D-03 0.1089792236573D-03 0.1115718644728D-03 0.1142261562483D-03 + 0.1169435639500D-03 0.1197255873171D-03 0.1225737616857D-03 0.1254896588328D-03 + 0.1284748878395D-03 0.1315310959746D-03 0.1346599695998D-03 0.1378632350954D-03 + 0.1411426598085D-03 0.1445000530233D-03 0.1479372669546D-03 0.1514561977641D-03 + 0.1550587866019D-03 0.1587470206711D-03 0.1625229343189D-03 0.1663886101524D-03 + 0.1703461801815D-03 0.1743978269887D-03 0.1785457849256D-03 0.1827923413391D-03 + 0.1871398378251D-03 0.1915906715131D-03 0.1961472963799D-03 0.2008122245952D-03 + 0.2055880278984D-03 0.2104773390081D-03 0.2154828530649D-03 0.2206073291079D-03 + 0.2258535915864D-03 0.2312245319072D-03 0.2367231100177D-03 0.2423523560273D-03 + 0.2481153718665D-03 0.2540153329849D-03 0.2600554900897D-03 0.2662391709247D-03 + 0.2725697820915D-03 0.2790508109132D-03 0.2856858273428D-03 0.2924784859153D-03 + 0.2994325277470D-03 0.3065517825810D-03 0.3138401708812D-03 0.3213017059753D-03 + 0.3289404962488D-03 0.3367607473897D-03 0.3447667646870D-03 0.3529629553823D-03 + 0.3613538310777D-03 0.3699440101989D-03 0.3787382205180D-03 0.3877413017338D-03 + 0.3969582081140D-03 0.4063940111991D-03 0.4160539025692D-03 0.4259431966769D-03 + 0.4360673337456D-03 0.4464318827368D-03 0.4570425443864D-03 0.4679051543124D-03 + 0.4790256861959D-03 0.4904102550358D-03 0.5020651204812D-03 0.5139966902408D-03 + 0.5262115235724D-03 0.5387163348549D-03 0.5515179972435D-03 0.5646235464104D-03 + 0.5780401843732D-03 0.5917752834137D-03 0.6058363900874D-03 0.6202312293275D-03 + 0.6349677086450D-03 0.6500539224267D-03 0.6654981563344D-03 0.6813088918062D-03 + 0.6974948106637D-03 0.7140647998269D-03 0.7310279561389D-03 0.7483935913040D-03 + 0.7661712369406D-03 0.7843706497523D-03 0.8030018168203D-03 0.8220749610184D-03 + 0.8416005465556D-03 0.8615892846469D-03 0.8820521393172D-03 0.9030003333406D-03 + 0.9244453543176D-03 0.9463989608946D-03 0.9688731891282D-03 0.9918803589975D-03 + 0.1015433081069D-02 0.1039544263315D-02 0.1064227118095D-02 0.1089495169290D-02 + 0.1115362259619D-02 0.1141842558105D-02 0.1168950567737D-02 0.1196701133289D-02 + 0.1225109449338D-02 0.1254191068456D-02 0.1283961909601D-02 0.1314438266696D-02 + 0.1345636817413D-02 0.1377574632157D-02 0.1410269183260D-02 0.1443738354387D-02 + 0.1478000450161D-02 0.1513074206015D-02 0.1548978798262D-02 0.1585733854409D-02 + 0.1623359463706D-02 0.1661876187936D-02 0.1701305072458D-02 0.1741667657505D-02 + 0.1782985989747D-02 0.1825282634108D-02 0.1868580685877D-02 0.1912903783076D-02 + 0.1958276119133D-02 0.2004722455835D-02 0.2052268136585D-02 0.2100939099962D-02 + 0.2150761893598D-02 0.2201763688371D-02 0.2253972292925D-02 0.2307416168524D-02 + 0.2362124444253D-02 0.2418126932561D-02 0.2475454145167D-02 0.2534137309329D-02 + 0.2594208384486D-02 0.2655700079287D-02 0.2718645869002D-02 0.2783080013344D-02 + 0.2849037574687D-02 0.2916554436715D-02 0.2985667323484D-02 0.3056413818931D-02 + 0.3128832386828D-02 0.3202962391187D-02 0.3278844117136D-02 0.3356518792272D-02 + 0.3436028608501D-02 0.3517416744371D-02 0.3600727387929D-02 0.3686005760082D-02 + 0.3773298138499D-02 0.3862651882061D-02 0.3954115455860D-02 0.4047738456768D-02 + 0.4143571639594D-02 0.4241666943825D-02 0.4342077520985D-02 0.4444857762604D-02 + 0.4550063328833D-02 0.4657751177697D-02 0.4767979595018D-02 0.4880808225009D-02 + 0.4996298101570D-02 0.5114511680279D-02 0.5235512871115D-02 0.5359367071918D-02 + 0.5486141202598D-02 0.5615903740128D-02 0.5748724754308D-02 0.5884675944352D-02 + 0.6023830676284D-02 0.6166264021183D-02 0.6312052794284D-02 0.6461275594959D-02 + 0.6614012847588D-02 0.6770346843357D-02 0.6930361782982D-02 0.7094143820394D-02 + 0.7261781107400D-02 0.7433363839342D-02 0.7608984301773D-02 0.7788736918176D-02 + 0.7972718298747D-02 0.8161027290261D-02 0.8353765027049D-02 0.8551034983111D-02 + 0.8752943025377D-02 0.8959597468160D-02 0.9171109128811D-02 0.9387591384603D-02 + 0.9609160230877D-02 0.9835934340477D-02 0.1006803512449D-01 0.1030558679431D-01 + 0.1054871642512D-01 0.1079755402073D-01 0.1105223257982D-01 0.1131288816368D-01 + 0.1157965996544D-01 0.1185269038080D-01 0.1213212508026D-01 0.1241811308303D-01 + 0.1271080683248D-01 0.1301036227325D-01 0.1331693893004D-01 0.1363069998813D-01 + 0.1395181237567D-01 0.1428044684765D-01 0.1461677807184D-01 0.1496098471648D-01 + 0.1531324953990D-01 0.1567375948211D-01 0.1604270575828D-01 0.1642028395434D-01 + 0.1680669412453D-01 0.1720214089116D-01 0.1760683354637D-01 0.1802098615621D-01 + 0.1844481766683D-01 0.1887855201303D-01 0.1932241822902D-01 0.1977665056168D-01 + 0.2024148858606D-01 0.2071717732349D-01 0.2120396736203D-01 0.2170211497964D-01 + 0.2221188226980D-01 0.2273353726988D-01 0.2326735409215D-01 0.2381361305754D-01 + 0.2437260083229D-01 0.2494461056731D-01 0.2552994204062D-01 0.2612890180262D-01 + 0.2674180332442D-01 0.2736896714935D-01 0.2801072104743D-01 0.2866740017320D-01 + 0.2933934722669D-01 0.3002691261781D-01 0.3073045463399D-01 0.3145033961141D-01 + 0.3218694210958D-01 0.3294064508962D-01 0.3371184009606D-01 0.3450092744243D-01 + 0.3530831640054D-01 0.3613442539362D-01 0.3697968219334D-01 0.3784452412086D-01 + 0.3872939825181D-01 0.3963476162544D-01 0.4056108145796D-01 0.4150883536008D-01 + 0.4247851155891D-01 0.4347060912422D-01 0.4448563819924D-01 0.4552412023590D-01 + 0.4658658823475D-01 0.4767358698962D-01 0.4878567333696D-01 0.4992341641008D-01 + 0.5108739789835D-01 0.5227821231135D-01 0.5349646724813D-01 0.5474278367169D-01 + 0.5601779618862D-01 0.5732215333417D-01 0.5865651786266D-01 0.6002156704340D-01 + 0.6141799296226D-01 0.6284650282880D-01 0.6430781928923D-01 0.6580268074515D-01 + 0.6733184167825D-01 0.6889607298100D-01 0.7049616229337D-01 0.7213291434581D-01 + 0.7380715130845D-01 0.7551971314661D-01 0.7727145798277D-01 0.7906326246509D-01 + 0.8089602214242D-01 0.8277065184608D-01 0.8468808607842D-01 0.8664927940812D-01 + 0.8865520687255D-01 0.9070686438707D-01 0.9280526916144D-01 0.9495146012343D-01 + 0.9714649834967D-01 0.9939146750384D-01 0.1016874742823D+00 0.1040356488672D+00 + 0.1064371453872D+00 0.1088931423856D+00 0.1114048432967D+00 0.1139734769295D+00 + 0.1166002979593D+00 0.1192865874273D+00 0.1220336532487D+00 0.1248428307276D+00 + 0.1277154830815D+00 0.1306530019730D+00 0.1336568080498D+00 0.1367283514936D+00 + 0.1398691125766D+00 0.1430806022269D+00 0.1463643626021D+00 0.1497219676713D+00 + 0.1531550238057D+00 0.1566651703780D+00 0.1602540803695D+00 0.1639234609870D+00 + 0.1676750542871D+00 0.1715106378098D+00 0.1754320252209D+00 0.1794410669619D+00 + 0.1835396509100D+00 0.1877297030455D+00 0.1920131881282D+00 0.1963921103827D+00 + 0.2008685141914D+00 0.2054444847966D+00 0.2101221490109D+00 0.2149036759359D+00 + 0.2197912776889D+00 0.2247872101386D+00 0.2298937736476D+00 0.2351133138248D+00 + 0.2404482222837D+00 0.2459009374100D+00 0.2514739451362D+00 0.2571697797240D+00 + 0.2629910245536D+00 0.2689403129212D+00 0.2750203288421D+00 0.2812338078623D+00 + 0.2875835378751D+00 0.2940723599454D+00 0.3007031691395D+00 0.3074789153608D+00 + 0.3144026041916D+00 0.3214772977396D+00 0.3287061154899D+00 0.3360922351618D+00 + 0.3436388935694D+00 0.3513493874868D+00 0.3592270745164D+00 0.3672753739607D+00 + 0.3754977676972D+00 0.3838978010545D+00 0.3924790836915D+00 0.4012452904770D+00 + 0.4102001623706D+00 0.4193475073036D+00 0.4286912010595D+00 0.4382351881538D+00 + 0.4479834827120D+00 0.4579401693452D+00 0.4681094040228D+00 0.4784954149418D+00 + 0.4891025033910D+00 0.4999350446102D+00 0.5109974886435D+00 0.5222943611853D+00 + 0.5338302644183D+00 0.5456098778426D+00 0.5576379590956D+00 0.5699193447601D+00 + 0.5824589511607D+00 0.5952617751475D+00 0.6083328948654D+00 0.6216774705074D+00 + 0.6353007450521D+00 0.6492080449824D+00 0.6634047809857D+00 0.6778964486325D+00 + 0.6926886290333D+00 0.7077869894721D+00 0.7231972840138D+00 0.7389253540860D+00 + 0.7549771290311D+00 0.7713586266289D+00 0.7880759535873D+00 0.8051353059985D+00 + 0.8225429697604D+00 0.8403053209599D+00 0.8584288262158D+00 0.8769200429817D+00 + 0.8957856198031D+00 0.9150322965294D+00 0.9346669044774D+00 0.9546963665439D+00 + 0.9751276972649D+00 0.9959680028197D+00 0.1017224480976D+01 0.1038904420974D+01 + 0.1061015203349D+01 0.1083564299686D+01 0.1106559272300D+01 0.1130007773859D+01 + 0.1153917546912D+01 0.1178296423354D+01 0.1203152323804D+01 0.1228493256899D+01 + 0.1254327318495D+01 0.1280662690787D+01 0.1307507641324D+01 0.1334870521934D+01 + 0.1362759767535D+01 0.1391183894856D+01 0.1420151501035D+01 0.1449671262109D+01 + 0.1479751931386D+01 0.1510402337698D+01 0.1541631383520D+01 0.1573448042969D+01 + 0.1605861359662D+01 0.1638880444440D+01 0.1672514472946D+01 0.1706772683055D+01 + 0.1741664372155D+01 0.1777198894269D+01 0.1813385657016D+01 0.1850234118409D+01 + 0.1887753783475D+01 0.1925954200705D+01 0.1964844958324D+01 0.2004435680370D+01 + 0.2044736022586D+01 0.2085755668115D+01 0.2127504322996D+01 0.2169991711448D+01 + 0.2213227570952D+01 0.2257221647108D+01 0.2301983688271D+01 0.2347523439972D+01 + 0.2393850639086D+01 0.2440975007782D+01 0.2488906247220D+01 0.2537654031002D+01 + 0.2587227998372D+01 0.2637637747157D+01 0.2688892826442D+01 0.2741002728983D+01 + 0.2793976883341D+01 0.2847824645743D+01 0.2902555291652D+01 0.2958178007063D+01 + 0.3014701879494D+01 0.3072135888684D+01 0.3130488897001D+01 0.3189769639525D+01 + 0.3249986713841D+01 0.3311148569513D+01 0.3373263497233D+01 0.3436339617667D+01 + 0.3500384869964D+01 0.3565406999951D+01 0.3631413547991D+01 0.3698411836514D+01 + 0.3766408957221D+01 0.3835411757947D+01 0.3905426829193D+01 0.3976460490322D+01 + 0.4048518775419D+01 0.4121607418815D+01 0.4195731840277D+01 0.4270897129857D+01 + 0.4347108032420D+01 0.4424368931831D+01 0.4502683834816D+01 0.4582056354503D+01 + 0.4662489693636D+01 0.4743986627475D+01 0.4826549486387D+01 0.4910180138127D+01 + 0.4994879969825D+01 0.5080649869681D+01 0.5167490208373D+01 0.5255400820202D+01 + 0.5344380983962D+01 0.5434429403565D+01 0.5525544188426D+01 0.5617722833617D+01 + 0.5710962199815D+01 0.5805258493041D+01 0.5900607244231D+01 0.5997003288635D+01 + 0.6094440745069D+01 0.6192912995049D+01 0.6292412661814D+01 0.6392931589269D+01 + 0.6494460820874D+01 0.6596990578488D+01 0.6700510241224D+01 0.6805008324307D+01 + 0.6910472457995D+01 0.7016889366579D+01 0.7124244847491D+01 0.7232523750568D+01 + 0.7341709957494D+01 0.7451786361463D+01 0.7562734847107D+01 0.7674536270712D+01 + 0.7787170440791D+01 0.7900616099026D+01 0.8014850901658D+01 0.8129851401340D+01 + 0.8245593029526D+01 0.8362050079436D+01 0.8479195689649D+01 0.8597001828383D+01 + 0.8715439278509D+01 0.8834477623371D+01 0.8954085233454D+01 0.9074229253973D+01 + 0.9194875593440D+01 0.9315988913276D+01 0.9437532618530D+01 0.9559468849772D+01 + 0.9681758476237D+01 0.9804361090277D+01 0.9927235003199D+01 0.1005033724256D+02 + 0.1017362355101D+02 0.1029704838669D+02 0.1042056492540D+02 0.1054412506444D+02 + 0.1066767942831D+02 0.1079117737637D+02 0.1091456701244D+02 0.1103779519646D+02 + 0.1116080755839D+02 0.1128354851420D+02 0.1140596128432D+02 0.1152798791434D+02 + 0.1164956929827D+02 0.1177064520433D+02 0.1189115430327D+02 0.1201103419951D+02 + 0.1213022146500D+02 0.1224865167586D+02 0.1236625945201D+02 0.1248297849976D+02 + 0.1259874165744D+02 0.1271348094411D+02 0.1282712761148D+02 0.1293961219902D+02 + 0.1305086459240D+02 0.1316081408518D+02 0.1326938944391D+02 0.1337651897664D+02 + 0.1348213060491D+02 0.1358615193909D+02 0.1368851035736D+02 0.1378913308811D+02 + 0.1388794729589D+02 0.1398488017086D+02 0.1407985902179D+02 0.1417281137257D+02 + 0.1426366506212D+02 0.1435234834789D+02 0.1443879001264D+02 0.1452291947466D+02 + 0.1460466690129D+02 0.1468396332564D+02 0.1476074076649D+02 0.1483493235126D+02 + 0.1490647244192D+02 0.1497529676373D+02 0.1504134253675D+02 0.1510454860984D+02 + 0.1516485559720D+02 0.1522220601698D+02 0.1527654443219D+02 0.1532781759325D+02 + 0.1537597458241D+02 0.1542096695946D+02 0.1546274890874D+02 0.1550127738702D+02 + 0.1553651227211D+02 0.1556841651189D+02 0.1559695627334D+02 0.1562210109145D+02 + 0.1564382401753D+02 0.1566210176664D+02 0.1567691486377D+02 0.1568824778841D+02 + 0.1569608911712D+02 0.1570043166360D+02 0.1570127261607D+02 0.1569861367129D+02 + 0.1569246116496D+02 0.1568282619787D+02 0.1566972475757D+02 0.1565317783486D+02 + 0.1563321153475D+02 0.1560985718135D+02 0.1558315141624D+02 0.1555313628970D+02 + 0.1551985934445D+02 0.1548337369123D+02 0.1544373807583D+02 0.1540101693692D+02 + 0.1535528045436D+02 0.1530660458716D+02 0.1525507110098D+02 0.1520076758423D+02 + 0.1514378745267D+02 0.1508422994170D+02 0.1502220008605D+02 0.1495780868635D+02 + 0.1489117226206D+02 0.1482241299046D+02 0.1475165863115D+02 0.1467904243575D+02 + 0.1460470304238D+02 0.1452878435463D+02 0.1445143540465D+02 0.1437281020013D+02 + 0.1429306755483D+02 0.1421237090260D+02 0.1413088809452D+02 0.1404879117925D+02 + 0.1396625616625D+02 0.1388346277207D+02 0.1380059414952D+02 0.1371783659988D+02 + 0.1363537926825D+02 0.1355341382212D+02 0.1347213411351D+02 0.1339173582480D+02 + 0.1331241609871D+02 0.1323437315279D+02 0.1315780587881D+02 0.1308291342766D+02 + 0.1300989478035D+02 0.1293894830568D+02 0.1287027130535D+02 0.1280405954732D+02 + 0.1274050678825D+02 0.1267980428593D+02 0.1262214030269D+02 0.1256769960087D+02 + 0.1251666293145D+02 0.1246920651702D+02 0.1242550153038D+02 0.1238571356999D+02 + 0.1235000213372D+02 0.1231852009235D+02 0.1229141316414D+02 0.1226881939222D+02 + 0.1225086862623D+02 0.1223768200985D+02 0.1222937147599D+02 0.1222603925117D+02 + 0.1222777737106D+02 0.1223466720868D+02 0.1224677901729D+02 0.1226417148958D+02 + 0.1228689133517D+02 0.1231497287802D+02 0.1234843767581D+02 0.1238729416297D+02 + 0.1243153731911D+02 0.1248114836487D+02 0.1253609448665D+02 0.1259632859227D+02 + 0.1266178909890D+02 0.1273239975523D+02 0.1280806949923D+02 0.1288869235315D+02 + 0.1297414735711D+02 0.1306429854274D+02 0.1315899494816D+02 0.1325807067533D+02 + 0.1336134499111D+02 0.1346862247282D+02 0.1357969319917D+02 0.1369433298744D+02 + 0.1381230367740D+02 0.1393335346243D+02 0.1405721726828D+02 0.1418361717951D+02 + 0.1431226291376D+02 0.1444285234362D+02 0.1457507206581D+02 0.1470859801733D+02 + 0.1484309613763D+02 0.1497822307639D+02 0.1511362694548D+02 0.1524894811426D+02 + 0.1538382004666D+02 0.1551787017849D+02 0.1565072083339D+02 0.1578199017530D+02 + 0.1591129319546D+02 0.1603824273170D+02 0.1616245051740D+02 0.1628352825765D+02 + 0.1640108872963D+02 0.1651474690448D+02 0.1662412108723D+02 0.1672883407174D+02 + 0.1682851430716D+02 0.1692279707220D+02 0.1701132565381D+02 0.1709375252614D+02 + 0.1716974052608D+02 0.1723896402125D+02 0.1730111006644D+02 0.1735587954416D+02 + 0.1740298828530D+02 0.1744216816538D+02 0.1747316817225D+02 0.1749575544089D+02 + 0.1750971625093D+02 0.1751485698260D+02 0.1751100502688D+02 0.1749800964559D+02 + 0.1747574277733D+02 0.1744409978499D+02 0.1740300014123D+02 0.1735238804766D+02 + 0.1729223298439D+02 0.1722253018618D+02 0.1714330104180D+02 0.1705459341368D+02 + 0.1695648187457D+02 0.1684906785873D+02 0.1673247972505D+02 0.1660687272995D+02 + 0.1647242890818D+02 0.1632935685981D+02 0.1617789144222D+02 0.1601829336618D+02 + 0.1585084869528D+02 0.1567586824865D+02 0.1549368690699D+02 0.1530466282265D+02 + 0.1510917653451D+02 0.1490762998916D+02 0.1470044547022D+02 0.1448806443791D+02 + 0.1427094628160D+02 0.1404956698852D+02 0.1382441773199D+02 0.1359600338336D+02 + 0.1336484095192D+02 0.1313145795774D+02 0.1289639074258D+02 0.1266018272468D+02 + 0.1242338260337D+02 0.1218654252002D+02 0.1195021618209D+02 0.1171495695744D+02 + 0.1148131594627D+02 0.1124984003849D+02 0.1102106996440D+02 0.1079553834688D+02 + 0.1057376776347D+02 0.1035626882667D+02 0.1014353829125D+02 0.9936057196884D+01 + 0.9734289054994D+01 0.9538678088120D+01 0.9349647530399D+01 0.9167597997384D+01 + 0.8992905933301D+01 0.8825922143594D+01 0.8666970420224D+01 0.8516346266999D+01 + 0.8374315731611D+01 0.8241114350747D+01 0.8116946214096D+01 0.8001983152570D+01 + 0.7896364055459D+01 0.7800194320670D+01 0.7713545441561D+01 0.7636454733225D+01 + 0.7568925200401D+01 0.7510925548528D+01 0.7462390338698D+01 0.7423220286625D+01 + 0.7393282704950D+01 0.7372412087556D+01 0.7360410833787D+01 0.7357050109802D+01 + 0.7362070843542D+01 0.7375184849138D+01 0.7396076075866D+01 0.7424401976120D+01 + 0.7459794986211D+01 0.7501864113185D+01 0.7550196620265D+01 0.7604359802945D+01 + 0.7663902847256D+01 0.7728358761219D+01 0.7797246370063D+01 0.7870072365405D+01 + 0.7946333398216D+01 0.8025518205140D+01 0.8107109757504D+01 0.8190587422172D+01 + 0.8275429123337D+01 0.8361113494303D+01 0.8447122008353D+01 0.8532941077928D+01 + 0.8618064111536D+01 0.8701993518075D+01 0.8784242648578D+01 0.8864337665829D+01 + 0.8941819332731D+01 0.9016244710878D+01 0.9087188761372D+01 0.9154245840560D+01 + 0.9217031084099D+01 0.9275181673474D+01 0.9328357979881D+01 0.9376244581215D+01 + 0.9418551148709D+01 0.9455013200639D+01 0.9485392721360D+01 0.9509478644797D+01 + 0.9527087202359D+01 0.9538062136102D+01 0.9542274778747D+01 0.9539624002998D+01 + 0.9530036043300D+01 0.9513464193959D+01 0.9489888388159D+01 0.9459314663078D+01 + 0.9421774516843D+01 0.9377324163609D+01 0.9326043693467D+01 0.9268036144314D+01 + 0.9203426493115D+01 0.9132360574297D+01 0.9055003933175D+01 0.8971540622481D+01 + 0.8882171950151D+01 0.8787115186520D+01 0.8686602239071D+01 0.8580878302773D+01 + 0.8470200493895D+01 0.8354836475027D+01 0.8235063078754D+01 0.8111164937189D+01 + 0.7983433124252D+01 0.7852163817216D+01 0.7717656983696D+01 0.7580215099831D+01 + 0.7440141905014D+01 0.7297741198086D+01 0.7153315679440D+01 0.7007165843079D+01 + 0.6859588922166D+01 0.6710877891167D+01 0.6561320527250D+01 0.6411198533128D+01 + 0.6260786723101D+01 0.6110352273646D+01 0.5960154039458D+01 0.5810441935471D+01 + 0.5661456384987D+01 0.5513427833700D+01 0.5366576329042D+01 0.5221111163955D+01 + 0.5077230583918D+01 0.4935121555751D+01 0.4794959596475D+01 0.4656908660288D+01 + 0.4521121081498D+01 0.4387737571052D+01 0.4256887264186D+01 0.4128687816522D+01 + 0.4003245545873D+01 0.3880655616880D+01 0.3761002265561D+01 0.3644359060777D+01 + 0.3530789199588D+01 0.3420345833472D+01 0.3313072422343D+01 0.3209003113371D+01 + 0.3108163141592D+01 0.3010569249384D+01 0.2916230121919D+01 0.2825146835796D+01 + 0.2737313318133D+01 0.2652716813508D+01 0.2571338356232D+01 0.2493153245580D+01 + 0.2418131521695D+01 0.2346238440047D+01 0.2277434942461D+01 0.2211678122838D+01 + 0.2148921685899D+01 0.2089116397376D+01 0.2032210524266D+01 0.1978150263893D+01 + 0.1926880160684D+01 0.1878343509721D+01 0.1832482746269D+01 0.1789239820638D+01 + 0.1748556557871D+01 0.1710375001879D+01 0.1674637743804D+01 0.1641288234472D+01 + 0.1610271080956D+01 0.1581532327338D+01 0.1555019719890D+01 0.1530682956958D+01 + 0.1508473923914D+01 0.1488346913611D+01 0.1470258832820D+01 0.1454169395155D+01 + 0.1440041301042D+01 0.1427840405245D+01 0.1417535872504D+01 0.1409100321753D+01 + 0.1402509959377D+01 0.1397744701874D+01 0.1394788288181D+01 0.1393628381826D+01 + 0.1394256662892D+01 0.1396668909610D+01 0.1400865069190D+01 0.1406849317222D+01 + 0.1414629369614D+01 0.1424336942263D+01 0.1436096575202D+01 0.1449912447024D+01 + 0.1465794674727D+01 0.1483759333931D+01 0.1503828494539D+01 0.1526030271798D+01 + 0.1550398892649D+01 0.1576974777196D+01 0.1605804635055D+01 0.1636941576215D+01 + 7 1012 + 1 0 -1 -511.89194 + 2 0 -1 -58.90181 + 2 1 1 -50.68932 + 2 1 -2 -49.77537 + 3 0 -1 -5.73317 + 3 1 1 -3.34334 + 3 1 -2 -3.22919 + 0.2122975645015D-04 0.2173507709867D-04 0.2225242316243D-04 0.2278208072829D-04 + 0.2332434268594D-04 0.2387950888954D-04 0.2444788632325D-04 0.2502978927059D-04 + 0.2562553948791D-04 0.2623546638192D-04 0.2685990719144D-04 0.2749920717353D-04 + 0.2815371979393D-04 0.2882380692207D-04 0.2950983903075D-04 0.3021219540050D-04 + 0.3093126432877D-04 0.3166744334418D-04 0.3242113942573D-04 0.3319276922733D-04 + 0.3398275930755D-04 0.3479154636487D-04 0.3561957747857D-04 0.3646731035519D-04 + 0.3733521358096D-04 0.3822376688016D-04 0.3913346137963D-04 0.4006479987955D-04 + 0.4101829713060D-04 0.4199448011777D-04 0.4299388835081D-04 0.4401707416166D-04 + 0.4506460300883D-04 0.4613705378910D-04 0.4723501915650D-04 0.4835910584899D-04 + 0.4950993502270D-04 0.5068814259429D-04 0.5189437959126D-04 0.5312931251066D-04 + 0.5439362368626D-04 0.5568801166444D-04 0.5701319158897D-04 0.5836989559491D-04 + 0.5975887321186D-04 0.6118089177673D-04 0.6263673685632D-04 0.6412721267990D-04 + 0.6565314258201D-04 0.6721536945580D-04 0.6881475621705D-04 0.7045218627922D-04 + 0.7212856403973D-04 0.7384481537777D-04 0.7560188816385D-04 0.7740075278149D-04 + 0.7924240266119D-04 0.8112785482706D-04 0.8305815045642D-04 0.8503435545263D-04 + 0.8705756103141D-04 0.8912888432116D-04 0.9124946897738D-04 0.9342048581165D-04 + 0.9564313343555D-04 0.9791863891974D-04 0.1002482584687D-03 0.1026332781112D-03 + 0.1050750144077D-03 0.1075748151735D-03 0.1101340602203D-03 0.1127541621137D-03 + 0.1154365669501D-03 0.1181827551510D-03 0.1209942422769D-03 0.1238725798590D-03 + 0.1268193562527D-03 0.1298361975089D-03 0.1329247682680D-03 0.1360867726735D-03 + 0.1393239553083D-03 0.1426381021518D-03 0.1460310415612D-03 0.1495046452749D-03 + 0.1530608294397D-03 0.1567015556625D-03 0.1604288320871D-03 0.1642447144955D-03 + 0.1681513074364D-03 0.1721507653792D-03 0.1762452938963D-03 0.1804371508722D-03 + 0.1847286477421D-03 0.1891221507592D-03 0.1936200822920D-03 0.1982249221522D-03 + 0.2029392089542D-03 0.2077655415060D-03 0.2127065802334D-03 0.2177650486382D-03 + 0.2229437347894D-03 0.2282454928513D-03 0.2336732446459D-03 0.2392299812538D-03 + 0.2449187646513D-03 0.2507427293871D-03 0.2567050842979D-03 0.2628091142650D-03 + 0.2690581820118D-03 0.2754557299435D-03 0.2820052820308D-03 0.2887104457371D-03 + 0.2955749139921D-03 0.3026024672103D-03 0.3097969753590D-03 0.3171624000731D-03 + 0.3247027968207D-03 0.3324223171196D-03 0.3403252108055D-03 0.3484158283536D-03 + 0.3566986232552D-03 0.3651781544500D-03 0.3738590888149D-03 0.3827462037126D-03 + 0.3918443895988D-03 0.4011586526914D-03 0.4106941177020D-03 0.4204560306321D-03 + 0.4304497616342D-03 0.4406808079408D-03 0.4511547968612D-03 0.4618774888502D-03 + 0.4728547806468D-03 0.4840927084883D-03 0.4955974513988D-03 0.5073753345551D-03 + 0.5194328327314D-03 0.5317765738249D-03 0.5444133424641D-03 0.5573500837015D-03 + 0.5705939067925D-03 0.5841520890639D-03 0.5980320798714D-03 0.6122415046513D-03 + 0.6267881690659D-03 0.6416800632466D-03 0.6569253661363D-03 0.6725324499326D-03 + 0.6885098846360D-03 0.7048664427037D-03 0.7216111038125D-03 0.7387530597330D-03 + 0.7563017193176D-03 0.7742667136049D-03 0.7926579010441D-03 0.8114853728404D-03 + 0.8307594584254D-03 0.8504907310562D-03 0.8706900135433D-03 0.8913683841142D-03 + 0.9125371824119D-03 0.9342080156346D-03 0.9563927648179D-03 0.9791035912634D-03 + 0.1002352943117D-02 0.1026153562102D-02 0.1050518490405D-02 0.1075461077728D-02 + 0.1100994988496D-02 0.1127134209246D-02 0.1153893056171D-02 0.1181286182852D-02 + 0.1209328588167D-02 0.1238035624379D-02 0.1267423005415D-02 0.1297506815344D-02 + 0.1328303517037D-02 0.1359829961041D-02 0.1392103394654D-02 0.1425141471212D-02 + 0.1458962259585D-02 0.1493584253904D-02 0.1529026383504D-02 0.1565308023106D-02 + 0.1602449003221D-02 0.1640469620811D-02 0.1679390650189D-02 0.1719233354165D-02 + 0.1760019495464D-02 0.1801771348394D-02 0.1844511710794D-02 0.1888263916250D-02 + 0.1933051846599D-02 0.1978899944720D-02 0.2025833227614D-02 0.2073877299798D-02 + 0.2123058366995D-02 0.2173403250151D-02 0.2224939399761D-02 0.2277694910540D-02 + 0.2331698536421D-02 0.2386979705903D-02 0.2443568537747D-02 0.2501495857040D-02 + 0.2560793211623D-02 0.2621492888896D-02 0.2683627933011D-02 0.2747232162458D-02 + 0.2812340188056D-02 0.2878987431352D-02 0.2947210143447D-02 0.3017045424251D-02 + 0.3088531242177D-02 0.3161706454285D-02 0.3236610826892D-02 0.3313285056646D-02 + 0.3391770792086D-02 0.3472110655691D-02 0.3554348266436D-02 0.3638528262858D-02 + 0.3724696326649D-02 0.3812899206788D-02 0.3903184744224D-02 0.3995601897109D-02 + 0.4090200766624D-02 0.4187032623373D-02 0.4286149934389D-02 0.4387606390746D-02 + 0.4491456935804D-02 0.4597757794082D-02 0.4706566500803D-02 0.4817941932088D-02 + 0.4931944335851D-02 0.5048635363379D-02 0.5168078101634D-02 0.5290337106279D-02 + 0.5415478435454D-02 0.5543569684307D-02 0.5674680020311D-02 0.5808880219367D-02 + 0.5946242702730D-02 0.6086841574754D-02 0.6230752661494D-02 0.6378053550168D-02 + 0.6528823629508D-02 0.6683144131013D-02 0.6841098171130D-02 0.7002770794372D-02 + 0.7168249017405D-02 0.7337621874121D-02 0.7510980461712D-02 0.7688417987773D-02 + 0.7870029818463D-02 0.8055913527720D-02 0.8246168947593D-02 0.8440898219673D-02 + 0.8640205847678D-02 0.8844198751201D-02 0.9052986320644D-02 0.9266680473381D-02 + 0.9485395711148D-02 0.9709249178711D-02 0.9938360723829D-02 0.1017285295853D-01 + 0.1041285132175D-01 0.1065848414335D-01 0.1090988270951D-01 0.1116718132961D-01 + 0.1143051740455D-01 0.1170003149653D-01 0.1197586740047D-01 0.1225817221684D-01 + 0.1254709642620D-01 0.1284279396532D-01 0.1314542230495D-01 0.1345514252930D-01 + 0.1377211941725D-01 0.1409652152530D-01 0.1442852127232D-01 0.1476829502620D-01 + 0.1511602319226D-01 0.1547189030365D-01 0.1583608511371D-01 0.1620880069022D-01 + 0.1659023451183D-01 0.1698058856639D-01 0.1738006945154D-01 0.1778888847734D-01 + 0.1820726177118D-01 0.1863541038486D-01 0.1907356040402D-01 0.1952194305980D-01 + 0.1998079484302D-01 0.2045035762063D-01 0.2093087875471D-01 0.2142261122400D-01 + 0.2192581374792D-01 0.2244075091329D-01 0.2296769330365D-01 0.2350691763133D-01 + 0.2405870687229D-01 0.2462335040374D-01 0.2520114414469D-01 0.2579239069942D-01 + 0.2639739950387D-01 0.2701648697516D-01 0.2764997666416D-01 0.2829819941123D-01 + 0.2896149350513D-01 0.2964020484531D-01 0.3033468710740D-01 0.3104530191220D-01 + 0.3177241899806D-01 0.3251641639684D-01 0.3327768061342D-01 0.3405660680881D-01 + 0.3485359898710D-01 0.3566907018606D-01 0.3650344267166D-01 0.3735714813647D-01 + 0.3823062790211D-01 0.3912433312562D-01 0.4003872501011D-01 0.4097427501948D-01 + 0.4193146509749D-01 0.4291078789111D-01 0.4391274697832D-01 0.4493785710035D-01 + 0.4598664439858D-01 0.4705964665594D-01 0.4815741354312D-01 0.4928050686955D-01 + 0.5042950083923D-01 0.5160498231153D-01 0.5280755106696D-01 0.5403782007813D-01 + 0.5529641578584D-01 0.5658397838041D-01 0.5790116208843D-01 0.5924863546488D-01 + 0.6062708169076D-01 0.6203719887636D-01 0.6347970037015D-01 0.6495531507346D-01 + 0.6646478776099D-01 0.6800887940725D-01 0.6958836751900D-01 0.7120404647380D-01 + 0.7285672786470D-01 0.7454724085125D-01 0.7627643251682D-01 0.7804516823229D-01 + 0.7985433202641D-01 0.8170482696258D-01 0.8359757552242D-01 0.8553351999606D-01 + 0.8751362287932D-01 0.8953886727772D-01 0.9161025731761D-01 0.9372881856432D-01 + 0.9589559844749D-01 0.9811166669365D-01 0.1003781157661D+00 0.1026960613124D+00 + 0.1050666426187D+00 0.1074910230727D+00 0.1099703906329D+00 0.1125059583070D+00 + 0.1150989646366D+00 0.1177506741909D+00 0.1204623780676D+00 0.1232353944021D+00 + 0.1260710688845D+00 0.1289707752849D+00 0.1319359159864D+00 0.1349679225270D+00 + 0.1380682561490D+00 0.1412384083570D+00 0.1444799014844D+00 0.1477942892678D+00 + 0.1511831574303D+00 0.1546481242725D+00 0.1581908412731D+00 0.1618129936965D+00 + 0.1655163012104D+00 0.1693025185104D+00 0.1731734359544D+00 0.1771308802047D+00 + 0.1811767148790D+00 0.1853128412094D+00 0.1895411987104D+00 0.1938637658552D+00 + 0.1982825607598D+00 0.2027996418767D+00 0.2074171086957D+00 0.2121371024533D+00 + 0.2169618068509D+00 0.2218934487801D+00 0.2269342990569D+00 0.2320866731634D+00 + 0.2373529319974D+00 0.2427354826295D+00 0.2482367790682D+00 0.2538593230323D+00 + 0.2596056647304D+00 0.2654784036474D+00 0.2714801893389D+00 0.2776137222308D+00 + 0.2838817544268D+00 0.2902870905217D+00 0.2968325884206D+00 0.3035211601645D+00 + 0.3103557727607D+00 0.3173394490192D+00 0.3244752683937D+00 0.3317663678273D+00 + 0.3392159426028D+00 0.3468272471962D+00 0.3546035961349D+00 0.3625483648577D+00 + 0.3706649905790D+00 0.3789569731540D+00 0.3874278759464D+00 0.3960813266976D+00 + 0.4049210183955D+00 0.4139507101454D+00 0.4231742280388D+00 0.4325954660221D+00 + 0.4422183867640D+00 0.4520470225197D+00 0.4620854759931D+00 0.4723379211946D+00 + 0.4828086042953D+00 0.4935018444749D+00 0.5044220347646D+00 0.5155736428822D+00 + 0.5269612120602D+00 0.5385893618646D+00 0.5504627890040D+00 0.5625862681281D+00 + 0.5749646526146D+00 0.5876028753427D+00 0.6005059494532D+00 0.6136789690924D+00 + 0.6271271101407D+00 0.6408556309226D+00 0.6548698728981D+00 0.6691752613333D+00 + 0.6837773059493D+00 0.6986816015479D+00 0.7138938286123D+00 0.7294197538810D+00 + 0.7452652308942D+00 0.7614362005101D+00 0.7779386913894D+00 0.7947788204470D+00 + 0.8119627932680D+00 0.8294969044866D+00 0.8473875381261D+00 0.8656411678975D+00 + 0.8842643574549D+00 0.9032637606047D+00 0.9226461214683D+00 0.9424182745935D+00 + 0.9625871450140D+00 0.9831597482541D+00 0.1004143190275D+01 0.1025544667362D+01 + 0.1047371465949D+01 0.1069630962376D+01 0.1092330622582D+01 0.1115478001718D+01 + 0.1139080743699D+01 0.1163146580667D+01 0.1187683332379D+01 0.1212698905512D+01 + 0.1238201292877D+01 0.1264198572546D+01 0.1290698906886D+01 0.1317710541494D+01 + 0.1345241804028D+01 0.1373301102944D+01 0.1401896926110D+01 0.1431037839321D+01 + 0.1460732484690D+01 0.1490989578921D+01 0.1521817911461D+01 0.1553226342519D+01 + 0.1585223800953D+01 0.1617819282025D+01 0.1651021845012D+01 0.1684840610666D+01 + 0.1719284758534D+01 0.1754363524114D+01 0.1790086195862D+01 0.1826462112019D+01 + 0.1863500657290D+01 0.1901211259327D+01 0.1939603385053D+01 0.1978686536792D+01 + 0.2018470248210D+01 0.2058964080068D+01 0.2100177615772D+01 0.2142120456722D+01 + 0.2184802217451D+01 0.2228232520549D+01 0.2272420991371D+01 0.2317377252521D+01 + 0.2363110918097D+01 0.2409631587718D+01 0.2456948840298D+01 0.2505072227579D+01 + 0.2554011267414D+01 0.2603775436800D+01 0.2654374164640D+01 0.2705816824249D+01 + 0.2758112725590D+01 0.2811271107225D+01 0.2865301128002D+01 0.2920211858443D+01 + 0.2976012271854D+01 0.3032711235135D+01 0.3090317499294D+01 0.3148839689666D+01 + 0.3208286295814D+01 0.3268665661132D+01 0.3329985972130D+01 0.3392255247403D+01 + 0.3455481326284D+01 0.3519671857166D+01 0.3584834285516D+01 0.3650975841540D+01 + 0.3718103527540D+01 0.3786224104928D+01 0.3855344080910D+01 0.3925469694842D+01 + 0.3996606904248D+01 0.4068761370505D+01 0.4141938444201D+01 0.4216143150155D+01 + 0.4291380172106D+01 0.4367653837082D+01 0.4444968099432D+01 0.4523326524540D+01 + 0.4602732272224D+01 0.4683188079814D+01 0.4764696244923D+01 0.4847258607911D+01 + 0.4930876534058D+01 0.5015550895439D+01 0.5101282052526D+01 0.5188069835504D+01 + 0.5275913525340D+01 0.5364811834582D+01 0.5454762887935D+01 0.5545764202593D+01 + 0.5637812668364D+01 0.5730904527600D+01 0.5825035354930D+01 0.5920200036841D+01 + 0.6016392751096D+01 0.6113606946037D+01 0.6211835319763D+01 0.6311069799237D+01 + 0.6411301519318D+01 0.6512520801757D+01 0.6614717134178D+01 0.6717879149076D+01 + 0.6821994602856D+01 0.6927050354936D+01 0.7033032346971D+01 0.7139925582197D+01 + 0.7247714104955D+01 0.7356380980422D+01 0.7465908274590D+01 0.7576277034522D+01 + 0.7687467268944D+01 0.7799457929201D+01 0.7912226890625D+01 0.8025750934367D+01 + 0.8140005729731D+01 0.8254965817070D+01 0.8370604591283D+01 0.8486894285977D+01 + 0.8603805958343D+01 0.8721309474805D+01 0.8839373497487D+01 0.8957965471583D+01 + 0.9077051613664D+01 0.9196596901005D+01 0.9316565061973D+01 0.9436918567578D+01 + 0.9557618624205D+01 0.9678625167647D+01 0.9799896858462D+01 0.9921391078761D+01 + 0.1004306393048D+02 0.1016487023519D+02 0.1028676353561D+02 0.1040869609872D+02 + 0.1053061892078D+02 0.1065248173410D+02 0.1077423301584D+02 0.1089581999877D+02 + 0.1101718868413D+02 0.1113828385666D+02 0.1125904910191D+02 0.1137942682584D+02 + 0.1149935827678D+02 0.1161878356999D+02 0.1173764171462D+02 0.1185587064341D+02 + 0.1197340724503D+02 0.1209018739920D+02 0.1220614601465D+02 0.1232121706995D+02 + 0.1243533365740D+02 0.1254842802982D+02 0.1266043165050D+02 0.1277127524634D+02 + 0.1288088886404D+02 0.1298920192971D+02 0.1309614331160D+02 0.1320164138629D+02 + 0.1330562410812D+02 0.1340801908212D+02 0.1350875364026D+02 0.1360775492116D+02 + 0.1370494995324D+02 0.1380026574132D+02 0.1389362935662D+02 0.1398496803019D+02 + 0.1407420924981D+02 0.1416128086012D+02 0.1424611116627D+02 0.1432862904069D+02 + 0.1440876403324D+02 0.1448644648440D+02 0.1456160764164D+02 0.1463417977876D+02 + 0.1470409631813D+02 0.1477129195572D+02 0.1483570278883D+02 0.1489726644633D+02 + 0.1495592222127D+02 0.1501161120574D+02 0.1506427642781D+02 0.1511386299027D+02 + 0.1516031821110D+02 0.1520359176531D+02 0.1524363582812D+02 0.1528040521898D+02 + 0.1531385754641D+02 0.1534395335325D+02 0.1537065626208D+02 0.1539393312048D+02 + 0.1541375414585D+02 0.1543009306950D+02 0.1544292727951D+02 0.1545223796216D+02 + 0.1545801024155D+02 0.1546023331695D+02 0.1545890059744D+02 0.1545400983365D+02 + 0.1544556324596D+02 0.1543356764880D+02 0.1541803457065D+02 0.1539898036925D+02 + 0.1537642634154D+02 0.1535039882796D+02 0.1532092931044D+02 0.1528805450387D+02 + 0.1525181644030D+02 0.1521226254557D+02 0.1516944570778D+02 0.1512342433713D+02 + 0.1507426241669D+02 0.1502202954350D+02 0.1496680095964D+02 0.1490865757272D+02 + 0.1484768596530D+02 0.1478397839284D+02 0.1471763276969D+02 0.1464875264266D+02 + 0.1457744715182D+02 0.1450383097801D+02 0.1442802427679D+02 0.1435015259838D+02 + 0.1427034679327D+02 0.1418874290321D+02 0.1410548203722D+02 0.1402071023247D+02 + 0.1393457829969D+02 0.1384724165293D+02 0.1375886012364D+02 0.1366959775879D+02 + 0.1357962260304D+02 0.1348910646488D+02 0.1339822466686D+02 0.1330715577980D+02 + 0.1321608134121D+02 0.1312518555808D+02 0.1303465499419D+02 0.1294467824221D+02 + 0.1285544558101D+02 0.1276714861841D+02 0.1267997991994D+02 0.1259413262403D+02 + 0.1250980004419D+02 0.1242717525885D+02 0.1234645068948D+02 0.1226781766776D+02 + 0.1219146599257D+02 0.1211758347770D+02 0.1204635549121D+02 0.1197796448732D+02 + 0.1191258953197D+02 0.1185040582321D+02 0.1179158420730D+02 0.1173629069208D+02 + 0.1168468595856D+02 0.1163692487226D+02 0.1159315599549D+02 0.1155352110209D+02 + 0.1151815469598D+02 0.1148718353503D+02 0.1146072616178D+02 0.1143889244247D+02 + 0.1142178311602D+02 0.1140948935454D+02 0.1140209233686D+02 0.1139966283678D+02 + 0.1140226082774D+02 0.1140993510519D+02 0.1142272292875D+02 0.1144064968524D+02 + 0.1146372857460D+02 0.1149196031991D+02 0.1152533290326D+02 0.1156382132880D+02 + 0.1160738741454D+02 0.1165597961412D+02 0.1170953287012D+02 0.1176796849989D+02 + 0.1183119411535D+02 0.1189910357777D+02 0.1197157698856D+02 0.1204848071701D+02 + 0.1212966746596D+02 0.1221497637600D+02 0.1230423316888D+02 0.1239725033077D+02 + 0.1249382733567D+02 0.1259375090926D+02 0.1269679533346D+02 0.1280272279167D+02 + 0.1291128375448D+02 0.1302221740584D+02 0.1313525210912D+02 0.1325010591253D+02 + 0.1336648709337D+02 0.1348409474012D+02 0.1360261937149D+02 0.1372174359123D+02 + 0.1384114277758D+02 0.1396048580566D+02 0.1407943580155D+02 0.1419765092608D+02 + 0.1431478518661D+02 0.1443048927478D+02 0.1454441142812D+02 0.1465619831308D+02 + 0.1476549592746D+02 0.1487195051928D+02 0.1497520951989D+02 0.1507492248828D+02 + 0.1517074206398D+02 0.1526232492551D+02 0.1534933275145D+02 0.1543143318112D+02 + 0.1550830077157D+02 0.1557961794797D+02 0.1564507594396D+02 0.1570437572881D+02 + 0.1575722891823D+02 0.1580335866539D+02 0.1584250052899D+02 0.1587440331524D+02 + 0.1589882989033D+02 0.1591555796049D+02 0.1592438081630D+02 0.1592510803844D+02 + 0.1591756616179D+02 0.1590159929512D+02 0.1587706969359D+02 0.1584385828154D+02 + 0.1580186512290D+02 0.1575100983720D+02 0.1569123195871D+02 0.1562249123695D+02 + 0.1554476787665D+02 0.1545806271560D+02 0.1536239733893D+02 0.1525781412875D+02 + 0.1514437624809D+02 0.1502216755847D+02 0.1489129247063D+02 0.1475187572813D+02 + 0.1460406212401D+02 0.1444801615062D+02 0.1428392158332D+02 0.1411198099888D+02 + 0.1393241522964D+02 0.1374546275490D+02 0.1355137903119D+02 0.1335043576333D+02 + 0.1314292011864D+02 0.1292913388664D+02 0.1270939258714D+02 0.1248402452972D+02 + 0.1225336982785D+02 0.1201777937125D+02 0.1177761376017D+02 0.1153324220569D+02 + 0.1128504140014D+02 0.1103339436205D+02 0.1077868926027D+02 0.1052131822179D+02 + 0.1026167612835D+02 0.1000015940663D+02 0.9737164817090D+01 0.9473088246666D+01 + 0.9208323510392D+01 0.8943261167138D+01 0.8678287354606D+01 0.8413782648689D+01 + 0.8150120952198D+01 0.7887668417870D+01 0.7626782410424D+01 0.7367810512255D+01 + 0.7111089577147D+01 0.6856944836175D+01 0.6605689059620D+01 0.6357621778576D+01 + 0.6113028569417D+01 0.5872180404071D+01 0.5635333068605D+01 0.5402726652271D+01 + 0.5174585108689D+01 0.4951115890458D+01 0.4732509658013D+01 0.4518940063093D+01 + 0.4310563606744D+01 0.4107519571314D+01 0.3909930025455D+01 0.3717899900701D+01 + 0.3531517137795D+01 0.3350852900521D+01 0.3175961854415D+01 0.3006882507418D+01 + 0.2843637609166D+01 0.2686234605393D+01 0.2534666143602D+01 0.2388910626020D+01 + 0.2248932805599D+01 0.2114684420764D+01 0.1986104864410D+01 0.1863121882663D+01 + 0.1745652298807D+01 0.1633602757816D+01 0.1526870486911D+01 0.1425344067651D+01 + 0.1328904215091D+01 0.1237424559686D+01 0.1150772427713D+01 0.1068809616148D+01 + 0.9913931580887D+00 0.9183760750247D+00 0.8496081124357D+00 0.7849364554513D+00 + 0.7242064215293D+00 0.6672621273712D+00 0.6139471275574D+00 0.5641050226618D+00 + 0.5175800348878D+00 0.4742175495586D+00 0.4338646210828D+00 0.3963704423129D+00 + 0.3615867764997D+00 0.3293683513354D+00 0.2995732148544D+00 0.2720630532321D+00 + 0.2467034707815D+00 0.2233642326902D+00 0.2019194712763D+00 0.1822478567499D+00 + 0.1642327336682D+00 0.1477622244444D+00 0.1327293014336D+00 0.1190318292464D+00 + 0.1065725790655D+00 0.9525921682581D-01 0.8500426719540D-01 0.7572505534570D-01 + 0.6734362852856D-01 0.5978665949119D-01 0.5298533375213D-01 0.4687522273735D-01 + 0.4139614473480D-01 0.3649201557103D-01 0.3211069084453D-01 0.2820380147099D-01 + 0.2472658420543D-01 0.2163770870794D-01 0.1889910261478D-01 0.1647577596641D-01 + 0.1433564623066D-01 0.1244936504301D-01 0.1079014767040D-01 0.9333606088531D-02 + 0.8057586449521D-02 0.6942011605538D-02 0.5968729247262D-02 0.5121366113861D-02 + 0.4385188634413D-02 0.3746970269980D-02 0.3194865741265D-02 0.2718292249293D-02 + 0.2307817726031D-02 0.1955056088404D-02 0.1652569412799D-02 0.1393776897745D-02 + 0.1172870439853D-02 0.9847366120634D-03 0.8248848034661D-03 0.6893812560569D-03 + 0.5747887154298D-03 0.4781113990982D-03 0.3967449774979D-03 0.3284312582634D-03 + 0.2712172636576D-03 0.2234183935981D-03 0.1835853721449D-03 0.1504746831443D-03 + 0.1230222105786D-03 0.1003198106540D-03 0.8159455542106D-04 0.6619040144209D-04 + 0.5355205138722D-04 0.4321079120846D-04 0.3477210045803D-04 0.2790484818898D-04 + 0.2233190152246D-04 0.1782198824118D-04 0.1418266855132D-04 0.1125428434880D-04 + 0.8904766856498D-05 0.7025195313453D-05 0.5526010459652D-05 0.4333796852085D-05 + 0.3388557563637D-05 0.2641413563333D-05 0.2052668070841D-05 0.1590183444862D-05 + 0.1228024735392D-05 0.9453299398051D-06 0.7253722919424D-06 0.5547846237125D-06 + 0.4229200131023D-06 0.3213266143727D-06 0.2433177983142D-06 0.1836215545666D-06 + 0.1380955642703D-06 0.1034964778941D-06 0.7729376586493D-07 0.5752008209307D-07 + 0.4265142355148D-07 0.3151151106808D-07 0.2319578320089D-07 0.1701120974173D-07 + 0.1242881489534D-07 0.9046371073667D-08 0.6559198960071D-08 0.4737402476978D-08 + 0.3408191153158D-08 0.2442208093542D-08 0.1742998768590D-08 0.1238932286038D-08 + 0.8770296193333D-09 0.6182683290111D-09 0.4340255982013D-09 0.3033950772413D-09 + 0.2111715589818D-09 0.1463438404983D-09 0.1009726185101D-09 0.6935859066118D-10 + 0.4742849271888D-10 0.3228488955626D-10 0.2187547853929D-10 0.1475212866899D-10 + 0.9901881750809D-11 0.6613860882122D-11 0.4396644350124D-11 0.2908650000322D-11 + 0.1914873227728D-11 0.1254415200484D-11 0.8176535094916D-12 0.5302708391854D-12 + 0.3421370551355D-12 0.2196087836422D-12 0.1402231518601D-12 0.8906014768602D-13 + LSMS: xx z= 26. xvalws= 2.77074 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728402963D+02-0.5199725117641D+02-0.5199721792578D+02-0.5199718427293D+02 +-0.5199715021300D+02-0.5199711574107D+02-0.5199708085214D+02-0.5199704554119D+02 +-0.5199700980309D+02-0.5199697363268D+02-0.5199693702474D+02-0.5199689997397D+02 +-0.5199686247500D+02-0.5199682452243D+02-0.5199678611076D+02-0.5199674723444D+02 +-0.5199670788785D+02-0.5199666806529D+02-0.5199662776101D+02-0.5199658696918D+02 +-0.5199654568390D+02-0.5199650389922D+02-0.5199646160907D+02-0.5199641880734D+02 +-0.5199637548785D+02-0.5199633164434D+02-0.5199628727046D+02-0.5199624235979D+02 +-0.5199619690585D+02-0.5199615090205D+02-0.5199610434176D+02-0.5199605721822D+02 +-0.5199600952464D+02-0.5199596125410D+02-0.5199591239964D+02-0.5199586295419D+02 +-0.5199581291060D+02-0.5199576226162D+02-0.5199571099994D+02-0.5199565911815D+02 +-0.5199560660874D+02-0.5199555346411D+02-0.5199549967658D+02-0.5199544523837D+02 +-0.5199539014162D+02-0.5199533437834D+02-0.5199527794048D+02-0.5199522081989D+02 +-0.5199516300828D+02-0.5199510449731D+02-0.5199504527851D+02-0.5199498534331D+02 +-0.5199492468306D+02-0.5199486328897D+02-0.5199480115217D+02-0.5199473826367D+02 +-0.5199467461436D+02-0.5199461019507D+02-0.5199454499646D+02-0.5199447900910D+02 +-0.5199441222344D+02-0.5199434462984D+02-0.5199427621849D+02-0.5199420697954D+02 +-0.5199413690295D+02-0.5199406597858D+02-0.5199399419618D+02-0.5199392154537D+02 +-0.5199384801563D+02-0.5199377359634D+02-0.5199369827672D+02-0.5199362204589D+02 +-0.5199354489281D+02-0.5199346680633D+02-0.5199338777515D+02-0.5199330778784D+02 +-0.5199322683282D+02-0.5199314489839D+02-0.5199306197270D+02-0.5199297804374D+02 +-0.5199289309939D+02-0.5199280712733D+02-0.5199272011516D+02-0.5199263205027D+02 +-0.5199254291992D+02-0.5199245271123D+02-0.5199236141114D+02-0.5199226900644D+02 +-0.5199217548376D+02-0.5199208082958D+02-0.5199198503019D+02-0.5199188807175D+02 +-0.5199178994021D+02-0.5199169062139D+02-0.5199159010092D+02-0.5199148836424D+02 +-0.5199138539665D+02-0.5199128118323D+02-0.5199117570892D+02-0.5199106895845D+02 +-0.5199096091638D+02-0.5199085156707D+02-0.5199074089471D+02-0.5199062888326D+02 +-0.5199051551654D+02-0.5199040077813D+02-0.5199028465143D+02-0.5199016711964D+02 +-0.5199004816574D+02-0.5198992777253D+02-0.5198980592257D+02-0.5198968259824D+02 +-0.5198955778170D+02-0.5198943145487D+02-0.5198930359948D+02-0.5198917419701D+02 +-0.5198904322875D+02-0.5198891067574D+02-0.5198877651879D+02-0.5198864073848D+02 +-0.5198850331517D+02-0.5198836422896D+02-0.5198822345972D+02-0.5198808098707D+02 +-0.5198793679039D+02-0.5198779084882D+02-0.5198764314123D+02-0.5198749364622D+02 +-0.5198734234217D+02-0.5198718920716D+02-0.5198703421905D+02-0.5198687735537D+02 +-0.5198671859343D+02-0.5198655791024D+02-0.5198639528254D+02-0.5198623068679D+02 +-0.5198606409915D+02-0.5198589549550D+02-0.5198572485143D+02-0.5198555214224D+02 +-0.5198537734293D+02-0.5198520042816D+02-0.5198502137235D+02-0.5198484014954D+02 +-0.5198465673351D+02-0.5198447109769D+02-0.5198428321519D+02-0.5198409305883D+02 +-0.5198390060104D+02-0.5198370581396D+02-0.5198350866939D+02-0.5198330913876D+02 +-0.5198310719319D+02-0.5198290280341D+02-0.5198269593983D+02-0.5198248657249D+02 +-0.5198227467106D+02-0.5198206020484D+02-0.5198184314277D+02-0.5198162345340D+02 +-0.5198140110492D+02-0.5198117606510D+02-0.5198094830136D+02-0.5198071778068D+02 +-0.5198048446968D+02-0.5198024833454D+02-0.5198000934107D+02-0.5197976745462D+02 +-0.5197952264015D+02-0.5197927486220D+02-0.5197902408485D+02-0.5197877027176D+02 +-0.5197851338615D+02-0.5197825339081D+02-0.5197799024804D+02-0.5197772391971D+02 +-0.5197745436723D+02-0.5197718155151D+02-0.5197690543304D+02-0.5197662597177D+02 +-0.5197634312720D+02-0.5197605685833D+02-0.5197576712367D+02-0.5197547388122D+02 +-0.5197517708846D+02-0.5197487670236D+02-0.5197457267938D+02-0.5197426497542D+02 +-0.5197395354589D+02-0.5197363834563D+02-0.5197331932893D+02-0.5197299644952D+02 +-0.5197266966059D+02-0.5197233891476D+02-0.5197200416404D+02-0.5197166535990D+02 +-0.5197132245319D+02-0.5197097539418D+02-0.5197062413252D+02-0.5197026861727D+02 +-0.5196990879687D+02-0.5196954461909D+02-0.5196917603112D+02-0.5196880297948D+02 +-0.5196842541005D+02-0.5196804326804D+02-0.5196765649801D+02-0.5196726504383D+02 +-0.5196686884871D+02-0.5196646785514D+02-0.5196606200494D+02-0.5196565123919D+02 +-0.5196523549829D+02-0.5196481472189D+02-0.5196438884890D+02-0.5196395781753D+02 +-0.5196352156518D+02-0.5196308002855D+02-0.5196263314350D+02-0.5196218084518D+02 +-0.5196172306789D+02-0.5196125974518D+02-0.5196079080977D+02-0.5196031619354D+02 +-0.5195983582758D+02-0.5195934964214D+02-0.5195885756657D+02-0.5195835952942D+02 +-0.5195785545834D+02-0.5195734528011D+02-0.5195682892060D+02-0.5195630630481D+02 +-0.5195577735679D+02-0.5195524199969D+02-0.5195470015573D+02-0.5195415174616D+02 +-0.5195359669127D+02-0.5195303491041D+02-0.5195246632192D+02-0.5195189084316D+02 +-0.5195130839046D+02-0.5195071887917D+02-0.5195012222358D+02-0.5194951833693D+02 +-0.5194890713143D+02-0.5194828851819D+02-0.5194766240726D+02-0.5194702870759D+02 +-0.5194638732701D+02-0.5194573817222D+02-0.5194508114882D+02-0.5194441616121D+02 +-0.5194374311266D+02-0.5194306190525D+02-0.5194237243986D+02-0.5194167461616D+02 +-0.5194096833262D+02-0.5194025348643D+02-0.5193952997356D+02-0.5193879768871D+02 +-0.5193805652527D+02-0.5193730637535D+02-0.5193654712973D+02-0.5193577867788D+02 +-0.5193500090790D+02-0.5193421370652D+02-0.5193341695911D+02-0.5193261054963D+02 +-0.5193179436061D+02-0.5193096827316D+02-0.5193013216694D+02-0.5192928592013D+02 +-0.5192842940944D+02-0.5192756251004D+02-0.5192668509561D+02-0.5192579703828D+02 +-0.5192489820860D+02-0.5192398847556D+02-0.5192306770652D+02-0.5192213576726D+02 +-0.5192119252189D+02-0.5192023783287D+02-0.5191927156096D+02-0.5191829356524D+02 +-0.5191730370307D+02-0.5191630183005D+02-0.5191528780001D+02-0.5191426146503D+02 +-0.5191322267532D+02-0.5191217127930D+02-0.5191110712354D+02-0.5191003005272D+02 +-0.5190893990959D+02-0.5190783653503D+02-0.5190671976795D+02-0.5190558944528D+02 +-0.5190444540195D+02-0.5190328747089D+02-0.5190211548297D+02-0.5190092926700D+02 +-0.5189972864968D+02-0.5189851345560D+02-0.5189728350719D+02-0.5189603862472D+02 +-0.5189477862625D+02-0.5189350332759D+02-0.5189221254235D+02-0.5189090608179D+02 +-0.5188958375491D+02-0.5188824536834D+02-0.5188689072635D+02-0.5188551963080D+02 +-0.5188413188114D+02-0.5188272727435D+02-0.5188130560492D+02-0.5187986666482D+02 +-0.5187841024347D+02-0.5187693612772D+02-0.5187544410178D+02-0.5187393394724D+02 +-0.5187240544300D+02-0.5187085836524D+02-0.5186929248740D+02-0.5186770758014D+02 +-0.5186610341132D+02-0.5186447974591D+02-0.5186283634606D+02-0.5186117297093D+02 +-0.5185948937678D+02-0.5185778531685D+02-0.5185606054135D+02-0.5185431479744D+02 +-0.5185254782916D+02-0.5185075937741D+02-0.5184894917991D+02-0.5184711697117D+02 +-0.5184526248242D+02-0.5184338544160D+02-0.5184148557330D+02-0.5183956259875D+02 +-0.5183761623572D+02-0.5183564619854D+02-0.5183365219802D+02-0.5183163394142D+02 +-0.5182959113240D+02-0.5182752347098D+02-0.5182543065350D+02-0.5182331237255D+02 +-0.5182116831697D+02-0.5181899817174D+02-0.5181680161800D+02-0.5181457833297D+02 +-0.5181232798987D+02-0.5181005025795D+02-0.5180774480235D+02-0.5180541128413D+02 +-0.5180304936016D+02-0.5180065868310D+02-0.5179823890134D+02-0.5179578965895D+02 +-0.5179331059564D+02-0.5179080134665D+02-0.5178826154277D+02-0.5178569081025D+02 +-0.5178308877073D+02-0.5178045504121D+02-0.5177778923399D+02-0.5177509095659D+02 +-0.5177235981171D+02-0.5176959539717D+02-0.5176679730585D+02-0.5176396512563D+02 +-0.5176109843930D+02-0.5175819682457D+02-0.5175525985390D+02-0.5175228709457D+02 +-0.5174927810849D+02-0.5174623245221D+02-0.5174314967682D+02-0.5174002932792D+02 +-0.5173687094551D+02-0.5173367406395D+02-0.5173043821187D+02-0.5172716291215D+02 +-0.5172384768177D+02-0.5172049203182D+02-0.5171709546736D+02-0.5171365748739D+02 +-0.5171017758479D+02-0.5170665524617D+02-0.5170308995189D+02-0.5169948117592D+02 +-0.5169582838578D+02-0.5169213104249D+02-0.5168838860043D+02-0.5168460050732D+02 +-0.5168076620412D+02-0.5167688512494D+02-0.5167295669696D+02-0.5166898034036D+02 +-0.5166495546822D+02-0.5166088148646D+02-0.5165675779371D+02-0.5165258378128D+02 +-0.5164835883303D+02-0.5164408232529D+02-0.5163975362681D+02-0.5163537209858D+02 +-0.5163093709386D+02-0.5162644795799D+02-0.5162190402831D+02-0.5161730463415D+02 +-0.5161264909661D+02-0.5160793672858D+02-0.5160316683457D+02-0.5159833871062D+02 +-0.5159345164422D+02-0.5158850491424D+02-0.5158349779076D+02-0.5157842953502D+02 +-0.5157329939929D+02-0.5156810662682D+02-0.5156285045165D+02-0.5155753009857D+02 +-0.5155214478300D+02-0.5154669371088D+02-0.5154117607855D+02-0.5153559107266D+02 +-0.5152993787006D+02-0.5152421563767D+02-0.5151842353238D+02-0.5151256070096D+02 +-0.5150662627991D+02-0.5150061939535D+02-0.5149453916296D+02-0.5148838468777D+02 +-0.5148215506412D+02-0.5147584937554D+02-0.5146946669454D+02-0.5146300608264D+02 +-0.5145646659012D+02-0.5144984725596D+02-0.5144314710771D+02-0.5143636516137D+02 +-0.5142950042123D+02-0.5142255187982D+02-0.5141551851771D+02-0.5140839930344D+02 +-0.5140119319335D+02-0.5139389913149D+02-0.5138651604948D+02-0.5137904286634D+02 +-0.5137147848843D+02-0.5136382180931D+02-0.5135607170955D+02-0.5134822705665D+02 +-0.5134028670491D+02-0.5133224949527D+02-0.5132411425521D+02-0.5131587979859D+02 +-0.5130754492555D+02-0.5129910842232D+02-0.5129056906116D+02-0.5128192560017D+02 +-0.5127317678315D+02-0.5126432133956D+02-0.5125535798425D+02-0.5124628541740D+02 +-0.5123710232443D+02-0.5122780737574D+02-0.5121839922671D+02-0.5120887651745D+02 +-0.5119923787276D+02-0.5118948190193D+02-0.5117960719865D+02-0.5116961234085D+02 +-0.5115949589056D+02-0.5114925639380D+02-0.5113889238044D+02-0.5112840236408D+02 +-0.5111778484188D+02-0.5110703829447D+02-0.5109616118579D+02-0.5108515196301D+02 +-0.5107400905631D+02-0.5106273087889D+02-0.5105131582667D+02-0.5103976227836D+02 +-0.5102806859514D+02-0.5101623312071D+02-0.5100425418105D+02-0.5099213008436D+02 +-0.5097985912091D+02-0.5096743956297D+02-0.5095486966464D+02-0.5094214766176D+02 +-0.5092927177183D+02-0.5091624019384D+02-0.5090305110822D+02-0.5088970267672D+02 +-0.5087619304230D+02-0.5086252032900D+02-0.5084868264193D+02-0.5083467806710D+02 +-0.5082050467136D+02-0.5080616050232D+02-0.5079164358822D+02-0.5077695193792D+02 +-0.5076208354076D+02-0.5074703636655D+02-0.5073180836542D+02-0.5071639746782D+02 +-0.5070080158445D+02-0.5068501860613D+02-0.5066904640389D+02-0.5065288282874D+02 +-0.5063652571181D+02-0.5061997286414D+02-0.5060322207678D+02-0.5058627112067D+02 +-0.5056911774669D+02-0.5055175968555D+02-0.5053419464788D+02-0.5051642032411D+02 +-0.5049843438458D+02-0.5048023447945D+02-0.5046181823877D+02-0.5044318327247D+02 +-0.5042432717038D+02-0.5040524750226D+02-0.5038594181787D+02-0.5036640764694D+02 +-0.5034664249930D+02-0.5032664386488D+02-0.5030640921379D+02-0.5028593599640D+02 +-0.5026522164341D+02-0.5024426356594D+02-0.5022305915564D+02-0.5020160578474D+02 +-0.5017990080623D+02-0.5015794155393D+02-0.5013572534263D+02-0.5011324946826D+02 +-0.5009051120796D+02-0.5006750782030D+02-0.5004423654542D+02-0.5002069460521D+02 +-0.4999687920344D+02-0.4997278752603D+02-0.4994841674120D+02-0.4992376399966D+02 +-0.4989882643488D+02-0.4987360116327D+02-0.4984808528443D+02-0.4982227588141D+02 +-0.4979617002094D+02-0.4976976475371D+02-0.4974305711462D+02-0.4971604412309D+02 +-0.4968872278335D+02-0.4966109008469D+02-0.4963314300185D+02-0.4960487849528D+02 +-0.4957629351145D+02-0.4954738498327D+02-0.4951814983035D+02-0.4948858495939D+02 +-0.4945868726453D+02-0.4942845362775D+02-0.4939788091919D+02-0.4936696599757D+02 +-0.4933570571061D+02-0.4930409689534D+02-0.4927213637859D+02-0.4923982097740D+02 +-0.4920714749935D+02-0.4917411274309D+02-0.4914071349870D+02-0.4910694654815D+02 +-0.4907280866573D+02-0.4903829661848D+02-0.4900340716666D+02-0.4896813706420D+02 +-0.4893248305909D+02-0.4889644189392D+02-0.4886001030623D+02-0.4882318502909D+02 +-0.4878596279141D+02-0.4874834031849D+02-0.4871031433244D+02-0.4867188155262D+02 +-0.4863303869609D+02-0.4859378247804D+02-0.4855410961222D+02-0.4851401681140D+02 +-0.4847350078774D+02-0.4843255825325D+02-0.4839118592018D+02-0.4834938050138D+02 +-0.4830713871075D+02-0.4826445726356D+02-0.4822133287682D+02-0.4817776226967D+02 +-0.4813374216365D+02-0.4808926928306D+02-0.4804434035526D+02-0.4799895211091D+02 +-0.4795310128431D+02-0.4790678461358D+02-0.4785999884093D+02-0.4781274071282D+02 +-0.4776500698020D+02-0.4771679439861D+02-0.4766809972836D+02-0.4761891973461D+02 +-0.4756925118748D+02-0.4751909086208D+02-0.4746843553857D+02-0.4741728200213D+02 +-0.4736562704295D+02-0.4731346745620D+02-0.4726080004188D+02-0.4720762160479D+02 +-0.4715392895431D+02-0.4709971890425D+02-0.4704498827268D+02-0.4698973388163D+02 +-0.4693395255690D+02-0.4687764112767D+02-0.4682079642628D+02-0.4676341528777D+02 +-0.4670549454962D+02-0.4664703105122D+02-0.4658802163351D+02-0.4652846313853D+02 +-0.4646835240891D+02-0.4640768628735D+02-0.4634646161617D+02-0.4628467523671D+02 +-0.4622232398885D+02-0.4615940471037D+02-0.4609591423645D+02-0.4603184939910D+02 +-0.4596720702657D+02-0.4590198394276D+02-0.4583617696675D+02-0.4576978291218D+02 +-0.4570279858676D+02-0.4563522079176D+02-0.4556704632159D+02-0.4549827196328D+02 +-0.4542889449617D+02-0.4535891069156D+02-0.4528831731237D+02-0.4521711111299D+02 +-0.4514528883912D+02-0.4507284722768D+02-0.4499978300686D+02-0.4492609289624D+02 +-0.4485177360700D+02-0.4477682184233D+02-0.4470123429783D+02-0.4462500766219D+02 +-0.4454813861790D+02-0.4447062384219D+02-0.4439246000814D+02-0.4431364378589D+02 +-0.4423417184413D+02-0.4415404085174D+02-0.4407324747964D+02-0.4399178840285D+02 +-0.4390966030283D+02-0.4382685986996D+02-0.4374338380636D+02-0.4365922882888D+02 +-0.4357439167239D+02-0.4348886909331D+02-0.4340265787340D+02-0.4331575482384D+02 +-0.4322815678953D+02-0.4313986065369D+02-0.4305086334268D+02-0.4296116183110D+02 +-0.4287075314713D+02-0.4277963437808D+02-0.4268780267613D+02-0.4259525526436D+02 +-0.4250198944278D+02-0.4240800259471D+02-0.4231329219311D+02-0.4221785580702D+02 +-0.4212169110814D+02-0.4202479587724D+02-0.4192716801066D+02-0.4182880552657D+02 +-0.4172970657123D+02-0.4162986942478D+02-0.4152929250699D+02-0.4142797438248D+02 +-0.4132591376546D+02-0.4122310952415D+02-0.4111956068435D+02-0.4101526643252D+02 +-0.4091022611799D+02-0.4080443925436D+02-0.4069790551997D+02-0.4059062475744D+02 +-0.4048259697200D+02-0.4037382232884D+02-0.4026430114924D+02-0.4015403390548D+02 +-0.4004302121449D+02-0.3993126383031D+02-0.3981876263529D+02-0.3970551863000D+02 +-0.3959153292214D+02-0.3947680671418D+02-0.3936134129010D+02-0.3924513800125D+02 +-0.3912819825140D+02-0.3901052348125D+02-0.3889211515259D+02-0.3877297473220D+02 +-0.3865310367583D+02-0.3853250341248D+02-0.3841117532917D+02-0.3828912075654D+02 +-0.3816634095549D+02-0.3804283710513D+02-0.3791861029232D+02-0.3779366150300D+02 +-0.3766799161555D+02-0.3754160139636D+02-0.3741449149782D+02-0.3728666245883D+02 +-0.3715811470790D+02-0.3702884856900D+02-0.3689886427010D+02-0.3676816195438D+02 +-0.3663674169408D+02-0.3650460350690D+02-0.3637174737474D+02-0.3623817326473D+02 +-0.3610388115218D+02-0.3596887104531D+02-0.3583314301154D+02-0.3569669720495D+02 +-0.3555953389464D+02-0.3542165349386D+02-0.3528305658922D+02-0.3514374397011D+02 +-0.3500371665774D+02-0.3486297593358D+02-0.3472152336690D+02-0.3457936084122D+02 +-0.3443649057928D+02-0.3429291516643D+02-0.3414863757211D+02-0.3400366116934D+02 +-0.3385798975190D+02-0.3371162754922D+02-0.3356457923876D+02-0.3341684995570D+02 +-0.3326844530007D+02-0.3311937134098D+02-0.3296963461820D+02-0.3281924214079D+02 +-0.3266820138293D+02-0.3251652027694D+02-0.3236420720350D+02-0.3221127097903D+02 +-0.3205772084042D+02-0.3190356642710D+02-0.3174881776049D+02-0.3159348522098D+02 +-0.3143757952257D+02-0.3128111168511D+02-0.3112409300454D+02-0.3096653502093D+02 +-0.3080844948479D+02-0.3064984832153D+02-0.3049074359439D+02-0.3033114746593D+02 +-0.3017107215833D+02-0.3001052991254D+02-0.2984953294675D+02-0.2968809341400D+02 +-0.2952622335948D+02-0.2936393467762D+02-0.2920123906907D+02-0.2903814799805D+02 +-0.2887467265011D+02-0.2871082389066D+02-0.2854661222446D+02-0.2838204775647D+02 +-0.2821714015409D+02-0.2805189861135D+02-0.2788633181514D+02-0.2772044791378D+02 +-0.2755425448842D+02-0.2738775852723D+02-0.2722096640307D+02-0.2705388385454D+02 +-0.2688651597109D+02-0.2671886718221D+02-0.2655094125117D+02-0.2638274127348D+02 +-0.2621426968047D+02-0.2604552824823D+02-0.2587651811214D+02-0.2570723978730D+02 +-0.2553769319514D+02-0.2536787769632D+02-0.2519779213021D+02-0.2502743486110D+02 +-0.2485680383129D+02-0.2468589662112D+02-0.2451471051601D+02-0.2434324258050D+02 +-0.2417148973924D+02-0.2399944886481D+02-0.2382711687194D+02-0.2365449081810D+02 +-0.2348156800981D+02-0.2330834611404D+02-0.2313482327422D+02-0.2296099822964D+02 +-0.2278687043744D+02-0.2261244019567D+02-0.2243770876615D+02-0.2226267849517D+02 +-0.2208735293014D+02-0.2191173693001D+02-0.2173583676674D+02-0.2155966021537D+02 +-0.2138321662948D+02-0.2120651699903D+02-0.2102957398727D+02-0.2085240194340D+02 +-0.2067501688787D+02-0.2049743646710D+02-0.2031967987514D+02-0.2014176773999D+02 +-0.1996372197331D+02-0.1978556558301D+02-0.1960732244950D+02-0.1942901706755D+02 +-0.1925067425750D+02-0.1907231885074D+02-0.1889397535633D+02-0.1871566761696D+02 +-0.1853741846374D+02-0.1835924938052D+02-0.1818118018868D+02-0.1800322876380D+02 +-0.1782541079491D+02-0.1764773959582D+02-0.1747022597686D+02-0.1729287818264D+02 +-0.1711570189939D+02-0.1693870033244D+02-0.1676187435187D+02-0.1658522270158D+02 +-0.1640874226459D+02-0.1623242837596D+02-0.1605627517269D+02-0.1588027596970D+02 +-0.1570442365062D+02-0.1552871106216D+02-0.1535313140208D+02-0.1517767859145D+02 +-0.1500234762341D+02-0.1482713488228D+02-0.1465203842815D+02-0.1447705824363D+02 +-0.1430219644106D+02-0.1412745742929D+02-0.1395284804054D+02-0.1377837761854D+02 +-0.1360405806987D+02-0.1342990388081D+02-0.1325593210249D+02-0.1308216230731D+02 +-0.1290861651951D+02-0.1273531912305D+02-0.1256229674959D+02-0.1238957814960D+02 +-0.1221719404907D+02-0.1204517699438D+02-0.1187356118783D+02-0.1170238231558D+02 +-0.1153167737042D+02-0.1136148447069D+02-0.1119184267735D+02-0.1102279181034D+02 +-0.1085437226576D+02-0.1068662483495D+02-0.1051959052659D+02-0.1035331039265D+02 +-0.1018782535928D+02-0.1002317606321D+02-0.9859402694342D+01-0.9696544845323D+01 +-0.9534641368482D+01-0.9373730240659D+01-0.9213848436346D+01-0.9055031809511D+01 +-0.8897314984394D+01-0.8740731255549D+01-0.8585312497336D+01-0.8431089083029D+01 +-0.8278089813661D+01-0.8126341856676D+01-0.7975870694439D+01-0.7826700082584D+01 +-0.7678852018171D+01-0.7532346717566D+01-0.7387202603932D+01-0.7243436304187D+01 +-0.7101062655233D+01-0.6960094719270D+01-0.6820543807924D+01-0.6682419514939D+01 +-0.6545729757123D+01-0.6410480823229D+01-0.6276677430423D+01-0.6144322787958D+01 +-0.6013418667669D+01-0.5883965480867D+01-0.5755962361193D+01-0.5629407252975D+01 +-0.5504297004604D+01-0.5380627466436D+01-0.5258393592702D+01-0.5137589546863D+01 +-0.5018208809882D+01-0.4900244290793D+01-0.4783688438971D+01-0.4668533357470D+01 +-0.4554770916754D+01-0.4442392868124D+01-0.4331390956131D+01-0.4221757029192D+01 +-0.4113483147635D+01-0.4006561688322D+01-0.3900985445011D+01-0.3796747723533D+01 +-0.3693842430876D+01-0.3592264157211D+01-0.3492008249906D+01-0.3393070878541D+01 +-0.3295449089976D+01-0.3199140852531D+01-0.3104145088414D+01-0.3010461693592D+01 +-0.2918091544431D+01-0.2827036490592D+01-0.2737299333835D+01-0.2648883792669D+01 +-0.2561794453010D+01-0.2476036705393D+01-0.2391616669610D+01-0.2308541108029D+01 +-0.2226817329318D+01-0.2146453084634D+01-0.2067456458802D+01-0.1989835759339D+01 +-0.1913599406514D+01-0.1838755827812D+01-0.1765313360391D+01-0.1693280165020D+01 +-0.1622664154978D+01-0.1553472943063D+01-0.1485713809518D+01-0.1419393693186D+01 +-0.1354519207570D+01-0.1291096682842D+01-0.1229132234097D+01-0.1168631855453D+01 +-0.1109601538882D+01-0.1052047416050D+01-0.9959759208814D+00-0.9413939701484D+00 +-0.8883091590719D+00-0.8367299687430D+00-0.7866659821253D+00-0.7381281054637D+00 +-0.6911287920896D+00-0.6456822658698D+00-0.6018047418553D+00-0.5595146420441D+00 +-0.5188328045500D+00-0.4797826848498D+00-0.4423905481512D+00-0.4066856522662D+00 +-0.3727004206897D+00-0.3404706058472D+00-0.3100354427093D+00-0.2814377931599D+00 +-0.2547240189175D+00 + 0.0000000000000D+00 + 1012 0.2770741520224D+01 + 0.2150927949039D-04 0.2202124536575D-04 0.2254539478646D-04 0.2308201760180D-04 + 0.2363141055333D-04 0.2419387743865D-04 0.2476972927906D-04 0.2535928449121D-04 + 0.2596286906285D-04 0.2658081673262D-04 0.2721346917432D-04 0.2786117618535D-04 + 0.2852429587973D-04 0.2920319488569D-04 0.2989824854795D-04 0.3060984113473D-04 + 0.3133836604977D-04 0.3208422604934D-04 0.3284783346437D-04 0.3362961042788D-04 + 0.3442998910781D-04 0.3524941194536D-04 0.3608833189898D-04 0.3694721269416D-04 + 0.3782652907911D-04 0.3872676708658D-04 0.3964842430179D-04 0.4059201013679D-04 + 0.4155804611131D-04 0.4254706614023D-04 0.4355961682789D-04 0.4459625776943D-04 + 0.4565756185917D-04 0.4674411560639D-04 0.4785651945856D-04 0.4899538813222D-04 + 0.5016135095172D-04 0.5135505219602D-04 0.5257715145361D-04 0.5382832398596D-04 + 0.5510926109951D-04 0.5642067052648D-04 0.5776327681476D-04 0.5913782172693D-04 + 0.6054506464885D-04 0.6198578300785D-04 0.6346077270088D-04 0.6497084853274D-04 + 0.6651684466474D-04 0.6809961507398D-04 0.6972003402351D-04 0.7137899654355D-04 + 0.7307741892426D-04 0.7481623921999D-04 0.7659641776564D-04 0.7841893770513D-04 + 0.8028480553242D-04 0.8219505164534D-04 0.8415073091254D-04 0.8615292325379D-04 + 0.8820273423416D-04 0.9030129567206D-04 0.9244976626185D-04 0.9464933221109D-04 + 0.9690120789284D-04 0.9920663651351D-04 0.1015668907964D-03 0.1039832736813D-03 + 0.1064571190411D-03 0.1089897924148D-03 0.1115826917580D-03 0.1142372482113D-03 + 0.1169549268870D-03 0.1197372276738D-03 0.1225856860613D-03 0.1255018739831D-03 + 0.1284874006808D-03 0.1315439135877D-03 0.1346730992336D-03 0.1378766841712D-03 + 0.1411564359238D-03 0.1445141639563D-03 0.1479517206680D-03 0.1514710024102D-03 + 0.1550739505263D-03 0.1587625524179D-03 0.1625388426349D-03 0.1664049039925D-03 + 0.1703628687133D-03 0.1744149195974D-03 0.1785632912194D-03 0.1828102711544D-03 + 0.1871582012321D-03 0.1916094788209D-03 0.1961665581427D-03 0.2008319516176D-03 + 0.2056082312418D-03 0.2104980299966D-03 0.2155040432913D-03 0.2206290304405D-03 + 0.2258758161753D-03 0.2312472921908D-03 0.2367464187300D-03 0.2423762262044D-03 + 0.2481398168542D-03 0.2540403664457D-03 0.2600811260106D-03 0.2662654236245D-03 + 0.2725966662290D-03 0.2790783414953D-03 0.2857140197324D-03 0.2925073558401D-03 + 0.2994620913080D-03 0.3065820562611D-03 0.3138711715547D-03 0.3213334509168D-03 + 0.3289730031429D-03 0.3367940343406D-03 0.3448008502286D-03 0.3529978584881D-03 + 0.3613895711713D-03 0.3699806071650D-03 0.3787756947128D-03 0.3877796739964D-03 + 0.3969974997780D-03 0.4064342441040D-03 0.4160950990725D-03 0.4259853796663D-03 + 0.4361105266519D-03 0.4464761095462D-03 0.4570878296540D-03 0.4679515231757D-03 + 0.4790731643881D-03 0.4904588689006D-03 0.5021148969868D-03 0.5140476569946D-03 + 0.5262637088364D-03 0.5387697675611D-03 0.5515727070097D-03 0.5646795635561D-03 + 0.5780975399370D-03 0.5918340091694D-03 0.6058965185620D-03 0.6202927938188D-03 + 0.6350307432396D-03 0.6501184620192D-03 0.6655642366457D-03 0.6813765494038D-03 + 0.6975640829812D-03 0.7141357251847D-03 0.7311005737650D-03 0.7484679413557D-03 + 0.7662473605260D-03 0.7844485889531D-03 0.8030816147148D-03 0.8221566617048D-03 + 0.8416841951763D-03 0.8616749274129D-03 0.8821398235337D-03 0.9030901074324D-03 + 0.9245372678559D-03 0.9464930646236D-03 0.9689695349932D-03 0.9919790001731D-03 + 0.1015534071988D-02 0.1039647659698D-02 0.1064332976981D-02 0.1089603549068D-02 + 0.1115473220057D-02 0.1141956160389D-02 0.1169066874495D-02 0.1196820208634D-02 + 0.1225231358897D-02 0.1254315879409D-02 0.1284089690715D-02 0.1314569088366D-02 + 0.1345770751696D-02 0.1377711752814D-02 0.1410409565795D-02 0.1443882076088D-02 + 0.1478147590144D-02 0.1513224845264D-02 0.1549133019674D-02 0.1585891742841D-02 + 0.1623521106018D-02 0.1662041673040D-02 0.1701474491365D-02 0.1741841103378D-02 + 0.1783163557945D-02 0.1825464422244D-02 0.1868766793867D-02 0.1913094313196D-02 + 0.1958471176071D-02 0.2004922146751D-02 0.2052472571166D-02 0.2101148390486D-02 + 0.2150976154989D-02 0.2201983038264D-02 0.2254196851731D-02 0.2307646059493D-02 + 0.2362359793542D-02 0.2418367869301D-02 0.2475700801533D-02 0.2534389820612D-02 + 0.2594466889165D-02 0.2655964719104D-02 0.2718916789042D-02 0.2783357362106D-02 + 0.2849321504172D-02 0.2916845102501D-02 0.2985964884814D-02 0.3056718438800D-02 + 0.3129144232066D-02 0.3203281632551D-02 0.3279170929405D-02 0.3356853354336D-02 + 0.3436371103460D-02 0.3517767359634D-02 0.3601086315312D-02 0.3686373195913D-02 + 0.3773674283724D-02 0.3863036942351D-02 0.3954509641719D-02 0.4048141983652D-02 + 0.4143984728019D-02 0.4242089819491D-02 0.4342510414893D-02 0.4445300911185D-02 + 0.4550516974067D-02 0.4658215567249D-02 0.4768454982366D-02 0.4881294869584D-02 + 0.4996796268890D-02 0.5115021642093D-02 0.5236034905549D-02 0.5359901463622D-02 + 0.5486688242898D-02 0.5616463727181D-02 0.5749297993262D-02 0.5885262747508D-02 + 0.6024431363262D-02 0.6166878919093D-02 0.6312682237899D-02 0.6461919926891D-02 + 0.6614672418475D-02 0.6771022012045D-02 0.6931052916716D-02 0.7094851295016D-02 + 0.7262505307545D-02 0.7434105158642D-02 0.7609743143066D-02 0.7789513693721D-02 + 0.7973513430440D-02 0.8161841209859D-02 0.8354598176397D-02 0.8551887814376D-02 + 0.8753816001287D-02 0.8960491062250D-02 0.9172023825667D-02 0.9388527680122D-02 + 0.9610118632529D-02 0.9836915367568D-02 0.1006903930843D-01 0.1030661467892D-01 + 0.1054976856688D-01 0.1079863098909D-01 0.1105333495749D-01 0.1131401654696D-01 + 0.1158081496451D-01 0.1185387262003D-01 0.1213333519856D-01 0.1241935173418D-01 + 0.1271207468545D-01 0.1301166001257D-01 0.1331826725616D-01 0.1363205961778D-01 + 0.1395320404221D-01 0.1428187130150D-01 0.1461823608081D-01 0.1496247706623D-01 + 0.1531477703430D-01 0.1567532294367D-01 0.1604430602860D-01 0.1642192189452D-01 + 0.1680837061563D-01 0.1720385683464D-01 0.1760858986456D-01 0.1802278379280D-01 + 0.1844665758734D-01 0.1888043520531D-01 0.1932434570378D-01 0.1977862335297D-01 + 0.2024350775185D-01 0.2071924394615D-01 0.2120608254895D-01 0.2170427986376D-01 + 0.2221409801021D-01 0.2273580505238D-01 0.2326967512987D-01 0.2381598859160D-01 + 0.2437503213237D-01 0.2494709893234D-01 0.2553248879941D-01 0.2613150831454D-01 + 0.2674447098014D-01 0.2737169737147D-01 0.2801351529124D-01 0.2867025992742D-01 + 0.2934227401421D-01 0.3002990799646D-01 0.3073352019732D-01 0.3145347698951D-01 + 0.3219015296988D-01 0.3294393113773D-01 0.3371520307664D-01 0.3450436914006D-01 + 0.3531183864059D-01 0.3613803004319D-01 0.3698337116219D-01 0.3784829936233D-01 + 0.3873326176383D-01 0.3963871545150D-01 0.4056512768813D-01 0.4151297613205D-01 + 0.4248274905905D-01 0.4347494558865D-01 0.4449007591493D-01 0.4552866154180D-01 + 0.4659123552298D-01 0.4767834270657D-01 0.4879053998454D-01 0.4992839654695D-01 + 0.5109249414114D-01 0.5228342733595D-01 0.5350180379101D-01 0.5474824453121D-01 + 0.5602338422639D-01 0.5732787147645D-01 0.5866236910176D-01 0.6002755443915D-01 + 0.6142411964345D-01 0.6285277199472D-01 0.6431423421119D-01 0.6580924476805D-01 + 0.6733855822219D-01 0.6890294554290D-01 0.7050319444864D-01 0.7214010975008D-01 + 0.7381451369925D-01 0.7552724634520D-01 0.7727916589591D-01 0.7907114908690D-01 + 0.8090409155624D-01 0.8277890822643D-01 0.8469653369292D-01 0.8665792261951D-01 + 0.8866405014071D-01 0.9071591227111D-01 0.9281452632182D-01 0.9496093132410D-01 + 0.9715618846031D-01 0.9940138150208D-01 0.1016976172560D+00 0.1040460260169D+00 + 0.1064477620282D+00 0.1089040039508D+00 0.1114159553388D+00 0.1139848451236D+00 + 0.1166119281054D+00 0.1192984854532D+00 0.1220458252122D+00 0.1248552828197D+00 + 0.1277282216288D+00 0.1306660334408D+00 0.1336701390448D+00 0.1367419887670D+00 + 0.1398830630269D+00 0.1430948729031D+00 0.1463789607067D+00 0.1497369005636D+00 + 0.1531702990050D+00 0.1566807955666D+00 0.1602700633964D+00 0.1639398098711D+00 + 0.1676917772207D+00 0.1715277431623D+00 0.1754495215419D+00 0.1794589629856D+00 + 0.1835579555582D+00 0.1877484254317D+00 0.1920323375616D+00 0.1964116963718D+00 + 0.2008885464482D+00 0.2054649732406D+00 0.2101431037732D+00 0.2149251073635D+00 + 0.2198131963488D+00 0.2248096268222D+00 0.2299166993754D+00 0.2351367598503D+00 + 0.2404722000984D+00 0.2459254587480D+00 0.2514990219789D+00 0.2571954243047D+00 + 0.2630172493626D+00 0.2689671307106D+00 0.2750477526311D+00 0.2812618509418D+00 + 0.2876122138134D+00 0.2941016825931D+00 0.3007331526352D+00 0.3075095741362D+00 + 0.3144339529771D+00 0.3215093515700D+00 0.3287388897102D+00 0.3361257454325D+00 + 0.3436731558729D+00 0.3513844181328D+00 0.3592628901485D+00 0.3673119915621D+00 + 0.3755352045968D+00 0.3839360749336D+00 0.3925182125899D+00 0.4012852927993D+00 + 0.4102410568930D+00 0.4193893131804D+00 0.4287339378299D+00 0.4382788757486D+00 + 0.4480281414604D+00 0.4579858199819D+00 0.4681560676951D+00 0.4785431132164D+00 + 0.4891512582614D+00 0.4999848785043D+00 0.5110484244305D+00 0.5223464221834D+00 + 0.5338834744021D+00 0.5456642610510D+00 0.5576935402392D+00 0.5699761490289D+00 + 0.5825170042325D+00 0.5953211031952D+00 0.6083935245653D+00 0.6217394290472D+00 + 0.6353640601390D+00 0.6492727448516D+00 0.6634708944082D+00 0.6779640049238D+00 + 0.6927576580616D+00 0.7078575216668D+00 0.7232693503742D+00 0.7389989861895D+00 + 0.7550523590420D+00 0.7714354873073D+00 0.7881544782973D+00 0.8052155287175D+00 + 0.8226249250876D+00 0.8403890441249D+00 0.8585143530879D+00 0.8770074100784D+00 + 0.8958748642992D+00 0.9151234562658D+00 0.9347600179702D+00 0.9547914729931D+00 + 0.9752248365635D+00 0.9960672155622D+00 0.1017325808468D+01 0.1039007905241D+01 + 0.1061120887144D+01 0.1083672226499D+01 0.1106669486370D+01 0.1130120320176D+01 + 0.1154032471231D+01 0.1178413772204D+01 0.1203272144493D+01 0.1228615597523D+01 + 0.1254452227950D+01 0.1280790218774D+01 0.1307637838359D+01 0.1335003439353D+01 + 0.1362895457506D+01 0.1391322410385D+01 0.1420292895972D+01 0.1449815591159D+01 + 0.1479899250115D+01 0.1510552702537D+01 0.1541784851777D+01 0.1573604672833D+01 + 0.1606021210210D+01 0.1639043575644D+01 0.1672680945677D+01 0.1706942559091D+01 + 0.1741837714186D+01 0.1777375765901D+01 0.1813566122779D+01 0.1850418243757D+01 + 0.1887941634794D+01 0.1926145845317D+01 0.1965040464488D+01 0.2004635117287D+01 + 0.2044939460400D+01 0.2085963177919D+01 0.2127715976829D+01 0.2170207582300D+01 + 0.2213447732763D+01 0.2257446174769D+01 0.2302212657626D+01 0.2347756927812D+01 + 0.2394088723154D+01 0.2441217766767D+01 0.2489153760756D+01 0.2537906379665D+01 + 0.2587485263675D+01 0.2637900011547D+01 0.2689160173295D+01 0.2741275242598D+01 + 0.2794254648931D+01 0.2848107749430D+01 0.2902843820459D+01 0.2958472048904D+01 + 0.3015001523163D+01 0.3072441223848D+01 0.3130800014182D+01 0.3190086630094D+01 + 0.3250309670002D+01 0.3311477584285D+01 0.3373598664440D+01 0.3436681031917D+01 + 0.3500732626634D+01 0.3565761195166D+01 0.3631774278604D+01 0.3698779200090D+01 + 0.3766783052007D+01 0.3835792682854D+01 0.3905814683769D+01 0.3976855374728D+01 + 0.4048920790399D+01 0.4122016665671D+01 0.4196148420834D+01 0.4271321146438D+01 + 0.4347539587809D+01 0.4424808129241D+01 0.4503130777854D+01 0.4582511147131D+01 + 0.4662952440136D+01 0.4744457432406D+01 0.4827028454547D+01 0.4910667374509D+01 + 0.4995375579573D+01 0.5081153958042D+01 0.5168002880655D+01 0.5255922181721D+01 + 0.5344911139992D+01 0.5434968459290D+01 0.5526092248881D+01 0.5618280003639D+01 + 0.5711528583982D+01 0.5805834195616D+01 0.5901192369103D+01 0.5997597939257D+01 + 0.6095045024395D+01 0.6193527005472D+01 0.6293036505099D+01 0.6393565366487D+01 + 0.6495104632331D+01 0.6597644523660D+01 0.6701174418681D+01 0.6805682831645D+01 + 0.6911157391760D+01 0.7017584822191D+01 0.7124950919171D+01 0.7233240531258D+01 + 0.7342437538781D+01 0.7452524833500D+01 0.7563484298530D+01 0.7675296788562D+01 + 0.7787942110430D+01 0.7901399004058D+01 0.8015645123842D+01 0.8130657020509D+01 + 0.8246410123503D+01 0.8362878723950D+01 0.8480035958250D+01 0.8597853792358D+01 + 0.8716303006799D+01 0.8835353182487D+01 0.8954972687391D+01 0.9075128664130D+01 + 0.9195787018538D+01 0.9316912409273D+01 0.9438468238543D+01 0.9560416644000D+01 + 0.9682718491880D+01 0.9805333371460D+01 0.9928219590896D+01 0.1005133417453D+02 + 0.1017463286171D+02 0.1029807010722D+02 0.1042159908344D+02 0.1054517168417D+02 + 0.1066873853037D+02 0.1079224897780D+02 0.1091565112659D+02 0.1103889183301D+02 + 0.1116191672323D+02 0.1128467020944D+02 0.1140709550823D+02 0.1152913466133D+02 + 0.1165072855885D+02 0.1177181696506D+02 0.1189233854680D+02 0.1201223090454D+02 + 0.1213143060625D+02 0.1224987322407D+02 0.1236749337400D+02 0.1248422475837D+02 + 0.1260000021157D+02 0.1271475174875D+02 0.1282841061773D+02 0.1294090735413D+02 + 0.1305217183979D+02 0.1316213336451D+02 0.1327072069111D+02 0.1337786212400D+02 + 0.1348348558110D+02 0.1358751866928D+02 0.1368988876325D+02 0.1379052308804D+02 + 0.1388934880491D+02 0.1398629310084D+02 0.1408128328150D+02 0.1417424686776D+02 + 0.1426511169568D+02 0.1435380601989D+02 0.1444025862047D+02 0.1452439891313D+02 + 0.1460615706273D+02 0.1468546410000D+02 0.1476225204147D+02 0.1483645401237D+02 + 0.1490800437259D+02 0.1497683884540D+02 0.1504289464893D+02 0.1510611063019D+02 + 0.1516642740155D+02 0.1522378747941D+02 0.1527813542502D+02 0.1532941798703D+02 + 0.1537758424592D+02 0.1542258575964D+02 0.1546437671057D+02 0.1550291405346D+02 + 0.1553815766392D+02 0.1557007048740D+02 0.1559861868825D+02 0.1562377179849D+02 + 0.1564550286611D+02 0.1566378860245D+02 0.1567860952827D+02 0.1568995011828D+02 + 0.1569779894358D+02 0.1570214881171D+02 0.1570299690387D+02 0.1570034490889D+02 + 0.1569419915342D+02 0.1568457072811D+02 0.1567147560898D+02 0.1565493477391D+02 + 0.1563497431333D+02 0.1561162553504D+02 0.1558492506233D+02 0.1555491492507D+02 + 0.1552164264320D+02 0.1548516130217D+02 0.1544552961962D+02 0.1540281200312D+02 + 0.1535707859803D+02 0.1530840532536D+02 0.1525687390884D+02 0.1520257189079D+02 + 0.1514559263632D+02 0.1508603532531D+02 0.1502400493172D+02 0.1495961218971D+02 + 0.1489297354623D+02 0.1482421109950D+02 0.1475345252306D+02 0.1468083097499D+02 + 0.1460648499184D+02 0.1453055836709D+02 0.1445320001360D+02 0.1437456381003D+02 + 0.1429480843075D+02 0.1421409715909D+02 0.1413259768392D+02 0.1405048187912D+02 + 0.1396792556614D+02 0.1388510825940D+02 0.1380221289467D+02 0.1371942554036D+02 + 0.1363693509198D+02 0.1355493294972D+02 0.1347361267958D+02 0.1339316965818D+02 + 0.1331380070165D+02 0.1323570367897D+02 0.1315907711016D+02 0.1308411975004D+02 + 0.1301103015787D+02 0.1294000625373D+02 0.1287124486230D+02 0.1280494124477D+02 + 0.1274128861984D+02 0.1268047767460D+02 0.1262269606643D+02 0.1256812791682D+02 + 0.1251695329838D+02 0.1246934771604D+02 0.1242548158392D+02 0.1238551969900D+02 + 0.1234962071295D+02 0.1231793660373D+02 0.1229061214824D+02 0.1226778439767D+02 + 0.1224958215706D+02 0.1223612547078D+02 0.1222752511553D+02 0.1222388210258D+02 + 0.1222528719100D+02 0.1223182041366D+02 0.1224355061775D+02 0.1226053502171D+02 + 0.1228281879023D+02 0.1231043462935D+02 0.1234340240339D+02 0.1238172877543D+02 + 0.1242540687338D+02 0.1247441598324D+02 0.1252872127141D+02 0.1258827353770D+02 + 0.1265300900087D+02 0.1272284911822D+02 0.1279770044081D+02 0.1287745450601D+02 + 0.1296198776857D+02 0.1305116157186D+02 0.1314482216032D+02 0.1324280073454D+02 + 0.1334491354991D+02 0.1345096205988D+02 0.1356073310471D+02 0.1367399914649D+02 + 0.1379051855093D+02 0.1391003591655D+02 0.1403228245150D+02 0.1415697639825D+02 + 0.1428382350615D+02 0.1441251755180D+02 0.1454274090682D+02 0.1467416515265D+02 + 0.1480645174180D+02 0.1493925270450D+02 0.1507221140012D+02 0.1520496331175D+02 + 0.1533713688305D+02 0.1546835439544D+02 0.1559823288411D+02 0.1572638509088D+02 + 0.1585242045188D+02 0.1597594611769D+02 0.1609656800349D+02 0.1621389186673D+02 + 0.1632752440935D+02 0.1643707440175D+02 0.1654215382521D+02 0.1664237902974D+02 + 0.1673737190368D+02 0.1682676105166D+02 0.1691018297723D+02 0.1698728326633D+02 + 0.1705771776761D+02 0.1712115376582D+02 0.1717727114395D+02 0.1722576353007D+02 + 0.1726633942470D+02 0.1729872330429D+02 0.1732265669667D+02 0.1733789922408D+02 + 0.1734422960952D+02 0.1734144664198D+02 0.1732937009656D+02 0.1730784160492D+02 + 0.1727672547225D+02 0.1723590943644D+02 0.1718530536559D+02 0.1712484989008D+02 + 0.1705450496536D+02 0.1697425836203D+02 0.1688412407975D+02 0.1678414268193D+02 + 0.1667438154808D+02 0.1655493504124D+02 0.1642592458792D+02 0.1628749866833D+02 + 0.1613983271513D+02 0.1598312891883D+02 0.1581761593876D+02 0.1564354851859D+02 + 0.1546120700566D+02 0.1527089677411D+02 0.1507294755170D+02 0.1486771265109D+02 + 0.1465556810624D+02 0.1443691171558D+02 0.1421216199343D+02 0.1398175703206D+02 + 0.1374615327696D+02 0.1350582421831D+02 0.1326125900230D+02 0.1301296096613D+02 + 0.1276144610103D+02 0.1250724144826D+02 0.1225088343315D+02 0.1199291614280D+02 + 0.1173388955369D+02 0.1147435771520D+02 0.1121487689618D+02 0.1095600370143D+02 + 0.1069829316549D+02 0.1044229683153D+02 0.1018856082317D+02 0.9937623917321D+01 + 0.9690015626445D+01 0.9446254298643D+01 0.9206845244038D+01 0.8972278896087D+01 + 0.8743029016360D+01 0.8519550951297D+01 0.8302279949355D+01 0.8091629546790D+01 + 0.7887990030116D+01 0.7691726983014D+01 0.7503179925129D+01 0.7322661049902D+01 + 0.7150454068046D+01 0.6986813162918D+01 0.6831962063451D+01 0.6686093239819D+01 + 0.6549367226364D+01 0.6421912075717D+01 0.6303822947394D+01 0.6195161833447D+01 + 0.6095957423078D+01 0.6006205107394D+01 0.5925867124779D+01 0.5854872846611D+01 + 0.5793119202371D+01 0.5740471242429D+01 0.5696762836121D+01 0.5661797502031D+01 + 0.5635349366701D+01 0.5617164247353D+01 0.5606960853570D+01 0.5604432102259D+01 + 0.5609246539649D+01 0.5621049863505D+01 0.5639466538232D+01 0.5664101495024D+01 + 0.5694541908766D+01 0.5730359042993D+01 0.5771110153784D+01 0.5816340443192D+01 + 0.5865585052475D+01 0.5918371085180D+01 0.5974219649957D+01 0.6032647912832D+01 + 0.6093171148637D+01 0.6155304781260D+01 0.6218566402475D+01 0.6282477759234D+01 + 0.6346566699475D+01 0.6410369066815D+01 0.6473430534781D+01 0.6535308371644D+01 + 0.6595573127395D+01 0.6653810234872D+01 0.6709621517670D+01 0.6762626598041D+01 + 0.6812464198680D+01 0.6858793332986D+01 0.6901294379138D+01 0.6939670034070D+01 + 0.6973646144233D+01 0.7002972410830D+01 0.7027422967990D+01 0.7046796833200D+01 + 0.7060918230061D+01 0.7069636784259D+01 0.7072827594374D+01 0.7070391179926D+01 + 0.7062253309715D+01 0.7048364714231D+01 0.7028700686483D+01 0.7003260576238D+01 + 0.6972067183121D+01 0.6935166054562D+01 0.6892624694966D+01 0.6844531692843D+01 + 0.6790995772965D+01 0.6732144780827D+01 0.6668124606899D+01 0.6599098058289D+01 + 0.6525243685473D+01 0.6446754571799D+01 0.6363837093418D+01 0.6276709657188D+01 + 0.6185601423998D+01 0.6090751024726D+01 0.5992405275866D+01 0.5890817901556D+01 + 0.5786248268476D+01 0.5678960139726D+01 0.5569220453475D+01 0.5457298131760D+01 + 0.5343462924443D+01 0.5227984292928D+01 0.5111130337809D+01 0.4993166774192D+01 + 0.4874355958030D+01 0.4754955966341D+01 0.4635219733799D+01 0.4515394247714D+01 + 0.4395719803061D+01 0.4276429318764D+01 0.4157747716089D+01 0.4039891359594D+01 + 0.3923067560758D+01 0.3807474144035D+01 0.3693299074769D+01 0.3580720148118D+01 + 0.3469904737816D+01 0.3361009603367D+01 0.3254180754011D+01 0.3149553367571D+01 + 0.3047251762116D+01 0.2947389418162D+01 0.2850069049006D+01 0.2755382716614D+01 + 0.2663411990420D+01 0.2574228146230D+01 0.2487892402405D+01 0.2404456190400D+01 + 0.2323961456713D+01 0.2246440993268D+01 0.2171918793250D+01 0.2100410429420D+01 + 0.2031923451965D+01 0.1966457802972D+01 0.1904006244666D+01 0.1844554798640D+01 + 0.1788083193345D+01 0.1734565317240D+01 0.1683969675070D+01 0.1636259844862D+01 + 0.1591394933364D+01 0.1549330027746D+01 0.1510016641546D+01 0.1473403152964D+01 + 0.1439435233770D+01 0.1408056267219D+01 0.1379207753531D+01 0.1352829701650D+01 + 0.1328861006133D+01 0.1307239808175D+01 0.1287903839946D+01 0.1270790751526D+01 + 0.1255838419882D+01 0.1242985239474D+01 0.1232170394175D+01 0.1223334110328D+01 + 0.1216417890857D+01 0.1211364730456D+01 0.1208119311934D+01 0.1206628183910D+01 + 0.1206839920052D+01 0.1208705260142D+01 0.1212177233248D+01 0.1217211263310D+01 + 0.1223765257423D+01 0.1231799677111D+01 0.1241277592815D+01 0.1252164721788D+01 + 0.1264429449524D+01 0.1278042834732D+01 0.1292978597814D+01 0.1309213092627D+01 + 0.1326725261233D+01 0.1345496571135D+01 0.1365510934358D+01 0.1386754607532D+01 + 0.1409215426363D+01 0.1433003097507D+01 0.1458223277591D+01 0.1484860699421D+01 + 0.1512902583279D+01 0.1542338542721D+01 0.1573160498496D+01 0.1605362600812D+01 + 0.1638941160170D+01 0.1673894586973D+01 0.1710223340083D+01 0.1747929884514D+01 + 7 1012 + 1 0 -1 -511.89150 + 2 0 -1 -58.80097 + 2 1 1 -50.61290 + 2 1 -2 -49.69692 + 3 0 -1 -5.52718 + 3 1 1 -3.14309 + 3 1 -2 -3.03034 + 0.2123373461549D-04 0.2173914995400D-04 0.2225659296114D-04 0.2278634977738D-04 + 0.2332871334728D-04 0.2388398358121D-04 0.2445246752083D-04 0.2503447950857D-04 + 0.2563034136106D-04 0.2624038254674D-04 0.2686494036763D-04 0.2750436014548D-04 + 0.2815899541226D-04 0.2882920810522D-04 0.2951536876657D-04 0.3021785674791D-04 + 0.3093706041946D-04 0.3167337738432D-04 0.3242721469777D-04 0.3319898909177D-04 + 0.3398912720483D-04 0.3479806581728D-04 0.3562625209215D-04 0.3647414382175D-04 + 0.3734220968012D-04 0.3823092948144D-04 0.3914079444457D-04 0.4007230746391D-04 + 0.4102598338660D-04 0.4200234929636D-04 0.4300194480406D-04 0.4402532234512D-04 + 0.4507304748402D-04 0.4614569922601D-04 0.4724387033618D-04 0.4836816766617D-04 + 0.4951921248852D-04 0.5069764083903D-04 0.5190410386721D-04 0.5313926819498D-04 + 0.5440381628400D-04 0.5569844681152D-04 0.5702387505533D-04 0.5838083328767D-04 + 0.5977007117859D-04 0.6119235620880D-04 0.6264847409228D-04 0.6413922920902D-04 + 0.6566544504782D-04 0.6722796465978D-04 0.6882765112238D-04 0.7046538801462D-04 + 0.7214207990339D-04 0.7385865284136D-04 0.7561605487667D-04 0.7741525657465D-04 + 0.7925725155197D-04 0.8114305702331D-04 0.8307371436110D-04 0.8505028966841D-04 + 0.8707387436545D-04 0.8914558578994D-04 0.9126656781168D-04 0.9343799146165D-04 + 0.9566105557602D-04 0.9793698745538D-04 0.1002670435396D-03 0.1026525100984D-03 + 0.1050947039390D-03 0.1075949731294D-03 0.1101546977394D-03 0.1127752905997D-03 + 0.1154581980775D-03 0.1182049008719D-03 0.1210169148270D-03 0.1238957917652D-03 + 0.1268431203390D-03 0.1298605269045D-03 0.1329496764137D-03 0.1361122733297D-03 + 0.1393500625619D-03 0.1426648304247D-03 0.1460584056178D-03 0.1495326602303D-03 + 0.1530895107681D-03 0.1567309192056D-03 0.1604588940629D-03 0.1642754915072D-03 + 0.1681828164816D-03 0.1721830238593D-03 0.1762783196258D-03 0.1804709620887D-03 + 0.1847632631165D-03 0.1891575894056D-03 0.1936563637785D-03 0.1982620665115D-03 + 0.2029772366947D-03 0.2078044736231D-03 0.2127464382210D-03 0.2178058545005D-03 + 0.2229855110531D-03 0.2282882625778D-03 0.2337170314442D-03 0.2392748092933D-03 + 0.2449646586752D-03 0.2507897147258D-03 0.2567531868833D-03 0.2628583606444D-03 + 0.2691085993625D-03 0.2755073460880D-03 0.2820581254518D-03 0.2887645455935D-03 + 0.2956303001344D-03 0.3026591701977D-03 0.3098550264756D-03 0.3172218313454D-03 + 0.3247636410353D-03 0.3324846078408D-03 0.3403889823939D-03 0.3484811159850D-03 + 0.3567654629401D-03 0.3652465830528D-03 0.3739291440747D-03 0.3828179242637D-03 + 0.3919178149916D-03 0.4012338234146D-03 0.4107710752045D-03 0.4205348173457D-03 + 0.4305304209971D-03 0.4407633844209D-03 0.4512393359813D-03 0.4619640372121D-03 + 0.4729433859575D-03 0.4841834195856D-03 0.4956903182785D-03 0.5074704083979D-03 + 0.5195301659314D-03 0.5318762200182D-03 0.5445153565579D-03 0.5574545219044D-03 + 0.5707008266453D-03 0.5842615494708D-03 0.5981441411326D-03 0.6123562284955D-03 + 0.6269056186847D-03 0.6418003033287D-03 0.6570484629028D-03 0.6726584711734D-03 + 0.6886388997468D-03 0.7049985227240D-03 0.7217463214642D-03 0.7388914894603D-03 + 0.7564434373277D-03 0.7744117979097D-03 0.7928064315026D-03 0.8116374312024D-03 + 0.8309151283763D-03 0.8506500982622D-03 0.8708531656989D-03 0.8915354109894D-03 + 0.9127081759015D-03 0.9343830698083D-03 0.9565719759715D-03 0.9792870579714D-03 + 0.1002540766287D-02 0.1026345845027D-02 0.1050715338824D-02 0.1075662599879D-02 + 0.1101201295181D-02 0.1127345413883D-02 0.1154109274864D-02 0.1181507534450D-02 + 0.1209555194328D-02 0.1238267609637D-02 0.1267660497252D-02 0.1297749944251D-02 + 0.1328552416593D-02 0.1360084767981D-02 0.1392364248945D-02 0.1425408516127D-02 + 0.1459235641785D-02 0.1493864123514D-02 0.1529312894196D-02 0.1565601332181D-02 + 0.1602749271697D-02 0.1640777013510D-02 0.1679705335822D-02 0.1719555505429D-02 + 0.1760349289133D-02 0.1802108965417D-02 0.1844857336390D-02 0.1888617740010D-02 + 0.1933414062589D-02 0.1979270751585D-02 0.2026212828687D-02 0.2074265903209D-02 + 0.2123456185786D-02 0.2173810502385D-02 0.2225356308647D-02 0.2278121704551D-02 + 0.2332135449417D-02 0.2387426977257D-02 0.2444026412476D-02 0.2501964585936D-02 + 0.2561273051389D-02 0.2621984102285D-02 0.2684130788965D-02 0.2747746936258D-02 + 0.2812867161465D-02 0.2879526892772D-02 0.2947762388071D-02 0.3017610754222D-02 + 0.3089109966753D-02 0.3162298890003D-02 0.3237217297741D-02 0.3313905894238D-02 + 0.3392406335837D-02 0.3472761253004D-02 0.3555014272883D-02 0.3639210042377D-02 + 0.3725394251736D-02 0.3813613658698D-02 0.3903916113173D-02 0.3996350582488D-02 + 0.4090967177209D-02 0.4187817177547D-02 0.4286953060364D-02 0.4388428526794D-02 + 0.4492298530489D-02 0.4598619306504D-02 0.4707448400838D-02 0.4818844700646D-02 + 0.4932868465127D-02 0.5049581357120D-02 0.5169046475404D-02 0.5291328387739D-02 + 0.5416493164639D-02 0.5544608413917D-02 0.5675743316002D-02 0.5809968660057D-02 + 0.5947356880904D-02 0.6087982096781D-02 0.6231920147946D-02 0.6379248636155D-02 + 0.6530046965011D-02 0.6684396381234D-02 0.6842380016839D-02 0.7004082932273D-02 + 0.7169592160503D-02 0.7338996752102D-02 0.7512387821327D-02 0.7689858593235D-02 + 0.7871504451850D-02 0.8057422989391D-02 0.8247714056607D-02 0.8442479814225D-02 + 0.8641824785540D-02 0.8845855910175D-02 0.9054682599025D-02 0.9268416790430D-02 + 0.9487173007575D-02 0.9711068417172D-02 0.9940222889430D-02 0.1017475905935D-01 + 0.1041480238936D-01 0.1066048123337D-01 0.1091192690214D-01 0.1116927373022D-01 + 0.1143265914425D-01 0.1170222373276D-01 0.1197811131760D-01 0.1226046902681D-01 + 0.1254944736912D-01 0.1284520031015D-01 0.1314788535014D-01 0.1345766360348D-01 + 0.1377469987990D-01 0.1409916276750D-01 0.1443122471744D-01 0.1477106213063D-01 + 0.1511885544620D-01 0.1547478923187D-01 0.1583905227632D-01 0.1621183768351D-01 + 0.1659334296907D-01 0.1698377015868D-01 0.1738332588869D-01 0.1779222150874D-01 + 0.1821067318670D-01 0.1863890201578D-01 0.1907713412394D-01 0.1952560078568D-01 + 0.1998453853608D-01 0.2045418928739D-01 0.2093480044805D-01 0.2142662504416D-01 + 0.2192992184360D-01 0.2244495548276D-01 0.2297199659585D-01 0.2351132194704D-01 + 0.2406321456527D-01 0.2462796388197D-01 0.2520586587156D-01 0.2579722319499D-01 + 0.2640234534617D-01 0.2702154880148D-01 0.2765515717239D-01 0.2830350136121D-01 + 0.2896691972007D-01 0.2964575821319D-01 0.3034037058244D-01 0.3105111851634D-01 + 0.3177837182251D-01 0.3252250860359D-01 0.3328391543683D-01 0.3406298755727D-01 + 0.3486012904465D-01 0.3567575301409D-01 0.3651028181063D-01 0.3736414720771D-01 + 0.3823779060956D-01 0.3913166325773D-01 0.4004622644169D-01 0.4098195171364D-01 + 0.4193932110758D-01 0.4291882736274D-01 0.4392097415138D-01 0.4494627631115D-01 + 0.4599526008193D-01 0.4706846334735D-01 0.4816643588104D-01 0.4928973959763D-01 + 0.5043894880863D-01 0.5161465048329D-01 0.5281744451445D-01 0.5404794398948D-01 + 0.5530677546647D-01 0.5659457925562D-01 0.5791200970601D-01 0.5925973549779D-01 + 0.6063843993988D-01 0.6204882127328D-01 0.6349159298001D-01 0.6496748409788D-01 + 0.6647723954103D-01 0.6802162042643D-01 0.6960140440641D-01 0.7121738600725D-01 + 0.7287037697395D-01 0.7456120662128D-01 0.7629072219118D-01 0.7805978921657D-01 + 0.7986929189166D-01 0.8172013344892D-01 0.8361323654265D-01 0.8554954363940D-01 + 0.8753001741513D-01 0.8955564115940D-01 0.9162741918654D-01 0.9374637725383D-01 + 0.9591356298698D-01 0.9813004631275D-01 0.1003969198990D+00 0.1027152996019D+00 + 0.1050863249211D+00 0.1075111594618D+00 0.1099909914051D+00 0.1125270339855D+00 + 0.1151205259766D+00 0.1177727321842D+00 0.1204849439476D+00 0.1232584796489D+00 + 0.1260946852301D+00 0.1289949347182D+00 0.1319606307590D+00 0.1349932051583D+00 + 0.1380941194317D+00 0.1412648653632D+00 0.1445069655708D+00 0.1478219740820D+00 + 0.1512114769165D+00 0.1546770926778D+00 0.1582204731535D+00 0.1618433039236D+00 + 0.1655473049771D+00 0.1693342313383D+00 0.1732058737000D+00 0.1771640590662D+00 + 0.1812106514032D+00 0.1853475522988D+00 0.1895767016304D+00 0.1939000782413D+00 + 0.1983197006251D+00 0.2028376276193D+00 0.2074559591063D+00 0.2121768367234D+00 + 0.2170024445803D+00 0.2219350099852D+00 0.2269768041788D+00 0.2321301430764D+00 + 0.2373973880172D+00 0.2427809465221D+00 0.2482832730585D+00 0.2539068698131D+00 + 0.2596542874715D+00 0.2655281260047D+00 0.2715310354636D+00 0.2776657167793D+00 + 0.2839349225700D+00 0.2903414579550D+00 0.2968881813739D+00 0.3035780054119D+00 + 0.3104138976312D+00 0.3173988814070D+00 0.3245360367687D+00 0.3318285012460D+00 + 0.3392794707188D+00 0.3468922002717D+00 0.3546700050516D+00 0.3626162611285D+00 + 0.3707344063591D+00 0.3790279412529D+00 0.3875004298396D+00 0.3961555005386D+00 + 0.4049968470283D+00 0.4140282291162D+00 0.4232534736091D+00 0.4326764751811D+00 + 0.4423011972414D+00 0.4521316727988D+00 0.4621720053237D+00 0.4724263696067D+00 + 0.4828990126121D+00 0.4935942543268D+00 0.5045164886027D+00 0.5156701839924D+00 + 0.5270598845772D+00 0.5386902107861D+00 0.5505658602051D+00 0.5626916083760D+00 + 0.5750723095830D+00 0.5877128976270D+00 0.6006183865849D+00 0.6137938715547D+00 + 0.6272445293836D+00 0.6409756193782D+00 0.6549924839961D+00 0.6693005495166D+00 + 0.6839053266899D+00 0.6988124113627D+00 0.7140274850788D+00 0.7295563156538D+00 + 0.7454047577210D+00 0.7615787532478D+00 0.7780843320207D+00 0.7949276120969D+00 + 0.8121148002200D+00 0.8296521921997D+00 0.8475461732513D+00 0.8658032182945D+00 + 0.8844298922086D+00 0.9034328500427D+00 0.9228188371772D+00 0.9425946894360D+00 + 0.9627673331456D+00 0.9833437851400D+00 0.1004331152707D+01 0.1025736633476D+01 + 0.1047567515241D+01 0.1069831175720D+01 0.1092535082243D+01 0.1115686791375D+01 + 0.1139293948457D+01 0.1163364287075D+01 0.1187905628445D+01 0.1212925880722D+01 + 0.1238433038208D+01 0.1264435180485D+01 0.1290940471443D+01 0.1317957158220D+01 + 0.1345493570030D+01 0.1373558116898D+01 0.1402159288280D+01 0.1431305651569D+01 + 0.1461005850494D+01 0.1491268603389D+01 0.1522102701342D+01 0.1553517006218D+01 + 0.1585520448546D+01 0.1618122025271D+01 0.1651330797361D+01 0.1685155887276D+01 + 0.1719606476280D+01 0.1754691801602D+01 0.1790421153434D+01 0.1826803871767D+01 + 0.1863849343063D+01 0.1901566996742D+01 0.1939966301501D+01 0.1979056761446D+01 + 0.2018847912032D+01 0.2059349315815D+01 0.2100570557999D+01 0.2142521241790D+01 + 0.2185210983528D+01 0.2228649407614D+01 0.2272846141215D+01 0.2317810808747D+01 + 0.2363553026124D+01 0.2410082394775D+01 0.2457408495423D+01 0.2505540881617D+01 + 0.2554489073015D+01 0.2604262548407D+01 0.2654870738488D+01 0.2706323018355D+01 + 0.2758628699743D+01 0.2811797022979D+01 0.2865837148659D+01 0.2920758149043D+01 + 0.2976568999160D+01 0.3033278567615D+01 0.3090895607108D+01 0.3149428744640D+01 + 0.3208886471423D+01 0.3269277132479D+01 0.3330608915918D+01 0.3392889841912D+01 + 0.3456127751341D+01 0.3520330294118D+01 0.3585504917195D+01 0.3651658852234D+01 + 0.3718799102956D+01 0.3786932432154D+01 0.3856065348377D+01 0.3926204092282D+01 + 0.3997354622651D+01 0.4069522602076D+01 0.4142713382310D+01 0.4216931989288D+01 + 0.4292183107814D+01 0.4368471065927D+01 0.4445799818928D+01 0.4524172933100D+01 + 0.4603593569097D+01 0.4684064465021D+01 0.4765587919192D+01 0.4848165772611D+01 + 0.4931799391130D+01 0.5016489647323D+01 0.5102236902085D+01 0.5189040985952D+01 + 0.5276901180158D+01 0.5365816197444D+01 0.5455784162617D+01 0.5546802592894D+01 + 0.5638868378017D+01 0.5731977760181D+01 0.5826126313769D+01 0.5921308924927D+01 + 0.6017519770983D+01 0.6114752299744D+01 0.6212999208681D+01 0.6312252424025D+01 + 0.6412503079799D+01 0.6513741496818D+01 0.6615957161666D+01 0.6719138705689D+01 + 0.6823273884037D+01 0.6928349554769D+01 0.7034351658067D+01 0.7141265195588D+01 + 0.7249074209985D+01 0.7357761764637D+01 0.7467309923627D+01 0.7577699732003D+01 + 0.7688911196366D+01 0.7800923265826D+01 0.7913713813378D+01 0.8027259617727D+01 + 0.8141536345630D+01 0.8256518534789D+01 0.8372179577355D+01 0.8488491704090D+01 + 0.8605425969248D+01 0.8722952236222D+01 0.8841039164025D+01 0.8959654194655D+01 + 0.9078763541413D+01 0.9198332178230D+01 0.9318323830066D+01 0.9438700964464D+01 + 0.9559424784293D+01 0.9680455221780D+01 0.9801750933887D+01 0.9923269299099D+01 + 0.1004496641570D+02 0.1016679710163D+02 0.1028871489593D+02 0.1041067206198D+02 + 0.1053261959239D+02 0.1065450721594D+02 0.1077628340626D+02 0.1089789539267D+02 + 0.1101928917306D+02 0.1114040952889D+02 0.1126120004259D+02 0.1138160311709D+02 + 0.1150155999788D+02 0.1162101079752D+02 0.1173989452270D+02 0.1185814910389D+02 + 0.1197571142774D+02 0.1209251737221D+02 0.1220850184455D+02 0.1232359882222D+02 + 0.1243774139668D+02 0.1255086182033D+02 0.1266289155645D+02 0.1277376133233D+02 + 0.1288340119558D+02 0.1299174057364D+02 0.1309870833671D+02 0.1320423286383D+02 + 0.1330824211245D+02 0.1341066369131D+02 0.1351142493681D+02 0.1361045299271D+02 + 0.1370767489335D+02 0.1380301765027D+02 0.1389640834224D+02 0.1398777420882D+02 + 0.1407704274716D+02 0.1416414181234D+02 0.1424899972093D+02 0.1433154535791D+02 + 0.1441170828680D+02 0.1448941886294D+02 0.1456460834990D+02 0.1463720903887D+02 + 0.1470715437095D+02 0.1477437906225D+02 0.1483881923166D+02 0.1490041253114D+02 + 0.1495909827839D+02 0.1501481759178D+02 0.1506751352732D+02 0.1511713121747D+02 + 0.1516361801165D+02 0.1520692361818D+02 0.1524700024742D+02 0.1528380275595D+02 + 0.1531728879140D+02 0.1534741893776D+02 0.1537415686084D+02 0.1539746945363D+02 + 0.1541732698111D+02 0.1543370322439D+02 0.1544657562364D+02 0.1545592541956D+02 + 0.1546173779302D+02 0.1546400200242D+02 0.1546271151843D+02 0.1545786415570D+02 + 0.1544946220111D+02 0.1543751253809D+02 0.1542202676661D+02 0.1540302131844D+02 + 0.1538051756708D+02 0.1535454193202D+02 0.1532512597682D+02 0.1529230650045D+02 + 0.1525612562157D+02 0.1521663085508D+02 0.1517387518057D+02 0.1512791710213D+02 + 0.1507882069905D+02 0.1502665566690D+02 0.1497149734847D+02 0.1491342675424D+02 + 0.1485253057170D+02 0.1478890116319D+02 0.1472263655178D+02 0.1465384039476D+02 + 0.1458262194423D+02 0.1450909599456D+02 0.1443338281613D+02 0.1435560807511D+02 + 0.1427590273888D+02 0.1419440296685D+02 0.1411124998625D+02 0.1402658995277D+02 + 0.1394057379573D+02 0.1385335704764D+02 0.1376509965795D+02 0.1367596579089D+02 + 0.1358612360737D+02 0.1349574503081D+02 0.1340500549696D+02 0.1331408368786D+02 + 0.1322316124986D+02 0.1313242249599D+02 0.1304205409292D+02 0.1295224473262D+02 + 0.1286318478926D+02 0.1277506596148D+02 0.1268808090072D+02 0.1260242282594D+02 + 0.1251828512526D+02 0.1243586094535D+02 0.1235534276899D+02 0.1227692198172D+02 + 0.1220078842830D+02 0.1212712995982D+02 0.1205613197253D+02 0.1198797693913D+02 + 0.1192284393379D+02 0.1186090815186D+02 0.1180234042546D+02 0.1174730673615D+02 + 0.1169596772603D+02 0.1164847820834D+02 0.1160498667924D+02 0.1156563483188D+02 + 0.1153055707436D+02 0.1149988005301D+02 0.1147372218250D+02 0.1145219318434D+02 + 0.1143539363525D+02 0.1142341452711D+02 0.1141633683999D+02 0.1141423112993D+02 + 0.1141715713298D+02 0.1142516338731D+02 0.1143828687474D+02 0.1145655268355D+02 + 0.1147997369390D+02 0.1150855028761D+02 0.1154227008374D+02 0.1158110770138D+02 + 0.1162502455129D+02 0.1167396865756D+02 0.1172787451079D+02 0.1178666295396D+02 + 0.1185024110228D+02 0.1191850229803D+02 0.1199132610159D+02 0.1206857831946D+02 + 0.1215011107019D+02 0.1223576288907D+02 0.1232535887199D+02 0.1241871085933D+02 + 0.1251561765997D+02 0.1261586531600D+02 0.1271922740805D+02 0.1282546540151D+02 + 0.1293432903330D+02 0.1304555673916D+02 0.1315887612096D+02 0.1327400445348D+02 + 0.1339064923005D+02 0.1350850874625D+02 0.1362727272054D+02 0.1374662295087D+02 + 0.1386623400591D+02 0.1398577394943D+02 0.1410490509638D+02 0.1422328479880D+02 + 0.1434056625987D+02 0.1445639937388D+02 0.1457043159027D+02 0.1468230879914D+02 + 0.1479167623614D+02 0.1489817940404D+02 0.1500146500841D+02 0.1510118190471D+02 + 0.1519698205391D+02 0.1528852148379D+02 0.1537546125281D+02 0.1545746841364D+02 + 0.1553421697307D+02 0.1560538884523D+02 0.1567067479483D+02 0.1572977536717D+02 + 0.1578240180176D+02 0.1582827692612D+02 0.1586713602663D+02 0.1589872769311D+02 + 0.1592281463392D+02 0.1593917445849D+02 0.1594760042409D+02 0.1594790214378D+02 + 0.1593990625272D+02 0.1592345702984D+02 0.1589841697221D+02 0.1586466731948D+02 + 0.1582210852585D+02 0.1577066067732D+02 0.1571026385193D+02 0.1564087842120D+02 + 0.1556248529064D+02 0.1547508607802D+02 0.1537870322780D+02 0.1527338006062D+02 + 0.1515918075676D+02 0.1503619027308D+02 0.1490451419267D+02 0.1476427850715D+02 + 0.1461562933169D+02 0.1445873255288D+02 0.1429377341010D+02 0.1412095601137D+02 + 0.1394050278444D+02 0.1375265386499D+02 0.1355766642312D+02 0.1335581393054D+02 + 0.1314738537038D+02 0.1293268439219D+02 0.1271202841511D+02 0.1248574768189D+02 + 0.1225418426740D+02 0.1201769104500D+02 0.1177663061449D+02 0.1153137419578D+02 + 0.1128230049248D+02 0.1102979452961D+02 0.1077424647032D+02 0.1051605041603D+02 + 0.1025560319513D+02 0.9993303145083D+01 0.9729548892983D+01 0.9464738139829D+01 + 0.9199266453606D+01 0.8933526076402D+01 0.8667904750745D+01 0.8402784570301D+01 + 0.8138540859996D+01 0.7875541090527D+01 0.7614143832090D+01 0.7354697751983D+01 + 0.7097540660550D+01 0.6842998609696D+01 0.6591385047920D+01 0.6343000035605D+01 + 0.6098129523858D+01 0.5857044699944D+01 0.5620001401934D+01 0.5387239604814D+01 + 0.5158982979846D+01 0.4935438528573D+01 0.4716796292366D+01 0.4503229137976D+01 + 0.4294892619056D+01 0.4091924913152D+01 0.3894446833193D+01 0.3702561912045D+01 + 0.3516356558237D+01 0.3335900280537D+01 0.3161245978670D+01 0.2992430297065D+01 + 0.2829474038194D+01 0.2672382631762D+01 0.2521146655720D+01 0.2375742404881D+01 + 0.2236132502695D+01 0.2102266551639D+01 0.1974081817541D+01 0.1851503943111D+01 + 0.1734447685940D+01 0.1622817676200D+01 0.1516509189368D+01 0.1415408929331D+01 + 0.1319395817360D+01 0.1228341782531D+01 0.1142112549373D+01 0.1060568418635D+01 + 0.9835650373019D+00 0.9109541541726D+00 0.8425843575459D+00 0.7783017917968D+00 + 0.7179508498817D+00 0.6613748390683D+00 0.6084166174653D+00 0.5589191992012D+00 + 0.5127263263911D+00 0.4696830063190D+00 0.4296360125529D+00 0.3924343490009D+00 + 0.3579296762027D+00 0.3259766994340D+00 0.2964335184742D+00 0.2691619391536D+00 + 0.2440277470488D+00 0.2209009439361D+00 0.1996559478365D+00 0.1801717576938D+00 + 0.1623320839184D+00 0.1460254461990D+00 0.1311452401368D+00 0.1175897743854D+00 + 0.1052622800912D+00 0.9407089451527D-01 0.8392862078550D-01 0.7475326577690D-01 + 0.6646735814128D-01 0.5899804851766D-01 0.5227699394346D-01 0.4624022845899D-01 + 0.4082802185442D-01 0.3598472845105D-01 0.3165862773800D-01 0.2780175860384D-01 + 0.2436974881146D-01 0.2132164126495D-01 0.1861971851162D-01 0.1622932681167D-01 + 0.1411870099424D-01 0.1225879120292D-01 0.1062309251766D-01 0.9187478324824D-02 + 0.7930038194170D-02 0.6830920911119D-02 0.5872183206948D-02 0.5037644628161D-02 + 0.4312748890659D-02 0.3684431974697D-02 0.3140997133459D-02 0.2671996911721D-02 + 0.2268122201696D-02 0.1921098300832D-02 0.1623587881022D-02 0.1369100730387D-02 + 0.1151910087150D-02 0.9669753500508D-03 0.8098709208516D-03 0.6767209113939D-03 + 0.5641394300578D-03 0.4691761498429D-03 0.3892668522563D-03 0.3221886372696D-03 + 0.2660194893607D-03 0.2191018926233D-03 0.1800101936858D-03 0.1475214192933D-03 + 0.1205892654847D-03 0.9832098695562D-04 0.7995692809159D-04 0.6485245095860D-04 + 0.5246202996510D-04 0.4232529769133D-04 0.3405484129524D-04 0.2732556374477D-04 + 0.2186543872353D-04 0.1744750226736D-04 0.1388293789508D-04 0.1101512510421D-04 + 0.8714533541124D-05 0.6874356872787D-05 0.5406791351919D-05 0.4239874261002D-05 + 0.3314806839624D-05 0.2583694952262D-05 0.2007648657315D-05 0.1555189018603D-05 + 0.1200916989437D-05 0.9244050332163D-06 0.7092773630705D-06 0.5424493283134D-06 + 0.4135005904089D-06 0.3141603589352D-06 0.2378861413798D-06 0.1795202409555D-06 + 0.1350106538765D-06 0.1011851095086D-06 0.7556879909866D-07 0.5623788451178D-07 + 0.4170219815814D-07 0.3081166707088D-07 0.2268194336078D-07 0.1663552297805D-07 + 0.1215530542863D-07 0.8848107127806D-08 0.6416106613217D-08 0.4634585104140D-08 + 0.3334643304910D-08 0.2389835688104D-08 0.1705876062949D-08 0.1212741020005D-08 + 0.8586376559590D-09 0.6054146003728D-09 0.4250856698627D-09 0.2972075512731D-09 + 0.2069101606973D-09 0.1434236365115D-09 0.9898160505409D-10 0.6800804519963D-10 + 0.4651712787494D-10 0.3167310042586D-10 0.2146695649341D-10 0.1448079937139D-10 + 0.9722622861678D-11 0.6496070631129D-11 0.4319651023999D-11 0.2858591661735D-11 + 0.1882503214946D-11 0.1233598363270D-11 0.8043412065319D-12 0.5218060130221D-12 + 0.3367856512696D-12 0.2162455335843D-12 0.1381220475631D-12 0.8775552000331D-13 diff --git a/Test/Fe2_rewl-lsms_potentialShift/WL_start.jsn b/Test/Fe2_rewl-lsms_potentialShift/WL_start.jsn new file mode 100644 index 000000000..9367173e8 --- /dev/null +++ b/Test/Fe2_rewl-lsms_potentialShift/WL_start.jsn @@ -0,0 +1,7 @@ +{ +"xMinFullRange" : 8.5, +"xMaxFullRange" : 10.0, +"overlap" : 0.75, +"interval" : 0.01, +"flatnessCriterion" : 7.50000000e-01 +} diff --git a/Test/Fe2_rewl-lsms_potentialShift/WL_start2.jsn b/Test/Fe2_rewl-lsms_potentialShift/WL_start2.jsn new file mode 100644 index 000000000..ffb12b373 --- /dev/null +++ b/Test/Fe2_rewl-lsms_potentialShift/WL_start2.jsn @@ -0,0 +1,14 @@ +{ +"xMinForEachWindow" : [ +8.50, +8.75, +9.00 +], +"xMaxForEachWindow" : [ +9.50, +9.75, +10.00 +], +"interval" : 0.01, +"flatnessCriterion" : 7.50000000e-01 +} diff --git a/Test/Fe2_rewl-lsms_potentialShift/i_lsms b/Test/Fe2_rewl-lsms_potentialShift/i_lsms new file mode 100644 index 000000000..26eb464dd --- /dev/null +++ b/Test/Fe2_rewl-lsms_potentialShift/i_lsms @@ -0,0 +1,157 @@ +systemid = "fe2" +system_title = "Iron test for LSMS 3" +pot_in_type = 1 +-- write potential out. Use this only when xRepeat, yRepeat and zRepeat = 1 +pot_out_type = 1 +num_atoms = 2 +nspin = 3 + +iprint = 0 +default_iprint = -1 +print_node = 0 +-- istop="buildKKRMatrix" +istop="main" + +nscf = 10 +mtasa = 0 + +xRepeat = 1 +yRepeat = 1 +zRepeat = 1 +makeTypesUnique = 1 + +-- energyContour = {npts=1,grid=0,ebot=-0.2,etop=0.0,eitop=0.825,eibot=0.1} +-- energyContour = {npts=11,grid=2,ebot=-0.3,etop=0.0,eitop=0.825,eibot=0.025,maxGroupSize=5} +energyContour = {npts=31,grid=2,ebot=-0.3,etop=0.0,eitop=0.825,eibot=0.0025} + +a = 5.42 + +bravais = {} +bravais[1]={a,0,0} +bravais[2]={0,a,0} +bravais[3]={0,0,a} + +-- site_default={lmax=3,rLIZ=8.5,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} +site_default={lmax=3,rLIZ=5.0,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} +-- site_default={lmax=3,rLIZ=0.1,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} + +-- Possible choices of mixing parameters +-- quantity : charge, potential, moment_magnitude, moment_direction, noQuantity +-- algorithm : simple, broyden, noAlgorithm +-- mixing = {} +-- mixing = { {quantity = "charge", algorithm = "simple", mixing_parameter = 0.05} } +-- mixing = { {quantity = "potential", algorithm = "broyden", mixing_parameter = 0.05}, {quantity = "moment_magnitude", algorithm = "simple", mixing_parameter = 0.01} } +mixing = { {quantity = "potential", algorithm = "simple", mixing_parameter = 0.05} } + +numberOfMixQuantities = 0 +for k,v in pairs(mixing) do + numberOfMixQuantities = numberOfMixQuantities + 1 +end + +-- Potential shift parameters for adjusting local magnetic moments +-- switch on with switch = 1; turn off with switch = 0 +potentialShift = {switch = 1, shift_min = -0.1, shift_max = 0.1} + +site = {} +for i =1,num_atoms do site[i]={} end + +site[1].pos={0,0,0} +site[1].evec={0,0,1} +site[2].pos={0.5*a,0.5*a,0.5*a} +site[2].evec={0,0,1} + +-- set site defaults +for i =1,num_atoms do + for k,v in pairs(site_default) do + if(site[i][k]==nil) then site[i][k]=v end + end +end + +--[[ +print("Site defaults:") +for k,v in pairs(site_default) do + print(k," : ",v) +end +--]] + + +--[[ +function deepcopy(t) +if type(t) ~= 'table' then return t end +local mt = getmetatable(t) +local res = {} +for k,v in pairs(t) do +if type(v) == 'table' then +v = deepcopy(v) +end +res[k] = v +end +-- setmetatable(res,mt) +return res +end + + +-- repeat nx*ny*nz times +ntemp=num_atoms +-- ix==1 first: +ix=0 +-- iy==1 +iy=0 +for iz=1,nz-1 do + for ib=1,num_atoms do + ntemp=ntemp+1 + site[ntemp]={pos={0,0,0},evec={0,0,1}} + site[ntemp].pos[1]=site[ib].pos[1]+bravais[1][1]*ix+bravais[2][1]*iy+bravais[3][1]*iz + site[ntemp].pos[2]=site[ib].pos[2]+bravais[1][2]*ix+bravais[2][2]*iy+bravais[3][2]*iz + site[ntemp].pos[3]=site[ib].pos[3]+bravais[1][3]*ix+bravais[2][3]*iy+bravais[3][3]*iz + site[ntemp].evec[1]=site[ib].evec[1] + site[ntemp].evec[2]=site[ib].evec[2] + site[ntemp].evec[3]=site[ib].evec[3] + site[ntemp].type=ib + end +end +-- iy!=1 +for iy =1,ny-1 do + for iz=0,nz-1 do + for ib=1,num_atoms do + ntemp=ntemp+1 + site[ntemp]={pos={0,0,0},evec={0,0,1}} + site[ntemp].pos[1]=site[ib].pos[1]+bravais[1][1]*ix+bravais[2][1]*iy+bravais[3][1]*iz + site[ntemp].pos[2]=site[ib].pos[2]+bravais[1][2]*ix+bravais[2][2]*iy+bravais[3][2]*iz + site[ntemp].pos[3]=site[ib].pos[3]+bravais[1][3]*ix+bravais[2][3]*iy+bravais[3][3]*iz + site[ntemp].evec[1]=site[ib].evec[1] + site[ntemp].evec[2]=site[ib].evec[2] + site[ntemp].evec[3]=site[ib].evec[3] + site[ntemp].type=ib + end + end +end +-- ix != 1 +for ix=1,nx-1 do + for iy =0,ny-1 do + for iz=0,nz-1 do + for ib=1,num_atoms do + ntemp=ntemp+1 + site[ntemp]={pos={0,0,0},evec={0,0,1}} + site[ntemp].pos[1]=site[ib].pos[1]+bravais[1][1]*ix+bravais[2][1]*iy+bravais[3][1]*iz + site[ntemp].pos[2]=site[ib].pos[2]+bravais[1][2]*ix+bravais[2][2]*iy+bravais[3][2]*iz + site[ntemp].pos[3]=site[ib].pos[3]+bravais[1][3]*ix+bravais[2][3]*iy+bravais[3][3]*iz + site[ntemp].evec[1]=site[ib].evec[1] + site[ntemp].evec[2]=site[ib].evec[2] + site[ntemp].evec[3]=site[ib].evec[3] + site[ntemp].type=ib + end + end + end +end +num_atoms=ntemp +bravais[1][1]=bravais[1][1]*nx +bravais[1][2]=bravais[1][2]*nx +bravais[1][3]=bravais[1][3]*nx +bravais[2][1]=bravais[2][1]*ny +bravais[2][2]=bravais[2][2]*ny +bravais[2][3]=bravais[2][3]*ny +bravais[3][1]=bravais[3][1]*nz +bravais[3][2]=bravais[3][2]*nz +bravais[3][3]=bravais[3][3]*nz +--]] diff --git a/Test/Fe2_rewl-lsms_potentialShift/run b/Test/Fe2_rewl-lsms_potentialShift/run new file mode 100644 index 000000000..8bfdfd757 --- /dev/null +++ b/Test/Fe2_rewl-lsms_potentialShift/run @@ -0,0 +1,22 @@ +#! /usr/bin/env bash +##PBS -e __resultsdir__ +##PBS -o __resultsdir__ +#PBS -N REWL-LSMS +#PBS -l walltime=2:00:00 +#PBS -l nodes=6 +#PBS -A MAT020 + +#------------------------------------------- +EXECUTABLE=$HOME/LSMS_3/bin/rewl-lsms +#------------------------------------------- + +#--Change directory to the working directory. +cd $PBS_O_WORKDIR + +export OMP_NUM_THREADS=8 + +#--Run the executable. +date +time aprun -n 6 -N 1 -d 8 $EXECUTABLE -i i_lsms -size_lsms 2 -num_window 3 -mode 1d -wl_in WL_start.jsn -num_steps 20 -energy_calculation oneStepEnergy > lsms.out +date + diff --git a/Test/Fe2_rewl-lsms_potentialShift/runRestart b/Test/Fe2_rewl-lsms_potentialShift/runRestart new file mode 100644 index 000000000..1752bca7f --- /dev/null +++ b/Test/Fe2_rewl-lsms_potentialShift/runRestart @@ -0,0 +1,22 @@ +#! /usr/bin/env bash +##PBS -e __resultsdir__ +##PBS -o __resultsdir__ +#PBS -N REWL-LSMS +#PBS -l walltime=2:00:00 +#PBS -l nodes=6 +#PBS -A MAT020 + +#------------------------------------------- +EXECUTABLE=$HOME/LSMS_3/bin/rewl-lsms +#------------------------------------------- + +#--Change directory to the working directory. +cd $PBS_O_WORKDIR + +export OMP_NUM_THREADS=8 + +#--Run the executable. +date +time aprun -n 6 -N 1 -d 8 $EXECUTABLE -restart -i i_lsms -size_lsms 2 -num_window 3 -mode 1d -num_steps 20 -energy_calculation oneStepEnergy > lsms.out +date + diff --git a/Test/Fe2_rewl-lsms_potentialShift/v_fe2 b/Test/Fe2_rewl-lsms_potentialShift/v_fe2 new file mode 100644 index 0000000000000000000000000000000000000000..88c099dee062f492605a849245c48f5afbae52e4 GIT binary patch literal 89416 zcmeFa2|ShG-v4b#$UM(%^E_r2Ynk^h385rqh)QNMRi-FJ5-CIp6-i}iqAV#Xl1j>u z2pK}kJocO$$LdCOqWl^4JN!G{d3EPkDg{OSYWOPEuN_JX@;?d+-qm=v)$;#y zK3f}8Qwp5(clp1$dKiVunqPZ=UAy0@fAW931&F4GR^&ErUu~$&DjQb)Y&A$>v32uS z^1h{EkgszLI8DJkfF9`d^!YV6PCeO7u3Ja)(% z;pZm}&PR@?qN4hll@5;p@(wkn^REI{bN|eYKiL1G+>noFaa&LQPWqSPR?96Wl(_D{ z$8-GJKdv5OHTfLwi$B^{jY2`7{-a#j&a26xG=H4$Up@7I-mmujTl>}DyG}T-cKFRz zKl?ooIR6|~6ciJy9esD>U-vlF{S}51zlfxanPu+WP=ZwTF?sNt3&g{=vg^qM$ns<9 z+=Uf!oa^Us#U#%t+CWm+5EeUp_*cUDnE?BmDhv?0v z^pmxBBf8xkCW9(j`1s!&xg7EzdHcCf@Co$W??WI2@7eD`(EYg)tbBvqeS-G8cm)zX zd;QMk_S55;P1e^v26>bV;Jr_}i`&h_W+ zpBDJj0)JZIPYe8Mfqxkb{CcjZ`Mb~cQS85}`uqNWPViUQYPAJXV!w6>tKo)mQ2|K;}h_5PAg z6s*3fgcRxw6zV_7Z%FX=_uqF~tlDK2zq0?0_nq;pDgPSy$MeU3*B-Wi+5>m-f6OB- zt8e!Hz5L@ZzMrDR`zz!yZr0EJpYOV8?{t&j8%c-0)+4_+x*qgng#6y9O!Cc3@_QrF z+co0k_eNE6lbPiAMs+Ta$#*{FcSPiOX21V_zkggEWjJN^-Pg~()%`!J3w}5E^ZndE z&!6A_TlU}Y`_9l+LpF%7?))8GU5!Tv{!WI~XyPhm`2RSc^J=n{$RFq1zM2e$|2W_8 z=cOTmKhF0*o%+x7tDb*LzxwCdW9UzNVCVgh>&C?Y5_|l50;Qz<_0;wNvvNxk~L z@qhikYi`v(tiK9e{ro?_XZ}3{{#CaB&jP>ZVHyhU)iculGRNONfBb5S3SKSpN88=i z#2)WI%0)pjw3>Xk{EzbyR+Haz{&BwlTdDu&yz|SDzx`@>^$y}U|NDORe)Stw;$L04 z{?+^nk$zmBqmGclEbO!VeaCJnP1kua|`CBGwWWsVCDrrB9QZ4w4A@-k9k4r za!@yB&ccJMVVLI|)d|}%v(K(vRKUz~VQYAYnJMMUvx0ecuy61(W=7!&?|YbMc3V_s zVWx8lJh+c}x_(qo1T!`0R_i$CDPiZeRG260M#RYVNp?53@5D@^+I2M?Gcj9fN(eJS z`SRER=JA?)gr}ItHfHS?vA_W z@*UGD{dT%Iren^-YB@}Yi??)NVQ$Mgq@{*wmrkFvjJY+IM5x2G_L0&cVs5cc=B&ir zthE3BEas*)R|ZBfiLL87OEAsO&m3#OG}-k*?=Yqj->ZpHOz@&c+!<3pJcZF4Q;#5j zNf}f7VMK->rly_0-6zcT{bRK1n5teKiKduJV`3qemHl^L!M z(lN~M-P@1i<5#|(?_t}BIcjagiT!V7Xfefd7;_*ylz_`y`J^&>oLpXaRg*|MW~bha z2yWlXyIZ7fxSlJm0tM@FyH{Gm`^z63V_hUZeNy^6kzVgKO`Xmiz?J=3AV$28E z+L_7m_nu@a^I%rKF;}a{yw!UD8t#Xc>(83+iena)IZ&W!^i^al<|%Fgtyatvm#)0Qc3(Lz>RE;DyApF+M-BVW%8{wTg(l1} z(k2T$?pA_QG&>(-`qm$L*@x*l{{87XOb@!fud$!6xUiQ7lFQx6boTrJrv2PxDemtT z>()!w`3YCA{^-Hv@1oAxiOIR_k%Y(l3JYTve+(u)z58chOsdIKy>f`Oy!5=6}HDEjK(WZi&RK9Vq>X z`*r#Lq)%TWX8D(^qdJ%+&HQ>VFblIHP4{BvTBQ|Z|6k6SVAra_ObM;%yMTFoMEyDT z-{mNijS5qkp~p(R95DTEvD4ke+*hZPa|zSAy80t-&+_&h&&(`Lt39JdvY15nsik~O za78@@``faXsN=p&Or>bvbaHu;_54y3n1T~bYIq)7=2*#T*oC?7Tks6I9+VA6k2WIG z(p*fj#2d`71Uvd$m;)C_HU?vMtzo%#7V|Y}e>)>)gWq}A5zL2SqVI zE1v6N$Gq@9td)Ry#%=36T;HX{7j+5vd`nS0du#$Q4}uoATue{1i#KtF^B5t(|gU@2^-m|F_{dD!cHU7-0WS7WKGQ8 zFVS<@U*;M+oj!MCRvxRJ$MeEm?r6KwE6jMtCfzVhzX5c23#LPG`v^I|VU4yW?#DUV z2lJPyFxdjMzuiEj*||<;4{^+ovnhKhFzf4^eXyU+UN`TQ@W)IGd$bH0z@9v?H`CS0U&IWup&3e#{qX72e{)!Jd6FHJZ9 zgc*5S&=>pvjH`fw1g_tV3Gw3?KHrQKU;igu?-|-;g&YAynjXqaQ^Wo+{mky06boii zk-#n^%!JH7zRQ^VrMdcWeWr<9jvT|~OiQ!%P~&z^(|G-etwf}$zTH_{a6e9=AYekFP1Um-RpNFqzdU!`36xJYJXUvLFb#9( zwCOS)Z{O7lWykRG-)UdPSmAl$TUThs(gY=fTiUJkGur?FhP4 zff<~Cx)zuF)!1^>@C+u)j`TR}kK-MW&$akq7M`Fm$K!Y0_gZ78H>Qrnj7}dWzzm-BOg=ebek z4C$#PMEdfb*`x%w?@M`o3&Qikm!Jm+O}=2Ne|_`)0wRq}IUZ-hb{HvJ5#7#)>GxJ~ zz!g)mTZKm-k%mXO^TW?!79Lu>g~!LRGeg04CQQCMimyaO8hU-ftHuU1F;}-H9n-M7 z@-XhV!Pzzdi1hjCOV$=VuYL~mYk5$PDJN`` zQ-??c?X8*5vAqW3PhHfZ#?;(mzpWFI`umtJO+Uvx+2AIM{jOiDswNgoq^ zbRLm(CR(O314MeC_9j>d`|Eo?$$d_EoW46hXZQ){ zdnaOU-GJ@cc9H45<1tJTb6Q$AM0$IEoI>^;Chu}vKlY2(H2;&M-!U0Y1f4%4(wn1x zZfV&5ujjsLe_W60RqGt&k4Ue&J5S1LV{XxPH{XazEf3y@?!e=HAx3^6@+=+feTebLx+MB-bai$X%&%=-7?Q>i_5vlGaO+)=BOb-8R>m(5AkzJa~SL|=KXWUf%4kHqJ z-QgYm1C!}n$}1&Asxiw`I2MRV4-fa&(riYg2RE;km&hYhb?@xfG<-d)X03j|`7I(< zZJ2V&A4a769%p84hY;yra%TMN$B1qUrk?U-2R9_+8h5!Z6dbP%a1aCxay7m==du+)?t zM5HUWZEue$Akt+>Vs5iTq(YgU!VI`Q1xz$&<#Q3~(zx!|v{XdOYy5Vkm;;e6UKS2L zy9bdj9KJoffa{sN<;G+lK3|UTim~npB4v+ci)Tbglt3Z0w1 z&;TMOUlrt=!gfnCPS)NVgh+`UMMeI}h?L;H2VQqVq~nV>t}}Nb(y_RR&|FzWid$Dl zr`CZ;M^E@>D}P0#7~0@X5YInR5ziR8@O&Hb&Ec9j?x!QW`Chu=adznG!aQ>|B8AJ3 zM|(ITQfT5pmY+T%1^2(Qtj6a#sBi=dPH(_E1gon{_S#@ z^x<>`BJED0i(WW`NKV=9*VAVZ$?;MNl|G)A9P+(qx8rfQEtjdi9G}nbbXcSNWklK< zb)oKd4kB6a^G=~Tg-BaSEzM=P{+lIk&oeq8(#Clv2Yq}#Vtp-(5k8+;at%wzM?^B& zJSA~-HzFC)T72<;fk@z9<-5}vh@|f>ppw{(NP6`9*&pC>rG5E??^bU_(%j&~NGwOB z_0N}L4^bhKs*RZWgIkEC^y+!m1olq_QqMU-JYHn)Z&6Cd<3w7VQfvkLxx~?4mOIvn zB-+)!ry93IM6q@6k6nl)7+kH9l88urcfxC0as9Zz&cAHL{mV%Zr!m8R#b*BTof@7e znD_Ff^_d_N!;yO~Zt93ccjBu4lMRSObE^4Aq!A)fC3D+7Ekwj0Q63F*^oY3RdG-D@ z0TJgnJ>Hw`frvBWc>}5}i1_`xtVGv)MErWka8isL5k~{w%(=87;;=;hJr{OF9C$%_ z7T;m=h6OqZaN|-ABZh(e|M$wTSq_ z(i$+hAmXz^bAHxsi1_4NUR9P_)rtFO?TtvhyXS>DTPl%Wy z=@p&y1`$)cPf2RdBVzK2!oDe1L`+aPUA*ZmBF5J0*~#N@6e+f>eF_l|J=uEn>t;j@ zQBOKd#0)sgY5Zdb5xqxWhVJD>#QhqVN|p{I;vWA1uRUXkxcj2Gj%yks?x@X7X*5Pe zySMiSj`$;@RoA|2TMZF$)7wN#4pT%ltEJZ3bsP~5bMG`~>mlL>pQNzPc0|-tanG&& ziioQH()l~_`4kdvkN+4zL}|k87k*s6Xwl0xl+B1JC_yNyltD!9lvh?4V-b;c^htm< zA0jg7_MVi$^`Z%1C;Md*ng1vjf1MxMyC}t?k-1(`J^NuNWWK(C&LW2znJX}L z$WRC(a|sD+{?Ct)xuA^EIoVgpoRcq|dF@4H&M+s}KZuYyb=_!$d>t}dJp52?lpUE( zipAN~%OJCnN@=m8Tx9l1J-+jLF*0kvm{K&+h0I#!3D=GpBeMnr!q&UTQJ7lK%+Wzjz%g9XnzSHxE&ybl=Qr|uGRAk0MYKlackQv>?lJJHqWV#Y#e||*; znNBVvw#S!{>9Ct%p=<&&?Jl!Am!5-6-+X}<_vn!6Go}_|t}`-y$Twi9wTMj1S@wt~ z1t8Na<7yl}jL7u-ZT0xa1Z0}J*V=TC4Kh7O>9aqK3z>$;1|0V9K&CzuCZQn+nYx)Y zw(Wk7Ot(c(WU(tE(@j^hckiS`rl7KNuLuV+U0)(o&@zQgr4v6kX`3Tc0qgqRcJj!S zg`%N)R~a&;I@>D$fEt<1aJP*O>_jHRM-XvA7@2f6MP)D#Ba;?t`px5t$fQnmGnZ~3 zGPx}co<6;UOo}+$Vix3)N%jcs4HnFkmm6uhoRCTMCcX=PTaZa$+t|omS7hR`(YX5g z6f)Uf$h)a$8#38A=&2kjgiQ3=beyC&A`@k?<6`LqWFjhHFBJL$nXoSwtK^L!lQnhm z!QMm2cqU+0C1XD_9-?2awCqO4?ePT;PgIcc^YN)2`1#Gadc$muMl>?M9&pdF%N7~u zo-$D=vPQ-!XA1OQjU(fzn1Mq>`pDRSJE!#BYslD@YeO80K*l!rJ)hjYjf{=Wi@Wd3 zBjfcC=zQWXBV!5vlUWf9$e7dF{QH+n$au|30|)9wWHeO}KIAHijQaCw`fW^*QES5I zq6k`K^w>eXVD~ICs$hL&(Itb7@^3zsCIup+G#!mbadBi6Q_T7`E&>?^Q13Vr&4r9y zOgXOV9zaG`zWVF1e;R@4wnpX~$VlmM&!fRJ$VkX}N6B%Vk5R$I)}av@F7)Iy>n9__ z;UjxXnNyMBd#Ze+PFZAF?`P90Fpdl>>ce`78OSi7Mrfx<9WqQ+F#a|hfD9w`W}wej zWazC9csd%8p(B@kWrrm)Bz8Bhc%>sl%~Z8A=AFn;LgC;=o5#qI?dJ8i*zXAb5So29 zn2g|PP~egEPZ4adFv+92g<$=M)1_a_5Gcs@Zy;LyS-8fCbudFA7w!>yl^9T zVg`bHoqN9o`yyydtI1#0g&;haQ1YVIM1Ie8G-a09ai|f!0W+L!JPF7m|V8MOx%fp-~rCKdR1gF#Ta$wLOU{OJmKnA zPK^vM4aH`w~ z#&>Pak*?bFXr}8%NSF3pe`5LD;2uk`mHJI&l}-qh(GZogMNkQMXi( zj?xv!-o{9zL(MKKSkHsB-+39BUGYcS*D7v&~2&c~|7r7(yD(9tu~AYmvtK-OoDWPauu87E-&<=OXoX1?ie$TBKe=@yxSs z4N{M26!1(aMe5c`@La=gq%L9VW%;%Tt)H3wn0Biet$$W9&?J2etv|oHWtM*yt@oLn zj$@fZ>kZEpe)Pj(PJP9Dq-dn}`O^#HntG&mFR|j-!&Ib}q_I+zG=|i64O}0Le~Q#p zv#!)Gsv)&CcDF{~S|ZhVJic>&pO9)%k4xKC4y1bcX5Z#dm|GGQ_Q)_IRk8gxb&5qu zW!l<;iN+eKG{A4H(Yi<_TbuH6@&r=x(Ukpi+!3i5>aErN#)(uo&18GEf&W=Lz+2RL%Scj3k;WK%U6P`$J zC`xU6fdi6D*(CfW=NXdIRCvdH<`k0sAd}(|8IELQ4I8+njv`t4!^Ek@NhI^SONe-P z2+4%Ir*QUoAQ>?sF?LQ@B>kNBFqN%P0wnJ2zLQgyO-r?$@_DKB>B zku$rH6qmVJlzA+YeAw*6Ka+(d_gxQVuM$F%?88k9QJay(gZPED@0XFpzEj7u@b_*K zoHUcm*Se8-&3GwkgB%j~vSN!)(AVKsjt7bGS&nW?ol z0g1j^DvG?tg+!yX$Bw)^gG5!|BF_X?MEF#?sWti;BBaa48EESvg4reo1|W+>zAL7L zAKQaO97Hx#3bP~OTK~H&cBhfByj-+r*>)t9Vfjh=Njwsw>dRIs5JG}}qtm-*^pQZ1 z&m)Ce8YE!twewSAE#j{mDsi5-Li}2vC7n|H5Z`r=7ox9H5TAtCh8piG#Cv|WphBt` z@$%5O%z&ea=XAcJ>yCQF!&3MBsKQRfee!_oHPv>+&78S=`_44Pb;_c<-O~keam3zN z@J>gZ=fDZ3-a*7Ee5gzrKfiNa)^bW7FGn28ekZ%c8WH<_NzujANr>Id=1oX_6JmQa zYqq2_hS=O#nW|I?h;=fnq}oOkvBst6)8E;FSa}zH%eJmZERLDVs^Z>=IiA6uE)Ty9{`NPa3UDX?3lrh(+{G&qM`t)e$|TzX2dM zAv()vZ^}z+5p7zF{k~cQw6-%Q^L5(aS*{;ZhL$f`3fw^y?=9>XV|E}4-4v!JOP`t_ z28(CSmz`@?nAKau|Iif zRP)W}V5r>nqMC^~*V7BN+iJd=F#CC=1=ftkw%Fe9xg8L1h{ z;UpApd|xxjS{?7f8DBGSY6nNx#)6uDLHdZ#OzJhC%7^<7a=xqS-7fg`j7LFD58YD% z#_1z9ACg4w%zPiL=_DAJf6!Z7^S;?$zf(W4rY+-sl2FWOO>0=EWq?6I&FfIPAIZhq zH7%#b>AMYd{?WREsnvA_zxm%^S3t1%wRYm-zx29-e`Jr}Kl}L2|Gqu;(fzWA_Ajh{ z{;RFC_^;dJzp9r(w`$7OABO#1J4F4Jo&IkH{`vN}xat@G9`^XPzKfQk;dh7pgCFXh zTFnQ|ejo6+iB_X0eExR&@7So-9fHa4n7_@NtI;i9e>?qm?7r0HpQ(f4*O7udW>a_wcLV_Ol9b55$5GWVN54QI=#$2)yU%9rQEo8S+bb#`2)IF*(8o zD?pHGij^U}_ft^VW9Zt5J_P`sqJCc6G2WfOM`Qt1;kTlE-?IX$FXp``J1zt2T}cer zKMDcr){~aoM4p2+n|JTD9n}GAp0Qdo(Fp+>^RoOAhx>r$*>>VvV`;F~k|X{8_gJv@ z?d%o__7yJ(sWFV#17tOD$2 zo;qPXfq=cT+6G9v0uJd4Q-1a{faAQYvQfAU;N)ma88yBQI8Tag%*<*6TnzR_hv_x~ zt`l*)`^N4AZf2D9uzn}tKEwY&A_f8;;mhMw4jTc_wa~O^KMlaEmw$T8O>@Bea>J%x z9T~vqvF&_%9S7j2T=((JffT@h;lQ^pI0ys`Q#DLzjsk(f)U+E}zCbWFHpbY`0tkVa zHD$-11EFu1ZeDOV0>W2*++vHF1|qIy&wk`f0Rrn6#n~oBKnQqL{&uAp5ZcC`(aGxp zQT_0=8G$e$dO76O%J+{zjBPSK=9nK4i(GD+Wh??>6NOJ0+-8Be+oF4$Q8^IrV4i2s zx(g(1zRB;8=>QVV<;>4!+koU|55eX~M}g!^K^?W8<3MWbV1?}?Lm<`Jxw)Zy6iDw~ zr@8Px6i83UbM;aR0h#0bX{+1c16je^{PEj|fo$dFm3B{8AZMdg@-D9s$bI*DVoWmu z7dK8GPt81Zl?tg`}&S-$tn=Tv}_LBld+k=O2UG)|meFcO0M)MLOQfFXK#g=SCrRKjP`kHo zo-VTjte2}Pj$cJpgavUnA2wuNX!C_lMjx)J9h|Z zvVA+)J~09`&lwx3^ke}o(I@Q{0d7F6H0k_e;d7vEaLtu%ejI4O)(p`%p#VDjjS5@W zM*&^x0S(EqZ9wR|0QNjizEzY2Als*GnwCib1FyInz3vC_-NSuGTRVZFfyRB>96Dfl zMc~N?Z(m@<9%;GVTMigS`TDvSOaP;a#f$Ftsla&8`r9_1Ux0Ck^uWxk-N3|Vs9upJ z0hlx&w^4R12d0}jzf8r?0@LRFUD<+ff!S7*o=<(Lz^s#zr_zEBn0qktR%3&iPi^;R zeDwhkkI`_n4c!MM0jaq4H^%{~{8hy~iU%951i3Dse*-p72xM>nJPbCaeSX-rwHH|E zrAIyOC99Bipca-nTK1gxMLf8Tvo zV3p6(99Ss{tm#yxx4Cx#Yu~$ePFG}sb$j`TS&3m_W2Tm?9sdQ`R2nx8m4%q(O4g?540S?Y%=veas;IPQ!_c9?4 z>^L|0$;;&jaMV30>te`V|97q;60oHTv%nE(+u4Yp;nY&r~f<@mok z^}QMF-sVuMbdMG|uWRKzr!)(kz4S(twq66yFTX8F@|*%Lnrq~o+ed&)Zq$QG&0*k5 zAG}H1Hx#%APa<_2Mc_I}x99wT7jSc^>-;9F3fx|5N@ssA0ej4Si^Q{Kz@A6Z5*`^x zfjc}@+kdA6xYzo#ar>JB57WSPuTpq`M^idSHR}nm*Z%X$3nxXew?C4lTlpy1chGmm zJT@Kdr++bfYVZo!pLhL|Qcxc7)R!PwevSg3UFPifIZD8RNQG>qEDO9OzqsnIcLiQ8 zS?SsDF9PpK>rtMNPT->^d!yCpIq(_Qy{o0g3w#T51Ay)m;HReLAMSAk_@%qq1$W8; zzqy{+?`NHW|L*E<>S2w*|JmB^7w^?TfO^y5vHUC$kT0}kTX7cza?dO7&u_rN$p>;h)q@~7w1mme_yY)` zcp$#6fER=$QS0`kH-J$7)O3NKG7wsFsK?)_2ZR~6nbqFW1z{bP?$0*u2jL+~_8;Rk z!66>|n@_%;0Eenf5|8_5g2Qgi5qp;e!4c-hk^zRj;K;+Ynx{4jAR-`Q%ycOWM9LK| z>bUQmZjU%2QTA+E)x6C&n`l#NGxLz3$J;oDp{CFvd zaqx4@-^34M8tkNwEnNXeb>4En{VW2GUjOk>WppNgNaV=G12T-AC%^)v-`9F=EK3E>XpT&xJ@(+t?c-c_y}ckqM`(Z7${CRHuqK|D=mXB0 zM|utR`+~D?e2*l&9R=rHFC~0-^#$jq<(r3|%!AAm!gKwH)`2XEQ&P0s;y_ky+R*!= zFCg0$YN^{i-FL1uJFYu*M707Xn@}1p6SvQ4&{MOz4C+%E7!KQU!FM|RocpQ|rB-8;4VX5%E zloTked1|D0))ZVeY^i>{bqBay-&s;F)Bvtn&Zk+@|~!0j@L51YUC zfjin+O2$mx;LanF=Le4SfxDJZMP^TOfV z7{_83r~)xk2NNejRZqxz)-OV!I*$Eifr>PEptwJCcqb=#(0(enoRSMXOvu^EmK6YM z^b6~v%XC4_G}<86;{uQa?C+Tuyq@6QzU4Nq5M`&-vye);lca`uE1${Xz3n=7U#lmcYxfDxcTAA)tjFr~y*fmc83d?goo!0WwD7Hd)+!Ryz8Cu`d$ zz#9YPIAIzL-dumoLESqAT1C{i=#<<8t!Y9-Q4SX1Eq(HoYlsJU8TB+f6CR*l*z?t;H%p+s zltF2q-Y3ujA9Yhd6$Tw`dF@)+HlWk@u1g;CMbO2_Lsjf22D+{_pFZqT3O-m)sEwzF zgAdcmHX+%%p!>p|>jEQo;N#}#&5n*b;N!|tvd}(B(6d9BVe{)dpyzf`K%ra;=;e|V z-|ZR%dJh(jJeIJCAET%ERbUDFLLz)@81I6< z{uXs-izLu*>lsvFF%0_ax9@nYI0goE3qkhUc`$HmXHf>E1)t>-H?y=#fX|n884I^f zf_f9?lUqUxN?M~GNqbyGbAI8jr(PA5s`gRX6X1;uSfBg&?8){2aFR20J zNnb91JVOb-s&6`Kw=)KO{Yb-7v7Qo4n5C78v-p9D3(f=DDFR?({#*AJvvuH`y=5Td zt;673MMSE9j0E`3nFwmApM&qgVduB);sW10Y(Ja}XaJK?!upmt=9P(Eeou#-;>b>!manM4&Z_2rCTK-@Pl?O0SCn4}G+UktQr_NIdwBb&~z5q)6h?)(!E=6W!z z+E_jm8iS}mZ?jqF447u<*clHYvChcMV-WP zLun^iX{ojEmk9NT={{^h3&> z@|NY(d62T=PUuUECP>BnO4jeYHKg)9a`?yI50L6%xueOL z0#XleF-mM-f@?NQn(pP4fosZ2{6$aTugm#{Uwp~94{2gPIUTq)1Zl>y`R*1g!L>Vh zr#5+Sg=-s}TL;aiAgy-DxzPO$kha*BW$2tAq!X4{8Ghss>C&F?-wyVI^bF>7PZyUU zee4aV=-F|&j)E%djdulHcf?fb1(O6^w{$2#Au|#(94Wf|VOKh2qAhhFeCbZ~$Z$Eqv9m#}hJ_&RX@5m>`RRWBj#rame!W?K8{0wvbh| zBG+1_2eKYc3J}XogRBjKjW60dAsd$$MgMgO+1!G+G;eB!Y-MTPcW(4UcB&`$Ble_2 zc3Z}`XRakc_RF4YKTBjo_W5qQtCZ&LYZqk!?{=Tij8vC!aKr_Ta8ZO)%| zF_ng#*AlGGmCZvgnv)ldv`#@T=aS9inK_WF`V&p&i+zxrU)kJY>>1<^O*^p8S{`!0 zXUh5h{Wj#$KHuvVJOFvJAbm8a2;^Csu1dTz4tbrcy_zlTA@7sZE?m#nLO%I}MdoTO zkni*!(M1^oh1P_QFHTI)3wWZTNz zJeCgyBMq-+^lgBG<6<@y7oI{Pr-?Uv*m$8(^VQNssc%pino2l+=z+pzwJPg^+o6aQ z&#{9E9#AC9D7~*-91>`ALGO-8NHB^#b*IM^5{^7t6MG;P67IQfC}6OLgz25-6@#-- zRQ37;7Bw~~>SG;i;(Y~*UNd1VOqGP9L(wWNk(Z#D)S64C9uJ|I+q2;{aWzmZugOjQ zvk?^Qp*3mENrK|S2hRq|euLsp>^d{y3s5}!UC#kxGZgQr<>=jX4NCAesBQhx1|_x+ z`dmzCfD-3;TM`b;L5X+v>J7z{P?9@yvntaeC~4Pu@uR2?lsv&oi?sgfFE^lcV(NzT zr`|#71{0I7CxoC3O+gF)FeQ{RDo!q75`{96n;8mTh(VdEqjyEpmZ8k7=_hY~9w@7p zSpC?{0LprkoVxByL)j~#k4i3xLfKxH79$>dD92A@clQG;l(Vs7w(w$yatWXFj|=re zIaG7wWKs!~n|W1}oInBP6*%nmK6*iU=kW1ZQGO_&wz6WLP7mel&&mJI+&C2Nkw^vl~{nLWN@!kuU8}LWPQL`*_ZNh6+9B4l-A1Lq&#S_cjPuM4Zn1`n*W4dxQ}#l|7MksMuk=C1NjQ|V?mJZCV%5(X9D!p?(s@*9G zl|~;g(!A4y$`pskEiBeTW%f9JMpFV*7JGlmsN^$LRt@AHE)|2y23Dc7Ivb%f$s5?W z*g$2QddJSIeo%Rb1C(J_gUZh0pN=)pL*+dZkIHw8LuHR0|p+AP#isp)OZm_D{grF-z6SP7_f zKJeR#kwB;v!%)n5NCql-X!9<`B|#+;O?YJ>wu@X;bI(*8R9biEU7lkwR2;s?8z$ik z6`!WHRz5F-iugwzu0k_VF^W5)`piS9xT7aWN$wU@RBuRqcmYC1rd~~I1qc;B8?eNV z+CYT|lN-;cJcJ5oxGHKj;-SKU`?rZ{vQWWrZd1mvC{*C-Uw&||0LqV@?Koa=1!$i7p8I-NcGyBZc z4rMbh&tI{1g0f+B?hkeuLs^IJv=_^G9BeR>PL=3|vV={RA9UQI>{_;);jINwW~^k# z<9b^t^G>x)d>|OgJi4>nH;W(2+_W(O9*>~RMea>Hm$pNh)7+=Mc=kh?W9~v#RSHn% z2zy`Hno=ketXwJexgW~-KUaz=^Mf+JUkf^uN1%*f33r2M2$Tt0C%EY%K2JFNyTG&^ zP$uTZ!14BRD09-#>UA20NIg;+ZU5WWn?$G&J)>LIEcT=>iHwi(x&o?ASJHny7h-{8Hhdz{d z2t1+o{2-J+;~h`+!xqZFo^h^ow}c98U&PPg>xP1jv|{t<7O0RGtM~rZGE{im5njlK z{e_PrtNP;{RNUFv-^=L)74ulFv^tug;=si$iZe&CA6o8uviBiW@)^;fP)UYL<;KsX zomjDd%Pw*$kZi z$*}5LRuWXD9s5!i`g{p3~dTtDhP<7wcJ=U>ZQ1yWI&8TM$m^T&ss6wFX{<|BwwGE-F`|h5; zBPmdIS1zgTu?z zXRu-jRYuIU3q#(FjwBtn^@MU_*>4ni4uP0sv1qENbI z;{qF=z}#Wpdj-Rie*9-6u3c=7#QUP z1swDgs<&uB0VbLAPWl@m|MRLRhtI@9{?zV|PDd&rziVKEMF;`%Z?Ku@?e&5DB9@dv zltYl8LGk=C;U>uUqpV{l=sM(EI%}V|o(J+%CLb0Lvw-}}uz#29cgQbhU%92Q4D##y z&^KDPLH^x@-RC@xLjL1a4Ey(aLH>$MWulaKApc-;ePd}N6cE|Ocw;aV3OMc-Y%!yU z0@<6!H45~gKzFLMO^*>2l(=5s;Tkg!&Dx$@O4B#07g<97x@g09Txu&HcFuqxiC_^AmJ z_FUaVbqwFn1yibS2{VI)*o=c_dG8?M)MhpR!bM2PWO~zNN(TwKkJrb{GeSb%?wmb@ zQAoJ>`UUTHTwV^x(1!14At6IBC^|?25>5=0#=W~BAtF3FS{vUFdcSeDXf}rghXr6O z<%sVa=ltw-tsp_BL*yyvK1g6FRbM|70Y%<1+817Tf+DBB46i7dKoL{vb4}k$pz!2` zh%G%E6wV1(@aC_F!iFo1D%FReQ12aUK41fd4)-4xe-sOaIO+?01tg*1vd3o^ibPmUJvrW+@Nqx^Z?|y;cfph-vRkv=PZMOtB}u{i*zr< z8uGqq5YbfeguKKb#=A9!Ax|Au?v)D^kY@w$(tsWXPg`cZHHxe5-K zs1&?|T!L{FKeVPHXZi?h#nw5<$uxLX>G~+-IDSX5WLg?>P^HA2`G6pMM8WXEzEsGz zBr_p)br`Z8+UPWX(;c!dX-K}gGX_~B*>@hi83kF_(5ZICl|vTpzz-4ciI7<~WhCIu zPRL|&0U4(Zq3ZQ}?YgLEbW z`j?J2L)xQ(9qyg__&M#3!l!);a4n~)kX&;Xq;Y?xl+Mxz*E|TX%-Qh>t`RU~De`uL z)R7`xa!GEGYM4cHK!hJsIZ%I}(5Qoy&0pI@s5v3!#@f~xz4MTw$zxMRTs@@N`c%It zX%zgZ&EyLC%m!9I-?a-ClK?B+70(Xea|X-SwhZinpTSawgG?@^E?69hW7yWS3oIIB zv^!i01Pgf&s>3M5tjKQ?hXq0+g zFPOIFW=%C*0@H^_Em%G*g6X17-#D&Gg6Vb+_wkZLV1`jFHz&*=zmITS(?F&1kJg3! z*8BO*|NeS3^lKpn#lN=h&p)!q?{$j5`QNt(UD~hJ7k{o-B(F`OrnFsMKlK0i^@>UV zR_mz#(Rlg2j`cVH>;K=`)j#cl$H#x@7C!!8We=-glOV-!Qsb7A=K~I^Uu)L>zAkk2 z>N?inNB%14|6Jc3zj}s$4G^sCY^}D~n(LDP*C)f5hBF#i>F?tE}P{z&Ie1E-U9?#wX%Qs-_Ohsip3;h29*=gu9+lXdQ} zF2rBy+_m5^S?8`4ldN+$ib>YFBl`te=ML+4{M5NK#U$(8sbZ3K?y&B}Po2A1tdB<4 zxx@YVQ|GQ5ldN-x+woK9?l>k{=gtI^taFF``KQj^eN3{>9q!McI(N9dpE`Hs^2j=O zSeN0a&K>rPpE`HAo)i2S zl6CGHFv&W1jhJMeJ3Q`w>fCL|BEWXrcVh^Yzg&Gyj>nzyJ9jGxMA8@0gC` z?&P{Im(TV7EOZ|{p6uN5{p{TRqRGx39p`ZF$hClTH;^Vfcf3E?xuf$F&fN-{?A%?X z$LAccwJixg+-k&K+HU;M~#m1Q z0%@{yNA44xyWKR|xznY|&RrQzcJ7>MvU6uklbyS(G}*aJrpeCT9-8dj{h-Ot9d8Fa zcXa)Nb4U9Z&K(^OaPAUlvU4|@COda&G}*bkM3bF6zMq}DW}58WeWS_Foia^!?sz-c zxw}S_ox6GD#j$fo*I77sbe(Kr=WY{CcJAV6vU5lK5zgIbn(W-sc?9RKf+jn6be)8A zN7rRIcZD?BxufF-&fP|u?A)c&WasV~O?K|cM}c#vMU$O7+Rt$AX#c{wqvHk6og__m z?i^^cb4TYnoIBc|aPH{%gL6mQ0q4$-COdb5G}*b^PLrKGI#1x-8Pg=^E{)D7ICpg1 zz`0AO$iY7aEbX|mV zr$bI1J9o6*aPH32Wap0D8#s4AX|i)i>jvk}ktRELziF~_M~)PnI}P&c*tt7QlbyR^ zG}*bM>p7geD>T`;)27MJ9i8uR?(WcJ=Z>xeaPDXw;oRxbWap071J2z(n(W-sc?0Lp zf+jn6X5`kfb5~E3ojW=&;M`54$<7^ZKb*U8n(W-saSG=yiTpZp?%ev*WaloBCOdbh zX|i)yOp~3v7Mkqb>5^l|&fO!L?A#rqNzR>`98GraENQZHN7o-XcXa)Ob4S+!ICu2? zaPF?tBB7 z-C^g>fVKzDT{(Gn?A+1wz`3L6g>x58lbt(n^6c2TE1}8GoheOr?&v&#bGNn4x!cv| z+|lFU+|mAob2pPFId_M;(q!lE4NZ3LZVJv_>Bu(cj$R)-cX6VEb9YO#&AFrPVdriU zZ7(}_O+DJ2JBK#s?tPncN6*L3-K7a_&fOVu?Z~+c=}42EJ35cx-1)RQcZqGz9bMnp zxeK7z!_M7;*=^3<0&?xhxf7d8lbySRG}*bM^@Ve{q|LbtZgcKj+MGK&AK~25=Yexq z+veQ;Y;*4DdEnfI3eH`Ar#9#AIk|S^+zqAYW#=xM&ObPJ32n}upWxgrrRx_vcXhPC z*}1zR)#lv2Yjf`CIA`Z>1f4H%?&x@8=kDDy!MU@Z-{#!W_Q1KL^Bc|`oo{gN=sE)D z?oyj`cfQTJOKo%RUbQ)Q7X{}|jJAiJyW#EHoI5&?;M}DN&fRI+k8tkxwmEl=ZO+|O z!MPhZUU2RTX}j3DdqVpc&K;en?A&#r>mr=H3xadEL%GelYZjclB04_d+~u}8ceI`C z+_}pL&fOMz{c!GX3C>**trwg-I&R?H-4>j?C|Y-R?q+QeoV&x}f^)ZkCOdcc+~M54 z6QSb-&Rw10-0f&DICmTS2+rL_I=|StTS@y1&Rv1v+zqF7W#?`u9mnk4&7tc!J9jN~ z+^}=ElRiH?cf-vE=dPBn4{+|j3eMe0F~Pa3q4S8HyOXpX?A!&>=T9N$u5y&%+(~p6 zoI92Ef^!$;*5=&N^RROlO&`b3T{G=(cJ2ZMlN5Q$vEf<`-dp88N3A!_M6(CBeDdQY$!j`*Z~7u0MSpVdw7dXu-J~K>M4WyRRvNbLT+UO?K`)5(Ve( zn5W>}k;?(+F5XaZ?$qh{Wamz;r{LU8y(~C)z3Dt>=Weiw;M}d8AvkwEXuH|Dv#0&V z&Ye5GE_UuN77NbZNLnX$?lPhU=T3sIkL=uCrt1VdcZur+=dOsZ@9f;oJRvxDikk)J zu9S{XcJAzk3C`W9U4nBLH9&CgTIjmP&fQ)I!MW4vFF1FWw13&T%NZ&-clI>dxjQ>Z zaPB(G3eMdrQ^C3G_EvE2ban{NoxY9W+|_IpoV!4J9qinB(s9quU6j7y-0h_8WasX( zq~P2wpzUPm&V<&Nojczm!MVFkualj-Pf>z%*Pr$uJ9l9Z;M@%oq5ZW?!xK(VCSxawv(N^+fN1O&d649?#5{d&RzW+!MU?F5S+WBd4hB2PuC%K z?rvPmgLC(Dtl->zBVUc3yMyG@v2&+BJrB;^6Y}lYxl^_joV%4uf^%oHQgH4nyang3 z(IpSg-LEToaPGdg&x3QPNFEzIcb8Q2;M}Ea=fSz_R+k6oPU@-P+{KjVv2$nKZjRvG z-PojI*1J9oX41?SG1JUe#o;?f1@?g_nKcJ2z@1m|v91)RGN z9ef1mZUDJ>?A&!EH?JQ#cW24#W9RPhM8Ub6e_wF!hE@yC-G|G9a~IYmICr7$f^&C( zoHusv#L1Oo=Wd##;M}Q*2+p0?UBS6~Eg?8}X)S_tw=hd^?k0T_oICOq;oJ@BAvkw~ z%>?I8I$v<^WFHF7-RiM|b0^(RaPFKJ3eMe)CxUbL`KRFAg^-WO&Yk^!!MSU25}dn9 z;(~Lxa<<^y?QVs07vJH%;M@(Nk7ws@bGhK$CHe@?ooJ}w+%>2Q&fVxqf^*lko#5QP z?JGEUs^r_TbN6w+;N0D`5}dote8IWPJ|{SLUn&LXE@X({+;tcX_7Z++|e@&fUFnZO$D%j-9)8 z1KONBvo`0BJU({rE?yIyyRprJb9ZT#;M`3je~z8IpOJ!dm#38n=T4b?Id<+sT?OYZ zyIgSY_Vy8+yU~GybLXEUICs|X1n2H_fZ*IMkQbag2PMI|Th>W%?pD+b&Ye*{oV)$s zZwStvuC(CXiMR;P-Ek|yx$Ct>aPCxE1m|w-1Hri?zZ}k8_8h^v%lC(Kx2M!WaPBhf z;oM1o@)n%Cb&~|=E?EW6-LaEuaPB%~zY?4~(MrL&(=8cViwOfpfPewilecF*#k~+?`r{3(no5{BLmXEV`G$xw|A0 z3Fl5X?gX5>kqeH(xzn_J3FmJ8%H?qGhRAutxeMsD5YAn})9-NZY6@iF+_|_qz`2W_ zb{x*##~tM5k#lG68wuyGKHCq@-7{|`ICm*tz2Mv>4!#EG&Um#3oV!7(1K`{hk+aIq zU4t9FPtM)CQRQ&%l2Wwc+;yxmgL7B-p*@_ti}Zbz9yxa@cP7HQn?<+-Wn^&d-=kE2SAUJmuG(W((>#lMT&Rs@EHJrQ8XQkoX zrQ9xsa~I|J9M0WM+0k(BF4S~^bGO=mF`T=I!%yJc#aAW5x%)6U0?ysFn_+P7Y6z@@&1_N;gLCJmVhrc5p!Zfdcauw$;N11K zj%4RaPH>2>%qAbzdQ%do$T*BaPGp|yR&l_a$`{tJ9mffil(!3x9Q;S zvFzO4-@LO1&YkP=O>pk)k1l2BZq@6~PH^rPb$`Up-Pyp&3*g*oXu!FPIFo;Xox6se z4|>44lN}wz&Rwvx-6=SCy{1lvbJz8Ke|GNl&RvOR=WcU{wL93ktMio6W9Ke(OW;#> z?xGvtl6M!F&{KQUEOzdGsa$Sh=g!jiyb3#a3dtu!*tyfXaM+NYyI8mQNOtZ94|-X~ z&fPi1xti?UX}uVAhMl|6sO>rI+=V-uin4PzVqv@Y?A+;PzWKq<-HrRNf3b6SrhBp> zJ9k|TN5`^rSN7=fEq3mPuGiSX&YfC*RzG&`MvA8tvU9ie3L))`+*HkWP#m-%Fse3*)6E+>M>GXD&H+)lDDi`!90tE{%w9X6NpHc836V?v9S~JiyM~^XpHF*tuJ9+gO>M zJDG{`GVI)K8l!lcoxAb+&%@ZcQ#*Lkgq^#b*WC`XbGKOEcp*D?Qc_Rl*}3ccNb?0d zcO6Y!jo7)nXzZ|sojdwXwHNH%9qV>>5j%IIi<^zvx$Dq=z9Tz#UfF}suyfZr{F4Ja zcb->f_^@-Apw(!|&fURbYpvP2ixV&3NX}i)&oA!JX6LT6O~xa3?&j8)S+H}rxX?_7 zoxAKk9ewi1xqG~Q&2@I}TsjW(XXmbJ4*7EA+(iVWbtdO-_Sdv8Q`x!Gm%M1p&fTFe zTFcnE>pe3$l$|@@=FE6@?slmxZO6`CsnjZ(YUN2U-iWYsH)i6_G3?wqY`+oC&Rvfw zZQWYos$1+FLv(SieF78=dS+sUXgF?+=UOhn8VJU$nIJncJ3VJ>Xfo`7iB$iC^>hB zJ|3_d$H$+_{EqwPEMZCU?Cq zJ9nyv=h(T6&Kmx`gq*uB6;&6x0O->v^l|jZWm;?a5azxJAz0 zy}GHZ4v}+rJ@LYf;pE)8UHW}w2|IW56BehCb9c8gTze`zck+foy6oJ|d)-rpox45( zQ*N?zw{()|I(F{-H+&h#&Yh;C!BBGUeB-s74cWO<6wj1r=Wa_@?oo2?Odnefk0j?V zbg$daPUPJEOy6Ev#Litet%$|s+}%FB&Ttwzcg3R=pF5CqH?Ao9s5v=z67O4nI+Al| z>3&YelbpLj&NU{XAW<6JxoV%$hw=Bnyb9Xp&gn=tLcX3m$SgMnAH{Q%qVjDSk zUgs0?-jQ=>{m@l%B{_H9x<<^FBj>Ja%=mjV$hn);^X2EG7LjxJ>Os0x5IJ}9jo_md_u$oOgXQGh4L|YKMxC5HrHYmN)!^L7cJ2e` z=IzH=I5+ocb=bLa6`cv^CT!V5I5+A)y1}_w8SMqN^ov=cdCYSQyXgv z=SFSw0XR3W+oi*~(X^0EVdyKoxLO-1Z%I5%-Ev*6t5 zpFaiXW^KS1I5$%g4B*_z#z+XxP0t88Hw~{c1?Ohg12{JuZrKUWO`g2q+@#GHoExu? zf^)MtLU3*ZwhPWpMUvp$xcz{0v!~ld!MVBqQgCjv7YfeJ_LFdKvc_J4bEDs16VA;^ zqr-4+60|Mh+(@}+v2$}%B((+3&3DTlaBeE1!v*JtL{2z2cLu__Y0Zv-bF+2sC&9US zF&NH`gz0NIH!SWw>g}f z7Ss7~ZfXO^!MVBQb_UMP$7PCeZXOO<4Cm&7n-82D{g+SR+=LwqgmdE-^bpR?z!5HR zZcdN73+KjHBo@w%uS+nTn=W!a;oPX-cmd}oKg}A>jcxyhaBjqsP2t>_S~AYGL&W*nBOE@?BUGBlT5nt{K=jO>2c{n$gCed(i z?01X9xv`(U8P3go`aNWJZoa>$fO9iO{Rf;IwXpGUZkmdF!nrx?BLuySrP!}=H?H1I5*iR zmchBP^O*tXW}eSEI5+j~ec;@5U10_1rhaDzoSQXK;&5&(%q-yCEQ@P`bMs?_HJlqw zT4#1{-dweVa}(Pv3+JXvOb*VCag`UG8?jkG;M_b}-xbbH=B8*kH^tk>!MWKX9R%m* z#FJZaZU#J^4(Dch0 zoEyobhvD2v-MJ6vCTizJI5%S*&%n7k&`S@_O{l&koSUJ&w!pbrQQHLP=Ie}KI_%tN zMry;k8NXE(&Q1JaQ8+iBT^r%t#OZm%xf#+)1kR14*4(CQK_y(Mtx!otjxw$wi56(@&rmt{rwD(2gg8=a&(aBe&j?cm%rz54*?W%34$jTdg=^v5bpQPh&P|_7OW@penDhzG&E`I3aBfE4yAS8)b5$ao z8(l?vI5#J|`M|mP^m09%n~mf;v2(L^SpuA!dsA1!xhcxCg>z$&yBN+*f#_;DH;ckA z!MS;I=^C6Hd0ACBH*c;f!@1dc!wk;NYx@OoZWI&!PvS>J*o3f1KaBiAbm&3Wa%+P6h`9>q#!_)GoSU)T4#2rt zINJ=)&3XlSI5$(~4ux~`yqgo8n;$*O;oL}_NQQH>`(_TD8^^FmaBhBQ_oLrnJ~p8F z#wj>AQ%p4B+!Xcx3g;%L@g|&`S+B>zxe;%$hjVi@OB&A2YDHx@HzS;);oL-gyaDHC z^~3AO`wY_oEus5 zKsYyjX55Bzv-ZOrI5*NZ7vbEbUfcrb<}H1n%FfN{Tsb&5G7gjB+yw6J2IpqT!;Nrm zHog#rbF<&=Gn^YOEk`&vY47L4xydVZfODfczX8roP0e{YH+ge(;oL;DKMd#Qv1kgM zn4(H~KMFX6hsD^`ZZVK)F;N0Z>Du#2Tx-cEi z&7*@;;oKyDQ-E{h?A{s9P3P|ZaBeiemcqF?>^mCHO=craa&G*-b%As9N%K0Kn++D9 z;oK-(EP!*fOn)An8zuWgaBgNldI9Gqb!rWq8|wh_ZpgX0Rs0Rk%@9i)I5)kHtblXV z@nr`%H|dF1aBk*rD1mdc;`(nmHz`$$aBi*@4TW=a@K`mRo9J(&;M_oSSEI>2Pk|f9(S2#@}x;oEyc}UT|*ata=CMrub70oSO@8zrnewZ9fgp&6Upm z;oRJG-vH;v)nhiCn~5$7aBk`x=fkYL7 zQOXTCH)#ip;oRJ<{Rrpgx7K$!H^WRe!nsM#N`Z4T|G`!`Hz$70g>&<&s|1{zYolY} z+$=Si1LtO`s|=hQ@jK+(kaHueIUCN+=^^ECZc4ZBfOF%iDZ|dq#&#EE;oNK)R}SZ< z#61bl&7Jda;oR(6nhfX0F+~*4jq-?KI5+R7DZ{y0<(vrT=Dhm~I5)HO4B_0o88I5p z%?7LAaBdp*cY|~Dwrne$o7_DnaBgmmsDN`5sPPNVO~r*ZaBfPRtKi(Iij9JE^Yn=( zoEvu~b2vA?eYe565$|3E=jQQqO*l8jS`Bb+o~xgRb8~$6J2*FUeeS}!nWuLV&W&$ym-_P&P~ZSbvQS=E=jP>;WH>i<>lESKoa<~4=Vn_>B%GU+X|v$moEa7f=cea|Iyg6mc@A)HQr|9s zb5m9~AI{D6`yJujbZXfQ=VpTKeKrtU{3oE!7g zC2($%Ow8fj>>NKC&dse&H{slD}|)eeJmlQm)ooEwAmRya2o*4DtenbSi8&P_;BiY_}h5!%b(+=T0D z!nx5oD5=ZNP0;h5aBfT&8^gKLA4x6-IX4}z_JMOFAF>k8jX|gsoSS>9$Kl+_d&$DN zk=jR|4LLV0u^r&tXel3rbE7@j9nQ`Al*4dt;_l6db92G-E}WZ$5*au*T92#X+$isx z1LtPoFLGSSxp@{w9t=4*i5_R*+=!kH(`DzT{>x%GH(De1!MPFd{t(X1YBXc-6BYMc|vU3x>w-C(y+=K>i zfpc?8VJDoM_9=S>=O(X*;M{m;2+qwSS2#CbwVUDGJdt_{=jMBZ1Du=cJy+q}bSY_p zb2D>h7dST~Jzv1NQP=+n=jP?fZ*Xpwj#7kk6L97NoEwS7(Qs})JFSItlVLI(&P{nn zA2>HrHMG9u+&EiV!?{UG(1CMfwm}8XP5QF0aBk$LuZMG!_DPiQaBlkbgmd$>urnQ(xb;zWE^wu&(4k7g=yyO+;q*FdxM>ue!aWgVdrMv zI7tn5ZZg(qFJ$Lt=#)Xz*}1uUeO5C&H#xT_xv+Edd4>VGL0L-2US^XQ^y0YUxeF=m z+(hR*o59Y_wxEd1?A&baoi&@C8>@&LkJ-5y&|hi?J2%6+?z+OxjmEW;#q8X8={kI1 z=O(J%h3D+tJi2A2$IgvW!E`ZpZX$-Addbd>dEkDUtKO*0OQrMn09H=cf46I5Rqq4t{l-d+P{0 zH(P>o2eNZBDs#3eJ2$%r4j|X*$j`ze)gI*BXr#=kyv)u`u+q$L?A)|_De;P&8|942 z4Ts3NSzi<25YNudDl^$wc5c>g8~vP}o1URnU)Z_nR(ES1IXBjMqqM)#*W+X7j0083 zx!D!we|82rH`=Vngrk%>RaxiNipJ9`m1HzU`r{nkv*O;+a4!F$QM*)!mU#Zz)_c4!Vg z^@5z6DbeF>+LLoLe_6N5!^ydEKC<2WEIBv*zj~Ut)0NxSx^MFVBXVvM#_gM2OwP>? zog%R~a&C-#E$*;$vv}(Qzis5)7@J<3rAE$8XwE>_dU9?uddWoOl5-<}PNah@IX6po zcpma1=jNUN57QcQZj2{8UR_Vl%?JOXMeWJCS$=z`$RKiV6mC~}oh0Wb`)T(rdF0&0 z?-bwto}3%6Z$=yR$ho;Px2on5IXC_Eo*9x8Q`S#su3a!WH>%!8tkcQ4nLcq#WCl4m zL#;AwO~|=Pdsy`B4mmd|6%%A`=_;;iJ!Cez9XU5q^+sW*$+o!mrD&Zf1E3FQyS zxhXAmSB)U&=6m*WS8{dqnx4x(+dTOoH02!&3zUrP9^8&)QSlY&XaTVEHY@36*)HrS5_SL zAm=7-T71z^a&AtWRs0|aDSz(inI^5|+?@ARS#+43n@Ou(tqzfM(_6Vh>@ztxF>{s; z|3J=-RPut&66D+zZrvmnLC#G}mfsjZa&APVuh+?tbJN>*)a@j4ZUQYAxz>_%vpZ5} z=6!N*)=xjBqe#xpmXtv@^U1k+c{!}!iJY7I<>gVg$hkT7QPpe=IXAmzi*`vP=jPDm z>fMvbxfxQj?d3soZj6j9y8R~SMqSQmHvOMXKS|3b{XXQ}bkcO#twqj_Tl+L`RdQ~2 z4m#|zl$@KGio>Sk$ho<1qcx?KoEux$%~t2hxmnjkZNDlxH|k$sl{t}flM`4ix}Kby zz9QGZiI8*SmQ~cONdHbN>20yTjGP-i* zH~j~$A9RhJ8;P*-nz=(PrNZU+Bqt-MG7?j9hc z_sNT#o5zZ(oAt=K8I&g$Hkq88%=A8)*U7n=T<&%&pPZYpq~hvAa&BBYCJ%`r=Vs6T zgm>4;xhX4hPv}9;O+&?Gk0^3((tjUu&L-!kW^HlPVRCL}1-_mVMLtcbx5=P`>iM;bn;Y)9eeEp{J4#2@U*5S7cmQk#VhU5BT?;hRtp3)3@yzh4HV~XYIeZ z|G)bkp))2bGOXl$@0~x_z(7Q# zqe$!j=g*(*KAS7NB^*N{BC1z~_y3$dXKx7aD+)tIWHD$bnPB~iE0TDM1Q%VM+X zM|3F%d8gL3D?N&zvHd^$kFQLB{-ZlP;Q_*5{9xe-Y}*Wa;D59$soX{yiPER}r$7Jt zy0-hD?))G0mT18)l2{O{eN!#b3I8r`{$Pbp821DTrF;UDgT(q)qnnaJe3#r?>?d!+iyB^a2yB@TU|LMG$ z)Ap6}AM5z|^Un%;DedU(-~9fcxAXjdi8nodou4<;y34&qrT{@j-ROWxG zLfbE|w@OUt^Jx7%@##aRUXovsC$_BGSpNDo{&@QD-~HZ^?&ClFm_Ogt;O)QK7JLLg z;BS53`S%{ri~b?^-=FV0*Zx_cTYuj8w`W@0&EKW|Ed9UzIHR_km*@Z6_y4(ddD|Po zyx0HY&!V>b))xN7gXk{&V}_<;!Cyb_Kl|SQy6fcff5_wNzivGo{&zj-;Qgns8*cxP ztVds*lI_|F*A>3_^PfNS?{~e|wylq(@PuuD|LgC&*8Yq8|GVE2uEQNgCboTI-OGQy z1%JLvba?yMk86AJB7J54`g;AU?P)$*{`KP&+a4!*;jcgM|E+uf^>wE&Hs#N8^~cTs zGyneMO0rmZjsLU#d~#XI6ZS2mNuKa*@_5)2UfzLb(uv2GOi9KP(Y?`}lr!63-i#_2K-VXAFKP{$7p72}p zlGqa-z}vaabm3cahS(Dhc|wys;m*7r{$*eFPSGS!n11gXo^U+5QS1q)ETKuBu*PGW z+ub>yVA8r@g#`GuxoY*PR^Uak5|A5G-v(UUEGFGo}7_GLw02krG?;{1Ba6ONxo zbK<2oP9j$hzDw~nUz^LL`;fw3nXL>?1+!d|@2Dz=$&r8LPC_UGe=JYgI1om!RS z-;SL@Q|Wt{6n`G_gsc5&_6zSNBSllTB(KGmCV9deCekENc%%zW@`M+3qe-6dyZJP` z?$X_Jm?n9`2Lfo4C;W-uZyyn(olg!edBO!rG+XRFJ!!q!6Mh;*vq`4fAd)6|!hQxc z$rJ82mF8Qsxsv>N@`O#U(X5YI+fRjNt?JvY(`k|?EKmL%d%|+xX;x+%&!gjk*! zX_6;=oS%n0VOQEO>(8F>s97{OetG$o+&K1xr%#|so^W{s&DGa7-r(0mo^U>IFL}bnyk6u9yN;zvp77o* zn&b(m?Wake@MUV;rLvd z+ zKeH!n&XYXhq?t6y6MoV}bKbjK8)(0?CmcJJrnY!wKRT}26As!$bMW5qp8Wje3Gbux zl0D)5uW7b3KR%%+Ilf<-Mh>I>&7SbZgESxJ@2V`NNuF?h8cp(qAJfOPC#+pbGu5}? zcR5Y+g!j?wCQrERGhLV16LyQENuF>OZ4Z0GRPnct!`$rCmlPm?@h@r^Xe6CN5*lRV+AjWpH8x3$vsjXhzv6q?;1*(AIr@0UDb zJvv{=6ZUyiLz6t=ZZR|qs&ziUph=$a=?I$S2~SX_xm{&p-y)ji3Fp%B!=CU6x-PIM zJnSw_@`U@+=OItn_&YzIJmF<4$^Ru!*y9vU@`N8frFrY&l3QnJk|+F_o`*f*q4YY~ z6COav8+*br_h^zQe4D=hu_vrXubVyL;Po_ndQ7}W>%^Y$^yf6m6E?7+NuKa*+Ry9> zckD}(JmFqWG}l?}QtL#MJYlH?G|3ZQPRApA!dWIXyJi0Lq2qx);SMipme(Y^E7BxS zIL?t~?6D~2?KH^~Hr+yVh5Qr|I_}vMzCrtuJ>iRV{bNtqCz4!X@`NSm`aquW$5uMN z*b|;$L38{5+E4m4$rC}G`y1ua|JSC83R?m??Xn(LLeCiEN@`P{F_OK_M`-vub!t%6k>%yL}K3xyV z6JA+=nx;gP-xYfO>!A7wVt+vJ>jjDG|3ZgpF^{UWt72r@`A||-YrIxJmHSd zXs*tjnRye*GDjy+*9`n>E3 zN740%JmE2gbe&*NcqnZzd%{a5&?HZ|10Bcg3Gb)vdQ}$h;y~;BDkM(Ro?bV5!h@s) zPdMR|;0YVj=OIt{z{Mr-ggaK!`SzmduB3;R;0Z5nFL=UQbllfJxWC_l&iDG@-SOpg zK9VQA;4`fYd&0X%!4qC_ZU#JI$3!|#>*|JVUQ4&LCp>SS;0br7An zaP(n%{m-uLH|wVaPuM4e_Ah(FlAYlRS3Ef^c*2f4@Py05=<5M_!hKVc1W$NYKfx28 zMPDx;&sr7jDI<8owjS_=zXeIc6YhJ9){Q*jf#DP33IE(c`~BgyQR_@{;R!pPr1QAC z&VH9hIXvO;@AUb}6YdvH*H89@JHHh?VJlkCs>pk5lIi2CWCz<{KPh;^rmcb}Jmw)h z;mSO^zEmho@8m?+zw+33tvg%=Pk0&~AM6R6WWf`bzi{IZ20L2JmIn{^!4qIo#muiv@YZcpLV7Fd3#KN z=kIm!gtzC?^WAFf+QR#dJmEYSZ^09mp>?|{8hiKwef_(!*nNgQZQu116X!H-5j^2; zm*5Gf&QOLYT&qI+pFCmH;*0Qv2Op>XdNtTQb}Ox8!QGBUF9P5Rrw^rdzp@}wRh+J4 zdy|bEMCkGt8)WN(emReBZgFNA;D0*Gw34fZ<1)lKKVmkg}-t3Ky&4wquf2uq@;Y@S79!8HpGD>3?JYmx` zdVS;x%O<{rCmi^R)+ti5>k@M4jKeR?G76yMf;{27s`U6UF`M}t=zJtkxbKXg@Px;o zqy0vnaO&kWc*0YfXgz|Ok7vxKb=(%X$-BlLo^U5;I!?(G-fv?FPuO_XN_fIuv`gU$ zA2FN{Px!VU?XL|*Kfev8bs@V8l}|UVlZGd3e&{+pVTt$y@PxaKq2pM8<`<>AwC>~yzdGF=p78xUv_G|N z$>3fjNq3H$HxfhVkAs0>ed--ki)g!l9u4^MdHx=MJ$ z3eQyG2}|sz+m&h_Snr_EN1pJ?tMqk^JmImX!{G^E*hbq!o^Y|J8$985b!XuT-zyvq zPk6WU9eBb^p3&pQcBE-e^n)kd{PF}m;kknc!V@ku@q#COMr%GiVVg=Lc*4)D*TNH4 zYL@~}_`~Gk@Pxmt?gmddXT=P7!jU&L;0fQUe4NLg@YYJf6FzojRUUi7Bc9Ryhj{QW829v5c6IeGy+;if|ReB=rHEO%LAV9t;tsKgk_Y;`~6&V;hv zo^V{uQFy{dKRUn@j!Pt8_@APpwqdvU3`~{xyz?2$z!VMd9 z;0fD0{(vWZE=3cbu!7nJc)}&CUEv8!pXv`!So3N>c*6U2r@<2rZGRb_@J8nhc*3P| z1KAU9_>oDD@Z25d4wu`*6W$}!!k+MwZ~aQ(35!{(!4uY7DhW@x|KS1fge6_w;R)}G zcn(jvgIOs&;cDqZc*35V^WX^&eOL!ic>3NC@PzwVNy8H^(eZ~T9Jitvo^X8SFL=Ur zhn4c!6Lz>;1W&ksSSvi?$06hpAKtmdTXQ2k;n+2H>bEn`F!+n3^taXUgnjbr z;R%O04TmS3vR?t7u(bVPc*0$6kHZr_`CbQ}@UQ~_`?2< z@PyM}U4kdk7_sqloiFCq8$UW2Z-MHM{ZNxgT% z6IKgSfhXMa#5{Py9h~&x39sF20Z&*%Vj?`@MNKo|2|Hiy3{TiTE(D%%p=AX;;oxWe z;0e#9??Vi9a&i_#oq#7CDND~YG~~&-dEMa&&z$-Zo^X2qZt#Ri?5-aLaRyhBO}o^Zur z@`cG0PU{c~Pk20aAoNXMI?0*R?bV=VQKn$G%ak;;X%7I;0fE< zsKXQP{@xXyu*>mac)~}Qxxo`I?EMCw@cg~$@Ps$((c`3-Pp?`Q4NrK=5FdELx7Ebq z317dp44&|=cu9D|!9#Y!6IL}Sh9}%*-Y$5;nYTK@6E3}O2~T*L)lYcB+tU}ZC#=eOHtGORSYA<e;hulB+d4x4fvo^a(rMR>v?JqE)Q_K7|N zPdHQj3_RiZ!&~7A&mAZVPk2rL7I?y2M)<-LE}gRuo^aZoGI+vs3{N=s z$u#zaHD2}1%+uA4-o9?)KzPFX)l=XJSB`9iCu}Ab4o^5BIGH`+gcj;#=|mlW@W9vz zp75ap@`m+O%!eJbC+zl;Tw(Hrm1oapPguF4#g9GV+_Hin z@Pzk$F@z^<5bF(3ST?aUJmF5^weW-&XXwKd-coXsJ>k>m)5fwV+~w0W19-y0KZD>2 zE6?h}J*KC6)JW#QQJz<$w-KVoBtXW+x4NrL9=SA>@Exm2w3D28z3ZAg`4u5#U z+smui6OK!~ejA?f#6uh42?um&fG6xXRTrM{()3z*!WMhFuqPbX7ywT=tvcy9d%||f zLF5OMC#yz+=7mk<(Pk4jZHui+4?)2UWPuN1yfIZ=+D(`{p2@fc)zrmjH z&xYT#;R&x)3t~@LZS1-E>p0JnaB=&^k$6vp|o^b4-QFiPJAMEJxm_6Z7bp|Qy33pol;~aa!W_3TuvnOnI zb@o#BgtMZ`PqQcdC`5`JVTaw$opx+uPq=dK%L4Xi{WFUPPaTp~NQnmyq|?+4FfPk6NMpjP&T?ZZzFXHU4h z;mRlM3D3KH>i~PgJ!RVauqV8s(O-={VFS6+wd@HeCvW#>Pk8Bu!fEUYpIxibl|A9W zo-Z%6C#(>)>J@v!tDbCJ%AWAcw3JHrgu^DSeM_FO^Y5hdd)X7Vv(>xJo^XVhLnV8{ z?=xQ=Vo!KS?C#g>2@i^BxyzogVh`;G_Jre?kGsU4@cIB*6ZV8nC+r^0p0J0CUkiJ} z{g<6R%bxJ80Edz62|x3lxQjjEh_ZL)>_A!?;li&Wly-TL+_L937aXosjw$3eLuDjd%{+ScI{$M zcvEXh1$)91#rA2iCmj2u<}`c4{p(advM0Pbt=gGA;Tn&}-`Nw6N;|WZJ>gWX9BKB1 zyQr_|%${&!j_wWighwQG{mPzjp>_UD_JrSc+pv~BVK=FXRqP2nZD?xGp0J)#zt!vs zCx7>|Vo!KiY_b_V;kE0k;R#!duZJgGW&RbO@Uw{f>?mhPf zd%~SHQzF?De&avbf<57-(xT7U6aKno(+Kv2T@L3-u_yekBct)cb=&2X1BJP_UDEF z^~3+>z5n&cmD?3zBmOatt3L}i$HUgsc9qvuuhp)&X_lv(<0^W~$<+(*JNXE|_C0Hj z>omT>+Qk}o7}(i*xH^i6n6GrSht>2EY9h8a!VRn1rc2v&Zky&~|M}y`(&L32R<%u+w&~n9jclz~+IonHn9O(d za-j{e^|rO)XZUke{yDCMXZ^4L8$E$}O2fG)FkqPT9PSB-_dN6wJ%J1hIrIeXj$VhJ zz#7x#=n16yM4~4U_%;qbfu-kj&=aUEtl^$OzDoC<=n42{-RGV_rp8Y@^aQpKc0*5~ zS@k*h1R6zC&!H#Kcx60#0&%Z|ov}B@POXexF=xTWpQWp1RC9v&=auwHI91%C!}}0M^E5U zb6@TWBx$bJKu=&=zenf^gwH0@)89b5CHoe4j-01isCAj-J3$ z@2=bv_%P=36!Zix&CWqjAhg#T?g`9L8m@+(K!wo{^aQHHjkzcANvX#h^aMh-_eM|P z+ru361a_^Ti=M#ml>z7pyrVqRfYjD(>)}o437F|j;GV!}r5IW637itSKL$O4aoq=S zPatZLlmqt!!bf$8M^7O8%n$Af+#YKC7(D^4w-dQ1U?<*g1$qL8d#9r(5LZyeJ%Jt~ zfeX1O(7#hsDS84f16t4%2(uI6p1>^8LO1RSOqjS#f_nnJ6+8VzPvDos5$*{bR;^gZ zJ%QH#gJZZSklDZ8O7sLmq?OPUsPKzIPawB*33>u9Hea|WaK8PBeDnlv+&Yb(K(XXw z^aQMuG|&@RvMnDyfwwkk=n3q8_zOJ&ja9bj39QrTg`U8LC@u5^G_}pRCt$BqS$%m=j6Y!Rfsz*=2<=sm31R5K~xhHT?Gwud@ z0&~5y(G&2SagTcfDShs3MNhz4%Xubx0?m(Bq9<@-Wh8n6iDP}aC(uQsV^8!17C*SmJpuV1y7uS^Bp6UfKum3D zV8<=!3G7^=$UT9_L%tcKC*bH;%sqkIa)tfS6S$+0!99TiT^6oEPhg{kDtZFiVjsCD zpey60g`U9k{L$PKi0&xwgPy?E-wV(act3nBdIDAvV(1CPoi;&F;8d(QdIC3}KG(5m z?&B^)e!6A!%i5FY9ncddWW}*w&e%Cvf-hH60s^f||k7 ztI-oEl_^J0z_MF1dIE9t<+&$trT_J{=n2fJiQ=9>*KSLy(G&P#GM9S-trFCwuz&6+ zIl$r?dIHa!(*oQFSMJ0ye|6(G&QUSc#s% znJ{DY1h!qjiJn0C)dchev>TtJCtxD#jh?_4J4x;d)Qwgifu2Bh@Ko*zjFdmW9zB7h zsYlThF!Gk;p1@>> zJ%Q5ZM)U+u8T)fjAX9ya6ZZu2`WPP8+2pb5-M)Jp&=UyTUx=Q-)%7jh6L_FlHW@vE z70#WwCt$0vFA+U~Q(tw_6F74=9X)~jan0xnt=n33@*UUWuy}mQPqbCq|Y!i9{ZZ7+{Ctx@6c{6$fnQ>jYC$PRt$K&V; z?C*CKJ%O3V)6f&J%Xr8=0l#4r?a&j5dFqRvfZecX=m{KgT8f^)k3nYW2`t%PfS!QE z*vIGzsMtlICy=hyik^UZlN0v@CMmRTKu^GR&Ij}ap3PF`p1`JoQ}&@Jkhx|L=m|8Re1M+7`ufA@3H)%|j-J47x*qJE)ZeLZULAS@3p{#oPr!A^CPnlF zZoJaroV8F~W0QYN4$km&2qJ%L3=sb9G#uvWw(7(Ic2+fUIGsImw^PvEoX zPxJ(0dd8zCP^!_FdjjvIZKt9quuOItdII}fKXXq&Qbw|bdjf`?H=X33z`EXtYS0s? zqt3-C?Z69%%r2rQa6--+Jplu)h1?U+=rTnFJ%PtREYTAP`OzIc0sqaj&=bgTp3Xf1 z#ffj#(G%EUG6_9_Ysa3UC$L!d6?y_z2MW*=xKug|JprrQUg!yYtnI)(fddon&ElRw zdF$c2K={3r=m~6mqlcbA{Y)e73HWts zSb(0uHS*xEeQO%|@}35I0x1$hxhIe-{_!Dt0xQRlMo*w{=N+9Jr)4i~cpQzMK-3s_ z^aQN?-{hXar%oc}+!I*dDO3+Vfrp*Gq9+jiSb=*2=X453q9@QSZOA==)kC*LaZey` zNYEnm1Re)>M^E6;$j#^pd`$2}PvBD39P|Xtmt8|oV0^b}=m~uBlHs1fV&x7_=m|`` zxeGmk)z|u=CvfJ-M)U+?I_=?}K+(u6;^+x{xFCg|z@6|3+!J^wvhW#t0>5-#qbK0{ zX&?6l`t+mk(;f_PDt%$4jGjQI{xS3fOf22e6Y$G-Ku_RJi9C7&U&}Y4Cvd|nnR^22 z+Lm(Y30xnPhn~PHEiLo}j{DW4C*bLL06l?qMdQ#DDC<*#p1>~Z`EXC*`_4}23C!=^ z3q1inJ2UhIG%{wQC-BhyGdIHsrJ<$_r>F@+Sf&0=e=n0hU+KHZk zsa*&31Zu|{p(k+T>}u`_%Yg6VQ^h{=z+h zyX{JJxF>LZn6(Y}1YU{1>Bc<)#a>Tb&=WZ8<%FIv!1J%L+&9-t@i{6RB% z0?84z=m{9E9?d<0S)-zo&=W{M6M&w;(KqD$-LAjyPXDfI(wkc|a=J5m0!cDY(G$4q zya_#lmG^?s6IiluFM0xNA6!9CAgf3gJ%Q96Z^ z>to41fz}Z|+tCyFZfC_k0r9RXtI-p<=90rbff(6QkGUr>M!Me;^aQ+G?r={ab!fj| z=n0(79E+a7)odRFQiECGr!;p(pVDb{cvD`|?MjCs5MACwc4efjy(j z(GxHX4dk9coa&gL=n15skwi}*&(az_ftyVexF_J+Bc%#Gfkk6w&=Uwbn!`PTfjXzZ zpeL~KcnW#~VK&paC!io5dXswsS#rgh=n1%+r*Kc8huqly=n2%#&f=cHy!PWg(Gxgv z{{wmg)p9}T31o_{L{DIGnKpU?H{?HXPhihPzX0wDkY&0DJ%PFa@?wQd&Z31}}}gPwq=&H(fT%Eer`C!i*BFd97pZp=m|s@enU@S>ac9|1oZbub5EdN zLnaPAftpp?+!HWR?KcHIfyJX5(Gz&lu^K&rm+LO0C$Qp+K6(P#ql&mEa8X>sk9z`3 z2da}tp1StRr(25X2?RGC)46UZ7rYY=(@P4&~z6R>Njg7eGCMSN#rh zPoO|%js|)HA1c~$PoQ&e%K_*K*xsw=o`BDy7oWK&(0kg!I`jnWgW}N>s8Q<9J%P08 zj&Hdq;JdK~G?RNh5j!hnj4-C$M!5Iup{HbLAIC?66=>w9=n zw|mwt+!OE{ZT1p9frLf&+!KgU8~2fW0^_|EUZ5xNo!onsi=Ry;k%C*Wdl|A>16$3qiz(GzH%M#s^#-})|{rMM^H zEp~qi_XIkKFBe5mphTsI?uatooMzE z?g?zzX1bAk0`G#oBDp8vt3NRZJ%O9km!T(6S)s>00T=zLf#?Z*l_}w#z(RxC1oQ+- z9jQk^J%R0MXSgRYSz>D@_XJ7@*1kYbV9{=6^aNt&KSWQUWTgyx0<)v;q9-se^apwZ z-uXf33FM~da8E$7=y@&o1agj=PC!p!NoW}N1UfgycScWO_AVRr1Qs52;hw;!^%rJy zPvD481g&G*N5fI}bUm9Ldv4F6XWSDo>LF&uJps#a$F6cuz-@22GWP_2JO~}kJps*k zKccxOFtpfa8TSOV^DSDqCt%sb{U`SXb`|Icb5G!X<(uK$6R^8oAH+R@P1QQF+!GjH zsj-WD0y_s;-{hV^etc;-_XG}!)X8#BU~AevXX**~|1wmT;GRH=NA_m!2~dd1xFmApgWV47@t^#E+Pm|x8ux#1;3A16GE}0H z5KV?ci53l-l*&v}DG@@1GL<1ANhxIxAwxw%8^tC=Lc5ZZM251{Kvaf$-k;BR@9SL8 zIoJ99&U5~G&Uv2Wy7qowtF_j>?)!Ux?|U`e>-DBSfz=yz=TM(OVRM!{^$Ey*-Li@L z1YQo`Rz`gSAw8COQJ+9nA9o+>6A1HP`#bdsjI-IUMtuT0JxZ6rG6~+2|ODJ!NRFw=?p z1Xd)Jb)r6jm&fN`pgw`o-*&;{kM5)WJHAgspMX~L`C1A31QyNJuo)?PW%N0!cZSc2S=|h1L~I>JzyA@q#S%2^`nx zG>!TM3O5f~Lwy3nhW$mw^ zK7ncXR&}C20T;v3dDJH$`zZb%^$8e;dETWyfv_u1hpA7%N7Yr1`ULjPuDT*oy4~7b zSvr^c1l*$wv`UKXR9Y~};0ezW-2I>>ol`~(T`UDd9d~QR10@fqiji5e( zqEEAqP@ll4{y8etCvbXRyUx@naBbxWCF&CxcF`%3`UIpEeC|`9fTiBSv(zUrKyh&= z^a=Pqf9JCseF8hbKVEa1`UEcAY@R`V0;aZEO4KJXaqIRj=o47;(V#Y-`ULXc1bnAH z0gtEnzD?FbsqCh4E%gaRTrb&-pVOXvbGT%HK7sMyH(zU{J^}R$0iCH&Aj2+uIrRw) zx^AUFeF7bpO*le*0;`71OrSmi^VaW|sZYT8cKK}T6R-_gewO+K@}KL~P@h0idge*$ z6IfjP@;UVhJSn)kmHGs{ZSpIqPvAje_YKr1AX~b{mih!b@0WB&pTOQ9{Vt!TK7oC% z!4}jfuxHzYvFH=n^QW#uJoO2TU9)p4^$AEPzUfST0#$pIYN$`3tz_IY>J#V^u}p{h z1d?woF{3_#1HIM`r9Ods=f}xYpFph1!aDQ`_3Zg!NnSXXTMtuU&!_n7>K7ky+MS9dHaA<=Y ze$OBu^=%J+kB2^issy(c)F%)gJ^DNK36#3cwx<XrIPx>J#WAojQg31QrY(_lWug zUPbFI`e)aL{O$exo&Wjk(VBXTYY_fxyFdSIJpR5;@$dZ4kB7uWjK}|6uSnz2PHNX* z*AM;we!b$IzsBLe$8}Wy?0EV6I@Z7Q|J zWq)1A`u8)%g8uDwz1#nKh5s6%F?s5g$&OPdnrPtPaQrvT3jgjvY1> z;XhV`B7kEJLPNt)e<=P9qbL3E|Niw>nbrO4ul(cN@WRNs%R!QJXMu!s=LT1ToxAr) za_$XJa_-!aJq!bGHjg&K=Do za_;ChId>QzcJ8(#;oPnGh$QC@ufxt=Ad;Lri~~D&1CZq0g(Athqvw-zr+_5qjvhzO zogR{$yAmWhclJnf?yexoxx=`#b7zc%a~JaoNzNU{ot?XUBsq7tkmTIaY+&Li0xywV6bC-)G=gtgC&YdlioV#;Ka_$Bp;oLRU zBFVYKd}HVCHj>_>9$vfd)$+~pJ_$+_!*B3ao#Liu3B%Hg(FGzCkjw7G!I9@1)gmZWA9g>_ooHy9H%RrKI zhw&umZg@75oI497Id|$va_-!bi6rMv7D>*XC6b)G^YG%x zxl=^Kx%-9lG&^^TkmTGgK*G6ug!3{xcgv9E+)Y4|b0>`?=dM4JoI5O^ox30;oVy^5 zA31jxuaR)>rj{e&+$Gc@$+^RRBj+xV9tY>{zsQ zICmp)e6e$fuRrcq8ZT*J>o3J4?(fa_(fSk>uRTBgwgQMZ&pjS&t;=t_zZ!JFE{m zcjK{qcJ8n|a_&0gJjl)+<{>$EmvP*Zb2oA$lAJpYB%HgeNk}+%gI6HQx$B37bEo8q zgmc&EkA!nKHw7*oId^T4BK|FC?71Wrj#NcZV=9$+_!~c}LEj?H;6u>eyB-B%HhZ6OnN4u4A5% za~FX1Am>gF#~(R&EwM;AcO#vVaPI1jk#O!ZMkC?e&8bAfxhuwTM9$qT9IxcuX`MsD zxr?}jgmd@J5eerm=?4khXL&RqwL7ddynFOhKWwqrk&b0-sk zgmc#y+fUBj=42$CyLmI=*TK0PI|>QsuCWyf=k8K863*QNoF~Y+ySfhv=dL%#g`B(H zLy&Op&RZkl+%@C%$+^qH{3PdYBIZ3gcUCKraPDmNkZ|r6$s*z0O~CTVxqGXPgmZVx z9*!NHyF-{KfjD&L+VuXZqCxzpcoI497Id{9KBjMbUb4$)$>~BaocVFF+aPIsX z;Mu{stKN@oV$eG@a*8+-AqNoxs$>1M$X+{4-uYHcLK3yT4J9#z?zaV6)@uShs|9=gK0+l<$J*>$+`{SLyp3(ptM-5Q)1$hn({ z^V5r|fs2wi3+Hb5MB&^u;QfW1yL|(Nb0!cduS?F|op-{yv&Q3!)F(RW zd=t*yb)3)1x%0;3$+-)~dA?Bj*E6$w!nw1;@m|o`LiOq<;oMcJ3+Hb5RpH#-#W>`Z zy$D}}`9RKH^m^gkopch;ofYQAlYQ5%YLtX?cjLTp?rgpa=gtT7m7Kd~oF^YenuVp! z5zbu=UYDG^1sK1FNm*%Kmk8&s;Jt9}JTioHSMMyGJ6WvXz3H1zSz%nW6TiP1rRD^KuY-5CTcPLCacXqDAxy$Y(oV(ft;oLo|7tWnOmY?3`S)&K$ zA31kN&I;$wTv|AH#t(&aCx!JT=WbpX;oNEL5YF9$p2E4CitQ)ou4b2T?v7(z&u-J) zuZhPcZ8&>qF$Kf z%yIwGM77nrNOJCW;eDB$JAHHE-2IN@n4G()Yr?r3jpIBnVD$r!&1u5%PR?E67UA3tJSCjF<+z`my9p)2xl6(RCFkxkwl{3a{BeIi z63*R3tS>otd6H~frn?#AH!x!z4Bcja2)-1Wxs zK+c`-ZQ zNY|!3x)tL-IKxrL2gk*r{!;2sf`xOp0ozN?-C8V+D4e_7 zp~AVd4`Js{qk6q??gl&%&fUz_!nv~#7S7$J5yH8SEOzc9zGbm<7rIC|cWuuK=MLYuSl?XK_nz8X;oQB1gO{HE)xNq? zICo><#F2BSaaA~XBg2JrH#|c)cXxjZ=WcziaPE@ag>z?lNjP`qaOA>wo-7L=BAmMd zJfEDq5FjgP9GM| zoi#kX$)!Fg9s>g+MmoQH_cf&P=b7$OFICpZ_ zgmae^FPytzczopC_4z2AyAq6d`@l|`;nu>rQ+g?!yEYryxjXpnfN<^{vV?QDB3w9k z7ITDi7oaViyZnK|xeJOF&Yj{OcJ9hcp9|+MPf<8``>lj?x8bpH?xtD@=WaZf6F;RO zW4*L+?qvH3=g!hsICo)b!nupH5zbxD4(!~87xfU%o!LI&+%3oYl5-aX)7yGZLpXPxehBAI@3L_25}br{x8$X8?)Fy+=WfO};oLc&7S5eimT>M&v0ONJ zU*CiZ=k9u@aPGG56waMKe7nUbE+x)cAe_6w8N#_66e*m$WMARjZH{K=ZcVn2aPB6> z3g>RRm2mD7&4qI(H(EG%ZtvN-3vZ4W&Ry)!EOPGl6>JpFU9U3X+$m0A=Wg_4cy>2c z-VGZ!QaE=$>B70wXfK>QyI^+i46_~!=Pt=rICra$3g^xVkN335xhsECICoLUgmag2 zUpRMGui3fVn}g+$bJyO1ojd!61?=3NdGeB-JLT3F?A()sBrEy z`v~W5|5xGM6-*J%U8tXM?lzPQ=T4=UaPAbY3+FCIUO0CpU)Z@bmxV(|&RwOgaPD09 z3Fof4gK+NZRD^R^P{z)kf`1M>cS~#suyc35>sR62y@sbZ;)d+hAai!^g3TAQb632f zg`GPy?}hB#J&wA=&fP2iUpWGo>9nccZ?mvU8W3dW)UA$m#m*+zn{D z!_M6m1ub^&epi%Z=Wblq5O(eg{5G?5r+M=^J9pouce8UBTQ-uNyK=j&?A%2?uw&;g z_~RvZ?yh{VW#{g!=|y(#=E5(Q6sK8)^tsH=T|^c9yGwQ3Uln&^=kDr|D0c3q>%q5! zbJy5+COdaIUk0&r_d`pAoxAX<_Uzov>hhAEyH8s^*tzqGe#XvSx|R_+cgKdAbRp-i zq^tE?cJ4|~$+2_iZ8wmeJIn0R?A%Q~7D>*XNB@ilcJ5|d29k4^rj5T7jB}D?MGxPV zHBNi%+E>Y&*tshx4I<}mq_XEEcJ2Z`XOMHZaG1tBa_&;Ca6TVva5pfk>NPocJKI#d zk#l#v^Bx6u?p}Myv2*vZNtKd|pY;UA4-GkL29lPdSuH&Rv*%=4^8ALT+`BhI99$&E33Qa_-E7r;i}#Zc~w0 z5jl5nr^>;zE1eeMZ`OgFySUFfisalWIw<6lbJyY!w1Awu*(o6>$hp&~UOAtfyKzd> zL&>>2RBk(+oV$T%4y2KD_uCDig zcBM{#m-&f!3KSD?y8ro4tU2itI+{wAS73#W`oICq( z9T$^xw{8BGqAWOfdL!L$lXDkY5}QQMoujYHBy#RDHczu4=WcUl9(=nPhqoyz1If8N z^t;(ia_$;`R^BA%?oNSH8*=X4qU|@6bC=v#rwyFD_u5(`RLHq|^7&-|oV&$l@g;%e z+?|Shn@Y}I{(F!K+c_qU&~B#?p}X~?+54Z#G)-XDV|lXJIMd(u`ocLN4EPCQA@-LpUToh0YZ*7a09oV%{w zG&79Ixl0+m-~~B%i9uP#W}g_l&%!MS^&-D}wlICsk}hi~di&Rxl211~stPhG9uQpveH zdeWtsoV(|xRRhVnJJ7tdkes_Ws-_We?kc1&AM8TT-Svv*EI4=THQoftk#l!6v!XAY zyR^1$xk_;E?B`VNo&x7CqWhhm@8I11NZ9(|Eu1@}w$l~w!nu1K6EtlGoV#4re8ov{ z?u;(}ZoL!Eo%}POIf-!YW>3{Gxd-P?%dY>vzHsjR)GWKrfpa%ueXp%%aPCgJol)xr z=kAEygcKz>ccYXumP*69TeUtqBOlJ4M{Lm?T{w4L*0iR*gmYKCr^a{@oI8^RNAlC) z+*vtjS^L4c>!G!;Nea&0^_>IG9fNZ>tLMV;zHsh3ZZzB81m~{mP5k?EICp(MZSQIT z=kA_T?sZol=#?SBx zJ2w-@pJV4Hb4w08H{GS2*}3t^k7wsb)#?d5H%nrD*|{mZ-JhJBy00xm*tvO=@SdHU zh{=U!QlmZh?;2;x&drhc_3Yf_Te-1wvtw;0J2y%FUD>&Lkk`u2jsLAoc5YUTFES(N zMyIC=J2xHsT_xwnx*_K+J2x*RE7`fR9Na+8P3o_19_-xQEjY@~O~1GTc5VjmeZ|hr z>Mo1fxl!wXh@G2^b*tIA*?k~{otyNY@$B6A>L#*tGtXixJ2!ggUa@mip#OuNn<;;@RJbK{`>lbxF$-GbS< z`OSM8J2&m>RoJ;H(rjht=GBpj?A#2sDI@2m`;XBr?A*+F*~rd~`qN(Q+~h{jVCQC2 z&T)2b+Us;9=VnuVQW!fo#gk^Ta}yz@#m>#TZyxO2C{)$4b2IXVCOJ2~f8=&&=VsTe z2zG9k9gSw^W_1v}8#p)J_EocU<8ojLJ2%p^7O-=3MRzkfH+?@Bt!L-P%f_9Z8!fL4 za&F9injB&0=HVv|a&BTjo>6A!=FG=$?A-jZ%$=PZGlN8SZh{jZv2zns5^6Sc-lwc{ z3oFRES@unKKRY*3IhE|(gdOR|&dq%n19on#4>z!LGkS+MJ2ztvt!L-vrn3<{H?BIn z*||ynYQ@gYi6jShZpO8BVdo|g*I|=$Bk%IrjGP;nAvNsWI3~xlb942h3OhIQkH4^U zb8W&O?A(k$^M#$8t+N~1xse{-g`Jy`DGSND>GXN81v@t{UzCt@(^C6&E;~0;aSrU< z_})Ft&P}?s3_CYdRxD@dW>wB)a&8n~zx|Dzn*){gGuXNDtgd9|COg8Jog4FE3GCcR zwU1@z#!I%CotvfojoG=`>$9Jon~0?|*}0L+e9X>`gUKOwZYqt!*tt1&w1SdMZgg){vvbpK zeGhhS%nmMO=Vo91adK{~K4_xk;%}8N$v@%5HUbZuWM|Vdti+ z`fhS=GQaq0uyf6pvTO^okuc5Wt|zs$~!oarWZ zZf10KW9KF(d^S5bazEtRxrw>0$zF*!H>&Bu?jbED=|PtHyJ2lG~TZd`jUC+8-=EU<~4o9#g-*tuD@ z`3XBW*5AIebF=hT3_CY_)r501t-OGon=8Nc>)5$byg!Sb8$IcIc5cpQJZ0x*tHwcg zZhF7p#LkWKX>)dNW*4?2=jQr5XA^dA3SRGG=Voc-Pj+sGIC-#hll!chotwzcMeN*6 z(mch^P5Np*c5aS^TeEZHGT5G-n-}nx&Rtljy5W@`J2wNyG?R0)y0rHqc5d9#*RgYR z(JO?Vn{wH5c5XsP^kV1c`m08AZmL^jgV?#TdGdmtn=PXUkaMHZa!-w%8_T+sWO8oS zv`%ti=jM?rd>c47VHI20xrtL%WamcbbQw7}hINXe?A+WLk-*N4U(^kDZoJm|v2(Ng zrXD*ts{4AdbK`1R!p_a9ra|o7m|k#V=Vr{RqwL%q`gFzYxAN5^OiY)vbMtuB7sHFj>sl_s)tlicda&W-apO?Gagd&RPIlcJSrc1txi+9g1Rotv!WRCaEP zyANUK#%0)Ga&BtB*`8(Rro`nBc5cocwj<}Js@ZfZJ2z{)US{WJeoP8GH#zf5$hp~2 z=evTPo1_nG*tvP6a)6ziu#~yv++3}$O=9Q9YUf~fZcZ6aXXj>4p#?iPE0^76=SGq^ zlboCSw>dTB+_=5nuf)#HRXcTdZoFnBuydojY&|Y+(>P9Vdtj1N+LTq56>8} za}!=7#m>!(;_d9*oY~*Z&W+^6Cw6Ys3vJlBdHLHWc5XV~`^L^qKiPTg+)NL;%FfN< z{PyhJ1RoX7O}B?~?A#O@Sh90-$#)nzH`Q-r^x3&7f7PCyo5{7K$+_v(Qag~HoBJJ- z*tywl{*;}YA*aW(bK^E^KRY)MQuNrl$!~7U&Q0R8L+sqBG=661=6I7lJ2y5HuCa3y zmS)e+js3kV?A&0Aqo7?kC*|~Z1=>|JD87q#nbCW*XjGddI3B%dB$u7Of&dvGk?d;r0 z_3y#XjlzW>c5V`C`ml2|AvTPi8-JIJf9PFyZh91`v2zo- z{0TcZQTRL?IXBaLr?7L=)w4G{H=%Iu8i!S!x#ZQ3og3@XYuLGw%%9B8&1|_l?A+{~ zUCz$U_KhpaxoPuf_gr>v9^I)W=O(Hl8=v=sbJM>(ik%yW)KYeC9+mB7=Vo2rNpfzw zzqq5#&P}%y7UbLn)*V{U&W(T7b#`u6ZmeMEM#Fh8J2yjzzGmkpH!_i(o2o@8*}2&n zJ&T>2-g}DKxjC?{3pqDIAICo-=Vn%wd=GYRPLIfD=Voi0Z|vMiIv28Y(<#}FotvGW zaBn^xPd4NG%)!It+~hT! zU(L>qyjv(cH^o6l?A)x^Y+&cc=X*zXZcHAxuygZ1XbL$uZGL4vV&~>VUVnCO@=leq zbF=^HZgy@`!q2mFBeg!Cotxha7O-R@zd-=&W+la`y0r)Np9ZQ!p@CjNGEb`x-{lb zXXhr%Tb7&~=d!GQ?A+|mOJ(Qga%eR>H=*Ul?A(m%lfuqT!XI9^OjMP4{2l=dg3LTxKRaH#aJuuyb>& z{}ys?4BuzmX6MFn)m3tCj{bT*mz|rqdrIuwoW5>E&P~qebvESObZE@P=l&!0&acy7 z!p@DB(Jppw2H6_3bEC9yBRe-Yz0}#c>2`SuJ2zt&hOu*#{pJokH}@JJv2$at_<)_8 zJ=Ia<++45pjbZ0TYSw}pNXWT4>oJv`8$XTH?A-VmU1#TJNcTW?ZY1h=*tuD>U=2Ap8=D+E zuyZ3RvS8vBRe;p#=m6e=HYU6c5d{gmr2OEQHTg*=f+#fke!GO>xTilB(s7dL;&dq^@XmV~ge9KzL z&dow;I|-bd$nOTixiMR(#m>!b=^^CY*p{q~B{xeButB(n^mt&W|DK$_I0TiJ2y#Rli9hM zWl+q{P4O&Wc5ZySz+uw9l91%LkewTe{6ltbDkD0xb7LxTBhUX6I&b zo*p|lH6=?WV>oqc*h3fSsHAK|R>HIrd`*IX4Dv?(HS#=H#4|Q{>zz*`G>g=O({BUI)%ii%uCi zH}89<{2=GX$ukYE&B5iHlR8$Ab7SoME`^+%Rg15lBj+YyQ!29V!Z{ZwFLG`!9M()A z=f*H^b0#@AU8?I<$hlDus;?#IX4+k|#pK*18%vgxbEBg>-jbY~{7Q>ad}&9{&7p=mJ92Jz$u6Bh&dv5x-yh`MxF0`b+-Ko1x z&dtbnc%OlD^HBd_TXJrGYB(y8bMx!Lc|US){5AGvkaH6?s_hzbZfqCS>?h|&|Msi| za&EG}8LcDd<`w>SOwLW`Z6_y?bJKf$u01(7YEKS3l5?}`;Z|dEZfv@>Nhjy#hI`p4 za&D?U``D6mvvuzIOmc1-U%i2MV^S5W{^>S3H?9V!&yjO;=+Ux+InLBA6IX5of6vvTs6E|puKRGv}bw@lU=jO4(tas$xWZcW@OwNs_ z?}mru+*H4QY);P29XX`}I5%NkXDsVW&drCo%Mx;Kw%sqldCBqMuNwv($hiqGd~lVV zo8!yAJCbwr+cT3FaBkcuel8k8&dtuR{q)JX2`b#*o1B~I^3Or!+@#I?)I!e9pOdWO z;oRgprVqpW!lAD@J+0Hpxp{x&bX#(6_8G+WBra@`n@zK%jyA%%Ij8cQQhzu%>$@fP>nKr8ZgXJM<KyrIkI5%rLKTg~N=jQH`ch8&P+^BmhSNXuXQJ+6;p{_(jX1JXD z%1Ssl)=$hX&w_KK-7w~Ne0_4#s-}8VI5(%47oJX)Xaq=^4G!N9=O$+JK>U25v1gKG z+WgyaZscF5mb6zv--PhI7*=#Bb&aI5$<( zOWwoB*$^1v8*&8BP5x3t9ejP}_erB(V)+xAHW)=egL6}&cg%GNoSO?1WCOL}+;mc$BZv8Ukm5vnk03@8aOvo51qD5f^&1zIeQxR*Avr;9mG!r*YMYRzDm}kS)xx<6{TLU$ zAI?pbN|CVwoSSubLaw!gbF)=NPAdh@%}4Ek9c6HCK4cz`3WalX#o}qD9GshoIImHg z;M|;Ot!^oUb2C_G?CURZZfyONe5>Hx7>&{O(uQ-RxO_qG4mdZmR`ZWr!ns-5KF!@7 z&dr`~_lE3)b8{s5on|bYo9BZPH>bh5S=hI~#Y{Li>yk8jn!~vnwa$31C7he9jfopq z!?{tNs~?aK=f=PJ{jmY~IW6CA%EWzeZY)i9EEx#rCeOBPjTfAoz^6~XzkqWye(>#H zig0e!zYbb)3C@jz!<`o=;M_=eOuaoE&Q0x~w=%ro+}x^aU$h6#jklYM>Ss7N_Z(|? zeT8!qH|oBX44j**tHPBW;oPKsa8>yV=Vr>lO#FQNGiK(5KK+-#x!J0DHt2UaH!(G# z#gpOO*n7v=zJqh)AyL#efO8YQc8A^uI5&sSYLg!uYU->#V-uX4!AkB?5Akz%zpk&s z7s0tHZ&^FP7S7GU;3d~5z`03r?65BY&ds>FGmQ4Zx!K#TSI#InH%q5y-wyc`&dp@gCcEkIY4UqK?gpPG)p%I! zM?*L_)7$-QnFY_LolL^lLijd4FHh->+xr)8x~ye_ub13B@a-p@n~AYK27JczA|$!R zAFv!5uaT{1;oLNCdmFYL&W(}z#rvgjZlXgU$K&@6`qkbBj~0`2^EJ)lIGmg6q0Ym@ z$hj$490Hf8xV!b#UJm5kY?56TPR`9c{Z-ok%&GWW5%@d*;|_t(U#`vH&lI1x|F7;4 z{Il_B_ZJ)RFR9#yoR)6=%-YEEeUdhYa%~J-|9U`se3kBR+qNwQZi&aYle+rX_$c$U z{{G*;9iKIS-}QebMbDUY8|}YdUE{_-UX7!F-CbVyk01B+ue+_4d07742k-yup6xaN L?nC}t-0{BvC?3fK literal 0 HcmV?d00001 diff --git a/Test/Fe2_rewl-lsms_potentialShift/v_fe2.0 b/Test/Fe2_rewl-lsms_potentialShift/v_fe2.0 new file mode 100644 index 0000000000000000000000000000000000000000..fcd59686e62c3c1af5e705f1bec1e93ebb311e8f GIT binary patch literal 123551 zcmb^ay^df@kM4Jlt*dB%(2dOc%o1?CF(vCrr}loUcSXe~ zgM9dqjFtWW`hWfZ_t*dQAAbGtzmNa=xPSeB{@))T|I>f`FaQ02{qO&CJ)U3x#L>CU=4qM{QLd;Zu|Ia@xLG6`hEQR_3Puu&wt-0{P_6#^ZVo1y_-LV{`&L# z-#y`+A2g9sd0J@x$%^ zym$EH>-X2szn|Y0`SI)HpMOUFXTr~azsdUhrMUTDpTGZpJM!np4-@{p)#lH~@85qY z!z_Fz{GbnCKY!gTyWf9*OnD#g_rK4NuOAI{By+Xc)$Pt z`S?R%_bvba`|;1R-$dg^{!+xRZ;EY!H2dS0*YDrIN&EYefB&K&j{I%c?(-LQ_@>wl zn&CP0y~CeBe^~q9x8wcz`{(oX_qR)d0$*(4=QkPt{?za1*N<< zvEMBBIx-!0RUhjpkFx*z{p-iq*PjIhyY1KCKVN@;eg}tNzknIryKR}Me`x<^W-b^e z{#r`BCv>vEKfgY|+48T?pTGY6G{wEck3T>EeEs;Qn?IfS>+g@x`|^JN`}7aAZR|es z&#zyWzn7i#~zJfM> zYx@BDH2&L!KOF6oVcZ=*e`y6mciYGBe=hVJ+Q7`;KYu)EzmNRm>)(eHfAc9nxC!^N ze8qDCKmLCH{qc`UUW@$TCqA?Kdxx~`MjGJ-=htC!Vj86xxYDe z2=`@!e{L1|_zSxz!?(6SKYsuC&Ft?>p-G=#zx;k3<>M#i3cv0)SO3My-4^xn`G@!U zTF8EO$ov1~1+KwgoaIlF{ddWbOaDlR?+L$fp0A+vw&kSaEI)r-R`JDf{{H-}_1)o@ z+x$lxZdLmFM=E~(x&bz|ZuQ$`erf#k^Y8D4b4zVFTF8KIT}KYhoEfrQGE9>a&G*54 z!e8>aZaFo#(2v`3;az`q`t|en%U?VXe)xGatsy}C!nflY3hy86dv^WzmyQ2J{q7x- z)ZbsmUKW58QDJAkW%&1l-ICg+4K$r@!i!P%=ayY2g#Gn#;~XSpw0q@eH^3iOd)+dI&GY+p?+`)$`5Ta>eGe&2Go!wcMe z8VxsLcy$dHT5IL{?lv9)yZm$eWoTH;{&@d|efZg*U!s?r;_-Lf|L4!Yw;rP5+$}eC z9hoLX@Ptk8%CPk(YXhiB3!H)1o!FOl{`s`i8h+n;hzmkhaiv>PkF7Xg~Q`V-17-TY1C z?B?G$`1;LHBT-=SItr)&*k3o?|0dSIg5X=d_)3iI2k5+I_-Wf9anXrqRY zAw|l-KdzIQNkWaUnYQQ1wAC^&`%+>C#w7?0E+yu9ii8Bc?@50BmFD8SzFCS$R9x^K zS%mVG={K#r2J;kru)bFtV=Tm3(Zb##{BV89(be&1tR3E8ZUJO6lusab^+N{4w|{<) zHtY#)xr@2sz6_p!q18M1Cw7zjn5g91_0N)K$nTw- zXdevkVUKf#Q-^|bRXHD1sfd5y&Gcq6r29@xh4q*xO>SOl79TAH!I5DJH)gwwST`Z#SVVrcsI8ZD?5s4>XPdx z1CUFWmcEXRbRZ~V$7{k*XlnfD-+M6QEK0c}sWKD1!gs{xp`7mP$!sinQS_g|?oH&` z91Hyv48OX`S<+4hdCL$T5RMl0UL8f>v{(RmwG}Doc;g{hM!v{;G~|(?+3e+?l+HDn zsv~dTc4#BaqFJwg?M4`|0`)ba&^VsmqWy@&t+0NM97p)jRf=ACI5jL4iYzAGP-3i8wC)!)Ii6)QqLUicCf zmq3c^UOS|0lV-WdxcTfv40vVizPP9&96|HDNGzGf<099DoZj+XuT`Mpvq}E(8m#gW zXZhA99+A2Exq{3`hPdEwDCF4JV8D)@BaLs{XgZ(%<60OJ0;aACZG^!iRRhi?-;SL?xJ(ptoRL)zbwU_i@tfZi`%#p@Wlcaf!Y(& zVYo@O@5<;C9N+6|YqwHr!MSf5|mJ zW94sdR8|#gmP@!+c1>Rh_MOZ5`e}D+Clu%1;ZN*IDuChE_8eI$OVrB=Tt}8*#g8(T+w#_Jk0L72E|abWvRV=ie&Yt<*j34o9O>CGdU!Lr$F=S_nROb@MaD$4~~=szZCn!!743YLHWd@Zu#d*OAQc< zj0NB_pG)P|kxNwZkYa<^0w91Kjo&UABKxHR_@DRYOQmE_lKk(bFlATFi(kTq*OOMi zk0;41S5=bpy=6{Neid^3J4*U-ER|FGx_ zZLoR)5*l^k9IxQ={|GhT8|6HzZHmiZi$aoNI4r&$eegI$ASMB_ekp&ETK>D#dsYRGx% zA@-A-fr_uJk&q}SB08d3w~P&Nj!N=Z-ru4>K_^MPM@G)6yJKH|nV4u1Wx7k5LgUPg zyx*hH{&JKo>IDbPDTVl!T4i29O7ya*;IqT2%US8-hZRZ%8)X%b7#Il{2Z|T6;~=OU z8@j282r9Q%8TB1ZD)d9u;W~1fl>uGql^Xp0^cLgWgk2nOd)MB6EcvQA-I8HhK~D?V^Lr`M zr7qnSUdVzz#gyc&Uj#xzq;G%mDHmevXBol5eUu-CwiTjZ>zR0!o4WH5v3;l_z`7J0 z1wq;6>94`@b(uKW`|gG}w}uryy#Ub)QdwL>&1C;%<*gt!tRmeQtrPmZzz5} z?fCHzWQ)shB0mla=)%r-LN5{o7Q)oa%y1f>-mx#IP8Gm9UwYN;WuG{Ko;A$ntsPQI zCaSP~#c*7|kjWii)+3y7d!DXbp@#c_Nc8xADr(g*yBUV_ z4#pvWyMFNewjmQ${|Iuo0Z7Ml4m_{6nefA-9QLio`I7ct%83f39A0AN#FgfR)-N8G z+(9=x^(#Xg=B(il!+2M=!?F&N7H=EIZPWbB+s5CapgkIU(dI*L6HFn$e7v%a^D-$C5Vs@JwA#9$HC zvPM)0S2>`^ll7bO^ApOvqAjMkx82CA)OcQv41ff*MEzq(l;(Bd3;@pfK}9l zSzRkrYI#~N;Po>Vt>E}Drn4|z6Anej=knGLr3dIuK=R6q@MVmU#y5>>rU_%kN5?IQ zO&MrJ_nxpgbe2rB0 zt8+Mwhznl7@p8o8WG-t(5bMbDYkx)l;r5vj99ESD?j!8*umH0vRT;y#U!}ewwFeJ> z`Fp`0G18r8yUVoT>z%5;~3D)8O6 ztW62XEn}x!m7-(rS%yyj=7lRElYpxkVPTcxuy4bYBO>tMIrBCuX1==_j>XW z5Gp6y8`{O(=29f8B9Wr^167Pu7(~H}hmH&@YO@OGc~8QPIUEaI5$c-I<1YC=F6un} zN4@Tv_qhEs8c_I+0FlJo5TJ#9QN`pQ@?F-Q_(;?(+{(CNrFg@2ES zg_5*T^V$uc!p8xy6G<`7F3)-8P|lI5Om9)u2VPjJIB!34JjWBF4Dkr&{qjQ_g8=?v zLL=9aq1_@a{_3S^q*cC%3whrkQcBkhlF;e{unb46EwYxWd3R`dzFL;@Sc<@m;dv^0 z0Y>zo3Si;&mMiiELzo7bd?#c9?oMQJ!dtXRz{P@uuJ2$75NDJXx!MXRrNpi{Mf6t) z&;^{(KNNLIx%872(MB>|{1bVGn<}kXeAN4`1!#nv)f+B7Bo_IKT=OBE_)i%&t?$Dq zfFwEvo(%fEWx}Ez69gQc%MDV*2-s02z{QX- z+mEulUX~1w8R_oFbI}@z_W9B|`jLh}S%7moQdidFwaCeo07v&h(AdY@59mS3N>a1P z=pjMGZ?MGIq>PrDU_nU0Sp>k^PZ_YIUe(B9MXAtNhJe1n$@7KtK#amUG+AGH8wg;F z1Rn3-i}cf!_sbRLUQdQoGSF}>JorIuderSvhPTMI(wI^$ zoZ7h*42{QgukRCd*<6B=K*3kveo%>R`?dJa+TlEgn5TE|$~G)t!Kc0c16MCvh9##O zNo7_=1ABO>h^vGTJL1!M%R<#cPC9m+CIq;b6- zrI^)cLe7(&o4X6<#5hN7%F#|{`yr-l!k)e>*_8D=D~lHZbivOV3^WyDw7=yKys$SW z%1_TTnwijajKJYQ-JZ~+1dg!hPA?S+{blIk(#v2gMY^X_y{}?3ow6Nt?<6dKp*k1` zkkk1r(kYNyYIYP`pyeN!@j%+_km6^ieDz5|(V_YFh96y2w@abdXoHXQ-2YyLJDyii zHP^N#gj@W1HO^yZt|aMj{U^v#m=UbyML4=Mp$t@1SAybI8_7eL;@|guQZAzGX+n)`b+5Y+qE*P#L)URMC8P*keRUC8#0D zePjZy3W4nih)+k`j(xd3#Uf(^uG<4-tdGM|$qLyU;JA?#*6yNR|5;V8&? zg_e>F+$#kfLQu^x%3mh@kR@o#e!#GF$ySFrC0{hjsk2CFo1V>MWJj)QBtaLod%sUX zBPLi-m^fA;#DgsyX&AJ{AZZp+K%Y+b#BK5jM8J<8wSjtU$BjbY5o}_RY%3C_J;$d| zq`(Wck}KPbR0%^D;}ow9bJJa`eA?R)sz*AIlyhVkTw=+!9Ku;7uP9rw>ADo&5+U%L zD1NWpn{9*)K|Phn!Y{m%k_iq^zgSguRjbrCw=A398ikeT$P_cHr>|F=z6{j}NzdIxfjOk*qbihE9+!r_%~U>sc4p3qFL1&*_<(}woZMS%5^ zCD9uk#&%^DkHQxB!HgjG9M64LJ1GT!`W2_~G2!uhDFtig>(IP&)eJkF@Yu~3ZA~H9O4@z&G9lE7bwJvedm{FU^R}TaV zR`zZft>ZPvdnsP(P*?l}j_iK47r&;VQjN9Eg!vACQCj2(JKSS-(a9r2z$HeE$DAy& zyR@e295Z;2j9Lq?1a0)`S-F%fD5S9r^0c8vz*DX1yq)9q1%w4etaR_t<&o8d8pnSq zx1mH;t3lnFkRgl5ZSvT1HJ}Pmr1&1WG<)tsrvB&`cCs9U9c(e6aioO|I?dTN!(q+t z8tp$jB+(K>&H4@oTotQ%s(0J*fl~D6bV|d5iv)xiMd4o|f+8A;fuq?CM-p zd4MU%3sJXjDpCM^PTn%J>u#BXuxx#y&AF7qHCb!ce6n-&zn6U}&MQ}{U^sHbQJo{l z!}H=e?^#(iLVSHVcQ7(HU(pOlKUHy_%(V}$yoqsf459W0=Y66|cFau8EPAuWFquO* zi8`KzIS<+<1}E;bLp%xEmuWwtKL=VKsOb0*dDIJtn@-4eCd{tUK;W`CIqaLD2FVS?@8W*tM?T_7$*k{uAO@i z7V{UD(WT=?BWOTL6mhAIVnIHOE4wVE6hwsp3BzMj)jotXILpb3RE({%8j>6Xs7~cI zis1N75gPHNGbq(jy*#a#NFSxAc;m zmcuA-^eiGDf-Taw!1uI?DWs`=~Ms5Xx9J#ufZA($Zb#C5WQ zh-J?M-p@R%A7nn%@H|DLmUy#fv}~+rcIc!$s~n)vdhaF>khZRRxDiNT+p86M7DjdY z!3*>dmw4f;S7nlgz0W*+I>#+38F4?lDW_2(hrZIzJz<|$aVx-S(UaLB-cYz*=Ob)* zi;iK>6z>e~J-h6Q!@Ls;{Qy(%DPI|S_fyf#bsaqv&UjT;L}IUdLI~8ewxO}7t;gae z?*VjevqKO>+hP>QZV4dGqB%sn2P55bCnfk!!5SR7Ap(O#$4Qx}f*B)w^M|g9J-A{d z{~XVsOh#Iq@L9yxO2f*2zPH?)7ux2NO$4HZksjuR`}8=w+wJNugbN3wShn-;QN**2JyBr(Q=thTE8`6UkMO6 zfgKeocATF{^5~ac2S*5oIF2_n__MZnd?gDcEGwIzz>~iVMT(h|!*t|8T}p3b$5%|7 zMTuS%u--IG8$(6_*4F}iLSk+p@lcj$LaOSHrNpeV7jdv+>gdj}geC;7#cKWm-Dg5Y zZCsPHU@dz>Zb6<=NU|7ggDIiC*d}Su@oEd^Kp{jO1DGQV$J=CL7^9!T;&H-pGtll? zgu7bQL_oVw0xs#L@Etm(*lR+kbtR4{L;4J^x@CUqx%f_tRPPtxm(8E&3)5Ei33$?m zNxjU3JYM>WcaqYc5IzciY~5||wo`bU1UE-;wN%vs90pJ2Qu(sR$ zk^8P#HH3dn2o`#8gFR2xrU_{#dPB2$y}g?rDmWj^dG#<>#4%6+L}Bj`8>8w>#~tjI z%hUxvZhE4oS)>XoN8w6`V^5oHR8lnUGKx&kS;c0yjk#=fV6hTpJ=0#bD*qL| z?}b5#l$oqxw!3%8{sGby8OPDgU{#XdCfWA*;Atak0dzf&Tnp#Rz6_~86S_~JmW~}; zhK=YddM7cst*1JSSQOf@qUTa3%$8LVW-cr1$T%a)kVd?hQmz^jGnhmmwwnqx zcAHBp~Mrn6Pu)?;hbRFG{Z!(OC!w{&%ATF!OQCK)YJZgijmX?CU z@P1Eddk~{H2LqflIPRq$hGh&toVMWBOP%U-=TbN*&Z8$qy!|sFopyEA)rt1B6_ZV( z<)}^Zbc7Z!ni}ft&|%5DCj^UCwK7;1Q_!x5gswKBGKry%lhmCylvX_#Nn6?XH6cw< zqO8_5u5dc`=o;e7>7Gl8XWF%pm$mI((+?ttb!{Yo#0fRX$4 zO~Fi9PQ$4!OWt*ypZxd#{DFJ_&p-eF{HcJo(Z`wSM59*+HT|X1P8sC zJ&VwnuDUeok29ePLfxvr&noTEqcI2x?fu_9VcY@-Ek-^I_dKAAps;3kJv(Hd)KF6& zf<3#jx7MY_v~#y{0c?uTl$}^@vYVxoOFMJS+M1AgcZ&G3XC+U^NktD)fQY+|-bhL+ zp&%nqn?bIabc8i$!f22uv$&};>eEr$MlxT3T-@}u$-5VW7lUjuL?bJBd*Zqlo*gpx zNWr+3J(%@CRELpi+igNwiogT$S5KSC=qGR%l%5^NbU9N6(rjhz1|L8!>KadY+5i9p zWZ&ey+khGq!i$(eZS9a_cKJ~o@$v4+FNY5dP2BWMSfqwE>Wy7KZNhd?$odeEJ)vX7 zj7Y)#KOKAQG>=D}dCQgj28E@ttN`Bi|4=gV5%xg zVQ2j7ZgcC!?$8}Ue0Jz;q=SJ;r0fZ~>GYh(^|av`Y%B}wMZKT2xZ47$$we^JGa+7z z95Upd#4mXBS~ryqOz;B0%!H{~&1#px>P@fon8q1xOk94c3UTsY%*+F>2P-Sy=$Ea_WROq|g#AXz+C}(y!6WTJ* zC@A4b&V*!8PPagH8e3#BPLY2k?^&dpGmiql2EJxOCTdyPK5@yJ5X=|PSZu6fI+n*~ z$2`@$Ysd<4thLN>^#dsaoFID^o+G5ghvZG8H8yeu89rhuL zxUjhVObBgIC|XC!BTn1X+%sWO&s6)$zds$_?u0{(;#^7vMF=L}fsCwvJdYd; ztWl~uGL)ugQ{4iQ?~YK0xQPe2owf)N+TWw3-Bv-@hDfivCn>=BbQ`U zVsSBpHghSZB1us$g6i##Wj%Y93-V7}T#3u%9I)|cLTidBr!YIJ)GcErUrM$;`f%42iX&ff1Q@y3m|t}QHlrz$3W%x4uu(&Pv|^e zyLRLFVw{pllxMf~sxWuqBKGAuSy?jKDk0;Z5L8H45nwMM_F%i1N(3O;yXhGkQr!0} z!yFQW;DPt0i7fY>P#XtFkh1W5LYTxi5)fbYw3Xp3yX4=6eJ11uVUMtow>dKGr4+5< zJeC`6<&+g9q8(`eo)9eP==MucFVU#oa!?pTxuDv*Wt5UPw{MK|bQF|S9dJ!c*!tyC zsXK;2!=4FAlc~s5Drn8vCgi~F1&s6nWp{*zbVeXnRJeA-e>-(zkcHZ9pus;S4_>tK zEsmJphg?);?~vt`&$mmU@eFn5I6J>;|ZkrNfz%vlWUm?P)F0e-c-(XS$;9JnhW zLhD#$wUNEN8!VPn*=-b%ej*wJb3c-yyh%A+@K9mt>BuQajEHI6;AtxzoHE(yX=69k z(DHNhYeJAM@ysynXLod)C}NaOUgTM%hbuHe_GIvIb}bh<54vO@X4kVrC|`_;3BJdx zTv0ZSo+Q^9oR%|!Du(AIY#lfBH`O}yn+aVnr!Md!pgow8LUt<3$(^=PU1R_jj|{n^ z__}KtpS~s(CK%fH#u8J{Zk)jNDcaD+-Bxyh!|RBrpUsu7rCv+^vqOQ8j0#_YOYXsV zQz}SDRi&OqN|(|xG2nQ@5d)x^0JDT|{bs_7Qp&XbfQfx%iXbCWs!A^EnXocDW-q8N z@w^t1-2wGDw#8>NO*jE~)%$|*-I2a1)q)67$Z5kXaV=%~bIU#bkyY2&1Ept&9Ju>n z0wLlaOj}|~;`*bTY%^{XvQNC+k;Re%nw&SYI1{p39)SV5+C3qtDmPJPc+0Tr6L%uE zldRnR*b)UPEj6Y$G6X)nx)?(0_#Cf1mB@Ok*?TZ1AS)tF0{BmxOiVK9<n{;u~H@#GQWc!4W4D;O9e=+cjhm1qB6ke(#WDq@CC=ZQe(A=e?kU zE*Q<85VJ{*iDwXdCL|SP4%F*?CJd3-S-7!nlr)h9L`!~lt4)y3=q3Q&i<$i7lg-&r?WDp|)|#c=`N zVKc;(W@VN}4~68SJiLH%ZW&U-o(zb^R;HxgI4-Y=srqg2+Re%LxIpWU7*d-_PcqLC zdhbxGN8*zK_-(6AFRe;qK#}7Xgb&On&(G@jk%>5fMLhb+1M7I)8@?%3E7;y`J>Vc( z&2;hUS0c2E9sfPC%N!Z`kv^tfm%O}jh!6A(bFJ(ou#_UQaE6tceNJ2Oz|F9z#5EaC z9*aJ}d`dcv(~%&+_5u7<$uN^|p1WUeh$IoCpDNq;u55<_l(metSOi1U`kGdA6g5nw5 zEknFYMF&)n{&JIOnw2rz;VC@N&RC%rZ)F8`D zh(lUN;NqCOAO6GwiWG;Dts}d;(t72f&V=mR;phanz6TeRiQ-80?dKk=lTh11n>C>< zzc&Lc*MEzY_g0bmPvDKfXZa`$}mJ~A! zSlJ$owDnMwx~pM4JLLKe!}4I(*&)I6J3yZWKOJ%V)V-SS#LFG8$8RWy)1U>rA5W3K zRtuVilVL7Ypfjkw<&}@=Ck7X(Y`KC2vL-(%w!LfW%N9$0an5^(6=|g#VDzJ$Edtqj zz7j!0(`JW^gvJ#|pPN@p&C3=o0{?uXW4R66T?JLfPrpk@E_@D@AscAtwHt2|=clkRT*~`XOYBJ4kUFx+iqd-n*5< zoyfDn6}JRp{P@ZePg_q^*r_Dy!NcN46jsD*TW7-9oWdx#bmV0xv;$@f7q=eDi7*r9 z$)L8rPPEkPN_#q&Li!5w>D|hswj1FN?}1Fx+AS}cCoZNu9RK_r*%c|PVLf=yks(B} z8@rau*n{~>GUZSzu|0zm0+-%_4=OQb2Fuj=uXn=ylP%ikK^t$<3PAWditv@iNc+uMEq=O%MfpM#kTH$8ex?Ha!yxT5M5$2c-3^=fi|tqnAjChj$3Q zG*KL_5h|CL2q{_5bCU8By^ZOO?Aal-#%K$2 zsL0cCzVtI=3BuimJ9CYlWS(8juCe;Ki7eZ^&sdit!l5;)25TV)}V_G!xdv#c>z&YH8ZYDo;T}=Pkx+EAZfP%`jp} zhNa)3yKED5cvenX(E)iWj&!#5B8Odo2C3C&!UE2+D#E>Yhum0~MfK)+@(h-u$52WdLE>j{36@HQ+2d&= zDE?bavo30moaq2vBxspWJDikk1rYg(J(#}GZ4`kG?Y5Ff(t-{R2P`}jl0CTRiL07D zyWy7O6EV!aL(ZRzpFHE)bvX=ZWk*tWd&1IJ^2vaSpL-^RGYCgNxJ%<{bHN2L`G(y_ z3wQuIKrneGWQ=Hm*rT?~XXp_fpD@0y$!J&AVgn zj;e#TquAL5PtAFi&R-MC8oN5Fkpj}%lA+z9hlV=JUbz}(tcCwNs)S&79RjoU{Y~0H z&-rE8#i`9nW>;?Hah|y+hmvxC&LuaPA%UY7+XCP(B@9 zn{G;nxz=?&D%?Yp9?u`OApl|)7qa;gS38s_g*{4-u=fn^)&XuwpKTR6p3)+a?%aH% z%5bsNh2k?|#m>gcn{9QdGHEXw1)$FkDG(H>)f%mYkb>01|kOd{vg#%SQrF#6<&^tKo3_b=d56|cW7UuS+wgI0Fux* zcO?$yF=wIRB)EyXl=YRsKcKfC6sNwuQ$11#+j0pi+5k2&Vi(+0{h}fuVBY>#Ge}%3c=Rd? zZ7i`Rc-b8}8nI9ntznRiyxS@4%&#_uz7&keTkJb2Fj; zlUw?MA_c_=eosWa1!qlF!OqGO~~L&VA0}NHuN9y1_zwg z9&EA-g81neK#No}5Iw@kMV4klt~L@cxlu}f9S9{O!}?7sh@a>2rwWuwcW2wojAG_@Uavgf^GM;hJSWPt{QJZ z)JkGJyEZ=p=K2H|Q zRl|BSUOz|ZDWuR~ne9wyK5PlrFSa^^Wft%@h|44G-5{S(1Uk6C)28$hvvSCzHr-P% zjHK2NELDUYQdKHq4+h{2FV-?4#4HR2sBqt6j8C5<+gD|dbm+Z9 ze8;O%)h483YeP>VF+&_mV`Doq&(qO*syNQ4mBk7Yh4`wlX5YM=kKr6c5#U}JHz?m` z{RxKFgeq6eyDG+kCANsEp*+>E_TWBviPnn1&kiYD*(QLxfMs^*u|Tf6+QJ^(hq4k{ zb|Zp+ChTFc{{az6nB9iLxIBvUe1Fq~VAXbt0n55A8M+a13UIA_x!bBM5Lpi=PQOqF zPe5)bYMmp~{_M7h?Z6U@ku)$Nr*bA779*VD9QNh83mEL?Vv{Z04x`=3WC%2oXP2T{ zAS&SUa(mAXs}Ty98PwyD>gVRb0%2oZXF~G;;YuBH(d)=6`-(H7I1$6%AunhgS1sGS zFNJT5Vkn?6^fO@umOW?qd$8GLIKe|N*`GyZ52;-ALkEO^ z7;HNfnf0ci1HL=Nh|8Umj9}{74d`bjC3DLDF1dn8vvHYui`|y2%Y21>dx!SNYf1j+ zmv%=#b3iA^Qq}C4uu^7(3CwOWNEq3gtFM@|CuH0%xl|6v`wV9Olwqp3N3K+j^R;%N z-R@WU%{2l0^{GdfB9lVh{Z5wqQp!0tKW#cLfSW)afZ7HEV?{1=5X@z$$ke1FlBL-h z)J#~(jmZ;E92CCT&1%DzklmgLr0lB=LRjuS)#+F4R<>_3vei#!DAPfKt_g)X z)~&35jz_BEnI7_uDy_ljv_0Y?gErHKGTI$?xMIC^WK^UbL%H?+f4iyNgDR2hDC`;x zsiPS|#+IROxua5m>ESb>JXJYF7#+J`gL#ECF}ix%xKEpd_v02;KO})#lH-KNYr_1u zv?twMKLn{AriTm_-yc6SgPoscvmXR{FXGQ=5nGe?J3E|5o!))*UCHT~sQ8#Zzdmiq z4ds@Lo5*u5B3H^Mq)FF=Q62D!MjhGoc0u2vuzSKukX0y`5j$=ENLBH~@&$+988* zQ6=YwpRA4`K%6J?U7z@N^VM^6ww1rOXiz>7lvJ1eXNPDlVnZ-1tXLD0iU<>few7$< zaeGh_-kk|iw<=@;h8G;V5J@}UVSMnKkO!px2>$w^aI?cAjr5g?fGkvcCIl(oz2xTJ z!5{^7z!i?pc@|6Cn0bY-2ShlTXd7U;)yB02x+SbmN9M`yDA+Y2gFwBsEo7OKNH>@8 zA&NQ4qc%96@PPX{;80FUbjF(v6)(*?-^%PSacqT0F@3RbU_~@LFpx6wfnAl|o18ahC#0T!XGlenXzbT3yXFT0LRb`-7@kJ{*?uzval%*1Uk zme6~ILJASYkv0EbGSnq3dNMMUzCuiKdC8VNAw9)OaX+AV+A0eQ?S!C54>_kvf%{b9 zy=C_sn+Jdsa?O#s7n13%_0Zp^P4!4WYV%ImXQLEOzuEQd5T>B(1q&0(uEDkf9FW9| zc4(nlZvVYJ#;r{<0T6YPHKC}9|E9|m>#YeZLyHBXN9V{wA+C(tTsw3MmSWqN*Q2Uz znH`{C?_gpMMOL`57Gdl0aqi=IN3N%AX^3+jnfUU1H07v+p_Ocy?Ii~1!>9wMYeKxM z6fm88kF0{BXJOboVQ7=elF!+7z(Ah@rne36t5t^fov_J<$G;?~dK3nQBwTXMAPTp7 z81?8YjmDc91zz<|SYExraHXA>yu?BdD1~v!iyih5fGxkWo|jI!)}?ammSNOqtmDB<7N&2vF^z;lCKez#r%0#0hn%+QJ z+*K{2wI(dEVpcjHlajlY02Jj42F`@E4Y$$rMH>cE4x%6I_sX#HV((ANXYavuy4XdA z`Q1&$4}`3XK1cRbjL^@r3rjS!LmWgbg^XMz2#C8)?gQmKi#UWMmTo_2gC)^9w<*(H zzcrx*nW$4iYf^h78#gQ&&~&duasn#NCfLTi2)ngK6yQZ0yAhTZroOP$D-1CT_?%k6 zS|kHNS$k)CCKQgKpncDN%P>AoijI9cqD6=@OL>EGfELAoU@wmp5#U-qSikg;^;F5B z*Do>hr+%t}%X&FB5%AoueWmu6+R#--0KO)_vt-D0B%sQuykVG;JQps zFH4DC`wJxK1=yxyyDaea9~?#6VflU*^^h!C zqXc`04u>@lES*b{wUS{3;w!Vaj$F32010b9C{m2hFo567CJaPGKocC_i{M2)0*tJ_ zYE$jinTu+UyxjQ2LXtAa9L0TVx5Dq0keo|_D9AKzcqq#p88wIN!vB>dn~p(>hkHPA zapwTTUBp1$%%n_LzuqO`uk7^QVX3hBp`z4hAH_jPltnVC)22q-gXawBv?&`(SIM=k z3!NRt_H88Jx(D~DsUR~l*`<^#9IL}?%H3xG(-vUH+n92;JV{+1nchI5GRnJS*$c(0 zu5}MKIrNZ#bScSo5|R}*T}d!B3%5fVgMiA07A#Fim&-A;jipM{CQ`tV%S^1=iLt$_ zfdJ8L6G@q}waezpRQNbgi~ zlxCm`EewhFV2KaDhjR5X@0t*yB`UcH*^XJHBg=n)$7)=*wL4ZUC{-Il-EF-xh5jWO z-nPtcJn3BM%CyrgBlGJ6oE^n2RoS-h75J<+v;^&-a;JFcSqw-k&9YQ!O&GuENvg=~aVV5+nx>|GzPz;MrzF&LhoiY!X}?2zI?pSW0>yj-$yAE;PdR*;j z14Fh!o~sJanNau!bbf`PAT!(*uBl#`Ecjw1rD(w;{TDS8f9`jRi$ zJCq>sukHZnw1JQkY7BhqtH=@A#AI?{dxxqJ)ZL}_9`+gB(@jwTKfg$OJ7jn$E!)n1 zcRyeao3SGC+L=%quA&3gIpq%_@z|&&;=72;jS%RyO1~|F+El+2wT|$Xr%+8VfD4FZoRCmb>)fDgw0+-Q`3=7-)Ab}I#JM1AO3+u(@?0R-cm3qP; zA+u07B_=GP3*l&g1{)Yfql7H{w0YpbY|(jy89*s{{me~yh*GB>3T>NgWo&2X}4 zXx}Img3CRdf9s%_syrh<1xWU;xg7+C+PLU5A+gIevJw<*A2}H_=4|aOf+V1eu@fbl zXV>NH%7pfy^jJz6JBq*?vV+~x-C_KSN{_D~8VBv+Rut;I%P~%11s_D^XNT@MMpZd$ z)i(`xo9rEekj=K+9=7yomFZ5X(aq<|d&0)EF5OIqrLwRhOhhF9>=0Myelbu1_};a@ z?~!oDt7R39t(?WhO*(U5N~)$vTtRHOU@OChZ~;49xtwY1YdhI|#C`FY`Xy7bUQGVj zGV;T@5kskmXNQ;}JYp1m3whcYynG~zxZX50VHW_p3Kr%h9ogNLyR>z(r19l1 zw~CZ(D$0bNrz%dZJlnIjL%$RDLaU$-I-ec7cZMi9z&oEsyd7{fqJdaju1Eu_$vN23 zjBST5ghfz9eDe&3{AMc(Ib1M?<-DBNOH6xlU4~&Oa0}0bG$c|`nfli8ssViw^Dta;J~Ylqau zEjb5)?3JfvBNrpUI=iL^3bkD6^CT;ADP&?X)j{7^RptKj&3Ns(y`F?3PZi@1ic_n+ zH;Y$0*b9SyG^xji>!HuckWo;0ORW@CO3c(jDX8JCH(=Dq-aycLFT47cfep}{vPEV> z)pPEmJ2*Cq9&nieh#<}dpyKe1lM;jP9b!&Z4D9lCqgDjFMwWYiJNCLyP=|EBZRHz) zArErekkl?zo^9Hm9pViU+c!e8K>QydLV`UQ4nTiGT;=oU$moCHldRmtIx-)R=l1Sp zJ)0aEa&HtnZ?>(6C7ZGr6==p;gqw9Z3%{?bfH^A`*HuBzx?v8l1jk)cQd%( z{_{82M_t$SGj5vuumAk@&u7$v$Qk$Z+nfgeS6=VW`*&x~|M<_J{Q%9se&(59Gw#gU z-=*T~s|0j{-r!%=Mb^*l!jy7)D!skZd)ns3GkDIlP8%aA>xK?ZTPjhG-tG5Or`hQ< zm{-EFGiUhsv^iCe-DEB11Gf30icpDvZQsyEznKt{l=i_jK=d=Xtfb4&|Mgwe3>JHe z7CGmh96W6_rfLF3Lqzw4ll|gNrxf&bv_T~`HSf{6Gm0Jc40WYdRE5$s600un}6DH6Sr9+@bp77+>%Xl z4YNoSg6u|PR=w$3gXJ^JqLkcF@qXH}NY6r$V@&jEBP9V~&v->x+Gau-hra3*_DP36 z9c`|Hb$RbIA)u00;oq^s-On}v2?j;#XTs_dy+N2t_L{IYB3v#S>wMa51?%U=A0>9W zBvPfA3xXui4w+i{LZFCc?!o2gdou$-_pb3GsouB?Kd}2rZtyDEGXT?*l!lQ3 zJ1oV@t0P~~PZb;L@wAa(UmHho6V3GNxvc$|asYNsXdYY6_092C$9NlU^>^)X+SEJy z(1Ci59ymCe|Bl>k@h9fVDe&Ipg)ar=;GSM=k)3JVHJ1A0cFlaOVQcPJN{#C|f zPpDV)Hv*B0OhhO3E_GfTSYsDP9tyE5eEq+139r4Ye!b);u7G9NRQOd4hHc>K4Dj5lJ0*o+PGg!F+@F9`O($ol|s zVxVX;dGlT8I!O}(V2ac$26ewZp+?E%5*$O8W-xoDMV5i^yB}xnLV9RA3}a+CJE@cG z=e`sqDK4MopW{hg@=|U@e0~;ocYwTbeZYB57&6-;6j`7qUL;d!+)Eyd|au| zbtx(@*iv@E2x{xdAToD}ku4I`@z5MPC*3YJu)(3{1~lDn{GUA`DG4au{v)oL(9mAJ znDHofaZiPk$qetoA#tf20rfsI?c(Cefr~u04B=QF1XGjQ#~au(zqIn%4b*gdYE#_v zwr@U%{+7{{E!#)V4_TWw3C*9~h$)Kfd6r_kB`-)#X(rbu*|^$>(-J5G`5gFyAtgQq zST9u3KHQXj7xwMJIuQ#?p`*KvsZ*LBPz-gROX0xP8%V$BLQltNO-4dT4tx!w0g}GU z*``N1KnP2TjWo7P;lSy&*f0ay6P71Hz5w>oLynLsnSf8*{rGQEBp%tSqc)Dke^7Rm zV((A`F-qxBh%=bEEB`VeVD~H>Y)XX!Dzok#a^Ujh^AP4&gqT&kk3=*oqnkzL|Zm%4~`$ zdhL*BaOm6%J67!H|pKhON#~WPL!ITUCJGJ0uulbvG#fX)Bf~BT#N|Pskcd zpMcXLoHJnptn@_+TdpB4n{{yZ{7l%(el#9FW4n7oyK@Hl3~q0)TmT+GP~t)77U92x z!z%Shy)xHAjmX3~^3>#k9c>);HG})%MC6ZXkE5S9fmZPwYCkMt+OSlJCKNL9*o&+Kgr4O-@Jt4#9^&;3M%9hSCP5ulI4W@US%&z?kjLQH&{lt1UBRZp;XF>;w zyGftED|2o0pk>Os&tQQ(KMuf0$kNnw5i3ri~9t;jifMaH8yKOy?sW9%@ z#-0$o3g($fsp7R8xpICPqp-$l>m6&EVYj*$;f!>2CpI;^Zih&N90qU8S!`kRB|Y{5 zBs~~;7U{WW`5hX+`|-!j&h6z3_YQ^fWnFPgs{9P*J&}>}^$=mVO=1>1|MJl8|J46rQC|-;|>^A7y6U(x?b37`Sy+`Aj z%Ooz>4n;zOROYu*d$U8R&WFn4_GS6A2)A4Oo!6vU(MXDzvN}iqjc)gkVv; z={J>M@w;TkJ0ZoC1r&z4+C3Phg%z3JL;*9nN-{h}M8}z}woueFHuo~8%a%E1q_{{{ z6u&2=*JEc6xMe7er0D4l6WskU{`^+Ff5y&);JeIRA>dXKgrWDNWnYe&<@l+kJi>c< zm_6;l*sGeiNE2ovO2PsOF9n{Jr4}Zu;UU7gs61-Um75<(>&SiM#)%Rbz&aBGdeny5 zN+|3J!J(TMb61&NmjaN|0|ts#>^3$=&aj>jI1~193Ja)?yVXIU-CG9>trT;+A!#Ur zD6#TAVTqj*AZY25e@B*82Qwz4wi|7V#VLA{7>Y3yT16NBbtNgM4gN|J05AS<@32%B zR1;pYx92E1?_9F1*s%&uoi3FX!BBTUDvWaUxNsRjJLJ@(ZNOCe|LF+-t2RV;k9}8M zM%u)@81L@aix1|`u}<(fw_K=;Iuvl69kN+PP6jQGK8qAQpoWBS;H$bngBOti%NA*e z6(C%vxIk$4tc(<~8>++w>t(mc@aXIV~}5G7@5ONOqPfDPE3M08K0kUZehqLves$faV--NrXvFcf1?_yE^PM)y9??}CZ1ro0aH5Fb&RO^# zoRbza^Xl^+X?D~7D%ps}=9T1Xi~W`_Dm2?Wgw3(;BEa4&td5zYaHfZryA5Y!QL=bd zHJ*O*m@ecy_1?hZArPDe=?R zld(RnDPTBl>L~MZM^0)_C=@~6%Eru#yxF1D2efAtFlG;?oF$PAo#!3X4-@9*xtn6W zJz>dTeoNE&d3(4DSFKcHKfM}ga74g3WhAlOZX+d!aJWh$&xEB=<@S@; z;YK6Z6x)CIA!Qj@k%KaV%gML)rZZkG@sCpRZ%);Y9DoT)LnJP2U~e zlB+kLd)aN=FIXrCJg=jYwdllb?$0)lV)sq0lo;|1cAmi#x$vY_()J?QO2o}6i;dSw zkjP#JklCY~-Ez!A^eL~>OMs`N3$_ZQ;0ksdJ;G!#N9MQNJW}W*K%lr(ZYC5w%v&qe z{Y+Rvkb1DnW8ahJ;8uBxd5qkVd%uApMq;oun`uHFXrLs7OWwzGmAtB;-l6wyXeLx( z@I#i?NyLIYW?x9igq#UO`*{#fZ=a(SPxHx~R0)eUm`_F;xIzH97b)3E28_%Tu05fU z9~5&kUczj7F)_L%ik2ce6QW~`0uYo_d=?Ria*w6O=1apla@l}>CWN6!VZntOj#skq zb5H1cDnIpVbKcJ-L#(tK0&hd<_6{SJm>l{g7=Bj9QgLF8F=*OtXo4&pM{LAyE7-0s z&VP*y}fmZR{PJlP{UEO^9s}Exe+KXF{(Z9av%!{d*R{91QP85s#=X zh5=DfNw&)^caq^Y49r=~+MDas5dfffobLH5LF5K+%22}M-48>E;_;&E8DTr@r)-d7 zk<`d$R>lq;kZ{=K8C)uoXLrEU2L3@3yThu_4twu}`$pcTu|*gFS{q|LZ~pTfD>Mf2 zdl6BSYEiX>^@e?R=z>@{LMIP(I%c#yUZKTq>$OesmMG-(D{?X2IQFwc7im7GO6kvF zNL@}WQn1^?Z?Olc8x$YW;0Q2LbX4kPUrIkM*A+ma;V09PnD`?Y&2;yKDSkkT%A8A4 zaC0R^)^Zbj!U_avhPL;}0uT6Art94eT;Toz3s~KY@T`1joM2tl$guo^C{@~ZJlyQi z#&CA>Dr5KPTnJ3|y{vlM_zFfK@O&>te1ai_L%7v5nDpZalFG=)ZcDR`6uY9yYmxHR zpm;*c>DLbJ7Z{@m>HF>|KID7E_=~!=YnJDHrG2UlJrhzJOIG3(p*}L~X*4wivGN_e zW0@rnG)ohoMKHdepqb#PO-0Po6{+@&ogGfBAvVA|&hbij7qbZ^-nLk1+?llZ!lj&D zC*Gliw|59i(O2{kh29;fM(JiIBm5i>R&jdLF{HcuWwci1kOtWY9ONXN84A#-Jz)t8 z+5yVT(X0u%4Pkmr$xZLJj)hBb>+3>0GQ~=9dO0_~wF_8pCKVz=zdhI*AfS@X(B$b? zrnR&wt2&p$XxWNwI_B98M_-`VPfyuO?8>+vp+CUhYLnZTpUngRX4kVrX-l-K$aq}9 ztc<);LR6JP?i~i{TB*-)#_2b{5kw;+$Cl+^8A{%jsyu^TF>zBmz`x9hD9h0gKwa(=U!nNSQHBM3(Jgb)gu6Ma+@ekLSm8iJGw?M}Z5 zJz`tW!cAD*O`BMSyxSh^`jTxi;hB&&6x8>_#T1<9!-I3K6Xfe#T{60$h3g}v1qH&oXOo;pu-tS@^ps-{ zc2difCGl%^S%@Wk1>L0Ea2EOAOuW0OT6w2 zaG@|t%!_VqAfW1fL+Kn2^oYg@I0;9=97ny9Ax_gVTo%>d9p{y4+5nPwTRfzP3jFoH zC~m^PL?DqqqG>`|jxt!0u%UCwMs>;px%HlVtXrl+azHX0)N3pIJb9@jTso%57Xh=< z{zCmdSawplEe5Fy@k~gr{0aW5y0F`-U>9qvZk$`r-HJ#s04!a{YM#s%b&idb>}m6X zh0tA6edN0OPKK+^75BK-x@VCD1&1X{h9*A~dO!mX<$d0jOYMnpSkHjz znsCzO<=lpftTx2N-A%%&h3Cj_l-?jCwz+o$=}Tk-?J=ntEVvcBOTYu!)2|--Lc|$6 z6AD+I!?#TqI~~ndh6l-b+oBvKQ-$vI14;f7c&&xkgb)q^t>%AjSuPSx1^J^kv%_o- zG{KE=3#-i?VNWh_fOs7_ddF^|_Soa*mOtVZ2 zAoDpgx`f?Bg0)JJhGNK%5yi@?KZBiC-jn^kJCs^0+5Rw$J>fisq{R2i6a<_R(X|_P zR#^lfygPJz_J>nlN0u?=em(b4t=LED2e!Goz5#jLdhm>;A>*fw)ld&xTy0}|> z?`~pkT&X1PQEYrv(wgzgFq{d+^7N9ooov7}A;bhK=+QM8j?yJW=-OeNn}1XcdKV#@ zf>C*%x%q{M68hpWX8yX&%!vp9^eYBzMWGg7?Tz-M4RhuL@Tr1gLC*@;WI^i@i4WQzhF+_Yy}k8HSB(L1jt z5pvpiDN<#8L+;mvE)-zEpoyf`k->`jxEq2zgT=5EhZbLpG!oPh^;uYI1`m~BgS(BL zBjf5Z=UmI%5kOKqhnrON>;@vG`=a;B*gb79iCVY$cS3ByO*O+omY(xi0xNzINGeQ} zm=k@)P`0n)fPC~T!zPnv#6_+Nvqke+z}4$Ns1nYP#zNjRVRh9aNXOo7W!*|{6bjU~Opml( zJ5#$9o9H7k1@&jJ6cUE)8YXqWEXC0T>!5s{WK9T6p^9*2(oL%)j)rY=NRt&=ZKTg4 zdlquUK*>o@=6MC+&km9Jn3~k;*$rfg@>$|tL=GWN>r!6CMsrH}Yg$$|J1h*wrm@;r z4@+0K1V?yo9^o#27933QIJ;K0?A69`6>GwJ;A1^N+43sO%cyXKDIU(?5f{^SiO1$G zz;|~k*DaGv8B@OcwNZ+?s9)bNKad8v)N|#59_)*<^u-mt&C+I(*&&z75#k80{|q)X zQ|`^dX@jNG66yQVL(vjaii*ft)o&(DsJsAzInn4GuVfCLQ=hro5shT%?zA0-`mEzME{B}lem0#C~RkC9r_$uMX$IKV|n90 z$R&Qy*Szr`sd}hJF(KG{WY{BHB>aE%OSPttbmj@wmZ439Vwi^0U2Q$<;3zIjF}Ny% z3wuqE0|X4<0hd36WvNP%A=Ss0?HY%|P1er|dX5~$V$M%hc3q0y0v0^)4cC-gF5*WLP=~8T3zKX4H08YJ3<*Dg~*b-@|a|M;x1@yM4 zG_e!Ex9m;7Y-HJ?cS1_odxNr5uYD5@BNe5*v7Q@8Ioy=Jy!v zWckR8H^5yHx4r>*j*MsKZi@on3E4^havsi{j@YL5o^l?m=uwaGp|@pcLXKm_Oq5{o#Lwv_2OEbpXOCRQD(WaTNwZyO)s8yW#%t*kQF!x*JQlwoL`8!3 zgjCX1l?L=5&)`BUaZitP2C zw%B`$c*0vx;h^lBOOIGRgORyllONW9w-F(~3>iSiZYz~j4c5z)b15>dyu5-|&wzGE z*#_P}>Nl#?4turbuvA&}|MUwk5W&(8gQX)wH{uLp3chL!n=SO#Q)k?E5AIEr(yH4# z7bT-r^2wGcZT$iVYTZwYqhQPE+YMr4I?x4Z_ijjp=bxPCTbct~D6QM`IPpw~h`>E~ zO>3Xs#1D{(ih^g?oS4!_nP~d-^fMc;P~CI6*4g2_>}T=f)Uz8n54#{lf!!X=_x9C~ zoxc_Es0vu=lFy~c8Bh@ppl$BKbOCY}_MDsVtJ?yf-VAJQu>TmSTU8WpY%-JxKtd4w zp2lgMHw_RCF~Pz5B4M>DQ?Ncc5Ui)&%+rq2^ga@z!>g?c1>;C_uLGC1*O6_)AcE|{ z;WJo{1xYKM?+dv#p)gw%r5Ej)eoa`=E;hqUy%KvmiUz?grKldg+aj>Ymnd%RwuLj4 zyh?9x@6$$Ac?q^nynB&8&_UROD$vi5{{Z*S9tPUlHnDMn^TLFDfD4rw2w%TWO1XK+!N3LtvQ;p{e!%s#A4 zLw8#orY9iYSezr%OHwUT={t%gY}+tf2}G&S{fJhuBxAu{V~tPSJg;*Uw}&L`$H}?C zqCZx!-&x0tfSzE~Z! zLGEZwk>1%g;R7#*;ik@nE`v8;q-G>LWqO$GtUnF0qyF+250kh z?8k-Sr7T4nS6d%RLo+~5LwfZ5v@vXd2yQBdJ>P&E8uNm)ah5fhnAs2c2mi=nDx6H9rmz8##KLW(c{-a*&lWlP^ zBP;U;zSe{V`1!0{W|z_rY4UL+phH%jy-TSLU+a&ewQ>&6PmkdQ=^$4l>$C?$Im(2+ z_U85(49JAL=r|_YN#@5*$rAFIV6k-TGhxT`xFgda^Qoh{A^HogCOx_a1N*3X>`=J& zv_Y?Vc?EnE!}|F)F05VCcT(vFuDhC8&&DRAqIB@0&*`jSdZNSwf2Q}{DX=B}-tr$XP z^-M@vBNE24>D^I$({wodK-%mOu1E~Adji+*uZ4S#Lj!qS1;g5Ahpwb_1=c=-tz&gC zp46cW9@pSfo>**-6ERwCSSsjb;}W~ceWL-A6dUFDFbpKwmPu2)}xptg=|VGg;l zkQ;hBa-aYMpb1WhVFp8H;$xx$&-TCupWVs8tNPl@1>3&QJfo{kWx$Za*CH^W(o9Kms_n4fNc6v}t}Y;kOb0NkpD3 zxCJonmtGyc_w*=w)$57uKg@`5>s=(svP?>C>V4WWh$k<4+Jr))y|~@!$L|1^74n}6 zp$a5kMSwlH7(fCl5_kreWbZ4aZ*62xU1O;~&V*ul@I7>P5B7pG#xd{A-!{4d8D{Xa za9Ps68Y#v&6BY>O;lFpJaHVCh-9(dM+{#hy2>~-MzA{RChcsWBJydv)hYB;6$WTB+4_A`# zS;YMcz8K#%nCY|k=W)dD=RyI%s+sHwVQ^)_Z}Q@Qqq!^hw+Dl*iTv+HBC};9YdaJ2 zeA}WIw4OG64-((zSh9wH`gSQ$pogie z;Bt0|&wAUksx^B;7hvNnr?=aBdJ8XaWk;t#B+7FiS=x~6<*Kivz(yE@aolZA1|(Mj z`dK9EOT8urAtb4*JNQwM=hvF)* z0>AFTOrn76-XUs^hY(r)&V*!BGT~Mcdv-#HxhE7ki`-W^CTNn{5cu2`uoVy zVVay8~TWRFINX11_#Wxp#bC)Su_P9HWV=?h>fFbi8>sWdGryq~k zgN9{g`^eCL-W%PQQf{6%n{3-Y9-4{LJLI+NYKa`kTI5W~j?0wXH!1}!U&#RP!A?Tn z-&|{v1mQfdD4uO&P2gJk?-~r@1yA7qqyB84bu>usda+TWl4r!98!0-29H}O(@@mRf4eFmXnIJAd>fB zb|S{U(Z;)x{(mrGes{k~hYPuCdv=&wxBBfeB`=@@YJcw#=O9&=a7_r!oEfs*6Vjwa z^L=oy3CZWW<<#6lc>Fyf3N3fO-ZJbR@;vyVSo!K00pb_F9na9>yoG)1mMJTSAn+S8 zoC%e;MB@w7c1QQ#EAl;E%(u zZ;wyE>QUyq@ld&)O0cd*4h-yNq>QR8l7-%;mp6C%F=XH{tTrO-mq>=v%UvS6~O&vT1M zhDC$DU%nTP_1WM$-I*{iDn)$X9#koBaTha; zOao#He-9Qc<%2K8cHW_;i|;%WvYhhb^yVGx9eXc4&3d<)uLRE}YpIkR4|-p}Jt40k zzq7uzdn`aG&Fx`t_k>k`l*#W%iYJpNtqONfh|^-paPrzsF4(SbMwVQZ`%6dJ%~B;g zMA(xCxONzz^%Cz}M}lP*w_?jhkswjuM|N%L@HfO3a*AC!fxBagB1xf}&Y|4stKjOE zbydWw0JE7b!|IFCrTg~qQn~N4LhteNMkT|po2Sx5B{4WEwUn=fC36Ztr$;_IAC489e_& zt9Nh(1@PbkuQoI}a{tZr++}578^1bAQeylSteqF{nv>0|%-pVFc^0g|QIU7g4@; z*wb-wy0<#-4!r?jq@}U1HeR~VkM0B;2f!ey+`U8bIA1-b+#@eO5Ek@M_nOen!<%n} z6Ot;@d3|tOijV@((WgtXgP%Cw&27ZWjv|`6cHJ8QxnybS>&Qq4f+BXjCRC4A+mXGz z2Q$v1lsl3tGf{=|o7(ivN7i>MF-2EqRphu-gw3%~C85jaD-0mYl3&*j(Se>`>HEq{ z9ky@!1b|mtk%Epl9)e}$i>yaO9z8Uhy;N%uYT=D81Ou#8^6$V zAv{g>`_)6iX=i@_B6hiblb@$2%gIi;9Q<27v7Q zny^puIi)+(E*OzHVSHCUCKc?#ue|y@xRi((_<{R%I>jHL64$+UNZBUMa*=WKF#s{( zm9g`FzMs}q(EKhEOYWPy z6AC%@wK8DG&XLBqZ8V)vUvFL4ks%?VO5E3xad>=;fUa9Eq{g01dQGSvE8Q(QeznO2 z6yhw=JUjG-pgW!C0~;K$S!5THzx2?Zi@tfZi`!I?>w6!M3a%Z(3O9$Qy;dP|fw#T4 zxpr7^>UD`Lcz4(v80iJlxF%$E!dBthi-&f>RMf<;>^ow^O{MUcT=O$l{^mwyRiS3N zgljjhNv&Iw;59Ra&bWy=uanHTUy{V%j;xd=>g5Ekqx9Za*!om*){WvdZWuecE`?)c zj&?L{&!qrewo|zA%Er|}Yi~j?Rbrc5t4q1`)x!!(!;xM9%K(aoyk)&)2IEcz#C@wUXt18L)-ZCdB zzl@OGIoM);o*%MYM=49?G=%mp0=k3-wB}kEC++zec7N@#7xaAVT`25DpxpqlOAPac z2gZ1dMs9`+Ae)i@b7b`>XX^payPJ8Q3mvZ19t(q{+`z>gxC!A+mG{f^_#NoSdo9m3 zN{rR}V=0I0c!)z0g!SKrdygmw4i&E>OA|&1?{GmusYo9J zX8RnuM3p2PhAzPmPx)eDf&s0-(K z1xfZEu)S)-c~skUPj?$A#EQN-`sPFPWVPNKEp+$q4*lom0WhlrRhNC2By{;a^QDJ9 zPb6Bb>^dI&rq}`CD=);MXGwPf7B`ed~j043B*>Mn5jt$*ZLs>7?qqgffyrC!uv9&2*AjeU05#qqXx?Hz2Q1X%LLYU6A@o%7P+EX?;ylt{eX z>AqeDJC0J*t0Ew(ClZwLMHVkXQ3>y?t|-3;!@OC~_1_(q74)>AN4f9H%%m@LZe&59 zVoLJXF9IPU(zksBb0M~VmJuvm99#4uw5<^RTF=C*+|-?ii0wla0oH{!C2-gh^=xi!2vx@dBFF97L(({Ei$Z#7(sB-D#@z2K5b1>^4yAG%Yf_lU+g7%63U zAK4=SD&i#9rFdf4`{3~O9gHRg1%UExlW8JEzJV?g{1q`mru)A00;eL3~g>CjzP{#7s8Cr+Se4VROmluT4%`-zfq>@*G&nO(0V zD;N}VAz;^p!gj=ge!Vw}1&UJqe&L}c7yp>iUx@8>S1(dr!nGTv5Bu3~K*j}7eS4Or zze*w^$4C!S#uUjs;gKl=}SB5ss zS;HTy^G;}oWgR3f-ZqTerumt-jlV-ddo=crkvw>o4}Jsn zVmvBKip#!7ZF(n#_m!nNDq=DU%uPvQogK!nVQJR)w(&cNyCc7sB3LNWF1z&ZQ06cP zASAj5bB^$S2RW%ypPS6H(K|HbN?37W$s3yef9txFG}>~U3Zs2S!32UYgCwgy^B)uI zmyhL}4FX8=`MH!;Y;F16AkKNS8-=*L0gQyQGKhB)1fT%Sh5eL+i?rsWPA@!4jszpm zPCrV1cH`ZgWQIokh=FpMt0&*H$dMsUK)MMc&mYFRldMSfDict60EobT#K66=mGtiU z!+`i8n;(c#Bocb?B0slmP!K`Xe2QJ^8x}+!|6GcMweLjUS`ASXGvDe@E^OQ&p-T^0y9(AA#Cc8z1n%kl0|xb`^Gh!X$fSQ9o^J z0rIjQHGB)}=i3L3eAr%!QO0q^;{5B#9AYH#zdvpL0x;M2yRds}-vZ)>QCirKj)b3< z;L*kjppyBoHzBbQKL@+DEB$6Cp{2c)nC=*;65s0xv?&3(<yRDs?ZdKGujD>N=1r- z{Itn?`g*00jkX_4VaIOt=^+%&RA?M#{OX)G78d*4lX40>ClRONSH<78We|j*1lH`i ze&@(2b(+KxFZ>k%LGH?jRDLIf{(IEv%IPv(3(?Cl7kWTDkV#2VzsQNAJ<=C*gW z{h-wbe{H-n3=5I}?2twEMa6xDlME$!WB@3bVt43O4j|!PH&5ZA3ZlKCebrly#b6%j zy;)+M(jW>ZA9}m4sLd*R3$u#|V-Cjx-}^%zDU&iMquP$(L~g}jy&Z;$1aDD%+dQ|c z(p^PzWIcLl&wU(f@i!rG!O#GQN9xKuB+LS&G-+))R#X?3@(MJ9U{6IvT!w#l*b|j1 z^tQjd#zt}=C09?bl$U*rqF=5|j6wB=1gzYbCjz8T+*lglL>A!x`HBc}}@YDtx zGnY_k-#fTVF0%7O+a>~ouZ(2@C;f;M#7F)hSW3-H1v-E9kPeeXspija#1t`(16yFq zIJ-PJ@~7CUQTQ&?ezY@q5XJ&;K#IFVSq2=zyd@^vHXdNY|D0}Q$a>t#sXA;&a+fmjIwMZhCvmSU*1u&Li`}HLPZGyj_=`oSW z4w=P55wOU)SWxud4(0(W>M?}9Czhfa5aNXwvE{ToYpvQU4UX{5Px>5W4azF$Pqzu+Q7LUY5*h3nI5)QHldm{&*At z{YXQ2SvtQRsVnR0=SBDC(_(nVrk``*FokNt?0oKij?6QMZ=l3yQn77z-ShW#4&Lds zpBS*Wh;Se|jS77-QIv@^dL{J+td0 zvo$GvKbKZ`UET%+G+c`azOr_c-CoM@b~rRybYG9F zaXZQvTwKY|Is#5pAx8Tn)8NA1n8<{_y2~8dbd12^%y}pDC_x}ZO~5$Y=4gG^0nxu+fPyf@v$?I zd?!pWRHm=$-(cRGCiGh)*HXX(@GFACqqv0A zfbtHGw&~ftPb>~$-!TbvhRv@YLLt5qgxj2DWg{He3xjlFch@dB zVo4UZmQp6KD2p!Q>FPH}7A*mStZ(5QXJ}!P<~@sks?6v4OsYFgrmrq0IR2m z3LSm3(%agf3FDg?1?RLo6x%=%_WUrTtq5Ha8G`2BHSMP`UEmA!$nUB>Ip+;N0$zMW zIsS%B@K}|PANO2j&Cy{c+k&3qdnpyfg{eZr%FD8Jn<_u1U8xT1?1aRymr|Z4#!$Fd zUk0=K2?&0Y*50E~{us%Adt@zzm*J+$K{lVkj)iA|ydRdBzXnE(ttxUSjJYTKVMw=) zPD}lSqo-bODXMlb*&aFY#r*7VQ?4MhqQffiH;r?JN!jB zYCTJSPb8}h^xAm#d^jI_1DCtxNUP2%UG5ICN7lLPb|kB)uEL+F7-s@1)S*fu88yG&|$#ZV2X0+jst#gu6F!Ug7K z%?vs@fq{zLn+M}a3j~W-xr;Cy)@ zKt(MEO^l75348TG=R&4$FxScdlrZmZN)(wVK*-FZ)EV$AoeM9l57pKQau53sIKdhh*g_E)a@z$h!zfSkX+Pu{4WF=GtSU ze;zb)whRd9uj;ddGc#@jH@%$V9rzZ*2S!K;wbv1Eao+ z@NN>Evgq}Zd@Ym->LJN@DP3@(l|HTYVD%&_ zaWu<{#P?7RD*T!4nXoq!uBKn&y1U^ASqsw;R<gn zx$>&^0aDS1b@vrxr?MKBxr8Sb;ss;7ZmCd$ z{ffQXI3p?qLQ>(?!{9YF4^g~Vrk$f-p%(g<#Bjk7EM_}yT+Njie_I%cH`wEmU7wl>u8VEBOF@MxQrHbraH_+(Q(pWkY@cEC*rnf$nsz4_xn`qe`t_<~wXbEcV zgsg`8v;6mH%>AfK<2*6-t4c1pcZD?g#G|>C-n_sUJi-2;hWi06!-L$*-F5jhol~jb z;15&glpw1w9-Rrf)1JC>#A{NrnNlQ?;awEr$vzB!{;<@&2YTVdvG19X3zC>~hxT-L zV{q$vC$NZ}iMe+X^lin7qVg>ACj*cp^pS@+bv}5RU*Hk%m>uNY z%~*LlcIApVeaF&-(`M0NpSu~;o3?O$v_0?Mu4h76)i5vt=`@X27Kr4hESJ;o$PEUm z3V9Mf8@O#K9LWo-byqtf(~jDMVNYX&g#`e?Iat*&kAaKlu0 z8cbST4d$j;aQnqRA?)1Uq#CnBvKxKnS_Z++U-2*_MSjZ* zOLvFlgju3;u;0B=QG<=SD@pjBkY@CIx@J5~dlQQAVsB3SJU*Enx+9#rtFy{ZsGl=u zdc%j!V7Ng@hKxXzZ`X#lK+tMZjWZ!A=wi4Asq5E~Vt_Z|M2{bDo0D-kuI4-|Y>`kA zALaUwx1R~2u>{i#rAcq6V`;1Et88KA#s4NhNanogoqo9h$Tqi#H(`!cJhVK7MX&wpp(iFzV_ z+W--WpdfiRGZPXPr{+%4$G2k_&(%=(!PBz{jiZ%9-|?H%CJ7i)D^~69Pz>~`ABFu2 zRdtN3j=aQR4kDX2H|Mg1yi<>#HkU#Ged9aMd5(;ib%-E=5#J62$ZS>!IQ6F)EF4oD z>Gk0hr%j-QV{#e;PtJsr4H9rEr=&g|1qw=JWzqUB680(;{t)c+150JV(7+)!X2Jn- ztN>_SM?iu6(IWa@yLEb@o+5r905)MHA@|{yzJt;eRmD2RXctZ}I9WqdrLYXE%atHV5x?n~lM!(vPB)?q?Tmw&LLfD5M#)eLG zJQMcYasrndT@}HJWT0Rp5PcVME~ZGk%o){-O;K zl*L9laRqg(4gLvgQU57e*JefJD9yp*b$K%(Kk8v~pXh>L-{4YW7snT$4|f}!{>6u} zyt(<>++;=a*u8POGa>d>3PFmTVwW-6U+@6M=Vwe2RVB-@A|lOg15{mfgu=Gb zxs*W&;bFg@JB2iP4a04_Ux1t+S`FHZ4JqGiW6C85VZGar6Yi=hJw?0|svu3bc_#5q zC?H^&dmqN_er@g!ETcDl26Nj;R#g{>u7JSOWp{9+a{qC`tupL z4Z9hgjCzR$*KdBRQvyA&@g+6=+-67SiDl~X{CUaSmfpybBwqd6=Jc~*+#CSrozR^y z805VMx5G-mj%b_6{6Oor6-}~bRjt?7Q^V?+ywOfbhk=6TlO2B(R*7jLv7+Bfo!yA$ zfo}AY=yTdkMnCy>(ivHIt!*ac zSoqG0AOP^Ua&Z~jg$h;-J@|;bDoedLUrGjnF=Y z_ITUEE24j>=Zc2A_Gc!^fvp~PyZU-E01e&2oLB4y+n0}?-SDY$y_A8s)7I~F_moIb z>OnC z7Z^wvlN;Z*Lif<%z{u^# z4-bJ=N`EJG^9i96!08DA(+2J6MB^cnolxZ~AS4~eAbu7I_;!s00=XmiWLm{xY0VNE3DSe2-T{tp`{w>l&X%Gl}07kwx zsb4`Rz%*ksJ)&PoK9WOVbb&eNFMFN9JzJ9JuI?KjLZN@es@`Fuv3njB> zLNKHP3-Oe{-!}e?s!tkz+bZZ<7jheYog>qRsV2k3t0E;W+!Cvd3i>9D`pQEii$_J; z3?Ua~`i;g}cy_2{OcevIVCXkk)>E6?-%Fu>VqR$-_kR2F3B$aU&DJ&(Qh!qP42|2p z9b-Mw$p`?{*|&(Y36D`;GHx!pLMoJ@!Ynto6LLo)9BRWH-(W^O4@guqQR8RA=qE=* zeewvm&7WnbY^w|p`}v)PY&9|EX~x3JHI=W zJ<5lK3$)f%b|;G^t90{Z2oRyG`tmCBT@UTr4+4!i+JBVn6mQOWk3^` zldH>s$2b;I<%$7;AvM734dMFjFbWT@kpRIncfxoLFvB|#$?Q2Y2_jnyJYv9YV~Nsr zdMKB!txM@8uuR1vp~Bmd?C4Coe*9ehT$15VCw0C3xQ6&4_xbeDw>T0hd=XjR-LM?@ zF1!W+zQMf{fjj&K{_VEm7ACqms+y8r>4f}w3h-D{3`G-6PZpG~BpDWz$(36H zzrU3yfLno@VP?;+qlJc9lam@DYkR=I%!{EM-!PN*g*!>QU;b#OC zag=x#4m7|qJjQtOGof%K=2hoU;`qV4Lr8!`Ey1~LTa=i5kF|`fXF`b&>4_DUXg=AfPXcYC zR=zvrq@rGWqBi-*3`R2Skr@2mEf|;3LvK=LGkJgpyh8{c%QyA$U$T+EPaqt zP}&T#e%&(ol7sCl^7X_l3EmV#t#suYQ%AH6?~8E8x;TbI*<%s!gy1XIk@3yDi?hQX ze$l3W)Mt;(mm0^yb1nw=?{=x)9IB;^>vh)kQ>gE3vk1LoVGkMDwNtyzhu~B zpaiP`H8Ev6+DVBz96M;@w5c{%$n(s2Poli*@`x3_Y2lf$92jmR-go5wJuxmt+?((? z6Gm^V+zac2fliwgb!I#_eDmR6_y5Yo*iQO)tUTrY28XTtD{3n~2HOHu19 z_Y~F-2Rn-t5QP46f!%d*3cBD-kE~~h)|EAhQG|1kmjj63C)um)ZrFA~x#+mtPw1D) zls^niK092 zSZ+92^ReNAZbYcydOWd(VM}h0Sp|)6KXEOKrLJd@c8C!PuErTnyiH#H zt_q97MBxqYV4loLT%mmNYwMW-XHDTnq1u{ISZ19W`AH3$uu`E!EUlY(J8j1Gtr&|x zgX_ny3YUb>!R&;gxglH+?L31$DsjK1sq3o5I%Y!pJtzBiC`7O&t@^FnkbW=7-Rlcd zl2y?oFbU(_!4%)|Dn3t6(!#C?>lNy8(RYW@7k$aagRRl`W+gq(S6x*~2s+_Y6g<8~ zm~sSoMgB>KMurogY%#v}?#83U5|HSZ<2dbxq$K{ZBn!P03Z9Nqx=okv4k6(ve;Dz3 zV&zGYPoReWuB%Gb=(?WHTtU+!VesmV^lP31%)dTP4<1oZRy8%<>F8Ff=EPRr!Ms4} zN9MTwGHqh*!OhfpQ=0%wj#F;TJAW%X{y0PMdE00V%8zcD;Pxx?=#z;YQ*AS07eMiP ztTL;#NQ@-+4qU$D(GU0AX-+YD`lUlMGp0P%>6x&Uus9#3c2`b`C)0Li+a@FfD8Sl$ zk}xuimkTt_rBp+JvqEpeSUf74L{6|ya|?5=4gZJU$qk!4HV4IpG!dt?qg7YR4-kpLV=)S=zD>y*nl9Su!5Gs!lju5wPWwJaZkgz-Ce`25%cgh0J z@!*wyQ{>shV9Y$Ya5!^dXxgGf#f+e(=%Olrb zx|QjL((gsN-_je_Epgik86%iRyDNWugNbTz1JHjRfkY!FnM%k7Za;cJ2h)e|!H46; zje2MmOTCKShf3N&6iE3Fc2vHnn)uNvfhhZ+Ho)>7;aJfuk+!j%m{g&a66j`o`n zz?SXC9dK&5Ef*&ac+~!m%v^Z~fwgZWZbuNU;22lGZB&20B9mY5!m!Oe$@*0r6bVQx z1K_uJH$5rgZd~8I)lHRLnTTAf=Z9{-g$W>fKS}^C_~~I~cNj=SQg^r=yLHKxdzwf4 zGhxnf>T9YPw;#WUVe2!@bHQ*M>)6xK`#X?}Yp&cMTsh`YRiMkQNFQO!6L?`>7T~ncVg_ zVO0++Sk@KZ2>~DpGvCrx-HyU7orz9c8S+|iDDO(vcZZ3|=mNlel{QC?SSu@lq1S!k zRbx=OS(xryL{XKYO__Za8yGH?B5t_)?l1t~^&zJ zi-q~#@iwPpTqyrS5D9zQgb3g+_%Ly!E z=VmZ%_t&nwRQ8CW7L8cl#ZJ9KF=c|DnWgCjaf%!v~AOelF*%1MXMv+pJpjSNkP z&ui}4A#W4wCQyx&oWW9qc?%#pSh*rNT9cJz(Mms$J@-M2(|Jd;7eue zUI5K6@L&V@@;kV%CSq>l>9>ulHQqap5lu2=IgB`}HrDOjDD&>&7p@PSxNSlL3B;)E zrRW1t31#-Pip{cx9(Lz%cS1)Ml))2=-3iUl+RLNno3BKJb{Vr%D|vcoJ(n&tFrj;+ zd;qa(1BrJ+IY9A^wyrIs3j&sfr2$JvhR6$%fhI>0d`FfhfR)f>rQffO8j%a3mVnhm-7X|OsGKXrYIbj zd^?IelvD5l!?sP%E3V5l&ztc!!`VvILhzjPo(P zFlvH3p(6-{g38IHMuuWMdLaPESKf}q%t3NPy%jksA_m$=(s~|9LIAo6WP#Y-p~nKm z(gNCOkfNw0lNG@uxV6bY`rqT}7AFc*5b z69&8KuXhrZ?3+-!BM~svfNf(p6@_eY{bso%hF^e{tM7#6oOZ}-51i|GY9T!XQ5ZmS?Ocwl&Y5$Il%G8Qkgjnxx%%+)p=oQE}A>dll6HwTw$7vF5=?@C| zPAG1nG3SZIhS3VDadXJL!7S}sq+}%Qs+WX!5yv8DPR+S@!rriA8rl3pjDe9Pt9{!< zZi-s20wH}9wl!^YCo4nf#o8TC_J2DH{xGKr4}fZiF)1)QUn<(%e#u(80Z|Mj9!n{^ z5gTKzCn=o4DI09l)0wMt;<4DzA*x(nWk(o^Fg1$~_sERfCDT_HbT0tVArx>^I(u)F zj?1}&sh_*|2JUuOelKrx3r!8-oZH}@?%jW*E5(G7Wd@^lZ~D>Sqsfl z0U3DmO(OK42tlQ;jcHiau3&% zTz8R*9Knnjr$-2j4KqrhiS=iZO zQ3vfA%d#>|4;cj9@OCH)@;~fH#&H+%XL^~fjZ6C`v~5b$3!~SOsOX?TI5B19TB(zA z7cSDx)7D#kW=Ci#_BY{Fw0a;m;qi2g1P%O(Nq6uNWD?_i&bIZ(-ur!@PS2%?GE{^+ z03o)c022oyfUja#iIn4tRTKPYVd15Z9u?t+dO16c9~1Nji|m9@D)B+EPnA?0s0RzB z+1oGZlp3?>+RhGpL(XdXp_L8nRAx~$8 zOjbBHKS%CDkajWwb&^jV=2e+UOx@qE%QP6hL~I=fF9T26^rv2DLT-w5I?k#{K4t2J z+{iA%DcK~jJ88u^Nr8i<@TEUHobz&keD)hWPcxPEo+E%mLM#B+q#ECZ`C>2`d~58t zLm{{VqRqbvogerDCx4Dd^>dMo{PlAq#0dR8OOb(T1QKDA*HNGV9ZFKS&EAR&*8RDZ zV4Liss^#vG>(A+mhOeU=fW}E1ov==|(R=DB{~82Ny=*58s4t5-|r*{I*#DEOoIf!+brfo8@=HayW@Q zJsgNJx0grbZ~_{uO7uAj93T0PY;$Od2#a4^1~+2;#llq^-ohotjsLVoFhC_U zAW{$w-hDeP&tn0-PrLGReAy6RgIC`+9@rtwHz?tpBwi0j_=+~4gC*7o{&LMbxHn%M zpP2g;n>`RjZw8)oC|Bl8#eg5=Am1q$PIikH$${JlLh%cs5lb_ z#-bvmwA;~EI0tO~0YRA=HK1Q`(aG}9!r+S?3slGHo(W}5Y#X)sbL7g<8f@qt8MYJ3 z&_%~P&mvC2QpUZvnKL2BuAi##i^1oYY#_`YM&08%Z5Sa^^R-1nsM1z?e-rZR{I%o! z4z6TFK*#9MZu)eA53-*(A&|@o$3^^181EH2eI7f6Mvc&1FV2*&Qd!B%Q}&+1@q1GO ze-oOl#|nK`uq!7~&M)oWwhW?2OaS?7i*q1pw)-ZmV%94=s<<7+F$cVv=ebd))I$JJ z@b$xph&8P22f>OvQid?-bDWqbK25^+;l5-TDMI$lYI2fU1Z$?1)|~|Wa}Lx-Jflx9 zAcZ!Go5wi6nl=-vjJ1bMBAa?aO6cH`Fn1@*JRM!Rk(A~k{>g$W1W4QN4pTM|A@X4S<{X)6 zgE}F^XQKfpxeLiW5L)r0f7Jv--COn@eD6nWf>s^g=2BTUq8sfZeoYzv(MY~ zB(0B581R!<2EZpNxUQu{+%UX$IQ>2uf)X?od%RXrmPoMDyPpX~1Po<&vKA$AuhKqc z*gY~aLGh7vFDZnt5g7TUsRf*y$6^YMp7R|%ox@NAs2Tw4IHO$g10)f!NlFuQ_KTCmJxww+Cjllv1L0g~O*$JH$3X-S)m>!1)b_fJN zBt||YymMVpM}hl1fvcV~Rq@%4!%=FkM%Cdig5w1P+24oK=2Bu?{a>+WZ8WZfXNF}QXJ#Ol2!bpmp}RwoFd`0CJ!5A= zL>f``D)Ctbt;FK-FFes5%tHJF!2YDXjt?>-Hz;WRW$k7nd{Qnh8VurAe$@TDuC|zq-^_gsRI(m#^ z4aUpO-oc<4lNYRkfUiv!s_IqM5?s9#M#M0AW`SwG9i2o<%`%ANwh3m?aIkxeTy(G` zksD^wJ7F{^tE(oE7iot|Gu7K<;57TT;b1GAkoH#61R}!bramA)M|P3c=;hvdMbLyU z9AYG`pQ;&u!RSb=2Snc@1jE9*C01~Ehy?E-QmzwxWJ_-gE_q~esOTmXf(d{& zx|CHB;kReG@|p=;?Iw?_x`2*9udk*}g(|#gt?>gRLmo*|*stLLD0ep?UzJNId~I+H z1s>#h)yBw*CsBJ(ZS0Nfvk2U`9UTlL2xYJ7xm!6;bb!0P3$wBCa4G7Dt0U7Q>fRet zYWHMz1{+>7~O+CuJ^#cIkKG$=ZvvlJ%nBP$1=T>y(h2pIR~~b zhjeq^mX30! z#OgXsrwaYE3fT>!aWMK$=)|0)5aMFm^-M@6szY8TFx~GcOu1|~tKW;_`$^RPik!Ef zQ&DR!(&#&(p%ue&Ok1|3lgynl1H1Q9fI#I1YF8ZpCL}v|0ssSLZ$hb+&efo{)|B*k z8f%^0rHc|~pcDR!RgJ5vP3k+g!38P;J$UH?%eSzaXx37zXf@OeqQY^0<2R9 z>Mugy3HcMZRBHU;6T*&~z)Y#ZosvkG!W?qi{MBJSr;P#v)L8Gn1^VMfpI2x+xVz`y->WJ@l4S?yK8KME-EGfzbCl<;LTzAG z5+tF?0#Xr5HN?GMYkEDm>oQ}d-VQ-3!U_}YyAT$}d&Sr~%-uC9S9~g0*|vEm7c-8M zuHWnsCFmp~3;%ovpOQ^f_EaHehk_Wy9ZKGpR$6-QCo!|polw@48p+T00S~-LH#~|< z9Cwj;C3?*Tt%*7W+l-@^Tf7N5V%km+8<#7Z6p%a;Sof8)79D9kE!#z6U~{>Ydne?; zV|j;Oy&dUcuWO>EZpds=7y|+(@a;!M=qjW;1p1MogAu6=8B};36;pB=aNcVxTnlFW z-L`Qao=vFpA92m4=p|uwt0<7yk%7tUe)W)^a?Dt38g~1^R1~bb)Oq_b6M`7gX%N`Y z?NNV_E=Acz3dyJdp#6l*bhG4!WXrF{Y|n(Fmnq)DU$@LWg(W_E#lS7VM2z;()1ykR zDDlZXuRrvYg8!J`3jB|LT=38S<1ha25C82CoAzss?0)|4zkmPEU;fkk7WCWuyBXYn z{P8!BlqiTR^3RN$=Kk9s|MM@uW5z|y-~F`?cfAJoxan_ye}A`g{^uWmRqhr4|NZa& znA!au-~G??-Griu>z5|=#P9rWm+GjTRNx$14$sfbxZ#QyJd4zB* z<-7gn*O3Q& ziJ5&mcaPjN08uX|!BL(Gg*~C&*}Bo&26U8gaLOR?osbT4i1LU6&^MSgT5HMvhn%wd*L9Z!n7#Age=pDDkz);~*_YE`8bwWs_Wx5JK^8N1Kz=m*R?Y z-(WtxZ$L`Du3U{GQH(hScsq1^bMmErBA7V@q&J^KClz8Pg`%~BQ}P9 zsI4RS8K#|JA42$F$5J?oEfr9${n}I_;!2_cuX+W3hZkdMdt_5F9^r5*VrMYCUb@jk z5>V}HD}fZ|Ky(=KYb#E;;xhK>*A7M6c@Yd*;SRozlvo{>dU5ezTkL`ygv68qZ(9K> zbm{hXhg?~FK(88iH!)3oSJ7pD@+e0jJ06S~gOCjS@usSiHYZvjXKHJQGE9H&8xG>w zj$#4Yh@wbSzriHv(Vho8y&AY}awPkygw;vTgz?)*9+-D5U{;3ET?qdIBi+G5bssvo zRblg+klW5yLFP3V9LkPa1RkA=sqRaUcNsolq}i zQiM4a^-XAN))aSbYul9PjP=hb@hsA3uw+(&Vnj1Cgma-&0*5Q^U@-^fz$>wY+h#tQ znanv%{VmM*L{9)Ikiy*|zrYdGcsg-A(sm)hw61&GGQM8lS?0F&yrMc(uy-fq=;bu< z10S&+Jxm162yv8nju)DM=kXYC!oHsI=bn&cqI1h!T)sK%xHsBk3V2$y@Y>;9gkb`C zF?amzw$+c@qYQf~+(6RnRXt|+$VMir>>`n{$$L@ax3Dk$to(TUxyV8d-}$pcT4)KU zVX3!czthx5AnD$=$*-aV21R`fhib($?tQ${IWpJ~%h~_#4rxr-6!R~~{RTS)6UC|Y zr0BM(O^`)zEuIV`s&JL!=BfkKsCa2d(z!c0%?OhRJ?|}ZtDHYjoyN9EdMJQXByoY- zU7ahL<;`4H^zqq^sco>TRt4AF#+Rv7x$4tzCTu4(n>f~_LHIr{Q;&)HC%S$BOXNO{R_+I$3%{w6%Y0+Rc z{B}E*u=yDUcQO$!#pd4#OAb>sy!}8$F|-rPg+CbzPZ(g}$U-}z)7u@?BJSS7dE&}O zV#@7DyNZ_sZf22W$iuNb9t>8xY9oNN6J9&^`kRmfy1gO_cI>tZVm^Y20)Cg`+IRt% z;7#jJ7-i%*Bz9!e!twN!wK~Q6_6 zZV*{=Eeui`xkc65Plf`xyX0Qo)IEv-UK)<0~6S|6ANP*?JzIG_h zq}OGyr1|Ye0FO?tH_9D~TRqph6AIwHz@lRZ1a%Z9OdFzzT;jI~ttrQ}z1|5Q#V&qV-IPTR z6g**600%V(54M|AE$sOfOO7JkHs|Q&a_?!k4Ng+X2>VUHWM~Ckn!uA;+>UwYp72I( zZW}is@VBXMbQTuBB@{#nJ=Zo9c9ng#4fbRe(@_BDndJHOZri{oU;@e*M|}DLm*gD8 zOblnjhy+%_XkSOOdg z%NobbW^jm+u+r<5H4}^HA%%%EXF?H+x=}?6bSIR4S7rkqCeY7>QNqXs`+G;`u+u`| zZ*=oa=&_9j%8CrIz{ZL zI6gn!(S&*2c{yhBdlK=R-<5Ag>$ga^Y2O(K}ZLWk%v7hS{3cjcZ? z;~;xsxx1nG6eq{_#DJPbudym??Sx`UM5@EB+K8#R?3_4J-bMT{Q6*B&Z-4I)k7FD3 zL8w|8ayI;^sw*sbcPIfD&xqB;V*zB1APwPxJFNLzgtW*SVn?U$k^P}hArR88`gRn# zSd@5l5PuhCZy^G1^JJdW=BR9J4lEXE)^)NVw8 zyX$r)8MQR^yc1%3z&Wv0PI6^K{`3tIL6dipidV=%O8X`(3pJs^`Qs9gPy>BcCS{c2SN%U~DnE zrxuX;PeSUn#N5!|+Dac)v-ahQ@$ zVta*E>B~Q?J8|7$(1$HJ)xpI{|I0U`v z_n_~D02{08Y3O+Db7ap(tu9r-s|lsw>ImfDIEReAZuRT~y6sEDI# zAjO%PP=txP1#S4rZ#R$$VHN!O)Y~RmqS;zS;oBx94DEwK6OYb>@w`ljuNhc7yRoR8 zLM%IM)3im1bI)a0y9gELRN{e-4tHchoq7sKbokyLgChU|BRBHxrtiYlTuR{9rHPi3 zR@M!n%&up`g0yZqjUCLcQOu%^tG*NR12Hj^X5KbT73Nne#lhFsgyd&?ltR{a6&rr( zO9h(Ulhk89h(2g3G{`^QHfG04`FwBucS25>@i0`%b367#rVlA;_tis5KkUYup_$vy zMV97~0>FrqN zC}g>pPc}pYH^HAQx#t_-gg{%or6Bwh0%(y$h1pd&xE-M#ggmUp5WY6L#of3Uy|3E9 z8nkoxtD~=73eoUiAZwrf-N79}OyV1cSxOIuFn~J3g7;H9?w5=(?L=<@iDISRDP@MQ z(Nwx2Ik#iDhB9b=gLCa@mbjJM4+4>0MUL_VcS6I$;Wp_~zLj|(D3bjNIJb=|RXCwZ zQ{A2&I(~$3O#6)O$mN2rkLk&Lcd$Q0?L5|eT{(lx;O5jt$8TYdtNaompQ80SGPjA% zNnCGb7#!AOEJDT|jQf%>vsC)DZ54n@_|yt(n;klF92EERj_kju3bH#S<+q!TFEaDZ z^Y&P`JV?0ozRx^u@GFnq+wUtH!M`kyBf;LZnU3r_ z7=8Llyx$J#hEM^HDYe`qN4~dX8(Q6@3Brk^lpF7aG!;6xj<9kk3{8tl^mDCZKARv& zA!#1Kx9hlkpUhZ_-tB}OP<2|q7=k)#(=EArnkdD-ZGAMsmxgh6Vc5_q2mxn@<=IxrRqc=Z ziJvHtI9J~M_G7Po1W5cxy=FoWqx!mr|C=Y`$wpo@^ldTYUP^980+P`S0cT+#oCv^X zJ6{>%2DmA?nR4&-bM%$Ixli!)dK;Q4oJauqjhzrUnI{qDhAq+#b8+m##gornxt|LW zwSr`~tzShrPthaL&kkW}aWH#vt9QcQ){4{g1X8#id6ZuKyX{pGqT?JvT|(bQBm}gY znZWWpp}6g2jP`SqcFkR=2P@6V&+cH6y7H5g@J-*sP^tPgQXkznZ5vop@OI$ad!Bf;m|3FFEdnq>g~L-blpq3F(vO~B+`{Ti^+mj=xA?nVrQL<-hm z(6_MJfMR*4|C@_yhouwroxrMto*nWHtg5;Yr*qr#DADCplluB)?|8i_D%P(F0WzYU zO6`gMwRt1rz>r^1_YBUZyHBOZqr?YI@T{^Am>8R9+Xf*7@u2GS60IHfD;uOJJLcTBqsP%amy+B0reyk|;pA|@+CG}i{Ue%$ zIkMdyGRF$D(A8Z1?8bii6zD|6y^FwYB|QS`K2YurV((EY&3RKdI}D}r&hnRm7&DZL`D5m9Bt8eJht!=Oy{<-JyUYUOO+haVLcKTuEv0&+Equ1YicwIqrUT z1A_2hmL;$|7(^ES^Rg3er(dv3o>9_}0h}GiFM!?A0y|hZ7fp(#?*hOi5R@nW9=j() zN}dt0@FzpX3vikr()Zpd=|`CgG!FRfP>@Cl1H{~1w%iWmtGQwqBX->#!Z4gM%+Zs) z+p)?ymlz#%FDi!wR#J7b;P#_7-m!@Pv}Y$2$fzM+>*pnN%#suLDtsr*`MWE3Iv?`Q z4l97Vc5n}Rvl2U>|~-y*J3nvQ{r3%zYU zG{c7W5@2OG?=8_qjAx==D|23yZVD0DrgNh`aTRH0XB2VUIKF7pisiLsDU6n_bSd9A zIJF7%e6TBl5$|BVKmu`{KHfIgL*IlTWW-L`WuQb#+pe%hyS`SE;e2kXMMQm4v3ZH% zop53!7fm=Ln%N;GVmVS#LjO9t;%XIKXRoEskzHJLPZ4FELxpz=A>68E+#RMfnYfU- zZ>>cczSK^1zq^6=70G?1dppwC3KgbZ6+wWrSkzR${q`eJA*&a`gF41iWQf5r-VPahJGx#w_9Er`Sc+(> zuD~|Eh*=qOd2|hHYL(T)I4?IS{Ls2@Laey8!P*S#wgtPQZn*e+Dc~9G%Ga21EhUzt zcQE~4zz#-ebS<$ZR}3o79FFK_n^)G6XycyK#}@9E)gL$}E1=Zw?YU49Mid7n@2;u3 zP%SFJ0NVx`_HXi|4aY~$gpBdf-QU%>2!S#Z@LP8F9U1I{lz_P$@@)eJc-*RA=Yy;! z?5oz?F4(iqVO}n{d`!!t2?ixIl4urhz6t5QAmbd>=4S?R-C*pQu&RVG1x}C7oi=XWd8^|+8FIj4BR52}JE7Ucg@A0g zcLrA<1FMKNZ*$t*WM7e4WG*y4jKJVopen-Mjy)C-HihDmP5l@iR~-5EZrL3%(XMk8 z`y5#SXH;VN0gbb=jirV>@w+G*Xmpj!@sX#W^ETe`-YpA9z%K(JqPs(vC+x=yz8}!& zN`k-TUE7Zf78dYIN7i#>E{(0|#z)+at_WoByTIXNW;Z-AH6m@XVf%$oY+H^sZD+!H z;iCH0iT_%k?;it30h zdt`NB5=0MI}gf&z>FQ&h?aHL`|F!&}E%J>ZCEy(R) zkpm!hDQW?q7|+4;HVAXz;xIxY3yJiuf#Fn@!FvF+$qN6wE>_a zTF+l|kiArzh;-r%g{8JSR4r`6evZGkbi}8>~(O36kty z6xczJDn>tj74Nv^Q1Q9EZ^C)8=bQ*-Q*u&u(wDt!N+{|{@UCg>_x0Um%;`RqJ5p#ujb>gYE^9Yew8)R?iBQTW;r893C%HTqJ#nC&kj98{GLXrTX4kqDS2&`9 zbEgdvGn_io=uJp3dsi5q*a^9rvcItRYXcy~$2fs)BN|>xn&Rcqm7#Yhw#Y^+WqxKh zl#+~w-&oU=Z6P`Y8obo@bL%CGZvX9&#)(Ck1UJ1Mdq^zvp^hsCUYr^^@W~11$j&=# z2h=n2pGz6x3En+C-U;#hsWt-UO&H(p-d)u0FuG5(i1PDeI2B+)jLM^H0aV}ZWwqz_ zCYW(kKulGw)doX={i5)R-?KxuDA5u7xWBtYp_PksFF4n23nx`No1unS+bY zgmg`P4JID$Wn|ONCXSv|_Ovy!#8_;;6JjqwfvoW-1W52jL8Om)x1(VLjDCW8bri8f zUiWMn4Nzc&%O(purpG+HDP+<^1abDI{i5XCO{5+NA$eL=itQ^)6p}^^b7YhG9}%5W z><-zY`AT$FhDmySyK>y?mu8C0Cnx-ND8aQ5l<~|=I@#~5(bwlNv?;`(*o5#mVU=k} z0WPTR>`=#mcntFESc)V7$rWE)-Xa_Lk)hqnd;o$IKE4ULuF%O(TrQ4Qj1=YGgyIu- zf!}-TC5STjv8iV%QsdBo2Y)YC$o%Dmq|l4A&%XHzsEr1nyn0lr(pv905Ms|`QyM)z zA&Lv>Z5K2G8GEAc~a%p0uQKE;-gN}4!~y=8fi``~QEiybWZ3biP} zw`=y`j^eg|oWmgQSRg0g!ERmp7rC@Mlv+u2Kw?I<{U}l@+?%tvL;UoF3PJLAj6|X| zg7pbLgJ2P4!9zZB7lG_pIH2racEZwNL8b(4S9YHPC`A3+HT5IEc-R-ef$&~qRgRg{ zjSQoVbnWrU9(k$~LKla%avgEGWWIe*VgaC=Ef@ubI4SCYrM{5Et%8VekxT*#WoAEZ868JT5#NNIg%zN`=ld!;${6rFFT1j7 zt~iYG!fgjp0}Q^6{6}pJ?!kXV{ay-CgWhC5jAi9zdci}Qe%$>ziKNi=xtpih9thbV z)FJxq;GCZ9hafl3U~c7m1MpG3R-&sG`(2FJG=>n9SA16>IZP5IB8bw^xF;f;_Hb_ zc)q*lM#-MCo=W-Xt4F@X5;^*t-nzX?{LZqwNp{EpY1~vRW-!2>Z!N6v?X9y zeni^`jKmMVdA{4)5RhXPwhTTg?@Y)%t5w4U@5plZa5G(cAk;^U`CD5W7HJlqs%nKo z5N_4RpTQ)Q{=YjZ@J-BRM2f3FoE<3@^TnM_k|(N>8?SCuVbZZ zL;%mu)7>^vi(rf1BkLAH*!eTFBAN`~@`tX9!w&_0gR@OQNkr>=(6d7;RG7nmoGiZy zMR`b-K}R&+3A;OfQov?^-{9U?_a@QCxA0ZyVD18jNO$|CLT-c!oT^5b()$P*iHOcv zzK)R^96dr5G`?+>jb#gQ>sJiWqC86Al4|b`1*pK7h)LStV8DsnB-*&%+eU=qvU@tF z*OA>tk8P0zC-WZ}rqNSG#i3kzF`C}Lp-h>|H=%*jU7461F2!!b+=Z+~1_4FY){)&v z#Wu*2glFdlV;uDV@un`a!U7Veyh1mA*w<+#Sx# ze&KBj{kJ27K*n%5O!BscYeb1ee&q_6_Y{C{fT?#vM%<$T-gHTD4j5}0vHNbGeYvL4 z;Va~vx2;ToPum^NV{t)6ooipA72K*djHk15FEKD50TJ*-Wcb=tAaE6tIR`+^I|m7v zmlf>!-VzNfa-Mr^5HY9rS1E%`{d`VEdf?SmEZ zaNj4%=S4yuwc6a*FGEqWz@#y@J0ZSKVY;o@jL$8BF zD8biJgz3A2J_8hd&LU3C7ng4ZE>9cbgN!b&k3DK@hePS<=N{(M!`xELm-}-mdVYh= zN5iln1N+W|g0wvkxnFX@x3NQ}C7?SYQ_s% z+<%Y*ne-%-bmmR_0ZVySRw_uzD9>OSi-En86gRc?ku)By3{_5k`prk>N>S2&7@eZk zZ=8c|XL~e7u6G6_ey{c zAYiTDg`B}tm_a0%KxXi@VZM?x=0;lgO_(BZKK_P&ejOPOZIf1{VA}d^7Mj7)dC(Pa z^tB0OUI<$pt*r?wy2J=D%Q;FDLY84w>L^9}1~YX#p7P_#FL z5qCnD!hARPK>r4A)E}I>}6k9iZvGi!OQjIzn;0pHc<0`r6o?@_b<8 z9Pc0Pus-=$m)+_9F*|f6cE>Am-8Ie**$GYdUJYe>+M+zE8|Q%F`P!-s@R2-_xN;{X zQ#L;j$HuicA-W7QWyw9R(ea1a)D-lZN+cStUZsn@k?>tvTRv;%;#f-&tRs> zd-ai&$osYRqPmJf&#||y3!c2pHtW}fd3L^v5M_@V|J81I7NNASXhv;nLt6>16+2{_ zU%yJH&gU$MquQE~{}&4Jdim(Dqsia~%iF*mtbC`X&zg0-3v*Ps1quuu{qG-tPF&`0 zX^q<#>Zj2nq6zC{ zVwB2hi!tyD!Kp{C(=V|Lv@V)a)~_SG9~p!&6La(pmX%RCDQQ09Ys)k9ux%02`s2?D zT$PRCc2@<#YMWbTn%|G1bW_uj2jZ-9lk+jqv>}P}D!hY8_4RW-qEpPTd)4;W|M)-2 CLn0Ue literal 0 HcmV?d00001 diff --git a/Test/Fe2_rewl-lsms_potentialShift/v_fe2.1 b/Test/Fe2_rewl-lsms_potentialShift/v_fe2.1 new file mode 100644 index 0000000000000000000000000000000000000000..7a833106786aa1fdd5a330e32e76e5f23d78faa4 GIT binary patch literal 123551 zcmb^4xvp(VmYwO6`4piSB5?Y9E`ii2l2Seab!r621fRaX-)vd4ff7onh@hvtxh-pE zJLZ_SFaNLq>;K>X{HK5T&xil__OG}5KmXK_?!Rp zZ~yrC`B#7YAOGvW|BwIuKmX0&eU0zmt@r$^G4tgw-~amhu*X0C@&5KN`~CU&{`~#? z`1||)@%}#ddztPZ{`vN=_xJbDx4%DszB-**AHMwk{(OJ?^Zobt=jZ!RUt00){Xd!g z{r>mwpO0UQetwVHd+ht|{r%5(`+V%N_a7_${kg~9e?Q-Uf8RbE+Y7#b{e6G``faQI zv4NkDzu#Z?*xMhQ|9N|v_xAPm_4e`k_hrGix8I-dx3Bv&KR*5X`TqNTE%@{I^ZWPf z^Uv=+_WSqu&!69)k9)zN-=FsnD~?^B>;3$G5bmEp_i29q{JO^b`^$oVzP|rD_z=Uo z^3R{QpP%XZ0Pszk0tK~ zzyH3!{eHatx$X6vLO;KM-d<$*{rmp@@%QsZUf+Ly-hK$|7Q^=+a{l^wF&i5B!w`R8 z47&|j_S?$|zrRWQ`_HZA?=J@8%C}t8=U3*CT$c0XRt66HVKc@1)L(!8{(b*?|GAa&Md{4zXMDR(`1K=>eSiJj8fC*&_4avR@9X>PjDp3)uNP|&Umf!IeJF3A@cr}a=aYQy1>b%? z1&9}8|8(QuKOgV+ywAVy{wo0Y?OO2j_v_n&e{PL_{wb{deBY=3 z_m#!W@6Qi5aWDAs`}fU_zwQ%${4%;Eel7U%=l##eU*X^$lPBKu`j-X2Desdk?ulRg z>{lqb$I1ZTA3rZA{P_8Kd;gf4UrPC~v59|QPWUGL|9rgo_xs;pc4YT!6B&>G$vZ&tLzU`RF-eX5H=|SE%|m`1ASa`{&YfiI!Aa&*`ThCw?X8qQ^#0+_SHSrF^TuyU?J_Tx&NhD}())xze?-`?mjo^n za@xPZ&2?)20Kw-~>(d!HA9?Y13ixxU+uu;11J2v+1+@EMJNk_Uf^YdwsahP?&cOP=zsS}5q;#C-=eo%#D& z@Xz0GMGj?MUh&7K286KtW9x+vFIoTj9f{}3)oVcp_Wky$Zo58)LV)bgk9$F|Qn32H z)2K}L&ZSfbeY+NfX@S_^8w;BEhf-bo+Jszwpt9F7N+GTp($<0nw5qO4UJ&*doxH#f znTP~mBm19FAd7oJutJL36$rg$16(NW{{Foc;2s|pSGTMcJ(AwnRNguvpu{1ClIwbK z=`VY~4O^6ZlP+MoYhJ~+#5%$KS}@;{1#Vvk!!0PF-bztg8|Bc~g1pITo@l=oeE+Ow ze}TI2nJVsG%)dT{&)_9qevhdYfU=n#p9NV$0FSqviDIiP$ZRhy3zG=K--z4X3nCH}b`QpzzWk#wc9uVPt;c)? zG}z(Z1df3E9{*k^l)E9dx0jD08%2fD>x3#lNrtAcu`I;Y7qBE027@5Kdm>b&(!ae& zJrBkU+4m-8etLQ-9#tsNjxy&m2l|u*Xyx*rA996k{GZKr26*aW}*tr z58+>%e9Im0WcG0d5oLz@Mou5r@W}A{&o3{bh3hoIq>}gz=e~<)=##tT<&3||9y#FB z@^{7dJMQU<&eA;CZNYmJK~q-$xB=%ki*uS+&Y?UFL_xquDc|aQv5Wq$F=GA0^KSM; zu7t?cDK95{cWfc?4()(AP7K*}%a9@E;CJmJ2n)<|&A8noL)K~=G5d0}uV3Nyv(R!* zDDzYaz26c0>kqq>yk5YPN|a-`-(`nNdB!A;UmE?ADdb?G>Dq)dR^m+WStpd+iYs>| z1wlgX;{By4Av3B8V7e9*zSOsDzOl8SBd3_J`-B)g{}UEPWQF zOZBAWb?xlX%CH47X2AFyq*-O^wTV2#@p#L1!p|xp(z>tw`4w#$HF$l@;@;uS8&u(9 z1Ucfquk4={8zSr_FEu}!>g`F7&k32$*I%IV5(5;%`vB$J^*&Tl5c^9_^5G_Sey%bX zl+O`UZg^=~0^pEf-q_@kVfA=P;6@2@pjf~d?~iF-ykVk83?iwhLj1Q3l@tOUd%9e& z@Ds+nD=D?ItCTm-g75akB|k*mb3&j4Kv6+n3ualqXJyyN%1&v44_srI30Z-OG`1Fu zh~|BFAYka9h22>pO&KDZcqj_-T97JPr*L>HMUqgCej^Ld&cGs=4DMc}+&k1)&27{G^%;ik=dP6!K1e9gW-7TA9Wt#ZbOr4Qcv8Y6sx z>V2ZLXF(tc9%D?`Rg~0RMO3=S)KJmg_r{QkP>(Jj7V<3k9U@lNUAaO3lmjWDx z$&$onHkiln-{Aq*m3_rkDpSu@z$bA4nmKMpR?ebWxX2FH8e8;9_t%1DZgNS2%%hU)G8;Z2Nx|5cM(IP=LJwV#m;||^X3mAkqSxf}>fSbfaWxu$4v<%3>&dlb5ZahpRjq$$b zsi*_B9QQgQ)2}#l$g?wJ0Ekrr*J%KUDhN^g%+t$NA7$~^f^b9)-8%*F*E-p>cZ{7x zFO!+?x79i^^T~LHnF-Cy=k_6?WJ})~IRJd~u#iLPiPpDxISK@MB4naIuk43t}qRO~;Z?w`ldw2@Kff6c> zfpI2woseToGq{&?WgsNT$>uJ@h6W@@`1xui*z{BA>`dE;xgm2e&!4CyC@W>6rS1j) zphR4mL7b2EDZ&IF7u%#X7XO{^A~67jI5SPRE86gR8NGv_P!&0?*g%wB*8|$>d%gX= zPRLQjVTN;=jnc2Qm!F*zg6D7zvpo?z%i^DwJ#uB0;-j}16ZTEB83i1O_|zIhDZ(a5 zP;cnSFn*E@e0&0i+>a=+#a)1tNdS@2p6da9J&{0gUmx>F+J{e$y?Rd4D-7v+jLj3q z3VK=)rr1|@RV?M7YNTt7F(}S%9s&qK--;|#uFrzC`S1|n%=!3321nR>DRIUWBXuC| zmPlw{P$S37Y?O$M>o0!dTn}F7;_}%AMU=(%pn*%S@m{JFy|8hZc|yyJQWD~IWql@2 z%e^no;ek7B@!X`QwAApb6psLy2-@uPn8T;mtK=i&UZ)mWu{re|wirHPB|_xk*OlXi zgj_-B*qjPc)Ew@&Kjt-zMrm-NiIJcL-S6A=yhu=3z*$!lRhLPoXCPNqTAf7U0zHOpvJ*VN>DOn+RHVI8RcrEX(dGu3c zUtCLL&w^oJnEI|i28N{myVeWV%fHojYe50h^#rD;Y8?xTmlCj}JpNetqD{yK5l1oS zWBsI*eAUa5JB**VT=CF>C2QDL*ghWvaagVXkW2`6H*Wv5pXLemvcN$C zJE4k1Sy;8zsYz?H86xj5ilBE=a38gvylgRWU3_)Jed_SFSgLxw#^jwY z2XZ!Vo)Cgnj?&$AWf8apz>;=wU<`nL#&B|v^rUfuN_YUlv!E_5_Jx{{0%FXRL%iTD z=mtJiJ01+gsF{~L-%YNXnAVd%PT*7=MXO5l=Y`9gj}$Yw%S+Y@6t<=8nO-(eNKOch zufO-lay7}yu7}I1W{OFm{%!0EcP6b$ynQ(!9aa{FyVx*YKjTI_P;%FH?z;5F2ceGI-#uy2@ zm%QpUM0Q-M)#_fWwf77dQ--~Ilq-6^y02FeT$F7Z%N&eZeW-tXg)zMV1v&AqcxX&oH7J>GEkncgw}|@G zDaK^h*lt$$$j}%*1Wlv9T{kiI@jin61E9JxE7TJtKd!NC&R8v8bvgUo3la%0HVnOf(T=}uI!(j7(;!XhI>M4 zQ1P}yuBn6|o?5kg6Ge}0MfO9pz@>Ge0X(_=OpLbyi0NRDse4rKRZZvAHkCi>vTTg4 z2IVT%gj97t2A^Vo?-R%<3NDBU{g6?~q-dNaP!Rvqf)V-D=*ebg<2AP0QUO;h~#>NRHiNHWy z{r)(fchH^>s>-~iM&{rmhcJpu6p4AGdhaX2ss9y(1~Al4^s>AlH&W{^Zwo$E z)_}`=?=%;L7V&*-?ie=EAh64OGWZq)OawPj%_i6!&#Qn+DU#euab`ii2zw$6aKX_e z5f-%;l*z*J&bUiBwTK>zxgGH=h!B$?1?&?DdZJQ?UQ*jymU1v>;+pWZH;Ez;sHBGL zgvvaD&7$YZ+zIetwCrJj+;a;qUxVR{MSUoIDC?Y1`Jk#(!t8FCkU+_0_S2~?x&|(4 zr|lpju9Hf9?=hvgH93y2oFD?zQyv`Y=KF+9rnjhtwY_s; z#(Bi>bLylF5D>#o{-Tu6!ekGZGt7qf(20MgLR+#?iE=-e#47JGz(_G8er|-pP#Nra zS8zC3GWGJo9uU)6P|$-~df>ey3+Du=%Tb%lfn|YO*2F}QmJvoo2ojNy1}7WJx_eCOg7-nosrk8JWea*h8Mm)o8f1uo!LCp- zn{?@rb$IrI@;t^u+`eQ;lcV8K4YMaIjB5vr#QS5oqsYL0PyQ}Ti7o1x1BvM(3&HLk zb}kw;?}5fQMWBk37{$`E_}ZA7omX&|!W$b`7MZy+(?)RYiA(u;Qkj@oOklu!AF)3<%qB*@$!O;-|OO(1cmdy#D4#;Dlu$M7POxW)va2{9m zk@L=}d)4R8p!j}r8Cpqu@YDGPO%VW8jr%$#((0Pu++x27!sZeT_vAxcdBPDZa*-!} zj4Mk3iGtMj8&3Zmm8rscx?$NSXQ)~(W^Y+zp~Z9!MgF+2tV|Fegxpgb6I6^Mi`SZ1 z@`7~S&=NxG9%Hj*fI33Owj5-Hk8@WbXwdx-r|(?id?areBE} zvV~gqLEjjElYw=G?JvoJkF!Ub( z2!4AaNTh@_dBZvIKyGuysGB{H%0YgTJrP?4%YOuC@MK>PEhkn>b70W=INF9bHS4zK z8KuC-WDCa4%WORA7{x+QYnGP5CeA65Dn9onNV9-~^)`D#o1(H5aMyZ8J#}3#-FI_Z zSYQc_!+z_8m6PRp7g;WOn zi|7LpL>Zk0F%<$X$h19xZP+=eD^{)(Rx&B3;PD-8BwMHoL@u1}1(7}WDCzEszOGAN zU+J_>r1&ic^pm3%zNE1#QDm~1y%*%jquA5oNmpzywq_$7UV%d6=cTvcAy_kq*W{FFN zER$M9NN{0~fqiT-TI5==I4l}6y7RHOSYn0?@9wQC4eRWN9CDkIXaPC*F7)J-o*2S& zPGs`hneq1>M7=X%jE1_HX=7pcJkSyi#MEa6F=R+C+$rF&GaP%X-lc@g9R;M}+hMh} zAT34J77C6X2EGbFHF@?#IkR6lB(go`sg8S;Y4(*VO|Gx~II;LRVY$P<-~!jg+#(m3 znAU7kRE7)o`| zmHB4ikY?y=k3~nxNEyIBA&VXmNGw`mslErmKT7{4Ly@oKD6^BtT2Ojn=1M7mX)j2g z)FEujhkK&X=@yXQcC&s<8+K3>ZYbi_M3klVV70xVGn0z~@{kx_9~6K_?AxbtWL=j8 zwtLQkKv(8g64O~QzEm-T`dkJpFr>ih<&7pv^CYURaUiiwM(u>E>>Yu4D21(o_N2}G z*OeUxgDc(07<){6S%^g#UGsWb%(#_{JJEZyT8T-2#JxV27eP?Qi0<8E0;ilJ&h6|d zrf5GXqg?SQB?1-lkbsW%z-dZ~%{iM8zaY-6<)pQV!JKfY)7C@NAE(czphP+Z?xCb_p_kj!LC6ePaF0`99-oLiLdbG z`P%5L4o+art4|f-ranFk0vOeF#rwS=hf<9Q?tL;bvt`gw|Re_1TfZ2)5dr<@l~?NWSzW#fNm+pi z+Ua2I;I**Jx-JCUJt&^tJ;(0Uo&|8TqVaaeT9`>2EZsHXVBHa>ap+ryPQjC58{V;G z$o^{jBN$HB(-A6)WXjvH?WirGflV{xcH_#ps|XCgFWPpyoaY8EyE3!+X;A? zNWZ--4KSP|!>Tg41A^P!7p_iH@fYxKM;npMJ*KDe>v9Cjsum@OWIam^KzE)0!}dV0r@F_mskFyP$cP=Cg-6+u4jBDb ziV99YMfPAR>x96%&pF@KLXrb@0>mnFw=c`9b$jS~*Dj=$`TFluhGm;TDF;_mD$TbH zDZW0t-t(@cz&5gH!otn+3ShS8MA>vek#`FUGyTXza^waU9Df3j;;m9oWSF)zCMsGL z*2@1`JdQD&f_-snBQ1kEy!ZPH?Co;XTgk6@fRaGz-0@%MinMko}AA(Vdy|q zk7pdfdrVZ12i;t8*xVSa$x&}8J6oId&Y&kykpk<4W^m@LbE42b?)|HT0CZd7`M7>R zGF0lPtTkrZfO33t%*#_KH+zlX9QHL96d&D{SQ303>5xCuDs%b%9;X*dLqc&Wv_G zuN)so_CznRoZNAYVO)BsD9=n&8ViDg6cc|uuwWBeCa$|T-v0W0EMAKClvkNvyid!c{n%R_Kp0>u=1gLVg(N-TCZDS!o$moID0Gx9{rdBHj;v6mA z@v#VJd9hUVeNM<114`AcBY!lHID7Z2cvR{%uPX~Pt*2?B{$C&KlEAt=gFmh@vL+dh z#q8D?AR@+zb*y49NK6tTWJ4`$Vu}Ys<+u^P#%Wkw;1Ulp-WrZE$5qHiIgAo+oDgOt zDWZ|vmu#4vG($m3{v{3sjulaGdMh$g(r zaKh~~R5b=7RLP1YCwxJxAgEqR&#l*KB#QiQMb<9^Hlw4DcRr zVJZ%uk0pKGJDbGx?lB>|E^qjGja7??;p8yh&J7vDC*?Qn*$D(9W^A3C&*nl3aN5FS z5AR0e8e<(7jFCU4xH20Cf(nzpYE7-3<5Czpuit))nH#5$Ioqcey4a!g=JI_z7G!S& zvsiEWsKgbz3uTY0X`DtRcTMPDl1U8b>XYul83=mX5X6ZA0 zjWPI#TuLgVo@oqF?P*1P?NI1gP}M44aF*wX&P}ZF#{!xL@;c2Jli}^HK9V4wF=7vJ zMA(k(I2Me3ErqJ?#_tyUSni;bg8d}M8;UDNkVZPr|`^+UWj5OoZ+J5gfe&i#VD-7Ecw&@{y+TZ|MgD=Y7N__7(C0^*yFBS_0{5!!xGth)!0kKoD!e zdLi}GX%8lwr{Q14AHh?;LIGCxo-qQjC6?w84@6nIyk6zr&1v!LD%>#z4yGw9e%pk@1XREhuSx}Tu#)L(%(YBn@qPu+*jUg%1%zCD?ve~W6k&=n92mrBK`B8o zX^DugHHK=cmrzpK3lgd7hyetRo{9YsMQBzuOxd(a52eGQ*4WAeIA9SmciQGWAt-_u zi4nuNJ`1XfE!V@#bLAR}75*a5T2SU;9P&(T-Z~*SEFm23yQ2tp^Bunk}3il@PUR%q_G&mg} z@GK~WivIaMS6>tR!D=;8FALXLb&5Emgix?On*f7#v?PX+m&XZF6?(ng0#Cm*T3HO= z%huA|`Z$u83&^jy&}YFae6=W$sE4smh;^uaLcCKBWFu#h0CSQZ*Od#7;vWm-&1NF6pT0 zpO3{P7)nf&fS$1!PBFdwwarErlo4Wy>kvFA9Ay*lF;%%e7tC12Y_LPWYK;j2*oBCT z0WQ0;{EaG6YlrORpZsIiGfy^7|I**L(V+ybu5U&AO@-HcnZ&<_tI-W8=7K>5tMZz zgm(lIG=(`KzoKiMPinv%`~JKSTa=L9rR}%rT;Zo{6*xBG$|v32A)X z!xce8>K`^Y#*icw?0e$E<` zG0KhVFa+2hV{<(Rw?q+W$}q~4{CgXk!H&~lOMys-oVag}v1&HPh356L27yKjx59)h zbHU)5KvN7`r(p;PyB_DvIM;&Ax}TW19o0M=4|b;z7yG$RI12E(_jOv z_LvM0Ycb8OsGk0eRv4=o_L>ZlxpLP4RbI-?D@UUdKGiwV9s}A^QzZNvld)KFHNaHV zSdiBO!yE`WT@!^WAuXDCE1>R^ybkU&lr^tDLWHZ(cdpDO>e|pUR_i$-3P~^%v3l&b z#>({K2&)-3=XSb!WI(4d-ZpH;!nz2}yMy&{1eZA11HlnYQwlS$nu)6%Kz@u#z)3a@ zZW#`uPaRb_+zWc!&tA)C1IUk$VVl$>sE!CU#~j&tYNqZh^D_Ajmnr+LE2ES~=?@xh zd5J&j6mdl+Udj{WYS=j;A4oJQr2;7`vqEQifci$3QE@|lOUn}VfQ{cr&8=JFCBxGY^@O&WHv0zdm8n}O?+j&BkPkKrf9QmVB@yNY2 z`w$~bqY!)Dj)4&OJa<$27bwpOE8LM+b$3RtXy^WECS_=RZ9*H8nZzl6tucqo2I+dn zfn-Qc(Rv_zufe9xsrY+z6b74-xOwbLUESP)f!dfAm6m}W$+~aHg1|j~fj<$*T2SP7 z5SbVpUt@l)XQJ#OF+5{_n88V9p4jNMAk-!3!38~AS`)1=40E2DMmtU2Q%Sz+`pl~= z7Goulk%GqwksNXLdC`DreawX!4Ec;s^b|ucts*f-=6g0)K8z}_8{hiJSk;P9FH(va3X>+76z$rX`|e1j#0haL_238b3r*l zoo~U3wB|&np<+Tv4^tXr!f;foYmdY=$BM+RR;9WZ6gi_=3dj2@wO=`?(UGgi$Iw5% z2omZSD$fZ=GjUX@BT~&1Rs%DB)zv6o#>c*?$sA%$0dp*Z%Ot+MMFS9J4yKL>G#8{G zRu>u^*m-=6JXaM9P14j_5Qel3g-UUIOayR`o~(_Hhf*vg2|A{&*F-qNa> z#}F0i;rSSrs_NvRR#{_WLzO?!GyJv%MK?F$E&Wz&ov?n5MdMYxTAHVkD&d`g>15}| z$H00yMP}Yt7JHPZT-I^6VJmJpGd*$qr9FYH+7t0fY-WE-})5_Kr9aNm7G z`wB>m6VJ0g_If8~DBWx^z|q=6{9CwM^Q3-tdkv^jwGO4IWM~c*fEQazsawF@<%?Nm zcIDdP^-XXI`z8P^(uZ&`G-KnmTnbg_WOgH|kB&k*MSywLlyXS<=moG|g zP}y0KXqY-1#-gl=B74xecZf^Nguq&@$IJJ;xWjTXVV?y_3VtO+z0kFwM3@=XVOXaT z{%r$$#I-;3K(Ah#VQb-$#=3H^cL_DIZnKfp<7F|phS$gOm_Sq|{89>sjW-eh>J+X8 zBbVhTFn!yXYtTk$>&UR631J8$q_{Te#di-clqx%Xl@)5JOGkcJGYxy7++da3ah)(W zgxg!d|5@`w78;c)exHz423Hy4q?6M!h38S&y$MCenBeFpRKf+H1ueuod&pEj__?yQ zEa-7^`D_Whw@vT`5Hu^K7KAK$aoOh>J81>%%_gtCU}!GFHTzsU_lSli*lIxH7VM>N zZ-nylwXx{YckYPCTMLqYkHfK5Jn&gi@f{`DbKAiZj|F+W>nYadi#3lUtJD=kvxFOF z1CTjQyp#((6BTJCVWCAJS!09%R^cr;+#1stNOQ3J48+-C`Kbz^c)vb|Wh+1en4=o) zgw@GXZ4b#tO*qETVB9g%XwU}ZgsL*>l8b@H>nhorVp0sV*>f62iz7moRUCCpZDK>L z*8m<;>-hirtU>xi!!c}`YfYq;x;Z9~c55G(%|T9vB4R)D3Q;sy%B<_J+uFpmBwP{W zndpMl$)U%qhH)AeLvwJEh_M!w$iy03m88~!DS+X5dM3_2JI6>0@3pD+so4iv7vIM_ zg0Trx;|^5qRqI}`l5pgCIB_kQ5yyb1(>>}viRgOSQbZ1~7pEE8_XO4@ARkRf)I)v)7BUJ@H(WAuaff{Ib_hABy< zYm|#JwP+#L2QA`d$;oAD0e_j$ihTQy zeVSj;3h$Y+9^_%HimG*M87)B@;s%VqBs8)& z5%(}`HS%U~PKGhg?mHm%p2)|XWw0XaG}wVsu#m$@o{e!5gKQVFk5Vd4mD-U6(O6Y)YY{?n}4ty;@&_ZKfIkuaADV5}&iJ}5jG-Br&6I`=F z`5wqfb)f%cN?eH;6+%3%1%o0&KvrBkUxTa% zaAQ!0qJF@1=Ypy{ejlkd-;cIQc&gWK zDPesa?BWzX^gd(YhB#S!=bVsK72wXIF5DkiLl-4s;5Fv3l|npuM4NFFA65w01sbOw zSB8kP84eAtK3CCxs7)(4jDRsd29LFJs$7Pw=hy)95irjSx8`)x!*w!ZPyXb)V3u<>$hY1xdP8^C1Fv*y)^_gU`)_ku*DP7$#kaLKD= z84X<*Vrf*I7MTSG{kgS?2MKPGTTHMtlp?vMDSaV9?AaOg72|{p|93^30{HmN5kK3T z$XLj=$bjj#$q+!mCA-^)a`tMwRyTSf&^dB%DgTk1O5_Dwphu zCD0>U6YDRI!jr()7(i60ueY(}+RJyl0{4%s#|haV@i3Y?+jD0Hlek0>ImQ~JcD}6Y zi4S|`RVMWC3v$?3MxQv28nBSKCd$CX0(1!PYpnM&L?+pv1*_ZP1ScOkeaMjY=eO0` z+s$Y^(g0}(YOMtaim99tPWBj&Wvjx~9P7%#?jWB4F)&_EuVvVSy+Xl`;^jM$v*QF2=lqiBqFUJC|b`7?mC zUCL^5rSO1kTvt~2^)ME{ag9M_{oW5jH&5LO$K%=hOb>MH%8G3C6?OTWy&ym&?Vz?F zjW$m*Vu5PeE5H`!h2rw?ltU9!0Lc=UR{1m$nOodzTM2B9p(2gZbL{AI<$k(P%yfbX zSra9Hm{WD7uwP@v0GJ5WxmUy;UM@fkkdu3)aevlc9iR zHUuhiQGM^f)`Fbd*~p-({`nZ{EyoBXh?zBp4-vacJ`=hTjTn`iakR$)QVM#Jx%+Dr z;`(^J>8VPb7&}GL8vB4wTzZK{V}xO2OlR@ynmte=2D)xCl|3%rR&Q z*saJqV?tzsMRdv7p9QhytPbHlK+ya+lq^}Ga+22^lVL=}nn0a!jPa3*e!e^6;apJm zfX&hREObxo0cLCr1KMNkT=PlkI8fSL5HqAwbf952&w>byBA_UOSF86}q zv@;4VBVvzvAY&C~kITkQQi^B~Skiw#Tv;E>IhbTILz%nBAbaaGfDx7Ef=Z8G=H!3P zn+pnCafm9}eH!)iutb||8OovT0CG^->`j1#dI+RFHXaL>ztNuMy)DD+kfVxK15c0B z$b$71`143yb4<=udhmkbqVt5~Q75Cx3D(ZF#y~o8Zh*`AF>n)gi2~VL?jL2>7@9FQ zPsmbPaL@bB346OBNEWl#CW9cOcSdr?{3DNLAR{Wx6Us8fYt{Mr<2a4Je%6t}Z>5Y* zWatq7-SbSV1tN+Z8S+lu;c&}2A^oBVFje!nTyqnks7FwM)!Brpg_WAwCgaMy+l7UO z=MPEAl+asM7JOoa`>|lGl33x)qoSWV}U?R1xOhr#xq833TcDI$TN>64;$G$>-9R*K8+Yq{j4Na!y!tKJF1rJM-ehh<4_qM~3jU3KipVA~CWFb`z--9s6VE zhTTAH%|F3vTp2`YIbyxEjD-^lMY_vG#!|WjPb3~6mpl5Qj{B@liuF7#RUM@ONp(Hp z(gEj&!NvgzIN^k?`QQP29j}@8f;H3yB`D@(y{-U7O1j4bL<^Y~gCS$=k9(B~jR<{b z6C6oBadGJ=B~Deg?6vt;%6RV-7pLIf3-&+^9%DRPDQXhvN8p?+@l=Y3l*W7PJJ9{O zGRmRa3|lhjlQ||~2BB0_d%}- zD)04D_sJDLjq}uFJou20a7NxTi^pd{AQ@6aV_h=T!RU7)y&&2P7HtR`rZ@@^7?^CR z_MDom6cA)Mapb(R#aNt(b=<6e6a*!&U#ITJE|MACau$p_=DKD7bLFyhooPXApHMC2 zf;z&37o67vu6qdZuuXGJG@=jtPee9PC=tOjGRsL)$apcWKj~_;hQ`N{A}GavGqYul zHH)?s-e+1E3xX1bdcpV@acGmcv1y}{nhWZVDVltHMAJh70j&D*D8(Jv5%`QMTUW-x z(o$LJEEs4I``qS07F?z*D)04xYT03NnXf>32N-b>p{o#iN{v|nt9>4?C}2QoRlP)g z0nXfAO2}DGfbFde%S7~S?+G|-0QD|?D-Z9%UPqt)Xjz0**VO|*;Xag$Qizo0A*d`J50z25c(yPZ_527tJb41}`{dNb5jk0OPnG z+Jy+EIp%p56#eC`!0y&wuQ1g3qR1tN96(lJqB}{|N&{~q1+Eh&zAO|nTH32hbl+&L zbLD`g>R+39kBKOC+WTqwaDb_0XNxzJ`*sQ-6wpary2>zSqe$nVOnGgL+~JY^+UZL4 zxemSoadv7rU$R0mrx&G9S|F?*cd(FCNeLgK6pc7z?&D1$y%wjh|6E)Ib%{L0JnzZ5<; z?u6hJ!z8UXS|7`vl1e#k+?PTp+t*aD_ToZu<3JRd8yds8S`&jjA7*#@ucJRE<`8$iOOw}>h zL^4pp(TUi!#{>m%j^keQ*qmHZ+j?JFHi9pBZC&E^F?4{6BQ!R$#$@kazR~vXQ)w*% zEj_=Qv2|}%xJ=KdrviE| zP;lmGljBc@;ssb#KW38Pjd_Qa3UOs(M(&+C9V}CUyp%Fd!UN(E_r?`Squ-|s(#G?I0=Q_cK-$5< z>S&+=ymu2@IVUFz?<{m*xhyUImEz8oGo}8Z9x-US9tZ0e1vMzQf5*ON!%X{_QajgF z;?z6Zj3glmi{`sQV}j%nQS9#?85V1M;|ui-=r)YqjRi@;!3oxt<()L5$e*SEm>8*^ zN5*8V1#wCe5}AYB@@Yh`~=sCU)_+r-iesmC41f_2eSG>xvSNWB&Lcmgep=hVzTu1Id?LTii_ zfu)0^+~KPlHi`z)-ma&fmQWy(sIuo{aan1~>Uu}M#-s|UN?rCm_vnPGRe1->5cJpe z6vZ-%sF}a4k7WdqCleWOI1`Pd(IheSr`a^G1^b1<;MpIJzll*3qM+_ z)t7$<8D-EcbUvUO3#uo91iF%yp3}hp{Xv(}3ENY!Ap!;i)^lDr>A8n4NskTYlZLS% z_=(pp;OuCFOJg>q01__4mic9=C_3GVXJfkxRgw3i)4DQEMjOy7n6M@yFG_B-u(jNP z^LVW|%eBNH&-M&T{=q=*1*=b#IZ^P-L~8bErqJtYvu8xndU5~z)Us1mt8g*9=Uo}j zO2hOlGp`det;pn_@T^UWM>TgeTj%wBi`)T=`VszQ>4%n^z>PVs|2zxI9PTFZN8hip z0wxtW;6@INs^1dkEwl6635m4lyB&HIKFOv~t%wB?XF)T^CUGB>+?$lU*+=5ocBtW{ zQsa5j*-{D*#i4k$vir>u8zL%wCXf5MwZJu$g1QY-rTS=h0Z3!WiL( z9oZxE!ObelV}}Nv5I`Z0eHvr%N!8y5=zZKi(e(R-Hc<#bc#}VzS2l~ENcXej@SKp_ zDIk>~Tl4(RKZ_5?9mNI&4>Jrw?<@27>LX9=MmKEAkZm|Hscm1T085tYMYS#0`~mJR zx}ODwbuz8+TG5%7WA&gu5p;jtYlvu{Csa+d;Y%Q%LqEa6A20alAGj2Cr2oA4mpA|K zpZ@Njpq$?cQ^ELmANRlWFMt0<+dcO6pYiX;$NlA>-_jh^L8AA+`)9NM`SsUZYQ^FB zcb`pI`}N_!%6dQN-|aR3@y|~kTXoXwzZ+}z?|{YM@$gt>#(N?Ldx0|ls4{6naVBxf zVErO%{&|P+3VIr?#&_2kCvd4^WxtDh{%pfq|2!34&@bJ_$Fh=*qN!oJXUwfCmuqhK z)21=6mcLYu9mK4!1&0e1*d&BCQ5@zLlD1>+F{Yr$!U+V=XF;~g7^H1bV=svPa(k95 zudRs=Sh+yk;}2UJr|Fls^{n4m2b*7L*fb|=+`6ma)iOG);IftG*i??!86@0bD zGbVyVp%r9GhGz_cQo$jE003)2{~&lqdkc!sL_x8qLvv`1bAAsKD%+#d3Mp+qQu#vBE385wLCF}aTPXzwD?*tqb{)qJHVQom|_%z$kS zmPp2H40x@o?3L8s1i3*=kP%;L-dIpPv#1L{gEmpx0*E|sU-IPWM*BS2_Z-I=^j4e4?_8L7H{E!fX6nUgz{+;ctdU@eUZ z`EZ?3mJ$=if_7Q+l#Opu;4udxb9X)cy+xt{kx#L(}0 zddu|45CPTuUB!;i*T?-9o4Ii^B+uML{RX8-O6bC6Hk_6apb;`03QZ}!=dxDQ#_wed z1hCtTT`Xm7Lc3NRi%O;Q4{D;xVs$`${80hp54P$trRbBj4^53fVo*Wigos3WcYREP z8GQ8DUa%U;d1R|=!T9Zd2uY1yWh^L?>9`eNfXQb}r^7xlWi81yCK78eNZRnAv4LAS zPJo^zp3|TN$lGOTWqqu+6Geo-_?KtF3=?>ys`SU9M}XL4>=MLao+Idv6AE#~<`@_lWq!=9p_^VQ5#$GJre`E6%qo%x-!g1qRLOJj*mG2{1r(vT1n$3$&h|+F#^%}nROaf ziB@aEZ#{N+HX%{wMW2yp&seBdK2r{R^=E7>2sQ}xd|n)16Io0Jtw=fY$JoRzs`CLl zjlpNZ>g9g&fv+E9W5K#O3XtBMFhOnAfYB zGP)T3uzHQr9lZ%J{jT|up#)A6I6x-576jNzn390_@_a0RTe9%uK5MMCdKo7>jCe#6uCTzKxLPM$dv0I6o1!^~u(0L`^d=%2c}NX=#`e$u|CgwPARjIn~s8dYVFcpjyQA$T)Z7&2QEy*Oxq1P6d> z6T1?0YBIj&NrQ|g$a&00}xk40F6qu0(&blF_GUlXk{_W)r`8;Y9q;3UOokIXWq)uxmel|zur z{H<8+WrlbVv)+T}s0+J|k3VT7c5f=ifrl*XZdx%*dB2li7`L^iHKp^8i zHW-wC*fcWcJmGk!MTPLlo>;Zj6PwX8daf+oi}%zT<@AiH+@h*5C?i+T1?5HPSK9*D zuqVp1k{d#2V8(Ik5MvMTp2}d30Yy=M^;P;dEo-gOK)m$~?PH>ArC{10;eL*Zjb-LfjM&hTnF=BCb6dCog#B$W-^qfx#DbwX6<9a+HD{oTs;0fl`#gN39qnkowH|NpnmYe5^iH- z!O(r#ReV@BM@wECbU`U@eLP!;&Mld)F%UeywI1YFikuKPC}+y`YhslV7mZ!tA4dZi zl9fja=+p>AcEBFWBkP2MjjX5Z>I6&JqJn%zti8i}Hc>l=@ZjMdmdq=Y7Fk!~_c-dg za_}|mHu_0xVx?zUuSaleOl}&`QU`Nrv=fqY6_Z#x;PjATy~ip6Zw^OIGOl8EFvEJT zxE6FYJ-pKBD0#=c*vGi-@WVP`26}xghBgs^Z{T5Ll_uV6seajY$EJmO5_I zEaQar*R(?`b+!VycTd*h;CGCS&_E8rI}@08LhjB};1E^tIUxd(X;SEf6HO$5O2-1m z6n0}h8W8?bKU-1a1;_?`r^R(;XpzBGtSEM#tB^l?Lqv?HFH@t?oqUdqeUR?hSgO{$ zB!!6&$CU|>8~0|t2G;zTZuuNR^x|!eIYz%JMMMl{sRe~26A4u%wtZPx<#{#K>RLYw zcHXp34a?1Xk%i3iKOX+fi;INBB`RsRv0P8nE7o-c-E~4207f`zRw z+>P6@#-0zY1-S|Ni(d@+naGVLBe&*1>&of@dIl$Y7`Ep1hNh}c8)P^@C!{(_Pr>Kr z%ZOd9vMfZfLlqh8PYSzsTMIg#w91bqpCN`81m>bUh?ZABJIfFrXC6cvWJ!m~e=gXo zR}h1?hxW$D!hg@n+3TRC=2$=^d?!1v1x4`;QL|;_>W4)Ku^495&p37`R826W%8(H_ z$AV;#uT-e)d4N8|Le*;AeZt->mGe}ODP?>tV!$RmS9sZDge)WVdMO3Wd2}KdX?hGe zJx|EKD$DwBW-}%h`l@_{y1gKr!xICE`pM5csiGhJ0T?3!%>~I{c;*9w>Ym6Dd`C0` z&W%k(R{)^^eXh*kdlwpL{O+**(+8T#$1H`5by*rJ|hXp$y4pZ4ws=BC@=Z)W-?=nD~PnXQTUs9*wD&5FsM> z`WQ&oo6si~ET6HmgnF0v_*wfN1F%^?hZ!k&oKS|*lC4`m>ArS`Oma}gy9l#B1|V5> zz-VhZh6dUXi;UuNE(rgKYB-+B`;P@}Dv;v*`fb_NvZT(In8$dv{ERVS$q0uIz%?(W zNb1Z}iBzxb`B?lHV;LddbB_(3fUByCJ=Tj4o&*pA-==vsu%k1d9nC%~ZttlC zLjbCgdhj_<7$>V!Q3qq>l(AqCOYy+z3HX@^6v4>-i3HD8+yp#;mPjI4vF33*UK$#l z%InH8mU28toy<})1f&K3s1Zf|`gpvD;LV;LEX_mFlC`&d^f}C{1!G8BQt}#Uv;|}B zrStOKOg@bv&M1m4o{hudZUYlueZ*2O|uLc#UOT3XRg#(tOtk zz`$ZCU@e#x)e)|ruqW2BVdwJTp!Pa7+Y)YuUUuA6r?Jjn;m*dyI3dx9U;4Ls$8(xq zK6;XYr0fCRJheg{pca67{iR#mA0<`K1UwOxWah@Ya`;*^zdu}Iyo8z);Tm=)2aFc( z94oX(vqYRd3y$9a*qEkk_09!-)`N9!N-1k1FYY~9(_T<) zroLQnJenP+@#IyBLbkKXJjSZv#;xbei#gU)HFkpD8Dbb$7B;!DI(Gg_YfKdRVJ+q_ z8Lrddz7)(nRT9`^ghgbKi)6O0?8b3WQs(%%%~&u=slj4wdo?h}tp{Ki3IFQeQONcDa{WuU?^|MF!I;NQr|WQ1(Q_GKf(63VAZ>75^fafo&^Q!%Aj5! zjWy=AN$)Z{Kd@J zxGbjT(u5V+*Mb_syx19;@mf#>373jiTPey$K2n7fnwXlG{0p}NNnGu-;7G`#0Vs1O zR{2Lm!Awhr;W(BgOa_*o1#K%n#5v8|rR6Gm=-j9N@0u8z4vqnTd%@UOQjr73%iOLU zmk%`9ilOWiRtL+sqyXJNJJV7*luc~2k;0Tx=F~i1^Xe8bEl>fRey-eaYJps|nZWx@ z9F>bqst`Y8h2av~<)T2OQx^o-(q0f7rgD*`EW8$k1?@sBV%-{JN01CBuPHlkA{Pm| z6&jjIdqF1WK8x*;oY#UHV_KlxyPUly z;;4u}@@xAy%anX-5fJd22b|0&5v*q~ShQEaRJ`s5RaFiGQLu>TW0=cR@W5R4%se41 zZBIrbIqn4&1VXXGvG&!PSYx~25{=sU`Ite|W%(8P_>3t;S+%;1nKhOjR!IWhQhhw? zGf|lV56J4#Qgh5owV!%WEC)YhAPCpyqJD(17K9Si0H|=NY6-hvPsK1-3@tGTK0rwA z1%YTSSg~DS9J8@c$k3spNCS59OjHRa`@w;%Q>$1Zk&-okUi08ofPy_RsdYkhKtNe2 zF#b#w8@L1`;RH(om9Xp%T`pp+dHFk=E@SKy0%Sz1TcS4K3o6@PSa^j+pO1xfpZB83 z(#C=(kOL^mJS^KL1B!4kcgdhw+MWpe3Vg^yOv(C~M&*wlI_!B60&{XVzbx4c(jF-? z93QNYp+grW91gw5NY$AIjS(Ei359^H`AMC^HGmx!lypMh=0$MTGD>VQhGb;4fTa6djhY;(-3a$%Y3wK+D@s05RW zMfd%aC6D1qC)-gAuLTJn-~qEI`Wg$u2zVR7rh;-QMNG+FrRVdIvzodn8R57V?4<{< z=PAmHM^PM>N|eFV=jWAc5P%t=!jYl=G68_6V%qvxT#)`{VxGFjWL5;8!0Z1uHm)4M zKrZdRKbFox$RgG`H4FlRio^oPT2PA435?9At1Z}rkjhDpJCb^`A^j**iH5qLk3|54 zFlYjitOet%h2p@`Kp5kMU4bLBnL3J7HZH++3-;>AJ*L#ny4dHkO#v6u^;!px+J=ol z&kQjM0LuC}X334a%<>dwB~FQ?4zx6{CN5Ml%xB)X@~Ab`20VOEjP4#an;Wi8C>@AF z%WB!Ju_$L=!pP>YXvTsyhL3o6mk z6K*rnYD!@&gX_SfBPpj`-Cmh4#8GQ`X3Wb2dKaa3*)kmOEn^py73+F}7o)2YVVU)@ zJp?nk3;5V$0-r#qRye<#C?3J3n1lKx&(0!L@9tCLy0Y?6>H)9;mt{6wZrGczk6{Zc z;}sw4-u5N2A)3$=gkI1c*AupUCc++1313O+u#G_3ykv-f2ne5JS-=M=8Rp zL?I0)#>v}rQh1-~w9f1Hm&N#yJw1!Sd z!~#>3nd!42g~~={aiL?4v5&~@+cupSo9`;ry2F2BhBb6TBwh@bx|e%A6MGc^Gm3wNyT-(_D9`b8m^Idu7Za1tc0IX> znfIeELR=F?OmUsbgRE<8l&0ztZnkW*r*s$^aui*f*9l9vT1Xz$$Iql)U|;!vH8Wf92pkBBd-|qIn8k6&U3`T zmtyjJI=2c!!lxm zBNAlXeQL!AGqeY_wDC|1KM4^>3v3zoVvHF@pl!`dv|zZWij%6E8%L}{=*9c9px6Uu z@q+P3E6j-sM_HMlPhn^5kQ1}PzJonW3>-Py8TP%ej0gn>`dQGvio}dZ45z?kon2g43edB?uh71cUvCKVc+?zm4zGF_K z@_gn+eZUE5lygEp2TZrTN?^#AXW7^@uN)Jx11u4lMENXjzeJdP6 zmyrUV)07k7X?4z7koG|Lo_d`H;Z>oYTb)qF6S0wX*G3AM3j!0uNG$5nG6*8gOGl#& zeq`7SW@(*^Z~Lmi9B)tHo_!j<)2f*s(4DcOuHs5^IVXf&d%!s!B0o+q=g^W^G9mFe zAr}sG^i!+7Akl@CD~86#)AiVqDnE+oxE|CFPbeYJ_2L0wJf^89^=!<9+@ZG1Wj2-f zzzI9KCbAegP6D}HFC@|POr6TTAbK)RUD!BUh6KgeewTJKoH$BeF5QF1bsChe0*-^8 zR3Y>TErSvsQG8rk* zkT@E5vcE$qqByCP=LhLF$4DWzgHpz~^MukFpdjZSn`4tbfs*d8Q`hcc+clP!7^3^? zOH=k)um&uX3Ds_S0ob%BdqH~pV_~Xaqln^XY>-r;w?XvIEAvG>xZKAU_s1zcI~EJ} zSU)a?2vi$q-V8K7P&--{R;))rO2z##H)J@KPG?N0fnePg1AP z0F)Z?4yNQMv1$fvJ5-wXYD4`uQ}B=>oky<8qem&RyfHk2#*QpQT;&UPyl!Fxpu5`c zl3{YeV0q{=%c~T??}C1suE!2xFQf{0RAB7|=?xv$TiYW;nYKjelE=QBSF;JgnXRFr z0O!S$2qR9g7Stto5H_bH)7ZE&p{gHb!d{0zMjV;L=D6A@TgQUDQ0(hZD;aH)IaceO z7;3qm1uZwi&86kETc~^L<@qt`3$HGBQft%%&GGKRv_B^lEo$8o*SQKGMqzQF6M>*o zL8V|i_}00JW{m(_KXH6JuUxQD(@6_Eij1Zsh{wW?82b4|>VlTGXk0`O5OBGa;^Q9t zGn$D)2h^qa(Fz52_s4oik_TGmM0TeZffD}}4}~b_>*@D|WMe@ZA!p^#C5GO0sy+bQ zBbr1N8zwEDmpC?a|VsJ`0^ z#(t{^aeg}jv2^8;V9YhvJZVS8g|1Qu?i11mlNH;g*ga7lRLjzPgMDhE0|pewSAcai z#wqSiQg@mS^rb<-;x9KVaVQ^@aidc^t_O9+*MfKxX(j7=FlkDmIX0fbf%ugadbKCA zxG?cUc>VJ2@gDpgIIU=cGxivIOS+|j@#tcnaDZG1sTS~_2yGg#r@j|dqKM5b^QoFT zp~4+ylLt(NjuY0JvoCV=U~Fe8r3gaDzeAwCr-R0KPO-MgqEX1pJIq+nKL?xH;s#4} ztK#9M%rQ@iQ;d&|%|w80uC~|ffr~1n793Pn7}A0}?fD+YiqDE>|K14mQ(|`xSBSK$PE!TJ!^wO-ip2~%Z zzQ%&yL={8Cxsi|>6DY(e3zTrzg3Ma=>?$gbG1x=_nCMGLy9*@mU}t*wCHy@bBQWa4 zh$?sIvHDrSSns*U&dNGqf(|BE*q90c! z0YL4zUc?~_W-9w>N6AggA=EbjXHRAn@@!g0V+`G-F&&5=wD(4Dv_!^R5e1lsA%Gi` zUla8}g9x~)Y3zM08#{0178idOBze#7VwPay#-?E-2WZt_2Y)pl@Bjoo3v{aeu^K=o zR8qi=iJ^Hp3M37x&5St~Om<>``9!`ZnihNBLznfjN`YMw3puV6ibw9nhYJ6Oq64JPE^Zq{33v<<_mFQw*K3r3TKLk6Y) ze9XB}*yEW4+&vd`W3gBcvCn#J8zny8+zU)&<3}lcyY7;w6VJynU-XCffjplv>#<%+ zVifDte0;{htg4c+7BvHA1t%2Q!edENCI1DnMD=nC%E*a!}eo$rZh zDx^74bc?g3fE5PV$!P=rSy;n3c!!wcNh|V!;;q3*m^VDd_594NZV@;! zC;Gd}hn_KwpD^_?m#t3)E6~lFCwe(_0C)tEaY7M*smAXBlqPF@6yRxPhsVC83w-(gU} z3-KT^{ON@C?}Q}c#!VO-C!~^^Ty8Bd%!x9fs>Jt9z6JX@$}<$JevyOcSe=0owKI?4 zFcwUvQa9Y)E7Lhq)d88JGu=Hg{8~^ns)z;Jv7yhHd_|XqamlN(sbxqaNQJh}efk(r zA$pBBK_e13R>1Tt$`&0z;22{vj3Al&NVm^|MRu{OHui|ve>;t2B>qTx=9<_TdQx&F z=UyT_W6aG-YU&Y0W1Ud^FZxSxkoq&xVs+iCGsn-sT2T9Lj6ja#C!J$sfeJK4VxX=6 z%Rk>oUKX!e4fb8~vEci_EOH8F!U_VyGgjpeW{0Etjn9}@7pI1SY*TQU3y#Pl;B z+xL=`uT+nu#etd97>hAr*`Y7sa*pv=zd)1ieada$=PLqkBQO&Tr{{Mya zAAh*u^RLFtm%n_AKMGENNaEYST!5d2wgo+!pIGW;x_|g5Z6gUNPzLiKv%0#wL|xat zcJ;t0=YIcBW{WV9Q5I!3&E8{pXy)2JXG|rc+6(^gF?mN|8R+w4FGxrt@gy78g4F;B zs8PzVF;0Vxnk3F1BYWl=6g~^8seYWh+0IrKV>@U84iYv+Xh7zV2_>8N!= z{>5wr(wB)0E?V{;1CzwKNyx5^1!h?MY31%gajNGi_s8-iLm!3mK4COP-Q|0pOdMf+{b(A$I7xo_r(5JOtzVctmu++PUXZI`bL? z#90uMmZaxnrS-9gSkz=16>F;17pE^zODZpJ29=75lFz+h zH+y)6b3%w&t@WZk_(c^1FI^vFkb5;Wexv}1_7`O$6O1N3JzI7y~0=R#a>h0(MBH% zH7N&QH}Phq_b+C@EZ8Fx61zeb^1?|V?)!w))}#B`gqd0{nnnM-F36G+&FjZaNyv-~2p=RWZ z9oj=|nLUmr>>j}r!W|UnHDPc4)6K5ISbT!VUvz}Afg%~N$N4KGtlEy28l!Pg0)ONup#o*HYFr$gx1fM}E2W1YimN+d zh$?C(Pa1C56Ai1`U!ZOsOXRtje_a_qgO_;uJ*HLw%4Sjim<>w^;LR@U6K%xS+FSY; z=i?e206*^d8tc~=q&goztp!mWy;8q-t}6;W0MFOQ;*7SYP;!p}4w(Iytj8sUO-jA| z7BR$RuwyS{ju&>gH-RIdzQ@1U3FU4`jbB|mNA2W2_i0pql1#+yP77d{YvkgMtpx?n zn7s+Sr}t=rpw~k;*T*rxa_fx`>nf;_=1-UQf;}&-zjl9&*6*>!U8i^ml=A?#*Cs?g zer0eQHmoCH-~+FTqDpU5UQXDL({y39Y0rYn4E2qie!HI68@z-TE?*8N31}~HPP3kQ zi0+rHIivnfPq8l<_RB_M)g-xgj_8n4?kZm#=#@Vf?wZHqoaU8tC{F`X^M|01VWa6t zJN;cB6DuNmcKg@7QLCv_UQUSG_YhK%bbVacLR!8RCC^8IKK#P820>V0mTSiC9I%n6)$)B0ZRvJ z<%Z_11?9Hl%3Vo8kk13cYe5{gyf@qCj||bY076d&?gbq=#mqNuk8Ch_{wGqN1xcVb z_lxrSF>K&|#?t46bXnV1)VMxIQbPRNG1u52%~;oEug+1sk+)nY?6qamy05G$Ca^>e zUJJ4~O$t%%8tW%mpvd#vl6gJx4i@&kvAON7yV&Zzn6e#+04X0w1`> zFcWnsU--jb@#cMZAYka)*^1126I8fL7N|Z8))*i`ltp9Dl_iOuULgywiPX-Db$qU| zDg_hgleDRM{3h_#z3&Ah6gku#U^8_N`f@@C;TFi_dy`J1444GlJfYG!oTe3d!k6Nd z8QEhJjpH=YgptYAw@*EwPVXLO?pX`^wg%-zO9|^9@2F5OMpy+f0?-|F9ZzVs?X48W z2;Dm0TWHs1jQV(68iosRcF zHl*+0+z8fdufU-C|JWQTJ`VZNcvFV#7nwlXC*7)ynX-%j{mtS@W(uP5G9WHaI zzJVAy+fj<6^acZ-xW-^?ef@{be6Gw#dTT(5*F>eQQ?ukVR&iS6{62MWV9*P6-@Io* zUZ-rukzKL@Sfq8a;5xO4tFi+4FH0lGbxyGO; z_4ZTpJ||=^s$S6TS`fhuXW*;Ft=oh(nCW><^ww{q)V;=Sv{jMmkko3sG1*bxvD=VNY6mOU& z7;3WQ;O8`>7Nuo^*qacO0=%E?T!tM{B_~MW=QN5B9F4zR*ap}~1z@zUpo>ajT2y}< zHdkh_aP3uWi`RozhoH}C=*{B=9M5&a%7UJc&nkajnNLVkF!q(CdX~y!C8VP$5_I78 z7H)#2=r#GAnlHoF#UU}N;-dRZ050Xii_2lHWjx+@9H2jLNeb|$V2nK{)Q?JAIH+^I zUM{<|lKC3*PNy_*r3z^RnQx!z0MCL7?K5`aONSaNdZW^uN+Yo$#!2ay1QoI)zFHL?8Ws> zy)g8Ct{}>eP38$HlyQ>mm5>DI9$l$rH^MUQ&&vO{T06p%vhG}^aR%*24xPhXXuU z?&%FkcWb%Q-T$tgjxEjfMsk}C5EA5MbJv29FUuln@9lvD_@it15>x870f8LsBmE*A{ zuewf1ak_f6dTdVE1PSU5ow4}Ip3e2~aQVF4KVFZCVP`=y2_Q1sqrINt^@9h%^L)&| zXdgZ~SMI?uf0wSu*t~MAV1HDUv~)h^CjCN3wQ-Fx2E`fVamMso2^vbi%*Hir15;fn zLG^)4Q|DhLMD=PN2vPbh2<`W1QATU*IblDZR4WP^dm_BvvnYZ+-lHtGhnGl~T;she z4z#+?f~7G^5wp*g^_e&=ue$mv58M%)u6Ysnoc={A9sw{BwAqCS=8t&#)!eb zs^II?uo5Bi@axL)LPD;l(NTa3QPj-+jH#*%wk-n->_U`jGe`4*Nu&**+4&)T>5Uu1N4b(5+QsP5DGLk z=5m`Cl1qM+M(=p&9KA@>gs9Miycy>x& z4Ejj^IvToE{lT(FuIQ)8KBdJt%)GMP;WVhn3%U&qN&UjuzFx2%l`WL)jRnYl39UxD z!k2g{0dx7sA3F_gLNs?l6Ad^0HtrmtouagR+5b=uKcJ|0}>^ zF$Hy45}UR+k?ugyviKMqSMIke;2?n=uOLwtR&8~vtD5%0Gb=m}z*NPh$oq?P=$#bY zN3AC>TMS$mUs>%wP57F5td}c8G}uIHmI|LgWMmFXwcv%1x54tRy0`rpahnojh>xk2 zvlZ3PO{8-*zyt*I%8-c=A_`p!h%r+R^(u3pu$Do;EVBC)2$Md_c1J;buI>qm^LnNkvL|M%jglx}_98wh7WL_B6= z*`EzrTI#`mKOW;7FVxUv{NG)Py59@RnbUR$ELZ38U#`fhY5ug1kF8ezxNxxsTkqy|DKLNU(O(zYB9ao7P59!h_kBDu3o6@aExdNPi4_5?t zbRsr(K&+HV;#$d=zPdVMuaq_6cwz8dM9p}6T(mYndJp*u|KQIYleCiE9Mvd709+@S#Loa{$)(5CXK4*M9H zHmA@E@=C>P25r)+#**o?AvQecTViPKrA=l{?G^(2aC(RfV(QyxSN*y%A835lsA)J8 zluv}lTZ%RyV5@%+NE@2kMf3Z^1a?`QlmH6s^CEUicM6mfi$xY~j)3g4czjV29kb6A zy6=jSHaP%@aHg4cn9+jC2r)^~&i{8a_k`=h#P zi`y%BvD1CH+cFHBa`W2k8T!OP!l<@cvLt~F^zGEZDqrF1{Z3|s|?W%}1afg-)zJ1A1{W9En$(dnyM--o&bB#^x#Qap% z_Y|UC#+2fvd|~OFHg0KlWR}kli>N*@0W6Su;V7F4A8Fr{Wsdevl20m5RU3dGy!OVn|Or=8JHz%BQ(dwfoG7N7| zW;~y5Mp;bHt$<3Y`-_V+LvvOyg|M4^bcC4TH5U3_B9q1A&GB1_iOJqj7pdMQGqS>( z34ef~D=MAPci&?N#8o(dS1)##1#-lciSD{^6%rTTpdX$BKl`Ty*4t7BWs`>>A>=Wfcg z&o|T74elwKGy2Am;&+mlH zE{h&};!mi|cI4FFt)TyT31Xy}ft5?DI4Xyodj;QRJT`Un!8 zyN99`v5E#U{RT`2BI%+Jd+w5M+f`fD|5wp#gq&UExY@su8nbwigRal9JBO1E5y^dt z)P?VBIXgd_!dU#h?*jH{r~~$hH)62IaFk7ZX_BgnjTF2l#R6{s;GvzI1BZZo->fk1 zIQSuPvo_g~LHI7Y*9N}vfo_KO?99;bgzymR9z1>nV!1^RHvVmth*Lc~wEBz}DAqmfX!4B_k)+RQ}i|7P8-K5ItBw_J;@w0ro|SEqyk zsA}5R=OT^n@LO1XaqCV3Mus=F)tQ$A6c;d8-USpXtbZ`}L7d2T1p)kH&@+-71ZU z-$q4pr0L{eyUXp}z?}cH10w7x+njUyodFfC_LzY`M$n}M04-v^4G@Rsm7_(s*sycboRpb(mA-&wxU%Fcsb(ku(^nkbQolf?qp&B%OT6Bw#oeKWAFA zp=UsW+XXxI*&5rHWF1!cl7B{p?gDL()K%1pGYN6$KKvO_G*Z-&&<*+ynwm`X<1M)` zAvGbgAAEsF80^*U*Rx@1mblGvzLQ6kfyBtekc79RU3w7U9R52S?J^>ya@>aBe*;>X z(^o?39$pD=JS6sI6Yr*AA%b1KmQt{7o)MpI>h7`#;pkodaX(`_qC`qKNo{S29-v>Q z7{A$m@(JQ4XMgvxRj}d*IK$YN^|}>hi@f;KG`@+oRX$e|E$H%rxg<~K`J^hBI;L1) z#&u#x;;=;`6#+XN1S_H-fi3&8n_ag=YSFr8-7bfE>N=9skFlM&bty+S+`P<@0x#V6 z(*R)8bwxqd=)+G_YO%H(rw3n&JbZwecrZ~i`=7) z>zhUbBy*#2vmO!JW~SOG(cZ%{fY7$3_IBHdj_8OrZ;1AbAPGoF=y!{t?;<2+gaDTB z!*&R>w=Z8fh84vpAm11Be%XU7{#?1_sGauc>~{1UF!YxQD@NB0Y}3X-?Ueu(#tFob z4(|5sxJ@dDG^IdY(mvc8X7H0OA&5s*=O9d$doP9-m~&S?PIjCDE7o8E9d}cvcL*ox zQvI`=f|sj{;WbCz0Z~gbQ2BQHodFfq>Q4K$0L$O1cm41AJ*06FfFy3J{g)YzwU`mTQd;eWtp9>{`SNeSY+!cVNK<-3OGn^j?kuJLF``iJpzQnMH zTw;^8qF})3y#%g`W{A%dpAEy@p+I%rj%lGb)$|`8LcWq?KP|8v8wHZJI(G+7J75%- z&tdb6eOAi%Rc3v|@m``O?l5xGwu!J5&klojKyzjpN#whZ>h?hZWSd3md)Sn9VK4b_ z+h)m~+MFtEY>0=;KlbxOY(uqy;qjJXrFkHbu=KqI*wBme+Ao&HrZULx!-BP!$xv`d zXMR36Z;VY8RBwj%NAUR;Lfr0>Sq0iVEE3MIBgO$2=x{jGwgFB#MQOb96-?>)VJPgz zas)37>66@b2Z#=gg}wiH1Ga|9xZv28NIqUHS*Rm+hH^=%S<~t<07Z~u52XKHvH*_) zndYK6x2kBOyZzjDc3?xY;7T@XmuFWBAF=oIFjNpFeHXhg!I7{k;K0LnhA>Voqfq5} zZ+S=ZkIF2MX?8%#WmHDmeo6G!W16#3<2I-{zqb7!9?G&|NI!X>em*0T=NCwEcZ)pH9_$Bo> zGH;{rfJ_IDV5Y!&9J?RXk(jFjzFi)PB{j2aXZtYJ#h;R|*5N2q@9*NB4epR!&Gs>}jxb|t8W-kL-N`;q4=r*BBxXs~QLWYese-JhH%|Cy z2W}CHP=w{0H$yzf=J6(B`VA=G5imMIdU)uys8M_M-DW8Rnq7ot>lBy_e1NutrEi9` z4)n=J;fU|e3Mmx;47)O38`b%zS~hX&?R)_yjd2As*3J-bsNDY5`1|&fv)UFq>U&95 zS@(6|$ZlS@Ndc2cIjhUDGhT;gJbtN&a%PGd@VRi`Z3eIC^4Er_6d2WIT?^V7f*{ty z6u|MD4SUj!t>-Jiamut4>N_dv^^4tCQ|CTAV8@AFo1r@IrbJ5;(j<|!S3toG-7McF z+vLveotYgRm?d}TMQV)iY*chIfTK8R*;61;?W^QQb@K3LXxHr}wE1BUjHhrCQw;lc z?6kR`YWv{JlX_$t-uMQDKwZ#FN?Np$vdT}k347m;Wyd~}lG?XT+28SN7Z$cnaVcn# z&aVoH15WAgjAuJ?LFy8V*}nHMvfj5mYPJQ~WF-OK=e^(YM-+L^*|XU`takLK-xD$$ z(kB>_jP>aECztE;0EfY0QLx(Dl>9Ul;UIJJI2~nFg|$Zc<~__$aWR4uUiaDrG6HOq zIs6-tnY&brU~{tDv7;z5376YCT4fGT#VO`6x;zVL%e$$w1q&kWM_;`a(3a_rg}V0o_DPokTZCL-`o8iuzLow zm#Sno^bE)uc-thdXRq$Ra-weHgI+R0kmOCIIM6o*rJz`n| zqT3ipf*;SWUv48#s+9fZ+>o4({S#W-zn@*{m?@X^35fq*(%ld?odHq7?%Swg z26Y>dXQp+7cl6^vEMGx;-ibZDosSjqK)ZCf%?y}^fLV4VGH5dcRIiE6QQoVC-#*h!spobpqC%Vb|F@{^P|17`+69U=qW+2OMUG z9fB%Khzv0GJuDG9+^Jxj3^xz6HF<`+pR_P-h)C)SPBmr48PI+LH7JW3yaC&IY5=dD z%5xr`_*9rxD!zV-05rx4@eR>-8L(oxQkqQjmdE9!8M?oMt@e$5?7}!?nNj^Bi>j%&r zS6AE}-<$yxOCeB#(00^oR15>WotLRW4BL*QKzNAJEV;a&-cbzRB}>O9 zk~Tp))ApAJL@S{MrrRBc8nsDxm2Yt1xXrXd^s-sE1KZ`=U;vLx+Bg#b3@E_NnX7Z1 z>{Z7K|LR*VJ0xh@(yuE44bTj0W2V$mZ#eguX28_fn4ns30CqaULdTAf*aqH*JyHtj z9>|s}Cls579OJ3-E61Bi&!WmF* z>wK~5ZVnCnLgN49Uw`=z(#7|$Uhr>zY;S%qkizC)$_+Z#!Ery$2XFg)CPzar@9(1W zUx5#2<%?}oETi`XBj9)Y@i|2RNkA1}+x#kI_z2Y`64J))m>bQp229vC1rj>OA8@kU zuW~Y#46m4HXFx8k8*^xV9bFoeW1>bt?LOR53`L-nxdV1R0IZl0ta>vHHPY?aX%-d3{Tg6(+xjVuPBsMK4v0o#2wo(~)^C1HRCXLv zAYJXlq9?_+f^RxDL!~Tfq@xVidd^D>#y=Aux$zq?rmG@%L&of1M;M&+!VaSTKAdU| zMI5>*dT$$F6GB3e!nXtVji$m&A_ic$qZ}AMNZH4~%&?2*!C}$=T*<*}nNXTb@%C&> zwv3n&jw7t^fTqU&>_WwOOJ+YoZ{Fp}*UvxYa5|rr%z)Aq%c3!y@pZH#-ojp``ZH_% zzsjB8z?Ro$BYCUWYptyT6X@p?X~g)=Fp;eLk&@ajxid^NheC-}=Ovv?^aBwr@$E82 zT>hZgRV==a>aXrU8)TQvB@HLvNG$KgT4cubpv0FuLo7G>(VK9NCmkfTEmk`%)c2vqeSK{N*+^7r* zGM^c=fpU_qvrAOLT$*#7RjJ?7Nsk9&E*p6->&|~I!>9wiN%09}wv30-6 zO=ZG>3}%U~?hMEV!WK<&BDoJA#>u5-Q|4h=u=rGSxH@rXC`7&1=3%WnAXw@P$_`U^ zhUwTqsT=3}l1{QvJPPvo;k@J&By*xQFPSCVdC9^Y<7D^E(1H+WiDtfSSdk4(57>UV zt~J;cv|wkbLW~H(#ADcOLm}phER@11$PvuBHQtw0wBkHbqur8KsNSq z8ZA!(p9>_(0`Fm&n+XA+a`wF#KUU&*iA~x229!dbA&GmN@Elelq$J@D%(@SY_;92% zvN!9~}ybOC=Lx4EYAMX>ve^@+8dH5pd2)gjw#xf|E3; z;Pa-}Pleifq(bc5WxTQkCnRrxGeejJT2-!4^*)@!nYu)u8^msxWx*(HqSo-DvEh_W zI&~-FEjed}*lHVPrZmj_Ej2=Q|kMcYn20em05) z$>2(DBKV6a@GVpnQc!mXlzWXoI><(aoEj6f;x1L+0h!L@;q?OSNO+|}p|N;qy2uXE z*@WJkMNWFYMA6SdoB@;CtBmFFVH24FX!3Fn>rK-yKa|}t)k?9>EAGQ2L4agTBiy!8 ziMzRFncHR`;qZKtuqi+S&pfm^sQ4aMfAiqs<8OwQTGD8@lL>?8#nfuH>4=SSYiovK z3cC`~v8C6s1P(7i--ct@L5TzU#G2PHP)AYn_+4@dJRKBI9{-yEHV+Bh77z{bU=N=* z!c7Vy-qDVpwzwhO7JAL_{P%#Fo!Axh!sT_ee7j^N2-~)Cep~P9Nfk37oXHK*-I?M3 zSD!I!`#Bph9qk2*h|-;%KW)tyYIZpBUc#K`LRTmJZ-$5@N0JCIi0v3%1^-=-dTsWM zBee}fJLV-r8t7z7tfJ@4P&(>#O*!@1OOQepF4{*-*IsfIrxt*U&uvqt6=qeGJD|kv z(d40t+j%qJw0)3LR(cN;0^~;Y29w#gB(c(R-)FxWb`m4_NY~%P+){RPIN0^kJ41*h z=V`RnuMGes#m!OZ4%nd-x(Oi$b(c zPVWayrz6i#%T%`yJvnXhO2F%O!kb}Ne}qGV{;}&Y2aXCS>0+|gT?*n$)x#fo<@GZ0u&>kBIf9QV zM!~(C0+nU;WE++B8&Cm^*ysmPx2;SMN780*8!?>?(l`S>dJvuq;itZoJ@?J<94)-yI(&tH)q)#saySPzOjPz#l2z@}_I zNcEujnIUe0Qg8?;^g2>7D*fF#m=a71dKfc!Z5L-^Gtr=Dzp~O-PqrHx{ zS$)Jpola zA_ycP0LHovkV<-)Q{v|$iCiWKtx^l`OPE;47&#U8v@s{w@1EnS6KBava+<6n7!19K z?O9g_3f-x$TC(NBGQVmfQ|y3z9UNBApM2DkE9Y!rMfq@>9(FX*XCIwFMpJy=hw&%X0w}o0F~JI{S{AdD_5y2YIP`+pmHS$eB``a%NZ!jI9dG+0l8pLfNL!;@mg5 zFG=2x{3bAMTlZ8NQJUHTi2)sFweYo}!U!k<2!!N49EVKg?@ryeDNn_j!^@$>XNDaG zpud7*!e?g4CKjix5#{e;o{g;FH||8dwm3sy*!PFp#)h4(_3NYht!)YbUWlZRf6Ysv zJh`u5^Bwwo+V~JGl)B3e2* zeKVxC={oiLM8I^E@WhGJX$<@gsHiHZkf26^ntnVVYIe48R??E4JPKx88Wz8YJ5Mwg zJ~*su9#-&n%nSO~G;qbO8Y@fs+!=bWs>#-g)i=+tB=p8eV!;&&L}$-LwTc!vK*W6 z22|8p2?rByw+$h)l}K^-7vF%=GBO~@lW$(fv;j_xXAObMu3Z{)4xpa3d#|6m5rypz z%8Bo0$XceO#^fT;hGrt`!E6rtW(a$PiG7#oUO%pOPzsDpTLZE_thz?=XNHWR2PW!?*UxrHtfMc? zWSXH~;J+`1J5)dUgM3#3QXZYd!)Dm;x8OBiB741lU9YU6W5C)P5NBg5Qx|E^zqoF< z2r7~`meo+E7cQu|)!k=DlsG1*%hwcBX#*i)Y&aVj=H7 z({6?-lBwVcNAF=tfvw>jm)|zJY$w73U|y091Eemrbd__LmlJbAJ}Q6Q84?ux&H#J< z%#bc22}Bvc844z1ojOGY@*a+s2qB7tSiS?|&Tz^~qIj>(=7mBG^vzI(!)v-6NFul$ zlj8ZIRIIvsZSm&B1xom~b%173nYdtey@)aJg-ZR2`n6=p|ilLIa1M)Rq z2szRA*QR!t0Vcn#f_mJm7U?D!hU82y?cr%PTq4=bK1~(5V)tWY=#7WN9~< zWE+9{9_~Z~WP4WfzcXaeIcpWYZ=(=WTSr*JsCSnW-G&;`Bi{@yKIQ;LnDGv1H*jfX zSk(Bn4a5=Ks|ssthB6U!nDd#%Lmao{*yY@{q41~b*#<1_Z4?)j0*q<`(>4QkYZ95X zEgKaPRp=#&+pRkrF6;`5%Up8TLm-GA+>W%jHtg6PlA=IHc@MYiiYxzGS1R!kJTmr1 z4`JF)*?s8n4Je3FTC|bm@dm8ONJ4^rFM6m0p@123r`u0CIAS}1J}BOjJ)%^132iio zv!g|J>=Ff76ek*_vZtuc=S4*n>dG4cuF7>hWCj#>d^iPVE>qUg8XQBaDFDvf0OUZB z(AP#%IWI;M`sU6SpxVv40ll*F0RZ9{cPX+=muTfJXz<$7XcFoZK5v^$o!FETbmF@K z5umC4=9(>nV5efyqfWwOviCY2}_wF>j9R=9TC^Z7!W*t2N0dx1a zBZo{gR7AErzQt=Y?CDrBLJ`Byv+K0!C>e@y7`AOdtxGG6GyR&OfGro|(bv@g}cbeo#RoA?hFMEZI8Wy^lL*mIsj^`*RIxOKLe)Y4KtvbC1CNML6)%>|3|z# z^83tSFmh|+^dL+9Ix_&!~bX-^6aAzYmMMO}FO0F|&@lZ7wpEwu!dp2U< z^NGUsn*o!ckX>Q0yC=N;BgvNdvja*A9g~2z$ul!Uwo@5*&th&go&jag6m%ug5XtE% zRmU5Uhhe6t%|0cUR6D&{8x2^L?a#9_L&LL5RCIj~1~4mR?y}u`xbg~WOC!6>&H_az z;gaSsE13alkupQ4=j%3IaB*aVO(LgnKyCzm`bc3i;mq3Ui0X>=H#f&$8zCEtsQyUT+t#Nan3WA(w`rdY zhvX?OU&nYiQZ;h>YXjhHO6C;@+a^~h3E~bL%cU`_J&~XGa+XX`l4=Q+o_-JGJL*{3 z1D}32>?)+Pu^e|UT4zIRTr7vM=L-S@cH_n70d4;EW=K9U9V}Aje73P8&Q}1AH2mC#YJe|^$RwxtVnn(# zFNMCM{4UvU6t_&oV6P)eAi#=)VOsfIH{rrFd2o2-Y3r98xT|p4U5<7mlal>mUv+d^ z1EZ?zxZ-`uoDoLGx$-j&+QfWjY-6UaO#w&Yx?G0yzK7-cs!7ie;hdMGX-Hm0>b}HE zP>eoXoPu&Tg_K#j2ERUVFq&o;7A*43hI+{Dj40DQ)5OTww$l29V>9f$GFsLN;4^l? ziIX1YcxSEfmTtvWrR!^xj6`Ype!_MJ1Q(pkCvcw)heon29(1yq7f0l}=+LJ_&)HRG zqyYXQ{>EGl*w<`sr5F`&yl+-pLdOn3Z0c*PwgRp;YhynBugf~wc3v_A3gU7jp15w4 zQkq+KqV|vl?UVaU^xf_|5k)W(h?)`qWnY4OlJ{8Wb%X#FNl5FWv%&?R^=<~*0Xe@g zW3QXjn_)U6M%}IsyU#@=6Jh`kT0Fj&bbWk44ZXZ=Qf~{vo5hv3Ifmm{Wbp3SoC2^@ zGa=77!fE7D9j6UjLUsZ4*!8rfdx>MjFAuo`Qp?Rxj1Nejjr&X>%(RA}TKi zM5ayP5C|NBbaUtp7>_d+mOPCAbWBf&En2hJX@kP9Ub!7J@qOA<94=}1Nxzs;n4LCs+8n!IlMSb>@}4J1-vbV3KvV=u4!zmgbld}4I;_YK&%-0n zqz!#9(GBi(CV0LUZ!-_|nI5RAN zSMkc6J79h&!qC`Z4)d_7u|Xx*fWv9adsU8@(Y$14*rm>txqfQny;=4imRwrfHspqL zgW>b#ZnHMGvMa+(%- z0YkjmxL8oJPV^iSIxp!Yk`pF$eFKijFYCgQo}DE#fEz|JqvP!}8?^%k3BLRc2rm^b zK!5P?yab9=LLg;71EL^i3tsqG?J>k=mrEi(O{r}tsa&;QR0lv*k zL+XSKMt)0fLs;6$`tZXu8-Ocvv5d(Tw~ea`dX|{k%!@nKhV5|p+vTpzuntM!{BGds z*i{EmfavY=fRahVlw2tD1x2h*CVh!#}yg&lRV%LUY zy*xTq$j(sq6`f)YA%72tXjKeMySuDT90^?OzS!jW2El@bz5%Nng%nZ$>nQnPeci)Z z8zQ>0w?b7G-WPYLpv>-E_8U+f<61W1OFmt5ON&c&+K0O!77=uiv~B5nod81F9k9Az zX;!(h9Z3$=X5jgowRm6%*dU3#0dr_z+O6+-@$7QPkZcISKB&^kfj5MgtoLC_Q09tG ze`&#+qiQ7c&#`50)vh{GX5NQId)Jeo*w+Sws0+zyyHU#4aij>zx8&G;(>Ww){1AM1 ziUU1AmLNrNx#Y;Ht4}{FP_++_n-|ZL5$D)^Y;`w4CCW10lOKY99tLu=%Rd3YcqSR0 z7&?6%TVY0VlaEeKavnAn;81z7HUwq-3(w`B&oqKtTc`XdzRwI*P0}i_{iPk)lUhKu zeGi+j5lQ`&xT=e_+;-81QM$eZ!w#4h%j`s@&uxCv zsBX3ez+yPN6t8C3z9jnWYJC`W+QiRGkmL>;Ma=GU7nu6Ufo!n;Wr8>ZmGknxnGImz zvdF@h%$%NfIa%U5K74G**sxGeneSNdroj8|>>s7%w9)3$S+L*FH0=-{t6uzO2!Q0< zG_h}aqk@|D{b{zDAtg+$opSxHBt@iqcI@>HND{_n;vQ=oxYcFBnDXv&qDVI`GtRSh z7I3B^q5Y60OZ85P`4o?{yx1lqDs#>+kTk>UAR?J}f19Uv?y#REBiEI7Z$!>}eApmyA zb!y{TG7gC(gEhtMdoiD8g$`7XxyEheO9T{L>%AR$B|B$_-2nL|JOjmt{Ndst91!oTM_YAlGY?ZbEYTMJw3Ta7{v zEE%Mm8_`Wv?MhT;NQ|Hu?dt%n*+|r~sDq=gqeCD7U5U1B1ps^n`fKZGePp17Tfb|= z__TmF_k9>GLX>g0k9GjGD2BIxX%tt5KETTU?|?BAWrjc-8Sm_cLt;z^i~@4Zc18*z)%H#aPL7xB+Y5g@@Izq07f5qgatc8=ui4x$DY20`RBze)8>S<0 zSZ&RcJv@3CPsJ`&28R$#o97(1TFoiIM>3U>`HdnPAnwE79P8^>1zK_s+m1ecHgW#* z+E9>59|p|5X28A@s76%dtU4!oRDOuHQ=!g)Dg_89RM7c5pit-l$z@wq@(n0GRlOvn zeqybam^suuyWD^yJvkP1Mz$((Se9MD(3wm&oNG}B9QFtaUczk71jS28GoS!7KE6t1 zzHJDtm@^d=WtZFuImdQbfhfF=u$4qVxciou^aqE*+{tjggkcaU^wY-Yy8LP6d2vf-{nX6P6+cy7basFgN#9w^-kn(FiXrxS z371nb(PO^jU}^yY9LsZjwaep_U0?8)DRR!k>UOD-4fjyi|JOA`afRvil9^%J1iAw1 zjxRN9@_vJWWQdRzD6XF69f`DLt{VWZA5>v?94w&gXb2Izx zh--T50MPhX{))%2Ao75Dya7EaDr7Ub zC|q4^W1DZ63mil+EqmBkJ1VbHV@hz6^PP>{NdKk(`r& z51>z5GsItk5(HA;zS%gSH+<0iZ3^xyli|;()%vCt;|&t_J!YQ)IV)_5#SV|jZGLj2XG3lFO8UpS_&EKDA!UEgK8)FAPDk=uS_naLP z&hd`Y69oc53LB=UNP;=^XS+tvFVPiG7m$A-09lZG=G*>zyGQhs!0Tp8JP0V8xz9G3@g7 zLlPpE<$y6)o1#m;$``-u28wawf?Y{ixep@=VX*Zb>7|#X*Xbw?%4cuMBo^~U&QXGA zLo-R$;7o>n0|I4AfU*Rqer-S@yeJRsfc6-}_Mgb)GC8tds%Z zZ%5d`Z6=FPL7Ba1MXC9A8q&Rf*{;H+(5S5eNm6OpoySi>GY^Z{pjf&cc7NKiGd`0@ zw=Zr3!RmO!*67xZfI?5a2s}#Ojj~n2jz^+U6Z`MgjL{11e75!|A0uw4^ilYn8 zoADjK-bvT@5+)U;c$%F32Am685XTh18RB+sBXJ~=za2ZWao)$~UmK=nhe@teNzIF8 zJfKn0^`T9thu)!}Bn-X*D{dq&PBX>!c^L0=_)1`1F3yn*Wl)vLCMnz0eH(x#Y43oY zvZu^`U@9nNqufxCZ@&~+oS;u_Ys(MOkkWMigwVO8eU>bVNh#>zcef_hovF36+M7+38B+oeOIbp|8NUgkbHlehx?B|{wAe0m4E%)AC2(GfBjS4K^vIA{q$Bo$c zYZC+()%DQ6bemsnQ+;45mB{DAw0_i&geXn%71~H2P)(avDMBO`4EMD~y~f?yeFuaj zMW0BRPq*gbR7r@~t)f1lI&BJQ=uFBIR<}(t*=d671Pa49!_=?J{3z4wXo3ox5}HuE z4?`b|Mem)++&0c7J7ON9VA}FA@my{oF-WqnqjllW;>Ul!HpMn+Dar9X+_R-JAlBi* zm|+GC!J;Fw&|6-_4T@B*&*z6N+1__cwbL&r-e=ajghKX^eQTQm18j`G(&iaEzRKlM zKNkhw!wG=)L-sm5>Lva^yHvOor*}Y*-P2T^0{XmpF8sk9?_al>i1eJBA7@7!5MiWM zbq$Ud@dm_FwX=7R4Dt|nXcmJ4v5)H6?_0RAEeup;wfk_FF36tU^Pb;l$!!v{krsd-N4x{7mU&I}XZ7rPbLujp&A%~*+a@J+ zYLE&$c-YTIiHWefyEMw)`=d-t-g0=M@9Q(@!8-NGWVK zYJTMjDXj>AepQg~VcE^42wovM-?mf-p>5LRuQOms%zS+(Jdu>hHl4?6v;F?_ZaW=oJmE5qJ?Y8xaCqk2Ul)sJ{IJxjl zAsxq_C4;!ISsf0tZpTrRr9Fipk>@-tt=c#TNprpYwJGYlvIvDCluj(i>1P3-E$vz_d3@ z;E6ADa`%=Dg0UJfTsYqsca2Y`2D<*w8?cWIx=R2Gkm|EMOB0FKA}u_7brR6=!eH3z z=j;kJq`42;%#vp&Jeyf3!_5qR*1@78Kkfg%#QK#zoiiUGXeIUzkQYIp+f+s;E7H3* zmgx(;iGQWe-vMQpu5Ody`||g^gi~Ql#YG2$*M=Zcx+Huj7`%=UP6|-be9_Z&1D-DF zS>)^2%@eFWcb~R)89z(bO+{Y+Vj4?}S)wTK;gDEOdn))dL*C`^ogGR7Z-x*~VdFdJP&LQVPvUCH5|+UPK$`g*Fr5JTq7SXTB*KpP zQ(=d?WroglHChMcelxU}@`srSjAz46avWombZo+XNidTW;?7Ra&Psw!^}8*_W8Z)* zpSyX7eZ3t^;8I1oVRCh|;Wd3Cr}~udUq91UpO(I;C3jOw;OT4}Y{F;GJ%x!=Hb&@^ zhVz?KN}wNdA&H^)@HDr#KExDSWUbWe4`#O=H!#gs|$-0vkc zb(dN0PYS#NK?O!&iXD010VVLh5+QjHpFXFx=o4Jw{sVKT4FD)y)yLz9XNKL=5*1Oi zc4|5%&!td+-t2nX66|Oy;Bfm9Xn3Vc$mZ8Cw~4J_zjRVL_dTot?i7(UGD&>~j4_(A zpdTPOZIA*4$dAsL-+*1<#2PGn;A=X1#!|XkMPI!$1Rh@6=1uOIegNC0jlk~w9^K3k zib@O8jiZqFFvEkic6BK6Jj^i6YX6Yq?Kibdm(R}XWO*;vPOc4ZI*?^sb8^7_R>;HcpEHpQd~HbziaJa8yu z0b=`Q3+}@z68mh8Lh#udMB=49SlziZv~@znypwL;!s|{Ohy#MK$wPM$Zgqz;3;w7*;-Y-RTH^XxC|q?fhwrh)C=a zsn-U@bHq-2XEN=wy2GX;H&lUn%d|0f?jgeW;ZA;8hbs+bnU|=^FczHYP?4*mt7~n% zYGG){bc7g5HgiJyW+MeSWl`pLh4;=nsv>C>y3;l@=yt3SW}Fm;*H+;km0{kZX9g7Sa+|n7y=$8R z5%}a7lN$J%j!+$)?(*;e=d_V)l6acq+O_)-@l^wV1ExL66aw80~*|>uMN&@ zyfzf))qv!+$sHIACjqE$hTKZYDm7CG-cn>s!XwA&!r^;Z+QC^60zBijS*swi`A1%u zC7ZKUfhyzFZz)k)yaTC#ckf{(p1i_3`0}PqHXFMsIz&M)T31}!@`%{;GSJNJJo0dRudc2ii~?7cFW72WJEFf+FbXj zTp)gZvFs{k$Az5XLuWBNC)-Ru*=%0YT{1dcdopp`i@EuHEzl+4Ueb~~fM`2K;4y4% zg4rf0?hfr}Kti9bO!20r-WgVUh*Bi+lpkk6eef(rNuSId+c;`~WhD#2_Sz6Ma$*6Em+MA&yI73?FaF%A1nQ)$H)cT>U-L(iW5f=9)@o=l_{Pwi9WO+;ikYW3{ z^LDIqq!38=oz|XNC$J99%dJ>d0fKArcfOGMICE)4qC~;Eg&@*MoH*1Ma?p8>r!8n=i*Ptlv(G#*R7Ft^a z#;*}}APMZYV<&)BqcCmTf_8dJyy~^d!B*i_?6Ctn=s|AGoNI4KavgqG={s-k#axLX zFr>f3`Iq`WN3&kW#Nd6wKf@{@jOWP(ZN?O%U-;%**f^eB; zm(m#@7fj088PdM^G*hJ8+!rg;GFc_>ykur*#c5DZP~_m-vBM*W7?2H*d2RA7Z0;WV znkIg1Z-{Av$@#0$gQ1FK$z+=&8aWKh63q8Fw-phYi;JW~hSd8d?<$ z$@KP$~4S*C}V#avMr2mGbS^&prZm?#UnCfHI*i z<}^0q4LFsHjHeRV<#h~STBe5^Jz z?30@O-)1Sf&Qdz-WPT3DV6P2)2apQ3`Hn2RN=}og8T$i=fjIQq)mA#3W_@uw=?fytfu=1-S~X7wsF0bPkf*&M{^|8l>Fw! z*)TPr--PI8I~xfBAL#P&d~nwCbm;i0vx@astdtI*6}s;X4a1M^F{jA@05dhKlh^k!&v zO7{!yMqv&fS05zgX^T`r6jajm`b%wXiU5lv3sHaDj<_!l97N`a=V3c4f0Rw<;hs%1 z?lOS&O}`n??y;gu3L3nJu|o@F9MH0DtSXMZX%Kr}0{-!-V0dEw%uqP8n4?2*{vIB3 zr@C_VvjYNwDUDMLUq8UDxWeFOGs3x87^Bb=`zNhM9JgQ(YLKM|e|{lAr9{2W~kZRz!!8D_g=DG;`AhEeiS zgk*w#W@9AzdaARppERH6h?sAN9T4;pf9m?1P4zEFA}J4Zm;vDePo3Wu-K&7qt#T;h zer}b{4AU1>sT$9BOu2*1jkBk0oNJQPCY1V~QAM9`&P%vtK_DHSwgyDEF$B;+M0qo0 z{WwCE#$GR%_pyC~jLE+N)2q`U5;@m~&3C?%E)edU5dop=mIKr7!-yrg>RX2m0Dz0> ziYAb;krMwmVGyg@e*>m0k=dou^BY~Q1mo-Q&s_FeucR1MjVv-7HA|jagRkd~Z@}d4 zYPM4DwzcWFvzXsmt6C}3{D_=TzZtMP!6!!s+^9gBVMv?`7`y>tm86#(vzI_&nJG#M zYLJa(;9j0JRauxUGm(wsm7;avBZ=V0vEx}%denRP&TLAbP$C5i=@0vCF>`ae zlKp+y#>r9Ap49MGVk`O#MuxjU+%8Kyxpsy1?x-vSOG7l3`5UnNSVGoPHblq9Ku8ht zeU-pUoeue%W4HIPWR0M7RI(^8a&##z*zea*Jc(wj6GXMm4Do{)0lYc!Xx54?WKR0d zy!T;t<{?NKRC^H>G_p0V<=%L1KxC<7FDwchc@N{;*;ctWskI#q&?@TH)$3k@3{;u4 zx2zw|nLm-Z>(OsVc}zjlh0jHC)Py2d8G(kr7u%$cO*r19;8}7f=@B()bHP-As#N6p z?nT^(@l9!3Nhu+1TVfce3B)$^DD1p=Waf43{8b-&j9$J0W2M+dRm8Jv(!SFV@|O%! zziim|PO3N{$H(5ooK3PlZhYH1tifo}Z%Wi_bK#4q$ANG9Xh1SWk%C+bt=G|cxDDhX z4Ds54m)af8KzUyq{sLZUH*}2JWR4pSC50eY2)ib3hT~HLtC6nSp0J zKQC@TKnR$0hQ<%RY^ZFc=B?VfFEQKDUzz`9LRtj}bZjCat_|_Wj%8tuFntftEmP$X zxp&**Az(@njZ%_tN)!GUH&G1l42gItSSr3#Le!D}@djzVymwzBpwtO*U&YI7>&iDJsZ0EdqnJChQ& zsI$<+lC#ZeQ`~eSi-h%((`IITWGH8CXF%(nJ9>O?JBsBY8K838un7KYqXxdtfRZ5p z?D|n2at0g}k-3y{`)0Y3$S*5UC*FXnCHhB~!KQYZ0ij1YEb|O}-2wX;1(Z<6v*GDT z+EZ+w8|IS+R}mR`!mw_leYy1;&N`W-Ndiy8)&b}6(- zhh`xENGda+zyrnPDnR=NY>!-+kwK|K}|bUtn53TMRf{|G^+&Gb?sDsaC6=Z1^kdcHSzV@%4-U~4a;Jr_3bwC%ggonOb$ zZ%(;0JDGQAK&ytlR9YKim9Z+H>{dY5S z=-dp5d3AcOf|;-1PFp;(6JbPUmn@YTtFxw|BBx{3UpWMtzS(em^w1vo_t(bd;^ZKFNmN6P>H_qyX2ydOpLdGKoG2?G6T@>VQfk5 zFH%1EiavGWKnnQWM%tKs!rRxewMBsF-II`x8Hh^qI{oo;8v}M;Qw|z4%%(`+Mos~}BjU}k+H zB~=fvDr0X)VbPgC&|W8|T?i7vYnIy&TanUZ=wGBDKk(IT4!Jzb0}Fh~#?J}HZ9_xk zN3pxM7VDtJiitJ7WM=3tuPLTfPVq7i7fzki`rAH?tvIL^Wa#Caq2yuLTjBwhGoU!p z8Df2Y2*2IIl;Q5r@C;&`j=D)i&e#6u#jLQnm9@>EbVa^!1D+0$k}Fw<1m-FelV*aMu3$em$4$xiikz%Hc( z9}0nt?_s9qMYeSK;dx0XJ3QE=K0ItNxCgwx4N&@L{wm5%NLd;b<0#)QJCooaf%f5% z|AGHq{|FNqQs;C0m^*b{Z4{@W) zfqfVs=1u(n!^8Zt6ElAEy+r-(9tS9y3iS@yYSTLUIPy{q%g6aU*Zw#oCsJDDp+Cr; z>Xx_>7up#@du}W}B0g_GFluos0gcqcC`&^!@$bUUIcgil$#M6+fn&s`bo3#_ZOH_EVC~lA$xcR5qJah*@$fub>)x zzlXE{Jx30WSyt=|k-KtN(;+y`IcP7T);(l0FlE`^$B0q?$~A4gE#Vn&}0 zrA&#?X8nX20vpxo1b$t~KS(kLJ3FO))F^A95nZMMkcz}J} zNg{qTgh<^_;#^Z}pCxyv*49TxzK&h+ox_q3`{vFJoQ%`$fTW4)7XS05QF|^Z&@V)B zJNAVf!lU^4X-n_H=16>BKSx59DH3UIvnk3GuW8n!$IR|IbWFldwO$*VbR{d-`~0wl zREa7LCVK9GogzTWQ%KuDx#eTAeGY&2#`QcClMc6ijIG{Vy{S7lo zwF4FS{+8^LFXxQ)^+%-4hV(;Q#i;6}mR!e5D|L^Qd8DdoD^Vw4r0c(abQm6{rr?XUHDG(! zZ6eTiP8_r$8|gC^ex=abs;c^RJ83){_7b;NY?06K;Y|@W19m?m5zu+oo+u`2$auYK zQf3c#V<6@X*jHM`7L^3h8Mg0$5|nwvi*9<|H~Vw2Ng@E#uZ;=i<+9oSOiI^L+M}+s z?2;+1vb+PWD!}(}YJ)AU9Da87Ae+V{h5qdqT=XT8dT88hmhA65Q~H5l&)Dwy*``V} zr0zY;s3jhZY*&JHu}frCT~WU_g^?n+bdVMi&*1k_ZP-!>J1f3Aq&qOVQPYKmgw1i-{{rGtp))_W)@5y398 zLs@w*ftu0+MG~FfmzayvFWvOC&44_*O-eV~hxtO5reyyd@Iwm7=WKk<0DFdk>OLfN zY{<&7!M+^XYcGKU=M8pEMaB$;hcB0 zK1Ue2QUlUhf?x~^leul3LRQ80{bs8>_ifZ9h&@hq=x-0J1}lM8J&bc7Mqgw?(Nav` zwgRQBg2@jdm;vc^eVrG19%yesYgK%6;w}{3hq)^DSvAXwuZ@+_Ii}=uwT&P0ehxu@ zIr+8$8I`;8c-QaR(P_&A`5eNsW=LX0CHMz`egncx#gQ81;#?0`g#qxPuy1*DjI7## zH^ca+UmQj)snkC=T*hsHCS49DS^1p}v%@Xe2eJ2JZKWDJ$L8MM*aS+|e3h)Dxpz5P zO~4iWo4{}{%*Kmi@xn#WpPRb&yJM4R)O<=8q?O+T=xV0D?VL;!L!cmHrsrW9Cb_7h zi^6%^6lxedEmKi*+r}wfjx7W1rx2nG6tV;Ryyc~Q**_vW``(8u{0^B*%{(t*e-lA1 z+nn0QhGL={BvH|K>DVOrZ&%gq>U-Gi^b8$1@fpwp;1a-3+0r(IvrwY&P%!LZjcn6F znzZiF!P{YM;N4v?)USrI5xi)bt9C;>#y_Wzg;w`FG zsJ;O^7VYwTcbi_v3Vi4j6`9NL{jdww-Sc7;FlMjX(4oL9XK+k%f9ypPRA*uy5<_p9 z9}}7ouo%U9;aFQ2zMPu$kr3W}+ANC(Sk7h5H(<*n`3nshmo z^1}{YC;}ih4fYI(S;kenMm68r_OPMp2&ffK+>&eS>_aCRSW>BNVi`E92O%A7x*aP; zhb-~jUh>}_Ruh1|UhfLrZOi%jP2$yjeBhVNOj|_<4XcI8P3Pf+cZpDB82PpV*OASv zdi=1Lh;HtW02yHV%?ypiaX1+T;66MK&13vUhPyL_E1V;)G;Z^E13JkscQCAD5&ix? zGqfdroK$T#jXH7|dz`p{_|#Ebk|!3MW#`4U@iow?!t8+i4G8(_uGI}dYy#Yr^&v)SMRseq`)EU&h{HWBvdvy$}o<8GpfWCV`0|34eh zo=b%&BDc?8JuELrHZfo#+iOD=Ayrl#d(Ddh)$p+v_&iy~ZDHm*0}iqjvuKn}`E%+IF^~9)s_wy_HqbyihMD2P zZR@&=P*h~vo7!5k7bm=+r836tm;j;F;}snAwi&8JOO7|W=g*RvSpX_Ik9^36e@@nG qW_I2PLcK;EAyDF1I#>C2+KeTZNq&MlGt_V7v9g}XZ-#&UxBmqenk0e% literal 0 HcmV?d00001 diff --git a/Test/Fe2_wl-lsms/i_lsms b/Test/Fe2_wl-lsms/i_lsms new file mode 100644 index 000000000..bcfda72a8 --- /dev/null +++ b/Test/Fe2_wl-lsms/i_lsms @@ -0,0 +1,150 @@ +systemid = "fe2" +system_title = "Iron test for LSMS 3" +pot_in_type = 0 +-- write potential out. Use this only when xRepeat, yRepeat and zRepeat = 1 +pot_out_type = 1 +num_atoms = 2 +nspin = 3 + +iprint = 0 +default_iprint = -1 +print_node = 0 +-- istop="buildKKRMatrix" +istop="main" + +nscf = 10 +mtasa = 0 + +xRepeat = 1 +yRepeat = 1 +zRepeat = 1 +makeTypesUnique = 1 + +-- energyContour = {npts=1,grid=0,ebot=-0.2,etop=0.0,eitop=0.825,eibot=0.1} +-- energyContour = {npts=11,grid=2,ebot=-0.3,etop=0.0,eitop=0.825,eibot=0.025,maxGroupSize=5} +energyContour = {npts=31,grid=2,ebot=-0.3,etop=0.0,eitop=0.825,eibot=0.0025} + +a = 5.42 + +bravais = {} +bravais[1]={a,0,0} +bravais[2]={0,a,0} +bravais[3]={0,0,a} + +site_default={lmax=3,rLIZ=0.1,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} +-- site_default={lmax=3,rLIZ=8.5,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} +-- site_default={lmax=3,rLIZ=5.0,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} + +--mixing = { {quantity = "potential", algorithm = "broyden", mixing_parameter = 0.05}, {quantity = "moment_magnitude", algorithm = "simple", mixing_parameter = 0.01} } + +mixing = { {quantity = "potential", algorithm = "simple", mixing_parameter = 0.05} } +--mixing = { {quantity = "charge", algorithm = "simple", mixing_parameter = 0.05} } + +numberOfMixQuantities = 0 +for k,v in pairs(mixing) do + numberOfMixQuantities = numberOfMixQuantities + 1 +end + +--[[ +print("Site defaults:") +for k,v in pairs(site_default) do + print(k," : ",v) +end +--]] + +site = {} +for i =1,num_atoms do site[i]={} end + +site[1].pos={0,0,0} +site[1].evec={0,0,1} +site[2].pos={0.5*a,0.5*a,0.5*a} +site[2].evec={0,0,1} + +-- set site defaults +for i =1,num_atoms do + for k,v in pairs(site_default) do + if(site[i][k]==nil) then site[i][k]=v end + end +end + + +--[[ +function deepcopy(t) +if type(t) ~= 'table' then return t end +local mt = getmetatable(t) +local res = {} +for k,v in pairs(t) do +if type(v) == 'table' then +v = deepcopy(v) +end +res[k] = v +end +-- setmetatable(res,mt) +return res +end + + +-- repeat nx*ny*nz times +ntemp=num_atoms +-- ix==1 first: +ix=0 +-- iy==1 +iy=0 +for iz=1,nz-1 do + for ib=1,num_atoms do + ntemp=ntemp+1 + site[ntemp]={pos={0,0,0},evec={0,0,1}} + site[ntemp].pos[1]=site[ib].pos[1]+bravais[1][1]*ix+bravais[2][1]*iy+bravais[3][1]*iz + site[ntemp].pos[2]=site[ib].pos[2]+bravais[1][2]*ix+bravais[2][2]*iy+bravais[3][2]*iz + site[ntemp].pos[3]=site[ib].pos[3]+bravais[1][3]*ix+bravais[2][3]*iy+bravais[3][3]*iz + site[ntemp].evec[1]=site[ib].evec[1] + site[ntemp].evec[2]=site[ib].evec[2] + site[ntemp].evec[3]=site[ib].evec[3] + site[ntemp].type=ib + end +end +-- iy!=1 +for iy =1,ny-1 do + for iz=0,nz-1 do + for ib=1,num_atoms do + ntemp=ntemp+1 + site[ntemp]={pos={0,0,0},evec={0,0,1}} + site[ntemp].pos[1]=site[ib].pos[1]+bravais[1][1]*ix+bravais[2][1]*iy+bravais[3][1]*iz + site[ntemp].pos[2]=site[ib].pos[2]+bravais[1][2]*ix+bravais[2][2]*iy+bravais[3][2]*iz + site[ntemp].pos[3]=site[ib].pos[3]+bravais[1][3]*ix+bravais[2][3]*iy+bravais[3][3]*iz + site[ntemp].evec[1]=site[ib].evec[1] + site[ntemp].evec[2]=site[ib].evec[2] + site[ntemp].evec[3]=site[ib].evec[3] + site[ntemp].type=ib + end + end +end +-- ix != 1 +for ix=1,nx-1 do + for iy =0,ny-1 do + for iz=0,nz-1 do + for ib=1,num_atoms do + ntemp=ntemp+1 + site[ntemp]={pos={0,0,0},evec={0,0,1}} + site[ntemp].pos[1]=site[ib].pos[1]+bravais[1][1]*ix+bravais[2][1]*iy+bravais[3][1]*iz + site[ntemp].pos[2]=site[ib].pos[2]+bravais[1][2]*ix+bravais[2][2]*iy+bravais[3][2]*iz + site[ntemp].pos[3]=site[ib].pos[3]+bravais[1][3]*ix+bravais[2][3]*iy+bravais[3][3]*iz + site[ntemp].evec[1]=site[ib].evec[1] + site[ntemp].evec[2]=site[ib].evec[2] + site[ntemp].evec[3]=site[ib].evec[3] + site[ntemp].type=ib + end + end + end +end +num_atoms=ntemp +bravais[1][1]=bravais[1][1]*nx +bravais[1][2]=bravais[1][2]*nx +bravais[1][3]=bravais[1][3]*nx +bravais[2][1]=bravais[2][1]*ny +bravais[2][2]=bravais[2][2]*ny +bravais[2][3]=bravais[2][3]*ny +bravais[3][1]=bravais[3][1]*nz +bravais[3][2]=bravais[3][2]*nz +bravais[3][3]=bravais[3][3]*nz +--]] diff --git a/Test/Fe2_wl-lsms/run b/Test/Fe2_wl-lsms/run new file mode 100755 index 000000000..33dbd2462 --- /dev/null +++ b/Test/Fe2_wl-lsms/run @@ -0,0 +1,22 @@ +#! /usr/bin/env bash +##PBS -e __resultsdir__ +##PBS -o __resultsdir__ +#PBS -N WL-LSMS +#PBS -l walltime=2:00:00 +#PBS -l nodes=7 +#PBS -A MAT020 + +#------------------------------------------- +EXECUTABLE=$HOME/LSMS_3/bin/wl-lsms +#------------------------------------------- + +#--Change directory to the working directory. +cd $PBS_O_WORKDIR + +#export OMP_NUM_THREADS=1 + +#--Run the executable. +date +time aprun -n 7 -N 1 -d 1 $EXECUTABLE -i i_lsms -size_lsms 2 -num_lsms 3 -mode 1d -num_steps 20 -energy_calculation scfEnergy > lsms.out +date + diff --git a/Test/Fe2_wl-lsms/v_fe2 b/Test/Fe2_wl-lsms/v_fe2 new file mode 100644 index 0000000000000000000000000000000000000000..88c099dee062f492605a849245c48f5afbae52e4 GIT binary patch literal 89416 zcmeFa2|ShG-v4b#$UM(%^E_r2Ynk^h385rqh)QNMRi-FJ5-CIp6-i}iqAV#Xl1j>u z2pK}kJocO$$LdCOqWl^4JN!G{d3EPkDg{OSYWOPEuN_JX@;?d+-qm=v)$;#y zK3f}8Qwp5(clp1$dKiVunqPZ=UAy0@fAW931&F4GR^&ErUu~$&DjQb)Y&A$>v32uS z^1h{EkgszLI8DJkfF9`d^!YV6PCeO7u3Ja)(% z;pZm}&PR@?qN4hll@5;p@(wkn^REI{bN|eYKiL1G+>noFaa&LQPWqSPR?96Wl(_D{ z$8-GJKdv5OHTfLwi$B^{jY2`7{-a#j&a26xG=H4$Up@7I-mmujTl>}DyG}T-cKFRz zKl?ooIR6|~6ciJy9esD>U-vlF{S}51zlfxanPu+WP=ZwTF?sNt3&g{=vg^qM$ns<9 z+=Uf!oa^Us#U#%t+CWm+5EeUp_*cUDnE?BmDhv?0v z^pmxBBf8xkCW9(j`1s!&xg7EzdHcCf@Co$W??WI2@7eD`(EYg)tbBvqeS-G8cm)zX zd;QMk_S55;P1e^v26>bV;Jr_}i`&h_W+ zpBDJj0)JZIPYe8Mfqxkb{CcjZ`Mb~cQS85}`uqNWPViUQYPAJXV!w6>tKo)mQ2|K;}h_5PAg z6s*3fgcRxw6zV_7Z%FX=_uqF~tlDK2zq0?0_nq;pDgPSy$MeU3*B-Wi+5>m-f6OB- zt8e!Hz5L@ZzMrDR`zz!yZr0EJpYOV8?{t&j8%c-0)+4_+x*qgng#6y9O!Cc3@_QrF z+co0k_eNE6lbPiAMs+Ta$#*{FcSPiOX21V_zkggEWjJN^-Pg~()%`!J3w}5E^ZndE z&!6A_TlU}Y`_9l+LpF%7?))8GU5!Tv{!WI~XyPhm`2RSc^J=n{$RFq1zM2e$|2W_8 z=cOTmKhF0*o%+x7tDb*LzxwCdW9UzNVCVgh>&C?Y5_|l50;Qz<_0;wNvvNxk~L z@qhikYi`v(tiK9e{ro?_XZ}3{{#CaB&jP>ZVHyhU)iculGRNONfBb5S3SKSpN88=i z#2)WI%0)pjw3>Xk{EzbyR+Haz{&BwlTdDu&yz|SDzx`@>^$y}U|NDORe)Stw;$L04 z{?+^nk$zmBqmGclEbO!VeaCJnP1kua|`CBGwWWsVCDrrB9QZ4w4A@-k9k4r za!@yB&ccJMVVLI|)d|}%v(K(vRKUz~VQYAYnJMMUvx0ecuy61(W=7!&?|YbMc3V_s zVWx8lJh+c}x_(qo1T!`0R_i$CDPiZeRG260M#RYVNp?53@5D@^+I2M?Gcj9fN(eJS z`SRER=JA?)gr}ItHfHS?vA_W z@*UGD{dT%Iren^-YB@}Yi??)NVQ$Mgq@{*wmrkFvjJY+IM5x2G_L0&cVs5cc=B&ir zthE3BEas*)R|ZBfiLL87OEAsO&m3#OG}-k*?=Yqj->ZpHOz@&c+!<3pJcZF4Q;#5j zNf}f7VMK->rly_0-6zcT{bRK1n5teKiKduJV`3qemHl^L!M z(lN~M-P@1i<5#|(?_t}BIcjagiT!V7Xfefd7;_*ylz_`y`J^&>oLpXaRg*|MW~bha z2yWlXyIZ7fxSlJm0tM@FyH{Gm`^z63V_hUZeNy^6kzVgKO`Xmiz?J=3AV$28E z+L_7m_nu@a^I%rKF;}a{yw!UD8t#Xc>(83+iena)IZ&W!^i^al<|%Fgtyatvm#)0Qc3(Lz>RE;DyApF+M-BVW%8{wTg(l1} z(k2T$?pA_QG&>(-`qm$L*@x*l{{87XOb@!fud$!6xUiQ7lFQx6boTrJrv2PxDemtT z>()!w`3YCA{^-Hv@1oAxiOIR_k%Y(l3JYTve+(u)z58chOsdIKy>f`Oy!5=6}HDEjK(WZi&RK9Vq>X z`*r#Lq)%TWX8D(^qdJ%+&HQ>VFblIHP4{BvTBQ|Z|6k6SVAra_ObM;%yMTFoMEyDT z-{mNijS5qkp~p(R95DTEvD4ke+*hZPa|zSAy80t-&+_&h&&(`Lt39JdvY15nsik~O za78@@``faXsN=p&Or>bvbaHu;_54y3n1T~bYIq)7=2*#T*oC?7Tks6I9+VA6k2WIG z(p*fj#2d`71Uvd$m;)C_HU?vMtzo%#7V|Y}e>)>)gWq}A5zL2SqVI zE1v6N$Gq@9td)Ry#%=36T;HX{7j+5vd`nS0du#$Q4}uoATue{1i#KtF^B5t(|gU@2^-m|F_{dD!cHU7-0WS7WKGQ8 zFVS<@U*;M+oj!MCRvxRJ$MeEm?r6KwE6jMtCfzVhzX5c23#LPG`v^I|VU4yW?#DUV z2lJPyFxdjMzuiEj*||<;4{^+ovnhKhFzf4^eXyU+UN`TQ@W)IGd$bH0z@9v?H`CS0U&IWup&3e#{qX72e{)!Jd6FHJZ9 zgc*5S&=>pvjH`fw1g_tV3Gw3?KHrQKU;igu?-|-;g&YAynjXqaQ^Wo+{mky06boii zk-#n^%!JH7zRQ^VrMdcWeWr<9jvT|~OiQ!%P~&z^(|G-etwf}$zTH_{a6e9=AYekFP1Um-RpNFqzdU!`36xJYJXUvLFb#9( zwCOS)Z{O7lWykRG-)UdPSmAl$TUThs(gY=fTiUJkGur?FhP4 zff<~Cx)zuF)!1^>@C+u)j`TR}kK-MW&$akq7M`Fm$K!Y0_gZ78H>Qrnj7}dWzzm-BOg=ebek z4C$#PMEdfb*`x%w?@M`o3&Qikm!Jm+O}=2Ne|_`)0wRq}IUZ-hb{HvJ5#7#)>GxJ~ zz!g)mTZKm-k%mXO^TW?!79Lu>g~!LRGeg04CQQCMimyaO8hU-ftHuU1F;}-H9n-M7 z@-XhV!Pzzdi1hjCOV$=VuYL~mYk5$PDJN`` zQ-??c?X8*5vAqW3PhHfZ#?;(mzpWFI`umtJO+Uvx+2AIM{jOiDswNgoq^ zbRLm(CR(O314MeC_9j>d`|Eo?$$d_EoW46hXZQ){ zdnaOU-GJ@cc9H45<1tJTb6Q$AM0$IEoI>^;Chu}vKlY2(H2;&M-!U0Y1f4%4(wn1x zZfV&5ujjsLe_W60RqGt&k4Ue&J5S1LV{XxPH{XazEf3y@?!e=HAx3^6@+=+feTebLx+MB-bai$X%&%=-7?Q>i_5vlGaO+)=BOb-8R>m(5AkzJa~SL|=KXWUf%4kHqJ z-QgYm1C!}n$}1&Asxiw`I2MRV4-fa&(riYg2RE;km&hYhb?@xfG<-d)X03j|`7I(< zZJ2V&A4a769%p84hY;yra%TMN$B1qUrk?U-2R9_+8h5!Z6dbP%a1aCxay7m==du+)?t zM5HUWZEue$Akt+>Vs5iTq(YgU!VI`Q1xz$&<#Q3~(zx!|v{XdOYy5Vkm;;e6UKS2L zy9bdj9KJoffa{sN<;G+lK3|UTim~npB4v+ci)Tbglt3Z0w1 z&;TMOUlrt=!gfnCPS)NVgh+`UMMeI}h?L;H2VQqVq~nV>t}}Nb(y_RR&|FzWid$Dl zr`CZ;M^E@>D}P0#7~0@X5YInR5ziR8@O&Hb&Ec9j?x!QW`Chu=adznG!aQ>|B8AJ3 zM|(ITQfT5pmY+T%1^2(Qtj6a#sBi=dPH(_E1gon{_S#@ z^x<>`BJED0i(WW`NKV=9*VAVZ$?;MNl|G)A9P+(qx8rfQEtjdi9G}nbbXcSNWklK< zb)oKd4kB6a^G=~Tg-BaSEzM=P{+lIk&oeq8(#Clv2Yq}#Vtp-(5k8+;at%wzM?^B& zJSA~-HzFC)T72<;fk@z9<-5}vh@|f>ppw{(NP6`9*&pC>rG5E??^bU_(%j&~NGwOB z_0N}L4^bhKs*RZWgIkEC^y+!m1olq_QqMU-JYHn)Z&6Cd<3w7VQfvkLxx~?4mOIvn zB-+)!ry93IM6q@6k6nl)7+kH9l88urcfxC0as9Zz&cAHL{mV%Zr!m8R#b*BTof@7e znD_Ff^_d_N!;yO~Zt93ccjBu4lMRSObE^4Aq!A)fC3D+7Ekwj0Q63F*^oY3RdG-D@ z0TJgnJ>Hw`frvBWc>}5}i1_`xtVGv)MErWka8isL5k~{w%(=87;;=;hJr{OF9C$%_ z7T;m=h6OqZaN|-ABZh(e|M$wTSq_ z(i$+hAmXz^bAHxsi1_4NUR9P_)rtFO?TtvhyXS>DTPl%Wy z=@p&y1`$)cPf2RdBVzK2!oDe1L`+aPUA*ZmBF5J0*~#N@6e+f>eF_l|J=uEn>t;j@ zQBOKd#0)sgY5Zdb5xqxWhVJD>#QhqVN|p{I;vWA1uRUXkxcj2Gj%yks?x@X7X*5Pe zySMiSj`$;@RoA|2TMZF$)7wN#4pT%ltEJZ3bsP~5bMG`~>mlL>pQNzPc0|-tanG&& ziioQH()l~_`4kdvkN+4zL}|k87k*s6Xwl0xl+B1JC_yNyltD!9lvh?4V-b;c^htm< zA0jg7_MVi$^`Z%1C;Md*ng1vjf1MxMyC}t?k-1(`J^NuNWWK(C&LW2znJX}L z$WRC(a|sD+{?Ct)xuA^EIoVgpoRcq|dF@4H&M+s}KZuYyb=_!$d>t}dJp52?lpUE( zipAN~%OJCnN@=m8Tx9l1J-+jLF*0kvm{K&+h0I#!3D=GpBeMnr!q&UTQJ7lK%+Wzjz%g9XnzSHxE&ybl=Qr|uGRAk0MYKlackQv>?lJJHqWV#Y#e||*; znNBVvw#S!{>9Ct%p=<&&?Jl!Am!5-6-+X}<_vn!6Go}_|t}`-y$Twi9wTMj1S@wt~ z1t8Na<7yl}jL7u-ZT0xa1Z0}J*V=TC4Kh7O>9aqK3z>$;1|0V9K&CzuCZQn+nYx)Y zw(Wk7Ot(c(WU(tE(@j^hckiS`rl7KNuLuV+U0)(o&@zQgr4v6kX`3Tc0qgqRcJj!S zg`%N)R~a&;I@>D$fEt<1aJP*O>_jHRM-XvA7@2f6MP)D#Ba;?t`px5t$fQnmGnZ~3 zGPx}co<6;UOo}+$Vix3)N%jcs4HnFkmm6uhoRCTMCcX=PTaZa$+t|omS7hR`(YX5g z6f)Uf$h)a$8#38A=&2kjgiQ3=beyC&A`@k?<6`LqWFjhHFBJL$nXoSwtK^L!lQnhm z!QMm2cqU+0C1XD_9-?2awCqO4?ePT;PgIcc^YN)2`1#Gadc$muMl>?M9&pdF%N7~u zo-$D=vPQ-!XA1OQjU(fzn1Mq>`pDRSJE!#BYslD@YeO80K*l!rJ)hjYjf{=Wi@Wd3 zBjfcC=zQWXBV!5vlUWf9$e7dF{QH+n$au|30|)9wWHeO}KIAHijQaCw`fW^*QES5I zq6k`K^w>eXVD~ICs$hL&(Itb7@^3zsCIup+G#!mbadBi6Q_T7`E&>?^Q13Vr&4r9y zOgXOV9zaG`zWVF1e;R@4wnpX~$VlmM&!fRJ$VkX}N6B%Vk5R$I)}av@F7)Iy>n9__ z;UjxXnNyMBd#Ze+PFZAF?`P90Fpdl>>ce`78OSi7Mrfx<9WqQ+F#a|hfD9w`W}wej zWazC9csd%8p(B@kWrrm)Bz8Bhc%>sl%~Z8A=AFn;LgC;=o5#qI?dJ8i*zXAb5So29 zn2g|PP~egEPZ4adFv+92g<$=M)1_a_5Gcs@Zy;LyS-8fCbudFA7w!>yl^9T zVg`bHoqN9o`yyydtI1#0g&;haQ1YVIM1Ie8G-a09ai|f!0W+L!JPF7m|V8MOx%fp-~rCKdR1gF#Ta$wLOU{OJmKnA zPK^vM4aH`w~ z#&>Pak*?bFXr}8%NSF3pe`5LD;2uk`mHJI&l}-qh(GZogMNkQMXi( zj?xv!-o{9zL(MKKSkHsB-+39BUGYcS*D7v&~2&c~|7r7(yD(9tu~AYmvtK-OoDWPauu87E-&<=OXoX1?ie$TBKe=@yxSs z4N{M26!1(aMe5c`@La=gq%L9VW%;%Tt)H3wn0Biet$$W9&?J2etv|oHWtM*yt@oLn zj$@fZ>kZEpe)Pj(PJP9Dq-dn}`O^#HntG&mFR|j-!&Ib}q_I+zG=|i64O}0Le~Q#p zv#!)Gsv)&CcDF{~S|ZhVJic>&pO9)%k4xKC4y1bcX5Z#dm|GGQ_Q)_IRk8gxb&5qu zW!l<;iN+eKG{A4H(Yi<_TbuH6@&r=x(Ukpi+!3i5>aErN#)(uo&18GEf&W=Lz+2RL%Scj3k;WK%U6P`$J zC`xU6fdi6D*(CfW=NXdIRCvdH<`k0sAd}(|8IELQ4I8+njv`t4!^Ek@NhI^SONe-P z2+4%Ir*QUoAQ>?sF?LQ@B>kNBFqN%P0wnJ2zLQgyO-r?$@_DKB>B zku$rH6qmVJlzA+YeAw*6Ka+(d_gxQVuM$F%?88k9QJay(gZPED@0XFpzEj7u@b_*K zoHUcm*Se8-&3GwkgB%j~vSN!)(AVKsjt7bGS&nW?ol z0g1j^DvG?tg+!yX$Bw)^gG5!|BF_X?MEF#?sWti;BBaa48EESvg4reo1|W+>zAL7L zAKQaO97Hx#3bP~OTK~H&cBhfByj-+r*>)t9Vfjh=Njwsw>dRIs5JG}}qtm-*^pQZ1 z&m)Ce8YE!twewSAE#j{mDsi5-Li}2vC7n|H5Z`r=7ox9H5TAtCh8piG#Cv|WphBt` z@$%5O%z&ea=XAcJ>yCQF!&3MBsKQRfee!_oHPv>+&78S=`_44Pb;_c<-O~keam3zN z@J>gZ=fDZ3-a*7Ee5gzrKfiNa)^bW7FGn28ekZ%c8WH<_NzujANr>Id=1oX_6JmQa zYqq2_hS=O#nW|I?h;=fnq}oOkvBst6)8E;FSa}zH%eJmZERLDVs^Z>=IiA6uE)Ty9{`NPa3UDX?3lrh(+{G&qM`t)e$|TzX2dM zAv()vZ^}z+5p7zF{k~cQw6-%Q^L5(aS*{;ZhL$f`3fw^y?=9>XV|E}4-4v!JOP`t_ z28(CSmz`@?nAKau|Iif zRP)W}V5r>nqMC^~*V7BN+iJd=F#CC=1=ftkw%Fe9xg8L1h{ z;UpApd|xxjS{?7f8DBGSY6nNx#)6uDLHdZ#OzJhC%7^<7a=xqS-7fg`j7LFD58YD% z#_1z9ACg4w%zPiL=_DAJf6!Z7^S;?$zf(W4rY+-sl2FWOO>0=EWq?6I&FfIPAIZhq zH7%#b>AMYd{?WREsnvA_zxm%^S3t1%wRYm-zx29-e`Jr}Kl}L2|Gqu;(fzWA_Ajh{ z{;RFC_^;dJzp9r(w`$7OABO#1J4F4Jo&IkH{`vN}xat@G9`^XPzKfQk;dh7pgCFXh zTFnQ|ejo6+iB_X0eExR&@7So-9fHa4n7_@NtI;i9e>?qm?7r0HpQ(f4*O7udW>a_wcLV_Ol9b55$5GWVN54QI=#$2)yU%9rQEo8S+bb#`2)IF*(8o zD?pHGij^U}_ft^VW9Zt5J_P`sqJCc6G2WfOM`Qt1;kTlE-?IX$FXp``J1zt2T}cer zKMDcr){~aoM4p2+n|JTD9n}GAp0Qdo(Fp+>^RoOAhx>r$*>>VvV`;F~k|X{8_gJv@ z?d%o__7yJ(sWFV#17tOD$2 zo;qPXfq=cT+6G9v0uJd4Q-1a{faAQYvQfAU;N)ma88yBQI8Tag%*<*6TnzR_hv_x~ zt`l*)`^N4AZf2D9uzn}tKEwY&A_f8;;mhMw4jTc_wa~O^KMlaEmw$T8O>@Bea>J%x z9T~vqvF&_%9S7j2T=((JffT@h;lQ^pI0ys`Q#DLzjsk(f)U+E}zCbWFHpbY`0tkVa zHD$-11EFu1ZeDOV0>W2*++vHF1|qIy&wk`f0Rrn6#n~oBKnQqL{&uAp5ZcC`(aGxp zQT_0=8G$e$dO76O%J+{zjBPSK=9nK4i(GD+Wh??>6NOJ0+-8Be+oF4$Q8^IrV4i2s zx(g(1zRB;8=>QVV<;>4!+koU|55eX~M}g!^K^?W8<3MWbV1?}?Lm<`Jxw)Zy6iDw~ zr@8Px6i83UbM;aR0h#0bX{+1c16je^{PEj|fo$dFm3B{8AZMdg@-D9s$bI*DVoWmu z7dK8GPt81Zl?tg`}&S-$tn=Tv}_LBld+k=O2UG)|meFcO0M)MLOQfFXK#g=SCrRKjP`kHo zo-VTjte2}Pj$cJpgavUnA2wuNX!C_lMjx)J9h|Z zvVA+)J~09`&lwx3^ke}o(I@Q{0d7F6H0k_e;d7vEaLtu%ejI4O)(p`%p#VDjjS5@W zM*&^x0S(EqZ9wR|0QNjizEzY2Als*GnwCib1FyInz3vC_-NSuGTRVZFfyRB>96Dfl zMc~N?Z(m@<9%;GVTMigS`TDvSOaP;a#f$Ftsla&8`r9_1Ux0Ck^uWxk-N3|Vs9upJ z0hlx&w^4R12d0}jzf8r?0@LRFUD<+ff!S7*o=<(Lz^s#zr_zEBn0qktR%3&iPi^;R zeDwhkkI`_n4c!MM0jaq4H^%{~{8hy~iU%951i3Dse*-p72xM>nJPbCaeSX-rwHH|E zrAIyOC99Bipca-nTK1gxMLf8Tvo zV3p6(99Ss{tm#yxx4Cx#Yu~$ePFG}sb$j`TS&3m_W2Tm?9sdQ`R2nx8m4%q(O4g?540S?Y%=veas;IPQ!_c9?4 z>^L|0$;;&jaMV30>te`V|97q;60oHTv%nE(+u4Yp;nY&r~f<@mok z^}QMF-sVuMbdMG|uWRKzr!)(kz4S(twq66yFTX8F@|*%Lnrq~o+ed&)Zq$QG&0*k5 zAG}H1Hx#%APa<_2Mc_I}x99wT7jSc^>-;9F3fx|5N@ssA0ej4Si^Q{Kz@A6Z5*`^x zfjc}@+kdA6xYzo#ar>JB57WSPuTpq`M^idSHR}nm*Z%X$3nxXew?C4lTlpy1chGmm zJT@Kdr++bfYVZo!pLhL|Qcxc7)R!PwevSg3UFPifIZD8RNQG>qEDO9OzqsnIcLiQ8 zS?SsDF9PpK>rtMNPT->^d!yCpIq(_Qy{o0g3w#T51Ay)m;HReLAMSAk_@%qq1$W8; zzqy{+?`NHW|L*E<>S2w*|JmB^7w^?TfO^y5vHUC$kT0}kTX7cza?dO7&u_rN$p>;h)q@~7w1mme_yY)` zcp$#6fER=$QS0`kH-J$7)O3NKG7wsFsK?)_2ZR~6nbqFW1z{bP?$0*u2jL+~_8;Rk z!66>|n@_%;0Eenf5|8_5g2Qgi5qp;e!4c-hk^zRj;K;+Ynx{4jAR-`Q%ycOWM9LK| z>bUQmZjU%2QTA+E)x6C&n`l#NGxLz3$J;oDp{CFvd zaqx4@-^34M8tkNwEnNXeb>4En{VW2GUjOk>WppNgNaV=G12T-AC%^)v-`9F=EK3E>XpT&xJ@(+t?c-c_y}ckqM`(Z7${CRHuqK|D=mXB0 zM|utR`+~D?e2*l&9R=rHFC~0-^#$jq<(r3|%!AAm!gKwH)`2XEQ&P0s;y_ky+R*!= zFCg0$YN^{i-FL1uJFYu*M707Xn@}1p6SvQ4&{MOz4C+%E7!KQU!FM|RocpQ|rB-8;4VX5%E zloTked1|D0))ZVeY^i>{bqBay-&s;F)Bvtn&Zk+@|~!0j@L51YUC zfjin+O2$mx;LanF=Le4SfxDJZMP^TOfV z7{_83r~)xk2NNejRZqxz)-OV!I*$Eifr>PEptwJCcqb=#(0(enoRSMXOvu^EmK6YM z^b6~v%XC4_G}<86;{uQa?C+Tuyq@6QzU4Nq5M`&-vye);lca`uE1${Xz3n=7U#lmcYxfDxcTAA)tjFr~y*fmc83d?goo!0WwD7Hd)+!Ryz8Cu`d$ zz#9YPIAIzL-dumoLESqAT1C{i=#<<8t!Y9-Q4SX1Eq(HoYlsJU8TB+f6CR*l*z?t;H%p+s zltF2q-Y3ujA9Yhd6$Tw`dF@)+HlWk@u1g;CMbO2_Lsjf22D+{_pFZqT3O-m)sEwzF zgAdcmHX+%%p!>p|>jEQo;N#}#&5n*b;N!|tvd}(B(6d9BVe{)dpyzf`K%ra;=;e|V z-|ZR%dJh(jJeIJCAET%ERbUDFLLz)@81I6< z{uXs-izLu*>lsvFF%0_ax9@nYI0goE3qkhUc`$HmXHf>E1)t>-H?y=#fX|n884I^f zf_f9?lUqUxN?M~GNqbyGbAI8jr(PA5s`gRX6X1;uSfBg&?8){2aFR20J zNnb91JVOb-s&6`Kw=)KO{Yb-7v7Qo4n5C78v-p9D3(f=DDFR?({#*AJvvuH`y=5Td zt;673MMSE9j0E`3nFwmApM&qgVduB);sW10Y(Ja}XaJK?!upmt=9P(Eeou#-;>b>!manM4&Z_2rCTK-@Pl?O0SCn4}G+UktQr_NIdwBb&~z5q)6h?)(!E=6W!z z+E_jm8iS}mZ?jqF447u<*clHYvChcMV-WP zLun^iX{ojEmk9NT={{^h3&> z@|NY(d62T=PUuUECP>BnO4jeYHKg)9a`?yI50L6%xueOL z0#XleF-mM-f@?NQn(pP4fosZ2{6$aTugm#{Uwp~94{2gPIUTq)1Zl>y`R*1g!L>Vh zr#5+Sg=-s}TL;aiAgy-DxzPO$kha*BW$2tAq!X4{8Ghss>C&F?-wyVI^bF>7PZyUU zee4aV=-F|&j)E%djdulHcf?fb1(O6^w{$2#Au|#(94Wf|VOKh2qAhhFeCbZ~$Z$Eqv9m#}hJ_&RX@5m>`RRWBj#rame!W?K8{0wvbh| zBG+1_2eKYc3J}XogRBjKjW60dAsd$$MgMgO+1!G+G;eB!Y-MTPcW(4UcB&`$Ble_2 zc3Z}`XRakc_RF4YKTBjo_W5qQtCZ&LYZqk!?{=Tij8vC!aKr_Ta8ZO)%| zF_ng#*AlGGmCZvgnv)ldv`#@T=aS9inK_WF`V&p&i+zxrU)kJY>>1<^O*^p8S{`!0 zXUh5h{Wj#$KHuvVJOFvJAbm8a2;^Csu1dTz4tbrcy_zlTA@7sZE?m#nLO%I}MdoTO zkni*!(M1^oh1P_QFHTI)3wWZTNz zJeCgyBMq-+^lgBG<6<@y7oI{Pr-?Uv*m$8(^VQNssc%pino2l+=z+pzwJPg^+o6aQ z&#{9E9#AC9D7~*-91>`ALGO-8NHB^#b*IM^5{^7t6MG;P67IQfC}6OLgz25-6@#-- zRQ37;7Bw~~>SG;i;(Y~*UNd1VOqGP9L(wWNk(Z#D)S64C9uJ|I+q2;{aWzmZugOjQ zvk?^Qp*3mENrK|S2hRq|euLsp>^d{y3s5}!UC#kxGZgQr<>=jX4NCAesBQhx1|_x+ z`dmzCfD-3;TM`b;L5X+v>J7z{P?9@yvntaeC~4Pu@uR2?lsv&oi?sgfFE^lcV(NzT zr`|#71{0I7CxoC3O+gF)FeQ{RDo!q75`{96n;8mTh(VdEqjyEpmZ8k7=_hY~9w@7p zSpC?{0LprkoVxByL)j~#k4i3xLfKxH79$>dD92A@clQG;l(Vs7w(w$yatWXFj|=re zIaG7wWKs!~n|W1}oInBP6*%nmK6*iU=kW1ZQGO_&wz6WLP7mel&&mJI+&C2Nkw^vl~{nLWN@!kuU8}LWPQL`*_ZNh6+9B4l-A1Lq&#S_cjPuM4Zn1`n*W4dxQ}#l|7MksMuk=C1NjQ|V?mJZCV%5(X9D!p?(s@*9G zl|~;g(!A4y$`pskEiBeTW%f9JMpFV*7JGlmsN^$LRt@AHE)|2y23Dc7Ivb%f$s5?W z*g$2QddJSIeo%Rb1C(J_gUZh0pN=)pL*+dZkIHw8LuHR0|p+AP#isp)OZm_D{grF-z6SP7_f zKJeR#kwB;v!%)n5NCql-X!9<`B|#+;O?YJ>wu@X;bI(*8R9biEU7lkwR2;s?8z$ik z6`!WHRz5F-iugwzu0k_VF^W5)`piS9xT7aWN$wU@RBuRqcmYC1rd~~I1qc;B8?eNV z+CYT|lN-;cJcJ5oxGHKj;-SKU`?rZ{vQWWrZd1mvC{*C-Uw&||0LqV@?Koa=1!$i7p8I-NcGyBZc z4rMbh&tI{1g0f+B?hkeuLs^IJv=_^G9BeR>PL=3|vV={RA9UQI>{_;);jINwW~^k# z<9b^t^G>x)d>|OgJi4>nH;W(2+_W(O9*>~RMea>Hm$pNh)7+=Mc=kh?W9~v#RSHn% z2zy`Hno=ketXwJexgW~-KUaz=^Mf+JUkf^uN1%*f33r2M2$Tt0C%EY%K2JFNyTG&^ zP$uTZ!14BRD09-#>UA20NIg;+ZU5WWn?$G&J)>LIEcT=>iHwi(x&o?ASJHny7h-{8Hhdz{d z2t1+o{2-J+;~h`+!xqZFo^h^ow}c98U&PPg>xP1jv|{t<7O0RGtM~rZGE{im5njlK z{e_PrtNP;{RNUFv-^=L)74ulFv^tug;=si$iZe&CA6o8uviBiW@)^;fP)UYL<;KsX zomjDd%Pw*$kZi z$*}5LRuWXD9s5!i`g{p3~dTtDhP<7wcJ=U>ZQ1yWI&8TM$m^T&ss6wFX{<|BwwGE-F`|h5; zBPmdIS1zgTu?z zXRu-jRYuIU3q#(FjwBtn^@MU_*>4ni4uP0sv1qENbI z;{qF=z}#Wpdj-Rie*9-6u3c=7#QUP z1swDgs<&uB0VbLAPWl@m|MRLRhtI@9{?zV|PDd&rziVKEMF;`%Z?Ku@?e&5DB9@dv zltYl8LGk=C;U>uUqpV{l=sM(EI%}V|o(J+%CLb0Lvw-}}uz#29cgQbhU%92Q4D##y z&^KDPLH^x@-RC@xLjL1a4Ey(aLH>$MWulaKApc-;ePd}N6cE|Ocw;aV3OMc-Y%!yU z0@<6!H45~gKzFLMO^*>2l(=5s;Tkg!&Dx$@O4B#07g<97x@g09Txu&HcFuqxiC_^AmJ z_FUaVbqwFn1yibS2{VI)*o=c_dG8?M)MhpR!bM2PWO~zNN(TwKkJrb{GeSb%?wmb@ zQAoJ>`UUTHTwV^x(1!14At6IBC^|?25>5=0#=W~BAtF3FS{vUFdcSeDXf}rghXr6O z<%sVa=ltw-tsp_BL*yyvK1g6FRbM|70Y%<1+817Tf+DBB46i7dKoL{vb4}k$pz!2` zh%G%E6wV1(@aC_F!iFo1D%FReQ12aUK41fd4)-4xe-sOaIO+?01tg*1vd3o^ibPmUJvrW+@Nqx^Z?|y;cfph-vRkv=PZMOtB}u{i*zr< z8uGqq5YbfeguKKb#=A9!Ax|Au?v)D^kY@w$(tsWXPg`cZHHxe5-K zs1&?|T!L{FKeVPHXZi?h#nw5<$uxLX>G~+-IDSX5WLg?>P^HA2`G6pMM8WXEzEsGz zBr_p)br`Z8+UPWX(;c!dX-K}gGX_~B*>@hi83kF_(5ZICl|vTpzz-4ciI7<~WhCIu zPRL|&0U4(Zq3ZQ}?YgLEbW z`j?J2L)xQ(9qyg__&M#3!l!);a4n~)kX&;Xq;Y?xl+Mxz*E|TX%-Qh>t`RU~De`uL z)R7`xa!GEGYM4cHK!hJsIZ%I}(5Qoy&0pI@s5v3!#@f~xz4MTw$zxMRTs@@N`c%It zX%zgZ&EyLC%m!9I-?a-ClK?B+70(Xea|X-SwhZinpTSawgG?@^E?69hW7yWS3oIIB zv^!i01Pgf&s>3M5tjKQ?hXq0+g zFPOIFW=%C*0@H^_Em%G*g6X17-#D&Gg6Vb+_wkZLV1`jFHz&*=zmITS(?F&1kJg3! z*8BO*|NeS3^lKpn#lN=h&p)!q?{$j5`QNt(UD~hJ7k{o-B(F`OrnFsMKlK0i^@>UV zR_mz#(Rlg2j`cVH>;K=`)j#cl$H#x@7C!!8We=-glOV-!Qsb7A=K~I^Uu)L>zAkk2 z>N?inNB%14|6Jc3zj}s$4G^sCY^}D~n(LDP*C)f5hBF#i>F?tE}P{z&Ie1E-U9?#wX%Qs-_Ohsip3;h29*=gu9+lXdQ} zF2rBy+_m5^S?8`4ldN+$ib>YFBl`te=ML+4{M5NK#U$(8sbZ3K?y&B}Po2A1tdB<4 zxx@YVQ|GQ5ldN-x+woK9?l>k{=gtI^taFF``KQj^eN3{>9q!McI(N9dpE`Hs^2j=O zSeN0a&K>rPpE`HAo)i2S zl6CGHFv&W1jhJMeJ3Q`w>fCL|BEWXrcVh^Yzg&Gyj>nzyJ9jGxMA8@0gC` z?&P{Im(TV7EOZ|{p6uN5{p{TRqRGx39p`ZF$hClTH;^Vfcf3E?xuf$F&fN-{?A%?X z$LAccwJixg+-k&K+HU;M~#m1Q z0%@{yNA44xyWKR|xznY|&RrQzcJ7>MvU6uklbyS(G}*aJrpeCT9-8dj{h-Ot9d8Fa zcXa)Nb4U9Z&K(^OaPAUlvU4|@COda&G}*bkM3bF6zMq}DW}58WeWS_Foia^!?sz-c zxw}S_ox6GD#j$fo*I77sbe(Kr=WY{CcJAV6vU5lK5zgIbn(W-sc?9RKf+jn6be)8A zN7rRIcZD?BxufF-&fP|u?A)c&WasV~O?K|cM}c#vMU$O7+Rt$AX#c{wqvHk6og__m z?i^^cb4TYnoIBc|aPH{%gL6mQ0q4$-COdb5G}*b^PLrKGI#1x-8Pg=^E{)D7ICpg1 zz`0AO$iY7aEbX|mV zr$bI1J9o6*aPH32Wap0D8#s4AX|i)i>jvk}ktRELziF~_M~)PnI}P&c*tt7QlbyR^ zG}*bM>p7geD>T`;)27MJ9i8uR?(WcJ=Z>xeaPDXw;oRxbWap071J2z(n(W-sc?0Lp zf+jn6X5`kfb5~E3ojW=&;M`54$<7^ZKb*U8n(W-saSG=yiTpZp?%ev*WaloBCOdbh zX|i)yOp~3v7Mkqb>5^l|&fO!L?A#rqNzR>`98GraENQZHN7o-XcXa)Ob4S+!ICu2? zaPF?tBB7 z-C^g>fVKzDT{(Gn?A+1wz`3L6g>x58lbt(n^6c2TE1}8GoheOr?&v&#bGNn4x!cv| z+|lFU+|mAob2pPFId_M;(q!lE4NZ3LZVJv_>Bu(cj$R)-cX6VEb9YO#&AFrPVdriU zZ7(}_O+DJ2JBK#s?tPncN6*L3-K7a_&fOVu?Z~+c=}42EJ35cx-1)RQcZqGz9bMnp zxeK7z!_M7;*=^3<0&?xhxf7d8lbySRG}*bM^@Ve{q|LbtZgcKj+MGK&AK~25=Yexq z+veQ;Y;*4DdEnfI3eH`Ar#9#AIk|S^+zqAYW#=xM&ObPJ32n}upWxgrrRx_vcXhPC z*}1zR)#lv2Yjf`CIA`Z>1f4H%?&x@8=kDDy!MU@Z-{#!W_Q1KL^Bc|`oo{gN=sE)D z?oyj`cfQTJOKo%RUbQ)Q7X{}|jJAiJyW#EHoI5&?;M}DN&fRI+k8tkxwmEl=ZO+|O z!MPhZUU2RTX}j3DdqVpc&K;en?A&#r>mr=H3xadEL%GelYZjclB04_d+~u}8ceI`C z+_}pL&fOMz{c!GX3C>**trwg-I&R?H-4>j?C|Y-R?q+QeoV&x}f^)ZkCOdcc+~M54 z6QSb-&Rw10-0f&DICmTS2+rL_I=|StTS@y1&Rv1v+zqF7W#?`u9mnk4&7tc!J9jN~ z+^}=ElRiH?cf-vE=dPBn4{+|j3eMe0F~Pa3q4S8HyOXpX?A!&>=T9N$u5y&%+(~p6 zoI92Ef^!$;*5=&N^RROlO&`b3T{G=(cJ2ZMlN5Q$vEf<`-dp88N3A!_M6(CBeDdQY$!j`*Z~7u0MSpVdw7dXu-J~K>M4WyRRvNbLT+UO?K`)5(Ve( zn5W>}k;?(+F5XaZ?$qh{Wamz;r{LU8y(~C)z3Dt>=Weiw;M}d8AvkwEXuH|Dv#0&V z&Ye5GE_UuN77NbZNLnX$?lPhU=T3sIkL=uCrt1VdcZur+=dOsZ@9f;oJRvxDikk)J zu9S{XcJAzk3C`W9U4nBLH9&CgTIjmP&fQ)I!MW4vFF1FWw13&T%NZ&-clI>dxjQ>Z zaPB(G3eMdrQ^C3G_EvE2ban{NoxY9W+|_IpoV!4J9qinB(s9quU6j7y-0h_8WasX( zq~P2wpzUPm&V<&Nojczm!MVFkualj-Pf>z%*Pr$uJ9l9Z;M@%oq5ZW?!xK(VCSxawv(N^+fN1O&d649?#5{d&RzW+!MU?F5S+WBd4hB2PuC%K z?rvPmgLC(Dtl->zBVUc3yMyG@v2&+BJrB;^6Y}lYxl^_joV%4uf^%oHQgH4nyang3 z(IpSg-LEToaPGdg&x3QPNFEzIcb8Q2;M}Ea=fSz_R+k6oPU@-P+{KjVv2$nKZjRvG z-PojI*1J9oX41?SG1JUe#o;?f1@?g_nKcJ2z@1m|v91)RGN z9ef1mZUDJ>?A&!EH?JQ#cW24#W9RPhM8Ub6e_wF!hE@yC-G|G9a~IYmICr7$f^&C( zoHusv#L1Oo=Wd##;M}Q*2+p0?UBS6~Eg?8}X)S_tw=hd^?k0T_oICOq;oJ@BAvkw~ z%>?I8I$v<^WFHF7-RiM|b0^(RaPFKJ3eMe)CxUbL`KRFAg^-WO&Yk^!!MSU25}dn9 z;(~Lxa<<^y?QVs07vJH%;M@(Nk7ws@bGhK$CHe@?ooJ}w+%>2Q&fVxqf^*lko#5QP z?JGEUs^r_TbN6w+;N0D`5}dote8IWPJ|{SLUn&LXE@X({+;tcX_7Z++|e@&fUFnZO$D%j-9)8 z1KONBvo`0BJU({rE?yIyyRprJb9ZT#;M`3je~z8IpOJ!dm#38n=T4b?Id<+sT?OYZ zyIgSY_Vy8+yU~GybLXEUICs|X1n2H_fZ*IMkQbag2PMI|Th>W%?pD+b&Ye*{oV)$s zZwStvuC(CXiMR;P-Ek|yx$Ct>aPCxE1m|w-1Hri?zZ}k8_8h^v%lC(Kx2M!WaPBhf z;oM1o@)n%Cb&~|=E?EW6-LaEuaPB%~zY?4~(MrL&(=8cViwOfpfPewilecF*#k~+?`r{3(no5{BLmXEV`G$xw|A0 z3Fl5X?gX5>kqeH(xzn_J3FmJ8%H?qGhRAutxeMsD5YAn})9-NZY6@iF+_|_qz`2W_ zb{x*##~tM5k#lG68wuyGKHCq@-7{|`ICm*tz2Mv>4!#EG&Um#3oV!7(1K`{hk+aIq zU4t9FPtM)CQRQ&%l2Wwc+;yxmgL7B-p*@_ti}Zbz9yxa@cP7HQn?<+-Wn^&d-=kE2SAUJmuG(W((>#lMT&Rs@EHJrQ8XQkoX zrQ9xsa~I|J9M0WM+0k(BF4S~^bGO=mF`T=I!%yJc#aAW5x%)6U0?ysFn_+P7Y6z@@&1_N;gLCJmVhrc5p!Zfdcauw$;N11K zj%4RaPH>2>%qAbzdQ%do$T*BaPGp|yR&l_a$`{tJ9mffil(!3x9Q;S zvFzO4-@LO1&YkP=O>pk)k1l2BZq@6~PH^rPb$`Up-Pyp&3*g*oXu!FPIFo;Xox6se z4|>44lN}wz&Rwvx-6=SCy{1lvbJz8Ke|GNl&RvOR=WcU{wL93ktMio6W9Ke(OW;#> z?xGvtl6M!F&{KQUEOzdGsa$Sh=g!jiyb3#a3dtu!*tyfXaM+NYyI8mQNOtZ94|-X~ z&fPi1xti?UX}uVAhMl|6sO>rI+=V-uin4PzVqv@Y?A+;PzWKq<-HrRNf3b6SrhBp> zJ9k|TN5`^rSN7=fEq3mPuGiSX&YfC*RzG&`MvA8tvU9ie3L))`+*HkWP#m-%Fse3*)6E+>M>GXD&H+)lDDi`!90tE{%w9X6NpHc836V?v9S~JiyM~^XpHF*tuJ9+gO>M zJDG{`GVI)K8l!lcoxAb+&%@ZcQ#*Lkgq^#b*WC`XbGKOEcp*D?Qc_Rl*}3ccNb?0d zcO6Y!jo7)nXzZ|sojdwXwHNH%9qV>>5j%IIi<^zvx$Dq=z9Tz#UfF}suyfZr{F4Ja zcb->f_^@-Apw(!|&fURbYpvP2ixV&3NX}i)&oA!JX6LT6O~xa3?&j8)S+H}rxX?_7 zoxAKk9ewi1xqG~Q&2@I}TsjW(XXmbJ4*7EA+(iVWbtdO-_Sdv8Q`x!Gm%M1p&fTFe zTFcnE>pe3$l$|@@=FE6@?slmxZO6`CsnjZ(YUN2U-iWYsH)i6_G3?wqY`+oC&Rvfw zZQWYos$1+FLv(SieF78=dS+sUXgF?+=UOhn8VJU$nIJncJ3VJ>Xfo`7iB$iC^>hB zJ|3_d$H$+_{EqwPEMZCU?Cq zJ9nyv=h(T6&Kmx`gq*uB6;&6x0O->v^l|jZWm;?a5azxJAz0 zy}GHZ4v}+rJ@LYf;pE)8UHW}w2|IW56BehCb9c8gTze`zck+foy6oJ|d)-rpox45( zQ*N?zw{()|I(F{-H+&h#&Yh;C!BBGUeB-s74cWO<6wj1r=Wa_@?oo2?Odnefk0j?V zbg$daPUPJEOy6Ev#Litet%$|s+}%FB&Ttwzcg3R=pF5CqH?Ao9s5v=z67O4nI+Al| z>3&YelbpLj&NU{XAW<6JxoV%$hw=Bnyb9Xp&gn=tLcX3m$SgMnAH{Q%qVjDSk zUgs0?-jQ=>{m@l%B{_H9x<<^FBj>Ja%=mjV$hn);^X2EG7LjxJ>Os0x5IJ}9jo_md_u$oOgXQGh4L|YKMxC5HrHYmN)!^L7cJ2e` z=IzH=I5+ocb=bLa6`cv^CT!V5I5+A)y1}_w8SMqN^ov=cdCYSQyXgv z=SFSw0XR3W+oi*~(X^0EVdyKoxLO-1Z%I5%-Ev*6t5 zpFaiXW^KS1I5$%g4B*_z#z+XxP0t88Hw~{c1?Ohg12{JuZrKUWO`g2q+@#GHoExu? zf^)MtLU3*ZwhPWpMUvp$xcz{0v!~ld!MVBqQgCjv7YfeJ_LFdKvc_J4bEDs16VA;^ zqr-4+60|Mh+(@}+v2$}%B((+3&3DTlaBeE1!v*JtL{2z2cLu__Y0Zv-bF+2sC&9US zF&NH`gz0NIH!SWw>g}f z7Ss7~ZfXO^!MVBQb_UMP$7PCeZXOO<4Cm&7n-82D{g+SR+=LwqgmdE-^bpR?z!5HR zZcdN73+KjHBo@w%uS+nTn=W!a;oPX-cmd}oKg}A>jcxyhaBjqsP2t>_S~AYGL&W*nBOE@?BUGBlT5nt{K=jO>2c{n$gCed(i z?01X9xv`(U8P3go`aNWJZoa>$fO9iO{Rf;IwXpGUZkmdF!nrx?BLuySrP!}=H?H1I5*iR zmchBP^O*tXW}eSEI5+j~ec;@5U10_1rhaDzoSQXK;&5&(%q-yCEQ@P`bMs?_HJlqw zT4#1{-dweVa}(Pv3+JXvOb*VCag`UG8?jkG;M_b}-xbbH=B8*kH^tk>!MWKX9R%m* z#FJZaZU#J^4(Dch0 zoEyobhvD2v-MJ6vCTizJI5%S*&%n7k&`S@_O{l&koSUJ&w!pbrQQHLP=Ie}KI_%tN zMry;k8NXE(&Q1JaQ8+iBT^r%t#OZm%xf#+)1kR14*4(CQK_y(Mtx!otjxw$wi56(@&rmt{rwD(2gg8=a&(aBe&j?cm%rz54*?W%34$jTdg=^v5bpQPh&P|_7OW@penDhzG&E`I3aBfE4yAS8)b5$ao z8(l?vI5#J|`M|mP^m09%n~mf;v2(L^SpuA!dsA1!xhcxCg>z$&yBN+*f#_;DH;ckA z!MS;I=^C6Hd0ACBH*c;f!@1dc!wk;NYx@OoZWI&!PvS>J*o3f1KaBiAbm&3Wa%+P6h`9>q#!_)GoSU)T4#2rt zINJ=)&3XlSI5$(~4ux~`yqgo8n;$*O;oL}_NQQH>`(_TD8^^FmaBhBQ_oLrnJ~p8F z#wj>AQ%p4B+!Xcx3g;%L@g|&`S+B>zxe;%$hjVi@OB&A2YDHx@HzS;);oL-gyaDHC z^~3AO`wY_oEus5 zKsYyjX55Bzv-ZOrI5*NZ7vbEbUfcrb<}H1n%FfN{Tsb&5G7gjB+yw6J2IpqT!;Nrm zHog#rbF<&=Gn^YOEk`&vY47L4xydVZfODfczX8roP0e{YH+ge(;oL;DKMd#Qv1kgM zn4(H~KMFX6hsD^`ZZVK)F;N0Z>Du#2Tx-cEi z&7*@;;oKyDQ-E{h?A{s9P3P|ZaBeiemcqF?>^mCHO=craa&G*-b%As9N%K0Kn++D9 z;oK-(EP!*fOn)An8zuWgaBgNldI9Gqb!rWq8|wh_ZpgX0Rs0Rk%@9i)I5)kHtblXV z@nr`%H|dF1aBk*rD1mdc;`(nmHz`$$aBi*@4TW=a@K`mRo9J(&;M_oSSEI>2Pk|f9(S2#@}x;oEyc}UT|*ata=CMrub70oSO@8zrnewZ9fgp&6Upm z;oRJG-vH;v)nhiCn~5$7aBk`x=fkYL7 zQOXTCH)#ip;oRJ<{Rrpgx7K$!H^WRe!nsM#N`Z4T|G`!`Hz$70g>&<&s|1{zYolY} z+$=Si1LtO`s|=hQ@jK+(kaHueIUCN+=^^ECZc4ZBfOF%iDZ|dq#&#EE;oNK)R}SZ< z#61bl&7Jda;oR(6nhfX0F+~*4jq-?KI5+R7DZ{y0<(vrT=Dhm~I5)HO4B_0o88I5p z%?7LAaBdp*cY|~Dwrne$o7_DnaBgmmsDN`5sPPNVO~r*ZaBfPRtKi(Iij9JE^Yn=( zoEvu~b2vA?eYe565$|3E=jQQqO*l8jS`Bb+o~xgRb8~$6J2*FUeeS}!nWuLV&W&$ym-_P&P~ZSbvQS=E=jP>;WH>i<>lESKoa<~4=Vn_>B%GU+X|v$moEa7f=cea|Iyg6mc@A)HQr|9s zb5m9~AI{D6`yJujbZXfQ=VpTKeKrtU{3oE!7g zC2($%Ow8fj>>NKC&dse&H{slD}|)eeJmlQm)ooEwAmRya2o*4DtenbSi8&P_;BiY_}h5!%b(+=T0D z!nx5oD5=ZNP0;h5aBfT&8^gKLA4x6-IX4}z_JMOFAF>k8jX|gsoSS>9$Kl+_d&$DN zk=jR|4LLV0u^r&tXel3rbE7@j9nQ`Al*4dt;_l6db92G-E}WZ$5*au*T92#X+$isx z1LtPoFLGSSxp@{w9t=4*i5_R*+=!kH(`DzT{>x%GH(De1!MPFd{t(X1YBXc-6BYMc|vU3x>w-C(y+=K>i zfpc?8VJDoM_9=S>=O(X*;M{m;2+qwSS2#CbwVUDGJdt_{=jMBZ1Du=cJy+q}bSY_p zb2D>h7dST~Jzv1NQP=+n=jP?fZ*Xpwj#7kk6L97NoEwS7(Qs})JFSItlVLI(&P{nn zA2>HrHMG9u+&EiV!?{UG(1CMfwm}8XP5QF0aBk$LuZMG!_DPiQaBlkbgmd$>urnQ(xb;zWE^wu&(4k7g=yyO+;q*FdxM>ue!aWgVdrMv zI7tn5ZZg(qFJ$Lt=#)Xz*}1uUeO5C&H#xT_xv+Edd4>VGL0L-2US^XQ^y0YUxeF=m z+(hR*o59Y_wxEd1?A&baoi&@C8>@&LkJ-5y&|hi?J2%6+?z+OxjmEW;#q8X8={kI1 z=O(J%h3D+tJi2A2$IgvW!E`ZpZX$-Addbd>dEkDUtKO*0OQrMn09H=cf46I5Rqq4t{l-d+P{0 zH(P>o2eNZBDs#3eJ2$%r4j|X*$j`ze)gI*BXr#=kyv)u`u+q$L?A)|_De;P&8|942 z4Ts3NSzi<25YNudDl^$wc5c>g8~vP}o1URnU)Z_nR(ES1IXBjMqqM)#*W+X7j0083 zx!D!we|82rH`=Vngrk%>RaxiNipJ9`m1HzU`r{nkv*O;+a4!F$QM*)!mU#Zz)_c4!Vg z^@5z6DbeF>+LLoLe_6N5!^ydEKC<2WEIBv*zj~Ut)0NxSx^MFVBXVvM#_gM2OwP>? zog%R~a&C-#E$*;$vv}(Qzis5)7@J<3rAE$8XwE>_dU9?uddWoOl5-<}PNah@IX6po zcpma1=jNUN57QcQZj2{8UR_Vl%?JOXMeWJCS$=z`$RKiV6mC~}oh0Wb`)T(rdF0&0 z?-bwto}3%6Z$=yR$ho;Px2on5IXC_Eo*9x8Q`S#su3a!WH>%!8tkcQ4nLcq#WCl4m zL#;AwO~|=Pdsy`B4mmd|6%%A`=_;;iJ!Cez9XU5q^+sW*$+o!mrD&Zf1E3FQyS zxhXAmSB)U&=6m*WS8{dqnx4x(+dTOoH02!&3zUrP9^8&)QSlY&XaTVEHY@36*)HrS5_SL zAm=7-T71z^a&AtWRs0|aDSz(inI^5|+?@ARS#+43n@Ou(tqzfM(_6Vh>@ztxF>{s; z|3J=-RPut&66D+zZrvmnLC#G}mfsjZa&APVuh+?tbJN>*)a@j4ZUQYAxz>_%vpZ5} z=6!N*)=xjBqe#xpmXtv@^U1k+c{!}!iJY7I<>gVg$hkT7QPpe=IXAmzi*`vP=jPDm z>fMvbxfxQj?d3soZj6j9y8R~SMqSQmHvOMXKS|3b{XXQ}bkcO#twqj_Tl+L`RdQ~2 z4m#|zl$@KGio>Sk$ho<1qcx?KoEux$%~t2hxmnjkZNDlxH|k$sl{t}flM`4ix}Kby zz9QGZiI8*SmQ~cONdHbN>20yTjGP-i* zH~j~$A9RhJ8;P*-nz=(PrNZU+Bqt-MG7?j9hc z_sNT#o5zZ(oAt=K8I&g$Hkq88%=A8)*U7n=T<&%&pPZYpq~hvAa&BBYCJ%`r=Vs6T zgm>4;xhX4hPv}9;O+&?Gk0^3((tjUu&L-!kW^HlPVRCL}1-_mVMLtcbx5=P`>iM;bn;Y)9eeEp{J4#2@U*5S7cmQk#VhU5BT?;hRtp3)3@yzh4HV~XYIeZ z|G)bkp))2bGOXl$@0~x_z(7Q# zqe$!j=g*(*KAS7NB^*N{BC1z~_y3$dXKx7aD+)tIWHD$bnPB~iE0TDM1Q%VM+X zM|3F%d8gL3D?N&zvHd^$kFQLB{-ZlP;Q_*5{9xe-Y}*Wa;D59$soX{yiPER}r$7Jt zy0-hD?))G0mT18)l2{O{eN!#b3I8r`{$Pbp821DTrF;UDgT(q)qnnaJe3#r?>?d!+iyB^a2yB@TU|LMG$ z)Ap6}AM5z|^Un%;DedU(-~9fcxAXjdi8nodou4<;y34&qrT{@j-ROWxG zLfbE|w@OUt^Jx7%@##aRUXovsC$_BGSpNDo{&@QD-~HZ^?&ClFm_Ogt;O)QK7JLLg z;BS53`S%{ri~b?^-=FV0*Zx_cTYuj8w`W@0&EKW|Ed9UzIHR_km*@Z6_y4(ddD|Po zyx0HY&!V>b))xN7gXk{&V}_<;!Cyb_Kl|SQy6fcff5_wNzivGo{&zj-;Qgns8*cxP ztVds*lI_|F*A>3_^PfNS?{~e|wylq(@PuuD|LgC&*8Yq8|GVE2uEQNgCboTI-OGQy z1%JLvba?yMk86AJB7J54`g;AU?P)$*{`KP&+a4!*;jcgM|E+uf^>wE&Hs#N8^~cTs zGyneMO0rmZjsLU#d~#XI6ZS2mNuKa*@_5)2UfzLb(uv2GOi9KP(Y?`}lr!63-i#_2K-VXAFKP{$7p72}p zlGqa-z}vaabm3cahS(Dhc|wys;m*7r{$*eFPSGS!n11gXo^U+5QS1q)ETKuBu*PGW z+ub>yVA8r@g#`GuxoY*PR^Uak5|A5G-v(UUEGFGo}7_GLw02krG?;{1Ba6ONxo zbK<2oP9j$hzDw~nUz^LL`;fw3nXL>?1+!d|@2Dz=$&r8LPC_UGe=JYgI1om!RS z-;SL@Q|Wt{6n`G_gsc5&_6zSNBSllTB(KGmCV9deCekENc%%zW@`M+3qe-6dyZJP` z?$X_Jm?n9`2Lfo4C;W-uZyyn(olg!edBO!rG+XRFJ!!q!6Mh;*vq`4fAd)6|!hQxc z$rJ82mF8Qsxsv>N@`O#U(X5YI+fRjNt?JvY(`k|?EKmL%d%|+xX;x+%&!gjk*! zX_6;=oS%n0VOQEO>(8F>s97{OetG$o+&K1xr%#|so^W{s&DGa7-r(0mo^U>IFL}bnyk6u9yN;zvp77o* zn&b(m?Wake@MUV;rLvd z+ zKeH!n&XYXhq?t6y6MoV}bKbjK8)(0?CmcJJrnY!wKRT}26As!$bMW5qp8Wje3Gbux zl0D)5uW7b3KR%%+Ilf<-Mh>I>&7SbZgESxJ@2V`NNuF?h8cp(qAJfOPC#+pbGu5}? zcR5Y+g!j?wCQrERGhLV16LyQENuF>OZ4Z0GRPnct!`$rCmlPm?@h@r^Xe6CN5*lRV+AjWpH8x3$vsjXhzv6q?;1*(AIr@0UDb zJvv{=6ZUyiLz6t=ZZR|qs&ziUph=$a=?I$S2~SX_xm{&p-y)ji3Fp%B!=CU6x-PIM zJnSw_@`U@+=OItn_&YzIJmF<4$^Ru!*y9vU@`N8frFrY&l3QnJk|+F_o`*f*q4YY~ z6COav8+*br_h^zQe4D=hu_vrXubVyL;Po_ndQ7}W>%^Y$^yf6m6E?7+NuKa*+Ry9> zckD}(JmFqWG}l?}QtL#MJYlH?G|3ZQPRApA!dWIXyJi0Lq2qx);SMipme(Y^E7BxS zIL?t~?6D~2?KH^~Hr+yVh5Qr|I_}vMzCrtuJ>iRV{bNtqCz4!X@`NSm`aquW$5uMN z*b|;$L38{5+E4m4$rC}G`y1ua|JSC83R?m??Xn(LLeCiEN@`P{F_OK_M`-vub!t%6k>%yL}K3xyV z6JA+=nx;gP-xYfO>!A7wVt+vJ>jjDG|3ZgpF^{UWt72r@`A||-YrIxJmHSd zXs*tjnRye*GDjy+*9`n>E3 zN740%JmE2gbe&*NcqnZzd%{a5&?HZ|10Bcg3Gb)vdQ}$h;y~;BDkM(Ro?bV5!h@s) zPdMR|;0YVj=OIt{z{Mr-ggaK!`SzmduB3;R;0Z5nFL=UQbllfJxWC_l&iDG@-SOpg zK9VQA;4`fYd&0X%!4qC_ZU#JI$3!|#>*|JVUQ4&LCp>SS;0br7An zaP(n%{m-uLH|wVaPuM4e_Ah(FlAYlRS3Ef^c*2f4@Py05=<5M_!hKVc1W$NYKfx28 zMPDx;&sr7jDI<8owjS_=zXeIc6YhJ9){Q*jf#DP33IE(c`~BgyQR_@{;R!pPr1QAC z&VH9hIXvO;@AUb}6YdvH*H89@JHHh?VJlkCs>pk5lIi2CWCz<{KPh;^rmcb}Jmw)h z;mSO^zEmho@8m?+zw+33tvg%=Pk0&~AM6R6WWf`bzi{IZ20L2JmIn{^!4qIo#muiv@YZcpLV7Fd3#KN z=kIm!gtzC?^WAFf+QR#dJmEYSZ^09mp>?|{8hiKwef_(!*nNgQZQu116X!H-5j^2; zm*5Gf&QOLYT&qI+pFCmH;*0Qv2Op>XdNtTQb}Ox8!QGBUF9P5Rrw^rdzp@}wRh+J4 zdy|bEMCkGt8)WN(emReBZgFNA;D0*Gw34fZ<1)lKKVmkg}-t3Ky&4wquf2uq@;Y@S79!8HpGD>3?JYmx` zdVS;x%O<{rCmi^R)+ti5>k@M4jKeR?G76yMf;{27s`U6UF`M}t=zJtkxbKXg@Px;o zqy0vnaO&kWc*0YfXgz|Ok7vxKb=(%X$-BlLo^U5;I!?(G-fv?FPuO_XN_fIuv`gU$ zA2FN{Px!VU?XL|*Kfev8bs@V8l}|UVlZGd3e&{+pVTt$y@PxaKq2pM8<`<>AwC>~yzdGF=p78xUv_G|N z$>3fjNq3H$HxfhVkAs0>ed--ki)g!l9u4^MdHx=MJ$ z3eQyG2}|sz+m&h_Snr_EN1pJ?tMqk^JmImX!{G^E*hbq!o^Y|J8$985b!XuT-zyvq zPk6WU9eBb^p3&pQcBE-e^n)kd{PF}m;kknc!V@ku@q#COMr%GiVVg=Lc*4)D*TNH4 zYL@~}_`~Gk@Pxmt?gmddXT=P7!jU&L;0fQUe4NLg@YYJf6FzojRUUi7Bc9Ryhj{QW829v5c6IeGy+;if|ReB=rHEO%LAV9t;tsKgk_Y;`~6&V;hv zo^V{uQFy{dKRUn@j!Pt8_@APpwqdvU3`~{xyz?2$z!VMd9 z;0fD0{(vWZE=3cbu!7nJc)}&CUEv8!pXv`!So3N>c*6U2r@<2rZGRb_@J8nhc*3P| z1KAU9_>oDD@Z25d4wu`*6W$}!!k+MwZ~aQ(35!{(!4uY7DhW@x|KS1fge6_w;R)}G zcn(jvgIOs&;cDqZc*35V^WX^&eOL!ic>3NC@PzwVNy8H^(eZ~T9Jitvo^X8SFL=Ur zhn4c!6Lz>;1W&ksSSvi?$06hpAKtmdTXQ2k;n+2H>bEn`F!+n3^taXUgnjbr z;R%O04TmS3vR?t7u(bVPc*0$6kHZr_`CbQ}@UQ~_`?2< z@PyM}U4kdk7_sqloiFCq8$UW2Z-MHM{ZNxgT% z6IKgSfhXMa#5{Py9h~&x39sF20Z&*%Vj?`@MNKo|2|Hiy3{TiTE(D%%p=AX;;oxWe z;0e#9??Vi9a&i_#oq#7CDND~YG~~&-dEMa&&z$-Zo^X2qZt#Ri?5-aLaRyhBO}o^Zur z@`cG0PU{c~Pk20aAoNXMI?0*R?bV=VQKn$G%ak;;X%7I;0fE< zsKXQP{@xXyu*>mac)~}Qxxo`I?EMCw@cg~$@Ps$((c`3-Pp?`Q4NrK=5FdELx7Ebq z317dp44&|=cu9D|!9#Y!6IL}Sh9}%*-Y$5;nYTK@6E3}O2~T*L)lYcB+tU}ZC#=eOHtGORSYA<e;hulB+d4x4fvo^a(rMR>v?JqE)Q_K7|N zPdHQj3_RiZ!&~7A&mAZVPk2rL7I?y2M)<-LE}gRuo^aZoGI+vs3{N=s z$u#zaHD2}1%+uA4-o9?)KzPFX)l=XJSB`9iCu}Ab4o^5BIGH`+gcj;#=|mlW@W9vz zp75ap@`m+O%!eJbC+zl;Tw(Hrm1oapPguF4#g9GV+_Hin z@Pzk$F@z^<5bF(3ST?aUJmF5^weW-&XXwKd-coXsJ>k>m)5fwV+~w0W19-y0KZD>2 zE6?h}J*KC6)JW#QQJz<$w-KVoBtXW+x4NrL9=SA>@Exm2w3D28z3ZAg`4u5#U z+smui6OK!~ejA?f#6uh42?um&fG6xXRTrM{()3z*!WMhFuqPbX7ywT=tvcy9d%||f zLF5OMC#yz+=7mk<(Pk4jZHui+4?)2UWPuN1yfIZ=+D(`{p2@fc)zrmjH z&xYT#;R&x)3t~@LZS1-E>p0JnaB=&^k$6vp|o^b4-QFiPJAMEJxm_6Z7bp|Qy33pol;~aa!W_3TuvnOnI zb@o#BgtMZ`PqQcdC`5`JVTaw$opx+uPq=dK%L4Xi{WFUPPaTp~NQnmyq|?+4FfPk6NMpjP&T?ZZzFXHU4h z;mRlM3D3KH>i~PgJ!RVauqV8s(O-={VFS6+wd@HeCvW#>Pk8Bu!fEUYpIxibl|A9W zo-Z%6C#(>)>J@v!tDbCJ%AWAcw3JHrgu^DSeM_FO^Y5hdd)X7Vv(>xJo^XVhLnV8{ z?=xQ=Vo!KS?C#g>2@i^BxyzogVh`;G_Jre?kGsU4@cIB*6ZV8nC+r^0p0J0CUkiJ} z{g<6R%bxJ80Edz62|x3lxQjjEh_ZL)>_A!?;li&Wly-TL+_L937aXosjw$3eLuDjd%{+ScI{$M zcvEXh1$)91#rA2iCmj2u<}`c4{p(advM0Pbt=gGA;Tn&}-`Nw6N;|WZJ>gWX9BKB1 zyQr_|%${&!j_wWighwQG{mPzjp>_UD_JrSc+pv~BVK=FXRqP2nZD?xGp0J)#zt!vs zCx7>|Vo!KiY_b_V;kE0k;R#!duZJgGW&RbO@Uw{f>?mhPf zd%~SHQzF?De&avbf<57-(xT7U6aKno(+Kv2T@L3-u_yekBct)cb=&2X1BJP_UDEF z^~3+>z5n&cmD?3zBmOatt3L}i$HUgsc9qvuuhp)&X_lv(<0^W~$<+(*JNXE|_C0Hj z>omT>+Qk}o7}(i*xH^i6n6GrSht>2EY9h8a!VRn1rc2v&Zky&~|M}y`(&L32R<%u+w&~n9jclz~+IonHn9O(d za-j{e^|rO)XZUke{yDCMXZ^4L8$E$}O2fG)FkqPT9PSB-_dN6wJ%J1hIrIeXj$VhJ zz#7x#=n16yM4~4U_%;qbfu-kj&=aUEtl^$OzDoC<=n42{-RGV_rp8Y@^aQpKc0*5~ zS@k*h1R6zC&!H#Kcx60#0&%Z|ov}B@POXexF=xTWpQWp1RC9v&=auwHI91%C!}}0M^E5U zb6@TWBx$bJKu=&=zenf^gwH0@)89b5CHoe4j-01isCAj-J3$ z@2=bv_%P=36!Zix&CWqjAhg#T?g`9L8m@+(K!wo{^aQHHjkzcANvX#h^aMh-_eM|P z+ru361a_^Ti=M#ml>z7pyrVqRfYjD(>)}o437F|j;GV!}r5IW637itSKL$O4aoq=S zPatZLlmqt!!bf$8M^7O8%n$Af+#YKC7(D^4w-dQ1U?<*g1$qL8d#9r(5LZyeJ%Jt~ zfeX1O(7#hsDS84f16t4%2(uI6p1>^8LO1RSOqjS#f_nnJ6+8VzPvDos5$*{bR;^gZ zJ%QH#gJZZSklDZ8O7sLmq?OPUsPKzIPawB*33>u9Hea|WaK8PBeDnlv+&Yb(K(XXw z^aQMuG|&@RvMnDyfwwkk=n3q8_zOJ&ja9bj39QrTg`U8LC@u5^G_}pRCt$BqS$%m=j6Y!Rfsz*=2<=sm31R5K~xhHT?Gwud@ z0&~5y(G&2SagTcfDShs3MNhz4%Xubx0?m(Bq9<@-Wh8n6iDP}aC(uQsV^8!17C*SmJpuV1y7uS^Bp6UfKum3D zV8<=!3G7^=$UT9_L%tcKC*bH;%sqkIa)tfS6S$+0!99TiT^6oEPhg{kDtZFiVjsCD zpey60g`U9k{L$PKi0&xwgPy?E-wV(act3nBdIDAvV(1CPoi;&F;8d(QdIC3}KG(5m z?&B^)e!6A!%i5FY9ncddWW}*w&e%Cvf-hH60s^f||k7 ztI-oEl_^J0z_MF1dIE9t<+&$trT_J{=n2fJiQ=9>*KSLy(G&P#GM9S-trFCwuz&6+ zIl$r?dIHa!(*oQFSMJ0ye|6(G&QUSc#s% znJ{DY1h!qjiJn0C)dchev>TtJCtxD#jh?_4J4x;d)Qwgifu2Bh@Ko*zjFdmW9zB7h zsYlThF!Gk;p1@>> zJ%Q5ZM)U+u8T)fjAX9ya6ZZu2`WPP8+2pb5-M)Jp&=UyTUx=Q-)%7jh6L_FlHW@vE z70#WwCt$0vFA+U~Q(tw_6F74=9X)~jan0xnt=n33@*UUWuy}mQPqbCq|Y!i9{ZZ7+{Ctx@6c{6$fnQ>jYC$PRt$K&V; z?C*CKJ%O3V)6f&J%Xr8=0l#4r?a&j5dFqRvfZecX=m{KgT8f^)k3nYW2`t%PfS!QE z*vIGzsMtlICy=hyik^UZlN0v@CMmRTKu^GR&Ij}ap3PF`p1`JoQ}&@Jkhx|L=m|8Re1M+7`ufA@3H)%|j-J47x*qJE)ZeLZULAS@3p{#oPr!A^CPnlF zZoJaroV8F~W0QYN4$km&2qJ%L3=sb9G#uvWw(7(Ic2+fUIGsImw^PvEoX zPxJ(0dd8zCP^!_FdjjvIZKt9quuOItdII}fKXXq&Qbw|bdjf`?H=X33z`EXtYS0s? zqt3-C?Z69%%r2rQa6--+Jplu)h1?U+=rTnFJ%PtREYTAP`OzIc0sqaj&=bgTp3Xf1 z#ffj#(G%EUG6_9_Ysa3UC$L!d6?y_z2MW*=xKug|JprrQUg!yYtnI)(fddon&ElRw zdF$c2K={3r=m~6mqlcbA{Y)e73HWts zSb(0uHS*xEeQO%|@}35I0x1$hxhIe-{_!Dt0xQRlMo*w{=N+9Jr)4i~cpQzMK-3s_ z^aQN?-{hXar%oc}+!I*dDO3+Vfrp*Gq9+jiSb=*2=X453q9@QSZOA==)kC*LaZey` zNYEnm1Re)>M^E6;$j#^pd`$2}PvBD39P|Xtmt8|oV0^b}=m~uBlHs1fV&x7_=m|`` zxeGmk)z|u=CvfJ-M)U+?I_=?}K+(u6;^+x{xFCg|z@6|3+!J^wvhW#t0>5-#qbK0{ zX&?6l`t+mk(;f_PDt%$4jGjQI{xS3fOf22e6Y$G-Ku_RJi9C7&U&}Y4Cvd|nnR^22 z+Lm(Y30xnPhn~PHEiLo}j{DW4C*bLL06l?qMdQ#DDC<*#p1>~Z`EXC*`_4}23C!=^ z3q1inJ2UhIG%{wQC-BhyGdIHsrJ<$_r>F@+Sf&0=e=n0hU+KHZk zsa*&31Zu|{p(k+T>}u`_%Yg6VQ^h{=z+h zyX{JJxF>LZn6(Y}1YU{1>Bc<)#a>Tb&=WZ8<%FIv!1J%L+&9-t@i{6RB% z0?84z=m{9E9?d<0S)-zo&=W{M6M&w;(KqD$-LAjyPXDfI(wkc|a=J5m0!cDY(G$4q zya_#lmG^?s6IiluFM0xNA6!9CAgf3gJ%Q96Z^ z>to41fz}Z|+tCyFZfC_k0r9RXtI-p<=90rbff(6QkGUr>M!Me;^aQ+G?r={ab!fj| z=n0(79E+a7)odRFQiECGr!;p(pVDb{cvD`|?MjCs5MACwc4efjy(j z(GxHX4dk9coa&gL=n15skwi}*&(az_ftyVexF_J+Bc%#Gfkk6w&=Uwbn!`PTfjXzZ zpeL~KcnW#~VK&paC!io5dXswsS#rgh=n1%+r*Kc8huqly=n2%#&f=cHy!PWg(Gxgv z{{wmg)p9}T31o_{L{DIGnKpU?H{?HXPhihPzX0wDkY&0DJ%PFa@?wQd&Z31}}}gPwq=&H(fT%Eer`C!i*BFd97pZp=m|s@enU@S>ac9|1oZbub5EdN zLnaPAftpp?+!HWR?KcHIfyJX5(Gz&lu^K&rm+LO0C$Qp+K6(P#ql&mEa8X>sk9z`3 z2da}tp1StRr(25X2?RGC)46UZ7rYY=(@P4&~z6R>Njg7eGCMSN#rh zPoO|%js|)HA1c~$PoQ&e%K_*K*xsw=o`BDy7oWK&(0kg!I`jnWgW}N>s8Q<9J%P08 zj&Hdq;JdK~G?RNh5j!hnj4-C$M!5Iup{HbLAIC?66=>w9=n zw|mwt+!OE{ZT1p9frLf&+!KgU8~2fW0^_|EUZ5xNo!onsi=Ry;k%C*Wdl|A>16$3qiz(GzH%M#s^#-})|{rMM^H zEp~qi_XIkKFBe5mphTsI?uatooMzE z?g?zzX1bAk0`G#oBDp8vt3NRZJ%O9km!T(6S)s>00T=zLf#?Z*l_}w#z(RxC1oQ+- z9jQk^J%R0MXSgRYSz>D@_XJ7@*1kYbV9{=6^aNt&KSWQUWTgyx0<)v;q9-se^apwZ z-uXf33FM~da8E$7=y@&o1agj=PC!p!NoW}N1UfgycScWO_AVRr1Qs52;hw;!^%rJy zPvD481g&G*N5fI}bUm9Ldv4F6XWSDo>LF&uJps#a$F6cuz-@22GWP_2JO~}kJps*k zKccxOFtpfa8TSOV^DSDqCt%sb{U`SXb`|Icb5G!X<(uK$6R^8oAH+R@P1QQF+!GjH zsj-WD0y_s;-{hV^etc;-_XG}!)X8#BU~AevXX**~|1wmT;GRH=NA_m!2~dd1xFmApgWV47@t^#E+Pm|x8ux#1;3A16GE}0H z5KV?ci53l-l*&v}DG@@1GL<1ANhxIxAwxw%8^tC=Lc5ZZM251{Kvaf$-k;BR@9SL8 zIoJ99&U5~G&Uv2Wy7qowtF_j>?)!Ux?|U`e>-DBSfz=yz=TM(OVRM!{^$Ey*-Li@L z1YQo`Rz`gSAw8COQJ+9nA9o+>6A1HP`#bdsjI-IUMtuT0JxZ6rG6~+2|ODJ!NRFw=?p z1Xd)Jb)r6jm&fN`pgw`o-*&;{kM5)WJHAgspMX~L`C1A31QyNJuo)?PW%N0!cZSc2S=|h1L~I>JzyA@q#S%2^`nx zG>!TM3O5f~Lwy3nhW$mw^ zK7ncXR&}C20T;v3dDJH$`zZb%^$8e;dETWyfv_u1hpA7%N7Yr1`ULjPuDT*oy4~7b zSvr^c1l*$wv`UKXR9Y~};0ezW-2I>>ol`~(T`UDd9d~QR10@fqiji5e( zqEEAqP@ll4{y8etCvbXRyUx@naBbxWCF&CxcF`%3`UIpEeC|`9fTiBSv(zUrKyh&= z^a=Pqf9JCseF8hbKVEa1`UEcAY@R`V0;aZEO4KJXaqIRj=o47;(V#Y-`ULXc1bnAH z0gtEnzD?FbsqCh4E%gaRTrb&-pVOXvbGT%HK7sMyH(zU{J^}R$0iCH&Aj2+uIrRw) zx^AUFeF7bpO*le*0;`71OrSmi^VaW|sZYT8cKK}T6R-_gewO+K@}KL~P@h0idge*$ z6IfjP@;UVhJSn)kmHGs{ZSpIqPvAje_YKr1AX~b{mih!b@0WB&pTOQ9{Vt!TK7oC% z!4}jfuxHzYvFH=n^QW#uJoO2TU9)p4^$AEPzUfST0#$pIYN$`3tz_IY>J#V^u}p{h z1d?woF{3_#1HIM`r9Ods=f}xYpFph1!aDQ`_3Zg!NnSXXTMtuU&!_n7>K7ky+MS9dHaA<=Y ze$OBu^=%J+kB2^issy(c)F%)gJ^DNK36#3cwx<XrIPx>J#WAojQg31QrY(_lWug zUPbFI`e)aL{O$exo&Wjk(VBXTYY_fxyFdSIJpR5;@$dZ4kB7uWjK}|6uSnz2PHNX* z*AM;we!b$IzsBLe$8}Wy?0EV6I@Z7Q|J zWq)1A`u8)%g8uDwz1#nKh5s6%F?s5g$&OPdnrPtPaQrvT3jgjvY1> z;XhV`B7kEJLPNt)e<=P9qbL3E|Niw>nbrO4ul(cN@WRNs%R!QJXMu!s=LT1ToxAr) za_$XJa_-!aJq!bGHjg&K=Do za_;ChId>QzcJ8(#;oPnGh$QC@ufxt=Ad;Lri~~D&1CZq0g(Athqvw-zr+_5qjvhzO zogR{$yAmWhclJnf?yexoxx=`#b7zc%a~JaoNzNU{ot?XUBsq7tkmTIaY+&Li0xywV6bC-)G=gtgC&YdlioV#;Ka_$Bp;oLRU zBFVYKd}HVCHj>_>9$vfd)$+~pJ_$+_!*B3ao#Liu3B%Hg(FGzCkjw7G!I9@1)gmZWA9g>_ooHy9H%RrKI zhw&umZg@75oI497Id|$va_-!bi6rMv7D>*XC6b)G^YG%x zxl=^Kx%-9lG&^^TkmTGgK*G6ug!3{xcgv9E+)Y4|b0>`?=dM4JoI5O^ox30;oVy^5 zA31jxuaR)>rj{e&+$Gc@$+^RRBj+xV9tY>{zsQ zICmp)e6e$fuRrcq8ZT*J>o3J4?(fa_(fSk>uRTBgwgQMZ&pjS&t;=t_zZ!JFE{m zcjK{qcJ8n|a_&0gJjl)+<{>$EmvP*Zb2oA$lAJpYB%HgeNk}+%gI6HQx$B37bEo8q zgmc&EkA!nKHw7*oId^T4BK|FC?71Wrj#NcZV=9$+_!~c}LEj?H;6u>eyB-B%HhZ6OnN4u4A5% za~FX1Am>gF#~(R&EwM;AcO#vVaPI1jk#O!ZMkC?e&8bAfxhuwTM9$qT9IxcuX`MsD zxr?}jgmd@J5eerm=?4khXL&RqwL7ddynFOhKWwqrk&b0-sk zgmc#y+fUBj=42$CyLmI=*TK0PI|>QsuCWyf=k8K863*QNoF~Y+ySfhv=dL%#g`B(H zLy&Op&RZkl+%@C%$+^qH{3PdYBIZ3gcUCKraPDmNkZ|r6$s*z0O~CTVxqGXPgmZVx z9*!NHyF-{KfjD&L+VuXZqCxzpcoI497Id{9KBjMbUb4$)$>~BaocVFF+aPIsX z;Mu{stKN@oV$eG@a*8+-AqNoxs$>1M$X+{4-uYHcLK3yT4J9#z?zaV6)@uShs|9=gK0+l<$J*>$+`{SLyp3(ptM-5Q)1$hn({ z^V5r|fs2wi3+Hb5MB&^u;QfW1yL|(Nb0!cduS?F|op-{yv&Q3!)F(RW zd=t*yb)3)1x%0;3$+-)~dA?Bj*E6$w!nw1;@m|o`LiOq<;oMcJ3+Hb5RpH#-#W>`Z zy$D}}`9RKH^m^gkopch;ofYQAlYQ5%YLtX?cjLTp?rgpa=gtT7m7Kd~oF^YenuVp! z5zbu=UYDG^1sK1FNm*%Kmk8&s;Jt9}JTioHSMMyGJ6WvXz3H1zSz%nW6TiP1rRD^KuY-5CTcPLCacXqDAxy$Y(oV(ft;oLo|7tWnOmY?3`S)&K$ zA31kN&I;$wTv|AH#t(&aCx!JT=WbpX;oNEL5YF9$p2E4CitQ)ou4b2T?v7(z&u-J) zuZhPcZ8&>qF$Kf z%yIwGM77nrNOJCW;eDB$JAHHE-2IN@n4G()Yr?r3jpIBnVD$r!&1u5%PR?E67UA3tJSCjF<+z`my9p)2xl6(RCFkxkwl{3a{BeIi z63*R3tS>otd6H~frn?#AH!x!z4Bcja2)-1Wxs zK+c`-ZQ zNY|!3x)tL-IKxrL2gk*r{!;2sf`xOp0ozN?-C8V+D4e_7 zp~AVd4`Js{qk6q??gl&%&fUz_!nv~#7S7$J5yH8SEOzc9zGbm<7rIC|cWuuK=MLYuSl?XK_nz8X;oQB1gO{HE)xNq? zICo><#F2BSaaA~XBg2JrH#|c)cXxjZ=WcziaPE@ag>z?lNjP`qaOA>wo-7L=BAmMd zJfEDq5FjgP9GM| zoi#kX$)!Fg9s>g+MmoQH_cf&P=b7$OFICpZ_ zgmae^FPytzczopC_4z2AyAq6d`@l|`;nu>rQ+g?!yEYryxjXpnfN<^{vV?QDB3w9k z7ITDi7oaViyZnK|xeJOF&Yj{OcJ9hcp9|+MPf<8``>lj?x8bpH?xtD@=WaZf6F;RO zW4*L+?qvH3=g!hsICo)b!nupH5zbxD4(!~87xfU%o!LI&+%3oYl5-aX)7yGZLpXPxehBAI@3L_25}br{x8$X8?)Fy+=WfO};oLc&7S5eimT>M&v0ONJ zU*CiZ=k9u@aPGG56waMKe7nUbE+x)cAe_6w8N#_66e*m$WMARjZH{K=ZcVn2aPB6> z3g>RRm2mD7&4qI(H(EG%ZtvN-3vZ4W&Ry)!EOPGl6>JpFU9U3X+$m0A=Wg_4cy>2c z-VGZ!QaE=$>B70wXfK>QyI^+i46_~!=Pt=rICra$3g^xVkN335xhsECICoLUgmag2 zUpRMGui3fVn}g+$bJyO1ojd!61?=3NdGeB-JLT3F?A()sBrEy z`v~W5|5xGM6-*J%U8tXM?lzPQ=T4=UaPAbY3+FCIUO0CpU)Z@bmxV(|&RwOgaPD09 z3Fof4gK+NZRD^R^P{z)kf`1M>cS~#suyc35>sR62y@sbZ;)d+hAai!^g3TAQb632f zg`GPy?}hB#J&wA=&fP2iUpWGo>9nccZ?mvU8W3dW)UA$m#m*+zn{D z!_M6m1ub^&epi%Z=Wblq5O(eg{5G?5r+M=^J9pouce8UBTQ-uNyK=j&?A%2?uw&;g z_~RvZ?yh{VW#{g!=|y(#=E5(Q6sK8)^tsH=T|^c9yGwQ3Uln&^=kDr|D0c3q>%q5! zbJy5+COdaIUk0&r_d`pAoxAX<_Uzov>hhAEyH8s^*tzqGe#XvSx|R_+cgKdAbRp-i zq^tE?cJ4|~$+2_iZ8wmeJIn0R?A%Q~7D>*XNB@ilcJ5|d29k4^rj5T7jB}D?MGxPV zHBNi%+E>Y&*tshx4I<}mq_XEEcJ2Z`XOMHZaG1tBa_&;Ca6TVva5pfk>NPocJKI#d zk#l#v^Bx6u?p}Myv2*vZNtKd|pY;UA4-GkL29lPdSuH&Rv*%=4^8ALT+`BhI99$&E33Qa_-E7r;i}#Zc~w0 z5jl5nr^>;zE1eeMZ`OgFySUFfisalWIw<6lbJyY!w1Awu*(o6>$hp&~UOAtfyKzd> zL&>>2RBk(+oV$T%4y2KD_uCDig zcBM{#m-&f!3KSD?y8ro4tU2itI+{wAS73#W`oICq( z9T$^xw{8BGqAWOfdL!L$lXDkY5}QQMoujYHBy#RDHczu4=WcUl9(=nPhqoyz1If8N z^t;(ia_$;`R^BA%?oNSH8*=X4qU|@6bC=v#rwyFD_u5(`RLHq|^7&-|oV&$l@g;%e z+?|Shn@Y}I{(F!K+c_qU&~B#?p}X~?+54Z#G)-XDV|lXJIMd(u`ocLN4EPCQA@-LpUToh0YZ*7a09oV%{w zG&79Ixl0+m-~~B%i9uP#W}g_l&%!MS^&-D}wlICsk}hi~di&Rxl211~stPhG9uQpveH zdeWtsoV(|xRRhVnJJ7tdkes_Ws-_We?kc1&AM8TT-Svv*EI4=THQoftk#l!6v!XAY zyR^1$xk_;E?B`VNo&x7CqWhhm@8I11NZ9(|Eu1@}w$l~w!nu1K6EtlGoV#4re8ov{ z?u;(}ZoL!Eo%}POIf-!YW>3{Gxd-P?%dY>vzHsjR)GWKrfpa%ueXp%%aPCgJol)xr z=kAEygcKz>ccYXumP*69TeUtqBOlJ4M{Lm?T{w4L*0iR*gmYKCr^a{@oI8^RNAlC) z+*vtjS^L4c>!G!;Nea&0^_>IG9fNZ>tLMV;zHsh3ZZzB81m~{mP5k?EICp(MZSQIT z=kA_T?sZol=#?SBx zJ2w-@pJV4Hb4w08H{GS2*}3t^k7wsb)#?d5H%nrD*|{mZ-JhJBy00xm*tvO=@SdHU zh{=U!QlmZh?;2;x&drhc_3Yf_Te-1wvtw;0J2y%FUD>&Lkk`u2jsLAoc5YUTFES(N zMyIC=J2xHsT_xwnx*_K+J2x*RE7`fR9Na+8P3o_19_-xQEjY@~O~1GTc5VjmeZ|hr z>Mo1fxl!wXh@G2^b*tIA*?k~{otyNY@$B6A>L#*tGtXixJ2!ggUa@mip#OuNn<;;@RJbK{`>lbxF$-GbS< z`OSM8J2&m>RoJ;H(rjht=GBpj?A#2sDI@2m`;XBr?A*+F*~rd~`qN(Q+~h{jVCQC2 z&T)2b+Us;9=VnuVQW!fo#gk^Ta}yz@#m>#TZyxO2C{)$4b2IXVCOJ2~f8=&&=VsTe z2zG9k9gSw^W_1v}8#p)J_EocU<8ojLJ2%p^7O-=3MRzkfH+?@Bt!L-P%f_9Z8!fL4 za&F9injB&0=HVv|a&BTjo>6A!=FG=$?A-jZ%$=PZGlN8SZh{jZv2zns5^6Sc-lwc{ z3oFRES@unKKRY*3IhE|(gdOR|&dq%n19on#4>z!LGkS+MJ2ztvt!L-vrn3<{H?BIn z*||ynYQ@gYi6jShZpO8BVdo|g*I|=$Bk%IrjGP;nAvNsWI3~xlb942h3OhIQkH4^U zb8W&O?A(k$^M#$8t+N~1xse{-g`Jy`DGSND>GXN81v@t{UzCt@(^C6&E;~0;aSrU< z_})Ft&P}?s3_CYdRxD@dW>wB)a&8n~zx|Dzn*){gGuXNDtgd9|COg8Jog4FE3GCcR zwU1@z#!I%CotvfojoG=`>$9Jon~0?|*}0L+e9X>`gUKOwZYqt!*tt1&w1SdMZgg){vvbpK zeGhhS%nmMO=Vo91adK{~K4_xk;%}8N$v@%5HUbZuWM|Vdti+ z`fhS=GQaq0uyf6pvTO^okuc5Wt|zs$~!oarWZ zZf10KW9KF(d^S5bazEtRxrw>0$zF*!H>&Bu?jbED=|PtHyJ2lG~TZd`jUC+8-=EU<~4o9#g-*tuD@ z`3XBW*5AIebF=hT3_CY_)r501t-OGon=8Nc>)5$byg!Sb8$IcIc5cpQJZ0x*tHwcg zZhF7p#LkWKX>)dNW*4?2=jQr5XA^dA3SRGG=Voc-Pj+sGIC-#hll!chotwzcMeN*6 z(mch^P5Np*c5aS^TeEZHGT5G-n-}nx&Rtljy5W@`J2wNyG?R0)y0rHqc5d9#*RgYR z(JO?Vn{wH5c5XsP^kV1c`m08AZmL^jgV?#TdGdmtn=PXUkaMHZa!-w%8_T+sWO8oS zv`%ti=jM?rd>c47VHI20xrtL%WamcbbQw7}hINXe?A+WLk-*N4U(^kDZoJm|v2(Ng zrXD*ts{4AdbK`1R!p_a9ra|o7m|k#V=Vr{RqwL%q`gFzYxAN5^OiY)vbMtuB7sHFj>sl_s)tlicda&W-apO?Gagd&RPIlcJSrc1txi+9g1Rotv!WRCaEP zyANUK#%0)Ga&BtB*`8(Rro`nBc5cocwj<}Js@ZfZJ2z{)US{WJeoP8GH#zf5$hp~2 z=evTPo1_nG*tvP6a)6ziu#~yv++3}$O=9Q9YUf~fZcZ6aXXj>4p#?iPE0^76=SGq^ zlboCSw>dTB+_=5nuf)#HRXcTdZoFnBuydojY&|Y+(>P9Vdtj1N+LTq56>8} za}!=7#m>!(;_d9*oY~*Z&W+^6Cw6Ys3vJlBdHLHWc5XV~`^L^qKiPTg+)NL;%FfN< z{PyhJ1RoX7O}B?~?A#O@Sh90-$#)nzH`Q-r^x3&7f7PCyo5{7K$+_v(Qag~HoBJJ- z*tywl{*;}YA*aW(bK^E^KRY)MQuNrl$!~7U&Q0R8L+sqBG=661=6I7lJ2y5HuCa3y zmS)e+js3kV?A&0Aqo7?kC*|~Z1=>|JD87q#nbCW*XjGddI3B%dB$u7Of&dvGk?d;r0 z_3y#XjlzW>c5V`C`ml2|AvTPi8-JIJf9PFyZh91`v2zo- z{0TcZQTRL?IXBaLr?7L=)w4G{H=%Iu8i!S!x#ZQ3og3@XYuLGw%%9B8&1|_l?A+{~ zUCz$U_KhpaxoPuf_gr>v9^I)W=O(Hl8=v=sbJM>(ik%yW)KYeC9+mB7=Vo2rNpfzw zzqq5#&P}%y7UbLn)*V{U&W(T7b#`u6ZmeMEM#Fh8J2yjzzGmkpH!_i(o2o@8*}2&n zJ&T>2-g}DKxjC?{3pqDIAICo-=Vn%wd=GYRPLIfD=Voi0Z|vMiIv28Y(<#}FotvGW zaBn^xPd4NG%)!It+~hT! zU(L>qyjv(cH^o6l?A)x^Y+&cc=X*zXZcHAxuygZ1XbL$uZGL4vV&~>VUVnCO@=leq zbF=^HZgy@`!q2mFBeg!Cotxha7O-R@zd-=&W+la`y0r)Np9ZQ!p@CjNGEb`x-{lb zXXhr%Tb7&~=d!GQ?A+|mOJ(Qga%eR>H=*Ul?A(m%lfuqT!XI9^OjMP4{2l=dg3LTxKRaH#aJuuyb>& z{}ys?4BuzmX6MFn)m3tCj{bT*mz|rqdrIuwoW5>E&P~qebvESObZE@P=l&!0&acy7 z!p@DB(Jppw2H6_3bEC9yBRe-Yz0}#c>2`SuJ2zt&hOu*#{pJokH}@JJv2$at_<)_8 zJ=Ia<++45pjbZ0TYSw}pNXWT4>oJv`8$XTH?A-VmU1#TJNcTW?ZY1h=*tuD>U=2Ap8=D+E zuyZ3RvS8vBRe;p#=m6e=HYU6c5d{gmr2OEQHTg*=f+#fke!GO>xTilB(s7dL;&dq^@XmV~ge9KzL z&dow;I|-bd$nOTixiMR(#m>!b=^^CY*p{q~B{xeButB(n^mt&W|DK$_I0TiJ2y#Rli9hM zWl+q{P4O&Wc5ZySz+uw9l91%LkewTe{6ltbDkD0xb7LxTBhUX6I&b zo*p|lH6=?WV>oqc*h3fSsHAK|R>HIrd`*IX4Dv?(HS#=H#4|Q{>zz*`G>g=O({BUI)%ii%uCi zH}89<{2=GX$ukYE&B5iHlR8$Ab7SoME`^+%Rg15lBj+YyQ!29V!Z{ZwFLG`!9M()A z=f*H^b0#@AU8?I<$hlDus;?#IX4+k|#pK*18%vgxbEBg>-jbY~{7Q>ad}&9{&7p=mJ92Jz$u6Bh&dv5x-yh`MxF0`b+-Ko1x z&dtbnc%OlD^HBd_TXJrGYB(y8bMx!Lc|US){5AGvkaH6?s_hzbZfqCS>?h|&|Msi| za&EG}8LcDd<`w>SOwLW`Z6_y?bJKf$u01(7YEKS3l5?}`;Z|dEZfv@>Nhjy#hI`p4 za&D?U``D6mvvuzIOmc1-U%i2MV^S5W{^>S3H?9V!&yjO;=+Ux+InLBA6IX5of6vvTs6E|puKRGv}bw@lU=jO4(tas$xWZcW@OwNs_ z?}mru+*H4QY);P29XX`}I5%NkXDsVW&drCo%Mx;Kw%sqldCBqMuNwv($hiqGd~lVV zo8!yAJCbwr+cT3FaBkcuel8k8&dtuR{q)JX2`b#*o1B~I^3Or!+@#I?)I!e9pOdWO z;oRgprVqpW!lAD@J+0Hpxp{x&bX#(6_8G+WBra@`n@zK%jyA%%Ij8cQQhzu%>$@fP>nKr8ZgXJM<KyrIkI5%rLKTg~N=jQH`ch8&P+^BmhSNXuXQJ+6;p{_(jX1JXD z%1Ssl)=$hX&w_KK-7w~Ne0_4#s-}8VI5(%47oJX)Xaq=^4G!N9=O$+JK>U25v1gKG z+WgyaZscF5mb6zv--PhI7*=#Bb&aI5$<( zOWwoB*$^1v8*&8BP5x3t9ejP}_erB(V)+xAHW)=egL6}&cg%GNoSO?1WCOL}+;mc$BZv8Ukm5vnk03@8aOvo51qD5f^&1zIeQxR*Avr;9mG!r*YMYRzDm}kS)xx<6{TLU$ zAI?pbN|CVwoSSubLaw!gbF)=NPAdh@%}4Ek9c6HCK4cz`3WalX#o}qD9GshoIImHg z;M|;Ot!^oUb2C_G?CURZZfyONe5>Hx7>&{O(uQ-RxO_qG4mdZmR`ZWr!ns-5KF!@7 z&dr`~_lE3)b8{s5on|bYo9BZPH>bh5S=hI~#Y{Li>yk8jn!~vnwa$31C7he9jfopq z!?{tNs~?aK=f=PJ{jmY~IW6CA%EWzeZY)i9EEx#rCeOBPjTfAoz^6~XzkqWye(>#H zig0e!zYbb)3C@jz!<`o=;M_=eOuaoE&Q0x~w=%ro+}x^aU$h6#jklYM>Ss7N_Z(|? zeT8!qH|oBX44j**tHPBW;oPKsa8>yV=Vr>lO#FQNGiK(5KK+-#x!J0DHt2UaH!(G# z#gpOO*n7v=zJqh)AyL#efO8YQc8A^uI5&sSYLg!uYU->#V-uX4!AkB?5Akz%zpk&s z7s0tHZ&^FP7S7GU;3d~5z`03r?65BY&ds>FGmQ4Zx!K#TSI#InH%q5y-wyc`&dp@gCcEkIY4UqK?gpPG)p%I! zM?*L_)7$-QnFY_LolL^lLijd4FHh->+xr)8x~ye_ub13B@a-p@n~AYK27JczA|$!R zAFv!5uaT{1;oLNCdmFYL&W(}z#rvgjZlXgU$K&@6`qkbBj~0`2^EJ)lIGmg6q0Ym@ z$hj$490Hf8xV!b#UJm5kY?56TPR`9c{Z-ok%&GWW5%@d*;|_t(U#`vH&lI1x|F7;4 z{Il_B_ZJ)RFR9#yoR)6=%-YEEeUdhYa%~J-|9U`se3kBR+qNwQZi&aYle+rX_$c$U z{{G*;9iKIS-}QebMbDUY8|}YdUE{_-UX7!F-CbVyk01B+ue+_4d07742k-yup6xaN L?nC}t-0{BvC?3fK literal 0 HcmV?d00001 diff --git a/Test/Fe2_wl-lsms/v_fe2.0 b/Test/Fe2_wl-lsms/v_fe2.0 new file mode 100755 index 000000000..30b560c50 --- /dev/null +++ b/Test/Fe2_wl-lsms/v_fe2.0 @@ -0,0 +1,1534 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Fe. + 2 0.0000000000000D+00 + LSMS: Fe z= 26. xvalws= 5.16339 + 26. 5.42000 10. 0.7012665733723D+00 + -0.1113096740000D+02 0.9815760904632D+00 1001 +-0.5199725931699D+02-0.5199722591642D+02-0.5199719210878D+02-0.5199715788911D+02 +-0.5199712325237D+02-0.5199708819349D+02-0.5199705270731D+02-0.5199701678864D+02 +-0.5199698043220D+02-0.5199694363265D+02-0.5199690638460D+02-0.5199686868256D+02 +-0.5199683052103D+02-0.5199679189438D+02-0.5199675279695D+02-0.5199671322300D+02 +-0.5199667316673D+02-0.5199663262225D+02-0.5199659158361D+02-0.5199655004479D+02 +-0.5199650799970D+02-0.5199646544215D+02-0.5199642236591D+02-0.5199637876465D+02 +-0.5199633463197D+02-0.5199628996139D+02-0.5199624474636D+02-0.5199619898023D+02 +-0.5199615265630D+02-0.5199610576775D+02-0.5199605830772D+02-0.5199601026922D+02 +-0.5199596164522D+02-0.5199591242856D+02-0.5199586261203D+02-0.5199581218832D+02 +-0.5199576115002D+02-0.5199570948964D+02-0.5199565719959D+02-0.5199560427220D+02 +-0.5199555069971D+02-0.5199549647424D+02-0.5199544158783D+02-0.5199538603243D+02 +-0.5199532979989D+02-0.5199527288194D+02-0.5199521527023D+02-0.5199515695630D+02 +-0.5199509793159D+02-0.5199503818745D+02-0.5199497771508D+02-0.5199491650563D+02 +-0.5199485455009D+02-0.5199479183938D+02-0.5199472836428D+02-0.5199466411549D+02 +-0.5199459908356D+02-0.5199453325894D+02-0.5199446663199D+02-0.5199439919290D+02 +-0.5199433093178D+02-0.5199426183860D+02-0.5199419190323D+02-0.5199412111539D+02 +-0.5199404946470D+02-0.5199397694062D+02-0.5199390353251D+02-0.5199382922959D+02 +-0.5199375402096D+02-0.5199367789556D+02-0.5199360084222D+02-0.5199352284963D+02 +-0.5199344390633D+02-0.5199336400074D+02-0.5199328312111D+02-0.5199320125557D+02 +-0.5199311839210D+02-0.5199303451853D+02-0.5199294962254D+02-0.5199286369167D+02 +-0.5199277671330D+02-0.5199268867465D+02-0.5199259956280D+02-0.5199250936466D+02 +-0.5199241806697D+02-0.5199232565635D+02-0.5199223211920D+02-0.5199213744180D+02 +-0.5199204161024D+02-0.5199194461044D+02-0.5199184642816D+02-0.5199174704899D+02 +-0.5199164645831D+02-0.5199154464136D+02-0.5199144158318D+02-0.5199133726865D+02 +-0.5199123168242D+02-0.5199112480900D+02-0.5199101663269D+02-0.5199090713759D+02 +-0.5199079630763D+02-0.5199068412652D+02-0.5199057057778D+02-0.5199045564474D+02 +-0.5199033931052D+02-0.5199022155801D+02-0.5199010236992D+02-0.5198998172875D+02 +-0.5198985961678D+02-0.5198973601605D+02-0.5198961090841D+02-0.5198948427549D+02 +-0.5198935609868D+02-0.5198922635914D+02-0.5198909503782D+02-0.5198896211542D+02 +-0.5198882757241D+02-0.5198869138902D+02-0.5198855354524D+02-0.5198841402083D+02 +-0.5198827279527D+02-0.5198812984781D+02-0.5198798515746D+02-0.5198783870295D+02 +-0.5198769046276D+02-0.5198754041509D+02-0.5198738853792D+02-0.5198723480891D+02 +-0.5198707920547D+02-0.5198692170473D+02-0.5198676228356D+02-0.5198660091851D+02 +-0.5198643758587D+02-0.5198627226164D+02-0.5198610492152D+02-0.5198593554091D+02 +-0.5198576409492D+02-0.5198559055834D+02-0.5198541490567D+02-0.5198523711108D+02 +-0.5198505714845D+02-0.5198487499132D+02-0.5198469061290D+02-0.5198450398610D+02 +-0.5198431508349D+02-0.5198412387727D+02-0.5198393033936D+02-0.5198373444129D+02 +-0.5198353615426D+02-0.5198333544912D+02-0.5198313229636D+02-0.5198292666611D+02 +-0.5198271852812D+02-0.5198250785181D+02-0.5198229460618D+02-0.5198207875988D+02 +-0.5198186028116D+02-0.5198163913791D+02-0.5198141529759D+02-0.5198118872729D+02 +-0.5198095939369D+02-0.5198072726305D+02-0.5198049230123D+02-0.5198025447368D+02 +-0.5198001374541D+02-0.5197977008102D+02-0.5197952344466D+02-0.5197927380005D+02 +-0.5197902111047D+02-0.5197876533874D+02-0.5197850644724D+02-0.5197824439787D+02 +-0.5197797915209D+02-0.5197771067086D+02-0.5197743891469D+02-0.5197716384359D+02 +-0.5197688541709D+02-0.5197660359420D+02-0.5197631833347D+02-0.5197602959292D+02 +-0.5197573733004D+02-0.5197544150183D+02-0.5197514206475D+02-0.5197483897473D+02 +-0.5197453218716D+02-0.5197422165688D+02-0.5197390733818D+02-0.5197358918479D+02 +-0.5197326714988D+02-0.5197294118605D+02-0.5197261124529D+02-0.5197227727904D+02 +-0.5197193923812D+02-0.5197159707277D+02-0.5197125073260D+02-0.5197090016661D+02 +-0.5197054532318D+02-0.5197018615005D+02-0.5196982259433D+02-0.5196945460248D+02 +-0.5196908212030D+02-0.5196870509292D+02-0.5196832346481D+02-0.5196793717975D+02 +-0.5196754618085D+02-0.5196715041051D+02-0.5196674981041D+02-0.5196634432153D+02 +-0.5196593388414D+02-0.5196551843776D+02-0.5196509792117D+02-0.5196467227241D+02 +-0.5196424142874D+02-0.5196380532668D+02-0.5196336390195D+02-0.5196291708950D+02 +-0.5196246482345D+02-0.5196200703715D+02-0.5196154366312D+02-0.5196107463304D+02 +-0.5196059987776D+02-0.5196011932730D+02-0.5195963291079D+02-0.5195914055651D+02 +-0.5195864219187D+02-0.5195813774336D+02-0.5195762713659D+02-0.5195711029626D+02 +-0.5195658714613D+02-0.5195605760903D+02-0.5195552160686D+02-0.5195497906054D+02 +-0.5195442989003D+02-0.5195387401431D+02-0.5195331135135D+02-0.5195274181813D+02 +-0.5195216533060D+02-0.5195158180370D+02-0.5195099115129D+02-0.5195039328620D+02 +-0.5194978812018D+02-0.5194917556390D+02-0.5194855552692D+02-0.5194792791772D+02 +-0.5194729264361D+02-0.5194664961081D+02-0.5194599872435D+02-0.5194533988811D+02 +-0.5194467300479D+02-0.5194399797589D+02-0.5194331470170D+02-0.5194262308129D+02 +-0.5194192301248D+02-0.5194121439183D+02-0.5194049711466D+02-0.5193977107496D+02 +-0.5193903616545D+02-0.5193829227751D+02-0.5193753930120D+02-0.5193677712521D+02 +-0.5193600563687D+02-0.5193522472214D+02-0.5193443426554D+02-0.5193363415021D+02 +-0.5193282425782D+02-0.5193200446861D+02-0.5193117466132D+02-0.5193033471322D+02 +-0.5192948450006D+02-0.5192862389606D+02-0.5192775277389D+02-0.5192687100465D+02 +-0.5192597845787D+02-0.5192507500145D+02-0.5192416050167D+02-0.5192323482318D+02 +-0.5192229782895D+02-0.5192134938025D+02-0.5192038933665D+02-0.5191941755600D+02 +-0.5191843389439D+02-0.5191743820614D+02-0.5191643034376D+02-0.5191541015796D+02 +-0.5191437749759D+02-0.5191333220966D+02-0.5191227413929D+02-0.5191120312966D+02 +-0.5191011902205D+02-0.5190902165578D+02-0.5190791086815D+02-0.5190678649451D+02 +-0.5190564836814D+02-0.5190449632026D+02-0.5190333018003D+02-0.5190214977449D+02 +-0.5190095492854D+02-0.5189974546493D+02-0.5189852120422D+02-0.5189728196473D+02 +-0.5189602756258D+02-0.5189475781158D+02-0.5189347252326D+02-0.5189217150681D+02 +-0.5189085456909D+02-0.5188952151453D+02-0.5188817214519D+02-0.5188680626064D+02 +-0.5188542365801D+02-0.5188402413189D+02-0.5188260747437D+02-0.5188117347492D+02 +-0.5187972192046D+02-0.5187825259523D+02-0.5187676528083D+02-0.5187525975614D+02 +-0.5187373579732D+02-0.5187219317775D+02-0.5187063166802D+02-0.5186905103587D+02 +-0.5186745104616D+02-0.5186583146086D+02-0.5186419203897D+02-0.5186253253653D+02 +-0.5186085270654D+02-0.5185915229896D+02-0.5185743106063D+02-0.5185568873529D+02 +-0.5185392506347D+02-0.5185213978251D+02-0.5185033262648D+02-0.5184850332618D+02 +-0.5184665160905D+02-0.5184477719917D+02-0.5184287981719D+02-0.5184095918029D+02 +-0.5183901500218D+02-0.5183704699298D+02-0.5183505485925D+02-0.5183303830390D+02 +-0.5183099702614D+02-0.5182893072147D+02-0.5182683908162D+02-0.5182472179448D+02 +-0.5182257854409D+02-0.5182040901055D+02-0.5181821287000D+02-0.5181598979457D+02 +-0.5181373945232D+02-0.5181146150719D+02-0.5180915561896D+02-0.5180682144317D+02 +-0.5180445863110D+02-0.5180206682971D+02-0.5179964568157D+02-0.5179719482481D+02 +-0.5179471389309D+02-0.5179220251550D+02-0.5178966031654D+02-0.5178708691605D+02 +-0.5178448192915D+02-0.5178184496620D+02-0.5177917563269D+02-0.5177647352925D+02 +-0.5177373825152D+02-0.5177096939016D+02-0.5176816653072D+02-0.5176532925362D+02 +-0.5176245713407D+02-0.5175954974201D+02-0.5175660664205D+02-0.5175362739338D+02 +-0.5175061154973D+02-0.5174755865931D+02-0.5174446826469D+02-0.5174133990280D+02 +-0.5173817310480D+02-0.5173496739605D+02-0.5173172229601D+02-0.5172843731820D+02 +-0.5172511197008D+02-0.5172174575303D+02-0.5171833816223D+02-0.5171488868660D+02 +-0.5171139680874D+02-0.5170786200483D+02-0.5170428374455D+02-0.5170066149103D+02 +-0.5169699470072D+02-0.5169328282336D+02-0.5168952530187D+02-0.5168572157226D+02 +-0.5168187106359D+02-0.5167797319782D+02-0.5167402738976D+02-0.5167003304701D+02 +-0.5166598956980D+02-0.5166189635099D+02-0.5165775277589D+02-0.5165355822224D+02 +-0.5164931206009D+02-0.5164501365170D+02-0.5164066235145D+02-0.5163625750578D+02 +-0.5163179845303D+02-0.5162728452340D+02-0.5162271503882D+02-0.5161808931287D+02 +-0.5161340665067D+02-0.5160866634877D+02-0.5160386769508D+02-0.5159900996873D+02 +-0.5159409243999D+02-0.5158911437017D+02-0.5158407501149D+02-0.5157897360697D+02 +-0.5157380939038D+02-0.5156858158605D+02-0.5156328940882D+02-0.5155793206390D+02 +-0.5155250874678D+02-0.5154701864308D+02-0.5154146092848D+02-0.5153583476858D+02 +-0.5153013931877D+02-0.5152437372416D+02-0.5151853711940D+02-0.5151262862864D+02 +-0.5150664736531D+02-0.5150059243209D+02-0.5149446292074D+02-0.5148825791198D+02 +-0.5148197647538D+02-0.5147561766923D+02-0.5146918054041D+02-0.5146266412426D+02 +-0.5145606744445D+02-0.5144938951289D+02-0.5144262932954D+02-0.5143578588230D+02 +-0.5142885814693D+02-0.5142184508682D+02-0.5141474565295D+02-0.5140755878369D+02 +-0.5140028340473D+02-0.5139291842885D+02-0.5138546275588D+02-0.5137791527252D+02 +-0.5137027485219D+02-0.5136254035491D+02-0.5135471062715D+02-0.5134678450172D+02 +-0.5133876079757D+02-0.5133063831972D+02-0.5132241585905D+02-0.5131409219222D+02 +-0.5130566608147D+02-0.5129713627453D+02-0.5128850150442D+02-0.5127976048936D+02 +-0.5127091193261D+02-0.5126195452228D+02-0.5125288693125D+02-0.5124370781700D+02 +-0.5123441582145D+02-0.5122500957082D+02-0.5121548767551D+02-0.5120584872993D+02 +-0.5119609131234D+02-0.5118621398474D+02-0.5117621529272D+02-0.5116609376528D+02 +-0.5115584791474D+02-0.5114547623653D+02-0.5113497720910D+02-0.5112434929377D+02 +-0.5111359093455D+02-0.5110270055805D+02-0.5109167657328D+02-0.5108051737158D+02 +-0.5106922132640D+02-0.5105778679324D+02-0.5104621210946D+02-0.5103449559414D+02 +-0.5102263554800D+02-0.5101063025320D+02-0.5099847797326D+02-0.5098617695289D+02 +-0.5097372541788D+02-0.5096112157497D+02-0.5094836361174D+02-0.5093544969644D+02 +-0.5092237797793D+02-0.5090914658550D+02-0.5089575362882D+02-0.5088219719774D+02 +-0.5086847536227D+02-0.5085458617240D+02-0.5084052765804D+02-0.5082629782888D+02 +-0.5081189467431D+02-0.5079731616332D+02-0.5078256024442D+02-0.5076762484551D+02 +-0.5075250787384D+02-0.5073720721590D+02-0.5072172073734D+02-0.5070604628291D+02 +-0.5069018167640D+02-0.5067412472051D+02-0.5065787319689D+02-0.5064142486600D+02 +-0.5062477746709D+02-0.5060792871815D+02-0.5059087631588D+02-0.5057361793563D+02 +-0.5055615123141D+02-0.5053847383581D+02-0.5052058336003D+02-0.5050247739384D+02 +-0.5048415350560D+02-0.5046560924222D+02-0.5044684212921D+02-0.5042784967067D+02 +-0.5040862934931D+02-0.5038917862649D+02-0.5036949494226D+02-0.5034957571537D+02 +-0.5032941834336D+02-0.5030902020260D+02-0.5028837864835D+02-0.5026749101486D+02 +-0.5024635461542D+02-0.5022496674247D+02-0.5020332466771D+02-0.5018142564219D+02 +-0.5015926689643D+02-0.5013684564056D+02-0.5011415906446D+02-0.5009120433786D+02 +-0.5006797861057D+02-0.5004447901258D+02-0.5002070265426D+02-0.4999664662657D+02 +-0.4997230800119D+02-0.4994768383078D+02-0.4992277114919D+02-0.4989756697166D+02 +-0.4987206829505D+02-0.4984627209814D+02-0.4982017534180D+02-0.4979377496935D+02 +-0.4976706790675D+02-0.4974005106294D+02-0.4971272133013D+02-0.4968507558409D+02 +-0.4965711068447D+02-0.4962882347514D+02-0.4960021078451D+02-0.4957126942590D+02 +-0.4954199619788D+02-0.4951238788463D+02-0.4948244125633D+02-0.4945215306956D+02 +-0.4942152006764D+02-0.4939053898111D+02-0.4935920652806D+02-0.4932751941463D+02 +-0.4929547433536D+02-0.4926306797371D+02-0.4923029700242D+02-0.4919715808401D+02 +-0.4916364787124D+02-0.4912976300753D+02-0.4909550012749D+02-0.4906085585733D+02 +-0.4902582681538D+02-0.4899040961257D+02-0.4895460085288D+02-0.4891839713387D+02 +-0.4888179504715D+02-0.4884479117888D+02-0.4880738211025D+02-0.4876956441799D+02 +-0.4873133467484D+02-0.4869268945006D+02-0.4865362530993D+02-0.4861413881817D+02 +-0.4857422653651D+02-0.4853388502510D+02-0.4849311084302D+02-0.4845190054869D+02 +-0.4841025070039D+02-0.4836815785666D+02-0.4832561857676D+02-0.4828262942108D+02 +-0.4823918695154D+02-0.4819528773204D+02-0.4815092832878D+02-0.4810610531068D+02 +-0.4806081524970D+02-0.4801505472119D+02-0.4796882030422D+02-0.4792210858184D+02 +-0.4787491614138D+02-0.4782723957472D+02-0.4777907547847D+02-0.4773042045423D+02 +-0.4768127110873D+02-0.4763162405400D+02-0.4758147590750D+02-0.4753082329223D+02 +-0.4747966283676D+02-0.4742799117531D+02-0.4737580494774D+02-0.4732310079952D+02 +-0.4726987538172D+02-0.4721612535085D+02-0.4716184736882D+02-0.4710703810273D+02 +-0.4705169422472D+02-0.4699581241173D+02-0.4693938934527D+02-0.4688242171111D+02 +-0.4682490619900D+02-0.4676683950228D+02-0.4670821831755D+02-0.4664903934423D+02 +-0.4658929928411D+02-0.4652899484095D+02-0.4646812271991D+02-0.4640667962710D+02 +-0.4634466226902D+02-0.4628206735200D+02-0.4621889158168D+02-0.4615513166235D+02 +-0.4609078429642D+02-0.4602584618383D+02-0.4596031402139D+02-0.4589418450224D+02 +-0.4582745431526D+02-0.4576012014446D+02-0.4569217866845D+02-0.4562362655991D+02 +-0.4555446048506D+02-0.4548467710324D+02-0.4541427306645D+02-0.4534324501899D+02 +-0.4527158959715D+02-0.4519930342900D+02-0.4512638313417D+02-0.4505282532384D+02 +-0.4497862660069D+02-0.4490378355907D+02-0.4482829278522D+02-0.4475215085763D+02 +-0.4467535434758D+02-0.4459789981973D+02-0.4451978383298D+02-0.4444100294141D+02 +-0.4436155369548D+02-0.4428143264335D+02-0.4420063633246D+02-0.4411916131128D+02 +-0.4403700413133D+02-0.4395416134942D+02-0.4387062953009D+02-0.4378640524842D+02 +-0.4370148509295D+02-0.4361586566901D+02-0.4352954360224D+02-0.4344251554244D+02 +-0.4335477816770D+02-0.4326632818875D+02-0.4317716235372D+02-0.4308727745309D+02 +-0.4299667032494D+02-0.4290533786048D+02-0.4281327700986D+02-0.4272048478818D+02 +-0.4262695828176D+02-0.4253269465463D+02-0.4243769115513D+02-0.4234194512276D+02 +-0.4224545399505D+02-0.4214821531456D+02-0.4205022673588D+02-0.4195148603264D+02 +-0.4185199110439D+02-0.4175173998336D+02-0.4165073084106D+02-0.4154896199452D+02 +-0.4144643191223D+02-0.4134313921960D+02-0.4123908270399D+02-0.4113426131900D+02 +-0.4102867418816D+02-0.4092232060784D+02-0.4081520004919D+02-0.4070731215920D+02 +-0.4059865676071D+02-0.4048923385121D+02-0.4037904360059D+02-0.4026808634744D+02 +-0.4015636259421D+02-0.4004387300093D+02-0.3993061837757D+02-0.3981659967508D+02 +-0.3970181797505D+02-0.3958627447806D+02-0.3946997049083D+02-0.3935290741217D+02 +-0.3923508671801D+02-0.3911650994547D+02-0.3899717867623D+02-0.3887709451949D+02 +-0.3875625909457D+02-0.3863467401352D+02-0.3851234086395D+02-0.3838926119238D+02 +-0.3826543648842D+02-0.3814086816995D+02-0.3801555756982D+02-0.3788950592406D+02 +-0.3776271436216D+02-0.3763518389944D+02-0.3750691543187D+02-0.3737790973346D+02 +-0.3724816745643D+02-0.3711768913428D+02-0.3698647518771D+02-0.3685452593361D+02 +-0.3672184159697D+02-0.3658842232567D+02-0.3645426820807D+02-0.3631937929321D+02 +-0.3618375561346D+02-0.3604739720935D+02-0.3591030415633D+02-0.3577247659321D+02 +-0.3563391475192D+02-0.3549461898827D+02-0.3535458981337D+02-0.3521382792542D+02 +-0.3507233424143D+02-0.3493010992864D+02-0.3478715643525D+02-0.3464347552013D+02 +-0.3449906928126D+02-0.3435394018266D+02-0.3420809107940D+02-0.3406152524065D+02 +-0.3391424637043D+02-0.3376625862590D+02-0.3361756663313D+02-0.3346817550006D+02 +-0.3331809082663D+02-0.3316731871203D+02-0.3301586575893D+02-0.3286373907466D+02 +-0.3271094626939D+02-0.3255749545121D+02-0.3240339521822D+02-0.3224865464757D+02 +-0.3209328328157D+02-0.3193729111094D+02-0.3178068855525D+02-0.3162348644055D+02 +-0.3146569597458D+02-0.3130732871930D+02-0.3114839656119D+02-0.3098891167927D+02 +-0.3082888651111D+02-0.3066833371686D+02-0.3050726614161D+02-0.3034569677621D+02 +-0.3018363871669D+02-0.3002110512258D+02-0.2985810917425D+02-0.2969466402958D+02 +-0.2953078278010D+02-0.2936647840694D+02-0.2920176373673D+02-0.2903665139781D+02 +-0.2887115377696D+02-0.2870528297691D+02-0.2853905077498D+02-0.2837246858306D+02 +-0.2820554740928D+02-0.2803829782165D+02-0.2787072991398D+02-0.2770285327437D+02 +-0.2753467695661D+02-0.2736620945485D+02-0.2719745868167D+02-0.2702843195011D+02 +-0.2685913595982D+02-0.2668957678764D+02-0.2651975988294D+02-0.2634969006801D+02 +-0.2617937154380D+02-0.2600880790115D+02-0.2583800213787D+02-0.2566695668187D+02 +-0.2549567342044D+02-0.2532415373592D+02-0.2515239854775D+02-0.2498040836118D+02 +-0.2480818332233D+02-0.2463572327981D+02-0.2446302785263D+02-0.2429009650422D+02 +-0.2411692862219D+02-0.2394352360355D+02-0.2376988094463D+02-0.2359600033531D+02 +-0.2342188175642D+02-0.2324752557966D+02-0.2307293266864D+02-0.2289810447983D+02 +-0.2272304316200D+02-0.2254775165218D+02-0.2237223376659D+02-0.2219649428421D+02 +-0.2202053902086D+02-0.2184437489146D+02-0.2166800995789D+02-0.2149145346009D+02 +-0.2131471582776D+02-0.2113780867042D+02-0.2096074474364D+02-0.2078353788951D+02 +-0.2060620295021D+02-0.2042875565363D+02-0.2025121247135D+02-0.2007359044942D+02 +-0.1989590701423D+02-0.1971817975593D+02-0.1954042619378D+02-0.1936266352822D+02 +-0.1918490838619D+02-0.1900717656628D+02-0.1882948279190D+02-0.1865184048011D+02 +-0.1847426153465D+02-0.1829675617068D+02-0.1811933277855D+02-0.1794199783242D+02 +-0.1776475584849D+02-0.1758760939562D+02-0.1741055915926D+02-0.1723360405807D+02 +-0.1705674141014D+02-0.1687996714445D+02-0.1670327605162D+02-0.1652666206664D+02 +-0.1635011857590D+02-0.1617363873989D+02-0.1599721582351D+02-0.1582084352570D+02 +-0.1564451630100D+02-0.1546822966640D+02-0.1529198048772D+02-0.1511576724091D+02 +-0.1493959024470D+02-0.1476345186200D+02-0.1458735666863D+02-0.1441131158854D+02 +-0.1423532599577D+02-0.1405941178386D+02-0.1388358340393D+02-0.1370785787312D+02 +-0.1353225475539D+02-0.1335679611679D+02-0.1318150645758D+02-0.1300641262333D+02 +-0.1283154369759D+02-0.1265693087820D+02-0.1248260733955D+02-0.1230860808292D+02 +-0.1213496977677D+02-0.1196173058907D+02-0.1178893001322D+02-0.1161660868935D+02 +-0.1144480822243D+02-0.1127357099867D+02-0.1110294000145D+02-0.1093295862801D+02 +-0.1076367050797D+02-0.1059511932477D+02-0.1042734864085D+02-0.1026040172749D+02 +-0.1009432140005D+02-0.9929149859336D+01-0.9764928539725D+01-0.9601697964583D+01 +-0.9439497609536D+01-0.9278365774019D+01-0.9118339461504D+01-0.8959454268748D+01 +-0.8801744284357D+01-0.8645241996882D+01-0.8489978212662D+01-0.8335981983529D+01 +-0.8183280544477D+01-0.8031899261338D+01-0.7881861588467D+01-0.7733189036396D+01 +-0.7585901149363D+01-0.7440015492612D+01-0.7295547649285D+01-0.7152511226721D+01 +-0.7010917871923D+01-0.6870777295938D+01-0.6732097306845D+01-0.6594883851038D+01 +-0.6459141062454D+01-0.6324871319365D+01-0.6192075308347D+01-0.6060752095014D+01 +-0.5930899201072D+01-0.5802512687251D+01-0.5675587241659D+01-0.5550116273066D+01 +-0.5426092008647D+01-0.5303505595682D+01-0.5182347206712D+01-0.5062606147647D+01 +-0.4944270968302D+01-0.4827329574861D+01-0.4711769343735D+01-0.4597577236294D+01 +-0.4484739913965D+01-0.4373243853143D+01-0.4263075459417D+01-0.4154221180575D+01 +-0.4046667617853D+01-0.3940401634918D+01-0.3835410464049D+01-0.3731681809001D+01 +-0.3629203944025D+01-0.3527965808536D+01-0.3427957096907D+01-0.3329168342913D+01 +-0.3231590998318D+01-0.3135217505155D+01-0.3040041361252D+01-0.2946057178606D+01 +-0.2853260734243D+01-0.2761649013247D+01-0.2671220243730D+01-0.2581973923582D+01 +-0.2493910838928D+01-0.2407033074346D+01-0.2321344015016D+01-0.2236848341122D+01 +-0.2153552014956D+01-0.2071462261390D+01-0.1990587542499D+01-0.1910937527340D+01 +-0.1832523058034D+01-0.1755356113501D+01-0.1679449772291D+01-0.1604818176155D+01 +-0.1531476496008D+01-0.1459440902078D+01-0.1388728539968D+01-0.1319357514381D+01 +-0.1251346882134D+01-0.1184716655962D+01-0.1119487820418D+01-0.1055682360967D+01 +-0.9933233070722D+00-0.9324347898183D+00-0.8730421142973D+00-0.8151718466760D+00 +-0.7588519155788D+00-0.7041117271417D+00-0.6509822928483D+00-0.5994963690570D+00 +-0.5496886069632D+00-0.5015957116250D+00-0.4552566086098D+00-0.4107126167905D+00 +-0.3680076258385D+00-0.3271882770002D+00-0.2883041458275D+00-0.2514079256237D+00 +-0.2165556104776D+00-0.1838066768758D+00-0.1532242629937D+00-0.1248753448789D+00 +-0.9883090882909D-01-0.7516611934667D-01-0.5396048210834D-01-0.3529800141424D-01 +-0.1926733158825D-01-0.5961921770879D-02 0.4519846510787D-02 0.1207452970105D-01 + 0.1659350187392D-01 + 0.0000000000000D+00 + 1001 0.5163385311209D+01 + 0.1598489817110D-04 0.1637671018678D-04 0.1677812415985D-04 0.1718937533084D-04 + 0.1761070470089D-04 0.1804235917272D-04 0.1848459169505D-04 0.1893766141057D-04 + 0.1940183380743D-04 0.1987738087462D-04 0.2036458126092D-04 0.2086372043793D-04 + 0.2137509086697D-04 0.2189899217013D-04 0.2243573130538D-04 0.2298562274616D-04 + 0.2354898866513D-04 0.2412615912261D-04 0.2471747225946D-04 0.2532327449484D-04 + 0.2594392072860D-04 0.2657977454883D-04 0.2723120844430D-04 0.2789860402220D-04 + 0.2858235223118D-04 0.2928285358977D-04 0.3000051842049D-04 0.3073576708957D-04 + 0.3148903025262D-04 0.3226074910622D-04 0.3305137564571D-04 0.3386137292924D-04 + 0.3469121534828D-04 0.3554138890475D-04 0.3641239149491D-04 0.3730473320013D-04 + 0.3821893658486D-04 0.3915553700178D-04 0.4011508290444D-04 0.4109813616755D-04 + 0.4210527241502D-04 0.4313708135610D-04 0.4419416712966D-04 0.4527714865686D-04 + 0.4638666000247D-04 0.4752335074502D-04 0.4868788635590D-04 0.4988094858777D-04 + 0.5110323587248D-04 0.5235546372860D-04 0.5363836517897D-04 0.5495269117840D-04 + 0.5629921105181D-04 0.5767871294306D-04 0.5909200427474D-04 0.6053991221911D-04 + 0.6202328418060D-04 0.6354298829006D-04 0.6509991391097D-04 0.6669497215815D-04 + 0.6832909642897D-04 0.7000324294757D-04 0.7171839132237D-04 0.7347554511712D-04 + 0.7527573243585D-04 0.7712000652217D-04 0.7900944637308D-04 0.8094515736776D-04 + 0.8292827191166D-04 0.8495995009639D-04 0.8704138037548D-04 0.8917378025682D-04 + 0.9135839701181D-04 0.9359650840182D-04 0.9588942342239D-04 0.9823848306548D-04 + 0.1006450611003D-03 0.1031105648732D-03 0.1056364361269D-03 0.1082241518400D-03 + 0.1108752250861D-03 0.1135912059150D-03 0.1163736822546D-03 0.1192242808346D-03 + 0.1221446681332D-03 0.1251365513465D-03 0.1282016793814D-03 0.1313418438734D-03 + 0.1345588802277D-03 0.1378546686872D-03 0.1412311354252D-03 0.1446902536658D-03 + 0.1482340448301D-03 0.1518645797122D-03 0.1555839796815D-03 0.1593944179164D-03 + 0.1632981206664D-03 0.1672973685454D-03 0.1713944978569D-03 0.1755919019506D-03 + 0.1798920326122D-03 0.1842974014874D-03 0.1888105815398D-03 0.1934342085447D-03 + 0.1981709826186D-03 0.2030236697869D-03 0.2079951035883D-03 0.2130881867188D-03 + 0.2183058927160D-03 0.2236512676835D-03 0.2291274320575D-03 0.2347375824160D-03 + 0.2404849933325D-03 0.2463730192737D-03 0.2524050965443D-03 0.2585847452777D-03 + 0.2649155714760D-03 0.2714012690990D-03 0.2780456222038D-03 0.2848525071361D-03 + 0.2918258947752D-03 0.2989698528322D-03 0.3062885482056D-03 0.3137862493918D-03 + 0.3214673289558D-03 0.3293362660608D-03 0.3373976490589D-03 0.3456561781450D-03 + 0.3541166680746D-03 0.3627840509472D-03 0.3716633790576D-03 0.3807598278152D-03 + 0.3900786987347D-03 0.3996254224989D-03 0.4094055620952D-03 0.4194248160278D-03 + 0.4296890216086D-03 0.4402041583258D-03 0.4509763512956D-03 0.4620118747958D-03 + 0.4733171558858D-03 0.4848987781132D-03 0.4967634853104D-03 0.5089181854821D-03 + 0.5213699547874D-03 0.5341260416174D-03 0.5471938707712D-03 0.5605810477322D-03 + 0.5742953630485D-03 0.5883447968178D-03 0.6027375232805D-03 0.6174819155240D-03 + 0.6325865502999D-03 0.6480602129566D-03 0.6639119024917D-03 0.6801508367254D-03 + 0.6967864575979D-03 0.7138284365952D-03 0.7312866803045D-03 0.7491713361036D-03 + 0.7674927979868D-03 0.7862617125309D-03 0.8054889850044D-03 0.8251857856237D-03 + 0.8453635559589D-03 0.8660340154937D-03 0.8872091683432D-03 0.9089013101317D-03 + 0.9311230350365D-03 0.9538872429999D-03 0.9772071471144D-03 0.1001096281185D-02 + 0.1025568507471D-02 0.1050638024617D-02 0.1076319375770D-02 0.1102627456891D-02 + 0.1129577525269D-02 0.1157185208234D-02 0.1185466512082D-02 0.1214437831210D-02 + 0.1244115957474D-02 0.1274518089765D-02 0.1305661843818D-02 0.1337565262252D-02 + 0.1370246824853D-02 0.1403725459096D-02 0.1438020550931D-02 0.1473151955806D-02 + 0.1509140009973D-02 0.1546005542051D-02 0.1583769884867D-02 0.1622454887582D-02 + 0.1662082928098D-02 0.1702676925772D-02 0.1744260354421D-02 0.1786857255640D-02 + 0.1830492252442D-02 0.1875190563210D-02 0.1920978015992D-02 0.1967881063128D-02 + 0.2015926796226D-02 0.2065142961496D-02 0.2115557975440D-02 0.2167200940923D-02 + 0.2220101663616D-02 0.2274290668832D-02 0.2329799218765D-02 0.2386659330124D-02 + 0.2444903792198D-02 0.2504566185338D-02 0.2565680899881D-02 0.2628283155514D-02 + 0.2692409021105D-02 0.2758095434988D-02 0.2825380225741D-02 0.2894302133441D-02 + 0.2964900831427D-02 0.3037216948569D-02 0.3111292092068D-02 0.3187168870784D-02 + 0.3264890919119D-02 0.3344502921455D-02 0.3426050637169D-02 0.3509580926233D-02 + 0.3595141775414D-02 0.3682782325090D-02 0.3772552896689D-02 0.3864505020775D-02 + 0.3958691465787D-02 0.4055166267451D-02 0.4153984758881D-02 0.4255203601375D-02 + 0.4358880815940D-02 0.4465075815542D-02 0.4573849438115D-02 0.4685263980330D-02 + 0.4799383232157D-02 0.4916272512225D-02 0.5035998704008D-02 0.5158630292846D-02 + 0.5284237403831D-02 0.5412891840559D-02 0.5544667124797D-02 0.5679638537051D-02 + 0.5817883158085D-02 0.5959479911390D-02 0.6104509606638D-02 0.6253054984140D-02 + 0.6405200760326D-02 0.6561033674270D-02 0.6720642535293D-02 0.6884118271654D-02 + 0.7051553980364D-02 0.7223044978138D-02 0.7398688853520D-02 0.7578585520206D-02 + 0.7762837271575D-02 0.7951548836482D-02 0.8144827436313D-02 0.8342782843354D-02 + 0.8545527440483D-02 0.8753176282223D-02 0.8965847157189D-02 0.9183660651951D-02 + 0.9406740216350D-02 0.9635212230293D-02 0.9869206072067D-02 0.1010885418819D-01 + 0.1035429216487D-01 0.1060565880102D-01 0.1086309618300D-01 0.1112674976098D-01 + 0.1139676842703D-01 0.1167330459502D-01 0.1195651428226D-01 0.1224655719296D-01 + 0.1254359680365D-01 0.1284780045038D-01 0.1315933941799D-01 0.1347838903132D-01 + 0.1380512874841D-01 0.1413974225589D-01 0.1448241756638D-01 0.1483334711810D-01 + 0.1519272787669D-01 0.1556076143930D-01 0.1593765414093D-01 0.1632361716318D-01 + 0.1671886664534D-01 0.1712362379797D-01 0.1753811501898D-01 0.1796257201221D-01 + 0.1839723190863D-01 0.1884233739026D-01 0.1929813681664D-01 0.1976488435427D-01 + 0.2024284010865D-01 0.2073227025937D-01 0.2123344719799D-01 0.2174664966903D-01 + 0.2227216291392D-01 0.2281027881807D-01 0.2336129606116D-01 0.2392552027062D-01 + 0.2450326417836D-01 0.2509484778099D-01 0.2570059850330D-01 0.2632085136536D-01 + 0.2695594915311D-01 0.2760624259260D-01 0.2827209052789D-01 0.2895386010275D-01 + 0.2965192694621D-01 0.3036667536193D-01 0.3109849852168D-01 0.3184779866276D-01 + 0.3261498728960D-01 0.3340048537957D-01 0.3420472359307D-01 0.3502814248797D-01 + 0.3587119273850D-01 0.3673433535864D-01 0.3761804193016D-01 0.3852279483530D-01 + 0.3944908749425D-01 0.4039742460744D-01 0.4136832240282D-01 0.4236230888809D-01 + 0.4337992410818D-01 0.4442172040772D-01 0.4548826269899D-01 0.4658012873516D-01 + 0.4769790938896D-01 0.4884220893700D-01 0.5001364534968D-01 0.5121285058684D-01 + 0.5244047089927D-01 0.5369716713616D-01 0.5498361505854D-01 0.5630050565886D-01 + 0.5764854548679D-01 0.5902845698133D-01 0.6044097880935D-01 0.6188686621058D-01 + 0.6336689134928D-01 0.6488184367258D-01 0.6643253027559D-01 0.6801977627350D-01 + 0.6964442518061D-01 0.7130733929646D-01 0.7300940009921D-01 0.7475150864626D-01 + 0.7653458598235D-01 0.7835957355505D-01 0.8022743363795D-01 0.8213914976145D-01 + 0.8409572715143D-01 0.8609819317576D-01 0.8814759779876D-01 0.9024501404387D-01 + 0.9239153846433D-01 0.9458829162225D-01 0.9683641857599D-01 0.9913708937603D-01 + 0.1014914995693D+00 0.1039008707124D+00 0.1063664508929D+00 0.1088895152605D+00 + 0.1114713665659D+00 0.1141133357095D+00 0.1168167822989D+00 0.1195830952153D+00 + 0.1224136931891D+00 0.1253100253853D+00 0.1282735719976D+00 0.1313058448524D+00 + 0.1344083880215D+00 0.1375827784453D+00 0.1408306265648D+00 0.1441535769635D+00 + 0.1475533090190D+00 0.1510315375640D+00 0.1545900135575D+00 0.1582305247653D+00 + 0.1619548964503D+00 0.1657649920730D+00 0.1696627140012D+00 0.1736500042302D+00 + 0.1777288451116D+00 0.1819012600937D+00 0.1861693144696D+00 0.1905351161366D+00 + 0.1950008163646D+00 0.1995686105740D+00 0.2042407391237D+00 0.2090194881080D+00 + 0.2139071901636D+00 0.2189062252852D+00 0.2240190216511D+00 0.2292480564572D+00 + 0.2345958567607D+00 0.2400650003322D+00 0.2456581165163D+00 0.2513778871018D+00 + 0.2572270471990D+00 0.2632083861258D+00 0.2693247483019D+00 0.2755790341505D+00 + 0.2819742010072D+00 0.2885132640368D+00 0.2951992971565D+00 0.3020354339657D+00 + 0.3090248686825D+00 0.3161708570860D+00 0.3234767174638D+00 0.3309458315657D+00 + 0.3385816455606D+00 0.3463876709995D+00 0.3543674857811D+00 0.3625247351216D+00 + 0.3708631325267D+00 0.3793864607664D+00 0.3880985728517D+00 0.3970033930118D+00 + 0.4061049176725D+00 0.4154072164342D+00 0.4249144330487D+00 0.4346307863953D+00 + 0.4445605714532D+00 0.4547081602725D+00 0.4650780029394D+00 0.4756746285378D+00 + 0.4865026461046D+00 0.4975667455780D+00 0.5088716987384D+00 0.5204223601406D+00 + 0.5322236680352D+00 0.5442806452802D+00 0.5565984002389D+00 0.5691821276658D+00 + 0.5820371095764D+00 0.5951687161017D+00 0.6085824063246D+00 0.6222837290978D+00 + 0.6362783238409D+00 0.6505719213157D+00 0.6651703443774D+00 0.6800795087008D+00 + 0.6953054234796D+00 0.7108541920960D+00 0.7267320127606D+00 0.7429451791184D+00 + 0.7595000808215D+00 0.7764032040633D+00 0.7936611320756D+00 0.8112805455829D+00 + 0.8292682232144D+00 0.8476310418698D+00 0.8663759770367D+00 0.8855101030576D+00 + 0.9050405933431D+00 0.9249747205297D+00 0.9453198565782D+00 0.9660834728107D+00 + 0.9872731398834D+00 0.1008896527691D+01 0.1030961405203D+01 0.1053475640219D+01 + 0.1076447199059D+01 0.1099884146163D+01 0.1123794643606D+01 0.1148186950539D+01 + 0.1173069422520D+01 0.1198450510766D+01 0.1224338761296D+01 0.1250742813981D+01 + 0.1277671401474D+01 0.1305133348046D+01 0.1333137568292D+01 0.1361693065729D+01 + 0.1390808931264D+01 0.1420494341536D+01 0.1450758557128D+01 0.1481610920635D+01 + 0.1513060854600D+01 0.1545117859294D+01 0.1577791510350D+01 0.1611091456240D+01 + 0.1645027415584D+01 0.1679609174304D+01 0.1714846582593D+01 0.1750749551714D+01 + 0.1787328050617D+01 0.1824592102362D+01 0.1862551780351D+01 0.1901217204364D+01 + 0.1940598536381D+01 0.1980705976204D+01 0.2021549756852D+01 0.2063140139742D+01 + 0.2105487409633D+01 0.2148601869346D+01 0.2192493834233D+01 0.2237173626406D+01 + 0.2282651568716D+01 0.2328937978466D+01 0.2376043160867D+01 0.2423977402220D+01 + 0.2472750962826D+01 0.2522374069606D+01 0.2572856908445D+01 0.2624209616232D+01 + 0.2676442272606D+01 0.2729564891397D+01 0.2783587411753D+01 0.2838519688956D+01 + 0.2894371484912D+01 0.2951152458318D+01 0.3008872154495D+01 0.3067539994888D+01 + 0.3127165266219D+01 0.3187757109301D+01 0.3249324507495D+01 0.3311876274823D+01 + 0.3375421043713D+01 0.3439967252386D+01 0.3505523131885D+01 0.3572096692728D+01 + 0.3639695711197D+01 0.3708327715253D+01 0.3777999970073D+01 0.3848719463232D+01 + 0.3920492889483D+01 0.3993326635174D+01 0.4067226762296D+01 0.4142198992143D+01 + 0.4218248688609D+01 0.4295380841109D+01 0.4373600047133D+01 0.4452910494435D+01 + 0.4533315942858D+01 0.4614819705805D+01 0.4697424631363D+01 0.4781133083070D+01 + 0.4865946920363D+01 0.4951867478680D+01 0.5038895549253D+01 0.5127031358587D+01 + 0.5216274547643D+01 0.5306624150733D+01 0.5398078574138D+01 0.5490635574481D+01 + 0.5584292236839D+01 0.5679044952645D+01 0.5774889397373D+01 0.5871820508038D+01 + 0.5969832460529D+01 0.6068918646798D+01 0.6169071651923D+01 0.6270283231083D+01 + 0.6372544286455D+01 0.6475844844080D+01 0.6580174030705D+01 0.6685520050662D+01 + 0.6791870162784D+01 0.6899210657425D+01 0.7007526833594D+01 0.7116802976260D+01 + 0.7227022333863D+01 0.7338167096061D+01 0.7450218371783D+01 0.7563156167608D+01 + 0.7676959366534D+01 0.7791605707176D+01 0.7907071763461D+01 0.8023332924852D+01 + 0.8140363377175D+01 0.8258136084097D+01 0.8376622769317D+01 0.8495793899535D+01 + 0.8615618668258D+01 0.8736064980507D+01 0.8857099438500D+01 0.8978687328375D+01 + 0.9100792608024D+01 0.9223377896112D+01 0.9346404462355D+01 0.9469832219140D+01 + 0.9593619714548D+01 0.9717724126883D+01 0.9842101260766D+01 0.9966705544894D+01 + 0.1009149003153D+02 0.1021640639784D+02 0.1034140494910D+02 0.1046643462397D+02 + 0.1059144300176D+02 0.1071637631197D+02 0.1084117944603D+02 0.1096579597141D+02 + 0.1109016814815D+02 0.1121423694798D+02 0.1133794207598D+02 0.1146122199503D+02 + 0.1158401395297D+02 0.1170625401268D+02 0.1182787708518D+02 0.1194881696565D+02 + 0.1206900637272D+02 0.1218837699087D+02 0.1230685951615D+02 0.1242438370529D+02 + 0.1254087842817D+02 0.1265627172386D+02 0.1277049086019D+02 0.1288346239692D+02 + 0.1299511225264D+02 0.1310536577531D+02 0.1321414781668D+02 0.1332138281039D+02 + 0.1342699485401D+02 0.1353090779486D+02 0.1363304531979D+02 0.1373333104876D+02 + 0.1383168863237D+02 0.1392804185324D+02 0.1402231473126D+02 0.1411443163269D+02 + 0.1420431738302D+02 0.1429189738362D+02 0.1437709773209D+02 0.1445984534617D+02 + 0.1454006809125D+02 0.1461769491133D+02 0.1469265596325D+02 0.1476488275420D+02 + 0.1483430828227D+02 0.1490086717997D+02 0.1496449586045D+02 0.1502513266637D+02 + 0.1508271802111D+02 0.1513719458221D+02 0.1518850739667D+02 0.1523660405807D+02 + 0.1528143486504D+02 0.1532295298097D+02 0.1536111459451D+02 0.1539587908074D+02 + 0.1542720916252D+02 0.1545507107166D+02 0.1547943470979D+02 0.1550027380818D+02 + 0.1551756608649D+02 0.1553129340973D+02 0.1554144194321D+02 0.1554800230489D+02 + 0.1555096971483D+02 0.1555034414109D+02 0.1554613044170D+02 0.1553833850219D+02 + 0.1552698336815D+02 0.1551208537224D+02 0.1549367025525D+02 0.1547176928048D+02 + 0.1544641934108D+02 0.1541766305962D+02 0.1538554887941D+02 0.1535013114701D+02 + 0.1531147018524D+02 0.1526963235632D+02 0.1522469011431D+02 0.1517672204648D+02 + 0.1512581290294D+02 0.1507205361401D+02 0.1501554129469D+02 0.1495637923586D+02 + 0.1489467688143D+02 0.1483054979117D+02 0.1476411958856D+02 0.1469551389326D+02 + 0.1462486623765D+02 0.1455231596717D+02 0.1447800812386D+02 0.1440209331295D+02 + 0.1432472755191D+02 0.1424607210189D+02 0.1416629328114D+02 0.1408556226023D+02 + 0.1400405483895D+02 0.1392195120462D+02 0.1383943567190D+02 0.1375669640397D+02 + 0.1367392511509D+02 0.1359131675471D+02 0.1350906917319D+02 0.1342738276945D+02 + 0.1334646012062D+02 0.1326650559429D+02 0.1318772494356D+02 0.1311032488543D+02 + 0.1303451266311D+02 0.1296049559287D+02 0.1288848059600D+02 0.1281867371685D+02 + 0.1275127962762D+02 0.1268650112092D+02 0.1262453859099D+02 0.1256558950479D+02 + 0.1250984786396D+02 0.1245750365900D+02 0.1240874231676D+02 0.1236374414287D+02 + 0.1232268376027D+02 0.1228572954555D+02 0.1225304306446D+02 0.1222477850840D+02 + 0.1220108213345D+02 0.1218209170364D+02 0.1216793594045D+02 0.1215873398004D+02 + 0.1215459484040D+02 0.1215561690015D+02 0.1216188739095D+02 0.1217348190556D+02 + 0.1219046392335D+02 0.1221288435558D+02 0.1224078111210D+02 0.1227417869177D+02 + 0.1231308779833D+02 0.1235750498394D+02 0.1240741232221D+02 0.1246277711273D+02 + 0.1252355161890D+02 0.1258967284103D+02 0.1266106232638D+02 0.1273762601795D+02 + 0.1281925414370D+02 0.1290582114765D+02 0.1299718566449D+02 0.1309319053901D+02 + 0.1319366289170D+02 0.1329841423160D+02 0.1340724061751D+02 0.1351992286850D+02 + 0.1363622682445D+02 0.1375590365723D+02 0.1387869023310D+02 0.1400430952654D+02 + 0.1413247108568D+02 0.1426287154943D+02 0.1439519521585D+02 0.1452911466164D+02 + 0.1466429141204D+02 0.1480037666032D+02 0.1493701203603D+02 0.1507383042071D+02 + 0.1521045680978D+02 0.1534650921898D+02 0.1548159963362D+02 0.1561533499861D+02 + 0.1574731824718D+02 0.1587714936575D+02 0.1600442649257D+02 0.1612874704717D+02 + 0.1624970888773D+02 0.1636691149325D+02 0.1647995716712D+02 0.1658845225866D+02 + 0.1669200839885D+02 0.1679024374656D+02 0.1688278424127D+02 0.1696926485808D+02 + 0.1704933086091D+02 0.1712263904955D+02 0.1718885899597D+02 0.1724767426555D+02 + 0.1729878361858D+02 0.1734190218727D+02 0.1737676262379D+02 0.1740311621443D+02 + 0.1742073395531D+02 0.1742940758484D+02 0.1742895056832D+02 0.1741919903002D+02 + 0.1740001262822D+02 0.1737127536868D+02 0.1733289635230D+02 0.1728481045258D+02 + 0.1722697891897D+02 0.1715938990207D+02 0.1708205889706D+02 0.1699502910180D+02 + 0.1689837168630D+02 0.1679218597071D+02 0.1667659950885D+02 0.1655176807505D+02 + 0.1641787555199D+02 0.1627513371796D+02 0.1612378193190D+02 0.1596408671521D+02 + 0.1579634122978D+02 0.1562086465177D+02 0.1543800144144D+02 0.1524812050953D+02 + 0.1505161428129D+02 0.1484889765958D+02 0.1464040688904D+02 0.1442659832383D+02 + 0.1420794710164D+02 0.1398494572768D+02 0.1375810257224D+02 0.1352794028641D+02 + 0.1329499414062D+02 0.1305981029156D+02 0.1282294398290D+02 0.1258495768649D+02 + 0.1234641919025D+02 0.1210789964020D+02 0.1186997154378D+02 0.1163320674257D+02 + 0.1139817436235D+02 0.1116543874898D+02 0.1093555739904D+02 0.1070907889381D+02 + 0.1048654084606D+02 0.1026846786867D+02 0.1005536957455D+02 0.9847738617121D+01 + 0.9646048780880D+01 0.9450753131140D+01 0.9262282232242D+01 0.9081042443130D+01 + 0.8907414299029D+01 0.8741750987631D+01 0.8584376927965D+01 0.8435586459318D+01 + 0.8295642647763D+01 0.8164776216718D+01 0.8043184607728D+01 0.7931031177002D+01 + 0.7828444532547D+01 0.7735518016122D+01 0.7652309333478D+01 0.7578840335666D+01 + 0.7515096953395D+01 0.7461029285686D+01 0.7416551843277D+01 0.7381543946429D+01 + 0.7355850276012D+01 0.7339281575945D+01 0.7331615504269D+01 0.7332597629364D+01 + 0.7341942567039D+01 0.7359335253467D+01 0.7384432348207D+01 0.7416863760823D+01 + 0.7456234293928D+01 0.7502125394819D+01 0.7554097007226D+01 0.7611689514121D+01 + 0.7674425761978D+01 0.7741813156378D+01 0.7813345818389D+01 0.7888506790796D+01 + 0.7966770282884D+01 0.8047603942247D+01 0.8130471141889D+01 0.8214833270782D+01 + 0.8300152015977D+01 0.8385891624432D+01 0.8471521132834D+01 0.8556516553871D+01 + 0.8640363007725D+01 0.8722556787896D+01 0.8802607350906D+01 0.8880039219965D+01 + 0.8954393793234D+01 0.9025231048014D+01 0.9092131132851D+01 0.9154695840366D+01 + 0.9212549954385D+01 0.9265342465848D+01 0.9312747652818D+01 0.9354466020870D+01 + 0.9390225101034D+01 0.9419780103437D+01 0.9442914425707D+01 0.9459440016156D+01 + 0.9469197592650D+01 0.9472056719009D+01 0.9467915741590D+01 0.9456701589582D+01 + 0.9438369443293D+01 0.9412902275450D+01 0.9380310271200D+01 0.9340630133144D+01 + 0.9293924278246D+01 0.9240279934002D+01 0.9179808141609D+01 0.9112642674295D+01 + 0.9038938879184D+01 0.8958872451344D+01 0.8872638148743D+01 0.8780448456976D+01 + 0.8682532212582D+01 0.8579133193743D+01 0.8470508687033D+01 0.8356928038724D+01 + 0.8238671198911D+01 0.8116027266468D+01 0.7989293042520D+01 0.7858771599766D+01 + 0.7724770874590D+01 0.7587602288494D+01 0.7447579404921D+01 0.7305016627098D+01 + 0.7160227942029D+01 0.7013525715286D+01 0.6865219540750D+01 0.6715615148954D+01 + 0.6565013377174D+01 0.6413709203935D+01 0.6261990850102D+01 0.6110138948256D+01 + 0.5958425781584D+01 0.5807114593095D+01 0.5656458965512D+01 0.5506702271806D+01 + 0.5358077195953D+01 0.5210805323119D+01 0.5065096798158D+01 0.4921150050970D+01 + 0.4779151587010D+01 0.4639275840943D+01 0.4501685091221D+01 0.4366529433139D+01 + 0.4233946807745D+01 0.4104063083809D+01 0.3976992189920D+01 0.3852836293669D+01 + 0.3731686024786D+01 0.3613620739020D+01 0.3498708819513D+01 0.3387008012394D+01 + 0.3278565793304D+01 0.3173419761582D+01 0.3071598058868D+01 0.2973119808928D+01 + 0.2877995575562D+01 0.2786227835561D+01 0.2697811463708D+01 0.2612734227007D+01 + 0.2530977285357D+01 0.2452515696071D+01 0.2377318919736D+01 0.2305351325088D+01 + 0.2236572690686D+01 0.2170938701357D+01 0.2108401437525D+01 0.2048909855707D+01 + 0.1992410258615D+01 0.1938846753493D+01 0.1888161697452D+01 0.1840296128750D+01 + 0.1795190183139D+01 0.1752783494525D+01 0.1713015579381D+01 0.1675826204476D+01 + 0.1641155737640D+01 0.1608945481415D+01 0.1579137989569D+01 0.1551677366569D+01 + 0.1526509550213D+01 0.1503582577717D+01 0.1482846835631D+01 0.1464255294029D+01 + 0.1447763725462D+01 0.1433330909213D+01 0.1420918821393D+01 0.1410492811422D+01 + 0.1402021765432D+01 0.1395478257056D+01 0.1390838686018D+01 0.1388083404859D+01 + 0.1387196833976D+01 0.1388167565031D+01 0.1390988452597D+01 0.1395656693682D+01 + 0.1402173894504D+01 0.1410546123630D+01 0.1420783950179D+01 0.1432902465463D+01 + 0.1446921285905D+01 0.1462864534641D+01 0.1480760798548D+01 0.1500643056846D+01 + 0.1522548576646D+01 0.1546518770016D+01 0.1572599006234D+01 0.1600838371864D+01 + 0.1631289370197D+01 + 7 1001 + 1 0 -1 -507.15872 + 2 0 -1 -57.90193 + 2 1 1 -49.86287 + 2 1 -2 -49.86287 + 3 0 -1 -5.54201 + 3 1 1 -3.19737 + 3 1 -2 -3.19737 + 0.1578653899636D-04 0.1617348895146D-04 0.1656992171165D-04 0.1697606959830D-04 + 0.1739217062193D-04 0.1781846862141D-04 0.1825521340658D-04 0.1870266090435D-04 + 0.1916107330843D-04 0.1963071923261D-04 0.2011187386790D-04 0.2060481914343D-04 + 0.2110984389131D-04 0.2162724401556D-04 0.2215732266508D-04 0.2270039041093D-04 + 0.2325676542789D-04 0.2382677368050D-04 0.2441074911358D-04 0.2500903384750D-04 + 0.2562197837812D-04 0.2624994178169D-04 0.2689329192470D-04 0.2755240567892D-04 + 0.2822766914165D-04 0.2891947786131D-04 0.2962823706866D-04 0.3035436191355D-04 + 0.3109827770750D-04 0.3186042017220D-04 0.3264123569411D-04 0.3344118158521D-04 + 0.3426072635017D-04 0.3510034996003D-04 0.3596054413256D-04 0.3684181261946D-04 + 0.3774467150058D-04 0.3866964948532D-04 0.3961728822137D-04 0.4058814261105D-04 + 0.4158278113526D-04 0.4260178618544D-04 0.4364575440359D-04 0.4471529703058D-04 + 0.4581104026298D-04 0.4693362561857D-04 0.4808371031079D-04 0.4926196763234D-04 + 0.5046908734808D-04 0.5170577609761D-04 0.5297275780756D-04 0.5427077411401D-04 + 0.5560058479521D-04 0.5696296821480D-04 0.5835872177592D-04 0.5978866238633D-04 + 0.6125362693487D-04 0.6275447277959D-04 0.6429207824773D-04 0.6586734314792D-04 + 0.6748118929484D-04 0.6913456104670D-04 0.7082842585579D-04 0.7256377483246D-04 + 0.7434162332284D-04 0.7616301150065D-04 0.7802900497344D-04 0.7994069540354D-04 + 0.8189920114422D-04 0.8390566789129D-04 0.8596126935059D-04 0.8806720792173D-04 + 0.9022471539851D-04 0.9243505368636D-04 0.9469951553726D-04 0.9701942530259D-04 + 0.9939613970422D-04 0.1018310486245D-03 0.1043255759154D-03 0.1068811802272D-03 + 0.1094993558578D-03 0.1121816336222D-03 0.1149295817432D-03 0.1177448067642D-03 + 0.1206289544839D-03 0.1235837109134D-03 0.1266108032574D-03 0.1297120009183D-03 + 0.1328891165257D-03 0.1361440069902D-03 0.1394785745829D-03 0.1428947680418D-03 + 0.1463945837040D-03 0.1499800666665D-03 0.1536533119746D-03 0.1574164658392D-03 + 0.1612717268838D-03 0.1652213474221D-03 0.1692676347657D-03 0.1734129525650D-03 + 0.1776597221811D-03 0.1820104240923D-03 0.1864675993337D-03 0.1910338509730D-03 + 0.1957118456205D-03 0.2005043149775D-03 0.2054140574208D-03 0.2104439396266D-03 + 0.2155968982333D-03 0.2208759415447D-03 0.2262841512752D-03 0.2318246843360D-03 + 0.2375007746657D-03 0.2433157351052D-03 0.2492729593172D-03 0.2553759237533D-03 + 0.2616281896683D-03 0.2680334051830D-03 0.2745953073974D-03 0.2813177245552D-03 + 0.2882045782603D-03 0.2952598857471D-03 0.3024877622062D-03 0.3098924231657D-03 + 0.3174781869307D-03 0.3252494770818D-03 0.3332108250335D-03 0.3413668726553D-03 + 0.3497223749555D-03 0.3582822028307D-03 0.3670513458808D-03 0.3760349152927D-03 + 0.3852381467940D-03 0.3946664036772D-03 0.4043251798977D-03 0.4142201032463D-03 + 0.4243569385986D-03 0.4347415912426D-03 0.4453801102869D-03 0.4562786921509D-03 + 0.4674436841396D-03 0.4788815881046D-03 0.4905990641928D-03 0.5026029346867D-03 + 0.5149001879362D-03 0.5274979823861D-03 0.5404036507000D-03 0.5536247039839D-03 + 0.5671688361118D-03 0.5810439281552D-03 0.5952580529193D-03 0.6098194795887D-03 + 0.6247366784846D-03 0.6400183259371D-03 0.6556733092739D-03 0.6717107319299D-03 + 0.6881399186792D-03 0.7049704209928D-03 0.7222120225257D-03 0.7398747447357D-03 + 0.7579688526366D-03 0.7765048606903D-03 0.7954935388406D-03 0.8149459186910D-03 + 0.8348732998317D-03 0.8552872563181D-03 0.8761996433044D-03 0.8976226038371D-03 + 0.9195685758107D-03 0.9420502990905D-03 0.9650808228062D-03 0.9886735128198D-03 + 0.1012842059373D-02 0.1037600484917D-02 0.1062963152132D-02 0.1088944772132D-02 + 0.1115560412878D-02 0.1142825507777D-02 0.1170755864502D-02 0.1199367674011D-02 + 0.1228677519787D-02 0.1258702387298D-02 0.1289459673684D-02 0.1320967197671D-02 + 0.1353243209726D-02 0.1386306402455D-02 0.1420175921241D-02 0.1454871375148D-02 + 0.1490412848071D-02 0.1526820910165D-02 0.1564116629537D-02 0.1602321584218D-02 + 0.1641457874423D-02 0.1681548135099D-02 0.1722615548775D-02 0.1764683858713D-02 + 0.1807777382375D-02 0.1851921025208D-02 0.1897140294758D-02 0.1943461315115D-02 + 0.1990910841708D-02 0.2039516276440D-02 0.2089305683192D-02 0.2140307803689D-02 + 0.2192552073741D-02 0.2246068639873D-02 0.2300888376342D-02 0.2357042902562D-02 + 0.2414564600938D-02 0.2473486635121D-02 0.2533842968695D-02 0.2595668384307D-02 + 0.2658998503243D-02 0.2723869805469D-02 0.2790319650148D-02 0.2858386296630D-02 + 0.2928108925945D-02 0.2999527662801D-02 0.3072683598093D-02 0.3147618811948D-02 + 0.3224376397309D-02 0.3303000484068D-02 0.3383536263775D-02 0.3466030014917D-02 + 0.3550529128793D-02 0.3637082136000D-02 0.3725738733527D-02 0.3816549812498D-02 + 0.3909567486548D-02 0.4004845120878D-02 0.4102437361973D-02 0.4202400168026D-02 + 0.4304790840063D-02 0.4409668053798D-02 0.4517091892231D-02 0.4627123878997D-02 + 0.4739827012501D-02 0.4855265800840D-02 0.4973506297535D-02 0.5094616138099D-02 + 0.5218664577446D-02 0.5345722528171D-02 0.5475862599718D-02 0.5609159138444D-02 + 0.5745688268629D-02 0.5885527934412D-02 0.6028757942710D-02 0.6175460007122D-02 + 0.6325717792843D-02 0.6479616962619D-02 0.6637245223749D-02 0.6798692376180D-02 + 0.6964050361700D-02 0.7133413314258D-02 0.7306877611443D-02 0.7484541927142D-02 + 0.7666507285398D-02 0.7852877115512D-02 0.8043757308385D-02 0.8239256274168D-02 + 0.8439485001208D-02 0.8644557116350D-02 0.8854588946603D-02 0.9069699582215D-02 + 0.9290010941175D-02 0.9515647835184D-02 0.9746738037117D-02 0.9983412350011D-02 + 0.1022580467763D-01 0.1047405209658D-01 0.1072829493013D-01 0.1098867682362D-01 + 0.1125534482157D-01 0.1152844944663D-01 0.1180814478014D-01 0.1209458854464D-01 + 0.1238794218813D-01 0.1268837097027D-01 0.1299604405054D-01 0.1331113457823D-01 + 0.1363381978460D-01 0.1396428107702D-01 0.1430270413516D-01 0.1464927900939D-01 + 0.1500420022134D-01 0.1536766686664D-01 0.1573988272003D-01 0.1612105634269D-01 + 0.1651140119200D-01 0.1691113573367D-01 0.1732048355639D-01 0.1773967348898D-01 + 0.1816893972004D-01 0.1860852192031D-01 0.1905866536769D-01 0.1951962107491D-01 + 0.1999164592006D-01 0.2047500277994D-01 0.2096996066626D-01 0.2147679486487D-01 + 0.2199578707791D-01 0.2252722556908D-01 0.2307140531207D-01 0.2362862814207D-01 + 0.2419920291068D-01 0.2478344564401D-01 0.2538167970423D-01 0.2599423595455D-01 + 0.2662145292768D-01 0.2726367699796D-01 0.2792126255702D-01 0.2859457219324D-01 + 0.2928397687497D-01 0.2998985613760D-01 0.3071259827459D-01 0.3145260053247D-01 + 0.3221026930995D-01 0.3298602036115D-01 0.3378027900310D-01 0.3459348032750D-01 + 0.3542606941694D-01 0.3627850156547D-01 0.3715124250387D-01 0.3804476862936D-01 + 0.3895956724022D-01 0.3989613677503D-01 0.4085498705688D-01 0.4183663954253D-01 + 0.4284162757659D-01 0.4387049665085D-01 0.4492380466884D-01 0.4600212221569D-01 + 0.4710603283337D-01 0.4823613330147D-01 0.4939303392348D-01 0.5057735881887D-01 + 0.5178974622075D-01 0.5303084877959D-01 0.5430133387272D-01 0.5560188391999D-01 + 0.5693319670552D-01 0.5829598570568D-01 0.5969098042344D-01 0.6111892672907D-01 + 0.6258058720751D-01 0.6407674151217D-01 0.6560818672563D-01 0.6717573772702D-01 + 0.6878022756642D-01 0.7042250784620D-01 0.7210344910947D-01 0.7382394123585D-01 + 0.7558489384436D-01 0.7738723670390D-01 0.7923192015110D-01 0.8111991551585D-01 + 0.8305221555447D-01 0.8502983489072D-01 0.8705381046465D-01 0.8912520198948D-01 + 0.9124509241649D-01 0.9341458840816D-01 0.9563482081952D-01 0.9790694518784D-01 + 0.1002321422308D+00 0.1026116183530D+00 0.1050466061617D+00 0.1075383649901D+00 + 0.1100881814308D+00 0.1126973698768D+00 0.1153672730725D+00 0.1180992626731D+00 + 0.1208947398131D+00 0.1237551356842D+00 0.1266819121223D+00 0.1296765622038D+00 + 0.1327406108509D+00 0.1358756154471D+00 0.1390831664613D+00 0.1423648880819D+00 + 0.1457224388598D+00 0.1491575123622D+00 0.1526718378346D+00 0.1562671808731D+00 + 0.1599453441066D+00 0.1637081678882D+00 0.1675575309963D+00 0.1714953513455D+00 + 0.1755235867073D+00 0.1796442354403D+00 0.1838593372298D+00 0.1881709738376D+00 + 0.1925812698606D+00 0.1970923934995D+00 0.2017065573369D+00 0.2064260191245D+00 + 0.2112530825796D+00 0.2161900981917D+00 0.2212394640365D+00 0.2264036266010D+00 + 0.2316850816156D+00 0.2370863748964D+00 0.2426101031954D+00 0.2482589150589D+00 + 0.2540355116950D+00 0.2599426478486D+00 0.2659831326839D+00 0.2721598306759D+00 + 0.2784756625075D+00 0.2849336059751D+00 0.2915366969006D+00 0.2982880300498D+00 + 0.3051907600570D+00 0.3122481023559D+00 0.3194633341157D+00 0.3268397951826D+00 + 0.3343808890252D+00 0.3420900836857D+00 0.3499709127335D+00 0.3580269762230D+00 + 0.3662619416539D+00 0.3746795449340D+00 0.3832835913436D+00 0.3920779565011D+00 + 0.4010665873291D+00 0.4102535030206D+00 0.4196427960037D+00 0.4292386329056D+00 + 0.4390452555139D+00 0.4490669817344D+00 0.4593082065455D+00 0.4697734029478D+00 + 0.4804671229074D+00 0.4913939982930D+00 0.5025587418053D+00 0.5139661478975D+00 + 0.5256210936858D+00 0.5375285398497D+00 0.5496935315191D+00 0.5621211991494D+00 + 0.5748167593807D+00 0.5877855158816D+00 0.6010328601763D+00 0.6145642724519D+00 + 0.6283853223459D+00 0.6425016697124D+00 0.6569190653640D+00 0.6716433517897D+00 + 0.6866804638451D+00 0.7020364294146D+00 0.7177173700432D+00 0.7337295015358D+00 + 0.7500791345223D+00 0.7667726749863D+00 0.7838166247557D+00 0.8012175819522D+00 + 0.8189822413981D+00 0.8371173949781D+00 0.8556299319528D+00 0.8745268392233D+00 + 0.8938152015413D+00 0.9135022016660D+00 0.9335951204611D+00 0.9541013369320D+00 + 0.9750283281989D+00 0.9963836694034D+00 0.1018175033545D+01 0.1040410191245D+01 + 0.1063097010434D+01 0.1086243455959D+01 0.1109857589113D+01 0.1133947567068D+01 + 0.1158521642226D+01 0.1183588161478D+01 0.1209155565357D+01 0.1235232387096D+01 + 0.1261827251583D+01 0.1288948874198D+01 0.1316606059543D+01 0.1344807700058D+01 + 0.1373562774503D+01 0.1402880346326D+01 0.1432769561892D+01 0.1463239648581D+01 + 0.1494299912744D+01 0.1525959737514D+01 0.1558228580466D+01 0.1591115971128D+01 + 0.1624631508323D+01 0.1658784857354D+01 0.1693585747013D+01 0.1729043966423D+01 + 0.1765169361687D+01 0.1801971832361D+01 0.1839461327732D+01 0.1877647842900D+01 + 0.1916541414650D+01 0.1956152117128D+01 0.1996490057294D+01 0.2037565370156D+01 + 0.2079388213778D+01 0.2121968764063D+01 0.2165317209287D+01 0.2209443744401D+01 + 0.2254358565076D+01 0.2300071861494D+01 0.2346593811883D+01 0.2393934575776D+01 + 0.2442104287007D+01 0.2491113046422D+01 0.2540970914303D+01 0.2591687902512D+01 + 0.2643273966329D+01 0.2695738995990D+01 0.2749092807924D+01 0.2803345135669D+01 + 0.2858505620479D+01 0.2914583801597D+01 0.2971589106210D+01 0.3029530839067D+01 + 0.3088418171758D+01 0.3148260131652D+01 0.3209065590491D+01 0.3270843252628D+01 + 0.3333601642916D+01 0.3397349094239D+01 0.3462093734677D+01 0.3527843474314D+01 + 0.3594605991675D+01 0.3662388719796D+01 0.3731198831922D+01 0.3801043226845D+01 + 0.3871928513851D+01 0.3943860997306D+01 0.4016846660867D+01 0.4090891151325D+01 + 0.4165999762069D+01 0.4242177416188D+01 0.4319428649207D+01 0.4397757591456D+01 + 0.4477167950078D+01 0.4557662990695D+01 0.4639245518706D+01 0.4721917860259D+01 + 0.4805681842875D+01 0.4890538775751D+01 0.4976489429741D+01 0.5063534017029D+01 + 0.5151672170500D+01 0.5240902922831D+01 0.5331224685300D+01 0.5422635226341D+01 + 0.5515131649853D+01 0.5608710373282D+01 0.5703367105493D+01 0.5799096824445D+01 + 0.5895893754705D+01 0.5993751344805D+01 0.6092662244478D+01 0.6192618281787D+01 + 0.6293610440184D+01 0.6395628835523D+01 0.6498662693043D+01 0.6602700324378D+01 + 0.6707729104605D+01 0.6813735449365D+01 0.6920704792113D+01 0.7028621561508D+01 + 0.7137469159001D+01 0.7247229936655D+01 0.7357885175242D+01 0.7469415062657D+01 + 0.7581798672707D+01 0.7695013944312D+01 0.7809037661174D+01 0.7923845431963D+01 + 0.8039411671089D+01 0.8155709580084D+01 0.8272711129697D+01 0.8390387042717D+01 + 0.8508706777623D+01 0.8627638513097D+01 0.8747149133491D+01 0.8867204215290D+01 + 0.8987768014662D+01 0.9108803456159D+01 0.9230272122632D+01 0.9352134246452D+01 + 0.9474348702102D+01 0.9596873000219D+01 0.9719663283170D+01 0.9842674322237D+01 + 0.9965859516495D+01 0.1008917089347D+02 0.1021255911164D+02 0.1033597346494D+02 + 0.1045936188917D+02 0.1058267097071D+02 0.1070584595723D+02 0.1082883077086D+02 + 0.1095156802364D+02 0.1107399903549D+02 0.1119606385467D+02 0.1131770128094D+02 + 0.1143884889141D+02 0.1155944306921D+02 0.1167941903504D+02 0.1179871088169D+02 + 0.1191725161162D+02 0.1203497317767D+02 0.1215180652699D+02 0.1226768164819D+02 + 0.1238252762190D+02 0.1249627267470D+02 0.1260884423658D+02 0.1272016900183D+02 + 0.1283017299364D+02 0.1293878163220D+02 0.1304591980662D+02 0.1315151195045D+02 + 0.1325548212101D+02 0.1335775408241D+02 0.1345825139248D+02 0.1355689749341D+02 + 0.1365361580616D+02 0.1374832982878D+02 0.1384096323836D+02 0.1393143999685D+02 + 0.1401968446055D+02 0.1410562149324D+02 0.1418917658296D+02 0.1427027596236D+02 + 0.1434884673246D+02 0.1442481698984D+02 0.1449811595705D+02 0.1456867411624D+02 + 0.1463642334576D+02 0.1470129705971D+02 0.1476323035010D+02 0.1482216013171D+02 + 0.1487802528922D+02 0.1493076682648D+02 0.1498032801783D+02 0.1502665456102D+02 + 0.1506969473168D+02 0.1510939953890D+02 0.1514572288178D+02 0.1517862170662D+02 + 0.1520805616428D+02 0.1523398976771D+02 0.1525638954888D+02 0.1527522621517D+02 + 0.1529047430449D+02 0.1530211233897D+02 0.1531012297669D+02 0.1531449316107D+02 + 0.1531521426746D+02 0.1531228224653D+02 0.1530569776385D+02 0.1529546633542D+02 + 0.1528159845842D+02 0.1526410973678D+02 0.1524302100115D+02 0.1521835842251D+02 + 0.1519015361918D+02 0.1515844375649D+02 0.1512327163857D+02 0.1508468579192D+02 + 0.1504274053993D+02 0.1499749606805D+02 0.1494901847887D+02 0.1489737983673D+02 + 0.1484265820118D+02 0.1478493764889D+02 0.1472430828333D+02 0.1466086623191D+02 + 0.1459471362981D+02 0.1452595859035D+02 0.1445471516108D+02 0.1438110326543D+02 + 0.1430524862934D+02 0.1422728269244D+02 0.1414734250363D+02 0.1406557060035D+02 + 0.1398211487161D+02 0.1389712840422D+02 0.1381076931213D+02 0.1372320054863D+02 + 0.1363458970126D+02 0.1354510876927D+02 0.1345493392372D+02 0.1336424524995D+02 + 0.1327322647273D+02 0.1318206466399D+02 0.1309094993330D+02 0.1300007510143D+02 + 0.1290963535714D+02 0.1281982789752D+02 0.1273085155232D+02 0.1264290639276D+02 + 0.1255619332527D+02 0.1247091367072D+02 0.1238726872994D+02 0.1230545933610D+02 + 0.1222568539485D+02 0.1214814541300D+02 0.1207303601673D+02 0.1200055146031D+02 + 0.1193088312639D+02 0.1186421901898D+02 0.1180074325032D+02 0.1174063552294D+02 + 0.1168407060813D+02 0.1163121782230D+02 0.1158224050260D+02 0.1153729548330D+02 + 0.1149653257447D+02 0.1146009404450D+02 0.1142811410812D+02 0.1140071842164D+02 + 0.1137802358688D+02 0.1136013666576D+02 0.1134715470718D+02 0.1133916428789D+02 + 0.1133624106918D+02 0.1133844937122D+02 0.1134584176671D+02 0.1135845869570D+02 + 0.1137632810322D+02 0.1139946510155D+02 0.1142787165885D+02 0.1146153631568D+02 + 0.1150043393121D+02 0.1154452546053D+02 0.1159375776474D+02 0.1164806345517D+02 + 0.1170736077308D+02 0.1177155350630D+02 0.1184053094390D+02 0.1191416787001D+02 + 0.1199232459792D+02 0.1207484704524D+02 0.1216156685110D+02 0.1225230153582D+02 + 0.1234685470389D+02 0.1244501629046D+02 0.1254656285171D+02 0.1265125789933D+02 + 0.1275885227884D+02 0.1286908459194D+02 0.1298168166226D+02 0.1309635904426D+02 + 0.1321282157449D+02 0.1333076396452D+02 0.1344987143449D+02 0.1356982038622D+02 + 0.1369027911453D+02 0.1381090855534D+02 0.1393136306888D+02 0.1405129125632D+02 + 0.1417033680777D+02 0.1428813937954D+02 0.1440433549856D+02 0.1451855949134D+02 + 0.1463044443513D+02 0.1473962312845D+02 0.1484572907831D+02 0.1494839750107D+02 + 0.1504726633406D+02 0.1514197725464D+02 0.1523217670369D+02 0.1531751690999D+02 + 0.1539765691227D+02 0.1547226357544D+02 0.1554101259751D+02 0.1560358950360D+02 + 0.1565969062367D+02 0.1570902405021D+02 0.1575131057246D+02 0.1578628458359D+02 + 0.1581369495734D+02 0.1583330589058D+02 0.1584489770857D+02 0.1584826762939D+02 + 0.1584323048443D+02 0.1582961939181D+02 0.1580728637957D+02 0.1577610295600D+02 + 0.1573596062412D+02 0.1568677133793D+02 0.1562846789788D+02 0.1556100428352D+02 + 0.1548435592113D+02 0.1539851988472D+02 0.1530351502871D+02 0.1519938205103D+02 + 0.1508618348555D+02 0.1496400362295D+02 0.1483294835964D+02 0.1469314497431D+02 + 0.1454474183222D+02 0.1438790801743D+02 0.1422283289371D+02 0.1404972559501D+02 + 0.1386881444652D+02 0.1368034631816D+02 0.1348458591205D+02 0.1328181498628D+02 + 0.1307233151724D+02 0.1285644880352D+02 0.1263449451412D+02 0.1240680968454D+02 + 0.1217374766427D+02 0.1193567301945D+02 0.1169296039510D+02 0.1144599334102D+02 + 0.1119516310618D+02 0.1094086740628D+02 0.1068350916959D+02 0.1042349526614D+02 + 0.1016123522570D+02 0.9897139949897D+01 0.9631620424036D+01 0.9365086434234D+01 + 0.9097945295485D+01 0.8830600596306D+01 0.8563450965553D+01 0.8296888866978D+01 + 0.8031299426956D+01 0.7767059300707D+01 0.7504535582166D+01 0.7244084762444D+01 + 0.6986051741584D+01 0.6730768898049D+01 0.6478555220073D+01 0.6229715502640D+01 + 0.5984539613520D+01 0.5743301831362D+01 0.5506260258421D+01 0.5273656310051D+01 + 0.5045714282619D+01 0.4822641001004D+01 0.4604625546363D+01 0.4391839064324D+01 + 0.4184434653267D+01 0.3982547331871D+01 0.3786294084591D+01 0.3595773983274D+01 + 0.3411068382667D+01 0.3232241187137D+01 0.3059339185539D+01 0.2892392450785D+01 + 0.2731414800361D+01 0.2576404313726D+01 0.2427343902298D+01 0.2284201927494D+01 + 0.2146932862144D+01 0.2015477990452D+01 0.1889766141574D+01 0.1769714451851D+01 + 0.1655229150677D+01 0.1546206365031D+01 0.1442532937702D+01 0.1344087254359D+01 + 0.1250740074677D+01 0.1162355362893D+01 0.1078791113305D+01 0.9999001664158D+00 + 0.9255310116380D+00 0.8555285726756D+00 0.7897349719813D+00 0.7279902709203D+00 + 0.6701331825702D+00 0.6160017543702D+00 0.5654340181429D+00 0.5182686053198D+00 + 0.4743453255245D+00 0.4335057069869D+00 0.3955934975869D+00 0.3604551256451D+00 + 0.3279401198959D+00 0.2979014883848D+00 0.2701960563326D+00 0.2446847632933D+00 + 0.2212329202050D+00 0.1997104271873D+00 0.1799919531742D+00 0.1619570786872D+00 + 0.1454904032488D+00 0.1304816191044D+00 0.1168255530742D+00 0.1044221784755D+00 + 0.9317659916197D-01 0.8299900779599D-01 0.7380462053330D-01 0.6551359032180D-01 + 0.5805090102992D-01 0.5134624460746D-01 0.4533388345164D-01 0.3995250010293D-01 + 0.3514503633071D-01 0.3085852359054D-01 0.2704390674330D-01 0.2365586282486D-01 + 0.2065261654401D-01 0.1799575406874D-01 0.1565003653805D-01 0.1358321461002D-01 + 0.1176584522885D-01 0.1017111166496D-01 0.8774647755498D-02 0.7554367147507D-02 + 0.6490298225416D-02 0.5564425288265D-02 0.4760536431469D-02 0.4064078483823D-02 + 0.3462019253140D-02 0.2942717244106D-02 0.2495798929730D-02 0.2112043583510D-02 + 0.1783275613010D-02 0.1502264277103D-02 0.1262630618290D-02 0.1058761398246D-02 + 0.8857297885661D-03 0.7392225393744D-03 0.6154733254345D-03 0.5112019523546D-03 + 0.4235590937846D-03 0.3500762237470D-03 0.2886204058570D-03 0.2373536026828D-03 + 0.1946961733584D-03 0.1592942353003D-03 0.1299905760369D-03 0.1057988132781D-03 + 0.8588051503706D-04 0.6952500647092D-04 0.5613160579895D-04 0.4519404786329D-04 + 0.3628687035185D-04 0.2905355415809D-04 0.2319622560364D-04 0.1846674412247D-04 + 0.1465901435452D-04 0.1160237630845D-04 0.9155941237235D-05 0.7203754063583D-05 + 0.5650675548704D-05 0.4418888895851D-05 0.3444946109309D-05 0.2677279196489D-05 + 0.2074110224063D-05 0.1601702343433D-05 0.1232901224104D-05 0.9459229135084D-06 + 0.7233500246102D-06 0.5513033849405D-06 0.4187609114499D-06 0.3169995537591D-06 + 0.2391397226304D-06 0.1797747380809D-06 0.1346705380082D-06 0.1005232267075D-06 + 0.7476405384285D-07 0.5540313611713D-07 0.4090470094196D-07 0.3008787576404D-07 + 0.2204809733378D-07 0.1609509820830D-07 0.1170416651842D-07 0.8477990246133D-08 + 0.6116907264900D-08 0.4395803247583D-08 0.3146245236613D-08 0.2242721315606D-08 + 0.1592086852573D-08 0.1125504128687D-08 0.7923124183526D-09 0.5553861734448D-09 + 0.3873369815712D-09 0.2689789822741D-09 0.1859777913753D-09 0.1280251240549D-09 + 0.8774028842241D-10 0.5986205675576D-10 0.4054596560461D-10 0.2734324399849D-10 + 0.1835852166089D-10 0.1227126849287D-10 0.8165523114487D-11 0.5408788571977D-11 + 0.3566284612311D-11 0.2340509944823D-11 0.1528839561207D-11 0.9939136206719D-12 + 0.6430563168646D-12 0.4140390417575D-12 0.2652795322592D-12 0.1691276289235D-12 + 0.1072881904825D-12 + LSMS: Fe z= 26. xvalws= 2.83661 + 26. 5.42000 10. 0.7012665733723D+00 + -0.1113096740000D+02 0.9815760904632D+00 1001 +-0.5199725933549D+02-0.5199722593516D+02-0.5199719212775D+02-0.5199715790830D+02 +-0.5199712327179D+02-0.5199708821315D+02-0.5199705272721D+02-0.5199701680879D+02 +-0.5199698045259D+02-0.5199694365329D+02-0.5199690640548D+02-0.5199686870371D+02 +-0.5199683054243D+02-0.5199679191604D+02-0.5199675281887D+02-0.5199671324519D+02 +-0.5199667318919D+02-0.5199663264498D+02-0.5199659160662D+02-0.5199655006809D+02 +-0.5199650802327D+02-0.5199646546602D+02-0.5199642239006D+02-0.5199637878910D+02 +-0.5199633465671D+02-0.5199628998644D+02-0.5199624477171D+02-0.5199619900589D+02 +-0.5199615268227D+02-0.5199610579404D+02-0.5199605833433D+02-0.5199601029616D+02 +-0.5199596167248D+02-0.5199591245616D+02-0.5199586263996D+02-0.5199581221659D+02 +-0.5199576117863D+02-0.5199570951860D+02-0.5199565722891D+02-0.5199560430188D+02 +-0.5199555072974D+02-0.5199549650464D+02-0.5199544161860D+02-0.5199538606358D+02 +-0.5199532983141D+02-0.5199527291385D+02-0.5199521530253D+02-0.5199515698899D+02 +-0.5199509796469D+02-0.5199503822094D+02-0.5199497774898D+02-0.5199491653994D+02 +-0.5199485458482D+02-0.5199479187453D+02-0.5199472839987D+02-0.5199466415150D+02 +-0.5199459912001D+02-0.5199453329584D+02-0.5199446666933D+02-0.5199439923070D+02 +-0.5199433097004D+02-0.5199426187733D+02-0.5199419194243D+02-0.5199412115507D+02 +-0.5199404950486D+02-0.5199397698127D+02-0.5199390357366D+02-0.5199382927124D+02 +-0.5199375406311D+02-0.5199367793823D+02-0.5199360088541D+02-0.5199352289335D+02 +-0.5199344395058D+02-0.5199336404552D+02-0.5199328316644D+02-0.5199320130145D+02 +-0.5199311843854D+02-0.5199303456553D+02-0.5199294967012D+02-0.5199286373983D+02 +-0.5199277676204D+02-0.5199268872399D+02-0.5199259961274D+02-0.5199250941520D+02 +-0.5199241811814D+02-0.5199232570813D+02-0.5199223217162D+02-0.5199213749485D+02 +-0.5199204166394D+02-0.5199194466480D+02-0.5199184648318D+02-0.5199174710467D+02 +-0.5199164651467D+02-0.5199154469841D+02-0.5199144164093D+02-0.5199133732709D+02 +-0.5199123174158D+02-0.5199112486888D+02-0.5199101669329D+02-0.5199090719894D+02 +-0.5199079636972D+02-0.5199068418937D+02-0.5199057064140D+02-0.5199045570913D+02 +-0.5199033937569D+02-0.5199022162397D+02-0.5199010243669D+02-0.5198998179634D+02 +-0.5198985968518D+02-0.5198973608528D+02-0.5198961097849D+02-0.5198948434642D+02 +-0.5198935617047D+02-0.5198922643181D+02-0.5198909511137D+02-0.5198896218987D+02 +-0.5198882764776D+02-0.5198869146529D+02-0.5198855362244D+02-0.5198841409897D+02 +-0.5198827287436D+02-0.5198812992787D+02-0.5198798523849D+02-0.5198783878497D+02 +-0.5198769054577D+02-0.5198754049912D+02-0.5198738862297D+02-0.5198723489499D+02 +-0.5198707929260D+02-0.5198692179292D+02-0.5198676237282D+02-0.5198660100886D+02 +-0.5198643767732D+02-0.5198627235421D+02-0.5198610501521D+02-0.5198593563574D+02 +-0.5198576419090D+02-0.5198559065549D+02-0.5198541500400D+02-0.5198523721061D+02 +-0.5198505724919D+02-0.5198487509328D+02-0.5198469071611D+02-0.5198450409057D+02 +-0.5198431518922D+02-0.5198412398430D+02-0.5198393044769D+02-0.5198373455093D+02 +-0.5198353626524D+02-0.5198333556145D+02-0.5198313241005D+02-0.5198292678118D+02 +-0.5198271864460D+02-0.5198250796970D+02-0.5198229472550D+02-0.5198207888065D+02 +-0.5198186040341D+02-0.5198163926164D+02-0.5198141542283D+02-0.5198118885405D+02 +-0.5198095952199D+02-0.5198072739291D+02-0.5198049243268D+02-0.5198025460673D+02 +-0.5198001388008D+02-0.5197977021732D+02-0.5197952358262D+02-0.5197927393969D+02 +-0.5197902125180D+02-0.5197876548179D+02-0.5197850659203D+02-0.5197824454442D+02 +-0.5197797930042D+02-0.5197771082100D+02-0.5197743906666D+02-0.5197716399741D+02 +-0.5197688557277D+02-0.5197660375178D+02-0.5197631849297D+02-0.5197602975435D+02 +-0.5197573749343D+02-0.5197544166721D+02-0.5197514223214D+02-0.5197483914416D+02 +-0.5197453235865D+02-0.5197422183045D+02-0.5197390751386D+02-0.5197358936261D+02 +-0.5197326732986D+02-0.5197294136821D+02-0.5197261142967D+02-0.5197227746566D+02 +-0.5197193942701D+02-0.5197159726396D+02-0.5197125092611D+02-0.5197090036247D+02 +-0.5197054552142D+02-0.5197018635070D+02-0.5196982279742D+02-0.5196945480804D+02 +-0.5196908232835D+02-0.5196870530350D+02-0.5196832367795D+02-0.5196793739548D+02 +-0.5196754639920D+02-0.5196715063151D+02-0.5196675003409D+02-0.5196634454794D+02 +-0.5196593411330D+02-0.5196551866970D+02-0.5196509815593D+02-0.5196467251001D+02 +-0.5196424166924D+02-0.5196380557010D+02-0.5196336414832D+02-0.5196291733886D+02 +-0.5196246507584D+02-0.5196200729261D+02-0.5196154392167D+02-0.5196107489473D+02 +-0.5196060014264D+02-0.5196011959539D+02-0.5195963318213D+02-0.5195914083115D+02 +-0.5195864246984D+02-0.5195813802470D+02-0.5195762742135D+02-0.5195711058447D+02 +-0.5195658743784D+02-0.5195605790428D+02-0.5195552190570D+02-0.5195497936300D+02 +-0.5195443019616D+02-0.5195387432415D+02-0.5195331166495D+02-0.5195274213554D+02 +-0.5195216565186D+02-0.5195158212886D+02-0.5195099148039D+02-0.5195039361929D+02 +-0.5194978845731D+02-0.5194917590512D+02-0.5194855587228D+02-0.5194792826727D+02 +-0.5194729299740D+02-0.5194664996888D+02-0.5194599908676D+02-0.5194534025492D+02 +-0.5194467337605D+02-0.5194399835165D+02-0.5194331508201D+02-0.5194262346621D+02 +-0.5194192340206D+02-0.5194121478614D+02-0.5194049751375D+02-0.5193977147889D+02 +-0.5193903657427D+02-0.5193829269128D+02-0.5193753971998D+02-0.5193677754906D+02 +-0.5193600606586D+02-0.5193522515632D+02-0.5193443470499D+02-0.5193363459497D+02 +-0.5193282470797D+02-0.5193200492421D+02-0.5193117512244D+02-0.5193033517992D+02 +-0.5192948497241D+02-0.5192862437413D+02-0.5192775325774D+02-0.5192687149436D+02 +-0.5192597895350D+02-0.5192507550308D+02-0.5192416100938D+02-0.5192323533703D+02 +-0.5192229834901D+02-0.5192134990660D+02-0.5192038986937D+02-0.5191941809517D+02 +-0.5191843444008D+02-0.5191743875842D+02-0.5191643090272D+02-0.5191541072367D+02 +-0.5191437807015D+02-0.5191333278914D+02-0.5191227472577D+02-0.5191120372323D+02 +-0.5191011962279D+02-0.5190902226377D+02-0.5190791148350D+02-0.5190678711729D+02 +-0.5190564899844D+02-0.5190449695817D+02-0.5190333082564D+02-0.5190215042790D+02 +-0.5190095558984D+02-0.5189974613421D+02-0.5189852188158D+02-0.5189728265027D+02 +-0.5189602825639D+02-0.5189475851376D+02-0.5189347323391D+02-0.5189217222604D+02 +-0.5189085529698D+02-0.5188952225121D+02-0.5188817289074D+02-0.5188680701519D+02 +-0.5188542442165D+02-0.5188402490474D+02-0.5188260825653D+02-0.5188117426651D+02 +-0.5187972272159D+02-0.5187825340601D+02-0.5187676610137D+02-0.5187526058656D+02 +-0.5187373663774D+02-0.5187219402830D+02-0.5187063252881D+02-0.5186905190702D+02 +-0.5186745192779D+02-0.5186583235310D+02-0.5186419294195D+02-0.5186253345036D+02 +-0.5186085363137D+02-0.5185915323490D+02-0.5185743200783D+02-0.5185568969388D+02 +-0.5185392603358D+02-0.5185214076427D+02-0.5185033362005D+02-0.5184850433168D+02 +-0.5184665262663D+02-0.5184477822897D+02-0.5184288085935D+02-0.5184096023497D+02 +-0.5183901606951D+02-0.5183704807313D+02-0.5183505595235D+02-0.5183303941011D+02 +-0.5183099814562D+02-0.5182893185437D+02-0.5182684022811D+02-0.5182472295471D+02 +-0.5182257971822D+02-0.5182041019875D+02-0.5181821407243D+02-0.5181599101140D+02 +-0.5181374068373D+02-0.5181146275334D+02-0.5180915688002D+02-0.5180682271932D+02 +-0.5180445992252D+02-0.5180206813657D+02-0.5179964700406D+02-0.5179719616311D+02 +-0.5179471524738D+02-0.5179220388597D+02-0.5178966170339D+02-0.5178708831946D+02 +-0.5178448334932D+02-0.5178184640332D+02-0.5177917708696D+02-0.5177647500087D+02 +-0.5177373974070D+02-0.5177097089709D+02-0.5176816805562D+02-0.5176533079670D+02 +-0.5176245869553D+02-0.5175955132207D+02-0.5175660824093D+02-0.5175362901129D+02 +-0.5175061318690D+02-0.5174756031596D+02-0.5174446994105D+02-0.5174134159909D+02 +-0.5173817482125D+02-0.5173496913290D+02-0.5173172405350D+02-0.5172843909656D+02 +-0.5172511376955D+02-0.5172174757386D+02-0.5171834000466D+02-0.5171489055089D+02 +-0.5171139869513D+02-0.5170786391358D+02-0.5170428567592D+02-0.5170066344527D+02 +-0.5169699667810D+02-0.5169328482415D+02-0.5168952732633D+02-0.5168572362068D+02 +-0.5168187313622D+02-0.5167797529494D+02-0.5167402951167D+02-0.5167003519397D+02 +-0.5166599174211D+02-0.5166189854893D+02-0.5165775499976D+02-0.5165356047233D+02 +-0.5164931433670D+02-0.5164501595513D+02-0.5164066468202D+02-0.5163625986378D+02 +-0.5163180083878D+02-0.5162728693721D+02-0.5162271748101D+02-0.5161809178376D+02 +-0.5161340915058D+02-0.5160866887803D+02-0.5160387025402D+02-0.5159901255768D+02 +-0.5159409505930D+02-0.5158911702017D+02-0.5158407769252D+02-0.5157897631940D+02 +-0.5157381213454D+02-0.5156858436230D+02-0.5156329221753D+02-0.5155793490542D+02 +-0.5155251162148D+02-0.5154702155133D+02-0.5154146387065D+02-0.5153583774505D+02 +-0.5153014232992D+02-0.5152437677037D+02-0.5151854020107D+02-0.5151263174615D+02 +-0.5150665051906D+02-0.5150059562249D+02-0.5149446614818D+02-0.5148826117687D+02 +-0.5148197977813D+02-0.5147562101026D+02-0.5146918392013D+02-0.5146266754310D+02 +-0.5145607090284D+02-0.5144939301126D+02-0.5144263286832D+02-0.5143578946194D+02 +-0.5142886176786D+02-0.5142184874950D+02-0.5141474935783D+02-0.5140756253123D+02 +-0.5140028719537D+02-0.5139292226307D+02-0.5138546663415D+02-0.5137791919531D+02 +-0.5137027881998D+02-0.5136254436817D+02-0.5135471468638D+02-0.5134678860740D+02 +-0.5133876495020D+02-0.5133064251980D+02-0.5132242010708D+02-0.5131409648871D+02 +-0.5130567042693D+02-0.5129714066947D+02-0.5128850594937D+02-0.5127976498485D+02 +-0.5127091647915D+02-0.5126195912042D+02-0.5125289158153D+02-0.5124371251996D+02 +-0.5123442057763D+02-0.5122501438078D+02-0.5121549253981D+02-0.5120585364912D+02 +-0.5119609628699D+02-0.5118621901542D+02-0.5117622038001D+02-0.5116609890976D+02 +-0.5115585311698D+02-0.5114548149713D+02-0.5113498252865D+02-0.5112435467287D+02 +-0.5111359637380D+02-0.5110270605805D+02-0.5109168213465D+02-0.5108052299493D+02 +-0.5106922701236D+02-0.5105779254242D+02-0.5104621792249D+02-0.5103450147166D+02 +-0.5102264149064D+02-0.5101063626162D+02-0.5099848404809D+02-0.5098618309478D+02 +-0.5097373162749D+02-0.5096112785297D+02-0.5094836995877D+02-0.5093545611319D+02 +-0.5092238446506D+02-0.5090915314370D+02-0.5089576025875D+02-0.5088220390011D+02 +-0.5086848213775D+02-0.5085459302170D+02-0.5084053458184D+02-0.5082630482789D+02 +-0.5081190174924D+02-0.5079732331488D+02-0.5078256747331D+02-0.5076763215246D+02 +-0.5075251525957D+02-0.5073721468113D+02-0.5072172828280D+02-0.5070605390935D+02 +-0.5069018938453D+02-0.5067413251109D+02-0.5065788107066D+02-0.5064143282369D+02 +-0.5062478550946D+02-0.5060793684596D+02-0.5059088452988D+02-0.5057362623659D+02 +-0.5055615962008D+02-0.5053848231296D+02-0.5052059192643D+02-0.5050248605027D+02 +-0.5048416225282D+02-0.5046561808102D+02-0.5044685106037D+02-0.5042785869496D+02 +-0.5040863846753D+02-0.5038918783943D+02-0.5036950425070D+02-0.5034958512010D+02 +-0.5032942784518D+02-0.5030902980231D+02-0.5028838834674D+02-0.5026750081274D+02 +-0.5024636451358D+02-0.5022497674172D+02-0.5020333476886D+02-0.5018143584604D+02 +-0.5015927720379D+02-0.5013685605225D+02-0.5011416958127D+02-0.5009121496061D+02 +-0.5006798934008D+02-0.5004448984965D+02-0.5002071359972D+02-0.4999665768121D+02 +-0.4997231916584D+02-0.4994769510626D+02-0.4992278253631D+02-0.4989757847123D+02 +-0.4987207990790D+02-0.4984628382507D+02-0.4982018718363D+02-0.4979378692689D+02 +-0.4976707998082D+02-0.4974006325436D+02-0.4971273363972D+02-0.4968508801265D+02 +-0.4965712323281D+02-0.4962883614407D+02-0.4960022357485D+02-0.4957128233846D+02 +-0.4954200923347D+02-0.4951240104405D+02-0.4948245454040D+02-0.4945216647907D+02 +-0.4942153360340D+02-0.4939055264392D+02-0.4935922031873D+02-0.4932753333396D+02 +-0.4929548838415D+02-0.4926308215275D+02-0.4923031131251D+02-0.4919717252596D+02 +-0.4916366244583D+02-0.4912977771557D+02-0.4909551496976D+02-0.4906087083463D+02 +-0.4902584192850D+02-0.4899042486230D+02-0.4895461624001D+02-0.4891841265920D+02 +-0.4888181071147D+02-0.4884480698298D+02-0.4880739805492D+02-0.4876958050402D+02 +-0.4873135090303D+02-0.4869270582121D+02-0.4865364182483D+02-0.4861415547763D+02 +-0.4857424334133D+02-0.4853390197609D+02-0.4849312794097D+02-0.4845191779443D+02 +-0.4841026809474D+02-0.4836817540045D+02-0.4832563627082D+02-0.4828264726624D+02 +-0.4823920494866D+02-0.4819530588196D+02-0.4815094663237D+02-0.4810612376882D+02 +-0.4806083386327D+02-0.4801507349109D+02-0.4796883923136D+02-0.4792212766715D+02 +-0.4787493538581D+02-0.4782725897922D+02-0.4777909504402D+02-0.4773044018183D+02 +-0.4768129099939D+02-0.4763164410878D+02-0.4758149612746D+02-0.4753084367846D+02 +-0.4747968339038D+02-0.4742801189747D+02-0.4737582583962D+02-0.4732312186235D+02 +-0.4726989661673D+02-0.4721614675934D+02-0.4716186895211D+02-0.4710705986219D+02 +-0.4705171616177D+02-0.4699583452782D+02-0.4693941164190D+02-0.4688244418984D+02 +-0.4682492886144D+02-0.4676686235010D+02-0.4670824135246D+02-0.4664906256801D+02 +-0.4658932269861D+02-0.4652901844806D+02-0.4646814652160D+02-0.4640670362541D+02 +-0.4634468646605D+02-0.4628209174994D+02-0.4621891618276D+02-0.4615515646890D+02 +-0.4609080931084D+02-0.4602587140857D+02-0.4596033945901D+02-0.4589421015537D+02 +-0.4582748018658D+02-0.4576014623674D+02-0.4569220498453D+02-0.4562365310270D+02 +-0.4555448725754D+02-0.4548470410844D+02-0.4541430030746D+02-0.4534327249894D+02 +-0.4527161731924D+02-0.4519933139644D+02-0.4512641135020D+02-0.4505285379171D+02 +-0.4497865532365D+02-0.4490381254035D+02-0.4482832202800D+02-0.4475218036505D+02 +-0.4467538412269D+02-0.4459792986546D+02-0.4451981415213D+02-0.4444103353661D+02 +-0.4436158456914D+02-0.4428146379762D+02-0.4420066776919D+02-0.4411919303196D+02 +-0.4403703613705D+02-0.4395419364078D+02-0.4387066210714D+02-0.4378643811057D+02 +-0.4370151823889D+02-0.4361589909662D+02-0.4352957730847D+02-0.4344254952321D+02 +-0.4335481241773D+02-0.4326636270148D+02-0.4317719712112D+02-0.4308731246548D+02 +-0.4299670557084D+02-0.4290537332640D+02-0.4281331268008D+02-0.4272052064450D+02 +-0.4262699430328D+02-0.4253273081744D+02-0.4243772743204D+02-0.4234198148295D+02 +-0.4224549040375D+02-0.4214825173266D+02-0.4205026311955D+02-0.4195152233287D+02 +-0.4185202726656D+02-0.4175177594673D+02-0.4165076653825D+02-0.4154899735096D+02 +-0.4144646684556D+02-0.4134317363905D+02-0.4123911650970D+02-0.4113429440134D+02 +-0.4102870642699D+02-0.4092235187170D+02-0.4081523019452D+02-0.4070734102948D+02 +-0.4059868418556D+02-0.4048925964551D+02-0.4037906756345D+02-0.4026810826127D+02 +-0.4015638222367D+02-0.4004389009189D+02-0.3993063265602D+02-0.3981661084605D+02 +-0.3970182572145D+02-0.3958627845957D+02-0.3946997034271D+02-0.3935290274415D+02 +-0.3923507711303D+02-0.3911649495854D+02-0.3899715783325D+02-0.3887706731602D+02 +-0.3875622499468D+02-0.3863463244854D+02-0.3851229123135D+02-0.3838920285454D+02 +-0.3826536877145D+02-0.3814079036252D+02-0.3801546892193D+02-0.3788940564588D+02 +-0.3776260162282D+02-0.3763505782575D+02-0.3750677510712D+02-0.3737775419609D+02 +-0.3724799569874D+02-0.3711750010098D+02-0.3698626777452D+02-0.3685429898571D+02 +-0.3672159390742D+02-0.3658815263366D+02-0.3645397519712D+02-0.3631906158922D+02 +-0.3618341178263D+02-0.3604702575592D+02-0.3590990352022D+02-0.3577204514743D+02 +-0.3563345079978D+02-0.3549412076043D+02-0.3535405546466D+02-0.3521325553143D+02 +-0.3507172179486D+02-0.3492945533538D+02-0.3478645751021D+02-0.3464272998282D+02 +-0.3449827475103D+02-0.3435309417366D+02-0.3420719099522D+02-0.3406056836864D+02 +-0.3391322987564D+02-0.3376517954472D+02-0.3361642186647D+02-0.3346696180620D+02 +-0.3331680481362D+02-0.3316595682967D+02-0.3301442429029D+02-0.3286221412713D+02 +-0.3270933376519D+02-0.3255579111743D+02-0.3240159457626D+02-0.3224675300199D+02 +-0.3209127570839D+02-0.3193517244520D+02-0.3177845337789D+02-0.3162112906469D+02 +-0.3146321043084D+02-0.3130470874049D+02-0.3114563556602D+02-0.3098600275525D+02 +-0.3082582239644D+02-0.3066510678132D+02-0.3050386836645D+02-0.3034211973283D+02 +-0.3017987354422D+02-0.3001714250415D+02-0.2985393931203D+02-0.2969027661833D+02 +-0.2952616697937D+02-0.2936162281167D+02-0.2919665634630D+02-0.2903127958335D+02 +-0.2886550424693D+02-0.2869934174084D+02-0.2853280310526D+02-0.2836589897473D+02 +-0.2819863953773D+02-0.2803103449817D+02-0.2786309303904D+02-0.2769482378861D+02 +-0.2752623478950D+02-0.2735733347081D+02-0.2718812662390D+02-0.2701862038181D+02 +-0.2684882020300D+02-0.2667873085943D+02-0.2650835642953D+02-0.2633770029627D+02 +-0.2616676515065D+02-0.2599555300100D+02-0.2582406518825D+02-0.2565230240760D+02 +-0.2548026473671D+02-0.2530795167081D+02-0.2513536216475D+02-0.2496249468236D+02 +-0.2478934725317D+02-0.2461591753656D+02-0.2444220289343D+02-0.2426820046543D+02 +-0.2409390726149D+02-0.2391932025166D+02-0.2374443646785D+02-0.2356925311108D+02 +-0.2339376766490D+02-0.2321797801399D+02-0.2304188256745D+02-0.2286548038545D+02 +-0.2268877130824D+02-0.2251175608595D+02-0.2233443650742D+02-0.2215681552628D+02 +-0.2197889738183D+02-0.2180068771233D+02-0.2162219365787D+02-0.2144342394979D+02 +-0.2126438898333D+02-0.2108510087020D+02-0.2090557346731D+02-0.2072582237842D+02 +-0.2054586492507D+02-0.2036572008383D+02-0.2018540838721D+02-0.2000495178632D+02 +-0.1982437347418D+02-0.1964369766993D+02-0.1946294936534D+02-0.1928215403655D+02 +-0.1910133732596D+02-0.1892052470048D+02-0.1873974109432D+02-0.1855901054599D+02 +-0.1837835584043D+02-0.1819779816791D+02-0.1801735681180D+02-0.1783704887712D+02 +-0.1765688907054D+02-0.1747688954143D+02-0.1729705979088D+02-0.1711740665366D+02 +-0.1693793435464D+02-0.1675864463858D+02-0.1657953696912D+02-0.1640060879023D+02 +-0.1622185584101D+02-0.1604327251345D+02-0.1586485224112D+02-0.1568658790698D+02 +-0.1550847225815D+02-0.1533049831652D+02-0.1515265977498D+02-0.1497495137064D+02 +-0.1479736922777D+02-0.1461991116509D+02-0.1444257696354D+02-0.1426536859204D+02 +-0.1408829039053D+02-0.1391134921029D+02-0.1373455451271D+02-0.1355791842852D+02 +-0.1338145578000D+02-0.1320518406883D+02-0.1302912343294D+02-0.1285329657548D+02 +-0.1267772866915D+02-0.1250244723902D+02-0.1232748202704D+02-0.1215286484103D+02 +-0.1197862939076D+02-0.1180481111390D+02-0.1163144699390D+02-0.1145857537202D+02 +-0.1128623575544D+02-0.1111446862313D+02-0.1094331523120D+02-0.1077281741893D+02 +-0.1060301741695D+02-0.1043395765867D+02-0.1026568059594D+02-0.1009822851992D+02 +-0.9931643388016D+01-0.9765966657494D+01-0.9601239126630D+01-0.9437500783804D+01 +-0.9274790665145D+01-0.9113146721143D+01-0.8952605692637D+01-0.8793202996488D+01 +-0.8634972621223D+01-0.8477947032870D+01-0.8322157091156D+01-0.8167631976190D+01 +-0.8014399125712D+01-0.7862484182928D+01-0.7711910954941D+01-0.7562701381700D+01 +-0.7414875515397D+01-0.7268451510164D+01-0.7123445621908D+01-0.6979872218083D+01 +-0.6837743797155D+01-0.6697071017494D+01-0.6557862735389D+01-0.6420126051868D+01 +-0.6283866367939D+01-0.6149087447903D+01-0.6015791490301D+01-0.5883979206075D+01 +-0.5753649903482D+01-0.5624801579295D+01-0.5497431015767D+01-0.5371533882856D+01 +-0.5247104845160D+01-0.5124137672997D+01-0.5002625357036D+01-0.4882560225875D+01 +-0.4763934065922D+01-0.4646738242914D+01-0.4530963824379D+01-0.4416601702324D+01 +-0.4303642715373D+01-0.4192077769577D+01-0.4081897957051D+01-0.3973094671574D+01 +-0.3865659720235D+01-0.3759585430172D+01-0.3654864749422D+01-0.3551491340847D+01 +-0.3449459668107D+01-0.3348765072586D+01-0.3249403840234D+01-0.3151373257246D+01 +-0.3054671653584D+01-0.2959298433394D+01-0.2865254091464D+01-0.2772540215041D+01 +-0.2681159470481D+01-0.2591115574456D+01-0.2502413249735D+01-0.2415058165856D+01 +-0.2329056865442D+01-0.2244416677282D+01-0.2161145617791D+01-0.2079252282903D+01 +-0.1998745732939D+01-0.1919635373402D+01-0.1841930835061D+01-0.1765641856999D+01 +-0.1690778176477D+01-0.1617349429599D+01-0.1545365066668D+01-0.1474834285938D+01 +-0.1405765989106D+01-0.1338168761377D+01-0.1272050878314D+01-0.1207420340970D+01 +-0.1144284939980D+01-0.1082652348506D+01-0.1022530243115D+01-0.9639264509202D+00 +-0.9068491206856D+00-0.8513069150257D+00-0.7973092204594D+00-0.7448663718096D+00 +-0.6939898873382D+00-0.6446927110354D+00-0.5969894586386D+00-0.5508966642118D+00 +-0.5064330244547D+00-0.4636196383005D+00-0.4224802397867D+00-0.3830414226144D+00 +-0.3453328552340D+00-0.3093874856944D+00-0.2752417358496D+00-0.2429356848349D+00 +-0.2125132419857D+00-0.1840223095832D+00-0.1575149359670D+00-0.1330474596628D+00 +-0.1106806452250D+00-0.9047981150844D-01-0.7251495305290D-01-0.5686085519230D-01 +-0.4359720340457D-01-0.3280868728101D-01-0.2458509933651D-01-0.1902142869750D-01 +-0.1621794893108D-01 + 0.0000000000000D+00 + 1001 0.2836614688791D+01 + 0.1598626618887D-04 0.1637811173211D-04 0.1677956005434D-04 0.1719084641620D-04 + 0.1761221183946D-04 0.1804390324797D-04 0.1848617361209D-04 0.1893928209666D-04 + 0.1940349421259D-04 0.1987908197209D-04 0.2036632404783D-04 0.2086550593581D-04 + 0.2137692012238D-04 0.2190086625526D-04 0.2243765131869D-04 0.2298758981301D-04 + 0.2355100393846D-04 0.2412822378358D-04 0.2471958751818D-04 0.2532544159105D-04 + 0.2594614093241D-04 0.2658204916146D-04 0.2723353879883D-04 0.2790099148438D-04 + 0.2858479820020D-04 0.2928535949908D-04 0.3000308573866D-04 0.3073839732114D-04 + 0.3149172493897D-04 0.3226350982648D-04 0.3305420401768D-04 0.3386427061034D-04 + 0.3469418403652D-04 0.3554443033974D-04 0.3641550745884D-04 0.3730792551883D-04 + 0.3822220712890D-04 0.3915888768750D-04 0.4011851569514D-04 0.4110165307457D-04 + 0.4210887549898D-04 0.4314077272806D-04 0.4419794895237D-04 0.4528102314603D-04 + 0.4639062942807D-04 0.4752741743259D-04 0.4869205268792D-04 0.4988521700505D-04 + 0.5110760887559D-04 0.5235994387932D-04 0.5364295510181D-04 0.5495739356212D-04 + 0.5630402865099D-04 0.5768364857973D-04 0.5909706083999D-04 0.6054509267482D-04 + 0.6202859156116D-04 0.6354842570410D-04 0.6510548454327D-04 0.6670067927141D-04 + 0.6833494336575D-04 0.7000923313227D-04 0.7172452826318D-04 0.7348183240810D-04 + 0.7528217375905D-04 0.7712660564973D-04 0.7901620716947D-04 0.8095208379201D-04 + 0.8293536801971D-04 0.8496722004344D-04 0.8704882841840D-04 0.8918141075667D-04 + 0.9136621443633D-04 0.9360451732812D-04 0.9589762853955D-04 0.9824688917732D-04 + 0.1006536731282D-03 0.1031193878589D-03 0.1056454752356D-03 0.1082334123631D-03 + 0.1108847124446D-03 0.1136009256626D-03 0.1163836400807D-03 0.1192344825678D-03 + 0.1221551197447D-03 0.1251472589535D-03 0.1282126492510D-03 0.1313530824258D-03 + 0.1345703940401D-03 0.1378664644977D-03 0.1412432201368D-03 0.1447026343501D-03 + 0.1482467287320D-03 0.1518775742535D-03 0.1555972924656D-03 0.1594080567327D-03 + 0.1633120934946D-03 0.1673116835606D-03 0.1714091634338D-03 0.1756069266689D-03 + 0.1799074252612D-03 0.1843131710715D-03 0.1888267372833D-03 0.1934507598976D-03 + 0.1981879392619D-03 0.2030410416382D-03 0.2080129008076D-03 0.2131064197146D-03 + 0.2183245721511D-03 0.2236704044814D-03 0.2291470374085D-03 0.2347576677842D-03 + 0.2405055704620D-03 0.2463941001957D-03 0.2524266935838D-03 0.2586068710611D-03 + 0.2649382389381D-03 0.2714244914907D-03 0.2780694130998D-03 0.2848768804427D-03 + 0.2918508647384D-03 0.2989954340462D-03 0.3063147556210D-03 0.3138130983244D-03 + 0.3214948350957D-03 0.3293644454811D-03 0.3374265182253D-03 0.3456857539255D-03 + 0.3541469677490D-03 0.3628150922174D-03 0.3716951800577D-03 0.3807924071222D-03 + 0.3901120753791D-03 0.3996596159759D-03 0.4094405923759D-03 0.4194607035710D-03 + 0.4297257873723D-03 0.4402418237799D-03 0.4510149384338D-03 0.4620514061488D-03 + 0.4733576545342D-03 0.4849402677008D-03 0.4968059900579D-03 0.5089617302015D-03 + 0.5214145648960D-03 0.5341717431527D-03 0.5472406904058D-03 0.5606290127897D-03 + 0.5743445015189D-03 0.5883951373739D-03 0.6027890952944D-03 0.6175347490845D-03 + 0.6326406762291D-03 0.6481156628287D-03 0.6639687086508D-03 0.6802090323041D-03 + 0.6968460765368D-03 0.7138895136623D-03 0.7313492511154D-03 0.7492354371422D-03 + 0.7675584666262D-03 0.7863289870552D-03 0.8055579046307D-03 0.8252563905249D-03 + 0.8454358872866D-03 0.8661081154025D-03 0.8872850800146D-03 0.9089790777993D-03 + 0.9312027040114D-03 0.9539688596968D-03 0.9772907590787D-03 0.1001181937120D-02 + 0.1025656257266D-02 0.1050727919376D-02 0.1076411467842D-02 0.1102721799898D-02 + 0.1129674174140D-02 0.1157284219234D-02 0.1185567942846D-02 0.1214541740776D-02 + 0.1244222406316D-02 0.1274627139829D-02 0.1305773558557D-02 0.1337679706662D-02 + 0.1370364065511D-02 0.1403845564202D-02 0.1438143590338D-02 0.1473278001071D-02 + 0.1509269134390D-02 0.1546137820696D-02 0.1583905394643D-02 0.1622593707259D-02 + 0.1662225138363D-02 0.1702822609272D-02 0.1744409595811D-02 0.1787010141633D-02 + 0.1830648871856D-02 0.1875351007023D-02 0.1921142377389D-02 0.1968049437560D-02 + 0.2016099281460D-02 0.2065319657674D-02 0.2115738985136D-02 0.2167386369198D-02 + 0.2220291618084D-02 0.2274485259718D-02 0.2329998558968D-02 0.2386863535283D-02 + 0.2445112980758D-02 0.2504780478616D-02 0.2565900422137D-02 0.2628508034021D-02 + 0.2692639386222D-02 0.2758331420235D-02 0.2825621967874D-02 0.2894549772530D-02 + 0.2965154510938D-02 0.3037476815443D-02 0.3111558296805D-02 0.3187441567532D-02 + 0.3265170265758D-02 0.3344789079688D-02 0.3426343772614D-02 0.3509881208518D-02 + 0.3595449378272D-02 0.3683097426458D-02 0.3772875678811D-02 0.3864835670302D-02 + 0.3959030173886D-02 0.4055513229912D-02 0.4154340176228D-02 0.4255567678980D-02 + 0.4359253764139D-02 0.4465457849755D-02 0.4574240778966D-02 0.4685664853774D-02 + 0.4799793869605D-02 0.4916693150679D-02 0.5036429586192D-02 0.5159071667343D-02 + 0.5284689525222D-02 0.5413354969571D-02 0.5545141528447D-02 0.5680124488795D-02 + 0.5818380937976D-02 0.5959989806232D-02 0.6105031910150D-02 0.6253589997120D-02 + 0.6405748790819D-02 0.6561595037743D-02 0.6721217554812D-02 0.6884707278065D-02 + 0.7052157312476D-02 0.7223662982915D-02 0.7399321886279D-02 0.7579233944809D-02 + 0.7763501460637D-02 0.7952229171578D-02 0.8145524308193D-02 0.8343496652159D-02 + 0.8546258595967D-02 0.8753925203987D-02 0.8966614274910D-02 0.9184446405625D-02 + 0.9407545056532D-02 0.9636036618353D-02 0.9870050480443D-02 0.1010971910066D-01 + 0.1035517807679D-01 0.1060656621964D-01 0.1086402562773D-01 0.1112770176365D-01 + 0.1139774353224D-01 0.1167430336039D-01 0.1195753727876D-01 0.1224760500524D-01 + 0.1254467003032D-01 0.1284889970439D-01 0.1316046532693D-01 0.1347954223778D-01 + 0.1380630991035D-01 0.1414095204697D-01 0.1448365667634D-01 0.1483461625316D-01 + 0.1519402775992D-01 0.1556209281101D-01 0.1593901775909D-01 0.1632501380382D-01 + 0.1672029710298D-01 0.1712508888608D-01 0.1753961557037D-01 0.1796410887952D-01 + 0.1839880596480D-01 0.1884394952897D-01 0.1929978795285D-01 0.1976657542466D-01 + 0.2024457207217D-01 0.2073404409773D-01 0.2123526391621D-01 0.2174851029598D-01 + 0.2227406850286D-01 0.2281223044725D-01 0.2336329483437D-01 0.2392756731780D-01 + 0.2450536065622D-01 0.2509699487359D-01 0.2570279742274D-01 0.2632310335239D-01 + 0.2695825547781D-01 0.2760860455504D-01 0.2827450945885D-01 0.2895633736443D-01 + 0.2965446393293D-01 0.3036927350090D-01 0.3110115927374D-01 0.3185052352316D-01 + 0.3261777778880D-01 0.3340334308405D-01 0.3420765010615D-01 0.3503113945065D-01 + 0.3587426183034D-01 0.3673747829865D-01 0.3762126047769D-01 0.3852609079097D-01 + 0.3945246270088D-01 0.4040088095104D-01 0.4137186181354D-01 0.4236593334129D-01 + 0.4338363562539D-01 0.4442552105773D-01 0.4549215459892D-01 0.4658411405156D-01 + 0.4770199033892D-01 0.4884638778930D-01 0.5001792442598D-01 0.5121723226285D-01 + 0.5244495760600D-01 0.5370176136113D-01 0.5498831934710D-01 0.5630532261547D-01 + 0.5765347777634D-01 0.5903350733053D-01 0.6044615000808D-01 0.6189216111333D-01 + 0.6337231287660D-01 0.6488739481255D-01 0.6643821408534D-01 0.6802559588074D-01 + 0.6965038378520D-01 0.7131344017202D-01 0.7301564659477D-01 0.7475790418794D-01 + 0.7654113407504D-01 0.7836627778418D-01 0.8023429767126D-01 0.8214617735082D-01 + 0.8410292213472D-01 0.8610555947870D-01 0.8815513943692D-01 0.9025273512458D-01 + 0.9239944318872D-01 0.9459638428731D-01 0.9684470357665D-01 0.9914557120730D-01 + 0.1015001828285D+00 0.1039097601012D+00 0.1063755512199D+00 0.1088988314432D+00 + 0.1114809036333D+00 0.1141230988046D+00 0.1168267766808D+00 0.1195933262618D+00 + 0.1224241663995D+00 0.1253207463829D+00 0.1282845465323D+00 0.1313170788032D+00 + 0.1344198873997D+00 0.1375945493969D+00 0.1408426753736D+00 0.1441659100540D+00 + 0.1475659329592D+00 0.1510444590687D+00 0.1546032394913D+00 0.1582440621455D+00 + 0.1619687524504D+00 0.1657791740259D+00 0.1696772294024D+00 0.1736648607413D+00 + 0.1777440505639D+00 0.1819168224913D+00 0.1861852419934D+00 0.1905514171477D+00 + 0.1950174994079D+00 0.1995856843825D+00 0.2042582126216D+00 0.2090373704153D+00 + 0.2139254905996D+00 0.2189249533727D+00 0.2240381871206D+00 0.2292676692511D+00 + 0.2346159270373D+00 0.2400855384702D+00 0.2456791331195D+00 0.2513993930030D+00 + 0.2572490534650D+00 0.2632309040619D+00 0.2693477894567D+00 0.2756026103203D+00 + 0.2819983242414D+00 0.2885379466425D+00 0.2952245517036D+00 0.3020612732919D+00 + 0.3090513058988D+00 0.3161979055816D+00 0.3235043909117D+00 0.3309741439278D+00 + 0.3386106110936D+00 0.3464173042601D+00 0.3543978016321D+00 0.3625557487372D+00 + 0.3708948593986D+00 0.3794189167096D+00 0.3881317740107D+00 0.3970373558664D+00 + 0.4061396590442D+00 0.4154427534922D+00 0.4249507833165D+00 0.4346679677569D+00 + 0.4445986021598D+00 0.4547470589488D+00 0.4651177885906D+00 0.4757153205561D+00 + 0.4865442642761D+00 0.4976093100896D+00 0.5089152301849D+00 0.5204668795314D+00 + 0.5322691968020D+00 0.5443272052836D+00 0.5566460137763D+00 0.5692308174785D+00 + 0.5820868988569D+00 0.5952196285013D+00 0.6086344659612D+00 0.6223369605634D+00 + 0.6363327522093D+00 0.6506275721504D+00 0.6652272437393D+00 0.6801376831563D+00 + 0.6953649001084D+00 0.7109149984994D+00 0.7267941770692D+00 0.7430087300008D+00 + 0.7595650474918D+00 0.7764696162900D+00 0.7937290201893D+00 0.8113499404852D+00 + 0.8293391563858D+00 0.8477035453783D+00 0.8664500835461D+00 0.8855858458360D+00 + 0.9051180062714D+00 0.9250538381101D+00 0.9454007139424D+00 0.9661661057288D+00 + 0.9873575847722D+00 0.1008982821623D+01 0.1031049585912D+01 0.1053565746114D+01 + 0.1076539269227D+01 0.1099978220381D+01 0.1123890762349D+01 0.1148285154986D+01 + 0.1173169754564D+01 0.1198553013022D+01 0.1224443477111D+01 0.1250849787437D+01 + 0.1277780677401D+01 0.1305244972027D+01 0.1333251586673D+01 0.1361809525624D+01 + 0.1390927880564D+01 0.1420615828917D+01 0.1450882632056D+01 0.1481737633376D+01 + 0.1513190256224D+01 0.1545250001685D+01 0.1577926446209D+01 0.1611229239093D+01 + 0.1645168099789D+01 0.1679752815055D+01 0.1714993235926D+01 0.1750899274516D+01 + 0.1787480900625D+01 0.1824748138171D+01 0.1862711061420D+01 0.1901379791016D+01 + 0.1940764489813D+01 0.1980875358483D+01 0.2021722630925D+01 0.2063316569433D+01 + 0.2105667459651D+01 0.2148785605281D+01 0.2192681322560D+01 0.2237364934490D+01 + 0.2282846764806D+01 0.2329137131698D+01 0.2376246341263D+01 0.2424184680690D+01 + 0.2472962411160D+01 0.2522589760477D+01 0.2573076915406D+01 0.2624434013709D+01 + 0.2676671135898D+01 0.2729798296668D+01 0.2783825436028D+01 0.2838762410115D+01 + 0.2894618981683D+01 0.2951404810270D+01 0.3009129442029D+01 0.3067802299226D+01 + 0.3127432669396D+01 0.3188029694153D+01 0.3249602357650D+01 0.3312159474684D+01 + 0.3375709678445D+01 0.3440261407905D+01 0.3505822894840D+01 0.3572402150483D+01 + 0.3640006951816D+01 0.3708644827480D+01 0.3778323043312D+01 0.3849048587528D+01 + 0.3920828155496D+01 0.3993668134162D+01 0.4067574586086D+01 0.4142553233106D+01 + 0.4218609439636D+01 0.4295748195581D+01 0.4373974098893D+01 0.4453291337757D+01 + 0.4533703672416D+01 0.4615214416640D+01 0.4697826418848D+01 0.4781542042878D+01 + 0.4866363148424D+01 0.4952291071149D+01 0.5039326602467D+01 0.5127469969027D+01 + 0.5216720811890D+01 0.5307078165422D+01 0.5398540435921D+01 0.5491105379972D+01 + 0.5584770082572D+01 0.5679530935024D+01 0.5775383612621D+01 0.5872323052147D+01 + 0.5970343429205D+01 0.6069438135409D+01 0.6169599755443D+01 0.6270820044036D+01 + 0.6373089902857D+01 0.6476399357377D+01 0.6580737533720D+01 0.6686092635526D+01 + 0.6792451920879D+01 0.6899801679319D+01 0.7008127208977D+01 0.7117412793879D+01 + 0.7227641681453D+01 0.7338796060285D+01 0.7450857038158D+01 0.7563804620439D+01 + 0.7677617688846D+01 0.7792273980645D+01 0.7907750068343D+01 0.8024021339914D+01 + 0.8141061979625D+01 0.8258844949512D+01 0.8377341971576D+01 0.8496523510747D+01 + 0.8616358758691D+01 0.8736815618520D+01 0.8857860690475D+01 0.8979459258646D+01 + 0.9101575278812D+01 0.9224171367455D+01 0.9347208792049D+01 0.9470647462666D+01 + 0.9594445925016D+01 0.9718561354966D+01 0.9842949554644D+01 0.9967564950192D+01 + 0.1009236059127D+02 0.1021728815237D+02 0.1034229793607D+02 0.1046733887825D+02 + 0.1059235855544D+02 0.1071730319427D+02 0.1084211768328D+02 0.1096674558702D+02 + 0.1109112916256D+02 0.1121520937866D+02 0.1133892593738D+02 0.1146221729856D+02 + 0.1158502070698D+02 0.1170727222247D+02 0.1182890675296D+02 0.1194985809057D+02 + 0.1207005895084D+02 0.1218944101517D+02 0.1230793497657D+02 0.1242547058869D+02 + 0.1254197671840D+02 0.1265738140176D+02 0.1277161190362D+02 0.1288459478081D+02 + 0.1299625594900D+02 0.1310652075331D+02 0.1321531404264D+02 0.1332256024790D+02 + 0.1342818346392D+02 0.1353210753539D+02 0.1363425614657D+02 0.1373455291487D+02 + 0.1383292148845D+02 0.1392928564753D+02 0.1402356940967D+02 0.1411569713886D+02 + 0.1420559365839D+02 0.1429318436752D+02 0.1437839536176D+02 0.1446115355683D+02 + 0.1454138681616D+02 0.1461902408183D+02 0.1469399550879D+02 0.1476623260234D+02 + 0.1483566835874D+02 0.1490223740862D+02 0.1496587616324D+02 0.1502652296335D+02 + 0.1508411823033D+02 0.1513860461964D+02 0.1518992717607D+02 0.1523803349085D+02 + 0.1528287386008D+02 0.1532440144437D+02 0.1536257242936D+02 0.1539734618676D+02 + 0.1542868543569D+02 0.1545655640383D+02 0.1548092898813D+02 0.1550177691467D+02 + 0.1551907789722D+02 0.1553281379422D+02 0.1554297076356D+02 0.1554953941489D+02 + 0.1555251495893D+02 0.1555189735327D+02 0.1554769144419D+02 0.1553990710411D+02 + 0.1552855936394D+02 0.1551366853998D+02 0.1549526035481D+02 0.1547336605149D+02 + 0.1544802250069D+02 0.1541927230006D+02 0.1538716386537D+02 0.1535175151274D+02 + 0.1531309553145D+02 0.1527126224676D+02 0.1522632407210D+02 0.1517835955015D+02 + 0.1512745338216D+02 0.1507369644493D+02 0.1501718579498D+02 0.1495802465935D+02 + 0.1489632241235D+02 0.1483219453796D+02 0.1476576257726D+02 0.1469715406037D+02 + 0.1462650242257D+02 0.1455394690404D+02 0.1447963243292D+02 0.1440370949124D+02 + 0.1432633396341D+02 0.1424766696700D+02 0.1416787466548D+02 0.1408712806276D+02 + 0.1400560277928D+02 0.1392347880961D+02 0.1384094026141D+02 0.1375817507575D+02 + 0.1367537472878D+02 0.1359273391494D+02 0.1351045021168D+02 0.1342872372603D+02 + 0.1334775672335D+02 0.1326775323831D+02 0.1318891866889D+02 0.1311145935354D+02 + 0.1303558213227D+02 0.1296149389218D+02 0.1288940109812D+02 0.1281950930932D+02 + 0.1275202268275D+02 0.1268714346418D+02 0.1262507146790D+02 0.1256600354618D+02 + 0.1251013304962D+02 0.1245764927962D+02 0.1240873693415D+02 0.1236357554835D+02 + 0.1232233893123D+02 0.1228519460012D+02 0.1225230321423D+02 0.1222381800914D+02 + 0.1219988423372D+02 0.1218063859146D+02 0.1216620868761D+02 0.1215671248440D+02 + 0.1215225776587D+02 0.1215294161441D+02 0.1215884990082D+02 0.1217005679005D+02 + 0.1218662426432D+02 0.1220860166592D+02 0.1223602526152D+02 0.1226891783002D+02 + 0.1230728827599D+02 0.1235113127066D+02 0.1240042692236D+02 0.1245514047854D+02 + 0.1251522206101D+02 0.1258060643649D+02 0.1265121282407D+02 0.1272694474149D+02 + 0.1280768989175D+02 0.1289332009177D+02 0.1298369124446D+02 0.1307864335576D+02 + 0.1317800059774D+02 0.1328157141918D+02 0.1338914870447D+02 0.1350050998187D+02 + 0.1361541768187D+02 0.1373361944641D+02 0.1385484848921D+02 0.1397882400777D+02 + 0.1410525164712D+02 0.1423382401521D+02 0.1436422124992D+02 0.1449611163719D+02 + 0.1462915227971D+02 0.1476298981549D+02 0.1489726118526D+02 0.1503159444761D+02 + 0.1516560964047D+02 0.1529891968742D+02 0.1543113134699D+02 0.1556184620304D+02 + 0.1569066169409D+02 0.1581717217909D+02 0.1594097003721D+02 0.1606164679883D+02 + 0.1617879430470D+02 0.1629200589034D+02 0.1640087759210D+02 0.1650500937158D+02 + 0.1660400635475D+02 0.1669748008180D+02 0.1678504976397D+02 0.1686634354318D+02 + 0.1694099975023D+02 0.1700866815722D+02 0.1706901121995D+02 0.1712170530551D+02 + 0.1716644190073D+02 0.1720292879668D+02 0.1723089124472D+02 0.1725007307918D+02 + 0.1726023780221D+02 0.1726116962586D+02 0.1725267446698D+02 0.1723458089009D+02 + 0.1720674099385D+02 0.1716903123658D+02 0.1712135319652D+02 0.1706363426251D+02 + 0.1699582825124D+02 0.1691791594684D+02 0.1682990555941D+02 0.1673183309876D+02 + 0.1662376266021D+02 0.1650578661937D+02 0.1637802573319D+02 0.1624062914474D+02 + 0.1609377428977D+02 0.1593766670295D+02 0.1577253972265D+02 0.1559865409292D+02 + 0.1541629746210D+02 0.1522578377777D+02 0.1502745257803D+02 0.1482166817985D+02 + 0.1460881876533D+02 0.1438931536743D+02 0.1416359075704D+02 0.1393209823375D+02 + 0.1369531032331D+02 0.1345371738499D+02 0.1320782613279D+02 0.1295815807474D+02 + 0.1270524787518D+02 0.1244964164515D+02 0.1219189516675D+02 0.1193257205762D+02 + 0.1167224188203D+02 0.1141147821583D+02 0.1115085667239D+02 0.1089095289759D+02 + 0.1063234054176D+02 0.1037558921706D+02 0.1012126244901D+02 0.9869915631007D+01 + 0.9622093990930D+01 0.9378330579111D+01 0.9139144286880D+01 0.8905037905086D+01 + 0.8676496231907D+01 0.8453984239172D+01 0.8237945306322D+01 0.8028799530926D+01 + 0.7826942124412D+01 0.7632741901354D+01 0.7446539870411D+01 0.7268647934220D+01 + 0.7099347705649D+01 0.6938889446731D+01 0.6787491136317D+01 0.6645337671776D+01 + 0.6512580209419D+01 0.6389335647588D+01 0.6275686255669D+01 0.6171679451478D+01 + 0.6077327728725D+01 0.5992608735473D+01 0.5917465503690D+01 0.5851806829220D+01 + 0.5795507800710D+01 0.5748410475209D+01 0.5710324697441D+01 0.5681029058959D+01 + 0.5660271992662D+01 0.5647772997463D+01 0.5643223987203D+01 0.5646290757227D+01 + 0.5656614561457D+01 0.5673813792161D+01 0.5697485754083D+01 0.5727208524074D+01 + 0.5762542886878D+01 0.5803034337319D+01 0.5848215138709D+01 0.5897606427015D+01 + 0.5950720350005D+01 0.6007062230410D+01 0.6066132741965D+01 0.6127430087125D+01 + 0.6190452165229D+01 0.6254698719938D+01 0.6319673454917D+01 0.6384886106934D+01 + 0.6449854465807D+01 0.6514106331021D+01 0.6577181395226D+01 0.6638633045336D+01 + 0.6698030072523D+01 0.6754958282973D+01 0.6809022002012D+01 0.6859845464883D+01 + 0.6907074088248D+01 0.6950375617310D+01 0.6989441144261D+01 0.7023985994655D+01 + 0.7053750479156D+01 0.7078500509023D+01 0.7098028074543D+01 0.7112151586554D+01 + 0.7120716081994D+01 0.7123593295311D+01 0.7120681598340D+01 0.7111905812042D+01 + 0.7097216894222D+01 0.7076591508032D+01 0.7050031476696D+01 0.7017563130456D+01 + 0.6979236552272D+01 0.6935124729251D+01 0.6885322617162D+01 0.6829946125737D+01 + 0.6769131032689D+01 0.6703031834596D+01 0.6631820542913D+01 0.6555685433431D+01 + 0.6474829757527D+01 0.6389470423460D+01 0.6299836655899D+01 0.6206168641644D+01 + 0.6108716169362D+01 0.6007737270816D+01 0.5903496870858D+01 0.5796265453023D+01 + 0.5686317747290D+01 0.5573931446095D+01 0.5459385954329D+01 0.5342961178578D+01 + 0.5224936360417D+01 0.5105588958136D+01 0.4985193580759D+01 0.4864020977799D+01 + 0.4742337087692D+01 0.4620402147390D+01 0.4498469865160D+01 0.4376786658152D+01 + 0.4255590955908D+01 0.4135112570529D+01 0.4015572133827D+01 0.3897180601426D+01 + 0.3780138823368D+01 0.3664637180481D+01 0.3550855285419D+01 0.3438961746986D+01 + 0.3329113996100D+01 0.3221458171469D+01 0.3116129062854D+01 0.3013250109560D+01 + 0.2912933451636D+01 0.2815280031090D+01 0.2720379740294D+01 0.2628311614634D+01 + 0.2539144066379D+01 0.2452935156647D+01 0.2369732902317D+01 0.2289575614693D+01 + 0.2212492266698D+01 0.2138502885415D+01 0.2067618966758D+01 0.1999843909162D+01 + 0.1935173463164D+01 0.1873596193863D+01 0.1815093953307D+01 0.1759642359947D+01 + 0.1707211282422D+01 0.1657765325023D+01 0.1611264312347D+01 0.1567663770758D+01 + 0.1526915404432D+01 0.1488967563909D+01 0.1453765705230D+01 0.1421252837895D+01 + 0.1391369960044D+01 0.1364056479430D+01 0.1339250618922D+01 0.1316889805422D+01 + 0.1296911041268D+01 0.1279251257337D+01 0.1263847647221D+01 0.1250637981985D+01 + 0.1239560905171D+01 0.1230556207823D+01 0.1223565083428D+01 0.1218530362775D+01 + 0.1215396728828D+01 0.1214110911762D+01 0.1214621864395D+01 0.1216880918284D+01 + 0.1220841920766D+01 0.1226461353243D+01 0.1233698431006D+01 0.1242515184836D+01 + 0.1252876524611D+01 0.1264750285030D+01 0.1278107253522D+01 0.1292921180265D+01 + 0.1309168770131D+01 0.1326829656191D+01 0.1345886354290D+01 0.1366324197935D+01 + 0.1388131252591D+01 0.1411298208169D+01 0.1435818248275D+01 0.1461686894446D+01 + 0.1488901823316D+01 0.1517462654275D+01 0.1547370704843D+01 0.1578628710547D+01 + 0.1611240505685D+01 0.1645210660926D+01 0.1680544073202D+01 0.1717245502894D+01 + 0.1755319052726D+01 + 7 1001 + 1 0 -1 -507.15821 + 2 0 -1 -57.80364 + 2 1 1 -49.78808 + 2 1 -2 -49.78808 + 3 0 -1 -5.34797 + 3 1 1 -3.00900 + 3 1 -2 -3.00900 + 0.1578932959456D-04 0.1617634795110D-04 0.1657285078899D-04 0.1697907047071D-04 + 0.1739524504883D-04 0.1782161840532D-04 0.1825844039419D-04 0.1870596698759D-04 + 0.1916446042557D-04 0.1963418936941D-04 0.2011542905876D-04 0.2060846147258D-04 + 0.2111357549406D-04 0.2163106707952D-04 0.2216123943143D-04 0.2270440317577D-04 + 0.2326087654355D-04 0.2383098555694D-04 0.2441506421980D-04 0.2501345471295D-04 + 0.2562650759423D-04 0.2625458200335D-04 0.2689804587184D-04 0.2755727613809D-04 + 0.2823265896764D-04 0.2892458997884D-04 0.2963347447409D-04 0.3035972767660D-04 + 0.3110377497309D-04 0.3186605216228D-04 0.3264700570953D-04 0.3344709300765D-04 + 0.3426678264415D-04 0.3510655467489D-04 0.3596690090459D-04 0.3684832517397D-04 + 0.3775134365412D-04 0.3867648514790D-04 0.3962429139876D-04 0.4059531740708D-04 + 0.4159013175427D-04 0.4260931693473D-04 0.4365346969592D-04 0.4472320138675D-04 + 0.4581913831449D-04 0.4694192211032D-04 0.4809221010386D-04 0.4927067570682D-04 + 0.5047800880601D-04 0.5171491616593D-04 0.5298212184117D-04 0.5428036759892D-04 + 0.5561041335173D-04 0.5697303760084D-04 0.5836903789035D-04 0.5979923127242D-04 + 0.6126445478382D-04 0.6276556593416D-04 0.6430344320595D-04 0.6587898656688D-04 + 0.6749311799458D-04 0.6914678201418D-04 0.7084094624900D-04 0.7257660198459D-04 + 0.7435476474655D-04 0.7617647489249D-04 0.7804279821832D-04 0.7995482657935D-04 + 0.8191367852653D-04 0.8392049995820D-04 0.8597646478768D-04 0.8808277562713D-04 + 0.9024066448810D-04 0.9245139349907D-04 0.9471625564056D-04 0.9703657549804D-04 + 0.9941371003322D-04 0.1018490493741D-03 0.1043440176244D-03 0.1069000736923D-03 + 0.1095187121398D-03 0.1122014640523D-03 0.1149498979301D-03 0.1177656206006D-03 + 0.1206502781532D-03 0.1236055568971D-03 0.1266331843424D-03 0.1297349302043D-03 + 0.1329126074328D-03 0.1361680732666D-03 0.1395032303133D-03 0.1429200276552D-03 + 0.1464204619824D-03 0.1500065787534D-03 0.1536804733837D-03 0.1574442924637D-03 + 0.1613002350057D-03 0.1652505537212D-03 0.1692975563300D-03 0.1734436069002D-03 + 0.1776911272208D-03 0.1820425982087D-03 0.1865005613483D-03 0.1910676201671D-03 + 0.1957464417472D-03 0.2005397582725D-03 0.2054503686146D-03 0.2104811399563D-03 + 0.2156350094551D-03 0.2209149859469D-03 0.2263241516906D-03 0.2318656641554D-03 + 0.2375427578517D-03 0.2433587462059D-03 0.2493170234808D-03 0.2554210667424D-03 + 0.2616744378749D-03 0.2680807856442D-03 0.2746438478108D-03 0.2813674532951D-03 + 0.2882555243942D-03 0.2953120790528D-03 0.3025412331888D-03 0.3099472030755D-03 + 0.3175343077815D-03 0.3253069716691D-03 0.3332697269540D-03 0.3414272163261D-03 + 0.3497841956345D-03 0.3583455366366D-03 0.3671162298143D-03 0.3761013872582D-03 + 0.3853062456213D-03 0.3947361691442D-03 0.4043966527534D-03 0.4142933252347D-03 + 0.4244319524825D-03 0.4348184408289D-03 0.4454588404517D-03 0.4563593488658D-03 + 0.4675263144981D-03 0.4789662403494D-03 0.4906857877441D-03 0.5026917801706D-03 + 0.5149912072142D-03 0.5275912285851D-03 0.5404991782430D-03 0.5537225686217D-03 + 0.5672690949553D-03 0.5811466397084D-03 0.5953632771133D-03 0.6099272778161D-03 + 0.6248471136357D-03 0.6401314624356D-03 0.6557892131146D-03 0.6718294707169D-03 + 0.6882615616648D-03 0.7050950391179D-03 0.7223396884606D-03 0.7400055329221D-03 + 0.7581028393308D-03 0.7766421240073D-03 0.7956341587992D-03 0.8150899772600D-03 + 0.8350208809774D-03 0.8554384460526D-03 0.8763545297357D-03 0.8977812772195D-03 + 0.9197311285973D-03 0.9422168259864D-03 0.9652514208232D-03 0.9888482813323D-03 + 0.1013021100176D-02 0.1037783902283D-02 0.1063151052873D-02 0.1089137265662D-02 + 0.1115757611271D-02 0.1143027525840D-02 0.1170962819832D-02 0.1199579687069D-02 + 0.1228894713965D-02 0.1258924888992D-02 0.1289687612363D-02 0.1321200705955D-02 + 0.1353482423462D-02 0.1386551460792D-02 0.1420426966714D-02 0.1455128553758D-02 + 0.1490676309370D-02 0.1527090807340D-02 0.1564393119499D-02 0.1602604827694D-02 + 0.1641748036045D-02 0.1681845383501D-02 0.1722920056689D-02 0.1764995803067D-02 + 0.1808096944397D-02 0.1852248390528D-02 0.1897475653516D-02 0.1943804862068D-02 + 0.1991262776341D-02 0.2039876803084D-02 0.2089675011139D-02 0.2140686147310D-02 + 0.2192939652612D-02 0.2246465678898D-02 0.2301295105883D-02 0.2357459558570D-02 + 0.2414991425088D-02 0.2473923874952D-02 0.2534290877748D-02 0.2596127222272D-02 + 0.2659468536107D-02 0.2724351305669D-02 0.2790812896722D-02 0.2858891575380D-02 + 0.2928626529601D-02 0.3000057891183D-02 0.3073226758287D-02 0.3148175218478D-02 + 0.3224946372315D-02 0.3303584357493D-02 0.3384134373548D-02 0.3466642707150D-02 + 0.3551156757975D-02 0.3637725065197D-02 0.3726397334591D-02 0.3817224466277D-02 + 0.3910258583103D-02 0.4005553059702D-02 0.4103162552220D-02 0.4203143028740D-02 + 0.4305551800419D-02 0.4410447553342D-02 0.4517890381130D-02 0.4627941818293D-02 + 0.4740664874373D-02 0.4856124068869D-02 0.4974385466980D-02 0.5095516716174D-02 + 0.5219587083607D-02 0.5346667494409D-02 0.5476830570859D-02 0.5610150672457D-02 + 0.5746703936938D-02 0.5886568322220D-02 0.6029823649328D-02 0.6176551646304D-02 + 0.6326835993134D-02 0.6480762367704D-02 0.6638418492820D-02 0.6799894184302D-02 + 0.6965281400189D-02 0.7134674291071D-02 0.7308169251573D-02 0.7485864973024D-02 + 0.7667862497328D-02 0.7854265272064D-02 0.8045179206856D-02 0.8240712731015D-02 + 0.8440976852509D-02 0.8646085218267D-02 0.8856154175863D-02 0.9071302836595D-02 + 0.9291653140005D-02 0.9517329919855D-02 0.9748460971605D-02 0.9985177121417D-02 + 0.1022761229672D-01 0.1047590359836D-01 0.1073019137440D-01 0.1099061929557D-01 + 0.1125733443240D-01 0.1153048733414D-01 0.1181023210935D-01 0.1209672650847D-01 + 0.1239013200802D-01 0.1269061389691D-01 0.1299834136447D-01 0.1331348759064D-01 + 0.1363622983799D-01 0.1396674954596D-01 0.1430523242703D-01 0.1465186856518D-01 + 0.1500685251642D-01 0.1537038341158D-01 0.1574266506141D-01 0.1612390606396D-01 + 0.1651431991433D-01 0.1691412511688D-01 0.1732354529980D-01 0.1774280933235D-01 + 0.1817215144455D-01 0.1861181134949D-01 0.1906203436843D-01 0.1952307155847D-01 + 0.1999517984311D-01 0.2047862214561D-01 0.2097366752525D-01 0.2148059131652D-01 + 0.2199967527136D-01 0.2253120770443D-01 0.2307548364156D-01 0.2363280497129D-01 + 0.2420348059982D-01 0.2478782660912D-01 0.2538616641851D-01 0.2599883094969D-01 + 0.2662615879522D-01 0.2726849639066D-01 0.2792619819027D-01 0.2859962684654D-01 + 0.2928915339338D-01 0.2999515743329D-01 0.3071802732834D-01 0.3145816039529D-01 + 0.3221596310468D-01 0.3299185128412D-01 0.3378625032583D-01 0.3459959539841D-01 + 0.3543233166312D-01 0.3628491449450D-01 0.3715780970564D-01 0.3805149377798D-01 + 0.3896645409592D-01 0.3990318918615D-01 0.4086220896189D-01 0.4184403497205D-01 + 0.4284920065553D-01 0.4387825160053D-01 0.4493174580921D-01 0.4601025396754D-01 + 0.4711435972064D-01 0.4824465995358D-01 0.4940176507775D-01 0.5058629932291D-01 + 0.5179890103500D-01 0.5304022297983D-01 0.5431093265271D-01 0.5561171259412D-01 + 0.5694326071150D-01 0.5830629060734D-01 0.5970153191354D-01 0.6112973063224D-01 + 0.6259164948312D-01 0.6408806825744D-01 0.6561978417865D-01 0.6718761226992D-01 + 0.6879238572857D-01 0.7043495630748D-01 0.7211619470366D-01 0.7383699095398D-01 + 0.7559825483828D-01 0.7740091628977D-01 0.7924592581306D-01 0.8113425490972D-01 + 0.8306689651155D-01 0.8504486542163D-01 0.8706919876330D-01 0.8914095643707D-01 + 0.9126122158564D-01 0.9343110106711D-01 0.9565172593635D-01 0.9792425193488D-01 + 0.1002498599890D+00 0.1026297567168D+00 0.1050651749430D+00 0.1075573742238D+00 + 0.1101076413788D+00 0.1127172910336D+00 0.1153876661698D+00 0.1181201386851D+00 + 0.1209161099615D+00 0.1237770114438D+00 0.1267043052262D+00 0.1296994846489D+00 + 0.1327640749039D+00 0.1358996336497D+00 0.1391077516364D+00 0.1423900533393D+00 + 0.1457481976027D+00 0.1491838782929D+00 0.1526988249610D+00 0.1562948035154D+00 + 0.1599736169034D+00 0.1637371058034D+00 0.1675871493258D+00 0.1715256657242D+00 + 0.1755546131161D+00 0.1796759902133D+00 0.1838918370616D+00 0.1882042357907D+00 + 0.1926153113728D+00 0.1971272323921D+00 0.2017422118221D+00 0.2064625078134D+00 + 0.2112904244906D+00 0.2162283127584D+00 0.2212785711166D+00 0.2264436464843D+00 + 0.2317260350331D+00 0.2371282830291D+00 0.2426529876830D+00 0.2483027980092D+00 + 0.2540804156934D+00 0.2599885959670D+00 0.2660301484910D+00 0.2722079382463D+00 + 0.2785248864321D+00 0.2849839713712D+00 0.2915882294217D+00 0.2983407558965D+00 + 0.3052447059874D+00 0.3123032956963D+00 0.3195198027716D+00 0.3268975676495D+00 + 0.3344399944004D+00 0.3421505516792D+00 0.3500327736798D+00 0.3580902610928D+00 + 0.3663266820660D+00 0.3747457731674D+00 0.3833513403499D+00 0.3921472599167D+00 + 0.4011374794879D+00 0.4103260189668D+00 0.4197169715049D+00 0.4293145044656D+00 + 0.4391228603860D+00 0.4491463579352D+00 0.4593893928682D+00 0.4698564389762D+00 + 0.4805520490296D+00 0.4914808557159D+00 0.5026475725686D+00 0.5140569948882D+00 + 0.5257140006529D+00 0.5376235514188D+00 0.5497906932078D+00 0.5622205573817D+00 + 0.5749183615028D+00 0.5878894101771D+00 0.6011390958817D+00 0.6146728997723D+00 + 0.6284963924710D+00 0.6426152348323D+00 0.6570351786853D+00 0.6717620675517D+00 + 0.6868018373363D+00 0.7021605169891D+00 0.7178442291373D+00 0.7338591906846D+00 + 0.7502117133767D+00 0.7669082043297D+00 0.7839551665211D+00 0.8013591992393D+00 + 0.8191269984904D+00 0.8372653573601D+00 0.8557811663273D+00 0.8746814135287D+00 + 0.8939731849693D+00 0.9136636646784D+00 0.9337601348078D+00 0.9542699756681D+00 + 0.9752006657025D+00 0.9965597813926D+00 0.1018354997096D+01 0.1040594084808D+01 + 0.1063284913853D+01 0.1086435450488D+01 0.1110053757431D+01 0.1134147993299D+01 + 0.1158726411957D+01 0.1183797361771D+01 0.1209369284771D+01 0.1235450715702D+01 + 0.1262050280978D+01 0.1289176697525D+01 0.1316838771505D+01 0.1345045396934D+01 + 0.1373805554164D+01 0.1403128308251D+01 0.1433022807182D+01 0.1463498279974D+01 + 0.1494564034630D+01 0.1526229455949D+01 0.1558504003186D+01 0.1591397207561D+01 + 0.1624918669603D+01 0.1659078056333D+01 0.1693885098274D+01 0.1729349586291D+01 + 0.1765481368238D+01 0.1802290345436D+01 0.1839786468945D+01 0.1877979735644D+01 + 0.1916880184112D+01 0.1956497890292D+01 0.1996842962948D+01 0.2037925538901D+01 + 0.2079755778033D+01 0.2122343858068D+01 0.2165699969108D+01 0.2209834307933D+01 + 0.2254757072045D+01 0.2300478453457D+01 0.2347008632229D+01 0.2394357769726D+01 + 0.2442536001609D+01 0.2491553430551D+01 0.2541420118654D+01 0.2592146079597D+01 + 0.2643741270467D+01 0.2696215583301D+01 0.2749578836319D+01 0.2803840764839D+01 + 0.2859011011882D+01 0.2915099118444D+01 0.2972114513453D+01 0.3030066503378D+01 + 0.3088964261512D+01 0.3148816816908D+01 0.3209633042968D+01 0.3271421645683D+01 + 0.3334191151519D+01 0.3397949894945D+01 0.3462706005596D+01 0.3528467395084D+01 + 0.3595241743423D+01 0.3663036485110D+01 0.3731858794810D+01 0.3801715572697D+01 + 0.3872613429397D+01 0.3944558670576D+01 0.4017557281145D+01 0.4091614909097D+01 + 0.4166736848980D+01 0.4242928024987D+01 0.4320192973693D+01 0.4398535826419D+01 + 0.4477960291249D+01 0.4558469634674D+01 0.4640066662906D+01 0.4722753702838D+01 + 0.4806532582669D+01 0.4891404612204D+01 0.4977370562830D+01 0.5064430647192D+01 + 0.5152584498558D+01 0.5241831149906D+01 0.5332169012736D+01 0.5423595855620D+01 + 0.5516108782510D+01 0.5609704210813D+01 0.5704377849266D+01 0.5800124675610D+01 + 0.5896938914097D+01 0.5994814012850D+01 0.6093742621092D+01 0.6193716566279D+01 + 0.6294726831155D+01 0.6396763530759D+01 0.6499815889416D+01 0.6603872217740D+01 + 0.6708919889675D+01 0.6814945319632D+01 0.6921933939720D+01 0.7029870177147D+01 + 0.7138737431803D+01 0.7248518054081D+01 0.7359193322972D+01 0.7470743424486D+01 + 0.7583147430434D+01 0.7696383277631D+01 0.7810427747570D+01 0.7925256446610D+01 + 0.8040843786741D+01 0.8157162966982D+01 0.8274185955464D+01 0.8391883472267D+01 + 0.8510224973068D+01 0.8629178633659D+01 0.8748711335417D+01 0.8868788651775D+01 + 0.8989374835775D+01 0.9110432808772D+01 0.9231924150361D+01 0.9353809089599D+01 + 0.9476046497610D+01 0.9598593881630D+01 0.9721407380596D+01 0.9844441762336D+01 + 0.9967650422460D+01 0.1009098538503D+02 0.1021439730507D+02 0.1033783547307D+02 + 0.1046124782146D+02 0.1058458093324D+02 0.1070778005282D+02 0.1083078909912D+02 + 0.1095355068109D+02 0.1107600611564D+02 0.1119809544818D+02 0.1131975747577D+02 + 0.1144092977298D+02 0.1156154872061D+02 0.1168154953722D+02 0.1180086631373D+02 + 0.1191943205098D+02 0.1203717870050D+02 0.1215403720841D+02 0.1226993756267D+02 + 0.1238480884363D+02 0.1249857927800D+02 0.1261117629631D+02 0.1272252659389D+02 + 0.1283255619545D+02 0.1294119052329D+02 0.1304835446916D+02 0.1315397246988D+02 + 0.1325796858669D+02 0.1336026658833D+02 0.1346079003800D+02 0.1355946238400D+02 + 0.1365620705428D+02 0.1375094755471D+02 0.1384360757113D+02 0.1393411107521D+02 + 0.1402238243396D+02 0.1410834652295D+02 0.1419192884313D+02 0.1427305564121D+02 + 0.1435165403349D+02 0.1442765213309D+02 0.1450097918044D+02 0.1457156567694D+02 + 0.1463934352164D+02 0.1470424615079D+02 0.1476620868015D+02 0.1482516804981D+02 + 0.1488106317144D+02 0.1493383507758D+02 0.1498342707306D+02 0.1502978488791D+02 + 0.1507285683196D+02 0.1511259395041D+02 0.1514895018049D+02 0.1518188250864D+02 + 0.1521135112801D+02 0.1523731959593D+02 0.1525975499101D+02 0.1527862806946D+02 + 0.1529391342035D+02 0.1530558961928D+02 0.1531363938018D+02 0.1531804970475D+02 + 0.1531881202904D+02 0.1531592236688D+02 0.1530938144955D+02 0.1529919486125D+02 + 0.1528537316989D+02 0.1526793205273D+02 0.1524689241624D+02 0.1522228050986D+02 + 0.1519412803287D+02 0.1516247223413D+02 0.1512735600383D+02 0.1508882795702D+02 + 0.1504694250814D+02 0.1500175993609D+02 0.1495334643931D+02 0.1490177418029D+02 + 0.1484712131901D+02 0.1478947203474D+02 0.1472891653562D+02 0.1466555105572D+02 + 0.1459947783878D+02 0.1453080510840D+02 0.1445964702406D+02 0.1438612362257D+02 + 0.1431036074455D+02 0.1423248994549D+02 0.1415264839103D+02 0.1407097873615D+02 + 0.1398762898789D+02 0.1390275235141D+02 0.1381650705902D+02 0.1372905618219D+02 + 0.1364056742609D+02 0.1355121290685D+02 0.1346116891125D+02 0.1337061563896D+02 + 0.1327973692724D+02 0.1318871995837D+02 0.1309775494975D+02 0.1300703482704D+02 + 0.1291675488052D+02 0.1282711240503D+02 0.1273830632382D+02 0.1265053679694D+02 + 0.1256400481443D+02 0.1247891177511D+02 0.1239545905155D+02 0.1231384754196D+02 + 0.1223427720971D+02 0.1215694661156D+02 0.1208205241520D+02 0.1200978890748D+02 + 0.1194034749400D+02 0.1187391619161D+02 0.1181067911457D+02 0.1175081595604D+02 + 0.1169450146591D+02 0.1164190492657D+02 0.1159318962785D+02 0.1154851234279D+02 + 0.1150802280569D+02 0.1147186319402D+02 0.1144016761583D+02 0.1141306160430D+02 + 0.1139066162117D+02 0.1137307457069D+02 0.1136039732594D+02 0.1135271626912D+02 + 0.1135010684776D+02 0.1135263314851D+02 0.1136034749032D+02 0.1137329003881D+02 + 0.1139148844348D+02 0.1141495749963D+02 0.1144369883662D+02 0.1147770063409D+02 + 0.1151693736796D+02 0.1156136958754D+02 0.1161094372545D+02 0.1166559194179D+02 + 0.1172523200381D+02 0.1178976720264D+02 0.1185908630799D+02 0.1193306356226D+02 + 0.1201155871484D+02 0.1209441709769D+02 0.1218146974287D+02 0.1227253354284D+02 + 0.1236741145397D+02 0.1246589274379D+02 0.1256775328211D+02 0.1267275587640D+02 + 0.1278065065113D+02 0.1289117547119D+02 0.1300405640885D+02 0.1311900825395D+02 + 0.1323573506657D+02 0.1335393077146D+02 0.1347327979323D+02 0.1359345773115D+02 + 0.1371413207230D+02 0.1383496294160D+02 0.1395560388709D+02 0.1407570269861D+02 + 0.1419490225806D+02 0.1431284141898D+02 0.1442915591338D+02 0.1454347928315D+02 + 0.1465544383386D+02 0.1476468160783D+02 0.1487082537417D+02 0.1497350963233D+02 + 0.1507237162657D+02 0.1516705236793D+02 0.1525719766057D+02 0.1534245912911D+02 + 0.1542249524366D+02 0.1549697233900D+02 0.1556556562442D+02 0.1562796018077D+02 + 0.1568385194105D+02 0.1573294865100D+02 0.1577497080618D+02 0.1580965256192D+02 + 0.1583674261262D+02 0.1585600503703D+02 0.1586722010590D+02 0.1587018504888D+02 + 0.1586471477724D+02 0.1585064255941D+02 0.1582782064616D+02 0.1579612084266D+02 + 0.1575543502459D+02 0.1570567559576D+02 0.1564677588478D+02 0.1557869047861D+02 + 0.1550139549096D+02 0.1541488876365D+02 0.1531918999952D+02 0.1521434082540D+02 + 0.1510040478412D+02 0.1497746725473D+02 0.1484563530035D+02 0.1470503744339D+02 + 0.1455582336815D+02 0.1439816355111D+02 0.1423224881940D+02 0.1405828983858D+02 + 0.1387651653069D+02 0.1368717742428D+02 0.1349053893812D+02 0.1328688460077D+02 + 0.1307651420854D+02 0.1285974292444D+02 0.1263690032121D+02 0.1240832937187D+02 + 0.1217438539130D+02 0.1193543493267D+02 0.1169185464315D+02 0.1144403008289D+02 + 0.1119235451229D+02 0.1093722765210D+02 0.1067905442153D+02 0.1041824365947D+02 + 0.1015520683431D+02 0.9890356747642D+01 0.9624106237510D+01 0.9356866886848D+01 + 0.9089047742725D+01 0.8821054052096D+01 0.8553286019718D+01 0.8286137593812D+01 + 0.8019995284984D+01 0.7755237023783D+01 0.7492231062108D+01 0.7231334923490D+01 + 0.6972894407048D+01 0.6717242649614D+01 0.6464699250285D+01 0.6215569461263D+01 + 0.5970143448506D+01 0.5728695625320D+01 0.5491484061577D+01 0.5258749970799D+01 + 0.5030717276876D+01 0.4807592261687D+01 0.4589563294379D+01 0.4376800642543D+01 + 0.4169456365009D+01 0.3967664285439D+01 0.3771540045395D+01 0.3581181235048D+01 + 0.3396667599216D+01 0.3218061315943D+01 0.3045407344425D+01 0.2878733838673D+01 + 0.2718052622958D+01 0.2563359724784D+01 0.2414635960837D+01 0.2271847571179D+01 + 0.2134946896743D+01 0.2003873095094D+01 0.1878552889299D+01 0.1758901344748D+01 + 0.1644822668735D+01 0.1536211027662D+01 0.1432951376795D+01 0.1334920297604D+01 + 0.1241986837840D+01 0.1154013349698D+01 0.1070856321533D+01 0.9923671988771D+00 + 0.9183931906722D+00 0.8487780569097D+00 0.7833628741179D+00 0.7219867754195D+00 + 0.6644876621670D+00 0.6107028844649D+00 0.5604698881984D+00 0.5136268265009D+00 + 0.4700131339140D+00 0.4294700618145D+00 0.3918411740035D+00 0.3569728016706D+00 + 0.3247144572577D+00 0.2949192070505D+00 0.2674440026191D+00 0.2421499715083D+00 + 0.2189026678453D+00 0.1975722837769D+00 0.1780338228821D+00 0.1601672369114D+00 + 0.1438575273934D+00 0.1289948138155D+00 0.1154743702244D+00 0.1031966322137D+00 + 0.9206717636280D-01 0.8199667425333D-01 0.7290082325274D-01 0.6470025626879D-01 + 0.5732043268983D-01 0.5069151270949D-01 0.4474821720070D-01 0.3942967525286D-01 + 0.3467926141935D-01 0.3044442464189D-01 0.2667651072510D-01 0.2333058013175D-01 + 0.2036522275729D-01 0.1774237122372D-01 0.1542711410973D-01 0.1338751040756D-01 + 0.1159440636894D-01 0.1002125577446D-01 0.8643944534184D-02 0.7440620403504D-02 + 0.6391528477907D-02 0.5478853015520D-02 0.4686566026548D-02 0.4000282965823D-02 + 0.3407125768566D-02 0.2895593380852D-02 0.2455439855310D-02 0.2077560009503D-02 + 0.1753882579245D-02 0.1477270741753D-02 0.1241429833825D-02 0.1040822048005D-02 + 0.8705878544716D-03 0.7264738679766D-03 0.6047668569912D-03 0.5022335758689D-03 + 0.4160660898505D-03 0.3438322565535D-03 0.2834310257265D-03 0.2330522209919D-03 + 0.1911404725354D-03 0.1563629777588D-03 0.1275807773169D-03 0.1038232462792D-03 + 0.8426551398552D-04 0.6820854112390D-04 0.5506159830921D-04 0.4432690667621D-04 + 0.3558621744990D-04 0.2848912388179D-04 0.2274291514184D-04 0.1810379755957D-04 + 0.1436932387695D-04 0.1137188579483D-04 0.8973138981353D-05 0.7059242800584D-05 + 0.5536809271481D-05 0.4329467160309D-05 0.3374957635189D-05 0.2622687577932D-05 + 0.2031675474821D-05 0.1568832820455D-05 0.1207531205344D-05 0.9264117571152D-06 + 0.7083994129822D-06 0.5398896646190D-06 0.4100799844532D-06 0.3104221636051D-06 + 0.2341753146343D-06 0.1760423639345D-06 0.1318755242217D-06 0.9843853994995D-07 + 0.7321547792462D-07 0.5425752930255D-07 0.4006073209484D-07 0.2946874677845D-07 + 0.2159585030806D-07 0.1576618147791D-07 0.1146599626209D-07 0.8306295925441D-08 + 0.5993691398320D-08 0.4307780466934D-08 0.3083653528434D-08 0.2198420923597D-08 + 0.1560880455160D-08 0.1103626406353D-08 0.7770486592420D-09 0.5447886926870D-09 + 0.3800493982106D-09 0.2639911834652D-09 0.1825802892585D-09 0.1257219717201D-09 + 0.8618649351275D-10 0.5881881826024D-10 0.3987629830876D-10 0.2691611835206D-10 + 0.1808786326066D-10 0.1210089450733D-10 0.8058999413895D-11 0.5342643909174D-11 + 0.3525500295203D-11 0.2315541789969D-11 0.1513664801251D-11 0.9847587801959D-12 + 0.6375744101585D-12 0.4107811748216D-12 0.2633580320212D-12 0.1680028688901D-12 + 0.1066347140162D-12 diff --git a/Test/Fe2_wl-lsms/v_fe2.1 b/Test/Fe2_wl-lsms/v_fe2.1 new file mode 100755 index 000000000..30b560c50 --- /dev/null +++ b/Test/Fe2_wl-lsms/v_fe2.1 @@ -0,0 +1,1534 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Fe. + 2 0.0000000000000D+00 + LSMS: Fe z= 26. xvalws= 5.16339 + 26. 5.42000 10. 0.7012665733723D+00 + -0.1113096740000D+02 0.9815760904632D+00 1001 +-0.5199725931699D+02-0.5199722591642D+02-0.5199719210878D+02-0.5199715788911D+02 +-0.5199712325237D+02-0.5199708819349D+02-0.5199705270731D+02-0.5199701678864D+02 +-0.5199698043220D+02-0.5199694363265D+02-0.5199690638460D+02-0.5199686868256D+02 +-0.5199683052103D+02-0.5199679189438D+02-0.5199675279695D+02-0.5199671322300D+02 +-0.5199667316673D+02-0.5199663262225D+02-0.5199659158361D+02-0.5199655004479D+02 +-0.5199650799970D+02-0.5199646544215D+02-0.5199642236591D+02-0.5199637876465D+02 +-0.5199633463197D+02-0.5199628996139D+02-0.5199624474636D+02-0.5199619898023D+02 +-0.5199615265630D+02-0.5199610576775D+02-0.5199605830772D+02-0.5199601026922D+02 +-0.5199596164522D+02-0.5199591242856D+02-0.5199586261203D+02-0.5199581218832D+02 +-0.5199576115002D+02-0.5199570948964D+02-0.5199565719959D+02-0.5199560427220D+02 +-0.5199555069971D+02-0.5199549647424D+02-0.5199544158783D+02-0.5199538603243D+02 +-0.5199532979989D+02-0.5199527288194D+02-0.5199521527023D+02-0.5199515695630D+02 +-0.5199509793159D+02-0.5199503818745D+02-0.5199497771508D+02-0.5199491650563D+02 +-0.5199485455009D+02-0.5199479183938D+02-0.5199472836428D+02-0.5199466411549D+02 +-0.5199459908356D+02-0.5199453325894D+02-0.5199446663199D+02-0.5199439919290D+02 +-0.5199433093178D+02-0.5199426183860D+02-0.5199419190323D+02-0.5199412111539D+02 +-0.5199404946470D+02-0.5199397694062D+02-0.5199390353251D+02-0.5199382922959D+02 +-0.5199375402096D+02-0.5199367789556D+02-0.5199360084222D+02-0.5199352284963D+02 +-0.5199344390633D+02-0.5199336400074D+02-0.5199328312111D+02-0.5199320125557D+02 +-0.5199311839210D+02-0.5199303451853D+02-0.5199294962254D+02-0.5199286369167D+02 +-0.5199277671330D+02-0.5199268867465D+02-0.5199259956280D+02-0.5199250936466D+02 +-0.5199241806697D+02-0.5199232565635D+02-0.5199223211920D+02-0.5199213744180D+02 +-0.5199204161024D+02-0.5199194461044D+02-0.5199184642816D+02-0.5199174704899D+02 +-0.5199164645831D+02-0.5199154464136D+02-0.5199144158318D+02-0.5199133726865D+02 +-0.5199123168242D+02-0.5199112480900D+02-0.5199101663269D+02-0.5199090713759D+02 +-0.5199079630763D+02-0.5199068412652D+02-0.5199057057778D+02-0.5199045564474D+02 +-0.5199033931052D+02-0.5199022155801D+02-0.5199010236992D+02-0.5198998172875D+02 +-0.5198985961678D+02-0.5198973601605D+02-0.5198961090841D+02-0.5198948427549D+02 +-0.5198935609868D+02-0.5198922635914D+02-0.5198909503782D+02-0.5198896211542D+02 +-0.5198882757241D+02-0.5198869138902D+02-0.5198855354524D+02-0.5198841402083D+02 +-0.5198827279527D+02-0.5198812984781D+02-0.5198798515746D+02-0.5198783870295D+02 +-0.5198769046276D+02-0.5198754041509D+02-0.5198738853792D+02-0.5198723480891D+02 +-0.5198707920547D+02-0.5198692170473D+02-0.5198676228356D+02-0.5198660091851D+02 +-0.5198643758587D+02-0.5198627226164D+02-0.5198610492152D+02-0.5198593554091D+02 +-0.5198576409492D+02-0.5198559055834D+02-0.5198541490567D+02-0.5198523711108D+02 +-0.5198505714845D+02-0.5198487499132D+02-0.5198469061290D+02-0.5198450398610D+02 +-0.5198431508349D+02-0.5198412387727D+02-0.5198393033936D+02-0.5198373444129D+02 +-0.5198353615426D+02-0.5198333544912D+02-0.5198313229636D+02-0.5198292666611D+02 +-0.5198271852812D+02-0.5198250785181D+02-0.5198229460618D+02-0.5198207875988D+02 +-0.5198186028116D+02-0.5198163913791D+02-0.5198141529759D+02-0.5198118872729D+02 +-0.5198095939369D+02-0.5198072726305D+02-0.5198049230123D+02-0.5198025447368D+02 +-0.5198001374541D+02-0.5197977008102D+02-0.5197952344466D+02-0.5197927380005D+02 +-0.5197902111047D+02-0.5197876533874D+02-0.5197850644724D+02-0.5197824439787D+02 +-0.5197797915209D+02-0.5197771067086D+02-0.5197743891469D+02-0.5197716384359D+02 +-0.5197688541709D+02-0.5197660359420D+02-0.5197631833347D+02-0.5197602959292D+02 +-0.5197573733004D+02-0.5197544150183D+02-0.5197514206475D+02-0.5197483897473D+02 +-0.5197453218716D+02-0.5197422165688D+02-0.5197390733818D+02-0.5197358918479D+02 +-0.5197326714988D+02-0.5197294118605D+02-0.5197261124529D+02-0.5197227727904D+02 +-0.5197193923812D+02-0.5197159707277D+02-0.5197125073260D+02-0.5197090016661D+02 +-0.5197054532318D+02-0.5197018615005D+02-0.5196982259433D+02-0.5196945460248D+02 +-0.5196908212030D+02-0.5196870509292D+02-0.5196832346481D+02-0.5196793717975D+02 +-0.5196754618085D+02-0.5196715041051D+02-0.5196674981041D+02-0.5196634432153D+02 +-0.5196593388414D+02-0.5196551843776D+02-0.5196509792117D+02-0.5196467227241D+02 +-0.5196424142874D+02-0.5196380532668D+02-0.5196336390195D+02-0.5196291708950D+02 +-0.5196246482345D+02-0.5196200703715D+02-0.5196154366312D+02-0.5196107463304D+02 +-0.5196059987776D+02-0.5196011932730D+02-0.5195963291079D+02-0.5195914055651D+02 +-0.5195864219187D+02-0.5195813774336D+02-0.5195762713659D+02-0.5195711029626D+02 +-0.5195658714613D+02-0.5195605760903D+02-0.5195552160686D+02-0.5195497906054D+02 +-0.5195442989003D+02-0.5195387401431D+02-0.5195331135135D+02-0.5195274181813D+02 +-0.5195216533060D+02-0.5195158180370D+02-0.5195099115129D+02-0.5195039328620D+02 +-0.5194978812018D+02-0.5194917556390D+02-0.5194855552692D+02-0.5194792791772D+02 +-0.5194729264361D+02-0.5194664961081D+02-0.5194599872435D+02-0.5194533988811D+02 +-0.5194467300479D+02-0.5194399797589D+02-0.5194331470170D+02-0.5194262308129D+02 +-0.5194192301248D+02-0.5194121439183D+02-0.5194049711466D+02-0.5193977107496D+02 +-0.5193903616545D+02-0.5193829227751D+02-0.5193753930120D+02-0.5193677712521D+02 +-0.5193600563687D+02-0.5193522472214D+02-0.5193443426554D+02-0.5193363415021D+02 +-0.5193282425782D+02-0.5193200446861D+02-0.5193117466132D+02-0.5193033471322D+02 +-0.5192948450006D+02-0.5192862389606D+02-0.5192775277389D+02-0.5192687100465D+02 +-0.5192597845787D+02-0.5192507500145D+02-0.5192416050167D+02-0.5192323482318D+02 +-0.5192229782895D+02-0.5192134938025D+02-0.5192038933665D+02-0.5191941755600D+02 +-0.5191843389439D+02-0.5191743820614D+02-0.5191643034376D+02-0.5191541015796D+02 +-0.5191437749759D+02-0.5191333220966D+02-0.5191227413929D+02-0.5191120312966D+02 +-0.5191011902205D+02-0.5190902165578D+02-0.5190791086815D+02-0.5190678649451D+02 +-0.5190564836814D+02-0.5190449632026D+02-0.5190333018003D+02-0.5190214977449D+02 +-0.5190095492854D+02-0.5189974546493D+02-0.5189852120422D+02-0.5189728196473D+02 +-0.5189602756258D+02-0.5189475781158D+02-0.5189347252326D+02-0.5189217150681D+02 +-0.5189085456909D+02-0.5188952151453D+02-0.5188817214519D+02-0.5188680626064D+02 +-0.5188542365801D+02-0.5188402413189D+02-0.5188260747437D+02-0.5188117347492D+02 +-0.5187972192046D+02-0.5187825259523D+02-0.5187676528083D+02-0.5187525975614D+02 +-0.5187373579732D+02-0.5187219317775D+02-0.5187063166802D+02-0.5186905103587D+02 +-0.5186745104616D+02-0.5186583146086D+02-0.5186419203897D+02-0.5186253253653D+02 +-0.5186085270654D+02-0.5185915229896D+02-0.5185743106063D+02-0.5185568873529D+02 +-0.5185392506347D+02-0.5185213978251D+02-0.5185033262648D+02-0.5184850332618D+02 +-0.5184665160905D+02-0.5184477719917D+02-0.5184287981719D+02-0.5184095918029D+02 +-0.5183901500218D+02-0.5183704699298D+02-0.5183505485925D+02-0.5183303830390D+02 +-0.5183099702614D+02-0.5182893072147D+02-0.5182683908162D+02-0.5182472179448D+02 +-0.5182257854409D+02-0.5182040901055D+02-0.5181821287000D+02-0.5181598979457D+02 +-0.5181373945232D+02-0.5181146150719D+02-0.5180915561896D+02-0.5180682144317D+02 +-0.5180445863110D+02-0.5180206682971D+02-0.5179964568157D+02-0.5179719482481D+02 +-0.5179471389309D+02-0.5179220251550D+02-0.5178966031654D+02-0.5178708691605D+02 +-0.5178448192915D+02-0.5178184496620D+02-0.5177917563269D+02-0.5177647352925D+02 +-0.5177373825152D+02-0.5177096939016D+02-0.5176816653072D+02-0.5176532925362D+02 +-0.5176245713407D+02-0.5175954974201D+02-0.5175660664205D+02-0.5175362739338D+02 +-0.5175061154973D+02-0.5174755865931D+02-0.5174446826469D+02-0.5174133990280D+02 +-0.5173817310480D+02-0.5173496739605D+02-0.5173172229601D+02-0.5172843731820D+02 +-0.5172511197008D+02-0.5172174575303D+02-0.5171833816223D+02-0.5171488868660D+02 +-0.5171139680874D+02-0.5170786200483D+02-0.5170428374455D+02-0.5170066149103D+02 +-0.5169699470072D+02-0.5169328282336D+02-0.5168952530187D+02-0.5168572157226D+02 +-0.5168187106359D+02-0.5167797319782D+02-0.5167402738976D+02-0.5167003304701D+02 +-0.5166598956980D+02-0.5166189635099D+02-0.5165775277589D+02-0.5165355822224D+02 +-0.5164931206009D+02-0.5164501365170D+02-0.5164066235145D+02-0.5163625750578D+02 +-0.5163179845303D+02-0.5162728452340D+02-0.5162271503882D+02-0.5161808931287D+02 +-0.5161340665067D+02-0.5160866634877D+02-0.5160386769508D+02-0.5159900996873D+02 +-0.5159409243999D+02-0.5158911437017D+02-0.5158407501149D+02-0.5157897360697D+02 +-0.5157380939038D+02-0.5156858158605D+02-0.5156328940882D+02-0.5155793206390D+02 +-0.5155250874678D+02-0.5154701864308D+02-0.5154146092848D+02-0.5153583476858D+02 +-0.5153013931877D+02-0.5152437372416D+02-0.5151853711940D+02-0.5151262862864D+02 +-0.5150664736531D+02-0.5150059243209D+02-0.5149446292074D+02-0.5148825791198D+02 +-0.5148197647538D+02-0.5147561766923D+02-0.5146918054041D+02-0.5146266412426D+02 +-0.5145606744445D+02-0.5144938951289D+02-0.5144262932954D+02-0.5143578588230D+02 +-0.5142885814693D+02-0.5142184508682D+02-0.5141474565295D+02-0.5140755878369D+02 +-0.5140028340473D+02-0.5139291842885D+02-0.5138546275588D+02-0.5137791527252D+02 +-0.5137027485219D+02-0.5136254035491D+02-0.5135471062715D+02-0.5134678450172D+02 +-0.5133876079757D+02-0.5133063831972D+02-0.5132241585905D+02-0.5131409219222D+02 +-0.5130566608147D+02-0.5129713627453D+02-0.5128850150442D+02-0.5127976048936D+02 +-0.5127091193261D+02-0.5126195452228D+02-0.5125288693125D+02-0.5124370781700D+02 +-0.5123441582145D+02-0.5122500957082D+02-0.5121548767551D+02-0.5120584872993D+02 +-0.5119609131234D+02-0.5118621398474D+02-0.5117621529272D+02-0.5116609376528D+02 +-0.5115584791474D+02-0.5114547623653D+02-0.5113497720910D+02-0.5112434929377D+02 +-0.5111359093455D+02-0.5110270055805D+02-0.5109167657328D+02-0.5108051737158D+02 +-0.5106922132640D+02-0.5105778679324D+02-0.5104621210946D+02-0.5103449559414D+02 +-0.5102263554800D+02-0.5101063025320D+02-0.5099847797326D+02-0.5098617695289D+02 +-0.5097372541788D+02-0.5096112157497D+02-0.5094836361174D+02-0.5093544969644D+02 +-0.5092237797793D+02-0.5090914658550D+02-0.5089575362882D+02-0.5088219719774D+02 +-0.5086847536227D+02-0.5085458617240D+02-0.5084052765804D+02-0.5082629782888D+02 +-0.5081189467431D+02-0.5079731616332D+02-0.5078256024442D+02-0.5076762484551D+02 +-0.5075250787384D+02-0.5073720721590D+02-0.5072172073734D+02-0.5070604628291D+02 +-0.5069018167640D+02-0.5067412472051D+02-0.5065787319689D+02-0.5064142486600D+02 +-0.5062477746709D+02-0.5060792871815D+02-0.5059087631588D+02-0.5057361793563D+02 +-0.5055615123141D+02-0.5053847383581D+02-0.5052058336003D+02-0.5050247739384D+02 +-0.5048415350560D+02-0.5046560924222D+02-0.5044684212921D+02-0.5042784967067D+02 +-0.5040862934931D+02-0.5038917862649D+02-0.5036949494226D+02-0.5034957571537D+02 +-0.5032941834336D+02-0.5030902020260D+02-0.5028837864835D+02-0.5026749101486D+02 +-0.5024635461542D+02-0.5022496674247D+02-0.5020332466771D+02-0.5018142564219D+02 +-0.5015926689643D+02-0.5013684564056D+02-0.5011415906446D+02-0.5009120433786D+02 +-0.5006797861057D+02-0.5004447901258D+02-0.5002070265426D+02-0.4999664662657D+02 +-0.4997230800119D+02-0.4994768383078D+02-0.4992277114919D+02-0.4989756697166D+02 +-0.4987206829505D+02-0.4984627209814D+02-0.4982017534180D+02-0.4979377496935D+02 +-0.4976706790675D+02-0.4974005106294D+02-0.4971272133013D+02-0.4968507558409D+02 +-0.4965711068447D+02-0.4962882347514D+02-0.4960021078451D+02-0.4957126942590D+02 +-0.4954199619788D+02-0.4951238788463D+02-0.4948244125633D+02-0.4945215306956D+02 +-0.4942152006764D+02-0.4939053898111D+02-0.4935920652806D+02-0.4932751941463D+02 +-0.4929547433536D+02-0.4926306797371D+02-0.4923029700242D+02-0.4919715808401D+02 +-0.4916364787124D+02-0.4912976300753D+02-0.4909550012749D+02-0.4906085585733D+02 +-0.4902582681538D+02-0.4899040961257D+02-0.4895460085288D+02-0.4891839713387D+02 +-0.4888179504715D+02-0.4884479117888D+02-0.4880738211025D+02-0.4876956441799D+02 +-0.4873133467484D+02-0.4869268945006D+02-0.4865362530993D+02-0.4861413881817D+02 +-0.4857422653651D+02-0.4853388502510D+02-0.4849311084302D+02-0.4845190054869D+02 +-0.4841025070039D+02-0.4836815785666D+02-0.4832561857676D+02-0.4828262942108D+02 +-0.4823918695154D+02-0.4819528773204D+02-0.4815092832878D+02-0.4810610531068D+02 +-0.4806081524970D+02-0.4801505472119D+02-0.4796882030422D+02-0.4792210858184D+02 +-0.4787491614138D+02-0.4782723957472D+02-0.4777907547847D+02-0.4773042045423D+02 +-0.4768127110873D+02-0.4763162405400D+02-0.4758147590750D+02-0.4753082329223D+02 +-0.4747966283676D+02-0.4742799117531D+02-0.4737580494774D+02-0.4732310079952D+02 +-0.4726987538172D+02-0.4721612535085D+02-0.4716184736882D+02-0.4710703810273D+02 +-0.4705169422472D+02-0.4699581241173D+02-0.4693938934527D+02-0.4688242171111D+02 +-0.4682490619900D+02-0.4676683950228D+02-0.4670821831755D+02-0.4664903934423D+02 +-0.4658929928411D+02-0.4652899484095D+02-0.4646812271991D+02-0.4640667962710D+02 +-0.4634466226902D+02-0.4628206735200D+02-0.4621889158168D+02-0.4615513166235D+02 +-0.4609078429642D+02-0.4602584618383D+02-0.4596031402139D+02-0.4589418450224D+02 +-0.4582745431526D+02-0.4576012014446D+02-0.4569217866845D+02-0.4562362655991D+02 +-0.4555446048506D+02-0.4548467710324D+02-0.4541427306645D+02-0.4534324501899D+02 +-0.4527158959715D+02-0.4519930342900D+02-0.4512638313417D+02-0.4505282532384D+02 +-0.4497862660069D+02-0.4490378355907D+02-0.4482829278522D+02-0.4475215085763D+02 +-0.4467535434758D+02-0.4459789981973D+02-0.4451978383298D+02-0.4444100294141D+02 +-0.4436155369548D+02-0.4428143264335D+02-0.4420063633246D+02-0.4411916131128D+02 +-0.4403700413133D+02-0.4395416134942D+02-0.4387062953009D+02-0.4378640524842D+02 +-0.4370148509295D+02-0.4361586566901D+02-0.4352954360224D+02-0.4344251554244D+02 +-0.4335477816770D+02-0.4326632818875D+02-0.4317716235372D+02-0.4308727745309D+02 +-0.4299667032494D+02-0.4290533786048D+02-0.4281327700986D+02-0.4272048478818D+02 +-0.4262695828176D+02-0.4253269465463D+02-0.4243769115513D+02-0.4234194512276D+02 +-0.4224545399505D+02-0.4214821531456D+02-0.4205022673588D+02-0.4195148603264D+02 +-0.4185199110439D+02-0.4175173998336D+02-0.4165073084106D+02-0.4154896199452D+02 +-0.4144643191223D+02-0.4134313921960D+02-0.4123908270399D+02-0.4113426131900D+02 +-0.4102867418816D+02-0.4092232060784D+02-0.4081520004919D+02-0.4070731215920D+02 +-0.4059865676071D+02-0.4048923385121D+02-0.4037904360059D+02-0.4026808634744D+02 +-0.4015636259421D+02-0.4004387300093D+02-0.3993061837757D+02-0.3981659967508D+02 +-0.3970181797505D+02-0.3958627447806D+02-0.3946997049083D+02-0.3935290741217D+02 +-0.3923508671801D+02-0.3911650994547D+02-0.3899717867623D+02-0.3887709451949D+02 +-0.3875625909457D+02-0.3863467401352D+02-0.3851234086395D+02-0.3838926119238D+02 +-0.3826543648842D+02-0.3814086816995D+02-0.3801555756982D+02-0.3788950592406D+02 +-0.3776271436216D+02-0.3763518389944D+02-0.3750691543187D+02-0.3737790973346D+02 +-0.3724816745643D+02-0.3711768913428D+02-0.3698647518771D+02-0.3685452593361D+02 +-0.3672184159697D+02-0.3658842232567D+02-0.3645426820807D+02-0.3631937929321D+02 +-0.3618375561346D+02-0.3604739720935D+02-0.3591030415633D+02-0.3577247659321D+02 +-0.3563391475192D+02-0.3549461898827D+02-0.3535458981337D+02-0.3521382792542D+02 +-0.3507233424143D+02-0.3493010992864D+02-0.3478715643525D+02-0.3464347552013D+02 +-0.3449906928126D+02-0.3435394018266D+02-0.3420809107940D+02-0.3406152524065D+02 +-0.3391424637043D+02-0.3376625862590D+02-0.3361756663313D+02-0.3346817550006D+02 +-0.3331809082663D+02-0.3316731871203D+02-0.3301586575893D+02-0.3286373907466D+02 +-0.3271094626939D+02-0.3255749545121D+02-0.3240339521822D+02-0.3224865464757D+02 +-0.3209328328157D+02-0.3193729111094D+02-0.3178068855525D+02-0.3162348644055D+02 +-0.3146569597458D+02-0.3130732871930D+02-0.3114839656119D+02-0.3098891167927D+02 +-0.3082888651111D+02-0.3066833371686D+02-0.3050726614161D+02-0.3034569677621D+02 +-0.3018363871669D+02-0.3002110512258D+02-0.2985810917425D+02-0.2969466402958D+02 +-0.2953078278010D+02-0.2936647840694D+02-0.2920176373673D+02-0.2903665139781D+02 +-0.2887115377696D+02-0.2870528297691D+02-0.2853905077498D+02-0.2837246858306D+02 +-0.2820554740928D+02-0.2803829782165D+02-0.2787072991398D+02-0.2770285327437D+02 +-0.2753467695661D+02-0.2736620945485D+02-0.2719745868167D+02-0.2702843195011D+02 +-0.2685913595982D+02-0.2668957678764D+02-0.2651975988294D+02-0.2634969006801D+02 +-0.2617937154380D+02-0.2600880790115D+02-0.2583800213787D+02-0.2566695668187D+02 +-0.2549567342044D+02-0.2532415373592D+02-0.2515239854775D+02-0.2498040836118D+02 +-0.2480818332233D+02-0.2463572327981D+02-0.2446302785263D+02-0.2429009650422D+02 +-0.2411692862219D+02-0.2394352360355D+02-0.2376988094463D+02-0.2359600033531D+02 +-0.2342188175642D+02-0.2324752557966D+02-0.2307293266864D+02-0.2289810447983D+02 +-0.2272304316200D+02-0.2254775165218D+02-0.2237223376659D+02-0.2219649428421D+02 +-0.2202053902086D+02-0.2184437489146D+02-0.2166800995789D+02-0.2149145346009D+02 +-0.2131471582776D+02-0.2113780867042D+02-0.2096074474364D+02-0.2078353788951D+02 +-0.2060620295021D+02-0.2042875565363D+02-0.2025121247135D+02-0.2007359044942D+02 +-0.1989590701423D+02-0.1971817975593D+02-0.1954042619378D+02-0.1936266352822D+02 +-0.1918490838619D+02-0.1900717656628D+02-0.1882948279190D+02-0.1865184048011D+02 +-0.1847426153465D+02-0.1829675617068D+02-0.1811933277855D+02-0.1794199783242D+02 +-0.1776475584849D+02-0.1758760939562D+02-0.1741055915926D+02-0.1723360405807D+02 +-0.1705674141014D+02-0.1687996714445D+02-0.1670327605162D+02-0.1652666206664D+02 +-0.1635011857590D+02-0.1617363873989D+02-0.1599721582351D+02-0.1582084352570D+02 +-0.1564451630100D+02-0.1546822966640D+02-0.1529198048772D+02-0.1511576724091D+02 +-0.1493959024470D+02-0.1476345186200D+02-0.1458735666863D+02-0.1441131158854D+02 +-0.1423532599577D+02-0.1405941178386D+02-0.1388358340393D+02-0.1370785787312D+02 +-0.1353225475539D+02-0.1335679611679D+02-0.1318150645758D+02-0.1300641262333D+02 +-0.1283154369759D+02-0.1265693087820D+02-0.1248260733955D+02-0.1230860808292D+02 +-0.1213496977677D+02-0.1196173058907D+02-0.1178893001322D+02-0.1161660868935D+02 +-0.1144480822243D+02-0.1127357099867D+02-0.1110294000145D+02-0.1093295862801D+02 +-0.1076367050797D+02-0.1059511932477D+02-0.1042734864085D+02-0.1026040172749D+02 +-0.1009432140005D+02-0.9929149859336D+01-0.9764928539725D+01-0.9601697964583D+01 +-0.9439497609536D+01-0.9278365774019D+01-0.9118339461504D+01-0.8959454268748D+01 +-0.8801744284357D+01-0.8645241996882D+01-0.8489978212662D+01-0.8335981983529D+01 +-0.8183280544477D+01-0.8031899261338D+01-0.7881861588467D+01-0.7733189036396D+01 +-0.7585901149363D+01-0.7440015492612D+01-0.7295547649285D+01-0.7152511226721D+01 +-0.7010917871923D+01-0.6870777295938D+01-0.6732097306845D+01-0.6594883851038D+01 +-0.6459141062454D+01-0.6324871319365D+01-0.6192075308347D+01-0.6060752095014D+01 +-0.5930899201072D+01-0.5802512687251D+01-0.5675587241659D+01-0.5550116273066D+01 +-0.5426092008647D+01-0.5303505595682D+01-0.5182347206712D+01-0.5062606147647D+01 +-0.4944270968302D+01-0.4827329574861D+01-0.4711769343735D+01-0.4597577236294D+01 +-0.4484739913965D+01-0.4373243853143D+01-0.4263075459417D+01-0.4154221180575D+01 +-0.4046667617853D+01-0.3940401634918D+01-0.3835410464049D+01-0.3731681809001D+01 +-0.3629203944025D+01-0.3527965808536D+01-0.3427957096907D+01-0.3329168342913D+01 +-0.3231590998318D+01-0.3135217505155D+01-0.3040041361252D+01-0.2946057178606D+01 +-0.2853260734243D+01-0.2761649013247D+01-0.2671220243730D+01-0.2581973923582D+01 +-0.2493910838928D+01-0.2407033074346D+01-0.2321344015016D+01-0.2236848341122D+01 +-0.2153552014956D+01-0.2071462261390D+01-0.1990587542499D+01-0.1910937527340D+01 +-0.1832523058034D+01-0.1755356113501D+01-0.1679449772291D+01-0.1604818176155D+01 +-0.1531476496008D+01-0.1459440902078D+01-0.1388728539968D+01-0.1319357514381D+01 +-0.1251346882134D+01-0.1184716655962D+01-0.1119487820418D+01-0.1055682360967D+01 +-0.9933233070722D+00-0.9324347898183D+00-0.8730421142973D+00-0.8151718466760D+00 +-0.7588519155788D+00-0.7041117271417D+00-0.6509822928483D+00-0.5994963690570D+00 +-0.5496886069632D+00-0.5015957116250D+00-0.4552566086098D+00-0.4107126167905D+00 +-0.3680076258385D+00-0.3271882770002D+00-0.2883041458275D+00-0.2514079256237D+00 +-0.2165556104776D+00-0.1838066768758D+00-0.1532242629937D+00-0.1248753448789D+00 +-0.9883090882909D-01-0.7516611934667D-01-0.5396048210834D-01-0.3529800141424D-01 +-0.1926733158825D-01-0.5961921770879D-02 0.4519846510787D-02 0.1207452970105D-01 + 0.1659350187392D-01 + 0.0000000000000D+00 + 1001 0.5163385311209D+01 + 0.1598489817110D-04 0.1637671018678D-04 0.1677812415985D-04 0.1718937533084D-04 + 0.1761070470089D-04 0.1804235917272D-04 0.1848459169505D-04 0.1893766141057D-04 + 0.1940183380743D-04 0.1987738087462D-04 0.2036458126092D-04 0.2086372043793D-04 + 0.2137509086697D-04 0.2189899217013D-04 0.2243573130538D-04 0.2298562274616D-04 + 0.2354898866513D-04 0.2412615912261D-04 0.2471747225946D-04 0.2532327449484D-04 + 0.2594392072860D-04 0.2657977454883D-04 0.2723120844430D-04 0.2789860402220D-04 + 0.2858235223118D-04 0.2928285358977D-04 0.3000051842049D-04 0.3073576708957D-04 + 0.3148903025262D-04 0.3226074910622D-04 0.3305137564571D-04 0.3386137292924D-04 + 0.3469121534828D-04 0.3554138890475D-04 0.3641239149491D-04 0.3730473320013D-04 + 0.3821893658486D-04 0.3915553700178D-04 0.4011508290444D-04 0.4109813616755D-04 + 0.4210527241502D-04 0.4313708135610D-04 0.4419416712966D-04 0.4527714865686D-04 + 0.4638666000247D-04 0.4752335074502D-04 0.4868788635590D-04 0.4988094858777D-04 + 0.5110323587248D-04 0.5235546372860D-04 0.5363836517897D-04 0.5495269117840D-04 + 0.5629921105181D-04 0.5767871294306D-04 0.5909200427474D-04 0.6053991221911D-04 + 0.6202328418060D-04 0.6354298829006D-04 0.6509991391097D-04 0.6669497215815D-04 + 0.6832909642897D-04 0.7000324294757D-04 0.7171839132237D-04 0.7347554511712D-04 + 0.7527573243585D-04 0.7712000652217D-04 0.7900944637308D-04 0.8094515736776D-04 + 0.8292827191166D-04 0.8495995009639D-04 0.8704138037548D-04 0.8917378025682D-04 + 0.9135839701181D-04 0.9359650840182D-04 0.9588942342239D-04 0.9823848306548D-04 + 0.1006450611003D-03 0.1031105648732D-03 0.1056364361269D-03 0.1082241518400D-03 + 0.1108752250861D-03 0.1135912059150D-03 0.1163736822546D-03 0.1192242808346D-03 + 0.1221446681332D-03 0.1251365513465D-03 0.1282016793814D-03 0.1313418438734D-03 + 0.1345588802277D-03 0.1378546686872D-03 0.1412311354252D-03 0.1446902536658D-03 + 0.1482340448301D-03 0.1518645797122D-03 0.1555839796815D-03 0.1593944179164D-03 + 0.1632981206664D-03 0.1672973685454D-03 0.1713944978569D-03 0.1755919019506D-03 + 0.1798920326122D-03 0.1842974014874D-03 0.1888105815398D-03 0.1934342085447D-03 + 0.1981709826186D-03 0.2030236697869D-03 0.2079951035883D-03 0.2130881867188D-03 + 0.2183058927160D-03 0.2236512676835D-03 0.2291274320575D-03 0.2347375824160D-03 + 0.2404849933325D-03 0.2463730192737D-03 0.2524050965443D-03 0.2585847452777D-03 + 0.2649155714760D-03 0.2714012690990D-03 0.2780456222038D-03 0.2848525071361D-03 + 0.2918258947752D-03 0.2989698528322D-03 0.3062885482056D-03 0.3137862493918D-03 + 0.3214673289558D-03 0.3293362660608D-03 0.3373976490589D-03 0.3456561781450D-03 + 0.3541166680746D-03 0.3627840509472D-03 0.3716633790576D-03 0.3807598278152D-03 + 0.3900786987347D-03 0.3996254224989D-03 0.4094055620952D-03 0.4194248160278D-03 + 0.4296890216086D-03 0.4402041583258D-03 0.4509763512956D-03 0.4620118747958D-03 + 0.4733171558858D-03 0.4848987781132D-03 0.4967634853104D-03 0.5089181854821D-03 + 0.5213699547874D-03 0.5341260416174D-03 0.5471938707712D-03 0.5605810477322D-03 + 0.5742953630485D-03 0.5883447968178D-03 0.6027375232805D-03 0.6174819155240D-03 + 0.6325865502999D-03 0.6480602129566D-03 0.6639119024917D-03 0.6801508367254D-03 + 0.6967864575979D-03 0.7138284365952D-03 0.7312866803045D-03 0.7491713361036D-03 + 0.7674927979868D-03 0.7862617125309D-03 0.8054889850044D-03 0.8251857856237D-03 + 0.8453635559589D-03 0.8660340154937D-03 0.8872091683432D-03 0.9089013101317D-03 + 0.9311230350365D-03 0.9538872429999D-03 0.9772071471144D-03 0.1001096281185D-02 + 0.1025568507471D-02 0.1050638024617D-02 0.1076319375770D-02 0.1102627456891D-02 + 0.1129577525269D-02 0.1157185208234D-02 0.1185466512082D-02 0.1214437831210D-02 + 0.1244115957474D-02 0.1274518089765D-02 0.1305661843818D-02 0.1337565262252D-02 + 0.1370246824853D-02 0.1403725459096D-02 0.1438020550931D-02 0.1473151955806D-02 + 0.1509140009973D-02 0.1546005542051D-02 0.1583769884867D-02 0.1622454887582D-02 + 0.1662082928098D-02 0.1702676925772D-02 0.1744260354421D-02 0.1786857255640D-02 + 0.1830492252442D-02 0.1875190563210D-02 0.1920978015992D-02 0.1967881063128D-02 + 0.2015926796226D-02 0.2065142961496D-02 0.2115557975440D-02 0.2167200940923D-02 + 0.2220101663616D-02 0.2274290668832D-02 0.2329799218765D-02 0.2386659330124D-02 + 0.2444903792198D-02 0.2504566185338D-02 0.2565680899881D-02 0.2628283155514D-02 + 0.2692409021105D-02 0.2758095434988D-02 0.2825380225741D-02 0.2894302133441D-02 + 0.2964900831427D-02 0.3037216948569D-02 0.3111292092068D-02 0.3187168870784D-02 + 0.3264890919119D-02 0.3344502921455D-02 0.3426050637169D-02 0.3509580926233D-02 + 0.3595141775414D-02 0.3682782325090D-02 0.3772552896689D-02 0.3864505020775D-02 + 0.3958691465787D-02 0.4055166267451D-02 0.4153984758881D-02 0.4255203601375D-02 + 0.4358880815940D-02 0.4465075815542D-02 0.4573849438115D-02 0.4685263980330D-02 + 0.4799383232157D-02 0.4916272512225D-02 0.5035998704008D-02 0.5158630292846D-02 + 0.5284237403831D-02 0.5412891840559D-02 0.5544667124797D-02 0.5679638537051D-02 + 0.5817883158085D-02 0.5959479911390D-02 0.6104509606638D-02 0.6253054984140D-02 + 0.6405200760326D-02 0.6561033674270D-02 0.6720642535293D-02 0.6884118271654D-02 + 0.7051553980364D-02 0.7223044978138D-02 0.7398688853520D-02 0.7578585520206D-02 + 0.7762837271575D-02 0.7951548836482D-02 0.8144827436313D-02 0.8342782843354D-02 + 0.8545527440483D-02 0.8753176282223D-02 0.8965847157189D-02 0.9183660651951D-02 + 0.9406740216350D-02 0.9635212230293D-02 0.9869206072067D-02 0.1010885418819D-01 + 0.1035429216487D-01 0.1060565880102D-01 0.1086309618300D-01 0.1112674976098D-01 + 0.1139676842703D-01 0.1167330459502D-01 0.1195651428226D-01 0.1224655719296D-01 + 0.1254359680365D-01 0.1284780045038D-01 0.1315933941799D-01 0.1347838903132D-01 + 0.1380512874841D-01 0.1413974225589D-01 0.1448241756638D-01 0.1483334711810D-01 + 0.1519272787669D-01 0.1556076143930D-01 0.1593765414093D-01 0.1632361716318D-01 + 0.1671886664534D-01 0.1712362379797D-01 0.1753811501898D-01 0.1796257201221D-01 + 0.1839723190863D-01 0.1884233739026D-01 0.1929813681664D-01 0.1976488435427D-01 + 0.2024284010865D-01 0.2073227025937D-01 0.2123344719799D-01 0.2174664966903D-01 + 0.2227216291392D-01 0.2281027881807D-01 0.2336129606116D-01 0.2392552027062D-01 + 0.2450326417836D-01 0.2509484778099D-01 0.2570059850330D-01 0.2632085136536D-01 + 0.2695594915311D-01 0.2760624259260D-01 0.2827209052789D-01 0.2895386010275D-01 + 0.2965192694621D-01 0.3036667536193D-01 0.3109849852168D-01 0.3184779866276D-01 + 0.3261498728960D-01 0.3340048537957D-01 0.3420472359307D-01 0.3502814248797D-01 + 0.3587119273850D-01 0.3673433535864D-01 0.3761804193016D-01 0.3852279483530D-01 + 0.3944908749425D-01 0.4039742460744D-01 0.4136832240282D-01 0.4236230888809D-01 + 0.4337992410818D-01 0.4442172040772D-01 0.4548826269899D-01 0.4658012873516D-01 + 0.4769790938896D-01 0.4884220893700D-01 0.5001364534968D-01 0.5121285058684D-01 + 0.5244047089927D-01 0.5369716713616D-01 0.5498361505854D-01 0.5630050565886D-01 + 0.5764854548679D-01 0.5902845698133D-01 0.6044097880935D-01 0.6188686621058D-01 + 0.6336689134928D-01 0.6488184367258D-01 0.6643253027559D-01 0.6801977627350D-01 + 0.6964442518061D-01 0.7130733929646D-01 0.7300940009921D-01 0.7475150864626D-01 + 0.7653458598235D-01 0.7835957355505D-01 0.8022743363795D-01 0.8213914976145D-01 + 0.8409572715143D-01 0.8609819317576D-01 0.8814759779876D-01 0.9024501404387D-01 + 0.9239153846433D-01 0.9458829162225D-01 0.9683641857599D-01 0.9913708937603D-01 + 0.1014914995693D+00 0.1039008707124D+00 0.1063664508929D+00 0.1088895152605D+00 + 0.1114713665659D+00 0.1141133357095D+00 0.1168167822989D+00 0.1195830952153D+00 + 0.1224136931891D+00 0.1253100253853D+00 0.1282735719976D+00 0.1313058448524D+00 + 0.1344083880215D+00 0.1375827784453D+00 0.1408306265648D+00 0.1441535769635D+00 + 0.1475533090190D+00 0.1510315375640D+00 0.1545900135575D+00 0.1582305247653D+00 + 0.1619548964503D+00 0.1657649920730D+00 0.1696627140012D+00 0.1736500042302D+00 + 0.1777288451116D+00 0.1819012600937D+00 0.1861693144696D+00 0.1905351161366D+00 + 0.1950008163646D+00 0.1995686105740D+00 0.2042407391237D+00 0.2090194881080D+00 + 0.2139071901636D+00 0.2189062252852D+00 0.2240190216511D+00 0.2292480564572D+00 + 0.2345958567607D+00 0.2400650003322D+00 0.2456581165163D+00 0.2513778871018D+00 + 0.2572270471990D+00 0.2632083861258D+00 0.2693247483019D+00 0.2755790341505D+00 + 0.2819742010072D+00 0.2885132640368D+00 0.2951992971565D+00 0.3020354339657D+00 + 0.3090248686825D+00 0.3161708570860D+00 0.3234767174638D+00 0.3309458315657D+00 + 0.3385816455606D+00 0.3463876709995D+00 0.3543674857811D+00 0.3625247351216D+00 + 0.3708631325267D+00 0.3793864607664D+00 0.3880985728517D+00 0.3970033930118D+00 + 0.4061049176725D+00 0.4154072164342D+00 0.4249144330487D+00 0.4346307863953D+00 + 0.4445605714532D+00 0.4547081602725D+00 0.4650780029394D+00 0.4756746285378D+00 + 0.4865026461046D+00 0.4975667455780D+00 0.5088716987384D+00 0.5204223601406D+00 + 0.5322236680352D+00 0.5442806452802D+00 0.5565984002389D+00 0.5691821276658D+00 + 0.5820371095764D+00 0.5951687161017D+00 0.6085824063246D+00 0.6222837290978D+00 + 0.6362783238409D+00 0.6505719213157D+00 0.6651703443774D+00 0.6800795087008D+00 + 0.6953054234796D+00 0.7108541920960D+00 0.7267320127606D+00 0.7429451791184D+00 + 0.7595000808215D+00 0.7764032040633D+00 0.7936611320756D+00 0.8112805455829D+00 + 0.8292682232144D+00 0.8476310418698D+00 0.8663759770367D+00 0.8855101030576D+00 + 0.9050405933431D+00 0.9249747205297D+00 0.9453198565782D+00 0.9660834728107D+00 + 0.9872731398834D+00 0.1008896527691D+01 0.1030961405203D+01 0.1053475640219D+01 + 0.1076447199059D+01 0.1099884146163D+01 0.1123794643606D+01 0.1148186950539D+01 + 0.1173069422520D+01 0.1198450510766D+01 0.1224338761296D+01 0.1250742813981D+01 + 0.1277671401474D+01 0.1305133348046D+01 0.1333137568292D+01 0.1361693065729D+01 + 0.1390808931264D+01 0.1420494341536D+01 0.1450758557128D+01 0.1481610920635D+01 + 0.1513060854600D+01 0.1545117859294D+01 0.1577791510350D+01 0.1611091456240D+01 + 0.1645027415584D+01 0.1679609174304D+01 0.1714846582593D+01 0.1750749551714D+01 + 0.1787328050617D+01 0.1824592102362D+01 0.1862551780351D+01 0.1901217204364D+01 + 0.1940598536381D+01 0.1980705976204D+01 0.2021549756852D+01 0.2063140139742D+01 + 0.2105487409633D+01 0.2148601869346D+01 0.2192493834233D+01 0.2237173626406D+01 + 0.2282651568716D+01 0.2328937978466D+01 0.2376043160867D+01 0.2423977402220D+01 + 0.2472750962826D+01 0.2522374069606D+01 0.2572856908445D+01 0.2624209616232D+01 + 0.2676442272606D+01 0.2729564891397D+01 0.2783587411753D+01 0.2838519688956D+01 + 0.2894371484912D+01 0.2951152458318D+01 0.3008872154495D+01 0.3067539994888D+01 + 0.3127165266219D+01 0.3187757109301D+01 0.3249324507495D+01 0.3311876274823D+01 + 0.3375421043713D+01 0.3439967252386D+01 0.3505523131885D+01 0.3572096692728D+01 + 0.3639695711197D+01 0.3708327715253D+01 0.3777999970073D+01 0.3848719463232D+01 + 0.3920492889483D+01 0.3993326635174D+01 0.4067226762296D+01 0.4142198992143D+01 + 0.4218248688609D+01 0.4295380841109D+01 0.4373600047133D+01 0.4452910494435D+01 + 0.4533315942858D+01 0.4614819705805D+01 0.4697424631363D+01 0.4781133083070D+01 + 0.4865946920363D+01 0.4951867478680D+01 0.5038895549253D+01 0.5127031358587D+01 + 0.5216274547643D+01 0.5306624150733D+01 0.5398078574138D+01 0.5490635574481D+01 + 0.5584292236839D+01 0.5679044952645D+01 0.5774889397373D+01 0.5871820508038D+01 + 0.5969832460529D+01 0.6068918646798D+01 0.6169071651923D+01 0.6270283231083D+01 + 0.6372544286455D+01 0.6475844844080D+01 0.6580174030705D+01 0.6685520050662D+01 + 0.6791870162784D+01 0.6899210657425D+01 0.7007526833594D+01 0.7116802976260D+01 + 0.7227022333863D+01 0.7338167096061D+01 0.7450218371783D+01 0.7563156167608D+01 + 0.7676959366534D+01 0.7791605707176D+01 0.7907071763461D+01 0.8023332924852D+01 + 0.8140363377175D+01 0.8258136084097D+01 0.8376622769317D+01 0.8495793899535D+01 + 0.8615618668258D+01 0.8736064980507D+01 0.8857099438500D+01 0.8978687328375D+01 + 0.9100792608024D+01 0.9223377896112D+01 0.9346404462355D+01 0.9469832219140D+01 + 0.9593619714548D+01 0.9717724126883D+01 0.9842101260766D+01 0.9966705544894D+01 + 0.1009149003153D+02 0.1021640639784D+02 0.1034140494910D+02 0.1046643462397D+02 + 0.1059144300176D+02 0.1071637631197D+02 0.1084117944603D+02 0.1096579597141D+02 + 0.1109016814815D+02 0.1121423694798D+02 0.1133794207598D+02 0.1146122199503D+02 + 0.1158401395297D+02 0.1170625401268D+02 0.1182787708518D+02 0.1194881696565D+02 + 0.1206900637272D+02 0.1218837699087D+02 0.1230685951615D+02 0.1242438370529D+02 + 0.1254087842817D+02 0.1265627172386D+02 0.1277049086019D+02 0.1288346239692D+02 + 0.1299511225264D+02 0.1310536577531D+02 0.1321414781668D+02 0.1332138281039D+02 + 0.1342699485401D+02 0.1353090779486D+02 0.1363304531979D+02 0.1373333104876D+02 + 0.1383168863237D+02 0.1392804185324D+02 0.1402231473126D+02 0.1411443163269D+02 + 0.1420431738302D+02 0.1429189738362D+02 0.1437709773209D+02 0.1445984534617D+02 + 0.1454006809125D+02 0.1461769491133D+02 0.1469265596325D+02 0.1476488275420D+02 + 0.1483430828227D+02 0.1490086717997D+02 0.1496449586045D+02 0.1502513266637D+02 + 0.1508271802111D+02 0.1513719458221D+02 0.1518850739667D+02 0.1523660405807D+02 + 0.1528143486504D+02 0.1532295298097D+02 0.1536111459451D+02 0.1539587908074D+02 + 0.1542720916252D+02 0.1545507107166D+02 0.1547943470979D+02 0.1550027380818D+02 + 0.1551756608649D+02 0.1553129340973D+02 0.1554144194321D+02 0.1554800230489D+02 + 0.1555096971483D+02 0.1555034414109D+02 0.1554613044170D+02 0.1553833850219D+02 + 0.1552698336815D+02 0.1551208537224D+02 0.1549367025525D+02 0.1547176928048D+02 + 0.1544641934108D+02 0.1541766305962D+02 0.1538554887941D+02 0.1535013114701D+02 + 0.1531147018524D+02 0.1526963235632D+02 0.1522469011431D+02 0.1517672204648D+02 + 0.1512581290294D+02 0.1507205361401D+02 0.1501554129469D+02 0.1495637923586D+02 + 0.1489467688143D+02 0.1483054979117D+02 0.1476411958856D+02 0.1469551389326D+02 + 0.1462486623765D+02 0.1455231596717D+02 0.1447800812386D+02 0.1440209331295D+02 + 0.1432472755191D+02 0.1424607210189D+02 0.1416629328114D+02 0.1408556226023D+02 + 0.1400405483895D+02 0.1392195120462D+02 0.1383943567190D+02 0.1375669640397D+02 + 0.1367392511509D+02 0.1359131675471D+02 0.1350906917319D+02 0.1342738276945D+02 + 0.1334646012062D+02 0.1326650559429D+02 0.1318772494356D+02 0.1311032488543D+02 + 0.1303451266311D+02 0.1296049559287D+02 0.1288848059600D+02 0.1281867371685D+02 + 0.1275127962762D+02 0.1268650112092D+02 0.1262453859099D+02 0.1256558950479D+02 + 0.1250984786396D+02 0.1245750365900D+02 0.1240874231676D+02 0.1236374414287D+02 + 0.1232268376027D+02 0.1228572954555D+02 0.1225304306446D+02 0.1222477850840D+02 + 0.1220108213345D+02 0.1218209170364D+02 0.1216793594045D+02 0.1215873398004D+02 + 0.1215459484040D+02 0.1215561690015D+02 0.1216188739095D+02 0.1217348190556D+02 + 0.1219046392335D+02 0.1221288435558D+02 0.1224078111210D+02 0.1227417869177D+02 + 0.1231308779833D+02 0.1235750498394D+02 0.1240741232221D+02 0.1246277711273D+02 + 0.1252355161890D+02 0.1258967284103D+02 0.1266106232638D+02 0.1273762601795D+02 + 0.1281925414370D+02 0.1290582114765D+02 0.1299718566449D+02 0.1309319053901D+02 + 0.1319366289170D+02 0.1329841423160D+02 0.1340724061751D+02 0.1351992286850D+02 + 0.1363622682445D+02 0.1375590365723D+02 0.1387869023310D+02 0.1400430952654D+02 + 0.1413247108568D+02 0.1426287154943D+02 0.1439519521585D+02 0.1452911466164D+02 + 0.1466429141204D+02 0.1480037666032D+02 0.1493701203603D+02 0.1507383042071D+02 + 0.1521045680978D+02 0.1534650921898D+02 0.1548159963362D+02 0.1561533499861D+02 + 0.1574731824718D+02 0.1587714936575D+02 0.1600442649257D+02 0.1612874704717D+02 + 0.1624970888773D+02 0.1636691149325D+02 0.1647995716712D+02 0.1658845225866D+02 + 0.1669200839885D+02 0.1679024374656D+02 0.1688278424127D+02 0.1696926485808D+02 + 0.1704933086091D+02 0.1712263904955D+02 0.1718885899597D+02 0.1724767426555D+02 + 0.1729878361858D+02 0.1734190218727D+02 0.1737676262379D+02 0.1740311621443D+02 + 0.1742073395531D+02 0.1742940758484D+02 0.1742895056832D+02 0.1741919903002D+02 + 0.1740001262822D+02 0.1737127536868D+02 0.1733289635230D+02 0.1728481045258D+02 + 0.1722697891897D+02 0.1715938990207D+02 0.1708205889706D+02 0.1699502910180D+02 + 0.1689837168630D+02 0.1679218597071D+02 0.1667659950885D+02 0.1655176807505D+02 + 0.1641787555199D+02 0.1627513371796D+02 0.1612378193190D+02 0.1596408671521D+02 + 0.1579634122978D+02 0.1562086465177D+02 0.1543800144144D+02 0.1524812050953D+02 + 0.1505161428129D+02 0.1484889765958D+02 0.1464040688904D+02 0.1442659832383D+02 + 0.1420794710164D+02 0.1398494572768D+02 0.1375810257224D+02 0.1352794028641D+02 + 0.1329499414062D+02 0.1305981029156D+02 0.1282294398290D+02 0.1258495768649D+02 + 0.1234641919025D+02 0.1210789964020D+02 0.1186997154378D+02 0.1163320674257D+02 + 0.1139817436235D+02 0.1116543874898D+02 0.1093555739904D+02 0.1070907889381D+02 + 0.1048654084606D+02 0.1026846786867D+02 0.1005536957455D+02 0.9847738617121D+01 + 0.9646048780880D+01 0.9450753131140D+01 0.9262282232242D+01 0.9081042443130D+01 + 0.8907414299029D+01 0.8741750987631D+01 0.8584376927965D+01 0.8435586459318D+01 + 0.8295642647763D+01 0.8164776216718D+01 0.8043184607728D+01 0.7931031177002D+01 + 0.7828444532547D+01 0.7735518016122D+01 0.7652309333478D+01 0.7578840335666D+01 + 0.7515096953395D+01 0.7461029285686D+01 0.7416551843277D+01 0.7381543946429D+01 + 0.7355850276012D+01 0.7339281575945D+01 0.7331615504269D+01 0.7332597629364D+01 + 0.7341942567039D+01 0.7359335253467D+01 0.7384432348207D+01 0.7416863760823D+01 + 0.7456234293928D+01 0.7502125394819D+01 0.7554097007226D+01 0.7611689514121D+01 + 0.7674425761978D+01 0.7741813156378D+01 0.7813345818389D+01 0.7888506790796D+01 + 0.7966770282884D+01 0.8047603942247D+01 0.8130471141889D+01 0.8214833270782D+01 + 0.8300152015977D+01 0.8385891624432D+01 0.8471521132834D+01 0.8556516553871D+01 + 0.8640363007725D+01 0.8722556787896D+01 0.8802607350906D+01 0.8880039219965D+01 + 0.8954393793234D+01 0.9025231048014D+01 0.9092131132851D+01 0.9154695840366D+01 + 0.9212549954385D+01 0.9265342465848D+01 0.9312747652818D+01 0.9354466020870D+01 + 0.9390225101034D+01 0.9419780103437D+01 0.9442914425707D+01 0.9459440016156D+01 + 0.9469197592650D+01 0.9472056719009D+01 0.9467915741590D+01 0.9456701589582D+01 + 0.9438369443293D+01 0.9412902275450D+01 0.9380310271200D+01 0.9340630133144D+01 + 0.9293924278246D+01 0.9240279934002D+01 0.9179808141609D+01 0.9112642674295D+01 + 0.9038938879184D+01 0.8958872451344D+01 0.8872638148743D+01 0.8780448456976D+01 + 0.8682532212582D+01 0.8579133193743D+01 0.8470508687033D+01 0.8356928038724D+01 + 0.8238671198911D+01 0.8116027266468D+01 0.7989293042520D+01 0.7858771599766D+01 + 0.7724770874590D+01 0.7587602288494D+01 0.7447579404921D+01 0.7305016627098D+01 + 0.7160227942029D+01 0.7013525715286D+01 0.6865219540750D+01 0.6715615148954D+01 + 0.6565013377174D+01 0.6413709203935D+01 0.6261990850102D+01 0.6110138948256D+01 + 0.5958425781584D+01 0.5807114593095D+01 0.5656458965512D+01 0.5506702271806D+01 + 0.5358077195953D+01 0.5210805323119D+01 0.5065096798158D+01 0.4921150050970D+01 + 0.4779151587010D+01 0.4639275840943D+01 0.4501685091221D+01 0.4366529433139D+01 + 0.4233946807745D+01 0.4104063083809D+01 0.3976992189920D+01 0.3852836293669D+01 + 0.3731686024786D+01 0.3613620739020D+01 0.3498708819513D+01 0.3387008012394D+01 + 0.3278565793304D+01 0.3173419761582D+01 0.3071598058868D+01 0.2973119808928D+01 + 0.2877995575562D+01 0.2786227835561D+01 0.2697811463708D+01 0.2612734227007D+01 + 0.2530977285357D+01 0.2452515696071D+01 0.2377318919736D+01 0.2305351325088D+01 + 0.2236572690686D+01 0.2170938701357D+01 0.2108401437525D+01 0.2048909855707D+01 + 0.1992410258615D+01 0.1938846753493D+01 0.1888161697452D+01 0.1840296128750D+01 + 0.1795190183139D+01 0.1752783494525D+01 0.1713015579381D+01 0.1675826204476D+01 + 0.1641155737640D+01 0.1608945481415D+01 0.1579137989569D+01 0.1551677366569D+01 + 0.1526509550213D+01 0.1503582577717D+01 0.1482846835631D+01 0.1464255294029D+01 + 0.1447763725462D+01 0.1433330909213D+01 0.1420918821393D+01 0.1410492811422D+01 + 0.1402021765432D+01 0.1395478257056D+01 0.1390838686018D+01 0.1388083404859D+01 + 0.1387196833976D+01 0.1388167565031D+01 0.1390988452597D+01 0.1395656693682D+01 + 0.1402173894504D+01 0.1410546123630D+01 0.1420783950179D+01 0.1432902465463D+01 + 0.1446921285905D+01 0.1462864534641D+01 0.1480760798548D+01 0.1500643056846D+01 + 0.1522548576646D+01 0.1546518770016D+01 0.1572599006234D+01 0.1600838371864D+01 + 0.1631289370197D+01 + 7 1001 + 1 0 -1 -507.15872 + 2 0 -1 -57.90193 + 2 1 1 -49.86287 + 2 1 -2 -49.86287 + 3 0 -1 -5.54201 + 3 1 1 -3.19737 + 3 1 -2 -3.19737 + 0.1578653899636D-04 0.1617348895146D-04 0.1656992171165D-04 0.1697606959830D-04 + 0.1739217062193D-04 0.1781846862141D-04 0.1825521340658D-04 0.1870266090435D-04 + 0.1916107330843D-04 0.1963071923261D-04 0.2011187386790D-04 0.2060481914343D-04 + 0.2110984389131D-04 0.2162724401556D-04 0.2215732266508D-04 0.2270039041093D-04 + 0.2325676542789D-04 0.2382677368050D-04 0.2441074911358D-04 0.2500903384750D-04 + 0.2562197837812D-04 0.2624994178169D-04 0.2689329192470D-04 0.2755240567892D-04 + 0.2822766914165D-04 0.2891947786131D-04 0.2962823706866D-04 0.3035436191355D-04 + 0.3109827770750D-04 0.3186042017220D-04 0.3264123569411D-04 0.3344118158521D-04 + 0.3426072635017D-04 0.3510034996003D-04 0.3596054413256D-04 0.3684181261946D-04 + 0.3774467150058D-04 0.3866964948532D-04 0.3961728822137D-04 0.4058814261105D-04 + 0.4158278113526D-04 0.4260178618544D-04 0.4364575440359D-04 0.4471529703058D-04 + 0.4581104026298D-04 0.4693362561857D-04 0.4808371031079D-04 0.4926196763234D-04 + 0.5046908734808D-04 0.5170577609761D-04 0.5297275780756D-04 0.5427077411401D-04 + 0.5560058479521D-04 0.5696296821480D-04 0.5835872177592D-04 0.5978866238633D-04 + 0.6125362693487D-04 0.6275447277959D-04 0.6429207824773D-04 0.6586734314792D-04 + 0.6748118929484D-04 0.6913456104670D-04 0.7082842585579D-04 0.7256377483246D-04 + 0.7434162332284D-04 0.7616301150065D-04 0.7802900497344D-04 0.7994069540354D-04 + 0.8189920114422D-04 0.8390566789129D-04 0.8596126935059D-04 0.8806720792173D-04 + 0.9022471539851D-04 0.9243505368636D-04 0.9469951553726D-04 0.9701942530259D-04 + 0.9939613970422D-04 0.1018310486245D-03 0.1043255759154D-03 0.1068811802272D-03 + 0.1094993558578D-03 0.1121816336222D-03 0.1149295817432D-03 0.1177448067642D-03 + 0.1206289544839D-03 0.1235837109134D-03 0.1266108032574D-03 0.1297120009183D-03 + 0.1328891165257D-03 0.1361440069902D-03 0.1394785745829D-03 0.1428947680418D-03 + 0.1463945837040D-03 0.1499800666665D-03 0.1536533119746D-03 0.1574164658392D-03 + 0.1612717268838D-03 0.1652213474221D-03 0.1692676347657D-03 0.1734129525650D-03 + 0.1776597221811D-03 0.1820104240923D-03 0.1864675993337D-03 0.1910338509730D-03 + 0.1957118456205D-03 0.2005043149775D-03 0.2054140574208D-03 0.2104439396266D-03 + 0.2155968982333D-03 0.2208759415447D-03 0.2262841512752D-03 0.2318246843360D-03 + 0.2375007746657D-03 0.2433157351052D-03 0.2492729593172D-03 0.2553759237533D-03 + 0.2616281896683D-03 0.2680334051830D-03 0.2745953073974D-03 0.2813177245552D-03 + 0.2882045782603D-03 0.2952598857471D-03 0.3024877622062D-03 0.3098924231657D-03 + 0.3174781869307D-03 0.3252494770818D-03 0.3332108250335D-03 0.3413668726553D-03 + 0.3497223749555D-03 0.3582822028307D-03 0.3670513458808D-03 0.3760349152927D-03 + 0.3852381467940D-03 0.3946664036772D-03 0.4043251798977D-03 0.4142201032463D-03 + 0.4243569385986D-03 0.4347415912426D-03 0.4453801102869D-03 0.4562786921509D-03 + 0.4674436841396D-03 0.4788815881046D-03 0.4905990641928D-03 0.5026029346867D-03 + 0.5149001879362D-03 0.5274979823861D-03 0.5404036507000D-03 0.5536247039839D-03 + 0.5671688361118D-03 0.5810439281552D-03 0.5952580529193D-03 0.6098194795887D-03 + 0.6247366784846D-03 0.6400183259371D-03 0.6556733092739D-03 0.6717107319299D-03 + 0.6881399186792D-03 0.7049704209928D-03 0.7222120225257D-03 0.7398747447357D-03 + 0.7579688526366D-03 0.7765048606903D-03 0.7954935388406D-03 0.8149459186910D-03 + 0.8348732998317D-03 0.8552872563181D-03 0.8761996433044D-03 0.8976226038371D-03 + 0.9195685758107D-03 0.9420502990905D-03 0.9650808228062D-03 0.9886735128198D-03 + 0.1012842059373D-02 0.1037600484917D-02 0.1062963152132D-02 0.1088944772132D-02 + 0.1115560412878D-02 0.1142825507777D-02 0.1170755864502D-02 0.1199367674011D-02 + 0.1228677519787D-02 0.1258702387298D-02 0.1289459673684D-02 0.1320967197671D-02 + 0.1353243209726D-02 0.1386306402455D-02 0.1420175921241D-02 0.1454871375148D-02 + 0.1490412848071D-02 0.1526820910165D-02 0.1564116629537D-02 0.1602321584218D-02 + 0.1641457874423D-02 0.1681548135099D-02 0.1722615548775D-02 0.1764683858713D-02 + 0.1807777382375D-02 0.1851921025208D-02 0.1897140294758D-02 0.1943461315115D-02 + 0.1990910841708D-02 0.2039516276440D-02 0.2089305683192D-02 0.2140307803689D-02 + 0.2192552073741D-02 0.2246068639873D-02 0.2300888376342D-02 0.2357042902562D-02 + 0.2414564600938D-02 0.2473486635121D-02 0.2533842968695D-02 0.2595668384307D-02 + 0.2658998503243D-02 0.2723869805469D-02 0.2790319650148D-02 0.2858386296630D-02 + 0.2928108925945D-02 0.2999527662801D-02 0.3072683598093D-02 0.3147618811948D-02 + 0.3224376397309D-02 0.3303000484068D-02 0.3383536263775D-02 0.3466030014917D-02 + 0.3550529128793D-02 0.3637082136000D-02 0.3725738733527D-02 0.3816549812498D-02 + 0.3909567486548D-02 0.4004845120878D-02 0.4102437361973D-02 0.4202400168026D-02 + 0.4304790840063D-02 0.4409668053798D-02 0.4517091892231D-02 0.4627123878997D-02 + 0.4739827012501D-02 0.4855265800840D-02 0.4973506297535D-02 0.5094616138099D-02 + 0.5218664577446D-02 0.5345722528171D-02 0.5475862599718D-02 0.5609159138444D-02 + 0.5745688268629D-02 0.5885527934412D-02 0.6028757942710D-02 0.6175460007122D-02 + 0.6325717792843D-02 0.6479616962619D-02 0.6637245223749D-02 0.6798692376180D-02 + 0.6964050361700D-02 0.7133413314258D-02 0.7306877611443D-02 0.7484541927142D-02 + 0.7666507285398D-02 0.7852877115512D-02 0.8043757308385D-02 0.8239256274168D-02 + 0.8439485001208D-02 0.8644557116350D-02 0.8854588946603D-02 0.9069699582215D-02 + 0.9290010941175D-02 0.9515647835184D-02 0.9746738037117D-02 0.9983412350011D-02 + 0.1022580467763D-01 0.1047405209658D-01 0.1072829493013D-01 0.1098867682362D-01 + 0.1125534482157D-01 0.1152844944663D-01 0.1180814478014D-01 0.1209458854464D-01 + 0.1238794218813D-01 0.1268837097027D-01 0.1299604405054D-01 0.1331113457823D-01 + 0.1363381978460D-01 0.1396428107702D-01 0.1430270413516D-01 0.1464927900939D-01 + 0.1500420022134D-01 0.1536766686664D-01 0.1573988272003D-01 0.1612105634269D-01 + 0.1651140119200D-01 0.1691113573367D-01 0.1732048355639D-01 0.1773967348898D-01 + 0.1816893972004D-01 0.1860852192031D-01 0.1905866536769D-01 0.1951962107491D-01 + 0.1999164592006D-01 0.2047500277994D-01 0.2096996066626D-01 0.2147679486487D-01 + 0.2199578707791D-01 0.2252722556908D-01 0.2307140531207D-01 0.2362862814207D-01 + 0.2419920291068D-01 0.2478344564401D-01 0.2538167970423D-01 0.2599423595455D-01 + 0.2662145292768D-01 0.2726367699796D-01 0.2792126255702D-01 0.2859457219324D-01 + 0.2928397687497D-01 0.2998985613760D-01 0.3071259827459D-01 0.3145260053247D-01 + 0.3221026930995D-01 0.3298602036115D-01 0.3378027900310D-01 0.3459348032750D-01 + 0.3542606941694D-01 0.3627850156547D-01 0.3715124250387D-01 0.3804476862936D-01 + 0.3895956724022D-01 0.3989613677503D-01 0.4085498705688D-01 0.4183663954253D-01 + 0.4284162757659D-01 0.4387049665085D-01 0.4492380466884D-01 0.4600212221569D-01 + 0.4710603283337D-01 0.4823613330147D-01 0.4939303392348D-01 0.5057735881887D-01 + 0.5178974622075D-01 0.5303084877959D-01 0.5430133387272D-01 0.5560188391999D-01 + 0.5693319670552D-01 0.5829598570568D-01 0.5969098042344D-01 0.6111892672907D-01 + 0.6258058720751D-01 0.6407674151217D-01 0.6560818672563D-01 0.6717573772702D-01 + 0.6878022756642D-01 0.7042250784620D-01 0.7210344910947D-01 0.7382394123585D-01 + 0.7558489384436D-01 0.7738723670390D-01 0.7923192015110D-01 0.8111991551585D-01 + 0.8305221555447D-01 0.8502983489072D-01 0.8705381046465D-01 0.8912520198948D-01 + 0.9124509241649D-01 0.9341458840816D-01 0.9563482081952D-01 0.9790694518784D-01 + 0.1002321422308D+00 0.1026116183530D+00 0.1050466061617D+00 0.1075383649901D+00 + 0.1100881814308D+00 0.1126973698768D+00 0.1153672730725D+00 0.1180992626731D+00 + 0.1208947398131D+00 0.1237551356842D+00 0.1266819121223D+00 0.1296765622038D+00 + 0.1327406108509D+00 0.1358756154471D+00 0.1390831664613D+00 0.1423648880819D+00 + 0.1457224388598D+00 0.1491575123622D+00 0.1526718378346D+00 0.1562671808731D+00 + 0.1599453441066D+00 0.1637081678882D+00 0.1675575309963D+00 0.1714953513455D+00 + 0.1755235867073D+00 0.1796442354403D+00 0.1838593372298D+00 0.1881709738376D+00 + 0.1925812698606D+00 0.1970923934995D+00 0.2017065573369D+00 0.2064260191245D+00 + 0.2112530825796D+00 0.2161900981917D+00 0.2212394640365D+00 0.2264036266010D+00 + 0.2316850816156D+00 0.2370863748964D+00 0.2426101031954D+00 0.2482589150589D+00 + 0.2540355116950D+00 0.2599426478486D+00 0.2659831326839D+00 0.2721598306759D+00 + 0.2784756625075D+00 0.2849336059751D+00 0.2915366969006D+00 0.2982880300498D+00 + 0.3051907600570D+00 0.3122481023559D+00 0.3194633341157D+00 0.3268397951826D+00 + 0.3343808890252D+00 0.3420900836857D+00 0.3499709127335D+00 0.3580269762230D+00 + 0.3662619416539D+00 0.3746795449340D+00 0.3832835913436D+00 0.3920779565011D+00 + 0.4010665873291D+00 0.4102535030206D+00 0.4196427960037D+00 0.4292386329056D+00 + 0.4390452555139D+00 0.4490669817344D+00 0.4593082065455D+00 0.4697734029478D+00 + 0.4804671229074D+00 0.4913939982930D+00 0.5025587418053D+00 0.5139661478975D+00 + 0.5256210936858D+00 0.5375285398497D+00 0.5496935315191D+00 0.5621211991494D+00 + 0.5748167593807D+00 0.5877855158816D+00 0.6010328601763D+00 0.6145642724519D+00 + 0.6283853223459D+00 0.6425016697124D+00 0.6569190653640D+00 0.6716433517897D+00 + 0.6866804638451D+00 0.7020364294146D+00 0.7177173700432D+00 0.7337295015358D+00 + 0.7500791345223D+00 0.7667726749863D+00 0.7838166247557D+00 0.8012175819522D+00 + 0.8189822413981D+00 0.8371173949781D+00 0.8556299319528D+00 0.8745268392233D+00 + 0.8938152015413D+00 0.9135022016660D+00 0.9335951204611D+00 0.9541013369320D+00 + 0.9750283281989D+00 0.9963836694034D+00 0.1018175033545D+01 0.1040410191245D+01 + 0.1063097010434D+01 0.1086243455959D+01 0.1109857589113D+01 0.1133947567068D+01 + 0.1158521642226D+01 0.1183588161478D+01 0.1209155565357D+01 0.1235232387096D+01 + 0.1261827251583D+01 0.1288948874198D+01 0.1316606059543D+01 0.1344807700058D+01 + 0.1373562774503D+01 0.1402880346326D+01 0.1432769561892D+01 0.1463239648581D+01 + 0.1494299912744D+01 0.1525959737514D+01 0.1558228580466D+01 0.1591115971128D+01 + 0.1624631508323D+01 0.1658784857354D+01 0.1693585747013D+01 0.1729043966423D+01 + 0.1765169361687D+01 0.1801971832361D+01 0.1839461327732D+01 0.1877647842900D+01 + 0.1916541414650D+01 0.1956152117128D+01 0.1996490057294D+01 0.2037565370156D+01 + 0.2079388213778D+01 0.2121968764063D+01 0.2165317209287D+01 0.2209443744401D+01 + 0.2254358565076D+01 0.2300071861494D+01 0.2346593811883D+01 0.2393934575776D+01 + 0.2442104287007D+01 0.2491113046422D+01 0.2540970914303D+01 0.2591687902512D+01 + 0.2643273966329D+01 0.2695738995990D+01 0.2749092807924D+01 0.2803345135669D+01 + 0.2858505620479D+01 0.2914583801597D+01 0.2971589106210D+01 0.3029530839067D+01 + 0.3088418171758D+01 0.3148260131652D+01 0.3209065590491D+01 0.3270843252628D+01 + 0.3333601642916D+01 0.3397349094239D+01 0.3462093734677D+01 0.3527843474314D+01 + 0.3594605991675D+01 0.3662388719796D+01 0.3731198831922D+01 0.3801043226845D+01 + 0.3871928513851D+01 0.3943860997306D+01 0.4016846660867D+01 0.4090891151325D+01 + 0.4165999762069D+01 0.4242177416188D+01 0.4319428649207D+01 0.4397757591456D+01 + 0.4477167950078D+01 0.4557662990695D+01 0.4639245518706D+01 0.4721917860259D+01 + 0.4805681842875D+01 0.4890538775751D+01 0.4976489429741D+01 0.5063534017029D+01 + 0.5151672170500D+01 0.5240902922831D+01 0.5331224685300D+01 0.5422635226341D+01 + 0.5515131649853D+01 0.5608710373282D+01 0.5703367105493D+01 0.5799096824445D+01 + 0.5895893754705D+01 0.5993751344805D+01 0.6092662244478D+01 0.6192618281787D+01 + 0.6293610440184D+01 0.6395628835523D+01 0.6498662693043D+01 0.6602700324378D+01 + 0.6707729104605D+01 0.6813735449365D+01 0.6920704792113D+01 0.7028621561508D+01 + 0.7137469159001D+01 0.7247229936655D+01 0.7357885175242D+01 0.7469415062657D+01 + 0.7581798672707D+01 0.7695013944312D+01 0.7809037661174D+01 0.7923845431963D+01 + 0.8039411671089D+01 0.8155709580084D+01 0.8272711129697D+01 0.8390387042717D+01 + 0.8508706777623D+01 0.8627638513097D+01 0.8747149133491D+01 0.8867204215290D+01 + 0.8987768014662D+01 0.9108803456159D+01 0.9230272122632D+01 0.9352134246452D+01 + 0.9474348702102D+01 0.9596873000219D+01 0.9719663283170D+01 0.9842674322237D+01 + 0.9965859516495D+01 0.1008917089347D+02 0.1021255911164D+02 0.1033597346494D+02 + 0.1045936188917D+02 0.1058267097071D+02 0.1070584595723D+02 0.1082883077086D+02 + 0.1095156802364D+02 0.1107399903549D+02 0.1119606385467D+02 0.1131770128094D+02 + 0.1143884889141D+02 0.1155944306921D+02 0.1167941903504D+02 0.1179871088169D+02 + 0.1191725161162D+02 0.1203497317767D+02 0.1215180652699D+02 0.1226768164819D+02 + 0.1238252762190D+02 0.1249627267470D+02 0.1260884423658D+02 0.1272016900183D+02 + 0.1283017299364D+02 0.1293878163220D+02 0.1304591980662D+02 0.1315151195045D+02 + 0.1325548212101D+02 0.1335775408241D+02 0.1345825139248D+02 0.1355689749341D+02 + 0.1365361580616D+02 0.1374832982878D+02 0.1384096323836D+02 0.1393143999685D+02 + 0.1401968446055D+02 0.1410562149324D+02 0.1418917658296D+02 0.1427027596236D+02 + 0.1434884673246D+02 0.1442481698984D+02 0.1449811595705D+02 0.1456867411624D+02 + 0.1463642334576D+02 0.1470129705971D+02 0.1476323035010D+02 0.1482216013171D+02 + 0.1487802528922D+02 0.1493076682648D+02 0.1498032801783D+02 0.1502665456102D+02 + 0.1506969473168D+02 0.1510939953890D+02 0.1514572288178D+02 0.1517862170662D+02 + 0.1520805616428D+02 0.1523398976771D+02 0.1525638954888D+02 0.1527522621517D+02 + 0.1529047430449D+02 0.1530211233897D+02 0.1531012297669D+02 0.1531449316107D+02 + 0.1531521426746D+02 0.1531228224653D+02 0.1530569776385D+02 0.1529546633542D+02 + 0.1528159845842D+02 0.1526410973678D+02 0.1524302100115D+02 0.1521835842251D+02 + 0.1519015361918D+02 0.1515844375649D+02 0.1512327163857D+02 0.1508468579192D+02 + 0.1504274053993D+02 0.1499749606805D+02 0.1494901847887D+02 0.1489737983673D+02 + 0.1484265820118D+02 0.1478493764889D+02 0.1472430828333D+02 0.1466086623191D+02 + 0.1459471362981D+02 0.1452595859035D+02 0.1445471516108D+02 0.1438110326543D+02 + 0.1430524862934D+02 0.1422728269244D+02 0.1414734250363D+02 0.1406557060035D+02 + 0.1398211487161D+02 0.1389712840422D+02 0.1381076931213D+02 0.1372320054863D+02 + 0.1363458970126D+02 0.1354510876927D+02 0.1345493392372D+02 0.1336424524995D+02 + 0.1327322647273D+02 0.1318206466399D+02 0.1309094993330D+02 0.1300007510143D+02 + 0.1290963535714D+02 0.1281982789752D+02 0.1273085155232D+02 0.1264290639276D+02 + 0.1255619332527D+02 0.1247091367072D+02 0.1238726872994D+02 0.1230545933610D+02 + 0.1222568539485D+02 0.1214814541300D+02 0.1207303601673D+02 0.1200055146031D+02 + 0.1193088312639D+02 0.1186421901898D+02 0.1180074325032D+02 0.1174063552294D+02 + 0.1168407060813D+02 0.1163121782230D+02 0.1158224050260D+02 0.1153729548330D+02 + 0.1149653257447D+02 0.1146009404450D+02 0.1142811410812D+02 0.1140071842164D+02 + 0.1137802358688D+02 0.1136013666576D+02 0.1134715470718D+02 0.1133916428789D+02 + 0.1133624106918D+02 0.1133844937122D+02 0.1134584176671D+02 0.1135845869570D+02 + 0.1137632810322D+02 0.1139946510155D+02 0.1142787165885D+02 0.1146153631568D+02 + 0.1150043393121D+02 0.1154452546053D+02 0.1159375776474D+02 0.1164806345517D+02 + 0.1170736077308D+02 0.1177155350630D+02 0.1184053094390D+02 0.1191416787001D+02 + 0.1199232459792D+02 0.1207484704524D+02 0.1216156685110D+02 0.1225230153582D+02 + 0.1234685470389D+02 0.1244501629046D+02 0.1254656285171D+02 0.1265125789933D+02 + 0.1275885227884D+02 0.1286908459194D+02 0.1298168166226D+02 0.1309635904426D+02 + 0.1321282157449D+02 0.1333076396452D+02 0.1344987143449D+02 0.1356982038622D+02 + 0.1369027911453D+02 0.1381090855534D+02 0.1393136306888D+02 0.1405129125632D+02 + 0.1417033680777D+02 0.1428813937954D+02 0.1440433549856D+02 0.1451855949134D+02 + 0.1463044443513D+02 0.1473962312845D+02 0.1484572907831D+02 0.1494839750107D+02 + 0.1504726633406D+02 0.1514197725464D+02 0.1523217670369D+02 0.1531751690999D+02 + 0.1539765691227D+02 0.1547226357544D+02 0.1554101259751D+02 0.1560358950360D+02 + 0.1565969062367D+02 0.1570902405021D+02 0.1575131057246D+02 0.1578628458359D+02 + 0.1581369495734D+02 0.1583330589058D+02 0.1584489770857D+02 0.1584826762939D+02 + 0.1584323048443D+02 0.1582961939181D+02 0.1580728637957D+02 0.1577610295600D+02 + 0.1573596062412D+02 0.1568677133793D+02 0.1562846789788D+02 0.1556100428352D+02 + 0.1548435592113D+02 0.1539851988472D+02 0.1530351502871D+02 0.1519938205103D+02 + 0.1508618348555D+02 0.1496400362295D+02 0.1483294835964D+02 0.1469314497431D+02 + 0.1454474183222D+02 0.1438790801743D+02 0.1422283289371D+02 0.1404972559501D+02 + 0.1386881444652D+02 0.1368034631816D+02 0.1348458591205D+02 0.1328181498628D+02 + 0.1307233151724D+02 0.1285644880352D+02 0.1263449451412D+02 0.1240680968454D+02 + 0.1217374766427D+02 0.1193567301945D+02 0.1169296039510D+02 0.1144599334102D+02 + 0.1119516310618D+02 0.1094086740628D+02 0.1068350916959D+02 0.1042349526614D+02 + 0.1016123522570D+02 0.9897139949897D+01 0.9631620424036D+01 0.9365086434234D+01 + 0.9097945295485D+01 0.8830600596306D+01 0.8563450965553D+01 0.8296888866978D+01 + 0.8031299426956D+01 0.7767059300707D+01 0.7504535582166D+01 0.7244084762444D+01 + 0.6986051741584D+01 0.6730768898049D+01 0.6478555220073D+01 0.6229715502640D+01 + 0.5984539613520D+01 0.5743301831362D+01 0.5506260258421D+01 0.5273656310051D+01 + 0.5045714282619D+01 0.4822641001004D+01 0.4604625546363D+01 0.4391839064324D+01 + 0.4184434653267D+01 0.3982547331871D+01 0.3786294084591D+01 0.3595773983274D+01 + 0.3411068382667D+01 0.3232241187137D+01 0.3059339185539D+01 0.2892392450785D+01 + 0.2731414800361D+01 0.2576404313726D+01 0.2427343902298D+01 0.2284201927494D+01 + 0.2146932862144D+01 0.2015477990452D+01 0.1889766141574D+01 0.1769714451851D+01 + 0.1655229150677D+01 0.1546206365031D+01 0.1442532937702D+01 0.1344087254359D+01 + 0.1250740074677D+01 0.1162355362893D+01 0.1078791113305D+01 0.9999001664158D+00 + 0.9255310116380D+00 0.8555285726756D+00 0.7897349719813D+00 0.7279902709203D+00 + 0.6701331825702D+00 0.6160017543702D+00 0.5654340181429D+00 0.5182686053198D+00 + 0.4743453255245D+00 0.4335057069869D+00 0.3955934975869D+00 0.3604551256451D+00 + 0.3279401198959D+00 0.2979014883848D+00 0.2701960563326D+00 0.2446847632933D+00 + 0.2212329202050D+00 0.1997104271873D+00 0.1799919531742D+00 0.1619570786872D+00 + 0.1454904032488D+00 0.1304816191044D+00 0.1168255530742D+00 0.1044221784755D+00 + 0.9317659916197D-01 0.8299900779599D-01 0.7380462053330D-01 0.6551359032180D-01 + 0.5805090102992D-01 0.5134624460746D-01 0.4533388345164D-01 0.3995250010293D-01 + 0.3514503633071D-01 0.3085852359054D-01 0.2704390674330D-01 0.2365586282486D-01 + 0.2065261654401D-01 0.1799575406874D-01 0.1565003653805D-01 0.1358321461002D-01 + 0.1176584522885D-01 0.1017111166496D-01 0.8774647755498D-02 0.7554367147507D-02 + 0.6490298225416D-02 0.5564425288265D-02 0.4760536431469D-02 0.4064078483823D-02 + 0.3462019253140D-02 0.2942717244106D-02 0.2495798929730D-02 0.2112043583510D-02 + 0.1783275613010D-02 0.1502264277103D-02 0.1262630618290D-02 0.1058761398246D-02 + 0.8857297885661D-03 0.7392225393744D-03 0.6154733254345D-03 0.5112019523546D-03 + 0.4235590937846D-03 0.3500762237470D-03 0.2886204058570D-03 0.2373536026828D-03 + 0.1946961733584D-03 0.1592942353003D-03 0.1299905760369D-03 0.1057988132781D-03 + 0.8588051503706D-04 0.6952500647092D-04 0.5613160579895D-04 0.4519404786329D-04 + 0.3628687035185D-04 0.2905355415809D-04 0.2319622560364D-04 0.1846674412247D-04 + 0.1465901435452D-04 0.1160237630845D-04 0.9155941237235D-05 0.7203754063583D-05 + 0.5650675548704D-05 0.4418888895851D-05 0.3444946109309D-05 0.2677279196489D-05 + 0.2074110224063D-05 0.1601702343433D-05 0.1232901224104D-05 0.9459229135084D-06 + 0.7233500246102D-06 0.5513033849405D-06 0.4187609114499D-06 0.3169995537591D-06 + 0.2391397226304D-06 0.1797747380809D-06 0.1346705380082D-06 0.1005232267075D-06 + 0.7476405384285D-07 0.5540313611713D-07 0.4090470094196D-07 0.3008787576404D-07 + 0.2204809733378D-07 0.1609509820830D-07 0.1170416651842D-07 0.8477990246133D-08 + 0.6116907264900D-08 0.4395803247583D-08 0.3146245236613D-08 0.2242721315606D-08 + 0.1592086852573D-08 0.1125504128687D-08 0.7923124183526D-09 0.5553861734448D-09 + 0.3873369815712D-09 0.2689789822741D-09 0.1859777913753D-09 0.1280251240549D-09 + 0.8774028842241D-10 0.5986205675576D-10 0.4054596560461D-10 0.2734324399849D-10 + 0.1835852166089D-10 0.1227126849287D-10 0.8165523114487D-11 0.5408788571977D-11 + 0.3566284612311D-11 0.2340509944823D-11 0.1528839561207D-11 0.9939136206719D-12 + 0.6430563168646D-12 0.4140390417575D-12 0.2652795322592D-12 0.1691276289235D-12 + 0.1072881904825D-12 + LSMS: Fe z= 26. xvalws= 2.83661 + 26. 5.42000 10. 0.7012665733723D+00 + -0.1113096740000D+02 0.9815760904632D+00 1001 +-0.5199725933549D+02-0.5199722593516D+02-0.5199719212775D+02-0.5199715790830D+02 +-0.5199712327179D+02-0.5199708821315D+02-0.5199705272721D+02-0.5199701680879D+02 +-0.5199698045259D+02-0.5199694365329D+02-0.5199690640548D+02-0.5199686870371D+02 +-0.5199683054243D+02-0.5199679191604D+02-0.5199675281887D+02-0.5199671324519D+02 +-0.5199667318919D+02-0.5199663264498D+02-0.5199659160662D+02-0.5199655006809D+02 +-0.5199650802327D+02-0.5199646546602D+02-0.5199642239006D+02-0.5199637878910D+02 +-0.5199633465671D+02-0.5199628998644D+02-0.5199624477171D+02-0.5199619900589D+02 +-0.5199615268227D+02-0.5199610579404D+02-0.5199605833433D+02-0.5199601029616D+02 +-0.5199596167248D+02-0.5199591245616D+02-0.5199586263996D+02-0.5199581221659D+02 +-0.5199576117863D+02-0.5199570951860D+02-0.5199565722891D+02-0.5199560430188D+02 +-0.5199555072974D+02-0.5199549650464D+02-0.5199544161860D+02-0.5199538606358D+02 +-0.5199532983141D+02-0.5199527291385D+02-0.5199521530253D+02-0.5199515698899D+02 +-0.5199509796469D+02-0.5199503822094D+02-0.5199497774898D+02-0.5199491653994D+02 +-0.5199485458482D+02-0.5199479187453D+02-0.5199472839987D+02-0.5199466415150D+02 +-0.5199459912001D+02-0.5199453329584D+02-0.5199446666933D+02-0.5199439923070D+02 +-0.5199433097004D+02-0.5199426187733D+02-0.5199419194243D+02-0.5199412115507D+02 +-0.5199404950486D+02-0.5199397698127D+02-0.5199390357366D+02-0.5199382927124D+02 +-0.5199375406311D+02-0.5199367793823D+02-0.5199360088541D+02-0.5199352289335D+02 +-0.5199344395058D+02-0.5199336404552D+02-0.5199328316644D+02-0.5199320130145D+02 +-0.5199311843854D+02-0.5199303456553D+02-0.5199294967012D+02-0.5199286373983D+02 +-0.5199277676204D+02-0.5199268872399D+02-0.5199259961274D+02-0.5199250941520D+02 +-0.5199241811814D+02-0.5199232570813D+02-0.5199223217162D+02-0.5199213749485D+02 +-0.5199204166394D+02-0.5199194466480D+02-0.5199184648318D+02-0.5199174710467D+02 +-0.5199164651467D+02-0.5199154469841D+02-0.5199144164093D+02-0.5199133732709D+02 +-0.5199123174158D+02-0.5199112486888D+02-0.5199101669329D+02-0.5199090719894D+02 +-0.5199079636972D+02-0.5199068418937D+02-0.5199057064140D+02-0.5199045570913D+02 +-0.5199033937569D+02-0.5199022162397D+02-0.5199010243669D+02-0.5198998179634D+02 +-0.5198985968518D+02-0.5198973608528D+02-0.5198961097849D+02-0.5198948434642D+02 +-0.5198935617047D+02-0.5198922643181D+02-0.5198909511137D+02-0.5198896218987D+02 +-0.5198882764776D+02-0.5198869146529D+02-0.5198855362244D+02-0.5198841409897D+02 +-0.5198827287436D+02-0.5198812992787D+02-0.5198798523849D+02-0.5198783878497D+02 +-0.5198769054577D+02-0.5198754049912D+02-0.5198738862297D+02-0.5198723489499D+02 +-0.5198707929260D+02-0.5198692179292D+02-0.5198676237282D+02-0.5198660100886D+02 +-0.5198643767732D+02-0.5198627235421D+02-0.5198610501521D+02-0.5198593563574D+02 +-0.5198576419090D+02-0.5198559065549D+02-0.5198541500400D+02-0.5198523721061D+02 +-0.5198505724919D+02-0.5198487509328D+02-0.5198469071611D+02-0.5198450409057D+02 +-0.5198431518922D+02-0.5198412398430D+02-0.5198393044769D+02-0.5198373455093D+02 +-0.5198353626524D+02-0.5198333556145D+02-0.5198313241005D+02-0.5198292678118D+02 +-0.5198271864460D+02-0.5198250796970D+02-0.5198229472550D+02-0.5198207888065D+02 +-0.5198186040341D+02-0.5198163926164D+02-0.5198141542283D+02-0.5198118885405D+02 +-0.5198095952199D+02-0.5198072739291D+02-0.5198049243268D+02-0.5198025460673D+02 +-0.5198001388008D+02-0.5197977021732D+02-0.5197952358262D+02-0.5197927393969D+02 +-0.5197902125180D+02-0.5197876548179D+02-0.5197850659203D+02-0.5197824454442D+02 +-0.5197797930042D+02-0.5197771082100D+02-0.5197743906666D+02-0.5197716399741D+02 +-0.5197688557277D+02-0.5197660375178D+02-0.5197631849297D+02-0.5197602975435D+02 +-0.5197573749343D+02-0.5197544166721D+02-0.5197514223214D+02-0.5197483914416D+02 +-0.5197453235865D+02-0.5197422183045D+02-0.5197390751386D+02-0.5197358936261D+02 +-0.5197326732986D+02-0.5197294136821D+02-0.5197261142967D+02-0.5197227746566D+02 +-0.5197193942701D+02-0.5197159726396D+02-0.5197125092611D+02-0.5197090036247D+02 +-0.5197054552142D+02-0.5197018635070D+02-0.5196982279742D+02-0.5196945480804D+02 +-0.5196908232835D+02-0.5196870530350D+02-0.5196832367795D+02-0.5196793739548D+02 +-0.5196754639920D+02-0.5196715063151D+02-0.5196675003409D+02-0.5196634454794D+02 +-0.5196593411330D+02-0.5196551866970D+02-0.5196509815593D+02-0.5196467251001D+02 +-0.5196424166924D+02-0.5196380557010D+02-0.5196336414832D+02-0.5196291733886D+02 +-0.5196246507584D+02-0.5196200729261D+02-0.5196154392167D+02-0.5196107489473D+02 +-0.5196060014264D+02-0.5196011959539D+02-0.5195963318213D+02-0.5195914083115D+02 +-0.5195864246984D+02-0.5195813802470D+02-0.5195762742135D+02-0.5195711058447D+02 +-0.5195658743784D+02-0.5195605790428D+02-0.5195552190570D+02-0.5195497936300D+02 +-0.5195443019616D+02-0.5195387432415D+02-0.5195331166495D+02-0.5195274213554D+02 +-0.5195216565186D+02-0.5195158212886D+02-0.5195099148039D+02-0.5195039361929D+02 +-0.5194978845731D+02-0.5194917590512D+02-0.5194855587228D+02-0.5194792826727D+02 +-0.5194729299740D+02-0.5194664996888D+02-0.5194599908676D+02-0.5194534025492D+02 +-0.5194467337605D+02-0.5194399835165D+02-0.5194331508201D+02-0.5194262346621D+02 +-0.5194192340206D+02-0.5194121478614D+02-0.5194049751375D+02-0.5193977147889D+02 +-0.5193903657427D+02-0.5193829269128D+02-0.5193753971998D+02-0.5193677754906D+02 +-0.5193600606586D+02-0.5193522515632D+02-0.5193443470499D+02-0.5193363459497D+02 +-0.5193282470797D+02-0.5193200492421D+02-0.5193117512244D+02-0.5193033517992D+02 +-0.5192948497241D+02-0.5192862437413D+02-0.5192775325774D+02-0.5192687149436D+02 +-0.5192597895350D+02-0.5192507550308D+02-0.5192416100938D+02-0.5192323533703D+02 +-0.5192229834901D+02-0.5192134990660D+02-0.5192038986937D+02-0.5191941809517D+02 +-0.5191843444008D+02-0.5191743875842D+02-0.5191643090272D+02-0.5191541072367D+02 +-0.5191437807015D+02-0.5191333278914D+02-0.5191227472577D+02-0.5191120372323D+02 +-0.5191011962279D+02-0.5190902226377D+02-0.5190791148350D+02-0.5190678711729D+02 +-0.5190564899844D+02-0.5190449695817D+02-0.5190333082564D+02-0.5190215042790D+02 +-0.5190095558984D+02-0.5189974613421D+02-0.5189852188158D+02-0.5189728265027D+02 +-0.5189602825639D+02-0.5189475851376D+02-0.5189347323391D+02-0.5189217222604D+02 +-0.5189085529698D+02-0.5188952225121D+02-0.5188817289074D+02-0.5188680701519D+02 +-0.5188542442165D+02-0.5188402490474D+02-0.5188260825653D+02-0.5188117426651D+02 +-0.5187972272159D+02-0.5187825340601D+02-0.5187676610137D+02-0.5187526058656D+02 +-0.5187373663774D+02-0.5187219402830D+02-0.5187063252881D+02-0.5186905190702D+02 +-0.5186745192779D+02-0.5186583235310D+02-0.5186419294195D+02-0.5186253345036D+02 +-0.5186085363137D+02-0.5185915323490D+02-0.5185743200783D+02-0.5185568969388D+02 +-0.5185392603358D+02-0.5185214076427D+02-0.5185033362005D+02-0.5184850433168D+02 +-0.5184665262663D+02-0.5184477822897D+02-0.5184288085935D+02-0.5184096023497D+02 +-0.5183901606951D+02-0.5183704807313D+02-0.5183505595235D+02-0.5183303941011D+02 +-0.5183099814562D+02-0.5182893185437D+02-0.5182684022811D+02-0.5182472295471D+02 +-0.5182257971822D+02-0.5182041019875D+02-0.5181821407243D+02-0.5181599101140D+02 +-0.5181374068373D+02-0.5181146275334D+02-0.5180915688002D+02-0.5180682271932D+02 +-0.5180445992252D+02-0.5180206813657D+02-0.5179964700406D+02-0.5179719616311D+02 +-0.5179471524738D+02-0.5179220388597D+02-0.5178966170339D+02-0.5178708831946D+02 +-0.5178448334932D+02-0.5178184640332D+02-0.5177917708696D+02-0.5177647500087D+02 +-0.5177373974070D+02-0.5177097089709D+02-0.5176816805562D+02-0.5176533079670D+02 +-0.5176245869553D+02-0.5175955132207D+02-0.5175660824093D+02-0.5175362901129D+02 +-0.5175061318690D+02-0.5174756031596D+02-0.5174446994105D+02-0.5174134159909D+02 +-0.5173817482125D+02-0.5173496913290D+02-0.5173172405350D+02-0.5172843909656D+02 +-0.5172511376955D+02-0.5172174757386D+02-0.5171834000466D+02-0.5171489055089D+02 +-0.5171139869513D+02-0.5170786391358D+02-0.5170428567592D+02-0.5170066344527D+02 +-0.5169699667810D+02-0.5169328482415D+02-0.5168952732633D+02-0.5168572362068D+02 +-0.5168187313622D+02-0.5167797529494D+02-0.5167402951167D+02-0.5167003519397D+02 +-0.5166599174211D+02-0.5166189854893D+02-0.5165775499976D+02-0.5165356047233D+02 +-0.5164931433670D+02-0.5164501595513D+02-0.5164066468202D+02-0.5163625986378D+02 +-0.5163180083878D+02-0.5162728693721D+02-0.5162271748101D+02-0.5161809178376D+02 +-0.5161340915058D+02-0.5160866887803D+02-0.5160387025402D+02-0.5159901255768D+02 +-0.5159409505930D+02-0.5158911702017D+02-0.5158407769252D+02-0.5157897631940D+02 +-0.5157381213454D+02-0.5156858436230D+02-0.5156329221753D+02-0.5155793490542D+02 +-0.5155251162148D+02-0.5154702155133D+02-0.5154146387065D+02-0.5153583774505D+02 +-0.5153014232992D+02-0.5152437677037D+02-0.5151854020107D+02-0.5151263174615D+02 +-0.5150665051906D+02-0.5150059562249D+02-0.5149446614818D+02-0.5148826117687D+02 +-0.5148197977813D+02-0.5147562101026D+02-0.5146918392013D+02-0.5146266754310D+02 +-0.5145607090284D+02-0.5144939301126D+02-0.5144263286832D+02-0.5143578946194D+02 +-0.5142886176786D+02-0.5142184874950D+02-0.5141474935783D+02-0.5140756253123D+02 +-0.5140028719537D+02-0.5139292226307D+02-0.5138546663415D+02-0.5137791919531D+02 +-0.5137027881998D+02-0.5136254436817D+02-0.5135471468638D+02-0.5134678860740D+02 +-0.5133876495020D+02-0.5133064251980D+02-0.5132242010708D+02-0.5131409648871D+02 +-0.5130567042693D+02-0.5129714066947D+02-0.5128850594937D+02-0.5127976498485D+02 +-0.5127091647915D+02-0.5126195912042D+02-0.5125289158153D+02-0.5124371251996D+02 +-0.5123442057763D+02-0.5122501438078D+02-0.5121549253981D+02-0.5120585364912D+02 +-0.5119609628699D+02-0.5118621901542D+02-0.5117622038001D+02-0.5116609890976D+02 +-0.5115585311698D+02-0.5114548149713D+02-0.5113498252865D+02-0.5112435467287D+02 +-0.5111359637380D+02-0.5110270605805D+02-0.5109168213465D+02-0.5108052299493D+02 +-0.5106922701236D+02-0.5105779254242D+02-0.5104621792249D+02-0.5103450147166D+02 +-0.5102264149064D+02-0.5101063626162D+02-0.5099848404809D+02-0.5098618309478D+02 +-0.5097373162749D+02-0.5096112785297D+02-0.5094836995877D+02-0.5093545611319D+02 +-0.5092238446506D+02-0.5090915314370D+02-0.5089576025875D+02-0.5088220390011D+02 +-0.5086848213775D+02-0.5085459302170D+02-0.5084053458184D+02-0.5082630482789D+02 +-0.5081190174924D+02-0.5079732331488D+02-0.5078256747331D+02-0.5076763215246D+02 +-0.5075251525957D+02-0.5073721468113D+02-0.5072172828280D+02-0.5070605390935D+02 +-0.5069018938453D+02-0.5067413251109D+02-0.5065788107066D+02-0.5064143282369D+02 +-0.5062478550946D+02-0.5060793684596D+02-0.5059088452988D+02-0.5057362623659D+02 +-0.5055615962008D+02-0.5053848231296D+02-0.5052059192643D+02-0.5050248605027D+02 +-0.5048416225282D+02-0.5046561808102D+02-0.5044685106037D+02-0.5042785869496D+02 +-0.5040863846753D+02-0.5038918783943D+02-0.5036950425070D+02-0.5034958512010D+02 +-0.5032942784518D+02-0.5030902980231D+02-0.5028838834674D+02-0.5026750081274D+02 +-0.5024636451358D+02-0.5022497674172D+02-0.5020333476886D+02-0.5018143584604D+02 +-0.5015927720379D+02-0.5013685605225D+02-0.5011416958127D+02-0.5009121496061D+02 +-0.5006798934008D+02-0.5004448984965D+02-0.5002071359972D+02-0.4999665768121D+02 +-0.4997231916584D+02-0.4994769510626D+02-0.4992278253631D+02-0.4989757847123D+02 +-0.4987207990790D+02-0.4984628382507D+02-0.4982018718363D+02-0.4979378692689D+02 +-0.4976707998082D+02-0.4974006325436D+02-0.4971273363972D+02-0.4968508801265D+02 +-0.4965712323281D+02-0.4962883614407D+02-0.4960022357485D+02-0.4957128233846D+02 +-0.4954200923347D+02-0.4951240104405D+02-0.4948245454040D+02-0.4945216647907D+02 +-0.4942153360340D+02-0.4939055264392D+02-0.4935922031873D+02-0.4932753333396D+02 +-0.4929548838415D+02-0.4926308215275D+02-0.4923031131251D+02-0.4919717252596D+02 +-0.4916366244583D+02-0.4912977771557D+02-0.4909551496976D+02-0.4906087083463D+02 +-0.4902584192850D+02-0.4899042486230D+02-0.4895461624001D+02-0.4891841265920D+02 +-0.4888181071147D+02-0.4884480698298D+02-0.4880739805492D+02-0.4876958050402D+02 +-0.4873135090303D+02-0.4869270582121D+02-0.4865364182483D+02-0.4861415547763D+02 +-0.4857424334133D+02-0.4853390197609D+02-0.4849312794097D+02-0.4845191779443D+02 +-0.4841026809474D+02-0.4836817540045D+02-0.4832563627082D+02-0.4828264726624D+02 +-0.4823920494866D+02-0.4819530588196D+02-0.4815094663237D+02-0.4810612376882D+02 +-0.4806083386327D+02-0.4801507349109D+02-0.4796883923136D+02-0.4792212766715D+02 +-0.4787493538581D+02-0.4782725897922D+02-0.4777909504402D+02-0.4773044018183D+02 +-0.4768129099939D+02-0.4763164410878D+02-0.4758149612746D+02-0.4753084367846D+02 +-0.4747968339038D+02-0.4742801189747D+02-0.4737582583962D+02-0.4732312186235D+02 +-0.4726989661673D+02-0.4721614675934D+02-0.4716186895211D+02-0.4710705986219D+02 +-0.4705171616177D+02-0.4699583452782D+02-0.4693941164190D+02-0.4688244418984D+02 +-0.4682492886144D+02-0.4676686235010D+02-0.4670824135246D+02-0.4664906256801D+02 +-0.4658932269861D+02-0.4652901844806D+02-0.4646814652160D+02-0.4640670362541D+02 +-0.4634468646605D+02-0.4628209174994D+02-0.4621891618276D+02-0.4615515646890D+02 +-0.4609080931084D+02-0.4602587140857D+02-0.4596033945901D+02-0.4589421015537D+02 +-0.4582748018658D+02-0.4576014623674D+02-0.4569220498453D+02-0.4562365310270D+02 +-0.4555448725754D+02-0.4548470410844D+02-0.4541430030746D+02-0.4534327249894D+02 +-0.4527161731924D+02-0.4519933139644D+02-0.4512641135020D+02-0.4505285379171D+02 +-0.4497865532365D+02-0.4490381254035D+02-0.4482832202800D+02-0.4475218036505D+02 +-0.4467538412269D+02-0.4459792986546D+02-0.4451981415213D+02-0.4444103353661D+02 +-0.4436158456914D+02-0.4428146379762D+02-0.4420066776919D+02-0.4411919303196D+02 +-0.4403703613705D+02-0.4395419364078D+02-0.4387066210714D+02-0.4378643811057D+02 +-0.4370151823889D+02-0.4361589909662D+02-0.4352957730847D+02-0.4344254952321D+02 +-0.4335481241773D+02-0.4326636270148D+02-0.4317719712112D+02-0.4308731246548D+02 +-0.4299670557084D+02-0.4290537332640D+02-0.4281331268008D+02-0.4272052064450D+02 +-0.4262699430328D+02-0.4253273081744D+02-0.4243772743204D+02-0.4234198148295D+02 +-0.4224549040375D+02-0.4214825173266D+02-0.4205026311955D+02-0.4195152233287D+02 +-0.4185202726656D+02-0.4175177594673D+02-0.4165076653825D+02-0.4154899735096D+02 +-0.4144646684556D+02-0.4134317363905D+02-0.4123911650970D+02-0.4113429440134D+02 +-0.4102870642699D+02-0.4092235187170D+02-0.4081523019452D+02-0.4070734102948D+02 +-0.4059868418556D+02-0.4048925964551D+02-0.4037906756345D+02-0.4026810826127D+02 +-0.4015638222367D+02-0.4004389009189D+02-0.3993063265602D+02-0.3981661084605D+02 +-0.3970182572145D+02-0.3958627845957D+02-0.3946997034271D+02-0.3935290274415D+02 +-0.3923507711303D+02-0.3911649495854D+02-0.3899715783325D+02-0.3887706731602D+02 +-0.3875622499468D+02-0.3863463244854D+02-0.3851229123135D+02-0.3838920285454D+02 +-0.3826536877145D+02-0.3814079036252D+02-0.3801546892193D+02-0.3788940564588D+02 +-0.3776260162282D+02-0.3763505782575D+02-0.3750677510712D+02-0.3737775419609D+02 +-0.3724799569874D+02-0.3711750010098D+02-0.3698626777452D+02-0.3685429898571D+02 +-0.3672159390742D+02-0.3658815263366D+02-0.3645397519712D+02-0.3631906158922D+02 +-0.3618341178263D+02-0.3604702575592D+02-0.3590990352022D+02-0.3577204514743D+02 +-0.3563345079978D+02-0.3549412076043D+02-0.3535405546466D+02-0.3521325553143D+02 +-0.3507172179486D+02-0.3492945533538D+02-0.3478645751021D+02-0.3464272998282D+02 +-0.3449827475103D+02-0.3435309417366D+02-0.3420719099522D+02-0.3406056836864D+02 +-0.3391322987564D+02-0.3376517954472D+02-0.3361642186647D+02-0.3346696180620D+02 +-0.3331680481362D+02-0.3316595682967D+02-0.3301442429029D+02-0.3286221412713D+02 +-0.3270933376519D+02-0.3255579111743D+02-0.3240159457626D+02-0.3224675300199D+02 +-0.3209127570839D+02-0.3193517244520D+02-0.3177845337789D+02-0.3162112906469D+02 +-0.3146321043084D+02-0.3130470874049D+02-0.3114563556602D+02-0.3098600275525D+02 +-0.3082582239644D+02-0.3066510678132D+02-0.3050386836645D+02-0.3034211973283D+02 +-0.3017987354422D+02-0.3001714250415D+02-0.2985393931203D+02-0.2969027661833D+02 +-0.2952616697937D+02-0.2936162281167D+02-0.2919665634630D+02-0.2903127958335D+02 +-0.2886550424693D+02-0.2869934174084D+02-0.2853280310526D+02-0.2836589897473D+02 +-0.2819863953773D+02-0.2803103449817D+02-0.2786309303904D+02-0.2769482378861D+02 +-0.2752623478950D+02-0.2735733347081D+02-0.2718812662390D+02-0.2701862038181D+02 +-0.2684882020300D+02-0.2667873085943D+02-0.2650835642953D+02-0.2633770029627D+02 +-0.2616676515065D+02-0.2599555300100D+02-0.2582406518825D+02-0.2565230240760D+02 +-0.2548026473671D+02-0.2530795167081D+02-0.2513536216475D+02-0.2496249468236D+02 +-0.2478934725317D+02-0.2461591753656D+02-0.2444220289343D+02-0.2426820046543D+02 +-0.2409390726149D+02-0.2391932025166D+02-0.2374443646785D+02-0.2356925311108D+02 +-0.2339376766490D+02-0.2321797801399D+02-0.2304188256745D+02-0.2286548038545D+02 +-0.2268877130824D+02-0.2251175608595D+02-0.2233443650742D+02-0.2215681552628D+02 +-0.2197889738183D+02-0.2180068771233D+02-0.2162219365787D+02-0.2144342394979D+02 +-0.2126438898333D+02-0.2108510087020D+02-0.2090557346731D+02-0.2072582237842D+02 +-0.2054586492507D+02-0.2036572008383D+02-0.2018540838721D+02-0.2000495178632D+02 +-0.1982437347418D+02-0.1964369766993D+02-0.1946294936534D+02-0.1928215403655D+02 +-0.1910133732596D+02-0.1892052470048D+02-0.1873974109432D+02-0.1855901054599D+02 +-0.1837835584043D+02-0.1819779816791D+02-0.1801735681180D+02-0.1783704887712D+02 +-0.1765688907054D+02-0.1747688954143D+02-0.1729705979088D+02-0.1711740665366D+02 +-0.1693793435464D+02-0.1675864463858D+02-0.1657953696912D+02-0.1640060879023D+02 +-0.1622185584101D+02-0.1604327251345D+02-0.1586485224112D+02-0.1568658790698D+02 +-0.1550847225815D+02-0.1533049831652D+02-0.1515265977498D+02-0.1497495137064D+02 +-0.1479736922777D+02-0.1461991116509D+02-0.1444257696354D+02-0.1426536859204D+02 +-0.1408829039053D+02-0.1391134921029D+02-0.1373455451271D+02-0.1355791842852D+02 +-0.1338145578000D+02-0.1320518406883D+02-0.1302912343294D+02-0.1285329657548D+02 +-0.1267772866915D+02-0.1250244723902D+02-0.1232748202704D+02-0.1215286484103D+02 +-0.1197862939076D+02-0.1180481111390D+02-0.1163144699390D+02-0.1145857537202D+02 +-0.1128623575544D+02-0.1111446862313D+02-0.1094331523120D+02-0.1077281741893D+02 +-0.1060301741695D+02-0.1043395765867D+02-0.1026568059594D+02-0.1009822851992D+02 +-0.9931643388016D+01-0.9765966657494D+01-0.9601239126630D+01-0.9437500783804D+01 +-0.9274790665145D+01-0.9113146721143D+01-0.8952605692637D+01-0.8793202996488D+01 +-0.8634972621223D+01-0.8477947032870D+01-0.8322157091156D+01-0.8167631976190D+01 +-0.8014399125712D+01-0.7862484182928D+01-0.7711910954941D+01-0.7562701381700D+01 +-0.7414875515397D+01-0.7268451510164D+01-0.7123445621908D+01-0.6979872218083D+01 +-0.6837743797155D+01-0.6697071017494D+01-0.6557862735389D+01-0.6420126051868D+01 +-0.6283866367939D+01-0.6149087447903D+01-0.6015791490301D+01-0.5883979206075D+01 +-0.5753649903482D+01-0.5624801579295D+01-0.5497431015767D+01-0.5371533882856D+01 +-0.5247104845160D+01-0.5124137672997D+01-0.5002625357036D+01-0.4882560225875D+01 +-0.4763934065922D+01-0.4646738242914D+01-0.4530963824379D+01-0.4416601702324D+01 +-0.4303642715373D+01-0.4192077769577D+01-0.4081897957051D+01-0.3973094671574D+01 +-0.3865659720235D+01-0.3759585430172D+01-0.3654864749422D+01-0.3551491340847D+01 +-0.3449459668107D+01-0.3348765072586D+01-0.3249403840234D+01-0.3151373257246D+01 +-0.3054671653584D+01-0.2959298433394D+01-0.2865254091464D+01-0.2772540215041D+01 +-0.2681159470481D+01-0.2591115574456D+01-0.2502413249735D+01-0.2415058165856D+01 +-0.2329056865442D+01-0.2244416677282D+01-0.2161145617791D+01-0.2079252282903D+01 +-0.1998745732939D+01-0.1919635373402D+01-0.1841930835061D+01-0.1765641856999D+01 +-0.1690778176477D+01-0.1617349429599D+01-0.1545365066668D+01-0.1474834285938D+01 +-0.1405765989106D+01-0.1338168761377D+01-0.1272050878314D+01-0.1207420340970D+01 +-0.1144284939980D+01-0.1082652348506D+01-0.1022530243115D+01-0.9639264509202D+00 +-0.9068491206856D+00-0.8513069150257D+00-0.7973092204594D+00-0.7448663718096D+00 +-0.6939898873382D+00-0.6446927110354D+00-0.5969894586386D+00-0.5508966642118D+00 +-0.5064330244547D+00-0.4636196383005D+00-0.4224802397867D+00-0.3830414226144D+00 +-0.3453328552340D+00-0.3093874856944D+00-0.2752417358496D+00-0.2429356848349D+00 +-0.2125132419857D+00-0.1840223095832D+00-0.1575149359670D+00-0.1330474596628D+00 +-0.1106806452250D+00-0.9047981150844D-01-0.7251495305290D-01-0.5686085519230D-01 +-0.4359720340457D-01-0.3280868728101D-01-0.2458509933651D-01-0.1902142869750D-01 +-0.1621794893108D-01 + 0.0000000000000D+00 + 1001 0.2836614688791D+01 + 0.1598626618887D-04 0.1637811173211D-04 0.1677956005434D-04 0.1719084641620D-04 + 0.1761221183946D-04 0.1804390324797D-04 0.1848617361209D-04 0.1893928209666D-04 + 0.1940349421259D-04 0.1987908197209D-04 0.2036632404783D-04 0.2086550593581D-04 + 0.2137692012238D-04 0.2190086625526D-04 0.2243765131869D-04 0.2298758981301D-04 + 0.2355100393846D-04 0.2412822378358D-04 0.2471958751818D-04 0.2532544159105D-04 + 0.2594614093241D-04 0.2658204916146D-04 0.2723353879883D-04 0.2790099148438D-04 + 0.2858479820020D-04 0.2928535949908D-04 0.3000308573866D-04 0.3073839732114D-04 + 0.3149172493897D-04 0.3226350982648D-04 0.3305420401768D-04 0.3386427061034D-04 + 0.3469418403652D-04 0.3554443033974D-04 0.3641550745884D-04 0.3730792551883D-04 + 0.3822220712890D-04 0.3915888768750D-04 0.4011851569514D-04 0.4110165307457D-04 + 0.4210887549898D-04 0.4314077272806D-04 0.4419794895237D-04 0.4528102314603D-04 + 0.4639062942807D-04 0.4752741743259D-04 0.4869205268792D-04 0.4988521700505D-04 + 0.5110760887559D-04 0.5235994387932D-04 0.5364295510181D-04 0.5495739356212D-04 + 0.5630402865099D-04 0.5768364857973D-04 0.5909706083999D-04 0.6054509267482D-04 + 0.6202859156116D-04 0.6354842570410D-04 0.6510548454327D-04 0.6670067927141D-04 + 0.6833494336575D-04 0.7000923313227D-04 0.7172452826318D-04 0.7348183240810D-04 + 0.7528217375905D-04 0.7712660564973D-04 0.7901620716947D-04 0.8095208379201D-04 + 0.8293536801971D-04 0.8496722004344D-04 0.8704882841840D-04 0.8918141075667D-04 + 0.9136621443633D-04 0.9360451732812D-04 0.9589762853955D-04 0.9824688917732D-04 + 0.1006536731282D-03 0.1031193878589D-03 0.1056454752356D-03 0.1082334123631D-03 + 0.1108847124446D-03 0.1136009256626D-03 0.1163836400807D-03 0.1192344825678D-03 + 0.1221551197447D-03 0.1251472589535D-03 0.1282126492510D-03 0.1313530824258D-03 + 0.1345703940401D-03 0.1378664644977D-03 0.1412432201368D-03 0.1447026343501D-03 + 0.1482467287320D-03 0.1518775742535D-03 0.1555972924656D-03 0.1594080567327D-03 + 0.1633120934946D-03 0.1673116835606D-03 0.1714091634338D-03 0.1756069266689D-03 + 0.1799074252612D-03 0.1843131710715D-03 0.1888267372833D-03 0.1934507598976D-03 + 0.1981879392619D-03 0.2030410416382D-03 0.2080129008076D-03 0.2131064197146D-03 + 0.2183245721511D-03 0.2236704044814D-03 0.2291470374085D-03 0.2347576677842D-03 + 0.2405055704620D-03 0.2463941001957D-03 0.2524266935838D-03 0.2586068710611D-03 + 0.2649382389381D-03 0.2714244914907D-03 0.2780694130998D-03 0.2848768804427D-03 + 0.2918508647384D-03 0.2989954340462D-03 0.3063147556210D-03 0.3138130983244D-03 + 0.3214948350957D-03 0.3293644454811D-03 0.3374265182253D-03 0.3456857539255D-03 + 0.3541469677490D-03 0.3628150922174D-03 0.3716951800577D-03 0.3807924071222D-03 + 0.3901120753791D-03 0.3996596159759D-03 0.4094405923759D-03 0.4194607035710D-03 + 0.4297257873723D-03 0.4402418237799D-03 0.4510149384338D-03 0.4620514061488D-03 + 0.4733576545342D-03 0.4849402677008D-03 0.4968059900579D-03 0.5089617302015D-03 + 0.5214145648960D-03 0.5341717431527D-03 0.5472406904058D-03 0.5606290127897D-03 + 0.5743445015189D-03 0.5883951373739D-03 0.6027890952944D-03 0.6175347490845D-03 + 0.6326406762291D-03 0.6481156628287D-03 0.6639687086508D-03 0.6802090323041D-03 + 0.6968460765368D-03 0.7138895136623D-03 0.7313492511154D-03 0.7492354371422D-03 + 0.7675584666262D-03 0.7863289870552D-03 0.8055579046307D-03 0.8252563905249D-03 + 0.8454358872866D-03 0.8661081154025D-03 0.8872850800146D-03 0.9089790777993D-03 + 0.9312027040114D-03 0.9539688596968D-03 0.9772907590787D-03 0.1001181937120D-02 + 0.1025656257266D-02 0.1050727919376D-02 0.1076411467842D-02 0.1102721799898D-02 + 0.1129674174140D-02 0.1157284219234D-02 0.1185567942846D-02 0.1214541740776D-02 + 0.1244222406316D-02 0.1274627139829D-02 0.1305773558557D-02 0.1337679706662D-02 + 0.1370364065511D-02 0.1403845564202D-02 0.1438143590338D-02 0.1473278001071D-02 + 0.1509269134390D-02 0.1546137820696D-02 0.1583905394643D-02 0.1622593707259D-02 + 0.1662225138363D-02 0.1702822609272D-02 0.1744409595811D-02 0.1787010141633D-02 + 0.1830648871856D-02 0.1875351007023D-02 0.1921142377389D-02 0.1968049437560D-02 + 0.2016099281460D-02 0.2065319657674D-02 0.2115738985136D-02 0.2167386369198D-02 + 0.2220291618084D-02 0.2274485259718D-02 0.2329998558968D-02 0.2386863535283D-02 + 0.2445112980758D-02 0.2504780478616D-02 0.2565900422137D-02 0.2628508034021D-02 + 0.2692639386222D-02 0.2758331420235D-02 0.2825621967874D-02 0.2894549772530D-02 + 0.2965154510938D-02 0.3037476815443D-02 0.3111558296805D-02 0.3187441567532D-02 + 0.3265170265758D-02 0.3344789079688D-02 0.3426343772614D-02 0.3509881208518D-02 + 0.3595449378272D-02 0.3683097426458D-02 0.3772875678811D-02 0.3864835670302D-02 + 0.3959030173886D-02 0.4055513229912D-02 0.4154340176228D-02 0.4255567678980D-02 + 0.4359253764139D-02 0.4465457849755D-02 0.4574240778966D-02 0.4685664853774D-02 + 0.4799793869605D-02 0.4916693150679D-02 0.5036429586192D-02 0.5159071667343D-02 + 0.5284689525222D-02 0.5413354969571D-02 0.5545141528447D-02 0.5680124488795D-02 + 0.5818380937976D-02 0.5959989806232D-02 0.6105031910150D-02 0.6253589997120D-02 + 0.6405748790819D-02 0.6561595037743D-02 0.6721217554812D-02 0.6884707278065D-02 + 0.7052157312476D-02 0.7223662982915D-02 0.7399321886279D-02 0.7579233944809D-02 + 0.7763501460637D-02 0.7952229171578D-02 0.8145524308193D-02 0.8343496652159D-02 + 0.8546258595967D-02 0.8753925203987D-02 0.8966614274910D-02 0.9184446405625D-02 + 0.9407545056532D-02 0.9636036618353D-02 0.9870050480443D-02 0.1010971910066D-01 + 0.1035517807679D-01 0.1060656621964D-01 0.1086402562773D-01 0.1112770176365D-01 + 0.1139774353224D-01 0.1167430336039D-01 0.1195753727876D-01 0.1224760500524D-01 + 0.1254467003032D-01 0.1284889970439D-01 0.1316046532693D-01 0.1347954223778D-01 + 0.1380630991035D-01 0.1414095204697D-01 0.1448365667634D-01 0.1483461625316D-01 + 0.1519402775992D-01 0.1556209281101D-01 0.1593901775909D-01 0.1632501380382D-01 + 0.1672029710298D-01 0.1712508888608D-01 0.1753961557037D-01 0.1796410887952D-01 + 0.1839880596480D-01 0.1884394952897D-01 0.1929978795285D-01 0.1976657542466D-01 + 0.2024457207217D-01 0.2073404409773D-01 0.2123526391621D-01 0.2174851029598D-01 + 0.2227406850286D-01 0.2281223044725D-01 0.2336329483437D-01 0.2392756731780D-01 + 0.2450536065622D-01 0.2509699487359D-01 0.2570279742274D-01 0.2632310335239D-01 + 0.2695825547781D-01 0.2760860455504D-01 0.2827450945885D-01 0.2895633736443D-01 + 0.2965446393293D-01 0.3036927350090D-01 0.3110115927374D-01 0.3185052352316D-01 + 0.3261777778880D-01 0.3340334308405D-01 0.3420765010615D-01 0.3503113945065D-01 + 0.3587426183034D-01 0.3673747829865D-01 0.3762126047769D-01 0.3852609079097D-01 + 0.3945246270088D-01 0.4040088095104D-01 0.4137186181354D-01 0.4236593334129D-01 + 0.4338363562539D-01 0.4442552105773D-01 0.4549215459892D-01 0.4658411405156D-01 + 0.4770199033892D-01 0.4884638778930D-01 0.5001792442598D-01 0.5121723226285D-01 + 0.5244495760600D-01 0.5370176136113D-01 0.5498831934710D-01 0.5630532261547D-01 + 0.5765347777634D-01 0.5903350733053D-01 0.6044615000808D-01 0.6189216111333D-01 + 0.6337231287660D-01 0.6488739481255D-01 0.6643821408534D-01 0.6802559588074D-01 + 0.6965038378520D-01 0.7131344017202D-01 0.7301564659477D-01 0.7475790418794D-01 + 0.7654113407504D-01 0.7836627778418D-01 0.8023429767126D-01 0.8214617735082D-01 + 0.8410292213472D-01 0.8610555947870D-01 0.8815513943692D-01 0.9025273512458D-01 + 0.9239944318872D-01 0.9459638428731D-01 0.9684470357665D-01 0.9914557120730D-01 + 0.1015001828285D+00 0.1039097601012D+00 0.1063755512199D+00 0.1088988314432D+00 + 0.1114809036333D+00 0.1141230988046D+00 0.1168267766808D+00 0.1195933262618D+00 + 0.1224241663995D+00 0.1253207463829D+00 0.1282845465323D+00 0.1313170788032D+00 + 0.1344198873997D+00 0.1375945493969D+00 0.1408426753736D+00 0.1441659100540D+00 + 0.1475659329592D+00 0.1510444590687D+00 0.1546032394913D+00 0.1582440621455D+00 + 0.1619687524504D+00 0.1657791740259D+00 0.1696772294024D+00 0.1736648607413D+00 + 0.1777440505639D+00 0.1819168224913D+00 0.1861852419934D+00 0.1905514171477D+00 + 0.1950174994079D+00 0.1995856843825D+00 0.2042582126216D+00 0.2090373704153D+00 + 0.2139254905996D+00 0.2189249533727D+00 0.2240381871206D+00 0.2292676692511D+00 + 0.2346159270373D+00 0.2400855384702D+00 0.2456791331195D+00 0.2513993930030D+00 + 0.2572490534650D+00 0.2632309040619D+00 0.2693477894567D+00 0.2756026103203D+00 + 0.2819983242414D+00 0.2885379466425D+00 0.2952245517036D+00 0.3020612732919D+00 + 0.3090513058988D+00 0.3161979055816D+00 0.3235043909117D+00 0.3309741439278D+00 + 0.3386106110936D+00 0.3464173042601D+00 0.3543978016321D+00 0.3625557487372D+00 + 0.3708948593986D+00 0.3794189167096D+00 0.3881317740107D+00 0.3970373558664D+00 + 0.4061396590442D+00 0.4154427534922D+00 0.4249507833165D+00 0.4346679677569D+00 + 0.4445986021598D+00 0.4547470589488D+00 0.4651177885906D+00 0.4757153205561D+00 + 0.4865442642761D+00 0.4976093100896D+00 0.5089152301849D+00 0.5204668795314D+00 + 0.5322691968020D+00 0.5443272052836D+00 0.5566460137763D+00 0.5692308174785D+00 + 0.5820868988569D+00 0.5952196285013D+00 0.6086344659612D+00 0.6223369605634D+00 + 0.6363327522093D+00 0.6506275721504D+00 0.6652272437393D+00 0.6801376831563D+00 + 0.6953649001084D+00 0.7109149984994D+00 0.7267941770692D+00 0.7430087300008D+00 + 0.7595650474918D+00 0.7764696162900D+00 0.7937290201893D+00 0.8113499404852D+00 + 0.8293391563858D+00 0.8477035453783D+00 0.8664500835461D+00 0.8855858458360D+00 + 0.9051180062714D+00 0.9250538381101D+00 0.9454007139424D+00 0.9661661057288D+00 + 0.9873575847722D+00 0.1008982821623D+01 0.1031049585912D+01 0.1053565746114D+01 + 0.1076539269227D+01 0.1099978220381D+01 0.1123890762349D+01 0.1148285154986D+01 + 0.1173169754564D+01 0.1198553013022D+01 0.1224443477111D+01 0.1250849787437D+01 + 0.1277780677401D+01 0.1305244972027D+01 0.1333251586673D+01 0.1361809525624D+01 + 0.1390927880564D+01 0.1420615828917D+01 0.1450882632056D+01 0.1481737633376D+01 + 0.1513190256224D+01 0.1545250001685D+01 0.1577926446209D+01 0.1611229239093D+01 + 0.1645168099789D+01 0.1679752815055D+01 0.1714993235926D+01 0.1750899274516D+01 + 0.1787480900625D+01 0.1824748138171D+01 0.1862711061420D+01 0.1901379791016D+01 + 0.1940764489813D+01 0.1980875358483D+01 0.2021722630925D+01 0.2063316569433D+01 + 0.2105667459651D+01 0.2148785605281D+01 0.2192681322560D+01 0.2237364934490D+01 + 0.2282846764806D+01 0.2329137131698D+01 0.2376246341263D+01 0.2424184680690D+01 + 0.2472962411160D+01 0.2522589760477D+01 0.2573076915406D+01 0.2624434013709D+01 + 0.2676671135898D+01 0.2729798296668D+01 0.2783825436028D+01 0.2838762410115D+01 + 0.2894618981683D+01 0.2951404810270D+01 0.3009129442029D+01 0.3067802299226D+01 + 0.3127432669396D+01 0.3188029694153D+01 0.3249602357650D+01 0.3312159474684D+01 + 0.3375709678445D+01 0.3440261407905D+01 0.3505822894840D+01 0.3572402150483D+01 + 0.3640006951816D+01 0.3708644827480D+01 0.3778323043312D+01 0.3849048587528D+01 + 0.3920828155496D+01 0.3993668134162D+01 0.4067574586086D+01 0.4142553233106D+01 + 0.4218609439636D+01 0.4295748195581D+01 0.4373974098893D+01 0.4453291337757D+01 + 0.4533703672416D+01 0.4615214416640D+01 0.4697826418848D+01 0.4781542042878D+01 + 0.4866363148424D+01 0.4952291071149D+01 0.5039326602467D+01 0.5127469969027D+01 + 0.5216720811890D+01 0.5307078165422D+01 0.5398540435921D+01 0.5491105379972D+01 + 0.5584770082572D+01 0.5679530935024D+01 0.5775383612621D+01 0.5872323052147D+01 + 0.5970343429205D+01 0.6069438135409D+01 0.6169599755443D+01 0.6270820044036D+01 + 0.6373089902857D+01 0.6476399357377D+01 0.6580737533720D+01 0.6686092635526D+01 + 0.6792451920879D+01 0.6899801679319D+01 0.7008127208977D+01 0.7117412793879D+01 + 0.7227641681453D+01 0.7338796060285D+01 0.7450857038158D+01 0.7563804620439D+01 + 0.7677617688846D+01 0.7792273980645D+01 0.7907750068343D+01 0.8024021339914D+01 + 0.8141061979625D+01 0.8258844949512D+01 0.8377341971576D+01 0.8496523510747D+01 + 0.8616358758691D+01 0.8736815618520D+01 0.8857860690475D+01 0.8979459258646D+01 + 0.9101575278812D+01 0.9224171367455D+01 0.9347208792049D+01 0.9470647462666D+01 + 0.9594445925016D+01 0.9718561354966D+01 0.9842949554644D+01 0.9967564950192D+01 + 0.1009236059127D+02 0.1021728815237D+02 0.1034229793607D+02 0.1046733887825D+02 + 0.1059235855544D+02 0.1071730319427D+02 0.1084211768328D+02 0.1096674558702D+02 + 0.1109112916256D+02 0.1121520937866D+02 0.1133892593738D+02 0.1146221729856D+02 + 0.1158502070698D+02 0.1170727222247D+02 0.1182890675296D+02 0.1194985809057D+02 + 0.1207005895084D+02 0.1218944101517D+02 0.1230793497657D+02 0.1242547058869D+02 + 0.1254197671840D+02 0.1265738140176D+02 0.1277161190362D+02 0.1288459478081D+02 + 0.1299625594900D+02 0.1310652075331D+02 0.1321531404264D+02 0.1332256024790D+02 + 0.1342818346392D+02 0.1353210753539D+02 0.1363425614657D+02 0.1373455291487D+02 + 0.1383292148845D+02 0.1392928564753D+02 0.1402356940967D+02 0.1411569713886D+02 + 0.1420559365839D+02 0.1429318436752D+02 0.1437839536176D+02 0.1446115355683D+02 + 0.1454138681616D+02 0.1461902408183D+02 0.1469399550879D+02 0.1476623260234D+02 + 0.1483566835874D+02 0.1490223740862D+02 0.1496587616324D+02 0.1502652296335D+02 + 0.1508411823033D+02 0.1513860461964D+02 0.1518992717607D+02 0.1523803349085D+02 + 0.1528287386008D+02 0.1532440144437D+02 0.1536257242936D+02 0.1539734618676D+02 + 0.1542868543569D+02 0.1545655640383D+02 0.1548092898813D+02 0.1550177691467D+02 + 0.1551907789722D+02 0.1553281379422D+02 0.1554297076356D+02 0.1554953941489D+02 + 0.1555251495893D+02 0.1555189735327D+02 0.1554769144419D+02 0.1553990710411D+02 + 0.1552855936394D+02 0.1551366853998D+02 0.1549526035481D+02 0.1547336605149D+02 + 0.1544802250069D+02 0.1541927230006D+02 0.1538716386537D+02 0.1535175151274D+02 + 0.1531309553145D+02 0.1527126224676D+02 0.1522632407210D+02 0.1517835955015D+02 + 0.1512745338216D+02 0.1507369644493D+02 0.1501718579498D+02 0.1495802465935D+02 + 0.1489632241235D+02 0.1483219453796D+02 0.1476576257726D+02 0.1469715406037D+02 + 0.1462650242257D+02 0.1455394690404D+02 0.1447963243292D+02 0.1440370949124D+02 + 0.1432633396341D+02 0.1424766696700D+02 0.1416787466548D+02 0.1408712806276D+02 + 0.1400560277928D+02 0.1392347880961D+02 0.1384094026141D+02 0.1375817507575D+02 + 0.1367537472878D+02 0.1359273391494D+02 0.1351045021168D+02 0.1342872372603D+02 + 0.1334775672335D+02 0.1326775323831D+02 0.1318891866889D+02 0.1311145935354D+02 + 0.1303558213227D+02 0.1296149389218D+02 0.1288940109812D+02 0.1281950930932D+02 + 0.1275202268275D+02 0.1268714346418D+02 0.1262507146790D+02 0.1256600354618D+02 + 0.1251013304962D+02 0.1245764927962D+02 0.1240873693415D+02 0.1236357554835D+02 + 0.1232233893123D+02 0.1228519460012D+02 0.1225230321423D+02 0.1222381800914D+02 + 0.1219988423372D+02 0.1218063859146D+02 0.1216620868761D+02 0.1215671248440D+02 + 0.1215225776587D+02 0.1215294161441D+02 0.1215884990082D+02 0.1217005679005D+02 + 0.1218662426432D+02 0.1220860166592D+02 0.1223602526152D+02 0.1226891783002D+02 + 0.1230728827599D+02 0.1235113127066D+02 0.1240042692236D+02 0.1245514047854D+02 + 0.1251522206101D+02 0.1258060643649D+02 0.1265121282407D+02 0.1272694474149D+02 + 0.1280768989175D+02 0.1289332009177D+02 0.1298369124446D+02 0.1307864335576D+02 + 0.1317800059774D+02 0.1328157141918D+02 0.1338914870447D+02 0.1350050998187D+02 + 0.1361541768187D+02 0.1373361944641D+02 0.1385484848921D+02 0.1397882400777D+02 + 0.1410525164712D+02 0.1423382401521D+02 0.1436422124992D+02 0.1449611163719D+02 + 0.1462915227971D+02 0.1476298981549D+02 0.1489726118526D+02 0.1503159444761D+02 + 0.1516560964047D+02 0.1529891968742D+02 0.1543113134699D+02 0.1556184620304D+02 + 0.1569066169409D+02 0.1581717217909D+02 0.1594097003721D+02 0.1606164679883D+02 + 0.1617879430470D+02 0.1629200589034D+02 0.1640087759210D+02 0.1650500937158D+02 + 0.1660400635475D+02 0.1669748008180D+02 0.1678504976397D+02 0.1686634354318D+02 + 0.1694099975023D+02 0.1700866815722D+02 0.1706901121995D+02 0.1712170530551D+02 + 0.1716644190073D+02 0.1720292879668D+02 0.1723089124472D+02 0.1725007307918D+02 + 0.1726023780221D+02 0.1726116962586D+02 0.1725267446698D+02 0.1723458089009D+02 + 0.1720674099385D+02 0.1716903123658D+02 0.1712135319652D+02 0.1706363426251D+02 + 0.1699582825124D+02 0.1691791594684D+02 0.1682990555941D+02 0.1673183309876D+02 + 0.1662376266021D+02 0.1650578661937D+02 0.1637802573319D+02 0.1624062914474D+02 + 0.1609377428977D+02 0.1593766670295D+02 0.1577253972265D+02 0.1559865409292D+02 + 0.1541629746210D+02 0.1522578377777D+02 0.1502745257803D+02 0.1482166817985D+02 + 0.1460881876533D+02 0.1438931536743D+02 0.1416359075704D+02 0.1393209823375D+02 + 0.1369531032331D+02 0.1345371738499D+02 0.1320782613279D+02 0.1295815807474D+02 + 0.1270524787518D+02 0.1244964164515D+02 0.1219189516675D+02 0.1193257205762D+02 + 0.1167224188203D+02 0.1141147821583D+02 0.1115085667239D+02 0.1089095289759D+02 + 0.1063234054176D+02 0.1037558921706D+02 0.1012126244901D+02 0.9869915631007D+01 + 0.9622093990930D+01 0.9378330579111D+01 0.9139144286880D+01 0.8905037905086D+01 + 0.8676496231907D+01 0.8453984239172D+01 0.8237945306322D+01 0.8028799530926D+01 + 0.7826942124412D+01 0.7632741901354D+01 0.7446539870411D+01 0.7268647934220D+01 + 0.7099347705649D+01 0.6938889446731D+01 0.6787491136317D+01 0.6645337671776D+01 + 0.6512580209419D+01 0.6389335647588D+01 0.6275686255669D+01 0.6171679451478D+01 + 0.6077327728725D+01 0.5992608735473D+01 0.5917465503690D+01 0.5851806829220D+01 + 0.5795507800710D+01 0.5748410475209D+01 0.5710324697441D+01 0.5681029058959D+01 + 0.5660271992662D+01 0.5647772997463D+01 0.5643223987203D+01 0.5646290757227D+01 + 0.5656614561457D+01 0.5673813792161D+01 0.5697485754083D+01 0.5727208524074D+01 + 0.5762542886878D+01 0.5803034337319D+01 0.5848215138709D+01 0.5897606427015D+01 + 0.5950720350005D+01 0.6007062230410D+01 0.6066132741965D+01 0.6127430087125D+01 + 0.6190452165229D+01 0.6254698719938D+01 0.6319673454917D+01 0.6384886106934D+01 + 0.6449854465807D+01 0.6514106331021D+01 0.6577181395226D+01 0.6638633045336D+01 + 0.6698030072523D+01 0.6754958282973D+01 0.6809022002012D+01 0.6859845464883D+01 + 0.6907074088248D+01 0.6950375617310D+01 0.6989441144261D+01 0.7023985994655D+01 + 0.7053750479156D+01 0.7078500509023D+01 0.7098028074543D+01 0.7112151586554D+01 + 0.7120716081994D+01 0.7123593295311D+01 0.7120681598340D+01 0.7111905812042D+01 + 0.7097216894222D+01 0.7076591508032D+01 0.7050031476696D+01 0.7017563130456D+01 + 0.6979236552272D+01 0.6935124729251D+01 0.6885322617162D+01 0.6829946125737D+01 + 0.6769131032689D+01 0.6703031834596D+01 0.6631820542913D+01 0.6555685433431D+01 + 0.6474829757527D+01 0.6389470423460D+01 0.6299836655899D+01 0.6206168641644D+01 + 0.6108716169362D+01 0.6007737270816D+01 0.5903496870858D+01 0.5796265453023D+01 + 0.5686317747290D+01 0.5573931446095D+01 0.5459385954329D+01 0.5342961178578D+01 + 0.5224936360417D+01 0.5105588958136D+01 0.4985193580759D+01 0.4864020977799D+01 + 0.4742337087692D+01 0.4620402147390D+01 0.4498469865160D+01 0.4376786658152D+01 + 0.4255590955908D+01 0.4135112570529D+01 0.4015572133827D+01 0.3897180601426D+01 + 0.3780138823368D+01 0.3664637180481D+01 0.3550855285419D+01 0.3438961746986D+01 + 0.3329113996100D+01 0.3221458171469D+01 0.3116129062854D+01 0.3013250109560D+01 + 0.2912933451636D+01 0.2815280031090D+01 0.2720379740294D+01 0.2628311614634D+01 + 0.2539144066379D+01 0.2452935156647D+01 0.2369732902317D+01 0.2289575614693D+01 + 0.2212492266698D+01 0.2138502885415D+01 0.2067618966758D+01 0.1999843909162D+01 + 0.1935173463164D+01 0.1873596193863D+01 0.1815093953307D+01 0.1759642359947D+01 + 0.1707211282422D+01 0.1657765325023D+01 0.1611264312347D+01 0.1567663770758D+01 + 0.1526915404432D+01 0.1488967563909D+01 0.1453765705230D+01 0.1421252837895D+01 + 0.1391369960044D+01 0.1364056479430D+01 0.1339250618922D+01 0.1316889805422D+01 + 0.1296911041268D+01 0.1279251257337D+01 0.1263847647221D+01 0.1250637981985D+01 + 0.1239560905171D+01 0.1230556207823D+01 0.1223565083428D+01 0.1218530362775D+01 + 0.1215396728828D+01 0.1214110911762D+01 0.1214621864395D+01 0.1216880918284D+01 + 0.1220841920766D+01 0.1226461353243D+01 0.1233698431006D+01 0.1242515184836D+01 + 0.1252876524611D+01 0.1264750285030D+01 0.1278107253522D+01 0.1292921180265D+01 + 0.1309168770131D+01 0.1326829656191D+01 0.1345886354290D+01 0.1366324197935D+01 + 0.1388131252591D+01 0.1411298208169D+01 0.1435818248275D+01 0.1461686894446D+01 + 0.1488901823316D+01 0.1517462654275D+01 0.1547370704843D+01 0.1578628710547D+01 + 0.1611240505685D+01 0.1645210660926D+01 0.1680544073202D+01 0.1717245502894D+01 + 0.1755319052726D+01 + 7 1001 + 1 0 -1 -507.15821 + 2 0 -1 -57.80364 + 2 1 1 -49.78808 + 2 1 -2 -49.78808 + 3 0 -1 -5.34797 + 3 1 1 -3.00900 + 3 1 -2 -3.00900 + 0.1578932959456D-04 0.1617634795110D-04 0.1657285078899D-04 0.1697907047071D-04 + 0.1739524504883D-04 0.1782161840532D-04 0.1825844039419D-04 0.1870596698759D-04 + 0.1916446042557D-04 0.1963418936941D-04 0.2011542905876D-04 0.2060846147258D-04 + 0.2111357549406D-04 0.2163106707952D-04 0.2216123943143D-04 0.2270440317577D-04 + 0.2326087654355D-04 0.2383098555694D-04 0.2441506421980D-04 0.2501345471295D-04 + 0.2562650759423D-04 0.2625458200335D-04 0.2689804587184D-04 0.2755727613809D-04 + 0.2823265896764D-04 0.2892458997884D-04 0.2963347447409D-04 0.3035972767660D-04 + 0.3110377497309D-04 0.3186605216228D-04 0.3264700570953D-04 0.3344709300765D-04 + 0.3426678264415D-04 0.3510655467489D-04 0.3596690090459D-04 0.3684832517397D-04 + 0.3775134365412D-04 0.3867648514790D-04 0.3962429139876D-04 0.4059531740708D-04 + 0.4159013175427D-04 0.4260931693473D-04 0.4365346969592D-04 0.4472320138675D-04 + 0.4581913831449D-04 0.4694192211032D-04 0.4809221010386D-04 0.4927067570682D-04 + 0.5047800880601D-04 0.5171491616593D-04 0.5298212184117D-04 0.5428036759892D-04 + 0.5561041335173D-04 0.5697303760084D-04 0.5836903789035D-04 0.5979923127242D-04 + 0.6126445478382D-04 0.6276556593416D-04 0.6430344320595D-04 0.6587898656688D-04 + 0.6749311799458D-04 0.6914678201418D-04 0.7084094624900D-04 0.7257660198459D-04 + 0.7435476474655D-04 0.7617647489249D-04 0.7804279821832D-04 0.7995482657935D-04 + 0.8191367852653D-04 0.8392049995820D-04 0.8597646478768D-04 0.8808277562713D-04 + 0.9024066448810D-04 0.9245139349907D-04 0.9471625564056D-04 0.9703657549804D-04 + 0.9941371003322D-04 0.1018490493741D-03 0.1043440176244D-03 0.1069000736923D-03 + 0.1095187121398D-03 0.1122014640523D-03 0.1149498979301D-03 0.1177656206006D-03 + 0.1206502781532D-03 0.1236055568971D-03 0.1266331843424D-03 0.1297349302043D-03 + 0.1329126074328D-03 0.1361680732666D-03 0.1395032303133D-03 0.1429200276552D-03 + 0.1464204619824D-03 0.1500065787534D-03 0.1536804733837D-03 0.1574442924637D-03 + 0.1613002350057D-03 0.1652505537212D-03 0.1692975563300D-03 0.1734436069002D-03 + 0.1776911272208D-03 0.1820425982087D-03 0.1865005613483D-03 0.1910676201671D-03 + 0.1957464417472D-03 0.2005397582725D-03 0.2054503686146D-03 0.2104811399563D-03 + 0.2156350094551D-03 0.2209149859469D-03 0.2263241516906D-03 0.2318656641554D-03 + 0.2375427578517D-03 0.2433587462059D-03 0.2493170234808D-03 0.2554210667424D-03 + 0.2616744378749D-03 0.2680807856442D-03 0.2746438478108D-03 0.2813674532951D-03 + 0.2882555243942D-03 0.2953120790528D-03 0.3025412331888D-03 0.3099472030755D-03 + 0.3175343077815D-03 0.3253069716691D-03 0.3332697269540D-03 0.3414272163261D-03 + 0.3497841956345D-03 0.3583455366366D-03 0.3671162298143D-03 0.3761013872582D-03 + 0.3853062456213D-03 0.3947361691442D-03 0.4043966527534D-03 0.4142933252347D-03 + 0.4244319524825D-03 0.4348184408289D-03 0.4454588404517D-03 0.4563593488658D-03 + 0.4675263144981D-03 0.4789662403494D-03 0.4906857877441D-03 0.5026917801706D-03 + 0.5149912072142D-03 0.5275912285851D-03 0.5404991782430D-03 0.5537225686217D-03 + 0.5672690949553D-03 0.5811466397084D-03 0.5953632771133D-03 0.6099272778161D-03 + 0.6248471136357D-03 0.6401314624356D-03 0.6557892131146D-03 0.6718294707169D-03 + 0.6882615616648D-03 0.7050950391179D-03 0.7223396884606D-03 0.7400055329221D-03 + 0.7581028393308D-03 0.7766421240073D-03 0.7956341587992D-03 0.8150899772600D-03 + 0.8350208809774D-03 0.8554384460526D-03 0.8763545297357D-03 0.8977812772195D-03 + 0.9197311285973D-03 0.9422168259864D-03 0.9652514208232D-03 0.9888482813323D-03 + 0.1013021100176D-02 0.1037783902283D-02 0.1063151052873D-02 0.1089137265662D-02 + 0.1115757611271D-02 0.1143027525840D-02 0.1170962819832D-02 0.1199579687069D-02 + 0.1228894713965D-02 0.1258924888992D-02 0.1289687612363D-02 0.1321200705955D-02 + 0.1353482423462D-02 0.1386551460792D-02 0.1420426966714D-02 0.1455128553758D-02 + 0.1490676309370D-02 0.1527090807340D-02 0.1564393119499D-02 0.1602604827694D-02 + 0.1641748036045D-02 0.1681845383501D-02 0.1722920056689D-02 0.1764995803067D-02 + 0.1808096944397D-02 0.1852248390528D-02 0.1897475653516D-02 0.1943804862068D-02 + 0.1991262776341D-02 0.2039876803084D-02 0.2089675011139D-02 0.2140686147310D-02 + 0.2192939652612D-02 0.2246465678898D-02 0.2301295105883D-02 0.2357459558570D-02 + 0.2414991425088D-02 0.2473923874952D-02 0.2534290877748D-02 0.2596127222272D-02 + 0.2659468536107D-02 0.2724351305669D-02 0.2790812896722D-02 0.2858891575380D-02 + 0.2928626529601D-02 0.3000057891183D-02 0.3073226758287D-02 0.3148175218478D-02 + 0.3224946372315D-02 0.3303584357493D-02 0.3384134373548D-02 0.3466642707150D-02 + 0.3551156757975D-02 0.3637725065197D-02 0.3726397334591D-02 0.3817224466277D-02 + 0.3910258583103D-02 0.4005553059702D-02 0.4103162552220D-02 0.4203143028740D-02 + 0.4305551800419D-02 0.4410447553342D-02 0.4517890381130D-02 0.4627941818293D-02 + 0.4740664874373D-02 0.4856124068869D-02 0.4974385466980D-02 0.5095516716174D-02 + 0.5219587083607D-02 0.5346667494409D-02 0.5476830570859D-02 0.5610150672457D-02 + 0.5746703936938D-02 0.5886568322220D-02 0.6029823649328D-02 0.6176551646304D-02 + 0.6326835993134D-02 0.6480762367704D-02 0.6638418492820D-02 0.6799894184302D-02 + 0.6965281400189D-02 0.7134674291071D-02 0.7308169251573D-02 0.7485864973024D-02 + 0.7667862497328D-02 0.7854265272064D-02 0.8045179206856D-02 0.8240712731015D-02 + 0.8440976852509D-02 0.8646085218267D-02 0.8856154175863D-02 0.9071302836595D-02 + 0.9291653140005D-02 0.9517329919855D-02 0.9748460971605D-02 0.9985177121417D-02 + 0.1022761229672D-01 0.1047590359836D-01 0.1073019137440D-01 0.1099061929557D-01 + 0.1125733443240D-01 0.1153048733414D-01 0.1181023210935D-01 0.1209672650847D-01 + 0.1239013200802D-01 0.1269061389691D-01 0.1299834136447D-01 0.1331348759064D-01 + 0.1363622983799D-01 0.1396674954596D-01 0.1430523242703D-01 0.1465186856518D-01 + 0.1500685251642D-01 0.1537038341158D-01 0.1574266506141D-01 0.1612390606396D-01 + 0.1651431991433D-01 0.1691412511688D-01 0.1732354529980D-01 0.1774280933235D-01 + 0.1817215144455D-01 0.1861181134949D-01 0.1906203436843D-01 0.1952307155847D-01 + 0.1999517984311D-01 0.2047862214561D-01 0.2097366752525D-01 0.2148059131652D-01 + 0.2199967527136D-01 0.2253120770443D-01 0.2307548364156D-01 0.2363280497129D-01 + 0.2420348059982D-01 0.2478782660912D-01 0.2538616641851D-01 0.2599883094969D-01 + 0.2662615879522D-01 0.2726849639066D-01 0.2792619819027D-01 0.2859962684654D-01 + 0.2928915339338D-01 0.2999515743329D-01 0.3071802732834D-01 0.3145816039529D-01 + 0.3221596310468D-01 0.3299185128412D-01 0.3378625032583D-01 0.3459959539841D-01 + 0.3543233166312D-01 0.3628491449450D-01 0.3715780970564D-01 0.3805149377798D-01 + 0.3896645409592D-01 0.3990318918615D-01 0.4086220896189D-01 0.4184403497205D-01 + 0.4284920065553D-01 0.4387825160053D-01 0.4493174580921D-01 0.4601025396754D-01 + 0.4711435972064D-01 0.4824465995358D-01 0.4940176507775D-01 0.5058629932291D-01 + 0.5179890103500D-01 0.5304022297983D-01 0.5431093265271D-01 0.5561171259412D-01 + 0.5694326071150D-01 0.5830629060734D-01 0.5970153191354D-01 0.6112973063224D-01 + 0.6259164948312D-01 0.6408806825744D-01 0.6561978417865D-01 0.6718761226992D-01 + 0.6879238572857D-01 0.7043495630748D-01 0.7211619470366D-01 0.7383699095398D-01 + 0.7559825483828D-01 0.7740091628977D-01 0.7924592581306D-01 0.8113425490972D-01 + 0.8306689651155D-01 0.8504486542163D-01 0.8706919876330D-01 0.8914095643707D-01 + 0.9126122158564D-01 0.9343110106711D-01 0.9565172593635D-01 0.9792425193488D-01 + 0.1002498599890D+00 0.1026297567168D+00 0.1050651749430D+00 0.1075573742238D+00 + 0.1101076413788D+00 0.1127172910336D+00 0.1153876661698D+00 0.1181201386851D+00 + 0.1209161099615D+00 0.1237770114438D+00 0.1267043052262D+00 0.1296994846489D+00 + 0.1327640749039D+00 0.1358996336497D+00 0.1391077516364D+00 0.1423900533393D+00 + 0.1457481976027D+00 0.1491838782929D+00 0.1526988249610D+00 0.1562948035154D+00 + 0.1599736169034D+00 0.1637371058034D+00 0.1675871493258D+00 0.1715256657242D+00 + 0.1755546131161D+00 0.1796759902133D+00 0.1838918370616D+00 0.1882042357907D+00 + 0.1926153113728D+00 0.1971272323921D+00 0.2017422118221D+00 0.2064625078134D+00 + 0.2112904244906D+00 0.2162283127584D+00 0.2212785711166D+00 0.2264436464843D+00 + 0.2317260350331D+00 0.2371282830291D+00 0.2426529876830D+00 0.2483027980092D+00 + 0.2540804156934D+00 0.2599885959670D+00 0.2660301484910D+00 0.2722079382463D+00 + 0.2785248864321D+00 0.2849839713712D+00 0.2915882294217D+00 0.2983407558965D+00 + 0.3052447059874D+00 0.3123032956963D+00 0.3195198027716D+00 0.3268975676495D+00 + 0.3344399944004D+00 0.3421505516792D+00 0.3500327736798D+00 0.3580902610928D+00 + 0.3663266820660D+00 0.3747457731674D+00 0.3833513403499D+00 0.3921472599167D+00 + 0.4011374794879D+00 0.4103260189668D+00 0.4197169715049D+00 0.4293145044656D+00 + 0.4391228603860D+00 0.4491463579352D+00 0.4593893928682D+00 0.4698564389762D+00 + 0.4805520490296D+00 0.4914808557159D+00 0.5026475725686D+00 0.5140569948882D+00 + 0.5257140006529D+00 0.5376235514188D+00 0.5497906932078D+00 0.5622205573817D+00 + 0.5749183615028D+00 0.5878894101771D+00 0.6011390958817D+00 0.6146728997723D+00 + 0.6284963924710D+00 0.6426152348323D+00 0.6570351786853D+00 0.6717620675517D+00 + 0.6868018373363D+00 0.7021605169891D+00 0.7178442291373D+00 0.7338591906846D+00 + 0.7502117133767D+00 0.7669082043297D+00 0.7839551665211D+00 0.8013591992393D+00 + 0.8191269984904D+00 0.8372653573601D+00 0.8557811663273D+00 0.8746814135287D+00 + 0.8939731849693D+00 0.9136636646784D+00 0.9337601348078D+00 0.9542699756681D+00 + 0.9752006657025D+00 0.9965597813926D+00 0.1018354997096D+01 0.1040594084808D+01 + 0.1063284913853D+01 0.1086435450488D+01 0.1110053757431D+01 0.1134147993299D+01 + 0.1158726411957D+01 0.1183797361771D+01 0.1209369284771D+01 0.1235450715702D+01 + 0.1262050280978D+01 0.1289176697525D+01 0.1316838771505D+01 0.1345045396934D+01 + 0.1373805554164D+01 0.1403128308251D+01 0.1433022807182D+01 0.1463498279974D+01 + 0.1494564034630D+01 0.1526229455949D+01 0.1558504003186D+01 0.1591397207561D+01 + 0.1624918669603D+01 0.1659078056333D+01 0.1693885098274D+01 0.1729349586291D+01 + 0.1765481368238D+01 0.1802290345436D+01 0.1839786468945D+01 0.1877979735644D+01 + 0.1916880184112D+01 0.1956497890292D+01 0.1996842962948D+01 0.2037925538901D+01 + 0.2079755778033D+01 0.2122343858068D+01 0.2165699969108D+01 0.2209834307933D+01 + 0.2254757072045D+01 0.2300478453457D+01 0.2347008632229D+01 0.2394357769726D+01 + 0.2442536001609D+01 0.2491553430551D+01 0.2541420118654D+01 0.2592146079597D+01 + 0.2643741270467D+01 0.2696215583301D+01 0.2749578836319D+01 0.2803840764839D+01 + 0.2859011011882D+01 0.2915099118444D+01 0.2972114513453D+01 0.3030066503378D+01 + 0.3088964261512D+01 0.3148816816908D+01 0.3209633042968D+01 0.3271421645683D+01 + 0.3334191151519D+01 0.3397949894945D+01 0.3462706005596D+01 0.3528467395084D+01 + 0.3595241743423D+01 0.3663036485110D+01 0.3731858794810D+01 0.3801715572697D+01 + 0.3872613429397D+01 0.3944558670576D+01 0.4017557281145D+01 0.4091614909097D+01 + 0.4166736848980D+01 0.4242928024987D+01 0.4320192973693D+01 0.4398535826419D+01 + 0.4477960291249D+01 0.4558469634674D+01 0.4640066662906D+01 0.4722753702838D+01 + 0.4806532582669D+01 0.4891404612204D+01 0.4977370562830D+01 0.5064430647192D+01 + 0.5152584498558D+01 0.5241831149906D+01 0.5332169012736D+01 0.5423595855620D+01 + 0.5516108782510D+01 0.5609704210813D+01 0.5704377849266D+01 0.5800124675610D+01 + 0.5896938914097D+01 0.5994814012850D+01 0.6093742621092D+01 0.6193716566279D+01 + 0.6294726831155D+01 0.6396763530759D+01 0.6499815889416D+01 0.6603872217740D+01 + 0.6708919889675D+01 0.6814945319632D+01 0.6921933939720D+01 0.7029870177147D+01 + 0.7138737431803D+01 0.7248518054081D+01 0.7359193322972D+01 0.7470743424486D+01 + 0.7583147430434D+01 0.7696383277631D+01 0.7810427747570D+01 0.7925256446610D+01 + 0.8040843786741D+01 0.8157162966982D+01 0.8274185955464D+01 0.8391883472267D+01 + 0.8510224973068D+01 0.8629178633659D+01 0.8748711335417D+01 0.8868788651775D+01 + 0.8989374835775D+01 0.9110432808772D+01 0.9231924150361D+01 0.9353809089599D+01 + 0.9476046497610D+01 0.9598593881630D+01 0.9721407380596D+01 0.9844441762336D+01 + 0.9967650422460D+01 0.1009098538503D+02 0.1021439730507D+02 0.1033783547307D+02 + 0.1046124782146D+02 0.1058458093324D+02 0.1070778005282D+02 0.1083078909912D+02 + 0.1095355068109D+02 0.1107600611564D+02 0.1119809544818D+02 0.1131975747577D+02 + 0.1144092977298D+02 0.1156154872061D+02 0.1168154953722D+02 0.1180086631373D+02 + 0.1191943205098D+02 0.1203717870050D+02 0.1215403720841D+02 0.1226993756267D+02 + 0.1238480884363D+02 0.1249857927800D+02 0.1261117629631D+02 0.1272252659389D+02 + 0.1283255619545D+02 0.1294119052329D+02 0.1304835446916D+02 0.1315397246988D+02 + 0.1325796858669D+02 0.1336026658833D+02 0.1346079003800D+02 0.1355946238400D+02 + 0.1365620705428D+02 0.1375094755471D+02 0.1384360757113D+02 0.1393411107521D+02 + 0.1402238243396D+02 0.1410834652295D+02 0.1419192884313D+02 0.1427305564121D+02 + 0.1435165403349D+02 0.1442765213309D+02 0.1450097918044D+02 0.1457156567694D+02 + 0.1463934352164D+02 0.1470424615079D+02 0.1476620868015D+02 0.1482516804981D+02 + 0.1488106317144D+02 0.1493383507758D+02 0.1498342707306D+02 0.1502978488791D+02 + 0.1507285683196D+02 0.1511259395041D+02 0.1514895018049D+02 0.1518188250864D+02 + 0.1521135112801D+02 0.1523731959593D+02 0.1525975499101D+02 0.1527862806946D+02 + 0.1529391342035D+02 0.1530558961928D+02 0.1531363938018D+02 0.1531804970475D+02 + 0.1531881202904D+02 0.1531592236688D+02 0.1530938144955D+02 0.1529919486125D+02 + 0.1528537316989D+02 0.1526793205273D+02 0.1524689241624D+02 0.1522228050986D+02 + 0.1519412803287D+02 0.1516247223413D+02 0.1512735600383D+02 0.1508882795702D+02 + 0.1504694250814D+02 0.1500175993609D+02 0.1495334643931D+02 0.1490177418029D+02 + 0.1484712131901D+02 0.1478947203474D+02 0.1472891653562D+02 0.1466555105572D+02 + 0.1459947783878D+02 0.1453080510840D+02 0.1445964702406D+02 0.1438612362257D+02 + 0.1431036074455D+02 0.1423248994549D+02 0.1415264839103D+02 0.1407097873615D+02 + 0.1398762898789D+02 0.1390275235141D+02 0.1381650705902D+02 0.1372905618219D+02 + 0.1364056742609D+02 0.1355121290685D+02 0.1346116891125D+02 0.1337061563896D+02 + 0.1327973692724D+02 0.1318871995837D+02 0.1309775494975D+02 0.1300703482704D+02 + 0.1291675488052D+02 0.1282711240503D+02 0.1273830632382D+02 0.1265053679694D+02 + 0.1256400481443D+02 0.1247891177511D+02 0.1239545905155D+02 0.1231384754196D+02 + 0.1223427720971D+02 0.1215694661156D+02 0.1208205241520D+02 0.1200978890748D+02 + 0.1194034749400D+02 0.1187391619161D+02 0.1181067911457D+02 0.1175081595604D+02 + 0.1169450146591D+02 0.1164190492657D+02 0.1159318962785D+02 0.1154851234279D+02 + 0.1150802280569D+02 0.1147186319402D+02 0.1144016761583D+02 0.1141306160430D+02 + 0.1139066162117D+02 0.1137307457069D+02 0.1136039732594D+02 0.1135271626912D+02 + 0.1135010684776D+02 0.1135263314851D+02 0.1136034749032D+02 0.1137329003881D+02 + 0.1139148844348D+02 0.1141495749963D+02 0.1144369883662D+02 0.1147770063409D+02 + 0.1151693736796D+02 0.1156136958754D+02 0.1161094372545D+02 0.1166559194179D+02 + 0.1172523200381D+02 0.1178976720264D+02 0.1185908630799D+02 0.1193306356226D+02 + 0.1201155871484D+02 0.1209441709769D+02 0.1218146974287D+02 0.1227253354284D+02 + 0.1236741145397D+02 0.1246589274379D+02 0.1256775328211D+02 0.1267275587640D+02 + 0.1278065065113D+02 0.1289117547119D+02 0.1300405640885D+02 0.1311900825395D+02 + 0.1323573506657D+02 0.1335393077146D+02 0.1347327979323D+02 0.1359345773115D+02 + 0.1371413207230D+02 0.1383496294160D+02 0.1395560388709D+02 0.1407570269861D+02 + 0.1419490225806D+02 0.1431284141898D+02 0.1442915591338D+02 0.1454347928315D+02 + 0.1465544383386D+02 0.1476468160783D+02 0.1487082537417D+02 0.1497350963233D+02 + 0.1507237162657D+02 0.1516705236793D+02 0.1525719766057D+02 0.1534245912911D+02 + 0.1542249524366D+02 0.1549697233900D+02 0.1556556562442D+02 0.1562796018077D+02 + 0.1568385194105D+02 0.1573294865100D+02 0.1577497080618D+02 0.1580965256192D+02 + 0.1583674261262D+02 0.1585600503703D+02 0.1586722010590D+02 0.1587018504888D+02 + 0.1586471477724D+02 0.1585064255941D+02 0.1582782064616D+02 0.1579612084266D+02 + 0.1575543502459D+02 0.1570567559576D+02 0.1564677588478D+02 0.1557869047861D+02 + 0.1550139549096D+02 0.1541488876365D+02 0.1531918999952D+02 0.1521434082540D+02 + 0.1510040478412D+02 0.1497746725473D+02 0.1484563530035D+02 0.1470503744339D+02 + 0.1455582336815D+02 0.1439816355111D+02 0.1423224881940D+02 0.1405828983858D+02 + 0.1387651653069D+02 0.1368717742428D+02 0.1349053893812D+02 0.1328688460077D+02 + 0.1307651420854D+02 0.1285974292444D+02 0.1263690032121D+02 0.1240832937187D+02 + 0.1217438539130D+02 0.1193543493267D+02 0.1169185464315D+02 0.1144403008289D+02 + 0.1119235451229D+02 0.1093722765210D+02 0.1067905442153D+02 0.1041824365947D+02 + 0.1015520683431D+02 0.9890356747642D+01 0.9624106237510D+01 0.9356866886848D+01 + 0.9089047742725D+01 0.8821054052096D+01 0.8553286019718D+01 0.8286137593812D+01 + 0.8019995284984D+01 0.7755237023783D+01 0.7492231062108D+01 0.7231334923490D+01 + 0.6972894407048D+01 0.6717242649614D+01 0.6464699250285D+01 0.6215569461263D+01 + 0.5970143448506D+01 0.5728695625320D+01 0.5491484061577D+01 0.5258749970799D+01 + 0.5030717276876D+01 0.4807592261687D+01 0.4589563294379D+01 0.4376800642543D+01 + 0.4169456365009D+01 0.3967664285439D+01 0.3771540045395D+01 0.3581181235048D+01 + 0.3396667599216D+01 0.3218061315943D+01 0.3045407344425D+01 0.2878733838673D+01 + 0.2718052622958D+01 0.2563359724784D+01 0.2414635960837D+01 0.2271847571179D+01 + 0.2134946896743D+01 0.2003873095094D+01 0.1878552889299D+01 0.1758901344748D+01 + 0.1644822668735D+01 0.1536211027662D+01 0.1432951376795D+01 0.1334920297604D+01 + 0.1241986837840D+01 0.1154013349698D+01 0.1070856321533D+01 0.9923671988771D+00 + 0.9183931906722D+00 0.8487780569097D+00 0.7833628741179D+00 0.7219867754195D+00 + 0.6644876621670D+00 0.6107028844649D+00 0.5604698881984D+00 0.5136268265009D+00 + 0.4700131339140D+00 0.4294700618145D+00 0.3918411740035D+00 0.3569728016706D+00 + 0.3247144572577D+00 0.2949192070505D+00 0.2674440026191D+00 0.2421499715083D+00 + 0.2189026678453D+00 0.1975722837769D+00 0.1780338228821D+00 0.1601672369114D+00 + 0.1438575273934D+00 0.1289948138155D+00 0.1154743702244D+00 0.1031966322137D+00 + 0.9206717636280D-01 0.8199667425333D-01 0.7290082325274D-01 0.6470025626879D-01 + 0.5732043268983D-01 0.5069151270949D-01 0.4474821720070D-01 0.3942967525286D-01 + 0.3467926141935D-01 0.3044442464189D-01 0.2667651072510D-01 0.2333058013175D-01 + 0.2036522275729D-01 0.1774237122372D-01 0.1542711410973D-01 0.1338751040756D-01 + 0.1159440636894D-01 0.1002125577446D-01 0.8643944534184D-02 0.7440620403504D-02 + 0.6391528477907D-02 0.5478853015520D-02 0.4686566026548D-02 0.4000282965823D-02 + 0.3407125768566D-02 0.2895593380852D-02 0.2455439855310D-02 0.2077560009503D-02 + 0.1753882579245D-02 0.1477270741753D-02 0.1241429833825D-02 0.1040822048005D-02 + 0.8705878544716D-03 0.7264738679766D-03 0.6047668569912D-03 0.5022335758689D-03 + 0.4160660898505D-03 0.3438322565535D-03 0.2834310257265D-03 0.2330522209919D-03 + 0.1911404725354D-03 0.1563629777588D-03 0.1275807773169D-03 0.1038232462792D-03 + 0.8426551398552D-04 0.6820854112390D-04 0.5506159830921D-04 0.4432690667621D-04 + 0.3558621744990D-04 0.2848912388179D-04 0.2274291514184D-04 0.1810379755957D-04 + 0.1436932387695D-04 0.1137188579483D-04 0.8973138981353D-05 0.7059242800584D-05 + 0.5536809271481D-05 0.4329467160309D-05 0.3374957635189D-05 0.2622687577932D-05 + 0.2031675474821D-05 0.1568832820455D-05 0.1207531205344D-05 0.9264117571152D-06 + 0.7083994129822D-06 0.5398896646190D-06 0.4100799844532D-06 0.3104221636051D-06 + 0.2341753146343D-06 0.1760423639345D-06 0.1318755242217D-06 0.9843853994995D-07 + 0.7321547792462D-07 0.5425752930255D-07 0.4006073209484D-07 0.2946874677845D-07 + 0.2159585030806D-07 0.1576618147791D-07 0.1146599626209D-07 0.8306295925441D-08 + 0.5993691398320D-08 0.4307780466934D-08 0.3083653528434D-08 0.2198420923597D-08 + 0.1560880455160D-08 0.1103626406353D-08 0.7770486592420D-09 0.5447886926870D-09 + 0.3800493982106D-09 0.2639911834652D-09 0.1825802892585D-09 0.1257219717201D-09 + 0.8618649351275D-10 0.5881881826024D-10 0.3987629830876D-10 0.2691611835206D-10 + 0.1808786326066D-10 0.1210089450733D-10 0.8058999413895D-11 0.5342643909174D-11 + 0.3525500295203D-11 0.2315541789969D-11 0.1513664801251D-11 0.9847587801959D-12 + 0.6375744101585D-12 0.4107811748216D-12 0.2633580320212D-12 0.1680028688901D-12 + 0.1066347140162D-12 diff --git a/Test/Ni4/Ni_v b/Test/Ni4/Ni_v new file mode 100644 index 000000000..fb1f8605e --- /dev/null +++ b/Test/Ni4/Ni_v @@ -0,0 +1,1546 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Ni. + 2 -0.3322713216605D-24 + LSMS: Ni z= 28. xvalws= 5.29617 + 28. 6.55000 10. 0.6793388822543D+00 + -0.1113096740000D+02 0.9564606085049D+00 1010 +-0.5599696170996D+02-0.5599692495510D+02-0.5599688775560D+02-0.5599685010610D+02 +-0.5599681200113D+02-0.5599677343521D+02-0.5599673440274D+02-0.5599669489808D+02 +-0.5599665491553D+02-0.5599661444929D+02-0.5599657349353D+02-0.5599653204230D+02 +-0.5599649008963D+02-0.5599644762944D+02-0.5599640465560D+02-0.5599636116188D+02 +-0.5599631714201D+02-0.5599627258960D+02-0.5599622749823D+02-0.5599618186137D+02 +-0.5599613567242D+02-0.5599608892470D+02-0.5599604161145D+02-0.5599599372582D+02 +-0.5599594526090D+02-0.5599589620968D+02-0.5599584656505D+02-0.5599579631984D+02 +-0.5599574546679D+02-0.5599569399854D+02-0.5599564190765D+02-0.5599558918657D+02 +-0.5599553582770D+02-0.5599548182331D+02-0.5599542716558D+02-0.5599537184663D+02 +-0.5599531585844D+02-0.5599525919291D+02-0.5599520184186D+02-0.5599514379699D+02 +-0.5599508504990D+02-0.5599502559210D+02-0.5599496541498D+02-0.5599490450985D+02 +-0.5599484286789D+02-0.5599478048019D+02-0.5599471733773D+02-0.5599465343137D+02 +-0.5599458875186D+02-0.5599452328987D+02-0.5599445703591D+02-0.5599438998040D+02 +-0.5599432211365D+02-0.5599425342583D+02-0.5599418390702D+02-0.5599411354716D+02 +-0.5599404233606D+02-0.5599397026343D+02-0.5599389731885D+02-0.5599382349177D+02 +-0.5599374877149D+02-0.5599367314722D+02-0.5599359660802D+02-0.5599351914282D+02 +-0.5599344074040D+02-0.5599336138943D+02-0.5599328107843D+02-0.5599319979578D+02 +-0.5599311752973D+02-0.5599303426837D+02-0.5599294999965D+02-0.5599286471139D+02 +-0.5599277839126D+02-0.5599269102675D+02-0.5599260260524D+02-0.5599251311392D+02 +-0.5599242253987D+02-0.5599233086996D+02-0.5599223809094D+02-0.5599214418939D+02 +-0.5599204915171D+02-0.5599195296417D+02-0.5599185561284D+02-0.5599175708364D+02 +-0.5599165736232D+02-0.5599155643444D+02-0.5599145428541D+02-0.5599135090043D+02 +-0.5599124626457D+02-0.5599114036267D+02-0.5599103317941D+02-0.5599092469928D+02 +-0.5599081490659D+02-0.5599070378545D+02-0.5599059131978D+02-0.5599047749331D+02 +-0.5599036228956D+02-0.5599024569187D+02-0.5599012768336D+02-0.5599000824696D+02 +-0.5598988736538D+02-0.5598976502113D+02-0.5598964119650D+02-0.5598951587358D+02 +-0.5598938903422D+02-0.5598926066008D+02-0.5598913073257D+02-0.5598899923289D+02 +-0.5598886614201D+02-0.5598873144067D+02-0.5598859510936D+02-0.5598845712837D+02 +-0.5598831747771D+02-0.5598817613718D+02-0.5598803308632D+02-0.5598788830441D+02 +-0.5598774177052D+02-0.5598759346342D+02-0.5598744336164D+02-0.5598729144347D+02 +-0.5598713768691D+02-0.5598698206969D+02-0.5598682456931D+02-0.5598666516295D+02 +-0.5598650382753D+02-0.5598634053971D+02-0.5598617527584D+02-0.5598600801200D+02 +-0.5598583872398D+02-0.5598566738725D+02-0.5598549397702D+02-0.5598531846818D+02 +-0.5598514083531D+02-0.5598496105271D+02-0.5598477909433D+02-0.5598459493383D+02 +-0.5598440854455D+02-0.5598421989949D+02-0.5598402897134D+02-0.5598383573244D+02 +-0.5598364015483D+02-0.5598344221017D+02-0.5598324186980D+02-0.5598303910470D+02 +-0.5598283388551D+02-0.5598262618251D+02-0.5598241596562D+02-0.5598220320439D+02 +-0.5598198786800D+02-0.5598176992526D+02-0.5598154934462D+02-0.5598132609411D+02 +-0.5598110014139D+02-0.5598087145375D+02-0.5598063999804D+02-0.5598040574074D+02 +-0.5598016864792D+02-0.5597992868523D+02-0.5597968581789D+02-0.5597944001073D+02 +-0.5597919122814D+02-0.5597893943406D+02-0.5597868459202D+02-0.5597842666508D+02 +-0.5597816561588D+02-0.5597790140659D+02-0.5597763399893D+02-0.5597736335413D+02 +-0.5597708943299D+02-0.5597681219580D+02-0.5597653160239D+02-0.5597624761209D+02 +-0.5597596018375D+02-0.5597566927569D+02-0.5597537484576D+02-0.5597507685127D+02 +-0.5597477524904D+02-0.5597446999535D+02-0.5597416104594D+02-0.5597384835602D+02 +-0.5597353188027D+02-0.5597321157281D+02-0.5597288738719D+02-0.5597255927641D+02 +-0.5597222719289D+02-0.5597189108850D+02-0.5597155091448D+02-0.5597120662152D+02 +-0.5597085815968D+02-0.5597050547843D+02-0.5597014852662D+02-0.5596978725249D+02 +-0.5596942160363D+02-0.5596905152701D+02-0.5596867696896D+02-0.5596829787514D+02 +-0.5596791419055D+02-0.5596752585955D+02-0.5596713282579D+02-0.5596673503226D+02 +-0.5596633242124D+02-0.5596592493431D+02-0.5596551251235D+02-0.5596509509552D+02 +-0.5596467262324D+02-0.5596424503421D+02-0.5596381226637D+02-0.5596337425693D+02 +-0.5596293094230D+02-0.5596248225814D+02-0.5596202813932D+02-0.5596156851994D+02 +-0.5596110333326D+02-0.5596063251175D+02-0.5596015598707D+02-0.5595967369003D+02 +-0.5595918555060D+02-0.5595869149790D+02-0.5595819146020D+02-0.5595768536488D+02 +-0.5595717313844D+02-0.5595665470650D+02-0.5595612999375D+02-0.5595559892399D+02 +-0.5595506142007D+02-0.5595451740393D+02-0.5595396679651D+02-0.5595340951785D+02 +-0.5595284548696D+02-0.5595227462191D+02-0.5595169683973D+02-0.5595111205648D+02 +-0.5595052018718D+02-0.5594992114580D+02-0.5594931484528D+02-0.5594870119750D+02 +-0.5594808011326D+02-0.5594745150229D+02-0.5594681527319D+02-0.5594617133346D+02 +-0.5594551958950D+02-0.5594485994652D+02-0.5594419230862D+02-0.5594351657870D+02 +-0.5594283265849D+02-0.5594214044852D+02-0.5594143984812D+02-0.5594073075537D+02 +-0.5594001306712D+02-0.5593928667896D+02-0.5593855148522D+02-0.5593780737891D+02 +-0.5593705425177D+02-0.5593629199421D+02-0.5593552049528D+02-0.5593473964270D+02 +-0.5593394932282D+02-0.5593314942059D+02-0.5593233981958D+02-0.5593152040191D+02 +-0.5593069104829D+02-0.5592985163794D+02-0.5592900204864D+02-0.5592814215667D+02 +-0.5592727183678D+02-0.5592639096221D+02-0.5592549940465D+02-0.5592459703421D+02 +-0.5592368371944D+02-0.5592275932727D+02-0.5592182372299D+02-0.5592087677027D+02 +-0.5591991833111D+02-0.5591894826580D+02-0.5591796643295D+02-0.5591697268944D+02 +-0.5591596689039D+02-0.5591494888916D+02-0.5591391853730D+02-0.5591287568457D+02 +-0.5591182017888D+02-0.5591075186628D+02-0.5590967059094D+02-0.5590857619513D+02 +-0.5590746851918D+02-0.5590634740149D+02-0.5590521267844D+02-0.5590406418447D+02 +-0.5590290175194D+02-0.5590172521118D+02-0.5590053439046D+02-0.5589932911592D+02 +-0.5589810921160D+02-0.5589687449936D+02-0.5589562479891D+02-0.5589435992772D+02 +-0.5589307970105D+02-0.5589178393190D+02-0.5589047243096D+02-0.5588914500662D+02 +-0.5588780146491D+02-0.5588644160950D+02-0.5588506524166D+02-0.5588367216019D+02 +-0.5588226216147D+02-0.5588083503935D+02-0.5587939058518D+02-0.5587792858775D+02 +-0.5587644883324D+02-0.5587495110524D+02-0.5587343518467D+02-0.5587190084976D+02 +-0.5587034787604D+02-0.5586877603628D+02-0.5586718510046D+02-0.5586557483574D+02 +-0.5586394500644D+02-0.5586229537397D+02-0.5586062569683D+02-0.5585893573055D+02 +-0.5585722522765D+02-0.5585549393765D+02-0.5585374160696D+02-0.5585196797890D+02 +-0.5585017279365D+02-0.5584835578816D+02-0.5584651669621D+02-0.5584465524826D+02 +-0.5584277117151D+02-0.5584086418977D+02-0.5583893402349D+02-0.5583698038968D+02 +-0.5583500300187D+02-0.5583300157008D+02-0.5583097580078D+02-0.5582892539681D+02 +-0.5582685005740D+02-0.5582474947804D+02-0.5582262335053D+02-0.5582047136286D+02 +-0.5581829319918D+02-0.5581608853979D+02-0.5581385706103D+02-0.5581159843531D+02 +-0.5580931233097D+02-0.5580699841231D+02-0.5580465633949D+02-0.5580228576851D+02 +-0.5579988635113D+02-0.5579745773485D+02-0.5579499956283D+02-0.5579251147384D+02 +-0.5578999310224D+02-0.5578744407788D+02-0.5578486402606D+02-0.5578225256750D+02 +-0.5577960931823D+02-0.5577693388959D+02-0.5577422588815D+02-0.5577148491562D+02 +-0.5576871056886D+02-0.5576590243974D+02-0.5576306011515D+02-0.5576018317688D+02 +-0.5575727120162D+02-0.5575432376082D+02-0.5575134042071D+02-0.5574832074217D+02 +-0.5574526428070D+02-0.5574217058635D+02-0.5573903920363D+02-0.5573586967148D+02 +-0.5573266152317D+02-0.5572941428625D+02-0.5572612748248D+02-0.5572280062774D+02 +-0.5571943323198D+02-0.5571602479915D+02-0.5571257482710D+02-0.5570908280754D+02 +-0.5570554822594D+02-0.5570197056147D+02-0.5569834928693D+02-0.5569468386863D+02 +-0.5569097376636D+02-0.5568721843332D+02-0.5568341731598D+02-0.5567956985405D+02 +-0.5567567548038D+02-0.5567173362088D+02-0.5566774369444D+02-0.5566370511286D+02 +-0.5565961728071D+02-0.5565547959534D+02-0.5565129144667D+02-0.5564705221723D+02 +-0.5564276128198D+02-0.5563841800824D+02-0.5563402175565D+02-0.5562957187599D+02 +-0.5562506771318D+02-0.5562050860311D+02-0.5561589387361D+02-0.5561122284430D+02 +-0.5560649482652D+02-0.5560170912325D+02-0.5559686502897D+02-0.5559196182960D+02 +-0.5558699880238D+02-0.5558197521576D+02-0.5557689032932D+02-0.5557174339367D+02 +-0.5556653365031D+02-0.5556126033156D+02-0.5555592266046D+02-0.5555051985062D+02 +-0.5554505110615D+02-0.5553951562155D+02-0.5553391258156D+02-0.5552824116110D+02 +-0.5552250052515D+02-0.5551668982861D+02-0.5551080821619D+02-0.5550485482233D+02 +-0.5549882877105D+02-0.5549272917583D+02-0.5548655513954D+02-0.5548030575427D+02 +-0.5547398010123D+02-0.5546757725062D+02-0.5546109626154D+02-0.5545453618183D+02 +-0.5544789604798D+02-0.5544117488497D+02-0.5543437170617D+02-0.5542748551322D+02 +-0.5542051529589D+02-0.5541346003195D+02-0.5540631868704D+02-0.5539909021458D+02 +-0.5539177355557D+02-0.5538436763852D+02-0.5537687137931D+02-0.5536928368102D+02 +-0.5536160343383D+02-0.5535382951490D+02-0.5534596078819D+02-0.5533799610437D+02 +-0.5532993430065D+02-0.5532177420068D+02-0.5531351461437D+02-0.5530515433781D+02 +-0.5529669215307D+02-0.5528812682811D+02-0.5527945711660D+02-0.5527068175784D+02 +-0.5526179947656D+02-0.5525280898282D+02-0.5524370897184D+02-0.5523449812390D+02 +-0.5522517510415D+02-0.5521573856252D+02-0.5520618713354D+02-0.5519651943623D+02 +-0.5518673407393D+02-0.5517682963418D+02-0.5516680468857D+02-0.5515665779261D+02 +-0.5514638748558D+02-0.5513599229039D+02-0.5512547071344D+02-0.5511482124450D+02 +-0.5510404235654D+02-0.5509313250562D+02-0.5508209013072D+02-0.5507091365363D+02 +-0.5505960147883D+02-0.5504815199328D+02-0.5503656356639D+02-0.5502483454978D+02 +-0.5501296327725D+02-0.5500094806454D+02-0.5498878720932D+02-0.5497647899093D+02 +-0.5496402167037D+02-0.5495141349010D+02-0.5493865267393D+02-0.5492573742693D+02 +-0.5491266593526D+02-0.5489943636607D+02-0.5488604686741D+02-0.5487249556806D+02 +-0.5485878057746D+02-0.5484489998559D+02-0.5483085186284D+02-0.5481663425993D+02 +-0.5480224520778D+02-0.5478768271745D+02-0.5477294478000D+02-0.5475802936640D+02 +-0.5474293442747D+02-0.5472765789376D+02-0.5471219767547D+02-0.5469655166237D+02 +-0.5468071772374D+02-0.5466469370826D+02-0.5464847744398D+02-0.5463206673821D+02 +-0.5461545937750D+02-0.5459865312754D+02-0.5458164573314D+02-0.5456443491819D+02 +-0.5454701838555D+02-0.5452939381709D+02-0.5451155887362D+02-0.5449351119486D+02 +-0.5447524839940D+02-0.5445676808473D+02-0.5443806782719D+02-0.5441914518197D+02 +-0.5439999768311D+02-0.5438062284352D+02-0.5436101815497D+02-0.5434118108813D+02 +-0.5432110909257D+02-0.5430079959683D+02-0.5428025000841D+02-0.5425945771386D+02 +-0.5423842007881D+02-0.5421713444802D+02-0.5419559814548D+02-0.5417380847446D+02 +-0.5415176271762D+02-0.5412945813704D+02-0.5410689197441D+02-0.5408406145106D+02 +-0.5406096376811D+02-0.5403759610659D+02-0.5401395562757D+02-0.5399003947230D+02 +-0.5396584476237D+02-0.5394136859984D+02-0.5391660806744D+02-0.5389156022873D+02 +-0.5386622212829D+02-0.5384059079191D+02-0.5381466322677D+02-0.5378843642172D+02 +-0.5376190734741D+02-0.5373507295659D+02-0.5370793018434D+02-0.5368047594828D+02 +-0.5365270714885D+02-0.5362462066960D+02-0.5359621337743D+02-0.5356748212288D+02 +-0.5353842374046D+02-0.5350903504888D+02-0.5347931285144D+02-0.5344925393630D+02 +-0.5341885507681D+02-0.5338811303186D+02-0.5335702454624D+02-0.5332558635094D+02 +-0.5329379516354D+02-0.5326164768860D+02-0.5322914061797D+02-0.5319627063125D+02 +-0.5316303439608D+02-0.5312942856863D+02-0.5309544979392D+02-0.5306109470628D+02 +-0.5302635992970D+02-0.5299124207831D+02-0.5295573775673D+02-0.5291984356054D+02 +-0.5288355607667D+02-0.5284687188384D+02-0.5280978755298D+02-0.5277229964766D+02 +-0.5273440472453D+02-0.5269609933373D+02-0.5265738001932D+02-0.5261824331972D+02 +-0.5257868576812D+02-0.5253870389290D+02-0.5249829421807D+02-0.5245745326365D+02 +-0.5241617754611D+02-0.5237446357873D+02-0.5233230787204D+02-0.5228970693419D+02 +-0.5224665727130D+02-0.5220315538787D+02-0.5215919778710D+02-0.5211478097128D+02 +-0.5206990144206D+02-0.5202455570084D+02-0.5197874024901D+02-0.5193245158829D+02 +-0.5188568622097D+02-0.5183844065017D+02-0.5179071138010D+02-0.5174249491623D+02 +-0.5169378776554D+02-0.5164458643665D+02-0.5159488744002D+02-0.5154468728803D+02 +-0.5149398249511D+02-0.5144276957782D+02-0.5139104505491D+02-0.5133880544734D+02 +-0.5128604727827D+02-0.5123276707308D+02-0.5117896135925D+02-0.5112462666634D+02 +-0.5106975952582D+02-0.5101435647098D+02-0.5095841403675D+02-0.5090192875946D+02 +-0.5084489717665D+02-0.5078731582681D+02-0.5072918124908D+02-0.5067048998292D+02 +-0.5061123856779D+02-0.5055142354279D+02-0.5049104144620D+02-0.5043008881515D+02 +-0.5036856218507D+02-0.5030645808930D+02-0.5024377305858D+02-0.5018050362052D+02 +-0.5011664629908D+02-0.5005219761407D+02-0.4998715408056D+02-0.4992151220832D+02 +-0.4985526850129D+02-0.4978841945701D+02-0.4972096156604D+02-0.4965289131141D+02 +-0.4958420516810D+02-0.4951489960252D+02-0.4944497107197D+02-0.4937441602420D+02 +-0.4930323089695D+02-0.4923141211759D+02-0.4915895610268D+02-0.4908585925778D+02 +-0.4901211797712D+02-0.4893772864346D+02-0.4886268762803D+02-0.4878699129045D+02 +-0.4871063597888D+02-0.4863361803016D+02-0.4855593377015D+02-0.4847757951410D+02 +-0.4839855156726D+02-0.4831884622552D+02-0.4823845977626D+02-0.4815738849939D+02 +-0.4807562866848D+02-0.4799317655212D+02-0.4791002841550D+02-0.4782618052209D+02 +-0.4774162913567D+02-0.4765637052241D+02-0.4757040095335D+02-0.4748371670698D+02 +-0.4739631407212D+02-0.4730818935102D+02-0.4721933886278D+02-0.4712975894691D+02 +-0.4703944596723D+02-0.4694839631600D+02-0.4685660641834D+02-0.4676407273682D+02 +-0.4667079177636D+02-0.4657676008937D+02-0.4648197428108D+02-0.4638643101510D+02 +-0.4629012701915D+02-0.4619305909101D+02-0.4609522410459D+02-0.4599661901607D+02 +-0.4589724087022D+02-0.4579708680668D+02-0.4569615406630D+02-0.4559443999740D+02 +-0.4549194206199D+02-0.4538865784177D+02-0.4528458504399D+02-0.4517972150698D+02 +-0.4507406520540D+02-0.4496761425501D+02-0.4486036691705D+02-0.4475232160192D+02 +-0.4464347687237D+02-0.4453383144587D+02-0.4442338419621D+02-0.4431213415428D+02 +-0.4420008050780D+02-0.4408722260015D+02-0.4397355992808D+02-0.4385909213828D+02 +-0.4374381902287D+02-0.4362774051358D+02-0.4351085667484D+02-0.4339316769562D+02 +-0.4327467388008D+02-0.4315537563712D+02-0.4303527346882D+02-0.4291436795791D+02 +-0.4279265975435D+02-0.4267014956115D+02-0.4254683811959D+02-0.4242272619403D+02 +-0.4229781455643D+02-0.4217210397094D+02-0.4204559517861D+02-0.4191828888261D+02 +-0.4179018573409D+02-0.4166128631907D+02-0.4153159114642D+02-0.4140110063742D+02 +-0.4126981511689D+02-0.4113773480625D+02-0.4100485981874D+02-0.4087119015686D+02 +-0.4073672571219D+02-0.4060146626783D+02-0.4046541150335D+02-0.4032856100241D+02 +-0.4019091426302D+02-0.4005247071036D+02-0.3991322971206D+02-0.3977319059597D+02 +-0.3963235266998D+02-0.3949071524404D+02-0.3934827765385D+02-0.3920503928618D+02 +-0.3906099960547D+02-0.3891615818143D+02-0.3877051471740D+02-0.3862406907911D+02 +-0.3847682132352D+02-0.3832877172761D+02-0.3817992081653D+02-0.3803026939118D+02 +-0.3787981855460D+02-0.3772856973724D+02-0.3757652472061D+02-0.3742368565925D+02 +-0.3727005510078D+02-0.3711563600380D+02-0.3696043175359D+02-0.3680444617541D+02 +-0.3664768354523D+02-0.3649014859800D+02-0.3633184653310D+02-0.3617278301720D+02 +-0.3601296418430D+02-0.3585239663304D+02-0.3569108742127D+02-0.3552904405781D+02 +-0.3536627449158D+02-0.3520278709806D+02-0.3503859066311D+02-0.3487369436430D+02 +-0.3470810774986D+02-0.3454184071521D+02-0.3437490347732D+02-0.3420730654701D+02 +-0.3403906069918D+02-0.3387017694133D+02-0.3370066648035D+02-0.3353054068782D+02 +-0.3335981106397D+02-0.3318848920053D+02-0.3301658674253D+02-0.3284411534944D+02 +-0.3267108665570D+02-0.3249751223095D+02-0.3232340354009D+02-0.3214877190357D+02 +-0.3197362845796D+02-0.3179798411718D+02-0.3162184953461D+02-0.3144523506634D+02 +-0.3126815073583D+02-0.3109060620023D+02-0.3091261071875D+02-0.3073417312317D+02 +-0.3055530179103D+02-0.3037600462151D+02-0.3019628901454D+02-0.3001616185329D+02 +-0.2983562949033D+02-0.2965469773781D+02-0.2947337186191D+02-0.2929165658175D+02 +-0.2910955607320D+02-0.2892707397756D+02-0.2874421341569D+02-0.2856097700739D+02 +-0.2837736689659D+02-0.2819338478218D+02-0.2800903195486D+02-0.2782430933984D+02 +-0.2763921754559D+02-0.2745375691855D+02-0.2726792760362D+02-0.2708172961044D+02 +-0.2689516288498D+02-0.2670822738635D+02-0.2652092316815D+02-0.2633325046396D+02 +-0.2614520977622D+02-0.2595680196774D+02-0.2576802835473D+02-0.2557889080049D+02 +-0.2538939180826D+02-0.2519953461184D+02-0.2500932326245D+02-0.2481876271008D+02 +-0.2462785887723D+02-0.2443661872323D+02-0.2424505029696D+02-0.2405316277560D+02 +-0.2386096648750D+02-0.2366847291679D+02-0.2347569468796D+02-0.2328264552846D+02 +-0.2308934020812D+02-0.2289579445420D+02-0.2270202484198D+02-0.2250804866092D+02 +-0.2231388375761D+02-0.2211954835752D+02-0.2192506086830D+02-0.2173043966863D+02 +-0.2153570288720D+02-0.2134086817757D+02-0.2114595249509D+02-0.2095097188272D+02 +-0.2075594127260D+02-0.2056087431058D+02-0.2036578321006D+02-0.2017067864112D+02 +-0.1997556965995D+02-0.1978046368197D+02-0.1958536650106D+02-0.1939028235538D+02 +-0.1919521403879D+02-0.1900016305519D+02-0.1880512981199D+02-0.1861011384716D+02 +-0.1841511408395D+02-0.1822012910630D+02-0.1802515744779D+02-0.1783019788702D+02 +-0.1763524974230D+02-0.1744031315933D+02-0.1724538938602D+02-0.1705048102940D+02 +-0.1685559229049D+02-0.1666072917392D+02-0.1646589966993D+02-0.1627111390724D+02 +-0.1607638427606D+02-0.1588172552102D+02-0.1568715480479D+02-0.1549269174309D+02 +-0.1529835841253D+02-0.1510417933299D+02-0.1491018142621D+02-0.1471639395266D+02 +-0.1452284842865D+02-0.1432957852586D+02-0.1413661995505D+02-0.1394401033627D+02 +-0.1375178905724D+02-0.1355999712183D+02-0.1336867699032D+02-0.1317787241319D+02 +-0.1298762825984D+02-0.1279799034375D+02-0.1260900524540D+02-0.1242072013420D+02 +-0.1223318259054D+02-0.1204644042908D+02-0.1186054152423D+02-0.1167553363867D+02 +-0.1149146425587D+02-0.1130838041720D+02-0.1112632856448D+02-0.1094535438846D+02 +-0.1076550268392D+02-0.1058681721177D+02-0.1040934056873D+02-0.1023311406489D+02 +-0.1005817760953D+02-0.9884569605544D+01-0.9712326852587D+01-0.9541484459289D+01 +-0.9372075764575D+01-0.9204132268253D+01-0.9037683570901D+01-0.8872757323101D+01 +-0.8709379183953D+01-0.8547572788856D+01-0.8387359726405D+01-0.8228759524304D+01 +-0.8071789644101D+01-0.7916465484544D+01-0.7762800393319D+01-0.7610805686908D+01 +-0.7460490678270D+01-0.7311862712022D+01-0.7164927206791D+01-0.7019687704352D+01 +-0.6876145925199D+01-0.6734301830125D+01-0.6594153687414D+01-0.6455698145212D+01 +-0.6318930308652D+01-0.6183843821276D+01-0.6050430950313D+01-0.5918682675368D+01 +-0.5788588780041D+01-0.5660137946045D+01-0.5533317849361D+01-0.5408115257962D+01 +-0.5284516130685D+01-0.5162505716779D+01-0.5042068655722D+01-0.4923189076852D+01 +-0.4805850698421D+01-0.4690036925640D+01-0.4575730947334D+01-0.4462915830827D+01 +-0.4351574614669D+01-0.4241690398868D+01-0.4133246432276D+01-0.4026226196815D+01 +-0.3920613488226D+01-0.3816392493069D+01-0.3713547861689D+01-0.3612064776930D+01 +-0.3511929018356D+01-0.3413127021793D+01-0.3315645934040D+01-0.3219473662593D+01 +-0.3124598920313D+01-0.3031011264957D+01-0.2938701133564D+01-0.2847659871728D+01 +-0.2757879757826D+01-0.2669354022343D+01-0.2582076862471D+01-0.2496043452246D+01 +-0.2411249948518D+01-0.2327693493141D+01-0.2245372211828D+01-0.2164285210177D+01 +-0.2084432567437D+01-0.2005815328668D+01-0.1928435495965D+01-0.1852296019503D+01 +-0.1777400789183D+01-0.1703754627679D+01-0.1631363285732D+01-0.1560233440503D+01 +-0.1490372697814D+01-0.1421789599058D+01-0.1354493633521D+01-0.1288495256795D+01 +-0.1223805915890D+01-0.1160438081548D+01-0.1098405288176D+01-0.1037722181706D+01 +-0.9784045755631D+00-0.9204695148117D+00-0.8639353484481D+00-0.8088218096835D+00 +-0.7551501039652D+00-0.7029430044020D+00-0.6522249541781D+00-0.6030221754824D+00 +-0.5553627844364D+00-0.5092769114826D+00-0.4647968266775D+00-0.4219570693466D+00 +-0.3807945815740D+00-0.3413488450357D+00-0.3036620207199D+00-0.2677790911361D+00 +-0.2337480046571D+00-0.2016198217026D+00-0.1714488625154D+00-0.1432928563448D+00 +-0.1172130918805D+00-0.9327456882744D-01-0.7154615052978D-01-0.5210071756772D-01 +-0.3501532224994D-01-0.2037134390357D-01-0.8254644831309D-02 0.1244273247397D-02 + 0.8030112529998D-02 0.1200270874866D-01 + 0.0000000000000D+00 + 1010 0.5296171781360D+01 + 0.2822824519205D-04 0.2889783246181D-04 0.2958329936301D-04 0.3028502236325D-04 + 0.3100338685067D-04 0.3173878734513D-04 0.3249162771444D-04 0.3326232139562D-04 + 0.3405129162154D-04 0.3485897165277D-04 0.3568580501496D-04 0.3653224574191D-04 + 0.3739875862424D-04 0.3828581946408D-04 0.3919391533570D-04 0.4012354485232D-04 + 0.4107521843922D-04 0.4204945861334D-04 0.4304680026943D-04 0.4406779097302D-04 + 0.4511299126028D-04 0.4618297494497D-04 0.4727832943266D-04 0.4839965604236D-04 + 0.4954757033575D-04 0.5072270245419D-04 0.5192569746371D-04 0.5315721570812D-04 + 0.5441793317049D-04 0.5570854184313D-04 0.5702975010637D-04 0.5838228311623D-04 + 0.5976688320128D-04 0.6118431026884D-04 0.6263534222080D-04 0.6412077537929D-04 + 0.6564142492231D-04 0.6719812532972D-04 0.6879173083975D-04 0.7042311591627D-04 + 0.7209317572709D-04 0.7380282663357D-04 0.7555300669177D-04 0.7734467616542D-04 + 0.7917881805103D-04 0.8105643861536D-04 0.8297856794560D-04 0.8494626051249D-04 + 0.8696059574678D-04 0.8902267862924D-04 0.9113364029466D-04 0.9329463864996D-04 + 0.9550685900708D-04 0.9777151473062D-04 0.1000898479008D-03 0.1024631299922D-03 + 0.1048926625682D-03 0.1073797779921D-03 0.1099258401549D-03 0.1125322452201D-03 + 0.1152004223863D-03 0.1179318346676D-03 0.1207279796923D-03 0.1235903905211D-03 + 0.1265206364831D-03 0.1295203240335D-03 0.1325910976298D-03 0.1357346406293D-03 + 0.1389526762082D-03 0.1422469683015D-03 0.1456193225653D-03 0.1490715873626D-03 + 0.1526056547706D-03 0.1562234616137D-03 0.1599269905192D-03 0.1637182709988D-03 + 0.1675993805550D-03 0.1715724458141D-03 0.1756396436854D-03 0.1798032025479D-03 + 0.1840654034649D-03 0.1884285814268D-03 0.1928951266242D-03 0.1974674857493D-03 + 0.2021481633298D-03 0.2069397230925D-03 0.2118447893599D-03 0.2168660484796D-03 + 0.2220062502866D-03 0.2272682096011D-03 0.2326548077607D-03 0.2381689941885D-03 + 0.2438137879986D-03 0.2495922796393D-03 0.2555076325741D-03 0.2615630850034D-03 + 0.2677619516256D-03 0.2741076254399D-03 0.2806035795920D-03 0.2872533692620D-03 + 0.2940606335978D-03 0.3010290976928D-03 0.3081625746112D-03 0.3154649674595D-03 + 0.3229402715076D-03 0.3305925763595D-03 0.3384260681742D-03 0.3464450319401D-03 + 0.3546538538009D-03 0.3630570234378D-03 0.3716591365061D-03 0.3804648971301D-03 + 0.3894791204556D-03 0.3987067352627D-03 0.4081527866396D-03 0.4178224387190D-03 + 0.4277209774787D-03 0.4378538136078D-03 0.4482264854402D-03 0.4588446619559D-03 + 0.4697141458539D-03 0.4808408766956D-03 0.4922309341232D-03 0.5038905411518D-03 + 0.5158260675399D-03 0.5280440332381D-03 0.5405511119180D-03 0.5533541345848D-03 + 0.5664600932728D-03 0.5798761448289D-03 0.5936096147829D-03 0.6076680013093D-03 + 0.6220589792814D-03 0.6367904044198D-03 0.6518703175377D-03 0.6673069488859D-03 + 0.6831087225984D-03 0.6992842612423D-03 0.7158423904735D-03 0.7327921438012D-03 + 0.7501427674634D-03 0.7679037254157D-03 0.7860847044373D-03 0.8046956193548D-03 + 0.8237466183886D-03 0.8432480886234D-03 0.8632106616061D-03 0.8836452190741D-03 + 0.9045628988169D-03 0.9259751006740D-03 0.9478934926726D-03 0.9703300173075D-03 + 0.9932968979678D-03 0.1016806645512D-02 0.1040872064997D-02 0.1065506262562D-02 + 0.1090722652474D-02 0.1116534964336D-02 0.1142957250462D-02 0.1170003893425D-02 + 0.1197689613777D-02 0.1226029477950D-02 0.1255038906342D-02 0.1284733681588D-02 + 0.1315129957023D-02 0.1346244265340D-02 0.1378093527450D-02 0.1410695061551D-02 + 0.1444066592398D-02 0.1478226260794D-02 0.1513192633301D-02 0.1548984712169D-02 + 0.1585621945504D-02 0.1623124237664D-02 0.1661511959895D-02 0.1700805961221D-02 + 0.1741027579570D-02 0.1782198653175D-02 0.1824341532224D-02 0.1867479090785D-02 + 0.1911634739006D-02 0.1956832435592D-02 0.2003096700574D-02 0.2050452628370D-02 + 0.2098925901149D-02 0.2148542802495D-02 0.2199330231399D-02 0.2251315716556D-02 + 0.2304527431005D-02 0.2358994207096D-02 0.2414745551808D-02 0.2471811662411D-02 + 0.2530223442494D-02 0.2590012518355D-02 0.2651211255772D-02 0.2713852777158D-02 + 0.2777970979100D-02 0.2843600550315D-02 0.2910776990000D-02 0.2979536626620D-02 + 0.3049916637105D-02 0.3121955066505D-02 0.3195690848083D-02 0.3271163823867D-02 + 0.3348414765677D-02 0.3427485396625D-02 0.3508418413110D-02 0.3591257507311D-02 + 0.3676047390196D-02 0.3762833815049D-02 0.3851663601538D-02 0.3942584660326D-02 + 0.4035646018247D-02 0.4130897844043D-02 0.4228391474702D-02 0.4328179442374D-02 + 0.4430315501914D-02 0.4534854659040D-02 0.4641853199130D-02 0.4751368716673D-02 + 0.4863460145386D-02 0.4978187789008D-02 0.5095613352797D-02 0.5215799975731D-02 + 0.5338812263436D-02 0.5464716321864D-02 0.5593579791722D-02 0.5725471883680D-02 + 0.5860463414369D-02 0.5998626843191D-02 0.6140036309957D-02 0.6284767673364D-02 + 0.6432898550344D-02 0.6584508356291D-02 0.6739678346185D-02 0.6898491656648D-02 + 0.7061033348932D-02 0.7227390452868D-02 0.7397652011803D-02 0.7571909128533D-02 + 0.7750255012269D-02 0.7932785026640D-02 0.8119596738771D-02 0.8310789969451D-02 + 0.8506466844420D-02 0.8706731846786D-02 0.8911691870617D-02 0.9121456275712D-02 + 0.9336136943589D-02 0.9555848334711D-02 0.9780707546982D-02 0.1001083437552D-01 + 0.1024635137379D-01 0.1048738391601D-01 0.1073406026100D-01 0.1098651161744D-01 + 0.1124487221049D-01 0.1150927934994D-01 0.1177987349983D-01 0.1205679834961D-01 + 0.1234020088683D-01 0.1263023147143D-01 0.1292704391170D-01 0.1323079554181D-01 + 0.1354164730109D-01 0.1385976381506D-01 0.1418531347810D-01 0.1451846853810D-01 + 0.1485940518275D-01 0.1520830362787D-01 0.1556534820753D-01 0.1593072746619D-01 + 0.1630463425277D-01 0.1668726581683D-01 0.1707882390671D-01 0.1747951486989D-01 + 0.1788954975542D-01 0.1830914441860D-01 0.1873851962788D-01 0.1917790117404D-01 + 0.1962751998169D-01 0.2008761222322D-01 0.2055841943503D-01 0.2104018863642D-01 + 0.2153317245082D-01 0.2203762922971D-01 0.2255382317911D-01 0.2308202448875D-01 + 0.2362250946397D-01 0.2417556066041D-01 0.2474146702144D-01 0.2532052401864D-01 + 0.2591303379505D-01 0.2651930531152D-01 0.2713965449610D-01 0.2777440439646D-01 + 0.2842388533561D-01 0.2908843507074D-01 0.2976839895540D-01 0.3046413010502D-01 + 0.3117598956586D-01 0.3190434648737D-01 0.3264957829822D-01 0.3341207088579D-01 + 0.3419221877942D-01 0.3499042533739D-01 0.3580710293768D-01 0.3664267317264D-01 + 0.3749756704755D-01 0.3837222518325D-01 0.3926709802285D-01 0.4018264604255D-01 + 0.4111933996677D-01 0.4207766098750D-01 0.4305810098809D-01 0.4406116277151D-01 + 0.4508736029307D-01 0.4613721889781D-01 0.4721127556259D-01 0.4831007914287D-01 + 0.4943419062445D-01 0.5058418338003D-01 0.5176064343088D-01 0.5296416971348D-01 + 0.5419537435149D-01 0.5545488293285D-01 0.5674333479228D-01 0.5806138329921D-01 + 0.5940969615119D-01 0.6078895567298D-01 0.6219985912120D-01 0.6364311899491D-01 + 0.6511946335190D-01 0.6662963613105D-01 0.6817439748069D-01 0.6975452409303D-01 + 0.7137080954495D-01 0.7302406464494D-01 0.7471511778656D-01 0.7644481530832D-01 + 0.7821402186018D-01 0.8002362077672D-01 0.8187451445702D-01 0.8376762475148D-01 + 0.8570389335552D-01 0.8768428221030D-01 0.8970977391065D-01 0.9178137212012D-01 + 0.9390010199340D-01 0.9606701060608D-01 0.9828316739192D-01 0.1005496645877D+00 + 0.1028676176858D+00 0.1052381658941D+00 0.1076624726045D+00 0.1101417258685D+00 + 0.1126771388816D+00 0.1152699504747D+00 0.1179214256149D+00 0.1206328559135D+00 + 0.1234055601432D+00 0.1262408847626D+00 0.1291402044504D+00 0.1321049226469D+00 + 0.1351364721052D+00 0.1382363154503D+00 0.1414059457472D+00 0.1446468870780D+00 + 0.1479606951270D+00 0.1513489577760D+00 0.1548132957075D+00 0.1583553630171D+00 + 0.1619768478352D+00 0.1656794729578D+00 0.1694649964860D+00 0.1733352124747D+00 + 0.1772919515910D+00 0.1813370817812D+00 0.1854725089471D+00 0.1897001776316D+00 + 0.1940220717136D+00 0.1984402151117D+00 0.2029566724976D+00 0.2075735500181D+00 + 0.2122929960268D+00 0.2171172018243D+00 0.2220484024079D+00 0.2270888772304D+00 + 0.2322409509672D+00 0.2375069942931D+00 0.2428894246669D+00 0.2483907071261D+00 + 0.2540133550885D+00 0.2597599311640D+00 0.2656330479734D+00 0.2716353689762D+00 + 0.2777696093062D+00 0.2840385366154D+00 0.2904449719248D+00 0.2969917904840D+00 + 0.3036819226371D+00 0.3105183546962D+00 0.3175041298219D+00 0.3246423489100D+00 + 0.3319361714854D+00 0.3393888166013D+00 0.3470035637445D+00 0.3547837537464D+00 + 0.3627327896988D+00 0.3708541378746D+00 0.3791513286530D+00 0.3876279574486D+00 + 0.3962876856439D+00 0.4051342415250D+00 0.4141714212201D+00 0.4234030896398D+00 + 0.4328331814193D+00 0.4424657018612D+00 0.4523047278791D+00 0.4623544089409D+00 + 0.4726189680114D+00 0.4831027024930D+00 0.4938099851648D+00 0.5047452651182D+00 + 0.5159130686891D+00 0.5273180003855D+00 0.5389647438097D+00 0.5508580625740D+00 + 0.5630028012101D+00 0.5754038860692D+00 0.5880663262136D+00 0.6009952142984D+00 + 0.6141957274410D+00 0.6276731280796D+00 0.6414327648164D+00 0.6554800732480D+00 + 0.6698205767780D+00 0.6844598874133D+00 0.6994037065412D+00 0.7146578256871D+00 + 0.7302281272494D+00 0.7461205852121D+00 0.7623412658331D+00 0.7788963283047D+00 + 0.7957920253879D+00 0.8130347040155D+00 0.8306308058644D+00 0.8485868678941D+00 + 0.8669095228501D+00 0.8856054997299D+00 0.9046816242091D+00 0.9241448190265D+00 + 0.9440021043255D+00 0.9642605979488D+00 0.9849275156853D+00 0.1006010171466D+01 + 0.1027515977508D+01 0.1049452444399D+01 0.1071827181128D+01 0.1094647895051D+01 + 0.1117922391797D+01 0.1141658575102D+01 0.1165864446577D+01 0.1190548105404D+01 + 0.1215717747950D+01 0.1241381667313D+01 0.1267548252772D+01 0.1294225989165D+01 + 0.1321423456166D+01 0.1349149327479D+01 0.1377412369929D+01 0.1406221442459D+01 + 0.1435585495017D+01 0.1465513567338D+01 0.1496014787621D+01 0.1527098371080D+01 + 0.1558773618380D+01 0.1591049913952D+01 0.1623936724178D+01 0.1657443595440D+01 + 0.1691580152037D+01 0.1726356093960D+01 0.1761781194517D+01 0.1797865297813D+01 + 0.1834618316070D+01 0.1872050226788D+01 0.1910171069743D+01 0.1948990943811D+01 + 0.1988520003621D+01 0.2028768456024D+01 0.2069746556376D+01 0.2111464604636D+01 + 0.2153932941261D+01 0.2197161942902D+01 0.2241162017896D+01 0.2285943601543D+01 + 0.2331517151160D+01 0.2377893140927D+01 0.2425082056486D+01 0.2473094389318D+01 + 0.2521940630872D+01 0.2571631266460D+01 0.2622176768886D+01 0.2673587591827D+01 + 0.2725874162954D+01 0.2779046876777D+01 0.2833116087225D+01 0.2888092099942D+01 + 0.2943985164297D+01 0.3000805465116D+01 0.3058563114101D+01 0.3117268140969D+01 + 0.3176930484270D+01 0.3237559981903D+01 0.3299166361319D+01 0.3361759229395D+01 + 0.3425348061997D+01 0.3489942193206D+01 0.3555550804215D+01 0.3622182911885D+01 + 0.3689847356971D+01 0.3758552791996D+01 0.3828307668779D+01 0.3899120225620D+01 + 0.3970998474126D+01 0.4043950185686D+01 0.4117982877589D+01 0.4193103798786D+01 + 0.4269319915294D+01 0.4346637895233D+01 0.4425064093515D+01 0.4504604536165D+01 + 0.4585264904286D+01 0.4667050517669D+01 0.4749966318045D+01 0.4834016851984D+01 + 0.4919206253446D+01 0.5005538225985D+01 0.5093016024611D+01 0.5181642437318D+01 + 0.5271419766278D+01 0.5362349808716D+01 0.5454433837463D+01 0.5547672581208D+01 + 0.5642066204445D+01 0.5737614287139D+01 0.5834315804111D+01 0.5932169104160D+01 + 0.6031171888929D+01 0.6131321191546D+01 0.6232613355032D+01 0.6335044010510D+01 + 0.6438608055229D+01 0.6543299630414D+01 0.6649112098981D+01 0.6756038023114D+01 + 0.6864069141747D+01 0.6973196347971D+01 0.7083409666383D+01 0.7194698230416D+01 + 0.7307050259672D+01 0.7420453037292D+01 0.7534892887396D+01 0.7650355152615D+01 + 0.7766824171772D+01 0.7884283257731D+01 0.8002714675458D+01 0.8122099620334D+01 + 0.8242418196771D+01 0.8363649397157D+01 0.8485771081194D+01 0.8608759955665D+01 + 0.8732591554684D+01 0.8857240220479D+01 0.8982679084765D+01 0.9108880050751D+01 + 0.9235813775856D+01 0.9363449655169D+01 0.9491755805740D+01 0.9620699051741D+01 + 0.9750244910575D+01 0.9880357579991D+01 0.1001099992628D+02 0.1014213347363D+02 + 0.1027371839465D+02 0.1040571350226D+02 0.1053807624287D+02 0.1067076269106D+02 + 0.1080372754572D+02 0.1093692412784D+02 0.1107030437993D+02 0.1120381886722D+02 + 0.1133741678067D+02 0.1147104594197D+02 0.1160465281044D+02 0.1173818249206D+02 + 0.1187157875074D+02 0.1200478402173D+02 0.1213773942744D+02 0.1227038479568D+02 + 0.1240265868040D+02 0.1253449838503D+02 0.1266583998849D+02 0.1279661837398D+02 + 0.1292676726060D+02 0.1305621923790D+02 0.1318490580344D+02 0.1331275740342D+02 + 0.1343970347648D+02 0.1356567250071D+02 0.1369059204398D+02 0.1381438881762D+02 + 0.1393698873354D+02 0.1405831696483D+02 0.1417829800992D+02 0.1429685576030D+02 + 0.1441391357192D+02 0.1452939434024D+02 0.1464322057906D+02 0.1475531450297D+02 + 0.1486559811372D+02 0.1497399329026D+02 0.1508042188265D+02 0.1518480580966D+02 + 0.1528706716029D+02 0.1538712829897D+02 0.1548491197448D+02 0.1558034143268D+02 + 0.1567334053278D+02 0.1576383386734D+02 0.1585174688565D+02 0.1593700602075D+02 + 0.1601953881969D+02 0.1609927407706D+02 0.1617614197179D+02 0.1625007420681D+02 + 0.1632100415168D+02 0.1638886698797D+02 0.1645359985711D+02 0.1651514201066D+02 + 0.1657343496274D+02 0.1662842264439D+02 0.1668005155967D+02 0.1672827094326D+02 + 0.1677303291919D+02 0.1681429266057D+02 0.1685200854994D+02 0.1688614233993D+02 + 0.1691665931392D+02 0.1694352844637D+02 0.1696672256241D+02 0.1698621849639D+02 + 0.1700199724888D+02 0.1701404414184D+02 0.1702234897147D+02 0.1702690615831D+02 + 0.1702771489409D+02 0.1702477928500D+02 0.1701810849071D+02 0.1700771685880D+02 + 0.1699362405402D+02 0.1697585518194D+02 0.1695444090625D+02 0.1692941755953D+02 + 0.1690082724657D+02 0.1686871793999D+02 0.1683314356737D+02 0.1679416408953D+02 + 0.1675184556924D+02 0.1670626022985D+02 0.1665748650334D+02 0.1660560906714D+02 + 0.1655071886915D+02 0.1649291314053D+02 0.1643229539555D+02 0.1636897541817D+02 + 0.1630306923458D+02 0.1623469907142D+02 0.1616399329905D+02 0.1609108635949D+02 + 0.1601611867848D+02 0.1593923656133D+02 0.1586059207215D+02 0.1578034289600D+02 + 0.1569865218376D+02 0.1561568837929D+02 0.1553162502877D+02 0.1544664057176D+02 + 0.1536091811413D+02 0.1527464518233D+02 0.1518801345931D+02 0.1510121850171D+02 + 0.1501445943862D+02 0.1492793865169D+02 0.1484186143704D+02 0.1475643564890D+02 + 0.1467187132532D+02 0.1458838029633D+02 0.1450617577480D+02 0.1442547193059D+02 + 0.1434648344837D+02 0.1426942506981D+02 0.1419451112074D+02 0.1412195502404D+02 + 0.1405196879902D+02 0.1398476254827D+02 0.1392054393276D+02 0.1385951763648D+02 + 0.1380188482145D+02 0.1374784257438D+02 0.1369758334645D+02 0.1365129438706D+02 + 0.1360915717336D+02 0.1357134683681D+02 0.1353803158842D+02 0.1350937214406D+02 + 0.1348552115172D+02 0.1346662262226D+02 0.1345281136547D+02 0.1344421243323D+02 + 0.1344094057166D+02 0.1344309968408D+02 0.1345078230679D+02 0.1346406909960D+02 + 0.1348302835305D+02 0.1350771551443D+02 0.1353817273446D+02 0.1357442843687D+02 + 0.1361649691268D+02 0.1366437794137D+02 0.1371805644083D+02 0.1377750214812D+02 + 0.1384266933305D+02 0.1391349654631D+02 0.1398990640420D+02 0.1407180541172D+02 + 0.1415908382566D+02 0.1425161555957D+02 0.1434925813195D+02 0.1445185265940D+02 + 0.1455922389600D+02 0.1467118032020D+02 0.1478751427057D+02 0.1490800213120D+02 + 0.1503240456801D+02 0.1516046681637D+02 0.1529191902108D+02 0.1542647662882D+02 + 0.1556384083365D+02 0.1570369907557D+02 0.1584572559217D+02 0.1598958202312D+02 + 0.1613491806712D+02 0.1628137219078D+02 0.1642857238844D+02 0.1657613699223D+02 + 0.1672367553089D+02 0.1687078963612D+02 0.1701707399482D+02 0.1716211734527D+02 + 0.1730550351548D+02 0.1744681250110D+02 0.1758562158085D+02 0.1772150646639D+02 + 0.1785404248420D+02 0.1798280578601D+02 0.1810737458482D+02 0.1822733041292D+02 + 0.1834225939837D+02 0.1845175355609D+02 0.1855541208957D+02 0.1865284269930D+02 + 0.1874366289332D+02 0.1882750129583D+02 0.1890399894920D+02 0.1897281060466D+02 + 0.1903360599728D+02 0.1908607110010D+02 0.1912990935277D+02 0.1916484285982D+02 + 0.1919061355348D+02 0.1920698431627D+02 0.1921374005841D+02 0.1921068874507D+02 + 0.1919766236868D+02 0.1917451786156D+02 0.1914113794408D+02 0.1909743190381D+02 + 0.1904333630123D+02 0.1897881559772D+02 0.1890386270163D+02 0.1881849942858D+02 + 0.1872277687223D+02 0.1861677568219D+02 0.1850060624567D+02 0.1837440877017D+02 + 0.1823835326447D+02 0.1809263941574D+02 0.1793749636083D+02 0.1777318235019D+02 + 0.1759998430327D+02 0.1741821725471D+02 0.1722822369094D+02 0.1703037277735D+02 + 0.1682505947663D+02 0.1661270355939D+02 0.1639374850843D+02 0.1616866031897D+02 + 0.1593792619712D+02 0.1570205315982D+02 0.1546156653970D+02 0.1521700839897D+02 + 0.1496893585699D+02 0.1471791933637D+02 0.1446454073353D+02 0.1420939151941D+02 + 0.1395307077717D+02 0.1369618318368D+02 0.1343933694232D+02 0.1318314167482D+02 + 0.1292820628052D+02 0.1267513677140D+02 0.1242453409198D+02 0.1217699193299D+02 + 0.1193309454846D+02 0.1169341458560D+02 0.1145851093732D+02 0.1122892662708D+02 + 0.1100518673607D+02 0.1078779638239D+02 0.1057723876213D+02 0.1037397326185D+02 + 0.1017843365201D+02 0.9991026370460D+01 0.9812128904881D+01 0.9642088282744D+01 + 0.9481219676764D+01 0.9329805133603D+01 0.9188092432787D+01 0.9056294082397D+01 + 0.8934586457391D+01 0.8823109085782D+01 0.8721964087165D+01 0.8631215767375D+01 + 0.8550890372261D+01 0.8480976002810D+01 0.8421422692992D+01 0.8372142650937D+01 + 0.8333010663158D+01 0.8303864660728D+01 0.8284506445478D+01 0.8274702573430D+01 + 0.8274185391848D+01 0.8282654225481D+01 0.8299776706753D+01 0.8325190243884D+01 + 0.8358503620132D+01 0.8399298716667D+01 0.8447132350811D+01 0.8501538220787D+01 + 0.8562028947442D+01 0.8628098202863D+01 0.8699222915268D+01 0.8774865539087D+01 + 0.8854476378757D+01 0.8937495954385D+01 0.9023357397197D+01 0.9111488862471D+01 + 0.9201315947549D+01 0.9292264102476D+01 0.9383761020866D+01 0.9475238998707D+01 + 0.9566137249056D+01 0.9655904160834D+01 0.9743999490333D+01 0.9829896474488D+01 + 0.9913083855508D+01 0.9993067807050D+01 0.1006937375280D+02 0.1014154806906D+02 + 0.1020915966372D+02 0.1027180142488D+02 0.1032909153308D+02 0.1038067463243D+02 + 0.1042622285627D+02 0.1046543670453D+02 0.1049804577059D+02 0.1052380931646D+02 + 0.1054251669613D+02 0.1055398762792D+02 0.1055807231740D+02 0.1055465143358D+02 + 0.1054363594172D+02 0.1052496679716D+02 0.1049861450499D+02 0.1046457855150D+02 + 0.1042288671361D+02 0.1037359425343D+02 0.1031678300528D+02 0.1025256036316D+02 + 0.1018105817703D+02 0.1010243156652D+02 0.1001685766081D+02 0.9924534273936D+01 + 0.9825678524457D+01 0.9720525408709D+01 0.9609326336809D+01 0.9492347640373D+01 + 0.9369869060848D+01 0.9242182227112D+01 0.9109589130720D+01 0.8972400606903D+01 + 0.8830934829033D+01 0.8685515823901D+01 0.8536472014738D+01 0.8384134798448D+01 + 0.8228837163049D+01 0.8070912350847D+01 0.7910692572339D+01 0.7748507775362D+01 + 0.7584684473451D+01 0.7419544636888D+01 0.7253404649388D+01 0.7086574332872D+01 + 0.6919356042280D+01 0.6752043831885D+01 0.6584922694116D+01 0.6418267871436D+01 + 0.6252344241404D+01 0.6087405774618D+01 0.5923695064890D+01 0.5761442930604D+01 + 0.5600868085898D+01 0.5442176879995D+01 0.5285563102722D+01 0.5131207854011D+01 + 0.4979279474927D+01 0.4829933537589D+01 0.4683312891152D+01 0.4539547760886D+01 + 0.4398755897242D+01 0.4261042771721D+01 0.4126501816245D+01 0.3995214702721D+01 + 0.3867251659417D+01 0.3742671820771D+01 0.3621523607274D+01 0.3503845132071D+01 + 0.3389664630978D+01 0.3279000912680D+01 0.3171863825940D+01 0.3068254740734D+01 + 0.2968167040348D+01 0.2871586621561D+01 0.2778492400178D+01 0.2688856819310D+01 + 0.2602646357930D+01 0.2519822037378D+01 0.2440339923668D+01 0.2364151623572D+01 + 0.2291204772637D+01 0.2221443513462D+01 0.2154808962704D+01 0.2091239665475D+01 + 0.2030672035927D+01 0.1973040783017D+01 0.1918279320582D+01 0.1866320161019D+01 + 0.1817095292022D+01 0.1770536535976D+01 0.1726575891744D+01 0.1685145858731D+01 + 0.1646179743225D+01 0.1609611947159D+01 0.1575378239528D+01 0.1543416010815D+01 + 0.1513664510877D+01 0.1486065070818D+01 0.1460561309478D+01 0.1437099325194D+01 + 0.1415627873589D+01 0.1396098532168D+01 0.1378465852525D+01 0.1362687501014D+01 + 0.1348724388726D+01 0.1336540791621D+01 0.1326104461650D+01 0.1317386729663D+01 + 0.1310362600875D+01 0.1305010843579D+01 0.1301314071737D+01 0.1299258821991D+01 + 0.1298835625499D+01 0.1300039074905D+01 0.1302867886564D+01 0.1307324957980D+01 + 0.1313417420214D+01 0.1321156684759D+01 0.1330558484122D+01 0.1341642905047D+01 + 0.1354434412948D+01 0.1368961865732D+01 0.1385258514734D+01 0.1403361989982D+01 + 0.1423314266440D+01 0.1445161607229D+01 0.1468954479110D+01 0.1494747434709D+01 + 0.1522598955083D+01 0.1552571007110D+01 + 7 1010 + 1 0 -1 -600.89463 + 2 0 -1 -70.72466 + 2 1 1 -61.60959 + 2 1 -2 -60.32800 + 3 0 -1 -6.87027 + 3 1 1 -4.09971 + 3 1 -2 -3.93705 + 0.2785340184202D-04 0.2851410768214D-04 0.2919048253469D-04 0.2988289787369D-04 + 0.3059173397538D-04 0.3131738012660D-04 0.3206023483820D-04 0.3282070606333D-04 + 0.3359921142105D-04 0.3439617842515D-04 0.3521204471837D-04 0.3604725831220D-04 + 0.3690227783234D-04 0.3777757276992D-04 0.3867362373872D-04 0.3959092273844D-04 + 0.4052997342417D-04 0.4149129138230D-04 0.4247540441286D-04 0.4348285281862D-04 + 0.4451418970094D-04 0.4556998126269D-04 0.4665080711827D-04 0.4775726061100D-04 + 0.4888994913794D-04 0.5004949448251D-04 0.5123653315480D-04 0.5245171674008D-04 + 0.5369571225544D-04 0.5496920251490D-04 0.5627288650312D-04 0.5760747975796D-04 + 0.5897371476206D-04 0.6037234134367D-04 0.6180412708697D-04 0.6326985775202D-04 + 0.6477033770468D-04 0.6630639035669D-04 0.6787885861608D-04 0.6948860534826D-04 + 0.7113651384799D-04 0.7282348832249D-04 0.7455045438591D-04 0.7631835956557D-04 + 0.7812817382003D-04 0.7998089006948D-04 0.8187752473860D-04 0.8381911831221D-04 + 0.8580673590410D-04 0.8784146783921D-04 0.8992443024959D-04 0.9205676568438D-04 + 0.9423964373422D-04 0.9647426167037D-04 0.9876184509887D-04 0.1011036486302D-03 + 0.1035009565646D-03 0.1059550835937D-03 0.1084673755188D-03 0.1110392099856D-03 + 0.1136719972366D-03 0.1163671808814D-03 0.1191262386849D-03 0.1219506833741D-03 + 0.1248420634639D-03 0.1278019641022D-03 0.1308320079356D-03 0.1339338559947D-03 + 0.1371092086005D-03 0.1403598062924D-03 0.1436874307777D-03 0.1470939059039D-03 + 0.1505810986532D-03 0.1541509201613D-03 0.1578053267593D-03 0.1615463210410D-03 + 0.1653759529545D-03 0.1692963209202D-03 0.1733095729745D-03 0.1774179079409D-03 + 0.1816235766284D-03 0.1859288830580D-03 0.1903361857186D-03 0.1948478988517D-03 + 0.1994664937668D-03 0.2041945001875D-03 0.2090345076295D-03 0.2139891668108D-03 + 0.2190611910952D-03 0.2242533579694D-03 0.2295685105554D-03 0.2350095591576D-03 + 0.2405794828475D-03 0.2462813310842D-03 0.2521182253740D-03 0.2580933609686D-03 + 0.2642100086033D-03 0.2704715162759D-03 0.2768813110673D-03 0.2834429010052D-03 + 0.2901598769712D-03 0.2970359146527D-03 0.3040747765411D-03 0.3112803139759D-03 + 0.3186564692378D-03 0.3262072776902D-03 0.3339368699714D-03 0.3418494742379D-03 + 0.3499494184602D-03 0.3582411327729D-03 0.3667291518796D-03 0.3754181175140D-03 + 0.3843127809590D-03 0.3934180056247D-03 0.4027387696868D-03 0.4122801687866D-03 + 0.4220474187948D-03 0.4320458586392D-03 0.4422809531995D-03 0.4527582962689D-03 + 0.4634836135862D-03 0.4744627659377D-03 0.4857017523321D-03 0.4972067132502D-03 + 0.5089839339697D-03 0.5210398479686D-03 0.5333810404073D-03 0.5460142516931D-03 + 0.5589463811269D-03 0.5721844906363D-03 0.5857358085948D-03 0.5996077337311D-03 + 0.6138078391289D-03 0.6283438763213D-03 0.6432237794789D-03 0.6584556696979D-03 + 0.6740478593860D-03 0.6900088567529D-03 0.7063473704034D-03 0.7230723140391D-03 + 0.7401928112692D-03 0.7577182005335D-03 0.7756580401398D-03 0.7940221134194D-03 + 0.8128204340020D-03 0.8320632512138D-03 0.8517610556014D-03 0.8719245845836D-03 + 0.8925648282361D-03 0.9136930352089D-03 0.9353207187834D-03 0.9574596630686D-03 + 0.9801219293427D-03 0.1003319862541D-02 0.1027066097896D-02 0.1051373567728D-02 + 0.1076255508403D-02 0.1101725467436D-02 0.1127797310777D-02 0.1154485230254D-02 + 0.1181803751191D-02 0.1209767740208D-02 0.1238392413195D-02 0.1267693343475D-02 + 0.1297686470155D-02 0.1328388106671D-02 0.1359814949527D-02 0.1391984087247D-02 + 0.1424913009518D-02 0.1458619616561D-02 0.1493122228708D-02 0.1528439596202D-02 + 0.1564590909230D-02 0.1601595808179D-02 0.1639474394136D-02 0.1678247239624D-02 + 0.1717935399594D-02 0.1758560422664D-02 0.1800144362618D-02 0.1842709790173D-02 + 0.1886279805019D-02 0.1930878048125D-02 0.1976528714348D-02 0.2023256565311D-02 + 0.2071086942595D-02 0.2120045781222D-02 0.2170159623460D-02 0.2221455632930D-02 + 0.2273961609055D-02 0.2327706001825D-02 0.2382717926912D-02 0.2439027181127D-02 + 0.2496664258235D-02 0.2555660365126D-02 0.2616047438365D-02 0.2677858161116D-02 + 0.2741125980456D-02 0.2805885125085D-02 0.2872170623440D-02 0.2940018322224D-02 + 0.3009464905362D-02 0.3080547913382D-02 0.3153305763251D-02 0.3227777768651D-02 + 0.3304004160725D-02 0.3382026109297D-02 0.3461885744571D-02 0.3543626179330D-02 + 0.3627291531635D-02 0.3712926948044D-02 0.3800578627359D-02 0.3890293844913D-02 + 0.3982120977409D-02 0.4076109528320D-02 0.4172310153870D-02 0.4270774689605D-02 + 0.4371556177560D-02 0.4474708894050D-02 0.4580288378084D-02 0.4688351460423D-02 + 0.4798956293302D-02 0.4912162380814D-02 0.5028030609987D-02 0.5146623282560D-02 + 0.5268004147478D-02 0.5392238434119D-02 0.5519392886268D-02 0.5649535796858D-02 + 0.5782737043492D-02 0.5919068124765D-02 0.6058602197401D-02 0.6201414114224D-02 + 0.6347580462981D-02 0.6497179606037D-02 0.6650291720961D-02 0.6806998842011D-02 + 0.6967384902562D-02 0.7131535778474D-02 0.7299539332426D-02 0.7471485459245D-02 + 0.7647466132249D-02 0.7827575450612D-02 0.8011909687795D-02 0.8200567341047D-02 + 0.8393649182011D-02 0.8591258308451D-02 0.8793500197125D-02 0.9000482757842D-02 + 0.9212316388699D-02 0.9429114032552D-02 0.9650991234736D-02 0.9878066202054D-02 + 0.1011045986307D-01 0.1034829592974D-01 0.1059170096038D-01 0.1084080442403D-01 + 0.1109573876628D-01 0.1135663947642D-01 0.1162364515620D-01 0.1189689759002D-01 + 0.1217654181668D-01 0.1246272620267D-01 0.1275560251709D-01 0.1305532600822D-01 + 0.1336205548173D-01 0.1367595338057D-01 0.1399718586666D-01 0.1432592290430D-01 + 0.1466233834542D-01 0.1500661001667D-01 0.1535891980838D-01 0.1571945376544D-01 + 0.1608840218021D-01 0.1646595968731D-01 0.1685232536057D-01 0.1724770281196D-01 + 0.1765230029275D-01 0.1806633079677D-01 0.1849001216585D-01 0.1892356719764D-01 + 0.1936722375558D-01 0.1982121488130D-01 0.2028577890945D-01 0.2076115958485D-01 + 0.2124760618222D-01 0.2174537362842D-01 0.2225472262728D-01 0.2277591978707D-01 + 0.2330923775061D-01 0.2385495532819D-01 0.2441335763327D-01 0.2498473622093D-01 + 0.2556938922939D-01 0.2616762152431D-01 0.2677974484624D-01 0.2740607796107D-01 + 0.2804694681359D-01 0.2870268468431D-01 0.2937363234946D-01 0.3006013824432D-01 + 0.3076255862992D-01 0.3148125776318D-01 0.3221660807051D-01 0.3296899032502D-01 + 0.3373879382729D-01 0.3452641658989D-01 0.3533226552563D-01 0.3615675663960D-01 + 0.3700031522519D-01 0.3786337606396D-01 0.3874638362967D-01 0.3964979229626D-01 + 0.4057406655017D-01 0.4151968120678D-01 0.4248712163126D-01 0.4347688396374D-01 + 0.4448947534904D-01 0.4552541417087D-01 0.4658523029072D-01 0.4766946529138D-01 + 0.4877867272538D-01 0.4991341836810D-01 0.5107428047602D-01 0.5226185004984D-01 + 0.5347673110283D-01 0.5471954093427D-01 0.5599091040822D-01 0.5729148423764D-01 + 0.5862192127396D-01 0.5998289480211D-01 0.6137509284129D-01 0.6279921845132D-01 + 0.6425599004482D-01 0.6574614170527D-01 0.6727042351107D-01 0.6882960186553D-01 + 0.7042445983313D-01 0.7205579748193D-01 0.7372443223232D-01 0.7543119921217D-01 + 0.7717695161847D-01 0.7896256108558D-01 0.8078891806010D-01 0.8265693218256D-01 + 0.8456753267595D-01 0.8652166874112D-01 0.8852030995935D-01 0.9056444670190D-01 + 0.9265509054686D-01 0.9479327470326D-01 0.9698005444253D-01 0.9921650753751D-01 + 0.1015037347089D+00 0.1038428600797D+00 0.1062350316364D+00 0.1086814216997D+00 + 0.1111832274011D+00 0.1137416711690D+00 0.1163580012222D+00 0.1190334920716D+00 + 0.1217694450301D+00 0.1245671887307D+00 0.1274280796533D+00 0.1303535026593D+00 + 0.1333448715355D+00 0.1364036295457D+00 0.1395312499913D+00 0.1427292367807D+00 + 0.1459991250076D+00 0.1493424815370D+00 0.1527609056014D+00 0.1562560294051D+00 + 0.1598295187376D+00 0.1634830735957D+00 0.1672184288151D+00 0.1710373547107D+00 + 0.1749416577256D+00 0.1789331810901D+00 0.1830138054885D+00 0.1871854497363D+00 + 0.1914500714653D+00 0.1958096678187D+00 0.2002662761545D+00 0.2048219747586D+00 + 0.2094788835665D+00 0.2142391648938D+00 0.2191050241765D+00 0.2240787107192D+00 + 0.2291625184526D+00 0.2343587866997D+00 0.2396699009509D+00 0.2450982936472D+00 + 0.2506464449722D+00 0.2563168836527D+00 0.2621121877671D+00 0.2680349855622D+00 + 0.2740879562780D+00 0.2802738309803D+00 0.2865953934008D+00 0.2930554807849D+00 + 0.2996569847468D+00 0.3064028521313D+00 0.3132960858828D+00 0.3203397459208D+00 + 0.3275369500213D+00 0.3348908747052D+00 0.3424047561314D+00 0.3500818909956D+00 + 0.3579256374349D+00 0.3659394159358D+00 0.3741267102479D+00 0.3824910683005D+00 + 0.3910361031232D+00 0.3997654937696D+00 0.4086829862431D+00 0.4177923944256D+00 + 0.4270976010070D+00 0.4366025584162D+00 0.4463112897522D+00 0.4562278897153D+00 + 0.4663565255375D+00 0.4767014379109D+00 0.4872669419150D+00 0.4980574279401D+00 + 0.5090773626073D+00 0.5203312896844D+00 0.5318238309962D+00 0.5435596873287D+00 + 0.5555436393260D+00 0.5677805483799D+00 0.5802753575095D+00 0.5930330922318D+00 + 0.6060588614203D+00 0.6193578581520D+00 0.6329353605409D+00 0.6467967325567D+00 + 0.6609474248279D+00 0.6753929754279D+00 0.6901390106426D+00 0.7051912457176D+00 + 0.7205554855852D+00 0.7362376255672D+00 0.7522436520550D+00 0.7685796431622D+00 + 0.7852517693505D+00 0.8022662940260D+00 0.8196295741040D+00 0.8373480605417D+00 + 0.8554282988351D+00 0.8738769294794D+00 0.8927006883908D+00 0.9119064072866D+00 + 0.9315010140230D+00 0.9514915328864D+00 0.9718850848386D+00 0.9926888877102D+00 + 0.1013910256342D+01 0.1035556602674D+01 0.1057635435769D+01 0.1080154361788D+01 + 0.1103121083891D+01 0.1126543402079D+01 0.1150429212963D+01 0.1174786509465D+01 + 0.1199623380442D+01 0.1224948010232D+01 0.1250768678118D+01 0.1277093757713D+01 + 0.1303931716247D+01 0.1331291113772D+01 0.1359180602270D+01 0.1387608924656D+01 + 0.1416584913689D+01 0.1446117490770D+01 0.1476215664629D+01 0.1506888529905D+01 + 0.1538145265601D+01 0.1569995133422D+01 0.1602447475981D+01 0.1635511714881D+01 + 0.1669197348655D+01 0.1703513950575D+01 0.1738471166305D+01 0.1774078711419D+01 + 0.1810346368753D+01 0.1847283985609D+01 0.1884901470788D+01 0.1923208791458D+01 + 0.1962215969853D+01 0.2001933079786D+01 0.2042370242985D+01 0.2083537625239D+01 + 0.2125445432348D+01 0.2168103905878D+01 0.2211523318706D+01 0.2255713970367D+01 + 0.2300686182166D+01 0.2346450292094D+01 0.2393016649496D+01 0.2440395609521D+01 + 0.2488597527331D+01 0.2537632752066D+01 0.2587511620563D+01 0.2638244450818D+01 + 0.2689841535197D+01 0.2742313133371D+01 0.2795669464991D+01 0.2849920702080D+01 + 0.2905076961150D+01 0.2961148295029D+01 0.3018144684399D+01 0.3076076029036D+01 + 0.3134952138750D+01 0.3194782724016D+01 0.3255577386298D+01 0.3317345608055D+01 + 0.3380096742422D+01 0.3443840002578D+01 0.3508584450770D+01 0.3574338987021D+01 + 0.3641112337487D+01 0.3708913042482D+01 0.3777749444161D+01 0.3847629673848D+01 + 0.3918561639030D+01 0.3990553009985D+01 0.4063611206069D+01 0.4137743381639D+01 + 0.4212956411633D+01 0.4289256876778D+01 0.4366651048454D+01 0.4445144873197D+01 + 0.4524743956847D+01 0.4605453548337D+01 0.4687278523139D+01 0.4770223366350D+01 + 0.4854292155433D+01 0.4939488542619D+01 0.5025815736962D+01 0.5113276486067D+01 + 0.5201873057478D+01 0.5291607219757D+01 0.5382480223239D+01 0.5474492780478D+01 + 0.5567645046407D+01 0.5661936598194D+01 0.5757366414835D+01 0.5853932856472D+01 + 0.5951633643463D+01 0.6050465835215D+01 0.6150425808789D+01 0.6251509237303D+01 + 0.6353711068143D+01 0.6457025501003D+01 0.6561445965775D+01 0.6666965100307D+01 + 0.6773574728058D+01 0.6881265835667D+01 0.6990028550461D+01 0.7099852117938D+01 + 0.7210724879241D+01 0.7322634248665D+01 0.7435566691212D+01 0.7549507700252D+01 + 0.7664441775291D+01 0.7780352399915D+01 0.7897222019929D+01 0.8015032021729D+01 + 0.8133762710960D+01 0.8253393291496D+01 0.8373901844785D+01 0.8495265309612D+01 + 0.8617459462314D+01 0.8740458897523D+01 0.8864237009456D+01 0.8988765973836D+01 + 0.9114016730477D+01 0.9239958966602D+01 0.9366561100954D+01 0.9493790268747D+01 + 0.9621612307541D+01 0.9749991744084D+01 0.9878891782204D+01 0.1000827429180D+02 + 0.1013809979904D+02 0.1026832747775D+02 0.1039891514221D+02 0.1052981924126D+02 + 0.1066099485396D+02 0.1079239568671D+02 0.1092397407207D+02 0.1105568096925D+02 + 0.1118746596637D+02 0.1131927728462D+02 0.1145106178436D+02 0.1158276497320D+02 + 0.1171433101626D+02 0.1184570274856D+02 0.1197682168974D+02 0.1210762806110D+02 + 0.1223806080511D+02 0.1236805760740D+02 0.1249755492145D+02 0.1262648799583D+02 + 0.1275479090435D+02 0.1288239657894D+02 0.1300923684553D+02 0.1313524246293D+02 + 0.1326034316469D+02 0.1338446770423D+02 0.1350754390310D+02 0.1362949870256D+02 + 0.1375025821844D+02 0.1386974779950D+02 0.1398789208913D+02 0.1410461509064D+02 + 0.1421984023603D+02 0.1433349045844D+02 0.1444548826812D+02 0.1455575583210D+02 + 0.1466421505756D+02 0.1477078767886D+02 0.1487539534827D+02 0.1497795973040D+02 + 0.1507840260035D+02 0.1517664594550D+02 0.1527261207100D+02 0.1536622370884D+02 + 0.1545740413055D+02 0.1554607726334D+02 0.1563216780981D+02 0.1571560137096D+02 + 0.1579630457256D+02 0.1587420519467D+02 0.1594923230433D+02 0.1602131639113D+02 + 0.1609038950565D+02 0.1615638540065D+02 0.1621923967465D+02 0.1627888991798D+02 + 0.1633527586092D+02 0.1638833952376D+02 0.1643802536869D+02 0.1648428045305D+02 + 0.1652705458390D+02 0.1656630047356D+02 0.1660197389579D+02 0.1663403384243D+02 + 0.1666244268003D+02 0.1668716630632D+02 0.1670817430601D+02 0.1672544010570D+02 + 0.1673894112738D+02 0.1674865894030D+02 0.1675457941064D+02 0.1675669284868D+02 + 0.1675499415298D+02 0.1674948295114D+02 0.1674016373668D+02 0.1672704600156D+02 + 0.1671014436391D+02 0.1668947869039D+02 0.1666507421278D+02 0.1663696163815D+02 + 0.1660517725232D+02 0.1656976301581D+02 0.1653076665198D+02 0.1648824172671D+02 + 0.1644224771911D+02 0.1639285008279D+02 0.1634012029699D+02 0.1628413590729D+02 + 0.1622498055509D+02 0.1616274399561D+02 0.1609752210370D+02 0.1602941686704D+02 + 0.1595853636628D+02 0.1588499474152D+02 0.1580891214480D+02 0.1573041467812D+02 + 0.1564963431654D+02 0.1556670881598D+02 0.1548178160535D+02 0.1539500166275D+02 + 0.1530652337524D+02 0.1521650638214D+02 0.1512511540139D+02 0.1503252003898D+02 + 0.1493889458109D+02 0.1484441776900D+02 0.1474927255653D+02 0.1465364585012D+02 + 0.1455772823149D+02 0.1446171366299D+02 0.1436579917576D+02 0.1427018454087D+02 + 0.1417507192373D+02 0.1408066552200D+02 0.1398717118745D+02 0.1389479603211D+02 + 0.1380374801926D+02 0.1371423553979D+02 0.1362646697461D+02 0.1354065024365D+02 + 0.1345699234238D+02 0.1337569886656D+02 0.1329697352617D+02 0.1322101764939D+02 + 0.1314802967783D+02 0.1307820465375D+02 0.1301173370100D+02 0.1294880350020D+02 + 0.1288959576000D+02 0.1283428668540D+02 0.1278304644479D+02 0.1273603863690D+02 + 0.1269341975937D+02 0.1265533868037D+02 0.1262193611484D+02 0.1259334410711D+02 + 0.1256968552140D+02 0.1255107354205D+02 0.1253761118507D+02 0.1252939082284D+02 + 0.1252649372378D+02 0.1252898960853D+02 0.1253693622478D+02 0.1255037894210D+02 + 0.1256935036900D+02 0.1259386999356D+02 0.1262394384964D+02 0.1265956421030D+02 + 0.1270070931003D+02 0.1274734309757D+02 0.1279941502074D+02 0.1285685984498D+02 + 0.1291959750688D+02 0.1298753300425D+02 0.1306055632396D+02 0.1313854240879D+02 + 0.1322135116443D+02 0.1330882750773D+02 0.1340080145694D+02 0.1349708826500D+02 + 0.1359748859637D+02 0.1370178874811D+02 0.1380976091549D+02 0.1392116350264D+02 + 0.1403574147811D+02 0.1415322677562D+02 0.1427333873964D+02 0.1439578461565D+02 + 0.1452026008440D+02 0.1464644983983D+02 0.1477402820956D+02 0.1490265981719D+02 + 0.1503200028511D+02 0.1516169697673D+02 0.1529138977641D+02 0.1542071190561D+02 + 0.1554929077344D+02 0.1567674885958D+02 0.1580270462746D+02 0.1592677346550D+02 + 0.1604856865380D+02 0.1616770235383D+02 0.1628378661842D+02 0.1639643441901D+02 + 0.1650526068740D+02 0.1660988336872D+02 0.1670992448255D+02 0.1680501118868D+02 + 0.1689477685443D+02 0.1697886211968D+02 0.1705691595634D+02 0.1712859671855D+02 + 0.1719357317999D+02 0.1725152555462D+02 0.1730214649714D+02 0.1734514207955D+02 + 0.1738023274006D+02 0.1740715420080D+02 0.1742565835054D+02 0.1743551408907D+02 + 0.1743650812966D+02 0.1742844575624D+02 0.1741115153192D+02 0.1738446995581D+02 + 0.1734826606505D+02 0.1730242597913D+02 0.1724685738378D+02 0.1718148995191D+02 + 0.1710627569922D+02 0.1702118927239D+02 0.1692622816777D+02 0.1682141287906D+02 + 0.1670678697242D+02 0.1658241708779D+02 0.1644839286563D+02 0.1630482679831D+02 + 0.1615185400580D+02 0.1598963193576D+02 0.1581833998801D+02 0.1563817906420D+02 + 0.1544937104340D+02 0.1525215818484D+02 0.1504680245932D+02 0.1483358481120D+02 + 0.1461280435293D+02 0.1438477749491D+02 0.1414983701319D+02 0.1390833105829D+02 + 0.1366062210852D+02 0.1340708587152D+02 0.1314811013800D+02 0.1288409359193D+02 + 0.1261544458182D+02 0.1234257985767D+02 0.1206592327879D+02 0.1178590449752D+02 + 0.1150295762434D+02 0.1121751987976D+02 0.1093003023884D+02 0.1064092807389D+02 + 0.1035065180136D+02 0.1005963753867D+02 0.9768317776923D+01 0.9477120075307D+01 + 0.9186465783082D+01 0.8896768794723D+01 0.8608434343894D+01 0.8321857841603D+01 + 0.8037423763761D+01 0.7755504593077D+01 0.7476459820054D+01 0.7200635007249D+01 + 0.6928360921224D+01 0.6659952735266D+01 0.6395709306625D+01 0.6135912530822D+01 + 0.5880826775438D+01 0.5630698395237D+01 0.5385755330013D+01 0.5146206786027D+01 + 0.4912243001387D+01 0.4684035095222D+01 0.4461734999985D+01 0.4245475475714D+01 + 0.4035370204603D+01 0.3831513963755D+01 0.3633982873565D+01 0.3442834718735D+01 + 0.3258109338554D+01 0.3079829082737D+01 0.2907999328763D+01 0.2742609056415D+01 + 0.2583631474944D+01 0.2431024698124D+01 0.2284732462249D+01 0.2144684882044D+01 + 0.2010799239362D+01 0.1882980799458D+01 0.1761123649683D+01 0.1645111555390D+01 + 0.1534818827944D+01 0.1430111199806D+01 0.1330846701755D+01 0.1236876537487D+01 + 0.1148045950972D+01 0.1064195082183D+01 0.9851598069927D+00 0.9107725573119D+00 + 0.8408631177903D+00 0.7752593956846D+00 0.7137881608016D+00 0.6562757527313D+00 + 0.6025487529079D+00 0.5524346193661D+00 0.5057622823954D+00 0.4623626996302D+00 + 0.4220693694528D+00 0.3847188019147D+00 0.3501509467128D+00 0.3182095780695D+00 + 0.2887426366750D+00 0.2616025291388D+00 0.2366463856743D+00 0.2137362769960D+00 + 0.1927393916459D+00 0.1735281751809D+00 0.1559804328450D+00 0.1399793975192D+00 + 0.1254137648866D+00 0.1121776978703D+00 0.1001708024957D+00 0.8929807740316D-01 + 0.7946983928155D-01 0.7060162651911D-01 0.6261408337169D-01 0.5543282692935D-01 + 0.4898829912634D-01 0.4321560598464D-01 0.3805434621091D-01 0.3344843118226D-01 + 0.2934589825918D-01 0.2569871925711D-01 0.2246260579216D-01 0.1959681309405D-01 + 0.1706394375225D-01 0.1482975273081D-01 0.1286295485558D-01 0.1113503584571D-01 + 0.9620067831213D-02 0.8294530170895D-02 0.7137136261436D-02 0.6128666910118D-02 + 0.5251810730912D-02 0.4491011917634D-02 0.3832325648930D-02 0.3263281288421D-02 + 0.2772753459784D-02 0.2350841000981D-02 0.1988753734313D-02 0.1678706929418D-02 + 0.1413823284626D-02 0.1188042207904D-02 0.9960361417313D-03 0.8331336462107D-03 + 0.6952489311475D-03 0.5788175102173D-03 0.4807376382354D-03 0.3983171854013D-03 + 0.3292255997194D-03 0.2714506100664D-03 0.2232593270890D-03 0.1831634067728D-03 + 0.1498879516635D-03 0.1223438368912D-03 0.9960316193686D-04 0.8087754410534D-04 + 0.6549898557338D-04 0.5290306235499D-04 0.4261420028801D-04 0.3423281994599D-04 + 0.2742414900854D-04 0.2190851690037D-04 0.1745296228452D-04 0.1386399914900D-04 + 0.1098140166364D-04 0.8672881635560D-05 0.6829545209752D-05 0.5362027416189D-05 + 0.4197214245259D-05 0.3275472141140D-05 0.2548314152746D-05 0.1976440498567D-05 + 0.1528099017689D-05 0.1177717933235D-05 0.9047695898414D-06 0.6928293898632D-06 + 0.5287990920661D-06 0.4022680005402D-06 0.3049894091341D-06 0.2304530255955D-06 + 0.1735370259141D-06 0.1302259271294D-06 0.9738265765963D-07 0.7256508692808D-07 + 0.5387888676007D-07 0.3985996881933D-07 0.2938090547940D-07 0.2157672331984D-07 + 0.1578628348679D-07 0.1150615340018D-07 0.8354449182551D-08 0.6042604871217D-08 + 0.4353417967117D-08 0.3124044238278D-08 0.2232879238451D-08 0.1589479448446D-08 + 0.1126850617727D-08 0.7955718522070D-09 0.5593372448345D-09 0.3915874117242D-09 + 0.2729753885002D-09 0.1894684618428D-09 0.1309325583638D-09 0.9008117211333D-10 + 0.6169843581105D-10 0.4206741898666D-10 0.2855135601142D-10 0.1928830544865D-10 + 0.1296955004018D-10 0.8679525993256D-11 0.5780745748372D-11 0.3831463727273D-11 + 0.2527053992745D-11 0.1658475194957D-11 0.1082987768644D-11 0.7036123614708D-12 + 0.4547929610809D-12 0.2924416682304D-12 0.1870616820224D-12 0.1190214872755D-12 + 0.7532446966611D-13 0.4741250871400D-13 0.2968062645137D-13 0.1847804332981D-13 + 0.1144002830340D-13 0.7043328836307D-14 + LSMS: Ni z= 28. xvalws= 4.70383 + 28. 6.55000 10. 0.6793388822543D+00 + -0.1113096740000D+02 0.9564606085049D+00 1010 +-0.5599696171677D+02-0.5599692496198D+02-0.5599688776256D+02-0.5599685011313D+02 +-0.5599681200824D+02-0.5599677344239D+02-0.5599673441000D+02-0.5599669490543D+02 +-0.5599665492295D+02-0.5599661445680D+02-0.5599657350111D+02-0.5599653204997D+02 +-0.5599649009738D+02-0.5599644763728D+02-0.5599640466352D+02-0.5599636116989D+02 +-0.5599631715011D+02-0.5599627259779D+02-0.5599622750651D+02-0.5599618186974D+02 +-0.5599613568088D+02-0.5599608893326D+02-0.5599604162010D+02-0.5599599373458D+02 +-0.5599594526975D+02-0.5599589621862D+02-0.5599584657410D+02-0.5599579632899D+02 +-0.5599574547605D+02-0.5599569400790D+02-0.5599564191711D+02-0.5599558919614D+02 +-0.5599553583738D+02-0.5599548183309D+02-0.5599542717548D+02-0.5599537185664D+02 +-0.5599531586856D+02-0.5599525920315D+02-0.5599520185222D+02-0.5599514380746D+02 +-0.5599508506049D+02-0.5599502560281D+02-0.5599496542581D+02-0.5599490452080D+02 +-0.5599484287897D+02-0.5599478049140D+02-0.5599471734906D+02-0.5599465344283D+02 +-0.5599458876346D+02-0.5599452330160D+02-0.5599445704777D+02-0.5599438999240D+02 +-0.5599432212579D+02-0.5599425343811D+02-0.5599418391944D+02-0.5599411355972D+02 +-0.5599404234877D+02-0.5599397027629D+02-0.5599389733186D+02-0.5599382350492D+02 +-0.5599374878480D+02-0.5599367316069D+02-0.5599359662164D+02-0.5599351915659D+02 +-0.5599344075434D+02-0.5599336140353D+02-0.5599328109269D+02-0.5599319981021D+02 +-0.5599311754432D+02-0.5599303428313D+02-0.5599295001459D+02-0.5599286472650D+02 +-0.5599277840654D+02-0.5599269104221D+02-0.5599260262088D+02-0.5599251312975D+02 +-0.5599242255587D+02-0.5599233088615D+02-0.5599223810732D+02-0.5599214420596D+02 +-0.5599204916848D+02-0.5599195298114D+02-0.5599185563001D+02-0.5599175710101D+02 +-0.5599165737989D+02-0.5599155645221D+02-0.5599145430339D+02-0.5599135091863D+02 +-0.5599124628297D+02-0.5599114038129D+02-0.5599103319824D+02-0.5599092471834D+02 +-0.5599081492587D+02-0.5599070380496D+02-0.5599059133952D+02-0.5599047751328D+02 +-0.5599036230976D+02-0.5599024571231D+02-0.5599012770404D+02-0.5599000826788D+02 +-0.5598988738654D+02-0.5598976504254D+02-0.5598964121817D+02-0.5598951589550D+02 +-0.5598938905640D+02-0.5598926068252D+02-0.5598913075528D+02-0.5598899925587D+02 +-0.5598886616526D+02-0.5598873146418D+02-0.5598859513316D+02-0.5598845715244D+02 +-0.5598831750207D+02-0.5598817616182D+02-0.5598803311125D+02-0.5598788832964D+02 +-0.5598774179604D+02-0.5598759348924D+02-0.5598744338777D+02-0.5598729146991D+02 +-0.5598713771365D+02-0.5598698209676D+02-0.5598682459669D+02-0.5598666519065D+02 +-0.5598650385557D+02-0.5598634056808D+02-0.5598617530454D+02-0.5598600804104D+02 +-0.5598583875335D+02-0.5598566741697D+02-0.5598549400709D+02-0.5598531849861D+02 +-0.5598514086610D+02-0.5598496108386D+02-0.5598477912585D+02-0.5598459496572D+02 +-0.5598440857682D+02-0.5598421993214D+02-0.5598402900437D+02-0.5598383576587D+02 +-0.5598364018865D+02-0.5598344224439D+02-0.5598324190442D+02-0.5598303913973D+02 +-0.5598283392096D+02-0.5598262621838D+02-0.5598241600191D+02-0.5598220324111D+02 +-0.5598198790515D+02-0.5598176996286D+02-0.5598154938265D+02-0.5598132613259D+02 +-0.5598110018033D+02-0.5598087149315D+02-0.5598064003791D+02-0.5598040578108D+02 +-0.5598016868874D+02-0.5597992872652D+02-0.5597968585968D+02-0.5597944005301D+02 +-0.5597919127092D+02-0.5597893947735D+02-0.5597868463581D+02-0.5597842670940D+02 +-0.5597816566072D+02-0.5597790145196D+02-0.5597763404483D+02-0.5597736340058D+02 +-0.5597708947999D+02-0.5597681224336D+02-0.5597653165051D+02-0.5597624766078D+02 +-0.5597596023301D+02-0.5597566932553D+02-0.5597537489619D+02-0.5597507690230D+02 +-0.5597477530068D+02-0.5597447004760D+02-0.5597416109880D+02-0.5597384840951D+02 +-0.5597353193440D+02-0.5597321162757D+02-0.5597288744260D+02-0.5597255933247D+02 +-0.5597222724962D+02-0.5597189114590D+02-0.5597155097256D+02-0.5597120668028D+02 +-0.5597085821914D+02-0.5597050553859D+02-0.5597014858750D+02-0.5596978731408D+02 +-0.5596942166595D+02-0.5596905159008D+02-0.5596867703277D+02-0.5596829793970D+02 +-0.5596791425588D+02-0.5596752592565D+02-0.5596713289268D+02-0.5596673509993D+02 +-0.5596633248971D+02-0.5596592500359D+02-0.5596551258245D+02-0.5596509516645D+02 +-0.5596467269501D+02-0.5596424510683D+02-0.5596381233985D+02-0.5596337433128D+02 +-0.5596293101752D+02-0.5596248233425D+02-0.5596202821634D+02-0.5596156859786D+02 +-0.5596110341211D+02-0.5596063259154D+02-0.5596015606780D+02-0.5595967377171D+02 +-0.5595918563324D+02-0.5595869158152D+02-0.5595819154481D+02-0.5595768545049D+02 +-0.5595717322506D+02-0.5595665479415D+02-0.5595613008244D+02-0.5595559901372D+02 +-0.5595506151087D+02-0.5595451749579D+02-0.5595396688947D+02-0.5595340961190D+02 +-0.5595284558213D+02-0.5595227471820D+02-0.5595169693716D+02-0.5595111215506D+02 +-0.5595052028692D+02-0.5594992124672D+02-0.5594931494739D+02-0.5594870130082D+02 +-0.5594808021781D+02-0.5594745160807D+02-0.5594681538021D+02-0.5594617144176D+02 +-0.5594551969907D+02-0.5594486005739D+02-0.5594419242079D+02-0.5594351669220D+02 +-0.5594283277333D+02-0.5594214056472D+02-0.5594143996569D+02-0.5594073087433D+02 +-0.5594001318748D+02-0.5593928680075D+02-0.5593855160844D+02-0.5593780750359D+02 +-0.5593705437792D+02-0.5593629212184D+02-0.5593552062442D+02-0.5593473977337D+02 +-0.5593394945503D+02-0.5593314955437D+02-0.5593233995493D+02-0.5593152053886D+02 +-0.5593069118685D+02-0.5592985177814D+02-0.5592900219050D+02-0.5592814230019D+02 +-0.5592727198200D+02-0.5592639110914D+02-0.5592549955331D+02-0.5592459718463D+02 +-0.5592368387163D+02-0.5592275948125D+02-0.5592182387879D+02-0.5592087692791D+02 +-0.5591991849060D+02-0.5591894842717D+02-0.5591796659623D+02-0.5591697285464D+02 +-0.5591596705754D+02-0.5591494905827D+02-0.5591391870841D+02-0.5591287585770D+02 +-0.5591182035404D+02-0.5591075204351D+02-0.5590967077026D+02-0.5590857637656D+02 +-0.5590746870275D+02-0.5590634758721D+02-0.5590521286636D+02-0.5590406437459D+02 +-0.5590290194430D+02-0.5590172540580D+02-0.5590053458737D+02-0.5589932931515D+02 +-0.5589810941317D+02-0.5589687470331D+02-0.5589562500525D+02-0.5589436013649D+02 +-0.5589307991228D+02-0.5589178414561D+02-0.5589047264718D+02-0.5588914522538D+02 +-0.5588780168625D+02-0.5588644183344D+02-0.5588506546822D+02-0.5588367238942D+02 +-0.5588226239339D+02-0.5588083527400D+02-0.5587939082259D+02-0.5587792882794D+02 +-0.5587644907625D+02-0.5587495135110D+02-0.5587343543342D+02-0.5587190110143D+02 +-0.5587034813066D+02-0.5586877629389D+02-0.5586718536109D+02-0.5586557509943D+02 +-0.5586394527322D+02-0.5586229564388D+02-0.5586062596990D+02-0.5585893600682D+02 +-0.5585722550716D+02-0.5585549422044D+02-0.5585374189306D+02-0.5585196826836D+02 +-0.5585017308649D+02-0.5584835608443D+02-0.5584651699595D+02-0.5584465555151D+02 +-0.5584277147830D+02-0.5584086450016D+02-0.5583893433751D+02-0.5583698070737D+02 +-0.5583500332328D+02-0.5583300189525D+02-0.5583097612975D+02-0.5582892572963D+02 +-0.5582685039410D+02-0.5582474981868D+02-0.5582262369515D+02-0.5582047171150D+02 +-0.5581829355190D+02-0.5581608889662D+02-0.5581385742203D+02-0.5581159880052D+02 +-0.5580931270044D+02-0.5580699878609D+02-0.5580465671763D+02-0.5580228615106D+02 +-0.5579988673814D+02-0.5579745812637D+02-0.5579499995891D+02-0.5579251187454D+02 +-0.5578999350761D+02-0.5578744448796D+02-0.5578486444092D+02-0.5578225298718D+02 +-0.5577960974280D+02-0.5577693431910D+02-0.5577422632265D+02-0.5577148535518D+02 +-0.5576871101352D+02-0.5576590288957D+02-0.5576306057020D+02-0.5576018363722D+02 +-0.5575727166730D+02-0.5575432423191D+02-0.5575134089726D+02-0.5574832122425D+02 +-0.5574526476838D+02-0.5574217107968D+02-0.5573903970268D+02-0.5573587017631D+02 +-0.5573266203385D+02-0.5572941480284D+02-0.5572612800505D+02-0.5572280115636D+02 +-0.5571943376671D+02-0.5571602534007D+02-0.5571257537427D+02-0.5570908336103D+02 +-0.5570554878583D+02-0.5570197112783D+02-0.5569834985982D+02-0.5569468444813D+02 +-0.5569097435256D+02-0.5568721902628D+02-0.5568341791577D+02-0.5567957046075D+02 +-0.5567567609407D+02-0.5567173424164D+02-0.5566774432235D+02-0.5566370574799D+02 +-0.5565961792315D+02-0.5565548024516D+02-0.5565129210397D+02-0.5564705288208D+02 +-0.5564276195446D+02-0.5563841868845D+02-0.5563402244365D+02-0.5562957257189D+02 +-0.5562506841705D+02-0.5562050931505D+02-0.5561589459371D+02-0.5561122357264D+02 +-0.5560649556320D+02-0.5560170986836D+02-0.5559686578260D+02-0.5559196259184D+02 +-0.5558699957332D+02-0.5558197599550D+02-0.5557689111797D+02-0.5557174419131D+02 +-0.5556653445704D+02-0.5556126114749D+02-0.5555592348568D+02-0.5555052068524D+02 +-0.5554505195027D+02-0.5553951647525D+02-0.5553391344497D+02-0.5552824203432D+02 +-0.5552250140829D+02-0.5551669072176D+02-0.5551080911947D+02-0.5550485573585D+02 +-0.5549882969491D+02-0.5549273011015D+02-0.5548655608443D+02-0.5548030670984D+02 +-0.5547398106760D+02-0.5546757822790D+02-0.5546109724985D+02-0.5545453718129D+02 +-0.5544789705870D+02-0.5544117590707D+02-0.5543437273978D+02-0.5542748655846D+02 +-0.5542051635287D+02-0.5541346110080D+02-0.5540631976790D+02-0.5539909130755D+02 +-0.5539177466079D+02-0.5538436875613D+02-0.5537687250942D+02-0.5536928482377D+02 +-0.5536160458935D+02-0.5535383068333D+02-0.5534596196965D+02-0.5533799729900D+02 +-0.5532993550859D+02-0.5532177542207D+02-0.5531351584935D+02-0.5530515558651D+02 +-0.5529669341564D+02-0.5528812810468D+02-0.5527945840733D+02-0.5527068306286D+02 +-0.5526180079603D+02-0.5525281031687D+02-0.5524371032063D+02-0.5523449948757D+02 +-0.5522517648286D+02-0.5521573995641D+02-0.5520618854278D+02-0.5519652086096D+02 +-0.5518673551431D+02-0.5517683109036D+02-0.5516680616071D+02-0.5515665928088D+02 +-0.5514638899013D+02-0.5513599381138D+02-0.5512547225104D+02-0.5511482279886D+02 +-0.5510404392784D+02-0.5509313409401D+02-0.5508209173637D+02-0.5507091527672D+02 +-0.5505960311951D+02-0.5504815365174D+02-0.5503656524279D+02-0.5502483624430D+02 +-0.5501296499006D+02-0.5500094979582D+02-0.5498878895923D+02-0.5497648075966D+02 +-0.5496402345810D+02-0.5495141529700D+02-0.5493865450020D+02-0.5492573927273D+02 +-0.5491266780078D+02-0.5489943825150D+02-0.5488604877293D+02-0.5487249749385D+02 +-0.5485878252372D+02-0.5484490195249D+02-0.5483085385058D+02-0.5481663626870D+02 +-0.5480224723778D+02-0.5478768476886D+02-0.5477294685301D+02-0.5475803146122D+02 +-0.5474293654428D+02-0.5472766003276D+02-0.5471219983685D+02-0.5469655384634D+02 +-0.5468071993049D+02-0.5466469593800D+02-0.5464847969690D+02-0.5463206901452D+02 +-0.5461546167739D+02-0.5459865545122D+02-0.5458164808082D+02-0.5456443729006D+02 +-0.5454702078182D+02-0.5452939623798D+02-0.5451156131932D+02-0.5449351366558D+02 +-0.5447525089535D+02-0.5445677060611D+02-0.5443807037422D+02-0.5441914775485D+02 +-0.5440000028205D+02-0.5438062546874D+02-0.5436102080667D+02-0.5434118376653D+02 +-0.5432111179788D+02-0.5430080232926D+02-0.5428025276818D+02-0.5425946050117D+02 +-0.5423842289388D+02-0.5421713729106D+02-0.5419560101670D+02-0.5417381137409D+02 +-0.5415176564585D+02-0.5412946109410D+02-0.5410689496051D+02-0.5408406446641D+02 +-0.5406096681292D+02-0.5403759918108D+02-0.5401395873195D+02-0.5399004260679D+02 +-0.5396584792718D+02-0.5394137179518D+02-0.5391661129353D+02-0.5389156348579D+02 +-0.5386622541652D+02-0.5384059411151D+02-0.5381466657797D+02-0.5378843980472D+02 +-0.5376191076243D+02-0.5373507640384D+02-0.5370793366402D+02-0.5368047946060D+02 +-0.5365271069403D+02-0.5362462424784D+02-0.5359621698893D+02-0.5356748576786D+02 +-0.5353842741911D+02-0.5350903876141D+02-0.5347931659806D+02-0.5344925771720D+02 +-0.5341885889220D+02-0.5338811688195D+02-0.5335702843121D+02-0.5332559027100D+02 +-0.5329379911889D+02-0.5326165167942D+02-0.5322914464448D+02-0.5319627469362D+02 +-0.5316303849452D+02-0.5312943270332D+02-0.5309545396506D+02-0.5306109891405D+02 +-0.5302636417430D+02-0.5299124635991D+02-0.5295574207553D+02-0.5291984791672D+02 +-0.5288356047042D+02-0.5284687631533D+02-0.5280979202239D+02-0.5277230415518D+02 +-0.5273440927034D+02-0.5269610391800D+02-0.5265738464223D+02-0.5261824798144D+02 +-0.5257869046882D+02-0.5253870863276D+02-0.5249829899727D+02-0.5245745808235D+02 +-0.5241618240448D+02-0.5237446847694D+02-0.5233231281027D+02-0.5228971191260D+02 +-0.5224666229005D+02-0.5220316044714D+02-0.5215920288705D+02-0.5211478611208D+02 +-0.5206990662388D+02-0.5202456092385D+02-0.5197874551337D+02-0.5193245689418D+02 +-0.5188569156854D+02-0.5183844603960D+02-0.5179071681156D+02-0.5174250038989D+02 +-0.5169379328157D+02-0.5164459199524D+02-0.5159489304133D+02-0.5154469293224D+02 +-0.5149398818240D+02-0.5144277530838D+02-0.5139105082893D+02-0.5133881126500D+02 +-0.5128605313977D+02-0.5123277297861D+02-0.5117896730901D+02-0.5112463266053D+02 +-0.5106976556466D+02-0.5101436255468D+02-0.5095842016552D+02-0.5090193493353D+02 +-0.5084490339625D+02-0.5078732209217D+02-0.5072918756044D+02-0.5067049634053D+02 +-0.5061124497191D+02-0.5055142999367D+02-0.5049104794412D+02-0.5043009536037D+02 +-0.5036856877788D+02-0.5030646472999D+02-0.5024377974744D+02-0.5018051035785D+02 +-0.5011665308520D+02-0.5005220444929D+02-0.4998716096520D+02-0.4992151914271D+02 +-0.4985527548577D+02-0.4978842649191D+02-0.4972096865169D+02-0.4965289844817D+02 +-0.4958421235632D+02-0.4951490684253D+02-0.4944497836413D+02-0.4937442336884D+02 +-0.4930323829442D+02-0.4923141956820D+02-0.4915896360676D+02-0.4908586681562D+02 +-0.4901212558901D+02-0.4893773630966D+02-0.4886269534877D+02-0.4878699906594D+02 +-0.4871064380928D+02-0.4863362591559D+02-0.4855594171068D+02-0.4847758750974D+02 +-0.4839855961795D+02-0.4831885433110D+02-0.4823846793652D+02-0.4815739671398D+02 +-0.4807563693695D+02-0.4799318487390D+02-0.4791003678985D+02-0.4782618894812D+02 +-0.4774163761229D+02-0.4765637904833D+02-0.4757040952706D+02-0.4748372532669D+02 +-0.4739632273575D+02-0.4730819805621D+02-0.4721934760677D+02-0.4712976772658D+02 +-0.4703945477902D+02-0.4694840515589D+02-0.4685661528177D+02-0.4676408161865D+02 +-0.4667080067085D+02-0.4657676899007D+02-0.4648198318078D+02-0.4638643990576D+02 +-0.4629013589185D+02-0.4619306793583D+02-0.4609523291052D+02-0.4599662777096D+02 +-0.4589724956062D+02-0.4579709541778D+02-0.4569616258178D+02-0.4559444839933D+02 +-0.4549195033067D+02-0.4538866595562D+02-0.4528459297936D+02-0.4517972923803D+02 +-0.4507407270392D+02-0.4496762149023D+02-0.4486037385545D+02-0.4475232820707D+02 +-0.4464348310467D+02-0.4453383726236D+02-0.4442338955036D+02-0.4431213899571D+02 +-0.4420008478207D+02-0.4408722624849D+02-0.4397356288712D+02-0.4385909433981D+02 +-0.4374382039350D+02-0.4362774097450D+02-0.4351085614152D+02-0.4339316607748D+02 +-0.4327467108021D+02-0.4315537155195D+02-0.4303526798782D+02-0.4291436096325D+02 +-0.4279265112060D+02-0.4267013915494D+02-0.4254682579928D+02-0.4242271180939D+02 +-0.4229779794832D+02-0.4217208497096D+02-0.4204557360880D+02-0.4191826455508D+02 +-0.4179015845074D+02-0.4166125587121D+02-0.4153155731447D+02-0.4140106319054D+02 +-0.4126977381267D+02-0.4113768939034D+02-0.4100481002451D+02-0.4087113570499D+02 +-0.4073666631034D+02-0.4060140161020D+02-0.4046534127029D+02-0.4032848485998D+02 +-0.4019083186252D+02-0.4005238168784D+02-0.3991313368780D+02-0.3977308717392D+02 +-0.3963224143719D+02-0.3949059576999D+02-0.3934814948980D+02-0.3920490196442D+02 +-0.3906085263854D+02-0.3891600106131D+02-0.3877034691460D+02-0.3862389004169D+02 +-0.3847663047613D+02-0.3832856847032D+02-0.3817970452375D+02-0.3803003941035D+02 +-0.3787957420494D+02-0.3772831030831D+02-0.3757624947084D+02-0.3742339381436D+02 +-0.3726974585212D+02-0.3711530850658D+02-0.3696008512503D+02-0.3680407949275D+02 +-0.3664729584366D+02-0.3648973886843D+02-0.3633141371988D+02-0.3617232601563D+02 +-0.3601248183808D+02-0.3585188773153D+02-0.3569055069660D+02-0.3552847818188D+02 +-0.3536567807287D+02-0.3520215867823D+02-0.3503792871350D+02-0.3487299728219D+02 +-0.3470737385451D+02-0.3454106824375D+02-0.3437409058039D+02-0.3420645128411D+02 +-0.3403816103389D+02-0.3386923073618D+02-0.3369967149145D+02-0.3352949455922D+02 +-0.3335871132169D+02-0.3318733324628D+02-0.3301537184711D+02-0.3284283864582D+02 +-0.3266974513168D+02-0.3249610272147D+02-0.3232192271915D+02-0.3214721627573D+02 +-0.3197199434941D+02-0.3179626766635D+02-0.3162004668235D+02-0.3144334154556D+02 +-0.3126616206070D+02-0.3108851765487D+02-0.3091041734535D+02-0.3073186970965D+02 +-0.3055288285808D+02-0.3037346440918D+02-0.3019362146820D+02-0.3001336060913D+02 +-0.2983268786030D+02-0.2965160869404D+02-0.2947012802069D+02-0.2928825018707D+02 +-0.2910597897983D+02-0.2892331763394D+02-0.2874026884640D+02-0.2855683479563D+02 +-0.2837301716652D+02-0.2818881718143D+02-0.2800423563728D+02-0.2781927294878D+02 +-0.2763392919787D+02-0.2744820418942D+02-0.2726209751303D+02-0.2707560861099D+02 +-0.2688873685197D+02-0.2670148161035D+02-0.2651384235066D+02-0.2632581871673D+02 +-0.2613741062491D+02-0.2594861836050D+02-0.2575944267670D+02-0.2556988489474D+02 +-0.2537994700429D+02-0.2518963176239D+02-0.2499894278959D+02-0.2480788466146D+02 +-0.2461646299340D+02-0.2442468451683D+02-0.2423255714443D+02-0.2404009002205D+02 +-0.2384729356502D+02-0.2365417947632D+02-0.2346076074440D+02-0.2326705161846D+02 +-0.2307306755939D+02-0.2287882516484D+02-0.2268434206760D+02-0.2248963680690D+02 +-0.2229472867335D+02-0.2209963752873D+02-0.2190438360327D+02-0.2170898727381D+02 +-0.2151346882730D+02-0.2131784821543D+02-0.2112214480655D+02-0.2092637714222D+02 +-0.2073056270594D+02-0.2053471771184D+02-0.2033885692095D+02-0.2014299349199D+02 +-0.1994713887300D+02-0.1975130273852D+02-0.1955549297578D+02-0.1935971572156D+02 +-0.1916397544961D+02-0.1896827510666D+02-0.1877261629335D+02-0.1857699948515D+02 +-0.1838142428664D+02-0.1818588971230D+02-0.1799039448570D+02-0.1779493734945D+02 +-0.1759951737795D+02-0.1740413428567D+02-0.1720878872427D+02-0.1701348256277D+02 +-0.1681821914574D+02-0.1662300352591D+02-0.1642784266799D+02-0.1623274562204D+02 +-0.1603772366522D+02-0.1584279041162D+02-0.1564796189071D+02-0.1545325659516D+02 +-0.1525869549958D+02-0.1506430205187D+02-0.1487010213902D+02-0.1467612402963D+02 +-0.1448239829525D+02-0.1428895771276D+02-0.1409583715006D+02-0.1390307343715D+02 +-0.1371070522463D+02-0.1351877283175D+02-0.1332731808571D+02-0.1313638415398D+02 +-0.1294601537142D+02-0.1275625706353D+02-0.1256715536733D+02-0.1237875705119D+02 +-0.1219110933473D+02-0.1200425971003D+02-0.1181825576496D+02-0.1163314500979D+02 +-0.1144897470771D+02-0.1126579171021D+02-0.1108364229789D+02-0.1090257202746D+02 +-0.1072262558533D+02-0.1054384664851D+02-0.1036627775311D+02-0.1018996017088D+02 +-0.1001493379420D+02-0.9841237029688D+01-0.9668906700817D+01-0.9497977959590D+01 +-0.9328484207518D+01-0.9160457025957D+01-0.8993926115871D+01-0.8828919247037D+01 +-0.8665462216657D+01-0.8503578817319D+01-0.8343290814190D+01-0.8184617931308D+01 +-0.8027577846790D+01-0.7872186196747D+01-0.7718456587669D+01-0.7566400617002D+01 +-0.7416027901618D+01-0.7267346113868D+01-0.7120361024850D+01-0.6975076554541D+01 +-0.6831494828398D+01-0.6689616240019D+01-0.6549439519455D+01-0.6410961806724D+01 +-0.6274178730100D+01-0.6139084488706D+01-0.6005671938957D+01-0.5873932684392D+01 +-0.5743857168405D+01-0.5615434769421D+01-0.5488653898026D+01-0.5363502095589D+01 +-0.5239966133887D+01-0.5118032115285D+01-0.4997685572981D+01-0.4878911570870D+01 +-0.4761694802579D+01-0.4646019689203D+01-0.4531870475328D+01-0.4419231322903D+01 +-0.4308086402536D+01-0.4198419981829D+01-0.4090216510335D+01-0.3983460700785D+01 +-0.3878137606209D+01-0.3774232692621D+01-0.3671731906950D+01-0.3570621739926D+01 +-0.3470889283655D+01-0.3372522283668D+01-0.3275509185227D+01-0.3179839173777D+01 +-0.3085502209407D+01-0.2992489055299D+01-0.2900791300174D+01-0.2810401374812D+01 +-0.2721312562800D+01-0.2633519005746D+01-0.2547015703274D+01-0.2461798508191D+01 +-0.2377864117340D+01-0.2295210058705D+01-0.2213834675455D+01-0.2133737107686D+01 +-0.2054917272700D+01-0.1977375844742D+01-0.1901114235171D+01-0.1826134574072D+01 +-0.1752439694379D+01-0.1680033119533D+01-0.1608919055743D+01-0.1539102389829D+01 +-0.1470588693594D+01-0.1403384235579D+01-0.1337496000950D+01-0.1272931720125D+01 +-0.1209699906641D+01-0.1147809904577D+01-0.1087271945702D+01-0.1028097216364D+01 +-0.9702979339652D+00-0.9138874327328D+00-0.8588802583522D+00-0.8052922709231D+00 +-0.7531407555920D+00-0.7024445401528D+00-0.6532241188567D+00-0.6055017816457D+00 +-0.5593017480318D+00-0.5146503048631D+00-0.4715759472592D+00-0.4301095220606D+00 +-0.3902843732072D+00-0.3521364885391D+00-0.3157046476031D+00-0.2810305701333D+00 +-0.2481590649607D+00-0.2171381791902D+00-0.1880193475497D+00-0.1608575418921D+00 +-0.1357114208686D+00-0.1126434798399D+00-0.9172020110914D-01-0.7301220456970D-01 +-0.5659439885102D-01-0.4254613301525D-01-0.3095134881157D-01-0.2189873343119D-01 +-0.1548187261681D-01-0.1179935072892D-01 + 0.0000000000000D+00 + 1010 0.4703828218640D+01 + 0.2822897927676D-04 0.2889858310168D-04 0.2958406694959D-04 0.3028580729743D-04 + 0.3100418954289D-04 0.3173960821561D-04 0.3249246719340D-04 0.3326317992355D-04 + 0.3405216964939D-04 0.3485986964222D-04 0.3568672343868D-04 0.3653318508379D-04 + 0.3739971937969D-04 0.3828680214028D-04 0.3919492045188D-04 0.4012457294004D-04 + 0.4107627004266D-04 0.4205053428960D-04 0.4304790058885D-04 0.4406891651946D-04 + 0.4511414263147D-04 0.4618415275281D-04 0.4727953430359D-04 0.4840088861766D-04 + 0.4954883127192D-04 0.5072399242331D-04 0.5192701715379D-04 0.5315856582350D-04 + 0.5441931443219D-04 0.5570995498929D-04 0.5703119589262D-04 0.5838376231611D-04 + 0.5976839660667D-04 0.6118585869040D-04 0.6263692648841D-04 0.6412239634248D-04 + 0.6564308345076D-04 0.6719982231373D-04 0.6879346719071D-04 0.7042489256717D-04 + 0.7209499363302D-04 0.7380468677227D-04 0.7555491006413D-04 0.7734662379607D-04 + 0.7918081098885D-04 0.8105847793411D-04 0.8298065474446D-04 0.8494839591669D-04 + 0.8696278090821D-04 0.8902491472709D-04 0.9113592853601D-04 0.9329698027054D-04 + 0.9550925527187D-04 0.9777396693454D-04 0.1000923573695D-03 0.1024656980827D-03 + 0.1048952906696D-03 0.1073824675265D-03 0.1099285925780D-03 0.1125350620222D-03 + 0.1152033050928D-03 0.1179347848402D-03 0.1207309989298D-03 0.1235934804597D-03 + 0.1265237987982D-03 0.1295235604400D-03 0.1325944098831D-03 0.1357380305267D-03 + 0.1389561455892D-03 0.1422505190492D-03 0.1456229566076D-03 0.1490753066728D-03 + 0.1526094613690D-03 0.1562273575683D-03 0.1599309779469D-03 0.1637223520665D-03 + 0.1676035574812D-03 0.1715767208696D-03 0.1756440191948D-03 0.1798076808909D-03 + 0.1840699870774D-03 0.1884332728025D-03 0.1928999283157D-03 0.1974724003697D-03 + 0.2021531935541D-03 0.2069448716588D-03 0.2118500590712D-03 0.2168714422052D-03 + 0.2220117709639D-03 0.2272738602368D-03 0.2326605914327D-03 0.2381749140476D-03 + 0.2438198472700D-03 0.2495984816246D-03 0.2555139806531D-03 0.2615695826358D-03 + 0.2677686023527D-03 0.2741144328872D-03 0.2806105474705D-03 0.2872605013706D-03 + 0.2940679338251D-03 0.3010365700196D-03 0.3081702231123D-03 0.3154727963060D-03 + 0.3229482849695D-03 0.3306007788076D-03 0.3384344640828D-03 0.3464536258892D-03 + 0.3546626504788D-03 0.3630660276436D-03 0.3716683531525D-03 0.3804743312460D-03 + 0.3894887771886D-03 0.3987166198823D-03 0.4081629045398D-03 0.4178327954211D-03 + 0.4277315786349D-03 0.4378646650037D-03 0.4482375929981D-03 0.4588560317381D-03 + 0.4697257840661D-03 0.4808527896901D-03 0.4922431284022D-03 0.5039030233715D-03 + 0.5158388445136D-03 0.5280571119400D-03 0.5405644994873D-03 0.5533678383292D-03 + 0.5664741206728D-03 0.5798905035415D-03 0.5936243126461D-03 0.6076830463463D-03 + 0.6220743797047D-03 0.6368061686360D-03 0.6518864541520D-03 0.6673234667066D-03 + 0.6831256306418D-03 0.6993015687376D-03 0.7158601068679D-03 0.7328102787649D-03 + 0.7501613308948D-03 0.7679227274470D-03 0.7861041554398D-03 0.8047155299447D-03 + 0.8237669994325D-03 0.8432689512445D-03 0.8632320171900D-03 0.8836670792752D-03 + 0.9045852755644D-03 0.9259980061788D-03 0.9479169394335D-03 0.9703540181183D-03 + 0.9933214659239D-03 0.1016831794018D-02 0.1040897807773D-02 0.1065532613652D-02 + 0.1090749626254D-02 0.1116562575521D-02 0.1142985514113D-02 0.1170032824957D-02 + 0.1197719228971D-02 0.1226059792957D-02 0.1255069937695D-02 0.1284765446210D-02 + 0.1315162472234D-02 0.1346277548869D-02 0.1378127597445D-02 0.1410729936586D-02 + 0.1444102291485D-02 0.1478262803393D-02 0.1513230039330D-02 0.1549023002016D-02 + 0.1585661140037D-02 0.1623164358242D-02 0.1661553028381D-02 0.1700847999990D-02 + 0.1741070611526D-02 0.1782242701761D-02 0.1824386621435D-02 0.1867525245181D-02 + 0.1911681983723D-02 0.1956880796358D-02 0.2003146203724D-02 0.2050503300858D-02 + 0.2098977770562D-02 0.2148595897071D-02 0.2199384580037D-02 0.2251371348837D-02 + 0.2304584377204D-02 0.2359052498202D-02 0.2414805219536D-02 0.2471872739223D-02 + 0.2530285961614D-02 0.2590076513788D-02 0.2651276762324D-02 0.2713919830449D-02 + 0.2778039615591D-02 0.2843670807319D-02 0.2910848905710D-02 0.2979610240123D-02 + 0.3049991988408D-02 0.3122032196553D-02 0.3195769798783D-02 0.3271244638108D-02 + 0.3348497487356D-02 0.3427570070669D-02 0.3508505085500D-02 0.3591346225106D-02 + 0.3676138201558D-02 0.3762926769271D-02 0.3851758749068D-02 0.3942682052795D-02 + 0.4035745708495D-02 0.4130999886152D-02 0.4228495924017D-02 0.4328286355539D-02 + 0.4430424936900D-02 0.4534966675174D-02 0.4641967857131D-02 0.4751486078680D-02 + 0.4863580274994D-02 0.4978310751300D-02 0.5095739214379D-02 0.5215928804767D-02 + 0.5338944129685D-02 0.5464851296718D-02 0.5593717948242D-02 0.5725613296635D-02 + 0.5860608160276D-02 0.5998775000357D-02 0.6140187958516D-02 0.6284922895326D-02 + 0.6433057429632D-02 0.6584670978789D-02 0.6739844799785D-02 0.6898662031291D-02 + 0.7061207736660D-02 0.7227568947871D-02 0.7397834710467D-02 0.7572096129497D-02 + 0.7750446416468D-02 0.7932980937365D-02 0.8119797261721D-02 0.8310995212790D-02 + 0.8506676918829D-02 0.8706946865529D-02 0.8911911949594D-02 0.9121681533523D-02 + 0.9336367501594D-02 0.9556084317096D-02 0.9780949080823D-02 0.1001108159085D-01 + 0.1024660440367D-01 0.1048764289658D-01 0.1073432533159D-01 0.1098678292060D-01 + 0.1124514989209D-01 0.1150956355924D-01 0.1178016438955D-01 0.1205709607601D-01 + 0.1234050560981D-01 0.1263054335461D-01 0.1292736312248D-01 0.1323112225147D-01 + 0.1354198168490D-01 0.1386010605232D-01 0.1418566375231D-01 0.1451882703696D-01 + 0.1485977209836D-01 0.1520867915674D-01 0.1556573255074D-01 0.1593112082945D-01 + 0.1630503684658D-01 0.1668767785653D-01 0.1707924561263D-01 0.1747994646745D-01 + 0.1788999147524D-01 0.1830959649665D-01 0.1873898230556D-01 0.1917837469831D-01 + 0.1962800460524D-01 0.2008810820453D-01 0.2055892703857D-01 0.2104070813274D-01 + 0.2153370411671D-01 0.2203817334833D-01 0.2255438004014D-01 0.2308259438854D-01 + 0.2362309270569D-01 0.2417615755418D-01 0.2474207788454D-01 0.2532114917562D-01 + 0.2591367357791D-01 0.2651996005991D-01 0.2714032455742D-01 0.2777509012613D-01 + 0.2842458709716D-01 0.2908915323605D-01 0.2976913390487D-01 0.3046488222776D-01 + 0.3117675925988D-01 0.3190513415980D-01 0.3265038436549D-01 0.3341289577384D-01 + 0.3419306292394D-01 0.3499128918402D-01 0.3580798694223D-01 0.3664357780130D-01 + 0.3749849277716D-01 0.3837317250153D-01 0.3926806742860D-01 0.4018363804596D-01 + 0.4112035508961D-01 0.4207869976342D-01 0.4305916396289D-01 0.4406225050337D-01 + 0.4508847335285D-01 0.4613835786933D-01 0.4721244104290D-01 0.4831127174258D-01 + 0.4943541096799D-01 0.5058543210598D-01 0.5176192119225D-01 0.5296547717807D-01 + 0.5419671220219D-01 0.5545625186798D-01 0.5674473552592D-01 0.5806281656155D-01 + 0.5941116268889D-01 0.6079045624952D-01 0.6220139451726D-01 0.6364469000872D-01 + 0.6512107079966D-01 0.6663128084730D-01 0.6817608031869D-01 0.6975624592522D-01 + 0.7137257126332D-01 0.7302586716146D-01 0.7471696203363D-01 0.7644670223921D-01 + 0.7821595244947D-01 0.8002559602077D-01 0.8187653537442D-01 0.8376969238356D-01 + 0.8570600876681D-01 0.8768644648905D-01 0.8971198816932D-01 0.9178363749592D-01 + 0.9390241964879D-01 0.9606938172933D-01 0.9828559319767D-01 0.1005521463175D+00 + 0.1028701566086D+00 0.1052407633071D+00 0.1076651298335D+00 0.1101444442686D+00 + 0.1126799198376D+00 0.1152727954021D+00 0.1179243359604D+00 0.1206358331556D+00 + 0.1234086057928D+00 0.1262440003639D+00 0.1291433915812D+00 0.1321081829199D+00 + 0.1351398071683D+00 0.1382397269873D+00 0.1414094354789D+00 0.1446504567624D+00 + 0.1479643465608D+00 0.1513526927948D+00 0.1548171161868D+00 0.1583592708732D+00 + 0.1619808450260D+00 0.1656835614836D+00 0.1694691783902D+00 0.1733394898452D+00 + 0.1772963265606D+00 0.1813415565287D+00 0.1854770856982D+00 0.1897048586600D+00 + 0.1940268593417D+00 0.1984451117118D+00 0.2029616804927D+00 0.2075786718832D+00 + 0.2122982342897D+00 0.2171225590667D+00 0.2220538812666D+00 0.2270944803983D+00 + 0.2322466811943D+00 0.2375128543877D+00 0.2428954174969D+00 0.2483968356200D+00 + 0.2540196222367D+00 0.2597663400199D+00 0.2656396016546D+00 0.2716420706659D+00 + 0.2777764622543D+00 0.2840455441399D+00 0.2904521374132D+00 0.2969991173943D+00 + 0.3036894144995D+00 0.3105260151143D+00 0.3175119624741D+00 0.3246503575509D+00 + 0.3319443599474D+00 0.3393971887958D+00 0.3470121236635D+00 0.3547925054641D+00 + 0.3627417373729D+00 0.3708632857482D+00 0.3791606810557D+00 0.3876375187985D+00 + 0.3962974604490D+00 0.4051442343849D+00 0.4141816368276D+00 0.4234135327827D+00 + 0.4328438569819D+00 0.4424766148263D+00 0.4523158833295D+00 0.4623658120613D+00 + 0.4726306240902D+00 0.4831146169242D+00 0.4938221634495D+00 0.5047577128669D+00 + 0.5159257916232D+00 0.5273310043395D+00 0.5389780347329D+00 0.5508716465327D+00 + 0.5630166843893D+00 0.5754180747748D+00 0.5880808268743D+00 0.6010100334678D+00 + 0.6142108717997D+00 0.6276886044369D+00 0.6414485801132D+00 0.6554962345579D+00 + 0.6698370913103D+00 0.6844767625146D+00 0.6994209496980D+00 0.7146754445275D+00 + 0.7302461295457D+00 0.7461389788830D+00 0.7623600589455D+00 0.7789155290766D+00 + 0.7958116421903D+00 0.8130547453745D+00 0.8306512804639D+00 0.8486077845780D+00 + 0.8669308906245D+00 0.8856273277653D+00 0.9047039218430D+00 0.9241675957658D+00 + 0.9440253698485D+00 0.9642843621078D+00 0.9849517885090D+00 0.1006034963162D+01 + 0.1027541298464D+01 0.1049478305187D+01 0.1071853592506D+01 0.1094674867965D+01 + 0.1117949937382D+01 0.1141686704688D+01 0.1165893171688D+01 0.1190577437762D+01 + 0.1215747699477D+01 0.1241412250132D+01 0.1267579479212D+01 0.1294257871761D+01 + 0.1321456007662D+01 0.1349182560831D+01 0.1377446298306D+01 0.1406256079244D+01 + 0.1435620853813D+01 0.1465549661968D+01 0.1496051632129D+01 0.1527135979733D+01 + 0.1558812005674D+01 0.1591089094610D+01 0.1623976713152D+01 0.1657484407914D+01 + 0.1691621803430D+01 0.1726398599926D+01 0.1761824570946D+01 0.1797909560835D+01 + 0.1834663482054D+01 0.1872096312347D+01 0.1910218091732D+01 0.1949038919330D+01 + 0.1988568950016D+01 0.2028818390888D+01 0.2069797497551D+01 0.2111516570212D+01 + 0.2153985949578D+01 0.2197216012551D+01 0.2241217167721D+01 0.2285999850638D+01 + 0.2331574518874D+01 0.2377951646860D+01 0.2425141720492D+01 0.2473155231502D+01 + 0.2522002671595D+01 0.2571694526334D+01 0.2622241268775D+01 0.2673653352848D+01 + 0.2725941206474D+01 0.2779115224415D+01 0.2833185760847D+01 0.2888163121661D+01 + 0.2944057556476D+01 0.3000879250358D+01 0.3058638315257D+01 0.3117344781127D+01 + 0.3177008586758D+01 0.3237639570285D+01 0.3299247459391D+01 0.3361841861185D+01 + 0.3425432251760D+01 0.3490027965420D+01 0.3555638183578D+01 0.3622271923312D+01 + 0.3689938025588D+01 0.3758645143135D+01 0.3828401727976D+01 0.3899216018609D+01 + 0.3971096026830D+01 0.4044049524216D+01 0.4118084028237D+01 0.4193206788017D+01 + 0.4269424769739D+01 0.4346744641685D+01 0.4425172758919D+01 0.4504715147610D+01 + 0.4585377488999D+01 0.4667165103007D+01 0.4750082931483D+01 0.4834135521109D+01 + 0.4919327005946D+01 0.5005661089638D+01 0.5093141027279D+01 0.5181769606931D+01 + 0.5271549130828D+01 0.5362481396240D+01 0.5454567676037D+01 0.5547808698929D+01 + 0.5642204629425D+01 0.5737755047486D+01 0.5834458927918D+01 0.5932314619490D+01 + 0.6031319823804D+01 0.6131471573929D+01 0.6232766212813D+01 0.6335199371490D+01 + 0.6438765947103D+01 0.6543460080760D+01 0.6649275135236D+01 0.6756203672562D+01 + 0.6864237431499D+01 0.6973367304949D+01 0.7083583317299D+01 0.7194874601756D+01 + 0.7307229377677D+01 0.7420634927937D+01 0.7535077576369D+01 0.7650542665301D+01 + 0.7767014533232D+01 0.7884476492677D+01 0.8002910808236D+01 0.8122298674903D+01 + 0.8242620196679D+01 0.8363854365521D+01 0.8485979040679D+01 0.8608970928459D+01 + 0.8732805562479D+01 0.8857457284446D+01 0.8982899225533D+01 0.9109103288384D+01 + 0.9236040129829D+01 0.9363679144349D+01 0.9491988448359D+01 0.9620934865375D+01 + 0.9750483912121D+01 0.9880599785646D+01 0.1001124535152D+02 0.1014238213318D+02 + 0.1027397030247D+02 0.1040596867151D+02 0.1053833468592D+02 0.1067102441944D+02 + 0.1080399257009D+02 0.1093719245801D+02 0.1107057602480D+02 0.1120409383478D+02 + 0.1133769507799D+02 0.1147132757516D+02 0.1160493778463D+02 0.1173847081142D+02 + 0.1187187041842D+02 0.1200507903987D+02 0.1213803779715D+02 0.1227068651703D+02 + 0.1240296375239D+02 0.1253480680559D+02 0.1266615175447D+02 0.1279693348114D+02 + 0.1292708570360D+02 0.1305654101029D+02 0.1318523089765D+02 0.1331308581077D+02 + 0.1344003518714D+02 0.1356600750374D+02 0.1369093032729D+02 0.1381473036800D+02 + 0.1393733353663D+02 0.1405866500514D+02 0.1417864927082D+02 0.1429721022403D+02 + 0.1441427121959D+02 0.1452975515183D+02 0.1464358453343D+02 0.1475568157787D+02 + 0.1486596828578D+02 0.1497436653501D+02 0.1508079817450D+02 0.1518518512195D+02 + 0.1528744946527D+02 0.1538751356778D+02 0.1548530017722D+02 0.1558073253834D+02 + 0.1567373450929D+02 0.1576423068155D+02 0.1585214650334D+02 0.1593740840661D+02 + 0.1601994393732D+02 0.1609968188897D+02 0.1617655243937D+02 0.1625048729030D+02 + 0.1632141981018D+02 0.1638928517938D+02 0.1645402053810D+02 0.1651556513661D+02 + 0.1657386048771D+02 0.1662885052105D+02 0.1668048173921D+02 0.1672870337532D+02 + 0.1677346755174D+02 0.1681472943983D+02 0.1685244742021D+02 0.1688658324348D+02 + 0.1691710219082D+02 0.1694397323428D+02 0.1696716919641D+02 0.1698666690872D+02 + 0.1700244736868D+02 0.1701449589489D+02 0.1702280227988D+02 0.1702736094014D+02 + 0.1702817106301D+02 0.1702523674982D+02 0.1701856715495D+02 0.1700817662019D+02 + 0.1699408480396D+02 0.1697631680485D+02 0.1695490327896D+02 0.1692988055055D+02 + 0.1690129071532D+02 0.1686918173597D+02 0.1683360752924D+02 0.1679462804414D+02 + 0.1675230933054D+02 0.1670672359779D+02 0.1665794926261D+02 0.1660607098584D+02 + 0.1655117969737D+02 0.1649337260880D+02 0.1643275321324D+02 0.1636943127166D+02 + 0.1630352278542D+02 0.1623514995428D+02 0.1616444111958D+02 0.1609153069198D+02 + 0.1601655906343D+02 0.1593967250279D+02 0.1586102303494D+02 0.1578076830272D+02 + 0.1569907141161D+02 0.1561610075672D+02 0.1553202983187D+02 0.1544703702050D+02 + 0.1536130536829D+02 0.1527502233726D+02 0.1518837954138D+02 0.1510157246357D+02 + 0.1501480015406D+02 0.1492826491038D+02 0.1484217193884D+02 0.1475672899789D+02 + 0.1467214602354D+02 0.1458863473714D+02 0.1450640823592D+02 0.1442568056674D+02 + 0.1434666628356D+02 0.1426957998922D+02 0.1419463586221D+02 0.1412204716908D+02 + 0.1405202576347D+02 0.1398478157240D+02 0.1392052207102D+02 0.1385945174664D+02 + 0.1380177155334D+02 0.1374767835804D+02 0.1369736437981D+02 0.1365101662301D+02 + 0.1360881630630D+02 0.1357093828863D+02 0.1353755049380D+02 0.1350881333529D+02 + 0.1348487914277D+02 0.1346589159229D+02 0.1345198514164D+02 0.1344328447287D+02 + 0.1343990394374D+02 0.1344194704999D+02 0.1344950590040D+02 0.1346266070662D+02 + 0.1348147928963D+02 0.1350601660503D+02 0.1353631428899D+02 0.1357240022701D+02 + 0.1361428814751D+02 0.1366197724215D+02 0.1371545181505D+02 0.1377468096276D+02 + 0.1383961828700D+02 0.1391020164207D+02 0.1398635291879D+02 0.1406797786673D+02 + 0.1415496595662D+02 0.1424719028448D+02 0.1434450751905D+02 0.1444675789422D+02 + 0.1455376524762D+02 0.1466533710685D+02 0.1478126482442D+02 0.1490132376260D+02 + 0.1502527352890D+02 0.1515285826322D+02 0.1528380697706D+02 0.1541783394552D+02 + 0.1555463915219D+02 0.1569390878723D+02 0.1583531579855D+02 0.1597852049587D+02 + 0.1612317120736D+02 0.1626890498814D+02 0.1641534837991D+02 0.1656211822077D+02 + 0.1670882250392D+02 0.1685506128400D+02 0.1700042762927D+02 0.1714450861801D+02 + 0.1728688637689D+02 0.1742713915930D+02 0.1756484246105D+02 0.1769957017075D+02 + 0.1783089575221D+02 0.1795839345559D+02 0.1808163955418D+02 0.1820021360329D+02 + 0.1831369971783D+02 0.1842168786443D+02 0.1852377516458D+02 0.1861956720435D+02 + 0.1870867934656D+02 0.1879073804112D+02 0.1886538212880D+02 0.1893226413405D+02 + 0.1899105154208D+02 0.1904142805532D+02 0.1908309482463D+02 0.1911577165017D+02 + 0.1913919814712D+02 0.1915313487131D+02 0.1915736439978D+02 0.1915169236150D+02 + 0.1913594841324D+02 0.1910998715595D+02 0.1907368898693D+02 0.1902696088309D+02 + 0.1896973711110D+02 0.1890197985980D+02 0.1882367979111D+02 0.1873485650522D+02 + 0.1863555891649D+02 0.1852586553668D+02 0.1840588466207D+02 0.1827575446183D+02 + 0.1813564296491D+02 0.1798574794313D+02 0.1782629668868D+02 0.1765754568441D+02 + 0.1747978016573D+02 0.1729331357344D+02 0.1709848689713D+02 0.1689566790926D+02 + 0.1668525029057D+02 0.1646765264773D+02 0.1624331742497D+02 0.1601270971148D+02 + 0.1577631594732D+02 0.1553464253076D+02 0.1528821433055D+02 0.1503757310733D+02 + 0.1478327584859D+02 0.1452589302229D+02 0.1426600675478D+02 0.1400420893890D+02 + 0.1374109927898D+02 0.1347728327950D+02 0.1321337018504D+02 0.1294997087909D+02 + 0.1268769575014D+02 0.1242715253344D+02 0.1216894413732D+02 0.1191366646334D+02 + 0.1166190622933D+02 0.1141423880528D+02 0.1117122607148D+02 0.1093341430875D+02 + 0.1070133213076D+02 0.1047548846804D+02 0.1025637061357D+02 0.1004444233947D+02 + 0.9840142094240D+01 0.9643881289740D+01 0.9456042686665D+01 0.9276978887128D+01 + 0.9107010942268D+01 0.8946427082594D+01 0.8795481577985D+01 0.8654393733866D+01 + 0.8523347029354D+01 0.8402488402537D+01 0.8291927687323D+01 0.8191737205550D+01 + 0.8101951517298D+01 0.8022567331513D+01 0.7953543578289D+01 0.7894801643282D+01 + 0.7846225763931D+01 0.7807663586305D+01 0.7778926880562D+01 0.7759792412179D+01 + 0.7750002965291D+01 0.7749268513647D+01 0.7757267533935D+01 0.7773648455422D+01 + 0.7798031239125D+01 0.7830009079009D+01 0.7869150217024D+01 0.7914999863141D+01 + 0.7967082210945D+01 0.8024902538783D+01 0.8087949385967D+01 0.8155696793049D+01 + 0.8227606594845D+01 0.8303130754497D+01 0.8381713726663D+01 0.8462794837691D+01 + 0.8545810670555D+01 0.8630197442281D+01 0.8715393361648D+01 0.8800840955083D+01 + 0.8885989348861D+01 0.8970296496034D+01 0.9053231336885D+01 0.9134275882128D+01 + 0.9212927208639D+01 0.9288699358066D+01 0.9361125129348D+01 0.9429757756877D+01 + 0.9494172466850D+01 0.9553967905136D+01 0.9608767430898D+01 0.9658220271069D+01 + 0.9702002531750D+01 0.9739818063494D+01 0.9771399178442D+01 0.9796507218194D+01 + 0.9814932972264D+01 0.9826496947899D+01 0.9831049492942D+01 0.9828470774318D+01 + 0.9818670615530D+01 0.9801588197404D+01 0.9777191627016D+01 0.9745477380464D+01 + 0.9706469625790D+01 0.9660219432900D+01 0.9606803877874D+01 0.9546325049477D+01 + 0.9478908966074D+01 0.9404704411421D+01 0.9323881698089D+01 0.9236631367382D+01 + 0.9143162834750D+01 0.9043702989702D+01 0.8938494759191D+01 0.8827795643351D+01 + 0.8711876232313D+01 0.8591018712600D+01 0.8465515371359D+01 0.8335667106386D+01 + 0.8201781949529D+01 0.8064173610696D+01 0.7923160049270D+01 0.7779062079295D+01 + 0.7632202014321D+01 0.7482902357339D+01 0.7331484540717D+01 0.7178267720557D+01 + 0.7023567629392D+01 0.6867695490623D+01 0.6710956997591D+01 0.6553651359694D+01 + 0.6396070417459D+01 0.6238497828007D+01 0.6081208321895D+01 0.5924467031862D+01 + 0.5768528893607D+01 0.5613638118303D+01 0.5460027736184D+01 0.5307919210187D+01 + 0.5157522118299D+01 0.5009033902955D+01 0.4862639685555D+01 0.4718512143918D+01 + 0.4576811450257D+01 0.4437685267076D+01 0.4301268798183D+01 0.4167684891909D+01 + 0.4037044193457D+01 0.3909445343224D+01 0.3784975217865D+01 0.3663709210799D+01 + 0.3545711548834D+01 0.3431035641570D+01 0.3319724460253D+01 0.3211810942756D+01 + 0.3107318421439D+01 0.3006261070664D+01 0.2908644370830D+01 0.2814465585889D+01 + 0.2723714251377D+01 0.2636372670131D+01 0.2552416412965D+01 0.2471814821729D+01 + 0.2394531512277D+01 0.2320524875072D+01 0.2249748571239D+01 0.2182152022098D+01 + 0.2117680890315D+01 0.2056277551009D+01 0.1997881551293D+01 0.1942430056902D+01 + 0.1889858284721D+01 0.1840099920190D+01 0.1793087518718D+01 0.1748752890397D+01 + 0.1707027467464D+01 0.1667842654092D+01 0.1631130158259D+01 0.1596822305538D+01 + 0.1564852334826D+01 0.1535154676113D+01 0.1507665210526D+01 0.1482321512978D+01 + 0.1459063077838D+01 0.1437831528150D+01 0.1418570808966D+01 0.1401227365441D+01 + 0.1385750306408D+01 0.1372091554150D+01 0.1360205981151D+01 0.1350051534615D+01 + 0.1341589349544D+01 0.1334783851160D+01 0.1329602847443D+01 0.1326017612514D+01 + 0.1324002961544D+01 0.1323537317827D+01 0.1324602772535D+01 0.1327185137630D+01 + 0.1331273992239D+01 0.1336862722721D+01 0.1343948556448D+01 0.1352532589186D+01 + 0.1362619805723D+01 0.1374219093204D+01 0.1387343246320D+01 0.1402008963243D+01 + 0.1418236830848D+01 0.1436051297386D+01 0.1455480630360D+01 0.1476556856876D+01 + 0.1499315683223D+01 0.1523796389835D+01 0.1550041697161D+01 0.1578097597207D+01 + 0.1608013144770D+01 0.1639840078164D+01 + 7 1010 + 1 0 -1 -600.89440 + 2 0 -1 -70.69423 + 2 1 1 -61.58665 + 2 1 -2 -60.30438 + 3 0 -1 -6.81477 + 3 1 1 -4.04571 + 3 1 -2 -3.88357 + 0.2785469216196D-04 0.2851542860947D-04 0.2919183479529D-04 0.2988428221063D-04 + 0.3059315114934D-04 0.3131883091633D-04 0.3206172004087D-04 0.3282222649503D-04 + 0.3360076791723D-04 0.3439777184103D-04 0.3521367592947D-04 0.3604892821478D-04 + 0.3690398734391D-04 0.3777932282974D-04 0.3867541530832D-04 0.3959275680213D-04 + 0.4053185098961D-04 0.4149321348101D-04 0.4247737210083D-04 0.4348486717685D-04 + 0.4451625183607D-04 0.4557209230759D-04 0.4665296823265D-04 0.4775947298205D-04 + 0.4889221398102D-04 0.5005181304174D-04 0.5123890670382D-04 0.5245414658270D-04 + 0.5369819972637D-04 0.5497174898048D-04 0.5627549336208D-04 0.5761014844216D-04 + 0.5897644673731D-04 0.6037513811051D-04 0.6180699018149D-04 0.6327278874671D-04 + 0.6477333820931D-04 0.6630946201915D-04 0.6788200312332D-04 0.6949182442720D-04 + 0.7113980926648D-04 0.7282686189024D-04 0.7455390795553D-04 0.7632189503355D-04 + 0.7813179312782D-04 0.7998459520450D-04 0.8188131773535D-04 0.8382300125341D-04 + 0.8581071092180D-04 0.8784553711598D-04 0.8992859601969D-04 0.9206103023500D-04 + 0.9424400940674D-04 0.9647873086163D-04 0.9876642026247D-04 0.1011083322779D-03 + 0.1035057512676D-03 0.1059599919841D-03 0.1084724002911D-03 0.1110443538981D-03 + 0.1136772631129D-03 0.1163725716120D-03 0.1191317572288D-03 0.1219563327603D-03 + 0.1248478467930D-03 0.1278078845485D-03 0.1308380687485D-03 0.1339400605005D-03 + 0.1371155602042D-03 0.1403663084797D-03 0.1436940871169D-03 0.1471007200477D-03 + 0.1505880743408D-03 0.1541580612203D-03 0.1578126371082D-03 0.1615538046909D-03 + 0.1653836140115D-03 0.1693041635876D-03 0.1733176015551D-03 0.1774261268394D-03 + 0.1816319903536D-03 0.1859374962257D-03 0.1903450030537D-03 0.1948569251909D-03 + 0.1994757340613D-03 0.2042039595057D-03 0.2090441911598D-03 0.2139990798645D-03 + 0.2190713391090D-03 0.2242637465089D-03 0.2295791453177D-03 0.2350204459748D-03 + 0.2405906276897D-03 0.2462927400626D-03 0.2521299047445D-03 0.2581053171352D-03 + 0.2642222481214D-03 0.2704840458560D-03 0.2768941375786D-03 0.2834560314795D-03 + 0.2901733186067D-03 0.2970496748178D-03 0.3040888627783D-03 0.3112947340064D-03 + 0.3186712309653D-03 0.3262223892054D-03 0.3339523395562D-03 0.3418653103701D-03 + 0.3499656298181D-03 0.3582577282402D-03 0.3667461405497D-03 0.3754355086956D-03 + 0.3843305841809D-03 0.3934362306408D-03 0.4027574264818D-03 0.4122992675811D-03 + 0.4220669700510D-03 0.4320658730667D-03 0.4423014417610D-03 0.4527792701863D-03 + 0.4635050843466D-03 0.4744847452996D-03 0.4857242523319D-03 0.4972297462089D-03 + 0.5090075124994D-03 0.5210639849792D-03 0.5334057491140D-03 0.5460395456232D-03 + 0.5589722741274D-03 0.5722109968811D-03 0.5857629425928D-03 0.5996355103340D-03 + 0.6138362735391D-03 0.6283729841002D-03 0.6432535765557D-03 0.6584861723775D-03 + 0.6740790843589D-03 0.6900408211033D-03 0.7063800916191D-03 0.7231058100208D-03 + 0.7402271003402D-03 0.7577533014495D-03 0.7756939720996D-03 0.7940588960747D-03 + 0.8128580874684D-03 0.8321017960818D-03 0.8518005129472D-03 0.8719649759811D-03 + 0.8926061757680D-03 0.9137353614791D-03 0.9353640469290D-03 0.9575040167727D-03 + 0.9801673328469D-03 0.1003366340659D-02 0.1027113676026D-02 0.1051422271869D-02 + 0.1076305365165D-02 0.1101776504058D-02 0.1127849555140D-02 0.1154538710895D-02 + 0.1181858497322D-02 0.1209823781729D-02 0.1238449780710D-02 0.1267752068310D-02 + 0.1297746584374D-02 0.1328449643092D-02 0.1359877941746D-02 0.1392048569647D-02 + 0.1424979017294D-02 0.1458687185738D-02 0.1493191396157D-02 0.1528510399666D-02 + 0.1564663387338D-02 0.1601670000470D-02 0.1639550341081D-02 0.1678324982648D-02 + 0.1718014981095D-02 0.1758641886039D-02 0.1800227752286D-02 0.1842795151599D-02 + 0.1886367184735D-02 0.1930967493762D-02 0.1976620274654D-02 0.2023350290184D-02 + 0.2071182883105D-02 0.2120143989642D-02 0.2170260153290D-02 0.2221558538930D-02 + 0.2274066947272D-02 0.2327813829623D-02 0.2382828303005D-02 0.2439140165609D-02 + 0.2496779912612D-02 0.2555778752349D-02 0.2616168622864D-02 0.2677982208836D-02 + 0.2741252958892D-02 0.2806015103315D-02 0.2872303672165D-02 0.2940154513808D-02 + 0.3009604313864D-02 0.3080690614603D-02 0.3153451834770D-02 0.3227927289868D-02 + 0.3304157212903D-02 0.3382182775607D-02 0.3462046110135D-02 0.3543790331266D-02 + 0.3627459559106D-02 0.3713098942302D-02 0.3800754681797D-02 0.3890474055115D-02 + 0.3982305441196D-02 0.4076298345809D-02 0.4172503427523D-02 0.4270972524285D-02 + 0.4371758680587D-02 0.4474916175257D-02 0.4580500549877D-02 0.4688568637841D-02 + 0.4799178594075D-02 0.4912389925430D-02 0.5028263521753D-02 0.5146861687669D-02 + 0.5268248175075D-02 0.5392488216372D-02 0.5519648558433D-02 0.5649797497356D-02 + 0.5783004913981D-02 0.5919342310213D-02 0.6058882846164D-02 0.6201701378126D-02 + 0.6347874497392D-02 0.6497480569958D-02 0.6650599777103D-02 0.6807314156887D-02 + 0.6967707646573D-02 0.7131866125995D-02 0.7299877461903D-02 0.7471831553288D-02 + 0.7647820377726D-02 0.7827938038751D-02 0.8012280814280D-02 0.8200947206126D-02 + 0.8394037990597D-02 0.8591656270232D-02 0.8793907526677D-02 0.9000899674734D-02 + 0.9212743117614D-02 0.9429550803405D-02 0.9651438282792D-02 0.9878523768051D-02 + 0.1011092819335D-01 0.1034877527637D-01 0.1059219158128D-01 0.1084130658315D-01 + 0.1109625273365D-01 0.1135716552839D-01 0.1162418357552D-01 0.1189744866601D-01 + 0.1217710584537D-01 0.1246330348697D-01 0.1275619336693D-01 0.1305593074072D-01 + 0.1336267442137D-01 0.1367658685935D-01 0.1399783422427D-01 0.1432658648830D-01 + 0.1466301751143D-01 0.1500730512854D-01 0.1535963123838D-01 0.1572018189446D-01 + 0.1608914739795D-01 0.1646672239248D-01 0.1685310596109D-01 0.1724850172519D-01 + 0.1765311794570D-01 0.1806716762630D-01 0.1849086861892D-01 0.1892444373150D-01 + 0.1936812083806D-01 0.1982213299101D-01 0.2028671853603D-01 0.2076212122923D-01 + 0.2124859035687D-01 0.2174638085762D-01 0.2225575344739D-01 0.2277697474677D-01 + 0.2331031741122D-01 0.2385606026394D-01 0.2441448843157D-01 0.2498589348272D-01 + 0.2557057356939D-01 0.2616883357138D-01 0.2678098524365D-01 0.2740734736686D-01 + 0.2804824590089D-01 0.2870401414167D-01 0.2937499288122D-01 0.3006153057095D-01 + 0.3076398348838D-01 0.3148271590730D-01 0.3221810027136D-01 0.3297051737129D-01 + 0.3374035652570D-01 0.3452801576559D-01 0.3533390202259D-01 0.3615843132108D-01 + 0.3700202897412D-01 0.3786512978340D-01 0.3874817824324D-01 0.3965162874864D-01 + 0.4057594580754D-01 0.4152160425729D-01 0.4248908948553D-01 0.4347889765536D-01 + 0.4449153593507D-01 0.4552752273238D-01 0.4658738793328D-01 0.4767167314567D-01 + 0.4878093194767D-01 0.4991573014086D-01 0.5107664600849D-01 0.5226427057861D-01 + 0.5347920789246D-01 0.5472207527787D-01 0.5599350362812D-01 0.5729413768601D-01 + 0.5862463633344D-01 0.5998567288655D-01 0.6137793539634D-01 0.6280212695519D-01 + 0.6425896600896D-01 0.6574918667512D-01 0.6727353906677D-01 0.6883278962270D-01 + 0.7042772144363D-01 0.7205913463464D-01 0.7372784665395D-01 0.7543469266808D-01 + 0.7718052591352D-01 0.7896621806494D-01 0.8079265961016D-01 0.8266076023181D-01 + 0.8457144919585D-01 0.8652567574710D-01 0.8852440951168D-01 0.9056864090668D-01 + 0.9265938155701D-01 0.9479766471948D-01 0.9698454571437D-01 0.9922110236439D-01 + 0.1015084354412D+00 0.1038476691197D+00 0.1062399514397D+00 0.1086864547758D+00 + 0.1111883763152D+00 0.1137469385428D+00 0.1163633897351D+00 0.1190390044619D+00 + 0.1217750840964D+00 0.1245729573331D+00 0.1274339807145D+00 0.1303595391662D+00 + 0.1333510465404D+00 0.1364099461675D+00 0.1395377114171D+00 0.1427358462675D+00 + 0.1460058858829D+00 0.1493493972011D+00 0.1527679795285D+00 0.1562632651449D+00 + 0.1598369199167D+00 0.1634906439195D+00 0.1672261720693D+00 0.1710452747626D+00 + 0.1749497585263D+00 0.1789414666758D+00 0.1830222799825D+00 0.1871941173505D+00 + 0.1914589365022D+00 0.1958187346731D+00 0.2002755493155D+00 0.2048314588113D+00 + 0.2094885831940D+00 0.2142490848794D+00 0.2191151694053D+00 0.2240890861802D+00 + 0.2291731292410D+00 0.2343696380189D+00 0.2396809981145D+00 0.2451096420812D+00 + 0.2506580502174D+00 0.2563287513666D+00 0.2621243237265D+00 0.2680473956655D+00 + 0.2741006465472D+00 0.2802868075638D+00 0.2866086625756D+00 0.2930690489592D+00 + 0.2996708584624D+00 0.3064170380662D+00 0.3133105908537D+00 0.3203545768859D+00 + 0.3275521140829D+00 0.3349063791123D+00 0.3424206082826D+00 0.3500980984419D+00 + 0.3579422078823D+00 0.3659563572485D+00 0.3741440304510D+00 0.3825087755830D+00 + 0.3910542058410D+00 0.3997840004485D+00 0.4087019055821D+00 0.4178117352998D+00 + 0.4271173724710D+00 0.4366227697069D+00 0.4463319502926D+00 0.4562490091173D+00 + 0.4663781136055D+00 0.4767235046453D+00 0.4872894975154D+00 0.4980804828088D+00 + 0.5091009273529D+00 0.5203553751254D+00 0.5318484481645D+00 0.5435848474730D+00 + 0.5555693539161D+00 0.5678068291098D+00 0.5803022163016D+00 0.5930605412403D+00 + 0.6060869130355D+00 0.6193865250037D+00 0.6329646555026D+00 0.6468266687496D+00 + 0.6609780156247D+00 0.6754242344570D+00 0.6901709517920D+00 0.7052238831392D+00 + 0.7205888336985D+00 0.7362716990642D+00 0.7522784659036D+00 0.7686152126110D+00 + 0.7852881099327D+00 0.8023034215638D+00 0.8196675047131D+00 0.8373868106353D+00 + 0.8554678851285D+00 0.8739173689942D+00 0.8927419984594D+00 0.9119486055566D+00 + 0.9315441184614D+00 0.9515355617847D+00 0.9719300568165D+00 0.9927348217202D+00 + 0.1013957171675D+01 0.1035604518961D+01 0.1057684372989D+01 0.1080204340270D+01 + 0.1103172124320D+01 0.1126595525499D+01 0.1150482440783D+01 0.1174840863462D+01 + 0.1199678882767D+01 0.1225004683413D+01 0.1250826545065D+01 0.1277152841722D+01 + 0.1303992041005D+01 0.1331352703361D+01 0.1359243481171D+01 0.1387673117753D+01 + 0.1416650446274D+01 0.1446184388546D+01 0.1476283953716D+01 0.1506958236842D+01 + 0.1538216417350D+01 0.1570067757373D+01 0.1602521599956D+01 0.1635587367135D+01 + 0.1669274557884D+01 0.1703592745915D+01 0.1738551577340D+01 0.1774160768179D+01 + 0.1810430101723D+01 0.1847369425726D+01 0.1884988649448D+01 0.1923297740520D+01 + 0.1962306721637D+01 0.2002025667078D+01 0.2042464699042D+01 0.2083633983785D+01 + 0.2125543727583D+01 0.2168204172473D+01 0.2211625591813D+01 0.2255818285610D+01 + 0.2300792575652D+01 0.2346558800408D+01 0.2393127309705D+01 0.2440508459172D+01 + 0.2488712604454D+01 0.2537750095171D+01 0.2587631268643D+01 0.2638366443348D+01 + 0.2689965912130D+01 0.2742439935142D+01 0.2795798732511D+01 0.2850052476738D+01 + 0.2905211284809D+01 0.2961285210025D+01 0.3018284233537D+01 0.3076218255588D+01 + 0.3135097086451D+01 0.3194930437062D+01 0.3255727909340D+01 0.3317498986195D+01 + 0.3380253021208D+01 0.3443999227998D+01 0.3508746669249D+01 0.3574504245413D+01 + 0.3641280683068D+01 0.3709084522943D+01 0.3777924107600D+01 0.3847807568764D+01 + 0.3918742814313D+01 0.3990737514906D+01 0.4063799090272D+01 0.4137934695133D+01 + 0.4213151204775D+01 0.4289455200267D+01 0.4366852953320D+01 0.4445350410785D+01 + 0.4524953178806D+01 0.4605666506608D+01 0.4687495269939D+01 0.4770443954156D+01 + 0.4854516636973D+01 0.4939716970850D+01 0.5026048165058D+01 0.5113512967397D+01 + 0.5202113645595D+01 0.5291851968375D+01 0.5382729186215D+01 0.5474746011797D+01 + 0.5567902600156D+01 0.5662198528547D+01 0.5757632776026D+01 0.5854203702779D+01 + 0.5951909029182D+01 0.6050745814641D+01 0.6150710436189D+01 0.6251798566894D+01 + 0.6354005154067D+01 0.6457324397303D+01 0.6561749726369D+01 0.6667273778962D+01 + 0.6773888378365D+01 0.6881584511011D+01 0.6990352303999D+01 0.7100181002567D+01 + 0.7211058947573D+01 0.7322973552997D+01 0.7435911283502D+01 0.7549857632083D+01 + 0.7664797097850D+01 0.7780713163960D+01 0.7897588275760D+01 0.8015403819161D+01 + 0.8134140099294D+01 0.8253776319490D+01 0.8374290560625D+01 0.8495659760883D+01 + 0.8617859695976D+01 0.8740864959878D+01 0.8864648946126D+01 0.8989183829733D+01 + 0.9114440549780D+01 0.9240388792730D+01 0.9366996976543D+01 0.9494232235627D+01 + 0.9622060406714D+01 0.9750446015703D+01 0.9879352265554D+01 0.1000874102528D+02 + 0.1013857282014D+02 0.1026880682306D+02 0.1039940084737D+02 0.1053031134100D+02 + 0.1066149338202D+02 0.1079290067591D+02 0.1092448555426D+02 0.1105619897532D+02 + 0.1118799052626D+02 0.1131980842733D+02 0.1145159953793D+02 0.1158330936475D+02 + 0.1171488207200D+02 0.1184626049381D+02 0.1197738614894D+02 0.1210819925788D+02 + 0.1223863876226D+02 0.1236864234698D+02 0.1249814646477D+02 0.1262708636354D+02 + 0.1275539611648D+02 0.1288300865495D+02 0.1300985580442D+02 0.1313586832326D+02 + 0.1326097594469D+02 0.1338510742188D+02 0.1350819057624D+02 0.1363015234896D+02 + 0.1375091885596D+02 0.1387041544615D+02 0.1398856676324D+02 0.1410529681099D+02 + 0.1422052902199D+02 0.1433418633013D+02 0.1444619124655D+02 0.1455646593940D+02 + 0.1466493231712D+02 0.1477151211554D+02 0.1487612698860D+02 0.1497869860283D+02 + 0.1507914873545D+02 0.1517739937621D+02 0.1527337283290D+02 0.1536699184041D+02 + 0.1545817967343D+02 0.1554686026266D+02 0.1563295831447D+02 0.1571639943397D+02 + 0.1579711025134D+02 0.1587501855146D+02 0.1595005340649D+02 0.1602214531154D+02 + 0.1609122632312D+02 0.1615723020028D+02 0.1622009254830D+02 0.1627975096467D+02 + 0.1633614518728D+02 0.1638921724452D+02 0.1643891160713D+02 0.1648517534148D+02 + 0.1652795826420D+02 0.1656721309769D+02 0.1660289562630D+02 0.1663496485302D+02 + 0.1666338315612D+02 0.1668811644560D+02 0.1670913431903D+02 0.1672641021646D+02 + 0.1673992157396D+02 0.1674964997545D+02 0.1675558130241D+02 0.1675770588105D+02 + 0.1675601862651D+02 0.1675051918361D+02 0.1674121206374D+02 0.1672810677740D+02 + 0.1671121796192D+02 0.1669056550381D+02 0.1666617465536D+02 0.1663807614484D+02 + 0.1660630627990D+02 0.1657090704356D+02 0.1653192618233D+02 0.1648941728586D+02 + 0.1644343985771D+02 0.1639405937648D+02 0.1634134734709D+02 0.1628538134131D+02 + 0.1622624502736D+02 0.1616402818777D+02 0.1609882672526D+02 0.1603074265586D+02 + 0.1595988408902D+02 0.1588636519406D+02 0.1581030615268D+02 0.1573183309684D+02 + 0.1565107803188D+02 0.1556817874425D+02 0.1548327869364D+02 0.1539652688903D+02 + 0.1530807774849D+02 0.1521809094237D+02 0.1512673121961D+02 0.1503416821710D+02 + 0.1494057625173D+02 0.1484613409525D+02 0.1475102473159D+02 0.1465543509689D+02 + 0.1455955580205D+02 0.1446358083798D+02 0.1436770726367D+02 0.1427213487722D+02 + 0.1417706587013D+02 0.1408270446513D+02 0.1398925653788D+02 0.1389692922301D+02 + 0.1380593050504D+02 0.1371646879452D+02 0.1362875249035D+02 0.1354298952867D+02 + 0.1345938691917D+02 0.1337815026978D+02 0.1329948330037D+02 0.1322358734664D+02 + 0.1315066085515D+02 0.1308089887043D+02 0.1301449251573D+02 0.1295162846806D+02 + 0.1289248842925D+02 0.1283724859416D+02 0.1278607911753D+02 0.1273914358076D+02 + 0.1269659846035D+02 0.1265859259930D+02 0.1262526668328D+02 0.1259675272300D+02 + 0.1257317354460D+02 0.1255464228973D+02 0.1254126192693D+02 0.1253312477624D+02 + 0.1253031204864D+02 0.1253289340222D+02 0.1254092651675D+02 0.1255445668852D+02 + 0.1257351644721D+02 0.1259812519643D+02 0.1262828887991D+02 0.1266399967475D+02 + 0.1270523571365D+02 0.1275196083767D+02 0.1280412438099D+02 0.1286166098947D+02 + 0.1292449047415D+02 0.1299251770134D+02 0.1306563252048D+02 0.1314370973106D+02 + 0.1322660908967D+02 0.1331417535834D+02 0.1340623839488D+02 0.1350261328633D+02 + 0.1360310052592D+02 0.1370748623434D+02 0.1381554242555D+02 0.1392702731765D+02 + 0.1404168568870D+02 0.1415924927776D+02 0.1427943723077D+02 0.1440195659110D+02 + 0.1452650283427D+02 0.1465276044615D+02 0.1478040354393D+02 0.1490909653882D+02 + 0.1503849483939D+02 0.1516824559423D+02 0.1529798847241D+02 0.1542735648024D+02 + 0.1555597681233D+02 0.1568347173512D+02 0.1580945950073D+02 0.1593355528876D+02 + 0.1605537217372D+02 0.1617452211539D+02 0.1629061696946D+02 0.1640326951560D+02 + 0.1651209449986D+02 0.1661670968845D+02 0.1671673692955D+02 0.1681180321995D+02 + 0.1690154177303D+02 0.1698559308466D+02 0.1706360599339D+02 0.1713523873147D+02 + 0.1720015996294D+02 0.1725804980507D+02 0.1730860082968D+02 0.1735151904037D+02 + 0.1738652482217D+02 0.1741335385996D+02 0.1743175802188D+02 0.1744150620434D+02 + 0.1744238513512D+02 0.1743420013111D+02 0.1741677580736D+02 0.1738995673448D+02 + 0.1735360804103D+02 0.1730761595826D+02 0.1725188830437D+02 0.1718635490573D+02 + 0.1711096795272D+02 0.1702570228804D+02 0.1693055562554D+02 0.1682554869787D+02 + 0.1671072533154D+02 0.1658615244814D+02 0.1645191999080D+02 0.1630814077531D+02 + 0.1615495026540D+02 0.1599250627233D+02 0.1582098857884D+02 0.1564059848808D+02 + 0.1545155829849D+02 0.1525411070565D+02 0.1504851813275D+02 0.1483506199150D+02 + 0.1461404187556D+02 0.1438577468909D+02 0.1415059371314D+02 0.1390884761302D+02 + 0.1366089939009D+02 0.1340712528168D+02 0.1314791361308D+02 0.1288366360595D+02 + 0.1261478414771D+02 0.1234169252651D+02 0.1206481313703D+02 0.1178457616206D+02 + 0.1150141623542D+02 0.1121577109167D+02 0.1092808020829D+02 0.1063878344607D+02 + 0.1034831969365D+02 0.1005712552197D+02 0.9765633854593D+01 0.9474272659725D+01 + 0.9183463669844D+01 0.8893621134523D+01 0.8605150612130D+01 0.8318447805799D+01 + 0.8033897448886D+01 0.7751872244905D+01 0.7472731866678D+01 0.7196822018968D+01 + 0.6924473568934D+01 0.6656001747662D+01 0.6391705426421D+01 0.6131866470282D+01 + 0.5876749171531D+01 0.5626599764747D+01 0.5381646024957D+01 0.5142096949752D+01 + 0.4908142525726D+01 0.4679953579097D+01 0.4457681709840D+01 0.4241459308157D+01 + 0.4031399651611D+01 0.3827597080793D+01 0.3630127250904D+01 0.3439047456248D+01 + 0.3254397024220D+01 0.3076197775010D+01 0.2904454542943D+01 0.2739155755082D+01 + 0.2580274062471D+01 0.2427767019221D+01 0.2281577804448D+01 0.2141635981989D+01 + 0.2007858292693D+01 0.1880149474092D+01 0.1758403102204D+01 0.1642502450280D+01 + 0.1532321359335D+01 0.1427725115433D+01 0.1328571328779D+01 0.1234710809855D+01 + 0.1145988437978D+01 0.1062244017908D+01 0.9833131203151D+00 0.9090279021791D+00 + 0.8392179034817D+00 0.7737108167991D+00 0.7123332267331D+00 0.6549113164147D+00 + 0.6012715386446D+00 0.5512412495596D+00 0.5046493030528D+00 0.4613266045087D+00 + 0.4211066227529D+00 0.3838258594447D+00 0.3493242754685D+00 0.3174456741950D+00 + 0.2880380417868D+00 0.2609538450134D+00 0.2360502873157D+00 0.2131895241115D+00 + 0.1922388385730D+00 0.1730707793173D+00 0.1555632616448D+00 0.1395996341250D+00 + 0.1250687124739D+00 0.1118647827854D+00 0.9988757627363D-01 0.8904221775259D-01 + 0.7923915012585D-01 0.7039403718406D-01 0.6242764700823D-01 0.5526571825917D-01 + 0.4883881159568D-01 0.4308214840877D-01 0.3793543898820D-01 0.3334270215298D-01 + 0.2925207827966D-01 0.2561563755543D-01 0.2238918516641D-01 0.1953206500954D-01 + 0.1700696338870D-01 0.1477971402559D-01 0.1281910558411D-01 0.1109669277501D-01 + 0.9586611978082D-02 0.8265402191403D-02 0.7111831994219D-02 0.6106733091787D-02 + 0.5232840898083D-02 0.4474642506570D-02 0.3818232300503D-02 0.3251175363207D-02 + 0.2762378765440D-02 0.2341970731730D-02 0.1981187620300D-02 0.1672268591959D-02 + 0.1408357791855D-02 0.1183413824087D-02 0.9921262625068D-03 0.8298389112408D-03 + 0.6924795050615D-03 0.5764955223370D-03 0.4787957713272D-03 0.3966974036036D-03 + 0.3278780058234D-03 0.2703324224675D-03 0.2223339669515D-03 0.1823996862603D-03 + 0.1492593544486D-03 0.1218278825725D-03 0.9918084644082D-04 0.8053284862012D-04 + 0.6521844704859D-04 0.5267539909418D-04 0.4242998664975D-04 0.3408420465204D-04 + 0.2730461202667D-04 0.2181266032122D-04 0.1737633104326D-04 0.1380292785088D-04 + 0.1093288415605D-04 0.8634460327266D-05 0.6799217469453D-05 0.5338166688048D-05 + 0.4178503798371D-05 0.3260849624251D-05 0.2536925355569D-05 0.1967600928065D-05 + 0.1521262082978D-05 0.1172448697785D-05 0.9007231958380D-06 0.6897333884535D-06 + 0.5264390262926D-06 0.4004756864531D-06 0.3036334463331D-06 0.2294311426058D-06 + 0.1727699296243D-06 0.1296523801883D-06 0.9695555434418D-07 0.7224833755444D-07 + 0.5364495412389D-07 0.3968792824892D-07 0.2925492359621D-07 0.2148487018577D-07 + 0.1571960905391D-07 0.1145797257597D-07 0.8319790826277D-08 0.6017789029573D-08 + 0.4335732971971D-08 0.3111501210427D-08 0.2224026310884D-08 0.1583261845820D-08 + 0.1122505778133D-08 0.7925511972902D-09 0.5572481150962D-09 0.3901501848434D-09 + 0.2719919714732D-09 0.1887992596095D-09 0.1304797266881D-09 0.8977650478949D-10 + 0.6149465109714D-10 0.4193192573951D-10 0.2846181872530D-10 0.1922950697694D-10 + 0.1293118508831D-10 0.8654658341422D-11 0.5764735988090D-11 0.3821228543756D-11 + 0.2520557646192D-11 0.1654382614633D-11 0.1080429420909D-11 0.7020259257620D-12 + 0.4538174403840D-12 0.2918470536834D-12 0.1867025640263D-12 0.1188066862683D-12 + 0.7519728694717D-13 0.4733798673502D-13 0.2963744416101D-13 0.1845332052838D-13 + 0.1142595378629D-13 0.7035431474970D-14 diff --git a/Test/Ni4/copyWtoV.sh b/Test/Ni4/copyWtoV.sh new file mode 100755 index 000000000..60a2d2493 --- /dev/null +++ b/Test/Ni4/copyWtoV.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +cp w_ni4.0 v_ni4.0 +cp w_ni4.1 v_ni4.1 +cp w_ni4.2 v_ni4.2 +cp w_ni4.3 v_ni4.3 + diff --git a/Test/Ni4/i_lsms b/Test/Ni4/i_lsms new file mode 100644 index 000000000..79b39a080 --- /dev/null +++ b/Test/Ni4/i_lsms @@ -0,0 +1,80 @@ +systemid="ni4" +system_title = "Nickel test for LSMS 3" +pot_in_type=1 +pot_out_type=1 +num_atoms=4 +nspin=3 +mtasa=0 + +iprint=0 +default_iprint=-1 +print_node=0 +-- istop="buildKKRMatrix" +istop="main" + +nscf=25 +writeSteps=1 + +xRepeat=1 +yRepeat=1 +zRepeat=1 +makeTypesUnique=1 + +-- energyContour = {npts=1,grid=0,ebot=-0.2,etop=0.0,eitop=0.825,eibot=0.1} +-- energyContour = {npts=11,grid=2,ebot=-0.3,etop=0.0,eitop=0.825,eibot=0.0025,maxGroupSize=5} +energyContour = {npts=31,grid=2,ebot=-0.4,etop=0.0,eitop=0.825,eibot=0.0025} + +a = 6.6594 + +bravais = {} +bravais[1]={a,0,0} +bravais[2]={0,a,0} +bravais[3]={0,0,a} + +-- site_default={lmax=3,rLIZ=12.5,rsteps={9.5,91.5,93.2,99.9},atom="Ni",Z=28,Zc=10,Zs=8,Zv=10,rad=2} +-- site_default={lmax=3,rLIZ=12.5,rsteps={89.5,91.5,93.2,99.9},atom="Ni",Z=28,Zc=10,Zs=8,Zv=10,rad=2} +-- site_default={lmax=3,rLIZ=5.5,rsteps={89.5,91.5,93.2,99.9},atom="Ni",Z=28,Zc=10,Zs=8,Zv=10,rad=2} +site_default={lmax=3,rLIZ=12.5,rsteps={89.5,91.5,93.2,99.9},atom="Ni",Z=28,Zc=10,Zs=8,Zv=10,rad=2} + +--[[ +print("Site defaults:") +for k,v in pairs(site_default) do + print(k," : ",v) +end +--]] + +-- Possible choices of mixing parameters +-- quantity : charge, potential, moment_magnitude, moment_direction, noQuantity +-- algorithm : simple, broyden, noAlgorithm +-- mixing={} +-- mixing = { {quantity = "charge", algorithm = "simple", mixing_parameter = 0.05} } +mixing = { {quantity = "potential", algorithm = "simple", mixing_parameter = 0.05} } +-- mixing = { {quantity = "potential", algorithm = "simple", mixing_parameter = 0.10} } +--mixing = { {quantity = "potential", algorithm = "broyden", mixing_parameter = 0.05}, {quantity = "moment_magnitude", algorithm = "noAlgorithm", mixing_parameter = 0.01} } + +numberOfMixQuantities = 0 + +for k,v in pairs(mixing) do + numberOfMixQuantities = numberOfMixQuantities + 1 +end + +site = {} +for i =1,num_atoms do site[i]={} end + +site[1].pos={0,0,0} +site[1].evec={0,0,1} +site[2].pos={0.5*a,0.5*a,0} +site[2].evec={0,0,1} +site[3].pos={0.5*a,0,0.5*a} +site[3].evec={0,0,1} +site[4].pos={0,0.5*a,0.5*a} +site[4].evec={0,0,1} + +-- set site defaults +for i =1,num_atoms do + for k,v in pairs(site_default) do + if(site[i][k]==nil) then site[i][k]=v end + end +end + + diff --git a/Test/Ni4/i_lsms_nc b/Test/Ni4/i_lsms_nc new file mode 100644 index 000000000..2a740285d --- /dev/null +++ b/Test/Ni4/i_lsms_nc @@ -0,0 +1,82 @@ +systemid="ni4" +system_title = "Nickel test for LSMS 3" +pot_in_type=1 +pot_out_type=1 +num_atoms=4 +nspin=3 +mtasa=0 + +iprint=0 +default_iprint=-1 +print_node=0 +-- istop="buildKKRMatrix" +istop="main" + +nscf=40 +writeSteps=1 + +xRepeat=1 +yRepeat=1 +zRepeat=1 +makeTypesUnique=1 + +-- energyContour = {npts=1,grid=0,ebot=-0.2,etop=0.0,eitop=0.825,eibot=0.1} +-- energyContour = {npts=11,grid=2,ebot=-0.3,etop=0.0,eitop=0.825,eibot=0.0025,maxGroupSize=5} +energyContour = {npts=31,grid=2,ebot=-0.4,etop=0.0,eitop=0.825,eibot=0.0025} + +a = 6.6594 + +bravais = {} +bravais[1]={a,0,0} +bravais[2]={0,a,0} +bravais[3]={0,0,a} + +-- site_default={lmax=3,rLIZ=12.5,rsteps={9.5,91.5,93.2,99.9},atom="Ni",Z=28,Zc=10,Zs=8,Zv=10,rad=2} +-- site_default={lmax=3,rLIZ=12.5,rsteps={89.5,91.5,93.2,99.9},atom="Ni",Z=28,Zc=10,Zs=8,Zv=10,rad=2} +-- site_default={lmax=3,rLIZ=5.5,rsteps={89.5,91.5,93.2,99.9},atom="Ni",Z=28,Zc=10,Zs=8,Zv=10,rad=2} +site_default={lmax=3,rLIZ=12.5,rsteps={89.5,91.5,93.2,99.9},atom="Ni",Z=28,Zc=10,Zs=8,Zv=10,rad=2} + +--[[ +print("Site defaults:") +for k,v in pairs(site_default) do + print(k," : ",v) +end +--]] + +-- Possible choices of mixing parameters +-- quantity : charge, potential, moment_magnitude, moment_direction, noQuantity +-- algorithm : simple, broyden, noAlgorithm +-- mixing={} +-- mixing = { {quantity = "charge", algorithm = "simple", mixing_parameter = 0.05} } +mixing = { {quantity = "potential", algorithm = "simple", mixing_parameter = 0.05} } +-- mixing = { {quantity = "potential", algorithm = "simple", mixing_parameter = 0.10} } +--mixing = { {quantity = "potential", algorithm = "broyden", mixing_parameter = 0.05}, {quantity = "moment_magnitude", algorithm = "noAlgorithm", mixing_parameter = 0.01} } + +numberOfMixQuantities = 0 + +for k,v in pairs(mixing) do + numberOfMixQuantities = numberOfMixQuantities + 1 +end + +site = {} +for i =1,num_atoms do site[i]={} end + +sqrt05=(0.5)^(0.5) + +site[1].pos={0,0,0} +site[1].evec={0,sqrt05,sqrt05} +site[2].pos={0.5*a,0.5*a,0} +site[2].evec={0,-sqrt05,sqrt05} +site[3].pos={0.5*a,0,0.5*a} +site[3].evec={0,sqrt05,-sqrt05} +site[4].pos={0,0.5*a,0.5*a} +site[4].evec={0,-sqrt05,-sqrt05} + +-- set site defaults +for i =1,num_atoms do + for k,v in pairs(site_default) do + if(site[i][k]==nil) then site[i][k]=v end + end +end + + diff --git a/Test/Ni4/q_lsms b/Test/Ni4/q_lsms new file mode 100644 index 000000000..36030174a --- /dev/null +++ b/Test/Ni4/q_lsms @@ -0,0 +1,19 @@ +#! /usr/bin/env bash +#PBS -joe +#PBS -N Ni_LSMS3 +#PBS -l walltime=2:00:00 +#PBS -l nodes=1 +#PBS -l feature=gpu +#PBS -A MAT020 + +#------------------------------------------- + + +#--Change directory to the working directory. +cd $PBS_O_WORKDIR + +#--Run the executable. +date +export OMP_NUM_THREADS=4 +aprun -n 1 -d 4 $HOME/LSMS_3/bin/lsms i_lsms > o_lsms_ni +date diff --git a/Test/Ni4/v_ni4.0 b/Test/Ni4/v_ni4.0 new file mode 100644 index 000000000..4e8a87815 --- /dev/null +++ b/Test/Ni4/v_ni4.0 @@ -0,0 +1,1554 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Ni. + 2 -0.3322713216605D-24 + LSMS: xx z= 28. xvalws= 5.28292 + 28. 6.55000 10. 0.6401316680236D+00 + -0.1113096740000D+02 0.8563086195639D+00 1010 +-0.5599696222824D+02-0.5599692578589D+02-0.5599688890636D+02-0.5599685158441D+02 +-0.5599681381473D+02-0.5599677559194D+02-0.5599673691063D+02-0.5599669776527D+02 +-0.5599665815031D+02-0.5599661806011D+02-0.5599657748897D+02-0.5599653643111D+02 +-0.5599649488071D+02-0.5599645283185D+02-0.5599641027854D+02-0.5599636721475D+02 +-0.5599632363433D+02-0.5599627953111D+02-0.5599623489879D+02-0.5599618973104D+02 +-0.5599614402142D+02-0.5599609776345D+02-0.5599605095053D+02-0.5599600357602D+02 +-0.5599595563317D+02-0.5599590711516D+02-0.5599585801509D+02-0.5599580832599D+02 +-0.5599575804078D+02-0.5599570715230D+02-0.5599565565333D+02-0.5599560353654D+02 +-0.5599555079451D+02-0.5599549741974D+02-0.5599544340465D+02-0.5599538874153D+02 +-0.5599533342264D+02-0.5599527744008D+02-0.5599522078591D+02-0.5599516345205D+02 +-0.5599510543037D+02-0.5599504671259D+02-0.5599498729038D+02-0.5599492715528D+02 +-0.5599486629873D+02-0.5599480471208D+02-0.5599474238656D+02-0.5599467931332D+02 +-0.5599461548337D+02-0.5599455088765D+02-0.5599448551696D+02-0.5599441936200D+02 +-0.5599435241335D+02-0.5599428466151D+02-0.5599421609682D+02-0.5599414670954D+02 +-0.5599407648980D+02-0.5599400542760D+02-0.5599393351283D+02-0.5599386073527D+02 +-0.5599378708456D+02-0.5599371255022D+02-0.5599363712166D+02-0.5599356078813D+02 +-0.5599348353878D+02-0.5599340536263D+02-0.5599332624854D+02-0.5599324618526D+02 +-0.5599316516140D+02-0.5599308316543D+02-0.5599300018570D+02-0.5599291621038D+02 +-0.5599283122754D+02-0.5599274522508D+02-0.5599265819077D+02-0.5599257011222D+02 +-0.5599248097690D+02-0.5599239077213D+02-0.5599229948507D+02-0.5599220710274D+02 +-0.5599211361199D+02-0.5599201899952D+02-0.5599192325186D+02-0.5599182635539D+02 +-0.5599172829632D+02-0.5599162906071D+02-0.5599152863442D+02-0.5599142700317D+02 +-0.5599132415249D+02-0.5599122006776D+02-0.5599111473416D+02-0.5599100813669D+02 +-0.5599090026020D+02-0.5599079108932D+02-0.5599068060852D+02-0.5599056880208D+02 +-0.5599045565409D+02-0.5599034114845D+02-0.5599022526885D+02-0.5599010799881D+02 +-0.5598998932164D+02-0.5598986922044D+02-0.5598974767813D+02-0.5598962467740D+02 +-0.5598950020074D+02-0.5598937423045D+02-0.5598924674859D+02-0.5598911773702D+02 +-0.5598898717737D+02-0.5598885505105D+02-0.5598872133927D+02-0.5598858602299D+02 +-0.5598844908295D+02-0.5598831049965D+02-0.5598817025337D+02-0.5598802832414D+02 +-0.5598788469176D+02-0.5598773933579D+02-0.5598759223552D+02-0.5598744337002D+02 +-0.5598729271809D+02-0.5598714025829D+02-0.5598698596891D+02-0.5598682982799D+02 +-0.5598667181329D+02-0.5598651190232D+02-0.5598635007231D+02-0.5598618630022D+02 +-0.5598602056272D+02-0.5598585283623D+02-0.5598568309685D+02-0.5598551132043D+02 +-0.5598533748249D+02-0.5598516155828D+02-0.5598498352276D+02-0.5598480335057D+02 +-0.5598462101605D+02-0.5598443649324D+02-0.5598424975586D+02-0.5598406077731D+02 +-0.5598386953068D+02-0.5598367598873D+02-0.5598348012390D+02-0.5598328190829D+02 +-0.5598308131367D+02-0.5598287831146D+02-0.5598267287276D+02-0.5598246496830D+02 +-0.5598225456847D+02-0.5598204164328D+02-0.5598182616243D+02-0.5598160809520D+02 +-0.5598138741053D+02-0.5598116407698D+02-0.5598093806274D+02-0.5598070933560D+02 +-0.5598047786299D+02-0.5598024361191D+02-0.5598000654900D+02-0.5597976664047D+02 +-0.5597952385215D+02-0.5597927814943D+02-0.5597902949731D+02-0.5597877786036D+02 +-0.5597852320271D+02-0.5597826548807D+02-0.5597800467972D+02-0.5597774074049D+02 +-0.5597747363277D+02-0.5597720331847D+02-0.5597692975908D+02-0.5597665291561D+02 +-0.5597637274859D+02-0.5597608921810D+02-0.5597580228370D+02-0.5597551190451D+02 +-0.5597521803912D+02-0.5597492064565D+02-0.5597461968170D+02-0.5597431510435D+02 +-0.5597400687019D+02-0.5597369493526D+02-0.5597337925510D+02-0.5597305978468D+02 +-0.5597273647846D+02-0.5597240929033D+02-0.5597207817363D+02-0.5597174308115D+02 +-0.5597140396509D+02-0.5597106077709D+02-0.5597071346821D+02-0.5597036198890D+02 +-0.5597000628904D+02-0.5596964631789D+02-0.5596928202409D+02-0.5596891335569D+02 +-0.5596854026009D+02-0.5596816268406D+02-0.5596778057374D+02-0.5596739387460D+02 +-0.5596700253148D+02-0.5596660648853D+02-0.5596620568924D+02-0.5596580007642D+02 +-0.5596538959218D+02-0.5596497417795D+02-0.5596455377443D+02-0.5596412832164D+02 +-0.5596369775883D+02-0.5596326202456D+02-0.5596282105662D+02-0.5596237479207D+02 +-0.5596192316720D+02-0.5596146611754D+02-0.5596100357783D+02-0.5596053548203D+02 +-0.5596006176331D+02-0.5595958235402D+02-0.5595909718570D+02-0.5595860618908D+02 +-0.5595810929402D+02-0.5595760642956D+02-0.5595709752389D+02-0.5595658250430D+02 +-0.5595606129723D+02-0.5595553382823D+02-0.5595500002195D+02-0.5595445980212D+02 +-0.5595391309155D+02-0.5595335981214D+02-0.5595279988483D+02-0.5595223322959D+02 +-0.5595165976547D+02-0.5595107941049D+02-0.5595049208171D+02-0.5594989769518D+02 +-0.5594929616595D+02-0.5594868740802D+02-0.5594807133437D+02-0.5594744785691D+02 +-0.5594681688652D+02-0.5594617833297D+02-0.5594553210495D+02-0.5594487811005D+02 +-0.5594421625474D+02-0.5594354644436D+02-0.5594286858311D+02-0.5594218257403D+02 +-0.5594148831899D+02-0.5594078571866D+02-0.5594007467252D+02-0.5593935507885D+02 +-0.5593862683468D+02-0.5593788983579D+02-0.5593714397671D+02-0.5593638915070D+02 +-0.5593562524973D+02-0.5593485216444D+02-0.5593406978417D+02-0.5593327799692D+02 +-0.5593247668933D+02-0.5593166574665D+02-0.5593084505278D+02-0.5593001449019D+02 +-0.5592917393992D+02-0.5592832328159D+02-0.5592746239336D+02-0.5592659115190D+02 +-0.5592570943241D+02-0.5592481710855D+02-0.5592391405247D+02-0.5592300013478D+02 +-0.5592207522450D+02-0.5592113918908D+02-0.5592019189435D+02-0.5591923320453D+02 +-0.5591826298219D+02-0.5591728108823D+02-0.5591628738187D+02-0.5591528172062D+02 +-0.5591426396027D+02-0.5591323395486D+02-0.5591219155665D+02-0.5591113661612D+02 +-0.5591006898193D+02-0.5590898850093D+02-0.5590789501807D+02-0.5590678837645D+02 +-0.5590566841727D+02-0.5590453497978D+02-0.5590338790131D+02-0.5590222701719D+02 +-0.5590105216076D+02-0.5589986316335D+02-0.5589865985424D+02-0.5589744206062D+02 +-0.5589620960760D+02-0.5589496231817D+02-0.5589370001315D+02-0.5589242251122D+02 +-0.5589112962883D+02-0.5588982118021D+02-0.5588849697734D+02-0.5588715682990D+02 +-0.5588580054527D+02-0.5588442792851D+02-0.5588303878228D+02-0.5588163290685D+02 +-0.5588021010008D+02-0.5587877015737D+02-0.5587731287161D+02-0.5587583803320D+02 +-0.5587434542999D+02-0.5587283484724D+02-0.5587130606761D+02-0.5586975887112D+02 +-0.5586819303509D+02-0.5586660833417D+02-0.5586500454025D+02-0.5586338142245D+02 +-0.5586173874708D+02-0.5586007627761D+02-0.5585839377464D+02-0.5585669099585D+02 +-0.5585496769597D+02-0.5585322362676D+02-0.5585145853695D+02-0.5584967217221D+02 +-0.5584786427512D+02-0.5584603458514D+02-0.5584418283853D+02-0.5584230876837D+02 +-0.5584041210449D+02-0.5583849257340D+02-0.5583654989832D+02-0.5583458379908D+02 +-0.5583259399211D+02-0.5583058019037D+02-0.5582854210335D+02-0.5582647943699D+02 +-0.5582439189365D+02-0.5582227917207D+02-0.5582014096732D+02-0.5581797697076D+02 +-0.5581578686998D+02-0.5581357034878D+02-0.5581132708710D+02-0.5580905676100D+02 +-0.5580675904257D+02-0.5580443359992D+02-0.5580208009713D+02-0.5579969819415D+02 +-0.5579728754684D+02-0.5579484780684D+02-0.5579237862153D+02-0.5578987963404D+02 +-0.5578735048312D+02-0.5578479080313D+02-0.5578220022398D+02-0.5577957837107D+02 +-0.5577692486524D+02-0.5577423932271D+02-0.5577152135503D+02-0.5576877056901D+02 +-0.5576598656669D+02-0.5576316894524D+02-0.5576031729696D+02-0.5575743120915D+02 +-0.5575451026411D+02-0.5575155403905D+02-0.5574856210601D+02-0.5574553403187D+02 +-0.5574246937818D+02-0.5573936770121D+02-0.5573622855179D+02-0.5573305147530D+02 +-0.5572983601159D+02-0.5572658169491D+02-0.5572328805384D+02-0.5571995461125D+02 +-0.5571658088417D+02-0.5571316638379D+02-0.5570971061534D+02-0.5570621307804D+02 +-0.5570267326504D+02-0.5569909066329D+02-0.5569546475356D+02-0.5569179501028D+02 +-0.5568808090150D+02-0.5568432188882D+02-0.5568051742730D+02-0.5567666696540D+02 +-0.5567276994485D+02-0.5566882580066D+02-0.5566483396095D+02-0.5566079384693D+02 +-0.5565670487277D+02-0.5565256644557D+02-0.5564837796522D+02-0.5564413882437D+02 +-0.5563984840830D+02-0.5563550609485D+02-0.5563111125436D+02-0.5562666324952D+02 +-0.5562216143533D+02-0.5561760515901D+02-0.5561299375987D+02-0.5560832656927D+02 +-0.5560360291049D+02-0.5559882209863D+02-0.5559398344056D+02-0.5558908623478D+02 +-0.5558412977135D+02-0.5557911333176D+02-0.5557403618889D+02-0.5556889760684D+02 +-0.5556369684090D+02-0.5555843313738D+02-0.5555310573357D+02-0.5554771385759D+02 +-0.5554225672831D+02-0.5553673355525D+02-0.5553114353844D+02-0.5552548586837D+02 +-0.5551975972583D+02-0.5551396428182D+02-0.5550809869745D+02-0.5550216212382D+02 +-0.5549615370192D+02-0.5549007256249D+02-0.5548391782594D+02-0.5547768860221D+02 +-0.5547138399068D+02-0.5546500308004D+02-0.5545854494815D+02-0.5545200866198D+02 +-0.5544539327745D+02-0.5543869783930D+02-0.5543192138103D+02-0.5542506292469D+02 +-0.5541812148084D+02-0.5541109604840D+02-0.5540398561451D+02-0.5539678915440D+02 +-0.5538950563133D+02-0.5538213399637D+02-0.5537467318837D+02-0.5536712213374D+02 +-0.5535947974639D+02-0.5535174492760D+02-0.5534391656584D+02-0.5533599353668D+02 +-0.5532797470268D+02-0.5531985891319D+02-0.5531164500429D+02-0.5530333179863D+02 +-0.5529491810528D+02-0.5528640271963D+02-0.5527778442326D+02-0.5526906198374D+02 +-0.5526023415460D+02-0.5525129967511D+02-0.5524225727020D+02-0.5523310565028D+02 +-0.5522384351115D+02-0.5521446953384D+02-0.5520498238448D+02-0.5519538071417D+02 +-0.5518566315882D+02-0.5517582833908D+02-0.5516587486011D+02-0.5515580131153D+02 +-0.5514560626725D+02-0.5513528828533D+02-0.5512484590785D+02-0.5511427766079D+02 +-0.5510358205390D+02-0.5509275758052D+02-0.5508180271751D+02-0.5507071592509D+02 +-0.5505949564671D+02-0.5504814030891D+02-0.5503664832120D+02-0.5502501807596D+02 +-0.5501324794826D+02-0.5500133629576D+02-0.5498928145859D+02-0.5497708175923D+02 +-0.5496473550236D+02-0.5495224097477D+02-0.5493959644521D+02-0.5492680016431D+02 +-0.5491385036441D+02-0.5490074525951D+02-0.5488748304510D+02-0.5487406189808D+02 +-0.5486047997664D+02-0.5484673542016D+02-0.5483282634909D+02-0.5481875086488D+02 +-0.5480450704984D+02-0.5479009296707D+02-0.5477550666034D+02-0.5476074615405D+02 +-0.5474580945308D+02-0.5473069454274D+02-0.5471539938866D+02-0.5469992193677D+02 +-0.5468426011314D+02-0.5466841182398D+02-0.5465237495554D+02-0.5463614737403D+02 +-0.5461972692559D+02-0.5460311143622D+02-0.5458629871174D+02-0.5456928653772D+02 +-0.5455207267943D+02-0.5453465488185D+02-0.5451703086959D+02-0.5449919834687D+02 +-0.5448115499752D+02-0.5446289848492D+02-0.5444442645202D+02-0.5442573652133D+02 +-0.5440682629490D+02-0.5438769335434D+02-0.5436833526081D+02-0.5434874955506D+02 +-0.5432893375745D+02-0.5430888536794D+02-0.5428860186618D+02-0.5426808071152D+02 +-0.5424731934305D+02-0.5422631517968D+02-0.5420506562020D+02-0.5418356804332D+02 +-0.5416181980777D+02-0.5413981825241D+02-0.5411756069626D+02-0.5409504443864D+02 +-0.5407226675929D+02-0.5404922491843D+02-0.5402591615695D+02-0.5400233769649D+02 +-0.5397848673961D+02-0.5395436046993D+02-0.5392995605226D+02-0.5390527063280D+02 +-0.5388030133932D+02-0.5385504528129D+02-0.5382949955012D+02-0.5380366121933D+02 +-0.5377752734478D+02-0.5375109496485D+02-0.5372436110071D+02-0.5369732275652D+02 +-0.5366997691970D+02-0.5364232056114D+02-0.5361435063550D+02-0.5358606408144D+02 +-0.5355745782194D+02-0.5352852876455D+02-0.5349927380169D+02-0.5346968981097D+02 +-0.5343977365546D+02-0.5340952218404D+02-0.5337893223173D+02-0.5334800061997D+02 +-0.5331672415703D+02-0.5328509963831D+02-0.5325312384670D+02-0.5322079355294D+02 +-0.5318810551600D+02-0.5315505648344D+02-0.5312164319178D+02-0.5308786236690D+02 +-0.5305371072443D+02-0.5301918497011D+02-0.5298428180021D+02-0.5294899790196D+02 +-0.5291332995388D+02-0.5287727462625D+02-0.5284082858148D+02-0.5280398847456D+02 +-0.5276675095342D+02-0.5272911265938D+02-0.5269107022753D+02-0.5265262028717D+02 +-0.5261375946222D+02-0.5257448437158D+02-0.5253479162958D+02-0.5249467784638D+02 +-0.5245413962833D+02-0.5241317357839D+02-0.5237177629651D+02-0.5232994437998D+02 +-0.5228767442386D+02-0.5224496302128D+02-0.5220180676382D+02-0.5215820224186D+02 +-0.5211414604488D+02-0.5206963476182D+02-0.5202466498135D+02-0.5197923329218D+02 +-0.5193333628333D+02-0.5188697054440D+02-0.5184013266581D+02-0.5179281923901D+02 +-0.5174502685673D+02-0.5169675211312D+02-0.5164799160395D+02-0.5159874192676D+02 +-0.5154899968095D+02-0.5149876146794D+02-0.5144802389119D+02-0.5139678355629D+02 +-0.5134503707098D+02-0.5129278104517D+02-0.5124001209089D+02-0.5118672682225D+02 +-0.5113292185539D+02-0.5107859380833D+02-0.5102373930087D+02-0.5096835495445D+02 +-0.5091243739191D+02-0.5085598323730D+02-0.5079898911566D+02-0.5074145165270D+02 +-0.5068336747456D+02-0.5062473320742D+02-0.5056554547719D+02-0.5050580090915D+02 +-0.5044549612750D+02-0.5038462775495D+02-0.5032319241231D+02-0.5026118671799D+02 +-0.5019860728753D+02-0.5013545073308D+02-0.5007171366293D+02-0.5000739268094D+02 +-0.4994248438603D+02-0.4987698537166D+02-0.4981089222525D+02-0.4974420152767D+02 +-0.4967690985269D+02-0.4960901376648D+02-0.4954050982708D+02-0.4947139458392D+02 +-0.4940166457737D+02-0.4933131633826D+02-0.4926034638753D+02-0.4918875123586D+02 +-0.4911652738334D+02-0.4904367131924D+02-0.4897017952180D+02-0.4889604845812D+02 +-0.4882127458414D+02-0.4874585434461D+02-0.4866978417330D+02-0.4859306049320D+02 +-0.4851567971689D+02-0.4843763824698D+02-0.4835893247673D+02-0.4827955879080D+02 +-0.4819951356609D+02-0.4811879317284D+02-0.4803739397580D+02-0.4795531233565D+02 +-0.4787254461052D+02-0.4778908715782D+02-0.4770493633617D+02-0.4762008850757D+02 +-0.4753454003985D+02-0.4744828730923D+02-0.4736132670323D+02-0.4727365462373D+02 +-0.4718526749029D+02-0.4709616174376D+02-0.4700633385008D+02-0.4691578030434D+02 +-0.4682449763507D+02-0.4673248240881D+02-0.4663973123487D+02-0.4654624077030D+02 +-0.4645200772512D+02-0.4635702886768D+02-0.4626130103029D+02-0.4616482111490D+02 +-0.4606758609896D+02-0.4596959304142D+02-0.4587083908873D+02-0.4577132148090D+02 +-0.4567103755758D+02-0.4556998476407D+02-0.4546816065717D+02-0.4536556291099D+02 +-0.4526218932245D+02-0.4515803781656D+02-0.4505310645130D+02-0.4494739342218D+02 +-0.4484089706625D+02-0.4473361586559D+02-0.4462554845016D+02-0.4451669359998D+02 +-0.4440705024651D+02-0.4429661747322D+02-0.4418539451519D+02-0.4407338075785D+02 +-0.4396057573455D+02-0.4384697912320D+02-0.4373259074173D+02-0.4361741054236D+02 +-0.4350143860488D+02-0.4338467512865D+02-0.4326712042352D+02-0.4314877489972D+02 +-0.4302963905669D+02-0.4290971347096D+02-0.4278899878323D+02-0.4266749568475D+02 +-0.4254520490309D+02-0.4242212718753D+02-0.4229826329427D+02-0.4217361397159D+02 +-0.4204817994520D+02-0.4192196190406D+02-0.4179496048687D+02-0.4166717626939D+02 +-0.4153860975298D+02-0.4140926135451D+02-0.4127913139777D+02-0.4114822010683D+02 +-0.4101652760126D+02-0.4088405389359D+02-0.4075079888899D+02-0.4061676238745D+02 +-0.4048194408828D+02-0.4034634359727D+02-0.4020996043623D+02-0.4007279405504D+02 +-0.3993484384613D+02-0.3979610916110D+02-0.3965658932967D+02-0.3951628368036D+02 +-0.3937519156311D+02-0.3923331237331D+02-0.3909064557714D+02-0.3894719073791D+02 +-0.3880294754316D+02-0.3865791583219D+02-0.3851209562376D+02-0.3836548714373D+02 +-0.3821809085222D+02-0.3806990747022D+02-0.3792093800519D+02-0.3777118377560D+02 +-0.3762064643396D+02-0.3746932798842D+02-0.3731723082241D+02-0.3716435771246D+02 +-0.3701071184383D+02-0.3685629682396D+02-0.3670111669348D+02-0.3654517593490D+02 +-0.3638847947866D+02-0.3623103270670D+02-0.3607284145339D+02-0.3591391200380D+02 +-0.3575425108946D+02-0.3559386588133D+02-0.3543276398037D+02-0.3527095340541D+02 +-0.3510844257863D+02-0.3494524030858D+02-0.3478135577083D+02-0.3461679848643D+02 +-0.3445157829811D+02-0.3428570534457D+02-0.3411919003274D+02-0.3395204300829D+02 +-0.3378427512447D+02-0.3361589740948D+02-0.3344692103249D+02-0.3327735726840D+02 +-0.3310721746174D+02-0.3293651298968D+02-0.3276525522435D+02-0.3259345549488D+02 +-0.3242112504914D+02-0.3224827501549D+02-0.3207491636476D+02-0.3190105987274D+02 +-0.3172671608332D+02-0.3155189527260D+02-0.3137660741417D+02-0.3120086214594D+02 +-0.3102466873853D+02-0.3084803606581D+02-0.3067097257761D+02-0.3049348627496D+02 +-0.3031558468815D+02-0.3013727485790D+02-0.2995856331977D+02-0.2977945609235D+02 +-0.2959995866920D+02-0.2942007601496D+02-0.2923981256594D+02-0.2905917223523D+02 +-0.2887815842271D+02-0.2869677403014D+02-0.2851502148146D+02-0.2833290274854D+02 +-0.2815041938242D+02-0.2796757255018D+02-0.2778436307759D+02-0.2760079149730D+02 +-0.2741685810279D+02-0.2723256300783D+02-0.2704790621131D+02-0.2686288766711D+02 +-0.2667750735885D+02-0.2649176537888D+02-0.2630566201102D+02-0.2611919781653D+02 +-0.2593237372222D+02-0.2574519111010D+02-0.2555765190721D+02-0.2536975867460D+02 +-0.2518151469399D+02-0.2499292405051D+02-0.2480399171006D+02-0.2461472358916D+02 +-0.2442512661564D+02-0.2423520877796D+02-0.2404497916121D+02-0.2385444796763D+02 +-0.2366362651966D+02-0.2347252724381D+02-0.2328116363345D+02-0.2308955018945D+02 +-0.2289770233772D+02-0.2270563632319D+02-0.2251336908079D+02-0.2232091808423D+02 +-0.2212830117462D+02-0.2193553637155D+02-0.2174264167034D+02-0.2154963482993D+02 +-0.2135653315663D+02-0.2116335328969D+02-0.2097011099509D+02-0.2077682097407D+02 +-0.2058349669315D+02-0.2039015024168D+02-0.2019679222273D+02-0.2000343168188D+02 +-0.1981007607758D+02-0.1961673129514D+02-0.1942340170518D+02-0.1923009026563D+02 +-0.1903679866507D+02-0.1884352750377D+02-0.1865027650752D+02-0.1845704476868D+02 +-0.1826383100789D+02-0.1807063384981D+02-0.1787745210610D+02-0.1768428505888D+02 +-0.1749113273862D+02-0.1729799619070D+02-0.1710487772595D+02-0.1691178115078D+02 +-0.1671871197403D+02-0.1652567758787D+02-0.1633268742122D+02-0.1613975306488D+02 +-0.1594688836807D+02-0.1575410950680D+02-0.1556143502474D+02-0.1536888584794D+02 +-0.1517648527479D+02-0.1498425894283D+02-0.1479223477439D+02-0.1460044290282D+02 +-0.1440891558124D+02-0.1421768707594D+02-0.1402679354599D+02-0.1383627291119D+02 +-0.1364616470994D+02-0.1345650994882D+02-0.1326735094526D+02-0.1307873116512D+02 +-0.1289069505616D+02-0.1270328787905D+02-0.1251655553691D+02-0.1233054440456D+02 +-0.1214530115858D+02-0.1196087260900D+02-0.1177730553358D+02-0.1159464651556D+02 +-0.1141294178546D+02-0.1123223706771D+02-0.1105257743276D+02-0.1087400715511D+02 +-0.1069656957788D+02-0.1052030698433D+02-0.1034526047671D+02-0.1017146986276D+02 +-0.9998973550304D+01-0.9827808449991D+01-0.9658009886550D+01-0.9489611518644D+01 +-0.9322645267466D+01-0.9157141254155D+01-0.8993127746062D+01-0.8830631111875D+01 +-0.8669675785557D+01-0.8510284239016D+01-0.8352476963414D+01-0.8196272458942D+01 +-0.8041687232918D+01-0.7888735805962D+01-0.7737430726056D+01-0.7587782590186D+01 +-0.7439800073312D+01-0.7293489964330D+01-0.7148857208720D+01-0.7005904957514D+01 +-0.6864634622219D+01-0.6725045935325D+01-0.6587137015995D+01-0.6450904440533D+01 +-0.6316343317221D+01-0.6183447365098D+01-0.6052208996262D+01-0.5922619401257D+01 +-0.5794668637125D+01-0.5668345717679D+01-0.5543638705576D+01-0.5420534805760D+01 +-0.5299020459852D+01-0.5179081441071D+01-0.5060702949271D+01-0.4943869705704D+01 +-0.4828566047100D+01-0.4714776018691D+01-0.4602483465805D+01-0.4491672123673D+01 +-0.4382325705095D+01-0.4274427985640D+01-0.4167962886061D+01-0.4062914551618D+01 +-0.3959267428037D+01-0.3857006333826D+01-0.3756116528718D+01-0.3656583778001D+01 +-0.3558394412557D+01-0.3461535384413D+01-0.3365994317682D+01-0.3271759554763D+01 +-0.3178820197726D+01-0.3087166144845D+01-0.2996788122259D+01-0.2907677710821D+01 +-0.2819827368207D+01-0.2733230446431D+01-0.2647881204950D+01-0.2563774819612D+01 +-0.2480907387749D+01-0.2399275929784D+01-0.2318878387764D+01-0.2239713621329D+01 +-0.2161781401633D+01-0.2085082403831D+01-0.2009618198778D+01-0.1935391244617D+01 +-0.1862404878998D+01-0.1790663312655D+01-0.1720171625111D+01-0.1650935763269D+01 +-0.1582962543626D+01-0.1516259658827D+01-0.1450835689223D+01-0.1386700120052D+01 +-0.1323863364771D+01-0.1262336795005D+01-0.1202132777469D+01-0.1143264718130D+01 +-0.1085747113774D+01-0.1029595611013D+01-0.9748270727154D+00-0.9214596516777D+00 +-0.8695128713252D+00-0.8190077131099D+00-0.7699667102222D+00-0.7224140471735D+00 +-0.6763756647684D+00-0.6318793699591D+00-0.5889549500632D+00-0.5476342908327D+00 +-0.5079514978739D+00-0.4699430209489D+00-0.4336477807207D+00-0.3991072975512D+00 +-0.3663658220029D+00-0.3354704667473D+00-0.3064713396296D+00-0.2794216776835D+00 +-0.2543779819454D+00-0.2313999299251D+00 + 0.0000000000000D+00 + 1019 0.5282916303874D+01 + 0.2822835389983D-04 0.2889232671911D-04 0.2957191402324D-04 0.3026748289127D-04 + 0.3097940902739D-04 0.3170807696342D-04 0.3245388026606D-04 0.3321722174901D-04 + 0.3399851369009D-04 0.3479817805334D-04 0.3561664671650D-04 0.3645436170367D-04 + 0.3731177542349D-04 0.3818935091294D-04 0.3908756208675D-04 0.4000689399278D-04 + 0.4094784307328D-04 0.4191091743234D-04 0.4289663710960D-04 0.4390553436033D-04 + 0.4493815394213D-04 0.4599505340833D-04 0.4707680340823D-04 0.4818398799443D-04 + 0.4931720493734D-04 0.5047706604703D-04 0.5166419750268D-04 0.5287924018966D-04 + 0.5412285004463D-04 0.5539569840859D-04 0.5669847238832D-04 0.5803187522616D-04 + 0.5939662667858D-04 0.6079346340354D-04 0.6222313935691D-04 0.6368642619823D-04 + 0.6518411370593D-04 0.6671701020226D-04 0.6828594298825D-04 0.6989175878871D-04 + 0.7153532420780D-04 0.7321752619517D-04 0.7493927252301D-04 0.7670149227435D-04 + 0.7850513634266D-04 0.8035117794328D-04 0.8224061313666D-04 0.8417446136405D-04 + 0.8615376599547D-04 0.8817959489076D-04 0.9025304097353D-04 0.9237522281871D-04 + 0.9454728525372D-04 0.9677039997378D-04 0.9904576617157D-04 0.1013746111816D-03 + 0.1037581911398D-03 0.1061977916581D-03 0.1086947285154D-03 0.1112503483645D-03 + 0.1138660294548D-03 0.1165431823732D-03 0.1192832508014D-03 0.1220877122909D-03 + 0.1249580790570D-03 0.1278958987898D-03 0.1309027554859D-03 0.1339802702983D-03 + 0.1371301024066D-03 0.1403539499072D-03 0.1436535507253D-03 0.1470306835465D-03 + 0.1504871687719D-03 0.1540248694945D-03 0.1576456924982D-03 0.1613515892812D-03 + 0.1651445571022D-03 0.1690266400516D-03 0.1729999301474D-03 0.1770665684570D-03 + 0.1812287462450D-03 0.1854887061476D-03 0.1898487433750D-03 0.1943112069407D-03 + 0.1988785009209D-03 0.2035530857423D-03 0.2083374795002D-03 0.2132342593074D-03 + 0.2182460626742D-03 0.2233755889215D-03 0.2286256006255D-03 0.2339989250972D-03 + 0.2394984558959D-03 0.2451271543779D-03 0.2508880512812D-03 0.2567842483480D-03 + 0.2628189199834D-03 0.2689953149545D-03 0.2753167581275D-03 0.2817866522465D-03 + 0.2884084797527D-03 0.2951858046468D-03 0.3021222743941D-03 0.3092216218742D-03 + 0.3164876673763D-03 0.3239243206404D-03 0.3315355829466D-03 0.3393255492521D-03 + 0.3472984103792D-03 0.3554584552526D-03 0.3638100731904D-03 0.3723577562469D-03 + 0.3811061016106D-03 0.3900598140580D-03 0.3992237084638D-03 0.4086027123703D-03 + 0.4182018686156D-03 0.4280263380234D-03 0.4380814021550D-03 0.4483724661254D-03 + 0.4589050614847D-03 0.4696848491661D-03 0.4807176225028D-03 0.4920093103142D-03 + 0.5035659800647D-03 0.5153938410950D-03 0.5274992479281D-03 0.5398887036530D-03 + 0.5525688633857D-03 0.5655465378112D-03 0.5788286968073D-03 0.5924224731520D-03 + 0.6063351663176D-03 0.6205742463520D-03 0.6351473578499D-03 0.6500623240163D-03 + 0.6653271508237D-03 0.6809500312658D-03 0.6969393497094D-03 0.7133036863469D-03 + 0.7300518217520D-03 0.7471927415405D-03 0.7647356411393D-03 0.7826899306648D-03 + 0.8010652399149D-03 0.8198714234755D-03 0.8391185659460D-03 0.8588169872840D-03 + 0.8789772482749D-03 0.8996101561266D-03 0.9207267701938D-03 0.9423384078346D-03 + 0.9644566504011D-03 0.9870933493699D-03 0.1010260632612D-02 0.1033970910808D-02 + 0.1058236884013D-02 0.1083071548367D-02 0.1108488202970D-02 0.1134500456900D-02 + 0.1161122236412D-02 0.1188367792284D-02 0.1216251707344D-02 0.1244788904167D-02 + 0.1273994652944D-02 0.1303884579543D-02 0.1334474673741D-02 0.1365781297658D-02 + 0.1397821194374D-02 0.1430611496756D-02 0.1464169736471D-02 0.1498513853225D-02 + 0.1533662204197D-02 0.1569633573700D-02 0.1606447183057D-02 0.1644122700711D-02 + 0.1682680252554D-02 0.1722140432508D-02 0.1762524313336D-02 0.1803853457707D-02 + 0.1846149929507D-02 0.1889436305420D-02 0.1933735686763D-02 0.1979071711596D-02 + 0.2025468567111D-02 0.2072951002295D-02 0.2121544340895D-02 0.2171274494667D-02 + 0.2222167976934D-02 0.2274251916449D-02 0.2327554071579D-02 0.2382102844807D-02 + 0.2437927297566D-02 0.2495057165412D-02 0.2553522873541D-02 0.2613355552656D-02 + 0.2674587055203D-02 0.2737249971964D-02 0.2801377649040D-02 0.2867004205207D-02 + 0.2934164549674D-02 0.3002894400242D-02 0.3073230301875D-02 0.3145209645687D-02 + 0.3218870688367D-02 0.3294252572036D-02 0.3371395344560D-02 0.3450339980318D-02 + 0.3531128401442D-02 0.3613803499530D-02 0.3698409157865D-02 0.3784990274115D-02 + 0.3873592783561D-02 0.3964263682845D-02 0.4057051054243D-02 0.4152004090502D-02 + 0.4249173120221D-02 0.4348609633811D-02 0.4450366310035D-02 0.4554497043148D-02 + 0.4661056970641D-02 0.4770102501614D-02 0.4881691345780D-02 0.4995882543123D-02 + 0.5112736494216D-02 0.5232314991223D-02 0.5354681249591D-02 0.5479899940453D-02 + 0.5608037223751D-02 0.5739160782101D-02 0.5873339855419D-02 0.6010645276307D-02 + 0.6151149506240D-02 0.6294926672549D-02 0.6442052606234D-02 0.6592604880614D-02 + 0.6746662850838D-02 0.6904307694268D-02 0.7065622451768D-02 0.7230692069897D-02 + 0.7399603444044D-02 0.7572445462515D-02 0.7749309051598D-02 0.7930287221619D-02 + 0.8115475114018D-02 0.8304970049464D-02 0.8498871577032D-02 0.8697281524456D-02 + 0.8900304049495D-02 0.9108045692430D-02 0.9320615429706D-02 0.9538124728756D-02 + 0.9760687604030D-02 0.9988420674246D-02 0.1022144322090D-01 0.1045987724804D-01 + 0.1070384754337D-01 0.1095348174068D-01 0.1120891038362D-01 0.1147026699087D-01 + 0.1173768812274D-01 0.1201131344923D-01 0.1229128581950D-01 0.1257775133295D-01 + 0.1287085941174D-01 0.1317076287496D-01 0.1347761801432D-01 0.1379158467158D-01 + 0.1411282631755D-01 0.1444151013282D-01 0.1477780709030D-01 0.1512189203941D-01 + 0.1547394379218D-01 0.1583414521114D-01 0.1620268329910D-01 0.1657974929087D-01 + 0.1696553874693D-01 0.1736025164907D-01 0.1776409249813D-01 0.1817727041373D-01 + 0.1859999923619D-01 0.1903249763061D-01 0.1947498919308D-01 0.1992770255924D-01 + 0.2039087151505D-01 0.2086473510993D-01 0.2134953777229D-01 0.2184552942747D-01 + 0.2235296561814D-01 0.2287210762728D-01 0.2340322260368D-01 0.2394658369007D-01 + 0.2450247015392D-01 0.2507116752101D-01 0.2565296771170D-01 0.2624816918007D-01 + 0.2685707705593D-01 0.2748000328980D-01 0.2811726680080D-01 0.2876919362766D-01 + 0.2943611708282D-01 0.3011837790964D-01 0.3081632444289D-01 0.3153031277251D-01 + 0.3226070691063D-01 0.3300787896212D-01 0.3377220929851D-01 0.3455408673542D-01 + 0.3535390871366D-01 0.3617208148391D-01 0.3700902029513D-01 0.3786514958681D-01 + 0.3874090318494D-01 0.3963672450206D-01 0.4055306674117D-01 0.4149039310376D-01 + 0.4244917700192D-01 0.4342990227471D-01 0.4443306340872D-01 0.4545916576304D-01 + 0.4650872579860D-01 0.4758227131200D-01 0.4868034167394D-01 0.4980348807226D-01 + 0.5095227375970D-01 0.5212727430642D-01 0.5332907785746D-01 0.5455828539511D-01 + 0.5581551100629D-01 0.5710138215505D-01 0.5841653996030D-01 0.5976163947874D-01 + 0.6113734999319D-01 0.6254435530634D-01 0.6398335403999D-01 0.6545505993995D-01 + 0.6696020218655D-01 0.6849952571098D-01 0.7007379151743D-01 0.7168377701120D-01 + 0.7333027633278D-01 0.7501410069815D-01 0.7673607874510D-01 0.7849705688600D-01 + 0.8029789966680D-01 0.8213949013254D-01 0.8402273019940D-01 0.8594854103333D-01 + 0.8791786343540D-01 0.8993165823397D-01 0.9199090668367D-01 0.9409661087142D-01 + 0.9624979412937D-01 0.9845150145513D-01 0.1007027999391D+00 0.1030047791989D+00 + 0.1053585518218D+00 0.1077652538139D+00 0.1102260450570D+00 0.1127421097734D+00 + 0.1153146569983D+00 0.1179449210595D+00 0.1206341620656D+00 0.1233836664013D+00 + 0.1261947472319D+00 0.1290687450145D+00 0.1320070280181D+00 0.1350109928517D+00 + 0.1380820650005D+00 0.1412216993709D+00 0.1444313808430D+00 0.1477126248321D+00 + 0.1510669778590D+00 0.1544960181276D+00 0.1580013561123D+00 0.1615846351532D+00 + 0.1652475320606D+00 0.1689917577271D+00 0.1728190577499D+00 0.1767312130600D+00 + 0.1807300405618D+00 0.1848173937804D+00 0.1889951635180D+00 0.1932652785189D+00 + 0.1976297061436D+00 0.2020904530510D+00 0.2066495658902D+00 0.2113091320000D+00 + 0.2160712801176D+00 0.2209381810962D+00 0.2259120486306D+00 0.2309951399915D+00 + 0.2361897567686D+00 0.2414982456214D+00 0.2469229990389D+00 0.2524664561077D+00 + 0.2581311032870D+00 0.2639194751932D+00 0.2698341553913D+00 0.2758777771940D+00 + 0.2820530244695D+00 0.2883626324551D+00 0.2948093885796D+00 0.3013961332915D+00 + 0.3081257608951D+00 0.3150012203926D+00 0.3220255163328D+00 0.3292017096659D+00 + 0.3365329186046D+00 0.3440223194900D+00 0.3516731476641D+00 0.3594886983458D+00 + 0.3674723275128D+00 0.3756274527871D+00 0.3839575543251D+00 0.3924661757104D+00 + 0.4011569248503D+00 0.4100334748751D+00 0.4190995650391D+00 0.4283590016238D+00 + 0.4378156588421D+00 0.4474734797432D+00 0.4573364771174D+00 0.4674087344011D+00 + 0.4776944065798D+00 0.4881977210900D+00 0.4989229787185D+00 0.5098745544982D+00 + 0.5210568986003D+00 0.5324745372220D+00 0.5441320734686D+00 0.5560341882286D+00 + 0.5681856410426D+00 0.5805912709635D+00 0.5932559974075D+00 0.6061848209955D+00 + 0.6193828243825D+00 0.6328551730759D+00 0.6466071162395D+00 0.6606439874833D+00 + 0.6749712056379D+00 0.6895942755113D+00 0.7045187886282D+00 0.7197504239485D+00 + 0.7352949485665D+00 0.7511582183855D+00 0.7673461787702D+00 0.7838648651729D+00 + 0.8007204037317D+00 0.8179190118414D+00 0.8354669986931D+00 0.8533707657807D+00 + 0.8716368073748D+00 0.8902717109592D+00 0.9092821576301D+00 0.9286749224550D+00 + 0.9484568747892D+00 0.9686349785485D+00 0.9892162924350D+00 0.1010207970114D+01 + 0.1031617260341D+01 0.1053451507033D+01 0.1075718149284D+01 0.1098424721324D+01 + 0.1121578852417D+01 0.1145188266689D+01 0.1169260782896D+01 0.1193804314122D+01 + 0.1218826867398D+01 0.1244336543253D+01 0.1270341535182D+01 0.1296850129033D+01 + 0.1323870702311D+01 0.1351411723387D+01 0.1379481750625D+01 0.1408089431407D+01 + 0.1437243501060D+01 0.1466952781681D+01 0.1497226180855D+01 0.1528072690268D+01 + 0.1559501384198D+01 0.1591521417893D+01 0.1624142025826D+01 0.1657372519825D+01 + 0.1691222287071D+01 0.1725700787962D+01 0.1760817553840D+01 0.1796582184571D+01 + 0.1833004345980D+01 0.1870093767134D+01 0.1907860237463D+01 0.1946313603731D+01 + 0.1985463766823D+01 0.2025320678379D+01 0.2065894337237D+01 0.2107194785706D+01 + 0.2149232105642D+01 0.2192016414346D+01 0.2235557860254D+01 0.2279866618430D+01 + 0.2324952885854D+01 0.2370826876498D+01 0.2417498816181D+01 0.2464978937205D+01 + 0.2513277472767D+01 0.2562404651129D+01 0.2612370689560D+01 0.2663185788025D+01 + 0.2714860122637D+01 0.2767403838844D+01 0.2820827044362D+01 0.2875139801847D+01 + 0.2930352121292D+01 0.2986473952155D+01 0.3043515175199D+01 0.3101485594064D+01 + 0.3160394926530D+01 0.3220252795505D+01 0.3281068719700D+01 0.3342852104013D+01 + 0.3405612229598D+01 0.3469358243625D+01 0.3534099148732D+01 0.3599843792145D+01 + 0.3666600854486D+01 0.3734378838255D+01 0.3803186055977D+01 0.3873030618024D+01 + 0.3943920420098D+01 0.4015863130380D+01 0.4088866176346D+01 0.4162936731230D+01 + 0.4238081700161D+01 0.4314307705947D+01 0.4391621074527D+01 0.4470027820069D+01 + 0.4549533629736D+01 0.4630143848113D+01 0.4711863461283D+01 0.4794697080578D+01 + 0.4878648925994D+01 0.4963722809267D+01 0.5049922116636D+01 0.5137249791268D+01 + 0.5225708315377D+01 0.5315299692030D+01 0.5406025426645D+01 0.5497886508194D+01 + 0.5590883390119D+01 0.5685015970968D+01 0.5780283574761D+01 0.5876684931099D+01 + 0.5974218155027D+01 0.6072880726661D+01 0.6172669470607D+01 0.6273580535158D+01 + 0.6375609371321D+01 0.6478750711665D+01 0.6582998549021D+01 0.6688346115044D+01 + 0.6794785858674D+01 0.6902309424504D+01 0.7010907631078D+01 0.7120570449161D+01 + 0.7231286979987D+01 0.7343045433523D+01 0.7455833106781D+01 0.7569636362200D+01 + 0.7684440606138D+01 0.7800230267503D+01 0.7916988776564D+01 0.8034698543969D+01 + 0.8153340940023D+01 0.8272896274252D+01 0.8393343775304D+01 0.8514661571228D+01 + 0.8636826670177D+01 0.8759814941579D+01 0.8883601097830D+01 0.9008158676554D+01 + 0.9133460023488D+01 0.9259476276042D+01 0.9386177347589D+01 0.9513531912544D+01 + 0.9641507392293D+01 0.9770069942032D+01 0.9899184438573D+01 0.1002881446919D+02 + 0.1015892232155D+02 0.1028946897485D+02 0.1042041409214D+02 0.1055171601401D+02 + 0.1068333175358D+02 0.1081521699303D+02 0.1094732608155D+02 0.1107961203504D+02 + 0.1121202653730D+02 0.1134451994313D+02 0.1147704128317D+02 0.1160953827069D+02 + 0.1174195731037D+02 0.1187424350912D+02 0.1200634068907D+02 0.1213819140280D+02 + 0.1226973695085D+02 0.1240091740164D+02 0.1253167161388D+02 0.1266193726146D+02 + 0.1279165086105D+02 0.1292074780233D+02 0.1304916238109D+02 0.1317682783507D+02 + 0.1330367638281D+02 0.1342963926552D+02 0.1355464679190D+02 0.1367862838623D+02 + 0.1380151263958D+02 0.1392322736426D+02 0.1404369965168D+02 0.1416285593344D+02 + 0.1428062204598D+02 0.1439692329856D+02 0.1451168454482D+02 0.1462483025783D+02 + 0.1473628460874D+02 0.1484597154897D+02 0.1495381489602D+02 0.1505973842287D+02 + 0.1516366595105D+02 0.1526552144717D+02 0.1536522912325D+02 0.1546271354038D+02 + 0.1555789971612D+02 0.1565071323525D+02 0.1574108036407D+02 0.1582892816796D+02 + 0.1591418463238D+02 0.1599677878699D+02 0.1607664083298D+02 0.1615370227341D+02 + 0.1622789604640D+02 0.1629915666117D+02 0.1636742033673D+02 0.1643262514293D+02 + 0.1649471114400D+02 0.1655362054401D+02 0.1660929783443D+02 0.1666168994330D+02 + 0.1671074638592D+02 0.1675641941678D+02 0.1679866418244D+02 0.1683743887520D+02 + 0.1687270488708D+02 0.1690442696401D+02 0.1693257335981D+02 0.1695711598955D+02 + 0.1697803058217D+02 0.1699529683168D+02 0.1700889854691D+02 0.1701882379909D+02 + 0.1702506506710D+02 0.1702761937980D+02 0.1702648845513D+02 0.1702167883544D+02 + 0.1701320201866D+02 0.1700107458474D+02 0.1698531831701D+02 0.1696596031787D+02 + 0.1694303311832D+02 0.1691657478089D+02 0.1688662899533D+02 0.1685324516669D+02 + 0.1681647849506D+02 0.1677639004673D+02 0.1673304681590D+02 0.1668652177669D+02 + 0.1663689392474D+02 0.1658424830799D+02 0.1652867604598D+02 0.1647027433734D+02 + 0.1640914645475D+02 0.1634540172704D+02 0.1627915550787D+02 0.1621052913049D+02 + 0.1613964984821D+02 0.1606665076007D+02 0.1599167072129D+02 0.1591485423819D+02 + 0.1583635134714D+02 0.1575631747721D+02 0.1567491329620D+02 0.1559230453992D+02 + 0.1550866182419D+02 0.1542416043968D+02 0.1533898012921D+02 0.1525330484749D+02 + 0.1516732250321D+02 0.1508122468346D+02 0.1499520636047D+02 0.1490946558083D+02 + 0.1482420313724D+02 0.1473962222302D+02 0.1465592806965D+02 0.1457332756760D+02 + 0.1449202887084D+02 0.1441224098550D+02 0.1433417334315D+02 0.1425803535923D+02 + 0.1418403597732D+02 0.1411238320000D+02 0.1404328360686D+02 0.1397694186082D+02 + 0.1391356020333D+02 0.1385333793975D+02 0.1379647091570D+02 0.1374315098539D+02 + 0.1369356547412D+02 0.1364789663433D+02 0.1360632109829D+02 0.1356900932792D+02 + 0.1353612506335D+02 0.1350782477177D+02 0.1348425709813D+02 0.1346556231916D+02 + 0.1345187180262D+02 0.1344330747319D+02 0.1343998128703D+02 0.1344199471659D+02 + 0.1344943824759D+02 0.1346239089000D+02 0.1348091970488D+02 0.1350507934900D+02 + 0.1353491163910D+02 0.1357044513773D+02 0.1361169476260D+02 0.1365866142131D+02 + 0.1371133167329D+02 0.1376967742104D+02 0.1383365563218D+02 0.1390320809443D+02 + 0.1397826120509D+02 0.1405872579684D+02 0.1414449700138D+02 0.1423545415271D+02 + 0.1433146073132D+02 0.1443236435097D+02 0.1453799678912D+02 0.1464817406258D+02 + 0.1476269654917D+02 0.1488134915674D+02 0.1500390154012D+02 0.1513010836712D+02 + 0.1525970963388D+02 0.1539243103024D+02 0.1552798435550D+02 0.1566606798456D+02 + 0.1580636738467D+02 0.1594855568243D+02 0.1609229428090D+02 0.1623723352612D+02 + 0.1638301342255D+02 0.1652926439630D+02 0.1667560810533D+02 0.1682165829516D+02 + 0.1696702169871D+02 0.1711129897862D+02 0.1725408571012D+02 0.1739497340253D+02 + 0.1753355055702D+02 0.1766940375816D+02 0.1780211879688D+02 0.1793128182162D+02 + 0.1805648051510D+02 0.1817730529317D+02 0.1829335052263D+02 0.1840421575438D+02 + 0.1850950696829D+02 0.1860883782595D+02 0.1870183092731D+02 0.1878811906717D+02 + 0.1886734648736D+02 0.1893917012012D+02 0.1900326081854D+02 0.1905930456928D+02 + 0.1910700368334D+02 0.1914607796003D+02 0.1917626581959D+02 0.1919732539992D+02 + 0.1920903561254D+02 0.1921119715340D+02 0.1920363346380D+02 0.1918619163678D+02 + 0.1915874326482D+02 0.1912118522412D+02 0.1907344039140D+02 0.1901545828904D+02 + 0.1894721565456D+02 0.1886871693063D+02 0.1877999467201D+02 0.1868110986603D+02 + 0.1857215216342D+02 0.1845324001656D+02 0.1832452072264D+02 0.1818617036923D+02 + 0.1803839368037D+02 0.1788142376145D+02 0.1771552174157D+02 0.1754097631241D+02 + 0.1735810316307D+02 0.1716724431072D+02 0.1696876732726D+02 0.1676306446281D+02 + 0.1655055166703D+02 0.1633166751000D+02 0.1610687200455D+02 0.1587664533276D+02 + 0.1564148647947D+02 0.1540191177642D+02 0.1515845336085D+02 0.1491165755304D+02 + 0.1466208315779D+02 0.1441029969504D+02 0.1415688556557D+02 0.1390242615798D+02 + 0.1364751190365D+02 0.1339273628671D+02 0.1313869381659D+02 0.1288597797078D+02 + 0.1263517911606D+02 0.1238688241664D+02 0.1214166573770D+02 0.1190009755337D+02 + 0.1166273486824D+02 0.1143012116131D+02 0.1120278436204D+02 0.1098123486738D+02 + 0.1076596360934D+02 0.1055744018218D+02 0.1035611103824D+02 0.1016239776140D+02 + 0.9976695426757D+01 0.9799371054791D+01 0.9630762168193D+01 0.9471175458851D+01 + 0.9320885572164D+01 0.9180134015366D+01 0.9049128195975D+01 0.8928040595889D+01 + 0.8817008086055D+01 0.8716131385943D+01 0.8625474671405D+01 0.8545065333743D+01 + 0.8474893892107D+01 0.8414914060556D+01 0.8365042970373D+01 0.8325161547417D+01 + 0.8295115043532D+01 0.8274713720226D+01 0.8263733682072D+01 0.8261917856473D+01 + 0.8268977115699D+01 0.8284591536320D+01 0.8308411790443D+01 0.8340060662421D+01 + 0.8379134684056D+01 0.8425205880594D+01 0.8477823619242D+01 0.8536516551320D+01 + 0.8600794638614D+01 0.8670151254010D+01 0.8744065346036D+01 0.8822003656545D+01 + 0.8903422980466D+01 0.8987772456234D+01 0.9074495875384D+01 0.9163033999606D+01 + 0.9252826873533D+01 0.9343316121564D+01 0.9433947217114D+01 0.9524171712849D+01 + 0.9613449420751D+01 0.9701250531156D+01 0.9787057660335D+01 0.9870367816646D+01 + 0.9950694275862D+01 0.1002756835684D+02 0.1010054108939D+02 0.1016918476702D+02 + 0.1023309437768D+02 0.1029188890698D+02 0.1034521250863D+02 0.1039273553809D+02 + 0.1043415544617D+02 0.1046919753037D+02 0.1049761554226D+02 0.1051919215074D+02 + 0.1053373926129D+02 0.1054109819251D+02 0.1054113971220D+02 0.1053376393567D+02 + 0.1051890009012D+02 0.1049650614953D+02 0.1046656834505D+02 0.1042910055671D+02 + 0.1038414359287D+02 0.1033176436400D+02 0.1027205495831D+02 0.1020513162681D+02 + 0.1013113368577D+02 0.1005022234485D+02 0.9962579469377D+01 0.9868406285310D+01 + 0.9767922035458D+01 0.9661362595664D+01 0.9548979059465D+01 0.9431036299674D+01 + 0.9307811515177D+01 0.9179592770975D+01 0.9046677539281D+01 0.8909371249138D+01 + 0.8767985851711D+01 0.8622838408000D+01 0.8474249705348D+01 0.8322542908661D+01 + 0.8168042251829D+01 0.8011071774365D+01 0.7851954107810D+01 0.7691009315975D+01 + 0.7528553792590D+01 0.7364899219476D+01 0.7200351587865D+01 0.7035210285005D+01 + 0.6869767247760D+01 0.6704306184445D+01 0.6539101865709D+01 0.6374419484870D+01 + 0.6210514087691D+01 0.6047630071250D+01 0.5886000751154D+01 0.5725847996050D+01 + 0.5567381928080D+01 0.5410800687616D+01 0.5256290260390D+01 0.5104024364860D+01 + 0.4954164397495D+01 0.4806859433420D+01 0.4662246279750D+01 0.4520449578777D+01 + 0.4381581958080D+01 0.4245744224515D+01 0.4113025598995D+01 0.3983503988922D+01 + 0.3857246295067D+01 0.3734308749755D+01 0.3614737283146D+01 0.3498567914486D+01 + 0.3385827165216D+01 0.3276532490893D+01 0.3170692728944D+01 0.3068308559367D+01 + 0.2969372975579D+01 0.2873871762726D+01 0.2781783980867D+01 0.2693082450610D+01 + 0.2607734238857D+01 0.2525701142481D+01 0.2446940167925D+01 0.2371404004790D+01 + 0.2299041491714D+01 0.2229798072931D+01 0.2163616244086D+01 0.2100435986031D+01 + 0.2040195185468D+01 0.1982830041479D+01 0.1928275457110D+01 0.1876465415340D+01 + 0.1827333338908D+01 0.1780812433583D+01 0.1736836014647D+01 0.1695337816433D+01 + 0.1656252284921D+01 0.1619514853489D+01 0.1585062202027D+01 0.1552832499731D+01 + 0.1522765631966D+01 0.1494803411685D+01 0.1468889775956D+01 0.1444970968218D+01 + 0.1422995706931D+01 0.1402915341345D+01 0.1384683995123D+01 0.1368258698612D+01 + 0.1353599510520D+01 0.1340669629812D+01 0.1329435498575D+01 0.1319866896622D+01 + 0.1311937028546D+01 0.1305622603887D+01 0.1300903911023D+01 0.1297764885307D+01 + 0.1296193171885D+01 0.1296180183508D+01 0.1297721153538D+01 0.1300815184163D+01 + 0.1305465289703D+01 0.1311678434655D+01 0.1319465565906D+01 0.1328841638284D+01 + 0.1339825632325D+01 0.1352440020066D+01 0.1366814118169D+01 0.1383075557911D+01 + 0.1401251274517D+01 0.1421373963474D+01 0.1443482175527D+01 0.1467620429267D+01 + 0.1493839341415D+01 0.1522195774849D+01 0.1552753004359D+01 + 7 1019 + 1 0 -1 -600.92936 + 2 0 -1 -70.75637 + 2 1 1 -61.64173 + 2 1 -2 -60.36011 + 3 0 -1 -6.90508 + 3 1 1 -4.13505 + 3 1 -2 -3.97253 + 0.2785348039799D-04 0.2850864985091D-04 0.2917922677693D-04 0.2986557338784D-04 + 0.3056806040623D-04 0.3128706726531D-04 0.3202298231346D-04 0.3277620302344D-04 + 0.3354713620669D-04 0.3433619823250D-04 0.3514381525243D-04 0.3597042342988D-04 + 0.3681646917518D-04 0.3768240938605D-04 0.3856871169382D-04 0.3947585471533D-04 + 0.4040432831076D-04 0.4135463384754D-04 0.4232728447044D-04 0.4332280537788D-04 + 0.4434173410491D-04 0.4538462081264D-04 0.4645202858458D-04 0.4754453372980D-04 + 0.4866272609337D-04 0.4980720937385D-04 0.5097860144845D-04 0.5217753470559D-04 + 0.5340465638544D-04 0.5466062892831D-04 0.5594613033122D-04 0.5726185451292D-04 + 0.5860851168728D-04 0.5998682874563D-04 0.6139754964787D-04 0.6284143582287D-04 + 0.6431926657818D-04 0.6583183951932D-04 0.6737997097897D-04 0.6896449645610D-04 + 0.7058627106547D-04 0.7224616999759D-04 0.7394508898947D-04 0.7568394480642D-04 + 0.7746367573504D-04 0.7928524208785D-04 0.8114962671967D-04 0.8305783555606D-04 + 0.8501089813418D-04 0.8700986815631D-04 0.8905582405622D-04 0.9114986957892D-04 + 0.9329313437388D-04 0.9548677460216D-04 0.9773197355772D-04 0.1000299423033D-03 + 0.1023819203211D-03 0.1047891761788D-03 0.1072530082109D-03 0.1097747452164D-03 + 0.1123557471724D-03 0.1149974059643D-03 0.1177011461338D-03 0.1204684256435D-03 + 0.1233007366599D-03 0.1261996063543D-03 0.1291665977232D-03 0.1322033104265D-03 + 0.1353113816468D-03 0.1384924869679D-03 0.1417483412738D-03 0.1450806996689D-03 + 0.1484913584199D-03 0.1519821559194D-03 0.1555549736718D-03 0.1592117373030D-03 + 0.1629544175925D-03 0.1667850315308D-03 0.1707056434008D-03 0.1747183658844D-03 + 0.1788253611949D-03 0.1830288422366D-03 0.1873310737905D-03 0.1917343737279D-03 + 0.1962411142527D-03 0.2008537231720D-03 0.2055746851973D-03 0.2104065432749D-03 + 0.2153518999484D-03 0.2204134187520D-03 0.2255938256369D-03 0.2308959104308D-03 + 0.2363225283316D-03 0.2418766014350D-03 0.2475611202992D-03 0.2533791455447D-03 + 0.2593338094921D-03 0.2654283178377D-03 0.2716659513684D-03 0.2780500677164D-03 + 0.2845841031545D-03 0.2912715744338D-03 0.2981160806633D-03 0.3051213052343D-03 + 0.3122910177887D-03 0.3196290762334D-03 0.3271394288016D-03 0.3348261161622D-03 + 0.3426932735779D-03 0.3507451331137D-03 0.3589860258965D-03 0.3674203844279D-03 + 0.3760527449499D-03 0.3848877498660D-03 0.3939301502186D-03 0.4031848082239D-03 + 0.4126566998654D-03 0.4223509175482D-03 0.4322726728145D-03 0.4424272991222D-03 + 0.4528202546880D-03 0.4634571253967D-03 0.4743436277778D-03 0.4854856120511D-03 + 0.4968890652433D-03 0.5085601143763D-03 0.5205050297303D-03 0.5327302281814D-03 + 0.5452422766177D-03 0.5580478954340D-03 0.5711539621071D-03 0.5845675148553D-03 + 0.5982957563806D-03 0.6123460576999D-03 0.6267259620628D-03 0.6414431889615D-03 + 0.6565056382328D-03 0.6719213942557D-03 0.6876987302450D-03 0.7038461126454D-03 + 0.7203722056267D-03 0.7372858756825D-03 0.7545961963362D-03 0.7723124529547D-03 + 0.7904441476743D-03 0.8090010044395D-03 0.8279929741591D-03 0.8474302399803D-03 + 0.8673232226854D-03 0.8876825862128D-03 0.9085192433053D-03 0.9298443612885D-03 + 0.9516693679833D-03 0.9740059577534D-03 0.9968660976936D-03 0.1020262033960D-02 + 0.1044206298245D-02 0.1068711714404D-02 0.1093791405233D-02 0.1119458799402D-02 + 0.1145727638549D-02 0.1172611984533D-02 0.1200126226866D-02 0.1228285090299D-02 + 0.1257103642593D-02 0.1286597302470D-02 0.1316781847740D-02 0.1347673423616D-02 + 0.1379288551225D-02 0.1411644136313D-02 0.1444757478139D-02 0.1478646278594D-02 + 0.1513328651505D-02 0.1548823132173D-02 0.1585148687119D-02 0.1622324724052D-02 + 0.1660371102071D-02 0.1699308142098D-02 0.1739156637551D-02 0.1779937865258D-02 + 0.1821673596624D-02 0.1864386109050D-02 0.1908098197620D-02 0.1952833187045D-02 + 0.1998614943887D-02 0.2045467889061D-02 0.2093417010621D-02 0.2142487876835D-02 + 0.2192706649566D-02 0.2244100097950D-02 0.2296695612391D-02 0.2350521218871D-02 + 0.2405605593589D-02 0.2461978077930D-02 0.2519668693780D-02 0.2578708159180D-02 + 0.2639127904347D-02 0.2700960088050D-02 0.2764237614363D-02 0.2828994149797D-02 + 0.2895264140816D-02 0.2963082831762D-02 0.3032486283173D-02 0.3103511390526D-02 + 0.3176195903398D-02 0.3250578445064D-02 0.3326698532539D-02 0.3404596597070D-02 + 0.3484314005096D-02 0.3565893079675D-02 0.3649377122404D-02 0.3734810435823D-02 + 0.3822238346332D-02 0.3911707227623D-02 0.4003264524637D-02 0.4096958778068D-02 + 0.4192839649407D-02 0.4290957946558D-02 0.4391365650032D-02 0.4494115939719D-02 + 0.4599263222270D-02 0.4706863159091D-02 0.4816972694967D-02 0.4929650087320D-02 + 0.5044954936134D-02 0.5162948214539D-02 0.5283692300087D-02 0.5407251006722D-02 + 0.5533689617469D-02 0.5663074917849D-02 0.5795475230042D-02 0.5930960447811D-02 + 0.6069602072201D-02 0.6211473248042D-02 0.6356648801255D-02 0.6505205276989D-02 + 0.6657220978610D-02 0.6812776007555D-02 0.6971952304061D-02 0.7134833688812D-02 + 0.7301505905495D-02 0.7472056664307D-02 0.7646575686420D-02 0.7825154749426D-02 + 0.8007887733795D-02 0.8194870670349D-02 0.8386201788783D-02 0.8581981567262D-02 + 0.8782312783101D-02 0.8987300564565D-02 0.9197052443804D-02 0.9411678410950D-02 + 0.9631290969401D-02 0.9856005192321D-02 0.1008593878036D-01 0.1032121212066D-01 + 0.1056194834714D-01 0.1080827340207D-01 0.1106031609904D-01 0.1131820818725D-01 + 0.1158208441725D-01 0.1185208260805D-01 0.1212834371572D-01 0.1241101190349D-01 + 0.1270023461334D-01 0.1299616263918D-01 0.1329895020152D-01 0.1360875502388D-01 + 0.1392573841078D-01 0.1425006532736D-01 0.1458190448082D-01 0.1492142840354D-01 + 0.1526881353800D-01 0.1562424032353D-01 0.1598789328488D-01 0.1635996112275D-01 + 0.1674063680621D-01 0.1713011766706D-01 0.1752860549628D-01 0.1793630664247D-01 + 0.1835343211238D-01 0.1878019767364D-01 0.1921682395954D-01 0.1966353657619D-01 + 0.2012056621177D-01 0.2058814874823D-01 0.2106652537525D-01 0.2155594270663D-01 + 0.2205665289910D-01 0.2256891377368D-01 0.2309298893950D-01 0.2362914792023D-01 + 0.2417766628321D-01 0.2473882577114D-01 0.2531291443667D-01 0.2590022677960D-01 + 0.2650106388708D-01 0.2711573357661D-01 0.2774455054204D-01 0.2838783650253D-01 + 0.2904592035462D-01 0.2971913832738D-01 0.3040783414076D-01 0.3111235916718D-01 + 0.3183307259638D-01 0.3257034160364D-01 0.3332454152147D-01 0.3409605601466D-01 + 0.3488527725896D-01 0.3569260612339D-01 0.3651845235609D-01 0.3736323477404D-01 + 0.3822738145646D-01 0.3911132994221D-01 0.4001552743100D-01 0.4094043098863D-01 + 0.4188650775637D-01 0.4285423516441D-01 0.4384410114952D-01 0.4485660437705D-01 + 0.4589225446724D-01 0.4695157222597D-01 0.4803508987999D-01 0.4914335131680D-01 + 0.5027691232908D-01 0.5143634086397D-01 0.5262221727702D-01 0.5383513459112D-01 + 0.5507569876040D-01 0.5634452893907D-01 0.5764225775551D-01 0.5896953159144D-01 + 0.6032701086645D-01 0.6171537032787D-01 0.6313529934610D-01 0.6458750221537D-01 + 0.6607269846028D-01 0.6759162314785D-01 0.6914502720547D-01 0.7073367774467D-01 + 0.7235835839078D-01 0.7401986961872D-01 0.7571902909479D-01 0.7745667202470D-01 + 0.7923365150794D-01 0.8105083889839D-01 0.8290912417146D-01 0.8480941629777D-01 + 0.8675264362336D-01 0.8873975425672D-01 0.9077171646250D-01 0.9284951906214D-01 + 0.9497417184143D-01 0.9714670596512D-01 0.9936817439861D-01 0.1016396523369D+00 + 0.1039622376406D+00 0.1063370512799D+00 0.1087652377849D+00 0.1112479657046D+00 + 0.1137864280726D+00 0.1163818428813D+00 0.1190354535626D+00 0.1217485294780D+00 + 0.1245223664148D+00 0.1273582870922D+00 0.1302576416734D+00 0.1332218082873D+00 + 0.1362521935575D+00 0.1393502331400D+00 0.1425173922687D+00 0.1457551663094D+00 + 0.1490650813222D+00 0.1524486946321D+00 0.1559075954084D+00 0.1594434052521D+00 + 0.1630577787924D+00 0.1667524042908D+00 0.1705290042550D+00 0.1743893360603D+00 + 0.1783351925803D+00 0.1823684028262D+00 0.1864908325939D+00 0.1907043851210D+00 + 0.1950110017514D+00 0.1994126626092D+00 0.2039113872805D+00 0.2085092355047D+00 + 0.2132083078736D+00 0.2180107465389D+00 0.2229187359293D+00 0.2279345034746D+00 + 0.2330603203389D+00 0.2382985021623D+00 0.2436514098099D+00 0.2491214501298D+00 + 0.2547110767190D+00 0.2604227906963D+00 0.2662591414843D+00 0.2722227275978D+00 + 0.2783161974410D+00 0.2845422501104D+00 0.2909036362063D+00 0.2974031586510D+00 + 0.3040436735129D+00 0.3108280908381D+00 0.3177593754880D+00 0.3248405479832D+00 + 0.3320746853529D+00 0.3394649219899D+00 0.3470144505113D+00 0.3547265226235D+00 + 0.3626044499927D+00 0.3706516051183D+00 0.3788714222121D+00 0.3872673980788D+00 + 0.3958430930017D+00 0.4046021316296D+00 0.4135482038664D+00 0.4226850657628D+00 + 0.4320165404081D+00 0.4415465188242D+00 0.4512789608585D+00 0.4612178960766D+00 + 0.4713674246546D+00 0.4817317182683D+00 0.4923150209819D+00 0.5031216501316D+00 + 0.5141559972066D+00 0.5254225287256D+00 0.5369257871068D+00 0.5486703915328D+00 + 0.5606610388075D+00 0.5729025042060D+00 0.5853996423141D+00 0.5981573878595D+00 + 0.6111807565305D+00 0.6244748457836D+00 0.6380448356375D+00 0.6518959894534D+00 + 0.6660336546986D+00 0.6804632636948D+00 0.6951903343474D+00 0.7102204708555D+00 + 0.7255593644017D+00 0.7412127938194D+00 0.7571866262360D+00 0.7734868176917D+00 + 0.7901194137312D+00 0.8070905499665D+00 0.8244064526103D+00 0.8420734389770D+00 + 0.8600979179504D+00 0.8784863904150D+00 0.8972454496511D+00 0.9163817816891D+00 + 0.9359021656229D+00 0.9558134738795D+00 0.9761226724427D+00 0.9968368210285D+00 + 0.1017963073210D+01 0.1039508676490D+01 0.1061480972318D+01 0.1083887396047D+01 + 0.1106735476836D+01 0.1130032837482D+01 0.1153787194190D+01 0.1178006356277D+01 + 0.1202698225795D+01 0.1227870797093D+01 0.1253532156286D+01 0.1279690480659D+01 + 0.1306354037973D+01 0.1333531185694D+01 0.1361230370125D+01 0.1389460125447D+01 + 0.1418229072662D+01 0.1447545918436D+01 0.1477419453830D+01 0.1507858552937D+01 + 0.1538872171388D+01 0.1570469344759D+01 0.1602659186847D+01 0.1635450887823D+01 + 0.1668853712259D+01 0.1702876997023D+01 0.1737530149033D+01 0.1772822642871D+01 + 0.1808764018254D+01 0.1845363877352D+01 0.1882631881947D+01 0.1920577750443D+01 + 0.1959211254701D+01 0.1998542216711D+01 0.2038580505087D+01 0.2079336031385D+01 + 0.2120818746238D+01 0.2163038635298D+01 0.2206005714988D+01 0.2249730028055D+01 + 0.2294221638918D+01 0.2339490628806D+01 0.2385547090684D+01 0.2432401123957D+01 + 0.2480062828949D+01 0.2528542301159D+01 0.2577849625270D+01 0.2627994868928D+01 + 0.2678988076269D+01 0.2730839261202D+01 0.2783558400427D+01 0.2837155426198D+01 + 0.2891640218824D+01 0.2947022598886D+01 0.3003312319193D+01 0.3060519056444D+01 + 0.3118652402616D+01 0.3177721856052D+01 0.3237736812262D+01 0.3298706554417D+01 + 0.3360640243548D+01 0.3423546908429D+01 0.3487435435157D+01 0.3552314556408D+01 + 0.3618192840379D+01 0.3685078679409D+01 0.3752980278273D+01 0.3821905642142D+01 + 0.3891862564227D+01 0.3962858613070D+01 0.4034901119519D+01 0.4107997163357D+01 + 0.4182153559591D+01 0.4257376844407D+01 0.4333673260788D+01 0.4411048743785D+01 + 0.4489508905456D+01 0.4569059019465D+01 0.4649704005343D+01 0.4731448412420D+01 + 0.4814296403414D+01 0.4898251737705D+01 0.4983317754274D+01 0.5069497354326D+01 + 0.5156792983594D+01 0.5245206614333D+01 0.5334739727019D+01 0.5425393291737D+01 + 0.5517167749297D+01 0.5610062992057D+01 0.5704078344485D+01 0.5799212543462D+01 + 0.5895463718334D+01 0.5992829370731D+01 0.6091306354173D+01 0.6190890853456D+01 + 0.6291578363859D+01 0.6393363670174D+01 0.6496240825583D+01 0.6600203130395D+01 + 0.6705243110671D+01 0.6811352496752D+01 0.6918522201725D+01 0.7026742299830D+01 + 0.7136002004857D+01 0.7246289648544D+01 0.7357592659012D+01 0.7469897539266D+01 + 0.7583189845790D+01 0.7697454167276D+01 0.7812674103512D+01 0.7928832244472D+01 + 0.8045910149650D+01 0.8163888327659D+01 0.8282746216162D+01 0.8402462162153D+01 + 0.8523013402647D+01 0.8644376045826D+01 0.8766525052671D+01 0.8889434219156D+01 + 0.9013076159033D+01 0.9137422287266D+01 0.9262442804180D+01 0.9388106680362D+01 + 0.9514381642386D+01 0.9641234159419D+01 0.9768629430760D+01 0.9896531374387D+01 + 0.1002490261657D+02 0.1015370448260D+02 0.1028289698875D+02 0.1041243883547D+02 + 0.1054228740194D+02 0.1067239874200D+02 0.1080272758161D+02 0.1093322731781D+02 + 0.1106385001935D+02 0.1119454642901D+02 0.1132526596767D+02 0.1145595674027D+02 + 0.1158656554370D+02 0.1171703787669D+02 0.1184731795179D+02 0.1197734870953D+02 + 0.1210707183480D+02 0.1223642777560D+02 0.1236535576413D+02 0.1249379384041D+02 + 0.1262167887843D+02 0.1274894661497D+02 0.1287553168105D+02 0.1300136763624D+02 + 0.1312638700578D+02 0.1325052132060D+02 0.1337370116039D+02 0.1349585619965D+02 + 0.1361691525691D+02 0.1373680634710D+02 0.1385545673713D+02 0.1397279300475D+02 + 0.1408874110083D+02 0.1420322641484D+02 0.1431617384391D+02 0.1442750786520D+02 + 0.1453715261184D+02 0.1464503195231D+02 0.1475106957334D+02 0.1485518906631D+02 + 0.1495731401723D+02 0.1505736810017D+02 0.1515527517423D+02 0.1525095938400D+02 + 0.1534434526342D+02 0.1543535784313D+02 0.1552392276115D+02 0.1560996637684D+02 + 0.1569341588814D+02 0.1577419945199D+02 0.1585224630775D+02 0.1592748690368D+02 + 0.1599985302622D+02 0.1606927793202D+02 0.1613569648255D+02 0.1619904528121D+02 + 0.1625926281269D+02 0.1631628958438D+02 0.1637006826986D+02 0.1642054385387D+02 + 0.1646766377903D+02 0.1651137809360D+02 0.1655163960043D+02 0.1658840400653D+02 + 0.1662163007325D+02 0.1665127976653D+02 0.1667731840709D+02 0.1669971482024D+02 + 0.1671844148480D+02 0.1673347468105D+02 0.1674479463705D+02 0.1675238567325D+02 + 0.1675623634475D+02 0.1675633958099D+02 0.1675269282236D+02 0.1674529815328D+02 + 0.1673416243144D+02 0.1671929741260D+02 0.1670071987060D+02 0.1667845171207D+02 + 0.1665252008529D+02 0.1662295748295D+02 0.1658980183799D+02 0.1655309661229D+02 + 0.1651289087761D+02 0.1646923938826D+02 0.1642220264504D+02 0.1637184694991D+02 + 0.1631824445090D+02 0.1626147317681D+02 0.1620161706111D+02 0.1613876595461D+02 + 0.1607301562647D+02 0.1600446775294D+02 0.1593322989356D+02 0.1585941545417D+02 + 0.1578314363649D+02 0.1570453937377D+02 0.1562373325211D+02 0.1554086141713D+02 + 0.1545606546563D+02 0.1536949232194D+02 0.1528129409862D+02 0.1519162794140D+02 + 0.1510065585794D+02 0.1500854453042D+02 0.1491546511167D+02 0.1482159300489D+02 + 0.1472710762669D+02 0.1463219215373D+02 0.1453703325262D+02 0.1444182079357D+02 + 0.1434674754757D+02 0.1425200886753D+02 0.1415780235347D+02 0.1406432750219D+02 + 0.1397178534157D+02 0.1388037805021D+02 0.1379030856261D+02 0.1370178016055D+02 + 0.1361499605126D+02 0.1353015893305D+02 0.1344747054907D+02 0.1336713123002D+02 + 0.1328933942665D+02 0.1321429123299D+02 0.1314217990124D+02 0.1307319534911D+02 + 0.1300752366174D+02 0.1294534658758D+02 0.1288684103098D+02 0.1283217854213D+02 + 0.1278152480572D+02 0.1273503912963D+02 0.1269287393525D+02 0.1265517425070D+02 + 0.1262207720857D+02 0.1259371154963D+02 0.1257019713418D+02 0.1255164446257D+02 + 0.1253815420652D+02 0.1252981675297D+02 0.1252671176194D+02 0.1252890774035D+02 + 0.1253646163319D+02 0.1254941843391D+02 0.1256781081565D+02 0.1259165878492D+02 + 0.1262096935948D+02 0.1265573627186D+02 0.1269593970031D+02 0.1274154602860D+02 + 0.1279250763612D+02 0.1284876271993D+02 0.1291023514987D+02 0.1297683435832D+02 + 0.1304845526572D+02 0.1312497824294D+02 0.1320626911186D+02 0.1329217918482D+02 + 0.1338254534406D+02 0.1347719016192D+02 0.1357592206229D+02 0.1367853552411D+02 + 0.1378481132722D+02 0.1389451684086D+02 0.1400740635503D+02 0.1412322145474D+02 + 0.1424169143705D+02 0.1436253377061D+02 0.1448545459727D+02 0.1461014927535D+02 + 0.1473630296364D+02 0.1486359124547D+02 0.1499168079165D+02 0.1512023006124D+02 + 0.1524889003871D+02 0.1537730500600D+02 0.1550511334794D+02 0.1563194838901D+02 + 0.1575743925971D+02 0.1588121179028D+02 0.1600288942953D+02 0.1612209418650D+02 + 0.1623844759226D+02 0.1635157167941D+02 0.1646108997624D+02 0.1656662851297D+02 + 0.1666781683678D+02 0.1676428903280D+02 0.1685568474771D+02 0.1694165021276D+02 + 0.1702183926298D+02 0.1709591434898D+02 0.1716354753815D+02 0.1722442150176D+02 + 0.1727823048429D+02 0.1732468125184D+02 0.1736349401585D+02 0.1739440332882D+02 + 0.1741715894860D+02 0.1743152666781D+02 0.1743728910515D+02 0.1743424645524D+02 + 0.1742221719400D+02 0.1740103873629D+02 0.1737056804316D+02 0.1733068217558D+02 + 0.1728127879228D+02 0.1722227658900D+02 0.1715361567688D+02 0.1707525789793D+02 + 0.1698718707542D+02 0.1688940919777D+02 0.1678195253406D+02 0.1666486768020D+02 + 0.1653822753457D+02 0.1640212720234D+02 0.1625668382804D+02 0.1610203635605D+02 + 0.1593834521920D+02 0.1576579195557D+02 0.1558457875437D+02 0.1539492793162D+02 + 0.1519708133698D+02 0.1499129969316D+02 0.1477786186979D+02 0.1455706409384D+02 + 0.1432921909906D+02 0.1409465521715D+02 0.1385371541354D+02 0.1360675627135D+02 + 0.1335414692683D+02 0.1309626796025D+02 0.1283351024628D+02 0.1256627376823D+02 + 0.1229496640060D+02 0.1202000266485D+02 0.1174180246306D+02 0.1146078979490D+02 + 0.1117739146290D+02 0.1089203577144D+02 0.1060515122500D+02 0.1031716523102D+02 + 0.1002850281309D+02 0.9739585339808D+01 0.9450829275067D+01 0.9162644955013D+01 + 0.8875435397193D+01 0.8589595147052D+01 0.8305509166913D+01 0.8023551772294D+01 + 0.7744085620244D+01 0.7467460754102D+01 0.7194013708732D+01 0.6924066680121D+01 + 0.6657926762676D+01 0.6395885257290D+01 0.6138217052838D+01 0.5885180083291D+01 + 0.5637014862214D+01 0.5393944095964D+01 0.5156172376397D+01 0.4923885953440D+01 + 0.4697252587402D+01 0.4476421480403D+01 0.4261523285854D+01 0.4052670194446D+01 + 0.3849956094672D+01 0.3653456805497D+01 0.3463230378383D+01 0.3279317465534D+01 + 0.3101741750858D+01 0.2930510439883D+01 0.2765614804580D+01 0.2607030778803D+01 + 0.2454719599894D+01 0.2308628491820D+01 0.2168691385091D+01 0.2034829668640D+01 + 0.1906952968766D+01 0.1784959950247D+01 0.1668739134727D+01 0.1558169731539D+01 + 0.1453122476193D+01 0.1353460471853D+01 0.1259040029279D+01 0.1169711500850D+01 + 0.1085320104451D+01 0.1005706733253D+01 0.9307087475878D+00 0.8601607453947D+00 + 0.7938953079704D+00 0.7317437180194D+00 0.6735366472990D+00 0.6191048114486D+00 + 0.5682795899002D+00 0.5208936090774D+00 0.4767812874066D+00 0.4357793409794D+00 + 0.3977272490158D+00 0.3624676785880D+00 0.3298468683613D+00 0.2997149714018D+00 + 0.2719263573757D+00 0.2463398747288D+00 0.2228190736820D+00 0.2012323911077D+00 + 0.1814532985587D+00 0.1633604149139D+00 0.1468375852681D+00 0.1317739278401D+00 + 0.1180638507949D+00 0.1056070409740D+00 0.9430842660595D-01 0.8407811612220D-01 + 0.7483131523720D-01 0.6648822446255D-01 0.5897391921868D-01 0.5221821468026D-01 + 0.4615551744933D-01 0.4072466609085D-01 0.3586876249310D-01 0.3153499593029D-01 + 0.2767446160932D-01 0.2424197537852D-01 0.2119588616448D-01 0.1849788758658D-01 + 0.1611283007825D-01 0.1400853472097D-01 0.1215560987394D-01 0.1052727155919D-01 + 0.9099168441213D-02 0.7849212122301D-02 0.6757413360975D-02 0.5805724712213D-02 + 0.4977889984910D-02 0.4259300815297D-02 0.3636860564909D-02 0.3098855668813D-02 + 0.2634834484130D-02 0.2235493620776D-02 0.1892571675614D-02 0.1598750237855D-02 + 0.1347561987417D-02 0.1133305668705D-02 0.9509676897177D-03 0.7961500700565D-03 + 0.6650044409550D-03 0.5541717854288D-03 0.4607275965721D-03 0.3821321264613D-03 + 0.3161853965802D-03 0.2609866426733D-03 0.2148978720202D-03 0.1765112188356D-03 + 0.1446197934254D-03 0.1181917324578D-03 0.9634717085916D-04 0.7833787008417D-04 + 0.6352925250168D-04 0.5138460711824D-04 0.4145124756025D-04 0.3334841894247D-04 + 0.2675676576924D-04 0.2140918818591D-04 0.1708292858676D-04 0.1359274468595D-04 + 0.1078503858436D-04 0.8532824057450D-05 0.6731426203640D-05 0.5294818705431D-05 + 0.4152514256060D-05 0.3246933196226D-05 0.2531184102685D-05 0.1967197996113D-05 + 0.1524165020076D-05 0.1177228922105D-05 0.9064004816964D-06 0.6956562213712D-06 + 0.5321933500632D-06 0.4058159681390D-06 0.3084311550367D-06 0.2336367077944D-06 + 0.1763850440397D-06 0.1327101668872D-06 0.9950664996314D-07 0.7435137432006D-07 + 0.5536026859924D-07 0.4107360008380D-07 0.3036446521025D-07 0.2236605902416D-07 + 0.1641408678133D-07 0.1200133780083D-07 0.8741989878798D-08 0.6343668057516D-08 + 0.4585658331970D-08 0.3301987194148D-08 0.2368332361815D-08 0.1691937750742D-08 + 0.1203874557883D-08 0.8531269029104D-09 0.6020904848644D-09 0.4231609199373D-09 + 0.2961588355584D-09 0.2063947413491D-09 0.1432209469506D-09 0.9895263422926D-10 + 0.6806749180835D-10 0.4661461407108D-10 0.3177989810672D-10 0.2156794533121D-10 + 0.1457029674703D-10 0.9797346965900D-11 0.6557008288435D-11 0.4367535372748D-11 + 0.2895183963007D-11 0.1909847081824D-11 0.1253660240977D-11 0.8188333489718D-12 + 0.5320941587156D-12 0.3440140886834D-12 0.2212441299903D-12 0.1415527620957D-12 + 0.9009275622109D-13 0.5703749771740D-13 0.3591739940478D-13 0.2249568274860D-13 + 0.1401269909872D-13 0.8680702870622D-14 0.5348002788467D-14 + LSMS: xx z= 28. xvalws= 4.71708 + 28. 6.55000 10. 0.6401316680236D+00 + -0.1113096740000D+02 0.8563086195639D+00 1010 +-0.5599696223472D+02-0.5599692579244D+02-0.5599688891298D+02-0.5599685159110D+02 +-0.5599681382149D+02-0.5599677559878D+02-0.5599673691753D+02-0.5599669777225D+02 +-0.5599665815737D+02-0.5599661806724D+02-0.5599657749618D+02-0.5599653643840D+02 +-0.5599649488808D+02-0.5599645283930D+02-0.5599641028607D+02-0.5599636722236D+02 +-0.5599632364203D+02-0.5599627953889D+02-0.5599623490665D+02-0.5599618973899D+02 +-0.5599614402946D+02-0.5599609777158D+02-0.5599605095875D+02-0.5599600358433D+02 +-0.5599595564157D+02-0.5599590712365D+02-0.5599585802368D+02-0.5599580833468D+02 +-0.5599575804956D+02-0.5599570716119D+02-0.5599565566231D+02-0.5599560354562D+02 +-0.5599555080369D+02-0.5599549742903D+02-0.5599544341404D+02-0.5599538875103D+02 +-0.5599533343224D+02-0.5599527744979D+02-0.5599522079573D+02-0.5599516346198D+02 +-0.5599510544041D+02-0.5599504672275D+02-0.5599498730065D+02-0.5599492716567D+02 +-0.5599486630923D+02-0.5599480472270D+02-0.5599474239731D+02-0.5599467932419D+02 +-0.5599461549437D+02-0.5599455089877D+02-0.5599448552820D+02-0.5599441937337D+02 +-0.5599435242486D+02-0.5599428467314D+02-0.5599421610859D+02-0.5599414672144D+02 +-0.5599407650183D+02-0.5599400543977D+02-0.5599393352515D+02-0.5599386074773D+02 +-0.5599378709716D+02-0.5599371256297D+02-0.5599363713455D+02-0.5599356080117D+02 +-0.5599348355197D+02-0.5599340537597D+02-0.5599332626203D+02-0.5599324619890D+02 +-0.5599316517520D+02-0.5599308317940D+02-0.5599300019982D+02-0.5599291622467D+02 +-0.5599283124199D+02-0.5599274523970D+02-0.5599265820556D+02-0.5599257012718D+02 +-0.5599248099203D+02-0.5599239078744D+02-0.5599229950056D+02-0.5599220711841D+02 +-0.5599211362784D+02-0.5599201901554D+02-0.5599192326807D+02-0.5599182637179D+02 +-0.5599172831291D+02-0.5599162907749D+02-0.5599152865140D+02-0.5599142702035D+02 +-0.5599132416987D+02-0.5599122008534D+02-0.5599111475194D+02-0.5599100815468D+02 +-0.5599090027839D+02-0.5599079110773D+02-0.5599068062714D+02-0.5599056882092D+02 +-0.5599045567315D+02-0.5599034116773D+02-0.5599022528836D+02-0.5599010801854D+02 +-0.5598998934160D+02-0.5598986924064D+02-0.5598974769856D+02-0.5598962469807D+02 +-0.5598950022165D+02-0.5598937425161D+02-0.5598924676999D+02-0.5598911775867D+02 +-0.5598898719927D+02-0.5598885507321D+02-0.5598872136169D+02-0.5598858604567D+02 +-0.5598844910589D+02-0.5598831052286D+02-0.5598817027685D+02-0.5598802834790D+02 +-0.5598788471580D+02-0.5598773936010D+02-0.5598759226012D+02-0.5598744339490D+02 +-0.5598729274327D+02-0.5598714028376D+02-0.5598698599468D+02-0.5598682985406D+02 +-0.5598667183967D+02-0.5598651192900D+02-0.5598635009931D+02-0.5598618632753D+02 +-0.5598602059035D+02-0.5598585286418D+02-0.5598568312513D+02-0.5598551134904D+02 +-0.5598533751143D+02-0.5598516158757D+02-0.5598498355239D+02-0.5598480338055D+02 +-0.5598462104638D+02-0.5598443652392D+02-0.5598424978690D+02-0.5598406080871D+02 +-0.5598386956245D+02-0.5598367602087D+02-0.5598348015642D+02-0.5598328194119D+02 +-0.5598308134695D+02-0.5598287834514D+02-0.5598267290684D+02-0.5598246500277D+02 +-0.5598225460334D+02-0.5598204167857D+02-0.5598182619813D+02-0.5598160813131D+02 +-0.5598138744707D+02-0.5598116411395D+02-0.5598093810014D+02-0.5598070937344D+02 +-0.5598047790127D+02-0.5598024365064D+02-0.5598000658819D+02-0.5597976668012D+02 +-0.5597952389226D+02-0.5597927819002D+02-0.5597902953837D+02-0.5597877790190D+02 +-0.5597852324473D+02-0.5597826553059D+02-0.5597800472274D+02-0.5597774078402D+02 +-0.5597747367680D+02-0.5597720336302D+02-0.5597692980416D+02-0.5597665296121D+02 +-0.5597637279473D+02-0.5597608926477D+02-0.5597580233093D+02-0.5597551195229D+02 +-0.5597521808746D+02-0.5597492069456D+02-0.5597461973118D+02-0.5597431515441D+02 +-0.5597400692084D+02-0.5597369498651D+02-0.5597337930694D+02-0.5597305983713D+02 +-0.5597273653153D+02-0.5597240934402D+02-0.5597207822795D+02-0.5597174313610D+02 +-0.5597140402069D+02-0.5597106083334D+02-0.5597071352512D+02-0.5597036204648D+02 +-0.5597000634730D+02-0.5596964637683D+02-0.5596928208373D+02-0.5596891341603D+02 +-0.5596854032113D+02-0.5596816274582D+02-0.5596778063622D+02-0.5596739393782D+02 +-0.5596700259543D+02-0.5596660655323D+02-0.5596620575470D+02-0.5596580014265D+02 +-0.5596538965919D+02-0.5596497424574D+02-0.5596455384302D+02-0.5596412839103D+02 +-0.5596369782904D+02-0.5596326209559D+02-0.5596282112848D+02-0.5596237486478D+02 +-0.5596192324076D+02-0.5596146619196D+02-0.5596100365313D+02-0.5596053555821D+02 +-0.5596006184038D+02-0.5595958243200D+02-0.5595909726460D+02-0.5595860626889D+02 +-0.5595810937477D+02-0.5595760651126D+02-0.5595709760654D+02-0.5595658258792D+02 +-0.5595606138184D+02-0.5595553391383D+02-0.5595500010855D+02-0.5595445988973D+02 +-0.5595391318020D+02-0.5595335990183D+02-0.5595279997556D+02-0.5595223332139D+02 +-0.5595165985834D+02-0.5595107950445D+02-0.5595049217677D+02-0.5594989779136D+02 +-0.5594929626325D+02-0.5594868750646D+02-0.5594807143396D+02-0.5594744795768D+02 +-0.5594681698847D+02-0.5594617843611D+02-0.5594553220930D+02-0.5594487821562D+02 +-0.5594421636155D+02-0.5594354655242D+02-0.5594286869244D+02-0.5594218268464D+02 +-0.5594148843089D+02-0.5594078583187D+02-0.5594007478706D+02-0.5593935519473D+02 +-0.5593862695191D+02-0.5593788995439D+02-0.5593714409670D+02-0.5593638927210D+02 +-0.5593562537255D+02-0.5593485228870D+02-0.5593406990989D+02-0.5593327812411D+02 +-0.5593247681800D+02-0.5593166587683D+02-0.5593084518448D+02-0.5593001462343D+02 +-0.5592917407472D+02-0.5592832341797D+02-0.5592746253133D+02-0.5592659129149D+02 +-0.5592570957363D+02-0.5592481725142D+02-0.5592391419702D+02-0.5592300028101D+02 +-0.5592207537244D+02-0.5592113933875D+02-0.5592019204577D+02-0.5591923335772D+02 +-0.5591826313717D+02-0.5591728124502D+02-0.5591628754050D+02-0.5591528188110D+02 +-0.5591426412263D+02-0.5591323411911D+02-0.5591219172282D+02-0.5591113678423D+02 +-0.5591006915201D+02-0.5590898867299D+02-0.5590789519214D+02-0.5590678855255D+02 +-0.5590566859543D+02-0.5590453516002D+02-0.5590338808365D+02-0.5590222720165D+02 +-0.5590105234738D+02-0.5589986335215D+02-0.5589866004524D+02-0.5589744225384D+02 +-0.5589620980308D+02-0.5589496251593D+02-0.5589370021322D+02-0.5589242271362D+02 +-0.5589112983359D+02-0.5588982138736D+02-0.5588849718690D+02-0.5588715704190D+02 +-0.5588580075975D+02-0.5588442814548D+02-0.5588303900178D+02-0.5588163312891D+02 +-0.5588021032473D+02-0.5587877038463D+02-0.5587731310152D+02-0.5587583826579D+02 +-0.5587434566529D+02-0.5587283508528D+02-0.5587130630841D+02-0.5586975911472D+02 +-0.5586819328153D+02-0.5586660858347D+02-0.5586500479245D+02-0.5586338167758D+02 +-0.5586173900518D+02-0.5586007653871D+02-0.5585839403878D+02-0.5585669126306D+02 +-0.5585496796629D+02-0.5585322390022D+02-0.5585145881358D+02-0.5584967245205D+02 +-0.5584786455821D+02-0.5584603487151D+02-0.5584418312823D+02-0.5584230906144D+02 +-0.5584041240095D+02-0.5583849287331D+02-0.5583655020171D+02-0.5583458410598D+02 +-0.5583259430257D+02-0.5583058050443D+02-0.5582854242106D+02-0.5582647975838D+02 +-0.5582439221876D+02-0.5582227950095D+02-0.5582014130001D+02-0.5581797730729D+02 +-0.5581578721041D+02-0.5581357069315D+02-0.5581132743546D+02-0.5580905711339D+02 +-0.5580675939903D+02-0.5580443396051D+02-0.5580208046188D+02-0.5579969856313D+02 +-0.5579728792008D+02-0.5579484818438D+02-0.5579237900344D+02-0.5578988002036D+02 +-0.5578735087390D+02-0.5578479119842D+02-0.5578220062383D+02-0.5577957877554D+02 +-0.5577692527437D+02-0.5577423973656D+02-0.5577152177365D+02-0.5576877099246D+02 +-0.5576598699501D+02-0.5576316937851D+02-0.5576031773521D+02-0.5575743165245D+02 +-0.5575451071251D+02-0.5575155449261D+02-0.5574856256479D+02-0.5574553449592D+02 +-0.5574246984757D+02-0.5573936817599D+02-0.5573622903202D+02-0.5573305196105D+02 +-0.5572983650292D+02-0.5572658219188D+02-0.5572328855652D+02-0.5571995511969D+02 +-0.5571658139845D+02-0.5571316690396D+02-0.5570971114147D+02-0.5570621361020D+02 +-0.5570267380329D+02-0.5569909120771D+02-0.5569546530421D+02-0.5569179556723D+02 +-0.5568808146482D+02-0.5568432245858D+02-0.5568051800358D+02-0.5567666754825D+02 +-0.5567277053437D+02-0.5566882639691D+02-0.5566483456400D+02-0.5566079445686D+02 +-0.5565670548966D+02-0.5565256706948D+02-0.5564837859624D+02-0.5564413946258D+02 +-0.5563984905378D+02-0.5563550674768D+02-0.5563111191461D+02-0.5562666391727D+02 +-0.5562216211068D+02-0.5561760584202D+02-0.5561299445065D+02-0.5560832726789D+02 +-0.5560360361703D+02-0.5559882281319D+02-0.5559398416321D+02-0.5558908696562D+02 +-0.5558413051046D+02-0.5557911407924D+02-0.5557403694482D+02-0.5556889837133D+02 +-0.5556369761402D+02-0.5555843391924D+02-0.5555310652426D+02-0.5554771465720D+02 +-0.5554225753693D+02-0.5553673437298D+02-0.5553114436539D+02-0.5552548670463D+02 +-0.5551976057150D+02-0.5551396513700D+02-0.5550809956225D+02-0.5550216299834D+02 +-0.5549615458625D+02-0.5549007345675D+02-0.5548391873022D+02-0.5547768951663D+02 +-0.5547138491534D+02-0.5546500401504D+02-0.5545854589362D+02-0.5545200961802D+02 +-0.5544539424416D+02-0.5543869881681D+02-0.5543192236944D+02-0.5542506392412D+02 +-0.5541812249142D+02-0.5541109707023D+02-0.5540398664770D+02-0.5539679019908D+02 +-0.5538950668762D+02-0.5538213506439D+02-0.5537467426823D+02-0.5536712322557D+02 +-0.5535948085032D+02-0.5535174604375D+02-0.5534391769433D+02-0.5533599467765D+02 +-0.5532797585624D+02-0.5531986007948D+02-0.5531164618344D+02-0.5530333299077D+02 +-0.5529491931054D+02-0.5528640393816D+02-0.5527778565516D+02-0.5526906322918D+02 +-0.5526023541369D+02-0.5525130094801D+02-0.5524225855703D+02-0.5523310695118D+02 +-0.5522384482627D+02-0.5521447086332D+02-0.5520498372847D+02-0.5519538207280D+02 +-0.5518566453225D+02-0.5517582972744D+02-0.5516587626356D+02-0.5515580273021D+02 +-0.5514560770132D+02-0.5513528973493D+02-0.5512484737313D+02-0.5511427914192D+02 +-0.5510358355101D+02-0.5509275909378D+02-0.5508180424708D+02-0.5507071747112D+02 +-0.5505949720935D+02-0.5504814188833D+02-0.5503664991756D+02-0.5502501968942D+02 +-0.5501324957897D+02-0.5500133794390D+02-0.5498928312432D+02-0.5497708344272D+02 +-0.5496473720377D+02-0.5495224269427D+02-0.5493959818296D+02-0.5492680192049D+02 +-0.5491385213919D+02-0.5490074705306D+02-0.5488748485759D+02-0.5487406372968D+02 +-0.5486048182753D+02-0.5484673729051D+02-0.5483282823909D+02-0.5481875277470D+02 +-0.5480450897965D+02-0.5479009491705D+02-0.5477550863068D+02-0.5476074814493D+02 +-0.5474581146467D+02-0.5473069657522D+02-0.5471540144223D+02-0.5469992401161D+02 +-0.5468426220943D+02-0.5466841394191D+02-0.5465237709529D+02-0.5463614953579D+02 +-0.5461972910955D+02-0.5460311364257D+02-0.5458630094067D+02-0.5456928878940D+02 +-0.5455207495407D+02-0.5453465717964D+02-0.5451703319072D+02-0.5449920069153D+02 +-0.5448115736590D+02-0.5446290087722D+02-0.5444442886843D+02-0.5442573896205D+02 +-0.5440682876012D+02-0.5438769584425D+02-0.5436833777561D+02-0.5434875209495D+02 +-0.5432893632261D+02-0.5430888795858D+02-0.5428860448249D+02-0.5426808335370D+02 +-0.5424732201130D+02-0.5422631787419D+02-0.5420506834117D+02-0.5418357079095D+02 +-0.5416182258226D+02-0.5413982105395D+02-0.5411756352505D+02-0.5409504729488D+02 +-0.5407226964317D+02-0.5404922783015D+02-0.5402591909670D+02-0.5400234066448D+02 +-0.5397848973603D+02-0.5395436349497D+02-0.5392995910612D+02-0.5390527371568D+02 +-0.5388030445141D+02-0.5385504842279D+02-0.5382950272121D+02-0.5380366442022D+02 +-0.5377753057564D+02-0.5375109822589D+02-0.5372436439211D+02-0.5369732607848D+02 +-0.5366998027241D+02-0.5364232394478D+02-0.5361435405025D+02-0.5358606752751D+02 +-0.5355746129950D+02-0.5352853227379D+02-0.5349927734280D+02-0.5346969338412D+02 +-0.5343977726083D+02-0.5340952582182D+02-0.5337893590209D+02-0.5334800432310D+02 +-0.5331672789310D+02-0.5328510340749D+02-0.5325312764917D+02-0.5322079738887D+02 +-0.5318810938556D+02-0.5315506038680D+02-0.5312164712911D+02-0.5308786633837D+02 +-0.5305371473019D+02-0.5301918901033D+02-0.5298428587506D+02-0.5294900201159D+02 +-0.5291333409845D+02-0.5287727880592D+02-0.5284083279641D+02-0.5280399272489D+02 +-0.5276675523931D+02-0.5272911698097D+02-0.5269107458497D+02-0.5265262468062D+02 +-0.5261376389181D+02-0.5257448883746D+02-0.5253479613189D+02-0.5249468238525D+02 +-0.5245414420391D+02-0.5241317819081D+02-0.5237178094590D+02-0.5232994906648D+02 +-0.5228767914760D+02-0.5224496778239D+02-0.5220181156242D+02-0.5215820707808D+02 +-0.5211415091886D+02-0.5206963967367D+02-0.5202466993120D+02-0.5197923828015D+02 +-0.5193334130954D+02-0.5188697560897D+02-0.5184013776887D+02-0.5179282438067D+02 +-0.5174503203712D+02-0.5169675733235D+02-0.5164799686214D+02-0.5159874722402D+02 +-0.5154900501742D+02-0.5149876684372D+02-0.5144802930640D+02-0.5139678901105D+02 +-0.5134504256542D+02-0.5129278657941D+02-0.5124001766505D+02-0.5118673243645D+02 +-0.5113292750975D+02-0.5107859950299D+02-0.5102374503596D+02-0.5096836073009D+02 +-0.5091244320823D+02-0.5085598909444D+02-0.5079899501375D+02-0.5074145759189D+02 +-0.5068337345498D+02-0.5062473922922D+02-0.5056555154053D+02-0.5050580701416D+02 +-0.5044550227434D+02-0.5038463394377D+02-0.5032319864328D+02-0.5026119299126D+02 +-0.5019861360325D+02-0.5013545709143D+02-0.5007172006407D+02-0.5000739912504D+02 +-0.4994249087326D+02-0.4987699190218D+02-0.4981089879922D+02-0.4974420814526D+02 +-0.4967691651406D+02-0.4960902047178D+02-0.4954051657647D+02-0.4947140137754D+02 +-0.4940167141535D+02-0.4933132322073D+02-0.4926035331460D+02-0.4918875820762D+02 +-0.4911653439986D+02-0.4904367838057D+02-0.4897018662796D+02-0.4889605560912D+02 +-0.4882128177991D+02-0.4874586158508D+02-0.4866979145833D+02-0.4859306782261D+02 +-0.4851568709042D+02-0.4843764566431D+02-0.4835893993747D+02-0.4827956629445D+02 +-0.4819952111207D+02-0.4811880076045D+02-0.4803740160422D+02-0.4795532000391D+02 +-0.4787255231750D+02-0.4778909490222D+02-0.4770494411649D+02-0.4762009632212D+02 +-0.4753454788668D+02-0.4744829518615D+02-0.4736133460774D+02-0.4727366255300D+02 +-0.4718527544117D+02-0.4709616971270D+02-0.4700634183309D+02-0.4691578829697D+02 +-0.4682450563237D+02-0.4673249040525D+02-0.4663973922431D+02-0.4654624874593D+02 +-0.4645201567939D+02-0.4635703679226D+02-0.4626130891597D+02-0.4616482895150D+02 +-0.4606759387530D+02-0.4596960074519D+02-0.4587084670639D+02-0.4577132899763D+02 +-0.4567104495712D+02-0.4556999202861D+02-0.4546816776726D+02-0.4536556984539D+02 +-0.4526219605798D+02-0.4515804432797D+02-0.4505311271112D+02-0.4494739940055D+02 +-0.4484090273073D+02-0.4473362118100D+02-0.4462555337840D+02-0.4451669809982D+02 +-0.4440705427338D+02-0.4429662097898D+02-0.4418539744796D+02-0.4407338306170D+02 +-0.4396057734934D+02-0.4384697998428D+02-0.4373259077969D+02-0.4361740968280D+02 +-0.4350143676811D+02-0.4338467222942D+02-0.4326711637078D+02-0.4314876959628D+02 +-0.4302963239898D+02-0.4290970534872D+02-0.4278898907923D+02-0.4266748427447D+02 +-0.4254519165446D+02-0.4242211196062D+02-0.4229824594098D+02-0.4217359433537D+02 +-0.4204815786074D+02-0.4192193719700D+02-0.4179493297349D+02-0.4166714575631D+02 +-0.4153857603689D+02-0.4140922422178D+02-0.4127909062423D+02-0.4114817545739D+02 +-0.4101647882960D+02-0.4088400074182D+02-0.4075074108732D+02-0.4061669965378D+02 +-0.4048187612789D+02-0.4034627010235D+02-0.4020988108549D+02-0.4007270851328D+02 +-0.3993475176372D+02-0.3979601017351D+02-0.3965648305691D+02-0.3951616972641D+02 +-0.3937506951531D+02-0.3923318180167D+02-0.3909050603366D+02-0.3894704175582D+02 +-0.3880278863608D+02-0.3865774649330D+02-0.3851191532486D+02-0.3836529533426D+02 +-0.3821788695820D+02-0.3806969089315D+02-0.3792070812085D+02-0.3777093993278D+02 +-0.3762038795316D+02-0.3746905416038D+02-0.3731694090664D+02-0.3716405093567D+02 +-0.3701038739821D+02-0.3685595386541D+02-0.3670075433978D+02-0.3654479326368D+02 +-0.3638807552533D+02-0.3623060646226D+02-0.3607239186210D+02-0.3591343796076D+02 +-0.3575375143797D+02-0.3559333941025D+02-0.3543220942120D+02-0.3527036942933D+02 +-0.3510782779329D+02-0.3494459325477D+02-0.3478067491896D+02-0.3461608223282D+02 +-0.3445082496111D+02-0.3428491316044D+02-0.3411835715132D+02-0.3395116748843D+02 +-0.3378335492927D+02-0.3361493040123D+02-0.3344590496733D+02-0.3327628979077D+02 +-0.3310609609847D+02-0.3293533514379D+02-0.3276401816857D+02-0.3259215636477D+02 +-0.3241976083588D+02-0.3224684255835D+02-0.3207341234311D+02-0.3189948079774D+02 +-0.3172505828912D+02-0.3155015490716D+02-0.3137478042968D+02-0.3119894428864D+02 +-0.3102265553826D+02-0.3084592282492D+02-0.3066875435948D+02-0.3049115789199D+02 +-0.3031314068928D+02-0.3013470951560D+02-0.2995587061664D+02-0.2977662970714D+02 +-0.2959699196244D+02-0.2941696201419D+02-0.2923654395050D+02-0.2905574132074D+02 +-0.2887455714526D+02-0.2869299393034D+02-0.2851105368829D+02-0.2832873796329D+02 +-0.2814604786272D+02-0.2796298409437D+02-0.2777954700954D+02-0.2759573665199D+02 +-0.2741155281284D+02-0.2722699509126D+02-0.2704206296094D+02-0.2685675584195D+02 +-0.2667107317787D+02-0.2648501451766D+02-0.2629857960192D+02-0.2611176845276D+02 +-0.2592458146669D+02-0.2573701950955D+02-0.2554908401251D+02-0.2536077706788D+02 +-0.2517210152349D+02-0.2498306107396D+02-0.2479366034734D+02-0.2460390498514D+02 +-0.2441380171380D+02-0.2422335840547D+02-0.2403258412594D+02-0.2384148916732D+02 +-0.2365008506345D+02-0.2345838458563D+02-0.2326640171691D+02-0.2307415160308D+02 +-0.2288165047910D+02-0.2268891557015D+02-0.2249596496711D+02-0.2230281747700D+02 +-0.2210949244978D+02-0.2191600958395D+02-0.2172238871405D+02-0.2152864958458D+02 +-0.2133481161543D+02-0.2114089366494D+02-0.2094691379729D+02-0.2075288906142D+02 +-0.2055883528863D+02-0.2036476691627D+02-0.2017069684387D+02-0.1997663632772D+02 +-0.1978259491844D+02-0.1958858044485D+02-0.1939459904582D+02-0.1920065525004D+02 +-0.1900675210215D+02-0.1881289133185D+02-0.1861907356137D+02-0.1842529854548D+02 +-0.1823156543727D+02-0.1803787307258D+02-0.1784422026552D+02-0.1765060610781D+02 +-0.1745703026491D+02-0.1726349326262D+02-0.1706999675839D+02-0.1687654379275D+02 +-0.1668313901695D+02-0.1648978889391D+02-0.1629650187050D+02-0.1610328852001D+02 +-0.1591016165443D+02-0.1571713640663D+02-0.1552423028343D+02-0.1533146319057D+02 +-0.1513885743128D+02-0.1494643768008D+02-0.1475423093391D+02-0.1456226644259D+02 +-0.1437057562058D+02-0.1417919194227D+02-0.1398815082285D+02-0.1379748948648D+02 +-0.1360724682404D+02-0.1341746324187D+02-0.1322818050340D+02-0.1303944156522D+02 +-0.1285129040899D+02-0.1266377187058D+02-0.1247693146781D+02-0.1229081522770D+02 +-0.1210546951464D+02-0.1192094086015D+02-0.1173727579538D+02-0.1155452068701D+02 +-0.1137272157743D+02-0.1119192402976D+02-0.1101217297855D+02-0.1083351258641D+02 +-0.1065598610742D+02-0.1047963575747D+02-0.1030450259220D+02-0.1013062639265D+02 +-0.9958045559027D+01-0.9786797012947D+01-0.9616916108108D+01-0.9448436549776D+01 +-0.9281390323095D+01-0.9115807630320D+01-0.8951716837006D+01-0.8789144427146D+01 +-0.8628114967225D+01-0.8468651079086D+01-0.8310773421529D+01-0.8154500680455D+01 +-0.7999849567409D+01-0.7846834826286D+01-0.7695469247979D+01-0.7545763692692D+01 +-0.7397727119626D+01-0.7251366623738D+01-0.7106687479220D+01-0.6963693189354D+01 +-0.6822385542373D+01-0.6682764672930D+01-0.6544829128782D+01-0.6408575942279D+01 +-0.6274000706223D+01-0.6141097653681D+01-0.6009859741302D+01-0.5880278735698D+01 +-0.5752345302452D+01-0.5626049097293D+01-0.5501378858997D+01-0.5378322503566D+01 +-0.5256867219233D+01-0.5136999561867D+01-0.5018705550316D+01-0.4901970761285D+01 +-0.4786780423295D+01-0.4673119509331D+01-0.4560972827751D+01-0.4450325111061D+01 +-0.4341161102183D+01-0.4233465637811D+01-0.4127223728523D+01-0.4022420635285D+01 +-0.3919041942014D+01-0.3817073623910D+01-0.3716502111247D+01-0.3617314348377D+01 +-0.3519497847701D+01-0.3423040738415D+01-0.3327931809855D+01-0.3234160549325D+01 +-0.3141717174321D+01-0.3050592659127D+01-0.2960778755807D+01-0.2872268009686D+01 +-0.2785053769470D+01-0.2699130192236D+01-0.2614492243592D+01-0.2531135693396D+01 +-0.2449057107481D+01-0.2368253835949D+01-0.2288723998647D+01-0.2210466468527D+01 +-0.2133480853666D+01-0.2057767478780D+01-0.1983327367117D+01-0.1910162223654D+01 +-0.1838274420553D+01-0.1767666985813D+01-0.1698343596074D+01-0.1630308574461D+01 +-0.1563566894331D+01-0.1498124189676D+01-0.1433986772874D+01-0.1371161660353D+01 +-0.1309656606594D+01-0.1249480146804D+01-0.1190641648396D+01-0.1133151371320D+01 +-0.1077020537114D+01-0.1022261406430D+01-0.9688873646495D+00-0.9169130151369D+00 +-0.8663542795315D+00-0.8172285044658D+00-0.7695545740174D+00-0.7233530271894D+00 +-0.6786461797052D+00-0.6354582494212D+00-0.5938154846919D+00-0.5537462950694D+00 +-0.5152813837800D+00-0.4784538814878D+00-0.4432994809303D+00-0.4098565720878D+00 +-0.3781663776222D+00-0.3482730883967D+00-0.3202239989520D+00-0.2940696428732D+00 +-0.2698639280459D+00-0.2476640495013D+00 + 0.0000000000000D+00 + 1019 0.4717083696126D+01 + 0.2822905220422D-04 0.2889304065820D-04 0.2957264396362D-04 0.3026822920821D-04 + 0.3098017210502D-04 0.3170885719496D-04 0.3245467805402D-04 0.3321803750543D-04 + 0.3399934783670D-04 0.3479903102187D-04 0.3561751894883D-04 0.3645525365210D-04 + 0.3731268755102D-04 0.3819028369345D-04 0.3908851600531D-04 0.4000786954587D-04 + 0.4094884076908D-04 0.4191193779102D-04 0.4289768066355D-04 0.4390660165448D-04 + 0.4493924553425D-04 0.4599616986931D-04 0.4707794532239D-04 0.4818515595985D-04 + 0.4931839956615D-04 0.5047828796579D-04 0.5166544735265D-04 0.5288051862722D-04 + 0.5412415774157D-04 0.5539703605252D-04 0.5669984068299D-04 0.5803327489189D-04 + 0.5939805845262D-04 0.6079492804046D-04 0.6222463762903D-04 0.6368795889602D-04 + 0.6518568163844D-04 0.6671861419757D-04 0.6828758389387D-04 0.6989343747210D-04 + 0.7153704155679D-04 0.7321928311845D-04 0.7494106995063D-04 0.7670333115821D-04 + 0.7850701765704D-04 0.8035310268533D-04 0.8224258232698D-04 0.8417647604719D-04 + 0.8615582724055D-04 0.8818170379200D-04 0.9025519865087D-04 0.9237743041838D-04 + 0.9454954394889D-04 0.9677271096518D-04 0.9904813068811D-04 0.1013770304811D-03 + 0.1037606665095D-03 0.1062003244157D-03 0.1086973200094D-03 0.1112529999750D-03 + 0.1138687425945D-03 0.1165459584879D-03 0.1192860913707D-03 0.1220906188294D-03 + 0.1249610531146D-03 0.1278989419531D-03 0.1309058693786D-03 0.1339834565822D-03 + 0.1371333627824D-03 0.1403572861159D-03 0.1436569645484D-03 0.1470341768075D-03 + 0.1504907433372D-03 0.1540285272741D-03 0.1576494354471D-03 0.1613554194002D-03 + 0.1651484764392D-03 0.1690306507024D-03 0.1730040342571D-03 0.1770707682211D-03 + 0.1812330439104D-03 0.1854931040141D-03 0.1898532437962D-03 0.1943158123256D-03 + 0.1988832137349D-03 0.2035579085088D-03 0.2083424148017D-03 0.2132393097870D-03 + 0.2182512310372D-03 0.2233808779365D-03 0.2286310131262D-03 0.2340044639837D-03 + 0.2395041241363D-03 0.2451329550099D-03 0.2508939874141D-03 0.2567903231636D-03 + 0.2628251367386D-03 0.2690016769822D-03 0.2753232688391D-03 0.2817933151331D-03 + 0.2884152983876D-03 0.2951927826869D-03 0.3021294155822D-03 0.3092289300408D-03 + 0.3164951464419D-03 0.3239319746173D-03 0.3315434159412D-03 0.3393335654671D-03 + 0.3473066141158D-03 0.3554668509131D-03 0.3638186652800D-03 0.3723665493767D-03 + 0.3811151004996D-03 0.3900690235359D-03 0.3992331334737D-03 0.4086123579709D-03 + 0.4182117399844D-03 0.4280364404591D-03 0.4380917410806D-03 0.4483830470911D-03 + 0.4589158901706D-03 0.4696959313855D-03 0.4807289642050D-03 0.4920209175883D-03 + 0.5035778591424D-03 0.5154059983538D-03 0.5275116898952D-03 0.5399014370082D-03 + 0.5525818949656D-03 0.5655598746124D-03 0.5788423459903D-03 0.5924364420451D-03 + 0.6063494624208D-03 0.6205888773407D-03 0.6351623315796D-03 0.6500776485262D-03 + 0.6653428343414D-03 0.6809660822115D-03 0.6969557767005D-03 0.7133204982024D-03 + 0.7300690274976D-03 0.7472103504132D-03 0.7647536625921D-03 0.7827083743722D-03 + 0.8010841157777D-03 0.8198907416263D-03 0.8391383367545D-03 0.8588372213627D-03 + 0.8789979564844D-03 0.8996313495817D-03 0.9207484602695D-03 0.9423606061718D-03 + 0.9644793689133D-03 0.9871166002490D-03 0.1010284428335D-02 0.1033995264145D-02 + 0.1058261808030D-02 0.1083097056439D-02 0.1108514308781D-02 0.1134527174457D-02 + 0.1161149580048D-02 0.1188395776668D-02 0.1216280347488D-02 0.1244818215432D-02 + 0.1274024651053D-02 0.1303915280584D-02 0.1334506094178D-02 0.1365813454341D-02 + 0.1397854104547D-02 0.1430645178063D-02 0.1464204206972D-02 0.1498549131400D-02 + 0.1533698308957D-02 0.1569670524398D-02 0.1606484999500D-02 0.1644161403165D-02 + 0.1682719861761D-02 0.1722180969693D-02 0.1762565800220D-02 0.1803895916517D-02 + 0.1846193382990D-02 0.1889480776854D-02 0.1933781199968D-02 0.1979118290949D-02 + 0.2025516237555D-02 0.2072999789359D-02 0.2121594270701D-02 0.2171325593946D-02 + 0.2222220273040D-02 0.2274305437376D-02 0.2327608845973D-02 0.2382158901981D-02 + 0.2437984667516D-02 0.2495115878834D-02 0.2553582961846D-02 0.2613417047988D-02 + 0.2674649990452D-02 0.2737314380790D-02 0.2801443565884D-02 0.2867071665313D-02 + 0.2934233589108D-02 0.3002965055909D-02 0.3073302611539D-02 0.3145283647991D-02 + 0.3218946422853D-02 0.3294330079167D-02 0.3371474665742D-02 0.3450421157918D-02 + 0.3531211478812D-02 0.3613888521034D-02 0.3698496168895D-02 0.3785079321121D-02 + 0.3873683914072D-02 0.3964356945494D-02 0.4057146498796D-02 0.4152101767879D-02 + 0.4249273082526D-02 0.4348711934358D-02 0.4450471003378D-02 0.4554604185107D-02 + 0.4661166618332D-02 0.4770214713480D-02 0.4881806181620D-02 0.4996000064124D-02 + 0.5112856762985D-02 0.5232438071820D-02 0.5354807207563D-02 0.5480028842865D-02 + 0.5608169139224D-02 0.5739295780850D-02 0.5873478009283D-02 0.6010786658792D-02 + 0.6151294192554D-02 0.6295074739644D-02 0.6442204132845D-02 0.6592759947299D-02 + 0.6746821540020D-02 0.6904470090278D-02 0.7065788640890D-02 0.7230862140411D-02 + 0.7399777486274D-02 0.7572623568873D-02 0.7749491316634D-02 0.7930473742069D-02 + 0.8115665988856D-02 0.8305165379950D-02 0.8499071466766D-02 0.8697486079432D-02 + 0.8900513378157D-02 0.9108259905724D-02 0.9320834641139D-02 0.9538349054458D-02 + 0.9760917162809D-02 0.9988655587651D-02 0.1022168361328D-01 0.1046012324662D-01 + 0.1070409927831D-01 0.1095373934513D-01 0.1120917399380D-01 0.1147053674614D-01 + 0.1173796416567D-01 0.1201159592567D-01 0.1229157487867D-01 0.1257804712749D-01 + 0.1287116209781D-01 0.1317107261230D-01 0.1347793496636D-01 0.1379190900549D-01 + 0.1411315820435D-01 0.1444184974747D-01 0.1477815461176D-01 0.1512224765076D-01 + 0.1547430768070D-01 0.1583451756840D-01 0.1620306432107D-01 0.1658013917802D-01 + 0.1696593770432D-01 0.1736065988647D-01 0.1776451023010D-01 0.1817769785976D-01 + 0.1860043662078D-01 0.1903294518340D-01 0.1947544714898D-01 0.1992817115851D-01 + 0.2039135100347D-01 0.2086522573888D-01 0.2135003979890D-01 0.2184604311473D-01 + 0.2235349123506D-01 0.2287264544901D-01 0.2340377291164D-01 0.2394714677210D-01 + 0.2450304630442D-01 0.2507175704110D-01 0.2565357090933D-01 0.2624878637023D-01 + 0.2685770856079D-01 0.2748064943882D-01 0.2811792793097D-01 0.2876987008361D-01 + 0.2943680921701D-01 0.3011908608255D-01 0.3081704902317D-01 0.3153105413717D-01 + 0.3226146544526D-01 0.3300865506103D-01 0.3377300336495D-01 0.3455489918178D-01 + 0.3535473996166D-01 0.3617293196481D-01 0.3700989044996D-01 0.3786603986655D-01 + 0.3874181405077D-01 0.3963765642559D-01 0.4055402020463D-01 0.4149136860028D-01 + 0.4245017503575D-01 0.4343092336145D-01 0.4443410807560D-01 0.4546023454915D-01 + 0.4650981925515D-01 0.4758339000262D-01 0.4868148617492D-01 0.4980465897284D-01 + 0.5095347166233D-01 0.5212849982707D-01 0.5333033162594D-01 0.5455956805532D-01 + 0.5581682321655D-01 0.5710272458843D-01 0.5841791330491D-01 0.5976304443808D-01 + 0.6113878728647D-01 0.6254582566883D-01 0.6398485822337D-01 0.6545659871266D-01 + 0.6696177633414D-01 0.6850113603651D-01 0.7007543884180D-01 0.7168546217357D-01 + 0.7333200019098D-01 0.7501586412902D-01 0.7673788264495D-01 0.7849890217102D-01 + 0.8029978727345D-01 0.8214142101804D-01 0.8402470534211D-01 0.8595056143326D-01 + 0.8791993011463D-01 0.8993377223713D-01 0.9199306907843D-01 0.9409882274896D-01 + 0.9625205660489D-01 0.9845381566837D-01 0.1007051670548D+00 0.1030072004074D+00 + 0.1053610283397D+00 0.1077677868841D+00 0.1102286359499D+00 0.1127447597872D+00 + 0.1153173674594D+00 0.1179476933234D+00 0.1206369975171D+00 0.1233865664558D+00 + 0.1261977133354D+00 0.1290717786444D+00 0.1320101306839D+00 0.1350141660957D+00 + 0.1380853103985D+00 0.1412250185328D+00 0.1444347754134D+00 0.1477160964914D+00 + 0.1510705283235D+00 0.1544996491509D+00 0.1580050694857D+00 0.1615884327066D+00 + 0.1652514156630D+00 0.1689957292880D+00 0.1728231192192D+00 0.1767353664298D+00 + 0.1807342878667D+00 0.1848217370983D+00 0.1889996049712D+00 0.1932698202750D+00 + 0.1976343504163D+00 0.2020952021009D+00 0.2066544220260D+00 0.2113140975792D+00 + 0.2160763575477D+00 0.2209433728356D+00 0.2259173571894D+00 0.2310005679329D+00 + 0.2361953067095D+00 0.2415039202338D+00 0.2469288010509D+00 0.2524723883044D+00 + 0.2581371685119D+00 0.2639256763491D+00 0.2698404954414D+00 0.2758842591634D+00 + 0.2820596514458D+00 0.2883694075903D+00 0.2948163150908D+00 0.3014032144623D+00 + 0.3081330000770D+00 0.3150086210059D+00 0.3220330818682D+00 0.3292094436858D+00 + 0.3365408247443D+00 0.3440304014594D+00 0.3516814092484D+00 0.3594971434075D+00 + 0.3674809599929D+00 0.3756362767066D+00 0.3839665737864D+00 0.3924753948986D+00 + 0.4011663480350D+00 0.4100431064119D+00 0.4191094093709D+00 0.4283690632825D+00 + 0.4378259424502D+00 0.4474839900153D+00 0.4573472188619D+00 0.4674197125219D+00 + 0.4777056260780D+00 0.4882091870652D+00 0.4989346963709D+00 0.5098865291302D+00 + 0.5210691356182D+00 0.5324870421380D+00 0.5441448519020D+00 0.5560472459083D+00 + 0.5681989838085D+00 0.5806049047685D+00 0.5932699283193D+00 0.6061990551983D+00 + 0.6193973681794D+00 0.6328700328903D+00 0.6466222986172D+00 0.6606594990947D+00 + 0.6749870532795D+00 0.6896104661081D+00 0.7045353292353D+00 0.7197673217538D+00 + 0.7353122108919D+00 0.7511758526895D+00 0.7673641926498D+00 0.7838832663655D+00 + 0.8007392001176D+00 0.8179382114455D+00 0.8354866096871D+00 0.8533907964854D+00 + 0.8716572662621D+00 0.8902926066542D+00 0.9093034989133D+00 0.9286967182645D+00 + 0.9484791342227D+00 0.9686577108655D+00 0.9892395070593D+00 0.1010231676636D+01 + 0.1031641468518D+01 0.1053476226794D+01 0.1075743390730D+01 0.1098450494732D+01 + 0.1121605168240D+01 0.1145215135559D+01 0.1169288215628D+01 0.1193832321713D+01 + 0.1218855461030D+01 0.1244365734298D+01 0.1270371335200D+01 0.1296880549776D+01 + 0.1323901755725D+01 0.1351443421614D+01 0.1379514106006D+01 0.1408122456482D+01 + 0.1437277208571D+01 0.1466987184574D+01 0.1497261292282D+01 0.1528108523589D+01 + 0.1559537952982D+01 0.1591558735919D+01 0.1624180107089D+01 0.1657411378532D+01 + 0.1691261937647D+01 0.1725741245050D+01 0.1760858832301D+01 0.1796624299488D+01 + 0.1833047312659D+01 0.1870137601103D+01 0.1907904954477D+01 0.1946359219770D+01 + 0.1985510298095D+01 0.2025368141320D+01 0.2065942748513D+01 0.2107244162211D+01 + 0.2149282464505D+01 0.2192067772925D+01 0.2235610236140D+01 0.2279920029446D+01 + 0.2325007350058D+01 0.2370882412179D+01 0.2417555441862D+01 0.2465036671645D+01 + 0.2513336334955D+01 0.2562464660289D+01 0.2612431865148D+01 0.2663248149729D+01 + 0.2714923690377D+01 0.2767468632769D+01 0.2820893084852D+01 0.2875207109509D+01 + 0.2930420716961D+01 0.2986543856890D+01 0.3043586410284D+01 0.3101558181002D+01 + 0.3160468887046D+01 0.3220328151540D+01 0.3281145493409D+01 0.3342930317763D+01 + 0.3405691905963D+01 0.3469439405388D+01 0.3534181818874D+01 0.3599927993847D+01 + 0.3666686611124D+01 0.3734466173392D+01 0.3803274993364D+01 0.3873121181591D+01 + 0.3944012633951D+01 0.4015957018796D+01 0.4088961763764D+01 0.4163034042250D+01 + 0.4238180759535D+01 0.4314408538572D+01 0.4391723705438D+01 0.4470132274434D+01 + 0.4549639932848D+01 0.4630252025379D+01 0.4711973538219D+01 0.4794809082801D+01 + 0.4878762879210D+01 0.4963838739264D+01 0.5050040049274D+01 0.5137369752468D+01 + 0.5225830331113D+01 0.5315423788316D+01 0.5406151629524D+01 0.5498014843729D+01 + 0.5591013884378D+01 0.5685148650014D+01 0.5780418464637D+01 0.5876822057818D+01 + 0.5974357544556D+01 0.6073022404910D+01 0.6172813463411D+01 0.6273726868265D+01 + 0.6375758070378D+01 0.6478901802200D+01 0.6583152056427D+01 0.6688502064566D+01 + 0.6794944275391D+01 0.6902470333310D+01 0.7011071056667D+01 0.7120736416010D+01 + 0.7231455512336D+01 0.7343216555357D+01 0.7456006841813D+01 0.7569812733849D+01 + 0.7684619637512D+01 0.7800411981379D+01 0.7917173195367D+01 0.8034885689753D+01 + 0.8153530834449D+01 0.8273088938569D+01 0.8393539230326D+01 0.8514859837314D+01 + 0.8637027767209D+01 0.8760018888941D+01 0.8883807914385D+01 0.9008368380622D+01 + 0.9133672632827D+01 0.9259691807821D+01 0.9386395818367D+01 0.9513753338252D+01 + 0.9641731788206D+01 0.9770297322751D+01 0.9899414817999D+01 0.1002904786050D+02 + 0.1015915873719D+02 0.1028970842649D+02 0.1042065659068D+02 0.1055196156952D+02 + 0.1068358037532D+02 0.1081546868938D+02 0.1094758086007D+02 0.1107986990236D+02 + 0.1121228749915D+02 0.1134478400430D+02 0.1147730844752D+02 0.1160980854110D+02 + 0.1174223068874D+02 0.1187451999634D+02 0.1200662028502D+02 0.1213847410631D+02 + 0.1227002275972D+02 0.1240120631259D+02 0.1253196362255D+02 0.1266223236240D+02 + 0.1279194904771D+02 0.1292104906705D+02 0.1304946671507D+02 0.1317713522837D+02 + 0.1330398682438D+02 0.1342995274312D+02 0.1355496329215D+02 0.1367894789459D+02 + 0.1380183514033D+02 0.1392355284052D+02 0.1404402808537D+02 0.1416318730533D+02 + 0.1428095633565D+02 0.1439726048440D+02 0.1451202460404D+02 0.1462517316648D+02 + 0.1473663034167D+02 0.1484632007986D+02 0.1495416619737D+02 0.1506009246602D+02 + 0.1516402270613D+02 0.1526588088319D+02 0.1536559120801D+02 0.1546307824053D+02 + 0.1555826699713D+02 0.1565108306143D+02 0.1574145269854D+02 0.1582930297267D+02 + 0.1591456186808D+02 0.1599715841326D+02 0.1607702280817D+02 0.1615408655464D+02 + 0.1622828258955D+02 0.1629954542085D+02 0.1636781126625D+02 0.1643301819427D+02 + 0.1649510626773D+02 0.1655401768930D+02 0.1660969694894D+02 0.1666209097315D+02 + 0.1671114927559D+02 0.1675682410902D+02 0.1679907061818D+02 0.1683784699343D+02 + 0.1687311462472D+02 0.1690483825579D+02 0.1693298613804D+02 0.1695753018403D+02 + 0.1697844611990D+02 0.1699571363671D+02 0.1700931654003D+02 0.1701924289759D+02 + 0.1702548518446D+02 0.1702804042535D+02 0.1702691033371D+02 0.1702210144695D+02 + 0.1701362525766D+02 0.1700149833994D+02 0.1698574247078D+02 0.1696638474565D+02 + 0.1694345768800D+02 0.1691699935213D+02 0.1688705341886D+02 0.1685366928347D+02 + 0.1681690213549D+02 0.1677681302967D+02 0.1673346894770D+02 0.1668694285012D+02 + 0.1663731371782D+02 0.1658466658277D+02 0.1652909254718D+02 0.1647068879094D+02 + 0.1640955856644D+02 0.1634581118059D+02 0.1627956196336D+02 0.1621093222244D+02 + 0.1614004918357D+02 0.1606704591605D+02 0.1599206124311D+02 0.1591523963664D+02 + 0.1583673109597D+02 0.1575669101036D+02 0.1567528000492D+02 0.1559266376960D+02 + 0.1550901287107D+02 0.1542450254735D+02 0.1533931248491D+02 0.1525362657814D+02 + 0.1516763267127D+02 0.1508152228251D+02 0.1499549031056D+02 0.1490973472356D+02 + 0.1482445623058D+02 0.1473985793583D+02 0.1465614497589D+02 0.1457352414028D+02 + 0.1449220347561D+02 0.1441239187393D+02 0.1433429864561D+02 0.1425813307751D+02 + 0.1418410397681D+02 0.1411241920144D+02 0.1404328517784D+02 0.1397690640670D+02 + 0.1391348495785D+02 0.1385321995514D+02 0.1379630705236D+02 0.1374293790112D+02 + 0.1369329961279D+02 0.1364757421415D+02 0.1360593809949D+02 0.1356856147997D+02 + 0.1353560783157D+02 0.1350723334347D+02 0.1348358636810D+02 0.1346480687464D+02 + 0.1345102590764D+02 0.1344236505232D+02 0.1343893590851D+02 0.1344083957484D+02 + 0.1344816614503D+02 0.1346099421828D+02 0.1347939042540D+02 0.1350340897278D+02 + 0.1353309120597D+02 0.1356846519480D+02 0.1360954534209D+02 0.1365633201758D+02 + 0.1370881121930D+02 0.1376695426396D+02 0.1383071750836D+02 0.1390004210367D+02 + 0.1397485378414D+02 0.1405506269220D+02 0.1414056324144D+02 0.1423123401912D+02 + 0.1432693772972D+02 0.1442752118094D+02 0.1453281531358D+02 0.1464263527642D+02 + 0.1475678054730D+02 0.1487503510142D+02 0.1499716762781D+02 0.1512293179461D+02 + 0.1525206656392D+02 0.1538429655666D+02 0.1551933246776D+02 0.1565687153187D+02 + 0.1579659803967D+02 0.1593818390447D+02 0.1608128927900D+02 0.1622556322157D+02 + 0.1637064441131D+02 0.1651616191120D+02 0.1666173597809D+02 0.1680697891835D+02 + 0.1695149598774D+02 0.1709488633371D+02 0.1723674397850D+02 0.1737665884075D+02 + 0.1751421779358D+02 0.1764900575657D+02 0.1778060681912D+02 0.1790860539220D+02 + 0.1803258738575D+02 0.1815214140835D+02 0.1826685998585D+02 0.1837634079554D+02 + 0.1848018791211D+02 0.1857801306162D+02 0.1866943687952D+02 0.1875409016857D+02 + 0.1883161515267D+02 0.1890166672198D+02 0.1896391366520D+02 0.1901803988445D+02 + 0.1906374558812D+02 0.1910074845718D+02 0.1912878478041D+02 0.1914761055363D+02 + 0.1915700253863D+02 0.1915675927687D+02 0.1914670205356D+02 0.1912667580745D+02 + 0.1909654998194D+02 0.1905621931305D+02 0.1900560455010D+02 0.1894465310484D+02 + 0.1887333962512D+02 0.1879166648926D+02 0.1869966421757D+02 0.1859739179747D+02 + 0.1848493691927D+02 0.1836241611944D+02 0.1822997482895D+02 0.1808778732426D+02 + 0.1793605657890D+02 0.1777501401406D+02 0.1760491914670D+02 0.1742605913446D+02 + 0.1723874821651D+02 0.1704332705040D+02 0.1684016194511D+02 0.1662964399086D+02 + 0.1641218808699D+02 0.1618823186940D+02 0.1595823453954D+02 0.1572267559759D+02 + 0.1548205348276D+02 0.1523688412417D+02 0.1498769940622D+02 0.1473504555295D+02 + 0.1447948143629D+02 0.1422157681337D+02 0.1396191049895D+02 0.1370106847899D+02 + 0.1343964197217D+02 0.1317822544633D+02 0.1291741459732D+02 0.1265780429795D+02 + 0.1239998652538D+02 0.1214454827506D+02 0.1189206947003D+02 0.1164312087454D+02 + 0.1139826202075D+02 0.1115803915793D+02 0.1092298323335D+02 0.1069360791393D+02 + 0.1047040765827D+02 0.1025385584784D+02 0.1004440298668D+02 0.9842474978315D+01 + 0.9648471488531D+01 0.9462764402487D+01 0.9285696383562D+01 0.9117579542610D+01 + 0.8958694223664D+01 0.8809287913251D+01 0.8669574279281D+01 0.8539732345000D+01 + 0.8419905802854D+01 0.8310202472462D+01 0.8210693906193D+01 0.8121415145123D+01 + 0.8042364627399D+01 0.7973504250305D+01 0.7914759586509D+01 0.7866020254239D+01 + 0.7827140440310D+01 0.7797939574181D+01 0.7778203150401D+01 0.7767683696076D+01 + 0.7766101879191D+01 0.7773147752910D+01 0.7788482130224D+01 0.7811738082649D+01 + 0.7842522555957D+01 0.7880418095328D+01 0.7924984671660D+01 0.7975761600215D+01 + 0.8032269542264D+01 0.8094012579876D+01 0.8160480353611D+01 0.8231150252446D+01 + 0.8305489644993D+01 0.8382958140784D+01 0.8463009870227D+01 0.8545095771695D+01 + 0.8628665874201D+01 0.8713171564104D+01 0.8798067824410D+01 0.8882815435410D+01 + 0.8966883125662D+01 0.9049749662614D+01 0.9130905872628D+01 0.9209856580576D+01 + 0.9286122459755D+01 0.9359241783464D+01 0.9428772070232D+01 0.9494291615411D+01 + 0.9555400902606D+01 0.9611723889203D+01 0.9662909161105D+01 0.9708630952629D+01 + 0.9748590028412D+01 0.9782514425040D+01 0.9810160051033D+01 0.9831311144696D+01 + 0.9845780590219D+01 0.9853410093278D+01 0.9854070218224D+01 0.9847660289749D+01 + 0.9834108162671D+01 0.9813369864231D+01 0.9785429113934D+01 0.9750296726618D+01 + 0.9708009904977D+01 0.9658631428287D+01 0.9602248744509D+01 0.9538972973344D+01 + 0.9468937828113D+01 0.9392298464583D+01 0.9309230265072D+01 0.9219927566246D+01 + 0.9124602339109D+01 0.9023482829682D+01 0.8916812168780D+01 0.8804846959226D+01 + 0.8687855848615D+01 0.8566118095582D+01 0.8439922137218D+01 0.8309564165008D+01 + 0.8175346716309D+01 0.8037577288018D+01 0.7896566978700D+01 0.7752629164977D+01 + 0.7606078217607D+01 0.7457228262158D+01 0.7306391988763D+01 0.7153879514955D+01 + 0.6999997305096D+01 0.6845047149450D+01 0.6689325205489D+01 0.6533121103532D+01 + 0.6376717118388D+01 0.6220387408225D+01 0.6064397321456D+01 0.5909002772035D+01 + 0.5754449683166D+01 0.5600973499038D+01 0.5448798763889D+01 0.5298138767335D+01 + 0.5149195254631D+01 0.5002158200226D+01 0.4857205642751D+01 0.4714503579299D+01 + 0.4574205916718D+01 0.4436454477387D+01 0.4301379056834D+01 0.4169097530399D+01 + 0.4039716006044D+01 0.3913329020311D+01 0.3790019774357D+01 0.3669860406979D+01 + 0.3552912301468D+01 0.3439226423147D+01 0.3328843684463D+01 0.3221795334510D+01 + 0.3118103369910D+01 0.3017780964033D+01 0.2920832911607D+01 0.2827256085858D+01 + 0.2737039905395D+01 0.2650166808185D+01 0.2566612730049D+01 0.2486347585261D+01 + 0.2409335746934D+01 0.2335536525040D+01 0.2264904640019D+01 0.2197390690115D+01 + 0.2132941610696D+01 0.2071501123983D+01 0.2013010177747D+01 0.1957407371718D+01 + 0.1904629370560D+01 0.1854611302453D+01 0.1807287142453D+01 0.1762590079946D+01 + 0.1720452869667D+01 0.1680808165868D+01 0.1643588839388D+01 0.1608728277461D+01 + 0.1576160666249D+01 0.1545821256189D+01 0.1517646610345D+01 0.1491574836053D+01 + 0.1467545800248D+01 0.1445501328920D+01 0.1425385391232D+01 0.1407144268890D+01 + 0.1390726711404D+01 0.1376084077925D+01 0.1363170466350D+01 0.1351942830457D+01 + 0.1342361085779D+01 0.1334388204966D+01 0.1327990303358D+01 0.1323136715467D+01 + 0.1319800063007D+01 0.1317956315104D+01 0.1317584841210D+01 0.1318668457180D+01 + 0.1321193464890D+01 0.1325149685643D+01 0.1330530487491D+01 0.1337332806444D+01 + 0.1345557161395D+01 0.1355207662354D+01 0.1366292011405D+01 0.1378821495537D+01 + 0.1392810970232D+01 0.1408278278149D+01 0.1425359771691D+01 0.1444190648292D+01 + 0.1464793160347D+01 0.1487194690007D+01 0.1511427826231D+01 0.1537530458280D+01 + 0.1565545885720D+01 0.1595522945008D+01 0.1627516152658D+01 + 7 1019 + 1 0 -1 -600.92914 + 2 0 -1 -70.72762 + 2 1 1 -61.62006 + 2 1 -2 -60.33779 + 3 0 -1 -6.85259 + 3 1 1 -4.08398 + 3 1 -2 -3.92195 + 0.2785469948406D-04 0.2850989761226D-04 0.2918050388790D-04 0.2986688053863D-04 + 0.3056939830326D-04 0.3128843663162D-04 0.3202438388908D-04 0.3277763756579D-04 + 0.3354860449101D-04 0.3433770105225D-04 0.3514535341970D-04 0.3597199777588D-04 + 0.3681808055063D-04 0.3768405866170D-04 0.3857039976086D-04 0.3947758248589D-04 + 0.4040609671844D-04 0.4135644384787D-04 0.4232913704140D-04 0.4332470152045D-04 + 0.4434367484359D-04 0.4538660719602D-04 0.4645406168587D-04 0.4754661464746D-04 + 0.4866485595164D-04 0.4980938932344D-04 0.5098083266708D-04 0.5217981839867D-04 + 0.5340699378670D-04 0.5466302130048D-04 0.5594857896670D-04 0.5726436073447D-04 + 0.5861107684878D-04 0.5998945423273D-04 0.6140023687881D-04 0.6284418624921D-04 + 0.6432208168557D-04 0.6583472082835D-04 0.6738292004593D-04 0.6896751487386D-04 + 0.7058936046433D-04 0.7224933204614D-04 0.7394832539552D-04 0.7568725731789D-04 + 0.7746706614092D-04 0.7928871221918D-04 0.8115317845047D-04 0.8306147080440D-04 + 0.8501461886319D-04 0.8701367637523D-04 0.8905972182149D-04 0.9115385899529D-04 + 0.9329721759554D-04 0.9549095383390D-04 0.9773625105613D-04 0.1000343203780D-03 + 0.1023864013358D-03 0.1047937625530D-03 0.1072577024207D-03 0.1097795497962D-03 + 0.1123606647159D-03 0.1150024391264D-03 0.1177062976316D-03 0.1204736982579D-03 + 0.1233061332371D-03 0.1262051298076D-03 0.1291722510338D-03 0.1322090966461D-03 + 0.1353173038985D-03 0.1384985484482D-03 0.1417545452541D-03 0.1450870494977D-03 + 0.1484978575242D-03 0.1519888078065D-03 0.1555617819316D-03 0.1592187056094D-03 + 0.1629615497059D-03 0.1667923312999D-03 0.1707131147644D-03 0.1747260128738D-03 + 0.1788331879363D-03 0.1830368529529D-03 0.1873392728036D-03 0.1917427654613D-03 + 0.1962497032336D-03 0.2008625140339D-03 0.2055836826825D-03 0.2104157522371D-03 + 0.2153613253549D-03 0.2204230656869D-03 0.2256036993036D-03 0.2309060161547D-03 + 0.2363328715630D-03 0.2418871877523D-03 0.2475719554116D-03 0.2533902352953D-03 + 0.2593451598611D-03 0.2654399349456D-03 0.2716778414794D-03 0.2780622372415D-03 + 0.2845965586551D-03 0.2912843226253D-03 0.2981291284186D-03 0.3051346595875D-03 + 0.3123046859388D-03 0.3196430655483D-03 0.3271537468220D-03 0.3348407706058D-03 + 0.3427082723431D-03 0.3507604842842D-03 0.3590017377457D-03 0.3674364654231D-03 + 0.3760692037569D-03 0.3849045953538D-03 0.3939473914642D-03 0.4032024545169D-03 + 0.4126747607134D-03 0.4223694026816D-03 0.4322915921917D-03 0.4424466629351D-03 + 0.4528400733674D-03 0.4634774096178D-03 0.4743643884660D-03 0.4855068603879D-03 + 0.4969108126721D-03 0.5085823726089D-03 0.5205278107526D-03 0.5327535442603D-03 + 0.5452661403075D-03 0.5580723195830D-03 0.5711789598649D-03 0.5845930996791D-03 + 0.5983219420432D-03 0.6123728582965D-03 0.6267533920187D-03 0.6414712630399D-03 + 0.6565343715427D-03 0.6719508022598D-03 0.6877288287682D-03 0.7038769178830D-03 + 0.7204037341532D-03 0.7373181444605D-03 0.7546292227254D-03 0.7723462547211D-03 + 0.7904787429998D-03 0.8090364119316D-03 0.8280292128607D-03 0.8474673293800D-03 + 0.8673611827279D-03 0.8877214373095D-03 0.9085590063450D-03 0.9298850576490D-03 + 0.9517110195424D-03 0.9740485869007D-03 0.9969097273424D-03 0.1020306687559D-02 + 0.1044251999793D-02 0.1068758488459D-02 0.1093839276929D-02 0.1119507794460D-02 + 0.1145777783290D-02 0.1172663305896D-02 0.1200178752418D-02 0.1228338848251D-02 + 0.1257158661817D-02 0.1286653612512D-02 0.1316839478836D-02 0.1347732406709D-02 + 0.1379348917983D-02 0.1411705919139D-02 0.1444820710199D-02 0.1478710993823D-02 + 0.1513394884635D-02 0.1548890918745D-02 0.1585218063505D-02 0.1622395727472D-02 + 0.1660443770616D-02 0.1699382514747D-02 0.1739232754193D-02 0.1780015766714D-02 + 0.1821753324666D-02 0.1864467706427D-02 0.1908181708078D-02 0.1952918655349D-02 + 0.1998702415849D-02 0.2045557411560D-02 0.2093508631630D-02 0.2142581645446D-02 + 0.2192802616016D-02 0.2244198313648D-02 0.2296796129943D-02 0.2350624092111D-02 + 0.2405710877605D-02 0.2462085829094D-02 0.2519778969778D-02 0.2578821019043D-02 + 0.2639243408481D-02 0.2701078298268D-02 0.2764358593919D-02 0.2829117963415D-02 + 0.2895390854731D-02 0.2963212513750D-02 0.3032619002589D-02 0.3103647218338D-02 + 0.3176334912226D-02 0.3250720709219D-02 0.3326844128061D-02 0.3404745601768D-02 + 0.3484466498590D-02 0.3566049143437D-02 0.3649536839799D-02 0.3734973892157D-02 + 0.3822405628893D-02 0.3911878425729D-02 0.4003439729683D-02 0.4097138083571D-02 + 0.4193023151058D-02 0.4291145742273D-02 0.4391557839999D-02 0.4494312626454D-02 + 0.4599464510671D-02 0.4707069156490D-02 0.4817183511189D-02 0.4929865834738D-02 + 0.5045175729731D-02 0.5163174171964D-02 0.5283923541719D-02 0.5407487655733D-02 + 0.5533931799887D-02 0.5663322762626D-02 0.5795728869117D-02 0.5931220016182D-02 + 0.6069867707997D-02 0.6211745092591D-02 0.6356926999158D-02 0.6505489976198D-02 + 0.6657512330503D-02 0.6813074167014D-02 0.6972257429555D-02 0.7135145942476D-02 + 0.7301825453218D-02 0.7472383675814D-02 0.7646910335361D-02 0.7825497213470D-02 + 0.8008238194716D-02 0.8195229314124D-02 0.8386568805687D-02 0.8582357151965D-02 + 0.8782697134773D-02 0.8987693886973D-02 0.9197454945421D-02 0.9412090305061D-02 + 0.9631712474216D-02 0.9856436531081D-02 0.1008638018146D-01 0.1032166381776D-01 + 0.1056241057929D-01 0.1080874641382D-01 0.1106080014059D-01 0.1131870351456D-01 + 0.1158259129217D-01 0.1185260129847D-01 0.1212887449568D-01 0.1241155505336D-01 + 0.1270079041993D-01 0.1299673139589D-01 0.1329953220851D-01 0.1360935058821D-01 + 0.1392634784655D-01 0.1425068895590D-01 0.1458254263085D-01 0.1492208141131D-01 + 0.1526948174750D-01 0.1562492408662D-01 0.1598859296151D-01 0.1636067708113D-01 + 0.1674136942297D-01 0.1713086732749D-01 0.1752937259447D-01 0.1793709158156D-01 + 0.1835423530474D-01 0.1878101954106D-01 0.1921766493349D-01 0.1966439709798D-01 + 0.2012144673282D-01 0.2058904973028D-01 0.2106744729058D-01 0.2155688603831D-01 + 0.2205761814125D-01 0.2256990143168D-01 0.2309399953026D-01 0.2363018197247D-01 + 0.2417872433768D-01 0.2473990838093D-01 0.2531402216746D-01 0.2590136020997D-01 + 0.2650222360877D-01 0.2711692019482D-01 0.2774576467574D-01 0.2838907878477D-01 + 0.2904719143282D-01 0.2972043886368D-01 0.3040916481234D-01 0.3111372066657D-01 + 0.3183446563184D-01 0.3257176689949D-01 0.3332599981844D-01 0.3409754807025D-01 + 0.3488680384785D-01 0.3569416803777D-01 0.3652005040609D-01 0.3736486978808D-01 + 0.3822905428173D-01 0.3911304144500D-01 0.4001727849716D-01 0.4094222252402D-01 + 0.4188834068727D-01 0.4285611043798D-01 0.4384601973426D-01 0.4485856726328D-01 + 0.4589426266756D-01 0.4695362677574D-01 0.4803719183788D-01 0.4914550176524D-01 + 0.5027911237482D-01 0.5143859163859D-01 0.5262451993748D-01 0.5383749032032D-01 + 0.5507810876774D-01 0.5634699446102D-01 0.5764478005620D-01 0.5897211196327D-01 + 0.6032965063071D-01 0.6171807083536D-01 0.6313806197773D-01 0.6459032838288D-01 + 0.6607558960685D-01 0.6759458074882D-01 0.6914805276901D-01 0.7073677281249D-01 + 0.7236152453886D-01 0.7402310845803D-01 0.7572234227204D-01 0.7746006122315D-01 + 0.7923711844813D-01 0.8105438533895D-01 0.8291275190994D-01 0.8481312717146D-01 + 0.8675643951014D-01 0.8874363707591D-01 0.9077568817577D-01 0.9285358167436D-01 + 0.9497832740164D-01 0.9715095656743D-01 0.9937252218316D-01 0.1016440994908D+00 + 0.1039667863991D+00 0.1063417039270D+00 0.1087699966548D+00 0.1112528331826D+00 + 0.1137914065961D+00 0.1163869349408D+00 0.1190406617032D+00 0.1217538563001D+00 + 0.1245278145756D+00 0.1273638593065D+00 0.1302633407152D+00 0.1332276369907D+00 + 0.1362581548182D+00 0.1393563299164D+00 0.1425236275831D+00 0.1457615432496D+00 + 0.1490716030426D+00 0.1524553643553D+00 0.1559144164263D+00 0.1594503809276D+00 + 0.1630649125605D+00 0.1667596996605D+00 0.1705364648103D+00 0.1743969654622D+00 + 0.1783429945682D+00 0.1823763812192D+00 0.1864989912927D+00 0.1907127281095D+00 + 0.1950195330982D+00 0.1994213864695D+00 0.2039203078978D+00 0.2085183572123D+00 + 0.2132176350966D+00 0.2180202837962D+00 0.2229284878350D+00 0.2279444747402D+00 + 0.2330705157750D+00 0.2383089266807D+00 0.2436620684255D+00 0.2491323479628D+00 + 0.2547222189964D+00 0.2604341827547D+00 0.2662707887714D+00 0.2722346356749D+00 + 0.2783283719850D+00 0.2845546969161D+00 0.2909163611887D+00 0.2974161678473D+00 + 0.3040569730850D+00 0.3108416870752D+00 0.3177732748086D+00 0.3248547569377D+00 + 0.3320892106260D+00 0.3394797704033D+00 0.3470296290258D+00 0.3547420383422D+00 + 0.3626203101629D+00 0.3706678171348D+00 0.3788879936194D+00 0.3872843365743D+00 + 0.3958604064379D+00 0.4046198280174D+00 0.4135662913777D+00 0.4227035527333D+00 + 0.4320354353406D+00 0.4415658303911D+00 0.4512986979050D+00 0.4612380676239D+00 + 0.4713880399026D+00 0.4817527865991D+00 0.4923365519627D+00 0.5031436535179D+00 + 0.5141784829457D+00 0.5254455069594D+00 0.5369492681755D+00 0.5486943859781D+00 + 0.5606855573760D+00 0.5729275578526D+00 0.5854252422055D+00 0.5981835453774D+00 + 0.6112074832756D+00 0.6245021535788D+00 0.6380727365318D+00 0.6519244957251D+00 + 0.6660627788593D+00 0.6804930184930D+00 0.6952207327721D+00 0.7102515261402D+00 + 0.7255910900280D+00 0.7412452035208D+00 0.7572197340019D+00 0.7735206377712D+00 + 0.7901539606368D+00 0.8071258384784D+00 0.8244424977799D+00 0.8421102561313D+00 + 0.8601355226955D+00 0.8785247986406D+00 0.8972846775342D+00 0.9164218456981D+00 + 0.9359430825217D+00 0.9558552607316D+00 0.9761653466152D+00 0.9968804001960D+00 + 0.1018007575359D+01 0.1039554119923D+01 0.1061527375657D+01 0.1083934778239D+01 + 0.1106783857155D+01 0.1130082235534D+01 0.1153837629920D+01 0.1178057849966D+01 + 0.1202750798072D+01 0.1227924468933D+01 0.1253586949019D+01 0.1279746415969D+01 + 0.1306411137905D+01 0.1333589472658D+01 0.1361289866898D+01 0.1389520855179D+01 + 0.1418291058879D+01 0.1447609185042D+01 0.1477484025114D+01 0.1507924453573D+01 + 0.1538939426443D+01 0.1570537979692D+01 0.1602729227515D+01 0.1635522360484D+01 + 0.1668926643575D+01 0.1702951414064D+01 0.1737606079279D+01 0.1772900114215D+01 + 0.1808843059006D+01 0.1845444516241D+01 0.1882714148124D+01 0.1920661673484D+01 + 0.1959296864608D+01 0.1998629543915D+01 0.2038669580452D+01 0.2079426886209D+01 + 0.2120911412251D+01 0.2163133144669D+01 0.2206102100325D+01 0.2249828322406D+01 + 0.2294321875771D+01 0.2339592842093D+01 0.2385651314777D+01 0.2432507393674D+01 + 0.2480171179551D+01 0.2528652768350D+01 0.2577962245199D+01 0.2628109678186D+01 + 0.2679105111893D+01 0.2730958560667D+01 0.2783680001651D+01 0.2837279367540D+01 + 0.2891766539077D+01 0.2947151337282D+01 0.3003443515395D+01 0.3060652750548D+01 + 0.3118788635144D+01 0.3177860667952D+01 0.3237878244901D+01 0.3298850649581D+01 + 0.3360787043433D+01 0.3423696455642D+01 0.3487587772706D+01 0.3552469727697D+01 + 0.3618350889205D+01 0.3685239649953D+01 0.3753144215094D+01 0.3822072590172D+01 + 0.3892032568757D+01 0.3963031719749D+01 0.4035077374344D+01 0.4108176612659D+01 + 0.4182336250031D+01 0.4257562822965D+01 0.4333862574749D+01 0.4411241440733D+01 + 0.4489705033259D+01 0.4569258626264D+01 0.4649907139541D+01 0.4731655122665D+01 + 0.4814506738591D+01 0.4898465746917D+01 0.4983535486831D+01 0.5069718859726D+01 + 0.5157018311510D+01 0.5245435814598D+01 0.5334972849604D+01 0.5425630386741D+01 + 0.5517408866922D+01 0.5610308182594D+01 0.5704327658293D+01 0.5799466030950D+01 + 0.5895721429939D+01 0.5993091356902D+01 0.6091572665343D+01 0.6191161540026D+01 + 0.6291853476174D+01 0.6393643258502D+01 0.6496524940089D+01 0.6600491821120D+01 + 0.6705536427508D+01 0.6811650489422D+01 0.6918824919752D+01 0.7027049792516D+01 + 0.7136314321257D+01 0.7246606837441D+01 0.7357914768890D+01 0.7470224618285D+01 + 0.7583521941761D+01 0.7697791327633D+01 0.7813016375286D+01 0.7929179674266D+01 + 0.8046262783610D+01 0.8164246211451D+01 0.8283109394943D+01 0.8402830680546D+01 + 0.8523387304717D+01 0.8644755375050D+01 0.8766909851919D+01 0.8889824530662D+01 + 0.9013472024372D+01 0.9137823747332D+01 0.9262849899162D+01 0.9388519449721D+01 + 0.9514800124838D+01 0.9641658392911D+01 0.9769059452454D+01 0.9896967220642D+01 + 0.1002534432292D+02 0.1015415208375D+02 0.1028335051856D+02 0.1041289832694D+02 + 0.1054275288720D+02 0.1067287025230D+02 0.1080320514732D+02 0.1093371096842D+02 + 0.1106433978348D+02 0.1119504233437D+02 0.1132576804111D+02 0.1145646500778D+02 + 0.1158708003040D+02 0.1171755860686D+02 0.1184784494890D+02 0.1197788199624D+02 + 0.1210761143300D+02 0.1223697370643D+02 0.1236590804802D+02 0.1249435249713D+02 + 0.1262224392713D+02 0.1274951807422D+02 0.1287610956891D+02 0.1300195197030D+02 + 0.1312697780324D+02 0.1325111859836D+02 0.1337430493511D+02 0.1349646648783D+02 + 0.1361753207499D+02 0.1373742971158D+02 0.1385608666463D+02 0.1397342951220D+02 + 0.1408938420551D+02 0.1420387613459D+02 0.1431683019720D+02 0.1442817087135D+02 + 0.1453782229112D+02 0.1464570832613D+02 0.1475175266444D+02 0.1485587889894D+02 + 0.1495801061734D+02 0.1505807149563D+02 0.1515598539505D+02 0.1525167646255D+02 + 0.1534506923469D+02 0.1543608874497D+02 0.1552466063453D+02 0.1561071126614D+02 + 0.1569416784144D+02 0.1577495852137D+02 0.1585301254962D+02 0.1592826037906D+02 + 0.1600063380113D+02 0.1607006607780D+02 0.1613649207626D+02 0.1619984840598D+02 + 0.1626007355811D+02 0.1631710804694D+02 0.1637089455331D+02 0.1642137806973D+02 + 0.1646850604694D+02 0.1651222854187D+02 0.1655249836643D+02 0.1658927123725D+02 + 0.1662250592571D+02 0.1665216440833D+02 0.1667821201695D+02 0.1670061758849D+02 + 0.1671935361393D+02 0.1673439638626D+02 0.1674572614680D+02 0.1675332722984D+02 + 0.1675718820489D+02 0.1675730201639D+02 0.1675366612029D+02 0.1674628261721D+02 + 0.1673515838160D+02 0.1672030518660D+02 0.1670173982403D+02 0.1667948421911D+02 + 0.1665356553932D+02 0.1662401629713D+02 0.1659087444589D+02 0.1655418346847D+02 + 0.1651399245822D+02 0.1647035619162D+02 0.1642333519220D+02 0.1637299578522D+02 + 0.1631941014255D+02 0.1626265631736D+02 0.1620281826800D+02 0.1613998587066D+02 + 0.1607425492032D+02 0.1600572711953D+02 0.1593451005448D+02 0.1586071715810D+02 + 0.1578446765952D+02 0.1570588651969D+02 0.1562510435271D+02 0.1554225733239D+02 + 0.1545748708393D+02 0.1537094056013D+02 0.1528276990216D+02 0.1519313228432D+02 + 0.1510218974282D+02 0.1501010898825D+02 0.1491706120172D+02 0.1482322181439D+02 + 0.1472877027056D+02 0.1463388977412D+02 0.1453876701847D+02 0.1444359189998D+02 + 0.1434855721516D+02 0.1425385834165D+02 0.1415969290335D+02 0.1406626041994D+02 + 0.1397376194113D+02 0.1388239966616D+02 0.1379237654884D+02 0.1370389588884D+02 + 0.1361716090978D+02 0.1353237432463D+02 0.1344973788944D+02 0.1336945194585D+02 + 0.1329171495353D+02 0.1321672301317D+02 0.1314466938134D+02 0.1307574397764D+02 + 0.1301013288643D+02 0.1294801785263D+02 0.1288957577415D+02 0.1283497819168D+02 + 0.1278439077719D+02 0.1273797282248D+02 0.1269587672938D+02 0.1265824750278D+02 + 0.1262522224822D+02 0.1259692967553D+02 0.1257348960995D+02 0.1255501251259D+02 + 0.1254159901155D+02 0.1253333944568D+02 0.1253031342232D+02 0.1253258939096D+02 + 0.1254022423435D+02 0.1255326287874D+02 0.1257173792503D+02 0.1259566930240D+02 + 0.1262506394600D+02 0.1265991550053D+02 0.1270020405107D+02 0.1274589588280D+02 + 0.1279694327113D+02 0.1285328430368D+02 0.1291484273542D+02 0.1298152787843D+02 + 0.1305323452739D+02 0.1312984292209D+02 0.1321121874799D+02 0.1329721317575D+02 + 0.1338766294085D+02 0.1348239046377D+02 0.1358120401168D+02 0.1368389790210D+02 + 0.1379025274883D+02 0.1390003575075D+02 0.1401300102338D+02 0.1412888997336D+02 + 0.1424743171576D+02 0.1436834353392D+02 0.1449133138140D+02 0.1461609042557D+02 + 0.1474230563199D+02 0.1486965238885D+02 0.1499779717038D+02 0.1512639823800D+02 + 0.1525510637798D+02 0.1538356567399D+02 0.1551141431302D+02 0.1563828542269D+02 + 0.1576380793817D+02 0.1588760749642D+02 0.1600930735575D+02 0.1612852933795D+02 + 0.1624489479082D+02 0.1635802556828D+02 0.1646754502520D+02 0.1657307902430D+02 + 0.1667425695189D+02 0.1677071273953D+02 0.1686208588836D+02 0.1694802249283D+02 + 0.1702817626054D+02 0.1710220952485D+02 0.1716979424676D+02 0.1723061300262D+02 + 0.1728435995432D+02 0.1733074179819D+02 0.1736947868953D+02 0.1740030513890D+02 + 0.1742297087709D+02 0.1743724168510D+02 0.1744290018603D+02 0.1743974659549D+02 + 0.1742759942746D+02 0.1740629615247D+02 0.1737569380519D+02 0.1733566953861D+02 + 0.1728612112223D+02 0.1722696738154D+02 0.1715814857673D+02 0.1707962671824D+02 + 0.1699138581740D+02 0.1689343207022D+02 0.1678579397303D+02 0.1666852236849D+02 + 0.1654169042108D+02 0.1640539352121D+02 0.1625974911749D+02 0.1610489647684D+02 + 0.1594099637258D+02 0.1576823070075D+02 0.1558680202530D+02 0.1539693305309D+02 + 0.1519886603990D+02 0.1499286212893D+02 0.1477920062373D+02 0.1455817819755D+02 + 0.1433010804159D+02 0.1409531895495D+02 0.1385415437910D+02 0.1360697138042D+02 + 0.1335413958412D+02 0.1309604006359D+02 0.1283306418914D+02 0.1256561244045D+02 + 0.1229409318742D+02 0.1201892144398D+02 0.1174051759988D+02 0.1145930613567D+02 + 0.1117571432593D+02 0.1089017093619D+02 0.1060310491905D+02 0.1031494411493D+02 + 0.1002611396307D+02 0.9737036228271D+01 0.9448127748978D+01 0.9159799212137D+01 + 0.8872453960224D+01 0.8586486835702D+01 0.8302283068016D+01 0.8020217208022D+01 + 0.7740652114540D+01 0.7463937997512D+01 0.7190411521609D+01 0.6920394974658D+01 + 0.6654195503776D+01 0.6392104422571D+01 0.6134396592015D+01 0.5881329877208D+01 + 0.5633144681845D+01 0.5390063561676D+01 0.5152290917823D+01 0.4920012770300D+01 + 0.4693396611616D+01 0.4472591339847D+01 0.4257727270097D+01 0.4048916222783D+01 + 0.3846251686772D+01 0.3649809054935D+01 0.3459645929298D+01 0.3275802492617D+01 + 0.3098301942838D+01 0.2927150986626D+01 0.2762340387854D+01 0.2603845566745D+01 + 0.2451627245138D+01 0.2305632133210D+01 0.2165793652857D+01 0.2032032692873D+01 + 0.1904258390998D+01 0.1782368937897D+01 0.1666252398174D+01 0.1555787543536D+01 + 0.1450844693334D+01 0.1351286557804D+01 0.1256969079469D+01 0.1167742268318D+01 + 0.1083451026567D+01 0.1003935959018D+01 0.9290341652443D+00 0.8585800100976D+00 + 0.7924058692696D+00 0.7303428469392D+00 0.6722214628130D+00 0.6178723061713D+00 + 0.5671266548366D+00 0.5198170572937D+00 0.4757778765085D+00 0.4348457943007D+00 + 0.3968602754441D+00 0.3616639909708D+00 0.3291032004545D+00 0.2990280933404D+00 + 0.2712930896597D+00 0.2457571007346D+00 0.2222837507206D+00 0.2007415600622D+00 + 0.1810040921462D+00 0.1629500646234D+00 0.1464634270347D+00 0.1314334065222D+00 + 0.1177545235250D+00 0.1053265794595D+00 0.9405461845734D-01 0.8384886528833D-01 + 0.7462464162849D-01 0.6630226284235D-01 0.5880691744214D-01 0.5206853135862D-01 + 0.4602161911498D-01 0.4060512393584D-01 0.3576224875042D-01 0.3144027996354D-01 + 0.2759040577246D-01 0.2416753070297D-01 0.2113008792669D-01 0.1843985080459D-01 + 0.1606174498113D-01 0.1396366223069D-01 0.1211627713474D-01 0.1049286754506D-01 + 0.9069139668069D-02 0.7823058487381D-02 0.6734684128178D-02 0.5786014658544D-02 + 0.4960835719908D-02 0.4244577282225D-02 0.3624177729732D-02 0.3087955400419D-02 + 0.2625487627035D-02 0.2227497259527D-02 0.1885746588363D-02 0.1592938535094D-02 + 0.1342624930581D-02 0.1129121662324D-02 0.9474304399453D-03 0.7931669017510D-03 + 0.6624947650309D-03 0.5520657078526D-03 0.4589646602094D-03 0.3806601769220D-03 + 0.3149595632568D-03 0.2599684263118D-03 0.2140543303820D-03 0.1758142422924D-03 + 0.1440454626657D-03 0.1177197508559D-03 0.9596036446378D-04 0.7802174860524D-04 + 0.6327162510976D-04 0.5117524730842D-04 0.4128160176895D-04 0.3321135403353D-04 + 0.2664635092197D-04 0.2132050711792D-04 0.1701191842681D-04 0.1353605817300D-04 + 0.1073992660897D-04 0.8497035878124D-05 0.6703124964229D-05 0.5272510150108D-05 + 0.4134986785638D-05 0.3233207634943D-05 0.2520471748410D-05 0.1958865710514D-05 + 0.1517706279742D-05 0.1172239898148D-05 0.9025603453303D-06 0.6927109876189D-06 + 0.5299426724681D-06 0.4041023853658D-06 0.3071313668175D-06 0.2326545239714D-06 + 0.1756457075926D-06 0.1321558008512D-06 0.9909261999878D-07 0.7404339427499D-07 + 0.5513210650966D-07 0.4090526741789D-07 0.3024079341638D-07 0.2227558518901D-07 + 0.1634818494233D-07 0.1195354464424D-07 0.8707483586044D-08 0.6318867278968D-08 + 0.4567914967219D-08 0.3289352094104D-08 0.2359377458458D-08 0.1685621648831D-08 + 0.1199441444985D-08 0.8500308799920D-09 0.5999391982645D-09 0.4216737768588D-09 + 0.2951361838067D-09 0.2056952508216D-09 0.1427450951301D-09 0.9863071098592D-10 + 0.6785093267399D-10 0.4646977189272D-10 0.3168359136154D-10 0.2150429387060D-10 + 0.1452848527224D-10 0.9770053216322D-11 0.6539304800065D-11 0.4356126796501D-11 + 0.2887880260806D-11 0.1905201798784D-11 0.1250725394878D-11 0.8169916617209D-12 + 0.5309432694921D-12 0.3433000833030D-12 0.2208020111155D-12 0.1412809577700D-12 + 0.8992689621478D-13 0.5693706621335D-13 0.3585707402774D-13 0.2245975161629D-13 + 0.1399148636359D-13 0.8668296063641D-14 0.5340818176435D-14 diff --git a/Test/Ni4/v_ni4.1 b/Test/Ni4/v_ni4.1 new file mode 100644 index 000000000..4e8a87815 --- /dev/null +++ b/Test/Ni4/v_ni4.1 @@ -0,0 +1,1554 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Ni. + 2 -0.3322713216605D-24 + LSMS: xx z= 28. xvalws= 5.28292 + 28. 6.55000 10. 0.6401316680236D+00 + -0.1113096740000D+02 0.8563086195639D+00 1010 +-0.5599696222824D+02-0.5599692578589D+02-0.5599688890636D+02-0.5599685158441D+02 +-0.5599681381473D+02-0.5599677559194D+02-0.5599673691063D+02-0.5599669776527D+02 +-0.5599665815031D+02-0.5599661806011D+02-0.5599657748897D+02-0.5599653643111D+02 +-0.5599649488071D+02-0.5599645283185D+02-0.5599641027854D+02-0.5599636721475D+02 +-0.5599632363433D+02-0.5599627953111D+02-0.5599623489879D+02-0.5599618973104D+02 +-0.5599614402142D+02-0.5599609776345D+02-0.5599605095053D+02-0.5599600357602D+02 +-0.5599595563317D+02-0.5599590711516D+02-0.5599585801509D+02-0.5599580832599D+02 +-0.5599575804078D+02-0.5599570715230D+02-0.5599565565333D+02-0.5599560353654D+02 +-0.5599555079451D+02-0.5599549741974D+02-0.5599544340465D+02-0.5599538874153D+02 +-0.5599533342264D+02-0.5599527744008D+02-0.5599522078591D+02-0.5599516345205D+02 +-0.5599510543037D+02-0.5599504671259D+02-0.5599498729038D+02-0.5599492715528D+02 +-0.5599486629873D+02-0.5599480471208D+02-0.5599474238656D+02-0.5599467931332D+02 +-0.5599461548337D+02-0.5599455088765D+02-0.5599448551696D+02-0.5599441936200D+02 +-0.5599435241335D+02-0.5599428466151D+02-0.5599421609682D+02-0.5599414670954D+02 +-0.5599407648980D+02-0.5599400542760D+02-0.5599393351283D+02-0.5599386073527D+02 +-0.5599378708456D+02-0.5599371255022D+02-0.5599363712166D+02-0.5599356078813D+02 +-0.5599348353878D+02-0.5599340536263D+02-0.5599332624854D+02-0.5599324618526D+02 +-0.5599316516140D+02-0.5599308316543D+02-0.5599300018570D+02-0.5599291621038D+02 +-0.5599283122754D+02-0.5599274522508D+02-0.5599265819077D+02-0.5599257011222D+02 +-0.5599248097690D+02-0.5599239077213D+02-0.5599229948507D+02-0.5599220710274D+02 +-0.5599211361199D+02-0.5599201899952D+02-0.5599192325186D+02-0.5599182635539D+02 +-0.5599172829632D+02-0.5599162906071D+02-0.5599152863442D+02-0.5599142700317D+02 +-0.5599132415249D+02-0.5599122006776D+02-0.5599111473416D+02-0.5599100813669D+02 +-0.5599090026020D+02-0.5599079108932D+02-0.5599068060852D+02-0.5599056880208D+02 +-0.5599045565409D+02-0.5599034114845D+02-0.5599022526885D+02-0.5599010799881D+02 +-0.5598998932164D+02-0.5598986922044D+02-0.5598974767813D+02-0.5598962467740D+02 +-0.5598950020074D+02-0.5598937423045D+02-0.5598924674859D+02-0.5598911773702D+02 +-0.5598898717737D+02-0.5598885505105D+02-0.5598872133927D+02-0.5598858602299D+02 +-0.5598844908295D+02-0.5598831049965D+02-0.5598817025337D+02-0.5598802832414D+02 +-0.5598788469176D+02-0.5598773933579D+02-0.5598759223552D+02-0.5598744337002D+02 +-0.5598729271809D+02-0.5598714025829D+02-0.5598698596891D+02-0.5598682982799D+02 +-0.5598667181329D+02-0.5598651190232D+02-0.5598635007231D+02-0.5598618630022D+02 +-0.5598602056272D+02-0.5598585283623D+02-0.5598568309685D+02-0.5598551132043D+02 +-0.5598533748249D+02-0.5598516155828D+02-0.5598498352276D+02-0.5598480335057D+02 +-0.5598462101605D+02-0.5598443649324D+02-0.5598424975586D+02-0.5598406077731D+02 +-0.5598386953068D+02-0.5598367598873D+02-0.5598348012390D+02-0.5598328190829D+02 +-0.5598308131367D+02-0.5598287831146D+02-0.5598267287276D+02-0.5598246496830D+02 +-0.5598225456847D+02-0.5598204164328D+02-0.5598182616243D+02-0.5598160809520D+02 +-0.5598138741053D+02-0.5598116407698D+02-0.5598093806274D+02-0.5598070933560D+02 +-0.5598047786299D+02-0.5598024361191D+02-0.5598000654900D+02-0.5597976664047D+02 +-0.5597952385215D+02-0.5597927814943D+02-0.5597902949731D+02-0.5597877786036D+02 +-0.5597852320271D+02-0.5597826548807D+02-0.5597800467972D+02-0.5597774074049D+02 +-0.5597747363277D+02-0.5597720331847D+02-0.5597692975908D+02-0.5597665291561D+02 +-0.5597637274859D+02-0.5597608921810D+02-0.5597580228370D+02-0.5597551190451D+02 +-0.5597521803912D+02-0.5597492064565D+02-0.5597461968170D+02-0.5597431510435D+02 +-0.5597400687019D+02-0.5597369493526D+02-0.5597337925510D+02-0.5597305978468D+02 +-0.5597273647846D+02-0.5597240929033D+02-0.5597207817363D+02-0.5597174308115D+02 +-0.5597140396509D+02-0.5597106077709D+02-0.5597071346821D+02-0.5597036198890D+02 +-0.5597000628904D+02-0.5596964631789D+02-0.5596928202409D+02-0.5596891335569D+02 +-0.5596854026009D+02-0.5596816268406D+02-0.5596778057374D+02-0.5596739387460D+02 +-0.5596700253148D+02-0.5596660648853D+02-0.5596620568924D+02-0.5596580007642D+02 +-0.5596538959218D+02-0.5596497417795D+02-0.5596455377443D+02-0.5596412832164D+02 +-0.5596369775883D+02-0.5596326202456D+02-0.5596282105662D+02-0.5596237479207D+02 +-0.5596192316720D+02-0.5596146611754D+02-0.5596100357783D+02-0.5596053548203D+02 +-0.5596006176331D+02-0.5595958235402D+02-0.5595909718570D+02-0.5595860618908D+02 +-0.5595810929402D+02-0.5595760642956D+02-0.5595709752389D+02-0.5595658250430D+02 +-0.5595606129723D+02-0.5595553382823D+02-0.5595500002195D+02-0.5595445980212D+02 +-0.5595391309155D+02-0.5595335981214D+02-0.5595279988483D+02-0.5595223322959D+02 +-0.5595165976547D+02-0.5595107941049D+02-0.5595049208171D+02-0.5594989769518D+02 +-0.5594929616595D+02-0.5594868740802D+02-0.5594807133437D+02-0.5594744785691D+02 +-0.5594681688652D+02-0.5594617833297D+02-0.5594553210495D+02-0.5594487811005D+02 +-0.5594421625474D+02-0.5594354644436D+02-0.5594286858311D+02-0.5594218257403D+02 +-0.5594148831899D+02-0.5594078571866D+02-0.5594007467252D+02-0.5593935507885D+02 +-0.5593862683468D+02-0.5593788983579D+02-0.5593714397671D+02-0.5593638915070D+02 +-0.5593562524973D+02-0.5593485216444D+02-0.5593406978417D+02-0.5593327799692D+02 +-0.5593247668933D+02-0.5593166574665D+02-0.5593084505278D+02-0.5593001449019D+02 +-0.5592917393992D+02-0.5592832328159D+02-0.5592746239336D+02-0.5592659115190D+02 +-0.5592570943241D+02-0.5592481710855D+02-0.5592391405247D+02-0.5592300013478D+02 +-0.5592207522450D+02-0.5592113918908D+02-0.5592019189435D+02-0.5591923320453D+02 +-0.5591826298219D+02-0.5591728108823D+02-0.5591628738187D+02-0.5591528172062D+02 +-0.5591426396027D+02-0.5591323395486D+02-0.5591219155665D+02-0.5591113661612D+02 +-0.5591006898193D+02-0.5590898850093D+02-0.5590789501807D+02-0.5590678837645D+02 +-0.5590566841727D+02-0.5590453497978D+02-0.5590338790131D+02-0.5590222701719D+02 +-0.5590105216076D+02-0.5589986316335D+02-0.5589865985424D+02-0.5589744206062D+02 +-0.5589620960760D+02-0.5589496231817D+02-0.5589370001315D+02-0.5589242251122D+02 +-0.5589112962883D+02-0.5588982118021D+02-0.5588849697734D+02-0.5588715682990D+02 +-0.5588580054527D+02-0.5588442792851D+02-0.5588303878228D+02-0.5588163290685D+02 +-0.5588021010008D+02-0.5587877015737D+02-0.5587731287161D+02-0.5587583803320D+02 +-0.5587434542999D+02-0.5587283484724D+02-0.5587130606761D+02-0.5586975887112D+02 +-0.5586819303509D+02-0.5586660833417D+02-0.5586500454025D+02-0.5586338142245D+02 +-0.5586173874708D+02-0.5586007627761D+02-0.5585839377464D+02-0.5585669099585D+02 +-0.5585496769597D+02-0.5585322362676D+02-0.5585145853695D+02-0.5584967217221D+02 +-0.5584786427512D+02-0.5584603458514D+02-0.5584418283853D+02-0.5584230876837D+02 +-0.5584041210449D+02-0.5583849257340D+02-0.5583654989832D+02-0.5583458379908D+02 +-0.5583259399211D+02-0.5583058019037D+02-0.5582854210335D+02-0.5582647943699D+02 +-0.5582439189365D+02-0.5582227917207D+02-0.5582014096732D+02-0.5581797697076D+02 +-0.5581578686998D+02-0.5581357034878D+02-0.5581132708710D+02-0.5580905676100D+02 +-0.5580675904257D+02-0.5580443359992D+02-0.5580208009713D+02-0.5579969819415D+02 +-0.5579728754684D+02-0.5579484780684D+02-0.5579237862153D+02-0.5578987963404D+02 +-0.5578735048312D+02-0.5578479080313D+02-0.5578220022398D+02-0.5577957837107D+02 +-0.5577692486524D+02-0.5577423932271D+02-0.5577152135503D+02-0.5576877056901D+02 +-0.5576598656669D+02-0.5576316894524D+02-0.5576031729696D+02-0.5575743120915D+02 +-0.5575451026411D+02-0.5575155403905D+02-0.5574856210601D+02-0.5574553403187D+02 +-0.5574246937818D+02-0.5573936770121D+02-0.5573622855179D+02-0.5573305147530D+02 +-0.5572983601159D+02-0.5572658169491D+02-0.5572328805384D+02-0.5571995461125D+02 +-0.5571658088417D+02-0.5571316638379D+02-0.5570971061534D+02-0.5570621307804D+02 +-0.5570267326504D+02-0.5569909066329D+02-0.5569546475356D+02-0.5569179501028D+02 +-0.5568808090150D+02-0.5568432188882D+02-0.5568051742730D+02-0.5567666696540D+02 +-0.5567276994485D+02-0.5566882580066D+02-0.5566483396095D+02-0.5566079384693D+02 +-0.5565670487277D+02-0.5565256644557D+02-0.5564837796522D+02-0.5564413882437D+02 +-0.5563984840830D+02-0.5563550609485D+02-0.5563111125436D+02-0.5562666324952D+02 +-0.5562216143533D+02-0.5561760515901D+02-0.5561299375987D+02-0.5560832656927D+02 +-0.5560360291049D+02-0.5559882209863D+02-0.5559398344056D+02-0.5558908623478D+02 +-0.5558412977135D+02-0.5557911333176D+02-0.5557403618889D+02-0.5556889760684D+02 +-0.5556369684090D+02-0.5555843313738D+02-0.5555310573357D+02-0.5554771385759D+02 +-0.5554225672831D+02-0.5553673355525D+02-0.5553114353844D+02-0.5552548586837D+02 +-0.5551975972583D+02-0.5551396428182D+02-0.5550809869745D+02-0.5550216212382D+02 +-0.5549615370192D+02-0.5549007256249D+02-0.5548391782594D+02-0.5547768860221D+02 +-0.5547138399068D+02-0.5546500308004D+02-0.5545854494815D+02-0.5545200866198D+02 +-0.5544539327745D+02-0.5543869783930D+02-0.5543192138103D+02-0.5542506292469D+02 +-0.5541812148084D+02-0.5541109604840D+02-0.5540398561451D+02-0.5539678915440D+02 +-0.5538950563133D+02-0.5538213399637D+02-0.5537467318837D+02-0.5536712213374D+02 +-0.5535947974639D+02-0.5535174492760D+02-0.5534391656584D+02-0.5533599353668D+02 +-0.5532797470268D+02-0.5531985891319D+02-0.5531164500429D+02-0.5530333179863D+02 +-0.5529491810528D+02-0.5528640271963D+02-0.5527778442326D+02-0.5526906198374D+02 +-0.5526023415460D+02-0.5525129967511D+02-0.5524225727020D+02-0.5523310565028D+02 +-0.5522384351115D+02-0.5521446953384D+02-0.5520498238448D+02-0.5519538071417D+02 +-0.5518566315882D+02-0.5517582833908D+02-0.5516587486011D+02-0.5515580131153D+02 +-0.5514560626725D+02-0.5513528828533D+02-0.5512484590785D+02-0.5511427766079D+02 +-0.5510358205390D+02-0.5509275758052D+02-0.5508180271751D+02-0.5507071592509D+02 +-0.5505949564671D+02-0.5504814030891D+02-0.5503664832120D+02-0.5502501807596D+02 +-0.5501324794826D+02-0.5500133629576D+02-0.5498928145859D+02-0.5497708175923D+02 +-0.5496473550236D+02-0.5495224097477D+02-0.5493959644521D+02-0.5492680016431D+02 +-0.5491385036441D+02-0.5490074525951D+02-0.5488748304510D+02-0.5487406189808D+02 +-0.5486047997664D+02-0.5484673542016D+02-0.5483282634909D+02-0.5481875086488D+02 +-0.5480450704984D+02-0.5479009296707D+02-0.5477550666034D+02-0.5476074615405D+02 +-0.5474580945308D+02-0.5473069454274D+02-0.5471539938866D+02-0.5469992193677D+02 +-0.5468426011314D+02-0.5466841182398D+02-0.5465237495554D+02-0.5463614737403D+02 +-0.5461972692559D+02-0.5460311143622D+02-0.5458629871174D+02-0.5456928653772D+02 +-0.5455207267943D+02-0.5453465488185D+02-0.5451703086959D+02-0.5449919834687D+02 +-0.5448115499752D+02-0.5446289848492D+02-0.5444442645202D+02-0.5442573652133D+02 +-0.5440682629490D+02-0.5438769335434D+02-0.5436833526081D+02-0.5434874955506D+02 +-0.5432893375745D+02-0.5430888536794D+02-0.5428860186618D+02-0.5426808071152D+02 +-0.5424731934305D+02-0.5422631517968D+02-0.5420506562020D+02-0.5418356804332D+02 +-0.5416181980777D+02-0.5413981825241D+02-0.5411756069626D+02-0.5409504443864D+02 +-0.5407226675929D+02-0.5404922491843D+02-0.5402591615695D+02-0.5400233769649D+02 +-0.5397848673961D+02-0.5395436046993D+02-0.5392995605226D+02-0.5390527063280D+02 +-0.5388030133932D+02-0.5385504528129D+02-0.5382949955012D+02-0.5380366121933D+02 +-0.5377752734478D+02-0.5375109496485D+02-0.5372436110071D+02-0.5369732275652D+02 +-0.5366997691970D+02-0.5364232056114D+02-0.5361435063550D+02-0.5358606408144D+02 +-0.5355745782194D+02-0.5352852876455D+02-0.5349927380169D+02-0.5346968981097D+02 +-0.5343977365546D+02-0.5340952218404D+02-0.5337893223173D+02-0.5334800061997D+02 +-0.5331672415703D+02-0.5328509963831D+02-0.5325312384670D+02-0.5322079355294D+02 +-0.5318810551600D+02-0.5315505648344D+02-0.5312164319178D+02-0.5308786236690D+02 +-0.5305371072443D+02-0.5301918497011D+02-0.5298428180021D+02-0.5294899790196D+02 +-0.5291332995388D+02-0.5287727462625D+02-0.5284082858148D+02-0.5280398847456D+02 +-0.5276675095342D+02-0.5272911265938D+02-0.5269107022753D+02-0.5265262028717D+02 +-0.5261375946222D+02-0.5257448437158D+02-0.5253479162958D+02-0.5249467784638D+02 +-0.5245413962833D+02-0.5241317357839D+02-0.5237177629651D+02-0.5232994437998D+02 +-0.5228767442386D+02-0.5224496302128D+02-0.5220180676382D+02-0.5215820224186D+02 +-0.5211414604488D+02-0.5206963476182D+02-0.5202466498135D+02-0.5197923329218D+02 +-0.5193333628333D+02-0.5188697054440D+02-0.5184013266581D+02-0.5179281923901D+02 +-0.5174502685673D+02-0.5169675211312D+02-0.5164799160395D+02-0.5159874192676D+02 +-0.5154899968095D+02-0.5149876146794D+02-0.5144802389119D+02-0.5139678355629D+02 +-0.5134503707098D+02-0.5129278104517D+02-0.5124001209089D+02-0.5118672682225D+02 +-0.5113292185539D+02-0.5107859380833D+02-0.5102373930087D+02-0.5096835495445D+02 +-0.5091243739191D+02-0.5085598323730D+02-0.5079898911566D+02-0.5074145165270D+02 +-0.5068336747456D+02-0.5062473320742D+02-0.5056554547719D+02-0.5050580090915D+02 +-0.5044549612750D+02-0.5038462775495D+02-0.5032319241231D+02-0.5026118671799D+02 +-0.5019860728753D+02-0.5013545073308D+02-0.5007171366293D+02-0.5000739268094D+02 +-0.4994248438603D+02-0.4987698537166D+02-0.4981089222525D+02-0.4974420152767D+02 +-0.4967690985269D+02-0.4960901376648D+02-0.4954050982708D+02-0.4947139458392D+02 +-0.4940166457737D+02-0.4933131633826D+02-0.4926034638753D+02-0.4918875123586D+02 +-0.4911652738334D+02-0.4904367131924D+02-0.4897017952180D+02-0.4889604845812D+02 +-0.4882127458414D+02-0.4874585434461D+02-0.4866978417330D+02-0.4859306049320D+02 +-0.4851567971689D+02-0.4843763824698D+02-0.4835893247673D+02-0.4827955879080D+02 +-0.4819951356609D+02-0.4811879317284D+02-0.4803739397580D+02-0.4795531233565D+02 +-0.4787254461052D+02-0.4778908715782D+02-0.4770493633617D+02-0.4762008850757D+02 +-0.4753454003985D+02-0.4744828730923D+02-0.4736132670323D+02-0.4727365462373D+02 +-0.4718526749029D+02-0.4709616174376D+02-0.4700633385008D+02-0.4691578030434D+02 +-0.4682449763507D+02-0.4673248240881D+02-0.4663973123487D+02-0.4654624077030D+02 +-0.4645200772512D+02-0.4635702886768D+02-0.4626130103029D+02-0.4616482111490D+02 +-0.4606758609896D+02-0.4596959304142D+02-0.4587083908873D+02-0.4577132148090D+02 +-0.4567103755758D+02-0.4556998476407D+02-0.4546816065717D+02-0.4536556291099D+02 +-0.4526218932245D+02-0.4515803781656D+02-0.4505310645130D+02-0.4494739342218D+02 +-0.4484089706625D+02-0.4473361586559D+02-0.4462554845016D+02-0.4451669359998D+02 +-0.4440705024651D+02-0.4429661747322D+02-0.4418539451519D+02-0.4407338075785D+02 +-0.4396057573455D+02-0.4384697912320D+02-0.4373259074173D+02-0.4361741054236D+02 +-0.4350143860488D+02-0.4338467512865D+02-0.4326712042352D+02-0.4314877489972D+02 +-0.4302963905669D+02-0.4290971347096D+02-0.4278899878323D+02-0.4266749568475D+02 +-0.4254520490309D+02-0.4242212718753D+02-0.4229826329427D+02-0.4217361397159D+02 +-0.4204817994520D+02-0.4192196190406D+02-0.4179496048687D+02-0.4166717626939D+02 +-0.4153860975298D+02-0.4140926135451D+02-0.4127913139777D+02-0.4114822010683D+02 +-0.4101652760126D+02-0.4088405389359D+02-0.4075079888899D+02-0.4061676238745D+02 +-0.4048194408828D+02-0.4034634359727D+02-0.4020996043623D+02-0.4007279405504D+02 +-0.3993484384613D+02-0.3979610916110D+02-0.3965658932967D+02-0.3951628368036D+02 +-0.3937519156311D+02-0.3923331237331D+02-0.3909064557714D+02-0.3894719073791D+02 +-0.3880294754316D+02-0.3865791583219D+02-0.3851209562376D+02-0.3836548714373D+02 +-0.3821809085222D+02-0.3806990747022D+02-0.3792093800519D+02-0.3777118377560D+02 +-0.3762064643396D+02-0.3746932798842D+02-0.3731723082241D+02-0.3716435771246D+02 +-0.3701071184383D+02-0.3685629682396D+02-0.3670111669348D+02-0.3654517593490D+02 +-0.3638847947866D+02-0.3623103270670D+02-0.3607284145339D+02-0.3591391200380D+02 +-0.3575425108946D+02-0.3559386588133D+02-0.3543276398037D+02-0.3527095340541D+02 +-0.3510844257863D+02-0.3494524030858D+02-0.3478135577083D+02-0.3461679848643D+02 +-0.3445157829811D+02-0.3428570534457D+02-0.3411919003274D+02-0.3395204300829D+02 +-0.3378427512447D+02-0.3361589740948D+02-0.3344692103249D+02-0.3327735726840D+02 +-0.3310721746174D+02-0.3293651298968D+02-0.3276525522435D+02-0.3259345549488D+02 +-0.3242112504914D+02-0.3224827501549D+02-0.3207491636476D+02-0.3190105987274D+02 +-0.3172671608332D+02-0.3155189527260D+02-0.3137660741417D+02-0.3120086214594D+02 +-0.3102466873853D+02-0.3084803606581D+02-0.3067097257761D+02-0.3049348627496D+02 +-0.3031558468815D+02-0.3013727485790D+02-0.2995856331977D+02-0.2977945609235D+02 +-0.2959995866920D+02-0.2942007601496D+02-0.2923981256594D+02-0.2905917223523D+02 +-0.2887815842271D+02-0.2869677403014D+02-0.2851502148146D+02-0.2833290274854D+02 +-0.2815041938242D+02-0.2796757255018D+02-0.2778436307759D+02-0.2760079149730D+02 +-0.2741685810279D+02-0.2723256300783D+02-0.2704790621131D+02-0.2686288766711D+02 +-0.2667750735885D+02-0.2649176537888D+02-0.2630566201102D+02-0.2611919781653D+02 +-0.2593237372222D+02-0.2574519111010D+02-0.2555765190721D+02-0.2536975867460D+02 +-0.2518151469399D+02-0.2499292405051D+02-0.2480399171006D+02-0.2461472358916D+02 +-0.2442512661564D+02-0.2423520877796D+02-0.2404497916121D+02-0.2385444796763D+02 +-0.2366362651966D+02-0.2347252724381D+02-0.2328116363345D+02-0.2308955018945D+02 +-0.2289770233772D+02-0.2270563632319D+02-0.2251336908079D+02-0.2232091808423D+02 +-0.2212830117462D+02-0.2193553637155D+02-0.2174264167034D+02-0.2154963482993D+02 +-0.2135653315663D+02-0.2116335328969D+02-0.2097011099509D+02-0.2077682097407D+02 +-0.2058349669315D+02-0.2039015024168D+02-0.2019679222273D+02-0.2000343168188D+02 +-0.1981007607758D+02-0.1961673129514D+02-0.1942340170518D+02-0.1923009026563D+02 +-0.1903679866507D+02-0.1884352750377D+02-0.1865027650752D+02-0.1845704476868D+02 +-0.1826383100789D+02-0.1807063384981D+02-0.1787745210610D+02-0.1768428505888D+02 +-0.1749113273862D+02-0.1729799619070D+02-0.1710487772595D+02-0.1691178115078D+02 +-0.1671871197403D+02-0.1652567758787D+02-0.1633268742122D+02-0.1613975306488D+02 +-0.1594688836807D+02-0.1575410950680D+02-0.1556143502474D+02-0.1536888584794D+02 +-0.1517648527479D+02-0.1498425894283D+02-0.1479223477439D+02-0.1460044290282D+02 +-0.1440891558124D+02-0.1421768707594D+02-0.1402679354599D+02-0.1383627291119D+02 +-0.1364616470994D+02-0.1345650994882D+02-0.1326735094526D+02-0.1307873116512D+02 +-0.1289069505616D+02-0.1270328787905D+02-0.1251655553691D+02-0.1233054440456D+02 +-0.1214530115858D+02-0.1196087260900D+02-0.1177730553358D+02-0.1159464651556D+02 +-0.1141294178546D+02-0.1123223706771D+02-0.1105257743276D+02-0.1087400715511D+02 +-0.1069656957788D+02-0.1052030698433D+02-0.1034526047671D+02-0.1017146986276D+02 +-0.9998973550304D+01-0.9827808449991D+01-0.9658009886550D+01-0.9489611518644D+01 +-0.9322645267466D+01-0.9157141254155D+01-0.8993127746062D+01-0.8830631111875D+01 +-0.8669675785557D+01-0.8510284239016D+01-0.8352476963414D+01-0.8196272458942D+01 +-0.8041687232918D+01-0.7888735805962D+01-0.7737430726056D+01-0.7587782590186D+01 +-0.7439800073312D+01-0.7293489964330D+01-0.7148857208720D+01-0.7005904957514D+01 +-0.6864634622219D+01-0.6725045935325D+01-0.6587137015995D+01-0.6450904440533D+01 +-0.6316343317221D+01-0.6183447365098D+01-0.6052208996262D+01-0.5922619401257D+01 +-0.5794668637125D+01-0.5668345717679D+01-0.5543638705576D+01-0.5420534805760D+01 +-0.5299020459852D+01-0.5179081441071D+01-0.5060702949271D+01-0.4943869705704D+01 +-0.4828566047100D+01-0.4714776018691D+01-0.4602483465805D+01-0.4491672123673D+01 +-0.4382325705095D+01-0.4274427985640D+01-0.4167962886061D+01-0.4062914551618D+01 +-0.3959267428037D+01-0.3857006333826D+01-0.3756116528718D+01-0.3656583778001D+01 +-0.3558394412557D+01-0.3461535384413D+01-0.3365994317682D+01-0.3271759554763D+01 +-0.3178820197726D+01-0.3087166144845D+01-0.2996788122259D+01-0.2907677710821D+01 +-0.2819827368207D+01-0.2733230446431D+01-0.2647881204950D+01-0.2563774819612D+01 +-0.2480907387749D+01-0.2399275929784D+01-0.2318878387764D+01-0.2239713621329D+01 +-0.2161781401633D+01-0.2085082403831D+01-0.2009618198778D+01-0.1935391244617D+01 +-0.1862404878998D+01-0.1790663312655D+01-0.1720171625111D+01-0.1650935763269D+01 +-0.1582962543626D+01-0.1516259658827D+01-0.1450835689223D+01-0.1386700120052D+01 +-0.1323863364771D+01-0.1262336795005D+01-0.1202132777469D+01-0.1143264718130D+01 +-0.1085747113774D+01-0.1029595611013D+01-0.9748270727154D+00-0.9214596516777D+00 +-0.8695128713252D+00-0.8190077131099D+00-0.7699667102222D+00-0.7224140471735D+00 +-0.6763756647684D+00-0.6318793699591D+00-0.5889549500632D+00-0.5476342908327D+00 +-0.5079514978739D+00-0.4699430209489D+00-0.4336477807207D+00-0.3991072975512D+00 +-0.3663658220029D+00-0.3354704667473D+00-0.3064713396296D+00-0.2794216776835D+00 +-0.2543779819454D+00-0.2313999299251D+00 + 0.0000000000000D+00 + 1019 0.5282916303874D+01 + 0.2822835389983D-04 0.2889232671911D-04 0.2957191402324D-04 0.3026748289127D-04 + 0.3097940902739D-04 0.3170807696342D-04 0.3245388026606D-04 0.3321722174901D-04 + 0.3399851369009D-04 0.3479817805334D-04 0.3561664671650D-04 0.3645436170367D-04 + 0.3731177542349D-04 0.3818935091294D-04 0.3908756208675D-04 0.4000689399278D-04 + 0.4094784307328D-04 0.4191091743234D-04 0.4289663710960D-04 0.4390553436033D-04 + 0.4493815394213D-04 0.4599505340833D-04 0.4707680340823D-04 0.4818398799443D-04 + 0.4931720493734D-04 0.5047706604703D-04 0.5166419750268D-04 0.5287924018966D-04 + 0.5412285004463D-04 0.5539569840859D-04 0.5669847238832D-04 0.5803187522616D-04 + 0.5939662667858D-04 0.6079346340354D-04 0.6222313935691D-04 0.6368642619823D-04 + 0.6518411370593D-04 0.6671701020226D-04 0.6828594298825D-04 0.6989175878871D-04 + 0.7153532420780D-04 0.7321752619517D-04 0.7493927252301D-04 0.7670149227435D-04 + 0.7850513634266D-04 0.8035117794328D-04 0.8224061313666D-04 0.8417446136405D-04 + 0.8615376599547D-04 0.8817959489076D-04 0.9025304097353D-04 0.9237522281871D-04 + 0.9454728525372D-04 0.9677039997378D-04 0.9904576617157D-04 0.1013746111816D-03 + 0.1037581911398D-03 0.1061977916581D-03 0.1086947285154D-03 0.1112503483645D-03 + 0.1138660294548D-03 0.1165431823732D-03 0.1192832508014D-03 0.1220877122909D-03 + 0.1249580790570D-03 0.1278958987898D-03 0.1309027554859D-03 0.1339802702983D-03 + 0.1371301024066D-03 0.1403539499072D-03 0.1436535507253D-03 0.1470306835465D-03 + 0.1504871687719D-03 0.1540248694945D-03 0.1576456924982D-03 0.1613515892812D-03 + 0.1651445571022D-03 0.1690266400516D-03 0.1729999301474D-03 0.1770665684570D-03 + 0.1812287462450D-03 0.1854887061476D-03 0.1898487433750D-03 0.1943112069407D-03 + 0.1988785009209D-03 0.2035530857423D-03 0.2083374795002D-03 0.2132342593074D-03 + 0.2182460626742D-03 0.2233755889215D-03 0.2286256006255D-03 0.2339989250972D-03 + 0.2394984558959D-03 0.2451271543779D-03 0.2508880512812D-03 0.2567842483480D-03 + 0.2628189199834D-03 0.2689953149545D-03 0.2753167581275D-03 0.2817866522465D-03 + 0.2884084797527D-03 0.2951858046468D-03 0.3021222743941D-03 0.3092216218742D-03 + 0.3164876673763D-03 0.3239243206404D-03 0.3315355829466D-03 0.3393255492521D-03 + 0.3472984103792D-03 0.3554584552526D-03 0.3638100731904D-03 0.3723577562469D-03 + 0.3811061016106D-03 0.3900598140580D-03 0.3992237084638D-03 0.4086027123703D-03 + 0.4182018686156D-03 0.4280263380234D-03 0.4380814021550D-03 0.4483724661254D-03 + 0.4589050614847D-03 0.4696848491661D-03 0.4807176225028D-03 0.4920093103142D-03 + 0.5035659800647D-03 0.5153938410950D-03 0.5274992479281D-03 0.5398887036530D-03 + 0.5525688633857D-03 0.5655465378112D-03 0.5788286968073D-03 0.5924224731520D-03 + 0.6063351663176D-03 0.6205742463520D-03 0.6351473578499D-03 0.6500623240163D-03 + 0.6653271508237D-03 0.6809500312658D-03 0.6969393497094D-03 0.7133036863469D-03 + 0.7300518217520D-03 0.7471927415405D-03 0.7647356411393D-03 0.7826899306648D-03 + 0.8010652399149D-03 0.8198714234755D-03 0.8391185659460D-03 0.8588169872840D-03 + 0.8789772482749D-03 0.8996101561266D-03 0.9207267701938D-03 0.9423384078346D-03 + 0.9644566504011D-03 0.9870933493699D-03 0.1010260632612D-02 0.1033970910808D-02 + 0.1058236884013D-02 0.1083071548367D-02 0.1108488202970D-02 0.1134500456900D-02 + 0.1161122236412D-02 0.1188367792284D-02 0.1216251707344D-02 0.1244788904167D-02 + 0.1273994652944D-02 0.1303884579543D-02 0.1334474673741D-02 0.1365781297658D-02 + 0.1397821194374D-02 0.1430611496756D-02 0.1464169736471D-02 0.1498513853225D-02 + 0.1533662204197D-02 0.1569633573700D-02 0.1606447183057D-02 0.1644122700711D-02 + 0.1682680252554D-02 0.1722140432508D-02 0.1762524313336D-02 0.1803853457707D-02 + 0.1846149929507D-02 0.1889436305420D-02 0.1933735686763D-02 0.1979071711596D-02 + 0.2025468567111D-02 0.2072951002295D-02 0.2121544340895D-02 0.2171274494667D-02 + 0.2222167976934D-02 0.2274251916449D-02 0.2327554071579D-02 0.2382102844807D-02 + 0.2437927297566D-02 0.2495057165412D-02 0.2553522873541D-02 0.2613355552656D-02 + 0.2674587055203D-02 0.2737249971964D-02 0.2801377649040D-02 0.2867004205207D-02 + 0.2934164549674D-02 0.3002894400242D-02 0.3073230301875D-02 0.3145209645687D-02 + 0.3218870688367D-02 0.3294252572036D-02 0.3371395344560D-02 0.3450339980318D-02 + 0.3531128401442D-02 0.3613803499530D-02 0.3698409157865D-02 0.3784990274115D-02 + 0.3873592783561D-02 0.3964263682845D-02 0.4057051054243D-02 0.4152004090502D-02 + 0.4249173120221D-02 0.4348609633811D-02 0.4450366310035D-02 0.4554497043148D-02 + 0.4661056970641D-02 0.4770102501614D-02 0.4881691345780D-02 0.4995882543123D-02 + 0.5112736494216D-02 0.5232314991223D-02 0.5354681249591D-02 0.5479899940453D-02 + 0.5608037223751D-02 0.5739160782101D-02 0.5873339855419D-02 0.6010645276307D-02 + 0.6151149506240D-02 0.6294926672549D-02 0.6442052606234D-02 0.6592604880614D-02 + 0.6746662850838D-02 0.6904307694268D-02 0.7065622451768D-02 0.7230692069897D-02 + 0.7399603444044D-02 0.7572445462515D-02 0.7749309051598D-02 0.7930287221619D-02 + 0.8115475114018D-02 0.8304970049464D-02 0.8498871577032D-02 0.8697281524456D-02 + 0.8900304049495D-02 0.9108045692430D-02 0.9320615429706D-02 0.9538124728756D-02 + 0.9760687604030D-02 0.9988420674246D-02 0.1022144322090D-01 0.1045987724804D-01 + 0.1070384754337D-01 0.1095348174068D-01 0.1120891038362D-01 0.1147026699087D-01 + 0.1173768812274D-01 0.1201131344923D-01 0.1229128581950D-01 0.1257775133295D-01 + 0.1287085941174D-01 0.1317076287496D-01 0.1347761801432D-01 0.1379158467158D-01 + 0.1411282631755D-01 0.1444151013282D-01 0.1477780709030D-01 0.1512189203941D-01 + 0.1547394379218D-01 0.1583414521114D-01 0.1620268329910D-01 0.1657974929087D-01 + 0.1696553874693D-01 0.1736025164907D-01 0.1776409249813D-01 0.1817727041373D-01 + 0.1859999923619D-01 0.1903249763061D-01 0.1947498919308D-01 0.1992770255924D-01 + 0.2039087151505D-01 0.2086473510993D-01 0.2134953777229D-01 0.2184552942747D-01 + 0.2235296561814D-01 0.2287210762728D-01 0.2340322260368D-01 0.2394658369007D-01 + 0.2450247015392D-01 0.2507116752101D-01 0.2565296771170D-01 0.2624816918007D-01 + 0.2685707705593D-01 0.2748000328980D-01 0.2811726680080D-01 0.2876919362766D-01 + 0.2943611708282D-01 0.3011837790964D-01 0.3081632444289D-01 0.3153031277251D-01 + 0.3226070691063D-01 0.3300787896212D-01 0.3377220929851D-01 0.3455408673542D-01 + 0.3535390871366D-01 0.3617208148391D-01 0.3700902029513D-01 0.3786514958681D-01 + 0.3874090318494D-01 0.3963672450206D-01 0.4055306674117D-01 0.4149039310376D-01 + 0.4244917700192D-01 0.4342990227471D-01 0.4443306340872D-01 0.4545916576304D-01 + 0.4650872579860D-01 0.4758227131200D-01 0.4868034167394D-01 0.4980348807226D-01 + 0.5095227375970D-01 0.5212727430642D-01 0.5332907785746D-01 0.5455828539511D-01 + 0.5581551100629D-01 0.5710138215505D-01 0.5841653996030D-01 0.5976163947874D-01 + 0.6113734999319D-01 0.6254435530634D-01 0.6398335403999D-01 0.6545505993995D-01 + 0.6696020218655D-01 0.6849952571098D-01 0.7007379151743D-01 0.7168377701120D-01 + 0.7333027633278D-01 0.7501410069815D-01 0.7673607874510D-01 0.7849705688600D-01 + 0.8029789966680D-01 0.8213949013254D-01 0.8402273019940D-01 0.8594854103333D-01 + 0.8791786343540D-01 0.8993165823397D-01 0.9199090668367D-01 0.9409661087142D-01 + 0.9624979412937D-01 0.9845150145513D-01 0.1007027999391D+00 0.1030047791989D+00 + 0.1053585518218D+00 0.1077652538139D+00 0.1102260450570D+00 0.1127421097734D+00 + 0.1153146569983D+00 0.1179449210595D+00 0.1206341620656D+00 0.1233836664013D+00 + 0.1261947472319D+00 0.1290687450145D+00 0.1320070280181D+00 0.1350109928517D+00 + 0.1380820650005D+00 0.1412216993709D+00 0.1444313808430D+00 0.1477126248321D+00 + 0.1510669778590D+00 0.1544960181276D+00 0.1580013561123D+00 0.1615846351532D+00 + 0.1652475320606D+00 0.1689917577271D+00 0.1728190577499D+00 0.1767312130600D+00 + 0.1807300405618D+00 0.1848173937804D+00 0.1889951635180D+00 0.1932652785189D+00 + 0.1976297061436D+00 0.2020904530510D+00 0.2066495658902D+00 0.2113091320000D+00 + 0.2160712801176D+00 0.2209381810962D+00 0.2259120486306D+00 0.2309951399915D+00 + 0.2361897567686D+00 0.2414982456214D+00 0.2469229990389D+00 0.2524664561077D+00 + 0.2581311032870D+00 0.2639194751932D+00 0.2698341553913D+00 0.2758777771940D+00 + 0.2820530244695D+00 0.2883626324551D+00 0.2948093885796D+00 0.3013961332915D+00 + 0.3081257608951D+00 0.3150012203926D+00 0.3220255163328D+00 0.3292017096659D+00 + 0.3365329186046D+00 0.3440223194900D+00 0.3516731476641D+00 0.3594886983458D+00 + 0.3674723275128D+00 0.3756274527871D+00 0.3839575543251D+00 0.3924661757104D+00 + 0.4011569248503D+00 0.4100334748751D+00 0.4190995650391D+00 0.4283590016238D+00 + 0.4378156588421D+00 0.4474734797432D+00 0.4573364771174D+00 0.4674087344011D+00 + 0.4776944065798D+00 0.4881977210900D+00 0.4989229787185D+00 0.5098745544982D+00 + 0.5210568986003D+00 0.5324745372220D+00 0.5441320734686D+00 0.5560341882286D+00 + 0.5681856410426D+00 0.5805912709635D+00 0.5932559974075D+00 0.6061848209955D+00 + 0.6193828243825D+00 0.6328551730759D+00 0.6466071162395D+00 0.6606439874833D+00 + 0.6749712056379D+00 0.6895942755113D+00 0.7045187886282D+00 0.7197504239485D+00 + 0.7352949485665D+00 0.7511582183855D+00 0.7673461787702D+00 0.7838648651729D+00 + 0.8007204037317D+00 0.8179190118414D+00 0.8354669986931D+00 0.8533707657807D+00 + 0.8716368073748D+00 0.8902717109592D+00 0.9092821576301D+00 0.9286749224550D+00 + 0.9484568747892D+00 0.9686349785485D+00 0.9892162924350D+00 0.1010207970114D+01 + 0.1031617260341D+01 0.1053451507033D+01 0.1075718149284D+01 0.1098424721324D+01 + 0.1121578852417D+01 0.1145188266689D+01 0.1169260782896D+01 0.1193804314122D+01 + 0.1218826867398D+01 0.1244336543253D+01 0.1270341535182D+01 0.1296850129033D+01 + 0.1323870702311D+01 0.1351411723387D+01 0.1379481750625D+01 0.1408089431407D+01 + 0.1437243501060D+01 0.1466952781681D+01 0.1497226180855D+01 0.1528072690268D+01 + 0.1559501384198D+01 0.1591521417893D+01 0.1624142025826D+01 0.1657372519825D+01 + 0.1691222287071D+01 0.1725700787962D+01 0.1760817553840D+01 0.1796582184571D+01 + 0.1833004345980D+01 0.1870093767134D+01 0.1907860237463D+01 0.1946313603731D+01 + 0.1985463766823D+01 0.2025320678379D+01 0.2065894337237D+01 0.2107194785706D+01 + 0.2149232105642D+01 0.2192016414346D+01 0.2235557860254D+01 0.2279866618430D+01 + 0.2324952885854D+01 0.2370826876498D+01 0.2417498816181D+01 0.2464978937205D+01 + 0.2513277472767D+01 0.2562404651129D+01 0.2612370689560D+01 0.2663185788025D+01 + 0.2714860122637D+01 0.2767403838844D+01 0.2820827044362D+01 0.2875139801847D+01 + 0.2930352121292D+01 0.2986473952155D+01 0.3043515175199D+01 0.3101485594064D+01 + 0.3160394926530D+01 0.3220252795505D+01 0.3281068719700D+01 0.3342852104013D+01 + 0.3405612229598D+01 0.3469358243625D+01 0.3534099148732D+01 0.3599843792145D+01 + 0.3666600854486D+01 0.3734378838255D+01 0.3803186055977D+01 0.3873030618024D+01 + 0.3943920420098D+01 0.4015863130380D+01 0.4088866176346D+01 0.4162936731230D+01 + 0.4238081700161D+01 0.4314307705947D+01 0.4391621074527D+01 0.4470027820069D+01 + 0.4549533629736D+01 0.4630143848113D+01 0.4711863461283D+01 0.4794697080578D+01 + 0.4878648925994D+01 0.4963722809267D+01 0.5049922116636D+01 0.5137249791268D+01 + 0.5225708315377D+01 0.5315299692030D+01 0.5406025426645D+01 0.5497886508194D+01 + 0.5590883390119D+01 0.5685015970968D+01 0.5780283574761D+01 0.5876684931099D+01 + 0.5974218155027D+01 0.6072880726661D+01 0.6172669470607D+01 0.6273580535158D+01 + 0.6375609371321D+01 0.6478750711665D+01 0.6582998549021D+01 0.6688346115044D+01 + 0.6794785858674D+01 0.6902309424504D+01 0.7010907631078D+01 0.7120570449161D+01 + 0.7231286979987D+01 0.7343045433523D+01 0.7455833106781D+01 0.7569636362200D+01 + 0.7684440606138D+01 0.7800230267503D+01 0.7916988776564D+01 0.8034698543969D+01 + 0.8153340940023D+01 0.8272896274252D+01 0.8393343775304D+01 0.8514661571228D+01 + 0.8636826670177D+01 0.8759814941579D+01 0.8883601097830D+01 0.9008158676554D+01 + 0.9133460023488D+01 0.9259476276042D+01 0.9386177347589D+01 0.9513531912544D+01 + 0.9641507392293D+01 0.9770069942032D+01 0.9899184438573D+01 0.1002881446919D+02 + 0.1015892232155D+02 0.1028946897485D+02 0.1042041409214D+02 0.1055171601401D+02 + 0.1068333175358D+02 0.1081521699303D+02 0.1094732608155D+02 0.1107961203504D+02 + 0.1121202653730D+02 0.1134451994313D+02 0.1147704128317D+02 0.1160953827069D+02 + 0.1174195731037D+02 0.1187424350912D+02 0.1200634068907D+02 0.1213819140280D+02 + 0.1226973695085D+02 0.1240091740164D+02 0.1253167161388D+02 0.1266193726146D+02 + 0.1279165086105D+02 0.1292074780233D+02 0.1304916238109D+02 0.1317682783507D+02 + 0.1330367638281D+02 0.1342963926552D+02 0.1355464679190D+02 0.1367862838623D+02 + 0.1380151263958D+02 0.1392322736426D+02 0.1404369965168D+02 0.1416285593344D+02 + 0.1428062204598D+02 0.1439692329856D+02 0.1451168454482D+02 0.1462483025783D+02 + 0.1473628460874D+02 0.1484597154897D+02 0.1495381489602D+02 0.1505973842287D+02 + 0.1516366595105D+02 0.1526552144717D+02 0.1536522912325D+02 0.1546271354038D+02 + 0.1555789971612D+02 0.1565071323525D+02 0.1574108036407D+02 0.1582892816796D+02 + 0.1591418463238D+02 0.1599677878699D+02 0.1607664083298D+02 0.1615370227341D+02 + 0.1622789604640D+02 0.1629915666117D+02 0.1636742033673D+02 0.1643262514293D+02 + 0.1649471114400D+02 0.1655362054401D+02 0.1660929783443D+02 0.1666168994330D+02 + 0.1671074638592D+02 0.1675641941678D+02 0.1679866418244D+02 0.1683743887520D+02 + 0.1687270488708D+02 0.1690442696401D+02 0.1693257335981D+02 0.1695711598955D+02 + 0.1697803058217D+02 0.1699529683168D+02 0.1700889854691D+02 0.1701882379909D+02 + 0.1702506506710D+02 0.1702761937980D+02 0.1702648845513D+02 0.1702167883544D+02 + 0.1701320201866D+02 0.1700107458474D+02 0.1698531831701D+02 0.1696596031787D+02 + 0.1694303311832D+02 0.1691657478089D+02 0.1688662899533D+02 0.1685324516669D+02 + 0.1681647849506D+02 0.1677639004673D+02 0.1673304681590D+02 0.1668652177669D+02 + 0.1663689392474D+02 0.1658424830799D+02 0.1652867604598D+02 0.1647027433734D+02 + 0.1640914645475D+02 0.1634540172704D+02 0.1627915550787D+02 0.1621052913049D+02 + 0.1613964984821D+02 0.1606665076007D+02 0.1599167072129D+02 0.1591485423819D+02 + 0.1583635134714D+02 0.1575631747721D+02 0.1567491329620D+02 0.1559230453992D+02 + 0.1550866182419D+02 0.1542416043968D+02 0.1533898012921D+02 0.1525330484749D+02 + 0.1516732250321D+02 0.1508122468346D+02 0.1499520636047D+02 0.1490946558083D+02 + 0.1482420313724D+02 0.1473962222302D+02 0.1465592806965D+02 0.1457332756760D+02 + 0.1449202887084D+02 0.1441224098550D+02 0.1433417334315D+02 0.1425803535923D+02 + 0.1418403597732D+02 0.1411238320000D+02 0.1404328360686D+02 0.1397694186082D+02 + 0.1391356020333D+02 0.1385333793975D+02 0.1379647091570D+02 0.1374315098539D+02 + 0.1369356547412D+02 0.1364789663433D+02 0.1360632109829D+02 0.1356900932792D+02 + 0.1353612506335D+02 0.1350782477177D+02 0.1348425709813D+02 0.1346556231916D+02 + 0.1345187180262D+02 0.1344330747319D+02 0.1343998128703D+02 0.1344199471659D+02 + 0.1344943824759D+02 0.1346239089000D+02 0.1348091970488D+02 0.1350507934900D+02 + 0.1353491163910D+02 0.1357044513773D+02 0.1361169476260D+02 0.1365866142131D+02 + 0.1371133167329D+02 0.1376967742104D+02 0.1383365563218D+02 0.1390320809443D+02 + 0.1397826120509D+02 0.1405872579684D+02 0.1414449700138D+02 0.1423545415271D+02 + 0.1433146073132D+02 0.1443236435097D+02 0.1453799678912D+02 0.1464817406258D+02 + 0.1476269654917D+02 0.1488134915674D+02 0.1500390154012D+02 0.1513010836712D+02 + 0.1525970963388D+02 0.1539243103024D+02 0.1552798435550D+02 0.1566606798456D+02 + 0.1580636738467D+02 0.1594855568243D+02 0.1609229428090D+02 0.1623723352612D+02 + 0.1638301342255D+02 0.1652926439630D+02 0.1667560810533D+02 0.1682165829516D+02 + 0.1696702169871D+02 0.1711129897862D+02 0.1725408571012D+02 0.1739497340253D+02 + 0.1753355055702D+02 0.1766940375816D+02 0.1780211879688D+02 0.1793128182162D+02 + 0.1805648051510D+02 0.1817730529317D+02 0.1829335052263D+02 0.1840421575438D+02 + 0.1850950696829D+02 0.1860883782595D+02 0.1870183092731D+02 0.1878811906717D+02 + 0.1886734648736D+02 0.1893917012012D+02 0.1900326081854D+02 0.1905930456928D+02 + 0.1910700368334D+02 0.1914607796003D+02 0.1917626581959D+02 0.1919732539992D+02 + 0.1920903561254D+02 0.1921119715340D+02 0.1920363346380D+02 0.1918619163678D+02 + 0.1915874326482D+02 0.1912118522412D+02 0.1907344039140D+02 0.1901545828904D+02 + 0.1894721565456D+02 0.1886871693063D+02 0.1877999467201D+02 0.1868110986603D+02 + 0.1857215216342D+02 0.1845324001656D+02 0.1832452072264D+02 0.1818617036923D+02 + 0.1803839368037D+02 0.1788142376145D+02 0.1771552174157D+02 0.1754097631241D+02 + 0.1735810316307D+02 0.1716724431072D+02 0.1696876732726D+02 0.1676306446281D+02 + 0.1655055166703D+02 0.1633166751000D+02 0.1610687200455D+02 0.1587664533276D+02 + 0.1564148647947D+02 0.1540191177642D+02 0.1515845336085D+02 0.1491165755304D+02 + 0.1466208315779D+02 0.1441029969504D+02 0.1415688556557D+02 0.1390242615798D+02 + 0.1364751190365D+02 0.1339273628671D+02 0.1313869381659D+02 0.1288597797078D+02 + 0.1263517911606D+02 0.1238688241664D+02 0.1214166573770D+02 0.1190009755337D+02 + 0.1166273486824D+02 0.1143012116131D+02 0.1120278436204D+02 0.1098123486738D+02 + 0.1076596360934D+02 0.1055744018218D+02 0.1035611103824D+02 0.1016239776140D+02 + 0.9976695426757D+01 0.9799371054791D+01 0.9630762168193D+01 0.9471175458851D+01 + 0.9320885572164D+01 0.9180134015366D+01 0.9049128195975D+01 0.8928040595889D+01 + 0.8817008086055D+01 0.8716131385943D+01 0.8625474671405D+01 0.8545065333743D+01 + 0.8474893892107D+01 0.8414914060556D+01 0.8365042970373D+01 0.8325161547417D+01 + 0.8295115043532D+01 0.8274713720226D+01 0.8263733682072D+01 0.8261917856473D+01 + 0.8268977115699D+01 0.8284591536320D+01 0.8308411790443D+01 0.8340060662421D+01 + 0.8379134684056D+01 0.8425205880594D+01 0.8477823619242D+01 0.8536516551320D+01 + 0.8600794638614D+01 0.8670151254010D+01 0.8744065346036D+01 0.8822003656545D+01 + 0.8903422980466D+01 0.8987772456234D+01 0.9074495875384D+01 0.9163033999606D+01 + 0.9252826873533D+01 0.9343316121564D+01 0.9433947217114D+01 0.9524171712849D+01 + 0.9613449420751D+01 0.9701250531156D+01 0.9787057660335D+01 0.9870367816646D+01 + 0.9950694275862D+01 0.1002756835684D+02 0.1010054108939D+02 0.1016918476702D+02 + 0.1023309437768D+02 0.1029188890698D+02 0.1034521250863D+02 0.1039273553809D+02 + 0.1043415544617D+02 0.1046919753037D+02 0.1049761554226D+02 0.1051919215074D+02 + 0.1053373926129D+02 0.1054109819251D+02 0.1054113971220D+02 0.1053376393567D+02 + 0.1051890009012D+02 0.1049650614953D+02 0.1046656834505D+02 0.1042910055671D+02 + 0.1038414359287D+02 0.1033176436400D+02 0.1027205495831D+02 0.1020513162681D+02 + 0.1013113368577D+02 0.1005022234485D+02 0.9962579469377D+01 0.9868406285310D+01 + 0.9767922035458D+01 0.9661362595664D+01 0.9548979059465D+01 0.9431036299674D+01 + 0.9307811515177D+01 0.9179592770975D+01 0.9046677539281D+01 0.8909371249138D+01 + 0.8767985851711D+01 0.8622838408000D+01 0.8474249705348D+01 0.8322542908661D+01 + 0.8168042251829D+01 0.8011071774365D+01 0.7851954107810D+01 0.7691009315975D+01 + 0.7528553792590D+01 0.7364899219476D+01 0.7200351587865D+01 0.7035210285005D+01 + 0.6869767247760D+01 0.6704306184445D+01 0.6539101865709D+01 0.6374419484870D+01 + 0.6210514087691D+01 0.6047630071250D+01 0.5886000751154D+01 0.5725847996050D+01 + 0.5567381928080D+01 0.5410800687616D+01 0.5256290260390D+01 0.5104024364860D+01 + 0.4954164397495D+01 0.4806859433420D+01 0.4662246279750D+01 0.4520449578777D+01 + 0.4381581958080D+01 0.4245744224515D+01 0.4113025598995D+01 0.3983503988922D+01 + 0.3857246295067D+01 0.3734308749755D+01 0.3614737283146D+01 0.3498567914486D+01 + 0.3385827165216D+01 0.3276532490893D+01 0.3170692728944D+01 0.3068308559367D+01 + 0.2969372975579D+01 0.2873871762726D+01 0.2781783980867D+01 0.2693082450610D+01 + 0.2607734238857D+01 0.2525701142481D+01 0.2446940167925D+01 0.2371404004790D+01 + 0.2299041491714D+01 0.2229798072931D+01 0.2163616244086D+01 0.2100435986031D+01 + 0.2040195185468D+01 0.1982830041479D+01 0.1928275457110D+01 0.1876465415340D+01 + 0.1827333338908D+01 0.1780812433583D+01 0.1736836014647D+01 0.1695337816433D+01 + 0.1656252284921D+01 0.1619514853489D+01 0.1585062202027D+01 0.1552832499731D+01 + 0.1522765631966D+01 0.1494803411685D+01 0.1468889775956D+01 0.1444970968218D+01 + 0.1422995706931D+01 0.1402915341345D+01 0.1384683995123D+01 0.1368258698612D+01 + 0.1353599510520D+01 0.1340669629812D+01 0.1329435498575D+01 0.1319866896622D+01 + 0.1311937028546D+01 0.1305622603887D+01 0.1300903911023D+01 0.1297764885307D+01 + 0.1296193171885D+01 0.1296180183508D+01 0.1297721153538D+01 0.1300815184163D+01 + 0.1305465289703D+01 0.1311678434655D+01 0.1319465565906D+01 0.1328841638284D+01 + 0.1339825632325D+01 0.1352440020066D+01 0.1366814118169D+01 0.1383075557911D+01 + 0.1401251274517D+01 0.1421373963474D+01 0.1443482175527D+01 0.1467620429267D+01 + 0.1493839341415D+01 0.1522195774849D+01 0.1552753004359D+01 + 7 1019 + 1 0 -1 -600.92936 + 2 0 -1 -70.75637 + 2 1 1 -61.64173 + 2 1 -2 -60.36011 + 3 0 -1 -6.90508 + 3 1 1 -4.13505 + 3 1 -2 -3.97253 + 0.2785348039799D-04 0.2850864985091D-04 0.2917922677693D-04 0.2986557338784D-04 + 0.3056806040623D-04 0.3128706726531D-04 0.3202298231346D-04 0.3277620302344D-04 + 0.3354713620669D-04 0.3433619823250D-04 0.3514381525243D-04 0.3597042342988D-04 + 0.3681646917518D-04 0.3768240938605D-04 0.3856871169382D-04 0.3947585471533D-04 + 0.4040432831076D-04 0.4135463384754D-04 0.4232728447044D-04 0.4332280537788D-04 + 0.4434173410491D-04 0.4538462081264D-04 0.4645202858458D-04 0.4754453372980D-04 + 0.4866272609337D-04 0.4980720937385D-04 0.5097860144845D-04 0.5217753470559D-04 + 0.5340465638544D-04 0.5466062892831D-04 0.5594613033122D-04 0.5726185451292D-04 + 0.5860851168728D-04 0.5998682874563D-04 0.6139754964787D-04 0.6284143582287D-04 + 0.6431926657818D-04 0.6583183951932D-04 0.6737997097897D-04 0.6896449645610D-04 + 0.7058627106547D-04 0.7224616999759D-04 0.7394508898947D-04 0.7568394480642D-04 + 0.7746367573504D-04 0.7928524208785D-04 0.8114962671967D-04 0.8305783555606D-04 + 0.8501089813418D-04 0.8700986815631D-04 0.8905582405622D-04 0.9114986957892D-04 + 0.9329313437388D-04 0.9548677460216D-04 0.9773197355772D-04 0.1000299423033D-03 + 0.1023819203211D-03 0.1047891761788D-03 0.1072530082109D-03 0.1097747452164D-03 + 0.1123557471724D-03 0.1149974059643D-03 0.1177011461338D-03 0.1204684256435D-03 + 0.1233007366599D-03 0.1261996063543D-03 0.1291665977232D-03 0.1322033104265D-03 + 0.1353113816468D-03 0.1384924869679D-03 0.1417483412738D-03 0.1450806996689D-03 + 0.1484913584199D-03 0.1519821559194D-03 0.1555549736718D-03 0.1592117373030D-03 + 0.1629544175925D-03 0.1667850315308D-03 0.1707056434008D-03 0.1747183658844D-03 + 0.1788253611949D-03 0.1830288422366D-03 0.1873310737905D-03 0.1917343737279D-03 + 0.1962411142527D-03 0.2008537231720D-03 0.2055746851973D-03 0.2104065432749D-03 + 0.2153518999484D-03 0.2204134187520D-03 0.2255938256369D-03 0.2308959104308D-03 + 0.2363225283316D-03 0.2418766014350D-03 0.2475611202992D-03 0.2533791455447D-03 + 0.2593338094921D-03 0.2654283178377D-03 0.2716659513684D-03 0.2780500677164D-03 + 0.2845841031545D-03 0.2912715744338D-03 0.2981160806633D-03 0.3051213052343D-03 + 0.3122910177887D-03 0.3196290762334D-03 0.3271394288016D-03 0.3348261161622D-03 + 0.3426932735779D-03 0.3507451331137D-03 0.3589860258965D-03 0.3674203844279D-03 + 0.3760527449499D-03 0.3848877498660D-03 0.3939301502186D-03 0.4031848082239D-03 + 0.4126566998654D-03 0.4223509175482D-03 0.4322726728145D-03 0.4424272991222D-03 + 0.4528202546880D-03 0.4634571253967D-03 0.4743436277778D-03 0.4854856120511D-03 + 0.4968890652433D-03 0.5085601143763D-03 0.5205050297303D-03 0.5327302281814D-03 + 0.5452422766177D-03 0.5580478954340D-03 0.5711539621071D-03 0.5845675148553D-03 + 0.5982957563806D-03 0.6123460576999D-03 0.6267259620628D-03 0.6414431889615D-03 + 0.6565056382328D-03 0.6719213942557D-03 0.6876987302450D-03 0.7038461126454D-03 + 0.7203722056267D-03 0.7372858756825D-03 0.7545961963362D-03 0.7723124529547D-03 + 0.7904441476743D-03 0.8090010044395D-03 0.8279929741591D-03 0.8474302399803D-03 + 0.8673232226854D-03 0.8876825862128D-03 0.9085192433053D-03 0.9298443612885D-03 + 0.9516693679833D-03 0.9740059577534D-03 0.9968660976936D-03 0.1020262033960D-02 + 0.1044206298245D-02 0.1068711714404D-02 0.1093791405233D-02 0.1119458799402D-02 + 0.1145727638549D-02 0.1172611984533D-02 0.1200126226866D-02 0.1228285090299D-02 + 0.1257103642593D-02 0.1286597302470D-02 0.1316781847740D-02 0.1347673423616D-02 + 0.1379288551225D-02 0.1411644136313D-02 0.1444757478139D-02 0.1478646278594D-02 + 0.1513328651505D-02 0.1548823132173D-02 0.1585148687119D-02 0.1622324724052D-02 + 0.1660371102071D-02 0.1699308142098D-02 0.1739156637551D-02 0.1779937865258D-02 + 0.1821673596624D-02 0.1864386109050D-02 0.1908098197620D-02 0.1952833187045D-02 + 0.1998614943887D-02 0.2045467889061D-02 0.2093417010621D-02 0.2142487876835D-02 + 0.2192706649566D-02 0.2244100097950D-02 0.2296695612391D-02 0.2350521218871D-02 + 0.2405605593589D-02 0.2461978077930D-02 0.2519668693780D-02 0.2578708159180D-02 + 0.2639127904347D-02 0.2700960088050D-02 0.2764237614363D-02 0.2828994149797D-02 + 0.2895264140816D-02 0.2963082831762D-02 0.3032486283173D-02 0.3103511390526D-02 + 0.3176195903398D-02 0.3250578445064D-02 0.3326698532539D-02 0.3404596597070D-02 + 0.3484314005096D-02 0.3565893079675D-02 0.3649377122404D-02 0.3734810435823D-02 + 0.3822238346332D-02 0.3911707227623D-02 0.4003264524637D-02 0.4096958778068D-02 + 0.4192839649407D-02 0.4290957946558D-02 0.4391365650032D-02 0.4494115939719D-02 + 0.4599263222270D-02 0.4706863159091D-02 0.4816972694967D-02 0.4929650087320D-02 + 0.5044954936134D-02 0.5162948214539D-02 0.5283692300087D-02 0.5407251006722D-02 + 0.5533689617469D-02 0.5663074917849D-02 0.5795475230042D-02 0.5930960447811D-02 + 0.6069602072201D-02 0.6211473248042D-02 0.6356648801255D-02 0.6505205276989D-02 + 0.6657220978610D-02 0.6812776007555D-02 0.6971952304061D-02 0.7134833688812D-02 + 0.7301505905495D-02 0.7472056664307D-02 0.7646575686420D-02 0.7825154749426D-02 + 0.8007887733795D-02 0.8194870670349D-02 0.8386201788783D-02 0.8581981567262D-02 + 0.8782312783101D-02 0.8987300564565D-02 0.9197052443804D-02 0.9411678410950D-02 + 0.9631290969401D-02 0.9856005192321D-02 0.1008593878036D-01 0.1032121212066D-01 + 0.1056194834714D-01 0.1080827340207D-01 0.1106031609904D-01 0.1131820818725D-01 + 0.1158208441725D-01 0.1185208260805D-01 0.1212834371572D-01 0.1241101190349D-01 + 0.1270023461334D-01 0.1299616263918D-01 0.1329895020152D-01 0.1360875502388D-01 + 0.1392573841078D-01 0.1425006532736D-01 0.1458190448082D-01 0.1492142840354D-01 + 0.1526881353800D-01 0.1562424032353D-01 0.1598789328488D-01 0.1635996112275D-01 + 0.1674063680621D-01 0.1713011766706D-01 0.1752860549628D-01 0.1793630664247D-01 + 0.1835343211238D-01 0.1878019767364D-01 0.1921682395954D-01 0.1966353657619D-01 + 0.2012056621177D-01 0.2058814874823D-01 0.2106652537525D-01 0.2155594270663D-01 + 0.2205665289910D-01 0.2256891377368D-01 0.2309298893950D-01 0.2362914792023D-01 + 0.2417766628321D-01 0.2473882577114D-01 0.2531291443667D-01 0.2590022677960D-01 + 0.2650106388708D-01 0.2711573357661D-01 0.2774455054204D-01 0.2838783650253D-01 + 0.2904592035462D-01 0.2971913832738D-01 0.3040783414076D-01 0.3111235916718D-01 + 0.3183307259638D-01 0.3257034160364D-01 0.3332454152147D-01 0.3409605601466D-01 + 0.3488527725896D-01 0.3569260612339D-01 0.3651845235609D-01 0.3736323477404D-01 + 0.3822738145646D-01 0.3911132994221D-01 0.4001552743100D-01 0.4094043098863D-01 + 0.4188650775637D-01 0.4285423516441D-01 0.4384410114952D-01 0.4485660437705D-01 + 0.4589225446724D-01 0.4695157222597D-01 0.4803508987999D-01 0.4914335131680D-01 + 0.5027691232908D-01 0.5143634086397D-01 0.5262221727702D-01 0.5383513459112D-01 + 0.5507569876040D-01 0.5634452893907D-01 0.5764225775551D-01 0.5896953159144D-01 + 0.6032701086645D-01 0.6171537032787D-01 0.6313529934610D-01 0.6458750221537D-01 + 0.6607269846028D-01 0.6759162314785D-01 0.6914502720547D-01 0.7073367774467D-01 + 0.7235835839078D-01 0.7401986961872D-01 0.7571902909479D-01 0.7745667202470D-01 + 0.7923365150794D-01 0.8105083889839D-01 0.8290912417146D-01 0.8480941629777D-01 + 0.8675264362336D-01 0.8873975425672D-01 0.9077171646250D-01 0.9284951906214D-01 + 0.9497417184143D-01 0.9714670596512D-01 0.9936817439861D-01 0.1016396523369D+00 + 0.1039622376406D+00 0.1063370512799D+00 0.1087652377849D+00 0.1112479657046D+00 + 0.1137864280726D+00 0.1163818428813D+00 0.1190354535626D+00 0.1217485294780D+00 + 0.1245223664148D+00 0.1273582870922D+00 0.1302576416734D+00 0.1332218082873D+00 + 0.1362521935575D+00 0.1393502331400D+00 0.1425173922687D+00 0.1457551663094D+00 + 0.1490650813222D+00 0.1524486946321D+00 0.1559075954084D+00 0.1594434052521D+00 + 0.1630577787924D+00 0.1667524042908D+00 0.1705290042550D+00 0.1743893360603D+00 + 0.1783351925803D+00 0.1823684028262D+00 0.1864908325939D+00 0.1907043851210D+00 + 0.1950110017514D+00 0.1994126626092D+00 0.2039113872805D+00 0.2085092355047D+00 + 0.2132083078736D+00 0.2180107465389D+00 0.2229187359293D+00 0.2279345034746D+00 + 0.2330603203389D+00 0.2382985021623D+00 0.2436514098099D+00 0.2491214501298D+00 + 0.2547110767190D+00 0.2604227906963D+00 0.2662591414843D+00 0.2722227275978D+00 + 0.2783161974410D+00 0.2845422501104D+00 0.2909036362063D+00 0.2974031586510D+00 + 0.3040436735129D+00 0.3108280908381D+00 0.3177593754880D+00 0.3248405479832D+00 + 0.3320746853529D+00 0.3394649219899D+00 0.3470144505113D+00 0.3547265226235D+00 + 0.3626044499927D+00 0.3706516051183D+00 0.3788714222121D+00 0.3872673980788D+00 + 0.3958430930017D+00 0.4046021316296D+00 0.4135482038664D+00 0.4226850657628D+00 + 0.4320165404081D+00 0.4415465188242D+00 0.4512789608585D+00 0.4612178960766D+00 + 0.4713674246546D+00 0.4817317182683D+00 0.4923150209819D+00 0.5031216501316D+00 + 0.5141559972066D+00 0.5254225287256D+00 0.5369257871068D+00 0.5486703915328D+00 + 0.5606610388075D+00 0.5729025042060D+00 0.5853996423141D+00 0.5981573878595D+00 + 0.6111807565305D+00 0.6244748457836D+00 0.6380448356375D+00 0.6518959894534D+00 + 0.6660336546986D+00 0.6804632636948D+00 0.6951903343474D+00 0.7102204708555D+00 + 0.7255593644017D+00 0.7412127938194D+00 0.7571866262360D+00 0.7734868176917D+00 + 0.7901194137312D+00 0.8070905499665D+00 0.8244064526103D+00 0.8420734389770D+00 + 0.8600979179504D+00 0.8784863904150D+00 0.8972454496511D+00 0.9163817816891D+00 + 0.9359021656229D+00 0.9558134738795D+00 0.9761226724427D+00 0.9968368210285D+00 + 0.1017963073210D+01 0.1039508676490D+01 0.1061480972318D+01 0.1083887396047D+01 + 0.1106735476836D+01 0.1130032837482D+01 0.1153787194190D+01 0.1178006356277D+01 + 0.1202698225795D+01 0.1227870797093D+01 0.1253532156286D+01 0.1279690480659D+01 + 0.1306354037973D+01 0.1333531185694D+01 0.1361230370125D+01 0.1389460125447D+01 + 0.1418229072662D+01 0.1447545918436D+01 0.1477419453830D+01 0.1507858552937D+01 + 0.1538872171388D+01 0.1570469344759D+01 0.1602659186847D+01 0.1635450887823D+01 + 0.1668853712259D+01 0.1702876997023D+01 0.1737530149033D+01 0.1772822642871D+01 + 0.1808764018254D+01 0.1845363877352D+01 0.1882631881947D+01 0.1920577750443D+01 + 0.1959211254701D+01 0.1998542216711D+01 0.2038580505087D+01 0.2079336031385D+01 + 0.2120818746238D+01 0.2163038635298D+01 0.2206005714988D+01 0.2249730028055D+01 + 0.2294221638918D+01 0.2339490628806D+01 0.2385547090684D+01 0.2432401123957D+01 + 0.2480062828949D+01 0.2528542301159D+01 0.2577849625270D+01 0.2627994868928D+01 + 0.2678988076269D+01 0.2730839261202D+01 0.2783558400427D+01 0.2837155426198D+01 + 0.2891640218824D+01 0.2947022598886D+01 0.3003312319193D+01 0.3060519056444D+01 + 0.3118652402616D+01 0.3177721856052D+01 0.3237736812262D+01 0.3298706554417D+01 + 0.3360640243548D+01 0.3423546908429D+01 0.3487435435157D+01 0.3552314556408D+01 + 0.3618192840379D+01 0.3685078679409D+01 0.3752980278273D+01 0.3821905642142D+01 + 0.3891862564227D+01 0.3962858613070D+01 0.4034901119519D+01 0.4107997163357D+01 + 0.4182153559591D+01 0.4257376844407D+01 0.4333673260788D+01 0.4411048743785D+01 + 0.4489508905456D+01 0.4569059019465D+01 0.4649704005343D+01 0.4731448412420D+01 + 0.4814296403414D+01 0.4898251737705D+01 0.4983317754274D+01 0.5069497354326D+01 + 0.5156792983594D+01 0.5245206614333D+01 0.5334739727019D+01 0.5425393291737D+01 + 0.5517167749297D+01 0.5610062992057D+01 0.5704078344485D+01 0.5799212543462D+01 + 0.5895463718334D+01 0.5992829370731D+01 0.6091306354173D+01 0.6190890853456D+01 + 0.6291578363859D+01 0.6393363670174D+01 0.6496240825583D+01 0.6600203130395D+01 + 0.6705243110671D+01 0.6811352496752D+01 0.6918522201725D+01 0.7026742299830D+01 + 0.7136002004857D+01 0.7246289648544D+01 0.7357592659012D+01 0.7469897539266D+01 + 0.7583189845790D+01 0.7697454167276D+01 0.7812674103512D+01 0.7928832244472D+01 + 0.8045910149650D+01 0.8163888327659D+01 0.8282746216162D+01 0.8402462162153D+01 + 0.8523013402647D+01 0.8644376045826D+01 0.8766525052671D+01 0.8889434219156D+01 + 0.9013076159033D+01 0.9137422287266D+01 0.9262442804180D+01 0.9388106680362D+01 + 0.9514381642386D+01 0.9641234159419D+01 0.9768629430760D+01 0.9896531374387D+01 + 0.1002490261657D+02 0.1015370448260D+02 0.1028289698875D+02 0.1041243883547D+02 + 0.1054228740194D+02 0.1067239874200D+02 0.1080272758161D+02 0.1093322731781D+02 + 0.1106385001935D+02 0.1119454642901D+02 0.1132526596767D+02 0.1145595674027D+02 + 0.1158656554370D+02 0.1171703787669D+02 0.1184731795179D+02 0.1197734870953D+02 + 0.1210707183480D+02 0.1223642777560D+02 0.1236535576413D+02 0.1249379384041D+02 + 0.1262167887843D+02 0.1274894661497D+02 0.1287553168105D+02 0.1300136763624D+02 + 0.1312638700578D+02 0.1325052132060D+02 0.1337370116039D+02 0.1349585619965D+02 + 0.1361691525691D+02 0.1373680634710D+02 0.1385545673713D+02 0.1397279300475D+02 + 0.1408874110083D+02 0.1420322641484D+02 0.1431617384391D+02 0.1442750786520D+02 + 0.1453715261184D+02 0.1464503195231D+02 0.1475106957334D+02 0.1485518906631D+02 + 0.1495731401723D+02 0.1505736810017D+02 0.1515527517423D+02 0.1525095938400D+02 + 0.1534434526342D+02 0.1543535784313D+02 0.1552392276115D+02 0.1560996637684D+02 + 0.1569341588814D+02 0.1577419945199D+02 0.1585224630775D+02 0.1592748690368D+02 + 0.1599985302622D+02 0.1606927793202D+02 0.1613569648255D+02 0.1619904528121D+02 + 0.1625926281269D+02 0.1631628958438D+02 0.1637006826986D+02 0.1642054385387D+02 + 0.1646766377903D+02 0.1651137809360D+02 0.1655163960043D+02 0.1658840400653D+02 + 0.1662163007325D+02 0.1665127976653D+02 0.1667731840709D+02 0.1669971482024D+02 + 0.1671844148480D+02 0.1673347468105D+02 0.1674479463705D+02 0.1675238567325D+02 + 0.1675623634475D+02 0.1675633958099D+02 0.1675269282236D+02 0.1674529815328D+02 + 0.1673416243144D+02 0.1671929741260D+02 0.1670071987060D+02 0.1667845171207D+02 + 0.1665252008529D+02 0.1662295748295D+02 0.1658980183799D+02 0.1655309661229D+02 + 0.1651289087761D+02 0.1646923938826D+02 0.1642220264504D+02 0.1637184694991D+02 + 0.1631824445090D+02 0.1626147317681D+02 0.1620161706111D+02 0.1613876595461D+02 + 0.1607301562647D+02 0.1600446775294D+02 0.1593322989356D+02 0.1585941545417D+02 + 0.1578314363649D+02 0.1570453937377D+02 0.1562373325211D+02 0.1554086141713D+02 + 0.1545606546563D+02 0.1536949232194D+02 0.1528129409862D+02 0.1519162794140D+02 + 0.1510065585794D+02 0.1500854453042D+02 0.1491546511167D+02 0.1482159300489D+02 + 0.1472710762669D+02 0.1463219215373D+02 0.1453703325262D+02 0.1444182079357D+02 + 0.1434674754757D+02 0.1425200886753D+02 0.1415780235347D+02 0.1406432750219D+02 + 0.1397178534157D+02 0.1388037805021D+02 0.1379030856261D+02 0.1370178016055D+02 + 0.1361499605126D+02 0.1353015893305D+02 0.1344747054907D+02 0.1336713123002D+02 + 0.1328933942665D+02 0.1321429123299D+02 0.1314217990124D+02 0.1307319534911D+02 + 0.1300752366174D+02 0.1294534658758D+02 0.1288684103098D+02 0.1283217854213D+02 + 0.1278152480572D+02 0.1273503912963D+02 0.1269287393525D+02 0.1265517425070D+02 + 0.1262207720857D+02 0.1259371154963D+02 0.1257019713418D+02 0.1255164446257D+02 + 0.1253815420652D+02 0.1252981675297D+02 0.1252671176194D+02 0.1252890774035D+02 + 0.1253646163319D+02 0.1254941843391D+02 0.1256781081565D+02 0.1259165878492D+02 + 0.1262096935948D+02 0.1265573627186D+02 0.1269593970031D+02 0.1274154602860D+02 + 0.1279250763612D+02 0.1284876271993D+02 0.1291023514987D+02 0.1297683435832D+02 + 0.1304845526572D+02 0.1312497824294D+02 0.1320626911186D+02 0.1329217918482D+02 + 0.1338254534406D+02 0.1347719016192D+02 0.1357592206229D+02 0.1367853552411D+02 + 0.1378481132722D+02 0.1389451684086D+02 0.1400740635503D+02 0.1412322145474D+02 + 0.1424169143705D+02 0.1436253377061D+02 0.1448545459727D+02 0.1461014927535D+02 + 0.1473630296364D+02 0.1486359124547D+02 0.1499168079165D+02 0.1512023006124D+02 + 0.1524889003871D+02 0.1537730500600D+02 0.1550511334794D+02 0.1563194838901D+02 + 0.1575743925971D+02 0.1588121179028D+02 0.1600288942953D+02 0.1612209418650D+02 + 0.1623844759226D+02 0.1635157167941D+02 0.1646108997624D+02 0.1656662851297D+02 + 0.1666781683678D+02 0.1676428903280D+02 0.1685568474771D+02 0.1694165021276D+02 + 0.1702183926298D+02 0.1709591434898D+02 0.1716354753815D+02 0.1722442150176D+02 + 0.1727823048429D+02 0.1732468125184D+02 0.1736349401585D+02 0.1739440332882D+02 + 0.1741715894860D+02 0.1743152666781D+02 0.1743728910515D+02 0.1743424645524D+02 + 0.1742221719400D+02 0.1740103873629D+02 0.1737056804316D+02 0.1733068217558D+02 + 0.1728127879228D+02 0.1722227658900D+02 0.1715361567688D+02 0.1707525789793D+02 + 0.1698718707542D+02 0.1688940919777D+02 0.1678195253406D+02 0.1666486768020D+02 + 0.1653822753457D+02 0.1640212720234D+02 0.1625668382804D+02 0.1610203635605D+02 + 0.1593834521920D+02 0.1576579195557D+02 0.1558457875437D+02 0.1539492793162D+02 + 0.1519708133698D+02 0.1499129969316D+02 0.1477786186979D+02 0.1455706409384D+02 + 0.1432921909906D+02 0.1409465521715D+02 0.1385371541354D+02 0.1360675627135D+02 + 0.1335414692683D+02 0.1309626796025D+02 0.1283351024628D+02 0.1256627376823D+02 + 0.1229496640060D+02 0.1202000266485D+02 0.1174180246306D+02 0.1146078979490D+02 + 0.1117739146290D+02 0.1089203577144D+02 0.1060515122500D+02 0.1031716523102D+02 + 0.1002850281309D+02 0.9739585339808D+01 0.9450829275067D+01 0.9162644955013D+01 + 0.8875435397193D+01 0.8589595147052D+01 0.8305509166913D+01 0.8023551772294D+01 + 0.7744085620244D+01 0.7467460754102D+01 0.7194013708732D+01 0.6924066680121D+01 + 0.6657926762676D+01 0.6395885257290D+01 0.6138217052838D+01 0.5885180083291D+01 + 0.5637014862214D+01 0.5393944095964D+01 0.5156172376397D+01 0.4923885953440D+01 + 0.4697252587402D+01 0.4476421480403D+01 0.4261523285854D+01 0.4052670194446D+01 + 0.3849956094672D+01 0.3653456805497D+01 0.3463230378383D+01 0.3279317465534D+01 + 0.3101741750858D+01 0.2930510439883D+01 0.2765614804580D+01 0.2607030778803D+01 + 0.2454719599894D+01 0.2308628491820D+01 0.2168691385091D+01 0.2034829668640D+01 + 0.1906952968766D+01 0.1784959950247D+01 0.1668739134727D+01 0.1558169731539D+01 + 0.1453122476193D+01 0.1353460471853D+01 0.1259040029279D+01 0.1169711500850D+01 + 0.1085320104451D+01 0.1005706733253D+01 0.9307087475878D+00 0.8601607453947D+00 + 0.7938953079704D+00 0.7317437180194D+00 0.6735366472990D+00 0.6191048114486D+00 + 0.5682795899002D+00 0.5208936090774D+00 0.4767812874066D+00 0.4357793409794D+00 + 0.3977272490158D+00 0.3624676785880D+00 0.3298468683613D+00 0.2997149714018D+00 + 0.2719263573757D+00 0.2463398747288D+00 0.2228190736820D+00 0.2012323911077D+00 + 0.1814532985587D+00 0.1633604149139D+00 0.1468375852681D+00 0.1317739278401D+00 + 0.1180638507949D+00 0.1056070409740D+00 0.9430842660595D-01 0.8407811612220D-01 + 0.7483131523720D-01 0.6648822446255D-01 0.5897391921868D-01 0.5221821468026D-01 + 0.4615551744933D-01 0.4072466609085D-01 0.3586876249310D-01 0.3153499593029D-01 + 0.2767446160932D-01 0.2424197537852D-01 0.2119588616448D-01 0.1849788758658D-01 + 0.1611283007825D-01 0.1400853472097D-01 0.1215560987394D-01 0.1052727155919D-01 + 0.9099168441213D-02 0.7849212122301D-02 0.6757413360975D-02 0.5805724712213D-02 + 0.4977889984910D-02 0.4259300815297D-02 0.3636860564909D-02 0.3098855668813D-02 + 0.2634834484130D-02 0.2235493620776D-02 0.1892571675614D-02 0.1598750237855D-02 + 0.1347561987417D-02 0.1133305668705D-02 0.9509676897177D-03 0.7961500700565D-03 + 0.6650044409550D-03 0.5541717854288D-03 0.4607275965721D-03 0.3821321264613D-03 + 0.3161853965802D-03 0.2609866426733D-03 0.2148978720202D-03 0.1765112188356D-03 + 0.1446197934254D-03 0.1181917324578D-03 0.9634717085916D-04 0.7833787008417D-04 + 0.6352925250168D-04 0.5138460711824D-04 0.4145124756025D-04 0.3334841894247D-04 + 0.2675676576924D-04 0.2140918818591D-04 0.1708292858676D-04 0.1359274468595D-04 + 0.1078503858436D-04 0.8532824057450D-05 0.6731426203640D-05 0.5294818705431D-05 + 0.4152514256060D-05 0.3246933196226D-05 0.2531184102685D-05 0.1967197996113D-05 + 0.1524165020076D-05 0.1177228922105D-05 0.9064004816964D-06 0.6956562213712D-06 + 0.5321933500632D-06 0.4058159681390D-06 0.3084311550367D-06 0.2336367077944D-06 + 0.1763850440397D-06 0.1327101668872D-06 0.9950664996314D-07 0.7435137432006D-07 + 0.5536026859924D-07 0.4107360008380D-07 0.3036446521025D-07 0.2236605902416D-07 + 0.1641408678133D-07 0.1200133780083D-07 0.8741989878798D-08 0.6343668057516D-08 + 0.4585658331970D-08 0.3301987194148D-08 0.2368332361815D-08 0.1691937750742D-08 + 0.1203874557883D-08 0.8531269029104D-09 0.6020904848644D-09 0.4231609199373D-09 + 0.2961588355584D-09 0.2063947413491D-09 0.1432209469506D-09 0.9895263422926D-10 + 0.6806749180835D-10 0.4661461407108D-10 0.3177989810672D-10 0.2156794533121D-10 + 0.1457029674703D-10 0.9797346965900D-11 0.6557008288435D-11 0.4367535372748D-11 + 0.2895183963007D-11 0.1909847081824D-11 0.1253660240977D-11 0.8188333489718D-12 + 0.5320941587156D-12 0.3440140886834D-12 0.2212441299903D-12 0.1415527620957D-12 + 0.9009275622109D-13 0.5703749771740D-13 0.3591739940478D-13 0.2249568274860D-13 + 0.1401269909872D-13 0.8680702870622D-14 0.5348002788467D-14 + LSMS: xx z= 28. xvalws= 4.71708 + 28. 6.55000 10. 0.6401316680236D+00 + -0.1113096740000D+02 0.8563086195639D+00 1010 +-0.5599696223472D+02-0.5599692579244D+02-0.5599688891298D+02-0.5599685159110D+02 +-0.5599681382149D+02-0.5599677559878D+02-0.5599673691753D+02-0.5599669777225D+02 +-0.5599665815737D+02-0.5599661806724D+02-0.5599657749618D+02-0.5599653643840D+02 +-0.5599649488808D+02-0.5599645283930D+02-0.5599641028607D+02-0.5599636722236D+02 +-0.5599632364203D+02-0.5599627953889D+02-0.5599623490665D+02-0.5599618973899D+02 +-0.5599614402946D+02-0.5599609777158D+02-0.5599605095875D+02-0.5599600358433D+02 +-0.5599595564157D+02-0.5599590712365D+02-0.5599585802368D+02-0.5599580833468D+02 +-0.5599575804956D+02-0.5599570716119D+02-0.5599565566231D+02-0.5599560354562D+02 +-0.5599555080369D+02-0.5599549742903D+02-0.5599544341404D+02-0.5599538875103D+02 +-0.5599533343224D+02-0.5599527744979D+02-0.5599522079573D+02-0.5599516346198D+02 +-0.5599510544041D+02-0.5599504672275D+02-0.5599498730065D+02-0.5599492716567D+02 +-0.5599486630923D+02-0.5599480472270D+02-0.5599474239731D+02-0.5599467932419D+02 +-0.5599461549437D+02-0.5599455089877D+02-0.5599448552820D+02-0.5599441937337D+02 +-0.5599435242486D+02-0.5599428467314D+02-0.5599421610859D+02-0.5599414672144D+02 +-0.5599407650183D+02-0.5599400543977D+02-0.5599393352515D+02-0.5599386074773D+02 +-0.5599378709716D+02-0.5599371256297D+02-0.5599363713455D+02-0.5599356080117D+02 +-0.5599348355197D+02-0.5599340537597D+02-0.5599332626203D+02-0.5599324619890D+02 +-0.5599316517520D+02-0.5599308317940D+02-0.5599300019982D+02-0.5599291622467D+02 +-0.5599283124199D+02-0.5599274523970D+02-0.5599265820556D+02-0.5599257012718D+02 +-0.5599248099203D+02-0.5599239078744D+02-0.5599229950056D+02-0.5599220711841D+02 +-0.5599211362784D+02-0.5599201901554D+02-0.5599192326807D+02-0.5599182637179D+02 +-0.5599172831291D+02-0.5599162907749D+02-0.5599152865140D+02-0.5599142702035D+02 +-0.5599132416987D+02-0.5599122008534D+02-0.5599111475194D+02-0.5599100815468D+02 +-0.5599090027839D+02-0.5599079110773D+02-0.5599068062714D+02-0.5599056882092D+02 +-0.5599045567315D+02-0.5599034116773D+02-0.5599022528836D+02-0.5599010801854D+02 +-0.5598998934160D+02-0.5598986924064D+02-0.5598974769856D+02-0.5598962469807D+02 +-0.5598950022165D+02-0.5598937425161D+02-0.5598924676999D+02-0.5598911775867D+02 +-0.5598898719927D+02-0.5598885507321D+02-0.5598872136169D+02-0.5598858604567D+02 +-0.5598844910589D+02-0.5598831052286D+02-0.5598817027685D+02-0.5598802834790D+02 +-0.5598788471580D+02-0.5598773936010D+02-0.5598759226012D+02-0.5598744339490D+02 +-0.5598729274327D+02-0.5598714028376D+02-0.5598698599468D+02-0.5598682985406D+02 +-0.5598667183967D+02-0.5598651192900D+02-0.5598635009931D+02-0.5598618632753D+02 +-0.5598602059035D+02-0.5598585286418D+02-0.5598568312513D+02-0.5598551134904D+02 +-0.5598533751143D+02-0.5598516158757D+02-0.5598498355239D+02-0.5598480338055D+02 +-0.5598462104638D+02-0.5598443652392D+02-0.5598424978690D+02-0.5598406080871D+02 +-0.5598386956245D+02-0.5598367602087D+02-0.5598348015642D+02-0.5598328194119D+02 +-0.5598308134695D+02-0.5598287834514D+02-0.5598267290684D+02-0.5598246500277D+02 +-0.5598225460334D+02-0.5598204167857D+02-0.5598182619813D+02-0.5598160813131D+02 +-0.5598138744707D+02-0.5598116411395D+02-0.5598093810014D+02-0.5598070937344D+02 +-0.5598047790127D+02-0.5598024365064D+02-0.5598000658819D+02-0.5597976668012D+02 +-0.5597952389226D+02-0.5597927819002D+02-0.5597902953837D+02-0.5597877790190D+02 +-0.5597852324473D+02-0.5597826553059D+02-0.5597800472274D+02-0.5597774078402D+02 +-0.5597747367680D+02-0.5597720336302D+02-0.5597692980416D+02-0.5597665296121D+02 +-0.5597637279473D+02-0.5597608926477D+02-0.5597580233093D+02-0.5597551195229D+02 +-0.5597521808746D+02-0.5597492069456D+02-0.5597461973118D+02-0.5597431515441D+02 +-0.5597400692084D+02-0.5597369498651D+02-0.5597337930694D+02-0.5597305983713D+02 +-0.5597273653153D+02-0.5597240934402D+02-0.5597207822795D+02-0.5597174313610D+02 +-0.5597140402069D+02-0.5597106083334D+02-0.5597071352512D+02-0.5597036204648D+02 +-0.5597000634730D+02-0.5596964637683D+02-0.5596928208373D+02-0.5596891341603D+02 +-0.5596854032113D+02-0.5596816274582D+02-0.5596778063622D+02-0.5596739393782D+02 +-0.5596700259543D+02-0.5596660655323D+02-0.5596620575470D+02-0.5596580014265D+02 +-0.5596538965919D+02-0.5596497424574D+02-0.5596455384302D+02-0.5596412839103D+02 +-0.5596369782904D+02-0.5596326209559D+02-0.5596282112848D+02-0.5596237486478D+02 +-0.5596192324076D+02-0.5596146619196D+02-0.5596100365313D+02-0.5596053555821D+02 +-0.5596006184038D+02-0.5595958243200D+02-0.5595909726460D+02-0.5595860626889D+02 +-0.5595810937477D+02-0.5595760651126D+02-0.5595709760654D+02-0.5595658258792D+02 +-0.5595606138184D+02-0.5595553391383D+02-0.5595500010855D+02-0.5595445988973D+02 +-0.5595391318020D+02-0.5595335990183D+02-0.5595279997556D+02-0.5595223332139D+02 +-0.5595165985834D+02-0.5595107950445D+02-0.5595049217677D+02-0.5594989779136D+02 +-0.5594929626325D+02-0.5594868750646D+02-0.5594807143396D+02-0.5594744795768D+02 +-0.5594681698847D+02-0.5594617843611D+02-0.5594553220930D+02-0.5594487821562D+02 +-0.5594421636155D+02-0.5594354655242D+02-0.5594286869244D+02-0.5594218268464D+02 +-0.5594148843089D+02-0.5594078583187D+02-0.5594007478706D+02-0.5593935519473D+02 +-0.5593862695191D+02-0.5593788995439D+02-0.5593714409670D+02-0.5593638927210D+02 +-0.5593562537255D+02-0.5593485228870D+02-0.5593406990989D+02-0.5593327812411D+02 +-0.5593247681800D+02-0.5593166587683D+02-0.5593084518448D+02-0.5593001462343D+02 +-0.5592917407472D+02-0.5592832341797D+02-0.5592746253133D+02-0.5592659129149D+02 +-0.5592570957363D+02-0.5592481725142D+02-0.5592391419702D+02-0.5592300028101D+02 +-0.5592207537244D+02-0.5592113933875D+02-0.5592019204577D+02-0.5591923335772D+02 +-0.5591826313717D+02-0.5591728124502D+02-0.5591628754050D+02-0.5591528188110D+02 +-0.5591426412263D+02-0.5591323411911D+02-0.5591219172282D+02-0.5591113678423D+02 +-0.5591006915201D+02-0.5590898867299D+02-0.5590789519214D+02-0.5590678855255D+02 +-0.5590566859543D+02-0.5590453516002D+02-0.5590338808365D+02-0.5590222720165D+02 +-0.5590105234738D+02-0.5589986335215D+02-0.5589866004524D+02-0.5589744225384D+02 +-0.5589620980308D+02-0.5589496251593D+02-0.5589370021322D+02-0.5589242271362D+02 +-0.5589112983359D+02-0.5588982138736D+02-0.5588849718690D+02-0.5588715704190D+02 +-0.5588580075975D+02-0.5588442814548D+02-0.5588303900178D+02-0.5588163312891D+02 +-0.5588021032473D+02-0.5587877038463D+02-0.5587731310152D+02-0.5587583826579D+02 +-0.5587434566529D+02-0.5587283508528D+02-0.5587130630841D+02-0.5586975911472D+02 +-0.5586819328153D+02-0.5586660858347D+02-0.5586500479245D+02-0.5586338167758D+02 +-0.5586173900518D+02-0.5586007653871D+02-0.5585839403878D+02-0.5585669126306D+02 +-0.5585496796629D+02-0.5585322390022D+02-0.5585145881358D+02-0.5584967245205D+02 +-0.5584786455821D+02-0.5584603487151D+02-0.5584418312823D+02-0.5584230906144D+02 +-0.5584041240095D+02-0.5583849287331D+02-0.5583655020171D+02-0.5583458410598D+02 +-0.5583259430257D+02-0.5583058050443D+02-0.5582854242106D+02-0.5582647975838D+02 +-0.5582439221876D+02-0.5582227950095D+02-0.5582014130001D+02-0.5581797730729D+02 +-0.5581578721041D+02-0.5581357069315D+02-0.5581132743546D+02-0.5580905711339D+02 +-0.5580675939903D+02-0.5580443396051D+02-0.5580208046188D+02-0.5579969856313D+02 +-0.5579728792008D+02-0.5579484818438D+02-0.5579237900344D+02-0.5578988002036D+02 +-0.5578735087390D+02-0.5578479119842D+02-0.5578220062383D+02-0.5577957877554D+02 +-0.5577692527437D+02-0.5577423973656D+02-0.5577152177365D+02-0.5576877099246D+02 +-0.5576598699501D+02-0.5576316937851D+02-0.5576031773521D+02-0.5575743165245D+02 +-0.5575451071251D+02-0.5575155449261D+02-0.5574856256479D+02-0.5574553449592D+02 +-0.5574246984757D+02-0.5573936817599D+02-0.5573622903202D+02-0.5573305196105D+02 +-0.5572983650292D+02-0.5572658219188D+02-0.5572328855652D+02-0.5571995511969D+02 +-0.5571658139845D+02-0.5571316690396D+02-0.5570971114147D+02-0.5570621361020D+02 +-0.5570267380329D+02-0.5569909120771D+02-0.5569546530421D+02-0.5569179556723D+02 +-0.5568808146482D+02-0.5568432245858D+02-0.5568051800358D+02-0.5567666754825D+02 +-0.5567277053437D+02-0.5566882639691D+02-0.5566483456400D+02-0.5566079445686D+02 +-0.5565670548966D+02-0.5565256706948D+02-0.5564837859624D+02-0.5564413946258D+02 +-0.5563984905378D+02-0.5563550674768D+02-0.5563111191461D+02-0.5562666391727D+02 +-0.5562216211068D+02-0.5561760584202D+02-0.5561299445065D+02-0.5560832726789D+02 +-0.5560360361703D+02-0.5559882281319D+02-0.5559398416321D+02-0.5558908696562D+02 +-0.5558413051046D+02-0.5557911407924D+02-0.5557403694482D+02-0.5556889837133D+02 +-0.5556369761402D+02-0.5555843391924D+02-0.5555310652426D+02-0.5554771465720D+02 +-0.5554225753693D+02-0.5553673437298D+02-0.5553114436539D+02-0.5552548670463D+02 +-0.5551976057150D+02-0.5551396513700D+02-0.5550809956225D+02-0.5550216299834D+02 +-0.5549615458625D+02-0.5549007345675D+02-0.5548391873022D+02-0.5547768951663D+02 +-0.5547138491534D+02-0.5546500401504D+02-0.5545854589362D+02-0.5545200961802D+02 +-0.5544539424416D+02-0.5543869881681D+02-0.5543192236944D+02-0.5542506392412D+02 +-0.5541812249142D+02-0.5541109707023D+02-0.5540398664770D+02-0.5539679019908D+02 +-0.5538950668762D+02-0.5538213506439D+02-0.5537467426823D+02-0.5536712322557D+02 +-0.5535948085032D+02-0.5535174604375D+02-0.5534391769433D+02-0.5533599467765D+02 +-0.5532797585624D+02-0.5531986007948D+02-0.5531164618344D+02-0.5530333299077D+02 +-0.5529491931054D+02-0.5528640393816D+02-0.5527778565516D+02-0.5526906322918D+02 +-0.5526023541369D+02-0.5525130094801D+02-0.5524225855703D+02-0.5523310695118D+02 +-0.5522384482627D+02-0.5521447086332D+02-0.5520498372847D+02-0.5519538207280D+02 +-0.5518566453225D+02-0.5517582972744D+02-0.5516587626356D+02-0.5515580273021D+02 +-0.5514560770132D+02-0.5513528973493D+02-0.5512484737313D+02-0.5511427914192D+02 +-0.5510358355101D+02-0.5509275909378D+02-0.5508180424708D+02-0.5507071747112D+02 +-0.5505949720935D+02-0.5504814188833D+02-0.5503664991756D+02-0.5502501968942D+02 +-0.5501324957897D+02-0.5500133794390D+02-0.5498928312432D+02-0.5497708344272D+02 +-0.5496473720377D+02-0.5495224269427D+02-0.5493959818296D+02-0.5492680192049D+02 +-0.5491385213919D+02-0.5490074705306D+02-0.5488748485759D+02-0.5487406372968D+02 +-0.5486048182753D+02-0.5484673729051D+02-0.5483282823909D+02-0.5481875277470D+02 +-0.5480450897965D+02-0.5479009491705D+02-0.5477550863068D+02-0.5476074814493D+02 +-0.5474581146467D+02-0.5473069657522D+02-0.5471540144223D+02-0.5469992401161D+02 +-0.5468426220943D+02-0.5466841394191D+02-0.5465237709529D+02-0.5463614953579D+02 +-0.5461972910955D+02-0.5460311364257D+02-0.5458630094067D+02-0.5456928878940D+02 +-0.5455207495407D+02-0.5453465717964D+02-0.5451703319072D+02-0.5449920069153D+02 +-0.5448115736590D+02-0.5446290087722D+02-0.5444442886843D+02-0.5442573896205D+02 +-0.5440682876012D+02-0.5438769584425D+02-0.5436833777561D+02-0.5434875209495D+02 +-0.5432893632261D+02-0.5430888795858D+02-0.5428860448249D+02-0.5426808335370D+02 +-0.5424732201130D+02-0.5422631787419D+02-0.5420506834117D+02-0.5418357079095D+02 +-0.5416182258226D+02-0.5413982105395D+02-0.5411756352505D+02-0.5409504729488D+02 +-0.5407226964317D+02-0.5404922783015D+02-0.5402591909670D+02-0.5400234066448D+02 +-0.5397848973603D+02-0.5395436349497D+02-0.5392995910612D+02-0.5390527371568D+02 +-0.5388030445141D+02-0.5385504842279D+02-0.5382950272121D+02-0.5380366442022D+02 +-0.5377753057564D+02-0.5375109822589D+02-0.5372436439211D+02-0.5369732607848D+02 +-0.5366998027241D+02-0.5364232394478D+02-0.5361435405025D+02-0.5358606752751D+02 +-0.5355746129950D+02-0.5352853227379D+02-0.5349927734280D+02-0.5346969338412D+02 +-0.5343977726083D+02-0.5340952582182D+02-0.5337893590209D+02-0.5334800432310D+02 +-0.5331672789310D+02-0.5328510340749D+02-0.5325312764917D+02-0.5322079738887D+02 +-0.5318810938556D+02-0.5315506038680D+02-0.5312164712911D+02-0.5308786633837D+02 +-0.5305371473019D+02-0.5301918901033D+02-0.5298428587506D+02-0.5294900201159D+02 +-0.5291333409845D+02-0.5287727880592D+02-0.5284083279641D+02-0.5280399272489D+02 +-0.5276675523931D+02-0.5272911698097D+02-0.5269107458497D+02-0.5265262468062D+02 +-0.5261376389181D+02-0.5257448883746D+02-0.5253479613189D+02-0.5249468238525D+02 +-0.5245414420391D+02-0.5241317819081D+02-0.5237178094590D+02-0.5232994906648D+02 +-0.5228767914760D+02-0.5224496778239D+02-0.5220181156242D+02-0.5215820707808D+02 +-0.5211415091886D+02-0.5206963967367D+02-0.5202466993120D+02-0.5197923828015D+02 +-0.5193334130954D+02-0.5188697560897D+02-0.5184013776887D+02-0.5179282438067D+02 +-0.5174503203712D+02-0.5169675733235D+02-0.5164799686214D+02-0.5159874722402D+02 +-0.5154900501742D+02-0.5149876684372D+02-0.5144802930640D+02-0.5139678901105D+02 +-0.5134504256542D+02-0.5129278657941D+02-0.5124001766505D+02-0.5118673243645D+02 +-0.5113292750975D+02-0.5107859950299D+02-0.5102374503596D+02-0.5096836073009D+02 +-0.5091244320823D+02-0.5085598909444D+02-0.5079899501375D+02-0.5074145759189D+02 +-0.5068337345498D+02-0.5062473922922D+02-0.5056555154053D+02-0.5050580701416D+02 +-0.5044550227434D+02-0.5038463394377D+02-0.5032319864328D+02-0.5026119299126D+02 +-0.5019861360325D+02-0.5013545709143D+02-0.5007172006407D+02-0.5000739912504D+02 +-0.4994249087326D+02-0.4987699190218D+02-0.4981089879922D+02-0.4974420814526D+02 +-0.4967691651406D+02-0.4960902047178D+02-0.4954051657647D+02-0.4947140137754D+02 +-0.4940167141535D+02-0.4933132322073D+02-0.4926035331460D+02-0.4918875820762D+02 +-0.4911653439986D+02-0.4904367838057D+02-0.4897018662796D+02-0.4889605560912D+02 +-0.4882128177991D+02-0.4874586158508D+02-0.4866979145833D+02-0.4859306782261D+02 +-0.4851568709042D+02-0.4843764566431D+02-0.4835893993747D+02-0.4827956629445D+02 +-0.4819952111207D+02-0.4811880076045D+02-0.4803740160422D+02-0.4795532000391D+02 +-0.4787255231750D+02-0.4778909490222D+02-0.4770494411649D+02-0.4762009632212D+02 +-0.4753454788668D+02-0.4744829518615D+02-0.4736133460774D+02-0.4727366255300D+02 +-0.4718527544117D+02-0.4709616971270D+02-0.4700634183309D+02-0.4691578829697D+02 +-0.4682450563237D+02-0.4673249040525D+02-0.4663973922431D+02-0.4654624874593D+02 +-0.4645201567939D+02-0.4635703679226D+02-0.4626130891597D+02-0.4616482895150D+02 +-0.4606759387530D+02-0.4596960074519D+02-0.4587084670639D+02-0.4577132899763D+02 +-0.4567104495712D+02-0.4556999202861D+02-0.4546816776726D+02-0.4536556984539D+02 +-0.4526219605798D+02-0.4515804432797D+02-0.4505311271112D+02-0.4494739940055D+02 +-0.4484090273073D+02-0.4473362118100D+02-0.4462555337840D+02-0.4451669809982D+02 +-0.4440705427338D+02-0.4429662097898D+02-0.4418539744796D+02-0.4407338306170D+02 +-0.4396057734934D+02-0.4384697998428D+02-0.4373259077969D+02-0.4361740968280D+02 +-0.4350143676811D+02-0.4338467222942D+02-0.4326711637078D+02-0.4314876959628D+02 +-0.4302963239898D+02-0.4290970534872D+02-0.4278898907923D+02-0.4266748427447D+02 +-0.4254519165446D+02-0.4242211196062D+02-0.4229824594098D+02-0.4217359433537D+02 +-0.4204815786074D+02-0.4192193719700D+02-0.4179493297349D+02-0.4166714575631D+02 +-0.4153857603689D+02-0.4140922422178D+02-0.4127909062423D+02-0.4114817545739D+02 +-0.4101647882960D+02-0.4088400074182D+02-0.4075074108732D+02-0.4061669965378D+02 +-0.4048187612789D+02-0.4034627010235D+02-0.4020988108549D+02-0.4007270851328D+02 +-0.3993475176372D+02-0.3979601017351D+02-0.3965648305691D+02-0.3951616972641D+02 +-0.3937506951531D+02-0.3923318180167D+02-0.3909050603366D+02-0.3894704175582D+02 +-0.3880278863608D+02-0.3865774649330D+02-0.3851191532486D+02-0.3836529533426D+02 +-0.3821788695820D+02-0.3806969089315D+02-0.3792070812085D+02-0.3777093993278D+02 +-0.3762038795316D+02-0.3746905416038D+02-0.3731694090664D+02-0.3716405093567D+02 +-0.3701038739821D+02-0.3685595386541D+02-0.3670075433978D+02-0.3654479326368D+02 +-0.3638807552533D+02-0.3623060646226D+02-0.3607239186210D+02-0.3591343796076D+02 +-0.3575375143797D+02-0.3559333941025D+02-0.3543220942120D+02-0.3527036942933D+02 +-0.3510782779329D+02-0.3494459325477D+02-0.3478067491896D+02-0.3461608223282D+02 +-0.3445082496111D+02-0.3428491316044D+02-0.3411835715132D+02-0.3395116748843D+02 +-0.3378335492927D+02-0.3361493040123D+02-0.3344590496733D+02-0.3327628979077D+02 +-0.3310609609847D+02-0.3293533514379D+02-0.3276401816857D+02-0.3259215636477D+02 +-0.3241976083588D+02-0.3224684255835D+02-0.3207341234311D+02-0.3189948079774D+02 +-0.3172505828912D+02-0.3155015490716D+02-0.3137478042968D+02-0.3119894428864D+02 +-0.3102265553826D+02-0.3084592282492D+02-0.3066875435948D+02-0.3049115789199D+02 +-0.3031314068928D+02-0.3013470951560D+02-0.2995587061664D+02-0.2977662970714D+02 +-0.2959699196244D+02-0.2941696201419D+02-0.2923654395050D+02-0.2905574132074D+02 +-0.2887455714526D+02-0.2869299393034D+02-0.2851105368829D+02-0.2832873796329D+02 +-0.2814604786272D+02-0.2796298409437D+02-0.2777954700954D+02-0.2759573665199D+02 +-0.2741155281284D+02-0.2722699509126D+02-0.2704206296094D+02-0.2685675584195D+02 +-0.2667107317787D+02-0.2648501451766D+02-0.2629857960192D+02-0.2611176845276D+02 +-0.2592458146669D+02-0.2573701950955D+02-0.2554908401251D+02-0.2536077706788D+02 +-0.2517210152349D+02-0.2498306107396D+02-0.2479366034734D+02-0.2460390498514D+02 +-0.2441380171380D+02-0.2422335840547D+02-0.2403258412594D+02-0.2384148916732D+02 +-0.2365008506345D+02-0.2345838458563D+02-0.2326640171691D+02-0.2307415160308D+02 +-0.2288165047910D+02-0.2268891557015D+02-0.2249596496711D+02-0.2230281747700D+02 +-0.2210949244978D+02-0.2191600958395D+02-0.2172238871405D+02-0.2152864958458D+02 +-0.2133481161543D+02-0.2114089366494D+02-0.2094691379729D+02-0.2075288906142D+02 +-0.2055883528863D+02-0.2036476691627D+02-0.2017069684387D+02-0.1997663632772D+02 +-0.1978259491844D+02-0.1958858044485D+02-0.1939459904582D+02-0.1920065525004D+02 +-0.1900675210215D+02-0.1881289133185D+02-0.1861907356137D+02-0.1842529854548D+02 +-0.1823156543727D+02-0.1803787307258D+02-0.1784422026552D+02-0.1765060610781D+02 +-0.1745703026491D+02-0.1726349326262D+02-0.1706999675839D+02-0.1687654379275D+02 +-0.1668313901695D+02-0.1648978889391D+02-0.1629650187050D+02-0.1610328852001D+02 +-0.1591016165443D+02-0.1571713640663D+02-0.1552423028343D+02-0.1533146319057D+02 +-0.1513885743128D+02-0.1494643768008D+02-0.1475423093391D+02-0.1456226644259D+02 +-0.1437057562058D+02-0.1417919194227D+02-0.1398815082285D+02-0.1379748948648D+02 +-0.1360724682404D+02-0.1341746324187D+02-0.1322818050340D+02-0.1303944156522D+02 +-0.1285129040899D+02-0.1266377187058D+02-0.1247693146781D+02-0.1229081522770D+02 +-0.1210546951464D+02-0.1192094086015D+02-0.1173727579538D+02-0.1155452068701D+02 +-0.1137272157743D+02-0.1119192402976D+02-0.1101217297855D+02-0.1083351258641D+02 +-0.1065598610742D+02-0.1047963575747D+02-0.1030450259220D+02-0.1013062639265D+02 +-0.9958045559027D+01-0.9786797012947D+01-0.9616916108108D+01-0.9448436549776D+01 +-0.9281390323095D+01-0.9115807630320D+01-0.8951716837006D+01-0.8789144427146D+01 +-0.8628114967225D+01-0.8468651079086D+01-0.8310773421529D+01-0.8154500680455D+01 +-0.7999849567409D+01-0.7846834826286D+01-0.7695469247979D+01-0.7545763692692D+01 +-0.7397727119626D+01-0.7251366623738D+01-0.7106687479220D+01-0.6963693189354D+01 +-0.6822385542373D+01-0.6682764672930D+01-0.6544829128782D+01-0.6408575942279D+01 +-0.6274000706223D+01-0.6141097653681D+01-0.6009859741302D+01-0.5880278735698D+01 +-0.5752345302452D+01-0.5626049097293D+01-0.5501378858997D+01-0.5378322503566D+01 +-0.5256867219233D+01-0.5136999561867D+01-0.5018705550316D+01-0.4901970761285D+01 +-0.4786780423295D+01-0.4673119509331D+01-0.4560972827751D+01-0.4450325111061D+01 +-0.4341161102183D+01-0.4233465637811D+01-0.4127223728523D+01-0.4022420635285D+01 +-0.3919041942014D+01-0.3817073623910D+01-0.3716502111247D+01-0.3617314348377D+01 +-0.3519497847701D+01-0.3423040738415D+01-0.3327931809855D+01-0.3234160549325D+01 +-0.3141717174321D+01-0.3050592659127D+01-0.2960778755807D+01-0.2872268009686D+01 +-0.2785053769470D+01-0.2699130192236D+01-0.2614492243592D+01-0.2531135693396D+01 +-0.2449057107481D+01-0.2368253835949D+01-0.2288723998647D+01-0.2210466468527D+01 +-0.2133480853666D+01-0.2057767478780D+01-0.1983327367117D+01-0.1910162223654D+01 +-0.1838274420553D+01-0.1767666985813D+01-0.1698343596074D+01-0.1630308574461D+01 +-0.1563566894331D+01-0.1498124189676D+01-0.1433986772874D+01-0.1371161660353D+01 +-0.1309656606594D+01-0.1249480146804D+01-0.1190641648396D+01-0.1133151371320D+01 +-0.1077020537114D+01-0.1022261406430D+01-0.9688873646495D+00-0.9169130151369D+00 +-0.8663542795315D+00-0.8172285044658D+00-0.7695545740174D+00-0.7233530271894D+00 +-0.6786461797052D+00-0.6354582494212D+00-0.5938154846919D+00-0.5537462950694D+00 +-0.5152813837800D+00-0.4784538814878D+00-0.4432994809303D+00-0.4098565720878D+00 +-0.3781663776222D+00-0.3482730883967D+00-0.3202239989520D+00-0.2940696428732D+00 +-0.2698639280459D+00-0.2476640495013D+00 + 0.0000000000000D+00 + 1019 0.4717083696126D+01 + 0.2822905220422D-04 0.2889304065820D-04 0.2957264396362D-04 0.3026822920821D-04 + 0.3098017210502D-04 0.3170885719496D-04 0.3245467805402D-04 0.3321803750543D-04 + 0.3399934783670D-04 0.3479903102187D-04 0.3561751894883D-04 0.3645525365210D-04 + 0.3731268755102D-04 0.3819028369345D-04 0.3908851600531D-04 0.4000786954587D-04 + 0.4094884076908D-04 0.4191193779102D-04 0.4289768066355D-04 0.4390660165448D-04 + 0.4493924553425D-04 0.4599616986931D-04 0.4707794532239D-04 0.4818515595985D-04 + 0.4931839956615D-04 0.5047828796579D-04 0.5166544735265D-04 0.5288051862722D-04 + 0.5412415774157D-04 0.5539703605252D-04 0.5669984068299D-04 0.5803327489189D-04 + 0.5939805845262D-04 0.6079492804046D-04 0.6222463762903D-04 0.6368795889602D-04 + 0.6518568163844D-04 0.6671861419757D-04 0.6828758389387D-04 0.6989343747210D-04 + 0.7153704155679D-04 0.7321928311845D-04 0.7494106995063D-04 0.7670333115821D-04 + 0.7850701765704D-04 0.8035310268533D-04 0.8224258232698D-04 0.8417647604719D-04 + 0.8615582724055D-04 0.8818170379200D-04 0.9025519865087D-04 0.9237743041838D-04 + 0.9454954394889D-04 0.9677271096518D-04 0.9904813068811D-04 0.1013770304811D-03 + 0.1037606665095D-03 0.1062003244157D-03 0.1086973200094D-03 0.1112529999750D-03 + 0.1138687425945D-03 0.1165459584879D-03 0.1192860913707D-03 0.1220906188294D-03 + 0.1249610531146D-03 0.1278989419531D-03 0.1309058693786D-03 0.1339834565822D-03 + 0.1371333627824D-03 0.1403572861159D-03 0.1436569645484D-03 0.1470341768075D-03 + 0.1504907433372D-03 0.1540285272741D-03 0.1576494354471D-03 0.1613554194002D-03 + 0.1651484764392D-03 0.1690306507024D-03 0.1730040342571D-03 0.1770707682211D-03 + 0.1812330439104D-03 0.1854931040141D-03 0.1898532437962D-03 0.1943158123256D-03 + 0.1988832137349D-03 0.2035579085088D-03 0.2083424148017D-03 0.2132393097870D-03 + 0.2182512310372D-03 0.2233808779365D-03 0.2286310131262D-03 0.2340044639837D-03 + 0.2395041241363D-03 0.2451329550099D-03 0.2508939874141D-03 0.2567903231636D-03 + 0.2628251367386D-03 0.2690016769822D-03 0.2753232688391D-03 0.2817933151331D-03 + 0.2884152983876D-03 0.2951927826869D-03 0.3021294155822D-03 0.3092289300408D-03 + 0.3164951464419D-03 0.3239319746173D-03 0.3315434159412D-03 0.3393335654671D-03 + 0.3473066141158D-03 0.3554668509131D-03 0.3638186652800D-03 0.3723665493767D-03 + 0.3811151004996D-03 0.3900690235359D-03 0.3992331334737D-03 0.4086123579709D-03 + 0.4182117399844D-03 0.4280364404591D-03 0.4380917410806D-03 0.4483830470911D-03 + 0.4589158901706D-03 0.4696959313855D-03 0.4807289642050D-03 0.4920209175883D-03 + 0.5035778591424D-03 0.5154059983538D-03 0.5275116898952D-03 0.5399014370082D-03 + 0.5525818949656D-03 0.5655598746124D-03 0.5788423459903D-03 0.5924364420451D-03 + 0.6063494624208D-03 0.6205888773407D-03 0.6351623315796D-03 0.6500776485262D-03 + 0.6653428343414D-03 0.6809660822115D-03 0.6969557767005D-03 0.7133204982024D-03 + 0.7300690274976D-03 0.7472103504132D-03 0.7647536625921D-03 0.7827083743722D-03 + 0.8010841157777D-03 0.8198907416263D-03 0.8391383367545D-03 0.8588372213627D-03 + 0.8789979564844D-03 0.8996313495817D-03 0.9207484602695D-03 0.9423606061718D-03 + 0.9644793689133D-03 0.9871166002490D-03 0.1010284428335D-02 0.1033995264145D-02 + 0.1058261808030D-02 0.1083097056439D-02 0.1108514308781D-02 0.1134527174457D-02 + 0.1161149580048D-02 0.1188395776668D-02 0.1216280347488D-02 0.1244818215432D-02 + 0.1274024651053D-02 0.1303915280584D-02 0.1334506094178D-02 0.1365813454341D-02 + 0.1397854104547D-02 0.1430645178063D-02 0.1464204206972D-02 0.1498549131400D-02 + 0.1533698308957D-02 0.1569670524398D-02 0.1606484999500D-02 0.1644161403165D-02 + 0.1682719861761D-02 0.1722180969693D-02 0.1762565800220D-02 0.1803895916517D-02 + 0.1846193382990D-02 0.1889480776854D-02 0.1933781199968D-02 0.1979118290949D-02 + 0.2025516237555D-02 0.2072999789359D-02 0.2121594270701D-02 0.2171325593946D-02 + 0.2222220273040D-02 0.2274305437376D-02 0.2327608845973D-02 0.2382158901981D-02 + 0.2437984667516D-02 0.2495115878834D-02 0.2553582961846D-02 0.2613417047988D-02 + 0.2674649990452D-02 0.2737314380790D-02 0.2801443565884D-02 0.2867071665313D-02 + 0.2934233589108D-02 0.3002965055909D-02 0.3073302611539D-02 0.3145283647991D-02 + 0.3218946422853D-02 0.3294330079167D-02 0.3371474665742D-02 0.3450421157918D-02 + 0.3531211478812D-02 0.3613888521034D-02 0.3698496168895D-02 0.3785079321121D-02 + 0.3873683914072D-02 0.3964356945494D-02 0.4057146498796D-02 0.4152101767879D-02 + 0.4249273082526D-02 0.4348711934358D-02 0.4450471003378D-02 0.4554604185107D-02 + 0.4661166618332D-02 0.4770214713480D-02 0.4881806181620D-02 0.4996000064124D-02 + 0.5112856762985D-02 0.5232438071820D-02 0.5354807207563D-02 0.5480028842865D-02 + 0.5608169139224D-02 0.5739295780850D-02 0.5873478009283D-02 0.6010786658792D-02 + 0.6151294192554D-02 0.6295074739644D-02 0.6442204132845D-02 0.6592759947299D-02 + 0.6746821540020D-02 0.6904470090278D-02 0.7065788640890D-02 0.7230862140411D-02 + 0.7399777486274D-02 0.7572623568873D-02 0.7749491316634D-02 0.7930473742069D-02 + 0.8115665988856D-02 0.8305165379950D-02 0.8499071466766D-02 0.8697486079432D-02 + 0.8900513378157D-02 0.9108259905724D-02 0.9320834641139D-02 0.9538349054458D-02 + 0.9760917162809D-02 0.9988655587651D-02 0.1022168361328D-01 0.1046012324662D-01 + 0.1070409927831D-01 0.1095373934513D-01 0.1120917399380D-01 0.1147053674614D-01 + 0.1173796416567D-01 0.1201159592567D-01 0.1229157487867D-01 0.1257804712749D-01 + 0.1287116209781D-01 0.1317107261230D-01 0.1347793496636D-01 0.1379190900549D-01 + 0.1411315820435D-01 0.1444184974747D-01 0.1477815461176D-01 0.1512224765076D-01 + 0.1547430768070D-01 0.1583451756840D-01 0.1620306432107D-01 0.1658013917802D-01 + 0.1696593770432D-01 0.1736065988647D-01 0.1776451023010D-01 0.1817769785976D-01 + 0.1860043662078D-01 0.1903294518340D-01 0.1947544714898D-01 0.1992817115851D-01 + 0.2039135100347D-01 0.2086522573888D-01 0.2135003979890D-01 0.2184604311473D-01 + 0.2235349123506D-01 0.2287264544901D-01 0.2340377291164D-01 0.2394714677210D-01 + 0.2450304630442D-01 0.2507175704110D-01 0.2565357090933D-01 0.2624878637023D-01 + 0.2685770856079D-01 0.2748064943882D-01 0.2811792793097D-01 0.2876987008361D-01 + 0.2943680921701D-01 0.3011908608255D-01 0.3081704902317D-01 0.3153105413717D-01 + 0.3226146544526D-01 0.3300865506103D-01 0.3377300336495D-01 0.3455489918178D-01 + 0.3535473996166D-01 0.3617293196481D-01 0.3700989044996D-01 0.3786603986655D-01 + 0.3874181405077D-01 0.3963765642559D-01 0.4055402020463D-01 0.4149136860028D-01 + 0.4245017503575D-01 0.4343092336145D-01 0.4443410807560D-01 0.4546023454915D-01 + 0.4650981925515D-01 0.4758339000262D-01 0.4868148617492D-01 0.4980465897284D-01 + 0.5095347166233D-01 0.5212849982707D-01 0.5333033162594D-01 0.5455956805532D-01 + 0.5581682321655D-01 0.5710272458843D-01 0.5841791330491D-01 0.5976304443808D-01 + 0.6113878728647D-01 0.6254582566883D-01 0.6398485822337D-01 0.6545659871266D-01 + 0.6696177633414D-01 0.6850113603651D-01 0.7007543884180D-01 0.7168546217357D-01 + 0.7333200019098D-01 0.7501586412902D-01 0.7673788264495D-01 0.7849890217102D-01 + 0.8029978727345D-01 0.8214142101804D-01 0.8402470534211D-01 0.8595056143326D-01 + 0.8791993011463D-01 0.8993377223713D-01 0.9199306907843D-01 0.9409882274896D-01 + 0.9625205660489D-01 0.9845381566837D-01 0.1007051670548D+00 0.1030072004074D+00 + 0.1053610283397D+00 0.1077677868841D+00 0.1102286359499D+00 0.1127447597872D+00 + 0.1153173674594D+00 0.1179476933234D+00 0.1206369975171D+00 0.1233865664558D+00 + 0.1261977133354D+00 0.1290717786444D+00 0.1320101306839D+00 0.1350141660957D+00 + 0.1380853103985D+00 0.1412250185328D+00 0.1444347754134D+00 0.1477160964914D+00 + 0.1510705283235D+00 0.1544996491509D+00 0.1580050694857D+00 0.1615884327066D+00 + 0.1652514156630D+00 0.1689957292880D+00 0.1728231192192D+00 0.1767353664298D+00 + 0.1807342878667D+00 0.1848217370983D+00 0.1889996049712D+00 0.1932698202750D+00 + 0.1976343504163D+00 0.2020952021009D+00 0.2066544220260D+00 0.2113140975792D+00 + 0.2160763575477D+00 0.2209433728356D+00 0.2259173571894D+00 0.2310005679329D+00 + 0.2361953067095D+00 0.2415039202338D+00 0.2469288010509D+00 0.2524723883044D+00 + 0.2581371685119D+00 0.2639256763491D+00 0.2698404954414D+00 0.2758842591634D+00 + 0.2820596514458D+00 0.2883694075903D+00 0.2948163150908D+00 0.3014032144623D+00 + 0.3081330000770D+00 0.3150086210059D+00 0.3220330818682D+00 0.3292094436858D+00 + 0.3365408247443D+00 0.3440304014594D+00 0.3516814092484D+00 0.3594971434075D+00 + 0.3674809599929D+00 0.3756362767066D+00 0.3839665737864D+00 0.3924753948986D+00 + 0.4011663480350D+00 0.4100431064119D+00 0.4191094093709D+00 0.4283690632825D+00 + 0.4378259424502D+00 0.4474839900153D+00 0.4573472188619D+00 0.4674197125219D+00 + 0.4777056260780D+00 0.4882091870652D+00 0.4989346963709D+00 0.5098865291302D+00 + 0.5210691356182D+00 0.5324870421380D+00 0.5441448519020D+00 0.5560472459083D+00 + 0.5681989838085D+00 0.5806049047685D+00 0.5932699283193D+00 0.6061990551983D+00 + 0.6193973681794D+00 0.6328700328903D+00 0.6466222986172D+00 0.6606594990947D+00 + 0.6749870532795D+00 0.6896104661081D+00 0.7045353292353D+00 0.7197673217538D+00 + 0.7353122108919D+00 0.7511758526895D+00 0.7673641926498D+00 0.7838832663655D+00 + 0.8007392001176D+00 0.8179382114455D+00 0.8354866096871D+00 0.8533907964854D+00 + 0.8716572662621D+00 0.8902926066542D+00 0.9093034989133D+00 0.9286967182645D+00 + 0.9484791342227D+00 0.9686577108655D+00 0.9892395070593D+00 0.1010231676636D+01 + 0.1031641468518D+01 0.1053476226794D+01 0.1075743390730D+01 0.1098450494732D+01 + 0.1121605168240D+01 0.1145215135559D+01 0.1169288215628D+01 0.1193832321713D+01 + 0.1218855461030D+01 0.1244365734298D+01 0.1270371335200D+01 0.1296880549776D+01 + 0.1323901755725D+01 0.1351443421614D+01 0.1379514106006D+01 0.1408122456482D+01 + 0.1437277208571D+01 0.1466987184574D+01 0.1497261292282D+01 0.1528108523589D+01 + 0.1559537952982D+01 0.1591558735919D+01 0.1624180107089D+01 0.1657411378532D+01 + 0.1691261937647D+01 0.1725741245050D+01 0.1760858832301D+01 0.1796624299488D+01 + 0.1833047312659D+01 0.1870137601103D+01 0.1907904954477D+01 0.1946359219770D+01 + 0.1985510298095D+01 0.2025368141320D+01 0.2065942748513D+01 0.2107244162211D+01 + 0.2149282464505D+01 0.2192067772925D+01 0.2235610236140D+01 0.2279920029446D+01 + 0.2325007350058D+01 0.2370882412179D+01 0.2417555441862D+01 0.2465036671645D+01 + 0.2513336334955D+01 0.2562464660289D+01 0.2612431865148D+01 0.2663248149729D+01 + 0.2714923690377D+01 0.2767468632769D+01 0.2820893084852D+01 0.2875207109509D+01 + 0.2930420716961D+01 0.2986543856890D+01 0.3043586410284D+01 0.3101558181002D+01 + 0.3160468887046D+01 0.3220328151540D+01 0.3281145493409D+01 0.3342930317763D+01 + 0.3405691905963D+01 0.3469439405388D+01 0.3534181818874D+01 0.3599927993847D+01 + 0.3666686611124D+01 0.3734466173392D+01 0.3803274993364D+01 0.3873121181591D+01 + 0.3944012633951D+01 0.4015957018796D+01 0.4088961763764D+01 0.4163034042250D+01 + 0.4238180759535D+01 0.4314408538572D+01 0.4391723705438D+01 0.4470132274434D+01 + 0.4549639932848D+01 0.4630252025379D+01 0.4711973538219D+01 0.4794809082801D+01 + 0.4878762879210D+01 0.4963838739264D+01 0.5050040049274D+01 0.5137369752468D+01 + 0.5225830331113D+01 0.5315423788316D+01 0.5406151629524D+01 0.5498014843729D+01 + 0.5591013884378D+01 0.5685148650014D+01 0.5780418464637D+01 0.5876822057818D+01 + 0.5974357544556D+01 0.6073022404910D+01 0.6172813463411D+01 0.6273726868265D+01 + 0.6375758070378D+01 0.6478901802200D+01 0.6583152056427D+01 0.6688502064566D+01 + 0.6794944275391D+01 0.6902470333310D+01 0.7011071056667D+01 0.7120736416010D+01 + 0.7231455512336D+01 0.7343216555357D+01 0.7456006841813D+01 0.7569812733849D+01 + 0.7684619637512D+01 0.7800411981379D+01 0.7917173195367D+01 0.8034885689753D+01 + 0.8153530834449D+01 0.8273088938569D+01 0.8393539230326D+01 0.8514859837314D+01 + 0.8637027767209D+01 0.8760018888941D+01 0.8883807914385D+01 0.9008368380622D+01 + 0.9133672632827D+01 0.9259691807821D+01 0.9386395818367D+01 0.9513753338252D+01 + 0.9641731788206D+01 0.9770297322751D+01 0.9899414817999D+01 0.1002904786050D+02 + 0.1015915873719D+02 0.1028970842649D+02 0.1042065659068D+02 0.1055196156952D+02 + 0.1068358037532D+02 0.1081546868938D+02 0.1094758086007D+02 0.1107986990236D+02 + 0.1121228749915D+02 0.1134478400430D+02 0.1147730844752D+02 0.1160980854110D+02 + 0.1174223068874D+02 0.1187451999634D+02 0.1200662028502D+02 0.1213847410631D+02 + 0.1227002275972D+02 0.1240120631259D+02 0.1253196362255D+02 0.1266223236240D+02 + 0.1279194904771D+02 0.1292104906705D+02 0.1304946671507D+02 0.1317713522837D+02 + 0.1330398682438D+02 0.1342995274312D+02 0.1355496329215D+02 0.1367894789459D+02 + 0.1380183514033D+02 0.1392355284052D+02 0.1404402808537D+02 0.1416318730533D+02 + 0.1428095633565D+02 0.1439726048440D+02 0.1451202460404D+02 0.1462517316648D+02 + 0.1473663034167D+02 0.1484632007986D+02 0.1495416619737D+02 0.1506009246602D+02 + 0.1516402270613D+02 0.1526588088319D+02 0.1536559120801D+02 0.1546307824053D+02 + 0.1555826699713D+02 0.1565108306143D+02 0.1574145269854D+02 0.1582930297267D+02 + 0.1591456186808D+02 0.1599715841326D+02 0.1607702280817D+02 0.1615408655464D+02 + 0.1622828258955D+02 0.1629954542085D+02 0.1636781126625D+02 0.1643301819427D+02 + 0.1649510626773D+02 0.1655401768930D+02 0.1660969694894D+02 0.1666209097315D+02 + 0.1671114927559D+02 0.1675682410902D+02 0.1679907061818D+02 0.1683784699343D+02 + 0.1687311462472D+02 0.1690483825579D+02 0.1693298613804D+02 0.1695753018403D+02 + 0.1697844611990D+02 0.1699571363671D+02 0.1700931654003D+02 0.1701924289759D+02 + 0.1702548518446D+02 0.1702804042535D+02 0.1702691033371D+02 0.1702210144695D+02 + 0.1701362525766D+02 0.1700149833994D+02 0.1698574247078D+02 0.1696638474565D+02 + 0.1694345768800D+02 0.1691699935213D+02 0.1688705341886D+02 0.1685366928347D+02 + 0.1681690213549D+02 0.1677681302967D+02 0.1673346894770D+02 0.1668694285012D+02 + 0.1663731371782D+02 0.1658466658277D+02 0.1652909254718D+02 0.1647068879094D+02 + 0.1640955856644D+02 0.1634581118059D+02 0.1627956196336D+02 0.1621093222244D+02 + 0.1614004918357D+02 0.1606704591605D+02 0.1599206124311D+02 0.1591523963664D+02 + 0.1583673109597D+02 0.1575669101036D+02 0.1567528000492D+02 0.1559266376960D+02 + 0.1550901287107D+02 0.1542450254735D+02 0.1533931248491D+02 0.1525362657814D+02 + 0.1516763267127D+02 0.1508152228251D+02 0.1499549031056D+02 0.1490973472356D+02 + 0.1482445623058D+02 0.1473985793583D+02 0.1465614497589D+02 0.1457352414028D+02 + 0.1449220347561D+02 0.1441239187393D+02 0.1433429864561D+02 0.1425813307751D+02 + 0.1418410397681D+02 0.1411241920144D+02 0.1404328517784D+02 0.1397690640670D+02 + 0.1391348495785D+02 0.1385321995514D+02 0.1379630705236D+02 0.1374293790112D+02 + 0.1369329961279D+02 0.1364757421415D+02 0.1360593809949D+02 0.1356856147997D+02 + 0.1353560783157D+02 0.1350723334347D+02 0.1348358636810D+02 0.1346480687464D+02 + 0.1345102590764D+02 0.1344236505232D+02 0.1343893590851D+02 0.1344083957484D+02 + 0.1344816614503D+02 0.1346099421828D+02 0.1347939042540D+02 0.1350340897278D+02 + 0.1353309120597D+02 0.1356846519480D+02 0.1360954534209D+02 0.1365633201758D+02 + 0.1370881121930D+02 0.1376695426396D+02 0.1383071750836D+02 0.1390004210367D+02 + 0.1397485378414D+02 0.1405506269220D+02 0.1414056324144D+02 0.1423123401912D+02 + 0.1432693772972D+02 0.1442752118094D+02 0.1453281531358D+02 0.1464263527642D+02 + 0.1475678054730D+02 0.1487503510142D+02 0.1499716762781D+02 0.1512293179461D+02 + 0.1525206656392D+02 0.1538429655666D+02 0.1551933246776D+02 0.1565687153187D+02 + 0.1579659803967D+02 0.1593818390447D+02 0.1608128927900D+02 0.1622556322157D+02 + 0.1637064441131D+02 0.1651616191120D+02 0.1666173597809D+02 0.1680697891835D+02 + 0.1695149598774D+02 0.1709488633371D+02 0.1723674397850D+02 0.1737665884075D+02 + 0.1751421779358D+02 0.1764900575657D+02 0.1778060681912D+02 0.1790860539220D+02 + 0.1803258738575D+02 0.1815214140835D+02 0.1826685998585D+02 0.1837634079554D+02 + 0.1848018791211D+02 0.1857801306162D+02 0.1866943687952D+02 0.1875409016857D+02 + 0.1883161515267D+02 0.1890166672198D+02 0.1896391366520D+02 0.1901803988445D+02 + 0.1906374558812D+02 0.1910074845718D+02 0.1912878478041D+02 0.1914761055363D+02 + 0.1915700253863D+02 0.1915675927687D+02 0.1914670205356D+02 0.1912667580745D+02 + 0.1909654998194D+02 0.1905621931305D+02 0.1900560455010D+02 0.1894465310484D+02 + 0.1887333962512D+02 0.1879166648926D+02 0.1869966421757D+02 0.1859739179747D+02 + 0.1848493691927D+02 0.1836241611944D+02 0.1822997482895D+02 0.1808778732426D+02 + 0.1793605657890D+02 0.1777501401406D+02 0.1760491914670D+02 0.1742605913446D+02 + 0.1723874821651D+02 0.1704332705040D+02 0.1684016194511D+02 0.1662964399086D+02 + 0.1641218808699D+02 0.1618823186940D+02 0.1595823453954D+02 0.1572267559759D+02 + 0.1548205348276D+02 0.1523688412417D+02 0.1498769940622D+02 0.1473504555295D+02 + 0.1447948143629D+02 0.1422157681337D+02 0.1396191049895D+02 0.1370106847899D+02 + 0.1343964197217D+02 0.1317822544633D+02 0.1291741459732D+02 0.1265780429795D+02 + 0.1239998652538D+02 0.1214454827506D+02 0.1189206947003D+02 0.1164312087454D+02 + 0.1139826202075D+02 0.1115803915793D+02 0.1092298323335D+02 0.1069360791393D+02 + 0.1047040765827D+02 0.1025385584784D+02 0.1004440298668D+02 0.9842474978315D+01 + 0.9648471488531D+01 0.9462764402487D+01 0.9285696383562D+01 0.9117579542610D+01 + 0.8958694223664D+01 0.8809287913251D+01 0.8669574279281D+01 0.8539732345000D+01 + 0.8419905802854D+01 0.8310202472462D+01 0.8210693906193D+01 0.8121415145123D+01 + 0.8042364627399D+01 0.7973504250305D+01 0.7914759586509D+01 0.7866020254239D+01 + 0.7827140440310D+01 0.7797939574181D+01 0.7778203150401D+01 0.7767683696076D+01 + 0.7766101879191D+01 0.7773147752910D+01 0.7788482130224D+01 0.7811738082649D+01 + 0.7842522555957D+01 0.7880418095328D+01 0.7924984671660D+01 0.7975761600215D+01 + 0.8032269542264D+01 0.8094012579876D+01 0.8160480353611D+01 0.8231150252446D+01 + 0.8305489644993D+01 0.8382958140784D+01 0.8463009870227D+01 0.8545095771695D+01 + 0.8628665874201D+01 0.8713171564104D+01 0.8798067824410D+01 0.8882815435410D+01 + 0.8966883125662D+01 0.9049749662614D+01 0.9130905872628D+01 0.9209856580576D+01 + 0.9286122459755D+01 0.9359241783464D+01 0.9428772070232D+01 0.9494291615411D+01 + 0.9555400902606D+01 0.9611723889203D+01 0.9662909161105D+01 0.9708630952629D+01 + 0.9748590028412D+01 0.9782514425040D+01 0.9810160051033D+01 0.9831311144696D+01 + 0.9845780590219D+01 0.9853410093278D+01 0.9854070218224D+01 0.9847660289749D+01 + 0.9834108162671D+01 0.9813369864231D+01 0.9785429113934D+01 0.9750296726618D+01 + 0.9708009904977D+01 0.9658631428287D+01 0.9602248744509D+01 0.9538972973344D+01 + 0.9468937828113D+01 0.9392298464583D+01 0.9309230265072D+01 0.9219927566246D+01 + 0.9124602339109D+01 0.9023482829682D+01 0.8916812168780D+01 0.8804846959226D+01 + 0.8687855848615D+01 0.8566118095582D+01 0.8439922137218D+01 0.8309564165008D+01 + 0.8175346716309D+01 0.8037577288018D+01 0.7896566978700D+01 0.7752629164977D+01 + 0.7606078217607D+01 0.7457228262158D+01 0.7306391988763D+01 0.7153879514955D+01 + 0.6999997305096D+01 0.6845047149450D+01 0.6689325205489D+01 0.6533121103532D+01 + 0.6376717118388D+01 0.6220387408225D+01 0.6064397321456D+01 0.5909002772035D+01 + 0.5754449683166D+01 0.5600973499038D+01 0.5448798763889D+01 0.5298138767335D+01 + 0.5149195254631D+01 0.5002158200226D+01 0.4857205642751D+01 0.4714503579299D+01 + 0.4574205916718D+01 0.4436454477387D+01 0.4301379056834D+01 0.4169097530399D+01 + 0.4039716006044D+01 0.3913329020311D+01 0.3790019774357D+01 0.3669860406979D+01 + 0.3552912301468D+01 0.3439226423147D+01 0.3328843684463D+01 0.3221795334510D+01 + 0.3118103369910D+01 0.3017780964033D+01 0.2920832911607D+01 0.2827256085858D+01 + 0.2737039905395D+01 0.2650166808185D+01 0.2566612730049D+01 0.2486347585261D+01 + 0.2409335746934D+01 0.2335536525040D+01 0.2264904640019D+01 0.2197390690115D+01 + 0.2132941610696D+01 0.2071501123983D+01 0.2013010177747D+01 0.1957407371718D+01 + 0.1904629370560D+01 0.1854611302453D+01 0.1807287142453D+01 0.1762590079946D+01 + 0.1720452869667D+01 0.1680808165868D+01 0.1643588839388D+01 0.1608728277461D+01 + 0.1576160666249D+01 0.1545821256189D+01 0.1517646610345D+01 0.1491574836053D+01 + 0.1467545800248D+01 0.1445501328920D+01 0.1425385391232D+01 0.1407144268890D+01 + 0.1390726711404D+01 0.1376084077925D+01 0.1363170466350D+01 0.1351942830457D+01 + 0.1342361085779D+01 0.1334388204966D+01 0.1327990303358D+01 0.1323136715467D+01 + 0.1319800063007D+01 0.1317956315104D+01 0.1317584841210D+01 0.1318668457180D+01 + 0.1321193464890D+01 0.1325149685643D+01 0.1330530487491D+01 0.1337332806444D+01 + 0.1345557161395D+01 0.1355207662354D+01 0.1366292011405D+01 0.1378821495537D+01 + 0.1392810970232D+01 0.1408278278149D+01 0.1425359771691D+01 0.1444190648292D+01 + 0.1464793160347D+01 0.1487194690007D+01 0.1511427826231D+01 0.1537530458280D+01 + 0.1565545885720D+01 0.1595522945008D+01 0.1627516152658D+01 + 7 1019 + 1 0 -1 -600.92914 + 2 0 -1 -70.72762 + 2 1 1 -61.62006 + 2 1 -2 -60.33779 + 3 0 -1 -6.85259 + 3 1 1 -4.08398 + 3 1 -2 -3.92195 + 0.2785469948406D-04 0.2850989761226D-04 0.2918050388790D-04 0.2986688053863D-04 + 0.3056939830326D-04 0.3128843663162D-04 0.3202438388908D-04 0.3277763756579D-04 + 0.3354860449101D-04 0.3433770105225D-04 0.3514535341970D-04 0.3597199777588D-04 + 0.3681808055063D-04 0.3768405866170D-04 0.3857039976086D-04 0.3947758248589D-04 + 0.4040609671844D-04 0.4135644384787D-04 0.4232913704140D-04 0.4332470152045D-04 + 0.4434367484359D-04 0.4538660719602D-04 0.4645406168587D-04 0.4754661464746D-04 + 0.4866485595164D-04 0.4980938932344D-04 0.5098083266708D-04 0.5217981839867D-04 + 0.5340699378670D-04 0.5466302130048D-04 0.5594857896670D-04 0.5726436073447D-04 + 0.5861107684878D-04 0.5998945423273D-04 0.6140023687881D-04 0.6284418624921D-04 + 0.6432208168557D-04 0.6583472082835D-04 0.6738292004593D-04 0.6896751487386D-04 + 0.7058936046433D-04 0.7224933204614D-04 0.7394832539552D-04 0.7568725731789D-04 + 0.7746706614092D-04 0.7928871221918D-04 0.8115317845047D-04 0.8306147080440D-04 + 0.8501461886319D-04 0.8701367637523D-04 0.8905972182149D-04 0.9115385899529D-04 + 0.9329721759554D-04 0.9549095383390D-04 0.9773625105613D-04 0.1000343203780D-03 + 0.1023864013358D-03 0.1047937625530D-03 0.1072577024207D-03 0.1097795497962D-03 + 0.1123606647159D-03 0.1150024391264D-03 0.1177062976316D-03 0.1204736982579D-03 + 0.1233061332371D-03 0.1262051298076D-03 0.1291722510338D-03 0.1322090966461D-03 + 0.1353173038985D-03 0.1384985484482D-03 0.1417545452541D-03 0.1450870494977D-03 + 0.1484978575242D-03 0.1519888078065D-03 0.1555617819316D-03 0.1592187056094D-03 + 0.1629615497059D-03 0.1667923312999D-03 0.1707131147644D-03 0.1747260128738D-03 + 0.1788331879363D-03 0.1830368529529D-03 0.1873392728036D-03 0.1917427654613D-03 + 0.1962497032336D-03 0.2008625140339D-03 0.2055836826825D-03 0.2104157522371D-03 + 0.2153613253549D-03 0.2204230656869D-03 0.2256036993036D-03 0.2309060161547D-03 + 0.2363328715630D-03 0.2418871877523D-03 0.2475719554116D-03 0.2533902352953D-03 + 0.2593451598611D-03 0.2654399349456D-03 0.2716778414794D-03 0.2780622372415D-03 + 0.2845965586551D-03 0.2912843226253D-03 0.2981291284186D-03 0.3051346595875D-03 + 0.3123046859388D-03 0.3196430655483D-03 0.3271537468220D-03 0.3348407706058D-03 + 0.3427082723431D-03 0.3507604842842D-03 0.3590017377457D-03 0.3674364654231D-03 + 0.3760692037569D-03 0.3849045953538D-03 0.3939473914642D-03 0.4032024545169D-03 + 0.4126747607134D-03 0.4223694026816D-03 0.4322915921917D-03 0.4424466629351D-03 + 0.4528400733674D-03 0.4634774096178D-03 0.4743643884660D-03 0.4855068603879D-03 + 0.4969108126721D-03 0.5085823726089D-03 0.5205278107526D-03 0.5327535442603D-03 + 0.5452661403075D-03 0.5580723195830D-03 0.5711789598649D-03 0.5845930996791D-03 + 0.5983219420432D-03 0.6123728582965D-03 0.6267533920187D-03 0.6414712630399D-03 + 0.6565343715427D-03 0.6719508022598D-03 0.6877288287682D-03 0.7038769178830D-03 + 0.7204037341532D-03 0.7373181444605D-03 0.7546292227254D-03 0.7723462547211D-03 + 0.7904787429998D-03 0.8090364119316D-03 0.8280292128607D-03 0.8474673293800D-03 + 0.8673611827279D-03 0.8877214373095D-03 0.9085590063450D-03 0.9298850576490D-03 + 0.9517110195424D-03 0.9740485869007D-03 0.9969097273424D-03 0.1020306687559D-02 + 0.1044251999793D-02 0.1068758488459D-02 0.1093839276929D-02 0.1119507794460D-02 + 0.1145777783290D-02 0.1172663305896D-02 0.1200178752418D-02 0.1228338848251D-02 + 0.1257158661817D-02 0.1286653612512D-02 0.1316839478836D-02 0.1347732406709D-02 + 0.1379348917983D-02 0.1411705919139D-02 0.1444820710199D-02 0.1478710993823D-02 + 0.1513394884635D-02 0.1548890918745D-02 0.1585218063505D-02 0.1622395727472D-02 + 0.1660443770616D-02 0.1699382514747D-02 0.1739232754193D-02 0.1780015766714D-02 + 0.1821753324666D-02 0.1864467706427D-02 0.1908181708078D-02 0.1952918655349D-02 + 0.1998702415849D-02 0.2045557411560D-02 0.2093508631630D-02 0.2142581645446D-02 + 0.2192802616016D-02 0.2244198313648D-02 0.2296796129943D-02 0.2350624092111D-02 + 0.2405710877605D-02 0.2462085829094D-02 0.2519778969778D-02 0.2578821019043D-02 + 0.2639243408481D-02 0.2701078298268D-02 0.2764358593919D-02 0.2829117963415D-02 + 0.2895390854731D-02 0.2963212513750D-02 0.3032619002589D-02 0.3103647218338D-02 + 0.3176334912226D-02 0.3250720709219D-02 0.3326844128061D-02 0.3404745601768D-02 + 0.3484466498590D-02 0.3566049143437D-02 0.3649536839799D-02 0.3734973892157D-02 + 0.3822405628893D-02 0.3911878425729D-02 0.4003439729683D-02 0.4097138083571D-02 + 0.4193023151058D-02 0.4291145742273D-02 0.4391557839999D-02 0.4494312626454D-02 + 0.4599464510671D-02 0.4707069156490D-02 0.4817183511189D-02 0.4929865834738D-02 + 0.5045175729731D-02 0.5163174171964D-02 0.5283923541719D-02 0.5407487655733D-02 + 0.5533931799887D-02 0.5663322762626D-02 0.5795728869117D-02 0.5931220016182D-02 + 0.6069867707997D-02 0.6211745092591D-02 0.6356926999158D-02 0.6505489976198D-02 + 0.6657512330503D-02 0.6813074167014D-02 0.6972257429555D-02 0.7135145942476D-02 + 0.7301825453218D-02 0.7472383675814D-02 0.7646910335361D-02 0.7825497213470D-02 + 0.8008238194716D-02 0.8195229314124D-02 0.8386568805687D-02 0.8582357151965D-02 + 0.8782697134773D-02 0.8987693886973D-02 0.9197454945421D-02 0.9412090305061D-02 + 0.9631712474216D-02 0.9856436531081D-02 0.1008638018146D-01 0.1032166381776D-01 + 0.1056241057929D-01 0.1080874641382D-01 0.1106080014059D-01 0.1131870351456D-01 + 0.1158259129217D-01 0.1185260129847D-01 0.1212887449568D-01 0.1241155505336D-01 + 0.1270079041993D-01 0.1299673139589D-01 0.1329953220851D-01 0.1360935058821D-01 + 0.1392634784655D-01 0.1425068895590D-01 0.1458254263085D-01 0.1492208141131D-01 + 0.1526948174750D-01 0.1562492408662D-01 0.1598859296151D-01 0.1636067708113D-01 + 0.1674136942297D-01 0.1713086732749D-01 0.1752937259447D-01 0.1793709158156D-01 + 0.1835423530474D-01 0.1878101954106D-01 0.1921766493349D-01 0.1966439709798D-01 + 0.2012144673282D-01 0.2058904973028D-01 0.2106744729058D-01 0.2155688603831D-01 + 0.2205761814125D-01 0.2256990143168D-01 0.2309399953026D-01 0.2363018197247D-01 + 0.2417872433768D-01 0.2473990838093D-01 0.2531402216746D-01 0.2590136020997D-01 + 0.2650222360877D-01 0.2711692019482D-01 0.2774576467574D-01 0.2838907878477D-01 + 0.2904719143282D-01 0.2972043886368D-01 0.3040916481234D-01 0.3111372066657D-01 + 0.3183446563184D-01 0.3257176689949D-01 0.3332599981844D-01 0.3409754807025D-01 + 0.3488680384785D-01 0.3569416803777D-01 0.3652005040609D-01 0.3736486978808D-01 + 0.3822905428173D-01 0.3911304144500D-01 0.4001727849716D-01 0.4094222252402D-01 + 0.4188834068727D-01 0.4285611043798D-01 0.4384601973426D-01 0.4485856726328D-01 + 0.4589426266756D-01 0.4695362677574D-01 0.4803719183788D-01 0.4914550176524D-01 + 0.5027911237482D-01 0.5143859163859D-01 0.5262451993748D-01 0.5383749032032D-01 + 0.5507810876774D-01 0.5634699446102D-01 0.5764478005620D-01 0.5897211196327D-01 + 0.6032965063071D-01 0.6171807083536D-01 0.6313806197773D-01 0.6459032838288D-01 + 0.6607558960685D-01 0.6759458074882D-01 0.6914805276901D-01 0.7073677281249D-01 + 0.7236152453886D-01 0.7402310845803D-01 0.7572234227204D-01 0.7746006122315D-01 + 0.7923711844813D-01 0.8105438533895D-01 0.8291275190994D-01 0.8481312717146D-01 + 0.8675643951014D-01 0.8874363707591D-01 0.9077568817577D-01 0.9285358167436D-01 + 0.9497832740164D-01 0.9715095656743D-01 0.9937252218316D-01 0.1016440994908D+00 + 0.1039667863991D+00 0.1063417039270D+00 0.1087699966548D+00 0.1112528331826D+00 + 0.1137914065961D+00 0.1163869349408D+00 0.1190406617032D+00 0.1217538563001D+00 + 0.1245278145756D+00 0.1273638593065D+00 0.1302633407152D+00 0.1332276369907D+00 + 0.1362581548182D+00 0.1393563299164D+00 0.1425236275831D+00 0.1457615432496D+00 + 0.1490716030426D+00 0.1524553643553D+00 0.1559144164263D+00 0.1594503809276D+00 + 0.1630649125605D+00 0.1667596996605D+00 0.1705364648103D+00 0.1743969654622D+00 + 0.1783429945682D+00 0.1823763812192D+00 0.1864989912927D+00 0.1907127281095D+00 + 0.1950195330982D+00 0.1994213864695D+00 0.2039203078978D+00 0.2085183572123D+00 + 0.2132176350966D+00 0.2180202837962D+00 0.2229284878350D+00 0.2279444747402D+00 + 0.2330705157750D+00 0.2383089266807D+00 0.2436620684255D+00 0.2491323479628D+00 + 0.2547222189964D+00 0.2604341827547D+00 0.2662707887714D+00 0.2722346356749D+00 + 0.2783283719850D+00 0.2845546969161D+00 0.2909163611887D+00 0.2974161678473D+00 + 0.3040569730850D+00 0.3108416870752D+00 0.3177732748086D+00 0.3248547569377D+00 + 0.3320892106260D+00 0.3394797704033D+00 0.3470296290258D+00 0.3547420383422D+00 + 0.3626203101629D+00 0.3706678171348D+00 0.3788879936194D+00 0.3872843365743D+00 + 0.3958604064379D+00 0.4046198280174D+00 0.4135662913777D+00 0.4227035527333D+00 + 0.4320354353406D+00 0.4415658303911D+00 0.4512986979050D+00 0.4612380676239D+00 + 0.4713880399026D+00 0.4817527865991D+00 0.4923365519627D+00 0.5031436535179D+00 + 0.5141784829457D+00 0.5254455069594D+00 0.5369492681755D+00 0.5486943859781D+00 + 0.5606855573760D+00 0.5729275578526D+00 0.5854252422055D+00 0.5981835453774D+00 + 0.6112074832756D+00 0.6245021535788D+00 0.6380727365318D+00 0.6519244957251D+00 + 0.6660627788593D+00 0.6804930184930D+00 0.6952207327721D+00 0.7102515261402D+00 + 0.7255910900280D+00 0.7412452035208D+00 0.7572197340019D+00 0.7735206377712D+00 + 0.7901539606368D+00 0.8071258384784D+00 0.8244424977799D+00 0.8421102561313D+00 + 0.8601355226955D+00 0.8785247986406D+00 0.8972846775342D+00 0.9164218456981D+00 + 0.9359430825217D+00 0.9558552607316D+00 0.9761653466152D+00 0.9968804001960D+00 + 0.1018007575359D+01 0.1039554119923D+01 0.1061527375657D+01 0.1083934778239D+01 + 0.1106783857155D+01 0.1130082235534D+01 0.1153837629920D+01 0.1178057849966D+01 + 0.1202750798072D+01 0.1227924468933D+01 0.1253586949019D+01 0.1279746415969D+01 + 0.1306411137905D+01 0.1333589472658D+01 0.1361289866898D+01 0.1389520855179D+01 + 0.1418291058879D+01 0.1447609185042D+01 0.1477484025114D+01 0.1507924453573D+01 + 0.1538939426443D+01 0.1570537979692D+01 0.1602729227515D+01 0.1635522360484D+01 + 0.1668926643575D+01 0.1702951414064D+01 0.1737606079279D+01 0.1772900114215D+01 + 0.1808843059006D+01 0.1845444516241D+01 0.1882714148124D+01 0.1920661673484D+01 + 0.1959296864608D+01 0.1998629543915D+01 0.2038669580452D+01 0.2079426886209D+01 + 0.2120911412251D+01 0.2163133144669D+01 0.2206102100325D+01 0.2249828322406D+01 + 0.2294321875771D+01 0.2339592842093D+01 0.2385651314777D+01 0.2432507393674D+01 + 0.2480171179551D+01 0.2528652768350D+01 0.2577962245199D+01 0.2628109678186D+01 + 0.2679105111893D+01 0.2730958560667D+01 0.2783680001651D+01 0.2837279367540D+01 + 0.2891766539077D+01 0.2947151337282D+01 0.3003443515395D+01 0.3060652750548D+01 + 0.3118788635144D+01 0.3177860667952D+01 0.3237878244901D+01 0.3298850649581D+01 + 0.3360787043433D+01 0.3423696455642D+01 0.3487587772706D+01 0.3552469727697D+01 + 0.3618350889205D+01 0.3685239649953D+01 0.3753144215094D+01 0.3822072590172D+01 + 0.3892032568757D+01 0.3963031719749D+01 0.4035077374344D+01 0.4108176612659D+01 + 0.4182336250031D+01 0.4257562822965D+01 0.4333862574749D+01 0.4411241440733D+01 + 0.4489705033259D+01 0.4569258626264D+01 0.4649907139541D+01 0.4731655122665D+01 + 0.4814506738591D+01 0.4898465746917D+01 0.4983535486831D+01 0.5069718859726D+01 + 0.5157018311510D+01 0.5245435814598D+01 0.5334972849604D+01 0.5425630386741D+01 + 0.5517408866922D+01 0.5610308182594D+01 0.5704327658293D+01 0.5799466030950D+01 + 0.5895721429939D+01 0.5993091356902D+01 0.6091572665343D+01 0.6191161540026D+01 + 0.6291853476174D+01 0.6393643258502D+01 0.6496524940089D+01 0.6600491821120D+01 + 0.6705536427508D+01 0.6811650489422D+01 0.6918824919752D+01 0.7027049792516D+01 + 0.7136314321257D+01 0.7246606837441D+01 0.7357914768890D+01 0.7470224618285D+01 + 0.7583521941761D+01 0.7697791327633D+01 0.7813016375286D+01 0.7929179674266D+01 + 0.8046262783610D+01 0.8164246211451D+01 0.8283109394943D+01 0.8402830680546D+01 + 0.8523387304717D+01 0.8644755375050D+01 0.8766909851919D+01 0.8889824530662D+01 + 0.9013472024372D+01 0.9137823747332D+01 0.9262849899162D+01 0.9388519449721D+01 + 0.9514800124838D+01 0.9641658392911D+01 0.9769059452454D+01 0.9896967220642D+01 + 0.1002534432292D+02 0.1015415208375D+02 0.1028335051856D+02 0.1041289832694D+02 + 0.1054275288720D+02 0.1067287025230D+02 0.1080320514732D+02 0.1093371096842D+02 + 0.1106433978348D+02 0.1119504233437D+02 0.1132576804111D+02 0.1145646500778D+02 + 0.1158708003040D+02 0.1171755860686D+02 0.1184784494890D+02 0.1197788199624D+02 + 0.1210761143300D+02 0.1223697370643D+02 0.1236590804802D+02 0.1249435249713D+02 + 0.1262224392713D+02 0.1274951807422D+02 0.1287610956891D+02 0.1300195197030D+02 + 0.1312697780324D+02 0.1325111859836D+02 0.1337430493511D+02 0.1349646648783D+02 + 0.1361753207499D+02 0.1373742971158D+02 0.1385608666463D+02 0.1397342951220D+02 + 0.1408938420551D+02 0.1420387613459D+02 0.1431683019720D+02 0.1442817087135D+02 + 0.1453782229112D+02 0.1464570832613D+02 0.1475175266444D+02 0.1485587889894D+02 + 0.1495801061734D+02 0.1505807149563D+02 0.1515598539505D+02 0.1525167646255D+02 + 0.1534506923469D+02 0.1543608874497D+02 0.1552466063453D+02 0.1561071126614D+02 + 0.1569416784144D+02 0.1577495852137D+02 0.1585301254962D+02 0.1592826037906D+02 + 0.1600063380113D+02 0.1607006607780D+02 0.1613649207626D+02 0.1619984840598D+02 + 0.1626007355811D+02 0.1631710804694D+02 0.1637089455331D+02 0.1642137806973D+02 + 0.1646850604694D+02 0.1651222854187D+02 0.1655249836643D+02 0.1658927123725D+02 + 0.1662250592571D+02 0.1665216440833D+02 0.1667821201695D+02 0.1670061758849D+02 + 0.1671935361393D+02 0.1673439638626D+02 0.1674572614680D+02 0.1675332722984D+02 + 0.1675718820489D+02 0.1675730201639D+02 0.1675366612029D+02 0.1674628261721D+02 + 0.1673515838160D+02 0.1672030518660D+02 0.1670173982403D+02 0.1667948421911D+02 + 0.1665356553932D+02 0.1662401629713D+02 0.1659087444589D+02 0.1655418346847D+02 + 0.1651399245822D+02 0.1647035619162D+02 0.1642333519220D+02 0.1637299578522D+02 + 0.1631941014255D+02 0.1626265631736D+02 0.1620281826800D+02 0.1613998587066D+02 + 0.1607425492032D+02 0.1600572711953D+02 0.1593451005448D+02 0.1586071715810D+02 + 0.1578446765952D+02 0.1570588651969D+02 0.1562510435271D+02 0.1554225733239D+02 + 0.1545748708393D+02 0.1537094056013D+02 0.1528276990216D+02 0.1519313228432D+02 + 0.1510218974282D+02 0.1501010898825D+02 0.1491706120172D+02 0.1482322181439D+02 + 0.1472877027056D+02 0.1463388977412D+02 0.1453876701847D+02 0.1444359189998D+02 + 0.1434855721516D+02 0.1425385834165D+02 0.1415969290335D+02 0.1406626041994D+02 + 0.1397376194113D+02 0.1388239966616D+02 0.1379237654884D+02 0.1370389588884D+02 + 0.1361716090978D+02 0.1353237432463D+02 0.1344973788944D+02 0.1336945194585D+02 + 0.1329171495353D+02 0.1321672301317D+02 0.1314466938134D+02 0.1307574397764D+02 + 0.1301013288643D+02 0.1294801785263D+02 0.1288957577415D+02 0.1283497819168D+02 + 0.1278439077719D+02 0.1273797282248D+02 0.1269587672938D+02 0.1265824750278D+02 + 0.1262522224822D+02 0.1259692967553D+02 0.1257348960995D+02 0.1255501251259D+02 + 0.1254159901155D+02 0.1253333944568D+02 0.1253031342232D+02 0.1253258939096D+02 + 0.1254022423435D+02 0.1255326287874D+02 0.1257173792503D+02 0.1259566930240D+02 + 0.1262506394600D+02 0.1265991550053D+02 0.1270020405107D+02 0.1274589588280D+02 + 0.1279694327113D+02 0.1285328430368D+02 0.1291484273542D+02 0.1298152787843D+02 + 0.1305323452739D+02 0.1312984292209D+02 0.1321121874799D+02 0.1329721317575D+02 + 0.1338766294085D+02 0.1348239046377D+02 0.1358120401168D+02 0.1368389790210D+02 + 0.1379025274883D+02 0.1390003575075D+02 0.1401300102338D+02 0.1412888997336D+02 + 0.1424743171576D+02 0.1436834353392D+02 0.1449133138140D+02 0.1461609042557D+02 + 0.1474230563199D+02 0.1486965238885D+02 0.1499779717038D+02 0.1512639823800D+02 + 0.1525510637798D+02 0.1538356567399D+02 0.1551141431302D+02 0.1563828542269D+02 + 0.1576380793817D+02 0.1588760749642D+02 0.1600930735575D+02 0.1612852933795D+02 + 0.1624489479082D+02 0.1635802556828D+02 0.1646754502520D+02 0.1657307902430D+02 + 0.1667425695189D+02 0.1677071273953D+02 0.1686208588836D+02 0.1694802249283D+02 + 0.1702817626054D+02 0.1710220952485D+02 0.1716979424676D+02 0.1723061300262D+02 + 0.1728435995432D+02 0.1733074179819D+02 0.1736947868953D+02 0.1740030513890D+02 + 0.1742297087709D+02 0.1743724168510D+02 0.1744290018603D+02 0.1743974659549D+02 + 0.1742759942746D+02 0.1740629615247D+02 0.1737569380519D+02 0.1733566953861D+02 + 0.1728612112223D+02 0.1722696738154D+02 0.1715814857673D+02 0.1707962671824D+02 + 0.1699138581740D+02 0.1689343207022D+02 0.1678579397303D+02 0.1666852236849D+02 + 0.1654169042108D+02 0.1640539352121D+02 0.1625974911749D+02 0.1610489647684D+02 + 0.1594099637258D+02 0.1576823070075D+02 0.1558680202530D+02 0.1539693305309D+02 + 0.1519886603990D+02 0.1499286212893D+02 0.1477920062373D+02 0.1455817819755D+02 + 0.1433010804159D+02 0.1409531895495D+02 0.1385415437910D+02 0.1360697138042D+02 + 0.1335413958412D+02 0.1309604006359D+02 0.1283306418914D+02 0.1256561244045D+02 + 0.1229409318742D+02 0.1201892144398D+02 0.1174051759988D+02 0.1145930613567D+02 + 0.1117571432593D+02 0.1089017093619D+02 0.1060310491905D+02 0.1031494411493D+02 + 0.1002611396307D+02 0.9737036228271D+01 0.9448127748978D+01 0.9159799212137D+01 + 0.8872453960224D+01 0.8586486835702D+01 0.8302283068016D+01 0.8020217208022D+01 + 0.7740652114540D+01 0.7463937997512D+01 0.7190411521609D+01 0.6920394974658D+01 + 0.6654195503776D+01 0.6392104422571D+01 0.6134396592015D+01 0.5881329877208D+01 + 0.5633144681845D+01 0.5390063561676D+01 0.5152290917823D+01 0.4920012770300D+01 + 0.4693396611616D+01 0.4472591339847D+01 0.4257727270097D+01 0.4048916222783D+01 + 0.3846251686772D+01 0.3649809054935D+01 0.3459645929298D+01 0.3275802492617D+01 + 0.3098301942838D+01 0.2927150986626D+01 0.2762340387854D+01 0.2603845566745D+01 + 0.2451627245138D+01 0.2305632133210D+01 0.2165793652857D+01 0.2032032692873D+01 + 0.1904258390998D+01 0.1782368937897D+01 0.1666252398174D+01 0.1555787543536D+01 + 0.1450844693334D+01 0.1351286557804D+01 0.1256969079469D+01 0.1167742268318D+01 + 0.1083451026567D+01 0.1003935959018D+01 0.9290341652443D+00 0.8585800100976D+00 + 0.7924058692696D+00 0.7303428469392D+00 0.6722214628130D+00 0.6178723061713D+00 + 0.5671266548366D+00 0.5198170572937D+00 0.4757778765085D+00 0.4348457943007D+00 + 0.3968602754441D+00 0.3616639909708D+00 0.3291032004545D+00 0.2990280933404D+00 + 0.2712930896597D+00 0.2457571007346D+00 0.2222837507206D+00 0.2007415600622D+00 + 0.1810040921462D+00 0.1629500646234D+00 0.1464634270347D+00 0.1314334065222D+00 + 0.1177545235250D+00 0.1053265794595D+00 0.9405461845734D-01 0.8384886528833D-01 + 0.7462464162849D-01 0.6630226284235D-01 0.5880691744214D-01 0.5206853135862D-01 + 0.4602161911498D-01 0.4060512393584D-01 0.3576224875042D-01 0.3144027996354D-01 + 0.2759040577246D-01 0.2416753070297D-01 0.2113008792669D-01 0.1843985080459D-01 + 0.1606174498113D-01 0.1396366223069D-01 0.1211627713474D-01 0.1049286754506D-01 + 0.9069139668069D-02 0.7823058487381D-02 0.6734684128178D-02 0.5786014658544D-02 + 0.4960835719908D-02 0.4244577282225D-02 0.3624177729732D-02 0.3087955400419D-02 + 0.2625487627035D-02 0.2227497259527D-02 0.1885746588363D-02 0.1592938535094D-02 + 0.1342624930581D-02 0.1129121662324D-02 0.9474304399453D-03 0.7931669017510D-03 + 0.6624947650309D-03 0.5520657078526D-03 0.4589646602094D-03 0.3806601769220D-03 + 0.3149595632568D-03 0.2599684263118D-03 0.2140543303820D-03 0.1758142422924D-03 + 0.1440454626657D-03 0.1177197508559D-03 0.9596036446378D-04 0.7802174860524D-04 + 0.6327162510976D-04 0.5117524730842D-04 0.4128160176895D-04 0.3321135403353D-04 + 0.2664635092197D-04 0.2132050711792D-04 0.1701191842681D-04 0.1353605817300D-04 + 0.1073992660897D-04 0.8497035878124D-05 0.6703124964229D-05 0.5272510150108D-05 + 0.4134986785638D-05 0.3233207634943D-05 0.2520471748410D-05 0.1958865710514D-05 + 0.1517706279742D-05 0.1172239898148D-05 0.9025603453303D-06 0.6927109876189D-06 + 0.5299426724681D-06 0.4041023853658D-06 0.3071313668175D-06 0.2326545239714D-06 + 0.1756457075926D-06 0.1321558008512D-06 0.9909261999878D-07 0.7404339427499D-07 + 0.5513210650966D-07 0.4090526741789D-07 0.3024079341638D-07 0.2227558518901D-07 + 0.1634818494233D-07 0.1195354464424D-07 0.8707483586044D-08 0.6318867278968D-08 + 0.4567914967219D-08 0.3289352094104D-08 0.2359377458458D-08 0.1685621648831D-08 + 0.1199441444985D-08 0.8500308799920D-09 0.5999391982645D-09 0.4216737768588D-09 + 0.2951361838067D-09 0.2056952508216D-09 0.1427450951301D-09 0.9863071098592D-10 + 0.6785093267399D-10 0.4646977189272D-10 0.3168359136154D-10 0.2150429387060D-10 + 0.1452848527224D-10 0.9770053216322D-11 0.6539304800065D-11 0.4356126796501D-11 + 0.2887880260806D-11 0.1905201798784D-11 0.1250725394878D-11 0.8169916617209D-12 + 0.5309432694921D-12 0.3433000833030D-12 0.2208020111155D-12 0.1412809577700D-12 + 0.8992689621478D-13 0.5693706621335D-13 0.3585707402774D-13 0.2245975161629D-13 + 0.1399148636359D-13 0.8668296063641D-14 0.5340818176435D-14 diff --git a/Test/Ni4/v_ni4.2 b/Test/Ni4/v_ni4.2 new file mode 100644 index 000000000..4e8a87815 --- /dev/null +++ b/Test/Ni4/v_ni4.2 @@ -0,0 +1,1554 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Ni. + 2 -0.3322713216605D-24 + LSMS: xx z= 28. xvalws= 5.28292 + 28. 6.55000 10. 0.6401316680236D+00 + -0.1113096740000D+02 0.8563086195639D+00 1010 +-0.5599696222824D+02-0.5599692578589D+02-0.5599688890636D+02-0.5599685158441D+02 +-0.5599681381473D+02-0.5599677559194D+02-0.5599673691063D+02-0.5599669776527D+02 +-0.5599665815031D+02-0.5599661806011D+02-0.5599657748897D+02-0.5599653643111D+02 +-0.5599649488071D+02-0.5599645283185D+02-0.5599641027854D+02-0.5599636721475D+02 +-0.5599632363433D+02-0.5599627953111D+02-0.5599623489879D+02-0.5599618973104D+02 +-0.5599614402142D+02-0.5599609776345D+02-0.5599605095053D+02-0.5599600357602D+02 +-0.5599595563317D+02-0.5599590711516D+02-0.5599585801509D+02-0.5599580832599D+02 +-0.5599575804078D+02-0.5599570715230D+02-0.5599565565333D+02-0.5599560353654D+02 +-0.5599555079451D+02-0.5599549741974D+02-0.5599544340465D+02-0.5599538874153D+02 +-0.5599533342264D+02-0.5599527744008D+02-0.5599522078591D+02-0.5599516345205D+02 +-0.5599510543037D+02-0.5599504671259D+02-0.5599498729038D+02-0.5599492715528D+02 +-0.5599486629873D+02-0.5599480471208D+02-0.5599474238656D+02-0.5599467931332D+02 +-0.5599461548337D+02-0.5599455088765D+02-0.5599448551696D+02-0.5599441936200D+02 +-0.5599435241335D+02-0.5599428466151D+02-0.5599421609682D+02-0.5599414670954D+02 +-0.5599407648980D+02-0.5599400542760D+02-0.5599393351283D+02-0.5599386073527D+02 +-0.5599378708456D+02-0.5599371255022D+02-0.5599363712166D+02-0.5599356078813D+02 +-0.5599348353878D+02-0.5599340536263D+02-0.5599332624854D+02-0.5599324618526D+02 +-0.5599316516140D+02-0.5599308316543D+02-0.5599300018570D+02-0.5599291621038D+02 +-0.5599283122754D+02-0.5599274522508D+02-0.5599265819077D+02-0.5599257011222D+02 +-0.5599248097690D+02-0.5599239077213D+02-0.5599229948507D+02-0.5599220710274D+02 +-0.5599211361199D+02-0.5599201899952D+02-0.5599192325186D+02-0.5599182635539D+02 +-0.5599172829632D+02-0.5599162906071D+02-0.5599152863442D+02-0.5599142700317D+02 +-0.5599132415249D+02-0.5599122006776D+02-0.5599111473416D+02-0.5599100813669D+02 +-0.5599090026020D+02-0.5599079108932D+02-0.5599068060852D+02-0.5599056880208D+02 +-0.5599045565409D+02-0.5599034114845D+02-0.5599022526885D+02-0.5599010799881D+02 +-0.5598998932164D+02-0.5598986922044D+02-0.5598974767813D+02-0.5598962467740D+02 +-0.5598950020074D+02-0.5598937423045D+02-0.5598924674859D+02-0.5598911773702D+02 +-0.5598898717737D+02-0.5598885505105D+02-0.5598872133927D+02-0.5598858602299D+02 +-0.5598844908295D+02-0.5598831049965D+02-0.5598817025337D+02-0.5598802832414D+02 +-0.5598788469176D+02-0.5598773933579D+02-0.5598759223552D+02-0.5598744337002D+02 +-0.5598729271809D+02-0.5598714025829D+02-0.5598698596891D+02-0.5598682982799D+02 +-0.5598667181329D+02-0.5598651190232D+02-0.5598635007231D+02-0.5598618630022D+02 +-0.5598602056272D+02-0.5598585283623D+02-0.5598568309685D+02-0.5598551132043D+02 +-0.5598533748249D+02-0.5598516155828D+02-0.5598498352276D+02-0.5598480335057D+02 +-0.5598462101605D+02-0.5598443649324D+02-0.5598424975586D+02-0.5598406077731D+02 +-0.5598386953068D+02-0.5598367598873D+02-0.5598348012390D+02-0.5598328190829D+02 +-0.5598308131367D+02-0.5598287831146D+02-0.5598267287276D+02-0.5598246496830D+02 +-0.5598225456847D+02-0.5598204164328D+02-0.5598182616243D+02-0.5598160809520D+02 +-0.5598138741053D+02-0.5598116407698D+02-0.5598093806274D+02-0.5598070933560D+02 +-0.5598047786299D+02-0.5598024361191D+02-0.5598000654900D+02-0.5597976664047D+02 +-0.5597952385215D+02-0.5597927814943D+02-0.5597902949731D+02-0.5597877786036D+02 +-0.5597852320271D+02-0.5597826548807D+02-0.5597800467972D+02-0.5597774074049D+02 +-0.5597747363277D+02-0.5597720331847D+02-0.5597692975908D+02-0.5597665291561D+02 +-0.5597637274859D+02-0.5597608921810D+02-0.5597580228370D+02-0.5597551190451D+02 +-0.5597521803912D+02-0.5597492064565D+02-0.5597461968170D+02-0.5597431510435D+02 +-0.5597400687019D+02-0.5597369493526D+02-0.5597337925510D+02-0.5597305978468D+02 +-0.5597273647846D+02-0.5597240929033D+02-0.5597207817363D+02-0.5597174308115D+02 +-0.5597140396509D+02-0.5597106077709D+02-0.5597071346821D+02-0.5597036198890D+02 +-0.5597000628904D+02-0.5596964631789D+02-0.5596928202409D+02-0.5596891335569D+02 +-0.5596854026009D+02-0.5596816268406D+02-0.5596778057374D+02-0.5596739387460D+02 +-0.5596700253148D+02-0.5596660648853D+02-0.5596620568924D+02-0.5596580007642D+02 +-0.5596538959218D+02-0.5596497417795D+02-0.5596455377443D+02-0.5596412832164D+02 +-0.5596369775883D+02-0.5596326202456D+02-0.5596282105662D+02-0.5596237479207D+02 +-0.5596192316720D+02-0.5596146611754D+02-0.5596100357783D+02-0.5596053548203D+02 +-0.5596006176331D+02-0.5595958235402D+02-0.5595909718570D+02-0.5595860618908D+02 +-0.5595810929402D+02-0.5595760642956D+02-0.5595709752389D+02-0.5595658250430D+02 +-0.5595606129723D+02-0.5595553382823D+02-0.5595500002195D+02-0.5595445980212D+02 +-0.5595391309155D+02-0.5595335981214D+02-0.5595279988483D+02-0.5595223322959D+02 +-0.5595165976547D+02-0.5595107941049D+02-0.5595049208171D+02-0.5594989769518D+02 +-0.5594929616595D+02-0.5594868740802D+02-0.5594807133437D+02-0.5594744785691D+02 +-0.5594681688652D+02-0.5594617833297D+02-0.5594553210495D+02-0.5594487811005D+02 +-0.5594421625474D+02-0.5594354644436D+02-0.5594286858311D+02-0.5594218257403D+02 +-0.5594148831899D+02-0.5594078571866D+02-0.5594007467252D+02-0.5593935507885D+02 +-0.5593862683468D+02-0.5593788983579D+02-0.5593714397671D+02-0.5593638915070D+02 +-0.5593562524973D+02-0.5593485216444D+02-0.5593406978417D+02-0.5593327799692D+02 +-0.5593247668933D+02-0.5593166574665D+02-0.5593084505278D+02-0.5593001449019D+02 +-0.5592917393992D+02-0.5592832328159D+02-0.5592746239336D+02-0.5592659115190D+02 +-0.5592570943241D+02-0.5592481710855D+02-0.5592391405247D+02-0.5592300013478D+02 +-0.5592207522450D+02-0.5592113918908D+02-0.5592019189435D+02-0.5591923320453D+02 +-0.5591826298219D+02-0.5591728108823D+02-0.5591628738187D+02-0.5591528172062D+02 +-0.5591426396027D+02-0.5591323395486D+02-0.5591219155665D+02-0.5591113661612D+02 +-0.5591006898193D+02-0.5590898850093D+02-0.5590789501807D+02-0.5590678837645D+02 +-0.5590566841727D+02-0.5590453497978D+02-0.5590338790131D+02-0.5590222701719D+02 +-0.5590105216076D+02-0.5589986316335D+02-0.5589865985424D+02-0.5589744206062D+02 +-0.5589620960760D+02-0.5589496231817D+02-0.5589370001315D+02-0.5589242251122D+02 +-0.5589112962883D+02-0.5588982118021D+02-0.5588849697734D+02-0.5588715682990D+02 +-0.5588580054527D+02-0.5588442792851D+02-0.5588303878228D+02-0.5588163290685D+02 +-0.5588021010008D+02-0.5587877015737D+02-0.5587731287161D+02-0.5587583803320D+02 +-0.5587434542999D+02-0.5587283484724D+02-0.5587130606761D+02-0.5586975887112D+02 +-0.5586819303509D+02-0.5586660833417D+02-0.5586500454025D+02-0.5586338142245D+02 +-0.5586173874708D+02-0.5586007627761D+02-0.5585839377464D+02-0.5585669099585D+02 +-0.5585496769597D+02-0.5585322362676D+02-0.5585145853695D+02-0.5584967217221D+02 +-0.5584786427512D+02-0.5584603458514D+02-0.5584418283853D+02-0.5584230876837D+02 +-0.5584041210449D+02-0.5583849257340D+02-0.5583654989832D+02-0.5583458379908D+02 +-0.5583259399211D+02-0.5583058019037D+02-0.5582854210335D+02-0.5582647943699D+02 +-0.5582439189365D+02-0.5582227917207D+02-0.5582014096732D+02-0.5581797697076D+02 +-0.5581578686998D+02-0.5581357034878D+02-0.5581132708710D+02-0.5580905676100D+02 +-0.5580675904257D+02-0.5580443359992D+02-0.5580208009713D+02-0.5579969819415D+02 +-0.5579728754684D+02-0.5579484780684D+02-0.5579237862153D+02-0.5578987963404D+02 +-0.5578735048312D+02-0.5578479080313D+02-0.5578220022398D+02-0.5577957837107D+02 +-0.5577692486524D+02-0.5577423932271D+02-0.5577152135503D+02-0.5576877056901D+02 +-0.5576598656669D+02-0.5576316894524D+02-0.5576031729696D+02-0.5575743120915D+02 +-0.5575451026411D+02-0.5575155403905D+02-0.5574856210601D+02-0.5574553403187D+02 +-0.5574246937818D+02-0.5573936770121D+02-0.5573622855179D+02-0.5573305147530D+02 +-0.5572983601159D+02-0.5572658169491D+02-0.5572328805384D+02-0.5571995461125D+02 +-0.5571658088417D+02-0.5571316638379D+02-0.5570971061534D+02-0.5570621307804D+02 +-0.5570267326504D+02-0.5569909066329D+02-0.5569546475356D+02-0.5569179501028D+02 +-0.5568808090150D+02-0.5568432188882D+02-0.5568051742730D+02-0.5567666696540D+02 +-0.5567276994485D+02-0.5566882580066D+02-0.5566483396095D+02-0.5566079384693D+02 +-0.5565670487277D+02-0.5565256644557D+02-0.5564837796522D+02-0.5564413882437D+02 +-0.5563984840830D+02-0.5563550609485D+02-0.5563111125436D+02-0.5562666324952D+02 +-0.5562216143533D+02-0.5561760515901D+02-0.5561299375987D+02-0.5560832656927D+02 +-0.5560360291049D+02-0.5559882209863D+02-0.5559398344056D+02-0.5558908623478D+02 +-0.5558412977135D+02-0.5557911333176D+02-0.5557403618889D+02-0.5556889760684D+02 +-0.5556369684090D+02-0.5555843313738D+02-0.5555310573357D+02-0.5554771385759D+02 +-0.5554225672831D+02-0.5553673355525D+02-0.5553114353844D+02-0.5552548586837D+02 +-0.5551975972583D+02-0.5551396428182D+02-0.5550809869745D+02-0.5550216212382D+02 +-0.5549615370192D+02-0.5549007256249D+02-0.5548391782594D+02-0.5547768860221D+02 +-0.5547138399068D+02-0.5546500308004D+02-0.5545854494815D+02-0.5545200866198D+02 +-0.5544539327745D+02-0.5543869783930D+02-0.5543192138103D+02-0.5542506292469D+02 +-0.5541812148084D+02-0.5541109604840D+02-0.5540398561451D+02-0.5539678915440D+02 +-0.5538950563133D+02-0.5538213399637D+02-0.5537467318837D+02-0.5536712213374D+02 +-0.5535947974639D+02-0.5535174492760D+02-0.5534391656584D+02-0.5533599353668D+02 +-0.5532797470268D+02-0.5531985891319D+02-0.5531164500429D+02-0.5530333179863D+02 +-0.5529491810528D+02-0.5528640271963D+02-0.5527778442326D+02-0.5526906198374D+02 +-0.5526023415460D+02-0.5525129967511D+02-0.5524225727020D+02-0.5523310565028D+02 +-0.5522384351115D+02-0.5521446953384D+02-0.5520498238448D+02-0.5519538071417D+02 +-0.5518566315882D+02-0.5517582833908D+02-0.5516587486011D+02-0.5515580131153D+02 +-0.5514560626725D+02-0.5513528828533D+02-0.5512484590785D+02-0.5511427766079D+02 +-0.5510358205390D+02-0.5509275758052D+02-0.5508180271751D+02-0.5507071592509D+02 +-0.5505949564671D+02-0.5504814030891D+02-0.5503664832120D+02-0.5502501807596D+02 +-0.5501324794826D+02-0.5500133629576D+02-0.5498928145859D+02-0.5497708175923D+02 +-0.5496473550236D+02-0.5495224097477D+02-0.5493959644521D+02-0.5492680016431D+02 +-0.5491385036441D+02-0.5490074525951D+02-0.5488748304510D+02-0.5487406189808D+02 +-0.5486047997664D+02-0.5484673542016D+02-0.5483282634909D+02-0.5481875086488D+02 +-0.5480450704984D+02-0.5479009296707D+02-0.5477550666034D+02-0.5476074615405D+02 +-0.5474580945308D+02-0.5473069454274D+02-0.5471539938866D+02-0.5469992193677D+02 +-0.5468426011314D+02-0.5466841182398D+02-0.5465237495554D+02-0.5463614737403D+02 +-0.5461972692559D+02-0.5460311143622D+02-0.5458629871174D+02-0.5456928653772D+02 +-0.5455207267943D+02-0.5453465488185D+02-0.5451703086959D+02-0.5449919834687D+02 +-0.5448115499752D+02-0.5446289848492D+02-0.5444442645202D+02-0.5442573652133D+02 +-0.5440682629490D+02-0.5438769335434D+02-0.5436833526081D+02-0.5434874955506D+02 +-0.5432893375745D+02-0.5430888536794D+02-0.5428860186618D+02-0.5426808071152D+02 +-0.5424731934305D+02-0.5422631517968D+02-0.5420506562020D+02-0.5418356804332D+02 +-0.5416181980777D+02-0.5413981825241D+02-0.5411756069626D+02-0.5409504443864D+02 +-0.5407226675929D+02-0.5404922491843D+02-0.5402591615695D+02-0.5400233769649D+02 +-0.5397848673961D+02-0.5395436046993D+02-0.5392995605226D+02-0.5390527063280D+02 +-0.5388030133932D+02-0.5385504528129D+02-0.5382949955012D+02-0.5380366121933D+02 +-0.5377752734478D+02-0.5375109496485D+02-0.5372436110071D+02-0.5369732275652D+02 +-0.5366997691970D+02-0.5364232056114D+02-0.5361435063550D+02-0.5358606408144D+02 +-0.5355745782194D+02-0.5352852876455D+02-0.5349927380169D+02-0.5346968981097D+02 +-0.5343977365546D+02-0.5340952218404D+02-0.5337893223173D+02-0.5334800061997D+02 +-0.5331672415703D+02-0.5328509963831D+02-0.5325312384670D+02-0.5322079355294D+02 +-0.5318810551600D+02-0.5315505648344D+02-0.5312164319178D+02-0.5308786236690D+02 +-0.5305371072443D+02-0.5301918497011D+02-0.5298428180021D+02-0.5294899790196D+02 +-0.5291332995388D+02-0.5287727462625D+02-0.5284082858148D+02-0.5280398847456D+02 +-0.5276675095342D+02-0.5272911265938D+02-0.5269107022753D+02-0.5265262028717D+02 +-0.5261375946222D+02-0.5257448437158D+02-0.5253479162958D+02-0.5249467784638D+02 +-0.5245413962833D+02-0.5241317357839D+02-0.5237177629651D+02-0.5232994437998D+02 +-0.5228767442386D+02-0.5224496302128D+02-0.5220180676382D+02-0.5215820224186D+02 +-0.5211414604488D+02-0.5206963476182D+02-0.5202466498135D+02-0.5197923329218D+02 +-0.5193333628333D+02-0.5188697054440D+02-0.5184013266581D+02-0.5179281923901D+02 +-0.5174502685673D+02-0.5169675211312D+02-0.5164799160395D+02-0.5159874192676D+02 +-0.5154899968095D+02-0.5149876146794D+02-0.5144802389119D+02-0.5139678355629D+02 +-0.5134503707098D+02-0.5129278104517D+02-0.5124001209089D+02-0.5118672682225D+02 +-0.5113292185539D+02-0.5107859380833D+02-0.5102373930087D+02-0.5096835495445D+02 +-0.5091243739191D+02-0.5085598323730D+02-0.5079898911566D+02-0.5074145165270D+02 +-0.5068336747456D+02-0.5062473320742D+02-0.5056554547719D+02-0.5050580090915D+02 +-0.5044549612750D+02-0.5038462775495D+02-0.5032319241231D+02-0.5026118671799D+02 +-0.5019860728753D+02-0.5013545073308D+02-0.5007171366293D+02-0.5000739268094D+02 +-0.4994248438603D+02-0.4987698537166D+02-0.4981089222525D+02-0.4974420152767D+02 +-0.4967690985269D+02-0.4960901376648D+02-0.4954050982708D+02-0.4947139458392D+02 +-0.4940166457737D+02-0.4933131633826D+02-0.4926034638753D+02-0.4918875123586D+02 +-0.4911652738334D+02-0.4904367131924D+02-0.4897017952180D+02-0.4889604845812D+02 +-0.4882127458414D+02-0.4874585434461D+02-0.4866978417330D+02-0.4859306049320D+02 +-0.4851567971689D+02-0.4843763824698D+02-0.4835893247673D+02-0.4827955879080D+02 +-0.4819951356609D+02-0.4811879317284D+02-0.4803739397580D+02-0.4795531233565D+02 +-0.4787254461052D+02-0.4778908715782D+02-0.4770493633617D+02-0.4762008850757D+02 +-0.4753454003985D+02-0.4744828730923D+02-0.4736132670323D+02-0.4727365462373D+02 +-0.4718526749029D+02-0.4709616174376D+02-0.4700633385008D+02-0.4691578030434D+02 +-0.4682449763507D+02-0.4673248240881D+02-0.4663973123487D+02-0.4654624077030D+02 +-0.4645200772512D+02-0.4635702886768D+02-0.4626130103029D+02-0.4616482111490D+02 +-0.4606758609896D+02-0.4596959304142D+02-0.4587083908873D+02-0.4577132148090D+02 +-0.4567103755758D+02-0.4556998476407D+02-0.4546816065717D+02-0.4536556291099D+02 +-0.4526218932245D+02-0.4515803781656D+02-0.4505310645130D+02-0.4494739342218D+02 +-0.4484089706625D+02-0.4473361586559D+02-0.4462554845016D+02-0.4451669359998D+02 +-0.4440705024651D+02-0.4429661747322D+02-0.4418539451519D+02-0.4407338075785D+02 +-0.4396057573455D+02-0.4384697912320D+02-0.4373259074173D+02-0.4361741054236D+02 +-0.4350143860488D+02-0.4338467512865D+02-0.4326712042352D+02-0.4314877489972D+02 +-0.4302963905669D+02-0.4290971347096D+02-0.4278899878323D+02-0.4266749568475D+02 +-0.4254520490309D+02-0.4242212718753D+02-0.4229826329427D+02-0.4217361397159D+02 +-0.4204817994520D+02-0.4192196190406D+02-0.4179496048687D+02-0.4166717626939D+02 +-0.4153860975298D+02-0.4140926135451D+02-0.4127913139777D+02-0.4114822010683D+02 +-0.4101652760126D+02-0.4088405389359D+02-0.4075079888899D+02-0.4061676238745D+02 +-0.4048194408828D+02-0.4034634359727D+02-0.4020996043623D+02-0.4007279405504D+02 +-0.3993484384613D+02-0.3979610916110D+02-0.3965658932967D+02-0.3951628368036D+02 +-0.3937519156311D+02-0.3923331237331D+02-0.3909064557714D+02-0.3894719073791D+02 +-0.3880294754316D+02-0.3865791583219D+02-0.3851209562376D+02-0.3836548714373D+02 +-0.3821809085222D+02-0.3806990747022D+02-0.3792093800519D+02-0.3777118377560D+02 +-0.3762064643396D+02-0.3746932798842D+02-0.3731723082241D+02-0.3716435771246D+02 +-0.3701071184383D+02-0.3685629682396D+02-0.3670111669348D+02-0.3654517593490D+02 +-0.3638847947866D+02-0.3623103270670D+02-0.3607284145339D+02-0.3591391200380D+02 +-0.3575425108946D+02-0.3559386588133D+02-0.3543276398037D+02-0.3527095340541D+02 +-0.3510844257863D+02-0.3494524030858D+02-0.3478135577083D+02-0.3461679848643D+02 +-0.3445157829811D+02-0.3428570534457D+02-0.3411919003274D+02-0.3395204300829D+02 +-0.3378427512447D+02-0.3361589740948D+02-0.3344692103249D+02-0.3327735726840D+02 +-0.3310721746174D+02-0.3293651298968D+02-0.3276525522435D+02-0.3259345549488D+02 +-0.3242112504914D+02-0.3224827501549D+02-0.3207491636476D+02-0.3190105987274D+02 +-0.3172671608332D+02-0.3155189527260D+02-0.3137660741417D+02-0.3120086214594D+02 +-0.3102466873853D+02-0.3084803606581D+02-0.3067097257761D+02-0.3049348627496D+02 +-0.3031558468815D+02-0.3013727485790D+02-0.2995856331977D+02-0.2977945609235D+02 +-0.2959995866920D+02-0.2942007601496D+02-0.2923981256594D+02-0.2905917223523D+02 +-0.2887815842271D+02-0.2869677403014D+02-0.2851502148146D+02-0.2833290274854D+02 +-0.2815041938242D+02-0.2796757255018D+02-0.2778436307759D+02-0.2760079149730D+02 +-0.2741685810279D+02-0.2723256300783D+02-0.2704790621131D+02-0.2686288766711D+02 +-0.2667750735885D+02-0.2649176537888D+02-0.2630566201102D+02-0.2611919781653D+02 +-0.2593237372222D+02-0.2574519111010D+02-0.2555765190721D+02-0.2536975867460D+02 +-0.2518151469399D+02-0.2499292405051D+02-0.2480399171006D+02-0.2461472358916D+02 +-0.2442512661564D+02-0.2423520877796D+02-0.2404497916121D+02-0.2385444796763D+02 +-0.2366362651966D+02-0.2347252724381D+02-0.2328116363345D+02-0.2308955018945D+02 +-0.2289770233772D+02-0.2270563632319D+02-0.2251336908079D+02-0.2232091808423D+02 +-0.2212830117462D+02-0.2193553637155D+02-0.2174264167034D+02-0.2154963482993D+02 +-0.2135653315663D+02-0.2116335328969D+02-0.2097011099509D+02-0.2077682097407D+02 +-0.2058349669315D+02-0.2039015024168D+02-0.2019679222273D+02-0.2000343168188D+02 +-0.1981007607758D+02-0.1961673129514D+02-0.1942340170518D+02-0.1923009026563D+02 +-0.1903679866507D+02-0.1884352750377D+02-0.1865027650752D+02-0.1845704476868D+02 +-0.1826383100789D+02-0.1807063384981D+02-0.1787745210610D+02-0.1768428505888D+02 +-0.1749113273862D+02-0.1729799619070D+02-0.1710487772595D+02-0.1691178115078D+02 +-0.1671871197403D+02-0.1652567758787D+02-0.1633268742122D+02-0.1613975306488D+02 +-0.1594688836807D+02-0.1575410950680D+02-0.1556143502474D+02-0.1536888584794D+02 +-0.1517648527479D+02-0.1498425894283D+02-0.1479223477439D+02-0.1460044290282D+02 +-0.1440891558124D+02-0.1421768707594D+02-0.1402679354599D+02-0.1383627291119D+02 +-0.1364616470994D+02-0.1345650994882D+02-0.1326735094526D+02-0.1307873116512D+02 +-0.1289069505616D+02-0.1270328787905D+02-0.1251655553691D+02-0.1233054440456D+02 +-0.1214530115858D+02-0.1196087260900D+02-0.1177730553358D+02-0.1159464651556D+02 +-0.1141294178546D+02-0.1123223706771D+02-0.1105257743276D+02-0.1087400715511D+02 +-0.1069656957788D+02-0.1052030698433D+02-0.1034526047671D+02-0.1017146986276D+02 +-0.9998973550304D+01-0.9827808449991D+01-0.9658009886550D+01-0.9489611518644D+01 +-0.9322645267466D+01-0.9157141254155D+01-0.8993127746062D+01-0.8830631111875D+01 +-0.8669675785557D+01-0.8510284239016D+01-0.8352476963414D+01-0.8196272458942D+01 +-0.8041687232918D+01-0.7888735805962D+01-0.7737430726056D+01-0.7587782590186D+01 +-0.7439800073312D+01-0.7293489964330D+01-0.7148857208720D+01-0.7005904957514D+01 +-0.6864634622219D+01-0.6725045935325D+01-0.6587137015995D+01-0.6450904440533D+01 +-0.6316343317221D+01-0.6183447365098D+01-0.6052208996262D+01-0.5922619401257D+01 +-0.5794668637125D+01-0.5668345717679D+01-0.5543638705576D+01-0.5420534805760D+01 +-0.5299020459852D+01-0.5179081441071D+01-0.5060702949271D+01-0.4943869705704D+01 +-0.4828566047100D+01-0.4714776018691D+01-0.4602483465805D+01-0.4491672123673D+01 +-0.4382325705095D+01-0.4274427985640D+01-0.4167962886061D+01-0.4062914551618D+01 +-0.3959267428037D+01-0.3857006333826D+01-0.3756116528718D+01-0.3656583778001D+01 +-0.3558394412557D+01-0.3461535384413D+01-0.3365994317682D+01-0.3271759554763D+01 +-0.3178820197726D+01-0.3087166144845D+01-0.2996788122259D+01-0.2907677710821D+01 +-0.2819827368207D+01-0.2733230446431D+01-0.2647881204950D+01-0.2563774819612D+01 +-0.2480907387749D+01-0.2399275929784D+01-0.2318878387764D+01-0.2239713621329D+01 +-0.2161781401633D+01-0.2085082403831D+01-0.2009618198778D+01-0.1935391244617D+01 +-0.1862404878998D+01-0.1790663312655D+01-0.1720171625111D+01-0.1650935763269D+01 +-0.1582962543626D+01-0.1516259658827D+01-0.1450835689223D+01-0.1386700120052D+01 +-0.1323863364771D+01-0.1262336795005D+01-0.1202132777469D+01-0.1143264718130D+01 +-0.1085747113774D+01-0.1029595611013D+01-0.9748270727154D+00-0.9214596516777D+00 +-0.8695128713252D+00-0.8190077131099D+00-0.7699667102222D+00-0.7224140471735D+00 +-0.6763756647684D+00-0.6318793699591D+00-0.5889549500632D+00-0.5476342908327D+00 +-0.5079514978739D+00-0.4699430209489D+00-0.4336477807207D+00-0.3991072975512D+00 +-0.3663658220029D+00-0.3354704667473D+00-0.3064713396296D+00-0.2794216776835D+00 +-0.2543779819454D+00-0.2313999299251D+00 + 0.0000000000000D+00 + 1019 0.5282916303874D+01 + 0.2822835389983D-04 0.2889232671911D-04 0.2957191402324D-04 0.3026748289127D-04 + 0.3097940902739D-04 0.3170807696342D-04 0.3245388026606D-04 0.3321722174901D-04 + 0.3399851369009D-04 0.3479817805334D-04 0.3561664671650D-04 0.3645436170367D-04 + 0.3731177542349D-04 0.3818935091294D-04 0.3908756208675D-04 0.4000689399278D-04 + 0.4094784307328D-04 0.4191091743234D-04 0.4289663710960D-04 0.4390553436033D-04 + 0.4493815394213D-04 0.4599505340833D-04 0.4707680340823D-04 0.4818398799443D-04 + 0.4931720493734D-04 0.5047706604703D-04 0.5166419750268D-04 0.5287924018966D-04 + 0.5412285004463D-04 0.5539569840859D-04 0.5669847238832D-04 0.5803187522616D-04 + 0.5939662667858D-04 0.6079346340354D-04 0.6222313935691D-04 0.6368642619823D-04 + 0.6518411370593D-04 0.6671701020226D-04 0.6828594298825D-04 0.6989175878871D-04 + 0.7153532420780D-04 0.7321752619517D-04 0.7493927252301D-04 0.7670149227435D-04 + 0.7850513634266D-04 0.8035117794328D-04 0.8224061313666D-04 0.8417446136405D-04 + 0.8615376599547D-04 0.8817959489076D-04 0.9025304097353D-04 0.9237522281871D-04 + 0.9454728525372D-04 0.9677039997378D-04 0.9904576617157D-04 0.1013746111816D-03 + 0.1037581911398D-03 0.1061977916581D-03 0.1086947285154D-03 0.1112503483645D-03 + 0.1138660294548D-03 0.1165431823732D-03 0.1192832508014D-03 0.1220877122909D-03 + 0.1249580790570D-03 0.1278958987898D-03 0.1309027554859D-03 0.1339802702983D-03 + 0.1371301024066D-03 0.1403539499072D-03 0.1436535507253D-03 0.1470306835465D-03 + 0.1504871687719D-03 0.1540248694945D-03 0.1576456924982D-03 0.1613515892812D-03 + 0.1651445571022D-03 0.1690266400516D-03 0.1729999301474D-03 0.1770665684570D-03 + 0.1812287462450D-03 0.1854887061476D-03 0.1898487433750D-03 0.1943112069407D-03 + 0.1988785009209D-03 0.2035530857423D-03 0.2083374795002D-03 0.2132342593074D-03 + 0.2182460626742D-03 0.2233755889215D-03 0.2286256006255D-03 0.2339989250972D-03 + 0.2394984558959D-03 0.2451271543779D-03 0.2508880512812D-03 0.2567842483480D-03 + 0.2628189199834D-03 0.2689953149545D-03 0.2753167581275D-03 0.2817866522465D-03 + 0.2884084797527D-03 0.2951858046468D-03 0.3021222743941D-03 0.3092216218742D-03 + 0.3164876673763D-03 0.3239243206404D-03 0.3315355829466D-03 0.3393255492521D-03 + 0.3472984103792D-03 0.3554584552526D-03 0.3638100731904D-03 0.3723577562469D-03 + 0.3811061016106D-03 0.3900598140580D-03 0.3992237084638D-03 0.4086027123703D-03 + 0.4182018686156D-03 0.4280263380234D-03 0.4380814021550D-03 0.4483724661254D-03 + 0.4589050614847D-03 0.4696848491661D-03 0.4807176225028D-03 0.4920093103142D-03 + 0.5035659800647D-03 0.5153938410950D-03 0.5274992479281D-03 0.5398887036530D-03 + 0.5525688633857D-03 0.5655465378112D-03 0.5788286968073D-03 0.5924224731520D-03 + 0.6063351663176D-03 0.6205742463520D-03 0.6351473578499D-03 0.6500623240163D-03 + 0.6653271508237D-03 0.6809500312658D-03 0.6969393497094D-03 0.7133036863469D-03 + 0.7300518217520D-03 0.7471927415405D-03 0.7647356411393D-03 0.7826899306648D-03 + 0.8010652399149D-03 0.8198714234755D-03 0.8391185659460D-03 0.8588169872840D-03 + 0.8789772482749D-03 0.8996101561266D-03 0.9207267701938D-03 0.9423384078346D-03 + 0.9644566504011D-03 0.9870933493699D-03 0.1010260632612D-02 0.1033970910808D-02 + 0.1058236884013D-02 0.1083071548367D-02 0.1108488202970D-02 0.1134500456900D-02 + 0.1161122236412D-02 0.1188367792284D-02 0.1216251707344D-02 0.1244788904167D-02 + 0.1273994652944D-02 0.1303884579543D-02 0.1334474673741D-02 0.1365781297658D-02 + 0.1397821194374D-02 0.1430611496756D-02 0.1464169736471D-02 0.1498513853225D-02 + 0.1533662204197D-02 0.1569633573700D-02 0.1606447183057D-02 0.1644122700711D-02 + 0.1682680252554D-02 0.1722140432508D-02 0.1762524313336D-02 0.1803853457707D-02 + 0.1846149929507D-02 0.1889436305420D-02 0.1933735686763D-02 0.1979071711596D-02 + 0.2025468567111D-02 0.2072951002295D-02 0.2121544340895D-02 0.2171274494667D-02 + 0.2222167976934D-02 0.2274251916449D-02 0.2327554071579D-02 0.2382102844807D-02 + 0.2437927297566D-02 0.2495057165412D-02 0.2553522873541D-02 0.2613355552656D-02 + 0.2674587055203D-02 0.2737249971964D-02 0.2801377649040D-02 0.2867004205207D-02 + 0.2934164549674D-02 0.3002894400242D-02 0.3073230301875D-02 0.3145209645687D-02 + 0.3218870688367D-02 0.3294252572036D-02 0.3371395344560D-02 0.3450339980318D-02 + 0.3531128401442D-02 0.3613803499530D-02 0.3698409157865D-02 0.3784990274115D-02 + 0.3873592783561D-02 0.3964263682845D-02 0.4057051054243D-02 0.4152004090502D-02 + 0.4249173120221D-02 0.4348609633811D-02 0.4450366310035D-02 0.4554497043148D-02 + 0.4661056970641D-02 0.4770102501614D-02 0.4881691345780D-02 0.4995882543123D-02 + 0.5112736494216D-02 0.5232314991223D-02 0.5354681249591D-02 0.5479899940453D-02 + 0.5608037223751D-02 0.5739160782101D-02 0.5873339855419D-02 0.6010645276307D-02 + 0.6151149506240D-02 0.6294926672549D-02 0.6442052606234D-02 0.6592604880614D-02 + 0.6746662850838D-02 0.6904307694268D-02 0.7065622451768D-02 0.7230692069897D-02 + 0.7399603444044D-02 0.7572445462515D-02 0.7749309051598D-02 0.7930287221619D-02 + 0.8115475114018D-02 0.8304970049464D-02 0.8498871577032D-02 0.8697281524456D-02 + 0.8900304049495D-02 0.9108045692430D-02 0.9320615429706D-02 0.9538124728756D-02 + 0.9760687604030D-02 0.9988420674246D-02 0.1022144322090D-01 0.1045987724804D-01 + 0.1070384754337D-01 0.1095348174068D-01 0.1120891038362D-01 0.1147026699087D-01 + 0.1173768812274D-01 0.1201131344923D-01 0.1229128581950D-01 0.1257775133295D-01 + 0.1287085941174D-01 0.1317076287496D-01 0.1347761801432D-01 0.1379158467158D-01 + 0.1411282631755D-01 0.1444151013282D-01 0.1477780709030D-01 0.1512189203941D-01 + 0.1547394379218D-01 0.1583414521114D-01 0.1620268329910D-01 0.1657974929087D-01 + 0.1696553874693D-01 0.1736025164907D-01 0.1776409249813D-01 0.1817727041373D-01 + 0.1859999923619D-01 0.1903249763061D-01 0.1947498919308D-01 0.1992770255924D-01 + 0.2039087151505D-01 0.2086473510993D-01 0.2134953777229D-01 0.2184552942747D-01 + 0.2235296561814D-01 0.2287210762728D-01 0.2340322260368D-01 0.2394658369007D-01 + 0.2450247015392D-01 0.2507116752101D-01 0.2565296771170D-01 0.2624816918007D-01 + 0.2685707705593D-01 0.2748000328980D-01 0.2811726680080D-01 0.2876919362766D-01 + 0.2943611708282D-01 0.3011837790964D-01 0.3081632444289D-01 0.3153031277251D-01 + 0.3226070691063D-01 0.3300787896212D-01 0.3377220929851D-01 0.3455408673542D-01 + 0.3535390871366D-01 0.3617208148391D-01 0.3700902029513D-01 0.3786514958681D-01 + 0.3874090318494D-01 0.3963672450206D-01 0.4055306674117D-01 0.4149039310376D-01 + 0.4244917700192D-01 0.4342990227471D-01 0.4443306340872D-01 0.4545916576304D-01 + 0.4650872579860D-01 0.4758227131200D-01 0.4868034167394D-01 0.4980348807226D-01 + 0.5095227375970D-01 0.5212727430642D-01 0.5332907785746D-01 0.5455828539511D-01 + 0.5581551100629D-01 0.5710138215505D-01 0.5841653996030D-01 0.5976163947874D-01 + 0.6113734999319D-01 0.6254435530634D-01 0.6398335403999D-01 0.6545505993995D-01 + 0.6696020218655D-01 0.6849952571098D-01 0.7007379151743D-01 0.7168377701120D-01 + 0.7333027633278D-01 0.7501410069815D-01 0.7673607874510D-01 0.7849705688600D-01 + 0.8029789966680D-01 0.8213949013254D-01 0.8402273019940D-01 0.8594854103333D-01 + 0.8791786343540D-01 0.8993165823397D-01 0.9199090668367D-01 0.9409661087142D-01 + 0.9624979412937D-01 0.9845150145513D-01 0.1007027999391D+00 0.1030047791989D+00 + 0.1053585518218D+00 0.1077652538139D+00 0.1102260450570D+00 0.1127421097734D+00 + 0.1153146569983D+00 0.1179449210595D+00 0.1206341620656D+00 0.1233836664013D+00 + 0.1261947472319D+00 0.1290687450145D+00 0.1320070280181D+00 0.1350109928517D+00 + 0.1380820650005D+00 0.1412216993709D+00 0.1444313808430D+00 0.1477126248321D+00 + 0.1510669778590D+00 0.1544960181276D+00 0.1580013561123D+00 0.1615846351532D+00 + 0.1652475320606D+00 0.1689917577271D+00 0.1728190577499D+00 0.1767312130600D+00 + 0.1807300405618D+00 0.1848173937804D+00 0.1889951635180D+00 0.1932652785189D+00 + 0.1976297061436D+00 0.2020904530510D+00 0.2066495658902D+00 0.2113091320000D+00 + 0.2160712801176D+00 0.2209381810962D+00 0.2259120486306D+00 0.2309951399915D+00 + 0.2361897567686D+00 0.2414982456214D+00 0.2469229990389D+00 0.2524664561077D+00 + 0.2581311032870D+00 0.2639194751932D+00 0.2698341553913D+00 0.2758777771940D+00 + 0.2820530244695D+00 0.2883626324551D+00 0.2948093885796D+00 0.3013961332915D+00 + 0.3081257608951D+00 0.3150012203926D+00 0.3220255163328D+00 0.3292017096659D+00 + 0.3365329186046D+00 0.3440223194900D+00 0.3516731476641D+00 0.3594886983458D+00 + 0.3674723275128D+00 0.3756274527871D+00 0.3839575543251D+00 0.3924661757104D+00 + 0.4011569248503D+00 0.4100334748751D+00 0.4190995650391D+00 0.4283590016238D+00 + 0.4378156588421D+00 0.4474734797432D+00 0.4573364771174D+00 0.4674087344011D+00 + 0.4776944065798D+00 0.4881977210900D+00 0.4989229787185D+00 0.5098745544982D+00 + 0.5210568986003D+00 0.5324745372220D+00 0.5441320734686D+00 0.5560341882286D+00 + 0.5681856410426D+00 0.5805912709635D+00 0.5932559974075D+00 0.6061848209955D+00 + 0.6193828243825D+00 0.6328551730759D+00 0.6466071162395D+00 0.6606439874833D+00 + 0.6749712056379D+00 0.6895942755113D+00 0.7045187886282D+00 0.7197504239485D+00 + 0.7352949485665D+00 0.7511582183855D+00 0.7673461787702D+00 0.7838648651729D+00 + 0.8007204037317D+00 0.8179190118414D+00 0.8354669986931D+00 0.8533707657807D+00 + 0.8716368073748D+00 0.8902717109592D+00 0.9092821576301D+00 0.9286749224550D+00 + 0.9484568747892D+00 0.9686349785485D+00 0.9892162924350D+00 0.1010207970114D+01 + 0.1031617260341D+01 0.1053451507033D+01 0.1075718149284D+01 0.1098424721324D+01 + 0.1121578852417D+01 0.1145188266689D+01 0.1169260782896D+01 0.1193804314122D+01 + 0.1218826867398D+01 0.1244336543253D+01 0.1270341535182D+01 0.1296850129033D+01 + 0.1323870702311D+01 0.1351411723387D+01 0.1379481750625D+01 0.1408089431407D+01 + 0.1437243501060D+01 0.1466952781681D+01 0.1497226180855D+01 0.1528072690268D+01 + 0.1559501384198D+01 0.1591521417893D+01 0.1624142025826D+01 0.1657372519825D+01 + 0.1691222287071D+01 0.1725700787962D+01 0.1760817553840D+01 0.1796582184571D+01 + 0.1833004345980D+01 0.1870093767134D+01 0.1907860237463D+01 0.1946313603731D+01 + 0.1985463766823D+01 0.2025320678379D+01 0.2065894337237D+01 0.2107194785706D+01 + 0.2149232105642D+01 0.2192016414346D+01 0.2235557860254D+01 0.2279866618430D+01 + 0.2324952885854D+01 0.2370826876498D+01 0.2417498816181D+01 0.2464978937205D+01 + 0.2513277472767D+01 0.2562404651129D+01 0.2612370689560D+01 0.2663185788025D+01 + 0.2714860122637D+01 0.2767403838844D+01 0.2820827044362D+01 0.2875139801847D+01 + 0.2930352121292D+01 0.2986473952155D+01 0.3043515175199D+01 0.3101485594064D+01 + 0.3160394926530D+01 0.3220252795505D+01 0.3281068719700D+01 0.3342852104013D+01 + 0.3405612229598D+01 0.3469358243625D+01 0.3534099148732D+01 0.3599843792145D+01 + 0.3666600854486D+01 0.3734378838255D+01 0.3803186055977D+01 0.3873030618024D+01 + 0.3943920420098D+01 0.4015863130380D+01 0.4088866176346D+01 0.4162936731230D+01 + 0.4238081700161D+01 0.4314307705947D+01 0.4391621074527D+01 0.4470027820069D+01 + 0.4549533629736D+01 0.4630143848113D+01 0.4711863461283D+01 0.4794697080578D+01 + 0.4878648925994D+01 0.4963722809267D+01 0.5049922116636D+01 0.5137249791268D+01 + 0.5225708315377D+01 0.5315299692030D+01 0.5406025426645D+01 0.5497886508194D+01 + 0.5590883390119D+01 0.5685015970968D+01 0.5780283574761D+01 0.5876684931099D+01 + 0.5974218155027D+01 0.6072880726661D+01 0.6172669470607D+01 0.6273580535158D+01 + 0.6375609371321D+01 0.6478750711665D+01 0.6582998549021D+01 0.6688346115044D+01 + 0.6794785858674D+01 0.6902309424504D+01 0.7010907631078D+01 0.7120570449161D+01 + 0.7231286979987D+01 0.7343045433523D+01 0.7455833106781D+01 0.7569636362200D+01 + 0.7684440606138D+01 0.7800230267503D+01 0.7916988776564D+01 0.8034698543969D+01 + 0.8153340940023D+01 0.8272896274252D+01 0.8393343775304D+01 0.8514661571228D+01 + 0.8636826670177D+01 0.8759814941579D+01 0.8883601097830D+01 0.9008158676554D+01 + 0.9133460023488D+01 0.9259476276042D+01 0.9386177347589D+01 0.9513531912544D+01 + 0.9641507392293D+01 0.9770069942032D+01 0.9899184438573D+01 0.1002881446919D+02 + 0.1015892232155D+02 0.1028946897485D+02 0.1042041409214D+02 0.1055171601401D+02 + 0.1068333175358D+02 0.1081521699303D+02 0.1094732608155D+02 0.1107961203504D+02 + 0.1121202653730D+02 0.1134451994313D+02 0.1147704128317D+02 0.1160953827069D+02 + 0.1174195731037D+02 0.1187424350912D+02 0.1200634068907D+02 0.1213819140280D+02 + 0.1226973695085D+02 0.1240091740164D+02 0.1253167161388D+02 0.1266193726146D+02 + 0.1279165086105D+02 0.1292074780233D+02 0.1304916238109D+02 0.1317682783507D+02 + 0.1330367638281D+02 0.1342963926552D+02 0.1355464679190D+02 0.1367862838623D+02 + 0.1380151263958D+02 0.1392322736426D+02 0.1404369965168D+02 0.1416285593344D+02 + 0.1428062204598D+02 0.1439692329856D+02 0.1451168454482D+02 0.1462483025783D+02 + 0.1473628460874D+02 0.1484597154897D+02 0.1495381489602D+02 0.1505973842287D+02 + 0.1516366595105D+02 0.1526552144717D+02 0.1536522912325D+02 0.1546271354038D+02 + 0.1555789971612D+02 0.1565071323525D+02 0.1574108036407D+02 0.1582892816796D+02 + 0.1591418463238D+02 0.1599677878699D+02 0.1607664083298D+02 0.1615370227341D+02 + 0.1622789604640D+02 0.1629915666117D+02 0.1636742033673D+02 0.1643262514293D+02 + 0.1649471114400D+02 0.1655362054401D+02 0.1660929783443D+02 0.1666168994330D+02 + 0.1671074638592D+02 0.1675641941678D+02 0.1679866418244D+02 0.1683743887520D+02 + 0.1687270488708D+02 0.1690442696401D+02 0.1693257335981D+02 0.1695711598955D+02 + 0.1697803058217D+02 0.1699529683168D+02 0.1700889854691D+02 0.1701882379909D+02 + 0.1702506506710D+02 0.1702761937980D+02 0.1702648845513D+02 0.1702167883544D+02 + 0.1701320201866D+02 0.1700107458474D+02 0.1698531831701D+02 0.1696596031787D+02 + 0.1694303311832D+02 0.1691657478089D+02 0.1688662899533D+02 0.1685324516669D+02 + 0.1681647849506D+02 0.1677639004673D+02 0.1673304681590D+02 0.1668652177669D+02 + 0.1663689392474D+02 0.1658424830799D+02 0.1652867604598D+02 0.1647027433734D+02 + 0.1640914645475D+02 0.1634540172704D+02 0.1627915550787D+02 0.1621052913049D+02 + 0.1613964984821D+02 0.1606665076007D+02 0.1599167072129D+02 0.1591485423819D+02 + 0.1583635134714D+02 0.1575631747721D+02 0.1567491329620D+02 0.1559230453992D+02 + 0.1550866182419D+02 0.1542416043968D+02 0.1533898012921D+02 0.1525330484749D+02 + 0.1516732250321D+02 0.1508122468346D+02 0.1499520636047D+02 0.1490946558083D+02 + 0.1482420313724D+02 0.1473962222302D+02 0.1465592806965D+02 0.1457332756760D+02 + 0.1449202887084D+02 0.1441224098550D+02 0.1433417334315D+02 0.1425803535923D+02 + 0.1418403597732D+02 0.1411238320000D+02 0.1404328360686D+02 0.1397694186082D+02 + 0.1391356020333D+02 0.1385333793975D+02 0.1379647091570D+02 0.1374315098539D+02 + 0.1369356547412D+02 0.1364789663433D+02 0.1360632109829D+02 0.1356900932792D+02 + 0.1353612506335D+02 0.1350782477177D+02 0.1348425709813D+02 0.1346556231916D+02 + 0.1345187180262D+02 0.1344330747319D+02 0.1343998128703D+02 0.1344199471659D+02 + 0.1344943824759D+02 0.1346239089000D+02 0.1348091970488D+02 0.1350507934900D+02 + 0.1353491163910D+02 0.1357044513773D+02 0.1361169476260D+02 0.1365866142131D+02 + 0.1371133167329D+02 0.1376967742104D+02 0.1383365563218D+02 0.1390320809443D+02 + 0.1397826120509D+02 0.1405872579684D+02 0.1414449700138D+02 0.1423545415271D+02 + 0.1433146073132D+02 0.1443236435097D+02 0.1453799678912D+02 0.1464817406258D+02 + 0.1476269654917D+02 0.1488134915674D+02 0.1500390154012D+02 0.1513010836712D+02 + 0.1525970963388D+02 0.1539243103024D+02 0.1552798435550D+02 0.1566606798456D+02 + 0.1580636738467D+02 0.1594855568243D+02 0.1609229428090D+02 0.1623723352612D+02 + 0.1638301342255D+02 0.1652926439630D+02 0.1667560810533D+02 0.1682165829516D+02 + 0.1696702169871D+02 0.1711129897862D+02 0.1725408571012D+02 0.1739497340253D+02 + 0.1753355055702D+02 0.1766940375816D+02 0.1780211879688D+02 0.1793128182162D+02 + 0.1805648051510D+02 0.1817730529317D+02 0.1829335052263D+02 0.1840421575438D+02 + 0.1850950696829D+02 0.1860883782595D+02 0.1870183092731D+02 0.1878811906717D+02 + 0.1886734648736D+02 0.1893917012012D+02 0.1900326081854D+02 0.1905930456928D+02 + 0.1910700368334D+02 0.1914607796003D+02 0.1917626581959D+02 0.1919732539992D+02 + 0.1920903561254D+02 0.1921119715340D+02 0.1920363346380D+02 0.1918619163678D+02 + 0.1915874326482D+02 0.1912118522412D+02 0.1907344039140D+02 0.1901545828904D+02 + 0.1894721565456D+02 0.1886871693063D+02 0.1877999467201D+02 0.1868110986603D+02 + 0.1857215216342D+02 0.1845324001656D+02 0.1832452072264D+02 0.1818617036923D+02 + 0.1803839368037D+02 0.1788142376145D+02 0.1771552174157D+02 0.1754097631241D+02 + 0.1735810316307D+02 0.1716724431072D+02 0.1696876732726D+02 0.1676306446281D+02 + 0.1655055166703D+02 0.1633166751000D+02 0.1610687200455D+02 0.1587664533276D+02 + 0.1564148647947D+02 0.1540191177642D+02 0.1515845336085D+02 0.1491165755304D+02 + 0.1466208315779D+02 0.1441029969504D+02 0.1415688556557D+02 0.1390242615798D+02 + 0.1364751190365D+02 0.1339273628671D+02 0.1313869381659D+02 0.1288597797078D+02 + 0.1263517911606D+02 0.1238688241664D+02 0.1214166573770D+02 0.1190009755337D+02 + 0.1166273486824D+02 0.1143012116131D+02 0.1120278436204D+02 0.1098123486738D+02 + 0.1076596360934D+02 0.1055744018218D+02 0.1035611103824D+02 0.1016239776140D+02 + 0.9976695426757D+01 0.9799371054791D+01 0.9630762168193D+01 0.9471175458851D+01 + 0.9320885572164D+01 0.9180134015366D+01 0.9049128195975D+01 0.8928040595889D+01 + 0.8817008086055D+01 0.8716131385943D+01 0.8625474671405D+01 0.8545065333743D+01 + 0.8474893892107D+01 0.8414914060556D+01 0.8365042970373D+01 0.8325161547417D+01 + 0.8295115043532D+01 0.8274713720226D+01 0.8263733682072D+01 0.8261917856473D+01 + 0.8268977115699D+01 0.8284591536320D+01 0.8308411790443D+01 0.8340060662421D+01 + 0.8379134684056D+01 0.8425205880594D+01 0.8477823619242D+01 0.8536516551320D+01 + 0.8600794638614D+01 0.8670151254010D+01 0.8744065346036D+01 0.8822003656545D+01 + 0.8903422980466D+01 0.8987772456234D+01 0.9074495875384D+01 0.9163033999606D+01 + 0.9252826873533D+01 0.9343316121564D+01 0.9433947217114D+01 0.9524171712849D+01 + 0.9613449420751D+01 0.9701250531156D+01 0.9787057660335D+01 0.9870367816646D+01 + 0.9950694275862D+01 0.1002756835684D+02 0.1010054108939D+02 0.1016918476702D+02 + 0.1023309437768D+02 0.1029188890698D+02 0.1034521250863D+02 0.1039273553809D+02 + 0.1043415544617D+02 0.1046919753037D+02 0.1049761554226D+02 0.1051919215074D+02 + 0.1053373926129D+02 0.1054109819251D+02 0.1054113971220D+02 0.1053376393567D+02 + 0.1051890009012D+02 0.1049650614953D+02 0.1046656834505D+02 0.1042910055671D+02 + 0.1038414359287D+02 0.1033176436400D+02 0.1027205495831D+02 0.1020513162681D+02 + 0.1013113368577D+02 0.1005022234485D+02 0.9962579469377D+01 0.9868406285310D+01 + 0.9767922035458D+01 0.9661362595664D+01 0.9548979059465D+01 0.9431036299674D+01 + 0.9307811515177D+01 0.9179592770975D+01 0.9046677539281D+01 0.8909371249138D+01 + 0.8767985851711D+01 0.8622838408000D+01 0.8474249705348D+01 0.8322542908661D+01 + 0.8168042251829D+01 0.8011071774365D+01 0.7851954107810D+01 0.7691009315975D+01 + 0.7528553792590D+01 0.7364899219476D+01 0.7200351587865D+01 0.7035210285005D+01 + 0.6869767247760D+01 0.6704306184445D+01 0.6539101865709D+01 0.6374419484870D+01 + 0.6210514087691D+01 0.6047630071250D+01 0.5886000751154D+01 0.5725847996050D+01 + 0.5567381928080D+01 0.5410800687616D+01 0.5256290260390D+01 0.5104024364860D+01 + 0.4954164397495D+01 0.4806859433420D+01 0.4662246279750D+01 0.4520449578777D+01 + 0.4381581958080D+01 0.4245744224515D+01 0.4113025598995D+01 0.3983503988922D+01 + 0.3857246295067D+01 0.3734308749755D+01 0.3614737283146D+01 0.3498567914486D+01 + 0.3385827165216D+01 0.3276532490893D+01 0.3170692728944D+01 0.3068308559367D+01 + 0.2969372975579D+01 0.2873871762726D+01 0.2781783980867D+01 0.2693082450610D+01 + 0.2607734238857D+01 0.2525701142481D+01 0.2446940167925D+01 0.2371404004790D+01 + 0.2299041491714D+01 0.2229798072931D+01 0.2163616244086D+01 0.2100435986031D+01 + 0.2040195185468D+01 0.1982830041479D+01 0.1928275457110D+01 0.1876465415340D+01 + 0.1827333338908D+01 0.1780812433583D+01 0.1736836014647D+01 0.1695337816433D+01 + 0.1656252284921D+01 0.1619514853489D+01 0.1585062202027D+01 0.1552832499731D+01 + 0.1522765631966D+01 0.1494803411685D+01 0.1468889775956D+01 0.1444970968218D+01 + 0.1422995706931D+01 0.1402915341345D+01 0.1384683995123D+01 0.1368258698612D+01 + 0.1353599510520D+01 0.1340669629812D+01 0.1329435498575D+01 0.1319866896622D+01 + 0.1311937028546D+01 0.1305622603887D+01 0.1300903911023D+01 0.1297764885307D+01 + 0.1296193171885D+01 0.1296180183508D+01 0.1297721153538D+01 0.1300815184163D+01 + 0.1305465289703D+01 0.1311678434655D+01 0.1319465565906D+01 0.1328841638284D+01 + 0.1339825632325D+01 0.1352440020066D+01 0.1366814118169D+01 0.1383075557911D+01 + 0.1401251274517D+01 0.1421373963474D+01 0.1443482175527D+01 0.1467620429267D+01 + 0.1493839341415D+01 0.1522195774849D+01 0.1552753004359D+01 + 7 1019 + 1 0 -1 -600.92936 + 2 0 -1 -70.75637 + 2 1 1 -61.64173 + 2 1 -2 -60.36011 + 3 0 -1 -6.90508 + 3 1 1 -4.13505 + 3 1 -2 -3.97253 + 0.2785348039799D-04 0.2850864985091D-04 0.2917922677693D-04 0.2986557338784D-04 + 0.3056806040623D-04 0.3128706726531D-04 0.3202298231346D-04 0.3277620302344D-04 + 0.3354713620669D-04 0.3433619823250D-04 0.3514381525243D-04 0.3597042342988D-04 + 0.3681646917518D-04 0.3768240938605D-04 0.3856871169382D-04 0.3947585471533D-04 + 0.4040432831076D-04 0.4135463384754D-04 0.4232728447044D-04 0.4332280537788D-04 + 0.4434173410491D-04 0.4538462081264D-04 0.4645202858458D-04 0.4754453372980D-04 + 0.4866272609337D-04 0.4980720937385D-04 0.5097860144845D-04 0.5217753470559D-04 + 0.5340465638544D-04 0.5466062892831D-04 0.5594613033122D-04 0.5726185451292D-04 + 0.5860851168728D-04 0.5998682874563D-04 0.6139754964787D-04 0.6284143582287D-04 + 0.6431926657818D-04 0.6583183951932D-04 0.6737997097897D-04 0.6896449645610D-04 + 0.7058627106547D-04 0.7224616999759D-04 0.7394508898947D-04 0.7568394480642D-04 + 0.7746367573504D-04 0.7928524208785D-04 0.8114962671967D-04 0.8305783555606D-04 + 0.8501089813418D-04 0.8700986815631D-04 0.8905582405622D-04 0.9114986957892D-04 + 0.9329313437388D-04 0.9548677460216D-04 0.9773197355772D-04 0.1000299423033D-03 + 0.1023819203211D-03 0.1047891761788D-03 0.1072530082109D-03 0.1097747452164D-03 + 0.1123557471724D-03 0.1149974059643D-03 0.1177011461338D-03 0.1204684256435D-03 + 0.1233007366599D-03 0.1261996063543D-03 0.1291665977232D-03 0.1322033104265D-03 + 0.1353113816468D-03 0.1384924869679D-03 0.1417483412738D-03 0.1450806996689D-03 + 0.1484913584199D-03 0.1519821559194D-03 0.1555549736718D-03 0.1592117373030D-03 + 0.1629544175925D-03 0.1667850315308D-03 0.1707056434008D-03 0.1747183658844D-03 + 0.1788253611949D-03 0.1830288422366D-03 0.1873310737905D-03 0.1917343737279D-03 + 0.1962411142527D-03 0.2008537231720D-03 0.2055746851973D-03 0.2104065432749D-03 + 0.2153518999484D-03 0.2204134187520D-03 0.2255938256369D-03 0.2308959104308D-03 + 0.2363225283316D-03 0.2418766014350D-03 0.2475611202992D-03 0.2533791455447D-03 + 0.2593338094921D-03 0.2654283178377D-03 0.2716659513684D-03 0.2780500677164D-03 + 0.2845841031545D-03 0.2912715744338D-03 0.2981160806633D-03 0.3051213052343D-03 + 0.3122910177887D-03 0.3196290762334D-03 0.3271394288016D-03 0.3348261161622D-03 + 0.3426932735779D-03 0.3507451331137D-03 0.3589860258965D-03 0.3674203844279D-03 + 0.3760527449499D-03 0.3848877498660D-03 0.3939301502186D-03 0.4031848082239D-03 + 0.4126566998654D-03 0.4223509175482D-03 0.4322726728145D-03 0.4424272991222D-03 + 0.4528202546880D-03 0.4634571253967D-03 0.4743436277778D-03 0.4854856120511D-03 + 0.4968890652433D-03 0.5085601143763D-03 0.5205050297303D-03 0.5327302281814D-03 + 0.5452422766177D-03 0.5580478954340D-03 0.5711539621071D-03 0.5845675148553D-03 + 0.5982957563806D-03 0.6123460576999D-03 0.6267259620628D-03 0.6414431889615D-03 + 0.6565056382328D-03 0.6719213942557D-03 0.6876987302450D-03 0.7038461126454D-03 + 0.7203722056267D-03 0.7372858756825D-03 0.7545961963362D-03 0.7723124529547D-03 + 0.7904441476743D-03 0.8090010044395D-03 0.8279929741591D-03 0.8474302399803D-03 + 0.8673232226854D-03 0.8876825862128D-03 0.9085192433053D-03 0.9298443612885D-03 + 0.9516693679833D-03 0.9740059577534D-03 0.9968660976936D-03 0.1020262033960D-02 + 0.1044206298245D-02 0.1068711714404D-02 0.1093791405233D-02 0.1119458799402D-02 + 0.1145727638549D-02 0.1172611984533D-02 0.1200126226866D-02 0.1228285090299D-02 + 0.1257103642593D-02 0.1286597302470D-02 0.1316781847740D-02 0.1347673423616D-02 + 0.1379288551225D-02 0.1411644136313D-02 0.1444757478139D-02 0.1478646278594D-02 + 0.1513328651505D-02 0.1548823132173D-02 0.1585148687119D-02 0.1622324724052D-02 + 0.1660371102071D-02 0.1699308142098D-02 0.1739156637551D-02 0.1779937865258D-02 + 0.1821673596624D-02 0.1864386109050D-02 0.1908098197620D-02 0.1952833187045D-02 + 0.1998614943887D-02 0.2045467889061D-02 0.2093417010621D-02 0.2142487876835D-02 + 0.2192706649566D-02 0.2244100097950D-02 0.2296695612391D-02 0.2350521218871D-02 + 0.2405605593589D-02 0.2461978077930D-02 0.2519668693780D-02 0.2578708159180D-02 + 0.2639127904347D-02 0.2700960088050D-02 0.2764237614363D-02 0.2828994149797D-02 + 0.2895264140816D-02 0.2963082831762D-02 0.3032486283173D-02 0.3103511390526D-02 + 0.3176195903398D-02 0.3250578445064D-02 0.3326698532539D-02 0.3404596597070D-02 + 0.3484314005096D-02 0.3565893079675D-02 0.3649377122404D-02 0.3734810435823D-02 + 0.3822238346332D-02 0.3911707227623D-02 0.4003264524637D-02 0.4096958778068D-02 + 0.4192839649407D-02 0.4290957946558D-02 0.4391365650032D-02 0.4494115939719D-02 + 0.4599263222270D-02 0.4706863159091D-02 0.4816972694967D-02 0.4929650087320D-02 + 0.5044954936134D-02 0.5162948214539D-02 0.5283692300087D-02 0.5407251006722D-02 + 0.5533689617469D-02 0.5663074917849D-02 0.5795475230042D-02 0.5930960447811D-02 + 0.6069602072201D-02 0.6211473248042D-02 0.6356648801255D-02 0.6505205276989D-02 + 0.6657220978610D-02 0.6812776007555D-02 0.6971952304061D-02 0.7134833688812D-02 + 0.7301505905495D-02 0.7472056664307D-02 0.7646575686420D-02 0.7825154749426D-02 + 0.8007887733795D-02 0.8194870670349D-02 0.8386201788783D-02 0.8581981567262D-02 + 0.8782312783101D-02 0.8987300564565D-02 0.9197052443804D-02 0.9411678410950D-02 + 0.9631290969401D-02 0.9856005192321D-02 0.1008593878036D-01 0.1032121212066D-01 + 0.1056194834714D-01 0.1080827340207D-01 0.1106031609904D-01 0.1131820818725D-01 + 0.1158208441725D-01 0.1185208260805D-01 0.1212834371572D-01 0.1241101190349D-01 + 0.1270023461334D-01 0.1299616263918D-01 0.1329895020152D-01 0.1360875502388D-01 + 0.1392573841078D-01 0.1425006532736D-01 0.1458190448082D-01 0.1492142840354D-01 + 0.1526881353800D-01 0.1562424032353D-01 0.1598789328488D-01 0.1635996112275D-01 + 0.1674063680621D-01 0.1713011766706D-01 0.1752860549628D-01 0.1793630664247D-01 + 0.1835343211238D-01 0.1878019767364D-01 0.1921682395954D-01 0.1966353657619D-01 + 0.2012056621177D-01 0.2058814874823D-01 0.2106652537525D-01 0.2155594270663D-01 + 0.2205665289910D-01 0.2256891377368D-01 0.2309298893950D-01 0.2362914792023D-01 + 0.2417766628321D-01 0.2473882577114D-01 0.2531291443667D-01 0.2590022677960D-01 + 0.2650106388708D-01 0.2711573357661D-01 0.2774455054204D-01 0.2838783650253D-01 + 0.2904592035462D-01 0.2971913832738D-01 0.3040783414076D-01 0.3111235916718D-01 + 0.3183307259638D-01 0.3257034160364D-01 0.3332454152147D-01 0.3409605601466D-01 + 0.3488527725896D-01 0.3569260612339D-01 0.3651845235609D-01 0.3736323477404D-01 + 0.3822738145646D-01 0.3911132994221D-01 0.4001552743100D-01 0.4094043098863D-01 + 0.4188650775637D-01 0.4285423516441D-01 0.4384410114952D-01 0.4485660437705D-01 + 0.4589225446724D-01 0.4695157222597D-01 0.4803508987999D-01 0.4914335131680D-01 + 0.5027691232908D-01 0.5143634086397D-01 0.5262221727702D-01 0.5383513459112D-01 + 0.5507569876040D-01 0.5634452893907D-01 0.5764225775551D-01 0.5896953159144D-01 + 0.6032701086645D-01 0.6171537032787D-01 0.6313529934610D-01 0.6458750221537D-01 + 0.6607269846028D-01 0.6759162314785D-01 0.6914502720547D-01 0.7073367774467D-01 + 0.7235835839078D-01 0.7401986961872D-01 0.7571902909479D-01 0.7745667202470D-01 + 0.7923365150794D-01 0.8105083889839D-01 0.8290912417146D-01 0.8480941629777D-01 + 0.8675264362336D-01 0.8873975425672D-01 0.9077171646250D-01 0.9284951906214D-01 + 0.9497417184143D-01 0.9714670596512D-01 0.9936817439861D-01 0.1016396523369D+00 + 0.1039622376406D+00 0.1063370512799D+00 0.1087652377849D+00 0.1112479657046D+00 + 0.1137864280726D+00 0.1163818428813D+00 0.1190354535626D+00 0.1217485294780D+00 + 0.1245223664148D+00 0.1273582870922D+00 0.1302576416734D+00 0.1332218082873D+00 + 0.1362521935575D+00 0.1393502331400D+00 0.1425173922687D+00 0.1457551663094D+00 + 0.1490650813222D+00 0.1524486946321D+00 0.1559075954084D+00 0.1594434052521D+00 + 0.1630577787924D+00 0.1667524042908D+00 0.1705290042550D+00 0.1743893360603D+00 + 0.1783351925803D+00 0.1823684028262D+00 0.1864908325939D+00 0.1907043851210D+00 + 0.1950110017514D+00 0.1994126626092D+00 0.2039113872805D+00 0.2085092355047D+00 + 0.2132083078736D+00 0.2180107465389D+00 0.2229187359293D+00 0.2279345034746D+00 + 0.2330603203389D+00 0.2382985021623D+00 0.2436514098099D+00 0.2491214501298D+00 + 0.2547110767190D+00 0.2604227906963D+00 0.2662591414843D+00 0.2722227275978D+00 + 0.2783161974410D+00 0.2845422501104D+00 0.2909036362063D+00 0.2974031586510D+00 + 0.3040436735129D+00 0.3108280908381D+00 0.3177593754880D+00 0.3248405479832D+00 + 0.3320746853529D+00 0.3394649219899D+00 0.3470144505113D+00 0.3547265226235D+00 + 0.3626044499927D+00 0.3706516051183D+00 0.3788714222121D+00 0.3872673980788D+00 + 0.3958430930017D+00 0.4046021316296D+00 0.4135482038664D+00 0.4226850657628D+00 + 0.4320165404081D+00 0.4415465188242D+00 0.4512789608585D+00 0.4612178960766D+00 + 0.4713674246546D+00 0.4817317182683D+00 0.4923150209819D+00 0.5031216501316D+00 + 0.5141559972066D+00 0.5254225287256D+00 0.5369257871068D+00 0.5486703915328D+00 + 0.5606610388075D+00 0.5729025042060D+00 0.5853996423141D+00 0.5981573878595D+00 + 0.6111807565305D+00 0.6244748457836D+00 0.6380448356375D+00 0.6518959894534D+00 + 0.6660336546986D+00 0.6804632636948D+00 0.6951903343474D+00 0.7102204708555D+00 + 0.7255593644017D+00 0.7412127938194D+00 0.7571866262360D+00 0.7734868176917D+00 + 0.7901194137312D+00 0.8070905499665D+00 0.8244064526103D+00 0.8420734389770D+00 + 0.8600979179504D+00 0.8784863904150D+00 0.8972454496511D+00 0.9163817816891D+00 + 0.9359021656229D+00 0.9558134738795D+00 0.9761226724427D+00 0.9968368210285D+00 + 0.1017963073210D+01 0.1039508676490D+01 0.1061480972318D+01 0.1083887396047D+01 + 0.1106735476836D+01 0.1130032837482D+01 0.1153787194190D+01 0.1178006356277D+01 + 0.1202698225795D+01 0.1227870797093D+01 0.1253532156286D+01 0.1279690480659D+01 + 0.1306354037973D+01 0.1333531185694D+01 0.1361230370125D+01 0.1389460125447D+01 + 0.1418229072662D+01 0.1447545918436D+01 0.1477419453830D+01 0.1507858552937D+01 + 0.1538872171388D+01 0.1570469344759D+01 0.1602659186847D+01 0.1635450887823D+01 + 0.1668853712259D+01 0.1702876997023D+01 0.1737530149033D+01 0.1772822642871D+01 + 0.1808764018254D+01 0.1845363877352D+01 0.1882631881947D+01 0.1920577750443D+01 + 0.1959211254701D+01 0.1998542216711D+01 0.2038580505087D+01 0.2079336031385D+01 + 0.2120818746238D+01 0.2163038635298D+01 0.2206005714988D+01 0.2249730028055D+01 + 0.2294221638918D+01 0.2339490628806D+01 0.2385547090684D+01 0.2432401123957D+01 + 0.2480062828949D+01 0.2528542301159D+01 0.2577849625270D+01 0.2627994868928D+01 + 0.2678988076269D+01 0.2730839261202D+01 0.2783558400427D+01 0.2837155426198D+01 + 0.2891640218824D+01 0.2947022598886D+01 0.3003312319193D+01 0.3060519056444D+01 + 0.3118652402616D+01 0.3177721856052D+01 0.3237736812262D+01 0.3298706554417D+01 + 0.3360640243548D+01 0.3423546908429D+01 0.3487435435157D+01 0.3552314556408D+01 + 0.3618192840379D+01 0.3685078679409D+01 0.3752980278273D+01 0.3821905642142D+01 + 0.3891862564227D+01 0.3962858613070D+01 0.4034901119519D+01 0.4107997163357D+01 + 0.4182153559591D+01 0.4257376844407D+01 0.4333673260788D+01 0.4411048743785D+01 + 0.4489508905456D+01 0.4569059019465D+01 0.4649704005343D+01 0.4731448412420D+01 + 0.4814296403414D+01 0.4898251737705D+01 0.4983317754274D+01 0.5069497354326D+01 + 0.5156792983594D+01 0.5245206614333D+01 0.5334739727019D+01 0.5425393291737D+01 + 0.5517167749297D+01 0.5610062992057D+01 0.5704078344485D+01 0.5799212543462D+01 + 0.5895463718334D+01 0.5992829370731D+01 0.6091306354173D+01 0.6190890853456D+01 + 0.6291578363859D+01 0.6393363670174D+01 0.6496240825583D+01 0.6600203130395D+01 + 0.6705243110671D+01 0.6811352496752D+01 0.6918522201725D+01 0.7026742299830D+01 + 0.7136002004857D+01 0.7246289648544D+01 0.7357592659012D+01 0.7469897539266D+01 + 0.7583189845790D+01 0.7697454167276D+01 0.7812674103512D+01 0.7928832244472D+01 + 0.8045910149650D+01 0.8163888327659D+01 0.8282746216162D+01 0.8402462162153D+01 + 0.8523013402647D+01 0.8644376045826D+01 0.8766525052671D+01 0.8889434219156D+01 + 0.9013076159033D+01 0.9137422287266D+01 0.9262442804180D+01 0.9388106680362D+01 + 0.9514381642386D+01 0.9641234159419D+01 0.9768629430760D+01 0.9896531374387D+01 + 0.1002490261657D+02 0.1015370448260D+02 0.1028289698875D+02 0.1041243883547D+02 + 0.1054228740194D+02 0.1067239874200D+02 0.1080272758161D+02 0.1093322731781D+02 + 0.1106385001935D+02 0.1119454642901D+02 0.1132526596767D+02 0.1145595674027D+02 + 0.1158656554370D+02 0.1171703787669D+02 0.1184731795179D+02 0.1197734870953D+02 + 0.1210707183480D+02 0.1223642777560D+02 0.1236535576413D+02 0.1249379384041D+02 + 0.1262167887843D+02 0.1274894661497D+02 0.1287553168105D+02 0.1300136763624D+02 + 0.1312638700578D+02 0.1325052132060D+02 0.1337370116039D+02 0.1349585619965D+02 + 0.1361691525691D+02 0.1373680634710D+02 0.1385545673713D+02 0.1397279300475D+02 + 0.1408874110083D+02 0.1420322641484D+02 0.1431617384391D+02 0.1442750786520D+02 + 0.1453715261184D+02 0.1464503195231D+02 0.1475106957334D+02 0.1485518906631D+02 + 0.1495731401723D+02 0.1505736810017D+02 0.1515527517423D+02 0.1525095938400D+02 + 0.1534434526342D+02 0.1543535784313D+02 0.1552392276115D+02 0.1560996637684D+02 + 0.1569341588814D+02 0.1577419945199D+02 0.1585224630775D+02 0.1592748690368D+02 + 0.1599985302622D+02 0.1606927793202D+02 0.1613569648255D+02 0.1619904528121D+02 + 0.1625926281269D+02 0.1631628958438D+02 0.1637006826986D+02 0.1642054385387D+02 + 0.1646766377903D+02 0.1651137809360D+02 0.1655163960043D+02 0.1658840400653D+02 + 0.1662163007325D+02 0.1665127976653D+02 0.1667731840709D+02 0.1669971482024D+02 + 0.1671844148480D+02 0.1673347468105D+02 0.1674479463705D+02 0.1675238567325D+02 + 0.1675623634475D+02 0.1675633958099D+02 0.1675269282236D+02 0.1674529815328D+02 + 0.1673416243144D+02 0.1671929741260D+02 0.1670071987060D+02 0.1667845171207D+02 + 0.1665252008529D+02 0.1662295748295D+02 0.1658980183799D+02 0.1655309661229D+02 + 0.1651289087761D+02 0.1646923938826D+02 0.1642220264504D+02 0.1637184694991D+02 + 0.1631824445090D+02 0.1626147317681D+02 0.1620161706111D+02 0.1613876595461D+02 + 0.1607301562647D+02 0.1600446775294D+02 0.1593322989356D+02 0.1585941545417D+02 + 0.1578314363649D+02 0.1570453937377D+02 0.1562373325211D+02 0.1554086141713D+02 + 0.1545606546563D+02 0.1536949232194D+02 0.1528129409862D+02 0.1519162794140D+02 + 0.1510065585794D+02 0.1500854453042D+02 0.1491546511167D+02 0.1482159300489D+02 + 0.1472710762669D+02 0.1463219215373D+02 0.1453703325262D+02 0.1444182079357D+02 + 0.1434674754757D+02 0.1425200886753D+02 0.1415780235347D+02 0.1406432750219D+02 + 0.1397178534157D+02 0.1388037805021D+02 0.1379030856261D+02 0.1370178016055D+02 + 0.1361499605126D+02 0.1353015893305D+02 0.1344747054907D+02 0.1336713123002D+02 + 0.1328933942665D+02 0.1321429123299D+02 0.1314217990124D+02 0.1307319534911D+02 + 0.1300752366174D+02 0.1294534658758D+02 0.1288684103098D+02 0.1283217854213D+02 + 0.1278152480572D+02 0.1273503912963D+02 0.1269287393525D+02 0.1265517425070D+02 + 0.1262207720857D+02 0.1259371154963D+02 0.1257019713418D+02 0.1255164446257D+02 + 0.1253815420652D+02 0.1252981675297D+02 0.1252671176194D+02 0.1252890774035D+02 + 0.1253646163319D+02 0.1254941843391D+02 0.1256781081565D+02 0.1259165878492D+02 + 0.1262096935948D+02 0.1265573627186D+02 0.1269593970031D+02 0.1274154602860D+02 + 0.1279250763612D+02 0.1284876271993D+02 0.1291023514987D+02 0.1297683435832D+02 + 0.1304845526572D+02 0.1312497824294D+02 0.1320626911186D+02 0.1329217918482D+02 + 0.1338254534406D+02 0.1347719016192D+02 0.1357592206229D+02 0.1367853552411D+02 + 0.1378481132722D+02 0.1389451684086D+02 0.1400740635503D+02 0.1412322145474D+02 + 0.1424169143705D+02 0.1436253377061D+02 0.1448545459727D+02 0.1461014927535D+02 + 0.1473630296364D+02 0.1486359124547D+02 0.1499168079165D+02 0.1512023006124D+02 + 0.1524889003871D+02 0.1537730500600D+02 0.1550511334794D+02 0.1563194838901D+02 + 0.1575743925971D+02 0.1588121179028D+02 0.1600288942953D+02 0.1612209418650D+02 + 0.1623844759226D+02 0.1635157167941D+02 0.1646108997624D+02 0.1656662851297D+02 + 0.1666781683678D+02 0.1676428903280D+02 0.1685568474771D+02 0.1694165021276D+02 + 0.1702183926298D+02 0.1709591434898D+02 0.1716354753815D+02 0.1722442150176D+02 + 0.1727823048429D+02 0.1732468125184D+02 0.1736349401585D+02 0.1739440332882D+02 + 0.1741715894860D+02 0.1743152666781D+02 0.1743728910515D+02 0.1743424645524D+02 + 0.1742221719400D+02 0.1740103873629D+02 0.1737056804316D+02 0.1733068217558D+02 + 0.1728127879228D+02 0.1722227658900D+02 0.1715361567688D+02 0.1707525789793D+02 + 0.1698718707542D+02 0.1688940919777D+02 0.1678195253406D+02 0.1666486768020D+02 + 0.1653822753457D+02 0.1640212720234D+02 0.1625668382804D+02 0.1610203635605D+02 + 0.1593834521920D+02 0.1576579195557D+02 0.1558457875437D+02 0.1539492793162D+02 + 0.1519708133698D+02 0.1499129969316D+02 0.1477786186979D+02 0.1455706409384D+02 + 0.1432921909906D+02 0.1409465521715D+02 0.1385371541354D+02 0.1360675627135D+02 + 0.1335414692683D+02 0.1309626796025D+02 0.1283351024628D+02 0.1256627376823D+02 + 0.1229496640060D+02 0.1202000266485D+02 0.1174180246306D+02 0.1146078979490D+02 + 0.1117739146290D+02 0.1089203577144D+02 0.1060515122500D+02 0.1031716523102D+02 + 0.1002850281309D+02 0.9739585339808D+01 0.9450829275067D+01 0.9162644955013D+01 + 0.8875435397193D+01 0.8589595147052D+01 0.8305509166913D+01 0.8023551772294D+01 + 0.7744085620244D+01 0.7467460754102D+01 0.7194013708732D+01 0.6924066680121D+01 + 0.6657926762676D+01 0.6395885257290D+01 0.6138217052838D+01 0.5885180083291D+01 + 0.5637014862214D+01 0.5393944095964D+01 0.5156172376397D+01 0.4923885953440D+01 + 0.4697252587402D+01 0.4476421480403D+01 0.4261523285854D+01 0.4052670194446D+01 + 0.3849956094672D+01 0.3653456805497D+01 0.3463230378383D+01 0.3279317465534D+01 + 0.3101741750858D+01 0.2930510439883D+01 0.2765614804580D+01 0.2607030778803D+01 + 0.2454719599894D+01 0.2308628491820D+01 0.2168691385091D+01 0.2034829668640D+01 + 0.1906952968766D+01 0.1784959950247D+01 0.1668739134727D+01 0.1558169731539D+01 + 0.1453122476193D+01 0.1353460471853D+01 0.1259040029279D+01 0.1169711500850D+01 + 0.1085320104451D+01 0.1005706733253D+01 0.9307087475878D+00 0.8601607453947D+00 + 0.7938953079704D+00 0.7317437180194D+00 0.6735366472990D+00 0.6191048114486D+00 + 0.5682795899002D+00 0.5208936090774D+00 0.4767812874066D+00 0.4357793409794D+00 + 0.3977272490158D+00 0.3624676785880D+00 0.3298468683613D+00 0.2997149714018D+00 + 0.2719263573757D+00 0.2463398747288D+00 0.2228190736820D+00 0.2012323911077D+00 + 0.1814532985587D+00 0.1633604149139D+00 0.1468375852681D+00 0.1317739278401D+00 + 0.1180638507949D+00 0.1056070409740D+00 0.9430842660595D-01 0.8407811612220D-01 + 0.7483131523720D-01 0.6648822446255D-01 0.5897391921868D-01 0.5221821468026D-01 + 0.4615551744933D-01 0.4072466609085D-01 0.3586876249310D-01 0.3153499593029D-01 + 0.2767446160932D-01 0.2424197537852D-01 0.2119588616448D-01 0.1849788758658D-01 + 0.1611283007825D-01 0.1400853472097D-01 0.1215560987394D-01 0.1052727155919D-01 + 0.9099168441213D-02 0.7849212122301D-02 0.6757413360975D-02 0.5805724712213D-02 + 0.4977889984910D-02 0.4259300815297D-02 0.3636860564909D-02 0.3098855668813D-02 + 0.2634834484130D-02 0.2235493620776D-02 0.1892571675614D-02 0.1598750237855D-02 + 0.1347561987417D-02 0.1133305668705D-02 0.9509676897177D-03 0.7961500700565D-03 + 0.6650044409550D-03 0.5541717854288D-03 0.4607275965721D-03 0.3821321264613D-03 + 0.3161853965802D-03 0.2609866426733D-03 0.2148978720202D-03 0.1765112188356D-03 + 0.1446197934254D-03 0.1181917324578D-03 0.9634717085916D-04 0.7833787008417D-04 + 0.6352925250168D-04 0.5138460711824D-04 0.4145124756025D-04 0.3334841894247D-04 + 0.2675676576924D-04 0.2140918818591D-04 0.1708292858676D-04 0.1359274468595D-04 + 0.1078503858436D-04 0.8532824057450D-05 0.6731426203640D-05 0.5294818705431D-05 + 0.4152514256060D-05 0.3246933196226D-05 0.2531184102685D-05 0.1967197996113D-05 + 0.1524165020076D-05 0.1177228922105D-05 0.9064004816964D-06 0.6956562213712D-06 + 0.5321933500632D-06 0.4058159681390D-06 0.3084311550367D-06 0.2336367077944D-06 + 0.1763850440397D-06 0.1327101668872D-06 0.9950664996314D-07 0.7435137432006D-07 + 0.5536026859924D-07 0.4107360008380D-07 0.3036446521025D-07 0.2236605902416D-07 + 0.1641408678133D-07 0.1200133780083D-07 0.8741989878798D-08 0.6343668057516D-08 + 0.4585658331970D-08 0.3301987194148D-08 0.2368332361815D-08 0.1691937750742D-08 + 0.1203874557883D-08 0.8531269029104D-09 0.6020904848644D-09 0.4231609199373D-09 + 0.2961588355584D-09 0.2063947413491D-09 0.1432209469506D-09 0.9895263422926D-10 + 0.6806749180835D-10 0.4661461407108D-10 0.3177989810672D-10 0.2156794533121D-10 + 0.1457029674703D-10 0.9797346965900D-11 0.6557008288435D-11 0.4367535372748D-11 + 0.2895183963007D-11 0.1909847081824D-11 0.1253660240977D-11 0.8188333489718D-12 + 0.5320941587156D-12 0.3440140886834D-12 0.2212441299903D-12 0.1415527620957D-12 + 0.9009275622109D-13 0.5703749771740D-13 0.3591739940478D-13 0.2249568274860D-13 + 0.1401269909872D-13 0.8680702870622D-14 0.5348002788467D-14 + LSMS: xx z= 28. xvalws= 4.71708 + 28. 6.55000 10. 0.6401316680236D+00 + -0.1113096740000D+02 0.8563086195639D+00 1010 +-0.5599696223472D+02-0.5599692579244D+02-0.5599688891298D+02-0.5599685159110D+02 +-0.5599681382149D+02-0.5599677559878D+02-0.5599673691753D+02-0.5599669777225D+02 +-0.5599665815737D+02-0.5599661806724D+02-0.5599657749618D+02-0.5599653643840D+02 +-0.5599649488808D+02-0.5599645283930D+02-0.5599641028607D+02-0.5599636722236D+02 +-0.5599632364203D+02-0.5599627953889D+02-0.5599623490665D+02-0.5599618973899D+02 +-0.5599614402946D+02-0.5599609777158D+02-0.5599605095875D+02-0.5599600358433D+02 +-0.5599595564157D+02-0.5599590712365D+02-0.5599585802368D+02-0.5599580833468D+02 +-0.5599575804956D+02-0.5599570716119D+02-0.5599565566231D+02-0.5599560354562D+02 +-0.5599555080369D+02-0.5599549742903D+02-0.5599544341404D+02-0.5599538875103D+02 +-0.5599533343224D+02-0.5599527744979D+02-0.5599522079573D+02-0.5599516346198D+02 +-0.5599510544041D+02-0.5599504672275D+02-0.5599498730065D+02-0.5599492716567D+02 +-0.5599486630923D+02-0.5599480472270D+02-0.5599474239731D+02-0.5599467932419D+02 +-0.5599461549437D+02-0.5599455089877D+02-0.5599448552820D+02-0.5599441937337D+02 +-0.5599435242486D+02-0.5599428467314D+02-0.5599421610859D+02-0.5599414672144D+02 +-0.5599407650183D+02-0.5599400543977D+02-0.5599393352515D+02-0.5599386074773D+02 +-0.5599378709716D+02-0.5599371256297D+02-0.5599363713455D+02-0.5599356080117D+02 +-0.5599348355197D+02-0.5599340537597D+02-0.5599332626203D+02-0.5599324619890D+02 +-0.5599316517520D+02-0.5599308317940D+02-0.5599300019982D+02-0.5599291622467D+02 +-0.5599283124199D+02-0.5599274523970D+02-0.5599265820556D+02-0.5599257012718D+02 +-0.5599248099203D+02-0.5599239078744D+02-0.5599229950056D+02-0.5599220711841D+02 +-0.5599211362784D+02-0.5599201901554D+02-0.5599192326807D+02-0.5599182637179D+02 +-0.5599172831291D+02-0.5599162907749D+02-0.5599152865140D+02-0.5599142702035D+02 +-0.5599132416987D+02-0.5599122008534D+02-0.5599111475194D+02-0.5599100815468D+02 +-0.5599090027839D+02-0.5599079110773D+02-0.5599068062714D+02-0.5599056882092D+02 +-0.5599045567315D+02-0.5599034116773D+02-0.5599022528836D+02-0.5599010801854D+02 +-0.5598998934160D+02-0.5598986924064D+02-0.5598974769856D+02-0.5598962469807D+02 +-0.5598950022165D+02-0.5598937425161D+02-0.5598924676999D+02-0.5598911775867D+02 +-0.5598898719927D+02-0.5598885507321D+02-0.5598872136169D+02-0.5598858604567D+02 +-0.5598844910589D+02-0.5598831052286D+02-0.5598817027685D+02-0.5598802834790D+02 +-0.5598788471580D+02-0.5598773936010D+02-0.5598759226012D+02-0.5598744339490D+02 +-0.5598729274327D+02-0.5598714028376D+02-0.5598698599468D+02-0.5598682985406D+02 +-0.5598667183967D+02-0.5598651192900D+02-0.5598635009931D+02-0.5598618632753D+02 +-0.5598602059035D+02-0.5598585286418D+02-0.5598568312513D+02-0.5598551134904D+02 +-0.5598533751143D+02-0.5598516158757D+02-0.5598498355239D+02-0.5598480338055D+02 +-0.5598462104638D+02-0.5598443652392D+02-0.5598424978690D+02-0.5598406080871D+02 +-0.5598386956245D+02-0.5598367602087D+02-0.5598348015642D+02-0.5598328194119D+02 +-0.5598308134695D+02-0.5598287834514D+02-0.5598267290684D+02-0.5598246500277D+02 +-0.5598225460334D+02-0.5598204167857D+02-0.5598182619813D+02-0.5598160813131D+02 +-0.5598138744707D+02-0.5598116411395D+02-0.5598093810014D+02-0.5598070937344D+02 +-0.5598047790127D+02-0.5598024365064D+02-0.5598000658819D+02-0.5597976668012D+02 +-0.5597952389226D+02-0.5597927819002D+02-0.5597902953837D+02-0.5597877790190D+02 +-0.5597852324473D+02-0.5597826553059D+02-0.5597800472274D+02-0.5597774078402D+02 +-0.5597747367680D+02-0.5597720336302D+02-0.5597692980416D+02-0.5597665296121D+02 +-0.5597637279473D+02-0.5597608926477D+02-0.5597580233093D+02-0.5597551195229D+02 +-0.5597521808746D+02-0.5597492069456D+02-0.5597461973118D+02-0.5597431515441D+02 +-0.5597400692084D+02-0.5597369498651D+02-0.5597337930694D+02-0.5597305983713D+02 +-0.5597273653153D+02-0.5597240934402D+02-0.5597207822795D+02-0.5597174313610D+02 +-0.5597140402069D+02-0.5597106083334D+02-0.5597071352512D+02-0.5597036204648D+02 +-0.5597000634730D+02-0.5596964637683D+02-0.5596928208373D+02-0.5596891341603D+02 +-0.5596854032113D+02-0.5596816274582D+02-0.5596778063622D+02-0.5596739393782D+02 +-0.5596700259543D+02-0.5596660655323D+02-0.5596620575470D+02-0.5596580014265D+02 +-0.5596538965919D+02-0.5596497424574D+02-0.5596455384302D+02-0.5596412839103D+02 +-0.5596369782904D+02-0.5596326209559D+02-0.5596282112848D+02-0.5596237486478D+02 +-0.5596192324076D+02-0.5596146619196D+02-0.5596100365313D+02-0.5596053555821D+02 +-0.5596006184038D+02-0.5595958243200D+02-0.5595909726460D+02-0.5595860626889D+02 +-0.5595810937477D+02-0.5595760651126D+02-0.5595709760654D+02-0.5595658258792D+02 +-0.5595606138184D+02-0.5595553391383D+02-0.5595500010855D+02-0.5595445988973D+02 +-0.5595391318020D+02-0.5595335990183D+02-0.5595279997556D+02-0.5595223332139D+02 +-0.5595165985834D+02-0.5595107950445D+02-0.5595049217677D+02-0.5594989779136D+02 +-0.5594929626325D+02-0.5594868750646D+02-0.5594807143396D+02-0.5594744795768D+02 +-0.5594681698847D+02-0.5594617843611D+02-0.5594553220930D+02-0.5594487821562D+02 +-0.5594421636155D+02-0.5594354655242D+02-0.5594286869244D+02-0.5594218268464D+02 +-0.5594148843089D+02-0.5594078583187D+02-0.5594007478706D+02-0.5593935519473D+02 +-0.5593862695191D+02-0.5593788995439D+02-0.5593714409670D+02-0.5593638927210D+02 +-0.5593562537255D+02-0.5593485228870D+02-0.5593406990989D+02-0.5593327812411D+02 +-0.5593247681800D+02-0.5593166587683D+02-0.5593084518448D+02-0.5593001462343D+02 +-0.5592917407472D+02-0.5592832341797D+02-0.5592746253133D+02-0.5592659129149D+02 +-0.5592570957363D+02-0.5592481725142D+02-0.5592391419702D+02-0.5592300028101D+02 +-0.5592207537244D+02-0.5592113933875D+02-0.5592019204577D+02-0.5591923335772D+02 +-0.5591826313717D+02-0.5591728124502D+02-0.5591628754050D+02-0.5591528188110D+02 +-0.5591426412263D+02-0.5591323411911D+02-0.5591219172282D+02-0.5591113678423D+02 +-0.5591006915201D+02-0.5590898867299D+02-0.5590789519214D+02-0.5590678855255D+02 +-0.5590566859543D+02-0.5590453516002D+02-0.5590338808365D+02-0.5590222720165D+02 +-0.5590105234738D+02-0.5589986335215D+02-0.5589866004524D+02-0.5589744225384D+02 +-0.5589620980308D+02-0.5589496251593D+02-0.5589370021322D+02-0.5589242271362D+02 +-0.5589112983359D+02-0.5588982138736D+02-0.5588849718690D+02-0.5588715704190D+02 +-0.5588580075975D+02-0.5588442814548D+02-0.5588303900178D+02-0.5588163312891D+02 +-0.5588021032473D+02-0.5587877038463D+02-0.5587731310152D+02-0.5587583826579D+02 +-0.5587434566529D+02-0.5587283508528D+02-0.5587130630841D+02-0.5586975911472D+02 +-0.5586819328153D+02-0.5586660858347D+02-0.5586500479245D+02-0.5586338167758D+02 +-0.5586173900518D+02-0.5586007653871D+02-0.5585839403878D+02-0.5585669126306D+02 +-0.5585496796629D+02-0.5585322390022D+02-0.5585145881358D+02-0.5584967245205D+02 +-0.5584786455821D+02-0.5584603487151D+02-0.5584418312823D+02-0.5584230906144D+02 +-0.5584041240095D+02-0.5583849287331D+02-0.5583655020171D+02-0.5583458410598D+02 +-0.5583259430257D+02-0.5583058050443D+02-0.5582854242106D+02-0.5582647975838D+02 +-0.5582439221876D+02-0.5582227950095D+02-0.5582014130001D+02-0.5581797730729D+02 +-0.5581578721041D+02-0.5581357069315D+02-0.5581132743546D+02-0.5580905711339D+02 +-0.5580675939903D+02-0.5580443396051D+02-0.5580208046188D+02-0.5579969856313D+02 +-0.5579728792008D+02-0.5579484818438D+02-0.5579237900344D+02-0.5578988002036D+02 +-0.5578735087390D+02-0.5578479119842D+02-0.5578220062383D+02-0.5577957877554D+02 +-0.5577692527437D+02-0.5577423973656D+02-0.5577152177365D+02-0.5576877099246D+02 +-0.5576598699501D+02-0.5576316937851D+02-0.5576031773521D+02-0.5575743165245D+02 +-0.5575451071251D+02-0.5575155449261D+02-0.5574856256479D+02-0.5574553449592D+02 +-0.5574246984757D+02-0.5573936817599D+02-0.5573622903202D+02-0.5573305196105D+02 +-0.5572983650292D+02-0.5572658219188D+02-0.5572328855652D+02-0.5571995511969D+02 +-0.5571658139845D+02-0.5571316690396D+02-0.5570971114147D+02-0.5570621361020D+02 +-0.5570267380329D+02-0.5569909120771D+02-0.5569546530421D+02-0.5569179556723D+02 +-0.5568808146482D+02-0.5568432245858D+02-0.5568051800358D+02-0.5567666754825D+02 +-0.5567277053437D+02-0.5566882639691D+02-0.5566483456400D+02-0.5566079445686D+02 +-0.5565670548966D+02-0.5565256706948D+02-0.5564837859624D+02-0.5564413946258D+02 +-0.5563984905378D+02-0.5563550674768D+02-0.5563111191461D+02-0.5562666391727D+02 +-0.5562216211068D+02-0.5561760584202D+02-0.5561299445065D+02-0.5560832726789D+02 +-0.5560360361703D+02-0.5559882281319D+02-0.5559398416321D+02-0.5558908696562D+02 +-0.5558413051046D+02-0.5557911407924D+02-0.5557403694482D+02-0.5556889837133D+02 +-0.5556369761402D+02-0.5555843391924D+02-0.5555310652426D+02-0.5554771465720D+02 +-0.5554225753693D+02-0.5553673437298D+02-0.5553114436539D+02-0.5552548670463D+02 +-0.5551976057150D+02-0.5551396513700D+02-0.5550809956225D+02-0.5550216299834D+02 +-0.5549615458625D+02-0.5549007345675D+02-0.5548391873022D+02-0.5547768951663D+02 +-0.5547138491534D+02-0.5546500401504D+02-0.5545854589362D+02-0.5545200961802D+02 +-0.5544539424416D+02-0.5543869881681D+02-0.5543192236944D+02-0.5542506392412D+02 +-0.5541812249142D+02-0.5541109707023D+02-0.5540398664770D+02-0.5539679019908D+02 +-0.5538950668762D+02-0.5538213506439D+02-0.5537467426823D+02-0.5536712322557D+02 +-0.5535948085032D+02-0.5535174604375D+02-0.5534391769433D+02-0.5533599467765D+02 +-0.5532797585624D+02-0.5531986007948D+02-0.5531164618344D+02-0.5530333299077D+02 +-0.5529491931054D+02-0.5528640393816D+02-0.5527778565516D+02-0.5526906322918D+02 +-0.5526023541369D+02-0.5525130094801D+02-0.5524225855703D+02-0.5523310695118D+02 +-0.5522384482627D+02-0.5521447086332D+02-0.5520498372847D+02-0.5519538207280D+02 +-0.5518566453225D+02-0.5517582972744D+02-0.5516587626356D+02-0.5515580273021D+02 +-0.5514560770132D+02-0.5513528973493D+02-0.5512484737313D+02-0.5511427914192D+02 +-0.5510358355101D+02-0.5509275909378D+02-0.5508180424708D+02-0.5507071747112D+02 +-0.5505949720935D+02-0.5504814188833D+02-0.5503664991756D+02-0.5502501968942D+02 +-0.5501324957897D+02-0.5500133794390D+02-0.5498928312432D+02-0.5497708344272D+02 +-0.5496473720377D+02-0.5495224269427D+02-0.5493959818296D+02-0.5492680192049D+02 +-0.5491385213919D+02-0.5490074705306D+02-0.5488748485759D+02-0.5487406372968D+02 +-0.5486048182753D+02-0.5484673729051D+02-0.5483282823909D+02-0.5481875277470D+02 +-0.5480450897965D+02-0.5479009491705D+02-0.5477550863068D+02-0.5476074814493D+02 +-0.5474581146467D+02-0.5473069657522D+02-0.5471540144223D+02-0.5469992401161D+02 +-0.5468426220943D+02-0.5466841394191D+02-0.5465237709529D+02-0.5463614953579D+02 +-0.5461972910955D+02-0.5460311364257D+02-0.5458630094067D+02-0.5456928878940D+02 +-0.5455207495407D+02-0.5453465717964D+02-0.5451703319072D+02-0.5449920069153D+02 +-0.5448115736590D+02-0.5446290087722D+02-0.5444442886843D+02-0.5442573896205D+02 +-0.5440682876012D+02-0.5438769584425D+02-0.5436833777561D+02-0.5434875209495D+02 +-0.5432893632261D+02-0.5430888795858D+02-0.5428860448249D+02-0.5426808335370D+02 +-0.5424732201130D+02-0.5422631787419D+02-0.5420506834117D+02-0.5418357079095D+02 +-0.5416182258226D+02-0.5413982105395D+02-0.5411756352505D+02-0.5409504729488D+02 +-0.5407226964317D+02-0.5404922783015D+02-0.5402591909670D+02-0.5400234066448D+02 +-0.5397848973603D+02-0.5395436349497D+02-0.5392995910612D+02-0.5390527371568D+02 +-0.5388030445141D+02-0.5385504842279D+02-0.5382950272121D+02-0.5380366442022D+02 +-0.5377753057564D+02-0.5375109822589D+02-0.5372436439211D+02-0.5369732607848D+02 +-0.5366998027241D+02-0.5364232394478D+02-0.5361435405025D+02-0.5358606752751D+02 +-0.5355746129950D+02-0.5352853227379D+02-0.5349927734280D+02-0.5346969338412D+02 +-0.5343977726083D+02-0.5340952582182D+02-0.5337893590209D+02-0.5334800432310D+02 +-0.5331672789310D+02-0.5328510340749D+02-0.5325312764917D+02-0.5322079738887D+02 +-0.5318810938556D+02-0.5315506038680D+02-0.5312164712911D+02-0.5308786633837D+02 +-0.5305371473019D+02-0.5301918901033D+02-0.5298428587506D+02-0.5294900201159D+02 +-0.5291333409845D+02-0.5287727880592D+02-0.5284083279641D+02-0.5280399272489D+02 +-0.5276675523931D+02-0.5272911698097D+02-0.5269107458497D+02-0.5265262468062D+02 +-0.5261376389181D+02-0.5257448883746D+02-0.5253479613189D+02-0.5249468238525D+02 +-0.5245414420391D+02-0.5241317819081D+02-0.5237178094590D+02-0.5232994906648D+02 +-0.5228767914760D+02-0.5224496778239D+02-0.5220181156242D+02-0.5215820707808D+02 +-0.5211415091886D+02-0.5206963967367D+02-0.5202466993120D+02-0.5197923828015D+02 +-0.5193334130954D+02-0.5188697560897D+02-0.5184013776887D+02-0.5179282438067D+02 +-0.5174503203712D+02-0.5169675733235D+02-0.5164799686214D+02-0.5159874722402D+02 +-0.5154900501742D+02-0.5149876684372D+02-0.5144802930640D+02-0.5139678901105D+02 +-0.5134504256542D+02-0.5129278657941D+02-0.5124001766505D+02-0.5118673243645D+02 +-0.5113292750975D+02-0.5107859950299D+02-0.5102374503596D+02-0.5096836073009D+02 +-0.5091244320823D+02-0.5085598909444D+02-0.5079899501375D+02-0.5074145759189D+02 +-0.5068337345498D+02-0.5062473922922D+02-0.5056555154053D+02-0.5050580701416D+02 +-0.5044550227434D+02-0.5038463394377D+02-0.5032319864328D+02-0.5026119299126D+02 +-0.5019861360325D+02-0.5013545709143D+02-0.5007172006407D+02-0.5000739912504D+02 +-0.4994249087326D+02-0.4987699190218D+02-0.4981089879922D+02-0.4974420814526D+02 +-0.4967691651406D+02-0.4960902047178D+02-0.4954051657647D+02-0.4947140137754D+02 +-0.4940167141535D+02-0.4933132322073D+02-0.4926035331460D+02-0.4918875820762D+02 +-0.4911653439986D+02-0.4904367838057D+02-0.4897018662796D+02-0.4889605560912D+02 +-0.4882128177991D+02-0.4874586158508D+02-0.4866979145833D+02-0.4859306782261D+02 +-0.4851568709042D+02-0.4843764566431D+02-0.4835893993747D+02-0.4827956629445D+02 +-0.4819952111207D+02-0.4811880076045D+02-0.4803740160422D+02-0.4795532000391D+02 +-0.4787255231750D+02-0.4778909490222D+02-0.4770494411649D+02-0.4762009632212D+02 +-0.4753454788668D+02-0.4744829518615D+02-0.4736133460774D+02-0.4727366255300D+02 +-0.4718527544117D+02-0.4709616971270D+02-0.4700634183309D+02-0.4691578829697D+02 +-0.4682450563237D+02-0.4673249040525D+02-0.4663973922431D+02-0.4654624874593D+02 +-0.4645201567939D+02-0.4635703679226D+02-0.4626130891597D+02-0.4616482895150D+02 +-0.4606759387530D+02-0.4596960074519D+02-0.4587084670639D+02-0.4577132899763D+02 +-0.4567104495712D+02-0.4556999202861D+02-0.4546816776726D+02-0.4536556984539D+02 +-0.4526219605798D+02-0.4515804432797D+02-0.4505311271112D+02-0.4494739940055D+02 +-0.4484090273073D+02-0.4473362118100D+02-0.4462555337840D+02-0.4451669809982D+02 +-0.4440705427338D+02-0.4429662097898D+02-0.4418539744796D+02-0.4407338306170D+02 +-0.4396057734934D+02-0.4384697998428D+02-0.4373259077969D+02-0.4361740968280D+02 +-0.4350143676811D+02-0.4338467222942D+02-0.4326711637078D+02-0.4314876959628D+02 +-0.4302963239898D+02-0.4290970534872D+02-0.4278898907923D+02-0.4266748427447D+02 +-0.4254519165446D+02-0.4242211196062D+02-0.4229824594098D+02-0.4217359433537D+02 +-0.4204815786074D+02-0.4192193719700D+02-0.4179493297349D+02-0.4166714575631D+02 +-0.4153857603689D+02-0.4140922422178D+02-0.4127909062423D+02-0.4114817545739D+02 +-0.4101647882960D+02-0.4088400074182D+02-0.4075074108732D+02-0.4061669965378D+02 +-0.4048187612789D+02-0.4034627010235D+02-0.4020988108549D+02-0.4007270851328D+02 +-0.3993475176372D+02-0.3979601017351D+02-0.3965648305691D+02-0.3951616972641D+02 +-0.3937506951531D+02-0.3923318180167D+02-0.3909050603366D+02-0.3894704175582D+02 +-0.3880278863608D+02-0.3865774649330D+02-0.3851191532486D+02-0.3836529533426D+02 +-0.3821788695820D+02-0.3806969089315D+02-0.3792070812085D+02-0.3777093993278D+02 +-0.3762038795316D+02-0.3746905416038D+02-0.3731694090664D+02-0.3716405093567D+02 +-0.3701038739821D+02-0.3685595386541D+02-0.3670075433978D+02-0.3654479326368D+02 +-0.3638807552533D+02-0.3623060646226D+02-0.3607239186210D+02-0.3591343796076D+02 +-0.3575375143797D+02-0.3559333941025D+02-0.3543220942120D+02-0.3527036942933D+02 +-0.3510782779329D+02-0.3494459325477D+02-0.3478067491896D+02-0.3461608223282D+02 +-0.3445082496111D+02-0.3428491316044D+02-0.3411835715132D+02-0.3395116748843D+02 +-0.3378335492927D+02-0.3361493040123D+02-0.3344590496733D+02-0.3327628979077D+02 +-0.3310609609847D+02-0.3293533514379D+02-0.3276401816857D+02-0.3259215636477D+02 +-0.3241976083588D+02-0.3224684255835D+02-0.3207341234311D+02-0.3189948079774D+02 +-0.3172505828912D+02-0.3155015490716D+02-0.3137478042968D+02-0.3119894428864D+02 +-0.3102265553826D+02-0.3084592282492D+02-0.3066875435948D+02-0.3049115789199D+02 +-0.3031314068928D+02-0.3013470951560D+02-0.2995587061664D+02-0.2977662970714D+02 +-0.2959699196244D+02-0.2941696201419D+02-0.2923654395050D+02-0.2905574132074D+02 +-0.2887455714526D+02-0.2869299393034D+02-0.2851105368829D+02-0.2832873796329D+02 +-0.2814604786272D+02-0.2796298409437D+02-0.2777954700954D+02-0.2759573665199D+02 +-0.2741155281284D+02-0.2722699509126D+02-0.2704206296094D+02-0.2685675584195D+02 +-0.2667107317787D+02-0.2648501451766D+02-0.2629857960192D+02-0.2611176845276D+02 +-0.2592458146669D+02-0.2573701950955D+02-0.2554908401251D+02-0.2536077706788D+02 +-0.2517210152349D+02-0.2498306107396D+02-0.2479366034734D+02-0.2460390498514D+02 +-0.2441380171380D+02-0.2422335840547D+02-0.2403258412594D+02-0.2384148916732D+02 +-0.2365008506345D+02-0.2345838458563D+02-0.2326640171691D+02-0.2307415160308D+02 +-0.2288165047910D+02-0.2268891557015D+02-0.2249596496711D+02-0.2230281747700D+02 +-0.2210949244978D+02-0.2191600958395D+02-0.2172238871405D+02-0.2152864958458D+02 +-0.2133481161543D+02-0.2114089366494D+02-0.2094691379729D+02-0.2075288906142D+02 +-0.2055883528863D+02-0.2036476691627D+02-0.2017069684387D+02-0.1997663632772D+02 +-0.1978259491844D+02-0.1958858044485D+02-0.1939459904582D+02-0.1920065525004D+02 +-0.1900675210215D+02-0.1881289133185D+02-0.1861907356137D+02-0.1842529854548D+02 +-0.1823156543727D+02-0.1803787307258D+02-0.1784422026552D+02-0.1765060610781D+02 +-0.1745703026491D+02-0.1726349326262D+02-0.1706999675839D+02-0.1687654379275D+02 +-0.1668313901695D+02-0.1648978889391D+02-0.1629650187050D+02-0.1610328852001D+02 +-0.1591016165443D+02-0.1571713640663D+02-0.1552423028343D+02-0.1533146319057D+02 +-0.1513885743128D+02-0.1494643768008D+02-0.1475423093391D+02-0.1456226644259D+02 +-0.1437057562058D+02-0.1417919194227D+02-0.1398815082285D+02-0.1379748948648D+02 +-0.1360724682404D+02-0.1341746324187D+02-0.1322818050340D+02-0.1303944156522D+02 +-0.1285129040899D+02-0.1266377187058D+02-0.1247693146781D+02-0.1229081522770D+02 +-0.1210546951464D+02-0.1192094086015D+02-0.1173727579538D+02-0.1155452068701D+02 +-0.1137272157743D+02-0.1119192402976D+02-0.1101217297855D+02-0.1083351258641D+02 +-0.1065598610742D+02-0.1047963575747D+02-0.1030450259220D+02-0.1013062639265D+02 +-0.9958045559027D+01-0.9786797012947D+01-0.9616916108108D+01-0.9448436549776D+01 +-0.9281390323095D+01-0.9115807630320D+01-0.8951716837006D+01-0.8789144427146D+01 +-0.8628114967225D+01-0.8468651079086D+01-0.8310773421529D+01-0.8154500680455D+01 +-0.7999849567409D+01-0.7846834826286D+01-0.7695469247979D+01-0.7545763692692D+01 +-0.7397727119626D+01-0.7251366623738D+01-0.7106687479220D+01-0.6963693189354D+01 +-0.6822385542373D+01-0.6682764672930D+01-0.6544829128782D+01-0.6408575942279D+01 +-0.6274000706223D+01-0.6141097653681D+01-0.6009859741302D+01-0.5880278735698D+01 +-0.5752345302452D+01-0.5626049097293D+01-0.5501378858997D+01-0.5378322503566D+01 +-0.5256867219233D+01-0.5136999561867D+01-0.5018705550316D+01-0.4901970761285D+01 +-0.4786780423295D+01-0.4673119509331D+01-0.4560972827751D+01-0.4450325111061D+01 +-0.4341161102183D+01-0.4233465637811D+01-0.4127223728523D+01-0.4022420635285D+01 +-0.3919041942014D+01-0.3817073623910D+01-0.3716502111247D+01-0.3617314348377D+01 +-0.3519497847701D+01-0.3423040738415D+01-0.3327931809855D+01-0.3234160549325D+01 +-0.3141717174321D+01-0.3050592659127D+01-0.2960778755807D+01-0.2872268009686D+01 +-0.2785053769470D+01-0.2699130192236D+01-0.2614492243592D+01-0.2531135693396D+01 +-0.2449057107481D+01-0.2368253835949D+01-0.2288723998647D+01-0.2210466468527D+01 +-0.2133480853666D+01-0.2057767478780D+01-0.1983327367117D+01-0.1910162223654D+01 +-0.1838274420553D+01-0.1767666985813D+01-0.1698343596074D+01-0.1630308574461D+01 +-0.1563566894331D+01-0.1498124189676D+01-0.1433986772874D+01-0.1371161660353D+01 +-0.1309656606594D+01-0.1249480146804D+01-0.1190641648396D+01-0.1133151371320D+01 +-0.1077020537114D+01-0.1022261406430D+01-0.9688873646495D+00-0.9169130151369D+00 +-0.8663542795315D+00-0.8172285044658D+00-0.7695545740174D+00-0.7233530271894D+00 +-0.6786461797052D+00-0.6354582494212D+00-0.5938154846919D+00-0.5537462950694D+00 +-0.5152813837800D+00-0.4784538814878D+00-0.4432994809303D+00-0.4098565720878D+00 +-0.3781663776222D+00-0.3482730883967D+00-0.3202239989520D+00-0.2940696428732D+00 +-0.2698639280459D+00-0.2476640495013D+00 + 0.0000000000000D+00 + 1019 0.4717083696126D+01 + 0.2822905220422D-04 0.2889304065820D-04 0.2957264396362D-04 0.3026822920821D-04 + 0.3098017210502D-04 0.3170885719496D-04 0.3245467805402D-04 0.3321803750543D-04 + 0.3399934783670D-04 0.3479903102187D-04 0.3561751894883D-04 0.3645525365210D-04 + 0.3731268755102D-04 0.3819028369345D-04 0.3908851600531D-04 0.4000786954587D-04 + 0.4094884076908D-04 0.4191193779102D-04 0.4289768066355D-04 0.4390660165448D-04 + 0.4493924553425D-04 0.4599616986931D-04 0.4707794532239D-04 0.4818515595985D-04 + 0.4931839956615D-04 0.5047828796579D-04 0.5166544735265D-04 0.5288051862722D-04 + 0.5412415774157D-04 0.5539703605252D-04 0.5669984068299D-04 0.5803327489189D-04 + 0.5939805845262D-04 0.6079492804046D-04 0.6222463762903D-04 0.6368795889602D-04 + 0.6518568163844D-04 0.6671861419757D-04 0.6828758389387D-04 0.6989343747210D-04 + 0.7153704155679D-04 0.7321928311845D-04 0.7494106995063D-04 0.7670333115821D-04 + 0.7850701765704D-04 0.8035310268533D-04 0.8224258232698D-04 0.8417647604719D-04 + 0.8615582724055D-04 0.8818170379200D-04 0.9025519865087D-04 0.9237743041838D-04 + 0.9454954394889D-04 0.9677271096518D-04 0.9904813068811D-04 0.1013770304811D-03 + 0.1037606665095D-03 0.1062003244157D-03 0.1086973200094D-03 0.1112529999750D-03 + 0.1138687425945D-03 0.1165459584879D-03 0.1192860913707D-03 0.1220906188294D-03 + 0.1249610531146D-03 0.1278989419531D-03 0.1309058693786D-03 0.1339834565822D-03 + 0.1371333627824D-03 0.1403572861159D-03 0.1436569645484D-03 0.1470341768075D-03 + 0.1504907433372D-03 0.1540285272741D-03 0.1576494354471D-03 0.1613554194002D-03 + 0.1651484764392D-03 0.1690306507024D-03 0.1730040342571D-03 0.1770707682211D-03 + 0.1812330439104D-03 0.1854931040141D-03 0.1898532437962D-03 0.1943158123256D-03 + 0.1988832137349D-03 0.2035579085088D-03 0.2083424148017D-03 0.2132393097870D-03 + 0.2182512310372D-03 0.2233808779365D-03 0.2286310131262D-03 0.2340044639837D-03 + 0.2395041241363D-03 0.2451329550099D-03 0.2508939874141D-03 0.2567903231636D-03 + 0.2628251367386D-03 0.2690016769822D-03 0.2753232688391D-03 0.2817933151331D-03 + 0.2884152983876D-03 0.2951927826869D-03 0.3021294155822D-03 0.3092289300408D-03 + 0.3164951464419D-03 0.3239319746173D-03 0.3315434159412D-03 0.3393335654671D-03 + 0.3473066141158D-03 0.3554668509131D-03 0.3638186652800D-03 0.3723665493767D-03 + 0.3811151004996D-03 0.3900690235359D-03 0.3992331334737D-03 0.4086123579709D-03 + 0.4182117399844D-03 0.4280364404591D-03 0.4380917410806D-03 0.4483830470911D-03 + 0.4589158901706D-03 0.4696959313855D-03 0.4807289642050D-03 0.4920209175883D-03 + 0.5035778591424D-03 0.5154059983538D-03 0.5275116898952D-03 0.5399014370082D-03 + 0.5525818949656D-03 0.5655598746124D-03 0.5788423459903D-03 0.5924364420451D-03 + 0.6063494624208D-03 0.6205888773407D-03 0.6351623315796D-03 0.6500776485262D-03 + 0.6653428343414D-03 0.6809660822115D-03 0.6969557767005D-03 0.7133204982024D-03 + 0.7300690274976D-03 0.7472103504132D-03 0.7647536625921D-03 0.7827083743722D-03 + 0.8010841157777D-03 0.8198907416263D-03 0.8391383367545D-03 0.8588372213627D-03 + 0.8789979564844D-03 0.8996313495817D-03 0.9207484602695D-03 0.9423606061718D-03 + 0.9644793689133D-03 0.9871166002490D-03 0.1010284428335D-02 0.1033995264145D-02 + 0.1058261808030D-02 0.1083097056439D-02 0.1108514308781D-02 0.1134527174457D-02 + 0.1161149580048D-02 0.1188395776668D-02 0.1216280347488D-02 0.1244818215432D-02 + 0.1274024651053D-02 0.1303915280584D-02 0.1334506094178D-02 0.1365813454341D-02 + 0.1397854104547D-02 0.1430645178063D-02 0.1464204206972D-02 0.1498549131400D-02 + 0.1533698308957D-02 0.1569670524398D-02 0.1606484999500D-02 0.1644161403165D-02 + 0.1682719861761D-02 0.1722180969693D-02 0.1762565800220D-02 0.1803895916517D-02 + 0.1846193382990D-02 0.1889480776854D-02 0.1933781199968D-02 0.1979118290949D-02 + 0.2025516237555D-02 0.2072999789359D-02 0.2121594270701D-02 0.2171325593946D-02 + 0.2222220273040D-02 0.2274305437376D-02 0.2327608845973D-02 0.2382158901981D-02 + 0.2437984667516D-02 0.2495115878834D-02 0.2553582961846D-02 0.2613417047988D-02 + 0.2674649990452D-02 0.2737314380790D-02 0.2801443565884D-02 0.2867071665313D-02 + 0.2934233589108D-02 0.3002965055909D-02 0.3073302611539D-02 0.3145283647991D-02 + 0.3218946422853D-02 0.3294330079167D-02 0.3371474665742D-02 0.3450421157918D-02 + 0.3531211478812D-02 0.3613888521034D-02 0.3698496168895D-02 0.3785079321121D-02 + 0.3873683914072D-02 0.3964356945494D-02 0.4057146498796D-02 0.4152101767879D-02 + 0.4249273082526D-02 0.4348711934358D-02 0.4450471003378D-02 0.4554604185107D-02 + 0.4661166618332D-02 0.4770214713480D-02 0.4881806181620D-02 0.4996000064124D-02 + 0.5112856762985D-02 0.5232438071820D-02 0.5354807207563D-02 0.5480028842865D-02 + 0.5608169139224D-02 0.5739295780850D-02 0.5873478009283D-02 0.6010786658792D-02 + 0.6151294192554D-02 0.6295074739644D-02 0.6442204132845D-02 0.6592759947299D-02 + 0.6746821540020D-02 0.6904470090278D-02 0.7065788640890D-02 0.7230862140411D-02 + 0.7399777486274D-02 0.7572623568873D-02 0.7749491316634D-02 0.7930473742069D-02 + 0.8115665988856D-02 0.8305165379950D-02 0.8499071466766D-02 0.8697486079432D-02 + 0.8900513378157D-02 0.9108259905724D-02 0.9320834641139D-02 0.9538349054458D-02 + 0.9760917162809D-02 0.9988655587651D-02 0.1022168361328D-01 0.1046012324662D-01 + 0.1070409927831D-01 0.1095373934513D-01 0.1120917399380D-01 0.1147053674614D-01 + 0.1173796416567D-01 0.1201159592567D-01 0.1229157487867D-01 0.1257804712749D-01 + 0.1287116209781D-01 0.1317107261230D-01 0.1347793496636D-01 0.1379190900549D-01 + 0.1411315820435D-01 0.1444184974747D-01 0.1477815461176D-01 0.1512224765076D-01 + 0.1547430768070D-01 0.1583451756840D-01 0.1620306432107D-01 0.1658013917802D-01 + 0.1696593770432D-01 0.1736065988647D-01 0.1776451023010D-01 0.1817769785976D-01 + 0.1860043662078D-01 0.1903294518340D-01 0.1947544714898D-01 0.1992817115851D-01 + 0.2039135100347D-01 0.2086522573888D-01 0.2135003979890D-01 0.2184604311473D-01 + 0.2235349123506D-01 0.2287264544901D-01 0.2340377291164D-01 0.2394714677210D-01 + 0.2450304630442D-01 0.2507175704110D-01 0.2565357090933D-01 0.2624878637023D-01 + 0.2685770856079D-01 0.2748064943882D-01 0.2811792793097D-01 0.2876987008361D-01 + 0.2943680921701D-01 0.3011908608255D-01 0.3081704902317D-01 0.3153105413717D-01 + 0.3226146544526D-01 0.3300865506103D-01 0.3377300336495D-01 0.3455489918178D-01 + 0.3535473996166D-01 0.3617293196481D-01 0.3700989044996D-01 0.3786603986655D-01 + 0.3874181405077D-01 0.3963765642559D-01 0.4055402020463D-01 0.4149136860028D-01 + 0.4245017503575D-01 0.4343092336145D-01 0.4443410807560D-01 0.4546023454915D-01 + 0.4650981925515D-01 0.4758339000262D-01 0.4868148617492D-01 0.4980465897284D-01 + 0.5095347166233D-01 0.5212849982707D-01 0.5333033162594D-01 0.5455956805532D-01 + 0.5581682321655D-01 0.5710272458843D-01 0.5841791330491D-01 0.5976304443808D-01 + 0.6113878728647D-01 0.6254582566883D-01 0.6398485822337D-01 0.6545659871266D-01 + 0.6696177633414D-01 0.6850113603651D-01 0.7007543884180D-01 0.7168546217357D-01 + 0.7333200019098D-01 0.7501586412902D-01 0.7673788264495D-01 0.7849890217102D-01 + 0.8029978727345D-01 0.8214142101804D-01 0.8402470534211D-01 0.8595056143326D-01 + 0.8791993011463D-01 0.8993377223713D-01 0.9199306907843D-01 0.9409882274896D-01 + 0.9625205660489D-01 0.9845381566837D-01 0.1007051670548D+00 0.1030072004074D+00 + 0.1053610283397D+00 0.1077677868841D+00 0.1102286359499D+00 0.1127447597872D+00 + 0.1153173674594D+00 0.1179476933234D+00 0.1206369975171D+00 0.1233865664558D+00 + 0.1261977133354D+00 0.1290717786444D+00 0.1320101306839D+00 0.1350141660957D+00 + 0.1380853103985D+00 0.1412250185328D+00 0.1444347754134D+00 0.1477160964914D+00 + 0.1510705283235D+00 0.1544996491509D+00 0.1580050694857D+00 0.1615884327066D+00 + 0.1652514156630D+00 0.1689957292880D+00 0.1728231192192D+00 0.1767353664298D+00 + 0.1807342878667D+00 0.1848217370983D+00 0.1889996049712D+00 0.1932698202750D+00 + 0.1976343504163D+00 0.2020952021009D+00 0.2066544220260D+00 0.2113140975792D+00 + 0.2160763575477D+00 0.2209433728356D+00 0.2259173571894D+00 0.2310005679329D+00 + 0.2361953067095D+00 0.2415039202338D+00 0.2469288010509D+00 0.2524723883044D+00 + 0.2581371685119D+00 0.2639256763491D+00 0.2698404954414D+00 0.2758842591634D+00 + 0.2820596514458D+00 0.2883694075903D+00 0.2948163150908D+00 0.3014032144623D+00 + 0.3081330000770D+00 0.3150086210059D+00 0.3220330818682D+00 0.3292094436858D+00 + 0.3365408247443D+00 0.3440304014594D+00 0.3516814092484D+00 0.3594971434075D+00 + 0.3674809599929D+00 0.3756362767066D+00 0.3839665737864D+00 0.3924753948986D+00 + 0.4011663480350D+00 0.4100431064119D+00 0.4191094093709D+00 0.4283690632825D+00 + 0.4378259424502D+00 0.4474839900153D+00 0.4573472188619D+00 0.4674197125219D+00 + 0.4777056260780D+00 0.4882091870652D+00 0.4989346963709D+00 0.5098865291302D+00 + 0.5210691356182D+00 0.5324870421380D+00 0.5441448519020D+00 0.5560472459083D+00 + 0.5681989838085D+00 0.5806049047685D+00 0.5932699283193D+00 0.6061990551983D+00 + 0.6193973681794D+00 0.6328700328903D+00 0.6466222986172D+00 0.6606594990947D+00 + 0.6749870532795D+00 0.6896104661081D+00 0.7045353292353D+00 0.7197673217538D+00 + 0.7353122108919D+00 0.7511758526895D+00 0.7673641926498D+00 0.7838832663655D+00 + 0.8007392001176D+00 0.8179382114455D+00 0.8354866096871D+00 0.8533907964854D+00 + 0.8716572662621D+00 0.8902926066542D+00 0.9093034989133D+00 0.9286967182645D+00 + 0.9484791342227D+00 0.9686577108655D+00 0.9892395070593D+00 0.1010231676636D+01 + 0.1031641468518D+01 0.1053476226794D+01 0.1075743390730D+01 0.1098450494732D+01 + 0.1121605168240D+01 0.1145215135559D+01 0.1169288215628D+01 0.1193832321713D+01 + 0.1218855461030D+01 0.1244365734298D+01 0.1270371335200D+01 0.1296880549776D+01 + 0.1323901755725D+01 0.1351443421614D+01 0.1379514106006D+01 0.1408122456482D+01 + 0.1437277208571D+01 0.1466987184574D+01 0.1497261292282D+01 0.1528108523589D+01 + 0.1559537952982D+01 0.1591558735919D+01 0.1624180107089D+01 0.1657411378532D+01 + 0.1691261937647D+01 0.1725741245050D+01 0.1760858832301D+01 0.1796624299488D+01 + 0.1833047312659D+01 0.1870137601103D+01 0.1907904954477D+01 0.1946359219770D+01 + 0.1985510298095D+01 0.2025368141320D+01 0.2065942748513D+01 0.2107244162211D+01 + 0.2149282464505D+01 0.2192067772925D+01 0.2235610236140D+01 0.2279920029446D+01 + 0.2325007350058D+01 0.2370882412179D+01 0.2417555441862D+01 0.2465036671645D+01 + 0.2513336334955D+01 0.2562464660289D+01 0.2612431865148D+01 0.2663248149729D+01 + 0.2714923690377D+01 0.2767468632769D+01 0.2820893084852D+01 0.2875207109509D+01 + 0.2930420716961D+01 0.2986543856890D+01 0.3043586410284D+01 0.3101558181002D+01 + 0.3160468887046D+01 0.3220328151540D+01 0.3281145493409D+01 0.3342930317763D+01 + 0.3405691905963D+01 0.3469439405388D+01 0.3534181818874D+01 0.3599927993847D+01 + 0.3666686611124D+01 0.3734466173392D+01 0.3803274993364D+01 0.3873121181591D+01 + 0.3944012633951D+01 0.4015957018796D+01 0.4088961763764D+01 0.4163034042250D+01 + 0.4238180759535D+01 0.4314408538572D+01 0.4391723705438D+01 0.4470132274434D+01 + 0.4549639932848D+01 0.4630252025379D+01 0.4711973538219D+01 0.4794809082801D+01 + 0.4878762879210D+01 0.4963838739264D+01 0.5050040049274D+01 0.5137369752468D+01 + 0.5225830331113D+01 0.5315423788316D+01 0.5406151629524D+01 0.5498014843729D+01 + 0.5591013884378D+01 0.5685148650014D+01 0.5780418464637D+01 0.5876822057818D+01 + 0.5974357544556D+01 0.6073022404910D+01 0.6172813463411D+01 0.6273726868265D+01 + 0.6375758070378D+01 0.6478901802200D+01 0.6583152056427D+01 0.6688502064566D+01 + 0.6794944275391D+01 0.6902470333310D+01 0.7011071056667D+01 0.7120736416010D+01 + 0.7231455512336D+01 0.7343216555357D+01 0.7456006841813D+01 0.7569812733849D+01 + 0.7684619637512D+01 0.7800411981379D+01 0.7917173195367D+01 0.8034885689753D+01 + 0.8153530834449D+01 0.8273088938569D+01 0.8393539230326D+01 0.8514859837314D+01 + 0.8637027767209D+01 0.8760018888941D+01 0.8883807914385D+01 0.9008368380622D+01 + 0.9133672632827D+01 0.9259691807821D+01 0.9386395818367D+01 0.9513753338252D+01 + 0.9641731788206D+01 0.9770297322751D+01 0.9899414817999D+01 0.1002904786050D+02 + 0.1015915873719D+02 0.1028970842649D+02 0.1042065659068D+02 0.1055196156952D+02 + 0.1068358037532D+02 0.1081546868938D+02 0.1094758086007D+02 0.1107986990236D+02 + 0.1121228749915D+02 0.1134478400430D+02 0.1147730844752D+02 0.1160980854110D+02 + 0.1174223068874D+02 0.1187451999634D+02 0.1200662028502D+02 0.1213847410631D+02 + 0.1227002275972D+02 0.1240120631259D+02 0.1253196362255D+02 0.1266223236240D+02 + 0.1279194904771D+02 0.1292104906705D+02 0.1304946671507D+02 0.1317713522837D+02 + 0.1330398682438D+02 0.1342995274312D+02 0.1355496329215D+02 0.1367894789459D+02 + 0.1380183514033D+02 0.1392355284052D+02 0.1404402808537D+02 0.1416318730533D+02 + 0.1428095633565D+02 0.1439726048440D+02 0.1451202460404D+02 0.1462517316648D+02 + 0.1473663034167D+02 0.1484632007986D+02 0.1495416619737D+02 0.1506009246602D+02 + 0.1516402270613D+02 0.1526588088319D+02 0.1536559120801D+02 0.1546307824053D+02 + 0.1555826699713D+02 0.1565108306143D+02 0.1574145269854D+02 0.1582930297267D+02 + 0.1591456186808D+02 0.1599715841326D+02 0.1607702280817D+02 0.1615408655464D+02 + 0.1622828258955D+02 0.1629954542085D+02 0.1636781126625D+02 0.1643301819427D+02 + 0.1649510626773D+02 0.1655401768930D+02 0.1660969694894D+02 0.1666209097315D+02 + 0.1671114927559D+02 0.1675682410902D+02 0.1679907061818D+02 0.1683784699343D+02 + 0.1687311462472D+02 0.1690483825579D+02 0.1693298613804D+02 0.1695753018403D+02 + 0.1697844611990D+02 0.1699571363671D+02 0.1700931654003D+02 0.1701924289759D+02 + 0.1702548518446D+02 0.1702804042535D+02 0.1702691033371D+02 0.1702210144695D+02 + 0.1701362525766D+02 0.1700149833994D+02 0.1698574247078D+02 0.1696638474565D+02 + 0.1694345768800D+02 0.1691699935213D+02 0.1688705341886D+02 0.1685366928347D+02 + 0.1681690213549D+02 0.1677681302967D+02 0.1673346894770D+02 0.1668694285012D+02 + 0.1663731371782D+02 0.1658466658277D+02 0.1652909254718D+02 0.1647068879094D+02 + 0.1640955856644D+02 0.1634581118059D+02 0.1627956196336D+02 0.1621093222244D+02 + 0.1614004918357D+02 0.1606704591605D+02 0.1599206124311D+02 0.1591523963664D+02 + 0.1583673109597D+02 0.1575669101036D+02 0.1567528000492D+02 0.1559266376960D+02 + 0.1550901287107D+02 0.1542450254735D+02 0.1533931248491D+02 0.1525362657814D+02 + 0.1516763267127D+02 0.1508152228251D+02 0.1499549031056D+02 0.1490973472356D+02 + 0.1482445623058D+02 0.1473985793583D+02 0.1465614497589D+02 0.1457352414028D+02 + 0.1449220347561D+02 0.1441239187393D+02 0.1433429864561D+02 0.1425813307751D+02 + 0.1418410397681D+02 0.1411241920144D+02 0.1404328517784D+02 0.1397690640670D+02 + 0.1391348495785D+02 0.1385321995514D+02 0.1379630705236D+02 0.1374293790112D+02 + 0.1369329961279D+02 0.1364757421415D+02 0.1360593809949D+02 0.1356856147997D+02 + 0.1353560783157D+02 0.1350723334347D+02 0.1348358636810D+02 0.1346480687464D+02 + 0.1345102590764D+02 0.1344236505232D+02 0.1343893590851D+02 0.1344083957484D+02 + 0.1344816614503D+02 0.1346099421828D+02 0.1347939042540D+02 0.1350340897278D+02 + 0.1353309120597D+02 0.1356846519480D+02 0.1360954534209D+02 0.1365633201758D+02 + 0.1370881121930D+02 0.1376695426396D+02 0.1383071750836D+02 0.1390004210367D+02 + 0.1397485378414D+02 0.1405506269220D+02 0.1414056324144D+02 0.1423123401912D+02 + 0.1432693772972D+02 0.1442752118094D+02 0.1453281531358D+02 0.1464263527642D+02 + 0.1475678054730D+02 0.1487503510142D+02 0.1499716762781D+02 0.1512293179461D+02 + 0.1525206656392D+02 0.1538429655666D+02 0.1551933246776D+02 0.1565687153187D+02 + 0.1579659803967D+02 0.1593818390447D+02 0.1608128927900D+02 0.1622556322157D+02 + 0.1637064441131D+02 0.1651616191120D+02 0.1666173597809D+02 0.1680697891835D+02 + 0.1695149598774D+02 0.1709488633371D+02 0.1723674397850D+02 0.1737665884075D+02 + 0.1751421779358D+02 0.1764900575657D+02 0.1778060681912D+02 0.1790860539220D+02 + 0.1803258738575D+02 0.1815214140835D+02 0.1826685998585D+02 0.1837634079554D+02 + 0.1848018791211D+02 0.1857801306162D+02 0.1866943687952D+02 0.1875409016857D+02 + 0.1883161515267D+02 0.1890166672198D+02 0.1896391366520D+02 0.1901803988445D+02 + 0.1906374558812D+02 0.1910074845718D+02 0.1912878478041D+02 0.1914761055363D+02 + 0.1915700253863D+02 0.1915675927687D+02 0.1914670205356D+02 0.1912667580745D+02 + 0.1909654998194D+02 0.1905621931305D+02 0.1900560455010D+02 0.1894465310484D+02 + 0.1887333962512D+02 0.1879166648926D+02 0.1869966421757D+02 0.1859739179747D+02 + 0.1848493691927D+02 0.1836241611944D+02 0.1822997482895D+02 0.1808778732426D+02 + 0.1793605657890D+02 0.1777501401406D+02 0.1760491914670D+02 0.1742605913446D+02 + 0.1723874821651D+02 0.1704332705040D+02 0.1684016194511D+02 0.1662964399086D+02 + 0.1641218808699D+02 0.1618823186940D+02 0.1595823453954D+02 0.1572267559759D+02 + 0.1548205348276D+02 0.1523688412417D+02 0.1498769940622D+02 0.1473504555295D+02 + 0.1447948143629D+02 0.1422157681337D+02 0.1396191049895D+02 0.1370106847899D+02 + 0.1343964197217D+02 0.1317822544633D+02 0.1291741459732D+02 0.1265780429795D+02 + 0.1239998652538D+02 0.1214454827506D+02 0.1189206947003D+02 0.1164312087454D+02 + 0.1139826202075D+02 0.1115803915793D+02 0.1092298323335D+02 0.1069360791393D+02 + 0.1047040765827D+02 0.1025385584784D+02 0.1004440298668D+02 0.9842474978315D+01 + 0.9648471488531D+01 0.9462764402487D+01 0.9285696383562D+01 0.9117579542610D+01 + 0.8958694223664D+01 0.8809287913251D+01 0.8669574279281D+01 0.8539732345000D+01 + 0.8419905802854D+01 0.8310202472462D+01 0.8210693906193D+01 0.8121415145123D+01 + 0.8042364627399D+01 0.7973504250305D+01 0.7914759586509D+01 0.7866020254239D+01 + 0.7827140440310D+01 0.7797939574181D+01 0.7778203150401D+01 0.7767683696076D+01 + 0.7766101879191D+01 0.7773147752910D+01 0.7788482130224D+01 0.7811738082649D+01 + 0.7842522555957D+01 0.7880418095328D+01 0.7924984671660D+01 0.7975761600215D+01 + 0.8032269542264D+01 0.8094012579876D+01 0.8160480353611D+01 0.8231150252446D+01 + 0.8305489644993D+01 0.8382958140784D+01 0.8463009870227D+01 0.8545095771695D+01 + 0.8628665874201D+01 0.8713171564104D+01 0.8798067824410D+01 0.8882815435410D+01 + 0.8966883125662D+01 0.9049749662614D+01 0.9130905872628D+01 0.9209856580576D+01 + 0.9286122459755D+01 0.9359241783464D+01 0.9428772070232D+01 0.9494291615411D+01 + 0.9555400902606D+01 0.9611723889203D+01 0.9662909161105D+01 0.9708630952629D+01 + 0.9748590028412D+01 0.9782514425040D+01 0.9810160051033D+01 0.9831311144696D+01 + 0.9845780590219D+01 0.9853410093278D+01 0.9854070218224D+01 0.9847660289749D+01 + 0.9834108162671D+01 0.9813369864231D+01 0.9785429113934D+01 0.9750296726618D+01 + 0.9708009904977D+01 0.9658631428287D+01 0.9602248744509D+01 0.9538972973344D+01 + 0.9468937828113D+01 0.9392298464583D+01 0.9309230265072D+01 0.9219927566246D+01 + 0.9124602339109D+01 0.9023482829682D+01 0.8916812168780D+01 0.8804846959226D+01 + 0.8687855848615D+01 0.8566118095582D+01 0.8439922137218D+01 0.8309564165008D+01 + 0.8175346716309D+01 0.8037577288018D+01 0.7896566978700D+01 0.7752629164977D+01 + 0.7606078217607D+01 0.7457228262158D+01 0.7306391988763D+01 0.7153879514955D+01 + 0.6999997305096D+01 0.6845047149450D+01 0.6689325205489D+01 0.6533121103532D+01 + 0.6376717118388D+01 0.6220387408225D+01 0.6064397321456D+01 0.5909002772035D+01 + 0.5754449683166D+01 0.5600973499038D+01 0.5448798763889D+01 0.5298138767335D+01 + 0.5149195254631D+01 0.5002158200226D+01 0.4857205642751D+01 0.4714503579299D+01 + 0.4574205916718D+01 0.4436454477387D+01 0.4301379056834D+01 0.4169097530399D+01 + 0.4039716006044D+01 0.3913329020311D+01 0.3790019774357D+01 0.3669860406979D+01 + 0.3552912301468D+01 0.3439226423147D+01 0.3328843684463D+01 0.3221795334510D+01 + 0.3118103369910D+01 0.3017780964033D+01 0.2920832911607D+01 0.2827256085858D+01 + 0.2737039905395D+01 0.2650166808185D+01 0.2566612730049D+01 0.2486347585261D+01 + 0.2409335746934D+01 0.2335536525040D+01 0.2264904640019D+01 0.2197390690115D+01 + 0.2132941610696D+01 0.2071501123983D+01 0.2013010177747D+01 0.1957407371718D+01 + 0.1904629370560D+01 0.1854611302453D+01 0.1807287142453D+01 0.1762590079946D+01 + 0.1720452869667D+01 0.1680808165868D+01 0.1643588839388D+01 0.1608728277461D+01 + 0.1576160666249D+01 0.1545821256189D+01 0.1517646610345D+01 0.1491574836053D+01 + 0.1467545800248D+01 0.1445501328920D+01 0.1425385391232D+01 0.1407144268890D+01 + 0.1390726711404D+01 0.1376084077925D+01 0.1363170466350D+01 0.1351942830457D+01 + 0.1342361085779D+01 0.1334388204966D+01 0.1327990303358D+01 0.1323136715467D+01 + 0.1319800063007D+01 0.1317956315104D+01 0.1317584841210D+01 0.1318668457180D+01 + 0.1321193464890D+01 0.1325149685643D+01 0.1330530487491D+01 0.1337332806444D+01 + 0.1345557161395D+01 0.1355207662354D+01 0.1366292011405D+01 0.1378821495537D+01 + 0.1392810970232D+01 0.1408278278149D+01 0.1425359771691D+01 0.1444190648292D+01 + 0.1464793160347D+01 0.1487194690007D+01 0.1511427826231D+01 0.1537530458280D+01 + 0.1565545885720D+01 0.1595522945008D+01 0.1627516152658D+01 + 7 1019 + 1 0 -1 -600.92914 + 2 0 -1 -70.72762 + 2 1 1 -61.62006 + 2 1 -2 -60.33779 + 3 0 -1 -6.85259 + 3 1 1 -4.08398 + 3 1 -2 -3.92195 + 0.2785469948406D-04 0.2850989761226D-04 0.2918050388790D-04 0.2986688053863D-04 + 0.3056939830326D-04 0.3128843663162D-04 0.3202438388908D-04 0.3277763756579D-04 + 0.3354860449101D-04 0.3433770105225D-04 0.3514535341970D-04 0.3597199777588D-04 + 0.3681808055063D-04 0.3768405866170D-04 0.3857039976086D-04 0.3947758248589D-04 + 0.4040609671844D-04 0.4135644384787D-04 0.4232913704140D-04 0.4332470152045D-04 + 0.4434367484359D-04 0.4538660719602D-04 0.4645406168587D-04 0.4754661464746D-04 + 0.4866485595164D-04 0.4980938932344D-04 0.5098083266708D-04 0.5217981839867D-04 + 0.5340699378670D-04 0.5466302130048D-04 0.5594857896670D-04 0.5726436073447D-04 + 0.5861107684878D-04 0.5998945423273D-04 0.6140023687881D-04 0.6284418624921D-04 + 0.6432208168557D-04 0.6583472082835D-04 0.6738292004593D-04 0.6896751487386D-04 + 0.7058936046433D-04 0.7224933204614D-04 0.7394832539552D-04 0.7568725731789D-04 + 0.7746706614092D-04 0.7928871221918D-04 0.8115317845047D-04 0.8306147080440D-04 + 0.8501461886319D-04 0.8701367637523D-04 0.8905972182149D-04 0.9115385899529D-04 + 0.9329721759554D-04 0.9549095383390D-04 0.9773625105613D-04 0.1000343203780D-03 + 0.1023864013358D-03 0.1047937625530D-03 0.1072577024207D-03 0.1097795497962D-03 + 0.1123606647159D-03 0.1150024391264D-03 0.1177062976316D-03 0.1204736982579D-03 + 0.1233061332371D-03 0.1262051298076D-03 0.1291722510338D-03 0.1322090966461D-03 + 0.1353173038985D-03 0.1384985484482D-03 0.1417545452541D-03 0.1450870494977D-03 + 0.1484978575242D-03 0.1519888078065D-03 0.1555617819316D-03 0.1592187056094D-03 + 0.1629615497059D-03 0.1667923312999D-03 0.1707131147644D-03 0.1747260128738D-03 + 0.1788331879363D-03 0.1830368529529D-03 0.1873392728036D-03 0.1917427654613D-03 + 0.1962497032336D-03 0.2008625140339D-03 0.2055836826825D-03 0.2104157522371D-03 + 0.2153613253549D-03 0.2204230656869D-03 0.2256036993036D-03 0.2309060161547D-03 + 0.2363328715630D-03 0.2418871877523D-03 0.2475719554116D-03 0.2533902352953D-03 + 0.2593451598611D-03 0.2654399349456D-03 0.2716778414794D-03 0.2780622372415D-03 + 0.2845965586551D-03 0.2912843226253D-03 0.2981291284186D-03 0.3051346595875D-03 + 0.3123046859388D-03 0.3196430655483D-03 0.3271537468220D-03 0.3348407706058D-03 + 0.3427082723431D-03 0.3507604842842D-03 0.3590017377457D-03 0.3674364654231D-03 + 0.3760692037569D-03 0.3849045953538D-03 0.3939473914642D-03 0.4032024545169D-03 + 0.4126747607134D-03 0.4223694026816D-03 0.4322915921917D-03 0.4424466629351D-03 + 0.4528400733674D-03 0.4634774096178D-03 0.4743643884660D-03 0.4855068603879D-03 + 0.4969108126721D-03 0.5085823726089D-03 0.5205278107526D-03 0.5327535442603D-03 + 0.5452661403075D-03 0.5580723195830D-03 0.5711789598649D-03 0.5845930996791D-03 + 0.5983219420432D-03 0.6123728582965D-03 0.6267533920187D-03 0.6414712630399D-03 + 0.6565343715427D-03 0.6719508022598D-03 0.6877288287682D-03 0.7038769178830D-03 + 0.7204037341532D-03 0.7373181444605D-03 0.7546292227254D-03 0.7723462547211D-03 + 0.7904787429998D-03 0.8090364119316D-03 0.8280292128607D-03 0.8474673293800D-03 + 0.8673611827279D-03 0.8877214373095D-03 0.9085590063450D-03 0.9298850576490D-03 + 0.9517110195424D-03 0.9740485869007D-03 0.9969097273424D-03 0.1020306687559D-02 + 0.1044251999793D-02 0.1068758488459D-02 0.1093839276929D-02 0.1119507794460D-02 + 0.1145777783290D-02 0.1172663305896D-02 0.1200178752418D-02 0.1228338848251D-02 + 0.1257158661817D-02 0.1286653612512D-02 0.1316839478836D-02 0.1347732406709D-02 + 0.1379348917983D-02 0.1411705919139D-02 0.1444820710199D-02 0.1478710993823D-02 + 0.1513394884635D-02 0.1548890918745D-02 0.1585218063505D-02 0.1622395727472D-02 + 0.1660443770616D-02 0.1699382514747D-02 0.1739232754193D-02 0.1780015766714D-02 + 0.1821753324666D-02 0.1864467706427D-02 0.1908181708078D-02 0.1952918655349D-02 + 0.1998702415849D-02 0.2045557411560D-02 0.2093508631630D-02 0.2142581645446D-02 + 0.2192802616016D-02 0.2244198313648D-02 0.2296796129943D-02 0.2350624092111D-02 + 0.2405710877605D-02 0.2462085829094D-02 0.2519778969778D-02 0.2578821019043D-02 + 0.2639243408481D-02 0.2701078298268D-02 0.2764358593919D-02 0.2829117963415D-02 + 0.2895390854731D-02 0.2963212513750D-02 0.3032619002589D-02 0.3103647218338D-02 + 0.3176334912226D-02 0.3250720709219D-02 0.3326844128061D-02 0.3404745601768D-02 + 0.3484466498590D-02 0.3566049143437D-02 0.3649536839799D-02 0.3734973892157D-02 + 0.3822405628893D-02 0.3911878425729D-02 0.4003439729683D-02 0.4097138083571D-02 + 0.4193023151058D-02 0.4291145742273D-02 0.4391557839999D-02 0.4494312626454D-02 + 0.4599464510671D-02 0.4707069156490D-02 0.4817183511189D-02 0.4929865834738D-02 + 0.5045175729731D-02 0.5163174171964D-02 0.5283923541719D-02 0.5407487655733D-02 + 0.5533931799887D-02 0.5663322762626D-02 0.5795728869117D-02 0.5931220016182D-02 + 0.6069867707997D-02 0.6211745092591D-02 0.6356926999158D-02 0.6505489976198D-02 + 0.6657512330503D-02 0.6813074167014D-02 0.6972257429555D-02 0.7135145942476D-02 + 0.7301825453218D-02 0.7472383675814D-02 0.7646910335361D-02 0.7825497213470D-02 + 0.8008238194716D-02 0.8195229314124D-02 0.8386568805687D-02 0.8582357151965D-02 + 0.8782697134773D-02 0.8987693886973D-02 0.9197454945421D-02 0.9412090305061D-02 + 0.9631712474216D-02 0.9856436531081D-02 0.1008638018146D-01 0.1032166381776D-01 + 0.1056241057929D-01 0.1080874641382D-01 0.1106080014059D-01 0.1131870351456D-01 + 0.1158259129217D-01 0.1185260129847D-01 0.1212887449568D-01 0.1241155505336D-01 + 0.1270079041993D-01 0.1299673139589D-01 0.1329953220851D-01 0.1360935058821D-01 + 0.1392634784655D-01 0.1425068895590D-01 0.1458254263085D-01 0.1492208141131D-01 + 0.1526948174750D-01 0.1562492408662D-01 0.1598859296151D-01 0.1636067708113D-01 + 0.1674136942297D-01 0.1713086732749D-01 0.1752937259447D-01 0.1793709158156D-01 + 0.1835423530474D-01 0.1878101954106D-01 0.1921766493349D-01 0.1966439709798D-01 + 0.2012144673282D-01 0.2058904973028D-01 0.2106744729058D-01 0.2155688603831D-01 + 0.2205761814125D-01 0.2256990143168D-01 0.2309399953026D-01 0.2363018197247D-01 + 0.2417872433768D-01 0.2473990838093D-01 0.2531402216746D-01 0.2590136020997D-01 + 0.2650222360877D-01 0.2711692019482D-01 0.2774576467574D-01 0.2838907878477D-01 + 0.2904719143282D-01 0.2972043886368D-01 0.3040916481234D-01 0.3111372066657D-01 + 0.3183446563184D-01 0.3257176689949D-01 0.3332599981844D-01 0.3409754807025D-01 + 0.3488680384785D-01 0.3569416803777D-01 0.3652005040609D-01 0.3736486978808D-01 + 0.3822905428173D-01 0.3911304144500D-01 0.4001727849716D-01 0.4094222252402D-01 + 0.4188834068727D-01 0.4285611043798D-01 0.4384601973426D-01 0.4485856726328D-01 + 0.4589426266756D-01 0.4695362677574D-01 0.4803719183788D-01 0.4914550176524D-01 + 0.5027911237482D-01 0.5143859163859D-01 0.5262451993748D-01 0.5383749032032D-01 + 0.5507810876774D-01 0.5634699446102D-01 0.5764478005620D-01 0.5897211196327D-01 + 0.6032965063071D-01 0.6171807083536D-01 0.6313806197773D-01 0.6459032838288D-01 + 0.6607558960685D-01 0.6759458074882D-01 0.6914805276901D-01 0.7073677281249D-01 + 0.7236152453886D-01 0.7402310845803D-01 0.7572234227204D-01 0.7746006122315D-01 + 0.7923711844813D-01 0.8105438533895D-01 0.8291275190994D-01 0.8481312717146D-01 + 0.8675643951014D-01 0.8874363707591D-01 0.9077568817577D-01 0.9285358167436D-01 + 0.9497832740164D-01 0.9715095656743D-01 0.9937252218316D-01 0.1016440994908D+00 + 0.1039667863991D+00 0.1063417039270D+00 0.1087699966548D+00 0.1112528331826D+00 + 0.1137914065961D+00 0.1163869349408D+00 0.1190406617032D+00 0.1217538563001D+00 + 0.1245278145756D+00 0.1273638593065D+00 0.1302633407152D+00 0.1332276369907D+00 + 0.1362581548182D+00 0.1393563299164D+00 0.1425236275831D+00 0.1457615432496D+00 + 0.1490716030426D+00 0.1524553643553D+00 0.1559144164263D+00 0.1594503809276D+00 + 0.1630649125605D+00 0.1667596996605D+00 0.1705364648103D+00 0.1743969654622D+00 + 0.1783429945682D+00 0.1823763812192D+00 0.1864989912927D+00 0.1907127281095D+00 + 0.1950195330982D+00 0.1994213864695D+00 0.2039203078978D+00 0.2085183572123D+00 + 0.2132176350966D+00 0.2180202837962D+00 0.2229284878350D+00 0.2279444747402D+00 + 0.2330705157750D+00 0.2383089266807D+00 0.2436620684255D+00 0.2491323479628D+00 + 0.2547222189964D+00 0.2604341827547D+00 0.2662707887714D+00 0.2722346356749D+00 + 0.2783283719850D+00 0.2845546969161D+00 0.2909163611887D+00 0.2974161678473D+00 + 0.3040569730850D+00 0.3108416870752D+00 0.3177732748086D+00 0.3248547569377D+00 + 0.3320892106260D+00 0.3394797704033D+00 0.3470296290258D+00 0.3547420383422D+00 + 0.3626203101629D+00 0.3706678171348D+00 0.3788879936194D+00 0.3872843365743D+00 + 0.3958604064379D+00 0.4046198280174D+00 0.4135662913777D+00 0.4227035527333D+00 + 0.4320354353406D+00 0.4415658303911D+00 0.4512986979050D+00 0.4612380676239D+00 + 0.4713880399026D+00 0.4817527865991D+00 0.4923365519627D+00 0.5031436535179D+00 + 0.5141784829457D+00 0.5254455069594D+00 0.5369492681755D+00 0.5486943859781D+00 + 0.5606855573760D+00 0.5729275578526D+00 0.5854252422055D+00 0.5981835453774D+00 + 0.6112074832756D+00 0.6245021535788D+00 0.6380727365318D+00 0.6519244957251D+00 + 0.6660627788593D+00 0.6804930184930D+00 0.6952207327721D+00 0.7102515261402D+00 + 0.7255910900280D+00 0.7412452035208D+00 0.7572197340019D+00 0.7735206377712D+00 + 0.7901539606368D+00 0.8071258384784D+00 0.8244424977799D+00 0.8421102561313D+00 + 0.8601355226955D+00 0.8785247986406D+00 0.8972846775342D+00 0.9164218456981D+00 + 0.9359430825217D+00 0.9558552607316D+00 0.9761653466152D+00 0.9968804001960D+00 + 0.1018007575359D+01 0.1039554119923D+01 0.1061527375657D+01 0.1083934778239D+01 + 0.1106783857155D+01 0.1130082235534D+01 0.1153837629920D+01 0.1178057849966D+01 + 0.1202750798072D+01 0.1227924468933D+01 0.1253586949019D+01 0.1279746415969D+01 + 0.1306411137905D+01 0.1333589472658D+01 0.1361289866898D+01 0.1389520855179D+01 + 0.1418291058879D+01 0.1447609185042D+01 0.1477484025114D+01 0.1507924453573D+01 + 0.1538939426443D+01 0.1570537979692D+01 0.1602729227515D+01 0.1635522360484D+01 + 0.1668926643575D+01 0.1702951414064D+01 0.1737606079279D+01 0.1772900114215D+01 + 0.1808843059006D+01 0.1845444516241D+01 0.1882714148124D+01 0.1920661673484D+01 + 0.1959296864608D+01 0.1998629543915D+01 0.2038669580452D+01 0.2079426886209D+01 + 0.2120911412251D+01 0.2163133144669D+01 0.2206102100325D+01 0.2249828322406D+01 + 0.2294321875771D+01 0.2339592842093D+01 0.2385651314777D+01 0.2432507393674D+01 + 0.2480171179551D+01 0.2528652768350D+01 0.2577962245199D+01 0.2628109678186D+01 + 0.2679105111893D+01 0.2730958560667D+01 0.2783680001651D+01 0.2837279367540D+01 + 0.2891766539077D+01 0.2947151337282D+01 0.3003443515395D+01 0.3060652750548D+01 + 0.3118788635144D+01 0.3177860667952D+01 0.3237878244901D+01 0.3298850649581D+01 + 0.3360787043433D+01 0.3423696455642D+01 0.3487587772706D+01 0.3552469727697D+01 + 0.3618350889205D+01 0.3685239649953D+01 0.3753144215094D+01 0.3822072590172D+01 + 0.3892032568757D+01 0.3963031719749D+01 0.4035077374344D+01 0.4108176612659D+01 + 0.4182336250031D+01 0.4257562822965D+01 0.4333862574749D+01 0.4411241440733D+01 + 0.4489705033259D+01 0.4569258626264D+01 0.4649907139541D+01 0.4731655122665D+01 + 0.4814506738591D+01 0.4898465746917D+01 0.4983535486831D+01 0.5069718859726D+01 + 0.5157018311510D+01 0.5245435814598D+01 0.5334972849604D+01 0.5425630386741D+01 + 0.5517408866922D+01 0.5610308182594D+01 0.5704327658293D+01 0.5799466030950D+01 + 0.5895721429939D+01 0.5993091356902D+01 0.6091572665343D+01 0.6191161540026D+01 + 0.6291853476174D+01 0.6393643258502D+01 0.6496524940089D+01 0.6600491821120D+01 + 0.6705536427508D+01 0.6811650489422D+01 0.6918824919752D+01 0.7027049792516D+01 + 0.7136314321257D+01 0.7246606837441D+01 0.7357914768890D+01 0.7470224618285D+01 + 0.7583521941761D+01 0.7697791327633D+01 0.7813016375286D+01 0.7929179674266D+01 + 0.8046262783610D+01 0.8164246211451D+01 0.8283109394943D+01 0.8402830680546D+01 + 0.8523387304717D+01 0.8644755375050D+01 0.8766909851919D+01 0.8889824530662D+01 + 0.9013472024372D+01 0.9137823747332D+01 0.9262849899162D+01 0.9388519449721D+01 + 0.9514800124838D+01 0.9641658392911D+01 0.9769059452454D+01 0.9896967220642D+01 + 0.1002534432292D+02 0.1015415208375D+02 0.1028335051856D+02 0.1041289832694D+02 + 0.1054275288720D+02 0.1067287025230D+02 0.1080320514732D+02 0.1093371096842D+02 + 0.1106433978348D+02 0.1119504233437D+02 0.1132576804111D+02 0.1145646500778D+02 + 0.1158708003040D+02 0.1171755860686D+02 0.1184784494890D+02 0.1197788199624D+02 + 0.1210761143300D+02 0.1223697370643D+02 0.1236590804802D+02 0.1249435249713D+02 + 0.1262224392713D+02 0.1274951807422D+02 0.1287610956891D+02 0.1300195197030D+02 + 0.1312697780324D+02 0.1325111859836D+02 0.1337430493511D+02 0.1349646648783D+02 + 0.1361753207499D+02 0.1373742971158D+02 0.1385608666463D+02 0.1397342951220D+02 + 0.1408938420551D+02 0.1420387613459D+02 0.1431683019720D+02 0.1442817087135D+02 + 0.1453782229112D+02 0.1464570832613D+02 0.1475175266444D+02 0.1485587889894D+02 + 0.1495801061734D+02 0.1505807149563D+02 0.1515598539505D+02 0.1525167646255D+02 + 0.1534506923469D+02 0.1543608874497D+02 0.1552466063453D+02 0.1561071126614D+02 + 0.1569416784144D+02 0.1577495852137D+02 0.1585301254962D+02 0.1592826037906D+02 + 0.1600063380113D+02 0.1607006607780D+02 0.1613649207626D+02 0.1619984840598D+02 + 0.1626007355811D+02 0.1631710804694D+02 0.1637089455331D+02 0.1642137806973D+02 + 0.1646850604694D+02 0.1651222854187D+02 0.1655249836643D+02 0.1658927123725D+02 + 0.1662250592571D+02 0.1665216440833D+02 0.1667821201695D+02 0.1670061758849D+02 + 0.1671935361393D+02 0.1673439638626D+02 0.1674572614680D+02 0.1675332722984D+02 + 0.1675718820489D+02 0.1675730201639D+02 0.1675366612029D+02 0.1674628261721D+02 + 0.1673515838160D+02 0.1672030518660D+02 0.1670173982403D+02 0.1667948421911D+02 + 0.1665356553932D+02 0.1662401629713D+02 0.1659087444589D+02 0.1655418346847D+02 + 0.1651399245822D+02 0.1647035619162D+02 0.1642333519220D+02 0.1637299578522D+02 + 0.1631941014255D+02 0.1626265631736D+02 0.1620281826800D+02 0.1613998587066D+02 + 0.1607425492032D+02 0.1600572711953D+02 0.1593451005448D+02 0.1586071715810D+02 + 0.1578446765952D+02 0.1570588651969D+02 0.1562510435271D+02 0.1554225733239D+02 + 0.1545748708393D+02 0.1537094056013D+02 0.1528276990216D+02 0.1519313228432D+02 + 0.1510218974282D+02 0.1501010898825D+02 0.1491706120172D+02 0.1482322181439D+02 + 0.1472877027056D+02 0.1463388977412D+02 0.1453876701847D+02 0.1444359189998D+02 + 0.1434855721516D+02 0.1425385834165D+02 0.1415969290335D+02 0.1406626041994D+02 + 0.1397376194113D+02 0.1388239966616D+02 0.1379237654884D+02 0.1370389588884D+02 + 0.1361716090978D+02 0.1353237432463D+02 0.1344973788944D+02 0.1336945194585D+02 + 0.1329171495353D+02 0.1321672301317D+02 0.1314466938134D+02 0.1307574397764D+02 + 0.1301013288643D+02 0.1294801785263D+02 0.1288957577415D+02 0.1283497819168D+02 + 0.1278439077719D+02 0.1273797282248D+02 0.1269587672938D+02 0.1265824750278D+02 + 0.1262522224822D+02 0.1259692967553D+02 0.1257348960995D+02 0.1255501251259D+02 + 0.1254159901155D+02 0.1253333944568D+02 0.1253031342232D+02 0.1253258939096D+02 + 0.1254022423435D+02 0.1255326287874D+02 0.1257173792503D+02 0.1259566930240D+02 + 0.1262506394600D+02 0.1265991550053D+02 0.1270020405107D+02 0.1274589588280D+02 + 0.1279694327113D+02 0.1285328430368D+02 0.1291484273542D+02 0.1298152787843D+02 + 0.1305323452739D+02 0.1312984292209D+02 0.1321121874799D+02 0.1329721317575D+02 + 0.1338766294085D+02 0.1348239046377D+02 0.1358120401168D+02 0.1368389790210D+02 + 0.1379025274883D+02 0.1390003575075D+02 0.1401300102338D+02 0.1412888997336D+02 + 0.1424743171576D+02 0.1436834353392D+02 0.1449133138140D+02 0.1461609042557D+02 + 0.1474230563199D+02 0.1486965238885D+02 0.1499779717038D+02 0.1512639823800D+02 + 0.1525510637798D+02 0.1538356567399D+02 0.1551141431302D+02 0.1563828542269D+02 + 0.1576380793817D+02 0.1588760749642D+02 0.1600930735575D+02 0.1612852933795D+02 + 0.1624489479082D+02 0.1635802556828D+02 0.1646754502520D+02 0.1657307902430D+02 + 0.1667425695189D+02 0.1677071273953D+02 0.1686208588836D+02 0.1694802249283D+02 + 0.1702817626054D+02 0.1710220952485D+02 0.1716979424676D+02 0.1723061300262D+02 + 0.1728435995432D+02 0.1733074179819D+02 0.1736947868953D+02 0.1740030513890D+02 + 0.1742297087709D+02 0.1743724168510D+02 0.1744290018603D+02 0.1743974659549D+02 + 0.1742759942746D+02 0.1740629615247D+02 0.1737569380519D+02 0.1733566953861D+02 + 0.1728612112223D+02 0.1722696738154D+02 0.1715814857673D+02 0.1707962671824D+02 + 0.1699138581740D+02 0.1689343207022D+02 0.1678579397303D+02 0.1666852236849D+02 + 0.1654169042108D+02 0.1640539352121D+02 0.1625974911749D+02 0.1610489647684D+02 + 0.1594099637258D+02 0.1576823070075D+02 0.1558680202530D+02 0.1539693305309D+02 + 0.1519886603990D+02 0.1499286212893D+02 0.1477920062373D+02 0.1455817819755D+02 + 0.1433010804159D+02 0.1409531895495D+02 0.1385415437910D+02 0.1360697138042D+02 + 0.1335413958412D+02 0.1309604006359D+02 0.1283306418914D+02 0.1256561244045D+02 + 0.1229409318742D+02 0.1201892144398D+02 0.1174051759988D+02 0.1145930613567D+02 + 0.1117571432593D+02 0.1089017093619D+02 0.1060310491905D+02 0.1031494411493D+02 + 0.1002611396307D+02 0.9737036228271D+01 0.9448127748978D+01 0.9159799212137D+01 + 0.8872453960224D+01 0.8586486835702D+01 0.8302283068016D+01 0.8020217208022D+01 + 0.7740652114540D+01 0.7463937997512D+01 0.7190411521609D+01 0.6920394974658D+01 + 0.6654195503776D+01 0.6392104422571D+01 0.6134396592015D+01 0.5881329877208D+01 + 0.5633144681845D+01 0.5390063561676D+01 0.5152290917823D+01 0.4920012770300D+01 + 0.4693396611616D+01 0.4472591339847D+01 0.4257727270097D+01 0.4048916222783D+01 + 0.3846251686772D+01 0.3649809054935D+01 0.3459645929298D+01 0.3275802492617D+01 + 0.3098301942838D+01 0.2927150986626D+01 0.2762340387854D+01 0.2603845566745D+01 + 0.2451627245138D+01 0.2305632133210D+01 0.2165793652857D+01 0.2032032692873D+01 + 0.1904258390998D+01 0.1782368937897D+01 0.1666252398174D+01 0.1555787543536D+01 + 0.1450844693334D+01 0.1351286557804D+01 0.1256969079469D+01 0.1167742268318D+01 + 0.1083451026567D+01 0.1003935959018D+01 0.9290341652443D+00 0.8585800100976D+00 + 0.7924058692696D+00 0.7303428469392D+00 0.6722214628130D+00 0.6178723061713D+00 + 0.5671266548366D+00 0.5198170572937D+00 0.4757778765085D+00 0.4348457943007D+00 + 0.3968602754441D+00 0.3616639909708D+00 0.3291032004545D+00 0.2990280933404D+00 + 0.2712930896597D+00 0.2457571007346D+00 0.2222837507206D+00 0.2007415600622D+00 + 0.1810040921462D+00 0.1629500646234D+00 0.1464634270347D+00 0.1314334065222D+00 + 0.1177545235250D+00 0.1053265794595D+00 0.9405461845734D-01 0.8384886528833D-01 + 0.7462464162849D-01 0.6630226284235D-01 0.5880691744214D-01 0.5206853135862D-01 + 0.4602161911498D-01 0.4060512393584D-01 0.3576224875042D-01 0.3144027996354D-01 + 0.2759040577246D-01 0.2416753070297D-01 0.2113008792669D-01 0.1843985080459D-01 + 0.1606174498113D-01 0.1396366223069D-01 0.1211627713474D-01 0.1049286754506D-01 + 0.9069139668069D-02 0.7823058487381D-02 0.6734684128178D-02 0.5786014658544D-02 + 0.4960835719908D-02 0.4244577282225D-02 0.3624177729732D-02 0.3087955400419D-02 + 0.2625487627035D-02 0.2227497259527D-02 0.1885746588363D-02 0.1592938535094D-02 + 0.1342624930581D-02 0.1129121662324D-02 0.9474304399453D-03 0.7931669017510D-03 + 0.6624947650309D-03 0.5520657078526D-03 0.4589646602094D-03 0.3806601769220D-03 + 0.3149595632568D-03 0.2599684263118D-03 0.2140543303820D-03 0.1758142422924D-03 + 0.1440454626657D-03 0.1177197508559D-03 0.9596036446378D-04 0.7802174860524D-04 + 0.6327162510976D-04 0.5117524730842D-04 0.4128160176895D-04 0.3321135403353D-04 + 0.2664635092197D-04 0.2132050711792D-04 0.1701191842681D-04 0.1353605817300D-04 + 0.1073992660897D-04 0.8497035878124D-05 0.6703124964229D-05 0.5272510150108D-05 + 0.4134986785638D-05 0.3233207634943D-05 0.2520471748410D-05 0.1958865710514D-05 + 0.1517706279742D-05 0.1172239898148D-05 0.9025603453303D-06 0.6927109876189D-06 + 0.5299426724681D-06 0.4041023853658D-06 0.3071313668175D-06 0.2326545239714D-06 + 0.1756457075926D-06 0.1321558008512D-06 0.9909261999878D-07 0.7404339427499D-07 + 0.5513210650966D-07 0.4090526741789D-07 0.3024079341638D-07 0.2227558518901D-07 + 0.1634818494233D-07 0.1195354464424D-07 0.8707483586044D-08 0.6318867278968D-08 + 0.4567914967219D-08 0.3289352094104D-08 0.2359377458458D-08 0.1685621648831D-08 + 0.1199441444985D-08 0.8500308799920D-09 0.5999391982645D-09 0.4216737768588D-09 + 0.2951361838067D-09 0.2056952508216D-09 0.1427450951301D-09 0.9863071098592D-10 + 0.6785093267399D-10 0.4646977189272D-10 0.3168359136154D-10 0.2150429387060D-10 + 0.1452848527224D-10 0.9770053216322D-11 0.6539304800065D-11 0.4356126796501D-11 + 0.2887880260806D-11 0.1905201798784D-11 0.1250725394878D-11 0.8169916617209D-12 + 0.5309432694921D-12 0.3433000833030D-12 0.2208020111155D-12 0.1412809577700D-12 + 0.8992689621478D-13 0.5693706621335D-13 0.3585707402774D-13 0.2245975161629D-13 + 0.1399148636359D-13 0.8668296063641D-14 0.5340818176435D-14 diff --git a/Test/Ni4/v_ni4.3 b/Test/Ni4/v_ni4.3 new file mode 100644 index 000000000..4e8a87815 --- /dev/null +++ b/Test/Ni4/v_ni4.3 @@ -0,0 +1,1554 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Ni. + 2 -0.3322713216605D-24 + LSMS: xx z= 28. xvalws= 5.28292 + 28. 6.55000 10. 0.6401316680236D+00 + -0.1113096740000D+02 0.8563086195639D+00 1010 +-0.5599696222824D+02-0.5599692578589D+02-0.5599688890636D+02-0.5599685158441D+02 +-0.5599681381473D+02-0.5599677559194D+02-0.5599673691063D+02-0.5599669776527D+02 +-0.5599665815031D+02-0.5599661806011D+02-0.5599657748897D+02-0.5599653643111D+02 +-0.5599649488071D+02-0.5599645283185D+02-0.5599641027854D+02-0.5599636721475D+02 +-0.5599632363433D+02-0.5599627953111D+02-0.5599623489879D+02-0.5599618973104D+02 +-0.5599614402142D+02-0.5599609776345D+02-0.5599605095053D+02-0.5599600357602D+02 +-0.5599595563317D+02-0.5599590711516D+02-0.5599585801509D+02-0.5599580832599D+02 +-0.5599575804078D+02-0.5599570715230D+02-0.5599565565333D+02-0.5599560353654D+02 +-0.5599555079451D+02-0.5599549741974D+02-0.5599544340465D+02-0.5599538874153D+02 +-0.5599533342264D+02-0.5599527744008D+02-0.5599522078591D+02-0.5599516345205D+02 +-0.5599510543037D+02-0.5599504671259D+02-0.5599498729038D+02-0.5599492715528D+02 +-0.5599486629873D+02-0.5599480471208D+02-0.5599474238656D+02-0.5599467931332D+02 +-0.5599461548337D+02-0.5599455088765D+02-0.5599448551696D+02-0.5599441936200D+02 +-0.5599435241335D+02-0.5599428466151D+02-0.5599421609682D+02-0.5599414670954D+02 +-0.5599407648980D+02-0.5599400542760D+02-0.5599393351283D+02-0.5599386073527D+02 +-0.5599378708456D+02-0.5599371255022D+02-0.5599363712166D+02-0.5599356078813D+02 +-0.5599348353878D+02-0.5599340536263D+02-0.5599332624854D+02-0.5599324618526D+02 +-0.5599316516140D+02-0.5599308316543D+02-0.5599300018570D+02-0.5599291621038D+02 +-0.5599283122754D+02-0.5599274522508D+02-0.5599265819077D+02-0.5599257011222D+02 +-0.5599248097690D+02-0.5599239077213D+02-0.5599229948507D+02-0.5599220710274D+02 +-0.5599211361199D+02-0.5599201899952D+02-0.5599192325186D+02-0.5599182635539D+02 +-0.5599172829632D+02-0.5599162906071D+02-0.5599152863442D+02-0.5599142700317D+02 +-0.5599132415249D+02-0.5599122006776D+02-0.5599111473416D+02-0.5599100813669D+02 +-0.5599090026020D+02-0.5599079108932D+02-0.5599068060852D+02-0.5599056880208D+02 +-0.5599045565409D+02-0.5599034114845D+02-0.5599022526885D+02-0.5599010799881D+02 +-0.5598998932164D+02-0.5598986922044D+02-0.5598974767813D+02-0.5598962467740D+02 +-0.5598950020074D+02-0.5598937423045D+02-0.5598924674859D+02-0.5598911773702D+02 +-0.5598898717737D+02-0.5598885505105D+02-0.5598872133927D+02-0.5598858602299D+02 +-0.5598844908295D+02-0.5598831049965D+02-0.5598817025337D+02-0.5598802832414D+02 +-0.5598788469176D+02-0.5598773933579D+02-0.5598759223552D+02-0.5598744337002D+02 +-0.5598729271809D+02-0.5598714025829D+02-0.5598698596891D+02-0.5598682982799D+02 +-0.5598667181329D+02-0.5598651190232D+02-0.5598635007231D+02-0.5598618630022D+02 +-0.5598602056272D+02-0.5598585283623D+02-0.5598568309685D+02-0.5598551132043D+02 +-0.5598533748249D+02-0.5598516155828D+02-0.5598498352276D+02-0.5598480335057D+02 +-0.5598462101605D+02-0.5598443649324D+02-0.5598424975586D+02-0.5598406077731D+02 +-0.5598386953068D+02-0.5598367598873D+02-0.5598348012390D+02-0.5598328190829D+02 +-0.5598308131367D+02-0.5598287831146D+02-0.5598267287276D+02-0.5598246496830D+02 +-0.5598225456847D+02-0.5598204164328D+02-0.5598182616243D+02-0.5598160809520D+02 +-0.5598138741053D+02-0.5598116407698D+02-0.5598093806274D+02-0.5598070933560D+02 +-0.5598047786299D+02-0.5598024361191D+02-0.5598000654900D+02-0.5597976664047D+02 +-0.5597952385215D+02-0.5597927814943D+02-0.5597902949731D+02-0.5597877786036D+02 +-0.5597852320271D+02-0.5597826548807D+02-0.5597800467972D+02-0.5597774074049D+02 +-0.5597747363277D+02-0.5597720331847D+02-0.5597692975908D+02-0.5597665291561D+02 +-0.5597637274859D+02-0.5597608921810D+02-0.5597580228370D+02-0.5597551190451D+02 +-0.5597521803912D+02-0.5597492064565D+02-0.5597461968170D+02-0.5597431510435D+02 +-0.5597400687019D+02-0.5597369493526D+02-0.5597337925510D+02-0.5597305978468D+02 +-0.5597273647846D+02-0.5597240929033D+02-0.5597207817363D+02-0.5597174308115D+02 +-0.5597140396509D+02-0.5597106077709D+02-0.5597071346821D+02-0.5597036198890D+02 +-0.5597000628904D+02-0.5596964631789D+02-0.5596928202409D+02-0.5596891335569D+02 +-0.5596854026009D+02-0.5596816268406D+02-0.5596778057374D+02-0.5596739387460D+02 +-0.5596700253148D+02-0.5596660648853D+02-0.5596620568924D+02-0.5596580007642D+02 +-0.5596538959218D+02-0.5596497417795D+02-0.5596455377443D+02-0.5596412832164D+02 +-0.5596369775883D+02-0.5596326202456D+02-0.5596282105662D+02-0.5596237479207D+02 +-0.5596192316720D+02-0.5596146611754D+02-0.5596100357783D+02-0.5596053548203D+02 +-0.5596006176331D+02-0.5595958235402D+02-0.5595909718570D+02-0.5595860618908D+02 +-0.5595810929402D+02-0.5595760642956D+02-0.5595709752389D+02-0.5595658250430D+02 +-0.5595606129723D+02-0.5595553382823D+02-0.5595500002195D+02-0.5595445980212D+02 +-0.5595391309155D+02-0.5595335981214D+02-0.5595279988483D+02-0.5595223322959D+02 +-0.5595165976547D+02-0.5595107941049D+02-0.5595049208171D+02-0.5594989769518D+02 +-0.5594929616595D+02-0.5594868740802D+02-0.5594807133437D+02-0.5594744785691D+02 +-0.5594681688652D+02-0.5594617833297D+02-0.5594553210495D+02-0.5594487811005D+02 +-0.5594421625474D+02-0.5594354644436D+02-0.5594286858311D+02-0.5594218257403D+02 +-0.5594148831899D+02-0.5594078571866D+02-0.5594007467252D+02-0.5593935507885D+02 +-0.5593862683468D+02-0.5593788983579D+02-0.5593714397671D+02-0.5593638915070D+02 +-0.5593562524973D+02-0.5593485216444D+02-0.5593406978417D+02-0.5593327799692D+02 +-0.5593247668933D+02-0.5593166574665D+02-0.5593084505278D+02-0.5593001449019D+02 +-0.5592917393992D+02-0.5592832328159D+02-0.5592746239336D+02-0.5592659115190D+02 +-0.5592570943241D+02-0.5592481710855D+02-0.5592391405247D+02-0.5592300013478D+02 +-0.5592207522450D+02-0.5592113918908D+02-0.5592019189435D+02-0.5591923320453D+02 +-0.5591826298219D+02-0.5591728108823D+02-0.5591628738187D+02-0.5591528172062D+02 +-0.5591426396027D+02-0.5591323395486D+02-0.5591219155665D+02-0.5591113661612D+02 +-0.5591006898193D+02-0.5590898850093D+02-0.5590789501807D+02-0.5590678837645D+02 +-0.5590566841727D+02-0.5590453497978D+02-0.5590338790131D+02-0.5590222701719D+02 +-0.5590105216076D+02-0.5589986316335D+02-0.5589865985424D+02-0.5589744206062D+02 +-0.5589620960760D+02-0.5589496231817D+02-0.5589370001315D+02-0.5589242251122D+02 +-0.5589112962883D+02-0.5588982118021D+02-0.5588849697734D+02-0.5588715682990D+02 +-0.5588580054527D+02-0.5588442792851D+02-0.5588303878228D+02-0.5588163290685D+02 +-0.5588021010008D+02-0.5587877015737D+02-0.5587731287161D+02-0.5587583803320D+02 +-0.5587434542999D+02-0.5587283484724D+02-0.5587130606761D+02-0.5586975887112D+02 +-0.5586819303509D+02-0.5586660833417D+02-0.5586500454025D+02-0.5586338142245D+02 +-0.5586173874708D+02-0.5586007627761D+02-0.5585839377464D+02-0.5585669099585D+02 +-0.5585496769597D+02-0.5585322362676D+02-0.5585145853695D+02-0.5584967217221D+02 +-0.5584786427512D+02-0.5584603458514D+02-0.5584418283853D+02-0.5584230876837D+02 +-0.5584041210449D+02-0.5583849257340D+02-0.5583654989832D+02-0.5583458379908D+02 +-0.5583259399211D+02-0.5583058019037D+02-0.5582854210335D+02-0.5582647943699D+02 +-0.5582439189365D+02-0.5582227917207D+02-0.5582014096732D+02-0.5581797697076D+02 +-0.5581578686998D+02-0.5581357034878D+02-0.5581132708710D+02-0.5580905676100D+02 +-0.5580675904257D+02-0.5580443359992D+02-0.5580208009713D+02-0.5579969819415D+02 +-0.5579728754684D+02-0.5579484780684D+02-0.5579237862153D+02-0.5578987963404D+02 +-0.5578735048312D+02-0.5578479080313D+02-0.5578220022398D+02-0.5577957837107D+02 +-0.5577692486524D+02-0.5577423932271D+02-0.5577152135503D+02-0.5576877056901D+02 +-0.5576598656669D+02-0.5576316894524D+02-0.5576031729696D+02-0.5575743120915D+02 +-0.5575451026411D+02-0.5575155403905D+02-0.5574856210601D+02-0.5574553403187D+02 +-0.5574246937818D+02-0.5573936770121D+02-0.5573622855179D+02-0.5573305147530D+02 +-0.5572983601159D+02-0.5572658169491D+02-0.5572328805384D+02-0.5571995461125D+02 +-0.5571658088417D+02-0.5571316638379D+02-0.5570971061534D+02-0.5570621307804D+02 +-0.5570267326504D+02-0.5569909066329D+02-0.5569546475356D+02-0.5569179501028D+02 +-0.5568808090150D+02-0.5568432188882D+02-0.5568051742730D+02-0.5567666696540D+02 +-0.5567276994485D+02-0.5566882580066D+02-0.5566483396095D+02-0.5566079384693D+02 +-0.5565670487277D+02-0.5565256644557D+02-0.5564837796522D+02-0.5564413882437D+02 +-0.5563984840830D+02-0.5563550609485D+02-0.5563111125436D+02-0.5562666324952D+02 +-0.5562216143533D+02-0.5561760515901D+02-0.5561299375987D+02-0.5560832656927D+02 +-0.5560360291049D+02-0.5559882209863D+02-0.5559398344056D+02-0.5558908623478D+02 +-0.5558412977135D+02-0.5557911333176D+02-0.5557403618889D+02-0.5556889760684D+02 +-0.5556369684090D+02-0.5555843313738D+02-0.5555310573357D+02-0.5554771385759D+02 +-0.5554225672831D+02-0.5553673355525D+02-0.5553114353844D+02-0.5552548586837D+02 +-0.5551975972583D+02-0.5551396428182D+02-0.5550809869745D+02-0.5550216212382D+02 +-0.5549615370192D+02-0.5549007256249D+02-0.5548391782594D+02-0.5547768860221D+02 +-0.5547138399068D+02-0.5546500308004D+02-0.5545854494815D+02-0.5545200866198D+02 +-0.5544539327745D+02-0.5543869783930D+02-0.5543192138103D+02-0.5542506292469D+02 +-0.5541812148084D+02-0.5541109604840D+02-0.5540398561451D+02-0.5539678915440D+02 +-0.5538950563133D+02-0.5538213399637D+02-0.5537467318837D+02-0.5536712213374D+02 +-0.5535947974639D+02-0.5535174492760D+02-0.5534391656584D+02-0.5533599353668D+02 +-0.5532797470268D+02-0.5531985891319D+02-0.5531164500429D+02-0.5530333179863D+02 +-0.5529491810528D+02-0.5528640271963D+02-0.5527778442326D+02-0.5526906198374D+02 +-0.5526023415460D+02-0.5525129967511D+02-0.5524225727020D+02-0.5523310565028D+02 +-0.5522384351115D+02-0.5521446953384D+02-0.5520498238448D+02-0.5519538071417D+02 +-0.5518566315882D+02-0.5517582833908D+02-0.5516587486011D+02-0.5515580131153D+02 +-0.5514560626725D+02-0.5513528828533D+02-0.5512484590785D+02-0.5511427766079D+02 +-0.5510358205390D+02-0.5509275758052D+02-0.5508180271751D+02-0.5507071592509D+02 +-0.5505949564671D+02-0.5504814030891D+02-0.5503664832120D+02-0.5502501807596D+02 +-0.5501324794826D+02-0.5500133629576D+02-0.5498928145859D+02-0.5497708175923D+02 +-0.5496473550236D+02-0.5495224097477D+02-0.5493959644521D+02-0.5492680016431D+02 +-0.5491385036441D+02-0.5490074525951D+02-0.5488748304510D+02-0.5487406189808D+02 +-0.5486047997664D+02-0.5484673542016D+02-0.5483282634909D+02-0.5481875086488D+02 +-0.5480450704984D+02-0.5479009296707D+02-0.5477550666034D+02-0.5476074615405D+02 +-0.5474580945308D+02-0.5473069454274D+02-0.5471539938866D+02-0.5469992193677D+02 +-0.5468426011314D+02-0.5466841182398D+02-0.5465237495554D+02-0.5463614737403D+02 +-0.5461972692559D+02-0.5460311143622D+02-0.5458629871174D+02-0.5456928653772D+02 +-0.5455207267943D+02-0.5453465488185D+02-0.5451703086959D+02-0.5449919834687D+02 +-0.5448115499752D+02-0.5446289848492D+02-0.5444442645202D+02-0.5442573652133D+02 +-0.5440682629490D+02-0.5438769335434D+02-0.5436833526081D+02-0.5434874955506D+02 +-0.5432893375745D+02-0.5430888536794D+02-0.5428860186618D+02-0.5426808071152D+02 +-0.5424731934305D+02-0.5422631517968D+02-0.5420506562020D+02-0.5418356804332D+02 +-0.5416181980777D+02-0.5413981825241D+02-0.5411756069626D+02-0.5409504443864D+02 +-0.5407226675929D+02-0.5404922491843D+02-0.5402591615695D+02-0.5400233769649D+02 +-0.5397848673961D+02-0.5395436046993D+02-0.5392995605226D+02-0.5390527063280D+02 +-0.5388030133932D+02-0.5385504528129D+02-0.5382949955012D+02-0.5380366121933D+02 +-0.5377752734478D+02-0.5375109496485D+02-0.5372436110071D+02-0.5369732275652D+02 +-0.5366997691970D+02-0.5364232056114D+02-0.5361435063550D+02-0.5358606408144D+02 +-0.5355745782194D+02-0.5352852876455D+02-0.5349927380169D+02-0.5346968981097D+02 +-0.5343977365546D+02-0.5340952218404D+02-0.5337893223173D+02-0.5334800061997D+02 +-0.5331672415703D+02-0.5328509963831D+02-0.5325312384670D+02-0.5322079355294D+02 +-0.5318810551600D+02-0.5315505648344D+02-0.5312164319178D+02-0.5308786236690D+02 +-0.5305371072443D+02-0.5301918497011D+02-0.5298428180021D+02-0.5294899790196D+02 +-0.5291332995388D+02-0.5287727462625D+02-0.5284082858148D+02-0.5280398847456D+02 +-0.5276675095342D+02-0.5272911265938D+02-0.5269107022753D+02-0.5265262028717D+02 +-0.5261375946222D+02-0.5257448437158D+02-0.5253479162958D+02-0.5249467784638D+02 +-0.5245413962833D+02-0.5241317357839D+02-0.5237177629651D+02-0.5232994437998D+02 +-0.5228767442386D+02-0.5224496302128D+02-0.5220180676382D+02-0.5215820224186D+02 +-0.5211414604488D+02-0.5206963476182D+02-0.5202466498135D+02-0.5197923329218D+02 +-0.5193333628333D+02-0.5188697054440D+02-0.5184013266581D+02-0.5179281923901D+02 +-0.5174502685673D+02-0.5169675211312D+02-0.5164799160395D+02-0.5159874192676D+02 +-0.5154899968095D+02-0.5149876146794D+02-0.5144802389119D+02-0.5139678355629D+02 +-0.5134503707098D+02-0.5129278104517D+02-0.5124001209089D+02-0.5118672682225D+02 +-0.5113292185539D+02-0.5107859380833D+02-0.5102373930087D+02-0.5096835495445D+02 +-0.5091243739191D+02-0.5085598323730D+02-0.5079898911566D+02-0.5074145165270D+02 +-0.5068336747456D+02-0.5062473320742D+02-0.5056554547719D+02-0.5050580090915D+02 +-0.5044549612750D+02-0.5038462775495D+02-0.5032319241231D+02-0.5026118671799D+02 +-0.5019860728753D+02-0.5013545073308D+02-0.5007171366293D+02-0.5000739268094D+02 +-0.4994248438603D+02-0.4987698537166D+02-0.4981089222525D+02-0.4974420152767D+02 +-0.4967690985269D+02-0.4960901376648D+02-0.4954050982708D+02-0.4947139458392D+02 +-0.4940166457737D+02-0.4933131633826D+02-0.4926034638753D+02-0.4918875123586D+02 +-0.4911652738334D+02-0.4904367131924D+02-0.4897017952180D+02-0.4889604845812D+02 +-0.4882127458414D+02-0.4874585434461D+02-0.4866978417330D+02-0.4859306049320D+02 +-0.4851567971689D+02-0.4843763824698D+02-0.4835893247673D+02-0.4827955879080D+02 +-0.4819951356609D+02-0.4811879317284D+02-0.4803739397580D+02-0.4795531233565D+02 +-0.4787254461052D+02-0.4778908715782D+02-0.4770493633617D+02-0.4762008850757D+02 +-0.4753454003985D+02-0.4744828730923D+02-0.4736132670323D+02-0.4727365462373D+02 +-0.4718526749029D+02-0.4709616174376D+02-0.4700633385008D+02-0.4691578030434D+02 +-0.4682449763507D+02-0.4673248240881D+02-0.4663973123487D+02-0.4654624077030D+02 +-0.4645200772512D+02-0.4635702886768D+02-0.4626130103029D+02-0.4616482111490D+02 +-0.4606758609896D+02-0.4596959304142D+02-0.4587083908873D+02-0.4577132148090D+02 +-0.4567103755758D+02-0.4556998476407D+02-0.4546816065717D+02-0.4536556291099D+02 +-0.4526218932245D+02-0.4515803781656D+02-0.4505310645130D+02-0.4494739342218D+02 +-0.4484089706625D+02-0.4473361586559D+02-0.4462554845016D+02-0.4451669359998D+02 +-0.4440705024651D+02-0.4429661747322D+02-0.4418539451519D+02-0.4407338075785D+02 +-0.4396057573455D+02-0.4384697912320D+02-0.4373259074173D+02-0.4361741054236D+02 +-0.4350143860488D+02-0.4338467512865D+02-0.4326712042352D+02-0.4314877489972D+02 +-0.4302963905669D+02-0.4290971347096D+02-0.4278899878323D+02-0.4266749568475D+02 +-0.4254520490309D+02-0.4242212718753D+02-0.4229826329427D+02-0.4217361397159D+02 +-0.4204817994520D+02-0.4192196190406D+02-0.4179496048687D+02-0.4166717626939D+02 +-0.4153860975298D+02-0.4140926135451D+02-0.4127913139777D+02-0.4114822010683D+02 +-0.4101652760126D+02-0.4088405389359D+02-0.4075079888899D+02-0.4061676238745D+02 +-0.4048194408828D+02-0.4034634359727D+02-0.4020996043623D+02-0.4007279405504D+02 +-0.3993484384613D+02-0.3979610916110D+02-0.3965658932967D+02-0.3951628368036D+02 +-0.3937519156311D+02-0.3923331237331D+02-0.3909064557714D+02-0.3894719073791D+02 +-0.3880294754316D+02-0.3865791583219D+02-0.3851209562376D+02-0.3836548714373D+02 +-0.3821809085222D+02-0.3806990747022D+02-0.3792093800519D+02-0.3777118377560D+02 +-0.3762064643396D+02-0.3746932798842D+02-0.3731723082241D+02-0.3716435771246D+02 +-0.3701071184383D+02-0.3685629682396D+02-0.3670111669348D+02-0.3654517593490D+02 +-0.3638847947866D+02-0.3623103270670D+02-0.3607284145339D+02-0.3591391200380D+02 +-0.3575425108946D+02-0.3559386588133D+02-0.3543276398037D+02-0.3527095340541D+02 +-0.3510844257863D+02-0.3494524030858D+02-0.3478135577083D+02-0.3461679848643D+02 +-0.3445157829811D+02-0.3428570534457D+02-0.3411919003274D+02-0.3395204300829D+02 +-0.3378427512447D+02-0.3361589740948D+02-0.3344692103249D+02-0.3327735726840D+02 +-0.3310721746174D+02-0.3293651298968D+02-0.3276525522435D+02-0.3259345549488D+02 +-0.3242112504914D+02-0.3224827501549D+02-0.3207491636476D+02-0.3190105987274D+02 +-0.3172671608332D+02-0.3155189527260D+02-0.3137660741417D+02-0.3120086214594D+02 +-0.3102466873853D+02-0.3084803606581D+02-0.3067097257761D+02-0.3049348627496D+02 +-0.3031558468815D+02-0.3013727485790D+02-0.2995856331977D+02-0.2977945609235D+02 +-0.2959995866920D+02-0.2942007601496D+02-0.2923981256594D+02-0.2905917223523D+02 +-0.2887815842271D+02-0.2869677403014D+02-0.2851502148146D+02-0.2833290274854D+02 +-0.2815041938242D+02-0.2796757255018D+02-0.2778436307759D+02-0.2760079149730D+02 +-0.2741685810279D+02-0.2723256300783D+02-0.2704790621131D+02-0.2686288766711D+02 +-0.2667750735885D+02-0.2649176537888D+02-0.2630566201102D+02-0.2611919781653D+02 +-0.2593237372222D+02-0.2574519111010D+02-0.2555765190721D+02-0.2536975867460D+02 +-0.2518151469399D+02-0.2499292405051D+02-0.2480399171006D+02-0.2461472358916D+02 +-0.2442512661564D+02-0.2423520877796D+02-0.2404497916121D+02-0.2385444796763D+02 +-0.2366362651966D+02-0.2347252724381D+02-0.2328116363345D+02-0.2308955018945D+02 +-0.2289770233772D+02-0.2270563632319D+02-0.2251336908079D+02-0.2232091808423D+02 +-0.2212830117462D+02-0.2193553637155D+02-0.2174264167034D+02-0.2154963482993D+02 +-0.2135653315663D+02-0.2116335328969D+02-0.2097011099509D+02-0.2077682097407D+02 +-0.2058349669315D+02-0.2039015024168D+02-0.2019679222273D+02-0.2000343168188D+02 +-0.1981007607758D+02-0.1961673129514D+02-0.1942340170518D+02-0.1923009026563D+02 +-0.1903679866507D+02-0.1884352750377D+02-0.1865027650752D+02-0.1845704476868D+02 +-0.1826383100789D+02-0.1807063384981D+02-0.1787745210610D+02-0.1768428505888D+02 +-0.1749113273862D+02-0.1729799619070D+02-0.1710487772595D+02-0.1691178115078D+02 +-0.1671871197403D+02-0.1652567758787D+02-0.1633268742122D+02-0.1613975306488D+02 +-0.1594688836807D+02-0.1575410950680D+02-0.1556143502474D+02-0.1536888584794D+02 +-0.1517648527479D+02-0.1498425894283D+02-0.1479223477439D+02-0.1460044290282D+02 +-0.1440891558124D+02-0.1421768707594D+02-0.1402679354599D+02-0.1383627291119D+02 +-0.1364616470994D+02-0.1345650994882D+02-0.1326735094526D+02-0.1307873116512D+02 +-0.1289069505616D+02-0.1270328787905D+02-0.1251655553691D+02-0.1233054440456D+02 +-0.1214530115858D+02-0.1196087260900D+02-0.1177730553358D+02-0.1159464651556D+02 +-0.1141294178546D+02-0.1123223706771D+02-0.1105257743276D+02-0.1087400715511D+02 +-0.1069656957788D+02-0.1052030698433D+02-0.1034526047671D+02-0.1017146986276D+02 +-0.9998973550304D+01-0.9827808449991D+01-0.9658009886550D+01-0.9489611518644D+01 +-0.9322645267466D+01-0.9157141254155D+01-0.8993127746062D+01-0.8830631111875D+01 +-0.8669675785557D+01-0.8510284239016D+01-0.8352476963414D+01-0.8196272458942D+01 +-0.8041687232918D+01-0.7888735805962D+01-0.7737430726056D+01-0.7587782590186D+01 +-0.7439800073312D+01-0.7293489964330D+01-0.7148857208720D+01-0.7005904957514D+01 +-0.6864634622219D+01-0.6725045935325D+01-0.6587137015995D+01-0.6450904440533D+01 +-0.6316343317221D+01-0.6183447365098D+01-0.6052208996262D+01-0.5922619401257D+01 +-0.5794668637125D+01-0.5668345717679D+01-0.5543638705576D+01-0.5420534805760D+01 +-0.5299020459852D+01-0.5179081441071D+01-0.5060702949271D+01-0.4943869705704D+01 +-0.4828566047100D+01-0.4714776018691D+01-0.4602483465805D+01-0.4491672123673D+01 +-0.4382325705095D+01-0.4274427985640D+01-0.4167962886061D+01-0.4062914551618D+01 +-0.3959267428037D+01-0.3857006333826D+01-0.3756116528718D+01-0.3656583778001D+01 +-0.3558394412557D+01-0.3461535384413D+01-0.3365994317682D+01-0.3271759554763D+01 +-0.3178820197726D+01-0.3087166144845D+01-0.2996788122259D+01-0.2907677710821D+01 +-0.2819827368207D+01-0.2733230446431D+01-0.2647881204950D+01-0.2563774819612D+01 +-0.2480907387749D+01-0.2399275929784D+01-0.2318878387764D+01-0.2239713621329D+01 +-0.2161781401633D+01-0.2085082403831D+01-0.2009618198778D+01-0.1935391244617D+01 +-0.1862404878998D+01-0.1790663312655D+01-0.1720171625111D+01-0.1650935763269D+01 +-0.1582962543626D+01-0.1516259658827D+01-0.1450835689223D+01-0.1386700120052D+01 +-0.1323863364771D+01-0.1262336795005D+01-0.1202132777469D+01-0.1143264718130D+01 +-0.1085747113774D+01-0.1029595611013D+01-0.9748270727154D+00-0.9214596516777D+00 +-0.8695128713252D+00-0.8190077131099D+00-0.7699667102222D+00-0.7224140471735D+00 +-0.6763756647684D+00-0.6318793699591D+00-0.5889549500632D+00-0.5476342908327D+00 +-0.5079514978739D+00-0.4699430209489D+00-0.4336477807207D+00-0.3991072975512D+00 +-0.3663658220029D+00-0.3354704667473D+00-0.3064713396296D+00-0.2794216776835D+00 +-0.2543779819454D+00-0.2313999299251D+00 + 0.0000000000000D+00 + 1019 0.5282916303874D+01 + 0.2822835389983D-04 0.2889232671911D-04 0.2957191402324D-04 0.3026748289127D-04 + 0.3097940902739D-04 0.3170807696342D-04 0.3245388026606D-04 0.3321722174901D-04 + 0.3399851369009D-04 0.3479817805334D-04 0.3561664671650D-04 0.3645436170367D-04 + 0.3731177542349D-04 0.3818935091294D-04 0.3908756208675D-04 0.4000689399278D-04 + 0.4094784307328D-04 0.4191091743234D-04 0.4289663710960D-04 0.4390553436033D-04 + 0.4493815394213D-04 0.4599505340833D-04 0.4707680340823D-04 0.4818398799443D-04 + 0.4931720493734D-04 0.5047706604703D-04 0.5166419750268D-04 0.5287924018966D-04 + 0.5412285004463D-04 0.5539569840859D-04 0.5669847238832D-04 0.5803187522616D-04 + 0.5939662667858D-04 0.6079346340354D-04 0.6222313935691D-04 0.6368642619823D-04 + 0.6518411370593D-04 0.6671701020226D-04 0.6828594298825D-04 0.6989175878871D-04 + 0.7153532420780D-04 0.7321752619517D-04 0.7493927252301D-04 0.7670149227435D-04 + 0.7850513634266D-04 0.8035117794328D-04 0.8224061313666D-04 0.8417446136405D-04 + 0.8615376599547D-04 0.8817959489076D-04 0.9025304097353D-04 0.9237522281871D-04 + 0.9454728525372D-04 0.9677039997378D-04 0.9904576617157D-04 0.1013746111816D-03 + 0.1037581911398D-03 0.1061977916581D-03 0.1086947285154D-03 0.1112503483645D-03 + 0.1138660294548D-03 0.1165431823732D-03 0.1192832508014D-03 0.1220877122909D-03 + 0.1249580790570D-03 0.1278958987898D-03 0.1309027554859D-03 0.1339802702983D-03 + 0.1371301024066D-03 0.1403539499072D-03 0.1436535507253D-03 0.1470306835465D-03 + 0.1504871687719D-03 0.1540248694945D-03 0.1576456924982D-03 0.1613515892812D-03 + 0.1651445571022D-03 0.1690266400516D-03 0.1729999301474D-03 0.1770665684570D-03 + 0.1812287462450D-03 0.1854887061476D-03 0.1898487433750D-03 0.1943112069407D-03 + 0.1988785009209D-03 0.2035530857423D-03 0.2083374795002D-03 0.2132342593074D-03 + 0.2182460626742D-03 0.2233755889215D-03 0.2286256006255D-03 0.2339989250972D-03 + 0.2394984558959D-03 0.2451271543779D-03 0.2508880512812D-03 0.2567842483480D-03 + 0.2628189199834D-03 0.2689953149545D-03 0.2753167581275D-03 0.2817866522465D-03 + 0.2884084797527D-03 0.2951858046468D-03 0.3021222743941D-03 0.3092216218742D-03 + 0.3164876673763D-03 0.3239243206404D-03 0.3315355829466D-03 0.3393255492521D-03 + 0.3472984103792D-03 0.3554584552526D-03 0.3638100731904D-03 0.3723577562469D-03 + 0.3811061016106D-03 0.3900598140580D-03 0.3992237084638D-03 0.4086027123703D-03 + 0.4182018686156D-03 0.4280263380234D-03 0.4380814021550D-03 0.4483724661254D-03 + 0.4589050614847D-03 0.4696848491661D-03 0.4807176225028D-03 0.4920093103142D-03 + 0.5035659800647D-03 0.5153938410950D-03 0.5274992479281D-03 0.5398887036530D-03 + 0.5525688633857D-03 0.5655465378112D-03 0.5788286968073D-03 0.5924224731520D-03 + 0.6063351663176D-03 0.6205742463520D-03 0.6351473578499D-03 0.6500623240163D-03 + 0.6653271508237D-03 0.6809500312658D-03 0.6969393497094D-03 0.7133036863469D-03 + 0.7300518217520D-03 0.7471927415405D-03 0.7647356411393D-03 0.7826899306648D-03 + 0.8010652399149D-03 0.8198714234755D-03 0.8391185659460D-03 0.8588169872840D-03 + 0.8789772482749D-03 0.8996101561266D-03 0.9207267701938D-03 0.9423384078346D-03 + 0.9644566504011D-03 0.9870933493699D-03 0.1010260632612D-02 0.1033970910808D-02 + 0.1058236884013D-02 0.1083071548367D-02 0.1108488202970D-02 0.1134500456900D-02 + 0.1161122236412D-02 0.1188367792284D-02 0.1216251707344D-02 0.1244788904167D-02 + 0.1273994652944D-02 0.1303884579543D-02 0.1334474673741D-02 0.1365781297658D-02 + 0.1397821194374D-02 0.1430611496756D-02 0.1464169736471D-02 0.1498513853225D-02 + 0.1533662204197D-02 0.1569633573700D-02 0.1606447183057D-02 0.1644122700711D-02 + 0.1682680252554D-02 0.1722140432508D-02 0.1762524313336D-02 0.1803853457707D-02 + 0.1846149929507D-02 0.1889436305420D-02 0.1933735686763D-02 0.1979071711596D-02 + 0.2025468567111D-02 0.2072951002295D-02 0.2121544340895D-02 0.2171274494667D-02 + 0.2222167976934D-02 0.2274251916449D-02 0.2327554071579D-02 0.2382102844807D-02 + 0.2437927297566D-02 0.2495057165412D-02 0.2553522873541D-02 0.2613355552656D-02 + 0.2674587055203D-02 0.2737249971964D-02 0.2801377649040D-02 0.2867004205207D-02 + 0.2934164549674D-02 0.3002894400242D-02 0.3073230301875D-02 0.3145209645687D-02 + 0.3218870688367D-02 0.3294252572036D-02 0.3371395344560D-02 0.3450339980318D-02 + 0.3531128401442D-02 0.3613803499530D-02 0.3698409157865D-02 0.3784990274115D-02 + 0.3873592783561D-02 0.3964263682845D-02 0.4057051054243D-02 0.4152004090502D-02 + 0.4249173120221D-02 0.4348609633811D-02 0.4450366310035D-02 0.4554497043148D-02 + 0.4661056970641D-02 0.4770102501614D-02 0.4881691345780D-02 0.4995882543123D-02 + 0.5112736494216D-02 0.5232314991223D-02 0.5354681249591D-02 0.5479899940453D-02 + 0.5608037223751D-02 0.5739160782101D-02 0.5873339855419D-02 0.6010645276307D-02 + 0.6151149506240D-02 0.6294926672549D-02 0.6442052606234D-02 0.6592604880614D-02 + 0.6746662850838D-02 0.6904307694268D-02 0.7065622451768D-02 0.7230692069897D-02 + 0.7399603444044D-02 0.7572445462515D-02 0.7749309051598D-02 0.7930287221619D-02 + 0.8115475114018D-02 0.8304970049464D-02 0.8498871577032D-02 0.8697281524456D-02 + 0.8900304049495D-02 0.9108045692430D-02 0.9320615429706D-02 0.9538124728756D-02 + 0.9760687604030D-02 0.9988420674246D-02 0.1022144322090D-01 0.1045987724804D-01 + 0.1070384754337D-01 0.1095348174068D-01 0.1120891038362D-01 0.1147026699087D-01 + 0.1173768812274D-01 0.1201131344923D-01 0.1229128581950D-01 0.1257775133295D-01 + 0.1287085941174D-01 0.1317076287496D-01 0.1347761801432D-01 0.1379158467158D-01 + 0.1411282631755D-01 0.1444151013282D-01 0.1477780709030D-01 0.1512189203941D-01 + 0.1547394379218D-01 0.1583414521114D-01 0.1620268329910D-01 0.1657974929087D-01 + 0.1696553874693D-01 0.1736025164907D-01 0.1776409249813D-01 0.1817727041373D-01 + 0.1859999923619D-01 0.1903249763061D-01 0.1947498919308D-01 0.1992770255924D-01 + 0.2039087151505D-01 0.2086473510993D-01 0.2134953777229D-01 0.2184552942747D-01 + 0.2235296561814D-01 0.2287210762728D-01 0.2340322260368D-01 0.2394658369007D-01 + 0.2450247015392D-01 0.2507116752101D-01 0.2565296771170D-01 0.2624816918007D-01 + 0.2685707705593D-01 0.2748000328980D-01 0.2811726680080D-01 0.2876919362766D-01 + 0.2943611708282D-01 0.3011837790964D-01 0.3081632444289D-01 0.3153031277251D-01 + 0.3226070691063D-01 0.3300787896212D-01 0.3377220929851D-01 0.3455408673542D-01 + 0.3535390871366D-01 0.3617208148391D-01 0.3700902029513D-01 0.3786514958681D-01 + 0.3874090318494D-01 0.3963672450206D-01 0.4055306674117D-01 0.4149039310376D-01 + 0.4244917700192D-01 0.4342990227471D-01 0.4443306340872D-01 0.4545916576304D-01 + 0.4650872579860D-01 0.4758227131200D-01 0.4868034167394D-01 0.4980348807226D-01 + 0.5095227375970D-01 0.5212727430642D-01 0.5332907785746D-01 0.5455828539511D-01 + 0.5581551100629D-01 0.5710138215505D-01 0.5841653996030D-01 0.5976163947874D-01 + 0.6113734999319D-01 0.6254435530634D-01 0.6398335403999D-01 0.6545505993995D-01 + 0.6696020218655D-01 0.6849952571098D-01 0.7007379151743D-01 0.7168377701120D-01 + 0.7333027633278D-01 0.7501410069815D-01 0.7673607874510D-01 0.7849705688600D-01 + 0.8029789966680D-01 0.8213949013254D-01 0.8402273019940D-01 0.8594854103333D-01 + 0.8791786343540D-01 0.8993165823397D-01 0.9199090668367D-01 0.9409661087142D-01 + 0.9624979412937D-01 0.9845150145513D-01 0.1007027999391D+00 0.1030047791989D+00 + 0.1053585518218D+00 0.1077652538139D+00 0.1102260450570D+00 0.1127421097734D+00 + 0.1153146569983D+00 0.1179449210595D+00 0.1206341620656D+00 0.1233836664013D+00 + 0.1261947472319D+00 0.1290687450145D+00 0.1320070280181D+00 0.1350109928517D+00 + 0.1380820650005D+00 0.1412216993709D+00 0.1444313808430D+00 0.1477126248321D+00 + 0.1510669778590D+00 0.1544960181276D+00 0.1580013561123D+00 0.1615846351532D+00 + 0.1652475320606D+00 0.1689917577271D+00 0.1728190577499D+00 0.1767312130600D+00 + 0.1807300405618D+00 0.1848173937804D+00 0.1889951635180D+00 0.1932652785189D+00 + 0.1976297061436D+00 0.2020904530510D+00 0.2066495658902D+00 0.2113091320000D+00 + 0.2160712801176D+00 0.2209381810962D+00 0.2259120486306D+00 0.2309951399915D+00 + 0.2361897567686D+00 0.2414982456214D+00 0.2469229990389D+00 0.2524664561077D+00 + 0.2581311032870D+00 0.2639194751932D+00 0.2698341553913D+00 0.2758777771940D+00 + 0.2820530244695D+00 0.2883626324551D+00 0.2948093885796D+00 0.3013961332915D+00 + 0.3081257608951D+00 0.3150012203926D+00 0.3220255163328D+00 0.3292017096659D+00 + 0.3365329186046D+00 0.3440223194900D+00 0.3516731476641D+00 0.3594886983458D+00 + 0.3674723275128D+00 0.3756274527871D+00 0.3839575543251D+00 0.3924661757104D+00 + 0.4011569248503D+00 0.4100334748751D+00 0.4190995650391D+00 0.4283590016238D+00 + 0.4378156588421D+00 0.4474734797432D+00 0.4573364771174D+00 0.4674087344011D+00 + 0.4776944065798D+00 0.4881977210900D+00 0.4989229787185D+00 0.5098745544982D+00 + 0.5210568986003D+00 0.5324745372220D+00 0.5441320734686D+00 0.5560341882286D+00 + 0.5681856410426D+00 0.5805912709635D+00 0.5932559974075D+00 0.6061848209955D+00 + 0.6193828243825D+00 0.6328551730759D+00 0.6466071162395D+00 0.6606439874833D+00 + 0.6749712056379D+00 0.6895942755113D+00 0.7045187886282D+00 0.7197504239485D+00 + 0.7352949485665D+00 0.7511582183855D+00 0.7673461787702D+00 0.7838648651729D+00 + 0.8007204037317D+00 0.8179190118414D+00 0.8354669986931D+00 0.8533707657807D+00 + 0.8716368073748D+00 0.8902717109592D+00 0.9092821576301D+00 0.9286749224550D+00 + 0.9484568747892D+00 0.9686349785485D+00 0.9892162924350D+00 0.1010207970114D+01 + 0.1031617260341D+01 0.1053451507033D+01 0.1075718149284D+01 0.1098424721324D+01 + 0.1121578852417D+01 0.1145188266689D+01 0.1169260782896D+01 0.1193804314122D+01 + 0.1218826867398D+01 0.1244336543253D+01 0.1270341535182D+01 0.1296850129033D+01 + 0.1323870702311D+01 0.1351411723387D+01 0.1379481750625D+01 0.1408089431407D+01 + 0.1437243501060D+01 0.1466952781681D+01 0.1497226180855D+01 0.1528072690268D+01 + 0.1559501384198D+01 0.1591521417893D+01 0.1624142025826D+01 0.1657372519825D+01 + 0.1691222287071D+01 0.1725700787962D+01 0.1760817553840D+01 0.1796582184571D+01 + 0.1833004345980D+01 0.1870093767134D+01 0.1907860237463D+01 0.1946313603731D+01 + 0.1985463766823D+01 0.2025320678379D+01 0.2065894337237D+01 0.2107194785706D+01 + 0.2149232105642D+01 0.2192016414346D+01 0.2235557860254D+01 0.2279866618430D+01 + 0.2324952885854D+01 0.2370826876498D+01 0.2417498816181D+01 0.2464978937205D+01 + 0.2513277472767D+01 0.2562404651129D+01 0.2612370689560D+01 0.2663185788025D+01 + 0.2714860122637D+01 0.2767403838844D+01 0.2820827044362D+01 0.2875139801847D+01 + 0.2930352121292D+01 0.2986473952155D+01 0.3043515175199D+01 0.3101485594064D+01 + 0.3160394926530D+01 0.3220252795505D+01 0.3281068719700D+01 0.3342852104013D+01 + 0.3405612229598D+01 0.3469358243625D+01 0.3534099148732D+01 0.3599843792145D+01 + 0.3666600854486D+01 0.3734378838255D+01 0.3803186055977D+01 0.3873030618024D+01 + 0.3943920420098D+01 0.4015863130380D+01 0.4088866176346D+01 0.4162936731230D+01 + 0.4238081700161D+01 0.4314307705947D+01 0.4391621074527D+01 0.4470027820069D+01 + 0.4549533629736D+01 0.4630143848113D+01 0.4711863461283D+01 0.4794697080578D+01 + 0.4878648925994D+01 0.4963722809267D+01 0.5049922116636D+01 0.5137249791268D+01 + 0.5225708315377D+01 0.5315299692030D+01 0.5406025426645D+01 0.5497886508194D+01 + 0.5590883390119D+01 0.5685015970968D+01 0.5780283574761D+01 0.5876684931099D+01 + 0.5974218155027D+01 0.6072880726661D+01 0.6172669470607D+01 0.6273580535158D+01 + 0.6375609371321D+01 0.6478750711665D+01 0.6582998549021D+01 0.6688346115044D+01 + 0.6794785858674D+01 0.6902309424504D+01 0.7010907631078D+01 0.7120570449161D+01 + 0.7231286979987D+01 0.7343045433523D+01 0.7455833106781D+01 0.7569636362200D+01 + 0.7684440606138D+01 0.7800230267503D+01 0.7916988776564D+01 0.8034698543969D+01 + 0.8153340940023D+01 0.8272896274252D+01 0.8393343775304D+01 0.8514661571228D+01 + 0.8636826670177D+01 0.8759814941579D+01 0.8883601097830D+01 0.9008158676554D+01 + 0.9133460023488D+01 0.9259476276042D+01 0.9386177347589D+01 0.9513531912544D+01 + 0.9641507392293D+01 0.9770069942032D+01 0.9899184438573D+01 0.1002881446919D+02 + 0.1015892232155D+02 0.1028946897485D+02 0.1042041409214D+02 0.1055171601401D+02 + 0.1068333175358D+02 0.1081521699303D+02 0.1094732608155D+02 0.1107961203504D+02 + 0.1121202653730D+02 0.1134451994313D+02 0.1147704128317D+02 0.1160953827069D+02 + 0.1174195731037D+02 0.1187424350912D+02 0.1200634068907D+02 0.1213819140280D+02 + 0.1226973695085D+02 0.1240091740164D+02 0.1253167161388D+02 0.1266193726146D+02 + 0.1279165086105D+02 0.1292074780233D+02 0.1304916238109D+02 0.1317682783507D+02 + 0.1330367638281D+02 0.1342963926552D+02 0.1355464679190D+02 0.1367862838623D+02 + 0.1380151263958D+02 0.1392322736426D+02 0.1404369965168D+02 0.1416285593344D+02 + 0.1428062204598D+02 0.1439692329856D+02 0.1451168454482D+02 0.1462483025783D+02 + 0.1473628460874D+02 0.1484597154897D+02 0.1495381489602D+02 0.1505973842287D+02 + 0.1516366595105D+02 0.1526552144717D+02 0.1536522912325D+02 0.1546271354038D+02 + 0.1555789971612D+02 0.1565071323525D+02 0.1574108036407D+02 0.1582892816796D+02 + 0.1591418463238D+02 0.1599677878699D+02 0.1607664083298D+02 0.1615370227341D+02 + 0.1622789604640D+02 0.1629915666117D+02 0.1636742033673D+02 0.1643262514293D+02 + 0.1649471114400D+02 0.1655362054401D+02 0.1660929783443D+02 0.1666168994330D+02 + 0.1671074638592D+02 0.1675641941678D+02 0.1679866418244D+02 0.1683743887520D+02 + 0.1687270488708D+02 0.1690442696401D+02 0.1693257335981D+02 0.1695711598955D+02 + 0.1697803058217D+02 0.1699529683168D+02 0.1700889854691D+02 0.1701882379909D+02 + 0.1702506506710D+02 0.1702761937980D+02 0.1702648845513D+02 0.1702167883544D+02 + 0.1701320201866D+02 0.1700107458474D+02 0.1698531831701D+02 0.1696596031787D+02 + 0.1694303311832D+02 0.1691657478089D+02 0.1688662899533D+02 0.1685324516669D+02 + 0.1681647849506D+02 0.1677639004673D+02 0.1673304681590D+02 0.1668652177669D+02 + 0.1663689392474D+02 0.1658424830799D+02 0.1652867604598D+02 0.1647027433734D+02 + 0.1640914645475D+02 0.1634540172704D+02 0.1627915550787D+02 0.1621052913049D+02 + 0.1613964984821D+02 0.1606665076007D+02 0.1599167072129D+02 0.1591485423819D+02 + 0.1583635134714D+02 0.1575631747721D+02 0.1567491329620D+02 0.1559230453992D+02 + 0.1550866182419D+02 0.1542416043968D+02 0.1533898012921D+02 0.1525330484749D+02 + 0.1516732250321D+02 0.1508122468346D+02 0.1499520636047D+02 0.1490946558083D+02 + 0.1482420313724D+02 0.1473962222302D+02 0.1465592806965D+02 0.1457332756760D+02 + 0.1449202887084D+02 0.1441224098550D+02 0.1433417334315D+02 0.1425803535923D+02 + 0.1418403597732D+02 0.1411238320000D+02 0.1404328360686D+02 0.1397694186082D+02 + 0.1391356020333D+02 0.1385333793975D+02 0.1379647091570D+02 0.1374315098539D+02 + 0.1369356547412D+02 0.1364789663433D+02 0.1360632109829D+02 0.1356900932792D+02 + 0.1353612506335D+02 0.1350782477177D+02 0.1348425709813D+02 0.1346556231916D+02 + 0.1345187180262D+02 0.1344330747319D+02 0.1343998128703D+02 0.1344199471659D+02 + 0.1344943824759D+02 0.1346239089000D+02 0.1348091970488D+02 0.1350507934900D+02 + 0.1353491163910D+02 0.1357044513773D+02 0.1361169476260D+02 0.1365866142131D+02 + 0.1371133167329D+02 0.1376967742104D+02 0.1383365563218D+02 0.1390320809443D+02 + 0.1397826120509D+02 0.1405872579684D+02 0.1414449700138D+02 0.1423545415271D+02 + 0.1433146073132D+02 0.1443236435097D+02 0.1453799678912D+02 0.1464817406258D+02 + 0.1476269654917D+02 0.1488134915674D+02 0.1500390154012D+02 0.1513010836712D+02 + 0.1525970963388D+02 0.1539243103024D+02 0.1552798435550D+02 0.1566606798456D+02 + 0.1580636738467D+02 0.1594855568243D+02 0.1609229428090D+02 0.1623723352612D+02 + 0.1638301342255D+02 0.1652926439630D+02 0.1667560810533D+02 0.1682165829516D+02 + 0.1696702169871D+02 0.1711129897862D+02 0.1725408571012D+02 0.1739497340253D+02 + 0.1753355055702D+02 0.1766940375816D+02 0.1780211879688D+02 0.1793128182162D+02 + 0.1805648051510D+02 0.1817730529317D+02 0.1829335052263D+02 0.1840421575438D+02 + 0.1850950696829D+02 0.1860883782595D+02 0.1870183092731D+02 0.1878811906717D+02 + 0.1886734648736D+02 0.1893917012012D+02 0.1900326081854D+02 0.1905930456928D+02 + 0.1910700368334D+02 0.1914607796003D+02 0.1917626581959D+02 0.1919732539992D+02 + 0.1920903561254D+02 0.1921119715340D+02 0.1920363346380D+02 0.1918619163678D+02 + 0.1915874326482D+02 0.1912118522412D+02 0.1907344039140D+02 0.1901545828904D+02 + 0.1894721565456D+02 0.1886871693063D+02 0.1877999467201D+02 0.1868110986603D+02 + 0.1857215216342D+02 0.1845324001656D+02 0.1832452072264D+02 0.1818617036923D+02 + 0.1803839368037D+02 0.1788142376145D+02 0.1771552174157D+02 0.1754097631241D+02 + 0.1735810316307D+02 0.1716724431072D+02 0.1696876732726D+02 0.1676306446281D+02 + 0.1655055166703D+02 0.1633166751000D+02 0.1610687200455D+02 0.1587664533276D+02 + 0.1564148647947D+02 0.1540191177642D+02 0.1515845336085D+02 0.1491165755304D+02 + 0.1466208315779D+02 0.1441029969504D+02 0.1415688556557D+02 0.1390242615798D+02 + 0.1364751190365D+02 0.1339273628671D+02 0.1313869381659D+02 0.1288597797078D+02 + 0.1263517911606D+02 0.1238688241664D+02 0.1214166573770D+02 0.1190009755337D+02 + 0.1166273486824D+02 0.1143012116131D+02 0.1120278436204D+02 0.1098123486738D+02 + 0.1076596360934D+02 0.1055744018218D+02 0.1035611103824D+02 0.1016239776140D+02 + 0.9976695426757D+01 0.9799371054791D+01 0.9630762168193D+01 0.9471175458851D+01 + 0.9320885572164D+01 0.9180134015366D+01 0.9049128195975D+01 0.8928040595889D+01 + 0.8817008086055D+01 0.8716131385943D+01 0.8625474671405D+01 0.8545065333743D+01 + 0.8474893892107D+01 0.8414914060556D+01 0.8365042970373D+01 0.8325161547417D+01 + 0.8295115043532D+01 0.8274713720226D+01 0.8263733682072D+01 0.8261917856473D+01 + 0.8268977115699D+01 0.8284591536320D+01 0.8308411790443D+01 0.8340060662421D+01 + 0.8379134684056D+01 0.8425205880594D+01 0.8477823619242D+01 0.8536516551320D+01 + 0.8600794638614D+01 0.8670151254010D+01 0.8744065346036D+01 0.8822003656545D+01 + 0.8903422980466D+01 0.8987772456234D+01 0.9074495875384D+01 0.9163033999606D+01 + 0.9252826873533D+01 0.9343316121564D+01 0.9433947217114D+01 0.9524171712849D+01 + 0.9613449420751D+01 0.9701250531156D+01 0.9787057660335D+01 0.9870367816646D+01 + 0.9950694275862D+01 0.1002756835684D+02 0.1010054108939D+02 0.1016918476702D+02 + 0.1023309437768D+02 0.1029188890698D+02 0.1034521250863D+02 0.1039273553809D+02 + 0.1043415544617D+02 0.1046919753037D+02 0.1049761554226D+02 0.1051919215074D+02 + 0.1053373926129D+02 0.1054109819251D+02 0.1054113971220D+02 0.1053376393567D+02 + 0.1051890009012D+02 0.1049650614953D+02 0.1046656834505D+02 0.1042910055671D+02 + 0.1038414359287D+02 0.1033176436400D+02 0.1027205495831D+02 0.1020513162681D+02 + 0.1013113368577D+02 0.1005022234485D+02 0.9962579469377D+01 0.9868406285310D+01 + 0.9767922035458D+01 0.9661362595664D+01 0.9548979059465D+01 0.9431036299674D+01 + 0.9307811515177D+01 0.9179592770975D+01 0.9046677539281D+01 0.8909371249138D+01 + 0.8767985851711D+01 0.8622838408000D+01 0.8474249705348D+01 0.8322542908661D+01 + 0.8168042251829D+01 0.8011071774365D+01 0.7851954107810D+01 0.7691009315975D+01 + 0.7528553792590D+01 0.7364899219476D+01 0.7200351587865D+01 0.7035210285005D+01 + 0.6869767247760D+01 0.6704306184445D+01 0.6539101865709D+01 0.6374419484870D+01 + 0.6210514087691D+01 0.6047630071250D+01 0.5886000751154D+01 0.5725847996050D+01 + 0.5567381928080D+01 0.5410800687616D+01 0.5256290260390D+01 0.5104024364860D+01 + 0.4954164397495D+01 0.4806859433420D+01 0.4662246279750D+01 0.4520449578777D+01 + 0.4381581958080D+01 0.4245744224515D+01 0.4113025598995D+01 0.3983503988922D+01 + 0.3857246295067D+01 0.3734308749755D+01 0.3614737283146D+01 0.3498567914486D+01 + 0.3385827165216D+01 0.3276532490893D+01 0.3170692728944D+01 0.3068308559367D+01 + 0.2969372975579D+01 0.2873871762726D+01 0.2781783980867D+01 0.2693082450610D+01 + 0.2607734238857D+01 0.2525701142481D+01 0.2446940167925D+01 0.2371404004790D+01 + 0.2299041491714D+01 0.2229798072931D+01 0.2163616244086D+01 0.2100435986031D+01 + 0.2040195185468D+01 0.1982830041479D+01 0.1928275457110D+01 0.1876465415340D+01 + 0.1827333338908D+01 0.1780812433583D+01 0.1736836014647D+01 0.1695337816433D+01 + 0.1656252284921D+01 0.1619514853489D+01 0.1585062202027D+01 0.1552832499731D+01 + 0.1522765631966D+01 0.1494803411685D+01 0.1468889775956D+01 0.1444970968218D+01 + 0.1422995706931D+01 0.1402915341345D+01 0.1384683995123D+01 0.1368258698612D+01 + 0.1353599510520D+01 0.1340669629812D+01 0.1329435498575D+01 0.1319866896622D+01 + 0.1311937028546D+01 0.1305622603887D+01 0.1300903911023D+01 0.1297764885307D+01 + 0.1296193171885D+01 0.1296180183508D+01 0.1297721153538D+01 0.1300815184163D+01 + 0.1305465289703D+01 0.1311678434655D+01 0.1319465565906D+01 0.1328841638284D+01 + 0.1339825632325D+01 0.1352440020066D+01 0.1366814118169D+01 0.1383075557911D+01 + 0.1401251274517D+01 0.1421373963474D+01 0.1443482175527D+01 0.1467620429267D+01 + 0.1493839341415D+01 0.1522195774849D+01 0.1552753004359D+01 + 7 1019 + 1 0 -1 -600.92936 + 2 0 -1 -70.75637 + 2 1 1 -61.64173 + 2 1 -2 -60.36011 + 3 0 -1 -6.90508 + 3 1 1 -4.13505 + 3 1 -2 -3.97253 + 0.2785348039799D-04 0.2850864985091D-04 0.2917922677693D-04 0.2986557338784D-04 + 0.3056806040623D-04 0.3128706726531D-04 0.3202298231346D-04 0.3277620302344D-04 + 0.3354713620669D-04 0.3433619823250D-04 0.3514381525243D-04 0.3597042342988D-04 + 0.3681646917518D-04 0.3768240938605D-04 0.3856871169382D-04 0.3947585471533D-04 + 0.4040432831076D-04 0.4135463384754D-04 0.4232728447044D-04 0.4332280537788D-04 + 0.4434173410491D-04 0.4538462081264D-04 0.4645202858458D-04 0.4754453372980D-04 + 0.4866272609337D-04 0.4980720937385D-04 0.5097860144845D-04 0.5217753470559D-04 + 0.5340465638544D-04 0.5466062892831D-04 0.5594613033122D-04 0.5726185451292D-04 + 0.5860851168728D-04 0.5998682874563D-04 0.6139754964787D-04 0.6284143582287D-04 + 0.6431926657818D-04 0.6583183951932D-04 0.6737997097897D-04 0.6896449645610D-04 + 0.7058627106547D-04 0.7224616999759D-04 0.7394508898947D-04 0.7568394480642D-04 + 0.7746367573504D-04 0.7928524208785D-04 0.8114962671967D-04 0.8305783555606D-04 + 0.8501089813418D-04 0.8700986815631D-04 0.8905582405622D-04 0.9114986957892D-04 + 0.9329313437388D-04 0.9548677460216D-04 0.9773197355772D-04 0.1000299423033D-03 + 0.1023819203211D-03 0.1047891761788D-03 0.1072530082109D-03 0.1097747452164D-03 + 0.1123557471724D-03 0.1149974059643D-03 0.1177011461338D-03 0.1204684256435D-03 + 0.1233007366599D-03 0.1261996063543D-03 0.1291665977232D-03 0.1322033104265D-03 + 0.1353113816468D-03 0.1384924869679D-03 0.1417483412738D-03 0.1450806996689D-03 + 0.1484913584199D-03 0.1519821559194D-03 0.1555549736718D-03 0.1592117373030D-03 + 0.1629544175925D-03 0.1667850315308D-03 0.1707056434008D-03 0.1747183658844D-03 + 0.1788253611949D-03 0.1830288422366D-03 0.1873310737905D-03 0.1917343737279D-03 + 0.1962411142527D-03 0.2008537231720D-03 0.2055746851973D-03 0.2104065432749D-03 + 0.2153518999484D-03 0.2204134187520D-03 0.2255938256369D-03 0.2308959104308D-03 + 0.2363225283316D-03 0.2418766014350D-03 0.2475611202992D-03 0.2533791455447D-03 + 0.2593338094921D-03 0.2654283178377D-03 0.2716659513684D-03 0.2780500677164D-03 + 0.2845841031545D-03 0.2912715744338D-03 0.2981160806633D-03 0.3051213052343D-03 + 0.3122910177887D-03 0.3196290762334D-03 0.3271394288016D-03 0.3348261161622D-03 + 0.3426932735779D-03 0.3507451331137D-03 0.3589860258965D-03 0.3674203844279D-03 + 0.3760527449499D-03 0.3848877498660D-03 0.3939301502186D-03 0.4031848082239D-03 + 0.4126566998654D-03 0.4223509175482D-03 0.4322726728145D-03 0.4424272991222D-03 + 0.4528202546880D-03 0.4634571253967D-03 0.4743436277778D-03 0.4854856120511D-03 + 0.4968890652433D-03 0.5085601143763D-03 0.5205050297303D-03 0.5327302281814D-03 + 0.5452422766177D-03 0.5580478954340D-03 0.5711539621071D-03 0.5845675148553D-03 + 0.5982957563806D-03 0.6123460576999D-03 0.6267259620628D-03 0.6414431889615D-03 + 0.6565056382328D-03 0.6719213942557D-03 0.6876987302450D-03 0.7038461126454D-03 + 0.7203722056267D-03 0.7372858756825D-03 0.7545961963362D-03 0.7723124529547D-03 + 0.7904441476743D-03 0.8090010044395D-03 0.8279929741591D-03 0.8474302399803D-03 + 0.8673232226854D-03 0.8876825862128D-03 0.9085192433053D-03 0.9298443612885D-03 + 0.9516693679833D-03 0.9740059577534D-03 0.9968660976936D-03 0.1020262033960D-02 + 0.1044206298245D-02 0.1068711714404D-02 0.1093791405233D-02 0.1119458799402D-02 + 0.1145727638549D-02 0.1172611984533D-02 0.1200126226866D-02 0.1228285090299D-02 + 0.1257103642593D-02 0.1286597302470D-02 0.1316781847740D-02 0.1347673423616D-02 + 0.1379288551225D-02 0.1411644136313D-02 0.1444757478139D-02 0.1478646278594D-02 + 0.1513328651505D-02 0.1548823132173D-02 0.1585148687119D-02 0.1622324724052D-02 + 0.1660371102071D-02 0.1699308142098D-02 0.1739156637551D-02 0.1779937865258D-02 + 0.1821673596624D-02 0.1864386109050D-02 0.1908098197620D-02 0.1952833187045D-02 + 0.1998614943887D-02 0.2045467889061D-02 0.2093417010621D-02 0.2142487876835D-02 + 0.2192706649566D-02 0.2244100097950D-02 0.2296695612391D-02 0.2350521218871D-02 + 0.2405605593589D-02 0.2461978077930D-02 0.2519668693780D-02 0.2578708159180D-02 + 0.2639127904347D-02 0.2700960088050D-02 0.2764237614363D-02 0.2828994149797D-02 + 0.2895264140816D-02 0.2963082831762D-02 0.3032486283173D-02 0.3103511390526D-02 + 0.3176195903398D-02 0.3250578445064D-02 0.3326698532539D-02 0.3404596597070D-02 + 0.3484314005096D-02 0.3565893079675D-02 0.3649377122404D-02 0.3734810435823D-02 + 0.3822238346332D-02 0.3911707227623D-02 0.4003264524637D-02 0.4096958778068D-02 + 0.4192839649407D-02 0.4290957946558D-02 0.4391365650032D-02 0.4494115939719D-02 + 0.4599263222270D-02 0.4706863159091D-02 0.4816972694967D-02 0.4929650087320D-02 + 0.5044954936134D-02 0.5162948214539D-02 0.5283692300087D-02 0.5407251006722D-02 + 0.5533689617469D-02 0.5663074917849D-02 0.5795475230042D-02 0.5930960447811D-02 + 0.6069602072201D-02 0.6211473248042D-02 0.6356648801255D-02 0.6505205276989D-02 + 0.6657220978610D-02 0.6812776007555D-02 0.6971952304061D-02 0.7134833688812D-02 + 0.7301505905495D-02 0.7472056664307D-02 0.7646575686420D-02 0.7825154749426D-02 + 0.8007887733795D-02 0.8194870670349D-02 0.8386201788783D-02 0.8581981567262D-02 + 0.8782312783101D-02 0.8987300564565D-02 0.9197052443804D-02 0.9411678410950D-02 + 0.9631290969401D-02 0.9856005192321D-02 0.1008593878036D-01 0.1032121212066D-01 + 0.1056194834714D-01 0.1080827340207D-01 0.1106031609904D-01 0.1131820818725D-01 + 0.1158208441725D-01 0.1185208260805D-01 0.1212834371572D-01 0.1241101190349D-01 + 0.1270023461334D-01 0.1299616263918D-01 0.1329895020152D-01 0.1360875502388D-01 + 0.1392573841078D-01 0.1425006532736D-01 0.1458190448082D-01 0.1492142840354D-01 + 0.1526881353800D-01 0.1562424032353D-01 0.1598789328488D-01 0.1635996112275D-01 + 0.1674063680621D-01 0.1713011766706D-01 0.1752860549628D-01 0.1793630664247D-01 + 0.1835343211238D-01 0.1878019767364D-01 0.1921682395954D-01 0.1966353657619D-01 + 0.2012056621177D-01 0.2058814874823D-01 0.2106652537525D-01 0.2155594270663D-01 + 0.2205665289910D-01 0.2256891377368D-01 0.2309298893950D-01 0.2362914792023D-01 + 0.2417766628321D-01 0.2473882577114D-01 0.2531291443667D-01 0.2590022677960D-01 + 0.2650106388708D-01 0.2711573357661D-01 0.2774455054204D-01 0.2838783650253D-01 + 0.2904592035462D-01 0.2971913832738D-01 0.3040783414076D-01 0.3111235916718D-01 + 0.3183307259638D-01 0.3257034160364D-01 0.3332454152147D-01 0.3409605601466D-01 + 0.3488527725896D-01 0.3569260612339D-01 0.3651845235609D-01 0.3736323477404D-01 + 0.3822738145646D-01 0.3911132994221D-01 0.4001552743100D-01 0.4094043098863D-01 + 0.4188650775637D-01 0.4285423516441D-01 0.4384410114952D-01 0.4485660437705D-01 + 0.4589225446724D-01 0.4695157222597D-01 0.4803508987999D-01 0.4914335131680D-01 + 0.5027691232908D-01 0.5143634086397D-01 0.5262221727702D-01 0.5383513459112D-01 + 0.5507569876040D-01 0.5634452893907D-01 0.5764225775551D-01 0.5896953159144D-01 + 0.6032701086645D-01 0.6171537032787D-01 0.6313529934610D-01 0.6458750221537D-01 + 0.6607269846028D-01 0.6759162314785D-01 0.6914502720547D-01 0.7073367774467D-01 + 0.7235835839078D-01 0.7401986961872D-01 0.7571902909479D-01 0.7745667202470D-01 + 0.7923365150794D-01 0.8105083889839D-01 0.8290912417146D-01 0.8480941629777D-01 + 0.8675264362336D-01 0.8873975425672D-01 0.9077171646250D-01 0.9284951906214D-01 + 0.9497417184143D-01 0.9714670596512D-01 0.9936817439861D-01 0.1016396523369D+00 + 0.1039622376406D+00 0.1063370512799D+00 0.1087652377849D+00 0.1112479657046D+00 + 0.1137864280726D+00 0.1163818428813D+00 0.1190354535626D+00 0.1217485294780D+00 + 0.1245223664148D+00 0.1273582870922D+00 0.1302576416734D+00 0.1332218082873D+00 + 0.1362521935575D+00 0.1393502331400D+00 0.1425173922687D+00 0.1457551663094D+00 + 0.1490650813222D+00 0.1524486946321D+00 0.1559075954084D+00 0.1594434052521D+00 + 0.1630577787924D+00 0.1667524042908D+00 0.1705290042550D+00 0.1743893360603D+00 + 0.1783351925803D+00 0.1823684028262D+00 0.1864908325939D+00 0.1907043851210D+00 + 0.1950110017514D+00 0.1994126626092D+00 0.2039113872805D+00 0.2085092355047D+00 + 0.2132083078736D+00 0.2180107465389D+00 0.2229187359293D+00 0.2279345034746D+00 + 0.2330603203389D+00 0.2382985021623D+00 0.2436514098099D+00 0.2491214501298D+00 + 0.2547110767190D+00 0.2604227906963D+00 0.2662591414843D+00 0.2722227275978D+00 + 0.2783161974410D+00 0.2845422501104D+00 0.2909036362063D+00 0.2974031586510D+00 + 0.3040436735129D+00 0.3108280908381D+00 0.3177593754880D+00 0.3248405479832D+00 + 0.3320746853529D+00 0.3394649219899D+00 0.3470144505113D+00 0.3547265226235D+00 + 0.3626044499927D+00 0.3706516051183D+00 0.3788714222121D+00 0.3872673980788D+00 + 0.3958430930017D+00 0.4046021316296D+00 0.4135482038664D+00 0.4226850657628D+00 + 0.4320165404081D+00 0.4415465188242D+00 0.4512789608585D+00 0.4612178960766D+00 + 0.4713674246546D+00 0.4817317182683D+00 0.4923150209819D+00 0.5031216501316D+00 + 0.5141559972066D+00 0.5254225287256D+00 0.5369257871068D+00 0.5486703915328D+00 + 0.5606610388075D+00 0.5729025042060D+00 0.5853996423141D+00 0.5981573878595D+00 + 0.6111807565305D+00 0.6244748457836D+00 0.6380448356375D+00 0.6518959894534D+00 + 0.6660336546986D+00 0.6804632636948D+00 0.6951903343474D+00 0.7102204708555D+00 + 0.7255593644017D+00 0.7412127938194D+00 0.7571866262360D+00 0.7734868176917D+00 + 0.7901194137312D+00 0.8070905499665D+00 0.8244064526103D+00 0.8420734389770D+00 + 0.8600979179504D+00 0.8784863904150D+00 0.8972454496511D+00 0.9163817816891D+00 + 0.9359021656229D+00 0.9558134738795D+00 0.9761226724427D+00 0.9968368210285D+00 + 0.1017963073210D+01 0.1039508676490D+01 0.1061480972318D+01 0.1083887396047D+01 + 0.1106735476836D+01 0.1130032837482D+01 0.1153787194190D+01 0.1178006356277D+01 + 0.1202698225795D+01 0.1227870797093D+01 0.1253532156286D+01 0.1279690480659D+01 + 0.1306354037973D+01 0.1333531185694D+01 0.1361230370125D+01 0.1389460125447D+01 + 0.1418229072662D+01 0.1447545918436D+01 0.1477419453830D+01 0.1507858552937D+01 + 0.1538872171388D+01 0.1570469344759D+01 0.1602659186847D+01 0.1635450887823D+01 + 0.1668853712259D+01 0.1702876997023D+01 0.1737530149033D+01 0.1772822642871D+01 + 0.1808764018254D+01 0.1845363877352D+01 0.1882631881947D+01 0.1920577750443D+01 + 0.1959211254701D+01 0.1998542216711D+01 0.2038580505087D+01 0.2079336031385D+01 + 0.2120818746238D+01 0.2163038635298D+01 0.2206005714988D+01 0.2249730028055D+01 + 0.2294221638918D+01 0.2339490628806D+01 0.2385547090684D+01 0.2432401123957D+01 + 0.2480062828949D+01 0.2528542301159D+01 0.2577849625270D+01 0.2627994868928D+01 + 0.2678988076269D+01 0.2730839261202D+01 0.2783558400427D+01 0.2837155426198D+01 + 0.2891640218824D+01 0.2947022598886D+01 0.3003312319193D+01 0.3060519056444D+01 + 0.3118652402616D+01 0.3177721856052D+01 0.3237736812262D+01 0.3298706554417D+01 + 0.3360640243548D+01 0.3423546908429D+01 0.3487435435157D+01 0.3552314556408D+01 + 0.3618192840379D+01 0.3685078679409D+01 0.3752980278273D+01 0.3821905642142D+01 + 0.3891862564227D+01 0.3962858613070D+01 0.4034901119519D+01 0.4107997163357D+01 + 0.4182153559591D+01 0.4257376844407D+01 0.4333673260788D+01 0.4411048743785D+01 + 0.4489508905456D+01 0.4569059019465D+01 0.4649704005343D+01 0.4731448412420D+01 + 0.4814296403414D+01 0.4898251737705D+01 0.4983317754274D+01 0.5069497354326D+01 + 0.5156792983594D+01 0.5245206614333D+01 0.5334739727019D+01 0.5425393291737D+01 + 0.5517167749297D+01 0.5610062992057D+01 0.5704078344485D+01 0.5799212543462D+01 + 0.5895463718334D+01 0.5992829370731D+01 0.6091306354173D+01 0.6190890853456D+01 + 0.6291578363859D+01 0.6393363670174D+01 0.6496240825583D+01 0.6600203130395D+01 + 0.6705243110671D+01 0.6811352496752D+01 0.6918522201725D+01 0.7026742299830D+01 + 0.7136002004857D+01 0.7246289648544D+01 0.7357592659012D+01 0.7469897539266D+01 + 0.7583189845790D+01 0.7697454167276D+01 0.7812674103512D+01 0.7928832244472D+01 + 0.8045910149650D+01 0.8163888327659D+01 0.8282746216162D+01 0.8402462162153D+01 + 0.8523013402647D+01 0.8644376045826D+01 0.8766525052671D+01 0.8889434219156D+01 + 0.9013076159033D+01 0.9137422287266D+01 0.9262442804180D+01 0.9388106680362D+01 + 0.9514381642386D+01 0.9641234159419D+01 0.9768629430760D+01 0.9896531374387D+01 + 0.1002490261657D+02 0.1015370448260D+02 0.1028289698875D+02 0.1041243883547D+02 + 0.1054228740194D+02 0.1067239874200D+02 0.1080272758161D+02 0.1093322731781D+02 + 0.1106385001935D+02 0.1119454642901D+02 0.1132526596767D+02 0.1145595674027D+02 + 0.1158656554370D+02 0.1171703787669D+02 0.1184731795179D+02 0.1197734870953D+02 + 0.1210707183480D+02 0.1223642777560D+02 0.1236535576413D+02 0.1249379384041D+02 + 0.1262167887843D+02 0.1274894661497D+02 0.1287553168105D+02 0.1300136763624D+02 + 0.1312638700578D+02 0.1325052132060D+02 0.1337370116039D+02 0.1349585619965D+02 + 0.1361691525691D+02 0.1373680634710D+02 0.1385545673713D+02 0.1397279300475D+02 + 0.1408874110083D+02 0.1420322641484D+02 0.1431617384391D+02 0.1442750786520D+02 + 0.1453715261184D+02 0.1464503195231D+02 0.1475106957334D+02 0.1485518906631D+02 + 0.1495731401723D+02 0.1505736810017D+02 0.1515527517423D+02 0.1525095938400D+02 + 0.1534434526342D+02 0.1543535784313D+02 0.1552392276115D+02 0.1560996637684D+02 + 0.1569341588814D+02 0.1577419945199D+02 0.1585224630775D+02 0.1592748690368D+02 + 0.1599985302622D+02 0.1606927793202D+02 0.1613569648255D+02 0.1619904528121D+02 + 0.1625926281269D+02 0.1631628958438D+02 0.1637006826986D+02 0.1642054385387D+02 + 0.1646766377903D+02 0.1651137809360D+02 0.1655163960043D+02 0.1658840400653D+02 + 0.1662163007325D+02 0.1665127976653D+02 0.1667731840709D+02 0.1669971482024D+02 + 0.1671844148480D+02 0.1673347468105D+02 0.1674479463705D+02 0.1675238567325D+02 + 0.1675623634475D+02 0.1675633958099D+02 0.1675269282236D+02 0.1674529815328D+02 + 0.1673416243144D+02 0.1671929741260D+02 0.1670071987060D+02 0.1667845171207D+02 + 0.1665252008529D+02 0.1662295748295D+02 0.1658980183799D+02 0.1655309661229D+02 + 0.1651289087761D+02 0.1646923938826D+02 0.1642220264504D+02 0.1637184694991D+02 + 0.1631824445090D+02 0.1626147317681D+02 0.1620161706111D+02 0.1613876595461D+02 + 0.1607301562647D+02 0.1600446775294D+02 0.1593322989356D+02 0.1585941545417D+02 + 0.1578314363649D+02 0.1570453937377D+02 0.1562373325211D+02 0.1554086141713D+02 + 0.1545606546563D+02 0.1536949232194D+02 0.1528129409862D+02 0.1519162794140D+02 + 0.1510065585794D+02 0.1500854453042D+02 0.1491546511167D+02 0.1482159300489D+02 + 0.1472710762669D+02 0.1463219215373D+02 0.1453703325262D+02 0.1444182079357D+02 + 0.1434674754757D+02 0.1425200886753D+02 0.1415780235347D+02 0.1406432750219D+02 + 0.1397178534157D+02 0.1388037805021D+02 0.1379030856261D+02 0.1370178016055D+02 + 0.1361499605126D+02 0.1353015893305D+02 0.1344747054907D+02 0.1336713123002D+02 + 0.1328933942665D+02 0.1321429123299D+02 0.1314217990124D+02 0.1307319534911D+02 + 0.1300752366174D+02 0.1294534658758D+02 0.1288684103098D+02 0.1283217854213D+02 + 0.1278152480572D+02 0.1273503912963D+02 0.1269287393525D+02 0.1265517425070D+02 + 0.1262207720857D+02 0.1259371154963D+02 0.1257019713418D+02 0.1255164446257D+02 + 0.1253815420652D+02 0.1252981675297D+02 0.1252671176194D+02 0.1252890774035D+02 + 0.1253646163319D+02 0.1254941843391D+02 0.1256781081565D+02 0.1259165878492D+02 + 0.1262096935948D+02 0.1265573627186D+02 0.1269593970031D+02 0.1274154602860D+02 + 0.1279250763612D+02 0.1284876271993D+02 0.1291023514987D+02 0.1297683435832D+02 + 0.1304845526572D+02 0.1312497824294D+02 0.1320626911186D+02 0.1329217918482D+02 + 0.1338254534406D+02 0.1347719016192D+02 0.1357592206229D+02 0.1367853552411D+02 + 0.1378481132722D+02 0.1389451684086D+02 0.1400740635503D+02 0.1412322145474D+02 + 0.1424169143705D+02 0.1436253377061D+02 0.1448545459727D+02 0.1461014927535D+02 + 0.1473630296364D+02 0.1486359124547D+02 0.1499168079165D+02 0.1512023006124D+02 + 0.1524889003871D+02 0.1537730500600D+02 0.1550511334794D+02 0.1563194838901D+02 + 0.1575743925971D+02 0.1588121179028D+02 0.1600288942953D+02 0.1612209418650D+02 + 0.1623844759226D+02 0.1635157167941D+02 0.1646108997624D+02 0.1656662851297D+02 + 0.1666781683678D+02 0.1676428903280D+02 0.1685568474771D+02 0.1694165021276D+02 + 0.1702183926298D+02 0.1709591434898D+02 0.1716354753815D+02 0.1722442150176D+02 + 0.1727823048429D+02 0.1732468125184D+02 0.1736349401585D+02 0.1739440332882D+02 + 0.1741715894860D+02 0.1743152666781D+02 0.1743728910515D+02 0.1743424645524D+02 + 0.1742221719400D+02 0.1740103873629D+02 0.1737056804316D+02 0.1733068217558D+02 + 0.1728127879228D+02 0.1722227658900D+02 0.1715361567688D+02 0.1707525789793D+02 + 0.1698718707542D+02 0.1688940919777D+02 0.1678195253406D+02 0.1666486768020D+02 + 0.1653822753457D+02 0.1640212720234D+02 0.1625668382804D+02 0.1610203635605D+02 + 0.1593834521920D+02 0.1576579195557D+02 0.1558457875437D+02 0.1539492793162D+02 + 0.1519708133698D+02 0.1499129969316D+02 0.1477786186979D+02 0.1455706409384D+02 + 0.1432921909906D+02 0.1409465521715D+02 0.1385371541354D+02 0.1360675627135D+02 + 0.1335414692683D+02 0.1309626796025D+02 0.1283351024628D+02 0.1256627376823D+02 + 0.1229496640060D+02 0.1202000266485D+02 0.1174180246306D+02 0.1146078979490D+02 + 0.1117739146290D+02 0.1089203577144D+02 0.1060515122500D+02 0.1031716523102D+02 + 0.1002850281309D+02 0.9739585339808D+01 0.9450829275067D+01 0.9162644955013D+01 + 0.8875435397193D+01 0.8589595147052D+01 0.8305509166913D+01 0.8023551772294D+01 + 0.7744085620244D+01 0.7467460754102D+01 0.7194013708732D+01 0.6924066680121D+01 + 0.6657926762676D+01 0.6395885257290D+01 0.6138217052838D+01 0.5885180083291D+01 + 0.5637014862214D+01 0.5393944095964D+01 0.5156172376397D+01 0.4923885953440D+01 + 0.4697252587402D+01 0.4476421480403D+01 0.4261523285854D+01 0.4052670194446D+01 + 0.3849956094672D+01 0.3653456805497D+01 0.3463230378383D+01 0.3279317465534D+01 + 0.3101741750858D+01 0.2930510439883D+01 0.2765614804580D+01 0.2607030778803D+01 + 0.2454719599894D+01 0.2308628491820D+01 0.2168691385091D+01 0.2034829668640D+01 + 0.1906952968766D+01 0.1784959950247D+01 0.1668739134727D+01 0.1558169731539D+01 + 0.1453122476193D+01 0.1353460471853D+01 0.1259040029279D+01 0.1169711500850D+01 + 0.1085320104451D+01 0.1005706733253D+01 0.9307087475878D+00 0.8601607453947D+00 + 0.7938953079704D+00 0.7317437180194D+00 0.6735366472990D+00 0.6191048114486D+00 + 0.5682795899002D+00 0.5208936090774D+00 0.4767812874066D+00 0.4357793409794D+00 + 0.3977272490158D+00 0.3624676785880D+00 0.3298468683613D+00 0.2997149714018D+00 + 0.2719263573757D+00 0.2463398747288D+00 0.2228190736820D+00 0.2012323911077D+00 + 0.1814532985587D+00 0.1633604149139D+00 0.1468375852681D+00 0.1317739278401D+00 + 0.1180638507949D+00 0.1056070409740D+00 0.9430842660595D-01 0.8407811612220D-01 + 0.7483131523720D-01 0.6648822446255D-01 0.5897391921868D-01 0.5221821468026D-01 + 0.4615551744933D-01 0.4072466609085D-01 0.3586876249310D-01 0.3153499593029D-01 + 0.2767446160932D-01 0.2424197537852D-01 0.2119588616448D-01 0.1849788758658D-01 + 0.1611283007825D-01 0.1400853472097D-01 0.1215560987394D-01 0.1052727155919D-01 + 0.9099168441213D-02 0.7849212122301D-02 0.6757413360975D-02 0.5805724712213D-02 + 0.4977889984910D-02 0.4259300815297D-02 0.3636860564909D-02 0.3098855668813D-02 + 0.2634834484130D-02 0.2235493620776D-02 0.1892571675614D-02 0.1598750237855D-02 + 0.1347561987417D-02 0.1133305668705D-02 0.9509676897177D-03 0.7961500700565D-03 + 0.6650044409550D-03 0.5541717854288D-03 0.4607275965721D-03 0.3821321264613D-03 + 0.3161853965802D-03 0.2609866426733D-03 0.2148978720202D-03 0.1765112188356D-03 + 0.1446197934254D-03 0.1181917324578D-03 0.9634717085916D-04 0.7833787008417D-04 + 0.6352925250168D-04 0.5138460711824D-04 0.4145124756025D-04 0.3334841894247D-04 + 0.2675676576924D-04 0.2140918818591D-04 0.1708292858676D-04 0.1359274468595D-04 + 0.1078503858436D-04 0.8532824057450D-05 0.6731426203640D-05 0.5294818705431D-05 + 0.4152514256060D-05 0.3246933196226D-05 0.2531184102685D-05 0.1967197996113D-05 + 0.1524165020076D-05 0.1177228922105D-05 0.9064004816964D-06 0.6956562213712D-06 + 0.5321933500632D-06 0.4058159681390D-06 0.3084311550367D-06 0.2336367077944D-06 + 0.1763850440397D-06 0.1327101668872D-06 0.9950664996314D-07 0.7435137432006D-07 + 0.5536026859924D-07 0.4107360008380D-07 0.3036446521025D-07 0.2236605902416D-07 + 0.1641408678133D-07 0.1200133780083D-07 0.8741989878798D-08 0.6343668057516D-08 + 0.4585658331970D-08 0.3301987194148D-08 0.2368332361815D-08 0.1691937750742D-08 + 0.1203874557883D-08 0.8531269029104D-09 0.6020904848644D-09 0.4231609199373D-09 + 0.2961588355584D-09 0.2063947413491D-09 0.1432209469506D-09 0.9895263422926D-10 + 0.6806749180835D-10 0.4661461407108D-10 0.3177989810672D-10 0.2156794533121D-10 + 0.1457029674703D-10 0.9797346965900D-11 0.6557008288435D-11 0.4367535372748D-11 + 0.2895183963007D-11 0.1909847081824D-11 0.1253660240977D-11 0.8188333489718D-12 + 0.5320941587156D-12 0.3440140886834D-12 0.2212441299903D-12 0.1415527620957D-12 + 0.9009275622109D-13 0.5703749771740D-13 0.3591739940478D-13 0.2249568274860D-13 + 0.1401269909872D-13 0.8680702870622D-14 0.5348002788467D-14 + LSMS: xx z= 28. xvalws= 4.71708 + 28. 6.55000 10. 0.6401316680236D+00 + -0.1113096740000D+02 0.8563086195639D+00 1010 +-0.5599696223472D+02-0.5599692579244D+02-0.5599688891298D+02-0.5599685159110D+02 +-0.5599681382149D+02-0.5599677559878D+02-0.5599673691753D+02-0.5599669777225D+02 +-0.5599665815737D+02-0.5599661806724D+02-0.5599657749618D+02-0.5599653643840D+02 +-0.5599649488808D+02-0.5599645283930D+02-0.5599641028607D+02-0.5599636722236D+02 +-0.5599632364203D+02-0.5599627953889D+02-0.5599623490665D+02-0.5599618973899D+02 +-0.5599614402946D+02-0.5599609777158D+02-0.5599605095875D+02-0.5599600358433D+02 +-0.5599595564157D+02-0.5599590712365D+02-0.5599585802368D+02-0.5599580833468D+02 +-0.5599575804956D+02-0.5599570716119D+02-0.5599565566231D+02-0.5599560354562D+02 +-0.5599555080369D+02-0.5599549742903D+02-0.5599544341404D+02-0.5599538875103D+02 +-0.5599533343224D+02-0.5599527744979D+02-0.5599522079573D+02-0.5599516346198D+02 +-0.5599510544041D+02-0.5599504672275D+02-0.5599498730065D+02-0.5599492716567D+02 +-0.5599486630923D+02-0.5599480472270D+02-0.5599474239731D+02-0.5599467932419D+02 +-0.5599461549437D+02-0.5599455089877D+02-0.5599448552820D+02-0.5599441937337D+02 +-0.5599435242486D+02-0.5599428467314D+02-0.5599421610859D+02-0.5599414672144D+02 +-0.5599407650183D+02-0.5599400543977D+02-0.5599393352515D+02-0.5599386074773D+02 +-0.5599378709716D+02-0.5599371256297D+02-0.5599363713455D+02-0.5599356080117D+02 +-0.5599348355197D+02-0.5599340537597D+02-0.5599332626203D+02-0.5599324619890D+02 +-0.5599316517520D+02-0.5599308317940D+02-0.5599300019982D+02-0.5599291622467D+02 +-0.5599283124199D+02-0.5599274523970D+02-0.5599265820556D+02-0.5599257012718D+02 +-0.5599248099203D+02-0.5599239078744D+02-0.5599229950056D+02-0.5599220711841D+02 +-0.5599211362784D+02-0.5599201901554D+02-0.5599192326807D+02-0.5599182637179D+02 +-0.5599172831291D+02-0.5599162907749D+02-0.5599152865140D+02-0.5599142702035D+02 +-0.5599132416987D+02-0.5599122008534D+02-0.5599111475194D+02-0.5599100815468D+02 +-0.5599090027839D+02-0.5599079110773D+02-0.5599068062714D+02-0.5599056882092D+02 +-0.5599045567315D+02-0.5599034116773D+02-0.5599022528836D+02-0.5599010801854D+02 +-0.5598998934160D+02-0.5598986924064D+02-0.5598974769856D+02-0.5598962469807D+02 +-0.5598950022165D+02-0.5598937425161D+02-0.5598924676999D+02-0.5598911775867D+02 +-0.5598898719927D+02-0.5598885507321D+02-0.5598872136169D+02-0.5598858604567D+02 +-0.5598844910589D+02-0.5598831052286D+02-0.5598817027685D+02-0.5598802834790D+02 +-0.5598788471580D+02-0.5598773936010D+02-0.5598759226012D+02-0.5598744339490D+02 +-0.5598729274327D+02-0.5598714028376D+02-0.5598698599468D+02-0.5598682985406D+02 +-0.5598667183967D+02-0.5598651192900D+02-0.5598635009931D+02-0.5598618632753D+02 +-0.5598602059035D+02-0.5598585286418D+02-0.5598568312513D+02-0.5598551134904D+02 +-0.5598533751143D+02-0.5598516158757D+02-0.5598498355239D+02-0.5598480338055D+02 +-0.5598462104638D+02-0.5598443652392D+02-0.5598424978690D+02-0.5598406080871D+02 +-0.5598386956245D+02-0.5598367602087D+02-0.5598348015642D+02-0.5598328194119D+02 +-0.5598308134695D+02-0.5598287834514D+02-0.5598267290684D+02-0.5598246500277D+02 +-0.5598225460334D+02-0.5598204167857D+02-0.5598182619813D+02-0.5598160813131D+02 +-0.5598138744707D+02-0.5598116411395D+02-0.5598093810014D+02-0.5598070937344D+02 +-0.5598047790127D+02-0.5598024365064D+02-0.5598000658819D+02-0.5597976668012D+02 +-0.5597952389226D+02-0.5597927819002D+02-0.5597902953837D+02-0.5597877790190D+02 +-0.5597852324473D+02-0.5597826553059D+02-0.5597800472274D+02-0.5597774078402D+02 +-0.5597747367680D+02-0.5597720336302D+02-0.5597692980416D+02-0.5597665296121D+02 +-0.5597637279473D+02-0.5597608926477D+02-0.5597580233093D+02-0.5597551195229D+02 +-0.5597521808746D+02-0.5597492069456D+02-0.5597461973118D+02-0.5597431515441D+02 +-0.5597400692084D+02-0.5597369498651D+02-0.5597337930694D+02-0.5597305983713D+02 +-0.5597273653153D+02-0.5597240934402D+02-0.5597207822795D+02-0.5597174313610D+02 +-0.5597140402069D+02-0.5597106083334D+02-0.5597071352512D+02-0.5597036204648D+02 +-0.5597000634730D+02-0.5596964637683D+02-0.5596928208373D+02-0.5596891341603D+02 +-0.5596854032113D+02-0.5596816274582D+02-0.5596778063622D+02-0.5596739393782D+02 +-0.5596700259543D+02-0.5596660655323D+02-0.5596620575470D+02-0.5596580014265D+02 +-0.5596538965919D+02-0.5596497424574D+02-0.5596455384302D+02-0.5596412839103D+02 +-0.5596369782904D+02-0.5596326209559D+02-0.5596282112848D+02-0.5596237486478D+02 +-0.5596192324076D+02-0.5596146619196D+02-0.5596100365313D+02-0.5596053555821D+02 +-0.5596006184038D+02-0.5595958243200D+02-0.5595909726460D+02-0.5595860626889D+02 +-0.5595810937477D+02-0.5595760651126D+02-0.5595709760654D+02-0.5595658258792D+02 +-0.5595606138184D+02-0.5595553391383D+02-0.5595500010855D+02-0.5595445988973D+02 +-0.5595391318020D+02-0.5595335990183D+02-0.5595279997556D+02-0.5595223332139D+02 +-0.5595165985834D+02-0.5595107950445D+02-0.5595049217677D+02-0.5594989779136D+02 +-0.5594929626325D+02-0.5594868750646D+02-0.5594807143396D+02-0.5594744795768D+02 +-0.5594681698847D+02-0.5594617843611D+02-0.5594553220930D+02-0.5594487821562D+02 +-0.5594421636155D+02-0.5594354655242D+02-0.5594286869244D+02-0.5594218268464D+02 +-0.5594148843089D+02-0.5594078583187D+02-0.5594007478706D+02-0.5593935519473D+02 +-0.5593862695191D+02-0.5593788995439D+02-0.5593714409670D+02-0.5593638927210D+02 +-0.5593562537255D+02-0.5593485228870D+02-0.5593406990989D+02-0.5593327812411D+02 +-0.5593247681800D+02-0.5593166587683D+02-0.5593084518448D+02-0.5593001462343D+02 +-0.5592917407472D+02-0.5592832341797D+02-0.5592746253133D+02-0.5592659129149D+02 +-0.5592570957363D+02-0.5592481725142D+02-0.5592391419702D+02-0.5592300028101D+02 +-0.5592207537244D+02-0.5592113933875D+02-0.5592019204577D+02-0.5591923335772D+02 +-0.5591826313717D+02-0.5591728124502D+02-0.5591628754050D+02-0.5591528188110D+02 +-0.5591426412263D+02-0.5591323411911D+02-0.5591219172282D+02-0.5591113678423D+02 +-0.5591006915201D+02-0.5590898867299D+02-0.5590789519214D+02-0.5590678855255D+02 +-0.5590566859543D+02-0.5590453516002D+02-0.5590338808365D+02-0.5590222720165D+02 +-0.5590105234738D+02-0.5589986335215D+02-0.5589866004524D+02-0.5589744225384D+02 +-0.5589620980308D+02-0.5589496251593D+02-0.5589370021322D+02-0.5589242271362D+02 +-0.5589112983359D+02-0.5588982138736D+02-0.5588849718690D+02-0.5588715704190D+02 +-0.5588580075975D+02-0.5588442814548D+02-0.5588303900178D+02-0.5588163312891D+02 +-0.5588021032473D+02-0.5587877038463D+02-0.5587731310152D+02-0.5587583826579D+02 +-0.5587434566529D+02-0.5587283508528D+02-0.5587130630841D+02-0.5586975911472D+02 +-0.5586819328153D+02-0.5586660858347D+02-0.5586500479245D+02-0.5586338167758D+02 +-0.5586173900518D+02-0.5586007653871D+02-0.5585839403878D+02-0.5585669126306D+02 +-0.5585496796629D+02-0.5585322390022D+02-0.5585145881358D+02-0.5584967245205D+02 +-0.5584786455821D+02-0.5584603487151D+02-0.5584418312823D+02-0.5584230906144D+02 +-0.5584041240095D+02-0.5583849287331D+02-0.5583655020171D+02-0.5583458410598D+02 +-0.5583259430257D+02-0.5583058050443D+02-0.5582854242106D+02-0.5582647975838D+02 +-0.5582439221876D+02-0.5582227950095D+02-0.5582014130001D+02-0.5581797730729D+02 +-0.5581578721041D+02-0.5581357069315D+02-0.5581132743546D+02-0.5580905711339D+02 +-0.5580675939903D+02-0.5580443396051D+02-0.5580208046188D+02-0.5579969856313D+02 +-0.5579728792008D+02-0.5579484818438D+02-0.5579237900344D+02-0.5578988002036D+02 +-0.5578735087390D+02-0.5578479119842D+02-0.5578220062383D+02-0.5577957877554D+02 +-0.5577692527437D+02-0.5577423973656D+02-0.5577152177365D+02-0.5576877099246D+02 +-0.5576598699501D+02-0.5576316937851D+02-0.5576031773521D+02-0.5575743165245D+02 +-0.5575451071251D+02-0.5575155449261D+02-0.5574856256479D+02-0.5574553449592D+02 +-0.5574246984757D+02-0.5573936817599D+02-0.5573622903202D+02-0.5573305196105D+02 +-0.5572983650292D+02-0.5572658219188D+02-0.5572328855652D+02-0.5571995511969D+02 +-0.5571658139845D+02-0.5571316690396D+02-0.5570971114147D+02-0.5570621361020D+02 +-0.5570267380329D+02-0.5569909120771D+02-0.5569546530421D+02-0.5569179556723D+02 +-0.5568808146482D+02-0.5568432245858D+02-0.5568051800358D+02-0.5567666754825D+02 +-0.5567277053437D+02-0.5566882639691D+02-0.5566483456400D+02-0.5566079445686D+02 +-0.5565670548966D+02-0.5565256706948D+02-0.5564837859624D+02-0.5564413946258D+02 +-0.5563984905378D+02-0.5563550674768D+02-0.5563111191461D+02-0.5562666391727D+02 +-0.5562216211068D+02-0.5561760584202D+02-0.5561299445065D+02-0.5560832726789D+02 +-0.5560360361703D+02-0.5559882281319D+02-0.5559398416321D+02-0.5558908696562D+02 +-0.5558413051046D+02-0.5557911407924D+02-0.5557403694482D+02-0.5556889837133D+02 +-0.5556369761402D+02-0.5555843391924D+02-0.5555310652426D+02-0.5554771465720D+02 +-0.5554225753693D+02-0.5553673437298D+02-0.5553114436539D+02-0.5552548670463D+02 +-0.5551976057150D+02-0.5551396513700D+02-0.5550809956225D+02-0.5550216299834D+02 +-0.5549615458625D+02-0.5549007345675D+02-0.5548391873022D+02-0.5547768951663D+02 +-0.5547138491534D+02-0.5546500401504D+02-0.5545854589362D+02-0.5545200961802D+02 +-0.5544539424416D+02-0.5543869881681D+02-0.5543192236944D+02-0.5542506392412D+02 +-0.5541812249142D+02-0.5541109707023D+02-0.5540398664770D+02-0.5539679019908D+02 +-0.5538950668762D+02-0.5538213506439D+02-0.5537467426823D+02-0.5536712322557D+02 +-0.5535948085032D+02-0.5535174604375D+02-0.5534391769433D+02-0.5533599467765D+02 +-0.5532797585624D+02-0.5531986007948D+02-0.5531164618344D+02-0.5530333299077D+02 +-0.5529491931054D+02-0.5528640393816D+02-0.5527778565516D+02-0.5526906322918D+02 +-0.5526023541369D+02-0.5525130094801D+02-0.5524225855703D+02-0.5523310695118D+02 +-0.5522384482627D+02-0.5521447086332D+02-0.5520498372847D+02-0.5519538207280D+02 +-0.5518566453225D+02-0.5517582972744D+02-0.5516587626356D+02-0.5515580273021D+02 +-0.5514560770132D+02-0.5513528973493D+02-0.5512484737313D+02-0.5511427914192D+02 +-0.5510358355101D+02-0.5509275909378D+02-0.5508180424708D+02-0.5507071747112D+02 +-0.5505949720935D+02-0.5504814188833D+02-0.5503664991756D+02-0.5502501968942D+02 +-0.5501324957897D+02-0.5500133794390D+02-0.5498928312432D+02-0.5497708344272D+02 +-0.5496473720377D+02-0.5495224269427D+02-0.5493959818296D+02-0.5492680192049D+02 +-0.5491385213919D+02-0.5490074705306D+02-0.5488748485759D+02-0.5487406372968D+02 +-0.5486048182753D+02-0.5484673729051D+02-0.5483282823909D+02-0.5481875277470D+02 +-0.5480450897965D+02-0.5479009491705D+02-0.5477550863068D+02-0.5476074814493D+02 +-0.5474581146467D+02-0.5473069657522D+02-0.5471540144223D+02-0.5469992401161D+02 +-0.5468426220943D+02-0.5466841394191D+02-0.5465237709529D+02-0.5463614953579D+02 +-0.5461972910955D+02-0.5460311364257D+02-0.5458630094067D+02-0.5456928878940D+02 +-0.5455207495407D+02-0.5453465717964D+02-0.5451703319072D+02-0.5449920069153D+02 +-0.5448115736590D+02-0.5446290087722D+02-0.5444442886843D+02-0.5442573896205D+02 +-0.5440682876012D+02-0.5438769584425D+02-0.5436833777561D+02-0.5434875209495D+02 +-0.5432893632261D+02-0.5430888795858D+02-0.5428860448249D+02-0.5426808335370D+02 +-0.5424732201130D+02-0.5422631787419D+02-0.5420506834117D+02-0.5418357079095D+02 +-0.5416182258226D+02-0.5413982105395D+02-0.5411756352505D+02-0.5409504729488D+02 +-0.5407226964317D+02-0.5404922783015D+02-0.5402591909670D+02-0.5400234066448D+02 +-0.5397848973603D+02-0.5395436349497D+02-0.5392995910612D+02-0.5390527371568D+02 +-0.5388030445141D+02-0.5385504842279D+02-0.5382950272121D+02-0.5380366442022D+02 +-0.5377753057564D+02-0.5375109822589D+02-0.5372436439211D+02-0.5369732607848D+02 +-0.5366998027241D+02-0.5364232394478D+02-0.5361435405025D+02-0.5358606752751D+02 +-0.5355746129950D+02-0.5352853227379D+02-0.5349927734280D+02-0.5346969338412D+02 +-0.5343977726083D+02-0.5340952582182D+02-0.5337893590209D+02-0.5334800432310D+02 +-0.5331672789310D+02-0.5328510340749D+02-0.5325312764917D+02-0.5322079738887D+02 +-0.5318810938556D+02-0.5315506038680D+02-0.5312164712911D+02-0.5308786633837D+02 +-0.5305371473019D+02-0.5301918901033D+02-0.5298428587506D+02-0.5294900201159D+02 +-0.5291333409845D+02-0.5287727880592D+02-0.5284083279641D+02-0.5280399272489D+02 +-0.5276675523931D+02-0.5272911698097D+02-0.5269107458497D+02-0.5265262468062D+02 +-0.5261376389181D+02-0.5257448883746D+02-0.5253479613189D+02-0.5249468238525D+02 +-0.5245414420391D+02-0.5241317819081D+02-0.5237178094590D+02-0.5232994906648D+02 +-0.5228767914760D+02-0.5224496778239D+02-0.5220181156242D+02-0.5215820707808D+02 +-0.5211415091886D+02-0.5206963967367D+02-0.5202466993120D+02-0.5197923828015D+02 +-0.5193334130954D+02-0.5188697560897D+02-0.5184013776887D+02-0.5179282438067D+02 +-0.5174503203712D+02-0.5169675733235D+02-0.5164799686214D+02-0.5159874722402D+02 +-0.5154900501742D+02-0.5149876684372D+02-0.5144802930640D+02-0.5139678901105D+02 +-0.5134504256542D+02-0.5129278657941D+02-0.5124001766505D+02-0.5118673243645D+02 +-0.5113292750975D+02-0.5107859950299D+02-0.5102374503596D+02-0.5096836073009D+02 +-0.5091244320823D+02-0.5085598909444D+02-0.5079899501375D+02-0.5074145759189D+02 +-0.5068337345498D+02-0.5062473922922D+02-0.5056555154053D+02-0.5050580701416D+02 +-0.5044550227434D+02-0.5038463394377D+02-0.5032319864328D+02-0.5026119299126D+02 +-0.5019861360325D+02-0.5013545709143D+02-0.5007172006407D+02-0.5000739912504D+02 +-0.4994249087326D+02-0.4987699190218D+02-0.4981089879922D+02-0.4974420814526D+02 +-0.4967691651406D+02-0.4960902047178D+02-0.4954051657647D+02-0.4947140137754D+02 +-0.4940167141535D+02-0.4933132322073D+02-0.4926035331460D+02-0.4918875820762D+02 +-0.4911653439986D+02-0.4904367838057D+02-0.4897018662796D+02-0.4889605560912D+02 +-0.4882128177991D+02-0.4874586158508D+02-0.4866979145833D+02-0.4859306782261D+02 +-0.4851568709042D+02-0.4843764566431D+02-0.4835893993747D+02-0.4827956629445D+02 +-0.4819952111207D+02-0.4811880076045D+02-0.4803740160422D+02-0.4795532000391D+02 +-0.4787255231750D+02-0.4778909490222D+02-0.4770494411649D+02-0.4762009632212D+02 +-0.4753454788668D+02-0.4744829518615D+02-0.4736133460774D+02-0.4727366255300D+02 +-0.4718527544117D+02-0.4709616971270D+02-0.4700634183309D+02-0.4691578829697D+02 +-0.4682450563237D+02-0.4673249040525D+02-0.4663973922431D+02-0.4654624874593D+02 +-0.4645201567939D+02-0.4635703679226D+02-0.4626130891597D+02-0.4616482895150D+02 +-0.4606759387530D+02-0.4596960074519D+02-0.4587084670639D+02-0.4577132899763D+02 +-0.4567104495712D+02-0.4556999202861D+02-0.4546816776726D+02-0.4536556984539D+02 +-0.4526219605798D+02-0.4515804432797D+02-0.4505311271112D+02-0.4494739940055D+02 +-0.4484090273073D+02-0.4473362118100D+02-0.4462555337840D+02-0.4451669809982D+02 +-0.4440705427338D+02-0.4429662097898D+02-0.4418539744796D+02-0.4407338306170D+02 +-0.4396057734934D+02-0.4384697998428D+02-0.4373259077969D+02-0.4361740968280D+02 +-0.4350143676811D+02-0.4338467222942D+02-0.4326711637078D+02-0.4314876959628D+02 +-0.4302963239898D+02-0.4290970534872D+02-0.4278898907923D+02-0.4266748427447D+02 +-0.4254519165446D+02-0.4242211196062D+02-0.4229824594098D+02-0.4217359433537D+02 +-0.4204815786074D+02-0.4192193719700D+02-0.4179493297349D+02-0.4166714575631D+02 +-0.4153857603689D+02-0.4140922422178D+02-0.4127909062423D+02-0.4114817545739D+02 +-0.4101647882960D+02-0.4088400074182D+02-0.4075074108732D+02-0.4061669965378D+02 +-0.4048187612789D+02-0.4034627010235D+02-0.4020988108549D+02-0.4007270851328D+02 +-0.3993475176372D+02-0.3979601017351D+02-0.3965648305691D+02-0.3951616972641D+02 +-0.3937506951531D+02-0.3923318180167D+02-0.3909050603366D+02-0.3894704175582D+02 +-0.3880278863608D+02-0.3865774649330D+02-0.3851191532486D+02-0.3836529533426D+02 +-0.3821788695820D+02-0.3806969089315D+02-0.3792070812085D+02-0.3777093993278D+02 +-0.3762038795316D+02-0.3746905416038D+02-0.3731694090664D+02-0.3716405093567D+02 +-0.3701038739821D+02-0.3685595386541D+02-0.3670075433978D+02-0.3654479326368D+02 +-0.3638807552533D+02-0.3623060646226D+02-0.3607239186210D+02-0.3591343796076D+02 +-0.3575375143797D+02-0.3559333941025D+02-0.3543220942120D+02-0.3527036942933D+02 +-0.3510782779329D+02-0.3494459325477D+02-0.3478067491896D+02-0.3461608223282D+02 +-0.3445082496111D+02-0.3428491316044D+02-0.3411835715132D+02-0.3395116748843D+02 +-0.3378335492927D+02-0.3361493040123D+02-0.3344590496733D+02-0.3327628979077D+02 +-0.3310609609847D+02-0.3293533514379D+02-0.3276401816857D+02-0.3259215636477D+02 +-0.3241976083588D+02-0.3224684255835D+02-0.3207341234311D+02-0.3189948079774D+02 +-0.3172505828912D+02-0.3155015490716D+02-0.3137478042968D+02-0.3119894428864D+02 +-0.3102265553826D+02-0.3084592282492D+02-0.3066875435948D+02-0.3049115789199D+02 +-0.3031314068928D+02-0.3013470951560D+02-0.2995587061664D+02-0.2977662970714D+02 +-0.2959699196244D+02-0.2941696201419D+02-0.2923654395050D+02-0.2905574132074D+02 +-0.2887455714526D+02-0.2869299393034D+02-0.2851105368829D+02-0.2832873796329D+02 +-0.2814604786272D+02-0.2796298409437D+02-0.2777954700954D+02-0.2759573665199D+02 +-0.2741155281284D+02-0.2722699509126D+02-0.2704206296094D+02-0.2685675584195D+02 +-0.2667107317787D+02-0.2648501451766D+02-0.2629857960192D+02-0.2611176845276D+02 +-0.2592458146669D+02-0.2573701950955D+02-0.2554908401251D+02-0.2536077706788D+02 +-0.2517210152349D+02-0.2498306107396D+02-0.2479366034734D+02-0.2460390498514D+02 +-0.2441380171380D+02-0.2422335840547D+02-0.2403258412594D+02-0.2384148916732D+02 +-0.2365008506345D+02-0.2345838458563D+02-0.2326640171691D+02-0.2307415160308D+02 +-0.2288165047910D+02-0.2268891557015D+02-0.2249596496711D+02-0.2230281747700D+02 +-0.2210949244978D+02-0.2191600958395D+02-0.2172238871405D+02-0.2152864958458D+02 +-0.2133481161543D+02-0.2114089366494D+02-0.2094691379729D+02-0.2075288906142D+02 +-0.2055883528863D+02-0.2036476691627D+02-0.2017069684387D+02-0.1997663632772D+02 +-0.1978259491844D+02-0.1958858044485D+02-0.1939459904582D+02-0.1920065525004D+02 +-0.1900675210215D+02-0.1881289133185D+02-0.1861907356137D+02-0.1842529854548D+02 +-0.1823156543727D+02-0.1803787307258D+02-0.1784422026552D+02-0.1765060610781D+02 +-0.1745703026491D+02-0.1726349326262D+02-0.1706999675839D+02-0.1687654379275D+02 +-0.1668313901695D+02-0.1648978889391D+02-0.1629650187050D+02-0.1610328852001D+02 +-0.1591016165443D+02-0.1571713640663D+02-0.1552423028343D+02-0.1533146319057D+02 +-0.1513885743128D+02-0.1494643768008D+02-0.1475423093391D+02-0.1456226644259D+02 +-0.1437057562058D+02-0.1417919194227D+02-0.1398815082285D+02-0.1379748948648D+02 +-0.1360724682404D+02-0.1341746324187D+02-0.1322818050340D+02-0.1303944156522D+02 +-0.1285129040899D+02-0.1266377187058D+02-0.1247693146781D+02-0.1229081522770D+02 +-0.1210546951464D+02-0.1192094086015D+02-0.1173727579538D+02-0.1155452068701D+02 +-0.1137272157743D+02-0.1119192402976D+02-0.1101217297855D+02-0.1083351258641D+02 +-0.1065598610742D+02-0.1047963575747D+02-0.1030450259220D+02-0.1013062639265D+02 +-0.9958045559027D+01-0.9786797012947D+01-0.9616916108108D+01-0.9448436549776D+01 +-0.9281390323095D+01-0.9115807630320D+01-0.8951716837006D+01-0.8789144427146D+01 +-0.8628114967225D+01-0.8468651079086D+01-0.8310773421529D+01-0.8154500680455D+01 +-0.7999849567409D+01-0.7846834826286D+01-0.7695469247979D+01-0.7545763692692D+01 +-0.7397727119626D+01-0.7251366623738D+01-0.7106687479220D+01-0.6963693189354D+01 +-0.6822385542373D+01-0.6682764672930D+01-0.6544829128782D+01-0.6408575942279D+01 +-0.6274000706223D+01-0.6141097653681D+01-0.6009859741302D+01-0.5880278735698D+01 +-0.5752345302452D+01-0.5626049097293D+01-0.5501378858997D+01-0.5378322503566D+01 +-0.5256867219233D+01-0.5136999561867D+01-0.5018705550316D+01-0.4901970761285D+01 +-0.4786780423295D+01-0.4673119509331D+01-0.4560972827751D+01-0.4450325111061D+01 +-0.4341161102183D+01-0.4233465637811D+01-0.4127223728523D+01-0.4022420635285D+01 +-0.3919041942014D+01-0.3817073623910D+01-0.3716502111247D+01-0.3617314348377D+01 +-0.3519497847701D+01-0.3423040738415D+01-0.3327931809855D+01-0.3234160549325D+01 +-0.3141717174321D+01-0.3050592659127D+01-0.2960778755807D+01-0.2872268009686D+01 +-0.2785053769470D+01-0.2699130192236D+01-0.2614492243592D+01-0.2531135693396D+01 +-0.2449057107481D+01-0.2368253835949D+01-0.2288723998647D+01-0.2210466468527D+01 +-0.2133480853666D+01-0.2057767478780D+01-0.1983327367117D+01-0.1910162223654D+01 +-0.1838274420553D+01-0.1767666985813D+01-0.1698343596074D+01-0.1630308574461D+01 +-0.1563566894331D+01-0.1498124189676D+01-0.1433986772874D+01-0.1371161660353D+01 +-0.1309656606594D+01-0.1249480146804D+01-0.1190641648396D+01-0.1133151371320D+01 +-0.1077020537114D+01-0.1022261406430D+01-0.9688873646495D+00-0.9169130151369D+00 +-0.8663542795315D+00-0.8172285044658D+00-0.7695545740174D+00-0.7233530271894D+00 +-0.6786461797052D+00-0.6354582494212D+00-0.5938154846919D+00-0.5537462950694D+00 +-0.5152813837800D+00-0.4784538814878D+00-0.4432994809303D+00-0.4098565720878D+00 +-0.3781663776222D+00-0.3482730883967D+00-0.3202239989520D+00-0.2940696428732D+00 +-0.2698639280459D+00-0.2476640495013D+00 + 0.0000000000000D+00 + 1019 0.4717083696126D+01 + 0.2822905220422D-04 0.2889304065820D-04 0.2957264396362D-04 0.3026822920821D-04 + 0.3098017210502D-04 0.3170885719496D-04 0.3245467805402D-04 0.3321803750543D-04 + 0.3399934783670D-04 0.3479903102187D-04 0.3561751894883D-04 0.3645525365210D-04 + 0.3731268755102D-04 0.3819028369345D-04 0.3908851600531D-04 0.4000786954587D-04 + 0.4094884076908D-04 0.4191193779102D-04 0.4289768066355D-04 0.4390660165448D-04 + 0.4493924553425D-04 0.4599616986931D-04 0.4707794532239D-04 0.4818515595985D-04 + 0.4931839956615D-04 0.5047828796579D-04 0.5166544735265D-04 0.5288051862722D-04 + 0.5412415774157D-04 0.5539703605252D-04 0.5669984068299D-04 0.5803327489189D-04 + 0.5939805845262D-04 0.6079492804046D-04 0.6222463762903D-04 0.6368795889602D-04 + 0.6518568163844D-04 0.6671861419757D-04 0.6828758389387D-04 0.6989343747210D-04 + 0.7153704155679D-04 0.7321928311845D-04 0.7494106995063D-04 0.7670333115821D-04 + 0.7850701765704D-04 0.8035310268533D-04 0.8224258232698D-04 0.8417647604719D-04 + 0.8615582724055D-04 0.8818170379200D-04 0.9025519865087D-04 0.9237743041838D-04 + 0.9454954394889D-04 0.9677271096518D-04 0.9904813068811D-04 0.1013770304811D-03 + 0.1037606665095D-03 0.1062003244157D-03 0.1086973200094D-03 0.1112529999750D-03 + 0.1138687425945D-03 0.1165459584879D-03 0.1192860913707D-03 0.1220906188294D-03 + 0.1249610531146D-03 0.1278989419531D-03 0.1309058693786D-03 0.1339834565822D-03 + 0.1371333627824D-03 0.1403572861159D-03 0.1436569645484D-03 0.1470341768075D-03 + 0.1504907433372D-03 0.1540285272741D-03 0.1576494354471D-03 0.1613554194002D-03 + 0.1651484764392D-03 0.1690306507024D-03 0.1730040342571D-03 0.1770707682211D-03 + 0.1812330439104D-03 0.1854931040141D-03 0.1898532437962D-03 0.1943158123256D-03 + 0.1988832137349D-03 0.2035579085088D-03 0.2083424148017D-03 0.2132393097870D-03 + 0.2182512310372D-03 0.2233808779365D-03 0.2286310131262D-03 0.2340044639837D-03 + 0.2395041241363D-03 0.2451329550099D-03 0.2508939874141D-03 0.2567903231636D-03 + 0.2628251367386D-03 0.2690016769822D-03 0.2753232688391D-03 0.2817933151331D-03 + 0.2884152983876D-03 0.2951927826869D-03 0.3021294155822D-03 0.3092289300408D-03 + 0.3164951464419D-03 0.3239319746173D-03 0.3315434159412D-03 0.3393335654671D-03 + 0.3473066141158D-03 0.3554668509131D-03 0.3638186652800D-03 0.3723665493767D-03 + 0.3811151004996D-03 0.3900690235359D-03 0.3992331334737D-03 0.4086123579709D-03 + 0.4182117399844D-03 0.4280364404591D-03 0.4380917410806D-03 0.4483830470911D-03 + 0.4589158901706D-03 0.4696959313855D-03 0.4807289642050D-03 0.4920209175883D-03 + 0.5035778591424D-03 0.5154059983538D-03 0.5275116898952D-03 0.5399014370082D-03 + 0.5525818949656D-03 0.5655598746124D-03 0.5788423459903D-03 0.5924364420451D-03 + 0.6063494624208D-03 0.6205888773407D-03 0.6351623315796D-03 0.6500776485262D-03 + 0.6653428343414D-03 0.6809660822115D-03 0.6969557767005D-03 0.7133204982024D-03 + 0.7300690274976D-03 0.7472103504132D-03 0.7647536625921D-03 0.7827083743722D-03 + 0.8010841157777D-03 0.8198907416263D-03 0.8391383367545D-03 0.8588372213627D-03 + 0.8789979564844D-03 0.8996313495817D-03 0.9207484602695D-03 0.9423606061718D-03 + 0.9644793689133D-03 0.9871166002490D-03 0.1010284428335D-02 0.1033995264145D-02 + 0.1058261808030D-02 0.1083097056439D-02 0.1108514308781D-02 0.1134527174457D-02 + 0.1161149580048D-02 0.1188395776668D-02 0.1216280347488D-02 0.1244818215432D-02 + 0.1274024651053D-02 0.1303915280584D-02 0.1334506094178D-02 0.1365813454341D-02 + 0.1397854104547D-02 0.1430645178063D-02 0.1464204206972D-02 0.1498549131400D-02 + 0.1533698308957D-02 0.1569670524398D-02 0.1606484999500D-02 0.1644161403165D-02 + 0.1682719861761D-02 0.1722180969693D-02 0.1762565800220D-02 0.1803895916517D-02 + 0.1846193382990D-02 0.1889480776854D-02 0.1933781199968D-02 0.1979118290949D-02 + 0.2025516237555D-02 0.2072999789359D-02 0.2121594270701D-02 0.2171325593946D-02 + 0.2222220273040D-02 0.2274305437376D-02 0.2327608845973D-02 0.2382158901981D-02 + 0.2437984667516D-02 0.2495115878834D-02 0.2553582961846D-02 0.2613417047988D-02 + 0.2674649990452D-02 0.2737314380790D-02 0.2801443565884D-02 0.2867071665313D-02 + 0.2934233589108D-02 0.3002965055909D-02 0.3073302611539D-02 0.3145283647991D-02 + 0.3218946422853D-02 0.3294330079167D-02 0.3371474665742D-02 0.3450421157918D-02 + 0.3531211478812D-02 0.3613888521034D-02 0.3698496168895D-02 0.3785079321121D-02 + 0.3873683914072D-02 0.3964356945494D-02 0.4057146498796D-02 0.4152101767879D-02 + 0.4249273082526D-02 0.4348711934358D-02 0.4450471003378D-02 0.4554604185107D-02 + 0.4661166618332D-02 0.4770214713480D-02 0.4881806181620D-02 0.4996000064124D-02 + 0.5112856762985D-02 0.5232438071820D-02 0.5354807207563D-02 0.5480028842865D-02 + 0.5608169139224D-02 0.5739295780850D-02 0.5873478009283D-02 0.6010786658792D-02 + 0.6151294192554D-02 0.6295074739644D-02 0.6442204132845D-02 0.6592759947299D-02 + 0.6746821540020D-02 0.6904470090278D-02 0.7065788640890D-02 0.7230862140411D-02 + 0.7399777486274D-02 0.7572623568873D-02 0.7749491316634D-02 0.7930473742069D-02 + 0.8115665988856D-02 0.8305165379950D-02 0.8499071466766D-02 0.8697486079432D-02 + 0.8900513378157D-02 0.9108259905724D-02 0.9320834641139D-02 0.9538349054458D-02 + 0.9760917162809D-02 0.9988655587651D-02 0.1022168361328D-01 0.1046012324662D-01 + 0.1070409927831D-01 0.1095373934513D-01 0.1120917399380D-01 0.1147053674614D-01 + 0.1173796416567D-01 0.1201159592567D-01 0.1229157487867D-01 0.1257804712749D-01 + 0.1287116209781D-01 0.1317107261230D-01 0.1347793496636D-01 0.1379190900549D-01 + 0.1411315820435D-01 0.1444184974747D-01 0.1477815461176D-01 0.1512224765076D-01 + 0.1547430768070D-01 0.1583451756840D-01 0.1620306432107D-01 0.1658013917802D-01 + 0.1696593770432D-01 0.1736065988647D-01 0.1776451023010D-01 0.1817769785976D-01 + 0.1860043662078D-01 0.1903294518340D-01 0.1947544714898D-01 0.1992817115851D-01 + 0.2039135100347D-01 0.2086522573888D-01 0.2135003979890D-01 0.2184604311473D-01 + 0.2235349123506D-01 0.2287264544901D-01 0.2340377291164D-01 0.2394714677210D-01 + 0.2450304630442D-01 0.2507175704110D-01 0.2565357090933D-01 0.2624878637023D-01 + 0.2685770856079D-01 0.2748064943882D-01 0.2811792793097D-01 0.2876987008361D-01 + 0.2943680921701D-01 0.3011908608255D-01 0.3081704902317D-01 0.3153105413717D-01 + 0.3226146544526D-01 0.3300865506103D-01 0.3377300336495D-01 0.3455489918178D-01 + 0.3535473996166D-01 0.3617293196481D-01 0.3700989044996D-01 0.3786603986655D-01 + 0.3874181405077D-01 0.3963765642559D-01 0.4055402020463D-01 0.4149136860028D-01 + 0.4245017503575D-01 0.4343092336145D-01 0.4443410807560D-01 0.4546023454915D-01 + 0.4650981925515D-01 0.4758339000262D-01 0.4868148617492D-01 0.4980465897284D-01 + 0.5095347166233D-01 0.5212849982707D-01 0.5333033162594D-01 0.5455956805532D-01 + 0.5581682321655D-01 0.5710272458843D-01 0.5841791330491D-01 0.5976304443808D-01 + 0.6113878728647D-01 0.6254582566883D-01 0.6398485822337D-01 0.6545659871266D-01 + 0.6696177633414D-01 0.6850113603651D-01 0.7007543884180D-01 0.7168546217357D-01 + 0.7333200019098D-01 0.7501586412902D-01 0.7673788264495D-01 0.7849890217102D-01 + 0.8029978727345D-01 0.8214142101804D-01 0.8402470534211D-01 0.8595056143326D-01 + 0.8791993011463D-01 0.8993377223713D-01 0.9199306907843D-01 0.9409882274896D-01 + 0.9625205660489D-01 0.9845381566837D-01 0.1007051670548D+00 0.1030072004074D+00 + 0.1053610283397D+00 0.1077677868841D+00 0.1102286359499D+00 0.1127447597872D+00 + 0.1153173674594D+00 0.1179476933234D+00 0.1206369975171D+00 0.1233865664558D+00 + 0.1261977133354D+00 0.1290717786444D+00 0.1320101306839D+00 0.1350141660957D+00 + 0.1380853103985D+00 0.1412250185328D+00 0.1444347754134D+00 0.1477160964914D+00 + 0.1510705283235D+00 0.1544996491509D+00 0.1580050694857D+00 0.1615884327066D+00 + 0.1652514156630D+00 0.1689957292880D+00 0.1728231192192D+00 0.1767353664298D+00 + 0.1807342878667D+00 0.1848217370983D+00 0.1889996049712D+00 0.1932698202750D+00 + 0.1976343504163D+00 0.2020952021009D+00 0.2066544220260D+00 0.2113140975792D+00 + 0.2160763575477D+00 0.2209433728356D+00 0.2259173571894D+00 0.2310005679329D+00 + 0.2361953067095D+00 0.2415039202338D+00 0.2469288010509D+00 0.2524723883044D+00 + 0.2581371685119D+00 0.2639256763491D+00 0.2698404954414D+00 0.2758842591634D+00 + 0.2820596514458D+00 0.2883694075903D+00 0.2948163150908D+00 0.3014032144623D+00 + 0.3081330000770D+00 0.3150086210059D+00 0.3220330818682D+00 0.3292094436858D+00 + 0.3365408247443D+00 0.3440304014594D+00 0.3516814092484D+00 0.3594971434075D+00 + 0.3674809599929D+00 0.3756362767066D+00 0.3839665737864D+00 0.3924753948986D+00 + 0.4011663480350D+00 0.4100431064119D+00 0.4191094093709D+00 0.4283690632825D+00 + 0.4378259424502D+00 0.4474839900153D+00 0.4573472188619D+00 0.4674197125219D+00 + 0.4777056260780D+00 0.4882091870652D+00 0.4989346963709D+00 0.5098865291302D+00 + 0.5210691356182D+00 0.5324870421380D+00 0.5441448519020D+00 0.5560472459083D+00 + 0.5681989838085D+00 0.5806049047685D+00 0.5932699283193D+00 0.6061990551983D+00 + 0.6193973681794D+00 0.6328700328903D+00 0.6466222986172D+00 0.6606594990947D+00 + 0.6749870532795D+00 0.6896104661081D+00 0.7045353292353D+00 0.7197673217538D+00 + 0.7353122108919D+00 0.7511758526895D+00 0.7673641926498D+00 0.7838832663655D+00 + 0.8007392001176D+00 0.8179382114455D+00 0.8354866096871D+00 0.8533907964854D+00 + 0.8716572662621D+00 0.8902926066542D+00 0.9093034989133D+00 0.9286967182645D+00 + 0.9484791342227D+00 0.9686577108655D+00 0.9892395070593D+00 0.1010231676636D+01 + 0.1031641468518D+01 0.1053476226794D+01 0.1075743390730D+01 0.1098450494732D+01 + 0.1121605168240D+01 0.1145215135559D+01 0.1169288215628D+01 0.1193832321713D+01 + 0.1218855461030D+01 0.1244365734298D+01 0.1270371335200D+01 0.1296880549776D+01 + 0.1323901755725D+01 0.1351443421614D+01 0.1379514106006D+01 0.1408122456482D+01 + 0.1437277208571D+01 0.1466987184574D+01 0.1497261292282D+01 0.1528108523589D+01 + 0.1559537952982D+01 0.1591558735919D+01 0.1624180107089D+01 0.1657411378532D+01 + 0.1691261937647D+01 0.1725741245050D+01 0.1760858832301D+01 0.1796624299488D+01 + 0.1833047312659D+01 0.1870137601103D+01 0.1907904954477D+01 0.1946359219770D+01 + 0.1985510298095D+01 0.2025368141320D+01 0.2065942748513D+01 0.2107244162211D+01 + 0.2149282464505D+01 0.2192067772925D+01 0.2235610236140D+01 0.2279920029446D+01 + 0.2325007350058D+01 0.2370882412179D+01 0.2417555441862D+01 0.2465036671645D+01 + 0.2513336334955D+01 0.2562464660289D+01 0.2612431865148D+01 0.2663248149729D+01 + 0.2714923690377D+01 0.2767468632769D+01 0.2820893084852D+01 0.2875207109509D+01 + 0.2930420716961D+01 0.2986543856890D+01 0.3043586410284D+01 0.3101558181002D+01 + 0.3160468887046D+01 0.3220328151540D+01 0.3281145493409D+01 0.3342930317763D+01 + 0.3405691905963D+01 0.3469439405388D+01 0.3534181818874D+01 0.3599927993847D+01 + 0.3666686611124D+01 0.3734466173392D+01 0.3803274993364D+01 0.3873121181591D+01 + 0.3944012633951D+01 0.4015957018796D+01 0.4088961763764D+01 0.4163034042250D+01 + 0.4238180759535D+01 0.4314408538572D+01 0.4391723705438D+01 0.4470132274434D+01 + 0.4549639932848D+01 0.4630252025379D+01 0.4711973538219D+01 0.4794809082801D+01 + 0.4878762879210D+01 0.4963838739264D+01 0.5050040049274D+01 0.5137369752468D+01 + 0.5225830331113D+01 0.5315423788316D+01 0.5406151629524D+01 0.5498014843729D+01 + 0.5591013884378D+01 0.5685148650014D+01 0.5780418464637D+01 0.5876822057818D+01 + 0.5974357544556D+01 0.6073022404910D+01 0.6172813463411D+01 0.6273726868265D+01 + 0.6375758070378D+01 0.6478901802200D+01 0.6583152056427D+01 0.6688502064566D+01 + 0.6794944275391D+01 0.6902470333310D+01 0.7011071056667D+01 0.7120736416010D+01 + 0.7231455512336D+01 0.7343216555357D+01 0.7456006841813D+01 0.7569812733849D+01 + 0.7684619637512D+01 0.7800411981379D+01 0.7917173195367D+01 0.8034885689753D+01 + 0.8153530834449D+01 0.8273088938569D+01 0.8393539230326D+01 0.8514859837314D+01 + 0.8637027767209D+01 0.8760018888941D+01 0.8883807914385D+01 0.9008368380622D+01 + 0.9133672632827D+01 0.9259691807821D+01 0.9386395818367D+01 0.9513753338252D+01 + 0.9641731788206D+01 0.9770297322751D+01 0.9899414817999D+01 0.1002904786050D+02 + 0.1015915873719D+02 0.1028970842649D+02 0.1042065659068D+02 0.1055196156952D+02 + 0.1068358037532D+02 0.1081546868938D+02 0.1094758086007D+02 0.1107986990236D+02 + 0.1121228749915D+02 0.1134478400430D+02 0.1147730844752D+02 0.1160980854110D+02 + 0.1174223068874D+02 0.1187451999634D+02 0.1200662028502D+02 0.1213847410631D+02 + 0.1227002275972D+02 0.1240120631259D+02 0.1253196362255D+02 0.1266223236240D+02 + 0.1279194904771D+02 0.1292104906705D+02 0.1304946671507D+02 0.1317713522837D+02 + 0.1330398682438D+02 0.1342995274312D+02 0.1355496329215D+02 0.1367894789459D+02 + 0.1380183514033D+02 0.1392355284052D+02 0.1404402808537D+02 0.1416318730533D+02 + 0.1428095633565D+02 0.1439726048440D+02 0.1451202460404D+02 0.1462517316648D+02 + 0.1473663034167D+02 0.1484632007986D+02 0.1495416619737D+02 0.1506009246602D+02 + 0.1516402270613D+02 0.1526588088319D+02 0.1536559120801D+02 0.1546307824053D+02 + 0.1555826699713D+02 0.1565108306143D+02 0.1574145269854D+02 0.1582930297267D+02 + 0.1591456186808D+02 0.1599715841326D+02 0.1607702280817D+02 0.1615408655464D+02 + 0.1622828258955D+02 0.1629954542085D+02 0.1636781126625D+02 0.1643301819427D+02 + 0.1649510626773D+02 0.1655401768930D+02 0.1660969694894D+02 0.1666209097315D+02 + 0.1671114927559D+02 0.1675682410902D+02 0.1679907061818D+02 0.1683784699343D+02 + 0.1687311462472D+02 0.1690483825579D+02 0.1693298613804D+02 0.1695753018403D+02 + 0.1697844611990D+02 0.1699571363671D+02 0.1700931654003D+02 0.1701924289759D+02 + 0.1702548518446D+02 0.1702804042535D+02 0.1702691033371D+02 0.1702210144695D+02 + 0.1701362525766D+02 0.1700149833994D+02 0.1698574247078D+02 0.1696638474565D+02 + 0.1694345768800D+02 0.1691699935213D+02 0.1688705341886D+02 0.1685366928347D+02 + 0.1681690213549D+02 0.1677681302967D+02 0.1673346894770D+02 0.1668694285012D+02 + 0.1663731371782D+02 0.1658466658277D+02 0.1652909254718D+02 0.1647068879094D+02 + 0.1640955856644D+02 0.1634581118059D+02 0.1627956196336D+02 0.1621093222244D+02 + 0.1614004918357D+02 0.1606704591605D+02 0.1599206124311D+02 0.1591523963664D+02 + 0.1583673109597D+02 0.1575669101036D+02 0.1567528000492D+02 0.1559266376960D+02 + 0.1550901287107D+02 0.1542450254735D+02 0.1533931248491D+02 0.1525362657814D+02 + 0.1516763267127D+02 0.1508152228251D+02 0.1499549031056D+02 0.1490973472356D+02 + 0.1482445623058D+02 0.1473985793583D+02 0.1465614497589D+02 0.1457352414028D+02 + 0.1449220347561D+02 0.1441239187393D+02 0.1433429864561D+02 0.1425813307751D+02 + 0.1418410397681D+02 0.1411241920144D+02 0.1404328517784D+02 0.1397690640670D+02 + 0.1391348495785D+02 0.1385321995514D+02 0.1379630705236D+02 0.1374293790112D+02 + 0.1369329961279D+02 0.1364757421415D+02 0.1360593809949D+02 0.1356856147997D+02 + 0.1353560783157D+02 0.1350723334347D+02 0.1348358636810D+02 0.1346480687464D+02 + 0.1345102590764D+02 0.1344236505232D+02 0.1343893590851D+02 0.1344083957484D+02 + 0.1344816614503D+02 0.1346099421828D+02 0.1347939042540D+02 0.1350340897278D+02 + 0.1353309120597D+02 0.1356846519480D+02 0.1360954534209D+02 0.1365633201758D+02 + 0.1370881121930D+02 0.1376695426396D+02 0.1383071750836D+02 0.1390004210367D+02 + 0.1397485378414D+02 0.1405506269220D+02 0.1414056324144D+02 0.1423123401912D+02 + 0.1432693772972D+02 0.1442752118094D+02 0.1453281531358D+02 0.1464263527642D+02 + 0.1475678054730D+02 0.1487503510142D+02 0.1499716762781D+02 0.1512293179461D+02 + 0.1525206656392D+02 0.1538429655666D+02 0.1551933246776D+02 0.1565687153187D+02 + 0.1579659803967D+02 0.1593818390447D+02 0.1608128927900D+02 0.1622556322157D+02 + 0.1637064441131D+02 0.1651616191120D+02 0.1666173597809D+02 0.1680697891835D+02 + 0.1695149598774D+02 0.1709488633371D+02 0.1723674397850D+02 0.1737665884075D+02 + 0.1751421779358D+02 0.1764900575657D+02 0.1778060681912D+02 0.1790860539220D+02 + 0.1803258738575D+02 0.1815214140835D+02 0.1826685998585D+02 0.1837634079554D+02 + 0.1848018791211D+02 0.1857801306162D+02 0.1866943687952D+02 0.1875409016857D+02 + 0.1883161515267D+02 0.1890166672198D+02 0.1896391366520D+02 0.1901803988445D+02 + 0.1906374558812D+02 0.1910074845718D+02 0.1912878478041D+02 0.1914761055363D+02 + 0.1915700253863D+02 0.1915675927687D+02 0.1914670205356D+02 0.1912667580745D+02 + 0.1909654998194D+02 0.1905621931305D+02 0.1900560455010D+02 0.1894465310484D+02 + 0.1887333962512D+02 0.1879166648926D+02 0.1869966421757D+02 0.1859739179747D+02 + 0.1848493691927D+02 0.1836241611944D+02 0.1822997482895D+02 0.1808778732426D+02 + 0.1793605657890D+02 0.1777501401406D+02 0.1760491914670D+02 0.1742605913446D+02 + 0.1723874821651D+02 0.1704332705040D+02 0.1684016194511D+02 0.1662964399086D+02 + 0.1641218808699D+02 0.1618823186940D+02 0.1595823453954D+02 0.1572267559759D+02 + 0.1548205348276D+02 0.1523688412417D+02 0.1498769940622D+02 0.1473504555295D+02 + 0.1447948143629D+02 0.1422157681337D+02 0.1396191049895D+02 0.1370106847899D+02 + 0.1343964197217D+02 0.1317822544633D+02 0.1291741459732D+02 0.1265780429795D+02 + 0.1239998652538D+02 0.1214454827506D+02 0.1189206947003D+02 0.1164312087454D+02 + 0.1139826202075D+02 0.1115803915793D+02 0.1092298323335D+02 0.1069360791393D+02 + 0.1047040765827D+02 0.1025385584784D+02 0.1004440298668D+02 0.9842474978315D+01 + 0.9648471488531D+01 0.9462764402487D+01 0.9285696383562D+01 0.9117579542610D+01 + 0.8958694223664D+01 0.8809287913251D+01 0.8669574279281D+01 0.8539732345000D+01 + 0.8419905802854D+01 0.8310202472462D+01 0.8210693906193D+01 0.8121415145123D+01 + 0.8042364627399D+01 0.7973504250305D+01 0.7914759586509D+01 0.7866020254239D+01 + 0.7827140440310D+01 0.7797939574181D+01 0.7778203150401D+01 0.7767683696076D+01 + 0.7766101879191D+01 0.7773147752910D+01 0.7788482130224D+01 0.7811738082649D+01 + 0.7842522555957D+01 0.7880418095328D+01 0.7924984671660D+01 0.7975761600215D+01 + 0.8032269542264D+01 0.8094012579876D+01 0.8160480353611D+01 0.8231150252446D+01 + 0.8305489644993D+01 0.8382958140784D+01 0.8463009870227D+01 0.8545095771695D+01 + 0.8628665874201D+01 0.8713171564104D+01 0.8798067824410D+01 0.8882815435410D+01 + 0.8966883125662D+01 0.9049749662614D+01 0.9130905872628D+01 0.9209856580576D+01 + 0.9286122459755D+01 0.9359241783464D+01 0.9428772070232D+01 0.9494291615411D+01 + 0.9555400902606D+01 0.9611723889203D+01 0.9662909161105D+01 0.9708630952629D+01 + 0.9748590028412D+01 0.9782514425040D+01 0.9810160051033D+01 0.9831311144696D+01 + 0.9845780590219D+01 0.9853410093278D+01 0.9854070218224D+01 0.9847660289749D+01 + 0.9834108162671D+01 0.9813369864231D+01 0.9785429113934D+01 0.9750296726618D+01 + 0.9708009904977D+01 0.9658631428287D+01 0.9602248744509D+01 0.9538972973344D+01 + 0.9468937828113D+01 0.9392298464583D+01 0.9309230265072D+01 0.9219927566246D+01 + 0.9124602339109D+01 0.9023482829682D+01 0.8916812168780D+01 0.8804846959226D+01 + 0.8687855848615D+01 0.8566118095582D+01 0.8439922137218D+01 0.8309564165008D+01 + 0.8175346716309D+01 0.8037577288018D+01 0.7896566978700D+01 0.7752629164977D+01 + 0.7606078217607D+01 0.7457228262158D+01 0.7306391988763D+01 0.7153879514955D+01 + 0.6999997305096D+01 0.6845047149450D+01 0.6689325205489D+01 0.6533121103532D+01 + 0.6376717118388D+01 0.6220387408225D+01 0.6064397321456D+01 0.5909002772035D+01 + 0.5754449683166D+01 0.5600973499038D+01 0.5448798763889D+01 0.5298138767335D+01 + 0.5149195254631D+01 0.5002158200226D+01 0.4857205642751D+01 0.4714503579299D+01 + 0.4574205916718D+01 0.4436454477387D+01 0.4301379056834D+01 0.4169097530399D+01 + 0.4039716006044D+01 0.3913329020311D+01 0.3790019774357D+01 0.3669860406979D+01 + 0.3552912301468D+01 0.3439226423147D+01 0.3328843684463D+01 0.3221795334510D+01 + 0.3118103369910D+01 0.3017780964033D+01 0.2920832911607D+01 0.2827256085858D+01 + 0.2737039905395D+01 0.2650166808185D+01 0.2566612730049D+01 0.2486347585261D+01 + 0.2409335746934D+01 0.2335536525040D+01 0.2264904640019D+01 0.2197390690115D+01 + 0.2132941610696D+01 0.2071501123983D+01 0.2013010177747D+01 0.1957407371718D+01 + 0.1904629370560D+01 0.1854611302453D+01 0.1807287142453D+01 0.1762590079946D+01 + 0.1720452869667D+01 0.1680808165868D+01 0.1643588839388D+01 0.1608728277461D+01 + 0.1576160666249D+01 0.1545821256189D+01 0.1517646610345D+01 0.1491574836053D+01 + 0.1467545800248D+01 0.1445501328920D+01 0.1425385391232D+01 0.1407144268890D+01 + 0.1390726711404D+01 0.1376084077925D+01 0.1363170466350D+01 0.1351942830457D+01 + 0.1342361085779D+01 0.1334388204966D+01 0.1327990303358D+01 0.1323136715467D+01 + 0.1319800063007D+01 0.1317956315104D+01 0.1317584841210D+01 0.1318668457180D+01 + 0.1321193464890D+01 0.1325149685643D+01 0.1330530487491D+01 0.1337332806444D+01 + 0.1345557161395D+01 0.1355207662354D+01 0.1366292011405D+01 0.1378821495537D+01 + 0.1392810970232D+01 0.1408278278149D+01 0.1425359771691D+01 0.1444190648292D+01 + 0.1464793160347D+01 0.1487194690007D+01 0.1511427826231D+01 0.1537530458280D+01 + 0.1565545885720D+01 0.1595522945008D+01 0.1627516152658D+01 + 7 1019 + 1 0 -1 -600.92914 + 2 0 -1 -70.72762 + 2 1 1 -61.62006 + 2 1 -2 -60.33779 + 3 0 -1 -6.85259 + 3 1 1 -4.08398 + 3 1 -2 -3.92195 + 0.2785469948406D-04 0.2850989761226D-04 0.2918050388790D-04 0.2986688053863D-04 + 0.3056939830326D-04 0.3128843663162D-04 0.3202438388908D-04 0.3277763756579D-04 + 0.3354860449101D-04 0.3433770105225D-04 0.3514535341970D-04 0.3597199777588D-04 + 0.3681808055063D-04 0.3768405866170D-04 0.3857039976086D-04 0.3947758248589D-04 + 0.4040609671844D-04 0.4135644384787D-04 0.4232913704140D-04 0.4332470152045D-04 + 0.4434367484359D-04 0.4538660719602D-04 0.4645406168587D-04 0.4754661464746D-04 + 0.4866485595164D-04 0.4980938932344D-04 0.5098083266708D-04 0.5217981839867D-04 + 0.5340699378670D-04 0.5466302130048D-04 0.5594857896670D-04 0.5726436073447D-04 + 0.5861107684878D-04 0.5998945423273D-04 0.6140023687881D-04 0.6284418624921D-04 + 0.6432208168557D-04 0.6583472082835D-04 0.6738292004593D-04 0.6896751487386D-04 + 0.7058936046433D-04 0.7224933204614D-04 0.7394832539552D-04 0.7568725731789D-04 + 0.7746706614092D-04 0.7928871221918D-04 0.8115317845047D-04 0.8306147080440D-04 + 0.8501461886319D-04 0.8701367637523D-04 0.8905972182149D-04 0.9115385899529D-04 + 0.9329721759554D-04 0.9549095383390D-04 0.9773625105613D-04 0.1000343203780D-03 + 0.1023864013358D-03 0.1047937625530D-03 0.1072577024207D-03 0.1097795497962D-03 + 0.1123606647159D-03 0.1150024391264D-03 0.1177062976316D-03 0.1204736982579D-03 + 0.1233061332371D-03 0.1262051298076D-03 0.1291722510338D-03 0.1322090966461D-03 + 0.1353173038985D-03 0.1384985484482D-03 0.1417545452541D-03 0.1450870494977D-03 + 0.1484978575242D-03 0.1519888078065D-03 0.1555617819316D-03 0.1592187056094D-03 + 0.1629615497059D-03 0.1667923312999D-03 0.1707131147644D-03 0.1747260128738D-03 + 0.1788331879363D-03 0.1830368529529D-03 0.1873392728036D-03 0.1917427654613D-03 + 0.1962497032336D-03 0.2008625140339D-03 0.2055836826825D-03 0.2104157522371D-03 + 0.2153613253549D-03 0.2204230656869D-03 0.2256036993036D-03 0.2309060161547D-03 + 0.2363328715630D-03 0.2418871877523D-03 0.2475719554116D-03 0.2533902352953D-03 + 0.2593451598611D-03 0.2654399349456D-03 0.2716778414794D-03 0.2780622372415D-03 + 0.2845965586551D-03 0.2912843226253D-03 0.2981291284186D-03 0.3051346595875D-03 + 0.3123046859388D-03 0.3196430655483D-03 0.3271537468220D-03 0.3348407706058D-03 + 0.3427082723431D-03 0.3507604842842D-03 0.3590017377457D-03 0.3674364654231D-03 + 0.3760692037569D-03 0.3849045953538D-03 0.3939473914642D-03 0.4032024545169D-03 + 0.4126747607134D-03 0.4223694026816D-03 0.4322915921917D-03 0.4424466629351D-03 + 0.4528400733674D-03 0.4634774096178D-03 0.4743643884660D-03 0.4855068603879D-03 + 0.4969108126721D-03 0.5085823726089D-03 0.5205278107526D-03 0.5327535442603D-03 + 0.5452661403075D-03 0.5580723195830D-03 0.5711789598649D-03 0.5845930996791D-03 + 0.5983219420432D-03 0.6123728582965D-03 0.6267533920187D-03 0.6414712630399D-03 + 0.6565343715427D-03 0.6719508022598D-03 0.6877288287682D-03 0.7038769178830D-03 + 0.7204037341532D-03 0.7373181444605D-03 0.7546292227254D-03 0.7723462547211D-03 + 0.7904787429998D-03 0.8090364119316D-03 0.8280292128607D-03 0.8474673293800D-03 + 0.8673611827279D-03 0.8877214373095D-03 0.9085590063450D-03 0.9298850576490D-03 + 0.9517110195424D-03 0.9740485869007D-03 0.9969097273424D-03 0.1020306687559D-02 + 0.1044251999793D-02 0.1068758488459D-02 0.1093839276929D-02 0.1119507794460D-02 + 0.1145777783290D-02 0.1172663305896D-02 0.1200178752418D-02 0.1228338848251D-02 + 0.1257158661817D-02 0.1286653612512D-02 0.1316839478836D-02 0.1347732406709D-02 + 0.1379348917983D-02 0.1411705919139D-02 0.1444820710199D-02 0.1478710993823D-02 + 0.1513394884635D-02 0.1548890918745D-02 0.1585218063505D-02 0.1622395727472D-02 + 0.1660443770616D-02 0.1699382514747D-02 0.1739232754193D-02 0.1780015766714D-02 + 0.1821753324666D-02 0.1864467706427D-02 0.1908181708078D-02 0.1952918655349D-02 + 0.1998702415849D-02 0.2045557411560D-02 0.2093508631630D-02 0.2142581645446D-02 + 0.2192802616016D-02 0.2244198313648D-02 0.2296796129943D-02 0.2350624092111D-02 + 0.2405710877605D-02 0.2462085829094D-02 0.2519778969778D-02 0.2578821019043D-02 + 0.2639243408481D-02 0.2701078298268D-02 0.2764358593919D-02 0.2829117963415D-02 + 0.2895390854731D-02 0.2963212513750D-02 0.3032619002589D-02 0.3103647218338D-02 + 0.3176334912226D-02 0.3250720709219D-02 0.3326844128061D-02 0.3404745601768D-02 + 0.3484466498590D-02 0.3566049143437D-02 0.3649536839799D-02 0.3734973892157D-02 + 0.3822405628893D-02 0.3911878425729D-02 0.4003439729683D-02 0.4097138083571D-02 + 0.4193023151058D-02 0.4291145742273D-02 0.4391557839999D-02 0.4494312626454D-02 + 0.4599464510671D-02 0.4707069156490D-02 0.4817183511189D-02 0.4929865834738D-02 + 0.5045175729731D-02 0.5163174171964D-02 0.5283923541719D-02 0.5407487655733D-02 + 0.5533931799887D-02 0.5663322762626D-02 0.5795728869117D-02 0.5931220016182D-02 + 0.6069867707997D-02 0.6211745092591D-02 0.6356926999158D-02 0.6505489976198D-02 + 0.6657512330503D-02 0.6813074167014D-02 0.6972257429555D-02 0.7135145942476D-02 + 0.7301825453218D-02 0.7472383675814D-02 0.7646910335361D-02 0.7825497213470D-02 + 0.8008238194716D-02 0.8195229314124D-02 0.8386568805687D-02 0.8582357151965D-02 + 0.8782697134773D-02 0.8987693886973D-02 0.9197454945421D-02 0.9412090305061D-02 + 0.9631712474216D-02 0.9856436531081D-02 0.1008638018146D-01 0.1032166381776D-01 + 0.1056241057929D-01 0.1080874641382D-01 0.1106080014059D-01 0.1131870351456D-01 + 0.1158259129217D-01 0.1185260129847D-01 0.1212887449568D-01 0.1241155505336D-01 + 0.1270079041993D-01 0.1299673139589D-01 0.1329953220851D-01 0.1360935058821D-01 + 0.1392634784655D-01 0.1425068895590D-01 0.1458254263085D-01 0.1492208141131D-01 + 0.1526948174750D-01 0.1562492408662D-01 0.1598859296151D-01 0.1636067708113D-01 + 0.1674136942297D-01 0.1713086732749D-01 0.1752937259447D-01 0.1793709158156D-01 + 0.1835423530474D-01 0.1878101954106D-01 0.1921766493349D-01 0.1966439709798D-01 + 0.2012144673282D-01 0.2058904973028D-01 0.2106744729058D-01 0.2155688603831D-01 + 0.2205761814125D-01 0.2256990143168D-01 0.2309399953026D-01 0.2363018197247D-01 + 0.2417872433768D-01 0.2473990838093D-01 0.2531402216746D-01 0.2590136020997D-01 + 0.2650222360877D-01 0.2711692019482D-01 0.2774576467574D-01 0.2838907878477D-01 + 0.2904719143282D-01 0.2972043886368D-01 0.3040916481234D-01 0.3111372066657D-01 + 0.3183446563184D-01 0.3257176689949D-01 0.3332599981844D-01 0.3409754807025D-01 + 0.3488680384785D-01 0.3569416803777D-01 0.3652005040609D-01 0.3736486978808D-01 + 0.3822905428173D-01 0.3911304144500D-01 0.4001727849716D-01 0.4094222252402D-01 + 0.4188834068727D-01 0.4285611043798D-01 0.4384601973426D-01 0.4485856726328D-01 + 0.4589426266756D-01 0.4695362677574D-01 0.4803719183788D-01 0.4914550176524D-01 + 0.5027911237482D-01 0.5143859163859D-01 0.5262451993748D-01 0.5383749032032D-01 + 0.5507810876774D-01 0.5634699446102D-01 0.5764478005620D-01 0.5897211196327D-01 + 0.6032965063071D-01 0.6171807083536D-01 0.6313806197773D-01 0.6459032838288D-01 + 0.6607558960685D-01 0.6759458074882D-01 0.6914805276901D-01 0.7073677281249D-01 + 0.7236152453886D-01 0.7402310845803D-01 0.7572234227204D-01 0.7746006122315D-01 + 0.7923711844813D-01 0.8105438533895D-01 0.8291275190994D-01 0.8481312717146D-01 + 0.8675643951014D-01 0.8874363707591D-01 0.9077568817577D-01 0.9285358167436D-01 + 0.9497832740164D-01 0.9715095656743D-01 0.9937252218316D-01 0.1016440994908D+00 + 0.1039667863991D+00 0.1063417039270D+00 0.1087699966548D+00 0.1112528331826D+00 + 0.1137914065961D+00 0.1163869349408D+00 0.1190406617032D+00 0.1217538563001D+00 + 0.1245278145756D+00 0.1273638593065D+00 0.1302633407152D+00 0.1332276369907D+00 + 0.1362581548182D+00 0.1393563299164D+00 0.1425236275831D+00 0.1457615432496D+00 + 0.1490716030426D+00 0.1524553643553D+00 0.1559144164263D+00 0.1594503809276D+00 + 0.1630649125605D+00 0.1667596996605D+00 0.1705364648103D+00 0.1743969654622D+00 + 0.1783429945682D+00 0.1823763812192D+00 0.1864989912927D+00 0.1907127281095D+00 + 0.1950195330982D+00 0.1994213864695D+00 0.2039203078978D+00 0.2085183572123D+00 + 0.2132176350966D+00 0.2180202837962D+00 0.2229284878350D+00 0.2279444747402D+00 + 0.2330705157750D+00 0.2383089266807D+00 0.2436620684255D+00 0.2491323479628D+00 + 0.2547222189964D+00 0.2604341827547D+00 0.2662707887714D+00 0.2722346356749D+00 + 0.2783283719850D+00 0.2845546969161D+00 0.2909163611887D+00 0.2974161678473D+00 + 0.3040569730850D+00 0.3108416870752D+00 0.3177732748086D+00 0.3248547569377D+00 + 0.3320892106260D+00 0.3394797704033D+00 0.3470296290258D+00 0.3547420383422D+00 + 0.3626203101629D+00 0.3706678171348D+00 0.3788879936194D+00 0.3872843365743D+00 + 0.3958604064379D+00 0.4046198280174D+00 0.4135662913777D+00 0.4227035527333D+00 + 0.4320354353406D+00 0.4415658303911D+00 0.4512986979050D+00 0.4612380676239D+00 + 0.4713880399026D+00 0.4817527865991D+00 0.4923365519627D+00 0.5031436535179D+00 + 0.5141784829457D+00 0.5254455069594D+00 0.5369492681755D+00 0.5486943859781D+00 + 0.5606855573760D+00 0.5729275578526D+00 0.5854252422055D+00 0.5981835453774D+00 + 0.6112074832756D+00 0.6245021535788D+00 0.6380727365318D+00 0.6519244957251D+00 + 0.6660627788593D+00 0.6804930184930D+00 0.6952207327721D+00 0.7102515261402D+00 + 0.7255910900280D+00 0.7412452035208D+00 0.7572197340019D+00 0.7735206377712D+00 + 0.7901539606368D+00 0.8071258384784D+00 0.8244424977799D+00 0.8421102561313D+00 + 0.8601355226955D+00 0.8785247986406D+00 0.8972846775342D+00 0.9164218456981D+00 + 0.9359430825217D+00 0.9558552607316D+00 0.9761653466152D+00 0.9968804001960D+00 + 0.1018007575359D+01 0.1039554119923D+01 0.1061527375657D+01 0.1083934778239D+01 + 0.1106783857155D+01 0.1130082235534D+01 0.1153837629920D+01 0.1178057849966D+01 + 0.1202750798072D+01 0.1227924468933D+01 0.1253586949019D+01 0.1279746415969D+01 + 0.1306411137905D+01 0.1333589472658D+01 0.1361289866898D+01 0.1389520855179D+01 + 0.1418291058879D+01 0.1447609185042D+01 0.1477484025114D+01 0.1507924453573D+01 + 0.1538939426443D+01 0.1570537979692D+01 0.1602729227515D+01 0.1635522360484D+01 + 0.1668926643575D+01 0.1702951414064D+01 0.1737606079279D+01 0.1772900114215D+01 + 0.1808843059006D+01 0.1845444516241D+01 0.1882714148124D+01 0.1920661673484D+01 + 0.1959296864608D+01 0.1998629543915D+01 0.2038669580452D+01 0.2079426886209D+01 + 0.2120911412251D+01 0.2163133144669D+01 0.2206102100325D+01 0.2249828322406D+01 + 0.2294321875771D+01 0.2339592842093D+01 0.2385651314777D+01 0.2432507393674D+01 + 0.2480171179551D+01 0.2528652768350D+01 0.2577962245199D+01 0.2628109678186D+01 + 0.2679105111893D+01 0.2730958560667D+01 0.2783680001651D+01 0.2837279367540D+01 + 0.2891766539077D+01 0.2947151337282D+01 0.3003443515395D+01 0.3060652750548D+01 + 0.3118788635144D+01 0.3177860667952D+01 0.3237878244901D+01 0.3298850649581D+01 + 0.3360787043433D+01 0.3423696455642D+01 0.3487587772706D+01 0.3552469727697D+01 + 0.3618350889205D+01 0.3685239649953D+01 0.3753144215094D+01 0.3822072590172D+01 + 0.3892032568757D+01 0.3963031719749D+01 0.4035077374344D+01 0.4108176612659D+01 + 0.4182336250031D+01 0.4257562822965D+01 0.4333862574749D+01 0.4411241440733D+01 + 0.4489705033259D+01 0.4569258626264D+01 0.4649907139541D+01 0.4731655122665D+01 + 0.4814506738591D+01 0.4898465746917D+01 0.4983535486831D+01 0.5069718859726D+01 + 0.5157018311510D+01 0.5245435814598D+01 0.5334972849604D+01 0.5425630386741D+01 + 0.5517408866922D+01 0.5610308182594D+01 0.5704327658293D+01 0.5799466030950D+01 + 0.5895721429939D+01 0.5993091356902D+01 0.6091572665343D+01 0.6191161540026D+01 + 0.6291853476174D+01 0.6393643258502D+01 0.6496524940089D+01 0.6600491821120D+01 + 0.6705536427508D+01 0.6811650489422D+01 0.6918824919752D+01 0.7027049792516D+01 + 0.7136314321257D+01 0.7246606837441D+01 0.7357914768890D+01 0.7470224618285D+01 + 0.7583521941761D+01 0.7697791327633D+01 0.7813016375286D+01 0.7929179674266D+01 + 0.8046262783610D+01 0.8164246211451D+01 0.8283109394943D+01 0.8402830680546D+01 + 0.8523387304717D+01 0.8644755375050D+01 0.8766909851919D+01 0.8889824530662D+01 + 0.9013472024372D+01 0.9137823747332D+01 0.9262849899162D+01 0.9388519449721D+01 + 0.9514800124838D+01 0.9641658392911D+01 0.9769059452454D+01 0.9896967220642D+01 + 0.1002534432292D+02 0.1015415208375D+02 0.1028335051856D+02 0.1041289832694D+02 + 0.1054275288720D+02 0.1067287025230D+02 0.1080320514732D+02 0.1093371096842D+02 + 0.1106433978348D+02 0.1119504233437D+02 0.1132576804111D+02 0.1145646500778D+02 + 0.1158708003040D+02 0.1171755860686D+02 0.1184784494890D+02 0.1197788199624D+02 + 0.1210761143300D+02 0.1223697370643D+02 0.1236590804802D+02 0.1249435249713D+02 + 0.1262224392713D+02 0.1274951807422D+02 0.1287610956891D+02 0.1300195197030D+02 + 0.1312697780324D+02 0.1325111859836D+02 0.1337430493511D+02 0.1349646648783D+02 + 0.1361753207499D+02 0.1373742971158D+02 0.1385608666463D+02 0.1397342951220D+02 + 0.1408938420551D+02 0.1420387613459D+02 0.1431683019720D+02 0.1442817087135D+02 + 0.1453782229112D+02 0.1464570832613D+02 0.1475175266444D+02 0.1485587889894D+02 + 0.1495801061734D+02 0.1505807149563D+02 0.1515598539505D+02 0.1525167646255D+02 + 0.1534506923469D+02 0.1543608874497D+02 0.1552466063453D+02 0.1561071126614D+02 + 0.1569416784144D+02 0.1577495852137D+02 0.1585301254962D+02 0.1592826037906D+02 + 0.1600063380113D+02 0.1607006607780D+02 0.1613649207626D+02 0.1619984840598D+02 + 0.1626007355811D+02 0.1631710804694D+02 0.1637089455331D+02 0.1642137806973D+02 + 0.1646850604694D+02 0.1651222854187D+02 0.1655249836643D+02 0.1658927123725D+02 + 0.1662250592571D+02 0.1665216440833D+02 0.1667821201695D+02 0.1670061758849D+02 + 0.1671935361393D+02 0.1673439638626D+02 0.1674572614680D+02 0.1675332722984D+02 + 0.1675718820489D+02 0.1675730201639D+02 0.1675366612029D+02 0.1674628261721D+02 + 0.1673515838160D+02 0.1672030518660D+02 0.1670173982403D+02 0.1667948421911D+02 + 0.1665356553932D+02 0.1662401629713D+02 0.1659087444589D+02 0.1655418346847D+02 + 0.1651399245822D+02 0.1647035619162D+02 0.1642333519220D+02 0.1637299578522D+02 + 0.1631941014255D+02 0.1626265631736D+02 0.1620281826800D+02 0.1613998587066D+02 + 0.1607425492032D+02 0.1600572711953D+02 0.1593451005448D+02 0.1586071715810D+02 + 0.1578446765952D+02 0.1570588651969D+02 0.1562510435271D+02 0.1554225733239D+02 + 0.1545748708393D+02 0.1537094056013D+02 0.1528276990216D+02 0.1519313228432D+02 + 0.1510218974282D+02 0.1501010898825D+02 0.1491706120172D+02 0.1482322181439D+02 + 0.1472877027056D+02 0.1463388977412D+02 0.1453876701847D+02 0.1444359189998D+02 + 0.1434855721516D+02 0.1425385834165D+02 0.1415969290335D+02 0.1406626041994D+02 + 0.1397376194113D+02 0.1388239966616D+02 0.1379237654884D+02 0.1370389588884D+02 + 0.1361716090978D+02 0.1353237432463D+02 0.1344973788944D+02 0.1336945194585D+02 + 0.1329171495353D+02 0.1321672301317D+02 0.1314466938134D+02 0.1307574397764D+02 + 0.1301013288643D+02 0.1294801785263D+02 0.1288957577415D+02 0.1283497819168D+02 + 0.1278439077719D+02 0.1273797282248D+02 0.1269587672938D+02 0.1265824750278D+02 + 0.1262522224822D+02 0.1259692967553D+02 0.1257348960995D+02 0.1255501251259D+02 + 0.1254159901155D+02 0.1253333944568D+02 0.1253031342232D+02 0.1253258939096D+02 + 0.1254022423435D+02 0.1255326287874D+02 0.1257173792503D+02 0.1259566930240D+02 + 0.1262506394600D+02 0.1265991550053D+02 0.1270020405107D+02 0.1274589588280D+02 + 0.1279694327113D+02 0.1285328430368D+02 0.1291484273542D+02 0.1298152787843D+02 + 0.1305323452739D+02 0.1312984292209D+02 0.1321121874799D+02 0.1329721317575D+02 + 0.1338766294085D+02 0.1348239046377D+02 0.1358120401168D+02 0.1368389790210D+02 + 0.1379025274883D+02 0.1390003575075D+02 0.1401300102338D+02 0.1412888997336D+02 + 0.1424743171576D+02 0.1436834353392D+02 0.1449133138140D+02 0.1461609042557D+02 + 0.1474230563199D+02 0.1486965238885D+02 0.1499779717038D+02 0.1512639823800D+02 + 0.1525510637798D+02 0.1538356567399D+02 0.1551141431302D+02 0.1563828542269D+02 + 0.1576380793817D+02 0.1588760749642D+02 0.1600930735575D+02 0.1612852933795D+02 + 0.1624489479082D+02 0.1635802556828D+02 0.1646754502520D+02 0.1657307902430D+02 + 0.1667425695189D+02 0.1677071273953D+02 0.1686208588836D+02 0.1694802249283D+02 + 0.1702817626054D+02 0.1710220952485D+02 0.1716979424676D+02 0.1723061300262D+02 + 0.1728435995432D+02 0.1733074179819D+02 0.1736947868953D+02 0.1740030513890D+02 + 0.1742297087709D+02 0.1743724168510D+02 0.1744290018603D+02 0.1743974659549D+02 + 0.1742759942746D+02 0.1740629615247D+02 0.1737569380519D+02 0.1733566953861D+02 + 0.1728612112223D+02 0.1722696738154D+02 0.1715814857673D+02 0.1707962671824D+02 + 0.1699138581740D+02 0.1689343207022D+02 0.1678579397303D+02 0.1666852236849D+02 + 0.1654169042108D+02 0.1640539352121D+02 0.1625974911749D+02 0.1610489647684D+02 + 0.1594099637258D+02 0.1576823070075D+02 0.1558680202530D+02 0.1539693305309D+02 + 0.1519886603990D+02 0.1499286212893D+02 0.1477920062373D+02 0.1455817819755D+02 + 0.1433010804159D+02 0.1409531895495D+02 0.1385415437910D+02 0.1360697138042D+02 + 0.1335413958412D+02 0.1309604006359D+02 0.1283306418914D+02 0.1256561244045D+02 + 0.1229409318742D+02 0.1201892144398D+02 0.1174051759988D+02 0.1145930613567D+02 + 0.1117571432593D+02 0.1089017093619D+02 0.1060310491905D+02 0.1031494411493D+02 + 0.1002611396307D+02 0.9737036228271D+01 0.9448127748978D+01 0.9159799212137D+01 + 0.8872453960224D+01 0.8586486835702D+01 0.8302283068016D+01 0.8020217208022D+01 + 0.7740652114540D+01 0.7463937997512D+01 0.7190411521609D+01 0.6920394974658D+01 + 0.6654195503776D+01 0.6392104422571D+01 0.6134396592015D+01 0.5881329877208D+01 + 0.5633144681845D+01 0.5390063561676D+01 0.5152290917823D+01 0.4920012770300D+01 + 0.4693396611616D+01 0.4472591339847D+01 0.4257727270097D+01 0.4048916222783D+01 + 0.3846251686772D+01 0.3649809054935D+01 0.3459645929298D+01 0.3275802492617D+01 + 0.3098301942838D+01 0.2927150986626D+01 0.2762340387854D+01 0.2603845566745D+01 + 0.2451627245138D+01 0.2305632133210D+01 0.2165793652857D+01 0.2032032692873D+01 + 0.1904258390998D+01 0.1782368937897D+01 0.1666252398174D+01 0.1555787543536D+01 + 0.1450844693334D+01 0.1351286557804D+01 0.1256969079469D+01 0.1167742268318D+01 + 0.1083451026567D+01 0.1003935959018D+01 0.9290341652443D+00 0.8585800100976D+00 + 0.7924058692696D+00 0.7303428469392D+00 0.6722214628130D+00 0.6178723061713D+00 + 0.5671266548366D+00 0.5198170572937D+00 0.4757778765085D+00 0.4348457943007D+00 + 0.3968602754441D+00 0.3616639909708D+00 0.3291032004545D+00 0.2990280933404D+00 + 0.2712930896597D+00 0.2457571007346D+00 0.2222837507206D+00 0.2007415600622D+00 + 0.1810040921462D+00 0.1629500646234D+00 0.1464634270347D+00 0.1314334065222D+00 + 0.1177545235250D+00 0.1053265794595D+00 0.9405461845734D-01 0.8384886528833D-01 + 0.7462464162849D-01 0.6630226284235D-01 0.5880691744214D-01 0.5206853135862D-01 + 0.4602161911498D-01 0.4060512393584D-01 0.3576224875042D-01 0.3144027996354D-01 + 0.2759040577246D-01 0.2416753070297D-01 0.2113008792669D-01 0.1843985080459D-01 + 0.1606174498113D-01 0.1396366223069D-01 0.1211627713474D-01 0.1049286754506D-01 + 0.9069139668069D-02 0.7823058487381D-02 0.6734684128178D-02 0.5786014658544D-02 + 0.4960835719908D-02 0.4244577282225D-02 0.3624177729732D-02 0.3087955400419D-02 + 0.2625487627035D-02 0.2227497259527D-02 0.1885746588363D-02 0.1592938535094D-02 + 0.1342624930581D-02 0.1129121662324D-02 0.9474304399453D-03 0.7931669017510D-03 + 0.6624947650309D-03 0.5520657078526D-03 0.4589646602094D-03 0.3806601769220D-03 + 0.3149595632568D-03 0.2599684263118D-03 0.2140543303820D-03 0.1758142422924D-03 + 0.1440454626657D-03 0.1177197508559D-03 0.9596036446378D-04 0.7802174860524D-04 + 0.6327162510976D-04 0.5117524730842D-04 0.4128160176895D-04 0.3321135403353D-04 + 0.2664635092197D-04 0.2132050711792D-04 0.1701191842681D-04 0.1353605817300D-04 + 0.1073992660897D-04 0.8497035878124D-05 0.6703124964229D-05 0.5272510150108D-05 + 0.4134986785638D-05 0.3233207634943D-05 0.2520471748410D-05 0.1958865710514D-05 + 0.1517706279742D-05 0.1172239898148D-05 0.9025603453303D-06 0.6927109876189D-06 + 0.5299426724681D-06 0.4041023853658D-06 0.3071313668175D-06 0.2326545239714D-06 + 0.1756457075926D-06 0.1321558008512D-06 0.9909261999878D-07 0.7404339427499D-07 + 0.5513210650966D-07 0.4090526741789D-07 0.3024079341638D-07 0.2227558518901D-07 + 0.1634818494233D-07 0.1195354464424D-07 0.8707483586044D-08 0.6318867278968D-08 + 0.4567914967219D-08 0.3289352094104D-08 0.2359377458458D-08 0.1685621648831D-08 + 0.1199441444985D-08 0.8500308799920D-09 0.5999391982645D-09 0.4216737768588D-09 + 0.2951361838067D-09 0.2056952508216D-09 0.1427450951301D-09 0.9863071098592D-10 + 0.6785093267399D-10 0.4646977189272D-10 0.3168359136154D-10 0.2150429387060D-10 + 0.1452848527224D-10 0.9770053216322D-11 0.6539304800065D-11 0.4356126796501D-11 + 0.2887880260806D-11 0.1905201798784D-11 0.1250725394878D-11 0.8169916617209D-12 + 0.5309432694921D-12 0.3433000833030D-12 0.2208020111155D-12 0.1412809577700D-12 + 0.8992689621478D-13 0.5693706621335D-13 0.3585707402774D-13 0.2245975161629D-13 + 0.1399148636359D-13 0.8668296063641D-14 0.5340818176435D-14 diff --git a/Test/Summit-Acceptance/Fe/i_lsms b/Test/Summit-Acceptance/Fe/i_lsms new file mode 100644 index 000000000..47daa2689 --- /dev/null +++ b/Test/Summit-Acceptance/Fe/i_lsms @@ -0,0 +1,77 @@ +systemid="fe2" +system_title = "Iron test for LSMS 3" +pot_in_type=1 +-- write potential out. Use this only when xRepeat, yRepeat and zRepeat = 1 +pot_out_type=-1 +num_atoms=2 +nspin=3 +mtasa=0 + +iprint=0 +default_iprint=-1 +print_node=0 +-- istop="buildKKRMatrix" +istop="main" + +nscf=25 + +xRepeat=1 +yRepeat=1 +zRepeat=1 +makeTypesUnique=1 + +-- energyContour = {npts=1,grid=0,ebot=-0.2,etop=0.0,eitop=0.825,eibot=0.1} +-- energyContour = {npts=11,grid=2,ebot=-0.3,etop=0.0,eitop=0.825,eibot=0.025,maxGroupSize=5} +energyContour = {npts=31,grid=2,ebot=-0.3,etop=0.0,eitop=0.825,eibot=0.0025} + +a = 5.42 + +bravais = {} +bravais[1]={a,0,0} +bravais[2]={0,a,0} +bravais[3]={0,0,a} + +site_default={lmax=3,rLIZ=12.5,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} +-- site_default={lmax=3,rLIZ=8.5,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} +-- site_default={lmax=3,rLIZ=5.0,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} +-- site_default={lmax=3,rLIZ=0.1,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} + +-- Possible choices of mixing parameters +-- quantity : charge, potential, moment_magnitude, moment_direction, noQuantity +-- algorithm : simple, broyden, noAlgorithm +-- mixing={} +--mixing = { {quantity = "charge", algorithm = "simple", mixing_parameter = 0.05} } +--mixing = { {quantity = "potential", algorithm = "simple", mixing_parameter = 0.0} } +mixing = { {quantity = "potential", algorithm = "broyden", mixing_parameter = 0.05} } +--mixing = { {quantity = "potential", algorithm = "broyden", mixing_parameter = 0.05}, {quantity = "moment_magnitude", algorithm = "noAlgorithm", mixing_parameter = 0.01} } + +numberOfMixQuantities = 0 + +for k,v in pairs(mixing) do + numberOfMixQuantities = numberOfMixQuantities + 1 +end + +--[[ +print("Site defaults:") +for k,v in pairs(site_default) do + print(k," : ",v) +end +--]] + +site = {} +for i =1,num_atoms do site[i]={} end + +site[1].pos={0,0,0} +site[1].evec={0,0,1} +site[1].pot_in_idx=0 +site[2].pos={0.5*a,0.5*a,0.5*a} +site[2].evec={0,0,1} +site[2].pot_in_idx=0 + +-- set site defaults +for i =1,num_atoms do + for k,v in pairs(site_default) do + if(site[i][k]==nil) then site[i][k]=v end + end +end + diff --git a/Test/Summit-Acceptance/Fe/i_lsms_template b/Test/Summit-Acceptance/Fe/i_lsms_template new file mode 100644 index 000000000..ee977b93a --- /dev/null +++ b/Test/Summit-Acceptance/Fe/i_lsms_template @@ -0,0 +1,77 @@ +systemid="fe2" +system_title = "Iron test for LSMS 3" +pot_in_type=1 +-- write potential out. Use this only when xRepeat, yRepeat and zRepeat = 1 +pot_out_type=-1 +num_atoms=2 +nspin=3 +mtasa=0 + +iprint=0 +default_iprint=-1 +print_node=0 +-- istop="buildKKRMatrix" +istop="main" + +nscf=2 + +xRepeat=REPEAT +yRepeat=REPEAT +zRepeat=REPEAT +makeTypesUnique=1 + +-- energyContour = {npts=1,grid=0,ebot=-0.2,etop=0.0,eitop=0.825,eibot=0.1} +-- energyContour = {npts=11,grid=2,ebot=-0.3,etop=0.0,eitop=0.825,eibot=0.025,maxGroupSize=5} +energyContour = {npts=31,grid=2,ebot=-0.3,etop=0.0,eitop=0.825,eibot=0.0025} + +a = 5.42 + +bravais = {} +bravais[1]={a,0,0} +bravais[2]={0,a,0} +bravais[3]={0,0,a} + +site_default={lmax=3,rLIZ=12.5,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} +-- site_default={lmax=3,rLIZ=8.5,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} +-- site_default={lmax=3,rLIZ=5.0,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} +-- site_default={lmax=3,rLIZ=0.1,rsteps={89.5,91.5,93.2,99.9},atom="Fe",Z=26,Zc=10,Zs=8,Zv=8,rad=2} + +-- Possible choices of mixing parameters +-- quantity : charge, potential, moment_magnitude, moment_direction, noQuantity +-- algorithm : simple, broyden, noAlgorithm +-- mixing={} +--mixing = { {quantity = "charge", algorithm = "simple", mixing_parameter = 0.05} } +--mixing = { {quantity = "potential", algorithm = "simple", mixing_parameter = 0.0} } +mixing = { {quantity = "potential", algorithm = "broyden", mixing_parameter = 0.05} } +--mixing = { {quantity = "potential", algorithm = "broyden", mixing_parameter = 0.05}, {quantity = "moment_magnitude", algorithm = "noAlgorithm", mixing_parameter = 0.01} } + +numberOfMixQuantities = 0 + +for k,v in pairs(mixing) do + numberOfMixQuantities = numberOfMixQuantities + 1 +end + +--[[ +print("Site defaults:") +for k,v in pairs(site_default) do + print(k," : ",v) +end +--]] + +site = {} +for i =1,num_atoms do site[i]={} end + +site[1].pos={0,0,0} +site[1].evec={0,0,1} +site[1].pot_in_idx=0 +site[2].pos={0.5*a,0.5*a,0.5*a} +site[2].evec={0,0,1} +site[2].pot_in_idx=0 + +-- set site defaults +for i =1,num_atoms do + for k,v in pairs(site_default) do + if(site[i][k]==nil) then site[i][k]=v end + end +end + diff --git a/Test/Summit-Acceptance/Fe/q_lsms b/Test/Summit-Acceptance/Fe/q_lsms new file mode 100644 index 000000000..280011504 --- /dev/null +++ b/Test/Summit-Acceptance/Fe/q_lsms @@ -0,0 +1,23 @@ +#!/bin/bash +# Begin LSF directives +#BSUB -P stf006summitdev +#BSUB -J LSMS-Fe +#BSUB -o Fe.stdout +#BSUB -W 60 +#BSUB -n 2 +# End LSF directives and begin shell commands + +# the run will be for 2 x REPEAT^3 Fe atoms +export REPEAT=2 +export NUM_ATOMS=$(( 2 * $REPEAT * $REPEAT * $REPEAT )) + +export LSMS_ROOT=$HOME/MST_Pack/LSMS_3_summitdev + +cd $LSMS_ROOT/Test/Summit-Acceptance/Fe +#cd $MEMBERWORK/stf006 +echo "Running lsms for " $NUM_ATOMS " Fe atoms." + +sed "s/REPEAT/$REPEAT/" i_lsms_template > i_lsms_$NUM_ATOMS + +date +mpirun -np 2 $LSMS_ROOT/bin/lsms i_lsms_$NUM_ATOMS diff --git a/Test/Summit-Acceptance/Fe/q_lsms_titan b/Test/Summit-Acceptance/Fe/q_lsms_titan new file mode 100644 index 000000000..f7273f152 --- /dev/null +++ b/Test/Summit-Acceptance/Fe/q_lsms_titan @@ -0,0 +1,25 @@ +#!/bin/bash +#PBS -joe +#PBS -N Fe_LSMS3 +#PBS -l walltime=1:00:00 +#PBS -l nodes=2 +#PBS -l feature=gpu +#PBS -A STF006 +#------------------------------------------- + +#--Change directory to the working directory. +cd $PBS_O_WORKDIR + +# the run will be for 2 x REPEAT^3 Fe atoms +export REPEAT=2 +export NUM_ATOMS=$(( 2 * $REPEAT * $REPEAT * $REPEAT )) + +export LSMS_ROOT=$HOME/MST_Pack/LSMS_3 + + +echo "Running lsms for " $NUM_ATOMS " Fe atoms." + +sed "s/REPEAT/$REPEAT/" i_lsms_template > i_lsms_$NUM_ATOMS + +date +aprun -n 2 $LSMS_ROOT/bin/lsms i_lsms_$NUM_ATOMS diff --git a/Test/Summit-Acceptance/Fe/run-lsms-summitdev.sh b/Test/Summit-Acceptance/Fe/run-lsms-summitdev.sh new file mode 100755 index 000000000..ec03ff607 --- /dev/null +++ b/Test/Summit-Acceptance/Fe/run-lsms-summitdev.sh @@ -0,0 +1,49 @@ +#!/bin/bash +jobname=LSMS3-Fe +nodes=1 +ppn=2 +num_threads=8 +wt=60 +let nmpi=$nodes*$ppn + +module load gcc/5.4.0 cuda essl cuda hdf5 + +# LSMS_ROOT=$HOME/ven101gpfs/LSMS_3-gcc-cuda +LSMS_ROOT=$HOME/MST_Pack/LSMS_3_summitdev + +# the run will be for 2 x REPEAT^3 Fe atoms +REPEAT=2 +NUM_ATOMS=$(( 2 * $REPEAT * $REPEAT * $REPEAT )) + +sed "s/REPEAT/$REPEAT/" i_lsms_template > i_lsms_$NUM_ATOMS + +# Begin LSF directives +#-------------------------------------- +cat > _batch.job < i_lsms_$NUM_ATOMS + +# Begin LSF directives +#-------------------------------------- +cat > _batch.job < i_lsms_$NUM_ATOMS + +# Begin LSF directives +#-------------------------------------- +cat > _batch.job <" +echo "Total Steps: " $TOTAL_STEPS +echo "Total MPI Ranks: " $TOTAL_MPI + +mpirun -np $TOTAL_MPI $(LSMS_ROOT)/bin/wl-lsms -i i_lsms -mode 1d -size_lsms $NUM_ATOMS -num_lsms $NUM_LSMS -num_steps $TOTAL_STEPS -energy_calculation multistep + diff --git a/Test/Summit-Acceptance/WL-Fe/v_fe2.0 b/Test/Summit-Acceptance/WL-Fe/v_fe2.0 new file mode 100755 index 000000000..f3c4e967f --- /dev/null +++ b/Test/Summit-Acceptance/WL-Fe/v_fe2.0 @@ -0,0 +1,1542 @@ + nspin vdif :::::: Potentials for ferromagnetic relativistic core Fe. + 2 0.0000000000000D+00 + LSMS: xx z= 26. xvalws= 5.22926 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728400909D+02-0.5199725115555D+02-0.5199721790459D+02-0.5199718425142D+02 +-0.5199715019116D+02-0.5199711571889D+02-0.5199708082964D+02-0.5199704551834D+02 +-0.5199700977990D+02-0.5199697360915D+02-0.5199693700086D+02-0.5199689994973D+02 +-0.5199686245042D+02-0.5199682449748D+02-0.5199678608545D+02-0.5199674720876D+02 +-0.5199670786180D+02-0.5199666803887D+02-0.5199662773421D+02-0.5199658694201D+02 +-0.5199654565635D+02-0.5199650387127D+02-0.5199646158073D+02-0.5199641877860D+02 +-0.5199637545872D+02-0.5199633161480D+02-0.5199628724051D+02-0.5199624232942D+02 +-0.5199619687506D+02-0.5199615087084D+02-0.5199610431012D+02-0.5199605718616D+02 +-0.5199600949214D+02-0.5199596122116D+02-0.5199591236626D+02-0.5199586292036D+02 +-0.5199581287632D+02-0.5199576222688D+02-0.5199571096474D+02-0.5199565908248D+02 +-0.5199560657259D+02-0.5199555342748D+02-0.5199549963947D+02-0.5199544520078D+02 +-0.5199539010352D+02-0.5199533433975D+02-0.5199527790139D+02-0.5199522078028D+02 +-0.5199516296816D+02-0.5199510445666D+02-0.5199504523733D+02-0.5199498530160D+02 +-0.5199492464081D+02-0.5199486324617D+02-0.5199480110883D+02-0.5199473821977D+02 +-0.5199467456990D+02-0.5199461015004D+02-0.5199454495085D+02-0.5199447896290D+02 +-0.5199441217666D+02-0.5199434458246D+02-0.5199427617052D+02-0.5199420693096D+02 +-0.5199413685375D+02-0.5199406592876D+02-0.5199399414573D+02-0.5199392149428D+02 +-0.5199384796390D+02-0.5199377354396D+02-0.5199369822368D+02-0.5199362199218D+02 +-0.5199354483843D+02-0.5199346675127D+02-0.5199338771940D+02-0.5199330773139D+02 +-0.5199322677567D+02-0.5199314484053D+02-0.5199306191412D+02-0.5199297798443D+02 +-0.5199289303934D+02-0.5199280706654D+02-0.5199272005361D+02-0.5199263198797D+02 +-0.5199254285685D+02-0.5199245264737D+02-0.5199236134649D+02-0.5199226894099D+02 +-0.5199217541751D+02-0.5199208076251D+02-0.5199198496230D+02-0.5199188800302D+02 +-0.5199178987064D+02-0.5199169055096D+02-0.5199159002963D+02-0.5199148829207D+02 +-0.5199138532359D+02-0.5199128110928D+02-0.5199117563407D+02-0.5199106888269D+02 +-0.5199096083969D+02-0.5199085148944D+02-0.5199074081613D+02-0.5199062880373D+02 +-0.5199051543604D+02-0.5199040069664D+02-0.5199028456895D+02-0.5199016703615D+02 +-0.5199004808124D+02-0.5198992768700D+02-0.5198980583600D+02-0.5198968251063D+02 +-0.5198955769302D+02-0.5198943136512D+02-0.5198930350863D+02-0.5198917410506D+02 +-0.5198904313569D+02-0.5198891058155D+02-0.5198877642345D+02-0.5198864064200D+02 +-0.5198850321751D+02-0.5198836413012D+02-0.5198822335968D+02-0.5198808088582D+02 +-0.5198793668793D+02-0.5198779074512D+02-0.5198764303627D+02-0.5198749354000D+02 +-0.5198734223467D+02-0.5198718909837D+02-0.5198703410894D+02-0.5198687724393D+02 +-0.5198671848065D+02-0.5198655779610D+02-0.5198639516703D+02-0.5198623056988D+02 +-0.5198606398084D+02-0.5198589537577D+02-0.5198572473026D+02-0.5198555201962D+02 +-0.5198537721883D+02-0.5198520030257D+02-0.5198502124524D+02-0.5198484002091D+02 +-0.5198465660333D+02-0.5198447096595D+02-0.5198428308188D+02-0.5198409292391D+02 +-0.5198390046450D+02-0.5198370567579D+02-0.5198350852955D+02-0.5198330899725D+02 +-0.5198310704998D+02-0.5198290265850D+02-0.5198269579318D+02-0.5198248642408D+02 +-0.5198227452087D+02-0.5198206005285D+02-0.5198184298896D+02-0.5198162329776D+02 +-0.5198140094741D+02-0.5198117590571D+02-0.5198094814005D+02-0.5198071761744D+02 +-0.5198048430449D+02-0.5198024816738D+02-0.5198000917191D+02-0.5197976728344D+02 +-0.5197952246692D+02-0.5197927468690D+02-0.5197902390745D+02-0.5197877009224D+02 +-0.5197851320449D+02-0.5197825320698D+02-0.5197799006201D+02-0.5197772373146D+02 +-0.5197745417673D+02-0.5197718135875D+02-0.5197690523796D+02-0.5197662577437D+02 +-0.5197634292744D+02-0.5197605665620D+02-0.5197576691913D+02-0.5197547367423D+02 +-0.5197517687900D+02-0.5197487649041D+02-0.5197457246489D+02-0.5197426475838D+02 +-0.5197395332627D+02-0.5197363812338D+02-0.5197331910403D+02-0.5197299622195D+02 +-0.5197266943031D+02-0.5197233868173D+02-0.5197200392824D+02-0.5197166512128D+02 +-0.5197132221174D+02-0.5197097514984D+02-0.5197062388528D+02-0.5197026836709D+02 +-0.5196990854370D+02-0.5196954436291D+02-0.5196917577189D+02-0.5196880271716D+02 +-0.5196842514461D+02-0.5196804299945D+02-0.5196765622622D+02-0.5196726476881D+02 +-0.5196686857041D+02-0.5196646757354D+02-0.5196606171998D+02-0.5196565095085D+02 +-0.5196523520651D+02-0.5196481442664D+02-0.5196438855015D+02-0.5196395751522D+02 +-0.5196352125928D+02-0.5196307971901D+02-0.5196263283028D+02-0.5196218052823D+02 +-0.5196172274718D+02-0.5196125942066D+02-0.5196079048138D+02-0.5196031586126D+02 +-0.5195983549135D+02-0.5195934930191D+02-0.5195885722231D+02-0.5195835918107D+02 +-0.5195785510585D+02-0.5195734492343D+02-0.5195682855969D+02-0.5195630593961D+02 +-0.5195577698725D+02-0.5195524162577D+02-0.5195469977736D+02-0.5195415136330D+02 +-0.5195359630387D+02-0.5195303451841D+02-0.5195246592528D+02-0.5195189044181D+02 +-0.5195130798435D+02-0.5195071846824D+02-0.5195012180777D+02-0.5194951791619D+02 +-0.5194890670569D+02-0.5194828808741D+02-0.5194766197137D+02-0.5194702826653D+02 +-0.5194638688071D+02-0.5194573772064D+02-0.5194508069188D+02-0.5194441569885D+02 +-0.5194374264482D+02-0.5194306143187D+02-0.5194237196087D+02-0.5194167413149D+02 +-0.5194096784220D+02-0.5194025299021D+02-0.5193952947146D+02-0.5193879718066D+02 +-0.5193805601119D+02-0.5193730585519D+02-0.5193654660341D+02-0.5193577814533D+02 +-0.5193500036904D+02-0.5193421316129D+02-0.5193341640742D+02-0.5193260999141D+02 +-0.5193179379578D+02-0.5193096770164D+02-0.5193013158865D+02-0.5192928533501D+02 +-0.5192842881739D+02-0.5192756191098D+02-0.5192668448947D+02-0.5192579642497D+02 +-0.5192489758803D+02-0.5192398784765D+02-0.5192306707119D+02-0.5192213512442D+02 +-0.5192119187145D+02-0.5192023717474D+02-0.5191927089505D+02-0.5191829289146D+02 +-0.5191730302133D+02-0.5191630114025D+02-0.5191528710207D+02-0.5191426075883D+02 +-0.5191322196077D+02-0.5191217055632D+02-0.5191110639202D+02-0.5191002931255D+02 +-0.5190893916069D+02-0.5190783577729D+02-0.5190671900126D+02-0.5190558866954D+02 +-0.5190444461705D+02-0.5190328667673D+02-0.5190211467945D+02-0.5190092845399D+02 +-0.5189972782709D+02-0.5189851262330D+02-0.5189728266508D+02-0.5189603777267D+02 +-0.5189477776415D+02-0.5189350245533D+02-0.5189221165981D+02-0.5189090518885D+02 +-0.5188958285145D+02-0.5188824445423D+02-0.5188688980147D+02-0.5188551869503D+02 +-0.5188413093435D+02-0.5188272631641D+02-0.5188130463569D+02-0.5187986568418D+02 +-0.5187840925129D+02-0.5187693512386D+02-0.5187544308611D+02-0.5187393291962D+02 +-0.5187240440329D+02-0.5187085731330D+02-0.5186929142309D+02-0.5186770650332D+02 +-0.5186610232183D+02-0.5186447864362D+02-0.5186283523081D+02-0.5186117184259D+02 +-0.5185948823518D+02-0.5185778416183D+02-0.5185605937277D+02-0.5185431361514D+02 +-0.5185254663297D+02-0.5185075816718D+02-0.5184894795548D+02-0.5184711573237D+02 +-0.5184526122909D+02-0.5184338417356D+02-0.5184148429039D+02-0.5183956130079D+02 +-0.5183761492255D+02-0.5183564486998D+02-0.5183365085389D+02-0.5183163258155D+02 +-0.5182958975660D+02-0.5182752207907D+02-0.5182542924529D+02-0.5182331094785D+02 +-0.5182116687559D+02-0.5181899671350D+02-0.5181680014270D+02-0.5181457684041D+02 +-0.5181232647986D+02-0.5181004873028D+02-0.5180774325683D+02-0.5180540972054D+02 +-0.5180304777830D+02-0.5180065708277D+02-0.5179823728232D+02-0.5179578802103D+02 +-0.5179330893860D+02-0.5179079967027D+02-0.5178825984684D+02-0.5178568909453D+02 +-0.5178308703501D+02-0.5178045328526D+02-0.5177778745757D+02-0.5177508915948D+02 +-0.5177235799366D+02-0.5176959355795D+02-0.5176679544522D+02-0.5176396324334D+02 +-0.5176109653512D+02-0.5175819489823D+02-0.5175525790517D+02-0.5175228512318D+02 +-0.5174927611419D+02-0.5174623043474D+02-0.5174314763592D+02-0.5174002726332D+02 +-0.5173686885694D+02-0.5173367195115D+02-0.5173043607457D+02-0.5172716075006D+02 +-0.5172384549462D+02-0.5172048981932D+02-0.5171709322923D+02-0.5171365522335D+02 +-0.5171017529452D+02-0.5170665292940D+02-0.5170308760833D+02-0.5169947880525D+02 +-0.5169582598771D+02-0.5169212861671D+02-0.5168838614662D+02-0.5168459802518D+02 +-0.5168076369333D+02-0.5167688258518D+02-0.5167295412791D+02-0.5166897774168D+02 +-0.5166495283960D+02-0.5166087882755D+02-0.5165675510418D+02-0.5165258106080D+02 +-0.5164835608125D+02-0.5164407954186D+02-0.5163975081138D+02-0.5163536925080D+02 +-0.5163093421337D+02-0.5162644504442D+02-0.5162190108131D+02-0.5161730165335D+02 +-0.5161264608164D+02-0.5160793367906D+02-0.5160316375011D+02-0.5159833559084D+02 +-0.5159344848875D+02-0.5158850172268D+02-0.5158349456272D+02-0.5157842627009D+02 +-0.5157329609709D+02-0.5156810328692D+02-0.5156284707365D+02-0.5155752668206D+02 +-0.5155214132756D+02-0.5154669021608D+02-0.5154117254396D+02-0.5153558749786D+02 +-0.5152993425461D+02-0.5152421198113D+02-0.5151841983433D+02-0.5151255696093D+02 +-0.5150662249744D+02-0.5150061557002D+02-0.5149453529428D+02-0.5148838077528D+02 +-0.5148215110737D+02-0.5147584537403D+02-0.5146946264782D+02-0.5146300199022D+02 +-0.5145646245151D+02-0.5144984307067D+02-0.5144314287525D+02-0.5143636088122D+02 +-0.5142949609291D+02-0.5142254750281D+02-0.5141551409151D+02-0.5140839482753D+02 +-0.5140118866721D+02-0.5139389455459D+02-0.5138651142128D+02-0.5137903818632D+02 +-0.5137147375605D+02-0.5136381702401D+02-0.5135606687078D+02-0.5134822216388D+02 +-0.5134028175756D+02-0.5133224449278D+02-0.5132410919702D+02-0.5131587468413D+02 +-0.5130753975423D+02-0.5129910319357D+02-0.5129056377438D+02-0.5128192025477D+02 +-0.5127317137854D+02-0.5126431587514D+02-0.5125535245940D+02-0.5124627983153D+02 +-0.5123709667690D+02-0.5122780166596D+02-0.5121839345403D+02-0.5120887068125D+02 +-0.5119923197240D+02-0.5118947593678D+02-0.5117960116805D+02-0.5116960624416D+02 +-0.5115948972712D+02-0.5114925016296D+02-0.5113888608154D+02-0.5112839599644D+02 +-0.5111777840483D+02-0.5110703178733D+02-0.5109615460788D+02-0.5108514531363D+02 +-0.5107400233480D+02-0.5106272408452D+02-0.5105130895877D+02-0.5103975533619D+02 +-0.5102806157801D+02-0.5101622602790D+02-0.5100424701185D+02-0.5099212283803D+02 +-0.5097985179674D+02-0.5096743216021D+02-0.5095486218256D+02-0.5094214009961D+02 +-0.5092926412887D+02-0.5091623246932D+02-0.5090304330139D+02-0.5088969478681D+02 +-0.5087618506855D+02-0.5086251227064D+02-0.5084867449820D+02-0.5083466983722D+02 +-0.5082049635455D+02-0.5080615209778D+02-0.5079163509518D+02-0.5077694335558D+02 +-0.5076207486834D+02-0.5074702760324D+02-0.5073179951042D+02-0.5071638852033D+02 +-0.5070079254364D+02-0.5068500947122D+02-0.5066903717403D+02-0.5065287350315D+02 +-0.5063651628963D+02-0.5061996334457D+02-0.5060321245898D+02-0.5058626140382D+02 +-0.5056910792994D+02-0.5055174976809D+02-0.5053418462884D+02-0.5051641020267D+02 +-0.5049842415989D+02-0.5048022415067D+02-0.5046180780505D+02-0.5044317273295D+02 +-0.5042431652422D+02-0.5040523674861D+02-0.5038593095586D+02-0.5036639667573D+02 +-0.5034663141803D+02-0.5032663267268D+02-0.5030639790981D+02-0.5028592457977D+02 +-0.5026521011328D+02-0.5024425192145D+02-0.5022304739591D+02-0.5020159390892D+02 +-0.5017988881346D+02-0.5015792944334D+02-0.5013571311336D+02-0.5011323711944D+02 +-0.5009049873873D+02-0.5006749522980D+02-0.5004422383280D+02-0.5002068176959D+02 +-0.4999686624397D+02-0.4997277444186D+02-0.4994840353146D+02-0.4992375066350D+02 +-0.4989881297144D+02-0.4987358757171D+02-0.4984807156389D+02-0.4982226203106D+02 +-0.4979615603991D+02-0.4976975064117D+02-0.4974304286974D+02-0.4971602974502D+02 +-0.4968870827126D+02-0.4966107543776D+02-0.4963312821924D+02-0.4960486357616D+02 +-0.4957627845502D+02-0.4954736978871D+02-0.4951813449683D+02-0.4948856948612D+02 +-0.4945867165071D+02-0.4942843787257D+02-0.4939786502185D+02-0.4936694995729D+02 +-0.4933568952659D+02-0.4930408056681D+02-0.4927211990478D+02-0.4923980435752D+02 +-0.4920713073265D+02-0.4917409582880D+02-0.4914069643607D+02-0.4910692933642D+02 +-0.4907279130416D+02-0.4903827910633D+02-0.4900338950319D+02-0.4896811924867D+02 +-0.4893246509079D+02-0.4889642377211D+02-0.4885999203021D+02-0.4882316659813D+02 +-0.4878594420482D+02-0.4874832157556D+02-0.4871029543247D+02-0.4867186249491D+02 +-0.4863301947995D+02-0.4859376310277D+02-0.4855409007715D+02-0.4851399711583D+02 +-0.4847348093100D+02-0.4843253823466D+02-0.4839116573905D+02-0.4834936015704D+02 +-0.4830711820251D+02-0.4826443659074D+02-0.4822131203876D+02-0.4817774126566D+02 +-0.4813372099301D+02-0.4808924794511D+02-0.4804431884930D+02-0.4799893043625D+02 +-0.4795307944023D+02-0.4790676259938D+02-0.4785997665588D+02-0.4781271835619D+02 +-0.4776498445124D+02-0.4771677169657D+02-0.4766807685247D+02-0.4761889668409D+02 +-0.4756922796153D+02-0.4751906745988D+02-0.4746841195927D+02-0.4741725824487D+02 +-0.4736560310686D+02-0.4731344334036D+02-0.4726077574537D+02-0.4720759712663D+02 +-0.4715390429349D+02-0.4709969405976D+02-0.4704496324345D+02-0.4698970866656D+02 +-0.4693392715482D+02-0.4687761553742D+02-0.4682077064661D+02-0.4676338931742D+02 +-0.4670546838725D+02-0.4664700469545D+02-0.4658799508292D+02-0.4652843639162D+02 +-0.4646832546412D+02-0.4640765914308D+02-0.4634643427075D+02-0.4628464768840D+02 +-0.4622229623583D+02-0.4615937675077D+02-0.4609588606835D+02-0.4603182102046D+02 +-0.4596717843531D+02-0.4590195513672D+02-0.4583614794369D+02-0.4576975366979D+02 +-0.4570276912265D+02-0.4563519110351D+02-0.4556701640665D+02-0.4549824181908D+02 +-0.4542886412007D+02-0.4535888008084D+02-0.4528828646428D+02-0.4521708002473D+02 +-0.4514525750785D+02-0.4507281565054D+02-0.4499975118097D+02-0.4492606081870D+02 +-0.4485174127497D+02-0.4477678925295D+02-0.4470120144833D+02-0.4462497454985D+02 +-0.4454810524011D+02-0.4447059019649D+02-0.4439242609219D+02-0.4431360959758D+02 +-0.4423413738159D+02-0.4415400611337D+02-0.4407321246418D+02-0.4399175310947D+02 +-0.4390962473114D+02-0.4382682402010D+02-0.4374334767908D+02-0.4365919242563D+02 +-0.4357435499539D+02-0.4348883214570D+02-0.4340262065933D+02-0.4331571734857D+02 +-0.4322811905962D+02-0.4313982267710D+02-0.4305082512897D+02-0.4296112339160D+02 +-0.4287071449512D+02-0.4277959552900D+02-0.4268776364786D+02-0.4259521607738D+02 +-0.4250195012053D+02-0.4240796316384D+02-0.4231325268378D+02-0.4221781625326D+02 +-0.4212165154821D+02-0.4202475635403D+02-0.4192712857207D+02-0.4182876622603D+02 +-0.4172966746809D+02-0.4162983058491D+02-0.4152925400326D+02-0.4142793629535D+02 +-0.4132587618362D+02-0.4122307254514D+02-0.4111952441526D+02-0.4101523099069D+02 +-0.4091019163177D+02-0.4080440586392D+02-0.4069787337814D+02-0.4059059403052D+02 +-0.4048256784069D+02-0.4037379498919D+02-0.4026427581359D+02-0.4015401080347D+02 +-0.4004300059408D+02-0.3993124595881D+02-0.3981874780047D+02-0.3970550714118D+02 +-0.3959152511128D+02-0.3947680293704D+02-0.3936134192738D+02-0.3924514345974D+02 +-0.3912820896514D+02-0.3901053991273D+02-0.3889213779388D+02-0.3877300410616D+02 +-0.3865314033730D+02-0.3853254794941D+02-0.3841122836384D+02-0.3828918294671D+02 +-0.3816641299561D+02-0.3804291972752D+02-0.3791870426838D+02-0.3779376764439D+02 +-0.3766811077544D+02-0.3754173447071D+02-0.3741463942662D+02-0.3728682622747D+02 +-0.3715829534855D+02-0.3702904716206D+02-0.3689908194568D+02-0.3676839989389D+02 +-0.3663700113198D+02-0.3650488573242D+02-0.3637205373385D+02-0.3623850516215D+02 +-0.3610424005352D+02-0.3596925847947D+02-0.3583356057318D+02-0.3569714655716D+02 +-0.3556001677183D+02-0.3542217170480D+02-0.3528361202035D+02-0.3514433858906D+02 +-0.3500435251706D+02-0.3486365517474D+02-0.3472224822457D+02-0.3458013364781D+02 +-0.3443731376977D+02-0.3429379128348D+02-0.3414956927154D+02-0.3400465122587D+02 +-0.3385904106531D+02-0.3371274315081D+02-0.3356576229817D+02-0.3341810378823D+02 +-0.3326977337430D+02-0.3312077728689D+02-0.3297112223571D+02-0.3282081540879D+02 +-0.3266986446883D+02-0.3251827754673D+02-0.3236606323235D+02-0.3221323056253D+02 +-0.3205978900636D+02-0.3190574844798D+02-0.3175111916665D+02-0.3159591181450D+02 +-0.3144013739192D+02-0.3128380722060D+02-0.3112693291460D+02-0.3096952634939D+02 +-0.3081159962896D+02-0.3065316505139D+02-0.3049423507279D+02-0.3033482226994D+02 +-0.3017493930171D+02-0.3001459886954D+02-0.2985381367711D+02-0.2969259638940D+02 +-0.2953095959141D+02-0.2936891574677D+02-0.2920647715631D+02-0.2904365591713D+02 +-0.2888046388202D+02-0.2871691261992D+02-0.2855301337730D+02-0.2838877704096D+02 +-0.2822421410237D+02-0.2805933462405D+02-0.2789414820796D+02-0.2772866396645D+02 +-0.2756289049588D+02-0.2739683585338D+02-0.2723050753680D+02-0.2706391246838D+02 +-0.2689705698223D+02-0.2672994681603D+02-0.2656258710714D+02-0.2639498239345D+02 +-0.2622713661917D+02-0.2605905314574D+02-0.2589073476829D+02-0.2572218373759D+02 +-0.2555340178776D+02-0.2538439017000D+02-0.2521514969218D+02-0.2504568076457D+02 +-0.2487598345161D+02-0.2470605752972D+02-0.2453590255090D+02-0.2436551791213D+02 +-0.2419490293015D+02-0.2402405692122D+02-0.2385297928550D+02-0.2368166959536D+02 +-0.2351012768684D+02-0.2333835375355D+02-0.2316634844181D+02-0.2299411294593D+02 +-0.2282164910224D+02-0.2264895948042D+02-0.2247604747020D+02-0.2230291736187D+02 +-0.2212957441833D+02-0.2195602493665D+02-0.2178227629680D+02-0.2160833699531D+02 +-0.2143421666157D+02-0.2125992605447D+02-0.2108547703736D+02-0.2091088252957D+02 +-0.2073615643311D+02-0.2056131353347D+02-0.2038636937454D+02-0.2021134010787D+02 +-0.2003624231780D+02-0.1986109282464D+02-0.1968590846923D+02-0.1951070588338D+02 +-0.1933550125113D+02-0.1916031006739D+02-0.1898514690054D+02-0.1881002516654D+02 +-0.1863495692195D+02-0.1845995268332D+02-0.1828502127992D+02-0.1811016974578D+02 +-0.1793540325598D+02-0.1776072511080D+02-0.1758613676940D+02-0.1741163793327D+02 +-0.1723722667775D+02-0.1706289962834D+02-0.1688865217702D+02-0.1671447873257D+02 +-0.1654037299789D+02-0.1636632826691D+02-0.1619233773325D+02-0.1601839480315D+02 +-0.1584449340510D+02-0.1567062828984D+02-0.1549679531468D+02-0.1532299170720D+02 +-0.1514921630451D+02-0.1497546976480D+02-0.1480175474939D+02-0.1462807607400D+02 +-0.1445444082871D+02-0.1428085846710D+02-0.1410734086517D+02-0.1393390235146D+02 +-0.1376055970989D+02-0.1358733215727D+02-0.1341424129731D+02-0.1324131105355D+02 +-0.1306856758305D+02-0.1289603917318D+02-0.1272375612351D+02-0.1255175061484D+02 +-0.1238005656736D+02-0.1220870948967D+02-0.1203774632043D+02-0.1186720526422D+02 +-0.1169712562320D+02-0.1152754762583D+02-0.1135851225403D+02-0.1119006106993D+02 +-0.1102223604329D+02-0.1085507938069D+02-0.1068863335731D+02-0.1052294015218D+02 +-0.1035804168776D+02-0.1019397947446D+02-0.1003079446077D+02-0.9868526889628D+01 +-0.9707216161554D+01-0.9546900704939D+01-0.9387617854023D+01-0.9229403734858D+01 +-0.9072293159592D+01-0.8916319529363D+01-0.8761514745993D+01-0.8607909132693D+01 +-0.8455531363896D+01-0.8304408404305D+01-0.8154565457227D+01-0.8006025922166D+01 +-0.7858811361682D+01-0.7712941477416D+01-0.7568434095199D+01-0.7425305159081D+01 +-0.7283568734134D+01-0.7143237017788D+01-0.7004320359504D+01-0.6866827288485D+01 +-0.6730764549154D+01-0.6596137144079D+01-0.6462948384000D+01-0.6331199944618D+01 +-0.6200891929738D+01-0.6072022940407D+01-0.5944590149603D+01-0.5818589382077D+01 +-0.5694015198898D+01-0.5570860986265D+01-0.5449119048124D+01-0.5328780702141D+01 +-0.5209836378552D+01-0.5092275721431D+01-0.4976087691897D+01-0.4861260672787D+01 +-0.4747782574321D+01-0.4635640940271D+01-0.4524823054180D+01-0.4415316045125D+01 +-0.4307106992579D+01-0.4200183029885D+01-0.4094531445869D+01-0.3990139784139D+01 +-0.3886995939600D+01-0.3785088251726D+01-0.3684405594148D+01-0.3584937460106D+01 +-0.3486674043348D+01-0.3389606314047D+01-0.3293726089348D+01-0.3199026098161D+01 +-0.3105500039868D+01-0.3013142636618D+01-0.2921949678952D+01-0.2831918064533D+01 +-0.2743045829849D+01-0.2655332174788D+01-0.2568777480092D+01-0.2483383317815D+01 +-0.2399152454962D+01-0.2316088850658D+01-0.2234197647300D+01-0.2153485156272D+01 +-0.2073958838965D+01-0.1995627283965D+01-0.1918500181413D+01-0.1842588295670D+01 +-0.1767903437522D+01-0.1694458437274D+01-0.1622267120110D+01-0.1551344285168D+01 +-0.1481705689753D+01-0.1413368040087D+01-0.1346348989896D+01-0.1280667148051D+01 +-0.1216342096293D+01-0.1153394417906D+01-0.1091845737986D+01-0.1031718775725D+01 +-0.9730374088849D+00-0.9158267504133D+00-0.8601132368937D+00-0.8059247283301D+00 +-0.7532906185600D+00-0.7022419554295D+00-0.6528115697324D+00-0.6050342118170D+00 +-0.5589466947046D+00-0.5145880425354D+00-0.4719996431596D+00-0.4312254037239D+00 +-0.3923119081554D+00-0.3553085755132D+00-0.3202678182603D+00-0.2872451996103D+00 +-0.2562993012896D+00 + 0.0000000000000D+00 + 1012 0.5229258479779D+01 + 0.2150742905406D-04 0.2201934401975D-04 0.2254344131081D-04 0.2308001074793D-04 + 0.2362934904336D-04 0.2419175996469D-04 0.2476755450247D-04 0.2535705104185D-04 + 0.2596057553829D-04 0.2657846169737D-04 0.2721105115901D-04 0.2785869368592D-04 + 0.2852174735659D-04 0.2920057876285D-04 0.2989556321214D-04 0.3060708493450D-04 + 0.3133553729459D-04 0.3208132300862D-04 0.3284485436652D-04 0.3362655345933D-04 + 0.3442685241199D-04 0.3524619362168D-04 0.3608503000175D-04 0.3694382523153D-04 + 0.3782305401197D-04 0.3872320232740D-04 0.3964476771351D-04 0.4058825953159D-04 + 0.4155419924941D-04 0.4254312072866D-04 0.4355557051923D-04 0.4459210816046D-04 + 0.4565330648961D-04 0.4673975195749D-04 0.4785204495171D-04 0.4899080012754D-04 + 0.5015664674660D-04 0.5135022902361D-04 0.5257220648130D-04 0.5382325431382D-04 + 0.5510406375867D-04 0.5641534247751D-04 0.5775781494596D-04 0.5913222285265D-04 + 0.6053932550771D-04 0.6197990026094D-04 0.6345474292991D-04 0.6496466823815D-04 + 0.6651051026378D-04 0.6809312289875D-04 0.6971338031887D-04 0.7137217746513D-04 + 0.7307043053626D-04 0.7480907749308D-04 0.7658907857468D-04 0.7841141682692D-04 + 0.8027709864336D-04 0.8218715431905D-04 0.8414263861740D-04 0.8614463135050D-04 + 0.8819423797310D-04 0.9029259019072D-04 0.9244084658213D-04 0.9464019323656D-04 + 0.9689184440594D-04 0.9919704317265D-04 0.1015570621330D-03 0.1039732040969D-03 + 0.1064468028041D-03 0.1089792236573D-03 0.1115718644728D-03 0.1142261562483D-03 + 0.1169435639500D-03 0.1197255873171D-03 0.1225737616857D-03 0.1254896588328D-03 + 0.1284748878395D-03 0.1315310959746D-03 0.1346599695998D-03 0.1378632350954D-03 + 0.1411426598085D-03 0.1445000530233D-03 0.1479372669546D-03 0.1514561977641D-03 + 0.1550587866019D-03 0.1587470206711D-03 0.1625229343189D-03 0.1663886101524D-03 + 0.1703461801815D-03 0.1743978269887D-03 0.1785457849256D-03 0.1827923413391D-03 + 0.1871398378251D-03 0.1915906715131D-03 0.1961472963799D-03 0.2008122245952D-03 + 0.2055880278984D-03 0.2104773390081D-03 0.2154828530649D-03 0.2206073291079D-03 + 0.2258535915864D-03 0.2312245319072D-03 0.2367231100177D-03 0.2423523560273D-03 + 0.2481153718665D-03 0.2540153329849D-03 0.2600554900897D-03 0.2662391709247D-03 + 0.2725697820915D-03 0.2790508109132D-03 0.2856858273428D-03 0.2924784859153D-03 + 0.2994325277470D-03 0.3065517825810D-03 0.3138401708812D-03 0.3213017059753D-03 + 0.3289404962488D-03 0.3367607473897D-03 0.3447667646870D-03 0.3529629553823D-03 + 0.3613538310777D-03 0.3699440101989D-03 0.3787382205180D-03 0.3877413017338D-03 + 0.3969582081140D-03 0.4063940111991D-03 0.4160539025692D-03 0.4259431966769D-03 + 0.4360673337456D-03 0.4464318827368D-03 0.4570425443864D-03 0.4679051543124D-03 + 0.4790256861959D-03 0.4904102550358D-03 0.5020651204812D-03 0.5139966902408D-03 + 0.5262115235724D-03 0.5387163348549D-03 0.5515179972435D-03 0.5646235464104D-03 + 0.5780401843732D-03 0.5917752834137D-03 0.6058363900874D-03 0.6202312293275D-03 + 0.6349677086450D-03 0.6500539224267D-03 0.6654981563344D-03 0.6813088918062D-03 + 0.6974948106637D-03 0.7140647998269D-03 0.7310279561389D-03 0.7483935913040D-03 + 0.7661712369406D-03 0.7843706497523D-03 0.8030018168203D-03 0.8220749610184D-03 + 0.8416005465556D-03 0.8615892846469D-03 0.8820521393172D-03 0.9030003333406D-03 + 0.9244453543176D-03 0.9463989608946D-03 0.9688731891282D-03 0.9918803589975D-03 + 0.1015433081069D-02 0.1039544263315D-02 0.1064227118095D-02 0.1089495169290D-02 + 0.1115362259619D-02 0.1141842558105D-02 0.1168950567737D-02 0.1196701133289D-02 + 0.1225109449338D-02 0.1254191068456D-02 0.1283961909601D-02 0.1314438266696D-02 + 0.1345636817413D-02 0.1377574632157D-02 0.1410269183260D-02 0.1443738354387D-02 + 0.1478000450161D-02 0.1513074206015D-02 0.1548978798262D-02 0.1585733854409D-02 + 0.1623359463706D-02 0.1661876187936D-02 0.1701305072458D-02 0.1741667657505D-02 + 0.1782985989747D-02 0.1825282634108D-02 0.1868580685877D-02 0.1912903783076D-02 + 0.1958276119133D-02 0.2004722455835D-02 0.2052268136585D-02 0.2100939099962D-02 + 0.2150761893598D-02 0.2201763688371D-02 0.2253972292925D-02 0.2307416168524D-02 + 0.2362124444253D-02 0.2418126932561D-02 0.2475454145167D-02 0.2534137309329D-02 + 0.2594208384486D-02 0.2655700079287D-02 0.2718645869002D-02 0.2783080013344D-02 + 0.2849037574687D-02 0.2916554436715D-02 0.2985667323484D-02 0.3056413818931D-02 + 0.3128832386828D-02 0.3202962391187D-02 0.3278844117136D-02 0.3356518792272D-02 + 0.3436028608501D-02 0.3517416744371D-02 0.3600727387929D-02 0.3686005760082D-02 + 0.3773298138499D-02 0.3862651882061D-02 0.3954115455860D-02 0.4047738456768D-02 + 0.4143571639594D-02 0.4241666943825D-02 0.4342077520985D-02 0.4444857762604D-02 + 0.4550063328833D-02 0.4657751177697D-02 0.4767979595018D-02 0.4880808225009D-02 + 0.4996298101570D-02 0.5114511680279D-02 0.5235512871115D-02 0.5359367071918D-02 + 0.5486141202598D-02 0.5615903740128D-02 0.5748724754308D-02 0.5884675944352D-02 + 0.6023830676284D-02 0.6166264021183D-02 0.6312052794284D-02 0.6461275594959D-02 + 0.6614012847588D-02 0.6770346843357D-02 0.6930361782982D-02 0.7094143820394D-02 + 0.7261781107400D-02 0.7433363839342D-02 0.7608984301773D-02 0.7788736918176D-02 + 0.7972718298747D-02 0.8161027290261D-02 0.8353765027049D-02 0.8551034983111D-02 + 0.8752943025377D-02 0.8959597468160D-02 0.9171109128811D-02 0.9387591384603D-02 + 0.9609160230877D-02 0.9835934340477D-02 0.1006803512449D-01 0.1030558679431D-01 + 0.1054871642512D-01 0.1079755402073D-01 0.1105223257982D-01 0.1131288816368D-01 + 0.1157965996544D-01 0.1185269038080D-01 0.1213212508026D-01 0.1241811308303D-01 + 0.1271080683248D-01 0.1301036227325D-01 0.1331693893004D-01 0.1363069998813D-01 + 0.1395181237567D-01 0.1428044684765D-01 0.1461677807184D-01 0.1496098471648D-01 + 0.1531324953990D-01 0.1567375948211D-01 0.1604270575828D-01 0.1642028395434D-01 + 0.1680669412453D-01 0.1720214089116D-01 0.1760683354637D-01 0.1802098615621D-01 + 0.1844481766683D-01 0.1887855201303D-01 0.1932241822902D-01 0.1977665056168D-01 + 0.2024148858606D-01 0.2071717732349D-01 0.2120396736203D-01 0.2170211497964D-01 + 0.2221188226980D-01 0.2273353726988D-01 0.2326735409215D-01 0.2381361305754D-01 + 0.2437260083229D-01 0.2494461056731D-01 0.2552994204062D-01 0.2612890180262D-01 + 0.2674180332442D-01 0.2736896714935D-01 0.2801072104743D-01 0.2866740017320D-01 + 0.2933934722669D-01 0.3002691261781D-01 0.3073045463399D-01 0.3145033961141D-01 + 0.3218694210958D-01 0.3294064508962D-01 0.3371184009606D-01 0.3450092744243D-01 + 0.3530831640054D-01 0.3613442539362D-01 0.3697968219334D-01 0.3784452412086D-01 + 0.3872939825181D-01 0.3963476162544D-01 0.4056108145796D-01 0.4150883536008D-01 + 0.4247851155891D-01 0.4347060912422D-01 0.4448563819924D-01 0.4552412023590D-01 + 0.4658658823475D-01 0.4767358698962D-01 0.4878567333696D-01 0.4992341641008D-01 + 0.5108739789835D-01 0.5227821231135D-01 0.5349646724813D-01 0.5474278367169D-01 + 0.5601779618862D-01 0.5732215333417D-01 0.5865651786266D-01 0.6002156704340D-01 + 0.6141799296226D-01 0.6284650282880D-01 0.6430781928923D-01 0.6580268074515D-01 + 0.6733184167825D-01 0.6889607298100D-01 0.7049616229337D-01 0.7213291434581D-01 + 0.7380715130845D-01 0.7551971314661D-01 0.7727145798277D-01 0.7906326246509D-01 + 0.8089602214242D-01 0.8277065184608D-01 0.8468808607842D-01 0.8664927940812D-01 + 0.8865520687255D-01 0.9070686438707D-01 0.9280526916144D-01 0.9495146012343D-01 + 0.9714649834967D-01 0.9939146750384D-01 0.1016874742823D+00 0.1040356488672D+00 + 0.1064371453872D+00 0.1088931423856D+00 0.1114048432967D+00 0.1139734769295D+00 + 0.1166002979593D+00 0.1192865874273D+00 0.1220336532487D+00 0.1248428307276D+00 + 0.1277154830815D+00 0.1306530019730D+00 0.1336568080498D+00 0.1367283514936D+00 + 0.1398691125766D+00 0.1430806022269D+00 0.1463643626021D+00 0.1497219676713D+00 + 0.1531550238057D+00 0.1566651703780D+00 0.1602540803695D+00 0.1639234609870D+00 + 0.1676750542871D+00 0.1715106378098D+00 0.1754320252209D+00 0.1794410669619D+00 + 0.1835396509100D+00 0.1877297030455D+00 0.1920131881282D+00 0.1963921103827D+00 + 0.2008685141914D+00 0.2054444847966D+00 0.2101221490109D+00 0.2149036759359D+00 + 0.2197912776889D+00 0.2247872101386D+00 0.2298937736476D+00 0.2351133138248D+00 + 0.2404482222837D+00 0.2459009374100D+00 0.2514739451362D+00 0.2571697797240D+00 + 0.2629910245536D+00 0.2689403129212D+00 0.2750203288421D+00 0.2812338078623D+00 + 0.2875835378751D+00 0.2940723599454D+00 0.3007031691395D+00 0.3074789153608D+00 + 0.3144026041916D+00 0.3214772977396D+00 0.3287061154899D+00 0.3360922351618D+00 + 0.3436388935694D+00 0.3513493874868D+00 0.3592270745164D+00 0.3672753739607D+00 + 0.3754977676972D+00 0.3838978010545D+00 0.3924790836915D+00 0.4012452904770D+00 + 0.4102001623706D+00 0.4193475073036D+00 0.4286912010595D+00 0.4382351881538D+00 + 0.4479834827120D+00 0.4579401693452D+00 0.4681094040228D+00 0.4784954149418D+00 + 0.4891025033910D+00 0.4999350446102D+00 0.5109974886435D+00 0.5222943611853D+00 + 0.5338302644183D+00 0.5456098778426D+00 0.5576379590956D+00 0.5699193447601D+00 + 0.5824589511607D+00 0.5952617751475D+00 0.6083328948654D+00 0.6216774705074D+00 + 0.6353007450521D+00 0.6492080449824D+00 0.6634047809857D+00 0.6778964486325D+00 + 0.6926886290333D+00 0.7077869894721D+00 0.7231972840138D+00 0.7389253540860D+00 + 0.7549771290311D+00 0.7713586266289D+00 0.7880759535873D+00 0.8051353059985D+00 + 0.8225429697604D+00 0.8403053209599D+00 0.8584288262158D+00 0.8769200429817D+00 + 0.8957856198031D+00 0.9150322965294D+00 0.9346669044774D+00 0.9546963665439D+00 + 0.9751276972649D+00 0.9959680028197D+00 0.1017224480976D+01 0.1038904420974D+01 + 0.1061015203349D+01 0.1083564299686D+01 0.1106559272300D+01 0.1130007773859D+01 + 0.1153917546912D+01 0.1178296423354D+01 0.1203152323804D+01 0.1228493256899D+01 + 0.1254327318495D+01 0.1280662690787D+01 0.1307507641324D+01 0.1334870521934D+01 + 0.1362759767535D+01 0.1391183894856D+01 0.1420151501035D+01 0.1449671262109D+01 + 0.1479751931386D+01 0.1510402337698D+01 0.1541631383520D+01 0.1573448042969D+01 + 0.1605861359662D+01 0.1638880444440D+01 0.1672514472946D+01 0.1706772683055D+01 + 0.1741664372155D+01 0.1777198894269D+01 0.1813385657016D+01 0.1850234118409D+01 + 0.1887753783475D+01 0.1925954200705D+01 0.1964844958324D+01 0.2004435680370D+01 + 0.2044736022586D+01 0.2085755668115D+01 0.2127504322996D+01 0.2169991711448D+01 + 0.2213227570952D+01 0.2257221647108D+01 0.2301983688271D+01 0.2347523439972D+01 + 0.2393850639086D+01 0.2440975007782D+01 0.2488906247220D+01 0.2537654031002D+01 + 0.2587227998372D+01 0.2637637747157D+01 0.2688892826442D+01 0.2741002728983D+01 + 0.2793976883341D+01 0.2847824645743D+01 0.2902555291652D+01 0.2958178007063D+01 + 0.3014701879494D+01 0.3072135888684D+01 0.3130488897001D+01 0.3189769639525D+01 + 0.3249986713841D+01 0.3311148569513D+01 0.3373263497233D+01 0.3436339617667D+01 + 0.3500384869964D+01 0.3565406999951D+01 0.3631413547991D+01 0.3698411836514D+01 + 0.3766408957221D+01 0.3835411757947D+01 0.3905426829193D+01 0.3976460490322D+01 + 0.4048518775419D+01 0.4121607418815D+01 0.4195731840277D+01 0.4270897129857D+01 + 0.4347108032420D+01 0.4424368931831D+01 0.4502683834816D+01 0.4582056354503D+01 + 0.4662489693636D+01 0.4743986627475D+01 0.4826549486387D+01 0.4910180138127D+01 + 0.4994879969825D+01 0.5080649869681D+01 0.5167490208373D+01 0.5255400820202D+01 + 0.5344380983962D+01 0.5434429403565D+01 0.5525544188426D+01 0.5617722833617D+01 + 0.5710962199815D+01 0.5805258493041D+01 0.5900607244231D+01 0.5997003288635D+01 + 0.6094440745069D+01 0.6192912995049D+01 0.6292412661814D+01 0.6392931589269D+01 + 0.6494460820874D+01 0.6596990578488D+01 0.6700510241224D+01 0.6805008324307D+01 + 0.6910472457995D+01 0.7016889366579D+01 0.7124244847491D+01 0.7232523750568D+01 + 0.7341709957494D+01 0.7451786361463D+01 0.7562734847107D+01 0.7674536270712D+01 + 0.7787170440791D+01 0.7900616099026D+01 0.8014850901658D+01 0.8129851401340D+01 + 0.8245593029526D+01 0.8362050079436D+01 0.8479195689649D+01 0.8597001828383D+01 + 0.8715439278509D+01 0.8834477623371D+01 0.8954085233454D+01 0.9074229253973D+01 + 0.9194875593440D+01 0.9315988913276D+01 0.9437532618530D+01 0.9559468849772D+01 + 0.9681758476237D+01 0.9804361090277D+01 0.9927235003199D+01 0.1005033724256D+02 + 0.1017362355101D+02 0.1029704838669D+02 0.1042056492540D+02 0.1054412506444D+02 + 0.1066767942831D+02 0.1079117737637D+02 0.1091456701244D+02 0.1103779519646D+02 + 0.1116080755839D+02 0.1128354851420D+02 0.1140596128432D+02 0.1152798791434D+02 + 0.1164956929827D+02 0.1177064520433D+02 0.1189115430327D+02 0.1201103419951D+02 + 0.1213022146500D+02 0.1224865167586D+02 0.1236625945201D+02 0.1248297849976D+02 + 0.1259874165744D+02 0.1271348094411D+02 0.1282712761148D+02 0.1293961219902D+02 + 0.1305086459240D+02 0.1316081408518D+02 0.1326938944391D+02 0.1337651897664D+02 + 0.1348213060491D+02 0.1358615193909D+02 0.1368851035736D+02 0.1378913308811D+02 + 0.1388794729589D+02 0.1398488017086D+02 0.1407985902179D+02 0.1417281137257D+02 + 0.1426366506212D+02 0.1435234834789D+02 0.1443879001264D+02 0.1452291947466D+02 + 0.1460466690129D+02 0.1468396332564D+02 0.1476074076649D+02 0.1483493235126D+02 + 0.1490647244192D+02 0.1497529676373D+02 0.1504134253675D+02 0.1510454860984D+02 + 0.1516485559720D+02 0.1522220601698D+02 0.1527654443219D+02 0.1532781759325D+02 + 0.1537597458241D+02 0.1542096695946D+02 0.1546274890874D+02 0.1550127738702D+02 + 0.1553651227211D+02 0.1556841651189D+02 0.1559695627334D+02 0.1562210109145D+02 + 0.1564382401753D+02 0.1566210176664D+02 0.1567691486377D+02 0.1568824778841D+02 + 0.1569608911712D+02 0.1570043166360D+02 0.1570127261607D+02 0.1569861367129D+02 + 0.1569246116496D+02 0.1568282619787D+02 0.1566972475757D+02 0.1565317783486D+02 + 0.1563321153475D+02 0.1560985718135D+02 0.1558315141624D+02 0.1555313628970D+02 + 0.1551985934445D+02 0.1548337369123D+02 0.1544373807583D+02 0.1540101693692D+02 + 0.1535528045436D+02 0.1530660458716D+02 0.1525507110098D+02 0.1520076758423D+02 + 0.1514378745267D+02 0.1508422994170D+02 0.1502220008605D+02 0.1495780868635D+02 + 0.1489117226206D+02 0.1482241299046D+02 0.1475165863115D+02 0.1467904243575D+02 + 0.1460470304238D+02 0.1452878435463D+02 0.1445143540465D+02 0.1437281020013D+02 + 0.1429306755483D+02 0.1421237090260D+02 0.1413088809452D+02 0.1404879117925D+02 + 0.1396625616625D+02 0.1388346277207D+02 0.1380059414952D+02 0.1371783659988D+02 + 0.1363537926825D+02 0.1355341382212D+02 0.1347213411351D+02 0.1339173582480D+02 + 0.1331241609871D+02 0.1323437315279D+02 0.1315780587881D+02 0.1308291342766D+02 + 0.1300989478035D+02 0.1293894830568D+02 0.1287027130535D+02 0.1280405954732D+02 + 0.1274050678825D+02 0.1267980428593D+02 0.1262214030269D+02 0.1256769960087D+02 + 0.1251666293145D+02 0.1246920651702D+02 0.1242550153038D+02 0.1238571356999D+02 + 0.1235000213372D+02 0.1231852009235D+02 0.1229141316414D+02 0.1226881939222D+02 + 0.1225086862623D+02 0.1223768200985D+02 0.1222937147599D+02 0.1222603925117D+02 + 0.1222777737106D+02 0.1223466720868D+02 0.1224677901729D+02 0.1226417148958D+02 + 0.1228689133517D+02 0.1231497287802D+02 0.1234843767581D+02 0.1238729416297D+02 + 0.1243153731911D+02 0.1248114836487D+02 0.1253609448665D+02 0.1259632859227D+02 + 0.1266178909890D+02 0.1273239975523D+02 0.1280806949923D+02 0.1288869235315D+02 + 0.1297414735711D+02 0.1306429854274D+02 0.1315899494816D+02 0.1325807067533D+02 + 0.1336134499111D+02 0.1346862247282D+02 0.1357969319917D+02 0.1369433298744D+02 + 0.1381230367740D+02 0.1393335346243D+02 0.1405721726828D+02 0.1418361717951D+02 + 0.1431226291376D+02 0.1444285234362D+02 0.1457507206581D+02 0.1470859801733D+02 + 0.1484309613763D+02 0.1497822307639D+02 0.1511362694548D+02 0.1524894811426D+02 + 0.1538382004666D+02 0.1551787017849D+02 0.1565072083339D+02 0.1578199017530D+02 + 0.1591129319546D+02 0.1603824273170D+02 0.1616245051740D+02 0.1628352825765D+02 + 0.1640108872963D+02 0.1651474690448D+02 0.1662412108723D+02 0.1672883407174D+02 + 0.1682851430716D+02 0.1692279707220D+02 0.1701132565381D+02 0.1709375252614D+02 + 0.1716974052608D+02 0.1723896402125D+02 0.1730111006644D+02 0.1735587954416D+02 + 0.1740298828530D+02 0.1744216816538D+02 0.1747316817225D+02 0.1749575544089D+02 + 0.1750971625093D+02 0.1751485698260D+02 0.1751100502688D+02 0.1749800964559D+02 + 0.1747574277733D+02 0.1744409978499D+02 0.1740300014123D+02 0.1735238804766D+02 + 0.1729223298439D+02 0.1722253018618D+02 0.1714330104180D+02 0.1705459341368D+02 + 0.1695648187457D+02 0.1684906785873D+02 0.1673247972505D+02 0.1660687272995D+02 + 0.1647242890818D+02 0.1632935685981D+02 0.1617789144222D+02 0.1601829336618D+02 + 0.1585084869528D+02 0.1567586824865D+02 0.1549368690699D+02 0.1530466282265D+02 + 0.1510917653451D+02 0.1490762998916D+02 0.1470044547022D+02 0.1448806443791D+02 + 0.1427094628160D+02 0.1404956698852D+02 0.1382441773199D+02 0.1359600338336D+02 + 0.1336484095192D+02 0.1313145795774D+02 0.1289639074258D+02 0.1266018272468D+02 + 0.1242338260337D+02 0.1218654252002D+02 0.1195021618209D+02 0.1171495695744D+02 + 0.1148131594627D+02 0.1124984003849D+02 0.1102106996440D+02 0.1079553834688D+02 + 0.1057376776347D+02 0.1035626882667D+02 0.1014353829125D+02 0.9936057196884D+01 + 0.9734289054994D+01 0.9538678088120D+01 0.9349647530399D+01 0.9167597997384D+01 + 0.8992905933301D+01 0.8825922143594D+01 0.8666970420224D+01 0.8516346266999D+01 + 0.8374315731611D+01 0.8241114350747D+01 0.8116946214096D+01 0.8001983152570D+01 + 0.7896364055459D+01 0.7800194320670D+01 0.7713545441561D+01 0.7636454733225D+01 + 0.7568925200401D+01 0.7510925548528D+01 0.7462390338698D+01 0.7423220286625D+01 + 0.7393282704950D+01 0.7372412087556D+01 0.7360410833787D+01 0.7357050109802D+01 + 0.7362070843542D+01 0.7375184849138D+01 0.7396076075866D+01 0.7424401976120D+01 + 0.7459794986211D+01 0.7501864113185D+01 0.7550196620265D+01 0.7604359802945D+01 + 0.7663902847256D+01 0.7728358761219D+01 0.7797246370063D+01 0.7870072365405D+01 + 0.7946333398216D+01 0.8025518205140D+01 0.8107109757504D+01 0.8190587422172D+01 + 0.8275429123337D+01 0.8361113494303D+01 0.8447122008353D+01 0.8532941077928D+01 + 0.8618064111536D+01 0.8701993518075D+01 0.8784242648578D+01 0.8864337665829D+01 + 0.8941819332731D+01 0.9016244710878D+01 0.9087188761372D+01 0.9154245840560D+01 + 0.9217031084099D+01 0.9275181673474D+01 0.9328357979881D+01 0.9376244581215D+01 + 0.9418551148709D+01 0.9455013200639D+01 0.9485392721360D+01 0.9509478644797D+01 + 0.9527087202359D+01 0.9538062136102D+01 0.9542274778747D+01 0.9539624002998D+01 + 0.9530036043300D+01 0.9513464193959D+01 0.9489888388159D+01 0.9459314663078D+01 + 0.9421774516843D+01 0.9377324163609D+01 0.9326043693467D+01 0.9268036144314D+01 + 0.9203426493115D+01 0.9132360574297D+01 0.9055003933175D+01 0.8971540622481D+01 + 0.8882171950151D+01 0.8787115186520D+01 0.8686602239071D+01 0.8580878302773D+01 + 0.8470200493895D+01 0.8354836475027D+01 0.8235063078754D+01 0.8111164937189D+01 + 0.7983433124252D+01 0.7852163817216D+01 0.7717656983696D+01 0.7580215099831D+01 + 0.7440141905014D+01 0.7297741198086D+01 0.7153315679440D+01 0.7007165843079D+01 + 0.6859588922166D+01 0.6710877891167D+01 0.6561320527250D+01 0.6411198533128D+01 + 0.6260786723101D+01 0.6110352273646D+01 0.5960154039458D+01 0.5810441935471D+01 + 0.5661456384987D+01 0.5513427833700D+01 0.5366576329042D+01 0.5221111163955D+01 + 0.5077230583918D+01 0.4935121555751D+01 0.4794959596475D+01 0.4656908660288D+01 + 0.4521121081498D+01 0.4387737571052D+01 0.4256887264186D+01 0.4128687816522D+01 + 0.4003245545873D+01 0.3880655616880D+01 0.3761002265561D+01 0.3644359060777D+01 + 0.3530789199588D+01 0.3420345833472D+01 0.3313072422343D+01 0.3209003113371D+01 + 0.3108163141592D+01 0.3010569249384D+01 0.2916230121919D+01 0.2825146835796D+01 + 0.2737313318133D+01 0.2652716813508D+01 0.2571338356232D+01 0.2493153245580D+01 + 0.2418131521695D+01 0.2346238440047D+01 0.2277434942461D+01 0.2211678122838D+01 + 0.2148921685899D+01 0.2089116397376D+01 0.2032210524266D+01 0.1978150263893D+01 + 0.1926880160684D+01 0.1878343509721D+01 0.1832482746269D+01 0.1789239820638D+01 + 0.1748556557871D+01 0.1710375001879D+01 0.1674637743804D+01 0.1641288234472D+01 + 0.1610271080956D+01 0.1581532327338D+01 0.1555019719890D+01 0.1530682956958D+01 + 0.1508473923914D+01 0.1488346913611D+01 0.1470258832820D+01 0.1454169395155D+01 + 0.1440041301042D+01 0.1427840405245D+01 0.1417535872504D+01 0.1409100321753D+01 + 0.1402509959377D+01 0.1397744701874D+01 0.1394788288181D+01 0.1393628381826D+01 + 0.1394256662892D+01 0.1396668909610D+01 0.1400865069190D+01 0.1406849317222D+01 + 0.1414629369614D+01 0.1424336942263D+01 0.1436096575202D+01 0.1449912447024D+01 + 0.1465794674727D+01 0.1483759333931D+01 0.1503828494539D+01 0.1526030271798D+01 + 0.1550398892649D+01 0.1576974777196D+01 0.1605804635055D+01 0.1636941576215D+01 + 7 1012 + 1 0 -1 -511.89194 + 2 0 -1 -58.90181 + 2 1 1 -50.68932 + 2 1 -2 -49.77537 + 3 0 -1 -5.73317 + 3 1 1 -3.34334 + 3 1 -2 -3.22919 + 0.2122975645015D-04 0.2173507709867D-04 0.2225242316243D-04 0.2278208072829D-04 + 0.2332434268594D-04 0.2387950888954D-04 0.2444788632325D-04 0.2502978927059D-04 + 0.2562553948791D-04 0.2623546638192D-04 0.2685990719144D-04 0.2749920717353D-04 + 0.2815371979393D-04 0.2882380692207D-04 0.2950983903075D-04 0.3021219540050D-04 + 0.3093126432877D-04 0.3166744334418D-04 0.3242113942573D-04 0.3319276922733D-04 + 0.3398275930755D-04 0.3479154636487D-04 0.3561957747857D-04 0.3646731035519D-04 + 0.3733521358096D-04 0.3822376688016D-04 0.3913346137963D-04 0.4006479987955D-04 + 0.4101829713060D-04 0.4199448011777D-04 0.4299388835081D-04 0.4401707416166D-04 + 0.4506460300883D-04 0.4613705378910D-04 0.4723501915650D-04 0.4835910584899D-04 + 0.4950993502270D-04 0.5068814259429D-04 0.5189437959126D-04 0.5312931251066D-04 + 0.5439362368626D-04 0.5568801166444D-04 0.5701319158897D-04 0.5836989559491D-04 + 0.5975887321186D-04 0.6118089177673D-04 0.6263673685632D-04 0.6412721267990D-04 + 0.6565314258201D-04 0.6721536945580D-04 0.6881475621705D-04 0.7045218627922D-04 + 0.7212856403973D-04 0.7384481537777D-04 0.7560188816385D-04 0.7740075278149D-04 + 0.7924240266119D-04 0.8112785482706D-04 0.8305815045642D-04 0.8503435545263D-04 + 0.8705756103141D-04 0.8912888432116D-04 0.9124946897738D-04 0.9342048581165D-04 + 0.9564313343555D-04 0.9791863891974D-04 0.1002482584687D-03 0.1026332781112D-03 + 0.1050750144077D-03 0.1075748151735D-03 0.1101340602203D-03 0.1127541621137D-03 + 0.1154365669501D-03 0.1181827551510D-03 0.1209942422769D-03 0.1238725798590D-03 + 0.1268193562527D-03 0.1298361975089D-03 0.1329247682680D-03 0.1360867726735D-03 + 0.1393239553083D-03 0.1426381021518D-03 0.1460310415612D-03 0.1495046452749D-03 + 0.1530608294397D-03 0.1567015556625D-03 0.1604288320871D-03 0.1642447144955D-03 + 0.1681513074364D-03 0.1721507653792D-03 0.1762452938963D-03 0.1804371508722D-03 + 0.1847286477421D-03 0.1891221507592D-03 0.1936200822920D-03 0.1982249221522D-03 + 0.2029392089542D-03 0.2077655415060D-03 0.2127065802334D-03 0.2177650486382D-03 + 0.2229437347894D-03 0.2282454928513D-03 0.2336732446459D-03 0.2392299812538D-03 + 0.2449187646513D-03 0.2507427293871D-03 0.2567050842979D-03 0.2628091142650D-03 + 0.2690581820118D-03 0.2754557299435D-03 0.2820052820308D-03 0.2887104457371D-03 + 0.2955749139921D-03 0.3026024672103D-03 0.3097969753590D-03 0.3171624000731D-03 + 0.3247027968207D-03 0.3324223171196D-03 0.3403252108055D-03 0.3484158283536D-03 + 0.3566986232552D-03 0.3651781544500D-03 0.3738590888149D-03 0.3827462037126D-03 + 0.3918443895988D-03 0.4011586526914D-03 0.4106941177020D-03 0.4204560306321D-03 + 0.4304497616342D-03 0.4406808079408D-03 0.4511547968612D-03 0.4618774888502D-03 + 0.4728547806468D-03 0.4840927084883D-03 0.4955974513988D-03 0.5073753345551D-03 + 0.5194328327314D-03 0.5317765738249D-03 0.5444133424641D-03 0.5573500837015D-03 + 0.5705939067925D-03 0.5841520890639D-03 0.5980320798714D-03 0.6122415046513D-03 + 0.6267881690659D-03 0.6416800632466D-03 0.6569253661363D-03 0.6725324499326D-03 + 0.6885098846360D-03 0.7048664427037D-03 0.7216111038125D-03 0.7387530597330D-03 + 0.7563017193176D-03 0.7742667136049D-03 0.7926579010441D-03 0.8114853728404D-03 + 0.8307594584254D-03 0.8504907310562D-03 0.8706900135433D-03 0.8913683841142D-03 + 0.9125371824119D-03 0.9342080156346D-03 0.9563927648179D-03 0.9791035912634D-03 + 0.1002352943117D-02 0.1026153562102D-02 0.1050518490405D-02 0.1075461077728D-02 + 0.1100994988496D-02 0.1127134209246D-02 0.1153893056171D-02 0.1181286182852D-02 + 0.1209328588167D-02 0.1238035624379D-02 0.1267423005415D-02 0.1297506815344D-02 + 0.1328303517037D-02 0.1359829961041D-02 0.1392103394654D-02 0.1425141471212D-02 + 0.1458962259585D-02 0.1493584253904D-02 0.1529026383504D-02 0.1565308023106D-02 + 0.1602449003221D-02 0.1640469620811D-02 0.1679390650189D-02 0.1719233354165D-02 + 0.1760019495464D-02 0.1801771348394D-02 0.1844511710794D-02 0.1888263916250D-02 + 0.1933051846599D-02 0.1978899944720D-02 0.2025833227614D-02 0.2073877299798D-02 + 0.2123058366995D-02 0.2173403250151D-02 0.2224939399761D-02 0.2277694910540D-02 + 0.2331698536421D-02 0.2386979705903D-02 0.2443568537747D-02 0.2501495857040D-02 + 0.2560793211623D-02 0.2621492888896D-02 0.2683627933011D-02 0.2747232162458D-02 + 0.2812340188056D-02 0.2878987431352D-02 0.2947210143447D-02 0.3017045424251D-02 + 0.3088531242177D-02 0.3161706454285D-02 0.3236610826892D-02 0.3313285056646D-02 + 0.3391770792086D-02 0.3472110655691D-02 0.3554348266436D-02 0.3638528262858D-02 + 0.3724696326649D-02 0.3812899206788D-02 0.3903184744224D-02 0.3995601897109D-02 + 0.4090200766624D-02 0.4187032623373D-02 0.4286149934389D-02 0.4387606390746D-02 + 0.4491456935804D-02 0.4597757794082D-02 0.4706566500803D-02 0.4817941932088D-02 + 0.4931944335851D-02 0.5048635363379D-02 0.5168078101634D-02 0.5290337106279D-02 + 0.5415478435454D-02 0.5543569684307D-02 0.5674680020311D-02 0.5808880219367D-02 + 0.5946242702730D-02 0.6086841574754D-02 0.6230752661494D-02 0.6378053550168D-02 + 0.6528823629508D-02 0.6683144131013D-02 0.6841098171130D-02 0.7002770794372D-02 + 0.7168249017405D-02 0.7337621874121D-02 0.7510980461712D-02 0.7688417987773D-02 + 0.7870029818463D-02 0.8055913527720D-02 0.8246168947593D-02 0.8440898219673D-02 + 0.8640205847678D-02 0.8844198751201D-02 0.9052986320644D-02 0.9266680473381D-02 + 0.9485395711148D-02 0.9709249178711D-02 0.9938360723829D-02 0.1017285295853D-01 + 0.1041285132175D-01 0.1065848414335D-01 0.1090988270951D-01 0.1116718132961D-01 + 0.1143051740455D-01 0.1170003149653D-01 0.1197586740047D-01 0.1225817221684D-01 + 0.1254709642620D-01 0.1284279396532D-01 0.1314542230495D-01 0.1345514252930D-01 + 0.1377211941725D-01 0.1409652152530D-01 0.1442852127232D-01 0.1476829502620D-01 + 0.1511602319226D-01 0.1547189030365D-01 0.1583608511371D-01 0.1620880069022D-01 + 0.1659023451183D-01 0.1698058856639D-01 0.1738006945154D-01 0.1778888847734D-01 + 0.1820726177118D-01 0.1863541038486D-01 0.1907356040402D-01 0.1952194305980D-01 + 0.1998079484302D-01 0.2045035762063D-01 0.2093087875471D-01 0.2142261122400D-01 + 0.2192581374792D-01 0.2244075091329D-01 0.2296769330365D-01 0.2350691763133D-01 + 0.2405870687229D-01 0.2462335040374D-01 0.2520114414469D-01 0.2579239069942D-01 + 0.2639739950387D-01 0.2701648697516D-01 0.2764997666416D-01 0.2829819941123D-01 + 0.2896149350513D-01 0.2964020484531D-01 0.3033468710740D-01 0.3104530191220D-01 + 0.3177241899806D-01 0.3251641639684D-01 0.3327768061342D-01 0.3405660680881D-01 + 0.3485359898710D-01 0.3566907018606D-01 0.3650344267166D-01 0.3735714813647D-01 + 0.3823062790211D-01 0.3912433312562D-01 0.4003872501011D-01 0.4097427501948D-01 + 0.4193146509749D-01 0.4291078789111D-01 0.4391274697832D-01 0.4493785710035D-01 + 0.4598664439858D-01 0.4705964665594D-01 0.4815741354312D-01 0.4928050686955D-01 + 0.5042950083923D-01 0.5160498231153D-01 0.5280755106696D-01 0.5403782007813D-01 + 0.5529641578584D-01 0.5658397838041D-01 0.5790116208843D-01 0.5924863546488D-01 + 0.6062708169076D-01 0.6203719887636D-01 0.6347970037015D-01 0.6495531507346D-01 + 0.6646478776099D-01 0.6800887940725D-01 0.6958836751900D-01 0.7120404647380D-01 + 0.7285672786470D-01 0.7454724085125D-01 0.7627643251682D-01 0.7804516823229D-01 + 0.7985433202641D-01 0.8170482696258D-01 0.8359757552242D-01 0.8553351999606D-01 + 0.8751362287932D-01 0.8953886727772D-01 0.9161025731761D-01 0.9372881856432D-01 + 0.9589559844749D-01 0.9811166669365D-01 0.1003781157661D+00 0.1026960613124D+00 + 0.1050666426187D+00 0.1074910230727D+00 0.1099703906329D+00 0.1125059583070D+00 + 0.1150989646366D+00 0.1177506741909D+00 0.1204623780676D+00 0.1232353944021D+00 + 0.1260710688845D+00 0.1289707752849D+00 0.1319359159864D+00 0.1349679225270D+00 + 0.1380682561490D+00 0.1412384083570D+00 0.1444799014844D+00 0.1477942892678D+00 + 0.1511831574303D+00 0.1546481242725D+00 0.1581908412731D+00 0.1618129936965D+00 + 0.1655163012104D+00 0.1693025185104D+00 0.1731734359544D+00 0.1771308802047D+00 + 0.1811767148790D+00 0.1853128412094D+00 0.1895411987104D+00 0.1938637658552D+00 + 0.1982825607598D+00 0.2027996418767D+00 0.2074171086957D+00 0.2121371024533D+00 + 0.2169618068509D+00 0.2218934487801D+00 0.2269342990569D+00 0.2320866731634D+00 + 0.2373529319974D+00 0.2427354826295D+00 0.2482367790682D+00 0.2538593230323D+00 + 0.2596056647304D+00 0.2654784036474D+00 0.2714801893389D+00 0.2776137222308D+00 + 0.2838817544268D+00 0.2902870905217D+00 0.2968325884206D+00 0.3035211601645D+00 + 0.3103557727607D+00 0.3173394490192D+00 0.3244752683937D+00 0.3317663678273D+00 + 0.3392159426028D+00 0.3468272471962D+00 0.3546035961349D+00 0.3625483648577D+00 + 0.3706649905790D+00 0.3789569731540D+00 0.3874278759464D+00 0.3960813266976D+00 + 0.4049210183955D+00 0.4139507101454D+00 0.4231742280388D+00 0.4325954660221D+00 + 0.4422183867640D+00 0.4520470225197D+00 0.4620854759931D+00 0.4723379211946D+00 + 0.4828086042953D+00 0.4935018444749D+00 0.5044220347646D+00 0.5155736428822D+00 + 0.5269612120602D+00 0.5385893618646D+00 0.5504627890040D+00 0.5625862681281D+00 + 0.5749646526146D+00 0.5876028753427D+00 0.6005059494532D+00 0.6136789690924D+00 + 0.6271271101407D+00 0.6408556309226D+00 0.6548698728981D+00 0.6691752613333D+00 + 0.6837773059493D+00 0.6986816015479D+00 0.7138938286123D+00 0.7294197538810D+00 + 0.7452652308942D+00 0.7614362005101D+00 0.7779386913894D+00 0.7947788204470D+00 + 0.8119627932680D+00 0.8294969044866D+00 0.8473875381261D+00 0.8656411678975D+00 + 0.8842643574549D+00 0.9032637606047D+00 0.9226461214683D+00 0.9424182745935D+00 + 0.9625871450140D+00 0.9831597482541D+00 0.1004143190275D+01 0.1025544667362D+01 + 0.1047371465949D+01 0.1069630962376D+01 0.1092330622582D+01 0.1115478001718D+01 + 0.1139080743699D+01 0.1163146580667D+01 0.1187683332379D+01 0.1212698905512D+01 + 0.1238201292877D+01 0.1264198572546D+01 0.1290698906886D+01 0.1317710541494D+01 + 0.1345241804028D+01 0.1373301102944D+01 0.1401896926110D+01 0.1431037839321D+01 + 0.1460732484690D+01 0.1490989578921D+01 0.1521817911461D+01 0.1553226342519D+01 + 0.1585223800953D+01 0.1617819282025D+01 0.1651021845012D+01 0.1684840610666D+01 + 0.1719284758534D+01 0.1754363524114D+01 0.1790086195862D+01 0.1826462112019D+01 + 0.1863500657290D+01 0.1901211259327D+01 0.1939603385053D+01 0.1978686536792D+01 + 0.2018470248210D+01 0.2058964080068D+01 0.2100177615772D+01 0.2142120456722D+01 + 0.2184802217451D+01 0.2228232520549D+01 0.2272420991371D+01 0.2317377252521D+01 + 0.2363110918097D+01 0.2409631587718D+01 0.2456948840298D+01 0.2505072227579D+01 + 0.2554011267414D+01 0.2603775436800D+01 0.2654374164640D+01 0.2705816824249D+01 + 0.2758112725590D+01 0.2811271107225D+01 0.2865301128002D+01 0.2920211858443D+01 + 0.2976012271854D+01 0.3032711235135D+01 0.3090317499294D+01 0.3148839689666D+01 + 0.3208286295814D+01 0.3268665661132D+01 0.3329985972130D+01 0.3392255247403D+01 + 0.3455481326284D+01 0.3519671857166D+01 0.3584834285516D+01 0.3650975841540D+01 + 0.3718103527540D+01 0.3786224104928D+01 0.3855344080910D+01 0.3925469694842D+01 + 0.3996606904248D+01 0.4068761370505D+01 0.4141938444201D+01 0.4216143150155D+01 + 0.4291380172106D+01 0.4367653837082D+01 0.4444968099432D+01 0.4523326524540D+01 + 0.4602732272224D+01 0.4683188079814D+01 0.4764696244923D+01 0.4847258607911D+01 + 0.4930876534058D+01 0.5015550895439D+01 0.5101282052526D+01 0.5188069835504D+01 + 0.5275913525340D+01 0.5364811834582D+01 0.5454762887935D+01 0.5545764202593D+01 + 0.5637812668364D+01 0.5730904527600D+01 0.5825035354930D+01 0.5920200036841D+01 + 0.6016392751096D+01 0.6113606946037D+01 0.6211835319763D+01 0.6311069799237D+01 + 0.6411301519318D+01 0.6512520801757D+01 0.6614717134178D+01 0.6717879149076D+01 + 0.6821994602856D+01 0.6927050354936D+01 0.7033032346971D+01 0.7139925582197D+01 + 0.7247714104955D+01 0.7356380980422D+01 0.7465908274590D+01 0.7576277034522D+01 + 0.7687467268944D+01 0.7799457929201D+01 0.7912226890625D+01 0.8025750934367D+01 + 0.8140005729731D+01 0.8254965817070D+01 0.8370604591283D+01 0.8486894285977D+01 + 0.8603805958343D+01 0.8721309474805D+01 0.8839373497487D+01 0.8957965471583D+01 + 0.9077051613664D+01 0.9196596901005D+01 0.9316565061973D+01 0.9436918567578D+01 + 0.9557618624205D+01 0.9678625167647D+01 0.9799896858462D+01 0.9921391078761D+01 + 0.1004306393048D+02 0.1016487023519D+02 0.1028676353561D+02 0.1040869609872D+02 + 0.1053061892078D+02 0.1065248173410D+02 0.1077423301584D+02 0.1089581999877D+02 + 0.1101718868413D+02 0.1113828385666D+02 0.1125904910191D+02 0.1137942682584D+02 + 0.1149935827678D+02 0.1161878356999D+02 0.1173764171462D+02 0.1185587064341D+02 + 0.1197340724503D+02 0.1209018739920D+02 0.1220614601465D+02 0.1232121706995D+02 + 0.1243533365740D+02 0.1254842802982D+02 0.1266043165050D+02 0.1277127524634D+02 + 0.1288088886404D+02 0.1298920192971D+02 0.1309614331160D+02 0.1320164138629D+02 + 0.1330562410812D+02 0.1340801908212D+02 0.1350875364026D+02 0.1360775492116D+02 + 0.1370494995324D+02 0.1380026574132D+02 0.1389362935662D+02 0.1398496803019D+02 + 0.1407420924981D+02 0.1416128086012D+02 0.1424611116627D+02 0.1432862904069D+02 + 0.1440876403324D+02 0.1448644648440D+02 0.1456160764164D+02 0.1463417977876D+02 + 0.1470409631813D+02 0.1477129195572D+02 0.1483570278883D+02 0.1489726644633D+02 + 0.1495592222127D+02 0.1501161120574D+02 0.1506427642781D+02 0.1511386299027D+02 + 0.1516031821110D+02 0.1520359176531D+02 0.1524363582812D+02 0.1528040521898D+02 + 0.1531385754641D+02 0.1534395335325D+02 0.1537065626208D+02 0.1539393312048D+02 + 0.1541375414585D+02 0.1543009306950D+02 0.1544292727951D+02 0.1545223796216D+02 + 0.1545801024155D+02 0.1546023331695D+02 0.1545890059744D+02 0.1545400983365D+02 + 0.1544556324596D+02 0.1543356764880D+02 0.1541803457065D+02 0.1539898036925D+02 + 0.1537642634154D+02 0.1535039882796D+02 0.1532092931044D+02 0.1528805450387D+02 + 0.1525181644030D+02 0.1521226254557D+02 0.1516944570778D+02 0.1512342433713D+02 + 0.1507426241669D+02 0.1502202954350D+02 0.1496680095964D+02 0.1490865757272D+02 + 0.1484768596530D+02 0.1478397839284D+02 0.1471763276969D+02 0.1464875264266D+02 + 0.1457744715182D+02 0.1450383097801D+02 0.1442802427679D+02 0.1435015259838D+02 + 0.1427034679327D+02 0.1418874290321D+02 0.1410548203722D+02 0.1402071023247D+02 + 0.1393457829969D+02 0.1384724165293D+02 0.1375886012364D+02 0.1366959775879D+02 + 0.1357962260304D+02 0.1348910646488D+02 0.1339822466686D+02 0.1330715577980D+02 + 0.1321608134121D+02 0.1312518555808D+02 0.1303465499419D+02 0.1294467824221D+02 + 0.1285544558101D+02 0.1276714861841D+02 0.1267997991994D+02 0.1259413262403D+02 + 0.1250980004419D+02 0.1242717525885D+02 0.1234645068948D+02 0.1226781766776D+02 + 0.1219146599257D+02 0.1211758347770D+02 0.1204635549121D+02 0.1197796448732D+02 + 0.1191258953197D+02 0.1185040582321D+02 0.1179158420730D+02 0.1173629069208D+02 + 0.1168468595856D+02 0.1163692487226D+02 0.1159315599549D+02 0.1155352110209D+02 + 0.1151815469598D+02 0.1148718353503D+02 0.1146072616178D+02 0.1143889244247D+02 + 0.1142178311602D+02 0.1140948935454D+02 0.1140209233686D+02 0.1139966283678D+02 + 0.1140226082774D+02 0.1140993510519D+02 0.1142272292875D+02 0.1144064968524D+02 + 0.1146372857460D+02 0.1149196031991D+02 0.1152533290326D+02 0.1156382132880D+02 + 0.1160738741454D+02 0.1165597961412D+02 0.1170953287012D+02 0.1176796849989D+02 + 0.1183119411535D+02 0.1189910357777D+02 0.1197157698856D+02 0.1204848071701D+02 + 0.1212966746596D+02 0.1221497637600D+02 0.1230423316888D+02 0.1239725033077D+02 + 0.1249382733567D+02 0.1259375090926D+02 0.1269679533346D+02 0.1280272279167D+02 + 0.1291128375448D+02 0.1302221740584D+02 0.1313525210912D+02 0.1325010591253D+02 + 0.1336648709337D+02 0.1348409474012D+02 0.1360261937149D+02 0.1372174359123D+02 + 0.1384114277758D+02 0.1396048580566D+02 0.1407943580155D+02 0.1419765092608D+02 + 0.1431478518661D+02 0.1443048927478D+02 0.1454441142812D+02 0.1465619831308D+02 + 0.1476549592746D+02 0.1487195051928D+02 0.1497520951989D+02 0.1507492248828D+02 + 0.1517074206398D+02 0.1526232492551D+02 0.1534933275145D+02 0.1543143318112D+02 + 0.1550830077157D+02 0.1557961794797D+02 0.1564507594396D+02 0.1570437572881D+02 + 0.1575722891823D+02 0.1580335866539D+02 0.1584250052899D+02 0.1587440331524D+02 + 0.1589882989033D+02 0.1591555796049D+02 0.1592438081630D+02 0.1592510803844D+02 + 0.1591756616179D+02 0.1590159929512D+02 0.1587706969359D+02 0.1584385828154D+02 + 0.1580186512290D+02 0.1575100983720D+02 0.1569123195871D+02 0.1562249123695D+02 + 0.1554476787665D+02 0.1545806271560D+02 0.1536239733893D+02 0.1525781412875D+02 + 0.1514437624809D+02 0.1502216755847D+02 0.1489129247063D+02 0.1475187572813D+02 + 0.1460406212401D+02 0.1444801615062D+02 0.1428392158332D+02 0.1411198099888D+02 + 0.1393241522964D+02 0.1374546275490D+02 0.1355137903119D+02 0.1335043576333D+02 + 0.1314292011864D+02 0.1292913388664D+02 0.1270939258714D+02 0.1248402452972D+02 + 0.1225336982785D+02 0.1201777937125D+02 0.1177761376017D+02 0.1153324220569D+02 + 0.1128504140014D+02 0.1103339436205D+02 0.1077868926027D+02 0.1052131822179D+02 + 0.1026167612835D+02 0.1000015940663D+02 0.9737164817090D+01 0.9473088246666D+01 + 0.9208323510392D+01 0.8943261167138D+01 0.8678287354606D+01 0.8413782648689D+01 + 0.8150120952198D+01 0.7887668417870D+01 0.7626782410424D+01 0.7367810512255D+01 + 0.7111089577147D+01 0.6856944836175D+01 0.6605689059620D+01 0.6357621778576D+01 + 0.6113028569417D+01 0.5872180404071D+01 0.5635333068605D+01 0.5402726652271D+01 + 0.5174585108689D+01 0.4951115890458D+01 0.4732509658013D+01 0.4518940063093D+01 + 0.4310563606744D+01 0.4107519571314D+01 0.3909930025455D+01 0.3717899900701D+01 + 0.3531517137795D+01 0.3350852900521D+01 0.3175961854415D+01 0.3006882507418D+01 + 0.2843637609166D+01 0.2686234605393D+01 0.2534666143602D+01 0.2388910626020D+01 + 0.2248932805599D+01 0.2114684420764D+01 0.1986104864410D+01 0.1863121882663D+01 + 0.1745652298807D+01 0.1633602757816D+01 0.1526870486911D+01 0.1425344067651D+01 + 0.1328904215091D+01 0.1237424559686D+01 0.1150772427713D+01 0.1068809616148D+01 + 0.9913931580887D+00 0.9183760750247D+00 0.8496081124357D+00 0.7849364554513D+00 + 0.7242064215293D+00 0.6672621273712D+00 0.6139471275574D+00 0.5641050226618D+00 + 0.5175800348878D+00 0.4742175495586D+00 0.4338646210828D+00 0.3963704423129D+00 + 0.3615867764997D+00 0.3293683513354D+00 0.2995732148544D+00 0.2720630532321D+00 + 0.2467034707815D+00 0.2233642326902D+00 0.2019194712763D+00 0.1822478567499D+00 + 0.1642327336682D+00 0.1477622244444D+00 0.1327293014336D+00 0.1190318292464D+00 + 0.1065725790655D+00 0.9525921682581D-01 0.8500426719540D-01 0.7572505534570D-01 + 0.6734362852856D-01 0.5978665949119D-01 0.5298533375213D-01 0.4687522273735D-01 + 0.4139614473480D-01 0.3649201557103D-01 0.3211069084453D-01 0.2820380147099D-01 + 0.2472658420543D-01 0.2163770870794D-01 0.1889910261478D-01 0.1647577596641D-01 + 0.1433564623066D-01 0.1244936504301D-01 0.1079014767040D-01 0.9333606088531D-02 + 0.8057586449521D-02 0.6942011605538D-02 0.5968729247262D-02 0.5121366113861D-02 + 0.4385188634413D-02 0.3746970269980D-02 0.3194865741265D-02 0.2718292249293D-02 + 0.2307817726031D-02 0.1955056088404D-02 0.1652569412799D-02 0.1393776897745D-02 + 0.1172870439853D-02 0.9847366120634D-03 0.8248848034661D-03 0.6893812560569D-03 + 0.5747887154298D-03 0.4781113990982D-03 0.3967449774979D-03 0.3284312582634D-03 + 0.2712172636576D-03 0.2234183935981D-03 0.1835853721449D-03 0.1504746831443D-03 + 0.1230222105786D-03 0.1003198106540D-03 0.8159455542106D-04 0.6619040144209D-04 + 0.5355205138722D-04 0.4321079120846D-04 0.3477210045803D-04 0.2790484818898D-04 + 0.2233190152246D-04 0.1782198824118D-04 0.1418266855132D-04 0.1125428434880D-04 + 0.8904766856498D-05 0.7025195313453D-05 0.5526010459652D-05 0.4333796852085D-05 + 0.3388557563637D-05 0.2641413563333D-05 0.2052668070841D-05 0.1590183444862D-05 + 0.1228024735392D-05 0.9453299398051D-06 0.7253722919424D-06 0.5547846237125D-06 + 0.4229200131023D-06 0.3213266143727D-06 0.2433177983142D-06 0.1836215545666D-06 + 0.1380955642703D-06 0.1034964778941D-06 0.7729376586493D-07 0.5752008209307D-07 + 0.4265142355148D-07 0.3151151106808D-07 0.2319578320089D-07 0.1701120974173D-07 + 0.1242881489534D-07 0.9046371073667D-08 0.6559198960071D-08 0.4737402476978D-08 + 0.3408191153158D-08 0.2442208093542D-08 0.1742998768590D-08 0.1238932286038D-08 + 0.8770296193333D-09 0.6182683290111D-09 0.4340255982013D-09 0.3033950772413D-09 + 0.2111715589818D-09 0.1463438404983D-09 0.1009726185101D-09 0.6935859066118D-10 + 0.4742849271888D-10 0.3228488955626D-10 0.2187547853929D-10 0.1475212866899D-10 + 0.9901881750809D-11 0.6613860882122D-11 0.4396644350124D-11 0.2908650000322D-11 + 0.1914873227728D-11 0.1254415200484D-11 0.8176535094916D-12 0.5302708391854D-12 + 0.3421370551355D-12 0.2196087836422D-12 0.1402231518601D-12 0.8906014768602D-13 + LSMS: xx z= 26. xvalws= 2.77074 + 26. 5.42000 10. 0.6800728001522D+00 + -0.1113096740000D+02 0.8531075986657D+00 1001 +-0.5199728402963D+02-0.5199725117641D+02-0.5199721792578D+02-0.5199718427293D+02 +-0.5199715021300D+02-0.5199711574107D+02-0.5199708085214D+02-0.5199704554119D+02 +-0.5199700980309D+02-0.5199697363268D+02-0.5199693702474D+02-0.5199689997397D+02 +-0.5199686247500D+02-0.5199682452243D+02-0.5199678611076D+02-0.5199674723444D+02 +-0.5199670788785D+02-0.5199666806529D+02-0.5199662776101D+02-0.5199658696918D+02 +-0.5199654568390D+02-0.5199650389922D+02-0.5199646160907D+02-0.5199641880734D+02 +-0.5199637548785D+02-0.5199633164434D+02-0.5199628727046D+02-0.5199624235979D+02 +-0.5199619690585D+02-0.5199615090205D+02-0.5199610434176D+02-0.5199605721822D+02 +-0.5199600952464D+02-0.5199596125410D+02-0.5199591239964D+02-0.5199586295419D+02 +-0.5199581291060D+02-0.5199576226162D+02-0.5199571099994D+02-0.5199565911815D+02 +-0.5199560660874D+02-0.5199555346411D+02-0.5199549967658D+02-0.5199544523837D+02 +-0.5199539014162D+02-0.5199533437834D+02-0.5199527794048D+02-0.5199522081989D+02 +-0.5199516300828D+02-0.5199510449731D+02-0.5199504527851D+02-0.5199498534331D+02 +-0.5199492468306D+02-0.5199486328897D+02-0.5199480115217D+02-0.5199473826367D+02 +-0.5199467461436D+02-0.5199461019507D+02-0.5199454499646D+02-0.5199447900910D+02 +-0.5199441222344D+02-0.5199434462984D+02-0.5199427621849D+02-0.5199420697954D+02 +-0.5199413690295D+02-0.5199406597858D+02-0.5199399419618D+02-0.5199392154537D+02 +-0.5199384801563D+02-0.5199377359634D+02-0.5199369827672D+02-0.5199362204589D+02 +-0.5199354489281D+02-0.5199346680633D+02-0.5199338777515D+02-0.5199330778784D+02 +-0.5199322683282D+02-0.5199314489839D+02-0.5199306197270D+02-0.5199297804374D+02 +-0.5199289309939D+02-0.5199280712733D+02-0.5199272011516D+02-0.5199263205027D+02 +-0.5199254291992D+02-0.5199245271123D+02-0.5199236141114D+02-0.5199226900644D+02 +-0.5199217548376D+02-0.5199208082958D+02-0.5199198503019D+02-0.5199188807175D+02 +-0.5199178994021D+02-0.5199169062139D+02-0.5199159010092D+02-0.5199148836424D+02 +-0.5199138539665D+02-0.5199128118323D+02-0.5199117570892D+02-0.5199106895845D+02 +-0.5199096091638D+02-0.5199085156707D+02-0.5199074089471D+02-0.5199062888326D+02 +-0.5199051551654D+02-0.5199040077813D+02-0.5199028465143D+02-0.5199016711964D+02 +-0.5199004816574D+02-0.5198992777253D+02-0.5198980592257D+02-0.5198968259824D+02 +-0.5198955778170D+02-0.5198943145487D+02-0.5198930359948D+02-0.5198917419701D+02 +-0.5198904322875D+02-0.5198891067574D+02-0.5198877651879D+02-0.5198864073848D+02 +-0.5198850331517D+02-0.5198836422896D+02-0.5198822345972D+02-0.5198808098707D+02 +-0.5198793679039D+02-0.5198779084882D+02-0.5198764314123D+02-0.5198749364622D+02 +-0.5198734234217D+02-0.5198718920716D+02-0.5198703421905D+02-0.5198687735537D+02 +-0.5198671859343D+02-0.5198655791024D+02-0.5198639528254D+02-0.5198623068679D+02 +-0.5198606409915D+02-0.5198589549550D+02-0.5198572485143D+02-0.5198555214224D+02 +-0.5198537734293D+02-0.5198520042816D+02-0.5198502137235D+02-0.5198484014954D+02 +-0.5198465673351D+02-0.5198447109769D+02-0.5198428321519D+02-0.5198409305883D+02 +-0.5198390060104D+02-0.5198370581396D+02-0.5198350866939D+02-0.5198330913876D+02 +-0.5198310719319D+02-0.5198290280341D+02-0.5198269593983D+02-0.5198248657249D+02 +-0.5198227467106D+02-0.5198206020484D+02-0.5198184314277D+02-0.5198162345340D+02 +-0.5198140110492D+02-0.5198117606510D+02-0.5198094830136D+02-0.5198071778068D+02 +-0.5198048446968D+02-0.5198024833454D+02-0.5198000934107D+02-0.5197976745462D+02 +-0.5197952264015D+02-0.5197927486220D+02-0.5197902408485D+02-0.5197877027176D+02 +-0.5197851338615D+02-0.5197825339081D+02-0.5197799024804D+02-0.5197772391971D+02 +-0.5197745436723D+02-0.5197718155151D+02-0.5197690543304D+02-0.5197662597177D+02 +-0.5197634312720D+02-0.5197605685833D+02-0.5197576712367D+02-0.5197547388122D+02 +-0.5197517708846D+02-0.5197487670236D+02-0.5197457267938D+02-0.5197426497542D+02 +-0.5197395354589D+02-0.5197363834563D+02-0.5197331932893D+02-0.5197299644952D+02 +-0.5197266966059D+02-0.5197233891476D+02-0.5197200416404D+02-0.5197166535990D+02 +-0.5197132245319D+02-0.5197097539418D+02-0.5197062413252D+02-0.5197026861727D+02 +-0.5196990879687D+02-0.5196954461909D+02-0.5196917603112D+02-0.5196880297948D+02 +-0.5196842541005D+02-0.5196804326804D+02-0.5196765649801D+02-0.5196726504383D+02 +-0.5196686884871D+02-0.5196646785514D+02-0.5196606200494D+02-0.5196565123919D+02 +-0.5196523549829D+02-0.5196481472189D+02-0.5196438884890D+02-0.5196395781753D+02 +-0.5196352156518D+02-0.5196308002855D+02-0.5196263314350D+02-0.5196218084518D+02 +-0.5196172306789D+02-0.5196125974518D+02-0.5196079080977D+02-0.5196031619354D+02 +-0.5195983582758D+02-0.5195934964214D+02-0.5195885756657D+02-0.5195835952942D+02 +-0.5195785545834D+02-0.5195734528011D+02-0.5195682892060D+02-0.5195630630481D+02 +-0.5195577735679D+02-0.5195524199969D+02-0.5195470015573D+02-0.5195415174616D+02 +-0.5195359669127D+02-0.5195303491041D+02-0.5195246632192D+02-0.5195189084316D+02 +-0.5195130839046D+02-0.5195071887917D+02-0.5195012222358D+02-0.5194951833693D+02 +-0.5194890713143D+02-0.5194828851819D+02-0.5194766240726D+02-0.5194702870759D+02 +-0.5194638732701D+02-0.5194573817222D+02-0.5194508114882D+02-0.5194441616121D+02 +-0.5194374311266D+02-0.5194306190525D+02-0.5194237243986D+02-0.5194167461616D+02 +-0.5194096833262D+02-0.5194025348643D+02-0.5193952997356D+02-0.5193879768871D+02 +-0.5193805652527D+02-0.5193730637535D+02-0.5193654712973D+02-0.5193577867788D+02 +-0.5193500090790D+02-0.5193421370652D+02-0.5193341695911D+02-0.5193261054963D+02 +-0.5193179436061D+02-0.5193096827316D+02-0.5193013216694D+02-0.5192928592013D+02 +-0.5192842940944D+02-0.5192756251004D+02-0.5192668509561D+02-0.5192579703828D+02 +-0.5192489820860D+02-0.5192398847556D+02-0.5192306770652D+02-0.5192213576726D+02 +-0.5192119252189D+02-0.5192023783287D+02-0.5191927156096D+02-0.5191829356524D+02 +-0.5191730370307D+02-0.5191630183005D+02-0.5191528780001D+02-0.5191426146503D+02 +-0.5191322267532D+02-0.5191217127930D+02-0.5191110712354D+02-0.5191003005272D+02 +-0.5190893990959D+02-0.5190783653503D+02-0.5190671976795D+02-0.5190558944528D+02 +-0.5190444540195D+02-0.5190328747089D+02-0.5190211548297D+02-0.5190092926700D+02 +-0.5189972864968D+02-0.5189851345560D+02-0.5189728350719D+02-0.5189603862472D+02 +-0.5189477862625D+02-0.5189350332759D+02-0.5189221254235D+02-0.5189090608179D+02 +-0.5188958375491D+02-0.5188824536834D+02-0.5188689072635D+02-0.5188551963080D+02 +-0.5188413188114D+02-0.5188272727435D+02-0.5188130560492D+02-0.5187986666482D+02 +-0.5187841024347D+02-0.5187693612772D+02-0.5187544410178D+02-0.5187393394724D+02 +-0.5187240544300D+02-0.5187085836524D+02-0.5186929248740D+02-0.5186770758014D+02 +-0.5186610341132D+02-0.5186447974591D+02-0.5186283634606D+02-0.5186117297093D+02 +-0.5185948937678D+02-0.5185778531685D+02-0.5185606054135D+02-0.5185431479744D+02 +-0.5185254782916D+02-0.5185075937741D+02-0.5184894917991D+02-0.5184711697117D+02 +-0.5184526248242D+02-0.5184338544160D+02-0.5184148557330D+02-0.5183956259875D+02 +-0.5183761623572D+02-0.5183564619854D+02-0.5183365219802D+02-0.5183163394142D+02 +-0.5182959113240D+02-0.5182752347098D+02-0.5182543065350D+02-0.5182331237255D+02 +-0.5182116831697D+02-0.5181899817174D+02-0.5181680161800D+02-0.5181457833297D+02 +-0.5181232798987D+02-0.5181005025795D+02-0.5180774480235D+02-0.5180541128413D+02 +-0.5180304936016D+02-0.5180065868310D+02-0.5179823890134D+02-0.5179578965895D+02 +-0.5179331059564D+02-0.5179080134665D+02-0.5178826154277D+02-0.5178569081025D+02 +-0.5178308877073D+02-0.5178045504121D+02-0.5177778923399D+02-0.5177509095659D+02 +-0.5177235981171D+02-0.5176959539717D+02-0.5176679730585D+02-0.5176396512563D+02 +-0.5176109843930D+02-0.5175819682457D+02-0.5175525985390D+02-0.5175228709457D+02 +-0.5174927810849D+02-0.5174623245221D+02-0.5174314967682D+02-0.5174002932792D+02 +-0.5173687094551D+02-0.5173367406395D+02-0.5173043821187D+02-0.5172716291215D+02 +-0.5172384768177D+02-0.5172049203182D+02-0.5171709546736D+02-0.5171365748739D+02 +-0.5171017758479D+02-0.5170665524617D+02-0.5170308995189D+02-0.5169948117592D+02 +-0.5169582838578D+02-0.5169213104249D+02-0.5168838860043D+02-0.5168460050732D+02 +-0.5168076620412D+02-0.5167688512494D+02-0.5167295669696D+02-0.5166898034036D+02 +-0.5166495546822D+02-0.5166088148646D+02-0.5165675779371D+02-0.5165258378128D+02 +-0.5164835883303D+02-0.5164408232529D+02-0.5163975362681D+02-0.5163537209858D+02 +-0.5163093709386D+02-0.5162644795799D+02-0.5162190402831D+02-0.5161730463415D+02 +-0.5161264909661D+02-0.5160793672858D+02-0.5160316683457D+02-0.5159833871062D+02 +-0.5159345164422D+02-0.5158850491424D+02-0.5158349779076D+02-0.5157842953502D+02 +-0.5157329939929D+02-0.5156810662682D+02-0.5156285045165D+02-0.5155753009857D+02 +-0.5155214478300D+02-0.5154669371088D+02-0.5154117607855D+02-0.5153559107266D+02 +-0.5152993787006D+02-0.5152421563767D+02-0.5151842353238D+02-0.5151256070096D+02 +-0.5150662627991D+02-0.5150061939535D+02-0.5149453916296D+02-0.5148838468777D+02 +-0.5148215506412D+02-0.5147584937554D+02-0.5146946669454D+02-0.5146300608264D+02 +-0.5145646659012D+02-0.5144984725596D+02-0.5144314710771D+02-0.5143636516137D+02 +-0.5142950042123D+02-0.5142255187982D+02-0.5141551851771D+02-0.5140839930344D+02 +-0.5140119319335D+02-0.5139389913149D+02-0.5138651604948D+02-0.5137904286634D+02 +-0.5137147848843D+02-0.5136382180931D+02-0.5135607170955D+02-0.5134822705665D+02 +-0.5134028670491D+02-0.5133224949527D+02-0.5132411425521D+02-0.5131587979859D+02 +-0.5130754492555D+02-0.5129910842232D+02-0.5129056906116D+02-0.5128192560017D+02 +-0.5127317678315D+02-0.5126432133956D+02-0.5125535798425D+02-0.5124628541740D+02 +-0.5123710232443D+02-0.5122780737574D+02-0.5121839922671D+02-0.5120887651745D+02 +-0.5119923787276D+02-0.5118948190193D+02-0.5117960719865D+02-0.5116961234085D+02 +-0.5115949589056D+02-0.5114925639380D+02-0.5113889238044D+02-0.5112840236408D+02 +-0.5111778484188D+02-0.5110703829447D+02-0.5109616118579D+02-0.5108515196301D+02 +-0.5107400905631D+02-0.5106273087889D+02-0.5105131582667D+02-0.5103976227836D+02 +-0.5102806859514D+02-0.5101623312071D+02-0.5100425418105D+02-0.5099213008436D+02 +-0.5097985912091D+02-0.5096743956297D+02-0.5095486966464D+02-0.5094214766176D+02 +-0.5092927177183D+02-0.5091624019384D+02-0.5090305110822D+02-0.5088970267672D+02 +-0.5087619304230D+02-0.5086252032900D+02-0.5084868264193D+02-0.5083467806710D+02 +-0.5082050467136D+02-0.5080616050232D+02-0.5079164358822D+02-0.5077695193792D+02 +-0.5076208354076D+02-0.5074703636655D+02-0.5073180836542D+02-0.5071639746782D+02 +-0.5070080158445D+02-0.5068501860613D+02-0.5066904640389D+02-0.5065288282874D+02 +-0.5063652571181D+02-0.5061997286414D+02-0.5060322207678D+02-0.5058627112067D+02 +-0.5056911774669D+02-0.5055175968555D+02-0.5053419464788D+02-0.5051642032411D+02 +-0.5049843438458D+02-0.5048023447945D+02-0.5046181823877D+02-0.5044318327247D+02 +-0.5042432717038D+02-0.5040524750226D+02-0.5038594181787D+02-0.5036640764694D+02 +-0.5034664249930D+02-0.5032664386488D+02-0.5030640921379D+02-0.5028593599640D+02 +-0.5026522164341D+02-0.5024426356594D+02-0.5022305915564D+02-0.5020160578474D+02 +-0.5017990080623D+02-0.5015794155393D+02-0.5013572534263D+02-0.5011324946826D+02 +-0.5009051120796D+02-0.5006750782030D+02-0.5004423654542D+02-0.5002069460521D+02 +-0.4999687920344D+02-0.4997278752603D+02-0.4994841674120D+02-0.4992376399966D+02 +-0.4989882643488D+02-0.4987360116327D+02-0.4984808528443D+02-0.4982227588141D+02 +-0.4979617002094D+02-0.4976976475371D+02-0.4974305711462D+02-0.4971604412309D+02 +-0.4968872278335D+02-0.4966109008469D+02-0.4963314300185D+02-0.4960487849528D+02 +-0.4957629351145D+02-0.4954738498327D+02-0.4951814983035D+02-0.4948858495939D+02 +-0.4945868726453D+02-0.4942845362775D+02-0.4939788091919D+02-0.4936696599757D+02 +-0.4933570571061D+02-0.4930409689534D+02-0.4927213637859D+02-0.4923982097740D+02 +-0.4920714749935D+02-0.4917411274309D+02-0.4914071349870D+02-0.4910694654815D+02 +-0.4907280866573D+02-0.4903829661848D+02-0.4900340716666D+02-0.4896813706420D+02 +-0.4893248305909D+02-0.4889644189392D+02-0.4886001030623D+02-0.4882318502909D+02 +-0.4878596279141D+02-0.4874834031849D+02-0.4871031433244D+02-0.4867188155262D+02 +-0.4863303869609D+02-0.4859378247804D+02-0.4855410961222D+02-0.4851401681140D+02 +-0.4847350078774D+02-0.4843255825325D+02-0.4839118592018D+02-0.4834938050138D+02 +-0.4830713871075D+02-0.4826445726356D+02-0.4822133287682D+02-0.4817776226967D+02 +-0.4813374216365D+02-0.4808926928306D+02-0.4804434035526D+02-0.4799895211091D+02 +-0.4795310128431D+02-0.4790678461358D+02-0.4785999884093D+02-0.4781274071282D+02 +-0.4776500698020D+02-0.4771679439861D+02-0.4766809972836D+02-0.4761891973461D+02 +-0.4756925118748D+02-0.4751909086208D+02-0.4746843553857D+02-0.4741728200213D+02 +-0.4736562704295D+02-0.4731346745620D+02-0.4726080004188D+02-0.4720762160479D+02 +-0.4715392895431D+02-0.4709971890425D+02-0.4704498827268D+02-0.4698973388163D+02 +-0.4693395255690D+02-0.4687764112767D+02-0.4682079642628D+02-0.4676341528777D+02 +-0.4670549454962D+02-0.4664703105122D+02-0.4658802163351D+02-0.4652846313853D+02 +-0.4646835240891D+02-0.4640768628735D+02-0.4634646161617D+02-0.4628467523671D+02 +-0.4622232398885D+02-0.4615940471037D+02-0.4609591423645D+02-0.4603184939910D+02 +-0.4596720702657D+02-0.4590198394276D+02-0.4583617696675D+02-0.4576978291218D+02 +-0.4570279858676D+02-0.4563522079176D+02-0.4556704632159D+02-0.4549827196328D+02 +-0.4542889449617D+02-0.4535891069156D+02-0.4528831731237D+02-0.4521711111299D+02 +-0.4514528883912D+02-0.4507284722768D+02-0.4499978300686D+02-0.4492609289624D+02 +-0.4485177360700D+02-0.4477682184233D+02-0.4470123429783D+02-0.4462500766219D+02 +-0.4454813861790D+02-0.4447062384219D+02-0.4439246000814D+02-0.4431364378589D+02 +-0.4423417184413D+02-0.4415404085174D+02-0.4407324747964D+02-0.4399178840285D+02 +-0.4390966030283D+02-0.4382685986996D+02-0.4374338380636D+02-0.4365922882888D+02 +-0.4357439167239D+02-0.4348886909331D+02-0.4340265787340D+02-0.4331575482384D+02 +-0.4322815678953D+02-0.4313986065369D+02-0.4305086334268D+02-0.4296116183110D+02 +-0.4287075314713D+02-0.4277963437808D+02-0.4268780267613D+02-0.4259525526436D+02 +-0.4250198944278D+02-0.4240800259471D+02-0.4231329219311D+02-0.4221785580702D+02 +-0.4212169110814D+02-0.4202479587724D+02-0.4192716801066D+02-0.4182880552657D+02 +-0.4172970657123D+02-0.4162986942478D+02-0.4152929250699D+02-0.4142797438248D+02 +-0.4132591376546D+02-0.4122310952415D+02-0.4111956068435D+02-0.4101526643252D+02 +-0.4091022611799D+02-0.4080443925436D+02-0.4069790551997D+02-0.4059062475744D+02 +-0.4048259697200D+02-0.4037382232884D+02-0.4026430114924D+02-0.4015403390548D+02 +-0.4004302121449D+02-0.3993126383031D+02-0.3981876263529D+02-0.3970551863000D+02 +-0.3959153292214D+02-0.3947680671418D+02-0.3936134129010D+02-0.3924513800125D+02 +-0.3912819825140D+02-0.3901052348125D+02-0.3889211515259D+02-0.3877297473220D+02 +-0.3865310367583D+02-0.3853250341248D+02-0.3841117532917D+02-0.3828912075654D+02 +-0.3816634095549D+02-0.3804283710513D+02-0.3791861029232D+02-0.3779366150300D+02 +-0.3766799161555D+02-0.3754160139636D+02-0.3741449149782D+02-0.3728666245883D+02 +-0.3715811470790D+02-0.3702884856900D+02-0.3689886427010D+02-0.3676816195438D+02 +-0.3663674169408D+02-0.3650460350690D+02-0.3637174737474D+02-0.3623817326473D+02 +-0.3610388115218D+02-0.3596887104531D+02-0.3583314301154D+02-0.3569669720495D+02 +-0.3555953389464D+02-0.3542165349386D+02-0.3528305658922D+02-0.3514374397011D+02 +-0.3500371665774D+02-0.3486297593358D+02-0.3472152336690D+02-0.3457936084122D+02 +-0.3443649057928D+02-0.3429291516643D+02-0.3414863757211D+02-0.3400366116934D+02 +-0.3385798975190D+02-0.3371162754922D+02-0.3356457923876D+02-0.3341684995570D+02 +-0.3326844530007D+02-0.3311937134098D+02-0.3296963461820D+02-0.3281924214079D+02 +-0.3266820138293D+02-0.3251652027694D+02-0.3236420720350D+02-0.3221127097903D+02 +-0.3205772084042D+02-0.3190356642710D+02-0.3174881776049D+02-0.3159348522098D+02 +-0.3143757952257D+02-0.3128111168511D+02-0.3112409300454D+02-0.3096653502093D+02 +-0.3080844948479D+02-0.3064984832153D+02-0.3049074359439D+02-0.3033114746593D+02 +-0.3017107215833D+02-0.3001052991254D+02-0.2984953294675D+02-0.2968809341400D+02 +-0.2952622335948D+02-0.2936393467762D+02-0.2920123906907D+02-0.2903814799805D+02 +-0.2887467265011D+02-0.2871082389066D+02-0.2854661222446D+02-0.2838204775647D+02 +-0.2821714015409D+02-0.2805189861135D+02-0.2788633181514D+02-0.2772044791378D+02 +-0.2755425448842D+02-0.2738775852723D+02-0.2722096640307D+02-0.2705388385454D+02 +-0.2688651597109D+02-0.2671886718221D+02-0.2655094125117D+02-0.2638274127348D+02 +-0.2621426968047D+02-0.2604552824823D+02-0.2587651811214D+02-0.2570723978730D+02 +-0.2553769319514D+02-0.2536787769632D+02-0.2519779213021D+02-0.2502743486110D+02 +-0.2485680383129D+02-0.2468589662112D+02-0.2451471051601D+02-0.2434324258050D+02 +-0.2417148973924D+02-0.2399944886481D+02-0.2382711687194D+02-0.2365449081810D+02 +-0.2348156800981D+02-0.2330834611404D+02-0.2313482327422D+02-0.2296099822964D+02 +-0.2278687043744D+02-0.2261244019567D+02-0.2243770876615D+02-0.2226267849517D+02 +-0.2208735293014D+02-0.2191173693001D+02-0.2173583676674D+02-0.2155966021537D+02 +-0.2138321662948D+02-0.2120651699903D+02-0.2102957398727D+02-0.2085240194340D+02 +-0.2067501688787D+02-0.2049743646710D+02-0.2031967987514D+02-0.2014176773999D+02 +-0.1996372197331D+02-0.1978556558301D+02-0.1960732244950D+02-0.1942901706755D+02 +-0.1925067425750D+02-0.1907231885074D+02-0.1889397535633D+02-0.1871566761696D+02 +-0.1853741846374D+02-0.1835924938052D+02-0.1818118018868D+02-0.1800322876380D+02 +-0.1782541079491D+02-0.1764773959582D+02-0.1747022597686D+02-0.1729287818264D+02 +-0.1711570189939D+02-0.1693870033244D+02-0.1676187435187D+02-0.1658522270158D+02 +-0.1640874226459D+02-0.1623242837596D+02-0.1605627517269D+02-0.1588027596970D+02 +-0.1570442365062D+02-0.1552871106216D+02-0.1535313140208D+02-0.1517767859145D+02 +-0.1500234762341D+02-0.1482713488228D+02-0.1465203842815D+02-0.1447705824363D+02 +-0.1430219644106D+02-0.1412745742929D+02-0.1395284804054D+02-0.1377837761854D+02 +-0.1360405806987D+02-0.1342990388081D+02-0.1325593210249D+02-0.1308216230731D+02 +-0.1290861651951D+02-0.1273531912305D+02-0.1256229674959D+02-0.1238957814960D+02 +-0.1221719404907D+02-0.1204517699438D+02-0.1187356118783D+02-0.1170238231558D+02 +-0.1153167737042D+02-0.1136148447069D+02-0.1119184267735D+02-0.1102279181034D+02 +-0.1085437226576D+02-0.1068662483495D+02-0.1051959052659D+02-0.1035331039265D+02 +-0.1018782535928D+02-0.1002317606321D+02-0.9859402694342D+01-0.9696544845323D+01 +-0.9534641368482D+01-0.9373730240659D+01-0.9213848436346D+01-0.9055031809511D+01 +-0.8897314984394D+01-0.8740731255549D+01-0.8585312497336D+01-0.8431089083029D+01 +-0.8278089813661D+01-0.8126341856676D+01-0.7975870694439D+01-0.7826700082584D+01 +-0.7678852018171D+01-0.7532346717566D+01-0.7387202603932D+01-0.7243436304187D+01 +-0.7101062655233D+01-0.6960094719270D+01-0.6820543807924D+01-0.6682419514939D+01 +-0.6545729757123D+01-0.6410480823229D+01-0.6276677430423D+01-0.6144322787958D+01 +-0.6013418667669D+01-0.5883965480867D+01-0.5755962361193D+01-0.5629407252975D+01 +-0.5504297004604D+01-0.5380627466436D+01-0.5258393592702D+01-0.5137589546863D+01 +-0.5018208809882D+01-0.4900244290793D+01-0.4783688438971D+01-0.4668533357470D+01 +-0.4554770916754D+01-0.4442392868124D+01-0.4331390956131D+01-0.4221757029192D+01 +-0.4113483147635D+01-0.4006561688322D+01-0.3900985445011D+01-0.3796747723533D+01 +-0.3693842430876D+01-0.3592264157211D+01-0.3492008249906D+01-0.3393070878541D+01 +-0.3295449089976D+01-0.3199140852531D+01-0.3104145088414D+01-0.3010461693592D+01 +-0.2918091544431D+01-0.2827036490592D+01-0.2737299333835D+01-0.2648883792669D+01 +-0.2561794453010D+01-0.2476036705393D+01-0.2391616669610D+01-0.2308541108029D+01 +-0.2226817329318D+01-0.2146453084634D+01-0.2067456458802D+01-0.1989835759339D+01 +-0.1913599406514D+01-0.1838755827812D+01-0.1765313360391D+01-0.1693280165020D+01 +-0.1622664154978D+01-0.1553472943063D+01-0.1485713809518D+01-0.1419393693186D+01 +-0.1354519207570D+01-0.1291096682842D+01-0.1229132234097D+01-0.1168631855453D+01 +-0.1109601538882D+01-0.1052047416050D+01-0.9959759208814D+00-0.9413939701484D+00 +-0.8883091590719D+00-0.8367299687430D+00-0.7866659821253D+00-0.7381281054637D+00 +-0.6911287920896D+00-0.6456822658698D+00-0.6018047418553D+00-0.5595146420441D+00 +-0.5188328045500D+00-0.4797826848498D+00-0.4423905481512D+00-0.4066856522662D+00 +-0.3727004206897D+00-0.3404706058472D+00-0.3100354427093D+00-0.2814377931599D+00 +-0.2547240189175D+00 + 0.0000000000000D+00 + 1012 0.2770741520224D+01 + 0.2150927949039D-04 0.2202124536575D-04 0.2254539478646D-04 0.2308201760180D-04 + 0.2363141055333D-04 0.2419387743865D-04 0.2476972927906D-04 0.2535928449121D-04 + 0.2596286906285D-04 0.2658081673262D-04 0.2721346917432D-04 0.2786117618535D-04 + 0.2852429587973D-04 0.2920319488569D-04 0.2989824854795D-04 0.3060984113473D-04 + 0.3133836604977D-04 0.3208422604934D-04 0.3284783346437D-04 0.3362961042788D-04 + 0.3442998910781D-04 0.3524941194536D-04 0.3608833189898D-04 0.3694721269416D-04 + 0.3782652907911D-04 0.3872676708658D-04 0.3964842430179D-04 0.4059201013679D-04 + 0.4155804611131D-04 0.4254706614023D-04 0.4355961682789D-04 0.4459625776943D-04 + 0.4565756185917D-04 0.4674411560639D-04 0.4785651945856D-04 0.4899538813222D-04 + 0.5016135095172D-04 0.5135505219602D-04 0.5257715145361D-04 0.5382832398596D-04 + 0.5510926109951D-04 0.5642067052648D-04 0.5776327681476D-04 0.5913782172693D-04 + 0.6054506464885D-04 0.6198578300785D-04 0.6346077270088D-04 0.6497084853274D-04 + 0.6651684466474D-04 0.6809961507398D-04 0.6972003402351D-04 0.7137899654355D-04 + 0.7307741892426D-04 0.7481623921999D-04 0.7659641776564D-04 0.7841893770513D-04 + 0.8028480553242D-04 0.8219505164534D-04 0.8415073091254D-04 0.8615292325379D-04 + 0.8820273423416D-04 0.9030129567206D-04 0.9244976626185D-04 0.9464933221109D-04 + 0.9690120789284D-04 0.9920663651351D-04 0.1015668907964D-03 0.1039832736813D-03 + 0.1064571190411D-03 0.1089897924148D-03 0.1115826917580D-03 0.1142372482113D-03 + 0.1169549268870D-03 0.1197372276738D-03 0.1225856860613D-03 0.1255018739831D-03 + 0.1284874006808D-03 0.1315439135877D-03 0.1346730992336D-03 0.1378766841712D-03 + 0.1411564359238D-03 0.1445141639563D-03 0.1479517206680D-03 0.1514710024102D-03 + 0.1550739505263D-03 0.1587625524179D-03 0.1625388426349D-03 0.1664049039925D-03 + 0.1703628687133D-03 0.1744149195974D-03 0.1785632912194D-03 0.1828102711544D-03 + 0.1871582012321D-03 0.1916094788209D-03 0.1961665581427D-03 0.2008319516176D-03 + 0.2056082312418D-03 0.2104980299966D-03 0.2155040432913D-03 0.2206290304405D-03 + 0.2258758161753D-03 0.2312472921908D-03 0.2367464187300D-03 0.2423762262044D-03 + 0.2481398168542D-03 0.2540403664457D-03 0.2600811260106D-03 0.2662654236245D-03 + 0.2725966662290D-03 0.2790783414953D-03 0.2857140197324D-03 0.2925073558401D-03 + 0.2994620913080D-03 0.3065820562611D-03 0.3138711715547D-03 0.3213334509168D-03 + 0.3289730031429D-03 0.3367940343406D-03 0.3448008502286D-03 0.3529978584881D-03 + 0.3613895711713D-03 0.3699806071650D-03 0.3787756947128D-03 0.3877796739964D-03 + 0.3969974997780D-03 0.4064342441040D-03 0.4160950990725D-03 0.4259853796663D-03 + 0.4361105266519D-03 0.4464761095462D-03 0.4570878296540D-03 0.4679515231757D-03 + 0.4790731643881D-03 0.4904588689006D-03 0.5021148969868D-03 0.5140476569946D-03 + 0.5262637088364D-03 0.5387697675611D-03 0.5515727070097D-03 0.5646795635561D-03 + 0.5780975399370D-03 0.5918340091694D-03 0.6058965185620D-03 0.6202927938188D-03 + 0.6350307432396D-03 0.6501184620192D-03 0.6655642366457D-03 0.6813765494038D-03 + 0.6975640829812D-03 0.7141357251847D-03 0.7311005737650D-03 0.7484679413557D-03 + 0.7662473605260D-03 0.7844485889531D-03 0.8030816147148D-03 0.8221566617048D-03 + 0.8416841951763D-03 0.8616749274129D-03 0.8821398235337D-03 0.9030901074324D-03 + 0.9245372678559D-03 0.9464930646236D-03 0.9689695349932D-03 0.9919790001731D-03 + 0.1015534071988D-02 0.1039647659698D-02 0.1064332976981D-02 0.1089603549068D-02 + 0.1115473220057D-02 0.1141956160389D-02 0.1169066874495D-02 0.1196820208634D-02 + 0.1225231358897D-02 0.1254315879409D-02 0.1284089690715D-02 0.1314569088366D-02 + 0.1345770751696D-02 0.1377711752814D-02 0.1410409565795D-02 0.1443882076088D-02 + 0.1478147590144D-02 0.1513224845264D-02 0.1549133019674D-02 0.1585891742841D-02 + 0.1623521106018D-02 0.1662041673040D-02 0.1701474491365D-02 0.1741841103378D-02 + 0.1783163557945D-02 0.1825464422244D-02 0.1868766793867D-02 0.1913094313196D-02 + 0.1958471176071D-02 0.2004922146751D-02 0.2052472571166D-02 0.2101148390486D-02 + 0.2150976154989D-02 0.2201983038264D-02 0.2254196851731D-02 0.2307646059493D-02 + 0.2362359793542D-02 0.2418367869301D-02 0.2475700801533D-02 0.2534389820612D-02 + 0.2594466889165D-02 0.2655964719104D-02 0.2718916789042D-02 0.2783357362106D-02 + 0.2849321504172D-02 0.2916845102501D-02 0.2985964884814D-02 0.3056718438800D-02 + 0.3129144232066D-02 0.3203281632551D-02 0.3279170929405D-02 0.3356853354336D-02 + 0.3436371103460D-02 0.3517767359634D-02 0.3601086315312D-02 0.3686373195913D-02 + 0.3773674283724D-02 0.3863036942351D-02 0.3954509641719D-02 0.4048141983652D-02 + 0.4143984728019D-02 0.4242089819491D-02 0.4342510414893D-02 0.4445300911185D-02 + 0.4550516974067D-02 0.4658215567249D-02 0.4768454982366D-02 0.4881294869584D-02 + 0.4996796268890D-02 0.5115021642093D-02 0.5236034905549D-02 0.5359901463622D-02 + 0.5486688242898D-02 0.5616463727181D-02 0.5749297993262D-02 0.5885262747508D-02 + 0.6024431363262D-02 0.6166878919093D-02 0.6312682237899D-02 0.6461919926891D-02 + 0.6614672418475D-02 0.6771022012045D-02 0.6931052916716D-02 0.7094851295016D-02 + 0.7262505307545D-02 0.7434105158642D-02 0.7609743143066D-02 0.7789513693721D-02 + 0.7973513430440D-02 0.8161841209859D-02 0.8354598176397D-02 0.8551887814376D-02 + 0.8753816001287D-02 0.8960491062250D-02 0.9172023825667D-02 0.9388527680122D-02 + 0.9610118632529D-02 0.9836915367568D-02 0.1006903930843D-01 0.1030661467892D-01 + 0.1054976856688D-01 0.1079863098909D-01 0.1105333495749D-01 0.1131401654696D-01 + 0.1158081496451D-01 0.1185387262003D-01 0.1213333519856D-01 0.1241935173418D-01 + 0.1271207468545D-01 0.1301166001257D-01 0.1331826725616D-01 0.1363205961778D-01 + 0.1395320404221D-01 0.1428187130150D-01 0.1461823608081D-01 0.1496247706623D-01 + 0.1531477703430D-01 0.1567532294367D-01 0.1604430602860D-01 0.1642192189452D-01 + 0.1680837061563D-01 0.1720385683464D-01 0.1760858986456D-01 0.1802278379280D-01 + 0.1844665758734D-01 0.1888043520531D-01 0.1932434570378D-01 0.1977862335297D-01 + 0.2024350775185D-01 0.2071924394615D-01 0.2120608254895D-01 0.2170427986376D-01 + 0.2221409801021D-01 0.2273580505238D-01 0.2326967512987D-01 0.2381598859160D-01 + 0.2437503213237D-01 0.2494709893234D-01 0.2553248879941D-01 0.2613150831454D-01 + 0.2674447098014D-01 0.2737169737147D-01 0.2801351529124D-01 0.2867025992742D-01 + 0.2934227401421D-01 0.3002990799646D-01 0.3073352019732D-01 0.3145347698951D-01 + 0.3219015296988D-01 0.3294393113773D-01 0.3371520307664D-01 0.3450436914006D-01 + 0.3531183864059D-01 0.3613803004319D-01 0.3698337116219D-01 0.3784829936233D-01 + 0.3873326176383D-01 0.3963871545150D-01 0.4056512768813D-01 0.4151297613205D-01 + 0.4248274905905D-01 0.4347494558865D-01 0.4449007591493D-01 0.4552866154180D-01 + 0.4659123552298D-01 0.4767834270657D-01 0.4879053998454D-01 0.4992839654695D-01 + 0.5109249414114D-01 0.5228342733595D-01 0.5350180379101D-01 0.5474824453121D-01 + 0.5602338422639D-01 0.5732787147645D-01 0.5866236910176D-01 0.6002755443915D-01 + 0.6142411964345D-01 0.6285277199472D-01 0.6431423421119D-01 0.6580924476805D-01 + 0.6733855822219D-01 0.6890294554290D-01 0.7050319444864D-01 0.7214010975008D-01 + 0.7381451369925D-01 0.7552724634520D-01 0.7727916589591D-01 0.7907114908690D-01 + 0.8090409155624D-01 0.8277890822643D-01 0.8469653369292D-01 0.8665792261951D-01 + 0.8866405014071D-01 0.9071591227111D-01 0.9281452632182D-01 0.9496093132410D-01 + 0.9715618846031D-01 0.9940138150208D-01 0.1016976172560D+00 0.1040460260169D+00 + 0.1064477620282D+00 0.1089040039508D+00 0.1114159553388D+00 0.1139848451236D+00 + 0.1166119281054D+00 0.1192984854532D+00 0.1220458252122D+00 0.1248552828197D+00 + 0.1277282216288D+00 0.1306660334408D+00 0.1336701390448D+00 0.1367419887670D+00 + 0.1398830630269D+00 0.1430948729031D+00 0.1463789607067D+00 0.1497369005636D+00 + 0.1531702990050D+00 0.1566807955666D+00 0.1602700633964D+00 0.1639398098711D+00 + 0.1676917772207D+00 0.1715277431623D+00 0.1754495215419D+00 0.1794589629856D+00 + 0.1835579555582D+00 0.1877484254317D+00 0.1920323375616D+00 0.1964116963718D+00 + 0.2008885464482D+00 0.2054649732406D+00 0.2101431037732D+00 0.2149251073635D+00 + 0.2198131963488D+00 0.2248096268222D+00 0.2299166993754D+00 0.2351367598503D+00 + 0.2404722000984D+00 0.2459254587480D+00 0.2514990219789D+00 0.2571954243047D+00 + 0.2630172493626D+00 0.2689671307106D+00 0.2750477526311D+00 0.2812618509418D+00 + 0.2876122138134D+00 0.2941016825931D+00 0.3007331526352D+00 0.3075095741362D+00 + 0.3144339529771D+00 0.3215093515700D+00 0.3287388897102D+00 0.3361257454325D+00 + 0.3436731558729D+00 0.3513844181328D+00 0.3592628901485D+00 0.3673119915621D+00 + 0.3755352045968D+00 0.3839360749336D+00 0.3925182125899D+00 0.4012852927993D+00 + 0.4102410568930D+00 0.4193893131804D+00 0.4287339378299D+00 0.4382788757486D+00 + 0.4480281414604D+00 0.4579858199819D+00 0.4681560676951D+00 0.4785431132164D+00 + 0.4891512582614D+00 0.4999848785043D+00 0.5110484244305D+00 0.5223464221834D+00 + 0.5338834744021D+00 0.5456642610510D+00 0.5576935402392D+00 0.5699761490289D+00 + 0.5825170042325D+00 0.5953211031952D+00 0.6083935245653D+00 0.6217394290472D+00 + 0.6353640601390D+00 0.6492727448516D+00 0.6634708944082D+00 0.6779640049238D+00 + 0.6927576580616D+00 0.7078575216668D+00 0.7232693503742D+00 0.7389989861895D+00 + 0.7550523590420D+00 0.7714354873073D+00 0.7881544782973D+00 0.8052155287175D+00 + 0.8226249250876D+00 0.8403890441249D+00 0.8585143530879D+00 0.8770074100784D+00 + 0.8958748642992D+00 0.9151234562658D+00 0.9347600179702D+00 0.9547914729931D+00 + 0.9752248365635D+00 0.9960672155622D+00 0.1017325808468D+01 0.1039007905241D+01 + 0.1061120887144D+01 0.1083672226499D+01 0.1106669486370D+01 0.1130120320176D+01 + 0.1154032471231D+01 0.1178413772204D+01 0.1203272144493D+01 0.1228615597523D+01 + 0.1254452227950D+01 0.1280790218774D+01 0.1307637838359D+01 0.1335003439353D+01 + 0.1362895457506D+01 0.1391322410385D+01 0.1420292895972D+01 0.1449815591159D+01 + 0.1479899250115D+01 0.1510552702537D+01 0.1541784851777D+01 0.1573604672833D+01 + 0.1606021210210D+01 0.1639043575644D+01 0.1672680945677D+01 0.1706942559091D+01 + 0.1741837714186D+01 0.1777375765901D+01 0.1813566122779D+01 0.1850418243757D+01 + 0.1887941634794D+01 0.1926145845317D+01 0.1965040464488D+01 0.2004635117287D+01 + 0.2044939460400D+01 0.2085963177919D+01 0.2127715976829D+01 0.2170207582300D+01 + 0.2213447732763D+01 0.2257446174769D+01 0.2302212657626D+01 0.2347756927812D+01 + 0.2394088723154D+01 0.2441217766767D+01 0.2489153760756D+01 0.2537906379665D+01 + 0.2587485263675D+01 0.2637900011547D+01 0.2689160173295D+01 0.2741275242598D+01 + 0.2794254648931D+01 0.2848107749430D+01 0.2902843820459D+01 0.2958472048904D+01 + 0.3015001523163D+01 0.3072441223848D+01 0.3130800014182D+01 0.3190086630094D+01 + 0.3250309670002D+01 0.3311477584285D+01 0.3373598664440D+01 0.3436681031917D+01 + 0.3500732626634D+01 0.3565761195166D+01 0.3631774278604D+01 0.3698779200090D+01 + 0.3766783052007D+01 0.3835792682854D+01 0.3905814683769D+01 0.3976855374728D+01 + 0.4048920790399D+01 0.4122016665671D+01 0.4196148420834D+01 0.4271321146438D+01 + 0.4347539587809D+01 0.4424808129241D+01 0.4503130777854D+01 0.4582511147131D+01 + 0.4662952440136D+01 0.4744457432406D+01 0.4827028454547D+01 0.4910667374509D+01 + 0.4995375579573D+01 0.5081153958042D+01 0.5168002880655D+01 0.5255922181721D+01 + 0.5344911139992D+01 0.5434968459290D+01 0.5526092248881D+01 0.5618280003639D+01 + 0.5711528583982D+01 0.5805834195616D+01 0.5901192369103D+01 0.5997597939257D+01 + 0.6095045024395D+01 0.6193527005472D+01 0.6293036505099D+01 0.6393565366487D+01 + 0.6495104632331D+01 0.6597644523660D+01 0.6701174418681D+01 0.6805682831645D+01 + 0.6911157391760D+01 0.7017584822191D+01 0.7124950919171D+01 0.7233240531258D+01 + 0.7342437538781D+01 0.7452524833500D+01 0.7563484298530D+01 0.7675296788562D+01 + 0.7787942110430D+01 0.7901399004058D+01 0.8015645123842D+01 0.8130657020509D+01 + 0.8246410123503D+01 0.8362878723950D+01 0.8480035958250D+01 0.8597853792358D+01 + 0.8716303006799D+01 0.8835353182487D+01 0.8954972687391D+01 0.9075128664130D+01 + 0.9195787018538D+01 0.9316912409273D+01 0.9438468238543D+01 0.9560416644000D+01 + 0.9682718491880D+01 0.9805333371460D+01 0.9928219590896D+01 0.1005133417453D+02 + 0.1017463286171D+02 0.1029807010722D+02 0.1042159908344D+02 0.1054517168417D+02 + 0.1066873853037D+02 0.1079224897780D+02 0.1091565112659D+02 0.1103889183301D+02 + 0.1116191672323D+02 0.1128467020944D+02 0.1140709550823D+02 0.1152913466133D+02 + 0.1165072855885D+02 0.1177181696506D+02 0.1189233854680D+02 0.1201223090454D+02 + 0.1213143060625D+02 0.1224987322407D+02 0.1236749337400D+02 0.1248422475837D+02 + 0.1260000021157D+02 0.1271475174875D+02 0.1282841061773D+02 0.1294090735413D+02 + 0.1305217183979D+02 0.1316213336451D+02 0.1327072069111D+02 0.1337786212400D+02 + 0.1348348558110D+02 0.1358751866928D+02 0.1368988876325D+02 0.1379052308804D+02 + 0.1388934880491D+02 0.1398629310084D+02 0.1408128328150D+02 0.1417424686776D+02 + 0.1426511169568D+02 0.1435380601989D+02 0.1444025862047D+02 0.1452439891313D+02 + 0.1460615706273D+02 0.1468546410000D+02 0.1476225204147D+02 0.1483645401237D+02 + 0.1490800437259D+02 0.1497683884540D+02 0.1504289464893D+02 0.1510611063019D+02 + 0.1516642740155D+02 0.1522378747941D+02 0.1527813542502D+02 0.1532941798703D+02 + 0.1537758424592D+02 0.1542258575964D+02 0.1546437671057D+02 0.1550291405346D+02 + 0.1553815766392D+02 0.1557007048740D+02 0.1559861868825D+02 0.1562377179849D+02 + 0.1564550286611D+02 0.1566378860245D+02 0.1567860952827D+02 0.1568995011828D+02 + 0.1569779894358D+02 0.1570214881171D+02 0.1570299690387D+02 0.1570034490889D+02 + 0.1569419915342D+02 0.1568457072811D+02 0.1567147560898D+02 0.1565493477391D+02 + 0.1563497431333D+02 0.1561162553504D+02 0.1558492506233D+02 0.1555491492507D+02 + 0.1552164264320D+02 0.1548516130217D+02 0.1544552961962D+02 0.1540281200312D+02 + 0.1535707859803D+02 0.1530840532536D+02 0.1525687390884D+02 0.1520257189079D+02 + 0.1514559263632D+02 0.1508603532531D+02 0.1502400493172D+02 0.1495961218971D+02 + 0.1489297354623D+02 0.1482421109950D+02 0.1475345252306D+02 0.1468083097499D+02 + 0.1460648499184D+02 0.1453055836709D+02 0.1445320001360D+02 0.1437456381003D+02 + 0.1429480843075D+02 0.1421409715909D+02 0.1413259768392D+02 0.1405048187912D+02 + 0.1396792556614D+02 0.1388510825940D+02 0.1380221289467D+02 0.1371942554036D+02 + 0.1363693509198D+02 0.1355493294972D+02 0.1347361267958D+02 0.1339316965818D+02 + 0.1331380070165D+02 0.1323570367897D+02 0.1315907711016D+02 0.1308411975004D+02 + 0.1301103015787D+02 0.1294000625373D+02 0.1287124486230D+02 0.1280494124477D+02 + 0.1274128861984D+02 0.1268047767460D+02 0.1262269606643D+02 0.1256812791682D+02 + 0.1251695329838D+02 0.1246934771604D+02 0.1242548158392D+02 0.1238551969900D+02 + 0.1234962071295D+02 0.1231793660373D+02 0.1229061214824D+02 0.1226778439767D+02 + 0.1224958215706D+02 0.1223612547078D+02 0.1222752511553D+02 0.1222388210258D+02 + 0.1222528719100D+02 0.1223182041366D+02 0.1224355061775D+02 0.1226053502171D+02 + 0.1228281879023D+02 0.1231043462935D+02 0.1234340240339D+02 0.1238172877543D+02 + 0.1242540687338D+02 0.1247441598324D+02 0.1252872127141D+02 0.1258827353770D+02 + 0.1265300900087D+02 0.1272284911822D+02 0.1279770044081D+02 0.1287745450601D+02 + 0.1296198776857D+02 0.1305116157186D+02 0.1314482216032D+02 0.1324280073454D+02 + 0.1334491354991D+02 0.1345096205988D+02 0.1356073310471D+02 0.1367399914649D+02 + 0.1379051855093D+02 0.1391003591655D+02 0.1403228245150D+02 0.1415697639825D+02 + 0.1428382350615D+02 0.1441251755180D+02 0.1454274090682D+02 0.1467416515265D+02 + 0.1480645174180D+02 0.1493925270450D+02 0.1507221140012D+02 0.1520496331175D+02 + 0.1533713688305D+02 0.1546835439544D+02 0.1559823288411D+02 0.1572638509088D+02 + 0.1585242045188D+02 0.1597594611769D+02 0.1609656800349D+02 0.1621389186673D+02 + 0.1632752440935D+02 0.1643707440175D+02 0.1654215382521D+02 0.1664237902974D+02 + 0.1673737190368D+02 0.1682676105166D+02 0.1691018297723D+02 0.1698728326633D+02 + 0.1705771776761D+02 0.1712115376582D+02 0.1717727114395D+02 0.1722576353007D+02 + 0.1726633942470D+02 0.1729872330429D+02 0.1732265669667D+02 0.1733789922408D+02 + 0.1734422960952D+02 0.1734144664198D+02 0.1732937009656D+02 0.1730784160492D+02 + 0.1727672547225D+02 0.1723590943644D+02 0.1718530536559D+02 0.1712484989008D+02 + 0.1705450496536D+02 0.1697425836203D+02 0.1688412407975D+02 0.1678414268193D+02 + 0.1667438154808D+02 0.1655493504124D+02 0.1642592458792D+02 0.1628749866833D+02 + 0.1613983271513D+02 0.1598312891883D+02 0.1581761593876D+02 0.1564354851859D+02 + 0.1546120700566D+02 0.1527089677411D+02 0.1507294755170D+02 0.1486771265109D+02 + 0.1465556810624D+02 0.1443691171558D+02 0.1421216199343D+02 0.1398175703206D+02 + 0.1374615327696D+02 0.1350582421831D+02 0.1326125900230D+02 0.1301296096613D+02 + 0.1276144610103D+02 0.1250724144826D+02 0.1225088343315D+02 0.1199291614280D+02 + 0.1173388955369D+02 0.1147435771520D+02 0.1121487689618D+02 0.1095600370143D+02 + 0.1069829316549D+02 0.1044229683153D+02 0.1018856082317D+02 0.9937623917321D+01 + 0.9690015626445D+01 0.9446254298643D+01 0.9206845244038D+01 0.8972278896087D+01 + 0.8743029016360D+01 0.8519550951297D+01 0.8302279949355D+01 0.8091629546790D+01 + 0.7887990030116D+01 0.7691726983014D+01 0.7503179925129D+01 0.7322661049902D+01 + 0.7150454068046D+01 0.6986813162918D+01 0.6831962063451D+01 0.6686093239819D+01 + 0.6549367226364D+01 0.6421912075717D+01 0.6303822947394D+01 0.6195161833447D+01 + 0.6095957423078D+01 0.6006205107394D+01 0.5925867124779D+01 0.5854872846611D+01 + 0.5793119202371D+01 0.5740471242429D+01 0.5696762836121D+01 0.5661797502031D+01 + 0.5635349366701D+01 0.5617164247353D+01 0.5606960853570D+01 0.5604432102259D+01 + 0.5609246539649D+01 0.5621049863505D+01 0.5639466538232D+01 0.5664101495024D+01 + 0.5694541908766D+01 0.5730359042993D+01 0.5771110153784D+01 0.5816340443192D+01 + 0.5865585052475D+01 0.5918371085180D+01 0.5974219649957D+01 0.6032647912832D+01 + 0.6093171148637D+01 0.6155304781260D+01 0.6218566402475D+01 0.6282477759234D+01 + 0.6346566699475D+01 0.6410369066815D+01 0.6473430534781D+01 0.6535308371644D+01 + 0.6595573127395D+01 0.6653810234872D+01 0.6709621517670D+01 0.6762626598041D+01 + 0.6812464198680D+01 0.6858793332986D+01 0.6901294379138D+01 0.6939670034070D+01 + 0.6973646144233D+01 0.7002972410830D+01 0.7027422967990D+01 0.7046796833200D+01 + 0.7060918230061D+01 0.7069636784259D+01 0.7072827594374D+01 0.7070391179926D+01 + 0.7062253309715D+01 0.7048364714231D+01 0.7028700686483D+01 0.7003260576238D+01 + 0.6972067183121D+01 0.6935166054562D+01 0.6892624694966D+01 0.6844531692843D+01 + 0.6790995772965D+01 0.6732144780827D+01 0.6668124606899D+01 0.6599098058289D+01 + 0.6525243685473D+01 0.6446754571799D+01 0.6363837093418D+01 0.6276709657188D+01 + 0.6185601423998D+01 0.6090751024726D+01 0.5992405275866D+01 0.5890817901556D+01 + 0.5786248268476D+01 0.5678960139726D+01 0.5569220453475D+01 0.5457298131760D+01 + 0.5343462924443D+01 0.5227984292928D+01 0.5111130337809D+01 0.4993166774192D+01 + 0.4874355958030D+01 0.4754955966341D+01 0.4635219733799D+01 0.4515394247714D+01 + 0.4395719803061D+01 0.4276429318764D+01 0.4157747716089D+01 0.4039891359594D+01 + 0.3923067560758D+01 0.3807474144035D+01 0.3693299074769D+01 0.3580720148118D+01 + 0.3469904737816D+01 0.3361009603367D+01 0.3254180754011D+01 0.3149553367571D+01 + 0.3047251762116D+01 0.2947389418162D+01 0.2850069049006D+01 0.2755382716614D+01 + 0.2663411990420D+01 0.2574228146230D+01 0.2487892402405D+01 0.2404456190400D+01 + 0.2323961456713D+01 0.2246440993268D+01 0.2171918793250D+01 0.2100410429420D+01 + 0.2031923451965D+01 0.1966457802972D+01 0.1904006244666D+01 0.1844554798640D+01 + 0.1788083193345D+01 0.1734565317240D+01 0.1683969675070D+01 0.1636259844862D+01 + 0.1591394933364D+01 0.1549330027746D+01 0.1510016641546D+01 0.1473403152964D+01 + 0.1439435233770D+01 0.1408056267219D+01 0.1379207753531D+01 0.1352829701650D+01 + 0.1328861006133D+01 0.1307239808175D+01 0.1287903839946D+01 0.1270790751526D+01 + 0.1255838419882D+01 0.1242985239474D+01 0.1232170394175D+01 0.1223334110328D+01 + 0.1216417890857D+01 0.1211364730456D+01 0.1208119311934D+01 0.1206628183910D+01 + 0.1206839920052D+01 0.1208705260142D+01 0.1212177233248D+01 0.1217211263310D+01 + 0.1223765257423D+01 0.1231799677111D+01 0.1241277592815D+01 0.1252164721788D+01 + 0.1264429449524D+01 0.1278042834732D+01 0.1292978597814D+01 0.1309213092627D+01 + 0.1326725261233D+01 0.1345496571135D+01 0.1365510934358D+01 0.1386754607532D+01 + 0.1409215426363D+01 0.1433003097507D+01 0.1458223277591D+01 0.1484860699421D+01 + 0.1512902583279D+01 0.1542338542721D+01 0.1573160498496D+01 0.1605362600812D+01 + 0.1638941160170D+01 0.1673894586973D+01 0.1710223340083D+01 0.1747929884514D+01 + 7 1012 + 1 0 -1 -511.89150 + 2 0 -1 -58.80097 + 2 1 1 -50.61290 + 2 1 -2 -49.69692 + 3 0 -1 -5.52718 + 3 1 1 -3.14309 + 3 1 -2 -3.03034 + 0.2123373461549D-04 0.2173914995400D-04 0.2225659296114D-04 0.2278634977738D-04 + 0.2332871334728D-04 0.2388398358121D-04 0.2445246752083D-04 0.2503447950857D-04 + 0.2563034136106D-04 0.2624038254674D-04 0.2686494036763D-04 0.2750436014548D-04 + 0.2815899541226D-04 0.2882920810522D-04 0.2951536876657D-04 0.3021785674791D-04 + 0.3093706041946D-04 0.3167337738432D-04 0.3242721469777D-04 0.3319898909177D-04 + 0.3398912720483D-04 0.3479806581728D-04 0.3562625209215D-04 0.3647414382175D-04 + 0.3734220968012D-04 0.3823092948144D-04 0.3914079444457D-04 0.4007230746391D-04 + 0.4102598338660D-04 0.4200234929636D-04 0.4300194480406D-04 0.4402532234512D-04 + 0.4507304748402D-04 0.4614569922601D-04 0.4724387033618D-04 0.4836816766617D-04 + 0.4951921248852D-04 0.5069764083903D-04 0.5190410386721D-04 0.5313926819498D-04 + 0.5440381628400D-04 0.5569844681152D-04 0.5702387505533D-04 0.5838083328767D-04 + 0.5977007117859D-04 0.6119235620880D-04 0.6264847409228D-04 0.6413922920902D-04 + 0.6566544504782D-04 0.6722796465978D-04 0.6882765112238D-04 0.7046538801462D-04 + 0.7214207990339D-04 0.7385865284136D-04 0.7561605487667D-04 0.7741525657465D-04 + 0.7925725155197D-04 0.8114305702331D-04 0.8307371436110D-04 0.8505028966841D-04 + 0.8707387436545D-04 0.8914558578994D-04 0.9126656781168D-04 0.9343799146165D-04 + 0.9566105557602D-04 0.9793698745538D-04 0.1002670435396D-03 0.1026525100984D-03 + 0.1050947039390D-03 0.1075949731294D-03 0.1101546977394D-03 0.1127752905997D-03 + 0.1154581980775D-03 0.1182049008719D-03 0.1210169148270D-03 0.1238957917652D-03 + 0.1268431203390D-03 0.1298605269045D-03 0.1329496764137D-03 0.1361122733297D-03 + 0.1393500625619D-03 0.1426648304247D-03 0.1460584056178D-03 0.1495326602303D-03 + 0.1530895107681D-03 0.1567309192056D-03 0.1604588940629D-03 0.1642754915072D-03 + 0.1681828164816D-03 0.1721830238593D-03 0.1762783196258D-03 0.1804709620887D-03 + 0.1847632631165D-03 0.1891575894056D-03 0.1936563637785D-03 0.1982620665115D-03 + 0.2029772366947D-03 0.2078044736231D-03 0.2127464382210D-03 0.2178058545005D-03 + 0.2229855110531D-03 0.2282882625778D-03 0.2337170314442D-03 0.2392748092933D-03 + 0.2449646586752D-03 0.2507897147258D-03 0.2567531868833D-03 0.2628583606444D-03 + 0.2691085993625D-03 0.2755073460880D-03 0.2820581254518D-03 0.2887645455935D-03 + 0.2956303001344D-03 0.3026591701977D-03 0.3098550264756D-03 0.3172218313454D-03 + 0.3247636410353D-03 0.3324846078408D-03 0.3403889823939D-03 0.3484811159850D-03 + 0.3567654629401D-03 0.3652465830528D-03 0.3739291440747D-03 0.3828179242637D-03 + 0.3919178149916D-03 0.4012338234146D-03 0.4107710752045D-03 0.4205348173457D-03 + 0.4305304209971D-03 0.4407633844209D-03 0.4512393359813D-03 0.4619640372121D-03 + 0.4729433859575D-03 0.4841834195856D-03 0.4956903182785D-03 0.5074704083979D-03 + 0.5195301659314D-03 0.5318762200182D-03 0.5445153565579D-03 0.5574545219044D-03 + 0.5707008266453D-03 0.5842615494708D-03 0.5981441411326D-03 0.6123562284955D-03 + 0.6269056186847D-03 0.6418003033287D-03 0.6570484629028D-03 0.6726584711734D-03 + 0.6886388997468D-03 0.7049985227240D-03 0.7217463214642D-03 0.7388914894603D-03 + 0.7564434373277D-03 0.7744117979097D-03 0.7928064315026D-03 0.8116374312024D-03 + 0.8309151283763D-03 0.8506500982622D-03 0.8708531656989D-03 0.8915354109894D-03 + 0.9127081759015D-03 0.9343830698083D-03 0.9565719759715D-03 0.9792870579714D-03 + 0.1002540766287D-02 0.1026345845027D-02 0.1050715338824D-02 0.1075662599879D-02 + 0.1101201295181D-02 0.1127345413883D-02 0.1154109274864D-02 0.1181507534450D-02 + 0.1209555194328D-02 0.1238267609637D-02 0.1267660497252D-02 0.1297749944251D-02 + 0.1328552416593D-02 0.1360084767981D-02 0.1392364248945D-02 0.1425408516127D-02 + 0.1459235641785D-02 0.1493864123514D-02 0.1529312894196D-02 0.1565601332181D-02 + 0.1602749271697D-02 0.1640777013510D-02 0.1679705335822D-02 0.1719555505429D-02 + 0.1760349289133D-02 0.1802108965417D-02 0.1844857336390D-02 0.1888617740010D-02 + 0.1933414062589D-02 0.1979270751585D-02 0.2026212828687D-02 0.2074265903209D-02 + 0.2123456185786D-02 0.2173810502385D-02 0.2225356308647D-02 0.2278121704551D-02 + 0.2332135449417D-02 0.2387426977257D-02 0.2444026412476D-02 0.2501964585936D-02 + 0.2561273051389D-02 0.2621984102285D-02 0.2684130788965D-02 0.2747746936258D-02 + 0.2812867161465D-02 0.2879526892772D-02 0.2947762388071D-02 0.3017610754222D-02 + 0.3089109966753D-02 0.3162298890003D-02 0.3237217297741D-02 0.3313905894238D-02 + 0.3392406335837D-02 0.3472761253004D-02 0.3555014272883D-02 0.3639210042377D-02 + 0.3725394251736D-02 0.3813613658698D-02 0.3903916113173D-02 0.3996350582488D-02 + 0.4090967177209D-02 0.4187817177547D-02 0.4286953060364D-02 0.4388428526794D-02 + 0.4492298530489D-02 0.4598619306504D-02 0.4707448400838D-02 0.4818844700646D-02 + 0.4932868465127D-02 0.5049581357120D-02 0.5169046475404D-02 0.5291328387739D-02 + 0.5416493164639D-02 0.5544608413917D-02 0.5675743316002D-02 0.5809968660057D-02 + 0.5947356880904D-02 0.6087982096781D-02 0.6231920147946D-02 0.6379248636155D-02 + 0.6530046965011D-02 0.6684396381234D-02 0.6842380016839D-02 0.7004082932273D-02 + 0.7169592160503D-02 0.7338996752102D-02 0.7512387821327D-02 0.7689858593235D-02 + 0.7871504451850D-02 0.8057422989391D-02 0.8247714056607D-02 0.8442479814225D-02 + 0.8641824785540D-02 0.8845855910175D-02 0.9054682599025D-02 0.9268416790430D-02 + 0.9487173007575D-02 0.9711068417172D-02 0.9940222889430D-02 0.1017475905935D-01 + 0.1041480238936D-01 0.1066048123337D-01 0.1091192690214D-01 0.1116927373022D-01 + 0.1143265914425D-01 0.1170222373276D-01 0.1197811131760D-01 0.1226046902681D-01 + 0.1254944736912D-01 0.1284520031015D-01 0.1314788535014D-01 0.1345766360348D-01 + 0.1377469987990D-01 0.1409916276750D-01 0.1443122471744D-01 0.1477106213063D-01 + 0.1511885544620D-01 0.1547478923187D-01 0.1583905227632D-01 0.1621183768351D-01 + 0.1659334296907D-01 0.1698377015868D-01 0.1738332588869D-01 0.1779222150874D-01 + 0.1821067318670D-01 0.1863890201578D-01 0.1907713412394D-01 0.1952560078568D-01 + 0.1998453853608D-01 0.2045418928739D-01 0.2093480044805D-01 0.2142662504416D-01 + 0.2192992184360D-01 0.2244495548276D-01 0.2297199659585D-01 0.2351132194704D-01 + 0.2406321456527D-01 0.2462796388197D-01 0.2520586587156D-01 0.2579722319499D-01 + 0.2640234534617D-01 0.2702154880148D-01 0.2765515717239D-01 0.2830350136121D-01 + 0.2896691972007D-01 0.2964575821319D-01 0.3034037058244D-01 0.3105111851634D-01 + 0.3177837182251D-01 0.3252250860359D-01 0.3328391543683D-01 0.3406298755727D-01 + 0.3486012904465D-01 0.3567575301409D-01 0.3651028181063D-01 0.3736414720771D-01 + 0.3823779060956D-01 0.3913166325773D-01 0.4004622644169D-01 0.4098195171364D-01 + 0.4193932110758D-01 0.4291882736274D-01 0.4392097415138D-01 0.4494627631115D-01 + 0.4599526008193D-01 0.4706846334735D-01 0.4816643588104D-01 0.4928973959763D-01 + 0.5043894880863D-01 0.5161465048329D-01 0.5281744451445D-01 0.5404794398948D-01 + 0.5530677546647D-01 0.5659457925562D-01 0.5791200970601D-01 0.5925973549779D-01 + 0.6063843993988D-01 0.6204882127328D-01 0.6349159298001D-01 0.6496748409788D-01 + 0.6647723954103D-01 0.6802162042643D-01 0.6960140440641D-01 0.7121738600725D-01 + 0.7287037697395D-01 0.7456120662128D-01 0.7629072219118D-01 0.7805978921657D-01 + 0.7986929189166D-01 0.8172013344892D-01 0.8361323654265D-01 0.8554954363940D-01 + 0.8753001741513D-01 0.8955564115940D-01 0.9162741918654D-01 0.9374637725383D-01 + 0.9591356298698D-01 0.9813004631275D-01 0.1003969198990D+00 0.1027152996019D+00 + 0.1050863249211D+00 0.1075111594618D+00 0.1099909914051D+00 0.1125270339855D+00 + 0.1151205259766D+00 0.1177727321842D+00 0.1204849439476D+00 0.1232584796489D+00 + 0.1260946852301D+00 0.1289949347182D+00 0.1319606307590D+00 0.1349932051583D+00 + 0.1380941194317D+00 0.1412648653632D+00 0.1445069655708D+00 0.1478219740820D+00 + 0.1512114769165D+00 0.1546770926778D+00 0.1582204731535D+00 0.1618433039236D+00 + 0.1655473049771D+00 0.1693342313383D+00 0.1732058737000D+00 0.1771640590662D+00 + 0.1812106514032D+00 0.1853475522988D+00 0.1895767016304D+00 0.1939000782413D+00 + 0.1983197006251D+00 0.2028376276193D+00 0.2074559591063D+00 0.2121768367234D+00 + 0.2170024445803D+00 0.2219350099852D+00 0.2269768041788D+00 0.2321301430764D+00 + 0.2373973880172D+00 0.2427809465221D+00 0.2482832730585D+00 0.2539068698131D+00 + 0.2596542874715D+00 0.2655281260047D+00 0.2715310354636D+00 0.2776657167793D+00 + 0.2839349225700D+00 0.2903414579550D+00 0.2968881813739D+00 0.3035780054119D+00 + 0.3104138976312D+00 0.3173988814070D+00 0.3245360367687D+00 0.3318285012460D+00 + 0.3392794707188D+00 0.3468922002717D+00 0.3546700050516D+00 0.3626162611285D+00 + 0.3707344063591D+00 0.3790279412529D+00 0.3875004298396D+00 0.3961555005386D+00 + 0.4049968470283D+00 0.4140282291162D+00 0.4232534736091D+00 0.4326764751811D+00 + 0.4423011972414D+00 0.4521316727988D+00 0.4621720053237D+00 0.4724263696067D+00 + 0.4828990126121D+00 0.4935942543268D+00 0.5045164886027D+00 0.5156701839924D+00 + 0.5270598845772D+00 0.5386902107861D+00 0.5505658602051D+00 0.5626916083760D+00 + 0.5750723095830D+00 0.5877128976270D+00 0.6006183865849D+00 0.6137938715547D+00 + 0.6272445293836D+00 0.6409756193782D+00 0.6549924839961D+00 0.6693005495166D+00 + 0.6839053266899D+00 0.6988124113627D+00 0.7140274850788D+00 0.7295563156538D+00 + 0.7454047577210D+00 0.7615787532478D+00 0.7780843320207D+00 0.7949276120969D+00 + 0.8121148002200D+00 0.8296521921997D+00 0.8475461732513D+00 0.8658032182945D+00 + 0.8844298922086D+00 0.9034328500427D+00 0.9228188371772D+00 0.9425946894360D+00 + 0.9627673331456D+00 0.9833437851400D+00 0.1004331152707D+01 0.1025736633476D+01 + 0.1047567515241D+01 0.1069831175720D+01 0.1092535082243D+01 0.1115686791375D+01 + 0.1139293948457D+01 0.1163364287075D+01 0.1187905628445D+01 0.1212925880722D+01 + 0.1238433038208D+01 0.1264435180485D+01 0.1290940471443D+01 0.1317957158220D+01 + 0.1345493570030D+01 0.1373558116898D+01 0.1402159288280D+01 0.1431305651569D+01 + 0.1461005850494D+01 0.1491268603389D+01 0.1522102701342D+01 0.1553517006218D+01 + 0.1585520448546D+01 0.1618122025271D+01 0.1651330797361D+01 0.1685155887276D+01 + 0.1719606476280D+01 0.1754691801602D+01 0.1790421153434D+01 0.1826803871767D+01 + 0.1863849343063D+01 0.1901566996742D+01 0.1939966301501D+01 0.1979056761446D+01 + 0.2018847912032D+01 0.2059349315815D+01 0.2100570557999D+01 0.2142521241790D+01 + 0.2185210983528D+01 0.2228649407614D+01 0.2272846141215D+01 0.2317810808747D+01 + 0.2363553026124D+01 0.2410082394775D+01 0.2457408495423D+01 0.2505540881617D+01 + 0.2554489073015D+01 0.2604262548407D+01 0.2654870738488D+01 0.2706323018355D+01 + 0.2758628699743D+01 0.2811797022979D+01 0.2865837148659D+01 0.2920758149043D+01 + 0.2976568999160D+01 0.3033278567615D+01 0.3090895607108D+01 0.3149428744640D+01 + 0.3208886471423D+01 0.3269277132479D+01 0.3330608915918D+01 0.3392889841912D+01 + 0.3456127751341D+01 0.3520330294118D+01 0.3585504917195D+01 0.3651658852234D+01 + 0.3718799102956D+01 0.3786932432154D+01 0.3856065348377D+01 0.3926204092282D+01 + 0.3997354622651D+01 0.4069522602076D+01 0.4142713382310D+01 0.4216931989288D+01 + 0.4292183107814D+01 0.4368471065927D+01 0.4445799818928D+01 0.4524172933100D+01 + 0.4603593569097D+01 0.4684064465021D+01 0.4765587919192D+01 0.4848165772611D+01 + 0.4931799391130D+01 0.5016489647323D+01 0.5102236902085D+01 0.5189040985952D+01 + 0.5276901180158D+01 0.5365816197444D+01 0.5455784162617D+01 0.5546802592894D+01 + 0.5638868378017D+01 0.5731977760181D+01 0.5826126313769D+01 0.5921308924927D+01 + 0.6017519770983D+01 0.6114752299744D+01 0.6212999208681D+01 0.6312252424025D+01 + 0.6412503079799D+01 0.6513741496818D+01 0.6615957161666D+01 0.6719138705689D+01 + 0.6823273884037D+01 0.6928349554769D+01 0.7034351658067D+01 0.7141265195588D+01 + 0.7249074209985D+01 0.7357761764637D+01 0.7467309923627D+01 0.7577699732003D+01 + 0.7688911196366D+01 0.7800923265826D+01 0.7913713813378D+01 0.8027259617727D+01 + 0.8141536345630D+01 0.8256518534789D+01 0.8372179577355D+01 0.8488491704090D+01 + 0.8605425969248D+01 0.8722952236222D+01 0.8841039164025D+01 0.8959654194655D+01 + 0.9078763541413D+01 0.9198332178230D+01 0.9318323830066D+01 0.9438700964464D+01 + 0.9559424784293D+01 0.9680455221780D+01 0.9801750933887D+01 0.9923269299099D+01 + 0.1004496641570D+02 0.1016679710163D+02 0.1028871489593D+02 0.1041067206198D+02 + 0.1053261959239D+02 0.1065450721594D+02 0.1077628340626D+02 0.1089789539267D+02 + 0.1101928917306D+02 0.1114040952889D+02 0.1126120004259D+02 0.1138160311709D+02 + 0.1150155999788D+02 0.1162101079752D+02 0.1173989452270D+02 0.1185814910389D+02 + 0.1197571142774D+02 0.1209251737221D+02 0.1220850184455D+02 0.1232359882222D+02 + 0.1243774139668D+02 0.1255086182033D+02 0.1266289155645D+02 0.1277376133233D+02 + 0.1288340119558D+02 0.1299174057364D+02 0.1309870833671D+02 0.1320423286383D+02 + 0.1330824211245D+02 0.1341066369131D+02 0.1351142493681D+02 0.1361045299271D+02 + 0.1370767489335D+02 0.1380301765027D+02 0.1389640834224D+02 0.1398777420882D+02 + 0.1407704274716D+02 0.1416414181234D+02 0.1424899972093D+02 0.1433154535791D+02 + 0.1441170828680D+02 0.1448941886294D+02 0.1456460834990D+02 0.1463720903887D+02 + 0.1470715437095D+02 0.1477437906225D+02 0.1483881923166D+02 0.1490041253114D+02 + 0.1495909827839D+02 0.1501481759178D+02 0.1506751352732D+02 0.1511713121747D+02 + 0.1516361801165D+02 0.1520692361818D+02 0.1524700024742D+02 0.1528380275595D+02 + 0.1531728879140D+02 0.1534741893776D+02 0.1537415686084D+02 0.1539746945363D+02 + 0.1541732698111D+02 0.1543370322439D+02 0.1544657562364D+02 0.1545592541956D+02 + 0.1546173779302D+02 0.1546400200242D+02 0.1546271151843D+02 0.1545786415570D+02 + 0.1544946220111D+02 0.1543751253809D+02 0.1542202676661D+02 0.1540302131844D+02 + 0.1538051756708D+02 0.1535454193202D+02 0.1532512597682D+02 0.1529230650045D+02 + 0.1525612562157D+02 0.1521663085508D+02 0.1517387518057D+02 0.1512791710213D+02 + 0.1507882069905D+02 0.1502665566690D+02 0.1497149734847D+02 0.1491342675424D+02 + 0.1485253057170D+02 0.1478890116319D+02 0.1472263655178D+02 0.1465384039476D+02 + 0.1458262194423D+02 0.1450909599456D+02 0.1443338281613D+02 0.1435560807511D+02 + 0.1427590273888D+02 0.1419440296685D+02 0.1411124998625D+02 0.1402658995277D+02 + 0.1394057379573D+02 0.1385335704764D+02 0.1376509965795D+02 0.1367596579089D+02 + 0.1358612360737D+02 0.1349574503081D+02 0.1340500549696D+02 0.1331408368786D+02 + 0.1322316124986D+02 0.1313242249599D+02 0.1304205409292D+02 0.1295224473262D+02 + 0.1286318478926D+02 0.1277506596148D+02 0.1268808090072D+02 0.1260242282594D+02 + 0.1251828512526D+02 0.1243586094535D+02 0.1235534276899D+02 0.1227692198172D+02 + 0.1220078842830D+02 0.1212712995982D+02 0.1205613197253D+02 0.1198797693913D+02 + 0.1192284393379D+02 0.1186090815186D+02 0.1180234042546D+02 0.1174730673615D+02 + 0.1169596772603D+02 0.1164847820834D+02 0.1160498667924D+02 0.1156563483188D+02 + 0.1153055707436D+02 0.1149988005301D+02 0.1147372218250D+02 0.1145219318434D+02 + 0.1143539363525D+02 0.1142341452711D+02 0.1141633683999D+02 0.1141423112993D+02 + 0.1141715713298D+02 0.1142516338731D+02 0.1143828687474D+02 0.1145655268355D+02 + 0.1147997369390D+02 0.1150855028761D+02 0.1154227008374D+02 0.1158110770138D+02 + 0.1162502455129D+02 0.1167396865756D+02 0.1172787451079D+02 0.1178666295396D+02 + 0.1185024110228D+02 0.1191850229803D+02 0.1199132610159D+02 0.1206857831946D+02 + 0.1215011107019D+02 0.1223576288907D+02 0.1232535887199D+02 0.1241871085933D+02 + 0.1251561765997D+02 0.1261586531600D+02 0.1271922740805D+02 0.1282546540151D+02 + 0.1293432903330D+02 0.1304555673916D+02 0.1315887612096D+02 0.1327400445348D+02 + 0.1339064923005D+02 0.1350850874625D+02 0.1362727272054D+02 0.1374662295087D+02 + 0.1386623400591D+02 0.1398577394943D+02 0.1410490509638D+02 0.1422328479880D+02 + 0.1434056625987D+02 0.1445639937388D+02 0.1457043159027D+02 0.1468230879914D+02 + 0.1479167623614D+02 0.1489817940404D+02 0.1500146500841D+02 0.1510118190471D+02 + 0.1519698205391D+02 0.1528852148379D+02 0.1537546125281D+02 0.1545746841364D+02 + 0.1553421697307D+02 0.1560538884523D+02 0.1567067479483D+02 0.1572977536717D+02 + 0.1578240180176D+02 0.1582827692612D+02 0.1586713602663D+02 0.1589872769311D+02 + 0.1592281463392D+02 0.1593917445849D+02 0.1594760042409D+02 0.1594790214378D+02 + 0.1593990625272D+02 0.1592345702984D+02 0.1589841697221D+02 0.1586466731948D+02 + 0.1582210852585D+02 0.1577066067732D+02 0.1571026385193D+02 0.1564087842120D+02 + 0.1556248529064D+02 0.1547508607802D+02 0.1537870322780D+02 0.1527338006062D+02 + 0.1515918075676D+02 0.1503619027308D+02 0.1490451419267D+02 0.1476427850715D+02 + 0.1461562933169D+02 0.1445873255288D+02 0.1429377341010D+02 0.1412095601137D+02 + 0.1394050278444D+02 0.1375265386499D+02 0.1355766642312D+02 0.1335581393054D+02 + 0.1314738537038D+02 0.1293268439219D+02 0.1271202841511D+02 0.1248574768189D+02 + 0.1225418426740D+02 0.1201769104500D+02 0.1177663061449D+02 0.1153137419578D+02 + 0.1128230049248D+02 0.1102979452961D+02 0.1077424647032D+02 0.1051605041603D+02 + 0.1025560319513D+02 0.9993303145083D+01 0.9729548892983D+01 0.9464738139829D+01 + 0.9199266453606D+01 0.8933526076402D+01 0.8667904750745D+01 0.8402784570301D+01 + 0.8138540859996D+01 0.7875541090527D+01 0.7614143832090D+01 0.7354697751983D+01 + 0.7097540660550D+01 0.6842998609696D+01 0.6591385047920D+01 0.6343000035605D+01 + 0.6098129523858D+01 0.5857044699944D+01 0.5620001401934D+01 0.5387239604814D+01 + 0.5158982979846D+01 0.4935438528573D+01 0.4716796292366D+01 0.4503229137976D+01 + 0.4294892619056D+01 0.4091924913152D+01 0.3894446833193D+01 0.3702561912045D+01 + 0.3516356558237D+01 0.3335900280537D+01 0.3161245978670D+01 0.2992430297065D+01 + 0.2829474038194D+01 0.2672382631762D+01 0.2521146655720D+01 0.2375742404881D+01 + 0.2236132502695D+01 0.2102266551639D+01 0.1974081817541D+01 0.1851503943111D+01 + 0.1734447685940D+01 0.1622817676200D+01 0.1516509189368D+01 0.1415408929331D+01 + 0.1319395817360D+01 0.1228341782531D+01 0.1142112549373D+01 0.1060568418635D+01 + 0.9835650373019D+00 0.9109541541726D+00 0.8425843575459D+00 0.7783017917968D+00 + 0.7179508498817D+00 0.6613748390683D+00 0.6084166174653D+00 0.5589191992012D+00 + 0.5127263263911D+00 0.4696830063190D+00 0.4296360125529D+00 0.3924343490009D+00 + 0.3579296762027D+00 0.3259766994340D+00 0.2964335184742D+00 0.2691619391536D+00 + 0.2440277470488D+00 0.2209009439361D+00 0.1996559478365D+00 0.1801717576938D+00 + 0.1623320839184D+00 0.1460254461990D+00 0.1311452401368D+00 0.1175897743854D+00 + 0.1052622800912D+00 0.9407089451527D-01 0.8392862078550D-01 0.7475326577690D-01 + 0.6646735814128D-01 0.5899804851766D-01 0.5227699394346D-01 0.4624022845899D-01 + 0.4082802185442D-01 0.3598472845105D-01 0.3165862773800D-01 0.2780175860384D-01 + 0.2436974881146D-01 0.2132164126495D-01 0.1861971851162D-01 0.1622932681167D-01 + 0.1411870099424D-01 0.1225879120292D-01 0.1062309251766D-01 0.9187478324824D-02 + 0.7930038194170D-02 0.6830920911119D-02 0.5872183206948D-02 0.5037644628161D-02 + 0.4312748890659D-02 0.3684431974697D-02 0.3140997133459D-02 0.2671996911721D-02 + 0.2268122201696D-02 0.1921098300832D-02 0.1623587881022D-02 0.1369100730387D-02 + 0.1151910087150D-02 0.9669753500508D-03 0.8098709208516D-03 0.6767209113939D-03 + 0.5641394300578D-03 0.4691761498429D-03 0.3892668522563D-03 0.3221886372696D-03 + 0.2660194893607D-03 0.2191018926233D-03 0.1800101936858D-03 0.1475214192933D-03 + 0.1205892654847D-03 0.9832098695562D-04 0.7995692809159D-04 0.6485245095860D-04 + 0.5246202996510D-04 0.4232529769133D-04 0.3405484129524D-04 0.2732556374477D-04 + 0.2186543872353D-04 0.1744750226736D-04 0.1388293789508D-04 0.1101512510421D-04 + 0.8714533541124D-05 0.6874356872787D-05 0.5406791351919D-05 0.4239874261002D-05 + 0.3314806839624D-05 0.2583694952262D-05 0.2007648657315D-05 0.1555189018603D-05 + 0.1200916989437D-05 0.9244050332163D-06 0.7092773630705D-06 0.5424493283134D-06 + 0.4135005904089D-06 0.3141603589352D-06 0.2378861413798D-06 0.1795202409555D-06 + 0.1350106538765D-06 0.1011851095086D-06 0.7556879909866D-07 0.5623788451178D-07 + 0.4170219815814D-07 0.3081166707088D-07 0.2268194336078D-07 0.1663552297805D-07 + 0.1215530542863D-07 0.8848107127806D-08 0.6416106613217D-08 0.4634585104140D-08 + 0.3334643304910D-08 0.2389835688104D-08 0.1705876062949D-08 0.1212741020005D-08 + 0.8586376559590D-09 0.6054146003728D-09 0.4250856698627D-09 0.2972075512731D-09 + 0.2069101606973D-09 0.1434236365115D-09 0.9898160505409D-10 0.6800804519963D-10 + 0.4651712787494D-10 0.3167310042586D-10 0.2146695649341D-10 0.1448079937139D-10 + 0.9722622861678D-11 0.6496070631129D-11 0.4319651023999D-11 0.2858591661735D-11 + 0.1882503214946D-11 0.1233598363270D-11 0.8043412065319D-12 0.5218060130221D-12 + 0.3367856512696D-12 0.2162455335843D-12 0.1381220475631D-12 0.8775552000331D-13 diff --git a/Tools/Makefile b/Tools/Makefile new file mode 100644 index 000000000..044985459 --- /dev/null +++ b/Tools/Makefile @@ -0,0 +1,9 @@ +.PHONY: wltool + +all: wltool + +wltool: + cd wltool && $(MAKE) + +clean: + cd wltool && $(MAKE) clean diff --git a/Tools/kkrmat_compare/kkrmat_compare.f b/Tools/kkrmat_compare/kkrmat_compare.f new file mode 100644 index 000000000..a7a893faf --- /dev/null +++ b/Tools/kkrmat_compare/kkrmat_compare.f @@ -0,0 +1,60 @@ + program kkrmat_compare + implicit none + integer n,n2,i,j,argc + real*8 er,ei,er2,ei2 + real*8 ar1,ai1,ar2,ai2 + integer ii,jj + complex*16 a + character(len=64) :: argv(2) + real*8 tol,err + + tol=0.001 + + argc=command_argument_count() + if(argc.ne.2) then + write(*,*) "Expected two arguments: files to compare" + stop + end if + call get_command_argument(1,argv(1)) + call get_command_argument(2,argv(2)) + + write(*,*) "Comapring files '",trim(argv(1)), + & "' and '",trim(argv(2)),"'" + + open(unit=11,file=trim(argv(1))) + open(unit=12,file=trim(argv(2))) + + read(11,*) n,er,ei + read(12,*) n2,er2,ei2 + + if(n.ne.n2) then + write(*,*) "n(",trim(argv(1)),") = ",n," not equal to ", + & "n(",trim(argv(2)),") = ",n2 + stop + end if + + if(er.ne.er2 .or. ei.ne.ei2) then + write(*,*) "e(",trim(argv(1)),") = (",er,", ",ei, + & ") not equal to ", + & "e(",trim(argv(2)),") = (",er2,", ",ei2,")" +! stop + end if + write(*,*) "Energy = (",er,", ",ei,")" + +! allocate(a(n,n)) + + do i=1,n + do j=1,n + read(11,*) ii,jj,ar1,ai1 + read(12,*) ii,jj,ar2,ai2 + a=cmplx(ar1,ai1)-cmplx(ar2,ai2) + if(abs(a).ne.0.0) then + err=abs(a)/abs(cmplx(ar1,ai1)+cmplx(ar2,ai2)) + if(err.gt.tol) then + write(*,*) i,j,ar1,ai1,ar2,ai2 + end if + end if + end do + end do + + end diff --git a/Tools/wltool/Makefile b/Tools/wltool/Makefile new file mode 100644 index 000000000..5faf6b79d --- /dev/null +++ b/Tools/wltool/Makefile @@ -0,0 +1,8 @@ +all: wltool + +wltool: wltool.cpp + $(CXX) -o wltool -O3 wltool.cpp ../../libjson/libjson.a + cp wltool $(TOP_DIR)/bin/wltool + +clean: + rm -f wltool $(TOP_DIR)/bin/wltool diff --git a/Tools/wltool/wltool.cpp b/Tools/wltool/wltool.cpp new file mode 100644 index 000000000..356644b94 --- /dev/null +++ b/Tools/wltool/wltool.cpp @@ -0,0 +1,137 @@ +#include +#include +#include "../../libjson/json.hpp" + +void printMenu(const char*in, const char *on) +{ + printf("Input filename :%s\n",in); + printf("Output filename:%s\n",on); + printf("Please choose one of the following commands:\n\n"); + printf(" r - read file w - write data\n"); + printf(" s - print summary\n"); + printf(" x - extract dos and histogram\n"); + printf(" h - clear histogram g - step modification factor\n"); + printf("\n q - quit\n"); +} + +void writeData(JSON::Value &d, const char *on) +{ + std::ofstream os(on); + os.unsetf(std::ios::floatfield); + os.setf(std::ios::scientific); + os.precision(12); + os<1) printf(", "); + } + if(changeMode & 2) + { + printf("histogram minimum"); + if(changeMode>3) printf(", "); + } + if(changeMode & 4) printf("flatness test"); + } else if(changeMode < 64) { + printf("1/t method"); + } else printf("UNKNOWN changeMode"); + printf(")\n"); + printf("modificationFactorChanges=%d\n",(int)d["modificationFactorChanges"]); + printf("\n"); +} + +void extractDos(JSON::Value &d, const char *on) +{ + size_t nX=d["nX"].as_int(); + double xMin=(double)d["xMin"]; + double xMax=(double)d["xMax"]; + double xDelta=(xMax-xMin)/((double)nX); + + JSON::Array histo=(JSON::Array)d["histo"]; + JSON::Array dos=(JSON::Array)d["dos"]; + FILE *outf=fopen(on,"w"); + for(size_t i=0; i input : output : keep : info : etc : files:______________*\n\ +./ F\n\ + cfspath: path-name-> v_gopen_xxx : w_gopen_xxx : files:_______________________*\n\ +./ F\n\ + Input file: In general this should be the name of this file___________________*\n\ +i_bigcell F\n\ + Text to identify system: (used to construct file names)_______________________*\n") + f.write("{0:<79}F\n".format(id)) + f.write(" subroutine stop level [a10 format] lower case_________________________________*\n\ +main F\n\ + print level___[ipr=0 gets min. O/P]___________________________________________*\n\ + 0 U\n\ + nbasis___[# sublattices andi/or # atoms in system]____________________________*\n") + f.write("{0:<79}U\n".format(n)) + f.write(" Spin index__[1,2,3 -> non-spin-polar;spin-polar;spin-canting]_________________*\n\ + 3 U\n\ +__Bx.123456789012345__By.123456789012345__Bz.123456789012345_Brav. Lat. [a.u.]_*\n") + f.write(" {0[0]:>19.15f} {0[1]:>19.15f} {0[2]:>19.15f}\n".format(bravais[0])) + f.write(" {0[0]:>19.15f} {0[1]:>19.15f} {0[2]:>19.15f}\n".format(bravais[1])) + f.write(" {0[0]:>19.15f} {0[1]:>19.15f} {0[2]:>19.15f}\n".format(bravais[2])) + +def write_b1_positions(f,xyz,Z,pot,lmax,rLIZ,rST1,rST2,rST3,rST4,n): + f.write(" |nlines___|seed___|ranp_mode___|seed_cant_____________________________________*\n") + f.write( "{0:>8} 0.0 0 0.0 U\n".format(n)) + f.write(" Nm___x.123456789012345___y.123456789012345___z.123456789012340__c.1234_i2345__*\n") + for i in range(n): + f.write("{0:>3} {1[0]:>19.15f} {1[1]:>19.15f} {1[2]:>19.15f} 1.0000 0 U\n".format(Z,xyz[i])) + f.write("_Nm___|vfname_(1a15)|__lmax__r_liz7__r_st1__r_st2__r_st3__r_st4__met_rad_______*\n") + for i in range(n): + f.write("{0:>3} {1:<15}\n {2:>4} {3:>6.3f} {4:>5.2f} {5:>5.2f} {6:>5.2f} {7:>5.2f} 2.000 F\n".format(Z,pot,lmax,rLIZ,rST1,rST2,rST3,rST4)) + +def write_b1_tail(f): + f.write(" N_x N_y N_z | # repeats of basic unit cell in x,y,z directions__________*\n\ + 1 1 1 U\n\ + |# sublats remodeled |temp_max |num_temp_steps |max_picks__________________*\n\ + 0 1000 10 25000 U\n\ + |sub-lattice index |# SRO params read |SRO parameters_______________________*\n\ + 0 0 0.000 0.000 0.000 0.000 0.000 U\n\ + %\n\ + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\ + %\n\ + NOTES:.... %\n\ + %\n\ + 1) nlines: no. of lines of data entries following the line %\n\ + \"Nm___x.1234...\". %\n\ + 2) seed: the initial seed value of the random number generator for %\n\ + generating random sample. %\n\ + 3) ranp_mode: = 0, generate random sample without going through %\n\ + sublattice by sublattice %\n\ + = 1, generate random sample on the basis of sublattices %\n\ + 4) seed_cant: the initial seed value of the random number generator for %\n\ + generating moment orientations. If < 0, a moment pointing %\n\ + to (0, 0, 1) direction is generated. %\n\ + 5) to re-modelling whole system at once rather than going through %\n\ + each sub-lattice, set sub-lattice index to be zero %\n\ + %\n\ + 6) Above F indicates a line that is formatted %\n\ + U indicates a line that is unformatted %\n\ + * indicates a text line used to indicate function of following lines %\n\ + = indicates a line that is not read in : Used for coments %\n\ + %\n\ +1234567890123456789012345678901234567890123456789012345678901234567890123456789%\n\ + ==============================================================================%\n") + +def write_lsms_1(filename,id,n): + f = open(filename,"w") + f.write(" ****************************************************************************1\n\ + * Input parameter data file *2\n\ + * LSMS code (version 1.5) *3\n\ + ****************************************************************************4\n\ + *5\n\ + cpath : path-name-> input : output : keep : info : etc : files:___________*6\n\ +./ *7\n\ + cfspath: path-name-> v_gopen_xxx : w_gopen_xxx : files:____________________*8\n\ +./ *9\n\ + Input file for Real Space SCF Code_________________________________________*0\n\ +i_lsms *1\n\ + Text to identify system: (used to construct file names)____________________*2\n\ +{0:<76}*3\n\ + output_to_screen [= y, yes; = n, no, will output to a file]________________*4\n\ +n *5\n\ + subroutine stop level [a10 format] lower case______________________________*6\n\ +main *7\n\ + node_print, print_instr, nprint____________________________________________*8\n\ + 0 -1 -1 *9\n\ + specify number of atoms in the system______________________________________*0\n\ + {1:>7} *1\n\ + nrelc,nrelv,mtasa [0(>1)=Rel(Non)-Rel; 0(>1)=Scalar(Non)-Rel; 0(1)=MT(ASA)]*2\n\ + 10 10 1 0.00000 0.0000 0.0000 *3\n\ + nspin [1=>para, 2=>spin-pol, 3=>spin-cant] : i_vdif [0=>vdif=zero, 1=>vdif]*4\n\ + 3 0 1 *5\n\ + Text to identify system: (used to construct file names)____________________*6\n\ + Title Text Not Specified *7\n\ + read in ngaussr & ngaussq, the no. of Gaussian pnts for volume integration *8\n\ + 10 40 *9\n\ +|info_table name (a30)________|info_evec name (a30) [or \"default\"]__________*0\n\ +info_table_{0:<15} info_evec_{0:<15} *1\n\ + igrid : ebot : etop : eitop : eibot : npts : kelvin : nument : ialg :__*4\n\ + 2 -0.30000 0.00000 0.82500 +0.00250 031 0000 00 02 *5\n\ + nscf : alpdv : alpma : alpev : pot : dga : iharris : i_potwrite : movie__*6\n\ + 10 0.000 0.000 0.000 0 2 0 1 0 *7\n\ + ntstep : tstep : etol : ptol : eftol : rmstol : SD & SCF tols_*6 \n\ + 01 1.000 0.00000005 0.00001 0.00001 0.0000001 *7\n\ + ctq : j_ij_(ctq: The coefficient for torque [ >= 0.0 ], j_ij = 0 or 1)_____*8\n\ + 0.0 0 *9\n\ + No. of atoms whose mixing parameters and scheme need to be adjusted [>= 0]_*0\n\ + 0 *1\n\ + atom name__node number___alphadv___alphama___alphaev___pot___dga___________*2\n\ + Co 000 0.90000 0.50000 0.00000 1 0 *3\n\ + No. of atoms whose Zc, Zs, and Zv need to be adjusted [>= 0]_______________*4\n\ + 0 *5\n\ + atom name__node number____Zcore__Zsemi__Zvale [Zcore+Zsemi+Zvale = Zatom]__*6\n\ + Co 000 10.50 07.50 10.00 *7\n\ + etol ptol eftol rmstol tolerances for selfconsistency:-*8\n\ + 01 1.000 0.0000005 0.0001 0.0001 0.000001 *9\n\ + if igrid=1 and npts>300, no. extra energy points to be read in: npts-300___*0\n\ + extra energy points(in complex format):____________________________________*1\n\ + (0.7520000D+00, 0.3000000D+00) *2\n\ + ****************************************************************************9\n\ + * End of the File *0\n\ + ****************************************************************************1\n".format(id,n)) + f.close() + +def write_bigcell_1(filename,bravais,xyz,id,Z,pot,lmax,rLIZ,rST1,rST2,rST3,rST4,n): + f = open(filename,"w") + write_b1_header(f,bravais,id,n) + write_b1_positions(f,xyz,Z,pot,lmax,rLIZ,rST1,rST2,rST3,rST4,n) + write_b1_tail(f) + f.close() + +def read_xyz(filename,scale,bravais): + f=open(filename,"r") + lines=f.readlines() + f.close() + xyz=[] + for line in lines: + recs=line.split() + x=scale*float(recs[0]) + y=scale*float(recs[1]) + z=scale*float(recs[2]) + xyz.append((x,y,z)) + return xyz + +def main(): + id="fe432" + n=2 + scale=1.0/0.5291772 + a=2.8665 + nx=6 + ny=6 + nz=6 + bravais=[(nx*a*scale,0.0,0.0), + (0.0,ny*a*scale,0.0), + (0.0,0.0,nz*a*scale)] + xyz=read_xyz("pos.dat",scale,bravais) + n=len(xyz) + + write_bigcell_1("i_bigcell",bravais,xyz,id,26,"fe_v",3,12.5,89.0,90.0,91.0,92.0,n) + write_lsms_1("i_lsms",id,n) + +if __name__ == "__main__" : + main() diff --git a/architecture/nccs_yona b/architecture/nccs_yona new file mode 100755 index 000000000..034d7f66f --- /dev/null +++ b/architecture/nccs_yona @@ -0,0 +1,27 @@ +# Tested with +# cula/2.1 +# cuda/3.1 +# gcc/4.3.2 +# hdf5/1.6.10 +# ompi/1.4.2-gnu4.3.2 + +ACML_DIR=/ccs/sw/analysis-x64/acml/4.4.0/centos5.5_binary/gfortran64 +# ACML_DIR=/tmp/work/larkin/acml4.4.0/gfortran64 + +export LIBS += -L $(HDF5_DIR)/lib -lhdf5_fortran -lhdf5 -L/sw/yona/szip/2.1/centos5.5_pgi10.6/lib -lsz -lz -L $(CULA_LIB_PATH_64) -lcula_fortran -lcula -lcublas -L$(ACML_DIR)/lib -lacml -lacml_mv + +export ADD_LIBS += -L$(TOP_DIR)/CBLAS/lib -lcblas_LINUX -L$(ACML_DIR) -lacml -lacml_mv -lgfortran $(PAPI_POST_LINK_OPTS) + +export INC_PATH += -I $(HDF5_DIR)/include -I $(TOP_DIR)/CBLAS/include -I $(CULA_INC_PATH) -I $(CUDAROOT)/include -I$(ACML_DIR)/include + +export ADDITIONAL_TARGETS = CBLAS_target + +export BOOST_ROOT=$(TOP_DIR) + +export F77 = mpif90 -DACCELERATOR_CULA +# export F77 = mpif90 -DACCELERATOR_CULA -DUSE_PAPI $(PAPI_INCLUDE_OPTS) +export CXX = mpicxx -DACCELERATOR_CULA -I$(BOOST_ROOT) +# export CXX = mpicxx -DACCELERATOR_CULA -DUSE_PAPI $(PAPI_INCLUDE_OPTS) -I$(BOOST_ROOT) +export CC = mpicc -DACCELERATOR_CULA +# export CC = mpicc -DACCELERATOR_CULA -DUSE_PAPI $(PAPI_INCLUDE_OPTS) +export LUACXX = $(CXX) diff --git a/architecture/nccs_yona_nogpu b/architecture/nccs_yona_nogpu new file mode 100755 index 000000000..7a72f71e5 --- /dev/null +++ b/architecture/nccs_yona_nogpu @@ -0,0 +1,25 @@ +# Tested with +# gcc/4.3.2 +# hdf5/1.6.10 +# ompi/1.4.2-gnu4.3.2 + +ACML_DIR=/ccs/sw/analysis-x64/acml/4.4.0/centos5.5_binary/gfortran64 +# ACML_DIR=/tmp/work/larkin/acml4.4.0/gfortran64 + +export LIBS += -L $(HDF5_DIR)/lib -lhdf5_fortran -lhdf5 -L/sw/yona/szip/2.1/centos5.5_pgi10.6/lib -lsz -lz -L$(ACML_DIR)/lib -lacml -lacml_mv + +export ADD_LIBS += -L$(TOP_DIR)/CBLAS/lib -lcblas_LINUX -L$(ACML_DIR) -lacml -lacml_mv -lgfortran $(PAPI_POST_LINK_OPTS) + +export INC_PATH += -I $(HDF5_DIR)/include -I $(TOP_DIR)/CBLAS/include -I$(ACML_DIR)/include + +export ADDITIONAL_TARGETS = CBLAS_target + +export BOOST_ROOT=$(TOP_DIR) + +export F77 = mpif90 +# export F77 = mpif90 -DACCELERATOR_CULA -DUSE_PAPI $(PAPI_INCLUDE_OPTS) +export CXX = mpicxx -I$(BOOST_ROOT) +# export CXX = mpicxx -DACCELERATOR_CULA -DUSE_PAPI $(PAPI_INCLUDE_OPTS) -I$(BOOST_ROOT) +export CC = mpicc +# export CC = mpicc -DACCELERATOR_CULA -DUSE_PAPI $(PAPI_INCLUDE_OPTS) +export LUACXX = $(CXX) diff --git a/architecture/nccs_yona_vampir b/architecture/nccs_yona_vampir new file mode 100755 index 000000000..d2a9c53f5 --- /dev/null +++ b/architecture/nccs_yona_vampir @@ -0,0 +1,29 @@ +# Tested with +# cula/2.1 +# cuda/3.1 +# gcc/4.3.2 +# hdf5/1.6.10 +# ompi/1.4.2-gnu4.3.2 + +ACML_DIR=/ccs/sw/analysis-x64/acml/4.4.0/centos5.5_binary/gfortran64 +# ACML_DIR=/tmp/work/larkin/acml4.4.0/gfortran64 + +# export LIBS += -L $(HDF5_DIR)/lib -lhdf5_fortran -lhdf5 -L/sw/yona/szip/2.1/centos5.5_pgi10.6/lib -lsz -lz -L $(CULA_LIB_PATH_64) -lcula_fortran -lcula -lcublas -L$(ACML_DIR)/lib -lacml -lacml_mv +export LIBS += -L $(HDF5_DIR)/lib -lhdf5_fortran -lhdf5 -L/sw/yona/szip/2.1/centos5.5_pgi10.6/lib -lsz -lz -L$(ACML_DIR)/lib -lacml -lacml_mv + +export ADD_LIBS += -L$(TOP_DIR)/CBLAS/lib -lcblas_LINUX -L$(ACML_DIR) -lacml -lacml_mv -lgfortran + +#export INC_PATH += -I $(HDF5_DIR)/include -I $(TOP_DIR)/CBLAS/include -I $(CULA_INC_PATH) -I $(CUDAROOT)/include -I$(ACML_DIR)/include +export INC_PATH += -I $(HDF5_DIR)/include -I $(TOP_DIR)/CBLAS/include -I$(ACML_DIR)/include + +export ADDITIONAL_TARGETS = CBLAS_target + +export BOOST_ROOT=$(TOP_DIR) + +export F77 = vtf90 -vt:f90 mpif90 +# export F77 = mpif90 -DACCELERATOR_CULA -DUSE_PAPI $(PAPI_INCLUDE_OPTS) +export CXX = vtcxx -vt:cxx mpicxx -I$(BOOST_ROOT) +# export CXX = mpicxx -DACCELERATOR_CULA -DUSE_PAPI $(PAPI_INCLUDE_OPTS) -I$(BOOST_ROOT) +export CC = vtcc -vt:cc mpicc +# export CC = mpicc -DACCELERATOR_CULA -DUSE_PAPI $(PAPI_INCLUDE_OPTS) +export LUACXX = $(CXX) diff --git a/architecture/osx-gfortran b/architecture/osx-gfortran new file mode 100644 index 000000000..7ccaaf11c --- /dev/null +++ b/architecture/osx-gfortran @@ -0,0 +1,51 @@ +# export USE_GPTL=1 +#export USE_OPENMP=1 +# export USE_GMP=1 + export USE_LIBXC=1 +# define HAS_BACKTRACE if glibc backtrace functionality is available +# export HAS_BACKTRACE=1 + +ifdef USE_GPTL + export GPTL_LIB=$(HOME)/Development/gptl-4.0/libgptl_pmpi.a + export GPTL_INC=-I $(HOME)/Development/gptl-4.0/ + export GPTL_OPT=-finstrument-functions +else + export GPTL_LIB= + export GPTL_INC= + export GPTL_OPT= +endif + +#export LIBS += -L/opt/local/lib -lhdf5 -lgfortran \ +# -framework Accelerate $(GPTL_LIB) +export LIBS += -L/usr/local/lib -lhdf5 -framework Accelerate $(GPTL_LIB) \ + -lgfortran +#export LIBS += -lhdf5 -framework Accelerate $(GPTL_LIB) \ +# -L/usr/local/lib/gcc/x86_64-apple-darwin12.5.0/4.9.1/ -lgfortran + +export INC_PATH += -I /System/Library/Frameworks/Accelerate.framework/Frameworks/vecLib.framework/Headers/ \ + $(GPTL_INC) + +export BOOST_ROOT=$(TOP_DIR) + +ifdef USE_GMP + export LIBS += -lgmp + export OPT_DEFINES += -DUSE_GMP +endif + +# export CUDA_CXX=nvcc -arch=sm_20 + +ifdef USE_OPENMP + export CXX=mpicxx -g -std=c++11 -fopenmp -O3 -I$(BOOST_ROOT) $(GPTL_OPT) $(OPT_DEFINES) + export F77=gfortran -g -fopenmp -O3 $(GPTL_OPT) +# export F77=gfortran -g -fopenmp -O3 -fcheck=all $(GPTL_OPT) +else + export CXX=mpicxx -g -O3 -std=c++11 -I$(BOOST_ROOT) $(OPT_DEFINES) + export F77=gfortran -g -O3 +# export F77=gfortran -g -O3 -fcheck=all +endif + +# JSON++ requires flex and bison (version>=2.4) +export FLEX=flex +export BISON=/usr/local/opt/bison/bin/bison + +export LUACXX = $(CXX) diff --git a/architecture/osx-gfortran-markus b/architecture/osx-gfortran-markus new file mode 100644 index 000000000..3edd05c61 --- /dev/null +++ b/architecture/osx-gfortran-markus @@ -0,0 +1,54 @@ +# export USE_GPTL=1 +export USE_OPENMP=1 +# export USE_GMP=1 +# export USE_LIBXC=1 +# define HAS_BACKTRACE if glibc backtrace functionality is available +# export HAS_BACKTRACE=1 + +ifdef USE_GPTL + export GPTL_LIB=$(HOME)/Development/gptl-4.0/libgptl_pmpi.a + export GPTL_INC=-I $(HOME)/Development/gptl-4.0/ + export GPTL_OPT=-finstrument-functions +else + export GPTL_LIB= + export GPTL_INC= + export GPTL_OPT= +endif + +export LIBS += -L/usr/local/lib/gcc/6 -lhdf5 -lgfortran \ + -framework Accelerate $(GPTL_LIB) +#export LIBS += -L/usr/local/lib -L/usr/local/lib/gcc/x86_64-apple-darwin13.4.0/4.9.1 -lhdf5 -framework Accelerate $(GPTL_LIB) \ +# -lgfortran +#export LIBS += -lhdf5 -framework Accelerate $(GPTL_LIB) \ +# -L/usr/local/lib/gcc/x86_64-apple-darwin12.5.0/4.9.1/ -lgfortran + +export ADD_LIBS += + + +export INC_PATH += -I /System/Library/Frameworks/Accelerate.framework/Frameworks/vecLib.framework/Headers/ \ + $(GPTL_INC) + +export BOOST_ROOT=$(TOP_DIR) + +ifdef USE_GMP + export LIBS += -lgmp + export OPT_DEFINES += -DUSE_GMP +endif + +# export CUDA_CXX=nvcc -arch=sm_20 + +ifdef USE_OPENMP + export CXX=mpicxx -g -std=c++11 -fopenmp -O3 -I$(BOOST_ROOT) $(GPTL_OPT) $(OPT_DEFINES) + export F77=gfortran -g -fopenmp -O3 $(GPTL_OPT) +# export F77=gfortran -g -fopenmp -O3 -fcheck=all $(GPTL_OPT) +else + export CXX=mpicxx -g -O3 -std=c++11 -I$(BOOST_ROOT) $(OPT_DEFINES) + export F77=gfortran -g -O3 +# export F77=gfortran -g -O3 -fcheck=all +endif + +# JSON++ requires flex and bison (version>=2.4) +export FLEX=flex +export BISON=/usr/local/opt/bison/bin/bison + +export LUACXX = $(CXX) diff --git a/architecture/smoky-gfortran b/architecture/smoky-gfortran new file mode 100644 index 000000000..ebdc30e58 --- /dev/null +++ b/architecture/smoky-gfortran @@ -0,0 +1,39 @@ +# export USE_GPTL=1 + export USE_OPENMP=1 + +ifdef USE_GPTL + export GPTL_LIB=$(HOME)/Development/gptl-4.0/libgptl_pmpi.a + export GPTL_INC=-I $(HOME)/Development/gptl-4.0/ + export GPTL_OPT=-finstrument-functions +else + export GPTL_LIB= + export GPTL_INC= + export GPTL_OPT= +endif + +export LIBS += -lgfortran \ + $(ACML_LIB) -lacml_mv $(GPTL_LIB) + +export INC_PATH += -I$(TOP_DIR)/CBLAS/include $(HDF5_CLIB) \ + $(GPTL_INC) + +export ADD_LIBS += -L$(TOP_DIR)/CBLAS/lib/ -lcblas_LINUX \ + $(HDF5_CLIB) -lhdf5 +export ADDITIONAL_TARGETS = CBLAS_target + +export BOOST_ROOT=$(TOP_DIR) + +# export CUDA_CXX=nvcc -arch=sm_20 + +ifdef USE_OPENMP + export CXX=mpicxx -g -fopenmp -O3 -I$(BOOST_ROOT) $(GPTL_OPT) + export F77=gfortran -g -fopenmp -O3 $(GPTL_OPT) +# export F77=gfortran -g -fopenmp -O3 -fcheck=all $(GPTL_OPT) +else + export CXX=mpicxx -g -O3 -I$(BOOST_ROOT) + export F77=gfortran -g -O3 +# export F77=gfortran -g -O3 -fcheck=all +endif + + +export LUACXX = $(CXX) diff --git a/architecture/summitdev-gnu-cublas b/architecture/summitdev-gnu-cublas new file mode 100644 index 000000000..1cfb365d3 --- /dev/null +++ b/architecture/summitdev-gnu-cublas @@ -0,0 +1,40 @@ + export USE_OPENMP=1 +# export USE_ACCELERATOR = -DACCELERATOR_CUDA_C -DBUILDKKRMATRIX_GPU + export USE_ACCELERATOR = -DACCELERATOR_CUDA_C -DACCELERATOR_CUBLAS +# export USE_ACCELERATOR = -DACCELERATOR_CUDA_C +# export USE_ACCELERATOR = -DACCELERATOR_CUDA_C -DUSE_NVTX + +# export USE_LIBXC=1 + +# export LIBS += -lm -L${OLCF_ESSL_ROOT}/lib64 -lessl -L/sw/summitdev/xl/20161123/xlf/15.1.5/lib/ -lxlfmath -lxl -lxlf90_r -llapack -lblas +export LIBS += -lm -L${OLCF_ESSL_ROOT}/lib64 -lessl -L/sw/summitdev/xl/20161123/xlf/15.1.5/lib/ -lxlfmath -lxl -lxlf90_r -lnvToolsExt +export ADD_LIBS += -L$(CUDA_DIR)/lib64 -lcudart -lcublas -L$(OLCF_HDF5_ROOT)/lib -lhdf5 -lgfortran +# export ADD_LIBS += -L$(TOP_DIR)/CBLAS/lib -lcblas_LINUX $(FPMPI_POST_LINK_OPTS) -L$(CULA_LIB_PATH_64) $(CRAY_CUDA_POST_LINK_OPTS) -lcublas -lcula_core -lcula_lapack -lcula_lapack_fortran + +export INC_PATH += -I $(TOP_DIR)/CBLAS/include -I $(CUDA_DIR)/include + +export ADDITIONAL_TARGETS = CBLAS_target + +export BOOST_ROOT=$(TOP_DIR) + +# export CUDA_CXX=nvcc -arch=sm_35 $(CRAY_CUDA_INCLUDE_OPTS) $(USE_ACCELERATOR) -Xcompiler -fopenmp + +# export COMP_OPTIONS = -O3 +# -ffast-math can give wrong results! So avoid -Ofast +# export COMP_OPTIONS = -mcpu=power8 -Ofast + +export COMP_OPTIONS = -mcpu=power8 -mtune=power8 -O3 + +ifdef USE_OPENMP +export LSMS_CXX=mpicxx $(COMP_OPTIONS) -std=c++11 -I$(BOOST_ROOT) $(USE_ACCELERATOR) $(OPT_DEFINES) -fopenmp +export CC=mpicc $(COMP_OPTIONS) $(USE_ACCELERATOR) $(OPT_DEFINES) -fopenmp +export F77=mpif77 $(COMP_OPTIONS) $(USE_ACCELERATOR) -fopenmp +export CUDA_CXX=nvcc -arch=sm_60 -I $(MPI_ROOT)/include $(USE_ACCELERATOR) -std=c++11 -Xcompiler -fopenmp +else +export LSMS_CXX=mpicxx $(COMP_OPTIONS) -std=c++11 -I$(BOOST_ROOT) $(USE_ACCELERATOR) $(OPT_DEFINES) +export CC=mpicc $(COMP_OPTIONS) $(USE_ACCELERATOR) $(OPT_DEFINES) +export F77=mpif77 $(COMP_OPTIONS) $(USE_ACCELERATOR) +export CUDA_CXX=nvcc -arch=sm_60 -I $(MPI_ROOT)/include -std=c++11 $(USE_ACCELERATOR) +endif + +export CXX=$(LSMS_CXX) diff --git a/architecture/summitdev-gnu-cuda_c b/architecture/summitdev-gnu-cuda_c new file mode 100644 index 000000000..ac0311549 --- /dev/null +++ b/architecture/summitdev-gnu-cuda_c @@ -0,0 +1,40 @@ + export USE_OPENMP=1 +# export USE_ACCELERATOR = -DACCELERATOR_CUDA_C -DBUILDKKRMATRIX_GPU +# export USE_ACCELERATOR = -DACCELERATOR_CUDA_C -DACCELERATOR_CUBLAS + export USE_ACCELERATOR = -DACCELERATOR_CUDA_C +# export USE_ACCELERATOR = -DACCELERATOR_CUDA_C -DUSE_NVTX + +# export USE_LIBXC=1 + +# export LIBS += -lm -L${OLCF_ESSL_ROOT}/lib64 -lessl -L/sw/summitdev/xl/20161123/xlf/15.1.5/lib/ -lxlfmath -lxl -lxlf90_r -llapack -lblas +export LIBS += -lm -L${OLCF_ESSL_ROOT}/lib64 -lessl -L/sw/summitdev/xl/20161123/xlf/15.1.5/lib/ -lxlfmath -lxl -lxlf90_r -lnvToolsExt +export ADD_LIBS += -L$(CUDA_DIR)/lib64 -lcudart -lcublas -L$(OLCF_HDF5_ROOT)/lib -lhdf5 -lgfortran +# export ADD_LIBS += -L$(TOP_DIR)/CBLAS/lib -lcblas_LINUX $(FPMPI_POST_LINK_OPTS) -L$(CULA_LIB_PATH_64) $(CRAY_CUDA_POST_LINK_OPTS) -lcublas -lcula_core -lcula_lapack -lcula_lapack_fortran + +export INC_PATH += -I $(TOP_DIR)/CBLAS/include -I $(CUDA_DIR)/include + +export ADDITIONAL_TARGETS = CBLAS_target + +export BOOST_ROOT=$(TOP_DIR) + +# export CUDA_CXX=nvcc -arch=sm_35 $(CRAY_CUDA_INCLUDE_OPTS) $(USE_ACCELERATOR) -Xcompiler -fopenmp + +# export COMP_OPTIONS = -O3 +# -ffast-math can give wrong results! So avoid -Ofast +# export COMP_OPTIONS = -mcpu=power8 -Ofast + +export COMP_OPTIONS = -mcpu=power8 -mtune=power8 -O3 + +ifdef USE_OPENMP +export LSMS_CXX=mpicxx $(COMP_OPTIONS) -std=c++11 -I$(BOOST_ROOT) $(USE_ACCELERATOR) $(OPT_DEFINES) -fopenmp +export CC=mpicc $(COMP_OPTIONS) $(USE_ACCELERATOR) $(OPT_DEFINES) -fopenmp +export F77=mpif77 $(COMP_OPTIONS) $(USE_ACCELERATOR) -fopenmp +export CUDA_CXX=nvcc -arch=sm_60 -I $(MPI_ROOT)/include $(USE_ACCELERATOR) -std=c++11 -Xcompiler -fopenmp +else +export LSMS_CXX=mpicxx $(COMP_OPTIONS) -std=c++11 -I$(BOOST_ROOT) $(USE_ACCELERATOR) $(OPT_DEFINES) +export CC=mpicc $(COMP_OPTIONS) $(USE_ACCELERATOR) $(OPT_DEFINES) +export F77=mpif77 $(COMP_OPTIONS) $(USE_ACCELERATOR) +export CUDA_CXX=nvcc -arch=sm_60 -I $(MPI_ROOT)/include -std=c++11 $(USE_ACCELERATOR) +endif + +export CXX=$(LSMS_CXX) diff --git a/architecture/summitdev-gnu-nogpu b/architecture/summitdev-gnu-nogpu new file mode 100644 index 000000000..0f8ff86c5 --- /dev/null +++ b/architecture/summitdev-gnu-nogpu @@ -0,0 +1,29 @@ +export USE_OPENMP=1 +# export USE_ACCELERATOR = -DACCELERATOR_CUDA_C -DBUILDKKRMATRIX_GPU +# export USE_ACCELERATOR = -DACCELERATOR_CUDA_C + +# export USE_LIBXC=1 + +export LIBS += -lm -L${OLCF_ESSL_ROOT}/lib64 -lessl -L/sw/summitdev/xl/20161123/xlf/15.1.5/lib/ -lxlfmath -lxl -lxlf90_r -llapack -lblas +export ADD_LIBS += -L$(OLCF_HDF5_ROOT)/lib -lhdf5 -lgfortran +# export ADD_LIBS += -L$(TOP_DIR)/CBLAS/lib -lcblas_LINUX $(FPMPI_POST_LINK_OPTS) -L$(CULA_LIB_PATH_64) $(CRAY_CUDA_POST_LINK_OPTS) -lcublas -lcula_core -lcula_lapack -lcula_lapack_fortran + +export INC_PATH += -I $(TOP_DIR)/CBLAS/include +# -I $(HDF5_INCLUDE_OPTS) + +export ADDITIONAL_TARGETS = CBLAS_target + +export BOOST_ROOT=$(TOP_DIR) + +# export CUDA_CXX=nvcc -arch=sm_35 $(CRAY_CUDA_INCLUDE_OPTS) $(USE_ACCELERATOR) -Xcompiler -fopenmp + +ifdef USE_OPENMP +export CXX=mpicxx -g -O3 -std=c++11 -I$(BOOST_ROOT) $(OPT_DEFINES) -fopenmp +export CC=mpicc -g -O3 $(OPT_DEFINES) -fopenmp +export F77=mpif77 -g -O3 -fopenmp +else +export CXX=mpicxx -g -O3 -std=c++11 -I$(BOOST_ROOT) $(OPT_DEFINES) +export CC=mpicc -g -O3 $(OPT_DEFINES) +export F77=mpif77 -g -O3 +endif + diff --git a/architecture/summitdev-pgi-cuda_c b/architecture/summitdev-pgi-cuda_c new file mode 100644 index 000000000..250e6f90c --- /dev/null +++ b/architecture/summitdev-pgi-cuda_c @@ -0,0 +1,31 @@ +export USE_OPENMP=1 +# export USE_ACCELERATOR = -DACCELERATOR_CUDA_C -DBUILDKKRMATRIX_GPU +export USE_ACCELERATOR = -DACCELERATOR_CUDA_C + +# export USE_LIBXC=1 + +export LIBS += -lblas -llapack -lm +export ADD_LIBS += -L$(CUDA_DIR)/lib64 -lcudart -lcublas -lpgf90 -lpgf902 -lpgf90_rpm1 -lpgf90rtl -L$(OLCF_HDF5_ROOT)/lib -lhdf5 +# export ADD_LIBS += -L$(TOP_DIR)/CBLAS/lib -lcblas_LINUX $(FPMPI_POST_LINK_OPTS) -L$(CULA_LIB_PATH_64) $(CRAY_CUDA_POST_LINK_OPTS) -lcublas -lcula_core -lcula_lapack -lcula_lapack_fortran + +export INC_PATH += -I $(TOP_DIR)/CBLAS/include -I $(CUDA_DIR)/include +# -I $(HDF5_INCLUDE_OPTS) + +export ADDITIONAL_TARGETS = CBLAS_target + +export BOOST_ROOT=$(TOP_DIR) + +# export CUDA_CXX=nvcc -arch=sm_35 $(CRAY_CUDA_INCLUDE_OPTS) $(USE_ACCELERATOR) -Xcompiler -fopenmp + +ifdef USE_OPENMP +export CXX=mpicxx -g -std=c++11 -I$(BOOST_ROOT) $(USE_ACCELERATOR) $(OPT_DEFINES) -mp +export CC=mpicc -g $(USE_ACCELERATOR) $(OPT_DEFINES) -mp +export F77=mpif77 -g $(USE_ACCELERATOR) -mp +export CUDA_CXX=nvcc -arch=sm_35 -I$(CUDA_DIR)/include -I$(MPI_ROOT)/include $(USE_ACCELERATOR) -Xcompiler -fopenmp +else +export CXX=mpicxx -g -std=c++11 -I$(BOOST_ROOT) $(USE_ACCELERATOR) $(OPT_DEFINES) +export CC=mpicc -g $(USE_ACCELERATOR) $(OPT_DEFINES) +export F77=mpif77 -g $(USE_ACCELERATOR) +export CUDA_CXX=nvcc -arch=sm_35 $(CRAY_CUDA_INCLUDE_OPTS) $(USE_ACCELERATOR) +endif + diff --git a/architecture/summitdev-pgi-nogpu b/architecture/summitdev-pgi-nogpu new file mode 100644 index 000000000..c3beaefa3 --- /dev/null +++ b/architecture/summitdev-pgi-nogpu @@ -0,0 +1,29 @@ + export USE_OPENMP=1 +# export USE_ACCELERATOR = -DACCELERATOR_CUDA_C -DBUILDKKRMATRIX_GPU +# export USE_ACCELERATOR = -DACCELERATOR_CUDA_C + +# export USE_LIBXC=1 + +export LIBS += -lm -L${OLCF_ESSL_ROOT}/lib64 -lessl -L/sw/summitdev/xl/20161123/xlf/15.1.5/lib/ -lxlfmath -lxl -lxlf90_r -llapack -lblas +export ADD_LIBS += -lpgf90 -lpgf902 -lpgf90_rpm1 -lpgf90rtl -L$(OLCF_HDF5_ROOT)/lib -lhdf5 +# export ADD_LIBS += -L$(TOP_DIR)/CBLAS/lib -lcblas_LINUX $(FPMPI_POST_LINK_OPTS) -L$(CULA_LIB_PATH_64) $(CRAY_CUDA_POST_LINK_OPTS) -lcublas -lcula_core -lcula_lapack -lcula_lapack_fortran + +export INC_PATH += -I $(TOP_DIR)/CBLAS/include +# -I $(HDF5_INCLUDE_OPTS) + +export ADDITIONAL_TARGETS = CBLAS_target + +export BOOST_ROOT=$(TOP_DIR) + +# export CUDA_CXX=nvcc -arch=sm_35 $(CRAY_CUDA_INCLUDE_OPTS) $(USE_ACCELERATOR) -Xcompiler -fopenmp + +ifdef USE_OPENMP +export CXX=mpicxx -g -fast -std=c++11 -I$(BOOST_ROOT) $(OPT_DEFINES) -mp +export CC=mpicc -g -fast $(OPT_DEFINES) -mp +export F77=mpif77 -g -fast -mp +else +export CXX=mpicxx -g -fast -std=c++11 -I$(BOOST_ROOT) $(OPT_DEFINES) +export CC=mpicc -g -fast $(OPT_DEFINES) +export F77=mpif77 -g -fast +endif + diff --git a/architecture/xk6-cray-nogpu b/architecture/xk6-cray-nogpu new file mode 100644 index 000000000..ba9605a98 --- /dev/null +++ b/architecture/xk6-cray-nogpu @@ -0,0 +1,14 @@ +export LIBS += -L$(TOP_DIR)/CBLAS/lib +export ADD_LIBS += -lcblas_LINUX + +export INC_PATH += -I $(TOP_DIR)/CBLAS/include + +export ADDITIONAL_TARGETS = CBLAS_target + +export BOOST_ROOT=$(TOP_DIR) + +export CC=cc -I$(BOOST_ROOT) +export CXX=CC -I$(BOOST_ROOT) -hgnu +#export CXX=CC -I$(BOOST_ROOT) -DUSE_PAPI +export LUACXX=g++ +export F77=ftn diff --git a/architecture/xk6-gnu-cuda_c b/architecture/xk6-gnu-cuda_c new file mode 100644 index 000000000..ac9effcc5 --- /dev/null +++ b/architecture/xk6-gnu-cuda_c @@ -0,0 +1,30 @@ +export USE_OPENMP=1 +# export USE_ACCELERATOR = -DACCELERATOR_CUDA_C -DBUILDKKRMATRIX_GPU +export USE_ACCELERATOR = -DACCELERATOR_CUDA_C + +export USE_LIBXC=1 + +export LIBS += +export ADD_LIBS += -L$(TOP_DIR)/CBLAS/lib -lcblas_LINUX $(FPMPI_POST_LINK_OPTS) $(CRAY_CUDA_POST_LINK_OPTS) -lcublas +# export ADD_LIBS += -L$(TOP_DIR)/CBLAS/lib -lcblas_LINUX $(FPMPI_POST_LINK_OPTS) -L$(CULA_LIB_PATH_64) $(CRAY_CUDA_POST_LINK_OPTS) -lcublas -lcula_core -lcula_lapack -lcula_lapack_fortran + +export INC_PATH += -I $(TOP_DIR)/CBLAS/include -I $(HDF5_INCLUDE_OPTS) + +export ADDITIONAL_TARGETS = CBLAS_target + +export BOOST_ROOT=$(TOP_DIR) + +# export CUDA_CXX=nvcc -arch=sm_35 $(CRAY_CUDA_INCLUDE_OPTS) $(USE_ACCELERATOR) -Xcompiler -fopenmp + +ifdef USE_OPENMP +export CXX=CC -g -std=c++11 -I$(BOOST_ROOT) $(USE_ACCELERATOR) $(OPT_DEFINES) -fopenmp +export CC=cc -g $(USE_ACCELERATOR) $(OPT_DEFINES) -fopenmp +export F77=ftn -g $(USE_ACCELERATOR) -fopenmp +export CUDA_CXX=nvcc -arch=sm_35 $(CRAY_CUDA_INCLUDE_OPTS) $(USE_ACCELERATOR) -Xcompiler -fopenmp +else +export CXX=CC -g -std=c++11 -I$(BOOST_ROOT) $(USE_ACCELERATOR) $(OPT_DEFINES) +export CC=cc -g $(USE_ACCELERATOR) $(OPT_DEFINES) +export F77=ftn -g $(USE_ACCELERATOR) +export CUDA_CXX=nvcc -arch=sm_35 $(CRAY_CUDA_INCLUDE_OPTS) $(USE_ACCELERATOR) +endif + diff --git a/architecture/xk6-gnu-cula b/architecture/xk6-gnu-cula new file mode 100644 index 000000000..b8b4946fc --- /dev/null +++ b/architecture/xk6-gnu-cula @@ -0,0 +1,24 @@ +export USE_OPENMP=1 +export USE_ACCELERATOR = -DACCELERATOR_CULA -DBUILDKKRMATRIX_GPU + +export LIBS += +export ADD_LIBS += -L$(TOP_DIR)/CBLAS/lib -lcblas_LINUX $(FPMPI_POST_LINK_OPTS) -L$(CULA_LIB_PATH_64) $(CRAY_CUDA_POST_LINK_OPTS) -lcublas -lcula_core -lcula_lapack -lcula_lapack_fortran + +export INC_PATH += -I $(TOP_DIR)/CBLAS/include -I $(HDF5_INCLUDE_OPTS) + +export ADDITIONAL_TARGETS = CBLAS_target + +export BOOST_ROOT=$(TOP_DIR) + +ifdef USE_OPENMP +export CXX=CC -g -std=c++11 -I$(BOOST_ROOT) $(USE_ACCELERATOR) -fopenmp +export CC=cc -g $(USE_ACCELERATOR) -fopenmp +export F77=ftn -g $(USE_ACCELERATOR) -fopenmp +export CUDA_CXX=nvcc -arch=sm_35 $(CRAY_CUDA_INCLUDE_OPTS) $(USE_ACCELERATOR) -Xcompiler -fopenmp +else +export CXX=CC -g -std=c++11 -I$(BOOST_ROOT) $(USE_ACCELERATOR) +export CC=cc -g $(USE_ACCELERATOR) +export F77=ftn -g $(USE_ACCELERATOR) +export CUDA_CXX=nvcc -arch=sm_35 $(CRAY_CUDA_INCLUDE_OPTS) $(USE_ACCELERATOR) +endif + diff --git a/architecture/xk6-gnu-libsci b/architecture/xk6-gnu-libsci new file mode 100644 index 000000000..56012c34e --- /dev/null +++ b/architecture/xk6-gnu-libsci @@ -0,0 +1,22 @@ +export USE_ACCELERATOR = -DACCELERATOR_LIBSCI -DBUILDKKRMATRIX_GPU +export LIBS += -L$(TOP_DIR)/CBLAS/lib +# The pointed to the libsci_acc lib directory is a hack, this should be fixed with a software update +# export ADD_LIBS += -lcblas_LINUX -L$(TOP_DIR)/libsci_acc/lib $(FPMPI_POST_LINK_OPTS) -lcublas +export ADD_LIBS += -lcblas_LINUX $(FPMPI_POST_LINK_OPTS) -lcublas + +# export INC_PATH += -I $(TOP_DIR)/CBLAS/include -I $(TOP_DIR)/libsci_acc/include +export INC_PATH += -I $(TOP_DIR)/CBLAS/include -I $(HDF5_INCLUDE_OPTS) + +export ADDITIONAL_TARGETS = CBLAS_target + +export BOOST_ROOT=$(TOP_DIR) + +# export CUDA_CXX=nvcc -arch=sm_35 $(CRAY_CUDA_INCLUDE_OPTS) -DBUILDKKRMATRIX_GPU + +export CUDA_CXX=nvcc -arch=sm_35 $(CRAY_CUDA_INCLUDE_OPTS) $(USE_ACCELERATOR) -Xcompiler -fopenmp + +export CC=cc -I$(BOOST_ROOT) -DACCELERATOR_LIBSCI -fopenmp -DBUILDKKRMATRIX_GPU +export CXX=CC -std=c++11 -I$(BOOST_ROOT) -DACCELERATOR_LIBSCI -fopenmp -DBUILDKKRMATRIX_GPU +#export CXX=CC -I$(BOOST_ROOT) -DUSE_PAPI +export F77=ftn -DACCELERATOR_LIBSCI -fopenmp -DBUILDKKRMATRIX_GPU +export LUACXX=$(CXX) diff --git a/architecture/xk6-gnu-nogpu b/architecture/xk6-gnu-nogpu new file mode 100644 index 000000000..ff5196b73 --- /dev/null +++ b/architecture/xk6-gnu-nogpu @@ -0,0 +1,22 @@ +#export USE_GPTL=1 +export USE_OPENMP=1 + +export LIBS += +export ADD_LIBS += -L$(TOP_DIR)/CBLAS/lib/ -lcblas_LINUX $(FPMPI_POST_LINK_OPTS) + +export INC_PATH += -I $(TOP_DIR)/CBLAS/include + +export ADDITIONAL_TARGETS = CBLAS_target + +export BOOST_ROOT=$(TOP_DIR) + +ifdef USE_OPENMP + export CXX=CC -g -std=c++11 -I$(BOOST_ROOT) -fopenmp + #export CXX=CC -I$(BOOST_ROOT) -DUSE_PAPI -fopenmp + export F77=ftn -fopenmp +else + export CXX=CC -std=c++11 -I$(BOOST_ROOT) + #export CXX=CC -I$(BOOST_ROOT) -DUSE_PAPI + export F77=ftn +endif +export LUACXX = $(CXX) diff --git a/architecture/xk6-pgi-nogpu b/architecture/xk6-pgi-nogpu new file mode 100644 index 000000000..8be1b4db6 --- /dev/null +++ b/architecture/xk6-pgi-nogpu @@ -0,0 +1,22 @@ +# export USE_GPTL=1 +export USE_OPENMP=1 + +export LIBS += +export ADD_LIBS += $(FPMPI_POST_LINK_OPTS) -L$(TOP_DIR)/CBLAS/lib -lcblas_LINUX + +export INC_PATH += -I $(TOP_DIR)/CBLAS/include + +export ADDITIONAL_TARGETS = CBLAS_target + +export BOOST_ROOT=$(TOP_DIR) + +ifdef USE_OPENMP + #export CXX=CC -g -I$(BOOST_ROOT) -mp + export CXX=CC -fast -I$(BOOST_ROOT) -DUSE_PAPI -mp + export F77=ftn -fast -mp +else + #export CXX=CC -fast -I$(BOOST_ROOT) + export CXX=CC -fast -I$(BOOST_ROOT) -DUSE_PAPI + export F77=ftn -fast +endif +export LUACXX = $(CXX) diff --git a/architecture/xt5-pgi b/architecture/xt5-pgi new file mode 100644 index 000000000..7601e2224 --- /dev/null +++ b/architecture/xt5-pgi @@ -0,0 +1,22 @@ +# export USE_GPTL=1 + export USE_OPENMP=1 + +export LIBS += +export ADD_LIBS += -L$(TOP_DIR)/CBLAS/lib -lcblas_LINUX $(FPMPI_POST_LINK_OPTS) + +export INC_PATH += -I $(TOP_DIR)/CBLAS/include + +export ADDITIONAL_TARGETS = CBLAS_target + +export BOOST_ROOT=$(TOP_DIR) + +ifdef USE_OPENMP + export CXX=CC -I$(BOOST_ROOT) -mp + #export CXX=CC -I$(BOOST_ROOT) -DUSE_PAPI -mp + export F77=ftn -mp +else + export CXX=CC -I$(BOOST_ROOT) + #export CXX=CC -I$(BOOST_ROOT) -DUSE_PAPI + export F77=ftn +endif +export LUACXX = $(CXX) diff --git a/bin/README b/bin/README new file mode 100644 index 000000000..3063f3b5d --- /dev/null +++ b/bin/README @@ -0,0 +1,3 @@ +This directory will contain the compiled executables. +It should not contain any files in the repository except this README. + diff --git a/boost/LICENSE_1_0.txt b/boost/LICENSE_1_0.txt new file mode 100644 index 000000000..36b7cd93c --- /dev/null +++ b/boost/LICENSE_1_0.txt @@ -0,0 +1,23 @@ +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/boost/config.hpp b/boost/config.hpp new file mode 100644 index 000000000..055a27855 --- /dev/null +++ b/boost/config.hpp @@ -0,0 +1,70 @@ +// Boost config.hpp configuration header file ------------------------------// + +// (C) Copyright John Maddock 2002. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for most recent version. + +// Boost config.hpp policy and rationale documentation has been moved to +// http://www.boost.org/libs/config +// +// CAUTION: This file is intended to be completely stable - +// DO NOT MODIFY THIS FILE! +// + +#ifndef BOOST_CONFIG_HPP +#define BOOST_CONFIG_HPP + +// if we don't have a user config, then use the default location: +#if !defined(BOOST_USER_CONFIG) && !defined(BOOST_NO_USER_CONFIG) +# define BOOST_USER_CONFIG +#endif +// include it first: +#ifdef BOOST_USER_CONFIG +# include BOOST_USER_CONFIG +#endif + +// if we don't have a compiler config set, try and find one: +#if !defined(BOOST_COMPILER_CONFIG) && !defined(BOOST_NO_COMPILER_CONFIG) && !defined(BOOST_NO_CONFIG) +# include +#endif +// if we have a compiler config, include it now: +#ifdef BOOST_COMPILER_CONFIG +# include BOOST_COMPILER_CONFIG +#endif + +// if we don't have a std library config set, try and find one: +#if !defined(BOOST_STDLIB_CONFIG) && !defined(BOOST_NO_STDLIB_CONFIG) && !defined(BOOST_NO_CONFIG) +# include +#endif +// if we have a std library config, include it now: +#ifdef BOOST_STDLIB_CONFIG +# include BOOST_STDLIB_CONFIG +#endif + +// if we don't have a platform config set, try and find one: +#if !defined(BOOST_PLATFORM_CONFIG) && !defined(BOOST_NO_PLATFORM_CONFIG) && !defined(BOOST_NO_CONFIG) +# include +#endif +// if we have a platform config, include it now: +#ifdef BOOST_PLATFORM_CONFIG +# include BOOST_PLATFORM_CONFIG +#endif + +// get config suffix code: +#include + +#endif // BOOST_CONFIG_HPP + + + + + + + + + + + diff --git a/boost/config/compiler/gcc.hpp b/boost/config/compiler/gcc.hpp new file mode 100644 index 000000000..17895dcbb --- /dev/null +++ b/boost/config/compiler/gcc.hpp @@ -0,0 +1,149 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Darin Adler 2001 - 2002. +// (C) Copyright Jens Maurer 2001 - 2002. +// (C) Copyright Beman Dawes 2001 - 2003. +// (C) Copyright Douglas Gregor 2002. +// (C) Copyright David Abrahams 2002 - 2003. +// (C) Copyright Synge Todo 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// GNU C++ compiler setup: + +#if __GNUC__ < 3 +# if __GNUC_MINOR__ == 91 + // egcs 1.1 won't parse shared_ptr.hpp without this: +# define BOOST_NO_AUTO_PTR +# endif +# if __GNUC_MINOR__ < 95 + // + // Prior to gcc 2.95 member templates only partly + // work - define BOOST_MSVC6_MEMBER_TEMPLATES + // instead since inline member templates mostly work. + // +# define BOOST_NO_MEMBER_TEMPLATES +# if __GNUC_MINOR__ >= 9 +# define BOOST_MSVC6_MEMBER_TEMPLATES +# endif +# endif + +# if __GNUC_MINOR__ < 96 +# define BOOST_NO_SFINAE +# endif + +# if __GNUC_MINOR__ <= 97 +# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS +# define BOOST_NO_OPERATORS_IN_NAMESPACE +# endif + +# define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE +# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +# define BOOST_NO_IS_ABSTRACT +#elif __GNUC__ == 3 +# if defined (__PATHSCALE__) +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +# define BOOST_NO_IS_ABSTRACT +# endif + // + // gcc-3.x problems: + // + // Bug specific to gcc 3.1 and 3.2: + // +# if ((__GNUC_MINOR__ == 1) || (__GNUC_MINOR__ == 2)) +# define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS +# endif +# if __GNUC_MINOR__ < 4 +# define BOOST_NO_IS_ABSTRACT +# endif +#endif +#if __GNUC__ < 4 +// +// All problems to gcc-3.x and earlier here: +// +#define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#endif + +#ifndef __EXCEPTIONS +# define BOOST_NO_EXCEPTIONS +#endif + + +// +// Threading support: Turn this on unconditionally here (except for +// those platforms where we can know for sure). It will get turned off again +// later if no threading API is detected. +// +#if !defined(__MINGW32__) && !defined(linux) && !defined(__linux) && !defined(__linux__) +# define BOOST_HAS_THREADS +#endif + +// +// gcc has "long long" +// +#define BOOST_HAS_LONG_LONG + +// +// gcc implements the named return value optimization since version 3.1 +// +#if __GNUC__ > 3 || ( __GNUC__ == 3 && __GNUC_MINOR__ >= 1 ) +#define BOOST_HAS_NRVO +#endif + +// +// C++0x features +// +#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 2) +// C++0x features are only enabled when -std=c++0x or -std=gnu++0x are +// passed on the command line, which in turn defines +// __GXX_EXPERIMENTAL_CXX0X__. +# if defined(__GXX_EXPERIMENTAL_CXX0X__) +# define BOOST_HAS_STATIC_ASSERT +# define BOOST_HAS_VARIADIC_TMPL +# define BOOST_HAS_RVALUE_REFS +# define BOOST_HAS_DECLTYPE +# endif +#endif + +// +// Potential C++0x features +// + +// Variadic templates compiler: +// http://www.generic-programming.org/~dgregor/cpp/variadic-templates.html +#ifdef __VARIADIC_TEMPLATES +# define BOOST_HAS_VARIADIC_TMPL +#endif + +// ConceptGCC compiler: +// http://www.generic-programming.org/software/ConceptGCC/ +#ifdef __GXX_CONCEPTS__ +# define BOOST_HAS_CONCEPTS +# define BOOST_COMPILER "ConceptGCC version " __VERSION__ +#endif + +#ifndef BOOST_COMPILER +# define BOOST_COMPILER "GNU C++ version " __VERSION__ +#endif + +// +// versions check: +// we don't know gcc prior to version 2.90: +#if (__GNUC__ == 2) && (__GNUC_MINOR__ < 90) +# error "Compiler not configured - please reconfigure" +#endif +// +// last known and checked version is 4.3 (Pre-release): +#if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 3)) +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown compiler version - please run the configure tests and report the results" +# else +// we don't emit warnings here anymore since there are no defect macros defined for +// gcc post 3.4, so any failures are gcc regressions... +//# warning "Unknown compiler version - please run the configure tests and report the results" +# endif +#endif + + diff --git a/boost/config/compiler/pgi.hpp b/boost/config/compiler/pgi.hpp new file mode 100644 index 000000000..491497d49 --- /dev/null +++ b/boost/config/compiler/pgi.hpp @@ -0,0 +1,25 @@ +// (C) Copyright Noel Belcourt 2007. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// PGI C++ compiler setup: + +#define BOOST_COMPILER "PGI compiler version " BOOST_STRINGIZE(_COMPILER_VERSION) + +// +// Threading support: +// Turn this on unconditionally here, it will get turned off again later +// if no threading API is detected. +// + +#define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +#define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#define BOOST_NO_SWPRINTF + +// +// version check: +// probably nothing to do here? + diff --git a/boost/config/no_tr1/utility.hpp b/boost/config/no_tr1/utility.hpp new file mode 100644 index 000000000..dea8f115b --- /dev/null +++ b/boost/config/no_tr1/utility.hpp @@ -0,0 +1,28 @@ +// (C) Copyright John Maddock 2005. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// The aim of this header is just to include but to do +// so in a way that does not result in recursive inclusion of +// the Boost TR1 components if boost/tr1/tr1/utility is in the +// include search path. We have to do this to avoid circular +// dependencies: +// + +#ifndef BOOST_CONFIG_UTILITY +# define BOOST_CONFIG_UTILITY + +# ifndef BOOST_TR1_NO_RECURSION +# define BOOST_TR1_NO_RECURSION +# define BOOST_CONFIG_NO_UTILITY_RECURSION +# endif + +# include + +# ifdef BOOST_CONFIG_NO_UTILITY_RECURSION +# undef BOOST_TR1_NO_RECURSION +# undef BOOST_CONFIG_NO_UTILITY_RECURSION +# endif + +#endif diff --git a/boost/config/platform/aix.hpp b/boost/config/platform/aix.hpp new file mode 100644 index 000000000..894ef42ce --- /dev/null +++ b/boost/config/platform/aix.hpp @@ -0,0 +1,33 @@ +// (C) Copyright John Maddock 2001 - 2002. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// IBM/Aix specific config options: + +#define BOOST_PLATFORM "IBM Aix" + +#define BOOST_HAS_UNISTD_H +#define BOOST_HAS_NL_TYPES_H +#define BOOST_HAS_NANOSLEEP +#define BOOST_HAS_CLOCK_GETTIME + +// This needs support in "boost/cstdint.hpp" exactly like FreeBSD. +// This platform has header named which includes all +// the things needed. +#define BOOST_HAS_STDINT_H + +// Threading API's: +#define BOOST_HAS_PTHREADS +#define BOOST_HAS_PTHREAD_DELAY_NP +#define BOOST_HAS_SCHED_YIELD +//#define BOOST_HAS_PTHREAD_YIELD + +// boilerplate code: +#include + + + + diff --git a/boost/config/platform/bsd.hpp b/boost/config/platform/bsd.hpp new file mode 100644 index 000000000..f02b0e263 --- /dev/null +++ b/boost/config/platform/bsd.hpp @@ -0,0 +1,86 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Darin Adler 2001. +// (C) Copyright Douglas Gregor 2002. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// generic BSD config options: + +#if !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__OpenBSD__) && !defined(__DragonFly__) +#error "This platform is not BSD" +#endif + +#ifdef __FreeBSD__ +#define BOOST_PLATFORM "FreeBSD " BOOST_STRINGIZE(__FreeBSD__) +#elif defined(__NetBSD__) +#define BOOST_PLATFORM "NetBSD " BOOST_STRINGIZE(__NetBSD__) +#elif defined(__OpenBSD__) +#define BOOST_PLATFORM "OpenBSD " BOOST_STRINGIZE(__OpenBSD__) +#elif defined(__DragonFly__) +#define BOOST_PLATFORM "DragonFly " BOOST_STRINGIZE(__DragonFly__) +#endif + +// +// is this the correct version check? +// FreeBSD has but does not +// advertise the fact in : +// +#if (defined(__FreeBSD__) && (__FreeBSD__ >= 3)) || defined(__DragonFly__) +# define BOOST_HAS_NL_TYPES_H +#endif + +// +// FreeBSD 3.x has pthreads support, but defines _POSIX_THREADS in +// and not in +// +#if (defined(__FreeBSD__) && (__FreeBSD__ <= 3))\ + || defined(__OpenBSD__) || defined(__DragonFly__) +# define BOOST_HAS_PTHREADS +#endif + +// +// No wide character support in the BSD header files: +// +#if defined(__NetBSD__) +#define __NetBSD_GCC__ (__GNUC__ * 1000000 \ + + __GNUC_MINOR__ * 1000 \ + + __GNUC_PATCHLEVEL__) +// XXX - the following is required until c++config.h +// defines _GLIBCXX_HAVE_SWPRINTF and friends +// or the preprocessor conditionals are removed +// from the cwchar header. +#define _GLIBCXX_HAVE_SWPRINTF 1 +#endif + +#if !((defined(__FreeBSD__) && (__FreeBSD__ >= 5)) \ + || (__NetBSD_GCC__ >= 2095003) || defined(__DragonFly__)) +# define BOOST_NO_CWCHAR +#endif +// +// The BSD has macros only, no functions: +// +#if !defined(__OpenBSD__) || defined(__DragonFly__) +# define BOOST_NO_CTYPE_FUNCTIONS +#endif + +// +// thread API's not auto detected: +// +#define BOOST_HAS_SCHED_YIELD +#define BOOST_HAS_NANOSLEEP +#define BOOST_HAS_GETTIMEOFDAY +#define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE +#define BOOST_HAS_SIGACTION + +// boilerplate code: +#define BOOST_HAS_UNISTD_H +#include + + + + + + diff --git a/boost/config/platform/cygwin.hpp b/boost/config/platform/cygwin.hpp new file mode 100644 index 000000000..41fcaa10c --- /dev/null +++ b/boost/config/platform/cygwin.hpp @@ -0,0 +1,51 @@ +// (C) Copyright John Maddock 2001 - 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// cygwin specific config options: + +#define BOOST_PLATFORM "Cygwin" +#define BOOST_NO_CWCTYPE +#define BOOST_NO_CWCHAR +#define BOOST_NO_SWPRINTF +#define BOOST_HAS_DIRENT_H +#define BOOST_HAS_LOG1P +#define BOOST_HAS_EXPM1 + +// +// Threading API: +// See if we have POSIX threads, if we do use them, otherwise +// revert to native Win threads. +#define BOOST_HAS_UNISTD_H +#include +#if defined(_POSIX_THREADS) && (_POSIX_THREADS+0 >= 0) && !defined(BOOST_HAS_WINTHREADS) +# define BOOST_HAS_PTHREADS +# define BOOST_HAS_SCHED_YIELD +# define BOOST_HAS_GETTIMEOFDAY +# define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE +# define BOOST_HAS_SIGACTION +#else +# if !defined(BOOST_HAS_WINTHREADS) +# define BOOST_HAS_WINTHREADS +# endif +# define BOOST_HAS_FTIME +#endif + +// +// find out if we have a stdint.h, there should be a better way to do this: +// +#include +#ifdef _STDINT_H +#define BOOST_HAS_STDINT_H +#endif + +// boilerplate code: +#include + + + + + diff --git a/boost/config/platform/linux.hpp b/boost/config/platform/linux.hpp new file mode 100644 index 000000000..51ae13347 --- /dev/null +++ b/boost/config/platform/linux.hpp @@ -0,0 +1,98 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Jens Maurer 2001 - 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// linux specific config options: + +#define BOOST_PLATFORM "linux" + +// make sure we have __GLIBC_PREREQ if available at all +#include + +// +// added to glibc 2.1.1 +// We can only test for 2.1 though: +// +#if defined(__GLIBC__) && ((__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 1))) + // defines int64_t unconditionally, but defines + // int64_t only if __GNUC__. Thus, assume a fully usable + // only when using GCC. +# if defined __GNUC__ +# define BOOST_HAS_STDINT_H +# endif +#endif + +#if defined(__LIBCOMO__) + // + // como on linux doesn't have std:: c functions: + // NOTE: versions of libcomo prior to beta28 have octal version numbering, + // e.g. version 25 is 21 (dec) + // +# if __LIBCOMO_VERSION__ <= 20 +# define BOOST_NO_STDC_NAMESPACE +# endif + +# if __LIBCOMO_VERSION__ <= 21 +# define BOOST_NO_SWPRINTF +# endif + +#endif + +// +// If glibc is past version 2 then we definitely have +// gettimeofday, earlier versions may or may not have it: +// +#if defined(__GLIBC__) && (__GLIBC__ >= 2) +# define BOOST_HAS_GETTIMEOFDAY +#endif + +#ifdef __USE_POSIX199309 +# define BOOST_HAS_NANOSLEEP +#endif + +#if defined(__GLIBC__) && defined(__GLIBC_PREREQ) +// __GLIBC_PREREQ is available since 2.1.2 + + // swprintf is available since glibc 2.2.0 +# if !__GLIBC_PREREQ(2,2) || (!defined(__USE_ISOC99) && !defined(__USE_UNIX98)) +# define BOOST_NO_SWPRINTF +# endif +#else +# define BOOST_NO_SWPRINTF +#endif + +// boilerplate code: +#define BOOST_HAS_UNISTD_H +#include + +#ifndef __GNUC__ +// +// if the compiler is not gcc we still need to be able to parse +// the GNU system headers, some of which (mainly ) +// use GNU specific extensions: +// +# ifndef __extension__ +# define __extension__ +# endif +# ifndef __const__ +# define __const__ const +# endif +# ifndef __volatile__ +# define __volatile__ volatile +# endif +# ifndef __signed__ +# define __signed__ signed +# endif +# ifndef __typeof__ +# define __typeof__ typeof +# endif +# ifndef __inline__ +# define __inline__ inline +# endif +#endif + + diff --git a/boost/config/platform/macos.hpp b/boost/config/platform/macos.hpp new file mode 100644 index 000000000..2780ef99e --- /dev/null +++ b/boost/config/platform/macos.hpp @@ -0,0 +1,86 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Darin Adler 2001 - 2002. +// (C) Copyright Bill Kempf 2002. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Mac OS specific config options: + +#define BOOST_PLATFORM "Mac OS" + +#if __MACH__ && !defined(_MSL_USING_MSL_C) + +// Using the Mac OS X system BSD-style C library. + +# ifndef BOOST_HAS_UNISTD_H +# define BOOST_HAS_UNISTD_H +# endif +// +// Begin by including our boilerplate code for POSIX +// feature detection, this is safe even when using +// the MSL as Metrowerks supply their own +// to replace the platform-native BSD one. G++ users +// should also always be able to do this on MaxOS X. +// +# include +# ifndef BOOST_HAS_STDINT_H +# define BOOST_HAS_STDINT_H +# endif + +// +// BSD runtime has pthreads, sigaction, sched_yield and gettimeofday, +// of these only pthreads are advertised in , so set the +// other options explicitly: +// +# define BOOST_HAS_SCHED_YIELD +# define BOOST_HAS_GETTIMEOFDAY +# define BOOST_HAS_SIGACTION + +# if (__GNUC__ < 3) && !defined( __APPLE_CC__) + +// GCC strange "ignore std" mode works better if you pretend everything +// is in the std namespace, for the most part. + +# define BOOST_NO_STDC_NAMESPACE +# endif + +# if (__GNUC__ == 4) + +// Both gcc and intel require these. +# define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE +# define BOOST_HAS_NANOSLEEP + +# endif + +#else + +// Using the MSL C library. + +// We will eventually support threads in non-Carbon builds, but we do +// not support this yet. +# if ( defined(TARGET_API_MAC_CARBON) && TARGET_API_MAC_CARBON ) || ( defined(TARGET_CARBON) && TARGET_CARBON ) + +# if !defined(BOOST_HAS_PTHREADS) +# define BOOST_HAS_MPTASKS +# elif ( __dest_os == __mac_os_x ) +// We are doing a Carbon/Mach-O/MSL build which has pthreads, but only the +// gettimeofday and no posix. +# define BOOST_HAS_GETTIMEOFDAY +# endif + +// The MP task implementation of Boost Threads aims to replace MP-unsafe +// parts of the MSL, so we turn on threads unconditionally. +# define BOOST_HAS_THREADS + +// The remote call manager depends on this. +# define BOOST_BIND_ENABLE_PASCAL + +# endif + +#endif + + + diff --git a/boost/config/platform/solaris.hpp b/boost/config/platform/solaris.hpp new file mode 100644 index 000000000..9f9256664 --- /dev/null +++ b/boost/config/platform/solaris.hpp @@ -0,0 +1,28 @@ +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Jens Maurer 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// sun specific config options: + +#define BOOST_PLATFORM "Sun Solaris" + +#define BOOST_HAS_GETTIMEOFDAY + +// boilerplate code: +#define BOOST_HAS_UNISTD_H +#include + +// +// pthreads don't actually work with gcc unless _PTHREADS is defined: +// +#if defined(__GNUC__) && defined(_POSIX_THREADS) && !defined(_PTHREADS) +# undef BOOST_HAS_PTHREADS +#endif + + + + diff --git a/boost/config/posix_features.hpp b/boost/config/posix_features.hpp new file mode 100644 index 000000000..d12954797 --- /dev/null +++ b/boost/config/posix_features.hpp @@ -0,0 +1,95 @@ +// (C) Copyright John Maddock 2001 - 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + + +// See http://www.boost.org for most recent version. + +// All POSIX feature tests go in this file, +// Note that we test _POSIX_C_SOURCE and _XOPEN_SOURCE as well +// _POSIX_VERSION and _XOPEN_VERSION: on some systems POSIX API's +// may be present but none-functional unless _POSIX_C_SOURCE and +// _XOPEN_SOURCE have been defined to the right value (it's up +// to the user to do this *before* including any header, although +// in most cases the compiler will do this for you). + +# if defined(BOOST_HAS_UNISTD_H) +# include + + // XOpen has , but is this the correct version check? +# if defined(_XOPEN_VERSION) && (_XOPEN_VERSION >= 3) +# define BOOST_HAS_NL_TYPES_H +# endif + + // POSIX version 6 requires +# if defined(_POSIX_VERSION) && (_POSIX_VERSION >= 200100) +# define BOOST_HAS_STDINT_H +# endif + + // POSIX version 2 requires +# if defined(_POSIX_VERSION) && (_POSIX_VERSION >= 199009L) +# define BOOST_HAS_DIRENT_H +# endif + + // POSIX version 3 requires to have sigaction: +# if defined(_POSIX_VERSION) && (_POSIX_VERSION >= 199506L) +# define BOOST_HAS_SIGACTION +# endif + // POSIX defines _POSIX_THREADS > 0 for pthread support, + // however some platforms define _POSIX_THREADS without + // a value, hence the (_POSIX_THREADS+0 >= 0) check. + // Strictly speaking this may catch platforms with a + // non-functioning stub , but such occurrences should + // occur very rarely if at all. +# if defined(_POSIX_THREADS) && (_POSIX_THREADS+0 >= 0) && !defined(BOOST_HAS_WINTHREADS) && !defined(BOOST_HAS_MPTASKS) +# define BOOST_HAS_PTHREADS +# endif + + // BOOST_HAS_NANOSLEEP: + // This is predicated on _POSIX_TIMERS or _XOPEN_REALTIME: +# if (defined(_POSIX_TIMERS) && (_POSIX_TIMERS+0 >= 0)) \ + || (defined(_XOPEN_REALTIME) && (_XOPEN_REALTIME+0 >= 0)) +# define BOOST_HAS_NANOSLEEP +# endif + + // BOOST_HAS_CLOCK_GETTIME: + // This is predicated on _POSIX_TIMERS (also on _XOPEN_REALTIME + // but at least one platform - linux - defines that flag without + // defining clock_gettime): +# if (defined(_POSIX_TIMERS) && (_POSIX_TIMERS+0 >= 0)) +# define BOOST_HAS_CLOCK_GETTIME +# endif + + // BOOST_HAS_SCHED_YIELD: + // This is predicated on _POSIX_PRIORITY_SCHEDULING or + // on _POSIX_THREAD_PRIORITY_SCHEDULING or on _XOPEN_REALTIME. +# if defined(_POSIX_PRIORITY_SCHEDULING) && (_POSIX_PRIORITY_SCHEDULING+0 > 0)\ + || (defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && (_POSIX_THREAD_PRIORITY_SCHEDULING+0 > 0))\ + || (defined(_XOPEN_REALTIME) && (_XOPEN_REALTIME+0 >= 0)) +# define BOOST_HAS_SCHED_YIELD +# endif + + // BOOST_HAS_GETTIMEOFDAY: + // BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE: + // These are predicated on _XOPEN_VERSION, and appears to be first released + // in issue 4, version 2 (_XOPEN_VERSION > 500). + // Likewise for the functions log1p and expm1. +# if defined(_XOPEN_VERSION) && (_XOPEN_VERSION+0 >= 500) +# define BOOST_HAS_GETTIMEOFDAY +# if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE+0 >= 500) +# define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE +# endif +# ifndef BOOST_HAS_LOG1P +# define BOOST_HAS_LOG1P +# endif +# ifndef BOOST_HAS_EXPM1 +# define BOOST_HAS_EXPM1 +# endif +# endif + +# endif + + + + diff --git a/boost/config/select_compiler_config.hpp b/boost/config/select_compiler_config.hpp new file mode 100644 index 000000000..8d8db9034 --- /dev/null +++ b/boost/config/select_compiler_config.hpp @@ -0,0 +1,115 @@ +// Boost compiler configuration selection header file + +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Martin Wille 2003. +// (C) Copyright Guillaume Melquiond 2003. +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/ for most recent version. + + +// one identification macro for each of the +// compilers we support: + +# define BOOST_CXX_GCCXML 0 +# define BOOST_CXX_COMO 0 +# define BOOST_CXX_DMC 0 +# define BOOST_CXX_INTEL 0 +# define BOOST_CXX_GNUC 0 +# define BOOST_CXX_KCC 0 +# define BOOST_CXX_SGI 0 +# define BOOST_CXX_TRU64 0 +# define BOOST_CXX_GHS 0 +# define BOOST_CXX_BORLAND 0 +# define BOOST_CXX_CW 0 +# define BOOST_CXX_SUNPRO 0 +# define BOOST_CXX_HPACC 0 +# define BOOST_CXX_MPW 0 +# define BOOST_CXX_IBMCPP 0 +# define BOOST_CXX_MSVC 0 +# define BOOST_CXX_PGI 0 + + +// locate which compiler we are using and define +// BOOST_COMPILER_CONFIG as needed: + +#if defined(__GCCXML__) +// GCC-XML emulates other compilers, it has to appear first here! +# define BOOST_COMPILER_CONFIG "boost/config/compiler/gcc_xml.hpp" + +#elif defined __COMO__ +// Comeau C++ +# define BOOST_COMPILER_CONFIG "boost/config/compiler/comeau.hpp" + +#elif defined __DMC__ +// Digital Mars C++ +# define BOOST_COMPILER_CONFIG "boost/config/compiler/digitalmars.hpp" + +#elif defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC) +// Intel +# define BOOST_COMPILER_CONFIG "boost/config/compiler/intel.hpp" + +# elif defined __GNUC__ +// GNU C++: +# define BOOST_COMPILER_CONFIG "boost/config/compiler/gcc.hpp" + +#elif defined __KCC +// Kai C++ +# define BOOST_COMPILER_CONFIG "boost/config/compiler/kai.hpp" + +#elif defined __sgi +// SGI MIPSpro C++ +# define BOOST_COMPILER_CONFIG "boost/config/compiler/sgi_mipspro.hpp" + +#elif defined __DECCXX +// Compaq Tru64 Unix cxx +# define BOOST_COMPILER_CONFIG "boost/config/compiler/compaq_cxx.hpp" + +#elif defined __ghs +// Greenhills C++ +# define BOOST_COMPILER_CONFIG "boost/config/compiler/greenhills.hpp" + +#elif defined __BORLANDC__ +// Borland +# define BOOST_COMPILER_CONFIG "boost/config/compiler/borland.hpp" + +#elif defined __MWERKS__ +// Metrowerks CodeWarrior +# define BOOST_COMPILER_CONFIG "boost/config/compiler/metrowerks.hpp" + +#elif defined __SUNPRO_CC +// Sun Workshop Compiler C++ +# define BOOST_COMPILER_CONFIG "boost/config/compiler/sunpro_cc.hpp" + +#elif defined __HP_aCC +// HP aCC +# define BOOST_COMPILER_CONFIG "boost/config/compiler/hp_acc.hpp" + +#elif defined(__MRC__) || defined(__SC__) +// MPW MrCpp or SCpp +# define BOOST_COMPILER_CONFIG "boost/config/compiler/mpw.hpp" + +#elif defined(__IBMCPP__) +// IBM Visual Age +# define BOOST_COMPILER_CONFIG "boost/config/compiler/vacpp.hpp" + +#elif defined(__PGI) +// Portland Group Inc. +# define BOOST_COMPILER_CONFIG "boost/config/compiler/pgi.hpp" + +#elif defined _MSC_VER +// Microsoft Visual C++ +// +// Must remain the last #elif since some other vendors (Metrowerks, for +// example) also #define _MSC_VER +# define BOOST_COMPILER_CONFIG "boost/config/compiler/visualc.hpp" + +#elif defined (BOOST_ASSERT_CONFIG) +// this must come last - generate an error if we don't +// recognise the compiler: +# error "Unknown compiler - please configure (http://www.boost.org/libs/config/config.htm#configuring) and report the results to the main boost mailing list (http://www.boost.org/more/mailing_lists.htm#main)" + +#endif diff --git a/boost/config/select_platform_config.hpp b/boost/config/select_platform_config.hpp new file mode 100644 index 000000000..a4c7ad6a8 --- /dev/null +++ b/boost/config/select_platform_config.hpp @@ -0,0 +1,90 @@ +// Boost compiler configuration selection header file + +// (C) Copyright John Maddock 2001 - 2002. +// (C) Copyright Jens Maurer 2001. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// locate which platform we are on and define BOOST_PLATFORM_CONFIG as needed. +// Note that we define the headers to include using "header_name" not +// in order to prevent macro expansion within the header +// name (for example "linux" is a macro on linux systems). + +#if defined(linux) || defined(__linux) || defined(__linux__) +// linux: +# define BOOST_PLATFORM_CONFIG "boost/config/platform/linux.hpp" + +#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) +// BSD: +# define BOOST_PLATFORM_CONFIG "boost/config/platform/bsd.hpp" + +#elif defined(sun) || defined(__sun) +// solaris: +# define BOOST_PLATFORM_CONFIG "boost/config/platform/solaris.hpp" + +#elif defined(__sgi) +// SGI Irix: +# define BOOST_PLATFORM_CONFIG "boost/config/platform/irix.hpp" + +#elif defined(__hpux) +// hp unix: +# define BOOST_PLATFORM_CONFIG "boost/config/platform/hpux.hpp" + +#elif defined(__CYGWIN__) +// cygwin is not win32: +# define BOOST_PLATFORM_CONFIG "boost/config/platform/cygwin.hpp" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +// win32: +# define BOOST_PLATFORM_CONFIG "boost/config/platform/win32.hpp" + +#elif defined(__BEOS__) +// BeOS +# define BOOST_PLATFORM_CONFIG "boost/config/platform/beos.hpp" + +#elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) +// MacOS +# define BOOST_PLATFORM_CONFIG "boost/config/platform/macos.hpp" + +#elif defined(__IBMCPP__) || defined(_AIX) +// IBM +# define BOOST_PLATFORM_CONFIG "boost/config/platform/aix.hpp" + +#elif defined(__amigaos__) +// AmigaOS +# define BOOST_PLATFORM_CONFIG "boost/config/platform/amigaos.hpp" + +#elif defined(__QNXNTO__) +// QNX: +# define BOOST_PLATFORM_CONFIG "boost/config/platform/qnxnto.hpp" + +#else + +# if defined(unix) \ + || defined(__unix) \ + || defined(_XOPEN_SOURCE) \ + || defined(_POSIX_SOURCE) + + // generic unix platform: + +# ifndef BOOST_HAS_UNISTD_H +# define BOOST_HAS_UNISTD_H +# endif + +# include + +# endif + +# if defined (BOOST_ASSERT_CONFIG) + // this must come last - generate an error if we don't + // recognise the platform: +# error "Unknown platform - please configure and report the results to boost.org" +# endif + +#endif + + + diff --git a/boost/config/select_stdlib_config.hpp b/boost/config/select_stdlib_config.hpp new file mode 100644 index 000000000..13e5e4cef --- /dev/null +++ b/boost/config/select_stdlib_config.hpp @@ -0,0 +1,68 @@ +// Boost compiler configuration selection header file + +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Jens Maurer 2001 - 2002. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + + +// See http://www.boost.org for most recent version. + +// locate which std lib we are using and define BOOST_STDLIB_CONFIG as needed: + +// we need to include a std lib header here in order to detect which +// library is in use, use as it's about the smallest +// of the std lib headers - do not rely on this header being included - +// users can short-circuit this header if they know whose std lib +// they are using. + +#include + +#if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION) +// STLPort library; this _must_ come first, otherwise since +// STLport typically sits on top of some other library, we +// can end up detecting that first rather than STLport: +# define BOOST_STDLIB_CONFIG "boost/config/stdlib/stlport.hpp" + +#elif defined(__LIBCOMO__) +// Comeau STL: +#define BOOST_STDLIB_CONFIG "boost/config/stdlib/libcomo.hpp" + +#elif defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER) +// Rogue Wave library: +# define BOOST_STDLIB_CONFIG "boost/config/stdlib/roguewave.hpp" + +#elif defined(__GLIBCPP__) || defined(__GLIBCXX__) +// GNU libstdc++ 3 +# define BOOST_STDLIB_CONFIG "boost/config/stdlib/libstdcpp3.hpp" + +#elif defined(__STL_CONFIG_H) +// generic SGI STL +# define BOOST_STDLIB_CONFIG "boost/config/stdlib/sgi.hpp" + +#elif defined(__MSL_CPP__) +// MSL standard lib: +# define BOOST_STDLIB_CONFIG "boost/config/stdlib/msl.hpp" + +#elif defined(__IBMCPP__) +// take the default VACPP std lib +# define BOOST_STDLIB_CONFIG "boost/config/stdlib/vacpp.hpp" + +#elif defined(MSIPL_COMPILE_H) +// Modena C++ standard library +# define BOOST_STDLIB_CONFIG "boost/config/stdlib/modena.hpp" + +#elif (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER) +// Dinkumware Library (this has to appear after any possible replacement libraries): +# define BOOST_STDLIB_CONFIG "boost/config/stdlib/dinkumware.hpp" + +#elif defined (BOOST_ASSERT_CONFIG) +// this must come last - generate an error if we don't +// recognise the library: +# error "Unknown standard library - please configure and report the results to boost.org" + +#endif + + + diff --git a/boost/config/stdlib/libstdcpp3.hpp b/boost/config/stdlib/libstdcpp3.hpp new file mode 100644 index 000000000..7bbe604f7 --- /dev/null +++ b/boost/config/stdlib/libstdcpp3.hpp @@ -0,0 +1,73 @@ +// (C) Copyright John Maddock 2001. +// (C) Copyright Jens Maurer 2001. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// config for libstdc++ v3 +// not much to go in here: + +#ifdef __GLIBCXX__ +#define BOOST_STDLIB "GNU libstdc++ version " BOOST_STRINGIZE(__GLIBCXX__) +#else +#define BOOST_STDLIB "GNU libstdc++ version " BOOST_STRINGIZE(__GLIBCPP__) +#endif + +#if !defined(_GLIBCPP_USE_WCHAR_T) && !defined(_GLIBCXX_USE_WCHAR_T) +# define BOOST_NO_CWCHAR +# define BOOST_NO_CWCTYPE +# define BOOST_NO_STD_WSTRING +# define BOOST_NO_STD_WSTREAMBUF +#endif + +#if defined(__osf__) && !defined(_REENTRANT) \ + && ( defined(_GLIBCXX_HAVE_GTHR_DEFAULT) || defined(_GLIBCPP_HAVE_GTHR_DEFAULT) ) +// GCC 3 on Tru64 forces the definition of _REENTRANT when any std lib header +// file is included, therefore for consistency we define it here as well. +# define _REENTRANT +#endif + +#ifdef __GLIBCXX__ // gcc 3.4 and greater: +# if defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \ + || defined(_GLIBCXX__PTHREADS) + // + // If the std lib has thread support turned on, then turn it on in Boost + // as well. We do this because some gcc-3.4 std lib headers define _REENTANT + // while others do not... + // +# define BOOST_HAS_THREADS +# else +# define BOOST_DISABLE_THREADS +# endif +#elif defined(__GLIBCPP__) \ + && !defined(_GLIBCPP_HAVE_GTHR_DEFAULT) \ + && !defined(_GLIBCPP__PTHREADS) + // disable thread support if the std lib was built single threaded: +# define BOOST_DISABLE_THREADS +#endif + +#if (defined(linux) || defined(__linux) || defined(__linux__)) && defined(__arm__) && defined(_GLIBCPP_HAVE_GTHR_DEFAULT) +// linux on arm apparently doesn't define _REENTRANT +// so just turn on threading support whenever the std lib is thread safe: +# define BOOST_HAS_THREADS +#endif + + +#if !defined(_GLIBCPP_USE_LONG_LONG) \ + && !defined(_GLIBCXX_USE_LONG_LONG)\ + && defined(BOOST_HAS_LONG_LONG) +// May have been set by compiler/*.hpp, but "long long" without library +// support is useless. +# undef BOOST_HAS_LONG_LONG +#endif + +#if defined(__GLIBCXX__) || (defined(__GLIBCPP__) && __GLIBCPP__>=20020514) // GCC >= 3.1.0 +# define BOOST_STD_EXTENSION_NAMESPACE __gnu_cxx +# define BOOST_HAS_SLIST +# define BOOST_HAS_HASH +# define BOOST_SLIST_HEADER +# define BOOST_HASH_SET_HEADER +# define BOOST_HASH_MAP_HEADER +#endif diff --git a/boost/config/stdlib/stlport.hpp b/boost/config/stdlib/stlport.hpp new file mode 100644 index 000000000..98fdd4349 --- /dev/null +++ b/boost/config/stdlib/stlport.hpp @@ -0,0 +1,201 @@ +// (C) Copyright John Maddock 2001 - 2002. +// (C) Copyright Darin Adler 2001. +// (C) Copyright Jens Maurer 2001. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// STLPort standard library config: + +#if !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) +# include +# if !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) +# error "This is not STLPort!" +# endif +#endif + +// +// __STL_STATIC_CONST_INIT_BUG implies BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS +// for versions prior to 4.1(beta) +// +#if (defined(__STL_STATIC_CONST_INIT_BUG) || defined(_STLP_STATIC_CONST_INIT_BUG)) && (__SGI_STL_PORT <= 0x400) +# define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS +#endif + +// +// If STLport thinks that there is no partial specialisation, then there is no +// std::iterator traits: +// +#if !(defined(_STLP_CLASS_PARTIAL_SPECIALIZATION) || defined(__STL_CLASS_PARTIAL_SPECIALIZATION)) +# define BOOST_NO_STD_ITERATOR_TRAITS +#endif + +// +// No new style iostreams on GCC without STLport's iostreams enabled: +// +#if (defined(__GNUC__) && (__GNUC__ < 3)) && !(defined(__SGI_STL_OWN_IOSTREAMS) || defined(_STLP_OWN_IOSTREAMS)) +# define BOOST_NO_STRINGSTREAM +#endif + +// +// No new iostreams implies no std::locale, and no std::stringstream: +// +#if defined(__STL_NO_IOSTREAMS) || defined(__STL_NO_NEW_IOSTREAMS) || defined(_STLP_NO_IOSTREAMS) || defined(_STLP_NO_NEW_IOSTREAMS) +# define BOOST_NO_STD_LOCALE +# define BOOST_NO_STRINGSTREAM +#endif + +// +// If the streams are not native, and we have a "using ::x" compiler bug +// then the io stream facets are not available in namespace std:: +// +#ifdef _STLPORT_VERSION +# if !(_STLPORT_VERSION >= 0x500) && !defined(_STLP_OWN_IOSTREAMS) && defined(_STLP_USE_NAMESPACES) && defined(BOOST_NO_USING_TEMPLATE) && !defined(__BORLANDC__) +# define BOOST_NO_STD_LOCALE +# endif +#else +# if !defined(__SGI_STL_OWN_IOSTREAMS) && defined(__STL_USE_NAMESPACES) && defined(BOOST_NO_USING_TEMPLATE) && !defined(__BORLANDC__) +# define BOOST_NO_STD_LOCALE +# endif +#endif + +// +// Without member template support enabled, their are no template +// iterate constructors, and no std::allocator: +// +#if !(defined(__STL_MEMBER_TEMPLATES) || defined(_STLP_MEMBER_TEMPLATES)) +# define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS +# define BOOST_NO_STD_ALLOCATOR +#endif +// +// however we always have at least a partial allocator: +// +#define BOOST_HAS_PARTIAL_STD_ALLOCATOR + +#if !defined(_STLP_MEMBER_TEMPLATE_CLASSES) || defined(_STLP_DONT_SUPPORT_REBIND_MEMBER_TEMPLATE) +# define BOOST_NO_STD_ALLOCATOR +#endif + +#if defined(_STLP_NO_MEMBER_TEMPLATE_KEYWORD) && defined(BOOST_MSVC) && (BOOST_MSVC <= 1300) +# define BOOST_NO_STD_ALLOCATOR +#endif + +// +// If STLport thinks there is no wchar_t at all, then we have to disable +// the support for the relevant specilazations of std:: templates. +// +#if !defined(_STLP_HAS_WCHAR_T) && !defined(_STLP_WCHAR_T_IS_USHORT) +# ifndef BOOST_NO_STD_WSTRING +# define BOOST_NO_STD_WSTRING +# endif +# ifndef BOOST_NO_STD_WSTREAMBUF +# define BOOST_NO_STD_WSTREAMBUF +# endif +#endif + +// +// We always have SGI style hash_set, hash_map, and slist: +// +#define BOOST_HAS_HASH +#define BOOST_HAS_SLIST + +// +// STLport does a good job of importing names into namespace std::, +// but doesn't always get them all, define BOOST_NO_STDC_NAMESPACE, since our +// workaround does not conflict with STLports: +// +// +// Harold Howe says: +// Borland switched to STLport in BCB6. Defining BOOST_NO_STDC_NAMESPACE with +// BCB6 does cause problems. If we detect C++ Builder, then don't define +// BOOST_NO_STDC_NAMESPACE +// +#if !defined(__BORLANDC__) && !defined(__DMC__) +// +// If STLport is using it's own namespace, and the real names are in +// the global namespace, then we duplicate STLport's using declarations +// (by defining BOOST_NO_STDC_NAMESPACE), we do this because STLport doesn't +// necessarily import all the names we need into namespace std:: +// +# if (defined(__STL_IMPORT_VENDOR_CSTD) \ + || defined(__STL_USE_OWN_NAMESPACE) \ + || defined(_STLP_IMPORT_VENDOR_CSTD) \ + || defined(_STLP_USE_OWN_NAMESPACE)) \ + && (defined(__STL_VENDOR_GLOBAL_CSTD) || defined (_STLP_VENDOR_GLOBAL_CSTD)) +# define BOOST_NO_STDC_NAMESPACE +# define BOOST_NO_EXCEPTION_STD_NAMESPACE +# endif +#elif defined(__BORLANDC__) && __BORLANDC__ < 0x560 +// STLport doesn't import std::abs correctly: +#include +namespace std { using ::abs; } +// and strcmp/strcpy don't get imported either ('cos they are macros) +#include +#ifdef strcpy +# undef strcpy +#endif +#ifdef strcmp +# undef strcmp +#endif +#ifdef _STLP_VENDOR_CSTD +namespace std{ using _STLP_VENDOR_CSTD::strcmp; using _STLP_VENDOR_CSTD::strcpy; } +#endif +#endif + +// +// std::use_facet may be non-standard, uses a class instead: +// +#if defined(__STL_NO_EXPLICIT_FUNCTION_TMPL_ARGS) || defined(_STLP_NO_EXPLICIT_FUNCTION_TMPL_ARGS) +# define BOOST_NO_STD_USE_FACET +# define BOOST_HAS_STLP_USE_FACET +#endif + +// +// If STLport thinks there are no wide functions, etc. is not working; but +// only if BOOST_NO_STDC_NAMESPACE is not defined (if it is then we do the import +// into std:: ourselves). +// +#if defined(_STLP_NO_NATIVE_WIDE_FUNCTIONS) && !defined(BOOST_NO_STDC_NAMESPACE) +# define BOOST_NO_CWCHAR +# define BOOST_NO_CWCTYPE +#endif + +// +// If STLport for some reason was configured so that it thinks that wchar_t +// is not an intrinsic type, then we have to disable the support for it as +// well (we would be missing required specializations otherwise). +// +#if !defined( _STLP_HAS_WCHAR_T) || defined(_STLP_WCHAR_T_IS_USHORT) +# undef BOOST_NO_INTRINSIC_WCHAR_T +# define BOOST_NO_INTRINSIC_WCHAR_T +#endif + +// +// Borland ships a version of STLport with C++ Builder 6 that lacks +// hashtables and the like: +// +#if defined(__BORLANDC__) && (__BORLANDC__ == 0x560) +# undef BOOST_HAS_HASH +#endif + +// +// gcc-2.95.3/STLPort does not like the using declarations we use to get ADL with std::min/max +// +#if defined(__GNUC__) && (__GNUC__ < 3) +# include // for std::min and std::max +# define BOOST_USING_STD_MIN() ((void)0) +# define BOOST_USING_STD_MAX() ((void)0) +namespace boost { using std::min; using std::max; } +#endif + +#define BOOST_STDLIB "STLPort standard library version " BOOST_STRINGIZE(__SGI_STL_PORT) + + + + + + + + diff --git a/boost/config/suffix.hpp b/boost/config/suffix.hpp new file mode 100644 index 000000000..b57d3f1ed --- /dev/null +++ b/boost/config/suffix.hpp @@ -0,0 +1,566 @@ +// Boost config.hpp configuration header file ------------------------------// + +// (C) Copyright John Maddock 2001 - 2003. +// (C) Copyright Darin Adler 2001. +// (C) Copyright Peter Dimov 2001. +// (C) Copyright Bill Kempf 2002. +// (C) Copyright Jens Maurer 2002. +// (C) Copyright David Abrahams 2002 - 2003. +// (C) Copyright Gennaro Prota 2003. +// (C) Copyright Eric Friedman 2003. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for most recent version. + +// Boost config.hpp policy and rationale documentation has been moved to +// http://www.boost.org/libs/config +// +// This file is intended to be stable, and relatively unchanging. +// It should contain boilerplate code only - no compiler specific +// code unless it is unavoidable - no changes unless unavoidable. + +#ifndef BOOST_CONFIG_SUFFIX_HPP +#define BOOST_CONFIG_SUFFIX_HPP + +// +// look for long long by looking for the appropriate macros in . +// Note that we use limits.h rather than climits for maximal portability, +// remember that since these just declare a bunch of macros, there should be +// no namespace issues from this. +// +#if !defined(BOOST_HAS_LONG_LONG) \ + && !defined(BOOST_MSVC) && !defined(__BORLANDC__) +# include +# if (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX)) +# define BOOST_HAS_LONG_LONG +# endif +#endif + +// GCC 3.x will clean up all of those nasty macro definitions that +// BOOST_NO_CTYPE_FUNCTIONS is intended to help work around, so undefine +// it under GCC 3.x. +#if defined(__GNUC__) && (__GNUC__ >= 3) && defined(BOOST_NO_CTYPE_FUNCTIONS) +# undef BOOST_NO_CTYPE_FUNCTIONS +#endif + +// +// Assume any extensions are in namespace std:: unless stated otherwise: +// +# ifndef BOOST_STD_EXTENSION_NAMESPACE +# define BOOST_STD_EXTENSION_NAMESPACE std +# endif + +// +// If cv-qualified specializations are not allowed, then neither are cv-void ones: +// +# if defined(BOOST_NO_CV_SPECIALIZATIONS) \ + && !defined(BOOST_NO_CV_VOID_SPECIALIZATIONS) +# define BOOST_NO_CV_VOID_SPECIALIZATIONS +# endif + +// +// If there is no numeric_limits template, then it can't have any compile time +// constants either! +// +# if defined(BOOST_NO_LIMITS) \ + && !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) +# define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS +# define BOOST_NO_MS_INT64_NUMERIC_LIMITS +# define BOOST_NO_LONG_LONG_NUMERIC_LIMITS +# endif + +// +// if there is no long long then there is no specialisation +// for numeric_limits either: +// +#if !defined(BOOST_HAS_LONG_LONG) && !defined(BOOST_NO_LONG_LONG_NUMERIC_LIMITS) +# define BOOST_NO_LONG_LONG_NUMERIC_LIMITS +#endif + +// +// if there is no __int64 then there is no specialisation +// for numeric_limits<__int64> either: +// +#if !defined(BOOST_HAS_MS_INT64) && !defined(BOOST_NO_MS_INT64_NUMERIC_LIMITS) +# define BOOST_NO_MS_INT64_NUMERIC_LIMITS +#endif + +// +// if member templates are supported then so is the +// VC6 subset of member templates: +// +# if !defined(BOOST_NO_MEMBER_TEMPLATES) \ + && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) +# define BOOST_MSVC6_MEMBER_TEMPLATES +# endif + +// +// Without partial specialization, can't test for partial specialisation bugs: +// +# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ + && !defined(BOOST_BCB_PARTIAL_SPECIALIZATION_BUG) +# define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG +# endif + +// +// Without partial specialization, we can't have array-type partial specialisations: +// +# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ + && !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS) +# define BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS +# endif + +// +// Without partial specialization, std::iterator_traits can't work: +// +# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ + && !defined(BOOST_NO_STD_ITERATOR_TRAITS) +# define BOOST_NO_STD_ITERATOR_TRAITS +# endif + +// +// Without member template support, we can't have template constructors +// in the standard library either: +// +# if defined(BOOST_NO_MEMBER_TEMPLATES) \ + && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) \ + && !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS) +# define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS +# endif + +// +// Without member template support, we can't have a conforming +// std::allocator template either: +// +# if defined(BOOST_NO_MEMBER_TEMPLATES) \ + && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) \ + && !defined(BOOST_NO_STD_ALLOCATOR) +# define BOOST_NO_STD_ALLOCATOR +# endif + +// +// without ADL support then using declarations will break ADL as well: +// +#if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) && !defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL) +# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +#endif + +// +// If we have a standard allocator, then we have a partial one as well: +// +#if !defined(BOOST_NO_STD_ALLOCATOR) +# define BOOST_HAS_PARTIAL_STD_ALLOCATOR +#endif + +// +// We can't have a working std::use_facet if there is no std::locale: +// +# if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_USE_FACET) +# define BOOST_NO_STD_USE_FACET +# endif + +// +// We can't have a std::messages facet if there is no std::locale: +// +# if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_MESSAGES) +# define BOOST_NO_STD_MESSAGES +# endif + +// +// We can't have a working std::wstreambuf if there is no std::locale: +// +# if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_WSTREAMBUF) +# define BOOST_NO_STD_WSTREAMBUF +# endif + +// +// We can't have a if there is no : +// +# if defined(BOOST_NO_CWCHAR) && !defined(BOOST_NO_CWCTYPE) +# define BOOST_NO_CWCTYPE +# endif + +// +// We can't have a swprintf if there is no : +// +# if defined(BOOST_NO_CWCHAR) && !defined(BOOST_NO_SWPRINTF) +# define BOOST_NO_SWPRINTF +# endif + +// +// If Win32 support is turned off, then we must turn off +// threading support also, unless there is some other +// thread API enabled: +// +#if defined(BOOST_DISABLE_WIN32) && defined(_WIN32) \ + && !defined(BOOST_DISABLE_THREADS) && !defined(BOOST_HAS_PTHREADS) +# define BOOST_DISABLE_THREADS +#endif + +// +// Turn on threading support if the compiler thinks that it's in +// multithreaded mode. We put this here because there are only a +// limited number of macros that identify this (if there's any missing +// from here then add to the appropriate compiler section): +// +#if (defined(__MT__) || defined(_MT) || defined(_REENTRANT) \ + || defined(_PTHREADS)) && !defined(BOOST_HAS_THREADS) +# define BOOST_HAS_THREADS +#endif + +// +// Turn threading support off if BOOST_DISABLE_THREADS is defined: +// +#if defined(BOOST_DISABLE_THREADS) && defined(BOOST_HAS_THREADS) +# undef BOOST_HAS_THREADS +#endif + +// +// Turn threading support off if we don't recognise the threading API: +// +#if defined(BOOST_HAS_THREADS) && !defined(BOOST_HAS_PTHREADS)\ + && !defined(BOOST_HAS_WINTHREADS) && !defined(BOOST_HAS_BETHREADS)\ + && !defined(BOOST_HAS_MPTASKS) +# undef BOOST_HAS_THREADS +#endif + +// +// Turn threading detail macros off if we don't (want to) use threading +// +#ifndef BOOST_HAS_THREADS +# undef BOOST_HAS_PTHREADS +# undef BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE +# undef BOOST_HAS_WINTHREADS +# undef BOOST_HAS_BETHREADS +# undef BOOST_HAS_MPTASKS +#endif + +// +// If the compiler claims to be C99 conformant, then it had better +// have a : +// +# if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901) +# define BOOST_HAS_STDINT_H +# ifndef BOOST_HAS_LOG1P +# define BOOST_HAS_LOG1P +# endif +# ifndef BOOST_HAS_EXPM1 +# define BOOST_HAS_EXPM1 +# endif +# endif + +// +// Define BOOST_NO_SLIST and BOOST_NO_HASH if required. +// Note that this is for backwards compatibility only. +// +# ifndef BOOST_HAS_SLIST +# define BOOST_NO_SLIST +# endif + +# ifndef BOOST_HAS_HASH +# define BOOST_NO_HASH +# endif + +// +// Set BOOST_SLIST_HEADER if not set already: +// +#if defined(BOOST_HAS_SLIST) && !defined(BOOST_SLIST_HEADER) +# define BOOST_SLIST_HEADER +#endif + +// +// Set BOOST_HASH_SET_HEADER if not set already: +// +#if defined(BOOST_HAS_HASH) && !defined(BOOST_HASH_SET_HEADER) +# define BOOST_HASH_SET_HEADER +#endif + +// +// Set BOOST_HASH_MAP_HEADER if not set already: +// +#if defined(BOOST_HAS_HASH) && !defined(BOOST_HASH_MAP_HEADER) +# define BOOST_HASH_MAP_HEADER +#endif + +// BOOST_HAS_ABI_HEADERS +// This macro gets set if we have headers that fix the ABI, +// and prevent ODR violations when linking to external libraries: +#if defined(BOOST_ABI_PREFIX) && defined(BOOST_ABI_SUFFIX) && !defined(BOOST_HAS_ABI_HEADERS) +# define BOOST_HAS_ABI_HEADERS +#endif + +#if defined(BOOST_HAS_ABI_HEADERS) && defined(BOOST_DISABLE_ABI_HEADERS) +# undef BOOST_HAS_ABI_HEADERS +#endif + +// BOOST_NO_STDC_NAMESPACE workaround --------------------------------------// +// Because std::size_t usage is so common, even in boost headers which do not +// otherwise use the C library, the workaround is included here so +// that ugly workaround code need not appear in many other boost headers. +// NOTE WELL: This is a workaround for non-conforming compilers; +// must still be #included in the usual places so that inclusion +// works as expected with standard conforming compilers. The resulting +// double inclusion of is harmless. + +# ifdef BOOST_NO_STDC_NAMESPACE +# include + namespace std { using ::ptrdiff_t; using ::size_t; } +# endif + +// Workaround for the unfortunate min/max macros defined by some platform headers + +#define BOOST_PREVENT_MACRO_SUBSTITUTION + +#ifndef BOOST_USING_STD_MIN +# define BOOST_USING_STD_MIN() using std::min +#endif + +#ifndef BOOST_USING_STD_MAX +# define BOOST_USING_STD_MAX() using std::max +#endif + +// BOOST_NO_STD_MIN_MAX workaround -----------------------------------------// + +# ifdef BOOST_NO_STD_MIN_MAX + +namespace std { + template + inline const _Tp& min BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) { + return __b < __a ? __b : __a; + } + template + inline const _Tp& max BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) { + return __a < __b ? __b : __a; + } +} + +# endif + +// BOOST_STATIC_CONSTANT workaround --------------------------------------- // +// On compilers which don't allow in-class initialization of static integral +// constant members, we must use enums as a workaround if we want the constants +// to be available at compile-time. This macro gives us a convenient way to +// declare such constants. + +# ifdef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +# define BOOST_STATIC_CONSTANT(type, assignment) enum { assignment } +# else +# define BOOST_STATIC_CONSTANT(type, assignment) static const type assignment +# endif + +// BOOST_USE_FACET / HAS_FACET workaround ----------------------------------// +// When the standard library does not have a conforming std::use_facet there +// are various workarounds available, but they differ from library to library. +// The same problem occurs with has_facet. +// These macros provide a consistent way to access a locale's facets. +// Usage: +// replace +// std::use_facet(loc); +// with +// BOOST_USE_FACET(Type, loc); +// Note do not add a std:: prefix to the front of BOOST_USE_FACET! +// Use for BOOST_HAS_FACET is analagous. + +#if defined(BOOST_NO_STD_USE_FACET) +# ifdef BOOST_HAS_TWO_ARG_USE_FACET +# define BOOST_USE_FACET(Type, loc) std::use_facet(loc, static_cast(0)) +# define BOOST_HAS_FACET(Type, loc) std::has_facet(loc, static_cast(0)) +# elif defined(BOOST_HAS_MACRO_USE_FACET) +# define BOOST_USE_FACET(Type, loc) std::_USE(loc, Type) +# define BOOST_HAS_FACET(Type, loc) std::_HAS(loc, Type) +# elif defined(BOOST_HAS_STLP_USE_FACET) +# define BOOST_USE_FACET(Type, loc) (*std::_Use_facet(loc)) +# define BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc) +# endif +#else +# define BOOST_USE_FACET(Type, loc) std::use_facet< Type >(loc) +# define BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc) +#endif + +// BOOST_NESTED_TEMPLATE workaround ------------------------------------------// +// Member templates are supported by some compilers even though they can't use +// the A::template member syntax, as a workaround replace: +// +// typedef typename A::template rebind binder; +// +// with: +// +// typedef typename A::BOOST_NESTED_TEMPLATE rebind binder; + +#ifndef BOOST_NO_MEMBER_TEMPLATE_KEYWORD +# define BOOST_NESTED_TEMPLATE template +#else +# define BOOST_NESTED_TEMPLATE +#endif + +// BOOST_UNREACHABLE_RETURN(x) workaround -------------------------------------// +// Normally evaluates to nothing, unless BOOST_NO_UNREACHABLE_RETURN_DETECTION +// is defined, in which case it evaluates to return x; Use when you have a return +// statement that can never be reached. + +#ifdef BOOST_NO_UNREACHABLE_RETURN_DETECTION +# define BOOST_UNREACHABLE_RETURN(x) return x; +#else +# define BOOST_UNREACHABLE_RETURN(x) +#endif + +// BOOST_DEDUCED_TYPENAME workaround ------------------------------------------// +// +// Some compilers don't support the use of `typename' for dependent +// types in deduced contexts, e.g. +// +// template void f(T, typename T::type); +// ^^^^^^^^ +// Replace these declarations with: +// +// template void f(T, BOOST_DEDUCED_TYPENAME T::type); + +#ifndef BOOST_NO_DEDUCED_TYPENAME +# define BOOST_DEDUCED_TYPENAME typename +#else +# define BOOST_DEDUCED_TYPENAME +#endif + +// long long workaround ------------------------------------------// +// On gcc (and maybe other compilers?) long long is alway supported +// but it's use may generate either warnings (with -ansi), or errors +// (with -pedantic -ansi) unless it's use is prefixed by __extension__ +// +#if defined(BOOST_HAS_LONG_LONG) +namespace boost{ +# ifdef __GNUC__ + __extension__ typedef long long long_long_type; + __extension__ typedef unsigned long long ulong_long_type; +# else + typedef long long long_long_type; + typedef unsigned long long ulong_long_type; +# endif +} +#endif + +// BOOST_[APPEND_]EXPLICIT_TEMPLATE_[NON_]TYPE macros --------------------------// +// +// Some compilers have problems with function templates whose +// template parameters don't appear in the function parameter +// list (basically they just link one instantiation of the +// template in the final executable). These macros provide a +// uniform way to cope with the problem with no effects on the +// calling syntax. + +// Example: +// +// #include +// #include +// #include +// +// template +// void f() { std::cout << n << ' '; } +// +// template +// void g() { std::cout << typeid(T).name() << ' '; } +// +// int main() { +// f<1>(); +// f<2>(); +// +// g(); +// g(); +// } +// +// With VC++ 6.0 the output is: +// +// 2 2 double double +// +// To fix it, write +// +// template +// void f(BOOST_EXPLICIT_TEMPLATE_NON_TYPE(int, n)) { ... } +// +// template +// void g(BOOST_EXPLICIT_TEMPLATE_TYPE(T)) { ... } +// + + +#if defined BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS + +# include "boost/type.hpp" +# include "boost/non_type.hpp" + +# define BOOST_EXPLICIT_TEMPLATE_TYPE(t) boost::type* = 0 +# define BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t) boost::type* +# define BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v) boost::non_type* = 0 +# define BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) boost::non_type* + +# define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(t) \ + , BOOST_EXPLICIT_TEMPLATE_TYPE(t) +# define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t) \ + , BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t) +# define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v) \ + , BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v) +# define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) \ + , BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) + +#else + +// no workaround needed: expand to nothing + +# define BOOST_EXPLICIT_TEMPLATE_TYPE(t) +# define BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t) +# define BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v) +# define BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) + +# define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(t) +# define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t) +# define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v) +# define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) + + +#endif // defined BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS + + +// ---------------------------------------------------------------------------// + +// +// Helper macro BOOST_STRINGIZE: +// Converts the parameter X to a string after macro replacement +// on X has been performed. +// +#define BOOST_STRINGIZE(X) BOOST_DO_STRINGIZE(X) +#define BOOST_DO_STRINGIZE(X) #X + +// +// Helper macro BOOST_JOIN: +// The following piece of macro magic joins the two +// arguments together, even when one of the arguments is +// itself a macro (see 16.3.1 in C++ standard). The key +// is that macro expansion of macro arguments does not +// occur in BOOST_DO_JOIN2 but does in BOOST_DO_JOIN. +// +#define BOOST_JOIN( X, Y ) BOOST_DO_JOIN( X, Y ) +#define BOOST_DO_JOIN( X, Y ) BOOST_DO_JOIN2(X,Y) +#define BOOST_DO_JOIN2( X, Y ) X##Y + +// +// Set some default values for compiler/library/platform names. +// These are for debugging config setup only: +// +# ifndef BOOST_COMPILER +# define BOOST_COMPILER "Unknown ISO C++ Compiler" +# endif +# ifndef BOOST_STDLIB +# define BOOST_STDLIB "Unknown ISO standard library" +# endif +# ifndef BOOST_PLATFORM +# if defined(unix) || defined(__unix) || defined(_XOPEN_SOURCE) \ + || defined(_POSIX_SOURCE) +# define BOOST_PLATFORM "Generic Unix" +# else +# define BOOST_PLATFORM "Unknown" +# endif +# endif + +#endif + + diff --git a/boost/config/user.hpp b/boost/config/user.hpp new file mode 100644 index 000000000..5a4a9d477 --- /dev/null +++ b/boost/config/user.hpp @@ -0,0 +1,124 @@ +// boost/config/user.hpp ---------------------------------------------------// + +// (C) Copyright John Maddock 2001. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// Do not check in modified versions of this file, +// This file may be customized by the end user, but not by boost. + +// +// Use this file to define a site and compiler specific +// configuration policy: +// + +// define this to locate a compiler config file: +// #define BOOST_COMPILER_CONFIG + +// define this to locate a stdlib config file: +// #define BOOST_STDLIB_CONFIG + +// define this to locate a platform config file: +// #define BOOST_PLATFORM_CONFIG + +// define this to disable compiler config, +// use if your compiler config has nothing to set: +// #define BOOST_NO_COMPILER_CONFIG + +// define this to disable stdlib config, +// use if your stdlib config has nothing to set: +// #define BOOST_NO_STDLIB_CONFIG + +// define this to disable platform config, +// use if your platform config has nothing to set: +// #define BOOST_NO_PLATFORM_CONFIG + +// define this to disable all config options, +// excluding the user config. Use if your +// setup is fully ISO compliant, and has no +// useful extensions, or for autoconf generated +// setups: +// #define BOOST_NO_CONFIG + +// define this to make the config "optimistic" +// about unknown compiler versions. Normally +// unknown compiler versions are assumed to have +// all the defects of the last known version, however +// setting this flag, causes the config to assume +// that unknown compiler versions are fully conformant +// with the standard: +// #define BOOST_STRICT_CONFIG + +// define this to cause the config to halt compilation +// with an #error if it encounters anything unknown -- +// either an unknown compiler version or an unknown +// compiler/platform/library: +// #define BOOST_ASSERT_CONFIG + + +// define if you want to disable threading support, even +// when available: +// #define BOOST_DISABLE_THREADS + +// define when you want to disable Win32 specific features +// even when available: +// #define BOOST_DISABLE_WIN32 + +// BOOST_DISABLE_ABI_HEADERS: Stops boost headers from including any +// prefix/suffix headers that normally control things like struct +// packing and alignment. +// #define BOOST_DISABLE_ABI_HEADERS + +// BOOST_ABI_PREFIX: A prefix header to include in place of whatever +// boost.config would normally select, any replacement should set up +// struct packing and alignment options as required. +// #define BOOST_ABI_PREFIX my-header-name + +// BOOST_ABI_SUFFIX: A suffix header to include in place of whatever +// boost.config would normally select, any replacement should undo +// the effects of the prefix header. +// #define BOOST_ABI_SUFFIX my-header-name + +// BOOST_ALL_DYN_LINK: Forces all libraries that have separate source, +// to be linked as dll's rather than static libraries on Microsoft Windows +// (this macro is used to turn on __declspec(dllimport) modifiers, so that +// the compiler knows which symbols to look for in a dll rather than in a +// static library). Note that there may be some libraries that can only +// be statically linked (Boost.Test for example) and others which may only +// be dynamically linked (Boost.Threads for example), in these cases this +// macro has no effect. +// #define BOOST_ALL_DYN_LINK + +// BOOST_WHATEVER_DYN_LINK: Forces library "whatever" to be linked as a dll +// rather than a static library on Microsoft Windows: replace the WHATEVER +// part of the macro name with the name of the library that you want to +// dynamically link to, for example use BOOST_DATE_TIME_DYN_LINK or +// BOOST_REGEX_DYN_LINK etc (this macro is used to turn on __declspec(dllimport) +// modifiers, so that the compiler knows which symbols to look for in a dll +// rather than in a static library). +// Note that there may be some libraries that can only be statically linked +// (Boost.Test for example) and others which may only be dynamically linked +// (Boost.Threads for example), in these cases this macro is unsupported. +// #define BOOST_WHATEVER_DYN_LINK + +// BOOST_ALL_NO_LIB: Tells the config system not to automatically select +// which libraries to link against. +// Normally if a compiler supports #pragma lib, then the correct library +// build variant will be automatically selected and linked against, +// simply by the act of including one of that library's headers. +// This macro turns that feature off. +// #define BOOST_ALL_NO_LIB + +// BOOST_WHATEVER_NO_LIB: Tells the config system not to automatically +// select which library to link against for library "whatever", +// replace WHATEVER in the macro name with the name of the library; +// for example BOOST_DATE_TIME_NO_LIB or BOOST_REGEX_NO_LIB. +// Normally if a compiler supports #pragma lib, then the correct library +// build variant will be automatically selected and linked against, simply +// by the act of including one of that library's headers. This macro turns +// that feature off. +// #define BOOST_WHATEVER_NO_LIB + + + diff --git a/boost/cstdint.hpp b/boost/cstdint.hpp new file mode 100644 index 000000000..31a432a88 --- /dev/null +++ b/boost/cstdint.hpp @@ -0,0 +1,446 @@ +// boost cstdint.hpp header file ------------------------------------------// + +// (C) Copyright Beman Dawes 1999. +// (C) Copyright Jens Mauer 2001 +// (C) Copyright John Maddock 2001 +// Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/integer for documentation. + +// Revision History +// 31 Oct 01 use BOOST_HAS_LONG_LONG to check for "long long" (Jens M.) +// 16 Apr 01 check LONGLONG_MAX when looking for "long long" (Jens Maurer) +// 23 Jan 01 prefer "long" over "int" for int32_t and intmax_t (Jens Maurer) +// 12 Nov 00 Merged (Jens Maurer) +// 23 Sep 00 Added INTXX_C macro support (John Maddock). +// 22 Sep 00 Better 64-bit support (John Maddock) +// 29 Jun 00 Reimplement to avoid including stdint.h within namespace boost +// 8 Aug 99 Initial version (Beman Dawes) + + +#ifndef BOOST_CSTDINT_HPP +#define BOOST_CSTDINT_HPP + +#include + + +#ifdef BOOST_HAS_STDINT_H + +// The following #include is an implementation artifact; not part of interface. +# ifdef __hpux +// HP-UX has a vaguely nice in a non-standard location +# include +# ifdef __STDC_32_MODE__ + // this is triggered with GCC, because it defines __cplusplus < 199707L +# define BOOST_NO_INT64_T +# endif +# elif defined(__FreeBSD__) || defined(__IBMCPP__) +# include +# else +# include + +// There is a bug in Cygwin two _C macros +# if defined(__STDC_CONSTANT_MACROS) && defined(__CYGWIN__) +# undef INTMAX_C +# undef UINTMAX_C +# define INTMAX_C(c) c##LL +# define UINTMAX_C(c) c##ULL +# endif + +# endif + +#ifdef __QNX__ + +// QNX (Dinkumware stdlib) defines these as non-standard names. +// Reflect to the standard names. + +typedef ::intleast8_t int_least8_t; +typedef ::intfast8_t int_fast8_t; +typedef ::uintleast8_t uint_least8_t; +typedef ::uintfast8_t uint_fast8_t; + +typedef ::intleast16_t int_least16_t; +typedef ::intfast16_t int_fast16_t; +typedef ::uintleast16_t uint_least16_t; +typedef ::uintfast16_t uint_fast16_t; + +typedef ::intleast32_t int_least32_t; +typedef ::intfast32_t int_fast32_t; +typedef ::uintleast32_t uint_least32_t; +typedef ::uintfast32_t uint_fast32_t; + +# ifndef BOOST_NO_INT64_T + +typedef ::intleast64_t int_least64_t; +typedef ::intfast64_t int_fast64_t; +typedef ::uintleast64_t uint_least64_t; +typedef ::uintfast64_t uint_fast64_t; + +# endif + +#endif + +namespace boost +{ + + using ::int8_t; + using ::int_least8_t; + using ::int_fast8_t; + using ::uint8_t; + using ::uint_least8_t; + using ::uint_fast8_t; + + using ::int16_t; + using ::int_least16_t; + using ::int_fast16_t; + using ::uint16_t; + using ::uint_least16_t; + using ::uint_fast16_t; + + using ::int32_t; + using ::int_least32_t; + using ::int_fast32_t; + using ::uint32_t; + using ::uint_least32_t; + using ::uint_fast32_t; + +# ifndef BOOST_NO_INT64_T + + using ::int64_t; + using ::int_least64_t; + using ::int_fast64_t; + using ::uint64_t; + using ::uint_least64_t; + using ::uint_fast64_t; + +# endif + + using ::intmax_t; + using ::uintmax_t; + +} // namespace boost + +#elif defined(__FreeBSD__) && (__FreeBSD__ <= 4) || defined(__osf__) +// FreeBSD and Tru64 have an that contains much of what we need. +# include + +namespace boost { + + using ::int8_t; + typedef int8_t int_least8_t; + typedef int8_t int_fast8_t; + using ::uint8_t; + typedef uint8_t uint_least8_t; + typedef uint8_t uint_fast8_t; + + using ::int16_t; + typedef int16_t int_least16_t; + typedef int16_t int_fast16_t; + using ::uint16_t; + typedef uint16_t uint_least16_t; + typedef uint16_t uint_fast16_t; + + using ::int32_t; + typedef int32_t int_least32_t; + typedef int32_t int_fast32_t; + using ::uint32_t; + typedef uint32_t uint_least32_t; + typedef uint32_t uint_fast32_t; + +# ifndef BOOST_NO_INT64_T + + using ::int64_t; + typedef int64_t int_least64_t; + typedef int64_t int_fast64_t; + using ::uint64_t; + typedef uint64_t uint_least64_t; + typedef uint64_t uint_fast64_t; + + typedef int64_t intmax_t; + typedef uint64_t uintmax_t; + +# else + + typedef int32_t intmax_t; + typedef uint32_t uintmax_t; + +# endif + +} // namespace boost + +#else // BOOST_HAS_STDINT_H + +# include // implementation artifact; not part of interface +# include // needed for limits macros + + +namespace boost +{ + +// These are fairly safe guesses for some 16-bit, and most 32-bit and 64-bit +// platforms. For other systems, they will have to be hand tailored. +// +// Because the fast types are assumed to be the same as the undecorated types, +// it may be possible to hand tailor a more efficient implementation. Such +// an optimization may be illusionary; on the Intel x86-family 386 on, for +// example, byte arithmetic and load/stores are as fast as "int" sized ones. + +// 8-bit types ------------------------------------------------------------// + +# if UCHAR_MAX == 0xff + typedef signed char int8_t; + typedef signed char int_least8_t; + typedef signed char int_fast8_t; + typedef unsigned char uint8_t; + typedef unsigned char uint_least8_t; + typedef unsigned char uint_fast8_t; +# else +# error defaults not correct; you must hand modify boost/cstdint.hpp +# endif + +// 16-bit types -----------------------------------------------------------// + +# if USHRT_MAX == 0xffff +# if defined(__crayx1) + // The Cray X1 has a 16-bit short, however it is not recommend + // for use in performance critical code. + typedef short int16_t; + typedef short int_least16_t; + typedef int int_fast16_t; + typedef unsigned short uint16_t; + typedef unsigned short uint_least16_t; + typedef unsigned int uint_fast16_t; +# else + typedef short int16_t; + typedef short int_least16_t; + typedef short int_fast16_t; + typedef unsigned short uint16_t; + typedef unsigned short uint_least16_t; + typedef unsigned short uint_fast16_t; +# endif +# elif (USHRT_MAX == 0xffffffff) && defined(CRAY) + // no 16-bit types on Cray: + typedef short int_least16_t; + typedef short int_fast16_t; + typedef unsigned short uint_least16_t; + typedef unsigned short uint_fast16_t; +# else +# error defaults not correct; you must hand modify boost/cstdint.hpp +# endif + +// 32-bit types -----------------------------------------------------------// + +# if ULONG_MAX == 0xffffffff + typedef long int32_t; + typedef long int_least32_t; + typedef long int_fast32_t; + typedef unsigned long uint32_t; + typedef unsigned long uint_least32_t; + typedef unsigned long uint_fast32_t; +# elif UINT_MAX == 0xffffffff + typedef int int32_t; + typedef int int_least32_t; + typedef int int_fast32_t; + typedef unsigned int uint32_t; + typedef unsigned int uint_least32_t; + typedef unsigned int uint_fast32_t; +# else +# error defaults not correct; you must hand modify boost/cstdint.hpp +# endif + +// 64-bit types + intmax_t and uintmax_t ----------------------------------// + +# if defined(BOOST_HAS_LONG_LONG) && \ + !defined(BOOST_MSVC) && !defined(__BORLANDC__) && \ + (!defined(__GLIBCPP__) || defined(_GLIBCPP_USE_LONG_LONG)) && \ + (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX)) +# if defined(__hpux) + // HP-UX's value of ULONG_LONG_MAX is unusable in preprocessor expressions +# elif (defined(ULLONG_MAX) && ULLONG_MAX == 18446744073709551615ULL) || (defined(ULONG_LONG_MAX) && ULONG_LONG_MAX == 18446744073709551615ULL) || (defined(ULONGLONG_MAX) && ULONGLONG_MAX == 18446744073709551615ULL) + // 2**64 - 1 +# else +# error defaults not correct; you must hand modify boost/cstdint.hpp +# endif + + typedef ::boost::long_long_type intmax_t; + typedef ::boost::ulong_long_type uintmax_t; + typedef ::boost::long_long_type int64_t; + typedef ::boost::long_long_type int_least64_t; + typedef ::boost::long_long_type int_fast64_t; + typedef ::boost::ulong_long_type uint64_t; + typedef ::boost::ulong_long_type uint_least64_t; + typedef ::boost::ulong_long_type uint_fast64_t; + +# elif ULONG_MAX != 0xffffffff + +# if ULONG_MAX == 18446744073709551615 // 2**64 - 1 + typedef long intmax_t; + typedef unsigned long uintmax_t; + typedef long int64_t; + typedef long int_least64_t; + typedef long int_fast64_t; + typedef unsigned long uint64_t; + typedef unsigned long uint_least64_t; + typedef unsigned long uint_fast64_t; +# else +# error defaults not correct; you must hand modify boost/cstdint.hpp +# endif +# elif defined(__GNUC__) && defined(BOOST_HAS_LONG_LONG) + __extension__ typedef long long intmax_t; + __extension__ typedef unsigned long long uintmax_t; + __extension__ typedef long long int64_t; + __extension__ typedef long long int_least64_t; + __extension__ typedef long long int_fast64_t; + __extension__ typedef unsigned long long uint64_t; + __extension__ typedef unsigned long long uint_least64_t; + __extension__ typedef unsigned long long uint_fast64_t; +# elif defined(BOOST_HAS_MS_INT64) + // + // we have Borland/Intel/Microsoft __int64: + // + typedef __int64 intmax_t; + typedef unsigned __int64 uintmax_t; + typedef __int64 int64_t; + typedef __int64 int_least64_t; + typedef __int64 int_fast64_t; + typedef unsigned __int64 uint64_t; + typedef unsigned __int64 uint_least64_t; + typedef unsigned __int64 uint_fast64_t; +# else // assume no 64-bit integers +# define BOOST_NO_INT64_T + typedef int32_t intmax_t; + typedef uint32_t uintmax_t; +# endif + +} // namespace boost + + +#endif // BOOST_HAS_STDINT_H + +#endif // BOOST_CSTDINT_HPP + + +/**************************************************** + +Macro definition section: + +Define various INTXX_C macros only if +__STDC_CONSTANT_MACROS is defined. + +Undefine the macros if __STDC_CONSTANT_MACROS is +not defined and the macros are (cf ). + +Added 23rd September 2000 (John Maddock). +Modified 11th September 2001 to be excluded when +BOOST_HAS_STDINT_H is defined (John Maddock). + +******************************************************/ + +#if defined(__STDC_CONSTANT_MACROS) && !defined(BOOST__STDC_CONSTANT_MACROS_DEFINED) && !defined(BOOST_HAS_STDINT_H) +# define BOOST__STDC_CONSTANT_MACROS_DEFINED +# if defined(BOOST_HAS_MS_INT64) +// +// Borland/Intel/Microsoft compilers have width specific suffixes: +// +# define INT8_C(value) value##i8 +# define INT16_C(value) value##i16 +# define INT32_C(value) value##i32 +# define INT64_C(value) value##i64 +# ifdef __BORLANDC__ + // Borland bug: appending ui8 makes the type a signed char +# define UINT8_C(value) static_cast(value##u) +# else +# define UINT8_C(value) value##ui8 +# endif +# define UINT16_C(value) value##ui16 +# define UINT32_C(value) value##ui32 +# define UINT64_C(value) value##ui64 +# define INTMAX_C(value) value##i64 +# define UINTMAX_C(value) value##ui64 + +# else +// do it the old fashioned way: + +// 8-bit types ------------------------------------------------------------// + +# if UCHAR_MAX == 0xff +# define INT8_C(value) static_cast(value) +# define UINT8_C(value) static_cast(value##u) +# endif + +// 16-bit types -----------------------------------------------------------// + +# if USHRT_MAX == 0xffff +# define INT16_C(value) static_cast(value) +# define UINT16_C(value) static_cast(value##u) +# endif + +// 32-bit types -----------------------------------------------------------// + +# if UINT_MAX == 0xffffffff +# define INT32_C(value) value +# define UINT32_C(value) value##u +# elif ULONG_MAX == 0xffffffff +# define INT32_C(value) value##L +# define UINT32_C(value) value##uL +# endif + +// 64-bit types + intmax_t and uintmax_t ----------------------------------// + +# if defined(BOOST_HAS_LONG_LONG) && \ + (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX)) + +# if defined(__hpux) + // HP-UX's value of ULONG_LONG_MAX is unusable in preprocessor expressions +# elif (defined(ULLONG_MAX) && ULLONG_MAX == 18446744073709551615U) || \ + (defined(ULONG_LONG_MAX) && ULONG_LONG_MAX == 18446744073709551615U) || \ + (defined(ULONGLONG_MAX) && ULONGLONG_MAX == 18446744073709551615U) + +# else +# error defaults not correct; you must hand modify boost/cstdint.hpp +# endif +# define INT64_C(value) value##LL +# define UINT64_C(value) value##uLL +# elif ULONG_MAX != 0xffffffff + +# if ULONG_MAX == 18446744073709551615 // 2**64 - 1 +# define INT64_C(value) value##L +# define UINT64_C(value) value##uL +# else +# error defaults not correct; you must hand modify boost/cstdint.hpp +# endif +# endif + +# ifdef BOOST_NO_INT64_T +# define INTMAX_C(value) INT32_C(value) +# define UINTMAX_C(value) UINT32_C(value) +# else +# define INTMAX_C(value) INT64_C(value) +# define UINTMAX_C(value) UINT64_C(value) +# endif + +# endif // Borland/Microsoft specific width suffixes + + +#elif defined(BOOST__STDC_CONSTANT_MACROS_DEFINED) && !defined(__STDC_CONSTANT_MACROS) && !defined(BOOST_HAS_STDINT_H) +// +// undef all the macros: +// +# undef INT8_C +# undef INT16_C +# undef INT32_C +# undef INT64_C +# undef UINT8_C +# undef UINT16_C +# undef UINT32_C +# undef UINT64_C +# undef INTMAX_C +# undef UINTMAX_C + +#endif // __STDC_CONSTANT_MACROS_DEFINED etc. + + + + diff --git a/boost/detail/workaround.hpp b/boost/detail/workaround.hpp new file mode 100644 index 000000000..4933a531f --- /dev/null +++ b/boost/detail/workaround.hpp @@ -0,0 +1,202 @@ +// Copyright David Abrahams 2002. +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +#ifndef WORKAROUND_DWA2002126_HPP +# define WORKAROUND_DWA2002126_HPP + +// Compiler/library version workaround macro +// +// Usage: +// +// #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) +// // workaround for eVC4 and VC6 +// ... // workaround code here +// #endif +// +// When BOOST_STRICT_CONFIG is defined, expands to 0. Otherwise, the +// first argument must be undefined or expand to a numeric +// value. The above expands to: +// +// (BOOST_MSVC) != 0 && (BOOST_MSVC) < 1300 +// +// When used for workarounds that apply to the latest known version +// and all earlier versions of a compiler, the following convention +// should be observed: +// +// #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1301)) +// +// The version number in this case corresponds to the last version in +// which the workaround was known to have been required. When +// BOOST_DETECT_OUTDATED_WORKAROUNDS is not the defined, the macro +// BOOST_TESTED_AT(x) expands to "!= 0", which effectively activates +// the workaround for any version of the compiler. When +// BOOST_DETECT_OUTDATED_WORKAROUNDS is defined, a compiler warning or +// error will be issued if the compiler version exceeds the argument +// to BOOST_TESTED_AT(). This can be used to locate workarounds which +// may be obsoleted by newer versions. + +# ifndef BOOST_STRICT_CONFIG + +#include + +#ifndef __BORLANDC__ +#define __BORLANDC___WORKAROUND_GUARD 1 +#else +#define __BORLANDC___WORKAROUND_GUARD 0 +#endif +#ifndef __MSC_VER +#define __MSC_VER_WORKAROUND_GUARD 1 +#else +#define __MSC_VER_WORKAROUND_GUARD 0 +#endif +#ifndef _MSC_FULL_VER +#define _MSC_FULL_VER_WORKAROUND_GUARD 1 +#else +#define _MSC_FULL_VER_WORKAROUND_GUARD 0 +#endif +#ifndef BOOST_MSVC +#define BOOST_MSVC_WORKAROUND_GUARD 1 +#else +#define BOOST_MSVC_WORKAROUND_GUARD 0 +#endif +#ifndef __GNUC__ +#define __GNUC___WORKAROUND_GUARD 1 +#else +#define __GNUC___WORKAROUND_GUARD 0 +#endif +#ifndef __GNUC_MINOR__ +#define __GNUC_MINOR___WORKAROUND_GUARD 1 +#else +#define __GNUC_MINOR___WORKAROUND_GUARD 0 +#endif +#ifndef __GNUC_PATCHLEVEL__ +#define __GNUC_PATCHLEVEL___WORKAROUND_GUARD 1 +#else +#define __GNUC_PATCHLEVEL___WORKAROUND_GUARD 0 +#endif +#ifndef __IBMCPP__ +#define __IBMCPP___WORKAROUND_GUARD 1 +#else +#define __IBMCPP___WORKAROUND_GUARD 0 +#endif +#ifndef __SUNPRO_CC +#define __SUNPRO_CC_WORKAROUND_GUARD 1 +#else +#define __SUNPRO_CC_WORKAROUND_GUARD 0 +#endif +#ifndef __DECCXX_VER +#define __DECCXX_VER_WORKAROUND_GUARD 1 +#else +#define __DECCXX_VER_WORKAROUND_GUARD 0 +#endif +#ifndef __MWERKS__ +#define __MWERKS___WORKAROUND_GUARD 1 +#else +#define __MWERKS___WORKAROUND_GUARD 0 +#endif +#ifndef __EDG_VERSION__ +#define __EDG_VERSION___WORKAROUND_GUARD 1 +#else +#define __EDG_VERSION___WORKAROUND_GUARD 0 +#endif +#ifndef __HP_aCC +#define __HP_aCC_WORKAROUND_GUARD 1 +#else +#define __HP_aCC_WORKAROUND_GUARD 0 +#endif +#ifndef _CRAYC +#define _CRAYC_WORKAROUND_GUARD 1 +#else +#define _CRAYC_WORKAROUND_GUARD 0 +#endif +#ifndef __DMC__ +#define __DMC___WORKAROUND_GUARD 1 +#else +#define __DMC___WORKAROUND_GUARD 0 +#endif +#ifndef MPW_CPLUS +#define MPW_CPLUS_WORKAROUND_GUARD 1 +#else +#define MPW_CPLUS_WORKAROUND_GUARD 0 +#endif + +#ifndef _RWSTD_VER +#define _RWSTD_VER_WORKAROUND_GUARD 1 +#else +#define _RWSTD_VER_WORKAROUND_GUARD 0 +#endif +#ifndef _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC +#define _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC_WORKAROUND_GUARD 1 +#else +#define _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC_WORKAROUND_GUARD 0 +#endif +#ifndef __SGI_STL_PORT +#define __SGI_STL_PORT_WORKAROUND_GUARD 1 +#else +#define __SGI_STL_PORT_WORKAROUND_GUARD 0 +#endif +#ifndef _STLPORT_VERSION +#define _STLPORT_VERSION_WORKAROUND_GUARD 1 +#else +#define _STLPORT_VERSION_WORKAROUND_GUARD 0 +#endif + +#ifndef BOOST_INTEL_CXX_VERSION +#define BOOST_INTEL_CXX_VERSION_WORKAROUND_GUARD 1 +#else +#define BOOST_INTEL_CXX_VERSION_WORKAROUND_GUARD 0 +#endif +#ifndef BOOST_INTEL_WIN +#define BOOST_INTEL_WIN_WORKAROUND_GUARD 1 +#else +#define BOOST_INTEL_WIN_WORKAROUND_GUARD 0 +#endif +#ifndef BOOST_DINKUMWARE_STDLIB +#define BOOST_DINKUMWARE_STDLIB_WORKAROUND_GUARD 1 +#else +#define BOOST_DINKUMWARE_STDLIB_WORKAROUND_GUARD 0 +#endif +#ifndef BOOST_INTEL +#define BOOST_INTEL_WORKAROUND_GUARD 1 +#else +#define BOOST_INTEL_WORKAROUND_GUARD 0 +#endif +// Always define to zero, if it's used it'll be defined my MPL: +#define BOOST_MPL_CFG_GCC_WORKAROUND_GUARD 0 + +# define BOOST_WORKAROUND(symbol, test) \ + ((symbol ## _WORKAROUND_GUARD + 0 == 0) && \ + (symbol != 0) && (1 % (( (symbol test) ) + 1))) +// ^ ^ ^ ^ +// The extra level of parenthesis nesting above, along with the +// BOOST_OPEN_PAREN indirection below, is required to satisfy the +// broken preprocessor in MWCW 8.3 and earlier. +// +// The basic mechanism works as follows: +// (symbol test) + 1 => if (symbol test) then 2 else 1 +// 1 % ((symbol test) + 1) => if (symbol test) then 1 else 0 +// +// The complication with % is for cooperation with BOOST_TESTED_AT(). +// When "test" is BOOST_TESTED_AT(x) and +// BOOST_DETECT_OUTDATED_WORKAROUNDS is #defined, +// +// symbol test => if (symbol <= x) then 1 else -1 +// (symbol test) + 1 => if (symbol <= x) then 2 else 0 +// 1 % ((symbol test) + 1) => if (symbol <= x) then 1 else divide-by-zero +// + +# ifdef BOOST_DETECT_OUTDATED_WORKAROUNDS +# define BOOST_OPEN_PAREN ( +# define BOOST_TESTED_AT(value) > value) ?(-1): BOOST_OPEN_PAREN 1 +# else +# define BOOST_TESTED_AT(value) != ((value)-(value)) +# endif + +# else + +# define BOOST_WORKAROUND(symbol, test) 0 + +# endif + +#endif // WORKAROUND_DWA2002126_HPP diff --git a/boost/integer_traits.hpp b/boost/integer_traits.hpp new file mode 100644 index 000000000..ac4ef32f3 --- /dev/null +++ b/boost/integer_traits.hpp @@ -0,0 +1,236 @@ +/* boost integer_traits.hpp header file + * + * Copyright Jens Maurer 2000 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * $Id: integer_traits.hpp 32576 2006-02-05 10:19:42Z johnmaddock $ + * + * Idea by Beman Dawes, Ed Brey, Steve Cleary, and Nathan Myers + */ + +// See http://www.boost.org/libs/integer for documentation. + + +#ifndef BOOST_INTEGER_TRAITS_HPP +#define BOOST_INTEGER_TRAITS_HPP + +#include +#include + +// These are an implementation detail and not part of the interface +#include +// we need wchar.h for WCHAR_MAX/MIN but not all platforms provide it, +// and some may have but not ... +#if !defined(BOOST_NO_INTRINSIC_WCHAR_T) && (!defined(BOOST_NO_CWCHAR) || defined(sun) || defined(__sun) || defined(__QNX__)) +#include +#endif + + +namespace boost { +template +class integer_traits : public std::numeric_limits +{ +public: + BOOST_STATIC_CONSTANT(bool, is_integral = false); +}; + +namespace detail { +template +class integer_traits_base +{ +public: + BOOST_STATIC_CONSTANT(bool, is_integral = true); + BOOST_STATIC_CONSTANT(T, const_min = min_val); + BOOST_STATIC_CONSTANT(T, const_max = max_val); +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool integer_traits_base::is_integral; + +template +const T integer_traits_base::const_min; + +template +const T integer_traits_base::const_max; +#endif + +} // namespace detail + +template<> +class integer_traits + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +template<> +class integer_traits + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +template<> +class integer_traits + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +template<> +class integer_traits + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +#ifndef BOOST_NO_INTRINSIC_WCHAR_T +template<> +class integer_traits + : public std::numeric_limits, + // Don't trust WCHAR_MIN and WCHAR_MAX with Mac OS X's native + // library: they are wrong! +#if defined(WCHAR_MIN) && defined(WCHAR_MAX) && !defined(__APPLE__) + public detail::integer_traits_base +#elif defined(__BORLANDC__) || defined(__CYGWIN__) || defined(__MINGW32__) || (defined(__BEOS__) && defined(__GNUC__)) + // No WCHAR_MIN and WCHAR_MAX, whar_t is short and unsigned: + public detail::integer_traits_base +#elif (defined(__sgi) && (!defined(__SGI_STL_PORT) || __SGI_STL_PORT < 0x400))\ + || (defined __APPLE__)\ + || (defined(__OpenBSD__) && defined(__GNUC__))\ + || (defined(__NetBSD__) && defined(__GNUC__))\ + || (defined(__FreeBSD__) && defined(__GNUC__))\ + || (defined(__DragonFly__) && defined(__GNUC__))\ + || (defined(__hpux) && defined(__GNUC__) && (__GNUC__ == 3) && !defined(__SGI_STL_PORT)) + // No WCHAR_MIN and WCHAR_MAX, wchar_t has the same range as int. + // - SGI MIPSpro with native library + // - gcc 3.x on HP-UX + // - Mac OS X with native library + // - gcc on FreeBSD, OpenBSD and NetBSD + public detail::integer_traits_base +#elif defined(__hpux) && defined(__GNUC__) && (__GNUC__ == 2) && !defined(__SGI_STL_PORT) + // No WCHAR_MIN and WCHAR_MAX, wchar_t has the same range as unsigned int. + // - gcc 2.95.x on HP-UX + // (also, std::numeric_limits appears to return the wrong values). + public detail::integer_traits_base +#else +#error No WCHAR_MIN and WCHAR_MAX present, please adjust integer_traits<> for your compiler. +#endif +{ }; +#endif // BOOST_NO_INTRINSIC_WCHAR_T + +template<> +class integer_traits + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +template<> +class integer_traits + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +template<> +class integer_traits + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +template<> +class integer_traits + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +template<> +class integer_traits + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +template<> +class integer_traits + : public std::numeric_limits, + public detail::integer_traits_base +{ }; + +#if !defined(BOOST_NO_INTEGRAL_INT64_T) && !defined(BOOST_NO_INT64_T) +#if defined(ULLONG_MAX) && defined(BOOST_HAS_LONG_LONG) + +template<> +class integer_traits< ::boost::long_long_type> + : public std::numeric_limits< ::boost::long_long_type>, + public detail::integer_traits_base< ::boost::long_long_type, LLONG_MIN, LLONG_MAX> +{ }; + +template<> +class integer_traits< ::boost::ulong_long_type> + : public std::numeric_limits< ::boost::ulong_long_type>, + public detail::integer_traits_base< ::boost::ulong_long_type, 0, ULLONG_MAX> +{ }; + +#elif defined(ULONG_LONG_MAX) && defined(BOOST_HAS_LONG_LONG) + +template<> +class integer_traits< ::boost::long_long_type> : public std::numeric_limits< ::boost::long_long_type>, public detail::integer_traits_base< ::boost::long_long_type, LONG_LONG_MIN, LONG_LONG_MAX>{ }; +template<> +class integer_traits< ::boost::ulong_long_type> + : public std::numeric_limits< ::boost::ulong_long_type>, + public detail::integer_traits_base< ::boost::ulong_long_type, 0, ULONG_LONG_MAX> +{ }; + +#elif defined(ULONGLONG_MAX) && defined(BOOST_HAS_LONG_LONG) + +template<> +class integer_traits< ::boost::long_long_type> + : public std::numeric_limits< ::boost::long_long_type>, + public detail::integer_traits_base< ::boost::long_long_type, LONGLONG_MIN, LONGLONG_MAX> +{ }; + +template<> +class integer_traits< ::boost::ulong_long_type> + : public std::numeric_limits< ::boost::ulong_long_type>, + public detail::integer_traits_base< ::boost::ulong_long_type, 0, ULONGLONG_MAX> +{ }; + +#elif defined(_LLONG_MAX) && defined(_C2) && defined(BOOST_HAS_LONG_LONG) + +template<> +class integer_traits< ::boost::long_long_type> + : public std::numeric_limits< ::boost::long_long_type>, + public detail::integer_traits_base< ::boost::long_long_type, -_LLONG_MAX - _C2, _LLONG_MAX> +{ }; + +template<> +class integer_traits< ::boost::ulong_long_type> + : public std::numeric_limits< ::boost::ulong_long_type>, + public detail::integer_traits_base< ::boost::ulong_long_type, 0, _ULLONG_MAX> +{ }; + +#elif defined(BOOST_HAS_LONG_LONG) +// +// we have long long but no constants, this happens for example with gcc in -ansi mode, +// we'll just have to work out the values for ourselves (assumes 2's compliment representation): +// +template<> +class integer_traits< ::boost::long_long_type> + : public std::numeric_limits< ::boost::long_long_type>, + public detail::integer_traits_base< ::boost::long_long_type, (1LL << (sizeof(::boost::long_long_type) - 1)), ~(1LL << (sizeof(::boost::long_long_type) - 1))> +{ }; + +template<> +class integer_traits< ::boost::ulong_long_type> + : public std::numeric_limits< ::boost::ulong_long_type>, + public detail::integer_traits_base< ::boost::ulong_long_type, 0, ~0uLL> +{ }; + +#endif +#endif + +} // namespace boost + +#endif /* BOOST_INTEGER_TRAITS_HPP */ + + + diff --git a/boost/limits.hpp b/boost/limits.hpp new file mode 100644 index 000000000..6d01daa35 --- /dev/null +++ b/boost/limits.hpp @@ -0,0 +1,146 @@ + +// (C) Copyright John maddock 1999. +// (C) David Abrahams 2002. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// use this header as a workaround for missing + +// See http://www.boost.org/libs/utility/limits.html for documentation. + +#ifndef BOOST_LIMITS +#define BOOST_LIMITS + +#include + +#ifdef BOOST_NO_LIMITS +# include +#else +# include +#endif + +#if (defined(BOOST_HAS_LONG_LONG) && defined(BOOST_NO_LONG_LONG_NUMERIC_LIMITS)) \ + || (defined(BOOST_HAS_MS_INT64) && defined(BOOST_NO_MS_INT64_NUMERIC_LIMITS)) +// Add missing specializations for numeric_limits: +#ifdef BOOST_HAS_MS_INT64 +# define BOOST_LLT __int64 +# define BOOST_ULLT unsigned __int64 +#else +# define BOOST_LLT ::boost::long_long_type +# define BOOST_ULLT ::boost::ulong_long_type +#endif + +#include // for CHAR_BIT + +namespace std +{ + template<> + class numeric_limits + { + public: + + BOOST_STATIC_CONSTANT(bool, is_specialized = true); +#ifdef BOOST_HAS_MS_INT64 + static BOOST_LLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0x8000000000000000i64; } + static BOOST_LLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0x7FFFFFFFFFFFFFFFi64; } +#elif defined(LLONG_MAX) + static BOOST_LLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return LLONG_MIN; } + static BOOST_LLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return LLONG_MAX; } +#elif defined(LONGLONG_MAX) + static BOOST_LLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return LONGLONG_MIN; } + static BOOST_LLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return LONGLONG_MAX; } +#else + static BOOST_LLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 1LL << (sizeof(BOOST_LLT) * CHAR_BIT - 1); } + static BOOST_LLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ~(min)(); } +#endif + BOOST_STATIC_CONSTANT(int, digits = sizeof(BOOST_LLT) * CHAR_BIT -1); + BOOST_STATIC_CONSTANT(int, digits10 = (CHAR_BIT * sizeof (BOOST_LLT) - 1) * 301L / 1000); + BOOST_STATIC_CONSTANT(bool, is_signed = true); + BOOST_STATIC_CONSTANT(bool, is_integer = true); + BOOST_STATIC_CONSTANT(bool, is_exact = true); + BOOST_STATIC_CONSTANT(int, radix = 2); + static BOOST_LLT epsilon() throw() { return 0; }; + static BOOST_LLT round_error() throw() { return 0; }; + + BOOST_STATIC_CONSTANT(int, min_exponent = 0); + BOOST_STATIC_CONSTANT(int, min_exponent10 = 0); + BOOST_STATIC_CONSTANT(int, max_exponent = 0); + BOOST_STATIC_CONSTANT(int, max_exponent10 = 0); + + BOOST_STATIC_CONSTANT(bool, has_infinity = false); + BOOST_STATIC_CONSTANT(bool, has_quiet_NaN = false); + BOOST_STATIC_CONSTANT(bool, has_signaling_NaN = false); + BOOST_STATIC_CONSTANT(bool, has_denorm = false); + BOOST_STATIC_CONSTANT(bool, has_denorm_loss = false); + static BOOST_LLT infinity() throw() { return 0; }; + static BOOST_LLT quiet_NaN() throw() { return 0; }; + static BOOST_LLT signaling_NaN() throw() { return 0; }; + static BOOST_LLT denorm_min() throw() { return 0; }; + + BOOST_STATIC_CONSTANT(bool, is_iec559 = false); + BOOST_STATIC_CONSTANT(bool, is_bounded = true); + BOOST_STATIC_CONSTANT(bool, is_modulo = true); + + BOOST_STATIC_CONSTANT(bool, traps = false); + BOOST_STATIC_CONSTANT(bool, tinyness_before = false); + BOOST_STATIC_CONSTANT(float_round_style, round_style = round_toward_zero); + + }; + + template<> + class numeric_limits + { + public: + + BOOST_STATIC_CONSTANT(bool, is_specialized = true); +#ifdef BOOST_HAS_MS_INT64 + static BOOST_ULLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0ui64; } + static BOOST_ULLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0xFFFFFFFFFFFFFFFFui64; } +#elif defined(ULLONG_MAX) && defined(ULLONG_MIN) + static BOOST_ULLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ULLONG_MIN; } + static BOOST_ULLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ULLONG_MAX; } +#elif defined(ULONGLONG_MAX) && defined(ULONGLONG_MIN) + static BOOST_ULLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ULONGLONG_MIN; } + static BOOST_ULLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ULONGLONG_MAX; } +#else + static BOOST_ULLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0uLL; } + static BOOST_ULLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ~0uLL; } +#endif + BOOST_STATIC_CONSTANT(int, digits = sizeof(BOOST_LLT) * CHAR_BIT); + BOOST_STATIC_CONSTANT(int, digits10 = (CHAR_BIT * sizeof (BOOST_LLT)) * 301L / 1000); + BOOST_STATIC_CONSTANT(bool, is_signed = false); + BOOST_STATIC_CONSTANT(bool, is_integer = true); + BOOST_STATIC_CONSTANT(bool, is_exact = true); + BOOST_STATIC_CONSTANT(int, radix = 2); + static BOOST_ULLT epsilon() throw() { return 0; }; + static BOOST_ULLT round_error() throw() { return 0; }; + + BOOST_STATIC_CONSTANT(int, min_exponent = 0); + BOOST_STATIC_CONSTANT(int, min_exponent10 = 0); + BOOST_STATIC_CONSTANT(int, max_exponent = 0); + BOOST_STATIC_CONSTANT(int, max_exponent10 = 0); + + BOOST_STATIC_CONSTANT(bool, has_infinity = false); + BOOST_STATIC_CONSTANT(bool, has_quiet_NaN = false); + BOOST_STATIC_CONSTANT(bool, has_signaling_NaN = false); + BOOST_STATIC_CONSTANT(bool, has_denorm = false); + BOOST_STATIC_CONSTANT(bool, has_denorm_loss = false); + static BOOST_ULLT infinity() throw() { return 0; }; + static BOOST_ULLT quiet_NaN() throw() { return 0; }; + static BOOST_ULLT signaling_NaN() throw() { return 0; }; + static BOOST_ULLT denorm_min() throw() { return 0; }; + + BOOST_STATIC_CONSTANT(bool, is_iec559 = false); + BOOST_STATIC_CONSTANT(bool, is_bounded = true); + BOOST_STATIC_CONSTANT(bool, is_modulo = true); + + BOOST_STATIC_CONSTANT(bool, traps = false); + BOOST_STATIC_CONSTANT(bool, tinyness_before = false); + BOOST_STATIC_CONSTANT(float_round_style, round_style = round_toward_zero); + + }; +} +#endif + +#endif + diff --git a/boost/random.hpp b/boost/random.hpp new file mode 100644 index 000000000..60a6abfb2 --- /dev/null +++ b/boost/random.hpp @@ -0,0 +1,72 @@ +/* boost random.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org/libs/random for documentation. + * + * $Id: random.hpp 24096 2004-07-27 03:43:34Z dgregor $ + * + * Revision history + * 2000-02-18 portability fixes (thanks to Beman Dawes) + * 2000-02-21 shuffle_output, inversive_congruential_schrage, + * generator_iterator, uniform_smallint + * 2000-02-23 generic modulus arithmetic helper, removed *_schrage classes, + * implemented Streamable and EqualityComparable concepts for + * generators, added Bernoulli distribution and Box-Muller + * transform + * 2000-03-01 cauchy, lognormal, triangle distributions; fixed + * uniform_smallint; renamed gaussian to normal distribution + * 2000-03-05 implemented iterator syntax for distribution functions + * 2000-04-21 removed some optimizations for better BCC/MSVC compatibility + * 2000-05-10 adapted to BCC and MSVC + * 2000-06-13 incorporated review results + * 2000-07-06 moved basic templates from namespace detail to random + * 2000-09-23 warning removals and int64 fixes (Ed Brey) + * 2000-09-24 added lagged_fibonacci generator (Matthias Troyer) + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_HPP +#define BOOST_RANDOM_HPP + +// generators +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { + typedef random::xor_combine, 0, + random::linear_feedback_shift, 0, 0>, 0, + random::linear_feedback_shift, 0, 0> taus88; +} // namespace boost + +// misc +#include + +// distributions +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif // BOOST_RANDOM_HPP diff --git a/boost/random/additive_combine.hpp b/boost/random/additive_combine.hpp new file mode 100644 index 000000000..f15989e31 --- /dev/null +++ b/boost/random/additive_combine.hpp @@ -0,0 +1,125 @@ +/* boost random/additive_combine.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: additive_combine.hpp 41369 2007-11-25 18:07:19Z bemandawes $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_ADDITIVE_COMBINE_HPP +#define BOOST_RANDOM_ADDITIVE_COMBINE_HPP + +#include +#include // for std::min and std::max +#include +#include +#include + +namespace boost { +namespace random { + +// L'Ecuyer 1988 +template +class additive_combine +{ +public: + typedef MLCG1 first_base; + typedef MLCG2 second_base; + typedef typename MLCG1::result_type result_type; +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION + static const bool has_fixed_range = true; + static const result_type min_value = 1; + static const result_type max_value = MLCG1::max_value-1; +#else + enum { has_fixed_range = false }; +#endif + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return 1; } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (_mlcg1.max)()-1; } + + additive_combine() : _mlcg1(), _mlcg2() { } + additive_combine(typename MLCG1::result_type seed1, + typename MLCG2::result_type seed2) + : _mlcg1(seed1), _mlcg2(seed2) { } + template additive_combine(It& first, It last) + : _mlcg1(first, last), _mlcg2(first, last) { } + + void seed() + { + _mlcg1.seed(); + _mlcg2.seed(); + } + + void seed(typename MLCG1::result_type seed1, + typename MLCG2::result_type seed2) + { + _mlcg1.seed(seed1); + _mlcg2.seed(seed2); + } + + template void seed(It& first, It last) + { + _mlcg1.seed(first, last); + _mlcg2.seed(first, last); + } + + result_type operator()() { + result_type z = _mlcg1() - _mlcg2(); + if(z < 1) + z += MLCG1::modulus-1; + return z; + } + static bool validation(result_type x) { return val == x; } + +#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE + +#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const additive_combine& r) + { os << r._mlcg1 << " " << r._mlcg2; return os; } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, additive_combine& r) + { is >> r._mlcg1 >> std::ws >> r._mlcg2; return is; } +#endif + + friend bool operator==(const additive_combine& x, const additive_combine& y) + { return x._mlcg1 == y._mlcg1 && x._mlcg2 == y._mlcg2; } + friend bool operator!=(const additive_combine& x, const additive_combine& y) + { return !(x == y); } +#else + // Use a member function; Streamable concept not supported. + bool operator==(const additive_combine& rhs) const + { return _mlcg1 == rhs._mlcg1 && _mlcg2 == rhs._mlcg2; } + bool operator!=(const additive_combine& rhs) const + { return !(*this == rhs); } +#endif +private: + MLCG1 _mlcg1; + MLCG2 _mlcg2; +}; + +} // namespace random + +typedef random::additive_combine< + random::linear_congruential, + random::linear_congruential, + 2060321752> ecuyer1988; + +} // namespace boost + +#endif // BOOST_RANDOM_ADDITIVE_COMBINE_HPP diff --git a/boost/random/bernoulli_distribution.hpp b/boost/random/bernoulli_distribution.hpp new file mode 100644 index 000000000..a1e3bd78c --- /dev/null +++ b/boost/random/bernoulli_distribution.hpp @@ -0,0 +1,80 @@ +/* boost random/bernoulli_distribution.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: bernoulli_distribution.hpp 41369 2007-11-25 18:07:19Z bemandawes $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_BERNOULLI_DISTRIBUTION_HPP +#define BOOST_RANDOM_BERNOULLI_DISTRIBUTION_HPP + +#include +#include + +namespace boost { + +// Bernoulli distribution: p(true) = p, p(false) = 1-p (boolean) +template +class bernoulli_distribution +{ +public: + // In principle, this could work with both integer and floating-point + // types. Generating floating-point random numbers in the first + // place is probably more expensive, so use integer as input. + typedef int input_type; + typedef bool result_type; + + explicit bernoulli_distribution(const RealType& p_arg = RealType(0.5)) + : _p(p_arg) + { + assert(_p >= 0); + assert(_p <= 1); + } + + // compiler-generated copy ctor and assignment operator are fine + + RealType p() const { return _p; } + void reset() { } + + template + result_type operator()(Engine& eng) + { + if(_p == RealType(0)) + return false; + else + return RealType(eng() - (eng.min)()) <= _p * RealType((eng.max)()-(eng.min)()); + } + +#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const bernoulli_distribution& bd) + { + os << bd._p; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, bernoulli_distribution& bd) + { + is >> std::ws >> bd._p; + return is; + } +#endif + +private: + RealType _p; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_BERNOULLI_DISTRIBUTION_HPP diff --git a/boost/random/binomial_distribution.hpp b/boost/random/binomial_distribution.hpp new file mode 100644 index 000000000..c0dd89736 --- /dev/null +++ b/boost/random/binomial_distribution.hpp @@ -0,0 +1,81 @@ +/* boost random/binomial_distribution.hpp header file + * + * Copyright Jens Maurer 2002 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: binomial_distribution.hpp 41369 2007-11-25 18:07:19Z bemandawes $ + * + */ + +#ifndef BOOST_RANDOM_BINOMIAL_DISTRIBUTION_HPP +#define BOOST_RANDOM_BINOMIAL_DISTRIBUTION_HPP + +#include +#include +#include + +namespace boost { + +// Knuth +template +class binomial_distribution +{ +public: + typedef typename bernoulli_distribution::input_type input_type; + typedef IntType result_type; + + explicit binomial_distribution(IntType t_arg = 1, + const RealType& p_arg = RealType(0.5)) + : _bernoulli(p_arg), _t(t_arg) + { + assert(_t >= 0); + assert(RealType(0) <= p_arg && p_arg <= RealType(1)); + } + + // compiler-generated copy ctor and assignment operator are fine + + IntType t() const { return _t; } + RealType p() const { return _bernoulli.p(); } + void reset() { } + + template + result_type operator()(Engine& eng) + { + // TODO: This is O(_t), but it should be O(log(_t)) for large _t + result_type n = 0; + for(IntType i = 0; i < _t; ++i) + if(_bernoulli(eng)) + ++n; + return n; + } + +#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const binomial_distribution& bd) + { + os << bd._bernoulli << " " << bd._t; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, binomial_distribution& bd) + { + is >> std::ws >> bd._bernoulli >> std::ws >> bd._t; + return is; + } +#endif + +private: + bernoulli_distribution _bernoulli; + IntType _t; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_BINOMIAL_DISTRIBUTION_HPP diff --git a/boost/random/cauchy_distribution.hpp b/boost/random/cauchy_distribution.hpp new file mode 100644 index 000000000..5abb49fff --- /dev/null +++ b/boost/random/cauchy_distribution.hpp @@ -0,0 +1,89 @@ +/* boost random/cauchy_distribution.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: cauchy_distribution.hpp 41369 2007-11-25 18:07:19Z bemandawes $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_CAUCHY_DISTRIBUTION_HPP +#define BOOST_RANDOM_CAUCHY_DISTRIBUTION_HPP + +#include +#include +#include +#include + +namespace boost { + +#if defined(__GNUC__) && (__GNUC__ < 3) +// Special gcc workaround: gcc 2.95.x ignores using-declarations +// in template classes (confirmed by gcc author Martin v. Loewis) + using std::tan; +#endif + +// Cauchy distribution: p(x) = sigma/(pi*(sigma**2 + (x-median)**2)) +template +class cauchy_distribution +{ +public: + typedef RealType input_type; + typedef RealType result_type; + +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(!std::numeric_limits::is_integer); +#endif + + explicit cauchy_distribution(result_type median_arg = result_type(0), + result_type sigma_arg = result_type(1)) + : _median(median_arg), _sigma(sigma_arg) { } + + // compiler-generated copy ctor and assignment operator are fine + + result_type median() const { return _median; } + result_type sigma() const { return _sigma; } + void reset() { } + + template + result_type operator()(Engine& eng) + { + // Can we have a boost::mathconst please? + const result_type pi = result_type(3.14159265358979323846); +#ifndef BOOST_NO_STDC_NAMESPACE + using std::tan; +#endif + return _median + _sigma * tan(pi*(eng()-result_type(0.5))); + } + +#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const cauchy_distribution& cd) + { + os << cd._median << " " << cd._sigma; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, cauchy_distribution& cd) + { + is >> std::ws >> cd._median >> std::ws >> cd._sigma; + return is; + } +#endif + +private: + result_type _median, _sigma; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_CAUCHY_DISTRIBUTION_HPP diff --git a/boost/random/detail/const_mod.hpp b/boost/random/detail/const_mod.hpp new file mode 100644 index 000000000..a32e2b906 --- /dev/null +++ b/boost/random/detail/const_mod.hpp @@ -0,0 +1,359 @@ +/* boost random/detail/const_mod.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: const_mod.hpp 41369 2007-11-25 18:07:19Z bemandawes $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_CONST_MOD_HPP +#define BOOST_RANDOM_CONST_MOD_HPP + +#include +#include +#include +#include +#include + +namespace boost { +namespace random { + +/* + * Some random number generators require modular arithmetic. Put + * everything we need here. + * IntType must be an integral type. + */ + +namespace detail { + + template + struct do_add + { }; + + template<> + struct do_add + { + template + static IntType add(IntType m, IntType x, IntType c) + { + if (x < m - c) + return x + c; + else + return x - (m-c); + } + }; + + template<> + struct do_add + { + template + static IntType add(IntType, IntType, IntType) + { + // difficult + assert(!"const_mod::add with c too large"); + return 0; + } + }; +} // namespace detail + +#if !(defined(__BORLANDC__) && (__BORLANDC__ == 0x560)) + +template +class const_mod +{ +public: + static IntType add(IntType x, IntType c) + { + if(c == 0) + return x; + else if(c <= traits::const_max - m) // i.e. m+c < max + return add_small(x, c); + else + return detail::do_add::add(m, x, c); + } + + static IntType mult(IntType a, IntType x) + { + if(a == 1) + return x; + else if(m <= traits::const_max/a) // i.e. a*m <= max + return mult_small(a, x); + else if(traits::is_signed && (m%a < m/a)) + return mult_schrage(a, x); + else { + // difficult + assert(!"const_mod::mult with a too large"); + return 0; + } + } + + static IntType mult_add(IntType a, IntType x, IntType c) + { + if(m <= (traits::const_max-c)/a) // i.e. a*m+c <= max + return (a*x+c) % m; + else + return add(mult(a, x), c); + } + + static IntType invert(IntType x) + { return x == 0 ? 0 : invert_euclidian(x); } + +private: + typedef integer_traits traits; + + const_mod(); // don't instantiate + + static IntType add_small(IntType x, IntType c) + { + x += c; + if(x >= m) + x -= m; + return x; + } + + static IntType mult_small(IntType a, IntType x) + { + return a*x % m; + } + + static IntType mult_schrage(IntType a, IntType value) + { + const IntType q = m / a; + const IntType r = m % a; + + assert(r < q); // check that overflow cannot happen + + value = a*(value%q) - r*(value/q); + // An optimizer bug in the SGI MIPSpro 7.3.1.x compiler requires this + // convoluted formulation of the loop (Synge Todo) + for(;;) { + if (value > 0) + break; + value += m; + } + return value; + } + + // invert c in the finite field (mod m) (m must be prime) + static IntType invert_euclidian(IntType c) + { + // we are interested in the gcd factor for c, because this is our inverse + BOOST_STATIC_ASSERT(m > 0); +#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) + assert(boost::integer_traits::is_signed); +#elif !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) + BOOST_STATIC_ASSERT(boost::integer_traits::is_signed); +#endif + assert(c > 0); + IntType l1 = 0; + IntType l2 = 1; + IntType n = c; + IntType p = m; + for(;;) { + IntType q = p / n; + l1 -= q * l2; // this requires a signed IntType! + p -= q * n; + if(p == 0) + return (l2 < 1 ? l2 + m : l2); + IntType q2 = n / p; + l2 -= q2 * l1; + n -= q2 * p; + if(n == 0) + return (l1 < 1 ? l1 + m : l1); + } + } +}; + +// The modulus is exactly the word size: rely on machine overflow handling. +// Due to a GCC bug, we cannot partially specialize in the presence of +// template value parameters. +template<> +class const_mod +{ + typedef unsigned int IntType; +public: + static IntType add(IntType x, IntType c) { return x+c; } + static IntType mult(IntType a, IntType x) { return a*x; } + static IntType mult_add(IntType a, IntType x, IntType c) { return a*x+c; } + + // m is not prime, thus invert is not useful +private: // don't instantiate + const_mod(); +}; + +template<> +class const_mod +{ + typedef unsigned long IntType; +public: + static IntType add(IntType x, IntType c) { return x+c; } + static IntType mult(IntType a, IntType x) { return a*x; } + static IntType mult_add(IntType a, IntType x, IntType c) { return a*x+c; } + + // m is not prime, thus invert is not useful +private: // don't instantiate + const_mod(); +}; + +// the modulus is some power of 2: rely partly on machine overflow handling +// we only specialize for rand48 at the moment +#ifndef BOOST_NO_INT64_T +template<> +class const_mod +{ + typedef uint64_t IntType; +public: + static IntType add(IntType x, IntType c) { return c == 0 ? x : mod(x+c); } + static IntType mult(IntType a, IntType x) { return mod(a*x); } + static IntType mult_add(IntType a, IntType x, IntType c) + { return mod(a*x+c); } + static IntType mod(IntType x) { return x &= ((uint64_t(1) << 48)-1); } + + // m is not prime, thus invert is not useful +private: // don't instantiate + const_mod(); +}; +#endif /* !BOOST_NO_INT64_T */ + +#else + +// +// for some reason Borland C++ Builder 6 has problems with +// the full specialisations of const_mod, define a generic version +// instead, the compiler will optimise away the const-if statements: +// + +template +class const_mod +{ +public: + static IntType add(IntType x, IntType c) + { + if(0 == m) + { + return x+c; + } + else + { + if(c == 0) + return x; + else if(c <= traits::const_max - m) // i.e. m+c < max + return add_small(x, c); + else + return detail::do_add::add(m, x, c); + } + } + + static IntType mult(IntType a, IntType x) + { + if(x == 0) + { + return a*x; + } + else + { + if(a == 1) + return x; + else if(m <= traits::const_max/a) // i.e. a*m <= max + return mult_small(a, x); + else if(traits::is_signed && (m%a < m/a)) + return mult_schrage(a, x); + else { + // difficult + assert(!"const_mod::mult with a too large"); + return 0; + } + } + } + + static IntType mult_add(IntType a, IntType x, IntType c) + { + if(m == 0) + { + return a*x+c; + } + else + { + if(m <= (traits::const_max-c)/a) // i.e. a*m+c <= max + return (a*x+c) % m; + else + return add(mult(a, x), c); + } + } + + static IntType invert(IntType x) + { return x == 0 ? 0 : invert_euclidian(x); } + +private: + typedef integer_traits traits; + + const_mod(); // don't instantiate + + static IntType add_small(IntType x, IntType c) + { + x += c; + if(x >= m) + x -= m; + return x; + } + + static IntType mult_small(IntType a, IntType x) + { + return a*x % m; + } + + static IntType mult_schrage(IntType a, IntType value) + { + const IntType q = m / a; + const IntType r = m % a; + + assert(r < q); // check that overflow cannot happen + + value = a*(value%q) - r*(value/q); + while(value <= 0) + value += m; + return value; + } + + // invert c in the finite field (mod m) (m must be prime) + static IntType invert_euclidian(IntType c) + { + // we are interested in the gcd factor for c, because this is our inverse + BOOST_STATIC_ASSERT(m > 0); +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(boost::integer_traits::is_signed); +#endif + assert(c > 0); + IntType l1 = 0; + IntType l2 = 1; + IntType n = c; + IntType p = m; + for(;;) { + IntType q = p / n; + l1 -= q * l2; // this requires a signed IntType! + p -= q * n; + if(p == 0) + return (l2 < 1 ? l2 + m : l2); + IntType q2 = n / p; + l2 -= q2 * l1; + n -= q2 * p; + if(n == 0) + return (l1 < 1 ? l1 + m : l1); + } + } +}; + + +#endif + +} // namespace random +} // namespace boost + +#endif // BOOST_RANDOM_CONST_MOD_HPP diff --git a/boost/random/detail/pass_through_engine.hpp b/boost/random/detail/pass_through_engine.hpp new file mode 100644 index 000000000..02dd391a3 --- /dev/null +++ b/boost/random/detail/pass_through_engine.hpp @@ -0,0 +1,98 @@ +/* boost random/detail/uniform_int_float.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: pass_through_engine.hpp 24096 2004-07-27 03:43:34Z dgregor $ + * + */ + +#ifndef BOOST_RANDOM_DETAIL_PASS_THROUGH_ENGINE_HPP +#define BOOST_RANDOM_DETAIL_PASS_THROUGH_ENGINE_HPP + +#include +#include + + +namespace boost { +namespace random { +namespace detail { + +template +class pass_through_engine +{ +private: + typedef ptr_helper helper_type; + +public: + typedef typename helper_type::value_type base_type; + typedef typename base_type::result_type result_type; + + explicit pass_through_engine(UniformRandomNumberGenerator rng) + // make argument an rvalue to avoid matching Generator& constructor + : _rng(static_cast(rng)) + { } + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (base().min)(); } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (base().max)(); } + base_type& base() { return helper_type::ref(_rng); } + const base_type& base() const { return helper_type::ref(_rng); } + + result_type operator()() { return base()(); } + +private: + UniformRandomNumberGenerator _rng; +}; + +#ifndef BOOST_NO_STD_LOCALE + +template +std::basic_ostream& +operator<<( + std::basic_ostream& os + , const pass_through_engine& ud + ) +{ + return os << ud.base(); +} + +template +std::basic_istream& +operator>>( + std::basic_istream& is + , const pass_through_engine& ud + ) +{ + return is >> ud.base(); +} + +#else // no new streams + +template +inline std::ostream& +operator<<(std::ostream& os, + const pass_through_engine& ud) +{ + return os << ud.base(); +} + +template +inline std::istream& +operator>>(std::istream& is, + const pass_through_engine& ud) +{ + return is >> ud.base(); +} + +#endif + +} // namespace detail +} // namespace random +} // namespace boost + +#endif // BOOST_RANDOM_DETAIL_PASS_THROUGH_ENGINE_HPP + diff --git a/boost/random/detail/ptr_helper.hpp b/boost/random/detail/ptr_helper.hpp new file mode 100644 index 000000000..3f3fbdd56 --- /dev/null +++ b/boost/random/detail/ptr_helper.hpp @@ -0,0 +1,94 @@ +/* boost random/detail/ptr_helper.hpp header file + * + * Copyright Jens Maurer 2002 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: ptr_helper.hpp 24096 2004-07-27 03:43:34Z dgregor $ + * + */ + +#ifndef BOOST_RANDOM_DETAIL_PTR_HELPER_HPP +#define BOOST_RANDOM_DETAIL_PTR_HELPER_HPP + +#include + + +namespace boost { +namespace random { +namespace detail { + +// type_traits could help here, but I don't want to depend on type_traits. +template +struct ptr_helper +{ + typedef T value_type; + typedef T& reference_type; + typedef const T& rvalue_type; + static reference_type ref(T& r) { return r; } + static const T& ref(const T& r) { return r; } +}; + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +template +struct ptr_helper +{ + typedef T value_type; + typedef T& reference_type; + typedef T& rvalue_type; + static reference_type ref(T& r) { return r; } + static const T& ref(const T& r) { return r; } +}; + +template +struct ptr_helper +{ + typedef T value_type; + typedef T& reference_type; + typedef T* rvalue_type; + static reference_type ref(T * p) { return *p; } + static const T& ref(const T * p) { return *p; } +}; +#endif + +} // namespace detail +} // namespace random +} // namespace boost + +// +// BOOST_RANDOM_PTR_HELPER_SPEC -- +// +// Helper macro for broken compilers defines specializations of +// ptr_helper. +// +#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +# define BOOST_RANDOM_PTR_HELPER_SPEC(T) \ +namespace boost { namespace random { namespace detail { \ +template<> \ +struct ptr_helper \ +{ \ + typedef T value_type; \ + typedef T& reference_type; \ + typedef T& rvalue_type; \ + static reference_type ref(T& r) { return r; } \ + static const T& ref(const T& r) { return r; } \ +}; \ + \ +template<> \ +struct ptr_helper \ +{ \ + typedef T value_type; \ + typedef T& reference_type; \ + typedef T* rvalue_type; \ + static reference_type ref(T * p) { return *p; } \ + static const T& ref(const T * p) { return *p; } \ +}; \ +}}} +#else +# define BOOST_RANDOM_PTR_HELPER_SPEC(T) +#endif + +#endif // BOOST_RANDOM_DETAIL_PTR_HELPER_HPP diff --git a/boost/random/detail/signed_unsigned_tools.hpp b/boost/random/detail/signed_unsigned_tools.hpp new file mode 100644 index 000000000..aed3b36ea --- /dev/null +++ b/boost/random/detail/signed_unsigned_tools.hpp @@ -0,0 +1,164 @@ +/* boost random/detail/signed_unsigned_tools.hpp header file + * + * Copyright Jens Maurer 2006 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + */ + +#ifndef BOOST_RANDOM_DETAIL_SIGNED_UNSIGNED_TOOLS +#define BOOST_RANDOM_DETAIL_SIGNED_UNSIGNED_TOOLS + +#include +#include + +namespace boost { +namespace random { +namespace detail { + +/* + * Given an (integral) type T, returns the type "unsigned T". + * (type_traits appears to be lacking the feature) + */ + +template +struct make_unsigned { }; + +template<> +struct make_unsigned +{ + typedef unsigned char type; +}; + +template<> +struct make_unsigned +{ + typedef unsigned char type; +}; + +template<> +struct make_unsigned +{ + typedef unsigned char type; +}; + +template<> +struct make_unsigned +{ + typedef unsigned short type; +}; + +template<> +struct make_unsigned +{ + typedef unsigned short type; +}; + +template<> +struct make_unsigned +{ + typedef unsigned int type; +}; + +template<> +struct make_unsigned +{ + typedef unsigned int type; +}; + +template<> +struct make_unsigned +{ + typedef unsigned long type; +}; + +template<> +struct make_unsigned +{ + typedef unsigned long type; +}; + +#ifdef BOOST_HAS_LONG_LONG +template<> +struct make_unsigned +{ + typedef unsigned long long type; +}; + +template<> +struct make_unsigned +{ + typedef unsigned long long type; +}; +#endif + + +/* + * Compute x - y, we know that x >= y, return an unsigned value. + */ + +template::is_signed> +struct subtract { }; + +template +struct subtract +{ + typedef T result_type; + result_type operator()(T x, T y) { return x - y; } +}; + +template +struct subtract +{ + typedef typename make_unsigned::type result_type; + result_type operator()(T x, T y) + { + if (y >= 0) // because x >= y, it follows that x >= 0, too + return result_type(x) - result_type(y); + if (x >= 0) // y < 0 + // avoid the nasty two's complement case for y == min() + return result_type(x) + result_type(-(y+1)) + 1; + // both x and y are negative: no signed overflow + return result_type(x - y); + } +}; + +/* + * Compute x + y, x is unsigned, result fits in type of "y". + */ + +template::is_signed> +struct add { }; + +template +struct add +{ + typedef T2 result_type; + result_type operator()(T1 x, T2 y) { return x + y; } +}; + +template +struct add +{ + typedef T2 result_type; + result_type operator()(T1 x, T2 y) + { + if (y >= 0) + return x + y; + // y < 0 + if (x >= T1(-(y+1))) // result >= 0 after subtraction + // avoid the nasty two's complement edge case for y == min() + return T2(x - T1(-(y+1)) - 1); + // abs(x) < abs(y), thus T2 able to represent x + return T2(x) + y; + } +}; + +} // namespace detail +} // namespace random +} // namespace boost + +#endif // BOOST_RANDOM_DETAIL_SIGNED_UNSIGNED_TOOLS + diff --git a/boost/random/detail/uniform_int_float.hpp b/boost/random/detail/uniform_int_float.hpp new file mode 100644 index 000000000..ec86ac07a --- /dev/null +++ b/boost/random/detail/uniform_int_float.hpp @@ -0,0 +1,84 @@ +/* boost random/detail/uniform_int_float.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: uniform_int_float.hpp 41369 2007-11-25 18:07:19Z bemandawes $ + * + */ + +#ifndef BOOST_RANDOM_DETAIL_UNIFORM_INT_FLOAT_HPP +#define BOOST_RANDOM_DETAIL_UNIFORM_INT_FLOAT_HPP + +#include +#include + + +namespace boost { +namespace random { +namespace detail { + +template +class uniform_int_float +{ +public: + typedef UniformRandomNumberGenerator base_type; + typedef IntType result_type; + + uniform_int_float(base_type rng, IntType min_arg = 0, IntType max_arg = 0xffffffff) + : _rng(rng), _min(min_arg), _max(max_arg) + { + init(); + } + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _min; } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _max; } + base_type& base() { return _rng.base(); } + const base_type& base() const { return _rng.base(); } + + result_type operator()() + { + return static_cast(_rng() * _range) + _min; + } + +#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const uniform_int_float& ud) + { + os << ud._min << " " << ud._max; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, uniform_int_float& ud) + { + is >> std::ws >> ud._min >> std::ws >> ud._max; + ud.init(); + return is; + } +#endif + +private: + void init() + { + _range = static_cast(_max-_min)+1; + } + + typedef typename base_type::result_type base_result; + uniform_01 _rng; + result_type _min, _max; + base_result _range; +}; + + +} // namespace detail +} // namespace random +} // namespace boost + +#endif // BOOST_RANDOM_DETAIL_UNIFORM_INT_FLOAT_HPP diff --git a/boost/random/discard_block.hpp b/boost/random/discard_block.hpp new file mode 100644 index 000000000..218c6dd13 --- /dev/null +++ b/boost/random/discard_block.hpp @@ -0,0 +1,121 @@ +/* boost random/discard_block.hpp header file + * + * Copyright Jens Maurer 2002 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: discard_block.hpp 29116 2005-05-21 15:57:01Z dgregor $ + * + * Revision history + * 2001-03-02 created + */ + +#ifndef BOOST_RANDOM_DISCARD_BLOCK_HPP +#define BOOST_RANDOM_DISCARD_BLOCK_HPP + +#include +#include +#include +#include + + +namespace boost { +namespace random { + +template +class discard_block +{ +public: + typedef UniformRandomNumberGenerator base_type; + typedef typename base_type::result_type result_type; + + BOOST_STATIC_CONSTANT(bool, has_fixed_range = false); + BOOST_STATIC_CONSTANT(unsigned int, total_block = p); + BOOST_STATIC_CONSTANT(unsigned int, returned_block = r); + +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(total_block >= returned_block); +#endif + + discard_block() : _rng(), _n(0) { } + explicit discard_block(const base_type & rng) : _rng(rng), _n(0) { } + template discard_block(It& first, It last) + : _rng(first, last), _n(0) { } + void seed() { _rng.seed(); _n = 0; } + template void seed(T s) { _rng.seed(s); _n = 0; } + template void seed(It& first, It last) + { _n = 0; _rng.seed(first, last); } + + const base_type& base() const { return _rng; } + + result_type operator()() + { + if(_n >= returned_block) { + // discard values of random number generator + for( ; _n < total_block; ++_n) + _rng(); + _n = 0; + } + ++_n; + return _rng(); + } + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (_rng.min)(); } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (_rng.max)(); } + static bool validation(result_type x) { return true; } // dummy + +#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE + +#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const discard_block& s) + { + os << s._rng << " " << s._n << " "; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, discard_block& s) + { + is >> s._rng >> std::ws >> s._n >> std::ws; + return is; + } +#endif + + friend bool operator==(const discard_block& x, const discard_block& y) + { return x._rng == y._rng && x._n == y._n; } + friend bool operator!=(const discard_block& x, const discard_block& y) + { return !(x == y); } +#else + // Use a member function; Streamable concept not supported. + bool operator==(const discard_block& rhs) const + { return _rng == rhs._rng && _n == rhs._n; } + bool operator!=(const discard_block& rhs) const + { return !(*this == rhs); } +#endif + +private: + base_type _rng; + unsigned int _n; +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool discard_block::has_fixed_range; +template +const unsigned int discard_block::total_block; +template +const unsigned int discard_block::returned_block; +#endif + +} // namespace random + +} // namespace boost + +#endif // BOOST_RANDOM_DISCARD_BLOCK_HPP diff --git a/boost/random/exponential_distribution.hpp b/boost/random/exponential_distribution.hpp new file mode 100644 index 000000000..6c9405784 --- /dev/null +++ b/boost/random/exponential_distribution.hpp @@ -0,0 +1,81 @@ +/* boost random/exponential_distribution.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: exponential_distribution.hpp 41369 2007-11-25 18:07:19Z bemandawes $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_EXPONENTIAL_DISTRIBUTION_HPP +#define BOOST_RANDOM_EXPONENTIAL_DISTRIBUTION_HPP + +#include +#include +#include +#include +#include + +namespace boost { + +// exponential distribution: p(x) = lambda * exp(-lambda * x) +template +class exponential_distribution +{ +public: + typedef RealType input_type; + typedef RealType result_type; + +#if !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) && !(defined(BOOST_MSVC) && BOOST_MSVC <= 1300) + BOOST_STATIC_ASSERT(!std::numeric_limits::is_integer); +#endif + + explicit exponential_distribution(result_type lambda_arg = result_type(1)) + : _lambda(lambda_arg) { assert(_lambda > result_type(0)); } + + // compiler-generated copy ctor and assignment operator are fine + + result_type lambda() const { return _lambda; } + + void reset() { } + + template + result_type operator()(Engine& eng) + { +#ifndef BOOST_NO_STDC_NAMESPACE + using std::log; +#endif + return -result_type(1) / _lambda * log(result_type(1)-eng()); + } + +#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const exponential_distribution& ed) + { + os << ed._lambda; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, exponential_distribution& ed) + { + is >> std::ws >> ed._lambda; + return is; + } +#endif + +private: + result_type _lambda; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_EXPONENTIAL_DISTRIBUTION_HPP diff --git a/boost/random/gamma_distribution.hpp b/boost/random/gamma_distribution.hpp new file mode 100644 index 000000000..778e974d1 --- /dev/null +++ b/boost/random/gamma_distribution.hpp @@ -0,0 +1,133 @@ +/* boost random/gamma_distribution.hpp header file + * + * Copyright Jens Maurer 2002 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: gamma_distribution.hpp 41369 2007-11-25 18:07:19Z bemandawes $ + * + */ + +#ifndef BOOST_RANDOM_GAMMA_DISTRIBUTION_HPP +#define BOOST_RANDOM_GAMMA_DISTRIBUTION_HPP + +#include +#include +#include +#include +#include + +namespace boost { + +// Knuth +template +class gamma_distribution +{ +public: + typedef RealType input_type; + typedef RealType result_type; + +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(!std::numeric_limits::is_integer); +#endif + + explicit gamma_distribution(const result_type& alpha_arg = result_type(1)) + : _exp(result_type(1)), _alpha(alpha_arg) + { + assert(_alpha > result_type(0)); + init(); + } + + // compiler-generated copy ctor and assignment operator are fine + + RealType alpha() const { return _alpha; } + + void reset() { _exp.reset(); } + + template + result_type operator()(Engine& eng) + { +#ifndef BOOST_NO_STDC_NAMESPACE + // allow for Koenig lookup + using std::tan; using std::sqrt; using std::exp; using std::log; + using std::pow; +#endif + if(_alpha == result_type(1)) { + return _exp(eng); + } else if(_alpha > result_type(1)) { + // Can we have a boost::mathconst please? + const result_type pi = result_type(3.14159265358979323846); + for(;;) { + result_type y = tan(pi * eng()); + result_type x = sqrt(result_type(2)*_alpha-result_type(1))*y + + _alpha-result_type(1); + if(x <= result_type(0)) + continue; + if(eng() > + (result_type(1)+y*y) * exp((_alpha-result_type(1)) + *log(x/(_alpha-result_type(1))) + - sqrt(result_type(2)*_alpha + -result_type(1))*y)) + continue; + return x; + } + } else /* alpha < 1.0 */ { + for(;;) { + result_type u = eng(); + result_type y = _exp(eng); + result_type x, q; + if(u < _p) { + x = exp(-y/_alpha); + q = _p*exp(-x); + } else { + x = result_type(1)+y; + q = _p + (result_type(1)-_p) * pow(x, _alpha-result_type(1)); + } + if(u >= q) + continue; + return x; + } + } + } + +#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const gamma_distribution& gd) + { + os << gd._alpha; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, gamma_distribution& gd) + { + is >> std::ws >> gd._alpha; + gd.init(); + return is; + } +#endif + +private: + void init() + { +#ifndef BOOST_NO_STDC_NAMESPACE + // allow for Koenig lookup + using std::exp; +#endif + _p = exp(result_type(1)) / (_alpha + exp(result_type(1))); + } + + exponential_distribution _exp; + result_type _alpha; + // some data precomputed from the parameters + result_type _p; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_GAMMA_DISTRIBUTION_HPP diff --git a/boost/random/geometric_distribution.hpp b/boost/random/geometric_distribution.hpp new file mode 100644 index 000000000..9a1557844 --- /dev/null +++ b/boost/random/geometric_distribution.hpp @@ -0,0 +1,97 @@ +/* boost random/geometric_distribution.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: geometric_distribution.hpp 41369 2007-11-25 18:07:19Z bemandawes $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_GEOMETRIC_DISTRIBUTION_HPP +#define BOOST_RANDOM_GEOMETRIC_DISTRIBUTION_HPP + +#include // std::log +#include +#include +#include + +namespace boost { + +#if defined(__GNUC__) && (__GNUC__ < 3) +// Special gcc workaround: gcc 2.95.x ignores using-declarations +// in template classes (confirmed by gcc author Martin v. Loewis) + using std::log; +#endif + +// geometric distribution: p(i) = (1-p) * pow(p, i-1) (integer) +template +class geometric_distribution +{ +public: + typedef RealType input_type; + typedef IntType result_type; + + explicit geometric_distribution(const RealType& p_arg = RealType(0.5)) + : _p(p_arg) + { + assert(RealType(0) < _p && _p < RealType(1)); + init(); + } + + // compiler-generated copy ctor and assignment operator are fine + + RealType p() const { return _p; } + void reset() { } + + template + result_type operator()(Engine& eng) + { +#ifndef BOOST_NO_STDC_NAMESPACE + using std::log; + using std::floor; +#endif + return IntType(floor(log(RealType(1)-eng()) / _log_p)) + IntType(1); + } + +#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const geometric_distribution& gd) + { + os << gd._p; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, geometric_distribution& gd) + { + is >> std::ws >> gd._p; + gd.init(); + return is; + } +#endif + +private: + void init() + { +#ifndef BOOST_NO_STDC_NAMESPACE + using std::log; +#endif + _log_p = log(_p); + } + + RealType _p; + RealType _log_p; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_GEOMETRIC_DISTRIBUTION_HPP + diff --git a/boost/random/inversive_congruential.hpp b/boost/random/inversive_congruential.hpp new file mode 100644 index 000000000..00be95565 --- /dev/null +++ b/boost/random/inversive_congruential.hpp @@ -0,0 +1,128 @@ +/* boost random/inversive_congruential.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: inversive_congruential.hpp 41369 2007-11-25 18:07:19Z bemandawes $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_INVERSIVE_CONGRUENTIAL_HPP +#define BOOST_RANDOM_INVERSIVE_CONGRUENTIAL_HPP + +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace random { + +// Eichenauer and Lehn 1986 +template +class inversive_congruential +{ +public: + typedef IntType result_type; +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION + static const bool has_fixed_range = true; + static const result_type min_value = (b == 0 ? 1 : 0); + static const result_type max_value = p-1; +#else + BOOST_STATIC_CONSTANT(bool, has_fixed_range = false); +#endif + BOOST_STATIC_CONSTANT(result_type, multiplier = a); + BOOST_STATIC_CONSTANT(result_type, increment = b); + BOOST_STATIC_CONSTANT(result_type, modulus = p); + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return b == 0 ? 1 : 0; } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return p-1; } + + explicit inversive_congruential(IntType y0 = 1) : value(y0) + { + BOOST_STATIC_ASSERT(b >= 0); + BOOST_STATIC_ASSERT(p > 1); + BOOST_STATIC_ASSERT(a >= 1); + if(b == 0) + assert(y0 > 0); + } + template inversive_congruential(It& first, It last) + { seed(first, last); } + + void seed(IntType y0 = 1) { value = y0; if(b == 0) assert(y0 > 0); } + template void seed(It& first, It last) + { + if(first == last) + throw std::invalid_argument("inversive_congruential::seed"); + value = *first++; + } + IntType operator()() + { + typedef const_mod do_mod; + value = do_mod::mult_add(a, do_mod::invert(value), b); + return value; + } + + bool validation(result_type x) const { return val == x; } + +#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE + +#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, inversive_congruential x) + { os << x.value; return os; } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, inversive_congruential& x) + { is >> x.value; return is; } +#endif + + friend bool operator==(inversive_congruential x, inversive_congruential y) + { return x.value == y.value; } + friend bool operator!=(inversive_congruential x, inversive_congruential y) + { return !(x == y); } +#else + // Use a member function; Streamable concept not supported. + bool operator==(inversive_congruential rhs) const + { return value == rhs.value; } + bool operator!=(inversive_congruential rhs) const + { return !(*this == rhs); } +#endif +private: + IntType value; +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool inversive_congruential::has_fixed_range; +template +const typename inversive_congruential::result_type inversive_congruential::min_value; +template +const typename inversive_congruential::result_type inversive_congruential::max_value; +template +const typename inversive_congruential::result_type inversive_congruential::multiplier; +template +const typename inversive_congruential::result_type inversive_congruential::increment; +template +const typename inversive_congruential::result_type inversive_congruential::modulus; +#endif + +} // namespace random + +typedef random::inversive_congruential hellekalek1995; + +} // namespace boost + +#endif // BOOST_RANDOM_INVERSIVE_CONGRUENTIAL_HPP diff --git a/boost/random/lagged_fibonacci.hpp b/boost/random/lagged_fibonacci.hpp new file mode 100644 index 000000000..5be9f82bf --- /dev/null +++ b/boost/random/lagged_fibonacci.hpp @@ -0,0 +1,464 @@ +/* boost random/lagged_fibonacci.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: lagged_fibonacci.hpp 41369 2007-11-25 18:07:19Z bemandawes $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_LAGGED_FIBONACCI_HPP +#define BOOST_RANDOM_LAGGED_FIBONACCI_HPP + +#include +#include +#include // std::max +#include +#include // std::pow +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace random { + +#if BOOST_WORKAROUND(_MSC_FULL_VER, BOOST_TESTED_AT(13102292)) && BOOST_MSVC > 1300 +# define BOOST_RANDOM_EXTRACT_LF +#endif + +#if defined(__APPLE_CC__) && defined(__GNUC__) && (__GNUC__ == 3) && (__GNUC_MINOR__ <= 3) +# define BOOST_RANDOM_EXTRACT_LF +#endif + +# ifdef BOOST_RANDOM_EXTRACT_LF +namespace detail +{ + template + IStream& + extract_lagged_fibonacci_01( + IStream& is + , F const& f + , unsigned int& i + , RealType* x + , RealType modulus) + { + is >> i >> std::ws; + for(unsigned int i = 0; i < f.long_lag; ++i) + { + RealType value; + is >> value >> std::ws; + x[i] = value / modulus; + } + return is; + } + + template + IStream& + extract_lagged_fibonacci( + IStream& is + , F const& f + , unsigned int& i + , UIntType* x) + { + is >> i >> std::ws; + for(unsigned int i = 0; i < f.long_lag; ++i) + is >> x[i] >> std::ws; + return is; + } +} +# endif + +template +class lagged_fibonacci +{ +public: + typedef UIntType result_type; + BOOST_STATIC_CONSTANT(bool, has_fixed_range = false); + BOOST_STATIC_CONSTANT(int, word_size = w); + BOOST_STATIC_CONSTANT(unsigned int, long_lag = p); + BOOST_STATIC_CONSTANT(unsigned int, short_lag = q); + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return 0; } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return wordmask; } + + lagged_fibonacci() { init_wordmask(); seed(); } + explicit lagged_fibonacci(uint32_t value) { init_wordmask(); seed(value); } + template lagged_fibonacci(It& first, It last) + { init_wordmask(); seed(first, last); } + // compiler-generated copy ctor and assignment operator are fine + +private: + void init_wordmask() + { + wordmask = 0; + for(int j = 0; j < w; ++j) + wordmask |= (1u << j); + } + +public: + void seed(uint32_t value = 331u) + { + minstd_rand0 gen(value); + for(unsigned int j = 0; j < long_lag; ++j) + x[j] = gen() & wordmask; + i = long_lag; + } + + template + void seed(It& first, It last) + { + // word size could be smaller than the seed values + unsigned int j; + for(j = 0; j < long_lag && first != last; ++j, ++first) + x[j] = *first & wordmask; + i = long_lag; + if(first == last && j < long_lag) + throw std::invalid_argument("lagged_fibonacci::seed"); + } + + result_type operator()() + { + if(i >= long_lag) + fill(); + return x[i++]; + } + + static bool validation(result_type x) + { + return x == val; + } + +#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE + +#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const lagged_fibonacci& f) + { + os << f.i << " "; + for(unsigned int i = 0; i < f.long_lag; ++i) + os << f.x[i] << " "; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, lagged_fibonacci& f) + { +# ifdef BOOST_RANDOM_EXTRACT_LF + return detail::extract_lagged_fibonacci(is, f, f.i, f.x); +# else + is >> f.i >> std::ws; + for(unsigned int i = 0; i < f.long_lag; ++i) + is >> f.x[i] >> std::ws; + return is; +# endif + } +#endif + + friend bool operator==(const lagged_fibonacci& x, const lagged_fibonacci& y) + { return x.i == y.i && std::equal(x.x, x.x+long_lag, y.x); } + friend bool operator!=(const lagged_fibonacci& x, + const lagged_fibonacci& y) + { return !(x == y); } +#else + // Use a member function; Streamable concept not supported. + bool operator==(const lagged_fibonacci& rhs) const + { return i == rhs.i && std::equal(x, x+long_lag, rhs.x); } + bool operator!=(const lagged_fibonacci& rhs) const + { return !(*this == rhs); } +#endif + +private: + void fill(); + UIntType wordmask; + unsigned int i; + UIntType x[long_lag]; +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool lagged_fibonacci::has_fixed_range; +template +const unsigned int lagged_fibonacci::long_lag; +template +const unsigned int lagged_fibonacci::short_lag; +#endif + +template +void lagged_fibonacci::fill() +{ + // two loops to avoid costly modulo operations + { // extra scope for MSVC brokenness w.r.t. for scope + for(unsigned int j = 0; j < short_lag; ++j) + x[j] = (x[j] + x[j+(long_lag-short_lag)]) & wordmask; + } + for(unsigned int j = short_lag; j < long_lag; ++j) + x[j] = (x[j] + x[j-short_lag]) & wordmask; + i = 0; +} + + + +// lagged Fibonacci generator for the range [0..1) +// contributed by Matthias Troyer +// for p=55, q=24 originally by G. J. Mitchell and D. P. Moore 1958 + +template +struct fibonacci_validation +{ + BOOST_STATIC_CONSTANT(bool, is_specialized = false); + static T value() { return 0; } + static T tolerance() { return 0; } +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool fibonacci_validation::is_specialized; +#endif + +#define BOOST_RANDOM_FIBONACCI_VAL(T,P,Q,V,E) \ +template<> \ +struct fibonacci_validation \ +{ \ + BOOST_STATIC_CONSTANT(bool, is_specialized = true); \ + static T value() { return V; } \ + static T tolerance() \ +{ return (std::max)(E, static_cast(5*std::numeric_limits::epsilon())); } \ +}; +// (The extra static_cast in the std::max call above is actually +// unnecessary except for HP aCC 1.30, which claims that +// numeric_limits::epsilon() doesn't actually return a double.) + +BOOST_RANDOM_FIBONACCI_VAL(double, 607, 273, 0.4293817707235914, 1e-14) +BOOST_RANDOM_FIBONACCI_VAL(double, 1279, 418, 0.9421630240437659, 1e-14) +BOOST_RANDOM_FIBONACCI_VAL(double, 2281, 1252, 0.1768114046909004, 1e-14) +BOOST_RANDOM_FIBONACCI_VAL(double, 3217, 576, 0.1956232694868209, 1e-14) +BOOST_RANDOM_FIBONACCI_VAL(double, 4423, 2098, 0.9499762202147172, 1e-14) +BOOST_RANDOM_FIBONACCI_VAL(double, 9689, 5502, 0.05737836943695162, 1e-14) +BOOST_RANDOM_FIBONACCI_VAL(double, 19937, 9842, 0.5076528587449834, 1e-14) +BOOST_RANDOM_FIBONACCI_VAL(double, 23209, 13470, 0.5414473810619185, 1e-14) +BOOST_RANDOM_FIBONACCI_VAL(double, 44497,21034, 0.254135073399297, 1e-14) + +#undef BOOST_RANDOM_FIBONACCI_VAL + +template +class lagged_fibonacci_01 +{ +public: + typedef RealType result_type; + BOOST_STATIC_CONSTANT(bool, has_fixed_range = false); + BOOST_STATIC_CONSTANT(int, word_size = w); + BOOST_STATIC_CONSTANT(unsigned int, long_lag = p); + BOOST_STATIC_CONSTANT(unsigned int, short_lag = q); + + lagged_fibonacci_01() { init_modulus(); seed(); } + explicit lagged_fibonacci_01(uint32_t value) { init_modulus(); seed(value); } + template + explicit lagged_fibonacci_01(Generator & gen) { init_modulus(); seed(gen); } + template lagged_fibonacci_01(It& first, It last) + { init_modulus(); seed(first, last); } + // compiler-generated copy ctor and assignment operator are fine + +private: + void init_modulus() + { +#ifndef BOOST_NO_STDC_NAMESPACE + // allow for Koenig lookup + using std::pow; +#endif + _modulus = pow(RealType(2), word_size); + } + +public: + void seed(uint32_t value = 331u) + { + minstd_rand0 intgen(value); + seed(intgen); + } + + // For GCC, moving this function out-of-line prevents inlining, which may + // reduce overall object code size. However, MSVC does not grok + // out-of-line template member functions. + template + void seed(Generator & gen) + { + // use pass-by-reference, but wrap argument in pass_through_engine + typedef detail::pass_through_engine ref_gen; + uniform_01 gen01 = + uniform_01(ref_gen(gen)); + // I could have used std::generate_n, but it takes "gen" by value + for(unsigned int j = 0; j < long_lag; ++j) + x[j] = gen01(); + i = long_lag; + } + + template + void seed(It& first, It last) + { +#ifndef BOOST_NO_STDC_NAMESPACE + // allow for Koenig lookup + using std::fmod; + using std::pow; +#endif + unsigned long mask = ~((~0u) << (w%32)); // now lowest w bits set + RealType two32 = pow(RealType(2), 32); + unsigned int j; + for(j = 0; j < long_lag && first != last; ++j, ++first) { + x[j] = RealType(0); + for(int k = 0; k < w/32 && first != last; ++k, ++first) + x[j] += *first / pow(two32,k+1); + if(first != last && mask != 0) + x[j] += fmod((*first & mask) / _modulus, RealType(1)); + } + i = long_lag; + if(first == last && j < long_lag) + throw std::invalid_argument("lagged_fibonacci_01::seed"); + } + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return result_type(0); } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return result_type(1); } + + result_type operator()() + { + if(i >= long_lag) + fill(); + return x[i++]; + } + + static bool validation(result_type x) + { + result_type v = fibonacci_validation::value(); + result_type epsilon = fibonacci_validation::tolerance(); + // std::abs is a source of trouble: sometimes, it's not overloaded + // for double, plus the usual namespace std noncompliance -> avoid it + // using std::abs; + // return abs(x - v) < 5 * epsilon + return x > v - epsilon && x < v + epsilon; + } + +#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE + +#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const lagged_fibonacci_01&f) + { +#ifndef BOOST_NO_STDC_NAMESPACE + // allow for Koenig lookup + using std::pow; +#endif + os << f.i << " "; + std::ios_base::fmtflags oldflags = os.flags(os.dec | os.fixed | os.left); + for(unsigned int i = 0; i < f.long_lag; ++i) + os << f.x[i] * f._modulus << " "; + os.flags(oldflags); + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, lagged_fibonacci_01& f) + { +# ifdef BOOST_RANDOM_EXTRACT_LF + return detail::extract_lagged_fibonacci_01(is, f, f.i, f.x, f._modulus); +# else + is >> f.i >> std::ws; + for(unsigned int i = 0; i < f.long_lag; ++i) { + typename lagged_fibonacci_01::result_type value; + is >> value >> std::ws; + f.x[i] = value / f._modulus; + } + return is; +# endif + } +#endif + + friend bool operator==(const lagged_fibonacci_01& x, + const lagged_fibonacci_01& y) + { return x.i == y.i && std::equal(x.x, x.x+long_lag, y.x); } + friend bool operator!=(const lagged_fibonacci_01& x, + const lagged_fibonacci_01& y) + { return !(x == y); } +#else + // Use a member function; Streamable concept not supported. + bool operator==(const lagged_fibonacci_01& rhs) const + { return i == rhs.i && std::equal(x, x+long_lag, rhs.x); } + bool operator!=(const lagged_fibonacci_01& rhs) const + { return !(*this == rhs); } +#endif + +private: + void fill(); + unsigned int i; + RealType x[long_lag]; + RealType _modulus; +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool lagged_fibonacci_01::has_fixed_range; +template +const unsigned int lagged_fibonacci_01::long_lag; +template +const unsigned int lagged_fibonacci_01::short_lag; +template +const int lagged_fibonacci_01::word_size; + +#endif + +template +void lagged_fibonacci_01::fill() +{ + // two loops to avoid costly modulo operations + { // extra scope for MSVC brokenness w.r.t. for scope + for(unsigned int j = 0; j < short_lag; ++j) { + RealType t = x[j] + x[j+(long_lag-short_lag)]; + if(t >= RealType(1)) + t -= RealType(1); + x[j] = t; + } + } + for(unsigned int j = short_lag; j < long_lag; ++j) { + RealType t = x[j] + x[j-short_lag]; + if(t >= RealType(1)) + t -= RealType(1); + x[j] = t; + } + i = 0; +} + +} // namespace random + +typedef random::lagged_fibonacci_01 lagged_fibonacci607; +typedef random::lagged_fibonacci_01 lagged_fibonacci1279; +typedef random::lagged_fibonacci_01 lagged_fibonacci2281; +typedef random::lagged_fibonacci_01 lagged_fibonacci3217; +typedef random::lagged_fibonacci_01 lagged_fibonacci4423; +typedef random::lagged_fibonacci_01 lagged_fibonacci9689; +typedef random::lagged_fibonacci_01 lagged_fibonacci19937; +typedef random::lagged_fibonacci_01 lagged_fibonacci23209; +typedef random::lagged_fibonacci_01 lagged_fibonacci44497; + + +// It is possible to partially specialize uniform_01<> on lagged_fibonacci_01<> +// to help the compiler generate efficient code. For GCC, this seems useless, +// because GCC optimizes (x-0)/(1-0) to (x-0). This is good enough for now. + +} // namespace boost + +#endif // BOOST_RANDOM_LAGGED_FIBONACCI_HPP diff --git a/boost/random/linear_congruential.hpp b/boost/random/linear_congruential.hpp new file mode 100644 index 000000000..3e64ab440 --- /dev/null +++ b/boost/random/linear_congruential.hpp @@ -0,0 +1,258 @@ +/* boost random/linear_congruential.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: linear_congruential.hpp 29116 2005-05-21 15:57:01Z dgregor $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_LINEAR_CONGRUENTIAL_HPP +#define BOOST_RANDOM_LINEAR_CONGRUENTIAL_HPP + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace random { + +// compile-time configurable linear congruential generator +template +class linear_congruential +{ +public: + typedef IntType result_type; +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION + static const bool has_fixed_range = true; + static const result_type min_value = ( c == 0 ? 1 : 0 ); + static const result_type max_value = m-1; +#else + BOOST_STATIC_CONSTANT(bool, has_fixed_range = false); +#endif + BOOST_STATIC_CONSTANT(IntType, multiplier = a); + BOOST_STATIC_CONSTANT(IntType, increment = c); + BOOST_STATIC_CONSTANT(IntType, modulus = m); + + // MSVC 6 and possibly others crash when encountering complicated integral + // constant expressions. Avoid the check for now. + // BOOST_STATIC_ASSERT(m == 0 || a < m); + // BOOST_STATIC_ASSERT(m == 0 || c < m); + + explicit linear_congruential(IntType x0 = 1) + : _modulus(modulus), _x(_modulus ? (x0 % _modulus) : x0) + { + assert(c || x0); /* if c == 0 and x(0) == 0 then x(n) = 0 for all n */ + // overflow check + // disabled because it gives spurious "divide by zero" gcc warnings + // assert(m == 0 || (a*(m-1)+c) % m == (c < a ? c-a+m : c-a)); + + // MSVC fails BOOST_STATIC_ASSERT with std::numeric_limits at class scope +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(std::numeric_limits::is_integer); +#endif + } + + template + linear_congruential(It& first, It last) { seed(first, last); } + + // compiler-generated copy constructor and assignment operator are fine + void seed(IntType x0 = 1) + { + assert(c || x0); + _x = (_modulus ? (x0 % _modulus) : x0); + } + + template + void seed(It& first, It last) + { + if(first == last) + throw std::invalid_argument("linear_congruential::seed"); + IntType value = *first++; + _x = (_modulus ? (value % _modulus) : value); + } + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return c == 0 ? 1 : 0; } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return modulus-1; } + + IntType operator()() + { + _x = const_mod::mult_add(a, _x, c); + return _x; + } + + static bool validation(IntType x) { return val == x; } + +#ifdef BOOST_NO_OPERATORS_IN_NAMESPACE + + // Use a member function; Streamable concept not supported. + bool operator==(const linear_congruential& rhs) const + { return _x == rhs._x; } + bool operator!=(const linear_congruential& rhs) const + { return !(*this == rhs); } + +#else + friend bool operator==(const linear_congruential& x, + const linear_congruential& y) + { return x._x == y._x; } + friend bool operator!=(const linear_congruential& x, + const linear_congruential& y) + { return !(x == y); } + +#if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) && !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551)) + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, + const linear_congruential& lcg) + { + return os << lcg._x; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, + linear_congruential& lcg) + { + return is >> lcg._x; + } + +private: +#endif +#endif + + IntType _modulus; // work-around for gcc "divide by zero" warning in ctor + IntType _x; +}; + +// probably needs the "no native streams" caveat for STLPort +#if !defined(__SGI_STL_PORT) && BOOST_WORKAROUND(__GNUC__, == 2) +template +std::ostream& +operator<<(std::ostream& os, + const linear_congruential& lcg) +{ + return os << lcg._x; +} + +template +std::istream& +operator>>(std::istream& is, + linear_congruential& lcg) +{ + return is >> lcg._x; +} +#elif defined(BOOST_NO_OPERATORS_IN_NAMESPACE) || defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551)) +template +std::basic_ostream& +operator<<(std::basic_ostream& os, + const linear_congruential& lcg) +{ + return os << lcg._x; +} + +template +std::basic_istream& +operator>>(std::basic_istream& is, + linear_congruential& lcg) +{ + return is >> lcg._x; +} +#endif + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool linear_congruential::has_fixed_range; +template +const typename linear_congruential::result_type linear_congruential::min_value; +template +const typename linear_congruential::result_type linear_congruential::max_value; +template +const IntType linear_congruential::modulus; +#endif + +} // namespace random + +// validation values from the publications +typedef random::linear_congruential minstd_rand0; +typedef random::linear_congruential minstd_rand; + + +#if !defined(BOOST_NO_INT64_T) && !defined(BOOST_NO_INTEGRAL_INT64_T) +// emulate the lrand48() C library function; requires support for uint64_t +class rand48 +{ +public: + typedef int32_t result_type; +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION + static const bool has_fixed_range = true; + static const int32_t min_value = 0; + static const int32_t max_value = integer_traits::const_max; +#else + enum { has_fixed_range = false }; +#endif + int32_t min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return 0; } + int32_t max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return std::numeric_limits::max BOOST_PREVENT_MACRO_SUBSTITUTION (); } + + explicit rand48(int32_t x0 = 1) : lcf(cnv(x0)) { } + explicit rand48(uint64_t x0) : lcf(x0) { } + template rand48(It& first, It last) : lcf(first, last) { } + // compiler-generated copy ctor and assignment operator are fine + void seed(int32_t x0 = 1) { lcf.seed(cnv(x0)); } + void seed(uint64_t x0) { lcf.seed(x0); } + template void seed(It& first, It last) { lcf.seed(first,last); } + + int32_t operator()() { return static_cast(lcf() >> 17); } + // by experiment from lrand48() + static bool validation(int32_t x) { return x == 1993516219; } + +#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE + +#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const rand48& r) + { os << r.lcf; return os; } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, rand48& r) + { is >> r.lcf; return is; } +#endif + + friend bool operator==(const rand48& x, const rand48& y) + { return x.lcf == y.lcf; } + friend bool operator!=(const rand48& x, const rand48& y) + { return !(x == y); } +#else + // Use a member function; Streamable concept not supported. + bool operator==(const rand48& rhs) const + { return lcf == rhs.lcf; } + bool operator!=(const rand48& rhs) const + { return !(*this == rhs); } +#endif +private: + random::linear_congruential lcf; + static uint64_t cnv(int32_t x) + { return (static_cast(x) << 16) | 0x330e; } +}; +#endif /* !BOOST_NO_INT64_T && !BOOST_NO_INTEGRAL_INT64_T */ + +} // namespace boost + +#endif // BOOST_RANDOM_LINEAR_CONGRUENTIAL_HPP diff --git a/boost/random/linear_feedback_shift.hpp b/boost/random/linear_feedback_shift.hpp new file mode 100644 index 000000000..b754254b1 --- /dev/null +++ b/boost/random/linear_feedback_shift.hpp @@ -0,0 +1,145 @@ +/* boost random/tausworthe.hpp header file + * + * Copyright Jens Maurer 2002 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: linear_feedback_shift.hpp 29116 2005-05-21 15:57:01Z dgregor $ + * + */ + +#ifndef BOOST_RANDOM_LINEAR_FEEDBACK_SHIFT_HPP +#define BOOST_RANDOM_LINEAR_FEEDBACK_SHIFT_HPP + +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace random { + +// Tausworte 1965 +template +class linear_feedback_shift +{ +public: + typedef UIntType result_type; + // avoid the warning trouble when using (1< 0); + // BOOST_STATIC_ASSERT(q > 0); + // BOOST_STATIC_ASSERT(k < w); + // BOOST_STATIC_ASSERT(0 < 2*q && 2*q < k); + // BOOST_STATIC_ASSERT(0 < s && s <= k-q); + + explicit linear_feedback_shift(UIntType s0 = 341) : wordmask(0) + { + // MSVC fails BOOST_STATIC_ASSERT with std::numeric_limits at class scope +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(std::numeric_limits::is_integer); + BOOST_STATIC_ASSERT(!std::numeric_limits::is_signed); +#endif + + // avoid "left shift count >= with of type" warning + for(int i = 0; i < w; ++i) + wordmask |= (1u << i); + seed(s0); + } + + template linear_feedback_shift(It& first, It last) : wordmask(0) + { + // MSVC fails BOOST_STATIC_ASSERT with std::numeric_limits at class scope +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(std::numeric_limits::is_integer); + BOOST_STATIC_ASSERT(!std::numeric_limits::is_signed); +#endif + + // avoid "left shift count >= with of type" warning + for(int i = 0; i < w; ++i) + wordmask |= (1u << i); + seed(first, last); + } + + void seed(UIntType s0 = 341) { assert(s0 >= (1 << (w-k))); value = s0; } + template void seed(It& first, It last) + { + if(first == last) + throw std::invalid_argument("linear_feedback_shift::seed"); + value = *first++; + assert(value >= (1 << (w-k))); + } + + result_type operator()() + { + const UIntType b = (((value << q) ^ value) & wordmask) >> (k-s); + const UIntType mask = ( (~static_cast(0)) << (w-k) ) & wordmask; + value = ((value & mask) << s) ^ b; + return value; + } + bool validation(result_type x) const { return val == x; } + +#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE + +#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, linear_feedback_shift x) + { os << x.value; return os; } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, linear_feedback_shift& x) + { is >> x.value; return is; } +#endif + + friend bool operator==(linear_feedback_shift x, linear_feedback_shift y) + { return x.value == y.value; } + friend bool operator!=(linear_feedback_shift x, linear_feedback_shift y) + { return !(x == y); } +#else + // Use a member function; Streamable concept not supported. + bool operator==(linear_feedback_shift rhs) const + { return value == rhs.value; } + bool operator!=(linear_feedback_shift rhs) const + { return !(*this == rhs); } +#endif + +private: + UIntType wordmask; // avoid "left shift count >= width of type" warnings + UIntType value; +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool linear_feedback_shift::has_fixed_range; +template +const int linear_feedback_shift::word_size; +template +const int linear_feedback_shift::exponent1; +template +const int linear_feedback_shift::exponent2; +template +const int linear_feedback_shift::step_size; +#endif + +} // namespace random +} // namespace boost + +#endif // BOOST_RANDOM_LINEAR_FEEDBACK_SHIFT_HPP diff --git a/boost/random/lognormal_distribution.hpp b/boost/random/lognormal_distribution.hpp new file mode 100644 index 000000000..f4840cf1b --- /dev/null +++ b/boost/random/lognormal_distribution.hpp @@ -0,0 +1,114 @@ +/* boost random/lognormal_distribution.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: lognormal_distribution.hpp 41369 2007-11-25 18:07:19Z bemandawes $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_LOGNORMAL_DISTRIBUTION_HPP +#define BOOST_RANDOM_LOGNORMAL_DISTRIBUTION_HPP + +#include // std::exp, std::sqrt +#include +#include +#include +#include +#include + +#ifdef BOOST_NO_STDC_NAMESPACE +namespace std { + using ::log; + using ::sqrt; +} +#endif + +namespace boost { + +#if defined(__GNUC__) && (__GNUC__ < 3) +// Special gcc workaround: gcc 2.95.x ignores using-declarations +// in template classes (confirmed by gcc author Martin v. Loewis) + using std::sqrt; + using std::exp; +#endif + +template +class lognormal_distribution +{ +public: + typedef typename normal_distribution::input_type input_type; + typedef RealType result_type; + +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(!std::numeric_limits::is_integer); +#endif + + explicit lognormal_distribution(result_type mean_arg = result_type(1), + result_type sigma_arg = result_type(1)) + : _mean(mean_arg), _sigma(sigma_arg) + { + assert(_mean > result_type(0)); + init(); + } + + // compiler-generated copy ctor and assignment operator are fine + + RealType mean() const { return _mean; } + RealType sigma() const { return _sigma; } + void reset() { _normal.reset(); } + + template + result_type operator()(Engine& eng) + { +#ifndef BOOST_NO_STDC_NAMESPACE + // allow for Koenig lookup + using std::exp; +#endif + return exp(_normal(eng) * _nsigma + _nmean); + } + +#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const lognormal_distribution& ld) + { + os << ld._normal << " " << ld._mean << " " << ld._sigma; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, lognormal_distribution& ld) + { + is >> std::ws >> ld._normal >> std::ws >> ld._mean >> std::ws >> ld._sigma; + ld.init(); + return is; + } +#endif + +private: + void init() + { +#ifndef BOOST_NO_STDC_NAMESPACE + // allow for Koenig lookup + using std::exp; using std::log; using std::sqrt; +#endif + _nmean = log(_mean*_mean/sqrt(_sigma*_sigma + _mean*_mean)); + _nsigma = sqrt(log(_sigma*_sigma/_mean/_mean+result_type(1))); + } + + RealType _mean, _sigma; + RealType _nmean, _nsigma; + normal_distribution _normal; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_LOGNORMAL_DISTRIBUTION_HPP diff --git a/boost/random/mersenne_twister.hpp b/boost/random/mersenne_twister.hpp new file mode 100644 index 000000000..5bd278e61 --- /dev/null +++ b/boost/random/mersenne_twister.hpp @@ -0,0 +1,302 @@ +/* boost random/mersenne_twister.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: mersenne_twister.hpp 41369 2007-11-25 18:07:19Z bemandawes $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_MERSENNE_TWISTER_HPP +#define BOOST_RANDOM_MERSENNE_TWISTER_HPP + +#include +#include // std::copy +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace random { + +// http://www.math.keio.ac.jp/matumoto/emt.html +template +class mersenne_twister +{ +public: + typedef UIntType result_type; + BOOST_STATIC_CONSTANT(int, word_size = w); + BOOST_STATIC_CONSTANT(int, state_size = n); + BOOST_STATIC_CONSTANT(int, shift_size = m); + BOOST_STATIC_CONSTANT(int, mask_bits = r); + BOOST_STATIC_CONSTANT(UIntType, parameter_a = a); + BOOST_STATIC_CONSTANT(int, output_u = u); + BOOST_STATIC_CONSTANT(int, output_s = s); + BOOST_STATIC_CONSTANT(UIntType, output_b = b); + BOOST_STATIC_CONSTANT(int, output_t = t); + BOOST_STATIC_CONSTANT(UIntType, output_c = c); + BOOST_STATIC_CONSTANT(int, output_l = l); + + BOOST_STATIC_CONSTANT(bool, has_fixed_range = false); + + mersenne_twister() { seed(); } + +#if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x520) + // Work around overload resolution problem (Gennadiy E. Rozental) + explicit mersenne_twister(const UIntType& value) +#else + explicit mersenne_twister(UIntType value) +#endif + { seed(value); } + template mersenne_twister(It& first, It last) { seed(first,last); } + + template + explicit mersenne_twister(Generator & gen) { seed(gen); } + + // compiler-generated copy ctor and assignment operator are fine + + void seed() { seed(UIntType(5489)); } + +#if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x520) + // Work around overload resolution problem (Gennadiy E. Rozental) + void seed(const UIntType& value) +#else + void seed(UIntType value) +#endif + { + // New seeding algorithm from + // http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html + // In the previous versions, MSBs of the seed affected only MSBs of the + // state x[]. + const UIntType mask = ~0u; + x[0] = value & mask; + for (i = 1; i < n; i++) { + // See Knuth "The Art of Computer Programming" Vol. 2, 3rd ed., page 106 + x[i] = (1812433253UL * (x[i-1] ^ (x[i-1] >> (w-2))) + i) & mask; + } + } + + // For GCC, moving this function out-of-line prevents inlining, which may + // reduce overall object code size. However, MSVC does not grok + // out-of-line definitions of member function templates. + template + void seed(Generator & gen) + { +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(!std::numeric_limits::is_signed); +#endif + // I could have used std::generate_n, but it takes "gen" by value + for(int j = 0; j < n; j++) + x[j] = gen(); + i = n; + } + + template + void seed(It& first, It last) + { + int j; + for(j = 0; j < n && first != last; ++j, ++first) + x[j] = *first; + i = n; + if(first == last && j < n) + throw std::invalid_argument("mersenne_twister::seed"); + } + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return 0; } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const + { + // avoid "left shift count >= with of type" warning + result_type res = 0; + for(int j = 0; j < w; ++j) + res |= (1u << j); + return res; + } + + result_type operator()(); + static bool validation(result_type v) { return val == v; } + +#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE + +#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const mersenne_twister& mt) + { + for(int j = 0; j < mt.state_size; ++j) + os << mt.compute(j) << " "; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, mersenne_twister& mt) + { + for(int j = 0; j < mt.state_size; ++j) + is >> mt.x[j] >> std::ws; + // MSVC (up to 7.1) and Borland (up to 5.64) don't handle the template + // value parameter "n" available from the class template scope, so use + // the static constant with the same value + mt.i = mt.state_size; + return is; + } +#endif + + friend bool operator==(const mersenne_twister& x, const mersenne_twister& y) + { + for(int j = 0; j < state_size; ++j) + if(x.compute(j) != y.compute(j)) + return false; + return true; + } + + friend bool operator!=(const mersenne_twister& x, const mersenne_twister& y) + { return !(x == y); } +#else + // Use a member function; Streamable concept not supported. + bool operator==(const mersenne_twister& rhs) const + { + for(int j = 0; j < state_size; ++j) + if(compute(j) != rhs.compute(j)) + return false; + return true; + } + + bool operator!=(const mersenne_twister& rhs) const + { return !(*this == rhs); } +#endif + +private: + // returns x(i-n+index), where index is in 0..n-1 + UIntType compute(unsigned int index) const + { + // equivalent to (i-n+index) % 2n, but doesn't produce negative numbers + return x[ (i + n + index) % (2*n) ]; + } + void twist(int block); + + // state representation: next output is o(x(i)) + // x[0] ... x[k] x[k+1] ... x[n-1] x[n] ... x[2*n-1] represents + // x(i-k) ... x(i) x(i+1) ... x(i-k+n-1) x(i-k-n) ... x[i(i-k-1)] + // The goal is to always have x(i-n) ... x(i-1) available for + // operator== and save/restore. + + UIntType x[2*n]; + int i; +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool mersenne_twister::has_fixed_range; +template +const int mersenne_twister::state_size; +template +const int mersenne_twister::shift_size; +template +const int mersenne_twister::mask_bits; +template +const UIntType mersenne_twister::parameter_a; +template +const int mersenne_twister::output_u; +template +const int mersenne_twister::output_s; +template +const UIntType mersenne_twister::output_b; +template +const int mersenne_twister::output_t; +template +const UIntType mersenne_twister::output_c; +template +const int mersenne_twister::output_l; +#endif + +template +void mersenne_twister::twist(int block) +{ + const UIntType upper_mask = (~0u) << r; + const UIntType lower_mask = ~upper_mask; + + if(block == 0) { + for(int j = n; j < 2*n; j++) { + UIntType y = (x[j-n] & upper_mask) | (x[j-(n-1)] & lower_mask); + x[j] = x[j-(n-m)] ^ (y >> 1) ^ (y&1 ? a : 0); + } + } else if (block == 1) { + // split loop to avoid costly modulo operations + { // extra scope for MSVC brokenness w.r.t. for scope + for(int j = 0; j < n-m; j++) { + UIntType y = (x[j+n] & upper_mask) | (x[j+n+1] & lower_mask); + x[j] = x[j+n+m] ^ (y >> 1) ^ (y&1 ? a : 0); + } + } + + for(int j = n-m; j < n-1; j++) { + UIntType y = (x[j+n] & upper_mask) | (x[j+n+1] & lower_mask); + x[j] = x[j-(n-m)] ^ (y >> 1) ^ (y&1 ? a : 0); + } + // last iteration + UIntType y = (x[2*n-1] & upper_mask) | (x[0] & lower_mask); + x[n-1] = x[m-1] ^ (y >> 1) ^ (y&1 ? a : 0); + i = 0; + } +} + +template +inline typename mersenne_twister::result_type +mersenne_twister::operator()() +{ + if(i == n) + twist(0); + else if(i >= 2*n) + twist(1); + // Step 4 + UIntType z = x[i]; + ++i; + z ^= (z >> u); + z ^= ((z << s) & b); + z ^= ((z << t) & c); + z ^= (z >> l); + return z; +} + +} // namespace random + + +typedef random::mersenne_twister mt11213b; + +// validation by experiment from mt19937.c +typedef random::mersenne_twister mt19937; + +} // namespace boost + +BOOST_RANDOM_PTR_HELPER_SPEC(boost::mt19937) + +#endif // BOOST_RANDOM_MERSENNE_TWISTER_HPP diff --git a/boost/random/normal_distribution.hpp b/boost/random/normal_distribution.hpp new file mode 100644 index 000000000..412d31048 --- /dev/null +++ b/boost/random/normal_distribution.hpp @@ -0,0 +1,111 @@ +/* boost random/normal_distribution.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: normal_distribution.hpp 41369 2007-11-25 18:07:19Z bemandawes $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_NORMAL_DISTRIBUTION_HPP +#define BOOST_RANDOM_NORMAL_DISTRIBUTION_HPP + +#include +#include +#include +#include +#include + +namespace boost { + +// deterministic Box-Muller method, uses trigonometric functions +template +class normal_distribution +{ +public: + typedef RealType input_type; + typedef RealType result_type; + +#if !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) && !(defined(BOOST_MSVC) && BOOST_MSVC <= 1300) + BOOST_STATIC_ASSERT(!std::numeric_limits::is_integer); +#endif + + explicit normal_distribution(const result_type& mean_arg = result_type(0), + const result_type& sigma_arg = result_type(1)) + : _mean(mean_arg), _sigma(sigma_arg), _valid(false) + { + assert(_sigma >= result_type(0)); + } + + // compiler-generated copy constructor is NOT fine, need to purge cache + normal_distribution(const normal_distribution& other) + : _mean(other._mean), _sigma(other._sigma), _valid(false) + { + } + + // compiler-generated copy ctor and assignment operator are fine + + RealType mean() const { return _mean; } + RealType sigma() const { return _sigma; } + + void reset() { _valid = false; } + + template + result_type operator()(Engine& eng) + { +#ifndef BOOST_NO_STDC_NAMESPACE + // allow for Koenig lookup + using std::sqrt; using std::log; using std::sin; using std::cos; +#endif + if(!_valid) { + _r1 = eng(); + _r2 = eng(); + _cached_rho = sqrt(-result_type(2) * log(result_type(1)-_r2)); + _valid = true; + } else { + _valid = false; + } + // Can we have a boost::mathconst please? + const result_type pi = result_type(3.14159265358979323846); + + return _cached_rho * (_valid ? + cos(result_type(2)*pi*_r1) : + sin(result_type(2)*pi*_r1)) + * _sigma + _mean; + } + +#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const normal_distribution& nd) + { + os << nd._mean << " " << nd._sigma << " " + << nd._valid << " " << nd._cached_rho << " " << nd._r1; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, normal_distribution& nd) + { + is >> std::ws >> nd._mean >> std::ws >> nd._sigma + >> std::ws >> nd._valid >> std::ws >> nd._cached_rho + >> std::ws >> nd._r1; + return is; + } +#endif +private: + result_type _mean, _sigma; + result_type _r1, _r2, _cached_rho; + bool _valid; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_NORMAL_DISTRIBUTION_HPP diff --git a/boost/random/poisson_distribution.hpp b/boost/random/poisson_distribution.hpp new file mode 100644 index 000000000..75e65104e --- /dev/null +++ b/boost/random/poisson_distribution.hpp @@ -0,0 +1,99 @@ +/* boost random/poisson_distribution.hpp header file + * + * Copyright Jens Maurer 2002 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: poisson_distribution.hpp 41369 2007-11-25 18:07:19Z bemandawes $ + * + */ + +#ifndef BOOST_RANDOM_POISSON_DISTRIBUTION_HPP +#define BOOST_RANDOM_POISSON_DISTRIBUTION_HPP + +#include +#include +#include +#include +#include + +namespace boost { + +// Knuth +template +class poisson_distribution +{ +public: + typedef RealType input_type; + typedef IntType result_type; + + explicit poisson_distribution(const RealType& mean_arg = RealType(1)) + : _mean(mean_arg) + { +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + // MSVC fails BOOST_STATIC_ASSERT with std::numeric_limits at class scope + BOOST_STATIC_ASSERT(std::numeric_limits::is_integer); + BOOST_STATIC_ASSERT(!std::numeric_limits::is_integer); +#endif + + assert(_mean > RealType(0)); + init(); + } + + // compiler-generated copy ctor and assignment operator are fine + + RealType mean() const { return _mean; } + void reset() { } + + template + result_type operator()(Engine& eng) + { + // TODO: This is O(_mean), but it should be O(log(_mean)) for large _mean + RealType product = RealType(1); + for(result_type m = 0; ; ++m) { + product *= eng(); + if(product <= _exp_mean) + return m; + } + } + +#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const poisson_distribution& pd) + { + os << pd._mean; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, poisson_distribution& pd) + { + is >> std::ws >> pd._mean; + pd.init(); + return is; + } +#endif + +private: + void init() + { +#ifndef BOOST_NO_STDC_NAMESPACE + // allow for Koenig lookup + using std::exp; +#endif + _exp_mean = exp(-_mean); + } + + RealType _mean; + // some precomputed data from the parameters + RealType _exp_mean; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_POISSON_DISTRIBUTION_HPP diff --git a/boost/random/random_number_generator.hpp b/boost/random/random_number_generator.hpp new file mode 100644 index 000000000..3402a4799 --- /dev/null +++ b/boost/random/random_number_generator.hpp @@ -0,0 +1,56 @@ +/* boost random/random_number_generator.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: random_number_generator.hpp 26164 2004-11-09 21:22:00Z jmaurer $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_RANDOM_NUMBER_GENERATOR_HPP +#define BOOST_RANDOM_RANDOM_NUMBER_GENERATOR_HPP + +#include +#include +#include +#include +#include + +namespace boost { + +// a model for RandomNumberGenerator std:25.2.11 [lib.alg.random.shuffle] +template +class random_number_generator +{ +public: + typedef UniformRandomNumberGenerator base_type; + typedef IntType argument_type; + typedef IntType result_type; + random_number_generator(base_type& rng) : _rng(rng) + { +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(std::numeric_limits::is_integer); +#endif + } + // compiler-generated copy ctor is fine + // assignment is disallowed because there is a reference member + + result_type operator()(argument_type n) + { + typedef uniform_int dist_type; + return variate_generator(_rng, dist_type(0, n-1))(); + } + +private: + base_type& _rng; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_RANDOM_NUMBER_GENERATOR_HPP diff --git a/boost/random/ranlux.hpp b/boost/random/ranlux.hpp new file mode 100644 index 000000000..3859843c8 --- /dev/null +++ b/boost/random/ranlux.hpp @@ -0,0 +1,50 @@ +/* boost random/ranlux.hpp header file + * + * Copyright Jens Maurer 2002 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: ranlux.hpp 24096 2004-07-27 03:43:34Z dgregor $ + * + * Revision history + * 2001-02-18 created + */ + +#ifndef BOOST_RANDOM_RANLUX_HPP +#define BOOST_RANDOM_RANLUX_HPP + +#include +#include +#include + +namespace boost { + +namespace random { + typedef subtract_with_carry ranlux_base; + typedef subtract_with_carry_01 ranlux_base_01; + typedef subtract_with_carry_01 ranlux64_base_01; +} + +typedef random::discard_block ranlux3; +typedef random::discard_block ranlux4; + +typedef random::discard_block ranlux3_01; +typedef random::discard_block ranlux4_01; + +typedef random::discard_block ranlux64_3_01; +typedef random::discard_block ranlux64_4_01; + +#if !defined(BOOST_NO_INT64_T) && !defined(BOOST_NO_INTEGRAL_INT64_T) +namespace random { + typedef random::subtract_with_carry ranlux64_base; +} +typedef random::discard_block ranlux64_3; +typedef random::discard_block ranlux64_4; +#endif /* !BOOST_NO_INT64_T && !BOOST_NO_INTEGRAL_INT64_T */ + +} // namespace boost + +#endif // BOOST_RANDOM_LINEAR_CONGRUENTIAL_HPP diff --git a/boost/random/shuffle_output.hpp b/boost/random/shuffle_output.hpp new file mode 100644 index 000000000..96241b688 --- /dev/null +++ b/boost/random/shuffle_output.hpp @@ -0,0 +1,175 @@ +/* boost random/shuffle_output.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: shuffle_output.hpp 41369 2007-11-25 18:07:19Z bemandawes $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_SHUFFLE_OUTPUT_HPP +#define BOOST_RANDOM_SHUFFLE_OUTPUT_HPP + +#include +#include // std::copy +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace random { + +// Carter Bays and S.D. Durham 1979 +template +class shuffle_output +{ +public: + typedef UniformRandomNumberGenerator base_type; + typedef typename base_type::result_type result_type; + + BOOST_STATIC_CONSTANT(bool, has_fixed_range = false); + BOOST_STATIC_CONSTANT(int, buffer_size = k); + + shuffle_output() : _rng() { init(); } +#if defined(BOOST_MSVC) && _MSC_VER < 1300 + // MSVC does not implicitly generate the copy constructor here + shuffle_output(const shuffle_output & x) + : _rng(x._rng), y(x.y) { std::copy(x.v, x.v+k, v); } +#endif + template + explicit shuffle_output(T s) : _rng(s) { init(); } + explicit shuffle_output(const base_type & rng) : _rng(rng) { init(); } + template shuffle_output(It& first, It last) + : _rng(first, last) { init(); } + void seed() { _rng.seed(); init(); } + template + void seed(T s) { _rng.seed(s); init(); } + template void seed(It& first, It last) + { + _rng.seed(first, last); + init(); + } + + const base_type& base() const { return _rng; } + + result_type operator()() { + // calculating the range every time may seem wasteful. However, this + // makes the information locally available for the optimizer. + result_type range = (max)()-(min)()+1; + int j = k*(y-(min)())/range; + // assert(0 <= j && j < k); + y = v[j]; + v[j] = _rng(); + return y; + } + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (_rng.min)(); } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (_rng.max)(); } + static bool validation(result_type x) { return val == x; } + +#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE + +#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const shuffle_output& s) + { + os << s._rng << " " << s.y << " "; + for(int i = 0; i < s.buffer_size; ++i) + os << s.v[i] << " "; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, shuffle_output& s) + { + is >> s._rng >> std::ws >> s.y >> std::ws; + for(int i = 0; i < s.buffer_size; ++i) + is >> s.v[i] >> std::ws; + return is; + } +#endif + + friend bool operator==(const shuffle_output& x, const shuffle_output& y) + { return x._rng == y._rng && x.y == y.y && std::equal(x.v, x.v+k, y.v); } + friend bool operator!=(const shuffle_output& x, const shuffle_output& y) + { return !(x == y); } +#else + // Use a member function; Streamable concept not supported. + bool operator==(const shuffle_output& rhs) const + { return _rng == rhs._rng && y == rhs.y && std::equal(v, v+k, rhs.v); } + bool operator!=(const shuffle_output& rhs) const + { return !(*this == rhs); } +#endif +private: + void init() + { +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(std::numeric_limits::is_integer); +#endif + result_type range = (max)()-(min)(); + assert(range > 0); // otherwise there would be little choice + if(static_cast(k * range) < + static_cast(range)) // not a sufficient condition + // likely overflow with bucket number computation + assert(!"overflow will occur"); + + // we cannot use std::generate, because it uses pass-by-value for _rng + for(result_type * p = v; p != v+k; ++p) + *p = _rng(); + y = _rng(); + } + + base_type _rng; + result_type v[k]; + result_type y; +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool shuffle_output::has_fixed_range; + +template +const int shuffle_output::buffer_size; +#endif + +} // namespace random + +// validation by experiment from Harry Erwin's generator.h (private e-mail) +typedef random::shuffle_output< + random::linear_congruential, + 97, 139726> kreutzer1986; + + +} // namespace boost + +#endif // BOOST_RANDOM_SHUFFLE_OUTPUT_HPP diff --git a/boost/random/subtract_with_carry.hpp b/boost/random/subtract_with_carry.hpp new file mode 100644 index 000000000..49bf58a95 --- /dev/null +++ b/boost/random/subtract_with_carry.hpp @@ -0,0 +1,445 @@ +/* boost random/subtract_with_carry.hpp header file + * + * Copyright Jens Maurer 2002 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: subtract_with_carry.hpp 29116 2005-05-21 15:57:01Z dgregor $ + * + * Revision history + * 2002-03-02 created + */ + +#ifndef BOOST_RANDOM_SUBTRACT_WITH_CARRY_HPP +#define BOOST_RANDOM_SUBTRACT_WITH_CARRY_HPP + +#include +#include +#include // std::equal +#include +#include // std::pow +#include +#include +#include +#include +#include +#include + + +namespace boost { +namespace random { + +#if BOOST_WORKAROUND(_MSC_FULL_VER, BOOST_TESTED_AT(13102292)) && BOOST_MSVC > 1300 +# define BOOST_RANDOM_EXTRACT_SWC_01 +#endif + +#if defined(__APPLE_CC__) && defined(__GNUC__) && (__GNUC__ == 3) && (__GNUC_MINOR__ <= 3) +# define BOOST_RANDOM_EXTRACT_SWC_01 +#endif + +# ifdef BOOST_RANDOM_EXTRACT_SWC_01 +namespace detail +{ + template + void extract_subtract_with_carry_01( + IStream& is + , SubtractWithCarry& f + , RealType& carry + , RealType* x + , RealType modulus) + { + RealType value; + for(unsigned int j = 0; j < f.long_lag; ++j) { + is >> value >> std::ws; + x[j] = value / modulus; + } + is >> value >> std::ws; + carry = value / modulus; + } +} +# endif +// subtract-with-carry generator +// Marsaglia and Zaman + +template +class subtract_with_carry +{ +public: + typedef IntType result_type; + BOOST_STATIC_CONSTANT(bool, has_fixed_range = true); + BOOST_STATIC_CONSTANT(result_type, min_value = 0); + BOOST_STATIC_CONSTANT(result_type, max_value = m-1); + BOOST_STATIC_CONSTANT(result_type, modulus = m); + BOOST_STATIC_CONSTANT(unsigned int, long_lag = r); + BOOST_STATIC_CONSTANT(unsigned int, short_lag = s); + + subtract_with_carry() { + // MSVC fails BOOST_STATIC_ASSERT with std::numeric_limits at class scope +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(std::numeric_limits::is_signed); + BOOST_STATIC_ASSERT(std::numeric_limits::is_integer); +#endif + seed(); + } + explicit subtract_with_carry(uint32_t value) { seed(value); } + template + explicit subtract_with_carry(Generator & gen) { seed(gen); } + template subtract_with_carry(It& first, It last) { seed(first,last); } + + // compiler-generated copy ctor and assignment operator are fine + + void seed(uint32_t value = 19780503u) + { + random::linear_congruential intgen(value); + seed(intgen); + } + + // For GCC, moving this function out-of-line prevents inlining, which may + // reduce overall object code size. However, MSVC does not grok + // out-of-line template member functions. + template + void seed(Generator & gen) + { + // I could have used std::generate_n, but it takes "gen" by value + for(unsigned int j = 0; j < long_lag; ++j) + x[j] = gen() % modulus; + carry = (x[long_lag-1] == 0); + k = 0; + } + + template + void seed(It& first, It last) + { + unsigned int j; + for(j = 0; j < long_lag && first != last; ++j, ++first) + x[j] = *first % modulus; + if(first == last && j < long_lag) + throw std::invalid_argument("subtract_with_carry::seed"); + carry = (x[long_lag-1] == 0); + k = 0; + } + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return min_value; } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return max_value; } + + result_type operator()() + { + int short_index = k - short_lag; + if(short_index < 0) + short_index += long_lag; + IntType delta; + if (x[short_index] >= x[k] + carry) { + // x(n) >= 0 + delta = x[short_index] - (x[k] + carry); + carry = 0; + } else { + // x(n) < 0 + delta = modulus - x[k] - carry + x[short_index]; + carry = 1; + } + x[k] = delta; + ++k; + if(k >= long_lag) + k = 0; + return delta; + } + +public: + static bool validation(result_type x) { return x == val; } + +#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE + +#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, + const subtract_with_carry& f) + { + for(unsigned int j = 0; j < f.long_lag; ++j) + os << f.compute(j) << " "; + os << f.carry << " "; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, subtract_with_carry& f) + { + for(unsigned int j = 0; j < f.long_lag; ++j) + is >> f.x[j] >> std::ws; + is >> f.carry >> std::ws; + f.k = 0; + return is; + } +#endif + + friend bool operator==(const subtract_with_carry& x, const subtract_with_carry& y) + { + for(unsigned int j = 0; j < r; ++j) + if(x.compute(j) != y.compute(j)) + return false; + return true; + } + + friend bool operator!=(const subtract_with_carry& x, const subtract_with_carry& y) + { return !(x == y); } +#else + // Use a member function; Streamable concept not supported. + bool operator==(const subtract_with_carry& rhs) const + { + for(unsigned int j = 0; j < r; ++j) + if(compute(j) != rhs.compute(j)) + return false; + return true; + } + + bool operator!=(const subtract_with_carry& rhs) const + { return !(*this == rhs); } +#endif + +private: + // returns x(i-r+index), where index is in 0..r-1 + IntType compute(unsigned int index) const + { + return x[(k+index) % long_lag]; + } + + // state representation; next output (state) is x(i) + // x[0] ... x[k] x[k+1] ... x[long_lag-1] represents + // x(i-k) ... x(i) x(i+1) ... x(i-k+long_lag-1) + // speed: base: 20-25 nsec + // ranlux_4: 230 nsec, ranlux_7: 430 nsec, ranlux_14: 810 nsec + // This state representation makes operator== and save/restore more + // difficult, because we've already computed "too much" and thus + // have to undo some steps to get at x(i-r) etc. + + // state representation: next output (state) is x(i) + // x[0] ... x[k] x[k+1] ... x[long_lag-1] represents + // x(i-k) ... x(i) x(i-long_lag+1) ... x(i-k-1) + // speed: base 28 nsec + // ranlux_4: 370 nsec, ranlux_7: 688 nsec, ranlux_14: 1343 nsec + IntType x[long_lag]; + unsigned int k; + int carry; +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool subtract_with_carry::has_fixed_range; +template +const IntType subtract_with_carry::min_value; +template +const IntType subtract_with_carry::max_value; +template +const IntType subtract_with_carry::modulus; +template +const unsigned int subtract_with_carry::long_lag; +template +const unsigned int subtract_with_carry::short_lag; +#endif + + +// use a floating-point representation to produce values in [0..1) +template +class subtract_with_carry_01 +{ +public: + typedef RealType result_type; + BOOST_STATIC_CONSTANT(bool, has_fixed_range = false); + BOOST_STATIC_CONSTANT(int, word_size = w); + BOOST_STATIC_CONSTANT(unsigned int, long_lag = r); + BOOST_STATIC_CONSTANT(unsigned int, short_lag = s); + +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(!std::numeric_limits::is_integer); +#endif + + subtract_with_carry_01() { init_modulus(); seed(); } + explicit subtract_with_carry_01(uint32_t value) + { init_modulus(); seed(value); } + template subtract_with_carry_01(It& first, It last) + { init_modulus(); seed(first,last); } + +private: + void init_modulus() + { +#ifndef BOOST_NO_STDC_NAMESPACE + // allow for Koenig lookup + using std::pow; +#endif + _modulus = pow(RealType(2), word_size); + } + +public: + // compiler-generated copy ctor and assignment operator are fine + + void seed(uint32_t value = 19780503u) + { +#ifndef BOOST_NO_STDC_NAMESPACE + // allow for Koenig lookup + using std::fmod; +#endif + random::linear_congruential gen(value); + unsigned long array[(w+31)/32 * long_lag]; + for(unsigned int j = 0; j < sizeof(array)/sizeof(unsigned long); ++j) + array[j] = gen(); + unsigned long * start = array; + seed(start, array + sizeof(array)/sizeof(unsigned long)); + } + + template + void seed(It& first, It last) + { +#ifndef BOOST_NO_STDC_NAMESPACE + // allow for Koenig lookup + using std::fmod; + using std::pow; +#endif + unsigned long mask = ~((~0u) << (w%32)); // now lowest (w%32) bits set + RealType two32 = pow(RealType(2), 32); + unsigned int j; + for(j = 0; j < long_lag && first != last; ++j) { + x[j] = RealType(0); + for(int i = 0; i < w/32 && first != last; ++i, ++first) + x[j] += *first / pow(two32,i+1); + if(first != last && mask != 0) { + x[j] += fmod((*first & mask) / _modulus, RealType(1)); + ++first; + } + } + if(first == last && j < long_lag) + throw std::invalid_argument("subtract_with_carry_01::seed"); + carry = (x[long_lag-1] ? 0 : 1 / _modulus); + k = 0; + } + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return result_type(0); } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return result_type(1); } + + result_type operator()() + { + int short_index = k - short_lag; + if(short_index < 0) + short_index += long_lag; + RealType delta = x[short_index] - x[k] - carry; + if(delta < 0) { + delta += RealType(1); + carry = RealType(1)/_modulus; + } else { + carry = 0; + } + x[k] = delta; + ++k; + if(k >= long_lag) + k = 0; + return delta; + } + + static bool validation(result_type x) + { return x == val/pow(RealType(2), word_size); } + +#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE + +#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, + const subtract_with_carry_01& f) + { +#ifndef BOOST_NO_STDC_NAMESPACE + // allow for Koenig lookup + using std::pow; +#endif + std::ios_base::fmtflags oldflags = os.flags(os.dec | os.fixed | os.left); + for(unsigned int j = 0; j < f.long_lag; ++j) + os << (f.compute(j) * f._modulus) << " "; + os << (f.carry * f._modulus); + os.flags(oldflags); + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, subtract_with_carry_01& f) + { +# ifdef BOOST_RANDOM_EXTRACT_SWC_01 + detail::extract_subtract_with_carry_01(is, f, f.carry, f.x, f._modulus); +# else + // MSVC (up to 7.1) and Borland (up to 5.64) don't handle the template type + // parameter "RealType" available from the class template scope, so use + // the member typedef + typename subtract_with_carry_01::result_type value; + for(unsigned int j = 0; j < long_lag; ++j) { + is >> value >> std::ws; + f.x[j] = value / f._modulus; + } + is >> value >> std::ws; + f.carry = value / f._modulus; +# endif + f.k = 0; + return is; + } +#endif + + friend bool operator==(const subtract_with_carry_01& x, + const subtract_with_carry_01& y) + { + for(unsigned int j = 0; j < r; ++j) + if(x.compute(j) != y.compute(j)) + return false; + return true; + } + + friend bool operator!=(const subtract_with_carry_01& x, + const subtract_with_carry_01& y) + { return !(x == y); } +#else + // Use a member function; Streamable concept not supported. + bool operator==(const subtract_with_carry_01& rhs) const + { + for(unsigned int j = 0; j < r; ++j) + if(compute(j) != rhs.compute(j)) + return false; + return true; + } + + bool operator!=(const subtract_with_carry_01& rhs) const + { return !(*this == rhs); } +#endif + +private: + RealType compute(unsigned int index) const; + unsigned int k; + RealType carry; + RealType x[long_lag]; + RealType _modulus; +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool subtract_with_carry_01::has_fixed_range; +template +const int subtract_with_carry_01::word_size; +template +const unsigned int subtract_with_carry_01::long_lag; +template +const unsigned int subtract_with_carry_01::short_lag; +#endif + +template +RealType subtract_with_carry_01::compute(unsigned int index) const +{ + return x[(k+index) % long_lag]; +} + + +} // namespace random +} // namespace boost + +#endif // BOOST_RANDOM_SUBTRACT_WITH_CARRY_HPP diff --git a/boost/random/triangle_distribution.hpp b/boost/random/triangle_distribution.hpp new file mode 100644 index 000000000..71029eca7 --- /dev/null +++ b/boost/random/triangle_distribution.hpp @@ -0,0 +1,101 @@ +/* boost random/triangle_distribution.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: triangle_distribution.hpp 41369 2007-11-25 18:07:19Z bemandawes $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_TRIANGLE_DISTRIBUTION_HPP +#define BOOST_RANDOM_TRIANGLE_DISTRIBUTION_HPP + +#include +#include +#include + +namespace boost { + +// triangle distribution, with a smallest, b most probable, and c largest +// value. +template +class triangle_distribution +{ +public: + typedef RealType input_type; + typedef RealType result_type; + + explicit triangle_distribution(result_type a_arg = result_type(0), + result_type b_arg = result_type(0.5), + result_type c_arg = result_type(1)) + : _a(a_arg), _b(b_arg), _c(c_arg) + { + assert(_a <= _b && _b <= _c); + init(); + } + + // compiler-generated copy ctor and assignment operator are fine + result_type a() const { return _a; } + result_type b() const { return _b; } + result_type c() const { return _c; } + + void reset() { } + + template + result_type operator()(Engine& eng) + { +#ifndef BOOST_NO_STDC_NAMESPACE + using std::sqrt; +#endif + result_type u = eng(); + if( u <= q1 ) + return _a + p1*sqrt(u); + else + return _c - d3*sqrt(d2*u-d1); + } + +#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const triangle_distribution& td) + { + os << td._a << " " << td._b << " " << td._c; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, triangle_distribution& td) + { + is >> std::ws >> td._a >> std::ws >> td._b >> std::ws >> td._c; + td.init(); + return is; + } +#endif + +private: + void init() + { +#ifndef BOOST_NO_STDC_NAMESPACE + using std::sqrt; +#endif + d1 = _b - _a; + d2 = _c - _a; + d3 = sqrt(_c - _b); + q1 = d1 / d2; + p1 = sqrt(d1 * d2); + } + + result_type _a, _b, _c; + result_type d1, d2, d3, q1, p1; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_TRIANGLE_DISTRIBUTION_HPP diff --git a/boost/random/uniform_01.hpp b/boost/random/uniform_01.hpp new file mode 100644 index 000000000..9f51d3e08 --- /dev/null +++ b/boost/random/uniform_01.hpp @@ -0,0 +1,97 @@ +/* boost random/uniform_01.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: uniform_01.hpp 41369 2007-11-25 18:07:19Z bemandawes $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_UNIFORM_01_HPP +#define BOOST_RANDOM_UNIFORM_01_HPP + +#include +#include +#include +#include + +namespace boost { + +// Because it is so commonly used: uniform distribution on the real [0..1) +// range. This allows for specializations to avoid a costly int -> float +// conversion plus float multiplication +template +class uniform_01 +{ +public: + typedef UniformRandomNumberGenerator base_type; + typedef RealType result_type; + + BOOST_STATIC_CONSTANT(bool, has_fixed_range = false); + +#if !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) && !(defined(BOOST_MSVC) && BOOST_MSVC <= 1300) + BOOST_STATIC_ASSERT(!std::numeric_limits::is_integer); +#endif + + explicit uniform_01(base_type rng) + : _rng(rng), + _factor(result_type(1) / + (result_type((_rng.max)()-(_rng.min)()) + + result_type(std::numeric_limits::is_integer ? 1 : 0))) + { + } + // compiler-generated copy ctor and copy assignment are fine + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return result_type(0); } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return result_type(1); } + base_type& base() { return _rng; } + const base_type& base() const { return _rng; } + void reset() { } + + result_type operator()() { + for (;;) { + result_type result = result_type(_rng() - (_rng.min)()) * _factor; + if (result < result_type(1)) + return result; + } + } + +#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const uniform_01& u) + { + os << u._rng; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, uniform_01& u) + { + is >> u._rng; + return is; + } +#endif + +private: + typedef typename base_type::result_type base_result; + base_type _rng; + result_type _factor; +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool uniform_01::has_fixed_range; +#endif + +} // namespace boost + +#endif // BOOST_RANDOM_UNIFORM_01_HPP diff --git a/boost/random/uniform_int.hpp b/boost/random/uniform_int.hpp new file mode 100644 index 000000000..a52c527e9 --- /dev/null +++ b/boost/random/uniform_int.hpp @@ -0,0 +1,161 @@ +/* boost random/uniform_int.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: uniform_int.hpp 43713 2008-03-19 00:02:06Z marshall $ + * + * Revision history + * 2001-04-08 added min +#include +#include +#include +#include +#include +#include +#include +#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS +#include +#endif + +namespace boost { + +// uniform integer distribution on [min, max] +template +class uniform_int +{ +public: + typedef IntType input_type; + typedef IntType result_type; + typedef typename random::detail::make_unsigned::type range_type; + + explicit uniform_int(IntType min_arg = 0, IntType max_arg = 9) + : _min(min_arg), _max(max_arg) + { +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + // MSVC fails BOOST_STATIC_ASSERT with std::numeric_limits at class scope + BOOST_STATIC_ASSERT(std::numeric_limits::is_integer); +#endif + assert(min_arg <= max_arg); + init(); + } + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _min; } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _max; } + void reset() { } + + // can't have member function templates out-of-line due to MSVC bugs + template + result_type operator()(Engine& eng) + { + typedef typename Engine::result_type base_result; + // ranges are always unsigned + typedef typename random::detail::make_unsigned::type base_unsigned; + const base_result bmin = (eng.min)(); + const base_unsigned brange = + random::detail::subtract()((eng.max)(), (eng.min)()); + + if(_range == 0) { + return _min; + } else if(brange == _range) { + // this will probably never happen in real life + // basically nothing to do; just take care we don't overflow / underflow + base_unsigned v = random::detail::subtract()(eng(), bmin); + return random::detail::add()(v, _min); + } else if(brange < _range) { + // use rejection method to handle things like 0..3 --> 0..4 + for(;;) { + // concatenate several invocations of the base RNG + // take extra care to avoid overflows + range_type limit; + if(_range == (std::numeric_limits::max)()) { + limit = _range/(range_type(brange)+1); + if(_range % range_type(brange)+1 == range_type(brange)) + ++limit; + } else { + limit = (_range+1)/(range_type(brange)+1); + } + // We consider "result" as expressed to base (brange+1): + // For every power of (brange+1), we determine a random factor + range_type result = range_type(0); + range_type mult = range_type(1); + while(mult <= limit) { + result += random::detail::subtract()(eng(), bmin) * mult; + mult *= range_type(brange)+range_type(1); + } + if(mult == limit) + // _range+1 is an integer power of brange+1: no rejections required + return result; + // _range/mult < brange+1 -> no endless loop + result += uniform_int(0, _range/mult)(eng) * mult; + if(result <= _range) + return random::detail::add()(result, _min); + } + } else { // brange > range + if(brange / _range > 4 /* quantization_cutoff */ ) { + // the new range is vastly smaller than the source range, + // so quantization effects are not relevant + return boost::uniform_smallint(_min, _max)(eng); + } else { + // use rejection method to handle cases like 0..5 -> 0..4 + for(;;) { + base_unsigned result = + random::detail::subtract()(eng(), bmin); + // result and range are non-negative, and result is possibly larger + // than range, so the cast is safe + if(result <= static_cast(_range)) + return random::detail::add()(result, _min); + } + } + } + } + +#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const uniform_int& ud) + { + os << ud._min << " " << ud._max; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, uniform_int& ud) + { +# if BOOST_WORKAROUND(_MSC_FULL_VER, BOOST_TESTED_AT(13102292)) && BOOST_MSVC == 1400 + return detail::extract_uniform_int(is, ud, ud.impl); +# else + is >> std::ws >> ud._min >> std::ws >> ud._max; + ud.init(); + return is; +# endif + } +#endif + +private: + void init() + { + _range = random::detail::subtract()(_max, _min); + } + + // The result_type may be signed or unsigned, but the _range is always + // unsigned. + result_type _min, _max; + range_type _range; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_UNIFORM_INT_HPP diff --git a/boost/random/uniform_on_sphere.hpp b/boost/random/uniform_on_sphere.hpp new file mode 100644 index 000000000..13219f244 --- /dev/null +++ b/boost/random/uniform_on_sphere.hpp @@ -0,0 +1,86 @@ +/* boost random/uniform_on_sphere.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: uniform_on_sphere.hpp 24096 2004-07-27 03:43:34Z dgregor $ + * + * Revision history + * 2001-02-18 moved to individual header files + */ + +#ifndef BOOST_RANDOM_UNIFORM_ON_SPHERE_HPP +#define BOOST_RANDOM_UNIFORM_ON_SPHERE_HPP + +#include +#include // std::transform +#include // std::bind2nd, std::divides +#include + +namespace boost { + +template > +class uniform_on_sphere +{ +public: + typedef RealType input_type; + typedef Cont result_type; + + explicit uniform_on_sphere(int dim = 2) : _container(dim), _dim(dim) { } + + // compiler-generated copy ctor and assignment operator are fine + + void reset() { _normal.reset(); } + + template + const result_type & operator()(Engine& eng) + { + RealType sqsum = 0; + for(typename Cont::iterator it = _container.begin(); + it != _container.end(); + ++it) { + RealType val = _normal(eng); + *it = val; + sqsum += val * val; + } +#ifndef BOOST_NO_STDC_NAMESPACE + using std::sqrt; +#endif + // for all i: result[i] /= sqrt(sqsum) + std::transform(_container.begin(), _container.end(), _container.begin(), + std::bind2nd(std::divides(), sqrt(sqsum))); + return _container; + } + +#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const uniform_on_sphere& sd) + { + os << sd._dim; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, uniform_on_sphere& sd) + { + is >> std::ws >> sd._dim; + sd._container.resize(sd._dim); + return is; + } +#endif + +private: + normal_distribution _normal; + result_type _container; + int _dim; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_UNIFORM_ON_SPHERE_HPP diff --git a/boost/random/uniform_real.hpp b/boost/random/uniform_real.hpp new file mode 100644 index 000000000..e98298849 --- /dev/null +++ b/boost/random/uniform_real.hpp @@ -0,0 +1,83 @@ +/* boost random/uniform_real.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: uniform_real.hpp 41369 2007-11-25 18:07:19Z bemandawes $ + * + * Revision history + * 2001-04-08 added min +#include +#include +#include +#include + +namespace boost { + +// uniform distribution on a real range +template +class uniform_real +{ +public: + typedef RealType input_type; + typedef RealType result_type; + + explicit uniform_real(RealType min_arg = RealType(0), + RealType max_arg = RealType(1)) + : _min(min_arg), _max(max_arg) + { +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + BOOST_STATIC_ASSERT(!std::numeric_limits::is_integer); +#endif + assert(min_arg < max_arg); + } + + // compiler-generated copy ctor and assignment operator are fine + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _min; } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _max; } + void reset() { } + + template + result_type operator()(Engine& eng) { + return static_cast(eng() - eng.min BOOST_PREVENT_MACRO_SUBSTITUTION()) + / static_cast(eng.max BOOST_PREVENT_MACRO_SUBSTITUTION() - eng.min BOOST_PREVENT_MACRO_SUBSTITUTION()) + * (_max - _min) + _min; + } + +#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const uniform_real& ud) + { + os << ud._min << " " << ud._max; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, uniform_real& ud) + { + is >> std::ws >> ud._min >> std::ws >> ud._max; + return is; + } +#endif + +private: + RealType _min, _max; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_UNIFORM_REAL_HPP diff --git a/boost/random/uniform_smallint.hpp b/boost/random/uniform_smallint.hpp new file mode 100644 index 000000000..12ba3a155 --- /dev/null +++ b/boost/random/uniform_smallint.hpp @@ -0,0 +1,236 @@ +/* boost random/uniform_smallint.hpp header file + * + * Copyright Jens Maurer 2000-2001 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: uniform_smallint.hpp 41369 2007-11-25 18:07:19Z bemandawes $ + * + * Revision history + * 2001-04-08 added min +#include +#include +#include +#include +#include +#include +#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS +#include +#endif + + +namespace boost { + +// uniform integer distribution on a small range [min, max] + +namespace detail { + +template +InputStream& extract_uniform_int(InputStream& is, UniformInt& ud, Impl& impl) +{ + typename UniformInt::result_type min, max; + is >> std::ws >> min >> std::ws >> max; + impl.set(min, max); + return is; +} + +template +struct uniform_smallint_integer +{ +public: + typedef UniformRandomNumberGenerator base_type; + typedef IntType result_type; + + uniform_smallint_integer(base_type & rng, IntType min_arg, IntType max_arg) + : _rng(&rng) + { set(min_arg, max_arg); } + + void set(result_type min, result_type max); + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _min; } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _max; } + base_type& base() const { return *_rng; } + + result_type operator()() + { + // we must not use the low bits here, because LCGs get very bad then + return (((*_rng)() - (_rng->min)()) / _factor) % _range + _min; + } + +private: + typedef typename base_type::result_type base_result; + base_type * _rng; + IntType _min, _max; + base_result _range; + base_result _factor; +}; + +template +void uniform_smallint_integer:: +set(result_type min_arg, result_type max_arg) +{ + _min = min_arg; + _max = max_arg; + assert(min_arg < max_arg); + + _range = static_cast(_max-_min)+1; + _factor = 1; + + // LCGs get bad when only taking the low bits. + // (probably put this logic into a partial template specialization) + // Check how many low bits we can ignore before we get too much + // quantization error. + base_result r_base = (_rng->max)() - (_rng->min)(); + if(r_base == (std::numeric_limits::max)()) { + _factor = 2; + r_base /= 2; + } + r_base += 1; + if(r_base % _range == 0) { + // No quantization effects, good + _factor = r_base / _range; + } else { + // carefully avoid overflow; pessimizing heree + for( ; r_base/_range/32 >= _range; _factor *= 2) + r_base /= 2; + } +} + +template +class uniform_smallint_float +{ +public: + typedef UniformRandomNumberGenerator base_type; + typedef IntType result_type; + + uniform_smallint_float(base_type & rng, IntType min_arg, IntType max_arg) + : _rng(rng) + { + // MSVC fails BOOST_STATIC_ASSERT with std::numeric_limits at class scope +#if !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) && !(defined(BOOST_MSVC) && BOOST_MSVC <= 1300) + BOOST_STATIC_ASSERT(std::numeric_limits::is_integer); + BOOST_STATIC_ASSERT(!std::numeric_limits::is_integer); +#endif + + assert(min_arg < max_arg); + set(min_arg, max_arg); + } + + void set(result_type min_arg, result_type max_arg) + { + _min = min_arg; + _max = max_arg; + _range = static_cast(_max-_min)+1; + } + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _min; } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _max; } + base_type& base() const { return _rng.base(); } + + result_type operator()() + { + return static_cast(_rng() * _range) + _min; + } + +private: + typedef typename base_type::result_type base_result; + uniform_01 _rng; + IntType _min, _max; + base_result _range; +}; + + +} // namespace detail + + + + +template +class uniform_smallint +{ +public: + typedef IntType input_type; + typedef IntType result_type; + + explicit uniform_smallint(IntType min_arg = 0, IntType max_arg = 9) + : _min(min_arg), _max(max_arg) + { +#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS + // MSVC fails BOOST_STATIC_ASSERT with std::numeric_limits at class scope + BOOST_STATIC_ASSERT(std::numeric_limits::is_integer); +#endif + } + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _min; } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _max; } + void reset() { } + + template + result_type operator()(Engine& eng) + { + typedef typename Engine::result_type base_result; + base_result _range = static_cast(_max-_min)+1; + base_result _factor = 1; + + // LCGs get bad when only taking the low bits. + // (probably put this logic into a partial template specialization) + // Check how many low bits we can ignore before we get too much + // quantization error. + base_result r_base = (eng.max)() - (eng.min)(); + if(r_base == (std::numeric_limits::max)()) { + _factor = 2; + r_base /= 2; + } + r_base += 1; + if(r_base % _range == 0) { + // No quantization effects, good + _factor = r_base / _range; + } else { + // carefully avoid overflow; pessimizing heree + for( ; r_base/_range/32 >= _range; _factor *= 2) + r_base /= 2; + } + + return ((eng() - (eng.min)()) / _factor) % _range + _min; + } + +#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const uniform_smallint& ud) + { + os << ud._min << " " << ud._max; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, uniform_smallint& ud) + { +# if BOOST_WORKAROUND(_MSC_FULL_VER, BOOST_TESTED_AT(13102292)) && BOOST_MSVC > 1300 + return detail::extract_uniform_int(is, ud, ud._impl); +# else + is >> std::ws >> ud._min >> std::ws >> ud._max; + return is; +# endif + } +#endif + +private: + result_type _min; + result_type _max; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_UNIFORM_SMALLINT_HPP diff --git a/boost/random/variate_generator.hpp b/boost/random/variate_generator.hpp new file mode 100644 index 000000000..0c6cc2032 --- /dev/null +++ b/boost/random/variate_generator.hpp @@ -0,0 +1,133 @@ +/* boost random/variate_generator.hpp header file + * + * Copyright Jens Maurer 2002 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: variate_generator.hpp 27375 2005-02-14 11:53:50Z johnmaddock $ + * + */ + +#ifndef BOOST_RANDOM_RANDOM_GENERATOR_HPP +#define BOOST_RANDOM_RANDOM_GENERATOR_HPP + +#include + +// implementation details +#include +#include +#include +#include +#include + +// Borland C++ 5.6.0 has problems using its numeric_limits traits as +// template parameters +#if BOOST_WORKAROUND(__BORLANDC__, <= 0x564) +#include +#endif + +namespace boost { + +namespace random { +namespace detail { + +template +struct engine_helper; + +// for consistency, always have two levels of decorations +template<> +struct engine_helper +{ + template + struct impl + { + typedef pass_through_engine type; + }; +}; + +template<> +struct engine_helper +{ + template + struct impl + { + typedef uniform_01 type; + }; +}; + +template<> +struct engine_helper +{ + template + struct impl + { + typedef uniform_01 type; + }; +}; + +template<> +struct engine_helper +{ + template + struct impl + { + typedef uniform_int_float type; + }; +}; + +} // namespace detail +} // namespace random + + +template +class variate_generator +{ +private: + typedef random::detail::pass_through_engine decorated_engine; + +public: + typedef typename decorated_engine::base_type engine_value_type; + typedef Engine engine_type; + typedef Distribution distribution_type; + typedef typename Distribution::result_type result_type; + + variate_generator(Engine e, Distribution d) + : _eng(decorated_engine(e)), _dist(d) { } + + result_type operator()() { return _dist(_eng); } + template + result_type operator()(T value) { return _dist(_eng, value); } + + engine_value_type& engine() { return _eng.base().base(); } + const engine_value_type& engine() const { return _eng.base().base(); } + + distribution_type& distribution() { return _dist; } + const distribution_type& distribution() const { return _dist; } + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (distribution().min)(); } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (distribution().max)(); } + +private: +#if BOOST_WORKAROUND(__BORLANDC__, <= 0x564) + typedef typename random::detail::engine_helper< + boost::is_integral::value, + boost::is_integral::value + >::BOOST_NESTED_TEMPLATE impl::type internal_engine_type; +#else + enum { + have_int = std::numeric_limits::is_integer, + want_int = std::numeric_limits::is_integer + }; + typedef typename random::detail::engine_helper::BOOST_NESTED_TEMPLATE impl::type internal_engine_type; +#endif + + internal_engine_type _eng; + distribution_type _dist; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_RANDOM_GENERATOR_HPP diff --git a/boost/random/xor_combine.hpp b/boost/random/xor_combine.hpp new file mode 100644 index 000000000..10d0855a6 --- /dev/null +++ b/boost/random/xor_combine.hpp @@ -0,0 +1,130 @@ +/* boost random/xor_combine.hpp header file + * + * Copyright Jens Maurer 2002 + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See http://www.boost.org for most recent version including documentation. + * + * $Id: xor_combine.hpp 29116 2005-05-21 15:57:01Z dgregor $ + * + */ + +#ifndef BOOST_RANDOM_XOR_COMBINE_HPP +#define BOOST_RANDOM_XOR_COMBINE_HPP + +#include +#include +#include // for std::min and std::max +#include +#include +#include +#include // uint32_t + + +namespace boost { +namespace random { + +template +class xor_combine +{ +public: + typedef URNG1 base1_type; + typedef URNG2 base2_type; + typedef typename base1_type::result_type result_type; + + BOOST_STATIC_CONSTANT(bool, has_fixed_range = false); + BOOST_STATIC_CONSTANT(int, shift1 = s1); + BOOST_STATIC_CONSTANT(int, shfit2 = s2); + + xor_combine() : _rng1(), _rng2() + { } + xor_combine(const base1_type & rng1, const base2_type & rng2) + : _rng1(rng1), _rng2(rng2) { } + template xor_combine(It& first, It last) + : _rng1(first, last), _rng2( /* advanced by other call */ first, last) { } + void seed() { _rng1.seed(); _rng2.seed(); } + template void seed(It& first, It last) + { + _rng1.seed(first, last); + _rng2.seed(first, last); + } + + const base1_type& base1() { return _rng1; } + const base2_type& base2() { return _rng2; } + + result_type operator()() + { + // MSVC fails BOOST_STATIC_ASSERT with std::numeric_limits at class scope +#if !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) && !(defined(BOOST_MSVC) && BOOST_MSVC <= 1300) + BOOST_STATIC_ASSERT(std::numeric_limits::is_integer); + BOOST_STATIC_ASSERT(std::numeric_limits::is_integer); + BOOST_STATIC_ASSERT(std::numeric_limits::digits >= std::numeric_limits::digits); +#endif + return (_rng1() << s1) ^ (_rng2() << s2); + } + + result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return std::min BOOST_PREVENT_MACRO_SUBSTITUTION((_rng1.min)(), (_rng2.min)()); } + result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return std::max BOOST_PREVENT_MACRO_SUBSTITUTION((_rng1.min)(), (_rng2.max)()); } + static bool validation(result_type x) { return val == x; } + +#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE + +#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const xor_combine& s) + { + os << s._rng1 << " " << s._rng2 << " "; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, xor_combine& s) + { + is >> s._rng1 >> std::ws >> s._rng2 >> std::ws; + return is; + } +#endif + + friend bool operator==(const xor_combine& x, const xor_combine& y) + { return x._rng1 == y._rng1 && x._rng2 == y._rng2; } + friend bool operator!=(const xor_combine& x, const xor_combine& y) + { return !(x == y); } +#else + // Use a member function; Streamable concept not supported. + bool operator==(const xor_combine& rhs) const + { return _rng1 == rhs._rng1 && _rng2 == rhs._rng2; } + bool operator!=(const xor_combine& rhs) const + { return !(*this == rhs); } +#endif + +private: + base1_type _rng1; + base2_type _rng2; +}; + +#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION +// A definition is required even for integral static constants +template +const bool xor_combine::has_fixed_range; +#endif + +} // namespace random +} // namespace boost + +#endif // BOOST_RANDOM_XOR_COMBINE_HPP diff --git a/boost/static_assert.hpp b/boost/static_assert.hpp new file mode 100644 index 000000000..3ffa95276 --- /dev/null +++ b/boost/static_assert.hpp @@ -0,0 +1,122 @@ +// (C) Copyright John Maddock 2000. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/static_assert for documentation. + +/* + Revision history: + 02 August 2000 + Initial version. +*/ + +#ifndef BOOST_STATIC_ASSERT_HPP +#define BOOST_STATIC_ASSERT_HPP + +#include +#include + +#ifdef __BORLANDC__ +// +// workaround for buggy integral-constant expression support: +#define BOOST_BUGGY_INTEGRAL_CONSTANT_EXPRESSIONS +#endif + +#if defined(__GNUC__) && (__GNUC__ == 3) && ((__GNUC_MINOR__ == 3) || (__GNUC_MINOR__ == 4)) +// gcc 3.3 and 3.4 don't produce good error messages with the default version: +# define BOOST_SA_GCC_WORKAROUND +#endif + +#ifdef BOOST_HAS_STATIC_ASSERT +# define BOOST_STATIC_ASSERT( B ) static_assert(B, #B) +#else + +namespace boost{ + +// HP aCC cannot deal with missing names for template value parameters +template struct STATIC_ASSERTION_FAILURE; + +template <> struct STATIC_ASSERTION_FAILURE { enum { value = 1 }; }; + +// HP aCC cannot deal with missing names for template value parameters +template struct static_assert_test{}; + +} + +// +// Implicit instantiation requires that all member declarations be +// instantiated, but that the definitions are *not* instantiated. +// +// It's not particularly clear how this applies to enum's or typedefs; +// both are described as declarations [7.1.3] and [7.2] in the standard, +// however some compilers use "delayed evaluation" of one or more of +// these when implicitly instantiating templates. We use typedef declarations +// by default, but try defining BOOST_USE_ENUM_STATIC_ASSERT if the enum +// version gets better results from your compiler... +// +// Implementation: +// Both of these versions rely on sizeof(incomplete_type) generating an error +// message containing the name of the incomplete type. We use +// "STATIC_ASSERTION_FAILURE" as the type name here to generate +// an eye catching error message. The result of the sizeof expression is either +// used as an enum initialiser, or as a template argument depending which version +// is in use... +// Note that the argument to the assert is explicitly cast to bool using old- +// style casts: too many compilers currently have problems with static_cast +// when used inside integral constant expressions. +// +#if !defined(BOOST_BUGGY_INTEGRAL_CONSTANT_EXPRESSIONS) + +#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300) +// __LINE__ macro broken when -ZI is used see Q199057 +// fortunately MSVC ignores duplicate typedef's. +#define BOOST_STATIC_ASSERT( B ) \ + typedef ::boost::static_assert_test<\ + sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >)\ + > boost_static_assert_typedef_ +#elif defined(BOOST_MSVC) +#define BOOST_STATIC_ASSERT( B ) \ + typedef ::boost::static_assert_test<\ + sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >)>\ + BOOST_JOIN(boost_static_assert_typedef_, __COUNTER__) +#elif defined(BOOST_INTEL_CXX_VERSION) || defined(BOOST_SA_GCC_WORKAROUND) +// agurt 15/sep/02: a special care is needed to force Intel C++ issue an error +// instead of warning in case of failure +# define BOOST_STATIC_ASSERT( B ) \ + typedef char BOOST_JOIN(boost_static_assert_typedef_, __LINE__) \ + [ ::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >::value ] +#elif defined(__sgi) +// special version for SGI MIPSpro compiler +#define BOOST_STATIC_ASSERT( B ) \ + BOOST_STATIC_CONSTANT(bool, \ + BOOST_JOIN(boost_static_assert_test_, __LINE__) = ( B )); \ + typedef ::boost::static_assert_test<\ + sizeof(::boost::STATIC_ASSERTION_FAILURE< \ + BOOST_JOIN(boost_static_assert_test_, __LINE__) >)>\ + BOOST_JOIN(boost_static_assert_typedef_, __LINE__) +#elif BOOST_WORKAROUND(__MWERKS__, <= 0x3003) +// special version for CodeWarrior <= 8.x +#define BOOST_STATIC_ASSERT( B ) \ + BOOST_STATIC_CONSTANT(int, \ + BOOST_JOIN(boost_static_assert_test_, __LINE__) = \ + sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >) ) +#else +// generic version +#define BOOST_STATIC_ASSERT( B ) \ + typedef ::boost::static_assert_test<\ + sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >)>\ + BOOST_JOIN(boost_static_assert_typedef_, __LINE__) +#endif + +#else +// alternative enum based implementation: +#define BOOST_STATIC_ASSERT( B ) \ + enum { BOOST_JOIN(boost_static_assert_enum_, __LINE__) \ + = sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >) } +#endif +#endif // ndef BOOST_HAS_STATIC_ASSERT + +#endif // BOOST_STATIC_ASSERT_HPP + + diff --git a/build_libxc b/build_libxc new file mode 100644 index 000000000..789e8dad7 --- /dev/null +++ b/build_libxc @@ -0,0 +1,9 @@ +TOP_DIR=`pwd` +echo $TOP_DIR +cd libxc +./configure --prefix=$TOP_DIR/opt +make clean +make +make check +make install + diff --git a/doc/Doxyfile b/doc/Doxyfile new file mode 100644 index 000000000..f8a13fa35 --- /dev/null +++ b/doc/Doxyfile @@ -0,0 +1,1551 @@ +# Doxyfile 1.6.3 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = LSMS_3 + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, +# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, +# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it parses. +# With this tag you can assign which parser to use for a given extension. +# Doxygen has a built-in mapping, but you can override or extend it using this tag. +# The format is ext=language, where ext is a file extension, and language is one of +# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, +# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat +# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), +# use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = YES + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen to replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = NO + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penality. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will rougly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols + +SYMBOL_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespace are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen +# will list include files with double quotes in the documentation +# rather than with sharp brackets. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. +# This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by +# doxygen. The layout file controls the global structure of the generated output files +# in an output format independent way. The create the layout file that represents +# doxygen's defaults, run doxygen with the -l option. You can optionally specify a +# file name after the option, if omitted DoxygenLayout.xml will be used as the name +# of the layout file. + +LAYOUT_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = ../src + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 + +FILE_PATTERNS = *.c *.cpp *.cc *.h *.hh *.hpp *.py *.f *.f90 + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. +# If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. +# Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. +# The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. +# Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting +# this to NO can help when comparing the output of multiple runs. + +HTML_TIMESTAMP = YES + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER +# are set, an additional index file will be generated that can be used as input for +# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated +# HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. +# For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's +# filter section matches. +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files +# will be generated, which together with the HTML files, form an Eclipse help +# plugin. To install this plugin and make it available under the help contents +# menu in Eclipse, the contents of the directory containing the HTML and XML +# files needs to be copied into the plugins directory of eclipse. The name of +# the directory within the plugins directory should be the same as +# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before the help appears. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have +# this name. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, +# and Class Hierarchy pages using a tree view instead of an ordered list. + +USE_INLINE_TREES = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) there is already a search function so this one should +# typically be disabled. For large projects the javascript based search engine +# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. + +SEARCHENGINE = YES + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be implemented using a PHP enabled web server instead of at the web client using Javascript. Doxygen will generate the search PHP script and index +# file to put on the web server. The advantage of the server based approach is that it scales better to large projects and allows full text search. The disadvances is that it is more difficult to setup +# and does not have live searching capabilities. + +SERVER_BASED_SEARCH = NO + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = YES + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. +# Note that when enabling USE_PDFLATEX this option is only used for +# generating bitmaps for formulas in the HTML output, but not in the +# Makefile that is written to the output directory. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = letter + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +# If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER. + +LATEX_SOURCE_CODE = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. +# This is useful +# if you want to understand what is going on. +# On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = YES + +# By default doxygen will write a font called FreeSans.ttf to the output +# directory and reference it in all dot files that doxygen generates. This +# font does not include all possible unicode characters however, so when you need +# these (or just want a differently looking font) you can specify the font name +# using DOT_FONTNAME. You need need to make sure dot is able to find the font, +# which can be done by putting it in a standard location or by setting the +# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory +# containing the font. + +DOT_FONTNAME = FreeSans + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the output directory to look for the +# FreeSans.ttf font (which doxygen will put there itself). If you specify a +# different font using DOT_FONTNAME you can set the path where dot +# can find it using this tag. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = YES + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = YES + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/doc/Makefile b/doc/Makefile new file mode 100644 index 000000000..a5477da8b --- /dev/null +++ b/doc/Makefile @@ -0,0 +1,14 @@ +all: pdf_doxygen pdf_manual + +pdf_doxygen: + doxygen + cd latex; pdflatex refman + cd latex; pdflatex refman + +pdf_manual: + cd manual && $(MAKE) pdf + +clean: + cd latex && $(MAKE) clean + cd html && $(MAKE) clean + cd manual && $(MAKE) clean diff --git a/doc/html/Makefile b/doc/html/Makefile new file mode 100644 index 000000000..3b2e62f7a --- /dev/null +++ b/doc/html/Makefile @@ -0,0 +1,12 @@ +all: + +pdf: + + +clean: + rm -rf *.map search + rm -rf *.html + rm -rf *.md5 + rm -rf *.png + rm -rf *.css + rm -rf *.js diff --git a/doc/latex/Makefile b/doc/latex/Makefile new file mode 100644 index 000000000..8cc3866f4 --- /dev/null +++ b/doc/latex/Makefile @@ -0,0 +1,21 @@ +all: refman.pdf + +pdf: refman.pdf + +refman.pdf: clean refman.tex + pdflatex refman + makeindex refman.idx + pdflatex refman + latex_count=8 ; \ + while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\ + do \ + echo "Rerunning latex...." ;\ + pdflatex refman ;\ + latex_count=`expr $$latex_count - 1` ;\ + done + makeindex refman.idx + pdflatex refman + + +clean: + rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl refman.pdf diff --git a/doc/latex/doxygen.sty b/doc/latex/doxygen.sty new file mode 100644 index 000000000..acd68e4be --- /dev/null +++ b/doc/latex/doxygen.sty @@ -0,0 +1,480 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{doxygen} + +% Packages used by this style file +\RequirePackage{alltt} +\RequirePackage{array} +\RequirePackage{calc} +\RequirePackage{float} +\RequirePackage{ifthen} +\RequirePackage{verbatim} +\RequirePackage[table]{xcolor} +\RequirePackage{xtab} + +%---------- Internal commands used in this style file ---------------- + +\newcommand{\ensurespace}[1]{% + \begingroup% + \setlength{\dimen@}{#1}% + \vskip\z@\@plus\dimen@% + \penalty -100\vskip\z@\@plus -\dimen@% + \vskip\dimen@% + \penalty 9999% + \vskip -\dimen@% + \vskip\z@skip% hide the previous |\vskip| from |\addvspace| + \endgroup% +} + +\newcommand{\DoxyLabelFont}{} +\newcommand{\entrylabel}[1]{% + {% + \parbox[b]{\labelwidth-4pt}{% + \makebox[0pt][l]{\DoxyLabelFont#1}% + \vspace{1.5\baselineskip}% + }% + }% +} + +\newenvironment{DoxyDesc}[1]{% + \ensurespace{4\baselineskip}% + \begin{list}{}{% + \settowidth{\labelwidth}{20pt}% + \setlength{\parsep}{0pt}% + \setlength{\itemsep}{0pt}% + \setlength{\leftmargin}{\labelwidth+\labelsep}% + \renewcommand{\makelabel}{\entrylabel}% + }% + \item[#1]% +}{% + \end{list}% +} + +\newsavebox{\xrefbox} +\newlength{\xreflength} +\newcommand{\xreflabel}[1]{% + \sbox{\xrefbox}{#1}% + \setlength{\xreflength}{\wd\xrefbox}% + \ifthenelse{\xreflength>\labelwidth}{% + \begin{minipage}{\textwidth}% + \setlength{\parindent}{0pt}% + \hangindent=15pt\bfseries #1\vspace{1.2\itemsep}% + \end{minipage}% + }{% + \parbox[b]{\labelwidth}{\makebox[0pt][l]{\textbf{#1}}}% + }% +} + +%---------- Commands used by doxygen LaTeX output generator ---------- + +% Used by
 ... 
+\newenvironment{DoxyPre}{% + \small% + \begin{alltt}% +}{% + \end{alltt}% + \normalsize% +} + +% Used by @code ... @endcode +\newenvironment{DoxyCode}{% + \par% + \scriptsize% + \begin{alltt}% +}{% + \end{alltt}% + \normalsize% +} + +% Used by @example, @include, @includelineno and @dontinclude +\newenvironment{DoxyCodeInclude}{% + \DoxyCode% +}{% + \endDoxyCode% +} + +% Used by @verbatim ... @endverbatim +\newenvironment{DoxyVerb}{% + \footnotesize% + \verbatim% +}{% + \endverbatim% + \normalsize% +} + +% Used by @verbinclude +\newenvironment{DoxyVerbInclude}{% + \DoxyVerb% +}{% + \endDoxyVerb% +} + +% Used by numbered lists (using '-#' or
    ...
) +\newenvironment{DoxyEnumerate}{% + \enumerate% +}{% + \endenumerate% +} + +% Used by bullet lists (using '-', @li, @arg, or
    ...
) +\newenvironment{DoxyItemize}{% + \itemize% +}{% + \enditemize% +} + +% Used by description lists (using
...
) +\newenvironment{DoxyDescription}{% + \description% +}{% + \enddescription% +} + +% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc +% (only if caption is specified) +\newenvironment{DoxyImage}{% + \begin{figure}[H]% + \begin{center}% +}{% + \end{center}% + \end{figure}% +} + +% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc +% (only if no caption is specified) +\newenvironment{DoxyImageNoCaption}{% + \begin{center}% +}{% + \end{center}% +} + +% Used by @attention +\newenvironment{DoxyAttention}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @author and @authors +\newenvironment{DoxyAuthor}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @date +\newenvironment{DoxyDate}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @invariant +\newenvironment{DoxyInvariant}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @note +\newenvironment{DoxyNote}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @post +\newenvironment{DoxyPostcond}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @pre +\newenvironment{DoxyPrecond}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @copyright +\newenvironment{DoxyCopyright}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @remark +\newenvironment{DoxyRemark}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @return and @returns +\newenvironment{DoxyReturn}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @since +\newenvironment{DoxySince}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @see +\newenvironment{DoxySeeAlso}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @version +\newenvironment{DoxyVersion}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @warning +\newenvironment{DoxyWarning}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @internal +\newenvironment{DoxyInternal}[1]{% + \paragraph*{#1}% +}{% +} + +% Used by @par and @paragraph +\newenvironment{DoxyParagraph}[1]{% + \begin{list}{}{% + \settowidth{\labelwidth}{40pt}% + \setlength{\leftmargin}{\labelwidth}% + \setlength{\parsep}{0pt}% + \setlength{\itemsep}{-4pt}% + \renewcommand{\makelabel}{\entrylabel}% + }% + \item[#1]% +}{% + \end{list}% +} + +% Used by parameter lists +\newenvironment{DoxyParams}[2][]{% + \par% + \tabletail{\hline}% + \tablelasttail{\hline}% + \tablefirsthead{}% + \tablehead{}% + \ifthenelse{\equal{#1}{}}% + {\tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]}% + \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.15\textwidth}|% + p{0.805\textwidth}|}}% + {\ifthenelse{\equal{#1}{1}}% + {\tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]}% + \begin{xtabular}{|>{\centering}p{0.10\textwidth}|% + >{\raggedleft\hspace{0pt}}p{0.15\textwidth}|% + p{0.678\textwidth}|}}% + {\tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]}% + \begin{xtabular}{|>{\centering}p{0.10\textwidth}|% + >{\centering\hspace{0pt}}p{0.15\textwidth}|% + >{\raggedleft\hspace{0pt}}p{0.15\textwidth}|% + p{0.501\textwidth}|}}% + }\hline% +}{% + \end{xtabular}% + \tablefirsthead{}% + \vspace{6pt}% +} + +% Used for fields of simple structs +\newenvironment{DoxyFields}[1]{% + \par% + \tabletail{\hline}% + \tablelasttail{\hline}% + \tablehead{}% + \tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]}% + \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.15\textwidth}|% + p{0.15\textwidth}|% + p{0.63\textwidth}|}% + \hline% +}{% + \end{xtabular}% + \tablefirsthead{}% + \vspace{6pt}% +} + +% Used for parameters within a detailed function description +\newenvironment{DoxyParamCaption}{% + \renewcommand{\item}[2][]{##1 {\em ##2}}% +}{% +} + +% Used by return value lists +\newenvironment{DoxyRetVals}[1]{% + \par% + \tabletail{\hline}% + \tablelasttail{\hline}% + \tablehead{}% + \tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]}% + \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.25\textwidth}|% + p{0.705\textwidth}|}% + \hline% +}{% + \end{xtabular}% + \tablefirsthead{}% + \vspace{6pt}% +} + +% Used by exception lists +\newenvironment{DoxyExceptions}[1]{% + \par% + \tabletail{\hline}% + \tablelasttail{\hline}% + \tablehead{}% + \tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]}% + \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.25\textwidth}|% + p{0.705\textwidth}|}% + \hline% +}{% + \end{xtabular}% + \tablefirsthead{}% + \vspace{6pt}% +} + +% Used by template parameter lists +\newenvironment{DoxyTemplParams}[1]{% + \par% + \tabletail{\hline}% + \tablelasttail{\hline}% + \tablehead{}% + \tablefirsthead{\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]}% + \begin{xtabular}{|>{\raggedleft\hspace{0pt}}p{0.25\textwidth}|% + p{0.705\textwidth}|}% + \hline% +}{% + \end{xtabular}% + \tablefirsthead{}% + \vspace{6pt}% +} + +% Used for member lists +\newenvironment{DoxyCompactItemize}{% + \begin{itemize}% + \setlength{\itemsep}{-3pt}% + \setlength{\parsep}{0pt}% + \setlength{\topsep}{0pt}% + \setlength{\partopsep}{0pt}% +}{% + \end{itemize}% +} + +% Used for member descriptions +\newenvironment{DoxyCompactList}{% + \begin{list}{}{% + \setlength{\leftmargin}{0.5cm}% + \setlength{\itemsep}{0pt}% + \setlength{\parsep}{0pt}% + \setlength{\topsep}{0pt}% + \renewcommand{\makelabel}{\hfill}% + }% +}{% + \end{list}% +} + +% Used for reference lists (@bug, @deprecated, @todo, etc.) +\newenvironment{DoxyRefList}{% + \begin{list}{}{% + \setlength{\labelwidth}{10pt}% + \setlength{\leftmargin}{\labelwidth}% + \addtolength{\leftmargin}{\labelsep}% + \renewcommand{\makelabel}{\xreflabel}% + }% +}{% + \end{list}% +} + +% Used by @bug, @deprecated, @todo, etc. +\newenvironment{DoxyRefDesc}[1]{% + \begin{list}{}{% + \renewcommand\makelabel[1]{\textbf{##1}}% + \settowidth\labelwidth{\makelabel{#1}}% + \setlength\leftmargin{\labelwidth+\labelsep}% + }% +}{% + \end{list}% +} + +% Used by parameter lists and simple sections +\newenvironment{Desc} +{\begin{list}{}{% + \settowidth{\labelwidth}{40pt}% + \setlength{\leftmargin}{\labelwidth}% + \setlength{\parsep}{0pt}% + \setlength{\itemsep}{-4pt}% + \renewcommand{\makelabel}{\entrylabel}% + } +}{% + \end{list}% +} + +% Used by tables +\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}% +\newlength{\tmplength}% +\newenvironment{TabularC}[1]% +{% +\setlength{\tmplength}% + {\linewidth/(#1)-\tabcolsep*2-\arrayrulewidth*(#1+1)/(#1)}% + \par\begin{xtabular*}{\linewidth}% + {*{#1}{|>{\PBS\raggedright\hspace{0pt}}p{\the\tmplength}}|}% +}% +{\end{xtabular*}\par}% + +% Used by nested tables +\newenvironment{TabularNC}[1]% +{% +\setlength{\tmplength}% + {\linewidth/(#1)-\tabcolsep*2-\arrayrulewidth*(#1+1)/(#1)}% + \par\begin{tabular*}{\linewidth}% + {*{#1}{|>{\PBS\raggedright\hspace{0pt}}p{\the\tmplength}}|}% +}% +{\end{tabular*}\par}% + +% Used for member group headers +\newenvironment{Indent}{% + \begin{list}{}{% + \setlength{\leftmargin}{0.5cm}% + }% + \item[]\ignorespaces% +}{% + \unskip% + \end{list}% +} + +% Used when hyperlinks are turned off +\newcommand{\doxyref}[3]{% + \textbf{#1} (\textnormal{#2}\,\pageref{#3})% +} + +% Used by @addindex +\newcommand{\lcurly}{\{} +\newcommand{\rcurly}{\}} + +% Used for syntax highlighting +\definecolor{comment}{rgb}{0.5,0.0,0.0} +\definecolor{keyword}{rgb}{0.0,0.5,0.0} +\definecolor{keywordtype}{rgb}{0.38,0.25,0.125} +\definecolor{keywordflow}{rgb}{0.88,0.5,0.0} +\definecolor{preprocessor}{rgb}{0.5,0.38,0.125} +\definecolor{stringliteral}{rgb}{0.0,0.125,0.25} +\definecolor{charliteral}{rgb}{0.0,0.5,0.5} +\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0} +\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43} +\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0} +\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0} diff --git a/doc/manual/Makefile b/doc/manual/Makefile new file mode 100644 index 000000000..a817a7574 --- /dev/null +++ b/doc/manual/Makefile @@ -0,0 +1,14 @@ +TEX_FILES = lsms_manual.tex \ + constrained_moment.tex instalation.tex units.tex + +all: pdf + +pdf: $(TEX_FILES) + pdflatex lsms_manual.tex + pdflatex lsms_manual.tex + +clean: + rm -f lsms_manual.pdf + rm -f *.aux + rm -f *.log + rm -f *.toc diff --git a/doc/manual/constrained_moment.tex b/doc/manual/constrained_moment.tex new file mode 100644 index 000000000..d219cd4b1 --- /dev/null +++ b/doc/manual/constrained_moment.tex @@ -0,0 +1,12 @@ +LSMS supports multiple modes to constrain the magnetic +moments: + +\begin{enumarate} +\item Fixed Moment Direction. This is the original mode supported since LSMS version 1. + The direction of the moment is fixed and the magnitude of the moment is found selfconsistently. +\item Fixed Constraining Field. The local field is specified and the resulting + moment might point into any direction and magnitude. +\item Fixed Moment. Selfconsistently fiend the constraining field to obtain the specified + moment direction and magnitude. +\end{enumerate} + diff --git a/doc/manual/input_format.tex b/doc/manual/input_format.tex new file mode 100644 index 000000000..278722461 --- /dev/null +++ b/doc/manual/input_format.tex @@ -0,0 +1,157 @@ +\chapter{Input File Format} +The main input file format of \LSMS\ employes the \texttt{lua} language. +This allows the processing of the input file before it is read by the +\LSMS\ code itself. The input parameters are read from the values of +gloabl variables that are listed in the following sections. +These variable names should be avoided for any other uses in the \texttt{lua} +input script to avoid unexpected behavior. + + +\section{Crystal Structure} + +All units for atom position and lattice constants are Bohr radii $a_0=0.529177\mathrm{\AA}$. +\subsection{\texttt{bravais}} +(no default value) + +\subsection{\texttt{num\_atoms}} +The number of atoms in the unit cell. (no default value) This has to +be the number of sites described by the \texttt{site} entries in the +input file. + +%%%%%%% +\subsection{\texttt{site}} + +\subsubsection{\texttt{site.pos}} + +\subsubsection{\texttt{site.evec}} + +\subsubsection{\texttt{site.atom}} + +\subsubsection{\texttt{site.pot\_in\_idx}} + +\subsubsection{\texttt{site.Z}} + +\subsubsection{\texttt{site.Zc}} + +\subsubsection{\texttt{site.Zs}} + +\subsubsection{\texttt{site.Zv}} + +\subsubsection{\texttt{site.lmax}} + +\subsubsection{\texttt{site.rLIZ}} + +\subsubsection{\texttt{site.rstep}} + +\subsubsection{\texttt{site.rad}} + +%%%%%% +\subsection{\texttt{xRepeat, yRepeat, zRepeat}} +These shoud be integers greater or equal to one (default value: 1) +that specify the repeat of the unit cell described by +\texttt{bravais}, \texttt{num\_atoms} and \texttt{site} in the +\textit{x, y} and \textit{z} directions specified by \texttt{bravais}. +The total number of atoms in the system will be $\texttt{bravais} +\times \texttt{xRepeat} \times \texttt{yRepeat} \times \texttt{zRepeat}$. + +\subsection{\texttt{makeTypesUnique}} +Possible values: 0 or 1 (default value: 1). If set to one all sites are forced to have +independent potentials, thus ignoring equivqlent atom potentials +specified in the input file or in conjunction with +\texttt{\{x,y,z\}Repeat} to generate a repeated unit cell (usefull for +Monte-Carlo simulations). + +%%%%%%%%% +%%%%%%%%% +%%%%%%%%% +\section{Control of the Calculation} + +\subsection{\texttt{systemid}} + +\subsection{\texttt{system\_title}} + +\subsection{\texttt{pot\_in\_type}} + +\subsection{\texttt{pot\_out\_type}} + +\subsection{\texttt{iprint}} + +\subsection{\texttt{default\_iprint}} + +\subsection{\texttt{print\_node}} + +\subsection{\texttt{istop}} + +%%%%% +%%%%% +\subsection{\texttt{nspin}} +This parameter selects the treatment of magnetism. Possible values are: 1 for non spin-polarized calculations, +2 for spin-polarized collinear clacluations and 3 for non-collinear spin polarized calculations. +The default value fon non relativistic and scalar relativistic calculations is 2 in the fully relativistic +calculations this parameter is ignored and assumed to be 3 (always non-collinear!). Note that this is different from LSMS\_1 +where a fully relativistic calculation was requested by \texttt{nspin=4}, now this is selected by \texttt{relativity="full"}. + +\subsection{\texttt{mtasa}} +This parameter selects between muffin-tin potential or atomix sphere +approximation treatment of the atomic potentials. Default value: 0 for +muffin-tin. \textit{This parameter will be replaced by the} +\texttt{potential} \textit{parameter in a future version.} + +\subsection{\texttt{potential} not yet implemented} +Possible values: \texttt{spherical}, \texttt{muffin-tin}, +\texttt{atomic-sphere-approximation} or \texttt{full-potential} + +\subsection{\texttt{xcFunctional}} + +\subsection{\texttt{relativity}} +This parameter selects the treatment of the valence electrons as non-relativistic, scalar-relativistic +or full-relativistic (\textit{i.e.} the Dirac equation is solved for the valence electrons.) + +Possible values: \texttt{none}, \texttt{scalar} or \texttt{full}. + +Default value: \texttt{scalar} + +\subsection{\texttt{core\_relativity}} +Treatment of the core electrons either as non-relativistic (Schr\"odinger equation) +or fully relativistic (Dirac equation). +The \texttt{default} is to solve the Schr\"odinger equation for the core electrons if the valence +electrons are non-relativistic and the Dirac equation in the scalar and fully relativistic cases. + +Possible values: \texttt{default}, \texttt{none} or \texttt{full} + +Default value: \texttt{default} + +\subsection{\texttt{nscf}} +The maximum number of selfconsistency steps tp be performed. + +\subsection{\texttt{rmsTolerance}} +The convergence criterion for selfconsistent iterations. The convergence criterion is reached when +the charge RMS difference is smaller than \texttt{rmsTolerance} for every site. + +Default values: $10^{-8}$ + +%%%%% +\subsection{\texttt{energyContour}} + +\subsubsection{\texttt{energyContour.grid}} + +\subsubsection{\texttt{energyContour.npts}} + +\subsubsection{\texttt{energyContour.ebot}} + +\subsubsection{\texttt{energyContour.etop}} + +\subsubsection{\texttt{energyContour.eitop}} + +\subsubsection{\texttt{energyContour.eibot}} + +\subsubsection{\texttt{energyContour.maxGroupSize}} + +%%%% +\subsection{\texttt{mixing}} + +\subsubsection{\texttt{mixing.quantity}} + +\subsubsection{\texttt{mixing.algorithm}} + +\subsubsection{\texttt{mixing.mixing\_parameter}} diff --git a/doc/manual/instalation.tex b/doc/manual/instalation.tex new file mode 100644 index 000000000..a785b2b09 --- /dev/null +++ b/doc/manual/instalation.tex @@ -0,0 +1,25 @@ +\chapter{Compiling and running \LSMS} +\section{Requirements} +\LSMS\ requires a Unix like environment (\textit{e.g.} +Linux or MacOS~X) with C++ and Fortran compilers and the following libraries: +\begin{itemize} +\item BLAS linear algebra library +\item LAPACK linear solvers +\item MPI message passing library for parallelization +\item CUDA optionally for GPU acceleration, the code can be built without it. +\end{itemize} + +\section{Compilation} + +\section{Running} + +The main input to describe the calculation and the system is provided by an +inputfile. The default name of the input file is \texttt{i\_lsms}. +The input file uses the \texttt{lua} scripting languange (\texttt{www.lua.org}) whic allows +powefull pre-processing of the input. +\LSMS\ will read specially named variables in the \texttt{lua} input that are listed in the chapter describing +the \LSMS\ input. + +\subsection{\texttt{lsms}} + +\subsection{\texttt{wl-lsms}} diff --git a/doc/manual/lsms_manual.tex b/doc/manual/lsms_manual.tex new file mode 100644 index 000000000..a35471b36 --- /dev/null +++ b/doc/manual/lsms_manual.tex @@ -0,0 +1,31 @@ +\documentclass[12pt]{scrbook} +\usepackage{makeidx} + +\KOMAoptions{toc=flat} + +\newcommand{\LSMS}{\texttt{LSMS}} + +\title{\LSMS} +\subtitle{The Locally Selfconsistent Multiple-Scattering Code} +\author{M. Eisenbach} +\publishers{Oak Ridge National Laboratory} +\date{13-January-2016} + +\begin{document} +\frontmatter +\maketitle +\tableofcontents + +\mainmatter +\input{instalation.tex} + +\input{input_format.tex} + +\backmatter +\input{units.tex} + +\bibliographystyle{plain} +\bibliography{lsms} + +\printindex +\end{document} diff --git a/doc/manual/units.tex b/doc/manual/units.tex new file mode 100644 index 000000000..8fda12f3b --- /dev/null +++ b/doc/manual/units.tex @@ -0,0 +1,12 @@ +\chapter{Units} + +LSMS uses atomic Rydberg units with the following values: + +\begin{description} +\item[Length] Bohr radius $a_0 = 5.291772\times 10^{-11} \mathrm{m}$ +\item[Energy] Rydberg energy $\mathrm{Ry} = 13.605701 \mathrm{eV}$ +\item[Speed of Light] $c = 2/\alpha = 274.072$ +\item[Electron mass] $m_e = 1/2$ +\item[Planck constant] $\hbar = 1$ +\item[Electron Charge] $e = \sqrt{2}$ +\end{description} diff --git a/html/doxygen.css b/html/doxygen.css new file mode 100644 index 000000000..d6aaf2804 --- /dev/null +++ b/html/doxygen.css @@ -0,0 +1,545 @@ +/* The standard CSS for doxygen */ + +body, table, div, p, dl { + font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif; + font-size: 12px; +} + +/* @group Heading Levels */ + +h1 { + text-align: center; + font-size: 150%; +} + +h2 { + font-size: 120%; +} + +h3 { + font-size: 100%; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd, p.starttd { + margin-top: 2px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + padding: 2px; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #153788; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #1b77c5; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #6666cc; + color: #ffffff; + border: 1px double #9295C2; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code { + color: #3030f0; +} + +a.codeRef { + color: #3030f0; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +.fragment { + font-family: monospace, fixed; + font-size: 105%; +} + +pre.fragment { + border: 1px solid #CCCCCC; + background-color: #f5f5f5; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; +} + +div.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + margin-bottom: 6px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background: white; + color: black; + margin-right: 20px; + margin-left: 20px; +} + +td.indexkey { + background-color: #e8eef2; + font-weight: bold; + border: 1px solid #CCCCCC; + margin: 2px 0px 2px 0; + padding: 2px 10px; +} + +td.indexvalue { + background-color: #e8eef2; + border: 1px solid #CCCCCC; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #f0f0f0; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +/* @end */ + +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #84b0c7; +} + +th.dirtab { + background: #e8eef2; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #666; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #FAFAFA; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memItemLeft, .memItemRight, .memTemplParams { + border-top: 1px solid #ccc; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memTemplParams { + color: #606060; + white-space: nowrap; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtemplate { + font-size: 80%; + color: #606060; + font-weight: normal; + margin-left: 3px; +} + +.memnav { + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.memitem { + padding: 0; + margin-bottom: 10px; +} + +.memname { + white-space: nowrap; + font-weight: bold; + margin-left: 6px; +} + +.memproto { + border-top: 1px solid #84b0c7; + border-left: 1px solid #84b0c7; + border-right: 1px solid #84b0c7; + padding: 0; + background-color: #d5e1e8; + font-weight: bold; + /* firefox specific markup */ + background-image: -moz-linear-gradient(rgba(228, 233, 245, 1.0) 0%, rgba(193, 205, 232, 1.0) 100%); + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 8px; + -moz-border-radius-topleft: 8px; + /* webkit specific markup */ + background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(228, 233, 245, 1.0)), to(rgba(193, 205, 232, 1.0))); + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 8px; + -webkit-border-top-left-radius: 8px; + +} + +.memdoc { + border-bottom: 1px solid #84b0c7; + border-left: 1px solid #84b0c7; + border-right: 1px solid #84b0c7; + padding: 2px 5px; + background-color: #eef3f5; + border-top-width: 0; + /* firefox specific markup */ + -moz-border-radius-bottomleft: 8px; + -moz-border-radius-bottomright: 8px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 8px; + -webkit-border-bottom-right-radius: 8px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} + +/* @end */ + +/* @group Directory (tree) */ + +/* for the tree view */ + +.ftvtree { + font-family: sans-serif; + margin: 0.5em; +} + +/* these are for tree view when used as main index */ + +.directory { + font-size: 9pt; + font-weight: bold; +} + +.directory h3 { + margin: 0px; + margin-top: 1em; + font-size: 11pt; +} + +/* +The following two styles can be used to replace the root node title +with an image of your choice. Simply uncomment the next two styles, +specify the name of your image and be sure to set 'height' to the +proper pixel height of your image. +*/ + +/* +.directory h3.swap { + height: 61px; + background-repeat: no-repeat; + background-image: url("yourimage.gif"); +} +.directory h3.swap span { + display: none; +} +*/ + +.directory > h3 { + margin-top: 0; +} + +.directory p { + margin: 0px; + white-space: nowrap; +} + +.directory div { + display: none; + margin: 0px; +} + +.directory img { + vertical-align: -30%; +} + +/* these are for tree view when not used as main index */ + +.directory-alt { + font-size: 100%; + font-weight: bold; +} + +.directory-alt h3 { + margin: 0px; + margin-top: 1em; + font-size: 11pt; +} + +.directory-alt > h3 { + margin-top: 0; +} + +.directory-alt p { + margin: 0px; + white-space: nowrap; +} + +.directory-alt div { + display: none; + margin: 0px; +} + +.directory-alt img { + vertical-align: -30%; +} + +/* @end */ + +address { + font-style: normal; + color: #333; +} + +table.doxtable { + border-collapse:collapse; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #153788; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #254798; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; +} + diff --git a/html/doxygen.png b/html/doxygen.png new file mode 100644 index 0000000000000000000000000000000000000000..f0a274bbaffdd67f6d784c894d9cf28729db0e14 GIT binary patch literal 1281 zcmaJ>ZA?>F7(Vx-ms?uoS`b@hdRtpo6o^%HU>M$hfGrBvQnk$LE?p^P!kn&ikhyq! zX~V@&tPF5Qt@V?oTL96Bi%aRiwbe1)9DWQI#?)=HxS7QSw`J`5fAJ*eJbB;uNuKA& zdERDo*{Y<(If(#(B$Lr#;nB(8Y#ia=ZCeW?JfPLuQY`=@cW$k}Rivq|vbxGrRq1Tl9;+(gNt?}UtVKM2`T5t1jLzuL@0UIs`S#vlhl4)^ zLgSYrPj@$+`|j?eSbXTmiHGkWxV8V}BzNR?pl9k_s4pDu9vd5a_UzZEPk)}Ad{AV_ zzddrjrh4=Imr`E06;LY{)YYt?o}L~H@7C}F^WB!Ra=v`Q0bj{>5&$66CWF>mf6vjP z2N>RRY6ZYa=K`76>+|_)Xdwko+7wv}7cN|btOhWb(*{sta~6b?S8Omrxw}!4`NhGr zZVpNqpu1@BE`QGWNTpEpcJVW5izu~2B^GlM?1(OPg)zwW;QcP@Ltcclm>XbJL9C|j z=9!2?ua=uIlf0%AndzHsRC}IyTL$EhAee(fdKB`?27KeS^2M8M_7b~PiCFO&r5LC7 z7gl1*a<8;SjNaw#h=843_AV9iZbWQOAp5YOC^&_F*9K0> zB|6%IDb?aM#3viTxkLU4aXg&@+CkNTOnQ1iMP*^?b|^lJy$4C)Zk4isV!|RZ*XhXh zw8q3$=*0LeGC!XI_Wc?dkT~3+*Gu%%yIqP+Wr3H$=&ROMQU6q}Ag^P~>c5vAEO;a- z_dK-3PPeKar%)6$j~vI2#*-YH!1h6HYVtwCX5_wM`iF#UKz&&@9Oo5w3%XGYrX zW>dY~)SG-((Yim%`InwgTvyRC?e=Wh^8KCao!R6Eg&TpVWUY1sN~4G}V?nFnEGo-; zHZ_$eW9-GnC%^WS9b z@p;-$oH#MtC0v>Q$HX%4^JdFdO$0cbv-W)Q TtK}Eh@>>I#ipmV1>S*>q-hkC} literal 0 HcmV?d00001 diff --git a/html/index.html b/html/index.html new file mode 100644 index 000000000..574d274fb --- /dev/null +++ b/html/index.html @@ -0,0 +1,57 @@ + + + + + +Main Page + + + + + + + + + +
+

+ +
+
+ + +
+ +
+ +
Generated on Tue Nov 9 14:06:30 2010 by  + +doxygen 1.6.3
+ + diff --git a/html/installdox b/html/installdox new file mode 100755 index 000000000..9b89fe025 --- /dev/null +++ b/html/installdox @@ -0,0 +1,117 @@ +#!/usr/bin/perl + +%subst = ( ); +$quiet = 0; + +if (open(F,"search.cfg")) +{ + $_= ; s/[ \t\n]*$//g ; $subst{"_doc"} = $_; + $_= ; s/[ \t\n]*$//g ; $subst{"_cgi"} = $_; +} + +while ( @ARGV ) { + $_ = shift @ARGV; + if ( s/^-// ) { + if ( /^l(.*)/ ) { + $v = ($1 eq "") ? shift @ARGV : $1; + ($v =~ /\/$/) || ($v .= "/"); + $_ = $v; + if ( /(.+)\@(.+)/ ) { + if ( exists $subst{$1} ) { + $subst{$1} = $2; + } else { + print STDERR "Unknown tag file $1 given with option -l\n"; + &usage(); + } + } else { + print STDERR "Argument $_ is invalid for option -l\n"; + &usage(); + } + } + elsif ( /^q/ ) { + $quiet = 1; + } + elsif ( /^\?|^h/ ) { + &usage(); + } + else { + print STDERR "Illegal option -$_\n"; + &usage(); + } + } + else { + push (@files, $_ ); + } +} + +foreach $sub (keys %subst) +{ + if ( $subst{$sub} eq "" ) + { + print STDERR "No substitute given for tag file `$sub'\n"; + &usage(); + } + elsif ( ! $quiet && $sub ne "_doc" && $sub ne "_cgi" ) + { + print "Substituting $subst{$sub} for each occurence of tag file $sub\n"; + } +} + +if ( ! @files ) { + if (opendir(D,".")) { + foreach $file ( readdir(D) ) { + $match = ".html"; + next if ( $file =~ /^\.\.?$/ ); + ($file =~ /$match/) && (push @files, $file); + ($file =~ "tree.js") && (push @files, $file); + } + closedir(D); + } +} + +if ( ! @files ) { + print STDERR "Warning: No input files given and none found!\n"; +} + +foreach $f (@files) +{ + if ( ! $quiet ) { + print "Editing: $f...\n"; + } + $oldf = $f; + $f .= ".bak"; + unless (rename $oldf,$f) { + print STDERR "Error: cannot rename file $oldf\n"; + exit 1; + } + if (open(F,"<$f")) { + unless (open(G,">$oldf")) { + print STDERR "Error: opening file $oldf for writing\n"; + exit 1; + } + if ($oldf ne "tree.js") { + while () { + s/doxygen\=\"([^ \"\:\t\>\<]*)\:([^ \"\t\>\<]*)\" (href|src)=\"\2/doxygen\=\"$1:$subst{$1}\" \3=\"$subst{$1}/g; + print G "$_"; + } + } + else { + while () { + s/\"([^ \"\:\t\>\<]*)\:([^ \"\t\>\<]*)\", \"\2/\"$1:$subst{$1}\" ,\"$subst{$1}/g; + print G "$_"; + } + } + } + else { + print STDERR "Warning file $f does not exist\n"; + } + unlink $f; +} + +sub usage { + print STDERR "Usage: installdox [options] [html-file [html-file ...]]\n"; + print STDERR "Options:\n"; + print STDERR " -l tagfile\@linkName tag file + URL or directory \n"; + print STDERR " -q Quiet mode\n\n"; + exit 1; +} diff --git a/html/search/close.png b/html/search/close.png new file mode 100644 index 0000000000000000000000000000000000000000..9342d3dfeea7b7c4ee610987e717804b5a42ceb9 GIT binary patch literal 273 zcmV+s0q*{ZP)4(RlMby96)VwnbG{ zbe&}^BDn7x>$<{ck4zAK-=nT;=hHG)kmplIF${xqm8db3oX6wT3bvp`TE@m0cg;b) zBuSL}5?N7O(iZLdAlz@)b)Rd~DnSsSX&P5qC`XwuFwcAYLC+d2>+1(8on;wpt8QIC X2MT$R4iQDd00000NkvXXu0mjfia~GN literal 0 HcmV?d00001 diff --git a/html/search/nomatches.html b/html/search/nomatches.html new file mode 100644 index 000000000..b1ded27e9 --- /dev/null +++ b/html/search/nomatches.html @@ -0,0 +1,12 @@ + + + + + + + +
+
No Matches
+
+ + diff --git a/html/search/search.css b/html/search/search.css new file mode 100644 index 000000000..63b7f9672 --- /dev/null +++ b/html/search/search.css @@ -0,0 +1,200 @@ +/*---------------- Search Box */ +#FSearchBox { + float: left; +} +#MSearchBox { + padding: 0px; + margin: 0px; + border: none; + border: 1px solid #84B0C7; + white-space: nowrap; + -moz-border-radius: 8px; + -webkit-border-top-left-radius: 8px; + -webkit-border-top-right-radius: 8px; + -webkit-border-bottom-left-radius: 8px; + -webkit-border-bottom-right-radius: 8px; +} +#MSearchField { + font: 9pt Arial, Verdana, sans-serif; + color: #999999; + background-color: #FFFFFF; + font-style: normal; + cursor: text; + padding: 1px 1px; + margin: 0px 6px 0px 0px; + border: none; + outline: none; + vertical-align: middle; +} +.MSearchBoxActive #MSearchField { + color: #000000; +} +#MSearchSelect { + float : none; + display : inline; + background : none; + font: 9pt Verdana, sans-serif; + border: none; + margin: 0px 0px 0px 6px; + vertical-align: middle; + padding: 0px 0px; +} + +#MSearchClose { + float : none; + display : none; + background : none; + border: none; + margin: 0px 4px 0px 0px; + padding: 0px 0px; + outline: none; +} + +#MSearchCloseImg { + vertical-align: middle; +} + +.MSearchBoxLeft { + display: block; + text-align: left; + float: left; + margin-left: 6px; +} +.MSearchBoxRight { + display: block; + float: right; + text-align: right; + margin-right: 6px; +} +.MSearchBoxSpacer { + font-size: 0px; + clear: both; +} +.MSearchBoxRow { + font-size: 0px; + clear: both; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #A0A0A0; + background-color: #FAFAFA; + z-index: 1; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + } +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} +a.SelectItem:hover { + color: #FFFFFF; + background-color: #2A50E4; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; + } +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000000; + background-color: #EEF3F5; + } + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} +.SRPage .SRChildren { + display: none; +} +.SRSymbol { + font-weight: bold; color: #153788; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #153788; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; +} + +.SRResult { + display: none; +} + diff --git a/html/search/search.js b/html/search/search.js new file mode 100644 index 000000000..7cfb3efc2 --- /dev/null +++ b/html/search/search.js @@ -0,0 +1,724 @@ +// Search script generated by doxygen +// Copyright (C) 2009 by Dimitri van Heesch. + +// The code in this file is loosly based on main.js, part of Natural Docs, +// which is Copyright (C) 2003-2008 Greg Valure +// Natural Docs is licensed under the GPL. + +var indexSectionsWithContent = +{ +}; + +var indexSectionNames = +{ +}; + +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var hexCode; + if (code<16) + { + hexCode="0"+code.toString(16); + } + else + { + hexCode=code.toString(16); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + if (indexSectionsWithContent[this.searchIndex].charAt(code) == '1') + { + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches.html'; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location.href = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName == 'DIV' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName == 'DIV' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} diff --git a/html/search/search.png b/html/search/search.png new file mode 100644 index 0000000000000000000000000000000000000000..9dd2396db13f27c7b5e1844540d12e0e54977189 GIT binary patch literal 527 zcmV+q0`UEbP)`f0005jNkl4#8 zyRJb|5QfiY3nD}#O1IDv32{lhg2F4H)+uxzLhBJkK|@6+NC=S-QMwdDA(0T5^Rb+r z6PJ@S#oDuG{{Np@Gh4b|uU~h&TrSex#PvU?tS~#BPQTxuPNziNZnxj>4~N5lOGu~F ziF(y)wOlTr&u8jGP^naEwK|bV#N%`jJS4I$EukQckB6(ORuWistd(@>L9MGMR8v)@U^9^?IF7hr?B*-qJ)+ z1|i-_O<8`-j|U?Gf)q9yjf%zMZ<*i*e;r)?T0%FY-erEE4^ zE|)WzOa!sPV4yI$s`L3g9J}3aHk&~s1mENFu%YdCOBdtuI2a5v5ztnv^``M-l6VPq z_WS+ea1aGG8V!n@&8AQ&tk-LY!;#HqS-}tM@x8SzUWE##TnVDJSS;Y9lF4KOfxt6a za0LG;M+*LYKA+8Iu~>{>;0g9<8{AVu2oXOXkIav?zy4Z%002ovPDHLkV1iB-@74eS literal 0 HcmV?d00001 diff --git a/html/tab_b.gif b/html/tab_b.gif new file mode 100644 index 0000000000000000000000000000000000000000..0d623483ffdf5f9f96900108042a7ab0643fe2a3 GIT binary patch literal 35 ncmZ?wbhEHbWMp7uXkcJy*>IeJfk6j|fqX^=1|}vKMh0sDa2W*H literal 0 HcmV?d00001 diff --git a/html/tab_l.gif b/html/tab_l.gif new file mode 100644 index 0000000000000000000000000000000000000000..9b1e6337c9299a700401a2a78a2c6ffced475216 GIT binary patch literal 706 zcmZ?wbhEHbZT`}F1e&(Gg}Y(8=I;HA5#Z$3JI=gGB)FQ#odI(O&E^@q;x zK6mr*m3xOS-#u~t!I@i+u0DKm^U160k6t`|^WpV}&n+8{U%dD9&a>B#U%!9-@yol< zU%&tQ{rk_K|NsC0`}dE5ET99@1@a36+kb~?0UJ*yc&I3X_m z!ND^5$O7$#8OFRuDhG}!?8z?cdZK&!`PWjdR;Aj^wZ` zeK{IEYHBJ)6K8VIp1`BVt++swf6j+=L{p1*nO(VhE`pFexG@5$|>uaCcd z`0m=9m+yak{QmXN#Sc$^{$X9h9&q2jiKAI|&T)a;PPx2K9p`YIdw8HtR5k2Q$2-O2 z*;3y{MQ-RnJTgJfI&R5|O)AHxDf_00XbPvDZPy4t=hHd)nfLPvms&O`Ok(sD()5v$ z5U@&h;a=#xbxVbo2~X&Xj0Ie(f{v>vERH+qC+nTG=B8Nca=wU-O$?1&vUgV~9=!H; zx>3p9Yn%*<>t~sk+&0xfyS8RsPfYBd<~wWK%j-LmpU>O7yX^h#UCp1x-p#i7@bE;py8XI6 zmY<)m>~)W~yIWcMVoiPg{duuf<*)9qZ9l$m*Ph&W&$jlv*Vpa+{pH@n=IQ$L?0$ax ec60Ul|8o2P|NVbd{6P)#weSbE3}s?04AuZvx_~SI literal 0 HcmV?d00001 diff --git a/html/tab_r.gif b/html/tab_r.gif new file mode 100644 index 0000000000000000000000000000000000000000..ce9dd9f533cb5486d6941844f442b59d4a9e9175 GIT binary patch literal 2585 zcmbV}`9Bkk1ILFF--w5zJc=ZZT(zjE=;2|_S)Qm~rCWz1Pc)KPl;jv%A#&v2*x}yc zmf2~Jm~&=xjJY?PqwIN}f8qQ2{r$uH{c*nJbmr{cR5??*egHrs-B=MzCF`3%e{FAW z{oL5xTHn~5TM{jaB;@|_Ue5F&Zb@p(kMyG{*;gWDg zyeL|eZf7Qd8=#bXzSiR{yzRgLSj-fJS8>lBjVHN z^o-0eS=nE6a`W;LChBs=`+QAJP~{b93>H^eRb5kCSC1zUNezun%`L5M?RDzv#%jk7 zYVRX=vATPD`+oEfum^{RM@GjuP?-r=yh0!p;Vx^T9G7~`7%5ydH%70=jyJ;;`d;hv92x3R=z{xp+Lg2!*@OK*K15-t&okoPtSED)h&$RLxdbA zseWm^C3d%-yRNi-ryk^!ek+C`n&~cd$#ZWct_cUL{l~i+Nzx^5d!n94(>bW-iL~Rl z&8r)?q|1DIo=0=judQ{FaGcfLERz8gfn3-Qt<2lksh{mzpT}DXxUuR^z=^key&q4! z+wWI45vL0k$R^(F#{qfqhUsN@WA+w-V?LPH33!Q?WFSB3)WBojE@hK41Nb?KfS+Qo zXgrzfsP$wr4Qzy*{OD>uJBjdgGM@VMml5)2f~_}lD*YyOb}Hjeobhz#4c`w(l^>KK zr?Ud;W~Z}*w;%hZ|2^p^+f06gJDJQD zeIhGADbDmm&6arh(q>EZ<7mjzg7l|z$hRL8=1>)Nv=S7CY$B}iYJ&*T_-T_OG*L1q ztZ3Lana33?y3AKnyq^YCF|4x%Rb5WU&2qcl{TFKey%QJeMxn^SdT!hZ5+0i1zeusiYVp-phBl7b5+Px-X&LhByq z0F&<;K0l2+v>qiHlXb#$jXMv$uK-dEGE9L~qtdU(XeRXmvu*K2Q&6!fD**JxYP4b4BR7FdJ$Qx9G9`J%-_X!a#LGpp3g9)VWytGCa;7`S1_e8F~!R+aSJ zOF17p2`H?2kPs8Q`_;U}+D%3p zs2-0BTqFwpUoBk`?P;iPQ(IbEA|JmMx!P&YYG|R@S=5Mnw;-?A6rEEVyV%d7{iU4a zNk`i!%F(Ykpm`}#oH;BjY->@b8vQedv;pza2FL&*6ufjd+*3Ute&>kes~TU?^KkojsTh(o~(3tk1Y6>4(yn( z#U*ID9@eg-beKo1B;HXe+}{Z%n@7m0+yxivuqk9~;!1LGQlah)xYK4>wgL}l6dsaN zIxlRlq`*`j9PG4*0hD6YV_b_2w5b#)o7J?`q#{GjvvKlD`T*dWcZx<-s(ZvLB44E# z=!|sw!?)@%y$oRNL#25WS3lzdii}TuQ3?CLnvQ1_n};2sT_;Y;#d3=+-(O% zMN$>O!3;ke(UuLR%h_&)N zs^!-@A>QR}4yB1bPp`9S19ikTbZ~O{&FF-yHK{En;mmShDUIEw03`j(DBIsM}Rjki2J#SQa3gFZTKBPDeIiLt9Z z%bL3(B@Qw%(B`wSMS~dPh$=R`(}lBoFXKy(s|*{#ru$wjsBc_O#zxNk9w+UUHmx(U zmJ8+M+ndtnZ<7|VU9Mbt61zpo9T&3%Wx&XII=#QJxjR`CZf22ac3d51Z?GD%LEe_&*t46Qf;4`bZ7p2K(Ab5>GfT^}4! zBT&HZD`^PEgWoI&{~o-ID0F?O`75sm(87x%A{(}Ch1)QlzdJ)1B-eqe5a(weg0`4lQIf1evjvbBY50DVbzO7CLf|vP z2#0(U-|jZ`H{y5N^o7%iK6H>_HEGN->U6^!)1{XpJV!!4(Ig7wzZQ*9WYF4X1rG0x z=1uA@i`rIAciubDC{;~b(|&|A@xkjRP5aRcvRU9tvIm}jDB6J eQ0-6-y)mpwdT=ayS0tBxKDA*~;EWmo literal 0 HcmV?d00001 diff --git a/html/tabs.css b/html/tabs.css new file mode 100644 index 000000000..a44416341 --- /dev/null +++ b/html/tabs.css @@ -0,0 +1,105 @@ +/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */ + +DIV.tabs +{ + float : left; + width : 100%; + background : url("tab_b.gif") repeat-x bottom; + margin-bottom : 4px; +} + +DIV.tabs UL +{ + margin : 0px; + padding-left : 10px; + list-style : none; +} + +DIV.tabs LI, DIV.tabs FORM +{ + display : inline; + margin : 0px; + padding : 0px; +} + +DIV.tabs FORM +{ + float : right; +} + +DIV.tabs A +{ + float : left; + background : url("tab_r.gif") no-repeat right top; + border-bottom : 1px solid #84B0C7; + font-size : 80%; + font-weight : bold; + text-decoration : none; +} + +DIV.tabs A:hover +{ + background-position: 100% -150px; +} + +DIV.tabs A:link, DIV.tabs A:visited, +DIV.tabs A:active, DIV.tabs A:hover +{ + color: #1A419D; +} + +DIV.tabs SPAN +{ + float : left; + display : block; + background : url("tab_l.gif") no-repeat left top; + padding : 5px 9px; + white-space : nowrap; +} + +DIV.tabs #MSearchBox +{ + float : right; + display : inline; + font-size : 1em; +} + +DIV.tabs TD +{ + font-size : 80%; + font-weight : bold; + text-decoration : none; +} + + + +/* Commented Backslash Hack hides rule from IE5-Mac \*/ +DIV.tabs SPAN {float : none;} +/* End IE5-Mac hack */ + +DIV.tabs A:hover SPAN +{ + background-position: 0% -150px; +} + +DIV.tabs LI.current A +{ + background-position: 100% -150px; + border-width : 0px; +} + +DIV.tabs LI.current SPAN +{ + background-position: 0% -150px; + padding-bottom : 6px; +} + +DIV.navpath +{ + background : none; + border : none; + border-bottom : 1px solid #84B0C7; + text-align : center; + margin : 2px; + padding : 2px; +} diff --git a/include/Array3d.hpp b/include/Array3d.hpp new file mode 100755 index 000000000..2d9a3ef68 --- /dev/null +++ b/include/Array3d.hpp @@ -0,0 +1,240 @@ +// \section{3 dim. Array Class} +// We use an adapted the Matrix class to an additional dimension. +// The memory layout of this class is designed to be the same in {\bf Fortran}. + +#ifndef LSMS_ARRAY3D_H +#define LSMS_ARRAY3D_H + +#include +#include +#include +#include +#include +#include +#include +#include +// #include "PSIMAGAssert.h" + + template + class Array3d { + public: + typedef Array3d ThisType; + typedef size_t size_type; + typedef T value_type; + typedef T* iterator; + typedef const T* const_iterator; + typedef T& reference; + typedef const T& const_reference; + + // The basic constructor builds an empty matrix, that needs to be resized before use. + Array3d() : nRow(0), nCol(0), nSlice(0), lDim1(0), lDim2(0), lDim12(0), owner(true), data(0) {;} + + // We also can construct an array with |nRows| rows and |nCols| collumns and |nSlice| as third dimension + // the leading dimension |ldim1| defaults to |nRows| and |ldim2| to |nCol|, + // but can be set to any larger value to get the desired memory alignement. + Array3d(size_type nRows,size_type nCols, size_type nSlices, size_type ldim1=0, size_type ldim2=0, const T& val=T()) { + if(ldim1 & a) + : nRow(a.nRow), nCol(a.nCol), nSlice(a.nSlice), lDim1(a.nRow), lDim2(a.nCol),owner(true) { + lDim12=lDim1*lDim2; + if(bool(nRow*nCol*nSlice)) { + owner=true; + data = new T[lDim12*nSlice]; + memcpy(data,a.data,sizeof(T)*lDim12*nSlice); + } + else { nRow=0; nCol=0; nSlice=0; lDim1=0; lDim2=0; lDim12=0; owner=true; data=0; } + } + + // ; + void resize(size_type m,size_type n, size_type k, size_type ldim1=0, size_type ldim2=0) { + if(!owner){std::logic_error("matrix not locally owned in T& Array3d::resize");} + if(ldim1; + // Finaly we need a destructor to free the memory allocated by the array. + ~Array3d() { + if(owner && data) delete [] data; + } + + // ; + // We provide two methods to access the lements of a matrix. The most natural one uses |operator()| with row and collumn arguments and looks simimar to a matrix access in {\bf Fortran}. + inline T& operator() (size_type i, size_type j, size_type k) { + // ASSERT(i=n_row in T& Matrix::operator()(size_type i,size_type j")); + // ASSERT(j=n_col in T& Matrix::operator()(size_type i,size_type j")); + return data[k*lDim12+j*lDim1+i]; + } + + // The second way to access the elements of a matrix uses the familair C |[]| operator and vies the |data| array as a continous block of memory. + inline T& operator[](size_type i) { + return data[i]; + } + + // We provide a few functions to return information about the matrix. + size_type size() const { return lDim12*nSlice; } + size_type n_row() const { return nRow; } + size_type n_col() const { return nCol; } + size_type n_slice() const {return nSlice;} + size_type l_dim1() const { return lDim1; } + size_type l_dim2() const { return lDim2;} + + // \subsection{Operations on 3 dim. arrays} + + // Assignments and copy: + Array3d &operator=(const Array3d& a) + { + if (this == &a) return *this; // Gracefully handle self assignment[12.1] + if(owner && data) delete [] data; + nRow=a.n_row(); nCol=a.n_col(); nSlice=a.n_slice(); lDim1=a.n_row(); lDim2=a.n_col(); lDim12=lDim1*lDim2; owner=true; + if(bool(nRow*nCol*nSlice)) { + data=new T[lDim12*nSlice]; + if(a.lDim12==lDim12) + memcpy(data,a.data,sizeof(T)*lDim12*nSlice); + else + for(size_type k=0; k& A) { + if(A.l_dim1()==lDim1 && A.l_dim2()==lDim2 && A.n_slice()==nSlice) { + for(size_t i=0; i::copy"); + } + + inline + ThisType& operator = (const T& val) + { + for(size_type i=0;i &A) { + if(A.l_dim1()==lDim1 && A.l_dim2()==lDim2 && A.n_slice()==nSlice) { + for(size_t i=0; i::add"); + } + + void addScaled(Array3d &A, T a) { + if(A.l_dim1()==lDim1 && A.l_dim2()==lDim2 && A.n_slice()==nSlice) { + for(size_t i=0; i::addScaled"); + } + + + private: + size_type nRow,nCol,nSlice,lDim1,lDim2,lDim12; + bool owner; + T* data; + // T** col; + }; + +template +inline bool operator==(Array3d& A, Array3d& B) +{ + if(A.n_row()!=B.n_row() || A.n_col()!= B.n_col() || A.n_slice()!=B.n_slice()) + return false; + for(size_t k=0; k +inline bool operator!=(Array3d& A, Array3d& B) +{ + if(A.n_row()!=B.n_row() || A.n_col()!= B.n_col() || A.n_slice()!=B.n_slice()) + return true; + for(size_t k=0; k + +/** \file BLAS.h + * \author Thomas C. Schulthess and Richard N. Thigpen + */ + + +/** \brief Namespace for psimag wrappers of BLAS functions + */ +namespace BLAS { + +// ============================================================================ +// = Level 3 BLAS GEMM +// ============================================================================ +extern "C" void sgemm_(char*,char*,int*,int*,int*,const float*, + const float*,int*,const float*,int*, + const float*,float*,int*); +extern "C" void dgemm_(char*,char*,int*,int*,int*,const double*, + const double*,int*,const double*,int*, + const double*,double*,int*); +extern "C" void cgemm_(char*,char*,int*,int*,int*,const std::complex*, + const std::complex*,int*,const std::complex*,int*, + const std::complex*,std::complex*,int*); +extern "C" void zgemm_(char*,char*,int*,int*,int*,const std::complex*, + const std::complex*,int*,const std::complex*,int*, + const std::complex*,std::complex*,int*); +//***************************************************************************** +//* SYMM +//***************************************************************************** + +extern "C" void ssymm_(char*,char*,int*,int*,const float*,const float*,int*, + const float*,int*,const float*,const float*,int*); +extern "C" void dsymm_(char*,char*,int*,int*,const double*,const double*,int*, + const double*,int*,const double*,const double*,int*); +extern "C" void csymm_(char*,char*,int*,int*,const std::complex*, + const std::complex*,int*, + const std::complex*,int*,const std::complex*, + const std::complex*,int*); +extern "C" void zsymm_(char*,char*,int*,int*,const std::complex*, + const std::complex*,int*, + const std::complex*,int*,const std::complex*, + const std::complex*,int*); + +//***************************************************************************** +//* HEMM +//***************************************************************************** + +extern "C" void chemm_(char*,char*,int*,int*,const std::complex*, + const std::complex*,int*,const std::complex*, + int*,const std::complex*,std::complex*,int*); +extern "C" void zhemm_(char*,char*,int*,int*,const std::complex*, + const std::complex*,int*,const std::complex*, + int*,const std::complex*,std::complex*,int*); + +// **************************************************************************** +// * SYRK +// **************************************************************************** + +extern "C" void ssyrk_(char*,char*,int*,int*,const float*,const float*,int*, + const float*,float*,int*); +extern "C" void dsyrk_(char*,char*,int*,int*,const double*,const double*,int*, + const double*,double*,int*); +extern "C" void csyrk_(char*,char*,int*,int*,const std::complex*, + const std::complex*,int*, + const std::complex*,std::complex*,int*); +extern "C" void zsyrk_(char*,char*,int*,int*,const std::complex*, + const std::complex*,int*, + const std::complex*,std::complex*,int*); + +// **************************************************************************** +// * HERK +// **************************************************************************** +extern "C" void cherk_(char*,char*,int*,int*,const std::complex*, + const std::complex*,int*, + const std::complex*,std::complex*,int*); + +extern "C" void zherk_(char*,char*,int*,int*,const std::complex*, + const std::complex*,int*, + const std::complex*,std::complex*,int*); +// **************************************************************************** +// * SYR2K +// **************************************************************************** +extern "C" void ssyr2k_(char*,char*,int*,int*,const float*,const float*,int*, + const float*,int*,const float*,float*,int*); +extern "C" void dsyr2k_(char*,char*,int*,int*,const double*,const double*,int*, + const double*,int*,const double*,double*,int*); +extern "C" void csyr2k_(char*,char*,int*,int*,const std::complex*,const std::complex*, + int*,const std::complex*,int*,const std::complex*, + std::complex*,int*); +extern "C" void zsyr2k_(char*,char*,int*,int*,const std::complex*,const std::complex*, + int*,const std::complex*,int*,const std::complex*, + std::complex*,int*); +// **************************************************************************** +// * HER2k +// **************************************************************************** +extern "C" void cher2k_(char*,char*,int*,int*,const std::complex*,const std::complex*, + int*,const std::complex*,int*,const std::complex*, + std::complex*,int*); +extern "C" void zher2k_(char*,char*,int*,int*,const std::complex*,const std::complex*, + int*,const std::complex*,int*,const std::complex*, + std::complex*,int*); +// **************************************************************************** +// * TRMM +// **************************************************************************** +extern "C" void strmm_(char*,char*,char*,char*,int*,int*,const float*,const float*, + int*,float*,int*); +extern "C" void dtrmm_(char*,char*,char*,char*,int*,int*,const double*,const double*, + int*,double*,int*); +extern "C" void ctrmm_(char*,char*,char*,char*,int*,int*,const std::complex*, + const std::complex*,int*,std::complex*,int*); +extern "C" void ztrmm_(char*,char*,char*,char*,int*,int*,const std::complex*, + const std::complex*,int*,std::complex*,int*); +// **************************************************************************** +// * TRSM +// **************************************************************************** +extern "C" void strsm_(char*,char*,char*,char*,int*,int*,const float*,const float*, + int*,float*,int*); +extern "C" void dtrsm_(char*,char*,char*,char*,int*,int*,const double*,const double*, + int*,double*,int*); +extern "C" void ctrsm_(char*,char*,char*,char*,int*,int*,const std::complex*, + const std::complex*,int*,std::complex*,int*); +extern "C" void ztrsm_(char*,char*,char*,char*,int*,int*,const std::complex*, + const std::complex*,int*,std::complex*,int*); +// **************************************************************************** +// * Level 2 BLAS GEMV +// **************************************************************************** +extern "C" void sgemv_(char*,int*,int*,const float*,const float*,int*, + const float*,int*,const float*,float*,int*); +extern "C" void dgemv_(char*,int*,int*,const double*,const double*,int*, + const double*,int*,const double*,double*,int*); +extern "C" void cgemv_(char*,int*,int*,const std::complex*,const std::complex*, + int*,const std::complex*,int*,const std::complex*, + std::complex*,int*); +extern "C" void zgemv_(char*,int*,int*,const std::complex*,const std::complex*, + int*,const std::complex*,int*,const std::complex*, + std::complex*,int*); +// **************************************************************************** +// * GBMV +// **************************************************************************** +extern "C" void sgbmv_(char*,int*,int*,int*,int*,const float*,const float*,int*, + const float*,int*,const float*,float*,int*); +extern "C" void dgbmv_(char*,int*,int*,int*,int*,const double*,const double*,int*, + const double*,int*,const double*,double*,int*); +extern "C" void cgbmv_(char*,int*,int*,int*,int*,const std::complex*, + const std::complex*,int*,const std::complex*,int*, + const std::complex*,std::complex*,int*); +extern "C" void zgbmv_(char*,int*,int*,int*,int*,const std::complex*, + const std::complex*,int*,const std::complex*,int*, + const std::complex*,std::complex*,int*); + +// **************************************************************************** +// * HEMV +// **************************************************************************** +extern "C" void chemv_(char*,int*,const std::complex*,const std::complex*, + int*,const std::complex*,int*,const std::complex*, + std::complex*,int*); +extern "C" void zhemv_(char*,int*,const std::complex*,const std::complex*, + int*,const std::complex*,int*,const std::complex*, + std::complex*,int*); +// **************************************************************************** +// * HBMV +// **************************************************************************** +extern "C" void chbmv_(char*,int*,int*,const std::complex*,const std::complex*, + int*,const std::complex*,int*,const std::complex*, + std::complex*,int*); +extern "C" void zhbmv_(char*,int*,int*,const std::complex*,const std::complex*, + int*,const std::complex*,int*,const std::complex*, + std::complex*,int*); +// **************************************************************************** +// * HPMV +// **************************************************************************** +extern "C" void chpmv_(char*,int*,const std::complex*,const std::complex*, + const std::complex*,int*,const std::complex*, + std::complex*,int*); +extern "C" void zhpmv_(char*,int*,const std::complex*,const std::complex*, + const std::complex*,int*,const std::complex*, + std::complex*,int*); +// ****************************************************************************** +// * SYMV +// ****************************************************************************** +extern "C" void ssymv_(char*,int*,const float*,const float*,int*,const float*,int*,const float*, + float*,int*); +extern "C" void dsymv_(char*,int*,const double*,const double*,int*,const double*,int*, + const double*,double*,int*); +// ****************************************************************************** +// * SBMV +// ****************************************************************************** +extern "C" void ssbmv_(char*,int*,int*,const float*,const float*,int*,const float*, + int*,const float*,float*,int*); +extern "C" void dsbmv_(char*,int*,int*,const double*,const double*,int*,const double*, int*, + const double*,double*,int*); +// ****************************************************************************** +// * SPMV +// ****************************************************************************** +extern "C" void sspmv_(char*,int*,const float*,const float*,const float*,int*,const float*, + float*,int*); + extern "C" void dspmv_(char*,int*,const double*,const double*,const double*,int*,const double*, + double*,int*); +// ****************************************************************************** +// * TRMV +// ****************************************************************************** +extern "C" void strmv_(char*,char*,char*,int*,const float*,int*,float*,int*); +extern "C" void dtrmv_(char*,char*,char*,int*,const double*,int*,double*,int*); +extern "C" void ctrmv_(char*,char*,char*,int*,const std::complex*,int*, + std::complex*,int*); +extern "C" void ztrmv_(char*,char*,char*,int*,const std::complex*,int*, + std::complex*,int*); + +// ****************************************************************************** +// * TBMV +// ****************************************************************************** +extern "C" void stbmv_(char*,char*,char*,int*,int*,const float*,int*,float*,int*); +extern "C" void dtbmv_(char*,char*,char*,int*,int*,const double*,int*,double*,int*); +extern "C" void ctbmv_(char*,char*,char*,int*,int*,const std::complex*,int*, + std::complex*,int*); +extern "C" void ztbmv_(char*,char*,char*,int*,int*,const std::complex*,int*, + std::complex*,int*); +// ****************************************************************************** +// * TPMV +// ****************************************************************************** +extern "C" void stpmv_(char*,char*,char*,int*,const float*,float*,int*); +extern "C" void dtpmv_(char*,char*,char*,int*,const double*,double*,int*); +extern "C" void ctpmv_(char*,char*,char*,int*,const std::complex*, + std::complex*,int*); +extern "C" void ztpmv_(char*,char*,char*,int*,const std::complex*, + std::complex*,int*); +// ****************************************************************************** +// * TRSV +// ****************************************************************************** +extern "C" void strsv_(char*,char*,char*,int*,const float*,int*,float*,int*); +extern "C" void dtrsv_(char*,char*,char*,int*,const double*,int*,double*,int*); +extern "C" void ctrsv_(char*,char*,char*,int*,const std::complex*,int*, + std::complex*,int*); +extern "C" void ztrsv_(char*,char*,char*,int*,const std::complex*,int*, + std::complex*,int*); +// ****************************************************************************** +// * TBSV +// ****************************************************************************** +extern "C" void stbsv_(char*,char*,char*,int*,int*,const float*,int*,float*,int*); +extern "C" void dtbsv_(char*,char*,char*,int*,int*,const double*,int*,double*,int*); +extern "C" void ctbsv_(char*,char*,char*,int*,int*,const std::complex*,int*, + std::complex*,int*); +extern "C" void ztbsv_(char*,char*,char*,int*,int*,const std::complex*,int*, + std::complex*,int*); +// ****************************************************************************** +// * TPSV +// ****************************************************************************** +extern "C" void stpsv_(char*,char*,char*,int*,const float*,float*,int*); +extern "C" void dtpsv_(char*,char*,char*,int*,const double*,double*,int*); +extern "C" void ctpsv_(char*,char*,char*,int*,const std::complex*, + std::complex*,int*); +extern "C" void ztpsv_(char*,char*,char*,int*,const std::complex*, + std::complex*,int*); +// ****************************************************************************** +// * GER +// ****************************************************************************** +extern "C" void sger_(int*,int*,const float*,const float*,int*,const float*,int*, + float*,int*); +extern "C" void dger_(int*,int*,const double*,const double*,int*,const double*,int*, + double*,int*); +// ****************************************************************************** +// * GERU +// ****************************************************************************** +extern "C" void cgeru_(int*,int*,const std::complex*,const std::complex*, + int*,const std::complex*,int*,std::complex*,int*); +extern "C" void zgeru_(int*,int*,const std::complex*,const std::complex*, + int*,const std::complex*,int*,std::complex*,int*); +// ****************************************************************************** +// * GERC +// ****************************************************************************** +extern "C" void cgerc_(int*,int*,const std::complex*,const std::complex*, + int*,const std::complex*,int*,std::complex*,int*); +extern "C" void zgerc_(int*,int*,const std::complex*,const std::complex*, + int*,const std::complex*,int*,std::complex*,int*); +// ****************************************************************************** +// * HER +// ****************************************************************************** +extern "C" void cher_(char*,int*,const std::complex*,const std::complex*, + int*,std::complex*,int*); +extern "C" void zher_(char*,int*,const std::complex*,const std::complex*, + int*,std::complex*,int*); +// ****************************************************************************** +// * HPR +// ****************************************************************************** +extern "C" void chpr_(char*,int*,const std::complex*,const std::complex*, + int*,std::complex*); +extern "C" void zhpr_(char*,int*,const std::complex*,const std::complex*, + int*,std::complex*); +// ****************************************************************************** +// * HER2 +// ****************************************************************************** +extern "C" void cher2_(char*,int*,const std::complex*,const std::complex*, + int*,const std::complex*,int*,std::complex*,int*); +extern "C" void zher2_(char*,int*,const std::complex*,const std::complex*, + int*,const std::complex*,int*,std::complex*,int*); +// ****************************************************************************** +// * HPR2 +// ****************************************************************************** +extern "C" void chpr2_(char*,int*,const std::complex*,const std::complex*, + int*,const std::complex*,int*,std::complex*); +extern "C" void zhpr2_(char*,int*,const std::complex*,const std::complex*, + int*,const std::complex*,int*,std::complex*); +// ****************************************************************************** +// * SYR +// ****************************************************************************** + extern "C" void ssyr_(char*,int*,const float*,const float*,int*,float*,int*); + extern "C" void dsyr_(char*,int*,const double*,const double*,int*,double*,int*); +// ****************************************************************************** +// * SPR +// ****************************************************************************** + extern "C" void sspr_(char*,int*,const float*,const float*,int*,float*); + extern "C" void dspr_(char*,int*,const double*,const double*,int*,double*); +// ****************************************************************************** +// * SYR2 +// ****************************************************************************** + extern "C" void ssyr2_(char*,int*,const float*,const float*,int*,const float*, + int*,float*,int*); + extern "C" void dsyr2_(char*,int*,const double*,const double*,int*,const double*, + int*,double*,int*); +// ****************************************************************************** +// * SPR2 +// ****************************************************************************** + extern "C" void sspr2_(char*,int*,const float*,const float*,int*,const float*, + int*,float*); + extern "C" void dspr2_(char*,int*,const double*,const double*,int*,const double*, + int*,double*); +// ****************************************************************************** +// *Level 1 BLAS +// ****************************************************************************** + +extern "C" void srotg_(float*,float*,float*,float*); +extern "C" void drotg_(double*,double*,double*,double*); + +extern "C" void srotmg_(float*,float*,float*,float*,float*); +extern "C" void drotmg_(double*,double*,double*,double*,double*); + +extern "C" void srot_(int*,float*,int*,float*,int*,const float*,const float*); +extern "C" void drot_(int*,double*,int*,double*,int*,const double*,const double*); + +extern "C" void srotm_(int*,float*,int*,float*,int*,const float*); +extern "C" void drotm_(int*,double*,int*,double*,int*,const double*); + + extern "C" void sswap_(int*,float*,int*,float*,int*); + extern "C" void dswap_(int*,double*,int*,double*,int*); + extern "C" void cswap_(int*,std::complex*,int*,std::complex*,int*); + extern "C" void zswap_(int*,std::complex*,int*,std::complex*,int*); + + +extern "C" void saxpy_(int*,const float*,const float*,int*,float*,int*); +extern "C" void daxpy_(int*,const double*,const double*,int*,double*,int*); +extern "C" void caxpy_(int*,const std::complex*,const std::complex*,int*, + std::complex*,int*); +extern "C" void zaxpy_(int*,const std::complex*,const std::complex*,int*, + std::complex*,int*); + +extern "C" void scopy_(int*,const float*,int*,float*,int*); +extern "C" void dcopy_(int*,const double*,int*,double*,int*); +extern "C" void ccopy_(int*,const std::complex*,int*,std::complex*,int*); +extern "C" void zcopy_(int*,const std::complex*,int*,std::complex*,int*); + +extern "C" void sscal_(int*,const float*,float*,int*); +extern "C" void dscal_(int*,const double*,double*,int*); +extern "C" void cscal_(int*,const std::complex*,std::complex*,int*); +extern "C" void zscal_(int*,const std::complex*,std::complex*,int*); + +// ============================================================================ +inline void GEMM(char c1,char c2,int sX,int sY,int sZ,const float &a, + const float* x,int sx, + const float* y,int sy, + const float&b,float* z,int sz) { + sgemm_(&c1,&c2,&sX,&sY,&sZ,&a,x,&sx,y,&sy,&b,z,&sz); +} + +inline void GEMM(char c1,char c2,int sX,int sY,int sZ,const double &a, + const double* x,int sx, + const double* y,int sy, + const double&b,double* z,int sz) { + dgemm_(&c1,&c2,&sX,&sY,&sZ,&a,x,&sx,y,&sy,&b,z,&sz); +} + +inline void GEMM(char c1,char c2,int sX,int sY,int sZ,const std::complex &a, + const std::complex* x,int sx, + const std::complex* y,int sy, + const std::complex&b,std::complex* z,int sz) { + cgemm_(&c1,&c2,&sX,&sY,&sZ,&a,x,&sx,y,&sy,&b,z,&sz); +} + +inline void GEMM(char c1,char c2,int sX,int sY,int sZ,const std::complex &a, + const std::complex* x,int sx, + const std::complex* y,int sy, + const std::complex&b,std::complex* z,int sz) { + zgemm_(&c1,&c2,&sX,&sY,&sZ,&a,x,&sx,y,&sy,&b,z,&sz); +} + +// *************************************************************************** +inline void SYMM(char c1,char c2,int sX,int sY,const float &a,const float* x, + int sx,const float* y,int sy, const float &b,float* z,int sz){ + ssymm_(&c1,&c2,&sX,&sY,&a,x,&sx,y,&sy,&b,z,&sz); +} + +inline void SYMM(char c1,char c2,int sX,int sY,const double &a,const double* x, + int sx,const double* y,int sy, const double &b,double* z,int sz){ + dsymm_(&c1,&c2,&sX,&sY,&a,x,&sx,y,&sy,&b,z,&sz); +} +inline void SYMM(char c1,char c2,int sX,int sY,const std::complex &a, + const std::complex* x,int sx, + const std::complex* y,int sy, + const std::complex &b,std::complex* z,int sz){ + csymm_(&c1,&c2,&sX,&sY,&a,x,&sx,y,&sy,&b,z,&sz); +} +inline void SYMM(char c1,char c2,int sX,int sY,const std::complex &a, + const std::complex* x,int sx, + const std::complex* y,int sy, + const std::complex &b,std::complex* z,int sz){ + zsymm_(&c1,&c2,&sX,&sY,&a,x,&sx,y,&sy,&b,z,&sz); +} +// --------------------------------------------------------------------------- +inline void HEMM(char c1,char c2,int sX,int sY, const std::complex &a, + const std::complex* x,int sx, + const std::complex* y,int sy, + const std::complex &b, std::complex* z, int sz){ + chemm_(&c1,&c2,&sX,&sY,&a,x,&sx,y,&sx,&b,z,&sz); +} +inline void HEMM(char c1,char c2,int sX,int sY,const std::complex &a, + const std::complex* x,int sx, + const std::complex* y,int sy, + const std::complex &b,std::complex* z,int sz){ + zhemm_(&c1,&c2,&sX,&sY,&a,x,&sx,y,&sx,&b,z,&sz); +} +// ************************************************************************** +inline void SYRK(char UPLO,char TRANS,int N,int K,const float &ALPHA, + const float* A,int LDA,const float &BETA,float* C,int LDC){ + ssyrk_(&UPLO,&TRANS,&N,&K,&ALPHA,A,&LDA,&BETA,C,&LDC); +} +inline void SYRK(char UPLO,char TRANS,int N,int K,const double &ALPHA, + const double* A,int LDA,const double &BETA,double* C,int LDC){ + dsyrk_(&UPLO,&TRANS,&N,&K,&ALPHA,A,&LDA,&BETA,C,&LDC); +} +inline void SYRK(char UPLO,char TRANS,int N,int K,const std::complex &ALPHA, + const std::complex* A,int LDA,const std::complex &BETA, + std::complex* C,int LDC){ + csyrk_(&UPLO,&TRANS,&N,&K,&ALPHA,A,&LDA,&BETA,C,&LDC); +} +inline void SYRK(char UPLO,char TRANS,int N,int K,const std::complex &ALPHA, + const std::complex* A,int LDA,const std::complex &BETA, + std::complex* C,int LDC){ + zsyrk_(&UPLO,&TRANS,&N,&K,&ALPHA,A,&LDA,&BETA,C,&LDC); +} + +// *************************************************************************** +inline void HERK(char UPLO,char TRANS,int N,int K,const std::complex &ALPHA, + const std::complex* A,int LDA,const std::complex &BETA, + std::complex* C,int LDC){ + cherk_(&UPLO,&TRANS,&N,&K,&ALPHA,A,&LDA,&BETA,C,&LDC); +} +inline void HERK(char UPLO,char TRANS,int N,int K,const std::complex &ALPHA, + const std::complex* A,int LDA,const std::complex &BETA, + std::complex* C,int LDC){ + zherk_(&UPLO,&TRANS,&N,&K,&ALPHA,A,&LDA,&BETA,C,&LDC); +} +// *************************************************************************** +inline void SYR2K(char uplo,char trans,int n, int k,const float &alpha, + const float* A,int lda,const float* B,int ldb,const float &beta, + float* C,int ldc){ + ssyr2k_(&uplo,&trans,&n,&k,&alpha,A,&lda,B,&ldb,&beta,C,&ldc); +} +inline void SYR2K(char uplo,char trans,int n,int k,const double &alpha, + const double* A,int lda,const double* B,int ldb,const double &beta, + double* C,int ldc){ + dsyr2k_(&uplo,&trans,&n,&k,&alpha,A,&lda,B,&ldb,&beta,C,&ldc); +} +inline void SYR2k(char uplo,char trans,int n,int k,const std::complex &alpha, + const std::complex* A,int lda, + const std::complex* B,int ldb, + const std::complex &beta,std::complex* C,int ldc){ + csyr2k_(&uplo,&trans,&n,&k,&alpha,A,&lda,B,&ldb,&beta,C,&ldc); +} +inline void SYR2k(char uplo,char trans,int n,int k,const std::complex &alpha, + const std::complex* A,int lda, + const std::complex* B,int ldb, + const std::complex &beta,std::complex* C,int ldc){ + zsyr2k_(&uplo,&trans,&n,&k,&alpha,A,&lda,B,&ldb,&beta,C,&ldc); +} +// *************************************************************************** +inline void HER2k(char uplo,char trans,int n,int k,const std::complex &alpha, + const std::complex* A,int lda, + const std::complex* B,int ldb, + const std::complex &beta,std::complex* C,int ldc){ + cher2k_(&uplo,&trans,&n,&k,&alpha,A,&lda,B,&ldb,&beta,C,&ldc); +} +inline void HER2k(char uplo,char trans,int n,int k,const std::complex &alpha, + const std::complex* A,int lda, + const std::complex* B,int ldb, + const std::complex &beta,std::complex* C,int ldc){ + zher2k_(&uplo,&trans,&n,&k,&alpha,A,&lda,B,&ldb,&beta,C,&ldc); +} +// ******************************************************************************** +inline void TRMM(char side,char uplo,char transa,char diag,int m,int n,const float &alpha, + const float* A,int lda,float* B,int ldb){ + strmm_(&side,&uplo,&transa,&diag,&m,&n,&alpha,A,&lda,B,&ldb); +} +inline void TRMM(char side,char uplo,char transa,char diag,int m,int n,const double &alpha, + const double* A,int lda,double* B, int ldb){ + dtrmm_(&side,&uplo,&transa,&diag,&m,&n,&alpha,A,&lda,B,&ldb); +} +inline void TRMM(char side,char uplo,char transa,char diag,int m,int n, + const std::complex &alpha,const std::complex* A,int lda, + std::complex* B,int ldb){ + ctrmm_(&side,&uplo,&transa,&diag,&m,&n,&alpha,A,&lda,B,&ldb); +} +inline void TRMM(char side,char uplo,char transa,char diag,int m,int n, + const std::complex &alpha,const std::complex* A, int lda, + std::complex* B, int ldb){ + ztrmm_(&side,&uplo,&transa,&diag,&m,&n,&alpha,A,&lda,B,&ldb); +} +// ******************************************************************************** +inline void TRSM(char side,char uplo,char transa,char diag,int m,int n,const float &alpha, + const float* A,int lda,float* B,int ldb){ + strsm_(&side,&uplo,&transa,&diag,&m,&n,&alpha,A,&lda,B,&ldb); +} +inline void TRSM(char side,char uplo,char transa,char diag,int m,int n,const double &alpha, + const double* A,int lda,double* B, int ldb){ + dtrsm_(&side,&uplo,&transa,&diag,&m,&n,&alpha,A,&lda,B,&ldb); +} +inline void TRSM(char side,char uplo,char transa,char diag,int m,int n, + const std::complex &alpha,const std::complex* A,int lda, + std::complex* B,int ldb){ + ctrsm_(&side,&uplo,&transa,&diag,&m,&n,&alpha,A,&lda,B,&ldb); +} +inline void TRSM(char side,char uplo,char transa,char diag,int m,int n, + const std::complex &alpha,const std::complex* A, int lda, + std::complex* B, int ldb){ + ztrsm_(&side,&uplo,&transa,&diag,&m,&n,&alpha,A,&lda,B,&ldb); +} + // *************************************************************************** + +inline void GEMV(char c, int M, int N, + const float &alpha, const float *A, int ldA, + const float *x, int incX, + const float &beta, float *y, int incY) { + sgemv_(&c,&M,&N,&alpha,A,&ldA,x,&incX,&beta,y,&incY); +} +// ---------------------------------------------------------------------------- +inline void GEMV(char c, int M, int N, + const double &alpha, const double *A, int ldA, + const double *x, int incX, + const double &beta, double *y, int incY) { + dgemv_(&c,&M,&N,&alpha,A,&ldA,x,&incX,&beta,y,&incY); +} +// --------------------------------------------------------------------------- +inline void GEMV(char c, int M, int N, + const std::complex &alpha, const std::complex *A, int ldA, + const std::complex *x, int incX, + const std::complex &beta, std::complex *y, int incY) { + cgemv_(&c,&M,&N,&alpha,A,&ldA,x,&incX,&beta,y,&incY); +} +// --------------------------------------------------------------------------- +inline void GEMV(char c, int M, int N, + const std::complex &alpha, const std::complex *A, + int ldA,const std::complex *x, int incX, + const std::complex &beta, std::complex *y, int incY) { + zgemv_(&c,&M,&N,&alpha,A,&ldA,x,&incX,&beta,y,&incY); +} +// ---------------------------------------------------------------------------- +inline void GBMV(char trans,int m,int n,int kl,int ku,const float &alpha,const float *A, + int lda,const float *x,int incx,const float &beta,float *y,int incy){ + sgbmv_(&trans,&m,&n,&kl,&ku,&alpha,A,&lda,x,&incx,&beta,y,&incy); + } +inline void GBMV(char trans,int m,int n,int kl,int ku,const double &alpha,const double *A, + int lda,const double *x,int incx,const double &beta,double *y,int incy){ + dgbmv_(&trans,&m,&n,&kl,&ku,&alpha,A,&lda,x,&incx,&beta,y,&incy); +} +inline void GBMV(char trans,int m,int n,int kl,int ku,const std::complex &alpha, + const std::complex *A,int lda,const std::complex *x,int incx, + const std::complex &beta,std::complex *y,int incy){ + cgbmv_(&trans,&m,&n,&kl,&ku,&alpha,A,&lda,x,&incx,&beta,y,&incy); +} +inline void GBMV(char trans,int m,int n,int kl,int ku, const std::complex &alpha, + const std::complex *A,int lda,const std::complex *x,int incx, + const std::complex &beta,std::complex *y,int incy){ + zgbmv_(&trans,&m,&n,&kl,&ku,&alpha,A,&lda,x,&incx,&beta,y,&incy); +} +// **************************************************************************** +inline void HEMV(char uplo,int n,const std::complex &alpha,const std::complex *a, + int lda,const std::complex *x,int incx,const std::complex &beta, + std::complex *y,int incy){ + chemv_(&uplo,&n,&alpha,a,&lda,x,&incx,&beta,y,&incy); +} +inline void HEMV(char uplo,int n,const std::complex &alpha,const std::complex *a, + int lda,const std::complex *x,int incx,const std::complex &beta, + std::complex *y,int incy){ + zhemv_(&uplo,&n,&alpha,a,&lda,x,&incx,&beta,y,&incy); +} +// ************************************************************************** +inline void HBMV(char uplo,int n,int k,const std::complex &alpha, + const std::complex *a,int lda,const std::complex *x, + int incx,const std::complex &beta,std::complex *y,int incy){ + chbmv_(&uplo,&n,&k,&alpha,a,&lda,x,&incx,&beta,y,&incy); +} +inline void HBMV(char uplo,int n,int k,const std::complex &alpha, + const std::complex *a,int lda,const std::complex *x, + int incx,const std::complex &beta,std::complex *y,int incy){ + zhbmv_(&uplo,&n,&k,&alpha,a,&lda,x,&incx,&beta,y,&incy); +} +// *************************************************************************** +inline void HPMV(char uplo,int n,const std::complex &alpha,const std::complex *ap, + const std::complex *x,int incx,const std::complex &beta, + std::complex *y,int incy){ + chpmv_(&uplo,&n,&alpha,ap,x,&incx,&beta,y,&incy); +} +inline void HPMV(char uplo,int n,const std::complex &alpha,const std::complex *ap, + const std::complex *x,int incx,const std::complex &beta, + std::complex *y,int incy){ + zhpmv_(&uplo,&n,&alpha,ap,x,&incx,&beta,y,&incy); +} +// *************************************************************************** +inline void SYMV(char uplo,int n,const float &alpha,const float *a,int lda,const float *x, + int incx,const float &beta,float *y,int incy){ + ssymv_(&uplo,&n,&alpha,a,&lda,x,&incx,&beta,y,&incy); +} +inline void SYMV(char uplo,int n,const double &alpha,const double *a,int lda,const double *x, + int incx,const double &beta,double *y,int incy){ + dsymv_(&uplo,&n,&alpha,a,&lda,x,&incx,&beta,y,&incy); +} +// **************************************************************************** +inline void SBMV(char uplo,int n,int k,const float &alpha,const float *a,int lda, + const float *x,int incx,const float &beta, float *y,int incy){ + ssbmv_(&uplo,&n,&k,&alpha,a,&lda,x,&incx,&beta,y,&incy); +} +inline void SBMV(char uplo,int n,int k,const double &alpha,const double *a,int lda, + const double *x,int incx,const double &beta,double *y,int incy){ + dsbmv_(&uplo,&n,&k,&alpha,a,&lda,x,&incx,&beta,y,&incy); +} +// **************************************************************************** +inline void SPMV(char uplo,int n,const float &alpha,const float *ap,const float *x, + int incx,const float &beta,float *y,int incy){ + sspmv_(&uplo,&n,&alpha,ap,x,&incx,&beta,y,&incy); +} +inline void SPMV(char uplo,int n,const double &alpha,const double *ap,const double *x, + int incx,const double &beta,double *y,int incy){ + dspmv_(&uplo,&n,&alpha,ap,x,&incx,&beta,y,&incy); +} +// **************************************************************************** +inline void TRMV(char uplo,char trans,char diag,int n,const float *a,int lda, + float *x,int incx){ + strmv_(&uplo,&trans,&diag,&n,a,&lda,x,&incx); +} +inline void TRMV(char uplo,char trans,char diag,int n,const double *a,int lda, + double *x,int incx){ + dtrmv_(&uplo,&trans,&diag,&n,a,&lda,x,&incx); +} +inline void TRMV(char uplo,char trans,char diag,int n,const std::complex *a,int lda, + std::complex *x,int incx){ + ctrmv_(&uplo,&trans,&diag,&n,a,&lda,x,&incx); +} +inline void TRMV(char uplo,char trans,char diag,int n,const std::complex *a,int lda, + std::complex *x,int incx){ + ztrmv_(&uplo,&trans,&diag,&n,a,&lda,x,&incx); +} +// **************************************************************************** +inline void TBMV(char uplo,char trans,char diag,int n,int k,const float *a,int lda, + float *x,int incx){ + stbmv_(&uplo,&trans,&diag,&n,&k,a,&lda,x,&incx); +} +inline void TBMV(char uplo,char trans,char diag,int n,int k,const double *a,int lda, + double *x,int incx){ + dtbmv_(&uplo,&trans,&diag,&n,&k,a,&lda,x,&incx); +} +inline void TBMV(char uplo,char trans,char diag,int n,int k,const std::complex *a, + int lda,std::complex *x,int incx){ + ctbmv_(&uplo,&trans,&diag,&n,&k,a,&lda,x,&incx); +} +inline void TBMV(char uplo,char trans,char diag,int n,int k,const std::complex *a, + int lda,std::complex *x,int incx){ + ztbmv_(&uplo,&trans,&diag,&n,&k,a,&lda,x,&incx); +} +// **************************************************************************** +inline void TPMV(char uplo,char trans,char diag,int n,const float *ap,float *x,int incx){ + stpmv_(&uplo,&trans,&diag,&n,ap,x,&incx); +} +inline void TPMV(char uplo,char trans,char diag,int n,const double *ap,double *x,int incx){ + dtpmv_(&uplo,&trans,&diag,&n,ap,x,&incx); +} +inline void TPMV(char uplo,char trans,char diag,int n,const std::complex *ap, + std::complex *x,int incx){ + ctpmv_(&uplo,&trans,&diag,&n,ap,x,&incx); +} +inline void TPMV(char uplo,char trans,char diag,int n,const std::complex *ap, + std::complex *x,int incx){ + ztpmv_(&uplo,&trans,&diag,&n,ap,x,&incx); +} +// **************************************************************************** +inline void TRSV(char uplo,char trans,char diag,int n,const float *a,int lda, + float *x,int incx){ + strsv_(&uplo,&trans,&diag,&n,a,&lda,x,&incx); +} +inline void TRSV(char uplo,char trans,char diag,int n,const double *a,int lda, + double *x,int incx){ + dtrsv_(&uplo,&trans,&diag,&n,a,&lda,x,&incx); +} +inline void TRSV(char uplo,char trans,char diag,int n,const std::complex *a,int lda, + std::complex *x,int incx){ + ctrsv_(&uplo,&trans,&diag,&n,a,&lda,x,&incx); +} +inline void TRSV(char uplo,char trans,char diag,int n,const std::complex *a,int lda, + std::complex *x,int incx){ + ztrsv_(&uplo,&trans,&diag,&n,a,&lda,x,&incx); +} +// **************************************************************************** +inline void TBSV(char uplo,char trans,char diag,int n,int k,const float *a,int lda, + float *x,int incx){ + stbsv_(&uplo,&trans,&diag,&n,&k,a,&lda,x,&incx); +} +inline void TBSV(char uplo,char trans,char diag,int n,int k,const double *a,int lda, + double *x,int incx){ + dtbsv_(&uplo,&trans,&diag,&n,&k,a,&lda,x,&incx); +} +inline void TBSV(char uplo,char trans,char diag,int n,int k,const std::complex *a, + int lda,std::complex *x,int incx){ + ctbsv_(&uplo,&trans,&diag,&n,&k,a,&lda,x,&incx); +} +inline void TBSV(char uplo,char trans,char diag,int n,int k,const std::complex *a, + int lda,std::complex *x,int incx){ + ztbsv_(&uplo,&trans,&diag,&n,&k,a,&lda,x,&incx); +} +// **************************************************************************** +inline void TPSV(char uplo,char trans,char diag,int n,const float *ap,float *x,int incx){ + stpsv_(&uplo,&trans,&diag,&n,ap,x,&incx); +} +inline void TPSV(char uplo,char trans,char diag,int n,const double *ap,double *x,int incx){ + dtpsv_(&uplo,&trans,&diag,&n,ap,x,&incx); +} +inline void TPSV(char uplo,char trans,char diag,int n,const std::complex *ap, + std::complex *x,int incx){ + ctpsv_(&uplo,&trans,&diag,&n,ap,x,&incx); +} +inline void TPSV(char uplo,char trans,char diag,int n,const std::complex *ap, + std::complex *x,int incx){ + ztpsv_(&uplo,&trans,&diag,&n,ap,x,&incx); +} +// **************************************************************************** +inline void GER(int m,int n,const float &alpha,const float *x,int incx,const float *y, + int incy,float *a,int lda){ + sger_(&m,&n,&alpha,x,&incx,y,&incy,a,&lda); +} +inline void GER(int m,int n,const double &alpha,const double *x,int incx,const double *y, + int incy,double *a,int lda){ + dger_(&m,&n,&alpha,x,&incx,y,&incy,a,&lda); +} +// **************************************************************************** +inline void GERU(int m,int n,const std::complex &alpha, + const std::complex *x,int incx, + const std::complex *y,int incy, + std::complex *a,int lda){ + cgeru_(&m,&n,&alpha,x,&incx,y,&incy,a,&lda); +} +inline void GERU(int m,int n,const std::complex &alpha, + const std::complex *x,int incx, + const std::complex *y,int incy, + std::complex *a,int lda){ + zgeru_(&m,&n,&alpha,x,&incx,y,&incy,a,&lda); +} +// **************************************************************************** +inline void GERC(int m,int n,const std::complex &alpha, + const std::complex *x,int incx, + const std::complex *y,int incy, + std::complex *a,int lda){ + cgerc_(&m,&n,&alpha,x,&incx,y,&incy,a,&lda); +} +inline void GERC(int m,int n,const std::complex &alpha, + const std::complex *x,int incx, + const std::complex *y,int incy, + std::complex *a,int lda){ + zgerc_(&m,&n,&alpha,x,&incx,y,&incy,a,&lda); +} +// ***************************************************************************** +inline void HER(char uplo,int n,const std::complex &alpha, + const std::complex *x,int incx, + std::complex *a,int lda){ + cher_(&uplo,&n,&alpha,x,&incx,a,&lda); +} +inline void HER(char uplo,int n,const std::complex &alpha, + const std::complex *x,int incx, + std::complex *a,int lda){ + zher_(&uplo,&n,&alpha,x,&incx,a,&lda); +} +// ***************************************************************************** +inline void HPR(char uplo,int n,const std::complex &alpha, + const std::complex *x,int incx, + std::complex *ap){ + chpr_(&uplo,&n,&alpha,x,&incx,ap); +} +inline void HPR(char uplo,int n,const std::complex &alpha, + const std::complex *x,int incx, + std::complex *ap){ + zhpr_(&uplo,&n,&alpha,x,&incx,ap); +} +// ***************************************************************************** +inline void HER2(char uplo,int n,const std::complex &alpha, + const std::complex *x,int incx, + const std::complex *y,int incy, + std::complex *a,int lda){ + cher2_(&uplo,&n,&alpha,x,&incx,y,&incy,a,&lda); +} +inline void HER2(char uplo,int n,const std::complex &alpha, + const std::complex *x,int incx, + const std::complex *y,int incy, + std::complex *a,int lda){ + zher2_(&uplo,&n,&alpha,x,&incx,y,&incy,a,&lda); +} +// ***************************************************************************** +inline void HPR2(char uplo,int n,const std::complex &alpha, + const std::complex *x,int incx, + const std::complex *y,int incy, + std::complex *ap){ + chpr2_(&uplo,&n,&alpha,x,&incx,y,&incy,ap); +} +inline void HPR2(char uplo,int n,const std::complex &alpha, + const std::complex *x,int incx, + const std::complex *y,int incy, + std::complex *ap){ + zhpr2_(&uplo,&n,&alpha,x,&incx,y,&incy,ap); +} +// ***************************************************************************** + inline void SYR(char uplo,int n,const float &alpha,const float *x,int incx, + float *a,int lda){ + ssyr_(&uplo,&n,&alpha,x,&incx,a,&lda); + } + inline void SYR(char uplo,int n,const double &alpha,const double *x,int incx, + double*a,int lda){ + dsyr_(&uplo,&n,&alpha,x,&incx,a,&lda); + } +// **************************************************************************** + inline void SPR(char uplo,int n,const float &alpha,const float *x,int incx,float *ap){ + sspr_(&uplo,&n,&alpha,x,&incx,ap); + } + inline void SPR(char uplo,int n,const double &alpha,const double *x,int incx,double *ap){ + dspr_(&uplo,&n,&alpha,x,&incx,ap); + } +// **************************************************************************** + inline void SYR2(char uplo,int n,const float &alpha,const float *x, + int incx,const float *y,int incy,float *a,int lda){ + ssyr2_(&uplo,&n,&alpha,x,&incx,y,&incy,a,&lda); + } + inline void SYR2(char uplo,int n,const double &alpha,const double *x, + int incx,const double *y,int incy,double *a,int lda){ + dsyr2_(&uplo,&n,&alpha,x,&incx,y,&incy,a,&lda); + } +// **************************************************************************** + inline void SPR2(char uplo,int n,const float &alpha,const float *x, + int incx,const float *y,int incy,float *ap){ + sspr2_(&uplo,&n,&alpha,x,&incx,y,&incy,ap); + } + inline void SPR2(char uplo,int n,const double &alpha,const double *x, + int incx,const double *y,int incy,double *ap){ + dspr2_(&uplo,&n,&alpha,x,&incx,y,&incy,ap); + } + +// **************************************************************************** + + +inline +void AXPY(int size,const float &a,const float* x, int sx, float* y, int sy){ + saxpy_(&size,&a,x,&sx,y,&sy); +} + +inline +void AXPY(int size,const double &a,const double* x, int sx, double* y, int sy){ + daxpy_(&size,&a,x,&sx,y,&sy); +} + +inline +void AXPY(int size,const std::complex &a,const std::complex* x, int sx, + std::complex* y, int sy){ + caxpy_(&size,&a,x,&sx,y,&sy); +} + +inline +void AXPY(int size,const std::complex &a,const std::complex* x, int sx, + std::complex* y, int sy){ + zaxpy_(&size,&a,x,&sx,y,&sy); +} +// ---------------------------------------------------------------------------- +inline +void COPY(int size,const float* x,int sx,float* y,int sy) { + scopy_(&size,x,&sx,y,&sy); +} + +inline +void COPY(int size,const double* x,int sx,double* y,int sy) { + dcopy_(&size,x,&sx,y,&sy); +} + +inline +void COPY(int size,const std::complex* x,int sx,std::complex* y,int sy) { + ccopy_(&size,x,&sx,y,&sy); +} + +inline +void COPY(int size,const std::complex* x,int sx,std::complex* y,int sy) { + zcopy_(&size,x,&sx,y,&sy); +} +// ---------------------------------------------------------------------------- +inline +void SCAL(int size,const float &a,float* y,int sy) { + sscal_(&size,&a,y,&sy); +} + +inline +void SCAL(int size,const double &a,double *y,int sy) { + dscal_(&size,&a,y,&sy); +} + +inline +void SCAL(int size,const std::complex &a,std::complex* y,int sy) { + cscal_(&size,&a,y,&sy); +} + +inline +void SCAL(int size,const std::complex &a,std::complex* y,int sy) { + zscal_(&size,&a,y,&sy); +} + + +} /* namespace BLAS */ + +#endif /* PSIMAG_BLAS */ diff --git a/include/Complex.hpp b/include/Complex.hpp new file mode 100644 index 000000000..67355d1e2 --- /dev/null +++ b/include/Complex.hpp @@ -0,0 +1,8 @@ +#ifndef LSMS_COMPLEX_H +#define LSMS_COMPLEX_H + +#include +#include "Real.hpp" + +typedef std::complex Complex; +#endif diff --git a/include/LAPACK.hpp b/include/LAPACK.hpp new file mode 100755 index 000000000..9176ea20d --- /dev/null +++ b/include/LAPACK.hpp @@ -0,0 +1,62 @@ +//-*-C++-*- +// **************************************************************************** +// * C++ wrapper for BLAS * +// * * +// * Thomas Schulthess, ORNL, October 1999 * +// **************************************************************************** + +#ifndef PSIMAG_LAPACK +#define PSIMAG_LAPACK + +#include + +/** \file LAPACK + * \author Thomas C. Schulthess, MSS + */ + +/** \brief Namespace encapsulating psimag wrappers of LAPACK functions. + */ +namespace LAPACK { + +// ============================================================================ + extern "C" void sgesv_(int*,int*,float*,int*,int*,float*,int*,int*); + extern "C" void dgesv_(int*,int*,double*,int*,int*,double*,int*,int*); + extern "C" void cgesv_(int*,int*,std::complex*,int*,int*,std::complex*, + int*,int*); + extern "C" void zgesv_(int*,int*,std::complex*,int*,int*,std::complex*, + int*,int*); + + //MSS + extern "C" int dgetrf_(int* M, int* N, double* A, int* LDA, int* IPIV, int* INFO); + + extern "C" int dgetri_(int* N, double* A, int* LDA, int* IPIV, double* WORK, int* LWORK, int* INFO); + +// ============================================================================ + inline void GESV(int ma,int mb,float* a,int lda,int* pivot, + float* b,int ldb,int& info) { + sgesv_(&ma,&mb,a,&lda,pivot,b,&ldb,&info); + } + inline void GESV(int ma,int mb,double* a,int lda,int* pivot, + double* b,int ldb,int& info) { + dgesv_(&ma,&mb,a,&lda,pivot,b,&ldb,&info); + } + inline void GESV(int ma,int mb,std::complex* a,int lda,int* pivot, + std::complex* b,int ldb,int& info) { + cgesv_(&ma,&mb,a,&lda,pivot,b,&ldb,&info); + } + inline void GESV(int ma,int mb,std::complex* a,int lda,int* pivot, + std::complex* b,int ldb,int& info) { + zgesv_(&ma,&mb,a,&lda,pivot,b,&ldb,&info); + } + + inline void DGETRF(int ma, int na, double* a, int lda, int* pivot, int& info) { + dgetrf_(&ma,&na,a,&lda,pivot,&info); + } + + inline void DGETRI(int na, double* a, int lda, int* pivot, double* work, int lwork, int& info) { + dgetri_(&na,a,&lda,pivot,work,&lwork,&info); + } + +} /* namespace LAPACK */ + +#endif // PSIMAG_LAPACK_H diff --git a/include/Matrix.hpp b/include/Matrix.hpp new file mode 100755 index 000000000..c93ac9e4b --- /dev/null +++ b/include/Matrix.hpp @@ -0,0 +1,285 @@ +// \section{Matrix Class} +// We use an addapted version of the Matrix class from {\tt psimag}. +// The memory layout of this matrix class is designed to be the same in {\bf Fortran}. + +#ifndef LSMS_MATRIX_H +#define LSMS_MATRIX_H + +#include +#include +#include +#include +#include +#include +#include +#include +// #include "PSIMAGAssert.h" + +#ifdef BUILDKKRMATRIX_GPU +#include +#endif + + template + class Matrix { + public: + typedef Matrix ThisType; + typedef size_t size_type; + typedef T value_type; + typedef T* iterator; + typedef const T* const_iterator; + typedef T& reference; + typedef const T& const_reference; + + // The basic constructor builds an empty matrix, that needs to be resized before use. + Matrix() : nRow(0), nCol(0), lDim(0), owner(true), data(0), physicalSize(0) {;} + + // We also can construct a matrix with |nRows| rows and |nCols| the leading dimension |ldim| defaults to |nRows|, but can be set to any larger value to get the desired memory alignement. + Matrix(size_type nRows,size_type nCols,size_type ldim=0,const T& val=T()) { + if(ldim & mat) + : nRow(mat.nRow), nCol(mat.nCol), lDim(mat.nRow),owner(true) { + if(bool(nRow*nCol)) { + owner=true; + physicalSize=lDim*nCol; + data = new T[physicalSize]; + memcpy(data,mat.data,sizeof(T)*physicalSize); + } + else { nRow=0; nCol=0; lDim=0; owner=true; data=0; physicalSize=0;} + } + + // ; + void resize(size_type m,size_type n,size_type ldim=0) { + if(ldimphysicalSize)){std::logic_error("matrix not locally owned in T& Matrix::resize");} + if(ldim*n <= physicalSize) { + if(bool(ldim*n) && data) { + nCol = n; nRow = m; lDim = ldim; + } + else { + nRow=0; nCol=0; lDim=0; if(owner) {delete [] data; data=0; physicalSize=0;} + } + } + else { + if(owner && data) delete [] data; + nCol = n; nRow = m; lDim = ldim; owner=true; + physicalSize=lDim*nCol; + data = new T[physicalSize]; + } + } + + void retarget(size_type nRows, size_type nCols, T* dat, size_type ldim=0) { + if(owner && data) delete [] data; + data=dat; + if(ldim; + // Finaly we need a destructor to free the memory allocated by the matrix. + ~Matrix() { + if(owner && data) delete [] data; + } + + // ; + // We provide two methods to access the lements of a matrix. The most natural one uses |operator()| with row and collumn arguments and looks simimar to a matrix access in {\bf Fortran}. + inline T& operator() (size_type i, size_type j) { + // ASSERT(i=n_row in T& Matrix::operator()(size_type i,size_type j")); + // ASSERT(j=n_col in T& Matrix::operator()(size_type i,size_type j")); + return data[j*lDim+i]; + } + + // The second way to access the elements of a matrix uses the familair C |[]| operator and vies the |data| array as a continous block of memory. + inline T& operator[](size_type i) { + return data[i]; + } + + // We provide a few functions to return information about the matrix. + size_type size() const { return lDim*nCol; } + size_type n_row() const { return nRow; } + size_type n_col() const { return nCol; } + size_type l_dim() const { return lDim; } + + // \subsection{Operations on Matrices} + + // Assignments and copy: + Matrix &operator=(const Matrix& mat) + { + if (this == &mat) return *this; // Gracefully handle self assignment[12.1] + if(owner && data) delete [] data; + nRow=mat.n_row(), nCol=mat.n_col(), lDim=mat.n_row(),owner=true; + if(bool(nRow*nCol)) { + physicalSize=lDim*nCol; + data=new T[physicalSize]; + if(mat.lDim==lDim) + memcpy(data,mat.data,sizeof(T)*nCol*lDim); + else + for(size_type j=0;j& A) { + if(A.l_dim()==lDim && A.n_col()==nCol) { + for(size_t i=0; i::copy"); + } + +/* + bool operator==(const Matrix&a) + { + bool r=true; + if(a.n_row()!=nRow || a.n_col()!=nCol) return false; + for(size_t i=0; i&a) + { + return !(*this==a); + } +*/ + + inline + ThisType& operator = (const T& val) + { + for(size_type i=0;i &A) { + if(A.l_dim()==lDim && A.n_col()==nCol) { + for(size_t i=0; i::add"); + } + + void addScaled(Matrix &A, T a) { + if(A.l_dim()==lDim && A.n_col()==nCol) { + for(size_t i=0; i::addScaled"); + } + + void pinMemory() { +#ifdef BUILDKKRMATRIX_GPU + cudaHostRegister(data,physicalSize*sizeof(T),0); +#endif + } + + void unpinMemory() { +#ifdef BUILDKKRMATRIX_GPU + cudaHostUnregister(data); +#endif + } + + private: + size_type nRow,nCol,lDim, physicalSize; + bool owner; + T* data; + // T** col; + }; + + // \subsection{Matrix functions} + // Here we use the {\tt BLAS} and {\tt LAPACK} interfaces from PsiMag. + +#include "BLAS.hpp" +#include "LAPACK.hpp" + +// Matrix multiplication. Here we use the {\tt BLAS} |xGEMM| interface. The operation performed is +// $$ C \leftarrow \alpha AB + \beta C$$ + +template +void gemm(const Matrix& A, const Matrix& B, Matrix& C, + const T& alpha=1, const T& beta=0, char opA = 'N', char opB = 'N') +{ + // ASSERT(A.n_row() == C.n_row(), + // std::range_error("A.n_row() != C.n_row() in GEMM for Matrix")); + // ASSERT(A.n_col() == C.n_col(), + // std::range_error("A.n_col() != C.n_col() in GEMM for Matrix")); + // ASSERT(A.n_col() == B.n_row(), + // std::range_error("A.n_col() != B.n_row() in GEMM for Matrix")); + BLAS::GEMM(char(opA), + char(opB), + static_cast(A.n_row()), + static_cast(B.n_col()), + static_cast(A.n_col()), + alpha, + &A(0,0), + static_cast(A.l_dim()), + &B(0,0), + static_cast(B.l_dim()), + beta, + &C(0,0), + static_cast(C.l_dim())); +} + +#endif diff --git a/include/PhysicalConstants.hpp b/include/PhysicalConstants.hpp new file mode 100644 index 000000000..9f1904608 --- /dev/null +++ b/include/PhysicalConstants.hpp @@ -0,0 +1,7 @@ +#ifndef LSMS_PHYSICALCONSTANTS_H +#define LSMS_PHYSICALCONSTANTS_H + +const double cphot=274.072; +const double c2inv=1.0/(cphot*cphot); + +#endif diff --git a/include/Real.hpp b/include/Real.hpp new file mode 100644 index 000000000..643e907d8 --- /dev/null +++ b/include/Real.hpp @@ -0,0 +1,54 @@ +#ifndef LSMS_REAL_H +#define LSMS_REAL_H + +#include +#include + +typedef double Real; + +#include "TypeTraits.hpp" + +#ifndef __CUDACC__ +#include + + +template<> +class TypeTraits +{ +// static hid_t hdf5_type; +public: + inline static MPI_Datatype mpiType(void) {return MPI_DOUBLE;} +// inline static hid_t hdf5Type(void) { return hdf5_type;} + inline static hid_t hdf5Type(void) { return H5T_NATIVE_DOUBLE;} +}; +// hid_t TypeTraits::hdf5_type = H5Tcopy(H5T_NATIVE_DOUBLE); + +template<> +class TypeTraits +{ +// static hid_t hdf5_type; +public: + inline static MPI_Datatype mpiType(void) {return MPI_INT;} + inline static hid_t hdf5Type(void) { return H5T_NATIVE_INT;} +}; +// hid_t TypeTraits::hdf5_type = H5Tcopy(H5T_NATIVE_INT); + +template<> +class TypeTraits +{ +// static hid_t hdf5_type; +public: + inline static MPI_Datatype mpiType(void) {return MPI_CHAR;} + inline static hid_t hdf5Type(void) { return H5T_NATIVE_CHAR;} +}; +// hid_t TypeTraits::hdf5_type = H5Tcopy(H5T_NATIVE_CHAR); + +#endif + +#endif + + +#ifndef M_PI +#define M_PI 3.14159265358979323846264338327950288419716939937510 +#endif + diff --git a/include/TypeTraits.hpp b/include/TypeTraits.hpp new file mode 100644 index 000000000..702fdf9a9 --- /dev/null +++ b/include/TypeTraits.hpp @@ -0,0 +1,7 @@ +#ifndef LSMS_TYPE_TRAITS_H +#define LSMS_TYPE_TRAITS_H + +template +class TypeTraits; + +#endif diff --git a/include/lapack.h b/include/lapack.h new file mode 100644 index 000000000..0efdd73af --- /dev/null +++ b/include/lapack.h @@ -0,0 +1,14 @@ +#ifndef LSMS_LAPACK_H +#define LSMS_LAPACK_H + +#include "Complex.hpp" + +extern "C" +{ + void zgetrf_(int *m,int *n, Complex *a, int *lda, int*ipvt,int *info); + void zgetri_(int *n, Complex *a, int *lda,int *ipvt, Complex *w, int *lw, + int *info); + double zlange_(char *c,int *m, int *n, Complex *a, int *lda, double*work); +} + +#endif diff --git a/latex/Makefile b/latex/Makefile new file mode 100644 index 000000000..8b7c89a1b --- /dev/null +++ b/latex/Makefile @@ -0,0 +1,19 @@ +all: clean refman.pdf + +pdf: refman.pdf + +refman.pdf: refman.tex + pdflatex refman.tex + makeindex refman.idx + pdflatex refman.tex + latex_count=5 ; \ + while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\ + do \ + echo "Rerunning latex...." ;\ + pdflatex refman.tex ;\ + latex_count=`expr $$latex_count - 1` ;\ + done + + +clean: + rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out refman.pdf diff --git a/latex/doxygen.sty b/latex/doxygen.sty new file mode 100644 index 000000000..330af9bf8 --- /dev/null +++ b/latex/doxygen.sty @@ -0,0 +1,350 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{doxygen} + +% Packages used by this style file +\RequirePackage{alltt} +\RequirePackage{array} +\RequirePackage{calc} +\RequirePackage{color} +\RequirePackage{fancyhdr} +\RequirePackage{verbatim} + +% Setup fancy headings +\pagestyle{fancyplain} +\newcommand{\clearemptydoublepage}{% + \newpage{\pagestyle{empty}\cleardoublepage}% +} +\renewcommand{\chaptermark}[1]{% + \markboth{#1}{}% +} +\renewcommand{\sectionmark}[1]{% + \markright{\thesection\ #1}% +} +\lhead[\fancyplain{}{\bfseries\thepage}]{% + \fancyplain{}{\bfseries\rightmark}% +} +\rhead[\fancyplain{}{\bfseries\leftmark}]{% + \fancyplain{}{\bfseries\thepage}% +} +\rfoot[\fancyplain{}{\bfseries\scriptsize% + Generated on Tue Nov 9 14:06:51 2010 for LSMS\_\-3 by Doxygen }]{} +\lfoot[]{\fancyplain{}{\bfseries\scriptsize% + Generated on Tue Nov 9 14:06:51 2010 for LSMS\_\-3 by Doxygen }} +\cfoot{} + +%---------- Internal commands used in this style file ---------------- + +% Generic environment used by all paragraph-based environments defined +% below. Note that the command \title{...} needs to be defined inside +% those environments! +\newenvironment{DoxyDesc}[1]{% + \begin{list}{}% + {% + \settowidth{\labelwidth}{40pt}% + \setlength{\leftmargin}{\labelwidth}% + \setlength{\parsep}{0pt}% + \setlength{\itemsep}{-4pt}% + \renewcommand{\makelabel}{\entrylabel}% + }% + \item[#1]% +}{% + \end{list}% +} + +%---------- Commands used by doxygen LaTeX output generator ---------- + +% Used by
 ... 
+\newenvironment{DoxyPre}{% + \small% + \begin{alltt}% +}{% + \end{alltt}% + \normalsize% +} + +% Used by @code ... @endcode +\newenvironment{DoxyCode}{% + \footnotesize% + \verbatim% +}{% + \endverbatim% + \normalsize% +} + +% Used by @example, @include, @includelineno and @dontinclude +\newenvironment{DoxyCodeInclude}{% + \DoxyCode% +}{% + \endDoxyCode% +} + +% Used by @verbatim ... @endverbatim +\newenvironment{DoxyVerb}{% + \footnotesize% + \verbatim% +}{% + \endverbatim% + \normalsize% +} + +% Used by @verbinclude +\newenvironment{DoxyVerbInclude}{% + \DoxyVerb% +}{% + \endDoxyVerb% +} + +% Used by numbered lists (using '-#' or
    ...
) +\newenvironment{DoxyEnumerate}{% + \enumerate% +}{% + \endenumerate% +} + +% Used by bullet lists (using '-', @li, @arg, or
    ...
) +\newenvironment{DoxyItemize}{% + \itemize% +}{% + \enditemize% +} + +% Used by description lists (using
...
) +\newenvironment{DoxyDescription}{% + \description% +}{% + \enddescription% +} + +% Used by @image, @dotfile, and @dot ... @enddot +% (only if caption is specified) +\newenvironment{DoxyImage}{% + \begin{figure}[H]% + \begin{center}% +}{% + \end{center}% + \end{figure}% +} + +% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc +% (only if no caption is specified) +\newenvironment{DoxyImageNoCaption}{% +}{% +} + +% Used by @attention +\newenvironment{DoxyAttention}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @author and @authors +\newenvironment{DoxyAuthor}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @date +\newenvironment{DoxyDate}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @invariant +\newenvironment{DoxyInvariant}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @note +\newenvironment{DoxyNote}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @post +\newenvironment{DoxyPostcond}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @pre +\newenvironment{DoxyPrecond}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @remark +\newenvironment{DoxyRemark}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @return +\newenvironment{DoxyReturn}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @since +\newenvironment{DoxySince}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @see +\newenvironment{DoxySeeAlso}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @version +\newenvironment{DoxyVersion}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @warning +\newenvironment{DoxyWarning}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @internal +\newenvironment{DoxyInternal}[1]{% + \paragraph*{#1}% +}{% +} + +% Used by @par and @paragraph +\newenvironment{DoxyParagraph}[1]{% + \begin{list}{}% + {% + \settowidth{\labelwidth}{40pt}% + \setlength{\leftmargin}{\labelwidth}% + \setlength{\parsep}{0pt}% + \setlength{\itemsep}{-4pt}% + \renewcommand{\makelabel}{\entrylabel}% + }% + \item[#1]% +}{% + \end{list}% +} + +% Used by parameter lists +\newenvironment{DoxyParams}[1]{% + \begin{DoxyDesc}{#1}% + \begin{description}% +}{% + \end{description}% + \end{DoxyDesc}% +} + +% Used by return value lists +\newenvironment{DoxyRetVals}[1]{% + \begin{DoxyDesc}{#1}% + \begin{description}% +}{% + \end{description}% + \end{DoxyDesc}% +} + +% Used by exception lists +\newenvironment{DoxyExceptions}[1]{% + \begin{DoxyDesc}{#1}% + \begin{description}% +}{% + \end{description}% + \end{DoxyDesc}% +} + +% Used by template parameter lists +\newenvironment{DoxyTemplParams}[1]{% + \begin{DoxyDesc}{#1}% + \begin{description}% +}{% + \end{description}% + \end{DoxyDesc}% +} + +\newcommand{\doxyref}[3]{\textbf{#1} (\textnormal{#2}\,\pageref{#3})} +\newenvironment{DoxyCompactList} +{\begin{list}{}{ + \setlength{\leftmargin}{0.5cm} + \setlength{\itemsep}{0pt} + \setlength{\parsep}{0pt} + \setlength{\topsep}{0pt} + \renewcommand{\makelabel}{\hfill}}} +{\end{list}} +\newenvironment{DoxyCompactItemize} +{ + \begin{itemize} + \setlength{\itemsep}{-3pt} + \setlength{\parsep}{0pt} + \setlength{\topsep}{0pt} + \setlength{\partopsep}{0pt} +} +{\end{itemize}} +\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp} +\newlength{\tmplength} +\newenvironment{TabularC}[1] +{ +\setlength{\tmplength} + {\linewidth/(#1)-\tabcolsep*2-\arrayrulewidth*(#1+1)/(#1)} + \par\begin{tabular*}{\linewidth} + {*{#1}{|>{\PBS\raggedright\hspace{0pt}}p{\the\tmplength}}|} +} +{\end{tabular*}\par} +\newcommand{\entrylabel}[1]{ + {\parbox[b]{\labelwidth-4pt}{\makebox[0pt][l]{\textbf{#1}}\vspace{1.5\baselineskip}}}} +\newenvironment{Desc} +{\begin{list}{} + { + \settowidth{\labelwidth}{40pt} + \setlength{\leftmargin}{\labelwidth} + \setlength{\parsep}{0pt} + \setlength{\itemsep}{-4pt} + \renewcommand{\makelabel}{\entrylabel} + } +} +{\end{list}} +\newenvironment{Indent} + {\begin{list}{}{\setlength{\leftmargin}{0.5cm}} + \item[]\ignorespaces} + {\unskip\end{list}} +\setlength{\parindent}{0cm} +\setlength{\parskip}{0.2cm} +\addtocounter{secnumdepth}{1} +\sloppy +\usepackage[T1]{fontenc} +\makeatletter +\renewcommand{\paragraph}{\@startsection{paragraph}{4}{0ex}% + {-3.25ex plus -1ex minus -0.2ex}% + {1.5ex plus 0.2ex}% + {\normalfont\normalsize\bfseries}} +\makeatother +\stepcounter{secnumdepth} +\stepcounter{tocdepth} +\definecolor{comment}{rgb}{0.5,0.0,0.0} +\definecolor{keyword}{rgb}{0.0,0.5,0.0} +\definecolor{keywordtype}{rgb}{0.38,0.25,0.125} +\definecolor{keywordflow}{rgb}{0.88,0.5,0.0} +\definecolor{preprocessor}{rgb}{0.5,0.38,0.125} +\definecolor{stringliteral}{rgb}{0.0,0.125,0.25} +\definecolor{charliteral}{rgb}{0.0,0.5,0.5} +\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0} +\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43} +\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0} +\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0} diff --git a/latex/refman.tex b/latex/refman.tex new file mode 100644 index 000000000..4c7548fc5 --- /dev/null +++ b/latex/refman.tex @@ -0,0 +1,53 @@ +\documentclass[letterpaper]{book} +\usepackage{makeidx} +\usepackage{graphicx} +\usepackage{multicol} +\usepackage{float} +\usepackage{listings} +\usepackage{color} +\usepackage{textcomp} +\usepackage{alltt} +\usepackage{times} +\usepackage{ifpdf} +\ifpdf +\usepackage[pdftex, + pagebackref=true, + colorlinks=true, + linkcolor=blue, + unicode + ]{hyperref} +\else +\usepackage[ps2pdf, + pagebackref=true, + colorlinks=true, + linkcolor=blue, + unicode + ]{hyperref} +\usepackage{pspicture} +\fi +\usepackage[utf8]{inputenc} +\usepackage{doxygen} +\lstset{language=C++,inputencoding=utf8,basicstyle=\footnotesize,breaklines=true,breakatwhitespace=true,tabsize=8,numbers=left } +\makeindex +\setcounter{tocdepth}{3} +\renewcommand{\footrulewidth}{0.4pt} +\begin{document} +\hypersetup{pageanchor=false} +\begin{titlepage} +\vspace*{7cm} +\begin{center} +{\Large LSMS\_\-3 }\\ +\vspace*{1cm} +{\large Generated by Doxygen 1.6.3}\\ +\vspace*{0.5cm} +{\small Tue Nov 9 14:06:51 2010}\\ +\end{center} +\end{titlepage} +\clearemptydoublepage +\pagenumbering{roman} +\tableofcontents +\clearemptydoublepage +\pagenumbering{arabic} +\hypersetup{pageanchor=true} +\printindex +\end{document} diff --git a/lib/Makefile b/lib/Makefile new file mode 100644 index 000000000..e0616326d --- /dev/null +++ b/lib/Makefile @@ -0,0 +1,4 @@ +all: + +clean: + rm -f *.a diff --git a/libxc-2.2.0/AUTHORS b/libxc-2.2.0/AUTHORS new file mode 100644 index 000000000..40c4b9b17 --- /dev/null +++ b/libxc-2.2.0/AUTHORS @@ -0,0 +1,12 @@ +The main developing authors of this program consists of + + * Miguel A. L. Marques (marques@tddft.org) + * Micael Oliveira + * Tobias Burnus + +Other contributors are: + + * Georg Madsen (XC_GGA_X_PBEA) + * Xavier Andrade + * David Strubbe + * Susi Lehtola diff --git a/libxc-2.2.0/COPYING b/libxc-2.2.0/COPYING new file mode 100644 index 000000000..fc8a5de7e --- /dev/null +++ b/libxc-2.2.0/COPYING @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/libxc-2.2.0/ChangeLog b/libxc-2.2.0/ChangeLog new file mode 100644 index 000000000..65a5b440b --- /dev/null +++ b/libxc-2.2.0/ChangeLog @@ -0,0 +1,6485 @@ +2014-03-21 11:30 micael + + * [r11913] src/Makefile.am: * Bug fix: libxc soname was not set in + trunk nor in the 2.2.x branch. + +2014-03-21 10:31 micael + + * [r11910] Makefile.am: * Removed the automatic Libxc Changelog + update when creating the tarball. + +2014-03-21 09:40 micael + + * [r11909] testsuite/Makefile.am: * The contents of the + testsuite/inputs directory was missing from the distribution. + +2014-03-21 09:12 micael + + * [r11908] AUTHORS: * Updated Libxc AUTHORS file. + +2014-03-20 13:02 micael + + * [r11901] src/Makefile.am, src/integrate.c, src/libxc_master.F90, + src/mgga_x_2d_prhg07.c, src/mgga_x_br89.c, src/xc_s.h: Backport + of 11896 to branches/libxc-2.2.x: + ------------------------------------------------------------------------ + r11896 | lehtola | 2014-03-20 10:52:45 +0100 (Thu, 20 Mar 2014) | + 1 line + + Fix single precision preprocessor directives. #if clauses + shouldn't be used as the macro is not defined in double precision + mode. + ------------------------------------------------------------------------ + +2014-03-20 12:51 micael + + * [r11900] src/Makefile.am: Backport of 11898 to + branches/libxc-2.2.x: + ------------------------------------------------------------------------ + r11898 | lehtola | 2014-03-20 11:10:23 +0100 (Thu, 20 Mar 2014) | + 1 line + + This should fix the SMP build error. + ------------------------------------------------------------------------ + +2014-03-19 15:07 micael + + * [r11895] ., ChangeLog, configure.ac: * Created libxc 2.2.x + branch. + +2014-03-11 19:56 lehtola + + * [r11866] testsuite/xc-regression.c: Fix icc warning caused by + freeing uninitialized variable. + +2014-03-11 19:32 dstrubbe + + * [r11865] src, testsuite: svn:ignore properties for new libxc + executables. + +2014-03-04 08:52 lehtola + + * [r11859] src/gga_x_wpbeh.c, src/xc_config.h, src/xc_unconfig.h: + Macroize call to erfc in gga_x_wpbeh. + +2014-03-01 13:22 lehtola + + * [r11849] testsuite/xc-regression.c: Use similar output precision + to numerical precision in xc-regression. + +2014-03-01 11:47 lehtola + + * [r11848] testsuite/regression/lda_x.pol.bz2, + testsuite/regression/lda_x.unpol.bz2: Add lda reference files to + avoid compile errors. + +2014-03-01 10:46 lehtola + + * [r11847] testsuite/Makefile.am, testsuite/input, + testsuite/input/BrOH, testsuite/input/BrOH+, testsuite/input/H, + testsuite/input/Li, testsuite/input/README, testsuite/xc-error.c, + testsuite/xc-regression.c, testsuite/xc-reset-regression, + testsuite/xc-run_testsuite: Rewritten test routines. Still need + updated reference data. Reasonable tolerances should be also + determined. + +2014-03-01 10:44 lehtola + + * [r11846] TODO: Add MCY functionals to TODO. + +2014-02-28 23:32 lehtola + + * [r11845] src/expint_e1.c: Use double precision if necessary in + expint_e1. + +2014-02-28 23:20 lehtola + + * [r11844] src/xc_config.h: Fix bug in xc_config.h + +2014-02-27 13:35 lehtola + + * [r11838] src/gga_x_b86_mgc.c, src/gga_x_pbe.c: Remove one unused + variable and fix initialization of PBEmol exchange. + +2014-02-27 08:47 lehtola + + * [r11837] src/util.h: Forgot to modify function declarations for + Bessel functions. + +2014-02-27 08:25 lehtola + + * [r11836] src/bessel.c, src/mgga_x_br89.c: Changed some fabs() to + ABS(). + +2014-02-27 07:27 lehtola + + * [r11835] testsuite/xc-get_data.c: Added missing argument to + fprintf. + +2014-02-26 20:50 lehtola + + * [r11834] src/Makefile.am: Simplify Makefile by pulling out common + declaration per David Strubbe's proposal. + +2014-02-26 20:36 lehtola + + * [r11832] src/Makefile.am: If single precision enabled, double + precision modules still need to be installed. + +2014-02-26 20:26 lehtola + + * [r11831] src/integrate.c, src/lda_x_1d.c, src/test.c, src/util.h: + Last fixes to --enable-single. + +2014-02-26 20:19 lehtola + + * [r11830] src/bessel.c, src/expint_e1.c, src/gga_x_ityh.c, + src/gga_x_sfat.c, src/lda_x_1d.c, src/mgga_x_2d_prhg07.c, + src/test.c, src/util.c, src/util.h: More fixes to + --enable-single. + +2014-02-26 19:47 lehtola + + * [r11829] src/gga_c_ft97.c, src/hyb_mgga_xc_tpssh.c: Reduce scope + of some internal functions to fix --enable-single. + +2014-02-26 19:13 lehtola + + * [r11828] src/gga_x_am05.c, src/special_functions.c, src/util.h: + Multiple precisions of Lambert W function. + +2014-02-26 17:28 lehtola + + * [r11827] src/Makefile.am: Rewrite xc-info and libxcf90 + dependencies. + +2014-02-26 16:21 lehtola + + * [r11826] testsuite/xc-get_data.c: Add support for hybrid mgga + functionals in xc-get_data. + +2014-02-26 16:19 lehtola + + * [r11825] src/Makefile.am, src/xc-info.c: Added xc-info tool. + +2014-02-26 16:15 lehtola + + * [r11824] src/Makefile.am: Fix SMP build. + +2014-02-24 15:15 micael + + * [r11817] src/mgga_x_2d_prhg07.c: Another patch from Susi Lehtola: + mgga_x_2d_prhg07.c uses long double arithmetic, so one should use + long double functions. + +2014-02-24 15:13 micael + + * [r11816] src/gga_c_lm.c, src/gga_c_lyp.c, src/gga_c_p86.c, + src/gga_c_pbe.c, src/gga_c_pw91.c, src/gga_c_sogga11.c, + src/gga_c_tca.c, src/gga_c_wi.c, src/gga_x_2d_b88.c, + src/gga_x_b88.c, src/gga_x_bpccac.c, src/gga_x_c09x.c, + src/gga_x_ft97.c, src/gga_x_lb.c, src/gga_x_pw91.c, + src/gga_x_rpbe.c, src/gga_x_sogga11.c, src/gga_x_wc.c, + src/gga_x_wpbeh.c, src/lda_c_2d_amgb.c, src/lda_c_gombas.c, + src/lda_c_hl.c, src/lda_c_ml1.c, src/lda_c_pw.c, src/lda_c_pz.c, + src/lda_c_rc04.c, src/lda_c_rpa.c, src/lda_c_vwn.c, src/lda_x.c, + src/lda_x_1d.c, src/mgga_c_cs.c, src/mgga_x_br89.c, + src/xc_config.h, src/xc_unconfig.h: Patch from Susi Lehtola to + use correct version of several functions when SINGLE_PRECISION is + in use. + +2014-02-19 16:14 marques + + * [r11814] src/Makefile.am, src/gga_c_ft97.c, src/gga_c_q2d.c, + src/lda_c_2d_amgb.c, src/mgga_xc_otpss_d.c, src/test.c, + src/util.h, src/work_gga_c.c, src/work_lda.c, src/work_mgga_x.c: + Added the correlation part of the gga q2d. I have some doubts + about this as there is at least one clear mistake in the paper + started adding terms for kxc in the ggas. Still most of the terms + are missing. + +2014-02-19 10:13 marques + + * [r11813] src/gga_x_hjs.c, src/gga_x_wpbeh.c, src/mgga_c_pkzb.c, + src/util.h: Fixed a couple of unitialized variables found by + Jussi Lehtola + +2014-02-18 13:13 micael + + * [r11812] NEWS, PACKAGING, configure.ac: * Tagging Libxc version + 2.0.3. + +2014-02-18 12:15 marques + + * [r11811] src/Makefile.am, src/gga_x_q2d.c: Added functional + gga_x_q2d + +2014-02-17 13:17 marques + + * [r11807] src/work_mgga_c.c: Solves the bug that Susi Lehtola + reported for the c_tpss. + +2014-02-17 10:52 marques + + * [r11806] src/hyb_mgga_xc_tpssh.c, src/mgga_c_pkzb.c: Small + correction of reference + Now mgga_xc_revtpssh_init used revtpss correlation + +2014-02-17 10:19 marques + + * [r11805] src/Makefile.am, src/hyb_mgga_xc_tpssh.c: Patch from + Susi Lehtola that implements XC_HYB_MGGA_XC_REVTPSSH and + XC_HYB_MGGA_XC_TPSSH. + +2014-02-05 00:45 dstrubbe + + * [r11745] src/libxc_master.F90: The libxc fortran interface did + not provide the constant XC_FAMILY_HYB_MGGA. + +2014-01-31 08:18 marques + + * [r11694] src/gga_x_lg93.c: Bug fix: variable was not given a + value. It sj=hould be zero, so I guess that most compilers were + actually giving the right number... Thanks David ;) + +2013-12-17 14:42 marques + + * [r11592] src/gga_x_pbe.c: Added the functional GGA_X_PBE_MOL. + Patch by Susi Lehtola. + +2013-12-10 08:35 marques + + * [r11568] src/gga_x_b86.c, src/mgga_x_br89.c: Bug found by Søren + Smidstrup corrected (abs -> ABS) + +2013-11-22 12:06 marques + + * [r11542] src/hyb_gga_xc_pbeh.c: Added variant of PBE0 with + mixing=1/3 + +2013-11-09 04:25 xavier + + * [r11499] testsuite/xc-get_data.c: Converted a C++ style comment + into a C style one. + +2013-11-07 13:06 marques + + * [r11484] src/gga_c_wi.c, src/test.c, src/util.h, + src/work_gga_c.c: First attempt at Kxc for the GGA correlations. + For now, the WI functional is working. This is however a very + simple functional with most of the dependencies missing. A lot of + work is still left... + +2013-11-05 15:15 marques + + * [r11472] src/gga_x_am05.c: Bug fix. David, can you check if the + test is passed now? + +2013-10-30 15:20 marques + + * [r11433] src/gga_x_ssb_sw.c, src/gga_x_vmt.c, src/util.c, + src/util.h: SSB_SW and VMT also have Kxc. I finished all exchange + GGA for which Kxc was relatively simple to calculate. + +2013-10-30 14:41 marques + + * [r11432] src/gga_x_mpbe.c, src/gga_x_optx.c, src/gga_x_sogga11.c, + src/util.c, src/util.h: Kxc for optx, mpbe, sogga11 and variants + +2013-10-30 13:32 marques + + * [r11431] src/gga_x_dk87.c, src/gga_x_lv_rpw86.c, src/util.c, + src/util.h: Added Kxc to lv_rpw86 + added missing flags to dk87 (thanks Micael) + +2013-10-30 12:58 marques + + * [r11430] src/gga_x_herman.c, src/gga_x_lg93.c, src/util.c, + src/util.h: Added Kxc for hermand and lg93 + +2013-10-30 12:30 marques + + * [r11429] src/gga_x_dk87.c, src/util.c, src/util.h: Kxc for + DK87_R1 and DK87_R2 + +2013-10-30 12:17 marques + + * [r11428] src/gga_x_am05.c, src/gga_x_wc.c, src/util.c, + src/util.h: Added Kxc to X_AM05 + +2013-10-22 11:33 marques + + * [r11378] src/mgga_x_ms.c: Updated reference + +2013-10-18 08:14 marques + + * [r11360] src/gga_x_b86_mgc.c, src/gga_x_bpccac.c, + src/gga_x_c09x.c, src/gga_x_htbs.c, src/gga_x_wc.c, src/test.c, + src/util.c, src/util.h: KXC for C08x plus a series of bug + corrections. + +2013-10-18 07:33 marques + + * [r11359] src/gga_x_b86.c, src/gga_x_b86_mgc.c, + src/gga_x_bayesian.c, src/gga_x_bpccac.c, src/test.c, src/util.c, + src/util.h: Added Kxc to B86, B86_MGC, BAYESIAN, and BPCCAC. + +2013-10-17 11:06 marques + + * [r11351] src/work_gga_x.c: Bug fix: had some lines misplaced, so + Fxc and Kxc were badly calculated if (and only if) Vxc was not + calculated. + +2013-10-17 09:55 marques + + * [r11350] src/gga.c, src/gga_x_ak13.c, src/test.c, src/util.h, + src/work_gga_x.c: Added Kxc to AK13 + +2013-10-17 07:28 marques + + * [r11349] src/gga_x_airy.c, src/test.c, src/util.c, src/util.h: + Added Kxc to GGA_X_AIRY + +2013-10-16 14:45 marques + + * [r11342] src/work_gga_x.c: Bug fixed: a factor of 4 too much in + the calculation of Fxc + +2013-10-11 12:39 marques + + * [r11322] src/gga_x_g96.c, src/gga_x_htbs.c, src/gga_x_pw86.c, + src/gga_x_pw91.c, src/gga_x_rpbe.c: Added KXC for X_G96, X_RPBE, + X_HTBS, X_PW86, and X_PW91 + +2013-10-11 11:30 marques + + * [r11321] src/gga_x_wc.c: Added Kxc to X_WC + +2013-10-11 11:20 marques + + * [r11320] src/gga_x_pbe.c: Added Kxc to exchange PBE-like + functionals + +2013-10-11 10:01 marques + + * [r11318] src/gga_x_b88.c: Kxc for B88-like functionals + +2013-10-11 09:45 marques + + * [r11317] src/gga_x_lb.c: Sorry, made an error in the prvious + commit + +2013-10-11 09:44 marques + + * [r11316] src/gga_x_lb.c: This should fix the problem of David. + +2013-10-11 09:42 marques + + * [r11315] src/gga.c, src/gga_x_b86.c, src/test.c, src/util.c, + src/util.h, src/work_gga_x.c: We can now calculate third + derivatives for the exhange GGAs. For now only B86 works. Note + that most tests are failing at the moment. + +2013-10-10 12:03 marques + + * [r11308] TODO, src/gga.c, src/gga_c_op.c, src/gga_k_dk.c, + src/gga_k_meyer.c, src/gga_k_ol1.c, src/gga_k_ol2.c, + src/gga_k_pearson.c, src/gga_k_tflw.c, src/gga_x_2d_b86.c, + src/gga_x_2d_b86_mgc.c, src/gga_x_2d_b88.c, src/gga_x_2d_pbe.c, + src/gga_x_airy.c, src/gga_x_ak13.c, src/gga_x_am05.c, + src/gga_x_b86.c, src/gga_x_b86_mgc.c, src/gga_x_b88.c, + src/gga_x_bayesian.c, src/gga_x_bpccac.c, src/gga_x_c09x.c, + src/gga_x_dk87.c, src/gga_x_g96.c, src/gga_x_herman.c, + src/gga_x_htbs.c, src/gga_x_ityh.c, src/gga_x_lg93.c, + src/gga_x_lv_rpw86.c, src/gga_x_mpbe.c, src/gga_x_optx.c, + src/gga_x_pbe.c, src/gga_x_pbea.c, src/gga_x_pw86.c, + src/gga_x_pw91.c, src/gga_x_rpbe.c, src/gga_x_sfat.c, + src/gga_x_sogga11.c, src/gga_x_ssb_sw.c, src/gga_x_vmt.c, + src/gga_x_wc.c, src/libxc_master.F90, src/mgga_x_m05.c, + src/mgga_x_m06l.c, src/mgga_x_m08.c, src/mix_func.c, src/test.c, + src/util.h, src/work_gga_c.c, src/work_gga_x.c, src/xc.h, + src/xc_f.c, testsuite/xc-get_data.c, testsuite/xc-regression.c: + Started implementing Kxc for the GGAs + +2013-10-10 11:36 micael + + * [r11307] src/gga_k_tflw.c: Added XC_GGA_K_TFVW. + +2013-10-10 11:15 micael + + * [r11306] testsuite/atomic_densities, + testsuite/atomic_densities/H, testsuite/atomic_densities/Li: * + Added atomic densities and corresponding derivatives for H and Li + atoms. + +2013-10-09 13:10 marques + + * [r11304] src/gga_x_pbe.c: Added K_APBEINT and K_REVAPBEINT + +2013-10-09 12:32 marques + + * [r11303] src/gga_x_pbe.c: Added revAPBE for the kinetic energy + +2013-10-04 07:10 marques + + * [r11290] src/libxc_master.F90, src/xc_f.c: Changed function into + subroutine. Apparently, there is no way to keep all compilers + happy when interfacing functions between C and Fortran! + +2013-09-30 19:09 marques + + * [r11284] src/libxc_master.F90: Sorry, there was one line I forgot + to delete + +2013-09-30 18:54 marques + + * [r11283] src/libxc_master.F90: Let's see if it now compiles in + chum + +2013-09-23 09:36 micael + + * [r11280] src/libxc_master.F90, src/xc_f.c: * The C part of the + Fortran interface for the gga_ak13_get_asymptotic function was + missing. + * Made the Fortran name of the gga_ak13_get_asymptotic consistent + with the C name. + +2013-09-23 08:19 micael + + * [r11279] src/libxc_master.F90: * XC_GGA_K_ABSR1 and + XC_GGA_K_ABSR2 should also be included in the Fortran interface. + +2013-09-20 11:49 marques + + * [r11275] src/xc.h: Little think I forgot to save before + committing... + +2013-09-20 11:26 marques + + * [r11274] src/Makefile.am, src/gga_x_ak13.c, src/libxc_master.F90, + src/xc.h: Added exchange functional of Armiento and Kummel that + is becoming so popular + +2013-09-19 15:06 marques + + * [r11270] src/gga_x_ityh.c, src/gga_x_sfat.c, src/lda_x.c, + src/mgga_x_m08.c, src/util.c, src/util.h: A little cleaning: + *) now the names of the attenuation interactions are defined + *) little routine that returns the enhancement factors avoiding + duplicated code + +2013-09-19 14:13 marques + + * [r11269] src/Makefile.am, src/gga_x_sfat.c, + src/hyb_gga_xc_camy_blyp.c, src/lda_x.c, src/xc.h: Submitted + patch by Rolf Wuerdemann implementing CAMY_BLYP + +2013-09-16 12:34 marques + + * [r11261] src/gga_k_meyer.c, src/gga_k_tflw.c, src/xc.h: Changed + name of functional from gga_k_absr(1,2) to gga_k_absp(1,2) + Had forgotten factor of 8 in gga_k_meyer + +2013-09-16 12:29 marques + + * [r11260] src/Makefile.am, src/gga_k_meyer.c: Added another GGA + kinetic energy + +2013-09-16 10:31 micael + + * [r11259] src/gga_k_tflw.c: * A reference was slightly wrong. + +2013-09-13 08:56 marques + + * [r11251] src/hyb_gga_xc_pbeh.c: Added another reference to PBE0 + +2013-09-09 14:53 marques + + * [r11248] src/gga_x_n12.c: N12_SX is a hybrid GGA, not a GGA + +2013-09-09 14:05 marques + + * [r11247] TODO: Another functional for the TODO list + +2013-09-09 09:32 marques + + * [r11246] src/Makefile.am, src/gga_x_ityh.c, src/gga_x_lv_rpw86.c, + src/gga_x_pw86.c, src/util.h: Added functional gga_x_lv_rpw86 + +2013-09-04 16:39 micael + + * [r11235] TODO: Yet another set of missing functionals from libxc. + +2013-09-04 09:59 marques + + * [r11234] src/gga_x_pbe.c: Sorry, a 0 in the wrong place... don't + know how it got there ;) + +2013-09-04 09:49 marques + + * [r11233] src/gga_x_pbe.c: Corrected bug in PBEint + +2013-08-28 09:24 micael + + * [r11176] TODO: Added another missing functional to the TODO list. + +2013-08-22 08:52 micael + + * [r11156] TODO: * Added more missing functionals to the TODO file. + +2013-08-21 16:25 micael + + * [r11155] TODO: * Removed references to already implemented + functionals. + * Added several missing functionals. + +2013-08-21 10:24 marques + + * [r11154] TODO: Forgot to merge TODo + +2013-08-21 09:57 marques + + * [r11153] src/gga_x_bpccac.c, src/gga_x_pbe.c: Buf fixed: bpccac + functional should use a different version of revPBE. People + should be more original with the names of the functionals!!! + Added another revise dversion of PBE, that I called PBE_TCA + +2013-08-20 14:36 marques + + * [r11151] src/gga_x_sogga11.c: Wrong citation + +2013-08-12 13:06 marques + + * [r11105] src/gga_x_pbea.c: Bug fix: the value of alpha of + PBEalpha seems to be 0.52 and not 0.5. Strangely enough the + original routine (with alpha=0.5) had been sent to be by G. + Madsen, the author of the functional. + +2013-08-05 15:09 xavier + + * [r11066] src/Makefile.am, src/util.h, src/xc.h, src/xc_f.c, + src/xc_unconfig.h, testsuite/xc-get_data.c: Bugfix: xc.h was + defining FLOAT and other undocumented macros that + could case name clashes with user code. Now these macros are not + declared. Internal libxc code that uses them needs to include + "xc_config.h" explicitly. + +2013-08-05 15:04 marques + + * [r11065] src/gga_x_pbe.c: Added x_pbeint + +2013-08-05 14:51 marques + + * [r11064] src/gga_c_pbe.c: Added c_PBEint, c_zPBEsol, c_zPBEint + +2013-07-16 16:59 micael + + * [r11011] src/xc_f.c: * Improved the functional_get_name Fortran + interface. + +2013-07-16 16:56 micael + + * [r11010] src/lda_xc_teter93.c: Bug fix: some variable were used + before being set when calculating the second and third + derivatives with spin-polarization. + +2013-07-11 18:39 dstrubbe + + * [r10982] src/Makefile.am: I broke libxc compilation on chum + (older automake/libtool versions) with r10979, by explicitly + referring to the objects produced by libtool. Unfortunately, + their names are not always the same. Surprisingly, + libtool/automake do not seem to provide a macro or variable for + what the object names will be, so we have to extract it + ourselves. LTPREF=libxcf90_la-, or blank for older + libtool/automake versions. + + Produces these warnings on some systems. Does not seem to matter. + + src/Makefile.am:140: subst xc_f.lo,,$(firstword + $(am_libxcf90_la_OBJECTS: non-POSIX variable name + src/Makefile.am:140: (probably a GNU make extension) + +2013-07-11 16:42 dstrubbe + + * [r10979] src/Makefile.am: libxc has had occasional trouble with a + parallel build (make -j). I have tried to fix this before, but + with only partial success. I think this might be real solution. + Dependencies are in terms of the funny objects libtool makes, not + the normal .o files. Dependencies are declared on module files, + and the module files (while not having actual rules) are declared + dependent on the .lo files that will created in the same + compilation that produces the modules. It is necessary to declare + dependencies for both .lo and .o because 'make' and 'make + install' don't both necessary work with the same ones. + +2013-07-11 15:28 micael + + * [r10978] Makefile.am, build/Makefile.am, configure.ac, + m4/fc_integer.m4, m4/fcflags.m4, m4/fortran.m4, src/Makefile.am, + src/libxc_master.F90, src/string_f.h, testsuite/Makefile.am: + Corrected the FSF address in the copyright. + +2013-07-11 13:19 micael + + * [r10975] src/gga_x_kt.c, src/gga_x_ssb_sw.c, src/gga_x_vmt.c, + src/lda_c_2d_prm.c, src/mgga_c_pkzb.c, src/mgga_x_pkzb.c: * + Removed unused variables in libxc. + +2013-07-11 12:50 micael + + * [r10973] src/gga_c_am05.c, src/gga_c_ft97.c, src/gga_c_lm.c, + src/gga_c_lyp.c, src/gga_c_op.c, src/gga_c_optc.c, + src/gga_c_p86.c, src/gga_c_pbe.c, src/gga_c_pw91.c, + src/gga_c_sogga11.c, src/gga_c_tca.c, src/gga_c_wi.c, + src/gga_c_wl.c, src/gga_k_dk.c, src/gga_k_ol1.c, src/gga_k_ol2.c, + src/gga_k_pearson.c, src/gga_k_tflw.c, src/gga_x_2d_b86.c, + src/gga_x_2d_b86_mgc.c, src/gga_x_2d_b88.c, src/gga_x_2d_pbe.c, + src/gga_x_airy.c, src/gga_x_am05.c, src/gga_x_b86.c, + src/gga_x_b86_mgc.c, src/gga_x_b88.c, src/gga_x_bayesian.c, + src/gga_x_bpccac.c, src/gga_x_c09x.c, src/gga_x_dk87.c, + src/gga_x_ft97.c, src/gga_x_g96.c, src/gga_x_herman.c, + src/gga_x_hjs.c, src/gga_x_htbs.c, src/gga_x_ityh.c, + src/gga_x_kt.c, src/gga_x_lb.c, src/gga_x_lg93.c, + src/gga_x_mpbe.c, src/gga_x_n12.c, src/gga_x_optx.c, + src/gga_x_pbe.c, src/gga_x_pbea.c, src/gga_x_pw86.c, + src/gga_x_pw91.c, src/gga_x_rpbe.c, src/gga_x_sogga11.c, + src/gga_x_ssb_sw.c, src/gga_x_vmt.c, src/gga_x_wc.c, + src/gga_x_wpbeh.c, src/gga_xc_1w.c, src/gga_xc_b97.c, + src/gga_xc_edf1.c, src/gga_xc_oblyp_d.c, src/gga_xc_th.c, + src/hyb_gga_xc_b1wc.c, src/hyb_gga_xc_b3lyp.c, + src/hyb_gga_xc_b97.c, src/hyb_gga_xc_cam_b3lyp.c, + src/hyb_gga_xc_hse.c, src/hyb_gga_xc_o3lyp.c, + src/hyb_gga_xc_pbeh.c, src/hyb_mgga_xc_m05.c, src/lda_c_1d_csc.c, + src/lda_c_1d_loos.c, src/lda_c_2d_amgb.c, src/lda_c_2d_prm.c, + src/lda_c_gombas.c, src/lda_c_hl.c, src/lda_c_ml1.c, + src/lda_c_pw.c, src/lda_c_pz.c, src/lda_c_rc04.c, + src/lda_c_rpa.c, src/lda_c_vwn.c, src/lda_c_wigner.c, + src/lda_k_tf.c, src/lda_x.c, src/lda_x_1d.c, src/lda_x_2d.c, + src/lda_xc_teter93.c, src/mgga_xc_otpss_d.c: * Fixed warnings + about missing field initializers. + +2013-07-10 07:59 micael + + * [r10957] NEWS, PACKAGING, configure.ac: * Tagging version 2.0.2 + * Updated ChangeLog, NEWS, etc. + +2013-07-01 13:20 marques + + * [r10929] src/util.c: Making sure we never divide by zero. + Reported by Vittorio Zecca and David. + +2013-07-01 13:15 marques + + * [r10928] src/gga_x_c09x.c, testsuite/xc-consistency.c: *) + Corrected vug in c09x as reported by Lampros Andrinopoulos + *) Corrected bug in xc-consistency + +2013-06-26 16:46 askhl + + * [r10911] src/lda_c_2d_amgb.c: spelling + +2013-06-18 15:05 marques + + * [r10868] src/hyb_gga_xc_b3lyp.c: Added a revised B3LYP + functional. + +2013-06-17 15:05 dstrubbe + + * [r10860] configure.ac, m4/fortran.m4: Updating libxc build system + from octopus changes: + * Replaced obsolete AC_TRY_LINK_FUNC with AC_LINK_IFELSE. + * Removed AC_LANG_PREPROC(Fortran) and imported new ACX_FCCPP and + its dependency ACX_GREP_FCCPP. + Now libxc will make sure that a proper preprocessor for Fortran + is available. + +2013-06-17 05:05 dstrubbe + + * [r10859] m4/acx.m4, m4/fortran.m4: Renaming libxc m4 macro in + accordance with name change in octopus since it was copied in. + This is in preparation for merging recent changes in octopus file + to libxc. + +2013-06-13 13:46 marques + + * [r10847] src/xc.h: Sorry, small mistake in definition. + +2013-06-13 12:51 marques + + * [r10846] src/Makefile.am, src/gga_c_pbe.c, src/gga_xc_oblyp_d.c, + src/mgga_c_pkzb.c, src/mgga_x_tpss.c, src/mgga_xc_otpss_d.c, + src/xc.h: Added a few functionals: + + *) mgga_x_modtpss : tpss with optimized coefficients + *) gga_x_oblyp_d, opwlyp_d, opbe_d, tpss_d : reoptimizations by + Grimme to include dispersion terms. + +2013-05-28 14:42 marques + + * [r10735] src/Makefile.am: Next attempt at compiling in chum. But + can someone update the buggy libtool of this machine? + +2013-05-28 14:35 marques + + * [r10734] src/Makefile.am: Following's Xavier suggestion, I + changed the name of the library to libxcf90 + +2013-05-28 14:29 marques + + * [r10733] src/Makefile.am: I really hate libtools + +2013-05-28 14:18 marques + + * [r10732] src/Makefile.am: Let's see if this fixes compilation + with some slaves + +2013-05-28 13:18 marques + + * [r10730] src/Makefile.am: Following Yann's suggestion, I + separated libxc in two libraries, one containing the actual + library (libxc) and another the Fortran bindings (libxcf). + +2013-05-28 13:11 marques + + * [r10729] src/libxc_master.F90, src/xc_f.c: Patch by Yann + Pouillon: + + Please find attached a patch for LibXC 2.0.1 adding the following + Fortran + wrappers: + + * subroutine xc_f90_functional_get_name(id, name) + * integer function xc_f90_functional_get_number(name) + + that have been requested many times for various projects. In + particular, it + solves the issue of getting a functional number from the + corresponding + description string, avoiding many potential typos in input files + of Fortran + codes. + +2013-05-27 09:58 micael + + * [r10724] src/gga_x_lb.c: Reverting #10345 and #10396. + +2013-05-17 14:27 dstrubbe + + * [r10626] src/lda_c_pw.c, src/mgga_x_tpss.c: Typos in libxc. + +2013-05-17 12:48 marques + + * [r10625] src/gga_x_vmt.c: Added two version of VMT{8,4} + +2013-05-17 11:40 marques + + * [r10624] src/Makefile.am, src/gga_x_vmt.c: Added functional + gga_x_vmt + +2013-05-17 09:33 marques + + * [r10621] src/mgga_x_tpss.c: Added BLOC meta-GGA + +2013-05-13 07:31 marques + + * [r10585] src/lda_x.c: Bug found by Toon Verstraelen fixed. + +2013-04-29 16:59 dstrubbe + + * [r10468] src/Makefile.am: libxc: Fixing dependency that was + poorly written (by me) and could cause "make -j install" to fail. + +2013-04-22 15:16 umberto + + * [r10396] src/gga_x_lb.c: Profiled minimum density values for lb94 + functional. + The value previously set to 5e-13 is now 1e-14. + I haven''t checked against an extensive test set so the threshold + value may not be definitive. + +2013-04-16 10:41 umberto + + * [r10345] src/gga_x_lb.c: Fixes LB94 NaN in TD runs with adsorbing + boundaries. + +2013-03-26 09:29 marques + + * [r10289] src/gga_c_op.c: Small typo found by Xavier Gonze + +2013-02-12 13:20 marques + + * [r9960] src/Makefile.am, src/mgga_c_cc06.c, src/mgga_c_cs.c, + testsuite/regression/mgga_c_cc06.data.bz2, + testsuite/regression/mgga_c_cs.data.bz2: I had forgotten the + Colle and Salvetti functional. It is added now ;) + +2013-02-07 08:45 marques + + * [r9940] src/Makefile.am, src/mgga_x_mk00.c, src/work_mgga_x.c, + testsuite/regression/mgga_x_br89.data.bz2, + testsuite/regression/mgga_x_mk00.data.bz2, + testsuite/regression/mgga_x_mk00b.data.bz2: Added the functionals + MGGA_X_MK00 and MGGA_X_MK00B. Now we have all functionals of + molpro. + Corrected bug in the evaluation of fxc for the metaggas that + depend both in tau and nabla^2 n (only br89 up to now, actually). + +2013-02-06 14:25 marques + + * [r9938] TODO, src/Makefile.am, src/mgga_c_cc06.c, + testsuite/regression/mgga_c_cc06.data.bz2: Added functional + mgga_c_cc06 + +2013-02-05 15:53 marques + + * [r9935] src/mgga_x_m08.c, + testsuite/regression/hyb_mgga_x_m11.data.bz2, + testsuite/regression/mgga_x_m08_hx.data.bz2, + testsuite/regression/mgga_x_m08_so.data.bz2, + testsuite/regression/mgga_x_m11_l.data.bz2: Added the functionals + hyb_mgga_x_m11 and mgga_x_m11_l. I guess that most of the + functionals of Truhlar are now in. + +2013-02-05 13:34 marques + + * [r9934] src/Makefile.am, src/mgga_c_m08.c, + testsuite/regression/mgga_c_m08_hx.data.bz2, + testsuite/regression/mgga_c_m08_so.data.bz2, + testsuite/regression/mgga_c_m11.data.bz2, + testsuite/regression/mgga_c_m11_l.data.bz2, + testsuite/regression/mgga_c_mn12_l.data.bz2, + testsuite/regression/mgga_c_mn12_sx.data.bz2: Added functionals + MGGA_C_M08_HX, MGGA_C_M08_SO, MGGA_C_M11, MGGA_C_M11_L, + MGGA_C_MN12_L, and MGGA_C_MN12_SX + +2013-02-05 11:46 marques + + * [r9933] src/gga_x_n12.c, src/gga_xc_b97.c, src/mgga_x_mn12.c, + testsuite/regression/gga_c_n12.data.bz2, + testsuite/regression/gga_c_n12_sx.data.bz2, + testsuite/regression/gga_x_n12.data.bz2, + testsuite/regression/gga_x_n12_sx.data.bz2, + testsuite/regression/mgga_x_mn12_l.data.bz2, + testsuite/regression/mgga_x_mn12_sx.data.bz2: Added GGA_C_N12 and + GGA_C_N12_SX. + Corrected the spelling of Minnesota. + +2013-02-05 09:31 marques + + * [r9932] src/Makefile.am, src/gga_x_n12.c, + testsuite/regression/gga_x_n12.data.bz2, + testsuite/regression/gga_x_n12_sx.data.bz2: Added the functionals + GGA_X_N12 and GGA_X_N12_SX. Note that the library "Minnesota + Functional Module" seems to have a bug: F1 is initialized, so + Pi=acos(-F1) gets the value of Pi/2 ;((( + +2013-02-04 13:47 marques + + * [r9931] src/hyb_gga_xc_b1wc.c, + testsuite/regression/hyb_gga_xc_mpwlyp1m.data.bz2: Added + hyb_gga_xc_mpwlyp1m + +2013-02-04 13:17 marques + + * [r9930] src/gga_xc_1w.c, src/hyb_mgga_xc_m05.c, + testsuite/regression/mgga_xc_tpsslyp1w.data.bz2: Added + mgga_xc_tpsslyp1w + +2013-02-04 12:34 marques + + * [r9929] src/gga_x_pw91.c, src/hyb_mgga_xc_m05.c, + testsuite/regression/hyb_mgga_xc_pw6b95.data.bz2, + testsuite/regression/hyb_mgga_xc_pwb6k.data.bz2: Added + mgga_xc_pwb6k and mgga_xc_pw6b95 + +2013-02-04 12:16 marques + + * [r9928] src/mgga_c_bc95.c, src/xc.h: Added more flexibility to + Becke95 + +2013-02-04 11:10 marques + + * [r9927] src/gga_x_pw91.c, src/xc.h, + testsuite/regression/gga_c_vpbe.data.bz2, + testsuite/regression/gga_x_mpw91.data.bz2, + testsuite/regression/gga_xc_mpwlyp1w.data.bz2, + testsuite/regression/hyb_gga_xc_mpw1k.data.bz2, + testsuite/regression/hyb_gga_xc_mpw1pw.data.bz2, + testsuite/regression/hyb_gga_xc_mpw3lyp.data.bz2, + testsuite/regression/hyb_gga_xc_mpw3pw.data.bz2, + testsuite/regression/mgga_c_revtpss.data.bz2, + testsuite/regression/mgga_x_mn12_l.data.bz2, + testsuite/regression/mgga_x_mn12_sx.data.bz2: Made PW91 code a + bit more general. + Reset of the testsuite + +2013-02-04 09:43 marques + + * [r9926] src/Makefile.am, src/mgga_x_mn12.c: Added the functionals + MGGA_X_MN12_L and MGGA_X_MN12_SX + +2013-01-23 11:52 marques + + * [r9882] src/libxc_master.F90: Changed the name of a variable and + a comment. Thanks Fabien. + +2013-01-23 09:52 marques + + * [r9881] src/functionals.c, src/hyb_gga_xc_hse.c, + src/hyb_gga_xc_pbeh.c, src/libxc_master.F90, src/xc.h, + src/xc_f.c: Removed interface to _set_cam and _set_exx. + Added interface to set mixing of both pbe0 and hse + +2013-01-23 09:23 marques + + * [r9880] src/gga_c_pbe.c: Corrected reference. Thanks David. + +2013-01-22 13:40 marques + + * [r9879] src/mgga_c_pkzb.c, src/mgga_c_vsxc.c: Added revisedTPSS + correlation + +2013-01-22 13:20 marques + + * [r9877] testsuite/regression/gga_c_ft97.data.bz2, + testsuite/regression/gga_c_optc.data.bz2, + testsuite/regression/gga_c_vpbe.data.bz2, + testsuite/regression/gga_xc_b97.data.bz2, + testsuite/regression/gga_xc_b97_1.data.bz2, + testsuite/regression/gga_xc_b97_2.data.bz2, + testsuite/regression/gga_xc_b97_3.data.bz2, + testsuite/regression/gga_xc_b97_d.data.bz2, + testsuite/regression/gga_xc_b97_gga1.data.bz2, + testsuite/regression/gga_xc_b97_k.data.bz2, + testsuite/regression/gga_xc_hcth_120.data.bz2, + testsuite/regression/gga_xc_hcth_147.data.bz2, + testsuite/regression/gga_xc_hcth_407.data.bz2, + testsuite/regression/gga_xc_hcth_407p.data.bz2, + testsuite/regression/gga_xc_hcth_93.data.bz2, + testsuite/regression/gga_xc_hcth_a.data.bz2, + testsuite/regression/gga_xc_hcth_p14.data.bz2, + testsuite/regression/gga_xc_hcth_p76.data.bz2, + testsuite/regression/gga_xc_sb98_1a.data.bz2, + testsuite/regression/gga_xc_sb98_1b.data.bz2, + testsuite/regression/gga_xc_sb98_1c.data.bz2, + testsuite/regression/gga_xc_sb98_2a.data.bz2, + testsuite/regression/gga_xc_sb98_2b.data.bz2, + testsuite/regression/gga_xc_sb98_2c.data.bz2, + testsuite/regression/hyb_gga_xc_b97.data.bz2, + testsuite/regression/hyb_gga_xc_b97_1.data.bz2, + testsuite/regression/hyb_gga_xc_b97_2.data.bz2, + testsuite/regression/hyb_gga_xc_b97_3.data.bz2, + testsuite/regression/hyb_gga_xc_b97_k.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1a.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1b.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1c.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2a.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2b.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2c.data.bz2, + testsuite/regression/hyb_mgga_xc_b86b95.data.bz2, + testsuite/regression/hyb_mgga_xc_b88b95.data.bz2, + testsuite/regression/hyb_mgga_xc_bb1k.data.bz2, + testsuite/regression/hyb_mgga_xc_m05.data.bz2, + testsuite/regression/hyb_mgga_xc_m05_2x.data.bz2, + testsuite/regression/hyb_mgga_xc_m06.data.bz2, + testsuite/regression/hyb_mgga_xc_m06_2x.data.bz2, + testsuite/regression/hyb_mgga_xc_m06_hf.data.bz2, + testsuite/regression/hyb_mgga_xc_mpw1b95.data.bz2, + testsuite/regression/hyb_mgga_xc_mpwb1k.data.bz2, + testsuite/regression/hyb_mgga_xc_pw86b95.data.bz2, + testsuite/regression/hyb_mgga_xc_x1b95.data.bz2, + testsuite/regression/hyb_mgga_xc_xb1k.data.bz2, + testsuite/regression/mgga_c_bc95.data.bz2, + testsuite/regression/mgga_c_m05.data.bz2, + testsuite/regression/mgga_c_m05_2x.data.bz2, + testsuite/regression/mgga_c_m06.data.bz2, + testsuite/regression/mgga_c_m06_2x.data.bz2, + testsuite/regression/mgga_c_m06_hf.data.bz2, + testsuite/regression/mgga_c_m06_l.data.bz2, + testsuite/regression/mgga_c_pkzb.data.bz2, + testsuite/regression/mgga_c_tpss.data.bz2, + testsuite/regression/mgga_c_vsxc.data.bz2, + testsuite/regression/mgga_x_ms0.data.bz2, + testsuite/regression/mgga_x_ms1.data.bz2, + testsuite/regression/mgga_x_ms2.data.bz2, + testsuite/regression/mgga_x_ms2h.data.bz2: Reset of the testsuite + after all the bug corrections + +2013-01-22 13:15 marques + + * [r9876] src/gga_c_optc.c, src/gga_c_pbe.c, src/gga_x_hjs.c, + src/work_gga_x.c: Added the variant PBE (vPBE) functional. From + my tests this is virtually identical to the PBE. + +2013-01-22 12:25 marques + + * [r9875] src/functionals.c, src/libxc_master.F90, src/xc.h, + src/xc_f.c: Added interfaces to get/set hybrid and cam parameters + +2013-01-21 16:37 micael + + * [r9874] ChangeLog: * Tagging Libxc version 2.0.1. + +2013-01-21 14:40 micael + + * [r9872] src/gga_c_optc.c, src/gga_x_hjs.c: * Some NaN were still + appearing. + +2013-01-21 12:34 marques + + * [r9871] src/mgga_c_pkzb.c: Fixed NaNs in the TPSS and PKZB + +2013-01-21 12:29 marques + + * [r9870] src/gga_x_hjs.c: This fixes the NaNs that were appearing + on the HJS_B88 functional + +2013-01-21 10:23 marques + + * [r9869] src/gga_c_wl.c: No more NaN in gga_c_wl + +2013-01-21 10:11 marques + + * [r9868] src/gga_c_optc.c: No more NaNs in optc ;) + +2013-01-18 22:08 dstrubbe + + * [r9844] .: svn:ignore for new file 'test-driver' + +2013-01-18 08:59 marques + + * [r9839] src/gga_c_optc.c, src/gga_x_hjs.c, src/mgga_x_m08.c: + Small bug fixes. Micael can you check if any of the segfaults + disapears? + +2013-01-16 13:42 marques + + * [r9832] src/Makefile.am, src/gga_c_ft97.c, src/mgga_x_ms.c, + src/test.c: Added new metagga functionals: X_MS0, X_MS1, X_MS2, + and X_MS2H (a hybrid version of MS2) + +2013-01-16 09:47 marques + + * [r9831] src/mgga_c_bc95.c: Still another POLARIZED missing in a + functional that uses the stoll decomposition. + +2013-01-15 15:03 marques + + * [r9828] src/mgga_c_vsxc.c: And again the same error in vsxc + +2013-01-15 13:56 marques + + * [r9827] src/mgga_c_pkzb.c: The same kind of bug was also present + in TPSS. + +2013-01-15 12:47 marques + + * [r9825] src/xc_f.c: Added interface as noted by Fabien Tran. + +2013-01-15 12:43 marques + + * [r9824] src/gga_xc_b97.c: Let's see if this corrects the bug with + B97-like functionals + +2012-12-20 16:06 micael + + * [r9790] src/libxc_master.F90: * Added missing Fortran interface + for xc_f90_version. + +2012-12-07 01:37 dstrubbe + + * [r9743] src/Makefile.am: Adding missing dependencies: full list + of files generated by get_funcs.pl. + +2012-12-03 08:36 marques + + * [r9721] src/util.c: Missing include directive. Thanks David. + +2012-11-30 16:52 dstrubbe + + * [r9699] .: Setting svn:ignore for new file xc_version.h. + +2012-11-28 09:05 micael + + * [r9695] NEWS, PACKAGING, configure.ac: * Tagging version 2.0.0 of + Libxc. + +2012-11-26 14:06 micael + + * [r9694] m4/ac_prog_sed.m4: * The ac_prog_sed.m4 macro was not + included in libxc. + +2012-11-26 13:27 micael + + * [r9692] ChangeLog: * Update libxc ChangeLog. + +2012-11-26 13:02 micael + + * [r9690] Makefile.am, configure.ac, src/Makefile.am, + src/version.c, src/xc.h, src/xc_f.c, xc_version.h.in: * Added + function to return the version information. + * Version information is now also available in a header file. + * Set version number to 2.x + * Added proper libtool versioning. Note that this one works in a + different way than the libxc version number. + +2012-11-23 12:37 marques + + * [r9686] TODO, src/mgga_x_m05.c, src/mgga_x_m06l.c, + testsuite/regression/gga_c_ft97.data.bz2, + testsuite/regression/mgga_x_m06.data.bz2, + testsuite/regression/mgga_x_m06_2x.data.bz2, + testsuite/regression/mgga_x_m06_hf.data.bz2: Small change in the + references + +2012-11-23 12:29 marques + + * [r9685] testsuite/regression/hyb_gga_xc_td_cam_b3lyp.data.bz2, + testsuite/regression/mgga_x_m06l.data.bz2: These two functionals + had changed name + +2012-11-23 12:28 marques + + * [r9684] src/functionals.c: There were some bits missing for the + hyb_mgga family + +2012-11-23 12:28 marques + + * [r9683] testsuite/regression/gga_c_ft97.data.bz2, + testsuite/regression/gga_c_op_b88.data.bz2, + testsuite/regression/gga_c_op_g96.data.bz2, + testsuite/regression/gga_c_op_pbe.data.bz2, + testsuite/regression/gga_c_op_xalpha.data.bz2, + testsuite/regression/gga_c_spbe.data.bz2, + testsuite/regression/gga_x_bpccac.data.bz2, + testsuite/regression/gga_x_lb.data.bz2, + testsuite/regression/gga_x_lbm.data.bz2, + testsuite/regression/gga_x_mpw91.data.bz2, + testsuite/regression/gga_x_ssb.data.bz2, + testsuite/regression/gga_x_ssb_d.data.bz2, + testsuite/regression/gga_x_ssb_sw.data.bz2, + testsuite/regression/gga_xc_b97.data.bz2, + testsuite/regression/gga_xc_b97_1.data.bz2, + testsuite/regression/gga_xc_b97_2.data.bz2, + testsuite/regression/gga_xc_b97_3.data.bz2, + testsuite/regression/gga_xc_b97_d.data.bz2, + testsuite/regression/gga_xc_b97_gga1.data.bz2, + testsuite/regression/gga_xc_b97_k.data.bz2, + testsuite/regression/gga_xc_hcth_120.data.bz2, + testsuite/regression/gga_xc_hcth_147.data.bz2, + testsuite/regression/gga_xc_hcth_407.data.bz2, + testsuite/regression/gga_xc_hcth_407p.data.bz2, + testsuite/regression/gga_xc_hcth_93.data.bz2, + testsuite/regression/gga_xc_hcth_a.data.bz2, + testsuite/regression/gga_xc_hcth_p14.data.bz2, + testsuite/regression/gga_xc_hcth_p76.data.bz2, + testsuite/regression/gga_xc_kt2.data.bz2, + testsuite/regression/gga_xc_mpwlyp1w.data.bz2, + testsuite/regression/gga_xc_sb98_1a.data.bz2, + testsuite/regression/gga_xc_sb98_1b.data.bz2, + testsuite/regression/gga_xc_sb98_1c.data.bz2, + testsuite/regression/gga_xc_sb98_2a.data.bz2, + testsuite/regression/gga_xc_sb98_2b.data.bz2, + testsuite/regression/gga_xc_sb98_2c.data.bz2, + testsuite/regression/hyb_gga_xc_b3pw91.data.bz2, + testsuite/regression/hyb_gga_xc_b97.data.bz2, + testsuite/regression/hyb_gga_xc_b97_1.data.bz2, + testsuite/regression/hyb_gga_xc_b97_2.data.bz2, + testsuite/regression/hyb_gga_xc_b97_3.data.bz2, + testsuite/regression/hyb_gga_xc_b97_k.data.bz2, + testsuite/regression/hyb_gga_xc_mpw1k.data.bz2, + testsuite/regression/hyb_gga_xc_mpw1pw.data.bz2, + testsuite/regression/hyb_gga_xc_mpw3lyp.data.bz2, + testsuite/regression/hyb_gga_xc_mpw3pw.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1a.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1b.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1c.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2a.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2b.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2c.data.bz2, + testsuite/regression/hyb_gga_xc_tuned_cam_b3lyp.data.bz2, + testsuite/regression/hyb_mgga_xc_b86b95.data.bz2, + testsuite/regression/hyb_mgga_xc_b88b95.data.bz2, + testsuite/regression/hyb_mgga_xc_bb1k.data.bz2, + testsuite/regression/hyb_mgga_xc_m05.data.bz2, + testsuite/regression/hyb_mgga_xc_m05_2x.data.bz2, + testsuite/regression/hyb_mgga_xc_m06.data.bz2, + testsuite/regression/hyb_mgga_xc_m06_2x.data.bz2, + testsuite/regression/hyb_mgga_xc_m06_hf.data.bz2, + testsuite/regression/hyb_mgga_xc_mpw1b95.data.bz2, + testsuite/regression/hyb_mgga_xc_mpwb1k.data.bz2, + testsuite/regression/hyb_mgga_xc_pw86b95.data.bz2, + testsuite/regression/hyb_mgga_xc_x1b95.data.bz2, + testsuite/regression/hyb_mgga_xc_xb1k.data.bz2, + testsuite/regression/mgga_c_bc95.data.bz2, + testsuite/regression/mgga_c_m05.data.bz2, + testsuite/regression/mgga_c_m05_2x.data.bz2, + testsuite/regression/mgga_c_m06.data.bz2, + testsuite/regression/mgga_c_m06_2x.data.bz2, + testsuite/regression/mgga_c_m06_hf.data.bz2, + testsuite/regression/mgga_c_m06_l.data.bz2, + testsuite/regression/mgga_c_pkzb.data.bz2, + testsuite/regression/mgga_c_tpss.data.bz2, + testsuite/regression/mgga_c_vsxc.data.bz2, + testsuite/regression/mgga_x_2d_prhg07.data.bz2, + testsuite/regression/mgga_x_2d_prhg07_prp10.data.bz2, + testsuite/regression/mgga_x_bj06.data.bz2, + testsuite/regression/mgga_x_br89.data.bz2, + testsuite/regression/mgga_x_gvt4.data.bz2, + testsuite/regression/mgga_x_lta.data.bz2, + testsuite/regression/mgga_x_m05.data.bz2, + testsuite/regression/mgga_x_m05_2x.data.bz2, + testsuite/regression/mgga_x_m06.data.bz2, + testsuite/regression/mgga_x_m06_2x.data.bz2, + testsuite/regression/mgga_x_m06_hf.data.bz2, + testsuite/regression/mgga_x_m06_l.data.bz2, + testsuite/regression/mgga_x_m08_hx.data.bz2, + testsuite/regression/mgga_x_m08_so.data.bz2, + testsuite/regression/mgga_x_pkzb.data.bz2, + testsuite/regression/mgga_x_revtpss.data.bz2, + testsuite/regression/mgga_x_rpp09.data.bz2, + testsuite/regression/mgga_x_tau_hcth.data.bz2, + testsuite/regression/mgga_x_tb09.data.bz2, + testsuite/regression/mgga_x_tpss.data.bz2: Reset the regression + tests, and added the new functionals + +2012-11-23 12:18 marques + + * [r9682] src/hyb_mgga_xc_m05.c: Sorry, some names were wrong. + +2012-11-23 10:43 marques + + * [r9681] src/hyb_mgga_xc_m05.c: Seems that I forgot this file + +2012-11-23 10:37 marques + + * [r9680] src/Makefile.am, src/gga_x_ityh.c, src/gga_x_pw91.c, + src/gga_xc_1w.c, src/hyb_gga_xc_b1wc.c, src/hyb_gga_xc_b3lyp.c, + src/hyb_gga_xc_o3lyp.c, src/mgga_c_b95.c, src/mgga_c_bc95.c, + src/mgga_x_m05.c: Added a series of hybrid meta-ggas, namely + XC_HYB_MGGA_XC_M05, XC_HYB_MGGA_XC_M05_2X, + XC_HYB_MGGA_XC_BX88B95, XC_HYB_MGGA_XC_BX86B95, + XC_HYB_MGGA_XC_PWX86B95, XC_HYB_MGGA_XC_BB1K, + XC_HYB_MGGA_XC_MPW1B95, XC_HYB_MGGA_XC_MPWB1K, + XC_HYB_MGGA_XC_X1B95, XC_HYB_MGGA_XC_XB1K. + +2012-11-23 08:18 marques + + * [r9679] src/gga.c, src/gga_x_kt.c, src/gga_x_ssb_sw.c, + src/gga_xc_1w.c, src/gga_xc_edf1.c, src/hyb_gga_xc_b1wc.c, + src/hyb_gga_xc_b3lyp.c, src/hyb_gga_xc_b97.c, + src/hyb_gga_xc_cam_b3lyp.c, src/hyb_gga_xc_hse.c, + src/hyb_gga_xc_o3lyp.c, src/hyb_gga_xc_pbeh.c, src/mgga.c, + src/mix_func.c, src/util.c, src/util.h, src/xc.h: Added the + possibility of having MGGAs that are mixtures of other + functionals + +2012-11-22 15:23 marques + + * [r9678] src/work_mgga_x.c: Bug correction: v2rhotau and friends + should ahve 4 entries, not 3, and it is the last one that is the + down-down. + +2012-11-22 14:55 marques + + * [r9677] src/Makefile.am, src/mgga_c_b95.c: Added B95 correlation + +2012-11-22 13:22 marques + + * [r9676] src/Makefile.am, src/gga_c_ft97.c, src/mgga_c_pkzb.c, + src/mgga_c_tpss.c, src/stoll.c, src/util.h: Rewrote the TPSS + correlation. + +2012-11-21 14:21 marques + + * [r9666] src/Makefile.am, src/gga_c_pbe.c, src/mgga_c_pkzb.c, + src/stoll.c, src/util.h: Added the correlation part of PKZB + +2012-11-21 08:41 marques + + * [r9664] src/mgga_c_vsxc.c: Added the correlation part of M05 and + M05-2X. + +2012-11-20 21:42 dstrubbe + + * [r9661] testsuite/xc-consistency.c, testsuite/xc-regression.c: + Removing superfluous and redundant declarations, flagged by + ifort. + +2012-11-20 13:44 marques + + * [r9651] src/gga_xc_b97.c, src/mgga_c_vsxc.c, src/util.h: Added + the correlation part of M06, M06-L, M06-HF, and M06-2x + +2012-11-19 14:31 marques + + * [r9650] src/Makefile.am, src/gga_c_am05.c, src/gga_c_lm.c, + src/gga_c_p86.c, src/gga_c_pbe.c, src/gga_c_pw91.c, + src/gga_c_sogga11.c, src/gga_c_tca.c, src/gga_xc_b97.c, + src/lda_c_1d_csc.c, src/lda_c_1d_loos.c, src/lda_c_2d_amgb.c, + src/lda_c_2d_prm.c, src/lda_c_gombas.c, src/lda_c_hl.c, + src/lda_c_ml1.c, src/lda_c_pw.c, src/lda_c_pz.c, + src/lda_c_rc04.c, src/lda_c_rpa.c, src/lda_c_vwn.c, + src/lda_c_wigner.c, src/lda_k_tf.c, src/lda_x.c, src/lda_x_1d.c, + src/lda_x_2d.c, src/lda_xc_teter93.c, src/mgga_c_vsxc.c, + src/mgga_x_2d_prhg07.c, src/mgga_x_br89.c, src/mgga_x_gvt4.c, + src/mgga_x_lta.c, src/mgga_x_m05.c, src/mgga_x_m06l.c, + src/mgga_x_m08.c, src/mgga_x_pkzb.c, src/mgga_x_tau_hcth.c, + src/mgga_x_tpss.c, src/mgga_xc_vsxc.c, src/stoll.c, src/test.c, + src/util.h, src/work_lda.c, src/work_mgga_c.c, src/work_mgga_x.c: + Rewrote vsxc (correlation part) + +2012-11-19 09:57 marques + + * [r9649] src/Makefile.am, src/gga_xc_b97.c, src/mgga_xc_vsxc.c, + src/stoll.c, src/util.h, src/work_gga_becke.c: Rewrote becke 97 + in order to remove the ugly work_gga_becke that was only used by + one family of functionals. + +2012-11-16 14:10 marques + + * [r9645] src/gga_c_op.c: Silly mistake. + +2012-11-16 08:39 marques + + * [r9644] src/Makefile.am, src/mgga_x_m08.c: Added two M08 + variants, _HX and _SO + +2012-11-15 15:07 marques + + * [r9638] src/mgga_x_m05.c, src/mgga_x_m06l.c, src/util.h: + Reorganize the M05/06 echange functionals and added the exchange + part of m06, m06-hf, and m06-2x + +2012-11-15 13:38 marques + + * [r9637] src/mgga_xc_vsxc.c: Updated constants in vsxc by + comparison with nwchem + +2012-11-15 13:25 marques + + * [r9636] src/Makefile.am, src/mgga_x_m05.c: Added the exchange + part of M05 and M05-2X. + +2012-11-15 09:41 marques + + * [r9635] src/mgga_x_pkzb.c: Sorry the previous constant seemed to + be wrong + +2012-11-15 09:38 marques + + * [r9634] src/mgga_x_pkzb.c: Semms that g95 does not understand + what a constant expression is. + +2012-11-15 08:43 marques + + * [r9633] src/util.h: Missing declaration. Thanks David. + +2012-11-15 08:41 marques + + * [r9632] src/Makefile.am, src/mgga_x_pkzb.c, src/test.c: Added the + exchange part of the PKZB meta-GGA. As a curious notice, I do + remember trying to implement this in 2000, and giving up after + 200 or 300 lines of code because it was too complicated (and did + not give any significant difference in the potential). Today's + routine is 50 lines long and took a couple fo hours to implement. + +2012-11-14 20:16 dstrubbe + + * [r9627] src/lda_x.c: Unused variables. + +2012-11-14 14:28 marques + + * [r9624] src/Makefile.am, src/gga_c_op.c, src/gga_x_g96.c, + src/gga_x_ityh.c, src/util.h: Added a new family of functionals + (one parameter GGAs) + +2012-11-13 07:54 marques + + * [r9607] src/gga_x_lb.c: We treat LB as an exchange functional, + even if technically this is not exactly the case. + +2012-11-12 21:10 marques + + * [r9598] src/hyb_gga_xc_b3lyp.c, src/hyb_gga_xc_b97.c, src/xc.h: + Small inconsistencies found by Tiago Cerqueira. + +2012-11-12 20:23 marques + + * [r9597] src/gga_xc_b97.c, src/lda_c_vwn.c: Two bugs (one large + one small) found by David. Can you please check that your icc + does not complain now? Thanks. + +2012-11-12 14:59 marques + + * [r9596] TODO, src/Makefile.am, src/expint_e1.c, src/gga_c_ft97.c, + src/util.h, src/xc_config.h: Added the Fitalov & Thiel + correlation (GGA). + +2012-11-12 11:09 marques + + * [r9595] src/hyb_gga_xc_cam_b3lyp.c: Renamed TD_CAM_B3LYP to the + correct TUNED_CAM_B3LYP. Thanks Fabien (again). + +2012-10-26 19:31 marques + + * [r9532] src/gga_x_bpccac.c: Very silly mistake. Thanks David. + +2012-10-26 14:26 marques + + * [r9531] src/gga_x_bpccac.c, src/gga_x_pw91.c: According to nwchem + that seems to have contacted directly Carlo Adamo, there is a + small misprint in the mpw91 constants in the original paper. I am + now using the corrected constants. + +2012-10-22 15:54 marques + + * [r9516] src/mgga_x_br89.c: I forgot a couple of factors of 2 in + tb09. Thanks to Marjus Meitern for pointing it out. + +2012-09-26 14:25 marques + + * [r9471] src/gga_c_pbe.c, src/work_gga_c.c: Added functional + XC_GGA_C_SPBE + +2012-09-26 13:34 marques + + * [r9470] src/Makefile.am, src/gga_x_kt.c, src/gga_x_ssb_sw.c, + src/xc.h: Corrected bug in gga_xc_kt2 + Added functionals XC_GGA_X_SSB_SW, XC_GGA_X_SSB, and + XC_GGA_X_SSB_D + +2012-09-25 07:57 marques + + * [r9466] src/hyb_gga_xc_b3lyp.c, src/hyb_gga_xc_o3lyp.c: As I + changed the default interpolation for the VWN_RPA one does not + need to set it explicitly in the hybrids + +2012-09-25 07:56 marques + + * [r9465] testsuite/regression/gga_xc_b97_gga1.data.bz2, + testsuite/regression/gga_xc_hcth_407p.data.bz2, + testsuite/regression/gga_xc_hcth_a.data.bz2, + testsuite/regression/gga_xc_hcth_p14.data.bz2, + testsuite/regression/gga_xc_hcth_p76.data.bz2, + testsuite/regression/lda_c_vwn.data.bz2, + testsuite/regression/lda_c_vwn_1.data.bz2, + testsuite/regression/lda_c_vwn_2.data.bz2, + testsuite/regression/lda_c_vwn_3.data.bz2, + testsuite/regression/lda_c_vwn_4.data.bz2, + testsuite/regression/lda_c_vwn_rpa.data.bz2: Added tests for the + new functional from yesterday and today, and updated the VWN + tests that had changed slightly the title + +2012-09-25 07:52 marques + + * [r9464] src/gga_xc_b97.c, src/lda_c_vwn.c: Implemented all other + versions of VWN (VWN1, VWN2, VWN3, VWN4), besides the 5 and the + RPA that were already there. + +2012-09-24 12:01 marques + + * [r9462] src/gga_xc_b97.c, src/util.h, src/work_gga_becke.c: + Cleaned a bit the B97 functionals and added the functionals + HCTH_A, B97_GGA1, HCTH_P14, HCTH_P76, and HCTH_407P + +2012-09-21 09:45 marques + + * [r9459] testsuite/regression/gga_c_revtca.data.bz2, + testsuite/regression/gga_c_tca.data.bz2, + testsuite/regression/gga_x_bpccac.data.bz2, + testsuite/regression/hyb_gga_xc_mb3lyp_rc04.data.bz2, + testsuite/regression/lda_c_rc04.data.bz2, + testsuite/regression/mgga_c_tpss.data.bz2, + testsuite/regression/mgga_c_vsxc.data.bz2, + testsuite/regression/mgga_x_bj06.data.bz2, + testsuite/regression/mgga_x_br89.data.bz2, + testsuite/regression/mgga_x_m06l.data.bz2, + testsuite/regression/mgga_x_revtpss.data.bz2, + testsuite/regression/mgga_x_rpp09.data.bz2, + testsuite/regression/mgga_x_tb09.data.bz2: I reset the regression + tests. They are not very well chosen for the meta-GGAs, I have to + say... + +2012-09-21 09:42 marques + + * [r9458] src/mgga_c_tpss.c, src/mgga_x_2d_prhg07.c, + src/mgga_x_br89.c, src/mgga_x_lta.c, src/mgga_x_m06l.c, + src/mgga_x_tau_hcth.c, src/mgga_x_tpss.c, src/mgga_xc_vsxc.c, + src/test.c: Changed the definition of tau. Now tau_new = + tau_old/2 + +2012-09-21 09:03 marques + + * [r9457] src/Makefile.am, src/gga_x_bpccac.c, src/gga_x_ityh.c, + src/gga_x_pw91.c, src/util.h: Added a new functional, bpccac + +2012-09-17 09:18 marques + + * [r9434] src/Makefile.am, src/gga_c_tca.c: Added two new GGA + correlation functionals, LTA and revLTA + +2012-09-14 11:30 marques + + * [r9411] src/hyb_gga_xc_b3lyp.c: Added a b3lyp-like hybrid based + on rc04 + +2012-09-14 09:43 marques + + * [r9410] src/Makefile.am, src/lda_c_rc04.c: Added a new lda + correlation functional, Ragot-Cortona + +2012-09-08 15:37 marques + + * [r9376] src/gga_x_wc.c: This should fix the warning David was + getting. + +2012-09-07 13:40 marques + + * [r9365] src/lda_k_tf.c, src/work_gga_x.c, + testsuite/regression/gga_k_absr1.data.bz2, + testsuite/regression/gga_k_absr2.data.bz2, + testsuite/regression/gga_k_apbe.data.bz2, + testsuite/regression/gga_k_baltin.data.bz2, + testsuite/regression/gga_k_dk.data.bz2, + testsuite/regression/gga_k_ernzerhof.data.bz2, + testsuite/regression/gga_k_fr_b88.data.bz2, + testsuite/regression/gga_k_fr_pw86.data.bz2, + testsuite/regression/gga_k_ge2.data.bz2, + testsuite/regression/gga_k_golden.data.bz2, + testsuite/regression/gga_k_gp85.data.bz2, + testsuite/regression/gga_k_gr.data.bz2, + testsuite/regression/gga_k_lc94.data.bz2, + testsuite/regression/gga_k_lieb.data.bz2, + testsuite/regression/gga_k_llp.data.bz2, + testsuite/regression/gga_k_ludena.data.bz2, + testsuite/regression/gga_k_ol1.data.bz2, + testsuite/regression/gga_k_ol2.data.bz2, + testsuite/regression/gga_k_pearson.data.bz2, + testsuite/regression/gga_k_perdew.data.bz2, + testsuite/regression/gga_k_thakkar.data.bz2, + testsuite/regression/gga_k_tw1.data.bz2, + testsuite/regression/gga_k_tw2.data.bz2, + testsuite/regression/gga_k_tw3.data.bz2, + testsuite/regression/gga_k_tw4.data.bz2, + testsuite/regression/gga_k_vjks.data.bz2, + testsuite/regression/gga_k_vsk.data.bz2, + testsuite/regression/gga_k_vw.data.bz2, + testsuite/regression/gga_k_yt65.data.bz2, + testsuite/regression/lda_k_lp.data.bz2, + testsuite/regression/lda_k_tf.data.bz2: Started changing the + definition of tau in libxc. The new tau is the old tau/2, i.e. + now our tau is the correct kinetic energy density. + +2012-09-07 13:28 marques + + * [r9364] src/gga_xc_th.c, + testsuite/regression/gga_c_optc.data.bz2, + testsuite/regression/gga_k_golden.data.bz2, + testsuite/regression/gga_k_lc94.data.bz2, + testsuite/regression/gga_k_lieb.data.bz2, + testsuite/regression/gga_k_ol1.data.bz2, + testsuite/regression/gga_k_ol2.data.bz2, + testsuite/regression/gga_x_ityh.data.bz2, + testsuite/regression/gga_x_ol2.data.bz2, + testsuite/regression/gga_x_rpw86.data.bz2, + testsuite/regression/gga_xc_th1.data.bz2, + testsuite/regression/gga_xc_th2.data.bz2, + testsuite/regression/gga_xc_th3.data.bz2, + testsuite/regression/gga_xc_th4.data.bz2, + testsuite/regression/gga_xc_th_fc.data.bz2, + testsuite/regression/gga_xc_th_fcfo.data.bz2, + testsuite/regression/gga_xc_th_fco.data.bz2, + testsuite/regression/gga_xc_th_fl.data.bz2, + testsuite/regression/hyb_gga_xc_bhandh.data.bz2, + testsuite/regression/hyb_gga_xc_bhandhlyp.data.bz2, + testsuite/regression/hyb_gga_xc_cam_b3lyp.data.bz2, + testsuite/regression/hyb_gga_xc_td_cam_b3lyp.data.bz2, + testsuite/regression/lda_c_1d_loos.data.bz2, + testsuite/regression/mgga_c_tpss.data.bz2, + testsuite/regression/mgga_x_tpss.data.bz2: Reset the regression + tests. Most of the failing cases were trivial (the funny + characters in the reference), but I do not trust much the _th + family for now. + +2012-09-05 18:51 dstrubbe + + * [r9336] m4/fc_integer.m4: m4/fc_integer.m4 in libxc is an exact + copy of the one in Octopus. Therefore, I am backporting my + changes in r9308 and r9309 to libxc, for improved robustness and + ability to cross-compile. + +2012-09-04 23:00 dstrubbe + + * [r9319] src/functionals.c, src/work_gga_c.c: Libxc: + * Fixing an apparent bug from r9215 -- one occurrence of 'order' + was not changed to 'r.order' and as a result was a variable being + used without initialization (which could cause the function to + return without computing). + * Misspelling. + * Fixing apparent mistake in return type, as signalled by the + compiler warning 'missing return statement at end of non-void + function' for xc_hyb_cam_coef. + +2012-09-04 22:29 dstrubbe + + * [r9316] src/gga_k_ol1.c, src/gga_k_ol2.c, src/gga_k_tflw.c, + src/gga_x_pw86.c, src/gga_x_pw91.c: Fixing some peculiar + characters in place of dashes in libxc, which cause this warning + from ifort: invalid multibyte character sequence + +2012-09-04 22:13 xavier + + * [r9314] src/special_functions.c, src/util.h: Moved the definition + of cheb_eval to util.h, so xlc is happy. + +2012-08-01 13:53 marques + + * [r9221] src/lda_x.c: According to some people, one has to write + the attenuation function + differently in order to limit the numerical errors... + +2012-08-01 08:10 marques + + * [r9220] src/gga_x_ityh.c: Corrected what seemed to me as a bug... + +2012-08-01 07:51 marques + + * [r9219] src/Makefile.am, src/lda_c_1d_loos.c: Added a new LDA + functional for 1D systems + +2012-07-27 07:57 micael + + * [r9216] src/mgga_c_tpss.c, src/mgga_x_tpss.c: * Fixed several + bugs in the TPSS functional. + +2012-07-27 07:54 marques + + * [r9215] src/gga_c_am05.c, src/gga_c_lm.c, src/gga_c_lyp.c, + src/gga_c_optc.c, src/gga_c_p86.c, src/gga_c_pbe.c, + src/gga_c_pw91.c, src/gga_c_sogga11.c, src/gga_c_wi.c, + src/gga_c_wl.c, src/gga_xc_th.c, src/util.h, src/work_gga_c.c: + Simplyfied the interfaces to the GGA correlation functionals. + There were + too many arguments, and if one day I do implement kxc, then the + interface would probably be more than 10 lines long! + +2012-07-26 08:18 marques + + * [r9214] src/Makefile.am, src/gga_c_optc.c, src/gga_c_pw91.c, + src/util.h: Added the opc_c GGA functional. + +2012-07-19 11:53 marques + + * [r9205] src/hyb_gga_xc_b1wc.c: Another bug found by Fabien + +2012-07-18 14:02 marques + + * [r9203] src/hyb_gga_xc_cam_b3lyp.c: Bugs found by Fabien. + +2012-07-18 10:55 marques + + * [r9202] src/hyb_gga_xc_b1wc.c: Added Becke Half-and-Half and a + variation of it. These functionals are in Gaussian. + +2012-07-18 08:38 marques + + * [r9201] src/hyb_gga_xc_cam_b3lyp.c: With the debugging of Fabien + maybe CM-B3LYP will work now. + +2012-07-14 21:29 marques + + * [r9199] src/functionals.c, src/xc.h: functional_get_number needs + only a const char * not a char *. Thanks to Jussi Lehtola for + this. + +2012-06-14 13:11 mjv500 + + * [r9123] src/functionals.c, src/xc.h, src/xc_f.c: back to function + for hyb_exx_coeff + +2012-06-14 06:14 mjv500 + + * [r9122] src/functionals.c, src/xc.h, src/xc_f.c: intermediate + patch for libxc interface of hyb_exx_coef - still not fixed. + Miguel, please have a look + +2012-06-06 12:33 marques + + * [r9107] TODO, configure.ac, testsuite/xc-consistency.c: Now + feenableexcept is checked for, to make all your apple lovers + happy. + +2012-06-04 10:22 marques + + * [r9105] src/Makefile.am, src/hyb_gga_xc_cam_b3lyp.c: Added + CAM-B3LYP. Please handle with care, as I am not sure at all of + the actual definition of the functional. + +2012-06-04 07:32 marques + + * [r9103] src/lda_c_2d_prm.c, src/lda_x.c, + testsuite/xc-consistency.c: Small fixes + +2012-06-01 21:30 marques + + * [r9094] src/Makefile.am, src/gga_x_b88.c, src/gga_x_ityh.c, + src/lda_x.c, src/util.h, src/xc.h: Added a generic way to make + short-range exchange GGAs. + +2012-06-01 14:25 marques + + * [r9091] src/functionals.c, src/gga.c, src/gga_x_sogga11.c, + src/hyb_gga_xc_b1wc.c, src/hyb_gga_xc_b3lyp.c, + src/hyb_gga_xc_b97.c, src/hyb_gga_xc_hse.c, + src/hyb_gga_xc_o3lyp.c, src/hyb_gga_xc_pbeh.c, src/xc.h, + testsuite/regression/hyb_gga_xc_hjs_b88.data.bz2, + testsuite/regression/hyb_gga_xc_hjs_b97x.data.bz2, + testsuite/regression/hyb_gga_xc_hjs_pbe.data.bz2, + testsuite/regression/hyb_gga_xc_hjs_pbe_sol.data.bz2, + testsuite/regression/hyb_gga_xc_hse03.data.bz2, + testsuite/regression/hyb_gga_xc_hse06.data.bz2, + testsuite/xc-regression.c: Hope this fixes compilation. + Better interface to CAM functionals + +2012-06-01 13:49 marques + + * [r9090] TODO, src/functionals.c, src/gga.c, src/gga_c_am05.c, + src/gga_c_lm.c, src/gga_c_lyp.c, src/gga_c_p86.c, + src/gga_c_pbe.c, src/gga_c_pw91.c, src/gga_c_sogga11.c, + src/gga_c_wi.c, src/gga_c_wl.c, src/gga_k_dk.c, src/gga_k_ol1.c, + src/gga_k_ol2.c, src/gga_k_pearson.c, src/gga_k_tflw.c, + src/gga_x_2d_b86.c, src/gga_x_2d_b86_mgc.c, src/gga_x_2d_b88.c, + src/gga_x_2d_pbe.c, src/gga_x_airy.c, src/gga_x_am05.c, + src/gga_x_b86.c, src/gga_x_b86_mgc.c, src/gga_x_b88.c, + src/gga_x_bayesian.c, src/gga_x_c09x.c, src/gga_x_dk87.c, + src/gga_x_ft97.c, src/gga_x_g96.c, src/gga_x_herman.c, + src/gga_x_hjs.c, src/gga_x_htbs.c, src/gga_x_kt.c, + src/gga_x_lb.c, src/gga_x_lg93.c, src/gga_x_mpbe.c, + src/gga_x_optx.c, src/gga_x_pbe.c, src/gga_x_pbea.c, + src/gga_x_pw86.c, src/gga_x_pw91.c, src/gga_x_rpbe.c, + src/gga_x_sogga11.c, src/gga_x_wc.c, src/gga_x_wpbeh.c, + src/gga_xc_1w.c, src/gga_xc_b97.c, src/gga_xc_edf1.c, + src/gga_xc_th.c, src/hyb_gga_xc_b1wc.c, src/hyb_gga_xc_b3lyp.c, + src/hyb_gga_xc_b97.c, src/hyb_gga_xc_hse.c, + src/hyb_gga_xc_o3lyp.c, src/hyb_gga_xc_pbeh.c, src/lda.c, + src/lda_c_1d_csc.c, src/lda_c_2d_amgb.c, src/lda_c_2d_prm.c, + src/lda_c_gombas.c, src/lda_c_hl.c, src/lda_c_ml1.c, + src/lda_c_pw.c, src/lda_c_pz.c, src/lda_c_rpa.c, src/lda_c_vwn.c, + src/lda_c_wigner.c, src/lda_k_tf.c, src/lda_x.c, src/lda_x_1d.c, + src/lda_x_2d.c, src/lda_xc_teter93.c, src/libxc_master.F90, + src/mgga.c, src/mgga_c_tpss.c, src/mgga_x_2d_prhg07.c, + src/mgga_x_br89.c, src/mgga_x_lta.c, src/mgga_x_m06l.c, + src/mgga_x_tau_hcth.c, src/mgga_x_tpss.c, src/mgga_xc_vsxc.c, + src/mix_func.c, src/util.h, src/work_gga_becke.c, + src/work_gga_c.c, src/work_gga_x.c, src/work_lda.c, + src/work_mgga_c.c, src/work_mgga_x.c, src/xc.h, src/xc_f.c, + testsuite/regression/gga_x_hjs_b88.data.bz2, + testsuite/regression/gga_x_hjs_b97x.data.bz2, + testsuite/regression/gga_x_hjs_pbe.data.bz2, + testsuite/regression/gga_x_hjs_pbe_sol.data.bz2, + testsuite/regression/hyb_gga_xc_hjs_b88.data.bz2, + testsuite/regression/hyb_gga_xc_hjs_b97x.data.bz2, + testsuite/regression/hyb_gga_xc_hjs_pbe.data.bz2, + testsuite/regression/hyb_gga_xc_hjs_pbe_sol.data.bz2, + testsuite/xc-consistency.c: Spring cleaning in libxc. Got rid of + several code and simplified the structure of the library. + Changed the default screening of the HJS. + +2012-05-31 14:35 marques + + * [r9089] src/gga_x_wpbeh.c: Added another rescaling function (not + used by now) + +2012-05-31 13:08 marques + + * [r9088] testsuite/regression/gga_c_am05.data.bz2, + testsuite/regression/gga_c_apbe.data.bz2, + testsuite/regression/gga_c_lm.data.bz2, + testsuite/regression/gga_c_lyp.data.bz2, + testsuite/regression/gga_c_p86.data.bz2, + testsuite/regression/gga_c_pbe.data.bz2, + testsuite/regression/gga_c_pbe_jrgx.data.bz2, + testsuite/regression/gga_c_pbe_sol.data.bz2, + testsuite/regression/gga_c_pw91.data.bz2, + testsuite/regression/gga_c_rge2.data.bz2, + testsuite/regression/gga_c_sogga11.data.bz2, + testsuite/regression/gga_c_sogga11_x.data.bz2, + testsuite/regression/gga_c_wi.data.bz2, + testsuite/regression/gga_c_wi0.data.bz2, + testsuite/regression/gga_c_wl.data.bz2, + testsuite/regression/gga_c_xpbe.data.bz2, + testsuite/regression/gga_k_gp85.data.bz2, + testsuite/regression/gga_k_ludena.data.bz2, + testsuite/regression/gga_k_ol1.data.bz2, + testsuite/regression/gga_k_ol2.data.bz2, + testsuite/regression/gga_k_thakkar.data.bz2, + testsuite/regression/gga_k_vw.data.bz2, + testsuite/regression/gga_x_am05.data.bz2, + testsuite/regression/gga_x_hjs_b88.data.bz2, + testsuite/regression/gga_x_hjs_b97x.data.bz2, + testsuite/regression/gga_x_hjs_pbe.data.bz2, + testsuite/regression/gga_x_hjs_pbe_sol.data.bz2, + testsuite/regression/gga_x_lag.data.bz2, + testsuite/regression/gga_x_ol2.data.bz2, + testsuite/regression/gga_x_wpbeh.data.bz2, + testsuite/regression/gga_xc_b97.data.bz2, + testsuite/regression/gga_xc_b97_1.data.bz2, + testsuite/regression/gga_xc_b97_2.data.bz2, + testsuite/regression/gga_xc_b97_3.data.bz2, + testsuite/regression/gga_xc_b97_d.data.bz2, + testsuite/regression/gga_xc_b97_k.data.bz2, + testsuite/regression/gga_xc_edf1.data.bz2, + testsuite/regression/gga_xc_hcth_120.data.bz2, + testsuite/regression/gga_xc_hcth_147.data.bz2, + testsuite/regression/gga_xc_hcth_407.data.bz2, + testsuite/regression/gga_xc_hcth_93.data.bz2, + testsuite/regression/gga_xc_mohlyp.data.bz2, + testsuite/regression/gga_xc_mohlyp2.data.bz2, + testsuite/regression/gga_xc_mpwlyp1w.data.bz2, + testsuite/regression/gga_xc_pbe1w.data.bz2, + testsuite/regression/gga_xc_pbelyp1w.data.bz2, + testsuite/regression/gga_xc_sb98_1a.data.bz2, + testsuite/regression/gga_xc_sb98_1b.data.bz2, + testsuite/regression/gga_xc_sb98_1c.data.bz2, + testsuite/regression/gga_xc_sb98_2a.data.bz2, + testsuite/regression/gga_xc_sb98_2b.data.bz2, + testsuite/regression/gga_xc_sb98_2c.data.bz2, + testsuite/regression/gga_xc_th1.data.bz2, + testsuite/regression/gga_xc_th2.data.bz2, + testsuite/regression/gga_xc_th3.data.bz2, + testsuite/regression/gga_xc_th4.data.bz2, + testsuite/regression/gga_xc_th_fc.data.bz2, + testsuite/regression/gga_xc_th_fcfo.data.bz2, + testsuite/regression/gga_xc_th_fco.data.bz2, + testsuite/regression/gga_xc_xlyp.data.bz2, + testsuite/regression/hyb_gga_xc_b1lyp.data.bz2, + testsuite/regression/hyb_gga_xc_b1pw91.data.bz2, + testsuite/regression/hyb_gga_xc_b1wc.data.bz2, + testsuite/regression/hyb_gga_xc_b3lyp.data.bz2, + testsuite/regression/hyb_gga_xc_b3p86.data.bz2, + testsuite/regression/hyb_gga_xc_b3pw91.data.bz2, + testsuite/regression/hyb_gga_xc_b97.data.bz2, + testsuite/regression/hyb_gga_xc_b97_1.data.bz2, + testsuite/regression/hyb_gga_xc_b97_2.data.bz2, + testsuite/regression/hyb_gga_xc_b97_3.data.bz2, + testsuite/regression/hyb_gga_xc_b97_k.data.bz2, + testsuite/regression/hyb_gga_xc_hjs_b88.data.bz2, + testsuite/regression/hyb_gga_xc_hjs_b97x.data.bz2, + testsuite/regression/hyb_gga_xc_hjs_pbe.data.bz2, + testsuite/regression/hyb_gga_xc_hjs_pbe_sol.data.bz2, + testsuite/regression/hyb_gga_xc_hse03.data.bz2, + testsuite/regression/hyb_gga_xc_hse06.data.bz2, + testsuite/regression/hyb_gga_xc_mpw1k.data.bz2, + testsuite/regression/hyb_gga_xc_mpw1pw.data.bz2, + testsuite/regression/hyb_gga_xc_mpw3lyp.data.bz2, + testsuite/regression/hyb_gga_xc_mpw3pw.data.bz2, + testsuite/regression/hyb_gga_xc_o3lyp.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1a.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1b.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1c.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2a.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2b.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2c.data.bz2, + testsuite/regression/hyb_gga_xc_x3lyp.data.bz2, + testsuite/regression/lda_c_xalpha.data.bz2, + testsuite/regression/lda_x.data.bz2, + testsuite/regression/lda_x_1d.data.bz2, + testsuite/regression/mgga_x_2d_prhg07.data.bz2, + testsuite/regression/mgga_x_2d_prhg07_prp10.data.bz2, + testsuite/regression/mgga_x_m06l.data.bz2, + testsuite/regression/mgga_x_tb09.data.bz2: I reset the regression + tests that changed after Micael changed the thresholds for the + functionals. Please next do not forget to reset the regression + tests. + +2012-05-31 12:48 marques + + * [r9087] src/hyb_gga_xc_hse.c: Added the hybrid forms of hjs + +2012-05-31 12:25 marques + + * [r9086] src/lda_x.c, src/util.h: Added the range-separated + exchange LDA + +2012-05-30 09:29 marques + + * [r9085] src/gga_x_wpbeh.c, src/libxc_master.F90: Added fortran + interface to HJS + +2012-05-23 13:03 marques + + * [r9074] src/gga_x_wpbeh.c: Sorry had left a debug line + +2012-05-23 12:45 marques + + * [r9073] src/gga_x_wpbeh.c: A few bugs corrected in HSE + +2012-05-16 14:27 marques + + * [r9071] src/gga_x_hjs.c: Added other versions of this functional. + +2012-05-16 14:14 marques + + * [r9070] src/Makefile.am, src/gga_x_hjs.c, src/util.h, src/xc.h: + Added another short-range form of the PBE + +2012-05-11 15:10 marques + + * [r9069] src/Makefile.am, src/bessel.c, src/expint_e1.c, + src/lda_x_1d.c, src/mgga_x_2d_prhg07.c, src/special_functions.c, + src/test.c, src/util.h: Rewrote the bessel functions in order to + have proper double precision + +2012-05-11 09:08 marques + + * [r9068] src/gga_x_wpbeh.c, src/lda_x_1d.c, + src/special_functions.c, src/util.h: Implemented a more precise + version of the exponential integral + +2012-05-10 11:39 marques + + * [r9065] src/libxc_master.F90, src/xc_f.c: Added Fortran interface + to hse set par routines + +2012-05-10 11:33 marques + + * [r9064] src/hyb_gga_xc_hse.c, src/util.h, src/xc.h: Forgot to + rename a couple of routines + +2012-05-10 11:31 marques + + * [r9063] src/Makefile.am, src/gga_x_pbe_sr.c, src/gga_x_wpbeh.c, + src/hyb_gga_xc_hse.c: Renamed pbe_sr to wpbeh as it is commonly + called. + Now HSE if based on PBEh and not on PBE + +2012-05-07 22:18 marques + + * [r9061] src/hyb_gga_xc_hse.c: Sorry, one c too much + +2012-05-07 21:58 marques + + * [r9060] src/hyb_gga_xc_hse.c, src/util.h, src/xc.h: HSE is an xc + functional, not an x functional + +2012-05-07 09:50 marques + + * [r9059] src/hyb_gga_xc_hse.c: Bug found by F. Bruneval fixed + +2012-05-04 10:00 marques + + * [r9057] src/lda_x.c, src/mgga.c: A couple of bugs found by Micael + +2012-05-04 09:43 marques + + * [r9056] src/mgga_c_tpss.c, src/mgga_x_2d_prhg07.c, + src/mgga_x_br89.c, src/mgga_x_m06l.c: Small bug fixes + +2012-05-03 14:36 marques + + * [r9055] src/hyb_gga_xc_hse.c: Clarified a comment + +2012-05-03 14:07 marques + + * [r9054] src/gga_x_pbe_sr.c: Now xc-consistency tells me that the + derivatives are OK. There was a small bug that I fixed. + +2012-05-03 13:13 marques + + * [r9053] src/Makefile.am, src/gga_x_pbe_sr.c, src/hyb_gga_x_hse.c, + src/hyb_gga_xc_hse.c, src/util.h, src/xc.h: Copied the first + derivatives from espresso and rearranged the code. I still do not + trust the first derivatives, so beware! + +2012-05-02 15:23 marques + + * [r9052] src/hyb_gga_x_hse.c: This should make some C compilers + happy + +2012-05-02 14:31 marques + + * [r9051] src/lda_x.c, src/libxc_master.F90, src/xc_f.c: I better + add some work I had some in the range seperated LDAs, or libxc + will not compile. WARNING, there is a change in the API in order + to add the range separation */ + +2012-05-02 14:29 marques + + * [r9050] src/Makefile.am, src/hyb_gga_x_hse.c, src/util.h, + src/xc.h: Added the exc for the local part of HSE. I shamelessly + adapted the code from espresso. + +2012-04-26 12:36 micael + + * [r9041] README: * More information and some cosmetic changes to + the libxc README file. + +2012-04-25 09:51 marques + + * [r9040] README: Some comments on how the files are organized in + libxc + +2012-04-17 14:48 micael + + * [r9025] src/work_lda.c: * Reverted r9022, as that change is only + valid for exchange functionals. + +2012-04-17 09:56 micael + + * [r9024] testsuite/xc-get_data.c: * Updated xc-get_data utility to + work with MGGA's. + +2012-04-17 08:46 micael + + * [r9023] src/gga_c_am05.c, src/gga_c_lm.c, src/gga_c_lyp.c, + src/gga_c_p86.c, src/gga_c_pbe.c, src/gga_c_pw91.c, + src/gga_c_sogga11.c, src/gga_c_wi.c, src/gga_c_wl.c, + src/gga_k_dk.c, src/gga_k_ol1.c, src/gga_k_ol2.c, + src/gga_k_pearson.c, src/gga_k_tflw.c, src/gga_x_2d_b86.c, + src/gga_x_2d_b86_mgc.c, src/gga_x_2d_b88.c, src/gga_x_2d_pbe.c, + src/gga_x_airy.c, src/gga_x_am05.c, src/gga_x_b86.c, + src/gga_x_b86_mgc.c, src/gga_x_b88.c, src/gga_x_bayesian.c, + src/gga_x_c09x.c, src/gga_x_dk87.c, src/gga_x_ft97.c, + src/gga_x_g96.c, src/gga_x_herman.c, src/gga_x_htbs.c, + src/gga_x_kt.c, src/gga_x_lb.c, src/gga_x_lg93.c, + src/gga_x_mpbe.c, src/gga_x_optx.c, src/gga_x_pbe.c, + src/gga_x_pbea.c, src/gga_x_pw86.c, src/gga_x_pw91.c, + src/gga_x_rpbe.c, src/gga_x_sogga11.c, src/gga_x_wc.c, + src/gga_xc_1w.c, src/gga_xc_b97.c, src/gga_xc_edf1.c, + src/gga_xc_th.c, src/hyb_gga_xc_b1wc.c, src/hyb_gga_xc_b3lyp.c, + src/hyb_gga_xc_b97.c, src/hyb_gga_xc_o3lyp.c, + src/hyb_gga_xc_pbeh.c: Updated GGA and hybrids thresholds. + +2012-04-17 08:45 micael + + * [r9022] src/work_lda.c: * Now vxc[is] is zero if rho[is] is below + threshold. + +2012-04-17 08:43 micael + + * [r9021] src/util.c: * The value of the density is not checked + anymore when calculating zeta, as this should be done outside + this routine. + +2012-04-17 08:40 micael + + * [r9020] src/lda_c_1d_csc.c, src/lda_c_2d_amgb.c, + src/lda_c_2d_prm.c, src/lda_c_gombas.c, src/lda_c_hl.c, + src/lda_c_ml1.c, src/lda_c_pw.c, src/lda_c_pz.c, src/lda_c_rpa.c, + src/lda_c_vwn.c, src/lda_c_wigner.c, src/lda_k_tf.c, src/lda_x.c, + src/lda_x_1d.c, src/lda_x_2d.c, src/lda_xc_teter93.c: * Updated + thresholds for the LDA functionals. + +2012-04-17 08:39 micael + + * [r9019] src/mgga_c_tpss.c: * Bug fix: TPSS correlation was + returning NAN's when the density was zero. + +2012-03-28 13:22 marques + + * [r8942] src/work_gga_becke.c, + testsuite/regression/gga_xc_b97.data.bz2, + testsuite/regression/gga_xc_b97_1.data.bz2, + testsuite/regression/gga_xc_b97_2.data.bz2, + testsuite/regression/gga_xc_b97_3.data.bz2, + testsuite/regression/gga_xc_b97_d.data.bz2, + testsuite/regression/gga_xc_b97_k.data.bz2, + testsuite/regression/gga_xc_hcth_120.data.bz2, + testsuite/regression/gga_xc_hcth_147.data.bz2, + testsuite/regression/gga_xc_hcth_407.data.bz2, + testsuite/regression/gga_xc_hcth_93.data.bz2, + testsuite/regression/gga_xc_sb98_1a.data.bz2, + testsuite/regression/gga_xc_sb98_1b.data.bz2, + testsuite/regression/gga_xc_sb98_1c.data.bz2, + testsuite/regression/gga_xc_sb98_2a.data.bz2, + testsuite/regression/gga_xc_sb98_2b.data.bz2, + testsuite/regression/gga_xc_sb98_2c.data.bz2, + testsuite/regression/hyb_gga_xc_b97.data.bz2, + testsuite/regression/hyb_gga_xc_b97_1.data.bz2, + testsuite/regression/hyb_gga_xc_b97_2.data.bz2, + testsuite/regression/hyb_gga_xc_b97_3.data.bz2, + testsuite/regression/hyb_gga_xc_b97_k.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1a.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1b.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1c.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2a.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2b.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2c.data.bz2: Still one bug + (not the last one, for sure) + +2012-03-28 13:07 marques + + * [r8941] src/mgga_x_br89.c, src/work_gga_becke.c, + testsuite/regression/gga_x_am05.data.bz2, + testsuite/regression/gga_xc_b97.data.bz2, + testsuite/regression/gga_xc_b97_1.data.bz2, + testsuite/regression/gga_xc_b97_2.data.bz2, + testsuite/regression/gga_xc_b97_3.data.bz2, + testsuite/regression/gga_xc_b97_d.data.bz2, + testsuite/regression/gga_xc_b97_k.data.bz2, + testsuite/regression/gga_xc_hcth_120.data.bz2, + testsuite/regression/gga_xc_hcth_147.data.bz2, + testsuite/regression/gga_xc_hcth_407.data.bz2, + testsuite/regression/gga_xc_hcth_93.data.bz2, + testsuite/regression/gga_xc_sb98_1a.data.bz2, + testsuite/regression/gga_xc_sb98_1b.data.bz2, + testsuite/regression/gga_xc_sb98_1c.data.bz2, + testsuite/regression/gga_xc_sb98_2a.data.bz2, + testsuite/regression/gga_xc_sb98_2b.data.bz2, + testsuite/regression/gga_xc_sb98_2c.data.bz2, + testsuite/regression/hyb_gga_xc_b97.data.bz2, + testsuite/regression/hyb_gga_xc_b97_1.data.bz2, + testsuite/regression/hyb_gga_xc_b97_2.data.bz2, + testsuite/regression/hyb_gga_xc_b97_3.data.bz2, + testsuite/regression/hyb_gga_xc_b97_k.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1a.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1b.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1c.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2a.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2b.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2c.data.bz2, + testsuite/regression/mgga_x_bj06.data.bz2, + testsuite/regression/mgga_x_br89.data.bz2, + testsuite/regression/mgga_x_rpp09.data.bz2, + testsuite/regression/mgga_x_tb09.data.bz2: Solved a couple of + bugs that were leading to NaNs in the values of + functionals + +2012-03-27 20:37 dstrubbe + + * [r8933] src/get_funcs.pl, testsuite/xc-reset-regression, + testsuite/xc-run_testsuite: Using the more portable /usr/bin/env + for first line of scripts. Most are doing this already. + +2012-03-22 15:52 micael + + * [r8926] Makefile.am: * Removed DONE file from Makefile. + +2012-03-22 15:31 micael + + * [r8925] PACKAGING, README: * Updated PACKAGING and README files + +2012-03-22 15:30 micael + + * [r8924] AUTHORS, DONE, NEWS: * Updated NEWS and AUTHORS files and + removed the very outdated DONE file. + +2012-03-22 14:05 marques + + * [r8923] ChangeLog: New changelog + +2012-03-09 09:32 micael + + * [r8910] src/mgga_x_br89.c: * Reverted unintended changed. + +2012-03-09 09:30 micael + + * [r8909] src/mgga_x_br89.c: * Updated the thresholds for the BJ06 + and RPP10 functionals. + +2012-02-04 20:50 dstrubbe + + * [r8839] README: Two trivial changes. + +2012-02-03 18:04 micael + + * [r8838] src/gga_c_am05.c, src/gga_c_lm.c, src/gga_c_lyp.c, + src/gga_c_p86.c, src/gga_c_pbe.c, src/gga_c_pw91.c, + src/gga_c_sogga11.c, src/gga_c_wi.c, src/gga_c_wl.c, + src/gga_k_dk.c, src/gga_k_ol1.c, src/gga_k_ol2.c, + src/gga_k_pearson.c, src/gga_k_tflw.c, src/gga_x_2d_b86.c, + src/gga_x_2d_b86_mgc.c, src/gga_x_2d_b88.c, src/gga_x_2d_pbe.c, + src/gga_x_airy.c, src/gga_x_am05.c, src/gga_x_b86.c, + src/gga_x_b86_mgc.c, src/gga_x_b88.c, src/gga_x_bayesian.c, + src/gga_x_c09x.c, src/gga_x_dk87.c, src/gga_x_ft97.c, + src/gga_x_g96.c, src/gga_x_herman.c, src/gga_x_htbs.c, + src/gga_x_kt.c, src/gga_x_lb.c, src/gga_x_lg93.c, + src/gga_x_mpbe.c, src/gga_x_optx.c, src/gga_x_pbe.c, + src/gga_x_pbea.c, src/gga_x_pw86.c, src/gga_x_pw91.c, + src/gga_x_rpbe.c, src/gga_x_sogga11.c, src/gga_x_wc.c, + src/gga_xc_1w.c, src/gga_xc_b97.c, src/gga_xc_edf1.c, + src/gga_xc_th.c, src/hyb_gga_xc_b1wc.c, src/hyb_gga_xc_b3lyp.c, + src/hyb_gga_xc_b97.c, src/hyb_gga_xc_o3lyp.c, + src/hyb_gga_xc_pbeh.c, src/lda_c_1d_csc.c, src/lda_c_2d_amgb.c, + src/lda_c_2d_prm.c, src/lda_c_gombas.c, src/lda_c_hl.c, + src/lda_c_ml1.c, src/lda_c_pw.c, src/lda_c_pz.c, src/lda_c_rpa.c, + src/lda_c_vwn.c, src/lda_c_wigner.c, src/lda_k_tf.c, src/lda_x.c, + src/lda_x_1d.c, src/lda_x_2d.c, src/lda_xc_teter93.c, + src/mgga_c_tpss.c, src/mgga_x_2d_prhg07.c, src/mgga_x_br89.c, + src/mgga_x_lta.c, src/mgga_x_m06l.c, src/mgga_x_tau_hcth.c, + src/mgga_x_tpss.c, src/mgga_xc_vsxc.c, src/work_gga_becke.c, + src/work_gga_c.c, src/work_gga_x.c, src/work_lda.c, + src/work_mgga_c.c, src/work_mgga_x.c, src/xc.h: * The thresholds + of the density, density gradient, and kinetic energy density are + now part of the definition of a functional. + The idea is that each functional can have different thresholds, + although at the moment they are the same for all of them. + +2012-01-24 18:15 dstrubbe + + * [r8799] src: Set svn:ignore for new file funcs_hyb_mgga.c in + libxc. + +2012-01-24 10:35 marques + + * [r8795] src/mgga_x_2d_prhg07.c, src/mgga_x_br89.c, src/util.h, + src/work_mgga_x.c: Got rid of unelegant vrho0 in the meta-GGAs + +2012-01-24 10:29 marques + + * [r8794] src/get_funcs.pl, src/mgga.c, src/mgga_x_2d_prhg07.c, + src/mgga_x_br89.c, src/mgga_x_lta.c, src/mgga_x_m06l.c, + src/mgga_x_tau_hcth.c, src/mgga_x_tpss.c, src/mgga_xc_vsxc.c, + src/util.h, src/work_lda.c, src/work_mgga_x.c, src/xc.h: Some + reorganization of the meta-gga code + +2012-01-23 14:34 marques + + * [r8790] src/gga_c_sogga11.c, + testsuite/regression/gga_c_sogga11.data.bz2, + testsuite/regression/gga_c_sogga11_x.data.bz2: Added the + correlation part of the sogga11-x functional. I just realized + that I have 100 GGA functionals implemented. I am starting to + have problems with the numering ;) + +2012-01-23 14:19 marques + + * [r8789] src/get_funcs.pl, src/gga_x_sogga11.c, + testsuite/regression/gga_c_apbe.data.bz2, + testsuite/regression/gga_c_rge2.data.bz2, + testsuite/regression/gga_k_pearson.data.bz2, + testsuite/regression/gga_x_c09x.data.bz2, + testsuite/regression/gga_x_sogga11.data.bz2, + testsuite/regression/hyb_gga_x_sogga11_x.data.bz2, + testsuite/regression/lda_c_gombas.data.bz2, + testsuite/regression/lda_x_1d.data.bz2: *) Added the sogga11-x + hybrid (exchange part) + *) cleaned the regression tests. All the failures were related to + change in references or similar stuff + +2012-01-09 15:20 marques + + * [r8748] src/Makefile.am, src/gga_x_c09x.c: Added the new GGA + functional of Cooper + +2011-12-07 02:33 dstrubbe + + * [r8666] src/util.h: ifort 12.0 refuses to compile the inline + functions: + + /bin/sh ../libtool --tag=CC --mode=link mpicc -O3 -o xc-get_data + xc_get_data-xc-get_data.o -L../src/ -lxc -lm + libtool: link: mpicc -O3 -o xc-get_data xc_get_data-xc-get_data.o + -L/global/home/users/dstrubbe/octopus/libxc/src + /global/home/users/dstrubbe/octopus/libxc/src/.libs/libxc.a -lm + /global/software/centos-5.x86_64/modules/intel/composerxe-2011.1.107/lib/intel64/libimf.so: + warning: warning: feupdateenv is not implemented and will always + fail + /global/home/users/dstrubbe/octopus/libxc/src/.libs/libxc.a(gga_c_pbe.o): + In function `work_gga_c': + gga_c_pbe.c:(.text+0x3b0): undefined reference to + `xc_lda_c_pw_func' + /global/home/users/dstrubbe/octopus/libxc/src/.libs/libxc.a(gga_c_p86.o): + In function `work_gga_c': + gga_c_p86.c:(.text+0x389): undefined reference to + `xc_lda_c_pz_func' + /global/home/users/dstrubbe/octopus/libxc/src/.libs/libxc.a(gga_c_pw91.o): + In function `work_gga_c': + gga_c_pw91.c:(.text+0x40b): undefined reference to + `xc_lda_c_pw_func' + /global/home/users/dstrubbe/octopus/libxc/src/.libs/libxc.a(gga_c_am05.o): + In function `work_gga_c': + gga_c_am05.c:(.text+0x37a): undefined reference to + `xc_lda_c_pw_func' + /global/home/users/dstrubbe/octopus/libxc/src/.libs/libxc.a(gga_c_lm.o): + In function `work_gga_c': + gga_c_lm.c:(.text+0x3cf): undefined reference to + `xc_lda_c_hl_func' + /global/home/users/dstrubbe/octopus/libxc/src/.libs/libxc.a(gga_c_sogga11.o): + In function `work_gga_c': + gga_c_sogga11.c:(.text+0x445): undefined reference to + `xc_lda_c_pw_func' + make[1]: *** [xc-get_data] Error 1 + make[1]: Leaving directory + `/global/home/users/dstrubbe/octopus/libxc/testsuite' + make: *** [install-recursive] Error 1 + +2011-12-06 15:31 marques + + * [r8662] src/lda_c_1d_csc.c, + testsuite/regression/lda_c_1d_csc.data.bz2: Added fxc to the CSC + functional + +2011-11-30 09:43 fulvio + + * [r8642] INSTALL: Reverted accidental changes in INSTALL files + +2011-11-29 17:22 fulvio + + * [r8641] INSTALL: Included Lorenzo's implementation of jelli slab + + a small bugfix (thanks to Lorenzo) + +2011-11-28 21:15 dstrubbe + + * [r8640] src/Makefile.am: Missing dependencies in libxc. + +2011-11-19 06:08 xavier + + * [r8589] testsuite/xc-regression.c: Removed a C++ style comment. + +2011-10-10 13:17 marques + + * [r8374] src/special_functions.c: Small bug found by Martin + Persson + +2011-09-07 05:40 dstrubbe + + * [r8264] m4/fc_integer.m4: On MacOS, directories can be produced + by when the try build fails, and we need to do rm -rf to remove + them. + +2011-09-05 07:40 dstrubbe + + * [r8259] src/lda_c_gombas.c: Restored proper German title, and + added Wien to publication location for Gombas's book. + +2011-09-05 06:18 dstrubbe + + * [r8258] src/lda_c_gombas.c: Typo in reference. + +2011-09-05 04:47 dstrubbe + + * [r8257] src/gga_xc_th.c, src/mgga_c_tpss.c, src/util.h, + src/work_gga_becke.c, src/work_gga_c.c, src/work_mgga_c.c, + src/work_mgga_x.c: More explicit casts and a missing macro call. + +2011-09-04 23:32 dstrubbe + + * [r8256] src/lda_c_2d_prm.c, src/work_gga_x.c, src/work_lda.c: + Errors in pointer casting that g++ 4.5 will not accept. + +2011-08-23 18:55 dstrubbe + + * [r8219] src/gga_k_pearson.c, src/lda_x_1d.c: Tobias Burnus' patch + to libxc references. + +2011-08-22 14:34 micael + + * [r8212] src/gga_c_pbe.c: * Bug fix: some GGA correlations were + tagged as exchange functionals. + +2011-07-29 09:46 marques + + * [r8123] TODO, src/Makefile.am, src/gga_xc_th.c, src/test.c, + testsuite/regression/gga_c_lm.data.bz2, + testsuite/regression/gga_c_sogga11.data.bz2, + testsuite/regression/gga_c_wi0.data.bz2, + testsuite/regression/gga_x_sogga.data.bz2, + testsuite/regression/gga_x_sogga11.data.bz2, + testsuite/regression/gga_xc_th1.data.bz2, + testsuite/regression/gga_xc_th2.data.bz2, + testsuite/regression/gga_xc_th3.data.bz2, + testsuite/regression/gga_xc_th4.data.bz2, + testsuite/regression/gga_xc_th_fc.data.bz2, + testsuite/regression/gga_xc_th_fcfo.data.bz2, + testsuite/regression/gga_xc_th_fco.data.bz2, + testsuite/regression/gga_xc_th_fl.data.bz2, + testsuite/xc-reference.pl: Added the TH family of xc functionals. + Updated the regression tests. + +2011-07-28 19:19 xavier + + * [r8119] src/xc.h: Fixed a comment. + +2011-07-28 12:38 marques + + * [r8118] src/gga_c_lm.c: Added the spin-polarized version of the + LM functional + +2011-07-26 10:00 marques + + * [r8110] src/gga_c_wi.c: Added another version of the WI + functional + +2011-07-25 12:37 marques + + * [r8107] src/gga.c, src/gga_x_kt.c, src/gga_xc_1w.c, + src/gga_xc_edf1.c, src/hyb_gga_xc_b1wc.c, src/hyb_gga_xc_b3lyp.c, + src/hyb_gga_xc_b97.c, src/hyb_gga_xc_o3lyp.c, + src/hyb_gga_xc_pbeh.c, src/mgga_x_2d_prhg07.c, src/mgga_x_br89.c: + Some changes for libxc to compile in single precision. Thanks + Alberto. + +2011-07-23 16:49 marques + + * [r8105] src/work_gga_becke.c: Sorry, bad fix last time + +2011-07-23 16:41 marques + + * [r8104] src/gga_c_sogga11.c, src/gga_x_sogga11.c, + src/gga_xc_edf1.c, src/work_gga_becke.c: Bug fix: becke gga c + functionals were wrong when called with a list of values. Thanks + to Damien Caliste. + +2011-07-21 12:25 marques + + * [r8103] src/Makefile.am, src/gga_c_sogga11.c, + testsuite/regression/gga_c_sogga11.data.bz2: Added the + correlation part of the SOGGA11 functional + +2011-07-20 10:23 xavier + + * [r8099] testsuite/Makefile.am, testsuite/xc-run_testsuite: Now + the libxc testsuite works with VPATHs. (But I get FAILs in most + tests). + +2011-07-20 10:03 xavier + + * [r8098] src/gga_x_sogga11.c: This should fix the libxc + compilation issue. + +2011-07-20 08:56 marques + + * [r8097] src/Makefile.am, src/gga_x_sogga11.c, src/util.h, + testsuite/regression/gga_x_sogga11.data.bz2: Added a new + functional, SOGGA11 (in press). I check this functional against + the reference implementation of Truhlar (that was very badly + programmed, and impossible to compile) + +2011-07-19 23:13 dstrubbe + + * [r8094] src, testsuite: Set svn:ignore for new generated files in + libxc. + +2011-07-19 11:41 marques + + * [r8091] TODO, src/gga_x_rpbe.c, src/gga_xc_edf1.c, src/util.h, + src/xc.h, testsuite/regression/gga_x_optpbe_vdw.data.bz2, + testsuite/regression/gga_x_rpbe.data.bz2, + testsuite/regression/gga_x_sogga.data.bz2, + testsuite/regression/gga_xc_mohlyp.data.bz2, + testsuite/regression/gga_xc_mohlyp2.data.bz2: Added the SOGGA + functional + Changed the precision of RPBE. Now it uses the same constants as + PBE + Fixed a serious bug in optpbe_vdw + +2011-07-17 18:48 marques + + * [r8083] src/gga_x_optx.c, src/gga_xc_edf1.c, src/util.h, + src/xc.h: Added two new functionals, MOHLYP and MOHLYP2 + +2011-07-16 18:51 xavier + + * [r8078] testsuite/Makefile.am: This fixes libxc compilation with + VPATH. + +2011-07-15 12:39 marques + + * [r8077] testsuite/regression/lca_lch.data.bz2, + testsuite/regression/lca_omc.data.bz2, testsuite/xc-regression.c, + testsuite/xc-reset-regression, testsuite/xc-run_testsuite: Now + make check actually does something interesting and meaninful + +2011-07-15 12:18 marques + + * [r8076] ChangeLog, src/Makefile.am, src/get_funcs.pl, src/lca.c, + src/lca_lch.c, src/lca_omc.c, src/lda_c_2d_prm.c, src/util.h, + src/xc.h, src/xc_f.c, testsuite/Makefile.am, + testsuite/regression, testsuite/regression/gga_c_am05.data.bz2, + testsuite/regression/gga_c_apbe.data.bz2, + testsuite/regression/gga_c_lm.data.bz2, + testsuite/regression/gga_c_lyp.data.bz2, + testsuite/regression/gga_c_p86.data.bz2, + testsuite/regression/gga_c_pbe.data.bz2, + testsuite/regression/gga_c_pbe_jrgx.data.bz2, + testsuite/regression/gga_c_pbe_sol.data.bz2, + testsuite/regression/gga_c_pw91.data.bz2, + testsuite/regression/gga_c_rge2.data.bz2, + testsuite/regression/gga_c_wi.data.bz2, + testsuite/regression/gga_c_wl.data.bz2, + testsuite/regression/gga_c_xpbe.data.bz2, + testsuite/regression/gga_k_absr1.data.bz2, + testsuite/regression/gga_k_absr2.data.bz2, + testsuite/regression/gga_k_apbe.data.bz2, + testsuite/regression/gga_k_baltin.data.bz2, + testsuite/regression/gga_k_dk.data.bz2, + testsuite/regression/gga_k_ernzerhof.data.bz2, + testsuite/regression/gga_k_fr_b88.data.bz2, + testsuite/regression/gga_k_fr_pw86.data.bz2, + testsuite/regression/gga_k_ge2.data.bz2, + testsuite/regression/gga_k_golden.data.bz2, + testsuite/regression/gga_k_gp85.data.bz2, + testsuite/regression/gga_k_gr.data.bz2, + testsuite/regression/gga_k_lc94.data.bz2, + testsuite/regression/gga_k_lieb.data.bz2, + testsuite/regression/gga_k_llp.data.bz2, + testsuite/regression/gga_k_ludena.data.bz2, + testsuite/regression/gga_k_ol1.data.bz2, + testsuite/regression/gga_k_ol2.data.bz2, + testsuite/regression/gga_k_pearson.data.bz2, + testsuite/regression/gga_k_perdew.data.bz2, + testsuite/regression/gga_k_thakkar.data.bz2, + testsuite/regression/gga_k_tw1.data.bz2, + testsuite/regression/gga_k_tw2.data.bz2, + testsuite/regression/gga_k_tw3.data.bz2, + testsuite/regression/gga_k_tw4.data.bz2, + testsuite/regression/gga_k_vjks.data.bz2, + testsuite/regression/gga_k_vsk.data.bz2, + testsuite/regression/gga_k_vw.data.bz2, + testsuite/regression/gga_k_yt65.data.bz2, + testsuite/regression/gga_x_2d_b86.data.bz2, + testsuite/regression/gga_x_2d_b86_mgc.data.bz2, + testsuite/regression/gga_x_2d_b88.data.bz2, + testsuite/regression/gga_x_2d_pbe.data.bz2, + testsuite/regression/gga_x_airy.data.bz2, + testsuite/regression/gga_x_am05.data.bz2, + testsuite/regression/gga_x_apbe.data.bz2, + testsuite/regression/gga_x_b86.data.bz2, + testsuite/regression/gga_x_b86_mgc.data.bz2, + testsuite/regression/gga_x_b88.data.bz2, + testsuite/regression/gga_x_bayesian.data.bz2, + testsuite/regression/gga_x_dk87_r1.data.bz2, + testsuite/regression/gga_x_dk87_r2.data.bz2, + testsuite/regression/gga_x_ft97_a.data.bz2, + testsuite/regression/gga_x_ft97_b.data.bz2, + testsuite/regression/gga_x_g96.data.bz2, + testsuite/regression/gga_x_herman.data.bz2, + testsuite/regression/gga_x_htbs.data.bz2, + testsuite/regression/gga_x_kt1.data.bz2, + testsuite/regression/gga_x_lag.data.bz2, + testsuite/regression/gga_x_lb.data.bz2, + testsuite/regression/gga_x_lbm.data.bz2, + testsuite/regression/gga_x_lg93.data.bz2, + testsuite/regression/gga_x_mb88.data.bz2, + testsuite/regression/gga_x_mpbe.data.bz2, + testsuite/regression/gga_x_mpw91.data.bz2, + testsuite/regression/gga_x_ol2.data.bz2, + testsuite/regression/gga_x_optb88_vdw.data.bz2, + testsuite/regression/gga_x_optpbe_vdw.data.bz2, + testsuite/regression/gga_x_optx.data.bz2, + testsuite/regression/gga_x_pbe.data.bz2, + testsuite/regression/gga_x_pbe_jsjr.data.bz2, + testsuite/regression/gga_x_pbe_r.data.bz2, + testsuite/regression/gga_x_pbe_sol.data.bz2, + testsuite/regression/gga_x_pbea.data.bz2, + testsuite/regression/gga_x_pbek1_vdw.data.bz2, + testsuite/regression/gga_x_pw86.data.bz2, + testsuite/regression/gga_x_pw91.data.bz2, + testsuite/regression/gga_x_rge2.data.bz2, + testsuite/regression/gga_x_rpbe.data.bz2, + testsuite/regression/gga_x_rpw86.data.bz2, + testsuite/regression/gga_x_wc.data.bz2, + testsuite/regression/gga_x_xpbe.data.bz2, + testsuite/regression/gga_xc_b97.data.bz2, + testsuite/regression/gga_xc_b97_1.data.bz2, + testsuite/regression/gga_xc_b97_2.data.bz2, + testsuite/regression/gga_xc_b97_3.data.bz2, + testsuite/regression/gga_xc_b97_d.data.bz2, + testsuite/regression/gga_xc_b97_k.data.bz2, + testsuite/regression/gga_xc_edf1.data.bz2, + testsuite/regression/gga_xc_hcth_120.data.bz2, + testsuite/regression/gga_xc_hcth_147.data.bz2, + testsuite/regression/gga_xc_hcth_407.data.bz2, + testsuite/regression/gga_xc_hcth_93.data.bz2, + testsuite/regression/gga_xc_kt2.data.bz2, + testsuite/regression/gga_xc_mpwlyp1w.data.bz2, + testsuite/regression/gga_xc_pbe1w.data.bz2, + testsuite/regression/gga_xc_pbelyp1w.data.bz2, + testsuite/regression/gga_xc_sb98_1a.data.bz2, + testsuite/regression/gga_xc_sb98_1b.data.bz2, + testsuite/regression/gga_xc_sb98_1c.data.bz2, + testsuite/regression/gga_xc_sb98_2a.data.bz2, + testsuite/regression/gga_xc_sb98_2b.data.bz2, + testsuite/regression/gga_xc_sb98_2c.data.bz2, + testsuite/regression/gga_xc_xlyp.data.bz2, + testsuite/regression/hyb_gga_xc_b1lyp.data.bz2, + testsuite/regression/hyb_gga_xc_b1pw91.data.bz2, + testsuite/regression/hyb_gga_xc_b1wc.data.bz2, + testsuite/regression/hyb_gga_xc_b3lyp.data.bz2, + testsuite/regression/hyb_gga_xc_b3p86.data.bz2, + testsuite/regression/hyb_gga_xc_b3pw91.data.bz2, + testsuite/regression/hyb_gga_xc_b97.data.bz2, + testsuite/regression/hyb_gga_xc_b97_1.data.bz2, + testsuite/regression/hyb_gga_xc_b97_2.data.bz2, + testsuite/regression/hyb_gga_xc_b97_3.data.bz2, + testsuite/regression/hyb_gga_xc_b97_k.data.bz2, + testsuite/regression/hyb_gga_xc_mpw1k.data.bz2, + testsuite/regression/hyb_gga_xc_mpw1pw.data.bz2, + testsuite/regression/hyb_gga_xc_mpw3lyp.data.bz2, + testsuite/regression/hyb_gga_xc_mpw3pw.data.bz2, + testsuite/regression/hyb_gga_xc_o3lyp.data.bz2, + testsuite/regression/hyb_gga_xc_pbeh.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1a.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1b.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1c.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2a.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2b.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2c.data.bz2, + testsuite/regression/hyb_gga_xc_x3lyp.data.bz2, + testsuite/regression/lca_lch.data.bz2, + testsuite/regression/lca_omc.data.bz2, + testsuite/regression/lda_c_1d_csc.data.bz2, + testsuite/regression/lda_c_2d_amgb.data.bz2, + testsuite/regression/lda_c_2d_prm.data.bz2, + testsuite/regression/lda_c_gl.data.bz2, + testsuite/regression/lda_c_gombas.data.bz2, + testsuite/regression/lda_c_hl.data.bz2, + testsuite/regression/lda_c_ml1.data.bz2, + testsuite/regression/lda_c_ml2.data.bz2, + testsuite/regression/lda_c_ob_pw.data.bz2, + testsuite/regression/lda_c_ob_pz.data.bz2, + testsuite/regression/lda_c_pw.data.bz2, + testsuite/regression/lda_c_pw_mod.data.bz2, + testsuite/regression/lda_c_pw_rpa.data.bz2, + testsuite/regression/lda_c_pz.data.bz2, + testsuite/regression/lda_c_pz_mod.data.bz2, + testsuite/regression/lda_c_rpa.data.bz2, + testsuite/regression/lda_c_vbh.data.bz2, + testsuite/regression/lda_c_vwn.data.bz2, + testsuite/regression/lda_c_vwn_rpa.data.bz2, + testsuite/regression/lda_c_wigner.data.bz2, + testsuite/regression/lda_c_xalpha.data.bz2, + testsuite/regression/lda_k_lp.data.bz2, + testsuite/regression/lda_k_tf.data.bz2, + testsuite/regression/lda_x.data.bz2, + testsuite/regression/lda_x_1d.data.bz2, + testsuite/regression/lda_x_2d.data.bz2, + testsuite/regression/lda_xc_teter93.data.bz2, + testsuite/regression/mgga_c_tpss.data.bz2, + testsuite/regression/mgga_c_vsxc.data.bz2, + testsuite/regression/mgga_x_2d_prhg07.data.bz2, + testsuite/regression/mgga_x_2d_prhg07_prp10.data.bz2, + testsuite/regression/mgga_x_bj06.data.bz2, + testsuite/regression/mgga_x_br89.data.bz2, + testsuite/regression/mgga_x_gvt4.data.bz2, + testsuite/regression/mgga_x_lta.data.bz2, + testsuite/regression/mgga_x_m06l.data.bz2, + testsuite/regression/mgga_x_rpp09.data.bz2, + testsuite/regression/mgga_x_tau_hcth.data.bz2, + testsuite/regression/mgga_x_tb09.data.bz2, + testsuite/regression/mgga_x_tpss.data.bz2, + testsuite/xc-run_testsuite: Deleted the LCA that was broken and + unused for years + Created files intended for regression test (coming soon) + +2011-07-15 08:48 marques + + * [r8075] testsuite/df_repo, testsuite/df_repo/gga_c_lyp.data, + testsuite/df_repo/gga_c_p86.data, + testsuite/df_repo/gga_c_pbe.data, + testsuite/df_repo/gga_c_pw91.data, + testsuite/df_repo/gga_x_b88.data, + testsuite/df_repo/gga_x_ft97_b.data, + testsuite/df_repo/gga_x_pbe.data, + testsuite/df_repo/gga_x_pw91.data, + testsuite/df_repo/gga_xc_b97.data, + testsuite/df_repo/gga_xc_b97_1.data, + testsuite/df_repo/gga_xc_b97_2.data, + testsuite/df_repo/gga_xc_edf1.data, + testsuite/df_repo/gga_xc_hcth_120.data, + testsuite/df_repo/gga_xc_hcth_147.data, + testsuite/df_repo/gga_xc_hcth_407.data, + testsuite/df_repo/gga_xc_hcth_93.data, + testsuite/df_repo/hyb_gga_xc_b3lyp.data, + testsuite/df_repo/lda_c_pw.data, testsuite/df_repo/lda_c_pz.data, + testsuite/df_repo/lda_c_vwn.data, + testsuite/df_repo/lda_c_vwn_rpa.data, + testsuite/df_repo/lda_x.data, testsuite/gga_c_lyp.data, + testsuite/gga_c_p86.data, testsuite/gga_c_pbe.data, + testsuite/gga_c_pw91.data, testsuite/gga_x_b88.data, + testsuite/gga_x_ft97_b.data, testsuite/gga_x_pbe.data, + testsuite/gga_x_pw91.data, testsuite/gga_xc_b97.data, + testsuite/gga_xc_b97_1.data, testsuite/gga_xc_b97_2.data, + testsuite/gga_xc_edf1.data, testsuite/gga_xc_hcth_120.data, + testsuite/gga_xc_hcth_147.data, testsuite/gga_xc_hcth_407.data, + testsuite/gga_xc_hcth_93.data, testsuite/hyb_gga_xc_b3lyp.data, + testsuite/lda_c_pw.data, testsuite/lda_c_pz.data, + testsuite/lda_c_vwn.data, testsuite/lda_c_vwn_rpa.data, + testsuite/lda_x.data: Moved data from the df repository to its + own directory + +2011-07-15 08:46 marques + + * [r8074] src/gga_k_dk.c, src/gga_k_ol1.c, src/gga_k_ol2.c, + src/gga_k_pearson.c, src/gga_k_tflw.c, src/gga_x_2d_b86.c, + src/gga_x_2d_b86_mgc.c, src/gga_x_2d_b88.c, src/gga_x_2d_pbe.c, + src/gga_x_airy.c, src/gga_x_am05.c, src/gga_x_b86.c, + src/gga_x_b86_mgc.c, src/gga_x_b88.c, src/gga_x_bayesian.c, + src/gga_x_dk87.c, src/gga_x_ft97.c, src/gga_x_g96.c, + src/gga_x_herman.c, src/gga_x_htbs.c, src/gga_x_lg93.c, + src/gga_x_mpbe.c, src/gga_x_optx.c, src/gga_x_pbe.c, + src/gga_x_pbea.c, src/gga_x_pw86.c, src/gga_x_pw91.c, + src/gga_x_rpbe.c, src/gga_x_wc.c, src/mgga_x_m06l.c, src/util.h, + src/work_gga_x.c: Removed an unused limit + +2011-07-13 14:04 marques + + * [r8072] src/gga_x_b88.c: Big bug in B88 solved + +2011-07-13 13:35 marques + + * [r8071] src/hyb_gga_xc_b1wc.c: Deleted wrong calls to + vwn_set_param + +2011-07-13 13:25 marques + + * [r8070] src/Makefile.am, src/gga_perdew.c, src/util.h: Removed + the framework of perdew functionals. This is now handled by more + generic routines + +2011-07-13 13:23 marques + + * [r8069] src/gga_c_pw91.c, src/test.c: Converted PW91 to the new + framework and implemented fxc + +2011-07-04 13:34 marques + + * [r8056] src/gga_c_lyp.c, src/gga_c_pbe.c, src/gga_k_ol2.c, + src/gga_x_2d_b88.c, src/gga_x_airy.c, src/lda_x_1d.c, + src/mgga_x_2d_prhg07.c, src/mgga_x_br89.c, src/test.c, + src/util.h, src/work_gga_x.c: Moved the gga_c_pbe to the new + framework. + Cleaned several unused variables + +2011-06-29 14:06 marques + + * [r8053] src/gga_c_p86.c: A couple of bugs corrected. Now it gives + the same as the reference. + +2011-06-29 09:04 marques + + * [r8052] src/gga_c_p86.c: Converted P86 to new framework and + implemented second derivatives. It is funny to see the + discontinuity of PZ propagated to poles in fxc ;(( + +2011-06-24 13:42 marques + + * [r8050] src/gga_c_am05.c, testsuite/xc-consistency.c, + testsuite/xc-get_data.c: Fixed bug in AM05. It took me 4 hours to + find this stupif thing! + +2011-06-24 10:20 marques + + * [r8049] src/lda_c_pw.c: This should solve the segfault in PW + +2011-06-22 13:19 marques + + * [r8048] src/functionals.c, src/get_funcs.pl, src/test.c, + src/util.c, src/util.h, src/xc.h: Added two new helper functions, + functional_get_number and functional_get_name that return the + number or the name of the functional given the other. + +2011-06-22 10:31 marques + + * [r8047] src/work_gga_x.c, src/work_mgga_x.c: Fixed NaN for zero + gradients. Thanks to Xavier Gonze. + +2011-06-22 09:03 marques + + * [r8046] src/gga_x_airy.c, src/lda_c_pw.c, src/test.c: Added new + functional, the PW parametrization of the RPA energy + +2011-06-22 08:31 marques + + * [r8045] src/gga_x_airy.c: New exchange functional, the Local Airy + Gas + +2011-06-22 08:20 marques + + * [r8044] src/Makefile.am, src/gga_x_airy.c: Added new exchange + functional based on the Airy gas + +2011-06-21 13:45 marques + + * [r8041] TODO, src/gga_x_pbe.c: Changed the precision in one + constant in the PBE functional. Thank you to Gian-Marco for + finding this one + +2011-06-10 09:16 marques + + * [r8009] src/gga_x_2d_pbe.c, src/work_gga_c.c: Bug corrected + (thanks David). The results seemed to be correct any way, but my + mere chance. + +2011-06-09 11:35 marques + + * [r7996] src/gga_x_wc.c, src/lda_c_pz.c: Sorry, forgot to submit + this file + +2011-06-09 10:13 marques + + * [r7995] src/Makefile.am, src/gga_x_htbs.c, src/gga_x_pbe.c, + src/gga_x_rpbe.c, src/util.h: Added new GGA x functional HTBS + +2011-06-08 15:09 marques + + * [r7994] src/gga_k_dk.c: I believe that there was a ff factor + missing. Can you check it Micael? + +2011-06-07 12:47 xavier + + * [r7985] src/lda_c_pw.c: Another fix for libxc and xlc. Now it + should compile. + +2011-06-07 12:30 xavier + + * [r7984] src/lda_c_hl.c: It seems that xlc doesn't like to call an + static function from an + inline one. + +2011-06-01 13:46 marques + + * [r7963] src/gga_xc_1w.c, src/gga_xc_edf1.c, + src/hyb_gga_xc_b1wc.c, src/hyb_gga_xc_b3lyp.c, + src/hyb_gga_xc_o3lyp.c, src/test.c: Several functionals that + denpended on LYP have now also fxc + +2011-06-01 13:42 marques + + * [r7962] src/gga_c_lyp.c, src/work_gga_c.c: LYP now has fxc. + +2011-05-30 14:04 marques + + * [r7952] src/gga_c_am05.c, src/gga_c_lm.c, src/lda_c_hl.c, + src/test.c, src/util.h: Langreth and Mehl converted to new + framework + +2011-05-30 13:06 marques + + * [r7951] src/test.c, src/work_gga_c.c: Several bugs corrected and + code simplified. Now it really seems to work (fingers crossed) + +2011-05-27 15:28 marques + + * [r7948] src/test.c, src/work_gga_c.c: Sopke too soon ;) v2sigma2 + is fine, but v2rhosigma still has a bug for some spins... + +2011-05-27 13:56 marques + + * [r7947] src/gga_c_am05.c, src/gga_c_wl.c: Sorry, left some debug + stuff around + +2011-05-27 13:55 marques + + * [r7946] src/gga_c_am05.c, src/gga_c_wl.c, src/lda_c_pw.c, + src/test.c, src/util.h, src/work_gga_c.c, src/xc_f.c: Second + derivatives are now working for AM05 and WL. I will still spend + some time trying to simplify the code. + +2011-05-18 08:10 micael + + * [r7906] src/gga_k_dk.c: * Bug fix: corrected the parameters of + two KED functionals. + +2011-05-13 02:30 xavier + + * [r7896] configure.ac: Updated the versions for trunk, octopus + nocturnus, and, libxc diurnus. + +2011-05-12 15:57 xavier + + * [r7881] src/gga_x_lb.c, src/libxc_master.F90, src/xc.h: Libxc now + defines XC_GGA_XC_LB to point to XC_GGA_X_LB. This keeps + compatibility. + +2011-05-11 12:46 marques + + * [r7863] src/gga_x_b88.c: Added the Thakkar approximation to the + kinetic energy density. I believe that this concludes the GGAs + for tau (at least I do not have any further on my list) + +2011-05-11 10:19 marques + + * [r7862] src/gga_x_b86.c, src/gga_x_pbe.c: The 4 versions of the + PBE for kinetics by Tran and Wesolowski + +2011-05-11 10:01 marques + + * [r7861] src/gga_x_pbe.c: Small bug corrected + +2011-05-11 09:57 marques + + * [r7860] src/gga_c_pbe.c: The correlation version of the previous + functional + +2011-05-11 09:17 marques + + * [r7859] src/gga_x_pbe.c: Added the APBE functional (both X and K, + I will implement C now) + +2011-05-01 01:17 xavier + + * [r7827] src/gga_c_am05.c, src/gga_c_lm.c, src/gga_c_pw91.c: + Missing deallocations in libxc. + +2011-05-01 00:07 xavier + + * [r7826] src/gga_c_pbe.c: The destructor of the gga_c_pbe + functional was missing. + +2011-04-21 13:26 marques + + * [r7739] src/gga_c_lyp.c: An unused variable was left behind. + Thanks David. + +2011-04-20 20:04 marques + + * [r7733] src/Makefile.am: Sorry for the mess. Let's see if it + compiles now. + +2011-04-20 14:04 marques + + * [r7731] src/gga_x_b88.c: Sorry forgot two "M" + +2011-04-20 14:02 marques + + * [r7730] src/Makefile.am, src/gga_x_b88.c, src/mgga_c_tpss.c, + src/test.c, src/work_gga_c.c: New functional, a modified Becke 88 + for proton transfer reactions. + +2011-04-18 14:18 micael + + * [r7720] src/gga_x_b88.c: * Two functionals had the same + identifier. + +2011-04-16 19:12 micael + + * [r7711] src/gga_c_am05.c: * Fixed AM05 correlation for very small + densities. + +2011-04-15 10:06 marques + + * [r7707] src/gga_c_lyp.c, src/work_gga_c.c: Also v2rho2 is well + calculated in spin polarized mode. Now it is only missing + v2sigma2 and v2rhosigma + +2011-04-01 09:42 marques + + * [r7659] src/gga_k_tflw.c: Now the VW term is defined withour the + TF part as requested by Micael + +2011-04-01 08:59 marques + + * [r7658] src/gga_x_pw91.c: Sorry I had left some bugs around + +2011-04-01 08:57 marques + + * [r7657] src/gga_x_pw91.c: Added the kinetic counterpart of PW91 + +2011-03-31 15:22 marques + + * [r7653] src/gga_k_dk.c: Another bunch of functionals for the + kinetic energy. These ones are all absed on a Pade approximant. + +2011-03-30 13:02 marques + + * [r7647] src/Makefile.am, src/gga_k_dk.c: Added the dePristo and + Kress GGA for the kinetic energy density + +2011-03-30 12:17 marques + + * [r7646] src/gga_k_ol2.c: Bug fix in K_OL2. The formula was not + correct. + Added the functional X_OL2, but I have very strong reasons to + believe that the formula in the paper is wrong. + +2011-03-28 16:15 micael + + * [r7635] src/gga_k_tflw.c: * The lambda parameter in the TflW + functionals was not set correctly. + +2011-03-28 15:30 micael + + * [r7633] src/gga_x_pw86.c: * Another KED functional that was + labeled as exchange. + +2011-03-28 15:06 micael + + * [r7629] src/gga_x_b88.c: * A couple of KED functionals were + labeled as exchange functionals. + +2011-03-28 15:02 marques + + * [r7628] src/Makefile.am, src/gga_x_lb.c, src/gga_xc_lb.c: Rename + the LB functional as "exchange", otherwise octopus can not sum + the PW92 correlation to it. + Added a modified LB potential by the Amsterdam group + +2011-03-27 05:10 dstrubbe + + * [r7626] src/gga_x_pw86.c, src/lda_k_tf.c, src/work_gga_x.c: Fixed + typos and funny characters in libxc. + +2011-03-25 13:23 marques + + * [r7615] src/gga_x_pw86.c: An assert was wrong + +2011-03-25 13:23 marques + + * [r7614] src/gga_c_wl.c, src/gga_x_pw86.c: Added a kinetic version + of the PW86 exchange functional + +2011-03-25 13:05 marques + + * [r7613] src/gga_x_b88.c: Sorry, a factor was wrong + +2011-03-25 13:04 marques + + * [r7612] src/gga_x_b88.c: Another version of becke 88 for the + kinetic energy density + +2011-03-25 11:30 marques + + * [r7611] src/work_gga_x.c: Bug fix: in the case of the kinetic + energy density, I was using the wrong power in the definition of + x. It should always be 4/3 and not 5/3 + +2011-03-24 14:14 marques + + * [r7604] src/lda_k_tf.c: Added a new LDA functional for the + kinetic energy + +2011-03-24 13:24 marques + + * [r7603] src/util.h, src/work_gga_x.c: Again problems with the + pre-factors. Hopefully this way of doing things is a bit more + robust. + +2011-03-24 11:01 marques + + * [r7602] src/Makefile.am, src/gga_k_ol1.c, src/gga_k_ol2.c, + src/gga_k_pearson.c, src/gga_x_b88.c, src/util.h: Two more + kinetic functionals OL1 and OL2 + Fixed one reference (thanks Tobias) + +2011-03-24 08:46 marques + + * [r7601] src/gga_k_tflw.c, src/gga_x_b88.c: Yes, you were right + Tobias. Thanks. + +2011-03-23 14:33 marques + + * [r7598] src/Makefile.am, src/gga_k_llp.c, src/gga_k_pearson.c, + src/gga_k_tflw.c, src/gga_x_b88.c, src/work_gga_x.c: Now the LLP + kinetic functional shares the same routine as B88 + +2011-03-23 14:11 marques + + * [r7597] src/Makefile.am, src/gga_k_ge2.c, src/gga_k_llp.c, + src/gga_k_pearson.c, src/gga_k_tflw.c, src/lda_k_tf.c, + src/util.h, src/xc.h: Added a bunch of functionals of the form + gamma T_TF + lambda T_vW + +2011-03-22 16:09 marques + + * [r7590] src/gga_k_ge2.c, src/util.h: Sorry, forgot an } and had + an error in a comment + +2011-03-22 16:00 marques + + * [r7589] src/gga_k_ge2.c, src/util.h: Corrected the value of + K_FACTOR_C to the correct spin-polarized and including the factor + of 2 from our definition of tau. + Added the von Weiszaecker functional + +2011-03-21 15:45 marques + + * [r7588] src/Makefile.am, src/gga_k_llp.c: New kinetic energy GGA + (actually the first of all), the Lee, Lee and Parr functional + +2011-03-18 15:15 micael + + * [r7573] src/lda_k_tf.c: * Now I think the constant in the + Thomas-Fermi functional is finally correct. + +2011-03-18 10:24 micael + + * [r7572] src/lda_k_tf.c, src/libxc_master.F90: * A constant was + wrong in the Thomas-Fermi kinetic energy functional. + * Definition of XC_KINETIC was missing from libxc_master.F90. + +2011-03-03 13:23 marques + + * [r7533] src/Makefile.am, src/gga_x_herman.c: Added a very simple + exchange functional, the Herman X\alpha\beta functional. This is + perhaps the first GGA for the exhange + +2011-03-02 12:42 marques + + * [r7521] src/gga_c_lyp.c, src/test.c: I rewrote lyp to the new + framework. Now the file is half the size as before, and it will + be easy to get the second derivatives. + +2011-03-02 12:42 marques + + * [r7520] src/gga_x_b86.c: There was a problem in the b86 + functional. First, what I called b86_r was in fact b86. Then my + b86 had a wrong coefficient. So I deleted b86_r and rewrote in a + clearer way b86. + +2011-03-02 12:41 marques + + * [r7519] src/util.c: Some programs pass negative densities to + libxc. This commit should fix many of the functionals in this + case. + +2011-02-28 11:11 marques + + * [r7507] src/Makefile.am, src/gga_c_wi.c: Added a new GGA + correlation functional: Wilson and Ivanov. Note that this + functional only has a spin-unpolarized version + +2011-02-24 15:26 marques + + * [r7493] src/Makefile.am, src/lda_c_gombas.c, src/lda_c_ml1.c, + src/lda_c_pz.c, src/lda_c_rpa.c, src/lda_x.c: *) Added the Gombas + interpolation of the correlation energy + *) Corrected a numerical coefficient in the RPA functional + *) A factor of 1/2 was missing in the ML functional + +2011-02-23 10:29 marques + + * [r7490] src/work_gga_c.c: Sorry, just realized that I used // + comments... + +2011-02-23 10:28 marques + + * [r7489] src/Makefile.am, src/gga_c_wl.c, src/work_gga_c.c: Added + a new GGA functional (WL) and more importantly, added a new + framework for GGA correlations. Most GGA correlations will be + adapted to this new framework in the future. Note: the second + derivatives in the spin polarized case are still missing. + +2011-02-18 11:33 xavier + + * [r7479] Makefile.am: An attempt to fix the libxc problem in + nowii. + +2011-02-17 13:10 marques + + * [r7471] configure.ac, src/gga_c_am05.c, src/gga_c_lm.c, + src/gga_c_lyp.c, src/gga_c_p86.c, src/gga_c_pw91.c, + src/gga_perdew.c, src/gga_x_2d_b88.c, src/gga_x_am05.c, + src/gga_x_b88.c, src/gga_x_ft97.c, src/gga_x_g96.c, + src/gga_x_kt.c, src/gga_x_pw91.c, src/gga_xc_lb.c, + src/integrate.c, src/lca.c, src/lca_omc.c, src/lda_c_2d_amgb.c, + src/lda_c_2d_prm.c, src/lda_c_ml1.c, src/lda_c_vwn.c, + src/lda_k_tf.c, src/lda_x.c, src/lda_x_2d.c, src/mgga_c_tpss.c, + src/mgga_x_2d_prhg07.c, src/mgga_x_br89.c, src/mgga_x_tpss.c, + src/util.c, src/util.h, src/work_gga_becke.c, src/work_gga_x.c, + src/work_lda.c, src/work_mgga_c.c, src/work_mgga_x.c, + src/xc_config.h: Patch by Janne.Blomqvist@tkk.fi: + + The attached patch does some minor optimizations and cleanups, + mostly + replacing usage of pow() with cbrt() as pow() can be somewhat + expensive. + + - Add tests for sqrtf, cbrtf, cbrt in configure.ac + - Add SQRT and CBRT macros to xc_config.h + - pow => POW if argument is FLOAT + - sqrt => SQRT if argument is FLOAT + - cbrt => CBRT + - POW(x, 1.0/3.0) => CBRT(x) + - POW(x, -1.0/3.0) => 1.0/CBRT(x) + - POW(x, 1.0/2.0) => SQRT(x) + - POX(x, -1.0/2.0) => 1.0/SQRT(x) + - POW(x, 1.0/4.0) => SQRT(SQRT(x)) + - sqrt(2.0) => M_SQRT2 + + Some of the pow(x,y) optimizations above can be done + automatically by + the compiler if one enables -ffast-math (or equivalent) but due + to + different corner-case behavior the compiler cannot enable them + otherwise (e.g. sqrt(-0.0) == -0.0 != pow(-0.0, 1.0/2.0) == + +0.0). See + e.g. + + http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25620 + + http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43419 + + http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42694 + + http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28252 + + + I ran the testsuite, and while I did get some failures I also got + exactly the same failures with the trunk, so as far as the + testsuite + is concerned the patch does not affect the numerics in any way. + +2011-02-14 13:12 marques + + * [r7456] src/hyb_gga_xc_b1wc.c, src/hyb_gga_xc_b3lyp.c, + src/hyb_gga_xc_b97.c, src/hyb_gga_xc_o3lyp.c, + src/hyb_gga_xc_pbeh.c: Flag XC_FLAGS_3D was missing from the + hybrid functionals + +2011-02-02 13:14 marques + + * [r7394] src/mgga_x_br89.c: Some debug lines were forgotten... + +2011-02-02 00:37 dstrubbe + + * [r7388] src/gga.c, src/lda.c, src/mgga.c: Corrected typos. + +2011-01-25 12:59 marques + + * [r7329] src/util.c, src/util.h: There was still one inline left. + This seems to be the source of the confusion of the xlc + compiler... + +2011-01-25 12:49 marques + + * [r7328] src/util.c, src/util.h: Tried to remove inline to see if + nowii compiles libxc + +2011-01-25 12:45 marques + + * [r7327] src/Makefile.am, src/mgga.c, src/mgga_x_br89.c, + src/test.c, src/work_mgga_x.c: *) changed the order of files in + makefile.am to see if it helps with nowii + *) Added fxc for the BR functional + +2011-01-19 23:21 xavier + + * [r7287] configure.ac: Changed the macro used to initialize libxc + so it works with old + libtool versions. + +2011-01-18 20:46 dstrubbe + + * [r7285] src/gga_k_tflw.c, src/util.h: Fixed PGI compilation error + via missing prototype. + PGC-S-0043-Redefinition of symbol, xc_gga_k_tflw_set_params_ + (gga_k_tflw.c: 55) + +2011-01-18 19:39 dstrubbe + + * [r7284] src/Makefile.am, src/gga_k_tflw.c: * Added hyphen, + changed m-dash to hyphen (for page numbers) which could render + strangely. + * The new file was missing .c in the Makefile. + +2011-01-18 15:34 marques + + * [r7283] src/Makefile.am, src/gga_k_pearson.c: Another kinetic + energy functional + +2011-01-18 15:13 marques + + * [r7282] src/Makefile.am, src/gga_k_tflw.c: Added a new kinetic + energy functional + +2011-01-16 05:52 xavier + + * [r7277] src/lda_xc_teter93.c, src/work_lda.c: Some optimization + for lda_xc_teter93. + +2011-01-16 04:18 xavier + + * [r7276] src/lda_xc_teter93.c, src/util.c, src/util.h: Some + optimizations for libxc: + + * Defined a faster function calculate to f(z). It calculates all + the + required derivatives at once, and avoids the calculation if the + system + is unpolarized. + + * The new function is used by the lda_xc_teter93 functional. + +2011-01-02 04:53 xavier + + * [r7217] configure.ac: By default libxc is now compiled + statically. This will probably save a + lot of problems for users (and for us). + +2010-12-16 14:01 marques + + * [r7190] src/libxc_master.F90: Had a misplaced ';' + +2010-12-16 13:47 marques + + * [r7189] src/gga.c, src/libxc_master.F90, src/mgga.c, + src/mgga_c_tpss.c, src/test.c, src/work_mgga_c.c, + src/work_mgga_x.c, src/xc.h, src/xc_f.c: Finished the interface + for the fxcs in the meta-ggas. Moreover, I think now that the + TPSS exchange fxc is correct. + +2010-12-15 16:19 marques + + * [r7179] src/work_mgga_x.c: The rest of the derivatives are there. + I will test it more thoroughly tomorrow, and finish to change the + interface to include also the derivatives of the laplacian of + rho. + +2010-12-15 15:39 marques + + * [r7177] src/mgga_x_2d_prhg07.c, src/mgga_x_br89.c, + src/mgga_x_lta.c, src/mgga_x_m06l.c, src/mgga_x_tau_hcth.c, + src/mgga_x_tpss.c, src/mgga_xc_vsxc.c, src/work_mgga_x.c: First + steps at the second derivatives of the meta-GGAs. Several things + are already OK for the tpss (exchange) but there are still some + terms missing. + +2010-12-14 09:54 marques + + * [r7172] src/gga_c_am05.c, src/mgga_x_tpss.c, src/work_mgga_x.c: + BUG fixes: + *) Fxc was missing from AM05 flags (thanks to Gian-Marco + Rignanese) + *) Vxc was wrong for x TPSS. Now I get exactly the same results + as GPAW + +2010-12-08 13:40 marques + + * [r7147] src/gga_perdew.c: Bug fix. Thanks to Gian-Marco Rignanese + for this! + +2010-11-02 19:24 olivares + + * [r7067] configure.ac: Had to correct the safe_allocate_A calls + that sometimes certain compilers go crazy about when commented + +2010-10-29 20:55 marques + + * [r7056] src/test.c: test + +2010-10-29 08:55 marques + + * [r7055] src/test.c: test + +2010-10-29 08:25 + + * [r7054] src/test.c: test + +2010-10-25 18:29 dstrubbe + + * [r7049] src/Makefile.am: A correction to my r7041: now the right + modules are associated in the single/double precision cases. This + solves the warnings about redefining a rule for these targets. + +2010-10-25 16:52 micael + + * [r7048] src/mgga_c_tpss.c: TPSS correlation is not an exchange + functional ;) + +2010-10-25 13:15 marques + + * [r7046] src/gga_c_p86.c, src/lda_c_rpa.c: Should not divide by + zero in P86 + +2010-10-25 12:04 marques + + * [r7045] src/work_gga_becke.c: Becke functionals should not divide + by zero when the density is zero ;) + +2010-10-25 11:37 marques + + * [r7044] src/gga_x_kt.c: Bug fix: KT1 and KT2 were completely + wrong. + +2010-10-25 11:13 marques + + * [r7043] src/gga_x_pbe.c: Bug fix: rge2 was not working. + +2010-10-20 20:19 dstrubbe + + * [r7041] src/Makefile.am: Added some missing rules and + dependencies in libxc. Running a parallel make failed miserably + before this, although evidently it just happened to work anyway + in serial. Something is still not perfect since I get these + warnings after "make -j install": + Makefile:817: warning: overriding commands for target + `xc_f90_lib_m.mod' + Makefile:811: warning: ignoring old commands for target + `xc_f90_lib_m.mod' + Makefile:817: warning: overriding commands for target + `xc_f90_types_m.mod' + Makefile:811: warning: ignoring old commands for target + `xc_f90_types_m.mod' + +2010-10-18 14:40 marques + + * [r7034] src/lda_c_1d_csc.c: Now the 1D CSC for beta=1 has a spin + dependence + +2010-10-14 15:10 marques + + * [r7032] src/Makefile.am, src/gga_k_ge2.c, src/util.h, + src/work_gga_x.c: Added the second-order gradient expansion of + the kinetic energy functional. + +2010-10-14 14:19 marques + + * [r7031] src/gga_c_pbe.c, src/gga_x_2d_b86_mgc.c, src/gga_x_pbe.c, + src/mgga_x_br89.c: Updated the citations. Thanks Tobias! + +2010-10-14 14:14 marques + + * [r7030] src/Makefile.am, src/lda_k_tf.c, src/xc.h: Added the + Thomas-Fermi functional for the kinetic energy density. + +2010-10-14 12:27 marques + + * [r7029] src/Makefile.am, src/gga_x_kt.c, src/work_gga_x.c: Added + two new functionals, Keal and Tozer version 1 and 2. + +2010-10-05 12:42 marques + + * [r7023] src/gga_x_pw86.c: Added a new functional: a + reparemetrization of PW86 to be used in vdW calculations. + +2010-09-28 16:34 micael + + * [r7022] src/work_mgga_x.c: The exchange potential of the + Becke-Johnson MGGA type should be zero if the density is zero in + order to avoid getting some NaN. + +2010-08-17 17:57 dstrubbe + + * [r6939] src/mgga_x_2d_prhg07.c: *) Made two tests run for MPI as + well as serial. There doesn't seem to be any reason they + shouldn't be run in parallel. + *) Updated Coordinates block to only have the appropriate number + of dimensions in these tests. + *) Typo. + +2010-08-17 07:14 juho + + * [r6938] src/mgga_x_2d_prhg07.c: Wrong sign (the equation is + solvable down to -1), wrong return value. Returning zero gives us + an effective lda approximation. See PRB 76, 235314, page 4. + +2010-08-16 11:54 juho + + * [r6934] src/mgga_x_2d_prhg07.c: Corrected the sign of the PRP10 + correction + +2010-08-16 11:01 juho + + * [r6933] src/Makefile.am, src/mgga_x_2d_prhg07.c, + src/work_mgga_x.c: PRHG10 2D exchange functional along with + optional PRP10 exchange correction. See: + http://prb.aps.org/abstract/PRB/v76/i23/e235314 and + http://prb.aps.org/abstract/PRB/v81/i11/e115108 + +2010-08-02 23:26 xavier + + * [r6898] src/mgga_x_br89.c: * Removed some debugging output. + + +2010-08-02 20:04 xavier + + * [r6897] src/mgga_x_br89.c, src/work_mgga_x.c: * The XC potential + for BR89 class of functionals is not set to zero + for low density and tau. This fixes the problem with the cusp. + The + problem for low densities remains. + + * The solution of the non-linear equation in the BR89 functionals + works properly for small positive values. + +2010-07-29 14:10 marques + + * [r6880] src/lda_x.c: Added reference to Slater's Xalpha method. + +2010-07-26 08:30 marques + + * [r6859] src/xc_f.c: Bug fix in the Fortran interface of + f90_hyb_gga_exx_coef. Thanks to Tyrel M. McQueen and John Kay + Dewhurst for this one ;) + +2010-07-14 19:04 dstrubbe + + * [r6819] configure.ac: autoconf on libxc is failing on some + systems and demanding this line. + +2010-07-09 12:49 marques + + * [r6804] configure.ac: As octopus is vulgaris, then libxc can be + ordinarius + +2010-07-09 12:43 marques + + * [r6801] ChangeLog, INSTALL, configure.ac: Changed the version + number to 1.0 + +2010-07-06 12:02 marques + + * [r6781] src/gga_c_pbe.c, src/gga_x_pbe.c: Added another + functional to the PBE family of functionals. Another one from + Scuseria, the RGE2, both the exchange and the correlation part. + +2010-06-13 12:44 acastro + + * [r6722] src/lda_c_2d_prm.c: Roll back to previous version (6720), + since the idea of moving the + obsolete variables to one place was not so good... + +2010-05-27 21:58 xavier + + * [r6665] src/mgga_x_br89.c: Improved the numerical accuracy of the + non-linear solver in the BR89 + class of MGGAs. This means that the equation converges for all + values + of the rhs and the bisection is no longer needed. + +2010-05-26 08:02 marques + + * [r6659] src/lda_c_1d_csc.c: Forgot an else + +2010-05-26 07:58 marques + + * [r6658] src/lda_c_1d_csc.c: Added the parametrization of the CSC + functional for the soft Coulomb interaction and a=0.5 + +2010-05-05 19:09 olivares + + * [r6604] INSTALL: Returned INSTALL to its original configuration + +2010-05-05 15:25 olivares + + * [r6601] INSTALL: updates on the electrostatic boundary conditions + +2010-03-25 10:48 xavier + + * [r6390] src/libxc_master.F90: Moved the definition of + XC_FAMILY_KS_INVERSION to octopus. Since libxc + is an independent library we should keep it separated from + octopus + specific variables. Anyway we should find a better way to deal + with + this situation. + +2010-03-25 08:15 appel + + * [r6389] src/libxc_master.F90: Adding KS inversion as a new family + of functionals + in a spirit similar to OEP. There is now a new module + xc_ks_inversion_m that contains most of the inversion + code. I have adapted the 'old' runmode invert_ks to + use this new infrastructure. + + To deal with dependencies I had to move the eigensolver + module from scf to system (as suggested by Miguel). This + is analogous to the linear solver in the case of OEP. + + Not all things are in place yet to use the functional + family in the general case, however the old runmode + should work as before. + +2010-03-24 08:27 marques + + * [r6383] src/Makefile.am: I believe this is the correct way of + handling the dependencies. Sorry, I + had this lingering around already for a couple of weeks, but I + forgot to + commit it. + +2010-03-23 18:34 xavier + + * [r6380] src/Makefile.am: Another attempt to get dependencies + right. + +2010-03-23 18:14 xavier + + * [r6379] src/Makefile.am: My "fix" for libxc makes things worse. + Someone knows how to fix this? + +2010-03-23 17:36 xavier + + * [r6378] src/Makefile.am: A hack to fix the dependencies in libxc. + +2010-03-22 16:46 xavier + + * [r6372] configure.ac, m4/ax_f90_module_extension.m4, + src/Makefile.am: Fixed some autotools warnings in libxc. + +2010-03-21 11:06 xavier + + * [r6362] configure.ac, m4/ax_f90_module_extension.m4, + src/Makefile.am: Now libxc can deal with compilers that use + uppercase filenames for + modules. + +2010-03-20 19:12 xavier + + * [r6359] configure.ac, m4/ax_f90_module_extension.m4, + src/Makefile.am: * Now libxc installs the Fortran modules. + * Added a macro to detect the module extension. + +2010-03-08 22:28 dstrubbe + + * [r6347] m4: *) Improved formatting + *) Added push_sub's + *) Changed single-letter variable + *) Set svn:ignore on another automatically generated file in + libxc + +2010-03-06 03:38 dstrubbe + + * [r6344] m4: *) Improved formatting and comments + *) Added push_sub's, and removed one that appeared an excessive + number of times in the debugging stack trace + *) Set svn:ignore properties for libxc files generated by libtool + 2 + +2010-03-02 15:55 marques + + * [r6334] src/Makefile.am: This is an overkill hack in order for + libxc to compile with different versions of libtool. Let's see + what I broke now... + +2010-03-02 00:21 dstrubbe + + * [r6329] ., build, src, testsuite: Set svn:ignore for new files + being created in libxc. + +2010-02-26 16:22 marques + + * [r6325] src/Makefile.am: Stupid hack to go around buggy + libtool/automake. This works in tddft.org, let's see the others + now. + +2010-02-26 15:42 marques + + * [r6324] configure.ac, src/Makefile.am: Let's see if this fixes + the compilations issues. Needless to say that it + compiles without problem in my machine... I hate the autotools! + +2010-02-26 14:01 marques + + * [r6323] Makefile.am, build, build/Makefile.am, build/libxc.pc.in, + build/libxc.spec.in, configure.ac, src/Makefile.am: Added the + option to compile libxc dynamically, and a target to create + libxc.rpm + + I had to use libtool, which led to some problem. Let's see if all + the + architectures are happy with them... + +2010-02-09 09:40 marques + + * [r6309] src/Makefile.am, src/lda_c_ml1.c, src/lda_c_ps94.c, + src/test.c: Renamed the PS94 functional to the name given in the + original article, + and added a second version of the functional + +2010-02-09 09:27 marques + + * [r6308] src/lda_c_ps94.c: Now also vxc is working for this + functional. I will leave fxc and kxc + for the future ;) + +2010-02-08 15:12 marques + + * [r6307] src/lda_c_ps94.c: Sorry, there was a semi-colon missing + +2010-02-08 14:11 marques + + * [r6306] src/Makefile.am, src/lda_c_ps94.c, src/test.c: Initial + implementation of the Proynov and Salahub 94 LDA. The energy is + working and giving the right results. Now it is time to optimize + and to + compute the derivatives. + + Yes, I was also surprised that there are even more LDA + functionals. This + one is anyway different, as it is not a parametrization of the CA + Monte-Carlo data, but uses a quite different approach. + +2010-02-04 10:11 marques + + * [r6302] src/gga_perdew.c: Small correction pointed out by Damien + Caliste. + +2010-02-03 15:58 marques + + * [r6301] src/gga.c, src/gga_c_am05.c, src/gga_c_lm.c, + src/gga_c_lyp.c, src/gga_c_p86.c, src/gga_c_pbe.c, + src/gga_c_pw91.c, src/gga_x_2d_b86.c, src/gga_x_2d_b86_mgc.c, + src/gga_x_2d_b88.c, src/gga_x_2d_pbe.c, src/gga_x_am05.c, + src/gga_x_b86.c, src/gga_x_b86_mgc.c, src/gga_x_b88.c, + src/gga_x_bayesian.c, src/gga_x_dk87.c, src/gga_x_ft97.c, + src/gga_x_g96.c, src/gga_x_lg93.c, src/gga_x_mpbe.c, + src/gga_x_optx.c, src/gga_x_pbe.c, src/gga_x_pbea.c, + src/gga_x_pw86.c, src/gga_x_pw91.c, src/gga_x_rpbe.c, + src/gga_x_wc.c, src/gga_xc_1w.c, src/gga_xc_b97.c, + src/gga_xc_edf1.c, src/gga_xc_lb.c, src/hyb_gga_xc_b1wc.c, + src/hyb_gga_xc_b3lyp.c, src/hyb_gga_xc_b97.c, + src/hyb_gga_xc_o3lyp.c, src/hyb_gga_xc_pbeh.c, src/lca_lch.c, + src/lca_omc.c, src/lda.c, src/lda_c_1d_csc.c, + src/lda_c_2d_amgb.c, src/lda_c_2d_prm.c, src/lda_c_hl.c, + src/lda_c_pw.c, src/lda_c_pz.c, src/lda_c_rpa.c, src/lda_c_vwn.c, + src/lda_c_wigner.c, src/lda_x.c, src/lda_x_1d.c, src/lda_x_2d.c, + src/lda_xc_teter93.c, src/libxc_master.F90, src/mgga.c, + src/mgga_c_tpss.c, src/mgga_x_br89.c, src/mgga_x_lta.c, + src/mgga_x_m06l.c, src/mgga_x_tau_hcth.c, src/mgga_x_tpss.c, + src/mgga_xc_vsxc.c, src/util.h, src/work_gga_x.c, src/work_lda.c, + src/work_mgga_c.c, src/work_mgga_x.c, src/xc.h, src/xc_f.c, + testsuite/xc-consistency.c, testsuite/xc-get_data.c: I finished + cleaning the interface of libxc. The release of 1.0beta will + follow in the next days. + +2010-02-01 09:27 micael + + * [r6295] src/mgga.c: *) The calculation of the laplacian of the + density was wrong in the spin-polarized case. + *) A variable was not initialized in libxc for the MGGAs when the + density was bellow the threshold. + *) Some small fixes to the etsf_io output. + +2010-01-19 11:29 marques + + * [r6265] src/gga_c_lyp.c, src/gga_c_p86.c, src/gga_c_pbe.c, + src/gga_c_pw91.c, src/gga_x_b88.c, src/gga_x_pbe.c, + src/gga_xc_edf1.c, src/mix_func.c: Several fixes for the bugs + found by Xavier while setting up the xc test. + Fairly trivial things, but anyway quite annoying... + +2009-12-15 14:37 marques + + * [r6226] src/lda_x_1d.c: Bug fix: there was a "-1" missing in an + index which caused some + compilers to return garbage (which was the correct answer). This + should + fix the 1D test that is currently failing. Please 1D people check + your + calculations!!!! + +2009-12-15 12:12 marques + + * [r6225] src/gga_x_b88.c, src/integrate.c: Bug fix in Pulay + mixing: a range was wrong in an allocation + Bug fix in 1D CSC functional: variables were not deallocated + +2009-12-08 13:17 marques + + * [r6198] src/gga_x_pbe.c, src/gga_x_rpbe.c, src/gga_xc_edf1.c, + src/mix_func.c, src/util.h, src/xc.h, testsuite/xc-reference.pl: + *) Bug fix when calculating v2rho2 in mixed GGAs + *) The optPBE_vdW functional was wrong + *) Now xc-reference.pl knows about build directories + +2009-12-08 09:02 dstrubbe + + * [r6197] src/lda_c_pz.c: *) The kdotp run mode now prints out band + velocities, which in fact needs only the perturbation Hamiltonian + and not the perturbed wavefunctions. + *) Broke up kdotp_output into kdotp_write_degeneracies and + kdotp_write_eff_mass + *) A couple typographical things in LDA C PZ. + +2009-12-03 20:17 marques + + * [r6190] src/work_lda.c: Bug fixed: this was triggered by the + changing of the thresholds, but it + was there for a long time. Now the tests should pass. + +2009-12-02 17:16 micael + + * [r6185] src/gga_perdew.c, src/util.h, src/work_gga_x.c, + src/work_mgga_x.c: More fixes regarding very small densities. + +2009-12-02 10:59 marques + + * [r6184] src/gga.c, src/gga_c_lm.c, src/gga_c_pbe.c, + src/gga_c_pw91.c, src/gga_perdew.c, src/gga_x_b88.c, src/lda.c, + src/util.c: Some cleaning regarding very small densities + +2009-12-01 09:22 marques + + * [r6175] src/Makefile.am: Sorry, this file should not have been + committed: reverting it. + +2009-12-01 09:10 marques + + * [r6174] src/Makefile.am, src/gga_x_b88.c, src/gga_x_pbe.c, + src/gga_xc_edf1.c, src/util.h, src/xc.h: 3 new functionals + optimized to be used with the Dion et al vdW + functional. See http://arxiv.org/abs/0910.0438 + +2009-11-24 13:16 xavier + + * [r6128] configure.ac: The macro required by C99 is not available + in autoconf 2.59, that is + the one in tddft. So we will have to stay with c89 for the + moment. + +2009-11-24 12:51 xavier + + * [r6127] configure.ac: Now Octopus and libxc set the C compiler in + C99 mode. + +2009-11-19 20:49 dstrubbe + + * [r6083] src/gga_xc_lb.c, testsuite/xc-consistency.c: A few + spelling issues. + +2009-11-18 09:53 marques + + * [r6077] src/Makefile.am, src/gga_x_2d_b86.c, + src/gga_x_2d_b86_mgc.c, src/gga_x_2d_b88.c, src/gga_x_2d_pbe.c, + src/gga_x_b86.c, src/util.h, src/work_gga_x.c, + src/work_gga_x_2d.c: Added a bunch of 2D GGA functionals. They + are still under testing, so + don't rush to do calculations with them... + +2009-11-09 09:03 marques + + * [r6046] src/lda_x.c, src/xc_f.c: *) Now the relativistic + corrections are also present in higher + derivatives + *) Corrected warning in the interface of the meta-GGAs + +2009-11-09 05:21 dstrubbe + + * [r6045] src/lda_x.c: *) Capitalization of SPARSKIT + *) A u-umlaut got turned into garbage in a comment, so I replaced + it with "ue" + +2009-11-07 12:20 micael + + * [r6040] src/lda_x.c, src/libxc_master.F90, src/util.h, src/xc.h, + src/xc_f.c: *) Put the relativistic correction to the exchange + part of the LDA back into libxc. + *) Replaced the Xe UPF pseudopotential with a correct one and + removed all the other UPF pseudos. + *) The SO coupling test is again active. + +2009-11-06 09:47 marques + + * [r6033] src/gga_x_2d_b86_mgc.c, src/lda_c_2d_prm.c, + src/work_gga_x_2d.c: Bug fix: some functionals were not working + in 2D. + +2009-11-06 07:52 marques + + * [r6032] src/xc_f.c: Fixed a couple of bugs: + *) LB94 was not working due to two problems with the interface + *) oct-center-geom was segfaulting due to incorrect + initialization of + geometry + +2009-11-03 16:51 micael + + * [r6014] src/mgga_x_br89.c: The gradient and the laplacian of the + density used to compute the xc potential are now computed + directly from the wavefunctions. + +2009-10-30 16:01 micael + + * [r6007] src/gga_xc_lb.c: *) Bug fixed: the LB94 functional was + not working for the spin-polarized case because of a couple of + misplaced brackets. + +2009-10-16 08:08 marques + + * [r5940] src/Makefile.am, src/functionals.c, src/gga.c, + src/gga_c_lyp.c, src/gga_x_b88.c, src/gga_xc_1w.c, + src/gga_xc_edf1.c, src/gga_xc_xlyp.c, src/hyb_gga.c, + src/hyb_gga_xc_b1wc.c, src/hyb_gga_xc_b3lyp.c, + src/hyb_gga_xc_b97.c, src/hyb_gga_xc_o3lyp.c, + src/hyb_gga_xc_pbeh.c, src/libxc_master.F90, src/mgga_x_br89.c, + src/mix_func.c, src/util.h, src/xc.h, src/xc_f.c, + testsuite/xc-consistency.c, testsuite/xc-get_data.c: Cleaned up + the hybrids. There is no more the specific interface + hyb_gga_xxx, as the generic gga_xxx handles the requests. + +2009-10-13 11:53 marques + + * [r5939] src/gga_xc_lb.c: Added teh asymptotic expansion fo LB94 + +2009-10-09 08:36 micael + + * [r5933] INSTALL, src/gga_xc_lb.c, src/mgga.c, src/mgga_x_br89.c, + src/xc.h, src/xc_f.c: *) Fixed a couple of bugs in libxc. + *) Changed the initial point for the Newton-Raphton routine in + the Becke & Johnson functional. + +2009-10-01 08:30 marques + + * [r5923] src/mgga.c: This corrects the assertion failure of Fulvio + +2009-09-25 18:46 dstrubbe + + * [r5916] src/lda_x.c: *) In the file xc_oep.F90, an error message + is written if in parallel saying "Full OEP is not allowed with + the code parallel in states." However, the actual condition + implemented in the code is whether it is parallel at all. I'm not + sure if the condition, or the message, is wrong and should be + changed. + *) Improvements to documentation, comments, and output. + *) Added and corrected push_sub's. + *) Lengthened some single-letter variables. + *) Alphabetized module lists. + *) Made tests be called curvilinear instead of 'curvlinear' + +2009-09-24 12:47 marques + + * [r5909] configure.ac, src/functionals.c, src/gga.c, + src/gga_c_am05.c, src/gga_c_lm.c, src/gga_c_lyp.c, + src/gga_c_p86.c, src/gga_c_pbe.c, src/gga_c_pw91.c, + src/gga_perdew.c, src/gga_xc_b97.c, src/gga_xc_lb.c, src/lda.c, + src/lda_c_1d_csc.c, src/lda_c_2d_prm.c, src/lda_c_vwn.c, + src/lda_x.c, src/lda_x_1d.c, src/libxc_master.F90, src/mgga.c, + src/mgga_c_tpss.c, src/mgga_x_br89.c, src/mgga_x_m06l.c, + src/mgga_xc_vsxc.c, src/util.h, src/work_gga_becke.c, + src/work_mgga_c.c, src/xc.h, src/xc_f.c, + testsuite/xc-consistency.c, testsuite/xc-get_data.c: *) I started + changing the interface of libxc following a suggestion of + the devlopers of ELK. Hybrids should nto work, and some + functionals may + give segmentation faults. In any case, all tests are passed in my + machine + *) Added the functional of Esa and Stefano + *) Corrected the builddir in mk_functionals_list.pl + *) Added dummy integers to mpi_debug.F90 mpi_lib.F90 so that + compilers + stop complaining + *) Decreased the precision of the SIC test + +2009-09-09 08:32 marques + + * [r5886] src/lda_x_1d.c, src/libxc_master.F90, src/xc_f.c, + testsuite/Makefile.am: *) Now octopus is also aware of the 1D + exchange functional + *) Replaced the _init_exchanged and _init_correlation by a + simpler + _init_functl + *) Some more tests are passed in 4D. The exceptions are now the + open + systems tests and the periodic_systems/06-h2o_pol_lr.test + *) kpoints are now properly deallocated and the volume of the + unit + cell is also properly calculated in 1D and 2D + +2009-09-07 11:31 marques + + * [r5885] src/lda_x_1d.c, src/special_functions.c, src/test.c, + src/util.h: Now the 1D exchange functional seems to be working. + It includes both + spins,a nd the two forms of the interaction. I also implemented + Fxc. + +2009-08-28 23:24 dstrubbe + + * [r5870] src/xc.h: Some changes to documentation, comments, and + output. + +2009-08-28 10:23 marques + + * [r5869] src/Makefile.am, src/integrate.c, src/lda_c_1d_csc.c, + src/lda_c_vwn.c, src/lda_x_1d.c, src/mgga_x_br89.c, + src/special_functions.c, src/test.c, src/util.h, src/xc.h, + src/xc_config.h: *) Added the LDA exchange in 1D. This functional + is still not functional + *) Added the LDA correlation in 1D of Casula for a soft-Coulomb + interaction + *) Corrected the segmentation fault found by Fulvio + +2009-08-24 18:50 dstrubbe + + * [r5853] src/lda_x.c: *) Removed troublesome ' in comment in + libxc, in the file produced by the new script, as well as what I + believe is the source from which it arises + *) Made mk_functionals_list.pl refer to its actual name + *) Corrected spelling and punctuation in variable documentation + +2009-08-21 09:21 marques + + * [r5840] src/lda_c_1d_csc.c, src/libxc_master.F90, src/xc.h, + src/xc_f.c: Added the soft-Coulomb version of the 1d_csc lda + +2009-07-21 08:56 marques + + * [r5740] src/gga.c: This should solve the problem of David. + +2009-07-15 09:46 marques + + * [r5718] src/gga_c_lyp.c, src/gga_c_p86.c, src/gga_xc_lb.c, + src/mix_func.c, src/work_gga_becke.c, src/xc.h: Some more changes + related to the interface. I am sure that many of the non-standard + functionals have problems, so be careful. + +2009-07-15 09:23 marques + + * [r5717] src/gga.c, src/gga_c_am05.c, src/gga_c_lm.c, + src/gga_c_lyp.c, src/gga_c_p86.c, src/gga_c_pbe.c, + src/gga_c_pw91.c, src/gga_xc_lb.c, src/hyb_gga.c, src/lda.c, + src/libxc_master.F90, src/mgga_c_tpss.c, src/mix_func.c, + src/work_gga_x.c, src/xc.h, src/xc_f.c, + testsuite/xc-consistency.c, testsuite/xc-get_data.c: Now the GGas + are also done in blocks. The current interface is just a hack to + make things work. I hope to be able to fix it soon. + +2009-06-30 11:03 marques + + * [r5661] src/Makefile.am, src/gga_xc_edf1.c, src/gga_xc_lb.c, + src/gga_xc_xlyp.c, src/hyb_gga_xc_b3lyp.c, + src/hyb_gga_xc_o3lyp.c, src/lda.c, src/lda_c_xalpha.c, + src/lda_x.c, src/libxc_master.F90, src/work_lda.c, src/xc.h, + src/xc_f.c, testsuite/xc-consistency.c, testsuite/xc-get_data.c: + *) now the LDA works on vectors to a very low level + *) Rearranged th exchange and xalpha interfaces to make them more + standard + + Note that libxc at the moment has a inconsistent interface. I + will try to fix it soon. + +2009-06-30 09:47 marques + + * [r5660] TODO, src/gga_c_am05.c, src/gga_c_p86.c, + src/gga_perdew.c, src/gga_xc_lb.c, src/lda.c, src/lda_c_xalpha.c, + src/libxc_master.F90, src/mix_func.c, src/work_gga_becke.c, + src/work_mgga_c.c, src/xc.h, src/xc_f.c, + testsuite/xc-consistency.c, testsuite/xc-get_data.c: *) First + step in the dircetion of vector calling libxc in order to + optimize performance. + +2009-06-29 09:55 marques + + * [r5654] src/mgga_x_br89.c, src/test.c, src/work_mgga_x.c: Some + more corrections to the TP09 functional. I believe that it might + be working now. + +2009-06-25 15:43 marques + + * [r5636] src/mgga.c, src/mgga_x_br89.c, src/work_mgga_x.c, + src/xc_f.c: One can not run the PB09 thing, but, as expected, the + calculation for a finite system is kind of unstable... maybe it + is better for a solid ;) + +2009-06-25 14:34 marques + + * [r5634] src/libxc_master.F90, src/xc_f.c: Now the mggas are again + implemented in the code. + +2009-06-25 10:47 xavier + + * [r5633] m4/acx.m4, m4/fc_integer.m4: Now octopus can be cross + compiled. To do it, + he user has to pass two variables + to the configure script: + + FC_INTEGER_SIZE=4 + CC_FORTRAN_INT=int + + With this change octopus compiles in a Blue Gene/P. + +2009-06-24 15:19 marques + + * [r5631] src/mgga_x_br89.c: Forgot a factor. + +2009-06-24 15:18 marques + + * [r5630] src/mgga_x_br89.c, src/mgga_x_lta.c, src/mgga_x_m06l.c, + src/mgga_x_tau_hcth.c, src/mgga_x_tpss.c, src/mgga_xc_vsxc.c, + src/work_mgga_x.c, src/xc.h: Added the famous new functional of + Tran & Blaha. This was not tested, and there is a factor of 2 + that is bugging me... + +2009-06-24 14:26 marques + + * [r5629] src/Makefile.am, src/libxc_master.F90, src/mgga_x_br89.c, + src/mgga_x_br97.c: *) I made a mistake in the year of + becke-roussel + *) hopefully it now compiles + +2009-06-24 14:15 marques + + * [r5628] src/Makefile.am, src/gga.c, src/gga_c_am05.c, + src/gga_c_p86.c, src/gga_perdew.c, src/gga_xc_lb.c, + src/hyb_gga.c, src/lda.c, src/libxc_master.F90, src/mgga.c, + src/mgga_c_tpss.c, src/mgga_x_br97.c, src/mgga_x_lta.c, + src/mgga_x_m06l.c, src/mgga_x_tau_hcth.c, src/mgga_x_tpss.c, + src/mgga_xc_vsxc.c, src/test.c, src/work_gga_becke.c, + src/work_mgga_c.c, src/work_mgga_x.c, src/xc.h, src/xc_f.c, + testsuite/xc-consistency.c, testsuite/xc-get_data.c: *) + Hartree-Fock now works with spinors (I hope) + *) Added Becke-Roussel Meta-GGA. This one should be working asa + it was tested against a piny_md. + *) Because of that i had to change slightly the interface to + libxc + +2009-06-03 23:47 dstrubbe + + * [r5555] src: *) Changed svn:ignore properties to get rid of a + bunch of ? from svn status. + *) Added FromScratch = yes to some tests to remove warnings about + being unable to read from restart directory. + *) Added a Cl pseudopotential since I am using this frequently. + +2009-05-27 11:05 marques + + * [r5508] ChangeLog: Small changes required to compile octopus with + ifort + +2009-05-26 09:23 marques + + * [r5495] ChangeLog: *) Added a MemoryLimit variable. Octopus will + stop if this variable is set and if the total memory depasses its + value + *) Octopus was not compiling in 4D due to array mismatches + +2009-05-18 08:25 marques + + * [r5417] ChangeLog, src/libxc_master.F90, src/xc_f.c: Changes + necessary to compile octopus in single precision more. Alberto, + I guess I made a disaster in your opt-control code (that now will + not + wortk in single precision). The problem are the minimizing + routines that + do not have interfaces in single precision more. One should add + it... + +2009-05-13 10:54 marques + + * [r5380] src/gga_c_pbe.c, src/gga_x_pbe.c: Added a couple of + reparametrizations of the PBE by the group of Klaus Capelle. Note + that all the other combinations present in the paper can be + obatined by combining the already existing exchanges and + correlations of PBE and PBE_SOL. For example: GCGX = x_PBE_SOL + + c_PBE + +2009-04-21 07:52 marques + + * [r5297] testsuite/Makefile.am: I implemented the inversion of the + Kohn-Sham equations (static). It seems to work in simple cases, + but the iterative procedure does lack stability, and fails to + converge for more complicated densities... + +2009-04-17 12:56 marques + + * [r5257] ChangeLog, Makefile.am, configure.ac, m4/acx.m4, + m4/fcflags.m4, src/Makefile.am, src/functionals.c, + src/get_funcs.pl, src/gga.c, src/gga_c_am05.c, src/gga_c_lm.c, + src/gga_c_lyp.c, src/gga_c_p86.c, src/gga_c_pbe.c, + src/gga_c_pw91.c, src/gga_perdew.c, src/gga_x_2d_b86_mgc.c, + src/gga_x_am05.c, src/gga_x_b86.c, src/gga_x_b86_mgc.c, + src/gga_x_b88.c, src/gga_x_bayesian.c, src/gga_x_dk87.c, + src/gga_x_ft97.c, src/gga_x_g96.c, src/gga_x_lg93.c, + src/gga_x_mpbe.c, src/gga_x_optx.c, src/gga_x_pbe.c, + src/gga_x_pbea.c, src/gga_x_pw86.c, src/gga_x_pw91.c, + src/gga_x_rpbe.c, src/gga_x_wc.c, src/gga_xc_1w.c, + src/gga_xc_b97.c, src/gga_xc_edf1.c, src/gga_xc_lb.c, + src/gga_xc_xlyp.c, src/hyb_gga.c, src/hyb_gga_xc_b1wc.c, + src/hyb_gga_xc_b3lyp.c, src/hyb_gga_xc_b97.c, + src/hyb_gga_xc_o3lyp.c, src/hyb_gga_xc_pbeh.c, src/lca.c, + src/lca_lch.c, src/lca_omc.c, src/lda.c, src/lda_c_1d_csc.c, + src/lda_c_2d_amgb.c, src/lda_c_2d_prm.c, src/lda_c_hl.c, + src/lda_c_pw.c, src/lda_c_pz.c, src/lda_c_rpa.c, src/lda_c_vwn.c, + src/lda_c_wigner.c, src/lda_c_xalpha.c, src/lda_x.c, + src/lda_x_2d.c, src/lda_xc_teter93.c, src/libxc_master.F90, + src/mgga.c, src/mgga_c_tpss.c, src/mgga_x_lta.c, + src/mgga_x_m06l.c, src/mgga_x_tau_hcth.c, src/mgga_x_tpss.c, + src/mgga_xc_vsxc.c, src/mix_func.c, src/special_functions.c, + src/string_f.h, src/test.c, src/util.c, src/util.h, + src/work_gga_becke.c, src/work_gga_x.c, src/work_gga_x_2d.c, + src/work_lda.c, src/work_mgga_c.c, src/work_mgga_x.c, src/xc.h, + src/xc_f.c, src/xc_s.h, testsuite/Makefile.am, + testsuite/xc-consistency.c, testsuite/xc-get_data.c, + testsuite/xc-reference.pl, testsuite/xc-run_testsuite: Changed + the license with the script that Tobias sent. Thanks Tobias. + +2009-04-13 22:25 xavier + + * [r5202] Makefile.am: This fixes the problem with make distcheck. + +2009-03-31 09:29 marques + + * [r5133] ChangeLog, Makefile.am, src/Makefile.am: A couple more + fixes to the make environment + +2009-03-31 09:09 marques + + * [r5131] AUTHORS, NEWS, README, src/lda_x.c: Little corrections to + some stupid files + +2009-03-26 10:27 marques + + * [r5116] ChangeLog, Makefile.am, PACKAGING, configure.ac, + m4/acx.m4: Several details necessary to package libxc. + *) There is now a PACKAGING file + *) FCCPP explanation now appears in ./configure --help + *) Automatic generation of ChangeLog file -- maybe it would be + better to + separate it per years, but I don't know how to do it well... + +2009-03-20 14:40 marques + + * [r5092] src/lda_x_2d.c: Forgot this file... sorry. + +2009-03-20 12:00 marques + + * [r5091] DONE, src/lda_c_2d_prm.c, src/lda_c_hl.c, src/test.c: + Some more fixes, and now HL also has Kxc. + +2009-03-20 09:48 marques + + * [r5090] configure.ac, src/Makefile.am, src/lda_c_1d_csc.c, + src/lda_c_2d_amgb.c, src/lda_x.c, src/test.c, src/work_lda.c, + src/work_lda_1d.c: Reorganization of the LDAs of reduced + dimension. Now there is a common + driver routine in work_lda that handles 1, 2, and 3 dimensions. I + also + took the opportunity to add fxc and kxc to the 2d ldas (both + exchange + and amgb). I do not know if his is useful (someone interested in + hyperpolarizabilities of 2D systems?), but I added it for + completeness. + +2009-03-17 10:03 mjv500 + + * [r5086] src/lda_x.c: MIGUEL CHECK THIS stray float + +2009-03-16 08:33 marques + + * [r5085] src/gga_x_am05.c, src/gga_x_b86.c, src/gga_x_b86_mgc.c, + src/gga_x_b88.c, src/gga_x_bayesian.c, src/gga_x_dk87.c, + src/gga_x_ft97.c, src/gga_x_g96.c, src/gga_x_lg93.c, + src/gga_x_mpbe.c, src/gga_x_optx.c, src/gga_x_pbe.c, + src/gga_x_pbea.c, src/gga_x_pw86.c, src/gga_x_pw91.c, + src/gga_x_rpbe.c, src/gga_x_wc.c, src/lda_x.c, src/mgga_x_m06l.c, + src/test.c, src/util.h, src/work_gga_x.c: Som cleaning in the + ggas + +2009-03-11 09:00 marques + + * [r5078] src/string_f.h: It is easier to maintain a copy of this + file here, so that this library + is indeed independent. + +2009-03-11 08:58 marques + + * [r5077] src/Makefile.am, src/lda_c_vwn.c, src/xc_f.c: Now also + VWN has analytical Kxc + +2009-03-09 16:52 mjv500 + + * [r5069] configure.ac: had to fix dependencies after removal of + libstring_f - someone competent check this + +2009-03-09 14:08 marques + + * [r5067] DONE, src/lda_c_pw.c: Now pw also has analytical Kxc + +2009-03-09 12:30 marques + + * [r5065] DONE, src/test.c: I got rid of libstring_f. It was + replaced simply by a header file + (string_f.h) that is included twice in octopus (liboct_parser and + libxc/src). The main difference is that TO_C_STR passed to a + subroutien + instead of a function. + + I used the opportunity to fix the strcasestr definition that was + quite + broken. + +2009-03-09 10:16 marques + + * [r5064] src/lda_c_pz.c: Now Perdew-Zunger has analitic 3rd + derivatives. Due to that, the values + of the hyperpolarizability test changed slightly (4th digit) + +2009-03-09 09:11 marques + + * [r5063] src/lda.c, src/lda_c_rpa.c, src/lda_c_wigner.c, + src/lda_xc_teter93.c, src/test.c, src/util.h, src/work_lda.c: *) + Added support for the calculation of kxc (the 3rd derivative of + Exc) + in libxc. I also changed the interface to something more + reasonable. Now + we have, when spin is polarized, kxc(4) = (uuu, uud, udd, ddd) + + *) Now octopus does stop if one tries to run with fxc or kxc != + LDA. Up + to now it was simply ignoring fxc (i.e., it was performing an RPA + calculation). David and Xavier, please check this one out. + +2009-03-05 13:04 marques + + * [r5036] src/lda.c, src/lda_c_hl.c, src/lda_c_pw.c, + src/lda_c_pz.c, src/lda_c_rpa.c, src/lda_c_vwn.c, + src/lda_c_wigner.c, src/lda_c_xalpha.c, src/lda_xc_teter93.c, + src/test.c, src/util.h, src/work_lda.c, src/xc.h: *) Simplified a + bit more the interface to the routines. + *) Added support for spin-unpolarized Kxc, and added the third + derivatives of wigner and rpa corelation functionals. + +2009-03-05 09:13 marques + + * [r5035] src/lda_c_hl.c, src/lda_c_pw.c, src/lda_c_pz.c, + src/lda_c_rpa.c, src/lda_c_vwn.c, src/lda_c_wigner.c, + src/lda_xc_teter93.c, src/work_lda.c: Cleaned a bit the LDAs. + +2009-02-25 17:40 xavier + + * [r5001] src/Makefile.am, src/lda_c_2d_prm.c, + src/lda_c_2d_prm08.c, src/libxc_master.F90, src/xc.h, src/xc_f.c, + testsuite/xc-consistency.c: Due to the 31 character limitation I + had to rename the lda_c_2d_prm08 functional + to lda_c_2d_prm. Miguel, can you check that I did it correctly? + +2009-02-25 10:25 marques + + * [r4998] src/Makefile.am, src/lda_c_1d_csc.c, + src/libxc_master.F90, src/test.c, src/work_lda_1d.c, src/xc.h, + src/xc_config.h, src/xc_f.c: I implemented the 1D correlation LDA + of Barone's group. Note that this + has not been tested, and that there is the exchange missing... + +2009-02-06 00:23 dstrubbe + + * [r4925] m4/acx.m4: The macro that checks for "very long lines" + used a test program with a line that was very long, but still not + nearly so long as some lines generated by the ALLOCATE + preprocessor macro in the code. The PGI 8.0-1 Fortran compiler + passed that test in the configure script since it could handle + 140 characters in a line, but could not handle 270 characters. I + approximately tripled the length of that line in the test program + to 433 characters, so that now PGI is considered not to accept + long lines. + +2009-01-05 10:41 marques + + * [r4848] DONE, TODO, src/Makefile.am, src/gga_x_bayesian.c: Added + a new form for the exachange enhancement factor that comes from a + bayesian best fit procedure + +2008-12-02 08:38 marques + + * [r4809] src/hyb_gga_xc_b1wc.c: Added a new hybrid, + XC_HYB_GGA_XC_mPW1K (modified Perdew-Wang for + kinetics) + +2008-12-01 09:58 marques + + * [r4808] TODO, src/gga_xc_b97.c, src/hyb_gga_xc_b3lyp.c, + src/hyb_gga_xc_b97.c: Added the Schmider-Becke 98 Hybrid GGA. + This is again a + reparametrization of the Becke-97 form. There are 6 versions of + it in + that paper, and I included them all. Although the functional is a + hybrid, I had to include also the "pure" GGA versions. The + keywords are: + + for the "pure" GGAs + XC_GGA_XC_SB98_1a, XC_GGA_XC_SB98_1b, XC_GGA_XC_SB98_1c, + XC_GGA_XC_SB98_2a, XC_GGA_XC_SB98_2b, XC_GGA_XC_SB98_2c + + to be used as a hybrid + XC_HYB_GGA_XC_SB98_1a, XC_HYB_GGA_XC_SB98_1b, + XC_HYB_GGA_XC_SB98_1c + XC_HYB_GGA_XC_SB98_2a, XC_HYB_GGA_XC_SB98_2b, + XC_HYB_GGA_XC_SB98_2c + +2008-11-28 15:40 marques + + * [r4803] TODO, src/Makefile.am, src/gga_xc_xlyp.c, + src/hyb_gga_xc_b1wc.c, src/hyb_gga_xc_b3lyp.c, + src/hyb_gga_xc_b3p86.c, src/hyb_gga_xc_b3pw91.c, + src/hyb_gga_xc_o3lyp.c, src/hyb_gga_xc_x3lyp.c: Cleaned up a bit + the hybrid GGAs, and added some more hybrids on the + process. Let me see if I don't forget any: XC_HYB_GGA_XC_mPW3PW, + XC_HYB_GGA_XC_B1LYP, XC_HYB_GGA_XC_B1PW91, XC_HYB_GGA_XC_mPW1PW, + XC_HYB_GGA_XC_mPW3LYP + +2008-11-28 10:07 marques + + * [r4801] src/gga_x_2d_b86_mgc.c, src/gga_x_pw91.c: *) Fixed the + parameters of mPW91. I believe that this functional is + correct now + *) Added the correct parameters for the 2D B86 MGC functional + +2008-11-27 10:39 marques + + * [r4795] testsuite/hyb_gga_xc_b3lyp.data: There was a small but in + b3lyp that was solved. Now libxc gives exactly + the same thing as the repository, so I submit the repository data + +2008-11-27 10:36 marques + + * [r4794] TODO, src/Makefile.am, src/gga.c, src/gga_xc_1w.c, + src/gga_xc_edf1.c, src/hyb_gga.c, src/hyb_gga_xc_b1wc.c, + src/hyb_gga_xc_b3lyp.c, src/hyb_gga_xc_b3p86.c, + src/hyb_gga_xc_b3pw91.c, src/hyb_gga_xc_b97.c, + src/hyb_gga_xc_o3lyp.c, src/hyb_gga_xc_pbeh.c, + src/hyb_gga_xc_x3lyp.c, src/mix_func.c, src/xc.h: *) Rewrote the + way that functionals that are linear combinations of + others are handled. + *) Added three new GGAs of this type that were constructed for + water: + XC_GGA_XC_PBE1W, XC_GGA_XC_MPWLYP1W, and XC_GGA_XC_PBELYP1W + +2008-11-26 10:24 marques + + * [r4793] src/hyb_gga_xc_b97.c: Sorry, there was a misspel that + broke the compilation + +2008-11-26 09:43 marques + + * [r4792] DONE, TODO, src/Makefile.am, src/gga.c, src/gga_xc_b97.c, + src/hyb_gga.c, src/hyb_gga_xc_b1wc.c, src/hyb_gga_xc_b97.c, + src/libxc_master.F90, src/util.h, src/work_gga_becke.c, src/xc.h, + src/xc_f.c, testsuite/xc-consistency.c, testsuite/xc-get_data.c, + testsuite/xc-reference.pl: Added the hybrid functionals + corresponding to the becke 97 GGAs. They + are: XC_HYB_GGA_XC_B97, XC_HYB_GGA_XC_B97_1, XC_HYB_GGA_XC_B97_2, + XC_HYB_GGA_XC_B97_K, and XC_HYB_GGA_XC_B97_3 + +2008-11-25 10:35 marques + + * [r4788] src/work_gga_becke.c: Forgot this file... + +2008-11-25 10:31 marques + + * [r4787] src/Makefile.am, src/gga_xc_b97.c, src/gga_xc_hcth.c, + src/test.c: Rewrote the B97 class of functionals. Now it also + includes fxc and some + mroe elements of this family. BTW, Xavier, included is the + functional of + Grimme that you sent me long ago... of course that to use it, one + should + also add the vdW term (trivial, actually) + +2008-11-20 15:18 marques + + * [r4778] src/gga_xc_hcth.c, testsuite/gga_xc_b97_1.data, + testsuite/gga_xc_b97_2.data: Added two other variants of Becke 97 + +2008-11-20 14:50 marques + + * [r4777] src/gga_xc_hcth.c, testsuite/gga_xc_b97.data: Added Becke + 97 functional + +2008-11-14 13:49 marques + + * [r4768] m4/fcflags.m4: Small things I found while trying to + compile in the new IBM Power 6 of CNRS + +2008-10-22 09:52 marques + + * [r4697] src/mgga_x_lta.c, src/work_mgga_x.c, src/xc_f.c: Some + bugs in the LTA corrected. I think one-shot calculations with LTA + are fine, but + self-consistent calculations give nonsense... + +2008-10-22 07:06 marques + + * [r4695] src/mgga_x_lta.c, src/mgga_xc_vsxc.c, src/test.c, + src/work_mgga_c.c, src/work_mgga_x.c, testsuite/xc-consistency.c: + *) Make check should work now. Can you please check, David? + *) Some bug fixes in the mggas, but there are still issues + +2008-10-20 14:21 xavier + + * [r4686] src/xc_f.c: The name of a libxc function was too long for + fortran. + +2008-10-20 13:21 marques + + * [r4685] src/libxc_master.F90, src/work_mgga_c.c: I implemented + the self-consistent MGGA functionals. However, calculatiosn with + them do not + converge! I am not sure if it is a bug somewhere, or numerical + instabilities. I am inclined to the + first option, of course, but I am not really sure. + +2008-10-20 09:39 marques + + * [r4683] src/xc.h, src/xc_f.c: Sorry for the mess: it should + compile now! + +2008-10-20 09:32 marques + + * [r4682] src/Makefile.am, src/gga_x_2D_b86_mgc.c, + src/gga_x_2d_b86_mgc.c, src/lda_c_2D_amgb.c, + src/lda_c_2D_prm08.c, src/lda_c_2d_amgb.c, src/lda_c_2d_prm08.c, + src/work_gga_x_2d.c: Cleanup the mess of 2d and 2D. Now, + everything is lowercase. + +2008-10-20 09:23 marques + + * [r4681] src/Makefile.am, src/gga_x_2D_b86_mgc.c, + src/lda_c_2D_amgb.c, src/lda_c_2D_prm08.c, src/lda_c_amgb.c, + src/lda_c_prm08.c, src/work_gga_x_2d.c: Added 2d to the + functionals in 2d + +2008-10-20 09:12 marques + + * [r4679] src/Makefile.am, src/gga_x_2D_b86_mgc.c, + src/mgga_xc_vsxc.c, src/test.c: I added support for mgga + calculations in the one_shot CalculationMode. Note that we can + _not_ dor + self-consistent mgga calculations at the moment. + I also added a new 2D functional that is going to be submitted + soon. + +2008-10-17 16:54 marques + + * [r4671] src/Makefile.am: Sorry, 2D GGAs will only go in the near + future ;)) Now it should + compile. + +2008-10-17 14:55 marques + + * [r4670] src/Makefile.am, src/mgga_x_gvt4.c, src/mgga_xc_vsxc.c, + src/util.h, src/work_mgga_c.c: *) Added support for the vsxc + correlation functional. Again, I have to + repeat that meta-GGAs have not been properly tested! + +2008-10-08 13:00 marques + + * [r4615] src/gga_perdew.c, src/mgga_c_tpss.c, src/work_mgga_x.c: + Some small fixes + +2008-10-07 07:45 marques + + * [r4598] src/Makefile.am, src/mgga_x_gvt4.c, src/mgga_x_m06l.c, + src/mgga_x_tau_hcth.c, src/test.c: Added the exchange part of the + tau-HCTH functional + +2008-10-06 14:22 marques + + * [r4591] src/Makefile.am, src/mgga_x_gvt4.c, src/mgga_x_m06l.c, + src/util.h: Added the exchange part of VSXC (called GVT4 for + whatever reason). + +2008-10-06 12:46 marques + + * [r4590] src/mgga_x_m06l.c: *) Changed the copyright notice to + something more "correct" + +2008-10-06 12:43 marques + + * [r4589] src/Makefile.am, src/gga_x_pbe.c, src/mgga_x_lta.c, + src/mgga_x_m06l.c, src/mgga_x_tpss.c, src/test.c, src/util.h, + src/work_mgga_x.c: *) Exchange in MGGA now is written in terms of + x and t + *) Added the exchange part of the M06l functional + +2008-10-01 15:02 marques + + * [r4581] src/mgga_c_tpss.c, src/mgga_x_tpss.c, src/test.c, + src/util.h, src/work_mgga_x.c: I have implemented the correlation + functional of TPSS. I made the usual + tests for the derivatives and they seem to work. However, I would + consider this functional highly experimental ;) + +2008-09-17 10:02 marques + + * [r4528] src/mgga_x_lta.c, src/mgga_x_tpss.c, src/test.c, + src/work_mgga_x.c: I believe that now the exchange in TPSS is + working. It has been + transformed to the new interface. It still has to be tested in + real + circunstances, of course. + +2008-09-16 14:51 marques + + * [r4523] src/mgga.c, src/mgga_x_lta.c, src/work_mgga_x.c: I now + believe that the LTA is working. + +2008-08-25 13:22 marques + + * [r4512] src/work_mgga_x.c: Sorry, forgot this detail + +2008-08-25 13:08 marques + + * [r4511] src/Makefile.am, src/functionals.c, src/mgga.c, + src/mgga_c_tpss.c, src/mgga_x_lta.c, src/mgga_x_tpss.c, + src/work_mgga_x.c, src/xc.h, src/xc_f.c, testsuite/xc-get_data.c: + Initial support for meta-GGAs. For now, I only added the local + tau approximation, but without real testing. I will proceed to + add also the TPSS. Note that for now, octopus is not able to use + these functionals. + +2008-08-25 09:19 marques + + * [r4510] src/gga_c_lm.c, src/lda_c_hl.c: *) added von Barth and + Hedin LDA + *) Now langreth & Mehl depends on the vBH LDA as it should + +2008-08-21 14:12 marques + + * [r4504] DONE, TODO, src/Makefile.am, src/gga_c_lm.c: Added + Langreth & Mehl GGA correlation + +2008-06-13 11:09 marques + + * [r4277] src/Makefile.am, src/lda_c_prm08.c, src/libxc_master.F90, + src/xc.h, src/xc_f.c, testsuite/xc-consistency.c: *) Added a 2D + correlation functional by Esa, Stefano and me to the + library. + +2008-05-30 07:45 marques + + * [r4208] src/util.h: Some people were having problems with the + definition of M_E. Apparently, + it is not standard (ansi) C, so we redefine it in case we are + asked + strict ansi + +2008-05-07 08:56 marques + + * [r4170] DONE, src/gga_perdew.c: Small problem with the PBE + solved. + +2008-05-07 08:46 marques + + * [r4169] src/gga_c_pbe.c, src/gga_c_pw91.c, src/gga_perdew.c, + src/util.h, testsuite/xc-consistency.c: Implemented the second + derivatives of the PBE xc functional. There seems + to be still a small error when for v2rho2 for spin unpolarized. + +2008-05-07 07:31 marques + + * [r4168] src/Makefile.am, src/hyb_gga_xc_b1wc.c: Added new hybrid + functional (B1WC) + +2008-04-30 13:18 marques + + * [r4128] DONE, src/gga_x_ft97.c, src/work_gga_x.c: Now also FT97 + gets second derivatives. This took me almost a day to do :(( + +2008-04-29 13:41 marques + + * [r4124] src/gga_x_am05.c: AM05 (exchange part) gets second + derivatives also + +2008-04-29 11:41 marques + + * [r4123] src/gga_c_pbe.c, src/gga_x_wc.c: Secon derivatives of the + WC functional + +2008-04-29 10:05 marques + + * [r4122] src/Makefile.am, src/gga_c_am05.c, src/gga_c_pbe.c, + src/gga_x_am05.c, src/gga_x_lg93.c, src/gga_x_mpbe.c, + src/gga_x_pbe.c, src/gga_x_pw86.c, src/gga_x_pw91.c, src/util.h: + Added two new functionals: mPBE and xPBE (both exchange and + correlation) + +2008-04-29 08:23 marques + + * [r4121] DONE, src/lda_xc_teter93.c: Now also Teter has second + derivatives + +2008-04-29 07:56 marques + + * [r4120] DONE, src/lda_c_pw.c: Now also PW92 is OK (including the + second derivatives) + +2008-04-28 14:29 marques + + * [r4117] DONE, src/lda_c_hl.c, src/lda_c_pz.c, src/lda_c_vwn.c: + Added the second derivatives to Perdew-Zunger. + +2008-04-28 14:04 marques + + * [r4116] src/hyb_gga_xc_b3lyp.c, src/lda_c_vwn.c, src/xc.h: *) Now + B3LYP has the correct definition of the VWN spin interpolation + (correct from + the point of view of Gaussian implementation) + +2008-04-28 13:15 marques + + * [r4115] src/lda_c_hl.c, src/lda_c_vwn.c: *) Added second + derivatives of vwn functional + +2008-04-28 11:45 marques + + * [r4114] DONE, src/Makefile.am, src/lda_c_hl.c, src/lda_c_rpa.c, + src/lda_c_wigner.c, src/util.h, src/work_lda.c, src/xc_config.h, + testsuite/xc-consistency.c: *) Code should now compile in single + precision mode + *) I am rewritting the LDA part. I created a system similar to + the exchange in GGA, + where one only has to write a formula in terms of rs and zeta. + *) Added the second derivatives os a number of LDA functionals. + +2008-04-28 08:12 marques + + * [r4112] src/libxc_master.F90, src/xc.h, src/xc_f.c: Commented all + references to the PRM functional that is currently ni the + drawing board. Hopefully, the problems will be solved, and I will + commit + it soon ;) + +2008-04-28 07:53 marques + + * [r4111] DONE, src/gga.c, src/gga_x_b86.c, src/gga_x_b86_mgc.c, + src/gga_x_b88.c, src/gga_x_dk87.c, src/gga_x_g96.c, + src/gga_x_lg93.c, src/gga_x_optx.c, src/gga_x_pbe.c, + src/gga_x_pbea.c, src/gga_x_pw86.c, src/gga_x_rpbe.c, src/lda.c, + src/lda_c_amgb.c, src/lda_c_pw.c, src/lda_x.c, + src/libxc_master.F90, src/xc.h, src/xc_f.c, + testsuite/Makefile.am, testsuite/xc-consistency.c, + testsuite/xc-run_testsuite: *) Added a run mode that allows for + one-shot calculations. This means + that we can do the self-consistent cycle with one xc functional, + and + then use that density and wave-functions to calculate the energy + using + another functional. Note that this does not work in HF or with + Hybrid + functionals! This also requires some cleaning in libxc, so do not + be + surprised if it segfaults (see libxc/DONE file for a resume of + what is + working in a clean way) + + *) Added a lot of fxc for exchange GGA functionals. Now the next + task + will be the fxc for the LDA correlation functionals. + +2008-04-18 09:06 xavier + + * [r4080] Makefile.am: Incorporated spglib as a external library + (http://spglib.wiki.sourceforge.net/), a C code to search + symmetries + of crystals. All source files are a clean copy of version 91 from + the + svn repository. + +2008-04-02 16:54 marques + + * [r4029] src/gga_x_pbea.c: Macro call missing. + +2008-04-02 14:21 marques + + * [r4024] src/Makefile.am, src/gga_x_pbea.c: Added new functional + Madsen 07. This was sent to me by the author. + +2008-04-02 14:14 marques + + * [r4023] src/gga_c_am05.c, testsuite/xc-consistency.c: I believe + that now the implementation is correct. It does give the same + energy as the reference implementation I have + from the authors, and xc-consistency gives me a small error, + which probably means that the derivatives are correct. + +2008-03-31 20:19 marques + + * [r3992] src/gga_c_am05.c, src/gga_x_am05.c, src/work_gga_x.c: + Added a first implementation of AM05 correlation. This is still + not + working. I again have some doubts concerning the spin-polarized + implementation, and I am waiting for the authors to answer mye + mail + before finishing my implementation. + +2008-03-31 19:59 marques + + * [r3991] src/Makefile.am: I also forgot this file. Let us see if + it now compiles. + +2008-03-31 14:41 marques + + * [r3987] m4/acx.m4, m4/fcflags.m4: I believe that I forgot these + files. + +2008-03-31 14:38 marques + + * [r3986] configure.ac: This should solve the problem of Xavier + with the g95 build. It is not + pretty though, and I would be happy if one of you automake + experts could + clean it... + +2008-03-28 14:16 marques + + * [r3961] src/special_functions.c: Forgot this file + +2008-03-28 14:02 marques + + * [r3960] configure.ac, m4/gsl.m4, src/Makefile.am, + src/gga_x_am05.c, src/util.h, src/work_gga_x.c, + testsuite/Makefile.am, testsuite/xc-consistency.c: *) Removed + dependency on the GSL. By other words, I reimplemented the + Lambert function I needed. + *) I believe that the exchange part of AM05 is now working + *) Some more work on fxc in the GGAs. Now xc-consistency also + calculates + the finite difference fxc to test against analitical values. + There are + still some issues with spin in this routine + +2008-03-26 15:34 xavier + + * [r3950] testsuite/Makefile.am: Because of the linking order, + sometimes gsl couldn't be found. + +2008-03-22 16:48 xavier + + * [r3926] m4/gsl.m4: gsl.m4 is also required by libxc. + +2008-03-18 13:55 xavier + + * [r3907] configure.ac: * Added a check for the inline keyword in + libxc. + +2008-03-18 12:57 marques + + * [r3905] configure.ac, src/Makefile.am, src/gga_x_am05.c, + testsuite/Makefile.am, testsuite/xc-reference.pl: Added + _experimental_ and _incomplete_ support for the AM05 functional. + For now, there is only exchange (correlation is actually simple), + and + I have no idea on how to write it for spin-polarized systems. I + have + contacted the authors of the functional to sort out the issues. + + As AM05 needs a lambert function, I had to add a dependence on + the GSL. + I plan to remove it further on (I will have to copy the + function...) + +2008-03-17 11:16 marques + + * [r3900] src/gga.c, src/gga_x_b86.c, src/gga_x_b86_mgc.c, + src/gga_x_b88.c, src/gga_x_dk87.c, src/gga_x_g96.c, + src/gga_x_lg93.c, src/gga_x_optx.c, src/gga_x_pbe.c, + src/gga_x_pw86.c, src/gga_x_pw91.c, src/gga_x_rpbe.c, + src/gga_x_wc.c, src/gga_xc_edf1.c, src/gga_xc_xlyp.c, + src/hyb_gga.c, src/libxc_master.F90, src/mgga_c_tpss.c, + src/work_gga_x.c, src/xc.h, src/xc_f.c, + testsuite/xc-consistency.c, testsuite/xc-get_data.c, + testsuite/xc-reference.pl: First attempt at fxcs using GGAs. For + now, two functionals are + implemented: B88 and LB93. There are still some issues for spin + _unpolarized_, as I am not sure of some factors of 2. + +2008-03-10 08:11 xavier + + * [r3854] src/Makefile.am: This should fix the compilation problems + in libxc. + +2008-03-10 00:43 xavier + + * [r3852] src/Makefile.am, src/libxc.F90, src/libxc_master.F90: + Having both libxc.F90 and libxc.f90 confused automake, so I + renamed libxc.F90 to libxc_master.F90 (for lack of a better + name). + +2008-03-09 23:24 xavier + + * [r3851] src/Makefile.am: File libxc.F90 was also missing from + Makefile.am. + +2008-03-09 09:49 xavier + + * [r3845] src/Makefile.am: One libxc file was missing from the + distribution. + +2008-03-07 08:24 marques + + * [r3835] src/Makefile.am, src/xc_s.h: Let's see if aramis is able + to compile in single precision mode like + this + +2008-03-06 11:59 xavier + + * [r3831] src/Makefile.am: Libxc still had problem with vpaths, + this fixes it (I don't know if it + is the correct way to do it, though). + +2008-03-06 08:55 marques + + * [r3829] src/Makefile.am: I hope this solves the compilation issue + in pepita. I hate this vpath + thing!!! + +2008-03-05 14:42 marques + + * [r3822] src/Makefile.am: I hope this fixes the automatic + compilation + +2008-03-05 08:38 marques + + * [r3818] src/Makefile.am: Dependency missing in the makefile. Hope + this solves your problem, + Alberto... + +2008-03-04 09:26 marques + + * [r3809] configure.ac, src/Makefile.am, src/functionals.c, + src/get_funcs.pl, src/gga.c, src/gga_c_lyp.c, src/gga_c_p86.c, + src/gga_c_pbe.c, src/gga_c_pw91.c, src/gga_perdew.c, + src/gga_x_b86.c, src/gga_x_b86_mgc.c, src/gga_x_b88.c, + src/gga_x_dk87.c, src/gga_x_ft97.c, src/gga_x_g96.c, + src/gga_x_lg93.c, src/gga_x_optx.c, src/gga_x_pbe.c, + src/gga_x_pw86.c, src/gga_x_pw91.c, src/gga_x_rpbe.c, + src/gga_x_wc.c, src/gga_xc_edf1.c, src/gga_xc_hcth.c, + src/gga_xc_lb.c, src/gga_xc_xlyp.c, src/hyb_gga.c, + src/hyb_gga_xc_b3lyp.c, src/hyb_gga_xc_b3p86.c, + src/hyb_gga_xc_b3pw91.c, src/hyb_gga_xc_o3lyp.c, + src/hyb_gga_xc_pbeh.c, src/hyb_gga_xc_x3lyp.c, src/lca.c, + src/lca_lch.c, src/lca_omc.c, src/lda.c, src/lda_c_amgb.c, + src/lda_c_hl.c, src/lda_c_pw.c, src/lda_c_pz.c, src/lda_c_rpa.c, + src/lda_c_vwn.c, src/lda_c_wigner.c, src/lda_c_xalpha.c, + src/lda_x.c, src/lda_xc_teter93.c, src/libxc.F90, + src/libxc.f90.in, src/mgga.c, src/mgga_c_tpss.c, + src/mgga_x_tpss.c, src/util.c, src/util.h, src/work_gga_x.c, + src/xc.h, src/xc_config.h, src/xc_config.h.in, src/xc_f.c, + src/xc_s.h: Now we can compile libxc in both float and double. + This is accomplish by + adding _s_ to the name of the single precision routines. I did + not find + a way of overloading the routines in Fortran in order to provide + for a + single interface to both single and double. + + P.S. Some tests are failing in my machine in single precision + (apparently unrelated to libxc), and the wavepacket test is + failing (in + double precision) + +2008-03-03 09:04 marques + + * [r3802] configure.ac, src/gga.c, src/gga_c_lyp.c, + src/gga_c_p86.c, src/gga_c_pbe.c, src/gga_c_pw91.c, + src/gga_perdew.c, src/gga_x_b86.c, src/gga_x_b86_mgc.c, + src/gga_x_b88.c, src/gga_x_dk87.c, src/gga_x_ft97.c, + src/gga_x_g96.c, src/gga_x_lg93.c, src/gga_x_optx.c, + src/gga_x_pbe.c, src/gga_x_pw86.c, src/gga_x_pw91.c, + src/gga_x_rpbe.c, src/gga_x_wc.c, src/gga_xc_edf1.c, + src/gga_xc_hcth.c, src/gga_xc_lb.c, src/gga_xc_xlyp.c, + src/hyb_gga.c, src/hyb_gga_xc_b3lyp.c, src/hyb_gga_xc_b3p86.c, + src/hyb_gga_xc_b3pw91.c, src/hyb_gga_xc_o3lyp.c, + src/hyb_gga_xc_pbeh.c, src/hyb_gga_xc_x3lyp.c, src/lca.c, + src/lca_lch.c, src/lca_omc.c, src/lda.c, src/lda_c_amgb.c, + src/lda_c_hl.c, src/lda_c_pw.c, src/lda_c_pz.c, src/lda_c_rpa.c, + src/lda_c_vwn.c, src/lda_c_wigner.c, src/lda_c_xalpha.c, + src/lda_x.c, src/lda_xc_teter93.c, src/libxc.f90, + src/libxc.f90.in, src/mgga.c, src/mgga_c_tpss.c, + src/mgga_x_tpss.c, src/test.c, src/util.c, src/util.h, + src/work_gga_x.c, src/xc.h, src/xc_config.h.in, src/xc_f.c: Now + we can compile libxc either in single or in double precision. I + did + not like the previous way it was done, i.e, but having _dp and + _sp in + the routines and doing all the necessary conversions. I think + that this + is cleaner. + +2008-02-20 09:31 marques + + * [r3728] src/gga_x_pw91.c: Added the mPW functional. I still have + some doubts concerning the + constants in the functional (they were taken from + http://scsg20.unige.ch/~dulak/files/functionals.pdf), so they + will + eventually have to be checked. + +2008-02-16 14:30 xavier + + * [r3697] src/gga_c_pbe.c, src/gga_c_pw91.c, src/gga_perdew.c: The + declaration of "inline void" functions causes problems with the + Sun C compiler. + + Patch submited by Marcin Dulak. + +2008-02-15 13:37 marques + + * [r3694] src/Makefile.am, src/lda_xc_teter93.c: *) Added support + for Ilya Tokatly's pressure as a measure of + localization. For this I reorganized the output layer of octopus. + I hope + it wortks ;) + + *) Added the teter 93 functionals to libxc + +2008-02-12 11:24 marques + + * [r3680] src/Makefile.am: My previous commit was not correct: + xc_funcs.h should be installed, but + not included in the distribution. + +2008-02-12 11:18 marques + + * [r3679] src/Makefile.am: xc_funcs.h was not being installed. + +2008-01-30 10:10 marques + + * [r3667] src/gga_perdew.c: Bug correction from Jussi Enkovaara: + + I found a small bug in the PBE of libxc. In the function + "perdew_params" + in the file "gga_perdew.c" the total gradient "pt->gdmt" + + /* get gdmt = |nabla n| */ + pt->gdmt = sigma[0]; + if(pt->nspin == XC_POLARIZED) pt->gdmt += 2.0*sigma[1] + + sigma[2]; + + can become a small negative number (in my antiferromagnetic + system ~ -1e-20), and + the following square root produces then NaN. I fixed that with a + simple if + statement i.e. + + /* get gdmt = |nabla n| */ + pt->gdmt = sigma[0]; + if(pt->nspin == XC_POLARIZED) pt->gdmt += 2.0*sigma[1] + + sigma[2]; + if(pt->gdmt < 0.0) pt->gdmt = MIN_GRAD*MIN_GRAD; + pt->gdmt = sqrt(pt->gdmt); + +2008-01-23 13:53 marques + + * [r3660] src/xc_f.c: Another memory leak fixed, this time in + xc_f90_lda_end + +2008-01-22 16:45 marques + + * [r3653] src/lda.c: Another bug found by valgrind. Xavier, can you + check this one? + +2008-01-09 13:12 marques + + * [r3638] testsuite/gga_c_pw91.data, testsuite/xc-consistency.c, + testsuite/xc-get_data.c: *) Checking of hybrids is now performed + *) The guys at the functional repository now get the same PW91 + functional as me, so I can commit their test file + +2007-11-26 16:05 acastro + + * [r3607] src/gga_c_pbe.c: The xlc IBM compiler complained about + using global variables within + "inline" functions. I just made a copy of the affected constant + definitions within the function bodies. + +2007-11-23 20:39 xavier + + * [r3597] configure.ac, m4/acx.m4, testsuite/xc-get_data.c: * Now + instead of using an integer of the size of a C pointer, there + exists an opaque c_pointer_t type that has two methods + associated, + set_null and is_null. This is the same we have already for libxc. + + * For the parser blocks there is a different type, block_t. + + * The only exception is xc_functl_write_info where a pointer is + used + both as a pointer and an integer. The variable is defined as + integer(SIZEOF_VOIDP), but we should fix it. + + * Removed the check for the non standard type 'long long' as a + candidate for equivalence fortran integer, in theory this could + be a + problem, but is very likely that if a fortran integer is 8 bytes + also + a 'long' is 8 bytes. A better solution would be to check first if + long + long or int64_t are available, and then use them. + + * Removed the check for the size of a pointer in C, instead the + size + of void * is measured using the standard macro. + + With this changes octopus compiles with gcc -pedantic-errors. + +2007-11-23 12:49 acastro + + * [r3593] src/test.c: I was trying to compile in an opteron using + the Portland C compiler, + and I got problems with the SSE2 extensions ("Illegal + instructsion"?). I changed a bit the beak.h preprocessor test to + avoid + its usage. But Xavier, you may want to take a look at that + change. + + The rest of the files are just "//" style comments, which the + Portland + C compiler does not accept. --This line, and those below, will be + ignored-- + + M src/beak/beak.h + M external_libs/libnbc/nbc_ialltoall.c + M external_libs/libnbc/nbc.c + M external_libs/libnbc/nbc_ibcast.c + M external_libs/libnbc/nbc_iallreduce.c + M libxc/src/test.c + +2007-11-23 11:19 xavier + + * [r3588] m4/acx.m4: * The variable ResponseMethod now validates + its value. + + * The C minimizer code was doing some very illegal things with + pointers, now it is legal C89 code (at least for gcc -pedantic). + + * Removed some compiler warnings. + +2007-11-22 12:47 marques + + * [r3586] TODO: Updated TODO list of libxc + +2007-11-22 12:43 marques + + * [r3585] src/Makefile.am, src/hyb_gga_xc_pbeh.c, + src/hyb_gga_xc_x3lyp.c: Two more hybrid functionals: PBE0 and + X3LYP. I have still a list of + another 7 hybrids to include. + +2007-11-19 16:43 marques + + * [r3553] src/gga_c_lyp.c, src/gga_c_pbe.c, src/gga_x_b86.c, + src/gga_x_b86_mgc.c, src/gga_x_b88.c, src/gga_x_dk87.c, + src/gga_x_ft97.c, src/gga_x_g96.c, src/gga_x_lg93.c, + src/gga_x_optx.c, src/gga_x_pbe.c, src/gga_x_pw86.c, + src/gga_x_pw91.c, src/gga_xc_hcth.c, src/hyb_gga.c, + src/lda_c_amgb.c, src/lda_c_hl.c, src/lda_c_pw.c, src/lda_c_pz.c, + src/lda_c_rpa.c, src/lda_c_vwn.c, src/lda_c_wigner.c, + src/lda_x.c: Made the references more uniform. + +2007-11-19 14:33 marques + + * [r3551] src/hyb_gga_xc_o3lyp.c: Forgot this file. + +2007-11-19 14:32 marques + + * [r3550] src/Makefile.am, src/functionals.c, src/get_funcs.pl, + src/hyb_gga.c, src/hyb_gga_b3pw91.c, src/hyb_gga_xc_b3lyp.c, + src/hyb_gga_xc_b3p86.c, src/hyb_gga_xc_b3pw91.c, src/libxc.f90, + src/xc_f.c: Now octopus can use hybrid functionals. The exact + exchange part is + handled within the OEP, while the rest is taken care by libxc. I + found + very hard to test these functionals. Quantum chemical + calculations use + basis sets and full potential. The ideal would be a 3D jellium + sphere, + or something like that. If you know of one such calculation... + + I will now try to implement it using Hatree-Fock for the exact + exchange + part. + +2007-11-16 16:43 marques + + * [r3528] src/Makefile.am, src/get_funcs.pl, src/gga.c, + src/gga_xc_lb.c, src/hyb_gga.c, src/hyb_gga_b3pw91.c, src/util.h, + src/xc.h: Initial support for hybrids. I also implemented B3PW91, + which + historically was the first hybrid (I think). This is not at all + tested, + of course. + +2007-11-15 15:58 marques + + * [r3521] src/get_funcs.pl, src/gga.c, src/gga_xc_lb.c, + src/libxc.f90, src/xc.h, src/xc_f.c: The LB94 functionals is now + working. There are two versions, one + modified and another unmodified. The unmodified gives the same + results + as my 2001 calculations. I did not test the modified version, + though. + + I made some more cosmetic arrangements, like adding the "_m" and + "_t" + suffixes to libxc.F90 + +2007-11-14 16:14 lorenzen + + * [r3512] m4/acx.m4: Bugfix: I had to insert the $LDFLAGS at two + more spots in the libxc AC macros. + +2007-11-14 15:14 lorenzen + + * [r3510] m4/acx.m4: Bugfix: the check for Fortran integer size in + libxc configure forgot about + $LDFLAGS during linkage. + +2007-11-12 11:30 marques + + * [r3493] src/Makefile.am: Dependecy missing: when compiling + without fortran, xc_funcs.h was not + generated. + +2007-11-12 10:57 marques + + * [r3491] src/Makefile.am, src/gga_c_p86.c, src/gga_c_pbe.c, + src/gga_c_pw91.c, src/gga_perdew.c, src/util.h: I built a common + framework for John Perdew's functionals. This + simplified a lot both PBE and PW91. + + Incidentally, I found why my implementation of PW91 (correlation) + was + giving slightly different results than the reference + implementation in + the Density functional repository of Daresbury. It is related to + the + number of digits in one constant. I believe the error is in the + repository, but I mailed them to sort out this issue. + +2007-10-26 16:08 lorenzen + + * [r3431] src/Makefile.am: Bugfix: this change repairs the make + distcheck target, so the distcheck Bot + should not fail anymore. + + Some dependencies had to be made explicit because Automake's + dependency tracking only has limited support for built headers. + +2007-10-25 13:51 marques + + * [r3417] Makefile.am, TODO: Added a TODO file + +2007-10-25 13:32 marques + + * [r3416] src/Makefile.am, src/gga_x_wc.c, src/gga_xc_edf1.c, + src/gga_xc_xlyp.c: Two new functionals GGA functionals: + Wu & Cohen + XLYP + +2007-10-24 10:14 xavier + + * [r3394] src/gga_c_pw91.c: Small fixes: + + * Inline functions can't use static global variables. + * Removed unused multigrid code and added some debug info. + * Assembler is now preprocessed using FCCPP, this is because Sun + C + compiler (cc -E) gets hanged with .S files. + * Workaround for a bug in gfortran openmp support. + * Fixed a misspelled openmp clause. + +2007-10-21 17:57 acastro + + * [r3387] src, testsuite: Added some new generated files to the + svn:ignore lists. + +2007-10-18 09:47 marques + + * [r3375] src/Makefile.am, src/gga.c, src/gga_c_lyp.c, + src/gga_x_b88.c, src/gga_xc_edf1.c, src/gga_xc_lb.c, src/util.h, + src/xc.h, testsuite/Makefile.am, testsuite/gga_xc_edf1.data: + Added EDF1 functional. This is again a fit, this time by Adamson, + Gill, + and Pople. + +2007-10-17 12:03 marques + + * [r3371] COPYING, src/functionals.c, src/get_funcs.pl, src/gga.c, + src/gga_c_lyp.c, src/gga_c_p86.c, src/gga_c_pbe.c, + src/gga_c_pw91.c, src/gga_x_b86.c, src/gga_x_b86_mgc.c, + src/gga_x_b88.c, src/gga_x_dk87.c, src/gga_x_ft97.c, + src/gga_x_g96.c, src/gga_x_lg93.c, src/gga_x_optx.c, + src/gga_x_pbe.c, src/gga_x_pw86.c, src/gga_x_pw91.c, + src/gga_x_rpbe.c, src/gga_xc_hcth.c, src/gga_xc_lb.c, src/lca.c, + src/lca_lch.c, src/lca_omc.c, src/lda.c, src/lda_c_amgb.c, + src/lda_c_hl.c, src/lda_c_pw.c, src/lda_c_pz.c, src/lda_c_rpa.c, + src/lda_c_vwn.c, src/lda_c_wigner.c, src/lda_c_xalpha.c, + src/lda_x.c, src/mgga.c, src/mgga_c_tpss.c, src/mgga_x_tpss.c, + src/test.c, src/util.c, src/util.h, src/work_gga_x.c, src/xc.h, + src/xc_f.c, testsuite/xc-consistency.c, testsuite/xc-get_data.c, + testsuite/xc-reference.pl: I changed the license to the LGPL 3.0. + I will also do that to libparser. + I think that the LGPL is a bit better for these licenses if one + wants + them to be included in other (non-GPL) programs. + + Note: I added only me to the copyright line, as most of the work + in this + library has been done by me. If, however, if you changed any of + the + files and want your name to appear, please add it. + +2007-10-17 10:59 marques + + * [r3369] src/Makefile.am, src/gga_lb.c, src/gga_xc_hcth.c, + src/gga_xc_lb.c, testsuite/gga_xc_hcth_120.data, + testsuite/gga_xc_hcth_147.data, testsuite/gga_xc_hcth_407.data, + testsuite/gga_xc_hcth_93.data: Added the HCTH class of + functionals. These are fits to several + (sometimes 407) molecules. They seem to be the most precise GGAs + for a large class of molecules. + +2007-10-16 14:54 xavier + + * [r3366] src/Makefile.am, src/libxc.f90: Now the libxc_funcs + module is used through libxc. As libxc is a + standalone we should have a simple (and constant) interface. + +2007-10-16 13:53 marques + + * [r3364] src/Makefile.am, src/gga.c, src/gga_c_pw91.c, + src/gga_lb.c, testsuite/xc-reference.pl: Added pw91 correlation + functional. Sometimes, I get differences in the + 9th digit when compared to reference values. I am not sure if it + is a + real bug or not. + +2007-10-16 07:08 acastro + + * [r3363] src/Makefile.am: The package created by "make dist" did + not contain the get_funcs.pl + script. + +2007-10-16 03:02 acastro + + * [r3362] src/Makefile.am: Depending on which machine I built the + code (from scratch, doing + autoreconf + configure + make) I got an error... I think the + problem is in the use of "+=" to define variables in automake, + and in the resulting ordering of the compilation (the file + xc_funcs.h is not created before it is needed). + + I think it is more robust in this way. + +2007-10-15 17:41 lorenzen + + * [r3359] src/Makefile.am, src/get_funcs.pl, src/lca.c, + src/lca_lch.c, src/lca_omc.c, src/mgga_c_tpss.c, + src/mgga_x_tpss.c: The mgga and lca files were not processed. I + don't know if this + was intentionally but at least Octopus wants them. + +2007-10-15 16:19 lorenzen + + * [r3358] src/Makefile.am, src/get_funcs.pl: This fixes the build + problems with the automatically + generated interface files for libxc. The problem was that + the interface files were built in the source tree and not + in the build tree. Now, $(srcdir) and $(top_builddir) are + passed to the get_funcs.pl script. + + Passing these two variables is nearly always necessary when + writing scripts like these. + +2007-10-15 15:20 marques + + * [r3357] src/get_funcs.pl, src/gga_c_p86.c, src/gga_c_pbe.c, + testsuite/xc-reference.pl, testsuite/xc-run_testsuite: I hope to + have fixed the compilation issue now. + +2007-10-15 14:54 marques + + * [r3356] src/gga_c_p86.c, src/gga_c_pbe.c: I wonder if this solves + the problem with the compilation now + +2007-10-15 14:20 xavier + + * [r3355] src/Makefile.am: This fixes compilation of libxc when + building outside the sources + directory. I don't know if it is the correct way to solve it, + though. + +2007-10-15 13:37 marques + + * [r3353] src/work_gga_x.c: Forgot this file... + +2007-10-15 13:36 marques + + * [r3352] src/Makefile.am, src/get_funcs.pl, src/gga_c_lyp.c, + src/gga_c_p86.c, src/gga_c_pbe.c, src/gga_lb.c, src/gga_x.c, + src/gga_x_b86.c, src/gga_x_b86_mgc.c, src/gga_x_b88.c, + src/gga_x_dk87.c, src/gga_x_ft97.c, src/gga_x_g96.c, + src/gga_x_lg93.c, src/gga_x_optx.c, src/gga_x_pbe.c, + src/gga_x_pw86.c, src/gga_x_pw91.c, src/gga_x_rpbe.c, src/lda.c, + src/lda_c_amgb.c, src/lda_c_hl.c, src/lda_c_pw.c, src/lda_c_pz.c, + src/lda_c_rpa.c, src/lda_c_vwn.c, src/lda_c_wigner.c, + src/lda_c_xalpha.c, src/lda_funcs.c, src/lda_x.c, src/libxc.f90, + src/xc.h: Now there is a file per functional. I also added a perl + script that allows to generate + automatically the interfaces. Like this, in order to add a + functional we do not have to touch + any other part of the code. One just has to add a single file! + +2007-10-15 09:48 marques + + * [r3351] src/gga.c, src/gga_c_pbe.c, src/gga_x.c, src/libxc.f90, + src/xc.h: Added two more functionals: PBE_SOL (x and c), and RPBE + (x) + +2007-10-08 18:25 xavier + + * [r3321] m4/acx.m4: Bugfix: CFLAGS were not properly passed in + some macros. This can cause + problems if one of your flags is -m32. + +2007-09-01 19:36 xavier + + * [r3155] src/lda.c: More fixes to the single precision version. + Now it is possible to run + gs calculations without segfaults. + +2007-09-01 13:16 xavier + + * [r3153] src/gga.c, src/gga_lb.c, src/lca.c, src/libxc.f90, + src/mgga.c, src/xc.h, src/xc_f.c: Added a single precision + interface for the rest of libxc calls. + +2007-09-01 11:17 xavier + + * [r3152] src/lda.c: Fixed a bug in my previous commit. + +2007-09-01 10:29 xavier + + * [r3151] src/lda.c, src/lda_c_amgb.c, src/lda_c_pw.c, + src/lda_c_pz.c, src/lda_c_vwn.c, src/lda_funcs.c, src/lda_x.c, + src/libxc.f90, src/util.c, src/util.h, src/xc.h, src/xc_f.c: * + Added single precision interface lda functions in libxc, for the + C + interface functions with an extra _sp are single precision, for + Fortran polymorphism is used. + + * Declared input arguments as const for lda functions in libxc. + +2007-07-25 08:10 xavier + + * [r3101] src/util.h: Bugfix: M_SQRT2 was not available for libxc + when the C compiler is in + ANSI mode. Reported by GPAW developers. + +2007-07-04 09:26 lorenzen + + * [r3064] src/Makefile.am, testsuite/xc-run_testsuite: * Added an + environment variable SKIP_CHECK that can be set + during a make distcheck to omit the testsuites: + + $ DISTCHECK_CONFIGURE_FLAGS="..." SKIP_CHECK=yes make distcheck + + This change is to provide the possibility to let the BuildBot + run make distcheck regularly without the testsuites (just to + find forgotten files in the Makefile.ams). + + this environment variable is honoured in testsuite/Makefile.am + and libxc/testsuite/xc-run_testsuite. + + * Fixed a bug in the clean-local rule in share/PP. + + * Added *.mod and others to CLEANFILES in libxc/srx/Makefile.am + +2007-06-19 08:50 acastro + + * [r3007] src: Finally, also (most of) the files generated by a + typical "make" will + also be ignored by the svn commands by including them in the + svn:ignore lists. + +2007-06-19 08:06 acastro + + * [r3006] src, testsuite: Now (almost all) the files generated by + configure are also included in + the svn:ignore properties. + +2007-06-19 07:58 acastro + + * [r3005] ., src, testsuite: Added to the svn:ignore property of + several directories the files + generated by autoreconf. + +2007-06-19 07:52 acastro + + * [r3004] .cvsignore: Removed the .cvsignore files, useless since a + lot of time + ago, I guess. + +2007-06-14 16:26 xavier + + * [r2998] src/libxc.f90: Bugfix in libxc: The interface of + xc_f90_lda was incorrect and the interface of + xc_f90_lda_vxc was missing. + +2007-06-14 11:11 xavier + + * [r2997] configure.ac, src/Makefile.am: * Added some modifications + to libxc configuration files suggested by + Yann Poullion to ease the integration with Abinit. + +2007-06-13 17:49 xavier + + * [r2995] configure.ac, src/Makefile.am, src/libxc.f90: Moved the + fortran interface of libxc to the libxc/src/ directory. This + + Instead of the C_POINTER, I defined some derived types (with a + pointer + inside), so in theory they should have enough space to hold a + pointer + but I have to test it. This approach is also more elegant as the + types + can't be passed incorrectly and their contents are private, so + the + user can't modify them without libxc. + +2007-06-12 11:24 xavier + + * [r2991] configure.ac, src/xc_f.c: Bugfix: libxc was trying to + compile the fortran interface even when + --disable-fortran was specified. + +2007-05-24 12:47 acastro + + * [r2926] src/mgga_x_tpss.c: Removed C++ ("//") comments in favor + of old-style C comments ("/* + */"), since some compilers refuse them. + +2007-03-20 18:29 lorenzen + + * [r2771] Makefile.am, src/Makefile.am, testsuite/Makefile.am, + testsuite/xc-reference.pl, testsuite/xc-run_testsuite: This is a + boring maintenance commit concerning the automake build and + distribution system. It is likely that some of the nightly builds + will + fail or that someone encounters building problems. In that case, + just + bug me, I feel in charge to fix that. + + I wanted to get VPATH builds working, i. e. compiling in a + directory that + does not contain the source code. This makes it easily possible + to + configure and build a single source tree with lots of different + options + (avoiding tedious copying). VPATH is basically a GNU make feature + but + the Makfefile.ams have to follow certain restrictions to get it + working: + + 1. Relative file names should be constructed with the $(srcdir), + $(top_srcdir), $(builddir), $(top_builddir) variables. + + 2. Wildcards should not be used in automake variables. This means + that all source files have to be mentioned in the Makefile.am. + This + is a bit tiresome (especially in the PP directory) but it is + recommended in the GNU Coding Standard and considered good + practice. + So, please add any .inp and .test files you include in the + testsuite + to the corresponding Makefile.ams. This also holds for the .psf + files + (and the .hgh) if a new element should be discovered... + + 3. I had to change the way the variable documentation is + generated a bit. + The main thing was to add command-line flags to specify input and + output + directories to the var2html.pl and mk_varinfo.pl scripts. + + 4. Filename flags for the compilers (like -I) should not be added + to the + corresponding variable in the configure.ac but to the AM_ version + in + the approripate Makefile.am (or to its per target variant). This + makes use of $(srcdir), etc. possible. In some Makefile.ams the + compilation rule is redefined, in these cases, it has to be + checked if + the AM_ variant is included (e. g. src/Makefile.am). + + There were some more things I ran across: + + 1. The testsuite can only be run after a make install because + the share data is not available otherwise. For that reason, I + replaced + the check target by an installcheck-local rule. + + 2. The oct-run_testsuite script used hardcoded paths, they are + now + patched by the configure script. So, the oct-run_testuite is + replaced + by oct-run_testsuite.in and the original script will disappear in + my + next commit. + + 3. The libxc testuite also needed some fixing to consider + different + source and build trees. + + 4. I completely removed the AC_CONFIG_SUBDIRS for the python + tree. + The conditional configuration of a subtree is a very subtle issue + as + automake does not support not configured subtrees. The + configure.ac and + Makefile.am of the python part seem to be in a very fragile + state, and as + it is not used anyway at the moment, I did not spend time to fix + them. + By the way, how is the state of the GUI? There is just few lines + of code + in the repository. + When it will be included again, I recommend just another + Makefile.am + and no subpackage configure. Necessary checks should be added to + our + main configure.ac (and can be skipped, if no GUI is requested). + + The code now passes the distcheck target which is desireable. + +2007-01-19 17:57 xavier + + * [r2656] src/mgga_c_tpss.c: * Added reference to mgga_c_tpss + * Changed indentifier from i to u for the output of a size_t + value in write_iter.c. + * This fixes #8 , the rest of the bugs were already fixed. + +2006-11-18 17:39 xavier + + * [r2590] testsuite/xc-get_data.c: Optimization: + + * Wrote a C version of dnl_operator_operate. The inner loop is + unrolled by hand to depth 3 and prefetching directives are used + to + keep the array of weights in the cache. + + For a test case (benzene gs with non interacting electrons, h=2.0 + r=6.0), total performance was increased by a factor of 1.47 for + ifort + 9.1 and by a factor of 2.2 for gfortran (p4 3.0GHz). In both + cases + gcc-4.1 was used. + + The new function is not enabled by default yet, but it is + selected by + the input variable OperateFunction, values can be either + 'fortran' or + 'c'. + + * Configure detects the presence of builtin functions + __builtin_expect + and __builtin_prefetch in the C compiler. If they are not found, + alternative dummy macros are provided. + + Fixed a couple of bugs revealed by gcc-2.95: + + * Assert is not always available in C. Put a check in + configure.ac. + * Move a declaration to the beginning of the function. + +2006-11-12 12:36 xavier + + * [r2569] src/xc.h: Libxc header is now usable from C++. + +2006-10-26 10:49 marques + + * [r2518] src/gga_c_p86.c, src/gga_c_pbe.c: Added a workaround so + that the functionals do not return NaN when + sigma=0. + +2006-10-25 08:48 marques + + * [r2517] src/lda.c, src/lda_funcs.c: Slater's Xalpha functional + was not working, so the test was failing. + + The test testsuite/finite_systems_3d/11-sic.test seems a bit + weird to + me. The functional used is Slater's Xalpha with alpha=2/3, which + means + that it only uses exchange (it would be easier to put + Cfunctional=none + ;) Is this really the functional used in the reference (that I + corrected, BTW)? + +2006-10-23 15:56 marques + + * [r2511] src/gga_c_p86.c, src/gga_c_pbe.c, src/gga_lb.c, + src/lca.c, src/lda.c, src/lda_c_amgb.c, src/lda_c_pw.c, + src/lda_funcs.c, src/lda_x.c, src/mgga_c_tpss.c, + src/mgga_x_tpss.c, src/util.h, src/xc.h, src/xc_f.c, + testsuite/gga_c_pbe.data, testsuite/gga_c_pbe.data-disabled, + testsuite/xc-consistency.c, testsuite/xc-get_data.c: I am + resyncing my tree that started diverging ;) + + *) Further cleanup of libxc. Now it was fxc that now has only 3 + components (uu, ud, dd) for spin-polarized calculations. This + amounted + to changes in libxc and in octopus. Note that kxc is still not + changed. + It should include only the independent elements! Maybe Xavier + would like + to do it ;)) + + *) Added a Perdew Wang modified lda functional. This is the + functional + used by Kieron in his implementation of the PBE (that i assume is + the + reference), and that is different from the published functional + (different number of digits in some costants, and he even has + incompatible definitions for the same constants). In this way, + the PBE + now gives the same as the reference numbers, so I rehabilitated + the + test. The differences to the previous implementation are very + small (4th + or 5th digit, but anyway...) + + *) Now we can have all-electron species also in 1 and 2 + dimensions. + +2006-10-16 11:11 marques + + * [r2500] src/gga.c, src/gga_x.c, src/xc.h, + testsuite/gga_x_ft97_b.data: Todays functional is the exchange + part of the Filatov & Thiel + functional (both A and B versions). At least the B version gives + the + same results are a reference implementation. + +2006-10-15 08:57 marques + + * [r2495] src/gga_x.c: Hopefully, this fixes the compilation errors + of the last couple of + nightly builds. Trivial changes. + +2006-10-13 14:13 marques + + * [r2491] src/Makefile.am, src/gga_c_pbe.c, src/gga_pbe.c, + src/gga_x.c, src/gga_x_b86.c: I believe that these file names are + more convinient. + +2006-10-13 09:32 marques + + * [r2490] src/Makefile.am, src/gga.c, src/gga_c_p86.c, + src/gga_pbe.c, src/lda_x.c, src/xc.h, testsuite/gga_c_p86.data: + Today's functional is Perdew 86. For this one I have reference + data, so + I can be pretty sure it is well implemented... + +2006-10-12 09:19 marques + + * [r2488] src/gga.c, src/gga_x_b86.c, src/xc.h: Another little + exchange functional: Lacks & Gordon 1993. The list of GGA + exchange + functionals to go is decreasing, but I still have the GGA + correlation (another 10 + functionals), and the metaGGAs (probably another 15 + functionals)... life is hard ;) + +2006-10-11 11:00 marques + + * [r2485] src/gga.c, src/gga_x_b86.c, src/xc.h: Today's new + functional is dePristo & Kress 87 in two different versions. + +2006-10-10 08:15 marques + + * [r2479] src/gga.c, src/gga_x_b86.c, src/xc.h: Added the OPTX + exchange functional (Handy & Cohen 2001) asked by + Angelica. + +2006-10-09 07:43 marques + + * [r2477] m4/acx.m4, src/gga_pbe.c, src/gga_x_b86.c: *) The nightly + build using ifc was not working due to the infamous + "static" flag, and subsequent problems with the pthread library. + I could + not solve cleanly the problem, so I made a workaround: the + configure + script doe not die, and assumes 4 byte ints. + + *) A couple of references added/corrected in libxc + +2006-10-06 16:53 marques + + * [r2471] m4/acx.m4: I believe that Axel copied an old version of + acx.m4. This is the correct + version... + +2006-10-06 16:34 marques + + * [r2470] configure.ac, src/gga.c, src/gga_x_b86.c, src/xc.h, + testsuite/gga_x_pw91.data: Sorry, there are several things in + this commit: + + *) I finally understood the problem that Alberto was having. The + variable i in xc_functl_write_info was used for two things. In + the first + it should be a normal integer, and in the second it should be a + pointer. + That is why the code was crashing. I simply solved the problem by + using + two variables with different names. + + *) Added a macro called C_POINTER that has the obvious meaning of + integer(POINTER_SIZE). I also changed all occurences in the code + of + integer(POINTER_SIZE) to C_POINTER. I believe it is much more + readable + like that. + + *) Added two new functionals, Perdew Wang 86 and the exchange + part of + Perdew Wang 91. I think the introduction of new functionals will + slow + down now ;) + +2006-10-06 16:12 athimm + + * [r2469] AUTHORS, COPYING, INSTALL, NEWS, m4/acx.m4: Convert + symlinks to regular files to please bitten. + + There is a bug in trac's API concerning extracting properties of + nodes + containing the metadata. + +2006-10-06 10:56 marques + + * [r2468] configure.ac, src/functionals.c, src/xc.h, src/xc_f.c, + testsuite/xc-get_data.c: *) Added automatic detection of the C + type that corresponds to the + Fortran type "integer". xc_f.c was the changed to use this macro. + This + should, hopefully, solve our previous problems. Now libxc has all + arguments "pure" Fortran integers. + + I tested this changes in i386 (ifc7.1), x64 (pathscale, nag, and + gfortran), and it passed all tests (with the exception of the + hyperpolarizability test that failed in ifc7.1 and *pathscale*, + but + Xavier alerady knows about it). + + *) Bug fix in xc-get_data.c. A missing "#include " was + making + the xc tests fail sometimes. + +2006-10-05 11:14 marques + + * [r2462] src/Makefile.am, src/functionals.c, src/gga.c, + src/gga_c_lyp.c, src/gga_lb.c, src/gga_pbe.c, src/gga_x_b86.c, + src/lca.c, src/lca_lch.c, src/lca_omc.c, src/lda.c, + src/lda_c_amgb.c, src/lda_c_pw.c, src/lda_c_pz.c, + src/lda_c_vwn.c, src/lda_funcs.c, src/lda_x.c, src/mgga.c, + src/mgga_c_tpss.c, src/mgga_x_tpss.c, src/util.h, src/xc.h, + src/xc_f.c, testsuite/xc-consistency.c, testsuite/xc-get_data.c: + *) changed the names of all exported routines of libxc to xc_XXX, + and + the F90 variants as xc-f90_XXX. Now it looks more like a library + ;) + This, of course, amountd to a lot of small changes in the code... + + *) pursuing a problem with the exchange part of the PBE (a + division by + zero), I decided to dump the old routine and to implement it in + the more + general framework of "Becke 86-like functionals". It is now 5 + lines of + code! + +2006-10-04 14:09 marques + + * [r2456] src/gga.c, src/gga_c_lyp.c, src/gga_lb.c, src/gga_pbe.c, + src/gga_x_b86.c, src/lca.c, src/lca_lch.c, src/lca_omc.c, + src/lda.c, src/lda_c_amgb.c, src/lda_c_pw.c, src/lda_c_pz.c, + src/lda_c_vwn.c, src/lda_funcs.c, src/lda_x.c, src/mgga_c_tpss.c, + src/mgga_x_tpss.c, src/util.h, src/xc.h, src/xc_f.c, + testsuite/Makefile.am, testsuite/xc-consistency.c, + testsuite/xc-get_data.c, testsuite/xc-reference.pl, + testsuite/xc-run_regression_test.pl, testsuite/xc-run_testsuite: + *) Added a consistency cjeck on the functionals. Basic it is a + script + that calculates vxc using finite differences, calls libxc for the + analitic functional and compares the difference. By now, three + functionals give problems PBE (exchange) has some NAN lingering + around; + PBE (correlation) and G96 have large deviations from the fd + results. + + *) Added a "provides" line to func_type. This is, e.g., + "XC_PROVIDES_EXC + | XC_PROVIDES_VXC". In this way, the upper level can know if it + has to + calculate something using finite differences. + +2006-10-03 14:49 marques + + * [r2452] src/gga_c_lyp.c: Fixed the problems with the LYP + functional when rho[is]=0. + +2006-10-03 14:48 marques + + * [r2451] testsuite/gga_c_pbe.data, + testsuite/gga_c_pbe.data-disabled, + testsuite/xc-run_regression_test.pl: * Disabled the test of the + correlation part of the PBE. I get + differences in teh 4th or 5th digit that I do not understand... + * Changed the way the tests were done, so that they are now + really + passed. + +2006-10-02 22:28 marques + + * [r2448] src/functionals.c: Forgot this file... + +2006-10-02 22:26 marques + + * [r2447] src/Makefile.am, src/gga.c, src/gga_c_lyp.c, + src/gga_lb.c, src/gga_pbe.c, src/gga_x_b86.c, src/gga_x_b88.c, + src/lda.c, src/lda_funcs.c, src/util.h, src/xc.h, src/xc_f.c, + testsuite/gga_c_lyp.data, testsuite/xc-run_regression_test.pl: + Next iteration of libxc + + *) Merged several functionals (B86, B88, G96 and variants) in one + routine as they are all of the same form + *) Added a routine family_from_id that simplifies initialization + of the + functionals + *) Added the functionals Gill 96 (anyone heard about this one?) + and LYP. + The LYP functional still has problems when the density is zero in + one of + the spin channels. So, please don't use if until I fix it. + *) Made the corresponding changes on the fortran side. Octopus + cannow + use all the functionals in libxc. + +2006-09-29 13:44 marques + + * [r2440] Makefile.am, configure.ac, gga.c, gga_lb.c, gga_pbe.c, + gga_x_b88.c, lca.c, lca_lch.c, lca_omc.c, lda.c, lda_c_amgb.c, + lda_c_pw.c, lda_c_pz.c, lda_c_vwn.c, lda_funcs.c, lda_x.c, + mgga.c, mgga_c_tpss.c, mgga_x_tpss.c, src, src/Makefile.am, + src/gga.c, src/gga_lb.c, src/gga_pbe.c, src/gga_x_b86.c, + src/gga_x_b88.c, src/lca.c, src/lca_lch.c, src/lca_omc.c, + src/lda.c, src/lda_c_amgb.c, src/lda_c_pw.c, src/lda_c_pz.c, + src/lda_c_vwn.c, src/lda_funcs.c, src/lda_x.c, src/mgga.c, + src/mgga_c_tpss.c, src/mgga_x_tpss.c, src/test.c, src/util.c, + src/util.h, src/xc.h, src/xc_f.c, test.c, testsuite/Makefile.am, + testsuite/xc-get_data.c, testsuite/xc-run_regression_test.pl, + util.c, util.h, xc.h, xc_f.c: Next iteration in libxc. In this + new version I have: + + *) Moved source files to the directory src/. It is neater that + way + *) Delete the LDA speedup thing that Alberto had implemented, but + which + he agreed to delete + *) Added two more functionals: Becke 86 and Becke 86 reoptimized + *) GGAs are now handled in the same way as LDAs + +2006-09-28 13:58 marques + + * [r2434] gga_lb.c, gga_pbe.c, gga_x_b88.c, lda.c, lda_c_amgb.c, + lda_c_pw.c, lda_c_pz.c, lda_c_vwn.c, lda_funcs.c, lda_x.c, + mgga_x_tpss.c, testsuite/xc-get_data.c, util.h, xc.h, xc_f.c: + Started a big cleaning in order to make libxc a bit more + elegant.Basically, there is now a mechanism to initialize, run + the + functional, and terminate it. In this way, there are no more the + horrendous switch statements in lda.c. The job is not finished + yet. + +2006-09-28 11:06 marques + + * [r2433] Makefile.am, gga.c, gga_lb.c, gga_pbe.c, gga_x_b88.c, + testsuite/gga_c_pbe.data, testsuite/gga_x_b88.data, + testsuite/gga_x_pbe.data, testsuite/lda_c_pw.data, + testsuite/xc-get_data.c, testsuite/xc-run_regression_test.pl, + util.h, xc.h: *) Added Becke 88 to libxc. However, this + functional is still not called + from octopus. That will come later. + + *) The GGAs are now also tested. The exchange PBE and B88 pass + all test + without problems. The correlation part of the PBE does not, + however. The + differences are small (5th digit or so), so you may relax ;) In + any + case, I believe that the problem is, in fact, the "reference" + implementation that has an inconsistency in the constants it + uses... + +2006-09-26 14:26 marques + + * [r2430] Makefile.am, configure.ac, lda.c, lda_c_pz.c, + lda_c_vwn.c, lda_x.c, testsuite, testsuite/Makefile.am, + testsuite/lda_c_pz.data, testsuite/lda_c_vwn.data, + testsuite/lda_c_vwn_rpa.data, testsuite/lda_x.data, + testsuite/xc-get_data.c, testsuite/xc-run_regression_test.pl, + testsuite/xc-run_testsuite, util.h, xc.h: The most important part + of this commit is the inclusion of tests for + some LDA functionals. The calculated value of these functionals + is + compared to reference data that can be found in + http://www.cse.clrc.ac.uk/qcg/dft/. + + Note that the tests do give some errors. This is related to fully + polarized cases, i.e., when rho_down=0. The reference data + hard-wires, + in this case, the value of vpot_down=0, which, in my opinion, is + not + correct. In any case, if the gas is fully polarized, the value of + vpot_down is irrelevant in this case ;) + + There were some very small precision issues in a couple of + functionals + that I adjusted in order to match the reference data. + + In the process I added two new LDA "functionals": + *) lda_c_pz_mod. This is the version of the Perdew Zunger + functional + modified by Alberto to match better the low and high rs regions + of the + parametrization. This is the old pz that we had in the code. The + original PZ functional is called lda_c_pz. Note that the default + is the + corrected functional. + *) lda_c_vwn_rpa. This is a parametrization of the RPA + correlation + energy using the VWN form, and that is also present in the + original + paper. + + Soon I will start playing with the GGAs ;) + +2006-09-25 08:18 marques + + * [r2424] AUTHORS, COPYING, ChangeLog, INSTALL, Makefile.am, NEWS, + README, configure.ac, m4, m4/acx.m4: First step in Making libxc + independent. Now it contains its own + configuration script. There are, however, several things still to + clean. + +2006-06-18 11:32 athimm + + * [r2221] .: Exclude build-aux from entering svn. + +2006-06-01 09:06 xavier + + * [r2174] lca.c: Portability fix, variable declaration was not in + the beginning of file. + +2006-05-24 10:16 athimm + + * [r2149] Makefile.am: a) python and xml + - Make python conditional, on by default. + + Use --disable-python to turn off python (see ./configure --help) + + - Remove variables.xml generation from main code, make it + python-private. variables.xml are only used by the GUI. Let it + live + under share for now, we'll see were we'll put it in the future, + perhaps it will be removed altogether. + + b) Add some vpath fixes + +2006-05-19 15:17 athimm + + * [r2117] .: Update svn:ignore recursively. + +2006-05-14 10:52 athimm + + * [r2073] .: Ignore config.h stamp file. + +2006-05-12 18:41 athimm + + * [r2063] ., .cvsignore: Sanitize .cvsignore and recursively feed + svn:ignore with them. + + The entries mirror the school of not committing generated files + into + the repository. Whether this is good or bad needs to be decided, + and + I'm probably in favour of adding them (as well as maintainer-mode + protection), but until this is agreed upon the current curse is + `minimal'. + +2006-04-08 19:42 acastro + + * [r1992] gga_pbe.c, lda.c, test.c, xc_f.c: Some more profiling + tags, and some unimportant changes. For example, now + the wavefunctions are not randomly generated if then a LCAO + calculation + is going to be performed. + +2006-04-05 13:52 acastro + + * [r1982] lda.c, lda_x.c, xc.h, xc_f.c: The option to interpolated + the LDA functionals instead of recalculating + them every time is now compiled always, although it is only used + if the InterpolateLDA is set to yes. + I will experiment with it for a few months to see if it is + worthed to + keep it as an option. + +2006-04-04 19:59 acastro + + * [r1980] lda.c: Still one bug. + +2006-04-04 19:42 acastro + + * [r1979] gga_lb.c, gga_pbe.c, lda_funcs.c, lda_x.c, mgga_x_tpss.c, + test.c, xc.h, xc_f.c: The XAlpha correlation functional was badly + calculated when code was + compiled with the "LDA_SPEEDUP" preprocessor flag. This option is + still + way too experimental to be compiled by default. If you want to + try it, + you have to define LDA_SPEEDUP (for example, setting + CPPFLAGS="-DLDA_SPEEDUP" when configuring). + +2006-03-21 11:51 micael + + * [r1939] gga_lb.c, gga_pbe.c, lda.c, lda_funcs.c, lda_x.c, + mgga_x_tpss.c, util.h, xc.h, xc_f.c: *) Syncing the libxc in APE + with the one in Octopus. + This new version includes the relativistic correction to the LDA + exchange functional. + This is not really important for Octopus (at least for the time + being) but it is + necessary for APE. + +2006-03-07 18:41 acastro + + * [r1881] lda_c_vwn.c: Bug fixed. + The Vosko/Wilk/Nusair xc potential had a bug related to units. + + Every time the initialization function was called, some + "constant" was + divided by two, in order to go from rydbergs to atomic units. But + the + inialization function is called twice by octopus, so the result + was + a factor of four. + +2006-01-31 11:11 acastro + + * [r1797] gga_lb.c: Bug fixed. + Removed the 05-Na2_LB94_Casida bug. + The LB94 is still rather under suspiscion, in any case. + + I don't know why the bug was there, in fact, it looked that the + code + that I removed was there for a reason, but I could not trace it + down + because it was there since the first revision... + +2005-11-28 11:03 marques + + * [r1726] lda.c, lda_c_vwn.c, lda_x.c, test.c: *) very tiny bug + corrected in VWN (one of the constants was wrong in the 5th + digit) + *) fxc is now calculated numerically a bit better in case of the + ferromagnetic gas. Actually I don't really know how to handle + this case properly, as fxc should diverge (at least fx). + +2005-11-12 19:47 acastro + + * [r1650] lda_c_amgb.c: Bug fixed. + One wrong character kept me busy the whole afternoon. + +2005-11-09 09:13 marques + + * [r1642] lda.c, xc.h, xc_f.c: *) Alberto, I think that the "break" + in the fxc calculation should be a + "continue" (i.e., he should skip the rest of the current cycle, + but + should get out of the cycle). Can you please check? + *) Xavier, I guess that the calculation of Kxc should have a + similar to + the one Alberto put in for fxc. Can you please check? + *) I cleaned a little bit the includes, whitespaces, and changed + "(*p)." to + "p->" as it is more C-like. + +2005-11-08 22:01 acastro + + * [r1641] lda.c: Bug fixed. + + The numerical functional derivation was not working properly in + some + spin-polarized cases (Perdew-Zunger parameterization, Na4(+1), it + was + just giving lots of NaN). Now, at least for those cases, it seems + to + work. I still have to do some more testing on the Casida module, + though. + + In any case, the PZ kernel should be obtained analytically. Maybe + in the + future. + +2005-10-18 12:51 xavier + + * [r1570] lda.c, util.h, xc.h, xc_f.c: Added Kxc, the third + derivatives of Exc, to libxc. It's calculated using a + second order numerical derivative of Vxc. + +2005-10-12 13:43 marques + + * [r1554] lda_c_pw.c: There was a sign wrong in the definition of + pw92. + + Micael, can you please test this functional? + +2005-10-12 09:10 marques + + * [r1552] Makefile.am: Some cleaning: + *) test.x is no longer generated in libxc/ + *) changed the names of several single character variables. + Please *do not* + call a variable a, b, n, c or whatever!!!! + *) I noticed that some of you had tabs of 3 and 4 spaces. Do not + forget that + the default we agreed upon some years ago was *2*. Please change + you emacs + settings! + +2005-09-05 16:36 acastro + + * [r1365] Makefile.am: It seems that the test_x_LINK variable needs + to be defined in this way + so that the executable is actually built. + +2005-08-30 14:24 acastro + + * [r1346] Makefile.am: Since the test.x program is all C, it is + better to link with the C compiler. + Otherwise some Fortran compilers (i.e. the Intel 9.0 version) + seem to have + problems with a duplicated "main" function. + +2005-07-11 13:23 acastro + + * [r1255] test.c: The xyzanim utility was broken, at least in the + IBM machines. I put + an emergency fix. If I get time I will take a look at the + utilities, see how + the system labels affect them, and make up some tests for them. + + Also, the IBM preprocessor had problems with the // comments in C + files.. + +2005-06-30 09:54 marques + + * [r1220] util.h: There were a couple of misspells in function + names + +2005-06-07 11:58 acastro + + * [r1201] Makefile.am, xc_f.c: I forgot to change also this when I + changed the config.h stuff. + +2005-05-17 09:55 appel + + * [r1121] Makefile.am: Add $Id:$ tags to most of the files (right + below the GPL header). At every + commit cvs is replacing these tags with lines of the following + form + + $Id: run_regression.pl,v 1.3 2005/05/12 10:23:59 marques Exp $ + + In this way it is easy to see who was the last person changing + the file, which + cvs revision the file has and at what date the last change was + made. + + Miguel: Is there a reason why the *.c files in libxc/ don't have + a GPL header? + +2005-04-06 16:33 marques + + * [r1081] lca_lch.c, lca_omc.c: LOL! Calculating derivatives is + always a hassle, even if only of simple functions ;))) Please + recheck them. + +2005-04-06 14:45 micael + + * [r1079] Makefile.am, lca.c, lca_lch.c, lca_omc.c, util.h, xc.h, + xc_f.c: *) Added the Vignale-Rasolt functional for CDFT to libxc. + Two parametrizations + are available. This has *not* been tested carefully yet. + +2005-04-04 12:57 acastro + + * [r1074] mgga_c_tpss.c: [*] A small change in the + "nl_operator_operate" subroutines, which, + specially in the complex case, seems to speed up things + significantly. + But most likely it does so only in some architecutures/compilers. + In the + case of the Portland compiler for opterons, the speedup is rather + spectacular, probably because before the type conversion was very + slow (the opteron was running slower that my laptop!) + [*] In mgga_c_tpss, some Portland C compilers complained about + those + array definitions, I think it is more correct now. + +2005-03-28 10:47 acastro + + * [r1061] Makefile.am, lda.c, lda_x.c, xc.h, xc_f.c: A pretty sick + performance hack. + + The idea is the following: instead of calculating the LDA + functionals + everytime, one can "spline" them at the beginning, and then + interpolate + every time, since they are very smooth functions. Some comments: + + (*) The calculation of the LDA exchange and correlation + functionals do + not take a significant calculation time, *except* if one wants to + use the + SIC+LDA within the OEP/KLI approximation for a big molecule. + (*) This commit is still experimental, and in fact the code is + still + exactly the same as it was, if you do not compile adding the + LDA_SPEEDUP + preprocessor variable (by doing CFLAGS="-O3 -DLDA_SPEEDUP", for + example). + So you do not have to worry at all about this for the moment... + I will make sure that it works well and that it makes sense + before making + it definive. + +2005-03-17 20:32 marques + + * [r1048] xc_f.c: This file was missing from the previous commit. + +2005-03-17 17:33 marques + + * [r1044] lda.c: Just a small rearrangement. + +2005-03-17 17:23 marques + + * [r1043] gga_lb.c, gga_pbe.c, lda.c, lda_c_pw.c, lda_funcs.c, + lda_x.c, mgga_x_tpss.c, test.c, util.h, xc.h, xc_f.c: *) Removed + "relativistic exchange", as, I am not mistaken, the potential was + wrong. + *) Added support for LDA fxc. For now, fxc for exchange and + Perdew Wang + correlation are analytical, while the rest is calculated through + finite + differences. Honestly, from the tests I've made, I am inclined to + believe + that it is actually better to get the numerical derivative. + (However, I + would not throw away the work of a full day, would I ;) + +2005-02-22 12:03 acastro + + * [r1014] lda_funcs.c: Bug fixed. + A small bug in the definition of the Slater Xalpha potential. + (Before it just added again the excahnge fucntional) + + Also, I have changed the definition of the alpha constant, to + meet the + usual definition in the literature: + + E_{xc}^{Xalpha} = (3/2)*alpha*E_x^{LDA} + + which means that the Xalpha correlation potential should be + defined as: + + E_{c}^{Xalpha} = ( (3/2)*alpha - 1)*E_x^{LDA} + + I have set the default to alpha = 1. In any case, the logical + thing would + be to define this functional as a exchange functional, rather + than as a + correlation part to be added to the exchange. But it is not + worthed to + loose too much time with this functional anyway... + +2005-02-15 13:51 acastro + + * [r1007] xc_f.c: I have put the embryo of what could be the + octopus developer's guide. + It just contains the description of one module, which is lib_xc, + the + interface to Miguel's C library that contains the LDA, GGA and + mGGA + functionals. And in fact it is not even complete. + + In the way, I have decided to simplify a little bit the interface + to the library, so that it is a little bit more user friendly. + +2005-02-02 03:07 appel + + * [r996] ., .cvsignore: now we are complete. + +2004-12-15 15:01 marques + + * [r964] mgga_c_tpss.c, mgga_x_tpss.c: A couple of bugs solved, but + I still get non-sense. This functiona is too + sensitive to numerical erors in the calculation of derivatives, I + think... + +2004-12-07 20:40 marques + + * [r957] mgga.c, mgga_c_tpss.c, xc_f.c: MGGA "runs" but gives + non-sense! + +2004-12-07 15:46 marques + + * [r956] gga_pbe.c, mgga.c, mgga_c_tpss.c, test.c, util.h: Bug + fixed in correlation PBE (yes, there was a serious bug there) + TPSS correlation is apparently working for spin-unpolarized + systems. I still + did not check the spin-polarized functionals (neither x nor c). + +2004-12-01 00:05 marques + + * [r946] gga_lb.c, gga_pbe.c, lda_c_amgb.c, lda_c_pw.c, lda_c_pz.c, + lda_c_vwn.c, lda_funcs.c, lda_x.c, mgga.c, mgga_c_tpss.c, + mgga_x_tpss.c, test.c, util.h, xc.h, xc_f.c: code now compiles + and runs with -ansi flag. Hope this solves your problems, + Alberto. + +2004-11-23 15:53 marques + + * [r938] Makefile.am, mgga.c, mgga_c_tpss.c, mgga_x_tpss.c, test.c, + util.h, xc.h: I am implementing the TPSS meta-GGA. The exchange + part is probably working, + the correlation is still a first draft. + +2004-10-28 20:34 marques + + * [r915] gga_pbe.c, lda_x.c, util.h, xc_f.c: several bug fixes. + +2004-10-27 18:34 marques + + * [r912] Makefile.am, gga.c, gga_lb.c, util.h, xc.h, xc_f.c: added + lb94 functional. As we all know this functional ahs problems, and + I am really not sure if these problems are handled correctly. + +2004-10-27 15:03 marques + + * [r910] Makefile.am, gga.c, gga_pbe.c, lda.c, lda_c_amgb.c, + lda_c_pw.c, lda_c_pz.c, lda_c_vwn.c, lda_funcs.c, lda_x.c, + util.h, xc.h, xc_f.c: There is now a mechanism to provide + informations about the functionals being used. + +2004-10-26 20:12 marques + + * [r907] Makefile.am, gga.c, gga_pbe.c, lda.c, util.c, util.h, + xc.h, xc_f.c: First support for GGAs. + Added PBE. + +2004-10-21 15:01 marques + + * [r904] util.c: removed an erraneous #include + +2004-10-20 16:41 marques + + * [r900] xc_f.c: *) Changed (again) the restart files because: + 1) There was a bug reading the occupations and the eigenvalues + 2) It did not work for spin-polarized calculations + + *) Added support for the libxc LDA functionals. Due to this + reason, GGAs + and the other functionals are desactivated. Now octopus can use + the + 13 LDAs provided by libxc. + +2004-10-20 13:39 marques + + * [r898] ., Makefile.am, lda.c, lda_c_amgb.c, lda_c_pw.c, + lda_c_pz.c, lda_c_vwn.c, lda_funcs.c, lda_x.c, test.c, util.c, + util.h, xc.h, xc_f.c: The begining of our library of xc + functionals. There are 13 LDA functionals implemented until now. + The unpolarized versions work I think. The polarized I have some + doubts, and we should do some further checking. + diff --git a/libxc-2.2.0/INSTALL b/libxc-2.2.0/INSTALL new file mode 100644 index 000000000..7d1c323be --- /dev/null +++ b/libxc-2.2.0/INSTALL @@ -0,0 +1,365 @@ +Installation Instructions +************************* + +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, +2006, 2007, 2008, 2009 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. This file is offered as-is, +without warranty of any kind. + +Basic Installation +================== + + Briefly, the shell commands `./configure; make; make install' should +configure, build, and install this package. The following +more-detailed instructions are generic; see the `README' file for +instructions specific to this package. Some packages provide this +`INSTALL' file but do not implement all of the features documented +below. The lack of an optional feature in a given package is not +necessarily a bug. More recommendations for GNU packages can be found +in *note Makefile Conventions: (standards)Makefile Conventions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. Caching is +disabled by default to prevent problems with accidental use of stale +cache files. + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You need `configure.ac' if +you want to change it or regenerate `configure' using a newer version +of `autoconf'. + + The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. + + Running `configure' might take a while. While running, it prints + some messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package, generally using the just-built uninstalled binaries. + + 4. Type `make install' to install the programs and any data files and + documentation. When installing into a prefix owned by root, it is + recommended that the package be configured and built as a regular + user, and only the `make install' phase executed with root + privileges. + + 5. Optionally, type `make installcheck' to repeat any self-tests, but + this time using the binaries in their final installed location. + This target does not install anything. Running this target as a + regular user, particularly if the prior `make install' required + root privileges, verifies that the installation completed + correctly. + + 6. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + + 7. Often, you can also type `make uninstall' to remove the installed + files again. In practice, not all packages have tested that + uninstallation works correctly, even though it is required by the + GNU Coding Standards. + + 8. Some packages, particularly those that use Automake, provide `make + distcheck', which can by used by developers to test that all other + targets like `make install' and `make uninstall' work correctly. + This target is generally not run by end users. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c99 CFLAGS=-g LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you can use GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. This +is known as a "VPATH" build. + + With a non-GNU `make', it is safer to compile the package for one +architecture at a time in the source code directory. After you have +installed the package for one architecture, use `make distclean' before +reconfiguring for another architecture. + + On MacOS X 10.5 and later systems, you can create libraries and +executables that work on multiple system types--known as "fat" or +"universal" binaries--by specifying multiple `-arch' options to the +compiler but only a single `-arch' option to the preprocessor. Like +this: + + ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CPP="gcc -E" CXXCPP="g++ -E" + + This is not guaranteed to produce working output in all cases, you +may have to build one architecture at a time and combine the results +using the `lipo' tool if you have problems. + +Installation Names +================== + + By default, `make install' installs the package's commands under +`/usr/local/bin', include files under `/usr/local/include', etc. You +can specify an installation prefix other than `/usr/local' by giving +`configure' the option `--prefix=PREFIX', where PREFIX must be an +absolute file name. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +pass the option `--exec-prefix=PREFIX' to `configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=DIR' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. In general, the +default for these options is expressed in terms of `${prefix}', so that +specifying just `--prefix' will affect all of the other directory +specifications that were not explicitly provided. + + The most portable way to affect installation locations is to pass the +correct locations to `configure'; however, many packages provide one or +both of the following shortcuts of passing variable assignments to the +`make install' command line to change installation locations without +having to reconfigure or recompile. + + The first method involves providing an override variable for each +affected directory. For example, `make install +prefix=/alternate/directory' will choose an alternate location for all +directory configuration variables that were expressed in terms of +`${prefix}'. Any directories that were specified during `configure', +but not in terms of `${prefix}', must each be overridden at install +time for the entire installation to be relocated. The approach of +makefile variable overrides for each directory variable is required by +the GNU Coding Standards, and ideally causes no recompilation. +However, some platforms have known limitations with the semantics of +shared libraries that end up requiring recompilation when using this +method, particularly noticeable in packages that use GNU Libtool. + + The second method involves providing the `DESTDIR' variable. For +example, `make install DESTDIR=/alternate/directory' will prepend +`/alternate/directory' before all installation names. The approach of +`DESTDIR' overrides is not required by the GNU Coding Standards, and +does not work on platforms that have drive letters. On the other hand, +it does better at avoiding recompilation issues, and works well even +when some directory options were not specified in terms of `${prefix}' +at `configure' time. + +Optional Features +================= + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + + Some packages offer the ability to configure how verbose the +execution of `make' will be. For these packages, running `./configure +--enable-silent-rules' sets the default to minimal output, which can be +overridden with `make V=1'; while running `./configure +--disable-silent-rules' sets the default to verbose, which can be +overridden with `make V=0'. + +Particular systems +================== + + On HP-UX, the default C compiler is not ANSI C compatible. If GNU +CC is not installed, it is recommended to use the following options in +order to use an ANSI C compiler: + + ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" + +and if that doesn't work, install pre-built binaries of GCC for HP-UX. + + On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot +parse its `' header file. The option `-nodtk' can be used as +a workaround. If GNU CC is not installed, it is therefore recommended +to try + + ./configure CC="cc" + +and if that doesn't work, try + + ./configure CC="cc -nodtk" + + On Solaris, don't put `/usr/ucb' early in your `PATH'. This +directory contains several dysfunctional programs; working variants of +these programs are available in `/usr/bin'. So, if you need `/usr/ucb' +in your `PATH', put it _after_ `/usr/bin'. + + On Haiku, software installed for all users goes in `/boot/common', +not `/usr/local'. It is recommended to use the following options: + + ./configure --prefix=/boot/common + +Specifying the System Type +========================== + + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS + KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the option `--target=TYPE' to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +causes the specified `gcc' to be used as the C compiler (unless it is +overridden in the site shell script). + +Unfortunately, this technique does not work for `CONFIG_SHELL' due to +an Autoconf bug. Until the bug is fixed you can use this workaround: + + CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash + +`configure' Invocation +====================== + + `configure' recognizes the following options to control how it +operates. + +`--help' +`-h' + Print a summary of all of the options to `configure', and exit. + +`--help=short' +`--help=recursive' + Print a summary of the options unique to this package's + `configure', and exit. The `short' variant lists options used + only in the top level, while the `recursive' variant lists options + also present in any nested packages. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--prefix=DIR' + Use DIR as the installation prefix. *note Installation Names:: + for more details, including other options available for fine-tuning + the installation locations. + +`--no-create' +`-n' + Run the configure checks, but stop before creating any output + files. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/libxc-2.2.0/Makefile.am b/libxc-2.2.0/Makefile.am new file mode 100644 index 000000000..67fd3a553 --- /dev/null +++ b/libxc-2.2.0/Makefile.am @@ -0,0 +1,40 @@ +## Process this file with automake to produce Makefile.in + +## Copyright (C) 2002 M. Marques, A. Castro, A. Rubio, G. Bertsch +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU Lesser General Public License as published by +## the Free Software Foundation; either version 2, or (at your option) +## any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. +## +## $Id: Makefile.am 11910 2014-03-21 10:31:07Z micael $ + +ACLOCAL_AMFLAGS = -I m4 +SUBDIRS = build src testsuite + +include_HEADERS = xc_version.h +EXTRA_DIST = ChangeLog PACKAGING TODO + +CLEANFILES = *~ *.bak + +rpm: dist + @topdir=`rpmbuild --showrc | @GREP@ ': *_topdir' | cut -f 2`; \ + mv -f $(PACKAGE)-$(VERSION).tar.gz $$topdir/SOURCES; \ + cp build/$(PACKAGE).spec $$topdir/SPECS; \ + rpmbuild -ba $$topdir/SPECS/$(PACKAGE).spec; \ + echo "-------------------------------------------------------------"; \ + echo " RPMs are built, and are located under:"; \ + echo " $$topdir/RPMS/"; \ + echo " $$topdir/SRPMS"; \ + echo "-------------------------------------------------------------" +# scp $(RPM_DIR)/RPMS/*/libxc*.rpm marques@www.tddft.org:/server/www/tddft.org/programs/octopus/download/ diff --git a/libxc-2.2.0/Makefile.in b/libxc-2.2.0/Makefile.in new file mode 100644 index 000000000..5d75c9169 --- /dev/null +++ b/libxc-2.2.0/Makefile.in @@ -0,0 +1,880 @@ +# Makefile.in generated by automake 1.13.4 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = . +DIST_COMMON = INSTALL NEWS README AUTHORS ChangeLog \ + $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/configure $(am__configure_deps) \ + $(srcdir)/config.h.in $(srcdir)/xc_version.h.in \ + $(include_HEADERS) COPYING TODO compile config.guess \ + config.sub depcomp install-sh missing ltmain.sh +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ac_prog_sed.m4 \ + $(top_srcdir)/m4/ax_f90_module_extension.m4 \ + $(top_srcdir)/m4/fc_integer.m4 $(top_srcdir)/m4/fcflags.m4 \ + $(top_srcdir)/m4/fortran.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = xc_version.h +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(includedir)" +HEADERS = $(include_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + cscope distdir dist dist-all distcheck +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +CSCOPE = cscope +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__post_remove_distdir = $(am__remove_distdir) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +DIST_TARGETS = dist-gzip +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F90_ACCEPTS_LINE_NUMBERS = @F90_ACCEPTS_LINE_NUMBERS@ +FC = @FC@ +FCCPP = @FCCPP@ +FCFLAGS = @FCFLAGS@ +FCFLAGS_f90 = @FCFLAGS_f90@ +FCLIBS = @FCLIBS@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LONG_LINES = @LONG_LINES@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +XC_LT_VERSION = @XC_LT_VERSION@ +XC_MAJOR_VERSION = @XC_MAJOR_VERSION@ +XC_MINOR_VERSION = @XC_MINOR_VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_FC = @ac_ct_FC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +ax_cv_f90_modext = @ax_cv_f90_modext@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +ACLOCAL_AMFLAGS = -I m4 +SUBDIRS = build src testsuite +include_HEADERS = xc_version.h +EXTRA_DIST = ChangeLog PACKAGING TODO +CLEANFILES = *~ *.bak +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @if test ! -f $@; then rm -f stamp-h1; else :; fi + @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 +xc_version.h: $(top_builddir)/config.status $(srcdir)/xc_version.h.in + cd $(top_builddir) && $(SHELL) ./config.status $@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt +install-includeHEADERS: $(include_HEADERS) + @$(NORMAL_INSTALL) + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ + done + +uninstall-includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscope: cscope.files + test ! -s cscope.files \ + || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) +clean-cscope: + -rm -f cscope.files +cscope.files: clean-cscope cscopelist +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__post_remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__post_remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__post_remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__post_remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__post_remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__post_remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__post_remove_distdir) + +dist dist-all: + $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' + $(am__post_remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir) + chmod u+w $(distdir) + mkdir $(distdir)/_build $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__post_remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile $(HEADERS) config.h +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(includedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr \ + distclean-libtool distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-includeHEADERS + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-includeHEADERS + +.MAKE: $(am__recursive_targets) all install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ + am--refresh check check-am clean clean-cscope clean-generic \ + clean-libtool cscope cscopelist-am ctags ctags-am dist \ + dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ + dist-xz dist-zip distcheck distclean distclean-generic \ + distclean-hdr distclean-libtool distclean-tags distcleancheck \ + distdir distuninstallcheck dvi dvi-am html html-am info \ + info-am install install-am install-data install-data-am \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-includeHEADERS \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-includeHEADERS + + +rpm: dist + @topdir=`rpmbuild --showrc | @GREP@ ': *_topdir' | cut -f 2`; \ + mv -f $(PACKAGE)-$(VERSION).tar.gz $$topdir/SOURCES; \ + cp build/$(PACKAGE).spec $$topdir/SPECS; \ + rpmbuild -ba $$topdir/SPECS/$(PACKAGE).spec; \ + echo "-------------------------------------------------------------"; \ + echo " RPMs are built, and are located under:"; \ + echo " $$topdir/RPMS/"; \ + echo " $$topdir/SRPMS"; \ + echo "-------------------------------------------------------------" +# scp $(RPM_DIR)/RPMS/*/libxc*.rpm marques@www.tddft.org:/server/www/tddft.org/programs/octopus/download/ + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libxc-2.2.0/NEWS b/libxc-2.2.0/NEWS new file mode 100644 index 000000000..d514f7015 --- /dev/null +++ b/libxc-2.2.0/NEWS @@ -0,0 +1,8 @@ +*) 2014/03/21 - release of libxc-2.1.0 and libxc-2.2.0 +*) 2014/02/18 - release of libxc-2.0.3 +*) 2013/07/10 - release of libxc-2.0.2 +*) 2013/01/21 - release of libxc-2.0.1 +*) 2012/11/28 - release of libxc-2.0.0 +*) 2011/05/12 - release of libxc-1.1 +*) 2010/07/09 - release of libxc-1.0 +*) 2009/03/31 - release of libxc-1.0-alpha diff --git a/libxc-2.2.0/PACKAGING b/libxc-2.2.0/PACKAGING new file mode 100644 index 000000000..48ee390dc --- /dev/null +++ b/libxc-2.2.0/PACKAGING @@ -0,0 +1,21 @@ +How to build: + Standard ./configure; make; make install + +Dependencies: + None + +New releases: + 2014/03/21 Version 2.2.0 + 2014/03/21 Version 2.1.0 + 2014/02/18 Version 2.0.3 + 2013/07/10 Version 2.0.2 + 2013/01/21 Version 2.0.1 + 2012/11/28 Version 2.0.0 + 2011/05/12 Version 1.1 + 2010/07/09 Version 1.0 + 2009/04/26 Version 1.0-alpha + +Bugs & Patches: + +SVN server + svn co http://www.tddft.org/svn/octopus/trunk/libxc diff --git a/libxc-2.2.0/README b/libxc-2.2.0/README new file mode 100644 index 000000000..5aae16362 --- /dev/null +++ b/libxc-2.2.0/README @@ -0,0 +1,73 @@ +This library implements many of the standard xc functionals in the +market. For more information, please check the manual at + +http://www.tddft.org/programs/Libxc + + + +INSTALLATION +============ + +To install the library, just use the standard procedure: + +./configure --prefix=PATH/TO/LIBXC +make +make check +make install + + + +INFORMATION FOR DEVELOPERS +========================== + +The distribution is organized in the following way: + +./ +./build Fedora spec files +./m4 m4 scripts used by configure.ac +./src source files +./testsuite regression tests + + +Furthermore, the most important contents of the src directory are: + +xc.h - main header file with all external definitions +util.h - header file with internal definitions +*f90 *.F90 xc_f.c - Fortran 90 interface + string_f.h +xc_funcs.h - automatically generated file with the list of functionals +funcs_*.c - automatically generated files with the functional definitions +functionals.c - generic interface to simplify access to the different families +lda.c gga.c mgga.c - interface to the different families of functionals +special_functions.c - implementation of a series of special functions +lda_*.c - definition of the different LDA functionals +work_lda.c - code that simplifies the implementation of LDAs +gga_*.c - definition of the different GGA functionals +work_gga_x.c - code that simplifies the implementation of exchange GGAs +work_gga_c.c - code that simplifies the implementation of some + correlation GGAs +work_gga_becke.c - code that simplifies the implementation of some + correlation GGAs +mgga_*.c - definition of the different meta-GGA functionals +work_mgga_x.c - code that simplifies the implementation of exchange meta-GGAs +work_mgga_c.c - code that simplifies the implementation of some correlation + meta-GGAs +hyb_gga_*.c - definition of the different hybrid-GGA functionals + +------------------------------------------------------------------------------- +Notes: + +*) Most functionals use the framework contained in a work_*.c file. This +simplifies tremendously the implementation of the different functionals. +The work_*.c is included in the gga_*.c through a preprocessor directive + +*) Some files contain more than one functional, as similar functionals +are usually grouped together. Therefore, the best way to find where a +functional is implemented is by looking at its keyword in xc_funcs.h and +using grep to find the correct file. + +*) The files where the functionals are defined are named as +family_type_name.c, where: + family - functional family (lda, gga, hyb_gga, or mgga) + type - type of functional (x, c, xc, or k) + name - name of the functional or class of functionals diff --git a/libxc-2.2.0/TODO b/libxc-2.2.0/TODO new file mode 100644 index 000000000..18ae7ff03 --- /dev/null +++ b/libxc-2.2.0/TODO @@ -0,0 +1,59 @@ +Add functionals: + +LDA: + *) McWeeny c (cited in JCP 69, 1177) + R. McWeeny, in The New World of Quantum Chemistry, edited by B. Pullman and R. Parr (Reidel, Boston, 1976), p. 3. + *) Handler x (JCP 61, 4824) + *) Rae self-energy correction to x (CPL 18, 574 (1973)) + *) ZLP x (Phys. Rev. A, 47 (1993), p. 918) and k (Chem. Phys. Lett. 232, 31) + +GGAs: + *) functionals of Della Salla (http://www.theory-nnl.it/software.php) + *) Liu and Parr (http://pra.aps.org/abstract/PRA/v55/i3/p1792_1) + *) http://dx.doi.org/10.1063/1.3243845 + *) df-LB94, df-revLB94 http://dx.doi.org/10.1103/PhysRevA.83.012509 + *) Lambda-LB94, Q-LB94, Q-revLB94 http://dx.doi.org/10.1063/1.3684261 + +mGGAs: + *) Colle and Salvetti http://www.molpro.net/info/current/doc/manual/node750.html + *) MK00 http://www.molpro.net/info/current/doc/manual/node760.html + *) MK00B http://www.molpro.net/info/current/doc/manual/node761.html + *) tau-HTCH + *) KCIS, B0KCIS, B1KCIS http://jcp.aip.org/resource/1/jcpsa6/v117/i23/p10465_s1 + *) regTPSS http://pubs.acs.org/doi/abs/10.1021/ct300269u + *) LAP class of functionals [70] + *) Perdew-Constantin laplacian-level KED functional http://link.aps.org/doi/10.1103/PhysRevB.75.155109 + *) Alternative parametrizations of the TB09 functional http://dx.doi.org/10.1103/PhysRevB.85.155109 + *) MCY1 and MCY2 http://dx.doi.org/10.1063/1.2179072 + +hybrids: + *) http://arxiv.org/abs/1205.4999 (versions of HSE) + *) http://link.aip.org/link/doi/10.1063/1.3524336 (HSE_sol) + *) doi:10.1021/ct800530u (LR-omegaPBE08) + *) http://arxiv.org/abs/1211.0387 + +hybrid meta: + *) TPSS1KCIS http://pubs.rsc.org/en/content/articlelanding/2005/cp/b416937a + *) MPWKCIS1K MPW1KCIS http://pubs.acs.org/doi/pdf/10.1021/jp045141s + *) PBE1KCIS http://pubs.acs.org/doi/pdf/10.1021/ct049851d + *) b1b95 (54, 60) + *) tpsslyp1w (1w class of functionals) + +check also "local" hybrids? +V. V. Karasiev, J. Mol. Struct. (THEOCHEM), 493, 21 (1999). +V. V. Karasiev and E. V. Lude˜na, Phys. Rev. A 65, 062510 (2002). +V. V. Karasiev and E. V. Lude˜na, Phys. Rev. A 65, 032515 (2002). + + +54: Becke, A. D. Phys. ReV. A 1988, 38, 3098. +60: Becke, A. D. J. Chem. Phys. 1996, 104, 1040. +67: Rey, J.; Savin, A. Int. J. Quantum Chem. 1998, 69, 581. +68: Kreiger, J. B.; Chen, J.; Iafrate, G. J.; Savin, A. In Electronic + Correlations and Materials Properties; Gonis, A., Kioussis, N., Eds; + Plenum: New York, 1999; p 463. +69: Toulouse, J.; Savin, A.; Adamo, C. J. Chem. Phys. 2002, 117, 1441. +70: http://dx.doi.org/10.1016/0009-2614(94)01189-3 + http://dx.doi.org/10.1002/qua.560560808 + http://dx.doi.org/10.1002/(SICI)1097-461X(1997)64:4<427::AID-QUA5>3.0.CO;2-Y + http://link.aip.org/link/doi/10.1063/1.1321309 + http://dx.doi.org/10.1021/ct600372t diff --git a/libxc-2.2.0/aclocal.m4 b/libxc-2.2.0/aclocal.m4 new file mode 100644 index 000000000..6f822fec8 --- /dev/null +++ b/libxc-2.2.0/aclocal.m4 @@ -0,0 +1,1081 @@ +# generated automatically by aclocal 1.13.4 -*- Autoconf -*- + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, +[m4_warning([this file was generated for autoconf 2.69. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically 'autoreconf'.])]) + +# Copyright (C) 2002-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.13' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.13.4], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.13.4])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to +# '$srcdir', '$srcdir/..', or '$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is '.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ([2.52])dnl + m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], + [$1], [CXX], [depcc="$CXX" am_compiler_list=], + [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], + [$1], [UPC], [depcc="$UPC" am_compiler_list=], + [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES. +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE([dependency-tracking], [dnl +AS_HELP_STRING( + [--enable-dependency-tracking], + [do not reject slow dependency extractors]) +AS_HELP_STRING( + [--disable-dependency-tracking], + [speeds up one-time build])]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each '.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.65])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[AC_DIAGNOSE([obsolete], + [$0: two- and three-arguments forms are deprecated.]) +m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if( + m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + [ok:ok],, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) + AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +AM_MISSING_PROG([AUTOCONF], [autoconf]) +AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +AM_MISSING_PROG([AUTOHEADER], [autoheader]) +AM_MISSING_PROG([MAKEINFO], [makeinfo]) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +AC_SUBST([mkdir_p], ['$(MKDIR_P)']) +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES([CC])], + [m4_define([AC_PROG_CC], + m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES([CXX])], + [m4_define([AC_PROG_CXX], + m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES([OBJC])], + [m4_define([AC_PROG_OBJC], + m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], + [_AM_DEPENDENCIES([OBJCXX])], + [m4_define([AC_PROG_OBJCXX], + m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl +]) +AC_REQUIRE([AM_SILENT_RULES])dnl +dnl The testsuite driver may need to know about EXEEXT, so add the +dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This +dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) + +dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST([install_sh])]) + +# Copyright (C) 2003-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_CC_C_O +# -------------- +# Like AC_PROG_CC_C_O, but changed for automake. +AC_DEFUN([AM_PROG_CC_C_O], +[AC_REQUIRE([AC_PROG_CC_C_O])dnl +AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +dnl Make sure AC_PROG_CC is never called again, or it will override our +dnl setting of CC. +m4_define([AC_PROG_CC], + [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it is modern enough. +# If it is, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + AC_MSG_WARN(['missing' script is too old or missing]) +fi +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# -------------------- +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) + +# _AM_SET_OPTIONS(OPTIONS) +# ------------------------ +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken + alias in your environment]) + fi + if test "$[2]" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT([yes]) +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi +AC_CONFIG_COMMANDS_PRE( + [AC_MSG_CHECKING([that generated files are newer than configure]) + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + AC_MSG_RESULT([done])]) +rm -f conftest.file +]) + +# Copyright (C) 2009-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# ("yes" being less verbose, "no" or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], [dnl +AS_HELP_STRING( + [--enable-silent-rules], + [less verbose build output (undo: "make V=1")]) +AS_HELP_STRING( + [--disable-silent-rules], + [verbose build output (undo: "make V=0")])dnl +]) +case $enable_silent_rules in @%:@ ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few 'make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using '$V' instead of '$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor 'install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in "make install-strip", and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of 'v7', 'ustar', or 'pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +# +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' + +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + + [m4_case([$1], + [ustar], + [# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) + if test $am_uid -le $am_max_uid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi + AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) + if test $am_gid -le $am_max_gid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi], + + [pax], + [], + + [m4_fatal([Unknown tar format])]) + + AC_MSG_CHECKING([how to create a $1 tar archive]) + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_$1-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi + done + rm -rf conftest.dir + + AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) + AC_MSG_RESULT([$am_cv_prog_tar_$1])]) + +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([m4/ac_prog_sed.m4]) +m4_include([m4/ax_f90_module_extension.m4]) +m4_include([m4/fc_integer.m4]) +m4_include([m4/fcflags.m4]) +m4_include([m4/fortran.m4]) +m4_include([m4/libtool.m4]) +m4_include([m4/ltoptions.m4]) +m4_include([m4/ltsugar.m4]) +m4_include([m4/ltversion.m4]) +m4_include([m4/lt~obsolete.m4]) diff --git a/libxc-2.2.0/build/Makefile.am b/libxc-2.2.0/build/Makefile.am new file mode 100644 index 000000000..d16a66a96 --- /dev/null +++ b/libxc-2.2.0/build/Makefile.am @@ -0,0 +1,29 @@ +## Process this file with automake to produce Makefile.in + +## Copyright (C) 2002 M. Marques, A. Castro, A. Rubio, G. Bertsch +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2, or (at your option) +## any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. +## +## $Id: Makefile.am 5782 2009-08-05 15:04:55Z olivares $ + +EXTRA_DIST = \ + libxc.spec.in libxc.pc.in + +DISTCLEANFILES = \ + libxc.spec libxc.pc + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = libxc.pc diff --git a/libxc-2.2.0/build/Makefile.in b/libxc-2.2.0/build/Makefile.in new file mode 100644 index 000000000..2a37640f1 --- /dev/null +++ b/libxc-2.2.0/build/Makefile.in @@ -0,0 +1,506 @@ +# Makefile.in generated by automake 1.13.4 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = build +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(srcdir)/libxc.pc.in $(srcdir)/libxc.spec.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ac_prog_sed.m4 \ + $(top_srcdir)/m4/ax_f90_module_extension.m4 \ + $(top_srcdir)/m4/fc_integer.m4 $(top_srcdir)/m4/fcflags.m4 \ + $(top_srcdir)/m4/fortran.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = libxc.pc libxc.spec +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(pkgconfigdir)" +DATA = $(pkgconfig_DATA) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F90_ACCEPTS_LINE_NUMBERS = @F90_ACCEPTS_LINE_NUMBERS@ +FC = @FC@ +FCCPP = @FCCPP@ +FCFLAGS = @FCFLAGS@ +FCFLAGS_f90 = @FCFLAGS_f90@ +FCLIBS = @FCLIBS@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LONG_LINES = @LONG_LINES@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +XC_LT_VERSION = @XC_LT_VERSION@ +XC_MAJOR_VERSION = @XC_MAJOR_VERSION@ +XC_MINOR_VERSION = @XC_MINOR_VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_FC = @ac_ct_FC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +ax_cv_f90_modext = @ax_cv_f90_modext@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = \ + libxc.spec.in libxc.pc.in + +DISTCLEANFILES = \ + libxc.spec libxc.pc + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = libxc.pc +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu build/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu build/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +libxc.pc: $(top_builddir)/config.status $(srcdir)/libxc.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +libxc.spec: $(top_builddir)/config.status $(srcdir)/libxc.spec.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-pkgconfigDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-pkgconfigDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + cscopelist-am ctags-am distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pkgconfigDATA install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags-am uninstall uninstall-am \ + uninstall-pkgconfigDATA + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libxc-2.2.0/build/libxc.pc.in b/libxc-2.2.0/build/libxc.pc.in new file mode 100644 index 000000000..eb7bef9db --- /dev/null +++ b/libxc-2.2.0/build/libxc.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: libxc +Description: Library of exchange and correlation functionals to be used in DFT codes +Requires: +Version: @VERSION@ +Libs: -L${libdir} -lxc +Cflags: -I${includedir} diff --git a/libxc-2.2.0/build/libxc.spec.in b/libxc-2.2.0/build/libxc.spec.in new file mode 100644 index 000000000..e611fa728 --- /dev/null +++ b/libxc-2.2.0/build/libxc.spec.in @@ -0,0 +1,72 @@ +# RPM spec file for @PACKAGE@. +# This file is used to build Redhat Package Manager packages for the +# @PACKAGE@. Such packages make it easy to install and uninstall +# the library and related files from binaries or source. +# +# This spec file is for version @VERSION@ of @PACKAGE@; the appropriate +# version numbers are automatically substituted in to @PACKAGE@.spec.in +# by the configure script. However, @PACKAGE@.spec.in may need to be +# modified for future releases, if the list of installed files +# or build commands change. +# +# RPM. To build, use the command: rpm --clean -ba @PACKAGE@.spec +# +# Alternatively, you can just use 'make rpm'. +# +Name: @PACKAGE@ +Summary: Library of exchange and correlation functionals to be used in DFT codes +Version: @VERSION@ +Release: 1 +Provides: %{name} +License: LGPL 2.0 +Group: Applications/Scientific +Prefix: /usr +BuildRoot: %{_tmppath}/%{name}-%{version}-buildroot +Source: http://www.tddft.org/programs/octopus/download/%{name}-%{version}.tar.gz +URL: http://www.tddft.org/programs/octopus/wiki/index.php/Libxc + +%description +Libxc is a library of exchange and correlation functionals. Its +purpose is to be used in codes that implement density-functional +theory. For the moment, the library includes most of the local density +approximations (LDAs), generalized density approximation (GGAs), and +meta-GGAs. The library provides values for the energy density and its +1st, 2nd, and (for the LDAs) 3rd derivatives. + +%prep +rm -rf $RPM_BUILD_ROOT +%setup -q + +# The installation is also performed in the %%build stage because the +# code has to be configured twice, with and without MPI support, and +# cleaned in between. +%build +%configure \ + CC="@CC@" \ + CPP="@CPP@" \ + FC="@FC@" \ + FCFLAGS="@FCFLAGS@" \ + CFLAGS="@CFLAGS@" \ + CPPFLAGS="@CPPFLAGS@" \ + LDFLAGS="@LDFLAGS@" \ + --disable-static + +make + +make install DESTDIR=${RPM_BUILD_ROOT} + +%clean +rm -rf ${RPM_BUILD_ROOT} + + +%post + + +%preun + + +%files +%defattr(-,root,root,0755) +%doc README NEWS COPYING AUTHORS ChangeLog +%{_libdir}/* +%{_includedir}/* diff --git a/libxc-2.2.0/compile b/libxc-2.2.0/compile new file mode 100755 index 000000000..531136b06 --- /dev/null +++ b/libxc-2.2.0/compile @@ -0,0 +1,347 @@ +#! /bin/sh +# Wrapper for compilers which do not understand '-c -o'. + +scriptversion=2012-10-14.11; # UTC + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Written by Tom Tromey . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +nl=' +' + +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent tools from complaining about whitespace usage. +IFS=" "" $nl" + +file_conv= + +# func_file_conv build_file lazy +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. If the determined conversion +# type is listed in (the comma separated) LAZY, no conversion will +# take place. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv/,$2, in + *,$file_conv,*) + ;; + mingw/*) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin/*) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine/*) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_cl_dashL linkdir +# Make cl look for libraries in LINKDIR +func_cl_dashL () +{ + func_file_conv "$1" + if test -z "$lib_path"; then + lib_path=$file + else + lib_path="$lib_path;$file" + fi + linker_opts="$linker_opts -LIBPATH:$file" +} + +# func_cl_dashl library +# Do a library search-path lookup for cl +func_cl_dashl () +{ + lib=$1 + found=no + save_IFS=$IFS + IFS=';' + for dir in $lib_path $LIB + do + IFS=$save_IFS + if $shared && test -f "$dir/$lib.dll.lib"; then + found=yes + lib=$dir/$lib.dll.lib + break + fi + if test -f "$dir/$lib.lib"; then + found=yes + lib=$dir/$lib.lib + break + fi + if test -f "$dir/lib$lib.a"; then + found=yes + lib=$dir/lib$lib.a + break + fi + done + IFS=$save_IFS + + if test "$found" != yes; then + lib=$lib.lib + fi +} + +# func_cl_wrapper cl arg... +# Adjust compile command to suit cl +func_cl_wrapper () +{ + # Assume a capable shell + lib_path= + shared=: + linker_opts= + for arg + do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + eat=1 + case $2 in + *.o | *.[oO][bB][jJ]) + func_file_conv "$2" + set x "$@" -Fo"$file" + shift + ;; + *) + func_file_conv "$2" + set x "$@" -Fe"$file" + shift + ;; + esac + ;; + -I) + eat=1 + func_file_conv "$2" mingw + set x "$@" -I"$file" + shift + ;; + -I*) + func_file_conv "${1#-I}" mingw + set x "$@" -I"$file" + shift + ;; + -l) + eat=1 + func_cl_dashl "$2" + set x "$@" "$lib" + shift + ;; + -l*) + func_cl_dashl "${1#-l}" + set x "$@" "$lib" + shift + ;; + -L) + eat=1 + func_cl_dashL "$2" + ;; + -L*) + func_cl_dashL "${1#-L}" + ;; + -static) + shared=false + ;; + -Wl,*) + arg=${1#-Wl,} + save_ifs="$IFS"; IFS=',' + for flag in $arg; do + IFS="$save_ifs" + linker_opts="$linker_opts $flag" + done + IFS="$save_ifs" + ;; + -Xlinker) + eat=1 + linker_opts="$linker_opts $2" + ;; + -*) + set x "$@" "$1" + shift + ;; + *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) + func_file_conv "$1" + set x "$@" -Tp"$file" + shift + ;; + *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) + func_file_conv "$1" mingw + set x "$@" "$file" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift + done + if test -n "$linker_opts"; then + linker_opts="-link$linker_opts" + fi + exec "$@" $linker_opts + exit 1 +} + +eat= + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand '-c -o'. +Remove '-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file 'INSTALL'. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) + func_cl_wrapper "$@" # Doesn't return... + ;; +esac + +ofile= +cfile= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + # So we strip '-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no '-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # '.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` + +# Create the lock directory. +# Note: use '[/\\:.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/libxc-2.2.0/config.guess b/libxc-2.2.0/config.guess new file mode 100755 index 000000000..1804e9fcd --- /dev/null +++ b/libxc-2.2.0/config.guess @@ -0,0 +1,1535 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +# 2011, 2012, 2013 Free Software Foundation, Inc. + +timestamp='2012-12-29' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). +# +# Originally written by Per Bothner. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +# +# Please send patches with a ChangeLog entry to config-patches@gnu.org. + + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, +2012, 2013 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm*:riscos:*:*|arm*:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + UNAME_PROCESSOR=`/usr/bin/uname -p` + case ${UNAME_PROCESSOR} in + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW64*:*) + echo ${UNAME_MACHINE}-pc-mingw64 + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:MSYS*:*) + echo ${UNAME_MACHINE}-pc-msys + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + aarch64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + hexagon:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + LIBC=gnu + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + tile*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + i386) + eval $set_cc_for_build + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + UNAME_PROCESSOR="x86_64" + fi + fi ;; + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-?:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk${UNAME_RELEASE} + exit ;; + NSE-*:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; + x86_64:VMkernel:*:*) + echo ${UNAME_MACHINE}-unknown-esx + exit ;; +esac + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/libxc-2.2.0/config.h.in b/libxc-2.2.0/config.h.in new file mode 100644 index 000000000..a2e7ac46d --- /dev/null +++ b/libxc-2.2.0/config.h.in @@ -0,0 +1,141 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* The C type of a Fortran integer */ +#undef CC_FORTRAN_INT + +/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP + systems. This function is required for `alloca.c' support on those systems. + */ +#undef CRAY_STACKSEG_END + +/* Define to 1 if using `alloca.c'. */ +#undef C_ALLOCA + +/* compiler supports line-number lines */ +#undef F90_ACCEPTS_LINE_NUMBERS + +/* Define to dummy `main' function (if any) required to link to the Fortran + libraries. */ +#undef FC_DUMMY_MAIN + +/* Define if F77 and FC dummy `main' functions are identical. */ +#undef FC_DUMMY_MAIN_EQ_F77 + +/* Define to a macro mangling the given C identifier (in lower and upper + case), which must not contain underscores, for linking with Fortran. */ +#undef FC_FUNC + +/* As FC_FUNC, but for C identifiers containing underscores. */ +#undef FC_FUNC_ + +/* The size of a Fortran integer */ +#undef FC_INTEGER_SIZE + +/* Define to 1 if you have `alloca', as a function or macro. */ +#undef HAVE_ALLOCA + +/* Define to 1 if you have and it should be used (not on Ultrix). + */ +#undef HAVE_ALLOCA_H + +/* libm includes cbrt */ +#undef HAVE_CBRT + +/* libm includes cbrtf */ +#undef HAVE_CBRTF + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* libm includes feenableexcept */ +#undef HAVE_FEENABLEEXCEPT + +/* Defined if libxc is compiled with fortran support */ +#undef HAVE_FORTRAN + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* libm includes sqrtf */ +#undef HAVE_SQRTF + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* compiler supports long lines */ +#undef LONG_LINES + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +#undef NO_MINUS_C_MINUS_O + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* The size of `void*', as computed by sizeof. */ +#undef SIZEOF_VOIDP + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at runtime. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +#undef STACK_DIRECTION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#undef inline +#endif + +/* Define to `unsigned int' if does not define. */ +#undef size_t diff --git a/libxc-2.2.0/config.sub b/libxc-2.2.0/config.sub new file mode 100755 index 000000000..52f04bcd7 --- /dev/null +++ b/libxc-2.2.0/config.sub @@ -0,0 +1,1790 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +# 2011, 2012, 2013 Free Software Foundation, Inc. + +timestamp='2012-12-29' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). + + +# Please send patches with a ChangeLog entry to config-patches@gnu.org. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, +2012, 2013 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + android-linux) + os=-linux-android + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze*) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*178) + os=-lynxos178 + ;; + -lynx*5) + os=-lynxos5 + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc \ + | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ + | avr | avr32 \ + | be32 | be64 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | epiphany \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nios | nios2 \ + | ns16k | ns32k \ + | open8 \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pyramid \ + | rl78 | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu \ + | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | we32k \ + | x86 | xc16x | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; + xgate) + basic_machine=$basic_machine-unknown + os=-none + ;; + xscaleeb) + basic_machine=armeb-unknown + ;; + + xscaleel) + basic_machine=armel-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | aarch64-* | aarch64_be-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | be32-* | be64-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | hexagon-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | le32-* | le64-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | microblaze-* | microblazeel-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | open8-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pyramid-* \ + | rl78-* | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ + | tahoe-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile*-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ + | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16 | cr16-*) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze*) + basic_machine=microblaze-xilinx + ;; + mingw64) + basic_machine=x86_64-pc + os=-mingw64 + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + msys) + basic_machine=i386-pc + os=-msys + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + nacl) + basic_machine=le32-unknown + os=-nacl + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc | ppcbe) basic_machine=powerpc-unknown + ;; + ppc-* | ppcbe-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-* | ppc64p7-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + os=-rdos + ;; + rdos32) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + strongarm-* | thumb-*) + basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tile*) + basic_machine=$basic_machine-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + xscale-* | xscalee[bl]-*) + basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -bitrig* | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-musl* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -nacl*) + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + hexagon-*) + os=-elf + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/libxc-2.2.0/configure b/libxc-2.2.0/configure new file mode 100755 index 000000000..1ad109386 --- /dev/null +++ b/libxc-2.2.0/configure @@ -0,0 +1,20133 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for libxc 2.2.0. +# +# Report bugs to . +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 + + test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and libxc@tddft.org +$0: about your system, including any error possibly output +$0: before this message. Then install a modern shell, or +$0: manually run the script under such a shell if you do +$0: have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + +SHELL=${CONFIG_SHELL-/bin/sh} + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='libxc' +PACKAGE_TARNAME='libxc' +PACKAGE_VERSION='2.2.0' +PACKAGE_STRING='libxc 2.2.0' +PACKAGE_BUGREPORT='libxc@tddft.org' +PACKAGE_URL='http://www.tddft.org/programs/Libxc' + +ac_unique_file="src/xc.h" +ac_default_prefix=/opt/etsf +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +COMPILE_SINGLE_FALSE +COMPILE_SINGLE_TRUE +COMPILE_FORTRAN_FALSE +COMPILE_FORTRAN_TRUE +F90_MOD_UPPERCASE_FALSE +F90_MOD_UPPERCASE_TRUE +ax_cv_f90_modext +F90_ACCEPTS_LINE_NUMBERS +LONG_LINES +FCLIBS +FCCPP +FCFLAGS_f90 +ac_ct_FC +FCFLAGS +FC +ENABLE_FORTRAN_FALSE +ENABLE_FORTRAN_TRUE +ALLOCA +CPP +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +MANIFEST_TOOL +RANLIB +ac_ct_AR +AR +DLLTOOL +OBJDUMP +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +LIBTOOL +XC_MINOR_VERSION +XC_MAJOR_VERSION +SED +XC_LT_VERSION +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +AM_DEFAULT_V +AM_V +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_silent_rules +enable_shared +enable_static +with_pic +enable_fast_install +enable_dependency_tracking +with_gnu_ld +with_sysroot +enable_libtool_lock +enable_fortran +enable_single +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP +FC +FCFLAGS +FCCPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures libxc 2.2.0 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/libxc] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of libxc 2.2.0:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-silent-rules less verbose build output (undo: "make V=1") + --disable-silent-rules verbose build output (undo: "make V=0") + --enable-shared[=PKGS] build shared libraries [default=no] + --enable-static[=PKGS] build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --enable-dependency-tracking + do not reject slow dependency extractors + --disable-dependency-tracking + speeds up one-time build + --disable-libtool-lock avoid locking (might break parallel builds) + --disable-fortran don't build/install fortran components + --enable-single compile libxc in single precision + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use + both] + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-sysroot=DIR Search for dependent libraries within DIR + (or the compiler's sysroot if not specified). + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CPP C preprocessor + FC Fortran compiler command + FCFLAGS Fortran compiler flags + FCCPP Fortran preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +libxc home page: . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +libxc configure 2.2.0 +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_type + +# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES +# -------------------------------------------- +# Tries to find the compile-time value of EXPR in a program that includes +# INCLUDES, setting VAR accordingly. Returns whether the value could be +# computed +ac_fn_c_compute_int () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= 0)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=0 ac_mid=0 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid; break +else + as_fn_arith $ac_mid + 1 && ac_lo=$as_val + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) < 0)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=-1 ac_mid=-1 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=$ac_mid; break +else + as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + ac_lo= ac_hi= +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid +else + as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in #(( +?*) eval "$3=\$ac_lo"; ac_retval=0 ;; +'') ac_retval=1 ;; +esac + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +static long int longval () { return $2; } +static unsigned long int ulongval () { return $2; } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (($2) < 0) + { + long int i = longval (); + if (i != ($2)) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ($2)) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + echo >>conftest.val; read $3 &5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_fc_try_compile + +# ac_fn_fc_try_link LINENO +# ------------------------ +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_fc_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_fc_try_link + +# ac_fn_fc_try_run LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_fc_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_fc_try_run +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by libxc $as_me 2.2.0, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +am__api_version='1.13' + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken + alias in your environment" "$LINENO" 5 + fi + if test "$2" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi + +rm -f conftest.file + +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=1;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='libxc' + VERSION='2.2.0' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +mkdir_p='$(MKDIR_P)' + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar pax cpio none' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + + + + + +ac_config_headers="$ac_config_headers config.h" + + + +# Library versioning (C:R:A == current:revision:age) +# See the libtool manual for an explanation of the numbers +# +# libxc-2.0.0 1:0:0 +# libxc-2.0.1 1:1:0 +# libxc-2.0.2 1:2:0 +# libxc-2.0.3 1:3:0 +# libxc-2.1.0 2:0:1 +# libxc-2.2.0 3:0:0 +# +# Note that libtool versioning was not used prior to libxc-2.0. +# Because of this, we will start counting at 1. +# +# How to update library version number +# ==================================== +# +# C: increment if the interface has additions, changes, removals. +# +# R: increment any time the source changes; set to 0 if you +# incremented CURRENT +# +# A: increment if any interfaces have been added; set to 0 if any +# interfaces have been removed. removal has precedence over adding, +# so set to 0 if both happened. + +XC_CURRENT=3 +XC_REVISION=0 +XC_AGE=0 + +XC_LT_VERSION="${XC_CURRENT}:${XC_REVISION}:${XC_AGE}" + + +# Split VERSION into XC_VERSION_MAJOR and XC_VERSION_MINOR +# Follows AX_SPLIT_VERSION macro from AC-Archive +# Rhys Ulerich +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" | sed 99q >conftest.sed + $as_unset ac_script || ac_script= + # Extract the first word of "sed gsed" to use in msg output +if test -z "$SED"; then +set dummy sed gsed; ac_prog_name=$2 +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_path_SED_found=false +# Loop through the user's path and test for each of PROGNAME-LIST +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue + # Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + + $ac_path_SED_found && break 3 + done +done + + done +IFS=$as_save_IFS + + +fi + +SED="$ac_cv_path_SED" +if test -z "$SED"; then + as_fn_error $? "no acceptable $ac_prog_name could be found in \$PATH" "$LINENO" 5 +fi + +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +XC_MAJOR_VERSION=`echo "$VERSION" | $SED 's/\([^.][^.]*\).*/\1/'` +XC_MINOR_VERSION=`echo "$VERSION" | $SED 's/[^.][^.]*.\([^.][^.]*\).*/\1/'` + + + + + +# Installation prefix by default + + +# Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=no +fi + + + + + + + + + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.4.2' +macro_revision='1.3337' + + + + + + + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case "$ECHO" in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac + + + + + + + + + + + + + + +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" | sed 99q >conftest.sed + $as_unset ac_script || ac_script= + # Extract the first word of "sed gsed" to use in msg output +if test -z "$SED"; then +set dummy sed gsed; ac_prog_name=$2 +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_path_SED_found=false +# Loop through the user's path and test for each of PROGNAME-LIST +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue + # Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + + $ac_path_SED_found && break 3 + done +done + + done +IFS=$as_save_IFS + + +fi + +SED="$ac_cv_path_SED" +if test -z "$SED"; then + as_fn_error $? "no acceptable $ac_prog_name could be found in \$PATH" "$LINENO" 5 +fi + +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_FGREP" || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,b/c, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + +fi + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac + +fi + +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test "$GCC" != yes; then + reload_cmds=false + fi + ;; + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. + if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh + # decide which to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd="$ECHO" + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + + + + + + + + +if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +: ${AR=ar} +: ${AR_FLAGS=cru} + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ar_at_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -eq 0; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -ne 0; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } + +if test "x$lt_cv_ar_at_file" = xno; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } + +# Check whether --with-sysroot was given. +if test "${with_sysroot+set}" = set; then : + withval=$with_sysroot; +else + with_sysroot=no +fi + + +lt_sysroot= +case ${with_sysroot} in #( + yes) + if test "$GCC" = yes; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 +$as_echo "${with_sysroot}" >&6; } + as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 + ;; +esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } + + + + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD="${LD-ld}_sol2" + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. +set dummy ${ac_tool_prefix}mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MANIFEST_TOOL"; then + ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL +if test -n "$MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_MANIFEST_TOOL"; then + ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_MANIFEST_TOOL"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL +if test -n "$ac_ct_MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_MANIFEST_TOOL" = x; then + MANIFEST_TOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL + fi +else + MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" +fi + +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&5 + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } +if test "x$lt_cv_path_mainfest_tool" != xyes; then + MANIFEST_TOOL=: +fi + + + + + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&5 + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test $_lt_result -eq 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&5 + elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + + + +# Set options + + + + enable_dlopen=no + + + enable_win32_dll=no + + + + # Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for lt_pkg in $withval; do + IFS="$lt_save_ifs" + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + if test -n "$lt_prog_compiler_pic"; then + lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ F* | *Sun*Fortran*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Intel*\ [CF]*Compiler*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + *Portland\ Group*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='${wl}--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + always_export_symbols=yes + file_list_spec='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, )='true' + enable_shared_with_static_runtimes=yes + exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds='chmod 644 $oldlib' + postlink_cmds='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes=yes + ;; + esac + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler__b=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } + +if test x"$lt_cv_prog_compiler__b" = xyes; then + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (void) { return 0; } +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_irix_exported_symbol=yes +else + lt_cv_irix_exported_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } + if test "$lt_cv_irix_exported_symbol" = yes; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([A-Za-z]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Add ABI-specific directories to the system library path. + sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" + + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + + +# Checks for programs. +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + +if test "x$CC" != xcc; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 +$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5 +$as_echo_n "checking whether cc understands -c and -o together... " >&6; } +fi +set dummy $CC; ac_cc=`$as_echo "$2" | + sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +# Make sure it works both with $CC and with simple cc. +# We do the test twice because some compilers refuse to overwrite an +# existing .o file with -o, though they will create one. +ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' +rm -f conftest2.* +if { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && + test -f conftest2.$ac_objext && { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; +then + eval ac_cv_prog_cc_${ac_cc}_c_o=yes + if test "x$CC" != xcc; then + # Test first that cc exists at all. + if { ac_try='cc -c conftest.$ac_ext >&5' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' + rm -f conftest2.* + if { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && + test -f conftest2.$ac_objext && { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; + then + # cc works too. + : + else + # cc exists but doesn't like -o. + eval ac_cv_prog_cc_${ac_cc}_c_o=no + fi + fi + fi +else + eval ac_cv_prog_cc_${ac_cc}_c_o=no +fi +rm -f core conftest* + +fi +if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h + +fi + +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if ${ac_cv_c_inline+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } +#endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_inline=$ac_kw +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_inline" != no && break +done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +$as_echo "$ac_cv_c_inline" >&6; } + +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val +#endif +_ACEOF + ;; +esac + + +# Checks for header files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF + +fi + +# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works +# for constant arguments. Useless! +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 +$as_echo_n "checking for working alloca.h... " >&6; } +if ${ac_cv_working_alloca_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +char *p = (char *) alloca (2 * sizeof (int)); + if (p) return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_working_alloca_h=yes +else + ac_cv_working_alloca_h=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 +$as_echo "$ac_cv_working_alloca_h" >&6; } +if test $ac_cv_working_alloca_h = yes; then + +$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 +$as_echo_n "checking for alloca... " >&6; } +if ${ac_cv_func_alloca_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __GNUC__ +# define alloca __builtin_alloca +#else +# ifdef _MSC_VER +# include +# define alloca _alloca +# else +# ifdef HAVE_ALLOCA_H +# include +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +void *alloca (size_t); +# endif +# endif +# endif +# endif +#endif + +int +main () +{ +char *p = (char *) alloca (1); + if (p) return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_func_alloca_works=yes +else + ac_cv_func_alloca_works=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 +$as_echo "$ac_cv_func_alloca_works" >&6; } + +if test $ac_cv_func_alloca_works = yes; then + +$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h + +else + # The SVR3 libPW and SVR4 libucb both contain incompatible functions +# that cause trouble. Some versions do not even contain alloca or +# contain a buggy version. If you still want to use their alloca, +# use ar to extract alloca.o from them instead of compiling alloca.c. + +ALLOCA=\${LIBOBJDIR}alloca.$ac_objext + +$as_echo "#define C_ALLOCA 1" >>confdefs.h + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 +$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } +if ${ac_cv_os_cray+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined CRAY && ! defined CRAY2 +webecray +#else +wenotbecray +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "webecray" >/dev/null 2>&1; then : + ac_cv_os_cray=yes +else + ac_cv_os_cray=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 +$as_echo "$ac_cv_os_cray" >&6; } +if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + +cat >>confdefs.h <<_ACEOF +#define CRAY_STACKSEG_END $ac_func +_ACEOF + + break +fi + + done +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 +$as_echo_n "checking stack direction for C alloca... " >&6; } +if ${ac_cv_c_stack_direction+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_c_stack_direction=0 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +find_stack_direction (int *addr, int depth) +{ + int dir, dummy = 0; + if (! addr) + addr = &dummy; + *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; + dir = depth ? find_stack_direction (addr, depth - 1) : 0; + return dir + dummy; +} + +int +main (int argc, char **argv) +{ + return find_stack_direction (0, argc + !argv + 20) < 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_stack_direction=1 +else + ac_cv_c_stack_direction=-1 +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 +$as_echo "$ac_cv_c_stack_direction" >&6; } +cat >>confdefs.h <<_ACEOF +#define STACK_DIRECTION $ac_cv_c_stack_direction +_ACEOF + + +fi + + +# Checks for typedefs, structures, and compiler characteristics. +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void*" >&5 +$as_echo_n "checking size of void*... " >&6; } +if ${ac_cv_sizeof_voidp+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ac_cv_sizeof_voidp" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_voidp" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (void*) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_voidp=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_voidp" >&5 +$as_echo "$ac_cv_sizeof_voidp" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_VOIDP $ac_cv_sizeof_voidp +_ACEOF + + + +# Check for presence of some C99 libm functions +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqrtf in -lm" >&5 +$as_echo_n "checking for sqrtf in -lm... " >&6; } +if ${ac_cv_lib_m_sqrtf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char sqrtf (); +int +main () +{ +return sqrtf (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_m_sqrtf=yes +else + ac_cv_lib_m_sqrtf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_sqrtf" >&5 +$as_echo "$ac_cv_lib_m_sqrtf" >&6; } +if test "x$ac_cv_lib_m_sqrtf" = xyes; then : + +$as_echo "#define HAVE_SQRTF 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for cbrt in -lm" >&5 +$as_echo_n "checking for cbrt in -lm... " >&6; } +if ${ac_cv_lib_m_cbrt+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cbrt (); +int +main () +{ +return cbrt (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_m_cbrt=yes +else + ac_cv_lib_m_cbrt=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cbrt" >&5 +$as_echo "$ac_cv_lib_m_cbrt" >&6; } +if test "x$ac_cv_lib_m_cbrt" = xyes; then : + +$as_echo "#define HAVE_CBRT 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for cbrtf in -lm" >&5 +$as_echo_n "checking for cbrtf in -lm... " >&6; } +if ${ac_cv_lib_m_cbrtf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cbrtf (); +int +main () +{ +return cbrtf (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_m_cbrtf=yes +else + ac_cv_lib_m_cbrtf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cbrtf" >&5 +$as_echo "$ac_cv_lib_m_cbrtf" >&6; } +if test "x$ac_cv_lib_m_cbrtf" = xyes; then : + +$as_echo "#define HAVE_CBRTF 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for feenableexcept in -lm" >&5 +$as_echo_n "checking for feenableexcept in -lm... " >&6; } +if ${ac_cv_lib_m_feenableexcept+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char feenableexcept (); +int +main () +{ +return feenableexcept (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_m_feenableexcept=yes +else + ac_cv_lib_m_feenableexcept=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_feenableexcept" >&5 +$as_echo "$ac_cv_lib_m_feenableexcept" >&6; } +if test "x$ac_cv_lib_m_feenableexcept" = xyes; then : + +$as_echo "#define HAVE_FEENABLEEXCEPT 1" >>confdefs.h + +fi + + +# Check whether --enable-fortran was given. +if test "${enable_fortran+set}" = set; then : + enableval=$enable_fortran; ac_cv_build_fortran=$enableval +else + ac_cv_build_fortran=yes +fi + + if test $ac_cv_build_fortran = yes; then + ENABLE_FORTRAN_TRUE= + ENABLE_FORTRAN_FALSE='#' +else + ENABLE_FORTRAN_TRUE='#' + ENABLE_FORTRAN_FALSE= +fi + + +if test $ac_cv_build_fortran = yes; then + HAVE_FORTRAN=1 + +$as_echo "#define HAVE_FORTRAN 1" >>confdefs.h + + + acx_save_fcflags="${FCFLAGS}" + ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_FC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$FC"; then + ac_cv_prog_FC="$FC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_FC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +FC=$ac_cv_prog_FC +if test -n "$FC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 +$as_echo "$FC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$FC" && break + done +fi +if test -z "$FC"; then + ac_ct_FC=$FC + for ac_prog in xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_FC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_FC"; then + ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_FC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_FC=$ac_cv_prog_ac_ct_FC +if test -n "$ac_ct_FC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 +$as_echo "$ac_ct_FC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_FC" && break +done + + if test "x$ac_ct_FC" = x; then + FC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + FC=$ac_ct_FC + fi +fi + + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done +rm -f a.out + +# If we don't use `.F' as extension, the preprocessor is not run on the +# input file. (Note that this only needs to work for GNU compilers.) +ac_save_ext=$ac_ext +ac_ext=F +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Fortran compiler" >&5 +$as_echo_n "checking whether we are using the GNU Fortran compiler... " >&6; } +if ${ac_cv_fc_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.$ac_ext <<_ACEOF + program main +#ifndef __GNUC__ + choke me +#endif + + end +_ACEOF +if ac_fn_fc_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_fc_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 +$as_echo "$ac_cv_fc_compiler_gnu" >&6; } +ac_ext=$ac_save_ext +ac_test_FCFLAGS=${FCFLAGS+set} +ac_save_FCFLAGS=$FCFLAGS +FCFLAGS= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 +$as_echo_n "checking whether $FC accepts -g... " >&6; } +if ${ac_cv_prog_fc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + FCFLAGS=-g +cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +if ac_fn_fc_try_compile "$LINENO"; then : + ac_cv_prog_fc_g=yes +else + ac_cv_prog_fc_g=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 +$as_echo "$ac_cv_prog_fc_g" >&6; } +if test "$ac_test_FCFLAGS" = set; then + FCFLAGS=$ac_save_FCFLAGS +elif test $ac_cv_prog_fc_g = yes; then + if test "x$ac_cv_fc_compiler_gnu" = xyes; then + FCFLAGS="-g -O2" + else + FCFLAGS="-g" + fi +else + if test "x$ac_cv_fc_compiler_gnu" = xyes; then + FCFLAGS="-O2" + else + FCFLAGS= + fi +fi + +if test $ac_compiler_gnu = yes; then + GFC=yes +else + GFC= +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +func_stripname_cnf () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname_cnf + + + ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + + +if test -z "$FC" || test "X$FC" = "Xno"; then + _lt_disable_FC=yes +fi + +archive_cmds_need_lc_FC=no +allow_undefined_flag_FC= +always_export_symbols_FC=no +archive_expsym_cmds_FC= +export_dynamic_flag_spec_FC= +hardcode_direct_FC=no +hardcode_direct_absolute_FC=no +hardcode_libdir_flag_spec_FC= +hardcode_libdir_separator_FC= +hardcode_minus_L_FC=no +hardcode_automatic_FC=no +inherit_rpath_FC=no +module_cmds_FC= +module_expsym_cmds_FC= +link_all_deplibs_FC=unknown +old_archive_cmds_FC=$old_archive_cmds +reload_flag_FC=$reload_flag +reload_cmds_FC=$reload_cmds +no_undefined_flag_FC= +whole_archive_flag_spec_FC= +enable_shared_with_static_runtimes_FC=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +objext_FC=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_FC" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + + # save warnings/boilerplate of simple test code + ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + + ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${FC-"f95"} + CFLAGS=$FCFLAGS + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + compiler_FC=$CC + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + + + if test -n "$compiler"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + GCC_FC="$ac_cv_fc_compiler_gnu" + LD_FC="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + # Dependencies to place before and after the object being linked: +predep_objects_FC= +postdep_objects_FC= +predeps_FC= +postdeps_FC= +compiler_lib_search_path_FC= + +cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF + + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case ${prev}${p} in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test "$pre_test_object_deps_done" = no; then + case ${prev} in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_FC"; then + compiler_lib_search_path_FC="${prev}${p}" + else + compiler_lib_search_path_FC="${compiler_lib_search_path_FC} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_FC"; then + postdeps_FC="${prev}${p}" + else + postdeps_FC="${postdeps_FC} ${prev}${p}" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$predep_objects_FC"; then + predep_objects_FC="$p" + else + predep_objects_FC="$predep_objects_FC $p" + fi + else + if test -z "$postdep_objects_FC"; then + postdep_objects_FC="$p" + else + postdep_objects_FC="$postdep_objects_FC $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling FC test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken + + +case " $postdeps_FC " in +*" -lc "*) archive_cmds_need_lc_FC=no ;; +esac + compiler_lib_search_dirs_FC= +if test -n "${compiler_lib_search_path_FC}"; then + compiler_lib_search_dirs_FC=`echo " ${compiler_lib_search_path_FC}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lt_prog_compiler_wl_FC= +lt_prog_compiler_pic_FC= +lt_prog_compiler_static_FC= + + + if test "$GCC" = yes; then + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_static_FC='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_FC='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic_FC='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_FC='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic_FC='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_FC='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static_FC= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_FC='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared_FC=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_FC='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_FC=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic_FC='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl_FC='-Xlinker ' + if test -n "$lt_prog_compiler_pic_FC"; then + lt_prog_compiler_pic_FC="-Xcompiler $lt_prog_compiler_pic_FC" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl_FC='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_FC='-Bstatic' + else + lt_prog_compiler_static_FC='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_FC='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl_FC='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_FC='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static_FC='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl_FC='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static_FC='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_pic_FC='-KPIC' + lt_prog_compiler_static_FC='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_pic_FC='-fPIC' + lt_prog_compiler_static_FC='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_pic_FC='--shared' + lt_prog_compiler_static_FC='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl_FC='-Wl,-Wl,,' + lt_prog_compiler_pic_FC='-PIC' + lt_prog_compiler_static_FC='-Bstatic' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_pic_FC='-fpic' + lt_prog_compiler_static_FC='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl_FC='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static_FC='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_pic_FC='-qpic' + lt_prog_compiler_static_FC='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic_FC='-KPIC' + lt_prog_compiler_static_FC='-Bstatic' + lt_prog_compiler_wl_FC='' + ;; + *Sun\ F* | *Sun*Fortran*) + lt_prog_compiler_pic_FC='-KPIC' + lt_prog_compiler_static_FC='-Bstatic' + lt_prog_compiler_wl_FC='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic_FC='-KPIC' + lt_prog_compiler_static_FC='-Bstatic' + lt_prog_compiler_wl_FC='-Wl,' + ;; + *Intel*\ [CF]*Compiler*) + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_pic_FC='-fPIC' + lt_prog_compiler_static_FC='-static' + ;; + *Portland\ Group*) + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_pic_FC='-fpic' + lt_prog_compiler_static_FC='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic_FC='-KPIC' + lt_prog_compiler_static_FC='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_FC='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl_FC='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static_FC='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static_FC='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic_FC='-KPIC' + lt_prog_compiler_static_FC='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl_FC='-Qoption ld ';; + *) + lt_prog_compiler_wl_FC='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl_FC='-Qoption ld ' + lt_prog_compiler_pic_FC='-PIC' + lt_prog_compiler_static_FC='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_pic_FC='-KPIC' + lt_prog_compiler_static_FC='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic_FC='-Kconform_pic' + lt_prog_compiler_static_FC='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_pic_FC='-KPIC' + lt_prog_compiler_static_FC='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_can_build_shared_FC=no + ;; + + uts4*) + lt_prog_compiler_pic_FC='-pic' + lt_prog_compiler_static_FC='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared_FC=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_FC= + ;; + *) + lt_prog_compiler_pic_FC="$lt_prog_compiler_pic_FC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic_FC+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_FC=$lt_prog_compiler_pic_FC +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_FC" >&5 +$as_echo "$lt_cv_prog_compiler_pic_FC" >&6; } +lt_prog_compiler_pic_FC=$lt_cv_prog_compiler_pic_FC + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_FC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_FC works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_FC works... " >&6; } +if ${lt_cv_prog_compiler_pic_works_FC+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works_FC=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_FC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works_FC=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_FC" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works_FC" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works_FC" = xyes; then + case $lt_prog_compiler_pic_FC in + "" | " "*) ;; + *) lt_prog_compiler_pic_FC=" $lt_prog_compiler_pic_FC" ;; + esac +else + lt_prog_compiler_pic_FC= + lt_prog_compiler_can_build_shared_FC=no +fi + +fi + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_FC eval lt_tmp_static_flag=\"$lt_prog_compiler_static_FC\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works_FC+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works_FC=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works_FC=yes + fi + else + lt_cv_prog_compiler_static_works_FC=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_FC" >&5 +$as_echo "$lt_cv_prog_compiler_static_works_FC" >&6; } + +if test x"$lt_cv_prog_compiler_static_works_FC" = xyes; then + : +else + lt_prog_compiler_static_FC= +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_FC+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_FC=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_FC=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_FC" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_FC" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_FC+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_FC=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_FC=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_FC" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_FC" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_FC" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag_FC= + always_export_symbols_FC=no + archive_cmds_FC= + archive_expsym_cmds_FC= + compiler_needs_object_FC=no + enable_shared_with_static_runtimes_FC=no + export_dynamic_flag_spec_FC= + export_symbols_cmds_FC='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic_FC=no + hardcode_direct_FC=no + hardcode_direct_absolute_FC=no + hardcode_libdir_flag_spec_FC= + hardcode_libdir_separator_FC= + hardcode_minus_L_FC=no + hardcode_shlibpath_var_FC=unsupported + inherit_rpath_FC=no + link_all_deplibs_FC=unknown + module_cmds_FC= + module_expsym_cmds_FC= + old_archive_from_new_cmds_FC= + old_archive_from_expsyms_cmds_FC= + thread_safe_flag_spec_FC= + whole_archive_flag_spec_FC= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms_FC= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms_FC='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs_FC=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_FC='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_FC="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_FC= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs_FC=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_FC='' + ;; + m68k) + archive_cmds_FC='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_FC='-L$libdir' + hardcode_minus_L_FC=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_FC=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_FC='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_FC=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, FC) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_FC='-L$libdir' + export_dynamic_flag_spec_FC='${wl}--export-all-symbols' + allow_undefined_flag_FC=unsupported + always_export_symbols_FC=no + enable_shared_with_static_runtimes_FC=yes + export_symbols_cmds_FC='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_FC='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_FC='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_FC=no + fi + ;; + + haiku*) + archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + link_all_deplibs_FC=yes + ;; + + interix[3-9]*) + hardcode_direct_FC=no + hardcode_shlibpath_var_FC=no + hardcode_libdir_flag_spec_FC='${wl}-rpath,$libdir' + export_dynamic_flag_spec_FC='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_FC='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec_FC='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec_FC='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec_FC= + tmp_sharedflag='--shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec_FC='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object_FC=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec_FC='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object_FC=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds_FC='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds_FC='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec_FC='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir' + archive_cmds_FC='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds_FC='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs_FC=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_FC='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs_FC=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_FC=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs_FC=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir' + archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_FC=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds_FC='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct_FC=yes + hardcode_shlibpath_var_FC=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_FC=no + fi + ;; + esac + + if test "$ld_shlibs_FC" = no; then + runpath_var= + hardcode_libdir_flag_spec_FC= + export_dynamic_flag_spec_FC= + whole_archive_flag_spec_FC= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag_FC=unsupported + always_export_symbols_FC=yes + archive_expsym_cmds_FC='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L_FC=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct_FC=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds_FC='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_FC='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_FC='' + hardcode_direct_FC=yes + hardcode_direct_absolute_FC=yes + hardcode_libdir_separator_FC=':' + link_all_deplibs_FC=yes + file_list_spec_FC='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct_FC=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_FC=yes + hardcode_libdir_flag_spec_FC='-L$libdir' + hardcode_libdir_separator_FC= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec_FC='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols_FC=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_FC='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath__FC+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +if ac_fn_fc_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__FC=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__FC"; then + lt_cv_aix_libpath__FC=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__FC"; then + lt_cv_aix_libpath__FC="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath__FC +fi + + hardcode_libdir_flag_spec_FC='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds_FC='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_FC='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_FC="-z nodefs" + archive_expsym_cmds_FC="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath__FC+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +if ac_fn_fc_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__FC=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__FC"; then + lt_cv_aix_libpath__FC=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__FC"; then + lt_cv_aix_libpath__FC="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath__FC +fi + + hardcode_libdir_flag_spec_FC='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_FC=' ${wl}-bernotok' + allow_undefined_flag_FC=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec_FC='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_FC='$convenience' + fi + archive_cmds_need_lc_FC=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds_FC="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_FC='' + ;; + m68k) + archive_cmds_FC='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_FC='-L$libdir' + hardcode_minus_L_FC=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec_FC=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec_FC=' ' + allow_undefined_flag_FC=unsupported + always_export_symbols_FC=yes + file_list_spec_FC='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds_FC='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + archive_expsym_cmds_FC='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, FC)='true' + enable_shared_with_static_runtimes_FC=yes + exclude_expsyms_FC='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + export_symbols_cmds_FC='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds_FC='chmod 644 $oldlib' + postlink_cmds_FC='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec_FC=' ' + allow_undefined_flag_FC=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds_FC='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds_FC='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds_FC='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes_FC=yes + ;; + esac + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc_FC=no + hardcode_direct_FC=no + hardcode_automatic_FC=yes + hardcode_shlibpath_var_FC=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + whole_archive_flag_spec_FC='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + compiler_needs_object_FC=yes + else + whole_archive_flag_spec_FC='' + fi + link_all_deplibs_FC=yes + allow_undefined_flag_FC="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + archive_cmds_FC="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds_FC="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds_FC="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds_FC="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs_FC=no + fi + + ;; + + dgux*) + archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_FC='-L$libdir' + hardcode_shlibpath_var_FC=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec_FC='-R$libdir' + hardcode_direct_FC=yes + hardcode_shlibpath_var_FC=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_FC=yes + hardcode_minus_L_FC=yes + hardcode_shlibpath_var_FC=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds_FC='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_FC='-R$libdir' + hardcode_direct_FC=yes + hardcode_shlibpath_var_FC=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds_FC='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds_FC='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec_FC='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_FC=: + hardcode_direct_FC=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_FC=yes + export_dynamic_flag_spec_FC='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + archive_cmds_FC='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_FC='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec_FC='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_FC=: + hardcode_direct_FC=yes + hardcode_direct_absolute_FC=yes + export_dynamic_flag_spec_FC='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_FC=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds_FC='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds_FC='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_FC='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds_FC='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds_FC='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_FC='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec_FC='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_FC=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct_FC=no + hardcode_shlibpath_var_FC=no + ;; + *) + hardcode_direct_FC=yes + hardcode_direct_absolute_FC=yes + export_dynamic_flag_spec_FC='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_FC=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat > conftest.$ac_ext <<_ACEOF + + subroutine foo + end +_ACEOF +if ac_fn_fc_try_link "$LINENO"; then : + lt_cv_irix_exported_symbol=yes +else + lt_cv_irix_exported_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } + if test "$lt_cv_irix_exported_symbol" = yes; then + archive_expsym_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi + else + archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc_FC='no' + hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_FC=: + inherit_rpath_FC=yes + link_all_deplibs_FC=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds_FC='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec_FC='-R$libdir' + hardcode_direct_FC=yes + hardcode_shlibpath_var_FC=no + ;; + + newsos6) + archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_FC=yes + hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_FC=: + hardcode_shlibpath_var_FC=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct_FC=yes + hardcode_shlibpath_var_FC=no + hardcode_direct_absolute_FC=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds_FC='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_FC='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec_FC='${wl}-rpath,$libdir' + export_dynamic_flag_spec_FC='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_FC='-R$libdir' + ;; + *) + archive_cmds_FC='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_FC='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs_FC=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec_FC='-L$libdir' + hardcode_minus_L_FC=yes + allow_undefined_flag_FC=unsupported + archive_cmds_FC='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds_FC='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag_FC=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_FC='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag_FC=' -expect_unresolved \*' + archive_cmds_FC='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc_FC='no' + hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_FC=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag_FC=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_FC='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag_FC=' -expect_unresolved \*' + archive_cmds_FC='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_FC='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec_FC='-rpath $libdir' + fi + archive_cmds_need_lc_FC='no' + hardcode_libdir_separator_FC=: + ;; + + solaris*) + no_undefined_flag_FC=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds_FC='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_FC='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds_FC='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_FC='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds_FC='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_FC='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec_FC='-R$libdir' + hardcode_shlibpath_var_FC=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec_FC='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec_FC='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs_FC=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds_FC='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_FC='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec_FC='-L$libdir' + hardcode_direct_FC=yes + hardcode_minus_L_FC=yes + hardcode_shlibpath_var_FC=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_FC=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds_FC='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds_FC='$CC -r -o $output$reload_objs' + hardcode_direct_FC=no + ;; + motorola) + archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_FC=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_FC=no + ;; + + sysv4.3*) + archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_FC=no + export_dynamic_flag_spec_FC='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_FC=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs_FC=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag_FC='${wl}-z,text' + archive_cmds_need_lc_FC=no + hardcode_shlibpath_var_FC=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds_FC='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_FC='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_FC='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_FC='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_FC='${wl}-z,text' + allow_undefined_flag_FC='${wl}-z,nodefs' + archive_cmds_need_lc_FC=no + hardcode_shlibpath_var_FC=no + hardcode_libdir_flag_spec_FC='${wl}-R,$libdir' + hardcode_libdir_separator_FC=':' + link_all_deplibs_FC=yes + export_dynamic_flag_spec_FC='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds_FC='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_FC='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_FC='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_FC='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_FC='-L$libdir' + hardcode_shlibpath_var_FC=no + ;; + + *) + ld_shlibs_FC=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec_FC='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_FC" >&5 +$as_echo "$ld_shlibs_FC" >&6; } +test "$ld_shlibs_FC" = no && can_build_shared=no + +with_gnu_ld_FC=$with_gnu_ld + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_FC" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_FC=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_FC in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc_FC+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_FC + pic_flag=$lt_prog_compiler_pic_FC + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_FC + allow_undefined_flag_FC= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_FC 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds_FC 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc_FC=no + else + lt_cv_archive_cmds_need_lc_FC=yes + fi + allow_undefined_flag_FC=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_FC" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc_FC" >&6; } + archive_cmds_need_lc_FC=$lt_cv_archive_cmds_need_lc_FC + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_FC\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_FC\"" + cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +if ac_fn_fc_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Add ABI-specific directories to the system library path. + sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" + + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_FC= +if test -n "$hardcode_libdir_flag_spec_FC" || + test -n "$runpath_var_FC" || + test "X$hardcode_automatic_FC" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct_FC" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, FC)" != no && + test "$hardcode_minus_L_FC" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_FC=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_FC=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_FC=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_FC" >&5 +$as_echo "$hardcode_action_FC" >&6; } + +if test "$hardcode_action_FC" = relink || + test "$inherit_rpath_FC" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test "$_lt_disable_FC" != yes + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + if test x"$FC" = x; then + as_fn_error $? "could not find Fortran 90 compiler" "$LINENO" 5 + fi + + ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + + ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .f90 files" >&5 +$as_echo_n "checking for Fortran flag to compile .f90 files... " >&6; } +if ${ac_cv_fc_srcext_f90+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=f90 +ac_fcflags_srcext_save=$ac_fcflags_srcext +ac_fcflags_srcext= +ac_cv_fc_srcext_f90=unknown +case $ac_ext in #( + [fF]77) ac_try=f77;; #( + *) ac_try=f95;; +esac +for ac_flag in none -qsuffix=f=f90 -Tf "-x $ac_try"; do + test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag" + cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +if ac_fn_fc_try_compile "$LINENO"; then : + ac_cv_fc_srcext_f90=$ac_flag; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +rm -f conftest.$ac_objext conftest.f90 +ac_fcflags_srcext=$ac_fcflags_srcext_save + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_f90" >&5 +$as_echo "$ac_cv_fc_srcext_f90" >&6; } +if test "x$ac_cv_fc_srcext_f90" = xunknown; then + as_fn_error $? "Fortran could not compile .f90 files" "$LINENO" 5 +else + ac_fc_srcext=f90 + if test "x$ac_cv_fc_srcext_f90" = xnone; then + ac_fcflags_srcext="" + FCFLAGS_f90="" + else + ac_fcflags_srcext=$ac_cv_fc_srcext_f90 + FCFLAGS_f90=$ac_cv_fc_srcext_f90 + fi + + +fi +ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + + FCFLAGS="${acx_save_fcflags}" + + + + +if test -z "${FCFLAGS}"; then + case "${FC}" in + gfortran*) + FCFLAGS="-pipe -O3 -funroll-loops -ffast-math -ffree-line-length-none" + ;; + openf9*) + FCFLAGS="-O3 -funroll-loops -ffast-math" + ;; + g95*) + FCFLAGS="-pipe -O3 -funroll-loops -ffast-math" + ;; + efc*|ifc*|ifort*) + case "${host}" in + x86_64*) + FCFLAGS="-u -fpp1 -nbs -pc80 -pad -align -unroll -O3 -ip -no-fp-port -mno-ieee-fp -vec-report0 -no-prec-div" + ;; + i?86*linux*) + FCFLAGS="-u -fpp1 -nbs -pc80 -pad -align -unroll -O3 -ip -no-fp-port -mno-ieee-fp -vec-report0 -no-prec-div" + a=`echo $host | sed "s/^i//" | sed "s/86.*//"` + if test "$a" -gt 5 ; then + FCFLAGS="$FCFLAGS -tpp7 -xW" + fi + ;; + ia64*) + FCFLAGS="-O3 -ip -IPF_fp_relaxed -ftz -fpp -u -align all -pad" + ;; + esac + ;; + sun*) + case "${host}" in + i?86*linux*|x86_64*) + FCFLAGS="-fast -xprefetch -xvector=simd" + ;; + sparc*) + FCFLAGS="-fast" + ;; + esac + ;; + pathf9*) + FCFLAGS="-O3 -march=auto -mcpu=auto -OPT:Ofast -fno-math-errno -LNO:simd=2 -OPT:align_unsafe=ON" + ;; + pgf90*) + FCFLAGS="-O4 -fast -Munroll -Mnoframe -Mdalign" + ;; + abf90*) + FCFLAGS="-O3 -YEXT_NAMES=LCS -YEXT_SFX=_" + ;; + xlf*) + FCFLAGS="-O3 -qarch=auto -qtune=auto -qcache=auto -qxlf90=autodealloc" + ;; + f9*) + case "${host}" in + alphaev*) + FCFLAGS="-align dcommons -fast -tune host -arch host -noautomatic" + ;; + mips*) + FCFLAGS="-Ofast -O3" + ;; + sparc*) + FCFLAGS="-fast" + ;; + *) + FCFLAGS="-O3" + ;; + esac + ;; + *) + FCFLAGS="-O3" + ;; + esac +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: Using FCFLAGS=\"$FCFLAGS\"" >&5 +$as_echo "$as_me: Using FCFLAGS=\"$FCFLAGS\"" >&6;} + + + + # "gcc -E -x c" means treat the file as if it were C. For some reason, when gcc identifies the source + # as Fortran, it will not concatenate tokens in preprocessing, so we must trick it. + for FCCPP_base in "$FCCPP" "/lib/cpp" "$CPP" "$CPP -x c" "`which cpp`"; do + # cycle if blank + if test -z "$FCCPP_base"; then + continue + fi + + for FCCPP in "$FCCPP_base" "$FCCPP_base -ansi"; do + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $FCCPP is usable for Fortran preprocessing" >&5 +$as_echo_n "checking whether $FCCPP is usable for Fortran preprocessing... " >&6; } + acx_fpp_ok=yes + + + + + echo " program main +anything + end" > conftest.F90 + + if (eval "$FCCPP conftest.F90") 2>&5 | + grep "anything" >/dev/null 2>&1; then : + + else + acx_fpp_ok=no; { $as_echo "$as_me:${as_lineno-$LINENO}: result: preprocessor cannot be run" >&5 +$as_echo "preprocessor cannot be run" >&6; }; break + fi + rm -f conftest* + + # very unlikely that adding -ansi will allow it to be run at all + + + + + echo " program main + +#define ADD_I(x) x ## i +ADD_I(h) + end" > conftest.F90 + + if (eval "$FCCPP conftest.F90") 2>&5 | + grep "hi" >/dev/null 2>&1; then : + + else + acx_fpp_ok=no; { $as_echo "$as_me:${as_lineno-$LINENO}: result: preprocessor does not concatenate tokens" >&5 +$as_echo "preprocessor does not concatenate tokens" >&6; } + fi + rm -f conftest* + + + # in Fortran this is string concatenation, must not be stripped + # some cpp's (e.g. icc -E -ansi) might actually insert a space between // too which is not acceptable + + + + echo " program main + +#define PUSH_SUB(x) x // ine +PUSH_SUB(rout) + end" > conftest.F90 + + if (eval "$FCCPP conftest.F90") 2>&5 | + grep "rout // ine" >/dev/null 2>&1; then : + + else + acx_fpp_ok=no; { $as_echo "$as_me:${as_lineno-$LINENO}: result: preprocessor mangles C++ style comment" >&5 +$as_echo "preprocessor mangles C++ style comment" >&6; } + fi + rm -f conftest* + + + if test x"$acx_fpp_ok" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + break + fi + done + if test x"$acx_fpp_ok" = xyes; then + break + fi + done + + if test x"$acx_fpp_ok" = xno; then + as_fn_error $? "Could not find preprocessor usable for Fortran." "$LINENO" 5 + fi + + + + + ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5 +$as_echo_n "checking how to get verbose linking output from $FC... " >&6; } +if ${ac_cv_prog_fc_v+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +if ac_fn_fc_try_compile "$LINENO"; then : + ac_cv_prog_fc_v= +# Try some options frequently used verbose output +for ac_verb in -v -verbose --verbose -V -\#\#\#; do + cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF + +# Compile and link our simple test program by passing a flag (argument +# 1 to this macro) to the Fortran compiler in order to get +# "verbose" output that we can then parse for the Fortran linker +# flags. +ac_save_FCFLAGS=$FCFLAGS +FCFLAGS="$FCFLAGS $ac_verb" +eval "set x $ac_link" +shift +$as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5 +# gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, +# LIBRARY_PATH; skip all such settings. +ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | + sed '/^Driving:/d; /^Configured with:/d; + '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` +$as_echo "$ac_fc_v_output" >&5 +FCFLAGS=$ac_save_FCFLAGS + +rm -rf conftest* + +# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where +# /foo, /bar, and /baz are search directories for the Fortran linker. +# Here, we change these into -L/foo -L/bar -L/baz (and put it first): +ac_fc_v_output="`echo $ac_fc_v_output | + grep 'LPATH is:' | + sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" + +# FIXME: we keep getting bitten by quoted arguments; a more general fix +# that detects unbalanced quotes in FLIBS should be implemented +# and (ugh) tested at some point. +case $ac_fc_v_output in + # With xlf replace commas with spaces, + # and remove "-link" and closing parenthesis. + *xlfentry*) + ac_fc_v_output=`echo $ac_fc_v_output | + sed ' + s/,/ /g + s/ -link / /g + s/) *$// + ' + ` ;; + + # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted + # $LIBS confuse us, and the libraries appear later in the output anyway). + *mGLOB_options_string*) + ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; + + # Portland Group compiler has singly- or doubly-quoted -cmdline argument + # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. + # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". + *-cmdline\ * | *-ignore\ * | *-def\ *) + ac_fc_v_output=`echo $ac_fc_v_output | sed "\ + s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g + s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g + s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; + + # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. + *fort77*f2c*gcc*) + ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' + /:[ ]\+Running[ ]\{1,\}"gcc"/{ + /"-c"/d + /[.]c"*/d + s/^.*"gcc"/"gcc"/ + s/"//gp + }'` ;; + + # If we are using Cray Fortran then delete quotes. + *cft90*) + ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; +esac + + + # look for -l* and *.a constructs in the output + for ac_arg in $ac_fc_v_output; do + case $ac_arg in + [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) + ac_cv_prog_fc_v=$ac_verb + break 2 ;; + esac + done +done +if test -z "$ac_cv_prog_fc_v"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5 +$as_echo "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;} +fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 +$as_echo "$as_me: WARNING: compilation failed" >&2;} +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5 +$as_echo "$ac_cv_prog_fc_v" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5 +$as_echo_n "checking for Fortran libraries of $FC... " >&6; } +if ${ac_cv_fc_libs+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$FCLIBS" != "x"; then + ac_cv_fc_libs="$FCLIBS" # Let the user override the test. +else + +cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF + +# Compile and link our simple test program by passing a flag (argument +# 1 to this macro) to the Fortran compiler in order to get +# "verbose" output that we can then parse for the Fortran linker +# flags. +ac_save_FCFLAGS=$FCFLAGS +FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v" +eval "set x $ac_link" +shift +$as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5 +# gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, +# LIBRARY_PATH; skip all such settings. +ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | + sed '/^Driving:/d; /^Configured with:/d; + '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` +$as_echo "$ac_fc_v_output" >&5 +FCFLAGS=$ac_save_FCFLAGS + +rm -rf conftest* + +# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where +# /foo, /bar, and /baz are search directories for the Fortran linker. +# Here, we change these into -L/foo -L/bar -L/baz (and put it first): +ac_fc_v_output="`echo $ac_fc_v_output | + grep 'LPATH is:' | + sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" + +# FIXME: we keep getting bitten by quoted arguments; a more general fix +# that detects unbalanced quotes in FLIBS should be implemented +# and (ugh) tested at some point. +case $ac_fc_v_output in + # With xlf replace commas with spaces, + # and remove "-link" and closing parenthesis. + *xlfentry*) + ac_fc_v_output=`echo $ac_fc_v_output | + sed ' + s/,/ /g + s/ -link / /g + s/) *$// + ' + ` ;; + + # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted + # $LIBS confuse us, and the libraries appear later in the output anyway). + *mGLOB_options_string*) + ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; + + # Portland Group compiler has singly- or doubly-quoted -cmdline argument + # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. + # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". + *-cmdline\ * | *-ignore\ * | *-def\ *) + ac_fc_v_output=`echo $ac_fc_v_output | sed "\ + s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g + s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g + s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; + + # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. + *fort77*f2c*gcc*) + ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' + /:[ ]\+Running[ ]\{1,\}"gcc"/{ + /"-c"/d + /[.]c"*/d + s/^.*"gcc"/"gcc"/ + s/"//gp + }'` ;; + + # If we are using Cray Fortran then delete quotes. + *cft90*) + ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; +esac + + + +ac_cv_fc_libs= + +# Save positional arguments (if any) +ac_save_positional="$@" + +set X $ac_fc_v_output +while test $# != 1; do + shift + ac_arg=$1 + case $ac_arg in + [\\/]*.a | ?:[\\/]*.a) + ac_exists=false + for ac_i in $ac_cv_fc_libs; do + if test x"$ac_arg" = x"$ac_i"; then + ac_exists=true + break + fi + done + + if test x"$ac_exists" = xtrue; then : + +else + ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" +fi + ;; + -bI:*) + ac_exists=false + for ac_i in $ac_cv_fc_libs; do + if test x"$ac_arg" = x"$ac_i"; then + ac_exists=true + break + fi + done + + if test x"$ac_exists" = xtrue; then : + +else + if test "$ac_compiler_gnu" = yes; then + for ac_link_opt in $ac_arg; do + ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" + done +else + ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" +fi +fi + ;; + # Ignore these flags. + -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ + |-LANG:=* | -LIST:* | -LNO:* | -link) + ;; + -lkernel32) + case $host_os in + *cygwin*) ;; + *) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" + ;; + esac + ;; + -[LRuYz]) + # These flags, when seen by themselves, take an argument. + # We remove the space between option and argument and re-iterate + # unless we find an empty arg or a new option (starting with -) + case $2 in + "" | -*);; + *) + ac_arg="$ac_arg$2" + shift; shift + set X $ac_arg "$@" + ;; + esac + ;; + -YP,*) + for ac_j in `$as_echo "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do + ac_exists=false + for ac_i in $ac_cv_fc_libs; do + if test x"$ac_j" = x"$ac_i"; then + ac_exists=true + break + fi + done + + if test x"$ac_exists" = xtrue; then : + +else + ac_arg="$ac_arg $ac_j" + ac_cv_fc_libs="$ac_cv_fc_libs $ac_j" +fi + done + ;; + -[lLR]*) + ac_exists=false + for ac_i in $ac_cv_fc_libs; do + if test x"$ac_arg" = x"$ac_i"; then + ac_exists=true + break + fi + done + + if test x"$ac_exists" = xtrue; then : + +else + ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" +fi + ;; + -zallextract*| -zdefaultextract) + ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" + ;; + # Ignore everything else. + esac +done +# restore positional arguments +set X $ac_save_positional; shift + +# We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, +# then we insist that the "run path" must be an absolute path (i.e. it +# must begin with a "/"). +case `(uname -sr) 2>/dev/null` in + "SunOS 5"*) + ac_ld_run_path=`$as_echo "$ac_fc_v_output" | + sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` + test "x$ac_ld_run_path" != x && + if test "$ac_compiler_gnu" = yes; then + for ac_link_opt in $ac_ld_run_path; do + ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" + done +else + ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path" +fi + ;; +esac +fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5 +$as_echo "$ac_cv_fc_libs" >&6; } +FCLIBS="$ac_cv_fc_libs" + + +ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + +ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dummy main to link with Fortran libraries" >&5 +$as_echo_n "checking for dummy main to link with Fortran libraries... " >&6; } +if ${ac_cv_fc_dummy_main+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_fc_dm_save_LIBS=$LIBS + LIBS="$LIBS $FCLIBS" + ac_fortran_dm_var=FC_DUMMY_MAIN + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + # First, try linking without a dummy main: + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef FC_DUMMY_MAIN +#ifndef FC_DUMMY_MAIN_EQ_F77 +# ifdef __cplusplus + extern "C" +# endif + int FC_DUMMY_MAIN() { return 1; } +#endif +#endif +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_fortran_dummy_main=none +else + ac_cv_fortran_dummy_main=unknown +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + if test $ac_cv_fortran_dummy_main = unknown; then + for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define $ac_fortran_dm_var $ac_func +#ifdef FC_DUMMY_MAIN +#ifndef FC_DUMMY_MAIN_EQ_F77 +# ifdef __cplusplus + extern "C" +# endif + int FC_DUMMY_MAIN() { return 1; } +#endif +#endif +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_fortran_dummy_main=$ac_func; break +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + done + fi + ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + ac_cv_fc_dummy_main=$ac_cv_fortran_dummy_main + rm -rf conftest* + LIBS=$ac_fc_dm_save_LIBS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_dummy_main" >&5 +$as_echo "$ac_cv_fc_dummy_main" >&6; } +FC_DUMMY_MAIN=$ac_cv_fc_dummy_main +if test "$FC_DUMMY_MAIN" != unknown; then : + if test $FC_DUMMY_MAIN != none; then + +cat >>confdefs.h <<_ACEOF +#define FC_DUMMY_MAIN $FC_DUMMY_MAIN +_ACEOF + + if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then + +$as_echo "#define FC_DUMMY_MAIN_EQ_F77 1" >>confdefs.h + + fi +fi +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "linking to Fortran libraries from C fails +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + +ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran name-mangling scheme" >&5 +$as_echo_n "checking for Fortran name-mangling scheme... " >&6; } +if ${ac_cv_fc_mangling+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.$ac_ext <<_ACEOF + subroutine foobar() + return + end + subroutine foo_bar() + return + end +_ACEOF +if ac_fn_fc_try_compile "$LINENO"; then : + mv conftest.$ac_objext cfortran_test.$ac_objext + + ac_save_LIBS=$LIBS + LIBS="cfortran_test.$ac_objext $LIBS $FCLIBS" + + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + ac_success=no + for ac_foobar in foobar FOOBAR; do + for ac_underscore in "" "_"; do + ac_func="$ac_foobar$ac_underscore" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +#ifdef FC_DUMMY_MAIN +#ifndef FC_DUMMY_MAIN_EQ_F77 +# ifdef __cplusplus + extern "C" +# endif + int FC_DUMMY_MAIN() { return 1; } +#endif +#endif +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_success=yes; break 2 +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + done + done + ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + + if test "$ac_success" = "yes"; then + case $ac_foobar in + foobar) + ac_case=lower + ac_foo_bar=foo_bar + ;; + FOOBAR) + ac_case=upper + ac_foo_bar=FOO_BAR + ;; + esac + + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + ac_success_extra=no + for ac_extra in "" "_"; do + ac_func="$ac_foo_bar$ac_underscore$ac_extra" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +#ifdef FC_DUMMY_MAIN +#ifndef FC_DUMMY_MAIN_EQ_F77 +# ifdef __cplusplus + extern "C" +# endif + int FC_DUMMY_MAIN() { return 1; } +#endif +#endif +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_success_extra=yes; break +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + done + ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + + if test "$ac_success_extra" = "yes"; then + ac_cv_fc_mangling="$ac_case case" + if test -z "$ac_underscore"; then + ac_cv_fc_mangling="$ac_cv_fc_mangling, no underscore" + else + ac_cv_fc_mangling="$ac_cv_fc_mangling, underscore" + fi + if test -z "$ac_extra"; then + ac_cv_fc_mangling="$ac_cv_fc_mangling, no extra underscore" + else + ac_cv_fc_mangling="$ac_cv_fc_mangling, extra underscore" + fi + else + ac_cv_fc_mangling="unknown" + fi + else + ac_cv_fc_mangling="unknown" + fi + + LIBS=$ac_save_LIBS + rm -rf conftest* + rm -f cfortran_test* +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compile a simple Fortran program +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_mangling" >&5 +$as_echo "$ac_cv_fc_mangling" >&6; } + +ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + +ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu +case $ac_cv_fc_mangling in + "lower case, no underscore, no extra underscore") + $as_echo "#define FC_FUNC(name,NAME) name" >>confdefs.h + + $as_echo "#define FC_FUNC_(name,NAME) name" >>confdefs.h + ;; + "lower case, no underscore, extra underscore") + $as_echo "#define FC_FUNC(name,NAME) name" >>confdefs.h + + $as_echo "#define FC_FUNC_(name,NAME) name ## _" >>confdefs.h + ;; + "lower case, underscore, no extra underscore") + $as_echo "#define FC_FUNC(name,NAME) name ## _" >>confdefs.h + + $as_echo "#define FC_FUNC_(name,NAME) name ## _" >>confdefs.h + ;; + "lower case, underscore, extra underscore") + $as_echo "#define FC_FUNC(name,NAME) name ## _" >>confdefs.h + + $as_echo "#define FC_FUNC_(name,NAME) name ## __" >>confdefs.h + ;; + "upper case, no underscore, no extra underscore") + $as_echo "#define FC_FUNC(name,NAME) NAME" >>confdefs.h + + $as_echo "#define FC_FUNC_(name,NAME) NAME" >>confdefs.h + ;; + "upper case, no underscore, extra underscore") + $as_echo "#define FC_FUNC(name,NAME) NAME" >>confdefs.h + + $as_echo "#define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h + ;; + "upper case, underscore, no extra underscore") + $as_echo "#define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h + + $as_echo "#define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h + ;; + "upper case, underscore, extra underscore") + $as_echo "#define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h + + $as_echo "#define FC_FUNC_(name,NAME) NAME ## __" >>confdefs.h + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unknown Fortran name-mangling scheme" >&5 +$as_echo "$as_me: WARNING: unknown Fortran name-mangling scheme" >&2;} + ;; +esac + +ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler accepts very long lines" >&5 +$as_echo_n "checking whether the compiler accepts very long lines... " >&6; } +cat > conftest.$ac_ext <<_ACEOF + program main + +write(*, *) '456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678904567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789001234567890123456789045678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890' + + end +_ACEOF +if ac_fn_fc_try_compile "$LINENO"; then : + acx_long_lines_ok=yes; +$as_echo "#define LONG_LINES 1" >>confdefs.h + +else + acx_long_lines_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +LONG_LINES=$acx_long_lines_ok + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_long_lines_ok" >&5 +$as_echo "$acx_long_lines_ok" >&6; } + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler accepts \"line-number\" lines cast by the preprocessor" >&5 +$as_echo_n "checking whether the compiler accepts \"line-number\" lines cast by the preprocessor... " >&6; } +cat > conftest.$ac_ext <<_ACEOF + program main +# 1 + end +_ACEOF +if ac_fn_fc_try_compile "$LINENO"; then : + acx_f90_accepts_line_numbers_ok=yes + +$as_echo "#define F90_ACCEPTS_LINE_NUMBERS 1" >>confdefs.h + +else + acx_f90_accepts_line_numbers_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +F90_ACCEPTS_LINE_NUMBERS=$acx_f90_accepts_line_numbers_ok + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_f90_accepts_line_numbers_ok" >&5 +$as_echo "$acx_f90_accepts_line_numbers_ok" >&6; } + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking fortran 90 modules extension" >&5 +$as_echo_n "checking fortran 90 modules extension... " >&6; } +if ${ax_cv_f90_modext+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + +ax_f90_mod_uppercase=no +i=0 +while test \( -f tmpdir_$i \) -o \( -d tmpdir_$i \) ; do + i=`expr $i + 1` +done +mkdir tmpdir_$i +cd tmpdir_$i +cat > conftest.$ac_ext <<_ACEOF +module conftest_module + contains + subroutine conftest_routine + write(*,'(a)') 'gotcha!' + end subroutine conftest_routine + end module conftest_module + +_ACEOF +if ac_fn_fc_try_compile "$LINENO"; then : + ax_cv_f90_modext=`ls | sed -n 's,conftest_module\.,,p'` + if test x$ax_cv_f90_modext = x ; then + ax_cv_f90_modext=`ls | sed -n 's,CONFTEST_MODULE\.,,p'` + if test x$ax_cv_f90_modext = x ; then + ax_cv_f90_modext=unknown + else + ax_f90_mod_uppercase=yes + fi + fi + +else + ax_cv_f90_modext=unknown +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +cd .. +rm -fr tmpdir_$i +ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_f90_modext" >&5 +$as_echo "$ax_cv_f90_modext" >&6; } + + + + + if test -z "$FC_INTEGER_SIZE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the size of a Fortran integer" >&5 +$as_echo_n "checking for the size of a Fortran integer... " >&6; } + if test "$cross_compiling" = yes; then : + ac_fcintegersize=4; echo -n "cross-compiling; assuming... " +else + cat > conftest.$ac_ext <<_ACEOF + program main + + integer :: i + integer(8) :: i8 + + i8 = huge(i) + + select case(i8) + case(127_8); i = 1 + case(32767_8); i = 2 + case(2147483647_8); i = 4 + case(9223372036854775807_8); i = 8 + case default; write(*,'(a,i20)') "unrecognized size ", i8; stop 999 + end select + + open(1, file='conftest.out') + write(1,'(i1)') i + + end +_ACEOF +if ac_fn_fc_try_run "$LINENO"; then : + ac_fcintegersize=`cat conftest.out` +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "f90 program to find the size of a Fortran integer failed +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_fcintegersize} bytes" >&5 +$as_echo "${ac_fcintegersize} bytes" >&6; } + else + ac_fcintegersize=$FC_INTEGER_SIZE + fi + +cat >>confdefs.h <<_ACEOF +#define FC_INTEGER_SIZE ${ac_fcintegersize} +_ACEOF + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for which C type corresponds to Fortran integer" >&5 +$as_echo_n "checking for which C type corresponds to Fortran integer... " >&6; } + + + if test -z "$CC_FORTRAN_INT"; then + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + if test "$cross_compiling" = yes; then : + ac_ccfortranint="int"; echo -n "cross-compiling; assuming... " +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include + +#ifdef FC_DUMMY_MAIN +#ifndef FC_DUMMY_MAIN_EQ_F77 +# ifdef __cplusplus + extern "C" +# endif + int FC_DUMMY_MAIN() { return 1; } +#endif +#endif +int +main () +{ + + FILE* fp; + fp = fopen("conftest.out", "w"); + if(${ac_fcintegersize} == sizeof(char)) + fprintf(fp, "char"); + else if(${ac_fcintegersize} == sizeof(short)) + fprintf(fp, "short"); + else if(${ac_fcintegersize} == sizeof(int)) + fprintf(fp, "int"); + else if(${ac_fcintegersize} == sizeof(long)) + fprintf(fp, "long"); + else + return 1; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_ccfortranint=`cat conftest.out` +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C program failed to find the C type of a Fortran integer +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_ccfortranint}" >&5 +$as_echo "${ac_ccfortranint}" >&6; } + else + ac_ccfortranint=$CC_FORTRAN_INT + fi + +cat >>confdefs.h <<_ACEOF +#define CC_FORTRAN_INT ${ac_ccfortranint} +_ACEOF + + + + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +else + HAVE_FORTRAN=0 +fi + + if test x$ax_f90_mod_uppercase = xyes; then + F90_MOD_UPPERCASE_TRUE= + F90_MOD_UPPERCASE_FALSE='#' +else + F90_MOD_UPPERCASE_TRUE='#' + F90_MOD_UPPERCASE_FALSE= +fi + + if test x${HAVE_FORTRAN} = x1; then + COMPILE_FORTRAN_TRUE= + COMPILE_FORTRAN_FALSE='#' +else + COMPILE_FORTRAN_TRUE='#' + COMPILE_FORTRAN_FALSE= +fi + + +# Check whether --enable-single was given. +if test "${enable_single+set}" = set; then : + enableval=$enable_single; ac_cv_single_prec=$enableval +else + ac_cv_single_prec=no +fi + + + if test $ac_cv_single_prec = yes; then + COMPILE_SINGLE_TRUE= + COMPILE_SINGLE_FALSE='#' +else + COMPILE_SINGLE_TRUE='#' + COMPILE_SINGLE_FALSE= +fi + + + +ac_config_files="$ac_config_files Makefile xc_version.h src/Makefile testsuite/Makefile build/Makefile build/libxc.pc build/libxc.spec" + + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +$as_echo_n "checking that generated files are newer than configure... " >&6; } + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 +$as_echo "done" >&6; } + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${ENABLE_FORTRAN_TRUE}" && test -z "${ENABLE_FORTRAN_FALSE}"; then + as_fn_error $? "conditional \"ENABLE_FORTRAN\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${F90_MOD_UPPERCASE_TRUE}" && test -z "${F90_MOD_UPPERCASE_FALSE}"; then + as_fn_error $? "conditional \"F90_MOD_UPPERCASE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COMPILE_FORTRAN_TRUE}" && test -z "${COMPILE_FORTRAN_FALSE}"; then + as_fn_error $? "conditional \"COMPILE_FORTRAN\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COMPILE_SINGLE_TRUE}" && test -z "${COMPILE_SINGLE_FALSE}"; then + as_fn_error $? "conditional \"COMPILE_SINGLE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by libxc $as_me 2.2.0, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to . +libxc home page: ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +libxc config.status 2.2.0 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' +macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' +macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' +pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' +ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' +host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' +host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' +host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' +build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' +build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' +build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' +SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' +Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' +GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' +EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' +FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' +LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' +NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' +LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' +ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' +exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' +lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' +lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' +reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' +want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' +sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' +AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' +STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' +RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' +lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' +CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' +compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' +GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' +lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' +objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' +need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' +LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' +OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' +libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' +module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' +need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' +version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' +runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' +libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' +soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' +install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' +finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' +old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' +striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' +predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' +postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' +predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' +postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' +LD_FC='`$ECHO "$LD_FC" | $SED "$delay_single_quote_subst"`' +reload_flag_FC='`$ECHO "$reload_flag_FC" | $SED "$delay_single_quote_subst"`' +reload_cmds_FC='`$ECHO "$reload_cmds_FC" | $SED "$delay_single_quote_subst"`' +old_archive_cmds_FC='`$ECHO "$old_archive_cmds_FC" | $SED "$delay_single_quote_subst"`' +compiler_FC='`$ECHO "$compiler_FC" | $SED "$delay_single_quote_subst"`' +GCC_FC='`$ECHO "$GCC_FC" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag_FC='`$ECHO "$lt_prog_compiler_no_builtin_flag_FC" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic_FC='`$ECHO "$lt_prog_compiler_pic_FC" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl_FC='`$ECHO "$lt_prog_compiler_wl_FC" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static_FC='`$ECHO "$lt_prog_compiler_static_FC" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o_FC='`$ECHO "$lt_cv_prog_compiler_c_o_FC" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc_FC='`$ECHO "$archive_cmds_need_lc_FC" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes_FC='`$ECHO "$enable_shared_with_static_runtimes_FC" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec_FC='`$ECHO "$export_dynamic_flag_spec_FC" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec_FC='`$ECHO "$whole_archive_flag_spec_FC" | $SED "$delay_single_quote_subst"`' +compiler_needs_object_FC='`$ECHO "$compiler_needs_object_FC" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds_FC='`$ECHO "$old_archive_from_new_cmds_FC" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds_FC='`$ECHO "$old_archive_from_expsyms_cmds_FC" | $SED "$delay_single_quote_subst"`' +archive_cmds_FC='`$ECHO "$archive_cmds_FC" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds_FC='`$ECHO "$archive_expsym_cmds_FC" | $SED "$delay_single_quote_subst"`' +module_cmds_FC='`$ECHO "$module_cmds_FC" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds_FC='`$ECHO "$module_expsym_cmds_FC" | $SED "$delay_single_quote_subst"`' +with_gnu_ld_FC='`$ECHO "$with_gnu_ld_FC" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag_FC='`$ECHO "$allow_undefined_flag_FC" | $SED "$delay_single_quote_subst"`' +no_undefined_flag_FC='`$ECHO "$no_undefined_flag_FC" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_FC='`$ECHO "$hardcode_libdir_flag_spec_FC" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator_FC='`$ECHO "$hardcode_libdir_separator_FC" | $SED "$delay_single_quote_subst"`' +hardcode_direct_FC='`$ECHO "$hardcode_direct_FC" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute_FC='`$ECHO "$hardcode_direct_absolute_FC" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L_FC='`$ECHO "$hardcode_minus_L_FC" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var_FC='`$ECHO "$hardcode_shlibpath_var_FC" | $SED "$delay_single_quote_subst"`' +hardcode_automatic_FC='`$ECHO "$hardcode_automatic_FC" | $SED "$delay_single_quote_subst"`' +inherit_rpath_FC='`$ECHO "$inherit_rpath_FC" | $SED "$delay_single_quote_subst"`' +link_all_deplibs_FC='`$ECHO "$link_all_deplibs_FC" | $SED "$delay_single_quote_subst"`' +always_export_symbols_FC='`$ECHO "$always_export_symbols_FC" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds_FC='`$ECHO "$export_symbols_cmds_FC" | $SED "$delay_single_quote_subst"`' +exclude_expsyms_FC='`$ECHO "$exclude_expsyms_FC" | $SED "$delay_single_quote_subst"`' +include_expsyms_FC='`$ECHO "$include_expsyms_FC" | $SED "$delay_single_quote_subst"`' +prelink_cmds_FC='`$ECHO "$prelink_cmds_FC" | $SED "$delay_single_quote_subst"`' +postlink_cmds_FC='`$ECHO "$postlink_cmds_FC" | $SED "$delay_single_quote_subst"`' +file_list_spec_FC='`$ECHO "$file_list_spec_FC" | $SED "$delay_single_quote_subst"`' +hardcode_action_FC='`$ECHO "$hardcode_action_FC" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs_FC='`$ECHO "$compiler_lib_search_dirs_FC" | $SED "$delay_single_quote_subst"`' +predep_objects_FC='`$ECHO "$predep_objects_FC" | $SED "$delay_single_quote_subst"`' +postdep_objects_FC='`$ECHO "$postdep_objects_FC" | $SED "$delay_single_quote_subst"`' +predeps_FC='`$ECHO "$predeps_FC" | $SED "$delay_single_quote_subst"`' +postdeps_FC='`$ECHO "$postdeps_FC" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path_FC='`$ECHO "$compiler_lib_search_path_FC" | $SED "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in SHELL \ +ECHO \ +PATH_SEPARATOR \ +SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +file_magic_glob \ +want_nocaseglob \ +DLLTOOL \ +sharedlib_from_linklib_cmd \ +AR \ +AR_FLAGS \ +archiver_list_spec \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +nm_file_list_spec \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_pic \ +lt_prog_compiler_wl \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +MANIFEST_TOOL \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_separator \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +install_override_mode \ +finish_eval \ +old_striplib \ +striplib \ +compiler_lib_search_dirs \ +predep_objects \ +postdep_objects \ +predeps \ +postdeps \ +compiler_lib_search_path \ +LD_FC \ +reload_flag_FC \ +compiler_FC \ +lt_prog_compiler_no_builtin_flag_FC \ +lt_prog_compiler_pic_FC \ +lt_prog_compiler_wl_FC \ +lt_prog_compiler_static_FC \ +lt_cv_prog_compiler_c_o_FC \ +export_dynamic_flag_spec_FC \ +whole_archive_flag_spec_FC \ +compiler_needs_object_FC \ +with_gnu_ld_FC \ +allow_undefined_flag_FC \ +no_undefined_flag_FC \ +hardcode_libdir_flag_spec_FC \ +hardcode_libdir_separator_FC \ +exclude_expsyms_FC \ +include_expsyms_FC \ +file_list_spec_FC \ +compiler_lib_search_dirs_FC \ +predep_objects_FC \ +postdep_objects_FC \ +predeps_FC \ +postdeps_FC \ +compiler_lib_search_path_FC; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postlink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec \ +reload_cmds_FC \ +old_archive_cmds_FC \ +old_archive_from_new_cmds_FC \ +old_archive_from_expsyms_cmds_FC \ +archive_cmds_FC \ +archive_expsym_cmds_FC \ +module_cmds_FC \ +module_expsym_cmds_FC \ +export_symbols_cmds_FC \ +prelink_cmds_FC \ +postlink_cmds_FC; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + + + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "xc_version.h") CONFIG_FILES="$CONFIG_FILES xc_version.h" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "testsuite/Makefile") CONFIG_FILES="$CONFIG_FILES testsuite/Makefile" ;; + "build/Makefile") CONFIG_FILES="$CONFIG_FILES build/Makefile" ;; + "build/libxc.pc") CONFIG_FILES="$CONFIG_FILES build/libxc.pc" ;; + "build/libxc.spec") CONFIG_FILES="$CONFIG_FILES build/libxc.spec" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="FC " + +# ### BEGIN LIBTOOL CONFIG + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The PATH separator for the build system. +PATH_SEPARATOR=$lt_PATH_SEPARATOR + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + +# The archiver. +AR=$lt_AR + +# Flags to create an archive. +AR_FLAGS=$lt_AR_FLAGS + +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and in which our libraries should be installed. +lt_sysroot=$lt_sysroot + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects +postdep_objects=$lt_postdep_objects +predeps=$lt_predeps +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + if test x"$xsi_shell" = xyes; then + sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ +func_dirname ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_basename ()$/,/^} # func_basename /c\ +func_basename ()\ +{\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ +func_dirname_and_basename ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ +func_stripname ()\ +{\ +\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ +\ # positional parameters, so assign one to ordinary parameter first.\ +\ func_stripname_result=${3}\ +\ func_stripname_result=${func_stripname_result#"${1}"}\ +\ func_stripname_result=${func_stripname_result%"${2}"}\ +} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ +func_split_long_opt ()\ +{\ +\ func_split_long_opt_name=${1%%=*}\ +\ func_split_long_opt_arg=${1#*=}\ +} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ +func_split_short_opt ()\ +{\ +\ func_split_short_opt_arg=${1#??}\ +\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ +} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ +func_lo2o ()\ +{\ +\ case ${1} in\ +\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ +\ *) func_lo2o_result=${1} ;;\ +\ esac\ +} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_xform ()$/,/^} # func_xform /c\ +func_xform ()\ +{\ + func_xform_result=${1%.*}.lo\ +} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_arith ()$/,/^} # func_arith /c\ +func_arith ()\ +{\ + func_arith_result=$(( $* ))\ +} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_len ()$/,/^} # func_len /c\ +func_len ()\ +{\ + func_len_result=${#1}\ +} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + +fi + +if test x"$lt_shell_append" = xyes; then + sed -e '/^func_append ()$/,/^} # func_append /c\ +func_append ()\ +{\ + eval "${1}+=\\${2}"\ +} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ +func_append_quoted ()\ +{\ +\ func_quote_for_eval "${2}"\ +\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ +} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + # Save a `func_append' function call where possible by direct use of '+=' + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +else + # Save a `func_append' function call even when '+=' is not available + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +fi + +if test x"$_lt_function_replace_fail" = x":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 +$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} +fi + + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + + cat <<_LT_EOF >> "$ofile" + +# ### BEGIN LIBTOOL TAG CONFIG: FC + +# The linker used to build libraries. +LD=$lt_LD_FC + +# How to create reloadable object files. +reload_flag=$lt_reload_flag_FC +reload_cmds=$lt_reload_cmds_FC + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_FC + +# A language specific compiler. +CC=$lt_compiler_FC + +# Is the compiler the GNU compiler? +with_gcc=$GCC_FC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_FC + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_FC + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_FC + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_FC + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_FC + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_FC + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_FC + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_FC + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_FC + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_FC + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_FC + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_FC + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_FC +archive_expsym_cmds=$lt_archive_expsym_cmds_FC + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_FC +module_expsym_cmds=$lt_module_expsym_cmds_FC + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_FC + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_FC + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_FC + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_FC + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_FC + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_FC + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_FC + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_FC + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_FC + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_FC + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_FC + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_FC + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_FC + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_FC + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_FC + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_FC + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_FC + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds_FC + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_FC + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_FC + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_FC + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects_FC +postdep_objects=$lt_postdep_objects_FC +predeps=$lt_predeps_FC +postdeps=$lt_postdeps_FC + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_FC + +# ### END LIBTOOL TAG CONFIG: FC +_LT_EOF + + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + diff --git a/libxc-2.2.0/configure.ac b/libxc-2.2.0/configure.ac new file mode 100644 index 000000000..56d6745ed --- /dev/null +++ b/libxc-2.2.0/configure.ac @@ -0,0 +1,165 @@ +## Copyright (C) 2002-2006 M. Marques, A. Castro, A. Rubio, G. Bertsch +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU Lesser General Public License as published by +## the Free Software Foundation; either version 2, or (at your option) +## any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. +## +## $Id: configure.ac 2422 2006-09-23 20:43:15Z marques $ + +AC_INIT([libxc],[2.2.0],[libxc@tddft.org],[libxc],[http://www.tddft.org/programs/Libxc]) +AC_CONFIG_SRCDIR([src/xc.h]) +AM_INIT_AUTOMAKE + +AC_CONFIG_HEADERS([config.h]) +AC_CONFIG_MACRO_DIR([m4]) + +# Library versioning (C:R:A == current:revision:age) +# See the libtool manual for an explanation of the numbers +# +# libxc-2.0.0 1:0:0 +# libxc-2.0.1 1:1:0 +# libxc-2.0.2 1:2:0 +# libxc-2.0.3 1:3:0 +# libxc-2.1.0 2:0:1 +# libxc-2.2.0 3:0:0 +# +# Note that libtool versioning was not used prior to libxc-2.0. +# Because of this, we will start counting at 1. +# +# How to update library version number +# ==================================== +# +# C: increment if the interface has additions, changes, removals. +# +# R: increment any time the source changes; set to 0 if you +# incremented CURRENT +# +# A: increment if any interfaces have been added; set to 0 if any +# interfaces have been removed. removal has precedence over adding, +# so set to 0 if both happened. + +XC_CURRENT=3 +XC_REVISION=0 +XC_AGE=0 + +XC_LT_VERSION="${XC_CURRENT}:${XC_REVISION}:${XC_AGE}" +AC_SUBST(XC_LT_VERSION) + +# Split VERSION into XC_VERSION_MAJOR and XC_VERSION_MINOR +# Follows AX_SPLIT_VERSION macro from AC-Archive +# Rhys Ulerich +AC_PROG_SED +XC_MAJOR_VERSION=`echo "$VERSION" | $SED 's/\([[^.]][[^.]]*\).*/\1/'` +XC_MINOR_VERSION=`echo "$VERSION" | $SED 's/[[^.]][[^.]]*.\([[^.]][[^.]]*\).*/\1/'` +AC_SUBST(XC_MAJOR_VERSION) +AC_SUBST(XC_MINOR_VERSION) + + + +# Installation prefix by default +AC_PREFIX_DEFAULT([/opt/etsf]) + +AC_DISABLE_SHARED +AC_PROG_LIBTOOL + +# Checks for programs. +AC_PROG_CC +AC_LANG_PREPROC +AM_PROG_CC_C_O +AC_C_INLINE + +# Checks for header files. +AC_HEADER_STDC +AC_FUNC_ALLOCA + +# Checks for typedefs, structures, and compiler characteristics. +AC_CHECK_SIZEOF(void*) + +# Check for presence of some C99 libm functions +AC_CHECK_LIB([m],[sqrtf],[AC_DEFINE([HAVE_SQRTF],[1],[libm includes sqrtf])]) +AC_CHECK_LIB([m],[cbrt],[AC_DEFINE([HAVE_CBRT],[1],[libm includes cbrt])]) +AC_CHECK_LIB([m],[cbrtf],[AC_DEFINE([HAVE_CBRTF],[1],[libm includes cbrtf])]) +AC_CHECK_LIB([m],[feenableexcept],[AC_DEFINE([HAVE_FEENABLEEXCEPT],[1],[libm includes feenableexcept])]) + +dnl build/install fortran bits unless --disable-fortran is used +AC_ARG_ENABLE([fortran], + AS_HELP_STRING([--disable-fortran], [don't build/install fortran components]), + [ac_cv_build_fortran=$enableval], + [ac_cv_build_fortran=yes]) +AM_CONDITIONAL([ENABLE_FORTRAN], [test $ac_cv_build_fortran = yes]) + +if test $ac_cv_build_fortran = yes; then + HAVE_FORTRAN=1 + AC_DEFINE(HAVE_FORTRAN, [1], [Defined if libxc is compiled with fortran support]) + + dnl try to find out what is the default FORTRAN 90 compiler + acx_save_fcflags="${FCFLAGS}" + AC_PROG_FC([], [Fortran 90]) + if test x"$FC" = x; then + AC_MSG_ERROR([could not find Fortran 90 compiler]) + fi + + AC_LANG_PUSH(Fortran) + AC_FC_SRCEXT(f90) + FCFLAGS="${acx_save_fcflags}" + + dnl Fortran default flags + ACX_FCFLAGS + + dnl libxc needs the preprocessor. The result goes to FCCPP + ACX_FCCPP + + dnl how Fortran mangles function names + AC_FC_WRAPPERS + + dnl check whether we have or not a compiler that allows for very long lines... + ACX_LONG_FORTRAN_LINES + + dnl check whether the Fortran 90 compiler accepts line markers cast by the preprocessor. + ACX_F90_ACCEPTS_LINE_NUMBERS + + AX_F90_MODULE_EXTENSION + + dnl Need to know the size of a Fortran integer + ACX_FC_INTEGER_SIZE + ACX_CC_FORTRAN_INT + + AC_LANG_POP([Fortran]) +else + HAVE_FORTRAN=0 +fi +AC_SUBST(ax_cv_f90_modext) +AM_CONDITIONAL(F90_MOD_UPPERCASE, [test x$ax_f90_mod_uppercase = xyes]) +AM_CONDITIONAL(COMPILE_FORTRAN, test x${HAVE_FORTRAN} = x1) + +dnl should I compile libxc in single precision? +AC_ARG_ENABLE([single], + AS_HELP_STRING([--enable-single], [compile libxc in single precision]), + [ac_cv_single_prec=$enableval], + [ac_cv_single_prec=no]) + +AM_CONDITIONAL(COMPILE_SINGLE, test $ac_cv_single_prec = yes) + + +AC_CONFIG_FILES([Makefile + xc_version.h + src/Makefile + testsuite/Makefile + build/Makefile + build/libxc.pc + build/libxc.spec +]) + +AC_OUTPUT + diff --git a/libxc-2.2.0/depcomp b/libxc-2.2.0/depcomp new file mode 100755 index 000000000..4ebd5b3a2 --- /dev/null +++ b/libxc-2.2.0/depcomp @@ -0,0 +1,791 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2013-05-30.07; # UTC + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by 'PROGRAMS ARGS'. + object Object file output by 'PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputting dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +# Get the directory component of the given path, and save it in the +# global variables '$dir'. Note that this directory component will +# be either empty or ending with a '/' character. This is deliberate. +set_dir_from () +{ + case $1 in + */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; + *) dir=;; + esac +} + +# Get the suffix-stripped basename of the given path, and save it the +# global variable '$base'. +set_base_from () +{ + base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` +} + +# If no dependency file was actually created by the compiler invocation, +# we still have to create a dummy depfile, to avoid errors with the +# Makefile "include basename.Plo" scheme. +make_dummy_depfile () +{ + echo "#dummy" > "$depfile" +} + +# Factor out some common post-processing of the generated depfile. +# Requires the auxiliary global variable '$tmpdepfile' to be set. +aix_post_process_depfile () +{ + # If the compiler actually managed to produce a dependency file, + # post-process it. + if test -f "$tmpdepfile"; then + # Each line is of the form 'foo.o: dependency.h'. + # Do two passes, one to just change these to + # $object: dependency.h + # and one to simply output + # dependency.h: + # which is needed to avoid the deleted-header problem. + { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" + sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" + } > "$depfile" + rm -f "$tmpdepfile" + else + make_dummy_depfile + fi +} + +# A tabulation character. +tab=' ' +# A newline character. +nl=' +' +# Character ranges might be problematic outside the C locale. +# These definitions help. +upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ +lower=abcdefghijklmnopqrstuvwxyz +digits=0123456789 +alpha=${upper}${lower} + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Avoid interferences from the environment. +gccflag= dashmflag= + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvisualcpp +fi + +if test "$depmode" = msvc7msys; then + # This is just like msvc7 but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvc7 +fi + +if test "$depmode" = xlc; then + # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. + gccflag=-qmakedep=gcc,-MF + depmode=gcc +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. +## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. +## (see the conditional assignment to $gccflag above). +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). Also, it might not be +## supported by the other compilers which use the 'gcc' depmode. +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The second -e expression handles DOS-style file names with drive + # letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the "deleted header file" problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. +## Some versions of gcc put a space before the ':'. On the theory +## that the space means something, we add a space to the output as +## well. hp depmode also adds that space, but also prefixes the VPATH +## to the object. Take care to not repeat it in the output. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like '#:fec' to the end of the + # dependency line. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ + | tr "$nl" ' ' >> "$depfile" + echo >> "$depfile" + # The second pass generates a dummy entry for each header file. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" + ;; + +xlc) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts '$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + aix_post_process_depfile + ;; + +tcc) + # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 + # FIXME: That version still under development at the moment of writing. + # Make that this statement remains true also for stable, released + # versions. + # It will wrap lines (doesn't matter whether long or short) with a + # trailing '\', as in: + # + # foo.o : \ + # foo.c \ + # foo.h \ + # + # It will put a trailing '\' even on the last line, and will use leading + # spaces rather than leading tabs (at least since its commit 0394caf7 + # "Emit spaces for -MD"). + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. + # We have to change lines of the first kind to '$object: \'. + sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" + # And for each line of the second kind, we have to emit a 'dep.h:' + # dummy dependency, to avoid the deleted-header problem. + sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" + rm -f "$tmpdepfile" + ;; + +## The order of this option in the case statement is important, since the +## shell code in configure will try each of these formats in the order +## listed in this file. A plain '-MD' option would be understood by many +## compilers, so we must ensure this comes after the gcc and icc options. +pgcc) + # Portland's C compiler understands '-MD'. + # Will always output deps to 'file.d' where file is the root name of the + # source file under compilation, even if file resides in a subdirectory. + # The object file name does not affect the name of the '.d' file. + # pgcc 10.2 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using '\' : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + set_dir_from "$object" + # Use the source, not the object, to determine the base name, since + # that's sadly what pgcc will do too. + set_base_from "$source" + tmpdepfile=$base.d + + # For projects that build the same source file twice into different object + # files, the pgcc approach of using the *source* file root name can cause + # problems in parallel builds. Use a locking strategy to avoid stomping on + # the same $tmpdepfile. + lockdir=$base.d-lock + trap " + echo '$0: caught signal, cleaning up...' >&2 + rmdir '$lockdir' + exit 1 + " 1 2 13 15 + numtries=100 + i=$numtries + while test $i -gt 0; do + # mkdir is a portable test-and-set. + if mkdir "$lockdir" 2>/dev/null; then + # This process acquired the lock. + "$@" -MD + stat=$? + # Release the lock. + rmdir "$lockdir" + break + else + # If the lock is being held by a different process, wait + # until the winning process is done or we timeout. + while test -d "$lockdir" && test $i -gt 0; do + sleep 1 + i=`expr $i - 1` + done + fi + i=`expr $i - 1` + done + trap - 1 2 13 15 + if test $i -le 0; then + echo "$0: failed to acquire lock after $numtries attempts" >&2 + echo "$0: check lockdir '$lockdir'" >&2 + exit 1 + fi + + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" + # Add 'dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in 'foo.d' instead, so we check for that too. + # Subdirectories are respected. + set_dir_from "$object" + set_base_from "$object" + + if test "$libtool" = yes; then + # Libtool generates 2 separate objects for the 2 libraries. These + # two compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir$base.o.d # libtool 1.5 + tmpdepfile2=$dir.libs/$base.o.d # Likewise. + tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + # Same post-processing that is required for AIX mode. + aix_post_process_depfile + ;; + +msvc7) + if test "$libtool" = yes; then + showIncludes=-Wc,-showIncludes + else + showIncludes=-showIncludes + fi + "$@" $showIncludes > "$tmpdepfile" + stat=$? + grep -v '^Note: including file: ' "$tmpdepfile" + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The first sed program below extracts the file names and escapes + # backslashes for cygpath. The second sed program outputs the file + # name when reading, but also accumulates all include files in the + # hold buffer in order to output them again at the end. This only + # works with sed implementations that can handle large buffers. + sed < "$tmpdepfile" -n ' +/^Note: including file: *\(.*\)/ { + s//\1/ + s/\\/\\\\/g + p +}' | $cygpath_u | sort -u | sed -n ' +s/ /\\ /g +s/\(.*\)/'"$tab"'\1 \\/p +s/.\(.*\) \\/\1:/ +H +$ { + s/.*/'"$tab"'/ + G + p +}' >> "$depfile" + echo >> "$depfile" # make sure the fragment doesn't end with a backslash + rm -f "$tmpdepfile" + ;; + +msvc7msys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for ':' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. + "$@" $dashmflag | + sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this sed invocation + # correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no eat=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + if test $eat = yes; then + eat=no + continue + fi + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + # makedepend may prepend the VPATH from the source file name to the object. + # No need to regex-escape $object, excess matching of '.' is harmless. + sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process the last invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed '1,2d' "$tmpdepfile" \ + | tr ' ' "$nl" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E \ + | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + | sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" + echo "$tab" >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/libxc-2.2.0/install-sh b/libxc-2.2.0/install-sh new file mode 100755 index 000000000..377bb8687 --- /dev/null +++ b/libxc-2.2.0/install-sh @@ -0,0 +1,527 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2011-11-20.07; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# 'make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call 'install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + do_exit='(exit $ret); exit $ret' + trap "ret=129; $do_exit" 1 + trap "ret=130; $do_exit" 2 + trap "ret=141; $do_exit" 13 + trap "ret=143; $do_exit" 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names problematic for 'test' and other utilities. + case $src in + -* | [=\(\)!]) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + dst=$dst_arg + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test X"$d" = X && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/libxc-2.2.0/ltmain.sh b/libxc-2.2.0/ltmain.sh new file mode 100644 index 000000000..63ae69dc6 --- /dev/null +++ b/libxc-2.2.0/ltmain.sh @@ -0,0 +1,9655 @@ + +# libtool (GNU libtool) 2.4.2 +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, +# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, +# or obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Usage: $progname [OPTION]... [MODE-ARG]... +# +# Provide generalized library-building support services. +# +# --config show all configuration variables +# --debug enable verbose shell tracing +# -n, --dry-run display commands without modifying any files +# --features display basic configuration information and exit +# --mode=MODE use operation mode MODE +# --preserve-dup-deps don't remove duplicate dependency libraries +# --quiet, --silent don't print informational messages +# --no-quiet, --no-silent +# print informational messages (default) +# --no-warn don't display warning messages +# --tag=TAG use configuration variables from tag TAG +# -v, --verbose print more informational messages than default +# --no-verbose don't print the extra informational messages +# --version print version information +# -h, --help, --help-all print short, long, or detailed help message +# +# MODE must be one of the following: +# +# clean remove files from the build directory +# compile compile a source file into a libtool object +# execute automatically set library path, then run a program +# finish complete the installation of libtool libraries +# install install libraries or executables +# link create a library or an executable +# uninstall remove libraries from an installed directory +# +# MODE-ARGS vary depending on the MODE. When passed as first option, +# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. +# Try `$progname --help --mode=MODE' for a more detailed description of MODE. +# +# When reporting a bug, please describe a test case to reproduce it and +# include the following information: +# +# host-triplet: $host +# shell: $SHELL +# compiler: $LTCC +# compiler flags: $LTCFLAGS +# linker: $LD (gnu? $with_gnu_ld) +# $progname: (GNU libtool) 2.4.2 +# automake: $automake_version +# autoconf: $autoconf_version +# +# Report bugs to . +# GNU libtool home page: . +# General help using GNU software: . + +PROGRAM=libtool +PACKAGE=libtool +VERSION=2.4.2 +TIMESTAMP="" +package_revision=1.3337 + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# NLS nuisances: We save the old values to restore during execute mode. +lt_user_locale= +lt_safe_locale= +for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test \"\${$lt_var+set}\" = set; then + save_$lt_var=\$$lt_var + $lt_var=C + export $lt_var + lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" + lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" + fi" +done +LC_ALL=C +LANGUAGE=C +export LANGUAGE LC_ALL + +$lt_unset CDPATH + + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + + + +: ${CP="cp -f"} +test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} +: ${Xsed="$SED -e 1s/^X//"} + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +exit_status=$EXIT_SUCCESS + +# Make sure IFS has a sensible default +lt_nl=' +' +IFS=" $lt_nl" + +dirname="s,/[^/]*$,," +basename="s,^.*/,," + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} # func_dirname may be replaced by extended shell implementation + + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "${1}" | $SED "$basename"` +} # func_basename may be replaced by extended shell implementation + + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi + func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` +} # func_dirname_and_basename may be replaced by extended shell implementation + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname may be replaced by extended shell implementation + + +# These SED scripts presuppose an absolute path with a trailing slash. +pathcar='s,^/\([^/]*\).*$,\1,' +pathcdr='s,^/[^/]*,,' +removedotparts=':dotsl + s@/\./@/@g + t dotsl + s,/\.$,/,' +collapseslashes='s@/\{1,\}@/@g' +finalslash='s,/*$,/,' + +# func_normal_abspath PATH +# Remove doubled-up and trailing slashes, "." path components, +# and cancel out any ".." path components in PATH after making +# it an absolute path. +# value returned in "$func_normal_abspath_result" +func_normal_abspath () +{ + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in + "") + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return + ;; + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. + ;; + *) + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath + ;; + esac + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` + while :; do + # Processed it all yet? + if test "$func_normal_abspath_tpath" = / ; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result" ; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result +} + +# func_relative_path SRCDIR DSTDIR +# generates a relative path from SRCDIR to DSTDIR, with a trailing +# slash if non-empty, suitable for immediately appending a filename +# without needing to append a separator. +# value returned in "$func_relative_path_result" +func_relative_path () +{ + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=${func_dirname_result} + if test "x$func_relative_path_tlibdir" = x ; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test "x$func_stripname_result" != x ; then + func_relative_path_result=${func_relative_path_result}/${func_stripname_result} + fi + + # Normalisation. If bindir is libdir, return empty string, + # else relative path ending with a slash; either way, target + # file name can be directly appended. + if test ! -z "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result/" + func_relative_path_result=$func_stripname_result + fi +} + +# The name of this program: +func_dirname_and_basename "$progpath" +progname=$func_basename_result + +# Make sure we have an absolute path for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=$func_dirname_result + progdir=`cd "$progdir" && pwd` + progpath="$progdir/$progname" + ;; + *) + save_IFS="$IFS" + IFS=${PATH_SEPARATOR-:} + for progdir in $PATH; do + IFS="$save_IFS" + test -x "$progdir/$progname" && break + done + IFS="$save_IFS" + test -n "$progdir" || progdir=`pwd` + progpath="$progdir/$progname" + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed="${SED}"' -e 1s/^X//' +sed_quote_subst='s/\([`"$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution that turns a string into a regex matching for the +# string literally. +sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' + +# Sed substitution that converts a w32 file name or path +# which contains forward slashes, into one that contains +# (escaped) backslashes. A very naive implementation. +lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + +# Re-`\' parameter expansions in output of double_quote_subst that were +# `\'-ed in input to the same. If an odd number of `\' preceded a '$' +# in input to double_quote_subst, that '$' was protected from expansion. +# Since each input `\' is now two `\'s, look for any number of runs of +# four `\'s followed by two `\'s and then a '$'. `\' that '$'. +bs='\\' +bs2='\\\\' +bs4='\\\\\\\\' +dollar='\$' +sed_double_backslash="\ + s/$bs4/&\\ +/g + s/^$bs2$dollar/$bs&/ + s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g + s/\n//g" + +# Standard options: +opt_dry_run=false +opt_help=false +opt_quiet=false +opt_verbose=false +opt_warning=: + +# func_echo arg... +# Echo program name prefixed message, along with the current mode +# name if it has been set yet. +func_echo () +{ + $ECHO "$progname: ${opt_mode+$opt_mode: }$*" +} + +# func_verbose arg... +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $opt_verbose && func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +# func_error arg... +# Echo program name prefixed message to standard error. +func_error () +{ + $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 +} + +# func_warning arg... +# Echo program name prefixed warning message to standard error. +func_warning () +{ + $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 + + # bash bug again: + : +} + +# func_fatal_error arg... +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + +# func_fatal_help arg... +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + func_error ${1+"$@"} + func_fatal_error "$help" +} +help="Try \`$progname --help' for more information." ## default + + +# func_grep expression filename +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_mkdir_p directory-path +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + my_directory_path="$1" + my_dir_list= + + if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then + + # Protect directory names starting with `-' + case $my_directory_path in + -*) my_directory_path="./$my_directory_path" ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$my_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + my_dir_list="$my_directory_path:$my_dir_list" + + # If the last portion added has no slash in it, the list is done + case $my_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` + done + my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` + + save_mkdir_p_IFS="$IFS"; IFS=':' + for my_dir in $my_dir_list; do + IFS="$save_mkdir_p_IFS" + # mkdir can fail with a `File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$my_dir" 2>/dev/null || : + done + IFS="$save_mkdir_p_IFS" + + # Bail out if we (or some other process) failed to create a directory. + test -d "$my_directory_path" || \ + func_fatal_error "Failed to create \`$1'" + fi +} + + +# func_mktempdir [string] +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, STRING is the basename for that directory. +func_mktempdir () +{ + my_template="${TMPDIR-/tmp}/${1-$progname}" + + if test "$opt_dry_run" = ":"; then + # Return a directory name, but don't create it in dry-run mode + my_tmpdir="${my_template}-$$" + else + + # If mktemp works, use that first and foremost + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + + if test ! -d "$my_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" + + save_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$my_tmpdir" + umask $save_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$my_tmpdir" || \ + func_fatal_error "cannot create temporary directory \`$my_tmpdir'" + fi + + $ECHO "$my_tmpdir" +} + + +# func_quote_for_eval arg +# Aesthetically quote ARG to be evaled later. +# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT +# is double-quoted, suitable for a subsequent eval, whereas +# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters +# which are still active within double quotes backslashified. +func_quote_for_eval () +{ + case $1 in + *[\\\`\"\$]*) + func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; + *) + func_quote_for_eval_unquoted_result="$1" ;; + esac + + case $func_quote_for_eval_unquoted_result in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and and variable + # expansion for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" + ;; + *) + func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" + esac +} + + +# func_quote_for_expand arg +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + case $1 in + *[\\\`\"]*) + my_arg=`$ECHO "$1" | $SED \ + -e "$double_quote_subst" -e "$sed_double_backslash"` ;; + *) + my_arg="$1" ;; + esac + + case $my_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + my_arg="\"$my_arg\"" + ;; + esac + + func_quote_for_expand_result="$my_arg" +} + + +# func_show_eval cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$my_cmd" + my_status=$? + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + +# func_show_eval_locale cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$lt_user_locale + $my_cmd" + my_status=$? + eval "$lt_safe_locale" + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + +# func_tr_sh +# Turn $1 into a string suitable for a shell variable name. +# Result is stored in $func_tr_sh_result. All characters +# not in the set a-zA-Z0-9_ are replaced with '_'. Further, +# if $1 begins with a digit, a '_' is prepended as well. +func_tr_sh () +{ + case $1 in + [0-9]* | *[!a-zA-Z0-9_]*) + func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` + ;; + * ) + func_tr_sh_result=$1 + ;; + esac +} + + +# func_version +# Echo version message to standard output and exit. +func_version () +{ + $opt_debug + + $SED -n '/(C)/!b go + :more + /\./!{ + N + s/\n# / / + b more + } + :go + /^# '$PROGRAM' (GNU /,/# warranty; / { + s/^# // + s/^# *$// + s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ + p + }' < "$progpath" + exit $? +} + +# func_usage +# Echo short help message to standard output and exit. +func_usage () +{ + $opt_debug + + $SED -n '/^# Usage:/,/^# *.*--help/ { + s/^# // + s/^# *$// + s/\$progname/'$progname'/ + p + }' < "$progpath" + echo + $ECHO "run \`$progname --help | more' for full usage" + exit $? +} + +# func_help [NOEXIT] +# Echo long help message to standard output and exit, +# unless 'noexit' is passed as argument. +func_help () +{ + $opt_debug + + $SED -n '/^# Usage:/,/# Report bugs to/ { + :print + s/^# // + s/^# *$// + s*\$progname*'$progname'* + s*\$host*'"$host"'* + s*\$SHELL*'"$SHELL"'* + s*\$LTCC*'"$LTCC"'* + s*\$LTCFLAGS*'"$LTCFLAGS"'* + s*\$LD*'"$LD"'* + s/\$with_gnu_ld/'"$with_gnu_ld"'/ + s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ + s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ + p + d + } + /^# .* home page:/b print + /^# General help using/b print + ' < "$progpath" + ret=$? + if test -z "$1"; then + exit $ret + fi +} + +# func_missing_arg argname +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + $opt_debug + + func_error "missing argument for $1." + exit_cmd=exit +} + + +# func_split_short_opt shortopt +# Set func_split_short_opt_name and func_split_short_opt_arg shell +# variables after splitting SHORTOPT after the 2nd character. +func_split_short_opt () +{ + my_sed_short_opt='1s/^\(..\).*$/\1/;q' + my_sed_short_rest='1s/^..\(.*\)$/\1/;q' + + func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` + func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` +} # func_split_short_opt may be replaced by extended shell implementation + + +# func_split_long_opt longopt +# Set func_split_long_opt_name and func_split_long_opt_arg shell +# variables after splitting LONGOPT at the `=' sign. +func_split_long_opt () +{ + my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' + my_sed_long_arg='1s/^--[^=]*=//' + + func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` + func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` +} # func_split_long_opt may be replaced by extended shell implementation + +exit_cmd=: + + + + + +magic="%%%MAGIC variable%%%" +magic_exe="%%%MAGIC EXE variable%%%" + +# Global variables. +nonopt= +preserve_args= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" +extracted_archives= +extracted_serial=0 + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "${1}=\$${1}\${2}" +} # func_append may be replaced by extended shell implementation + +# func_append_quoted var value +# Quote VALUE and append to the end of shell variable VAR, separated +# by a space. +func_append_quoted () +{ + func_quote_for_eval "${2}" + eval "${1}=\$${1}\\ \$func_quote_for_eval_result" +} # func_append_quoted may be replaced by extended shell implementation + + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "${@}"` +} # func_arith may be replaced by extended shell implementation + + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` +} # func_len may be replaced by extended shell implementation + + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` +} # func_lo2o may be replaced by extended shell implementation + + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` +} # func_xform may be replaced by extended shell implementation + + +# func_fatal_configuration arg... +# Echo program name prefixed message to standard error, followed by +# a configuration failure hint, and exit. +func_fatal_configuration () +{ + func_error ${1+"$@"} + func_error "See the $PACKAGE documentation for more information." + func_fatal_error "Fatal configuration error." +} + + +# func_config +# Display the configuration for all the tags in this script. +func_config () +{ + re_begincf='^# ### BEGIN LIBTOOL' + re_endcf='^# ### END LIBTOOL' + + # Default configuration. + $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" + + # Now print the configurations for the tags. + for tagname in $taglist; do + $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" + done + + exit $? +} + +# func_features +# Display the features supported by this script. +func_features () +{ + echo "host: $host" + if test "$build_libtool_libs" = yes; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + + exit $? +} + +# func_enable_tag tagname +# Verify that TAGNAME is valid, and either flag an error and exit, or +# enable the TAGNAME tag. We also add TAGNAME to the global $taglist +# variable here. +func_enable_tag () +{ + # Global variable: + tagname="$1" + + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf="/$re_begincf/,/$re_endcf/p" + + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac + + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; + *) + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + +# func_check_version_match +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +# Shorthand for --mode=foo, only valid as the first argument +case $1 in +clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; +compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; +execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; +finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; +install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; +link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; +uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; +esac + + + +# Option defaults: +opt_debug=: +opt_dry_run=false +opt_config=false +opt_preserve_dup_deps=false +opt_features=false +opt_finish=false +opt_help=false +opt_help_all=false +opt_silent=: +opt_warning=: +opt_verbose=: +opt_silent=false +opt_verbose=false + + +# Parse options once, thoroughly. This comes as soon as possible in the +# script to make things like `--version' happen as quickly as we can. +{ + # this just eases exit handling + while test $# -gt 0; do + opt="$1" + shift + case $opt in + --debug|-x) opt_debug='set -x' + func_echo "enabling shell trace mode" + $opt_debug + ;; + --dry-run|--dryrun|-n) + opt_dry_run=: + ;; + --config) + opt_config=: +func_config + ;; + --dlopen|-dlopen) + optarg="$1" + opt_dlopen="${opt_dlopen+$opt_dlopen +}$optarg" + shift + ;; + --preserve-dup-deps) + opt_preserve_dup_deps=: + ;; + --features) + opt_features=: +func_features + ;; + --finish) + opt_finish=: +set dummy --mode finish ${1+"$@"}; shift + ;; + --help) + opt_help=: + ;; + --help-all) + opt_help_all=: +opt_help=': help-all' + ;; + --mode) + test $# = 0 && func_missing_arg $opt && break + optarg="$1" + opt_mode="$optarg" +case $optarg in + # Valid mode arguments: + clean|compile|execute|finish|install|link|relink|uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $opt" + exit_cmd=exit + break + ;; +esac + shift + ;; + --no-silent|--no-quiet) + opt_silent=false +func_append preserve_args " $opt" + ;; + --no-warning|--no-warn) + opt_warning=false +func_append preserve_args " $opt" + ;; + --no-verbose) + opt_verbose=false +func_append preserve_args " $opt" + ;; + --silent|--quiet) + opt_silent=: +func_append preserve_args " $opt" + opt_verbose=false + ;; + --verbose|-v) + opt_verbose=: +func_append preserve_args " $opt" +opt_silent=false + ;; + --tag) + test $# = 0 && func_missing_arg $opt && break + optarg="$1" + opt_tag="$optarg" +func_append preserve_args " $opt $optarg" +func_enable_tag "$optarg" + shift + ;; + + -\?|-h) func_usage ;; + --help) func_help ;; + --version) func_version ;; + + # Separate optargs to long options: + --*=*) + func_split_long_opt "$opt" + set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} + shift + ;; + + # Separate non-argument short options: + -\?*|-h*|-n*|-v*) + func_split_short_opt "$opt" + set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + --) break ;; + -*) func_fatal_help "unrecognized option \`$opt'" ;; + *) set dummy "$opt" ${1+"$@"}; shift; break ;; + esac + done + + # Validate options: + + # save first non-option argument + if test "$#" -gt 0; then + nonopt="$opt" + shift + fi + + # preserve --debug + test "$opt_debug" = : || func_append preserve_args " --debug" + + case $host in + *cygwin* | *mingw* | *pw32* | *cegcc*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps + ;; + esac + + $opt_help || { + # Sanity checks first: + func_check_version_match + + if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + func_fatal_configuration "not configured to build any kind of library" + fi + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$opt_dlopen" && test "$opt_mode" != execute; then + func_error "unrecognized option \`-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$progname --help --mode=$opt_mode' for more information." + } + + + # Bail if the options were screwed + $exit_cmd $EXIT_FAILURE +} + + + + +## ----------- ## +## Main. ## +## ----------- ## + +# func_lalib_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null \ + | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if `file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case "$lalib_p_line" in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test "$lalib_p" = yes +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + func_lalib_p "$1" +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $opt_debug + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$save_ifs + eval cmd=\"$cmd\" + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# `FILE.' does not work on cygwin managed mounts. +func_source () +{ + $opt_debug + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_resolve_sysroot PATH +# Replace a leading = in PATH with a sysroot. Store the result into +# func_resolve_sysroot_result +func_resolve_sysroot () +{ + func_resolve_sysroot_result=$1 + case $func_resolve_sysroot_result in + =*) + func_stripname '=' '' "$func_resolve_sysroot_result" + func_resolve_sysroot_result=$lt_sysroot$func_stripname_result + ;; + esac +} + +# func_replace_sysroot PATH +# If PATH begins with the sysroot, replace it with = and +# store the result into func_replace_sysroot_result. +func_replace_sysroot () +{ + case "$lt_sysroot:$1" in + ?*:"$lt_sysroot"*) + func_stripname "$lt_sysroot" '' "$1" + func_replace_sysroot_result="=$func_stripname_result" + ;; + *) + # Including no sysroot. + func_replace_sysroot_result=$1 + ;; + esac +} + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $opt_debug + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case "$@ " in + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with \`--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=${1} + if test "$build_libtool_libs" = yes; then + write_lobj=\'${2}\' + else + write_lobj=none + fi + + if test "$build_old_libs" = yes; then + write_oldobj=\'${3}\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T </dev/null` + if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then + func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | + $SED -e "$lt_sed_naive_backslashify"` + else + func_convert_core_file_wine_to_w32_result= + fi + fi +} +# end: func_convert_core_file_wine_to_w32 + + +# func_convert_core_path_wine_to_w32 ARG +# Helper function used by path conversion functions when $build is *nix, and +# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly +# configured wine environment available, with the winepath program in $build's +# $PATH. Assumes ARG has no leading or trailing path separator characters. +# +# ARG is path to be converted from $build format to win32. +# Result is available in $func_convert_core_path_wine_to_w32_result. +# Unconvertible file (directory) names in ARG are skipped; if no directory names +# are convertible, then the result may be empty. +func_convert_core_path_wine_to_w32 () +{ + $opt_debug + # unfortunately, winepath doesn't convert paths, only file names + func_convert_core_path_wine_to_w32_result="" + if test -n "$1"; then + oldIFS=$IFS + IFS=: + for func_convert_core_path_wine_to_w32_f in $1; do + IFS=$oldIFS + func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" + if test -n "$func_convert_core_file_wine_to_w32_result" ; then + if test -z "$func_convert_core_path_wine_to_w32_result"; then + func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" + else + func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" + fi + fi + done + IFS=$oldIFS + fi +} +# end: func_convert_core_path_wine_to_w32 + + +# func_cygpath ARGS... +# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when +# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) +# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or +# (2), returns the Cygwin file name or path in func_cygpath_result (input +# file name or path is assumed to be in w32 format, as previously converted +# from $build's *nix or MSYS format). In case (3), returns the w32 file name +# or path in func_cygpath_result (input file name or path is assumed to be in +# Cygwin format). Returns an empty string on error. +# +# ARGS are passed to cygpath, with the last one being the file name or path to +# be converted. +# +# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH +# environment variable; do not put it in $PATH. +func_cygpath () +{ + $opt_debug + if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then + func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` + if test "$?" -ne 0; then + # on failure, ensure result is empty + func_cygpath_result= + fi + else + func_cygpath_result= + func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" + fi +} +#end: func_cygpath + + +# func_convert_core_msys_to_w32 ARG +# Convert file name or path ARG from MSYS format to w32 format. Return +# result in func_convert_core_msys_to_w32_result. +func_convert_core_msys_to_w32 () +{ + $opt_debug + # awkward: cmd appends spaces to result + func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` +} +#end: func_convert_core_msys_to_w32 + + +# func_convert_file_check ARG1 ARG2 +# Verify that ARG1 (a file name in $build format) was converted to $host +# format in ARG2. Otherwise, emit an error message, but continue (resetting +# func_to_host_file_result to ARG1). +func_convert_file_check () +{ + $opt_debug + if test -z "$2" && test -n "$1" ; then + func_error "Could not determine host file name corresponding to" + func_error " \`$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_file_result="$1" + fi +} +# end func_convert_file_check + + +# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH +# Verify that FROM_PATH (a path in $build format) was converted to $host +# format in TO_PATH. Otherwise, emit an error message, but continue, resetting +# func_to_host_file_result to a simplistic fallback value (see below). +func_convert_path_check () +{ + $opt_debug + if test -z "$4" && test -n "$3"; then + func_error "Could not determine the host path corresponding to" + func_error " \`$3'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This is a deliberately simplistic "conversion" and + # should not be "improved". See libtool.info. + if test "x$1" != "x$2"; then + lt_replace_pathsep_chars="s|$1|$2|g" + func_to_host_path_result=`echo "$3" | + $SED -e "$lt_replace_pathsep_chars"` + else + func_to_host_path_result="$3" + fi + fi +} +# end func_convert_path_check + + +# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG +# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT +# and appending REPL if ORIG matches BACKPAT. +func_convert_path_front_back_pathsep () +{ + $opt_debug + case $4 in + $1 ) func_to_host_path_result="$3$func_to_host_path_result" + ;; + esac + case $4 in + $2 ) func_append func_to_host_path_result "$3" + ;; + esac +} +# end func_convert_path_front_back_pathsep + + +################################################## +# $build to $host FILE NAME CONVERSION FUNCTIONS # +################################################## +# invoked via `$to_host_file_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# Result will be available in $func_to_host_file_result. + + +# func_to_host_file ARG +# Converts the file name ARG from $build format to $host format. Return result +# in func_to_host_file_result. +func_to_host_file () +{ + $opt_debug + $to_host_file_cmd "$1" +} +# end func_to_host_file + + +# func_to_tool_file ARG LAZY +# converts the file name ARG from $build format to toolchain format. Return +# result in func_to_tool_file_result. If the conversion in use is listed +# in (the comma separated) LAZY, no conversion takes place. +func_to_tool_file () +{ + $opt_debug + case ,$2, in + *,"$to_tool_file_cmd",*) + func_to_tool_file_result=$1 + ;; + *) + $to_tool_file_cmd "$1" + func_to_tool_file_result=$func_to_host_file_result + ;; + esac +} +# end func_to_tool_file + + +# func_convert_file_noop ARG +# Copy ARG to func_to_host_file_result. +func_convert_file_noop () +{ + func_to_host_file_result="$1" +} +# end func_convert_file_noop + + +# func_convert_file_msys_to_w32 ARG +# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_file_result. +func_convert_file_msys_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_to_host_file_result="$func_convert_core_msys_to_w32_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_w32 + + +# func_convert_file_cygwin_to_w32 ARG +# Convert file name ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_file_cygwin_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + # because $build is cygwin, we call "the" cygpath in $PATH; no need to use + # LT_CYGPATH in this case. + func_to_host_file_result=`cygpath -m "$1"` + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_cygwin_to_w32 + + +# func_convert_file_nix_to_w32 ARG +# Convert file name ARG from *nix to w32 format. Requires a wine environment +# and a working winepath. Returns result in func_to_host_file_result. +func_convert_file_nix_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_file_wine_to_w32 "$1" + func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_w32 + + +# func_convert_file_msys_to_cygwin ARG +# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_file_msys_to_cygwin () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_cygpath -u "$func_convert_core_msys_to_w32_result" + func_to_host_file_result="$func_cygpath_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_cygwin + + +# func_convert_file_nix_to_cygwin ARG +# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed +# in a wine environment, working winepath, and LT_CYGPATH set. Returns result +# in func_to_host_file_result. +func_convert_file_nix_to_cygwin () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. + func_convert_core_file_wine_to_w32 "$1" + func_cygpath -u "$func_convert_core_file_wine_to_w32_result" + func_to_host_file_result="$func_cygpath_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_cygwin + + +############################################# +# $build to $host PATH CONVERSION FUNCTIONS # +############################################# +# invoked via `$to_host_path_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# The result will be available in $func_to_host_path_result. +# +# Path separators are also converted from $build format to $host format. If +# ARG begins or ends with a path separator character, it is preserved (but +# converted to $host format) on output. +# +# All path conversion functions are named using the following convention: +# file name conversion function : func_convert_file_X_to_Y () +# path conversion function : func_convert_path_X_to_Y () +# where, for any given $build/$host combination the 'X_to_Y' value is the +# same. If conversion functions are added for new $build/$host combinations, +# the two new functions must follow this pattern, or func_init_to_host_path_cmd +# will break. + + +# func_init_to_host_path_cmd +# Ensures that function "pointer" variable $to_host_path_cmd is set to the +# appropriate value, based on the value of $to_host_file_cmd. +to_host_path_cmd= +func_init_to_host_path_cmd () +{ + $opt_debug + if test -z "$to_host_path_cmd"; then + func_stripname 'func_convert_file_' '' "$to_host_file_cmd" + to_host_path_cmd="func_convert_path_${func_stripname_result}" + fi +} + + +# func_to_host_path ARG +# Converts the path ARG from $build format to $host format. Return result +# in func_to_host_path_result. +func_to_host_path () +{ + $opt_debug + func_init_to_host_path_cmd + $to_host_path_cmd "$1" +} +# end func_to_host_path + + +# func_convert_path_noop ARG +# Copy ARG to func_to_host_path_result. +func_convert_path_noop () +{ + func_to_host_path_result="$1" +} +# end func_convert_path_noop + + +# func_convert_path_msys_to_w32 ARG +# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_path_result. +func_convert_path_msys_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # Remove leading and trailing path separator characters from ARG. MSYS + # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; + # and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result="$func_convert_core_msys_to_w32_result" + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_msys_to_w32 + + +# func_convert_path_cygwin_to_w32 ARG +# Convert path ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_path_cygwin_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_cygwin_to_w32 + + +# func_convert_path_nix_to_w32 ARG +# Convert path ARG from *nix to w32 format. Requires a wine environment and +# a working winepath. Returns result in func_to_host_file_result. +func_convert_path_nix_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_nix_to_w32 + + +# func_convert_path_msys_to_cygwin ARG +# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_path_msys_to_cygwin () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_msys_to_w32_result" + func_to_host_path_result="$func_cygpath_result" + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_msys_to_cygwin + + +# func_convert_path_nix_to_cygwin ARG +# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a +# a wine environment, working winepath, and LT_CYGPATH set. Returns result in +# func_to_host_file_result. +func_convert_path_nix_to_cygwin () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" + func_to_host_path_result="$func_cygpath_result" + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_nix_to_cygwin + + +# func_mode_compile arg... +func_mode_compile () +{ + $opt_debug + # Get the compilation command and the source file. + base_compile= + srcfile="$nonopt" # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + pie_flag= + + for arg + do + case $arg_mode in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg="$arg" + arg_mode=normal + ;; + + target ) + libobj="$arg" + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + test -n "$libobj" && \ + func_fatal_error "you cannot specify \`-o' more than once" + arg_mode=target + continue + ;; + + -pie | -fpie | -fPIE) + func_append pie_flag " $arg" + continue + ;; + + -shared | -static | -prefer-pic | -prefer-non-pic) + func_append later " $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + lastarg= + save_ifs="$IFS"; IFS=',' + for arg in $args; do + IFS="$save_ifs" + func_append_quoted lastarg "$arg" + done + IFS="$save_ifs" + func_stripname ' ' '' "$lastarg" + lastarg=$func_stripname_result + + # Add the arguments to base_compile. + func_append base_compile " $lastarg" + continue + ;; + + *) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg="$srcfile" + srcfile="$arg" + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + func_append_quoted base_compile "$lastarg" + done # for arg + + case $arg_mode in + arg) + func_fatal_error "you must specify an argument for -Xcompile" + ;; + target) + func_fatal_error "you must specify a target with \`-o'" + ;; + *) + # Get the name of the library object. + test -z "$libobj" && { + func_basename "$srcfile" + libobj="$func_basename_result" + } + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + case $libobj in + *.[cCFSifmso] | \ + *.ada | *.adb | *.ads | *.asm | \ + *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ + *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) + func_xform "$libobj" + libobj=$func_xform_result + ;; + esac + + case $libobj in + *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; + *) + func_fatal_error "cannot determine name of library object from \`$libobj'" + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + continue + ;; + + -static) + build_libtool_libs=no + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + func_quote_for_eval "$libobj" + test "X$libobj" != "X$func_quote_for_eval_result" \ + && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ + && func_warning "libobj name \`$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname="$func_basename_result" + xdir="$func_dirname_result" + lobj=${xdir}$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + func_append removelist " $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + func_append removelist " $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 + srcfile=$func_to_tool_file_result + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test "$pic_mode" != no; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + func_append command " -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test "$suppress_opt" = yes; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + if test "$pic_mode" != yes; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test "$compiler_c_o" = yes; then + func_append command " -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + func_append command "$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { + test "$opt_mode" = compile && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $opt_mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to build PIC objects only + -prefer-non-pic try to build non-PIC objects only + -shared do not build a \`.o' file suitable for static linking + -static only build a \`.o' file suitable for static linking + -Wc,FLAG pass FLAG directly to the compiler + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -bindir BINDIR specify path to binaries directory (for systems where + libraries must be found in the PATH setting at runtime) + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + -Wc,FLAG + -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wl,FLAG + -Xlinker FLAG pass linker-specific FLAG directly to the linker + -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode \`$opt_mode'" + ;; + esac + + echo + $ECHO "Try \`$progname --help' for more information about other modes." +} + +# Now that we've collected a possible --mode arg, show help if necessary +if $opt_help; then + if test "$opt_help" = :; then + func_mode_help + else + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + func_mode_help + done + } | sed -n '1p; 2,$s/^Usage:/ or: /p' + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + echo + func_mode_help + done + } | + sed '1d + /^When reporting/,/^Report/{ + H + d + } + $x + /information about other modes/d + /more detailed .*MODE/d + s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' + fi + exit $? +fi + + +# func_mode_execute arg... +func_mode_execute () +{ + $opt_debug + # The first argument is the command name. + cmd="$nonopt" + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $opt_dlopen; do + test -f "$file" \ + || func_fatal_help "\`$file' is not a file" + + dir= + case $file in + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "\`$file' was not linked with \`-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir="$func_dirname_result" + + if test -f "$dir/$objdir/$dlname"; then + func_append dir "/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir="$func_dirname_result" + ;; + + *) + func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -* | *.la | *.lo ) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file="$progdir/$program" + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_append_quoted args "$file" + done + + if test "X$opt_dry_run" = Xfalse; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + fi +} + +test "$opt_mode" = execute && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $opt_debug + libs= + libdirs= + admincmds= + + for opt in "$nonopt" ${1+"$@"} + do + if test -d "$opt"; then + func_append libdirs " $opt" + + elif test -f "$opt"; then + if func_lalib_unsafe_p "$opt"; then + func_append libs " $opt" + else + func_warning "\`$opt' is not a valid libtool archive" + fi + + else + func_fatal_error "invalid argument \`$opt'" + fi + done + + if test -n "$libs"; then + if test -n "$lt_sysroot"; then + sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` + sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" + else + sysroot_cmd= + fi + + # Remove sysroot references + if $opt_dry_run; then + for lib in $libs; do + echo "removing references to $lt_sysroot and \`=' prefixes from $lib" + done + else + tmpdir=`func_mktempdir` + for lib in $libs; do + sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ + > $tmpdir/tmp-la + mv -f $tmpdir/tmp-la $lib + done + ${RM}r "$tmpdir" + fi + fi + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || func_append admincmds " + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_silent && exit $EXIT_SUCCESS + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + echo + + echo "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" + echo "pages." + ;; + *) + echo "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + echo "----------------------------------------------------------------------" + fi + exit $EXIT_SUCCESS +} + +test "$opt_mode" = finish && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $opt_debug + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + case $nonopt in *shtool*) :;; *) false;; esac; then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + func_append install_prog "$func_quote_for_eval_result" + install_shared_prog=$install_prog + case " $install_prog " in + *[\\\ /]cp\ *) install_cp=: ;; + *) install_cp=false ;; + esac + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + no_mode=: + for arg + do + arg2= + if test -n "$dest"; then + func_append files " $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) + if $install_cp; then :; else + prev=$arg + fi + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + if test "x$prev" = x-m && test -n "$install_override_mode"; then + arg2=$install_override_mode + no_mode=false + fi + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + func_append install_prog " $func_quote_for_eval_result" + if test -n "$arg2"; then + func_quote_for_eval "$arg2" + fi + func_append install_shared_prog " $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the \`$prev' option requires an argument" + + if test -n "$install_override_mode" && $no_mode; then + if $install_cp; then :; else + func_quote_for_eval "$install_override_mode" + func_append install_shared_prog " -m $func_quote_for_eval_result" + fi + fi + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir="$func_dirname_result" + destname="$func_basename_result" + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "\`$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "\`$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + func_append staticlibs " $file" + ;; + + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) func_append current_libdirs " $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) func_append future_libdirs " $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir="$func_dirname_result" + func_append dir "$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking \`$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname="$1" + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme="$stripme" + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme="" + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try `ln -sf' first, because the `ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name="$func_basename_result" + instname="$dir/$name"i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && func_append staticlibs " $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to \`$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script \`$wrapper'" + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "\`$lib' has not been installed in \`$libdir'" + finalize=no + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + $opt_dry_run || { + if test "$finalize" = yes; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file="$func_basename_result" + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_silent || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink \`$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file="$outputname" + else + func_warning "cannot relink \`$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name="$func_basename_result" + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $tool_oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run \`$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test "$opt_mode" = install && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $opt_debug + my_outputname="$1" + my_originator="$2" + my_pic_p="${3-no}" + my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms="${my_outputname}S.c" + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${my_outputname}.nm" + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" +#endif + +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + func_verbose "generating symbol list for \`$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_to_tool_file "$progfile" func_convert_file_msys_to_w32 + func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" + $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$outputname.exp" + $opt_dry_run || { + $RM $export_symbols + eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from \`$dlprefile'" + func_basename "$dlprefile" + name="$func_basename_result" + case $host in + *cygwin* | *mingw* | *cegcc* ) + # if an import library, we need to obtain dlname + if func_win32_import_lib_p "$dlprefile"; then + func_tr_sh "$dlprefile" + eval "curr_lafile=\$libfile_$func_tr_sh_result" + dlprefile_dlbasename="" + if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then + # Use subshell, to avoid clobbering current variable values + dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` + if test -n "$dlprefile_dlname" ; then + func_basename "$dlprefile_dlname" + dlprefile_dlbasename="$func_basename_result" + else + # no lafile. user explicitly requested -dlpreopen . + $sharedlib_from_linklib_cmd "$dlprefile" + dlprefile_dlbasename=$sharedlib_from_linklib_result + fi + fi + $opt_dry_run || { + if test -n "$dlprefile_dlbasename" ; then + eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' + else + func_warning "Could not compute DLL name from $name" + eval '$ECHO ": $name " >> "$nlist"' + fi + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | + $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" + } + else # not an import lib + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + fi + ;; + *) + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + ;; + esac + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + echo >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +extern LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[]; +LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{\ + { \"$my_originator\", (void *) 0 }," + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + echo >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + if test "X$my_pic_p" != Xno; then + pic_flag_for_symtable=" $pic_flag" + fi + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) func_append symtab_cflags " $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' + + # Transform the symbol file into the correct name. + symfileobj="$output_objdir/${my_outputname}S.$objext" + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for \`$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` + fi +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +# Despite the name, also deal with 64 bit binaries. +func_win32_libid () +{ + $opt_debug + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + func_to_tool_file "$1" func_convert_file_msys_to_w32 + win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | + $SED -n -e ' + 1,100{ + / I /{ + s,.*,import, + p + q + } + }'` + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + +# func_cygming_dll_for_implib ARG +# +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib () +{ + $opt_debug + sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` +} + +# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs +# +# The is the core of a fallback implementation of a +# platform-specific function to extract the name of the +# DLL associated with the specified import library LIBNAME. +# +# SECTION_NAME is either .idata$6 or .idata$7, depending +# on the platform and compiler that created the implib. +# +# Echos the name of the DLL associated with the +# specified import library. +func_cygming_dll_for_implib_fallback_core () +{ + $opt_debug + match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` + $OBJDUMP -s --section "$1" "$2" 2>/dev/null | + $SED '/^Contents of section '"$match_literal"':/{ + # Place marker at beginning of archive member dllname section + s/.*/====MARK====/ + p + d + } + # These lines can sometimes be longer than 43 characters, but + # are always uninteresting + /:[ ]*file format pe[i]\{,1\}-/d + /^In archive [^:]*:/d + # Ensure marker is printed + /^====MARK====/p + # Remove all lines with less than 43 characters + /^.\{43\}/!d + # From remaining lines, remove first 43 characters + s/^.\{43\}//' | + $SED -n ' + # Join marker and all lines until next marker into a single line + /^====MARK====/ b para + H + $ b para + b + :para + x + s/\n//g + # Remove the marker + s/^====MARK====// + # Remove trailing dots and whitespace + s/[\. \t]*$// + # Print + /./p' | + # we now have a list, one entry per line, of the stringified + # contents of the appropriate section of all members of the + # archive which possess that section. Heuristic: eliminate + # all those which have a first or second character that is + # a '.' (that is, objdump's representation of an unprintable + # character.) This should work for all archives with less than + # 0x302f exports -- but will fail for DLLs whose name actually + # begins with a literal '.' or a single character followed by + # a '.'. + # + # Of those that remain, print the first one. + $SED -e '/^\./d;/^.\./d;q' +} + +# func_cygming_gnu_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is a GNU/binutils-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_gnu_implib_p () +{ + $opt_debug + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` + test -n "$func_cygming_gnu_implib_tmp" +} + +# func_cygming_ms_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is an MS-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_ms_implib_p () +{ + $opt_debug + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` + test -n "$func_cygming_ms_implib_tmp" +} + +# func_cygming_dll_for_implib_fallback ARG +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# +# This fallback implementation is for use when $DLLTOOL +# does not support the --identify-strict option. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib_fallback () +{ + $opt_debug + if func_cygming_gnu_implib_p "$1" ; then + # binutils import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` + elif func_cygming_ms_implib_p "$1" ; then + # ms-generated import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` + else + # unknown + sharedlib_from_linklib_result="" + fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $opt_debug + f_ex_an_ar_dir="$1"; shift + f_ex_an_ar_oldlib="$1" + if test "$lock_old_archive_extraction" = yes; then + lockfile=$f_ex_an_ar_oldlib.lock + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + fi + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ + 'stat=$?; rm -f "$lockfile"; exit $stat' + if test "$lock_old_archive_extraction" = yes; then + $opt_dry_run || rm -f "$lockfile" + fi + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $opt_debug + my_gentop="$1"; shift + my_oldlibs=${1+"$@"} + my_oldobjs="" + my_xlib="" + my_xabs="" + my_xdir="" + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib="$func_basename_result" + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir="$my_gentop/$my_xlib_u" + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + darwin_base_archive=`basename "$darwin_archive"` + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches ; do + func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" + $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" + cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" + func_extract_an_archive "`pwd`" "${darwin_base_archive}" + cd "$darwin_curdir" + $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` + done + + func_extract_archives_result="$my_oldobjs" +} + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory in which it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=${1-no} + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + file=\"\$0\"" + + qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` + $ECHO "\ + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + ECHO=\"$qECHO\" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ which is used only on +# windows platforms, and (c) all begin with the string "--lt-" +# (application programs are unlikely to have options which match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's $0 value, followed by "$@". +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=\$0 + shift + for lt_opt + do + case \"\$lt_opt\" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` + test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. + lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` + cat \"\$lt_dump_D/\$lt_dump_F\" + exit 0 + ;; + --lt-*) + \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n \"\$lt_option_debug\"; then + echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" + lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from \$@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + case \" \$* \" in + *\\ --lt-*) + for lt_wr_arg + do + case \$lt_wr_arg in + --lt-*) ;; + *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; + esac + shift + done ;; + esac + func_exec_program_core \${1+\"\$@\"} +} + + # Parse options + func_parse_lt_options \"\$0\" \${1+\"\$@\"} + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # fixup the dll searchpath if we need to. + # + # Fix the DLL searchpath if we need to. Do this before prepending + # to shlibpath, because on Windows, both are PATH and uninstalled + # libraries must come first. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` + + export $shlibpath_var +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + func_exec_program \${1+\"\$@\"} + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} + + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +#else +# include +# include +# ifdef __CYGWIN__ +# include +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +/* declarations of non-ANSI functions */ +#if defined(__MINGW32__) +# ifdef __STRICT_ANSI__ +int _putenv (const char *); +# endif +#elif defined(__CYGWIN__) +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +/* #elif defined (other platforms) ... */ +#endif + +/* portability defines, excluding path handling macros */ +#if defined(_MSC_VER) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +# define S_IXUSR _S_IEXEC +# ifndef _INTPTR_T_DEFINED +# define _INTPTR_T_DEFINED +# define intptr_t int +# endif +#elif defined(__MINGW32__) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +#elif defined(__CYGWIN__) +# define HAVE_SETENV +# define FOPEN_WB "wb" +/* #elif defined (other platforms) ... */ +#endif + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +/* path handling portability macros */ +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +#if defined(LT_DEBUGWRAPPER) +static int lt_debug = 1; +#else +static int lt_debug = 0; +#endif + +const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_debugprintf (const char *file, int line, const char *fmt, ...); +void lt_fatal (const char *file, int line, const char *message, ...); +static const char *nonnull (const char *s); +static const char *nonempty (const char *s); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); +void lt_dump_script (FILE *f); +EOF + + cat <= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + int tmp_len; + char *concat_name; + + lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", + nonempty (wrapper)); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = q - p; + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + lt_debugprintf (__FILE__, __LINE__, + "checking path component for symlinks: %s\n", + tmp_pathspec); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + lt_fatal (__FILE__, __LINE__, + "error accessing file \"%s\": %s", + tmp_pathspec, nonnull (strerror (errno))); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal (__FILE__, __LINE__, + "could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp (str, pat) == 0) + *str = '\0'; + } + return str; +} + +void +lt_debugprintf (const char *file, int line, const char *fmt, ...) +{ + va_list args; + if (lt_debug) + { + (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); + } +} + +static void +lt_error_core (int exit_status, const char *file, + int line, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *file, int line, const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); + va_end (ap); +} + +static const char * +nonnull (const char *s) +{ + return s ? s : "(null)"; +} + +static const char * +nonempty (const char *s) +{ + return (s && !*s) ? "(empty)" : nonnull (s); +} + +void +lt_setenv (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_setenv) setting '%s' to '%s'\n", + nonnull (name), nonnull (value)); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + int len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + int orig_value_len = strlen (orig_value); + int add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + int len = strlen (new_value); + while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[len-1] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +EOF + case $host_os in + mingw*) + cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Win32 CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XMALLOC (char *, argc + 1); + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = XMALLOC (char, length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} +EOF + ;; + esac + + cat <<"EOF" +void lt_dump_script (FILE* f) +{ +EOF + func_emit_wrapper yes | + $SED -n -e ' +s/^\(.\{79\}\)\(..*\)/\1\ +\2/ +h +s/\([\\"]\)/\\\1/g +s/$/\\n/ +s/\([^\n]*\).*/ fputs ("\1", f);/p +g +D' + cat <<"EOF" +} +EOF +} +# end: func_emit_cwrapperexe_src + +# func_win32_import_lib_p ARG +# True if ARG is an import lib, as indicated by $file_magic_cmd +func_win32_import_lib_p () +{ + $opt_debug + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in + *import*) : ;; + *) false ;; + esac +} + +# func_mode_link arg... +func_mode_link () +{ + $opt_debug + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # which system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll which has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + bindir= + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=no + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module="${wl}-single_module" + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + bindir) + bindir="$arg" + prev= + continue + ;; + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + func_append dlfiles " $arg" + else + func_append dlprefiles " $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + test -f "$arg" \ + || func_fatal_error "symbol file \`$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) func_append deplibs " $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# func_append moreargs " $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file \`$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) func_append rpath " $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) func_append xrpath " $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + weak) + func_append weak_libs " $arg" + prev= + continue + ;; + xcclinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "\`-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -bindir) + prev=bindir + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname "-L" '' "$arg" + if test -z "$func_stripname_result"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between \`-L' and \`$1'" + else + func_fatal_error "need path for \`-L' option" + fi + fi + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of \`$dir'" + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "* | *" $arg "*) + # Will only happen for absolute or sysroot arguments + ;; + *) + # Preserve sysroot, but never include relative directories + case $dir in + [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; + *) func_append deplibs " -L$dir" ;; + esac + func_append lib_search_path " $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) func_append dllsearchpath ":$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + func_append deplibs " System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test "X$arg" = "X-lc" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test "X$arg" = "X-lc" && continue + ;; + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + func_append deplibs " $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot|--sysroot) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) func_append new_inherited_linker_flags " $arg" ;; + esac + continue + ;; + + -multi_module) + single_module="${wl}-multi_module" + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "\`-no-install' is ignored for $host" + func_warning "assuming \`-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + =*) + func_stripname '=' '' "$dir" + dir=$lt_sysroot$func_stripname_result + ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + func_append arg " $func_quote_for_eval_result" + func_append compiler_flags " $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + func_append arg " $wl$func_quote_for_eval_result" + func_append compiler_flags " $wl$func_quote_for_eval_result" + func_append linker_flags " $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + # Flags to be passed through unchanged, with rationale: + # -64, -mips[0-9] enable 64-bit mode for the SGI compiler + # -r[0-9][0-9]* specify processor for the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler + # +DA*, +DD* enable 64-bit mode for the HP compiler + # -q* compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* architecture-specific flags for GCC + # -F/path path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # @file GCC response files + # -tp=* Portland pgcc target processor selection + # --sysroot=* for sysroot support + # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ + -O*|-flto*|-fwhopr*|-fuse-linker-plugin) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + func_append compile_command " $arg" + func_append finalize_command " $arg" + func_append compiler_flags " $arg" + continue + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + *.$objext) + # A standard object. + func_append objs " $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + func_append deplibs " $arg" + func_append old_deplibs " $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + func_resolve_sysroot "$arg" + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + func_append dlfiles " $func_resolve_sysroot_result" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + func_append dlprefiles " $func_resolve_sysroot_result" + prev= + else + func_append deplibs " $func_resolve_sysroot_result" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the \`$prevarg' option requires an argument" + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname="$func_basename_result" + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + func_dirname "$output" "/" "" + output_objdir="$func_dirname_result$objdir" + func_to_tool_file "$output_objdir/" + tool_output_objdir=$func_to_tool_file_result + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_preserve_dup_deps ; then + case "$libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append libs " $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; + esac + func_append pre_post_deps " $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test "$linkmode,$pass" = "lib,link"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs="$tmp_deplibs" + fi + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + esac + fi + if test "$linkmode,$pass" = "lib,dlpreopen"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + func_resolve_sysroot "$lib" + case $lib in + *.la) func_source "$func_resolve_sysroot_result" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + func_basename "$deplib" + deplib_base=$func_basename_result + case " $weak_libs " in + *" $deplib_base "*) ;; + *) func_append deplibs " $deplib" ;; + esac + done + done + libs="$dlprefiles" + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append compiler_flags " $deplib" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + func_warning "\`-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test "$linkmode" = lib; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + *.ltframework) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + *) + func_warning "\`-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + func_stripname '-R' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) + func_resolve_sysroot "$deplib" + lib=$func_resolve_sysroot_result + ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=no + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=yes + fi + ;; + pass_all) + valid_a_lib=yes + ;; + esac + if test "$valid_a_lib" != yes; then + echo + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not use here." + else + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + ;; + esac + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + func_append newdlprefiles " $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append newdlfiles " $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + + if test "$found" = yes || test -f "$lib"; then : + else + func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" + fi + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "\`$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && func_append dlfiles " $dlopen" + test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + # It is a libtool convenience library, so add in its objects. + func_append convenience " $ladir/$objdir/$old_library" + func_append old_convenience " $ladir/$objdir/$old_library" + elif test "$linkmode" != prog && test "$linkmode" != lib; then + func_fatal_error "\`$lib' is not a convenience library" + fi + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + if test -n "$old_library" && + { test "$prefer_static_libs" = yes || + test "$prefer_static_libs,$installed" = "built,no"; }; then + linklib=$old_library + else + for l in $old_library $library_names; do + linklib="$l" + done + fi + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + func_fatal_error "cannot -dlopen a convenience library: \`$lib'" + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + func_append dlprefiles " $lib $dependency_libs" + else + func_append newdlfiles " $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of \`$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir="$ladir" + fi + ;; + esac + func_basename "$lib" + laname="$func_basename_result" + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library \`$lib' was moved." + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$lt_sysroot$libdir" + absdir="$lt_sysroot$libdir" + fi + test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir="$ladir" + absdir="$abs_ladir" + # Remove this search path later + func_append notinst_path " $abs_ladir" + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + func_append notinst_path " $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir" && test "$linkmode" = prog; then + func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" + fi + case "$host" in + # special handling for platforms with PE-DLLs. + *cygwin* | *mingw* | *cegcc* ) + # Linker will automatically link against shared library if both + # static and shared are present. Therefore, ensure we extract + # symbols from the import library if a shared library is present + # (otherwise, the dlopen module name will be incorrect). We do + # this by putting the import library name into $newdlprefiles. + # We recover the dlopen module name by 'saving' the la file + # name in a special purpose variable, and (later) extracting the + # dlname from the la file. + if test -n "$dlname"; then + func_tr_sh "$dir/$linklib" + eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" + func_append newdlprefiles " $dir/$linklib" + else + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + fi + ;; + * ) + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + func_append newdlprefiles " $dir/$dlname" + else + func_append newdlprefiles " $dir/$linklib" + fi + ;; + esac + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + func_append newlib_search_path " $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { { test "$prefer_static_libs" = no || + test "$prefer_static_libs,$installed" = "built,yes"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath:" in + *"$absdir:"*) ;; + *) func_append temp_rpath "$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test "$use_static_libs" = built && test "$installed" = yes; then + use_static_libs=no + fi + if test -n "$library_names" && + { test "$use_static_libs" = no || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc*) + # No point in relinking DLLs because paths are not encoded + func_append notinst_deplibs " $lib" + need_relink=no + ;; + *) + if test "$installed" = no; then + func_append notinst_deplibs " $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule="" + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule="$dlpremoduletest" + break + fi + done + if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then + echo + if test "$linkmode" = prog; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname="$1" + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc*) + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + func_basename "$soroot" + soname="$func_basename_result" + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from \`$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for \`$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$opt_mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; + *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we can not + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null ; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + echo + echo "*** And there doesn't seem to be a static archive available" + echo "*** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + elif test -n "$old_library"; then + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$absdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) func_append compile_shlibpath "$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && + test "$hardcode_minus_L" != yes && + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$opt_mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + $ECHO "*** Warning: This system can not link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) func_append xrpath " $temp_xrpath";; + esac;; + *) func_append temp_deplibs " $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + func_append newlib_search_path " $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result";; + *) func_resolve_sysroot "$deplib" ;; + esac + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $func_resolve_sysroot_result "*) + func_append specialdeplibs " $func_resolve_sysroot_result" ;; + esac + fi + func_append tmp_libs " $func_resolve_sysroot_result" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + path= + case $deplib in + -L*) path="$deplib" ;; + *.la) + func_resolve_sysroot "$deplib" + deplib=$func_resolve_sysroot_result + func_dirname "$deplib" "" "." + dir=$func_dirname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of \`$dir'" + absdir="$dir" + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl" ; then + depdepl="$absdir/$objdir/$depdepl" + darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" + func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" + path= + fi + fi + ;; + *) + path="-L$absdir/$objdir" + ;; + esac + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "\`$deplib' seems to be moved" + + path="-L$absdir" + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test "$pass" = link; then + if test "$linkmode" = "prog"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) func_append lib_search_path " $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) func_append tmp_libs " $deplib" ;; + esac + ;; + *) func_append tmp_libs " $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + func_append tmp_libs " $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + fi + if test "$linkmode" = prog || test "$linkmode" = lib; then + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "\`-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "\`-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + func_append objs "$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test "$module" = no && \ + func_fatal_help "libtool library \`$output' must begin with \`lib'" + + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" + else + echo + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + func_append libobjs " $objs" + fi + fi + + test "$dlself" != no && \ + func_warning "\`-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test "$#" -gt 1 && \ + func_warning "ignoring multiple \`-rpath's for a libtool library" + + install_libdir="$1" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "\`-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + shift + IFS="$save_ifs" + + test -n "$7" && \ + func_fatal_help "too many parameters to \`-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$1" + number_minor="$2" + number_revision="$3" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + # correct linux to gnu/linux during the next big refactor + darwin|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|qnx|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_minor" + lt_irix_increment=no + ;; + esac + ;; + no) + current="$1" + revision="$2" + age="$3" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT \`$current' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION \`$revision' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE \`$age' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE \`$age' is greater than the current interface number \`$current'" + func_fatal_error "\`$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current" + ;; + + irix | nonstopux) + if test "X$lt_irix_increment" = "Xno"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) # correct to gnu/linux during the next big refactor + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + func_append verstring ":${current}.0" + ;; + + qnx) + major=".$current" + versuffix=".$current" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + + *) + func_fatal_configuration "unknown library version type \`$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + func_warning "undefined symbols not allowed in $host shared libraries" + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + fi + + func_generate_dlsyms "$libname" "$libname" "yes" + func_append libobjs " $symfileobj" + test "X$libobjs" = "X " && libobjs= + + if test "$opt_mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + func_append removelist " $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + func_append oldlibs " $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` + # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` + # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + func_replace_sysroot "$libdir" + func_append temp_xrpath " -R$func_replace_sysroot_result" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) func_append dlfiles " $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) func_append dlprefiles " $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + func_append deplibs " System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + func_append deplibs " -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + $nocaseglob + else + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + fi + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + func_append newdeplibs " $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` + done + fi + case $tmp_deplibs in + *[!\ \ ]*) + echo + if test "X$deplibs_check_method" = "Xnone"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + ;; + esac + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + deplibs="$new_libs" + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + # Remove ${wl} instances when linking with ld. + # FIXME: should test the right _cmds variable. + case $archive_cmds in + *\$LD\ *) wl= ;; + esac + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$opt_mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + func_replace_sysroot "$libdir" + libdir=$func_replace_sysroot_result + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append dep_rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname="$1" + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + linknames= + for link + do + func_append linknames " $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols="$output_objdir/$libname.uexp" + func_append delfiles " $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + if test "x`$SED 1q $export_symbols`" != xEXPORTS; then + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols="$export_symbols" + export_symbols= + always_export_symbols=yes + fi + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd1 in $cmds; do + IFS="$save_ifs" + # Take the normal branch if the nm_file_list_spec branch + # doesn't work or if tool conversion is not needed. + case $nm_file_list_spec~$to_tool_file_cmd in + *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) + try_normal_branch=yes + eval cmd=\"$cmd1\" + func_len " $cmd" + len=$func_len_result + ;; + *) + try_normal_branch=no + ;; + esac + if test "$try_normal_branch" = yes \ + && { test "$len" -lt "$max_cmd_len" \ + || test "$max_cmd_len" -le -1; } + then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + elif test -n "$nm_file_list_spec"; then + func_basename "$output" + output_la=$func_basename_result + save_libobjs=$libobjs + save_output=$output + output=${output_objdir}/${output_la}.nm + func_to_tool_file "$output" + libobjs=$nm_file_list_spec$func_to_tool_file_result + func_append delfiles " $output" + func_verbose "creating $NM input file list: $output" + for obj in $save_libobjs; do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > "$output" + eval cmd=\"$cmd1\" + func_show_eval "$cmd" 'exit $?' + output=$save_output + libobjs=$save_libobjs + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + func_append tmp_deplibs " $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test "$compiler_needs_object" = yes && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + func_append linker_flags " $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$opt_mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test "X$skipped_export" != "X:" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + func_basename "$output" + output_la=$func_basename_result + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then + output=${output_objdir}/${output_la}.lnkscript + func_verbose "creating GNU ld script: $output" + echo 'INPUT (' > $output + for obj in $save_libobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + echo ')' >> $output + func_append delfiles " $output" + func_to_tool_file "$output" + output=$func_to_tool_file_result + elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then + output=${output_objdir}/${output_la}.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test "$compiler_needs_object" = yes; then + firstobj="$1 " + shift + fi + for obj + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + func_append delfiles " $output" + func_to_tool_file "$output" + output=$firstobj\"$file_list_spec$func_to_tool_file_result\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-${k}.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test "X$objlist" = X || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + reload_objs=$objlist + eval concat_cmds=\"$reload_cmds\" + else + # All subsequent reloadable object files will link in + # the last one created. + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-${k}.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-${k}.$objext + objlist=" $obj" + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\${concat_cmds}$reload_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" + fi + func_append delfiles " $output" + + else + output= + fi + + if ${skipped_export-false}; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + fi + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + if ${skipped_export-false}; then + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + fi + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "\`-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object \`$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec and hope we can get by with + # turning comma into space.. + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + else + gentop="$output_objdir/${obj}x" + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # If we're not building shared, we need to use non_pic_objs + test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "\`-release' is ignored for programs" + + test "$preload" = yes \ + && test "$dlopen_support" = unknown \ + && test "$dlopen_self" = unknown \ + && test "$dlopen_self_static" = unknown && \ + func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test "$tagname" = CXX ; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + func_append compile_command " ${wl}-bind_at_load" + func_append finalize_command " ${wl}-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + compile_deplibs="$new_libs" + + + func_append compile_command " $compile_deplibs" + func_append finalize_command " $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) func_append dllsearchpath ":$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) func_append finalize_perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" "no" + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=yes + case $host in + *cegcc* | *mingw32ce*) + # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. + wrappers_required=no + ;; + *cygwin* | *mingw* ) + if test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + *) + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + esac + if test "$wrappers_required" = no; then + # Replace the output file specification. + compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.${objext}"; then + func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' + fi + + exit $exit_status + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + func_append rpath "$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "\`$output' will be relinked during installation" + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output_objdir/$outputname" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource="$output_path/$objdir/lt-$output_name.c" + cwrapper="$output_path/$output_name.exe" + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host" ; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save $symfileobj" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + if test "$preload" = yes && test -f "$symfileobj"; then + func_append oldobjs " $symfileobj" + fi + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $addlibs + func_append oldobjs " $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append oldobjs " $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + echo "copying selected object files to avoid basename conflicts..." + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase="$func_basename_result" + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + func_append oldobjs " $gentop/$newobj" + ;; + *) func_append oldobjs " $obj" ;; + esac + done + fi + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + elif test -n "$archiver_list_spec"; then + func_verbose "using command file archive linking..." + for obj in $oldobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > $output_objdir/$libname.libcmd + func_to_tool_file "$output_objdir/$libname.libcmd" + oldobjs=" $archiver_list_spec$func_to_tool_file_result" + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name="$func_basename_result" + func_resolve_sysroot "$deplib" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" + ;; + -L*) + func_stripname -L '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -L$func_replace_sysroot_result" + ;; + -R*) + func_stripname -R '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -R$func_replace_sysroot_result" + ;; + *) func_append newdependency_libs " $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" + ;; + *) func_append newdlfiles " $lib" ;; + esac + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" + ;; + esac + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlfiles " $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlprefiles " $abs" + done + dlprefiles="$newdlprefiles" + fi + $RM $output + # place dlname in correct position for cygwin + # In fact, it would be nice if we could use this code for all target + # systems that can't hard-code library paths into their executables + # and that have no shared library path variable independent of PATH, + # but it turns out we can't easily determine that from inspecting + # libtool variables, so we have to hard-code the OSs to which it + # applies here; at the moment, that means platforms that use the PE + # object format with DLL files. See the long comment at the top of + # tests/bindir.at for full details. + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) + # If a -bindir argument was supplied, place the dll there. + if test "x$bindir" != x ; + then + func_relative_path "$install_libdir" "$bindir" + tdlname=$func_relative_path_result$dlname + else + # Otherwise fall back on heuristic. + tdlname=../bin/$dlname + fi + ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that can not go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +{ test "$opt_mode" = link || test "$opt_mode" = relink; } && + func_mode_link ${1+"$@"} + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $opt_debug + RM="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) func_append RM " $arg"; rmforce=yes ;; + -*) func_append RM " $arg" ;; + *) func_append files " $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + for file in $files; do + func_dirname "$file" "" "." + dir="$func_dirname_result" + if test "X$dir" = X.; then + odir="$objdir" + else + odir="$dir/$objdir" + fi + func_basename "$file" + name="$func_basename_result" + test "$opt_mode" = uninstall && odir="$dir" + + # Remember odir for removal later, being careful to avoid duplicates + if test "$opt_mode" = clean; then + case " $rmdirs " in + *" $odir "*) ;; + *) func_append rmdirs " $odir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + func_append rmfiles " $odir/$n" + done + test -n "$old_library" && func_append rmfiles " $odir/$old_library" + + case "$opt_mode" in + clean) + case " $library_names " in + *" $dlname "*) ;; + *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; + esac + test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && + test "$pic_object" != none; then + func_append rmfiles " $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && + test "$non_pic_object" != none; then + func_append rmfiles " $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$opt_mode" = clean ; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + func_append rmfiles " $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + func_append rmfiles " $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + func_append rmfiles " $odir/$name $odir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + func_append rmfiles " $odir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + func_append rmfiles " $odir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && + func_mode_uninstall ${1+"$@"} + +test -z "$opt_mode" && { + help="$generic_help" + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode \`$opt_mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: +# vi:sw=2 + diff --git a/libxc-2.2.0/m4/ac_prog_sed.m4 b/libxc-2.2.0/m4/ac_prog_sed.m4 new file mode 100644 index 000000000..c225bd4d5 --- /dev/null +++ b/libxc-2.2.0/m4/ac_prog_sed.m4 @@ -0,0 +1,172 @@ +# -*- Autoconf -*- +# +# This file includes functions from Autoconf 2.61, for compatibility with older +# Autoconfs. Original copyright below. +# Remove this file when we drop support for AC 2.59 and older + +# This file is part of Autoconf. -*- Autoconf -*- +# Macros that test for specific, unclassified, features. +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception, the Free Software Foundation gives unlimited +# permission to copy, distribute and modify the configure scripts that +# are the output of Autoconf. You need not follow the terms of the GNU +# General Public License when using or distributing such scripts, even +# though portions of the text of Autoconf appear in them. The GNU +# General Public License (GPL) does govern all other use of the material +# that constitutes the Autoconf program. +# +# Certain portions of the Autoconf source text are designed to be copied +# (in certain cases, depending on the input) into the output of +# Autoconf. We call these the "data" portions. The rest of the Autoconf +# source text consists of comments plus executable code that decides which +# of the data portions to output in any given case. We call these +# comments and executable code the "non-data" portions. Autoconf never +# copies any of the non-data portions into its output. +# +# This special exception to the GPL applies to versions of Autoconf +# released by the Free Software Foundation. When you make and +# distribute a modified version of Autoconf, you may extend this special +# exception to the GPL to apply to your modified version as well, *unless* +# your modified version has the potential to copy into its output some +# of the text that was the non-data portion of the version that you started +# with. (In other words, unless your change moves or copies text from +# the non-data portions to the data portions.) If your modification has +# such potential, you must delete any notice of this special exception +# to the GPL from your modified version. +# +# Written by David MacKenzie, with help from +# Franc,ois Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor, +# Roland McGrath, Noah Friedman, david d zuhn, and many others. + +# AC_PROG_SED +# ----------- +# Check for a fully functional sed program that truncates +# as few characters as possible. Prefer GNU sed if found. +AC_DEFUN([AC_PROG_SED], +[AC_CACHE_CHECK([for a sed that does not truncate output], ac_cv_path_SED, + [dnl ac_script should not contain more than 99 commands (for HP-UX sed), + dnl but more than about 7000 bytes, to catch a limit in Solaris 8 /usr/ucb/sed. + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" | sed 99q >conftest.sed + $as_unset ac_script || ac_script= + _AC_PATH_PROG_FEATURE_CHECK(SED, [sed gsed], + [_AC_FEATURE_CHECK_LENGTH([ac_path_SED], [ac_cv_path_SED], + ["$ac_path_SED" -f conftest.sed])])]) + SED="$ac_cv_path_SED" + AC_SUBST([SED])dnl + rm -f conftest.sed +])# AC_PROG_SED + +# _AC_PATH_PROG_FEATURE_CHECK(VARIABLE, PROGNAME-LIST, FEATURE-TEST, [PATH]) +# -------------------------------------------------------------------------- +# FEATURE-TEST is called repeatedly with $ac_path_VARIABLE set to the +# name of a program in PROGNAME-LIST found in PATH. FEATURE-TEST must set +# $ac_cv_path_VARIABLE to the path of an acceptable program, or else +# _AC_PATH_PROG_FEATURE_CHECK will report that no acceptable program +# was found, and abort. If a suitable $ac_path_VARIABLE is found in the +# FEATURE-TEST macro, it can set $ac_path_VARIABLE_found=':' to accept +# that value without any further checks. +m4_define([_AC_PATH_PROG_FEATURE_CHECK], +[# Extract the first word of "$2" to use in msg output +if test -z "$$1"; then +set dummy $2; ac_prog_name=$[2] +AC_CACHE_VAL([ac_cv_path_$1], +[ac_path_$1_found=false +# Loop through the user's path and test for each of PROGNAME-LIST +_AS_PATH_WALK([$4], +[for ac_prog in $2; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_$1="$as_dir/$ac_prog$ac_exec_ext" + AS_EXECUTABLE_P(["$ac_path_$1"]) || continue + $3 + $ac_path_$1_found && break 3 + done +done +]) +]) +$1="$ac_cv_path_$1" +if test -z "$$1"; then + AC_MSG_ERROR([no acceptable $ac_prog_name could be found in dnl +m4_default([$4], [\$PATH])]) +fi +AC_SUBST([$1]) +else + ac_cv_path_$1=$$1 +fi +]) + + +# _AC_FEATURE_CHECK_LENGTH(PROGPATH, CACHE-VAR, CHECK-CMD, [MATCH-STRING]) +# ------------------------------------------------------------------------ +# For use as the FEATURE-TEST argument to _AC_PATH_PROG_FEATURE_TEST. +# On each iteration run CHECK-CMD on an input file, storing the value +# of PROGPATH in CACHE-VAR if the CHECK-CMD succeeds. The input file +# is always one line, starting with only 10 characters, and doubling +# in length at each iteration until approx 10000 characters or the +# feature check succeeds. The feature check is called at each +# iteration by appending (optionally, MATCH-STRING and) a newline +# to the file, and using the result as input to CHECK-CMD. +m4_define([_AC_FEATURE_CHECK_LENGTH], +[# Check for GNU $1 and select it if it is found. + _AC_PATH_PROG_FLAVOR_GNU([$$1], + [$2="$$1" $1_found=:], + [ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + echo '$4' >> "conftest.nl" + $3 < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${$1_max-0}; then + # Best one so far, save it but keep looking for a better one + $2="$$1" +dnl # Using $1_max so that each tool feature checked gets its +dnl # own variable. Don't reset it otherwise the implied search +dnl # for best performing tool in a list breaks down. + $1_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out]) +]) + + +# _AC_PATH_PROG_FLAVOR_GNU(PROGRAM-PATH, IF-SUCCESS, [IF-FAILURE]) +# ---------------------------------------------------------------- +m4_define([_AC_PATH_PROG_FLAVOR_GNU], +[# Check for GNU $1 +case `"$1" --version 2>&1` in +*GNU*) + $2;; +m4_ifval([$3], +[*) + $3;; +])esac +])# _AC_PATH_PROG_FLAVOR_GNU + diff --git a/libxc-2.2.0/m4/ax_f90_module_extension.m4 b/libxc-2.2.0/m4/ax_f90_module_extension.m4 new file mode 100644 index 000000000..32a226e24 --- /dev/null +++ b/libxc-2.2.0/m4/ax_f90_module_extension.m4 @@ -0,0 +1,45 @@ +dnl @synopsis AX_F90_MODULE_EXTENSION +dnl +dnl Find Fortran 90 modules file extension. The module extension is +dnl stored in the cached variable ax_cv_f90_modext, or "unknown" if the +dnl extension cannot be found. +dnl +dnl @category Fortran +dnl @author Luc Maisonobe +dnl @version 2005-06-17 +dnl @license AllPermissive + +AC_DEFUN([AX_F90_MODULE_EXTENSION],[ +AC_CACHE_CHECK([fortran 90 modules extension], +ax_cv_f90_modext, +[AC_LANG_PUSH(Fortran) +ax_f90_mod_uppercase=no +i=0 +while test \( -f tmpdir_$i \) -o \( -d tmpdir_$i \) ; do + i=`expr $i + 1` +done +mkdir tmpdir_$i +cd tmpdir_$i +AC_COMPILE_IFELSE([module conftest_module + contains + subroutine conftest_routine + write(*,'(a)') 'gotcha!' + end subroutine conftest_routine + end module conftest_module + ], + [ax_cv_f90_modext=`ls | sed -n 's,conftest_module\.,,p'` + if test x$ax_cv_f90_modext = x ; then +dnl Some F90 compilers put module filename in uppercase letters + ax_cv_f90_modext=`ls | sed -n 's,CONFTEST_MODULE\.,,p'` + if test x$ax_cv_f90_modext = x ; then + ax_cv_f90_modext=unknown + else + ax_f90_mod_uppercase=yes + fi + fi + ], + [ax_cv_f90_modext=unknown]) +cd .. +rm -fr tmpdir_$i +AC_LANG_POP(Fortran) +])]) diff --git a/libxc-2.2.0/m4/fc_integer.m4 b/libxc-2.2.0/m4/fc_integer.m4 new file mode 100644 index 000000000..62f3c6513 --- /dev/null +++ b/libxc-2.2.0/m4/fc_integer.m4 @@ -0,0 +1,90 @@ +## Copyright (C) 2002 M. Marques, A. Castro, A. Rubio, G. Bertsch +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU Lesser General Public License as published by +## the Free Software Foundation; either version 2, or (at your option) +## any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. +## +## $Id: acx.m4 3881 2008-03-12 23:51:07Z xavier $ +## + +################################################ +# Check size of a fortran integer +# ---------------------------------- +AC_DEFUN([ACX_FC_INTEGER_SIZE],[ + AC_REQUIRE([AC_PROG_FC]) + + if test -z "$FC_INTEGER_SIZE"; then + AC_MSG_CHECKING([for the size of a Fortran integer]) + AC_RUN_IFELSE([AC_LANG_PROGRAM([],[ + integer :: i + integer(8) :: i8 + + i8 = huge(i) + + select case(i8) + case(127_8); i = 1 + case(32767_8); i = 2 + case(2147483647_8); i = 4 + case(9223372036854775807_8); i = 8 + case default; write(*,'(a,i20)') "unrecognized size ", i8; stop 999 + end select + + open(1, file='conftest.out') + write(1,'(i1)') i +])], + [ac_fcintegersize=`cat conftest.out`], + [AC_MSG_FAILURE(f90 program to find the size of a Fortran integer failed)], + [ac_fcintegersize=4; echo -n "cross-compiling; assuming... "]) + AC_MSG_RESULT([${ac_fcintegersize} bytes]) + else + ac_fcintegersize=$FC_INTEGER_SIZE + fi + AC_DEFINE_UNQUOTED(FC_INTEGER_SIZE, ${ac_fcintegersize}, [The size of a Fortran integer]) +]) + +################################################ +# Check which C type corresponds to Fortran int +# ---------------------------------- +AC_DEFUN([ACX_CC_FORTRAN_INT],[ + AC_MSG_CHECKING([for which C type corresponds to Fortran integer]) + AC_REQUIRE([ACX_FC_INTEGER_SIZE]) + AC_REQUIRE([AC_PROG_CC]) + if test -z "$CC_FORTRAN_INT"; then + AC_LANG_PUSH([C]) + AC_RUN_IFELSE([AC_LANG_PROGRAM([ +#include +],[ + FILE* fp; + fp = fopen("conftest.out", "w"); + if(${ac_fcintegersize} == sizeof(char)) + fprintf(fp, "char"); + else if(${ac_fcintegersize} == sizeof(short)) + fprintf(fp, "short"); + else if(${ac_fcintegersize} == sizeof(int)) + fprintf(fp, "int"); + else if(${ac_fcintegersize} == sizeof(long)) + fprintf(fp, "long"); + else + return 1; +])], + [ac_ccfortranint=`cat conftest.out`], + [AC_MSG_FAILURE(C program failed to find the C type of a Fortran integer)], + [ac_ccfortranint="int"; echo -n "cross-compiling; assuming... "]) + AC_LANG_POP([C]) + AC_MSG_RESULT([${ac_ccfortranint}]) + else + ac_ccfortranint=$CC_FORTRAN_INT + fi + AC_DEFINE_UNQUOTED(CC_FORTRAN_INT, ${ac_ccfortranint}, [The C type of a Fortran integer]) +]) diff --git a/libxc-2.2.0/m4/fcflags.m4 b/libxc-2.2.0/m4/fcflags.m4 new file mode 100644 index 000000000..b71291fe6 --- /dev/null +++ b/libxc-2.2.0/m4/fcflags.m4 @@ -0,0 +1,100 @@ +## Copyright (C) 2002 M. Marques, A. Castro, A. Rubio, G. Bertsch +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU Lesser General Public License as published by +## the Free Software Foundation; either version 2, or (at your option) +## any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. +## +## $Id: fcflags.m4 10978 2013-07-11 15:28:46Z micael $ +## +################################################ +# Get default FFLAGS +# ---------------------------------- +# this function can certainly be improved on +AC_DEFUN([ACX_FCFLAGS], +[ +AC_REQUIRE([AC_CANONICAL_HOST]) + +if test -z "${FCFLAGS}"; then + case "${FC}" in + gfortran*) + FCFLAGS="-pipe -O3 -funroll-loops -ffast-math -ffree-line-length-none" + ;; + openf9*) + FCFLAGS="-O3 -funroll-loops -ffast-math" + ;; + g95*) + FCFLAGS="-pipe -O3 -funroll-loops -ffast-math" + ;; + efc*|ifc*|ifort*) + case "${host}" in + x86_64*) + FCFLAGS="-u -fpp1 -nbs -pc80 -pad -align -unroll -O3 -ip -no-fp-port -mno-ieee-fp -vec-report0 -no-prec-div" + ;; + i?86*linux*) + FCFLAGS="-u -fpp1 -nbs -pc80 -pad -align -unroll -O3 -ip -no-fp-port -mno-ieee-fp -vec-report0 -no-prec-div" + a=`echo $host | sed "s/^i//" | sed "s/86.*//"` + if test "$a" -gt 5 ; then + FCFLAGS="$FCFLAGS -tpp7 -xW" + fi + ;; + ia64*) + FCFLAGS="-O3 -ip -IPF_fp_relaxed -ftz -fpp -u -align all -pad" + ;; + esac + ;; + sun*) + case "${host}" in + i?86*linux*|x86_64*) + FCFLAGS="-fast -xprefetch -xvector=simd" + ;; + sparc*) + FCFLAGS="-fast" + ;; + esac + ;; + pathf9*) + FCFLAGS="-O3 -march=auto -mcpu=auto -OPT:Ofast -fno-math-errno -LNO:simd=2 -OPT:align_unsafe=ON" + ;; + pgf90*) + FCFLAGS="-O4 -fast -Munroll -Mnoframe -Mdalign" + ;; + abf90*) + FCFLAGS="-O3 -YEXT_NAMES=LCS -YEXT_SFX=_" + ;; + xlf*) + FCFLAGS="-O3 -qarch=auto -qtune=auto -qcache=auto -qxlf90=autodealloc" + ;; + f9*) + case "${host}" in + alphaev*) + FCFLAGS="-align dcommons -fast -tune host -arch host -noautomatic" + ;; + mips*) + FCFLAGS="-Ofast -O3" + ;; + sparc*) + FCFLAGS="-fast" + ;; + *) + FCFLAGS="-O3" + ;; + esac + ;; + *) + FCFLAGS="-O3" + ;; + esac +fi +AC_MSG_NOTICE([Using FCFLAGS="$FCFLAGS"]) +]) diff --git a/libxc-2.2.0/m4/fortran.m4 b/libxc-2.2.0/m4/fortran.m4 new file mode 100644 index 000000000..3d35b54e4 --- /dev/null +++ b/libxc-2.2.0/m4/fortran.m4 @@ -0,0 +1,144 @@ +## Copyright (C) 2002 M. Marques, A. Castro, A. Rubio, G. Bertsch +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU Lesser General Public License as published by +## the Free Software Foundation; either version 2, or (at your option) +## any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. +## +## $Id: acx.m4 3881 2008-03-12 23:51:07Z xavier $ +## + +################################################ +# Check whether the compiler accepts very long lines. +# ---------------------------------- +AC_DEFUN([ACX_LONG_FORTRAN_LINES], +[AC_MSG_CHECKING([whether the compiler accepts very long lines]) +AC_COMPILE_IFELSE( AC_LANG_PROGRAM( [], [ +write(*, *) '456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678904567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789001234567890123456789045678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890' + ]), + [acx_long_lines_ok=yes; AC_DEFINE(LONG_LINES, 1, [compiler supports long lines])], [acx_long_lines_ok=no]) +AC_SUBST([LONG_LINES], [$acx_long_lines_ok]) +AC_MSG_RESULT($acx_long_lines_ok) +]) + + +################################################ +# Check whether the compiler accepts preprocessor "# line-number" lines. +# ---------------------------------- +AC_DEFUN([ACX_F90_ACCEPTS_LINE_NUMBERS], +[ +AC_MSG_CHECKING([whether the compiler accepts "line-number" lines cast by the preprocessor]) +AC_COMPILE_IFELSE( + AC_LANG_PROGRAM( [], [# 1]), + [acx_f90_accepts_line_numbers_ok=yes + AC_DEFINE(F90_ACCEPTS_LINE_NUMBERS, 1, [compiler supports line-number lines])], + [acx_f90_accepts_line_numbers_ok=no]) +AC_SUBST(F90_ACCEPTS_LINE_NUMBERS, $acx_f90_accepts_line_numbers_ok) +AC_MSG_RESULT($acx_f90_accepts_line_numbers_ok) +] +) + +################################################ +# Check for the presence of a given function in Fortran. +# It substitutes AC_CHECK_FUNC, since the latter +# seems to fail with some autotools versions, due to a call to some broken +# version of AC_LANG_FUNC_LINK_TRY. +AC_DEFUN([ACX_FORTRAN_CHECK_FUNC], +[ +AC_MSG_CHECKING([for $1]) +AC_LANG_PUSH(Fortran)dnl +AC_LINK_IFELSE([AC_LANG_CALL([], [$1])], +[ +acx_fortran_check_func=yes +AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_$1]),1, [Define if the $1 function can be called from Fortran])], +[ +acx_fortran_check_func=no +])dnl +AC_LANG_POP(Fortran)dnl +AC_MSG_RESULT($acx_fortran_check_func) +]) + + +################################################ +# AC_LANG_FUNC_LINK_TRY(Fortran)(FUNCTION) +# ---------------------------------- +m4_define([AC_LANG_FUNC_LINK_TRY(Fortran)], +[AC_LANG_PROGRAM([], [call [$1]])]) + +################################################ +# Fortran preprocessing +# --------------------------- + +# like built-in AC_EGREP_CPP, only using FCCPP, .F90 file, and regular grep +# some cpp's will behave differently on .F90 and on .c files +# using $GREP or $EGREP would imply AC_REQUIRE(AC_PROG_GREP) which leads to this warning: +# configure.ac:189: *GNU* is m4_require'd but not m4_defun'd +AC_DEFUN([ACX_GREP_FCCPP],[ + AC_ARG_VAR(FCCPP, [Fortran preprocessor]) + + echo "$2" > conftest.F90 + + if (eval "$FCCPP conftest.F90") 2>&5 | + grep "$1" >/dev/null 2>&1; then : + $3 + else + $4 + fi + rm -f conftest* +]) + +AC_DEFUN([ACX_FCCPP],[ + # "gcc -E -x c" means treat the file as if it were C. For some reason, when gcc identifies the source + # as Fortran, it will not concatenate tokens in preprocessing, so we must trick it. + for FCCPP_base in "$FCCPP" "/lib/cpp" "$CPP" "$CPP -x c" "`which cpp`"; do + # cycle if blank + if test -z "$FCCPP_base"; then + continue + fi + + for FCCPP in "$FCCPP_base" "$FCCPP_base -ansi"; do + AC_MSG_CHECKING([whether $FCCPP is usable for Fortran preprocessing]) + acx_fpp_ok=yes + + ACX_GREP_FCCPP([anything], AC_LANG_PROGRAM([],[anything]), + [], [acx_fpp_ok=no; AC_MSG_RESULT([preprocessor cannot be run]); break]) + # very unlikely that adding -ansi will allow it to be run at all + + ACX_GREP_FCCPP([hi], AC_LANG_PROGRAM([],[ +#define ADD_I(x) x ## i +ADD_I(h)]), + [], [acx_fpp_ok=no; AC_MSG_RESULT([preprocessor does not concatenate tokens])]) + + # in Fortran this is string concatenation, must not be stripped + # some cpp's (e.g. icc -E -ansi) might actually insert a space between // too which is not acceptable + ACX_GREP_FCCPP([rout // ine], AC_LANG_PROGRAM([],[ +#define PUSH_SUB(x) x // ine +PUSH_SUB(rout)]), + [], [acx_fpp_ok=no; AC_MSG_RESULT([preprocessor mangles C++ style comment])]) + + if test x"$acx_fpp_ok" = xyes; then + AC_MSG_RESULT([yes]) + break + fi + done + if test x"$acx_fpp_ok" = xyes; then + break + fi + done + + if test x"$acx_fpp_ok" = xno; then + AC_MSG_ERROR([Could not find preprocessor usable for Fortran.]) + fi + + AC_SUBST(FCCPP) +]) diff --git a/libxc-2.2.0/m4/libtool.m4 b/libxc-2.2.0/m4/libtool.m4 new file mode 100644 index 000000000..f12cfdf0b --- /dev/null +++ b/libxc-2.2.0/m4/libtool.m4 @@ -0,0 +1,7992 @@ +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +]) + +# serial 57 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_CC_BASENAME(CC) +# ------------------- +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +m4_defun([_LT_CC_BASENAME], +[for cc_temp in $1""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl + +_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl +dnl +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_WITH_SYSROOT])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PREPARE_SED_QUOTE_VARS +# -------------------------- +# Define a few sed substitution that help us do robust quoting. +m4_defun([_LT_PREPARE_SED_QUOTE_VARS], +[# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' +]) + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from `configure', and `config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# `config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain="$ac_aux_dir/ltmain.sh" +])# _LT_PROG_LTMAIN + + +## ------------------------------------- ## +## Accumulate code for creating libtool. ## +## ------------------------------------- ## + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the `libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + +## ------------------------ ## +## FIXME: Eliminate VARNAME ## +## ------------------------ ## + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to `config.status' so that its +# declaration there will have the same value as in `configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags="_LT_TAGS"dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into `config.status', and then the shell code to quote escape them in +# for loops in `config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$[]1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +_LT_OUTPUT_LIBTOOL_INIT +]) + +# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) +# ------------------------------------ +# Generate a child script FILE with all initialization necessary to +# reuse the environment learned by the parent script, and make the +# file executable. If COMMENT is supplied, it is inserted after the +# `#!' sequence but before initialization text begins. After this +# macro, additional text can be appended to FILE to form the body of +# the child script. The macro ends with non-zero status if the +# file could not be fully written (such as if the disk is full). +m4_ifdef([AS_INIT_GENERATED], +[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], +[m4_defun([_LT_GENERATED_FILE_INIT], +[m4_require([AS_PREPARE])]dnl +[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl +[lt_write_fail=0 +cat >$1 <<_ASEOF || lt_write_fail=1 +#! $SHELL +# Generated by $as_me. +$2 +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$1 <<\_ASEOF || lt_write_fail=1 +AS_SHELL_SANITIZE +_AS_PREPARE +exec AS_MESSAGE_FD>&1 +_ASEOF +test $lt_write_fail = 0 && chmod +x $1[]dnl +m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], +[# Run this file to recreate a libtool stub with the current configuration.]) + +cat >>"$CONFIG_LT" <<\_LTEOF +lt_cl_silent=false +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +\`$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2011 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test $[#] != 0 +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try \`$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try \`$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +lt_cl_success=: +test "$silent" = yes && + lt_config_lt_args="$lt_config_lt_args --quiet" +exec AS_MESSAGE_LOG_FD>/dev/null +$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false +exec AS_MESSAGE_LOG_FD>>config.log +$lt_cl_success || AS_EXIT(1) +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +_LT_COPYING +_LT_LIBTOOL_TAGS + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + _LT_PROG_REPLACE_SHELLFNS + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Go], [_LT_LANG(GO)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +m4_ifndef([AC_PROG_GO], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_GO. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ +m4_defun([AC_PROG_GO], +[AC_LANG_PUSH(Go)dnl +AC_ARG_VAR([GOC], [Go compiler command])dnl +AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl +_AC_ARG_VAR_LDFLAGS()dnl +AC_CHECK_TOOL(GOC, gccgo) +if test -z "$GOC"; then + if test -n "$ac_tool_prefix"; then + AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) + fi +fi +if test -z "$GOC"; then + AC_CHECK_PROG(GOC, gccgo, gccgo, false) +fi +])#m4_defun +])#m4_ifndef + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([AC_PROG_GO], + [LT_LANG(GO)], + [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) +dnl AC_DEFUN([AC_LIBTOOL_RC], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test $_lt_result -eq 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS="$save_LDFLAGS" + ]) + + AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], + [lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD + echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD + $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD + echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD + $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[[012]]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES([TAG]) +# --------------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], + [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + m4_if([$1], [CXX], +[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) +# ---------------------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +# Store the results from the different compilers for each TAGNAME. +# Allow to override them for all tags through lt_cv_aix_libpath. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], + [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ + lt_aix_libpath_sed='[ + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }]' + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi],[]) + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" + fi + ]) + aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) +fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[m4_divert_text([M4SH-INIT], [$1 +])])# _LT_SHELL_INIT + + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Find how we can fake an echo command that does not interpret backslash. +# In particular, with Autoconf 2.60 or later we add some code to the start +# of the generated configure script which will find a shell with a builtin +# printf (which we can use as an echo command). +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +AC_MSG_CHECKING([how to print strings]) +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$[]1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +case "$ECHO" in + printf*) AC_MSG_RESULT([printf]) ;; + print*) AC_MSG_RESULT([print -r]) ;; + *) AC_MSG_RESULT([cat]) ;; +esac + +m4_ifdef([_AS_DETECT_SUGGESTED], +[_AS_DETECT_SUGGESTED([ + test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test "X`printf %s $ECHO`" = "X$ECHO" \ + || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) + +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_WITH_SYSROOT +# ---------------- +AC_DEFUN([_LT_WITH_SYSROOT], +[AC_MSG_CHECKING([for sysroot]) +AC_ARG_WITH([sysroot], +[ --with-sysroot[=DIR] Search for dependent libraries within DIR + (or the compiler's sysroot if not specified).], +[], [with_sysroot=no]) + +dnl lt_sysroot will always be passed unquoted. We quote it here +dnl in case the user passed a directory name. +lt_sysroot= +case ${with_sysroot} in #( + yes) + if test "$GCC" = yes; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + AC_MSG_RESULT([${with_sysroot}]) + AC_MSG_ERROR([The sysroot must be an absolute path.]) + ;; +esac + + AC_MSG_RESULT([${lt_sysroot:-no}]) +_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl +[dependent libraries, and in which our libraries should be installed.])]) + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD="${LD-ld}_sol2" + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" +])# _LT_ENABLE_LOCK + + +# _LT_PROG_AR +# ----------- +m4_defun([_LT_PROG_AR], +[AC_CHECK_TOOLS(AR, [ar], false) +: ${AR=ar} +: ${AR_FLAGS=cru} +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) + +AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], + [lt_cv_ar_at_file=no + AC_COMPILE_IFELSE([AC_LANG_PROGRAM], + [echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([lt_ar_try]) + if test "$ac_status" -eq 0; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + AC_TRY_EVAL([lt_ar_try]) + if test "$ac_status" -ne 0; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + ]) + ]) + +if test "x$lt_cv_ar_at_file" = xno; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi +_LT_DECL([], [archiver_list_spec], [1], + [How to feed a file listing to the archiver]) +])# _LT_PROG_AR + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[_LT_PROG_AR + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +_LT_DECL([], [lock_old_archive_extraction], [0], + [Whether to use a lock for old archive extraction]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test x"[$]$2" = xyes; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links="nottested" +if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", + [Define to the sub-directory in which libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || + test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[[4-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[23]].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[[3-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], + [lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [lt_cv_shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + ]) + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Add ABI-specific directories to the system library path. + sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" + + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [install_override_mode], [1], + [Permission mode override for installation of shared libraries]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], + [Run-time system search path for libraries]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program which can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program which can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PROG_ECHO_BACKSLASH])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method = "file_magic"]) +_LT_DECL([], [file_magic_glob], [1], + [How to find potential files when deplibs_check_method = "file_magic"]) +_LT_DECL([], [want_nocaseglob], [1], + [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi]) +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + AC_SUBST([DUMPBIN]) + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + +# _LT_CHECK_SHAREDLIB_FROM_LINKLIB +# -------------------------------- +# how to determine the name of the shared library +# associated with a specific link library. +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +m4_require([_LT_DECL_DLLTOOL]) +AC_CACHE_CHECK([how to associate runtime and link libraries], +lt_cv_sharedlib_from_linklib_cmd, +[lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh + # decide which to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd="$ECHO" + ;; +esac +]) +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + +_LT_DECL([], [sharedlib_from_linklib_cmd], [1], + [Command to associate shared and link libraries]) +])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB + + +# _LT_PATH_MANIFEST_TOOL +# ---------------------- +# locate the manifest tool +m4_defun([_LT_PATH_MANIFEST_TOOL], +[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], + [lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&AS_MESSAGE_LOG_FD + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest*]) +if test "x$lt_cv_path_mainfest_tool" != xyes; then + MANIFEST_TOOL=: +fi +_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl +])# _LT_PATH_MANIFEST_TOOL + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; + *) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; + esac + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT@&t@_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT@&t@_DLSYM_CONST +#else +# define LT@&t@_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT@&t@_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +_LT_DECL([], [nm_file_list_spec], [1], + [Specify filename containing input files for $NM]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' + if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + *Sun\ F* | *Sun*Fortran*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + *Intel*\ [[CF]]*Compiler*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + *Portland\ Group*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac + +AC_CACHE_CHECK([for $compiler option to produce PIC], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global defined + # symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + ;; + esac + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; + *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + esac + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + m4_if($1, [], [ + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + _LT_LINKER_OPTION([if $CC understands -b], + _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], + [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) + ;; + esac + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], + [lt_cv_irix_exported_symbol], + [save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + AC_LINK_IFELSE( + [AC_LANG_SOURCE( + [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], + [C++], [[int foo (void) { return 0; }]], + [Fortran 77], [[ + subroutine foo + end]], + [Fortran], [[ + subroutine foo + end]])])], + [lt_cv_irix_exported_symbol=yes], + [lt_cv_irix_exported_symbol=no]) + LDFLAGS="$save_LDFLAGS"]) + if test "$lt_cv_irix_exported_symbol" = yes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_CACHE_CHECK([whether -lc should be explicitly linked in], + [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), + [$RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + ]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting ${shlibpath_var} if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [postlink_cmds], [2], + [Commands necessary for finishing linking programs]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report which library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC="$lt_save_CC" +])# _LT_LANG_C_CONFIG + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + gnu*) + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ + '"$_LT_TAGVAR(old_archive_cmds, $1)" + _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ + '"$_LT_TAGVAR(reload_cmds, $1)" + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + + _LT_TAGVAR(GCC, $1)="$GXX" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_FUNC_STRIPNAME_CNF +# ---------------------- +# func_stripname_cnf prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# +# This function is identical to the (non-XSI) version of func_stripname, +# except this one can be used by m4 code that may be executed by configure, +# rather than the libtool script. +m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl +AC_REQUIRE([_LT_DECL_SED]) +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) +func_stripname_cnf () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname_cnf +])# _LT_FUNC_STRIPNAME_CNF + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF +package foo +func foo() { +} +_LT_EOF +]) + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case ${prev}${p} in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test "$pre_test_object_deps_done" = no; then + case ${prev} in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)="${prev}${p}" + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)="$p" + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)="$p" + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC* | sunCC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_LANG_PUSH(Fortran 77) +if test -z "$F77" || test "X$F77" = "Xno"; then + _lt_disable_F77=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_F77" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${F77-"f77"} + CFLAGS=$FFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$G77" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" + CFLAGS="$lt_save_CFLAGS" +fi # test "$_lt_disable_F77" != yes + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_LANG_PUSH(Fortran) + +if test -z "$FC" || test "X$FC" = "Xno"; then + _lt_disable_FC=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_FC" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${FC-"f95"} + CFLAGS=$FCFLAGS + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test "$_lt_disable_FC" != yes + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +CFLAGS=$GCJFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)="$LD" +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_GO_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Go compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_GO_CONFIG], +[AC_REQUIRE([LT_PROG_GO])dnl +AC_LANG_SAVE + +# Source file extension for Go test sources. +ac_ext=go + +# Object file extension for compiled Go test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="package main; func main() { }" + +# Code to be used in simple link tests +lt_simple_link_test_code='package main; func main() { }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GOC-"gccgo"} +CFLAGS=$GOFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)="$LD" +_LT_CC_BASENAME([$compiler]) + +# Go did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GO_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +CFLAGS= +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_GO +# ---------- +AC_DEFUN([LT_PROG_GO], +[AC_CHECK_TOOL(GOC, gccgo,) +]) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + +# _LT_DECL_DLLTOOL +# ---------------- +# Ensure DLLTOOL variable is set. +m4_defun([_LT_DECL_DLLTOOL], +[AC_CHECK_TOOL(DLLTOOL, dlltool, false) +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) +AC_SUBST([DLLTOOL]) +]) + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,b/c, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +AC_MSG_RESULT([$xsi_shell]) +_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) + +AC_MSG_CHECKING([whether the shell understands "+="]) +lt_shell_append=no +( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +AC_MSG_RESULT([$lt_shell_append]) +_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) +# ------------------------------------------------------ +# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and +# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. +m4_defun([_LT_PROG_FUNCTION_REPLACE], +[dnl { +sed -e '/^$1 ()$/,/^} # $1 /c\ +$1 ()\ +{\ +m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) +} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: +]) + + +# _LT_PROG_REPLACE_SHELLFNS +# ------------------------- +# Replace existing portable implementations of several shell functions with +# equivalent extended shell implementations where those features are available.. +m4_defun([_LT_PROG_REPLACE_SHELLFNS], +[if test x"$xsi_shell" = xyes; then + _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac]) + + _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl + func_basename_result="${1##*/}"]) + + _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}"]) + + _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"}]) + + _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl + func_split_long_opt_name=${1%%=*} + func_split_long_opt_arg=${1#*=}]) + + _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl + func_split_short_opt_arg=${1#??} + func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) + + _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac]) + + _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) + + _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) + + _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) +fi + +if test x"$lt_shell_append" = xyes; then + _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) + + _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl + func_quote_for_eval "${2}" +dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ + eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) + + # Save a `func_append' function call where possible by direct use of '+=' + sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +else + # Save a `func_append' function call even when '+=' is not available + sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +fi + +if test x"$_lt_function_replace_fail" = x":"; then + AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) +fi +]) + +# _LT_PATH_CONVERSION_FUNCTIONS +# ----------------------------- +# Determine which file name conversion functions should be used by +# func_to_host_file (and, implicitly, by func_to_host_path). These are needed +# for certain cross-compile configurations and native mingw. +m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_MSG_CHECKING([how to convert $build file names to $host format]) +AC_CACHE_VAL(lt_cv_to_host_file_cmd, +[case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac +]) +to_host_file_cmd=$lt_cv_to_host_file_cmd +AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) +_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], + [0], [convert $build file names to $host format])dnl + +AC_MSG_CHECKING([how to convert $build file names to toolchain format]) +AC_CACHE_VAL(lt_cv_to_tool_file_cmd, +[#assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac +]) +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) +_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], + [0], [convert $build files to toolchain format])dnl +])# _LT_PATH_CONVERSION_FUNCTIONS diff --git a/libxc-2.2.0/m4/ltoptions.m4 b/libxc-2.2.0/m4/ltoptions.m4 new file mode 100644 index 000000000..5d9acd8e2 --- /dev/null +++ b/libxc-2.2.0/m4/ltoptions.m4 @@ -0,0 +1,384 @@ +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 7 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option `$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl `shared' nor `disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + ]) +])# _LT_SET_OPTIONS + + +## --------------------------------- ## +## Macros to handle LT_INIT options. ## +## --------------------------------- ## + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [1], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the `shared' and +# `disable-shared' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the `static' and +# `disable-static' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the `fast-install' +# and `disable-fast-install' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the `pic-only' and `no-pic' +# LT_INIT options. +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for lt_pkg in $withval; do + IFS="$lt_save_ifs" + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [pic_mode=default]) + +test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + +## ----------------- ## +## LTDL_INIT Options ## +## ----------------- ## + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/libxc-2.2.0/m4/ltsugar.m4 b/libxc-2.2.0/m4/ltsugar.m4 new file mode 100644 index 000000000..9000a057d --- /dev/null +++ b/libxc-2.2.0/m4/ltsugar.m4 @@ -0,0 +1,123 @@ +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59 which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) diff --git a/libxc-2.2.0/m4/ltversion.m4 b/libxc-2.2.0/m4/ltversion.m4 new file mode 100644 index 000000000..07a8602d4 --- /dev/null +++ b/libxc-2.2.0/m4/ltversion.m4 @@ -0,0 +1,23 @@ +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# @configure_input@ + +# serial 3337 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.4.2]) +m4_define([LT_PACKAGE_REVISION], [1.3337]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.4.2' +macro_revision='1.3337' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) diff --git a/libxc-2.2.0/m4/lt~obsolete.m4 b/libxc-2.2.0/m4/lt~obsolete.m4 new file mode 100644 index 000000000..c573da90c --- /dev/null +++ b/libxc-2.2.0/m4/lt~obsolete.m4 @@ -0,0 +1,98 @@ +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 5 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) +m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) +m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) +m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) +m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) +m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) +m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) diff --git a/libxc-2.2.0/missing b/libxc-2.2.0/missing new file mode 100755 index 000000000..cdea51493 --- /dev/null +++ b/libxc-2.2.0/missing @@ -0,0 +1,215 @@ +#! /bin/sh +# Common wrapper for a few potentially missing GNU programs. + +scriptversion=2012-06-26.16; # UTC + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Originally written by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try '$0 --help' for more information" + exit 1 +fi + +case $1 in + + --is-lightweight) + # Used by our autoconf macros to check whether the available missing + # script is modern enough. + exit 0 + ;; + + --run) + # Back-compat with the calling convention used by older automake. + shift + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due +to PROGRAM being missing or too old. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + +Supported PROGRAM values: + aclocal autoconf autoheader autom4te automake makeinfo + bison yacc flex lex help2man + +Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and +'g' are ignored when checking the name. + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: unknown '$1' option" + echo 1>&2 "Try '$0 --help' for more information" + exit 1 + ;; + +esac + +# Run the given program, remember its exit status. +"$@"; st=$? + +# If it succeeded, we are done. +test $st -eq 0 && exit 0 + +# Also exit now if we it failed (or wasn't found), and '--version' was +# passed; such an option is passed most likely to detect whether the +# program is present and works. +case $2 in --version|--help) exit $st;; esac + +# Exit code 63 means version mismatch. This often happens when the user +# tries to use an ancient version of a tool on a file that requires a +# minimum version. +if test $st -eq 63; then + msg="probably too old" +elif test $st -eq 127; then + # Program was missing. + msg="missing on your system" +else + # Program was found and executed, but failed. Give up. + exit $st +fi + +perl_URL=http://www.perl.org/ +flex_URL=http://flex.sourceforge.net/ +gnu_software_URL=http://www.gnu.org/software + +program_details () +{ + case $1 in + aclocal|automake) + echo "The '$1' program is part of the GNU Automake package:" + echo "<$gnu_software_URL/automake>" + echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/autoconf>" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + autoconf|autom4te|autoheader) + echo "The '$1' program is part of the GNU Autoconf package:" + echo "<$gnu_software_URL/autoconf/>" + echo "It also requires GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + esac +} + +give_advice () +{ + # Normalize program name to check for. + normalized_program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + + printf '%s\n' "'$1' is $msg." + + configure_deps="'configure.ac' or m4 files included by 'configure.ac'" + case $normalized_program in + autoconf*) + echo "You should only need it if you modified 'configure.ac'," + echo "or m4 files included by it." + program_details 'autoconf' + ;; + autoheader*) + echo "You should only need it if you modified 'acconfig.h' or" + echo "$configure_deps." + program_details 'autoheader' + ;; + automake*) + echo "You should only need it if you modified 'Makefile.am' or" + echo "$configure_deps." + program_details 'automake' + ;; + aclocal*) + echo "You should only need it if you modified 'acinclude.m4' or" + echo "$configure_deps." + program_details 'aclocal' + ;; + autom4te*) + echo "You might have modified some maintainer files that require" + echo "the 'automa4te' program to be rebuilt." + program_details 'autom4te' + ;; + bison*|yacc*) + echo "You should only need it if you modified a '.y' file." + echo "You may want to install the GNU Bison package:" + echo "<$gnu_software_URL/bison/>" + ;; + lex*|flex*) + echo "You should only need it if you modified a '.l' file." + echo "You may want to install the Fast Lexical Analyzer package:" + echo "<$flex_URL>" + ;; + help2man*) + echo "You should only need it if you modified a dependency" \ + "of a man page." + echo "You may want to install the GNU Help2man package:" + echo "<$gnu_software_URL/help2man/>" + ;; + makeinfo*) + echo "You should only need it if you modified a '.texi' file, or" + echo "any other file indirectly affecting the aspect of the manual." + echo "You might want to install the Texinfo package:" + echo "<$gnu_software_URL/texinfo/>" + echo "The spurious makeinfo call might also be the consequence of" + echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" + echo "want to install GNU make:" + echo "<$gnu_software_URL/make/>" + ;; + *) + echo "You might have modified some files without having the proper" + echo "tools for further handling them. Check the 'README' file, it" + echo "often tells you about the needed prerequisites for installing" + echo "this package. You may also peek at any GNU archive site, in" + echo "case some other package contains this missing '$1' program." + ;; + esac +} + +give_advice "$1" | sed -e '1s/^/WARNING: /' \ + -e '2,$s/^/ /' >&2 + +# Propagate the correct exit status (expected to be 127 for a program +# not found, 63 for a program that failed due to version mismatch). +exit $st + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/libxc-2.2.0/src/Makefile.am b/libxc-2.2.0/src/Makefile.am new file mode 100644 index 000000000..273de9983 --- /dev/null +++ b/libxc-2.2.0/src/Makefile.am @@ -0,0 +1,175 @@ +## Process this file with automake to produce Makefile.in + +## Copyright (C) 2002 M. Marques, A. Castro, A. Rubio, G. Bertsch +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU Lesser General Public License as published by +## the Free Software Foundation; either version 2, or (at your option) +## any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. +## +## $Id: Makefile.am 2433 2006-09-28 11:06:54Z marques $ + +bin_PROGRAMS = xc-info + +xc_info_SOURCES = xc-info.c +xc_info_LDFLAGS = -lm +xc_info_LDADD = libxc.la + +lib_LTLIBRARIES = libxc.la + +libxc_la_FUNC_SOURCES = \ + special_functions.c bessel.c expint_e1.c integrate.c util.c mix_func.c functionals.c \ + version.c \ + lda.c lda_x.c lda_x_1d.c lda_x_2d.c \ + lda_c_wigner.c lda_c_gombas.c lda_c_rpa.c lda_c_hl.c \ + lda_c_vwn.c lda_c_pz.c lda_c_pw.c lda_c_ml1.c lda_c_rc04.c lda_xc_teter93.c \ + lda_c_1d_csc.c lda_c_1d_loos.c \ + lda_c_2d_amgb.c lda_c_2d_prm.c stoll.c \ + lda_k_tf.c \ + gga.c \ + gga_x_lg93.c gga_x_pbe.c gga_x_rpbe.c gga_x_pbea.c gga_x_mpbe.c gga_x_herman.c gga_x_b86.c gga_x_b86_mgc.c \ + gga_x_b88.c gga_x_g96.c gga_x_pw86.c gga_x_pw91.c gga_x_optx.c gga_x_airy.c gga_x_c09x.c \ + gga_x_dk87.c gga_x_ft97.c gga_x_wc.c gga_x_am05.c gga_x_bayesian.c gga_x_kt.c gga_x_htbs.c \ + gga_c_pbe.c gga_c_lyp.c gga_c_p86.c gga_c_pw91.c gga_c_am05.c gga_c_lm.c gga_c_wl.c gga_c_wi.c \ + gga_x_lb.c gga_xc_b97.c gga_xc_edf1.c gga_xc_1w.c gga_c_optc.c gga_c_tca.c gga_x_bpccac.c \ + gga_x_sogga11.c gga_c_sogga11.c gga_xc_th.c gga_x_wpbeh.c gga_x_hjs.c gga_x_ityh.c gga_x_sfat.c \ + gga_x_ak13.c gga_x_q2d.c gga_c_q2d.c \ + gga_x_ssb_sw.c gga_c_ft97.c gga_c_op.c gga_x_n12.c gga_x_lv_rpw86.c \ + gga_x_2d_b86.c gga_x_2d_b86_mgc.c gga_x_2d_b88.c gga_x_2d_pbe.c \ + gga_k_tflw.c gga_k_pearson.c gga_k_ol1.c gga_k_ol2.c gga_k_dk.c gga_k_meyer.c \ + gga_x_vmt.c gga_xc_oblyp_d.c \ + hyb_gga_xc_b3lyp.c hyb_gga_xc_o3lyp.c hyb_gga_xc_pbeh.c hyb_gga_xc_b1wc.c \ + hyb_gga_xc_b97.c hyb_gga_xc_hse.c hyb_gga_xc_cam_b3lyp.c hyb_gga_xc_camy_blyp.c \ + mgga.c \ + mgga_x_lta.c mgga_x_tpss.c mgga_x_br89.c mgga_x_gvt4.c mgga_x_m06l.c mgga_x_tau_hcth.c \ + mgga_x_2d_prhg07.c mgga_x_pkzb.c mgga_x_m05.c mgga_x_m08.c mgga_x_ms.c mgga_x_mn12.c mgga_x_mk00.c \ + mgga_c_vsxc.c mgga_c_pkzb.c mgga_c_bc95.c mgga_c_m08.c mgga_c_cc06.c mgga_c_cs.c mgga_xc_otpss_d.c \ + hyb_mgga_xc_m05.c hyb_mgga_xc_tpssh.c + +libxc_la_FUNC_SINGLE_SOURCES = $(libxc_la_FUNC_SOURCES:.c=_s.c) + +libxc_la_SOURCES = $(libxc_la_FUNC_SOURCES) +libxc_la_LDFLAGS = -version-info $(XC_LT_VERSION) + +if COMPILE_SINGLE + nodist_libxc_la_SOURCES = $(libxc_la_FUNC_SINGLE_SOURCES) +endif + +if COMPILE_FORTRAN + lib_LTLIBRARIES += libxcf90.la + + libxcf90_la_SOURCES = xc_f.c libxc_funcs.f90 libxc.f90 +if COMPILE_SINGLE + nodist_libxcf90_la_SOURCES = xc_f_s.c libxc_s.f90 +endif + + # libtool stuff + libxcf90_la_LDFLAGS = -version-info $(XC_LT_VERSION) + libxcf90_la_LIBADD = libxc.la + + # this is a hack to go around buggy libtool/automake versions + libxcf90_la_LIBTOOLFLAGS = --tag=F77 +endif + +# this is a hack to go around buggy libtool/automake versions +LTFCCOMPILE = $(LIBTOOL) --mode=compile --tag=F77 $(FC) $(AM_FCFLAGS) $(FCFLAGS) +FCLINK = $(LIBTOOL) --mode=link --tag=F77 $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ + +dist_noinst_SCRIPTS = get_funcs.pl + +noinst_HEADERS = \ + string_f.h util.h work_lda.c \ + work_gga_x.c work_gga_c.c \ + work_mgga_x.c work_mgga_c.c \ + libxc_master.F90 +include_HEADERS = xc.h xc_config.h xc_unconfig.h +nodist_include_HEADERS = xc_funcs.h + +if COMPILE_SINGLE + include_HEADERS += xc_s.h +endif + +BUILT_SOURCES = xc_funcs.h + +## declare fortran modules so they are installed +if COMPILE_FORTRAN + +if F90_MOD_UPPERCASE + LIBFUNCMOD = LIBXC_FUNCS_M.@ax_cv_f90_modext@ +else + LIBFUNCMOD = libxc_funcs_m.@ax_cv_f90_modext@ +endif +nodist_include_HEADERS += $(LIBFUNCMOD) + +# Double precision modules are always compiled +if F90_MOD_UPPERCASE + XCLIBMODS = XC_F90_LIB_M.@ax_cv_f90_modext@ XC_F90_TYPES_M.@ax_cv_f90_modext@ +else + XCLIBMODS = xc_f90_lib_m.@ax_cv_f90_modext@ xc_f90_types_m.@ax_cv_f90_modext@ +endif +nodist_include_HEADERS += $(XCLIBMODS) + +if COMPILE_SINGLE + +if F90_MOD_UPPERCASE + XCLIBMODS_S = XC_S_F90_LIB_M.@ax_cv_f90_modext@ XC_S_F90_TYPES_M.@ax_cv_f90_modext@ +else + XCLIBMODS_S = xc_s_f90_lib_m.@ax_cv_f90_modext@ xc_s_f90_types_m.@ax_cv_f90_modext@ +endif +nodist_include_HEADERS += $(XCLIBMODS_S) + +endif # COMPILE_SINGLE + +endif # COMPILE_FORTRAN + +SUFFIXES = _s.c +.c_s.c: + @CPP@ -D SINGLE_PRECISION @CPPFLAGS@ $(INCLUDES) $(DEFAULT_INCLUDES) $(AM_CPPFLAGS) $< > $*_s.c + +CLEANFILES = *~ *.bak *.mod *.il *.d *.pc* ifc* funcs_*.c funcs.h \ + libxc.f90 libxc_funcs.f90 xc_funcs.h *_s.c *_s.f90 + +xc_funcs.h libxc_funcs.f90 funcs_lda.c funcs_gga.c funcs_hyb_gga.c funcs_mgga.c funcs_hyb_mgga.c funcs_key.c: get_funcs.pl + $(srcdir)/get_funcs.pl $(srcdir) $(top_builddir) + +LTPREF = $(subst xc_f.lo,,$(firstword $(am_libxcf90_la_OBJECTS))) +# Surprisingly, libtool/automake do not seem to provide a macro or variable for what the object names will be, +# so we have to extract it ourselves. LTPREF=libxcf90_la-, or blank for older libtool/automake versions. +# Produces these warnings on some systems. Does not seem to matter. +#src/Makefile.am:140: subst xc_f.lo,,$(firstword $(am_libxcf90_la_OBJECTS: non-POSIX variable name +#src/Makefile.am:140: (probably a GNU make extension) + +$(LIBFUNCMOD) : $(LTPREF)libxc_funcs.lo + +libxc.f90 : libxc_master.F90 + @FCCPP@ @CPPFLAGS@ $(AM_CPPFLAGS) $(srcdir)/libxc_master.F90 > $(top_builddir)/src/libxc.f90 + @if [ "@F90_ACCEPTS_LINE_NUMBERS@" = "no" ]; then \ + grep -v "^#" $(top_builddir)/src/libxc.f90 > $(top_builddir)/src/libxc.f91; \ + mv -f $(top_builddir)/src/libxc.f91 $(top_builddir)/src/libxc.f90; \ + fi +libxc_s.f90 : libxc_master.F90 + @FCCPP@ -D SINGLE_PRECISION @CPPFLAGS@ $(AM_CPPFLAGS) $(srcdir)/libxc_master.F90 > $(top_builddir)/src/libxc_s.f90 + @if [ "@F90_ACCEPTS_LINE_NUMBERS@" = "no" ]; then \ + grep -v "^#" $(top_builddir)/src/libxc_s.f90 > $(top_builddir)/src/libxc_s.f91; \ + mv -f $(top_builddir)/src/libxc_s.f91 $(top_builddir)/src/libxc_s.f90; \ + fi + +$(LTPREF)libxc.lo : $(LTPREF)libxc.o +$(LTPREF)libxc_s.lo: $(LTPREF)libxc_s.o + +$(LTPREF)libxc.o : $(LIBFUNCMOD) +$(LTPREF)libxc_s.o : $(LIBFUNCMOD) + +$(XCLIBMODS) : $(LTPREF)libxc.lo +$(XCLIBMODS_S) : $(LTPREF)libxc_s.lo diff --git a/libxc-2.2.0/src/Makefile.in b/libxc-2.2.0/src/Makefile.in new file mode 100644 index 000000000..7f07826d7 --- /dev/null +++ b/libxc-2.2.0/src/Makefile.in @@ -0,0 +1,1266 @@ +# Makefile.in generated by automake 1.13.4 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + + + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +bin_PROGRAMS = xc-info$(EXEEXT) +@COMPILE_FORTRAN_TRUE@am__append_1 = libxcf90.la +@COMPILE_SINGLE_TRUE@am__append_2 = xc_s.h +@COMPILE_FORTRAN_TRUE@am__append_3 = $(LIBFUNCMOD) $(XCLIBMODS) +@COMPILE_FORTRAN_TRUE@@COMPILE_SINGLE_TRUE@am__append_4 = $(XCLIBMODS_S) +subdir = src +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(dist_noinst_SCRIPTS) $(top_srcdir)/depcomp \ + $(am__include_HEADERS_DIST) $(noinst_HEADERS) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ac_prog_sed.m4 \ + $(top_srcdir)/m4/ax_f90_module_extension.m4 \ + $(top_srcdir)/m4/fc_integer.m4 $(top_srcdir)/m4/fcflags.m4 \ + $(top_srcdir)/m4/fortran.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \ + "$(DESTDIR)$(includedir)" "$(DESTDIR)$(includedir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +libxc_la_LIBADD = +am__objects_1 = special_functions.lo bessel.lo expint_e1.lo \ + integrate.lo util.lo mix_func.lo functionals.lo version.lo \ + lda.lo lda_x.lo lda_x_1d.lo lda_x_2d.lo lda_c_wigner.lo \ + lda_c_gombas.lo lda_c_rpa.lo lda_c_hl.lo lda_c_vwn.lo \ + lda_c_pz.lo lda_c_pw.lo lda_c_ml1.lo lda_c_rc04.lo \ + lda_xc_teter93.lo lda_c_1d_csc.lo lda_c_1d_loos.lo \ + lda_c_2d_amgb.lo lda_c_2d_prm.lo stoll.lo lda_k_tf.lo gga.lo \ + gga_x_lg93.lo gga_x_pbe.lo gga_x_rpbe.lo gga_x_pbea.lo \ + gga_x_mpbe.lo gga_x_herman.lo gga_x_b86.lo gga_x_b86_mgc.lo \ + gga_x_b88.lo gga_x_g96.lo gga_x_pw86.lo gga_x_pw91.lo \ + gga_x_optx.lo gga_x_airy.lo gga_x_c09x.lo gga_x_dk87.lo \ + gga_x_ft97.lo gga_x_wc.lo gga_x_am05.lo gga_x_bayesian.lo \ + gga_x_kt.lo gga_x_htbs.lo gga_c_pbe.lo gga_c_lyp.lo \ + gga_c_p86.lo gga_c_pw91.lo gga_c_am05.lo gga_c_lm.lo \ + gga_c_wl.lo gga_c_wi.lo gga_x_lb.lo gga_xc_b97.lo \ + gga_xc_edf1.lo gga_xc_1w.lo gga_c_optc.lo gga_c_tca.lo \ + gga_x_bpccac.lo gga_x_sogga11.lo gga_c_sogga11.lo gga_xc_th.lo \ + gga_x_wpbeh.lo gga_x_hjs.lo gga_x_ityh.lo gga_x_sfat.lo \ + gga_x_ak13.lo gga_x_q2d.lo gga_c_q2d.lo gga_x_ssb_sw.lo \ + gga_c_ft97.lo gga_c_op.lo gga_x_n12.lo gga_x_lv_rpw86.lo \ + gga_x_2d_b86.lo gga_x_2d_b86_mgc.lo gga_x_2d_b88.lo \ + gga_x_2d_pbe.lo gga_k_tflw.lo gga_k_pearson.lo gga_k_ol1.lo \ + gga_k_ol2.lo gga_k_dk.lo gga_k_meyer.lo gga_x_vmt.lo \ + gga_xc_oblyp_d.lo hyb_gga_xc_b3lyp.lo hyb_gga_xc_o3lyp.lo \ + hyb_gga_xc_pbeh.lo hyb_gga_xc_b1wc.lo hyb_gga_xc_b97.lo \ + hyb_gga_xc_hse.lo hyb_gga_xc_cam_b3lyp.lo \ + hyb_gga_xc_camy_blyp.lo mgga.lo mgga_x_lta.lo mgga_x_tpss.lo \ + mgga_x_br89.lo mgga_x_gvt4.lo mgga_x_m06l.lo \ + mgga_x_tau_hcth.lo mgga_x_2d_prhg07.lo mgga_x_pkzb.lo \ + mgga_x_m05.lo mgga_x_m08.lo mgga_x_ms.lo mgga_x_mn12.lo \ + mgga_x_mk00.lo mgga_c_vsxc.lo mgga_c_pkzb.lo mgga_c_bc95.lo \ + mgga_c_m08.lo mgga_c_cc06.lo mgga_c_cs.lo mgga_xc_otpss_d.lo \ + hyb_mgga_xc_m05.lo hyb_mgga_xc_tpssh.lo +am_libxc_la_OBJECTS = $(am__objects_1) +am__objects_2 = special_functions_s.lo bessel_s.lo expint_e1_s.lo \ + integrate_s.lo util_s.lo mix_func_s.lo functionals_s.lo \ + version_s.lo lda_s.lo lda_x_s.lo lda_x_1d_s.lo lda_x_2d_s.lo \ + lda_c_wigner_s.lo lda_c_gombas_s.lo lda_c_rpa_s.lo \ + lda_c_hl_s.lo lda_c_vwn_s.lo lda_c_pz_s.lo lda_c_pw_s.lo \ + lda_c_ml1_s.lo lda_c_rc04_s.lo lda_xc_teter93_s.lo \ + lda_c_1d_csc_s.lo lda_c_1d_loos_s.lo lda_c_2d_amgb_s.lo \ + lda_c_2d_prm_s.lo stoll_s.lo lda_k_tf_s.lo gga_s.lo \ + gga_x_lg93_s.lo gga_x_pbe_s.lo gga_x_rpbe_s.lo gga_x_pbea_s.lo \ + gga_x_mpbe_s.lo gga_x_herman_s.lo gga_x_b86_s.lo \ + gga_x_b86_mgc_s.lo gga_x_b88_s.lo gga_x_g96_s.lo \ + gga_x_pw86_s.lo gga_x_pw91_s.lo gga_x_optx_s.lo \ + gga_x_airy_s.lo gga_x_c09x_s.lo gga_x_dk87_s.lo \ + gga_x_ft97_s.lo gga_x_wc_s.lo gga_x_am05_s.lo \ + gga_x_bayesian_s.lo gga_x_kt_s.lo gga_x_htbs_s.lo \ + gga_c_pbe_s.lo gga_c_lyp_s.lo gga_c_p86_s.lo gga_c_pw91_s.lo \ + gga_c_am05_s.lo gga_c_lm_s.lo gga_c_wl_s.lo gga_c_wi_s.lo \ + gga_x_lb_s.lo gga_xc_b97_s.lo gga_xc_edf1_s.lo gga_xc_1w_s.lo \ + gga_c_optc_s.lo gga_c_tca_s.lo gga_x_bpccac_s.lo \ + gga_x_sogga11_s.lo gga_c_sogga11_s.lo gga_xc_th_s.lo \ + gga_x_wpbeh_s.lo gga_x_hjs_s.lo gga_x_ityh_s.lo \ + gga_x_sfat_s.lo gga_x_ak13_s.lo gga_x_q2d_s.lo gga_c_q2d_s.lo \ + gga_x_ssb_sw_s.lo gga_c_ft97_s.lo gga_c_op_s.lo gga_x_n12_s.lo \ + gga_x_lv_rpw86_s.lo gga_x_2d_b86_s.lo gga_x_2d_b86_mgc_s.lo \ + gga_x_2d_b88_s.lo gga_x_2d_pbe_s.lo gga_k_tflw_s.lo \ + gga_k_pearson_s.lo gga_k_ol1_s.lo gga_k_ol2_s.lo gga_k_dk_s.lo \ + gga_k_meyer_s.lo gga_x_vmt_s.lo gga_xc_oblyp_d_s.lo \ + hyb_gga_xc_b3lyp_s.lo hyb_gga_xc_o3lyp_s.lo \ + hyb_gga_xc_pbeh_s.lo hyb_gga_xc_b1wc_s.lo hyb_gga_xc_b97_s.lo \ + hyb_gga_xc_hse_s.lo hyb_gga_xc_cam_b3lyp_s.lo \ + hyb_gga_xc_camy_blyp_s.lo mgga_s.lo mgga_x_lta_s.lo \ + mgga_x_tpss_s.lo mgga_x_br89_s.lo mgga_x_gvt4_s.lo \ + mgga_x_m06l_s.lo mgga_x_tau_hcth_s.lo mgga_x_2d_prhg07_s.lo \ + mgga_x_pkzb_s.lo mgga_x_m05_s.lo mgga_x_m08_s.lo \ + mgga_x_ms_s.lo mgga_x_mn12_s.lo mgga_x_mk00_s.lo \ + mgga_c_vsxc_s.lo mgga_c_pkzb_s.lo mgga_c_bc95_s.lo \ + mgga_c_m08_s.lo mgga_c_cc06_s.lo mgga_c_cs_s.lo \ + mgga_xc_otpss_d_s.lo hyb_mgga_xc_m05_s.lo \ + hyb_mgga_xc_tpssh_s.lo +am__objects_3 = $(am__objects_2) +@COMPILE_SINGLE_TRUE@nodist_libxc_la_OBJECTS = $(am__objects_3) +libxc_la_OBJECTS = $(am_libxc_la_OBJECTS) $(nodist_libxc_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +libxc_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libxc_la_LDFLAGS) $(LDFLAGS) -o $@ +@COMPILE_FORTRAN_TRUE@libxcf90_la_DEPENDENCIES = libxc.la +am__libxcf90_la_SOURCES_DIST = xc_f.c libxc_funcs.f90 libxc.f90 +@COMPILE_FORTRAN_TRUE@am_libxcf90_la_OBJECTS = libxcf90_la-xc_f.lo \ +@COMPILE_FORTRAN_TRUE@ libxcf90_la-libxc_funcs.lo \ +@COMPILE_FORTRAN_TRUE@ libxcf90_la-libxc.lo +@COMPILE_FORTRAN_TRUE@@COMPILE_SINGLE_TRUE@nodist_libxcf90_la_OBJECTS = libxcf90_la-xc_f_s.lo \ +@COMPILE_FORTRAN_TRUE@@COMPILE_SINGLE_TRUE@ libxcf90_la-libxc_s.lo +libxcf90_la_OBJECTS = $(am_libxcf90_la_OBJECTS) \ + $(nodist_libxcf90_la_OBJECTS) +libxcf90_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=FC \ + $(libxcf90_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \ + $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) $(libxcf90_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +@COMPILE_FORTRAN_TRUE@am_libxcf90_la_rpath = -rpath $(libdir) +PROGRAMS = $(bin_PROGRAMS) +am_xc_info_OBJECTS = xc-info.$(OBJEXT) +xc_info_OBJECTS = $(am_xc_info_OBJECTS) +xc_info_DEPENDENCIES = libxc.la +xc_info_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(xc_info_LDFLAGS) $(LDFLAGS) -o $@ +SCRIPTS = $(dist_noinst_SCRIPTS) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +FCCOMPILE = $(FC) $(AM_FCFLAGS) $(FCFLAGS) +AM_V_FC = $(am__v_FC_@AM_V@) +am__v_FC_ = $(am__v_FC_@AM_DEFAULT_V@) +am__v_FC_0 = @echo " FC " $@; +am__v_FC_1 = +FCLD = $(FC) +AM_V_FCLD = $(am__v_FCLD_@AM_V@) +am__v_FCLD_ = $(am__v_FCLD_@AM_DEFAULT_V@) +am__v_FCLD_0 = @echo " FCLD " $@; +am__v_FCLD_1 = +SOURCES = $(libxc_la_SOURCES) $(nodist_libxc_la_SOURCES) \ + $(libxcf90_la_SOURCES) $(nodist_libxcf90_la_SOURCES) \ + $(xc_info_SOURCES) +DIST_SOURCES = $(libxc_la_SOURCES) $(am__libxcf90_la_SOURCES_DIST) \ + $(xc_info_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__include_HEADERS_DIST = xc.h xc_config.h xc_unconfig.h xc_s.h +HEADERS = $(include_HEADERS) $(nodist_include_HEADERS) \ + $(noinst_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F90_ACCEPTS_LINE_NUMBERS = @F90_ACCEPTS_LINE_NUMBERS@ +FC = @FC@ +FCCPP = @FCCPP@ +FCFLAGS = @FCFLAGS@ +FCFLAGS_f90 = @FCFLAGS_f90@ +FCLIBS = @FCLIBS@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LONG_LINES = @LONG_LINES@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +XC_LT_VERSION = @XC_LT_VERSION@ +XC_MAJOR_VERSION = @XC_MAJOR_VERSION@ +XC_MINOR_VERSION = @XC_MINOR_VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_FC = @ac_ct_FC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +ax_cv_f90_modext = @ax_cv_f90_modext@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +xc_info_SOURCES = xc-info.c +xc_info_LDFLAGS = -lm +xc_info_LDADD = libxc.la +lib_LTLIBRARIES = libxc.la $(am__append_1) +libxc_la_FUNC_SOURCES = \ + special_functions.c bessel.c expint_e1.c integrate.c util.c mix_func.c functionals.c \ + version.c \ + lda.c lda_x.c lda_x_1d.c lda_x_2d.c \ + lda_c_wigner.c lda_c_gombas.c lda_c_rpa.c lda_c_hl.c \ + lda_c_vwn.c lda_c_pz.c lda_c_pw.c lda_c_ml1.c lda_c_rc04.c lda_xc_teter93.c \ + lda_c_1d_csc.c lda_c_1d_loos.c \ + lda_c_2d_amgb.c lda_c_2d_prm.c stoll.c \ + lda_k_tf.c \ + gga.c \ + gga_x_lg93.c gga_x_pbe.c gga_x_rpbe.c gga_x_pbea.c gga_x_mpbe.c gga_x_herman.c gga_x_b86.c gga_x_b86_mgc.c \ + gga_x_b88.c gga_x_g96.c gga_x_pw86.c gga_x_pw91.c gga_x_optx.c gga_x_airy.c gga_x_c09x.c \ + gga_x_dk87.c gga_x_ft97.c gga_x_wc.c gga_x_am05.c gga_x_bayesian.c gga_x_kt.c gga_x_htbs.c \ + gga_c_pbe.c gga_c_lyp.c gga_c_p86.c gga_c_pw91.c gga_c_am05.c gga_c_lm.c gga_c_wl.c gga_c_wi.c \ + gga_x_lb.c gga_xc_b97.c gga_xc_edf1.c gga_xc_1w.c gga_c_optc.c gga_c_tca.c gga_x_bpccac.c \ + gga_x_sogga11.c gga_c_sogga11.c gga_xc_th.c gga_x_wpbeh.c gga_x_hjs.c gga_x_ityh.c gga_x_sfat.c \ + gga_x_ak13.c gga_x_q2d.c gga_c_q2d.c \ + gga_x_ssb_sw.c gga_c_ft97.c gga_c_op.c gga_x_n12.c gga_x_lv_rpw86.c \ + gga_x_2d_b86.c gga_x_2d_b86_mgc.c gga_x_2d_b88.c gga_x_2d_pbe.c \ + gga_k_tflw.c gga_k_pearson.c gga_k_ol1.c gga_k_ol2.c gga_k_dk.c gga_k_meyer.c \ + gga_x_vmt.c gga_xc_oblyp_d.c \ + hyb_gga_xc_b3lyp.c hyb_gga_xc_o3lyp.c hyb_gga_xc_pbeh.c hyb_gga_xc_b1wc.c \ + hyb_gga_xc_b97.c hyb_gga_xc_hse.c hyb_gga_xc_cam_b3lyp.c hyb_gga_xc_camy_blyp.c \ + mgga.c \ + mgga_x_lta.c mgga_x_tpss.c mgga_x_br89.c mgga_x_gvt4.c mgga_x_m06l.c mgga_x_tau_hcth.c \ + mgga_x_2d_prhg07.c mgga_x_pkzb.c mgga_x_m05.c mgga_x_m08.c mgga_x_ms.c mgga_x_mn12.c mgga_x_mk00.c \ + mgga_c_vsxc.c mgga_c_pkzb.c mgga_c_bc95.c mgga_c_m08.c mgga_c_cc06.c mgga_c_cs.c mgga_xc_otpss_d.c \ + hyb_mgga_xc_m05.c hyb_mgga_xc_tpssh.c + +libxc_la_FUNC_SINGLE_SOURCES = $(libxc_la_FUNC_SOURCES:.c=_s.c) +libxc_la_SOURCES = $(libxc_la_FUNC_SOURCES) +libxc_la_LDFLAGS = -version-info $(XC_LT_VERSION) +@COMPILE_SINGLE_TRUE@nodist_libxc_la_SOURCES = $(libxc_la_FUNC_SINGLE_SOURCES) +@COMPILE_FORTRAN_TRUE@libxcf90_la_SOURCES = xc_f.c libxc_funcs.f90 libxc.f90 +@COMPILE_FORTRAN_TRUE@@COMPILE_SINGLE_TRUE@nodist_libxcf90_la_SOURCES = xc_f_s.c libxc_s.f90 +@COMPILE_FORTRAN_TRUE@libxcf90_la_LDFLAGS = -version-info $(XC_LT_VERSION) +@COMPILE_FORTRAN_TRUE@libxcf90_la_LIBADD = libxc.la +@COMPILE_FORTRAN_TRUE@libxcf90_la_LIBTOOLFLAGS = --tag=F77 + +# this is a hack to go around buggy libtool/automake versions +LTFCCOMPILE = $(LIBTOOL) --mode=compile --tag=F77 $(FC) $(AM_FCFLAGS) $(FCFLAGS) +FCLINK = $(LIBTOOL) --mode=link --tag=F77 $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ + +dist_noinst_SCRIPTS = get_funcs.pl +noinst_HEADERS = \ + string_f.h util.h work_lda.c \ + work_gga_x.c work_gga_c.c \ + work_mgga_x.c work_mgga_c.c \ + libxc_master.F90 + +include_HEADERS = xc.h xc_config.h xc_unconfig.h $(am__append_2) +nodist_include_HEADERS = xc_funcs.h $(am__append_3) $(am__append_4) +BUILT_SOURCES = xc_funcs.h +@COMPILE_FORTRAN_TRUE@@F90_MOD_UPPERCASE_FALSE@LIBFUNCMOD = libxc_funcs_m.@ax_cv_f90_modext@ +@COMPILE_FORTRAN_TRUE@@F90_MOD_UPPERCASE_TRUE@LIBFUNCMOD = LIBXC_FUNCS_M.@ax_cv_f90_modext@ +@COMPILE_FORTRAN_TRUE@@F90_MOD_UPPERCASE_FALSE@XCLIBMODS = xc_f90_lib_m.@ax_cv_f90_modext@ xc_f90_types_m.@ax_cv_f90_modext@ + +# Double precision modules are always compiled +@COMPILE_FORTRAN_TRUE@@F90_MOD_UPPERCASE_TRUE@XCLIBMODS = XC_F90_LIB_M.@ax_cv_f90_modext@ XC_F90_TYPES_M.@ax_cv_f90_modext@ +@COMPILE_FORTRAN_TRUE@@COMPILE_SINGLE_TRUE@@F90_MOD_UPPERCASE_FALSE@XCLIBMODS_S = xc_s_f90_lib_m.@ax_cv_f90_modext@ xc_s_f90_types_m.@ax_cv_f90_modext@ +@COMPILE_FORTRAN_TRUE@@COMPILE_SINGLE_TRUE@@F90_MOD_UPPERCASE_TRUE@XCLIBMODS_S = XC_S_F90_LIB_M.@ax_cv_f90_modext@ XC_S_F90_TYPES_M.@ax_cv_f90_modext@ +SUFFIXES = _s.c +CLEANFILES = *~ *.bak *.mod *.il *.d *.pc* ifc* funcs_*.c funcs.h \ + libxc.f90 libxc_funcs.f90 xc_funcs.h *_s.c *_s.f90 + +LTPREF = $(subst xc_f.lo,,$(firstword $(am_libxcf90_la_OBJECTS))) +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: _s.c .c .f90 .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libxc.la: $(libxc_la_OBJECTS) $(libxc_la_DEPENDENCIES) $(EXTRA_libxc_la_DEPENDENCIES) + $(AM_V_CCLD)$(libxc_la_LINK) -rpath $(libdir) $(libxc_la_OBJECTS) $(libxc_la_LIBADD) $(LIBS) + +libxcf90.la: $(libxcf90_la_OBJECTS) $(libxcf90_la_DEPENDENCIES) $(EXTRA_libxcf90_la_DEPENDENCIES) + $(AM_V_FCLD)$(libxcf90_la_LINK) $(am_libxcf90_la_rpath) $(libxcf90_la_OBJECTS) $(libxcf90_la_LIBADD) $(LIBS) +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + || test -f $$p1 \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +xc-info$(EXEEXT): $(xc_info_OBJECTS) $(xc_info_DEPENDENCIES) $(EXTRA_xc_info_DEPENDENCIES) + @rm -f xc-info$(EXEEXT) + $(AM_V_CCLD)$(xc_info_LINK) $(xc_info_OBJECTS) $(xc_info_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/expint_e1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/expint_e1_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/functionals.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/functionals_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_am05.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_am05_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_ft97.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_ft97_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_lm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_lm_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_lyp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_lyp_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_op.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_op_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_optc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_optc_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_p86.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_p86_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_pbe.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_pbe_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_pw91.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_pw91_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_q2d.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_q2d_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_sogga11.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_sogga11_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_tca.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_tca_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_wi.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_wi_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_wl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_wl_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_k_dk.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_k_dk_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_k_meyer.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_k_meyer_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_k_ol1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_k_ol1_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_k_ol2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_k_ol2_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_k_pearson.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_k_pearson_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_k_tflw.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_k_tflw_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_2d_b86.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_2d_b86_mgc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_2d_b86_mgc_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_2d_b86_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_2d_b88.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_2d_b88_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_2d_pbe.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_2d_pbe_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_airy.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_airy_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_ak13.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_ak13_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_am05.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_am05_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_b86.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_b86_mgc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_b86_mgc_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_b86_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_b88.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_b88_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_bayesian.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_bayesian_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_bpccac.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_bpccac_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_c09x.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_c09x_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_dk87.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_dk87_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_ft97.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_ft97_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_g96.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_g96_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_herman.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_herman_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_hjs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_hjs_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_htbs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_htbs_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_ityh.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_ityh_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_kt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_kt_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_lb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_lb_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_lg93.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_lg93_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_lv_rpw86.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_lv_rpw86_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_mpbe.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_mpbe_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_n12.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_n12_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_optx.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_optx_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_pbe.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_pbe_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_pbea.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_pbea_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_pw86.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_pw86_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_pw91.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_pw91_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_q2d.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_q2d_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_rpbe.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_rpbe_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_sfat.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_sfat_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_sogga11.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_sogga11_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_ssb_sw.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_ssb_sw_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_vmt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_vmt_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_wc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_wc_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_wpbeh.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_wpbeh_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_xc_1w.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_xc_1w_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_xc_b97.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_xc_b97_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_xc_edf1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_xc_edf1_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_xc_oblyp_d.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_xc_oblyp_d_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_xc_th.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_xc_th_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_b1wc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_b1wc_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_b3lyp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_b3lyp_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_b97.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_b97_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_cam_b3lyp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_cam_b3lyp_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_camy_blyp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_camy_blyp_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_hse.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_hse_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_o3lyp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_o3lyp_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_pbeh.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_pbeh_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_mgga_xc_m05.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_mgga_xc_m05_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_mgga_xc_tpssh.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_mgga_xc_tpssh_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/integrate.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/integrate_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_1d_csc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_1d_csc_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_1d_loos.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_1d_loos_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_2d_amgb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_2d_amgb_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_2d_prm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_2d_prm_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_gombas.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_gombas_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_hl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_hl_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_ml1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_ml1_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_pw.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_pw_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_pz.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_pz_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_rc04.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_rc04_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_rpa.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_rpa_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_vwn.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_vwn_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_wigner.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_wigner_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_k_tf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_k_tf_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_x.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_x_1d.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_x_1d_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_x_2d.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_x_2d_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_x_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_xc_teter93.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_xc_teter93_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libxcf90_la-xc_f.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libxcf90_la-xc_f_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_c_bc95.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_c_bc95_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_c_cc06.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_c_cc06_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_c_cs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_c_cs_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_c_m08.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_c_m08_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_c_pkzb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_c_pkzb_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_c_vsxc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_c_vsxc_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_2d_prhg07.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_2d_prhg07_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_br89.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_br89_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_gvt4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_gvt4_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_lta.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_lta_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_m05.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_m05_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_m06l.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_m06l_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_m08.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_m08_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_mk00.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_mk00_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_mn12.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_mn12_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_ms.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_ms_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_pkzb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_pkzb_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_tau_hcth.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_tau_hcth_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_tpss.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_tpss_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_xc_otpss_d.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_xc_otpss_d_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mix_func.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mix_func_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/special_functions.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/special_functions_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stoll.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stoll_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xc-info.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +libxcf90_la-xc_f.lo: xc_f.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libxcf90_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libxcf90_la-xc_f.lo -MD -MP -MF $(DEPDIR)/libxcf90_la-xc_f.Tpo -c -o libxcf90_la-xc_f.lo `test -f 'xc_f.c' || echo '$(srcdir)/'`xc_f.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libxcf90_la-xc_f.Tpo $(DEPDIR)/libxcf90_la-xc_f.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xc_f.c' object='libxcf90_la-xc_f.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libxcf90_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libxcf90_la-xc_f.lo `test -f 'xc_f.c' || echo '$(srcdir)/'`xc_f.c + +libxcf90_la-xc_f_s.lo: xc_f_s.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libxcf90_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libxcf90_la-xc_f_s.lo -MD -MP -MF $(DEPDIR)/libxcf90_la-xc_f_s.Tpo -c -o libxcf90_la-xc_f_s.lo `test -f 'xc_f_s.c' || echo '$(srcdir)/'`xc_f_s.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libxcf90_la-xc_f_s.Tpo $(DEPDIR)/libxcf90_la-xc_f_s.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xc_f_s.c' object='libxcf90_la-xc_f_s.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libxcf90_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libxcf90_la-xc_f_s.lo `test -f 'xc_f_s.c' || echo '$(srcdir)/'`xc_f_s.c + +.f90.o: + $(AM_V_FC)$(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) $< + +.f90.obj: + $(AM_V_FC)$(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) `$(CYGPATH_W) '$<'` + +.f90.lo: + $(AM_V_FC)$(LTFCCOMPILE) -c -o $@ $(FCFLAGS_f90) $< + +libxcf90_la-libxc_funcs.lo: libxc_funcs.f90 + $(AM_V_FC)$(LIBTOOL) $(AM_V_lt) --tag=FC $(libxcf90_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(AM_FCFLAGS) $(FCFLAGS) -c -o libxcf90_la-libxc_funcs.lo $(FCFLAGS_f90) `test -f 'libxc_funcs.f90' || echo '$(srcdir)/'`libxc_funcs.f90 + +libxcf90_la-libxc.lo: libxc.f90 + $(AM_V_FC)$(LIBTOOL) $(AM_V_lt) --tag=FC $(libxcf90_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(AM_FCFLAGS) $(FCFLAGS) -c -o libxcf90_la-libxc.lo $(FCFLAGS_f90) `test -f 'libxc.f90' || echo '$(srcdir)/'`libxc.f90 + +libxcf90_la-libxc_s.lo: libxc_s.f90 + $(AM_V_FC)$(LIBTOOL) $(AM_V_lt) --tag=FC $(libxcf90_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(AM_FCFLAGS) $(FCFLAGS) -c -o libxcf90_la-libxc_s.lo $(FCFLAGS_f90) `test -f 'libxc_s.f90' || echo '$(srcdir)/'`libxc_s.f90 + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-includeHEADERS: $(include_HEADERS) + @$(NORMAL_INSTALL) + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ + done + +uninstall-includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) +install-nodist_includeHEADERS: $(nodist_include_HEADERS) + @$(NORMAL_INSTALL) + @list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ + done + +uninstall-nodist_includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(SCRIPTS) $(HEADERS) +install-binPROGRAMS: install-libLTLIBRARIES + +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(includedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \ + clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-includeHEADERS install-nodist_includeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-includeHEADERS \ + uninstall-libLTLIBRARIES uninstall-nodist_includeHEADERS + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ + clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \ + clean-libtool cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-binPROGRAMS install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am \ + install-includeHEADERS install-info install-info-am \ + install-libLTLIBRARIES install-man \ + install-nodist_includeHEADERS install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \ + uninstall-includeHEADERS uninstall-libLTLIBRARIES \ + uninstall-nodist_includeHEADERS + + +@COMPILE_FORTRAN_TRUE@ # libtool stuff + +@COMPILE_FORTRAN_TRUE@ # this is a hack to go around buggy libtool/automake versions +.c_s.c: + @CPP@ -D SINGLE_PRECISION @CPPFLAGS@ $(INCLUDES) $(DEFAULT_INCLUDES) $(AM_CPPFLAGS) $< > $*_s.c + +xc_funcs.h libxc_funcs.f90 funcs_lda.c funcs_gga.c funcs_hyb_gga.c funcs_mgga.c funcs_hyb_mgga.c funcs_key.c: get_funcs.pl + $(srcdir)/get_funcs.pl $(srcdir) $(top_builddir) +# Surprisingly, libtool/automake do not seem to provide a macro or variable for what the object names will be, +# so we have to extract it ourselves. LTPREF=libxcf90_la-, or blank for older libtool/automake versions. +# Produces these warnings on some systems. Does not seem to matter. +#src/Makefile.am:140: subst xc_f.lo,,$(firstword $(am_libxcf90_la_OBJECTS: non-POSIX variable name +#src/Makefile.am:140: (probably a GNU make extension) + +$(LIBFUNCMOD) : $(LTPREF)libxc_funcs.lo + +libxc.f90 : libxc_master.F90 + @FCCPP@ @CPPFLAGS@ $(AM_CPPFLAGS) $(srcdir)/libxc_master.F90 > $(top_builddir)/src/libxc.f90 + @if [ "@F90_ACCEPTS_LINE_NUMBERS@" = "no" ]; then \ + grep -v "^#" $(top_builddir)/src/libxc.f90 > $(top_builddir)/src/libxc.f91; \ + mv -f $(top_builddir)/src/libxc.f91 $(top_builddir)/src/libxc.f90; \ + fi +libxc_s.f90 : libxc_master.F90 + @FCCPP@ -D SINGLE_PRECISION @CPPFLAGS@ $(AM_CPPFLAGS) $(srcdir)/libxc_master.F90 > $(top_builddir)/src/libxc_s.f90 + @if [ "@F90_ACCEPTS_LINE_NUMBERS@" = "no" ]; then \ + grep -v "^#" $(top_builddir)/src/libxc_s.f90 > $(top_builddir)/src/libxc_s.f91; \ + mv -f $(top_builddir)/src/libxc_s.f91 $(top_builddir)/src/libxc_s.f90; \ + fi + +$(LTPREF)libxc.lo : $(LTPREF)libxc.o +$(LTPREF)libxc_s.lo: $(LTPREF)libxc_s.o + +$(LTPREF)libxc.o : $(LIBFUNCMOD) +$(LTPREF)libxc_s.o : $(LIBFUNCMOD) + +$(XCLIBMODS) : $(LTPREF)libxc.lo +$(XCLIBMODS_S) : $(LTPREF)libxc_s.lo + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libxc-2.2.0/src/bessel.c b/libxc-2.2.0/src/bessel.c new file mode 100644 index 000000000..7f1be2964 --- /dev/null +++ b/libxc-2.2.0/src/bessel.c @@ -0,0 +1,263 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +static FLOAT bi0_data[12] = { + -.07660547252839144951, 1.92733795399380827000, .22826445869203013390, .01304891466707290428, .00043442709008164874, + .00000942265768600193, .00000014340062895106, .00000000161384906966, .00000000001396650044, .00000000000009579451, + .00000000000000053339, .00000000000000000245 +}; + +static FLOAT ai0_data[21] = { + .07575994494023796, .00759138081082334, .00041531313389237, .00001070076463439, -.00000790117997921, + -.00000078261435014, .00000027838499429, .00000000825247260, -.00000001204463945, .00000000155964859, + .00000000022925563, -.00000000011916228, .00000000001757854, .00000000000112822, -.00000000000114684, + .00000000000027155, -.00000000000002415, -.00000000000000608, .00000000000000314, -.00000000000000071, + .00000000000000007 +}; + +static FLOAT ai02_data[22] = { + .05449041101410882, .00336911647825569, .00006889758346918, .00000289137052082, .00000020489185893, + .00000002266668991, .00000000339623203, .00000000049406022, .00000000001188914, -.00000000003149915, + -.00000000001321580, -.00000000000179419, .00000000000071801, .00000000000038529, .00000000000001539, + -.00000000000004151, -.00000000000000954, .00000000000000382, .00000000000000176, -.00000000000000034, + -.00000000000000027, .00000000000000003 +}; + +/* + Compute the exponentially scaled modified (hyperbolic) + Bessel function of the first kind of order zero. + + based on the SLATEC routine by W. Fullerton +*/ +FLOAT XC(bessel_I0_scaled)(const FLOAT x) +{ + FLOAT y = ABS(x), r = 0.0; + + if(y < 2.0*SQRT_FLOAT_EPSILON) + r = 1.0 - y; + else if(y <= 3.0) + r = EXP(-y)*(2.75 + XC(cheb_eval)(y*y/4.5-1.0, bi0_data, 12)); + else if(y <= 8.0) + r = (.375 + XC(cheb_eval)((48.0/y - 11.0)/5.0, ai0_data, 21))/SQRT(y); + else + r = (.375 + XC(cheb_eval)(16.0/y - 1.0, ai02_data, 22))/SQRT(y); + + return r; +} + + +/* + Compute the hyperbolic Bessel function of the first kind + of order zero. + + based on the SLATEC routine by W. Fullerton +*/ +FLOAT XC(bessel_I0)(const FLOAT x) +{ + FLOAT y = ABS(x), r = 0.0; + + if(y < 2.0*SQRT_FLOAT_EPSILON) + r = 1.0; + else if(y <= 3.0) + r = 2.75 + XC(cheb_eval)(y*y/4.5 - 1.0, bi0_data, 12); + else if(y < LOG_FLOAT_MAX - 1.0) + r = EXP(y) * XC(bessel_I0_scaled)(x); + else + fprintf(stderr, "Overflow in bessel_I0\n"); + + return r; +} + +static FLOAT bi1_data[11] = { + -0.001971713261099859, 0.407348876675464810, 0.034838994299959456, 0.001545394556300123, 0.000041888521098377, + 0.000000764902676483, 0.000000010042493924, 0.000000000099322077, 0.000000000000766380, 0.000000000000004741, + 0.000000000000000024 +}; + +static FLOAT ai1_data[21] = { + -0.02846744181881479, -0.01922953231443221, -0.00061151858579437, -0.00002069971253350, 0.00000858561914581, + 0.00000104949824671, -0.00000029183389184, -0.00000001559378146, 0.00000001318012367, -0.00000000144842341, + -0.00000000029085122, 0.00000000012663889, -0.00000000001664947, -0.00000000000166665, 0.00000000000124260, + -0.00000000000027315, 0.00000000000002023, 0.00000000000000730, -0.00000000000000333, 0.00000000000000071, + -0.00000000000000006 +}; + +static FLOAT ai12_data[22] = { + 0.02857623501828014, -0.00976109749136147, -0.00011058893876263, -0.00000388256480887, -0.00000025122362377, + -0.00000002631468847, -0.00000000383538039, -0.00000000055897433, -0.00000000001897495, 0.00000000003252602, + 0.00000000001412580, 0.00000000000203564, -0.00000000000071985, -0.00000000000040836, -0.00000000000002101, + 0.00000000000004273, 0.00000000000001041, -0.00000000000000382, -0.00000000000000186, 0.00000000000000033, + 0.00000000000000028, -0.00000000000000003 +}; + + +FLOAT XC(bessel_I1_scaled)(const FLOAT x) +{ + const FLOAT xmin = 2.0 * FLOAT_MIN; + const FLOAT x_small = 2.0 * M_SQRT2 * SQRT_FLOAT_EPSILON; + const FLOAT y = ABS(x); + FLOAT r = 0.0; + + if(y == 0.0) + r = 0.0; + else if(y < xmin) + fprintf(stderr, "Underflow error in bessel_I1_scaled\n"); + else if(y < x_small) + r = 0.5*x*EXP(-y); + else if(y <= 3.0) + r = x*EXP(-y)*(0.875 + XC(cheb_eval)(y*y/4.5 - 1.0, bi1_data, 11)); + else{ + if(y <= 8.0) + r = (0.375 + XC(cheb_eval)((48.0/y - 11.0)/5.0, ai1_data, 21))/SQRT(y); + else + r = (0.375 + XC(cheb_eval)(16.0/y - 1.0, ai12_data, 22))/SQRT(y); + + r *= (x > 0.0 ? 1.0 : -1.0); + } + + return r; +} + +FLOAT XC(bessel_I1)(const FLOAT x) +{ + const FLOAT xmin = 2.0 * FLOAT_MIN; + const FLOAT x_small = 2.0 * M_SQRT2 * SQRT_FLOAT_EPSILON; + const FLOAT y = ABS(x); + FLOAT r = 0.0; + + if(y == 0.0) + r = 0.0; + else if(y < xmin) + fprintf(stderr, "Underflow error in bessel_I1\n"); + else if(y < x_small) + r = 0.5*x; + else if(y <= 3.0) + r = x*(0.875 + XC(cheb_eval)(y*y/4.5 - 1.0, bi1_data, 11)); + else + r = EXP(x)*XC(bessel_I1_scaled(x)); + + return r; +} + +static FLOAT bk0_data[11] = { + -0.03532739323390276872, 0.3442898999246284869, 0.03597993651536150163, 0.00126461541144692592, 0.00002286212103119451, + 0.00000025347910790261, 0.00000000190451637722, 0.00000000001034969525, 0.00000000000004259816, 0.00000000000000013744, + 0.00000000000000000035 +}; + +static FLOAT ak0_data[17] = { + -0.07643947903327941, -0.02235652605699819, 0.00077341811546938, -0.00004281006688886, 0.00000308170017386, + -0.00000026393672220, 0.00000002563713036, -0.00000000274270554, 0.00000000031694296, -0.00000000003902353, + 0.00000000000506804, -0.00000000000068895, 0.00000000000009744, -0.00000000000001427, 0.00000000000000215, + -0.00000000000000033, 0.00000000000000005 +}; + +static FLOAT ak02_data[14] = { + -0.01201869826307592, -0.00917485269102569, 0.00014445509317750, -0.00000401361417543, 0.00000015678318108, + -0.00000000777011043, 0.00000000046111825, -0.00000000003158592, 0.00000000000243501, -0.00000000000020743, + 0.00000000000001925, -0.00000000000000192, 0.00000000000000020, -0.00000000000000002 +}; + + +FLOAT XC(bessel_K0_scaled)(const FLOAT x) +{ + FLOAT r = 0.0; + + if(x <= 0.0) + fprintf(stderr, "Domain error in bessel_K0_scaled\n"); + else if(x <= 2.0) + r = EXP(x)*(-LOG(0.5*x)*XC(bessel_I0)(x) - 0.25 + XC(cheb_eval)(0.5*x*x - 1.0, bk0_data, 11)); + else if(x <= 8.0) + r = (1.25 + XC(cheb_eval)((16.0/x - 5.0)/3.0, ak0_data, 17))/SQRT(x); + else + r = (1.25 + XC(cheb_eval)(16.0/x - 1.0, ak02_data, 14))/SQRT(x); + + return r; +} + +FLOAT XC(bessel_K0)(const FLOAT x) +{ + FLOAT r = 0.0; + + if(x <= 0.0) + fprintf(stderr, "Domain error in bessel_K0\n"); + else if(x <= 2.0) + r = -LOG(0.5*x)*XC(bessel_I0)(x) - 0.25 + XC(cheb_eval)(0.5*x*x - 1.0, bk0_data, 11); + else + r = EXP(-x)*XC(bessel_K0_scaled)(x); + + return r; +} + + +static FLOAT bk1_data[11] = { + 0.0253002273389477705, -0.3531559607765448760, -0.1226111808226571480, -0.0069757238596398643, -0.0001730288957513052, + -0.0000024334061415659, -0.0000000221338763073, -0.0000000001411488392, -0.0000000000006666901, -0.0000000000000024274, + -0.0000000000000000070 +}; + +static FLOAT ak1_data[17] = { + 0.27443134069738830, 0.07571989953199368, -0.00144105155647540, 0.00006650116955125, -0.00000436998470952, + 0.00000035402774997, -0.00000003311163779, 0.00000000344597758, -0.00000000038989323, 0.00000000004720819, + -0.00000000000604783, 0.00000000000081284, -0.00000000000011386, 0.00000000000001654, -0.00000000000000248, + 0.00000000000000038, -0.00000000000000006 +}; + +static FLOAT ak12_data[14] = { + 0.06379308343739001, 0.02832887813049721, -0.00024753706739052, 0.00000577197245160, -0.00000020689392195, + 0.00000000973998344, -0.00000000055853361, 0.00000000003732996, -0.00000000000282505, 0.00000000000023720, + -0.00000000000002176, 0.00000000000000215, -0.00000000000000022, 0.00000000000000002 +}; + +FLOAT XC(bessel_K1_scaled)(const FLOAT x) +{ + FLOAT r = 0.0; + + if(x <= 0.0) + fprintf(stderr, "Domain error in bessel_K1_scaled\n"); + else if(x <= 2.0) + r = EXP(x)*(LOG(0.5*x)*XC(bessel_I1)(x) + + (0.75 + XC(cheb_eval)(.5*x*x - 1.0, bk1_data, 11))/x); + else if(x <= 8.0) + r = (1.25 + XC(cheb_eval)((16.0/x - 5.0)/3.0, ak1_data, 17))/SQRT(x); + else + r = (1.25 + XC(cheb_eval)(16.0/x - 1.0, ak12_data, 14))/SQRT(x); + + return r; +} + + +FLOAT XC(bessel_K1)(const FLOAT x) +{ + FLOAT r = 0.0; + + if(x <= 0.0) + fprintf(stderr, "Domain error in bessel_K1\n"); + else if(x<2.0*FLOAT_MIN) + fprintf(stderr, "Overflow error in bessel_K1\n"); + else if(x <= 2.0) + r = LOG(0.5*x)*XC(bessel_I1)(x) + (0.75 + XC(cheb_eval)(0.5*x*x - 1.0, bk1_data, 11))/x; + else + r = EXP(-x)*XC(bessel_K1_scaled)(x); + + return r; +} diff --git a/libxc-2.2.0/src/expint_e1.c b/libxc-2.2.0/src/expint_e1.c new file mode 100644 index 000000000..8d5cff035 --- /dev/null +++ b/libxc-2.2.0/src/expint_e1.c @@ -0,0 +1,124 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +/* expint_E1 calculates the exponential integral, E1(X), for positive + argument X and the Cauchy principal value for negative X. If + principal values are used everywhere, then, for all X, + + E1(X) = -Ei(-X) + or + Ei(X) = -E1(-X). + + Based on the SLATEC routine by W. Fullerton and on the GSL. +*/ +static FLOAT AE11_data[39] = { + 0.121503239716065790, -0.065088778513550150, 0.004897651357459670, -0.000649237843027216, 0.000093840434587471, + 0.000000420236380882, -0.000008113374735904, 0.000002804247688663, 0.000000056487164441, -0.000000344809174450, + 0.000000058209273578, 0.000000038711426349, -0.000000012453235014, -0.000000005118504888, 0.000000002148771527, + 0.000000000868459898, -0.000000000343650105, -0.000000000179796603, 0.000000000047442060, 0.000000000040423282, + -0.000000000003543928, -0.000000000008853444, -0.000000000000960151, 0.000000000001692921, 0.000000000000607990, + -0.000000000000224338, -0.000000000000200327, -0.000000000000006246, 0.000000000000045571, 0.000000000000016383, + -0.000000000000005561, -0.000000000000006074, -0.000000000000000862, 0.000000000000001223, 0.000000000000000716, + -0.000000000000000024, -0.000000000000000201, -0.000000000000000082, 0.000000000000000017 +}; + +static FLOAT AE12_data[25] = { + 0.582417495134726740, -0.158348850905782750, -0.006764275590323141, 0.005125843950185725, 0.000435232492169391, + -0.000143613366305483, -0.000041801320556301, -0.000002713395758640, 0.000001151381913647, 0.000000420650022012, + 0.000000066581901391, 0.000000000662143777, -0.000000002844104870, -0.000000000940724197, -0.000000000177476602, + -0.000000000015830222, 0.000000000002905732, 0.000000000001769356, 0.000000000000492735, 0.000000000000093709, + 0.000000000000010707, -0.000000000000000537, -0.000000000000000716, -0.000000000000000244, -0.000000000000000058 +}; + +static FLOAT E11_data[19] = { + -16.11346165557149402600, 7.79407277874268027690, -1.95540581886314195070, 0.37337293866277945612, -0.05692503191092901938, + 0.00721107776966009185, -0.00078104901449841593, 0.00007388093356262168, -0.00000620286187580820, 0.00000046816002303176, + -0.00000003209288853329, 0.00000000201519974874, -0.00000000011673686816, 0.00000000000627627066, -0.00000000000031481541, + 0.00000000000001479904, -0.00000000000000065457, 0.00000000000000002733, -0.00000000000000000108 +}; + +static FLOAT E12_data[16] = { + -0.03739021479220279500, 0.04272398606220957700, -0.13031820798497005440, 0.01441912402469889073, -0.00134617078051068022, + 0.00010731029253063780, -0.00000742999951611943, 0.00000045377325690753, -0.00000002476417211390, 0.00000000122076581374, + -0.00000000005485141480, 0.00000000000226362142, -0.00000000000008635897, 0.00000000000000306291, -0.00000000000000010148, + 0.00000000000000000315 +}; + +static FLOAT AE13_data[25] = { + -0.605773246640603460, -0.112535243483660900, 0.013432266247902779, -0.001926845187381145, 0.000309118337720603, + -0.000053564132129618, 0.000009827812880247, -0.000001885368984916, 0.000000374943193568, -0.000000076823455870, + 0.000000016143270567, -0.000000003466802211, 0.000000000758754209, -0.000000000168864333, 0.000000000038145706, + -0.000000000008733026, 0.000000000002023672, -0.000000000000474132, 0.000000000000112211, -0.000000000000026804, + 0.000000000000006457, -0.000000000000001568, 0.000000000000000383, -0.000000000000000094, 0.000000000000000023 +}; + +static FLOAT AE14_data[26] = { + -0.18929180007530170, -0.08648117855259871, 0.00722410154374659, -0.00080975594575573, 0.00010999134432661, + -0.00001717332998937, 0.00000298562751447, -0.00000056596491457, 0.00000011526808397, -0.00000002495030440, + 0.00000000569232420, -0.00000000135995766, 0.00000000033846628, -0.00000000008737853, 0.00000000002331588, + -0.00000000000641148, 0.00000000000181224, -0.00000000000052538, 0.00000000000015592, -0.00000000000004729, + 0.00000000000001463, -0.00000000000000461, 0.00000000000000148, -0.00000000000000048, 0.00000000000000016, + -0.00000000000000005 +}; + +#ifdef SINGLE_PRECISION +/* May need double precision with large arguments */ +double xc_expint_e1_impl(const double x, const int scale); +#endif + +/* implementation for E1, allowing for scaling by exp(x) */ +FLOAT XC(expint_e1_impl)(const FLOAT x, const int scale){ + const FLOAT xmaxt = -LOG_FLOAT_MIN; /* XMAXT = -LOG (R1MACH(1)) */ + const FLOAT xmax = xmaxt - LOG(xmaxt); /* XMAX = XMAXT - LOG(XMAXT) */ + + FLOAT e1 = 0.0; + + if(x <= -10.0){ + const FLOAT s = 1.0/x * ( scale ? 1.0 : EXP(-x) ); + e1 = s * (1.0 + XC(cheb_eval)(20.0/x + 1.0, AE11_data, 39)); + }else if(x <= -4.0){ + const FLOAT s = 1.0/x * ( scale ? 1.0 : EXP(-x) ); + e1 = s * (1.0 + XC(cheb_eval)((40.0/x + 7.0)/3.0, AE12_data, 25)); + }else if(x <= -1.0){ + const FLOAT scale_factor = ( scale ? EXP(x) : 1.0 ); + e1 = scale_factor * (-LOG(ABS(x)) + XC(cheb_eval)((2.0*x + 5.0)/3.0, E11_data, 19)); + }else if(x == 0.0) { + fprintf(stderr, "Argument can not be 0.0 in expint_e1\n"); + }else if(x <= 1.0){ + const FLOAT scale_factor = ( scale ? EXP(x) : 1.0 ); + e1 = scale_factor*(-LOG(ABS(x)) - 0.6875 + x + XC(cheb_eval)(x, E12_data, 16)); + }else if(x <= 4.0){ + const FLOAT s = 1.0/x * ( scale ? 1.0 : EXP(-x) ); + e1 = s * (1.0 + XC(cheb_eval)((8.0/x - 5.0)/3.0, AE13_data, 25)); + }else if(x <= xmax || scale){ + const FLOAT s = 1.0/x * ( scale ? 1.0 : EXP(-x) ); + e1 = s * (1.0 + XC(cheb_eval)(8.0/x - 1.0, AE14_data, 26)); + }else +#ifdef SINGLE_PRECISION + return xc_expint_e1_impl(x,scale); +#else + fprintf(stderr, "Argument is larger than xmax in expint_e1\n"); +#endif + + return e1; +} + diff --git a/libxc-2.2.0/src/functionals.c b/libxc-2.2.0/src/functionals.c new file mode 100644 index 000000000..c0e2ff2d4 --- /dev/null +++ b/libxc-2.2.0/src/functionals.c @@ -0,0 +1,195 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include + +#include "xc.h" +#include "funcs_key.c" + +extern XC(func_info_type) + *XC(lda_known_funct)[], + *XC(gga_known_funct)[], + *XC(hyb_gga_known_funct)[], + *XC(mgga_known_funct)[], + *XC(hyb_mgga_known_funct)[]; + + +/*------------------------------------------------------*/ +int XC(functional_get_number)(const char *name) +{ + int ii; + + for(ii=0;;ii++){ + if(XC(functional_keys)[ii].number == -1) + return -1; + if(strncasecmp(XC(functional_keys)[ii].name, name, 256) == 0) + return XC(functional_keys)[ii].number; + } +} + + +/*------------------------------------------------------*/ +char *XC(functional_get_name)(int number) +{ + int ii; + + for(ii=0;;ii++){ + if(XC(functional_keys)[ii].number == -1) + return NULL; + if(XC(functional_keys)[ii].number == number) + /* return duplicated: caller has the responsibility to dealloc string */ + return strdup(XC(functional_keys)[ii].name); + } +} + + +/*------------------------------------------------------*/ +int XC(family_from_id)(int id, int *family, int *number) +{ + int ii; + + /* first let us check if it is an LDA */ + for(ii=0; XC(lda_known_funct)[ii]!=NULL; ii++){ + if(XC(lda_known_funct)[ii]->number == id){ + if(family != NULL) *family = XC_FAMILY_LDA; + if(number != NULL) *number = ii; + return XC_FAMILY_LDA; + } + } + + /* or is it a GGA? */ + for(ii=0; XC(gga_known_funct)[ii]!=NULL; ii++){ + if(XC(gga_known_funct)[ii]->number == id){ + if(family != NULL) *family = XC_FAMILY_GGA; + if(number != NULL) *number = ii; + return XC_FAMILY_GGA; + } + } + + /* or is it a hybrid GGA? */ + for(ii=0; XC(hyb_gga_known_funct)[ii]!=NULL; ii++){ + if(XC(hyb_gga_known_funct)[ii]->number == id){ + if(family != NULL) *family = XC_FAMILY_HYB_GGA; + if(number != NULL) *number = ii; + return XC_FAMILY_HYB_GGA; + } + } + + /* or is it a meta GGA? */ + for(ii=0; XC(mgga_known_funct)[ii]!=NULL; ii++){ + if(XC(mgga_known_funct)[ii]->number == id){ + if(family != NULL) *family = XC_FAMILY_MGGA; + if(number != NULL) *number = ii; + return XC_FAMILY_MGGA; + } + } + + /* or is it a hybrid meta GGA? */ + for(ii=0; XC(hyb_mgga_known_funct)[ii]!=NULL; ii++){ + if(XC(hyb_mgga_known_funct)[ii]->number == id){ + if(family != NULL) *family = XC_FAMILY_HYB_MGGA; + if(number != NULL) *number = ii; + return XC_FAMILY_HYB_MGGA; + } + } + + return XC_FAMILY_UNKNOWN; +} + + +/*------------------------------------------------------*/ +int XC(func_init)(XC(func_type) *p, int functional, int nspin) +{ + int number; + + assert(p != NULL); + assert(nspin==XC_UNPOLARIZED || nspin==XC_POLARIZED); + + p->nspin = nspin; + + switch(XC(family_from_id)(functional, NULL, &number)){ + case(XC_FAMILY_LDA): + p->info = XC(lda_known_funct)[number]; + return XC(lda_init)(p, p->info, nspin); + + case(XC_FAMILY_GGA): + p->info = XC(gga_known_funct)[number]; + return XC(gga_init)(p, p->info, nspin); + + case(XC_FAMILY_HYB_GGA): + p->info = XC(hyb_gga_known_funct)[number]; + return XC(gga_init)(p, p->info, nspin); + + case(XC_FAMILY_MGGA): + p->info = XC(mgga_known_funct)[number]; + return XC(mgga_init)(p, p->info, nspin); + + case(XC_FAMILY_HYB_MGGA): + p->info = XC(hyb_mgga_known_funct)[number]; + return XC(mgga_init)(p, p->info, nspin); + + default: + return -2; /* family not found */ + } +} + + +/*------------------------------------------------------*/ +void XC(func_end)(XC(func_type) *p) +{ + assert(p != NULL && p->info != NULL); + + switch(p->info->family){ + case(XC_FAMILY_LDA): + XC(lda_end)(p); + break; + + case(XC_FAMILY_GGA): + case(XC_FAMILY_HYB_GGA): + XC(gga_end)(p); + break; + + case(XC_FAMILY_MGGA): + case(XC_FAMILY_HYB_MGGA): + XC(mgga_end)(p); + break; + } + + p->info = NULL; +} + +/* returns the mixing coefficient for the hybrid GGAs */ +FLOAT XC(hyb_exx_coef)(const XC(func_type) *p) +{ + assert(p!=NULL); + + return p->cam_alpha; +} + +/* returns the CAM parameters for screened hybrids */ +void XC(hyb_cam_coef)(const XC(func_type) *p, FLOAT *omega, FLOAT *alpha, FLOAT *beta) +{ + assert(p!=NULL); + + *omega = p->cam_omega; + *alpha = p->cam_alpha; + *beta = p->cam_beta; +} diff --git a/libxc-2.2.0/src/get_funcs.pl b/libxc-2.2.0/src/get_funcs.pl new file mode 100755 index 000000000..1e2743f9b --- /dev/null +++ b/libxc-2.2.0/src/get_funcs.pl @@ -0,0 +1,118 @@ +#!/usr/bin/env perl + +# Copyright (C) 2006-2007 M.A.L. Marques +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +$srcdir = shift; +$top_builddir = shift; + +$builddir = "$top_builddir/src"; + +my @funcs = ("lda", "gga", "hyb_gga", "mgga", "hyb_mgga"); + +$s0 = ""; $s3 = ""; $s4 = ""; $s5 = ""; +foreach $func (@funcs){ + undef %deflist_f; + undef %deflist_c; + + read_file($srcdir, $func); + + $s1 = ""; $s2 = ""; + foreach $key (sort { $a <=> $b } keys %deflist_f) { + $s0 .= sprintf "%s %-20s %3s /*%-60s*/\n", "#define ", + $deflist_f{$key}, $key, $deflist_c{$key}; + + $t = $deflist_f{$key}; + $t =~ s/XC_(.*)/\L$1/; + + $s4 .= ",\n" if($s4); + $s4 .= sprintf "{\"%s\", %d}", $t, $key; + + $s3 .= sprintf " %s %-20s = %3s ! %s\n", "integer, parameter ::", + $deflist_f{$key}, $key, $deflist_c{$key}; + + $s1 .= "extern XC(func_info_type) XC(func_info_$t);\n"; + $s2 .= " &XC(func_info_$t),\n"; + } + + open(OUT, ">$builddir/funcs_$func.c"); + print OUT <$builddir/funcs_key.c"); +print OUT <$builddir/xc_funcs.h"); +print OUT $s0; +print $so; +close OUT; + +open(OUT, ">$builddir/libxc_funcs.f90"); +print OUT <){ + if(/#define\s+(XC_${TYPE}_\S+)\s+(\S+)\s+\/\*(.*)\*\//){ + $deflist_f{$2} = $1; + $deflist_c{$2} = $3; + } + } + close(IN); + } + closedir DIR; +} diff --git a/libxc-2.2.0/src/gga.c b/libxc-2.2.0/src/gga.c new file mode 100644 index 000000000..9b4bb820f --- /dev/null +++ b/libxc-2.2.0/src/gga.c @@ -0,0 +1,247 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include + +#include "util.h" +#include "funcs_gga.c" +#include "funcs_hyb_gga.c" + +/* initialization */ +int XC(gga_init)(XC(func_type) *func, const XC(func_info_type) *info, int nspin) +{ + assert(func != NULL); + + /* initialize structure */ + func->info = info; + func->nspin = nspin; + func->params = NULL; + func->func = 0; + + func->n_func_aux = 0; + func->func_aux = NULL; + func->mix_coef = NULL; + func->cam_omega = func->cam_alpha = func->cam_beta = 0.0; + + /* initialize spin counters */ + func->n_zk = 1; + func->n_rho = func->n_vrho = func->nspin; + if(func->nspin == XC_UNPOLARIZED){ + func->n_sigma = func->n_vsigma = 1; + func->n_v2rho2 = func->n_v2rhosigma = func->n_v2sigma2 = 1; + func->n_v3rho3 = func->n_v3rho2sigma = func->n_v3rhosigma2 = func->n_v3sigma3 = 1; + }else{ + func->n_sigma = func->n_vsigma = 3; + func->n_v2rho2 = 3; + func->n_v2rhosigma = func->n_v2sigma2 = 6; + + func->n_v3rho3 = 4; + func->n_v3rho2sigma = 9; + func->n_v3rhosigma2 = 12; + func->n_v3sigma3 = 10; + } + + /* see if we need to initialize the functional */ + if(func->info->init != NULL) + func->info->init(func); + return 0; +} + + +/* Termination */ +void XC(gga_end)(XC(func_type) *func) +{ + assert(func != NULL); + + /* call internal termination routine */ + if(func->info->end != NULL) + func->info->end(func); + + /* terminate any auxiliary functional */ + if(func->n_func_aux > 0){ + int ii; + + for(ii=0; iin_func_aux; ii++){ + XC(func_end)(func->func_aux[ii]); + free(func->func_aux[ii]); + } + free(func->func_aux); + func->n_func_aux = 0; + } + + if(func->mix_coef != NULL){ + free(func->mix_coef); + func->mix_coef = NULL; + } + + /* deallocate any used parameter */ + if(func->params != NULL){ + free(func->params); + func->params = NULL; + } +} + +/* Some useful formulas: + + sigma_st = grad rho_s . grad rho_t + zk = energy density per unit particle + + vrho_s = d zk / d rho_s + vsigma_st = d n*zk / d sigma_st + + v2rho2_st = d^2 n*zk / d rho_s d rho_t + v2rhosigma_svx = d^2 n*zk / d rho_s d sigma_tv + v2sigma2_stvx = d^2 n*zk / d sigma_st d sigma_vx + + v3rho3_stv = d^3 n*zk / d rho_s d rho_t d rho_v + v3rho2sigma_stvx = d^3 n*zk / d rho_s d rho_t d sigma_vx + v3rhosigma2_svxyz = d^3 n*zk / d rho_s d sigma_vx d sigma_yz + v3sigma3_stvxyz = d^3 n*zk / d sigma_st d sigma_vx d sigma_yz + +if nspin == 2 + rho(2) = (u, d) + sigma(3) = (uu, ud, dd) + + vrho(2) = (u, d) + vsigma(3) = (uu, ud, dd) + + v2rho2(3) = (u_u, u_d, d_d) + v2rhosigma(6) = (u_uu, u_ud, u_dd, d_uu, d_ud, d_dd) + v2sigma2(6) = (uu_uu, uu_ud, uu_dd, ud_ud, ud_dd, dd_dd) + + v3rho3(4) = (u_u_u, u_u_d, u_d_d, d_d_d) + v3rho2sigma(9) = (u_u_uu, u_u_ud, u_u_dd, u_d_uu, u_d_ud, u_d_dd, d_d_uu, d_d_ud, d_d_dd) + v3rhosigma2(12) = (u_uu_uu, u_uu_ud, u_uu_dd, u_ud_ud, u_ud_dd, u_dd_dd, d_uu_uu, d_uu_ud, d_uu_dd, d_ud_ud, d_ud_dd, d_dd_dd) + v3sigma(10) = (uu_uu_uu, uu_uu_ud, uu_uu_dd, uu_ud_ud, uu_ud_dd, uu_dd_dd, ud_ud_ud, ud_ud_dd, ud_dd_dd, dd_dd_dd) + +*/ +void XC(gga)(const XC(func_type) *func, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, + FLOAT *v2rho2, FLOAT *v2rhosigma, FLOAT *v2sigma2, + FLOAT *v3rho3, FLOAT *v3rho2sigma, FLOAT *v3rhosigma2, FLOAT *v3sigma3) +{ + assert(func != NULL); + + /* sanity check */ + if(zk != NULL && !(func->info->flags & XC_FLAGS_HAVE_EXC)){ + fprintf(stderr, "Functional '%s' does not provide an implementation of Exc", + func->info->name); + exit(1); + } + + if(vrho != NULL && !(func->info->flags & XC_FLAGS_HAVE_VXC)){ + fprintf(stderr, "Functional '%s' does not provide an implementation of vxc", + func->info->name); + exit(1); + } + + if(v2rho2 != NULL && !(func->info->flags & XC_FLAGS_HAVE_FXC)){ + fprintf(stderr, "Functional '%s' does not provide an implementation of fxc", + func->info->name); + exit(1); + } + + if(v3rho3 != NULL && !(func->info->flags & XC_FLAGS_HAVE_KXC)){ + fprintf(stderr, "Functional '%s' does not provide an implementation of kxc", + func->info->name); + exit(1); + } + + /* initialize output to zero */ + if(zk != NULL) + memset(zk, 0, func->n_zk*np*sizeof(FLOAT)); + + if(vrho != NULL){ + assert(vsigma != NULL); + + memset(vrho, 0, func->n_vrho *np*sizeof(FLOAT)); + memset(vsigma, 0, func->n_vsigma*np*sizeof(FLOAT)); + } + + if(v2rho2 != NULL){ + assert(v2rhosigma!=NULL && v2sigma2!=NULL); + + memset(v2rho2, 0, func->n_v2rho2 *np*sizeof(FLOAT)); + memset(v2rhosigma, 0, func->n_v2rhosigma*np*sizeof(FLOAT)); + memset(v2sigma2, 0, func->n_v2sigma2 *np*sizeof(FLOAT)); + } + + if(v3rho3 != NULL){ + assert(v3rho2sigma!=NULL && v3rhosigma2!=NULL && v3sigma3!=NULL); + + memset(v3rho3, 0, func->n_v3rho3 *np*sizeof(FLOAT)); + memset(v3rho2sigma, 0, func->n_v3rho2sigma*np*sizeof(FLOAT)); + memset(v3rhosigma2, 0, func->n_v3rhosigma2*np*sizeof(FLOAT)); + memset(v3sigma3, 0, func->n_v3sigma3 *np*sizeof(FLOAT)); + } + + /* call functional */ + if(func->info->gga != NULL) + func->info->gga(func, np, rho, sigma, zk, vrho, vsigma, + v2rho2, v2rhosigma, v2sigma2, + v3rho3, v3rho2sigma, v3rhosigma2, v3sigma3); + + if(func->mix_coef != NULL) + XC(mix_func)(func, np, rho, sigma, NULL, NULL, zk, vrho, vsigma, NULL, NULL, + v2rho2, v2sigma2, NULL, NULL, v2rhosigma, NULL, NULL, NULL, NULL, NULL); + +} + +/* specializations */ +/* returns only energy */ +inline void +XC(gga_exc)(const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *zk) +{ + XC(gga)(p, np, rho, sigma, zk, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +} + +/* returns only potential */ +inline void +XC(gga_vxc)(const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *vrho, FLOAT *vsigma) +{ + XC(gga)(p, np, rho, sigma, NULL, vrho, vsigma, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +} + +/* returns both energy and potential (the most common call usually) */ +inline void +XC(gga_exc_vxc)(const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma) +{ + XC(gga)(p, np, rho, sigma, zk, vrho, vsigma, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +} + +/* returns second derivatives */ +inline void +XC(gga_fxc)(const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *v2rho2, FLOAT *v2rhosigma, FLOAT *v2sigma2) +{ + XC(gga)(p, np, rho, sigma, NULL, NULL, NULL, v2rho2, v2rhosigma, v2sigma2, NULL, NULL, NULL, NULL); +} + +/* returns third derivatives */ +inline void +XC(gga_kxc)(const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *v3rho3, FLOAT *v3rho2sigma, FLOAT *v3rhosigma2, FLOAT *v3sigma3) +{ + XC(gga)(p, np, rho, sigma, NULL, NULL, NULL, NULL, NULL, NULL, v3rho3, v3rho2sigma, v3rhosigma2, v3sigma3); +} diff --git a/libxc-2.2.0/src/gga_c_am05.c b/libxc-2.2.0/src/gga_c_am05.c new file mode 100644 index 000000000..390173f4e --- /dev/null +++ b/libxc-2.2.0/src/gga_c_am05.c @@ -0,0 +1,125 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_GGA_C_AM05 135 /* Armiento & Mattsson 05 correlation */ + +static void +gga_c_am05_init(XC(func_type) *p) +{ + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_LDA_C_PW_MOD, p->nspin); +} + + +static inline void +func(const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + const FLOAT am05_alpha = 2.804; + const FLOAT am05_gamma = 0.8098; + + XC(lda_work_t) pw; + FLOAT sfact; + int is; + + pw.order = r->order; + pw.rs[0] = SQRT(r->rs); + pw.rs[1] = r->rs; + pw.rs[2] = r->rs*r->rs; + pw.zeta = r->zeta; + + XC(lda_c_pw_func)(p->func_aux[0], &pw); + + sfact = (p->nspin == XC_POLARIZED) ? 1.0 : 2.0; + + r->f = 0.0; + if(r->order > 0) + r->dfdrs = r->dfdz = r->dfdxt = 0.0; + if(r->order > 1){ + r->d2fdrs2 = r->d2fdrsz = r->d2fdrsxt = r->d2fdz2 = r->d2fdzxt = r->d2fdxt2 = 0.0; + r->d2fdxs2[1] = 0.0; + } + + for(is=0; isnspin; is++){ + FLOAT ss, ff, dff, d2ff, XX, dXX, d2XX; + FLOAT sign[2] = {1.0, -1.0}; + int js; + + ss = X2S*r->xs[is]; + XX = 1.0/(1.0 + am05_alpha*ss*ss); + ff = XX + (1.0 - XX)*am05_gamma; + + r->f += sfact*pw.zk*(1.0 + sign[is]*r->zeta)*ff/2.0; + + if(r->order < 1) continue; + + dXX = -2.0*am05_alpha*ss * XX*XX*X2S; + dff = dXX*(1.0 - am05_gamma); + + r->dfdrs += sfact*pw.dedrs*(1.0 + sign[is]*r->zeta)*ff/2.0; + r->dfdxs[is] = pw.zk*(1.0 + sign[is]*r->zeta)*dff/2.0; + if(p->nspin == XC_POLARIZED) + r->dfdz += (pw.dedz*(1.0 + sign[is]*r->zeta) + pw.zk*sign[is])*ff/2.0; + + if(r->order < 2) continue; + + js = (is == 0) ? 0 : 2; + + d2XX = 2.0*am05_alpha*(3.0*am05_alpha*ss*ss - 1.0)*(XX*XX*XX)*(X2S*X2S); + d2ff = d2XX*(1.0 - am05_gamma); + + r->d2fdrs2 += sfact*pw.d2edrs2*(1.0 + sign[is]*r->zeta)*ff/2.0; + r->d2fdrsxs[is] = pw.dedrs*(1.0 + sign[is]*r->zeta)*dff/2.0; + r->d2fdxtxs[is] = 0.0; + r->d2fdxs2[js] = pw.zk*(1.0 + sign[is]*r->zeta)*d2ff/2.0; + + if(p->nspin == XC_POLARIZED){ + r->d2fdrsz += (pw.d2edrsz*(1.0 + sign[is]*r->zeta) + pw.dedrs*sign[is])*ff/2.0; + r->d2fdz2 += (pw.d2edz2 *(1.0 + sign[is]*r->zeta) + 2.0*pw.dedz *sign[is])*ff/2.0; + r->d2fdzxs[is] = (pw.dedz *(1.0 + sign[is]*r->zeta) + pw.zk *sign[is])*dff/2.0; + }else + r->d2fdzxs[is] = 0.0; + + } +} + +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_c_am05) = { + XC_GGA_C_AM05, + XC_CORRELATION, + "Armiento & Mattsson 05", + XC_FAMILY_GGA, + "R Armiento and AE Mattsson, Phys. Rev. B 72, 085108 (2005)\n" + "AE Mattsson, R Armiento, J Paier, G Kresse, JM Wills, and TR Mattsson, J. Chem. Phys. 128, 084714 (2008).", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-27, 1e-32, 0.0, 1e-32, + gga_c_am05_init, + NULL, + NULL, /* this is not an LDA */ + work_gga_c, + NULL +}; diff --git a/libxc-2.2.0/src/gga_c_ft97.c b/libxc-2.2.0/src/gga_c_ft97.c new file mode 100644 index 000000000..a4541f533 --- /dev/null +++ b/libxc-2.2.0/src/gga_c_ft97.c @@ -0,0 +1,321 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_GGA_C_FT97 88 /* Filatov & Thiel correlation */ + +static const FLOAT + C0 = 0.01554534543483, /* (1-ln2)/(2*Pi**2), see eq.(9) */ + C1 = 0.02072712724644, /* 2*C0/3 , see eq.(13),(28),(33) */ + C2 = RS_FACTOR, /* (3/(4*Pi))**1/3 , see eq.(8) */ + C3 = 0.2067834969665; /* C2/3 */ + +static const FLOAT big = 1e4; + + +static void func_kssp0(FLOAT rs, int order, FLOAT *kssp0, FLOAT *dkssp0) +{ + /* calculate kssp0(rs) Eq. (39) */ + static FLOAT k0 = 1.291551074, k1 = 0.349064173, r1 = 0.083275880; + static const FLOAT KSSPBIG = 1.291551074 - 0.349064173; + + FLOAT aux1, aux2; + + if(rs > big) + *kssp0 = KSSPBIG; + else{ + aux1 = POW(rs, 4.0/5.0); + aux2 = EXP(-r1*aux1); + + *kssp0 = k0 - k1*(1.0 - aux2); + } + + if(order < 1) return; + + if(rs > big) + *dkssp0 = 0.0; + else + *dkssp0 = -4.0*r1*k1/5.0 * aux1/rs * aux2; +} + + +static void func_fssp(FLOAT rs, FLOAT gr, int order, FLOAT *fssp, FLOAT *dfsspdrs, FLOAT *dfsspdgr) +{ + /* calculate fssp(rs, gr) Eq. (45) */ + static const FLOAT A1=1.622118767, A2=0.489958076, A3=1.379021941; + + FLOAT aux1, aux2, aux3; + + aux1 = A2*A2*gr*gr; + if(aux1 > big) + *fssp = 0.0; + else{ + aux2 = EXP(-aux1); + aux3 = SQRT(1.0 + A3*gr/rs); + + *fssp = (1.0 + A1*gr + aux1)*aux2/aux3; + } + + if(order < 1) return; + + if(aux1 > big) + *dfsspdrs = *dfsspdgr = 0.0; + else{ + *dfsspdrs = (*fssp)*A3*gr/(2.0*rs*(rs + A3*gr)); + *dfsspdgr = aux2/aux3*(-(2.0*A2*A2*gr + A3/(2.0*rs*aux3*aux3))*(1.0 + A1*gr + aux1) + (A1 + 2.0*A2*A2*gr)); + } +} + + +static void func_factor(FLOAT rs, int order, FLOAT *fa, FLOAT *dfa) +{ + /* factor: see Eq. (34) */ + static const FLOAT fa_a1 = 0.939016, fa_a2 = 1.733170; + + FLOAT fa_den, fa_arg, dfa_den, dfa_arg; + + fa_den = fa_a1*SQRT(rs) + fa_a2*rs; + fa_arg = rs/fa_den; + + *fa = EXP(-fa_arg*fa_arg); + + if(order < 1) return; + + dfa_den = fa_a1/(2.0*SQRT(rs)) + fa_a2; + dfa_arg = (1.0 - rs*dfa_den/fa_den)/fa_den; + + *dfa = -2.0*fa_arg*dfa_arg*(*fa); +} + + +static void func_kss0(FLOAT rs, int order, FLOAT *kss0, FLOAT *dkss0) +{ + /* calculate kss0(rs) Eq. (40) */ + static const FLOAT k0 = 1.200801774, k1 = 0.859614445, k2 = -0.812904345, r1 = 1.089338848, r2 = 0.655638823; + static const FLOAT KSS0BIG = 1.200801774 + 0.859614445 - 0.812904345; + + FLOAT aux1, aux2, aux3; + + if(rs > big){ + *kss0 = KSS0BIG; + }else{ + aux1 = POW(rs, 2.0/5.0); + aux2 = EXP(-r1*SQRT(rs)); + aux3 = EXP(-r2*aux1); + + *kss0 = k0 + k1*(1.0 - aux2) + k2*(1.0 - aux3); + } + + if(order < 1) return; + + if(rs > big) + *dkss0 = 0.0; + else + *dkss0 = k1*r1/(2.0*SQRT(rs))*aux2 + 2.0*k2*r2*aux1*aux3/(5.0*rs); +} + + +static void func_fss(FLOAT rs, FLOAT gr, int order, FLOAT *fss, FLOAT *dfssdrs, FLOAT *dfssdgr) +{ + static const FLOAT A4 = 4.946281353, A5 = 3.600612059; + + FLOAT aux1, aux2, aux3; + + aux1 = A4*A4*gr*gr; + if(aux1 > big) + *fss = 0.0; + else{ + aux2 = EXP(-aux1); + aux3 = SQRT(1.0 + A5*gr/rs); + + *fss = (1.0 + aux1)*aux2/aux3; + } + + if(order < 1) return; + + if(aux1 > big) + *dfssdrs = *dfssdgr = 0.0; + else{ + *dfssdrs = (*fss)*A5*gr/(2.0*rs*(rs + A5*gr)); + *dfssdgr = aux2/aux3*(-(2.0*A4*A4*gr + A5/(2.0*rs*aux3*aux3))*(1.0 + aux1) + 2.0*A4*A4*gr); + } +} + + +static void func_eab(FLOAT mu, int order, FLOAT *eab, FLOAT *deabdmu) +{ + FLOAT mu12, eei, eei1, ff_n, ff_d, ff, deeidmu, deei1dmu, dffdmu; + + mu12 = SQRT(mu); + + eei = expint_Ei_scaled(-mu); + eei1 = mu*eei + 1.0; + + /* calculate approximate normalization, Eq. (15) */ + ff_n = 3.0 + 2.0*(mu12 + mu); + ff_d = 3.0 + 6.0*(mu12 + mu); + ff = ff_n/ff_d; + + /* eba : Correlation energy density, Eq. (19) */ + *eab = C0*(eei + 2.0*ff*eei1); + + if(order < 1) return; + + deeidmu = eei + 1.0/mu; + deei1dmu = eei*(1.0 + mu) + 1.0; + + dffdmu = (1.0 + 2.0*mu12)/(2.0*mu12*ff_d) * (2.0 - 6.0*ff_n/ff_d); + + *deabdmu = C0*(deeidmu + 2.0*(dffdmu*eei1 + ff*deei1dmu)); +} + + +static void +func(const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + /* numerical curoff for mu_aa, mu_ab, mu_ba, mu_bb, see Eqs.(13) and (33) */ + static const FLOAT CUTOFF = 1.0e7; + static const FLOAT sign[2] = {1.0, -1.0}; + + int ispin; + FLOAT rsa, ga2, opz, opz13; + FLOAT kssp0, fssp, den_ba, mu_ba, e_ba; + FLOAT kss0, fss, den_aa, mu_aa, e_aa, fa; + + FLOAT drsadrs, drsadzeta, dga2dxs; + FLOAT dkssp0, dfsspdrsa, dfsspdga2, dden_badrsa, dden_badga2, dmu_badrsa, dmu_badga2, de_badmu_ba; + FLOAT dkss0, dfssdrsa, dfssdga2, dden_aadrsa, dden_aadga2, dmu_aadrsa, dmu_aadga2, de_aadmu_aa, dfa; + + r->f = 0.0; + if(r->order >= 1) r->dfdrs = r->dfdz = r->dfdxs[0] = r->dfdxs[1] = 0.0; + + for(ispin=0; ispin<2; ispin++){ + opz = 1.0 + sign[ispin]*r->zeta; + opz13 = CBRT(opz); + + /* rs_alpha */ + rsa = r->rs*M_CBRT2/opz13; + + /* | grad rs_alpha |^2 */ + ga2 = C3*C3 * r->xs[ispin]*r->xs[ispin]; + + /* mu(beta,alpha), Eq.(13) */ + + /* calculate kssp0(rsa) Eq. (39) */ + func_kssp0(rsa, r->order, &kssp0, &dkssp0); + + /* calculate fssp(rsa, ga2) Eq. (45) */ + func_fssp(rsa, ga2, r->order, &fssp, &dfsspdrsa, &dfsspdga2); + + /* calculate denominator */ + den_ba = kssp0*kssp0*fssp*fssp; + + if(C1*rsa <= den_ba*CUTOFF){ + mu_ba = C1*rsa/den_ba; + + func_eab(mu_ba, r->order, &e_ba, &de_badmu_ba); + + r->f += e_ba*(1.0 - sign[ispin]*r->zeta)/2.0; + } + + /* mu(alpha,alpha), Eq. (33) */ + + /* factor: see Eq. (34) */ + func_factor(rsa, r->order, &fa, &dfa); + + /* calculate kss0(rsa) Eq. (40) */ + func_kss0(rsa, r->order, &kss0, &dkss0); + + /* calculate fss(rsa, ga2) Eq. (45) */ + func_fss(rsa, ga2, r->order, &fss, &dfssdrsa, &dfssdga2); + + /* calculate denominator */ + den_aa = kss0*kss0*fss*fss; + + if(C1*rsa <= den_aa*CUTOFF){ + mu_aa = C1*rsa/den_aa; + + func_eab(mu_aa, r->order, &e_aa, &de_aadmu_aa); + + r->f += e_aa*fa*(1.0 + sign[ispin]*r->zeta)/2.0; + } + + if(r->order < 1) continue; + + drsadrs = M_CBRT2/opz13; + drsadzeta = -r->rs*M_CBRT2*sign[ispin]/(3.0*opz*opz13); + + dga2dxs = 2.0*C3*C3 * r->xs[ispin]; + + /* mu(beta,alpha), Eq.(13) */ + + /* calculate denominator */ + dden_badrsa = 2.0*kssp0*fssp*(fssp*dkssp0 + dfsspdrsa*kssp0); + dden_badga2 = 2.0*kssp0*kssp0*fssp*dfsspdga2; + + if(C1*rsa <= den_ba*CUTOFF){ + dmu_badrsa = C1/den_ba *(1.0 - rsa*dden_badrsa/den_ba); + dmu_badga2 = -mu_ba*dden_badga2/den_ba; + + r->dfdrs += de_badmu_ba*dmu_badrsa*drsadrs*(1.0 - sign[ispin]*r->zeta)/2.0; + r->dfdz += (de_badmu_ba*dmu_badrsa*drsadzeta*(1.0 - sign[ispin]*r->zeta) - e_ba*sign[ispin])/2.0; + + r->dfdxs[ispin] += de_badmu_ba*dmu_badga2*dga2dxs*(1.0 - sign[ispin]*r->zeta)/2.0; + } + + /* mu(alpha,alpha), Eq. (33) */ + + /* calculate denominator */ + dden_aadrsa = 2.0*kss0*fss*(fss*dkss0 + dfssdrsa*kss0); + dden_aadga2 = 2.0*kss0*kss0*fss*dfssdga2; + + if(C1*rsa <= den_aa*CUTOFF){ + dmu_aadrsa = C1/den_aa *(1.0 - rsa*dden_aadrsa/den_aa); + dmu_aadga2 = -mu_aa*dden_aadga2/den_aa; + + r->dfdrs += (de_aadmu_aa*dmu_aadrsa*fa + e_aa*dfa)* drsadrs*(1.0 + sign[ispin]*r->zeta)/2.0; + r->dfdz += (de_aadmu_aa*dmu_aadrsa*fa + e_aa*dfa)*drsadzeta*(1.0 + sign[ispin]*r->zeta)/2.0 + e_aa*fa*sign[ispin]/2.0; + + r->dfdxs[ispin] += de_aadmu_aa*dmu_aadga2*dga2dxs*fa*(1.0 + sign[ispin]*r->zeta)/2.0; + } + + } /* for ispin */ +} + +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_c_ft97) = { + XC_GGA_C_FT97, + XC_CORRELATION, + "Filatov & Thiel correlation", + XC_FAMILY_GGA, + "M Filatov & W Thiel, Int. J. Quant. Chem. 62, 603-616 (1997)\n" + "M Filatov & W Thiel, Mol Phys 91, 847 (1997)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, + NULL, + NULL, + work_gga_c, + NULL +}; diff --git a/libxc-2.2.0/src/gga_c_lm.c b/libxc-2.2.0/src/gga_c_lm.c new file mode 100644 index 000000000..8b77ec8ae --- /dev/null +++ b/libxc-2.2.0/src/gga_c_lm.c @@ -0,0 +1,162 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +/************************************************************************ + This functional is provided for historical reasons. + It was one of the first GGAs that ever appeared. +************************************************************************/ + +#define XC_GGA_C_LM 137 /* Langreth and Mehl correlation */ + +static void +gga_c_lm_init(XC(func_type) *p) +{ + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_LDA_C_vBH, p->nspin); +} + + +static inline void +func(const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + const FLOAT a2 = -0.262; + const FLOAT a3 = -7.0/(9.0*2.0*M_CBRT2*M_CBRT2); + + FLOAT a1, alpha; + FLOAT opz, omz, opz13, omz13, DD, dDDdz, d2DDdz2; + FLOAT aux1, aux2, daux1drs, daux1dxt, d2aux1drs2, d2aux1dxt2, d2aux1drsxt; + FLOAT t1, t2, dt1drs, dt1dz, dt1dxt, dt2dz, d2t1drs2, d2t1dxt2, d2t1dz2, d2t2dz2, d2t1drsz, d2t1drsxt, d2t1dzxt; + + XC(lda_work_t) pw; + + alpha = POW(4.0*M_PI/3.0, 1.0/6.0); + a1 = M_PI/(16.0*POW(3*M_PI*M_PI, 4/3)); /* 4.28e-3/2.0, where the 2 comes from the covertion from Ryd. to Hartree */ + + pw.order = r->order; + pw.rs[0] = SQRT(r->rs); + pw.rs[1] = r->rs; + pw.rs[2] = r->rs*r->rs; + pw.zeta = r->zeta; + + XC(lda_c_hl_func)(p->func_aux[0], &pw); + + opz = 1.0 + r->zeta; + omz = 1.0 - r->zeta; + opz13 = CBRT(opz); + omz13 = CBRT(omz); + + DD = SQRT(opz*opz13*opz13 + omz*omz13*omz13)/M_SQRT2; + + aux1 = EXP(a2*r->xt/(alpha*pw.rs[0])); + aux2 = a1/(alpha*alpha*r->rs); + + t1 = r->xt*r->xt*aux1/DD; + t2 = a3*(r->xs[0]*r->xs[0]*opz*opz13 + r->xs[1]*r->xs[1]*omz*omz13); + + r->f = pw.zk + aux2*(t1 + t2); + + if(r->order < 1) return; + + dDDdz = 5.0/(3.0*4.0*DD)*(opz13*opz13 - omz13*omz13); + daux1drs = -a2*r->xt/(2.0*alpha*r->rs*pw.rs[0])*aux1; + daux1dxt = a2/(alpha*pw.rs[0])*aux1; + + dt1drs = r->xt*r->xt*daux1drs/DD; + dt1dz = -r->xt*r->xt*aux1*dDDdz/(DD*DD); + dt1dxt = r->xt*(2.0*aux1 + r->xt*daux1dxt)/DD; + + dt2dz = a3*(4.0/3.0)*(r->xs[0]*r->xs[0]*opz13 - r->xs[1]*r->xs[1]*omz13); + + r->dfdrs = pw.dedrs + aux2*(-(t1 + t2)/r->rs + dt1drs); + r->dfdz = pw.dedz + aux2*(dt1dz + dt2dz); + r->dfdxt = aux2*dt1dxt; + r->dfdxs[0] = aux2*(a3*2.0*r->xs[0]*opz*opz13); + r->dfdxs[1] = aux2*(a3*2.0*r->xs[1]*omz*omz13); + + if(r->order < 2) return; + + d2DDdz2 = d2t2dz2 = 0.0; + if(r->zeta < 1.0){ + d2DDdz2 += 1.0/omz13; + d2t2dz2 += r->xs[1]*r->xs[1]/(omz13*omz13); + } + if(r->zeta > -1.0){ + d2DDdz2 += 1.0/opz13; + d2t2dz2 += r->xs[0]*r->xs[0]/(opz13*opz13); + } + + d2DDdz2 = -dDDdz*dDDdz/DD + 10.0/(36.0*DD)*d2DDdz2; + d2t2dz2 = a3*(4.0/9.0)*d2t2dz2; + + d2aux1drs2 = -a2*r->xt/(2.0*alpha*r->rs*pw.rs[0])*(-3.0/2.0*aux1/r->rs + daux1drs); + d2aux1drsxt = -a2/(2.0*alpha*r->rs*pw.rs[0])*(aux1 + r->xt*daux1dxt); + d2aux1dxt2 = a2/(alpha*pw.rs[0])*daux1dxt; + + d2t1drs2 = r->xt*r->xt*d2aux1drs2/DD; + d2t1drsz = -r->xt*r->xt*daux1drs*dDDdz/(DD*DD); + d2t1drsxt = r->xt*(2.0*daux1drs + r->xt*d2aux1drsxt)/DD; + d2t1dz2 = r->xt*r->xt*aux1*(2.0*dDDdz*dDDdz - DD*d2DDdz2)/(DD*DD*DD); + d2t1dzxt = -r->xt*(2.0*aux1 + r->xt*daux1dxt)*dDDdz/(DD*DD); + + d2t1dxt2 = (2.0*aux1 + 4.0*r->xt*daux1dxt + r->xt*r->xt*d2aux1dxt2)/DD; + + r->d2fdrs2 = pw.d2edrs2 + aux2*(d2t1drs2 - 2.0*dt1drs/r->rs + 2.0*(t1 + t2)/pw.rs[2]); + r->d2fdrsz = pw.d2edrsz + aux2*(d2t1drsz - (dt1dz + dt2dz)/r->rs); + r->d2fdrsxt = aux2*(d2t1drsxt - dt1dxt/r->rs); + r->d2fdrsxs[0] = -aux2/r->rs*(a3*2.0*r->xs[0]*opz*opz13); + r->d2fdrsxs[1] = -aux2/r->rs*(a3*2.0*r->xs[1]*omz*omz13); + r->d2fdz2 = pw.d2edz2 + aux2*(d2t1dz2 + d2t2dz2); + r->d2fdzxt = aux2*d2t1dzxt;; + r->d2fdzxs[0] = aux2*(a3*8.0/3.0*r->xs[0]*opz13); + r->d2fdzxs[1] = -aux2*(a3*8.0/3.0*r->xs[1]*omz13); + r->d2fdxt2 = aux2*d2t1dxt2; + r->d2fdxtxs[0] = 0.0; + r->d2fdxtxs[1] = 0.0; + r->d2fdxs2[0] = aux2*(a3*2.0*opz*opz13); + r->d2fdxs2[1] = 0.0; + r->d2fdxs2[2] = aux2*(a3*2.0*omz*omz13); + +} + +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_c_lm) = { + XC_GGA_C_LM, + XC_CORRELATION, + "Langreth & Mehl", + XC_FAMILY_GGA, + "DC Langreth and MJ Mehl, Phys. Rev. Lett. 47, 446 (1981)\n" + "CD Hu and DC Langreth, Phys. Scr. 32, 391 (1985)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-10, 1e-32, 0.0, 1e-32, + gga_c_lm_init, + NULL, + NULL, /* this is not an LDA */ + work_gga_c, + NULL +}; + diff --git a/libxc-2.2.0/src/gga_c_lyp.c b/libxc-2.2.0/src/gga_c_lyp.c new file mode 100644 index 000000000..e286b30c8 --- /dev/null +++ b/libxc-2.2.0/src/gga_c_lyp.c @@ -0,0 +1,233 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_GGA_C_LYP 131 /* Lee, Yang & Parr */ + +typedef struct{ + FLOAT A, B, c, d; +} gga_c_lyp_params; + +void XC(gga_c_lyp_init)(XC(func_type) *p) +{ + assert(p->params == NULL); + + p->params = malloc(sizeof(gga_c_lyp_params)); + + /* values of constants in standard LYP functional */ + XC(gga_c_lyp_set_params)(p, 0.04918, 0.132, 0.2533, 0.349); +} + + +void XC(gga_c_lyp_set_params)(XC(func_type) *p, FLOAT A, FLOAT B, FLOAT c, FLOAT d) +{ + gga_c_lyp_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_c_lyp_params *) (p->params); + + params->A = A; + params->B = B; + params->c = c; + params->d = d; +} + + +static inline void +func(const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + gga_c_lyp_params *params; + + FLOAT AA, BB, cc, dd, Cf; /* sortcuts for parameters */ + FLOAT cnst_rs, xt2, opz, omz, opz23, omz23, opz53, omz53, opz83, omz83, zeta2, opdrs; + FLOAT omega, delta, domega, ddelta, d2omega, d2delta; + FLOAT aux4, aux5, aux6, xs02, xs12; + FLOAT t1, t2, t3, t4, t5, t6; + FLOAT dt1drs, dt2drs, dt4drs, dt5drs; + FLOAT dt1dz, dt2dz, dt3dz, dt4dz, dt5dz, dt6dz; + FLOAT d2t1drs2, d2t2drs2, d2t4drs2, d2t5drs2; + FLOAT d2t1drsz, d2t2drsz, d2t4drsz, d2t5drsz; + FLOAT d2t1dz2, d2t2dz2, d2t3dz2, d2t4dz2, d2t5dz2, d2t6dz2; + + assert(p->params != NULL); + params = (gga_c_lyp_params *)(p->params); + + cnst_rs = CBRT(4.0*M_PI/3.0); + Cf = 3.0*POW(3.0*M_PI*M_PI, 2.0/3.0)/10.0; + xt2 = r->xt*r->xt; + xs02 = r->xs[0]*r->xs[0]; + xs12 = r->xs[1]*r->xs[1]; + + AA = params->A; + BB = params->B; + cc = params->c*cnst_rs; + dd = params->d*cnst_rs; + + zeta2 = r->zeta*r->zeta; + opz = 1.0 + r->zeta; + omz = 1.0 - r->zeta; + opz23 = POW(opz, 2.0/3.0); + omz23 = POW(omz, 2.0/3.0); + opz53 = opz*opz23; + omz53 = omz*omz23; + opz83 = opz*opz53; + omz83 = omz*omz53; + + opdrs = 1.0/(1.0 + dd*r->rs); + omega = BB*EXP(-cc*r->rs)*opdrs; + delta = (cc + dd*opdrs)*r->rs; + + aux6 = 1.0/POW(2.0, 8.0/3.0); + aux4 = aux6/4.0; + aux5 = aux4/(9.0*2.0); + + t1 = -(1.0 - zeta2)/(1.0 + dd*r->rs); + t2 = -xt2*((1.0 - zeta2)*(47.0 - 7.0*delta)/(4.0*18.0) - 2.0/3.0); + t3 = -Cf/2.0*(1.0 - zeta2)*(opz83 + omz83); + t4 = aux4*(1.0 - zeta2)*(5.0/2.0 - delta/18.0)*(xs02*opz83 + xs12*omz83); + t5 = aux5*(1.0 - zeta2)*(delta - 11.0)*(xs02*opz*opz83 + xs12*omz*omz83); + t6 = -aux6*(2.0/3.0*(xs02*opz83 + xs12*omz83) - + opz*opz*xs12*omz83/4.0 - omz*omz*xs02*opz83/4.0); + + r->f = AA*(t1 + omega*(t2 + t3 + t4 + t5 + t6)); + + if(r->order < 1) return; + + domega = -omega*(cc + dd*opdrs); + ddelta = cc + dd*opdrs*opdrs; + + dt1drs = -dd*t1/(1.0 + dd*r->rs); + dt2drs = xt2 *(1.0 - zeta2)*ddelta*7.0/(4.0*18.0); + dt4drs = -aux4*(1.0 - zeta2)*ddelta/18.0*(xs02*opz83 + xs12*omz83); + dt5drs = aux5*(1.0 - zeta2)*ddelta*(xs02*opz*opz83 + xs12*omz*omz83); + r->dfdrs = AA*(dt1drs + domega*(t2 + t3 + t4 + t5 + t6) + omega*(dt2drs + dt4drs + dt5drs)); + + dt1dz = 2.0*r->zeta/(1.0 + dd*r->rs); + dt2dz = xt2*2.0*r->zeta*(47.0 - 7.0*delta)/(4.0*18.0); + dt3dz = -Cf/2.0*(-2.0*r->zeta*(opz83 + omz83) + (1.0 - zeta2)*8.0/3.0*(opz53 - omz53)); + dt4dz = aux4*(5.0/2.0 - delta/18.0)* + (-2.0*r->zeta*(xs02*opz83 + xs12*omz83) + + (1.0 - zeta2)*8.0/3.0*(xs02*opz53 - xs12*omz53)); + dt5dz = aux5*(delta - 11.0)* + (-2.0*r->zeta*(xs02*opz*opz83 + xs12*omz*omz83) + + (1.0 - zeta2)*11/3.0*(xs02*opz83 - xs12*omz83)); + dt6dz = -aux6*(16.0/9.0*(xs02*opz53 - xs12*omz53) - + 1.0/2.0*(opz*xs12*omz83 - omz*xs02*opz83) + + 2.0/3.0*(opz*opz*xs12*omz53 - omz*omz*xs02*opz53)); + r->dfdz = AA*(dt1dz + omega*(dt2dz + dt3dz + dt4dz + dt5dz + dt6dz)); + + r->dfdxt = -2.0*AA*omega*r->xt*((1.0 - zeta2)*(47.0 - 7.0*delta)/(4.0*18.0) - 2.0/3.0); + + r->dfdxs[0] = AA*omega*2.0*r->xs[0]* + (aux4*(1.0 - zeta2)*(5.0/2.0 - delta/18.0)*opz83 + + aux5*(1.0 - zeta2)*(delta - 11.0)*opz*opz83 - + aux6*(2.0/3.0*opz83 - omz*omz*opz83/4.0) + ); + r->dfdxs[1] = AA*omega*2.0*r->xs[1]* + (aux4*(1.0 - zeta2)*(5.0/2.0 - delta/18.0)*omz83 + + aux5*(1.0 - zeta2)*(delta - 11.0)*omz*omz83 - + aux6*(2.0/3.0*omz83 - opz*opz*omz83/4.0) + ); + + if(r->order < 2) return; + + d2omega = -domega*(cc + dd*opdrs) + dd*dd*omega*opdrs*opdrs; + d2delta = -2.0*dd*dd*opdrs*opdrs*opdrs; + + d2t1drs2 = -2.0*dd*dt1drs/(1.0 + dd*r->rs); + d2t2drs2 = xt2 *(1.0 - zeta2)*d2delta*7.0/(4.0*18.0); + d2t4drs2 = -aux4*(1.0 - zeta2)*d2delta/18.0*(xs02*opz83 + xs12*omz83); + d2t5drs2 = aux5*(1.0 - zeta2)*d2delta*(xs02*opz*opz83 + xs12*omz*omz83); + r->d2fdrs2 = AA*(d2t1drs2 + d2omega*(t2 + t3 + t4 + t5 + t6) + + 2.0*domega*(dt2drs + dt4drs + dt5drs) + omega*(d2t2drs2 + d2t4drs2 + d2t5drs2)); + + d2t1drsz = -dd*dt1dz/(1.0 + dd*r->rs); + d2t2drsz = -xt2*2.0*r->zeta*7.0*ddelta/(4.0*18.0); + d2t4drsz = -aux4*ddelta/18.0* + (-2.0*r->zeta*(xs02*opz83 + xs12*omz83) + (1.0 - zeta2)*8.0/3.0*(xs02*opz53 - xs12*omz53)); + d2t5drsz = aux5*ddelta* + (-2.0*r->zeta*(xs02*opz*opz83 + xs12*omz*omz83) + (1.0 - zeta2)*11/3.0*(xs02*opz83 - xs12*omz83)); + + r->d2fdrsz = AA*(d2t1drsz + domega*(dt2dz + dt3dz + dt4dz + dt5dz + dt6dz) + omega*(d2t2drsz + d2t4drsz + d2t5drsz)); + + r->d2fdrsxt = -2.0*AA*r->xt*(domega*((1.0 - zeta2)*(47.0 - 7.0*delta)/(4.0*18.0) - 2.0/3.0) - + omega*(1.0 - zeta2)*7.0*ddelta/(4.0*18.0)); + + r->d2fdrsxs[0] = r->dfdxs[0]*domega/omega + AA*omega*2.0*r->xs[0]*ddelta* + (-aux4*(1.0 - zeta2)/18.0*opz83 + aux5*(1.0 - zeta2)*opz*opz83); + r->d2fdrsxs[1] = r->dfdxs[1]*domega/omega + AA*omega*2.0*r->xs[1]*ddelta* + (-aux4*(1.0 - zeta2)/18.0*omz83 + aux5*(1.0 - zeta2)*omz*omz83); + + d2t1dz2 = 2.0/(1.0 + dd*r->rs); + d2t2dz2 = xt2*2.0*(47.0 - 7.0*delta)/(4.0*18.0); + d2t3dz2 = -Cf/2.0*(-2.0*(opz83 + omz83) - 4.0*r->zeta*8.0/3.0*(opz53 - omz53) + (1.0 - zeta2)*40.0/9.0*(opz23 + omz23)); + d2t4dz2 = aux4*(5.0/2.0 - delta/18.0)* + (-2.0*(xs02*opz83 + xs12*omz83) - 4.0*r->zeta*8.0/3.0*(xs02*opz53 - xs12*omz53) + + (1.0 - zeta2)*40.0/9.0*(xs02*opz23 + xs12*omz23)); + d2t5dz2 = aux5*(delta - 11.0)* + (-2.0*(xs02*opz*opz83 + xs12*omz*omz83) - 4.0*r->zeta*11.0/3.0*(xs02*opz83 - xs12*omz83) + + (1.0 - zeta2)*88.0/9.0*(xs02*opz53 + xs12*omz53)); + d2t6dz2 = -aux6*(80.0/27.0*(xs02*opz23 + xs12*omz23) - + 1.0/2.0*(xs12*omz83 + xs02*opz83) + + 8.0/3.0*(opz*xs12*omz53 + omz*xs02*opz53) - + 10.0/9.0*(opz*opz*xs12*omz23 + omz*omz*xs02*opz23)); + r->d2fdz2 = AA*(d2t1dz2 + omega*(d2t2dz2 + d2t3dz2 + d2t4dz2 + d2t5dz2 + d2t6dz2)); + + r->d2fdzxt = 4.0*AA*omega*r->xt*r->zeta*(47.0 - 7.0*delta)/(4.0*18.0); + + r->d2fdzxs[0] = 2.0*AA*omega*r->xs[0]* + (aux4*(5.0/2.0 - delta/18.0)*(-2.0*r->zeta*opz83 + (1.0 - zeta2)*8.0/3.0*opz53) + + aux5*(delta - 11.0)*(-2.0*r->zeta*opz*opz83 + (1.0 - zeta2)*11.0/3.0*opz83) - + aux6*(16.0/9.0*opz53 + 1.0/2.0*omz*opz83 - 2.0/3.0*omz*omz*opz53)); + r->d2fdzxs[1] = 2.0*AA*omega*r->xs[1]* + (aux4*(5.0/2.0 - delta/18.0)*(-2.0*r->zeta*omz83 - (1.0 - zeta2)*8.0/3.0*omz53) + + aux5*(delta - 11.0)*(-2.0*r->zeta*omz*omz83 - (1.0 - zeta2)*11/3.0*omz83) + + aux6*(16.0/9.0*omz53 + 1.0/2.0*opz*omz83 - 2.0/3.0*opz*opz*omz53)); + + r->d2fdxt2 = r->dfdxt/r->xt; + + r->d2fdxtxs[0] = 0.0; + r->d2fdxtxs[1] = 0.0; + + r->d2fdxs2[0] = r->dfdxs[0]/r->xs[0]; + r->d2fdxs2[1] = 0.0; + r->d2fdxs2[2] = r->dfdxs[1]/r->xs[1]; +} + +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_c_lyp) = { + XC_GGA_C_LYP, + XC_CORRELATION, + "Lee, Yang & Parr", + XC_FAMILY_GGA, + "C Lee, W Yang and RG Parr, Phys. Rev. B 37, 785 (1988)\n" + "B Miehlich, A Savin, H Stoll and H Preuss, Chem. Phys. Lett. 157, 200 (1989)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(gga_c_lyp_init), + NULL, + NULL, + work_gga_c, + NULL +}; diff --git a/libxc-2.2.0/src/gga_c_op.c b/libxc-2.2.0/src/gga_c_op.c new file mode 100644 index 000000000..92420ef96 --- /dev/null +++ b/libxc-2.2.0/src/gga_c_op.c @@ -0,0 +1,217 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_GGA_C_OP_B88 87 /* one-parameter progressive functional (B88 version) */ +#define XC_GGA_C_OP_PBE 86 /* one-parameter progressive functional (PBE version) */ +#define XC_GGA_C_OP_G96 85 /* one-parameter progressive functional (G96 version) */ +#define XC_GGA_C_OP_XALPHA 84 /* one-parameter progressive functional (XALPHA version) */ + +typedef struct{ + FLOAT qOPab; + xc_gga_enhancement_t enhancement_factor; +} gga_c_op_params; + + +static void gga_c_op_init(XC(func_type) *p) +{ + gga_c_op_params *params; + + assert(p != NULL && p->params == NULL); + p->params = malloc(sizeof(gga_c_op_params)); + params = (gga_c_op_params *) (p->params); + + if(p->info->number != XC_GGA_C_OP_XALPHA){ + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + } + + switch(p->info->number){ + case XC_GGA_C_OP_B88: + XC(func_init) (p->func_aux[0], XC_GGA_X_B88, XC_POLARIZED); + params->enhancement_factor = XC(gga_x_b88_enhance); + params->qOPab = 2.3670; + break; + case XC_GGA_C_OP_PBE: + XC(func_init) (p->func_aux[0], XC_GGA_X_PBE, XC_POLARIZED); + params->enhancement_factor = XC(gga_x_pbe_enhance); + params->qOPab = 2.3789; + break; + case XC_GGA_C_OP_G96: + XC(func_init) (p->func_aux[0], XC_GGA_X_G96, XC_POLARIZED); + params->enhancement_factor = XC(gga_x_g96_enhance); + params->qOPab = 2.3638; + break; + case XC_GGA_C_OP_XALPHA: + params->enhancement_factor = NULL; + params->qOPab = 2.5654; + break; + default: + fprintf(stderr, "Internal error in gga_c_op\n"); + exit(1); + } +} + +static inline void +func(const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + static const FLOAT a1 = 1.5214, a2 = 0.5764, b1 = 1.1284, b2 = 0.3183; + + gga_c_op_params *params; + FLOAT eu_f, eu_dfdx, eu_d2fdx2, ed_f, ed_dfdx, ed_d2fdx2; + FLOAT cnst, cnst13, pref, opz, omz, opz13, omz13, beta_num, beta_den, beta, beta2, f_num, f_den; + FLOAT dbeta_numdz, dbeta_numdxs[2], dbeta_dendz, dbeta_dendxs[2], dbetadz, dbetadxs[2]; + FLOAT df_numdz, df_numdrs, df_numdbeta, df_dendrs, df_dendbeta, dfdbeta; + + assert(p != NULL && p->params != NULL); + params = (gga_c_op_params *) (p->params); + + if(ABS(r->zeta) > 1.0 - p->info->min_zeta){ + r->f = 0.0; + }else{ + /* call enhancement factor */ + if(p->info->number != XC_GGA_C_OP_XALPHA){ + params->enhancement_factor(p->func_aux[0], r->order, r->xs[0], &eu_f, &eu_dfdx, &eu_d2fdx2, NULL); + params->enhancement_factor(p->func_aux[0], r->order, r->xs[1], &ed_f, &ed_dfdx, &ed_d2fdx2, NULL); + }else{ + eu_f = ed_f = 1.0; + eu_dfdx = ed_dfdx = 0.0; + eu_d2fdx2 = ed_d2fdx2 = 0.0; + } + + cnst = 4.0*M_PI/3.0; + cnst13 = CBRT(cnst); + pref = params->qOPab*2.0*X_FACTOR_C/(M_CBRT2*cnst13); + + opz = 1.0 + r->zeta; + omz = 1.0 - r->zeta; + + opz13 = POW(opz, 1.0/3.0); + omz13 = POW(omz, 1.0/3.0); + + beta_num = pref * opz13*omz13 * eu_f*ed_f; + beta_den = opz13*eu_f + omz13*ed_f; + beta = beta_num/beta_den; + beta2 = beta*beta; + + f_num = -opz*omz*(a1*beta + a2*r->rs); + f_den = 4.0*cnst*beta2*(beta2 + b1*r->rs*beta + b2*r->rs*r->rs); + + r->f = f_num/f_den; + } + + if(r->order < 1) return; + + if(ABS(r->zeta) > 1.0 - p->info->min_zeta){ + r->dfdrs = r->dfdz = r->dfdxt = r->dfdxs[0] = r->dfdxs[1] = 0.0; + }else{ + dbeta_numdz = pref * (-2.0*r->zeta/(3.0*opz13*opz13*omz13*omz13)) * eu_f*ed_f; + dbeta_numdxs[0] = pref * opz13*omz13 * eu_dfdx*ed_f; + dbeta_numdxs[1] = pref * opz13*omz13 * eu_f*ed_dfdx; + + dbeta_dendz = eu_f/(3.0*opz13*opz13) - ed_f/(3.0*omz13*omz13); + dbeta_dendxs[0] = opz13*eu_dfdx; + dbeta_dendxs[1] = omz13*ed_dfdx; + + dbetadz = ( dbeta_numdz*beta_den - beta_num*dbeta_dendz )/(beta_den*beta_den); + dbetadxs[0] = (dbeta_numdxs[0]*beta_den - beta_num*dbeta_dendxs[0])/(beta_den*beta_den); + dbetadxs[1] = (dbeta_numdxs[1]*beta_den - beta_num*dbeta_dendxs[1])/(beta_den*beta_den); + + df_numdz = 2.0*r->zeta*(a1*beta + a2*r->rs); + df_numdrs = -opz*omz*a2; + df_numdbeta = -opz*omz*a1; + + df_dendrs = 4.0*cnst*beta2*(b1*beta + 2.0*b2*r->rs); + df_dendbeta = 4.0*cnst*beta*(4.0*beta2 + 3.0*b1*r->rs*beta + 2.0*b2*r->rs*r->rs); + + dfdbeta = (df_numdbeta*f_den - f_num*df_dendbeta)/(f_den*f_den); + + r->dfdrs = (df_numdrs*f_den - f_num*df_dendrs)/(f_den*f_den); + r->dfdz = df_numdz/f_den + dfdbeta*dbetadz; + r->dfdxt = 0.0; + r->dfdxs[0] = dfdbeta*dbetadxs[0]; + r->dfdxs[1] = dfdbeta*dbetadxs[1]; + } + + if(r->order < 2) return; + +} + +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_c_op_b88) = { + XC_GGA_C_OP_B88, + XC_CORRELATION, + "one-parameter progressive functional (B88 version)", + XC_FAMILY_GGA, + "T Tsuneda, T Suzumura, and K Hirao, J. Chem. Phys. 110, 10664 (1999)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-12, 1e-32, 0.0, 1e-10, + gga_c_op_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_c_op_pbe) = { + XC_GGA_C_OP_PBE, + XC_CORRELATION, + "one-parameter progressive functional (PBE version)", + XC_FAMILY_GGA, + "T Tsuneda, T Suzumura, and K Hirao, J. Chem. Phys. 111, 5656 (1999)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-12, 1e-32, 0.0, 1e-10, + gga_c_op_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_c_op_g96) = { + XC_GGA_C_OP_G96, + XC_CORRELATION, + "one-parameter progressive functional (G96 version)", + XC_FAMILY_GGA, + "T Tsuneda, T Suzumura, and K Hirao, J. Chem. Phys. 111, 5656 (1999)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-12, 1e-32, 0.0, 1e-10, + gga_c_op_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_c_op_xalpha) = { + XC_GGA_C_OP_XALPHA, + XC_CORRELATION, + "one-parameter progressive functional (Xalpha version)", + XC_FAMILY_GGA, + "T Tsuneda, T Suzumura, and K Hirao, J. Chem. Phys. 111, 5656 (1999)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-12, 1e-32, 0.0, 1e-10, + gga_c_op_init, + NULL, NULL, + work_gga_c, + NULL +}; diff --git a/libxc-2.2.0/src/gga_c_optc.c b/libxc-2.2.0/src/gga_c_optc.c new file mode 100644 index 000000000..718824fea --- /dev/null +++ b/libxc-2.2.0/src/gga_c_optc.c @@ -0,0 +1,159 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_GGA_C_OPTC 200 /* Optimized correlation functional of Cohen and Handy */ + +static void +gga_c_optc_init(XC(func_type) *p) +{ + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + /* PW91 has always to be called polarized */ + XC(func_init)(p->func_aux[0], XC_GGA_C_PW91, XC_POLARIZED); +} + + +static inline void +func(const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + static FLOAT c1 = 1.1015, c2 = 0.6625; + FLOAT opz, omz, copz, comz, o_opz, o_copz, o_omz, o_comz; + + XC(gga_work_c_t) f_par[2], f_anti; + + opz = 1.0 + r->zeta; + omz = 1.0 - r->zeta; + copz = CBRT(opz); + comz = CBRT(omz); + + /* calculate the total part */ + f_anti.order = r->order; + f_anti.rs = r->rs; + f_anti.zeta = r->zeta; + f_anti.xt = r->xt; + f_anti.xs[0] = r->xs[0]; + f_anti.xs[1] = r->xs[1]; + + XC(gga_c_pw91_func) (p->func_aux[0], &f_anti); + + /* now the spin up */ + if(opz > p->info->min_zeta){ + f_par[0].order = r->order; + f_par[0].rs = r->rs*M_CBRT2*copz; + f_par[0].zeta = 1.0; + f_par[0].xt = r->xs[0]; + f_par[0].xs[0] = r->xs[0]; + f_par[0].xs[1] = 0.0; + + XC(gga_c_pw91_func) (p->func_aux[0], &(f_par[0])); + }else{ + f_par[0].f = 0.0; + if(r->order >= 1) f_par[0].dfdrs = f_par[0].dfdxt = f_par[0].dfdxs[0] = 0.0; + if(r->order >= 2) f_par[0].d2fdrs2 = f_par[0].d2fdrsxt = f_par[0].d2fdrsxs[0] = + f_par[0].d2fdxt2 = f_par[0].d2fdxtxs[0] = f_par[0].d2fdxs2[0] = 0.0; + } + + + /* now the spin down */ + if(omz > p->info->min_zeta){ + f_par[1].order = r->order; + f_par[1].rs = r->rs*M_CBRT2*comz; + f_par[1].zeta = -1.0; + f_par[1].xt = r->xs[1]; + f_par[1].xs[0] = 0.0; + f_par[1].xs[1] = r->xs[1]; + + XC(gga_c_pw91_func) (p->func_aux[0], &(f_par[1])); + }else{ + f_par[1].f = 0.0; + if(r->order >= 1) f_par[1].dfdrs = f_par[1].dfdxt = f_par[1].dfdxs[0] = 0.0; + if(r->order >= 2) f_par[1].d2fdrs2 = f_par[1].d2fdrsxt = f_par[1].d2fdrsxs[1] = + f_par[1].d2fdxt2 = f_par[1].d2fdxtxs[1] = f_par[1].d2fdxs2[2] = 0.0; + } + + + /* now we add everything */ + + r->f = c1*f_anti.f + (c2 - c1)*(f_par[0].f + f_par[1].f); + + if(r->order < 1) return; + + if(opz >= p->info->min_zeta){ + o_opz = 1.0/opz; + o_copz = 1.0/copz; + }else + o_opz = o_copz = 0.0; + + if(omz >= p->info->min_zeta){ + o_omz = 1.0/omz; + o_comz = 1.0/comz; + }else + o_omz = o_comz = 0.0; + + r->dfdrs = c1*f_anti.dfdrs + (c2 - c1)*M_CBRT2*(f_par[0].dfdrs*copz + f_par[1].dfdrs*comz); + r->dfdz = c1*f_anti.dfdz + (c2 - c1)*M_CBRT2*r->rs/3.0*(f_par[0].dfdrs*o_copz*o_copz - f_par[1].dfdrs*o_comz*o_comz); + r->dfdxt = c1*f_anti.dfdxt; + r->dfdxs[0] = c1*f_anti.dfdxs[0] + (c2 - c1)*(f_par[0].dfdxt + f_par[0].dfdxs[0]); + r->dfdxs[1] = c1*f_anti.dfdxs[1] + (c2 - c1)*(f_par[1].dfdxt + f_par[1].dfdxs[1]); + + if(r->order < 2) return; + + r->d2fdrs2 = c1*f_anti.d2fdrs2 + (c2 - c1)*M_CBRT2*M_CBRT2*(f_par[0].d2fdrs2*copz*copz + f_par[1].d2fdrs2*comz*comz); + r->d2fdrsz = c1*f_anti.d2fdrsz + (c2 - c1)*M_CBRT2/3.0* + (f_par[0].dfdrs*o_copz*o_copz - f_par[1].dfdrs*o_comz*o_comz + + M_CBRT2*(f_par[0].d2fdrs2*o_copz - f_par[1].d2fdrs2*o_comz)); + r->d2fdrsxt = c1*f_anti.d2fdrsxt; + r->d2fdrsxs[0] = c1*f_anti.d2fdrsxs[0] + (c2 - c1)*M_CBRT2*(f_par[0].d2fdrsxt + f_par[0].d2fdrsxs[0])*copz; + r->d2fdrsxs[1] = c1*f_anti.d2fdrsxs[1] + (c2 - c1)*M_CBRT2*(f_par[1].d2fdrsxt + f_par[1].d2fdrsxs[1])*comz; + r->d2fdz2 = c1*f_anti.d2fdz2 + (c2 - c1)*M_CBRT2*r->rs/3.0* + (-2.0/3.0*(f_par[0].dfdrs*o_opz*o_copz*o_copz + f_par[1].dfdrs*o_omz*o_comz*o_comz) + + M_CBRT2*r->rs/3.0*(f_par[0].d2fdrs2*o_opz*o_copz + f_par[1].d2fdrs2*o_omz*o_omz)); + r->d2fdzxt = c1*f_anti.d2fdzxt; + r->d2fdzxs[0] = c1*f_anti.d2fdzxs[0] + (c2 - c1)*M_CBRT2*r->rs/3.0*(f_par[0].d2fdrsxt + f_par[0].d2fdrsxs[0])*o_copz*o_copz; + r->d2fdzxs[1] = c1*f_anti.d2fdzxs[1] + (c2 - c1)*M_CBRT2*r->rs/3.0*(f_par[1].d2fdrsxt + f_par[1].d2fdrsxs[1])*o_comz*o_comz; + r->d2fdxt2 = c1*f_anti.d2fdxt2; + r->d2fdxtxs[0] = c1*f_anti.d2fdxtxs[0]; + r->d2fdxtxs[1] = c1*f_anti.d2fdxtxs[1]; + r->d2fdxs2[0] = c1*f_anti.d2fdxs2[0] + (c2 - c1)*(f_par[0].d2fdxt2 + 2.0*f_par[0].d2fdxtxs[0] + f_par[0].d2fdxs2[0]); + r->d2fdxs2[1] = c1*f_anti.d2fdxs2[1]; + r->d2fdxs2[2] = c1*f_anti.d2fdxs2[2] + (c2 - c1)*(f_par[1].d2fdxt2 + 2.0*f_par[1].d2fdxtxs[1] + f_par[1].d2fdxs2[2]); +} + +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_c_optc) = { + XC_GGA_C_OPTC, + XC_CORRELATION, + "Optimized correlation functional of Cohen and Handy", + XC_FAMILY_GGA, + "AJ Cohen and NC Handy, Mol. Phys. 99, 607-615 (2001)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-26, 1e-32, 0.0, 1e-32, /* densities smaller than 1e-26 give rise to NaNs */ + gga_c_optc_init, + NULL, NULL, + work_gga_c, + NULL +}; diff --git a/libxc-2.2.0/src/gga_c_p86.c b/libxc-2.2.0/src/gga_c_p86.c new file mode 100644 index 000000000..c515c377f --- /dev/null +++ b/libxc-2.2.0/src/gga_c_p86.c @@ -0,0 +1,163 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +/************************************************************************ + Implements Perdew 86 Generalized Gradient Approximation + correlation functional. +************************************************************************/ + +#define XC_GGA_C_P86 132 /* Perdew 86 */ + +static void +gga_c_p86_init(XC(func_type) *p) +{ + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_LDA_C_PZ, p->nspin); +} + + +static inline void +func(const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + static const FLOAT alpha = 0.023266, beta = 7.389e-6, gamma = 8.723, delta = 0.472; + static const FLOAT aa = 0.001667, bb = 0.002568; + static const FLOAT ftilde = 1.745*0.11; + + FLOAT rsconv, x1, dx1drs, dx1dxt, d2x1drs2, d2x1drsxt; + FLOAT f1, f2, H, df1, df2, dHdx1, dHdrs, d2f1, d2f2, d2Hdrs2, d2Hdx12, d2Hdrsx1; + FLOAT DD, dDDdzeta, d2DDdzeta2, CC, CCinf, dCCdrs, d2CCdrs2; + FLOAT Phi, dPhidx1, dPhidrs, d2Phidrs2, d2Phidrsx1; + + XC(lda_work_t) pw; + + rsconv = POW(4.0*M_PI/3.0, 1.0/6.0); + + pw.order = r->order; + pw.rs[0] = SQRT(r->rs); + pw.rs[1] = r->rs; + pw.rs[2] = r->rs*r->rs; + pw.zeta = r->zeta; + + XC(lda_c_pz_func)(p->func_aux[0], &pw); + + /* Equation [1].(4) */ + DD = SQRT(POW(1.0 + r->zeta, 5.0/3.0) + POW(1.0 - r->zeta, 5.0/3.0))/M_SQRT2; + + /* Equation [1].(6) */ + f1 = bb + alpha*r->rs + beta*pw.rs[2]; + f2 = 1.0 + gamma*r->rs + delta*pw.rs[2] + 1.0e4*beta*r->rs*pw.rs[2]; + CC = aa + f1/f2; + CCinf = aa + bb; + + /* Equation [1].(9) */ + x1 = r->xt/(rsconv*pw.rs[0]); + Phi = ftilde*(CCinf/CC)*x1; + + /* Equation [1].(8) */ + H = x1*x1*EXP(-Phi)*CC/DD; + r->f = pw.zk + H; + + if(r->order < 1) return; + + dDDdzeta = 5.0/(3.0*4.0*DD)*(POW(1.0 + r->zeta, 2.0/3.0) - POW(1.0 - r->zeta, 2.0/3.0)); + + df1 = alpha + 2.0*beta*r->rs; + df2 = gamma + 2.0*delta*r->rs + 3.0e4*beta*pw.rs[2]; + dCCdrs = (df1*f2 - f1*df2)/(f2*f2); + + dx1drs = -r->xt/(2.0*rsconv*r->rs*pw.rs[0]); + dx1dxt = 1.0/(rsconv*pw.rs[0]); + + dPhidx1 = ftilde*(CCinf/CC); + dPhidrs = -dCCdrs*Phi/CC; + + dHdx1 = x1*EXP(-Phi)*CC/DD*(2.0 - x1*dPhidx1); + dHdrs = x1*x1*EXP(-Phi)/DD*(dCCdrs - dPhidrs*CC); + + r->dfdrs = pw.dedrs + dHdrs + dHdx1*dx1drs; + r->dfdz = pw.dedz - H*dDDdzeta/DD; + r->dfdxt = dHdx1*dx1dxt; + r->dfdxs[0] = 0.0; + r->dfdxs[1] = 0.0; + + if(r->order < 2) return; + + d2DDdzeta2 = 0.0; + if(r->zeta < 1.0) + d2DDdzeta2 += POW(1.0 - r->zeta, -1.0/3.0); + if(r->zeta > -1.0) + d2DDdzeta2 += POW(1.0 + r->zeta, -1.0/3.0); + + d2DDdzeta2 = -dDDdzeta*dDDdzeta/DD + 10.0/(36.0*DD)*d2DDdzeta2; + + d2f1 = 2.0*beta; + d2f2 = 2.0*delta + 6.0e4*beta*r->rs; + d2CCdrs2 = (f2*(d2f1*f2 - f1*d2f2) - 2.0*df2*(df1*f2 - f1*df2))/(f2*f2*f2); + + d2Phidrs2 = -(d2CCdrs2*Phi + dCCdrs*dPhidrs - dCCdrs*dCCdrs*Phi/CC)/CC; + d2Phidrsx1 = -dCCdrs*dPhidx1/CC; + + d2x1drs2 = 3.0*r->xt/(4.0*rsconv*pw.rs[2]*pw.rs[0]); + d2x1drsxt = -1.0/(2.0*rsconv*r->rs*pw.rs[0]); + + d2Hdx12 = EXP(-Phi)*CC/DD*(2.0 + x1*dPhidx1*(x1*dPhidx1 - 4.0)); + d2Hdrs2 = x1*x1*EXP(-Phi)/DD*(d2CCdrs2 - d2Phidrs2*CC - dPhidrs*(2.0*dCCdrs - dPhidrs*CC)); + d2Hdrsx1 = x1*EXP(-Phi)/DD*((dCCdrs - CC*dPhidrs)*(2.0 - x1*dPhidx1) - CC*x1*d2Phidrsx1); + + r->d2fdrs2 = pw.d2edrs2 + d2Hdrs2 + 2.0*d2Hdrsx1*dx1drs + d2Hdx12*dx1drs*dx1drs + dHdx1*d2x1drs2; + r->d2fdrsz = pw.d2edrsz - (dHdrs + dHdx1*dx1drs)*dDDdzeta/DD; + r->d2fdrsxt = d2Hdrsx1*dx1dxt + d2Hdx12*dx1drs*dx1dxt + dHdx1*d2x1drsxt; + r->d2fdrsxs[0] = 0.0; + r->d2fdrsxs[1] = 0.0; + r->d2fdz2 = pw.d2edz2 - H*(d2DDdzeta2*DD - 2.0*dDDdzeta*dDDdzeta)/(DD*DD); + r->d2fdzxt = -dHdx1*dx1dxt*dDDdzeta/DD; + r->d2fdzxs[0] = 0.0; + r->d2fdzxs[1] = 0.0; + r->d2fdxt2 = d2Hdx12*dx1dxt*dx1dxt; + r->d2fdxtxs[0] = 0.0; + r->d2fdxtxs[1] = 0.0; + r->d2fdxs2[0] = 0.0; + r->d2fdxs2[1] = 0.0; + r->d2fdxs2[2] = 0.0; +} + +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_c_p86) = { + XC_GGA_C_P86, + XC_CORRELATION, + "Perdew 86", + XC_FAMILY_GGA, + "JP Perdew, Phys. Rev. B 33, 8822 (1986)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_c_p86_init, + NULL, + NULL, + work_gga_c, + NULL +}; diff --git a/libxc-2.2.0/src/gga_c_pbe.c b/libxc-2.2.0/src/gga_c_pbe.c new file mode 100644 index 000000000..8c50d1def --- /dev/null +++ b/libxc-2.2.0/src/gga_c_pbe.c @@ -0,0 +1,497 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +/************************************************************************ + Implements Perdew, Burke & Ernzerhof Generalized Gradient Approximation + correlation functional. + + I based this implementation on a routine from L.C. Balbas and J.M. Soler +************************************************************************/ + +#define XC_GGA_C_PBE 130 /* Perdew, Burke & Ernzerhof correlation */ +#define XC_GGA_C_PBE_SOL 133 /* Perdew, Burke & Ernzerhof correlation SOL */ +#define XC_GGA_C_XPBE 136 /* xPBE reparametrization by Xu & Goddard */ +#define XC_GGA_C_PBE_JRGX 138 /* JRGX reparametrization by Pedroza, Silva & Capelle */ +#define XC_GGA_C_RGE2 143 /* Regularized PBE */ +#define XC_GGA_C_APBE 186 /* mu fixed from the semiclassical neutral atom */ +#define XC_GGA_C_SPBE 89 /* PBE correlation to be used with the SSB exchange */ +#define XC_GGA_C_VPBE 83 /* variant PBE */ +#define XC_GGA_C_ZPBESOL 63 /* spin-dependent gradient correction to PBEsol */ +#define XC_GGA_C_PBEINT 62 /* PBE for hybrid interfaces */ +#define XC_GGA_C_ZPBEINT 61 /* spin-dependent gradient correction to PBEint */ + +typedef struct{ + FLOAT beta; +} gga_c_pbe_params; + + +static void gga_c_pbe_init(XC(func_type) *p) +{ + static const FLOAT beta[] = { + 0.06672455060314922, /* 0: original PBE */ + 0.046, /* 1: PBE sol */ + 0.089809, /* 2: xPBE */ + 3.0*10.0/(81.0*M_PI*M_PI), /* 3: PBE_JRGX */ + 0.053, /* 4: RGE2 */ + 3.0*0.260/(M_PI*M_PI), /* 5: APBE (C) */ + 0.06672455060314922, /* 6: sPBE */ + 0.0, /* 7: vPBE this is calculated */ + 0.046, /* 8: zPBEsol */ + 0.052, /* 9: PBEint */ + 0.052 /* 10: zPBEint */ + }; + + assert(p!=NULL && p->params == NULL); + p->params = malloc(sizeof(gga_c_pbe_params)); + + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_LDA_C_PW_MOD, p->nspin); + + switch(p->info->number){ + case XC_GGA_C_PBE: p->func = 0; break; + case XC_GGA_C_PBE_SOL: p->func = 1; break; + case XC_GGA_C_XPBE: p->func = 2; break; + case XC_GGA_C_PBE_JRGX: p->func = 3; break; + case XC_GGA_C_RGE2: p->func = 4; break; + case XC_GGA_C_APBE: p->func = 5; break; + case XC_GGA_C_SPBE: p->func = 6; break; + case XC_GGA_C_VPBE: p->func = 7; break; + case XC_GGA_C_ZPBESOL: p->func = 8; break; + case XC_GGA_C_PBEINT: p->func = 9; break; + case XC_GGA_C_ZPBEINT: p->func = 10; break; + default: + fprintf(stderr, "Internal error in gga_c_pbe\n"); + exit(1); + } + + XC(gga_c_pbe_set_params)(p, beta[p->func]); +} + + +void +XC(gga_c_pbe_set_params)(XC(func_type) *p, FLOAT beta) +{ + gga_c_pbe_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_c_pbe_params *) (p->params); + + params->beta = beta; +} + + +static inline void +pbe_eq8(int order, FLOAT beta, FLOAT gamm, FLOAT ecunif, FLOAT phi, + FLOAT *A, FLOAT *dbeta, FLOAT *dec, FLOAT *dphi, + FLOAT *dec2, FLOAT *decphi, FLOAT *dphi2) +{ + FLOAT phi3, f1, df1dphi, d2f1dphi2, f2, f3, dx, d2x; + + phi3 = POW(phi, 3); + f1 = ecunif/(gamm*phi3); + f2 = EXP(-f1); + f3 = f2 - 1.0; + + *A = beta/(gamm*f3); + + if(order < 1) return; + + df1dphi = -3.0*f1/phi; + dx = (*A)*f2/f3; + + *dbeta = 1.0/(gamm*f3); + *dec = dx/(gamm*phi3); + *dphi = dx*df1dphi; + + if(order < 2) return; + + d2f1dphi2 = -4.0*df1dphi/phi; + d2x = dx*(2.0*f2 - f3)/f3; + *dphi2 = d2x*df1dphi*df1dphi + dx*d2f1dphi2; + *decphi = (d2x*df1dphi*f1 + dx*df1dphi)/ecunif; + *dec2 = d2x/(gamm*gamm*phi3*phi3); +} + + +static inline void +pbe_eq7(int order, int func, FLOAT beta, FLOAT gamm, FLOAT phi, FLOAT t, FLOAT A, FLOAT B, + FLOAT *H, FLOAT *dbeta, FLOAT *dphi, FLOAT *dt, FLOAT *dA, + FLOAT *d2phi, FLOAT *d2phit, FLOAT *d2phiA, FLOAT *d2t2, FLOAT *d2tA, FLOAT *d2A2) +{ + FLOAT alpha, t2, phi3, f1, f2, f3; + FLOAT df2dbeta, df1dt, df2dt, df1dA, df2dA; + FLOAT d2f1dt2, d2f2dt2, d2f2dA2, d2f1dtA, d2f2dtA; + FLOAT ff, dffdt, dffdphi; + + t2 = t*t; + phi3 = POW(phi, 3); + + f1 = t2 + B*A*t2*t2; + f3 = 1.0 + A*f1; + f2 = beta*f1/(gamm*f3); + + if(func == 8 || func == 10){ /* zPBEsol and zPBEint */ + alpha = (func == 8) ? 4.8 : 2.4; + ff = POW(phi, alpha*t*t2); + }else + ff = 1.0; + + *H = ff*gamm*phi3*LOG(1.0 + f2); + + if(order < 1) return; + + if(func == 8 || func == 10){ /* zPBEsol and zPBEint */ + dffdphi = alpha*t*t2*ff/phi; + dffdt = 3.0*alpha*t2*ff*LOG(phi); + }else{ + dffdphi = 0.0; + dffdt = 0.0; + } + + *dphi = 3.0*(*H)/phi + (*H)*dffdphi/ff; + + df2dbeta = f2/beta; + *dbeta = ff*gamm*phi3*df2dbeta/(1.0 + f2); + + df1dt = t*(2.0 + 4.0*B*A*t2); + df2dt = beta/(gamm*f3*f3) * df1dt; + *dt = ff*gamm*phi3*df2dt/(1.0 + f2) + (*H)*dffdt/ff; + + df1dA = B*t2*t2; + df2dA = beta/(gamm*f3*f3) * (df1dA - f1*f1); + *dA = ff*gamm*phi3*df2dA/(1.0 + f2); + + if(order < 2) return; + + *d2phi = 2.0*(*dphi)/phi; + *d2phit = 3.0*(*dt)/phi; + *d2phiA = 3.0*(*dA)/phi; + + d2f1dt2 = 2.0 + 4.0*3.0*B*A*t2; + d2f2dt2 = beta/(gamm*f3*f3) * (d2f1dt2 - 2.0*A/f3*df1dt*df1dt); + *d2t2 = gamm*phi3*(d2f2dt2*(1.0 + f2) - df2dt*df2dt)/((1.0 + f2)*(1.0 + f2)); + + d2f1dtA = 4.0*B*t*t2; + d2f2dtA = beta/(gamm*f3*f3) * + (d2f1dtA - 2.0*df1dt*(f1 + A*df1dA)/f3); + *d2tA = gamm*phi3*(d2f2dtA*(1.0 + f2) - df2dt*df2dA)/((1.0 + f2)*(1.0 + f2)); + + d2f2dA2 = beta/(gamm*f3*f3*f3) *(-2.0)*(2.0*f1*df1dA - f1*f1*f1 + A*df1dA*df1dA); + *d2A2 = gamm*phi3*(d2f2dA2*(1.0 + f2) - df2dA*df2dA)/((1.0 + f2)*(1.0 + f2)); +} + + +inline void +XC(gga_c_pbe_func) (const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + /* parameter for beta of VPBE */ + static FLOAT b_1 = 0.066725, b_2 = 0.1, b_3 = 0.1778; + + FLOAT cnst_beta, phi, t; + + FLOAT A, dAdbeta, dAdec, dAdphi, d2Adec2, d2Adecphi, d2Adphi2; + FLOAT H, dHdbeta, dHdphi, dHdt, dHdA, d2Hdphi2, d2Hdphit, d2HdphiA, d2Hdt2, d2HdtA, d2HdA2; + FLOAT dfdbeta, dfdphi, dfdec, dfdt, dtdrs, dtdxt, dtdphi, dphidz; + FLOAT d2fdphi2, d2fdphit, d2fdphiec, d2fdt2, d2fdtec, d2fdec2; + FLOAT d2tdrs2, d2tdrsxt, d2tdphi2, d2tdrsphi, d2tdxtphi, d2phidz2; + FLOAT B; + + XC(lda_work_t) pw; + FLOAT tconv, auxp, auxm, beta, gamm, beta_den, dbetadrs; + + assert(p->params != NULL); + cnst_beta = ((gga_c_pbe_params *) (p->params))->beta; + + pw.order = r->order; + pw.rs[0] = SQRT(r->rs); + pw.rs[1] = r->rs; + pw.rs[2] = r->rs*r->rs; + pw.zeta = r->zeta; + + XC(lda_c_pw_func)(p->func_aux[0], &pw); + + tconv = 4.0*M_CBRT2; + + auxp = CBRT(1.0 + r->zeta); + auxm = CBRT(1.0 - r->zeta); + + phi = 0.5*(auxp*auxp + auxm*auxm); + t = r->xt/(tconv*phi*pw.rs[0]); + + if(p->func == 2) + gamm = cnst_beta*cnst_beta/(2.0*0.197363); /* for xPBE */ + else + gamm = (1.0 - LOG(2.0))/(M_PI*M_PI); + + if(p->func == 7){ + beta_den = (1.0 + b_3*r->rs); + beta = b_1 * (1.0 + b_2*r->rs)/beta_den; + }else + beta = cnst_beta; + + pbe_eq8(r->order, beta, gamm, pw.zk, phi, + &A, &dAdbeta, &dAdec, &dAdphi, &d2Adec2, &d2Adecphi, &d2Adphi2); + + /* the sPBE functional contains one term less than the original PBE, so we set it to zero */ + B = (p->func == 6) ? 0.0 : 1.0; + pbe_eq7(r->order, p->func, beta, gamm, phi, t, A, B, + &H, &dHdbeta, &dHdphi, &dHdt, &dHdA, &d2Hdphi2, &d2Hdphit, &d2HdphiA, &d2Hdt2, &d2HdtA, &d2HdA2); + + r->f = pw.zk + H; + + if(r->order < 1) return; + + if(p->func == 7){ + dbetadrs = b_1*(b_2 - b_3)/(beta_den*beta_den); + }else + dbetadrs = 0.0; + + /* full derivatives of functional */ + dfdbeta= dHdbeta + dHdA*dAdbeta; + dfdphi = dHdphi + dHdA*dAdphi; + dfdt = dHdt; + dfdec = 1.0 + dHdA*dAdec; + + dphidz = 0.0; + if(auxp > p->info->min_zeta) dphidz += 1/auxp; + if(auxm > p->info->min_zeta) dphidz -= 1/auxm; + dphidz *= 1.0/3.0; + + dtdrs = -r->xt/(2.0*tconv*phi*r->rs*pw.rs[0]); + dtdxt = t/r->xt; + dtdphi = -t/phi; + + r->dfdrs = dfdec*pw.dedrs + dfdt*dtdrs + dfdbeta*dbetadrs; + r->dfdz = dfdec*pw.dedz + (dfdphi + dfdt*dtdphi)*dphidz; + r->dfdxt = dfdt*dtdxt; + r->dfdxs[0] = 0.0; + r->dfdxs[1] = 0.0; + + if(r->order < 2) return; + + /* full derivatives of functional with respect to phi and zk */ + d2fdphi2 = d2Hdphi2 + 2.0*d2HdphiA*dAdphi + dHdA*d2Adphi2 + d2HdA2*dAdphi*dAdphi; + d2fdphit = d2Hdphit + d2HdtA*dAdphi; + d2fdphiec = d2HdphiA*dAdec + d2HdA2*dAdphi*dAdec + dHdA*d2Adecphi; + d2fdt2 = d2Hdt2; + d2fdtec = d2HdtA*dAdec; + d2fdec2 = d2HdA2*dAdec*dAdec + dHdA*d2Adec2; + + d2phidz2 = 0.0; + if(auxp > p->info->min_zeta) d2phidz2 += 1.0/((1.0 + r->zeta)*auxp); + if(auxm > p->info->min_zeta) d2phidz2 += 1.0/((1.0 - r->zeta)*auxm); + d2phidz2 *= -1.0/9.0; + + d2tdrs2 = 3.0*r->xt/(4.0*tconv*phi*pw.rs[2]*pw.rs[0]); + d2tdrsxt = dtdrs/r->xt; + d2tdphi2 = -2.0*dtdphi/phi; + d2tdrsphi = -dtdrs/phi; + d2tdxtphi = dtdphi/r->xt; + + r->d2fdrs2 = dfdec*pw.d2edrs2 + d2fdec2*pw.dedrs*pw.dedrs + 2.0*d2fdtec*pw.dedrs*dtdrs + d2fdt2*dtdrs*dtdrs + dfdt*d2tdrs2; + r->d2fdrsz = dfdec*pw.d2edrsz + pw.dedrs*(d2fdec2*pw.dedz + dphidz*(d2fdtec*dtdphi + d2fdphiec)) + + dfdt*dphidz*d2tdrsphi + dtdrs*(d2fdtec*pw.dedz + dphidz*(d2fdt2*dtdphi + d2fdphit)); + r->d2fdrsxt = dtdxt*(d2fdtec*pw.dedrs + d2fdt2*dtdrs) + dfdt*d2tdrsxt; + r->d2fdrsxs[0] = 0.0; + r->d2fdrsxs[1] = 0.0; + r->d2fdz2 = dfdec*pw.d2edz2 + d2fdec2*pw.dedz*pw.dedz + dfdt*(dtdphi*d2phidz2 + d2tdphi2*dphidz*dphidz) + + dfdphi*d2phidz2 + 2.0*dphidz*pw.dedz*(d2fdtec*dtdphi + d2fdphiec) + + dphidz*dphidz*(d2fdt2*dtdphi*dtdphi + 2.0*d2fdphit*dtdphi + d2fdphi2); + r->d2fdzxt = dfdt*d2tdxtphi*dphidz + dtdxt*(d2fdtec*pw.dedz + dphidz*(d2fdt2*dtdphi + d2fdphit)); + r->d2fdzxs[0] = 0.0; + r->d2fdzxs[1] = 0.0; + r->d2fdxt2 = d2fdt2*dtdxt*dtdxt; + r->d2fdxtxs[0] = 0.0; + r->d2fdxtxs[1] = 0.0; + r->d2fdxs2[0] = 0.0; + r->d2fdxs2[1] = 0.0; + r->d2fdxs2[2] = 0.0; +} + +#define func XC(gga_c_pbe_func) +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_c_pbe) = { + XC_GGA_C_PBE, + XC_CORRELATION, + "Perdew, Burke & Ernzerhof", + XC_FAMILY_GGA, + "JP Perdew, K Burke, and M Ernzerhof, Phys. Rev. Lett. 77, 3865 (1996)\n" + "JP Perdew, K Burke, and M Ernzerhof, Phys. Rev. Lett. 78, 1396(E) (1997)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-12, 1e-32, 0.0, 1e-32, + gga_c_pbe_init, + NULL, NULL, + work_gga_c, + NULL +}; + + +const XC(func_info_type) XC(func_info_gga_c_pbe_sol) = { + XC_GGA_C_PBE_SOL, + XC_CORRELATION, + "Perdew, Burke & Ernzerhof SOL", + XC_FAMILY_GGA, + "JP Perdew, et al, Phys. Rev. Lett. 100, 136406 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-12, 1e-32, 0.0, 1e-32, + gga_c_pbe_init, + NULL, NULL, + work_gga_c, + NULL +}; + + +const XC(func_info_type) XC(func_info_gga_c_xpbe) = { + XC_GGA_C_XPBE, + XC_CORRELATION, + "Extended PBE by Xu & Goddard III", + XC_FAMILY_GGA, + "X Xu and WA Goddard III, J. Chem. Phys. 121, 4068 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-12, 1e-32, 0.0, 1e-32, + gga_c_pbe_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_c_pbe_jrgx) = { + XC_GGA_C_PBE_JRGX, + XC_CORRELATION, + "Reparametrized PBE by Pedroza, Silva & Capelle", + XC_FAMILY_GGA, + "LS Pedroza, AJR da Silva, and K. Capelle, Phys. Rev. B 79, 201106(R) (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-12, 1e-32, 0.0, 1e-32, + gga_c_pbe_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_c_rge2) = { + XC_GGA_C_RGE2, + XC_CORRELATION, + "Regularized PBE", + XC_FAMILY_GGA, + "A Ruzsinszky, GI Csonka, and G Scuseria, J. Chem. Theory Comput. 5, 763 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-12, 1e-32, 0.0, 1e-32, + gga_c_pbe_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_c_apbe) = { + XC_GGA_C_APBE, + XC_CORRELATION, + "mu fixed from the semiclassical neutral atom", + XC_FAMILY_GGA, + "LA Constantin, E Fabiano, S Laricchia, and F Della Sala, Phys. Rev. Lett. 106, 186406 (2011)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-12, 1e-32, 0.0, 1e-32, + gga_c_pbe_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_c_spbe) = { + XC_GGA_C_SPBE, + XC_CORRELATION, + "PBE correlation to be used with the SSB exchange", + XC_FAMILY_GGA, + "M Swart, M Sola, and FM Bickelhaupt, J. Chem. Phys. 131, 094103 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-12, 1e-32, 0.0, 1e-32, + gga_c_pbe_init, + NULL, NULL, + work_gga_c, + NULL +}; + + +const XC(func_info_type) XC(func_info_gga_c_vpbe) = { + XC_GGA_C_VPBE, + XC_CORRELATION, + "variant PBE", + XC_FAMILY_GGA, + "JP Perdew, A Ruzsinszky, GI Csonka, LA Constantin, and J Sun, Phys. Rev. Lett. 103, 026403 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-12, 1e-32, 0.0, 1e-32, + gga_c_pbe_init, + NULL, NULL, + work_gga_c, + NULL +}; + + +const XC(func_info_type) XC(func_info_gga_c_zpbesol) = { + XC_GGA_C_ZPBESOL, + XC_CORRELATION, + "spin-dependent gradient correction to PBEsol", + XC_FAMILY_GGA, + "A Constantin, E Fabiano, and F Della Sala, Phys. Rev. B 84, 233103 (2011)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-12, 1e-32, 0.0, 1e-32, + gga_c_pbe_init, + NULL, NULL, + work_gga_c, + NULL +}; + + +const XC(func_info_type) XC(func_info_gga_c_pbeint) = { + XC_GGA_C_PBEINT, + XC_CORRELATION, + "PBE for hybrid interfaces", + XC_FAMILY_GGA, + "E. Fabiano, LA Constantin, and F. Della Sala, Phys. Rev. B 82, 113104 (2010)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-12, 1e-32, 0.0, 1e-32, + gga_c_pbe_init, + NULL, NULL, + work_gga_c, + NULL +}; + + +const XC(func_info_type) XC(func_info_gga_c_zpbeint) = { + XC_GGA_C_ZPBEINT, + XC_CORRELATION, + "spin-dependent gradient correction to PBEint", + XC_FAMILY_GGA, + "A Constantin, E Fabiano, and F Della Sala, Phys. Rev. B 84, 233103 (2011)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-12, 1e-32, 0.0, 1e-32, + gga_c_pbe_init, + NULL, NULL, + work_gga_c, + NULL +}; diff --git a/libxc-2.2.0/src/gga_c_pw91.c b/libxc-2.2.0/src/gga_c_pw91.c new file mode 100644 index 000000000..80c87839e --- /dev/null +++ b/libxc-2.2.0/src/gga_c_pw91.c @@ -0,0 +1,331 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include +#include "util.h" + +#define XC_GGA_C_PW91 134 /* Perdew & Wang 91 */ + +static FLOAT pw91_nu, pw91_beta; +static const FLOAT + pw91_C_c0 = 4.235e-3, + pw91_alpha = 0.09; + +static void +gga_c_pw91_init(XC(func_type) *p) +{ + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_LDA_C_PW, p->nspin); + + pw91_nu = 16.0/M_PI * CBRT(3.0*M_PI*M_PI); + pw91_beta = pw91_nu*pw91_C_c0; +} + + +static void +A_eq14(int order, FLOAT ec, FLOAT g, FLOAT *A, + FLOAT *dAec, FLOAT *dAg, + FLOAT *d2Aec2, FLOAT *d2Ag2, FLOAT *d2Aecg) +{ + FLOAT xx, expxx, g2, g3; + FLOAT dAdxx, dxxdec, dxxdg; + FLOAT d2Adxx2, d2xxdecg, d2xxdg2; + + g2 = g*g; + g3 = g*g2; + + xx = -2.0*pw91_alpha*ec/(g3*pw91_beta*pw91_beta); + expxx = EXP(xx); + + *A = (2.0*pw91_alpha/pw91_beta)/(expxx - 1.0); + + if(order < 1) return; + + dAdxx = -(*A)*expxx/(expxx - 1.0); + dxxdec = xx/ec; + dxxdg = -3.0*xx/g; + + *dAec = dAdxx*dxxdec; + *dAg = dAdxx*dxxdg; + + if(order < 2) return; + + d2Adxx2 = -dAdxx*(expxx + 1.0) / (expxx - 1.0); + d2xxdecg = dxxdg/ec; + d2xxdg2 = -4.0*dxxdg/g; + + *d2Aec2 = d2Adxx2*dxxdec*dxxdec; + *d2Aecg = d2Adxx2*dxxdec*dxxdg + dAdxx*d2xxdecg; + *d2Ag2 = d2Adxx2*dxxdg *dxxdg + dAdxx*d2xxdg2; +} + + +static void +H0_eq13(int order, FLOAT ec, FLOAT g, FLOAT t, FLOAT *H0, + FLOAT *dH0dec, FLOAT *dH0dg, FLOAT *dH0dt, + FLOAT *d2H0dec2, FLOAT *d2H0dg2, FLOAT *d2H0dt2, FLOAT *d2H0dgec, FLOAT *d2H0dtec, FLOAT *d2H0dgt) +{ + FLOAT c1, c2, A, dAdec, dAdg, d2Adec2, d2Adg2, d2Adecg; + FLOAT g3, t2, t4, n0, d0; + FLOAT f, dfdA, dfdt, pH0pg, pH0pA, pH0pt; + FLOAT d2fdA2, d2fdAt, d2fdt2, p2H0pg2, p2H0pgA, p2H0pgt, p2H0pA2, p2H0pAt, p2H0pt2; + + c1 = pw91_beta*pw91_beta/(2.0*pw91_alpha); + c2 = 2.0*pw91_alpha/pw91_beta; + + A_eq14(order, ec, g, &A, &dAdec, &dAdg, &d2Adec2, &d2Adg2, &d2Adecg); + + g3 = g*g*g; + t2 = t*t; + t4 = t2*t2; + + n0 = t2 + A*t4; + d0 = 1.0 + A*t2 + A*A*t4; + f = n0/d0; + + *H0 = c1*g3*LOG(1.0 + c2*f); + + if(order < 1) return; + + dfdA = -A*t2*t4*(2.0 + A*t2)/(d0*d0); + dfdt = 2.0*t*(1.0 + 2.0*A*t2)/(d0*d0); + + pH0pg = 3.0*(*H0)/g; + pH0pA = c1*g3*c2*dfdA/(1.0 + c2*f); + pH0pt = c1*g3*c2*dfdt/(1.0 + c2*f); + + *dH0dec = pH0pA*dAdec; + *dH0dg = pH0pg + pH0pA*dAdg; + *dH0dt = pH0pt; + + if(order < 2) return; + + d2fdA2 = 2.0*t4*t2*(A*A*t4*(A*t2 + 3.0) - 1.0)/(d0*d0*d0); + d2fdAt = -12.0*A*t4*t*(A*t2 + 1.0)/(d0*d0*d0); + d2fdt2 = (2.0 - 2.0*A*t2*(A*t2*(9.0 + 10.0*A*t2) - 3.0))/(d0*d0*d0); + + p2H0pg2 = 2.0*pH0pg/g; + p2H0pgA = 3.0*pH0pA/g; + p2H0pgt = 3.0*pH0pt/g; + p2H0pA2 = c1*g3*c2*(d2fdA2*(1.0 + c2*f) - c2*dfdA*dfdA)/((1.0 + c2*f)*(1.0 + c2*f)); + p2H0pAt = c1*g3*c2*(d2fdAt*(1.0 + c2*f) - c2*dfdA*dfdt)/((1.0 + c2*f)*(1.0 + c2*f)); + p2H0pt2 = c1*g3*c2*(d2fdt2*(1.0 + c2*f) - c2*dfdt*dfdt)/((1.0 + c2*f)*(1.0 + c2*f)); + + *d2H0dec2 = p2H0pA2*dAdec*dAdec + pH0pA*d2Adec2; + *d2H0dgec = p2H0pgA*dAdec + p2H0pA2*dAdec*dAdg + pH0pA*d2Adecg; + *d2H0dtec = p2H0pAt*dAdec; + *d2H0dg2 = p2H0pg2 + 2.0*p2H0pgA*dAdg + p2H0pA2*dAdg*dAdg + pH0pA*d2Adg2; + *d2H0dgt = p2H0pgt + p2H0pAt*dAdg; + *d2H0dt2 = p2H0pt2; +} + + +/* pade parametrized form of C-xc found in + M Rasolt & DJW Geldart, Phys. Rev. B 34, 1325 (1986) +*/ +static inline void +Rasold_Geldart_C_xc(int order, FLOAT rs, FLOAT *C_xc, FLOAT *drs, FLOAT *d2rs) +{ + const FLOAT + a[3] = {2.568, 23.266, 0.007389}, + b[3] = {1.0, 8.723, 0.472}; + + FLOAT d0, d1, d2, n0, n1, n2; + + n0 = (a[0] + rs*(a[1] + rs*a[2])); + d0 = b[0] + rs*(b[1] + rs*(b[2] + 10.0*rs*a[2])); + + *C_xc = n0/(1000.0*d0); + + if(order < 1) return; + + n1 = a[1] + 2.0*rs*a[2]; + d1 = b[1] + 2.0*rs*b[2] + 10.0*3.0*rs*rs*a[2]; + + *drs = (n1*d0 - n0*d1)/(1000.0*d0*d0); + + if(order < 2) return; + + n2 = 2.0*a[2]; + d2 = 2.0*b[2] + 10.0*3.0*2.0*rs*a[2]; + + *d2rs = (2.0*n0*d1*d1 - 2.0*d0*d1*n1 - d0*n0*d2 + d0*d0*n2)/(1000.0*d0*d0*d0); +} + + +static void +H1_eq15(int order, FLOAT rs, FLOAT g, FLOAT t, FLOAT *H1, + FLOAT *dH1drs, FLOAT *dH1dg, FLOAT *dH1dt, + FLOAT *d2H1drs2, FLOAT *d2H1dg2, FLOAT *d2H1dt2, FLOAT *d2H1dgrs, FLOAT *d2H1dtrs, FLOAT *d2H1dgt) +{ + const FLOAT C_xc0 = 2.568e-3, C_x = -0.001667; + const FLOAT a1 = -100.0*0.663436439606450070377435073068; /* -100*4/Pi (4/(9 Pi))^(1/3) */ + + FLOAT g3, g4, t2, C_xc; + FLOAT p1, dp1drs, dp1dg, dp1dt, d2p1drs2, d2p1dgrs, d2p1dtrs, d2p1dg2, d2p1dgt, d2p1dt2; + FLOAT p2, dp2drs, d2p2drs2; + + g3 = g*g*g; + g4 = g3*g; + t2 = t*t; + + p1 = a1*rs*g4*t2; + p1 = EXP(p1); + + Rasold_Geldart_C_xc(order, rs, &C_xc, &dp2drs, &d2p2drs2); + p2 = C_xc - C_xc0 - 3.0*C_x/7.0; + + *H1 = pw91_nu*p2*g3*t2*p1; + + if(order < 1) return; + + dp1drs = a1*g4*t2*p1; + dp1dg = a1*rs*4.0*g3*t2*p1; + dp1dt = a1*rs*g4*2.0*t*p1; + + *dH1drs = pw91_nu*g3*t2*(dp2drs*p1 + p2*dp1drs); + *dH1dg = pw91_nu*p2*t2*(3.0*g*g*p1 + g3*dp1dg); + *dH1dt = pw91_nu*p2*g3*(2.0*t*p1 + t2*dp1dt); + + if(order < 2) return; + + d2p1drs2 = a1*g4*t2*dp1drs; + d2p1dgrs = a1*t2*(4.0*g3*p1 + g4*dp1dg); + d2p1dtrs = a1*g4*(2.0*t *p1 + t2*dp1dt); + d2p1dg2 = a1*rs*t2*4.0*(3.0*g*g*p1 + g3*dp1dg); + d2p1dgt = a1*rs*4.0*g3*(2.0*t*p1 + t2*dp1dt); + d2p1dt2 = a1*rs*g4*2.0*(p1 + t*dp1dt); + + *d2H1drs2 = pw91_nu*g3*t2*(d2p2drs2*p1 + 2.0*dp2drs*dp1drs + p2*d2p1drs2); + *d2H1dgrs = pw91_nu*t2*(3.0*g*g*(dp2drs*p1 + p2*dp1drs) + g3*(dp2drs*dp1dg + p2*d2p1dgrs)); + *d2H1dtrs = pw91_nu*g3*(2.0*t *(dp2drs*p1 + p2*dp1drs) + t2*(dp2drs*dp1dt + p2*d2p1dtrs)); + *d2H1dg2 = pw91_nu*p2*t2*(6.0*g*p1 + 6.0*g*g*dp1dg + g3*d2p1dg2); + *d2H1dgt = pw91_nu*p2*(2.0*t*(3.0*g*g*p1 + g3*dp1dg) + t2*(3.0*g*g*dp1dt + g3*d2p1dgt)); + *d2H1dt2 = pw91_nu*p2*g3*(2.0*p1 + 4.0*t*dp1dt + t2*d2p1dt2); +} + + +void +XC(gga_c_pw91_func) (const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + FLOAT g, dgdz, d2gdz2; + FLOAT t, dtdrs, dtdxt, dtdg, d2tdrs2, d2tdrsxt, d2tdg2, d2tdgrs, d2tdxtg; + FLOAT H0, dH0dec, dH0dg, dH0dt, d2H0dec2, d2H0dg2, d2H0dt2, d2H0dgec, d2H0dtec, d2H0dgt; + FLOAT H1, dH1drs, dH1dg, dH1dt, d2H1drs2, d2H1dg2, d2H1dt2, d2H1dgrs, d2H1dtrs, d2H1dgt; + + XC(lda_work_t) pw; + FLOAT tconv, auxp, auxm; + + pw.order = r->order; + pw.rs[0] = SQRT(r->rs); + pw.rs[1] = r->rs; + pw.rs[2] = r->rs*r->rs; + pw.zeta = r->zeta; + + XC(lda_c_pw_func)(p->func_aux[0], &pw); + + tconv = 4.0*M_CBRT2; + + auxp = CBRT(1.0 + r->zeta); + auxm = CBRT(1.0 - r->zeta); + + g = 0.5*(auxp*auxp + auxm*auxm); /* g is called phi in PBE */ + t = r->xt/(tconv*g*pw.rs[0]); + + H0_eq13(r->order, pw.zk, g, t, &H0, &dH0dec, &dH0dg, &dH0dt, + &d2H0dec2, &d2H0dg2, &d2H0dt2, &d2H0dgec, &d2H0dtec, &d2H0dgt); + H1_eq15(r->order, r->rs, g, t, &H1, &dH1drs, &dH1dg, &dH1dt, + &d2H1drs2, &d2H1dg2, &d2H1dt2, &d2H1dgrs, &d2H1dtrs, &d2H1dgt); + + r->f = pw.zk + H0 + H1; + + if(r->order < 1) return; + + dgdz = 0.0; + if(auxp > p->info->min_zeta) dgdz += 1/auxp; + if(auxm > p->info->min_zeta) dgdz -= 1/auxm; + dgdz *= 1.0/3.0; + + dtdrs = -r->xt/(2.0*tconv*g*r->rs*pw.rs[0]); + dtdxt = t/r->xt; + dtdg = -t/g; + + r->dfdrs = dH1drs + (1.0 + dH0dec)*pw.dedrs + (dH0dt + dH1dt)*dtdrs; + r->dfdz = (1.0 + dH0dec)*pw.dedz + (dH0dg + dH1dg + (dH0dt + dH1dt)*dtdg)*dgdz; + r->dfdxt = (dH0dt + dH1dt)*dtdxt; + r->dfdxs[0] = 0.0; + r->dfdxs[1] = 0.0; + + if(r->order < 2) return; + + d2gdz2 = 0.0; + if(auxp > p->info->min_zeta) d2gdz2 += 1.0/((1.0 + r->zeta)*auxp); + if(auxm > p->info->min_zeta) d2gdz2 += 1.0/((1.0 - r->zeta)*auxm); + d2gdz2 *= -1.0/9.0; + + d2tdrs2 = 3.0*r->xt/(4.0*tconv*g*pw.rs[2]*pw.rs[0]); + d2tdrsxt = dtdrs/r->xt; + d2tdg2 = -2.0*dtdg/g; + d2tdgrs = -dtdrs/g; + d2tdxtg = dtdg/r->xt; + + r->d2fdrs2 = d2H1drs2 + d2H1dtrs*dtdrs + (1.0 + dH0dec)*pw.d2edrs2 + d2H0dec2*pw.dedrs*pw.dedrs + + 2.0*d2H0dtec*pw.dedrs*dtdrs + (d2H0dt2 + d2H1dt2)*dtdrs*dtdrs + (dH0dt + dH1dt)*d2tdrs2; + r->d2fdrsz = (1.0 + dH0dec)*pw.d2edrsz + pw.dedrs*(d2H0dec2*pw.dedz + dgdz*(d2H0dtec*dtdg + d2H0dgec)) + + (d2H1dgrs + d2H1dtrs*dtdg)*dgdz + (dH0dt + dH1dt)*dgdz*d2tdgrs + + dtdrs*(d2H0dtec*pw.dedz + dgdz*((d2H0dt2 + d2H1dt2)*dtdg + d2H0dgt + d2H1dgt)); + r->d2fdrsxt = d2H1dtrs*dtdxt + dtdxt*(d2H0dtec*pw.dedrs + (d2H0dt2 + d2H1dt2)*dtdrs) + (dH0dt + dH1dt)*d2tdrsxt; + r->d2fdrsxs[0] = 0.0; + r->d2fdrsxs[1] = 0.0; + r->d2fdz2 = (1.0 + dH0dec)*pw.d2edz2 + d2H0dec2*pw.dedz*pw.dedz + (dH0dt + dH1dt)*(dtdg*d2gdz2 + d2tdg2*dgdz*dgdz) + + (dH0dg + dH1dg)*d2gdz2 + 2.0*dgdz*pw.dedz*(d2H0dtec*dtdg + d2H0dgec) + + dgdz*dgdz*((d2H0dt2 + d2H1dt2)*dtdg*dtdg + 2.0*(d2H0dgt + d2H1dgt)*dtdg + d2H0dg2 + d2H1dg2); + r->d2fdzxt = (dH0dt + dH1dt)*d2tdxtg*dgdz + dtdxt*(d2H0dtec*pw.dedz + dgdz*((d2H0dt2 + d2H1dt2)*dtdg + d2H0dgt + d2H1dgt)); + r->d2fdzxs[0] = 0.0; + r->d2fdzxs[1] = 0.0; + r->d2fdxt2 = (d2H0dt2 + d2H1dt2)*dtdxt*dtdxt; + r->d2fdxtxs[0] = 0.0; + r->d2fdxtxs[1] = 0.0; + r->d2fdxs2[0] = 0.0; + r->d2fdxs2[1] = 0.0; + r->d2fdxs2[2] = 0.0; +} + +#define func XC(gga_c_pw91_func) +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_c_pw91) = { + XC_GGA_C_PW91, + XC_CORRELATION, + "Perdew & Wang 91", + XC_FAMILY_GGA, + "JP Perdew, JA Chevary, SH Vosko, KA Jackson, MR Pederson, DJ Singh, and C Fiolhais, Phys. Rev. B 46, 6671 (1992)\n" + "JP Perdew, JA Chevary, SH Vosko, KA Jackson, MR Pederson, DJ Singh, and C Fiolhais, Phys. Rev. B 48, 4978(E) (1993)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-12, 1e-32, 0.0, 1e-32, + gga_c_pw91_init, + NULL, NULL, + work_gga_c, + NULL +}; diff --git a/libxc-2.2.0/src/gga_c_q2d.c b/libxc-2.2.0/src/gga_c_q2d.c new file mode 100644 index 000000000..58dca77c5 --- /dev/null +++ b/libxc-2.2.0/src/gga_c_q2d.c @@ -0,0 +1,191 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include + +#include "util.h" + +#define XC_GGA_C_Q2D 47 /* Chiodo et al */ + +static void gga_c_q2d_init(XC(func_type) *p) +{ + p->n_func_aux = 2; + p->func_aux = (XC(func_type) **) malloc(2*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + p->func_aux[1] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_LDA_C_2D_AMGB, p->nspin); + XC(func_init)(p->func_aux[1], XC_GGA_C_PBE, p->nspin); +} + + +inline void +XC(gga_c_q2d_func) (const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + const FLOAT rs2D_factor = 1.704, dd = 1e6; + + FLOAT rs2D, phi, tconv, auxp, auxm, t, t2, t4, t6, num, den, fac; + FLOAT drs2Ddrs, drs2Ddxt, d2rs2Ddrsxt, d2rs2Ddxt2; + FLOAT dphidz, dtdrs, dtdxt, dtdphi, dtdz, dnumdt, ddendt, dfacdt; + FLOAT d2phidz2, d2tdrs2, d2tdrsxt, d2tdphi2, d2tdrsphi, d2tdxtphi, d2tdz2, d2tdrsz, d2tdzxt, d2numdt2, d2dendt2, d2facdt2; + + XC(lda_work_t) ldaw; + XC(gga_work_c_t) ggaw; + + /* we start by getting the 2D LDA */ + rs2D = rs2D_factor*r->rs*SQRT(X2S*r->xt)/RS_FACTOR; + + ldaw.order = r->order; + + ldaw.rs[0] = SQRT(rs2D); + ldaw.rs[1] = rs2D; + ldaw.rs[2] = rs2D*rs2D; + ldaw.zeta = r->zeta; + + XC(lda_c_2d_amgb_func)(p->func_aux[0], &ldaw); + + /* now we get the PBE */ + memcpy(&ggaw, r, sizeof(XC(gga_work_c_t))); + + XC(gga_c_pbe_func)(p->func_aux[1], &ggaw); + + /* now comes the interpolation between them */ + tconv = 4.0*M_CBRT2; + + auxp = CBRT(1.0 + r->zeta); + auxm = CBRT(1.0 - r->zeta); + + phi = 0.5*(auxp*auxp + auxm*auxm); + t = r->xt/(tconv*phi*SQRT(r->rs)); + + t2 = t*t; + t4 = t2*t2; + t6 = t4*t2; + + num = t4*(1.0 + t2); + den = dd + t6; + fac = num/den; + + r->f = ggaw.f + fac*(-ggaw.f + ldaw.zk); + + if(r->order < 1) return; + + drs2Ddrs = rs2D/r->rs; + drs2Ddxt = rs2D/(2.0*r->xt); + + dphidz = 0.0; + if(auxp > p->info->min_zeta) dphidz += 1/auxp; + if(auxm > p->info->min_zeta) dphidz -= 1/auxm; + dphidz *= 1.0/3.0; + + dtdrs = -t/(2.0*r->rs); + dtdxt = t/r->xt; + dtdphi = -t/phi; + dtdz = dtdphi*dphidz; + + dnumdt = t*t2*(4.0 + 6.0*t2); + ddendt = 6.0*t*t4; + dfacdt = DFRACTION(num, dnumdt, den, ddendt); + + r->dfdrs = ggaw.dfdrs + fac*(-ggaw.dfdrs + ldaw.dedrs*drs2Ddrs) + dfacdt*dtdrs*(-ggaw.f + ldaw.zk); + r->dfdz = ggaw.dfdz + fac*(-ggaw.dfdz + ldaw.dedz) + dfacdt*dtdz*(-ggaw.f + ldaw.zk); + r->dfdxt = ggaw.dfdxt + fac*(-ggaw.dfdxt + ldaw.dedrs*drs2Ddxt) + dfacdt*dtdxt*(-ggaw.f + ldaw.zk); + r->dfdxs[0] = (1.0 - fac)*ggaw.dfdxs[0]; + r->dfdxs[1] = (1.0 - fac)*ggaw.dfdxs[1]; + + + if(r->order < 2) return; + + d2rs2Ddrsxt = drs2Ddxt/r->rs; + d2rs2Ddxt2 = -drs2Ddxt/(2.0*r->xt); + + d2phidz2 = 0.0; + if(auxp > p->info->min_zeta) d2phidz2 += 1.0/((1.0 + r->zeta)*auxp); + if(auxm > p->info->min_zeta) d2phidz2 += 1.0/((1.0 - r->zeta)*auxm); + d2phidz2 *= -1.0/9.0; + + d2tdrs2 = -3.0*dtdrs/(2.0*r->rs); + d2tdrsxt = dtdrs/r->xt; + + d2tdphi2 = -2.0*dtdphi/phi; + d2tdrsphi = -dtdrs/phi; + d2tdxtphi = dtdphi/r->xt; + + d2tdz2 = d2tdphi2*dphidz*dphidz + dtdphi*d2phidz2; + d2tdrsz = d2tdrsphi*dphidz; + d2tdzxt = d2tdxtphi*dphidz; + + d2numdt2 = t2*(12.0 + 30.0*t2); + d2dendt2 = 30.0*t4; + d2facdt2 = D2FRACTION(num, dnumdt, d2numdt2, den, ddendt, d2dendt2); + + r->d2fdrs2 = ggaw.d2fdrs2 + fac*(-ggaw.d2fdrs2 + ldaw.d2edrs2*drs2Ddrs*drs2Ddrs) + + 2.0*dfacdt*dtdrs*(-ggaw.dfdrs + ldaw.dedrs*drs2Ddrs) + (d2facdt2*dtdrs*dtdrs + dfacdt*d2tdrs2)*(-ggaw.f + ldaw.zk); + + r->d2fdrsz = ggaw.d2fdrsz + fac*(-ggaw.d2fdrsz + ldaw.d2edrsz*drs2Ddrs) + + dfacdt*dtdrs*(-ggaw.dfdz + ldaw.dedz) + dfacdt*dtdz*(-ggaw.dfdrs + ldaw.dedrs*drs2Ddrs) + + (d2facdt2*dtdrs*dtdz + dfacdt*d2tdrsz)*(-ggaw.f + ldaw.zk); + + r->d2fdrsxt = ggaw.d2fdrsxt + fac*(-ggaw.d2fdrsxt + ldaw.d2edrs2*drs2Ddrs*drs2Ddxt + ldaw.dedrs*d2rs2Ddrsxt) + + dfacdt*dtdrs*(-ggaw.dfdxt + ldaw.dedrs*drs2Ddxt) + dfacdt*dtdxt*(-ggaw.dfdrs + ldaw.dedrs*drs2Ddrs) + + (d2facdt2*dtdrs*dtdxt + dfacdt*d2tdrsxt)*(-ggaw.f + ldaw.zk); + + r->d2fdrsxs[0] = 0.0; + r->d2fdrsxs[1] = 0.0; + + r->d2fdz2 = ggaw.d2fdz2 + fac*(-ggaw.d2fdz2 + ldaw.d2edz2) + + 2.0*dfacdt*dtdz*(-ggaw.dfdz + ldaw.dedz) + (d2facdt2*dtdz*dtdz + dfacdt*d2tdz2)*(-ggaw.f + ldaw.zk); + + r->d2fdzxt = ggaw.d2fdzxt + fac*(-ggaw.d2fdzxt + ldaw.d2edrsz*drs2Ddxt) + + dfacdt*dtdxt*(-ggaw.dfdz + ldaw.dedz) + dfacdt*dtdz*(-ggaw.dfdxt + ldaw.dedrs*drs2Ddxt) + + (d2facdt2*dtdxt*dtdz + dfacdt*d2tdzxt)*(-ggaw.f + ldaw.zk); + + r->d2fdzxs[0] = 0.0; + r->d2fdzxs[1] = 0.0; + + r->d2fdxt2 = ggaw.d2fdxt2 + fac*(-ggaw.d2fdxt2 + ldaw.d2edrs2*drs2Ddxt*drs2Ddxt + ldaw.dedrs*d2rs2Ddxt2) + + 2.0*dfacdt*dtdxt*(-ggaw.dfdxt + ldaw.dedrs*drs2Ddxt) + d2facdt2*dtdxt*dtdxt*(-ggaw.f + ldaw.zk); + + r->d2fdxtxs[0] = 0.0; + r->d2fdxtxs[1] = 0.0; + r->d2fdxs2[0] = 0.0; + r->d2fdxs2[1] = 0.0; + r->d2fdxs2[2] = 0.0; + +} + +#define func XC(gga_c_q2d_func) +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_c_q2d) = { + XC_GGA_C_Q2D, + XC_CORRELATION, + "Chiodo et al", + XC_FAMILY_GGA, + "L Chiodo, LA Constantin, E Fabiano, and F Della Sala, Phys. Rev. Lett. 108, 126402 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-23, 0.0, 1e-32, + gga_c_q2d_init, + NULL, NULL, + work_gga_c, + NULL +}; + diff --git a/libxc-2.2.0/src/gga_c_sogga11.c b/libxc-2.2.0/src/gga_c_sogga11.c new file mode 100644 index 000000000..fed17aeab --- /dev/null +++ b/libxc-2.2.0/src/gga_c_sogga11.c @@ -0,0 +1,207 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_GGA_C_SOGGA11 152 /* Second-order generalized gradient approximation 2011 */ +#define XC_GGA_C_SOGGA11_X 159 /* To be used with hyb_gga_x_SOGGA11-X */ + +static void +gga_c_sogga11_init(XC(func_type) *p) +{ + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_LDA_C_PW_MOD, p->nspin); + + switch(p->info->number){ + case XC_GGA_C_SOGGA11: p->func = 0; break; + case XC_GGA_C_SOGGA11_X: p->func = 1; break; + default: + fprintf(stderr, "Internal error in gga_c_sogga11\n"); + exit(1); + } +} + + +static inline void +func(const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + static FLOAT beta = 15.75592*0.004235; /* the usual value of 0.066726 */ + const FLOAT aa[][6] = { + {0.50000, -4.62334, 8.00410, -130.226, 38.2685, 69.5599}, + {0.50000, 78.2439, 25.7211, -13.8830, -9.87375, -14.1357} + }; + const FLOAT bb[][6] = { + {0.50000, 3.62334, 9.36393, 34.5114, -18.5684, -0.16519}, + {0.50000, -79.2439, 16.3725, 2.08129, 7.50769, -10.1861} + }; + + FLOAT phi, dphidz, d2phidz2; + FLOAT y, dydrs, dydxt, dydz, d2ydrs2, d2ydrsxt, d2ydrsz, d2ydxt2, d2ydxtz, d2ydz2; + FLOAT pyprs, pypzk, pypxt, pypphi; + FLOAT p2yprs2, p2yprszk, p2yprsxt, p2yprsphi, p2ypzk2, p2ypzkxt, p2ypzkphi, p2ypxt2, p2ypxtphi; + FLOAT dfdy, d2fdy2; + FLOAT den0, den1, t0, dt0, d2t0, t1, dt1, d2t1, f0, df0, d2f0, f1, df1, d2f1; + + XC(lda_work_t) pw; + FLOAT alpha, auxp, auxm; + + pw.order = r->order; + pw.rs[0] = SQRT(r->rs); + pw.rs[1] = r->rs; + pw.rs[2] = r->rs*r->rs; + pw.zeta = r->zeta; + + XC(lda_c_pw_func)(p->func_aux[0], &pw); + + alpha = beta/(16.0*M_CBRT2*M_CBRT2); + + auxp = CBRT(1.0 + r->zeta); + auxm = CBRT(1.0 - r->zeta); + + phi = 0.5*(auxp*auxp + auxm*auxm); + y = -alpha*phi*r->xt*r->xt/(r->rs*pw.zk); + + den0 = -1.0/(1.0 + y); + f0 = 1.0 + den0; + den1 = -EXP(-y); + f1 = 1.0 + den1; + + t0 = aa[p->func][0] + f0*(aa[p->func][1] + f0*(aa[p->func][2] + f0*(aa[p->func][3] + f0*(aa[p->func][4] + f0*aa[p->func][5])))); + t1 = bb[p->func][0] + f1*(bb[p->func][1] + f1*(bb[p->func][2] + f1*(bb[p->func][3] + f1*(bb[p->func][4] + f1*bb[p->func][5])))); + r->f = pw.zk*(t0 + t1); + + if(r->order < 1) return; + + dphidz = 0.0; + if(auxp > p->info->min_zeta) dphidz += 1/auxp; + if(auxm > p->info->min_zeta) dphidz -= 1/auxm; + dphidz *= 1.0/3.0; + + /* partial derivatives */ + pyprs = -y/r->rs; + pypzk = -y/pw.zk; + pypxt = -2.0*alpha*phi*r->xt/(r->rs*pw.zk); + pypphi = y/phi; + + /* full derivatives */ + dydrs = pyprs + pypzk*pw.dedrs; + dydxt = pypxt; + dydz = pypphi*dphidz + pypzk*pw.dedz; + + df0 = den0*den0; + df1 = -den1; + + dt0 = aa[p->func][1] + f0*(2.0*aa[p->func][2] + f0*(3.0*aa[p->func][3] + f0*(4.0*aa[p->func][4] + f0*5.0*aa[p->func][5]))); + dt1 = bb[p->func][1] + f1*(2.0*bb[p->func][2] + f1*(3.0*bb[p->func][3] + f1*(4.0*bb[p->func][4] + f1*5.0*bb[p->func][5]))); + + dfdy = dt0*df0 + dt1*df1; + + r->dfdrs = pw.dedrs*(t0 + t1) + pw.zk*dfdy*dydrs; + r->dfdz = pw.dedz *(t0 + t1) + pw.zk*dfdy*dydz; + r->dfdxt = pw.zk*dfdy*dydxt; + r->dfdxs[0] = 0.0; + r->dfdxs[1] = 0.0; + + if(r->order < 2) return; + + d2phidz2 = 0.0; + if(auxp > p->info->min_zeta) d2phidz2 += 1.0/((1.0 + r->zeta)*auxp); + if(auxm > p->info->min_zeta) d2phidz2 += 1.0/((1.0 - r->zeta)*auxm); + d2phidz2 *= -1.0/9.0; + + p2yprs2 = -2.0*pyprs/r->rs; + p2yprszk = -pypzk/r->rs; + p2yprsxt = -pypxt/r->rs; + p2yprsphi = -pypphi/r->rs; + p2ypzk2 = -2.0*pypzk/pw.zk; + p2ypzkxt = -pypxt/pw.zk; + p2ypzkphi = -pypphi/pw.zk; + p2ypxt2 = -2.0*alpha*phi/(r->rs*pw.zk); + p2ypxtphi = pypxt/phi; + + d2ydrs2 = p2yprs2 + 2.0*p2yprszk*pw.dedrs + pypzk*pw.d2edrs2 + p2ypzk2*pw.dedrs*pw.dedrs; + d2ydrsxt = p2yprsxt + p2ypzkxt*pw.dedrs; + d2ydrsz = pypzk*pw.d2edrsz + dphidz*(p2yprsphi + p2ypzkphi*pw.dedrs) + pw.dedz*(p2yprszk + p2ypzk2*pw.dedrs); + d2ydxt2 = p2ypxt2; + d2ydxtz = p2ypxtphi*dphidz + p2ypzkxt*pw.dedz; + d2ydz2 = pypphi*d2phidz2 + pypzk*pw.d2edz2 + 2.0*p2ypzkphi*dphidz*pw.dedz + p2ypzk2*pw.dedz*pw.dedz; + + d2f0 = 2.0*den0*df0; + d2f1 = -df1; + + d2t0 = 2.0*aa[p->func][2] + f0*(6.0*aa[p->func][3] + f0*(12.0*aa[p->func][4] + f0*20.0*aa[p->func][5])); + d2t1 = 2.0*bb[p->func][2] + f1*(6.0*bb[p->func][3] + f1*(12.0*bb[p->func][4] + f1*20.0*bb[p->func][5])); + + d2fdy2 = d2t0*df0*df0 + dt0*d2f0 + d2t1*df1*df1 + dt1*d2f1; + + r->d2fdrs2 = pw.d2edrs2*(t0 + t1) + 2.0*pw.dedrs*dfdy*dydrs + pw.zk*(d2fdy2*dydrs*dydrs + dfdy*d2ydrs2); + r->d2fdrsz = pw.d2edrsz*(t0 + t1) + dfdy*(pw.dedrs*dydz + pw.dedz*dydrs) + + pw.zk*(d2fdy2*dydrs*dydz + dfdy*d2ydrsz); + r->d2fdrsxt = pw.dedrs*dfdy*dydxt + pw.zk*(d2fdy2*dydrs*dydxt + dfdy*d2ydrsxt); + r->d2fdrsxs[0] = 0.0; + r->d2fdrsxs[1] = 0.0; + r->d2fdz2 = pw.d2edz2*(t0 + t1) + 2.0*pw.dedz*dfdy*dydz + pw.zk*(d2fdy2*dydz*dydz + dfdy*d2ydz2); + r->d2fdzxt = pw.dedz*dfdy*dydxt + pw.zk*(d2fdy2*dydz*dydxt + dfdy*d2ydxtz); + r->d2fdzxs[0] = 0.0; + r->d2fdzxs[1] = 0.0; + r->d2fdxt2 = pw.zk*(d2fdy2*dydxt*dydxt + dfdy*d2ydxt2); + r->d2fdxtxs[0] = 0.0; + r->d2fdxtxs[1] = 0.0; + r->d2fdxs2[0] = 0.0; + r->d2fdxs2[1] = 0.0; + r->d2fdxs2[2] = 0.0; +} + +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_c_sogga11) = { + XC_GGA_C_SOGGA11, + XC_CORRELATION, + "Second-order generalized gradient approximation 2011", + XC_FAMILY_GGA, + "R Peverati, Y Zhao, and DG Truhlar, J. Phys. Chem. Lett. 2, 1911-1997 (2011)\n" + "http://comp.chem.umn.edu/mfm/index.html", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-27, 1e-32, 0.0, 1e-32, + gga_c_sogga11_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_c_sogga11_x) = { + XC_GGA_C_SOGGA11_X, + XC_CORRELATION, + "To be used with hyb_gga_x_SOGGA11-X", + XC_FAMILY_GGA, + "R Peverati and DG Truhlar, J. Chem. Phys. 135, 191102 (2011)\n" + "http://comp.chem.umn.edu/mfm/index.html", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-26, 1e-32, 0.0, 1e-32, + gga_c_sogga11_init, + NULL, NULL, + work_gga_c, + NULL +}; diff --git a/libxc-2.2.0/src/gga_c_tca.c b/libxc-2.2.0/src/gga_c_tca.c new file mode 100644 index 000000000..9d7dcebad --- /dev/null +++ b/libxc-2.2.0/src/gga_c_tca.c @@ -0,0 +1,177 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_GGA_C_TCA 100 /* Tognetti, Cortona, Adamo */ +#define XC_GGA_C_REVTCA 99 /* Tognetti, Cortona, Adamo (revised) */ + +static void +gga_c_tca_init(XC(func_type) *p) +{ + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_LDA_C_RC04, p->nspin); +} + + +static inline void +func(const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + const FLOAT sigma=1.43, alpha=2.30; + const FLOAT xconv = X2S*M_CBRT2; + + FLOAT ss, ssalpha, aux, Bs, dBs, d2Bs; + FLOAT zeta2, zeta4, aa, arg, dargdrs, dargdxt, sinc, dsinc, DD, dDDdz, dDDdrs, dDDdxt; + FLOAT d2sinc, d2argdrs2, d2argdrsxt, d2DDdrs2, d2DDdrsz, d2DDdrsxt, d2DDdz2, d2DDdzxt, d2DDdxt2; + + XC(lda_work_t) pw; + + pw.order = r->order; + pw.rs[0] = SQRT(r->rs); + pw.rs[1] = r->rs; + pw.rs[2] = r->rs*r->rs; + pw.zeta = r->zeta; + + XC(lda_c_rc04_func)(p->func_aux[0], &pw); + + ss = xconv*r->xt; + + ssalpha = POW(ss, alpha); + aux = 1.0 + sigma*ssalpha; + Bs = 1.0/aux; + + if(p->info->number == XC_GGA_C_REVTCA){ + zeta2 = r->zeta*r->zeta; + zeta4 = zeta2*zeta2; + aa = M_PI*CBRT(9.0*M_PI/4.0); + arg = aa*ss/r->rs; + sinc = (arg == 0.0) ? 1.0 : SIN(arg)/arg; + + DD = 1.0 - zeta4*(1.0 - sinc*sinc); + }else{ + DD = 1.0; + } + + r->f = pw.zk*Bs*DD; + + if(r->order < 1) return; + + dBs = -sigma*alpha*ssalpha * xconv/(ss*aux*aux); + + if(p->info->number == XC_GGA_C_REVTCA){ + dsinc = (arg == 0.0) ? 0.0 : COS(arg)/arg - SIN(arg)/(arg*arg); + + dargdrs = -arg/r->rs; + dargdxt = aa*xconv/r->rs; + + dDDdrs = 2.0*zeta4*sinc*dsinc*dargdrs; + dDDdxt = 2.0*zeta4*sinc*dsinc*dargdxt; + dDDdz = -4.0*r->zeta*zeta2*(1.0 - sinc*sinc); + }else{ + dDDdrs = 0.0; + dDDdz = 0.0; + dDDdxt = 0.0; + } + + r->dfdrs = Bs*(pw.dedrs*DD + pw.zk*dDDdrs); + r->dfdz = Bs*(pw.dedz *DD + pw.zk*dDDdz); + r->dfdxt = pw.zk*(dBs*DD + Bs*dDDdxt); + r->dfdxs[0] = 0.0; + r->dfdxs[1] = 0.0; + + if(r->order < 2) return; + + d2Bs = -dBs/(ss*aux) * xconv * (1.0 - alpha + sigma*(1.0 + alpha)*ssalpha); + + if(p->info->number == XC_GGA_C_REVTCA){ + d2sinc = (arg == 0.0) ? -1.0/3.0 : -(2.0*arg*COS(arg) + (arg*arg - 2.0)*SIN(arg))/(arg*arg*arg); + + d2argdrs2 = -2.0*dargdrs/r->rs; + d2argdrsxt = -dargdxt/r->rs; + + d2DDdrs2 = 2.0*zeta4*((dsinc*dsinc + sinc*d2sinc)*dargdrs*dargdrs + sinc*dsinc*d2argdrs2); + d2DDdrsz = 8.0*r->zeta*zeta2*sinc*dsinc*dargdrs; + d2DDdrsxt = 2.0*zeta4*((dsinc*dsinc + sinc*d2sinc)*dargdrs*dargdxt + sinc*dsinc*d2argdrsxt); + d2DDdz2 = -12.0*zeta2*(1.0 - sinc*sinc); + d2DDdzxt = 8.0*r->zeta*zeta2*sinc*dsinc*dargdxt; + d2DDdxt2 = 2.0*zeta4*((dsinc*dsinc + sinc*d2sinc)*dargdxt*dargdxt); + }else{ + d2DDdrs2 = 0.0; + d2DDdrsz = 0.0; + d2DDdrsxt = 0.0; + d2DDdz2 = 0.0; + d2DDdzxt = 0.0; + d2DDdxt2 = 0.0; + } + + r->d2fdrs2 = Bs*(pw.d2edrs2*DD + 2.0*pw.dedrs*dDDdrs + pw.zk*d2DDdrs2); + r->d2fdrsz = Bs*(pw.d2edrsz*DD + pw.dedrs*dDDdz + pw.dedz*dDDdrs + pw.zk*d2DDdrsz); + r->d2fdrsxt = pw.dedrs*(dBs*DD + Bs*dDDdxt) + pw.zk*(dBs*dDDdrs + Bs*d2DDdrsxt); + r->d2fdrsxs[0] = 0.0; + r->d2fdrsxs[1] = 0.0; + r->d2fdz2 = Bs*(pw.d2edz2*DD + 2.0*pw.dedz*dDDdz + pw.zk*d2DDdz2); + r->d2fdzxt = pw.dedz*(dBs*DD + Bs*dDDdxt) + pw.zk*(dBs*dDDdz + Bs*d2DDdzxt); + r->d2fdzxs[0] = 0.0; + r->d2fdzxs[1] = 0.0; + r->d2fdxt2 = pw.zk*(d2Bs*DD + 2.0*dBs*dDDdxt + Bs*d2DDdxt2); + r->d2fdxtxs[0] = 0.0; + r->d2fdxtxs[1] = 0.0; + r->d2fdxs2[0] = 0.0; + r->d2fdxs2[1] = 0.0; + r->d2fdxs2[2] = 0.0; +} + +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_c_tca) = { + XC_GGA_C_TCA, + XC_CORRELATION, + "Tognetti, Cortona, Adamo", + XC_FAMILY_GGA, + "V Tognetti, P Cortona, and C Adamo, J. Chem. Phys. 128, 034101 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_c_tca_init, + NULL, + NULL, + work_gga_c, + NULL +}; + + +const XC(func_info_type) XC(func_info_gga_c_revtca) = { + XC_GGA_C_REVTCA, + XC_CORRELATION, + "Tognetti, Cortona, Adamo (revised)", + XC_FAMILY_GGA, + "V Tognetti, P Cortona, and C Adamo, Chem. Phys. Lett. 460, 536-539 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_c_tca_init, + NULL, + NULL, + work_gga_c, + NULL +}; diff --git a/libxc-2.2.0/src/gga_c_wi.c b/libxc-2.2.0/src/gga_c_wi.c new file mode 100644 index 000000000..4a6f41329 --- /dev/null +++ b/libxc-2.2.0/src/gga_c_wi.c @@ -0,0 +1,129 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_GGA_C_WI0 153 /* Wilson & Ivanov initial version */ +#define XC_GGA_C_WI 148 /* Wilson & Ivanov */ + +static void +gga_c_wi_init(XC(func_type) *p) +{ + switch(p->info->number){ + case XC_GGA_C_WI0: p->func = 0; break; + case XC_GGA_C_WI: p->func = 1; break; + default: + fprintf(stderr, "Internal error in gga_c_wi\n"); + exit(1); + } +} + + +static inline void +func(const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + static struct { + FLOAT a, b, c, d, k; + } *par, wi_par[2] = {{-0.44, 0.0032407, 7.8, 0.0073, 0.000311}, + {-0.00652, 0.0007, 0.21, 0.002, 0.001}}; + + FLOAT xt0, xt2, xt52, xt72, cnst_rs, aux; + FLOAT num, den, ddendrs, dnumdxt, ddendxt, d2dendrsxt, d2numdxt2, d2dendxt2, d3dendrsxt2, d3dendxt3, d3numdxt3; + + par = &(wi_par[p->func]); + + cnst_rs = CBRT(4.0*M_PI/3.0); + xt2 = r->xt*r->xt; + xt0 = SQRT(r->xt); + xt52 = xt2*xt0; + xt72 = r->xt*xt52; + + aux = EXP(-par->k*xt2); + + num = par->a + par->b*xt2*aux; + den = par->c + r->rs*(1.0 + par->d*cnst_rs*xt72); + + r->f = num/den; + + if(r->order < 1) return; + + ddendrs = 1.0 + par->d*cnst_rs*xt72; + ddendxt = 7.0/2.0*par->d*cnst_rs*r->rs*xt52; + dnumdxt = -2.0*par->b*r->xt*(par->k*xt2 - 1.0)*aux; + + r->dfdrs = DFRACTION(num, 0.0, den, ddendrs); + r->dfdxt = DFRACTION(num, dnumdxt, den, ddendxt); + + if(r->order < 2) return; + + d2dendrsxt = 7.0/2.0*par->d*cnst_rs*xt52; + d2dendxt2 = 5.0*ddendxt/(2.0*r->xt); + d2numdxt2 = par->b*(2.0 + 2.0*par->k*xt2*(2.0*par->k*xt2 - 5.0))*aux; + + r->d2fdrs2 = D2FRACTION(num, 0.0, 0.0, den, ddendrs, 0.0); + r->d2fdrsxt = ((-den*dnumdxt + 2.0*num*ddendxt)*ddendrs - den*num*d2dendrsxt)/(den*den*den); + r->d2fdxt2 = D2FRACTION(num, dnumdxt, d2numdxt2, den, ddendxt, d2dendxt2); + + if(r->order < 3) return; + + d3dendrsxt2 = 5.0*d2dendrsxt/(2.0*r->xt); + d3dendxt3 = 3.0*d2dendxt2 /(2.0*r->xt); + d3numdxt3 = -4.0*par->b*par->k*r->xt*(6.0 + par->k*xt2*(2.0*par->k*xt2 - 9.0))*aux; + + r->d3fdrs3 = D3FRACTION(num, 0.0, 0.0, 0.0, den, ddendrs, 0.0, 0.0); + r->d3fdrs2xt = (- 6.0*num*ddendxt*ddendrs*ddendrs + + 2.0*den*(dnumdxt*ddendrs*ddendrs + num*2.0*ddendrs*d2dendrsxt))/(den*den*den*den); + r->d3fdrsxt2 = (- 6.0*num*ddendxt*ddendxt*ddendrs + + 2.0*den*((2.0*dnumdxt*ddendxt + num*d2dendxt2)*ddendrs + 2.0*num*ddendxt*d2dendrsxt) + - den*den*(d2numdxt2*ddendrs + 2.0*dnumdxt*d2dendrsxt + num*d3dendrsxt2))/(den*den*den*den); + r->d3fdxt3 = D3FRACTION(num, dnumdxt, d2numdxt2, d3numdxt3, den, ddendxt, d2dendxt2, d3dendxt3); +} + +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_c_wi0) = { + XC_GGA_C_WI0, + XC_CORRELATION, + "Wilson & Ivanov initial version", + XC_FAMILY_GGA, + "LC Wilson & S Ivanov, Int. J. Quantum Chem. 69, 523-532 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_c_wi_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_c_wi) = { + XC_GGA_C_WI, + XC_CORRELATION, + "Wilson & Ivanov", + XC_FAMILY_GGA, + "LC Wilson & S Ivanov, Int. J. Quantum Chem. 69, 523-532 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_c_wi_init, + NULL, NULL, + work_gga_c, + NULL +}; diff --git a/libxc-2.2.0/src/gga_c_wl.c b/libxc-2.2.0/src/gga_c_wl.c new file mode 100644 index 000000000..fae6b702f --- /dev/null +++ b/libxc-2.2.0/src/gga_c_wl.c @@ -0,0 +1,95 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_GGA_C_WL 147 /* Wilson & Levy */ + +static inline void +func(const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + const FLOAT a=-0.74860, b=0.06001, c=3.60073, d=0.90000; + + FLOAT aux, num, den; + + if(1.0 - ABS(r->zeta) >= p->info->min_zeta){ + aux = SQRT(1.0 - r->zeta*r->zeta); + num = a + b*r->xt; + den = c + d*(r->xs[0] + r->xs[1]) + r->rs; + + r->f = aux * num/den; + }else + r->f = 0.0; + + if(r->order < 1) return; + + if(1.0 - ABS(r->zeta) >= p->info->min_zeta){ + r->dfdrs = -r->f/den; + r->dfdz = -r->zeta/aux * num/den; + r->dfdxt = b*aux/den; + r->dfdxs[0] = -d*r->f/den; + r->dfdxs[1] = r->dfdxs[0]; + }else{ + r->dfdrs = r->dfdz = r->dfdxt = 0.0; + r->dfdxs[0] = r->dfdxs[1] = 0.0; + } + + if(r->order < 2) return; + + if(1.0 - ABS(r->zeta) >= p->info->min_zeta){ + r->d2fdrs2 = -2.0*(r->dfdrs)/den; + r->d2fdrsz = r->zeta/aux * num/(den*den); + r->d2fdrsxt = -b*aux/(den*den); + r->d2fdrsxs[0] = -2.0*d*(r->dfdrs)/den; + r->d2fdrsxs[1] = r->d2fdrsxs[0]; + r->d2fdz2 = -num/(den*aux*aux*aux); + r->d2fdzxt = -r->zeta/aux * b/den; + r->d2fdzxs[0] = r->zeta/aux * d*num/(den*den); + r->d2fdzxs[1] = r->d2fdzxs[0]; + r->d2fdxt2 = 0.0; + r->d2fdxtxs[0] = -b*d*aux/(den*den); + r->d2fdxtxs[1] = r->d2fdxtxs[0]; + r->d2fdxs2[0] = -2.0*d*r->dfdxs[0]/den; + r->d2fdxs2[1] = r->d2fdxs2[0]; + r->d2fdxs2[2] = r->d2fdxs2[0]; + }else{ + r->d2fdrs2 = r->d2fdrsz = r->d2fdrsxt = r->d2fdrsxs[0] = r->d2fdrsxs[1] = 0.0; + r->d2fdz2 = r->d2fdzxt = r->d2fdzxs[0] = r->d2fdzxs[1] = 0.0; + r->d2fdxt2 = r->d2fdxtxs[0] = r->d2fdxtxs[1] = 0.0; + r->d2fdxs2[0] = r->d2fdxs2[1] = r->d2fdxs2[2] = 0.0; + } +} + +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_c_wl) = { + XC_GGA_C_WL, + XC_CORRELATION, + "Wilson & Levy", + XC_FAMILY_GGA, + "LC Wilson and M Levy, Phys. Rev. B 41, 12930 (1990)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_c, + NULL +}; diff --git a/libxc-2.2.0/src/gga_k_dk.c b/libxc-2.2.0/src/gga_k_dk.c new file mode 100644 index 000000000..989525bca --- /dev/null +++ b/libxc-2.2.0/src/gga_k_dk.c @@ -0,0 +1,228 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_K_DK 516 /* DePristo and Kress */ +#define XC_GGA_K_PERDEW 517 /* Perdew */ +#define XC_GGA_K_VSK 518 /* Vitos, Skriver, and Kollar */ +#define XC_GGA_K_VJKS 519 /* Vitos, Johansson, Kollar, and Skriver */ +#define XC_GGA_K_ERNZERHOF 520 /* Ernzerhof */ + +typedef struct{ + FLOAT aa[5], bb[5]; +} gga_k_dk_params; + +static void +gga_k_dk_init(XC(func_type) *p) +{ + int i; + FLOAT ff, *aa, *bb; + + assert(p->params == NULL); + p->params = malloc(sizeof(gga_k_dk_params)); + + /* shortcuts for a and b */ + aa = ((gga_k_dk_params *) (p->params))->aa; + bb = ((gga_k_dk_params *) (p->params))->bb; + + /* initialize parameters to zero */ + for(i=0; i<5; i++){ + aa[i] = 0.0; + bb[i] = 0.0; + } + + switch(p->info->number){ + case XC_GGA_K_DK: + ff = 5.0*X2S*X2S/27.0; /* = t2/t0 = 1.0/(72.0*K_FACTOR_C) */ + + bb[0] = 1.0; + bb[1] = -0.05 *ff; + bb[2] = 9.99802*(ff*ff); + bb[3] = 2.96085*(ff*ff*ff); + + aa[0] = 1.0; + aa[1] = 0.95 *ff; + aa[2] = 14.28111*(ff*ff); + aa[3] = -19.57962*(ff*ff*ff); + aa[4] = 9.0*bb[3]*ff; + + break; + + case XC_GGA_K_PERDEW: + ff = X2S*X2S; + + bb[0] = 1.0; + bb[1] = 88.3960*ff; + bb[2] = 16.3683*(ff*ff); + + aa[0] = 1.0; + aa[1] = 88.2108*ff; + + break; + + case XC_GGA_K_VSK: + ff = 5.0*X2S*X2S/27.0; /* = t2/t0 = 1.0/(72.0*K_FACTOR_C) */ + + bb[0] = 1.0; + bb[1] = -0.05 *ff; + bb[2] = 0.396 *(ff*ff); + + aa[0] = 1.0; + aa[1] = 0.95 *ff; + aa[3] = 9.0*bb[2]*ff; + + break; + + case XC_GGA_K_VJKS: + ff = X2S*X2S; + + bb[0] = 1.0; + bb[1] = 0.6511 *ff; + bb[2] = 0.0431 *(ff*ff); + + aa[0] = 1.0; + aa[1] = 0.8944 *ff; + aa[3] = -bb[2] *ff; + + break; + + case XC_GGA_K_ERNZERHOF: + ff = X2S*X2S; + + bb[0] = 135.0; + bb[1] = 3.0*ff; + + aa[0] = 135.0; + aa[1] = 28.0*ff; + aa[2] = 5.0*(ff*ff); + + break; + } +} + + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + FLOAT xx2, xx4, num, denom, dnum, ddenom, d2num, d2denom; + FLOAT *aa, *bb; + + assert(p->params != NULL); + aa = ((gga_k_dk_params *) (p->params))->aa; + bb = ((gga_k_dk_params *) (p->params))->bb; + + xx2 = x*x; + xx4 = xx2*xx2; + + num = aa[0] + aa[1]*xx2 + aa[2]*xx4 + aa[3]*xx2*xx4 + aa[4]*xx4*xx4; + denom = bb[0] + bb[1]*xx2 + bb[2]*xx4 + bb[3]*xx2*xx4 + bb[4]*xx4*xx4; + + *f = num/denom; + + if(order < 1) return; + + dnum = 2.0*aa[1]*x + 4.0*aa[2]*x*xx2 + 6.0*aa[3]*x*xx4 + 8.0*aa[4]*x*xx2*xx4; + ddenom = 2.0*bb[1]*x + 4.0*bb[2]*x*xx2 + 6.0*bb[3]*x*xx4 + 8.0*bb[4]*x*xx2*xx4; + + *dfdx = (dnum*denom - num*ddenom)/(denom*denom); + + if(order < 2) return; + + d2num = 2.0*aa[1] + 4.0*3.0*aa[2]*xx2 + 6.0*5.0*aa[3]*xx4 + 8.0*7.0*aa[4]*xx2*xx4; + d2denom = 2.0*bb[1] + 4.0*3.0*bb[2]*xx2 + 6.0*5.0*bb[3]*xx4 + 8.0*7.0*bb[4]*xx2*xx4; + + *d2fdx2 = ((d2num*denom - num*d2denom)*denom - 2.0*ddenom*(dnum*denom - ddenom*num))/(denom*denom*denom); +} + +#define XC_KINETIC_FUNCTIONAL +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_k_dk) = { + XC_GGA_K_DK, + XC_KINETIC, + "DePristo and Kress", + XC_FAMILY_GGA, + "AE DePristo and JD Kress, Phys. Rev. A 35, 438-441 (1987)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_dk_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_perdew) = { + XC_GGA_K_PERDEW, + XC_KINETIC, + "Perdew", + XC_FAMILY_GGA, + "JP Perdew, Phys. Lett. A 165, 79 (1992)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_dk_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_vsk) = { + XC_GGA_K_VSK, + XC_KINETIC, + "Vitos, Skriver, and Kollar", + XC_FAMILY_GGA, + "L Vitos, HL Skriver, and J. Kollár, Phys. Rev. B 57, 12611-12615 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_dk_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_vjks) = { + XC_GGA_K_VJKS, + XC_KINETIC, + "Vitos, Johansson, Kollar, and Skriver", + XC_FAMILY_GGA, + "L Vitos, B Johansson, J. Kollár, and HL Skriver, Phys. Rev. A 61, 052511 (2000)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_dk_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_ernzerhof) = { + XC_GGA_K_ERNZERHOF, + XC_KINETIC, + "Ernzerhof", + XC_FAMILY_GGA, + "M Ernzerhof, J. Mol. Struct.:THEOCHEM 501-502, 59 (2000)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_dk_init, + NULL, NULL, + work_gga_k, + NULL +}; diff --git a/libxc-2.2.0/src/gga_k_meyer.c b/libxc-2.2.0/src/gga_k_meyer.c new file mode 100644 index 000000000..1517930db --- /dev/null +++ b/libxc-2.2.0/src/gga_k_meyer.c @@ -0,0 +1,69 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_K_MEYER 57 /* Meyer, Wang, and Young */ + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + FLOAT y, ll, lambda, dy, dlambda, d2lambda; + + y = X2S*x/6.0; + + ll = LOG((1.0 + y)/ABS(1.0 - y)); + lambda = 0.5*(1.0 + (1.0 - y*y)*ll/(2.0*y)); + + *f = 1.0 + lambda*x*x/(8.0*K_FACTOR_C); + + if(order < 1) return; + + dy = X2S/6.0; + + dlambda = dy*(2.0*y - (1.0 + y*y)*ll)/(4.0*y*y); + + *dfdx = (dlambda*x + 2.0*lambda)*x/(8.0*K_FACTOR_C); + + if(order < 2) return; + + d2lambda = dy*dy*(2.0*y/(y*y - 1.0) + ll)/(2.0*y*y*y); + + *d2fdx2 = (d2lambda*x*x + 4.0*dlambda*x + 2.0*lambda)/(8.0*K_FACTOR_C); +} + +#define XC_KINETIC_FUNCTIONAL +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_k_meyer) = { + XC_GGA_K_MEYER, + XC_KINETIC, + "Meyer, Wang, and Young", + XC_FAMILY_GGA, + "A Meyer, GC Wang and WH Young, Z. Naturforsch. A 31, 898-903 (1976)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, + NULL, NULL, + work_gga_k, + NULL +}; diff --git a/libxc-2.2.0/src/gga_k_ol1.c b/libxc-2.2.0/src/gga_k_ol1.c new file mode 100644 index 000000000..5bc5b2b33 --- /dev/null +++ b/libxc-2.2.0/src/gga_k_ol1.c @@ -0,0 +1,61 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_K_OL1 512 /* Ou-Yang and Levy v.1 */ + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + const FLOAT c4 = 0.00677; + FLOAT ss, ss2; + + ss = x/M_CBRT2; + ss2 = ss*ss; + + *f = 1.0 + (ss2/72.0 + c4*ss)/K_FACTOR_C; + + if(order < 1) return; + + *dfdx = (2.0*ss/72.0 + c4)/(K_FACTOR_C*M_CBRT2); + + if(order < 2) return; + + *d2fdx2 = 2.0/(72.0*K_FACTOR_C*M_CBRT2*M_CBRT2); +} + +#define XC_KINETIC_FUNCTIONAL +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_k_ol1) = { + XC_GGA_K_OL1, + XC_KINETIC, + "Ou-Yang and Levy v.1", + XC_FAMILY_GGA, + "H Ou-Yang, M Levy, Int. J. of Quant. Chem. 40, 379-388 (1991)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_k, + NULL +}; diff --git a/libxc-2.2.0/src/gga_k_ol2.c b/libxc-2.2.0/src/gga_k_ol2.c new file mode 100644 index 000000000..92854768b --- /dev/null +++ b/libxc-2.2.0/src/gga_k_ol2.c @@ -0,0 +1,90 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_K_OL2 513 /* Ou-Yang and Levy v.2 */ +#define XC_GGA_X_OL2 183 /* Exchange form based on Ou-Yang and Levy v.2 */ + +static void +gga_k_ol2_init(XC(func_type) *p) +{ + switch(p->info->number){ + case XC_GGA_K_OL2: p->func = 0; break; + case XC_GGA_X_OL2: p->func = 1; break; + } +} + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static const FLOAT aa[2] = { 1.0, M_CBRT2*0.07064/X_FACTOR_C}; + static const FLOAT bb[2] = { 1.0/K_FACTOR_C, M_CBRT2*0.07064/X_FACTOR_C}; + static const FLOAT cc[2] = {0.00887/K_FACTOR_C, M_CBRT2*M_CBRT2*0.07064*34.0135/X_FACTOR_C}; + FLOAT denom; + + denom = M_CBRT2 + 4.0*x; + + *f = aa[p->func] + bb[p->func]*x*x/72.0 + cc[p->func]*x/denom; + + if(order < 1) return; + + *dfdx = 2.0*bb[p->func]*x/72.0 + cc[p->func]*M_CBRT2/(denom*denom); + + if(order < 2) return; + + *d2fdx2 = 2.0*bb[p->func]/72.0 - 8.0*cc[p->func]*M_CBRT2/(denom*denom*denom); +} + +#include "work_gga_x.c" +const XC(func_info_type) XC(func_info_gga_x_ol2) = { + XC_GGA_X_OL2, + XC_EXCHANGE, + "Exchange form based on Ou-Yang and Levy v.2", + XC_FAMILY_GGA, + "P Fuentealba and O Reyes, Chem. Phys. Lett. 232, 31-34 (1995)\n" + "H Ou-Yang, M Levy, Int. J. of Quant. Chem. 40, 379-388 (1991)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_ol2_init, + NULL, NULL, + work_gga_x, + NULL +}; + + +#define XC_KINETIC_FUNCTIONAL +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_k_ol2) = { + XC_GGA_K_OL2, + XC_KINETIC, + "Ou-Yang and Levy v.2", + XC_FAMILY_GGA, + "H Ou-Yang, M Levy, Int. J. of Quant. Chem. 40, 379-388 (1991)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_ol2_init, + NULL, NULL, + work_gga_k, + NULL +}; diff --git a/libxc-2.2.0/src/gga_k_pearson.c b/libxc-2.2.0/src/gga_k_pearson.c new file mode 100644 index 000000000..054057acc --- /dev/null +++ b/libxc-2.2.0/src/gga_k_pearson.c @@ -0,0 +1,64 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_K_PEARSON 511 /* Pearson */ + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + FLOAT ss, ss2, ss6, denom; + + ss = X2S*x; + ss2 = ss*ss; + ss6 = ss2*ss2*ss2; + denom = 1.0 + ss6; + + *f = 1.0 + 5.0/27.0 * ss2/denom; + + if(order < 1) return; + + *dfdx = X2S*5.0/27.0 * 2.0*ss*(1.0 - 2.0*ss6)/(denom*denom); + + if(order < 2) return; + + *d2fdx2 = X2S*X2S*5.0/27.0 * (2.0 - 50.0*ss6 + 20.0*ss6*ss6)/(denom*denom*denom); +} + +#define XC_KINETIC_FUNCTIONAL +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_k_pearson) = { + XC_GGA_K_PEARSON, + XC_KINETIC, + "Pearson 1992", + XC_FAMILY_GGA, + "DJ Lacks and RG Gordon, J. Chem. Phys. 100, 4446 (1994)\n" + "E W Pearson and R G Gordon, J. Chem. Phys. 82, 881 (1985)\n" + "E W Pearson, Ph.D. thesis, Harvard University (1983)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_k, + NULL +}; diff --git a/libxc-2.2.0/src/gga_k_tflw.c b/libxc-2.2.0/src/gga_k_tflw.c new file mode 100644 index 000000000..c84174c2f --- /dev/null +++ b/libxc-2.2.0/src/gga_k_tflw.c @@ -0,0 +1,320 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +/* for a review on the values of lambda and gamma, please see EV +Ludeña and VV Karasiev, in "Reviews of Modern Quantum Chemistry: a +Celebration of the Contributions of Robert G. Parr, edited by KD Sen +(World Scientific, Singapore, 2002), p. 612. + */ + +#define XC_GGA_K_TFVW 52 /* Thomas-Fermi plus von Weiszaecker correction */ +#define XC_GGA_K_VW 500 /* von Weiszaecker functional */ +#define XC_GGA_K_GE2 501 /* Second-order gradient expansion (l = 1/9) */ +#define XC_GGA_K_GOLDEN 502 /* TF-lambda-vW form by Golden (l = 13/45) */ +#define XC_GGA_K_YT65 503 /* TF-lambda-vW form by Yonei and Tomishima (l = 1/5) */ +#define XC_GGA_K_BALTIN 504 /* TF-lambda-vW form by Baltin (l = 5/9) */ +#define XC_GGA_K_LIEB 505 /* TF-lambda-vW form by Lieb (l = 0.185909191) */ +#define XC_GGA_K_ABSP1 506 /* gamma-TFvW form by Acharya et al [g = 1 - 1.412/N^(1/3)] */ +#define XC_GGA_K_ABSP2 507 /* gamma-TFvW form by Acharya et al [g = 1 - 1.332/N^(1/3)] */ +#define XC_GGA_K_GR 508 /* gamma-TFvW form by Gázquez and Robles */ +#define XC_GGA_K_LUDENA 509 /* gamma-TFvW form by Ludeña */ +#define XC_GGA_K_GP85 510 /* gamma-TFvW form by Ghosh and Parr */ + +typedef struct{ + FLOAT gamma, lambda; +} gga_k_tflw_params; + + +static void +gga_k_tflw_init(XC(func_type) *p) +{ + + assert(p->params == NULL); + p->params = malloc(sizeof(gga_k_tflw_params)); + + /* This automatically sets gamma and lambda depending on the functional chosen. + We put by default N = 1.0 */ + XC(gga_k_tflw_set_params)(p, -1.0, -1.0, 1.0); +} + +/* for automatically assigning lambda and gamma set them to -1 */ +void +XC(gga_k_tflw_set_params)(XC(func_type) *p, FLOAT gamma, FLOAT lambda, FLOAT N) +{ + gga_k_tflw_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_k_tflw_params *) (p->params); + + params->gamma = 1.0; + if(gamma > 0.0){ + params->gamma = gamma; + }else if(N > 0.0){ + switch(p->info->number){ + case XC_GGA_K_TFVW: + params->gamma = 1.0; + break; + case XC_GGA_K_VW: + params->gamma = 0.0; + break; + case XC_GGA_K_ABSP1: /* Ref. 79 */ + params->gamma = 1.0 - 1.412/CBRT(N); + break; + case XC_GGA_K_ABSP2: /* Ref. 79 */ + params->gamma = 1.0 - 1.332/CBRT(N); + break; + case XC_GGA_K_GR: /* Ref. 80 */ + params->gamma = (1.0 - 2.0/N)*(1.0 - 1.015/CBRT(N) + 0.150*CBRT(N*N)); + break; + case XC_GGA_K_LUDENA: /* Ref. 82 */ + params->gamma = CBRT(6.0*M_PI)*M_PI*M_PI*(1.0 - 1.0/(N*N)); + break; + case XC_GGA_K_GP85: /* Ref. 86 */ + params->gamma = CBRT(6.0*M_PI*M_PI)*M_PI*M_PI/4.0* + (1.0 - 1.0/N)*(1.0 + 1.0/N + 6.0/(N*N)); + break; + } + } + + params->lambda = 1.0; + if(lambda > 0.0){ + params->lambda = lambda; + }else{ + switch(p->info->number){ + case XC_GGA_K_TFVW: + params->lambda = 1.0; + break; + case XC_GGA_K_GE2: + params->lambda = 1.0/9.0; + break; + case XC_GGA_K_GOLDEN: /* Ref. 33 */ + params->lambda = 13.0/45.0; + break; + case XC_GGA_K_YT65: /* Ref. 57 */ + params->lambda = 1.0/5.0; + break; + case XC_GGA_K_BALTIN: /* Ref. 66 */ + params->lambda = 5.0/9.0; + break; + case XC_GGA_K_LIEB: /* Ref. 12 */ + params->lambda = 0.185909191; /* 1/5.37897... */ + break; + } + } +} + + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + FLOAT lambda, gamma; + + assert(p->params != NULL); + lambda = ((gga_k_tflw_params *) (p->params))->lambda; + gamma = ((gga_k_tflw_params *) (p->params))->gamma; + + lambda /= 8.0; /* the von Weiszaecker coefficient */ + + *f = gamma + lambda*x*x/K_FACTOR_C; + + if(order < 1) return; + + *dfdx = 2.0*lambda*x/K_FACTOR_C; + + if(order < 2) return; + + *d2fdx2 = 2.0*lambda/K_FACTOR_C; +} + +#define XC_KINETIC_FUNCTIONAL +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_k_tfvw) = { + XC_GGA_K_TFVW, + XC_KINETIC, + "Thomas-Fermi plus von Weiszaecker correction", + XC_FAMILY_GGA, + "CF von Weiszaecker, Z. Phys. 96, 431 (1935)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_tflw_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_vw) = { + XC_GGA_K_VW, + XC_KINETIC, + "von Weiszaecker correction to Thomas-Fermi", + XC_FAMILY_GGA, + "CF von Weiszaecker, Z. Phys. 96, 431 (1935)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_tflw_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_ge2) = { + XC_GGA_K_GE2, + XC_KINETIC, + "Second-order gradient expansion of the kinetic energy density", + XC_FAMILY_GGA, + "AS Kompaneets and ES Pavlovskii, Zh. Eksp. Teor. Fiz. 31, 427 (1956) [Sov. Phys. JETP 4, 328 (1957)]" + "DA Kirznits, Zh. Eksp. Teor. Fiz. 32, 115 (1957) [Sov. Phys. JETP 5, 64 (1957)]", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_tflw_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_golden) = { + XC_GGA_K_GOLDEN, + XC_KINETIC, + "TF-lambda-vW form by Golden (l = 13/45)", + XC_FAMILY_GGA, + "S Golden, Phys. Rev. 105, 604-615 (1957)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_tflw_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_yt65) = { + XC_GGA_K_YT65, + XC_KINETIC, + "TF-lambda-vW form by Yonei and Tomishima (l = 1/5)", + XC_FAMILY_GGA, + "K. Yonei and Y. Tomishima, J. Phys. Soc. Jpn. 20, 1051-1057 (1965)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_tflw_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_baltin) = { + XC_GGA_K_BALTIN, + XC_KINETIC, + "TF-lambda-vW form by Baltin (l = 5/9)", + XC_FAMILY_GGA, + "R Baltin, Z. Naturforsch. A 27, 1176 (1972)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_tflw_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_lieb) = { + XC_GGA_K_LIEB, + XC_KINETIC, + "TF-lambda-vW form by Lieb (l = 0.185909191)", + XC_FAMILY_GGA, + "EH Lieb, Rev. Mod. Phys. 53, 603-641 (1981)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_tflw_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_absp1) = { + XC_GGA_K_ABSP1, + XC_KINETIC, + "gamma-TFvW form by Acharya et al [g = 1 - 1.412/N^(1/3)]", + XC_FAMILY_GGA, + "PK Acharya, LJ Bartolotti, SB Sears, and RG Parr, Proc. Natl. Acad. Sci. USA 77 6978-6982 (1980)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_tflw_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_absp2) = { + XC_GGA_K_ABSP2, + XC_KINETIC, + "gamma-TFvW form by Acharya et al [g = 1 - 1.332/N^(1/3)]", + XC_FAMILY_GGA, + "PK Acharya, LJ Bartolotti, SB Sears, and RG Parr, Proc. Natl. Acad. Sci. USA 77 6978-6982 (1980)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_tflw_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_gr) = { + XC_GGA_K_GR, + XC_KINETIC, + "gamma-TFvW form by Gázquez and Robles", + XC_FAMILY_GGA, + "JL Gázquez and J Robles, J. Chem. Phys. 76, 1467 (1982)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_tflw_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_ludena) = { + XC_GGA_K_LUDENA, + XC_KINETIC, + "gamma-TFvW form by Ludeña", + XC_FAMILY_GGA, + "EV Ludeña, in Cond. Matt. Theor. Vol 1, ed. by FB Malik (Plenum, New York, 1986), p. 183", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_tflw_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_gp85) = { + XC_GGA_K_GP85, + XC_KINETIC, + "gamma-TFvW form by Ghosh and Parr", + XC_FAMILY_GGA, + "SK Ghosh and RG Parr, J. Chem. Phys. 82, 3307 (1985)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_tflw_init, + NULL, NULL, + work_gga_k, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_2d_b86.c b/libxc-2.2.0/src/gga_x_2d_b86.c new file mode 100644 index 000000000..982fd8161 --- /dev/null +++ b/libxc-2.2.0/src/gga_x_2d_b86.c @@ -0,0 +1,68 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_2D_B86 128 /* Becke 86 Xalfa,beta,gamma */ + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + FLOAT beta=0.002105, gamma=0.000119; + + FLOAT f1, f2, df1, df2, d2f1, d2f2; + + f1 = 1.0 + beta*x*x; + f2 = 1.0 + gamma*x*x; + *f = f1/f2; + + if(order < 1) return; + + df1 = 2.0*beta*x; + df2 = 2.0*gamma*x; + + *dfdx = (df1*f2 - f1*df2)/(f2*f2); + + if(order < 2) return; + + d2f1 = 2.0*beta; + d2f2 = 2.0*gamma; + + *d2fdx2 = (2.0*f1*df2*df2 + d2f1*f2*f2 - f2*(2.0*df1*df2 + f1*d2f2))/(f2*f2*f2); +} + +#define XC_DIMENSIONS 2 +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_2d_b86) = { + XC_GGA_X_2D_B86, + XC_EXCHANGE, + "Becke 86 in 2D", + XC_FAMILY_GGA, + "G Vilhena and MAL Marques, unpublished\n" + "AD Becke, J. Chem. Phys 84, 4524 (1986)", + XC_FLAGS_2D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-18, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; + diff --git a/libxc-2.2.0/src/gga_x_2d_b86_mgc.c b/libxc-2.2.0/src/gga_x_2d_b86_mgc.c new file mode 100644 index 000000000..f4a1421fb --- /dev/null +++ b/libxc-2.2.0/src/gga_x_2d_b86_mgc.c @@ -0,0 +1,70 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_2D_B86_MGC 124 /* Becke 86 MGC for 2D systems */ + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static const FLOAT beta=0.003317, gam=0.008323; + + FLOAT dd, ddp, f1, f2, df1, df2, d2f1, d2f2; + + dd = 1.0 + gam*x*x; + + f1 = beta/X_FACTOR_C*x*x; + f2 = POW(dd, 3.0/4.0); + *f = 1.0 + f1/f2; + + if(order < 1) return; /* nothing else to do */ + + df1 = beta/X_FACTOR_C*2.0*x; + ddp = gam*2.0*3.0/4.0*f2/dd; + df2 = ddp*x; + + *dfdx = (df1*f2 - f1*df2)/(f2*f2); + + if(order < 2) return; /* nothing else to do */ + + d2f1 = beta/X_FACTOR_C*2.0; + d2f2 = ddp*(1.0 - 2.0/4.0*gam*x*x/dd); + + *d2fdx2 = (2.0*f1*df2*df2 + d2f1*f2*f2 - f2*(2.0*df1*df2 + f1*d2f2))/(f2*f2*f2); +} + +#define XC_DIMENSIONS 2 +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_2d_b86_mgc) = { + XC_GGA_X_2D_B86_MGC, + XC_EXCHANGE, + "Becke 86 with modified gradient correction for 2D", + XC_FAMILY_GGA, + "S Pittalis, E Rasanen, JG Vilhena, and MAL Marques, Phys. Rev. A 79, 012503 (2009)\n" + "AD Becke, J. Chem. Phys 85, 7184 (1986)", + XC_FLAGS_2D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_2d_b88.c b/libxc-2.2.0/src/gga_x_2d_b88.c new file mode 100644 index 000000000..e917babdb --- /dev/null +++ b/libxc-2.2.0/src/gga_x_2d_b88.c @@ -0,0 +1,100 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_2D_B88 127 /* Becke 88 in 2D */ + +typedef struct{ + FLOAT beta; +} gga_x_2d_b88_params; + + +static void gga_x_2d_b88_init(XC(func_type) *p) +{ + assert(p->params == NULL); + + p->params = malloc(sizeof(gga_x_2d_b88_params)); + + /* value of beta in standard Becke 88 2D functional */ + XC(gga_x_2d_b88_set_params)(p, 0.018641); +} + + +void XC(gga_x_2d_b88_set_params)(XC(func_type) *p, FLOAT beta) +{ + gga_x_2d_b88_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_x_2d_b88_params *) (p->params); + + params->beta = beta; +} + + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + FLOAT f1, f2, df1, df2, d2f1, d2f2; + FLOAT beta, csi; + + assert(p->params != NULL); + beta = ((gga_x_2d_b88_params *) (p->params))->beta; + csi = 8.0; /* for harmonic potentials */ + + f1 = beta/X_FACTOR_2D_C*x*x; + f2 = 1.0 + csi*beta*x*ASINH(x); + *f = 1.0 + f1/f2; + + if(order < 1) return; + + df1 = 2.0*beta/X_FACTOR_2D_C*x; + df2 = csi*beta*(ASINH(x) + x/SQRT(1.0 + x*x)); + + *dfdx = (df1*f2 - f1*df2)/(f2*f2); + + if(order < 2) return; + + d2f1 = 2.0*beta/X_FACTOR_2D_C; + d2f2 = csi*beta*(2.0 + x*x)/POW(1.0 + x*x, 3.0/2.0); + + *d2fdx2 = (2.0*f1*df2*df2 + d2f1*f2*f2 - f2*(2.0*df1*df2 + f1*d2f2))/(f2*f2*f2); +} + +#define XC_DIMENSIONS 2 +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_2d_b88) = { + XC_GGA_X_2D_B88, + XC_EXCHANGE, + "Becke 88", + XC_FAMILY_GGA, + "G Vilhena, MAL Marques, unpublished\n" + "AD Becke, Phys. Rev. A 38, 3098 (1988)", + XC_FLAGS_2D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_2d_b88_init, + NULL, + NULL, + work_gga_x, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_2d_pbe.c b/libxc-2.2.0/src/gga_x_2d_pbe.c new file mode 100644 index 000000000..49da4a8c8 --- /dev/null +++ b/libxc-2.2.0/src/gga_x_2d_pbe.c @@ -0,0 +1,82 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_2D_PBE 129 /* Perdew, Burke & Ernzerhof exchange in 2D */ + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + //FILE *fin; + static const FLOAT kappa[1] = { + 0.4604, /* original PBE */ + }; + + FLOAT mu[1] = { + 0.354546875, + }; + + FLOAT ss, f0, df0, d2f0; + int func; + + switch(p->info->number){ + default: func = 0; /* original PBE */ + } + + //fin = fopen("gga_x_2d_b88_params", "r"); + //fscanf(fin, "%lf", &mu[0]); + //fclose(fin); + + ss = X2S_2D*x; + + f0 = kappa[func] + mu[func]*ss*ss; + *f = 1.0 + kappa[func]*(1.0 - kappa[func]/f0); + + if(order < 1) return; + + df0 = 2.0*ss*mu[func]; + + *dfdx = X2S_2D*kappa[func]*kappa[func]*df0/(f0*f0); + + if(order < 2) return; + + d2f0 = 2.0*mu[func]; + *d2fdx2 = X2S_2D*X2S_2D*kappa[func]*kappa[func]/(f0*f0)*(d2f0 - 2.0*df0*df0/f0); +} + +#define XC_DIMENSIONS 2 +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_2d_pbe) = { + XC_GGA_X_2D_PBE, + XC_EXCHANGE, + "Perdew, Burke & Ernzerhof in 2D", + XC_FAMILY_GGA, + "G Vilhena and MAL Marques, unpublished\n" + "JP Perdew, K Burke, and M Ernzerhof, Phys. Rev. Lett. 77, 3865 (1996)\n" + "JP Perdew, K Burke, and M Ernzerhof, Phys. Rev. Lett. 78, 1396(E) (1997)", + XC_FLAGS_2D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_airy.c b/libxc-2.2.0/src/gga_x_airy.c new file mode 100644 index 000000000..15b7b9c13 --- /dev/null +++ b/libxc-2.2.0/src/gga_x_airy.c @@ -0,0 +1,162 @@ +/* + Copyright (C) 2008 Georg Madsen + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_AIRY 192 /* Constantin et al based on the Airy gas */ +#define XC_GGA_X_LAG 193 /* Local Airy Gas */ + +static void +gga_x_airy_init(XC(func_type) *p) +{ + switch(p->info->number){ + case XC_GGA_X_AIRY: p->func = 0; break; + case XC_GGA_X_LAG: p->func = 1; break; + default: + fprintf(stderr, "Internal error in gga_x_airy\n"); + exit(1); + } +} + + +void XC(gga_x_airy_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static FLOAT + a1 = 0.041106, + a2 = 2.626712, + a3 = 0.092070, + a4 = 0.657946, + a5 = 133.983631, + a6 = 3.217063, + a7 = 136.707378, + a8 = 3.223476, + a9 = 2.675484, + a10 = 3.473804; + + FLOAT ss, ssa2, ssa6, ssa8, ssa10; + FLOAT den1, aux1, num1, den2, num2; + FLOAT dden1, daux1, dnum1, dden2, dnum2; + FLOAT d2den1, d2aux1, d2num1, d2den2, d2num2; + FLOAT d3den1, d3aux1, d3num1, d3den2, d3num2; + + ss = X2S*x; + ssa2 = POW(ss, a2); + ssa6 = POW(ss, a6); + ssa8 = POW(ss, a8); + ssa10 = POW(ss, a10); + + num1 = a1*ssa2; + aux1 = 1.0 + a3*ssa2; + den1 = POW(aux1, a4); + + *f = num1/den1; + + if(p->func == 0){ + num2 = 1.0 - a5*ssa6 + a7*ssa8; + den2 = 1.0 + a9*ssa10; + + *f += num2/den2; + } + + if(order < 1) return; + + dnum1 = a2*num1/ss; + daux1 = a3*a2*ssa2/ss; + dden1 = a4*daux1*den1/aux1; + + *dfdx = DFRACTION(num1, dnum1, den1, dden1); + + if(p->func == 0){ + dnum2 = -a5*a6*ssa6/ss + a7*a8*ssa8/ss; + dden2 = a9*a10*ssa10/ss; + + *dfdx += DFRACTION(num2, dnum2, den2, dden2); + } + + *dfdx *= X2S; + + if(order < 2) return; + + d2num1 = (a2 - 1.0)*dnum1/ss; + d2aux1 = (a2 - 1.0)*daux1/ss; + d2den1 = a4*den1/(aux1*aux1) * ((a4 - 1.0)*daux1*daux1 + aux1*d2aux1); + + *d2fdx2 = D2FRACTION(num1, dnum1, d2num1, den1, dden1, d2den1); + + if(p->func == 0){ + d2num2 = -a5*a6*(a6 - 1.0)*ssa6/(ss*ss) + a7*a8*(a8 - 1.0)*ssa8/(ss*ss); + d2den2 = (a10 - 1.0)*dden2/ss; + + *d2fdx2 += D2FRACTION(num2, dnum2, d2num2, den2, dden2, d2den2); + } + + *d2fdx2 *= X2S*X2S; + + if(order < 3) return; + + d3num1 = (a2 - 2.0)*d2num1/ss; + d3aux1 = (a2 - 1.0)*d2aux1/ss; + d3den1 = a4*den1/(aux1*aux1*aux1) * ((a4 - 1.0)*daux1*((a4 - 2.0)*daux1*daux1 + 3.0*aux1*d2aux1) + aux1*aux1*d3aux1); + + *d3fdx3 = D3FRACTION(num1, dnum1, d2num1, d3num1, den1, dden1, d2den1, d3den1); + + if(p->func == 0){ + d3num2 = -a5*a6*(a6 - 1.0)*(a6 - 2.0)*ssa6/(ss*ss*ss) + a7*a8*(a8 - 1.0)*(a8 - 2.0)*ssa8/(ss*ss*ss); + d3den2 = (a10 - 2.0)*d2den2/ss; + + *d3fdx3 += D3FRACTION(num2, dnum2, d2num2, d3num2, den2, dden2, d2den2, d3den2); + } + + *d3fdx3 *= X2S*X2S*X2S; +} + +#define func XC(gga_x_airy_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_airy) = { + XC_GGA_X_AIRY, + XC_EXCHANGE, + "Constantin et al based on the Airy gas", + XC_FAMILY_GGA, + "LA Constantin, A Ruzsinszky, and JP Perdew, Phys. Rev. B 80, 035125 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_airy_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_lag) = { + XC_GGA_X_LAG, + XC_EXCHANGE, + "Local Airy Gas", + XC_FAMILY_GGA, + "L Vitos, B Johansson, J Kollar, and HL Skriver, Phys. Rev. B 62, 10046-10050 (2000)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_airy_init, + NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_ak13.c b/libxc-2.2.0/src/gga_x_ak13.c new file mode 100644 index 000000000..b7059d446 --- /dev/null +++ b/libxc-2.2.0/src/gga_x_ak13.c @@ -0,0 +1,88 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include "util.h" + +#define XC_GGA_X_AK13 56 /* Armiento & Kuemmel 2013 */ + +static const FLOAT B1 = 1.74959015598863046792081721182; /* 3*muGE/5 + 8 pi/15 */ +static const FLOAT B2 = -1.62613336586517367779736042170; /* muGE - B1 */ + +FLOAT XC(gga_ak13_get_asymptotic) (FLOAT homo) +{ + FLOAT Qx, aa, aa2, factor; + + Qx = SQRT(2.0)*B1/(3.0*CBRT(3.0*M_PI*M_PI)); + + aa = X_FACTOR_C*Qx; + aa2 = aa*aa; + + factor = (homo < 0.0) ? -1.0 : 1.0; + + return (aa2/2.0)*(1.0 + factor*SQRT(1.0 - 4.0*homo/aa2)); +} + + +void XC(gga_x_ak13_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + FLOAT ss, den, f1, f2; + + ss = X2S*x; + + f1 = LOG(1.0 + ss); + f2 = LOG(1.0 + f1); + + *f = 1.0 + B1*ss*f1 + B2*ss*f2; + + if(order < 1) return; + + den = (1.0 + ss)*(1.0 + f1); + + *dfdx = B1*f1 + ss*(B1 + B2 + B1*f1)/den + B2*f2; + *dfdx *= X2S; + + if(order < 2) return; + + *d2fdx2 = (2.0*B2 + B1*(2.0 + ss) + (2.0 + ss)*f1*(2.0*B1 + B2 + B1*f1))/(den*den); + *d2fdx2 *= X2S*X2S; + + if(order < 3) return; + + *d3fdx3 = (B2*(ss - 6.0) - B1*(ss + 3.0) - f1*(3.0*B1*(ss + 3.0) + B2*(2.0*ss + 9.0) + (ss + 3.0)*f1*(3.0*B1 + B2 + B1*f1)))/(den*den*den); + *d3fdx3 *= X2S*X2S*X2S; +} + +#define func XC(gga_x_ak13_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_ak13) = { + XC_GGA_X_AK13, + XC_EXCHANGE, + "Armiento & Kuemmel 2013", + XC_FAMILY_GGA, + "R Armiento and S Kuemmel, PRL 111, 036402 (2013)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; + diff --git a/libxc-2.2.0/src/gga_x_am05.c b/libxc-2.2.0/src/gga_x_am05.c new file mode 100644 index 000000000..1c0ae5294 --- /dev/null +++ b/libxc-2.2.0/src/gga_x_am05.c @@ -0,0 +1,151 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_AM05 120 /* Armiento & Mattsson 05 exchange */ + +void XC(gga_x_am05_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + const FLOAT am05_c = 0.7168; + const FLOAT am05_alpha = 2.804; + + const FLOAT z_tt_factor = POW(CBRT(4.0/3.0) * 2.0*M_PI/3.0, 4); + + FLOAT ss, ss2, lam_x, dlam_x, d2lam_x, d3lam_x; + FLOAT aux1, aux2, aux12, aux22; + FLOAT ww, ww13, z_t, z_t2, z_tt, z_tt_aux, fx_b, xx, flaa_1, flaa_2, flaa; + FLOAT dww, dz_t, dz_tt, dfx_b, dxx, dflaa_1, dflaa_2, dflaa; + FLOAT d2ww, d2z_t, d2z_tt, d2fx_b, d2xx, d2flaa_1, d2flaa_2, d2flaa; + FLOAT d3ww, d3z_t, d3z_tt, d3fx_b, d3xx, d3flaa_2, d3flaa; + + if(x < p->info->min_grad){ + *f = 1.0; + return; + } + + ss = X2S*x; + ss2 = ss*ss; + + lam_x = ss*SQRT(ss)/(2.0*SQRT(6.0)); + ww = XC(lambert_w)(lam_x); + ww13 = CBRT(ww); + + z_t = (M_CBRT9/M_CBRT4)*ww13*ww13; + z_t2 = z_t*z_t; + + /* This is equal to sqrt(t_zeta) * tt_zeta of the JCP*/ + z_tt_aux = z_tt_factor + z_t2; + z_tt = z_t * SQRT(SQRT(z_tt_aux)); + + /* note that there is a factor of 2 missing in the JCP */ + fx_b = M_PI/3.0*ss/z_tt; + + xx = 1.0/(1.0 + am05_alpha*ss2); + + flaa_1 = am05_c*ss2 + 1.0; + flaa_2 = am05_c*ss2/fx_b + 1.0; + flaa = flaa_1/flaa_2; + + *f = xx + (1.0 - xx)*flaa; + + if(order < 1) return; + + dlam_x = 1.5*lam_x/ss; + aux1 = 1.0 + ww; + aux2 = lam_x*aux1; + + dww = ww*dlam_x/aux2; + dz_t = M_CBRT2*dww/(M_CBRT3*ww13); + dz_tt = (2.0*z_tt_factor + 3.0*z_t2)*z_tt/(2.0*z_t*z_tt_aux); + dfx_b = M_PI/3.0*(z_tt - ss*dz_tt*dz_t)/(z_tt*z_tt); + + dxx = -2.0*am05_alpha*ss * xx*xx; + dflaa_1 = 2.0*am05_c*ss; + dflaa_2 = DFRACTION(am05_c*ss2, dflaa_1, fx_b, dfx_b); + dflaa = DFRACTION(flaa_1, dflaa_1, flaa_2, dflaa_2); + + *dfdx = dxx*(1.0 - flaa) + dflaa*(1.0 - xx); + *dfdx *= X2S; + + if(order < 2) return; + + aux12 = aux1*aux1; + aux22 = aux2*aux2; + + d2lam_x = 0.5*dlam_x/ss; + d2ww = ww*(-ww*(2.0 + ww)*dlam_x*dlam_x + aux12*lam_x*d2lam_x)/(aux22*aux1); + d2z_t = -M_CBRT2*(dww*dww - 3.0*ww*d2ww)/(3.0*M_CBRT3*ww*ww13); + + d2z_tt = 3.0*z_t*(2.0*z_tt_factor + z_t2)*z_tt/(4.0*z_t*z_tt_aux*z_tt_aux); + d2fx_b = M_PI/3.0*(2.0*ss*dz_tt*dz_tt*dz_t*dz_t - z_tt*(dz_tt*(2.0*dz_t + ss*d2z_t) + ss*dz_t*dz_t*d2z_tt))/(z_tt*z_tt*z_tt); + + d2xx = 2.0*am05_alpha*(3.0*am05_alpha*ss2 - 1.0) * xx*xx*xx; + d2flaa_1 = 2.0*am05_c; + d2flaa_2 = D2FRACTION(am05_c*ss2, dflaa_1, d2flaa_1, fx_b, dfx_b, d2fx_b); + d2flaa = D2FRACTION(flaa_1, dflaa_1, d2flaa_1, flaa_2, dflaa_2, d2flaa_2); + + *d2fdx2 = d2xx*(1.0 - flaa) - 2.0*dxx*dflaa + (1.0 - xx)*d2flaa; + *d2fdx2 *= X2S*X2S; + + if(order < 3) return; + + d3lam_x = -0.5*d2lam_x/ss; + d3ww = ww*(ww*dlam_x*(ww*(9.0 + 2.0*ww*(4.0 + ww))*dlam_x*dlam_x - 3.0*lam_x*aux12*(2.0 + ww)*d2lam_x) + + lam_x*lam_x*aux12*aux12*d3lam_x)/(aux22*aux2*aux12); + d3z_t = M_CBRT2*(4.0*dww*dww*dww - 9.0*ww*dww*d2ww + 9.0*ww*ww*d3ww)/(9.0*M_CBRT3*ww*ww*ww13); + + d3z_tt = -3.0*(-4.0*z_tt_factor*z_tt_factor + 4.0*z_tt_factor*z_t2 + z_t2*z_t2)*z_tt/(8.0*z_t*z_tt_aux*z_tt_aux*z_tt_aux); + d3fx_b = M_PI/3.0*(-6.0*ss*dz_t*dz_t*dz_t*dz_tt*dz_tt*dz_tt + +6.0*z_tt*dz_t*dz_tt*(dz_tt*(dz_t + ss*d2z_t) + ss*dz_t*dz_t*d2z_tt) + -z_tt*z_tt*(3.0*dz_t*(dz_t + ss*d2z_t)*d2z_tt + dz_tt*(3.0*d2z_t + ss*d3z_t) + ss*dz_t*dz_t*dz_t*d3z_tt)) + /(z_tt*z_tt*z_tt*z_tt); + + d3xx = -24.0*am05_alpha*am05_alpha*ss*(am05_alpha*ss2 - 1.0) * xx*xx*xx*xx; + + d3flaa_2 = D3FRACTION(am05_c*ss2, dflaa_1, d2flaa_1, 0.0, fx_b, dfx_b, d2fx_b, d3fx_b); + d3flaa = D3FRACTION(flaa_1, dflaa_1, d2flaa_1, 0.0, flaa_2, dflaa_2, d2flaa_2, d3flaa_2); + + *d3fdx3 = d3xx*(1.0 - flaa) - 3.0*d2xx*dflaa + -3.0*dxx*d2flaa + (1.0 - xx)*d3flaa; + *d3fdx3 *= X2S*X2S*X2S; + +} + +#define func XC(gga_x_am05_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_am05) = { + XC_GGA_X_AM05, + XC_EXCHANGE, + "Armiento & Mattsson 05", + XC_FAMILY_GGA, + "R Armiento and AE Mattsson, Phys. Rev. B 72, 085108 (2005)\n" + "AE Mattsson, R Armiento, J Paier, G Kresse, JM Wills, and TR Mattsson, J. Chem. Phys. 128, 084714 (2008).", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_b86.c b/libxc-2.2.0/src/gga_x_b86.c new file mode 100644 index 000000000..9f340eb6e --- /dev/null +++ b/libxc-2.2.0/src/gga_x_b86.c @@ -0,0 +1,71 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_B86 103 /* Becke 86 Xalfa,beta,gamma */ + +void XC(gga_x_b86_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static const FLOAT beta = 0.0036/X_FACTOR_C; + static const FLOAT gamma = 0.004; + + FLOAT f1, f2, df1, df2, d2f1, d2f2; + + f1 = beta*x*x; + f2 = 1.0 + gamma*x*x; + *f = 1.0 + f1/f2; + + if(order < 1) return; + + df1 = 2.0*beta *x; + df2 = 2.0*gamma*x; + + *dfdx = (df1*f2 - f1*df2)/(f2*f2); + + if(order < 2) return; + + d2f1 = 2.0*beta; + d2f2 = 2.0*gamma; + + *d2fdx2 = (2.0*f1*df2*df2 + d2f1*f2*f2 - f2*(2.0*df1*df2 + f1*d2f2))/(f2*f2*f2); + + if(order < 3) return; + + *d3fdx3 = (-6.0*f1*df2*df2*df2 + 6.0*f2*df2*(df1*df2 + f1*d2f2) - f2*f2*(3.0*df2*d2f1 + 3.0*df1*d2f2))/(f2*f2*f2*f2); +} + +#define func XC(gga_x_b86_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_b86) = { + XC_GGA_X_B86, + XC_EXCHANGE, + "Becke 86", + XC_FAMILY_GGA, + "AD Becke, J. Chem. Phys 84, 4524 (1986)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-23, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_b86_mgc.c b/libxc-2.2.0/src/gga_x_b86_mgc.c new file mode 100644 index 000000000..528468e33 --- /dev/null +++ b/libxc-2.2.0/src/gga_x_b86_mgc.c @@ -0,0 +1,77 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_B86_MGC 105 /* Becke 86 Xalfa,beta,gamma (with mod. grad. correction) */ + +void XC(gga_x_b86_mgc_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static const FLOAT beta = 0.00375; + static const FLOAT gamma = 0.007; + + FLOAT dd, f1, f2, df1, df2, d2f1, d2f2, d3f1, d3f2; + + dd = 1.0 + gamma*x*x; + + f1 = beta/X_FACTOR_C*x*x; + f2 = POW(dd, 4.0/5.0); + *f = 1.0 + f1/f2; + + if(order < 1) return; + + df1 = beta/X_FACTOR_C*2.0*x; + df2 = 8.0*gamma*x*f2/(5.0*dd); + + *dfdx = DFRACTION(f1, df1, f2, df2); + + if(order < 2) return; + + d2f1 = beta/X_FACTOR_C*2.0; + d2f2 = 8.0*gamma*(5.0 + 3.0*gamma*x*x)*f2/(25.0*dd*dd); + + *d2fdx2 = D2FRACTION(f1, df1, d2f1, f2, df2, d2f2); + + if(order < 3) return; + + d3f1 = 0.0; + d3f2 = -48.0*gamma*gamma*x*(5.0 + gamma*x*x)*f2/(125.0*dd*dd*dd); + + *d3fdx3 = D3FRACTION(f1, df1, d2f1, d3f1, f2, df2, d2f2, d3f2); +} + +#define func XC(gga_x_b86_mgc_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_b86_mgc) = { + XC_GGA_X_B86_MGC, + XC_EXCHANGE, + "Becke 86 with modified gradient correction", + XC_FAMILY_GGA, + "AD Becke, J. Chem. Phys 84, 4524 (1986)\n" + "AD Becke, J. Chem. Phys 85, 7184 (1986)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_b88.c b/libxc-2.2.0/src/gga_x_b88.c new file mode 100644 index 000000000..56d18f2f5 --- /dev/null +++ b/libxc-2.2.0/src/gga_x_b88.c @@ -0,0 +1,238 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_B88 106 /* Becke 88 */ +#define XC_GGA_X_OPTB88_VDW 139 /* Becke 88 reoptimized to be used with vdW functional of Dion et al*/ +#define XC_GGA_X_MB88 149 /* Modified Becke 88 for proton transfer */ +#define XC_GGA_K_LLP 522 /* Lee, Lee & Parr */ +#define XC_GGA_K_FR_B88 514 /* Fuentealba & Reyes (B88 version) */ +#define XC_GGA_K_THAKKAR 523 /* Thakkar 1992 */ + +typedef struct{ + FLOAT beta, gamma; +} gga_x_b88_params; + + +static void +gga_x_b88_init(XC(func_type) *p) +{ + assert(p!=NULL && p->params == NULL); + p->params = malloc(sizeof(gga_x_b88_params)); + + /* value of beta in standard Becke 88 functional */ + switch(p->info->number){ + case XC_GGA_X_B88: + p->func = 0; + XC(gga_x_b88_set_params)(p, 0.0042, 6.0); + break; + case XC_GGA_X_OPTB88_VDW: + p->func = 1; + XC(gga_x_b88_set_params)(p, 0.00336865923905927, 6.98131700797731); + break; + case XC_GGA_K_LLP: + p->func = 2; + XC(gga_x_b88_set_params)(p, X_FACTOR_C*0.0044188, 0.0253/(X_FACTOR_C*0.0044188)); + break; + case XC_GGA_K_FR_B88: + p->func = 3; + XC(gga_x_b88_set_params)(p, X_FACTOR_C*0.004596, 0.02774/(X_FACTOR_C*0.004596)); + break; + case XC_GGA_X_MB88: + p->func = 4; + XC(gga_x_b88_set_params)(p, 0.0011, 6.0); + break; + case XC_GGA_K_THAKKAR: + p->func = 5; + XC(gga_x_b88_set_params)(p, X_FACTOR_C*0.0055, 0.0253/(X_FACTOR_C*0.0055)); + break; + default: + fprintf(stderr, "Internal error in gga_x_b88\n"); + exit(1); + } +} + + +void +XC(gga_x_b88_set_params)(XC(func_type) *p, FLOAT beta, FLOAT gamma) +{ + gga_x_b88_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_x_b88_params *) (p->params); + + params->beta = beta; + params->gamma = gamma; +} + + +void +XC(gga_x_b88_enhance)(const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + FLOAT x2, aux1, aux2, f1, f2, df1, df2, d2f1, d2f2, d3f1, d3f2, dd; + FLOAT beta, gamma; + + assert(p->params != NULL); + beta = ((gga_x_b88_params *) (p->params))->beta; + gamma = ((gga_x_b88_params *) (p->params))->gamma; + + x2 = x*x; + + f1 = beta/X_FACTOR_C*x2; + f2 = 1.0 + gamma*beta*x*ASINH(x); + *f = 1.0 + f1/f2; + + if(p->func == 5){ /* k_thakkar */ + dd = 1.0/(1.0 + 2.0*CBRT(4.0)*x); + *f += -0.072*x*dd; + } + + if(order < 1) return; + + aux1 = 1.0 + x2; + aux2 = SQRT(aux1); + + df1 = 2.0*beta/X_FACTOR_C*x; + df2 = gamma*beta*(ASINH(x) + x/aux2); + + *dfdx = (df1*f2 - f1*df2)/(f2*f2); + + if(p->func == 5) /* k_thakkar */ + *dfdx += -0.072*dd*dd; + + if(order < 2) return; + + d2f1 = 2.0*beta/X_FACTOR_C; + d2f2 = gamma*beta*(2.0 + x2)/(aux1*aux2); + + *d2fdx2 = (2.0*f1*df2*df2 + d2f1*f2*f2 - f2*(2.0*df1*df2 + f1*d2f2))/(f2*f2*f2); + + if(p->func == 5) /* k_thakkar */ + *d2fdx2 += 0.072*4.0*CBRT(4.0)*dd*dd*dd; + + if(order < 2) return; + + d3f1 = 0.0; + d3f2 = -beta*gamma*x*(4.0 + x2)/(aux1*aux1*aux2); + + *d3fdx3 = (-6.0*f1*df2*df2*df2 + 6.0*f2*df2*(df1*df2 + f1*d2f2) + f2*f2*f2*d3f1 - f2*f2*(3.0*df2*d2f1 + 3.0*df1*d2f2 + f1*d3f2))/(f2*f2*f2*f2); + + if(p->func == 5) /* k_thakkar */ + *d3fdx3 += -0.072*24.0*CBRT(4.0)*CBRT(4.0)*dd*dd*dd*dd; +} + +#define func XC(gga_x_b88_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_b88) = { + XC_GGA_X_B88, + XC_EXCHANGE, + "Becke 88", + XC_FAMILY_GGA, + "AD Becke, Phys. Rev. A 38, 3098 (1988)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_b88_init, + NULL, + NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_optb88_vdw) = { + XC_GGA_X_OPTB88_VDW, + XC_EXCHANGE, + "opt-Becke 88 for vdW", + XC_FAMILY_GGA, + "J Klimes, DR Bowler, and A Michaelides, J. Phys.: Condens. Matter 22, 022201 (2010)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_b88_init, + NULL, + NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_mb88) = { + XC_GGA_X_MB88, + XC_EXCHANGE, + "Modified Becke 88 for proton transfer", + XC_FAMILY_GGA, + "V Tognetti and C Adamo, J. Phys. Chem. A 113, 14415-14419 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_b88_init, + NULL, + NULL, + work_gga_x, + NULL +}; + +#define XC_KINETIC_FUNCTIONAL +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_k_llp) = { + XC_GGA_K_LLP, + XC_KINETIC, + "Becke 88", + XC_FAMILY_GGA, + "H Lee, C Lee, and RG Parr, Phys. Rev. A 44, 768 (1991)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_b88_init, + NULL, + NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_fr_b88) = { + XC_GGA_K_FR_B88, + XC_KINETIC, + "Fuentealba & Reyes (B88 version)", + XC_FAMILY_GGA, + "P Fuentealba and O Reyes, Chem. Phys. Lett. 232, 31-34 (1995)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_b88_init, + NULL, + NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_thakkar) = { + XC_GGA_K_THAKKAR, + XC_KINETIC, + "Thakkar 1992", + XC_FAMILY_GGA, + "AJ Thakkar, Phys. Rev. A 46, 6920-6924 (1992)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_b88_init, + NULL, + NULL, + work_gga_k, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_bayesian.c b/libxc-2.2.0/src/gga_x_bayesian.c new file mode 100644 index 000000000..b4dfd74fa --- /dev/null +++ b/libxc-2.2.0/src/gga_x_bayesian.c @@ -0,0 +1,81 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_BAYESIAN 125 /* Bayesian best fit for the enhancement factor */ + +void XC(gga_x_bayesian_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static const FLOAT theta[3] = { + 1.0008, 0.1926, 1.8962 + }; + + FLOAT ss, aux, f0, f02, df0, d2f0, d3f0; + + ss = X2S*x; + + aux = 1.0 + ss; + f0 = ss/aux; + f02 = f0*f0; + + *f = theta[0] + f02*(theta[1] + f02*theta[2]); + + if(order < 1) return; + + df0 = 1.0/(aux*aux); + + *dfdx = 2.0*f0*(theta[1] + 2.0*theta[2]*f02)*df0; + *dfdx *= X2S; + + if(order < 2) return; + + d2f0 = -2.0*df0/aux; + + *d2fdx2 = 2.0*(theta[1] + 6.0*theta[2]*f02)*df0*df0 + 2.0*f0*(theta[1] + 2.0*theta[2]*f02)*d2f0; + *d2fdx2 *= X2S*X2S; + + if(order < 3) return; + + d3f0 = -3.0*d2f0/aux; + + *d3fdx3 = 24.0*theta[2]*f0*df0*df0*df0 + 6.0*(theta[1] + 6.0*theta[2]*f02)*df0*d2f0 + + 2.0*f0*(theta[1] + 2.0*theta[2]*f02)*d3f0; + *d3fdx3 *= X2S*X2S*X2S; + +} + +#define func XC(gga_x_bayesian_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_bayesian) = { + XC_GGA_X_BAYESIAN, + XC_EXCHANGE, + "Bayesian best fit for the enhancement factor", + XC_FAMILY_GGA, + "JJ Mortensen, K Kaasbjerg, SL Frederiksen, JK Nørskov, JP Sethna, and KW Jacobsen, Phys. Rev. Lett. 95, 216401 (2005)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_bpccac.c b/libxc-2.2.0/src/gga_x_bpccac.c new file mode 100644 index 000000000..fa503c7ec --- /dev/null +++ b/libxc-2.2.0/src/gga_x_bpccac.c @@ -0,0 +1,89 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_BPCCAC 98 /* BPCCAC (GRAC for the energy) */ + +static void +gga_x_bpccac_init(XC(func_type) *p) +{ + p->n_func_aux = 2; + p->func_aux = (XC(func_type) **) malloc(2*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + p->func_aux[1] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_GGA_X_PBE_TCA, p->nspin); + XC(func_init)(p->func_aux[1], XC_GGA_X_PW91, p->nspin); +} + + +void XC(gga_x_bpccac_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static const FLOAT alpha = 1.0, beta = 19.0; + + FLOAT f1, df1dx, d2f1dx2, d3f1dx3; + FLOAT f2, df2dx, d2f2dx2, d3f2dx3; + FLOAT aux, den, fab, dfab, d2fab, d3fab; + + XC(gga_x_pbe_enhance) (p->func_aux[0], order, x, &f1, &df1dx, &d2f1dx2, &d3f1dx3); + XC(gga_x_pw91_enhance)(p->func_aux[1], order, x, &f2, &df2dx, &d2f2dx2, &d3f2dx3); + + aux = EXP(-(alpha*(x - beta))); + den = 1.0 + aux; + + fab = 1.0/den; + *f = (1.0 - fab)*f1 + fab*f2; + + if(order < 1) return; + + dfab = alpha*aux/(den*den); + *dfdx = dfab*(f2 - f1) + (1.0 - fab)*df1dx + fab*df2dx; + + if(order < 2) return; + + d2fab = -alpha*alpha*aux*(1.0 - aux)/(den*den*den); + *d2fdx2 = d2fab*(f2 - f1) + 2.0*dfab*(df2dx - df1dx) + (1.0 - fab)*d2f1dx2 + fab*d2f2dx2; + + if(order < 3) return; + + d3fab = alpha*alpha*alpha*aux*(1.0 - 4.0*aux + aux*aux)/(den*den*den*den); + *d3fdx3 = d3fab*(f2 - f1) + 3.0*dfab*(df2dx - df1dx) + 3.0*dfab*(d2f2dx2 - d2f1dx2) + (1.0 - fab)*d3f1dx3 + fab*d3f2dx3; +} + +#define func XC(gga_x_bpccac_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_bpccac) = { + XC_GGA_X_BPCCAC, + XC_EXCHANGE, + "BPCCAC (GRAC for the energy)", + XC_FAMILY_GGA, + "E Bremond, D Pilard, I Ciofini, H Chermette, C Adamo, and P Cortona, Theor Chem Acc 131, 1184 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_bpccac_init, + NULL, NULL, + work_gga_x, + NULL +}; + diff --git a/libxc-2.2.0/src/gga_x_c09x.c b/libxc-2.2.0/src/gga_x_c09x.c new file mode 100644 index 000000000..a57ba6ad6 --- /dev/null +++ b/libxc-2.2.0/src/gga_x_c09x.c @@ -0,0 +1,73 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_C09X 158 /* C09x to be used with the VdW of Rutgers-Chalmers */ + +void XC(gga_x_c09x_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static FLOAT mu = 0.0617, kappa = 1.245, alpha = 0.0483; + + FLOAT ss, ss2, aux, aux2; + + ss = X2S*x; + ss2 = ss*ss; + + aux = EXP(-0.5*alpha*ss2); + aux2 = aux*aux; + + *f = 1.0 + mu*ss2*aux2 + kappa*(1.0 - aux); + + if(order < 1) return; + + *dfdx = 2.0*ss*mu*aux2*(1.0 - alpha*ss2) + alpha*kappa*ss*aux; + *dfdx *= X2S; + + if(order < 2) return; + + *d2fdx2 = 2.0*mu*aux2*(1.0 + alpha*ss2*(2.0*alpha*ss2 - 5.0)) + alpha*kappa*aux*(1.0 - alpha*ss2); + *d2fdx2 *= X2S*X2S; + + if(order < 3) return; + + *d3fdx3 = alpha*ss*(-4.0*mu*aux2*(6.0 + alpha*ss2*(2.0*alpha*ss2 - 9.0)) + alpha*kappa*aux*(alpha*ss2 - 3.0)); + *d3fdx3 *= X2S*X2S*X2S; + +} + + +#define func XC(gga_x_c09x_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_c09x) = { + XC_GGA_X_C09X, + XC_EXCHANGE, + "C09x to be used with the VdW of Rutgers-Chalmers", + XC_FAMILY_GGA, + "VR Cooper, Phys. Rev. B 81, 161104(R) (2010)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_dk87.c b/libxc-2.2.0/src/gga_x_dk87.c new file mode 100644 index 000000000..6f06b6dd4 --- /dev/null +++ b/libxc-2.2.0/src/gga_x_dk87.c @@ -0,0 +1,96 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_DK87_R1 111 /* dePristo & Kress 87 (version R1) */ +#define XC_GGA_X_DK87_R2 112 /* dePristo & Kress 87 (version R2) */ + +void XC(gga_x_dk87_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static const FLOAT a1[2] = {0.861504, 0.861213}, + b1[2] = {0.044286, 0.042076}, alpha[2] = {1.0, 0.98}; + static const FLOAT betag = 0.00132326681668994855/X_FACTOR_C; /* 7/(432*pi*(6*pi^2)^(1/3)) */ + + FLOAT f0, f1, f2, df1, df2, d2f1, d2f2, d3f1; + int func; + + switch(p->info->number){ + case XC_GGA_X_DK87_R2: func = 1; break; + default: func = 0; /* XC_GGA_X_DK87_R1 */ + } + + f0 = a1[func]*POW(x, alpha[func]); + f1 = betag*x*x*(1.0 + f0); + f2 = 1.0 + b1[func]*x*x; + + *f = 1.0 + f1/f2; + + if(order < 1) return; + + df1 = betag*x*(2.0 + (2.0 + alpha[func])*f0); + df2 = 2.0*b1[func]*x; + + *dfdx = DFRACTION(f1, df1, f2, df2); + + if(order < 2) return; + + d2f1 = betag*(2.0 + (1.0 + alpha[func])*(2.0 + alpha[func])*f0); + d2f2 = 2.0*b1[func]; + + *d2fdx2 = D2FRACTION(f1, df1, d2f1, f2, df2, d2f2); + + if(order < 3) return; + + d3f1 = betag*alpha[func]*(1.0 + alpha[func])*(2.0 + alpha[func])*f0/x; + + *d3fdx3 = D3FRACTION(f1, df1, d2f1, d3f1, f2, df2, d2f2, 0.0); +} + +#define func XC(gga_x_dk87_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_dk87_r1) = { + XC_GGA_X_DK87_R1, + XC_EXCHANGE, + "dePristo & Kress 87 version R1", + XC_FAMILY_GGA, + "AE DePristo and JD Kress, J. Chem. Phys. 86, 1425 (1987)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-24, 1e-24, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_dk87_r2) = { + XC_GGA_X_DK87_R2, + XC_EXCHANGE, + "dePristo & Kress 87 version R2", + XC_FAMILY_GGA, + "AE DePristo and JD Kress, J. Chem. Phys. 86, 1425 (1987)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_ft97.c b/libxc-2.2.0/src/gga_x_ft97.c new file mode 100644 index 000000000..8f77b912d --- /dev/null +++ b/libxc-2.2.0/src/gga_x_ft97.c @@ -0,0 +1,114 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_FT97_A 114 /* Filatov & Thiel 97 (version A) */ +#define XC_GGA_X_FT97_B 115 /* Filatov & Thiel 97 (version B) */ + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, FLOAT sigma, + FLOAT *f, FLOAT *dfdx, + FLOAT *vsigma, FLOAT *d2fdx2, FLOAT *v2sigma2, FLOAT *v2sigmax) +{ + static const FLOAT + beta0 = 0.002913644, beta1 = 0.0009474169, beta2 = 6255746.320201; /* beta2 = 2501.149^2 ?? (Eq. (16a) */ + + FLOAT x2, beta, dbetadsigma, d2betadsigma2; + FLOAT f0, f1, f2, df2, d2f2, f3, df3, d2f3; + FLOAT df3df2, d2f3df2, d2f3df2x; + int func; + + switch(p->info->number){ + case XC_GGA_X_FT97_B: func = 1; break; + default: func = 0; /* XC_GGA_X_FT97_A */ + } + + if(func==0){ + beta = 0.00293; + }else{ + f1 = beta2 + sigma; + beta = beta0 + beta1*sigma/f1; + } + + x2 = x*x; + f2 = beta*ASINH(x2); + f3 = SQRT(1.0 + 9.0*x2*f2*f2); + *f = 1.0 + beta/X_FACTOR_C*x2/f3; + + if(order < 1) return; + + f0 = SQRT(1.0 + x2*x2); + df2 = beta*2.0*x/f0; + df3 = 9.0*x*f2*(f2 + x*df2)/f3; + + dbetadsigma = (func == 0) ? 0.0 : beta1*beta2/(f1*f1); + + *dfdx = beta/X_FACTOR_C*x*(2.0*f3 - x*df3)/(f3*f3); + + df3df2 = 9.0*x2*f2/f3; + *vsigma = dbetadsigma*x2/(f3*X_FACTOR_C)*(1.0 - f2*df3df2/f3); + + if(order < 2) return; + + d2f2 = beta*2.0*(1.0 - x2*x2)/(f0*f0*f0); + d2f3 = 9.0*(x2*f3*df2*df2 + f2*f2*(f3 - x*df3) + x*f2*(df2*(4.0*f3 - x*df3) + x*f3*d2f2)) / + (f3*f3); + + *d2fdx2 = beta/X_FACTOR_C*(2.0*(f3*f3 - 2.0*x*f3*df3 + x2*df3*df3) - x2*f3*d2f3)/(f3*f3*f3); + + d2betadsigma2 = (func == 0) ? 0.0 : -2.0*dbetadsigma/f1; + d2f3df2 = 9.0*x2*(f3 - f2*df3df2)/(f3*f3); + *v2sigma2 = d2betadsigma2*x2/(f3*X_FACTOR_C)*(1.0 - f2*df3df2/f3) + - dbetadsigma*dbetadsigma*x2*f2/(f3*f3*X_FACTOR_C*beta)*(2.0*df3df2 - 2.0*df3df2*df3df2*f2/f3 + d2f3df2*f2); + + d2f3df2x = 9.0*x*(2*f2/f3 + x*(df2*f3 - f2*df3)/(f3*f3)); + *v2sigmax = dbetadsigma*2.0*x/(f3*X_FACTOR_C)*(1.0 - f2*df3df2/f3) + - dbetadsigma/X_FACTOR_C*x2/(f3*f3)*(df3 + (df2*f3 - 2.0*f2*df3)/f3*df3df2 + d2f3df2x*f2); +} + +#define HEADER 2 +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_ft97_a) = { + XC_GGA_X_FT97_A, + XC_EXCHANGE, + "Filatov & Thiel 97 (version A)", + XC_FAMILY_GGA, + "M Filatov and W Thiel, Mol. Phys 91, 847 (1997)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_ft97_b) = { + XC_GGA_X_FT97_B, + XC_EXCHANGE, + "Filatov & Thiel 97 (version B)", + XC_FAMILY_GGA, + "M Filatov and W Thiel, Mol. Phys 91, 847 (1997)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_g96.c b/libxc-2.2.0/src/gga_x_g96.c new file mode 100644 index 000000000..34b407a2f --- /dev/null +++ b/libxc-2.2.0/src/gga_x_g96.c @@ -0,0 +1,61 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_G96 107 /* Gill 96 */ + +void +XC(gga_x_g96_enhance)(const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static const FLOAT c1 = 1.0/137.0; + FLOAT sx = SQRT(x); + + *f = 1.0 + c1/X_FACTOR_C*x*sx; + + if(order < 1) return; + + *dfdx = 3.0*c1/(2.0*X_FACTOR_C)*sx; + + if(order < 2) return; + + *d2fdx2 = 3.0*c1/(4.0*X_FACTOR_C*sx); + + if(order < 2) return; + + *d3fdx3 = -3.0*c1/(8.0*X_FACTOR_C*x*sx); +} + +#define func XC(gga_x_g96_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_g96) = { + XC_GGA_X_G96, + XC_EXCHANGE, + "Gill 96", + XC_FAMILY_GGA, + "PMW Gill, Mol. Phys. 89, 433 (1996)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_herman.c b/libxc-2.2.0/src/gga_x_herman.c new file mode 100644 index 000000000..b1e3e0ec0 --- /dev/null +++ b/libxc-2.2.0/src/gga_x_herman.c @@ -0,0 +1,61 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_HERMAN 104 /* Herman et al original GGA */ + +void XC(gga_x_herman_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static const FLOAT beta = 0.003/X_FACTOR_C; + + *f = 1.0 + beta*x*x; + + if(order < 1) return; + + *dfdx = 2.0*beta*x; + + if(order < 2) return; + + *d2fdx2 = 2.0*beta; + + if(order < 3) return; + + *d3fdx3 = 0.0; +} + +#define func XC(gga_x_herman_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_herman) = { + XC_GGA_X_HERMAN, + XC_EXCHANGE, + "Herman Xalphabeta GGA", + XC_FAMILY_GGA, + "F Herman, JP Van Dyke, and IB Ortenburger, Phys. Rev. Lett. 22, 807 (1969)\n" + "F Herman, IB Ortenburger, and JP Van Dyke, Int. J. Quantum Chem. Symp. 3, 827 (1970)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_hjs.c b/libxc-2.2.0/src/gga_x_hjs.c new file mode 100644 index 000000000..616184e1a --- /dev/null +++ b/libxc-2.2.0/src/gga_x_hjs.c @@ -0,0 +1,308 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_HJS_PBE 525 /* HJS screened exchange PBE version */ +#define XC_GGA_X_HJS_PBE_SOL 526 /* HJS screened exchange PBE_SOL version */ +#define XC_GGA_X_HJS_B88 527 /* HJS screened exchange B88 version */ +#define XC_GGA_X_HJS_B97X 528 /* HJS screened exchange B97x version */ + +typedef struct{ + FLOAT omega; + + const FLOAT *a, *b; /* pointers to the a and b parameters */ +} gga_x_hjs_params; + +static const FLOAT a_PBE[] = + {0.0159941, 0.0852995, -0.160368, 0.152645, -0.0971263, 0.0422061}; +static const FLOAT b_PBE[] = + {5.33319, -12.4780, 11.0988, -5.11013, 1.71468, -0.610380, 0.307555, -0.0770547, 0.0334840}; + +static const FLOAT a_PBE_sol[] = + {0.0047333, 0.0403304, -0.0574615, 0.0435395, -0.0216251, 0.0063721}; +static const FLOAT b_PBE_sol[] = + {8.52056, -13.9885, 9.28583, -3.27287, 0.843499, -0.235543, 0.0847074, -0.0171561, 0.0050552}; + +static const FLOAT a_B88[] = + {0.00968615, -0.0242498, 0.0259009, -0.0136606, 0.00309606, -7.32583e-5}; +static const FLOAT b_B88[] = + {-2.50356, 2.79656, -1.79401, 0.714888, -0.165924, 0.0118379, 0.0037806, -1.57905e-4, 1.45323e-6}; + +static const FLOAT a_B97x[] = + {0.0027355, 0.0432970, -0.0669379, 0.0699060, -0.0474635, 0.0153092}; +static const FLOAT b_B97x[] = + {15.8279, -26.8145, 17.8127, -5.98246, 1.25408, -0.270783, 0.0919536, -0.0140960, 0.0045466}; + +static void +gga_x_hjs_init(XC(func_type) *p) +{ + assert(p->params == NULL); + p->params = malloc(sizeof(gga_x_hjs_params)); + + XC(gga_x_hjs_set_params)(p, 0.0); + + switch(p->info->number){ + case XC_GGA_X_HJS_PBE: + ((gga_x_hjs_params *)(p->params))->a = a_PBE; + ((gga_x_hjs_params *)(p->params))->b = b_PBE; + break; + case XC_GGA_X_HJS_PBE_SOL: + ((gga_x_hjs_params *)(p->params))->a = a_PBE_sol; + ((gga_x_hjs_params *)(p->params))->b = b_PBE_sol; + break; + case XC_GGA_X_HJS_B88: + ((gga_x_hjs_params *)(p->params))->a = a_B88; + ((gga_x_hjs_params *)(p->params))->b = b_B88; + break; + case XC_GGA_X_HJS_B97X: + ((gga_x_hjs_params *)(p->params))->a = a_B97x; + ((gga_x_hjs_params *)(p->params))->b = b_B97x; + break; + default: + fprintf(stderr, "Internal error in gga_x_hjs_init\n"); + exit(1); + } +} + +void +XC(gga_x_hjs_set_params)(XC(func_type) *p, FLOAT omega) +{ + gga_x_hjs_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_x_hjs_params *) (p->params); + + params->omega = omega; +} + + +#define HEADER 3 + +/* This implementation follows the one from nwchem */ + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, FLOAT ds, + FLOAT *f, FLOAT *dfdx, FLOAT *lvrho) +{ + static const FLOAT AA=0.757211, BB=-0.106364, CC=-0.118649, DD=0.609650; + + FLOAT omega, kF, ss, ss2; + FLOAT H, F, EG; + FLOAT nu, zeta, eta, lambda, lambda2, lambda3, lambda4, chi, chi2, chi3, chi4, chi5; + FLOAT sqzpn2, sqepn2, sqlpn2; + FLOAT term1, term2, term3, term4, term5, term6; + + FLOAT dnudrho, dssdx, dHds, dFds, dEGds; + FLOAT dzeta, dchids, dchidnu; + + assert(p->params != NULL); + omega = ((gga_x_hjs_params *)(p->params))->omega; + + kF = POW(3.0*M_PI*M_PI*ds, 1.0/3.0); + nu = omega/kF; + + /* Rescaling the s values to ensure the Lieb-Oxford bound for s>8.3 */ + ss = X2S*x; + ss2 = ss*ss; + + if(order >= 1){ + dnudrho = -nu/(3.0*ds); + dssdx = X2S; + } + + /* first let us calculate H(s) */ + { + const FLOAT *a, *b; + FLOAT Hnum, Hden, dHnum, dHden; + + a = ((gga_x_hjs_params *)(p->params))->a; + b = ((gga_x_hjs_params *)(p->params))->b; + + Hnum = ss2*(a[0] + ss*(a[1] + ss*(a[2] + ss*(a[3] + ss*(a[4] + ss*a[5]))))); + Hden = 1.0 + ss*(b[0] + ss*(b[1] + ss*(b[2] + ss*(b[3] + ss*(b[4] + ss*(b[5] + ss*(b[6] + ss*(b[7] + ss*b[8])))))))); + + H = Hnum/Hden; + + if(order >= 1){ + dHnum = ss*(2.0*a[0] + ss*(3.0*a[1] + ss*(4.0*a[2] + ss*(5.0*a[3] + ss*(6.0*a[4] + ss*7.0*a[5]))))); + dHden = b[0] + ss*(2.0*b[1] + ss*(3.0*b[2] + ss*(4.0*b[3] + + ss*(5.0*b[4] + ss*(6.0*b[5] + ss*(7.0*b[6] + ss*(8.0*b[7] + ss*9.0*b[8]))))))); + + dHds = (Hden*dHnum - Hnum*dHden)/(Hden*Hden); + } + } + + /* auxiliary variables */ + { + FLOAT aux, saux; + + zeta = ss2*H; + eta = AA + zeta; + lambda = DD + zeta; + + aux = lambda + nu*nu; + saux = sqrt(aux); + chi = nu/saux; + + lambda2 = lambda*lambda; + lambda3 = lambda*lambda2; + lambda4 = lambda*lambda3; + + chi2 = chi*chi; + chi3 = chi*chi2; + chi4 = chi*chi3; + chi5 = chi*chi4; + + if(order >= 1){ + dzeta = 2*ss*H + ss2*dHds; + /* deta = dlambda = dzeta */ + dchids = -nu*dzeta/(2.0*aux*saux); + dchidnu = lambda/(aux*saux); + } + } + + /* now we calculate F(s) */ + { + FLOAT aux = 1.0 + 0.25*ss2; + + F = 1.0 - ss2/(27.0*CC*aux) - zeta/(2.0*CC); + + if(order >= 1){ + dFds = -2.0*ss/(27.0*CC*aux*aux) - dzeta/(2.0*CC); + } + } + + /* and now G(s) */ + { + FLOAT sqrtl = sqrt(lambda), sqrtz = sqrt(zeta), sqrte = sqrt(eta); + + EG = -(2.0/5.0)*CC*F*lambda - (4.0/15.0)*BB*lambda2 - (6.0/5.0)*AA*lambda3 + - lambda3*sqrtl*((4.0/5.0)*M_SQRTPI + (12.0/5.0)*(sqrtz - sqrte)); + + if(order >= 1){ + dEGds = -(2.0/5.0)*CC*(dFds*lambda + F*dzeta) - (8.0/15.0)*BB*lambda*dzeta - (18.0/5.0)*AA*lambda2*dzeta + - (14.0/5.0)*M_SQRTPI*lambda2*sqrtl*dzeta + - (42.0/5.0)*lambda2*sqrtl*dzeta*((sqrtz - sqrte) + (1.0/7.0)*lambda*(1.0/sqrtz - 1.0/sqrte)); + } + } + + sqzpn2 = sqrt(zeta + nu*nu); + sqepn2 = sqrt(eta + nu*nu); + sqlpn2 = sqrt(lambda + nu*nu); + + term1 = -(4.0/9.0)*BB*(1.0 - chi)/lambda; + term2 = -(2.0/9.0)*CC*F*(2.0 - 3.0*chi + chi3)/lambda2; + term3 = -(1.0/9.0)*EG*(8.0 - 15.0*chi + 10.0*chi3 - 3.0*chi5)/lambda3; + term4 = 2.0*nu*(sqzpn2 - sqepn2); + term5 = 2.0*zeta*LOG((nu + sqzpn2)/(nu + sqlpn2)); + term6 = -2.0*eta*LOG((nu + sqepn2)/(nu + sqlpn2)); + + *f = AA + term1 + term2 + term3 + term4 + term5 + term6; + + if(order >= 1){ + FLOAT dterm1ds, dterm2ds, dterm3ds, dterm4ds, dterm5ds, dterm6ds; + FLOAT dterm1dnu, dterm2dnu, dterm3dnu, dterm4dnu, dterm5dnu, dterm6dnu; + + dterm1ds = (4.0/9.0)*BB*(lambda*dchids + (1.0 - chi)*dzeta)/lambda2; + dterm2ds =-(2.0/9.0)*CC* + (chi - 1.0)*(-dFds*(2.0 - chi - chi2)*lambda + F*(3.0*(1.0 + chi)*lambda*dchids + 2.0*(2.0 - chi - chi2)*dzeta))/lambda3; + dterm3ds = -(1.0/9.0)*(chi - 1.0)*(chi - 1.0)* + ((8.0 + chi - 6.0*chi2 - 3.0*chi3)*lambda*dEGds + + 3.0*EG*(-5.0*(1.0 + chi)*(1.0 + chi)*lambda*dchids + (chi - 1.0)*(8.0 + 9.0*chi + 3.0*chi2)*dzeta))/lambda4; + dterm4ds = nu*dzeta*(1.0/sqzpn2 - 1.0/sqepn2); + dterm5ds = dzeta*(-(zeta/lambda)*(1.0 - nu/sqlpn2) + 1.0 + 2.0*LOG((nu + sqzpn2)/(nu + sqlpn2)) - nu/sqzpn2); + dterm6ds =-dzeta*(-( eta/lambda)*(1.0 - nu/sqlpn2) + 1.0 + 2.0*LOG((nu + sqepn2)/(nu + sqlpn2)) - nu/sqepn2); + + *dfdx = dterm1ds + dterm2ds + dterm3ds + dterm4ds + dterm5ds + dterm6ds; + + dterm1dnu = (4.0/9.0)*BB*dchidnu/lambda; + dterm2dnu = (2.0/3.0)*CC*F*(1.0 - chi2)*dchidnu/lambda2; + dterm3dnu = (5.0/3.0)*EG*(1.0 - 2.0*chi2 + chi4)*dchidnu/lambda3; + dterm4dnu = 2.0*(sqzpn2 - sqepn2 + nu*nu*(1.0/sqzpn2 - 1.0/sqepn2)); + dterm5dnu = 2.0*zeta*(1.0/sqzpn2 - 1.0/sqlpn2); + dterm6dnu =-2.0*eta*(1.0/sqepn2 - 1.0/sqlpn2); + + *lvrho = dterm1dnu + dterm2dnu + dterm3dnu + dterm4dnu + dterm5dnu + dterm6dnu; + + /* scale and convert to the right variables */ + *dfdx *= dssdx; + *lvrho *= dnudrho; + } +} + +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_hjs_pbe) = { + XC_GGA_X_HJS_PBE, + XC_EXCHANGE, + "HJS screened exchange PBE version", + XC_FAMILY_GGA, + "TM Henderson, BG Janesko, and GE Scuseria, J. Chem. Phys. 128, 194105 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_hjs_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_hjs_pbe_sol) = { + XC_GGA_X_HJS_PBE_SOL, + XC_EXCHANGE, + "HJS screened exchange PBE_SOL version", + XC_FAMILY_GGA, + "TM Henderson, BG Janesko, and GE Scuseria, J. Chem. Phys. 128, 194105 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_hjs_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_hjs_b88) = { + XC_GGA_X_HJS_B88, + XC_EXCHANGE, + "HJS screened exchange B88 version", + XC_FAMILY_GGA, + "TM Henderson, BG Janesko, and GE Scuseria, J. Chem. Phys. 128, 194105 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-6, 1e-11, 0.0, 0.0, /* densities smaller than 1e-6 yield NaNs */ + gga_x_hjs_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_hjs_b97x) = { + XC_GGA_X_HJS_B97X, + XC_EXCHANGE, + "HJS screened exchange B97x version", + XC_FAMILY_GGA, + "TM Henderson, BG Janesko, and GE Scuseria, J. Chem. Phys. 128, 194105 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_hjs_init, + NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_htbs.c b/libxc-2.2.0/src/gga_x_htbs.c new file mode 100644 index 000000000..10cdf33be --- /dev/null +++ b/libxc-2.2.0/src/gga_x_htbs.c @@ -0,0 +1,147 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_HTBS 191 /* Haas, Tran, Blaha, and Schwarz */ + +/* The equations to solve in order to obtain the coeficients cc are + + G(s1) = 0 + G(s2) = 1 + G'(s1) = 0 + G'(s2) = 0 +G''(s1) = 0 +G''(s2) = 0 +*/ + +static FLOAT s1 = 0.6, s2 = 2.6; +static FLOAT cc[6]; + +static void +gga_x_htbs_init(XC(func_type) *p) +{ + FLOAT s12, s22, s1_s2, aux; + + p->n_func_aux = 2; + p->func_aux = (XC(func_type) **) malloc(2*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + p->func_aux[1] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_GGA_X_RPBE, p->nspin); + XC(func_init)(p->func_aux[1], XC_GGA_X_WC, p->nspin); + + s12 = s1*s1; + s22 = s2*s2; + s1_s2 = s1 - s2; + + aux = s1_s2*s1_s2; + aux = 1.0/(aux*aux*s1_s2); + + cc[0] = aux*s12*s1*(s12 - 5.0*s1*s2 + 10*s22); + cc[1] = -aux*30.0*s12*s22; + cc[2] = aux*30*s1*s2*(s1 + s2); + cc[3] = -aux*10*(s12 + 4.0*s1*s2 + s22); + cc[4] = aux*15.0*(s1 + s2); + cc[5] = -aux*6.0; +} + + +void XC(gga_x_htbs_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + FLOAT s, g, dg, d2g, d3g, a, da, d2a, d3a, b, db, d2b, d3b; + + s = X2S*x; + + if(s > s1) + XC(gga_x_rpbe_enhance)(p->func_aux[0], order, x, &a, &da, &d2a, &d3a); + if(s < s2) + XC(gga_x_wc_enhance) (p->func_aux[1], order, x, &b, &db, &d2b, &d3b); + + if(s < s1) + *f = b; + else if(s > s2) + *f = a; + else{ + g = cc[0] + s*(cc[1] + s*(cc[2] + s*(cc[3] + s*(cc[4] + s*cc[5])))); + *f = g*a + (1.0 - g)*b; + } + + if(order < 1) return; + + if(s < s1) + *dfdx = db; + else if(s > s2) + *dfdx = da; + else{ + dg = cc[1] + s*(2.0*cc[2] + s*(3.0*cc[3] + s*(4.0*cc[4] + s*5.0*cc[5]))); + dg *= X2S; + + *dfdx = dg*(a - b) + g*(da - db) + db; + } + + if(order < 2) return; + + if(s < s1) + *d2fdx2 = d2b; + else if(s > s2) + *d2fdx2 = d2a; + else{ + d2g = 2.0*cc[2] + s*(6.0*cc[3] + s*(12.0*cc[4] + s*20.0*cc[5])); + d2g *= X2S*X2S; + + *d2fdx2 = d2g*(a - b) + 2.0*dg*(da - db) + g*(d2a - d2b) + d2b; + } + + if(order < 3) return; + + if(s < s1) + *d3fdx3 = d3b; + else if(s > s2) + *d3fdx3 = d3a; + else{ + d3g = 6.0*cc[3] + s*(24.0*cc[4] + s*60.0*cc[5]); + d3g *= X2S*X2S*X2S; + + *d3fdx3 = d3g*(a - b) + 3.0*d2g*(da - db) + 3.0*dg*(d2a - d2b) + g*(d3a - d3b) + d3b; + } +} + + +#define func XC(gga_x_htbs_enhance) +#include "work_gga_x.c" + + +const XC(func_info_type) XC(func_info_gga_x_htbs) = { + XC_GGA_X_HTBS, + XC_EXCHANGE, + "Haas, Tran, Blaha, and Schwarz", + XC_FAMILY_GGA, + "P Haas, F Tran, P Blaha, and K Schwarz, Phys. Rev. B 83, 205117 (2011)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_htbs_init, + NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_ityh.c b/libxc-2.2.0/src/gga_x_ityh.c new file mode 100644 index 000000000..afe297066 --- /dev/null +++ b/libxc-2.2.0/src/gga_x_ityh.c @@ -0,0 +1,123 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_ITYH 529 /* short-range recipe for exchange GGA functionals */ + +typedef struct{ + int func_id; + xc_gga_enhancement_t enhancement_factor; +} gga_x_ityh_params; + +static void +gga_x_ityh_init(XC(func_type) *p) +{ + assert(p->params == NULL); + p->params = malloc(sizeof(gga_x_ityh_params)); + + /* random functional, mainly intended for testing */ + ((gga_x_ityh_params *) (p->params))->func_id = -1; + XC(gga_x_ityh_set_params)(p, XC_GGA_X_B88, 0.2); +} + +void +XC(gga_x_ityh_set_params)(XC(func_type) *p, int func_id, FLOAT omega) +{ + gga_x_ityh_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_x_ityh_params *) (p->params); + + p->cam_omega = omega; + + /* if func_id == -1 do nothing */ + if(func_id != -1 && params->func_id == -1){ /* intialize stuff */ + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc(sizeof(XC(func_type) )); + } + + if(func_id != -1 && params->func_id != func_id){ + if(params->func_id != -1) + XC(func_end) (p->func_aux[0]); + + params->func_id = func_id; + XC(func_init) (p->func_aux[0], params->func_id, p->nspin); + + params->enhancement_factor = XC(get_gga_enhancement_factor)(func_id); + } +} + + +#define HEADER 3 + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, FLOAT ds, + FLOAT *f, FLOAT *dfdx, FLOAT *lvrho) +{ + gga_x_ityh_params *params; + FLOAT e_f, e_dfdx, e_d2fdx2; + FLOAT k_GGA, K_GGA, aa, f_aa, df_aa, d2f_aa, d3f_aa; + FLOAT dk_GGAdr, dk_GGAdx, daadr, daadx; + + assert(p != NULL && p->params != NULL); + params = (gga_x_ityh_params *) (p->params); + + /* call enhancement factor */ + params->enhancement_factor(p->func_aux[0], order, x, &e_f, &e_dfdx, &e_d2fdx2, NULL); + + K_GGA = 2.0*X_FACTOR_C*e_f; + k_GGA = SQRT(9.0*M_PI/K_GGA)*CBRT(ds); + + aa = p->cam_omega/(2.0*k_GGA); + + XC(lda_x_attenuation_function)(XC_RSF_ERF, order, aa, &f_aa, &df_aa, &d2f_aa, &d3f_aa); + + *f = e_f*f_aa; + + if(order < 1) return; + + dk_GGAdr = k_GGA/(3.0*ds); + dk_GGAdx = -k_GGA*e_dfdx/(2.0*e_f); + + daadr = -aa*dk_GGAdr/k_GGA; + daadx = -aa*dk_GGAdx/k_GGA; + + *dfdx = e_dfdx*f_aa + e_f*df_aa*daadx; + *lvrho = e_f*df_aa*daadr; +} + +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_ityh) = { + XC_GGA_X_ITYH, + XC_EXCHANGE, + "Short-range recipe for exchange GGA functionals", + XC_FAMILY_GGA, + "H Iikura, T Tsuneda, T Yanai, and K Hirao, J. Chem. Phys. 115, 3540 (2001)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_ityh_init, + NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_kt.c b/libxc-2.2.0/src/gga_x_kt.c new file mode 100644 index 000000000..9f8ef4563 --- /dev/null +++ b/libxc-2.2.0/src/gga_x_kt.c @@ -0,0 +1,125 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_KT1 145 /* Keal and Tozer version 1 */ +#define XC_GGA_XC_KT2 146 /* Keal and Tozer version 2 */ + +#define HEADER 3 + +typedef struct{ + FLOAT gamma, delta; +} gga_x_kt_params; + + +static void +gga_x_kt_init(XC(func_type) *p) +{ + + assert(p!=NULL && p->params == NULL); + p->params = malloc(sizeof(gga_x_kt_params)); + + XC(gga_x_kt_set_params)(p, -0.006, 0.1); +} + + +void +XC(gga_x_kt_set_params)(XC(func_type) *p, FLOAT gamma, FLOAT delta) +{ + gga_x_kt_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_x_kt_params *) (p->params); + + params->gamma = gamma; + params->delta = delta; +} + + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, FLOAT ds, + FLOAT *f, FLOAT *dfdx, FLOAT *lvrho) +{ + FLOAT dd, n13, n43; + gga_x_kt_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_x_kt_params *) (p->params); + + n13 = CBRT(ds); + n43 = ds*n13; + dd = 1.0/(n43 + params->delta); + + *f = 1.0 - params->gamma/X_FACTOR_C * x*x * n43*dd; + + if(order < 1) return; + + *dfdx = - params->gamma/X_FACTOR_C * 2.0*x * n43*dd; + *lvrho = - params->gamma/X_FACTOR_C * x*x * (4.0/3.0)*n13 * params->delta * dd*dd; + + if(order < 2) return; + + /* to be done */ +} + + +#include "work_gga_x.c" + +static void +gga_xc_kt2_init(XC(func_type) *p) +{ + static int funcs_id [3] = {XC_LDA_X, XC_GGA_X_KT1, XC_LDA_C_VWN}; + static FLOAT funcs_coef[3] = {1.07173 - 1.0, 1.0, 0.576727}; + + XC(mix_init)(p, 3, funcs_id, funcs_coef); +} + + +const XC(func_info_type) XC(func_info_gga_x_kt1) = { + XC_GGA_X_KT1, + XC_EXCHANGE, + "Keal and Tozer, version 1", + XC_FAMILY_GGA, + "TW Keal and DJ Tozer, J. Chem. Phys. 119, 3015 (2003)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_kt_init, + NULL, NULL, + work_gga_x, + NULL +}; + + +const XC(func_info_type) XC(func_info_gga_xc_kt2) = { + XC_GGA_XC_KT2, + XC_EXCHANGE_CORRELATION, + "Keal and Tozer, version 2", + XC_FAMILY_GGA, + "TW Keal and DJ Tozer, J. Chem. Phys. 119, 3015 (2003)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_kt2_init, + NULL, NULL, NULL, + NULL +}; + + diff --git a/libxc-2.2.0/src/gga_x_lb.c b/libxc-2.2.0/src/gga_x_lb.c new file mode 100644 index 000000000..2372a6d8d --- /dev/null +++ b/libxc-2.2.0/src/gga_x_lb.c @@ -0,0 +1,202 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +/* Note: Do not forget to add a correlation (LDA) functional to the + LB94. + + Note 2: The 160 value is hardcoded in xc.h and libxc_master.F90 to + define XC_GGA_XC_LB to keep backwards compatibility. + +*/ +#define XC_GGA_X_LB 160 /* van Leeuwen & Baerends */ +#define XC_GGA_X_LBM 182 /* van Leeuwen & Baerends modified*/ + +typedef struct{ + int modified; /* shall we use a modified version */ + FLOAT threshold; /* when to start using the analytic form */ + FLOAT ip; /* ionization potential of the species */ + FLOAT qtot; /* total charge in the region */ + + FLOAT aa; /* the parameters of LB94 */ + FLOAT gamm; + + FLOAT alpha; + FLOAT beta; +} XC(gga_x_lb_params); + +/************************************************************************ + Calculates van Leeuwen Baerends functional +************************************************************************/ + +static void +gga_lb_init(XC(func_type) *p) +{ + XC(gga_x_lb_params) *params; + + assert(p->params == NULL); + + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_LDA_X, p->nspin); + + p->params = malloc(sizeof(XC(gga_x_lb_params))); + XC(gga_lb_set_params)(p, 0, 0.0, 1e-32, 0.0); + + params = (XC(gga_x_lb_params) *) (p->params); + switch(p->info->number){ + case XC_GGA_X_LB: + params->alpha = 1.0; + params->beta = 0.05; + break; + case XC_GGA_X_LBM: + params->alpha = 1.19; + params->beta = 0.01; + break; + } +} + + +void +XC(gga_lb_set_params)(XC(func_type) *p, int modified, FLOAT threshold, FLOAT ip, FLOAT qtot) +{ + XC(gga_x_lb_params) *params; + + assert(p!=NULL && p->params!=NULL); + params = (XC(gga_x_lb_params) *) (p->params); + + params->modified = modified; + params->threshold = threshold; + params->ip = ip; + params->qtot = qtot; + + if(params->modified){ + params->aa = (params->ip > 0.0) ? 2.0*SQRT(2.0*params->ip) : 0.5; + params->gamm = CBRT(params->qtot)/(2.0*params->aa); + }else{ + params->aa = 0.5; + params->gamm = 1.0; + } +} + + +void +XC(gga_lb_modified)(const XC(func_type) *func, int np, const FLOAT *rho, const FLOAT *sigma, FLOAT r, FLOAT *vrho) +{ + int ip, is; + FLOAT gdm, x; + + XC(gga_x_lb_params) *params; + + assert(func != NULL); + + assert(func->params != NULL); + params = (XC(gga_x_lb_params) *) (func->params); + + XC(lda_vxc)(func->func_aux[0], np, rho, vrho); + + for(ip=0; ipnspin; is++){ + vrho[is] *= params->alpha; + + gdm = SQRT(sigma[(is==0) ? 0 : 2]); + + if(params->modified == 0 || + (rho[is] > params->threshold && gdm > params->threshold)){ + FLOAT f; + + if(rho[is] <= func->info->min_dens) continue; + + x = gdm/POW(rho[is], 4.0/3.0); + + if(x < 300.0) /* the actual functional */ + f = -params->beta*x*x/(1.0 + 3.0*params->beta*x*ASINH(params->gamm*x)); + else /* asymptotic expansion */ + f = -x/(3.0*LOG(2.0*params->gamm*x)); + + vrho[is] += f * CBRT(rho[is]); + + }else if(r > 0.0){ + /* the aymptotic expansion of LB94 */ + x = r + (3.0/params->aa)* + LOG(2.0*params->gamm * params->aa * 1.0 / CBRT(params->qtot)); + + /* x = x + POW(qtot*EXP(-aa*r), 1.0/3.0)/(beta*aa*aa); */ + + vrho[is] -= 1.0/x; + } + } + /* increment pointers */ + rho += func->n_rho; + sigma += func->n_sigma; + + if(vrho != NULL) + vrho += func->n_vrho; + + } /* ip loop */ +} + + +static void +gga_x_lb(const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, + FLOAT *v2rho2, FLOAT *v2rhosigma, FLOAT *v2sigma2, + FLOAT *v3rho3, FLOAT *v3rho2sigma, FLOAT *v3rhosigma2, FLOAT *v3sigma3) +{ + XC(gga_lb_modified)(p, np, rho, sigma, 0.0, vrho); +} + + +XC(func_info_type) XC(func_info_gga_x_lb) = { + XC_GGA_X_LB, + XC_EXCHANGE, + "van Leeuwen & Baerends", + XC_FAMILY_GGA, + "R van Leeuwen and EJ Baerends, Phys. Rev. A. 49, 2421 (1994)", + XC_FLAGS_3D | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_lb_init, + NULL, + NULL, + gga_x_lb, + NULL +}; + +XC(func_info_type) XC(func_info_gga_x_lbm) = { + XC_GGA_X_LBM, + XC_EXCHANGE, + "van Leeuwen & Baerends modified", + XC_FAMILY_GGA, + "PRT Schipper, OV Gritsenko, SJA van Gisbergen, and EJ Baerends, J. Chem. Phys. 112, 1344 (2000)\n" + "R van Leeuwen and EJ Baerends, Phys. Rev. A. 49, 2421 (1994)", + XC_FLAGS_3D | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_lb_init, + NULL, + NULL, + gga_x_lb, + NULL +}; + diff --git a/libxc-2.2.0/src/gga_x_lg93.c b/libxc-2.2.0/src/gga_x_lg93.c new file mode 100644 index 000000000..6bf6254be --- /dev/null +++ b/libxc-2.2.0/src/gga_x_lg93.c @@ -0,0 +1,88 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include "util.h" + +#define XC_GGA_X_LG93 113 /* Lacks & Gordon 93 */ + +void XC(gga_x_lg93_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static const FLOAT ad = 1e-8, a4 = 29.790, a6 = 22.417; + static const FLOAT a8 = 12.119, a10 = 1570.1, a12 = 55.944; + static const FLOAT a2 = 4.94113918475214219939; /* (ad + 0.1234)/b, b = 0.024974 */ + static const FLOAT b = 0.024974; + + FLOAT ss, ss2, ss4, ss6, ss8, ss10; + FLOAT f0, f1, f2, df0, df1, df2, d2f0, d2f1, d2f2, d3f0, d3f1, d3f2; + + ss = X2S*x; ss2 = ss*ss; + ss4 = ss2*ss2; ss6 = ss4*ss2; + ss8 = ss6*ss2; ss10 = ss8*ss2; + + f0 = 1.0 + a2*ss2 + a4*ss4 + a6*ss6 + a8*ss8 + a10*ss10 + a12*ss2*ss10; + f1 = POW(f0, b); + f2 = 1.0 + ad*ss2; + + *f = f1/f2; + + if(order < 1) return; + + df0 = ss*(2.0*a2 + 4.0*a4*ss2 + 6.0*a6*ss4 + 8.0*a8*ss6 + 10.0*a10*ss8 + 12.0*a12*ss10); + df1 = b*df0*f1/f0; + df2 = 2.0*ss*ad; + + *dfdx = X2S*DFRACTION(f1, df1, f2, df2); + + if(order < 2) return; + + d2f0 = 2.0*1.0*a2 + 4.0*3.0*a4*ss2 + 6.0*5.0*a6*ss4 + 8.0*7.0*a8*ss6 + + 10.0*9.0*a10*ss8 + 12.0*11.0*a12*ss10; + d2f1 = b*((b - 1.0)*df0*df0 + f0*d2f0)*f1/(f0*f0); + d2f2 = 2.0*ad; + + *d2fdx2 = X2S*X2S*D2FRACTION(f1, df1, d2f1, f2, df2, d2f2); + + if(order < 3) return; + + d3f0 = ss*(4.0*3.0*2.0*a4 + 6.0*5.0*4.0*a6*ss2 + 8.0*7.0*6.0*a8*ss4 + + 10.0*9.0*8.0*a10*ss6 + 12.0*11.0*10.0*a12*ss8); + d3f1 = (b*(b - 1.0)*df0*((b - 2.0)*df0*df0 + 3.0*f0*d2f0) + b*f0*f0*d3f0)*f1/(f0*f0*f0); + d3f2 = 0.0; + + *d3fdx3 = X2S*X2S*X2S*D3FRACTION(f1, df1, d2f1, d3f1, f2, df2, d2f2, d3f2); +} + +#define func XC(gga_x_lg93_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_lg93) = { + XC_GGA_X_LG93, + XC_EXCHANGE, + "Lacks & Gordon 93", + XC_FAMILY_GGA, + "DJ Lacks and RG Gordon, Phys. Rev. A 47, 4681 (1993)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; + diff --git a/libxc-2.2.0/src/gga_x_lv_rpw86.c b/libxc-2.2.0/src/gga_x_lv_rpw86.c new file mode 100644 index 000000000..d01fbb318 --- /dev/null +++ b/libxc-2.2.0/src/gga_x_lv_rpw86.c @@ -0,0 +1,111 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_LV_RPW86 58 /* Berland and Hyldgaard */ + +static void +gga_x_lv_rpw86_init(XC(func_type) *p) +{ + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_GGA_X_RPW86, p->nspin); +} + + +void XC(gga_x_lv_rpw86_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + const FLOAT alpha=0.02178, beta=1.15, muLV=0.8491/9.0; + FLOAT ss, ss2, ss4, ss6, a, da, d2a, d3a; + FLOAT num1, den1, num2, den2; + FLOAT dnum1, dden1, dnum2, d2num1, d2den1, d2num2, d3den1, d3num2; + + ss = X2S*x; + ss2 = ss*ss; + ss4 = ss2*ss2; + ss6 = ss2*ss4; + + XC(gga_x_pw86_enhance)(p->func_aux[0], order, x, &a, &da, &d2a, &d3a); + + num1 = 1.0 + muLV*ss2; + den1 = 1.0 + alpha*ss6; + + num2 = alpha*ss6*a; + den2 = beta + alpha*ss6; + + *f = num1/den1 + num2/den2; + + if(order < 1) return; + da /= X2S; + + dnum1 = 2.0*muLV*ss; + dden1 = 6.0*alpha*ss*ss4; + + dnum2 = alpha*ss*ss4*(6.0*a + ss*da); + + *dfdx = DFRACTION(num1, dnum1, den1, dden1) + DFRACTION(num2, dnum2, den2, dden1); + *dfdx *= X2S; + + if(order < 2) return; + d2a /= X2S*X2S; + + d2num1 = 2.0*muLV; + d2den1 = 6.0*5.0*alpha*ss4; + + d2num2 = alpha*ss4*(30.0*a + ss*(12.0*da + ss*d2a)); + + *d2fdx2 = D2FRACTION(num1, dnum1, d2num1, den1, dden1, d2den1) + + D2FRACTION(num2, dnum2, d2num2, den2, dden1, d2den1); + *d2fdx2 *= X2S*X2S; + + if(order < 2) return; + d3a /= X2S*X2S*X2S; + + d3den1 = 6.0*5.0*4.0*alpha*ss*ss2; + d3num2 = alpha*ss*ss2*(120.0*a + ss*(90.0*da + ss*(18.0*d2a + ss*d3a))); + + *d3fdx3 = D3FRACTION(num1, dnum1, d2num1, 0.0, den1, dden1, d2den1, d3den1) + + D3FRACTION(num2, dnum2, d2num2, d3num2, den2, dden1, d2den1, d3den1); + *d3fdx3 *= X2S*X2S*X2S; + +} + +#define func XC(gga_x_lv_rpw86_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_lv_rpw86) = { + XC_GGA_X_LV_RPW86, + XC_EXCHANGE, + "Berland and Hyldgaard", + XC_FAMILY_GGA, + "K Berland and P Hyldgaard, arXiv:1309.1756 [cond-mat.mtrl-sci] (2013)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_lv_rpw86_init, + NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_mpbe.c b/libxc-2.2.0/src/gga_x_mpbe.c new file mode 100644 index 000000000..fe9dfea35 --- /dev/null +++ b/libxc-2.2.0/src/gga_x_mpbe.c @@ -0,0 +1,74 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_MPBE 122 /* Adamo & Barone modification to PBE */ + + +void XC(gga_x_mpbe_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static FLOAT a = 0.157; + static FLOAT c1 = 0.21951, c2 = -0.015; + + FLOAT ss, ss2, f0, df0, d2f0, d3f0, f1; + + ss = X2S*x; + ss2 = ss*ss; + + f1 = 1.0 + a*ss2; + f0 = ss2/f1; + *f = 1.0 + c1*f0 + c2*f0*f0; + + if(order < 1) return; + + df0 = DFRACTION(ss2, 2.0*ss, f1, 2.0*a*ss); + + *dfdx = X2S*(c1 + 2.0*c2*f0)*df0; + + if(order < 2) return; + + d2f0 = D2FRACTION(ss2, 2.0*ss, 2.0, f1, 2.0*a*ss, 2.0*a); + *d2fdx2 = X2S*X2S*((c1 + 2.0*c2*f0)*d2f0 + 2.0*c2*df0*df0); + + if(order < 3) return; + + d3f0 = D3FRACTION(ss2, 2.0*ss, 2.0, 0.0, f1, 2.0*a*ss, 2.0*a, 0.0); + *d3fdx3 = X2S*X2S*X2S*((c1 + 2.0*c2*f0)*d3f0 + 6.0*c2*df0*d2f0); +} + + +#define func XC(gga_x_mpbe_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_mpbe) = { + XC_GGA_X_MPBE, + XC_EXCHANGE, + "Adamo & Barone modification to PBE", + XC_FAMILY_GGA, + "C Adamo and V Barone, J. Chem. Phys. 116, 5933 (2002)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_n12.c b/libxc-2.2.0/src/gga_x_n12.c new file mode 100644 index 000000000..8d5a036c3 --- /dev/null +++ b/libxc-2.2.0/src/gga_x_n12.c @@ -0,0 +1,157 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_GGA_X_N12 82 /* N12 functional from Minnesota */ +#define XC_HYB_GGA_X_N12_SX 81 /* N12-SX functional from Minnesota */ + +static const FLOAT CC_N12[4][4] = { + { 1.00000e+00, 5.07880e-01, 1.68233e-01, 1.28887e-01}, + { 8.60211e-02, -1.71008e+01, 6.50814e+01, -7.01726e+01}, + {-3.90755e-01, 5.13392e+01, -1.66220e+02, 1.42738e+02}, + { 4.03611e-01, -3.44631e+01, 7.61661e+01, -2.41834e+00} +}; + +static const FLOAT CC_N12_SX[4][4] = { + { 6.81116e-01, 1.88858e+00, 1.78590e+00, 8.79456e-01}, + {-8.12270e-02, -1.08723e+00, -4.18682e+00, -3.00000e+01}, + { 5.36236e-01, -5.45678e+00, 3.00000e+01, 5.51105e+01}, + {-7.09913e-01, 1.30001e+01, -7.24877e+01, 2.98363e+01} +}; + + +static void +hyb_gga_x_n12_sx_init(XC(func_type) *p) +{ + p->cam_beta = 0.25; + p->cam_omega = 0.11; +} + + +static void +func(const XC(func_type) *pt, XC(gga_work_c_t) *r) +{ + int is; + const FLOAT (*CC)[4]; + const FLOAT sign[2] = {1.0, -1.0}, omega_x=2.5, gamma_x=0.004; + + FLOAT cnst_rs, opz, opz13, rss, x2; + FLOAT vx, vx2, vx3, ux_d, ux, ux2, ux3; + FLOAT pol1, pol2, pol3, pol4; + FLOAT ex, FN12; + + FLOAT drssdrs, drssdz, dvxdrss, duxdxs; + FLOAT dpol1, dpol2, dpol3, dpol4; + FLOAT dexdz, dexdrss, dFN12dux, dFN12dvx; + + CC = (pt->info->number == XC_GGA_X_N12) ? CC_N12 : CC_N12_SX; + cnst_rs = CBRT(4.0*M_PI/3.0); + + r->f = 0.0; + if(r->order >= 1) + r->dfdrs = r->dfdz = r->dfdxt = r->dfdxs[0] = r->dfdxs[1] = 0.0; + + /* now the spin-resolved part */ + for(is = 0; is < 2; is++){ + opz = 1.0 + sign[is]*r->zeta; + if(opz < pt->info->min_zeta) continue; + + opz13 = CBRT(opz); + rss = r->rs*M_CBRT2/opz13; + x2 = r->xs[is]*r->xs[is]; + + vx = 1.0/(1.0 + (cnst_rs/omega_x)*rss); + + ux_d = 1.0/(1.0 + gamma_x*x2); + ux = gamma_x*x2*ux_d; + + vx2 = vx*vx; vx3 = vx2*vx; + ux2 = ux*ux; ux3 = ux2*ux; + + pol1 = CC[0][0] + CC[0][1]*ux + CC[0][2]*ux2 + CC[0][3]*ux3; + pol2 = CC[1][0] + CC[1][1]*ux + CC[1][2]*ux2 + CC[1][3]*ux3; + pol3 = CC[2][0] + CC[2][1]*ux + CC[2][2]*ux2 + CC[2][3]*ux3; + pol4 = CC[3][0] + CC[3][1]*ux + CC[3][2]*ux2 + CC[3][3]*ux3; + + FN12 = pol1 + vx*pol2 + vx2*pol3 + vx3*pol4; + + ex = -X_FACTOR_C*opz/(2.0*cnst_rs*rss); + r->f += ex*FN12; + + if(r->order < 1) continue; + + drssdrs = M_CBRT2/opz13; + drssdz = -sign[is]*rss/(3.0*opz); + + dvxdrss = -(cnst_rs/omega_x)*vx*vx; + duxdxs = 2.0*gamma_x*r->xs[is]*ux_d*ux_d; + + dpol1 = CC[0][1] + 2.0*CC[0][2]*ux + 3.0*CC[0][3]*ux2; + dpol2 = CC[1][1] + 2.0*CC[1][2]*ux + 3.0*CC[1][3]*ux2; + dpol3 = CC[2][1] + 2.0*CC[2][2]*ux + 3.0*CC[2][3]*ux2; + dpol4 = CC[3][1] + 2.0*CC[3][2]*ux + 3.0*CC[3][3]*ux2; + + dFN12dux = dpol1 + vx*dpol2 + vx2*dpol3 + vx3*dpol4; + dFN12dvx = pol2 + 2.0*vx*pol3 + 3.0*vx2*pol4; + + dexdrss = -ex/rss; + dexdz = sign[is]*ex/opz; + + r->dfdrs += (dexdrss*FN12 + ex*dFN12dvx*dvxdrss)*drssdrs; + r->dfdz += dexdz*FN12 + (dexdrss*FN12 + ex*dFN12dvx*dvxdrss)*drssdz; + r->dfdxs[is] = ex*dFN12dux*duxdxs; + } +} + + +#include "work_gga_c.c" + + +XC(func_info_type) XC(func_info_gga_x_n12) = { + XC_GGA_X_N12, + XC_EXCHANGE, + "N12 functional of Minnesota", + XC_FAMILY_GGA, + "R Peverati and DG Truhlar, J. Chem. Theory Comput. 8, 2310-2319 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + NULL, + NULL, NULL, + work_gga_c, + NULL +}; + +XC(func_info_type) XC(func_info_hyb_gga_x_n12_sx) = { + XC_HYB_GGA_X_N12_SX, + XC_EXCHANGE, + "N12-SX functional of Minnesota", + XC_FAMILY_HYB_GGA, + "R Peverati and DG Truhlar, Phys. Chem. Chem. Phys. 14, 16187-16191 (2012)", + XC_FLAGS_3D | XC_FLAGS_HYB_CAM | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + hyb_gga_x_n12_sx_init, + NULL, NULL, + work_gga_c, + NULL +}; + diff --git a/libxc-2.2.0/src/gga_x_optx.c b/libxc-2.2.0/src/gga_x_optx.c new file mode 100644 index 000000000..8a86f5dad --- /dev/null +++ b/libxc-2.2.0/src/gga_x_optx.c @@ -0,0 +1,110 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_OPTX 110 /* Handy & Cohen OPTX 01 */ + +typedef struct{ + FLOAT a, b, gamma; +} gga_x_optx_params; + + +static void +gga_x_optx_init(XC(func_type) *p) +{ + assert(p!=NULL && p->params == NULL); + p->params = malloc(sizeof(gga_x_optx_params)); + + XC(gga_x_optx_set_params)(p, 1.05151, 1.43169/X_FACTOR_C, 0.006); +} + + +void +XC(gga_x_optx_set_params)(XC(func_type) *p, FLOAT a, FLOAT b, FLOAT gamma) +{ + gga_x_optx_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_x_optx_params *) (p->params); + + params->a = a; + params->b = b; + params->gamma = gamma; +} + + +void XC(gga_x_optx_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + FLOAT a, b, gamma; + FLOAT num, dnum, d2num, den, u, du, d2u, d3u; + + assert(p->params != NULL); + a = ((gga_x_optx_params *) (p->params))->a; + b = ((gga_x_optx_params *) (p->params))->b; + gamma = ((gga_x_optx_params *) (p->params))->gamma; + + num = gamma*x*x; + den = 1.0 + num; + u = num/den; + + *f = a + b*u*u; + + if(order < 1) return; + + dnum = 2.0*gamma*x; + du = DFRACTION(num, dnum, den, dnum); + + *dfdx = 2.0*b*u*du; + + if(order < 2) return; + + d2num = 2.0*gamma; + d2u = D2FRACTION(num, dnum, d2num, den, dnum, d2num); + + *d2fdx2 = 2.0*b*(du*du + u*d2u); + + if(order < 3) return; + + d3u = D3FRACTION(num, dnum, d2num, 0.0, den, dnum, d2num, 0.0); + + *d3fdx3 = 2.0*b*(3.0*du*d2u + u*d3u); +} + + +#define func XC(gga_x_optx_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_optx) = { + XC_GGA_X_OPTX, + XC_EXCHANGE, + "Handy & Cohen OPTX 01", + XC_FAMILY_GGA, + "NC Handy and AJ Cohen, Mol. Phys. 99, 403 (2001)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_optx_init, + NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_pbe.c b/libxc-2.2.0/src/gga_x_pbe.c new file mode 100644 index 000000000..55721c031 --- /dev/null +++ b/libxc-2.2.0/src/gga_x_pbe.c @@ -0,0 +1,514 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_PBE 101 /* Perdew, Burke & Ernzerhof exchange */ +#define XC_GGA_X_PBE_R 102 /* Perdew, Burke & Ernzerhof exchange (revised) */ +#define XC_GGA_X_PBE_SOL 116 /* Perdew, Burke & Ernzerhof exchange (solids) */ +#define XC_GGA_X_XPBE 123 /* xPBE reparametrization by Xu & Goddard */ +#define XC_GGA_X_PBE_JSJR 126 /* JSJR reparametrization by Pedroza, Silva & Capelle */ +#define XC_GGA_X_PBEK1_VDW 140 /* PBE reparametrization for vdW */ +#define XC_GGA_X_RGE2 142 /* Regularized PBE */ +#define XC_GGA_X_APBE 184 /* mu fixed from the semiclassical neutral atom */ +#define XC_GGA_X_PBEINT 60 /* PBE for hybrid interfaces */ +#define XC_GGA_X_PBE_TCA 59 /* PBE revised by Tognetti et al */ +#define XC_GGA_K_APBE 185 /* mu fixed from the semiclassical neutral atom */ +#define XC_GGA_K_TW1 187 /* Tran and Wesolowski set 1 (Table II) */ +#define XC_GGA_K_TW2 188 /* Tran and Wesolowski set 2 (Table II) */ +#define XC_GGA_K_TW3 189 /* Tran and Wesolowski set 3 (Table II) */ +#define XC_GGA_K_TW4 190 /* Tran and Wesolowski set 4 (Table II) */ +#define XC_GGA_K_REVAPBE 55 /* revised APBE */ +#define XC_GGA_K_APBEINT 54 /* interpolated version of APBE */ +#define XC_GGA_K_REVAPBEINT 53 /* interpolated version of REVAPBE */ +#define XC_GGA_X_PBE_MOL 49 /* Del Campo, Gazquez, Trickey and Vela (PBE-like) */ + +typedef struct{ + FLOAT kappa, mu; + + /* parameters only used for PBEint and similar functionals */ + FLOAT alpha, muPBE, muGE; +} gga_x_pbe_params; + + +static void +gga_x_pbe_init(XC(func_type) *p) +{ + static const FLOAT kappa[19] = { + 0.8040, /* original PBE */ + 1.245, /* PBE R */ + 0.8040, /* PBE sol */ + 0.91954, /* xPBE */ + 0.8040, /* PBE_JSJR */ + 1.0, /* PBEK1_VDW */ + 0.8040, /* RGE2 */ + 0.8040, /* APBE (X) */ + 0.8040, /* APBE (K) */ + 0.8209, /* TW1 */ + 0.6774, /* TW2 */ + 0.8438, /* TW3 */ + 0.8589, /* TW4 */ + 0.8040, /* PBEint */ + 1.227, /* PBE TCA */ + 1.245, /* revAPBE (K) */ + 0.8040, /* APBEINT (K) */ + 1.245, /* revAPBEINT (K) */ + 0.8040 /* PBEmol */ + }; + + static const FLOAT mu[19] = { + 0.2195149727645171, /* PBE: mu = beta*pi^2/3, beta = 0.06672455060314922 */ + 0.2195149727645171, /* PBE rev: as PBE */ + 10.0/81.0, /* PBE sol */ + 0.23214, /* xPBE */ + 0.046*M_PI*M_PI/3.0, /* PBE_JSJR */ + 0.2195149727645171, /* PBEK1_VDW: as PBE */ + 10.0/81.0, /* RGE2 */ + 0.260, /* APBE (X) */ + 0.23889, /* APBE (K) */ + 0.2335, /* TW1 */ + 0.2371, /* TW2 */ + 0.2319, /* TW3 */ + 0.2309, /* TW4 */ + 0.0, /* PBEint (to be set later) */ + 0.2195149727645171, /* PBE TCA: as PBE */ + 0.23889, /* revAPBE (K) */ + 0.0, /* APBEINT (K) (to be set later) */ + 0.0, /* REVAPBEINT (K) (to be set later) */ + 0.27583 /* PBEmol */ + }; + + gga_x_pbe_params *params; + + assert(p!=NULL && p->params == NULL); + p->params = malloc(sizeof(gga_x_pbe_params)); + params = (gga_x_pbe_params *) (p->params); + + params->alpha = 0.0; + params->muPBE = 0.0; + params->muGE = 0.0; + + switch(p->info->number){ + case XC_GGA_X_PBE: p->func = 0; break; + case XC_GGA_X_PBE_R: p->func = 1; break; + case XC_GGA_X_PBE_SOL: p->func = 2; break; + case XC_GGA_X_XPBE: p->func = 3; break; + case XC_GGA_X_PBE_JSJR: p->func = 4; break; + case XC_GGA_X_PBEK1_VDW: p->func = 5; break; + case XC_GGA_X_RGE2: p->func = 6; break; + case XC_GGA_X_APBE: p->func = 7; break; + case XC_GGA_K_APBE: p->func = 8; break; + case XC_GGA_K_TW1: p->func = 9; break; + case XC_GGA_K_TW2: p->func = 10; break; + case XC_GGA_K_TW3: p->func = 11; break; + case XC_GGA_K_TW4: p->func = 12; break; + case XC_GGA_X_PBEINT: { + p->func = 13; + params->alpha = 0.197; + params->muPBE = 0.2195149727645171; + params->muGE = 10.0/81.0; + break; + } + case XC_GGA_X_PBE_TCA: p->func = 14; break; + case XC_GGA_K_REVAPBE: p->func = 15; break; + case XC_GGA_K_APBEINT: { + p->func = 16; + params->alpha = 5.0/3.0; + params->muPBE = 0.23899; + params->muGE = 5.0/27.0; + break; + } + case XC_GGA_K_REVAPBEINT: { /* equal to the previous one */ + p->func = 17; + params->alpha = 5.0/3.0; + params->muPBE = 0.23899; + params->muGE = 5.0/27.0; + break; + } + case XC_GGA_X_PBE_MOL: p->func = 18; break; + default:{ + fprintf(stderr, "Internal error in gga_x_pbe\n"); + exit(1); + }} + + XC(gga_x_pbe_set_params)(p, kappa[p->func], mu[p->func]); +} + + +void +XC(gga_x_pbe_set_params)(XC(func_type) *p, FLOAT kappa, FLOAT mu) +{ + gga_x_pbe_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_x_pbe_params *) (p->params); + + params->kappa = kappa; + params->mu = mu; +} + + +void XC(gga_x_pbe_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + gga_x_pbe_params *params; + FLOAT kappa, auxmu, mu, dmu, d2mu, d3mu, ss, ss2, f0, df0, d2f0, d3f0; + + assert(p->params != NULL); + params = (gga_x_pbe_params *) (p->params); + + kappa = params->kappa; + + ss = X2S*x; + ss2 = ss*ss; + + if(params->alpha != 0.0){ /* PBEint and related functionals */ + auxmu = 1.0 + params->alpha*ss2; + mu = params->muGE + (params->muPBE - params->muGE) * params->alpha*ss2/auxmu; + }else + mu = params->mu; + + f0 = kappa + mu*ss2; + if(p->info->number == XC_GGA_X_RGE2) + f0 += mu*mu*ss2*ss2/kappa; + + *f = 1.0 + kappa*(1.0 - kappa/f0); + + if(order < 1) return; + + if(params->alpha != 0.0){ /* PBEint and related functionals */ + dmu = (params->muPBE - params->muGE) * 2.0*params->alpha*ss/(auxmu*auxmu); + }else + dmu = 0.0; + + df0 = 2.0*mu*ss + dmu*ss2; + if(p->info->number == XC_GGA_X_RGE2) + df0 += 4.0*mu*mu*ss2*ss/kappa; + + *dfdx = X2S*kappa*kappa*df0/(f0*f0); + + if(order < 2) return; + + if(params->alpha != 0.0) /* PBEint and related functionals */ + d2mu = (params->muPBE - params->muGE) * + 2.0*params->alpha*(1.0 - 3.0*params->alpha*ss2)/(auxmu*auxmu*auxmu); + else + d2mu = 0.0; + + d2f0 = 2.0*mu + 4.0*dmu*ss + d2mu*ss2; + if(p->info->number == XC_GGA_X_RGE2) + d2f0 += 4.0*3.0*mu*mu*ss2/kappa; + + *d2fdx2 = -X2S*X2S*kappa*kappa*(2.0*df0*df0 - d2f0*f0)/(f0*f0*f0); + + if(order < 3) return; + + if(params->alpha != 0.0) /* PBEint and related functionals */ + d3mu = (params->muPBE - params->muGE) * + 24.0*params->alpha*params->alpha*ss*(-1.0 + params->alpha*ss2)/(auxmu*auxmu*auxmu*auxmu); + else + d3mu = 0.0; + + d3f0 = 6.0*dmu + 6.0*ss*d2mu + ss2*d3mu; + if(p->info->number == XC_GGA_X_RGE2) + d3f0 += 4.0*3.0*2.0*mu*mu*ss/kappa; + + *d3fdx3 = X2S*X2S*X2S*kappa*kappa*(6.0*df0*df0*df0 - 6.0*f0*df0*d2f0 + f0*f0*d3f0)/(f0*f0*f0*f0); + +} + + +#define func XC(gga_x_pbe_enhance) +#include "work_gga_x.c" + + +const XC(func_info_type) XC(func_info_gga_x_pbe) = { + XC_GGA_X_PBE, + XC_EXCHANGE, + "Perdew, Burke & Ernzerhof", + XC_FAMILY_GGA, + "JP Perdew, K Burke, and M Ernzerhof, Phys. Rev. Lett. 77, 3865 (1996)\n" + "JP Perdew, K Burke, and M Ernzerhof, Phys. Rev. Lett. 78, 1396(E) (1997)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_pbe_r) = { + XC_GGA_X_PBE_R, + XC_EXCHANGE, + "Revised PBE from Zhang & Yang", + XC_FAMILY_GGA, + "Y Zhang and W Yang, Phys. Rev. Lett 80, 890 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_pbe_sol) = { + XC_GGA_X_PBE_SOL, + XC_EXCHANGE, + "Perdew, Burke & Ernzerhof SOL", + XC_FAMILY_GGA, + "JP Perdew, et al, Phys. Rev. Lett. 100, 136406 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_xpbe) = { + XC_GGA_X_XPBE, + XC_EXCHANGE, + "Extended PBE by Xu & Goddard III", + XC_FAMILY_GGA, + "X Xu and WA Goddard III, J. Chem. Phys. 121, 4068 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_pbe_jsjr) = { + XC_GGA_X_PBE_JSJR, + XC_EXCHANGE, + "Reparametrized PBE by Pedroza, Silva & Capelle", + XC_FAMILY_GGA, + "LS Pedroza, AJR da Silva, and K. Capelle, Phys. Rev. B 79, 201106(R) (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_pbek1_vdw) = { + XC_GGA_X_PBEK1_VDW, + XC_EXCHANGE, + "Reparametrized PBE for vdW", + XC_FAMILY_GGA, + "J Klimes, DR Bowler, and A Michaelides, J. Phys.: Condens. Matter 22, 022201 (2010)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_rge2) = { + XC_GGA_X_RGE2, + XC_EXCHANGE, + "Regularized PBE", + XC_FAMILY_GGA, + "A Ruzsinszky, GI Csonka, and G Scuseria, J. Chem. Theory Comput. 5, 763 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_apbe) = { + XC_GGA_X_APBE, + XC_EXCHANGE, + "mu fixed from the semiclassical neutral atom", + XC_FAMILY_GGA, + "LA Constantin, E Fabiano, S Laricchia, and F Della Sala, Phys. Rev. Lett. 106, 186406 (2011)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_pbeint) = { + XC_GGA_X_PBEINT, + XC_EXCHANGE, + "PBE for hybrid interfaces", + XC_FAMILY_GGA, + "E. Fabiano, LA Constantin, and F. Della Sala, Phys. Rev. B 82, 113104 (2010)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-12, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_x, + NULL +}; + + +const XC(func_info_type) XC(func_info_gga_x_pbe_tca) = { + XC_GGA_X_PBE_TCA, + XC_EXCHANGE, + "PBE revised by Tognetti et al", + XC_FAMILY_GGA, + "V Tognetti, P Cortona, and C Adamo, Chem. Phys. Lett. 460, 536-539 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_x, + NULL +}; + + +#define XC_KINETIC_FUNCTIONAL +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_k_apbe) = { + XC_GGA_K_APBE, + XC_KINETIC, + "mu fixed from the semiclassical neutral atom", + XC_FAMILY_GGA, + "LA Constantin, E Fabiano, S Laricchia, and F Della Sala, Phys. Rev. Lett. 106, 186406 (2011)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_revapbe) = { + XC_GGA_K_REVAPBE, + XC_KINETIC, + "revised APBE", + XC_FAMILY_GGA, + "LA Constantin, E Fabiano, S Laricchia, and F Della Sala, Phys. Rev. Lett. 106, 186406 (2011)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_tw1) = { + XC_GGA_K_TW1, + XC_KINETIC, + "Tran and Wesolowski set 1 (Table II)", + XC_FAMILY_GGA, + "F Tran and TA Wesolowski, Int. J. Quant. Chem. 89, 441-446 (2002)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_tw2) = { + XC_GGA_K_TW2, + XC_KINETIC, + "Tran and Wesolowski set 1 (Table II)", + XC_FAMILY_GGA, + "F Tran and TA Wesolowski, Int. J. Quant. Chem. 89, 441-446 (2002)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_tw3) = { + XC_GGA_K_TW3, + XC_KINETIC, + "Tran and Wesolowski set 1 (Table II)", + XC_FAMILY_GGA, + "F Tran and TA Wesolowski, Int. J. Quant. Chem. 89, 441-446 (2002)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_tw4) = { + XC_GGA_K_TW4, + XC_KINETIC, + "Tran and Wesolowski set 1 (Table II)", + XC_FAMILY_GGA, + "F Tran and TA Wesolowski, Int. J. Quant. Chem. 89, 441-446 (2002)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_apbeint) = { + XC_GGA_K_APBEINT, + XC_KINETIC, + "interpolated version of APBE", + XC_FAMILY_GGA, + "S Laricchia, E Fabiano, LA Constantin, and F Della Sala, J. Chem. Theory Comput. 7, 2439-2451 (2011)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_revapbeint) = { + XC_GGA_K_REVAPBEINT, + XC_KINETIC, + "interpolated version of REVAPBE", + XC_FAMILY_GGA, + "S Laricchia, E Fabiano, LA Constantin, and F Della Sala, J. Chem. Theory Comput. 7, 2439-2451 (2011)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_pbe_mol) = { + XC_GGA_X_PBE_MOL, + XC_EXCHANGE, + "Reparametrized PBE by del Campo, Gazquez, Trickey & Vela", + XC_FAMILY_GGA, + "JM del Campo, JL Gazquez, SB Trickey, and A Vela, J. Chem. Phys. 136, 104108 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_pbea.c b/libxc-2.2.0/src/gga_x_pbea.c new file mode 100644 index 000000000..a0d108964 --- /dev/null +++ b/libxc-2.2.0/src/gga_x_pbea.c @@ -0,0 +1,66 @@ +/* + Copyright (C) 2008 Georg Madsen + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_PBEA 121 /* Madsen (PBE-like) */ + +/* PBEA: see PBE for more details */ +static inline void +func(const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static const FLOAT kappa = 0.8040; + static const FLOAT mu = 0.00361218645365094697; + /* hard-coded alpha*/ + static const FLOAT alpha = 0.52; + + FLOAT f0, df0, d2f0; + + f0 = 1.0 + mu*x*x/(alpha*kappa); + *f = 1.0 + kappa*(1.0 - POW(f0, -alpha)); + + if(order < 1) return; + + df0 = 2.0*mu*x/(alpha*kappa); + + *dfdx = alpha*kappa*df0*POW(f0, -(alpha + 1.0)); + + if(order < 2) return; + + d2f0 = 2.0*mu/(alpha*kappa); + *d2fdx2 = alpha*kappa*POW(f0, -alpha - 1.0)* + (d2f0 - (alpha + 1.0)*df0*df0/f0); +} + +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_pbea) = { + XC_GGA_X_PBEA, + XC_EXCHANGE, + "Madsen 07", + XC_FAMILY_GGA, + "G Madsen, Phys. Rev. B 75, 195108 (2007)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_pw86.c b/libxc-2.2.0/src/gga_x_pw86.c new file mode 100644 index 000000000..4c43c20f9 --- /dev/null +++ b/libxc-2.2.0/src/gga_x_pw86.c @@ -0,0 +1,123 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_PW86 108 /* Perdew & Wang 86 */ +#define XC_GGA_X_RPW86 144 /* refitted Perdew & Wang 86 */ +#define XC_GGA_K_FR_PW86 515 /* Fuentealba & Reyes (PW86 version) */ + +typedef struct{ + FLOAT aa, bb, cc; +} gga_x_pw86_params; + +static void +gga_x_pw86_init(XC(func_type) *p) +{ + switch(p->info->number){ + case XC_GGA_X_RPW86: p->func = 1; break; + case XC_GGA_K_FR_PW86: p->func = 2; break; + default: p->func = 0; /* original PW86 */ + } +} + +inline void +XC(gga_x_pw86_enhance)(const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static const gga_x_pw86_params par[3] = { + { 1.296, 14.0, 0.2}, + {15*0.1234, 17.33, 0.163}, + { 2.208, 9.27, 0.2} + }; + FLOAT ss, ss2, ss4, DD, dDD, d2DD, d3DD, aux; + + /* sanity check: do we have a valid functional */ + assert(p->func==0 || p->func==1 || p->func==2); + + ss = X2S*x; + ss2 = ss*ss; + ss4 = ss2*ss2; + + DD = 1.0 + par[p->func].aa*ss2 + par[p->func].bb*ss4 + par[p->func].cc*ss4*ss2; + aux = POW(DD, 1.0/15.0); + *f = aux; + + if(order < 1) return; + + dDD = ss*(2.0*par[p->func].aa + 4.0*par[p->func].bb*ss2 + 6.0*par[p->func].cc*ss4); + + *dfdx = X2S*dDD*aux/(15.0*DD); + + if(order < 2) return; + + d2DD = 2.0*par[p->func].aa + 4.0*3.0*par[p->func].bb*ss2 + 6.0*5.0*par[p->func].cc*ss4; + *d2fdx2 = X2S*X2S*aux*(15.0*DD*d2DD - 14.0*dDD*dDD)/(225.0*DD*DD); + + if(order < 3) return; + + d3DD = 4.0*3.0*2.0*par[p->func].bb*ss + 6.0*5.0*4.0*par[p->func].cc*ss*ss2; + *d3fdx3 = X2S*X2S*X2S*aux*(406.0*dDD*dDD*dDD - 630.0*DD*dDD*d2DD + 225.0*DD*DD*d3DD)/(3375.0*DD*DD*DD); +} + +#define func XC(gga_x_pw86_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_pw86) = { + XC_GGA_X_PW86, + XC_EXCHANGE, + "Perdew & Wang 86", + XC_FAMILY_GGA, + "JP Perdew and Y Wang, Phys. Rev. B 33, 8800 (1986)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pw86_init, NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_rpw86) = { + XC_GGA_X_RPW86, + XC_EXCHANGE, + "Refitted Perdew & Wang 86", + XC_FAMILY_GGA, + "ED Murray, K Lee and DC Langreth, J. Chem. Theory Comput. 5, 2754-2762 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pw86_init, NULL, NULL, + work_gga_x, + NULL +}; + +#define XC_KINETIC_FUNCTIONAL +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_k_fr_pw86) = { + XC_GGA_K_FR_PW86, + XC_KINETIC, + "Fuentealba & Reyes (PW86 version)", + XC_FAMILY_GGA, + "P Fuentealba and O Reyes, Chem. Phys. Lett. 232, 31-34 (1995)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pw86_init, NULL, NULL, + work_gga_k, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_pw91.c b/libxc-2.2.0/src/gga_x_pw91.c new file mode 100644 index 000000000..d816e3005 --- /dev/null +++ b/libxc-2.2.0/src/gga_x_pw91.c @@ -0,0 +1,206 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_PW91 109 /* Perdew & Wang 91 */ +#define XC_GGA_X_MPW91 119 /* Modified form of PW91 by Adamo & Barone */ +#define XC_GGA_K_LC94 521 /* Lembarki & Chermette */ + +typedef struct{ + FLOAT a, b, c, d, f, alpha, expo; +} gga_x_pw91_params; + + +static void +gga_x_pw91_init(XC(func_type) *p) +{ + assert(p!=NULL && p->params == NULL); + p->params = malloc(sizeof(gga_x_pw91_params)); + + switch(p->info->number){ + case XC_GGA_X_PW91: + /* b_PW91 ~ 0.0042 */ + XC(gga_x_pw91_set_params)(p, 0.19645, 7.7956, 0.2743, -0.1508, 0.004, 100.0, 4.0); + break; + case XC_GGA_X_MPW91: + /* + === from nwchem source (xc_xmpw91.F) === + C. Adamo confirmed that there is a typo in the JCP paper + b_mPW91 is 0.00426 instead of 0.0046 + + also the power seems to be 3.72 and not 3.73 + */ + XC(gga_x_pw91_set_params2)(p, 0.00426, 100.0, 3.72); + break; + case XC_GGA_K_LC94: + XC(gga_x_pw91_set_params)(p, 0.093907, 76.320, 0.26608, -0.0809615, 0.000057767, 100.0, 4.0); + break; + default: + fprintf(stderr, "Internal error in gga_x_pw91\n"); + exit(1); + } +} + +void +XC(gga_x_pw91_set_params)(XC(func_type) *p, FLOAT a, FLOAT b, FLOAT c, FLOAT d, FLOAT f, FLOAT alpha, FLOAT expo) +{ + gga_x_pw91_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_x_pw91_params *) (p->params); + + params->a = a; + params->b = b; + params->c = c; + params->d = d; + params->f = f; + params->alpha = alpha; + params->expo = expo; +} + +void +XC(gga_x_pw91_set_params2)(XC(func_type) *p, FLOAT bt, FLOAT alpha, FLOAT expo) +{ + FLOAT beta; + FLOAT a, b, c, d, f; + + beta = 5.0*POW(36.0*M_PI,-5.0/3.0); + a = 6.0*bt/X2S; + b = 1.0/X2S; + c = bt/(X_FACTOR_C*X2S*X2S); + d = -(bt - beta)/(X_FACTOR_C*X2S*X2S); + f = 1.0e-6/(X_FACTOR_C*POW(X2S, expo)); + + XC(gga_x_pw91_set_params)(p, a, b, c, d, f, alpha, expo); +} + + +void XC(gga_x_pw91_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + + gga_x_pw91_params *params; + FLOAT ss, ss2, ss4, aux1, aux2; + FLOAT f1, df1, d2f1, d3f1, f2, df2, d2f2, d3f2, f3, df3, d2f3, d3f3, f4, df4, d2f4, d3f4; + + assert(p != NULL && p->params != NULL); + params = (gga_x_pw91_params *) (p->params); + + ss = X2S*x; + ss2 = ss*ss; + ss4 = POW(ss, params->expo); + + f1 = params->d*EXP(-params->alpha*ss2); + f2 = params->a*ASINH(params->b*ss); + f3 = (params->c + f1)*ss2 - params->f*ss4; + f4 = 1.0 + ss*f2 + params->f*ss4; + + *f = 1.0 + f3/f4; + + if(order < 1) return; + + aux1 = 1.0 + params->b*params->b*ss2; + aux2 = SQRT(aux1); + + df1 = -2.0*params->alpha*ss*f1; + df2 = params->a*params->b/aux2; + df3 = 2.0*ss*(params->c + f1) + ss2*df1 - params->expo*params->f*ss4/ss; + df4 = f2 + ss*df2 + params->expo*params->f*ss4/ss; + + *dfdx = (df3*f4 - f3*df4)/(f4*f4); + *dfdx *= X2S; + + if(order < 2) return; + + d2f1 = -2.0*params->alpha*(f1 + ss*df1); + d2f2 = -params->a*params->b*params->b*params->b*ss/(aux1*aux2); + d2f3 = 2.0*(params->c + f1) + 4.0*ss*df1 + ss2*d2f1 - + params->expo*(params->expo - 1.0)*params->f*ss4/ss2; + d2f4 = 2.0*df2 + ss*d2f2 + + params->expo*(params->expo - 1.0)*params->f*ss4/ss2; + + *d2fdx2 = (2.0*f3*df4*df4 + d2f3*f4*f4 - f4*(2.0*df3*df4 + f3*d2f4))/(f4*f4*f4); + *d2fdx2 *= X2S*X2S; + + if(order < 3) return; + + d3f1 = -2.0*params->alpha*(2.0*df1 + ss*d2f1); + d3f2 = params->a*params->b*params->b*params->b*(2.0*params->b*params->b*ss2 - 1.0)/(aux1*aux1*aux2); + d3f3 = 6.0*df1 + 6.0*ss*d2f1 + ss2*d3f1 - + params->expo*(params->expo - 1.0)*(params->expo - 2.0)*params->f*ss4/(ss*ss2); + d3f4 = 3.0*d2f2 + ss*d3f2 + + params->expo*(params->expo - 1.0)*(params->expo - 2.0)*params->f*ss4/(ss*ss2); + + *d3fdx3 = (-6.0*f3*df4*df4*df4 + 6.0*f4*df4*(df3*df4 + f3*d2f4) + f4*f4*f4*d3f3 - f4*f4*(3.0*df4*d2f3 + 3.0*df3*d2f4 + f3*d3f4))/(f4*f4*f4*f4); + *d3fdx3 *= X2S*X2S*X2S; +} + +#define func XC(gga_x_pw91_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_pw91) = { + XC_GGA_X_PW91, + XC_EXCHANGE, + "Perdew & Wang 91", + XC_FAMILY_GGA, + "JP Perdew, in Proceedings of the 21st Annual International Symposium on the Electronic Structure of Solids, ed. by P Ziesche and H Eschrig (Akademie Verlag, Berlin, 1991), p. 11.\n" + "JP Perdew, JA Chevary, SH Vosko, KA Jackson, MR Pederson, DJ Singh, and C Fiolhais, Phys. Rev. B 46, 6671 (1992)\n" + "JP Perdew, JA Chevary, SH Vosko, KA Jackson, MR Pederson, DJ Singh, and C Fiolhais, Phys. Rev. B 48, 4978(E) (1993)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-25, 1e-25, 0.0, 1e-32, + gga_x_pw91_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_mpw91) = { + XC_GGA_X_MPW91, + XC_EXCHANGE, + "mPW91 of Adamo & Barone", + XC_FAMILY_GGA, + "C Adamo and V Barone, J. Chem. Phys. 108, 664 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-31, 1e-31, 0.0, 1e-32, + gga_x_pw91_init, + NULL, NULL, + work_gga_x, + NULL +}; + +#define XC_KINETIC_FUNCTIONAL +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_k_lc94) = { + XC_GGA_K_LC94, + XC_KINETIC, + "Lembarki & Chermette", + XC_FAMILY_GGA, + "A Lembarki and H Chermette, Phys. Rev. A 50, 5328-5331 (1994)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-30, 1e-30, 0.0, 1e-32, + gga_x_pw91_init, + NULL, NULL, + work_gga_k, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_q2d.c b/libxc-2.2.0/src/gga_x_q2d.c new file mode 100644 index 000000000..f0147092a --- /dev/null +++ b/libxc-2.2.0/src/gga_x_q2d.c @@ -0,0 +1,101 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_Q2D 48 /* Chiodo et al */ + +static void +gga_x_q2D_init(XC(func_type) *p) +{ + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_GGA_X_PBE_SOL, p->nspin); + +} + +void XC(gga_x_q2d_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static const FLOAT cc = 100, c1 = 0.5217; + + FLOAT ss, ss2, ss4, ss6, ss_2, a, da, d2a, d3a; + FLOAT f1, df1, d2f1, d3f1, f2, df2, d2f2, d3f2; + + ss = X2S*x; + ss2 = ss*ss; + ss4 = ss2*ss2; + ss6 = ss2*ss4; + ss_2 = SQRT(ss); + + XC(gga_x_pbe_enhance)(p->func_aux[0], order, x, &a, &da, &d2a, &d3a); + + f1 = a*(cc - ss4) + c1*ss*ss2*ss_2*(1.0 + ss2); + f2 = cc + ss6; + *f = f1/f2; + + if(order < 1) return; + + da /= X2S; + + df1 = da*(cc - ss4) - 4.0*a*ss*ss2 + c1*ss2*ss_2*(7.0 + 11.0*ss2)/2.0; + df2 = 6.0*ss*ss4; + + *dfdx = X2S*DFRACTION(f1, df1, f2, df2); + + if(order < 2) return; + + d2a /= X2S*X2S; + + d2f1 = d2a*(cc - ss4) - 8.0*da*ss*ss2 - 12.0*a*ss2 + c1*ss*ss_2*(35.0 + 99.0*ss2)/4.0; + d2f2 = 30.0*ss4; + + *d2fdx2 = X2S*X2S*D2FRACTION(f1, df1, d2f1, f2, df2, d2f2); + + if(order < 3) return; + + d3a /= X2S*X2S*X2S; + + d3f1 = d3a*(cc - ss4) - 12.0*ss*ss2*d2a - 36.0*da*ss2 - 24.0*a*ss + 21.0*c1*ss_2*(5.0 + 33.0*ss2)/8.0; + d3f2 = 120.0*ss*ss2; + + *d3fdx3 = X2S*X2S*X2S*D3FRACTION(f1, df1, d2f1, d3f1, f2, df2, d2f2, d3f2); +} + +#define func XC(gga_x_q2d_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_q2d) = { + XC_GGA_X_Q2D, + XC_EXCHANGE, + "Chiodo et al", + XC_FAMILY_GGA, + "L Chiodo, LA Constantin, E Fabiano, and F Della Sala, Phys. Rev. Lett. 108, 126402 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-23, 0.0, 1e-32, + gga_x_q2D_init, + NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_rpbe.c b/libxc-2.2.0/src/gga_x_rpbe.c new file mode 100644 index 000000000..c86baa44c --- /dev/null +++ b/libxc-2.2.0/src/gga_x_rpbe.c @@ -0,0 +1,104 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_RPBE 117 /* Hammer, Hansen & Norskov (PBE-like) */ + + +typedef struct{ + FLOAT kappa, mu; +} gga_x_rpbe_params; + + +static void +gga_x_rpbe_init(XC(func_type) *p) +{ + assert(p!=NULL && p->params == NULL); + p->params = malloc(sizeof(gga_x_rpbe_params)); + + /* same parameters as standard PBE */ + XC(gga_x_rpbe_set_params)(p, 0.8040, 0.2195149727645171); +} + + +void +XC(gga_x_rpbe_set_params)(XC(func_type) *p, FLOAT kappa, FLOAT mu) +{ + gga_x_rpbe_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_x_rpbe_params *) (p->params); + + params->kappa = kappa; + params->mu = mu; +} + + +/* RPBE: see PBE for more details */ +void XC(gga_x_rpbe_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + FLOAT kappa, mu, f0, df0, d2f0, d3f0; + + assert(p->params != NULL); + kappa = ((gga_x_rpbe_params *) (p->params))->kappa; + mu = ((gga_x_rpbe_params *) (p->params))->mu*X2S*X2S; + + f0 = EXP(-mu*x*x/kappa); + *f = 1.0 + kappa*(1.0 - f0); + + if(order < 1) return; + + df0 = -2.0*x*mu/kappa*f0; + + *dfdx = -kappa*df0; + + if(order < 2) return; + + d2f0 = -2.0*mu*f0*(kappa - 2.0*x*x*mu)/(kappa*kappa); + *d2fdx2 = -kappa*d2f0; + + if(order < 3) return; + + d3f0 = 4.0*mu*mu*f0*x*(3.0*kappa - 2.0*mu*x*x)/(kappa*kappa*kappa); + *d3fdx3 = -kappa*d3f0; +} + + +#define func XC(gga_x_rpbe_enhance) +#include "work_gga_x.c" + + +const XC(func_info_type) XC(func_info_gga_x_rpbe) = { + XC_GGA_X_RPBE, + XC_EXCHANGE, + "Hammer, Hansen, and Nørskov", + XC_FAMILY_GGA, + "B Hammer, LB Hansen and JK Nørskov, Phys. Rev. B 59, 7413 (1999)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_rpbe_init, + NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_sfat.c b/libxc-2.2.0/src/gga_x_sfat.c new file mode 100644 index 000000000..0c95221d0 --- /dev/null +++ b/libxc-2.2.0/src/gga_x_sfat.c @@ -0,0 +1,129 @@ +/* + Copyright (C) 2013 Rolf Wuerdemann, M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_SFAT 530 /* short-range recipe for exchange GGA functionals */ +/* see + * Savin, Flad, Int. Jour. of Quant. Chem. Vol. 56, 327-332 (1995) + * Akinaga, Ten-no, Chem. Phys. Lett. 462 (2008) 348-351 + */ + +typedef struct{ + int func_id; + xc_gga_enhancement_t enhancement_factor; +} gga_x_sfat_params; + +static void +gga_x_sfat_init(XC(func_type) *p) +{ + assert(p->params == NULL); + p->params = malloc(sizeof(gga_x_sfat_params)); + + /* random functional, mainly intended for testing */ + ((gga_x_sfat_params *) (p->params))->func_id = -1; + XC(gga_x_sfat_set_params)(p, XC_GGA_X_B88, 0.44); +} + +void +XC(gga_x_sfat_set_params)(XC(func_type) *p, int func_id, FLOAT omega) +{ + gga_x_sfat_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_x_sfat_params *) (p->params); + + p->cam_omega = omega; + + /* if func_id == -1 do nothing */ + if(func_id != -1 && params->func_id == -1){ /* intialize stuff */ + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc(sizeof(XC(func_type) )); + } + + if(func_id != -1 && params->func_id != func_id){ + if(params->func_id != -1) + XC(func_end) (p->func_aux[0]); + + params->func_id = func_id; + XC(func_init) (p->func_aux[0], params->func_id, p->nspin); + + params->enhancement_factor = XC(get_gga_enhancement_factor)(func_id); + } +} + + +#define HEADER 3 + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, FLOAT ds, + FLOAT *f, FLOAT *dfdx, FLOAT *lvrho) +{ + gga_x_sfat_params *params; + FLOAT e_f, e_dfdx, e_d2fdx2; + FLOAT k_GGA, K_GGA, aa, f_aa, df_aa, d2f_aa, d3f_aa; + FLOAT dk_GGAdr, dk_GGAdx, daadr, daadx; + + assert(p != NULL && p->params != NULL); + params = (gga_x_sfat_params *) (p->params); + + /* call enhancement factor */ + params->enhancement_factor(p->func_aux[0], order, x, &e_f, &e_dfdx, &e_d2fdx2, NULL); + + K_GGA = 2.0*X_FACTOR_C*e_f; + k_GGA = SQRT(9.0*M_PI/K_GGA)*CBRT(ds); + + aa = p->cam_omega/(2.0*k_GGA); + + XC(lda_x_attenuation_function)(XC_RSF_YUKAWA, order, aa, &f_aa, &df_aa, &d2f_aa, &d3f_aa); + + *f = e_f*f_aa; + + if(order < 1) return; + + dk_GGAdr = k_GGA/(3.0*ds); + dk_GGAdx = -k_GGA*e_dfdx/(2.0*e_f); + + daadr = -aa*dk_GGAdr/k_GGA; + daadx = -aa*dk_GGAdx/k_GGA; + + *dfdx = e_dfdx*f_aa + e_f*df_aa*daadx; + *lvrho = e_f*df_aa*daadr; +} + +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_sfat) = { + XC_GGA_X_SFAT, + XC_EXCHANGE, + "Short-range recipe for exchange GGA functionals - Yukawa", + XC_FAMILY_GGA, + "A Savin, H-J Flad, J. of Quant. Chem. 56, 327-332 (1995)\n" + "Y Akinaga, S Ten-no, Chem. Phys. Lett. 462, 348-351 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_sfat_init, + NULL, NULL, + work_gga_x, + NULL +}; + diff --git a/libxc-2.2.0/src/gga_x_sogga11.c b/libxc-2.2.0/src/gga_x_sogga11.c new file mode 100644 index 000000000..9bbe2980b --- /dev/null +++ b/libxc-2.2.0/src/gga_x_sogga11.c @@ -0,0 +1,140 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_SOGGA11 151 /* Second-order generalized gradient approximation 2011 */ +#define XC_HYB_GGA_X_SOGGA11_X 426 /* Hybrid based on SOGGA11 form */ + +static void +gga_x_sogga11_init(XC(func_type) *p) +{ + switch(p->info->number){ + case XC_GGA_X_SOGGA11: + p->func = 0; + break; + case XC_HYB_GGA_X_SOGGA11_X: + p->func = 1; + p->cam_alpha = 0.4015; + break; + default: + fprintf(stderr, "Internal error in gga_x_sogga11\n"); + exit(1); + } +} + +void XC(gga_x_sogga11_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + const FLOAT kappa = 0.552; + const FLOAT mu = 10.0/81.0; + const FLOAT alpha = mu*X2S*X2S/kappa; + const FLOAT aa[][6] = { + {0.50000, -2.95535, 15.7974, -91.1804, 96.2030, 0.18683}, /* SOGGA11 */ + {0.50000, 5.37406, -5.94160, 12.7962, -18.8521, 8.78551} /* SOGGA11-X */ + }; + const FLOAT bb[][6] = { + {0.50000, 3.50743, -12.9523, 49.7870, -33.2545, -11.1396}, /* SOGGA11 */ + {0.50000, -4.82197, 5.40713, -4.10014, -6.27393, 6.62678} /* SOGGA11-X */ + }; + + FLOAT f0, df0, d2f0, d3f0, den0, den1, t0, dt0, d2t0, d3t0, t1, dt1, d2t1, d3t1, f1, df1, d2f1, d3f1; + + den0 = -1.0/(1.0 + alpha*x*x); + f0 = 1.0 + den0; + den1 = -EXP(-alpha*x*x); + f1 = 1.0 + den1; + + t0 = aa[p->func][0] + f0*(aa[p->func][1] + f0*(aa[p->func][2] + f0*(aa[p->func][3] + f0*(aa[p->func][4] + f0*aa[p->func][5])))); + t1 = bb[p->func][0] + f1*(bb[p->func][1] + f1*(bb[p->func][2] + f1*(bb[p->func][3] + f1*(bb[p->func][4] + f1*bb[p->func][5])))); + + *f = t0; + *f += t1; + + if(order < 1) return; + + df0 = 2.0*alpha*x*den0*den0; + df1 = -2.0*alpha*x*den1; + + dt0 = aa[p->func][1] + f0*(2.0*aa[p->func][2] + f0*(3.0*aa[p->func][3] + f0*(4.0*aa[p->func][4] + f0*5.0*aa[p->func][5]))); + dt1 = bb[p->func][1] + f1*(2.0*bb[p->func][2] + f1*(3.0*bb[p->func][3] + f1*(4.0*bb[p->func][4] + f1*5.0*bb[p->func][5]))); + + *dfdx = dt0*df0; + *dfdx += dt1*df1; + + if(order < 2) return; + + d2f0 = 2.0*alpha*(3.0*alpha*x*x - 1.0)*den0*den0*den0; + d2f1 = 2.0*alpha*(2.0*alpha*x*x - 1.0)*den1; + + d2t0 = 2.0*aa[p->func][2] + f0*(3.0*2.0*aa[p->func][3] + f0*(4.0*3.0*aa[p->func][4] + f0*5.0*4.0*aa[p->func][5])); + d2t1 = 2.0*bb[p->func][2] + f1*(3.0*2.0*bb[p->func][3] + f1*(4.0*3.0*bb[p->func][4] + f1*5.0*4.0*bb[p->func][5])); + + *d2fdx2 = dt0*d2f0 + df0*df0*d2t0; + *d2fdx2 += dt1*d2f1 + df1*df1*d2t1; + + if(order < 3) return; + + d3f0 = 24.0*alpha*alpha*x*(alpha*x*x - 1.0)*den0*den0*den0*den0; + d3f1 = -4.0*alpha*alpha*x*(2.0*alpha*x*x - 3.0)*den1; + + d3t0 = 3.0*2.0*aa[p->func][3] + f0*(4.0*3.0*2.0*aa[p->func][4] + f0*5.0*4.0*3.0*aa[p->func][5]); + d3t1 = 3.0*2.0*bb[p->func][3] + f1*(4.0*3.0*2.0*bb[p->func][4] + f1*5.0*4.0*3.0*bb[p->func][5]); + + *d3fdx3 = 3.0*df0*d2f0*d2t0 + dt0*d3f0 + df0*df0*df0*d3t0; + *d3fdx3 += 3.0*df1*d2f1*d2t1 + dt1*d3f1 + df1*df1*df1*d3t1; +} + + +#define func XC(gga_x_sogga11_enhance) +#include "work_gga_x.c" + + +const XC(func_info_type) XC(func_info_gga_x_sogga11) = { + XC_GGA_X_SOGGA11, + XC_EXCHANGE, + "Second-order generalized gradient approximation 2011", + XC_FAMILY_GGA, + "R Peverati, Y Zhao, and DG Truhlar, J. Phys. Chem. Lett. 2, 1991-1997 (2011)\n" + "http://comp.chem.umn.edu/mfm/index.html", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-31, 1e-32, 0.0, 1e-32, + gga_x_sogga11_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_hyb_gga_x_sogga11_x) = { + XC_HYB_GGA_X_SOGGA11_X, + XC_EXCHANGE, + "Hybrid based on SOGGA11 form", + XC_FAMILY_HYB_GGA, + "R Peverati and DG Truhlar, J. Chem. Phys. 135, 191102 (2011)\n" + "http://comp.chem.umn.edu/mfm/index.html", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-31, 1e-32, 0.0, 1e-32, + gga_x_sogga11_init, + NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_ssb_sw.c b/libxc-2.2.0/src/gga_x_ssb_sw.c new file mode 100644 index 000000000..e5b81ed0e --- /dev/null +++ b/libxc-2.2.0/src/gga_x_ssb_sw.c @@ -0,0 +1,190 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_SSB_SW 90 /* Swarta, Sola and Bickelhaupt correction to PBE */ +#define XC_GGA_X_SSB 91 /* Swarta, Sola and Bickelhaupt */ +#define XC_GGA_X_SSB_D 92 /* Swarta, Sola and Bickelhaupt dispersion */ + +typedef struct{ + FLOAT A, B, C, D, E; +} gga_x_ssb_sw_params; + + +static void +gga_x_ssb_sw_init(XC(func_type) *p) +{ + + assert(p!=NULL && p->params == NULL); + p->params = malloc(sizeof(gga_x_ssb_sw_params)); + + XC(gga_x_ssb_sw_set_params)(p, 1.0515, 0.191458, 0.254443, 0.180708, 4.036674); +} + + +void +XC(gga_x_ssb_sw_set_params)(XC(func_type) *p, FLOAT A, FLOAT B, FLOAT C, FLOAT D, FLOAT E) +{ + gga_x_ssb_sw_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_x_ssb_sw_params *) (p->params); + + params->A = A; + params->B = B; + params->C = C; + params->D = D; + params->E = E; +} + + +void XC(gga_x_ssb_sw_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + FLOAT ss, ss2, ss4, num1, dnum1, d2num1, num2, dnum2, d2num2, den1, dden1, d2den1, den2, dden2, d2den2, d3den2; + gga_x_ssb_sw_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_x_ssb_sw_params *) (p->params); + + ss = X2S*x; + ss2 = ss*ss; + ss4 = ss2*ss2; + + num1 = params->B*ss2; + den1 = 1.0 + params->C*ss2; + + num2 = -params->D*ss2; + den2 = 1.0 + params->E*ss4; + + *f = params->A + num1/den1 +num2/den2; + + if(order < 1) return; + + dnum1 = 2.0*params->B*ss; + dden1 = 2.0*params->C*ss; + + dnum2 = -2.0*params->D*ss; + dden2 = 4.0*params->E*ss*ss2; + + *dfdx = DFRACTION(num1, dnum1, den1, dden1) + DFRACTION(num2, dnum2, den2, dden2); + *dfdx *= X2S; + + if(order < 2) return; + + d2num1 = 2.0*params->B; + d2den1 = 2.0*params->C; + + d2num2 = -2.0*params->D; + d2den2 = 4.0*3.0*params->E*ss2; + + *d2fdx2 = D2FRACTION(num1, dnum1, d2num1, den1, dden1, d2den1) + + D2FRACTION(num2, dnum2, d2num2, den2, dden2, d2den2); + *d2fdx2 *= X2S*X2S; + + if(order < 3) return; + + d3den2 = 4.0*3.0*2.0*params->E*ss; + + *d3fdx3 = D3FRACTION(num1, dnum1, d2num1, 0.0, den1, dden1, d2den1, 0.0) + + D3FRACTION(num2, dnum2, d2num2, 0.0, den2, dden2, d2den2, d3den2); + *d3fdx3 *= X2S*X2S*X2S; +} + + +#define func XC(gga_x_ssb_sw_enhance) +#include "work_gga_x.c" + +static void +gga_x_ssb_init(XC(func_type) *p) +{ + static const FLOAT u = -1.205643, F = 0.995010, B = 0.137574; + + static int funcs_id [3] = {XC_LDA_X, XC_GGA_X_SSB_SW, XC_GGA_X_KT1}; + static FLOAT funcs_coef[3] = {-1.0, 1.0, 1.0}; + + XC(mix_init)(p, 3, funcs_id, funcs_coef); + + XC(gga_x_ssb_sw_set_params)(p->func_aux[1], 1.071769, 0.137574, 0.187883, 0.137574*(1.0 + 1.205643), 6.635315); + XC(gga_x_kt_set_params)(p->func_aux[2], u*F*X_FACTOR_C*B*(X2S*X2S), 0.1); +} + + +static void +gga_x_ssb_d_init(XC(func_type) *p) +{ + static const FLOAT u = -0.749940, F = 0.949488, B = 0.197465; + + static int funcs_id [3] = {XC_LDA_X, XC_GGA_X_SSB_SW, XC_GGA_X_KT1}; + static FLOAT funcs_coef[3] = {-1.0, 1.0, 1.0}; + + XC(mix_init)(p, 3, funcs_id, funcs_coef); + + XC(gga_x_ssb_sw_set_params)(p->func_aux[1], 1.079966, 0.197465, 0.272729, 0.197465*(1.0 + 0.749940), 5.873645); + XC(gga_x_kt_set_params)(p->func_aux[2], u*F*X_FACTOR_C*B*(X2S*X2S), 0.1); +} + + +const XC(func_info_type) XC(func_info_gga_x_ssb_sw) = { + XC_GGA_X_SSB_SW, + XC_EXCHANGE, + "Swarta, Sola and Bickelhaupt correction to PBE", + XC_FAMILY_GGA, + "M Swart, M Sola, and FM Bickelhaupt, J. Comp. Meth. Sci. Engin. 9, 69 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_ssb_sw_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_ssb) = { + XC_GGA_X_SSB, + XC_EXCHANGE, + "Swarta, Sola and Bickelhaupt", + XC_FAMILY_GGA, + "M Swart, M Sola, and FM Bickelhaupt, J. Chem. Phys. 131, 094103 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_ssb_init, + NULL, NULL, + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_ssb_d) = { + XC_GGA_X_SSB_D, + XC_EXCHANGE, + "Swarta, Sola and Bickelhaupt dispersion", + XC_FAMILY_GGA, + "M Swart, M Sola, and FM Bickelhaupt, J. Chem. Phys. 131, 094103 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_ssb_d_init, + NULL, NULL, + NULL, + NULL +}; + + diff --git a/libxc-2.2.0/src/gga_x_vmt.c b/libxc-2.2.0/src/gga_x_vmt.c new file mode 100644 index 000000000..40da01383 --- /dev/null +++ b/libxc-2.2.0/src/gga_x_vmt.c @@ -0,0 +1,201 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_VMT_PBE 71 /* Vela, Medel, and Trickey with mu = mu_PBE */ +#define XC_GGA_X_VMT_GE 70 /* Vela, Medel, and Trickey with mu = mu_GE */ +#define XC_GGA_X_VMT84_PBE 69 /* VMT{8,4} with constraint satisfaction with mu = mu_PBE */ +#define XC_GGA_X_VMT84_GE 68 /* VMT{8,4} with constraint satisfaction with mu = mu_GE */ + +typedef struct{ + FLOAT mu; + FLOAT alpha; +} gga_x_vmt_params; + + +static void +gga_x_vmt_init(XC(func_type) *p) +{ + gga_x_vmt_params *params; + + assert(p != NULL && p->params == NULL); + p->params = malloc(sizeof(gga_x_vmt_params)); + params = (gga_x_vmt_params *) (p->params); + + switch(p->info->number){ + case XC_GGA_X_VMT_PBE: + params->mu = 0.2195149727645171; + params->alpha = 0.002762; + break; + case XC_GGA_X_VMT_GE: + params->mu = 10.0/81.0; + params->alpha = 0.001553; + break; + case XC_GGA_X_VMT84_PBE: + params->mu = 0.2195149727645171; + params->alpha = 0.000074; + break; + case XC_GGA_X_VMT84_GE: + params->mu = 10.0/81.0; + params->alpha = 0.000023; + break; + default: + fprintf(stderr, "Internal error in gga_x_vmt\n"); + exit(1); + } +} + + +void XC(gga_x_vmt_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + FLOAT mu, alpha, ss, ss2, ss4, ss6, ss8, ss10, f0, g0, dg0, d2g0, d3g0; + FLOAT num1, den1, dnum1, dden1, d2num1, d2den1, d3num1; + + assert(p->params != NULL); + mu = ((gga_x_vmt_params *) (p->params))->mu; + alpha = ((gga_x_vmt_params *) (p->params))->alpha; + + ss = X2S*x; + ss2 = ss*ss; + ss4 = ss2*ss2; + + f0 = EXP(-alpha*ss2); + num1 = mu*ss2*f0; + den1 = 1.0 + mu*ss2; + + *f = 1.0 + num1/den1; + + if(p->info->number == XC_GGA_X_VMT84_PBE || p->info->number == XC_GGA_X_VMT84_GE){ + g0 = EXP(-alpha*ss4); + + *f += (1.0 - g0)/ss2 - 1.0 + g0; + } + + if(order < 1) return; + + ss6 = ss2*ss4; + + dnum1 = -2.0*mu*ss*(alpha*ss2 - 1.0)*f0; + dden1 = 2.0*mu*ss; + + *dfdx = DFRACTION(num1, dnum1, den1, dden1); + + if(p->info->number == XC_GGA_X_VMT84_PBE || p->info->number == XC_GGA_X_VMT84_GE){ + dg0 = -4.0*alpha*ss*ss2*g0; + + *dfdx += DFRACTION(1.0 - g0, -dg0, ss2, 2.0*ss) + dg0; + } + *dfdx *= X2S; + + if(order < 2) return; + + ss8 = ss2*ss6; + ss10 = ss2*ss8; + + d2num1 = 2.0*mu*(1.0 + alpha*ss2*(2.0*alpha*ss2 - 5.0))*f0; + d2den1 = 2.0*mu; + + *d2fdx2 = D2FRACTION(num1, dnum1, d2num1, den1, dden1, d2den1); + + if(p->info->number == XC_GGA_X_VMT84_PBE || p->info->number == XC_GGA_X_VMT84_GE){ + d2g0 = 4.0*alpha*ss2*(4.0*alpha*ss4 - 3.0)*g0; + + *d2fdx2 += D2FRACTION(1.0 - g0, -dg0, -d2g0, ss2, 2.0*ss, 2.0) + d2g0; + } + *d2fdx2 *= X2S*X2S; + + if(order < 3) return; + + d3num1 = -4.0*alpha*mu*ss*(6.0 + alpha*ss2*(2.0*alpha*ss2 - 9.0))*f0; + + *d3fdx3 = D3FRACTION(num1, dnum1, d2num1, d3num1, den1, dden1, d2den1, 0.0); + + if(p->info->number == XC_GGA_X_VMT84_PBE || p->info->number == XC_GGA_X_VMT84_GE){ + d3g0 = -8.0*alpha*ss*(3.0 + 2.0*alpha*ss4*(4.0*alpha*ss4 - 9.0))*g0; + + *d3fdx3 += D3FRACTION(1.0 - g0, -dg0, -d2g0, -d3g0, ss2, 2.0*ss, 2.0, 0.0) + d3g0; + } + *d3fdx3 *= X2S*X2S*X2S; +} + + +#define func XC(gga_x_vmt_enhance) +#include "work_gga_x.c" + + +const XC(func_info_type) XC(func_info_gga_x_vmt_pbe) = { + XC_GGA_X_VMT_PBE, + XC_EXCHANGE, + "Vela, Medel, and Trickey with mu = mu_PBE", + XC_FAMILY_GGA, + "A. Vela, V. Medel, and S. B. Trickey, J. Chem. Phys. 130, 244103 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_vmt_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_vmt_ge) = { + XC_GGA_X_VMT_GE, + XC_EXCHANGE, + "Vela, Medel, and Trickey with mu = mu_GE", + XC_FAMILY_GGA, + "A. Vela, V. Medel, and S. B. Trickey, J. Chem. Phys. 130, 244103 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_vmt_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_vmt84_pbe) = { + XC_GGA_X_VMT84_PBE, + XC_EXCHANGE, + "VMT{8,4} with constraint satisfaction with mu = mu_PBE", + XC_FAMILY_GGA, + "A Vela, JC Pacheco-Kato, JL Gazquez, JM del Campo, and SB Trickey, J. Chem. Phys. 136, 144115 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_vmt_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_vmt84_ge) = { + XC_GGA_X_VMT84_PBE, + XC_EXCHANGE, + "VMT{8,4} with constraint satisfaction with mu = mu_GE", + XC_FAMILY_GGA, + "A Vela, JC Pacheco-Kato, JL Gazquez, JM del Campo, and SB Trickey, J. Chem. Phys. 136, 144115 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_vmt_init, + NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_wc.c b/libxc-2.2.0/src/gga_x_wc.c new file mode 100644 index 000000000..bba7d7029 --- /dev/null +++ b/libxc-2.2.0/src/gga_x_wc.c @@ -0,0 +1,94 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_WC 118 /* Wu & Cohen */ + +static FLOAT wc_mu, wc_c; + +static void +gga_x_wc_init(XC(func_type) *p_) +{ + wc_mu = 0.2195149727645171; + wc_c = (146.0/2025.0)*(4.0/9.0) - (73.0/405.0)*(2.0/3.0) + (wc_mu - 10.0/81.0); +} + +void XC(gga_x_wc_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + const FLOAT kappa = 0.8040; + + FLOAT ss, ss2; + FLOAT aux1, aux2, f0, df0, d2f0, d3f0, dd; + + ss = X2S*x; + ss2 = ss*ss; + + aux1 = wc_mu - 10.0/81.0; + aux2 = EXP(-ss2); + + f0 = kappa + 10.0/81.0*ss2 + ss2*aux1*aux2 + LOG(1.0 + wc_c*ss2*ss2); + *f = 1.0 + kappa*(1.0 - kappa/f0); + + if(order < 1) return; + + dd = 1.0 + wc_c*ss2*ss2; + df0 = 20.0/81.0*ss + 2.0*ss*aux1*aux2*(1.0 - ss2) + 4.0*wc_c*ss*ss2/dd; + + *dfdx = kappa*kappa*df0/(f0*f0); + *dfdx *= X2S; + + if(order < 2) return; + + d2f0 = 20.0/81.0 + 2.0*aux1*aux2*(1.0 - 5.0*ss2 + 2.0*ss2*ss2) + - 4.0*wc_c*ss2*(dd - 4.0)/(dd*dd); + + *d2fdx2 = -kappa*kappa*(2.0*df0*df0 - d2f0*f0)/(f0*f0*f0); + *d2fdx2 *= X2S*X2S; + + if(order < 3) return; + + d3f0 = -4.0*aux1*aux2*ss*(6.0 - 9.0*ss2 + 2.0*ss2*ss2) + + 8.0*wc_c*ss*(3.0 + wc_c*ss2*ss2*(wc_c*ss2*ss2 - 12.0))/(dd*dd*dd); + + *d3fdx3 = kappa*kappa*(6.0*df0*df0*df0 - 6.0*f0*df0*d2f0 + f0*f0*d3f0)/(f0*f0*f0*f0); + *d3fdx3 *= X2S*X2S*X2S; + +} + +#define func XC(gga_x_wc_enhance) +#include "work_gga_x.c" + + +const XC(func_info_type) XC(func_info_gga_x_wc) = { + XC_GGA_X_WC, + XC_EXCHANGE, + "Wu & Cohen", + XC_FAMILY_GGA, + "Z Wu and RE Cohen, Phys. Rev. B 73, 235116 (2006)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_wc_init, + NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc-2.2.0/src/gga_x_wpbeh.c b/libxc-2.2.0/src/gga_x_wpbeh.c new file mode 100644 index 000000000..a4a8e8b85 --- /dev/null +++ b/libxc-2.2.0/src/gga_x_wpbeh.c @@ -0,0 +1,557 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_WPBEH 524 /* short-range version of the PBE */ + +typedef struct{ + FLOAT omega; +} gga_x_wpbeh_params; + +static void +gga_x_wpbeh_init(XC(func_type) *p) +{ + assert(p->params == NULL); + p->params = malloc(sizeof(gga_x_wpbeh_params)); + + /* The default value is actually PBEh */ + XC(gga_x_wpbeh_set_params)(p, 0.0); +} + +void +XC(gga_x_wpbeh_set_params)(XC(func_type) *p, FLOAT omega) +{ + gga_x_wpbeh_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_x_wpbeh_params *) (p->params); + + params->omega = omega; +} + + +#define HEADER 3 + +/* This implementation follows the one from espresso, that, in turn, + follows the one of the thesis of Jochen Heyd. Analytic derivatives + are only implemented in espresso though. These implementations can + be found in: + + vasp: xclib_grad.F, MODULE wpbe, and in particular SUBROUTINE EXCHWPBE_R + espresso: flib/functionals.f90, SUBROUTINE wpbe_analy_erfc_approx_grad + + very important details can be found in references: + + *) J Heyd, GE Scuseria, and M Ernzerhof, J. Chem. Phys. 118, 8207 (2003) + Erratum: J. Chem. Phys. 124, 219906 (2006). + *) M Ernzerhof and JP Perdew, J. Chem. Phys. 109, 3313 (1998) + *) J Heyd and GE Scuseria, J. Chem. Phys. 120, 7274 (2004) + + Also the whole mess with the rescaling of s is explained in + + *) TM Henderson, AF Izmaylov, G Scalmani, and GE Scuseria, J. Chem. Phys. 131, 044108 (2009) +*/ + +static inline void +s_scaling(int version, int order, FLOAT s1, FLOAT *s2, FLOAT *ds2ds1) +{ + /* parameters for the re-scaling of s */ + static const FLOAT strans=8.3, smax=8.572844, sconst=18.79622316; + static const FLOAT s0=8.572844, p4=0.615482, p5=1.136921, p6=-0.449154, + q4=1.229195, q5=-0.0269253, q6=0.313417, q7=-0.0508314, q8=0.0175739; + + FLOAT expms1, expmsmax, s12, s14, num, den, dnum, dden; + + switch(version){ + case 0: /* no scaling */ + *s2 = s1; + break; + + case 1: /* original scaling of Heyd */ + *s2 = (s1 < strans) ? s1 : smax - sconst/(s1*s1); + break; + + case 2: /* first version of the scaling by TM Henderson, apparently used by Gaussian */ + if(s1 < 1.0) + *s2 = s1; + else if(s1 > 15.0) + *s2 = smax; + else{ + expms1 = EXP(-s1); + expmsmax = EXP(-smax); + *s2 = s1 - LOG(1.0 + expmsmax/expms1); + } + break; + + case 3: /* second version of the scaling by TM Henderson */ + expms1 = EXP(-s1); + expmsmax = EXP(-smax); + *s2 = s1 - (1.0 - expms1)*LOG(1.0 + expmsmax/expms1); + break; + + case 4: /* appendix of JCP 128, 194105 (2008) */ + s12 = s1*s1; + s14 = s12*s12; + + num = s1*(1.0 + s14*(p4 + s1*(p5 + s1*(p6 + s1*q8*s0)))); + den = 1.0 + s14*(q4 + s1*(q5 + s1*(q6 + s1*(q7 + s1*q8)))); + + *s2 = num/den; + break; + + default: + fprintf(stderr, "Internal error in gga_x_hse\n"); + exit(1); + } + + if(order < 1) return; + + switch(version){ + case 0: + *ds2ds1 = 1.0; + break; + + case 1: + *ds2ds1 = (s1 < strans) ? 1.0 : 2.0*sconst/(s1*s1*s1); + break; + + case 2: + if(s1 < 1.0) + *ds2ds1 = 1.0; + else if(s1 > 15.0) + *ds2ds1 = 0.0; + else + *ds2ds1 = expms1/(expms1 + expmsmax); + break; + + case 3: + *ds2ds1 = expms1*(1.0 + expmsmax)/(expms1 + expmsmax) - expms1*LOG(1.0 + expmsmax/expms1); + + case 4: /* appendix of JCP 128, 194105 (2008) */ + dnum = 1.0 + s14*(5.0*p4 + s1*(6.0*p5 + s1*(7.0*p6 + s1*8.0*q8*s0))); + dden = s12*s1*(4.0*q4 + s1*(5.0*q5 + s1*(6.0*q6 + s1*(7.0*q7 + s1*8.0*q8)))); + + *ds2ds1 = (dnum*den - num*dden)/(den*den); + } +} + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, FLOAT ds, + FLOAT *f, FLOAT *dfdx, FLOAT *lvrho) +{ + static const FLOAT AA=1.0161144, BB=-0.37170836, CC=-0.077215461, DD=0.57786348, EE=-0.051955731; + static const FLOAT m89=-8.0/9.0; + + /* Cutoff criterion below which to use polynomial expansion */ + static const FLOAT EGscut=0.08, wcutoff=14, expfcutoff=700.0; + + FLOAT omega, kF, ww, ww2, ww3, ww4, ww5, ww6, ww7, ww8, dwdrho; + FLOAT ss, ss2, ss3, ss4, ss5, ss6, dssdx; + FLOAT AA2, AA3, AA12, AA32, AA52; + FLOAT DHs, DHs2, DHs3, DHs4, DHs72, DHs92; + FLOAT eb1, f94Hs2_A, DHsw, DHsw2, DHsw52, DHsw72; + FLOAT Hsbw, Hsbw2, Hsbw3, Hsbw4, Hsbw12, Hsbw32, Hsbw52, Hsbw72; + FLOAT DHsbw, DHsbw2, DHsbw3, DHsbw4, DHsbw5, DHsbw12, DHsbw32, DHsbw52, DHsbw72, DHsbw92; + FLOAT HsbwA94, HsbwA942, HsbwA943, HsbwA945, HsbwA9412; + FLOAT H, F, EG, dHds, dFds, dEGds, dDHsds, dDHswdw, dHsbwds, dHsbwdw; + FLOAT term1, term2, term3, term4, term5, t10, piexperf, expei; + FLOAT dterm1ds, dterm2ds, dterm3ds, dterm4ds, dterm5ds, dterm1dw, dterm3dw, dterm4dw, dterm5dw; + FLOAT dt10ds, dt10dw, dpiexperfds, dpiexperfdw, dexpeids, dexpeidw; + + assert(p->params != NULL); + omega = ((gga_x_wpbeh_params *)(p->params))->omega; + + /* Note that kF has a 6 and not a 3 as it should in principle + be. This is because the HSE formula, if one would take the papers + seriously, does not fulfill the spin sum-rule. This is probably + an oversight from them. So, we have to choose, either a 6 or a 3. + + Nwchem seems to have the factor of 6, but VASP and espresso have + a 3. This would amount to rescaling omega by a factor of + cbrt(2). We follow the quantum chemistry community and put the 6. + */ + kF = POW(6.0*M_PI*M_PI*ds, 1.0/3.0); + ww = omega/kF; + ww2 = ww*ww; ww3 = ww*ww2; ww4 = ww*ww3; ww5 = ww*ww4; ww6 = ww*ww5; ww7 = ww*ww6; ww8 = ww*ww7; + + /* Rescaling the s values to ensure the Lieb-Oxford bound */ + s_scaling(2, order, X2S*x, &ss, &dssdx); + ss2 = ss*ss; + ss3 = ss*ss2; + ss4 = ss*ss3; + ss5 = ss*ss4; + ss6 = ss*ss5; + + if(order >= 1){ + dwdrho = -ww/(3.0*ds); + dssdx *= X2S; + } + + AA2 = AA*AA; + AA3 = AA2*AA; + AA12 = SQRT(AA); + AA32 = AA12*AA; + AA52 = AA32*AA; + + /* first let us calculate H(s) */ + { + static const FLOAT Ha1=0.00979681, Ha2=0.0410834, Ha3=0.187440, Ha4=0.00120824, Ha5=0.0347188; + FLOAT Hnum, Hden, dHnum, dHden; + + Hnum = Ha1*ss2 + Ha2*ss4; + Hden = 1.0 + Ha3*ss4 + Ha4*ss5 + Ha5*ss6; + + H = Hnum/Hden; + + if(order >= 1){ + dHnum = 2.0*Ha1*ss + 4.0*Ha2*ss3; + dHden = 4.0*Ha3*ss3 + 5.0*Ha4*ss4 + 6.0*Ha5*ss5; + + dHds = (Hden*dHnum - Hnum*dHden)/(Hden*Hden); + } + } + + /* now we calculate F(s) */ + { + FLOAT Fc1, Fc2; + + //Fc1 = 4.0*AA*AA/(9.0*CC) + (BB - AA*DD)/CC; + //Fc2 = -4.0/(3.0*36.0*CC); + + Fc1 = 6.4753871; + Fc2 = 0.47965830; + + F = Fc1*H + Fc2; + + if(order >= 1) + dFds = Fc1*dHds; + } + + /* useful variables for what comes next */ + DHs = DD + ss2*H; + DHs2 = DHs*DHs; + DHs3 = DHs2*DHs; + DHs4 = DHs3*DHs; + DHs72 = DHs3*SQRT(DHs); + DHs92 = DHs72*DHs; + + f94Hs2_A = 9.0*H*ss2/(4.0*AA); + + DHsw = DHs + ww2; + DHsw2 = DHsw*DHsw; + DHsw52 = SQRT(DHsw)*DHsw2; + DHsw72 = DHsw52*DHsw; + + eb1 = (ww < wcutoff) ? 1.455915450052607 : 2.0; + + Hsbw = ss2*H + eb1*ww2; + Hsbw2 = Hsbw*Hsbw; + Hsbw3 = Hsbw2*Hsbw; + Hsbw4 = Hsbw3*Hsbw; + Hsbw12 = SQRT(Hsbw); + Hsbw32 = Hsbw12*Hsbw; + Hsbw52 = Hsbw32*Hsbw; + Hsbw72 = Hsbw52*Hsbw; + + if(order >= 1){ + dDHsds = 2.0*ss*H + ss2*dHds; + dDHswdw = 2.0*ww; + dHsbwds = ss2*dHds + 2.0*ss*H; + dHsbwdw = 2.0*eb1*ww; + } + + DHsbw = DD + Hsbw; /* derivatives of DHsbw are equal to the ones of Hsbw */ + DHsbw2 = DHsbw*DHsbw; + DHsbw3 = DHsbw2*DHsbw; + DHsbw4 = DHsbw3*DHsbw; + DHsbw5 = DHsbw4*DHsbw; + DHsbw12 = SQRT(DHsbw); + DHsbw32 = DHsbw12*DHsbw; + DHsbw52 = DHsbw32*DHsbw; + DHsbw72 = DHsbw52*DHsbw; + DHsbw92 = DHsbw72*DHsbw; + + HsbwA94 = 9.0*Hsbw/(4.0*AA); + HsbwA942 = HsbwA94*HsbwA94; + HsbwA943 = HsbwA942*HsbwA94; + HsbwA945 = HsbwA943*HsbwA942; + HsbwA9412 = SQRT(HsbwA94); + + /* and now G(s) */ + if(ss > EGscut){ + FLOAT Ga, Gb, dGa, dGb; + + Ga = M_SQRTPI*(15.0*EE + 6.0*CC*(1.0 + F*ss2)*DHs + 4.0*BB*DHs2 + 8.0*AA*DHs3)/(16.0*DHs72) + - (3.0*M_PI/4.0)*SQRT(AA)*EXP(f94Hs2_A)*(1.0 - ERF(SQRT(f94Hs2_A))); + Gb = 15.0*M_SQRTPI*ss2/(16.0*DHs72); + + EG = -(3.0*M_PI/4.0 + Ga)/Gb; + + if(order >= 1){ + dGa = (M_SQRTPI/32.0) * + ((36.0*(2.0*H + dHds*ss)/(AA12*SQRT(H/AA)) + + (1.0/DHs92) *(-8.0*AA*dDHsds*DHs3 - 105.0*dDHsds*EE - 30.0*CC*dDHsds*DHs*(1.0 + ss2*F) + + 12.0*DHs2*(-BB*dDHsds + CC*ss*(dFds*ss + 2.0*F))) - + ((54.0*EXP(f94Hs2_A)*M_SQRTPI*ss*(2.0*H + dHds*ss)*ERFC(sqrt(f94Hs2_A)))/AA12))); + + dGb = (15.0*M_SQRTPI*ss*(4.0*DHs - 7.0*dDHsds*ss))/(32.0*DHs92); + + dEGds = (-4.0*dGa*Gb + dGb*(4.0*Ga + 3.0*M_PI))/(4.0*Gb*Gb); + } + }else{ + static const FLOAT EGa1=-0.02628417880, EGa2=-0.07117647788, EGa3=0.08534541323; + + EG = EGa1 + EGa2*ss2 + EGa3*ss4; + + if(order >= 1){ + dEGds = 2.0*EGa2*ss + 4.0*EGa3*ss3; + } + } + + /* Calculate the terms needed in any case */ + term2 = (DHs2*BB + DHs*CC + 2.0*EE + DHs*ss2*CC*F + 2.0*ss2*EG)/(2.0*DHs3); + term3 = -ww*(4.0*DHsw2*BB + 6.0*DHsw*CC + 15.0*EE + 6.0*DHsw*ss2*CC*F + 15.0*ss2*EG)/(8.0*DHs*DHsw52); + term4 = -ww3*(DHsw*CC + 5.0*EE + DHsw*ss2*CC*F + 5.0*ss2*EG)/(2.0*DHs2*DHsw52); + term5 = -ww5*(EE + ss2*EG)/(DHs3*DHsw52); + + if(order >=1){ + dterm2ds = (-6.0*dDHsds*(EG*ss2 + EE) + + DHs2*(-dDHsds*BB + ss*CC*(dFds*ss + 2.0*F)) + + 2.0*DHs*(2.0*EG*ss - dDHsds*CC + ss2*(dEGds - dDHsds*CC*F))) + /(2.0*DHs4); + + dterm3ds = ww*(2.0*dDHsds*DHsw*(4.0*DHsw2*BB + 6.0*DHsw*CC + 15.0*EE + 3.0*ss2*(5.0*EG + 2.0*DHsw*CC*F)) + + DHs*(75.0*dDHsds*(EG*ss2 + EE) + 4.0*DHsw2*(dDHsds*BB - 3.0*ss*CC*(dFds*ss + 2.0*F)) + - 6.0*DHsw*(-3.0*dDHsds*CC + ss*(10.0*EG + 5.0*dEGds*ss - 3.0*dDHsds*ss*CC*F)))) + /(16.0*DHs2*DHsw72); + + dterm3dw = (-2.0*DHsw*(4.0*DHsw2*BB + 6.0*DHsw*CC + 15.0*EE + 3.0*ss2*(5.0*EG + 2.0*DHsw*CC*F)) + + ww*dDHswdw*(75.0*(EG*ss2 + EE) + 2.0*DHsw*(2.0*DHsw*BB + 9.0*CC + 9.0*ss2*CC*F))) + /(16.0*DHs*DHsw72); + + dterm4ds = ww3*(4.0*dDHsds*DHsw*(DHsw*CC + 5.0*EE + ss2*(5.0*EG + DHsw*CC*F)) + + DHs*(25.0*dDHsds*(EG*ss2 + EE) - 2.0*DHsw2*ss*CC*(dFds*ss + 2.0*F) + + DHsw*(3.0*dDHsds*CC + ss*(-20.0*EG - 10.0*dEGds*ss + 3.0*dDHsds*ss*CC*F)))) + /(4.0*DHs3*DHsw72); + + dterm4dw = ww2*(-6.0*DHsw*(DHsw*CC + 5.0*EE + ss2*(5.0*EG + DHsw*CC*F)) + + ww*dDHswdw*(25.0*(EG*ss2 + EE) + 3.0*DHsw*CC*(1.0 + ss2*F))) + /(4.0*DHs2*DHsw72); + + dterm5ds = ww5*(6.0*dDHsds*DHsw*(EG*ss2 + EE) + + DHs*(-2.0*DHsw*ss*(2.0*EG + dEGds*ss) + 5.0*dDHsds*(EG*ss2 + EE))) + /(2.0*DHs4*DHsw72); + + dterm5dw = ww4*5.0*(EG*ss2 + EE)*(-2.0*DHsw + dDHswdw*ww) + /(2.0*DHs3*DHsw72); + } + + if((ss > 0.0) || (ww > 0.0)){ + FLOAT dt10; + + t10 = 0.5*AA*LOG(Hsbw/DHsbw); + + if(order >= 1){ + dt10 = 0.5*AA*(1.0/Hsbw - 1.0/DHsbw); + + dt10ds = dt10*dHsbwds; + dt10dw = dt10*dHsbwdw; + } + } + + /* Calculate exp(x)*f(x) depending on size of x */ + if(HsbwA94 < expfcutoff){ + piexperf = M_PI*EXP(HsbwA94)*ERFC(HsbwA9412); + expei = EXP(HsbwA94)*(-expint_e1(HsbwA94)); + + }else{ + static const FLOAT expei1=4.03640, expei2=1.15198, expei3=5.03627, expei4=4.19160; + + piexperf = M_PI*(1.0/(M_SQRTPI*HsbwA9412) - 1.0/(2.0*SQRT(M_PI*HsbwA943))+ 3.0/(4.0*SQRT(M_PI*HsbwA945))); + expei = - (1.0/HsbwA94)*(HsbwA942 + expei1*HsbwA94 + expei2)/(HsbwA942 + expei3*HsbwA94 + expei4); + } + + if(order >= 1){ + FLOAT dpiexperf, dexpei; + + dpiexperf = -(3.0*M_SQRTPI*SQRT(Hsbw/AA))/(2.0*Hsbw) + (9.0*piexperf)/(4.0*AA); + dpiexperfds = dpiexperf*dHsbwds; + dpiexperfdw = dpiexperf*dHsbwdw; + + dexpei = 1.0/Hsbw + 9.0*expei/(4.0*AA); + dexpeids = dexpei*dHsbwds; + dexpeidw = dexpei*dHsbwdw; + } + + if (ww == 0.0){ /* Fall back to original expression for the PBE hole */ + FLOAT t1, dt1ds, dt1dw; + + if(ss > MIN_GRAD){ + t1 = -0.5*AA*expei; + *f = m89*(t1 + t10 + term2); + }else{ + *f = 1.0; + } + + if(order >= 1){ + if(ss > MIN_GRAD){ + dt1ds = -0.5*AA*dexpeids; + dt1dw = -0.5*AA*dexpeidw; + + *dfdx = m89*(dt1ds + dt10ds + dterm2ds); + *lvrho = m89*(dt1dw + dt10dw); + }else{ + *dfdx = 0.0; + *lvrho = 0.0; + } + } + + }else if(ww > wcutoff){ /* Use simple gaussian approximation for large w */ + FLOAT dterm1; + + term1 = -0.5*AA*(expei + LOG(DHsbw) - LOG(Hsbw)); + *f = m89*(term1 + term2 + term3 + term4 + term5); + + if(order >= 1){ + dterm1 = -AA/(2.0*DHsbw) + m89*expei; + + dterm1ds = dterm1*dHsbwds; + dterm1dw = dterm1*dHsbwdw; + + *dfdx = m89*(dterm1ds + dterm2ds + dterm3ds + dterm4ds + dterm5ds); + *lvrho = m89*(dterm1dw + dterm3dw + dterm4dw + dterm5dw); + } + + }else{ /* For everything else use the full blown expression */ + + static const FLOAT ea1=-1.128223946706117, ea2=1.452736265762971, ea3=-1.243162299390327, + ea4=0.971824836115601, ea5=-0.568861079687373, ea6=0.246880514820192, ea7=-0.065032363850763, + ea8=0.008401793031216; + + FLOAT np1, np2, t1, f2, f3, f4, f5, f6, f7, f8, f9, t2t9; + FLOAT dnp1dw, dnp2dw, dt1ds, dt1dw, df2, df2ds, df2dw, df3, df3ds, df3dw; + FLOAT df4, df4ds, df4dw, df5, df5ds, df5dw, df6, df6ds, df6dw, df7ds, df7dw; + FLOAT df8, df8ds, df8dw, df9, df9ds, df9dw, dt2t9ds, dt2t9dw; + + np1 = -1.5*ea1*AA12*ww + 27.0*ea3*ww3/(8.0*AA12) - 243.0*ea5*ww5/(32.0*AA32) + 2187.0*ea7*ww7/(128.0*AA52); + np2 = -AA + 9.0*ea2*ww2/4.0 - 81.0*ea4*ww4/(16.0*AA) + 729.0*ea6*ww6/(64.0*AA2) - 6561.0*ea8*ww8/(256.0*AA3); + + t1 = 0.5*(np1*piexperf + np2*expei); + + f2 = 0.5*ea1*M_SQRTPI*AA/DHsbw12; + f3 = 0.5*ea2*AA/DHsbw; + f4 = ea3*M_SQRTPI*(-9.0/(8.0*Hsbw12) + 0.25*AA/DHsbw32); + f5 = (ea4/128.0)*(-144.0/Hsbw + 64.0*AA/DHsbw2); + f6 = ea5*(3.0*M_SQRTPI*(3.0*DHsbw52*(9.0*Hsbw - 2.0*AA) + + 4.0*Hsbw32*AA2))/(32.0*DHsbw52*Hsbw32*AA); + f7 = ea6*((32.0*AA/DHsbw3 + (-36.0 + 81.0*ss2*H/AA)/Hsbw2))/32.0; + f8 = ea7*(-3.0*M_SQRTPI*(-40.0*Hsbw52*AA3 + 9.0*DHsbw72*(27.0*Hsbw2 - 6.0*Hsbw*AA + 4.0*AA2)))/(128.0*DHsbw72*Hsbw52*AA2); + f9 = (324.0*ea6*eb1*DHsbw4*Hsbw*AA + ea8*(384.0*Hsbw3*AA3 + DHsbw4*(-729.0*Hsbw2 + 324.0*Hsbw*AA - 288.0*AA2)))/(128.0*DHsbw4*Hsbw3*AA2); + + t2t9 = f2*ww + f3*ww2 + f4*ww3 + f5*ww4 + f6*ww5 + f7*ww6 + f8*ww7 + f9*ww8; + + term1 = t1 + t2t9 + t10; + + *f = m89*(term1 + term2 + term3 + term4 + term5); + + if(order >= 1){ + dnp1dw = -1.5*ea1*AA12 + 81.0*ea3*ww2/(8.0*AA12) - 1215.0*ea5*ww4/(32.0*AA32) + + (15309.0*ea7*ww6)/(128.0*AA52); + + dnp2dw = 0.5*9.0*ea2*ww - 81.0*ea4*ww3/(4.0*AA) + 2187.0*ea6*ww5/(32.0*AA2) + - 6561.0*ea8*ww7/(32.0*AA3); + + dt1ds = 0.5*(dpiexperfds*np1 + dexpeids*np2); + dt1dw = 0.5*(dnp2dw*expei + dpiexperfdw*np1 + dexpeidw*np2 + dnp1dw*piexperf); + + df2 = -ea1*M_SQRTPI*AA/(4.0*DHsbw32); + df2ds = df2*dHsbwds; + df2dw = df2*dHsbwdw; + + df3 = -ea2*AA/(2.0*DHsbw2); + df3ds = df3*dHsbwds; + df3dw = df3*dHsbwdw; + + df4 = ea3*M_SQRTPI*(9.0/(16.0*Hsbw32)- 3.0*AA/(8.0*DHsbw52)); + df4ds = df4*dHsbwds; + df4dw = df4*dHsbwdw; + + df5 = ea4*(9.0/(8.0*Hsbw2) - AA/DHsbw3); + df5ds = df5*dHsbwds; + df5dw = df5*dHsbwdw; + + df6 = ea5*M_SQRTPI*(27.0/(32.0*Hsbw52)- 81.0/(64.0*Hsbw32*AA) - 15.0*AA/(16.0*DHsbw72)); + df6ds = df6*dHsbwds; + df6dw = df6*dHsbwdw; + + df7ds = ea6*(3.0*(27.0*dHds*DHsbw4*Hsbw*ss2 + 8.0*dHsbwds*AA*(3.0*DHsbw4 - 4.0*Hsbw3*AA) + + 54.0*DHsbw4*ss*(Hsbw - dHsbwds*ss)*H))/(32.0*DHsbw4*Hsbw3*AA); + df7dw = ea6*dHsbwdw*(9.0/(4.0*Hsbw3) - 3.0*AA/DHsbw4 - 81.0*ss2*H/(16.0*Hsbw3*AA)); + + df8 = ea7*M_SQRTPI*(135.0/(64.0*Hsbw72) + 729.0/(256.0*Hsbw32*AA2) + - 243.0/(128.0*Hsbw52*AA) - 105.0*AA/(32.0*DHsbw92)); + df8ds = df8*dHsbwds; + df8dw = df8*dHsbwdw; + + df9 = -81.0*ea6*eb1/(16.0*Hsbw3*AA) + + ea8*(27.0/(4.0*Hsbw4) + 729.0/(128.0*Hsbw2*AA2) - 81.0/(16.0*Hsbw3*AA) - 12.0*AA/DHsbw5); + df9ds = df9*dHsbwds; + df9dw = df9*dHsbwdw; + + dt2t9ds = df2ds*ww + df3ds*ww2 + df4ds*ww3 + df5ds*ww4 + + df6ds*ww5 + df7ds*ww6 + df8ds*ww7 + df9ds*ww8; + dt2t9dw = f2 + df2dw*ww + 2.0*f3*ww + df3dw*ww2 + + 3.0*f4*ww2 + df4dw*ww3 + 4.0*f5*ww3 + df5dw*ww4 + + 5.0*f6*ww4 + df6dw*ww5 + 6.0*f7*ww5 + df7dw*ww6 + + 7.0*f8*ww6 + df8dw*ww7 + 8.0*f9*ww7 + df9dw*ww8; + + dterm1ds = dt1ds + dt2t9ds + dt10ds; + dterm1dw = dt1dw + dt2t9dw + dt10dw; + + *dfdx = m89*(dterm1ds + dterm2ds + dterm3ds + dterm4ds + dterm5ds); + *lvrho = m89*(dterm1dw + dterm3dw + dterm4dw + dterm5dw); + } + + } + + /* scale and convert to the right variables */ + if(order >= 1){ + *dfdx *= dssdx; + *lvrho *= dwdrho; + } +} + +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_wpbeh) = { + XC_GGA_X_WPBEH, + XC_EXCHANGE, + "short-range part of the PBE (default w=0 gives PBEh)", + XC_FAMILY_GGA, + "J Heyd, GE Scuseria, and M Ernzerhof, J. Chem. Phys. 118, 8207 (2003)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_wpbeh_init, + NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc-2.2.0/src/gga_xc_1w.c b/libxc-2.2.0/src/gga_xc_1w.c new file mode 100644 index 000000000..3bb125f00 --- /dev/null +++ b/libxc-2.2.0/src/gga_xc_1w.c @@ -0,0 +1,115 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_XC_XLYP 166 /* XLYP functional */ +#define XC_GGA_XC_PBE1W 173 /* Functionals fitted for water */ +#define XC_GGA_XC_MPWLYP1W 174 /* Functionals fitted for water */ +#define XC_GGA_XC_PBELYP1W 175 /* Functionals fitted for water */ + +static void +gga_xc_xlyp_init(XC(func_type) *p) +{ + static int funcs_id [4] = {XC_LDA_X, XC_GGA_X_B88, XC_GGA_X_PW91, XC_GGA_C_LYP}; + static FLOAT funcs_coef[4] = {1.0 - 0.722 - 0.347, 0.722, 0.347, 1.0}; + + XC(mix_init)(p, 4, funcs_id, funcs_coef); +} + +const XC(func_info_type) XC(func_info_gga_xc_xlyp) = { + XC_GGA_XC_XLYP, + XC_EXCHANGE_CORRELATION, + "XLYP", + XC_FAMILY_GGA, + "X Xu and WA Goddard, III, PNAS 101, 2673 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_xlyp_init, + NULL, NULL, NULL, NULL +}; + + +static void +gga_xc_pbe1w_init(XC(func_type) *p) +{ + static int funcs_id [3] = {XC_LDA_C_VWN, XC_GGA_X_PBE, XC_GGA_C_PBE}; + static FLOAT funcs_coef[3] = {1.0 - 74.0/100.0, 1.0, 74.0/100.0}; + + XC(mix_init)(p, 3, funcs_id, funcs_coef); +} + +const XC(func_info_type) XC(func_info_gga_xc_pbe1w) = { + XC_GGA_XC_PBE1W, + XC_EXCHANGE_CORRELATION, + "PBE1W", + XC_FAMILY_GGA, + "EE Dahlke and DG Truhlar, J. Phys. Chem. B 109, 15677 (2005)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_pbe1w_init, + NULL, NULL, NULL, NULL +}; + + +static void +gga_xc_mpwlyp1w_init(XC(func_type) *p) +{ + static int funcs_id [3] = {XC_LDA_C_VWN, XC_GGA_X_MPW91, XC_GGA_C_LYP}; + static FLOAT funcs_coef[3] = {1.0 - 88.0/100.0, 1.0, 88.0/100.0}; + + XC(mix_init)(p, 3, funcs_id, funcs_coef); +} + +const XC(func_info_type) XC(func_info_gga_xc_mpwlyp1w) = { + XC_GGA_XC_MPWLYP1W, + XC_EXCHANGE_CORRELATION, + "mPWLYP1w", + XC_FAMILY_GGA, + "EE Dahlke and DG Truhlar, J. Phys. Chem. B 109, 15677 (2005)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_mpwlyp1w_init, + NULL, NULL, NULL, NULL +}; + + +static void +gga_xc_pbelyp1w_init(XC(func_type) *p) +{ + static int funcs_id [3] = {XC_LDA_C_VWN, XC_GGA_X_PBE, XC_GGA_C_LYP}; + static FLOAT funcs_coef[3] = {1.0 - 74.0/100.0, 1.0, 74.0/100.0}; + + XC(mix_init)(p, 3, funcs_id, funcs_coef); +} + +const XC(func_info_type) XC(func_info_gga_xc_pbelyp1w) = { + XC_GGA_XC_PBELYP1W, + XC_EXCHANGE_CORRELATION, + "PBELYP1W", + XC_FAMILY_GGA, + "EE Dahlke and DG Truhlar, J. Phys. Chem. B 109, 15677 (2005)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_pbelyp1w_init, + NULL, NULL, NULL, NULL +}; + diff --git a/libxc-2.2.0/src/gga_xc_b97.c b/libxc-2.2.0/src/gga_xc_b97.c new file mode 100644 index 000000000..cbad178f1 --- /dev/null +++ b/libxc-2.2.0/src/gga_xc_b97.c @@ -0,0 +1,679 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_XC_HCTH_93 161 /* HCTH functional fitted to 93 molecules */ +#define XC_GGA_XC_HCTH_120 162 /* HCTH functional fitted to 120 molecules */ +#define XC_GGA_XC_HCTH_147 163 /* HCTH functional fitted to 147 molecules */ +#define XC_GGA_XC_HCTH_407 164 /* HCTH functional fitted to 407 molecules */ +#define XC_GGA_XC_B97 167 /* Becke 97 */ +#define XC_GGA_XC_B97_1 168 /* Becke 97-1 */ +#define XC_GGA_XC_B97_2 169 /* Becke 97-2 */ +#define XC_GGA_XC_B97_D 170 /* Grimme functional to be used with C6 vdW term */ +#define XC_GGA_XC_B97_K 171 /* Boese-Martin for Kinetics */ +#define XC_GGA_XC_B97_3 172 /* Becke 97-3 */ +#define XC_GGA_XC_SB98_1a 176 /* Schmider-Becke 98 parameterization 1a */ +#define XC_GGA_XC_SB98_1b 177 /* Schmider-Becke 98 parameterization 1b */ +#define XC_GGA_XC_SB98_1c 178 /* Schmider-Becke 98 parameterization 1c */ +#define XC_GGA_XC_SB98_2a 179 /* Schmider-Becke 98 parameterization 2a */ +#define XC_GGA_XC_SB98_2b 180 /* Schmider-Becke 98 parameterization 2b */ +#define XC_GGA_XC_SB98_2c 181 /* Schmider-Becke 98 parameterization 2c */ +#define XC_GGA_XC_HCTH_A 97 /* HCTH-A */ +#define XC_GGA_XC_B97_GGA1 96 /* Becke 97 GGA-1 */ +#define XC_GGA_XC_HCTH_P14 95 /* HCTH p=1/4 */ +#define XC_GGA_XC_HCTH_P76 94 /* HCTH p=7/6 */ +#define XC_GGA_XC_HCTH_407P 93 /* HCTH/407+ */ +#define XC_GGA_C_N12 80 /* N12 functional from Minnesota */ +#define XC_GGA_C_N12_SX 79 /* N12-SX functional from Minnesota */ + +static const FLOAT b97_params[][3][5] = { + { /* HCTH/93 */ + {1.09320, -0.744056, 5.59920, -6.78549, 4.49357}, /* X */ + {0.222601, -0.0338622, -0.0125170, -0.802496, 1.55396}, /* Css */ + {0.729974, 3.35287, -11.5430, 8.08564, -4.47857} /* Cab */ + }, { /* HCTH/120 */ + {1.09163, -0.747215, 5.07833, -4.10746, 1.17173}, /* X */ + {0.489508, -0.260699, 0.432917, -1.99247, 2.48531}, /* Css */ + {0.514730, 6.92982, -24.7073, 23.1098, -11.3234 } /* Cab */ + }, { /* HCTH/147 */ + {1.09025, -0.799194, 5.57212, -5.86760, 3.04544 }, /* X */ + {0.562576, 0.0171436, -1.30636, 1.05747, 0.885429}, /* Css */ + {0.542352, 7.01464, -28.3822, 35.0329, -20.4284 }, /* Cab */ + }, { /* HCTH/407 */ + {1.08184, -0.518339, 3.42562, -2.62901, 2.28855}, /* X */ + {1.18777, -2.40292, 5.61741, -9.17923, 6.24798}, /* Css */ + {0.589076, 4.42374, -19.2218, 42.5721, -42.0052 } /* Cab */ + }, { /* Becke 97 */ + {0.8094, 0.5073, 0.7481, 0.0, 0.0}, /* X */ + {0.1737, 2.3487, -2.4868, 0.0, 0.0}, /* Css */ + {0.9454, 0.7471, -4.5961, 0.0, 0.0} /* Cab */ + }, { /* Becke 97-1 */ + {0.789518, 0.573805, 0.660975, 0.0, 0.0}, /* X */ + {0.0820011, 2.71681, -2.87103, 0.0, 0.0}, /* Css */ + {0.955689, 0.788552, -5.47869, 0.0, 0.0} /* Cab */ + }, { /* Becke 97-2 */ + {0.827642, 0.0478400, 1.76125, 0.0, 0.0}, /* X */ + {0.585808, -0.691682, 0.394796, 0.0, 0.0}, /* Css */ + {0.999849, 1.40626, -7.44060, 0.0, 0.0} /* Cab */ + }, { /* Becke 97-D */ + {1.08662, -0.52127, 3.25429, 0.0, 0.0}, /* X */ + {0.22340, -1.56208, 1.94293, 0.0, 0.0}, /* Css */ + {0.69041, 6.30270, -14.9712, 0.0, 0.0} /* Cab */ + }, { /* Becke 97-K */ + {0.507863, 1.46873, -1.51301, 0.0, 0.0}, /* X */ + {0.12355, 2.65399, -3.20694, 0.0, 0.0}, /* Css */ + {1.58613, -6.20977, 6.46106, 0.0, 0.0} /* Cab */ + }, { /* Becke 97-3 */ + { 0.7334648, 0.2925270, 3.338789, -10.51158, 10.60907}, /* X */ + { 0.5623649, -1.322980, 6.359191, -7.464002, 1.827082}, /* Css */ + { 1.133830, -2.811967, 7.431302, -1.969342, -11.74423} /* Cab */ + }, { /* SB98-1a */ + { 0.845975, 0.228183, 0.749949, 0.0, 0.0}, /* X */ + {-0.817637, -0.054676, 0.592163, 0.0, 0.0}, /* Css */ + { 0.975483, 0.398379, -3.73540, 0.0, 0.0} /* Cab */ + }, { /* SB98-1b */ + { 0.800103, -0.084192, 1.47742, 0.0, 0.0}, /* X */ + { 1.44946, -2.37073, 2.13564, 0.0, 0.0}, /* Css */ + { 0.977621, 0.931199, -4.76973, 0.0, 0.0} /* Cab */ + }, { /* SB98-1c */ + { 0.810936, 0.496090, 0.772385, 0.0, 0.0}, /* X */ + { 0.262077, 2.12576, -2.30465, 0.0, 0.0}, /* Css */ + { 0.939269, 0.898121, -4.91276, 0.0, 0.0} /* Cab */ + }, { /* SB98-2a */ + { 0.749200, 0.402322, 0.620779, 0.0, 0.0}, /* X */ + { 1.26686, 1.67146, -1.22565, 0.0, 0.0}, /* Css */ + { 0.964641, 0.050527, -3.01966, 0.0, 0.0} /* Cab */ + }, { /* SB98-2b */ + { 0.770587, 0.180767, 0.955246, 0.0, 0.0}, /* X */ + { 0.170473, 1.24051, -0.862711, 0.0, 0.0}, /* Css */ + { 0.965362, 0.863300, -4.61778, 0.0, 0.0} /* Cab */ + }, { /* SB98-2c */ + { 0.790194, 0.400271, 0.832857, 0.0, 0.0}, /* X */ + {-0.120163, 2.82332, -2.59412, 0.0, 0.0}, /* Css */ + { 0.934715, 1.14105, -5.33398, 0.0, 0.0} /* Cab */ + }, { /* HCTH-A */ + { 1.09878, -2.51173, 0.0156233, 0.0, 0.0}, /* X */ + { 0.0136823, 0.268920, -0.550769, 1.03947, 0.0}, /* Css */ + { 0.836897, 1.72051, -2.78498, -4.57504, 0.0} /* Cab */ + }, { /* B97 GGA-1 */ + { 1.1068, -0.8765, 4.2639, 0.0, 0.0}, /* X */ + { 0.4883, -2.117, 2.3235, 0.0, 0.0}, /* Css */ + { 0.7961, 5.7060, -14.9820, 0.0, 0.0} /* Cab */ + }, { /* HCTH p=1/4 */ + { 1.03161, -0.360781, 3.51994, -4.95944, 2.41165}, /* X */ + { 2.82414, 0.0318843, -1.78512, 2.39795, -0.876909}, /* Css */ + { 0.0821827, 4.56466, -13.5529, 13.3820, -3.17493} /* Cab */ + }, { /* HCTH p=7/6 */ + { 1.16525, -0.583033, 2.51769, 3.81278, -5.45906}, /* X */ + {-3.92143, -1.10098, -0.0914050, -0.859723, 2.07184}, /* Css */ + { 0.192949, -5.73335, 50.8757, 135.475, 101.268} /* Cab */ + }, { /* HCTH 407p */ + { 1.08018, -0.4117, 2.4368, 1.3890, -1.3529}, /* X */ + { 0.80302, -1.0479, 4.9807, -12.890, 9.6446}, /* Css */ + { 0.73604, 3.0270, -10.075, 20.611, -29.418} /* Cab */ + }, { /* N12 */ + { 0.0, 0.0, 0.0, 0.0, 0.0}, /* X */ + { 1.00000e+00, 3.24511e+00, -2.52893e+01, 1.44407e+01, 1.96870e+01}, /* Css */ + { 1.00000e+00, -5.53170e+00, 3.07958e+01, -5.64196e+01, 3.21250e+01} /* Cab */ + }, { /* N12-SX */ + { 0.0, 0.0, 0.0, 0.0, 0.0}, /* X */ + { 8.33615e-01, 3.24128e+00, -1.06407e+01, -1.60471e+01, 2.51047e+01}, /* Css */ + { 2.63373e+00, -1.05450e+00, -7.29853e-01, 4.94024e+00, -7.31760e+00} /* Cab */ + }, +}; + +typedef struct{ + const FLOAT (*cc)[5]; +} gga_xc_b97_params; + + +static void +gga_xc_b97_init(XC(func_type) *p) +{ + gga_xc_b97_params *params; + + assert(p != NULL); + + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_LDA_C_PW, XC_POLARIZED); + + assert(p->params == NULL); + p->params = malloc(sizeof(gga_xc_b97_params)); + params = (gga_xc_b97_params *)(p->params); + + switch(p->info->number){ + case XC_GGA_XC_HCTH_93: p->func = 0; break; + case XC_GGA_XC_HCTH_120: p->func = 1; break; + case XC_GGA_XC_HCTH_147: p->func = 2; break; + case XC_GGA_XC_HCTH_407: p->func = 3; break; + case XC_GGA_XC_B97: p->func = 4; break; + case XC_GGA_XC_B97_1: p->func = 5; break; + case XC_GGA_XC_B97_2: p->func = 6; break; + case XC_GGA_XC_B97_D: p->func = 7; break; + case XC_GGA_XC_B97_K: p->func = 8; break; + case XC_GGA_XC_B97_3: p->func = 9; break; + case XC_GGA_XC_SB98_1a: p->func = 10; break; + case XC_GGA_XC_SB98_1b: p->func = 11; break; + case XC_GGA_XC_SB98_1c: p->func = 12; break; + case XC_GGA_XC_SB98_2a: p->func = 13; break; + case XC_GGA_XC_SB98_2b: p->func = 14; break; + case XC_GGA_XC_SB98_2c: p->func = 15; break; + case XC_GGA_XC_HCTH_A: p->func = 16; break; + case XC_GGA_XC_B97_GGA1: p->func = 17; break; + case XC_GGA_XC_HCTH_P14: p->func = 18; break; + case XC_GGA_XC_HCTH_P76: p->func = 19; break; + case XC_GGA_XC_HCTH_407P: p->func = 20; break; + case XC_GGA_C_N12: p->func = 21; break; + case XC_GGA_C_N12_SX: p->func = 22; break; + default: + fprintf(stderr, "Internal error in gga_b97\n"); + exit(1); + break; + } + + params->cc = b97_params[p->func]; +} + + +void +XC(mgga_b97_func_g)(const FLOAT *cc, FLOAT gamma, FLOAT s, int order, FLOAT *g, FLOAT *dgds, FLOAT *d2gds2) +{ + FLOAT s2, dd, x, dxds, d2xds2, dgdx, d2gdx2; + + s2 = s*s; + dd = 1.0 + gamma*s2; + x = gamma * s2/dd; + + *g = cc[0] + x*(cc[1] + x*(cc[2] + x*(cc[3] + x*cc[4]))); + + if(order < 1) return; + + dxds = gamma * 2.0*s/(dd*dd); + dgdx = cc[1] + x*(2.0*cc[2] + x*(3.0*cc[3] + x*4.0*cc[4])); + *dgds = dgdx*dxds; + + if(order < 2) return; + + d2gdx2 = 2.0*cc[2] + x*(6.0*cc[3] + x*12.0*cc[4]); + d2xds2 = 2.0*gamma*(1.0 - 3.0*gamma*s2)/(dd*dd*dd); + *d2gds2 = d2gdx2*dxds*dxds + dgdx*d2xds2; +} + + +static inline void +func(const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + static const FLOAT sign[2] = {1.0, -1.0}; + const FLOAT gamma[3] = {0.004, 0.2, 0.006}; + + XC(lda_work_t) LDA[3]; + const gga_xc_b97_params *params; + FLOAT cnst, ldax, x_avg; + FLOAT fx, dfxdx, d2fxdx2, fcpar, dfcpardx, d2fcpardx2, fcper, dfcperdx, d2fcperdx2; + FLOAT opz, opz13, dldaxdrs, dldaxdz, d2ldaxdrs2, d2ldaxdrsz, d2ldaxdz2, aux, aux12; + FLOAT dx_avgdxs[2], d2x_avgdxs2[3]; + int is, js; + + params = (gga_xc_b97_params *)(p->params); + + cnst = CBRT(4.0*M_PI/3.0); + + /* first we get the parallel and perpendicular LDAS */ + XC(lda_stoll) (p->func_aux[0], r->dens, r->zeta, r->order, LDA); + + /* initialize to zero */ + r->f = 0.0; + if(r->order >= 1){ + r->dfdrs = r->dfdz = r->dfdxs[0] = r->dfdxs[1] = r->dfdxt = 0.0; + } + if(r->order >= 2){ + r->d2fdrs2 = r->d2fdrsz = r->d2fdrsxt = r->d2fdrsxs[0] = r->d2fdrsxs[1] = 0.0; + r->d2fdz2 = r->d2fdzxt = r->d2fdzxs[0] = r->d2fdzxs[1] = r->d2fdxt2 = 0.0; + r->d2fdxtxs[0] = r->d2fdxtxs[1] = r->d2fdxs2[0] = r->d2fdxs2[1] = r->d2fdxs2[2] = 0.0; + } + + /* now we calculate the g functions for exchange and parallel correlation */ + for(is = 0; is < 2; is++){ + opz = 1.0 + sign[is]*r->zeta; + + if(r->dens*opz < 2.0*p->info->min_dens) continue; + + XC(mgga_b97_func_g)(params->cc[0], gamma[0], r->xs[is], r->order, &fx, &dfxdx, &d2fxdx2); + XC(mgga_b97_func_g)(params->cc[1], gamma[1], r->xs[is], r->order, &fcpar, &dfcpardx, &d2fcpardx2); + + opz13 = CBRT(opz); + + ldax = -X_FACTOR_C*opz*opz13/(2.0*M_CBRT2*cnst*r->rs); + + r->f += ldax*fx + LDA[is].zk*fcpar; + + if(r->order < 1) continue; + + dldaxdrs = -ldax/r->rs; + dldaxdz = sign[is]*4.0*ldax/(3.0*opz); + + r->dfdrs += dldaxdrs*fx + LDA[is].dedrs*fcpar; + r->dfdz += dldaxdz *fx + LDA[is].dedz *fcpar; + r->dfdxs[is] += ldax*dfxdx + LDA[is].zk*dfcpardx; + + if(r->order < 2) continue; + + js = (is == 0) ? 0 : 2; + + d2ldaxdrs2 = -2.0*dldaxdrs/r->rs; + d2ldaxdrsz = -dldaxdz/r->rs; + d2ldaxdz2 = sign[is]*dldaxdz/(3.0*opz); + + r->d2fdrs2 += d2ldaxdrs2*fx + LDA[is].d2edrs2*fcpar; + r->d2fdrsz += d2ldaxdrsz*fx + LDA[is].d2edrsz*fcpar; + r->d2fdrsxs[is] += dldaxdrs*dfxdx + LDA[is].dedrs*dfcpardx; + r->d2fdz2 += d2ldaxdz2*fx + LDA[is].d2edz2*fcpar; + r->d2fdzxs[is] += dldaxdz*dfxdx + LDA[is].dedz*dfcpardx; + r->d2fdxs2[js] += ldax*d2fxdx2 + LDA[is].zk*d2fcpardx2; + } + + /* and now we add the opposite-spin contribution */ + aux = r->xs[0]*r->xs[0] + r->xs[1]*r->xs[1]; + aux12 = SQRT(aux); + x_avg = aux12/M_SQRT2; + + XC(mgga_b97_func_g)(params->cc[2], gamma[2], x_avg, r->order, &fcper, &dfcperdx, &d2fcperdx2); + + r->f += LDA[2].zk*fcper; + + if(r->order < 1) return; + + dx_avgdxs[0] = r->xs[0]/(aux12*M_SQRT2); + dx_avgdxs[1] = r->xs[1]/(aux12*M_SQRT2); + + r->dfdrs += LDA[2].dedrs*fcper; + r->dfdz += LDA[2].dedz *fcper; + r->dfdxs[0] += LDA[2].zk*dfcperdx*dx_avgdxs[0]; + r->dfdxs[1] += LDA[2].zk*dfcperdx*dx_avgdxs[1]; + + if(r->order < 2) return; + + d2x_avgdxs2[0] = r->xs[1]*r->xs[1]/(aux*aux12*M_SQRT2); + d2x_avgdxs2[1] = -r->xs[0]*r->xs[1]/(aux*aux12*M_SQRT2); + d2x_avgdxs2[2] = r->xs[0]*r->xs[0]/(aux*aux12*M_SQRT2); + + r->d2fdrs2 += LDA[2].d2edrs2*fcper; + r->d2fdrsz += LDA[2].d2edrsz*fcper; + r->d2fdrsxs[0] += LDA[2].dedrs*dfcperdx*dx_avgdxs[0]; + r->d2fdrsxs[1] += LDA[2].dedrs*dfcperdx*dx_avgdxs[1]; + r->d2fdz2 += LDA[2].d2edz2*fcper; + r->d2fdzxs[0] += LDA[2].dedz*dfcperdx*dx_avgdxs[0]; + r->d2fdzxs[1] += LDA[2].dedz*dfcperdx*dx_avgdxs[1]; + r->d2fdxs2[0] += LDA[2].zk*(d2fcperdx2*dx_avgdxs[0]*dx_avgdxs[0] + dfcperdx*d2x_avgdxs2[0]); + r->d2fdxs2[1] += LDA[2].zk*(d2fcperdx2*dx_avgdxs[0]*dx_avgdxs[1] + dfcperdx*d2x_avgdxs2[1]); + r->d2fdxs2[2] += LDA[2].zk*(d2fcperdx2*dx_avgdxs[1]*dx_avgdxs[1] + dfcperdx*d2x_avgdxs2[2]); +} + + +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_xc_b97) = { + XC_GGA_XC_B97, + XC_EXCHANGE_CORRELATION, + "Becke 97", + XC_FAMILY_GGA, + "AD Becke, J. Chem. Phys. 107, 8554 (1997)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_b97_1) = { + XC_GGA_XC_B97_1, + XC_EXCHANGE_CORRELATION, + "Becke 97-1", + XC_FAMILY_GGA, + "FA Hamprecht, AJ Cohen, DJ Tozer, and NC Handy, J. Chem. Phys. 109, 6264 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_b97_2) = { + XC_GGA_XC_B97_2, + XC_EXCHANGE_CORRELATION, + "Becke 97-2", + XC_FAMILY_GGA, + "PJ Wilson, TJ Bradley, and DJ Tozer, J. Chem. Phys. 115, 9233 (2001)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_b97_d) = { + XC_GGA_XC_B97_D, + XC_EXCHANGE_CORRELATION, + "Becke 97-D", + XC_FAMILY_GGA, + "S Grimme, J. Comput. Chem. 27, 1787 (2006)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_b97_k) = { + XC_GGA_XC_B97_K, + XC_EXCHANGE_CORRELATION, + "Boese-Martin for Kinetics", + XC_FAMILY_GGA, + "AD Boese and JML Martin, J. Chem. Phys., Vol. 121, 3405 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_b97_3) = { + XC_GGA_XC_B97_3, + XC_EXCHANGE_CORRELATION, + "Becke 97-3", + XC_FAMILY_GGA, + "TW Keal and DJ Tozer, J. Chem. Phys. 123, 121103 (2005)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_hcth_93) = { + XC_GGA_XC_HCTH_93, + XC_EXCHANGE_CORRELATION, + "HCTH/93", + XC_FAMILY_GGA, + "FA Hamprecht, AJ Cohen, DJ Tozer, and NC Handy, J. Chem. Phys. 109, 6264 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_hcth_120) = { + XC_GGA_XC_HCTH_120, + XC_EXCHANGE_CORRELATION, + "HCTH/120", + XC_FAMILY_GGA, + "AD Boese, NL Doltsinis, NC Handy, and M Sprik, J. Chem. Phys. 112, 1670 (2000)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_hcth_147) = { + XC_GGA_XC_HCTH_147, + XC_EXCHANGE_CORRELATION, + "HCTH/147", + XC_FAMILY_GGA, + "AD Boese, NL Doltsinis, NC Handy, and M Sprik, J. Chem. Phys. 112, 1670 (2000)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_hcth_407) = { + XC_GGA_XC_HCTH_407, + XC_EXCHANGE_CORRELATION, + "HCTH/407", + XC_FAMILY_GGA, + "AD Boese and NC Handy, J. Chem. Phys. 114, 5497 (2001)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_sb98_1a) = { + XC_GGA_XC_SB98_1a, + XC_EXCHANGE_CORRELATION, + "SB98 (1a)", + XC_FAMILY_GGA, + "HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_sb98_1b) = { + XC_GGA_XC_SB98_1b, + XC_EXCHANGE_CORRELATION, + "SB98 (1b)", + XC_FAMILY_GGA, + "HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_sb98_1c) = { + XC_GGA_XC_SB98_1c, + XC_EXCHANGE_CORRELATION, + "SB98 (1c)", + XC_FAMILY_GGA, + "HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_sb98_2a) = { + XC_GGA_XC_SB98_2a, + XC_EXCHANGE_CORRELATION, + "SB98 (2a)", + XC_FAMILY_GGA, + "HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_sb98_2b) = { + XC_GGA_XC_SB98_2b, + XC_EXCHANGE_CORRELATION, + "SB98 (2b)", + XC_FAMILY_GGA, + "HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_sb98_2c) = { + XC_GGA_XC_SB98_2c, + XC_EXCHANGE_CORRELATION, + "SB98 (2c)", + XC_FAMILY_GGA, + "HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_hcth_a) = { + XC_GGA_XC_HCTH_A, + XC_EXCHANGE_CORRELATION, + "HCTH-A", + XC_FAMILY_GGA, + "FA Hamprecht, AJ Cohen, DJ Tozer, and NC Handy, J. Chem. Phys. 109, 6264 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_b97_gga1) = { + XC_GGA_XC_B97_GGA1, + XC_EXCHANGE_CORRELATION, + "Becke 97 GGA-1", + XC_FAMILY_GGA, + "AJ Cohen and NC Handy, Chem. Phys. Lett. 316, 160-166 (2000)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_hcth_p14) = { + XC_GGA_XC_HCTH_P14, + XC_EXCHANGE_CORRELATION, + "HCTH p=1/4", + XC_FAMILY_GGA, + "G Menconi, PJ Wilson, and DJ Tozer, J. Chem. Phys. 114, 3958 (2001)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_hcth_p76) = { + XC_GGA_XC_HCTH_P76, + XC_EXCHANGE_CORRELATION, + "HCTH p=1/4", + XC_FAMILY_GGA, + "G Menconi, PJ Wilson, and DJ Tozer, J. Chem. Phys. 114, 3958 (2001)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_hcth_407p) = { + XC_GGA_XC_HCTH_407P, + XC_EXCHANGE_CORRELATION, + "HCTH/407+", + XC_FAMILY_GGA, + "AD Boese, A Chandra, JML Martin, and Dominik Marx, J. Chem. Phys. 119, 5965 (2003)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +XC(func_info_type) XC(func_info_gga_c_n12) = { + XC_GGA_C_N12, + XC_CORRELATION, + "N12 functional of Minnesota", + XC_FAMILY_GGA, + "R Peverati and DG Truhlar, J. Chem. Theory Comput. 8, 2310-2319 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + gga_xc_b97_init, + NULL, NULL, + work_gga_c, + NULL +}; + +XC(func_info_type) XC(func_info_gga_c_n12_sx) = { + XC_GGA_C_N12_SX, + XC_CORRELATION, + "N12-SX functional of Minnesota", + XC_FAMILY_GGA, + "R Peverati and DG Truhlar, Phys. Chem. Chem. Phys. 14, 16187-16191 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + gga_xc_b97_init, + NULL, NULL, + work_gga_c, + NULL +}; + diff --git a/libxc-2.2.0/src/gga_xc_edf1.c b/libxc-2.2.0/src/gga_xc_edf1.c new file mode 100644 index 000000000..89fac1283 --- /dev/null +++ b/libxc-2.2.0/src/gga_xc_edf1.c @@ -0,0 +1,151 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_XC_EDF1 165 /* Empirical functionals from Adamson, Gill, and Pople */ +#define XC_GGA_X_OPTPBE_VDW 141 /* PBE reparametrization for vdW */ +#define XC_GGA_XC_MOHLYP 194 /* Functional for organometallic chemistry */ +#define XC_GGA_XC_MOHLYP2 195 /* Functional for barrier heights */ +#define XC_GGA_X_SOGGA 150 /* Second-order generalized gradient approximation */ + +static void +gga_xc_edf1_init(XC(func_type) *p) +{ + static int funcs_id [4] = {XC_LDA_X, XC_GGA_X_B88, XC_GGA_X_B88, XC_GGA_C_LYP}; + static FLOAT funcs_coef[4] = {1.030952 - 10.4017 + 8.44793, 10.4017, -8.44793, 1.0}; + + XC(mix_init)(p, 4, funcs_id, funcs_coef); + + XC(gga_x_b88_set_params)(p->func_aux[1], 0.0035, 6.0); + XC(gga_x_b88_set_params)(p->func_aux[2], 0.0042, 6.0); + XC(gga_c_lyp_set_params)(p->func_aux[3], 0.055, 0.158, 0.25, 0.3505); +} + +const XC(func_info_type) XC(func_info_gga_xc_edf1) = { + XC_GGA_XC_EDF1, + XC_EXCHANGE_CORRELATION, + "EDF1", + XC_FAMILY_GGA, + "RD Adamson, PMW Gill, and JA Pople, Chem. Phys. Lett. 284 6 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_edf1_init, + NULL, NULL, NULL, NULL +}; + + +static void +gga_x_optpbe_vdw_init(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_PBE, XC_GGA_X_RPBE}; + static FLOAT funcs_coef[2] = {1.0 - 0.054732, 0.054732}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + + XC(gga_x_pbe_set_params) (p->func_aux[0], 1.04804, 0.175519); + XC(gga_x_rpbe_set_params)(p->func_aux[1], 1.04804, 0.175519); +} + +const XC(func_info_type) XC(func_info_gga_x_optpbe_vdw) = { + XC_GGA_X_OPTPBE_VDW, + XC_EXCHANGE, + "Reparametrized PBE for vdW", + XC_FAMILY_GGA, + "J Klimes, DR Bowler, and A Michaelides, J. Phys.: Condens. Matter 22, 022201 (2010)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_optpbe_vdw_init, + NULL, NULL, NULL, NULL +}; + + +static void +gga_xc_mohlyp_init(XC(func_type) *p) +{ + static int funcs_id [3] = {XC_GGA_X_OPTX, XC_LDA_C_VWN, XC_GGA_C_LYP}; + static FLOAT funcs_coef[3] = {1.0, 0.5, 0.5}; + + XC(mix_init)(p, 3, funcs_id, funcs_coef); + + XC(gga_x_optx_set_params)(p->func_aux[0], 1.0, 1.292/X_FACTOR_C, 0.006); +} + +const XC(func_info_type) XC(func_info_gga_xc_mohlyp) = { + XC_GGA_XC_MOHLYP, + XC_EXCHANGE_CORRELATION, + "Functional for organometallic chemistry", + XC_FAMILY_GGA, + "NE Schultz, Y Zhao, DGJ Truhlar, Phys. Chem. A, 109, 11127 (2005)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_mohlyp_init, + NULL, NULL, NULL, NULL +}; + +static void +gga_xc_mohlyp2_init(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_OPTX, XC_GGA_C_LYP}; + static FLOAT funcs_coef[2] = {1.0, 0.5}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + + XC(gga_x_optx_set_params)(p->func_aux[0], 1.05151, 1.8497564/X_FACTOR_C, 0.006); +} + +const XC(func_info_type) XC(func_info_gga_xc_mohlyp2) = { + XC_GGA_XC_MOHLYP2, + XC_EXCHANGE_CORRELATION, + "Functional for barrier heights", + XC_FAMILY_GGA, + "J Zheng, Y Zhao, DGJ Truhlar, Chem. Theory. Comput. 5, 808 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_mohlyp2_init, + NULL, NULL, NULL, NULL +}; + +static void +gga_x_sogga_init(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_PBE, XC_GGA_X_RPBE}; + static FLOAT funcs_coef[2] = {0.5, 0.5}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + + XC(gga_x_pbe_set_params) (p->func_aux[0], 0.552, 10.0/81.0); + XC(gga_x_rpbe_set_params)(p->func_aux[1], 0.552, 10.0/81.0); +} + +const XC(func_info_type) XC(func_info_gga_x_sogga) = { + XC_GGA_X_SOGGA, + XC_EXCHANGE, + "Second-order generalized gradient approximation", + XC_FAMILY_GGA, + "Y Zhao and DG Truhlar, J. Chem. Phys. 128, 184109 (2008)\n" + "http://comp.chem.umn.edu/mfm/index.html", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-31, 1e-32, 0.0, 1e-32, + gga_x_sogga_init, + NULL, NULL, NULL, NULL +}; + diff --git a/libxc-2.2.0/src/gga_xc_oblyp_d.c b/libxc-2.2.0/src/gga_xc_oblyp_d.c new file mode 100644 index 000000000..1138c3bec --- /dev/null +++ b/libxc-2.2.0/src/gga_xc_oblyp_d.c @@ -0,0 +1,98 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_XC_OBLYP_D 67 /* oBLYP-D functional of Goerigk and Grimme */ +#define XC_GGA_XC_OPWLYP_D 66 /* oPWLYP-D functional of Goerigk and Grimme */ +#define XC_GGA_XC_OPBE_D 65 /* oPBE_D functional of Goerigk and Grimme */ + +static void +gga_xc_oblyp_d_init(XC(func_type) *p) +{ + static int funcs_id [4] = {XC_GGA_X_B88, XC_GGA_C_LYP}; + static FLOAT funcs_coef[4] = {1.0, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + XC(gga_x_b88_set_params)(p->func_aux[0], 0.00401, 6.0); + XC(gga_c_lyp_set_params)(p->func_aux[1], 0.05047, 0.140, 0.2196, 0.363); +} + +const XC(func_info_type) XC(func_info_gga_xc_oblyp_d) = { + XC_GGA_XC_OBLYP_D, + XC_EXCHANGE_CORRELATION, + "oBLYP-D functional of Goerigk and Grimme", + XC_FAMILY_GGA, + "L Goerigk and S Grimme, J. Chem. Theory Comput. 6, 107-126 (2010)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_oblyp_d_init, + NULL, NULL, NULL, NULL +}; + + +static void +gga_xc_opwlyp_d_init(XC(func_type) *p) +{ + static int funcs_id [4] = {XC_GGA_X_PW91, XC_GGA_C_LYP}; + static FLOAT funcs_coef[4] = {1.0, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + XC(gga_x_pw91_set_params2)(p->func_aux[0], 0.00402, 0.8894/(X2S*X2S), 0.79); + XC(gga_c_lyp_set_params)(p->func_aux[1], 0.04960, 0.144, 0.2262, 0.346); +} + +const XC(func_info_type) XC(func_info_gga_xc_opwlyp_d) = { + XC_GGA_XC_OPWLYP_D, + XC_EXCHANGE_CORRELATION, + "oPWLYP-D functional of Goerigk and Grimme", + XC_FAMILY_GGA, + "L Goerigk and S Grimme, J. Chem. Theory Comput. 6, 107-126 (2010)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_opwlyp_d_init, + NULL, NULL, NULL, NULL +}; + + +static void +gga_xc_opbe_d_init(XC(func_type) *p) +{ + static int funcs_id [4] = {XC_GGA_X_PBE, XC_GGA_C_PBE}; + static FLOAT funcs_coef[4] = {1.0, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + XC(gga_x_pbe_set_params)(p->func_aux[0], 1.2010, 0.21198); + XC(gga_c_pbe_set_params)(p->func_aux[1], 0.04636); +} + +const XC(func_info_type) XC(func_info_gga_xc_opbe_d) = { + XC_GGA_XC_OPBE_D, + XC_EXCHANGE_CORRELATION, + "oBLYP-D functional of Goerigk and Grimme", + XC_FAMILY_GGA, + "L Goerigk and S Grimme, J. Chem. Theory Comput. 6, 107-126 (2010)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_opbe_d_init, + NULL, NULL, NULL, NULL +}; + diff --git a/libxc-2.2.0/src/gga_xc_th.c b/libxc-2.2.0/src/gga_xc_th.c new file mode 100644 index 000000000..dfbd8b027 --- /dev/null +++ b/libxc-2.2.0/src/gga_xc_th.c @@ -0,0 +1,512 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +/* WARNING: These functionals should be checked!!! */ + +#define XC_GGA_XC_TH_FL 196 /* Tozer and Handy v. FL */ +#define XC_GGA_XC_TH_FC 197 /* Tozer and Handy v. FC */ +#define XC_GGA_XC_TH_FCFO 198 /* Tozer and Handy v. FCFO */ +#define XC_GGA_XC_TH_FCO 199 /* Tozer and Handy v. FCO */ +#define XC_GGA_XC_TH1 154 /* Tozer and Handy v. 1 */ +#define XC_GGA_XC_TH2 155 /* Tozer and Handy v. 2 */ +#define XC_GGA_XC_TH3 156 /* Tozer and Handy v. 3 */ +#define XC_GGA_XC_TH4 157 /* Tozer and Handy v. 4 */ + +typedef struct{ + int n, *b, *c, *d; + FLOAT *a, *omega; +} gga_xc_th_params; + + +/* parameters for TH_FL */ +static int n_TH_FL = 4; +static FLOAT omega_TH_FL[] = + {-0.106141e01, +0.898203e00, -0.134439e01, +0.302369e00}; + +/* parameters for TH_FC */ +static int n_TH_FC = 12; + +/* parameters for TH_FCFO */ +static int n_TH_FCFO = 20; +static FLOAT omega_TH_FCFO[] = + {-0.864448e+00, +0.565130e+00, -0.127306e+01, +0.309681e+00, -0.287658e+00, +0.588767e+00, + -0.252700e+00, +0.223563e-01, +0.140131e-01, -0.826608e-01, +0.556080e-01, -0.936227e-02, + -0.677146e-02, +0.515199e-01, -0.874213e-01, +0.423827e-01, +0.431940e+00, -0.691153e+00, + -0.637866e+00, +0.107565e+01}; + +/* parameters for TH_FCO */ +static int n_TH_FCO = 20; +static FLOAT omega_TH_FCO[] = + {-0.962998e+00, +0.860233e+00, -0.154092e+01, +0.381602e+00, -0.210208e+00, +0.391496e+00, + -0.107660e+00, -0.105324e-01, +0.837384e-02, -0.617859e-01, +0.383072e-01, -0.526905e-02, + -0.381514e-02, +0.321541e-01, -0.568280e-01, +0.288585e-01, +0.368326e+00, -0.328799e+00, + -0.122595e+01, +0.136412e+01}; + +/* parameters for TH1 */ +static int n_TH1 = 21; +static FLOAT a_TH1[] = + {7.0/6.0, 8.0/6.0, 9.0/6.0, 10.0/6.0, 8.0/6.0, 9.0/6.0, 10.0/6.0, + 11.0/6.0, 9.0/6.0, 10.0/6.0, 11.0/6.0, 12.0/6.0, 9.0/6.0, 10.0/6.0, + 11.0/6.0, 12.0/6.0, 7.0/6.0, 8.0/6.0, 9.0/6.0, 10.0/6.0, 1.0}; +static int b_TH1[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0}; +static int c_TH1[] = {0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static int d_TH1[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0}; +static FLOAT omega_TH1[] = + {-0.728255e+00, +0.331699e+00, -0.102946e+01, +0.235703e+00, -0.876221e-01, +0.140854e+00, + +0.336982e-01, -0.353615e-01, +0.497930e-02, -0.645900e-01, +0.461795e-01, -0.757191e-02, + -0.242717e-02, +0.428140e-01, -0.744891e-01, +0.386577e-01, -0.352519e+00, +0.219805e+01 + -0.372927e+01, +0.194441e+01, +0.128877e+00}; + +/* parameters for TH2 */ +static int n_TH2 = 19; +static FLOAT a_TH2[] = + {13.0/12.0, 7.0/6.0, 8.0/6.0, 9.0/6.0, 10.0/6.0, 17.0/12.0, 9.0/6.0, 10.0/6.0, + 11.0/6.0, 10.0/6.0, 11.0/6.0, 12.0/6.0, 10.0/6.0, 11.0/6.0, 12.0/6.0, 7.0/6.0, + 8.0/6.0, 9.0/6.0, 10.0/6.0}; +static int b_TH2[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1}; +static int c_TH2[] = {0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0}; +static int d_TH2[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}; +static FLOAT omega_TH2[] = + {+0.678831e+00, -0.175821e+01, +0.127676e+01, -0.160789e+01, +0.365610e+00, -0.181327e+00, + +0.146973e+00, +0.147141e+00, -0.716917e-01, -0.407167e-01, +0.214625e-01, -0.768156e-03, + +0.310377e-01, -0.720326e-01, +0.446562e-01, -0.266802e+00, +0.150822e+01, -0.194515e+01, + +0.679078e+00}; + +/* parameters for TH3 */ +static int n_TH3 = 19; +static FLOAT a_TH3[] = + {7.0/6.0, 8.0/6.0, 9.0/6.0, 10.0/6.0, 17.0/12.0, 9.0/6.0, 10.0/6.0, 11.0/6.0, + 10.0/6.0, 11.0/6.0, 12.0/6.0, 10.0/6.0, 11.0/6.0, 12.0/6.0, 7.0/6.0, 8.0/6.0, + 9.0/6.0, 10.0/6.0, 13.0/12.0}; +static int b_TH3[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0}; +static int c_TH3[] = {0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0}; +static int d_TH3[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0}; +static FLOAT omega_TH3[] = + {-0.142542e+00, -0.783603e+00, -0.188875e+00, +0.426830e-01, -0.304953e+00, +0.430407e+00, + -0.997699e-01, +0.355789e-02, -0.344374e-01, +0.192108e-01, -0.230906e-02, +0.235189e-01, + -0.331157e-01, +0.121316e-01, +0.441190e+00, -0.227167e+01, +0.403051e+01, -0.228074e+01, + +0.360204e-01}; + +/* parameters for TH4 */ +static int n_TH4 = 19; +static FLOAT omega_TH4[] = + {+0.677353e-01, -0.106763e+01, -0.419018e-01, +0.226313e-01, -0.222478e+00, +0.283432e+00, + -0.165089e-01, -0.167204e-01, -0.332362e-01, +0.162254e-01, -0.984119e-03, +0.376713e-01, + -0.653419e-01, +0.222835e-01, +0.375782e+00, -0.190675e+01, +0.322494e+01, -0.168698e+01, + -0.235810e-01}; + + +static void +gga_xc_th_init(XC(func_type) *p) +{ + gga_xc_th_params *params; + + assert(p->params == NULL); + p->params = (gga_xc_th_params *)malloc(sizeof(gga_xc_th_params)); + params = (gga_xc_th_params *)p->params; + + /* most functionals share the same a, b, c, d */ + params->a = a_TH1; + params->b = b_TH1; + params->c = c_TH1; + params->d = d_TH1; + + switch(p->info->number){ + case XC_GGA_XC_TH_FL: + p->func = 0; + params->n = n_TH_FL; + params->omega = omega_TH_FL; + break; + + case XC_GGA_XC_TH_FC: + p->func = 1; + params->n = n_TH_FC; + params->omega = omega_TH_FCFO; + break; + + case XC_GGA_XC_TH_FCFO: + p->func = 2; + params->n = n_TH_FCFO; + params->omega = omega_TH_FCFO; + break; + + case XC_GGA_XC_TH_FCO: + p->func = 3; + params->n = n_TH_FCO; + params->omega = omega_TH_FCO; + break; + + case XC_GGA_XC_TH1: + p->func = 4; + params->n = n_TH1; + params->omega = omega_TH1; + break; + + case XC_GGA_XC_TH2: + p->func = 5; + params->n = n_TH2; + params->a = a_TH2; + params->b = b_TH2; + params->c = c_TH2; + params->d = d_TH2; + params->omega = omega_TH2; + break; + + case XC_GGA_XC_TH3: + p->func = 6; + params->n = n_TH3; + params->a = a_TH3; + params->b = b_TH3; + params->c = c_TH3; + params->d = d_TH3; + params->omega = omega_TH3; + break; + + case XC_GGA_XC_TH4: + p->func = 7; + params->n = n_TH4; + params->a = a_TH3; + params->b = b_TH3; + params->c = c_TH3; + params->d = d_TH3; + params->omega = omega_TH4; + break; + + default: + fprintf(stderr, "Internal error in gga_xc_th\n"); + exit(1); + } +} + +static inline void +func(const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + gga_xc_th_params *params; + int ii; + FLOAT opz, omz, XX[2], YY; + FLOAT ddens, dXXdxs[2], dXXdz[2], dYYdxt; + FLOAT d2dens, d2XXdxs2[2], d2XXdzxs[2], d2YYdxt2; + + assert(p->params != NULL); + params = (gga_xc_th_params *) p->params; + + opz = 1.0 + r->zeta; + omz = 1.0 - r->zeta; + XX[0] = 0.5*r->xs[0]*opz; + XX[1] = 0.5*r->xs[1]*omz; + YY = 2.0*(XX[0] + XX[1]) - r->xt*r->xt; + + r->f = 0.0; + + if(r->order >= 1){ + ddens = -3.0*r->dens/r->rs; + dXXdxs[0] = 0.5*opz; + dXXdxs[1] = 0.5*omz; + dXXdz[0] = 0.5*r->xs[0]; + dXXdz[1] = -0.5*r->xs[1]; + dYYdxt = -2.0*r->xt; + + r->dfdrs = r->dfdz = r->dfdxt = r->dfdxs[0] = r->dfdxs[1] = 0.0; + } + + if(r->order >= 2){ + d2dens = -4.0*ddens/r->rs; + d2XXdzxs[0] = 0.5; + d2XXdzxs[1] = -0.5; + d2YYdxt2 = -2.0; + + r->d2fdrs2 = r->d2fdrsz = r->d2fdrsxt = r->d2fdrsxs[0] = r->d2fdrsxs[1] = 0.0; + r->d2fdz2 = r->d2fdzxt = r->d2fdzxs[0] = r->d2fdzxs[1] = 0.0; + r->d2fdxt2 = r->d2fdxtxs[0] = r->d2fdxtxs[1] = 0.0; + r->d2fdxs2[0] = r->d2fdxs2[1] = r->d2fdxs2[2] = 0.0; + } + + for(ii=0; iin; ii++){ + FLOAT fz[2], Rid, Ri, Si, Xi, Yi; + FLOAT dfz[2], dRidrs, dRidz, dSidz, dXidz, dXidxs[2], dYidz, dYidxs[2], dYidxt; + FLOAT d2fz[2], d2Ridrs2, d2Ridrsz, d2Ridz2, d2Sidz2, d2Xidz2, d2Xidxs2[2], d2Xidzxs[2], d2Yidxt2, d2Yidxs2[2], d2Yidzxs[2]; + + fz[0] = POW(opz, params->a[ii]); + fz[1] = POW(omz, params->a[ii]); + Rid = POW(r->dens/2.0, params->a[ii]); + Ri = Rid*(fz[0] + fz[1]); + + /* b = 0 || 1 */ + Si = (params->b[ii] == 0) ? 1.0 : r->zeta*r->zeta; + + /* c = 0 || 1 || 2 */ + switch(params->c[ii]){ + case 0: + Xi = 1.0; + break; + case 1: + Xi = 0.5*(XX[0] + XX[1]); + break; + case 2: + Xi = 0.5*(XX[0]*XX[0] + XX[1]*XX[1]); + break; + } + + /* d = 0 || 1 */ + Yi = (params->d[ii] == 0) ? 1.0 : YY; + + /* the parametrization in the paper is for the energy per volume */ + r->f += params->omega[ii]*Ri*Si*Xi*Yi/r->dens; + + if(r->order < 1) continue; + + if(params->a[ii] == 1.0){ + dfz[0] = 1.0; + dfz[1] = -1.0; + }else{ + dfz[0] = (ABS(opz) < p->info->min_zeta) ? 0.0 : params->a[ii]*fz[0]/opz; + dfz[1] = (ABS(omz) < p->info->min_zeta) ? 0.0 : -params->a[ii]*fz[1]/omz; + } + dRidrs = params->a[ii]*Ri*ddens/r->dens; + dRidz = Rid*(dfz[0] + dfz[1]); + + /* b = 0 || 1 */ + dSidz = (params->b[ii] == 0) ? 0.0 : 2.0*r->zeta; + + /* c = 0 || 1 || 2 */ + switch(params->c[ii]){ + case 0: + dXidz = dXidxs[0] = dXidxs[1] = 0.0; + break; + case 1: + dXidz = 0.5*(dXXdz[0] + dXXdz[1]); + dXidxs[0] = 0.5*dXXdxs[0]; + dXidxs[1] = 0.5*dXXdxs[1]; + break; + case 2: + dXidz = (XX[0]*dXXdz[0] + XX[1]*dXXdz[1]); + dXidxs[0] = XX[0]*dXXdxs[0]; + dXidxs[1] = XX[1]*dXXdxs[1]; + break; + } + + /* d = 0 || 1 */ + if(params->d[ii] == 0){ + dYidz = dYidxt = dYidxs[0] = dYidxs[1] = 0.0; + }else{ + dYidz = 2.0*(dXXdz[0] + dXXdz[1]); + dYidxt = dYYdxt; + dYidxs[0] = 2.0*dXXdxs[0]; + dYidxs[1] = 2.0*dXXdxs[1]; + } + + r->dfdrs += params->omega[ii]*(dRidrs - Ri*ddens/r->dens)*Si*Xi*Yi/r->dens; + r->dfdz += params->omega[ii]*(dRidz*Si*Xi*Yi + Ri*dSidz*Xi*Yi + Ri*Si*dXidz*Yi + Ri*Si*Xi*dYidz)/r->dens; + r->dfdxt += params->omega[ii]*Ri*Si*Xi*dYidxt/r->dens; + r->dfdxs[0] += params->omega[ii]*Ri*Si*(dXidxs[0]*Yi + Xi*dYidxs[0])/r->dens; + r->dfdxs[1] += params->omega[ii]*Ri*Si*(dXidxs[1]*Yi + Xi*dYidxs[1])/r->dens; + + if(r->order < 2) continue; + + if(params->a[ii] == 1.0){ + d2fz[0] = d2fz[1] = 0.0; + }else{ + d2fz[0] = (ABS(opz) < p->info->min_zeta) ? 0.0 : (params->a[ii] - 1.0)*dfz[0]/opz; + d2fz[1] = (ABS(omz) < p->info->min_zeta) ? 0.0 : -(params->a[ii] - 1.0)*dfz[1]/omz; + } + d2Ridrs2 = params->a[ii]/r->dens*(dRidrs*ddens + Ri*(d2dens - ddens*ddens/r->dens)); + d2Ridrsz = params->a[ii]*Rid*(ddens/r->dens)*(dfz[0] + dfz[1]); + d2Ridz2 = Rid*(d2fz[0] + d2fz[1]); + + /* b = 0 || 1 */ + d2Sidz2 = (params->b[ii] == 0) ? 0.0 : 2.0; + + /* c = 0 || 1 || 2 */ + switch(params->c[ii]){ + case 0: + d2Xidz2 = d2Xidxs2[0] = d2Xidxs2[1] = d2Xidzxs[0] = d2Xidzxs[1] = 0.0; + break; + case 1: + d2Xidz2 = d2Xidxs2[0] = d2Xidxs2[1] = 0.0; + d2Xidzxs[0] = 0.5*d2XXdzxs[0]; + d2Xidzxs[1] = 0.5*d2XXdzxs[1]; + d2Xidxs2[0] = 0.5*d2XXdxs2[0]; + d2Xidxs2[1] = 0.5*d2XXdxs2[1]; + break; + case 2: + d2Xidz2 = (dXXdz[0]*dXXdz[0] + dXXdz[1]*dXXdz[1]); + d2Xidxs2[0] = dXXdxs[0]*dXXdxs[0]; + d2Xidxs2[1] = dXXdxs[1]*dXXdxs[1]; + d2Xidzxs[0] = dXXdz[0]*dXXdxs[0] + XX[0]*d2XXdzxs[0]; + d2Xidzxs[1] = dXXdz[1]*dXXdxs[1] + XX[1]*d2XXdzxs[1]; + d2Xidxs2[0] = dXXdxs[0]*dXXdxs[0]; + d2Xidxs2[1] = dXXdxs[1]*dXXdxs[1]; + break; + } + + /* d = 0 || 1 */ + if(params->d[ii] == 0){ + d2Yidxt2 = d2Yidxs2[0] = d2Yidxs2[1] = d2Yidzxs[0] = d2Yidzxs[1] = 0.0; + }else{ + d2Yidxt2 = d2YYdxt2; + d2Yidxs2[0] = 2.0*d2XXdxs2[0]; + d2Yidxs2[1] = 2.0*d2XXdxs2[1]; + d2Yidzxs[0] = 2.0*d2XXdzxs[0]; + d2Yidzxs[1] = 2.0*d2XXdzxs[1]; + } + + r->d2fdrs2 += params->omega[ii]*(d2Ridrs2 - 2.0*dRidrs*ddens/r->dens - Ri*(d2dens - 2.0*ddens*ddens/r->dens)/r->dens)*Si*Xi*Yi/r->dens; + r->d2fdrsz += params->omega[ii]* + (- (dRidz*Si*Xi*Yi + Ri*dSidz*Xi*Yi + Ri*Si*dXidz*Yi + Ri*Si*Xi*dYidz)*ddens/r->dens + + (d2Ridrsz*Si*Xi*Yi + dRidrs*dSidz*Xi*Yi + dRidrs*Si*dXidz*Yi + dRidrs*Si*Xi*dYidz))/r->dens; + r->d2fdrsxt += params->omega[ii]*(dRidrs - Ri*ddens/r->dens)*Si*Xi*dYidxt/r->dens;; + r->d2fdrsxs[0] += params->omega[ii]*(dRidrs - Ri*ddens/r->dens)*Si*(dXidxs[0]*Yi + Xi*dYidxs[0])/r->dens; + r->d2fdrsxs[1] += params->omega[ii]*(dRidrs - Ri*ddens/r->dens)*Si*(dXidxs[1]*Yi + Xi*dYidxs[1])/r->dens; + r->d2fdz2 += params->omega[ii]* + (2.0*(dRidz*dSidz*Xi*Yi + dRidz*Si*dXidz*Yi + dRidz*Si*Xi*dYidz + Ri*dSidz*dXidz*Yi + Ri*dSidz*Xi*dYidz + Ri*Si*dXidz*dYidz) + + d2Ridz2*Si*Xi*Yi + Ri*d2Sidz2*Xi*Yi + Ri*Si*d2Xidz2*Yi)/r->dens; + r->d2fdzxt += params->omega[ii]*(dRidz*Si*Xi*dYidxt + Ri*dSidz*Xi*dYidxt + Ri*Si*dXidz*dYidxt)/r->dens; + r->d2fdzxs[0] += params->omega[ii]* + ((dRidz*Si + Ri*dSidz)*(dXidxs[0]*Yi + Xi*dYidxs[0]) + + Ri*Si*(d2Xidzxs[0]*Yi + dXidz*dYidxs[0] + dXidxs[0]*dYidz + Xi*d2Yidzxs[0]))/r->dens; + r->d2fdzxs[1] += params->omega[ii]* + ((dRidz*Si + Ri*dSidz)*(dXidxs[1]*Yi + Xi*dYidxs[1]) + + Ri*Si*(d2Xidzxs[1]*Yi + dXidz*dYidxs[1] + dXidxs[1]*dYidz + Xi*d2Yidzxs[1]))/r->dens; + r->d2fdxt2 += params->omega[ii]*Ri*Si*Xi*d2Yidxt2/r->dens; + r->d2fdxtxs[0] += params->omega[ii]*Ri*Si*dXidxs[0]*dYidxt/r->dens; + r->d2fdxtxs[1] += params->omega[ii]*Ri*Si*dXidxs[1]*dYidxt/r->dens; + r->d2fdxs2[0] += params->omega[ii]*Ri*Si*(d2Xidxs2[0]*Yi + 2.0*dXidxs[0]*dYidxs[0])/r->dens; + r->d2fdxs2[1] += 0.0; + r->d2fdxs2[2] += params->omega[ii]*Ri*Si*(d2Xidxs2[1]*Yi + 2.0*dXidxs[1]*dYidxs[1])/r->dens; + + } +} + +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_xc_th_fl) = { + XC_GGA_XC_TH_FL, + XC_EXCHANGE_CORRELATION, + "Tozer and Handy v. FL", + XC_FAMILY_GGA, + "DJ Tozer, NC Handy, amd WH Green, Chem. Phys. Lett. 273, 183-194 (1997)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_th_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_th_fc) = { + XC_GGA_XC_TH_FC, + XC_EXCHANGE_CORRELATION, + "Tozer and Handy v. FC", + XC_FAMILY_GGA, + "DJ Tozer, NC Handy, amd WH Green, Chem. Phys. Lett. 273, 183-194 (1997)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_th_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_th_fcfo) = { + XC_GGA_XC_TH_FCFO, + XC_EXCHANGE_CORRELATION, + "Tozer and Handy v. FCFO", + XC_FAMILY_GGA, + "DJ Tozer, NC Handy, amd WH Green, Chem. Phys. Lett. 273, 183-194 (1997)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_th_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_th_fco) = { + XC_GGA_XC_TH_FCO, + XC_EXCHANGE_CORRELATION, + "Tozer and Handy v. FCO", + XC_FAMILY_GGA, + "DJ Tozer, NC Handy, amd WH Green, Chem. Phys. Lett. 273, 183-194 (1997)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_th_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_th1) = { + XC_GGA_XC_TH1, + XC_EXCHANGE_CORRELATION, + "Tozer and Handy v. 1", + XC_FAMILY_GGA, + "DJ Tozer and NC Handy, J. Chem. Phys. 108, 2545 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_th_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_th2) = { + XC_GGA_XC_TH2, + XC_EXCHANGE_CORRELATION, + "Tozer and Handy v. 2", + XC_FAMILY_GGA, + "DJ Tozer and NC Handy, J. Phys. Chem. A 102, 3162 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_th_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_th3) = { + XC_GGA_XC_TH3, + XC_EXCHANGE_CORRELATION, + "Tozer and Handy v. 3", + XC_FAMILY_GGA, + "DJ Tozer and NC Handy, Mol. Phys. 94, 707 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_th_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_th4) = { + XC_GGA_XC_TH4, + XC_EXCHANGE_CORRELATION, + "Tozer and Handy v. 4", + XC_FAMILY_GGA, + "DJ Tozer and NC Handy, Mol. Phys. 94, 707 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_th_init, + NULL, NULL, + work_gga_c, + NULL +}; diff --git a/libxc-2.2.0/src/hyb_gga_xc_b1wc.c b/libxc-2.2.0/src/hyb_gga_xc_b1wc.c new file mode 100644 index 000000000..e74201cc6 --- /dev/null +++ b/libxc-2.2.0/src/hyb_gga_xc_b1wc.c @@ -0,0 +1,214 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_HYB_GGA_XC_B1WC 412 /* Becke 1-parameter mixture of WC and PBE */ +#define XC_HYB_GGA_XC_B1LYP 416 /* Becke 1-parameter mixture of B88 and LYP */ +#define XC_HYB_GGA_XC_B1PW91 417 /* Becke 1-parameter mixture of B88 and PW91 */ +#define XC_HYB_GGA_XC_mPW1PW 418 /* Becke 1-parameter mixture of mPW91 and PW91 */ +#define XC_HYB_GGA_XC_mPW1K 405 /* mixture of mPW91 and PW91 optimized for kinetics */ +#define XC_HYB_GGA_XC_BHANDH 435 /* Becke half-and-half */ +#define XC_HYB_GGA_XC_BHANDHLYP 436 /* Becke half-and-half with B88 exchange */ +#define XC_HYB_GGA_XC_MPWLYP1M 453 /* MPW with 1 par. for metals/LYP */ + +void +XC(hyb_gga_xc_b1wc_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_WC, XC_GGA_C_PBE}; + static FLOAT funcs_coef[2] = {1.0 - 0.16, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.16; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_b1wc) = { + XC_HYB_GGA_XC_B1WC, + XC_EXCHANGE_CORRELATION, + "B1WC", + XC_FAMILY_HYB_GGA, + "DI Bilc, R Orlando, R Shaltaf, G-M Rignanese, J Iniguez, and Ph Ghosez, Phys. Rev. B 77, 165107 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_b1wc_init), + NULL, NULL, NULL, NULL +}; + + +void +XC(hyb_gga_xc_b1lyp_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_B88, XC_GGA_C_LYP}; + static FLOAT funcs_coef[2] = {1.0 - 0.25, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.25; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_b1lyp) = { + XC_HYB_GGA_XC_B1LYP, + XC_EXCHANGE_CORRELATION, + "B1LYP", + XC_FAMILY_HYB_GGA, + "C. Adamo, V. Barone, Chem. Phys. Lett. 274, 242 (1997)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_b1lyp_init), + NULL, NULL, NULL, NULL +}; + + +void +XC(hyb_gga_xc_b1pw91_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_B88, XC_GGA_C_PW91}; + static FLOAT funcs_coef[2] = {1.0 - 0.25, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.25; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_b1pw91) = { + XC_HYB_GGA_XC_B1PW91, + XC_EXCHANGE_CORRELATION, + "B1PW91", + XC_FAMILY_HYB_GGA, + "C. Adamo, V. Barone, Chem. Phys. Lett. 274, 242 (1997)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_b1pw91_init), + NULL, NULL, NULL, NULL +}; + + +void +XC(hyb_gga_xc_mpw1pw_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_MPW91, XC_GGA_C_PW91}; + static FLOAT funcs_coef[2] = {1.0 - 0.25, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.25; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_mpw1pw) = { + XC_HYB_GGA_XC_mPW1PW, + XC_EXCHANGE_CORRELATION, + "mPW1PW", + XC_FAMILY_HYB_GGA, + "C. Adamo, V. Barone, J. Chem. Phys. 108, 664 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_mpw1pw_init), + NULL, NULL, NULL, NULL +}; + + +void +XC(hyb_gga_xc_mpw1k_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_MPW91, XC_GGA_C_PW91}; + static FLOAT funcs_coef[2] = {1.0 - 0.428, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.428; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_mpw1k) = { + XC_HYB_GGA_XC_mPW1K, + XC_EXCHANGE_CORRELATION, + "mPW1K", + XC_FAMILY_HYB_GGA, + "BJ Lynch, PL Fast, M Harris, DGJ Truhlar, Phys. Chem. A 104, 4811 (2000)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_mpw1k_init), + NULL, NULL, NULL, NULL +}; + + +void +XC(hyb_gga_xc_bhandh_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_LDA_X, XC_GGA_C_LYP}; + static FLOAT funcs_coef[2] = {0.5, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.5; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_bhandh) = { + XC_HYB_GGA_XC_BHANDH, + XC_EXCHANGE_CORRELATION, + "BHandH", + XC_FAMILY_HYB_GGA, + "AD Becke, J. Chem. Phys., 98 1372-77 (1993)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_bhandh_init), + NULL, NULL, NULL, NULL +}; + + +void +XC(hyb_gga_xc_bhandhlyp_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_B88, XC_GGA_C_LYP}; + static FLOAT funcs_coef[2] = {0.5, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.5; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_bhandhlyp) = { + XC_HYB_GGA_XC_BHANDHLYP, + XC_EXCHANGE_CORRELATION, + "BHandHLYP", + XC_FAMILY_HYB_GGA, + "AD Becke, J. Chem. Phys., 98 1372-77 (1993)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_bhandhlyp_init), + NULL, NULL, NULL, NULL +}; + + +void +XC(hyb_gga_xc_mpwlyp1m_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_MPW91, XC_GGA_C_LYP}; + static FLOAT funcs_coef[2] = {1.0 - 0.05, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.05; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_mpwlyp1m) = { + XC_HYB_GGA_XC_MPWLYP1M, + XC_EXCHANGE_CORRELATION, + "MPW with 1 par. for metals/LYP", + XC_FAMILY_HYB_GGA, + "NE Schultz, Y Zhao, and DG Truhlar, J. Phys. Chem. A 109, 11127-11143 (2005)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_mpwlyp1m_init), + NULL, NULL, NULL, NULL +}; diff --git a/libxc-2.2.0/src/hyb_gga_xc_b3lyp.c b/libxc-2.2.0/src/hyb_gga_xc_b3lyp.c new file mode 100644 index 000000000..8a40cf6f4 --- /dev/null +++ b/libxc-2.2.0/src/hyb_gga_xc_b3lyp.c @@ -0,0 +1,196 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_HYB_GGA_XC_B3PW91 401 /* The original (ACM) hybrid of Becke */ +#define XC_HYB_GGA_XC_B3LYP 402 /* The (in)famous B3LYP */ +#define XC_HYB_GGA_XC_B3P86 403 /* Perdew 86 hybrid similar to B3PW91 */ +#define XC_HYB_GGA_XC_MPW3PW 415 /* mixture with the mPW functional */ +#define XC_HYB_GGA_XC_MPW3LYP 419 /* mixture of mPW and LYP */ +#define XC_HYB_GGA_XC_MB3LYP_RC04 437 /* B3LYP with RC04 LDA */ +#define XC_HYB_GGA_XC_REVB3LYP 454 /* Revised B3LYP */ + +/*************************************************************/ +void +XC(hyb_gga_xc_b3pw91_init)(XC(func_type) *p) +{ + static int funcs_id [4] = {XC_LDA_X, XC_GGA_X_B88, XC_LDA_C_PW, XC_GGA_C_PW91}; + static FLOAT funcs_coef[4] = {1.0 - 0.20 - 0.72, 0.72, 1.0 - 0.81, 0.81}; + + XC(mix_init)(p, 4, funcs_id, funcs_coef); + p->cam_alpha = 0.20; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_b3pw91) = { + XC_HYB_GGA_XC_B3PW91, + XC_EXCHANGE_CORRELATION, + "The original (ACM, B3PW91) hybrid of Becke", + XC_FAMILY_HYB_GGA, + "AD Becke, J. Chem. Phys. 98, 5648 (1993)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_b3pw91_init), + NULL, NULL, NULL, NULL +}; + + +/*************************************************************/ +void +XC(hyb_gga_xc_b3lyp_init)(XC(func_type) *p) +{ + static int funcs_id [4] = {XC_LDA_X, XC_GGA_X_B88, XC_LDA_C_VWN_RPA, XC_GGA_C_LYP}; + static FLOAT funcs_coef[4] = {1.0 - 0.20 - 0.72, 0.72, 1.0 - 0.81, 0.81}; + + XC(mix_init)(p, 4, funcs_id, funcs_coef); + p->cam_alpha = 0.20; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_b3lyp) = { + XC_HYB_GGA_XC_B3LYP, + XC_EXCHANGE_CORRELATION, + "B3LYP", + XC_FAMILY_HYB_GGA, + "PJ Stephens, FJ Devlin, CF Chabalowski, MJ Frisch, J. Phys. Chem. 98 11623 (1994)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_b3lyp_init), + NULL, NULL, NULL, NULL +}; + + +/*************************************************************/ +void +XC(hyb_gga_xc_b3p86_init)(XC(func_type) *p) +{ + static int funcs_id [4] = {XC_LDA_X, XC_GGA_X_B88, XC_LDA_C_VWN_RPA, XC_GGA_C_P86}; + static FLOAT funcs_coef[4] = {1.0 - 0.20 - 0.72, 0.72, 1.0 - 0.81, 0.81}; + + XC(mix_init)(p, 4, funcs_id, funcs_coef); + p->cam_alpha = 0.20; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_b3p86) = { + XC_HYB_GGA_XC_B3P86, + XC_EXCHANGE_CORRELATION, + "B3P86", + XC_FAMILY_HYB_GGA, + "Defined through Gaussian implementation", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_b3p86_init), + NULL, NULL, NULL, NULL +}; + + +/*************************************************************/ +void +XC(hyb_gga_xc_mpw3pw_init)(XC(func_type) *p) +{ + static int funcs_id [4] = {XC_LDA_X, XC_GGA_X_MPW91, XC_LDA_C_VWN_RPA, XC_GGA_C_PW91}; + static FLOAT funcs_coef[4] = {1.0 - 0.20 - 0.72, 0.72, 1.0 - 0.81, 0.81}; + + XC(mix_init)(p, 4, funcs_id, funcs_coef); + p->cam_alpha = 0.20; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_mpw3pw) = { + XC_HYB_GGA_XC_MPW3PW, + XC_EXCHANGE_CORRELATION, + "MPW3PW of Adamo & Barone", + XC_FAMILY_HYB_GGA, + "C Adamo and V Barone, J. Chem. Phys. 108, 664 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_mpw3pw_init), + NULL, NULL, NULL, NULL +}; + + +/*************************************************************/ +void +XC(hyb_gga_xc_mpw3lyp_init)(XC(func_type) *p) +{ + static int funcs_id [4] = {XC_LDA_X, XC_GGA_X_MPW91, XC_LDA_C_VWN_RPA, XC_GGA_C_LYP}; + static FLOAT funcs_coef[4] = {1.0 - 0.218 - 0.709, 0.709, 1.0 - 0.871, 0.871}; + + XC(mix_init)(p, 4, funcs_id, funcs_coef); + p->cam_alpha = 0.218; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_mpw3lyp) = { + XC_HYB_GGA_XC_MPW3LYP, + XC_EXCHANGE_CORRELATION, + "MPW3LYP", + XC_FAMILY_HYB_GGA, + "Y Zhao and DGJ Truhlar, Phys. Chem. A 108, 6908-6918 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_mpw3lyp_init), + NULL, NULL, NULL, NULL +}; + + +/*************************************************************/ +void +XC(hyb_gga_xc_mb3lyp_rc04_init)(XC(func_type) *p) +{ + static int funcs_id [4] = {XC_LDA_X, XC_GGA_X_B88, XC_LDA_C_RC04, XC_GGA_C_LYP}; + static FLOAT funcs_coef[4] = {1.0 - 0.20 - 0.72, 0.72, 1.0 - 0.57*0.81, 0.81}; + + XC(mix_init)(p, 4, funcs_id, funcs_coef); + p->cam_alpha = 0.20; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_mb3lyp_rc04) = { + XC_HYB_GGA_XC_MB3LYP_RC04, + XC_EXCHANGE_CORRELATION, + "B3LYP with RC04 LDA", + XC_FAMILY_HYB_GGA, + "V Tognetti, P Cortona, and C Adamo, Chem. Phys. Lett. 439, 381-385 (2007)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_mb3lyp_rc04_init), + NULL, NULL, NULL, NULL +}; + +/*************************************************************/ +void +XC(hyb_gga_xc_revb3lyp_init)(XC(func_type) *p) +{ + static int funcs_id [4] = {XC_LDA_X, XC_GGA_X_B88, XC_LDA_C_VWN_RPA, XC_GGA_C_LYP}; + static FLOAT funcs_coef[4] = {1.0 - 0.20 - 0.67, 0.67, 1.0 - 0.84, 0.84}; + + XC(mix_init)(p, 4, funcs_id, funcs_coef); + p->cam_alpha = 0.20; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_revb3lyp) = { + XC_HYB_GGA_XC_REVB3LYP, + XC_EXCHANGE_CORRELATION, + "Revised B3LYP", + XC_FAMILY_HYB_GGA, + "L Lua, H Hua, H Houa, B Wang, Comput. Theor. Chem. 1015, 64-71 (2013)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_revb3lyp_init), + NULL, NULL, NULL, NULL +}; diff --git a/libxc-2.2.0/src/hyb_gga_xc_b97.c b/libxc-2.2.0/src/hyb_gga_xc_b97.c new file mode 100644 index 000000000..a39277d3d --- /dev/null +++ b/libxc-2.2.0/src/hyb_gga_xc_b97.c @@ -0,0 +1,209 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_HYB_GGA_XC_B97 407 /* Becke 97 */ +#define XC_HYB_GGA_XC_B97_1 408 /* Becke 97-1 */ +#define XC_HYB_GGA_XC_B97_2 410 /* Becke 97-2 */ +#define XC_HYB_GGA_XC_B97_K 413 /* Boese-Martin for Kinetics */ +#define XC_HYB_GGA_XC_B97_3 414 /* Becke 97-3 */ +#define XC_HYB_GGA_XC_SB98_1a 420 /* Schmider-Becke 98 parameterization 1a */ +#define XC_HYB_GGA_XC_SB98_1b 421 /* Schmider-Becke 98 parameterization 1b */ +#define XC_HYB_GGA_XC_SB98_1c 422 /* Schmider-Becke 98 parameterization 1c */ +#define XC_HYB_GGA_XC_SB98_2a 423 /* Schmider-Becke 98 parameterization 2a */ +#define XC_HYB_GGA_XC_SB98_2b 424 /* Schmider-Becke 98 parameterization 2b */ +#define XC_HYB_GGA_XC_SB98_2c 425 /* Schmider-Becke 98 parameterization 2c */ + +static void +hyb_gga_xc_b97_init(XC(func_type) *p) +{ + const struct { int iGGA; FLOAT a0; } par[] = { + {XC_GGA_XC_B97, 0.1943}, + {XC_GGA_XC_B97_1, 0.21}, + {XC_GGA_XC_B97_2, 0.21}, + {XC_GGA_XC_B97_K, 0.42}, + {XC_GGA_XC_B97_3, 2.692880E-01}, + {XC_GGA_XC_SB98_1a, 0.229015}, + {XC_GGA_XC_SB98_1b, 0.199352}, + {XC_GGA_XC_SB98_1c, 0.192416}, + {XC_GGA_XC_SB98_2a, 0.232055}, + {XC_GGA_XC_SB98_2b, 0.237978}, + {XC_GGA_XC_SB98_2c, 0.219847}, + }; + + int func; + FLOAT one = 1.0; + + switch(p->info->number){ + case XC_HYB_GGA_XC_B97: func = 0; break; + case XC_HYB_GGA_XC_B97_1: func = 1; break; + case XC_HYB_GGA_XC_B97_2: func = 2; break; + case XC_HYB_GGA_XC_B97_K: func = 3; break; + case XC_HYB_GGA_XC_B97_3: func = 4; break; + case XC_HYB_GGA_XC_SB98_1a: func = 5; break; + case XC_HYB_GGA_XC_SB98_1b: func = 6; break; + case XC_HYB_GGA_XC_SB98_1c: func = 7; break; + case XC_HYB_GGA_XC_SB98_2a: func = 8; break; + case XC_HYB_GGA_XC_SB98_2b: func = 9; break; + case XC_HYB_GGA_XC_SB98_2c: func = 10; break; + default: + fprintf(stderr, "Internal error in hyb_gga_xc_b97_init\n"); + exit(1); + break; + } + + XC(mix_init)(p, 1, &(par[func].iGGA), &one); + p->cam_alpha = par[func].a0; +} + + +const XC(func_info_type) XC(func_info_hyb_gga_xc_b97) = { + XC_HYB_GGA_XC_B97, + XC_EXCHANGE_CORRELATION, + "Becke 97", + XC_FAMILY_HYB_GGA, + "AD Becke, J. Chem. Phys. 107, 8554 (1997)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_b97_init, + NULL, NULL, NULL, NULL /* this is taken care by the generic routine */ +}; + +const XC(func_info_type) XC(func_info_hyb_gga_xc_b97_1) = { + XC_HYB_GGA_XC_B97_1, + XC_EXCHANGE_CORRELATION, + "Becke 97-1", + XC_FAMILY_HYB_GGA, + "FA Hamprecht, AJ Cohen, DJ Tozer, and NC Handy, J. Chem. Phys. 109, 6264 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_b97_init, + NULL, NULL, NULL, NULL +}; + +const XC(func_info_type) XC(func_info_hyb_gga_xc_b97_2) = { + XC_HYB_GGA_XC_B97_2, + XC_EXCHANGE_CORRELATION, + "Becke 97-2", + XC_FAMILY_HYB_GGA, + "PJ Wilson, TJ Bradley, and DJ Tozer, J. Chem. Phys. 115, 9233 (2001)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_b97_init, + NULL, NULL, NULL, NULL +}; + +const XC(func_info_type) XC(func_info_hyb_gga_xc_b97_k) = { + XC_HYB_GGA_XC_B97_K, + XC_EXCHANGE_CORRELATION, + "Boese-Martin for Kinetics", + XC_FAMILY_HYB_GGA, + "AD Boese and JML Martin, J. Chem. Phys., Vol. 121, 3405 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_b97_init, + NULL, NULL, NULL, NULL +}; + +const XC(func_info_type) XC(func_info_hyb_gga_xc_b97_3) = { + XC_HYB_GGA_XC_B97_3, + XC_EXCHANGE_CORRELATION, + "Becke 97-3", + XC_FAMILY_HYB_GGA, + "TW Keal and DJ Tozer, J. Chem. Phys. 123, 121103 (2005)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_b97_init, + NULL, NULL, NULL, NULL +}; + +const XC(func_info_type) XC(func_info_hyb_gga_xc_sb98_1a) = { + XC_HYB_GGA_XC_SB98_1a, + XC_EXCHANGE_CORRELATION, + "SB98 (1a)", + XC_FAMILY_HYB_GGA, + "HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_b97_init, + NULL, NULL, NULL, NULL +}; + +const XC(func_info_type) XC(func_info_hyb_gga_xc_sb98_1b) = { + XC_HYB_GGA_XC_SB98_1b, + XC_EXCHANGE_CORRELATION, + "SB98 (1b)", + XC_FAMILY_HYB_GGA, + "HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_b97_init, + NULL, NULL, NULL, NULL +}; + +const XC(func_info_type) XC(func_info_hyb_gga_xc_sb98_1c) = { + XC_HYB_GGA_XC_SB98_1c, + XC_EXCHANGE_CORRELATION, + "SB98 (1c)", + XC_FAMILY_HYB_GGA, + "HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_b97_init, + NULL, NULL, NULL, NULL +}; + +const XC(func_info_type) XC(func_info_hyb_gga_xc_sb98_2a) = { + XC_HYB_GGA_XC_SB98_2a, + XC_EXCHANGE_CORRELATION, + "SB98 (2a)", + XC_FAMILY_HYB_GGA, + "HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_b97_init, + NULL, NULL, NULL, NULL +}; + +const XC(func_info_type) XC(func_info_hyb_gga_xc_sb98_2b) = { + XC_HYB_GGA_XC_SB98_2b, + XC_EXCHANGE_CORRELATION, + "SB98 (2b)", + XC_FAMILY_HYB_GGA, + "HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_b97_init, + NULL, NULL, NULL, NULL +}; + +const XC(func_info_type) XC(func_info_hyb_gga_xc_sb98_2c) = { + XC_HYB_GGA_XC_SB98_2c, + XC_EXCHANGE_CORRELATION, + "SB98 (2c)", + XC_FAMILY_HYB_GGA, + "HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_b97_init, + NULL, NULL, NULL, NULL +}; diff --git a/libxc-2.2.0/src/hyb_gga_xc_cam_b3lyp.c b/libxc-2.2.0/src/hyb_gga_xc_cam_b3lyp.c new file mode 100644 index 000000000..36fcef331 --- /dev/null +++ b/libxc-2.2.0/src/hyb_gga_xc_cam_b3lyp.c @@ -0,0 +1,80 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_HYB_GGA_XC_CAM_B3LYP 433 /* CAM version of B3LYP */ +#define XC_HYB_GGA_XC_TUNED_CAM_B3LYP 434 /* CAM version of B3LYP tunes for excitations*/ + +void +XC(hyb_gga_xc_cam_b3lyp_init)(XC(func_type) *p) +{ + static FLOAT ac = 0.81; + static int funcs_id [4] = {XC_GGA_X_B88, XC_GGA_X_ITYH, XC_LDA_C_VWN, XC_GGA_C_LYP}; + static FLOAT funcs_coef[4]; + + switch(p->info->number){ + case XC_HYB_GGA_XC_CAM_B3LYP: + p->cam_omega = 0.33; + p->cam_alpha = 0.19; + p->cam_beta = 0.46; + break; + case XC_HYB_GGA_XC_TUNED_CAM_B3LYP: + p->cam_omega = 0.150; + p->cam_alpha = 0.0799; + p->cam_beta = 0.9201; + break; + } + + funcs_coef[0] = 1.0 - p->cam_alpha - p->cam_beta; + funcs_coef[1] = p->cam_beta; + funcs_coef[2] = 1.0 - ac; + funcs_coef[3] = ac; + + XC(mix_init)(p, 4, funcs_id, funcs_coef); + + XC(gga_x_ityh_set_params)(p->func_aux[1], XC_GGA_X_B88, p->cam_omega); +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_cam_b3lyp) = { + XC_HYB_GGA_XC_CAM_B3LYP, + XC_EXCHANGE_CORRELATION, + "CAM version of B3LYP", + XC_FAMILY_HYB_GGA, + "T Yanai, DP Tew, NC Handy, Chem. Phys. Lett. 393, 51-57 (2004)", + XC_FLAGS_3D | XC_FLAGS_HYB_CAM | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_cam_b3lyp_init), + NULL, NULL, NULL, NULL +}; + + +const XC(func_info_type) XC(func_info_hyb_gga_xc_tuned_cam_b3lyp) = { + XC_HYB_GGA_XC_TUNED_CAM_B3LYP, + XC_EXCHANGE_CORRELATION, + "CAM version of B3LYP", + XC_FAMILY_HYB_GGA, + "K Okuno, Y Shigeta, R Kishi, H Miyasaka, M Nakano, J. Photochem. Photobiol., A 235, 29-34 (2012)", + XC_FLAGS_3D | XC_FLAGS_HYB_CAM | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_cam_b3lyp_init), + NULL, NULL, NULL, NULL +}; diff --git a/libxc-2.2.0/src/hyb_gga_xc_camy_blyp.c b/libxc-2.2.0/src/hyb_gga_xc_camy_blyp.c new file mode 100644 index 000000000..ccd17b858 --- /dev/null +++ b/libxc-2.2.0/src/hyb_gga_xc_camy_blyp.c @@ -0,0 +1,58 @@ +/* + Copyright (C) 2013 Rolf Wuerdemann, M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_HYB_GGA_XC_CAMY_BLYP 455 /* BLYP with yukawa screening */ + +void +XC(hyb_gga_xc_camy_blyp_init)(XC(func_type) *p) +{ + static int funcs_id [3] = {XC_GGA_X_B88, XC_GGA_X_SFAT, XC_GGA_C_LYP}; + static FLOAT funcs_coef[3]; + + p->cam_alpha = 0.20; + p->cam_beta = 0.80; + p->cam_omega = 0.44; /* we use omega for gamma here, 'cause + both denote dampening parameters for + range related interactions */ + + funcs_coef[0] = 1.0 - p->cam_alpha - p->cam_beta; + funcs_coef[1] = p->cam_beta; /* 1.0 - p->cam_alpha - p->cam_beta? */ + funcs_coef[2] = 1.0; + + XC(mix_init)(p, 3, funcs_id, funcs_coef); + + XC(gga_x_sfat_set_params)(p->func_aux[1], XC_GGA_X_B88, p->cam_omega); +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_camy_blyp) = { + XC_HYB_GGA_XC_CAMY_BLYP, + XC_EXCHANGE_CORRELATION, + "CAMY version of BLYP", + XC_FAMILY_HYB_GGA, + "Y Akinaga, S Ten-no, Chem. Phys. Lett. 462, 348-351 (2008)", + XC_FLAGS_3D | XC_FLAGS_HYB_CAM | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_camy_blyp_init), + NULL, NULL, NULL, NULL +}; + diff --git a/libxc-2.2.0/src/hyb_gga_xc_hse.c b/libxc-2.2.0/src/hyb_gga_xc_hse.c new file mode 100644 index 000000000..7edc9031a --- /dev/null +++ b/libxc-2.2.0/src/hyb_gga_xc_hse.c @@ -0,0 +1,195 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_HYB_GGA_XC_HSE03 427 /* the 2003 version of the screened hybrid HSE */ +#define XC_HYB_GGA_XC_HSE06 428 /* the 2006 version of the screened hybrid HSE */ +#define XC_HYB_GGA_XC_HJS_PBE 429 /* HJS hybrid screened exchange PBE version */ +#define XC_HYB_GGA_XC_HJS_PBE_SOL 430 /* HJS hybrid screened exchange PBE_SOL version */ +#define XC_HYB_GGA_XC_HJS_B88 431 /* HJS hybrid screened exchange B88 version */ +#define XC_HYB_GGA_XC_HJS_B97X 432 /* HJS hybrid screened exchange B97x version */ + +static void +hyb_gga_xc_hse_init(XC(func_type) *p) +{ + static int funcs_id [3] = {XC_GGA_X_WPBEH, XC_GGA_X_WPBEH, XC_GGA_C_PBE}; + static FLOAT funcs_coef[3] = {1.0, -0.25, 1.0}; + + XC(mix_init)(p, 3, funcs_id, funcs_coef); + + /* Note that there is an enormous mess in the literature concerning + the values of omega in HSE. This is due to an error in the + original paper that stated that they had used omega=0.15. This + was in fact not true, and the real value used was omega^HF = + 0.15/sqrt(2) ~ 0.1061 and omega^PBE = 0.15*cbrt(2) ~ 0.1890. In + 2006 Krukau et al [JCP 125, 224106 (2006)] tried to clarify the + situation, and called HSE03 to the above choice of parameters, + and called HSE06 to the functional where omega^HF=omega^PBE. By + testing several properties for atoms they reached the conclusion + that the best value for omega=0.11. + + Of course, codes are just as messy as the papers. In espresso + HSE06 has the value omega=0.106. VASP, on the other hand, uses + for HSE03 the same value omega^HF = omega^PBE = 0.3 (A^-1) ~ + 0.1587 and for HSE06 omega^HF = omega^PBE = 0.2 (A^-1) ~ 0.1058. + + We try to follow the original definition of the functional. The + default omega for XC_GGA_X_WPBEH is zero, so WPBEh reduces to + PBEh + */ + switch(p->info->number){ + case XC_HYB_GGA_XC_HSE03: + /* in this case one should use omega^HF = 0.15/sqrt(2) and + omega^PBE = 0.15*CBRT(2.0)*/ + p->cam_omega = 0.15/M_SQRT2; + XC(hyb_gga_xc_hse_set_params)(p, 0.25, 0.15*CBRT(2.0)); + break; + case XC_HYB_GGA_XC_HSE06: + /* in this case one should use omega^HF = omega^PBE = 0.11 */ + p->cam_omega = 0.11; + XC(hyb_gga_xc_hse_set_params)(p, 0.25, 0.11); + break; + default: + fprintf(stderr, "Internal error in hyb_gga_xc_hse\n"); + exit(1); + } +} + + +void +XC(hyb_gga_xc_hse_set_params)(XC(func_type) *p, FLOAT beta, FLOAT omega) +{ + assert(p != NULL && p->func_aux[1] != NULL); + assert(beta>=0.0 && beta<=1.0); + + p->cam_beta = beta; + p->mix_coef[1] = -beta; + XC(gga_x_wpbeh_set_params)(p->func_aux[1], omega); +} + + +const XC(func_info_type) XC(func_info_hyb_gga_xc_hse03) = { + XC_HYB_GGA_XC_HSE03, + XC_EXCHANGE_CORRELATION, + "HSE03", + XC_FAMILY_HYB_GGA, + "J Heyd, GE Scuseria, and M Ernzerhof, J. Chem. Phys. 118, 8207 (2003)\n" + "J Heyd, GE Scuseria, and M Ernzerhof, J. Chem. Phys. 124, 219906 (2006)", + XC_FLAGS_3D | XC_FLAGS_HYB_CAM | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_hse_init, + NULL, NULL, NULL, NULL +}; + +const XC(func_info_type) XC(func_info_hyb_gga_xc_hse06) = { + XC_HYB_GGA_XC_HSE06, + XC_EXCHANGE_CORRELATION, + "HSE06", + XC_FAMILY_HYB_GGA, + "J Heyd, GE Scuseria, and M Ernzerhof, J. Chem. Phys. 118, 8207 (2003)\n" + "J Heyd, GE Scuseria, and M Ernzerhof, J. Chem. Phys. 124, 219906 (2006)\n" + "AV Krukau, OA Vydrov, AF Izmaylov, and GE Scuseria, J. Chem. Phys. 125, 224106 (2006)", + XC_FLAGS_3D | XC_FLAGS_HYB_CAM | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_hse_init, + NULL, NULL, NULL, NULL +}; + + +static void +hyb_gga_xc_hjs_init(XC(func_type) *p) +{ + static int funcs_id [3] = {-1, -1, XC_GGA_C_PBE}; + static FLOAT funcs_coef[3] = {1.0, -0.25, 1.0}; + + p->cam_omega = 0.11; + p->cam_beta = 0.25; + + switch(p->info->number){ + case XC_HYB_GGA_XC_HJS_PBE: + funcs_id[0] = funcs_id[1] = XC_GGA_X_HJS_PBE; + break; + case XC_HYB_GGA_XC_HJS_PBE_SOL: + funcs_id[0] = funcs_id[1] = XC_GGA_X_HJS_PBE_SOL; + break; + case XC_HYB_GGA_XC_HJS_B88: + funcs_id[0] = funcs_id[1] = XC_GGA_X_HJS_B88; + break; + case XC_HYB_GGA_XC_HJS_B97X: + funcs_id[0] = funcs_id[1] = XC_GGA_X_HJS_B97X; + break; + default: + fprintf(stderr, "Internal error in hyb_gga_xc_hjs\n"); + exit(1); + } + + XC(mix_init)(p, 3, funcs_id, funcs_coef); + XC(gga_x_hjs_set_params)(p->func_aux[1], p->cam_omega); +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_hjs_pbe) = { + XC_HYB_GGA_XC_HJS_PBE, + XC_EXCHANGE_CORRELATION, + "HJS hybrid screened exchange PBE version", + XC_FAMILY_HYB_GGA, + "TM Henderson, BG Janesko, and GE Scuseria, J. Chem. Phys. 128, 194105 (2008)", + XC_FLAGS_3D | XC_FLAGS_HYB_CAM | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_hjs_init, + NULL, NULL, NULL, NULL +}; + +const XC(func_info_type) XC(func_info_hyb_gga_xc_hjs_pbe_sol) = { + XC_HYB_GGA_XC_HJS_PBE_SOL, + XC_EXCHANGE_CORRELATION, + "HJS hybrid screened exchange PBE_SOL version", + XC_FAMILY_HYB_GGA, + "TM Henderson, BG Janesko, and GE Scuseria, J. Chem. Phys. 128, 194105 (2008)", + XC_FLAGS_3D | XC_FLAGS_HYB_CAM | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_hjs_init, + NULL, NULL, NULL, NULL +}; + +const XC(func_info_type) XC(func_info_hyb_gga_xc_hjs_b88) = { + XC_HYB_GGA_XC_HJS_B88, + XC_EXCHANGE_CORRELATION, + "HJS hybrid screened exchange B88 version", + XC_FAMILY_HYB_GGA, + "TM Henderson, BG Janesko, and GE Scuseria, J. Chem. Phys. 128, 194105 (2008)", + XC_FLAGS_3D | XC_FLAGS_HYB_CAM | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_hjs_init, + NULL, NULL, NULL, NULL +}; + +const XC(func_info_type) XC(func_info_hyb_gga_xc_hjs_b97x) = { + XC_HYB_GGA_XC_HJS_B97X, + XC_EXCHANGE_CORRELATION, + "HJS hybrid screened exchange B97x version", + XC_FAMILY_HYB_GGA, + "TM Henderson, BG Janesko, and GE Scuseria, J. Chem. Phys. 128, 194105 (2008)", + XC_FLAGS_3D | XC_FLAGS_HYB_CAM | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_hjs_init, + NULL, NULL, NULL, NULL +}; diff --git a/libxc-2.2.0/src/hyb_gga_xc_o3lyp.c b/libxc-2.2.0/src/hyb_gga_xc_o3lyp.c new file mode 100644 index 000000000..d4ea003b1 --- /dev/null +++ b/libxc-2.2.0/src/hyb_gga_xc_o3lyp.c @@ -0,0 +1,89 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_HYB_GGA_XC_O3LYP 404 /* hybrid using the optx functional */ +#define XC_HYB_GGA_XC_X3LYP 411 /* maybe the best hybrid */ + + +/*************************************************************/ +static void +gga_xc_o3lyp_init(XC(func_type) *p) +{ + const FLOAT a0 = 0.1161, b0 = 0.9262, ax = 0.8133, ac = 0.81; + static int funcs_id [4] = {XC_LDA_X, XC_GGA_X_OPTX, XC_LDA_C_VWN, XC_GGA_C_LYP}; + FLOAT funcs_coef[4]; + + funcs_coef[0] = b0 - ax; + funcs_coef[1] = ax; + funcs_coef[2] = 1.0 - ac; + funcs_coef[3] = ac; + + XC(mix_init)(p, 4, funcs_id, funcs_coef); + XC(lda_c_vwn_set_params)(p->func_aux[2], 1); + p->cam_alpha = a0; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_o3lyp) = { + XC_HYB_GGA_XC_O3LYP, + XC_EXCHANGE_CORRELATION, + "O3LYP", + XC_FAMILY_HYB_GGA, + "AJ Cohen, NC Handy, Mol. Phys. 99 607 (2001)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_o3lyp_init, + NULL, NULL, NULL, NULL +}; + + +/*************************************************************/ +static void +gga_xc_x3lyp_init(XC(func_type) *p) +{ + const FLOAT a1=0.675, a2=0.235; + const FLOAT a0=0.218, ax=0.709, ac=0.871; + + static int funcs_id[5] = {XC_LDA_X, XC_GGA_X_B88, XC_GGA_X_PW91, XC_LDA_C_VWN_RPA, XC_GGA_C_LYP}; + FLOAT funcs_coef[5]; + + funcs_coef[0] = 1.0 - a0 - ax*(a1 + a2);; + funcs_coef[1] = ax*a1; + funcs_coef[2] = ax*a2; + funcs_coef[3] = 1.0 - ac; + funcs_coef[4] = ac; + + XC(mix_init)(p, 5, funcs_id, funcs_coef); + p->cam_alpha = a0; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_x3lyp) = { + XC_HYB_GGA_XC_X3LYP, + XC_EXCHANGE_CORRELATION, + "X3LYP", + XC_FAMILY_HYB_GGA, + "X Xu, WA Goddard, III, PNAS 101, 2673 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_x3lyp_init, + NULL, NULL, NULL, NULL +}; diff --git a/libxc-2.2.0/src/hyb_gga_xc_pbeh.c b/libxc-2.2.0/src/hyb_gga_xc_pbeh.c new file mode 100644 index 000000000..e661f5d93 --- /dev/null +++ b/libxc-2.2.0/src/hyb_gga_xc_pbeh.c @@ -0,0 +1,82 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_HYB_GGA_XC_PBEH 406 /* aka PBE0 or PBE1PBE */ +#define XC_HYB_GGA_XC_PBE0_13 456 /* PBE0-1/3 */ + +static void +hyb_gga_xc_pbeh_init(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_PBE, XC_GGA_C_PBE}; + static FLOAT funcs_coef[2] = {1.0 - 0.25, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.25; +} + +void +XC(hyb_gga_xc_pbeh_set_params)(XC(func_type) *p, FLOAT alpha) +{ + assert(alpha>=0 && alpha<=1.0); + + p->cam_alpha = alpha; + p->mix_coef[0] = 1.0 - alpha; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_pbeh) = { + XC_HYB_GGA_XC_PBEH, + XC_EXCHANGE_CORRELATION, + "PBEH (PBE0)", + XC_FAMILY_HYB_GGA, + "C Adamo and V Barone, J. Chem. Phys. 110, 6158 (1999)\n" + "M. Ernzerhof, G. E. Scuseria, J. Chem. Phys. 110, 5029 (1999)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_pbeh_init, + NULL, NULL, NULL, NULL /* this is taken care by the generic routine */ +}; + + +static void +hyb_gga_xc_pbe0_13_init(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_PBE, XC_GGA_C_PBE}; + static FLOAT funcs_coef[2] = {1.0 - 1.0/3.0, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 1.0/3.0; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_pbe0_13) = { + XC_HYB_GGA_XC_PBE0_13, + XC_EXCHANGE_CORRELATION, + "PBE0-1/3", + XC_FAMILY_HYB_GGA, + "P Cortona, J. Chem. Phys. 136, 086101 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_pbe0_13_init, + NULL, NULL, NULL, NULL /* this is taken care by the generic routine */ +}; + + diff --git a/libxc-2.2.0/src/hyb_mgga_xc_m05.c b/libxc-2.2.0/src/hyb_mgga_xc_m05.c new file mode 100644 index 000000000..4df04ced8 --- /dev/null +++ b/libxc-2.2.0/src/hyb_mgga_xc_m05.c @@ -0,0 +1,437 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_HYB_MGGA_XC_M05 438 /* M05 functional of Minnesota */ +#define XC_HYB_MGGA_XC_M05_2X 439 /* M05-2X functional of Minnesota */ +#define XC_HYB_MGGA_XC_B88B95 440 /* Mixture of B88 with BC95 (B1B95) */ +#define XC_HYB_MGGA_XC_B86B95 441 /* Mixture of B86 with BC95 */ +#define XC_HYB_MGGA_XC_PW86B95 442 /* Mixture of PW86 with BC95 */ +#define XC_HYB_MGGA_XC_BB1K 443 /* Mixture of B88 with BC95 from Zhao and Truhlar */ +#define XC_HYB_MGGA_XC_MPW1B95 445 /* Mixture of mPW91 with BC95 from Zhao and Truhlar */ +#define XC_HYB_MGGA_XC_MPWB1K 446 /* Mixture of mPW91 with BC95 for kinetics */ +#define XC_HYB_MGGA_XC_X1B95 447 /* Mixture of X with BC95 */ +#define XC_HYB_MGGA_XC_XB1K 448 /* Mixture of X with BC95 for kinetics */ +#define XC_HYB_MGGA_XC_M06_HF 444 /* M06-HF functional of Minnesota */ +#define XC_HYB_MGGA_XC_M06 449 /* M06 functional of Minnesota */ +#define XC_HYB_MGGA_XC_M06_2X 450 /* M06-2X functional of Minnesota */ +#define XC_HYB_MGGA_XC_PW6B95 451 /* Mixture of PW91 with BC95 from Zhao and Truhlar */ +#define XC_HYB_MGGA_XC_PWB6K 452 /* Mixture of PW91 with BC95 from Zhao and Truhlar for kinetics */ +#define XC_MGGA_XC_TPSSLYP1W 242 /* Functionals fitted for water */ + +/*************************************************************/ +void +XC(hyb_mgga_xc_m05_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_MGGA_X_M05, XC_MGGA_C_M05}; + static FLOAT funcs_coef[2] = {1.0 - 0.28, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.28; +} + +XC(func_info_type) XC(func_info_hyb_mgga_xc_m05) = { + XC_HYB_MGGA_XC_M05, + XC_EXCHANGE_CORRELATION, + "M05 functional of Minnesota", + XC_FAMILY_HYB_MGGA, + "Y Zhao, NE Schultz, and DG Truhlar, J. Chem. Phys. 123, 161103 (2005)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + XC(hyb_mgga_xc_m05_init), + NULL, NULL, NULL, NULL, +}; + + +/*************************************************************/ +void +XC(hyb_mgga_xc_m05_2x_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_MGGA_X_M05_2X, XC_MGGA_C_M05_2X}; + static FLOAT funcs_coef[2] = {1.0 - 0.56, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.56; +} + +XC(func_info_type) XC(func_info_hyb_mgga_xc_m05_2x) = { + XC_HYB_MGGA_XC_M05_2X, + XC_EXCHANGE_CORRELATION, + "M05-2X functional of Minnesota", + XC_FAMILY_HYB_MGGA, + "Y Zhao, NE Schultz, and DG Truhlar, J. Chem. Theory Comput. 2, 364 (2006)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + XC(hyb_mgga_xc_m05_2x_init), + NULL, NULL, NULL, NULL, +}; + + +/*************************************************************/ +void +XC(hyb_mgga_xc_b88b95_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_B88, XC_MGGA_C_BC95}; + static FLOAT funcs_coef[2] = {1.0 - 0.28, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.28; +} + +XC(func_info_type) XC(func_info_hyb_mgga_xc_b88b95) = { + XC_HYB_MGGA_XC_B88B95, + XC_EXCHANGE_CORRELATION, + "Mixture of B88 with BC95 (B1B95)", + XC_FAMILY_HYB_MGGA, + "A Becke, J. Chem. Phys. 104, 1040 (1996)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + XC(hyb_mgga_xc_b88b95_init), + NULL, NULL, NULL, NULL, +}; + + +/*************************************************************/ +void +XC(hyb_mgga_xc_b86b95_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_B86, XC_MGGA_C_BC95}; + static FLOAT funcs_coef[2] = {1.0 - 0.28, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.28; +} + +XC(func_info_type) XC(func_info_hyb_mgga_xc_b86b95) = { + XC_HYB_MGGA_XC_B86B95, + XC_EXCHANGE_CORRELATION, + "Mixture of B86 with BC95", + XC_FAMILY_HYB_MGGA, + "A Becke, J. Chem. Phys. 104, 1040 (1996)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + XC(hyb_mgga_xc_b86b95_init), + NULL, NULL, NULL, NULL, +}; + + +/*************************************************************/ +void +XC(hyb_mgga_xc_pw86b95_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_PW86, XC_MGGA_C_BC95}; + static FLOAT funcs_coef[2] = {1.0 - 0.29, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.29; +} + +XC(func_info_type) XC(func_info_hyb_mgga_xc_pw86b95) = { + XC_HYB_MGGA_XC_PW86B95, + XC_EXCHANGE_CORRELATION, + "Mixture of PW86 with BC95", + XC_FAMILY_HYB_MGGA, + "A Becke, J. Chem. Phys. 104, 1040 (1996)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + XC(hyb_mgga_xc_pw86b95_init), + NULL, NULL, NULL, NULL, +}; + + +/*************************************************************/ +void +XC(hyb_mgga_xc_bb1k_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_B88, XC_MGGA_C_BC95}; + static FLOAT funcs_coef[2] = {1.0 - 0.42, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.42; +} + +XC(func_info_type) XC(func_info_hyb_mgga_xc_bb1k) = { + XC_HYB_MGGA_XC_BB1K, + XC_EXCHANGE_CORRELATION, + "Mixture of B88 with BC95 from Zhao and Truhlar", + XC_FAMILY_HYB_MGGA, + "Y Zhao and DG Truhlar, J. Phys. Chem. A 108, 2715 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + XC(hyb_mgga_xc_bb1k_init), + NULL, NULL, NULL, NULL, +}; + + +/*************************************************************/ +void +XC(hyb_mgga_xc_mpw1b95_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_MPW91, XC_MGGA_C_BC95}; + static FLOAT funcs_coef[2] = {1.0 - 0.31, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.31; +} + +XC(func_info_type) XC(func_info_hyb_mgga_xc_mpw1b95) = { + XC_HYB_MGGA_XC_MPW1B95, + XC_EXCHANGE_CORRELATION, + "Mixture of mPW91 with BC95 from Zhao and Truhlar", + XC_FAMILY_HYB_MGGA, + "Y Zhao and DG Truhlar, J. Phys. Chem. A 108, 6908-6918 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + XC(hyb_mgga_xc_mpw1b95_init), + NULL, NULL, NULL, NULL, +}; + + +/*************************************************************/ +void +XC(hyb_mgga_xc_mpwb1k_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_MPW91, XC_MGGA_C_BC95}; + static FLOAT funcs_coef[2] = {1.0 - 0.44, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.44; +} + +XC(func_info_type) XC(func_info_hyb_mgga_xc_mpwb1k) = { + XC_HYB_MGGA_XC_MPWB1K, + XC_EXCHANGE_CORRELATION, + "Mixture of mPW91 with BC95 for kinetics", + XC_FAMILY_HYB_MGGA, + "Y Zhao and DG Truhlar, J. Phys. Chem. A 108, 6908-6918 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + XC(hyb_mgga_xc_mpwb1k_init), + NULL, NULL, NULL, NULL, +}; + + +/*************************************************************/ +void +XC(hyb_mgga_xc_x1b95_init)(XC(func_type) *p) +{ + const FLOAT a1=0.675, a2=0.235, a0=0.30; + + static int funcs_id [3] = {XC_GGA_X_B88, XC_GGA_X_PW91, XC_MGGA_C_BC95}; + FLOAT funcs_coef[3]; + + funcs_coef[0] = a0*a1; + funcs_coef[1] = a0*a2; + funcs_coef[2] = 1.0; + + XC(mix_init)(p, 3, funcs_id, funcs_coef); + p->cam_alpha = a0; +} + +XC(func_info_type) XC(func_info_hyb_mgga_xc_x1b95) = { + XC_HYB_MGGA_XC_X1B95, + XC_EXCHANGE_CORRELATION, + "Mixture of X with BC95", + XC_FAMILY_HYB_MGGA, + "Y Zhao and DG Truhlar, J. Phys. Chem. A 108, 6908-6918 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + XC(hyb_mgga_xc_x1b95_init), + NULL, NULL, NULL, NULL, +}; + + +/*************************************************************/ +void +XC(hyb_mgga_xc_xb1k_init)(XC(func_type) *p) +{ + const FLOAT a1=0.675, a2=0.235, a0=0.43; + + static int funcs_id [3] = {XC_GGA_X_B88, XC_GGA_X_PW91, XC_MGGA_C_BC95}; + FLOAT funcs_coef[3]; + + funcs_coef[0] = a0*a1; + funcs_coef[1] = a0*a2; + funcs_coef[2] = 1.0; + + XC(mix_init)(p, 3, funcs_id, funcs_coef); + p->cam_alpha = a0; +} + +XC(func_info_type) XC(func_info_hyb_mgga_xc_xb1k) = { + XC_HYB_MGGA_XC_XB1K, + XC_EXCHANGE_CORRELATION, + "Mixture of X with BC95 for kinetics", + XC_FAMILY_HYB_MGGA, + "Y Zhao and DG Truhlar, J. Phys. Chem. A 108, 6908-6918 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + XC(hyb_mgga_xc_xb1k_init), + NULL, NULL, NULL, NULL, +}; + + +/*************************************************************/ +void +XC(hyb_mgga_xc_m06_hf_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_MGGA_X_M06_HF, XC_MGGA_C_M06_HF}; + FLOAT funcs_coef[2] = {1.0, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 1.0; +} + +const XC(func_info_type) XC(func_info_hyb_mgga_xc_m06_hf) = { + XC_HYB_MGGA_XC_M06_HF, + XC_EXCHANGE_CORRELATION, + "M06-HF functional of Minnesota", + XC_FAMILY_HYB_MGGA, + "Y Zhao and DG Truhlar, J. Phys. Chem. A 110, 13126 (2006)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + XC(hyb_mgga_xc_m06_hf_init), + NULL, NULL, NULL, NULL +}; + + +/*************************************************************/ +void +XC(hyb_mgga_xc_m06_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_MGGA_X_M06, XC_MGGA_C_M06}; + FLOAT funcs_coef[2] = {1.0, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.27; +} + +const XC(func_info_type) XC(func_info_hyb_mgga_xc_m06) = { + XC_HYB_MGGA_XC_M06, + XC_EXCHANGE_CORRELATION, + "M06 functional of Minnesota", + XC_FAMILY_HYB_MGGA, + "Y Zhao and DG Truhlar, Theor. Chem. Acc. 120, 215 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + XC(hyb_mgga_xc_m06_init), + NULL, NULL, NULL, NULL +}; + + +/*************************************************************/ +void +XC(hyb_mgga_xc_m06_2x_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_MGGA_X_M06_2X, XC_MGGA_C_M06_2X}; + FLOAT funcs_coef[2] = {1.0, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.54; +} + +const XC(func_info_type) XC(func_info_hyb_mgga_xc_m06_2x) = { + XC_HYB_MGGA_XC_M06_2X, + XC_EXCHANGE_CORRELATION, + "M06-2X functional of Minnesota", + XC_FAMILY_HYB_MGGA, + "Y Zhao and DG Truhlar, Theor. Chem. Acc. 120, 215 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + XC(hyb_mgga_xc_m06_2x_init), + NULL, NULL, NULL, NULL +}; + + +/*************************************************************/ +void +XC(hyb_mgga_xc_pw6b95_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_PW91, XC_MGGA_C_BC95}; + static FLOAT funcs_coef[2] = {1.0 - 0.28, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + XC(gga_x_pw91_set_params2)(p->func_aux[0], 0.00538, 1.7382/(X2S*X2S), 3.8901); + XC(mgga_c_bc95_set_params)(p->func_aux[1], 0.03668, 0.00262); + p->cam_alpha = 0.28; +} + +XC(func_info_type) XC(func_info_hyb_mgga_xc_pw6b95) = { + XC_HYB_MGGA_XC_PW6B95, + XC_EXCHANGE_CORRELATION, + "Mixture of PW91 with BC95 from Zhao and Truhlar", + XC_FAMILY_HYB_MGGA, + "Y Zhao and DG Truhlar, J. Phys. Chem. A 109, 5656-5667 (2005)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + XC(hyb_mgga_xc_pw6b95_init), + NULL, NULL, NULL, NULL, +}; + + +/*************************************************************/ +void +XC(hyb_mgga_xc_pwb6k_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_PW91, XC_MGGA_C_BC95}; + static FLOAT funcs_coef[2] = {1.0 - 0.46, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + XC(gga_x_pw91_set_params2)(p->func_aux[0], 0.00539, 1.7077/(X2S*X2S), 4.0876); + XC(mgga_c_bc95_set_params)(p->func_aux[1], 0.04120, 0.00353); + p->cam_alpha = 0.46; +} + +XC(func_info_type) XC(func_info_hyb_mgga_xc_pwb6k) = { + XC_HYB_MGGA_XC_PWB6K, + XC_EXCHANGE_CORRELATION, + "Mixture of PW91 with BC95 from Zhao and Truhlar for kinetics", + XC_FAMILY_HYB_MGGA, + "Y Zhao and DG Truhlar, J. Phys. Chem. A 109, 5656-5667 (2005)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + XC(hyb_mgga_xc_pwb6k_init), + NULL, NULL, NULL, NULL, +}; + + +/*************************************************************/ +static void +mgga_xc_tpsslyp1w_init(XC(func_type) *p) +{ + static int funcs_id [3] = {XC_LDA_C_VWN, XC_MGGA_X_TPSS, XC_GGA_C_LYP}; + static FLOAT funcs_coef[3] = {1.0 - 74.0/100.0, 1.0, 74.0/100.0}; + + XC(mix_init)(p, 3, funcs_id, funcs_coef); +} + +const XC(func_info_type) XC(func_info_mgga_xc_tpsslyp1w) = { + XC_MGGA_XC_TPSSLYP1W, + XC_EXCHANGE_CORRELATION, + "TPSSLYP1W", + XC_FAMILY_MGGA, + "EE Dahlke and DG Truhlar, J. Phys. Chem. B 109, 15677 (2005)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + mgga_xc_tpsslyp1w_init, + NULL, NULL, NULL, NULL +}; diff --git a/libxc-2.2.0/src/hyb_mgga_xc_tpssh.c b/libxc-2.2.0/src/hyb_mgga_xc_tpssh.c new file mode 100644 index 000000000..4170ff850 --- /dev/null +++ b/libxc-2.2.0/src/hyb_mgga_xc_tpssh.c @@ -0,0 +1,88 @@ +/* + Copyright (C) 2014 Susi Lehtola + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_HYB_MGGA_XC_TPSSH 457 /* TPSS hybrid */ +#define XC_HYB_MGGA_XC_REVTPSSH 458 /* revTPSS hybrid */ + +static void +hyb_mgga_xc_tpssh_init(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_MGGA_X_TPSS, XC_MGGA_C_TPSS}; + static FLOAT funcs_coef[2] = {0.9, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.10; +} + +void +XC(hyb_mgga_xc_tpssh_set_params)(XC(func_type) *p, FLOAT alpha) +{ + assert(alpha>=0 && alpha<=1.0); + + p->cam_alpha = alpha; + p->mix_coef[0] = 1.0 - alpha; +} + +const XC(func_info_type) XC(func_info_hyb_mgga_xc_tpssh) = { + XC_HYB_MGGA_XC_TPSSH, + XC_EXCHANGE_CORRELATION, + "TPSSh", + XC_FAMILY_HYB_MGGA, + "V. N. Staroverov, G. E. Scuseria, J. Tao and J. P. Perdew, J. Chem. Phys. 119, 12129 (2003)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_mgga_xc_tpssh_init, + NULL, NULL, NULL, NULL /* this is taken care by the generic routine */ +}; + + +static void +hyb_mgga_xc_revtpssh_init(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_MGGA_X_REVTPSS, XC_MGGA_C_REVTPSS}; + static FLOAT funcs_coef[2] = {0.9, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.10; +} + +void +XC(hyb_mgga_xc_revtpssh_set_params)(XC(func_type) *p, FLOAT alpha) +{ + assert(alpha>=0 && alpha<=1.0); + + p->cam_alpha = alpha; + p->mix_coef[0] = 1.0 - alpha; +} + +const XC(func_info_type) XC(func_info_hyb_mgga_xc_revtpssh) = { + XC_HYB_MGGA_XC_REVTPSSH, + XC_EXCHANGE_CORRELATION, + "revTPSSh", + XC_FAMILY_HYB_MGGA, + "G. I. Csonka, J. P. Perdew, and A. Ruzsinszky, J. Chem. Theory Comput. 6, 3688 (2010)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_mgga_xc_revtpssh_init, + NULL, NULL, NULL, NULL /* this is taken care by the generic routine */ +}; diff --git a/libxc-2.2.0/src/integrate.c b/libxc-2.2.0/src/integrate.c new file mode 100644 index 000000000..435fff2b9 --- /dev/null +++ b/libxc-2.2.0/src/integrate.c @@ -0,0 +1,1144 @@ + +/* + Copyright (C) 2001-2004 the R Development Core Team + Copyright (C) 2009 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + DAG integration from QUADPACK + + This code has been adapted from + R : A Computer Language for Statistical Data Analysis +*/ + +#include +#include +#include +#include + + +#define FALSE 0 +#define TRUE 1 + +FLOAT XC(integrate)(integr_fn func, void *ex, FLOAT a, FLOAT b) +{ + FLOAT epsabs, epsrel, result, abserr, *alist, *blist, *rlist, *elist; + int limit, neval, ierr, *iord, last; + +#ifdef SINGLE_PRECISION + epsabs = 1e-5; + epsrel = 1e-5; +#else + epsabs = 1e-10; + epsrel = 1e-10; +#endif + + limit = 1000; + alist = (FLOAT *)malloc(limit*sizeof(FLOAT)); + blist = (FLOAT *)malloc(limit*sizeof(FLOAT)); + rlist = (FLOAT *)malloc(limit*sizeof(FLOAT)); + elist = (FLOAT *)malloc(limit*sizeof(FLOAT)); + iord = (int *)malloc(limit*sizeof(int)); + + XC(rdqagse)(func, ex, &a, &b, &epsabs, &epsrel, &limit, &result, &abserr, &neval, &ierr, + alist, blist, rlist, elist, iord, &last); + + free(alist); + free(blist); + free(rlist); + free(elist); + free(iord); + + return result; +} + +/* f2c-ed translations + modifications of QUADPACK functions from here down */ + +static void rdqk21(integr_fn f, void *ex, + FLOAT *, FLOAT *, FLOAT *, FLOAT *, FLOAT *, FLOAT *); + +static void rdqpsrt(int *, int *, int *, FLOAT *, FLOAT *, int *, int *); + +static void rdqelg(int *, FLOAT *, FLOAT *, FLOAT *, FLOAT *, int *); + +void XC(rdqagse)(integr_fn f, void *ex, FLOAT *a, FLOAT *b, + FLOAT *epsabs, FLOAT *epsrel, int *limit, FLOAT *result, + FLOAT *abserr, int *neval, int *ier, FLOAT *alist__, + FLOAT *blist, FLOAT *rlist, FLOAT *elist, int *iord, int *last) +{ + /* Local variables */ + int noext, extrap; + int k,ksgn, nres; + int ierro; + int ktmin, nrmax; + int iroff1, iroff2, iroff3; + int id; + int numrl2; + int jupbnd; + int maxerr; + FLOAT res3la[3]; + FLOAT rlist2[52]; + FLOAT abseps, area, area1, area2, area12, dres, epmach; + FLOAT a1, a2, b1, b2, defabs, defab1, defab2, oflow, uflow, resabs, reseps; + FLOAT error1, error2, erro12, errbnd, erlast, errmax, errsum; + + FLOAT correc = 0.0, erlarg = 0.0, ertest = 0.0, small = 0.0; + /* + ***begin prologue dqagse + ***date written 800101 (yymmdd) + ***revision date 830518 (yymmdd) + ***category no. h2a1a1 + ***keywords automatic integrator, general-purpose, + (end point) singularities, extrapolation, + globally adaptive + ***author piessens,robert,appl. math. & progr. div. - k.u.leuven + de doncker,elise,appl. math. & progr. div. - k.u.leuven + ***purpose the routine calculates an approximation result to a given + definite integral i = integral of f over (a,b), + hopefully satisfying following claim for accuracy + abs(i-result) <= max(epsabs,epsrel*abs(i)). + ***description + + computation of a definite integral + standard fortran subroutine + FLOAT precision version + + parameters + on entry + f - FLOAT precision + function subprogram defining the integrand + function f(x). the actual name for f needs to be + declared e x t e r n a l in the driver program. + + a - FLOAT precision + lower limit of integration + + b - FLOAT precision + upper limit of integration + + epsabs - FLOAT precision + absolute accuracy requested + epsrel - FLOAT precision + relative accuracy requested + if epsabs <= 0 + and epsrel < max(50*rel.mach.acc.,0.5d-28), + the routine will end with ier = 6. + + limit - int + gives an upperbound on the number of subintervals + in the partition of (a,b) + + on return + result - FLOAT precision + approximation to the integral + + abserr - FLOAT precision + estimate of the modulus of the absolute error, + which should equal or exceed abs(i-result) + + neval - int + number of integrand evaluations + + ier - int + ier = 0 normal and reliable termination of the + routine. it is assumed that the requested + accuracy has been achieved. + ier > 0 abnormal termination of the routine + the estimates for integral and error are + less reliable. it is assumed that the + requested accuracy has not been achieved. + error messages + = 1 maximum number of subdivisions allowed + has been achieved. one can allow more sub- + divisions by increasing the value of limit + (and taking the according dimension + adjustments into account). however, if + this yields no improvement it is advised + to analyze the integrand in order to + determine the integration difficulties. if + the position of a local difficulty can be + determined (e.g. singularity, + discontinuity within the interval) one + will probably gain from splitting up the + interval at this point and calling the + integrator on the subranges. if possible, + an appropriate special-purpose integrator + should be used, which is designed for + handling the type of difficulty involved. + = 2 the occurrence of roundoff error is detec- + ted, which prevents the requested + tolerance from being achieved. + the error may be under-estimated. + = 3 extremely bad integrand behaviour + occurs at some points of the integration + interval. + = 4 the algorithm does not converge. + roundoff error is detected in the + extrapolation table. + it is presumed that the requested + tolerance cannot be achieved, and that the + returned result is the best which can be + obtained. + = 5 the integral is probably divergent, or + slowly convergent. it must be noted that + divergence can occur with any other value + of ier. + = 6 the input is invalid, because + epsabs <= 0 and + epsrel < max(50*rel.mach.acc.,0.5d-28). + result, abserr, neval, last, rlist(1), + iord(1) and elist(1) are set to zero. + alist(1) and blist(1) are set to a and b + respectively. + + alist - FLOAT precision + vector of dimension at least limit, the first + last elements of which are the left end points + of the subintervals in the partition of the + given integration range (a,b) + + blist - FLOAT precision + vector of dimension at least limit, the first + last elements of which are the right end points + of the subintervals in the partition of the given + integration range (a,b) + + rlist - FLOAT precision + vector of dimension at least limit, the first + last elements of which are the integral + approximations on the subintervals + + elist - FLOAT precision + vector of dimension at least limit, the first + last elements of which are the moduli of the + absolute error estimates on the subintervals + + iord - int + vector of dimension at least limit, the first k + elements of which are pointers to the + error estimates over the subintervals, + such that elist(iord(1)), ..., elist(iord(k)) + form a decreasing sequence, with k = last + if last <= (limit/2+2), and k = limit+1-last + otherwise + + last - int + number of subintervals actually produced in the + subdivision process + + ***references (none) + ***routines called dqelg,dqk21,dqpsrt + ***end prologue dqagse + + + + the dimension of rlist2 is determined by the value of + limexp in subroutine dqelg (rlist2 should be of dimension + (limexp+2) at least). + + list of major variables + ----------------------- + + alist - list of left end points of all subintervals + considered up to now + blist - list of right end points of all subintervals + considered up to now + rlist(i) - approximation to the integral over + (alist(i),blist(i)) + rlist2 - array of dimension at least limexp+2 containing + the part of the epsilon table which is still + needed for further computations + elist(i) - error estimate applying to rlist(i) + maxerr - pointer to the interval with largest error + estimate + errmax - elist(maxerr) + erlast - error on the interval currently subdivided + (before that subdivision has taken place) + area - sum of the integrals over the subintervals + errsum - sum of the errors over the subintervals + errbnd - requested accuracy max(epsabs,epsrel* + abs(result)) + *****1 - variable for the left interval + *****2 - variable for the right interval + last - index for subdivision + nres - number of calls to the extrapolation routine + numrl2 - number of elements currently in rlist2. if an + appropriate approximation to the compounded + integral has been obtained it is put in + rlist2(numrl2) after numrl2 has been increased + by one. + small - length of the smallest interval considered up + to now, multiplied by 1.5 + erlarg - sum of the errors over the intervals larger + than the smallest interval considered up to now + extrap - logical variable denoting that the routine is + attempting to perform extrapolation i.e. before + subdividing the smallest interval we try to + decrease the value of erlarg. + noext - logical variable denoting that extrapolation + is no longer allowed (true value) + + machine dependent constants + --------------------------- + + epmach is the largest relative spacing. + uflow is the smallest positive magnitude. + oflow is the largest positive magnitude. */ + + /* ***first executable statement dqagse */ + /* Parameter adjustments */ + --iord; + --elist; + --rlist; + --blist; + --alist__; + + /* Function Body */ + epmach = FLOAT_EPSILON; + + /* test on validity of parameters */ + /* ------------------------------ */ + *ier = 0; + *neval = 0; + *last = 0; + *result = 0.; + *abserr = 0.; + alist__[1] = *a; + blist[1] = *b; + rlist[1] = 0.; + elist[1] = 0.; + if (*epsabs <= 0. && *epsrel < max(epmach * 50., 5e-29)) { + *ier = 6; + return; + } + + /* first approximation to the integral */ + /* ----------------------------------- */ + + uflow = FLOAT_MIN; + oflow = FLOAT_MAX; + ierro = 0; + rdqk21(f, ex, a, b, result, abserr, &defabs, &resabs); + + /* test on accuracy. */ + + dres = ABS(*result); + errbnd = max(*epsabs, *epsrel * dres); + *last = 1; + rlist[1] = *result; + elist[1] = *abserr; + iord[1] = 1; + if (*abserr <= epmach * 100. * defabs && *abserr > errbnd) + *ier = 2; + if (*limit == 1) + *ier = 1; + if (*ier != 0 || (*abserr <= errbnd && *abserr != resabs) + || *abserr == 0.) goto L140; + + /* initialization */ + /* -------------- */ + + rlist2[0] = *result; + errmax = *abserr; + maxerr = 1; + area = *result; + errsum = *abserr; + *abserr = oflow; + nrmax = 1; + nres = 0; + numrl2 = 2; + ktmin = 0; + extrap = FALSE; + noext = FALSE; + iroff1 = 0; + iroff2 = 0; + iroff3 = 0; + ksgn = -1; + if (dres >= (1. - epmach * 50.) * defabs) { + ksgn = 1; + } + + /* main do-loop */ + /* ------------ */ + + for (*last = 2; *last <= *limit; ++(*last)) { + + /* bisect the subinterval with the nrmax-th largest error estimate. */ + + a1 = alist__[maxerr]; + b1 = (alist__[maxerr] + blist[maxerr]) * .5; + a2 = b1; + b2 = blist[maxerr]; + erlast = errmax; + rdqk21(f, ex, &a1, &b1, &area1, &error1, &resabs, &defab1); + rdqk21(f, ex, &a2, &b2, &area2, &error2, &resabs, &defab2); + + /* improve previous approximations to integral + and error and test for accuracy. */ + + area12 = area1 + area2; + erro12 = error1 + error2; + errsum = errsum + erro12 - errmax; + area = area + area12 - rlist[maxerr]; + if (defab1 == error1 || defab2 == error2) { + goto L15; + } + if (ABS(rlist[maxerr] - area12) > ABS(area12) * 1e-5 || + erro12 < errmax * .99) { + goto L10; + } + if (extrap) { + ++iroff2; + } + if (! extrap) { + ++iroff1; + } + L10: + if (*last > 10 && erro12 > errmax) { + ++iroff3; + } + L15: + rlist[maxerr] = area1; + rlist[*last] = area2; + errbnd = max(*epsabs, *epsrel * ABS(area)); + + /* test for roundoff error and eventually set error flag. */ + + if (iroff1 + iroff2 >= 10 || iroff3 >= 20) + *ier = 2; + if (iroff2 >= 5) + ierro = 3; + + /* set error flag in the case that the number of subintervals equals limit. */ + if (*last == *limit) + *ier = 1; + + /* set error flag in the case of bad integrand behaviour + at a point of the integration range. */ + + if (max(ABS(a1), ABS(b2)) <= + (epmach * 100. + 1.) * (ABS(a2) + uflow * 1e3)) { + *ier = 4; + } + + /* append the newly-created intervals to the list. */ + + if (error2 > error1) { + alist__[maxerr] = a2; + alist__[*last] = a1; + blist[*last] = b1; + rlist[maxerr] = area2; + rlist[*last] = area1; + elist[maxerr] = error2; + elist[*last] = error1; + } else { + alist__[*last] = a2; + blist[maxerr] = b1; + blist[*last] = b2; + elist[maxerr] = error1; + elist[*last] = error2; + } + + /* call subroutine dqpsrt to maintain the descending ordering + in the list of error estimates and select the subinterval + with nrmax-th largest error estimate (to be bisected next). */ + + /*L30:*/ + rdqpsrt(limit, last, &maxerr, &errmax, &elist[1], &iord[1], &nrmax); + + if (errsum <= errbnd) goto L115;/* ***jump out of do-loop */ + if (*ier != 0) goto L100;/* ***jump out of do-loop */ + + if (*last == 2) goto L80; + if (noext) goto L90; + + erlarg -= erlast; + if (ABS(b1 - a1) > small) { + erlarg += erro12; + } + if (extrap) { + goto L40; + } + + /* test whether the interval to be bisected next is the + smallest interval. */ + + if (ABS(blist[maxerr] - alist__[maxerr]) > small) { + goto L90; + } + extrap = TRUE; + nrmax = 2; + L40: + if (ierro == 3 || erlarg <= ertest) { + goto L60; + } + + /* the smallest interval has the largest error. + before bisecting decrease the sum of the errors over the + larger intervals (erlarg) and perform extrapolation. */ + + id = nrmax; + jupbnd = *last; + if (*last > *limit / 2 + 2) { + jupbnd = *limit + 3 - *last; + } + for (k = id; k <= jupbnd; ++k) { + maxerr = iord[nrmax]; + errmax = elist[maxerr]; + if (ABS(blist[maxerr] - alist__[maxerr]) > small) { + goto L90;/* ***jump out of do-loop */ + } + ++nrmax; + /* L50: */ + } + + /* perform extrapolation. */ + + L60: + ++numrl2; + rlist2[numrl2 - 1] = area; + rdqelg(&numrl2, rlist2, &reseps, &abseps, res3la, &nres); + ++ktmin; + if (ktmin > 5 && *abserr < errsum * .001) { + *ier = 5; + } + if (abseps >= *abserr) { + goto L70; + } + ktmin = 0; + *abserr = abseps; + *result = reseps; + correc = erlarg; + ertest = max(*epsabs, *epsrel * ABS(reseps)); + if (*abserr <= ertest) { + goto L100;/* ***jump out of do-loop */ + } + + /* prepare bisection of the smallest interval. */ + + L70: + if (numrl2 == 1) { + noext = TRUE; + } + if (*ier == 5) { + goto L100; + } + maxerr = iord[1]; + errmax = elist[maxerr]; + nrmax = 1; + extrap = FALSE; + small *= .5; + erlarg = errsum; + goto L90; + L80: + small = ABS(*b - *a) * .375; + erlarg = errsum; + ertest = errbnd; + rlist2[1] = area; + L90: + ; + } + + + L100:/* set final result and error estimate. */ + /* ------------------------------------ */ + if (*abserr == oflow) goto L115; + if (*ier + ierro == 0) goto L110; + if (ierro == 3) + *abserr += correc; + if (*ier == 0) + *ier = 3; + if (*result != 0. && area != 0.) goto L105; + if (*abserr > errsum) goto L115; + if (area == 0.) goto L130; + goto L110; + + L105: + if (*abserr / ABS(*result) > errsum / ABS(area)) { + goto L115; + } + + L110:/* test on divergence. */ + if (ksgn == -1 && max(ABS(*result), ABS(area)) <= defabs * .01) { + goto L130; + } + if (.01 > *result / area || *result / area > 100. || errsum > ABS(area)) { + *ier = 5; + } + goto L130; + + L115:/* compute global integral sum. */ + *result = 0.; + for (k = 1; k <= *last; ++k) + *result += rlist[k]; + *abserr = errsum; + L130: + if (*ier > 2) + L140: + *neval = *last * 42 - 21; + + return; +} /* rdqagse_ */ + + +static void rdqelg(int *n, FLOAT *epstab, FLOAT * + result, FLOAT *abserr, FLOAT *res3la, int *nres) +{ + /* Local variables */ + int i__, indx, ib, ib2, ie, k1, k2, k3, num, newelm, limexp; + FLOAT delta1, delta2, delta3, e0, e1, e1abs, e2, e3, epmach, epsinf; + FLOAT oflow, ss, res; + FLOAT errA, err1, err2, err3, tol1, tol2, tol3; + + /* ***begin prologue dqelg + ***refer to dqagie,dqagoe,dqagpe,dqagse + ***revision date 830518 (yymmdd) + ***keywords epsilon algorithm, convergence acceleration, + extrapolation +***author piessens,robert,appl. math. & progr. div. - k.u.leuven + de doncker,elise,appl. math & progr. div. - k.u.leuven +***purpose the routine determines the limit of a given sequence of + approximations, by means of the epsilon algorithm of + p.wynn. an estimate of the absolute error is also given. + the condensed epsilon table is computed. only those + elements needed for the computation of the next diagonal + are preserved. +***description + + epsilon algorithm + standard fortran subroutine + FLOAT precision version + + parameters + n - int + epstab(n) contains the new element in the + first column of the epsilon table. + + epstab - FLOAT precision + vector of dimension 52 containing the elements + of the two lower diagonals of the triangular + epsilon table. the elements are numbered + starting at the right-hand corner of the + triangle. + + result - FLOAT precision + resulting approximation to the integral + + abserr - FLOAT precision + estimate of the absolute error computed from + result and the 3 previous results + + res3la - FLOAT precision + vector of dimension 3 containing the last 3 + results + + nres - int + number of calls to the routine + (should be zero at first call) + +***end prologue dqelg + + + list of major variables + ----------------------- + + e0 - the 4 elements on which the computation of a new + e1 element in the epsilon table is based + e2 + e3 e0 + e3 e1 new + e2 + + newelm - number of elements to be computed in the new diagonal + errA - errA = abs(e1-e0)+abs(e2-e1)+abs(new-e2) + result - the element in the new diagonal with least value of errA + + machine dependent constants + --------------------------- + + epmach is the largest relative spacing. + oflow is the largest positive magnitude. + limexp is the maximum number of elements the epsilon + table can contain. if this number is reached, the upper + diagonal of the epsilon table is deleted. */ + +/* ***first executable statement dqelg */ + /* Parameter adjustments */ + --res3la; + --epstab; + + /* Function Body */ + epmach = FLOAT_EPSILON; + oflow = FLOAT_MAX; + ++(*nres); + *abserr = oflow; + *result = epstab[*n]; + if (*n < 3) { + goto L100; + } + limexp = 50; + epstab[*n + 2] = epstab[*n]; + newelm = (*n - 1) / 2; + epstab[*n] = oflow; + num = *n; + k1 = *n; + for (i__ = 1; i__ <= newelm; ++i__) { + k2 = k1 - 1; + k3 = k1 - 2; + res = epstab[k1 + 2]; + e0 = epstab[k3]; + e1 = epstab[k2]; + e2 = res; + e1abs = ABS(e1); + delta2 = e2 - e1; + err2 = ABS(delta2); + tol2 = max(ABS(e2), e1abs) * epmach; + delta3 = e1 - e0; + err3 = ABS(delta3); + tol3 = max(e1abs, ABS(e0)) * epmach; + if (err2 <= tol2 && err3 <= tol3) { + /* if e0, e1 and e2 are equal to within machine + accuracy, convergence is assumed. */ + *result = res;/* result = e2 */ + *abserr = err2 + err3;/* abserr = ABS(e1-e0)+ABS(e2-e1) */ + + goto L100; /* ***jump out of do-loop */ + } + + e3 = epstab[k1]; + epstab[k1] = e1; + delta1 = e1 - e3; + err1 = ABS(delta1); + tol1 = max(e1abs, ABS(e3)) * epmach; + + /* if two elements are very close to each other, omit + a part of the table by adjusting the value of n */ + + if (err1 > tol1 && err2 > tol2 && err3 > tol3) { + ss = 1. / delta1 + 1. / delta2 - 1. / delta3; + epsinf = ABS(ss * e1); + + /* test to detect irregular behaviour in the table, and + eventually omit a part of the table adjusting the value of n. */ + + if (epsinf > 1e-4) { + goto L30; + } + } + + *n = i__ + i__ - 1; + goto L50;/* ***jump out of do-loop */ + + + L30:/* compute a new element and eventually adjust the value of result. */ + + res = e1 + 1. / ss; + epstab[k1] = res; + k1 += -2; + errA = err2 + ABS(res - e2) + err3; + if (errA <= *abserr) { + *abserr = errA; + *result = res; + } + } + + /* shift the table. */ + + L50: + if (*n == limexp) { + *n = (limexp / 2 << 1) - 1; + } + + if (num / 2 << 1 == num) ib = 2; else ib = 1; + ie = newelm + 1; + for (i__ = 1; i__ <= ie; ++i__) { + ib2 = ib + 2; + epstab[ib] = epstab[ib2]; + ib = ib2; + } + if (num != *n) { + indx = num - *n + 1; + for (i__ = 1; i__ <= *n; ++i__) { + epstab[i__] = epstab[indx]; + ++indx; + } + } + /*L80:*/ + if (*nres >= 4) { + /* L90: */ + *abserr = ABS(*result - res3la[3]) + + ABS(*result - res3la[2]) + + ABS(*result - res3la[1]); + res3la[1] = res3la[2]; + res3la[2] = res3la[3]; + res3la[3] = *result; + } else { + res3la[*nres] = *result; + *abserr = oflow; + } + + L100:/* compute error estimate */ + *abserr = max(*abserr, epmach * 5. * ABS(*result)); + return; +} /* rdqelg_ */ + +static void rdqk21(integr_fn f, void *ex, FLOAT *a, FLOAT *b, FLOAT *result, + FLOAT *abserr, FLOAT *resabs, FLOAT *resasc) +{ + /* Initialized data */ + + static FLOAT wg[5] = { .066671344308688137593568809893332, + .149451349150580593145776339657697, + .219086362515982043995534934228163, + .269266719309996355091226921569469, + .295524224714752870173892994651338 }; + static FLOAT xgk[11] = { .995657163025808080735527280689003, + .973906528517171720077964012084452, + .930157491355708226001207180059508, + .865063366688984510732096688423493, + .780817726586416897063717578345042, + .679409568299024406234327365114874, + .562757134668604683339000099272694, + .433395394129247190799265943165784, + .294392862701460198131126603103866, + .14887433898163121088482600112972,0. }; + static FLOAT wgk[11] = { .011694638867371874278064396062192, + .03255816230796472747881897245939, + .05475589657435199603138130024458, + .07503967481091995276704314091619, + .093125454583697605535065465083366, + .109387158802297641899210590325805, + .123491976262065851077958109831074, + .134709217311473325928054001771707, + .142775938577060080797094273138717, + .147739104901338491374841515972068, + .149445554002916905664936468389821 }; + + + /* Local variables */ + FLOAT fv1[10], fv2[10], vec[21]; + FLOAT absc, resg, resk, fsum, fval1, fval2; + FLOAT hlgth, centr, reskh, uflow; + FLOAT fc, epmach, dhlgth; + int j, jtw, jtwm1; + +/* ***begin prologue dqk21 +***date written 800101 (yymmdd) +***revision date 830518 (yymmdd) +***category no. h2a1a2 +***keywords 21-point gauss-kronrod rules +***author piessens,robert,appl. math. & progr. div. - k.u.leuven + de doncker,elise,appl. math. & progr. div. - k.u.leuven +***purpose to compute i = integral of f over (a,b), with error + estimate + j = integral of abs(f) over (a,b) +***description + + integration rules + standard fortran subroutine + FLOAT precision version + + parameters + on entry + f - FLOAT precision + function subprogram defining the integrand + function f(x). the actual name for f needs to be + declared e x t e r n a l in the driver program. + + a - FLOAT precision + lower limit of integration + + b - FLOAT precision + upper limit of integration + + on return + result - FLOAT precision + approximation to the integral i + result is computed by applying the 21-point + kronrod rule (resk) obtained by optimal addition + of abscissae to the 10-point gauss rule (resg). + + abserr - FLOAT precision + estimate of the modulus of the absolute error, + which should not exceed abs(i-result) + + resabs - FLOAT precision + approximation to the integral j + + resasc - FLOAT precision + approximation to the integral of abs(f-i/(b-a)) + over (a,b) + +***references (none) +***end prologue dqk21 + + + + the abscissae and weights are given for the interval (-1,1). + because of symmetry only the positive abscissae and their + corresponding weights are given. + + xgk - abscissae of the 21-point kronrod rule + xgk(2), xgk(4), ... abscissae of the 10-point + gauss rule + xgk(1), xgk(3), ... abscissae which are optimally + added to the 10-point gauss rule + + wgk - weights of the 21-point kronrod rule + + wg - weights of the 10-point gauss rule + + +gauss quadrature weights and kronron quadrature abscissae and weights +as evaluated with 80 decimal digit arithmetic by l. w. fullerton, +bell labs, nov. 1981. + + + + + + list of major variables + ----------------------- + + centr - mid point of the interval + hlgth - half-length of the interval + absc - abscissa + fval* - function value + resg - result of the 10-point gauss formula + resk - result of the 21-point kronrod formula + reskh - approximation to the mean value of f over (a,b), + i.e. to i/(b-a) + + + machine dependent constants + --------------------------- + + epmach is the largest relative spacing. + uflow is the smallest positive magnitude. */ + +/* ***first executable statement dqk21 */ + epmach = FLOAT_EPSILON; + uflow = FLOAT_MIN; + + centr = (*a + *b) * .5; + hlgth = (*b - *a) * .5; + dhlgth = ABS(hlgth); + + /* compute the 21-point kronrod approximation to + the integral, and estimate the absolute error. */ + + resg = 0.; + vec[0] = centr; + for (j = 1; j <= 5; ++j) { + jtw = j << 1; + absc = hlgth * xgk[jtw - 1]; + vec[(j << 1) - 1] = centr - absc; + /* L5: */ + vec[j * 2] = centr + absc; + } + for (j = 1; j <= 5; ++j) { + jtwm1 = (j << 1) - 1; + absc = hlgth * xgk[jtwm1 - 1]; + vec[(j << 1) + 9] = centr - absc; + vec[(j << 1) + 10] = centr + absc; + } + f(vec, 21, ex); + fc = vec[0]; + resk = wgk[10] * fc; + *resabs = ABS(resk); + for (j = 1; j <= 5; ++j) { + jtw = j << 1; + absc = hlgth * xgk[jtw - 1]; + fval1 = vec[(j << 1) - 1]; + fval2 = vec[j * 2]; + fv1[jtw - 1] = fval1; + fv2[jtw - 1] = fval2; + fsum = fval1 + fval2; + resg += wg[j - 1] * fsum; + resk += wgk[jtw - 1] * fsum; + *resabs += wgk[jtw - 1] * (ABS(fval1) + ABS(fval2)); + /* L10: */ + } + for (j = 1; j <= 5; ++j) { + jtwm1 = (j << 1) - 1; + absc = hlgth * xgk[jtwm1 - 1]; + fval1 = vec[(j << 1) + 9]; + fval2 = vec[(j << 1) + 10]; + fv1[jtwm1 - 1] = fval1; + fv2[jtwm1 - 1] = fval2; + fsum = fval1 + fval2; + resk += wgk[jtwm1 - 1] * fsum; + *resabs += wgk[jtwm1 - 1] * (ABS(fval1) + ABS(fval2)); + /* L15: */ + } + reskh = resk * .5; + *resasc = wgk[10] * ABS(fc - reskh); + for (j = 1; j <= 10; ++j) { + *resasc += wgk[j - 1] * (ABS(fv1[j - 1] - reskh) + + ABS(fv2[j - 1] - reskh)); + /* L20: */ + } + *result = resk * hlgth; + *resabs *= dhlgth; + *resasc *= dhlgth; + *abserr = ABS((resk - resg) * hlgth); + if (*resasc != 0. && *abserr != 0.) { + *abserr = *resasc * min(1., POW(*abserr * 200. / *resasc, 1.5)); + } + if (*resabs > uflow / (epmach * 50.)) { + *abserr = max(epmach * 50. * *resabs, *abserr); + } + return; +} /* rdqk21_ */ + + +static void rdqpsrt(int *limit, int *last, int *maxerr, + FLOAT *ermax, FLOAT *elist, int *iord, int *nrmax) +{ + /* Local variables */ + int i, j, k, ido, jbnd, isucc, jupbn; + FLOAT errmin, errmax; + +/* ***begin prologue dqpsrt + ***refer to dqage,dqagie,dqagpe,dqawse + ***routines called (none) + ***revision date 810101 (yymmdd) + ***keywords sequential sorting + ***author piessens,robert,appl. math. & progr. div. - k.u.leuven + de doncker,elise,appl. math. & progr. div. - k.u.leuven + ***purpose this routine maintains the descending ordering in the + list of the local error estimated resulting from the + interval subdivision process. at each call two error + estimates are inserted using the sequential search + method, top-down for the largest error estimate and + bottom-up for the smallest error estimate. + ***description + + ordering routine + standard fortran subroutine + FLOAT precision version + + parameters (meaning at output) + limit - int + maximum number of error estimates the list + can contain + + last - int + number of error estimates currently in the list + + maxerr - int + maxerr points to the nrmax-th largest error + estimate currently in the list + + ermax - FLOAT precision + nrmax-th largest error estimate + ermax = elist(maxerr) + + elist - FLOAT precision + vector of dimension last containing + the error estimates + + iord - int + vector of dimension last, the first k elements + of which contain pointers to the error + estimates, such that + elist(iord(1)),..., elist(iord(k)) + form a decreasing sequence, with + k = last if last <= (limit/2+2), and + k = limit+1-last otherwise + + nrmax - int + maxerr = iord(nrmax) + +***end prologue dqpsrt +*/ + + + /* Parameter adjustments */ + --iord; + --elist; + + /* Function Body */ + + /* check whether the list contains more than + two error estimates. */ + if (*last <= 2) { + iord[1] = 1; + iord[2] = 2; + goto Last; + } + /* this part of the routine is only executed if, due to a + difficult integrand, subdivision increased the error + estimate. in the normal case the insert procedure should + start after the nrmax-th largest error estimate. */ + + errmax = elist[*maxerr]; + if (*nrmax > 1) { + ido = *nrmax - 1; + for (i = 1; i <= ido; ++i) { + isucc = iord[*nrmax - 1]; + if (errmax <= elist[isucc]) + break; /* out of for-loop */ + iord[*nrmax] = isucc; + --(*nrmax); + /* L20: */ + } + } + + /*L30: compute the number of elements in the list to be maintained + in descending order. this number depends on the number of + subdivisions still allowed. */ + if (*last > *limit / 2 + 2) + jupbn = *limit + 3 - *last; + else + jupbn = *last; + + errmin = elist[*last]; + + /* insert errmax by traversing the list top-down, + starting comparison from the element elist(iord(nrmax+1)). */ + + jbnd = jupbn - 1; + for (i = *nrmax + 1; i <= jbnd; ++i) { + isucc = iord[i]; + if (errmax >= elist[isucc]) {/* ***jump out of do-loop */ + /* L60: insert errmin by traversing the list bottom-up. */ + iord[i - 1] = *maxerr; + for (j = i, k = jbnd; j <= jbnd; j++, k--) { + isucc = iord[k]; + if (errmin < elist[isucc]) { + /* goto L80; ***jump out of do-loop */ + iord[k + 1] = *last; + goto Last; + } + iord[k + 1] = isucc; + } + iord[i] = *last; + goto Last; + } + iord[i - 1] = isucc; + } + + iord[jbnd] = *maxerr; + iord[jupbn] = *last; + + Last:/* set maxerr and ermax. */ + + *maxerr = iord[*nrmax]; + *ermax = elist[*maxerr]; + return; +} /* rdqpsrt_ */ diff --git a/libxc-2.2.0/src/lda.c b/libxc-2.2.0/src/lda.c new file mode 100644 index 000000000..f3ae797d3 --- /dev/null +++ b/libxc-2.2.0/src/lda.c @@ -0,0 +1,236 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include + +#include "util.h" +#include "funcs_lda.c" + + +/* initialization */ +int +XC(lda_init)(XC(func_type) *func, const XC(func_info_type) *info, int nspin) +{ + assert(func != NULL); + + /* initialize structure */ + func->info = info; + func->nspin = nspin; + func->params = NULL; + func->func = 0; + + /* initialize spin counters */ + func->n_rho = func->n_vrho = func->nspin; + func->n_zk = 1; + if(func->nspin == XC_UNPOLARIZED){ + func->n_v2rho2 = func->n_v3rho3 = 1; + }else{ + func->n_v2rho2 = 3; + func->n_v3rho3 = 4; + } + + /* see if we need to initialize the functional */ + if(func->info->init != NULL) + func->info->init(func); + return 0; +} + + +/* termination */ +void +XC(lda_end)(XC(func_type) *func) +{ + assert(func != NULL); + + if(func->info->end != NULL) + func->info->end(func); + + /* deallocate any used parameter */ + if(func->params != NULL){ + free(func->params); + func->params = NULL; + } +} + + +/* get the lda functional */ +void +XC(lda)(const XC(func_type) *func, int np, const FLOAT *rho, + FLOAT *zk, FLOAT *vrho, FLOAT *v2rho2, FLOAT *v3rho3) +{ + assert(func != NULL); + + /* sanity check */ + if(zk != NULL && !(func->info->flags & XC_FLAGS_HAVE_EXC)){ + fprintf(stderr, "Functional '%s' does not provide an implementation of Exc", + func->info->name); + exit(1); + } + + if(vrho != NULL && !(func->info->flags & XC_FLAGS_HAVE_VXC)){ + fprintf(stderr, "Functional '%s' does not provide an implementation of vxc", + func->info->name); + exit(1); + } + + if(v2rho2 != NULL && !(func->info->flags & XC_FLAGS_HAVE_FXC)){ + fprintf(stderr, "Functional '%s' does not provide an implementation of fxc", + func->info->name); + exit(1); + } + + if(v3rho3 != NULL && !(func->info->flags & XC_FLAGS_HAVE_KXC)){ + fprintf(stderr, "Functional '%s' does not provide an implementation of kxc", + func->info->name); + exit(1); + } + + /* initialize output */ + if(zk != NULL) + memset(zk, 0, np*sizeof(FLOAT)*func->n_zk); + + if(vrho != NULL) + memset(vrho, 0, np*sizeof(FLOAT)*func->n_vrho); + + if(v2rho2 != NULL) + memset(v2rho2, 0, np*sizeof(FLOAT)*func->n_v2rho2); + + if(v3rho3 != NULL) + memset(v3rho3, 0, np*sizeof(FLOAT)*func->n_v3rho3); + + + assert(func->info!=NULL && func->info->lda!=NULL); + + /* call the LDA routines */ + func->info->lda(func, np, rho, zk, vrho, v2rho2, v3rho3); +} + + +/* specializations */ +inline void +XC(lda_exc)(const XC(func_type) *p, int np, const FLOAT *rho, FLOAT *zk) +{ + XC(lda)(p, np, rho, zk, NULL, NULL, NULL); +} + +inline void +XC(lda_exc_vxc)(const XC(func_type) *p, int np, const FLOAT *rho, FLOAT *zk, FLOAT *vrho) +{ + XC(lda)(p, np, rho, zk, vrho, NULL, NULL); +} + +inline void +XC(lda_vxc)(const XC(func_type) *p, int np, const FLOAT *rho, FLOAT *vrho) +{ + XC(lda)(p, np, rho, NULL, vrho, NULL, NULL); +} + +inline void +XC(lda_fxc)(const XC(func_type) *p, int np, const FLOAT *rho, FLOAT *v2rho2) +{ + XC(lda)(p, np, rho, NULL, NULL, v2rho2, NULL); +} + +inline void +XC(lda_kxc)(const XC(func_type) *p, int np, const FLOAT *rho, FLOAT *v3rho3) +{ + XC(lda)(p, np, rho, NULL, NULL, NULL, v3rho3); +} + + +#ifdef SINGLE_PRECISION +# define DELTA_RHO 1e-4 +#else +# define DELTA_RHO 1e-6 +#endif + +/* get the xc kernel through finite differences */ +void +XC(lda_fxc_fd)(const XC(func_type) *func, int np, const FLOAT *rho, FLOAT *v2rho2) +{ + int i, ip; + + assert(func != NULL); + + for(ip=0; ipnspin; i++){ + FLOAT rho2[2], vc1[2], vc2[2]; + int j, js; + + j = (i+1) % 2; + js = (i==0) ? 0 : 2; + + rho2[i] = rho[i] + DELTA_RHO; + rho2[j] = (func->nspin == XC_POLARIZED) ? rho[j] : 0.0; + XC(lda_vxc)(func, 1, rho2, vc1); + + if(rho[i]<2.0*DELTA_RHO){ /* we have to use a forward difference */ + XC(lda_vxc)(func, 1, rho, vc2); + + v2rho2[js] = (vc1[i] - vc2[i])/(DELTA_RHO); + if(func->nspin == XC_POLARIZED && i==0) + v2rho2[1] = (vc1[j] - vc2[j])/(DELTA_RHO); + + }else{ /* centered difference (more precise) */ + rho2[i] = rho[i] - DELTA_RHO; + XC(lda_vxc)(func, 1, rho2, vc2); + + v2rho2[js] = (vc1[i] - vc2[i])/(2.0*DELTA_RHO); + if(func->nspin == XC_POLARIZED && i==0) + v2rho2[1] = (vc1[j] - vc2[j])/(2.0*DELTA_RHO); + } + } + + rho += func->n_rho; + v2rho2 += func->n_v2rho2; + } /* for(ip) */ +} + + +void +XC(lda_kxc_fd)(const XC(func_type) *func, int np, const FLOAT *rho, FLOAT *v3rho3) +{ + /* Kxc, this is a third order tensor with respect to the densities */ + int ip, i, j, n; + + assert(func != NULL); + + for(ip=0; ipnspin; i++){ + FLOAT rho2[2], vc1[2], vc2[2], vc3[2]; + + for(n=0; nnspin; n++) rho2[n] = rho[n]; + XC(lda_vxc)(func, 1, rho, vc2); + + rho2[i] += DELTA_RHO; + XC(lda_vxc)(func, 1, rho2, vc1); + + rho2[i] -= 2.0*DELTA_RHO; + XC(lda_vxc)(func, 1, rho2, vc3); + + for(j=0; jnspin; j++) + v3rho3[i*func->nspin + j] = (vc1[j] - 2.0*vc2[j] + vc3[j])/(DELTA_RHO*DELTA_RHO); + } + + rho += func->n_rho; + v3rho3 += func->n_v3rho3; + } /* for(ip) */ +} diff --git a/libxc-2.2.0/src/lda_c_1d_csc.c b/libxc-2.2.0/src/lda_c_1d_csc.c new file mode 100644 index 000000000..2741ca703 --- /dev/null +++ b/libxc-2.2.0/src/lda_c_1d_csc.c @@ -0,0 +1,217 @@ +/* + Copyright (C) 2006-2009 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_LDA_C_1D_CSC 18 /* Casula, Sorella, and Senatore 1D correlation */ + +typedef struct{ + int interaction; /* 0: exponentially screened; 1: soft-Coulomb */ + int ii; /* index in the parameter list */ + + FLOAT bb; /* screening parameter */ +} lda_c_1d_csc_params; + +static void +lda_c_1d_csc_init(XC(func_type) *p) +{ + assert(p != NULL && p->params == NULL); + p->params = malloc(sizeof(lda_c_1d_csc_params)); + + /* default value is soft-Coulomb with beta=1.0 */ + XC(lda_c_1d_csc_set_params)(p, 1, 1.0); +} + +void +XC(lda_c_1d_csc_set_params)(XC(func_type) *p, int interaction, FLOAT bb) +{ + lda_c_1d_csc_params *params; + + assert(p != NULL && p->params != NULL); + params = (lda_c_1d_csc_params *)(p->params); + + assert(params != NULL); + + params->interaction = -1; + params->ii = -1; + + if(interaction == 0){ + if (bb == 0.1) + params->ii = 0; + else if(bb == 0.3) + params->ii = 1; + else if(bb == 0.5) + params->ii = 2; + else if(bb == 0.75) + params->ii = 3; + else if(bb == 1.0) + params->ii = 4; + else if(bb == 2.0) + params->ii = 5; + else if(bb == 4.0) + params->ii = 6; + }else if(interaction == 1){ + if (bb == 0.5) + params->ii = 7 + 0; + else if(bb == 1.0) + params->ii = 7 + 1; + } + + if(params->ii < 0){ + fprintf(stderr, "Invalid value of parameters (inter,b) = (%d,%f) in lda_c_1d_csc_set_params", interaction, bb); + exit(1); + } + + params->interaction = interaction; + params->bb = bb; +} + +typedef struct { + FLOAT A, B, C, D, E, n1, n2, alpha, beta, m; +} lda_csc_param_t; + + +static void +csc_func(lda_csc_param_t *pp, XC(lda_work_t) *r, FLOAT *func, FLOAT *dfunc, FLOAT *d2func) +{ + FLOAT rs_n1, rs_n2, rs_m, arg, larg, den, aux, num; + FLOAT darg, dnum, dden, daux; + FLOAT d2arg, d2num, d2den, d2aux; + + rs_n1 = POW(r->rs[1], pp->n1); + rs_n2 = POW(r->rs[1], pp->n2); + rs_m = POW(r->rs[1], pp->m); + + arg = 1.0 + pp->alpha*r->rs[1] + pp->beta*rs_m; + larg = LOG(arg); + + den = pp->A + pp->B*r->rs[1] + pp->C*rs_n1 + pp->D*rs_n2; + aux = r->rs[1] + pp->E*r->rs[2]; + num = -aux*larg; + + *func = num/den; + *func /= 2.0; /* conversion from Ry to Hartree */ + + if(r->order < 1) return; + + darg = pp->alpha + pp->beta*pp->m*rs_m/r->rs[1]; + dden = pp->B + pp->C*pp->n1*rs_n1/r->rs[1] + pp->D*pp->n2*rs_n2/r->rs[1]; + daux = 1.0 + 2.0*pp->E*r->rs[1]; + dnum = -(daux*larg + aux*darg/arg); + + *dfunc = (dnum*den - dden*num)/(den*den); + *dfunc /= 2.0; /* conversion from Ry to Hartree */ + + if(r->order < 2) return; + + d2arg = pp->beta*pp->m*(pp->m - 1.0)*rs_m/r->rs[2]; + d2den = pp->C*pp->n1*(pp->n1 - 1.0)*rs_n1/r->rs[2] + pp->D*pp->n2*(pp->n2 - 1.0)*rs_n2/r->rs[2]; + d2aux = 2.0*pp->E; + d2num = -(2.0*daux*arg*darg - aux*darg*darg + d2aux*arg*arg*larg + aux*arg*d2arg)/(arg*arg); + + *d2func = (2.0*num*dden*dden - 2.0*den*dden*dnum - den*num*d2den + den*den*d2num)/(den*den*den); + *d2func /= 2.0; /* conversion from Ry to Hartree */ +} + +static inline void +func(const XC(func_type) *p, XC(lda_work_t) *r) +{ + lda_csc_param_t pp[2][9] = { + { /* paramagnetic */ + { 4.66, 0.0, 2.092, 3.735, 0.0, 1.379, 2.0, 23.63, 109.9, 1.837}, /* exponentially screened interaction */ + { 9.5, 0.0, 1.85, 5.64, 0.0, 0.882, 2.0, 5.346, 6.69, 3.110}, + { 16.40, 0.0, 2.90, 6.235, 0.0, 0.908, 2.0, 3.323, 2.23, 3.368}, + { 22.53, 0.0, 2.09, 7.363, 0.0, 0.906, 2.0, 2.029, 0.394, 4.070}, + { 32.1, 0.0, 3.77, 7.576, 0.0, 0.941, 2.0, 1.63, 0.198, 4.086}, + {110.5, 0.0, 7.90, 8.37, 0.0, 1.287, 2.0, 1.399, 0.0481, 4.260}, + {413.0, 0.0, 10.8, 7.99, 0.0, 1.549, 2.0, 1.308, 0.0120, 4.165}, + + { 7.40, 1.120, 1.890, 0.0964, 0.0250, 2.0, 3.0, 2.431, 0.0142, 2.922}, /* soft-Coulomb interaction */ + {18.40, 0.0, 7.501, 0.10185, 0.012827, 2.0, 3.0, 1.511, 0.258, 4.424} + },{ /* ferromagnetic */ + { 4.66, 0.0, 2.092, 3.735, 0.0, 1.379, 2.0, 23.63, 109.9, 1.837}, /* exponentially screened interaction */ + { 9.5, 0.0, 1.85, 5.64, 0.0, 0.882, 2.0, 5.346, 6.69, 3.110}, + { 16.40, 0.0, 2.90, 6.235, 0.0, 0.908, 2.0, 3.323, 2.23, 3.368}, + { 22.53, 0.0, 2.09, 7.363, 0.0, 0.906, 2.0, 2.029, 0.394, 4.070}, + { 32.1, 0.0, 3.77, 7.576, 0.0, 0.941, 2.0, 1.63, 0.198, 4.086}, + {110.5, 0.0, 7.90, 8.37, 0.0, 1.287, 2.0, 1.399, 0.0481, 4.260}, + {413.0, 0.0, 10.8, 7.99, 0.0, 1.549, 2.0, 1.308, 0.0120, 4.165}, + + { 7.40, 1.120, 1.890, 0.0964, 0.0250, 2.0, 3.0, 2.431, 0.0142, 2.922}, /* soft-Coulomb interaction */ + { 5.24, 0.0, 1.568, 0.12856, 0.003201, 2.0, 3.0, 0.0538, 1.56e-5, 2.958} + } + }; + + int ii; + FLOAT zk_p, zk_f, dzk_p, dzk_f, d2zk_p, d2zk_f; + + assert(p->params != NULL); + ii = ((lda_c_1d_csc_params *)p->params)->ii; + + csc_func(&(pp[0][ii]), r, &zk_p, &dzk_p, &d2zk_p); + r->zk = zk_p; + + if(p->nspin == XC_POLARIZED){ + csc_func(&(pp[1][ii]), r, &zk_f, &dzk_f, &d2zk_f); + + r->zk += (zk_f - zk_p)*r->zeta*r->zeta; + } + + if(r->order < 1) return; + + r->dedrs = dzk_p; + if(p->nspin == XC_POLARIZED){ + r->dedrs += (dzk_f - dzk_p)*r->zeta*r->zeta; + r->dedz = 2.0*(zk_f - zk_p)*r->zeta; + }else + r->dedz = 0.0; + + if(r->order < 2) return; + + r->d2edrs2 = d2zk_p; + if(p->nspin == XC_POLARIZED){ + r->d2edrs2 += (d2zk_f - d2zk_p)*r->zeta*r->zeta; + r->d2edrsz = 2.0*(dzk_f - dzk_p)*r->zeta; + r->d2edz2 = 2.0*(zk_f - zk_p); + }else{ + r->d2edrsz = 0.0; + r->d2edz2 = 0.0; + } + +} + +#define XC_DIMENSIONS 1 +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_c_1d_csc) = { + XC_LDA_C_1D_CSC, + XC_CORRELATION, + "Casula, Sorella & Senatore", + XC_FAMILY_LDA, + "M Casula, S Sorella, and G Senatore, Phys. Rev. B 74, 245427 (2006)", + XC_FLAGS_1D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 0.0, 0.0, 1e-32, + lda_c_1d_csc_init, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; diff --git a/libxc-2.2.0/src/lda_c_1d_loos.c b/libxc-2.2.0/src/lda_c_1d_loos.c new file mode 100644 index 000000000..45675040e --- /dev/null +++ b/libxc-2.2.0/src/lda_c_1d_loos.c @@ -0,0 +1,96 @@ +/* + Copyright (C) 2006-2009 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_LDA_C_1D_LOOS 26 /* P-F Loos correlation LDA */ + +static FLOAT kappa, eta0, eta1, eps0, eps1; +static FLOAT c0, c1, c2, c3; + +static void +lda_c_1d_loos_init(XC(func_type) *p) +{ + eta0 = -LOG(SQRT(2.0*M_PI)) - 3.0/4.0; + eta1 = 0.359933; + eps0 = -M_PI*M_PI/360.0; + eps1 = 0.00714; + + kappa = 0.3083; + + c0 = kappa*eta0; + c1 = 4.0*kappa*eta0 + kappa*SQRT(kappa)*eta1; + c2 = 5.0*eps0 + eps1/kappa; + c3 = eps1; +} + +static inline void +func(const XC(func_type) *p, XC(lda_work_t) *r) +{ + FLOAT aux, tt, tt2, tt3, omtt, omtt2, omtt3; + FLOAT dttdrs, dfdtt, d2ttdrs2, d2fdtt2; + + aux = SQRT(1.0 + 4.0*kappa*r->rs[1]); + tt = (aux - 1.0)/(2.0*kappa*r->rs[1]); + + tt2 = tt*tt; + tt3 = tt*tt2; + omtt = 1.0 - tt; + omtt2 = omtt*omtt; + omtt3 = omtt*omtt2; + + r->zk = tt2*(c0*omtt3 + c1*tt*omtt2 + c2*tt2*omtt + c3*tt3); + + if(r->order < 1) return; + + dttdrs = 1.0/(r->rs[1]*aux) + (1.0 - aux)/(2.0*kappa*r->rs[2]); + dfdtt = 2.0*c0*omtt3*tt + 3.0*(c1 - c0)*omtt2*tt2 + (4.0*c2 - 2.0*c1)*omtt*tt3 + (5.0*c3 - c2)*tt*tt3; + + r->dedrs = dfdtt*dttdrs; + r->dedz = 0.0; + + if(r->order < 2) return; + + d2ttdrs2 = -2.0*kappa/(r->rs[1]*aux*aux*aux) - 2.0/(r->rs[2]*aux) - (1.0 - aux)/(kappa*r->rs[1]*r->rs[2]); + d2fdtt2 = 2.0*c0*omtt3 + 6.0*(c1 - 2.0*c0)*omtt2*tt + 6.0*(2.0*c2 - 2.0*c1 + c0)*omtt*tt2 + 2.0*(c1 - 4.0*c2)*tt3 + 20.0*c3*tt3; + + r->d2edrs2 = d2fdtt2*dttdrs*dttdrs + dfdtt*d2ttdrs2; + r->d2edrsz = 0.0; + r->d2edz2 = 0.0; +} + +#define XC_DIMENSIONS 1 +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_c_1d_loos) = { + XC_LDA_C_1D_LOOS, + XC_CORRELATION, + "P-F Loos correlation LDA", + XC_FAMILY_LDA, + "P-F Loos, arXiv:1207.6849v1 [cond-mat.str-el] (2012)", + XC_FLAGS_1D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 0.0, 0.0, 1e-32, + lda_c_1d_loos_init, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; diff --git a/libxc-2.2.0/src/lda_c_2d_amgb.c b/libxc-2.2.0/src/lda_c_2d_amgb.c new file mode 100644 index 000000000..05c5e1c52 --- /dev/null +++ b/libxc-2.2.0/src/lda_c_2d_amgb.c @@ -0,0 +1,208 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include + +#include "util.h" + +/************************************************************************ + Correlation energy per particle and potentials for a homogeneous electron + gas in 2D, as parametrized by Attaccalite et al. +************************************************************************/ + +#define XC_LDA_C_2D_AMGB 15 /* Attaccalite et al */ + + +/* parameters necessary to the calculation */ +static FLOAT a[3] = { -0.1925, 0.117331, 0.0234188 }; +static FLOAT b[3] = { 0.0863136, -3.394e-2, -0.037093 }; +static FLOAT c[3] = { 0.0572384, -7.66765e-3, 0.0163618 }; +static FLOAT d[3] = { 0.0, 0.0, 0.0 }; +static FLOAT e[3] = { 1.0022, 0.4133, 1.424301 }; +static FLOAT f[3] = { -0.02069, 0.0, 0.0 }; +static FLOAT g[3] = { 0.33997, 6.68467e-2, 0.0 }; +static FLOAT h[3] = { 1.747e-2, 7.799e-4, 1.163099 }; +static FLOAT beta = 1.3386, ax = 0.0; + + +/* Initialization */ +static void +lda_c_2d_amgb_init(XC(func_type) *p) +{ + int i; + + /* initialize a couple of constants */ + for(i=0; i<3; i++) d[i] = -a[i]*h[i]; + ax = -4.0/(3.0*M_PI*M_SQRT2); +} + +static void +malpha(int order, int i, FLOAT *rs, + FLOAT *alpha, FLOAT *dalpha, FLOAT *d2alpha, FLOAT *d3alpha) +{ + FLOAT p1, dp1, d2p1, d3p1, p2, dp2, d2p2, d3p2; + FLOAT rs3, aux2, logp2; + + rs3 = rs[2]*rs[1]; + + p1 = b[i]*rs[1] + c[i]*rs[2] + d[i]*rs3; + p2 = e[i]*rs[1] + f[i]*rs[0]*rs[1] + g[i]*rs[2] + h[i]*rs3; + + aux2 = 1.0 + p2; + logp2 = LOG(1.0 + 1.0/p2); + + *alpha = a[i] + p1*logp2; + + if(order < 1) return; + + dp1 = b[i] + 2.0*c[i]*rs[1] + 3.0*d[i]*rs[2]; + dp2 = e[i] + 1.5*f[i]*rs[0] + 2.0*g[i]*rs[1] + 3.0*h[i]*rs[2]; + + *dalpha = dp1*logp2 - p1*dp2/(p2*aux2); + + if(order < 2) return; + + d2p1 = 2.0*c[i] + 6.0*d[i]*rs[1]; + d2p2 = 1.5*0.5*f[i]/rs[0] + 2.0*g[i] + 6.0*h[i]*rs[1]; + + *d2alpha = d2p1*logp2 + + (-2.0*p2*aux2*dp1*dp2 + p1*(1.0 + 2.0*p2)*dp2*dp2 - p1*p2*aux2*d2p2)/(p2*p2*aux2*aux2); + + if(order < 3) return; + + d3p1 = 6.0*d[i]; + d3p2 = -1.5*0.5*0.5*f[i]/(rs[0]*rs[1]) + 6.0*h[i]; + + *d3alpha = d3p1*logp2 + + (2*p1*(2.0 + 3.0*p2)*dp2*dp2*dp2 - 3.0*p2*aux2*dp2*(dp1*dp2 + p1*d2p2) + + aux2*aux2*(-6.0*p1*dp2*dp2*dp2 + 6.0*p2*dp2*(dp1*dp2 + p1*d2p2) + -p2*p2*(3.0*dp2*d2p1 + 3.0*dp1*d2p2 + p1*d3p2)))/ + (p2*p2*p2*aux2*aux2*aux2); +} + + +void +XC(lda_c_2d_amgb_func)(const XC(func_type) *p, XC(lda_work_t) *r) +{ + FLOAT ecp, vcp, fcp, kcp; + FLOAT ecf, vcf, fcf, kcf; + FLOAT alpha, dalpha, d2alpha, d3alpha; + FLOAT z2, z3, z4, fz, dfz, d2fz, d3fz; + FLOAT ex, dex, d2ex, d3ex; + FLOAT ex6, dex6drs, dex6dz, d2ex6drs2, d2ex6drsz, d2ex6dz2, d3ex6drs3, d3ex6drs2z, d3ex6drsz2, d3ex6dz3; + + malpha(r->order, 0, r->rs, &ecp, &vcp, &fcp, &kcp); + + if(p->nspin == XC_UNPOLARIZED) + r->zk = ecp; + else{ + /* get ferromagnetic values */ + malpha(r->order, 1, r->rs, &ecf, &vcf, &fcf, &kcf); + + /* get alpha_c */ + malpha(r->order, 2, r->rs, &alpha, &dalpha, &d2alpha, &d3alpha); + + z2 = r->zeta*r->zeta; + z3 = r->zeta*z2; + z4 = r->zeta*z3; + + ex = -4.0*M_SQRT2/(3.0*M_PI*r->rs[1]) ; + fz = 0.5*(POW(1.0 + r->zeta, 3.0/2.0) + POW(1.0 - r->zeta, 3.0/2.0)); + ex6 = ex*(fz - 1.0 - 3.0/8.0*z2 - 3.0/128.0*z4); + + r->zk = ecp + ecf*z2 + alpha*z4 + (EXP(-beta*r->rs[1]) - 1.0)*ex6; + } + + if(r->order < 1) return; + + if(p->nspin == XC_UNPOLARIZED) + r->dedrs = vcp; + else{ + dex = -ex/r->rs[1]; + + dfz = 3.0/4.0*(SQRT(1.0 + r->zeta) - SQRT(1.0 - r->zeta)); + + dex6drs = dex*(fz - 1.0 - (3.0/8.0)*z2 - (3.0/128.0)*z4); + dex6dz = ex*(dfz - 2.0*(3.0/8.0)*r->zeta - 4.0*(3.0/128.0)*z3); + + r->dedrs = vcp + vcf*z2 + dalpha*z4 + EXP(-beta*r->rs[1])*(dex6drs - beta*ex6) - dex6drs; + r->dedz = 2.0*ecf*r->zeta + 4.0*alpha*z3 + (EXP(-beta*r->rs[1]) - 1.0)*dex6dz; + } + + if(r->order < 2) return; + + if(p->nspin == XC_UNPOLARIZED) + r->d2edrs2 = fcp; + else{ + d2ex = -2.0*dex/r->rs[1]; + + d2fz = 3.0/8.0*(1.0 / SQRT(1.0 + r->zeta) + 1.0 / SQRT(1.0 - r->zeta)); + + d2ex6drs2 = d2ex*( fz - 1.0 - (3.0/8.0)*z2 - (3.0/128.0)*z4); + d2ex6drsz = dex*( dfz - 2.0*(3.0/8.0)*r->zeta - 4.0*(3.0/128.0)*z3); + d2ex6dz2 = ex*(d2fz - 2.0*(3.0/8.0) - 12.0*(3.0/128.0)*z2); + + r->d2edrs2 = fcp + fcf*z2 + d2alpha*z4 + + EXP(-beta*r->rs[1])*(d2ex6drs2 - 2.0*beta*dex6drs + beta*beta*ex6) - d2ex6drs2; + r->d2edrsz = 2.0*vcf*r->zeta + 4.0*dalpha*z3 + EXP(-beta*r->rs[1])*(d2ex6drsz - beta*dex6dz) - d2ex6drsz; + r->d2edz2 = 2.0*ecf + 12.0*alpha*z2 + (EXP(-beta*r->rs[1]) - 1.0)*d2ex6dz2; + } + + if(r->order < 3) return; + + if(p->nspin == XC_UNPOLARIZED) + r->d3edrs3 = kcp; + else{ + d3ex = -3.0*d2ex/r->rs[1]; + + d3fz = -3.0/16.0*(POW(1.0 + r->zeta, -3.0/2.0) - POW(1.0 - r->zeta, -3.0/2.0)); + + d3ex6drs3 = d3ex*( fz - 1.0 - (3.0/8.0)*z2 - (3.0/128.0)*z4); + d3ex6drs2z = d2ex*( dfz - 2.0*(3.0/8.0)*r->zeta - 4.0*(3.0/128.0)*z3); + d3ex6drsz2 = dex*(d2fz - 2.0*(3.0/8.0) - 12.0*(3.0/128.0)*z2); + d3ex6dz3 = ex*(d3fz - 24.0*(3.0/128.0)*r->zeta); + + r->d3edrs3 = kcp + kcf*z2 + d3alpha*z4 + + EXP(-beta*r->rs[1])*(d3ex6drs3 - 3.0*beta*d2ex6drs2 + 3.0*beta*beta*dex6drs - beta*beta*beta*ex6) - d3ex6drs3; + r->d3edrs2z = 2.0*fcf*r->zeta + 4.0*d2alpha*z3 + + EXP(-beta*r->rs[1])*(d3ex6drs2z - 2.0*beta*d2ex6drsz + beta*beta*dex6dz) - d3ex6drs2z; + r->d3edrsz2 = 2.0*vcf + 12.0*dalpha*z2 + EXP(-beta*r->rs[1])*(d3ex6drsz2 - beta*d2ex6dz2) - d3ex6drsz2; + r->d3edz3 = 24.0*alpha*r->zeta + (EXP(-beta*r->rs[1]) - 1.0)*d3ex6dz3; + } +} + +#define XC_DIMENSIONS 2 +#define func XC(lda_c_2d_amgb_func) +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_c_2d_amgb) = { + XC_LDA_C_2D_AMGB, + XC_CORRELATION, + "AMGB (for 2D systems)", + XC_FAMILY_LDA, + "C Attaccalite et al, Phys. Rev. Lett. 88, 256601 (2002)\n" + "C Attaccalite, PhD thesis", + XC_FLAGS_2D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-9, 0.0, 0.0, 1e-32, + lda_c_2d_amgb_init, + NULL, + work_lda, + NULL, + NULL +}; diff --git a/libxc-2.2.0/src/lda_c_2d_prm.c b/libxc-2.2.0/src/lda_c_2d_prm.c new file mode 100644 index 000000000..5d79a9abb --- /dev/null +++ b/libxc-2.2.0/src/lda_c_2d_prm.c @@ -0,0 +1,145 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +/************************************************************************ +Correlation functional by Pittalis, Rasanen & Marques for the 2D electron gas +************************************************************************/ + +/* TODO: convert this to an (rs, zeta) expression */ + +#define XC_LDA_C_2D_PRM 16 /* Pittalis, Rasanen & Marques correlation in 2D */ + +typedef struct{ + FLOAT N; + FLOAT c; +} lda_c_prm_params; + +/* parameters necessary to the calculation */ +static FLOAT prm_q = 3.9274; /* 2.258 */ + +/* Initialization */ +static void +lda_c_2d_prm_init(XC(func_type) *p) +{ + lda_c_prm_params *params; + + assert(p != NULL && p->params == NULL); + + p->params = malloc(sizeof(lda_c_prm_params)); + params = (lda_c_prm_params *) (p->params); + + params->N = 2.0; /* Random values. This should be set by the caller */ + params->c = 0.0; +} + + +void +XC(lda_c_2d_prm_set_params)(XC(func_type) *p, FLOAT N) +{ + lda_c_prm_params *params; + + assert(p != NULL && p->params != NULL); + params = (lda_c_prm_params *) (p->params); + + if(N <= 1){ + fprintf(stderr, "PRM functional can not be used for N_electrons <= 1\n"); + exit(1); + } + + params->N = N; + params->c = M_PI/(2.0*(N - 1.0)*prm_q*prm_q); /* Eq. (13) */ +} + + +static inline void +func(const XC(func_type) *p, XC(lda_work_t) *r) +{ + lda_c_prm_params *params; + + FLOAT beta, phi, c; + FLOAT t1, t2, t3, dt1dbeta, dt1dphi, dt3dphi, dbetadrs, dphidrs; + + assert(p->params != NULL); + params = (lda_c_prm_params *) (p->params); + + assert(params->N > 1.0); + + beta = prm_q/(M_SQRTPI*r->rs[1]); /* Eq. (4) */ + c = params->c; + + phi = beta/(beta + M_SQRTPI/2.0); + + t3 = phi - 1.0; /* original version has (phi-1)^2 */ + t2 = M_PI/(2.0*prm_q*prm_q); + + t1 = M_SQRTPI*beta*t3/(2.0*SQRT(2.0 + c)); + t1 += phi*(phi - 1.0)/(2.0 + c); + t1 += M_SQRTPI*phi*phi/(4.0*beta*POW(2.0 + c, 1.5)); + t1 += M_SQRTPI*beta*(phi - 1.0)/SQRT(1.0 + c); + t1 += phi/(1.0 + c); + t1 *= t2; + + r->zk = t1; + if(r->order < 1) return; + + dt1dbeta = M_SQRTPI*t3/(2.0*SQRT(2.0 + c)); + dt1dbeta -= M_SQRTPI*phi*phi/(4.0*beta*beta*POW(2.0 + c, 1.5)); + dt1dbeta += M_SQRTPI*(phi - 1.0)/SQRT(1.0 + c); + dt1dbeta *= t2; + + dt3dphi = 1.0; + dt1dphi = M_SQRTPI*beta/(2.0*SQRT(2.0 + c))*dt3dphi; + dt1dphi += (2.0*phi - 1.0)/(2.0 + c); + dt1dphi += M_SQRTPI*2.0*phi/(4.0*beta*POW(2.0 + c, 1.5)); + dt1dphi += M_SQRTPI*beta/SQRT(1.0 + c); + dt1dphi += 1.0/(1.0 + c); + dt1dphi *= t2; + + dbetadrs = -prm_q/(M_SQRTPI*r->rs[2]); + dphidrs = M_SQRTPI/(2.0*(beta + M_SQRTPI/2.0)*(beta + M_SQRTPI/2.0)); + dphidrs *= dbetadrs; + + r->dedrs = dt1dbeta*dbetadrs + dt1dphi*dphidrs; + r->dedz = 0.0; /* no spin for the moment */ + + if(r->order < 2) return; +} + +#define XC_DIMENSIONS 2 +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_c_2d_prm) = { + XC_LDA_C_2D_PRM, + XC_CORRELATION, + "PRM (for 2D systems)", + XC_FAMILY_LDA, + "S Pittalis, E Rasanen, and MAL Marques, Phys. Rev. B 78, 195322 (2008)", + XC_FLAGS_2D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 0.0, 0.0, 1e-32, + lda_c_2d_prm_init, + NULL, + work_lda, + NULL, + NULL +}; diff --git a/libxc-2.2.0/src/lda_c_gombas.c b/libxc-2.2.0/src/lda_c_gombas.c new file mode 100644 index 000000000..d50643949 --- /dev/null +++ b/libxc-2.2.0/src/lda_c_gombas.c @@ -0,0 +1,76 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include "util.h" + +/************************************************************************ + Wigner's parametrization from the low density limit +************************************************************************/ + +#define XC_LDA_C_GOMBAS 24 /* Gombas parametrization */ + +static inline void +func(const XC(func_type) *p, XC(lda_work_t) *r) +{ + static FLOAT a1=-0.0357, a2=0.0562, b1=-0.0311, b2=2.39; + FLOAT t1, t2, cnst_rs, x; + + cnst_rs = CBRT(4.0*M_PI/3.0); + x = cnst_rs*r->rs[1]; + + t1 = 1.0 + a2*x; + t2 = x + b2; + + r->zk = a1/t1 + b1*LOG(t2/x); + + if(r->order < 1) return; + + r->dedrs = -a1*a2/(t1*t1) - b1*b2/(x*t2); + r->dedrs*= cnst_rs; + r->dedz = 0.0; + + if(r->order < 2) return; + + r->d2edrs2 = 2.0*a1*a2*a2/(t1*t1*t1) + b1*(1.0/(x*x) - 1.0/(t2*t2)); + r->d2edrs2*= cnst_rs*cnst_rs; + r->d2edrsz = r->d2edz2 = 0.0; + + if(r->order < 3) return; + + r->d3edrs3 = -6*a1*a2*a2*a2/(t1*t1*t1*t1) - 2.0*b1/(x*x*x) + 2.0*b1/(t2*t2*t2); + r->d3edrs3*= cnst_rs*cnst_rs*cnst_rs; + r->d3edrs2z = r->d3edrsz2 = r->d3edz3 = 0.0; +} + +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_c_gombas) = { + XC_LDA_C_GOMBAS, + XC_CORRELATION, + "Gombas", + XC_FAMILY_LDA, + "P. Gombas, Pseudopotentiale (Springer-Verlag, Wien, New York, 1967)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 0.0, 0.0, 1e-32, + NULL, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; diff --git a/libxc-2.2.0/src/lda_c_hl.c b/libxc-2.2.0/src/lda_c_hl.c new file mode 100644 index 000000000..213683607 --- /dev/null +++ b/libxc-2.2.0/src/lda_c_hl.c @@ -0,0 +1,178 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + + +/************************************************************************ + L. Hedin and B.I. Lundqvist + O. Gunnarsson and B. I. Lundqvist +************************************************************************/ + +#define XC_LDA_C_HL 4 /* Hedin & Lundqvist */ +#define XC_LDA_C_GL 5 /* Gunnarson & Lundqvist */ +#define XC_LDA_C_vBH 17 /* von Barth & Hedin */ + +static void +hl_f(int func, int order, int i, FLOAT rs, FLOAT *zk, FLOAT *drs, FLOAT *d2rs, FLOAT *d3rs) +{ + static const + FLOAT r[3][2] = {{21.0, 21.0}, /* HL unpolarized only*/ + {11.4, 15.9}, /* GL */ + {30, 75 }}; /* vBH */ + static const + FLOAT c[3][2] = {{0.0225, 0.0225}, /* HL unpolarized only */ + {0.0333, 0.0203}, /* GL */ + {0.0252, 0.0127}}; /* vBH */ + + FLOAT a, x, x2, x3; + + x = rs/r[func][i]; + x2 = x*x; + x3 = x2*x; + + a = LOG(1.0 + 1.0/x); + *zk = -c[func][i]*((1.0 + x3)*a - x2 + 0.5*x - 1.0/3.0); + + if(order < 1) return; + + *drs = 3.0*x*(x*a - 1) - 1/x + 3.0/2.0; + *drs *= -c[func][i]/r[func][i]; + + if(order < 2) return; + + *d2rs = -3.0 + 1.0/x2 - 3.0*x/(1.0 + x) + 6.0*x*a; + *d2rs *= -c[func][i]/(r[func][i]*r[func][i]); + + if(order < 3) return; + + *d3rs = -2.0/x3 + 3.0*x/((1.0 + x)*(1.0 + x)) - 9.0/(1.0 + x) + 6.0*a; + *d3rs *= -c[func][i]/(r[func][i]*r[func][i]*r[func][i]); +} + + +void +XC(lda_c_hl_func)(const XC(func_type) *p, XC(lda_work_t) *r) +{ + int func; + FLOAT ecp, vcp, fcp, kcp; + FLOAT ecf, vcf, fcf, kcf; + FLOAT fz, dfz, d2fz, d3fz; + + switch(p->info->number){ + case XC_LDA_C_GL: func = 1; break; + case XC_LDA_C_vBH: func = 2; break; + default: func = 0; /* original HL */ + } + + hl_f(func, r->order, 0, r->rs[1], &ecp, &vcp, &fcp, &kcp); + + if(p->nspin == XC_UNPOLARIZED) + r->zk = ecp; + else{ + /* get ferromagnetic values */ + hl_f(func, r->order, 1, r->rs[1], &ecf, &vcf, &fcf, &kcf); + + fz = FZETA(r->zeta); + r->zk = ecp + (ecf - ecp)*fz; + } + + if(r->order < 1) return; + + if(p->nspin == XC_UNPOLARIZED) + r->dedrs = vcp; + else{ + dfz = DFZETA(r->zeta); + r->dedrs = vcp + (vcf - vcp)*fz; + r->dedz = (ecf - ecp)*dfz; + } + + if(r->order < 2) return; + + if(p->nspin == XC_UNPOLARIZED) + r->d2edrs2 = fcp; + else{ + d2fz = D2FZETA(r->zeta); + r->d2edrs2 = fcp + (fcf - fcp)*fz; + r->d2edrsz = (vcf - vcp)*dfz; + r->d2edz2 = (ecf - ecp)*d2fz; + } + + if(r->order < 3) return; + + if(p->nspin == XC_UNPOLARIZED) + r->d3edrs3 = kcp; + else{ + d3fz = D3FZETA(r->zeta); + r->d3edrs3 = kcp + (kcf - kcp)*fz; + r->d3edrs2z = (fcf - fcp)*dfz; + r->d3edrsz2 = (vcf - vcp)*d2fz; + r->d3edz3 = (ecf - ecp)*d3fz; + } +} + +#define func XC(lda_c_hl_func) +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_c_hl) = { + XC_LDA_C_HL, + XC_CORRELATION, + "Hedin & Lundqvist", + XC_FAMILY_LDA, + /* can someone get me this paper, so I can find all coefficients? */ + "L Hedin and BI Lundqvist, J. Phys. C 4, 2064 (1971)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-16, 0.0, 0.0, 1e-32, + NULL, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_c_gl) = { + XC_LDA_C_GL, + XC_CORRELATION, + "Gunnarson & Lundqvist", + XC_FAMILY_LDA, + "O Gunnarsson and BI Lundqvist, PRB 13, 4274 (1976)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-12, 0.0, 0.0, 1e-32, + NULL, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_c_vbh) = { + XC_LDA_C_vBH, + XC_CORRELATION, + "von Barth & Hedin", + XC_FAMILY_LDA, + "U von Barth and L Hedin, J. Phys. C: Solid State Phys. 5, 1629 (1972)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-14, 0.0, 0.0, 1e-32, + NULL, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; diff --git a/libxc-2.2.0/src/lda_c_ml1.c b/libxc-2.2.0/src/lda_c_ml1.c new file mode 100644 index 000000000..1e710044b --- /dev/null +++ b/libxc-2.2.0/src/lda_c_ml1.c @@ -0,0 +1,118 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include + +#include "util.h" + +/************************************************************************ + Correlation energy of Proynov and Salahub +************************************************************************/ + +#define XC_LDA_C_ML1 22 /* Modified LSD (version 1) of Proynov and Salahub */ +#define XC_LDA_C_ML2 23 /* Modified LSD (version 2) of Proynov and Salahub */ + +static void +lda_c_ml1_init(XC(func_type) *p) +{ + switch(p->info->number){ + case XC_LDA_C_ML2: + p->func = 1; break; + default: + p->func = 0; break; + } +} + + +/* the functional */ +static inline void +func(const XC(func_type) *p, XC(lda_work_t) *r) +{ + static FLOAT fc[2] = {0.2026, 0.266}, q[2] = {0.084, 0.5}, C = 6.187335; + static FLOAT b[6] = {2.763169, 1.757515, 1.741397, 0.568985, 1.572202, 1.885389}; + + FLOAT cnst_rs, nn, zp3, zm3, alpha, beta, gamma, k, Q; + FLOAT dalpha, dbeta, dQ, dkdrs, dkdz; + + cnst_rs = CBRT(3.0/(4*M_PI)); + + alpha = fc[p->func]*(POW(1 + r->zeta, q[p->func]) + POW(1.0 - r->zeta, q[p->func])); + + zp3 = CBRT(1.0 + r->zeta); + zm3 = CBRT(1.0 - r->zeta); + beta = zp3*zm3/(zp3 + zm3); + + k = C*alpha*beta*cnst_rs/r->rs[1]; + + Q = (k == 0.0) ? -FLT_MAX : -b[0]/(1.0 + b[1]*k) + b[2]/k*LOG(1.0 + b[3]/k) + b[4]/k - b[5]/(k*k); + + gamma = (1 - r->zeta*r->zeta)/4.0; + nn = POW(cnst_rs/r->rs[1], 3); + r->zk = 0.5*nn*gamma*Q; + + if(r->order < 1) return; + + dQ = (k == 0.0) ? FLT_MAX : b[0]*b[1]/((1.0 + b[1]*k)*(1.0 + b[1]*k)) - b[2]*b[3]/((b[3] + k)*(k*k)) + - b[2]*LOG(1.0 + b[3]/k)/(k*k) - b[4]/(k*k) + 2.0*b[5]/(k*k*k); + + dkdrs = -k/r->rs[1]; + + if(ABS(r->zeta) == 1.0) + dalpha = dbeta = 0.0; + else{ + dalpha = fc[p->func]*q[p->func]*(POW(1 + r->zeta, q[p->func] - 1.0) - POW(1.0 - r->zeta, q[p->func] - 1.0)); + dbeta = (-2.0*r->zeta - zm3*zm3*zp3 + zm3*zp3*zp3)/(3.0*zm3*zm3*zp3*zp3*(zp3 + zm3)); + } + dkdz = C*(dalpha*beta + alpha*dbeta)*cnst_rs/r->rs[1]; + + r->dedrs = 0.5*nn*gamma*(dQ*dkdrs - 3.0*Q/r->rs[1]); + r->dedz = 0.5*nn*(-r->zeta*Q/2.0 + gamma*dQ*dkdz); +} + +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_c_ml1) = { + XC_LDA_C_ML1, + XC_CORRELATION, + "Modified LSD (version 1) of Proynov and Salahub", + XC_FAMILY_LDA, + "EI Proynov and D Salahub, Phys. Rev. B 49, 7874 (1994)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 0.0, 0.0, 1e-32, + lda_c_ml1_init, + NULL, + work_lda, + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_c_ml2) = { + XC_LDA_C_ML2, + XC_CORRELATION, + "Modified LSD (version 2) of Proynov and Salahub", + XC_FAMILY_LDA, + "EI Proynov and D Salahub, Phys. Rev. B 49, 7874 (1994)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 0.0, 0.0, 1e-32, + lda_c_ml1_init, + NULL, + work_lda, + NULL, + NULL +}; diff --git a/libxc-2.2.0/src/lda_c_pw.c b/libxc-2.2.0/src/lda_c_pw.c new file mode 100644 index 000000000..9e69338d8 --- /dev/null +++ b/libxc-2.2.0/src/lda_c_pw.c @@ -0,0 +1,301 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +/************************************************************************ + Correlation energy per-particle and potential of a HEG as parameterized + by + J.P. Perdew & Y. Wang + Ortiz & Ballone + +Note that the PW modified corresponds to the version of PW used in the +original PBE routine. This amounts to adding some more digits in some of +the constants of PW. +************************************************************************/ + +#define XC_LDA_C_PW 12 /* Perdew & Wang */ +#define XC_LDA_C_PW_MOD 13 /* Perdew & Wang (Modified) */ +#define XC_LDA_C_OB_PW 14 /* Ortiz & Ballone (PW) */ +#define XC_LDA_C_PW_RPA 25 /* Perdew & Wang fit of the RPA */ + +static void +lda_c_pw_init(XC(func_type) *p) +{ + switch(p->info->number){ + case XC_LDA_C_PW: p->func = 0; break; + case XC_LDA_C_PW_MOD: p->func = 1; break; + case XC_LDA_C_OB_PW: p->func = 2; break; + case XC_LDA_C_PW_RPA: p->func = 3; break; + default: + fprintf(stderr, "Internal error in lda_c_pw\n"); + exit(1); + } +} + + +/* Function g defined by Eq. 10 of the original paper, + and its derivative with respect to rs, Eq. A5 */ +static void g(int func, int order, int k, FLOAT *rs, + FLOAT *f, FLOAT *dfdrs, FLOAT *d2fdrs2, FLOAT *d3fdrs3) +{ + static FLOAT pp[4][3] = + { + {1.0, 1.0, 1.0}, /* PW */ + {1.0, 1.0, 1.0}, /* PW (modified) */ + {1.0, 1.0, 1.0}, /* OB */ + {0.75, 0.75, 1.0} /* PW_RPA */ + }; + static FLOAT a[4][3] = + { + {0.031091, 0.015545, 0.016887}, /* PW */ + {0.0310907, 0.01554535, 0.0168869}, /* PW (modified) */ + {0.031091, 0.015545, 0.016887}, /* OB */ + {0.031091, 0.015545, 0.016887} /* PW_RPA */ + }; + static FLOAT alpha[4][3] = + { + {0.21370, 0.20548, 0.11125}, /* PW */ + {0.21370, 0.20548, 0.11125}, /* PW (modified) */ + {0.026481, 0.022465, 0.11125}, /* OB */ + {0.082477, 0.035374, 0.028829} /* PW_RPA */ + }; + static FLOAT beta[4][3][4] = { + { + { 7.5957, 3.5876, 1.6382, 0.49294}, /* PW */ + {14.1189, 6.1977, 3.3662, 0.62517}, + {10.357, 3.6231, 0.88026, 0.49671} + },{ + { 7.5957, 3.5876, 1.6382, 0.49294}, /* PW (modified) */ + {14.1189, 6.1977, 3.3662, 0.62517}, + {10.357, 3.6231, 0.88026, 0.49671} + },{ + { 7.5957, 3.5876, -0.46647, 0.13354}, /* OB */ + {14.1189, 6.1977, -0.56043, 0.11313}, + {10.357, 3.6231, 0.88026, 0.49671} + },{ + { 5.1486, 1.6483, 0.23647, 0.20614}, /* PW_RPA */ + { 6.4869, 1.3083, 0.15180, 0.082349}, + {10.357, 3.6231, 0.47990, 0.12279}, + }}; + + FLOAT q0, dq0, q1, dq1, q2, d2q1, d3q1, aux1; + + q0 = -2.0*a[func][k]*(1.0 + alpha[func][k]*rs[1]); + q1 = 2.0*a[func][k]; + q1 *= beta[func][k][0]*rs[0] + beta[func][k][1]*rs[1] + + beta[func][k][2]*rs[0]*rs[1] + beta[func][k][3]*POW(rs[1], 1.0 + pp[func][k]); + q2 = LOG(1.0 + 1.0/q1); + + /* the function */ + *f = q0*q2; + + if(order < 1) return; /* nothing else to do */ + + aux1 = q1*(1.0 + q1); + + /* and now the derivative */ + dq0 = -2.0*a[func][k]*alpha[func][k]; + dq1 = a[func][k]*(beta[func][k][0]/rs[0] + 2.0*beta[func][k][1] + + 3.0*beta[func][k][2]*rs[0] + + 2.0*(1.0 + pp[func][k])*beta[func][k][3]*POW(rs[1], pp[func][k])); + + *dfdrs = dq0*q2 - q0*dq1/aux1; + + if(order < 2) return; + + d2q1 = a[func][k]*(-beta[func][k][0]/(2.0*rs[0]*rs[1]) + + 3.0*beta[func][k][2]/(2.0*rs[0]) + + 2.0*(1.0 + pp[func][k])*pp[func][k]*beta[func][k][3]*POW(rs[1], pp[func][k] - 1.0)); + + *d2fdrs2 = 1.0/aux1*(-2*dq0*dq1 - q0*d2q1 + q0*(2.0*q1 + 1.0)*dq1*dq1/aux1); + + if(order < 3) return; + + d3q1 = (3.0/4.0)*a[func][k]*(beta[func][k][0]/(rs[0]*rs[2]) - beta[func][k][2]/(rs[0]*rs[1])); + if(pp[func][k] != 1.0) + d3q1 += a[func][k]*2.0*(1.0 + pp[func][k])*pp[func][k]*(pp[func][k] - 1.0)*beta[func][k][3]*POW(rs[1], pp[func][k] - 2.0); + + *d3fdrs3 = 2.0*q0*(2.0 + 3.0*q1)*dq1*dq1*dq1; + *d3fdrs3 += -3.0*aux1*dq1*(dq0*dq1 + q0*d2q1); + *d3fdrs3 += (1.0 + q1)*(1.0 + q1)* + (-6.0*q0*dq1*dq1*dq1 + 6.0*q1*dq1*(dq0*dq1 + q0*d2q1) + -q1*q1*(3.0*dq0*d2q1 + q0*d3q1)); + *d3fdrs3 /= aux1*aux1*aux1; +} + + +/* the functional */ +void +XC(lda_c_pw_func)(const XC(func_type) *p, XC(lda_work_t) *r) +{ + static FLOAT fz20[4] = { + 1.709921, /* PW */ + 1.709920934161365617563962776245, /* PW (modified) */ + 1.709921, /* OB */ + 1.709921 /* PW_RPA */ + }; + + FLOAT ecp, vcp, fcp, kcp; + FLOAT ecf, vcf, fcf, kcf; + FLOAT alpha, dalpha, d2alpha, d3alpha; + FLOAT z2, z3, z4, fz, dfz, d2fz, d3fz; + + /* ec(rs, 0) */ + g(p->func, r->order, 0, r->rs, &ecp, &vcp, &fcp, &kcp); + + if(p->nspin == XC_UNPOLARIZED) + r->zk = ecp; + else{ + /* get ferromagnetic values */ + g(p->func, r->order, 1, r->rs, &ecf, &vcf, &fcf, &kcf); + + /* get -alpha_c */ + g(p->func, r->order, 2, r->rs, &alpha, &dalpha, &d2alpha, &d3alpha); + alpha *= -1.0; + + fz = FZETA(r->zeta); + z2 = r->zeta*r->zeta; + z3 = r->zeta*z2; + z4 = r->zeta*z3; + r->zk = ecp + z4*fz*(ecf - ecp - alpha/fz20[p->func]) + fz*alpha/fz20[p->func]; + } + + if(r->order < 1) return; + + if(p->nspin == XC_UNPOLARIZED){ + r->dedrs = vcp; + r->dedz = 0.0; + }else{ + dalpha *= -1.0; + + dfz = DFZETA(r->zeta); + r->dedrs = vcp + z4*fz*(vcf - vcp - dalpha/fz20[p->func]) + fz*dalpha/fz20[p->func]; + r->dedz = (4.0*z3*fz + z4*dfz)*(ecf - ecp - alpha/fz20[p->func]) + + dfz*alpha/fz20[p->func]; + } + + if(r->order < 2) return; + + if(p->nspin == XC_UNPOLARIZED){ + r->d2edrs2 = fcp; + r->d2edrsz = 0.0; + r->d2edz2 = 0.0; + }else{ + d2alpha *= -1.0; + + d2fz = D2FZETA(r->zeta); + r->d2edrs2 = fcp + z4*fz*(fcf - fcp - d2alpha/fz20[p->func]) + fz*d2alpha/fz20[p->func]; + r->d2edrsz = (4.0*z3*fz + z4*dfz)*(vcf - vcp - dalpha/fz20[p->func]) + + dfz*dalpha/fz20[p->func]; + r->d2edz2 = (12.0*z2*fz + 8.0*z3*dfz + z4*d2fz)*(ecf - ecp - alpha/fz20[p->func]) + + d2fz*alpha/fz20[p->func]; + } + + if(r->order < 3) return; + + if(p->nspin == XC_UNPOLARIZED){ + r->d3edrs3 = kcp; + r->d3edrs2z = 0.0; + r->d3edrsz2 = 0.0; + r->d3edz3 = 0.0; + }else{ + d3alpha *= -1.0; + + d3fz = D3FZETA(r->zeta); + + r->d3edrs3 = kcp + z4*fz*(kcf - kcp - d3alpha/fz20[p->func]) + fz*d3alpha/fz20[p->func]; + r->d3edrs2z = (4.0*z3*fz + z4*dfz)*(fcf - fcp - d2alpha/fz20[p->func]) + + dfz*d2alpha/fz20[p->func]; + r->d3edrsz2 = (12.0*z2*fz + 8.0*z3*dfz + z4*d2fz)*(vcf - vcp - dalpha/fz20[p->func]) + + d2fz*dalpha/fz20[p->func]; + r->d3edz3 = (24.0*r->zeta*fz + 36.0*z2*dfz + 12*z3*d2fz + z4*d3fz)*(ecf - ecp - alpha/fz20[p->func]) + + d3fz*alpha/fz20[p->func]; + } +} + +#define func XC(lda_c_pw_func) +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_c_pw) = { + XC_LDA_C_PW, + XC_CORRELATION, + "Perdew & Wang", + XC_FAMILY_LDA, + "JP Perdew and Y Wang, Phys. Rev. B 45, 13244 (1992)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-25, 0.0, 0.0, 1e-32, + lda_c_pw_init, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_c_pw_mod) = { + XC_LDA_C_PW_MOD, + XC_CORRELATION, + "Perdew & Wang (modified)", + XC_FAMILY_LDA, + "JP Perdew and Y Wang, Phys. Rev. B 45, 13244 (1992)\n" + "Added extra digits to some constants as in the PBE routine\n" + "http://dft.rutgers.edu/pubs/PBE.asc", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-26, 0.0, 0.0, 1e-32, + lda_c_pw_init, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_c_ob_pw) = { + XC_LDA_C_OB_PW, + XC_CORRELATION, + "Ortiz & Ballone (PW parametrization)", + XC_FAMILY_LDA, + "G Ortiz and P Ballone, Phys. Rev. B 50, 1391 (1994)\n" + "G Ortiz and P Ballone, Phys. Rev. B 56, 9970(E) (1997)\n" + "JP Perdew and Y Wang, Phys. Rev. B 45, 13244 (1992)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-26, 0.0, 0.0, 1e-32, + lda_c_pw_init, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_c_pw_rpa) = { + XC_LDA_C_PW_RPA, + XC_CORRELATION, + "Perdew & Wang (fit to the RPA energy)", + XC_FAMILY_LDA, + "JP Perdew and Y Wang, Phys. Rev. B 45, 13244 (1992)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-27, 0.0, 0.0, 1e-32, + lda_c_pw_init, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; diff --git a/libxc-2.2.0/src/lda_c_pz.c b/libxc-2.2.0/src/lda_c_pz.c new file mode 100644 index 000000000..65c03fd18 --- /dev/null +++ b/libxc-2.2.0/src/lda_c_pz.c @@ -0,0 +1,251 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include + +#include "util.h" + +/************************************************************************ + Correlation energy per particle and potential of a HEG as parametrized + by + Perdew & Zunger + Ortiz & Ballone +************************************************************************/ + +#define XC_LDA_C_PZ 9 /* Perdew & Zunger */ +#define XC_LDA_C_PZ_MOD 10 /* Perdew & Zunger (Modified) */ +#define XC_LDA_C_OB_PZ 11 /* Ortiz & Ballone (PZ) */ + +typedef struct { + FLOAT gamma[2]; + FLOAT beta1[2]; + FLOAT beta2[2]; + FLOAT a[2], b[2], c[2], d[2]; +} pz_consts_type; + +static pz_consts_type +pz_consts[3] = { + { /* PZ Original */ + {-0.1423, -0.0843}, /* gamma */ + { 1.0529, 1.3981}, /* beta1 */ + { 0.3334, 0.2611}, /* beta2 */ + { 0.0311, 0.01555}, /* a */ + {-0.048, -0.0269}, /* b */ + { 0.0020, 0.0007}, /* c */ + {-0.0116, -0.0048} /* d */ + }, { /* PZ Modified */ + {-0.1423, -0.0843}, + { 1.0529, 1.3981}, + { 0.3334, 0.2611}, + { 0.0311, 0.01555}, + {-0.048, -0.0269}, + { 0.0020191519406228, 0.00069255121311694}, + {-0.0116320663789130, -0.00480126353790614} + }, { /* OB */ + {-0.103756, -0.065951}, + { 0.56371, 1.11846}, + { 0.27358, 0.18797}, + { 0.031091, 0.015545}, + {-0.046644, -0.025599}, + { 0.00419, 0.00329}, /* the sign of c[0] and c[1] is different from [2], but is consistent + with the continuity requirement. There is nothing in [3] about this. */ + {-0.00983, -0.00300} + } +}; + + +/* Auxiliary functions to handle parametrizations */ +static void +ec_pot_low(pz_consts_type *X, int order, int i, FLOAT *rs, + FLOAT *zk, FLOAT *dedrs, FLOAT *d2edrs2, FLOAT *d3edrs3) +{ + FLOAT f1, f12, beta12, beta22; + + /* Eq. C3 */ + f1 = 1.0 + X->beta1[i]*rs[0] + X->beta2[i]*rs[1]; + *zk = X->gamma[i]/f1; + + if(order < 1) return; + + *dedrs = -X->gamma[i]; + *dedrs *= X->beta1[i]/(2.0*rs[0]) + X->beta2[i]; + *dedrs /= f1*f1; + + if(order < 2) return; + + f12 = f1*f1; + beta12 = X->beta1[i]*X->beta1[i]; + beta22 = X->beta2[i]*X->beta2[i]; + + *d2edrs2 = X->gamma[i]; + *d2edrs2 *= X->beta1[i] + 3.0*beta12*rs[0] + + 9.0*X->beta1[i]*X->beta2[i]*rs[1] + 8.0*beta22*rs[0]*rs[1]; + *d2edrs2 /= 4.0*rs[0]*rs[1]*f12*f1; + + if(order < 3) return; + + *d3edrs3 = -3.0*X->gamma[i]; + *d3edrs3 *= 5.0*beta12*X->beta1[i]*rs[1] + 16.0*beta22*X->beta2[i]*rs[0]*rs[2] + + 4.0*beta12*rs[0]*(1.0 + 5.0*X->beta2[i]*rs[1]) + + X->beta1[i]*(1.0 + X->beta2[i]*rs[1]*(6.0 + 29.0*X->beta2[i]*rs[1])); + *d3edrs3 /= 8.0*rs[0]*rs[2]*f12*f12; +} + + +static void +ec_pot_high(pz_consts_type *X, int order, int i, FLOAT *rs, + FLOAT *zk, FLOAT *dedrs, FLOAT *d2edrs2, FLOAT *d3edrs3) +{ + FLOAT lrs = LOG(rs[1]); + + /* Eq. [1].C5 */ + *zk = X->a[i]*lrs + X->b[i] + X->c[i]*rs[1]*lrs + X->d[i]*rs[1]; + + if(order < 1) return; + + *dedrs = X->a[i]/rs[1] + (X->c[i] + X->d[i]) + X->c[i]*lrs; + + if(order < 2) return; + + *d2edrs2 = -X->a[i]/rs[2] + X->c[i]/rs[1]; + + if(order < 3) return; + + *d3edrs3 = 2.0*X->a[i]/(rs[1]*rs[2]) - X->c[i]/rs[2]; +} + + +/* the functional */ +void +XC(lda_c_pz_func)(const XC(func_type) *p, XC(lda_work_t) *r) +{ + int func; + FLOAT ecp, vcp, fcp, kcp; + FLOAT ecf, vcf, fcf, kcf; + FLOAT fz, dfz, d2fz, d3fz; + + func= p->info->number - XC_LDA_C_PZ; + assert(func==0 || func==1 || func==2); + + if(r->rs[1] >= 1.0) + ec_pot_low (&pz_consts[func], r->order, 0, r->rs, &ecp, &vcp, &fcp, &kcp); + else + ec_pot_high(&pz_consts[func], r->order, 0, r->rs, &ecp, &vcp, &fcp, &kcp); + + if(p->nspin == XC_UNPOLARIZED) + r->zk = ecp; + else{ + fz = FZETA(r->zeta); + + /* get ferromagnetic values */ + if(r->rs[1] >= 1.0) + ec_pot_low (&pz_consts[func], r->order, 1, r->rs, &ecf, &vcf, &fcf, &kcf); + else + ec_pot_high(&pz_consts[func], r->order, 1, r->rs, &ecf, &vcf, &fcf, &kcf); + + r->zk = ecp + (ecf - ecp)*fz; + } + + if(r->order < 1) return; + + if(p->nspin == XC_UNPOLARIZED) + r->dedrs = vcp; + else{ + dfz = DFZETA(r->zeta); + + r->dedrs = vcp + (vcf - vcp)*fz; + r->dedz = (ecf - ecp)*dfz; + } + + if(r->order < 2) return; + + if(p->nspin == XC_UNPOLARIZED) + r->d2edrs2 = fcp; + else{ + d2fz = D2FZETA(r->zeta); + + r->d2edrs2 = fcp + (fcf - fcp)*fz; + r->d2edrsz = (vcf - vcp)*dfz; + r->d2edz2 = (ecf - ecp)*d2fz; + } + + if(r->order < 3) return; + + if(p->nspin == XC_UNPOLARIZED) + r->d3edrs3 = kcp; + else{ + d3fz = D3FZETA(r->zeta); + + r->d3edrs3 = kcp + (kcf - kcp)*fz; + r->d3edrs2z = (fcf - fcp)*dfz; + r->d3edrsz2 = (vcf - vcp)*d2fz; + r->d3edz3 = (ecf - ecp)*d3fz; + } +} + +#define func XC(lda_c_pz_func) +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_c_pz) = { + XC_LDA_C_PZ, + XC_CORRELATION, + "Perdew & Zunger", + XC_FAMILY_LDA, + "Perdew and Zunger, Phys. Rev. B 23, 5048 (1981)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 0.0, 0.0, 1e-32, + NULL, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_c_pz_mod) = { + XC_LDA_C_PZ_MOD, + XC_CORRELATION, + "Perdew & Zunger (Modified)", + XC_FAMILY_LDA, + "Perdew and Zunger, Phys. Rev. B 23, 5048 (1981)\n" + "Modified to improve the matching between the low- and high-rs parts", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 0.0, 0.0, 1e-32, + NULL, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_c_ob_pz) = { + XC_LDA_C_OB_PZ, + XC_CORRELATION, + "Ortiz & Ballone (PZ parametrization)", + XC_FAMILY_LDA, + "G Ortiz and P Ballone, Phys. Rev. B 50, 1391 (1994)\n" + "G Ortiz and P Ballone, Phys. Rev. B 56, 9970(E) (1997)\n" + "Perdew and Zunger, Phys. Rev. B 23, 5048 (1981)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 0.0, 0.0, 1e-32, + NULL, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; diff --git a/libxc-2.2.0/src/lda_c_rc04.c b/libxc-2.2.0/src/lda_c_rc04.c new file mode 100644 index 000000000..4c1043392 --- /dev/null +++ b/libxc-2.2.0/src/lda_c_rc04.c @@ -0,0 +1,129 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_LDA_C_RC04 27 /* Ragot-Cortona */ + +void +XC(lda_c_rc04_func)(const XC(func_type) *p, XC(lda_work_t) *r) +{ + static FLOAT AA=-0.655868, BB=4.888270, CC=3.177037, DD=0.897889; + + FLOAT ek, dek, d2ek, d3ek, aux, aux2; + FLOAT opz, omz, opz13, omz13, _opz13, _omz13, _opz43, _omz43, _opz73, _omz73, fz, fz2, dfz, d2fz, d3fz; + + aux = BB + CC*r->rs[1]; + ek = (AA*ATAN(aux) + DD)/r->rs[1]; + + if(p->nspin == XC_POLARIZED){ + opz = 1.0 + r->zeta; + omz = 1.0 - r->zeta; + + opz13 = CBRT(opz); + omz13 = CBRT(omz); + + fz = 0.5*(opz13*opz13 + omz13*omz13); + fz2 = fz*fz; + + r->zk = ek*fz2*fz; + }else + r->zk = ek; + + if(r->order < 1) return; + + aux2 = 1.0 + aux*aux; + dek = AA*CC/(r->rs[1]*aux2) - ek/r->rs[1]; + + if(p->nspin == XC_POLARIZED){ + _opz13 = (opz == 0.0) ? 0.0 : 1.0/opz13; + _omz13 = (omz == 0.0) ? 0.0 : 1.0/omz13; + + dfz = (_opz13 - _omz13)/3.0; + + r->dedrs = dek*fz2*fz; + r->dedz = ek*3.0*fz2*dfz; + }else{ + r->dedrs = dek; + r->dedz = 0.0; + } + + if(r->order < 2) return; + + d2ek = -2.0*AA*CC*CC*aux/(r->rs[1]*aux2*aux2) - 2.0*dek/r->rs[1]; + + if(p->nspin == XC_POLARIZED){ + _opz43 = (opz == 0.0) ? 0.0 : 1.0/(opz*opz13); + _omz43 = (omz == 0.0) ? 0.0 : 1.0/(omz*omz13); + + d2fz = -(_opz43 + _omz43)/9.0; + + r->d2edrs2 = d2ek*fz2*fz; + r->d2edrsz = dek*3.0*fz2*dfz; + r->d2edz2 = ek*3.0*fz*(2.0*dfz*dfz + fz*d2fz); + }else{ + r->d2edrs2 = d2ek; + r->d2edrsz = 0.0; + r->d2edz2 = 0.0; + } + + if(r->order < 3) return; + + d3ek = 2.0*AA*CC*CC*CC/(r->rs[1]*aux2*aux2)*(4.0*aux*aux/aux2 - 1.0) - 3.0*d2ek/r->rs[1]; + + if(p->nspin == XC_POLARIZED){ + _opz73 = (opz == 0.0) ? 0.0 : 1.0/(opz*opz*opz13); + _omz73 = (omz == 0.0) ? 0.0 : 1.0/(omz*omz*omz13); + + d3fz = (_opz73 - _omz73)*4.0/27.0; + + r->d3edrs3 = d3ek*fz2*fz; + r->d3edrs2z = d2ek*3.0*fz2*dfz; + r->d3edrsz2 = dek*3.0*fz*(2.0*dfz*dfz + fz*d2fz); + r->d3edz3 = ek*3.0*(dfz*dfz*dfz + 6.0*fz*dfz*d2fz + fz2*d3fz); + }else{ + r->d3edrs3 = d3ek; + r->d3edrs2z = 0.0; + r->d3edrsz2 = 0.0; + r->d3edz3 = 0.0; + } +} + +#define func XC(lda_c_rc04_func) +#include "work_lda.c" +#undef func + +const XC(func_info_type) XC(func_info_lda_c_rc04) = { + XC_LDA_C_RC04, + XC_CORRELATION, + "Ragot-Cortona", + XC_FAMILY_LDA, + "S Ragot and P Cortona, J. Chem. Phys. 121, 7671 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-25, 0.0, 0.0, 1e-32, + NULL, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; + diff --git a/libxc-2.2.0/src/lda_c_rpa.c b/libxc-2.2.0/src/lda_c_rpa.c new file mode 100644 index 000000000..acca3e300 --- /dev/null +++ b/libxc-2.2.0/src/lda_c_rpa.c @@ -0,0 +1,69 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include "util.h" + +/************************************************************************ + Random Phase Approximation (RPA) +************************************************************************/ + +#define XC_LDA_C_RPA 3 /* Random Phase Approximation */ + +static inline void +func(const XC(func_type) *p, XC(lda_work_t) *r) +{ + static FLOAT a = 0.0311, b = -0.048, c = 0.009, d = -0.017; + FLOAT lrs; + + lrs = LOG(r->rs[1]); + r->zk = a*lrs + b + c*r->rs[1]*lrs + d*r->rs[1]; + + if(r->order < 1) return; + + r->dedrs = a/r->rs[1] + c*(lrs + 1.0) + d; + /* no spin polarization for the moment */ + r->dedz = 0.0; + + if(r->order < 2) return; + + r->d2edrs2 = -a/r->rs[2] + c/r->rs[1]; + r->d2edrsz = r->d2edz2 = 0.0; + + if(r->order < 3) return; + + r->d3edrs3 = 2.0*a/(r->rs[1]*r->rs[2]) - c/r->rs[2]; + r->d3edrs2z = r->d3edrsz2 = r->d3edz3 = 0.0; +} + +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_c_rpa) = { + XC_LDA_C_RPA, + XC_CORRELATION, + "Random Phase Approximation (RPA)", + XC_FAMILY_LDA, + "M Gell-Mann and KA Brueckner, Phys. Rev. 106, 364 (1957)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 0.0, 0.0, 1e-32, + NULL, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; diff --git a/libxc-2.2.0/src/lda_c_vwn.c b/libxc-2.2.0/src/lda_c_vwn.c new file mode 100644 index 000000000..70528d179 --- /dev/null +++ b/libxc-2.2.0/src/lda_c_vwn.c @@ -0,0 +1,466 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +/************************************************************************ + LDA parametrization of Vosko, Wilk & Nusair +************************************************************************/ + +#define XC_LDA_C_VWN 7 /* Vosko, Wilk, & Nussair (5) */ +#define XC_LDA_C_VWN_RPA 8 /* Vosko, Wilk, & Nussair (RPA) */ +#define XC_LDA_C_VWN_1 28 /* Vosko, Wilk, & Nussair (1) */ +#define XC_LDA_C_VWN_2 29 /* Vosko, Wilk, & Nussair (2) */ +#define XC_LDA_C_VWN_3 30 /* Vosko, Wilk, & Nussair (3) */ +#define XC_LDA_C_VWN_4 31 /* Vosko, Wilk, & Nussair (4) */ + +/* some constants e_c^P e_c^F alpha_c */ +typedef struct { + FLOAT A[3]; /* e_c^P, e_c^F, alpha_c */ + FLOAT b[3]; + FLOAT c[3]; + FLOAT x0[3]; + FLOAT Q[3]; + FLOAT fpp; +} vwn_consts_type; + +/* These numbers are taken from the original reference, but divided by + two to convert from Rydbergs to Hartrees */ +static vwn_consts_type vwn_consts[2] = { + /* VWN parametrization of the correlation energy */ + { + { 0.0310907, 0.01554535, 0.0 }, /* A */ + { 3.72744, 7.06042, 1.13107 }, /* b */ + {12.9352, 18.0578, 13.0045 }, /* c */ + {-0.10498, -0.32500, -0.0047584}, /* x0 */ + { 0.0, 0.0, 0.0 }, /* Q */ + 0.0 /* fpp */ + }, + /* VWN RPA */ + { + { 0.0310907, 0.01554535, 0.0 }, /* A */ + {13.0720, 20.1231, 1.06835 }, /* b */ + {42.7198, 101.578, 11.4813 }, /* c */ + {-0.409286, -0.743294, -0.228344 }, /* x0 */ + { 0.0, 0.0, 0.0 }, /* Q */ + 0.0 /* fpp */ + } +}; + +typedef struct{ + int spin_interpolation; /* 0: VWN; 1: HL */ + vwn_consts_type *X1, *X2; +} lda_c_vwn_params; + + +/* initialization */ +static void +init_vwn_constants(vwn_consts_type *X) +{ + int i; + + X->A[2] = -1.0/(6.0*M_PI*M_PI); + for(i=0; i<3; i++){ + X->Q[i] = SQRT(4.0*X->c[i] - X->b[i]*X->b[i]); + } + X->fpp = 4.0/(9.0*(CBRT(2.0) - 1)); +} + +static void +lda_c_vwn_init(XC(func_type) *p) +{ + lda_c_vwn_params *params; + + assert(p->params == NULL); + + p->params = malloc(sizeof(lda_c_vwn_params)); + params = (lda_c_vwn_params *) (p->params); + + init_vwn_constants(&vwn_consts[0]); + init_vwn_constants(&vwn_consts[1]); + + switch(p->info->number){ + case XC_LDA_C_VWN: + params->X1 = params->X2 = &vwn_consts[0]; + params->spin_interpolation = 0; + break; + case XC_LDA_C_VWN_1: + params->X1 = params->X2 = &vwn_consts[0]; + params->spin_interpolation = 1; + break; + case XC_LDA_C_VWN_2: + case XC_LDA_C_VWN_3: + case XC_LDA_C_VWN_4: + params->X1 = &vwn_consts[0]; + params->X2 = &vwn_consts[1]; + params->spin_interpolation = 0; + break; + case XC_LDA_C_VWN_RPA: + params->X1 = params->X2 = &vwn_consts[1]; + params->spin_interpolation = 1; + break; + default: + fprintf(stderr, "Internal error in lda_vwn\n"); + exit(1); + break; + } +} + + +void XC(lda_c_vwn_set_params)(XC(func_type) *p, int spin_interpolation) +{ + lda_c_vwn_params *params; + + assert(p != NULL && p->params != NULL); + params = (lda_c_vwn_params *) (p->params); + + params->spin_interpolation = spin_interpolation; +} + + +/* Eq. (4.4) of [1] */ +static void +ec_i(vwn_consts_type *X, int order, int i, FLOAT x, + FLOAT *zk, FLOAT *dedrs, FLOAT *d2edrs2, FLOAT *d3edrs3) +{ + FLOAT f1, f2, f3, fx, qx, xx0, t1, t2, t3, x2, x3, fx2, fx3; + FLOAT drs, d2rs, d3rs; + + /* constants */ + f1 = 2.0*X->b[i]/X->Q[i]; + f2 = X->b[i]*X->x0[i]/(X->x0[i]*X->x0[i] + X->b[i]*X->x0[i] + X->c[i]); + f3 = 2.0*(2.0*X->x0[i] + X->b[i])/X->Q[i]; + + /* a couple of handy functions */ + fx = x*x + X->b[i]*x + X->c[i]; /* X(x) */ + qx = ATAN(X->Q[i]/(2.0*x + X->b[i])); + xx0 = x - X->x0[i]; + + *zk = X->A[i]*(LOG(x*x/fx) + (f1 - f2*f3)*qx - f2*LOG(xx0*xx0/fx)); + + if(order < 1) return; + + t1 = 2.0*x + X->b[i]; + t2 = 2.0*X->c[i] + X->b[i]*x; + t3 = t1*t1 + X->Q[i]*X->Q[i]; + + drs = X->A[i]; + drs *= -2.0*f2/xx0 + (f2*t1 + t2/x)/fx + - 2.0*X->Q[i]*(f1 - f2*f3)/t3; + + *dedrs = drs/(2.0*x); /* change of sqrt(rs) -> rs */ + + if(order < 2) return; + + x2 = x*x; + x3 = x*x2; + fx2 = fx*fx; + + d2rs = X->A[i]; + d2rs *= -f2*t1*t1/fx2 - t1*t2/(x*fx2) + 2.0*f2/fx + + X->b[i]/(x*fx) - t2/(x2*fx) + 8.0*(f1 - f2*f3)*X->Q[i]*t1/(t3*t3) + + 2.0*f2/(xx0*xx0); + + *d2edrs2 = (d2rs*x - drs)/(4.0*x3); + + if(order < 3) return; + + fx3 = fx*fx2; + + d3rs = 2.0*X->A[i]; + d3rs *= f2*t1*t1*t1/fx3 + t1*t1*t2/(x*fx3) - 3.0*f2*t1/fx2 - X->b[i]*t1/(x*fx2) + -t2/(x*fx2) + t1*t2/(x2*fx2) - X->b[i]/(x2*fx) + t2/(x3*fx) + + (f1 - f2*f3)*X->Q[i]/(t3*t3)*(-32.0*t1*t1/t3 + 8.0) - 2.0*f2/(xx0*xx0*xx0); + + *d3edrs3 = (d3rs*x2 - 3.0*d2rs*x + 3.0*drs)/(8.0*x3*x2); +} + +/* the functional */ +static inline void +func(const XC(func_type) *p, XC(lda_work_t) *r) +{ + lda_c_vwn_params *params; + + FLOAT ec1, ec2, ec3, ec4, ec5, vc1, vc2, vc3, vc4, vc5, fc1, fc2, fc3, fc4, fc5, kc1, kc2, kc3, kc4, kc5; + FLOAT z3, z4, t1, dt1, d2t1, d3t1, t2, dt2, d2t2, d3t2, fz, dfz, d2fz, d3fz; + FLOAT DMC, DRPA, dDMC, dDRPA, d2DMC, d2DRPA, d3DMC, d3DRPA, aux, daux, d2aux, d3aux; + + assert(p->params != NULL); + params = (lda_c_vwn_params *) (p->params); + + ec_i(params->X1, r->order, 0, r->rs[0], &ec1, &vc1, &fc1, &kc1); + + if(p->nspin==XC_UNPOLARIZED) + r->zk = ec1; + else{ + ec_i(params->X1, r->order, 1, r->rs[0], &ec2, &vc2, &fc2, &kc2); + ec_i(params->X2, r->order, 2, r->rs[0], &ec3, &vc3, &fc3, &kc3); + + DMC = ec2 - ec1; + fz = FZETA(r->zeta); + + if(params->spin_interpolation == 1){ + t1 = 0.0; + t2 = fz; + }else{ + z3 = POW(r->zeta, 3); + z4 = z3*r->zeta; + t1 = (fz/params->X1->fpp)*(1.0 - z4); + t2 = fz*z4; + } + + if(p->info->number == XC_LDA_C_VWN_2 || p->info->number == XC_LDA_C_VWN_3){ + ec_i(&vwn_consts[1], r->order, 0, r->rs[0], &ec4, &vc4, &fc4, &kc4); + ec_i(&vwn_consts[1], r->order, 1, r->rs[0], &ec5, &vc5, &fc5, &kc5); + } + + if(p->info->number == XC_LDA_C_VWN_2){ + DRPA = ec5 - ec4; + r->zk = ec1 + ec3*t1 + DRPA*(t2 - fz) + DMC*fz; + + }else if(p->info->number == XC_LDA_C_VWN_3){ + DRPA = ec5 - ec4; + aux = DMC*ec3/DRPA; + + r->zk = ec1 + aux*t1 + DMC*t2; + + }else + r->zk = ec1 + ec3*t1 + DMC*t2; + } + + if(r->order < 1) return; + + if(p->nspin == XC_UNPOLARIZED) + r->dedrs = vc1; + else{ + dDMC = vc2 - vc1; + dfz = DFZETA(r->zeta); + + if(params->spin_interpolation == 1){ + dt1 = 0.0; + dt2 = dfz; + }else{ + dt1 = dfz*(1.0 - z4) - 4.0*fz*z3; + dt1 /= params->X1->fpp; + dt2 = dfz*z4 + 4.0*fz*z3; + } + + if(p->info->number == XC_LDA_C_VWN_2){ + dDRPA = vc5 - vc4; + + r->dedrs = vc1 + vc3* t1 + dDRPA*( t2 - fz) + dDMC* fz; + r->dedz = ec3*dt1 + DRPA*(dt2 - dfz) + DMC*dfz; + + }else if(p->info->number == XC_LDA_C_VWN_3){ + dDRPA = vc5 - vc4; + daux = (DMC*DRPA*vc3 + ec3*DRPA*dDMC - ec3*DMC*dDRPA)/(DRPA*DRPA); + + r->dedrs = vc1 + daux* t1 + dDMC*t2; + r->dedz = aux*dt1 + DMC*dt2; + + }else{ + r->dedrs = vc1 + vc3* t1 + dDMC* t2; + r->dedz = ec3*dt1 + DMC*dt2; + } + } + + if(r->order < 2) return; + + if(p->nspin == XC_UNPOLARIZED) + r->d2edrs2 = fc1; + else{ + d2DMC = fc2 - fc1; + d2fz = D2FZETA(r->zeta); + + if(params->spin_interpolation == 1){ + d2t1 = 0.0; + d2t2 = d2fz; + }else{ + d2t1 = d2fz*(1.0 - z4) - 8.0*dfz*z3 - 4.0*3.0*fz*r->zeta*r->zeta; + d2t1 /= params->X1->fpp; + d2t2 = d2fz*z4 + 8.0*dfz*z3 + 4.0*3.0*fz*r->zeta*r->zeta; + } + + if(p->info->number == XC_LDA_C_VWN_2){ + d2DRPA = fc5 - fc4; + + r->d2edrs2 = fc1 + fc3* t1 + d2DRPA*( t2 - fz) + d2DMC* fz; + r->d2edrsz = vc3* dt1 + dDRPA*( dt2 - dfz) + dDMC* dfz; + r->d2edz2 = ec3*d2t1 + DRPA*(d2t2 - d2fz) + DMC*d2fz; + + }else if(p->info->number == XC_LDA_C_VWN_3){ + d2DRPA = fc5 - fc4; + d2aux = (2.0*ec3*DMC*dDRPA*dDRPA + DRPA*DRPA*(2.0*vc3*dDMC + DMC*fc3 + ec3*d2DMC) - + DRPA*(2.0*dDRPA*(DMC*vc3 + ec3*dDMC) + ec3*DMC*d2DRPA))/(DRPA*DRPA*DRPA); + + r->d2edrs2 = fc1 + d2aux* t1 + d2DMC* t2; + r->d2edrsz = daux* dt1 + dDMC* dt2; + r->d2edz2 = aux*d2t1 + DMC*d2t2; + + }else{ + r->d2edrs2 = fc1 + fc3* t1 + d2DMC* t2; + r->d2edrsz = vc3* dt1 + dDMC* dt2; + r->d2edz2 = ec3*d2t1 + DMC*d2t2; + } + } + + if(r->order < 3) return; + + if(p->nspin == XC_UNPOLARIZED) + r->d3edrs3 = kc1; + else{ + d3DMC = kc2 - kc1; + d3fz = D3FZETA(r->zeta); + + if(params->spin_interpolation == 1){ + d3t1 = 0.0; + d3t2 = d3fz; + }else{ + d3t1 = d3fz*(1.0 - z4) - 12.0*d2fz*z3 - 36.0*dfz*r->zeta*r->zeta - 24.0*fz*r->zeta; + d3t1 /= params->X1->fpp; + d3t2 = d3fz*z4 + 12.0*d2fz*z3 + 36.0*dfz*r->zeta*r->zeta + 24.0*fz*r->zeta; + } + + if(p->info->number == XC_LDA_C_VWN_2){ + d3DRPA = kc5 - kc4; + + r->d3edrs3 = kc1 + kc3* t1 + d3DRPA*( t2 - fz) + d3DMC* fz; + r->d3edrs2z = fc3* dt1 + d2DRPA*( dt2 - dfz) + d2DMC* dfz; + r->d3edrsz2 = vc3*d2t1 + dDRPA*(d2t2 - d2fz) + dDMC*d2fz; + r->d3edz3 = ec3*d3t1 + DRPA*(d3t2 - d3fz) + DMC*d3fz; + + }else if(p->info->number == XC_LDA_C_VWN_3){ + d3DRPA = kc5 - kc4; + d3aux = (-6.0*ec3*DMC*dDRPA*dDRPA*dDRPA + + 6.0*DRPA*dDRPA*(dDRPA*(DMC*vc3 + ec3*dDMC) + ec3*DMC*d2DRPA) + + DRPA*DRPA*DRPA*(3.0*dDMC*fc3 + 3.0*vc3*d2DMC + DMC*kc3 + ec3*d3DMC) + -DRPA*DRPA*(3.0*dDRPA*(2.0*vc3*dDMC + DMC*fc3 + ec3*d2DMC) + + 3.0*d2DRPA*(DMC*vc3 + ec3*dDMC) + + ec3*DMC*d3DRPA))/(DRPA*DRPA*DRPA*DRPA); + + r->d3edrs3 = kc1 + d3aux* t1 + d3DMC* t2; + r->d3edrs2z = d2aux* dt1 + d2DMC* dt2; + r->d3edrsz2 = daux*d2t1 + dDMC*d2t2; + r->d3edz3 = aux*d3t1 + DMC*d3t2; + + }else{ + r->d3edrs3 = kc1 + kc3* t1 + d3DMC* t2; + r->d3edrs2z = fc3* dt1 + d2DMC* dt2; + r->d3edrsz2 = vc3*d2t1 + dDMC*d2t2; + r->d3edz3 = ec3*d3t1 + DMC*d3t2; + } + } + +} + +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_c_vwn) = { + XC_LDA_C_VWN, + XC_CORRELATION, + "Vosko, Wilk & Nusair (VWN5)", + XC_FAMILY_LDA, + "SH Vosko, L Wilk, and M Nusair, Can. J. Phys. 58, 1200 (1980)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 0.0, 0.0, 1e-32, + lda_c_vwn_init, + NULL, + work_lda, + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_c_vwn_1) = { + XC_LDA_C_VWN_1, + XC_CORRELATION, + "Vosko, Wilk & Nusair (VWN1)", + XC_FAMILY_LDA, + "SH Vosko, L Wilk, and M Nusair, Can. J. Phys. 58, 1200 (1980)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 0.0, 0.0, 1e-32, + lda_c_vwn_init, + NULL, + work_lda, + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_c_vwn_2) = { + XC_LDA_C_VWN_2, + XC_CORRELATION, + "Vosko, Wilk & Nusair (VWN2)", + XC_FAMILY_LDA, + "SH Vosko, L Wilk, and M Nusair, Can. J. Phys. 58, 1200 (1980)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 0.0, 0.0, 1e-32, + lda_c_vwn_init, + NULL, + work_lda, + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_c_vwn_3) = { + XC_LDA_C_VWN_3, + XC_CORRELATION, + "Vosko, Wilk & Nusair (VWN3)", + XC_FAMILY_LDA, + "SH Vosko, L Wilk, and M Nusair, Can. J. Phys. 58, 1200 (1980)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 0.0, 0.0, 1e-32, + lda_c_vwn_init, + NULL, + work_lda, + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_c_vwn_4) = { + XC_LDA_C_VWN_4, + XC_CORRELATION, + "Vosko, Wilk & Nusair (VWN4)", + XC_FAMILY_LDA, + "SH Vosko, L Wilk, and M Nusair, Can. J. Phys. 58, 1200 (1980)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 0.0, 0.0, 1e-32, + lda_c_vwn_init, + NULL, + work_lda, + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_c_vwn_rpa) = { + XC_LDA_C_VWN_RPA, + XC_CORRELATION, + "Vosko, Wilk & Nusair (VWN5_RPA)", + XC_FAMILY_LDA, + "SH Vosko, L Wilk, and M Nusair, Can. J. Phys. 58, 1200 (1980)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 0.0, 0.0, 1e-32, + lda_c_vwn_init, + NULL, + work_lda, + NULL, + NULL +}; + diff --git a/libxc-2.2.0/src/lda_c_wigner.c b/libxc-2.2.0/src/lda_c_wigner.c new file mode 100644 index 000000000..be0abee5d --- /dev/null +++ b/libxc-2.2.0/src/lda_c_wigner.c @@ -0,0 +1,69 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include "util.h" + +/************************************************************************ + Wigner's parametrization from the low density limit +************************************************************************/ + +#define XC_LDA_C_WIGNER 2 /* Wigner parametrization */ + +static inline void +func(const XC(func_type) *p, XC(lda_work_t) *r) +{ + static FLOAT a = -0.44, b = 7.8; + FLOAT t, t2; + + t = b + r->rs[1]; + r->zk = a/t; + + if(r->order < 1) return; + + t2 = t*t; + r->dedrs = -a/t2; + r->dedz = 0.0; + + if(r->order < 2) return; + + r->d2edrs2 = 2.0*a/(t2*t); + r->d2edrsz = r->d2edz2 = 0.0; + + if(r->order < 3) return; + + r->d3edrs3 = -2.0*3.0*a/(t2*t2); + r->d3edrs2z = r->d3edrsz2 = r->d3edz3 = 0.0; +} + +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_c_wigner) = { + XC_LDA_C_WIGNER, + XC_CORRELATION, + "Wigner", + XC_FAMILY_LDA, + "EP Wigner, Trans. Faraday Soc. 34, 678 (1938)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 0.0, 0.0, 1e-32, + NULL, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; diff --git a/libxc-2.2.0/src/lda_k_tf.c b/libxc-2.2.0/src/lda_k_tf.c new file mode 100644 index 000000000..9481950f6 --- /dev/null +++ b/libxc-2.2.0/src/lda_k_tf.c @@ -0,0 +1,127 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_LDA_K_TF 50 /* Thomas-Fermi kinetic energy functional */ +#define XC_LDA_K_LP 51 /* Lee and Parr Gaussian ansatz */ + +static inline void +func(const XC(func_type) *p, XC(lda_work_t) *r) +{ + FLOAT ax, fz, dfz, d2fz, d3fz; + + switch(p->info->number){ + case XC_LDA_K_LP:\ + /* 3*M_PI/2^(5/3) * (3/4 pi)^(2/3) = 3*M_PI*POW(3/(8*M_PI), 2/3)*/ + ax = 1.142427709758666675644309251677891925671; + break; + case XC_LDA_K_TF: + /* 3/10*(3*M_PI^2)^(2/3) * (3/4 pi)^(2/3) = 3/10*POW(9*M_PI/4, 2/3) */ + ax = 1.104950565705860002098832079519635692942; + break; + } + + r->zk = ax/r->rs[2]; + + if(p->nspin == XC_POLARIZED){ + fz = 0.5*(POW(1.0 + r->zeta, 5.0/3.0) + POW(1.0 - r->zeta, 5.0/3.0)); + r->zk *= fz; + } + + if(r->order < 1) return; + + r->dedrs = -2.0*ax/(r->rs[1]*r->rs[2]); + + if(p->nspin == XC_POLARIZED){ + dfz = 5.0/(2.0*3.0)*(POW(1.0 + r->zeta, 2.0/3.0) - POW(1.0 - r->zeta, 2.0/3.0)); + + r->dedrs *= fz; + r->dedz = ax/r->rs[2]*dfz; + } + + if(r->order < 2) return; + + r->d2edrs2 = 2.0*3.0*ax/(r->rs[2]*r->rs[2]); + + if(p->nspin == XC_POLARIZED){ + if(ABS(r->zeta) == 1.0) + d2fz = FLT_MAX; + else + d2fz = 10.0/(2.0*9.0)*(1.0/CBRT(1.0 + r->zeta) + 1.0/CBRT(1.0 - r->zeta)); + + r->d2edrs2 *= fz; + r->d2edrsz = -2.0*ax/(r->rs[1]*r->rs[2])*dfz; + r->d2edz2 = ax/r->rs[2] *d2fz; + } + + if(r->order < 3) return; + + r->d3edrs3 = -2.0*3.0*4.0*ax/(r->rs[1]*r->rs[2]*r->rs[2]); + + if(p->nspin == XC_POLARIZED){ + if(ABS(r->zeta) == 1.0) + d3fz = FLT_MAX; + else + d3fz = -10.0/(2.0*27.0)*(POW(1.0 + r->zeta, -4.0/3.0) - POW(1.0 - r->zeta, -4.0/3.0)); + + r->d3edrs3 *= fz; + r->d3edrs2z = 2.0*3.0*ax/(r->rs[2]*r->rs[2])*dfz; + r->d3edrsz2 = -2.0*ax/(r->rs[1]*r->rs[2])*d2fz; + r->d3edz3 = ax/r->rs[2] *d3fz; + } + +} + +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_k_tf) = { + XC_LDA_K_TF, + XC_KINETIC, + "Thomas-Fermi kinetic energy", + XC_FAMILY_LDA, + "LH Thomas, Proc. Cambridge Phil. Soc. 23, 542-548 (1927)\n" + "E Fermi. Rend. Accad. Naz. Lincei 6, 602-607 (1927)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-29, 0.0, 0.0, 1e-32, + NULL, + NULL, + work_lda, + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_k_lp) = { + XC_LDA_K_LP, + XC_KINETIC, + "Lee and Parr Gaussian ansatz for the kinetic energy", + XC_FAMILY_LDA, + "CL and RG Parr, Phys. Rev. A 35, 2377-2383 (1987)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-29, 0.0, 0.0, 1e-32, + NULL, + NULL, + work_lda, + NULL, + NULL +}; + diff --git a/libxc-2.2.0/src/lda_x.c b/libxc-2.2.0/src/lda_x.c new file mode 100644 index 000000000..9c0841240 --- /dev/null +++ b/libxc-2.2.0/src/lda_x.c @@ -0,0 +1,410 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_LDA_X 1 /* Exchange */ +#define XC_LDA_C_XALPHA 6 /* Slater Xalpha */ + +/* + Slater's Xalpha functional (Exc = alpha Ex) + + Note: this is to be added to the exchange + + This correlation functional, added to the exchange functional, produces + a total exchange-correlation functional, Exc, equal to 3/2 * alpha * Ex + Setting alpha equal to one gives the *usual* Slater Xalpha functional, + whereas alpha equal to 2/3 just leaves the exchange functional unchanged. +*/ + +/* Relativistic corrections */ +/* A. K. Rajagopal, J. Phys. C 11, L943 (1978). + A. H. MacDonald and S. H. Vosko, J. Phys. C 12, 2977 (1979). + E. Engel, S. Keller, A. Facco Bonetti, H. Mueller, and R. M. Dreizler, Phys. Rev. A 52, 2750 (1995). +*/ + +/* Range separation */ +/* J. Toulouse, A. Savin, H.-J. Flad, Int. J. of Quant. Chem. 100, 1047-1056 (2004). +*/ + +typedef struct{ + FLOAT alpha; /* parameter for Xalpha functional */ + int relativistic; /* use the relativistic version of the functional or not */ +} XC(lda_x_params); + +static void +lda_x_init(XC(func_type) *p) +{ + assert(p != NULL && p->params == NULL); + p->params = malloc(sizeof(XC(lda_x_params))); + + /* exchange is equal to xalpha with a parameter of 4/3 */ + XC(lda_x_set_params)(p, 4.0/3.0, XC_NON_RELATIVISTIC, 0.0); +} + +static void +lda_c_xalpha_init(XC(func_type) *p) +{ + assert(p != NULL && p->params == NULL); + p->params = malloc(sizeof(XC(lda_x_params))); + + /* This gives the usual Xalpha functional */ + XC(lda_x_set_params)(p, 1.0, XC_NON_RELATIVISTIC, 0.0); +} + +void +XC(lda_c_xalpha_set_params)(XC(func_type) *p, FLOAT alpha) +{ + XC(lda_x_set_params)(p, alpha, XC_NON_RELATIVISTIC, 0.0); +} + +void +XC(lda_x_set_params)(XC(func_type) *p, FLOAT alpha, int relativistic, FLOAT omega) +{ + XC(lda_x_params) *params; + + assert(p != NULL && p->params != NULL); + params = (XC(lda_x_params) *) (p->params); + + params->alpha = 1.5*alpha - 1.0; + params->relativistic = relativistic; + p->cam_omega = omega; +} + + +/* +see + Int. J. of Quant. Chem. 100, 1047-1056 (2004). + Chem. Phys. Lett. 462(2008) 348-351 + J. Chem. Phys. 120, 8425 (2004) +*/ +void +XC(lda_x_attenuation_function)(int interaction, int order, FLOAT aa, FLOAT *f, FLOAT *df, FLOAT *d2f, FLOAT *d3f) +{ + FLOAT aa2, aa3, auxa1, auxa2, auxa3; + FLOAT bb, bb2, bb3, auxb1, auxb2; + + aa2 = aa*aa; + aa3 = aa*aa2; + + if (interaction == XC_RSF_ERF || interaction == XC_RSF_ERF_GAU) { + auxa1 = M_SQRTPI*ERF(1.0/(2.0*aa)); + + if(aa < 1.0e6) + auxa2 = EXP(-1.0/(4.0*aa2)) - 1.0; + else + auxa2 = -1.0/(4.0*aa2); + + auxa3 = 2.0*aa2*auxa2 + 0.5; + + *f = 1.0 - 8.0/3.0*aa*(auxa1 + 2.0*aa*(auxa2 - auxa3)); + + if(interaction == XC_RSF_ERF_GAU){ + bb = aa/M_SQRT3; + bb2 = bb*bb; + bb3 = bb*bb2; + auxb1 = M_SQRTPI*ERF(1.0/(2.0*bb)); + auxb2 = EXP(-1.0/(4.0*bb2)); + + *f += 8.0/M_SQRT3*bb*(auxb1 - 6.0*bb + 16.0*bb3 + (2.0*bb - 16*bb3)*auxb2); + } + + if(order < 1) return; + + *df = 8.0/3.0 * (4.0*aa - 2.0*(1.0 - 8.0*aa2)*aa*auxa2 - auxa1); + + if(interaction == XC_RSF_ERF_GAU) + *df -= 8.0/3.0*(4.0*bb*(3.0 - 16.0*bb2 + (1.0 + 16.0*bb2)*auxb2) - auxb1); + + if(order < 2) return; + + *d2f = 16.0*(2.0 + (1.0 + 8.0*aa2)*auxa2); + + if(interaction == XC_RSF_ERF_GAU) + *d2f -= 8.0/(3.0*M_SQRT3)*(12.0 - 192.0*bb2 + 3.0*(1.0/bb2 + 12.0 + 64.0*bb2)*auxb2); + + if(order < 3) return; + + *d3f = -256.0*aa + 8.0*(1.0 + 8.0*aa2 + 32.0*aa2*aa2)*(auxa2 + 1.0)/aa3; + + if(interaction == XC_RSF_ERF_GAU) + *d3f -= 8.0/9.0*(-384.0*bb + 3.0*(1.0 + 8.0*bb2*(1.0 + bb2*(8.0 + bb2*32.0))*auxb2/(2.0*bb2*bb2*bb))); + + } else { /* XC_RSF_YUKAWA */ + + auxa1 = ATAN2(1.0,aa); + auxa2 = LOG(1+(1.0/aa2)); + auxa3 = (aa2 + 1); + + switch (order) { + default: /* > 3 - catch-22 */ + case 3: + *d3f = 8*(2*aa2*auxa3*auxa2 - 2*aa2 -1)/(aa*auxa3); + + case 2: + *d2f = 4*(2*aa2 + 1)*auxa2 - 2; + + case 1: + *df = 4.0/3.0 * (aa*((2*aa2 + 3)*auxa2 - 2) - 2* auxa1); + + case 0: + *f = 1.0 - 8.0/3.0*aa*(auxa1 + aa/4.0* (1.0 - (auxa3 +2)*auxa2)); + } /* no break needed */ + } + +} + + +static inline void +func(const XC(func_type) *p, XC(lda_work_t) *r) +{ + FLOAT ax, omz, cbrtomz, opz, cbrtopz, fz, dfzdz, dfzdrs, d2fzdz2, d2fzdrsz, d2fzdrs2; + FLOAT d3fzdz3, d3fzdrsz2, d3fzdrs2z, d3fzdrs3; + FLOAT beta, beta2, beta4, beta6, f1, f1_3, f1_5, f2, f3; + FLOAT phi, dphi, d2phi, d3phi, dphidbeta, d2phidbeta2, d3phidbeta3, dbetadrs, d2betadrs2, d3betadrs3; + FLOAT zk_nr, dedrs_nr, dedz_nr, d2edrs2_nr, d2edrsz_nr, d2edz2_nr; + XC(lda_x_params) *params; + + FLOAT a_cnst, fa_u, dfa_u, d2fa_u, d3fa_u, fa_d, dfa_d, d2fa_d, d3fa_d; + + assert(p->params != NULL); + params = (XC(lda_x_params) *) (p->params); + + ax = -params->alpha*0.458165293283142893475554485052; /* -alpha * 3/4*POW(3/(2*M_PI), 2/3) */ + + if(p->nspin == XC_POLARIZED){ + opz = 1.0 + r->zeta; + omz = 1.0 - r->zeta; + cbrtopz = CBRT(opz); + cbrtomz = CBRT(omz); + } + + if(p->cam_omega == 0.0){ + a_cnst = 0.0; + fa_u = fa_d = 1.0; + + }else{ + a_cnst = CBRT(4.0/(9.0*M_PI))*p->cam_omega/2.0; + + if(p->nspin == XC_UNPOLARIZED){ + XC(lda_x_attenuation_function)(XC_RSF_ERF, r->order, a_cnst*r->rs[1], &fa_u, &dfa_u, &d2fa_u, &d3fa_u); + }else{ + if(cbrtopz > 0.0) + XC(lda_x_attenuation_function)(XC_RSF_ERF, r->order, a_cnst*r->rs[1]/cbrtopz, &fa_u, &dfa_u, &d2fa_u, &d3fa_u); + else + fa_u = dfa_u = d2fa_u = d3fa_u = 0.0; + + if(cbrtomz > 0.0) + XC(lda_x_attenuation_function)(XC_RSF_ERF, r->order, a_cnst*r->rs[1]/cbrtomz, &fa_d, &dfa_d, &d2fa_d, &d3fa_d); + else + fa_d = dfa_d = d2fa_d = d3fa_d = 0.0; + } + } + + if(p->nspin == XC_UNPOLARIZED) + fz = fa_u; + else + fz = 0.5*(opz*cbrtopz*fa_u + omz*cbrtomz*fa_d); + + r->zk = ax*fz/r->rs[1]; + + if(params->relativistic == XC_RELATIVISTIC){ + beta = CBRT(9.0*M_PI/4.0)/(r->rs[1]*M_C); + beta2 = beta*beta; + f1 = SQRT(1.0 + beta2); + f2 = ASINH(beta); + f3 = f1/beta - f2/beta2; + phi = 1.0 - 3.0/2.0*f3*f3; + + zk_nr = r->zk; + r->zk *= phi; + } + + if(r->order < 1) return; + + r->dedrs = -ax/r->rs[2]; + + if(p->cam_omega == 0.0) + dfa_u = dfa_d = 0.0; + + if(p->nspin == XC_POLARIZED){ + dfzdz = 1.0/6.0*(4.0*cbrtopz*fa_u - 4.0*cbrtomz*fa_d - a_cnst*r->rs[1]*(dfa_u - dfa_d)); + dfzdrs = 0.5*a_cnst*(opz*dfa_u + omz*dfa_d); + }else{ + dfzdrs = a_cnst*dfa_u; + } + + r->dedrs = ax*(-fz/r->rs[2] + dfzdrs/r->rs[1]); + if(p->nspin == XC_POLARIZED) + r->dedz = ax*dfzdz/r->rs[1]; + + if(params->relativistic == XC_RELATIVISTIC){ + beta4 = beta2*beta2; + dphidbeta = 6.0/(beta4*beta)*(beta2 - beta*(2 + beta2)*f2/f1 + f2*f2); + dbetadrs = -beta/r->rs[1]; + + dedrs_nr = r->dedrs; + dphi = dphidbeta*dbetadrs; + + r->dedrs = r->dedrs*phi + zk_nr*dphi; + if(p->nspin == XC_POLARIZED){ + dedz_nr = r->dedz; + r->dedz = r->dedz*phi; + } + } + + + if(r->order < 2) return; + + if(p->cam_omega == 0.0) + d2fa_u = d2fa_d = 0.0; + + if(p->nspin == XC_POLARIZED){ + d2fzdrs2 = 0.5*a_cnst*a_cnst*(cbrtopz*cbrtopz*d2fa_u + cbrtomz*cbrtomz*d2fa_d); + if(ABS(r->zeta) == 1.0){ + d2fzdz2 = d2fzdrsz = FLT_MAX; + }else{ + d2fzdrsz = a_cnst/6.0*(3.0*(dfa_u - dfa_d) - a_cnst*r->rs[1]*(d2fa_u/cbrtopz - d2fa_d/cbrtomz)); + d2fzdz2 = 1.0/18.0* + (+ 4.0*(fa_u/(cbrtopz*cbrtopz) + fa_d/(cbrtomz*cbrtomz)) + - 4.0*a_cnst*r->rs[1]*(dfa_u/opz + dfa_d/omz) + + a_cnst*a_cnst*r->rs[2]*(d2fa_u/(opz*cbrtopz) + d2fa_d/(omz*cbrtomz))); + } + }else{ + d2fzdrs2 = a_cnst*a_cnst*d2fa_u; + } + + r->d2edrs2 = ax*(2.0*fz/(r->rs[1]*r->rs[2]) - 2.0*dfzdrs/r->rs[2] + d2fzdrs2/r->rs[1]); + + if(p->nspin == XC_POLARIZED){ + r->d2edrsz = ax*(-dfzdz/r->rs[2] + d2fzdrsz/r->rs[1]); + r->d2edz2 = ax*d2fzdz2/r->rs[1]; + } + + if(params->relativistic == XC_RELATIVISTIC){ + f1_3 = f1*f1*f1; + d2phidbeta2 = -(beta2*f1*(5.0 + 4.0*beta2) - + beta*(10.0 + 14.0*beta2 + 3.0*beta4)*f2 + + 5.0*f1_3*f2*f2) * 6.0/(beta4*beta2*f1_3); + d2betadrs2 = -2.0*dbetadrs/r->rs[1]; + + d2edrs2_nr = r->d2edrs2; + d2phi = d2phidbeta2*dbetadrs*dbetadrs + dphidbeta*d2betadrs2; + + r->d2edrs2 = r->d2edrs2*phi + 2.0*dedrs_nr*dphi + zk_nr*d2phi; + if(p->nspin == XC_POLARIZED){ + d2edz2_nr = r->d2edz2; + d2edrsz_nr = r->d2edrsz; + + r->d2edrsz = r->d2edrsz*phi + dedz_nr*dphi; + r->d2edz2 = r->d2edz2*phi; + + } + } + + if(r->order < 3) return; + + if(p->cam_omega == 0.0) + d3fa_u = d3fa_d = 0.0; + + if(p->nspin == XC_POLARIZED){ + d3fzdrs3 = 0.5*a_cnst*a_cnst*a_cnst*(cbrtopz*d3fa_u + cbrtomz*d3fa_d); + if(ABS(r->zeta) == 1.0){ + d3fzdz3 = d3fzdrs2z = d3fzdrsz2 = FLT_MAX; + }else{ + d3fzdrs2z = a_cnst*a_cnst/6.0* + (2.0*(d2fa_u/cbrtopz - d2fa_d/cbrtomz) - a_cnst*r->rs[1]*(d3fa_u/(cbrtopz*cbrtopz) - d3fa_d/(cbrtomz*cbrtomz))); + d3fzdrsz2 = 1.0/18.0* + (-2.0*a_cnst*a_cnst*r->rs[1]*(d2fa_u/(opz*cbrtopz) + d2fa_d/(omz*cbrtomz)) + +a_cnst*a_cnst*a_cnst*r->rs[2]*(d3fa_u/(opz*cbrtopz*cbrtopz) + d2fa_d/(omz*cbrtomz*cbrtomz))); + d3fzdz3 = 1.0/54.0* + (-8.0*(fa_u/(opz*cbrtopz*cbrtopz) - fa_d/(omz*cbrtomz*cbrtomz)) + +8.0*a_cnst*r->rs[1]*(dfa_u/(opz*opz) - dfa_d/(omz*omz)) + -a_cnst*a_cnst*a_cnst*r->rs[1]*r->rs[2]*(d3fa_u/(opz*opz*cbrtopz*cbrtopz) - d3fa_d/(omz*omz*cbrtomz*cbrtomz))); + } + }else + d3fzdrs3 = a_cnst*a_cnst*a_cnst*d2fa_u; + + r->d3edrs3 = ax*(-6.0*fz/(r->rs[2]*r->rs[2]) + 6.0*dfzdrs/(r->rs[1]*r->rs[2]) + -3.0*d2fzdrs2/r->rs[2] + d3fzdrs3/r->rs[1]); + + if(p->nspin == XC_POLARIZED){ + r->d3edrs2z = ax*(2.0*dfzdz/(r->rs[1]*r->rs[2]) - 2.0*d2fzdrsz/r->rs[2] + d3fzdrs2z/r->rs[1]); + r->d3edrsz2 = ax*(-d2fzdz2/r->rs[2]+ d3fzdrsz2/r->rs[1]); + r->d3edz3 = ax*d3fzdz3/r->rs[1]; + } + + + if(params->relativistic == XC_RELATIVISTIC){ + beta6 = beta4*beta2; + f1_5 = f1_3*f1*f1; + + d3phidbeta3 = (beta2*f1*(30.0 + 52.0*beta2 + 19.0*beta4) - + beta*f2*(60.0 + 142.0*beta2 + 97.0*beta4 + 12.0*beta6) + + 30.0*f1_5*f2*f2) * 6.0/(beta6*beta*f1_5); + d3betadrs3 = -3.0*d2betadrs2/r->rs[1]; + + d3phi = d3phidbeta3*dbetadrs*dbetadrs*dbetadrs + 3.0*d2phidbeta2*dbetadrs*d2betadrs2 + + dphidbeta*d3betadrs3; + + r->d3edrs3 = r->d3edrs3*phi + 3.0*d2edrs2_nr*dphi + 3.0*dedrs_nr*d2phi + zk_nr*d3phi; + if(p->nspin == XC_POLARIZED){ + r->d3edrs2z = r->d3edrs2z*phi + 2.0*d2edrsz_nr*dphi + dedz_nr*d2phi; + r->d3edrsz2 = r->d3edrsz2*phi + d2edz2_nr*dphi; + r->d3edz3 = r->d3edz3*phi; + } + } +} + +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_x) = { + XC_LDA_X, + XC_EXCHANGE, + "Slater exchange", + XC_FAMILY_LDA, + "PAM Dirac, Proceedings of the Cambridge Philosophical Society 26, 376 (1930)\n" + "F Bloch, Zeitschrift fuer Physik 57, 545 (1929)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-29, 0.0, 0.0, 1e-32, + lda_x_init, + NULL, + work_lda, + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_c_xalpha) = { + XC_LDA_C_XALPHA, + XC_CORRELATION, + "Slater's Xalpha", + XC_FAMILY_LDA, + "JC Slater, Phys. Rev. 81, 385 (1951)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-29, 0.0, 0.0, 1e-32, + lda_c_xalpha_init, + NULL, + work_lda, + NULL, + NULL +}; + diff --git a/libxc-2.2.0/src/lda_x_1d.c b/libxc-2.2.0/src/lda_x_1d.c new file mode 100644 index 000000000..ecf646fde --- /dev/null +++ b/libxc-2.2.0/src/lda_x_1d.c @@ -0,0 +1,169 @@ +/* + Copyright (C) 2006-2009 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_LDA_X_1D 21 /* Exchange in 1D */ + +typedef struct{ + int interaction; /* 0: exponentially screened; 1: soft-Coulomb */ + FLOAT bb; /* screening parameter beta */ +} lda_x_1d_params; + +static void +lda_x_1d_init(XC(func_type) *p) +{ + assert(p->params == NULL); + p->params = malloc(sizeof(lda_x_1d_params)); + + /* default value is soft-Coulomb with beta=1.0 */ + XC(lda_x_1d_set_params)(p, 1, 1.0); +} + + +void +XC(lda_x_1d_set_params)(XC(func_type) *p, int interaction, FLOAT bb) +{ + lda_x_1d_params *params; + + assert(p != NULL && p->params != NULL); + params = (lda_x_1d_params *)(p->params); + + assert(interaction == 0 || interaction == 1); + + params->interaction = interaction; + params->bb = bb; +} + + +static inline FLOAT FT_inter(FLOAT x, int interaction) +{ + assert(interaction == 0 || interaction == 1); + + if(interaction == 0){ + FLOAT x2 = x*x; + return expint_e1(x2)*EXP(x2); + }else + return 2.0*XC(bessel_K0)(x); +} + + +static void func1(FLOAT *x, int n, void *ex) +{ + int interaction = *(int *)ex; + int ii; + + for(ii=0; iiparams != NULL); + interaction = ((lda_x_1d_params *)p->params)->interaction; + bb = ((lda_x_1d_params *)p->params)->bb; + + r->zk = 0.0; + for(is=0; isnspin; is++){ + R = M_PI*bb*(1.0 + spin_sign[is]*r->zeta)/(2.0*r->rs[1]); + + if(R == 0.0) continue; + + int1[is] = XC(integrate)(func1, (void *)(&interaction), 0.0, R); + int2[is] = XC(integrate)(func2, (void *)(&interaction), 0.0, R); + + r->zk -= (1.0 + spin_sign[is]*r->zeta) * + (int1[is] - int2[is]/R); + } + r->zk *= spin_fact[p->nspin-1]/(4.0*M_PI*bb); + + if(r->order < 1) return; + + r->dedrs = 0.0; + r->dedz = 0.0; + for(is=0; isnspin; is++){ + if(1.0 + spin_sign[is]*r->zeta == 0.0) continue; + + r->dedrs += int2[is]; + r->dedz -= spin_sign[is]*int1[is]; + } + r->dedrs *= spin_fact[p->nspin-1]/(2.0*M_PI*M_PI*bb*bb); + r->dedz *= spin_fact[p->nspin-1]/(4.0*M_PI*bb); + + if(r->order < 2) return; + + r->d2edrs2 = r->d2edrsz = r->d2edz2 = 0.0; + for(is=0; isnspin; is++){ + FLOAT ft, aux = 1.0 + spin_sign[is]*r->zeta; + + if(aux == 0.0) continue; + + R = M_PI*bb*aux/(2.0*r->rs[1]); + ft = FT_inter(R, interaction); + + r->d2edrs2 -= aux*aux*ft; + r->d2edrsz += spin_sign[is]*aux*ft; + r->d2edz2 -= ft; + } + r->d2edrs2 *= spin_fact[p->nspin-1]/(8.0*r->rs[2]*r->rs[1]); + r->d2edrsz *= spin_fact[p->nspin-1]/(8.0*r->rs[2]); + r->d2edz2 *= spin_fact[p->nspin-1]/(8.0*r->rs[1]); + + if(r->order < 3) return; + + /* TODO : third derivatives */ +} + +#define XC_DIMENSIONS 1 +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_x_1d) = { + XC_LDA_X_1D, + XC_EXCHANGE, + "Exchange in 1D", + XC_FAMILY_LDA, + "N. Helbig, J. I. Fuks, M. Casula, M. J. Verstraete, M. A. L. Marques, I. V. Tokatly and A. Rubio, Phys. Rev. A 83, 032503 (2011)", + XC_FLAGS_1D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 0.0, 0.0, 1e-32, + lda_x_1d_init, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; diff --git a/libxc-2.2.0/src/lda_x_2d.c b/libxc-2.2.0/src/lda_x_2d.c new file mode 100644 index 000000000..eb4dfb0fb --- /dev/null +++ b/libxc-2.2.0/src/lda_x_2d.c @@ -0,0 +1,91 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_LDA_X_2D 19 /* Exchange in 2D */ + +static inline void +func(const XC(func_type) *p, XC(lda_work_t) *r) +{ + const FLOAT ax = -0.600210877438070713036799460671; /* -4/3*SQRT(2)/M_PI */ + FLOAT fz, dfz, d2fz, d3fz; + + r->zk = ax/r->rs[1]; + if(p->nspin == XC_POLARIZED){ + fz = 0.5*(POW(1.0 + r->zeta, 3.0/2.0) + POW(1.0 - r->zeta, 3.0/2.0)); + r->zk *= fz; + } + + if(r->order < 1) return; + + r->dedrs = -ax/r->rs[2]; + if(p->nspin == XC_POLARIZED){ + dfz = 3.0/4.0*(SQRT(1.0 + r->zeta) - SQRT(1.0 - r->zeta)); + + r->dedrs *= fz; + r->dedz = ax/r->rs[1]*dfz; + } + + if(r->order < 2) return; + + r->d2edrs2 = 2.0*ax/(r->rs[1]*r->rs[2]); + if(p->nspin == XC_POLARIZED){ + d2fz = 3.0/8.0*(1.0/SQRT(1.0 + r->zeta) + 1.0/SQRT(1.0 - r->zeta)); + + r->d2edrs2 *= fz; + r->d2edrsz = -ax/r->rs[2]* dfz; + r->d2edz2 = ax/r->rs[1]*d2fz; + } + + if(r->order < 3) return; + + r->d3edrs3 = -6.0*ax/(r->rs[2]*r->rs[2]); + if(p->nspin == XC_POLARIZED){ + d3fz = -3.0/16.0*(POW(1.0 + r->zeta, -3.0/2.0) - POW(1.0 - r->zeta, -3.0/2.0)); + + r->d3edrs3 *= fz; + r->d3edrs2z = 2.0*ax/(r->rs[1]*r->rs[2])*dfz; + r->d3edrsz2 = -ax/r->rs[2]* d2fz; + r->d3edz3 = ax/r->rs[1]* d3fz; + } +} + +#define XC_DIMENSIONS 2 +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_x_2d) = { + XC_LDA_X_2D, + XC_EXCHANGE, + "Slater exchange", + XC_FAMILY_LDA, + "PAM Dirac, Proceedings of the Cambridge Philosophical Society 26, 376 (1930)\n" + "F Bloch, Zeitschrift fuer Physik 57, 545 (1929)", + XC_FLAGS_2D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 0.0, 0.0, 1e-32, + NULL, + NULL, + work_lda, + NULL, + NULL +}; + diff --git a/libxc-2.2.0/src/lda_xc_teter93.c b/libxc-2.2.0/src/lda_xc_teter93.c new file mode 100644 index 000000000..3dcf14346 --- /dev/null +++ b/libxc-2.2.0/src/lda_xc_teter93.c @@ -0,0 +1,173 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_LDA_XC_TETER93 20 /* Teter 93 parametrization */ + +static FLOAT teter_a [4] = {0.4581652932831429, 2.217058676663745, 0.7405551735357053, 0.01968227878617998 }; +static FLOAT teter_ap[4] = {0.119086804055547, 0.6157402568883345, 0.1574201515892867, 0.003532336663397157}; +static FLOAT teter_b [4] = {1.0000000000000000, 4.504130959426697, 1.110667363742916, 0.02359291751427506 }; +static FLOAT teter_bp[4] = {0.000000000000000, 0.2673612973836267, 0.2052004607777787, 0.004200005045691381}; + + +/* the functional */ +static inline void +func(const XC(func_type) *p, XC(lda_work_t) *r) +{ + FLOAT mrs0, mrs1, mrs2, mrs3, mrs4; + FLOAT aa[4], bb[4]; + FLOAT fz[4]; + + FLOAT nn, dd, dd2, dd3, invdd; + FLOAT DnnDrs, DddDrs, DnnDz, DddDz; + FLOAT D2nnDrs2, D2nnDz2, D2nnDrsz, D2ddDrs2, D2ddDz2, D2ddDrsz; + FLOAT D3nnDrs3, D3nnDrs2z, D3nnDrsz2, D3nnDz3, D3ddDrs3, D3ddDrs2z, D3ddDrsz2, D3ddDz3; + int ii; + + /* Wigner radius */ + mrs0 = 1.0; + mrs1 = r->rs[1]; + mrs2 = r->rs[2]; + mrs3 = mrs1*mrs2; + mrs4 = mrs1*mrs3; + + if(p->nspin != XC_UNPOLARIZED){ + XC(fast_fzeta)(r->zeta, p->nspin, r->order, fz); + + for(ii=0; ii < 4; ii++){ + aa[ii] = teter_a[ii] + teter_ap[ii]*fz[0]; + bb[ii] = teter_b[ii] + teter_bp[ii]*fz[0]; + } + + } else { + + fz[0] = 0.0; + fz[1] = 0.0; + fz[2] = (8.0/9.0)/FZETAFACTOR; + fz[3] = 0.0; + + for(ii=0; ii < 4; ii++){ + aa[ii] = teter_a[ii]; + bb[ii] = teter_b[ii]; + } + } + + nn = aa[0]*mrs0 + aa[1]*mrs1 + aa[2]*mrs2 + aa[3]*mrs3; + dd = bb[0]*mrs1 + bb[1]*mrs2 + bb[2]*mrs3 + bb[3]*mrs4; + + invdd = 1.0/dd; + + r->zk = -nn*invdd; + + if(r->order < 1) return; /* nothing else to do */ + + DnnDrs = aa[1] + aa[2]*2.0*mrs1 + aa[3]*3.0*mrs2; + DddDrs = bb[0] + bb[1]*2.0*mrs1 + bb[2]*3.0*mrs2 + 4.0*bb[3]*mrs3; + + r->dedrs = -(DnnDrs - DddDrs*nn*invdd)*invdd; + + if(p->nspin == XC_POLARIZED){ + + DnnDz = (teter_ap[0]*mrs0 + teter_ap[1]*mrs1 + teter_ap[2]*mrs2 + teter_ap[3]*mrs3)*fz[1]; + DddDz = (teter_bp[0]*mrs1 + teter_bp[1]*mrs2 + teter_bp[2]*mrs3 + teter_bp[3]*mrs4)*fz[1]; + + r->dedz = -(DnnDz - DddDz*nn*invdd)*invdd; + } + + if(r->order < 2) return; /* nothing else to do */ + + D2nnDrs2 = 2*aa[2] + 3*2*aa[3]*mrs1; + D2ddDrs2 = 2*bb[1] + 3*2*bb[2]*mrs1 + 4*3*bb[3]*mrs2; + + dd2 = dd*dd; + dd3 = dd*dd2; + + r->d2edrs2 = -((D2nnDrs2*dd - D2ddDrs2*nn)*dd - + 2*DddDrs*(DnnDrs*dd - DddDrs*nn))/dd3; + + if(p->nspin == XC_POLARIZED){ + D2nnDrsz = (teter_ap[1] + 2*teter_ap[2]*mrs1 + 3*teter_ap[3]*mrs2)*fz[1]; + D2ddDrsz = (teter_bp[0] + 2*teter_bp[1]*mrs1 + 3*teter_bp[2]*mrs2 + 4*teter_bp[3]*mrs3)*fz[1]; + + D2nnDz2 = (teter_ap[0]*mrs0 + teter_ap[1]*mrs1 + teter_ap[2]*mrs2 + teter_ap[3]*mrs3)*fz[2]; + D2ddDz2 = (teter_bp[0]*mrs1 + teter_bp[1]*mrs2 + teter_bp[2]*mrs3 + teter_bp[3]*mrs4)*fz[2]; + + r->d2edz2 = -((D2nnDz2*dd - D2ddDz2*nn)*dd - + 2*DddDz* (DnnDz*dd - DddDz*nn)) /dd3; + r->d2edrsz = -((D2nnDrsz*dd + DnnDrs*DddDz - D2ddDrsz*nn - DddDrs*DnnDz)*dd - + 2*DddDz* (DnnDrs*dd - DddDrs*nn))/dd3; + } + + if(r->order < 3) return; /* nothing else to do */ + + D3nnDrs3 = 3*2*aa[3]; + D3ddDrs3 = 3*2*bb[2] + 4*3*2*bb[3]*mrs1; + + r->d3edrs3 = (- nn*(6.0*DddDrs*DddDrs*DddDrs - 6.0*dd*DddDrs*D2ddDrs2 + dd2*D3ddDrs3) + + dd*(6.0*DddDrs*DddDrs*DnnDrs - 3.0*dd*DddDrs*D2nnDrs2 + + dd*(-3.0*DnnDrs*D2ddDrs2 + dd*D3nnDrs3))); + r->d3edrs3 /= -dd3*dd; + + if(p->nspin == XC_POLARIZED){ + D3nnDrs2z = (2*teter_ap[2] + 3*2*teter_ap[3]*mrs1)*fz[1]; + D3ddDrs2z = (2*teter_bp[1] + 3*2*teter_bp[2]*mrs1 + 4*3*teter_bp[3]*mrs2)*fz[1]; + + D3nnDrsz2 = (teter_ap[1] + 2*teter_ap[2]*mrs1 + 3*teter_ap[3]*mrs2)*fz[2]; + D3ddDrsz2 = (teter_bp[0] + 2*teter_bp[1]*mrs1 + 3*teter_bp[2]*mrs2 + 4*teter_bp[3]*mrs3)*fz[2]; + + D3nnDz3 = (teter_ap[0]*mrs0 + teter_ap[1]*mrs1 + teter_ap[2]*mrs2 + teter_ap[3]*mrs3)*fz[3]; + D3ddDz3 = (teter_bp[0]*mrs1 + teter_bp[1]*mrs2 + teter_bp[2]*mrs3 + teter_bp[3]*mrs4)*fz[3]; + + r->d3edz3 = (- nn*(6.0*DddDz*DddDz*DddDz - 6.0*dd*DddDz*D2ddDz2 + dd2*D3ddDz3) + + dd*(6.0*DddDz*DddDz*DnnDz - 3.0*dd*DddDz*D2nnDz2 + + dd*(-3.0*DnnDz*D2ddDz2 + dd*D3nnDz3))); + r->d3edz3 /= -dd3*dd; + + r->d3edrs2z = -(nn*(DddDz*(6.0*DddDrs*DddDrs - 2.0*dd*D2ddDrs2) + dd*(-4.0*DddDrs*D2ddDrsz + dd*D3ddDrs2z)) + + dd*(DnnDz*(-2.0*DddDrs*DddDrs + dd*D2ddDrs2) + DddDz*(-4.0*DddDrs*DnnDrs + dd*D2nnDrs2) + + dd*(2.0*DnnDrs*D2ddDrsz + 2.0*DddDrs*D2nnDrsz - dd*D3nnDrs2z))); + r->d3edrs2z /= -dd3*dd; + + r->d3edrsz2 = -(nn*(DddDrs*(6.0*DddDz*DddDz - 2.0*dd*D2ddDz2) + dd*(-4.0*DddDz*D2ddDrsz + dd*D3ddDrsz2)) + + dd*(DnnDrs*(-2.0*DddDz*DddDz + dd*D2ddDz2) + DddDrs*(-4.0*DddDz*DnnDz + dd*D2nnDz2) + + dd*(2.0*DnnDz*D2ddDrsz + 2.0*DddDz*D2nnDrsz - dd*D3nnDrsz2))); + r->d3edrsz2 /= -dd3*dd; + } +} + +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_xc_teter93) = { + XC_LDA_XC_TETER93, + XC_EXCHANGE_CORRELATION, + "Teter 93", + XC_FAMILY_LDA, + "S Goedecker, M Teter, J Hutter, PRB 54, 1703 (1996)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 0.0, 0.0, 1e-32, + NULL, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; diff --git a/libxc-2.2.0/src/libxc.f90 b/libxc-2.2.0/src/libxc.f90 new file mode 100644 index 000000000..30cefb727 --- /dev/null +++ b/libxc-2.2.0/src/libxc.f90 @@ -0,0 +1,535 @@ +# 1 "./libxc_master.F90" +# 1 "" +# 1 "" +# 1 "./libxc_master.F90" +!! Copyright (C) 2003-2006 M. Marques, A. Castro, A. Rubio, G. Bertsch +!! +!! This program is free software; you can redistribute it and/or modify +!! it under the terms of the GNU Lesser General Public License as published by +!! the Free Software Foundation; either version 2, or (at your option) +!! any later version. +!! +!! This program is distributed in the hope that it will be useful, +!! but WITHOUT ANY WARRANTY; without even the implied warranty of +!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +!! GNU Lesser General Public License for more details. +!! +!! You should have received a copy of the GNU Lesser General Public License +!! along with this program; if not, write to the Free Software +!! Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +!! 02110-1301, USA. +!! +!! $Id: libxc.f90 3550 2007-11-19 14:32:49Z marques $ +# 27 "./libxc_master.F90" +!------------------------------------------------------------------- +module xc_f90_types_m + + + + integer, public, parameter :: xc_f90_kind = selected_real_kind(14) + + + type xc_f90_pointer_t + private + integer, pointer :: buffer + end type xc_f90_pointer_t + +end module xc_f90_types_m + + +!------------------------------------------------------------------- +module xc_f90_lib_m + + use xc_f90_types_m + use libxc_funcs_m + + implicit none + + public + + ! Families of xc functionals + integer, parameter :: & + XC_FAMILY_UNKNOWN = -1, & + XC_FAMILY_NONE = 0, & + XC_FAMILY_LDA = 1, & + XC_FAMILY_GGA = 2, & + XC_FAMILY_MGGA = 4, & + XC_FAMILY_LCA = 8, & + XC_FAMILY_OEP = 16, & + XC_FAMILY_HYB_GGA = 32, & + XC_FAMILY_HYB_MGGA = 64 + + integer, parameter :: & + XC_UNPOLARIZED = 1, & ! Spin unpolarized + XC_POLARIZED = 2 ! Spin polarized + + integer, parameter :: & + XC_NON_RELATIVISTIC = 0, & ! Functional includes or not relativistic + XC_RELATIVISTIC = 1 ! corrections. Only available in some functionals. + + ! Kinds + integer, parameter :: & + XC_EXCHANGE = 0, & + XC_CORRELATION = 1, & + XC_EXCHANGE_CORRELATION = 2, & + XC_KINETIC = 3 + + integer, parameter :: & + XC_FLAGS_HAVE_EXC = 1, & + XC_FLAGS_HAVE_VXC = 2, & + XC_FLAGS_HAVE_FXC = 4, & + XC_FLAGS_HAVE_KXC = 8, & + XC_FLAGS_HAVE_LXC = 16, & + XC_FLAGS_1D = 32, & + XC_FLAGS_2D = 64, & + XC_FLAGS_3D = 128, & + XC_FLAGS_STABLE = 512, & + XC_FLAGS_DEVELOPMENT = 1024 + + ! These are old names keep for compatibility, and that should disappear soon + integer, parameter :: XC_GGA_XC_LB = 160 + integer, parameter :: XC_GGA_K_ABSR1 = 506 + integer, parameter :: XC_GGA_K_ABSR2 = 507 + + !---------------------------------------------------------------- + interface + subroutine xc_f90_version(major, minor) + integer, intent(out) :: major, minor + end subroutine xc_f90_version + end interface + + !---------------------------------------------------------------- + interface + integer function xc_f90_info_number(info) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: info + end function xc_f90_info_number + + integer function xc_f90_info_kind(info) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: info + end function xc_f90_info_kind + + subroutine xc_f90_info_name(info, s) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: info + character(len=*), intent(out) :: s + end subroutine xc_f90_info_name + + integer function xc_f90_info_family(info) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: info + end function xc_f90_info_family + + integer function xc_f90_info_flags(info) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: info + end function xc_f90_info_flags + + subroutine xc_f90_info_refs(info, number, str, s) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: info + integer, intent(inout) :: number ! number of the reference. Must be 0 in the first call + type(xc_f90_pointer_t), intent(inout) :: str ! this will hold a (char **) pointer + character(len=*), intent(out) :: s ! the string that is output + end subroutine xc_f90_info_refs + + subroutine xc_f90_functional_get_name(func_number, func_string) + integer, intent(in) :: func_number + character(len=256), intent(out) :: func_string + end subroutine xc_f90_functional_get_name + + integer function xc_f90_functional_get_number(func_string) + character(len=*), intent(in) :: func_string + end function xc_f90_functional_get_number + + integer function xc_f90_family_from_id(id) + use xc_f90_types_m + integer, intent(in) :: id + end function xc_f90_family_from_id + end interface + + + !---------------------------------------------------------------- + interface + subroutine xc_f90_func_init(p, info, functional, nspin) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(out) :: p + type(xc_f90_pointer_t), intent(out) :: info + integer, intent(in) :: functional + integer, intent(in) :: nspin + end subroutine xc_f90_func_init + + subroutine xc_f90_func_end(p) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(inout) :: p + end subroutine xc_f90_func_end + end interface + + + ! LDAs + !---------------------------------------------------------------- + interface + subroutine xc_f90_lda(p, np, rho, zk, vrho, fxc, kxc) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho ! rho(nspin) the density + real(xc_f90_kind), intent(out) :: zk ! the energy per unit particle + real(xc_f90_kind), intent(out) :: vrho ! v(nspin) the potential + real(xc_f90_kind), intent(out) :: fxc ! v(nspin,nspin) the xc kernel + real(xc_f90_kind), intent(out) :: kxc ! v(nspin,nspin,nspin) the derivative of xc kernel + end subroutine xc_f90_lda + + subroutine xc_f90_lda_exc(p, np, rho, zk) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho ! rho(nspin) the density + real(xc_f90_kind), intent(out) :: zk ! the energy per unit particle + end subroutine xc_f90_lda_exc + + subroutine xc_f90_lda_exc_vxc(p, np, rho, e, v) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho ! rho(nspin) the density + real(xc_f90_kind), intent(out) :: e ! the energy per unit particle + real(xc_f90_kind), intent(out) :: v ! v(nspin) the potential + end subroutine xc_f90_lda_exc_vxc + + subroutine xc_f90_lda_vxc(p, np, rho, v) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho ! rho(nspin) the density + real(xc_f90_kind), intent(out) :: v ! v(nspin) the potential + end subroutine xc_f90_lda_vxc + + subroutine xc_f90_lda_fxc(p, np, rho, fxc) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho ! rho(nspin) the density + real(xc_f90_kind), intent(out) :: fxc ! v(nspin,nspin) the xc kernel + end subroutine xc_f90_lda_fxc + + subroutine xc_f90_lda_kxc(p, np, rho, kxc) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho ! rho(nspin) the density + real(xc_f90_kind), intent(out) :: kxc + end subroutine xc_f90_lda_kxc + end interface + + + interface + subroutine xc_f90_lda_x_1d_set_par(p, interaction, bb) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(inout) :: p + integer, intent(in) :: interaction + real(xc_f90_kind), intent(in) :: bb + end subroutine xc_f90_lda_x_1d_set_par + + subroutine xc_f90_lda_c_xalpha_set_par(p, alpha) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(inout) :: p + real(xc_f90_kind), intent(in) :: alpha + end subroutine xc_f90_lda_c_xalpha_set_par + + subroutine xc_f90_lda_x_set_par(p, alpha, relativistic, omega) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(inout) :: p + real(xc_f90_kind), intent(in) :: alpha ! of Xalpha, set to 4/3 to obtain standard LDA + integer, intent(in) :: relativistic + real(xc_f90_kind), intent(in) :: omega + end subroutine xc_f90_lda_x_set_par + + subroutine xc_f90_lda_c_1d_csc_set_par(p, interaction, bb) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(inout) :: p + integer, intent(in) :: interaction + real(xc_f90_kind), intent(in) :: bb + end subroutine xc_f90_lda_c_1d_csc_set_par + + subroutine xc_f90_lda_c_2d_prm_set_par(p, N) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(inout) :: p + real(xc_f90_kind), intent(in) :: N + end subroutine xc_f90_lda_c_2d_prm_set_par + end interface + + ! GGAs + !---------------------------------------------------------------- + interface + subroutine xc_f90_gga(p, np, rho, sigma, zk, vrho, vsigma, & + v2rho2, v2rhosigma, v2sigma2, v3rho3, v3rho2sigma, v3rhosigma2, v3sigma3) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(out) :: zk + real(xc_f90_kind), intent(out) :: vrho + real(xc_f90_kind), intent(out) :: vsigma + real(xc_f90_kind), intent(out) :: v2rho2 + real(xc_f90_kind), intent(out) :: v2rhosigma + real(xc_f90_kind), intent(out) :: v2sigma2 + real(xc_f90_kind), intent(out) :: v3rho3 + real(xc_f90_kind), intent(out) :: v3rho2sigma + real(xc_f90_kind), intent(out) :: v3rhosigma2 + real(xc_f90_kind), intent(out) :: v3sigma3 + end subroutine xc_f90_gga + + subroutine xc_f90_gga_exc(p, np, rho, sigma, zk) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(out) :: zk + end subroutine xc_f90_gga_exc + + subroutine xc_f90_gga_exc_vxc(p, np, rho, sigma, zk, vrho, vsigma) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(out) :: zk + real(xc_f90_kind), intent(out) :: vrho + real(xc_f90_kind), intent(out) :: vsigma + end subroutine xc_f90_gga_exc_vxc + + subroutine xc_f90_gga_vxc(p, np, rho, sigma, vrho, vsigma) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(out) :: vrho + real(xc_f90_kind), intent(out) :: vsigma + end subroutine xc_f90_gga_vxc + + subroutine xc_f90_gga_fxc(p, np, rho, sigma, v2rho2, v2rhosigma, v2sigma2) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(out) :: v2rho2 + real(xc_f90_kind), intent(out) :: v2rhosigma + real(xc_f90_kind), intent(out) :: v2sigma2 + end subroutine xc_f90_gga_fxc + + subroutine xc_f90_gga_kxc(p, np, rho, sigma, v3rho3, v3rho2sigma, v3rhosigma2, v3sigma3) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(out) :: v3rho3 + real(xc_f90_kind), intent(out) :: v3rho2sigma + real(xc_f90_kind), intent(out) :: v3rhosigma2 + real(xc_f90_kind), intent(out) :: v3sigma3 + end subroutine xc_f90_gga_kxc + end interface + + !---------------------------------------------------------------- + interface + subroutine xc_f90_gga_lb_set_par(p, modified, threshold, ip, qtot) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: modified ! should we use the modified version + real(xc_f90_kind), intent(in) :: threshold ! if so, the threshold to use the asymtotic version + real(xc_f90_kind), intent(in) :: ip ! ionization potential + real(xc_f90_kind), intent(in) :: qtot ! total charge + end subroutine xc_f90_gga_lb_set_par + end interface + + + !---------------------------------------------------------------- + interface + subroutine xc_f90_gga_lb_modified(p, np, rho, grho, r, dedd) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho ! rho(nspin) the density + real(xc_f90_kind), intent(in) :: grho ! grho(3,nspin) the gradient of the density + real(xc_f90_kind), intent(in) :: r ! distance from center of finite system + real(xc_f90_kind), intent(out) :: dedd + end subroutine xc_f90_gga_lb_modified + end interface + + + !---------------------------------------------------------------- + interface + subroutine xc_f90_gga_x_wpbeh_set_par(p, omega) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + real(xc_f90_kind), intent(in) :: omega ! range separation + end subroutine xc_f90_gga_x_wpbeh_set_par + end interface + + !---------------------------------------------------------------- + interface + subroutine xc_f90_gga_x_hjs_set_par(p, omega) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + real(xc_f90_kind), intent(in) :: omega ! range separation + end subroutine xc_f90_gga_x_hjs_set_par + end interface + + !---------------------------------------------------------------- + interface + subroutine xc_f90_gga_ak13_get_asymptotic(homo, asymp) + use xc_f90_types_m + real(xc_f90_kind), intent(in) :: homo + real(xc_f90_kind), intent(out) :: asymp + end subroutine xc_f90_gga_ak13_get_asymptotic + end interface + + !---------------------------------------------------------------- + interface + subroutine xc_f90_hyb_exx_coef(p, coef) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + real(xc_f90_kind), intent(out) :: coef + end subroutine xc_f90_hyb_exx_coef + + subroutine xc_f90_hyb_cam_coef(p, omega, alpha, beta) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + real(xc_f90_kind), intent(out) :: omega, alpha, beta + end subroutine xc_f90_hyb_cam_coef + end interface + + + !---------------------------------------------------------------- + interface + subroutine xc_f90_hyb_gga_xc_hse_set_par(p, beta, omega) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + real(xc_f90_kind), intent(in) :: beta ! mixing + real(xc_f90_kind), intent(in) :: omega ! range separation + end subroutine xc_f90_hyb_gga_xc_hse_set_par + + subroutine xc_f90_hyb_gga_xc_pbeh_set_par(p, alpha) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + real(xc_f90_kind), intent(in) :: alpha ! mixing + end subroutine xc_f90_hyb_gga_xc_pbeh_set_par + end interface + + + ! the meta-GGAs + !---------------------------------------------------------------- + interface + subroutine xc_f90_mgga(p, np, rho, sigma, lapl, tau, zk, vrho, vsigma, vlapl, vtau, & + v2rho2, v2sigma2, v2lapl2, v2tau2, v2rhosigma, v2rholapl, v2rhotau, & + v2sigmalapl, v2sigmatau, v2lapltau) + + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(in) :: lapl + real(xc_f90_kind), intent(in) :: tau + real(xc_f90_kind), intent(out) :: zk + real(xc_f90_kind), intent(out) :: vrho + real(xc_f90_kind), intent(out) :: vsigma + real(xc_f90_kind), intent(out) :: vlapl + real(xc_f90_kind), intent(out) :: vtau + real(xc_f90_kind), intent(out) :: v2rho2 + real(xc_f90_kind), intent(out) :: v2sigma2 + real(xc_f90_kind), intent(out) :: v2lapl2 + real(xc_f90_kind), intent(out) :: v2tau2 + real(xc_f90_kind), intent(out) :: v2rhosigma + real(xc_f90_kind), intent(out) :: v2rholapl + real(xc_f90_kind), intent(out) :: v2rhotau + real(xc_f90_kind), intent(out) :: v2sigmalapl + real(xc_f90_kind), intent(out) :: v2sigmatau + real(xc_f90_kind), intent(out) :: v2lapltau + end subroutine xc_f90_mgga + + subroutine xc_f90_mgga_exc(p, np, rho, sigma, lapl, tau, zk) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(in) :: lapl + real(xc_f90_kind), intent(in) :: tau + real(xc_f90_kind), intent(out) :: zk + end subroutine xc_f90_mgga_exc + + subroutine xc_f90_mgga_exc_vxc(p, np, rho, sigma, lapl, tau, zk, vrho, vsigma, vlapl, vtau) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(in) :: lapl + real(xc_f90_kind), intent(in) :: tau + real(xc_f90_kind), intent(out) :: zk + real(xc_f90_kind), intent(out) :: vrho + real(xc_f90_kind), intent(out) :: vsigma + real(xc_f90_kind), intent(out) :: vlapl + real(xc_f90_kind), intent(out) :: vtau + end subroutine xc_f90_mgga_exc_vxc + + subroutine xc_f90_mgga_vxc(p, np, rho, sigma, lapl, tau, vrho, vsigma, vlapl, vtau) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(in) :: lapl + real(xc_f90_kind), intent(in) :: tau + real(xc_f90_kind), intent(out) :: vrho + real(xc_f90_kind), intent(out) :: vsigma + real(xc_f90_kind), intent(out) :: vlapl + real(xc_f90_kind), intent(out) :: vtau + end subroutine xc_f90_mgga_vxc + + subroutine xc_f90_mgga_fxc(p, np, rho, sigma, lapl, tau, & + v2rho2, v2sigma2, v2lapl2, v2tau2, v2rhosigma, v2rholapl, v2rhotau, & + v2sigmalapl, v2sigmatau, v2lapltau) + + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(in) :: lapl + real(xc_f90_kind), intent(in) :: tau + real(xc_f90_kind), intent(out) :: v2rho2 + real(xc_f90_kind), intent(out) :: v2sigma2 + real(xc_f90_kind), intent(out) :: v2lapl2 + real(xc_f90_kind), intent(out) :: v2tau2 + real(xc_f90_kind), intent(out) :: v2rhosigma + real(xc_f90_kind), intent(out) :: v2rholapl + real(xc_f90_kind), intent(out) :: v2rhotau + real(xc_f90_kind), intent(out) :: v2sigmalapl + real(xc_f90_kind), intent(out) :: v2sigmatau + real(xc_f90_kind), intent(out) :: v2lapltau + end subroutine xc_f90_mgga_fxc + end interface + + interface + subroutine xc_f90_mgga_x_tb09_set_par(p, cc) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(inout) :: p + real(xc_f90_kind), intent(in) :: cc + end subroutine xc_f90_mgga_x_tb09_set_par + end interface + + +end module xc_f90_lib_m + +!! Local Variables: +!! mode: f90 +!! coding: utf-8 +!! End: diff --git a/libxc-2.2.0/src/libxc_funcs.f90 b/libxc-2.2.0/src/libxc_funcs.f90 new file mode 100644 index 000000000..1ef3a7a89 --- /dev/null +++ b/libxc-2.2.0/src/libxc_funcs.f90 @@ -0,0 +1,325 @@ +module libxc_funcs_m + implicit none + + public + + integer, parameter :: XC_LDA_X = 1 ! Exchange + integer, parameter :: XC_LDA_C_WIGNER = 2 ! Wigner parametrization + integer, parameter :: XC_LDA_C_RPA = 3 ! Random Phase Approximation + integer, parameter :: XC_LDA_C_HL = 4 ! Hedin & Lundqvist + integer, parameter :: XC_LDA_C_GL = 5 ! Gunnarson & Lundqvist + integer, parameter :: XC_LDA_C_XALPHA = 6 ! Slater Xalpha + integer, parameter :: XC_LDA_C_VWN = 7 ! Vosko, Wilk, & Nussair (5) + integer, parameter :: XC_LDA_C_VWN_RPA = 8 ! Vosko, Wilk, & Nussair (RPA) + integer, parameter :: XC_LDA_C_PZ = 9 ! Perdew & Zunger + integer, parameter :: XC_LDA_C_PZ_MOD = 10 ! Perdew & Zunger (Modified) + integer, parameter :: XC_LDA_C_OB_PZ = 11 ! Ortiz & Ballone (PZ) + integer, parameter :: XC_LDA_C_PW = 12 ! Perdew & Wang + integer, parameter :: XC_LDA_C_PW_MOD = 13 ! Perdew & Wang (Modified) + integer, parameter :: XC_LDA_C_OB_PW = 14 ! Ortiz & Ballone (PW) + integer, parameter :: XC_LDA_C_2D_AMGB = 15 ! Attaccalite et al + integer, parameter :: XC_LDA_C_2D_PRM = 16 ! Pittalis, Rasanen & Marques correlation in 2D + integer, parameter :: XC_LDA_C_vBH = 17 ! von Barth & Hedin + integer, parameter :: XC_LDA_C_1D_CSC = 18 ! Casula, Sorella, and Senatore 1D correlation + integer, parameter :: XC_LDA_X_2D = 19 ! Exchange in 2D + integer, parameter :: XC_LDA_XC_TETER93 = 20 ! Teter 93 parametrization + integer, parameter :: XC_LDA_X_1D = 21 ! Exchange in 1D + integer, parameter :: XC_LDA_C_ML1 = 22 ! Modified LSD (version 1) of Proynov and Salahub + integer, parameter :: XC_LDA_C_ML2 = 23 ! Modified LSD (version 2) of Proynov and Salahub + integer, parameter :: XC_LDA_C_GOMBAS = 24 ! Gombas parametrization + integer, parameter :: XC_LDA_C_PW_RPA = 25 ! Perdew & Wang fit of the RPA + integer, parameter :: XC_LDA_C_1D_LOOS = 26 ! P-F Loos correlation LDA + integer, parameter :: XC_LDA_C_RC04 = 27 ! Ragot-Cortona + integer, parameter :: XC_LDA_C_VWN_1 = 28 ! Vosko, Wilk, & Nussair (1) + integer, parameter :: XC_LDA_C_VWN_2 = 29 ! Vosko, Wilk, & Nussair (2) + integer, parameter :: XC_LDA_C_VWN_3 = 30 ! Vosko, Wilk, & Nussair (3) + integer, parameter :: XC_LDA_C_VWN_4 = 31 ! Vosko, Wilk, & Nussair (4) + integer, parameter :: XC_LDA_K_TF = 50 ! Thomas-Fermi kinetic energy functional + integer, parameter :: XC_LDA_K_LP = 51 ! Lee and Parr Gaussian ansatz + integer, parameter :: XC_GGA_C_Q2D = 47 ! Chiodo et al + integer, parameter :: XC_GGA_X_Q2D = 48 ! Chiodo et al + integer, parameter :: XC_GGA_X_PBE_MOL = 49 ! Del Campo, Gazquez, Trickey and Vela (PBE-like) + integer, parameter :: XC_GGA_K_TFVW = 52 ! Thomas-Fermi plus von Weiszaecker correction + integer, parameter :: XC_GGA_K_REVAPBEINT = 53 ! interpolated version of REVAPBE + integer, parameter :: XC_GGA_K_APBEINT = 54 ! interpolated version of APBE + integer, parameter :: XC_GGA_K_REVAPBE = 55 ! revised APBE + integer, parameter :: XC_GGA_X_AK13 = 56 ! Armiento & Kuemmel 2013 + integer, parameter :: XC_GGA_K_MEYER = 57 ! Meyer, Wang, and Young + integer, parameter :: XC_GGA_X_LV_RPW86 = 58 ! Berland and Hyldgaard + integer, parameter :: XC_GGA_X_PBE_TCA = 59 ! PBE revised by Tognetti et al + integer, parameter :: XC_GGA_X_PBEINT = 60 ! PBE for hybrid interfaces + integer, parameter :: XC_GGA_C_ZPBEINT = 61 ! spin-dependent gradient correction to PBEint + integer, parameter :: XC_GGA_C_PBEINT = 62 ! PBE for hybrid interfaces + integer, parameter :: XC_GGA_C_ZPBESOL = 63 ! spin-dependent gradient correction to PBEsol + integer, parameter :: XC_GGA_XC_OPBE_D = 65 ! oPBE_D functional of Goerigk and Grimme + integer, parameter :: XC_GGA_XC_OPWLYP_D = 66 ! oPWLYP-D functional of Goerigk and Grimme + integer, parameter :: XC_GGA_XC_OBLYP_D = 67 ! oBLYP-D functional of Goerigk and Grimme + integer, parameter :: XC_GGA_X_VMT84_GE = 68 ! VMT{8,4} with constraint satisfaction with mu = mu_GE + integer, parameter :: XC_GGA_X_VMT84_PBE = 69 ! VMT{8,4} with constraint satisfaction with mu = mu_PBE + integer, parameter :: XC_GGA_X_VMT_GE = 70 ! Vela, Medel, and Trickey with mu = mu_GE + integer, parameter :: XC_GGA_X_VMT_PBE = 71 ! Vela, Medel, and Trickey with mu = mu_PBE + integer, parameter :: XC_GGA_C_N12_SX = 79 ! N12-SX functional from Minnesota + integer, parameter :: XC_GGA_C_N12 = 80 ! N12 functional from Minnesota + integer, parameter :: XC_GGA_X_N12 = 82 ! N12 functional from Minnesota + integer, parameter :: XC_GGA_C_VPBE = 83 ! variant PBE + integer, parameter :: XC_GGA_C_OP_XALPHA = 84 ! one-parameter progressive functional (XALPHA version) + integer, parameter :: XC_GGA_C_OP_G96 = 85 ! one-parameter progressive functional (G96 version) + integer, parameter :: XC_GGA_C_OP_PBE = 86 ! one-parameter progressive functional (PBE version) + integer, parameter :: XC_GGA_C_OP_B88 = 87 ! one-parameter progressive functional (B88 version) + integer, parameter :: XC_GGA_C_FT97 = 88 ! Filatov & Thiel correlation + integer, parameter :: XC_GGA_C_SPBE = 89 ! PBE correlation to be used with the SSB exchange + integer, parameter :: XC_GGA_X_SSB_SW = 90 ! Swarta, Sola and Bickelhaupt correction to PBE + integer, parameter :: XC_GGA_X_SSB = 91 ! Swarta, Sola and Bickelhaupt + integer, parameter :: XC_GGA_X_SSB_D = 92 ! Swarta, Sola and Bickelhaupt dispersion + integer, parameter :: XC_GGA_XC_HCTH_407P = 93 ! HCTH/407+ + integer, parameter :: XC_GGA_XC_HCTH_P76 = 94 ! HCTH p=7/6 + integer, parameter :: XC_GGA_XC_HCTH_P14 = 95 ! HCTH p=1/4 + integer, parameter :: XC_GGA_XC_B97_GGA1 = 96 ! Becke 97 GGA-1 + integer, parameter :: XC_GGA_XC_HCTH_A = 97 ! HCTH-A + integer, parameter :: XC_GGA_X_BPCCAC = 98 ! BPCCAC (GRAC for the energy) + integer, parameter :: XC_GGA_C_REVTCA = 99 ! Tognetti, Cortona, Adamo (revised) + integer, parameter :: XC_GGA_C_TCA = 100 ! Tognetti, Cortona, Adamo + integer, parameter :: XC_GGA_X_PBE = 101 ! Perdew, Burke & Ernzerhof exchange + integer, parameter :: XC_GGA_X_PBE_R = 102 ! Perdew, Burke & Ernzerhof exchange (revised) + integer, parameter :: XC_GGA_X_B86 = 103 ! Becke 86 Xalfa,beta,gamma + integer, parameter :: XC_GGA_X_HERMAN = 104 ! Herman et al original GGA + integer, parameter :: XC_GGA_X_B86_MGC = 105 ! Becke 86 Xalfa,beta,gamma (with mod. grad. correction) + integer, parameter :: XC_GGA_X_B88 = 106 ! Becke 88 + integer, parameter :: XC_GGA_X_G96 = 107 ! Gill 96 + integer, parameter :: XC_GGA_X_PW86 = 108 ! Perdew & Wang 86 + integer, parameter :: XC_GGA_X_PW91 = 109 ! Perdew & Wang 91 + integer, parameter :: XC_GGA_X_OPTX = 110 ! Handy & Cohen OPTX 01 + integer, parameter :: XC_GGA_X_DK87_R1 = 111 ! dePristo & Kress 87 (version R1) + integer, parameter :: XC_GGA_X_DK87_R2 = 112 ! dePristo & Kress 87 (version R2) + integer, parameter :: XC_GGA_X_LG93 = 113 ! Lacks & Gordon 93 + integer, parameter :: XC_GGA_X_FT97_A = 114 ! Filatov & Thiel 97 (version A) + integer, parameter :: XC_GGA_X_FT97_B = 115 ! Filatov & Thiel 97 (version B) + integer, parameter :: XC_GGA_X_PBE_SOL = 116 ! Perdew, Burke & Ernzerhof exchange (solids) + integer, parameter :: XC_GGA_X_RPBE = 117 ! Hammer, Hansen & Norskov (PBE-like) + integer, parameter :: XC_GGA_X_WC = 118 ! Wu & Cohen + integer, parameter :: XC_GGA_X_MPW91 = 119 ! Modified form of PW91 by Adamo & Barone + integer, parameter :: XC_GGA_X_AM05 = 120 ! Armiento & Mattsson 05 exchange + integer, parameter :: XC_GGA_X_PBEA = 121 ! Madsen (PBE-like) + integer, parameter :: XC_GGA_X_MPBE = 122 ! Adamo & Barone modification to PBE + integer, parameter :: XC_GGA_X_XPBE = 123 ! xPBE reparametrization by Xu & Goddard + integer, parameter :: XC_GGA_X_2D_B86_MGC = 124 ! Becke 86 MGC for 2D systems + integer, parameter :: XC_GGA_X_BAYESIAN = 125 ! Bayesian best fit for the enhancement factor + integer, parameter :: XC_GGA_X_PBE_JSJR = 126 ! JSJR reparametrization by Pedroza, Silva & Capelle + integer, parameter :: XC_GGA_X_2D_B88 = 127 ! Becke 88 in 2D + integer, parameter :: XC_GGA_X_2D_B86 = 128 ! Becke 86 Xalfa,beta,gamma + integer, parameter :: XC_GGA_X_2D_PBE = 129 ! Perdew, Burke & Ernzerhof exchange in 2D + integer, parameter :: XC_GGA_C_PBE = 130 ! Perdew, Burke & Ernzerhof correlation + integer, parameter :: XC_GGA_C_LYP = 131 ! Lee, Yang & Parr + integer, parameter :: XC_GGA_C_P86 = 132 ! Perdew 86 + integer, parameter :: XC_GGA_C_PBE_SOL = 133 ! Perdew, Burke & Ernzerhof correlation SOL + integer, parameter :: XC_GGA_C_PW91 = 134 ! Perdew & Wang 91 + integer, parameter :: XC_GGA_C_AM05 = 135 ! Armiento & Mattsson 05 correlation + integer, parameter :: XC_GGA_C_XPBE = 136 ! xPBE reparametrization by Xu & Goddard + integer, parameter :: XC_GGA_C_LM = 137 ! Langreth and Mehl correlation + integer, parameter :: XC_GGA_C_PBE_JRGX = 138 ! JRGX reparametrization by Pedroza, Silva & Capelle + integer, parameter :: XC_GGA_X_OPTB88_VDW = 139 ! Becke 88 reoptimized to be used with vdW functional of Dion et al + integer, parameter :: XC_GGA_X_PBEK1_VDW = 140 ! PBE reparametrization for vdW + integer, parameter :: XC_GGA_X_OPTPBE_VDW = 141 ! PBE reparametrization for vdW + integer, parameter :: XC_GGA_X_RGE2 = 142 ! Regularized PBE + integer, parameter :: XC_GGA_C_RGE2 = 143 ! Regularized PBE + integer, parameter :: XC_GGA_X_RPW86 = 144 ! refitted Perdew & Wang 86 + integer, parameter :: XC_GGA_X_KT1 = 145 ! Keal and Tozer version 1 + integer, parameter :: XC_GGA_XC_KT2 = 146 ! Keal and Tozer version 2 + integer, parameter :: XC_GGA_C_WL = 147 ! Wilson & Levy + integer, parameter :: XC_GGA_C_WI = 148 ! Wilson & Ivanov + integer, parameter :: XC_GGA_X_MB88 = 149 ! Modified Becke 88 for proton transfer + integer, parameter :: XC_GGA_X_SOGGA = 150 ! Second-order generalized gradient approximation + integer, parameter :: XC_GGA_X_SOGGA11 = 151 ! Second-order generalized gradient approximation 2011 + integer, parameter :: XC_GGA_C_SOGGA11 = 152 ! Second-order generalized gradient approximation 2011 + integer, parameter :: XC_GGA_C_WI0 = 153 ! Wilson & Ivanov initial version + integer, parameter :: XC_GGA_XC_TH1 = 154 ! Tozer and Handy v. 1 + integer, parameter :: XC_GGA_XC_TH2 = 155 ! Tozer and Handy v. 2 + integer, parameter :: XC_GGA_XC_TH3 = 156 ! Tozer and Handy v. 3 + integer, parameter :: XC_GGA_XC_TH4 = 157 ! Tozer and Handy v. 4 + integer, parameter :: XC_GGA_X_C09X = 158 ! C09x to be used with the VdW of Rutgers-Chalmers + integer, parameter :: XC_GGA_C_SOGGA11_X = 159 ! To be used with hyb_gga_x_SOGGA11-X + integer, parameter :: XC_GGA_X_LB = 160 ! van Leeuwen & Baerends + integer, parameter :: XC_GGA_XC_HCTH_93 = 161 ! HCTH functional fitted to 93 molecules + integer, parameter :: XC_GGA_XC_HCTH_120 = 162 ! HCTH functional fitted to 120 molecules + integer, parameter :: XC_GGA_XC_HCTH_147 = 163 ! HCTH functional fitted to 147 molecules + integer, parameter :: XC_GGA_XC_HCTH_407 = 164 ! HCTH functional fitted to 407 molecules + integer, parameter :: XC_GGA_XC_EDF1 = 165 ! Empirical functionals from Adamson, Gill, and Pople + integer, parameter :: XC_GGA_XC_XLYP = 166 ! XLYP functional + integer, parameter :: XC_GGA_XC_B97 = 167 ! Becke 97 + integer, parameter :: XC_GGA_XC_B97_1 = 168 ! Becke 97-1 + integer, parameter :: XC_GGA_XC_B97_2 = 169 ! Becke 97-2 + integer, parameter :: XC_GGA_XC_B97_D = 170 ! Grimme functional to be used with C6 vdW term + integer, parameter :: XC_GGA_XC_B97_K = 171 ! Boese-Martin for Kinetics + integer, parameter :: XC_GGA_XC_B97_3 = 172 ! Becke 97-3 + integer, parameter :: XC_GGA_XC_PBE1W = 173 ! Functionals fitted for water + integer, parameter :: XC_GGA_XC_MPWLYP1W = 174 ! Functionals fitted for water + integer, parameter :: XC_GGA_XC_PBELYP1W = 175 ! Functionals fitted for water + integer, parameter :: XC_GGA_XC_SB98_1a = 176 ! Schmider-Becke 98 parameterization 1a + integer, parameter :: XC_GGA_XC_SB98_1b = 177 ! Schmider-Becke 98 parameterization 1b + integer, parameter :: XC_GGA_XC_SB98_1c = 178 ! Schmider-Becke 98 parameterization 1c + integer, parameter :: XC_GGA_XC_SB98_2a = 179 ! Schmider-Becke 98 parameterization 2a + integer, parameter :: XC_GGA_XC_SB98_2b = 180 ! Schmider-Becke 98 parameterization 2b + integer, parameter :: XC_GGA_XC_SB98_2c = 181 ! Schmider-Becke 98 parameterization 2c + integer, parameter :: XC_GGA_X_LBM = 182 ! van Leeuwen & Baerends modified + integer, parameter :: XC_GGA_X_OL2 = 183 ! Exchange form based on Ou-Yang and Levy v.2 + integer, parameter :: XC_GGA_X_APBE = 184 ! mu fixed from the semiclassical neutral atom + integer, parameter :: XC_GGA_K_APBE = 185 ! mu fixed from the semiclassical neutral atom + integer, parameter :: XC_GGA_C_APBE = 186 ! mu fixed from the semiclassical neutral atom + integer, parameter :: XC_GGA_K_TW1 = 187 ! Tran and Wesolowski set 1 (Table II) + integer, parameter :: XC_GGA_K_TW2 = 188 ! Tran and Wesolowski set 2 (Table II) + integer, parameter :: XC_GGA_K_TW3 = 189 ! Tran and Wesolowski set 3 (Table II) + integer, parameter :: XC_GGA_K_TW4 = 190 ! Tran and Wesolowski set 4 (Table II) + integer, parameter :: XC_GGA_X_HTBS = 191 ! Haas, Tran, Blaha, and Schwarz + integer, parameter :: XC_GGA_X_AIRY = 192 ! Constantin et al based on the Airy gas + integer, parameter :: XC_GGA_X_LAG = 193 ! Local Airy Gas + integer, parameter :: XC_GGA_XC_MOHLYP = 194 ! Functional for organometallic chemistry + integer, parameter :: XC_GGA_XC_MOHLYP2 = 195 ! Functional for barrier heights + integer, parameter :: XC_GGA_XC_TH_FL = 196 ! Tozer and Handy v. FL + integer, parameter :: XC_GGA_XC_TH_FC = 197 ! Tozer and Handy v. FC + integer, parameter :: XC_GGA_XC_TH_FCFO = 198 ! Tozer and Handy v. FCFO + integer, parameter :: XC_GGA_XC_TH_FCO = 199 ! Tozer and Handy v. FCO + integer, parameter :: XC_GGA_C_OPTC = 200 ! Optimized correlation functional of Cohen and Handy + integer, parameter :: XC_GGA_K_VW = 500 ! von Weiszaecker functional + integer, parameter :: XC_GGA_K_GE2 = 501 ! Second-order gradient expansion (l = 1/9) + integer, parameter :: XC_GGA_K_GOLDEN = 502 ! TF-lambda-vW form by Golden (l = 13/45) + integer, parameter :: XC_GGA_K_YT65 = 503 ! TF-lambda-vW form by Yonei and Tomishima (l = 1/5) + integer, parameter :: XC_GGA_K_BALTIN = 504 ! TF-lambda-vW form by Baltin (l = 5/9) + integer, parameter :: XC_GGA_K_LIEB = 505 ! TF-lambda-vW form by Lieb (l = 0.185909191) + integer, parameter :: XC_GGA_K_ABSP1 = 506 ! gamma-TFvW form by Acharya et al [g = 1 - 1.412/N^(1/3)] + integer, parameter :: XC_GGA_K_ABSP2 = 507 ! gamma-TFvW form by Acharya et al [g = 1 - 1.332/N^(1/3)] + integer, parameter :: XC_GGA_K_GR = 508 ! gamma-TFvW form by Gázquez and Robles + integer, parameter :: XC_GGA_K_LUDENA = 509 ! gamma-TFvW form by Ludeña + integer, parameter :: XC_GGA_K_GP85 = 510 ! gamma-TFvW form by Ghosh and Parr + integer, parameter :: XC_GGA_K_PEARSON = 511 ! Pearson + integer, parameter :: XC_GGA_K_OL1 = 512 ! Ou-Yang and Levy v.1 + integer, parameter :: XC_GGA_K_OL2 = 513 ! Ou-Yang and Levy v.2 + integer, parameter :: XC_GGA_K_FR_B88 = 514 ! Fuentealba & Reyes (B88 version) + integer, parameter :: XC_GGA_K_FR_PW86 = 515 ! Fuentealba & Reyes (PW86 version) + integer, parameter :: XC_GGA_K_DK = 516 ! DePristo and Kress + integer, parameter :: XC_GGA_K_PERDEW = 517 ! Perdew + integer, parameter :: XC_GGA_K_VSK = 518 ! Vitos, Skriver, and Kollar + integer, parameter :: XC_GGA_K_VJKS = 519 ! Vitos, Johansson, Kollar, and Skriver + integer, parameter :: XC_GGA_K_ERNZERHOF = 520 ! Ernzerhof + integer, parameter :: XC_GGA_K_LC94 = 521 ! Lembarki & Chermette + integer, parameter :: XC_GGA_K_LLP = 522 ! Lee, Lee & Parr + integer, parameter :: XC_GGA_K_THAKKAR = 523 ! Thakkar 1992 + integer, parameter :: XC_GGA_X_WPBEH = 524 ! short-range version of the PBE + integer, parameter :: XC_GGA_X_HJS_PBE = 525 ! HJS screened exchange PBE version + integer, parameter :: XC_GGA_X_HJS_PBE_SOL = 526 ! HJS screened exchange PBE_SOL version + integer, parameter :: XC_GGA_X_HJS_B88 = 527 ! HJS screened exchange B88 version + integer, parameter :: XC_GGA_X_HJS_B97X = 528 ! HJS screened exchange B97x version + integer, parameter :: XC_GGA_X_ITYH = 529 ! short-range recipe for exchange GGA functionals + integer, parameter :: XC_GGA_X_SFAT = 530 ! short-range recipe for exchange GGA functionals + integer, parameter :: XC_HYB_GGA_X_N12_SX = 81 ! N12-SX functional from Minnesota + integer, parameter :: XC_HYB_GGA_XC_B3PW91 = 401 ! The original (ACM) hybrid of Becke + integer, parameter :: XC_HYB_GGA_XC_B3LYP = 402 ! The (in)famous B3LYP + integer, parameter :: XC_HYB_GGA_XC_B3P86 = 403 ! Perdew 86 hybrid similar to B3PW91 + integer, parameter :: XC_HYB_GGA_XC_O3LYP = 404 ! hybrid using the optx functional + integer, parameter :: XC_HYB_GGA_XC_mPW1K = 405 ! mixture of mPW91 and PW91 optimized for kinetics + integer, parameter :: XC_HYB_GGA_XC_PBEH = 406 ! aka PBE0 or PBE1PBE + integer, parameter :: XC_HYB_GGA_XC_B97 = 407 ! Becke 97 + integer, parameter :: XC_HYB_GGA_XC_B97_1 = 408 ! Becke 97-1 + integer, parameter :: XC_HYB_GGA_XC_B97_2 = 410 ! Becke 97-2 + integer, parameter :: XC_HYB_GGA_XC_X3LYP = 411 ! maybe the best hybrid + integer, parameter :: XC_HYB_GGA_XC_B1WC = 412 ! Becke 1-parameter mixture of WC and PBE + integer, parameter :: XC_HYB_GGA_XC_B97_K = 413 ! Boese-Martin for Kinetics + integer, parameter :: XC_HYB_GGA_XC_B97_3 = 414 ! Becke 97-3 + integer, parameter :: XC_HYB_GGA_XC_MPW3PW = 415 ! mixture with the mPW functional + integer, parameter :: XC_HYB_GGA_XC_B1LYP = 416 ! Becke 1-parameter mixture of B88 and LYP + integer, parameter :: XC_HYB_GGA_XC_B1PW91 = 417 ! Becke 1-parameter mixture of B88 and PW91 + integer, parameter :: XC_HYB_GGA_XC_mPW1PW = 418 ! Becke 1-parameter mixture of mPW91 and PW91 + integer, parameter :: XC_HYB_GGA_XC_MPW3LYP = 419 ! mixture of mPW and LYP + integer, parameter :: XC_HYB_GGA_XC_SB98_1a = 420 ! Schmider-Becke 98 parameterization 1a + integer, parameter :: XC_HYB_GGA_XC_SB98_1b = 421 ! Schmider-Becke 98 parameterization 1b + integer, parameter :: XC_HYB_GGA_XC_SB98_1c = 422 ! Schmider-Becke 98 parameterization 1c + integer, parameter :: XC_HYB_GGA_XC_SB98_2a = 423 ! Schmider-Becke 98 parameterization 2a + integer, parameter :: XC_HYB_GGA_XC_SB98_2b = 424 ! Schmider-Becke 98 parameterization 2b + integer, parameter :: XC_HYB_GGA_XC_SB98_2c = 425 ! Schmider-Becke 98 parameterization 2c + integer, parameter :: XC_HYB_GGA_X_SOGGA11_X = 426 ! Hybrid based on SOGGA11 form + integer, parameter :: XC_HYB_GGA_XC_HSE03 = 427 ! the 2003 version of the screened hybrid HSE + integer, parameter :: XC_HYB_GGA_XC_HSE06 = 428 ! the 2006 version of the screened hybrid HSE + integer, parameter :: XC_HYB_GGA_XC_HJS_PBE = 429 ! HJS hybrid screened exchange PBE version + integer, parameter :: XC_HYB_GGA_XC_HJS_PBE_SOL = 430 ! HJS hybrid screened exchange PBE_SOL version + integer, parameter :: XC_HYB_GGA_XC_HJS_B88 = 431 ! HJS hybrid screened exchange B88 version + integer, parameter :: XC_HYB_GGA_XC_HJS_B97X = 432 ! HJS hybrid screened exchange B97x version + integer, parameter :: XC_HYB_GGA_XC_CAM_B3LYP = 433 ! CAM version of B3LYP + integer, parameter :: XC_HYB_GGA_XC_TUNED_CAM_B3LYP = 434 ! CAM version of B3LYP tunes for excitations + integer, parameter :: XC_HYB_GGA_XC_BHANDH = 435 ! Becke half-and-half + integer, parameter :: XC_HYB_GGA_XC_BHANDHLYP = 436 ! Becke half-and-half with B88 exchange + integer, parameter :: XC_HYB_GGA_XC_MB3LYP_RC04 = 437 ! B3LYP with RC04 LDA + integer, parameter :: XC_HYB_GGA_XC_MPWLYP1M = 453 ! MPW with 1 par. for metals/LYP + integer, parameter :: XC_HYB_GGA_XC_REVB3LYP = 454 ! Revised B3LYP + integer, parameter :: XC_HYB_GGA_XC_CAMY_BLYP = 455 ! BLYP with yukawa screening + integer, parameter :: XC_HYB_GGA_XC_PBE0_13 = 456 ! PBE0-1/3 + integer, parameter :: XC_MGGA_XC_OTPSS_D = 64 ! oTPSS_D functional of Goerigk and Grimme + integer, parameter :: XC_MGGA_C_CS = 72 ! Colle and Salvetti + integer, parameter :: XC_MGGA_C_MN12_SX = 73 ! MN12-SX functional of Minnesota + integer, parameter :: XC_MGGA_C_MN12_L = 74 ! MN12-L functional of Minnesota + integer, parameter :: XC_MGGA_C_M11_L = 75 ! M11-L functional of Minnesota + integer, parameter :: XC_MGGA_C_M11 = 76 ! M11 functional of Minnesota + integer, parameter :: XC_MGGA_C_M08_SO = 77 ! M08-SO functional of Minnesota + integer, parameter :: XC_MGGA_C_M08_HX = 78 ! M08-HX functional of Minnesota + integer, parameter :: XC_MGGA_X_LTA = 201 ! Local tau approximation of Ernzerhof & Scuseria + integer, parameter :: XC_MGGA_X_TPSS = 202 ! Perdew, Tao, Staroverov & Scuseria exchange + integer, parameter :: XC_MGGA_X_M06_L = 203 ! M06-Local functional of Minnesota + integer, parameter :: XC_MGGA_X_GVT4 = 204 ! GVT4 from Van Voorhis and Scuseria + integer, parameter :: XC_MGGA_X_TAU_HCTH = 205 ! tau-HCTH from Boese and Handy + integer, parameter :: XC_MGGA_X_BR89 = 206 ! Becke-Roussel 89 + integer, parameter :: XC_MGGA_X_BJ06 = 207 ! Becke & Johnson correction to Becke-Roussel 89 + integer, parameter :: XC_MGGA_X_TB09 = 208 ! Tran & Blaha correction to Becke & Johnson + integer, parameter :: XC_MGGA_X_RPP09 = 209 ! Rasanen, Pittalis, and Proetto correction to Becke & Johnson + integer, parameter :: XC_MGGA_X_2D_PRHG07 = 210 ! Pittalis, Rasanen, Helbig, Gross Exchange Functional + integer, parameter :: XC_MGGA_X_2D_PRHG07_PRP10 = 211 ! PRGH07 with PRP10 correction + integer, parameter :: XC_MGGA_X_REVTPSS = 212 ! revised Perdew, Tao, Staroverov & Scuseria exchange + integer, parameter :: XC_MGGA_X_PKZB = 213 ! Perdew, Kurth, Zupan, and Blaha + integer, parameter :: XC_MGGA_X_M05 = 214 ! M05 functional of Minnesota + integer, parameter :: XC_MGGA_X_M05_2X = 215 ! M05-2X functional of Minnesota + integer, parameter :: XC_MGGA_X_M06_HF = 216 ! M06-HF functional of Minnesota + integer, parameter :: XC_MGGA_X_M06 = 217 ! M06 functional of Minnesota + integer, parameter :: XC_MGGA_X_M06_2X = 218 ! M06-2X functional of Minnesota + integer, parameter :: XC_MGGA_X_M08_HX = 219 ! M08-HX functional of Minnesota + integer, parameter :: XC_MGGA_X_M08_SO = 220 ! M08-SO functional of Minnesota + integer, parameter :: XC_MGGA_X_MS0 = 221 ! MS exchange of Sun, Xiao, and Ruzsinszky + integer, parameter :: XC_MGGA_X_MS1 = 222 ! MS1 exchange of Sun, et al + integer, parameter :: XC_MGGA_X_MS2 = 223 ! MS2 exchange of Sun, et al + integer, parameter :: XC_MGGA_X_MS2H = 224 ! MS2 hybrid exchange of Sun, et al + integer, parameter :: XC_MGGA_X_M11_L = 226 ! M11-L functional of Minnesota + integer, parameter :: XC_MGGA_X_MN12_L = 227 ! MN12-L functional from Minnesota + integer, parameter :: XC_MGGA_X_MN12_SX = 228 ! MN12-SX functional from Minnesota + integer, parameter :: XC_MGGA_C_CC06 = 229 ! Cancio and Chou 2006 + integer, parameter :: XC_MGGA_X_MK00 = 230 ! Exchange for accurate virtual orbital energies + integer, parameter :: XC_MGGA_C_TPSS = 231 ! Perdew, Tao, Staroverov & Scuseria correlation + integer, parameter :: XC_MGGA_C_VSXC = 232 ! VSxc from Van Voorhis and Scuseria (correlation part) + integer, parameter :: XC_MGGA_C_M06_L = 233 ! M06-Local functional of Minnesota + integer, parameter :: XC_MGGA_C_M06_HF = 234 ! M06-HF functional of Minnesota + integer, parameter :: XC_MGGA_C_M06 = 235 ! M06 functional of Minnesota + integer, parameter :: XC_MGGA_C_M06_2X = 236 ! M06-2X functional of Minnesota + integer, parameter :: XC_MGGA_C_M05 = 237 ! M05 functional of Minnesota + integer, parameter :: XC_MGGA_C_M05_2X = 238 ! M05-2X functional of Minnesota + integer, parameter :: XC_MGGA_C_PKZB = 239 ! Perdew, Kurth, Zupan, and Blaha + integer, parameter :: XC_MGGA_C_BC95 = 240 ! Becke correlation 95 + integer, parameter :: XC_MGGA_C_REVTPSS = 241 ! revised TPSS correlation + integer, parameter :: XC_MGGA_XC_TPSSLYP1W = 242 ! Functionals fitted for water + integer, parameter :: XC_MGGA_X_MK00B = 243 ! Exchange for accurate virtual orbital energies (v. B) + integer, parameter :: XC_MGGA_X_BLOC = 244 ! functional with balanced localization + integer, parameter :: XC_MGGA_X_MODTPSS = 245 ! Modified Perdew, Tao, Staroverov & Scuseria exchange + integer, parameter :: XC_HYB_MGGA_X_M11 = 225 ! M11 functional of Minnesota + integer, parameter :: XC_HYB_MGGA_XC_M05 = 438 ! M05 functional of Minnesota + integer, parameter :: XC_HYB_MGGA_XC_M05_2X = 439 ! M05-2X functional of Minnesota + integer, parameter :: XC_HYB_MGGA_XC_B88B95 = 440 ! Mixture of B88 with BC95 (B1B95) + integer, parameter :: XC_HYB_MGGA_XC_B86B95 = 441 ! Mixture of B86 with BC95 + integer, parameter :: XC_HYB_MGGA_XC_PW86B95 = 442 ! Mixture of PW86 with BC95 + integer, parameter :: XC_HYB_MGGA_XC_BB1K = 443 ! Mixture of B88 with BC95 from Zhao and Truhlar + integer, parameter :: XC_HYB_MGGA_XC_M06_HF = 444 ! M06-HF functional of Minnesota + integer, parameter :: XC_HYB_MGGA_XC_MPW1B95 = 445 ! Mixture of mPW91 with BC95 from Zhao and Truhlar + integer, parameter :: XC_HYB_MGGA_XC_MPWB1K = 446 ! Mixture of mPW91 with BC95 for kinetics + integer, parameter :: XC_HYB_MGGA_XC_X1B95 = 447 ! Mixture of X with BC95 + integer, parameter :: XC_HYB_MGGA_XC_XB1K = 448 ! Mixture of X with BC95 for kinetics + integer, parameter :: XC_HYB_MGGA_XC_M06 = 449 ! M06 functional of Minnesota + integer, parameter :: XC_HYB_MGGA_XC_M06_2X = 450 ! M06-2X functional of Minnesota + integer, parameter :: XC_HYB_MGGA_XC_PW6B95 = 451 ! Mixture of PW91 with BC95 from Zhao and Truhlar + integer, parameter :: XC_HYB_MGGA_XC_PWB6K = 452 ! Mixture of PW91 with BC95 from Zhao and Truhlar for kinetics + integer, parameter :: XC_HYB_MGGA_XC_TPSSH = 457 ! TPSS hybrid + integer, parameter :: XC_HYB_MGGA_XC_REVTPSSH = 458 ! revTPSS hybrid + +end module libxc_funcs_m diff --git a/libxc-2.2.0/src/libxc_master.F90 b/libxc-2.2.0/src/libxc_master.F90 new file mode 100644 index 000000000..3c36db0f8 --- /dev/null +++ b/libxc-2.2.0/src/libxc_master.F90 @@ -0,0 +1,538 @@ +!! Copyright (C) 2003-2006 M. Marques, A. Castro, A. Rubio, G. Bertsch +!! +!! This program is free software; you can redistribute it and/or modify +!! it under the terms of the GNU Lesser General Public License as published by +!! the Free Software Foundation; either version 2, or (at your option) +!! any later version. +!! +!! This program is distributed in the hope that it will be useful, +!! but WITHOUT ANY WARRANTY; without even the implied warranty of +!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +!! GNU Lesser General Public License for more details. +!! +!! You should have received a copy of the GNU Lesser General Public License +!! along with this program; if not, write to the Free Software +!! Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +!! 02110-1301, USA. +!! +!! $Id: libxc.f90 3550 2007-11-19 14:32:49Z marques $ + +#ifdef SINGLE_PRECISION +# define XC_F90(x) xc_s_f90_ ## x +#else +# define XC_F90(x) xc_f90_ ## x +#endif + + +!------------------------------------------------------------------- +module XC_F90(types_m) +#ifdef SINGLE_PRECISION + integer, public, parameter :: xc_f90_kind = selected_real_kind(4) +#else + integer, public, parameter :: xc_f90_kind = selected_real_kind(14) +#endif + + type XC_F90(pointer_t) + private + integer, pointer :: buffer + end type XC_F90(pointer_t) + +end module XC_F90(types_m) + + +!------------------------------------------------------------------- +module XC_F90(lib_m) + + use XC_F90(types_m) + use libxc_funcs_m + + implicit none + + public + + ! Families of xc functionals + integer, parameter :: & + XC_FAMILY_UNKNOWN = -1, & + XC_FAMILY_NONE = 0, & + XC_FAMILY_LDA = 1, & + XC_FAMILY_GGA = 2, & + XC_FAMILY_MGGA = 4, & + XC_FAMILY_LCA = 8, & + XC_FAMILY_OEP = 16, & + XC_FAMILY_HYB_GGA = 32, & + XC_FAMILY_HYB_MGGA = 64 + + integer, parameter :: & + XC_UNPOLARIZED = 1, & ! Spin unpolarized + XC_POLARIZED = 2 ! Spin polarized + + integer, parameter :: & + XC_NON_RELATIVISTIC = 0, & ! Functional includes or not relativistic + XC_RELATIVISTIC = 1 ! corrections. Only available in some functionals. + + ! Kinds + integer, parameter :: & + XC_EXCHANGE = 0, & + XC_CORRELATION = 1, & + XC_EXCHANGE_CORRELATION = 2, & + XC_KINETIC = 3 + + integer, parameter :: & + XC_FLAGS_HAVE_EXC = 1, & + XC_FLAGS_HAVE_VXC = 2, & + XC_FLAGS_HAVE_FXC = 4, & + XC_FLAGS_HAVE_KXC = 8, & + XC_FLAGS_HAVE_LXC = 16, & + XC_FLAGS_1D = 32, & + XC_FLAGS_2D = 64, & + XC_FLAGS_3D = 128, & + XC_FLAGS_STABLE = 512, & + XC_FLAGS_DEVELOPMENT = 1024 + + ! These are old names keep for compatibility, and that should disappear soon + integer, parameter :: XC_GGA_XC_LB = 160 + integer, parameter :: XC_GGA_K_ABSR1 = 506 + integer, parameter :: XC_GGA_K_ABSR2 = 507 + + !---------------------------------------------------------------- + interface + subroutine XC_F90(version)(major, minor) + integer, intent(out) :: major, minor + end subroutine XC_F90(version) + end interface + + !---------------------------------------------------------------- + interface + integer function XC_F90(info_number)(info) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: info + end function XC_F90(info_number) + + integer function XC_F90(info_kind)(info) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: info + end function XC_F90(info_kind) + + subroutine XC_F90(info_name)(info, s) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: info + character(len=*), intent(out) :: s + end subroutine XC_F90(info_name) + + integer function XC_F90(info_family)(info) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: info + end function XC_F90(info_family) + + integer function XC_F90(info_flags)(info) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: info + end function XC_F90(info_flags) + + subroutine XC_F90(info_refs)(info, number, str, s) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: info + integer, intent(inout) :: number ! number of the reference. Must be 0 in the first call + type(XC_F90(pointer_t)), intent(inout) :: str ! this will hold a (char **) pointer + character(len=*), intent(out) :: s ! the string that is output + end subroutine XC_F90(info_refs) + + subroutine XC_F90(functional_get_name)(func_number, func_string) + integer, intent(in) :: func_number + character(len=256), intent(out) :: func_string + end subroutine XC_F90(functional_get_name) + + integer function XC_F90(functional_get_number)(func_string) + character(len=*), intent(in) :: func_string + end function XC_F90(functional_get_number) + + integer function XC_F90(family_from_id)(id) + use XC_F90(types_m) + integer, intent(in) :: id + end function XC_F90(family_from_id) + end interface + + + !---------------------------------------------------------------- + interface + subroutine XC_F90(func_init)(p, info, functional, nspin) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(out) :: p + type(XC_F90(pointer_t)), intent(out) :: info + integer, intent(in) :: functional + integer, intent(in) :: nspin + end subroutine XC_F90(func_init) + + subroutine XC_F90(func_end)(p) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(inout) :: p + end subroutine XC_F90(func_end) + end interface + + + ! LDAs + !---------------------------------------------------------------- + interface + subroutine XC_F90(lda)(p, np, rho, zk, vrho, fxc, kxc) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho ! rho(nspin) the density + real(xc_f90_kind), intent(out) :: zk ! the energy per unit particle + real(xc_f90_kind), intent(out) :: vrho ! v(nspin) the potential + real(xc_f90_kind), intent(out) :: fxc ! v(nspin,nspin) the xc kernel + real(xc_f90_kind), intent(out) :: kxc ! v(nspin,nspin,nspin) the derivative of xc kernel + end subroutine XC_F90(lda) + + subroutine XC_F90(lda_exc)(p, np, rho, zk) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho ! rho(nspin) the density + real(xc_f90_kind), intent(out) :: zk ! the energy per unit particle + end subroutine XC_F90(lda_exc) + + subroutine XC_F90(lda_exc_vxc)(p, np, rho, e, v) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho ! rho(nspin) the density + real(xc_f90_kind), intent(out) :: e ! the energy per unit particle + real(xc_f90_kind), intent(out) :: v ! v(nspin) the potential + end subroutine XC_F90(lda_exc_vxc) + + subroutine XC_F90(lda_vxc)(p, np, rho, v) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho ! rho(nspin) the density + real(xc_f90_kind), intent(out) :: v ! v(nspin) the potential + end subroutine XC_F90(lda_vxc) + + subroutine XC_F90(lda_fxc)(p, np, rho, fxc) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho ! rho(nspin) the density + real(xc_f90_kind), intent(out) :: fxc ! v(nspin,nspin) the xc kernel + end subroutine XC_F90(lda_fxc) + + subroutine XC_F90(lda_kxc)(p, np, rho, kxc) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho ! rho(nspin) the density + real(xc_f90_kind), intent(out) :: kxc + end subroutine XC_F90(lda_kxc) + end interface + + + interface + subroutine XC_F90(lda_x_1d_set_par)(p, interaction, bb) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(inout) :: p + integer, intent(in) :: interaction + real(xc_f90_kind), intent(in) :: bb + end subroutine XC_F90(lda_x_1d_set_par) + + subroutine XC_F90(lda_c_xalpha_set_par)(p, alpha) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(inout) :: p + real(xc_f90_kind), intent(in) :: alpha + end subroutine XC_F90(lda_c_xalpha_set_par) + + subroutine XC_F90(lda_x_set_par)(p, alpha, relativistic, omega) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(inout) :: p + real(xc_f90_kind), intent(in) :: alpha ! of Xalpha, set to 4/3 to obtain standard LDA + integer, intent(in) :: relativistic + real(xc_f90_kind), intent(in) :: omega + end subroutine XC_F90(lda_x_set_par) + + subroutine XC_F90(lda_c_1d_csc_set_par)(p, interaction, bb) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(inout) :: p + integer, intent(in) :: interaction + real(xc_f90_kind), intent(in) :: bb + end subroutine XC_F90(lda_c_1d_csc_set_par) + + subroutine XC_F90(lda_c_2d_prm_set_par)(p, N) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(inout) :: p + real(xc_f90_kind), intent(in) :: N + end subroutine XC_F90(lda_c_2d_prm_set_par) + end interface + + ! GGAs + !---------------------------------------------------------------- + interface + subroutine XC_F90(gga)(p, np, rho, sigma, zk, vrho, vsigma, & + v2rho2, v2rhosigma, v2sigma2, v3rho3, v3rho2sigma, v3rhosigma2, v3sigma3) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(out) :: zk + real(xc_f90_kind), intent(out) :: vrho + real(xc_f90_kind), intent(out) :: vsigma + real(xc_f90_kind), intent(out) :: v2rho2 + real(xc_f90_kind), intent(out) :: v2rhosigma + real(xc_f90_kind), intent(out) :: v2sigma2 + real(xc_f90_kind), intent(out) :: v3rho3 + real(xc_f90_kind), intent(out) :: v3rho2sigma + real(xc_f90_kind), intent(out) :: v3rhosigma2 + real(xc_f90_kind), intent(out) :: v3sigma3 + end subroutine XC_F90(gga) + + subroutine XC_F90(gga_exc)(p, np, rho, sigma, zk) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(out) :: zk + end subroutine XC_F90(gga_exc) + + subroutine XC_F90(gga_exc_vxc)(p, np, rho, sigma, zk, vrho, vsigma) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(out) :: zk + real(xc_f90_kind), intent(out) :: vrho + real(xc_f90_kind), intent(out) :: vsigma + end subroutine XC_F90(gga_exc_vxc) + + subroutine XC_F90(gga_vxc)(p, np, rho, sigma, vrho, vsigma) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(out) :: vrho + real(xc_f90_kind), intent(out) :: vsigma + end subroutine XC_F90(gga_vxc) + + subroutine XC_F90(gga_fxc)(p, np, rho, sigma, v2rho2, v2rhosigma, v2sigma2) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(out) :: v2rho2 + real(xc_f90_kind), intent(out) :: v2rhosigma + real(xc_f90_kind), intent(out) :: v2sigma2 + end subroutine XC_F90(gga_fxc) + + subroutine XC_F90(gga_kxc)(p, np, rho, sigma, v3rho3, v3rho2sigma, v3rhosigma2, v3sigma3) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(out) :: v3rho3 + real(xc_f90_kind), intent(out) :: v3rho2sigma + real(xc_f90_kind), intent(out) :: v3rhosigma2 + real(xc_f90_kind), intent(out) :: v3sigma3 + end subroutine XC_F90(gga_kxc) + end interface + + !---------------------------------------------------------------- + interface + subroutine XC_F90(gga_lb_set_par)(p, modified, threshold, ip, qtot) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: modified ! should we use the modified version + real(xc_f90_kind), intent(in) :: threshold ! if so, the threshold to use the asymtotic version + real(xc_f90_kind), intent(in) :: ip ! ionization potential + real(xc_f90_kind), intent(in) :: qtot ! total charge + end subroutine XC_F90(gga_lb_set_par) + end interface + + + !---------------------------------------------------------------- + interface + subroutine XC_F90(gga_lb_modified)(p, np, rho, grho, r, dedd) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho ! rho(nspin) the density + real(xc_f90_kind), intent(in) :: grho ! grho(3,nspin) the gradient of the density + real(xc_f90_kind), intent(in) :: r ! distance from center of finite system + real(xc_f90_kind), intent(out) :: dedd + end subroutine XC_F90(gga_lb_modified) + end interface + + + !---------------------------------------------------------------- + interface + subroutine XC_F90(gga_x_wpbeh_set_par)(p, omega) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + real(xc_f90_kind), intent(in) :: omega ! range separation + end subroutine XC_F90(gga_x_wpbeh_set_par) + end interface + + !---------------------------------------------------------------- + interface + subroutine XC_F90(gga_x_hjs_set_par)(p, omega) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + real(xc_f90_kind), intent(in) :: omega ! range separation + end subroutine XC_F90(gga_x_hjs_set_par) + end interface + + !---------------------------------------------------------------- + interface + subroutine XC_F90(gga_ak13_get_asymptotic)(homo, asymp) + use XC_F90(types_m) + real(xc_f90_kind), intent(in) :: homo + real(xc_f90_kind), intent(out) :: asymp + end subroutine XC_F90(gga_ak13_get_asymptotic) + end interface + + !---------------------------------------------------------------- + interface + subroutine XC_F90(hyb_exx_coef)(p, coef) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + real(xc_f90_kind), intent(out) :: coef + end subroutine XC_F90(hyb_exx_coef) + + subroutine XC_F90(hyb_cam_coef)(p, omega, alpha, beta) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + real(xc_f90_kind), intent(out) :: omega, alpha, beta + end subroutine XC_F90(hyb_cam_coef) + end interface + + + !---------------------------------------------------------------- + interface + subroutine XC_F90(hyb_gga_xc_hse_set_par)(p, beta, omega) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + real(xc_f90_kind), intent(in) :: beta ! mixing + real(xc_f90_kind), intent(in) :: omega ! range separation + end subroutine XC_F90(hyb_gga_xc_hse_set_par) + + subroutine XC_F90(hyb_gga_xc_pbeh_set_par)(p, alpha) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + real(xc_f90_kind), intent(in) :: alpha ! mixing + end subroutine XC_F90(hyb_gga_xc_pbeh_set_par) + end interface + + + ! the meta-GGAs + !---------------------------------------------------------------- + interface + subroutine XC_F90(mgga)(p, np, rho, sigma, lapl, tau, zk, vrho, vsigma, vlapl, vtau, & + v2rho2, v2sigma2, v2lapl2, v2tau2, v2rhosigma, v2rholapl, v2rhotau, & + v2sigmalapl, v2sigmatau, v2lapltau) + + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(in) :: lapl + real(xc_f90_kind), intent(in) :: tau + real(xc_f90_kind), intent(out) :: zk + real(xc_f90_kind), intent(out) :: vrho + real(xc_f90_kind), intent(out) :: vsigma + real(xc_f90_kind), intent(out) :: vlapl + real(xc_f90_kind), intent(out) :: vtau + real(xc_f90_kind), intent(out) :: v2rho2 + real(xc_f90_kind), intent(out) :: v2sigma2 + real(xc_f90_kind), intent(out) :: v2lapl2 + real(xc_f90_kind), intent(out) :: v2tau2 + real(xc_f90_kind), intent(out) :: v2rhosigma + real(xc_f90_kind), intent(out) :: v2rholapl + real(xc_f90_kind), intent(out) :: v2rhotau + real(xc_f90_kind), intent(out) :: v2sigmalapl + real(xc_f90_kind), intent(out) :: v2sigmatau + real(xc_f90_kind), intent(out) :: v2lapltau + end subroutine XC_F90(mgga) + + subroutine XC_F90(mgga_exc)(p, np, rho, sigma, lapl, tau, zk) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(in) :: lapl + real(xc_f90_kind), intent(in) :: tau + real(xc_f90_kind), intent(out) :: zk + end subroutine XC_F90(mgga_exc) + + subroutine XC_F90(mgga_exc_vxc)(p, np, rho, sigma, lapl, tau, zk, vrho, vsigma, vlapl, vtau) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(in) :: lapl + real(xc_f90_kind), intent(in) :: tau + real(xc_f90_kind), intent(out) :: zk + real(xc_f90_kind), intent(out) :: vrho + real(xc_f90_kind), intent(out) :: vsigma + real(xc_f90_kind), intent(out) :: vlapl + real(xc_f90_kind), intent(out) :: vtau + end subroutine XC_F90(mgga_exc_vxc) + + subroutine XC_F90(mgga_vxc)(p, np, rho, sigma, lapl, tau, vrho, vsigma, vlapl, vtau) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(in) :: lapl + real(xc_f90_kind), intent(in) :: tau + real(xc_f90_kind), intent(out) :: vrho + real(xc_f90_kind), intent(out) :: vsigma + real(xc_f90_kind), intent(out) :: vlapl + real(xc_f90_kind), intent(out) :: vtau + end subroutine XC_F90(mgga_vxc) + + subroutine XC_F90(mgga_fxc)(p, np, rho, sigma, lapl, tau, & + v2rho2, v2sigma2, v2lapl2, v2tau2, v2rhosigma, v2rholapl, v2rhotau, & + v2sigmalapl, v2sigmatau, v2lapltau) + + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(in) :: lapl + real(xc_f90_kind), intent(in) :: tau + real(xc_f90_kind), intent(out) :: v2rho2 + real(xc_f90_kind), intent(out) :: v2sigma2 + real(xc_f90_kind), intent(out) :: v2lapl2 + real(xc_f90_kind), intent(out) :: v2tau2 + real(xc_f90_kind), intent(out) :: v2rhosigma + real(xc_f90_kind), intent(out) :: v2rholapl + real(xc_f90_kind), intent(out) :: v2rhotau + real(xc_f90_kind), intent(out) :: v2sigmalapl + real(xc_f90_kind), intent(out) :: v2sigmatau + real(xc_f90_kind), intent(out) :: v2lapltau + end subroutine XC_F90(mgga_fxc) + end interface + + interface + subroutine XC_F90(mgga_x_tb09_set_par)(p, cc) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(inout) :: p + real(xc_f90_kind), intent(in) :: cc + end subroutine XC_F90(mgga_x_tb09_set_par) + end interface + + +end module XC_F90(lib_m) + +!! Local Variables: +!! mode: f90 +!! coding: utf-8 +!! End: diff --git a/libxc-2.2.0/src/mgga.c b/libxc-2.2.0/src/mgga.c new file mode 100644 index 000000000..5c385feb7 --- /dev/null +++ b/libxc-2.2.0/src/mgga.c @@ -0,0 +1,212 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include + +#include "util.h" +#include "funcs_mgga.c" +#include "funcs_hyb_mgga.c" + +/* initialization */ +int XC(mgga_init)(XC(func_type) *func, const XC(func_info_type) *info, int nspin) +{ + assert(func != NULL); + + /* initialize structure */ + func->info = info; + func->nspin = nspin; + func->params = NULL; + func->func = 0; + + func->n_func_aux = 0; + func->func_aux = NULL; + func->mix_coef = NULL; + + /* initialize spin counters */ + func->n_zk = 1; + func->n_rho = func->n_vrho = func->nspin; + func->n_tau = func->n_vtau = func->nspin; + func->n_lapl = func->n_vlapl = func->nspin; + if(func->nspin == XC_UNPOLARIZED){ + func->n_sigma = func->n_vsigma = 1; + func->n_v2rho2 = func->n_v2tau2 = func->n_v2lapl2 = 1; + func->n_v2rhotau = func->n_v2rholapl = func->n_v2lapltau = 1; + func->n_v2sigma2 = 1; + func->n_v2rhosigma = func->n_v2sigmatau = func->n_v2sigmalapl = 1; + }else{ + func->n_sigma = func->n_vsigma = 3; + func->n_v2rho2 = func->n_v2tau2 = func->n_v2lapl2 = 3; + func->n_v2rhotau = func->n_v2rholapl = func->n_v2lapltau = 4; + func->n_v2sigma2 = 6; + func->n_v2rhosigma = func->n_v2sigmatau = func->n_v2sigmalapl = 6; + } + + /* see if we need to initialize the functional */ + if(func->info->init != NULL) + func->info->init(func); + return 0; +} + + +void XC(mgga_end)(XC(func_type) *func) +{ + assert(func != NULL); + + /* call internal termination routine */ + if(func->info->end != NULL) + func->info->end(func); + + /* terminate any auxiliary functional */ + if(func->n_func_aux > 0){ + int ii; + + for(ii=0; iin_func_aux; ii++){ + XC(func_end)(func->func_aux[ii]); + free(func->func_aux[ii]); + } + free(func->func_aux); + } + + if(func->mix_coef != NULL){ + free(func->mix_coef); + func->mix_coef = NULL; + } + + /* deallocate any used parameter */ + if(func->params != NULL){ + free(func->params); + func->params = NULL; + } +} + + +void +XC(mgga)(const XC(func_type) *func, int np, + const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl, const FLOAT *tau, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, FLOAT *vlapl, FLOAT *vtau, + FLOAT *v2rho2, FLOAT *v2sigma2, FLOAT *v2lapl2, FLOAT *v2tau2, + FLOAT *v2rhosigma, FLOAT *v2rholapl, FLOAT *v2rhotau, + FLOAT *v2sigmalapl, FLOAT *v2sigmatau, FLOAT *v2lapltau) +{ + assert(func != NULL); + + /* sanity check */ + if(zk != NULL && !(func->info->flags & XC_FLAGS_HAVE_EXC)){ + fprintf(stderr, "Functional '%s' does not provide an implementation of Exc", + func->info->name); + exit(1); + } + + if(vrho != NULL && !(func->info->flags & XC_FLAGS_HAVE_VXC)){ + fprintf(stderr, "Functional '%s' does not provide an implementation of vxc", + func->info->name); + exit(1); + } + + if(v2rho2 != NULL && !(func->info->flags & XC_FLAGS_HAVE_FXC)){ + fprintf(stderr, "Functional '%s' does not provide an implementation of fxc", + func->info->name); + exit(1); + } + + /* initialize output to zero */ + if(zk != NULL) + memset(zk, 0, func->n_zk*np*sizeof(FLOAT)); + + if(vrho != NULL){ + assert(vsigma != NULL); + + memset(vrho, 0, func->n_vrho *np*sizeof(FLOAT)); + memset(vsigma, 0, func->n_vsigma*np*sizeof(FLOAT)); + memset(vtau, 0, func->n_vtau *np*sizeof(FLOAT)); + memset(vlapl, 0, func->n_vlapl *np*sizeof(FLOAT)); + } + + if(v2rho2 != NULL){ + /* warning : lapl terms missing here */ + assert(v2sigma2 != NULL && v2tau2 != NULL && v2lapl2 != NULL && + v2rhosigma != NULL && v2rhotau != NULL && v2rholapl != NULL && + v2sigmatau != NULL && v2sigmalapl != NULL && v2lapltau != NULL); + + memset(v2rho2, 0, func->n_v2rho2 *np*sizeof(FLOAT)); + memset(v2sigma2, 0, func->n_v2sigma2 *np*sizeof(FLOAT)); + memset(v2tau2, 0, func->n_v2tau2 *np*sizeof(FLOAT)); + memset(v2lapl2, 0, func->n_v2lapl2 *np*sizeof(FLOAT)); + memset(v2rhosigma, 0, func->n_v2rhosigma *np*sizeof(FLOAT)); + memset(v2rhotau, 0, func->n_v2rhotau *np*sizeof(FLOAT)); + memset(v2rholapl, 0, func->n_v2rholapl *np*sizeof(FLOAT)); + memset(v2sigmatau, 0, func->n_v2sigmatau *np*sizeof(FLOAT)); + memset(v2sigmalapl, 0, func->n_v2sigmalapl*np*sizeof(FLOAT)); + memset(v2lapltau, 0, func->n_v2lapltau *np*sizeof(FLOAT)); + } + + /* call functional */ + if(func->info->mgga != NULL) + func->info->mgga(func, np, rho, sigma, lapl, tau, zk, vrho, vsigma, vlapl, vtau, + v2rho2, v2sigma2, v2lapl2, v2tau2, v2rhosigma, v2rholapl, v2rhotau, + v2sigmalapl, v2sigmatau, v2lapltau); + + if(func->mix_coef != NULL) + XC(mix_func)(func, np, rho, sigma, lapl, tau, zk, vrho, vsigma, vlapl, vtau, + v2rho2, v2sigma2, v2lapl2, v2tau2, v2rhosigma, v2rholapl, v2rhotau, + v2sigmalapl, v2sigmatau, v2lapltau); + +} + +/* specializations */ +inline void +XC(mgga_exc)(const XC(func_type) *p, int np, + const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl, const FLOAT *tau, + FLOAT *zk) +{ + XC(mgga)(p, np, rho, sigma, lapl, tau, zk, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +} + +inline void +XC(mgga_exc_vxc)(const XC(func_type) *p, int np, + const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl, const FLOAT *tau, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, FLOAT *vlapl, FLOAT *vtau) +{ + XC(mgga)(p, np, rho, sigma, lapl, tau, zk, vrho, vsigma, vlapl, vtau, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +} + +inline void +XC(mgga_vxc)(const XC(func_type) *p, int np, + const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl, const FLOAT *tau, + FLOAT *vrho, FLOAT *vsigma, FLOAT *vlapl, FLOAT *vtau) +{ + XC(mgga)(p, np, rho, sigma, lapl, tau, NULL, vrho, vsigma, vlapl, vtau, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +} + +inline void +XC(mgga_fxc)(const XC(func_type) *p, int np, + const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl, const FLOAT *tau, + FLOAT *v2rho2, FLOAT *v2sigma2, FLOAT *v2lapl2, FLOAT *v2tau2, + FLOAT *v2rhosigma, FLOAT *v2rholapl, FLOAT *v2rhotau, + FLOAT *v2sigmalapl, FLOAT *v2sigmatau, FLOAT *v2lapltau) +{ + XC(mgga)(p, np, rho, sigma, lapl, tau, NULL, NULL, NULL, NULL, NULL, + v2rho2, v2sigma2, v2lapl2, v2tau2, v2rhosigma, v2rholapl, v2rhotau, + v2sigmalapl, v2sigmatau, v2lapltau); +} diff --git a/libxc-2.2.0/src/mgga_c_bc95.c b/libxc-2.2.0/src/mgga_c_bc95.c new file mode 100644 index 000000000..86f97a720 --- /dev/null +++ b/libxc-2.2.0/src/mgga_c_bc95.c @@ -0,0 +1,142 @@ +/* + Copyright (C) 2008 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_C_BC95 240 /* Becke correlation 95 */ + +typedef struct{ + FLOAT css, copp; +} mgga_c_bc95_params; + + +static void +mgga_c_bc95_init(XC(func_type) *p) +{ + assert(p!=NULL && p->params == NULL); + p->params = malloc(sizeof(mgga_c_bc95_params)); + + XC(mgga_c_bc95_set_params)(p, 0.038, 0.0031); + + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_LDA_C_PW_MOD, XC_POLARIZED); +} + + +void +XC(mgga_c_bc95_set_params)(XC(func_type) *p, FLOAT css, FLOAT copp) +{ + mgga_c_bc95_params *params; + + assert(p != NULL && p->params != NULL); + params = (mgga_c_bc95_params *) (p->params); + + params->css = css; + params->copp = copp; +} + + +static void +func(const XC(func_type) *p, XC(mgga_work_c_t) *r) +{ + static const FLOAT sign[2] = {1.0, -1.0}; + mgga_c_bc95_params *params; + + XC(lda_work_t) LDA[3]; + FLOAT opz, dd, g, g2, dgdxs, ddddxs, ddddts; + int is; + + assert(p != NULL && p->params != NULL); + params = (mgga_c_bc95_params *) (p->params); + + /* first we get the parallel and perpendicular LDAS */ + XC(lda_stoll) (p->func_aux[0], r->dens, r->zeta, r->order, LDA); + + /* initialize to zero */ + r->f = 0.0; + if(r->order >= 1){ + r->dfdrs = r->dfdz = r->dfdxs[0] = r->dfdxs[1] = r->dfdxt = 0.0; + r->dfdus[0] = r->dfdus[1] = r->dfdts[0] = r->dfdts[1] = 0.0; + } + if(r->order >= 2){ + r->d2fdrs2 = r->d2fdrsz = r->d2fdrsxt = r->d2fdrsxs[0] = r->d2fdrsxs[1] = 0.0; + r->d2fdz2 = r->d2fdzxt = r->d2fdzxs[0] = r->d2fdzxs[1] = r->d2fdxt2 = 0.0; + r->d2fdxtxs[0] = r->d2fdxtxs[1] = r->d2fdxs2[0] = r->d2fdxs2[1] = r->d2fdxs2[2] = 0.0; + } + + /* now we calculate the g functions for exchange and parallel correlation */ + for(is = 0; is < 2; is++){ + opz = 1.0 + sign[is]*r->zeta; + + if(r->dens*opz < 2.0*p->info->min_dens) continue; + + g = 1.0 + params->css*r->xs[is]*r->xs[is]; + g2 = g*g; + + dd = (r->ts[is] - r->xs[is]*r->xs[is]/8.0)/K_FACTOR_C; + + r->f += LDA[is].zk*dd/g2; + + if(r->order < 1) continue; + + dgdxs = 2.0*params->css*r->xs[is]; + ddddxs = -r->xs[is]/(4.0*K_FACTOR_C); + ddddts = 1.0/K_FACTOR_C; + + r->dfdrs += LDA[is].dedrs*dd/g2; + r->dfdz += LDA[is].dedz *dd/g2; + r->dfdxs[is] += LDA[is].zk*(ddddxs*g - 2.0*dd*dgdxs)/(g*g2); + r->dfdts[is] += LDA[is].zk*ddddts/g2; + } + + /* and now we add the opposite-spin contribution */ + g = 1.0 + params->copp*(r->xs[0]*r->xs[0] + r->xs[1]*r->xs[1]); + g2 = g*g; + + r->f += LDA[2].zk/g; + + if(r->order < 1) return; + + r->dfdrs += LDA[2].dedrs/g; + r->dfdz += LDA[2].dedz/g; + r->dfdxs[0] += -LDA[2].zk*2.0*params->copp*r->xs[0]/g2; + r->dfdxs[1] += -LDA[2].zk*2.0*params->copp*r->xs[1]/g2; +} + +#include "work_mgga_c.c" + +XC(func_info_type) XC(func_info_mgga_c_bc95) = { + XC_MGGA_C_BC95, + XC_CORRELATION, + "Becke correlation 95", + XC_FAMILY_MGGA, + "AD Becke, J. Chem. Phys. 104, 1040 (1996)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_c_bc95_init, + NULL, NULL, NULL, + work_mgga_c, +}; + diff --git a/libxc-2.2.0/src/mgga_c_cc06.c b/libxc-2.2.0/src/mgga_c_cc06.c new file mode 100644 index 000000000..896fa035e --- /dev/null +++ b/libxc-2.2.0/src/mgga_c_cc06.c @@ -0,0 +1,111 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_C_CC06 229 /* Cancio and Chou 2006 */ + + +static void +mgga_c_cc06_init(XC(func_type) *p) +{ + assert(p != NULL); + + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_LDA_C_PW, p->nspin); +} + + +static void +func(const XC(func_type) *pt, XC(mgga_work_c_t) *r) +{ + static FLOAT alpha = -0.0007, beta = 0.0080, gamma = 0.026; + XC(lda_work_t) pw; + FLOAT l_cnst, opz, omz, opz13, omz13, opz23, omz23, l, fxc_n, fxc_d, fxc; + FLOAT dldz, dldus[2], dfxc; + + pw.order = r->order; + pw.rs[0] = SQRT(r->rs); + pw.rs[1] = r->rs; + pw.rs[2] = r->rs*r->rs; + pw.zeta = r->zeta; + + XC(lda_c_pw_func)(pt->func_aux[0], &pw); + + l_cnst = CBRT(3.0/(2.0*4.0*M_PI)); + l_cnst = l_cnst*l_cnst/2.0; + + opz = 1.0 + r->zeta; + omz = 1.0 - r->zeta; + + opz13 = CBRT(opz); opz23 = opz13*opz13; + omz13 = CBRT(omz); omz23 = omz13*omz13; + + l = l_cnst*(r->us[0]*opz*opz23 + r->us[1]*omz*omz23); + + fxc_n = alpha + beta*l; + fxc_d = 1.0 + gamma*l; + fxc = 1.0 + fxc_n/fxc_d; + + r->f = pw.zk*fxc; + + if(r->order < 1) return; + + dldz = l_cnst*(5.0/3.0)*(r->us[0]*opz23 - r->us[1]*omz23); + dldus[0] = l_cnst*opz*opz23; + dldus[1] = l_cnst*omz*omz23; + + dfxc = -(alpha*gamma - beta)/(fxc_d*fxc_d); + + r->dfdrs = pw.dedrs*fxc; + r->dfdz = pw.dedz *fxc + pw.zk*dfxc*dldz; + r->dfdxt = 0.0; + r->dfdxs[0] = 0.0; + r->dfdxs[1] = 0.0; + r->dfdts[0] = 0.0; + r->dfdts[1] = 0.0; + r->dfdus[0] = pw.zk*dfxc*dldus[0]; + r->dfdus[1] = pw.zk*dfxc*dldus[1]; + + if(r->order < 2) return; +} + + +#include "work_mgga_c.c" + + +XC(func_info_type) XC(func_info_mgga_c_cc06) = { + XC_MGGA_C_CC06, + XC_CORRELATION, + "Cancio and Chou 2006", + XC_FAMILY_MGGA, + "AC Cancio, and MY Chou, Phys. Rev. B 74, 081202(R) (2006)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_c_cc06_init, + NULL, NULL, NULL, + work_mgga_c, +}; + diff --git a/libxc-2.2.0/src/mgga_c_cs.c b/libxc-2.2.0/src/mgga_c_cs.c new file mode 100644 index 000000000..b0709353f --- /dev/null +++ b/libxc-2.2.0/src/mgga_c_cs.c @@ -0,0 +1,104 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_C_CS 72 /* Colle and Salvetti */ + +static void +func(const XC(func_type) *pt, XC(mgga_work_c_t) *r) +{ + static FLOAT a = -0.04918, b = 0.132, c = 0.2533, d = 0.349; + FLOAT cnst_rs, cnst_283, opz, omz, opz13, omz13, opz23, omz23; + FLOAT ta, tb, tw, aux, ff, num, den; + FLOAT dtwdz, dtwdxt, dtwdus0, dtwdus1, dauxdrs; + FLOAT dnumdrs, dnumdz, dnumdxt, dnumdts0, dnumdts1, dnumdus0, dnumdus1, ddendrs; + + cnst_rs = CBRT(4*M_PI/3.0); + cnst_283 = 1.0/(4.0*M_CBRT2*M_CBRT2); + + opz = 1.0 + r->zeta; + omz = 1.0 - r->zeta; + + opz13 = CBRT(opz); opz23 = opz13*opz13; + omz13 = CBRT(omz); omz23 = omz13*omz13; + + ta = r->ts[0] - r->us[0]/8.0; + tb = r->ts[1] - r->us[1]/8.0; + tw = r->xt*r->xt/8.0 - cnst_283*(r->us[0]*opz*opz23 + r->us[1]*omz*omz23); + + aux = EXP(-c*cnst_rs*r->rs); + ff = opz*ta + omz*tb - tw; + num = 1.0 + 2.0*b*ff*aux; + den = 1.0 + d*cnst_rs*r->rs; + + r->f = a*num/den; + + if(r->order < 1) return; + + dtwdz = -cnst_283*(5.0/3.0)*(r->us[0]*opz23 - r->us[1]*omz23); + dtwdxt = r->xt/4.0; + dtwdus0 = -cnst_283*opz*opz23; + dtwdus1 = -cnst_283*omz*omz23; + + dauxdrs = -c*cnst_rs*aux; + + dnumdrs = 2.0*b*ff*dauxdrs; + dnumdz = 2.0*b*(ta - tb - dtwdz)*aux; + dnumdxt = -2.0*b*dtwdxt*aux; + dnumdts0 = 2.0*b*opz*aux; + dnumdts1 = 2.0*b*omz*aux; + dnumdus0 = 2.0*b*(-opz/8.0 - dtwdus0)*aux; + dnumdus1 = 2.0*b*(-omz/8.0 - dtwdus1)*aux; + + ddendrs = d*cnst_rs; + + r->dfdrs = a*(dnumdrs*den - num*ddendrs)/(den*den); + r->dfdz = a*dnumdz/den; + r->dfdxt = a*dnumdxt/den; + r->dfdxs[0] = 0.0; + r->dfdxs[1] = 0.0; + r->dfdts[0] = a*dnumdts0/den; + r->dfdts[1] = a*dnumdts1/den; + r->dfdus[0] = a*dnumdus0/den; + r->dfdus[1] = a*dnumdus1/den; + + if(r->order < 2) return; +} + + +#include "work_mgga_c.c" + + +XC(func_info_type) XC(func_info_mgga_c_cs) = { + XC_MGGA_C_CS, + XC_CORRELATION, + "Colle and Salvetti", + XC_FAMILY_MGGA, + "Colle and Salvetti, Theor. Chim. Acta 37, 329 (1975)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + NULL, + NULL, NULL, NULL, + work_mgga_c, +}; + diff --git a/libxc-2.2.0/src/mgga_c_m08.c b/libxc-2.2.0/src/mgga_c_m08.c new file mode 100644 index 000000000..8fc1cde7d --- /dev/null +++ b/libxc-2.2.0/src/mgga_c_m08.c @@ -0,0 +1,287 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_C_M08_HX 78 /* M08-HX functional of Minnesota */ +#define XC_MGGA_C_M08_SO 77 /* M08-SO functional of Minnesota */ +#define XC_MGGA_C_M11 76 /* M11 functional of Minnesota */ +#define XC_MGGA_C_M11_L 75 /* M11-L functional of Minnesota */ +#define XC_MGGA_C_MN12_L 74 /* MN12-L functional of Minnesota */ +#define XC_MGGA_C_MN12_SX 73 /* MN12-SX functional of Minnesota */ + + +static const FLOAT a_m08_hx[12] = { + 1.0000000e+00, -4.0661387e-01, -3.3232530e+00, 1.5540980e+00, 4.4248033e+01, -8.4351930e+01, + -1.1955581e+02, 3.9147081e+02, 1.8363851e+02, -6.3268223e+02, -1.1297403e+02, 3.3629312e+02 +}; +static const FLOAT b_m08_hx[12] = { + 1.3812334e+00, -2.4683806e+00, -1.1901501e+01, -5.4112667e+01, 1.0055846e+01, 1.4800687e+02, + 1.1561420e+02, 2.5591815e+02, 2.1320772e+02, -4.8412067e+02, -4.3430813e+02, 5.6627964e+01 +}; + +static const FLOAT a_m08_so[12] = { + 1.0000000e+00, 0.0000000e+00, -3.9980886e+00, 1.2982340e+01, 1.0117507e+02, -8.9541984e+01, + -3.5640242e+02, 2.0698803e+02, 4.6037780e+02, -2.4510559e+02, -1.9638425e+02, 1.1881459e+02 +}; +static const FLOAT b_m08_so[12] = { + 1.0000000e+00, -4.4117403e+00, -6.4128622e+00, 4.7583635e+01, 1.8630053e+02, -1.2800784e+02, + -5.5385258e+02, 1.3873727e+02, 4.1646537e+02, -2.6626577e+02, 5.6676300e+01, 3.1673746e+02 +}; + +static const FLOAT a_m11[12] = { + 1.0000000e+00, 0.0000000e+00, -3.8933250e+00, -2.1688455e+00, 9.3497200e+00, -1.9845140e+01, + 2.3455253e+00, 7.9246513e+01, 9.6042757e+00, -6.7856719e+01, -9.1841067e+00, 0.0000000e+00 +}; +static const FLOAT b_m11[12] = { + 7.2239798e-01, 4.3730564e-01, -1.6088809e+01, -6.5542437e+01, 3.2057230e+01, 1.8617888e+02, + 2.0483468e+01, -7.0853739e+01, 4.4483915e+01, -9.4484747e+01, -1.1459868e+02, 0.0000000e+00 +}; + +static const FLOAT a_m11_l[12] = { + 1.000000e+00, 0.000000e+00, 2.750880e+00, -1.562287e+01, 9.363381e+00, 2.141024e+01, + -1.424975e+01, -1.134712e+01, 1.022365e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00 +}; +static const FLOAT b_m11_l[12] = { + 1.000000e+00, -9.082060e+00, 6.134682e+00, -1.333216e+01, -1.464115e+01, 1.713143e+01, + 2.480738e+00, -1.007036e+01, -1.117521e-01, 0.000000e+00, 0.000000e+00, 0.000000e+00 +}; + +static const FLOAT a_mn12_l[12] = { + 8.844610e-01, -2.202279e-01, 5.701372e+00, -2.562378e+00, -9.646827e-01, 1.982183e-01, + 1.019976e+01, 9.789352e-01, -1.512722e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 +}; +static const FLOAT b_mn12_l[12] = { + 5.323948e-01, -5.831909e+00, 3.882386e+00, 5.878488e+00, 1.493228e+01, -1.374636e+01, + -8.492327e+00, -2.486548e+00, -1.822346e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00 +}; + +static const FLOAT a_mn12_sx[12] = { + 7.171161e-01, -2.380914e+00, 5.793565e+00, -1.243624e+00, 1.364920e+01, -2.110812e+01, + -1.598767e+01, 1.429208e+01, 6.149191e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 +}; +static const FLOAT b_mn12_sx[12] = { + 4.663699e-01, -9.110685e+00, 8.705051e+00, -1.813949e+00, -4.147211e-01, -1.021527e+01, + 8.240270e-01, 4.993815e+00, -2.563930e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00 +}; + + +typedef struct{ + const FLOAT *a, *b; +} mgga_c_m08_params; + + +static void +mgga_c_m08_init(XC(func_type) *p) +{ + mgga_c_m08_params *params; + + assert(p != NULL); + + p->n_func_aux = 2; + p->func_aux = (XC(func_type) **) malloc(2*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + p->func_aux[1] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_LDA_C_PW_MOD, p->nspin); + XC(func_init)(p->func_aux[1], XC_GGA_C_PBE, p->nspin); + + assert(p->params == NULL); + p->params = malloc(sizeof(mgga_c_m08_params)); + params = (mgga_c_m08_params *) (p->params); + + switch(p->info->number){ + case XC_MGGA_C_M08_HX: + params->a = a_m08_hx; + params->b = b_m08_hx; + break; + case XC_MGGA_C_M08_SO: + params->a = a_m08_so; + params->b = b_m08_so; + break; + case XC_MGGA_C_M11: + params->a = a_m11; + params->b = b_m11; + break; + case XC_MGGA_C_M11_L: + params->a = a_m11_l; + params->b = b_m11_l; + break; + case XC_MGGA_C_MN12_L: + params->a = a_mn12_l; + params->b = b_mn12_l; + break; + case XC_MGGA_C_MN12_SX: + params->a = a_mn12_sx; + params->b = b_mn12_sx; + break; + default: + fprintf(stderr, "Internal error in mgga_c_m08\n"); + exit(1); + } +} + + +static void +func(const XC(func_type) *pt, XC(mgga_work_c_t) *r) +{ + mgga_c_m08_params *params; + + XC(gga_work_c_t) pbe; + XC(lda_work_t) pw; + FLOAT t, dtdz, dtdts[2], opz, omz, opz13, omz13, opz23, omz23; + FLOAT fw1, fw2, dfw1dt, dfw2dt; + + assert(pt != NULL && pt->params != NULL); + params = (mgga_c_m08_params *) (pt->params); + + pw.order = r->order; + pw.rs[0] = SQRT(r->rs); + pw.rs[1] = r->rs; + pw.rs[2] = r->rs*r->rs; + pw.zeta = r->zeta; + XC(lda_c_pw_func)(pt->func_aux[0], &pw); + + pbe.order = r->order; + pbe.rs = r->rs; + pbe.zeta = r->zeta; + pbe.xt = r->xt; + pbe.xs[0] = r->xs[0]; + pbe.xs[1] = r->xs[1]; + XC(gga_c_pbe_func)(pt->func_aux[1], &pbe); + + opz = 1.0 + r->zeta; + omz = 1.0 - r->zeta; + + opz13 = CBRT(opz); opz23 = opz13*opz13; + omz13 = CBRT(omz); omz23 = omz13*omz13; + + /* the 0.5 was chosen to get the right K_FACTOR_C in mgga_series_w */ + t = 0.5*(r->ts[0]*opz*opz23 + r->ts[1]*omz*omz23); + + XC(mgga_series_w)(r->order, 12, params->a, t, &fw1, &dfw1dt); + XC(mgga_series_w)(r->order, 12, params->b, t, &fw2, &dfw2dt); + + r->f = fw1*pw.zk + fw2*pbe.f; + + if(r->order < 1) return; + + dtdz = (5.0/6.0)*(r->ts[0]*opz23 - r->ts[1]*omz23); + dtdts[0] = 0.5*opz*opz23; + dtdts[1] = 0.5*omz*omz23; + + r->dfdrs = fw1*pw.dedrs + fw2*pbe.dfdrs; + r->dfdz = fw1*pw.dedz + fw2*pbe.dfdz + (dfw1dt*pw.zk + dfw2dt*pbe.f)*dtdz; + r->dfdxt = fw2*pbe.dfdxt; + r->dfdxs[0] = fw2*pbe.dfdxs[0]; + r->dfdxs[1] = fw2*pbe.dfdxs[1]; + r->dfdus[0] = 0.0; + r->dfdus[1] = 0.0; + r->dfdts[0] = (dfw1dt*pw.zk + dfw2dt*pbe.f)*dtdts[0]; + r->dfdts[1] = (dfw1dt*pw.zk + dfw2dt*pbe.f)*dtdts[1]; + + if(r->order < 2) return; + +} + + +#include "work_mgga_c.c" + + +XC(func_info_type) XC(func_info_mgga_c_m08_hx) = { + XC_MGGA_C_M08_HX, + XC_EXCHANGE, + "M08-HX functional of Minnesota", + XC_FAMILY_MGGA, + "Y Zhao and DG Truhlar, J. Chem. Theory Comput. 4, 1849-1868 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_c_m08_init, + NULL, NULL, NULL, + work_mgga_c, +}; + +XC(func_info_type) XC(func_info_mgga_c_m08_so) = { + XC_MGGA_C_M08_SO, + XC_EXCHANGE, + "M08-SO functional of Minnesota", + XC_FAMILY_MGGA, + "Y Zhao and DG Truhlar, J. Chem. Theory Comput. 4, 1849-1868 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_c_m08_init, + NULL, NULL, NULL, + work_mgga_c, +}; + +XC(func_info_type) XC(func_info_mgga_c_m11) = { + XC_MGGA_C_M11, + XC_EXCHANGE, + "M11 functional of Minnesota", + XC_FAMILY_MGGA, + "R Peverati, and DG Truhlar, J. Phys. Chem. Lett. 2, 2810 (2011)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_c_m08_init, + NULL, NULL, NULL, + work_mgga_c, +}; + +XC(func_info_type) XC(func_info_mgga_c_m11_l) = { + XC_MGGA_C_M11_L, + XC_EXCHANGE, + "M11-L functional of Minnesota", + XC_FAMILY_MGGA, + "R Peverati, and DG Truhlar, J. Phys. Chem. Lett. 3, 117 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_c_m08_init, + NULL, NULL, NULL, + work_mgga_c, +}; + +XC(func_info_type) XC(func_info_mgga_c_mn12_l) = { + XC_MGGA_C_MN12_L, + XC_CORRELATION, + "MN12-L functional of Minnesota", + XC_FAMILY_MGGA, + "R Peverati and DG Truhlar, Phys. Chem. Chem. Phys. 14, 13171-13174 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_c_m08_init, + NULL, NULL, NULL, + work_mgga_c, +}; + +XC(func_info_type) XC(func_info_mgga_c_mn12_sx) = { + XC_MGGA_C_MN12_SX, + XC_CORRELATION, + "MN12-SX functional of Minnesota", + XC_FAMILY_MGGA, + "R Peverati and DG Truhlar, Phys. Chem. Chem. Phys. 14, accepted (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_c_m08_init, + NULL, NULL, NULL, + work_mgga_c, +}; + diff --git a/libxc-2.2.0/src/mgga_c_pkzb.c b/libxc-2.2.0/src/mgga_c_pkzb.c new file mode 100644 index 000000000..f763fa0bc --- /dev/null +++ b/libxc-2.2.0/src/mgga_c_pkzb.c @@ -0,0 +1,332 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_C_TPSS 231 /* Perdew, Tao, Staroverov & Scuseria correlation */ +#define XC_MGGA_C_PKZB 239 /* Perdew, Kurth, Zupan, and Blaha */ +#define XC_MGGA_C_REVTPSS 241 /* revised TPSS correlation */ + +typedef struct{ + FLOAT C0_c[4]; + FLOAT d, beta; +} mgga_c_pkzb_params; + + +static void +mgga_c_pkzb_init(XC(func_type) *p) +{ + + assert(p != NULL && p->params == NULL); + + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_GGA_C_PBE, XC_POLARIZED); + + p->params = malloc(sizeof(mgga_c_pkzb_params)); + + switch(p->info->number){ + case XC_MGGA_C_PKZB: + case XC_MGGA_C_TPSS: + XC(mgga_c_pkzb_set_params)(p, 0.06672455060314922, 2.8, 0.53, 0.87, 0.50, 2.26); + break; + case XC_MGGA_C_REVTPSS: + XC(mgga_c_pkzb_set_params)(p, 0.06672455060314922, 2.8, 0.59, 0.9269, 0.6225, 2.1540); + break; + default: + fprintf(stderr, "Internal error in mgga_c_tpss\n"); + exit(1); + } +} + +void +XC(mgga_c_pkzb_set_params)(XC(func_type) *p, FLOAT beta, FLOAT d, FLOAT C0_0, FLOAT C0_1, FLOAT C0_2, FLOAT C0_3) +{ + mgga_c_pkzb_params *params; + + assert(p != NULL && p->params != NULL); + params = (mgga_c_pkzb_params *) (p->params); + + params->beta = beta; + params->d = d; + params->C0_c[0] = C0_0; + params->C0_c[1] = C0_1; + params->C0_c[2] = C0_2; + params->C0_c[3] = C0_3; + + XC(gga_c_pbe_set_params) (p->func_aux[0], beta); +} + + +static void +tpss_eq_13_14(const FLOAT *C0_c, FLOAT zeta, FLOAT csi2, int order, FLOAT *C, FLOAT *dCdzeta, FLOAT *dCdcsi2) +{ + FLOAT fz, C0, dC0dz, dfzdz, aa, a4; + FLOAT z2=zeta*zeta; + + if(zeta >= 1.0 || zeta <= -1.0){ + *C = 0.0; + if(order > 0) *dCdcsi2 = *dCdzeta = 0.0; + return; + } + + /* Equation (13) */ + C0 = C0_c[0] + z2*(C0_c[1] + z2*(C0_c[2] + z2*C0_c[3])); + fz = 0.5*(POW(1.0 + zeta, -4.0/3.0) + POW(1.0 - zeta, -4.0/3.0)); + + /* Equation (14) */ + aa = 1.0 + csi2*fz; + a4 = POW(aa, 4); + + *C = C0 / a4; + + if(order > 0){ + /* Equation (13) */ + dC0dz = zeta*(2.0*C0_c[1] + z2*(4.0*C0_c[2] + z2*6.0*C0_c[3])); + dfzdz = 0.5*(POW(1.0 + zeta, -7.0/3.0) - POW(1.0 - zeta, -7.0/3.0))*(-4.0/3.0); + + /* Equation (14) */ + *dCdcsi2 = -4.0*C0*fz/(aa*a4); + *dCdzeta = (dC0dz*aa - C0*4.0*csi2*dfzdz)/(aa*a4); + } +} + + +static void +func(const XC(func_type) *pt, XC(mgga_work_c_t) *r) +{ + static const FLOAT tmin = 0.5e-10; + + XC(gga_work_c_t) PBE[3]; + mgga_c_pkzb_params *params; + + FLOAT opz, omz, opz13, omz13, opz23, omz23, taut, xtot, dd, dd2, ddt, ddt2; + FLOAT C, dCdz, dCdxt, dCdxs[2]; + FLOAT dtautdz, dtautdts[2], dxtotdz, dxtotdxt, dxtotdxs[2]; + FLOAT ddddz, ddddxt, ddddxs[2], ddddts[2], dddtdz, dddtdxt, dddtdxs[2], dddtdts[2]; + int is, is_tpss; + + assert(pt!=NULL && pt->params != NULL); + params = (mgga_c_pkzb_params *)pt->params; + + /* first we get the parallel and perpendicular PBE */ + is_tpss = (pt->info->number == XC_MGGA_C_TPSS || pt->info->number == XC_MGGA_C_REVTPSS) ? 1 : 0; + XC(pbe_c_stoll) (pt->func_aux[0], is_tpss, r, PBE); + + opz = 1.0 + r->zeta; + omz = 1.0 - r->zeta; + + opz13 = CBRT(opz); + omz13 = CBRT(omz); + + opz23 = opz13*opz13; + omz23 = omz13*omz13; + + /* get value of C */ + if(is_tpss){ + FLOAT z2, cnst, aux, csi2; + FLOAT dCdcsi2,dauxdz, dcsi2dz, dcsi2dxt, dcsi2dxs[2]; + + z2 = r->zeta*r->zeta; + cnst = 2.0*CBRT(3.0*M_PI*M_PI); + + aux = -r->xt*r->xt + (r->xs[0]*r->xs[0]*opz*opz23 + r->xs[1]*r->xs[1]*omz*omz23)/(2.0*M_CBRT2*M_CBRT2); + csi2 = (1.0 - z2)*aux/(cnst*cnst); + + tpss_eq_13_14(params->C0_c, r->zeta, csi2, r->order, &C, &dCdz, &dCdcsi2); + + if(r->order >= 1){ + dauxdz = 5.0*(r->xs[0]*r->xs[0]*opz23 - r->xs[1]*r->xs[1]*omz23)/(6.0*M_CBRT2*M_CBRT2); + dcsi2dz = (-2.0*r->zeta*aux + (1.0 - z2)*dauxdz)/(cnst*cnst); + + dcsi2dxt = -2.0*(1.0 - z2)*r->xt/(cnst*cnst); + dcsi2dxs[0] = (1.0 - z2)*r->xs[0]*opz*opz23/(cnst*cnst*M_CBRT2*M_CBRT2); + dcsi2dxs[1] = (1.0 - z2)*r->xs[1]*omz*omz23/(cnst*cnst*M_CBRT2*M_CBRT2); + + dCdz += dCdcsi2*dcsi2dz; + dCdxt = dCdcsi2*dcsi2dxt; + dCdxs[0] = dCdcsi2*dcsi2dxs[0]; + dCdxs[1] = dCdcsi2*dcsi2dxs[1]; + } + + }else{ + C = 0.53; + if(r->order >= 1) dCdz = dCdxt = dCdxs[0] = dCdxs[1] = 0.0; + } + + /* we get the spin compensated part */ + taut = (r->ts[0]*opz*opz23 + r->ts[1]*omz*omz23)/(2.0*M_CBRT2*M_CBRT2); + + if(is_tpss) + xtot = r->xt*r->xt; + else + xtot = (r->xs[0]*r->xs[0]*opz*opz23 + r->xs[1]*r->xs[1]*omz*omz23)/(2.0*M_CBRT2*M_CBRT2); + + ddt = (taut > tmin) ? xtot/(8.0*taut) : 0.0; + ddt2 = ddt*ddt; + + /* the functional */ + r->f = (1.0 + C*ddt2)*PBE[2].f; + + /* and the derivative */ + if(r->order >= 1){ + if(taut > tmin){ + dtautdz = 5.0/3.0 * (r->ts[0]*opz23 - r->ts[1]*omz23)/(2.0*M_CBRT2*M_CBRT2); + dtautdts[0] = opz*opz23/(2.0*M_CBRT2*M_CBRT2); + dtautdts[1] = omz*omz23/(2.0*M_CBRT2*M_CBRT2); + + if(is_tpss){ + dxtotdz = 0.0; + dxtotdxt = 2.0*r->xt; + dxtotdxs[0] = 0.0; + dxtotdxs[1] = 0.0; + }else{ + dxtotdz = 5.0/3.0 * (r->xs[0]*r->xs[0]*opz23 - r->xs[1]*r->xs[1]*omz23)/(2.0*M_CBRT2*M_CBRT2); + dxtotdxt = 0.0; + dxtotdxs[0] = 2.0*r->xs[0]*opz*opz23/(2.0*M_CBRT2*M_CBRT2); + dxtotdxs[1] = 2.0*r->xs[1]*omz*omz23/(2.0*M_CBRT2*M_CBRT2); + } + + dddtdz = (dxtotdz*taut - xtot*dtautdz)/(8.0*taut*taut); + dddtdxt = dxtotdxt/(8.0*taut); + dddtdxs[0] = dxtotdxs[0]/(8.0*taut); + dddtdxs[1] = dxtotdxs[1]/(8.0*taut); + dddtdts[0] = -xtot*dtautdts[0]/(8.0*taut*taut); + dddtdts[1] = -xtot*dtautdts[1]/(8.0*taut*taut); + }else{ + dddtdz = dddtdxt = dddtdxs[0] = dddtdxs[1] = dddtdts[0] = dddtdts[1] = 0.0; + } + + r->dfdrs = (1.0 + C*ddt2)*PBE[2].dfdrs; + r->dfdz = (1.0 + C*ddt2)*PBE[2].dfdz + (dCdz *ddt2 + 2.0*C*ddt*dddtdz )*PBE[2].f; + r->dfdxt = (1.0 + C*ddt2)*PBE[2].dfdxt + (dCdxt *ddt2 + 2.0*C*ddt*dddtdxt )*PBE[2].f; + r->dfdxs[0] = (1.0 + C*ddt2)*PBE[2].dfdxs[0] + (dCdxs[0]*ddt2 + 2.0*C*ddt*dddtdxs[0])*PBE[2].f; + r->dfdxs[1] = (1.0 + C*ddt2)*PBE[2].dfdxs[1] + (dCdxs[1]*ddt2 + 2.0*C*ddt*dddtdxs[1])*PBE[2].f; + r->dfdts[0] = 2.0*C*ddt*dddtdts[0]*PBE[2].f; + r->dfdts[1] = 2.0*C*ddt*dddtdts[1]*PBE[2].f; + } + + if(r->order >= 2){ + } + + /* now the spin-resolved part */ + for(is = 0; is < 2; is++){ + int js = (is == 0) ? 1 : 0; + + if(is_tpss){ + dd = ddt; + dd2 = ddt2; + }else{ + dd = (r->ts[is] > tmin) ? r->xs[is]*r->xs[is]/(8.0*r->ts[is]) : 0.0; + dd2 = dd*dd; + } + + r->f += -(1.0 + C)*dd2*PBE[is].f; + + if(r->order < 1) continue; + + if(is_tpss){ + ddddz = dddtdz; + ddddxt = dddtdxt; + ddddxs[0] = dddtdxs[0]; + ddddxs[1] = dddtdxs[1]; + ddddts[0] = dddtdts[0]; + ddddts[1] = dddtdts[1]; + }else{ + ddddz = ddddxt = ddddxs[js] = ddddts[js] = 0.0; + if(r->ts[is] > tmin){ + ddddxs[is] = 2.0*r->xs[is]/(8.0*r->ts[is]); + ddddts[is] = -r->xs[is]*r->xs[is]/(8.0*r->ts[is]*r->ts[is]); + }else + ddddxs[is] = ddddts[is] = 0.0; + } + + r->dfdrs += -(1.0 + C)*dd2*PBE[is].dfdrs; + r->dfdz += -(1.0 + C)*dd*(2.0*ddddz *PBE[is].f + dd*PBE[is].dfdz) - dCdz *dd2*PBE[is].f; + r->dfdxt += -(1.0 + C)*dd*(2.0*ddddxt *PBE[is].f + dd*PBE[is].dfdxt) - dCdxt *dd2*PBE[is].f; + r->dfdxs[0] += -(1.0 + C)*dd*(2.0*ddddxs[0]*PBE[is].f + dd*PBE[is].dfdxs[0]) - dCdxs[0]*dd2*PBE[is].f; + r->dfdxs[1] += -(1.0 + C)*dd*(2.0*ddddxs[1]*PBE[is].f + dd*PBE[is].dfdxs[1]) - dCdxs[1]*dd2*PBE[is].f; + r->dfdts[0] += -(1.0 + C)*2.0*dd*ddddts[0]*PBE[is].f; + r->dfdts[1] += -(1.0 + C)*2.0*dd*ddddts[1]*PBE[is].f; + } + + if(is_tpss){ + r->f = r->f*(1.0 + params->d*r->f*ddt*ddt2); + + if(r->order >= 1){ + r->dfdrs = r->dfdrs*(1.0 + 2.0*params->d*r->f*ddt*ddt2); + r->dfdz = r->dfdz *(1.0 + 2.0*params->d*r->f*ddt*ddt2) + 3.0*r->f*r->f*params->d*dddtdz *ddt2; + r->dfdxt = r->dfdxt*(1.0 + 2.0*params->d*r->f*ddt*ddt2) + 3.0*r->f*r->f*params->d*dddtdxt*ddt2; + r->dfdxs[0] = r->dfdxs[0]*(1.0 + 2.0*params->d*r->f*ddt*ddt2) + 3.0*r->f*r->f*params->d*dddtdxs[0]*ddt2; + r->dfdxs[1] = r->dfdxs[1]*(1.0 + 2.0*params->d*r->f*ddt*ddt2) + 3.0*r->f*r->f*params->d*dddtdxs[1]*ddt2; + r->dfdts[0] = r->dfdts[0]*(1.0 + 2.0*params->d*r->f*ddt*ddt2) + 3.0*r->f*r->f*params->d*dddtdts[0]*ddt2; + r->dfdts[1] = r->dfdts[1]*(1.0 + 2.0*params->d*r->f*ddt*ddt2) + 3.0*r->f*r->f*params->d*dddtdts[1]*ddt2; + } + } +} + + +#include "work_mgga_c.c" + + +XC(func_info_type) XC(func_info_mgga_c_pkzb) = { + XC_MGGA_C_PKZB, + XC_CORRELATION, + "Perdew, Kurth, Zupan, and Blaha", + XC_FAMILY_MGGA, + "JP Perdew, S Kurth, A Zupan, and P. Blaha, Phys. Rev. Lett. 82, 2544-2547 (1999)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-26, 1e-32, 1e-32, 1e-32, /* densities smaller than 1e-26 give NaNs */ + mgga_c_pkzb_init, + NULL, NULL, NULL, + work_mgga_c, +}; + +XC(func_info_type) XC(func_info_mgga_c_tpss) = { + XC_MGGA_C_TPSS, + XC_CORRELATION, + "Tao, Perdew, Staroverov & Scuseria", + XC_FAMILY_MGGA, + "J Tao, JP Perdew, VN Staroverov, and G Scuseria, Phys. Rev. Lett. 91, 146401 (2003)\n" + "JP Perdew, J Tao, VN Staroverov, and G Scuseria, J. Chem. Phys. 120, 6898 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-26, 1e-32, 1e-32, 1e-32, /* densities smaller than 1e-26 give NaNs */ + mgga_c_pkzb_init, + NULL, NULL, NULL, + work_mgga_c, +}; + +XC(func_info_type) XC(func_info_mgga_c_revtpss) = { + XC_MGGA_C_REVTPSS, + XC_CORRELATION, + "revised TPSS correlation", + XC_FAMILY_MGGA, + "JP Perdew, A Ruzsinszky, GI Csonka, LA Constantin, and J Sun, Phys. Rev. Lett. 103, 026403 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-26, 1e-32, 1e-32, 1e-32, /* densities smaller than 1e-26 give NaNs */ + mgga_c_pkzb_init, + NULL, NULL, NULL, + work_mgga_c, +}; + diff --git a/libxc-2.2.0/src/mgga_c_vsxc.c b/libxc-2.2.0/src/mgga_c_vsxc.c new file mode 100644 index 000000000..bf2c3e45d --- /dev/null +++ b/libxc-2.2.0/src/mgga_c_vsxc.c @@ -0,0 +1,350 @@ +/* + Copyright (C) 2008 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_C_VSXC 232 /* VSxc from Van Voorhis and Scuseria (correlation part) */ +#define XC_MGGA_C_M05 237 /* M05 functional of Minnesota */ +#define XC_MGGA_C_M05_2X 238 /* M05-2X functional of Minnesota */ +#define XC_MGGA_C_M06_L 233 /* M06-Local functional of Minnesota */ +#define XC_MGGA_C_M06_HF 234 /* M06-HF functional of Minnesota */ +#define XC_MGGA_C_M06 235 /* M06 functional of Minnesota */ +#define XC_MGGA_C_M06_2X 236 /* M06-2X functional of Minnesota */ + +static const FLOAT vsxc_dab[6] = { 7.035010e-01, 7.694574e-03, 5.152765e-02, 3.394308e-05, -1.269420e-03, 1.296118e-03}; +static const FLOAT vsxc_dss[6] = { 3.270912e-01, -3.228915e-02, -2.942406e-02, 2.134222e-03, -5.451559e-03, 1.577575e-02}; + +static const FLOAT m05_cab[5] = { 1.00000e0, 3.78569e0, -14.15261e0, -7.46589e0, 17.94491e0}; +static const FLOAT m05_css[5] = { 1.00000e0, 3.77344e0, -26.04463e0, 30.69913e0, -9.22695e0}; + +static const FLOAT m052x_cab[5] = { 1.00000e0, 1.09297e0, -3.79171e0, 2.82810e0, -10.58909e0}; +static const FLOAT m052x_css[5] = { 1.00000e0, -3.05430e0, 7.61854e0, 1.47665e0, -11.92365e0}; + +static const FLOAT m06l_cab[5] = { 6.042374e-01, 1.776783e+02, -2.513252e+02, 7.635173e+01, -1.255699e+01}; +static const FLOAT m06l_css[5] = { 5.349466e-01, 5.396620e-01, -3.161217e+01, 5.149592e+01, -2.919613e+01}; +static const FLOAT m06l_dab[6] = { 3.957626e-01, -5.614546e-01, 1.403963e-02, 9.831442e-04, -3.577176e-03, 0.000000e+00}; +static const FLOAT m06l_dss[6] = { 4.650534e-01, 1.617589e-01, 1.833657e-01, 4.692100e-04, -4.990573e-03, 0.000000e+00}; + +static const FLOAT m06hf_cab[5] = { 1.674634e+00, 5.732017e+01, 5.955416e+01, -2.311007e+02, 1.255199e+02}; +static const FLOAT m06hf_css[5] = { 1.023254e-01, -2.453783e+00, 2.913180e+01, -3.494358e+01, 2.315955e+01}; +static const FLOAT m06hf_dab[6] = {-6.746338e-01, -1.534002e-01, -9.021521e-02, -1.292037e-03, -2.352983e-04, 0.000000e+00}; +static const FLOAT m06hf_dss[6] = { 8.976746e-01, -2.345830e-01, 2.368173e-01, -9.913890e-04, -1.146165e-02, 0.000000e+00}; + +static const FLOAT m06_cab[5] = { 3.741539e+00, 2.187098e+02, -4.531252e+02, 2.936479e+02, -6.287470e+01}; +static const FLOAT m06_css[5] = { 5.094055e-01, -1.491085e+00, 1.723922e+01, -3.859018e+01, 2.845044e+01}; +static const FLOAT m06_dab[6] = {-2.741539e+00, -6.720113e-01, -7.932688e-02, 1.918681e-03, -2.032902e-03, 0.000000e+00}; +static const FLOAT m06_dss[6] = { 4.905945e-01, -1.437348e-01, 2.357824e-01, 1.871015e-03, -3.788963e-03, 0.000000e+00}; + +static const FLOAT m062x_cab[5] = { 8.833596e-01, 3.357972e+01, -7.043548e+01, 4.978271e+01, -1.852891e+01}; +static const FLOAT m062x_css[5] = { 3.097855e-01, -5.528642e+00, 1.347420e+01, -3.213623e+01, 2.846742e+01}; +static const FLOAT m062x_dab[6] = { 1.166404e-01, -9.120847e-02, -6.726189e-02, 6.720580e-05, 8.448011e-04, 0.000000e+00}; +static const FLOAT m062x_dss[6] = { 6.902145e-01, 9.847204e-02, 2.214797e-01, -1.968264e-03, -6.775479e-03, 0.000000e+00}; + +typedef struct{ + const FLOAT *cab, *css, *dab, *dss; + FLOAT alpha_ab, alpha_ss, gamma_ab, gamma_ss; +} mgga_c_m06l_params; + + +static void +mgga_c_vsxc_init(XC(func_type) *p) +{ + mgga_c_m06l_params *params; + + assert(p != NULL); + + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_LDA_C_PW_MOD, XC_POLARIZED); + + assert(p!=NULL && p->params == NULL); + p->params = malloc(sizeof(mgga_c_m06l_params)); + params = (mgga_c_m06l_params *)p->params; + + switch(p->info->number){ + case XC_MGGA_C_VSXC: + params->cab = params->css = NULL; + params->alpha_ab = 0.00304966; + params->dab = vsxc_dab; + params->alpha_ss = 0.00515088; + params->dss = vsxc_dss; + break; + case XC_MGGA_C_M05: + params->gamma_ab = 0.0031; + params->cab = m05_cab; + params->gamma_ss = 0.06; + params->css = m05_css; + params->dab = params->dss = NULL; + break; + case XC_MGGA_C_M05_2X: + params->gamma_ab = 0.0031; + params->cab = m052x_cab; + params->gamma_ss = 0.06; + params->css = m052x_css; + params->dab = params->dss = NULL; + break; + case XC_MGGA_C_M06_L: + params->gamma_ab = 0.0031; + params->cab = m06l_cab; + params->gamma_ss = 0.06; + params->css = m06l_css; + params->alpha_ab = 0.00304966; + params->dab = m06l_dab; + params->alpha_ss = 0.00515088; + params->dss = m06l_dss; + break; + case XC_MGGA_C_M06_HF: + params->gamma_ab = 0.0031; + params->cab = m06hf_cab; + params->gamma_ss = 0.06; + params->css = m06hf_css; + params->alpha_ab = 0.00304966; + params->dab = m06hf_dab; + params->alpha_ss = 0.00515088; + params->dss = m06hf_dss; + break; + case XC_MGGA_C_M06: + params->gamma_ab = 0.0031; + params->cab = m06_cab; + params->gamma_ss = 0.06; + params->css = m06_css; + params->alpha_ab = 0.00304966; + params->dab = m06_dab; + params->alpha_ss = 0.00515088; + params->dss = m06_dss; + break; + case XC_MGGA_C_M06_2X: + params->gamma_ab = 0.0031; + params->cab = m062x_cab; + params->gamma_ss = 0.06; + params->css = m062x_css; + params->alpha_ab = 0.00304966; + params->dab = m062x_dab; + params->alpha_ss = 0.00515088; + params->dss = m062x_dss; + break; + default: + fprintf(stderr, "Internal error in mgga_c_vsxc\n"); + exit(1); + } +} + + +static void +func(const XC(func_type) *pt, XC(mgga_work_c_t) *r) +{ + static const FLOAT tmin = 0.5e-10; + static const FLOAT sign[2] = {1.0, -1.0}; + + mgga_c_m06l_params *params; + XC(lda_work_t) LDA[3]; + FLOAT opz, dd, g, dgdx, d2gdx2, h, dhdx, dhdt, aux, x_tot, dx_totdxs[2], ddddxs, ddddts; + int is; + + assert(pt!=NULL && pt->params != NULL); + params = (mgga_c_m06l_params *)pt->params; + + /* first we get the parallel and perpendicular LDAS */ + XC(lda_stoll) (pt->func_aux[0], r->dens, r->zeta, r->order, LDA); + + /* initialize to zero */ + r->f = 0.0; + if(r->order >= 1){ + r->dfdrs = r->dfdz = r->dfdxs[0] = r->dfdxs[1] = r->dfdxt = 0.0; + r->dfdus[0] = r->dfdus[1] = r->dfdts[0] = r->dfdts[1] = 0.0; + } + if(r->order >= 2){ + r->d2fdrs2 = r->d2fdrsz = r->d2fdrsxt = r->d2fdrsxs[0] = r->d2fdrsxs[1] = 0.0; + r->d2fdz2 = r->d2fdzxt = r->d2fdzxs[0] = r->d2fdzxs[1] = r->d2fdxt2 = 0.0; + r->d2fdxtxs[0] = r->d2fdxtxs[1] = r->d2fdxs2[0] = r->d2fdxs2[1] = r->d2fdxs2[2] = 0.0; + } + + /* now we calculate the g functions for exchange and parallel correlation */ + for(is = 0; is < 2; is++){ + opz = 1.0 + sign[is]*r->zeta; + + if(r->dens*opz < 2.0*pt->info->min_dens) continue; + + if(params->dss == NULL){ + h = dhdx = dhdt = 0.0; + }else{ + XC(mgga_x_gvt4_func)(r->order, r->xs[is], 2.0*(r->ts[is] - K_FACTOR_C), + params->alpha_ss, params->dss, &h, &dhdx, &dhdt); + } + + if(params->css == NULL){ + g = dgdx = 0.0; + }else{ + XC(mgga_b97_func_g)(params->css, params->gamma_ss, r->xs[is], r->order, &g, &dgdx, &d2gdx2); + } + + dd = (r->ts[is] > tmin) ? 1.0 - r->xs[is]*r->xs[is]/(8.0*r->ts[is]) : 0.0; + + r->f += LDA[is].zk*dd*(g + h); + + if(r->order < 1) continue; + + if(r->ts[is] > tmin){ + ddddxs = -2.0*r->xs[is]/(8.0*r->ts[is]); + ddddts = r->xs[is]*r->xs[is]/(8.0*r->ts[is]*r->ts[is]); + }else + ddddxs = ddddts = 0.0; + + r->dfdrs += LDA[is].dedrs*dd*(g + h); + r->dfdz += LDA[is].dedz *dd*(g + h); + r->dfdxs[is] += LDA[is].zk*(ddddxs*(g + h) + dd*(dgdx + dhdx)); + r->dfdts[is] += LDA[is].zk*(ddddts*(g + h) + 2.0*dd*dhdt); + } + + /* and now we add the opposite-spin contribution */ + aux = r->xs[0]*r->xs[0] + r->xs[1]*r->xs[1]; + x_tot = SQRT(aux); + + if(params->dab == NULL){ + h = dhdx = dhdt = 0.0; + }else{ + XC(mgga_x_gvt4_func)(r->order, x_tot, 2.0*(r->ts[0] + r->ts[1] - 2.0*K_FACTOR_C), + params->alpha_ab, params->dab, &h, &dhdx, &dhdt); + } + + if(params->cab == NULL){ + g = dgdx = 0.0; + }else{ + XC(mgga_b97_func_g)(params->cab, params->gamma_ab, x_tot, r->order, &g, &dgdx, &d2gdx2); + } + + r->f += LDA[2].zk*(g + h); + + if(r->order < 1) return; + + dx_totdxs[0] = r->xs[0]/x_tot; + dx_totdxs[1] = r->xs[1]/x_tot; + + r->dfdrs += LDA[2].dedrs*(g + h); + r->dfdz += LDA[2].dedz *(g + h); + r->dfdxs[0] += LDA[2].zk*(dgdx + dhdx)*dx_totdxs[0]; + r->dfdxs[1] += LDA[2].zk*(dgdx + dhdx)*dx_totdxs[1]; + r->dfdts[0] += LDA[2].zk*dhdt*2.0; + r->dfdts[1] += LDA[2].zk*dhdt*2.0; +} + +#include "work_mgga_c.c" + +XC(func_info_type) XC(func_info_mgga_c_m05) = { + XC_MGGA_C_M05, + XC_CORRELATION, + "M05 functional of Minnesota", + XC_FAMILY_MGGA, + "Y Zhao, NE Schultz, and DG Truhlar, J. Chem. Phys. 123, 161103 (2005)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_c_vsxc_init, + NULL, NULL, NULL, + work_mgga_c, +}; + + +XC(func_info_type) XC(func_info_mgga_c_m05_2x) = { + XC_MGGA_C_M05_2X, + XC_CORRELATION, + "M05-2X functional of Minnesota", + XC_FAMILY_MGGA, + "Y Zhao, NE Schultz, and DG Truhlar, J. Chem. Theory Comput. 2, 364 (2006)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_c_vsxc_init, + NULL, NULL, NULL, + work_mgga_c, +}; + +const XC(func_info_type) XC(func_info_mgga_c_vsxc) = { + XC_MGGA_C_VSXC, + XC_CORRELATION, + "VSXC (correlation part)", + XC_FAMILY_MGGA, + "T Van Voorhis and GE Scuseria, JCP 109, 400 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + mgga_c_vsxc_init, + NULL, + NULL, NULL, + work_mgga_c, +}; + +const XC(func_info_type) XC(func_info_mgga_c_m06_l) = { + XC_MGGA_C_M06_L, + XC_CORRELATION, + "M06-Local functional of Minnesota", + XC_FAMILY_MGGA, + "Y Zhao and DG Truhlar, JCP 125, 194101 (2006)\n" + "Y Zhao and DG Truhlar, Theor. Chem. Account 120, 215 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + mgga_c_vsxc_init, + NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_c, +}; + +const XC(func_info_type) XC(func_info_mgga_c_m06_hf) = { + XC_MGGA_C_M06_HF, + XC_CORRELATION, + "M06-HF functional of Minnesota", + XC_FAMILY_MGGA, + "Y Zhao and DG Truhlar, J. Phys. Chem. A 110, 13126 (2006)\n", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + mgga_c_vsxc_init, + NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_c, +}; + +const XC(func_info_type) XC(func_info_mgga_c_m06) = { + XC_MGGA_C_M06, + XC_CORRELATION, + "M06 functional of Minnesota", + XC_FAMILY_MGGA, + "Theor. Chem. Acc. 120, 215 (2008)\n", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + mgga_c_vsxc_init, + NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_c, +}; + +const XC(func_info_type) XC(func_info_mgga_c_m06_2x) = { + XC_MGGA_C_M06_2X, + XC_CORRELATION, + "M06-2X functional of Minnesota", + XC_FAMILY_MGGA, + "Theor. Chem. Acc. 120, 215 (2008)\n", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + mgga_c_vsxc_init, + NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_c, +}; diff --git a/libxc-2.2.0/src/mgga_x_2d_prhg07.c b/libxc-2.2.0/src/mgga_x_2d_prhg07.c new file mode 100644 index 000000000..9a3ab0aad --- /dev/null +++ b/libxc-2.2.0/src/mgga_x_2d_prhg07.c @@ -0,0 +1,168 @@ +/* + Copyright (C) 2006-2009 J.I.J. Ojajarvi + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_X_2D_PRHG07 210 /* Pittalis, Rasanen, Helbig, Gross Exchange Functional */ +#define XC_MGGA_X_2D_PRHG07_PRP10 211 /* PRGH07 with PRP10 correction */ + + +/* Standard Newton's method */ +static FLOAT +prhg_newt(FLOAT c, FLOAT tol, FLOAT * res, int *ierr) +{ + int count; + long double y, f, yf; + long double ey, fp, step; + static int max_iter = 50; + + *ierr = 1; + if(c < -1.0) + return 0.0; + + count = 0; + + /** We need to calculate y in different ways in different regions + because of numerical problems. (y-1)*exp(y) is very nasty at high y + and log(y-1)+y is very nasty at low y. **/ + if (c < 4.0) { + y = 2.0; + do { + ey = expl(y); + yf = (y-1.0)*ey; + f = yf - c; + fp = ey*y; + + step = f/fp; + + y -= fabsl(step) < 1.0 ? step : (step)/fabsl(step); + y = fabsl(y); + + count ++; + *res = fabsl(f); + } while((*res > tol) && (count < max_iter)); + } + else { + y = 6.0; + c = logl(c); + do { + yf = logl(y-1.0)+y; + f = yf - c; + fp = 1.0 + 1.0/(-1.0 + y); + + step = f/fp; + + y -= fabsl(step) < 1.0 ? step : (step)/fabsl(step); + y = fabsl(y); + + count ++; + *res = fabsl(f); + } while((*res > tol) && (count < max_iter)); + } + + if(count == max_iter) *ierr=0; + + return y; +} + +FLOAT XC(mgga_x_2d_prhg_get_y)(FLOAT C) +{ + FLOAT rhs, res, y, tol; + int ierr; + +#ifdef SINGLE_PRECISION + tol = 1e-6; +#else + tol = 5e-12; +#endif + + rhs = C/M_PI; + + y = prhg_newt(rhs, tol, &res, &ierr); + if(ierr == 0){ + fprintf(stderr, + "Warning: Convergence not reached in PRHG functional\n" + "For c = %e (residual = %e)\n", C, res); + } + + return y; +} + +static void +func(const XC(func_type) *p, XC(mgga_work_x_t) *r) +{ + FLOAT y; + FLOAT v_PRHG, C; + + assert(p != NULL); + + C = 0.25*(r->u - 4.0*r->t + 0.5*r->x*r->x); + + y = XC(mgga_x_2d_prhg_get_y)(C); + + v_PRHG = M_PI*XC(bessel_I0)(y/2.0); + v_PRHG /= X_FACTOR_2D_C; + + if (p->info->number == XC_MGGA_X_2D_PRHG07) { + r->dfdrs = v_PRHG*(1.0 / 3.0); // This factor is here in order to get the correct potential through work_mgga_x.c + r->f = v_PRHG / 2.0; + }else if (p->info->number == XC_MGGA_X_2D_PRHG07_PRP10) { + r->dfdrs = (v_PRHG - ((2.0*M_SQRT2)/(3.0*M_PI))*SQRT(max(2.0*r->t - 0.25*r->x*r->x, 0.0))/X_FACTOR_2D_C)*(1.0 / 3.0); + r->f = r->dfdrs * (3.0 / 2.0); + } + + r->dfdrs /= -r->rs; /* due to the definition of dfdrs */ + + return; +} +#define XC_DIMENSIONS 2 +#include "work_mgga_x.c" + +const XC(func_info_type) XC(func_info_mgga_x_2d_prhg07) = { + XC_MGGA_X_2D_PRHG07, + XC_EXCHANGE, + "Pittalis-Rasanen-Helbig-Gross 2007", + XC_FAMILY_MGGA, + "S. Pittalis, E. Rasanen, N. Helbig, and E. K. U. Gross, Phys. Rev. B 76, 235314 (2007)", + XC_FLAGS_2D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + NULL, NULL, + NULL, NULL, + work_mgga_x, +}; + +const XC(func_info_type) XC(func_info_mgga_x_2d_prhg07_prp10) = { + XC_MGGA_X_2D_PRHG07_PRP10, + XC_EXCHANGE, + "PRHG07 with Pittalis-Rasanen-Proetto 2010 correction", + XC_FAMILY_MGGA, + "S. Pittalis, E. Rasanen, N. Helbig, and E. K. U. Gross, Phys. Rev. B 76, 235314 (2007)\n" + "S. Pittalis, E. Rasanen, C.R. Proetto, Phys. Rev. B. 81, 115108 (2010)", + XC_FLAGS_2D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + NULL, + NULL, + NULL, NULL, + work_mgga_x, +}; + diff --git a/libxc-2.2.0/src/mgga_x_br89.c b/libxc-2.2.0/src/mgga_x_br89.c new file mode 100644 index 000000000..efc074b59 --- /dev/null +++ b/libxc-2.2.0/src/mgga_x_br89.c @@ -0,0 +1,316 @@ +/* + Copyright (C) 2006-2009 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_X_BR89 206 /* Becke-Roussel 89 */ +#define XC_MGGA_X_BJ06 207 /* Becke & Johnson correction to Becke-Roussel 89 */ +#define XC_MGGA_X_TB09 208 /* Tran & Blaha correction to Becke & Johnson */ +#define XC_MGGA_X_RPP09 209 /* Rasanen, Pittalis, and Proetto correction to Becke & Johnson */ + +typedef struct{ + FLOAT c; +} mgga_x_tb09_params; + +static FLOAT br89_gamma = 0.8; + + +static void +mgga_x_tb09_init(XC(func_type) *p) +{ + assert(p->params == NULL); + + switch(p->info->number){ + case XC_MGGA_X_BR89: p->func = 0; break; + case XC_MGGA_X_BJ06: p->func = 1; break; + case XC_MGGA_X_TB09: p->func = 2; break; + case XC_MGGA_X_RPP09: p->func = 3; break; + } + + p->params = malloc(sizeof(mgga_x_tb09_params)); + + /* value of c in Becke-Johnson */ + XC(mgga_x_tb09_set_params)(p, 1.0); +} + + +void XC(mgga_x_tb09_set_params)(XC(func_type) *p, FLOAT c) +{ + mgga_x_tb09_params *params; + + assert(p != NULL && p->params != NULL); + params = (mgga_x_tb09_params *) (p->params); + + params->c = c; +} + +/* This code follows the inversion done in the PINY_MD package */ +static FLOAT +br_newt_raph(FLOAT a, FLOAT tol, FLOAT * res, int *ierr) +{ + int count; + FLOAT x, f; + static int max_iter = 50; + + *ierr = 1; + if(a == 0.0) + return 0.0; + + /* starting point */ + x = (a < 0.0) ? -1.0 : 1.0; + + count = 0; + do { + FLOAT arg, eee, xm2, fp; + + xm2 = x - 2.0; + arg = 2.0*x/3.0; + eee = EXP(-arg)/a; + + f = x*eee - xm2; + fp = eee*(1.0 - 2.0/3.0*x) - 1.0; + + x -= f/fp; + x = ABS(x); + + count ++; + *res = ABS(f); + } while((*res > tol) && (count < max_iter)); + + if(count == max_iter) *ierr=0; + return x; +} + +static FLOAT +br_bisect(FLOAT a, FLOAT tol, int *ierr) { + int count; + FLOAT f, x, x1, x2; + static int max_iter = 500; + + *ierr = 1; + if(a == 0.0) + return 0.0; + + /* starting interval */ + if(a > 0.0) { + x1 = 2.0 + tol; + x2 = 1.0/a + 2.0; + }else{ + x2 = 2.0 - tol; + x1 = 0.0; + } + + /* bisection */ + count = 0; + do{ + FLOAT arg, eee, xm2; + x = 0.5*(x1 + x2); + xm2 = x - 2.0; + arg = 2.0*x/3.0; + eee = EXP(-arg); + f = x*eee - a*xm2; + + if(f > 0.0) x1 = x; + if(f < 0.0) x2 = x; + + count++; + }while((ABS(f) > tol) && (count < max_iter)); + + if(count == max_iter) *ierr=0; + return x; +} + +FLOAT XC(mgga_x_br89_get_x)(FLOAT Q) +{ + FLOAT rhs, br_x, tol, res; + int ierr; + +#ifdef SINGLE_PRECISION + tol = 1e-6; +#else + tol = 5e-12; +#endif + + /* build right-hand side of the non-linear equation + Remember we use a different definition of tau */ + rhs = 2.0/3.0*POW(M_PI, 2.0/3.0)/Q; + + br_x = br_newt_raph(rhs, tol, &res, &ierr); + if(ierr == 0){ + br_x = br_bisect(rhs, tol, &ierr); + if(ierr == 0){ + fprintf(stderr, + "Warning: Convergence not reached in Becke-Roussel functional\n" + "For rhs = %e (residual = %e)\n", rhs, res); + } + } + + return br_x; +} + +static void +func(const XC(func_type) *pt, XC(mgga_work_x_t) *r) +{ + FLOAT Q, br_x, v_BR, dv_BRdbx, d2v_BRdbx2, dxdQ, d2xdQ2, ff, dffdx, d2ffdx2; + FLOAT cnst, c_TB09, c_HEG, exp1, exp2; + + Q = (r->u - 4.0*br89_gamma*r->t + 0.5*br89_gamma*r->x*r->x)/6.0; + if(ABS(Q) < MIN_DENS) Q = (Q < 0) ? -MIN_DENS : MIN_DENS; + + br_x = XC(mgga_x_br89_get_x)(Q); + + cnst = -2.0*CBRT(M_PI)/X_FACTOR_C; + exp1 = EXP(br_x/3.0); + exp2 = EXP(-br_x); + + v_BR = (ABS(br_x) > pt->info->min_tau) ? + exp1*(1.0 - exp2*(1.0 + br_x/2.0))/br_x : + 1.0/2.0 + br_x/6.0 - br_x*br_x/18.0; + + v_BR *= cnst; + + if(pt->func == 0){ /* XC_MGGA_X_BR89 */ + /* we have also to include the factor 1/2 from Eq. (9) */ + r->f = - v_BR / 2.0; + }else{ /* XC_MGGA_X_BJ06 & XC_MGGA_X_TB09 */ + r->f = 0.0; + } + + if(r->order < 1) return; + + if(pt->func == 0 || r->order > 1){ + dv_BRdbx = (ABS(br_x) > pt->info->min_tau) ? + (3.0 + br_x*(br_x + 2.0) + (br_x - 3.0)/exp2) / (3.0*exp1*exp1*br_x*br_x) : + 1.0/6.0 - br_x/9.0; + dv_BRdbx *= cnst; + + ff = br_x*EXP(-2.0/3.0*br_x)/(br_x - 2); + dffdx = ff*(-2.0/3.0 + 1.0/br_x - 1.0/(br_x - 2.0)); + dxdQ = -ff/(Q*dffdx); + } + + if(pt->func == 0){ /* XC_MGGA_X_BR89 */ + r->dfdx = -r->x*br89_gamma*dv_BRdbx*dxdQ/12.0; + r->dfdt = 4.0*br89_gamma*dv_BRdbx*dxdQ/12.0; + r->dfdu = -dv_BRdbx*dxdQ/12.0; + + }else{ + assert(pt->params != NULL); + c_TB09 = ((mgga_x_tb09_params *) (pt->params))->c; + + r->dfdrs = -c_TB09*v_BR; + + c_HEG = (3.0*c_TB09 - 2.0)*SQRT(5.0/12.0)/(X_FACTOR_C*M_PI); + + if(pt->func == 1 || pt->func == 2) /* XC_MGGA_X_BJ0 & XC_MGGA_X_TB09 */ + r->dfdrs -= c_HEG*SQRT(2.0*r->t); + else /* XC_MGGA_X_RPP09 */ + r->dfdrs -= c_HEG*SQRT(max(2.0*r->t - r->x*r->x/4.0, 0.0)); + + r->dfdrs /= -r->rs; /* due to the definition of dfdrs */ + } + + if(r->order < 2) return; + + if(pt->func == 0 || r->order > 2){ + d2v_BRdbx2 = (ABS(br_x) > pt->info->min_tau) ? + ((18.0 + (br_x - 6.0)*br_x)/exp2 - 2.0*(9.0 + br_x*(6.0 + br_x*(br_x + 2.0)))) + / (9.0*exp1*exp1*br_x*br_x*br_x) : + -1.0/9.0; + d2v_BRdbx2 *= cnst; + + d2ffdx2 = dffdx*dffdx/ff + ff*(-1.0/(br_x*br_x) + 1.0/((br_x - 2.0)*(br_x - 2.0))); + d2xdQ2 = -(2.0*dxdQ/Q + d2ffdx2*dxdQ*dxdQ/dffdx); + } + + if(pt->func == 0){ /* XC_MGGA_X_BR89 */ + FLOAT aux1 = d2v_BRdbx2*dxdQ*dxdQ + dv_BRdbx*d2xdQ2; + + r->d2fdx2 = -(aux1*br89_gamma*r->x*r->x/6.0 + dv_BRdbx*dxdQ)*br89_gamma/12.0; + r->d2fdxt = aux1*br89_gamma*br89_gamma*r->x/18.0; + r->d2fdxu = -aux1*br89_gamma*r->x/72.0; + r->d2fdt2 = -aux1*2.0*br89_gamma*br89_gamma/9.0; + r->d2fdtu = aux1*br89_gamma/18.0; + r->d2fdu2 = -aux1/72.0; + }else{ + + } + +} + +#include "work_mgga_x.c" + +const XC(func_info_type) XC(func_info_mgga_x_br89) = { + XC_MGGA_X_BR89, + XC_EXCHANGE, + "Becke-Roussel 89", + XC_FAMILY_MGGA, + "AD Becke and MR Roussel, Phys. Rev. A 39, 3761 (1989)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + NULL, NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_x, +}; + +const XC(func_info_type) XC(func_info_mgga_x_bj06) = { + XC_MGGA_X_BJ06, + XC_EXCHANGE, + "Becke & Johnson 06", + XC_FAMILY_MGGA, + "AD Becke and ER Johnson, J. Chem. Phys. 124, 221101 (2006)", + XC_FLAGS_3D | XC_FLAGS_HAVE_VXC, + 1e-22, 1e-32, 1e-22, 1e-22, + mgga_x_tb09_init, + NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_x, +}; + +const XC(func_info_type) XC(func_info_mgga_x_tb09) = { + XC_MGGA_X_TB09, + XC_EXCHANGE, + "Tran & Blaha 09", + XC_FAMILY_MGGA, + "F Tran and P Blaha, Phys. Rev. Lett. 102, 226401 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + mgga_x_tb09_init, + NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_x, +}; + +const XC(func_info_type) XC(func_info_mgga_x_rpp09) = { + XC_MGGA_X_RPP09, + XC_EXCHANGE, + "Rasanen, Pittalis & Proetto 09", + XC_FAMILY_MGGA, + "E Rasanen, S Pittalis & C Proetto, J. Chem. Phys. 132, 044112 (2010)", + XC_FLAGS_3D | XC_FLAGS_HAVE_VXC, + 1e-22, 1e-22, 1e-22, 1e-22, + mgga_x_tb09_init, + NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_x, +}; diff --git a/libxc-2.2.0/src/mgga_x_gvt4.c b/libxc-2.2.0/src/mgga_x_gvt4.c new file mode 100644 index 000000000..c902d0843 --- /dev/null +++ b/libxc-2.2.0/src/mgga_x_gvt4.c @@ -0,0 +1,84 @@ +/* + Copyright (C) 2008 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_X_GVT4 204 /* GVT4 from Van Voorhis and Scuseria */ + +/* calculate h and h derivatives with respect to rho, grho and tau: Equation (5) */ +void XC(mgga_x_gvt4_func)(int order, FLOAT x, FLOAT z, FLOAT alpha, const FLOAT *d, + FLOAT *h, FLOAT *dhdx, FLOAT *dhdz) +{ + FLOAT gam, gam2, x2, dhdgam; + FLOAT n1, n2, n3; + + x2 = x*x; + gam = 1.0 + alpha*(x2 + z); + gam2 = gam*gam; + + n1 = d[0]; + n2 = d[1]*x2 + d[2]*z; + n3 = d[3]*x2*x2 + d[4]*x2*z + d[5]*z*z; + + *h = n1/gam + n2/gam2 + n3/(gam*gam2); + + if(order < 1) return; + + dhdgam = -n1/gam2 - 2.0*n2/(gam*gam2) - 3.0*n3/(gam2*gam2); + + *dhdx = 2.0*d[1]*x/gam2 + (4.0*d[3]*x*x2 + 2.0*d[4]*x*z)/(gam*gam2) + + dhdgam*(2.0*alpha*x); + *dhdz = d[2]/gam2 + (d[4]*x2 + 2.0*d[5]*z)/(gam*gam2) + + dhdgam*alpha; +} + +static void +func(const XC(func_type) *pt, XC(mgga_work_x_t) *r) +{ + static const FLOAT abcd[6] = + {-9.800683e-01, -3.556788e-03, 6.250326e-03, -2.354518e-05, -1.282732e-04, 3.574822e-04}; + static const FLOAT alpha = 0.00186726; + + XC(mgga_x_gvt4_func)(r->order, r->x, 2.0*(r->t - K_FACTOR_C), alpha, abcd, &r->f, &r->dfdx, &r->dfdt); + + r->f /= -X_FACTOR_C; + + if(r->order < 1) return; + + r->dfdx /= -X_FACTOR_C; + r->dfdt /= -X_FACTOR_C/2.0; +} + +#include "work_mgga_x.c" + +const XC(func_info_type) XC(func_info_mgga_x_gvt4) = { + XC_MGGA_X_GVT4, + XC_EXCHANGE, + "GVT4 (X part of VSXC)", + XC_FAMILY_MGGA, + "T Van Voorhis and GE Scuseria, JCP 109, 400 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + NULL, NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_x, +}; diff --git a/libxc-2.2.0/src/mgga_x_lta.c b/libxc-2.2.0/src/mgga_x_lta.c new file mode 100644 index 000000000..c4861ec37 --- /dev/null +++ b/libxc-2.2.0/src/mgga_x_lta.c @@ -0,0 +1,59 @@ +/* + Copyright (C) 2006-2008 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +/* Local tau approximation */ + +#define XC_MGGA_X_LTA 201 /* Local tau approximation of Ernzerhof & Scuseria */ + +static void +func(const XC(func_type) *pt, XC(mgga_work_x_t) *r) +{ + /* POW(10.0/(3.0*POW(6.0*M_PI*M_PI, 2.0/3.0)), 4.0/5.0) = (2/C_F)^(4/5) */ + const FLOAT a1 = 0.297163728291293581339216378935; + FLOAT t; + + t = r->t; /* we use a different definition of t */ + r->f = a1*POW(t, 4.0/5.0); + + if(r->order < 1) return; + + r->dfdt = (t > 1e-10) ? a1*4.0/5.0*POW(t, -1.0/5.0) : 0.0; + + if(r->order < 2) return; + + r->d2fdt2 = (t > 1e-10) ? -a1*4.0/25.0*POW(t, -6.0/5.0) : 0.0; +} + +#include "work_mgga_x.c" + +const XC(func_info_type) XC(func_info_mgga_x_lta) = { + XC_MGGA_X_LTA, + XC_EXCHANGE, + "Local tau approximation", + XC_FAMILY_MGGA, + "M Ernzerhof and G Scuseria, J. Chem. Phys. 111, 911 (1999)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + NULL, NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_x, +}; diff --git a/libxc-2.2.0/src/mgga_x_m05.c b/libxc-2.2.0/src/mgga_x_m05.c new file mode 100644 index 000000000..ca4ac5dd0 --- /dev/null +++ b/libxc-2.2.0/src/mgga_x_m05.c @@ -0,0 +1,154 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_X_M05 214 /* M05 functional of Minnesota */ +#define XC_MGGA_X_M05_2X 215 /* M05-2X functional of Minnesota */ +#define XC_MGGA_X_M06_2X 218 /* M06-2X functional of Minnesota */ + +static const FLOAT a_m05[12] = + {1.0, 0.08151, -0.43956, -3.22422, 2.01819, 8.79431, -0.00295, + 9.82029, -4.82351, -48.17574, 3.64802, 34.02248}; + +static const FLOAT a_m05_2x[12] = + {1.0, -0.56833, -1.30057, 5.50070, 9.06402, -32.21075, -23.73298, + 70.22996, 29.88614, -60.25778, -13.22205, 15.23694}; + +static const FLOAT a_m06_2x[12] = + {4.600000e-01, -2.206052e-01, -9.431788e-02, 2.164494e+00, -2.556466e+00, -1.422133e+01, + 1.555044e+01, 3.598078e+01, -2.722754e+01, -3.924093e+01, 1.522808e+01, 1.522227e+01}; + +typedef struct{ + int n; + const FLOAT *a; +} mgga_x_m05_params; + + +static void +mgga_x_m05_init(XC(func_type) *p) +{ + mgga_x_m05_params *params; + + assert(p != NULL); + + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_GGA_X_PBE, p->nspin); + + assert(p->params == NULL); + p->params = malloc(sizeof(mgga_x_m05_params)); + params = (mgga_x_m05_params *) (p->params); + + switch(p->info->number){ + case XC_MGGA_X_M05: + params->n = 12; + params->a = a_m05; + break; + case XC_MGGA_X_M05_2X: + params->n = 12; + params->a = a_m05_2x; + break; + case XC_MGGA_X_M06_2X: + params->n = 12; + params->a = a_m06_2x; + break; + default: + fprintf(stderr, "Internal error in mgga_x_m05\n"); + exit(1); + } +} + + +static void +func(const XC(func_type) *pt, XC(mgga_work_x_t) *r) +{ + mgga_x_m05_params *params; + + FLOAT e_f, e_dfdx, e_d2fdx2; + FLOAT fw, dfwdt; + + assert(pt != NULL && pt->params != NULL); + params = (mgga_x_m05_params *) (pt->params); + + XC(gga_x_pbe_enhance)(pt->func_aux[0], r->order, r->x, &e_f, &e_dfdx, &e_d2fdx2, NULL); + + XC(mgga_series_w)(r->order, params->n, params->a, r->t, &fw, &dfwdt); + + r->f = e_f*fw; + + if(r->order < 1) return; + + r->dfdx = e_dfdx*fw; + r->dfdt = e_f*dfwdt; + r->dfdu = 0.0; + + if(r->order < 2) return; + +} + + +#include "work_mgga_x.c" + + +XC(func_info_type) XC(func_info_mgga_x_m05) = { + XC_MGGA_X_M05, + XC_EXCHANGE, + "M05 functional of Minnesota", + XC_FAMILY_MGGA, + "Y Zhao, NE Schultz, and DG Truhlar, J. Chem. Phys. 123, 161103 (2005)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_x_m05_init, + NULL, NULL, NULL, + work_mgga_x, +}; + + +XC(func_info_type) XC(func_info_mgga_x_m05_2x) = { + XC_MGGA_X_M05_2X, + XC_EXCHANGE, + "M05-2X functional of Minnesota", + XC_FAMILY_MGGA, + "Y Zhao, NE Schultz, and DG Truhlar, J. Chem. Theory Comput. 2, 364 (2006)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_x_m05_init, + NULL, NULL, NULL, + work_mgga_x, +}; + +const XC(func_info_type) XC(func_info_mgga_x_m06_2x) = { + XC_MGGA_X_M06_2X, + XC_EXCHANGE, + "M06-2X functional of Minnesota", + XC_FAMILY_MGGA, + "Y Zhao and DG Truhlar, Theor. Chem. Acc. 120, 215 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + mgga_x_m05_init, + NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_x, +}; diff --git a/libxc-2.2.0/src/mgga_x_m06l.c b/libxc-2.2.0/src/mgga_x_m06l.c new file mode 100644 index 000000000..ffc32d5fc --- /dev/null +++ b/libxc-2.2.0/src/mgga_x_m06l.c @@ -0,0 +1,185 @@ +/* + Copyright (C) 2008 Lara Ferrigni, Georg Madsen, M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_X_M06_L 203 /* M06-Local functional of Minnesota */ +#define XC_MGGA_X_M06_HF 216 /* M06-HF functional of Minnesota */ +#define XC_MGGA_X_M06 217 /* M06 functional of Minnesota */ + +static const FLOAT a_m06l[12] = { + 0.3987756, 0.2548219, 0.3923994, -2.103655, -6.302147, 10.97615, + 30.97273, -23.18489, -56.73480, 21.60364, 34.21814, -9.049762 +}; +static const FLOAT d_m06l[6] = {0.6012244, 0.004748822, -0.008635108, -0.000009308062, 0.00004482811, 0.0}; + +static const FLOAT a_m06hf[12] = { + 1.179732e-01, -1.066708e+00, -1.462405e-01, 7.481848e+00, 3.776679e+00, -4.436118e+01, + -1.830962e+01, 1.003903e+02, 3.864360e+01, -9.806018e+01, -2.557716e+01, 3.590404e+01 +}; +static const FLOAT d_m06hf[6] = {-1.179732e-01, -2.500000e-03, -1.180065e-02, 0.0, 0.0, 0.0}; + +static const FLOAT a_m06[12] = { + 5.877943e-01, -1.371776e-01, 2.682367e-01, -2.515898e+00, -2.978892e+00, 8.710679e+00, + 1.688195e+01, -4.489724e+00, -3.299983e+01, -1.449050e+01, 2.043747e+01, 1.256504e+01 +}; +static const FLOAT d_m06[6] = {1.422057e-01, 7.370319e-04, -1.601373e-02, 0.0, 0.0, 0.0}; + +typedef struct{ + const FLOAT *a, *d; +} mgga_x_m06l_params; + + +static void +mgga_x_m06l_init(XC(func_type) *p) +{ + mgga_x_m06l_params *params; + + assert(p!=NULL && p->params == NULL); + p->params = malloc(sizeof(mgga_x_m06l_params)); + params = (mgga_x_m06l_params *)p->params; + + switch(p->info->number){ + case XC_MGGA_X_M06_L: + params->a = a_m06l; + params->d = d_m06l; + break; + case XC_MGGA_X_M06_HF: + params->a = a_m06hf; + params->d = d_m06hf; + break; + case XC_MGGA_X_M06: + params->a = a_m06; + params->d = d_m06; + break; + default: + fprintf(stderr, "Internal error in mgga_x_m06l\n"); + exit(1); + } + + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(sizeof(XC(func_type) *)*p->n_func_aux); + p->func_aux[0] = (XC(func_type) *) malloc(sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_GGA_X_PBE, p->nspin); +} + + +/* Eq. (8) */ +void +XC(mgga_series_w)(int order, int n, const FLOAT *a, FLOAT t, FLOAT *fw, FLOAT *dfwdt) +{ + FLOAT w, w_den, wp; + int i; + + w_den = K_FACTOR_C + t; + w = (K_FACTOR_C - t)/w_den; + + *fw = 0.0; + if(order>0) *dfwdt = 0.0; + wp = 1.0; + for(i=0; i0) *dfwdt += i*a[i]*wp; + + wp *= w; + } + if (order>0){ + *dfwdt /= w; + *dfwdt *= -2.0*K_FACTOR_C/(w_den*w_den); + } +} + + +static void +func(const XC(func_type) *pt, XC(mgga_work_x_t) *r) +{ + const FLOAT alpha = 0.00186726; /* set alpha of Eq. (4) */ + + mgga_x_m06l_params *params; + FLOAT f_pbe, dfdx_pbe; + FLOAT h, dhdx, dhdz, fw, dfwdt; + + assert(pt!=NULL && pt->params != NULL); + params = (mgga_x_m06l_params *)pt->params; + + XC(gga_x_pbe_enhance)(pt->func_aux[0], r->order, r->x, &f_pbe, &dfdx_pbe, NULL, NULL); + + XC(mgga_series_w)(r->order, 12, params->a, r->t, &fw, &dfwdt); + + /* there is a factor if 2 in the definition of z, as in Theor. Chem. Account 120, 215 (2008) */ + XC(mgga_x_gvt4_func)(r->order, r->x, 2.0*(r->t - K_FACTOR_C), alpha, params->d, &h, &dhdx, &dhdz); + + /* A MINUS was missing in Eq. (7) of the paper */ + r->f = f_pbe*fw + h; + + if(r->order < 1) return; + + r->dfdx = dfdx_pbe*fw + dhdx; + r->dfdt = f_pbe*dfwdt + 2.0*dhdz; +} + + +#include "work_mgga_x.c" + +const XC(func_info_type) XC(func_info_mgga_x_m06_l) = { + XC_MGGA_X_M06_L, + XC_EXCHANGE, + "M06-Local functional of Minnesota", + XC_FAMILY_MGGA, + "Y Zhao and DG Truhlar, JCP 125, 194101 (2006)\n" + "Y Zhao and DG Truhlar, Theor. Chem. Account 120, 215 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + mgga_x_m06l_init, + NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_x, +}; + +const XC(func_info_type) XC(func_info_mgga_x_m06_hf) = { + XC_MGGA_X_M06_HF, + XC_EXCHANGE, + "M06-HF functional of Minnesota", + XC_FAMILY_MGGA, + "Y Zhao and DG Truhlar, J. Phys. Chem. A 110, 13126 (2006)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + mgga_x_m06l_init, + NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_x, +}; + +const XC(func_info_type) XC(func_info_mgga_x_m06) = { + XC_MGGA_X_M06, + XC_EXCHANGE, + "M06 functional of Minnesota", + XC_FAMILY_MGGA, + "Y Zhao and DG Truhlar, Theor. Chem. Acc. 120, 215 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + mgga_x_m06l_init, + NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_x, +}; diff --git a/libxc-2.2.0/src/mgga_x_m08.c b/libxc-2.2.0/src/mgga_x_m08.c new file mode 100644 index 000000000..7f5e100aa --- /dev/null +++ b/libxc-2.2.0/src/mgga_x_m08.c @@ -0,0 +1,274 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_X_M08_HX 219 /* M08-HX functional of Minnesota */ +#define XC_MGGA_X_M08_SO 220 /* M08-SO functional of Minnesota */ +#define XC_HYB_MGGA_X_M11 225 /* M11 functional of Minnesota */ +#define XC_MGGA_X_M11_L 226 /* M11-L functional of Minnesota */ + +static const FLOAT a_m08_hx[12] = { + 1.3340172e+00, -9.4751087e+00, -1.2541893e+01, 9.1369974e+00, 3.4717204e+01, 5.8831807e+01, + 7.1369574e+01, 2.3312961e+01, 4.8314679e+00, -6.5044167e+00, -1.4058265e+01, 1.2880570e+01 +}; +static const FLOAT b_m08_hx[12] = { + -8.5631823e-01, 9.2810354e+00, 1.2260749e+01, -5.5189665e+00, -3.5534989e+01, -8.2049996e+01, + -6.8586558e+01, 3.6085694e+01, -9.3740983e+00, -5.9731688e+01, 1.6587868e+01, 1.3993203e+01 +}; + +static const FLOAT a_m08_so[12] = { + -3.4888428e-01, -5.8157416e+00, 3.7550810e+01, 6.3727406e+01, -5.3742313e+01, -9.8595529e+01, + 1.6282216e+01, 1.7513468e+01, -6.7627553e+00, 1.1106658e+01, 1.5663545e+00, 8.7603470e+00 +}; +static const FLOAT b_m08_so[12] = { + 7.8098428e-01, 5.4538178e+00, -3.7853348e+01, -6.2295080e+01, 4.6713254e+01, 8.7321376e+01, + 1.6053446e+01, 2.0126920e+01, -4.0343695e+01, -5.8577565e+01, 2.0890272e+01, 1.0946903e+01 +}; + +static const FLOAT a_m11[12] = { + -0.18399900e+00, -1.39046703e+01, 1.18206837e+01, 3.10098465e+01, -5.19625696e+01, 1.55750312e+01, + -6.94775730e+00, -1.58465014e+02, -1.48447565e+00, 5.51042124e+01, -1.34714184e+01, 0.00000000e+00 +}; +static const FLOAT b_m11[12] = { + 0.75599900e+00, 1.37137944e+01, -1.27998304e+01, -2.93428814e+01, 5.91075674e+01, -2.27604866e+01, + -1.02769340e+01, 1.64752731e+02, 1.85349258e+01, -5.56825639e+01, 7.47980859e+00, 0.00000000e+00 +}; + +static const FLOAT a_m11_l[12] = { + 8.121131e-01, 1.738124e+01, 1.154007e+00, 6.869556e+01, 1.016864e+02, -5.887467e+00, + 4.517409e+01, -2.773149e+00, -2.617211e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00 +}; +static const FLOAT b_m11_l[12] = { + 1.878869e-01, -1.653877e+01, 6.755753e-01, -7.567572e+01, -1.040272e+02, 1.831853e+01, + -5.573352e+01, -3.520210e+00, 3.724276e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00 +}; +static const FLOAT c_m11_l[12] = { + -4.386615e-01, -1.214016e+02, -1.393573e+02, -2.046649e+00, 2.804098e+01, -1.312258e+01, + -6.361819e+00, -8.055758e-01, 3.736551e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 +}; +static const FLOAT d_m11_l[12] = { + 1.438662e+00, 1.209465e+02, 1.328252e+02, 1.296355e+01, 5.854866e+00, -3.378162e+00, + -4.423393e+01, 6.844475e+00, 1.949541e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00 +}; + +typedef struct{ + const FLOAT *a, *b; + int LC; +} mgga_x_m08_params; + + +static void +mgga_x_m08_init(XC(func_type) *p) +{ + mgga_x_m08_params *params; + + assert(p != NULL); + + p->n_func_aux = 2; + p->func_aux = (XC(func_type) **) malloc(2*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + p->func_aux[1] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_GGA_X_PBE, p->nspin); + XC(func_init)(p->func_aux[1], XC_GGA_X_RPBE, p->nspin); + + XC(gga_x_pbe_set_params) (p->func_aux[0], 0.804, 0.21951); + XC(gga_x_rpbe_set_params) (p->func_aux[1], 0.552, 10.0/81.0); + + assert(p->params == NULL); + p->params = malloc(sizeof(mgga_x_m08_params)); + params = (mgga_x_m08_params *) (p->params); + + switch(p->info->number){ + case XC_MGGA_X_M08_HX: + params->a = a_m08_hx; + params->b = b_m08_hx; + params->LC = 0; + break; + case XC_MGGA_X_M08_SO: + params->a = a_m08_so; + params->b = b_m08_so; + params->LC = 0; + break; + case XC_HYB_MGGA_X_M11: + params->a = a_m11; + params->b = b_m11; + params->LC = 1; + p->cam_alpha = 1.0; + p->cam_beta = -(1.0 - 0.428); + p->cam_omega = 0.25; + break; + case XC_MGGA_X_M11_L: + params->a = a_m11_l; + params->b = b_m11_l; + params->LC = 1; + break; + default: + fprintf(stderr, "Internal error in mgga_x_m08\n"); + exit(1); + } +} + + +static void +func(const XC(func_type) *pt, XC(mgga_work_c_t) *r) +{ + const FLOAT sign[2] = {1.0, -1.0}; + mgga_x_m08_params *params; + + int is; + FLOAT ep_f, ep_dfdx, ep_d2fdx2, er_f, er_dfdx, er_d2fdx2; + FLOAT fw1, fw2, fw3, fw4, dfw1dt, dfw2dt, dfw3dt, dfw4dt; + FLOAT cnst_rs, opz, opz13, rss, ex, drssdrs, drssdz, dexdrss, dexdz; + FLOAT a_cnst, f_aa, df_aa; + + assert(pt != NULL && pt->params != NULL); + params = (mgga_x_m08_params *) (pt->params); + + cnst_rs = CBRT(4.0*M_PI/3.0); + + r->f = 0.0; + if(r->order >= 1) + r->dfdrs = r->dfdz = r->dfdxt = r->dfdxs[0] = r->dfdxs[1] = r->dfdts[0] = r->dfdts[1] = 0.0; + + for(is = 0; is < 2; is++){ + opz = 1.0 + sign[is]*r->zeta; + if(opz < pt->info->min_zeta) continue; + + opz13 = CBRT(opz); + rss = r->rs*M_CBRT2/opz13; + + XC(gga_x_pbe_enhance) (pt->func_aux[0], r->order, r->xs[is], &ep_f, &ep_dfdx, &ep_d2fdx2, NULL); + XC(gga_x_rpbe_enhance)(pt->func_aux[1], r->order, r->xs[is], &er_f, &er_dfdx, &er_d2fdx2, NULL); + + XC(mgga_series_w)(r->order, 12, params->a, r->ts[is], &fw1, &dfw1dt); + XC(mgga_series_w)(r->order, 12, params->b, r->ts[is], &fw2, &dfw2dt); + + if(pt->info->number == XC_MGGA_X_M11_L){ + XC(mgga_series_w)(r->order, 12, c_m11_l, r->ts[is], &fw3, &dfw3dt); + XC(mgga_series_w)(r->order, 12, d_m11_l, r->ts[is], &fw4, &dfw4dt); + } + + if(params->LC == 1){ + a_cnst = CBRT(2.0/(9.0*M_PI))*pt->cam_omega/2.0; + XC(lda_x_attenuation_function)(XC_RSF_ERF, r->order, a_cnst*rss, &f_aa, &df_aa, NULL, NULL); + + /* the rest of the SR is evaluated at the HF level */ + if(pt->info->number == XC_HYB_MGGA_X_M11){ + f_aa *= -pt->cam_beta; + df_aa *= -pt->cam_beta; + } + + df_aa *= a_cnst; + }else{ + f_aa = 1.0; + df_aa = 0.0; + } + + ex = -X_FACTOR_C*opz/(2.0*cnst_rs*rss); + r->f += ex*f_aa*(ep_f*fw1 + er_f*fw2); + + if(pt->info->number == XC_MGGA_X_M11_L){ + r->f += ex*(1.0 - f_aa)*(ep_f*fw3 + er_f*fw4); + } + + if(r->order < 1) continue; + + drssdrs = M_CBRT2/opz13; + drssdz = -sign[is]*rss/(3.0*opz); + + dexdrss = -ex/rss; + dexdz = sign[is]*ex/opz; + + r->dfdrs += (dexdrss*f_aa + ex*df_aa)*drssdrs*(ep_f*fw1 + er_f*fw2); + r->dfdz += (dexdz*f_aa + (dexdrss*f_aa + ex*df_aa)*drssdz) *(ep_f*fw1 + er_f*fw2); + r->dfdxs[is] = ex*f_aa*(ep_dfdx*fw1 + er_dfdx*fw2); + r->dfdts[is] = ex*f_aa*(ep_f*dfw1dt + er_f*dfw2dt); + + if(pt->info->number == XC_MGGA_X_M11_L){ + r->dfdrs += (dexdrss*(1.0 - f_aa) - ex*df_aa)*drssdrs*(ep_f*fw3 + er_f*fw4); + r->dfdz += (dexdz*(1.0 - f_aa) + (dexdrss*(1.0 - f_aa) - ex*df_aa)*drssdz) *(ep_f*fw3 + er_f*fw4); + r->dfdxs[is] += ex*(1.0 - f_aa)*(ep_dfdx*fw3 + er_dfdx*fw4); + r->dfdts[is] += ex*(1.0 - f_aa)*(ep_f*dfw3dt + er_f*dfw4dt); + } + + + if(r->order < 2) continue; + } +} + + +#include "work_mgga_c.c" + + +XC(func_info_type) XC(func_info_mgga_x_m08_hx) = { + XC_MGGA_X_M08_HX, + XC_EXCHANGE, + "M08-HX functional of Minnesota", + XC_FAMILY_MGGA, + "Y Zhao and DG Truhlar, J. Chem. Theory Comput. 4, 1849-1868 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_x_m08_init, + NULL, NULL, NULL, + work_mgga_c, +}; + +XC(func_info_type) XC(func_info_mgga_x_m08_so) = { + XC_MGGA_X_M08_SO, + XC_EXCHANGE, + "M08-SO functional of Minnesota", + XC_FAMILY_MGGA, + "Y Zhao and DG Truhlar, J. Chem. Theory Comput. 4, 1849-1868 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_x_m08_init, + NULL, NULL, NULL, + work_mgga_c, +}; + +XC(func_info_type) XC(func_info_hyb_mgga_x_m11) = { + XC_HYB_MGGA_X_M11, + XC_EXCHANGE, + "M11 functional of Minnesota", + XC_FAMILY_MGGA, + "R Peverati, and DG Truhlar, J. Phys. Chem. Lett. 2, 2810 (2011)", + XC_FLAGS_3D | XC_FLAGS_HYB_CAM | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_x_m08_init, + NULL, NULL, NULL, + work_mgga_c, +}; + +XC(func_info_type) XC(func_info_mgga_x_m11_l) = { + XC_MGGA_X_M11_L, + XC_EXCHANGE, + "M11-L functional of Minnesota", + XC_FAMILY_MGGA, + "R Peverati, and DG Truhlar, J. Phys. Chem. Lett. 3, 117 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_x_m08_init, + NULL, NULL, NULL, + work_mgga_c, +}; diff --git a/libxc-2.2.0/src/mgga_x_mk00.c b/libxc-2.2.0/src/mgga_x_mk00.c new file mode 100644 index 000000000..bcc6b7a81 --- /dev/null +++ b/libxc-2.2.0/src/mgga_x_mk00.c @@ -0,0 +1,103 @@ +/* + Copyright (C) 2006-2008 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +/* Local tau approximation */ + +#define XC_MGGA_X_MK00 230 /* Exchange for accurate virtual orbital energies */ +#define XC_MGGA_X_MK00B 243 /* Exchange for accurate virtual orbital energies (v. B) */ + +static void +func(const XC(func_type) *pt, XC(mgga_work_x_t) *r) +{ + FLOAT cnst, den, den2, den3; + + cnst = 3.0*M_PI/X_FACTOR_C; + + den = 2.0*r->t - r->u/4.0; + + if(ABS(den) < pt->info->min_tau){ + r->f = 0.0; + if(r->order >= 1) r->dfdt = r->dfdu = 0.0; + if(r->order >= 2) r->d2fdt2 = r->d2fdtu = r->d2fdu2 = 0.0; + return; + } + + r->f = cnst/den; + + if(r->order < 1) return; + + den2 = den*den; + + r->dfdx = 0.0; + r->dfdt = -2.0*cnst/den2; + r->dfdu = cnst/(4.0*den2); + + if(r->order < 2) return; + + den3 = den2*den; + + r->d2fdx2 = 0.0; + r->d2fdxt = 0.0; + r->d2fdxu = 0.0; + r->d2fdt2 = 8.0*cnst/den3; + r->d2fdtu = -cnst/den3; + r->d2fdu2 = cnst/(8.0*den3); +} + +#include "work_mgga_x.c" + +const XC(func_info_type) XC(func_info_mgga_x_mk00) = { + XC_MGGA_X_MK00, + XC_EXCHANGE, + "Exchange for accurate virtual orbital energies", + XC_FAMILY_MGGA, + "FR Manby and PJ Knowles, J. Chem. Phys. 112, 7002 (2000)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + NULL, NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_x, +}; + + +static void +mgga_x_mk00b_init(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_B88, XC_MGGA_X_MK00}; + static FLOAT funcs_coef[2] = {1.0, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + + XC(gga_x_b88_set_params)(p->func_aux[0], 0.0016, 6.0); +} + +const XC(func_info_type) XC(func_info_mgga_x_mk00b) = { + XC_MGGA_X_MK00B, + XC_EXCHANGE, + "Exchange for accurate virtual orbital energies (v. B)", + XC_FAMILY_MGGA, + "FR Manby and PJ Knowles, J. Chem. Phys. 112, 7002 (2000)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + mgga_x_mk00b_init, + NULL, NULL, NULL, NULL, +}; diff --git a/libxc-2.2.0/src/mgga_x_mn12.c b/libxc-2.2.0/src/mgga_x_mn12.c new file mode 100644 index 000000000..32a29d3e5 --- /dev/null +++ b/libxc-2.2.0/src/mgga_x_mn12.c @@ -0,0 +1,191 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_X_MN12_L 227 /* MN12-L functional from Minnesota */ +#define XC_MGGA_X_MN12_SX 228 /* MN12-SX functional from Minnesota */ + +/* the ordering is +CC000 [ 0], CC001 [ 1], CC002 [ 2], CC003 [ 3], CC004 [ 4], CC005 [ 5] +CC010 [ 6], CC011 [ 7], CC012 [ 8], CC013 [ 9], CC014 [10], +CC020 [11], CC021 [12], CC022 [13], CC023 [14], +CC030 [15], CC031 [16], CC032 [17], +CC100 [18], CC101 [19], CC102 [20], CC103 [21], CC104 [22] +CC110 [23], CC111 [24], CC112 [25], CC113 [26], +CC120 [27], CC121 [28], CC122 [29], +CC200 [30], CC201 [31], CC202 [32], CC203 [33], +CC210 [34], CC211 [35], CC212 [36], +CC300 [37], CC301 [38], CC302 [39] +*/ +static const FLOAT CC_MN12_L[] = + { 6.735981e-01, -2.270598e+00, -2.613712e+00, 3.993609e+00, 4.635575e+00, 1.250676e+00, + 8.444920e-01, -1.301173e+01, -1.777730e+01, -4.627211e+00, 5.976605e+00, + 1.142897e+00, -2.040226e+01, -2.382843e+01, 7.119109e+00, + -2.335726e+01, -1.622633e+01, 1.482732e+01, + 1.449285e+00, 1.020598e+01, 4.407450e+00, -2.008193e+01, -1.253561e+01, + -5.435031e+00, 1.656736e+01, 2.000229e+01, -2.513105e+00, + 9.658436e+00, -3.825281e+00, -2.500000e+01, + -2.070080e+00, -9.951913e+00, 8.731211e-01, 2.210891e+01, + 8.822633e+00, 2.499949e+01, 2.500000e+01, + 6.851693e-01, -7.406948e-02, -6.788000e-01 + }; + +static const FLOAT CC_MN12_SX[] = + { 5.226556e-01, -2.681208e-01, -4.670705e+00, 3.067320e+00, 4.095370e+00, 2.653023e+00, + 5.165969e-01, -2.035442e+01, -9.946472e+00, 2.938637e+00, 1.131100e+01, + 4.752452e+00, -3.061331e+00, -2.523173e+01, 1.710903e+01, + -2.357480e+01, -2.727754e+01, 1.603291e+01, + 1.842503e+00, 1.927120e+00, 1.107987e+01, -1.182087e+01, -1.117768e+01, + -5.821000e+00, 2.266545e+01, 8.246708e+00, -4.778364e+00, + 5.329122e-01, -6.666755e+00, 1.671429e+00, + -3.311409e+00, 3.415913e-01, -6.413076e+00, 1.038584e+01, + 9.026277e+00, 1.929689e+01, 2.669232e+01, + 1.517278e+00, -3.442503e+00, 1.100161e+00 + }; + + +static void +func(const XC(func_type) *pt, XC(mgga_work_c_t) *r) +{ + int is; + const FLOAT *CC, sign[2] = {1.0, -1.0}, omega_x=2.5, gamma_x=0.004; + + FLOAT cnst_rs, opz, opz13, rss, x2; + FLOAT vx, vx2, vx3, ux_d, ux, ux2, ux3, wx_d, wx, wx2, wx3, wx4, wx5; + FLOAT pol1, pol2, pol3, pol4, pol5, pol6, pol7, pol8, pol9, pol10; + FLOAT ex, FMN12; + + FLOAT drssdrs, drssdz, dvxdrss, duxdxs, dwxdts; + FLOAT dpol1, dpol2, dpol3, dpol4, dpol5, dpol6, dpol7, dpol8, dpol9, dpol10; + FLOAT dexdz, dexdrss, dFMN12dwx, dFMN12dux, dFMN12dvx; + + CC = (pt->info->number == XC_MGGA_X_MN12_L) ? CC_MN12_L : CC_MN12_SX; + cnst_rs = CBRT(4.0*M_PI/3.0); + + r->f = 0.0; + if(r->order >= 1) + r->dfdrs = r->dfdz = r->dfdxt = r->dfdxs[0] = r->dfdxs[1] = r->dfdts[0] = r->dfdts[1] = 0.0; + + /* now the spin-resolved part */ + for(is = 0; is < 2; is++){ + opz = 1.0 + sign[is]*r->zeta; + if(opz < pt->info->min_zeta) continue; + + opz13 = CBRT(opz); + rss = r->rs*M_CBRT2/opz13; + x2 = r->xs[is]*r->xs[is]; + + vx = 1.0/(1.0 + (cnst_rs/omega_x)*rss); + + ux_d = 1.0/(1.0 + gamma_x*x2); + ux = gamma_x*x2*ux_d; + + wx_d = 1.0/(K_FACTOR_C + r->ts[is]); + wx = (K_FACTOR_C - r->ts[is])*wx_d; + + vx2 = vx*vx; vx3 = vx2*vx; + ux2 = ux*ux; ux3 = ux2*ux; + wx2 = wx*wx; wx3 = wx2*wx; wx4 = wx3*wx; wx5 = wx4*wx; + + pol1 = CC[ 0] + CC[ 1]*wx + CC[ 2]*wx2 + CC[ 3]*wx3 + CC[ 4]*wx4 + CC[ 5]*wx5; + pol2 = CC[ 6] + CC[ 7]*wx + CC[ 8]*wx2 + CC[ 9]*wx3 + CC[10]*wx4; + pol3 = CC[11] + CC[12]*wx + CC[13]*wx2 + CC[14]*wx3; + pol4 = CC[15] + CC[16]*wx + CC[17]*wx2; + pol5 = CC[18] + CC[19]*wx + CC[20]*wx2 + CC[21]*wx3 + CC[22]*wx4; + pol6 = CC[23] + CC[24]*wx + CC[25]*wx2 + CC[26]*wx3; + pol7 = CC[27] + CC[28]*wx + CC[29]*wx2; + pol8 = CC[30] + CC[31]*wx + CC[32]*wx2 + CC[33]*wx3; + pol9 = CC[34] + CC[35]*wx + CC[36]*wx2; + pol10 = CC[37] + CC[38]*wx + CC[39]*wx2; + + FMN12 = pol1 + ux*pol2 + ux2*pol3 + ux3*pol4 + + vx*pol5 + ux*vx*pol6 + ux2*vx*pol7 + vx2*pol8 + ux*vx2*pol9 + vx3*pol10; + + ex = -X_FACTOR_C*opz/(2.0*cnst_rs*rss); + r->f += ex*FMN12; + + if(r->order < 1) continue; + + drssdrs = M_CBRT2/opz13; + drssdz = -sign[is]*rss/(3.0*opz); + + dvxdrss = -(cnst_rs/omega_x)*vx*vx; + duxdxs = 2.0*gamma_x*r->xs[is]*ux_d*ux_d; + dwxdts = -2.0*K_FACTOR_C*wx_d*wx_d; + + dpol1 = CC[ 1] + 2.0*CC[ 2]*wx + 3.0*CC[ 3]*wx2 + 4.0*CC[ 4]*wx3 + 5.0*CC[ 5]*wx4; + dpol2 = CC[ 7] + 2.0*CC[ 8]*wx + 3.0*CC[ 9]*wx2 + 4.0*CC[10]*wx3; + dpol3 = CC[12] + 2.0*CC[13]*wx + 3.0*CC[14]*wx2; + dpol4 = CC[16] + 2.0*CC[17]*wx; + dpol5 = CC[19] + 2.0*CC[20]*wx + 3.0*CC[21]*wx2 + 4.0*CC[22]*wx3; + dpol6 = CC[24] + 2.0*CC[25]*wx + 3.0*CC[26]*wx2; + dpol7 = CC[28] + 2.0*CC[29]*wx; + dpol8 = CC[31] + 2.0*CC[32]*wx + 3.0*CC[33]*wx2; + dpol9 = CC[35] + 2.0*CC[36]*wx; + dpol10 = CC[38] + 2.0*CC[39]*wx; + + dFMN12dwx = dpol1 + ux*dpol2 + ux2*dpol3 + ux3*dpol4 + + vx*dpol5 + ux*vx*dpol6 + ux2*vx*dpol7 + vx2*dpol8 + ux*vx2*dpol9 + vx3*dpol10; + dFMN12dux = pol2 + 2.0*ux*pol3 + 3.0*ux2*pol4 + vx*pol6 + 2.0*ux*vx*pol7 + vx2*pol9; + dFMN12dvx = pol5 + ux*pol6 + ux2*pol7 + 2.0*vx*pol8 + 2.0*ux*vx*pol9 + 3.0*vx2*pol10; + + dexdrss = -ex/rss; + dexdz = sign[is]*ex/opz; + + r->dfdrs += (dexdrss*FMN12 + ex*dFMN12dvx*dvxdrss)*drssdrs; + r->dfdz += dexdz*FMN12 + (dexdrss*FMN12 + ex*dFMN12dvx*dvxdrss)*drssdz; + r->dfdxs[is] = ex*dFMN12dux*duxdxs; + r->dfdts[is] = ex*dFMN12dwx*dwxdts; + } +} + + +#include "work_mgga_c.c" + + +XC(func_info_type) XC(func_info_mgga_x_mn12_l) = { + XC_MGGA_X_MN12_L, + XC_EXCHANGE, + "MN12-L functional of Minnesota", + XC_FAMILY_MGGA, + "R Peverati and DG Truhlar, Phys. Chem. Chem. Phys. 14, 13171-13174 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + NULL, + NULL, NULL, NULL, + work_mgga_c, +}; + +XC(func_info_type) XC(func_info_mgga_x_mn12_sx) = { + XC_MGGA_X_MN12_SX, + XC_EXCHANGE, + "MN12-SX functional of Minnesota", + XC_FAMILY_MGGA, + "R Peverati and DG Truhlar, Phys. Chem. Chem. Phys. 14, accepted (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + NULL, + NULL, NULL, NULL, + work_mgga_c, +}; + diff --git a/libxc-2.2.0/src/mgga_x_ms.c b/libxc-2.2.0/src/mgga_x_ms.c new file mode 100644 index 000000000..8eadffd5c --- /dev/null +++ b/libxc-2.2.0/src/mgga_x_ms.c @@ -0,0 +1,226 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_X_MS0 221 /* MS exchange of Sun, Xiao, and Ruzsinszky */ +#define XC_MGGA_X_MS1 222 /* MS1 exchange of Sun, et al */ +#define XC_MGGA_X_MS2 223 /* MS2 exchange of Sun, et al */ +#define XC_MGGA_X_MS2H 224 /* MS2 hybrid exchange of Sun, et al */ + +typedef struct{ + FLOAT kappa, c, b; +} mgga_x_ms_params; + +static void +mgga_x_ms_init(XC(func_type) *p) +{ + mgga_x_ms_params *params; + + assert(p!=NULL && p->params == NULL); + p->params = malloc(sizeof(mgga_x_ms_params)); + params = (mgga_x_ms_params *)p->params; + + /* value of beta in standard Becke 88 functional */ + switch(p->info->number){ + case XC_MGGA_X_MS0: + params->kappa = 0.29; + params->c = 0.28771; + params->b = 1.0; + break; + case XC_MGGA_X_MS1: + params->kappa = 0.404; + params->c = 0.18150; + params->b = 1.0; + break; + case XC_MGGA_X_MS2: + params->kappa = 0.504; + params->c = 0.14601; + params->b = 4.0; + break; + case XC_MGGA_X_MS2H: + p->cam_alpha = 0.09; + params->kappa = 0.504; + params->c = 0.14601; + params->b = 4.0; + break; + default: + fprintf(stderr, "Internal error in mgga_x_ms\n"); + exit(1); + } +} + + +static void +func_fa(FLOAT b, int order, FLOAT a, + FLOAT *f, FLOAT *dfda, FLOAT *d2fda2) +{ + FLOAT a2, a4, a6, aux, num, den, dnum, dden, d2num, d2den; + + a2 = a*a; + a4 = a2*a2; + a6 = a2*a4; + + aux = 1.0 - a2; + + num = aux*aux*aux; + den = 1.0 + a*a2 + b*a6; + + *f = num/den; + + if(order < 1) return; /* And now the derivatives */ + + dnum = -6.0*a*aux*aux; + dden = 3.0*a2 + 6.0*b*a*a4; + + *dfda = (dnum*den - num*dden)/(den*den); + + if(order < 2) return; + + d2num = -6.0*aux*(1.0 - 5.0*a2); + d2den = 6.0*a + 30.0*b*a4; + + *d2fda2 = ((d2num*den - num*d2den)*den - 2.0*dden*(dnum*den - dden*num))/(den*den*den); +} + + +static void +func_f(FLOAT kappa, FLOAT c, int order, FLOAT p, + FLOAT *f, FLOAT *dfdp, FLOAT *d2fdp2) +{ + FLOAT mu = 10.0/81.0; + FLOAT den, dden; + + den = kappa + mu*p + c; + + *f = 1.0 + kappa*(1.0 - kappa/den); + + if(order < 1) return; /* And now the derivatives */ + + dden = mu; + *dfdp = kappa*kappa*dden/(den*den); + + if(order < 2) return; + + *d2fdp2 = -2.0*kappa*kappa*dden*dden/(den*den*den); +} + + +static void +func(const XC(func_type) *pt, XC(mgga_work_x_t) *r) +{ + FLOAT ss; + FLOAT alpha, dalphadt, dalphadx, d2alphadx2, fa, dfada, d2fada2; + FLOAT pp, dpdx, d2pdx2, f0, df0dp, d2f0dp2, f1, df1dp, d2f1dp2; + mgga_x_ms_params *params; + + params = (mgga_x_ms_params *)pt->params; + assert(params != NULL); + + ss = X2S*r->x; + pp = ss*ss; + + alpha = (r->t - r->x*r->x/8.0)/K_FACTOR_C; + + func_fa(params->b, r->order, alpha, &fa, &dfada, &d2fada2); + func_f (params->kappa, params->c, r->order, pp, &f0, &df0dp, &d2f0dp2); + func_f (params->kappa, 0.0, r->order, pp, &f1, &df1dp, &d2f1dp2); + + r->f = f1 + fa*(f0 - f1); + + if(r->order < 1) return; + + dpdx = 2.0*ss*X2S; + dalphadx = -2.0*r->x/(8.0*K_FACTOR_C); + dalphadt = 1.0/K_FACTOR_C; + + r->dfdx = (df1dp + fa*(df0dp - df1dp))*dpdx + (f0 - f1)*dfada*dalphadx; + r->dfdt = (f0 - f1)*dfada*dalphadt; + r->dfdu = 0.0; + + if(r->order < 2) return; + + d2pdx2 = 2.0*X2S*X2S; + d2alphadx2 = -2.0/(8.0*K_FACTOR_C); + + r->d2fdx2 = (d2f1dp2 + fa*(d2f0dp2 - d2f1dp2))*dpdx*dpdx + (df1dp + fa*(df0dp - df1dp))*d2pdx2 + + 2.0*(df0dp - df1dp)*dpdx*dfada*dalphadx + + (f0 - f1)*(d2fada2*dalphadx*dalphadx + dfada*d2alphadx2); + r->d2fdt2 = (f0 - f1)*d2fada2*dalphadt*dalphadt; + r->d2fdxt = (f0 - f1)*d2fada2*dalphadt*dalphadx; +} + + +#include "work_mgga_x.c" + + +XC(func_info_type) XC(func_info_mgga_x_ms0) = { + XC_MGGA_X_MS0, + XC_EXCHANGE, + "MS exchange of Sun, Xiao, and Ruzsinszky", + XC_FAMILY_MGGA, + "J Sun, B Xiao, and A Ruzsinszky, J. Chem. Phys. 137, 051101 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_x_ms_init, + NULL, NULL, NULL, + work_mgga_x, +}; + +XC(func_info_type) XC(func_info_mgga_x_ms1) = { + XC_MGGA_X_MS1, + XC_EXCHANGE, + "MS1 exchange of Sun, et al", + XC_FAMILY_MGGA, + "J Sun, R Haunschild, B Xiao, IW Bulik, GE Scuseria, JP Perdew, J. Chem. Phys. 138, 044113 (2013)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_x_ms_init, + NULL, NULL, NULL, + work_mgga_x, +}; + +XC(func_info_type) XC(func_info_mgga_x_ms2) = { + XC_MGGA_X_MS2, + XC_EXCHANGE, + "MS2 exchange of Sun, et al", + XC_FAMILY_MGGA, + "J Sun, R Haunschild, B Xiao, IW Bulik, GE Scuseria, JP Perdew, J. Chem. Phys. 138, 044113 (2013)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_x_ms_init, + NULL, NULL, NULL, + work_mgga_x, +}; + +XC(func_info_type) XC(func_info_mgga_x_ms2h) = { + XC_MGGA_X_MS2H, + XC_EXCHANGE, + "MS2 hybrid exchange of Sun, et al", + XC_FAMILY_MGGA, + "J Sun, R Haunschild, B Xiao, IW Bulik, GE Scuseria, JP Perdew, J. Chem. Phys. 138, 044113 (2013)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_x_ms_init, + NULL, NULL, NULL, + work_mgga_x, +}; diff --git a/libxc-2.2.0/src/mgga_x_pkzb.c b/libxc-2.2.0/src/mgga_x_pkzb.c new file mode 100644 index 000000000..a94e416ac --- /dev/null +++ b/libxc-2.2.0/src/mgga_x_pkzb.c @@ -0,0 +1,94 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_X_PKZB 213 /* Perdew, Kurth, Zupan, and Blaha */ + +static const FLOAT kappa = 0.804; + +static void Eq_14(FLOAT pp, FLOAT qt, int order, FLOAT *xx, FLOAT *dxxdpp, FLOAT *dxxdqt) +{ + static const FLOAT + a1 = 10.0/81.0, + a2 = 146.0/2025.0, + a3 = -73.0/405.0, + a4 = 0.131957187845257783631757384393; /* DD + 100.0/(81.0*81.0*kappa); */ + + *xx = a1*pp + a2*qt*qt + a3*qt*pp + a4*pp*pp; + + if(order < 1) return; + + *dxxdpp = a1 + a3*qt + 2.0*a4*pp; + *dxxdqt = 2.0*a2*qt + a3*pp; +} + +static void +func(const XC(func_type) *pt, XC(mgga_work_x_t) *r) +{ + FLOAT x2s2, pp, rr, qt, xx, dxxdpp, dxxdqt; + FLOAT kpxx, k2, dqtdrr, dqtdpp, dfdxx; + + x2s2 = X2S*X2S; + k2 = kappa*kappa; + + pp = x2s2*r->x*r->x; + rr = x2s2*r->t; + + qt = 6.0*rr - 9.0/20.0 - pp/12.0; + + Eq_14(pp, qt, r->order, &xx, &dxxdpp, &dxxdqt); + + kpxx = kappa + xx; + r->f = 1.0 + kappa - k2/kpxx; + + if(r->order < 1) return; + + dqtdrr = 6.0; + dqtdpp = -1.0/12.0; + + dfdxx = k2/(kpxx*kpxx); + + r->dfdx = dfdxx*(dxxdpp + dxxdqt*dqtdpp)*2.0*x2s2*r->x; + r->dfdt = dfdxx*dxxdqt*dqtdrr*x2s2; + r->dfdu = 0.0; + + if(r->order < 2) return; + +} + + +#include "work_mgga_x.c" + + +XC(func_info_type) XC(func_info_mgga_x_pkzb) = { + XC_MGGA_X_PKZB, + XC_EXCHANGE, + "Perdew, Kurth, Zupan, and Blaha", + XC_FAMILY_MGGA, + "JP Perdew, S Kurth, A Zupan, and P. Blaha, Phys. Rev. Lett. 82, 2544-2547 (1999)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + NULL, + NULL, NULL, NULL, + work_mgga_x, +}; diff --git a/libxc-2.2.0/src/mgga_x_tau_hcth.c b/libxc-2.2.0/src/mgga_x_tau_hcth.c new file mode 100644 index 000000000..4c526822b --- /dev/null +++ b/libxc-2.2.0/src/mgga_x_tau_hcth.c @@ -0,0 +1,103 @@ +/* + Copyright (C) 2008 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_X_TAU_HCTH 205 /* tau-HCTH from Boese and Handy */ + +/* Eq. (22) */ +static void +eq_22(int order, FLOAT t, FLOAT *fx, FLOAT *dfxdt) +{ + FLOAT CFermi = (3.0/5.0) * POW(6.0*M_PI*M_PI, 2.0/3.0); + + FLOAT w, w2; + + w = (CFermi - t)/(CFermi + t); + w2 = w*w; + + *fx = w*(1.0 - 2.0*w2 + w2*w2); + + if(order < 1) return; + + *dfxdt = 1.0 - 6.0*w2 + 5.0*w2*w2; + *dfxdt *= -2.0*CFermi/((CFermi + t)*(CFermi + t)); +} + + +static void +eq_29(int order, FLOAT x, FLOAT *ux, FLOAT *duxdx) +{ + static FLOAT gamX = 0.004; + FLOAT x2, denom; + + x2 = x*x; + denom = 1.0 + gamX*x2; + + *ux = gamX*x2/denom; + + if(order < 1) return; + + *duxdx = 2.0*gamX*x/(denom*denom); +} + +static void +func(const XC(func_type) *pt, XC(mgga_work_x_t) *r) +{ + const FLOAT cx_local [4] = {1.10734, -1.0534, 6.3491, -2.5531}; + const FLOAT cx_nlocal[4] = {0.00110, -0.3041, 6.9543, -0.7235}; + + FLOAT ux, ux2, gxl, gxnl, fx; + FLOAT duxdx, dgxldu, dgxnldu, dfxdt; + + eq_29(r->order, r->x, &ux, &duxdx); + eq_22(r->order, 2.0*r->t, &fx, &dfxdt); + + ux2 = ux*ux; + gxl = cx_local [0] + ux*(cx_local [1] + cx_local [2]*ux + cx_local [3]*ux2); + gxnl = cx_nlocal[0] + ux*(cx_nlocal[1] + cx_nlocal[2]*ux + cx_nlocal[3]*ux2); + + r->f = gxl + gxnl*fx; + + if(r->order < 1) return; + + dgxldu = cx_local [1] + 2.0*cx_local [2]*ux + 3.0*cx_local [3]*ux2; + dgxnldu = cx_nlocal[1] + 2.0*cx_nlocal[2]*ux + 3.0*cx_nlocal[3]*ux2; + + r->dfdx = (dgxldu + dgxnldu*fx)*duxdx; + r->dfdt = 2.0*gxnl*dfxdt; +} + +#include "work_mgga_x.c" + +const XC(func_info_type) XC(func_info_mgga_x_tau_hcth) = { + XC_MGGA_X_TAU_HCTH, + XC_EXCHANGE, + "tau-HCTH", + XC_FAMILY_MGGA, + "AD Boese and NC Handy, JCP 116, 9559 (2002)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + NULL, NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_x, +}; diff --git a/libxc-2.2.0/src/mgga_x_tpss.c b/libxc-2.2.0/src/mgga_x_tpss.c new file mode 100644 index 000000000..9c15aba9f --- /dev/null +++ b/libxc-2.2.0/src/mgga_x_tpss.c @@ -0,0 +1,362 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +/************************************************************************ + Implements Perdew, Tao, Staroverov & Scuseria + meta-Generalized Gradient Approximation. + + Exchange part +************************************************************************/ + +#define XC_MGGA_X_TPSS 202 /* Perdew, Tao, Staroverov & Scuseria exchange */ +#define XC_MGGA_X_MODTPSS 245 /* Modified Perdew, Tao, Staroverov & Scuseria exchange */ +#define XC_MGGA_X_REVTPSS 212 /* revised Perdew, Tao, Staroverov & Scuseria exchange */ +#define XC_MGGA_X_BLOC 244 /* functional with balanced localization */ + +typedef struct{ + int func; + FLOAT b, c, e, kappa, mu; +} mgga_x_tpss_params; + +static void +mgga_x_tpss_init(XC(func_type) *p) +{ + mgga_x_tpss_params *params; + + assert(p!=NULL && p->params == NULL); + p->params = malloc(sizeof(mgga_x_tpss_params)); + params = (mgga_x_tpss_params *)p->params; + + /* value of beta in standard Becke 88 functional */ + switch(p->info->number){ + case XC_MGGA_X_TPSS: + params->func = p->func = 0; + XC(mgga_x_tpss_set_params)(p, 0.40, 1.59096, 1.537, 0.804, 0.21951); + break; + case XC_MGGA_X_MODTPSS: + params->func = p->func = 0; /* this has exactly the same form as TPSS */ + XC(mgga_x_tpss_set_params)(p, 0.40, 1.39660, 1.38, 0.804, 0.250); + break; + case XC_MGGA_X_REVTPSS: + params->func = p->func = 1; + XC(mgga_x_tpss_set_params)(p, 0.40, 2.35203946, 2.16769874, 0.804, 0.14); + break; + case XC_MGGA_X_BLOC: + params->func = p->func = 2; + XC(mgga_x_tpss_set_params)(p, 0.40, 1.59096, 1.537, 0.804, 0.21951); + break; + default: + fprintf(stderr, "Internal error in mgga_x_tpss\n"); + exit(1); + } +} + + +void +XC(mgga_x_tpss_set_params)(XC(func_type) *p, FLOAT b, FLOAT c, FLOAT e, FLOAT kappa, FLOAT mu) +{ + mgga_x_tpss_params *params; + + assert(p != NULL && p->params != NULL); + params = (mgga_x_tpss_params *) (p->params); + + params->b = b; + params->c = c; + params->e = e; + params->kappa = kappa; + params->mu = mu; +} + + +/* This is Equation (7) from the paper and its derivatives */ +static void +x_tpss_7(mgga_x_tpss_params *params, int order, FLOAT p, FLOAT z, + FLOAT *qb, FLOAT *dqbdp, FLOAT *dqbdz, FLOAT *d2qbdp2, FLOAT *d2qbdpz, FLOAT *d2qbdz2) +{ + FLOAT a1, a2, a2_3, a2_5, h1, h2; + FLOAT alpha, dalphadp, dalphadz, dqbdalpha; + FLOAT d2alphadpz, d2alphadz2, dqb2dalpha2; + + /* Eq. (8) */ + a1 = (1.0 - z)/z; + h1 = 5.0/3.0; + + alpha = h1*a1*p; + + /* Eq. (7) */ + a2 = SQRT(1.0 + params->b*alpha*(alpha - 1.0)); + h2 = 9.0/20.0; + + *qb = h2*(alpha - 1.0)/a2 + 2.0*p/3.0; + + if(order < 1) return; /* And now the derivatives */ + + /* Eq. (8) */ + dalphadp = h1*a1; + dalphadz = -h1*p/(z*z); + + a2_3 = a2*a2*a2; + dqbdalpha = h2*(1.0 + 0.5*params->b*(alpha - 1.0))/a2_3; + + *dqbdp = dqbdalpha*dalphadp + 2.0/3.0; + *dqbdz = dqbdalpha*dalphadz; + + if(order < 2) return; + + /* Eq. (8) */ + d2alphadpz = -h1/(z*z); + d2alphadz2 = -2.0*dalphadz/z; + + a2_5 = a2*a2*a2_3; + dqb2dalpha2 = -h2*params->b/(4.0*a2_5)* + (-8.0 + 3.0*params->b + 12.0*alpha - 7.0*alpha*params->b + 4*alpha*alpha*params->b); + + *d2qbdp2 = dqb2dalpha2*dalphadp*dalphadp; + *d2qbdpz = dqb2dalpha2*dalphadp*dalphadz + dqbdalpha*d2alphadpz; + *d2qbdz2 = dqb2dalpha2*dalphadz*dalphadz + dqbdalpha*d2alphadz2; +} + + +/* Equation (10) in all its glory */ +static +void x_tpss_10(mgga_x_tpss_params *params, int order, FLOAT p, FLOAT z, + FLOAT *x, FLOAT *dxdp, FLOAT *dxdz, FLOAT *d2xdp2, FLOAT *d2xdpz, FLOAT *d2xdz2) +{ + static FLOAT BLOC_a = 4.0, BLOC_b = -3.3; + + FLOAT x1, dxdp1, dxdz1, d2xdp1, d2xdpz1, d2xdz1, zlogz, ff, dff, zff; + FLOAT aux1, aux2, z2, p2; + FLOAT qb, dqbdp, dqbdz, d2qbdp2, d2qbdpz, d2qbdz2; + + FLOAT a1, a1_2, a2, a3, h3, a4, a5, a6, d1, d1_2; + + /* Equation 7 */ + dqbdp = dqbdz = 0.0; + x_tpss_7(params, order, p, z, &qb, &dqbdp, &dqbdz, &d2qbdp2, &d2qbdpz, &d2qbdz2); + + z2 = z*z; + p2 = p*p; + aux1 = 10.0/81.0; + aux2 = 9.0/25.0; + + /* first we handle the numerator */ + x1 = 0.0; + + a1 = 1.0 + z2; /* first term */ + a1_2 = a1*a1; + + switch(params->func){ + case 0: /* TPSS */ + ff = 2.0; break; + case 1: /* revTPSS */ + ff = 3.0; break; + case 2: /* BLOC */ + ff = BLOC_a + BLOC_b * z; + break; + } + + zff = POW(z, ff); + + x1 += (aux1 + params->c*zff/a1_2)*p; + + a2 = 146.0/2025.0; /* second term */ + x1 += a2*qb*qb; + + a3 = SQRT(0.5*(aux2*z2 + p2)); /* third term */ + h3 = -73.0/405; + x1 += h3*qb*a3; + + a4 = aux1*aux1/params->kappa; /* fourth term */ + x1 += a4*p2; + + a5 = 2.0*SQRT(params->e)*aux1*aux2; /* fifth term */ + x1 += a5*z2; + + a6 = params->e*params->mu; /* sixth term */ + x1 += a6*p*p2; + + d1 = 1.0 + SQRT(params->e)*p; /* denominator */ + d1_2 = d1*d1; + *x = x1/d1_2; + + if(order < 1) return; /* the derivatives */ + + dxdp1 = dxdz1 = 0.0; + + dff = (params->func != 2) ? 0.0 : BLOC_b; + zlogz = z*LOG(z)*dff; + + dxdp1 += aux1 + params->c*zff/a1_2; /* first term */ + dxdz1 += params->c*p*zff*(zlogz*a1 + a1*ff - 4.0*z2)/(z*a1*a1_2); + + dxdp1 += 2.0*a2*qb*dqbdp; /* second term */ + dxdz1 += 2.0*a2*qb*dqbdz; + + dxdp1 += h3*(a3*dqbdp + 0.5*qb*p/a3); /* third term */ + dxdz1 += h3*(a3*dqbdz + 0.5*qb*aux2*z/a3); + + dxdp1 += a4*2.0*p; /* fourth term */ + + dxdz1 += a5*2.0*z; /* fifth term */ + + dxdp1 += a6*3.0*p2; /* sixth term */ + + *dxdp = (dxdp1*d1 - 2.0*SQRT(params->e)*x1)/(d1*d1_2); /* denominator */ + *dxdz = dxdz1/d1_2; + + if(order < 2) return; + + d2xdp1 = d2xdz1 = d2xdpz1 = 0.0; + + d2xdpz1+= params->c*zff*(zlogz*a1 + a1*ff - 4.0*z2)/(z*a1*a1_2); + d2xdz1 += params->c*p*zff/(a1_2*a1_2) * + (24.0*z2 - 4.0*a1*(2.0*zlogz + 2.0*ff + 1.0) + a1_2/z2 * (2.0*dff*z - ff + (zlogz + ff)*(zlogz + ff))); + + d2xdp1 += 2.0*a2*(dqbdp*dqbdp + qb*d2qbdp2); /* second term */ + d2xdpz1+= 2.0*a2*(dqbdp*dqbdz + qb*d2qbdpz); + d2xdz1 += 2.0*a2*(dqbdz*dqbdz + qb*d2qbdz2); + + /* third term */ + d2xdp1 += h3*( aux2*z2*qb + (p2 + aux2*z2)*(2.0*p*dqbdp + (p2 + aux2*z2)*d2qbdp2))/(4.0*a3*a3*a3); + d2xdpz1+= h3*(-aux2*p*z*qb + (p2 + aux2*z2)*(aux2*z*dqbdp + p*dqbdz + (p2 + aux2*z2)*d2qbdpz))/(4.0*a3*a3*a3); + d2xdz1 += h3*( aux2*p2*qb + (p2 + aux2*z2)*(2.0*aux2*z*dqbdz + (p2 + aux2*z2)*d2qbdz2))/(4.0*a3*a3*a3); + + d2xdp1 += a4*2.0; /* fourth term */ + + d2xdz1 += a5*2.0; /* fifth term */ + + d2xdp1 += a6*6.0*p; /* sixth term */ + + *d2xdp2 = (6.0*params->e*x1 + d1*(-4.0*SQRT(params->e)*dxdp1 + d1*d2xdp1))/(d1_2*d1_2); + *d2xdpz = (d2xdpz1*d1 - 2.0*SQRT(params->e)*dxdz1)/(d1*d1_2); + *d2xdz2 = d2xdz1/d1_2; +} + + +static void +func(const XC(func_type) *pt, XC(mgga_work_x_t) *r) +{ + FLOAT ss, pp, xx, a1, a1_2, zz; + FLOAT dxxdp, dxxdz, d2xxdp2, d2xxdpz, d2xxdz2; + FLOAT dpdx, dzdx, dzdt, d2pdx2, d2zdx2, d2zdxt, d2zdt2; + mgga_x_tpss_params *params; + + params = (mgga_x_tpss_params *)pt->params; + + ss = X2S*r->x; + pp = ss*ss; + + zz = r->x*r->x/(8.0*r->t); + + /* Eq. 10 */ + x_tpss_10(params, r->order, pp, zz, &xx, &dxxdp, &dxxdz, &d2xxdp2, &d2xxdpz, &d2xxdz2); + + /* Eq. (5) */ + a1 = params->kappa/(params->kappa + xx); + a1_2 = a1*a1; + + r->f = 1.0 + params->kappa*(1.0 - a1); + + if(r->order < 1) return; + + dpdx = 2.0*ss*X2S; + dzdx = r->x/(4.0*r->t); + dzdt = -zz/r->t; + + r->dfdx = a1_2*(dxxdp*dpdx + dxxdz*dzdx); + r->dfdt = a1_2*dxxdz*dzdt; + r->dfdu = 0.0; + + if(r->order < 2) return; + + d2pdx2 = 2.0*X2S*X2S; + d2zdx2 = 1.0/(4.0*r->t); + d2zdxt = -dzdx/r->t; + d2zdt2 = -2.0*dzdt/r->t; + + r->d2fdx2 = -2.0*(r->dfdx)*(r->dfdx)/(params->kappa*a1) + + a1_2*(d2xxdp2*dpdx*dpdx + 2.0*d2xxdpz*dpdx*dzdx + dxxdp*d2pdx2 + d2xxdz2*dzdx*dzdx + dxxdz*d2zdx2); + r->d2fdt2 = -2.0*(r->dfdt)*(r->dfdt)/(params->kappa*a1) + + a1_2*(d2xxdz2*dzdt*dzdt + dxxdz*d2zdt2); + r->d2fdxt = -2.0*a1*(r->dfdx)*dxxdz*dzdt/params->kappa + + a1_2*(d2xxdpz*dpdx*dzdt + d2xxdz2*dzdx*dzdt + dxxdz*d2zdxt); +} + + +#include "work_mgga_x.c" + + +XC(func_info_type) XC(func_info_mgga_x_tpss) = { + XC_MGGA_X_TPSS, + XC_EXCHANGE, + "Tao, Perdew, Staroverov & Scuseria", + XC_FAMILY_MGGA, + "J Tao, JP Perdew, VN Staroverov, and G Scuseria, Phys. Rev. Lett. 91, 146401 (2003)\n" + "JP Perdew, J Tao, VN Staroverov, and G Scuseria, J. Chem. Phys. 120, 6898 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_x_tpss_init, + NULL, NULL, NULL, + work_mgga_x, +}; + +XC(func_info_type) XC(func_info_mgga_x_modtpss) = { + XC_MGGA_X_MODTPSS, + XC_EXCHANGE, + "Modified Tao, Perdew, Staroverov & Scuseria", + XC_FAMILY_MGGA, + "JP Perdew, A Ruzsinszky, J Tao, GI Csonka, and GE Scuseria, Phys. Rev. A 76, 042506 (2007)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_x_tpss_init, + NULL, NULL, NULL, + work_mgga_x, +}; + +XC(func_info_type) XC(func_info_mgga_x_revtpss) = { + XC_MGGA_X_REVTPSS, + XC_EXCHANGE, + "revised Tao, Perdew, Staroverov & Scuseria", + XC_FAMILY_MGGA, + "JP Perdew, A Ruzsinszky, GI Csonka, LA Constantin, and J Sun, Phys. Rev. Lett. 103, 026403 (2009)\n" + "JP Perdew, A Ruzsinszky, GI Csonka, LA Constantin, and J Sun, Phys. Rev. Lett. 106, 179902(E) (2011)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_x_tpss_init, + NULL, NULL, NULL, + work_mgga_x, +}; + +XC(func_info_type) XC(func_info_mgga_x_bloc) = { + XC_MGGA_X_BLOC, + XC_EXCHANGE, + "functional with balanced localization", + XC_FAMILY_MGGA, + "LA Constantin, E Fabiano, F Della Sala, J. Chem. Theory Comput. 9, 2256 (2013)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_x_tpss_init, + NULL, NULL, NULL, + work_mgga_x, +}; diff --git a/libxc-2.2.0/src/mgga_xc_otpss_d.c b/libxc-2.2.0/src/mgga_xc_otpss_d.c new file mode 100644 index 000000000..1ef385ddf --- /dev/null +++ b/libxc-2.2.0/src/mgga_xc_otpss_d.c @@ -0,0 +1,47 @@ +/* + Copyright (C) 2006-2013 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_MGGA_XC_OTPSS_D 64 /* oTPSS_D functional of Goerigk and Grimme */ + +static void +mgga_xc_otpss_d_init(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_MGGA_X_TPSS, XC_MGGA_C_TPSS}; + static FLOAT funcs_coef[2] = {1.0, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + XC(mgga_x_tpss_set_params)(p->func_aux[0], 3.43, 0.75896, 0.165, 0.778, 0.41567); + XC(mgga_c_pkzb_set_params)(p->func_aux[1], 0.08861, 0.7, 0.59, 0.9269, 0.6225, 2.1540); +} + +const XC(func_info_type) XC(func_info_mgga_xc_otpss_d) = { + XC_MGGA_XC_OTPSS_D, + XC_EXCHANGE_CORRELATION, + "oTPSS-D functional of Goerigk and Grimme", + XC_FAMILY_MGGA, + "L Goerigk and S Grimme, J. Chem. Theory Comput. 6, 107-126 (2010)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + mgga_xc_otpss_d_init, + NULL, NULL, NULL, NULL +}; diff --git a/libxc-2.2.0/src/mix_func.c b/libxc-2.2.0/src/mix_func.c new file mode 100644 index 000000000..72f452da5 --- /dev/null +++ b/libxc-2.2.0/src/mix_func.c @@ -0,0 +1,157 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define is_mgga(id) ((id) == XC_FAMILY_MGGA || (id) == XC_FAMILY_HYB_MGGA) +#define is_gga(id) ((id) == XC_FAMILY_GGA || (id) == XC_FAMILY_HYB_GGA || is_mgga(id)) +#define is_lda(id) ((id) == XC_FAMILY_LDA || is_gga(is)) +#define safe_free(pt) if(pt != NULL) free(pt) + +void XC(mix_func) + (const XC(func_type) *func, int np, + const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl, const FLOAT *tau, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, FLOAT *vlapl, FLOAT *vtau, + FLOAT *v2rho2, FLOAT *v2sigma2, FLOAT *v2lapl2, FLOAT *v2tau2, + FLOAT *v2rhosigma, FLOAT *v2rholapl, FLOAT *v2rhotau, + FLOAT *v2sigmalapl, FLOAT *v2sigmatau, FLOAT *v2lapltau) +{ + const XC(func_type) *aux; + FLOAT *zk_, *vrho_, *vsigma_, *vlapl_, *vtau_; + FLOAT *v2rho2_, *v2sigma2_, *v2lapl2_, *v2tau2_; + FLOAT *v2rhosigma_, *v2rholapl_, *v2rhotau_; + FLOAT *v2sigmalapl_, *v2sigmatau_, *v2lapltau_; + + int ip, ii; + + /* prepare buffers that will hold the results from the individual functionals */ + zk_ = NULL; + vrho_ = vsigma_ = vlapl_ = vtau_ = NULL; + v2rho2_ = v2sigma2_ = v2lapl2_ = v2tau2_ = NULL; + v2rhosigma_ = v2rholapl_ = v2rhotau_ = NULL; + v2sigmalapl_ = v2sigmatau_ = v2lapltau_ = NULL; + + if(zk != NULL) + zk_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_zk); + + if(vrho != NULL){ + vrho_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_vrho); + if(is_gga(func->info->family)){ + vsigma_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_vsigma); + } + if(is_mgga(func->info->family)){ + vlapl_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_vlapl); + vtau_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_vtau); + } + } + + if(v2rho2 != NULL){ + v2rho2_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_v2rho2); + if(is_gga(func->info->family)){ + v2sigma2_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_v2sigma2); + v2rhosigma_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_v2rhosigma); + } + if(is_mgga(func->info->family)){ + v2lapl2_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_v2lapl2); + v2tau2_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_v2tau2); + v2rholapl_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_v2rholapl); + v2rhotau_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_v2rhotau); + v2sigmalapl_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_v2sigmalapl); + v2sigmatau_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_v2sigmatau); + v2lapltau_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_v2lapltau); + } + } + + /* we now add the different components */ + for(ii=0; iin_func_aux; ii++){ + aux = func->func_aux[ii]; + switch(aux->info->family){ + case XC_FAMILY_LDA: + XC(lda)(aux, np, rho, zk_, vrho_, v2rho2_, NULL); + break; + case XC_FAMILY_GGA: + XC(gga)(aux, np, rho, sigma, zk_, vrho_, vsigma_, v2rho2_, v2rhosigma_, v2sigma2_, NULL, NULL, NULL, NULL); + break; + case XC_FAMILY_MGGA: + XC(mgga)(aux, np, rho, sigma, lapl, tau, zk_, vrho_, vsigma_, vlapl_, vtau_, + v2rho2_, v2sigma2_, v2lapl2_, v2tau2_, v2rhosigma_, v2rholapl_, v2rhotau_, + v2sigmalapl_, v2sigmatau_, v2lapltau_); + break; + } + + if(zk != NULL) + for(ip = 0; ip < np*func->n_zk; ip++) + zk[ip] += func->mix_coef[ii] * zk_[ip]; + + if(vrho != NULL){ + for(ip = 0; ip < np*func->n_vrho; ip++) + vrho[ip] += func->mix_coef[ii] * vrho_[ip]; + + if(is_gga(func->info->family) && is_gga(aux->info->family)) + for(ip = 0; ip < np*func->n_vsigma; ip++) + vsigma[ip] += func->mix_coef[ii] * vsigma_[ip]; + + if(is_mgga(func->info->family) && is_mgga(aux->info->family)){ + for(ip = 0; ip < np*func->n_vlapl; ip++) + vlapl[ip] += func->mix_coef[ii] * vlapl_[ip]; + for(ip = 0; ip < np*func->n_vtau; ip++) + vtau[ip] += func->mix_coef[ii] * vtau_[ip]; + } + } + + if(v2rho2 != NULL){ + for(ip = 0; ip < np*func->n_v2rho2; ip++) + v2rho2[ip] += func->mix_coef[ii] * v2rho2_[ip]; + + if(is_gga(func->info->family) && is_gga(aux->info->family)){ + for(ip = 0; ip < np*func->n_v2rhosigma; ip++) + v2rhosigma[ip] += func->mix_coef[ii] * v2rhosigma_[ip]; + for(ip = 0; ip < np*func->n_v2sigma2; ip++) + v2sigma2[ip] += func->mix_coef[ii] * v2sigma2_[ip]; + } + + if(is_mgga(func->info->family) && is_mgga(aux->info->family)){ + for(ip = 0; ip < np*func->n_v2lapl2; ip++) + v2lapl2[ip] += func->mix_coef[ii] * v2lapl2_[ip]; + for(ip = 0; ip < np*func->n_v2tau2; ip++) + v2tau2[ip] += func->mix_coef[ii] * v2tau2_[ip]; + for(ip = 0; ip < np*func->n_v2rholapl; ip++) + v2rholapl[ip] += func->mix_coef[ii] * v2rholapl_[ip]; + for(ip = 0; ip < np*func->n_v2rhotau; ip++) + v2rhotau[ip] += func->mix_coef[ii] * v2rhotau_[ip]; + for(ip = 0; ip < np*func->n_v2sigmalapl; ip++) + v2sigmalapl[ip] += func->mix_coef[ii] * v2sigmalapl_[ip]; + for(ip = 0; ip < np*func->n_v2sigmatau; ip++) + v2sigmatau[ip] += func->mix_coef[ii] * v2sigmatau_[ip]; + for(ip = 0; ip < np*func->n_v2lapltau; ip++) + v2lapltau[ip] += func->mix_coef[ii] * v2lapltau_[ip]; + } + } + } + + /* deallocate internal buffers */ + safe_free(zk_); + safe_free(vrho_); safe_free(vsigma_); safe_free(vlapl_); safe_free(vtau_); + safe_free(v2rho2_); safe_free(v2sigma2_); safe_free(v2lapl2_); safe_free(v2tau2_); + safe_free(v2rhosigma_); safe_free(v2rholapl_); safe_free(v2rhotau_); + safe_free(v2sigmalapl_); safe_free(v2sigmatau_); safe_free(v2lapltau_); +} diff --git a/libxc-2.2.0/src/special_functions.c b/libxc-2.2.0/src/special_functions.c new file mode 100644 index 000000000..7b808ffaf --- /dev/null +++ b/libxc-2.2.0/src/special_functions.c @@ -0,0 +1,100 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +/* + Lambert W function. + adapted from the Fortran code of Rickard Armiento + + Corless, Gonnet, Hare, Jeffrey, and Knuth (1996), + Adv. in Comp. Math. 5(4):329-359. +*/ + +FLOAT XC(lambert_w)(FLOAT z) +{ + FLOAT w; + int i; + + /* Sanity check - function is only defined for z >= -1/e */ + if(z + 1.0/M_E < -10*FLOAT_EPSILON) { + fprintf(stderr,"Error - Lambert function called with argument z = %e.\n",z); + exit(1); + } else if(z < -1.0/M_E) + /* Value of W(x) at x=-1/e is -1 */ + return -1.0; + + /* If z is small, go with the first terms of the power expansion + (if z smaller than cube root of epsilon, z^4 will be zero to + machine precision). + */ + if(ABS(z) < CBRT(FLOAT_EPSILON)) + return z - z*z + 1.5*z*z*z; + + /* Initial guess. */ + if(z <= -0.3140862435046707) { /* Point where sqrt and Taylor polynomials match */ + /* Near the branching point: first terms in eqn (4.22) */ + w = SQRT(2.0*M_E*z + 2.0) - 1.0; + + } else if(z <= 1.149876485041417) { /* Point where Taylor and log expansion match */ + + /* Taylor series around origin */ + w = z - z*z + 1.5*z*z*z; + + } else { + /* Asymptotic expansion */ + FLOAT lnz = LOG(z); + + w = lnz - LOG(lnz); + } + + /* Find result through iteration */ + for(i=0; i<10; i++){ + FLOAT expmw, dw; + expmw = EXP(-w); + + /* Halley's equation, (5.9) in Corless et al */ + if( w != -1.0 ) + dw = - (w - z*expmw) / ( w + 1.0 - (w + 2.0)/(2.0*w + 2.0)*(w - z*expmw) ); + else + dw = 0.0; + + w += dw; + if(ABS(dw) < 10*FLOAT_EPSILON*(1.0 + ABS(w))) + return w; + } + + /* This should never happen! */ + fprintf(stderr, "%s\n%s\n", "lambert_w: iteration limit reached", + "Should never happen: execution aborted"); + exit(1); +} + + +struct cheb_series_struct { + double * c; /* coefficients */ + int order; /* order of expansion */ + double a; /* lower interval point */ + double b; /* upper interval point */ + int order_sp; /* effective single precision order */ +}; +typedef struct cheb_series_struct cheb_series; + +/* cheb_eval is defined in util.h */ diff --git a/libxc-2.2.0/src/stoll.c b/libxc-2.2.0/src/stoll.c new file mode 100644 index 000000000..e6264e61a --- /dev/null +++ b/libxc-2.2.0/src/stoll.c @@ -0,0 +1,194 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +void +XC(lda_stoll) (const XC(func_type) *pw, FLOAT dens, FLOAT zeta, int order, XC(lda_work_t) res[3]) +{ + static const FLOAT sign[2] = {1.0, -1.0}; + int is; + FLOAT opz[2] = {1.0 + zeta, 1.0 - zeta}; + + res[2].rs[1] = RS(dens); + + /* first we get the parallel contributions */ + for(is=0; is<2; is++){ + FLOAT opz13; + + if(opz[is] < pw->info->min_zeta){ + res[is].zk = 0.0; + if(order >= 1) res[is].dedz = res[is].dedrs = 0.0; + }else{ + FLOAT drssdrs, drssdz, d2rssdrsz, d2rssdz2; + FLOAT LDA_zk, LDA_dedrs, LDA_d2edrs2; + + opz13 = CBRT(opz[is]); + + res[is].rs[1] = RS(dens*opz[is]/2.0); + res[is].rs[0] = sqrt(res[is].rs[1]); + res[is].rs[2] = res[is].rs[1]*res[is].rs[1]; + res[is].zeta = sign[is]; + res[is].order = order; + + XC(lda_c_pw_func)(pw, &(res[is])); + + LDA_zk = res[is].zk; + + res[is].zk *= opz[is]/2.0; + + if(order < 1) continue; + + LDA_dedrs = res[is].dedrs; + drssdrs = M_CBRT2/opz13; + drssdz = -sign[is]*res[is].rs[1]/(3.0*opz[is]); + + res[is].dedrs = LDA_dedrs*drssdrs*opz[is]/2.0; + res[is].dedz = LDA_zk*sign[is]/2.0 + LDA_dedrs*drssdz*opz[is]/2.0; + + if(order < 2) continue; + + LDA_d2edrs2 = res[is].d2edrs2; + d2rssdrsz = -sign[is]*M_CBRT2/(3.0*opz13*opz[is]); + d2rssdz2 = res[is].rs[1]*4.0/(9.0*opz[is]*opz[is]); + + res[is].d2edrs2 = LDA_d2edrs2*drssdrs*drssdrs*opz[is]/2.0; + res[is].d2edrsz = sign[is]*LDA_dedrs*drssdrs/2.0 + (LDA_d2edrs2*drssdrs*drssdz + LDA_dedrs*d2rssdrsz)*opz[is]/2.0; + res[is].d2edz2 = sign[is]*LDA_dedrs*drssdz + (LDA_d2edrs2*drssdz*drssdz + LDA_dedrs*d2rssdz2)*opz[is]/2.0; + } + } + + /* and now the perpendicular */ + res[2].rs[0] = sqrt(res[2].rs[1]); + res[2].rs[2] = res[2].rs[1]*res[2].rs[1]; + res[is].zeta = zeta; + res[is].order = order; + + XC(lda_c_pw_func)(pw, &(res[2])); + + res[2].zk -= res[0].zk + res[1].zk; + + if(order < 1) return; + + res[2].dedrs -= res[0].dedrs + res[1].dedrs; + res[2].dedz -= res[0].dedz + res[1].dedz; + + if(order < 2) return; + + res[2].d2edrs2 -= res[0].d2edrs2 + res[1].d2edrs2; + res[2].d2edrsz -= res[0].d2edrsz + res[1].d2edrsz; + res[2].d2edz2 -= res[0].d2edz2 + res[1].d2edz2; +} + + +void +XC(pbe_c_stoll) (const XC(func_type) *pbe, int get_max, const XC(mgga_work_c_t) *in, XC(gga_work_c_t) out[3]) +{ + static const FLOAT sign[2] = {1.0, -1.0}; + int is; + FLOAT opz[2] = {1.0 + in->zeta, 1.0 - in->zeta}; + + /* first we get the perpendicular contributions */ + out[2].order = in->order; + out[2].dens = in->dens; + out[2].rs = in->rs; + out[2].zeta = in->zeta; + out[2].xt = in->xt; + out[2].xs[0] = in->xs[0]; + out[2].xs[1] = in->xs[1]; + + XC(gga_c_pbe_func) (pbe, &(out[2])); + + /* and now the parallel contributions */ + for(is=0; is<2; is++){ + FLOAT opz13; + + if(in->ds[is] < pbe->info->min_dens){ + out[is].f = 0.0; + if(in->order >= 1){ + out[is].dfdrs = out[is].dfdz = out[is].dfdxt = 0.0; + out[is].dfdxs[0] = out[is].dfdxs[1] = 0.0; + } + }else{ + FLOAT drssdrs, drssdz; + FLOAT GGA_f, GGA_dfdrs; + + opz13 = CBRT(opz[is]); + + out[is].order = in->order; + out[is].dens = in->ds[is]; + out[is].rs = RS(out[is].dens); + out[is].zeta = sign[is]; + out[is].xt = (is == 0) ? in->xs[0] : in->xs[1]; + out[is].xs[0] = (is == 0) ? in->xs[0] : 0.0; + out[is].xs[1] = (is == 1) ? in->xs[1] : 0.0; + + XC(gga_c_pbe_func) (pbe, &(out[is])); + + if(get_max && out[is].f < out[2].f){ + /* perform maximum operation */ + out[is].f = out[2].f; + + if(in->order >= 1){ + out[is].dfdrs = out[2].dfdrs; + out[is].dfdz = out[2].dfdz; + out[is].dfdxs[0] = out[2].dfdxs[0]; + out[is].dfdxs[1] = out[2].dfdxs[1]; + out[is].dfdxt = out[2].dfdxt; + } + }else{ + if(in->order >= 1){ + GGA_dfdrs = out[is].dfdrs; + + drssdrs = M_CBRT2/opz13; + drssdz = -sign[is]*out[is].rs/(3.0*opz[is]); + + out[is].dfdrs = GGA_dfdrs*drssdrs; + out[is].dfdz = GGA_dfdrs*drssdz; + if(is == 0){ + out[is].dfdxs[0] += out[is].dfdxt; + out[is].dfdxs[1] = 0.0; + }else{ + out[is].dfdxs[0] = 0.0; + out[is].dfdxs[1] += out[is].dfdxt; + } + out[is].dfdxt = 0.0; + } + } + + /* take care of the opz[is]/2 factor */ + GGA_f = out[is].f; + + out[is].f *= opz[is]/2.0; + + if(in->order < 1) continue; + + out[is].dfdrs = out[is].dfdrs*opz[is]/2.0; + out[is].dfdz = GGA_f*sign[is]/2.0 + out[is].dfdz*opz[is]/2.0; + out[is].dfdxs[0] = out[is].dfdxs[0]*opz[is]/2.0; + out[is].dfdxs[1] = out[is].dfdxs[1]*opz[is]/2.0; + out[is].dfdxt = out[is].dfdxt*opz[is]/2.0; + + if(in->order < 2) continue; + } + } +} diff --git a/libxc-2.2.0/src/string_f.h b/libxc-2.2.0/src/string_f.h new file mode 100644 index 000000000..79ad8fd50 --- /dev/null +++ b/libxc-2.2.0/src/string_f.h @@ -0,0 +1,94 @@ +/* + Copyright (C) 2003 M. Marques, A. Castro, A. Rubio, G. Bertsch + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + + $Id: string_f.h 3341 2007-10-12 15:47:30Z marques $ +*/ + +/* --------------------- Fortran to C string compatibility ---------------------- */ +#include + +#if defined(_CRAY) +#include + +#define to_c_str(f, c) { \ + char *fc; int slen; \ + fc = _fcdtocp(f); \ + for(slen=_fcdlen(f)-1; slen>=0 && fc[slen]==' '; slen--); \ + slen++; \ + c = (char *)malloc(slen+1); \ + strncpy(c, _fcdtocp(f), slen); \ + c[slen] = '\0'; \ +} + +#define to_f_str(c, f) { \ + char *fc; int flen, clen, i; \ + flen = _fcdlen(f); \ + fc = _fcdtocp(f); \ + clen = strlen(c); \ + for(i=0; i=0; ll--) \ + if(f[ll] != ' ') break; \ + ll++; \ + c = (char *)malloc((ll+1)*sizeof(char)); \ + for(i=0; i +#include +#include + +#include "util.h" + + +/* this function converts the spin-density into total density and + relative magnetization */ +/* inline */ void +XC(rho2dzeta)(int nspin, const FLOAT *rho, FLOAT *d, FLOAT *zeta) +{ + if(nspin==XC_UNPOLARIZED){ + *d = max(rho[0], 0.0); + *zeta = 0.0; + }else{ + *d = rho[0] + rho[1]; + if(*d > 0.0){ + *zeta = (rho[0] - rho[1])/(*d); + *zeta = min(*zeta, 1.0); + *zeta = max(*zeta, -1.0); + }else{ + *d = 0.0; + *zeta = 0.0; + } + } +} + +/* inline */ void +XC(fast_fzeta)(const FLOAT x, const int nspin, const int order, FLOAT * fz){ + + FLOAT aa, bb, aa2, bb2; + + if(nspin != XC_UNPOLARIZED){ + aa = CBRT(1.0 + x); + bb = CBRT(1.0 - x); + + aa2 = aa*aa; + bb2 = bb*bb; + + fz[0] = (aa2*aa2 + bb2*bb2 - 2.0)/FZETAFACTOR; + if(order < 1) return; + fz[1] = (aa - bb)*(4.0/3.0)/FZETAFACTOR; + if(order < 2) return; + fz[2] = ((4.0/9.0)/FZETAFACTOR)*(ABS(x)==1.0 ? (FLT_MAX) : (pow(1.0 + (x), -2.0/3.0) + pow(1.0 - (x), -2.0/3.0))); + if(order < 3) return; + fz[3] = (-(8.0/27.0)/FZETAFACTOR)*(ABS(x)==1.0 ? (FLT_MAX) : (pow(1.0 + (x), -5.0/3.0) - pow(1.0 - (x), -5.0/3.0))); + } else { + fz[0] = 0.0; + fz[1] = 0.0; + fz[2] = (8.0/9.0)/FZETAFACTOR; + fz[3] = 0.0; + } +} + +/* initializes the mixing */ +void +XC(mix_init)(XC(func_type) *p, int n_funcs, const int *funcs_id, const FLOAT *mix_coef) +{ + int ii; + + assert(p != NULL); + assert(p->func_aux == NULL && p->mix_coef == NULL); + + /* allocate structures needed for */ + p->n_func_aux = n_funcs; + p->mix_coef = (FLOAT *) malloc(n_funcs*sizeof(FLOAT)); + p->func_aux = (XC(func_type) **) malloc(n_funcs*sizeof(XC(func_type) *)); + + for(ii=0; iimix_coef[ii] = mix_coef[ii]; + p->func_aux[ii] = (XC(func_type) *) malloc(sizeof(XC(func_type))); + XC(func_init) (p->func_aux[ii], funcs_id[ii], p->nspin); + } + +} + +xc_gga_enhancement_t +XC(get_gga_enhancement_factor)(int func_id) +{ + switch(func_id){ + + case XC_GGA_X_WC: + return XC(gga_x_wc_enhance); + + case XC_GGA_X_PBE: + case XC_GGA_X_PBE_R: + case XC_GGA_X_PBE_SOL: + case XC_GGA_X_XPBE: + case XC_GGA_X_PBE_JSJR: + case XC_GGA_X_PBEK1_VDW: + case XC_GGA_X_RGE2: + case XC_GGA_X_APBE: + case XC_GGA_X_PBEINT: + case XC_GGA_X_PBE_TCA: + return XC(gga_x_pbe_enhance); + + case XC_GGA_X_PW91: + case XC_GGA_X_MPW91: + return XC(gga_x_pw91_enhance); + + case XC_GGA_X_RPBE: + return XC(gga_x_rpbe_enhance); + + case XC_GGA_X_HTBS: + return XC(gga_x_htbs_enhance); + + case XC_GGA_X_B86: + return XC(gga_x_b86_enhance); + + case XC_GGA_X_B86_MGC: + return XC(gga_x_b86_mgc_enhance); + + case XC_GGA_X_B88: + case XC_GGA_X_OPTB88_VDW: + case XC_GGA_X_MB88: + return XC(gga_x_b88_enhance); + + case XC_GGA_X_G96: + return XC(gga_x_g96_enhance); + + case XC_GGA_X_PW86: + case XC_GGA_X_RPW86: + return XC(gga_x_pw86_enhance); + + case XC_GGA_X_AIRY: + case XC_GGA_X_LAG: + return XC(gga_x_airy_enhance); + + case XC_GGA_X_BAYESIAN: + return XC(gga_x_bayesian_enhance); + + case XC_GGA_X_BPCCAC: + return XC(gga_x_bpccac_enhance); + + case XC_GGA_X_C09X: + return XC(gga_x_c09x_enhance); + + case XC_GGA_X_AM05: + return XC(gga_x_am05_enhance); + + case XC_GGA_X_DK87_R1: + case XC_GGA_X_DK87_R2: + return XC(gga_x_dk87_enhance); + + case XC_GGA_X_HERMAN: + return XC(gga_x_herman_enhance); + + case XC_GGA_X_LG93: + return XC(gga_x_lg93_enhance); + + case XC_GGA_X_LV_RPW86: + return XC(gga_x_lv_rpw86_enhance); + + case XC_GGA_X_MPBE: + return XC(gga_x_mpbe_enhance); + + case XC_GGA_X_OPTX: + return XC(gga_x_optx_enhance); + + case XC_GGA_X_SOGGA11: + case XC_HYB_GGA_X_SOGGA11_X: + return XC(gga_x_sogga11_enhance); + + case XC_GGA_X_SSB_SW: + case XC_GGA_X_SSB: + case XC_GGA_X_SSB_D: + return XC(gga_x_ssb_sw_enhance); + + case XC_GGA_X_VMT_PBE: + case XC_GGA_X_VMT_GE: + case XC_GGA_X_VMT84_PBE: + case XC_GGA_X_VMT84_GE: + return XC(gga_x_vmt_enhance); + + default: + fprintf(stderr, "Internal error in get_gga_enhancement\n"); + exit(1); + } +} diff --git a/libxc-2.2.0/src/util.h b/libxc-2.2.0/src/util.h new file mode 100644 index 000000000..36af656ec --- /dev/null +++ b/libxc-2.2.0/src/util.h @@ -0,0 +1,266 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef _LDA_H +#define _LDA_H + +#include +#include + +#include "xc.h" + +/* xc_config.h needs to be included to use FLOAT and related macros*/ +#include "xc_config.h" + +/* If strict ANSI, then some useful macros are not defined */ +#if defined(__STRICT_ANSI__) +# define M_E 2.7182818284590452354 /* e */ +# define M_PI 3.14159265358979323846 /* pi */ +# define M_SQRT2 1.41421356237309504880 /* sqrt(2) */ +double asinh (double x); +float asinhf(float x); +#endif + +#define M_SQRTPI 1.772453850905516027298167483341145182798L +#define M_SQRT3 1.732050807568877293527446341505872366943L +#define M_CBRT2 1.259921049894873164767210607278228350570L +#define M_CBRT3 1.442249570307408382321638310780109588392L +#define M_CBRT4 1.587401051968199474751705639272308260391L +#define M_CBRT5 1.709975946676696989353108872543860109868L +#define M_CBRT6 1.817120592832139658891211756327260502428L +#define M_CBRT7 1.912931182772389101199116839548760282862L +#define M_CBRT9 2.080083823051904114530056824357885386338L + +/* Very useful macros */ +#define min(x,y) ((x=0; i--){ + b2 = b1; + b1 = b0; + b0 = twox*b1 - b2 + cs[i]; + } + + return 0.5*(b0 - b2); +} + +FLOAT XC(bessel_I0_scaled)(const FLOAT x); +FLOAT XC(bessel_I0)(const FLOAT x); +FLOAT XC(bessel_K0_scaled)(const FLOAT x); +FLOAT XC(bessel_K0)(const FLOAT x); +FLOAT XC(bessel_K1_scaled)(const FLOAT x); +FLOAT XC(bessel_K1)(const FLOAT x); + +FLOAT XC(expint_e1_impl)(const FLOAT x, const int scale); +static inline FLOAT expint_e1(const FLOAT x) { return XC(expint_e1_impl)( x, 0); } +static inline FLOAT expint_e1_scaled(const FLOAT x) { return XC(expint_e1_impl)( x, 1); } +static inline FLOAT expint_Ei(const FLOAT x) { return -XC(expint_e1_impl)(-x, 0); } +static inline FLOAT expint_Ei_scaled(const FLOAT x) { return -XC(expint_e1_impl)(-x, 1); } + +/* integration */ +typedef void integr_fn(FLOAT *x, int n, void *ex); +FLOAT XC(integrate)(integr_fn func, void *ex, FLOAT a, FLOAT b); +void XC(rdqagse)(integr_fn f, void *ex, FLOAT *a, FLOAT *b, + FLOAT *epsabs, FLOAT *epsrel, int *limit, FLOAT *result, + FLOAT *abserr, int *neval, int *ier, FLOAT *alist__, + FLOAT *blist, FLOAT *rlist, FLOAT *elist, int *iord, int *last); + +typedef struct XC(functional_key_t) { + char name[256]; + int number; +} XC(functional_key_t); + + +#define M_C 137.0359996287515 /* speed of light */ + +#define RS_FACTOR 0.6203504908994000166680068120477781673508 /* (3/(4*Pi))^1/3 */ +#define X_FACTOR_C 0.9305257363491000250020102180716672510262 /* 3/8*cur(3/pi)*4^(2/3) */ +#define X_FACTOR_2D_C 1.504505556127350098528211870828726895584 /* 8/(3*sqrt(pi)) */ +#define K_FACTOR_C 4.557799872345597137288163759599305358515 /* 3/10*(6*pi^2)^(2/3) */ +#define X2S 0.1282782438530421943003109254455883701296 /* 1/(2*(6*pi^2)^(1/3)) */ +#define X2S_2D 0.1410473958869390717370198628901931464610 /* 1/(2*(4*pi)^(1/2)) */ +#define FZETAFACTOR 0.5198420997897463295344212145564567011405 /* 2^(4/3) - 2 */ + +#define RS(x) (RS_FACTOR/CBRT(x)) +#define FZETA(x) ((POW(1.0 + (x), 4.0/3.0) + POW(1.0 - (x), 4.0/3.0) - 2.0)/FZETAFACTOR) +#define DFZETA(x) ((CBRT(1.0 + (x)) - CBRT(1.0 - (x)))*(4.0/3.0)/FZETAFACTOR) +#define D2FZETA(x) ((4.0/9.0)/FZETAFACTOR)* \ + (ABS(x)==1.0 ? (FLT_MAX) : (pow(1.0 + (x), -2.0/3.0) + pow(1.0 - (x), -2.0/3.0))) +#define D3FZETA(x) (-(8.0/27.0)/FZETAFACTOR)* \ + (ABS(x)==1.0 ? (FLT_MAX) : (pow(1.0 + (x), -5.0/3.0) - pow(1.0 - (x), -5.0/3.0))) + +#define MIN_DENS 5.0e-13 +#define MIN_GRAD 5.0e-13 +#define MIN_TAU 5.0e-13 +#define MIN_ZETA 5.0e-13 + +/* The following inlines confuse the xlc compiler */ +void XC(rho2dzeta)(int nspin, const FLOAT *rho, FLOAT *d, FLOAT *zeta); +void XC(fast_fzeta)(const FLOAT x, const int nspin, const int order, FLOAT * fz); +void XC(mix_init)(XC(func_type) *p, int n_funcs, const int *funcs_id, const FLOAT *mix_coef); + +/* LDAs */ +typedef struct XC(lda_work_t) { + int order; /* to which order should I return the derivatives */ + FLOAT rs[3], zeta; + + FLOAT zk; + FLOAT dedrs, dedz; /* first derivatives of zk */ + FLOAT d2edrs2, d2edrsz, d2edz2; /* second derivatives of zk */ + FLOAT d3edrs3, d3edrs2z, d3edrsz2, d3edz3; /* third derivatives of zk */ +} XC(lda_work_t); + +void XC(lda_fxc_fd)(const XC(func_type) *p, int np, const FLOAT *rho, FLOAT *fxc); +void XC(lda_kxc_fd)(const XC(func_type) *p, int np, const FLOAT *rho, FLOAT *kxc); + +/* the different possibilities for screening the interaction */ +#define XC_RSF_ERF 0 +#define XC_RSF_ERF_GAU 1 +#define XC_RSF_YUKAWA 2 + +void XC(lda_x_attenuation_function)(int interaction, int order, FLOAT aa, FLOAT *f, FLOAT *df, FLOAT *d2f, FLOAT *d3f); +void XC(lda_stoll)(const XC(func_type) *pw, FLOAT dens, FLOAT zeta, int order, XC(lda_work_t) res[3]); + +/* direct access to the internal functions */ +void XC(lda_c_hl_func) (const XC(func_type) *p, XC(lda_work_t) *r); +void XC(lda_c_pw_func) (const XC(func_type) *p, XC(lda_work_t) *r); +void XC(lda_c_pz_func) (const XC(func_type) *p, XC(lda_work_t) *r); +void XC(lda_c_rc04_func)(const XC(func_type) *p, XC(lda_work_t) *r); +void XC(lda_c_2d_amgb_func)(const XC(func_type) *p, XC(lda_work_t) *r); + + +/* GGAs */ +void work_gga_becke_init(XC(func_type) *p); + +/* exchange enhancement factors: if you add one, please add it also to the util.c */ +typedef void(*xc_gga_enhancement_t)(const XC(func_type) *, int, FLOAT, FLOAT *, FLOAT *, FLOAT *, FLOAT *); +xc_gga_enhancement_t XC(get_gga_enhancement_factor)(int func_id); + +void XC(gga_x_wc_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_pbe_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_pw91_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_rpbe_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_htbs_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_b86_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_b86_mgc_enhance)(const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_b88_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_g96_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_pw86_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_airy_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_ak13_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_bayesian_enhance)(const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_bpccac_enhance)(const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_c09x_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_am05_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_dk87_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_herman_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_lg93_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_lv_rpw86_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_mpbe_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_optx_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_sogga11_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_ssb_sw_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_vmt_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); + +/* correlation functions */ + +typedef struct XC(gga_work_c_t) { + int order; /* to which order should I return the derivatives */ + + FLOAT dens, ds[2], sigmat, sigmas[3]; + FLOAT rs, zeta, xt, xs[2]; + + FLOAT f; + + FLOAT dfdrs, dfdz, dfdxt, dfdxs[2]; + FLOAT d2fdrs2, d2fdrsz, d2fdrsxt, d2fdrsxs[2], d2fdz2, + d2fdzxt, d2fdzxs[2], d2fdxt2, d2fdxtxs[2], d2fdxs2[3]; + + FLOAT d3fdrs3, d3fdz3, d3fdxt3, d3fdxs3[4]; /* uuu, uud, udd, ddd */ + FLOAT d3fdrs2z, d3fdrs2xt, d3fdrs2xs[2]; + FLOAT d3fdrsz2, d3fdz2xt, d3fdz2xs[2]; + FLOAT d3fdrsxt2, d3fdzxt2, d3fdxt2xs[2]; + FLOAT d3fdrsxs2[3], d3fdzxs2[3],d3fdxtxs2[3]; + FLOAT d3fdrszxt, d3fdrszxs[2], d3fdrsxtxs[2], d3fdzxtxs[2]; +} XC(gga_work_c_t); + +void XC(gga_c_pw91_func)(const XC(func_type) *p, XC(gga_work_c_t) *r); +void XC(gga_c_pbe_func) (const XC(func_type) *p, XC(gga_work_c_t) *r); + +/* meta GGAs */ +typedef struct XC(mgga_work_x_t) { + int order; /* to which order should I return the derivatives */ + FLOAT rs, zeta, x, t, u; + + FLOAT f; /* enhancement factor */ + FLOAT dfdrs, dfdx, dfdt, dfdu; /* first derivatives of f */ + FLOAT d2fdrs2, d2fdx2, d2fdt2, d2fdu2; /* second derivatives of zk */ + FLOAT d2fdrsx, d2fdrst, d2fdrsu, d2fdxt, d2fdxu, d2fdtu; +} XC(mgga_work_x_t); + +typedef struct XC(mgga_work_c_t) { + int order; /* to which order should I return the derivatives */ + + FLOAT dens, ds[2], sigmat, sigmas[3]; + FLOAT rs, zeta, xt, xs[2], ts[2], us[2]; + + FLOAT f; + FLOAT dfdrs, dfdz, dfdxt, dfdxs[2], dfdts[2], dfdus[2]; + FLOAT d2fdrs2, d2fdrsz, d2fdrsxt, d2fdrsxs[2], d2fdrsts[2], d2fdrsus[2]; + FLOAT d2fdz2, d2fdzxt, d2fdzxs[2], d2fdzts[2], d2fdzus[2]; + FLOAT d2fdxt2, d2fdxtxs[2], d2fdxtts[2], d2fdxtus[2]; + FLOAT d2fdxs2[3], d2fxsts[4], d2fxsus[4]; + FLOAT d2dts2[3], d2fdtsus[4]; + FLOAT d2fdus2[3]; +} XC(mgga_work_c_t); + + +void XC(pbe_c_stoll) (const XC(func_type) *pbe, int get_max, const XC(mgga_work_c_t) *in, XC(gga_work_c_t) out[3]); + +void XC(mgga_series_w)(int order, int n, const FLOAT *a, FLOAT t, FLOAT *fw, FLOAT *dfwdt); +void XC(mgga_b97_func_g)(const FLOAT *cc, FLOAT gamma, FLOAT s, int order, FLOAT *g, FLOAT *dgds, FLOAT *d2gds2); +void XC(mgga_x_gvt4_func)(int order, FLOAT x, FLOAT z, FLOAT alpha, const FLOAT *d, FLOAT *h, FLOAT *dhdx, FLOAT *dhdz); + +/* useful MACROS */ +#define DFRACTION(num, dnum, den, dden) \ + (((dnum)*(den) - (num)*(dden))/((den)*(den))) +#define D2FRACTION(num, dnum, d2num, den, dden, d2den) \ + ((2.0*(num)*(dden)*(dden) - 2.0*(den)*(dden)*(dnum) - (den)*(num)*(d2den) + (den)*(den)*(d2num))/((den)*(den)*(den))) +#define D3FRACTION(num, dnum, d2num, d3num, den, dden, d2den, d3den) \ + ((-(num)*(6.0*(dden)*(dden)*(dden) - 6.0*(den)*(dden)*(d2den) + (den)*(den)*(d3den)) + \ + (den)*(6.0*(dden)*(dden)*(dnum) - 3.0*(den)*(dden)*(d2num) + (den)*(-3.0*(dnum)*(d2den) + (den)*(d3num))))/((den)*(den)*(den)*(den))) + +#endif diff --git a/libxc-2.2.0/src/version.c b/libxc-2.2.0/src/version.c new file mode 100644 index 000000000..1c41e5177 --- /dev/null +++ b/libxc-2.2.0/src/version.c @@ -0,0 +1,31 @@ +/* + Copyright (C) 2012 M.A.L. Marques, M. Oliveira + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include + +#include "xc.h" +#include "config.h" + +void XC(version)(int *major, int *minor) { + const char *version_string = PACKAGE_VERSION; + + *major = -1; + *minor = -1; + sscanf(version_string,"%d.%d",major,minor); + +} diff --git a/libxc-2.2.0/src/work_gga_c.c b/libxc-2.2.0/src/work_gga_c.c new file mode 100644 index 000000000..0abd5378d --- /dev/null +++ b/libxc-2.2.0/src/work_gga_c.c @@ -0,0 +1,363 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include +#include + +#include "util.h" + +static void +work_gga_c(const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, + FLOAT *v2rho2, FLOAT *v2rhosigma, FLOAT *v2sigma2, + FLOAT *v3rho3, FLOAT *v3rho2sigma, FLOAT *v3rhosigma2, FLOAT *v3sigma3) +{ + XC(gga_work_c_t) r; + FLOAT min_grad2 = p->info->min_grad*p->info->min_grad; + int ip; + + FLOAT drs, dxtdn, dxtds, ndzdn[2], dxsdn[2], dxsds[2];; + FLOAT d2rs, d2xtdn2, d2xtds2, d2xtdns, d2xsdn2[2], d2xsds2[2], d2xsdns[2]; + FLOAT d3rs, d3xtdn3, d3xtdn2s, d3xtdns2, d3xtds3, d3xsdn3[2], d3xsdn2s[2], d3xsdns2[2], d3xsds3[2]; + + /* set all elements of r to zero */ + memset(&r, 0, sizeof(r)); + + r.order = -1; + if(zk != NULL) r.order = 0; + if(vrho != NULL) r.order = 1; + if(v2rho2 != NULL) r.order = 2; + if(v3rho3 != NULL) r.order = 3; + + if(r.order < 0) return; + + for(ip = 0; ip < np; ip++){ + XC(rho2dzeta)(p->nspin, rho, &(r.dens), &(r.zeta)); + + if(r.dens < p->info->min_dens) goto end_ip_loop; + + r.rs = RS(r.dens); + if(p->nspin == XC_UNPOLARIZED){ + r.ds[0] = r.dens/2.0; + r.ds[1] = r.ds[0]; + + r.sigmat = max(min_grad2, sigma[0]); + r.xt = SQRT(r.sigmat)/ POW(r.dens, 4.0/3.0); + + r.sigmas[0] = r.sigmat/4.0; + r.sigmas[1] = r.sigmas[0]; + r.sigmas[2] = r.sigmas[0]; + + r.xs[0] = CBRT(2.0)*r.xt; + r.xs[1] = r.xs[0]; + }else{ + r.ds[0] = max(p->info->min_dens, rho[0]); + r.ds[1] = max(p->info->min_dens, rho[1]); + + r.sigmat = max(min_grad2, sigma[0] + 2.0*sigma[1] + sigma[2]); + r.xt = SQRT(r.sigmat)/ POW(r.dens, 4.0/3.0); + + r.sigmas[0] = max(min_grad2, sigma[0]); + r.sigmas[1] = max(min_grad2, sigma[1]); + r.sigmas[2] = max(min_grad2, sigma[2]); + + r.xs[0] = SQRT(r.sigmas[0])/POW(r.ds[0], 4.0/3.0); + r.xs[1] = SQRT(r.sigmas[2])/POW(r.ds[1], 4.0/3.0); + } + + func(p, &r); + + if(zk != NULL && (p->info->flags & XC_FLAGS_HAVE_EXC)) + *zk = r.f; + + if(r.order < 1) goto end_ip_loop; + + /* setup auxiliary variables */ + drs = -r.rs/(3.0*r.dens); + dxtdn = -4.0*r.xt/(3.0*r.dens); + dxtds = r.xt/(2.0*r.sigmat); + if(p->nspin == XC_POLARIZED){ + ndzdn[1] = -(r.zeta + 1.0); + ndzdn[0] = -(r.zeta - 1.0); + + dxsdn[1] = -4.0/3.0*r.xs[1]/r.ds[1]; + dxsdn[0] = -4.0/3.0*r.xs[0]/r.ds[0]; + + dxsds[1] = r.xs[1]/(2.0*r.sigmas[2]); + dxsds[0] = r.xs[0]/(2.0*r.sigmas[0]); + }else{ + dxsdn[0] = M_CBRT2*dxtdn; + dxsds[0] = M_CBRT2*dxtds; + } + + if(vrho != NULL && (p->info->flags & XC_FLAGS_HAVE_VXC)){ + vrho[0] = r.f + r.dens*(r.dfdrs*drs + r.dfdxt*dxtdn); + vsigma[0] = r.dens*r.dfdxt*dxtds; + + if(p->nspin == XC_POLARIZED){ + vrho[1] = vrho[0] + r.dfdz*ndzdn[1] + r.dens*r.dfdxs[1]*dxsdn[1]; + vrho[0] = vrho[0] + r.dfdz*ndzdn[0] + r.dens*r.dfdxs[0]*dxsdn[0];; + + vsigma[2] = vsigma[0] + r.dens*r.dfdxs[1]*dxsds[1]; + vsigma[1] = 2.0*vsigma[0]; + vsigma[0] = vsigma[0] + r.dens*r.dfdxs[0]*dxsds[0]; + + }else{ + vrho[0] += 2.0*r.dens*r.dfdxs[0]*dxsdn[0]; /* factor of 2 comes from sum over sigma */ + vsigma[0] += 2.0*r.dens*r.dfdxs[0]*dxsds[0]; + } + } + + if(r.order < 2) goto end_ip_loop; + + /* setup auxiliary variables */ + d2rs = -4.0*drs/(3.0*r.dens); + d2xtdn2 = -7.0*dxtdn/(3.0*r.dens); + d2xtds2 = -dxtds/(2.0*r.sigmat); + d2xtdns = dxtdn/(2.0*r.sigmat); + if(p->nspin == XC_POLARIZED){ + d2xsdn2[0] = -7.0*dxsdn[0]/(3.0*r.ds[0]); + d2xsdn2[1] = -7.0*dxsdn[1]/(3.0*r.ds[1]); + + d2xsdns[0] = -4.0/3.0*dxsds[0]/r.ds[0]; + d2xsdns[1] = -4.0/3.0*dxsds[1]/r.ds[1]; + + d2xsds2[0] = -dxsds[0]/(2.0*r.sigmas[0]); + d2xsds2[1] = -dxsds[1]/(2.0*r.sigmas[2]); + }else{ + d2xsdn2[0] = M_CBRT2*d2xtdn2; + d2xsdns[0] = M_CBRT2*d2xtdns; + d2xsds2[0] = M_CBRT2*d2xtds2; + } + + if(v2rho2 != NULL && (p->info->flags & XC_FLAGS_HAVE_FXC)){ + v2rho2[0] = 2.0*r.dfdrs*drs + 2.0*r.dfdxt*dxtdn + + r.dens*(r.d2fdrs2*drs*drs + r.d2fdxt2*dxtdn*dxtdn + r.dfdrs*d2rs + r.dfdxt*d2xtdn2 + 2.0*r.d2fdrsxt*drs*dxtdn); + + v2sigma2[0] = r.dens*(r.d2fdxt2*dxtds*dxtds + r.dfdxt*d2xtds2); + + v2rhosigma[0] = r.dfdxt*dxtds + r.dens*(r.d2fdrsxt*drs*dxtds + r.d2fdxt2*dxtdn*dxtds + r.dfdxt*d2xtdns); + + if(p->nspin == XC_POLARIZED){ + int is; + + for(is=2; is>=0; is--){ + int s1 = (is > 1) ? 1 : 0; /* {0, 0, 1}[is] */ + int s2 = (is > 0) ? 1 : 0; /* {0, 1, 1}[is] */ + + v2rho2[is] = v2rho2[0]; + + v2rho2[is] += r.dfdxs[s1]*dxsdn[s1] + + ndzdn[s1]*(r.d2fdrsz*drs + r.d2fdzxt*dxtdn + r.d2fdzxs[s2]*dxsdn[s2]) + + r.dens*(r.d2fdrsxs[s1]*drs*dxsdn[s1] + r.d2fdxtxs[s1]*dxtdn*dxsdn[s1]); + + v2rho2[is] += r.dfdxs[s2]*dxsdn[s2] + + ndzdn[s2]*(r.d2fdrsz*drs + r.d2fdzxt*dxtdn + r.d2fdzxs[s1]*dxsdn[s1]) + + r.dens*(r.d2fdrsxs[s2]*drs*dxsdn[s2] + r.d2fdxtxs[s2]*dxtdn*dxsdn[s2]); + + v2rho2[is] += r.d2fdz2*ndzdn[s1]*ndzdn[s2]/r.dens + r.dens*r.d2fdxs2[is]*dxsdn[s1]*dxsdn[s2]; + + if(is != 1) + v2rho2[is] += r.dens*r.dfdxs[s1]*d2xsdn2[s1]; + } + + /* v2sigma */ + v2sigma2[5] = v2sigma2[0] + r.dens* + (2.0*r.d2fdxtxs[1]*dxtds*dxsds[1] + r.d2fdxs2[2]*dxsds[1]*dxsds[1] + r.dfdxs[1]*d2xsds2[1]); + v2sigma2[4] = 2.0*v2sigma2[0] + r.dens* + (2.0*r.d2fdxtxs[1]*dxtds*dxsds[1]); + v2sigma2[3] = 4.0*v2sigma2[0]; + v2sigma2[2] = v2sigma2[0] + r.dens* + ( dxtds*(r.d2fdxtxs[0]*dxsds[0] + r.d2fdxtxs[1]*dxsds[1]) + r.d2fdxs2[1]*dxsds[0]*dxsds[1]); + v2sigma2[1] = 2.0*v2sigma2[0] + r.dens* + (2.0*r.d2fdxtxs[0]*dxtds*dxsds[0]); + v2sigma2[0] = v2sigma2[0] + r.dens* + (2.0*r.d2fdxtxs[0]*dxtds*dxsds[0] + r.d2fdxs2[0]*dxsds[0]*dxsds[0] + r.dfdxs[0]*d2xsds2[0]); + + /* v2rhosigma */ + v2rhosigma[5] = v2rhosigma[0] + r.dfdxs[1]*dxsds[1] + ndzdn[1]*(r.d2fdzxt*dxtds + r.d2fdzxs[1]*dxsds[1]) + + r.dens*(r.d2fdrsxs[1]*drs*dxsds[1] + r.d2fdxtxs[1]*(dxsdn[1]*dxtds + dxtdn*dxsds[1]) + r.d2fdxs2[2]*dxsdn[1]*dxsds[1] + + r.dfdxs[1]*d2xsdns[1]); + + v2rhosigma[4] = 2.0*v2rhosigma[0] + 2.0*ndzdn[1]*r.d2fdzxt*dxtds + + 2.0*r.dens*r.d2fdxtxs[1]*dxsdn[1]*dxtds; + + v2rhosigma[3] = v2rhosigma[0] + r.dfdxs[0]*dxsds[0] + ndzdn[1]*(r.d2fdzxt*dxtds + r.d2fdzxs[0]*dxsds[0]) + + r.dens*(r.d2fdrsxs[0]*drs*dxsds[0] + r.d2fdxtxs[1]*(dxsdn[1]*dxtds + dxtdn*dxsds[0]) + r.d2fdxs2[1]*dxsdn[1]*dxsds[0]); + + v2rhosigma[2] = v2rhosigma[0] + r.dfdxs[1]*dxsds[1] + ndzdn[0]*(r.d2fdzxt*dxtds + r.d2fdzxs[1]*dxsds[1]) + + r.dens*(r.d2fdrsxs[1]*drs*dxsds[1] + r.d2fdxtxs[0]*(dxsdn[0]*dxtds + dxtdn*dxsds[1]) + r.d2fdxs2[1]*dxsdn[0]*dxsds[1]); + + v2rhosigma[1] = 2.0*v2rhosigma[0] + 2.0*ndzdn[0]*r.d2fdzxt*dxtds + + 2.0*r.dens*r.d2fdxtxs[0]*dxsdn[0]*dxtds; + + v2rhosigma[0] = v2rhosigma[0] + r.dfdxs[0]*dxsds[0] + ndzdn[0]*(r.d2fdzxt*dxtds + r.d2fdzxs[0]*dxsds[0]) + + r.dens*(r.d2fdrsxs[0]*drs*dxsds[0] + r.d2fdxtxs[0]*(dxsdn[0]*dxtds + dxtdn*dxsds[0]) + r.d2fdxs2[0]*dxsdn[0]*dxsds[0] + + r.dfdxs[0]*d2xsdns[0]); + + }else{ + v2rho2[0] += 2.0*dxsdn[0]* + (2.0*r.dfdxs[0] + r.dens*(2.0*r.d2fdrsxs[0]*drs + 2.0*r.d2fdxtxs[0]*dxtdn + (r.d2fdxs2[0] + r.d2fdxs2[1])*dxsdn[0])) + + 2.0*r.dens*r.dfdxs[0]*d2xsdn2[0]; + + v2sigma2[0] += 2.0*r.dens*((r.d2fdxs2[0] + r.d2fdxs2[1])*dxsds[0]*dxsds[0] + r.dfdxs[0]*d2xsds2[0] + 2.0*r.d2fdxtxs[0]*dxtds*dxsds[0]); + + v2rhosigma[0] += 2.0*r.dens*r.d2fdxtxs[0]*(dxsdn[0]*dxtds + dxtdn*dxsds[0]) + + 2.0*(r.dfdxs[0] + r.dens*(r.d2fdrsxs[0]*drs + (r.d2fdxs2[0] + r.d2fdxs2[1])*dxsdn[0]))*dxsds[0] + + 2.0*r.dens*r.dfdxs[0]*d2xsdns[0]; + } + } + + if(r.order < 3) goto end_ip_loop; + + /* setup auxiliary variables */ + d3rs = -7.0*d2rs/(3.0*r.dens); + + d3xtdn3 = -10.0*d2xtdn2/(3.0*r.dens); + d3xtdn2s = d2xtdn2/(2.0*r.sigmat); + d3xtdns2 = -d2xtdns/(2.0*r.sigmat); + d3xtds3 = -3.0*d2xtds2/(2.0*r.sigmat); + + if(p->nspin == XC_POLARIZED){ + /* not done */ + d3xsdn3[0] = -7.0*dxsdn[0]/(3.0*r.ds[0]); + d3xsdn3[1] = -7.0*dxsdn[1]/(3.0*r.ds[1]); + + d3xsdn2s[0] = -4.0/3.0*dxsds[0]/r.ds[0]; + d3xsdn2s[1] = -4.0/3.0*dxsds[1]/r.ds[1]; + + d3xsds3[0] = -dxsds[0]/(2.0*r.sigmas[0]); + d3xsds3[1] = -dxsds[1]/(2.0*r.sigmas[2]); + }else{ + d3xsdn3[0] = M_CBRT2*d3xtdn3; + d3xsdn2s[0] = M_CBRT2*d3xtdn2s; + d3xsdns2[0] = M_CBRT2*d3xtdns2; + d3xsds3[0] = M_CBRT2*d3xtds3; + } + + if(v3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC)){ + v3rho3[0] = + r.dfdrs * (3.0*d2rs + r.dens*d3rs) + + r.dfdxt * (3.0*d2xtdn2 + r.dens*d3xtdn3) + + r.d2fdrs2 * 3.0*drs*(drs + r.dens*d2rs) + + r.d2fdrsxt * (6.0*drs*dxtdn + 3.0*r.dens*d2rs*dxtdn + 3.0*r.dens*drs*d2xtdn2) + + r.d2fdxt2 * 3.0*dxtdn*(dxtdn + r.dens*d2xtdn2) + + r.d3fdrs3 * r.dens*drs*drs*drs + + r.d3fdrs2xt * 3.0*r.dens*drs*drs*dxtdn + + r.d3fdrsxt2 * 3.0*r.dens*drs*dxtdn*dxtdn + + r.d3fdxt3 * r.dens*dxtdn*dxtdn*dxtdn; + + v3rhosigma2[0] = r.dfdxt*d2xtds2 + r.d2fdxt2*dxtds*dxtds + + r.dens*(r.dfdxt*d3xtdns2 + r.d2fdxt2*(d2xtds2*dxtdn + 2.0*dxtds*d2xtdns) + r.d2fdrsxt*d2xtds2*drs + + dxtds*dxtds*(r.d3fdxt3*dxtdn + r.d3fdrsxt2*drs)); + + v3rho2sigma[0] = 2.0*r.dfdxt*d2xtdns + 2.0*r.d2fdxt2*dxtds*dxtdn + 2.0*r.d2fdrsxt*drs*dxtds + + r.dens*(r.dfdxt*d3xtdn2s + r.d2fdxt2*(d2xtdn2*dxtds + 2.0*dxtdn*d2xtdns) + r.d2fdrsxt*(2.0*drs*d2xtdns + d2rs*dxtds) + + r.d3fdrs2xt*drs*drs*dxtds + 2.0*r.d3fdrsxt2*drs*dxtdn*dxtds + r.d3fdxt3*dxtdn*dxtdn*dxtds); + + v3sigma3[0] = r.dens*(r.d3fdxt3*dxtds*dxtds*dxtds + 3.0*r.d2fdxt2*d2xtds2*dxtds + r.dfdxt*d3xtds3); + + if(p->nspin == XC_POLARIZED){ + int is; + + for(is=3; is>=0; is--){ + int s1 = (is > 2) ? 1 : 0; /* {0, 0, 0, 1}[is] */ + int s2 = (is > 1) ? 1 : 0; /* {0, 0, 1, 1}[is] */ + int s3 = (is > 0) ? 1 : 0; /* {0, 1, 1, 1}[is] */ + + int s12 = s1 + s2; /* 0 + 0 = 0 */ + int s13 = s1 + s3; /* 0 + 1 = 1 + 0 = 1 */ + int s23 = s2 + s3; /* 1 + 1 = 2 */ + int s123 = s1 + s2 + s3; + + v3rho3[is] = v3rho3[0]; + + if(s1 == s2){ + v3rho3[is] += + r.dfdxs[s1] * d2xsdn2[s1] + + r.d2fdxs2[s23] * r.dens*d2xsdn2[s2]*dxsdn[s3]; + } + + if(s2 == s3){ + v3rho3[is] += + r.dfdxs[s2] * d2xsdn2[s2] + + r.d2fdxs2[s13] * r.dens*d2xsdn2[s3]*dxsdn[s1]; + } + + if(s1 == s3){ + v3rho3[is] += + r.dfdxs[s3] * d2xsdn2[s3] + + r.d2fdxs2[s12] * r.dens*d2xsdn2[s1]*dxsdn[s2]; + } + + if(s1 == s2 && s2 == s3) + v3rho3[is] += r.dens*r.dfdxs[s1] * d3xsdn3[s1]; + + v3rho3[0] += + r.d2fdz2 * (-ndzdn[s1]*ndzdn[s2] - ndzdn[s1]*ndzdn[s3] - ndzdn[s2]*ndzdn[s3])/(r.dens*r.dens) + + r.d3fdz3 * ndzdn[s1]*ndzdn[s2]*ndzdn[s3]/(r.dens*r.dens) + + r.d3fdxs3[s123] * r.dens*dxsdn[s1]*dxsdn[s2]*dxsdn[s3] + + r.d3fdrs2z * drs*drs*(ndzdn[s1] + ndzdn[s2] + ndzdn[s3]) + + r.dens*drs*drs*(r.d3fdrs2xs[s1]*dxsdn[s1] + r.d3fdrs2xs[s2]*dxsdn[s2] + r.d3fdrs2xs[s3]*dxsdn[s3]) + + r.d3fdzxt2 * dxtdn*dxtdn*(ndzdn[s1] + ndzdn[s2] + ndzdn[s3]) + + r.dens*dxtdn*dxtdn*(r.d3fdxt2xs[s1]*dxsdn[s1] + r.d3fdxt2xs[s2]*dxsdn[s2] + r.d3fdxt2xs[s3]*dxsdn[s3]) + + r.d3fdrsz2 * drs *(ndzdn[s1]*ndzdn[s2] + ndzdn[s1]*ndzdn[s3] + ndzdn[s2]*ndzdn[s3])/r.dens + + r.d3fdz2xt * dxtdn*(ndzdn[s1]*ndzdn[s2] + ndzdn[s1]*ndzdn[s3] + ndzdn[s2]*ndzdn[s3])/r.dens + + r.d3fdz2xs[s1] * ndzdn[s2]*ndzdn[s3]*dxsdn[s1]/r.dens + + r.d3fdz2xs[s2] * ndzdn[s1]*ndzdn[s3]*dxsdn[s2]/r.dens + + r.d3fdz2xs[s3] * ndzdn[s1]*ndzdn[s2]*dxsdn[s3]/r.dens + + r.dens*drs *(r.d3fdrsxs2[s12]*dxsdn[s1]*dxsdn[s2] + r.d3fdrsxs2[s13]*dxsdn[s1]*dxsdn[s3] + r.d3fdrsxs2[s23]*dxsdn[s2]*dxsdn[s3]) + + r.dens*dxtdn*(r.d3fdxtxs2[s12]*dxsdn[s1]*dxsdn[s2] + r.d3fdxtxs2[s13]*dxsdn[s1]*dxsdn[s3] + r.d3fdxtxs2[s23]*dxsdn[s2]*dxsdn[s3]) + ; + + } + + }else{ + } + } + + end_ip_loop: + /* increment pointers */ + rho += p->n_rho; + sigma += p->n_sigma; + + if(zk != NULL) + zk += p->n_zk; + + if(vrho != NULL){ + vrho += p->n_vrho; + vsigma += p->n_vsigma; + } + + if(v2rho2 != NULL){ + v2rho2 += p->n_v2rho2; + v2rhosigma += p->n_v2rhosigma; + v2sigma2 += p->n_v2sigma2; + } + + if(v3rho3 != NULL){ + v3rho3 += p->n_v3rho3; + v3rho2sigma += p->n_v3rho2sigma; + v3rhosigma2 += p->n_v3rhosigma2; + v3sigma3 += p->n_v3sigma3; + } + } +} diff --git a/libxc-2.2.0/src/work_gga_x.c b/libxc-2.2.0/src/work_gga_x.c new file mode 100644 index 000000000..9232cb92f --- /dev/null +++ b/libxc-2.2.0/src/work_gga_x.c @@ -0,0 +1,244 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/************************************************************************ + This file is to be included in GGA exchange functionals. As often these + functionals are written as a function of s = |grad n|/n^(4/3), this + routine performs the necessary conversions between a functional of s + and of rho. +************************************************************************/ + +#ifndef HEADER +# define HEADER 1 +#endif + +#ifndef XC_DIMENSIONS +# define XC_DIMENSIONS 3 +#endif + +static void +#ifdef XC_KINETIC_FUNCTIONAL +work_gga_k +#else +work_gga_x +#endif +(const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, + FLOAT *v2rho2, FLOAT *v2rhosigma, FLOAT *v2sigma2, + FLOAT *v3rho3, FLOAT *v3rho2sigma, FLOAT *v3rhosigma2, FLOAT *v3sigma3) +{ + FLOAT sfact, sfact2, x_factor_c, alpha, beta, dens; + int is, is2, ip, order; + + /* constants for the evaluation of the different terms */ + FLOAT c_zk[1]; + FLOAT c_vrho[3], c_vsigma[2]; + FLOAT c_v2rho2[3], c_v2rhosigma[4], c_v2sigma2[2]; + FLOAT c_v3rho3[4], c_v3rho2sigma[3], c_v3rhosigma2[3], c_v3sigma3[3]; + + /* variables used inside the is loop */ + FLOAT gdm, ds, rhoLDA; + FLOAT x, f, dfdx, d2fdx2, d3fdx3, lvsigma, lv2sigma2, lvsigmax, lvrho; + + /* alpha is the power of rho in the corresponding LDA + beta is the power of rho in the expression for x */ + + beta = 1.0 + 1.0/XC_DIMENSIONS; /* exponent of the density in expression for x */ + +#ifndef XC_KINETIC_FUNCTIONAL + alpha = beta; + +# if XC_DIMENSIONS == 2 + x_factor_c = -X_FACTOR_2D_C; +# else /* three dimensions */ + x_factor_c = -X_FACTOR_C; +# endif + +#else + +# if XC_DIMENSIONS == 2 +# else /* three dimensions */ + alpha = 5.0/3.0; + x_factor_c = K_FACTOR_C; +# endif + +#endif + + sfact = (p->nspin == XC_POLARIZED) ? 1.0 : 2.0; + sfact2 = sfact*sfact; + + /* Initialize several constants */ + order = -1; + if(zk != NULL){ + order = 0; + c_zk[0] = sfact*x_factor_c; + } + if(vrho != NULL){ + order = 1; + c_vrho[0] = x_factor_c*alpha; + c_vrho[1] = -x_factor_c*beta; + c_vrho[2] = x_factor_c; + c_vsigma[0] = sfact*x_factor_c; + c_vsigma[1] = sfact*x_factor_c; + } + if(v2rho2 != NULL){ + order = 2; + c_v2rho2[0] = (x_factor_c/sfact) * (alpha - 1.0)*alpha; + c_v2rho2[1] = (x_factor_c/sfact) * beta*(beta - 2.0*alpha + 1.0); + c_v2rho2[2] = (x_factor_c/sfact) * beta*beta; + c_v2rhosigma[0] = x_factor_c * (alpha - beta)/2.0; + c_v2rhosigma[1] = -x_factor_c * beta/2.0; + c_v2rhosigma[2] = x_factor_c * alpha; + c_v2rhosigma[3] = -x_factor_c * beta; + c_v2sigma2[0] = x_factor_c*sfact / 4.0; + c_v2sigma2[1] = x_factor_c*sfact; + } + if(v3rho3 != NULL){ + order = 3; + c_v3rho3[0] = (x_factor_c/sfact2) * (alpha - 2.0)*(alpha - 1.0)*alpha; + c_v3rho3[1] = -(x_factor_c/sfact2) * (3.0*alpha*alpha - 3.0*alpha*(2.0 + beta) + (1.0 + beta)*(2.0 + beta))*beta; + c_v3rho3[2] = -(x_factor_c/sfact2) * 3.0*(1.0 - alpha + beta)*beta*beta; + c_v3rho3[3] = -(x_factor_c/sfact2) * beta*beta*beta; + c_v3rho2sigma[0] = (x_factor_c/sfact) * (alpha - beta - 1.0)*(alpha - beta)/2.0; + c_v3rho2sigma[1] = (x_factor_c/sfact) * (1.0 - 2.0*alpha + 3.0*beta)*beta/2.0; + c_v3rho2sigma[2] = (x_factor_c/sfact) * beta*beta/2.0; + c_v3rhosigma2[0] = -x_factor_c * (alpha - beta)/4.0; + c_v3rhosigma2[1] = x_factor_c * (alpha - beta)/4.0; + c_v3rhosigma2[2] = -x_factor_c * beta/4.0; + c_v3sigma3[0] = x_factor_c*sfact * 3.0/8.0; + c_v3sigma3[1] = -x_factor_c*sfact * 3.0/8.0; + c_v3sigma3[2] = x_factor_c*sfact /8.0; + } + if(order < 0) return; + + + /* the loop over the points starts */ + for(ip = 0; ip < np; ip++){ + dens = (p->nspin == XC_UNPOLARIZED) ? rho[0] : rho[0] + rho[1]; + if(dens < p->info->min_dens) goto end_ip_loop; + + for(is=0; isnspin; is++){ + is2 = 2*is; + + if(rho[is] < p->info->min_dens) continue; + + gdm = max(SQRT(sigma[is2])/sfact, p->info->min_grad); + ds = rho[is]/sfact; + rhoLDA = POW(ds, alpha); + x = gdm/POW(ds, beta); + + dfdx = d2fdx2 = d3fdx3 = 0.0; + lvsigma = lv2sigma2 = lvsigmax = lvrho = 0.0; + +#if HEADER == 1 + + func(p, order, x, &f, &dfdx, &d2fdx2, &d3fdx3); + +#elif HEADER == 2 + + /* this second header is useful for functionals that depend + explicitly both on x and on sigma */ + func(p, order, x, gdm*gdm, &f, &dfdx, &lvsigma, &d2fdx2, &lv2sigma2, &lvsigmax); + + lvsigma /= sfact2; + lvsigmax /= sfact2; + lv2sigma2 /= sfact2*sfact2; + +#elif HEADER == 3 + + /* this second header is useful for functionals that depend + explicitly both on x and on rho*/ + func(p, order, x, ds, &f, &dfdx, &lvrho); + +#endif + + if(order > 0) dfdx *= x; + if(order > 1) d2fdx2 *= x*x; + if(order > 2) d3fdx3 *= x*x*x; + + if(zk != NULL && (p->info->flags & XC_FLAGS_HAVE_EXC)) + *zk += rhoLDA* + c_zk[0]*f; + + if(vrho != NULL && (p->info->flags & XC_FLAGS_HAVE_VXC)){ + vrho[is] += (rhoLDA/ds)* + (c_vrho[0]*f + c_vrho[1]*dfdx) + rhoLDA*c_vrho[2]*lvrho; + + if(gdm > p->info->min_grad) + vsigma[is2] = rhoLDA* + (c_vsigma[0]*dfdx/(2.0*sigma[is2]) + c_vsigma[1]*lvsigma); + } + + if(v2rho2 != NULL && (p->info->flags & XC_FLAGS_HAVE_FXC)){ + v2rho2[is2] = rhoLDA/(ds*ds) * (c_v2rho2[0]*f + c_v2rho2[1]*dfdx + c_v2rho2[2]*d2fdx2); + + if(gdm > p->info->min_grad){ + v2rhosigma[is*5] = (rhoLDA/ds) * + ((c_v2rhosigma[0]*dfdx + c_v2rhosigma[1]*d2fdx2)/sigma[is2] + c_v2rhosigma[2]*lvsigma + c_v2rhosigma[3]*x*lvsigmax); + v2sigma2 [is*5] = rhoLDA* + (c_v2sigma2[0]*(d2fdx2 - dfdx)/(sigma[is2]*sigma[is2]) + c_v2sigma2[1]*(lv2sigma2 + lvsigmax*x/sigma[is2])); + } + } + + if(v3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC)){ + v3rho3[is*3] = rhoLDA/(ds*ds*ds) * + (c_v3rho3[0]*f + c_v3rho3[1]*dfdx + c_v3rho3[2]*d2fdx2 + c_v3rho3[3]*d3fdx3); + + if(gdm > p->info->min_grad){ + v3rho2sigma[is*8] = rhoLDA/(ds*ds) * + (c_v3rho2sigma[0]*dfdx + c_v3rho2sigma[1]*d2fdx2 + c_v3rho2sigma[2]*d3fdx3)/sigma[is2]; + + v3rhosigma2[is*11] = (rhoLDA/ds) * + (c_v3rhosigma2[0]*dfdx + c_v3rhosigma2[1]*d2fdx2 + c_v3rhosigma2[2]*d3fdx3)/(sigma[is2]*sigma[is2]); + + v3sigma3[is*9] = rhoLDA* + (c_v3sigma3[0]*dfdx + c_v3sigma3[1]*d2fdx2 + c_v3sigma3[2]*d3fdx3)/(sigma[is2]*sigma[is2]*sigma[is2]); + } + } + } + + if(zk != NULL && (p->info->flags & XC_FLAGS_HAVE_EXC)) + *zk /= dens; /* we want energy per particle */ + + end_ip_loop: + /* increment pointers */ + rho += p->n_rho; + sigma += p->n_sigma; + + if(zk != NULL) + zk += p->n_zk; + + if(vrho != NULL){ + vrho += p->n_vrho; + vsigma += p->n_vsigma; + } + + if(v2rho2 != NULL){ + v2rho2 += p->n_v2rho2; + v2rhosigma += p->n_v2rhosigma; + v2sigma2 += p->n_v2sigma2; + } + + if(v3rho3 != NULL){ + v3rho3 += p->n_v3rho3; + v3rho2sigma += p->n_v3rho2sigma; + v3rhosigma2 += p->n_v3rhosigma2; + v3sigma3 += p->n_v3sigma3; + } + } +} diff --git a/libxc-2.2.0/src/work_lda.c b/libxc-2.2.0/src/work_lda.c new file mode 100644 index 000000000..24041a6d9 --- /dev/null +++ b/libxc-2.2.0/src/work_lda.c @@ -0,0 +1,141 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/************************************************************************ + This file is to be included in LDA functionals. As often these + functionals are written as a function of rs and zeta, this + routine performs the necessary conversions between this and a functional + of rho. +************************************************************************/ + +#ifndef XC_DIMENSIONS +#define XC_DIMENSIONS 3 +#endif + +static void +work_lda(const XC(func_type) *p, int np, const FLOAT *rho, + FLOAT *zk, FLOAT *vrho, FLOAT *v2rho2, FLOAT *v3rho3) +{ + XC(lda_work_t) r; + int is, ip; + FLOAT dens, drs, d2rs, d3rs; + + /* Wigner radius */ +# if XC_DIMENSIONS == 1 + const FLOAT cnst_rs = 0.5; +# elif XC_DIMENSIONS == 2 + const FLOAT cnst_rs = 1.0/M_SQRTPI; +# else /* three dimensions */ + const FLOAT cnst_rs = RS_FACTOR; +# endif + + r.order = -1; + if(zk != NULL) r.order = 0; + if(vrho != NULL) r.order = 1; + if(v2rho2 != NULL) r.order = 2; + if(v3rho3 != NULL) r.order = 3; + if(r.order < 0) return; + + for(ip = 0; ip < np; ip++){ + XC(rho2dzeta)(p->nspin, rho, &dens, &r.zeta); + + if(dens < p->info->min_dens) goto end_ip_loop; + + r.rs[1] = cnst_rs*POW(dens, -1.0/XC_DIMENSIONS); + r.rs[0] = SQRT(r.rs[1]); + r.rs[2] = r.rs[1]*r.rs[1]; + + func(p, &r); + + if(zk != NULL && (p->info->flags & XC_FLAGS_HAVE_EXC)) + *zk = r.zk; + + if(r.order < 1) goto end_ip_loop; + + drs = -r.rs[1]/(XC_DIMENSIONS*dens); + + if(vrho != NULL && (p->info->flags & XC_FLAGS_HAVE_VXC)){ + vrho[0] = r.zk + dens*r.dedrs*drs; + + if(p->nspin == XC_POLARIZED){ + vrho[1] = vrho[0] - (r.zeta + 1.0)*r.dedz; + vrho[0] = vrho[0] - (r.zeta - 1.0)*r.dedz; + } + } + + if(r.order < 2) goto end_ip_loop; + + d2rs = -drs*(1.0 + XC_DIMENSIONS)/(XC_DIMENSIONS*dens); + + if(v2rho2 != NULL && (p->info->flags & XC_FLAGS_HAVE_FXC)){ + v2rho2[0] = r.dedrs*(2.0*drs + dens*d2rs) + dens*r.d2edrs2*drs*drs; + + if(p->nspin == XC_POLARIZED){ + FLOAT sign[3][2] = {{-1.0, -1.0}, {-1.0, +1.0}, {+1.0, +1.0}}; + + for(is=2; is>=0; is--){ + v2rho2[is] = v2rho2[0] - r.d2edrsz*(2.0*r.zeta + sign[is][0] + sign[is][1])*drs + + (r.zeta + sign[is][0])*(r.zeta + sign[is][1])*r.d2edz2/dens; + } + } + } + + if(r.order < 3) goto end_ip_loop; + + d3rs = -d2rs*(1.0 + 2.0*XC_DIMENSIONS)/(XC_DIMENSIONS*dens); + + if(v3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC)){ + v3rho3[0] = r.dedrs*(3.0*d2rs + dens*d3rs) + + 3.0*r.d2edrs2*drs*(drs + dens*d2rs) + r.d3edrs3*dens*drs*drs*drs; + + if(p->nspin == XC_POLARIZED){ + FLOAT sign[4][3] = {{-1.0, -1.0, -1.0}, {-1.0, -1.0, +1.0}, {-1.0, +1.0, +1.0}, {+1.0, +1.0, +1.0}}; + + for(is=3; is>=0; is--){ + FLOAT ff; + + v3rho3[is] = v3rho3[0] - (2.0*r.zeta + sign[is][0] + sign[is][1])*(d2rs*r.d2edrsz + drs*drs*r.d3edrs2z); + v3rho3[is] += (r.zeta + sign[is][0])*(r.zeta + sign[is][1])*(-r.d2edz2/dens + r.d3edrsz2*drs)/dens; + + ff = r.d2edrsz*(2.0*drs + dens*d2rs) + dens*r.d3edrs2z*drs*drs; + ff += -2.0*r.d2edrsz*drs - r.d3edrsz2*(2.0*r.zeta + sign[is][0] + sign[is][1])*drs; + ff += (r.zeta + sign[is][0])*(r.zeta + sign[is][1])*r.d3edz3/dens; + ff += (2.0*r.zeta + sign[is][0] + sign[is][1])*r.d2edz2/dens; + + v3rho3[is] += -ff*(r.zeta + sign[is][2])/dens; + } + } + } + + end_ip_loop: + rho += p->n_rho; + + if(zk != NULL) + zk += p->n_zk; + + if(vrho != NULL) + vrho += p->n_vrho; + + if(v2rho2 != NULL) + v2rho2 += p->n_v2rho2; + + if(v3rho3 != NULL) + v3rho3 += p->n_v3rho3; + + } /* for(ip) */ +} diff --git a/libxc-2.2.0/src/work_mgga_c.c b/libxc-2.2.0/src/work_mgga_c.c new file mode 100644 index 000000000..89ae6964c --- /dev/null +++ b/libxc-2.2.0/src/work_mgga_c.c @@ -0,0 +1,205 @@ +/* + Copyright (C) 2006-2008 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include + +static void +work_mgga_c(const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl, const FLOAT *tau, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, FLOAT *vlapl, FLOAT *vtau, + FLOAT *v2rho2, FLOAT *v2sigma2, FLOAT *v2lapl2, FLOAT *v2tau2, + FLOAT *v2rhosigma, FLOAT *v2rholapl, FLOAT *v2rhotau, + FLOAT *v2sigmalapl, FLOAT *v2sigmatau, FLOAT *v2lapltau) +{ + XC(mgga_work_c_t) r; + FLOAT min_grad2 = p->info->min_grad*p->info->min_grad; + int ip; + + /* set all elements of r to zero */ + memset(&r, 0, sizeof(r)); + + r.order = -1; + if(zk != NULL) r.order = 0; + if(vrho != NULL) r.order = 1; + if(v2rho2 != NULL) r.order = 2; + + if(r.order < 0) return; + + for(ip = 0; ip < np; ip++){ + FLOAT rho13[3], drs, dxt; + FLOAT ndzdn[2], dxsdn[2]; + FLOAT dxtds, dxsds[2]; + FLOAT dusdn[2], dusdlapl[2], dtsdn[2], dtsdtau[2]; + + XC(rho2dzeta)(p->nspin, rho, &(r.dens), &(r.zeta)); + + if(r.dens < p->info->min_dens) goto end_ip_loop; + + r.rs = RS(r.dens); + rho13[2] = CBRT(r.dens); + + if(p->nspin == XC_UNPOLARIZED){ + r.ds[0] = r.dens/2.0; + r.ds[1] = r.ds[0]; + + rho13[0] = rho13[2]/M_CBRT2; + rho13[1] = rho13[0]; + + /* we already know that dens > min_dens */ + r.sigmat = max(min_grad2, sigma[0]); + r.xt = SQRT(r.sigmat)/(r.dens*rho13[2]); + + r.sigmas[0] = r.sigmat/4.0; + r.sigmas[1] = r.sigmas[0]; + r.sigmas[2] = r.sigmas[0]; + + r.xs[0] = M_CBRT2*r.xt; + r.xs[1] = r.xs[0]; + + r.us[0] = lapl[0]/(2.0*r.ds[0]*rho13[0]*rho13[0]); /* lapl/rho^(5/3) */ + r.us[1] = r.us[0]; + + r.ts[0] = tau[0]/(2.0*r.ds[0]*rho13[0]*rho13[0]); /* tau/rho^(5/3) */ + r.ts[1] = r.ts[0]; + }else{ + r.ds[0] = max(p->info->min_dens, rho[0]); + r.ds[1] = max(p->info->min_dens, rho[1]); + + rho13[0] = CBRT(r.ds[0]); + rho13[1] = CBRT(r.ds[1]); + + r.sigmat = max(min_grad2, sigma[0] + 2.0*sigma[1] + sigma[2]); + r.xt = SQRT(r.sigmat)/(r.dens*rho13[2]); + + r.sigmas[0] = max(min_grad2, sigma[0]); + r.sigmas[1] = max(min_grad2, sigma[1]); + r.sigmas[2] = max(min_grad2, sigma[2]); + + r.xs[0] = SQRT(r.sigmas[0])/(r.ds[0]*rho13[0]); + r.xs[1] = SQRT(r.sigmas[2])/(r.ds[1]*rho13[1]); + + r.us[0] = lapl[0]/(r.ds[0]*rho13[0]*rho13[0]); + r.us[1] = lapl[1]/(r.ds[1]*rho13[1]*rho13[1]); + + r.ts[0] = tau[0]/(r.ds[0]*rho13[0]*rho13[0]); + r.ts[1] = tau[1]/(r.ds[1]*rho13[1]*rho13[1]); + } + + func(p, &r); + + if(zk != NULL && (p->info->flags & XC_FLAGS_HAVE_EXC)) + *zk = r.f; + + if(r.order < 1) goto end_ip_loop; + + /* setup auxiliary variables */ + drs = -r.rs/(3.0*r.dens); + dxt = -4.0*r.xt/(3.0*r.dens); + dxtds = r.xt/(2.0*r.sigmat); + + if(p->nspin == XC_POLARIZED){ + ndzdn[1] = -(r.zeta + 1.0); + ndzdn[0] = -(r.zeta - 1.0); + + dxsdn[1] = -4.0*r.xs[1]/(3.0*r.ds[1]); + dxsdn[0] = -4.0*r.xs[0]/(3.0*r.ds[0]); + + dxsds[1] = r.xs[1]/(2.0*r.sigmas[2]); + dxsds[0] = r.xs[0]/(2.0*r.sigmas[0]); + + dusdn[1] = -5.0*r.us[1]/(3.0*r.ds[1]); + dusdn[0] = -5.0*r.us[0]/(3.0*r.ds[0]); + + dusdlapl[1] = 1.0/(r.ds[1]*rho13[1]*rho13[1]); + dusdlapl[0] = 1.0/(r.ds[0]*rho13[0]*rho13[0]); + + dtsdn[1] = -5.0*r.ts[1]/(3.0*r.ds[1]); + dtsdn[0] = -5.0*r.ts[0]/(3.0*r.ds[0]); + + dtsdtau[1] = dusdlapl[1]; + dtsdtau[0] = dusdlapl[0]; + }else{ + dxsdn[0] = M_CBRT2*dxt; + dxsds[0] = M_CBRT2*dxtds; + + dusdn[0] = -5.0*r.us[0]/(6.0*r.ds[0]); + dusdlapl[0] = 1.0/(2.0*r.ds[0]*rho13[0]*rho13[0]); + + dtsdn[0] = -5.0*r.ts[0]/(6.0*r.ds[0]); + dtsdtau[0] = dusdlapl[0]; + } + + if(vrho != NULL && (p->info->flags & XC_FLAGS_HAVE_VXC)){ + vrho[0] = r.f + r.dens*(r.dfdrs*drs + r.dfdxt*dxt); + vsigma[0] = r.dens*r.dfdxt*dxtds; + + if(p->nspin == XC_POLARIZED){ + vrho[1] = vrho[0] + r.dfdz*ndzdn[1] + r.dens*(r.dfdxs[1]*dxsdn[1] + r.dfdus[1]*dusdn[1] + r.dfdts[1]*dtsdn[1]); + vrho[0] = vrho[0] + r.dfdz*ndzdn[0] + r.dens*(r.dfdxs[0]*dxsdn[0] + r.dfdus[0]*dusdn[0] + r.dfdts[0]*dtsdn[0]); + + vsigma[2] = vsigma[0] + r.dens*r.dfdxs[1]*dxsds[1]; + vsigma[1] = 2.0*vsigma[0]; + vsigma[0] = vsigma[0] + r.dens*r.dfdxs[0]*dxsds[0]; + + vlapl[1] = r.dens*r.dfdus[1]*dusdlapl[1]; + vlapl[0] = r.dens*r.dfdus[0]*dusdlapl[0]; + + vtau[1] = r.dens*r.dfdts[1]*dtsdtau[1]; + vtau[0] = r.dens*r.dfdts[0]*dtsdtau[0]; + + }else{ + /* factor of 2 comes from sum over sigma */ + vrho[0] += 2.0*r.dens*(r.dfdxs[0]*dxsdn[0] + r.dfdus[0]*dusdn[0] + r.dfdts[0]*dtsdn[0]); + vsigma[0] += 2.0*r.dens*r.dfdxs[0]*dxsds[0]; + vlapl[0] = 2.0*r.dens*r.dfdus[0]*dusdlapl[0]; + vtau[0] = 2.0*r.dens*r.dfdts[0]*dtsdtau[0]; + } + } + + if(r.order < 2) goto end_ip_loop; + + end_ip_loop: + /* increment pointers */ + rho += p->n_rho; + sigma += p->n_sigma; + tau += p->n_tau; + lapl += p->n_lapl; + + if(zk != NULL) + zk += p->n_zk; + + if(vrho != NULL){ + vrho += p->n_vrho; + vsigma += p->n_vsigma; + vtau += p->n_vtau; + vlapl += p->n_vlapl; + } + + if(v2rho2 != NULL){ + v2rho2 += p->n_v2rho2; + v2sigma2 += p->n_v2sigma2; + v2tau2 += p->n_v2tau2; + v2lapl2 += p->n_v2lapl2; + v2rhosigma += p->n_v2rhosigma; + v2rhotau += p->n_v2rhotau; + v2rholapl += p->n_v2rholapl; + v2sigmatau += p->n_v2sigmatau; + v2sigmalapl += p->n_v2sigmalapl; + v2lapltau += p->n_v2lapltau; + } + } +} diff --git a/libxc-2.2.0/src/work_mgga_x.c b/libxc-2.2.0/src/work_mgga_x.c new file mode 100644 index 000000000..12605f148 --- /dev/null +++ b/libxc-2.2.0/src/work_mgga_x.c @@ -0,0 +1,186 @@ +/* + Copyright (C) 2006-2008 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/************************************************************************ + This file is to be included in meta GGA exchange functionals. As often these + functionals are written as a function of s = |grad n|/n^(4/3) and tau, this + routine performs the necessary conversions between a functional of s and tau + and of rho. +************************************************************************/ + +#include +#include + +#ifndef XC_DIMENSIONS +# define XC_DIMENSIONS 3 +#endif + +static void +work_mgga_x(const XC(func_type) *p, int np, + const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl, const FLOAT *tau, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, FLOAT *vlapl, FLOAT *vtau, + FLOAT *v2rho2, FLOAT *v2sigma2, FLOAT *v2lapl2, FLOAT *v2tau2, + FLOAT *v2rhosigma, FLOAT *v2rholapl, FLOAT *v2rhotau, + FLOAT *v2sigmalapl, FLOAT *v2sigmatau, FLOAT *v2lapltau) +{ + XC(mgga_work_x_t) r; + FLOAT sfact, sfact2, dens, x_factor_c; + int is, ip; + int has_tail; + + /* WARNING: derivatives are _not_ OK for 2 dimensions */ +#if XC_DIMENSIONS == 2 + const FLOAT cnst_rs = 1.0/M_SQRTPI; + x_factor_c = X_FACTOR_2D_C; +#else /* three dimensions */ + const FLOAT cnst_rs = RS_FACTOR; + x_factor_c = X_FACTOR_C; +#endif + + /* initialize everything to zero */ + memset(&r, 0, sizeof(r)); + + r.order = -1; + if(zk != NULL) r.order = 0; + if(vrho != NULL) r.order = 1; + if(v2rho2 != NULL) r.order = 2; + if(r.order < 0) return; + + sfact = (p->nspin == XC_POLARIZED) ? 1.0 : 2.0; + sfact2 = sfact*sfact; + + has_tail = 0; + switch(p->info->number){ + case XC_MGGA_X_BR89: + case XC_MGGA_X_BJ06: + case XC_MGGA_X_TB09: + case XC_MGGA_X_RPP09: + has_tail = 1; + break; + } + + for(ip = 0; ip < np; ip++){ + XC(rho2dzeta)(p->nspin, rho, &dens, &r.zeta); + + if(dens < p->info->min_dens) goto end_ip_loop; + + r.rs = cnst_rs*POW(dens, -1.0/XC_DIMENSIONS); + + for(is=0; isnspin; is++){ + FLOAT lrho, rho1D, rho2pD_D, lsigma, gdm, lnr2, ltau; + int js = (is == 0) ? 0 : 2; + int ls = (is == 0) ? 0 : 3; + int ks = (is == 0) ? 0 : 5; + + if((!has_tail && (rho[is] < p->info->min_dens || tau[is] < p->info->min_tau)) || (rho[is] == 0.0)) continue; + + lsigma= max(sigma[js]/sfact2, p->info->min_grad*p->info->min_grad); + gdm = SQRT(lsigma); + lrho = rho[is]/sfact; + rho1D = POW(lrho, 1.0/XC_DIMENSIONS); + rho2pD_D = lrho*rho1D*rho1D; + r.x = gdm/(lrho*rho1D); + + ltau = tau[is]/sfact; + r.t = ltau/rho2pD_D; /* tau/rho^((2+D)/D) */ + + lnr2 = lapl[is]/sfact; /* this can be negative */ + r.u = lnr2/rho2pD_D; /* lapl/rho^((2+D)/D) */ + + func(p, &r); + + if(zk != NULL && (p->info->flags & XC_FLAGS_HAVE_EXC)) + *zk += -sfact*x_factor_c*(lrho*rho1D)*r.f; + + if(vrho != NULL && (p->info->flags & XC_FLAGS_HAVE_VXC)){ + vrho[is] = -x_factor_c*rho1D*(-r.rs*r.dfdrs + 4.0/3.0*(r.f - r.dfdx*r.x) - 5.0/3.0*(r.dfdt*r.t + r.dfdu*r.u)); + + vtau[is] = -x_factor_c*r.dfdt/rho1D; + + vlapl[is] = -x_factor_c*r.dfdu/rho1D; + + if(gdm>p->info->min_grad) + vsigma[js] = -x_factor_c*(rho1D*lrho)*r.dfdx*r.x/(2.0*sfact*lsigma); + } + + /* WARNING: terms with rs not implemented yet */ + if(v2rho2 != NULL && (p->info->flags & XC_FLAGS_HAVE_FXC)){ + v2rho2[js] = -x_factor_c/(9.0*sfact*rho1D*rho1D)* + (4.0*r.f - 4.0*r.x*r.dfdx + 4.0*4.0*r.x*r.x*r.d2fdx2 + 5.0*5.0*r.t*r.t*r.d2fdt2 + 5.0*5.0*r.u*r.u*r.d2fdu2 + + 2.0*5.0*(4.0*r.x*r.t*r.d2fdxt + 4.0*r.x*r.u*r.d2fdxu + 5.0*r.t*r.u*r.d2fdtu)); + + v2lapl2[js] = -x_factor_c*r.d2fdu2/(sfact*rho1D*rho2pD_D); + + v2tau2[js] = -x_factor_c*r.d2fdt2/(sfact*rho1D*rho2pD_D); + + v2rholapl[ls] = -x_factor_c*rho1D/(3.0*sfact*rho2pD_D)* + (4.0*r.dfdu - 4.0*r.x*r.d2fdxu - 5.0*r.t*r.d2fdtu - 5.0*(r.dfdu + r.u*r.d2fdu2)); + + v2rhotau[ls] = -x_factor_c*rho1D/(3.0*sfact*rho2pD_D)* + (4.0*r.dfdt - 4.0*r.x*r.d2fdxt - 5.0*r.u*r.d2fdtu - 5.0*(r.dfdt + r.t*r.d2fdt2)); + + v2lapltau[ls] = -x_factor_c*r.d2fdtu/(rho1D*rho2pD_D); + + if(gdm > p->info->min_grad){ + v2sigma2[ks] = -x_factor_c*(rho1D*lrho)/(4.0*sfact2*sfact*lsigma*lsigma)* + (r.d2fdx2*r.x*r.x - r.dfdx*r.x); + + v2rhosigma[ks] = -x_factor_c*rho1D*r.x/(3.0*2.0*sfact2*lsigma)* + (-4.0*r.x*r.d2fdx2 - 5.0*r.t*r.d2fdxt - 5.0*r.u*r.d2fdxu); + + v2sigmalapl[ks] = -x_factor_c*r.x/(2.0*sfact2*lsigma*rho1D)*r.d2fdxu; + + v2sigmatau[ks] = -x_factor_c*r.x/(2.0*sfact2*lsigma*rho1D)*r.d2fdxt; + } + } + } + + if(zk != NULL) + *zk /= dens; /* we want energy per particle */ + + end_ip_loop: + /* increment pointers */ + rho += p->n_rho; + sigma += p->n_sigma; + tau += p->n_tau; + lapl += p->n_lapl; + + if(zk != NULL) + zk += p->n_zk; + + if(vrho != NULL){ + vrho += p->n_vrho; + vsigma += p->n_vsigma; + vtau += p->n_vtau; + vlapl += p->n_vlapl; + } + + if(v2rho2 != NULL){ + v2rho2 += p->n_v2rho2; + v2sigma2 += p->n_v2sigma2; + v2tau2 += p->n_v2tau2; + v2lapl2 += p->n_v2lapl2; + v2rhosigma += p->n_v2rhosigma; + v2rhotau += p->n_v2rhotau; + v2rholapl += p->n_v2rholapl; + v2sigmatau += p->n_v2sigmatau; + v2sigmalapl += p->n_v2sigmalapl; + v2lapltau += p->n_v2lapltau; + } + } +} diff --git a/libxc-2.2.0/src/xc-info.c b/libxc-2.2.0/src/xc-info.c new file mode 100644 index 000000000..8d29925c2 --- /dev/null +++ b/libxc-2.2.0/src/xc-info.c @@ -0,0 +1,116 @@ +/* + Copyright (C) 2014 Susi Lehtola + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + + +#include +#include +#include +#include "xc.h" + +const char *get_kind(const xc_func_type *func) { + switch(func->info->kind) { + case(XC_EXCHANGE): + return "XC_EXCHANGE"; + + case(XC_CORRELATION): + return "XC_CORRELATION"; + + case(XC_EXCHANGE_CORRELATION): + return "XC_EXCHANGE_CORRELATION"; + + case(XC_KINETIC): + return "XC_KINETIC"; + + default: + printf("Internal error in get_kind.\n"); + return ""; + } +} + +const char *get_family(const xc_func_type *func) { + switch(func->info->family) { + case(XC_FAMILY_UNKNOWN): + return "XC_FAMILY_UNKNOWN"; + + case(XC_FAMILY_LDA): + return "XC_FAMILY_LDA"; + + case(XC_FAMILY_GGA): + return "XC_FAMILY_GGA"; + + case(XC_FAMILY_MGGA): + return "XC_FAMILY_MGGA"; + + case(XC_FAMILY_LCA): + return "XC_FAMILY_LCA"; + + case(XC_FAMILY_OEP): + return "XC_FAMILY_OEP"; + + case(XC_FAMILY_HYB_GGA): + return "XC_FAMILY_HYB_GGA"; + + case(XC_FAMILY_HYB_MGGA): + return "XC_FAMILY_HYB_MGGA"; + + default: + printf("Internal error in get_family.\n"); + return ""; + } +} + +int main(int argc, char **argv) { + if(argc!=2) { + printf("Usage: %s func_id\n",argv[0]); + return 1; + } + + int func_id, error; + xc_func_type func; + char *fname; + + /* Is functional defined by a string constant? */ + if(isalpha(argv[1][0])) + func_id=XC(functional_get_number)(argv[1]); + else + func_id=atoi(argv[1]); + + /* Initialize functional */ + error=xc_func_init(&func, func_id, XC_UNPOLARIZED); + if(error) { + printf("Functional '%s' not found.\n",argv[1]); + return 1; + } + + /* Get functional name */ + fname=XC(functional_get_name)(func_id); + + /* Print out info */ + printf("%10s: %-20i\t%10s: %-25s\n","func_id",func_id,"name",fname); + printf("%10s: %-20s\t%10s: %-25s\n","family",get_family(&func),"kind",get_kind(&func)); + printf("%10s: %s\n","comment",func.info->name); + + printf("\nReference(s):\n"); + printf("%s\n",func.info->refs); + + /* Free memory */ + xc_func_end(&func); + free(fname); + + return 0; +} diff --git a/libxc-2.2.0/src/xc.h b/libxc-2.2.0/src/xc.h new file mode 100644 index 000000000..68bec9323 --- /dev/null +++ b/libxc-2.2.0/src/xc.h @@ -0,0 +1,255 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef _XC_H +#define _XC_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include "xc_config.h" + +#define XC_UNPOLARIZED 1 +#define XC_POLARIZED 2 + +#define XC_NON_RELATIVISTIC 0 +#define XC_RELATIVISTIC 1 + +#define XC_EXCHANGE 0 +#define XC_CORRELATION 1 +#define XC_EXCHANGE_CORRELATION 2 +#define XC_KINETIC 3 + +#define XC_FAMILY_UNKNOWN -1 +#define XC_FAMILY_LDA 1 +#define XC_FAMILY_GGA 2 +#define XC_FAMILY_MGGA 4 +#define XC_FAMILY_LCA 8 +#define XC_FAMILY_OEP 16 +#define XC_FAMILY_HYB_GGA 32 +#define XC_FAMILY_HYB_MGGA 64 + +/* flags that can be used in info.flags */ +#define XC_FLAGS_HAVE_EXC (1 << 0) /* 1 */ +#define XC_FLAGS_HAVE_VXC (1 << 1) /* 2 */ +#define XC_FLAGS_HAVE_FXC (1 << 2) /* 4 */ +#define XC_FLAGS_HAVE_KXC (1 << 3) /* 8 */ +#define XC_FLAGS_HAVE_LXC (1 << 4) /* 16 */ +#define XC_FLAGS_1D (1 << 5) /* 32 */ +#define XC_FLAGS_2D (1 << 6) /* 64 */ +#define XC_FLAGS_3D (1 << 7) /* 128 */ +#define XC_FLAGS_HYB_CAM (1 << 8) /* 256 */ +#define XC_FLAGS_STABLE (1 << 9) /* 512 */ +#define XC_FLAGS_DEVELOPMENT (1 << 10) /* 1024 */ + +#define XC_TAU_EXPLICIT 0 +#define XC_TAU_EXPANSION 1 + +/* These are old names keep for compatibility, and that should disappear soon */ +#define XC_GGA_XC_LB 160 +#define XC_GGA_K_ABSR1 506 +#define XC_GGA_K_ABSR2 507 + +void XC(version)(int *major, int *minor); + +struct XC(func_type); + +typedef struct{ + int number; /* indentifier number */ + int kind; /* XC_EXCHANGE, XC_CORRELATION, or XC_EXCHANGE_CORRELATION */ + + char *name; /* name of the functional, e.g. "PBE" */ + int family; /* type of the functional, e.g. XC_FAMILY_GGA */ + char *refs; /* references */ + + int flags; /* see above for a list of possible flags */ + + FLOAT min_dens; + FLOAT min_grad; + FLOAT min_tau; + FLOAT min_zeta; + + void (*init)(struct XC(func_type) *p); + void (*end) (struct XC(func_type) *p); + void (*lda) (const struct XC(func_type) *p, int np, + const FLOAT *rho, + FLOAT *zk, FLOAT *vrho, FLOAT *v2rho2, FLOAT *v3rho3); + void (*gga) (const struct XC(func_type) *p, int np, + const FLOAT *rho, const FLOAT *sigma, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, + FLOAT *v2rho2, FLOAT *v2rhosigma, FLOAT *v2sigma2, + FLOAT *v3rho3, FLOAT *v3rho2sigma, FLOAT *v3rhosigma2, FLOAT *v3sigma3); + void (*mgga)(const struct XC(func_type) *p, int np, + const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl_rho, const FLOAT *tau, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, FLOAT *vlapl_rho, FLOAT *vtau, + FLOAT *v2rho2, FLOAT *v2sigma2, FLOAT *v2tau2, FLOAT *v2lapl2, + FLOAT *v2rhosigma, FLOAT *v2rhotau, FLOAT *v2rholapl, + FLOAT *v2sigmatau, FLOAT *v2sigmalapl, FLOAT *v2taulapl); +} XC(func_info_type); + + +struct XC(func_type){ + const XC(func_info_type) *info; /* all the information concerning this functional */ + int nspin; /* XC_UNPOLARIZED or XC_POLARIZED */ + + int n_func_aux; /* how many auxiliary functions we need */ + struct XC(func_type) **func_aux; /* most GGAs are based on a LDA or other GGAs */ + FLOAT *mix_coef; /* coefficients for the mixing */ + + FLOAT cam_omega; /* range separation parameter for hybrids */ + FLOAT cam_alpha; /* the Hartree-Fock mixing parameter for the hybrids */ + FLOAT cam_beta; /* idem, but for the screened hybrid */ + + int func; /* Shortcut in case of several functionals sharing the same interface */ + int n_rho, n_sigma, n_tau, n_lapl; /* spin dimensions of the arrays */ + int n_zk; + + int n_vrho, n_vsigma, n_vtau, n_vlapl; + + int n_v2rho2, n_v2sigma2, n_v2tau2, n_v2lapl2, + n_v2rhosigma, n_v2rhotau, n_v2rholapl, + n_v2sigmatau, n_v2sigmalapl, n_v2lapltau; + + int n_v3rho3, n_v3rho2sigma, n_v3rhosigma2, n_v3sigma3; + + void *params; /* this allows us to fix parameters in the functional */ +}; + +typedef struct XC(func_type) XC(func_type); + +/* functionals */ +int XC(functional_get_number)(const char *name); +char *XC(functional_get_name)(int number); +int XC(family_from_id)(int id, int *family, int *number); +int XC(func_init)(XC(func_type) *p, int functional, int nspin); +void XC(func_end)(XC(func_type) *p); + +#include "xc_funcs.h" + +int XC(lda_init)(XC(func_type) *p, const XC(func_info_type) *info, int nspin); +void XC(lda_end) (XC(func_type) *p); + +void XC(lda) (const XC(func_type) *p, int np, const FLOAT *rho, FLOAT *zk, FLOAT *vrho, FLOAT *v2rho2, FLOAT *v3rho3); +void XC(lda_exc) (const XC(func_type) *p, int np, const FLOAT *rho, FLOAT *zk); +void XC(lda_exc_vxc)(const XC(func_type) *p, int np, const FLOAT *rho, FLOAT *zk, FLOAT *vrho); +void XC(lda_vxc) (const XC(func_type) *p, int np, const FLOAT *rho, FLOAT *vrho); +void XC(lda_fxc) (const XC(func_type) *p, int np, const FLOAT *rho, FLOAT *v2rho2); +void XC(lda_kxc) (const XC(func_type) *p, int np, const FLOAT *rho, FLOAT *v3rho3); + +void XC(lda_x_set_params) (XC(func_type) *p, FLOAT alpha, int relativistic, FLOAT omega); +void XC(lda_x_1d_set_params) (XC(func_type) *p, int interaction, FLOAT bb); +void XC(lda_c_1d_csc_set_params) (XC(func_type) *p, int interaction, FLOAT bb); +void XC(lda_c_xalpha_set_params) (XC(func_type) *p, FLOAT alpha); +void XC(lda_c_2d_prm_set_params) (XC(func_type) *p, FLOAT N); +void XC(lda_c_vwn_set_params) (XC(func_type) *p, int spin_interpolation); + + +int XC(gga_init)(XC(func_type) *p, const XC(func_info_type) *info, int nspin); +void XC(gga_end) (XC(func_type) *p); +void XC(gga) (const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, + FLOAT *v2rho2, FLOAT *v2rhosigma, FLOAT *v2sigma2, + FLOAT *v3rho3, FLOAT *v3rho2sigma, FLOAT *v3rhosigma2, FLOAT *v3sigma3); +void XC(gga_exc)(const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *zk); +void XC(gga_exc_vxc)(const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma); +void XC(gga_vxc)(const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *vrho, FLOAT *vsigma); +void XC(gga_fxc)(const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *v2rho2, FLOAT *v2rhosigma, FLOAT *v2sigma2); +void XC(gga_kxc)(const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *v3rho3, FLOAT *v3rho2sigma, FLOAT *v3rhosigma2, FLOAT *v3sigma3); + +void XC(gga_lb_modified) (const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT r, FLOAT *vrho); + +void XC(gga_x_b88_set_params) (XC(func_type) *p, FLOAT beta, FLOAT gamma); +void XC(gga_x_pbe_set_params) (XC(func_type) *p, FLOAT kappa, FLOAT mu); +void XC(gga_c_pbe_set_params) (XC(func_type) *p, FLOAT beta); +void XC(gga_x_pw91_set_params) (XC(func_type) *p, FLOAT a, FLOAT b, FLOAT c, FLOAT d, FLOAT f, FLOAT alpha, FLOAT expo); +void XC(gga_x_pw91_set_params2) (XC(func_type) *p, FLOAT bt, FLOAT alpha, FLOAT expo); +void XC(gga_x_rpbe_set_params) (XC(func_type) *p, FLOAT kappa, FLOAT mu); +void XC(gga_x_optx_set_params) (XC(func_type) *p, FLOAT a, FLOAT b, FLOAT gamma); +void XC(gga_c_lyp_set_params) (XC(func_type) *p, FLOAT A, FLOAT B, FLOAT c, FLOAT d); +void XC(gga_lb_set_params) (XC(func_type) *p, int modified, FLOAT threshold, FLOAT ip, FLOAT qtot); +void XC(gga_k_tflw_set_params) (XC(func_type) *p, FLOAT gamma, FLOAT lambda, FLOAT N); +void XC(gga_x_2d_b88_set_params) (XC(func_type) *p, FLOAT beta); +void XC(gga_x_wpbeh_set_params) (XC(func_type) *p, FLOAT omega); +void XC(gga_x_hjs_set_params) (XC(func_type) *p, FLOAT omega); +void XC(gga_x_ityh_set_params) (XC(func_type) *p, int func_id, FLOAT omega); +void XC(gga_x_sfat_set_params) (XC(func_type) *p, int func_id, FLOAT omega); +void XC(gga_x_ssb_sw_set_params) (XC(func_type) *p, FLOAT A, FLOAT B, FLOAT C, FLOAT D, FLOAT E); +void XC(gga_x_kt_set_params) (XC(func_type) *p, FLOAT gamma, FLOAT delta); + +FLOAT XC(gga_ak13_get_asymptotic) (FLOAT homo); + +FLOAT XC(hyb_exx_coef)(const XC(func_type) *p); +void XC(hyb_cam_coef)(const XC(func_type) *p, FLOAT *omega, FLOAT *alpha, FLOAT *beta); + +void XC(hyb_gga_xc_hse_set_params) (XC(func_type) *p, FLOAT alpha, FLOAT omega); +void XC(hyb_gga_xc_pbeh_set_params)(XC(func_type) *p, FLOAT alpha); + +/* the meta-GGAs */ +int XC(mgga_init)(XC(func_type) *p, const XC(func_info_type) *info, int nspin); +void XC(mgga_end) (XC(func_type) *p); +void XC(mgga) (const XC(func_type) *p, int np, + const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl, const FLOAT *tau, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, FLOAT *vlapl, FLOAT *vtau, + FLOAT *v2rho2, FLOAT *v2sigma2, FLOAT *v2lapl2, FLOAT *v2tau2, + FLOAT *v2rhosigma, FLOAT *v2rholapl, FLOAT *v2rhotau, + FLOAT *v2sigmalapl, FLOAT *v2sigmatau, FLOAT *v2lapltau); +void XC(mgga_exc) (const XC(func_type) *p, int np, + const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl, const FLOAT *tau, + FLOAT *zk); +void XC(mgga_exc_vxc)(const XC(func_type) *p, int np, + const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl, const FLOAT *tau, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, FLOAT *vlapl, FLOAT *vtau); +void XC(mgga_vxc) (const XC(func_type) *p, int np, + const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl, const FLOAT *tau, + FLOAT *vrho, FLOAT *vsigma, FLOAT *vlapl, FLOAT *vtau); +void XC(mgga_fxc) (const XC(func_type) *p, int np, + const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl, const FLOAT *tau, + FLOAT *v2rho2, FLOAT *v2sigma2, FLOAT *v2lapl2, FLOAT *v2tau2, + FLOAT *v2rhosigma, FLOAT *v2rholapl, FLOAT *v2rhotau, + FLOAT *v2sigmalapl, FLOAT *v2sigmatau, FLOAT *v2lapltau); + +void XC(mgga_x_tb09_set_params)(XC(func_type) *p, FLOAT c); +void XC(mgga_x_tpss_set_params)(XC(func_type) *p, FLOAT b, FLOAT c, FLOAT e, FLOAT kappa, FLOAT mu); +void XC(mgga_c_bc95_set_params)(XC(func_type) *p, FLOAT css, FLOAT copp); +void XC(mgga_c_pkzb_set_params)(XC(func_type) *p, FLOAT beta, FLOAT d, FLOAT C0_0, FLOAT C0_1, FLOAT C0_2, FLOAT C0_3); + +/* Functionals that are defined as mixtures of others */ +void XC(mix_func) + (const XC(func_type) *func, int np, + const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl, const FLOAT *tau, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, FLOAT *vlapl, FLOAT *vtau, + FLOAT *v2rho2, FLOAT *v2sigma2, FLOAT *v2lapl2, FLOAT *v2tau2, + FLOAT *v2rhosigma, FLOAT *v2rholapl, FLOAT *v2rhotau, + FLOAT *v2sigmalapl, FLOAT *v2sigmatau, FLOAT *v2lapltau); + +#include "xc_unconfig.h" + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/libxc-2.2.0/src/xc_config.h b/libxc-2.2.0/src/xc_config.h new file mode 100644 index 000000000..808f12dad --- /dev/null +++ b/libxc-2.2.0/src/xc_config.h @@ -0,0 +1,69 @@ +#ifdef SINGLE_PRECISION +# define FLOAT float +# define POW powf +# define LOG logf +# define ABS fabsf +# define EXP expf +# define ERF erff +# define ERFC erfcf +# define SIN sinf +# define COS cosf +# define TAN tanf +# define ATAN atanf +# define ATAN2 atan2f +# define ASINH asinhf + +#ifdef HAVE_SQRTF +# define SQRT sqrtf +#else +# define SQRT sqrt +#endif + +#ifdef HAVE_CBRTF +#define CBRT cbrtf +#elif defined(HAVE_CBRT) +#define CBRT cbrt +#else +#define CBRT(x) powf((x), 1.0/3.0) +#endif + +# define XC(x) xc_s_ ## x +# define XC_U(X) XC_S_ ## X +# define FLOAT_EPSILON FLT_EPSILON +# define FLOAT_MIN FLT_MIN +# define FLOAT_MAX FLT_MAX + +#else +/* Double precision */ + +# define FLOAT double +# define POW pow +# define LOG log +# define ABS fabs +# define EXP exp +# define ERF erf +# define ERFC erfc +# define SIN sin +# define COS cos +# define TAN tan +# define ATAN atan +# define ATAN2 atan2 +# define ASINH asinh +# define SQRT sqrt + +#ifdef HAVE_CBRT +#define CBRT cbrt +#else +#define CBRT(x) pow((x), 1.0/3.0) +#endif + +# define XC(x) xc_ ## x +# define XC_U(X) XC_ ## X +# define FLOAT_EPSILON DBL_EPSILON +# define FLOAT_MIN DBL_MIN +# define FLOAT_MAX DBL_MAX + +#endif + +#define XC_FC_FUNC2(a,b) FC_FUNC_(a,b) +#define XC_FC_FUNC(a,b) XC_FC_FUNC2(XC(a), XC_U(b)) diff --git a/libxc-2.2.0/src/xc_f.c b/libxc-2.2.0/src/xc_f.c new file mode 100644 index 000000000..18b72676d --- /dev/null +++ b/libxc-2.2.0/src/xc_f.c @@ -0,0 +1,421 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include + +#include "config.h" + +#ifdef HAVE_FORTRAN + +#include "xc.h" +#include "string_f.h" + +/* xc_config.h needs to be included to use FLOAT and related macros*/ +#include "xc_config.h" + +/* version */ +void XC_FC_FUNC(f90_version, F90_VERSION) + (int *major, int *minor) +{ + XC(version)(major, minor); +} + + +/* info */ +CC_FORTRAN_INT XC_FC_FUNC(f90_info_number, F90_INFO_NUMBER) + (void **info) +{ + return (CC_FORTRAN_INT) ((XC(func_info_type) *)(*info))->number; +} + + +CC_FORTRAN_INT XC_FC_FUNC(f90_info_kind, F90_INFO_KIND) + (void **info) +{ + return (CC_FORTRAN_INT) ((XC(func_info_type) *)(*info))->kind; +} + + +void XC_FC_FUNC(f90_info_name, F90_INFO_NAME) + (void **info, STR_F_TYPE s STR_ARG1) +{ + TO_F_STR1(((XC(func_info_type) *)(*info))->name, s); +} + + +CC_FORTRAN_INT XC_FC_FUNC(f90_info_family, F90_INFO_FAMILY) + (void **info) +{ + return (CC_FORTRAN_INT) ((XC(func_info_type) *)(*info))->family; +} + + +CC_FORTRAN_INT XC_FC_FUNC(f90_info_flags, F90_INFO_FLAGS) + (void **info) +{ + return (CC_FORTRAN_INT) ((XC(func_info_type) *)(*info))->flags; +} + + +void XC_FC_FUNC(f90_info_refs, F90_INFO_REFS) + (void **info, CC_FORTRAN_INT *number, char **s, STR_F_TYPE ref_f STR_ARG1) +{ + char *c, ref[256]; /* hopefully no ref is longer than 256 characters ;) */ + XC(func_info_type) *func_p = (XC(func_info_type) *)(*info); + + if(*number == 0) *s = func_p->refs; + + if(*s == NULL || **s == '\0'){ + *number = -1; + return; + } + + for(c=ref; **s!='\0' && **s!='\n'; (*s)++, c++) + *c = **s; + *c = '\0'; + if(**s=='\n') (*s)++; + + TO_F_STR1(ref, ref_f); + + (*number)++; + fflush(stdout); +} + + +void XC_FC_FUNC(f90_functional_get_name, F90_FUNCTIONAL_GET_NAME) + (CC_FORTRAN_INT *func_number, STR_F_TYPE func_string STR_ARG1) +{ + char *name; + + name = XC(functional_get_name)(*func_number); + if ( name == NULL ) name = strdup("unknown"); + + TO_F_STR1(name, func_string); + free(name); +} + + +CC_FORTRAN_INT XC_FC_FUNC(f90_functional_get_number, F90_FUNCTIONAL_GET_NUMBER) + (STR_F_TYPE func_string STR_ARG1) +{ + char *name; + int ret; + + TO_C_STR1(func_string, name); + + ret = XC(functional_get_number)(name); + free(name); + + return (CC_FORTRAN_INT) ret; +} + + +/* functionals */ +CC_FORTRAN_INT XC_FC_FUNC(f90_family_from_id, F90_FAMILY_FROM_ID) + (CC_FORTRAN_INT *functional) +{ + return (CC_FORTRAN_INT) XC(family_from_id)((int) (*functional), NULL, NULL); +} + + +/* Standard initialization */ +void XC_FC_FUNC(f90_func_init, F90_FUNC_INIT) + (void **p, void **info, CC_FORTRAN_INT *functional, CC_FORTRAN_INT *nspin) +{ + XC(func_type) *func_p; + + func_p = (XC(func_type) *)malloc(sizeof(XC(func_type))); + XC(func_init)(func_p, (int) (*functional), (int) (*nspin)); + + *p = (void *) func_p; + *info = (void *)(func_p->info); +} + + +void XC_FC_FUNC(f90_func_end, F90_FUNC_END) + (void **p) +{ + XC(func_end)((XC(func_type) *)(*p)); + free(*p); + *p = NULL; +} + + +/* LDAs */ + +void XC_FC_FUNC(f90_lda, F90_LDA) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, + FLOAT *zk, FLOAT *vrho, FLOAT *v2rho2, FLOAT *v3rho3) +{ + XC(lda)((XC(func_type) *)(*p), *np, rho, zk, vrho, v2rho2, v3rho3); +} + + +void XC_FC_FUNC(f90_lda_exc, F90_LDA_EXC) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, + FLOAT *zk) +{ + XC(lda)((XC(func_type) *)(*p), *np, rho, zk, NULL, NULL, NULL); +} + + +void XC_FC_FUNC(f90_lda_exc_vxc, F90_LDA_EXC_VXC) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, + FLOAT *zk, FLOAT *vrho) +{ + XC(lda)((XC(func_type) *)(*p), *np, rho, zk, vrho, NULL, NULL); +} + + +void XC_FC_FUNC(f90_lda_vxc, F90_LDA_VXC) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, + FLOAT *vrho) +{ + XC(lda)((XC(func_type) *)(*p), *np, rho, NULL, vrho, NULL, NULL); +} + + +void XC_FC_FUNC(f90_lda_fxc, F90_LDA_FXC) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, + FLOAT *v2rho2) +{ + XC(lda)((XC(func_type) *)(*p), *np, rho, NULL, NULL, v2rho2, NULL); +} + + +void XC_FC_FUNC(f90_lda_kxc, F90_LDA_KXC) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, + FLOAT *v3rho3) +{ + XC(lda)((XC(func_type) *)(*p), *np, rho, NULL, NULL, NULL, v3rho3); +} + + +/* Now come some special initializations */ + +/* parameter of LDA_1D */ +void XC_FC_FUNC(f90_lda_x_1d_set_par, F90_LDA_X_1D_SET_PAR) + (void **p, CC_FORTRAN_INT *interaction, FLOAT *bb) +{ + XC(lda_x_1d_set_params)((XC(func_type) *)(*p), *interaction, *bb); +} + +/* parameter of Xalpha */ +void XC_FC_FUNC(f90_lda_c_xalpha_set_par, F90_LDA_C_XALPHA_SET_PAR) + (void **p, FLOAT *alpha) +{ + XC(lda_c_xalpha_set_params)((XC(func_type) *)(*p), *alpha); +} + +/* relativistic option of LDA_X */ +void XC_FC_FUNC(f90_lda_x_set_par, F90_LDA_X_SET_PAR) + (void **p, FLOAT *alpha, CC_FORTRAN_INT *relativistic, FLOAT *omega) +{ + XC(lda_x_set_params)((XC(func_type) *)(*p), *alpha, *relativistic, *omega); +} + +/* parameter of CSC */ +void XC_FC_FUNC(f90_lda_c_1d_csc_set_par, F90_LDA_C_1D_CSC_SET_PAR) + (void **p, CC_FORTRAN_INT *interaction, FLOAT *bb) +{ + XC(lda_c_1d_csc_set_params)((XC(func_type) *)(*p), *interaction, *bb); +} + +/* parameter of PRM */ +void XC_FC_FUNC(f90_lda_c_2d_prm_set_par, F90_LDA_C_2D_PRM_SET_PAR) + (void **p, FLOAT *N) +{ + XC(lda_c_2d_prm_set_params)((XC(func_type) *)(*p), *N); +} + + +/* GGAs */ + +void XC_FC_FUNC(f90_gga, F90_GGA) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, FLOAT *sigma, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, + FLOAT *v2rho2, FLOAT *v2rhosigma, FLOAT *v2sigma2, + FLOAT *v3rho3, FLOAT *v3rho2sigma, FLOAT *v3rhosigma2, FLOAT *v3sigma3) +{ + XC(gga)((XC(func_type) *)(*p), *np, rho, sigma, zk, vrho, vsigma, + v2rho2, v2rhosigma, v2sigma2, v3rho3, v3rho2sigma, v3rhosigma2, v3sigma3); +} + +void XC_FC_FUNC(f90_gga_exc, F90_GGA_EXC) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, FLOAT *sigma, + FLOAT *zk) +{ + XC(gga)((XC(func_type) *)(*p), *np, rho, sigma, zk, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL); +} + +void XC_FC_FUNC(f90_gga_exc_vxc, F90_GGA_EXC_VXC) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, FLOAT *sigma, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma) +{ + XC(gga)((XC(func_type) *)(*p), *np, rho, sigma, zk, vrho, vsigma, + NULL, NULL, NULL, NULL, NULL, NULL, NULL); +} + +void XC_FC_FUNC(f90_gga_vxc, F90_GGA_VXC) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, FLOAT *sigma, + FLOAT *vrho, FLOAT *vsigma) +{ + XC(gga)((XC(func_type) *)(*p), *np, rho, sigma, NULL, vrho, vsigma, + NULL, NULL, NULL, NULL, NULL, NULL, NULL); +} + +void XC_FC_FUNC(f90_gga_fxc, F90_GGA_FXC) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, FLOAT *sigma, + FLOAT *v2rho2, FLOAT *v2rhosigma, FLOAT *v2sigma2) +{ + XC(gga)((XC(func_type) *)(*p), *np, rho, sigma, NULL, NULL, NULL, + v2rho2, v2rhosigma, v2sigma2, NULL, NULL, NULL, NULL); +} + +void XC_FC_FUNC(f90_gga_kxc, F90_GGA_KXC) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, FLOAT *sigma, + FLOAT *v3rho3, FLOAT *v3rho2sigma, FLOAT *v3rhosigma2, FLOAT *v3sigma3) +{ + XC(gga)((XC(func_type) *)(*p), *np, rho, sigma, NULL, NULL, NULL, + NULL, NULL, NULL, v3rho3, v3rho2sigma, v3rhosigma2, v3sigma3); +} + + +/* the van Leeuwen & Baerends functional is special */ +void XC_FC_FUNC(f90_gga_lb_set_par, F90_GGA_LB_SET_PAR) + (void **p, CC_FORTRAN_INT *modified, FLOAT *threshold, FLOAT *ip, FLOAT *qtot) +{ + XC(gga_lb_set_params)((XC(func_type) *)(*p), *modified, *threshold, *ip, *qtot); +} + +void XC_FC_FUNC(f90_gga_lb_modified, F90_GGA_LB_MODIFIED) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, FLOAT *sigma, FLOAT *r, FLOAT *vrho) +{ + XC(gga_lb_modified)((XC(func_type) *)(*p), *np, rho, sigma, *r, vrho); +} + +void XC_FC_FUNC(f90_gga_x_wpbeh_set_par, F90_GGA_X_WPBEH_SET_PAR) + (void **p, FLOAT *omega) +{ + XC(gga_x_wpbeh_set_params)((XC(func_type) *)(*p), *omega); +} + +void XC_FC_FUNC(f90_gga_x_hjs_set_par, F90_GGA_X_HJS_SET_PAR) + (void **p, FLOAT *omega) +{ + XC(gga_x_hjs_set_params)((XC(func_type) *)(*p), *omega); +} + +void XC_FC_FUNC(f90_gga_ak13_get_asymptotic, F90_GGA_AK13_GET_ASYMPTOTIC) + (FLOAT *homo, FLOAT *asymp) +{ + *asymp = XC(gga_ak13_get_asymptotic)(*homo); +} + +void XC_FC_FUNC(f90_hyb_exx_coef, F90_HYB_EXX_COEF) + (void **p, FLOAT *coef) +{ + *coef = XC(hyb_exx_coef)((XC(func_type) *)(*p)); +} + +void XC_FC_FUNC(f90_hyb_cam_coef, F90_HYB_CAM_COEF) + (void **p, FLOAT *omega, FLOAT *alpha, FLOAT *beta) +{ + XC(hyb_cam_coef)((XC(func_type) *)(*p), omega, alpha, beta); +} + +void XC_FC_FUNC(f90_hyb_gga_xc_hse_set_par, F90_HYB_GGA_XC_HSE_SET_PAR) + (void **p, FLOAT *beta, FLOAT *omega) +{ + XC(hyb_gga_xc_hse_set_params)((XC(func_type) *)(*p), *beta, *omega); +} + +void XC_FC_FUNC(f90_hyb_gga_xc_pbeh_set_par, F90_HYB_GGA_XC_PBEH_SET_PAR) + (void **p, FLOAT *alpha) +{ + XC(hyb_gga_xc_pbeh_set_params)((XC(func_type) *)(*p), *alpha); +} + +/* meta-GGAs */ + +void XC_FC_FUNC(f90_mgga, F90_MGGA) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, FLOAT *sigma, FLOAT *lapl, FLOAT *tau, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, FLOAT *vlapl, FLOAT *vtau, + FLOAT *v2rho2, FLOAT *v2sigma2, FLOAT *v2lapl2, FLOAT *v2tau2, + FLOAT *v2rhosigma, FLOAT *v2rholapl, FLOAT *v2rhotau, + FLOAT *v2sigmalapl, FLOAT *v2sigmatau, FLOAT *v2lapltau) +{ + XC(mgga)((XC(func_type) *)(*p), *np, rho, sigma, lapl, tau, + zk, vrho, vsigma, vlapl, vtau, + v2rho2, v2sigma2, v2lapl2, v2tau2, v2rhosigma, v2rholapl, v2rhotau, + v2sigmalapl, v2sigmatau, v2lapltau); + +} + +void XC_FC_FUNC(f90_mgga_exc, F90_MGGA_EXC) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, FLOAT *sigma, FLOAT *lapl, FLOAT *tau, + FLOAT *zk) +{ + XC(mgga)((XC(func_type) *)(*p), *np, rho, sigma, lapl, tau, + zk, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +} + +void XC_FC_FUNC(f90_mgga_exc_vxc, F90_MGGA_EXC_VXC) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, FLOAT *sigma, FLOAT *lapl, FLOAT *tau, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, FLOAT *vlapl, FLOAT *vtau) +{ + XC(mgga)((XC(func_type) *)(*p), *np, rho, sigma, lapl, tau, + zk, vrho, vsigma, vlapl, vtau, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +} + +void XC_FC_FUNC(f90_mgga_vxc, F90_MGGA_VXC) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, FLOAT *sigma, FLOAT *lapl, FLOAT *tau, + FLOAT *vrho, FLOAT *vsigma, FLOAT *vlapl, FLOAT *vtau) +{ + XC(mgga)((XC(func_type) *)(*p), *np, rho, sigma, lapl, tau, + NULL, vrho, vsigma, vlapl, vtau, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +} + +void XC_FC_FUNC(f90_mgga_fxc, F90_MGGA_FXC) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, FLOAT *sigma, FLOAT *lapl, FLOAT *tau, + FLOAT *v2rho2, FLOAT *v2sigma2, FLOAT *v2lapl2, FLOAT *v2tau2, + FLOAT *v2rhosigma, FLOAT *v2rholapl, FLOAT *v2rhotau, + FLOAT *v2sigmalapl, FLOAT *v2sigmatau, FLOAT *v2lapltau) +{ + XC(mgga)((XC(func_type) *)(*p), *np, rho, sigma, lapl, tau, + NULL, NULL, NULL, NULL, NULL, + v2rho2, v2sigma2, v2lapl2, v2tau2, v2rhosigma, v2rholapl, v2rhotau, + v2sigmalapl, v2sigmatau, v2lapltau); +} + +/* parameter of TP09 */ +void XC_FC_FUNC(f90_mgga_x_tb09_set_par, F90_MGGA_X_TB09_SET_PAR) + (void **p, FLOAT *cc) +{ + XC(mgga_x_tb09_set_params)((XC(func_type) *)(*p), *cc); +} + + +#endif diff --git a/libxc-2.2.0/src/xc_s.h b/libxc-2.2.0/src/xc_s.h new file mode 100644 index 000000000..afc975c15 --- /dev/null +++ b/libxc-2.2.0/src/xc_s.h @@ -0,0 +1,28 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef _XC_S_H +#define _XC_S_H + +#ifndef SINGLE_PRECISION +#define SINGLE_PRECISION +#endif + +#include "xc.h" + +#endif diff --git a/libxc-2.2.0/src/xc_unconfig.h b/libxc-2.2.0/src/xc_unconfig.h new file mode 100644 index 000000000..ced92c85e --- /dev/null +++ b/libxc-2.2.0/src/xc_unconfig.h @@ -0,0 +1,18 @@ +#undef FLOAT +#undef POW +#undef LOG +#undef ABS +#undef EXP +#undef ERF +#undef ERFC +#undef SIN +#undef COS +#undef TAN +#undef ATAN +#undef ATAN2 +#undef ASINH +#undef SQRT +#undef CBRT +#undef FLOAT_EPSILON +#undef FLOAT_MIN +#undef FLOAT_MAX diff --git a/libxc-2.2.0/test-driver b/libxc-2.2.0/test-driver new file mode 100755 index 000000000..32bf39e83 --- /dev/null +++ b/libxc-2.2.0/test-driver @@ -0,0 +1,127 @@ +#! /bin/sh +# test-driver - basic testsuite driver script. + +scriptversion=2012-06-27.10; # UTC + +# Copyright (C) 2011-2013 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +# Make unconditional expansion of undefined variables an error. This +# helps a lot in preventing typo-related bugs. +set -u + +usage_error () +{ + echo "$0: $*" >&2 + print_usage >&2 + exit 2 +} + +print_usage () +{ + cat <$log_file 2>&1 +estatus=$? +if test $enable_hard_errors = no && test $estatus -eq 99; then + estatus=1 +fi + +case $estatus:$expect_failure in + 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; + 0:*) col=$grn res=PASS recheck=no gcopy=no;; + 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; + 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; + *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; + *:*) col=$red res=FAIL recheck=yes gcopy=yes;; +esac + +# Report outcome to console. +echo "${col}${res}${std}: $test_name" + +# Register the test result, and other relevant metadata. +echo ":test-result: $res" > $trs_file +echo ":global-test-result: $res" >> $trs_file +echo ":recheck: $recheck" >> $trs_file +echo ":copy-in-global-log: $gcopy" >> $trs_file + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/libxc-2.2.0/testsuite/Makefile.am b/libxc-2.2.0/testsuite/Makefile.am new file mode 100644 index 000000000..7013a9fd9 --- /dev/null +++ b/libxc-2.2.0/testsuite/Makefile.am @@ -0,0 +1,45 @@ +## Process this file with automake to produce Makefile.in + +## Copyright (C) 2002 M. Marques, A. Castro, A. Rubio, G. Bertsch +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU Lesser General Public License as published by +## the Free Software Foundation; either version 2, or (at your option) +## any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. +## +## $Id$ + +noinst_PROGRAMS = xc-get_data xc-consistency xc-regression xc-error +dist_noinst_SCRIPTS = xc-run_testsuite xc-reference.pl +TESTS = xc-run_testsuite +TESTS_ENVIRONMENT = buildir=$(top_builddir)/testsuite + +xc_get_data_SOURCES = xc-get_data.c +xc_get_data_LDADD = -L../src/ -lxc -lm +xc_get_data_CPPFLAGS = -I$(srcdir)/../src/ -I$(top_builddir)/src + +xc_consistency_SOURCES = xc-consistency.c +xc_consistency_LDADD = -L../src/ -lxc -lm +xc_consistency_CPPFLAGS = -I$(srcdir)/../src/ -I$(top_builddir)/src + +xc_regression_SOURCES = xc-regression.c +xc_regression_LDADD = -L../src/ -lxc -lm +xc_regression_CPPFLAGS = -I$(srcdir)/../src/ -I$(top_builddir)/src + +xc_error_SOURCES = xc-error.c +xc_error_LDADD = -lm +xc_error_CPPFLAGS = -I$(srcdir)/../src/ -I$(top_builddir)/src + +dist_noinst_DATA = $(srcdir)/df_repo/*.data $(srcdir)/regression/*.pol.bz2 $(srcdir)/regression/*.unpol.bz2 $(srcdir)/input/* + +CLEANFILES = *~ *.bak diff --git a/libxc-2.2.0/testsuite/Makefile.in b/libxc-2.2.0/testsuite/Makefile.in new file mode 100644 index 000000000..67ea1be85 --- /dev/null +++ b/libxc-2.2.0/testsuite/Makefile.in @@ -0,0 +1,1061 @@ +# Makefile.in generated by automake 1.13.4 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +noinst_PROGRAMS = xc-get_data$(EXEEXT) xc-consistency$(EXEEXT) \ + xc-regression$(EXEEXT) xc-error$(EXEEXT) +subdir = testsuite +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(dist_noinst_SCRIPTS) $(top_srcdir)/depcomp \ + $(dist_noinst_DATA) $(top_srcdir)/test-driver +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ac_prog_sed.m4 \ + $(top_srcdir)/m4/ax_f90_module_extension.m4 \ + $(top_srcdir)/m4/fc_integer.m4 $(top_srcdir)/m4/fcflags.m4 \ + $(top_srcdir)/m4/fortran.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +PROGRAMS = $(noinst_PROGRAMS) +am_xc_consistency_OBJECTS = xc_consistency-xc-consistency.$(OBJEXT) +xc_consistency_OBJECTS = $(am_xc_consistency_OBJECTS) +xc_consistency_DEPENDENCIES = +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +am_xc_error_OBJECTS = xc_error-xc-error.$(OBJEXT) +xc_error_OBJECTS = $(am_xc_error_OBJECTS) +xc_error_DEPENDENCIES = +am_xc_get_data_OBJECTS = xc_get_data-xc-get_data.$(OBJEXT) +xc_get_data_OBJECTS = $(am_xc_get_data_OBJECTS) +xc_get_data_DEPENDENCIES = +am_xc_regression_OBJECTS = xc_regression-xc-regression.$(OBJEXT) +xc_regression_OBJECTS = $(am_xc_regression_OBJECTS) +xc_regression_DEPENDENCIES = +SCRIPTS = $(dist_noinst_SCRIPTS) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(xc_consistency_SOURCES) $(xc_error_SOURCES) \ + $(xc_get_data_SOURCES) $(xc_regression_SOURCES) +DIST_SOURCES = $(xc_consistency_SOURCES) $(xc_error_SOURCES) \ + $(xc_get_data_SOURCES) $(xc_regression_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +DATA = $(dist_noinst_DATA) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__tty_colors_dummy = \ + mgn= red= grn= lgn= blu= brg= std=; \ + am__color_tests=no +am__tty_colors = { \ + $(am__tty_colors_dummy); \ + if test "X$(AM_COLOR_TESTS)" = Xno; then \ + am__color_tests=no; \ + elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ + am__color_tests=yes; \ + elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ + am__color_tests=yes; \ + fi; \ + if test $$am__color_tests = yes; then \ + red=''; \ + grn=''; \ + lgn=''; \ + blu=''; \ + mgn=''; \ + brg=''; \ + std=''; \ + fi; \ +} +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__recheck_rx = ^[ ]*:recheck:[ ]* +am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* +am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* +# A command that, given a newline-separated list of test names on the +# standard input, print the name of the tests that are to be re-run +# upon "make recheck". +am__list_recheck_tests = $(AWK) '{ \ + recheck = 1; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + { \ + if ((getline line2 < ($$0 ".log")) < 0) \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ + { \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ + { \ + break; \ + } \ + }; \ + if (recheck) \ + print $$0; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# A command that, given a newline-separated list of test names on the +# standard input, create the global log from their .trs and .log files. +am__create_global_log = $(AWK) ' \ +function fatal(msg) \ +{ \ + print "fatal: making $@: " msg | "cat >&2"; \ + exit 1; \ +} \ +function rst_section(header) \ +{ \ + print header; \ + len = length(header); \ + for (i = 1; i <= len; i = i + 1) \ + printf "="; \ + printf "\n\n"; \ +} \ +{ \ + copy_in_global_log = 1; \ + global_test_result = "RUN"; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".trs"); \ + if (line ~ /$(am__global_test_result_rx)/) \ + { \ + sub("$(am__global_test_result_rx)", "", line); \ + sub("[ ]*$$", "", line); \ + global_test_result = line; \ + } \ + else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ + copy_in_global_log = 0; \ + }; \ + if (copy_in_global_log) \ + { \ + rst_section(global_test_result ": " $$0); \ + while ((rc = (getline line < ($$0 ".log"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".log"); \ + print line; \ + }; \ + printf "\n"; \ + }; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# Restructured Text title. +am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } +# Solaris 10 'make', and several other traditional 'make' implementations, +# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it +# by disabling -e (using the XSI extension "set +e") if it's set. +am__sh_e_setup = case $$- in *e*) set +e;; esac +# Default flags passed to test drivers. +am__common_driver_flags = \ + --color-tests "$$am__color_tests" \ + --enable-hard-errors "$$am__enable_hard_errors" \ + --expect-failure "$$am__expect_failure" +# To be inserted before the command running the test. Creates the +# directory for the log if needed. Stores in $dir the directory +# containing $f, in $tst the test, in $log the log. Executes the +# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and +# passes TESTS_ENVIRONMENT. Set up options for the wrapper that +# will run the test scripts (or their associated LOG_COMPILER, if +# thy have one). +am__check_pre = \ +$(am__sh_e_setup); \ +$(am__vpath_adj_setup) $(am__vpath_adj) \ +$(am__tty_colors); \ +srcdir=$(srcdir); export srcdir; \ +case "$@" in \ + */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ + *) am__odir=.;; \ +esac; \ +test "x$$am__odir" = x"." || test -d "$$am__odir" \ + || $(MKDIR_P) "$$am__odir" || exit $$?; \ +if test -f "./$$f"; then dir=./; \ +elif test -f "$$f"; then dir=; \ +else dir="$(srcdir)/"; fi; \ +tst=$$dir$$f; log='$@'; \ +if test -n '$(DISABLE_HARD_ERRORS)'; then \ + am__enable_hard_errors=no; \ +else \ + am__enable_hard_errors=yes; \ +fi; \ +case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ + am__expect_failure=yes;; \ + *) \ + am__expect_failure=no;; \ +esac; \ +$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) +# A shell command to get the names of the tests scripts with any registered +# extension removed (i.e., equivalently, the names of the test logs, with +# the '.log' extension removed). The result is saved in the shell variable +# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, +# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", +# since that might cause problem with VPATH rewrites for suffix-less tests. +# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. +am__set_TESTS_bases = \ + bases='$(TEST_LOGS)'; \ + bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ + bases=`echo $$bases` +RECHECK_LOGS = $(TEST_LOGS) +AM_RECURSIVE_TARGETS = check recheck +TEST_SUITE_LOG = test-suite.log +TEST_EXTENSIONS = @EXEEXT@ .test +LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver +LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) +am__set_b = \ + case '$@' in \ + */*) \ + case '$*' in \ + */*) b='$*';; \ + *) b=`echo '$@' | sed 's/\.log$$//'`; \ + esac;; \ + *) \ + b='$*';; \ + esac +am__test_logs1 = $(TESTS:=.log) +am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) +TEST_LOGS = $(am__test_logs2:.test.log=.log) +TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver +TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ + $(TEST_LOG_FLAGS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F90_ACCEPTS_LINE_NUMBERS = @F90_ACCEPTS_LINE_NUMBERS@ +FC = @FC@ +FCCPP = @FCCPP@ +FCFLAGS = @FCFLAGS@ +FCFLAGS_f90 = @FCFLAGS_f90@ +FCLIBS = @FCLIBS@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LONG_LINES = @LONG_LINES@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +XC_LT_VERSION = @XC_LT_VERSION@ +XC_MAJOR_VERSION = @XC_MAJOR_VERSION@ +XC_MINOR_VERSION = @XC_MINOR_VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_FC = @ac_ct_FC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +ax_cv_f90_modext = @ax_cv_f90_modext@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +dist_noinst_SCRIPTS = xc-run_testsuite xc-reference.pl +TESTS = xc-run_testsuite +TESTS_ENVIRONMENT = buildir=$(top_builddir)/testsuite +xc_get_data_SOURCES = xc-get_data.c +xc_get_data_LDADD = -L../src/ -lxc -lm +xc_get_data_CPPFLAGS = -I$(srcdir)/../src/ -I$(top_builddir)/src +xc_consistency_SOURCES = xc-consistency.c +xc_consistency_LDADD = -L../src/ -lxc -lm +xc_consistency_CPPFLAGS = -I$(srcdir)/../src/ -I$(top_builddir)/src +xc_regression_SOURCES = xc-regression.c +xc_regression_LDADD = -L../src/ -lxc -lm +xc_regression_CPPFLAGS = -I$(srcdir)/../src/ -I$(top_builddir)/src +xc_error_SOURCES = xc-error.c +xc_error_LDADD = -lm +xc_error_CPPFLAGS = -I$(srcdir)/../src/ -I$(top_builddir)/src +dist_noinst_DATA = $(srcdir)/df_repo/*.data $(srcdir)/regression/*.pol.bz2 $(srcdir)/regression/*.unpol.bz2 $(srcdir)/input/* +CLEANFILES = *~ *.bak +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu testsuite/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu testsuite/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +xc-consistency$(EXEEXT): $(xc_consistency_OBJECTS) $(xc_consistency_DEPENDENCIES) $(EXTRA_xc_consistency_DEPENDENCIES) + @rm -f xc-consistency$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(xc_consistency_OBJECTS) $(xc_consistency_LDADD) $(LIBS) + +xc-error$(EXEEXT): $(xc_error_OBJECTS) $(xc_error_DEPENDENCIES) $(EXTRA_xc_error_DEPENDENCIES) + @rm -f xc-error$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(xc_error_OBJECTS) $(xc_error_LDADD) $(LIBS) + +xc-get_data$(EXEEXT): $(xc_get_data_OBJECTS) $(xc_get_data_DEPENDENCIES) $(EXTRA_xc_get_data_DEPENDENCIES) + @rm -f xc-get_data$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(xc_get_data_OBJECTS) $(xc_get_data_LDADD) $(LIBS) + +xc-regression$(EXEEXT): $(xc_regression_OBJECTS) $(xc_regression_DEPENDENCIES) $(EXTRA_xc_regression_DEPENDENCIES) + @rm -f xc-regression$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(xc_regression_OBJECTS) $(xc_regression_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xc_consistency-xc-consistency.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xc_error-xc-error.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xc_get_data-xc-get_data.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xc_regression-xc-regression.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +xc_consistency-xc-consistency.o: xc-consistency.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_consistency_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xc_consistency-xc-consistency.o -MD -MP -MF $(DEPDIR)/xc_consistency-xc-consistency.Tpo -c -o xc_consistency-xc-consistency.o `test -f 'xc-consistency.c' || echo '$(srcdir)/'`xc-consistency.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xc_consistency-xc-consistency.Tpo $(DEPDIR)/xc_consistency-xc-consistency.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xc-consistency.c' object='xc_consistency-xc-consistency.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_consistency_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xc_consistency-xc-consistency.o `test -f 'xc-consistency.c' || echo '$(srcdir)/'`xc-consistency.c + +xc_consistency-xc-consistency.obj: xc-consistency.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_consistency_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xc_consistency-xc-consistency.obj -MD -MP -MF $(DEPDIR)/xc_consistency-xc-consistency.Tpo -c -o xc_consistency-xc-consistency.obj `if test -f 'xc-consistency.c'; then $(CYGPATH_W) 'xc-consistency.c'; else $(CYGPATH_W) '$(srcdir)/xc-consistency.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xc_consistency-xc-consistency.Tpo $(DEPDIR)/xc_consistency-xc-consistency.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xc-consistency.c' object='xc_consistency-xc-consistency.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_consistency_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xc_consistency-xc-consistency.obj `if test -f 'xc-consistency.c'; then $(CYGPATH_W) 'xc-consistency.c'; else $(CYGPATH_W) '$(srcdir)/xc-consistency.c'; fi` + +xc_error-xc-error.o: xc-error.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_error_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xc_error-xc-error.o -MD -MP -MF $(DEPDIR)/xc_error-xc-error.Tpo -c -o xc_error-xc-error.o `test -f 'xc-error.c' || echo '$(srcdir)/'`xc-error.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xc_error-xc-error.Tpo $(DEPDIR)/xc_error-xc-error.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xc-error.c' object='xc_error-xc-error.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_error_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xc_error-xc-error.o `test -f 'xc-error.c' || echo '$(srcdir)/'`xc-error.c + +xc_error-xc-error.obj: xc-error.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_error_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xc_error-xc-error.obj -MD -MP -MF $(DEPDIR)/xc_error-xc-error.Tpo -c -o xc_error-xc-error.obj `if test -f 'xc-error.c'; then $(CYGPATH_W) 'xc-error.c'; else $(CYGPATH_W) '$(srcdir)/xc-error.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xc_error-xc-error.Tpo $(DEPDIR)/xc_error-xc-error.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xc-error.c' object='xc_error-xc-error.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_error_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xc_error-xc-error.obj `if test -f 'xc-error.c'; then $(CYGPATH_W) 'xc-error.c'; else $(CYGPATH_W) '$(srcdir)/xc-error.c'; fi` + +xc_get_data-xc-get_data.o: xc-get_data.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_get_data_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xc_get_data-xc-get_data.o -MD -MP -MF $(DEPDIR)/xc_get_data-xc-get_data.Tpo -c -o xc_get_data-xc-get_data.o `test -f 'xc-get_data.c' || echo '$(srcdir)/'`xc-get_data.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xc_get_data-xc-get_data.Tpo $(DEPDIR)/xc_get_data-xc-get_data.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xc-get_data.c' object='xc_get_data-xc-get_data.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_get_data_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xc_get_data-xc-get_data.o `test -f 'xc-get_data.c' || echo '$(srcdir)/'`xc-get_data.c + +xc_get_data-xc-get_data.obj: xc-get_data.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_get_data_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xc_get_data-xc-get_data.obj -MD -MP -MF $(DEPDIR)/xc_get_data-xc-get_data.Tpo -c -o xc_get_data-xc-get_data.obj `if test -f 'xc-get_data.c'; then $(CYGPATH_W) 'xc-get_data.c'; else $(CYGPATH_W) '$(srcdir)/xc-get_data.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xc_get_data-xc-get_data.Tpo $(DEPDIR)/xc_get_data-xc-get_data.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xc-get_data.c' object='xc_get_data-xc-get_data.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_get_data_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xc_get_data-xc-get_data.obj `if test -f 'xc-get_data.c'; then $(CYGPATH_W) 'xc-get_data.c'; else $(CYGPATH_W) '$(srcdir)/xc-get_data.c'; fi` + +xc_regression-xc-regression.o: xc-regression.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_regression_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xc_regression-xc-regression.o -MD -MP -MF $(DEPDIR)/xc_regression-xc-regression.Tpo -c -o xc_regression-xc-regression.o `test -f 'xc-regression.c' || echo '$(srcdir)/'`xc-regression.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xc_regression-xc-regression.Tpo $(DEPDIR)/xc_regression-xc-regression.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xc-regression.c' object='xc_regression-xc-regression.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_regression_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xc_regression-xc-regression.o `test -f 'xc-regression.c' || echo '$(srcdir)/'`xc-regression.c + +xc_regression-xc-regression.obj: xc-regression.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_regression_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xc_regression-xc-regression.obj -MD -MP -MF $(DEPDIR)/xc_regression-xc-regression.Tpo -c -o xc_regression-xc-regression.obj `if test -f 'xc-regression.c'; then $(CYGPATH_W) 'xc-regression.c'; else $(CYGPATH_W) '$(srcdir)/xc-regression.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xc_regression-xc-regression.Tpo $(DEPDIR)/xc_regression-xc-regression.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xc-regression.c' object='xc_regression-xc-regression.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_regression_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xc_regression-xc-regression.obj `if test -f 'xc-regression.c'; then $(CYGPATH_W) 'xc-regression.c'; else $(CYGPATH_W) '$(srcdir)/xc-regression.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +# Recover from deleted '.trs' file; this should ensure that +# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create +# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells +# to avoid problems with "make -n". +.log.trs: + rm -f $< $@ + $(MAKE) $(AM_MAKEFLAGS) $< + +# Leading 'am--fnord' is there to ensure the list of targets does not +# expand to empty, as could happen e.g. with make check TESTS=''. +am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) +am--force-recheck: + @: + +$(TEST_SUITE_LOG): $(TEST_LOGS) + @$(am__set_TESTS_bases); \ + am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ + redo_bases=`for i in $$bases; do \ + am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ + done`; \ + if test -n "$$redo_bases"; then \ + redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ + redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ + if $(am__make_dryrun); then :; else \ + rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ + fi; \ + fi; \ + if test -n "$$am__remaking_logs"; then \ + echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ + "recursion detected" >&2; \ + else \ + am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ + fi; \ + if $(am__make_dryrun); then :; else \ + st=0; \ + errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ + for i in $$redo_bases; do \ + test -f $$i.trs && test -r $$i.trs \ + || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ + test -f $$i.log && test -r $$i.log \ + || { echo "$$errmsg $$i.log" >&2; st=1; }; \ + done; \ + test $$st -eq 0 || exit 1; \ + fi + @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ + ws='[ ]'; \ + results=`for b in $$bases; do echo $$b.trs; done`; \ + test -n "$$results" || results=/dev/null; \ + all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ + pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ + fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ + skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ + xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ + xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ + error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ + if test `expr $$fail + $$xpass + $$error` -eq 0; then \ + success=true; \ + else \ + success=false; \ + fi; \ + br='==================='; br=$$br$$br$$br$$br; \ + result_count () \ + { \ + if test x"$$1" = x"--maybe-color"; then \ + maybe_colorize=yes; \ + elif test x"$$1" = x"--no-color"; then \ + maybe_colorize=no; \ + else \ + echo "$@: invalid 'result_count' usage" >&2; exit 4; \ + fi; \ + shift; \ + desc=$$1 count=$$2; \ + if test $$maybe_colorize = yes && test $$count -gt 0; then \ + color_start=$$3 color_end=$$std; \ + else \ + color_start= color_end=; \ + fi; \ + echo "$${color_start}# $$desc $$count$${color_end}"; \ + }; \ + create_testsuite_report () \ + { \ + result_count $$1 "TOTAL:" $$all "$$brg"; \ + result_count $$1 "PASS: " $$pass "$$grn"; \ + result_count $$1 "SKIP: " $$skip "$$blu"; \ + result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ + result_count $$1 "FAIL: " $$fail "$$red"; \ + result_count $$1 "XPASS:" $$xpass "$$red"; \ + result_count $$1 "ERROR:" $$error "$$mgn"; \ + }; \ + { \ + echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ + $(am__rst_title); \ + create_testsuite_report --no-color; \ + echo; \ + echo ".. contents:: :depth: 2"; \ + echo; \ + for b in $$bases; do echo $$b; done \ + | $(am__create_global_log); \ + } >$(TEST_SUITE_LOG).tmp || exit 1; \ + mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ + if $$success; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ + fi; \ + echo "$${col}$$br$${std}"; \ + echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}$$br$${std}"; \ + create_testsuite_report --maybe-color; \ + echo "$$col$$br$$std"; \ + if $$success; then :; else \ + echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ + if test -n "$(PACKAGE_BUGREPORT)"; then \ + echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ + fi; \ + echo "$$col$$br$$std"; \ + fi; \ + $$success || exit 1 + +check-TESTS: + @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list + @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + trs_list=`for i in $$bases; do echo $$i.trs; done`; \ + log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ + exit $$?; +recheck: all + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + bases=`for i in $$bases; do echo $$i; done \ + | $(am__list_recheck_tests)` || exit 1; \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + log_list=`echo $$log_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ + am__force_recheck=am--force-recheck \ + TEST_LOGS="$$log_list"; \ + exit $$? +xc-run_testsuite.log: xc-run_testsuite + @p='xc-run_testsuite'; \ + b='xc-run_testsuite'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +.test.log: + @p='$<'; \ + $(am__set_b); \ + $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +@am__EXEEXT_TRUE@.test$(EXEEXT).log: +@am__EXEEXT_TRUE@ @p='$<'; \ +@am__EXEEXT_TRUE@ $(am__set_b); \ +@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ +@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ +@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ +@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile $(PROGRAMS) $(SCRIPTS) $(DATA) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) + -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) + -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \ + clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \ + ctags ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + recheck tags tags-am uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libxc-2.2.0/testsuite/df_repo/gga_c_lyp.data b/libxc-2.2.0/testsuite/df_repo/gga_c_lyp.data new file mode 100644 index 000000000..3241972c9 --- /dev/null +++ b/libxc-2.2.0/testsuite/df_repo/gga_c_lyp.data @@ -0,0 +1,601 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.179175399535E+00 + vrhoa = -0.567254370239E-01 + vrhob = -0.567254370239E-01 + vsigmaaa = 0.603063052247E-04 + vsigmaab = 0.562668577012E-04 + vsigmabb = 0.603063052247E-04 + + v2rhoa2 = 0.133393844920E-01 + v2rhoab = -0.152396936370E-01 + v2rhob2 = 0.133393844920E-01 + + v2rhoasigmaaa = -0.139567528486E-03 + v2rhoasigmaab = -0.291609267169E-04 + v2rhoasigmabb = 0.811155700026E-04 + v2rhobsigmaaa = 0.811155700026E-04 + v2rhobsigmaab = -0.291609267169E-04 + v2rhobsigmabb = -0.139567528486E-03 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.178874704439E+00 + vrhoa = -0.568743789287E-01 + vrhob = -0.568743789287E-01 + vsigmaaa = 0.603063052247E-04 + vsigmaab = 0.562668577012E-04 + vsigmabb = 0.603063052247E-04 + + v2rhoa2 = 0.138019299001E-01 + v2rhoab = -0.154679607816E-01 + v2rhob2 = 0.138019299001E-01 + + v2rhoasigmaaa = -0.139567528486E-03 + v2rhoasigmaab = -0.291609267169E-04 + v2rhoasigmabb = 0.811155700026E-04 + v2rhobsigmaaa = 0.811155700026E-04 + v2rhobsigmaab = -0.291609267169E-04 + v2rhobsigmabb = -0.139567528486E-03 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.148704448499E+00 + vrhoa = -0.607218516385E-01 + vrhob = -0.607218516385E-01 + vsigmaaa = 0.741080708899E-04 + vsigmaab = 0.701383136250E-04 + vsigmabb = 0.741080708899E-04 + + v2rhoa2 = 0.303235212020E-01 + v2rhoab = -0.246964871909E-01 + v2rhob2 = 0.303235212020E-01 + + v2rhoasigmaaa = -0.192341863313E-03 + v2rhoasigmaab = -0.411266458866E-04 + v2rhoasigmabb = 0.111052541885E-03 + v2rhobsigmaaa = 0.111052541885E-03 + v2rhobsigmaab = -0.411266458866E-04 + v2rhobsigmabb = -0.192341863313E-03 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.465024100803E-02 + vrhoa = -0.610987646298E-01 + vrhob = -0.610987646298E-01 + vsigmaaa = 0.694062751783E-02 + vsigmaab = 0.876388739167E-02 + vsigmabb = 0.694062751783E-02 + + v2rhoa2 = 0.939780887292E+00 + v2rhoab = -0.498868805878E+00 + v2rhob2 = 0.939780887292E+00 + + v2rhoasigmaaa = -0.228361811495E+00 + v2rhoasigmaab = -0.807965355076E-01 + v2rhoasigmabb = 0.107205512562E+00 + v2rhobsigmaaa = 0.107205512562E+00 + v2rhobsigmaab = -0.807965355076E-01 + v2rhobsigmabb = -0.228361811495E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.237638430952E+03 + vrhoa = -0.665993271139E-01 + vrhob = -0.665993271139E-01 + vsigmaaa = 0.540555769454E-09 + vsigmaab = 0.260773591409E-09 + vsigmabb = 0.540555769454E-09 + + v2rhoa2 = 0.144305866044E-04 + v2rhoab = -0.146537621392E-04 + v2rhob2 = 0.144305866044E-04 + + v2rhoasigmaaa = -0.158850198364E-11 + v2rhoasigmaab = -0.124882367057E-12 + v2rhoasigmabb = 0.108678004324E-11 + v2rhobsigmaaa = 0.108678004324E-11 + v2rhobsigmaab = -0.124882367057E-12 + v2rhobsigmabb = -0.158850198364E-11 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.237638419413E+03 + vrhoa = -0.665993325023E-01 + vrhob = -0.665993325023E-01 + vsigmaaa = 0.540555769454E-09 + vsigmaab = 0.260773591409E-09 + vsigmabb = 0.540555769454E-09 + + v2rhoa2 = 0.144306117017E-04 + v2rhoab = -0.146537792037E-04 + v2rhob2 = 0.144306117017E-04 + + v2rhoasigmaaa = -0.158850198364E-11 + v2rhoasigmaab = -0.124882367057E-12 + v2rhoasigmabb = 0.108678004324E-11 + v2rhobsigmaaa = 0.108678004324E-11 + v2rhobsigmaab = -0.124882367057E-12 + v2rhobsigmabb = -0.158850198364E-11 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.204955819468E+03 + vrhoa = -0.697313972428E-01 + vrhob = -0.697313972428E-01 + vsigmaaa = 0.658117255270E-09 + vsigmaab = 0.319515846955E-09 + vsigmabb = 0.658117255270E-09 + + v2rhoa2 = 0.328352356048E-04 + v2rhoab = -0.277614126197E-04 + v2rhob2 = 0.328352356048E-04 + + v2rhoasigmaaa = -0.217196289305E-11 + v2rhoasigmaab = -0.172301824814E-12 + v2rhoasigmabb = 0.148472344173E-11 + v2rhobsigmaaa = 0.148472344173E-11 + v2rhobsigmaab = -0.172301824814E-12 + v2rhobsigmabb = -0.217196289305E-11 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.216471443930E-01 + vrhoa = -0.526995644881E-01 + vrhob = -0.526995644881E-01 + vsigmaaa = 0.127229458316E-02 + vsigmaab = 0.145290124256E-02 + vsigmabb = 0.127229458316E-02 + + v2rhoa2 = 0.134806861660E+00 + v2rhoab = -0.118221268828E+00 + v2rhob2 = 0.134806861660E+00 + + v2rhoasigmaaa = -0.160681338920E-01 + v2rhoasigmaab = -0.472571671370E-02 + v2rhoasigmabb = 0.827564425842E-02 + v2rhobsigmaaa = 0.827564425842E-02 + v2rhobsigmaab = -0.472571671370E-02 + v2rhobsigmabb = -0.160681338920E-01 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.712575807209E+04 + vrhoa = -0.674210020682E-01 + vrhob = -0.674210020682E-01 + vsigmaaa = 0.190814948140E-11 + vsigmaab = 0.816481365419E-12 + vsigmabb = 0.190814948140E-11 + + v2rhoa2 = 0.495469678644E-06 + v2rhoab = -0.497965254694E-06 + v2rhob2 = 0.495469678644E-06 + + v2rhoasigmaaa = -0.196249114596E-15 + v2rhoasigmaab = -0.130135394800E-16 + v2rhoasigmabb = 0.136188177073E-15 + v2rhobsigmaaa = 0.136188177073E-15 + v2rhobsigmaab = -0.130135394800E-16 + v2rhobsigmabb = -0.196249114596E-15 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.615255831041E+04 + vrhoa = -0.703265205307E-01 + vrhob = -0.703265205307E-01 + vsigmaaa = 0.233162530668E-11 + vsigmaab = 0.100028081622E-11 + vsigmabb = 0.233162530668E-11 + + v2rhoa2 = 0.110943737062E-05 + v2rhoab = -0.946187279564E-06 + v2rhob2 = 0.110943737062E-05 + + v2rhoasigmaaa = -0.270252437366E-15 + v2rhoasigmaab = -0.179871585341E-16 + v2rhoasigmabb = 0.187490309515E-15 + v2rhobsigmaaa = 0.187490309515E-15 + v2rhobsigmaab = -0.179871585341E-16 + v2rhobsigmabb = -0.270252437366E-15 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.106605459023E-01 + vrhoa = -0.547299644084E-01 + vrhob = -0.547299644084E-01 + vsigmaaa = 0.303386607339E-02 + vsigmaab = 0.365209975632E-02 + vsigmabb = 0.303386607339E-02 + + v2rhoa2 = 0.346499910453E+00 + v2rhoab = -0.239377906462E+00 + v2rhob2 = 0.346499910453E+00 + + v2rhoasigmaaa = -0.624221561613E-01 + v2rhoasigmaab = -0.201987433700E-01 + v2rhoasigmabb = 0.307385926277E-01 + v2rhobsigmaaa = 0.307385926277E-01 + v2rhobsigmaab = -0.201987433700E-01 + v2rhobsigmabb = -0.624221561613E-01 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = 0.000000000000E+00 + vrhoa = 0.000000000000E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.000000000000E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = 0.000000000000E+00 + vrhoa = 0.000000000000E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.000000000000E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = 0.000000000000E+00 + vrhoa = 0.000000000000E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.000000000000E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = 0.000000000000E+00 + vrhoa = 0.000000000000E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.000000000000E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.903966286601E+01 + vrhoa = -0.759264713358E-01 + vrhob = -0.784370481382E-01 + vsigmaaa = 0.907992031805E-07 + vsigmaab = 0.581118313258E-07 + vsigmabb = 0.100370432217E-06 + + v2rhoa2 = 0.141362773226E-02 + v2rhoab = -0.105147646057E-02 + v2rhob2 = 0.150485268125E-02 + + v2rhoasigmaaa = -0.565167905921E-08 + v2rhoasigmaab = -0.515378386013E-09 + v2rhoasigmabb = 0.376492504615E-08 + v2rhobsigmaaa = 0.384361243685E-08 + v2rhobsigmaab = -0.747058939790E-09 + v2rhobsigmabb = -0.588190678666E-08 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.402158795173E+01 + vrhoa = -0.762734644914E-01 + vrhob = -0.830226435821E-01 + vsigmaaa = 0.301052145436E-06 + vsigmaab = 0.220298633297E-06 + vsigmabb = 0.369624286402E-06 + + v2rhoa2 = 0.331769729999E-02 + v2rhoab = -0.248438749270E-02 + v2rhob2 = 0.384280348438E-02 + + v2rhoasigmaaa = -0.398359773843E-07 + v2rhoasigmaab = -0.335415277613E-08 + v2rhoasigmabb = 0.263970784129E-07 + v2rhobsigmaaa = 0.275886078235E-07 + v2rhobsigmaab = -0.685474898360E-08 + v2rhobsigmabb = -0.433118929134E-07 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.535812609335E-02 + vrhoa = -0.428946532738E-01 + vrhob = -0.100396349615E+00 + vsigmaaa = 0.178546727213E-02 + vsigmaab = 0.678262565697E-02 + vsigmabb = 0.827650024238E-02 + + v2rhoa2 = 0.309477814856E+00 + v2rhoab = -0.329371433841E+00 + v2rhob2 = 0.162055387526E+01 + + v2rhoasigmaaa = -0.781343180939E-01 + v2rhoasigmaab = -0.432850540037E-02 + v2rhoasigmabb = 0.363514849034E-01 + v2rhobsigmaaa = 0.732832606483E-01 + v2rhobsigmaab = -0.108581862510E+00 + v2rhobsigmabb = -0.179156926286E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.303154148293E-02 + vrhoa = -0.244020499979E-01 + vrhob = -0.783890652209E-01 + vsigmaaa = -0.352365411226E-02 + vsigmaab = 0.373879285446E-01 + vsigmabb = 0.434388664083E-01 + + v2rhoa2 = 0.202330890903E+00 + v2rhoab = -0.536912334084E+00 + v2rhob2 = 0.182166278214E+01 + + v2rhoasigmaaa = -0.992049673308E-01 + v2rhoasigmaab = -0.485780496011E-01 + v2rhoasigmabb = -0.158164241941E+00 + v2rhobsigmaaa = 0.340893479361E+00 + v2rhobsigmaab = -0.162192597781E+01 + v2rhobsigmabb = -0.154746697775E+01 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.608750998131E+01 + vrhoa = -0.643435848234E-01 + vrhob = -0.656377677365E-01 + vsigmaaa = 0.202448437183E-06 + vsigmaab = 0.140789565804E-06 + vsigmabb = 0.237924154032E-06 + + v2rhoa2 = 0.644965086508E-03 + v2rhoab = -0.630065421347E-03 + v2rhob2 = 0.684494690431E-03 + + v2rhoasigmaaa = -0.207590458741E-07 + v2rhoasigmaab = -0.182473154038E-08 + v2rhoasigmabb = 0.137746587331E-07 + v2rhobsigmaaa = 0.142543841876E-07 + v2rhobsigmaab = -0.323521094196E-08 + v2rhobsigmabb = -0.221599858116E-07 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.485826625474E+01 + vrhoa = -0.653859880589E-01 + vrhob = -0.653239498026E-01 + vsigmaaa = 0.314305582522E-06 + vsigmaab = 0.205017935750E-06 + vsigmabb = 0.314305582522E-06 + + v2rhoa2 = 0.932011907377E-03 + v2rhoab = -0.845990806989E-03 + v2rhob2 = 0.927946564209E-03 + + v2rhoasigmaaa = -0.375898792310E-07 + v2rhoasigmaab = -0.455264241776E-08 + v2rhoasigmabb = 0.244483769850E-07 + v2rhobsigmaaa = 0.244483769850E-07 + v2rhobsigmaab = -0.455264241776E-08 + v2rhobsigmabb = -0.375898792310E-07 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.634688010938E-02 + vrhoa = -0.486068357646E-01 + vrhob = -0.739949355207E-01 + vsigmaaa = 0.305337986175E-02 + vsigmaab = 0.641200968640E-02 + vsigmabb = 0.698202739086E-02 + + v2rhoa2 = 0.433585531118E+00 + v2rhoab = -0.365108886112E+00 + v2rhob2 = 0.100038106732E+01 + + v2rhoasigmaaa = -0.102735565156E+00 + v2rhoasigmaab = -0.181538750084E-01 + v2rhoasigmabb = 0.501849138748E-01 + v2rhobsigmaaa = 0.732361795124E-01 + v2rhobsigmaab = -0.824126803195E-01 + v2rhobsigmabb = -0.165270268130E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.172301075975E-02 + vrhoa = -0.294822900234E-01 + vrhob = -0.766946918598E-01 + vsigmaaa = 0.127140367254E-02 + vsigmaab = 0.519446045760E-01 + vsigmabb = 0.608118658277E-01 + + v2rhoa2 = 0.427000673980E+00 + v2rhoab = -0.671140471911E+00 + v2rhob2 = 0.300158916489E+01 + + v2rhoasigmaaa = -0.631566175836E+00 + v2rhoasigmaab = -0.540623931547E-01 + v2rhoasigmabb = -0.252818541902E-02 + v2rhobsigmaaa = 0.988123041938E+00 + v2rhobsigmaab = -0.292607572225E+01 + v2rhobsigmabb = -0.333300175870E+01 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + diff --git a/libxc-2.2.0/testsuite/df_repo/gga_c_p86.data b/libxc-2.2.0/testsuite/df_repo/gga_c_p86.data new file mode 100644 index 000000000..a6171e82e --- /dev/null +++ b/libxc-2.2.0/testsuite/df_repo/gga_c_p86.data @@ -0,0 +1,601 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.275576598637E+00 + vrhoa = -0.898549308454E-01 + vrhob = -0.898549308454E-01 + vsigmaaa = 0.834140389764E-03 + vsigmaab = 0.166828077953E-02 + vsigmabb = 0.834140389764E-03 + + v2rhoa2 = 0.164699121751E-01 + v2rhoab = -0.219008166659E-01 + v2rhob2 = 0.164699121751E-01 + + v2rhoasigmaaa = -0.326275462868E-03 + v2rhoasigmaab = -0.652550925737E-03 + v2rhoasigmabb = -0.326275462868E-03 + v2rhobsigmaaa = -0.326275462868E-03 + v2rhobsigmaab = -0.652550925737E-03 + v2rhobsigmabb = -0.326275462868E-03 + + v2sigmaaa2 = -0.502496274333E+01 + v2sigmaaaab = -0.100499254867E+02 + v2sigmaaabb = -0.502496274333E+01 + v2sigmaab2 = -0.200998509733E+02 + v2sigmaabbb = -0.100499254867E+02 + v2sigmabb2 = -0.502496274333E+01 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.270541935453E+00 + vrhoa = -0.916176785198E-01 + vrhob = -0.916176785198E-01 + vsigmaaa = 0.696255856383E-03 + vsigmaab = 0.139251171277E-02 + vsigmabb = 0.696255856383E-03 + + v2rhoa2 = 0.172914869726E-01 + v2rhoab = -0.205953257607E-01 + v2rhob2 = 0.172914869726E-01 + + v2rhoasigmaaa = -0.228585687716E-03 + v2rhoasigmaab = -0.457171375432E-03 + v2rhoasigmabb = -0.228585687716E-03 + v2rhobsigmaaa = -0.228585687716E-03 + v2rhobsigmaab = -0.457171375432E-03 + v2rhobsigmabb = -0.228585687716E-03 + + v2sigmaaa2 = -0.934892441509E-05 + v2sigmaaaab = -0.186978488302E-04 + v2sigmaaabb = -0.934892441509E-05 + v2sigmaab2 = -0.373956976604E-04 + v2sigmaabbb = -0.186978488302E-04 + v2sigmabb2 = -0.934892441509E-05 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.164692950916E+00 + vrhoa = -0.103391393448E+00 + vrhob = -0.103391393448E+00 + vsigmaaa = 0.356216534176E-03 + vsigmaab = 0.712433068352E-03 + vsigmabb = 0.356216534176E-03 + + v2rhoa2 = 0.142073138397E-01 + v2rhoab = -0.193927128243E-01 + v2rhob2 = 0.142073138397E-01 + + v2rhoasigmaaa = -0.493923795453E-05 + v2rhoasigmaab = -0.987847590906E-05 + v2rhoasigmabb = -0.493923795453E-05 + v2rhobsigmaaa = -0.493923795453E-05 + v2rhobsigmaab = -0.987847590906E-05 + v2rhobsigmabb = -0.493923795453E-05 + + v2sigmaaa2 = -0.136125824414E-05 + v2sigmaaaab = -0.272251648828E-05 + v2sigmaaabb = -0.136125824414E-05 + v2sigmaab2 = -0.544503297656E-05 + v2sigmaabbb = -0.272251648828E-05 + v2sigmabb2 = -0.136125824414E-05 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.397450460376E-02 + vrhoa = -0.746190981909E-01 + vrhob = -0.746190981909E-01 + vsigmaaa = 0.993263060266E-02 + vsigmaab = 0.198652612053E-01 + vsigmabb = 0.993263060266E-02 + + v2rhoa2 = -0.599447216161E-01 + v2rhoab = -0.362668624294E+00 + v2rhob2 = -0.599447216161E-01 + + v2rhoasigmaaa = 0.354447185309E-01 + v2rhoasigmaab = 0.708894370618E-01 + v2rhoasigmabb = 0.354447185309E-01 + v2rhobsigmaaa = 0.354447185309E-01 + v2rhobsigmaab = 0.708894370618E-01 + v2rhobsigmabb = 0.354447185309E-01 + + v2sigmaaa2 = -0.235335148061E-01 + v2sigmaaaab = -0.470670296122E-01 + v2sigmaaabb = -0.235335148061E-01 + v2sigmaab2 = -0.941340592245E-01 + v2sigmaabbb = -0.470670296122E-01 + v2sigmabb2 = -0.235335148061E-01 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.534484419341E+03 + vrhoa = -0.158618496567E+00 + vrhob = -0.158618496567E+00 + vsigmaaa = 0.771967614898E-07 + vsigmaab = 0.154393522980E-06 + vsigmabb = 0.771967614898E-07 + + v2rhoa2 = 0.310826615503E-04 + v2rhoab = -0.367568997506E-04 + v2rhob2 = 0.310826615503E-04 + + v2rhoasigmaaa = -0.286183881794E-10 + v2rhoasigmaab = -0.572367763588E-10 + v2rhoasigmabb = -0.286183881794E-10 + v2rhobsigmaaa = -0.286183881794E-10 + v2rhobsigmaab = -0.572367763588E-10 + v2rhobsigmabb = -0.286183881794E-10 + + v2sigmaaa2 = -0.528595633667E-12 + v2sigmaaaab = -0.105719126733E-11 + v2sigmaaabb = -0.528595633667E-12 + v2sigmaab2 = -0.211438253467E-11 + v2sigmaabbb = -0.105719126733E-11 + v2sigmabb2 = -0.528595633667E-12 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.534481770524E+03 + vrhoa = -0.158619476408E+00 + vrhob = -0.158619476408E+00 + vsigmaaa = 0.769087327316E-07 + vsigmaab = 0.153817465463E-06 + vsigmabb = 0.769087327316E-07 + + v2rhoa2 = 0.310831819703E-04 + v2rhoab = -0.367561522373E-04 + v2rhob2 = 0.310831819703E-04 + + v2rhoasigmaaa = -0.284185255134E-10 + v2rhoasigmaab = -0.568370510268E-10 + v2rhoasigmabb = -0.284185255134E-10 + v2rhobsigmaaa = -0.284185255134E-10 + v2rhobsigmaab = -0.568370510268E-10 + v2rhobsigmabb = -0.284185255134E-10 + + v2sigmaaa2 = -0.421320700353E-14 + v2sigmaaaab = -0.842641400705E-14 + v2sigmaaabb = -0.421320700353E-14 + v2sigmaab2 = -0.168528280141E-13 + v2sigmaabbb = -0.842641400705E-14 + v2sigmabb2 = -0.421320700353E-14 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.269243249838E+03 + vrhoa = -0.102637357895E+00 + vrhob = -0.102637357895E+00 + vsigmaaa = 0.752165325842E-09 + vsigmaab = 0.150433065168E-08 + vsigmabb = 0.752165325842E-09 + + v2rhoa2 = -0.292028677323E-04 + v2rhoab = -0.829650113166E-04 + v2rhob2 = -0.292028677323E-04 + + v2rhoasigmaaa = 0.490124188590E-11 + v2rhoasigmaab = 0.980248377181E-11 + v2rhoasigmabb = 0.490124188590E-11 + v2rhobsigmaaa = 0.490124188590E-11 + v2rhobsigmaab = 0.980248377181E-11 + v2rhobsigmabb = 0.490124188590E-11 + + v2sigmaaa2 = -0.483781223284E-18 + v2sigmaaaab = -0.967562446568E-18 + v2sigmaaabb = -0.483781223284E-18 + v2sigmaab2 = -0.193512489314E-17 + v2sigmaabbb = -0.967562446568E-18 + v2sigmabb2 = -0.483781223284E-18 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.267229464823E-01 + vrhoa = -0.845518075134E-01 + vrhob = -0.845518075134E-01 + vsigmaaa = 0.508903498245E-02 + vsigmaab = 0.101780699649E-01 + vsigmabb = 0.508903498245E-02 + + v2rhoa2 = 0.926140310853E-01 + v2rhoab = -0.789246773515E-01 + v2rhob2 = 0.926140310853E-01 + + v2rhoasigmaaa = -0.470989252647E-02 + v2rhoasigmaab = -0.941978505294E-02 + v2rhoasigmabb = -0.470989252647E-02 + v2rhobsigmaaa = -0.470989252647E-02 + v2rhobsigmaab = -0.941978505294E-02 + v2rhobsigmabb = -0.470989252647E-02 + + v2sigmaaa2 = -0.162963280788E-02 + v2sigmaaaab = -0.325926561577E-02 + v2sigmaaabb = -0.162963280788E-02 + v2sigmaab2 = -0.651853123153E-02 + v2sigmaabbb = -0.325926561577E-02 + v2sigmabb2 = -0.162963280788E-02 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.194053919576E+05 + vrhoa = -0.193356585840E+00 + vrhob = -0.193356585840E+00 + vsigmaaa = 0.845985754531E-09 + vsigmaab = 0.169197150906E-08 + vsigmabb = 0.845985754531E-09 + + v2rhoa2 = 0.133301554174E-05 + v2rhoab = -0.152755381770E-05 + v2rhob2 = 0.133301554174E-05 + + v2rhoasigmaaa = -0.106445604178E-13 + v2rhoasigmaab = -0.212891208356E-13 + v2rhoasigmabb = -0.106445604178E-13 + v2rhobsigmaaa = -0.106445604178E-13 + v2rhobsigmaab = -0.212891208356E-13 + v2rhobsigmabb = -0.106445604178E-13 + + v2sigmaaa2 = -0.268892251090E-18 + v2sigmaaaab = -0.537784502180E-18 + v2sigmaaabb = -0.268892251090E-18 + v2sigmaab2 = -0.107556900436E-17 + v2sigmaabbb = -0.537784502180E-18 + v2sigmabb2 = -0.268892251090E-18 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.126411706583E+05 + vrhoa = -0.756471838962E-01 + vrhob = -0.756471838962E-01 + vsigmaaa = -0.240534746730E-10 + vsigmaab = -0.481069493460E-10 + vsigmabb = -0.240534746730E-10 + + v2rhoa2 = 0.792774897108E-06 + v2rhoab = -0.185079999683E-05 + v2rhob2 = 0.792774897108E-06 + + v2rhoasigmaaa = 0.144937327450E-15 + v2rhoasigmaab = 0.289874654901E-15 + v2rhoasigmabb = 0.144937327450E-15 + v2rhobsigmaaa = 0.144937327450E-15 + v2rhobsigmaab = 0.289874654901E-15 + v2rhobsigmabb = 0.144937327450E-15 + + v2sigmaaa2 = 0.682593160617E-25 + v2sigmaaaab = 0.136518632123E-24 + v2sigmaaabb = 0.682593160617E-25 + v2sigmaab2 = 0.273037264247E-24 + v2sigmaabbb = 0.136518632123E-24 + v2sigmabb2 = 0.682593160617E-25 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.112693683420E-01 + vrhoa = -0.823095663901E-01 + vrhob = -0.823095663901E-01 + vsigmaaa = 0.759916679933E-02 + vsigmaab = 0.151983335987E-01 + vsigmabb = 0.759916679933E-02 + + v2rhoa2 = 0.946010517007E-01 + v2rhoab = -0.144547984448E+00 + v2rhob2 = 0.946010517007E-01 + + v2rhoasigmaaa = -0.870262483792E-03 + v2rhoasigmaab = -0.174052496758E-02 + v2rhoasigmabb = -0.870262483792E-03 + v2rhobsigmaaa = -0.870262483792E-03 + v2rhobsigmaab = -0.174052496758E-02 + v2rhobsigmabb = -0.870262483792E-03 + + v2sigmaaa2 = -0.648995677523E-02 + v2sigmaaaab = -0.129799135505E-01 + v2sigmaaabb = -0.648995677523E-02 + v2sigmaab2 = -0.259598271009E-01 + v2sigmaabbb = -0.129799135505E-01 + v2sigmabb2 = -0.648995677523E-02 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.150623736304E+00 + vrhoa = -0.475749572683E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.637019797503E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.134925763778E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.311322322974E+01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.148627368481E+00 + vrhoa = -0.482791781160E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.563242330304E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.918179362576E-03 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.102682884804E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.530337298800E-01 + vrhoa = -0.580335324348E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.231451441139E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.460696056760E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.779257939631E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = 0.519030654587E-03 + vrhoa = -0.261147874918E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.175603815266E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.116948219733E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.501164144370E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.881112024754E+01 + vrhoa = -0.482543333077E-01 + vrhob = -0.489974673998E-01 + vsigmaaa = -0.551331569711E-07 + vsigmaab = -0.110266313942E-06 + vsigmabb = -0.551331569711E-07 + + v2rhoa2 = -0.746279999379E-03 + v2rhoab = -0.148488381542E-02 + v2rhob2 = -0.737137272306E-03 + + v2rhoasigmaaa = 0.374688026774E-08 + v2rhoasigmaab = 0.749376053547E-08 + v2rhoasigmabb = 0.374688026774E-08 + v2rhobsigmaaa = 0.374457465017E-08 + v2rhobsigmaab = 0.748914930033E-08 + v2rhobsigmabb = 0.374457465017E-08 + + v2sigmaaa2 = -0.117515746318E-13 + v2sigmaaaab = -0.235031492637E-13 + v2sigmaaabb = -0.117515746318E-13 + v2sigmaab2 = -0.470062985273E-13 + v2sigmaabbb = -0.235031492637E-13 + v2sigmabb2 = -0.117515746318E-13 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.356963343227E+01 + vrhoa = -0.433530899660E-01 + vrhob = -0.447602011737E-01 + vsigmaaa = -0.122488989075E-06 + vsigmaab = -0.244977978150E-06 + vsigmabb = -0.122488989075E-06 + + v2rhoa2 = -0.169450157064E-02 + v2rhoab = -0.308422706942E-02 + v2rhob2 = -0.165896811718E-02 + + v2rhoasigmaaa = 0.227151852191E-07 + v2rhoasigmaab = 0.454303704383E-07 + v2rhoasigmabb = 0.227151852191E-07 + v2rhobsigmaaa = 0.226922323054E-07 + v2rhobsigmaab = 0.453844646108E-07 + v2rhobsigmabb = 0.226922323054E-07 + + v2sigmaaa2 = -0.207808284633E-12 + v2sigmaaaab = -0.415616569266E-12 + v2sigmaaabb = -0.207808284633E-12 + v2sigmaab2 = -0.831233138532E-12 + v2sigmaabbb = -0.415616569266E-12 + v2sigmabb2 = -0.207808284633E-12 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.459865393257E-02 + vrhoa = -0.700052118462E-01 + vrhob = -0.782994528720E-01 + vsigmaaa = 0.619901785967E-02 + vsigmaab = 0.123980357193E-01 + vsigmabb = 0.619901785967E-02 + + v2rhoa2 = -0.910705100797E-01 + v2rhoab = -0.343025175419E+00 + v2rhob2 = -0.997792874752E-01 + + v2rhoasigmaaa = 0.216108031263E-01 + v2rhoasigmaab = 0.432216062525E-01 + v2rhoasigmabb = 0.216108031263E-01 + v2rhobsigmaaa = 0.263180175306E-01 + v2rhobsigmaab = 0.526360350612E-01 + v2rhobsigmabb = 0.263180175306E-01 + + v2sigmaaa2 = -0.783747224727E-02 + v2sigmaaaab = -0.156749444945E-01 + v2sigmaaabb = -0.783747224727E-02 + v2sigmaab2 = -0.313498889891E-01 + v2sigmaabbb = -0.156749444945E-01 + v2sigmabb2 = -0.783747224727E-02 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.460734753694E-02 + vrhoa = -0.536017333597E-01 + vrhob = -0.889420396114E-01 + vsigmaaa = 0.459038484126E-01 + vsigmaab = 0.918076968253E-01 + vsigmabb = 0.459038484126E-01 + + v2rhoa2 = 0.229638421508E+00 + v2rhoab = -0.353542137607E+00 + v2rhob2 = 0.736991366799E+00 + + v2rhoasigmaaa = -0.350102066264E+00 + v2rhoasigmaab = -0.700204132528E+00 + v2rhoasigmabb = -0.350102066264E+00 + v2rhobsigmaaa = -0.164628257846E+00 + v2rhobsigmaab = -0.329256515692E+00 + v2rhobsigmabb = -0.164628257846E+00 + + v2sigmaaa2 = -0.772847332877E+00 + v2sigmaaaab = -0.154569466575E+01 + v2sigmaaabb = -0.772847332877E+00 + v2sigmaab2 = -0.309138933151E+01 + v2sigmaabbb = -0.154569466575E+01 + v2sigmabb2 = -0.772847332877E+00 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.887103892606E+01 + vrhoa = -0.136333005296E+00 + vrhob = -0.137926985270E+00 + vsigmaaa = 0.363840653782E-05 + vsigmaab = 0.727681307564E-05 + vsigmabb = 0.363840653782E-05 + + v2rhoa2 = 0.745283378039E-03 + v2rhoab = -0.838667017684E-03 + v2rhob2 = 0.765562368477E-03 + + v2rhoasigmaaa = -0.585425105252E-08 + v2rhoasigmaab = -0.117085021050E-07 + v2rhoasigmabb = -0.585425105252E-08 + v2rhobsigmaaa = -0.544179565582E-08 + v2rhobsigmaab = -0.108835913116E-07 + v2rhobsigmabb = -0.544179565582E-08 + + v2sigmaaa2 = -0.418551226382E-11 + v2sigmaaaab = -0.837102452764E-11 + v2sigmaaabb = -0.418551226382E-11 + v2sigmaab2 = -0.167420490553E-10 + v2sigmaabbb = -0.837102452764E-11 + v2sigmabb2 = -0.418551226382E-11 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.645931566117E+01 + vrhoa = -0.135034162021E+00 + vrhob = -0.135034162021E+00 + vsigmaaa = 0.388594292816E-05 + vsigmaab = 0.777188585632E-05 + vsigmabb = 0.388594292816E-05 + + v2rhoa2 = 0.707362501623E-03 + v2rhoab = -0.112694971484E-02 + v2rhob2 = 0.707362501623E-03 + + v2rhoasigmaaa = 0.749901545667E-08 + v2rhoasigmaab = 0.149980309133E-07 + v2rhoasigmabb = 0.749901545667E-08 + v2rhobsigmaaa = 0.749901545667E-08 + v2rhobsigmaab = 0.149980309133E-07 + v2rhobsigmabb = 0.749901545667E-08 + + v2sigmaaa2 = -0.631013973411E-11 + v2sigmaaaab = -0.126202794682E-10 + v2sigmaaabb = -0.631013973411E-11 + v2sigmaab2 = -0.252405589364E-10 + v2sigmaabbb = -0.126202794682E-10 + v2sigmabb2 = -0.631013973411E-11 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.576134473525E-02 + vrhoa = -0.750781317880E-01 + vrhob = -0.804035318584E-01 + vsigmaaa = 0.814920118229E-02 + vsigmaab = 0.162984023646E-01 + vsigmabb = 0.814920118229E-02 + + v2rhoa2 = 0.113019384585E-02 + v2rhoab = -0.268950178633E+00 + v2rhob2 = 0.266716769984E-03 + + v2rhoasigmaaa = 0.156483706057E-01 + v2rhoasigmaab = 0.312967412114E-01 + v2rhoasigmabb = 0.156483706057E-01 + v2rhobsigmaaa = 0.193751506127E-01 + v2rhobsigmaab = 0.387503012254E-01 + v2rhobsigmabb = 0.193751506127E-01 + + v2sigmaaa2 = -0.118818999163E-01 + v2sigmaaaab = -0.237637998326E-01 + v2sigmaaabb = -0.118818999163E-01 + v2sigmaab2 = -0.475275996652E-01 + v2sigmaabbb = -0.237637998326E-01 + v2sigmabb2 = -0.118818999163E-01 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.227465804486E-02 + vrhoa = -0.607101652780E-01 + vrhob = -0.809996785446E-01 + vsigmaaa = 0.542965890398E-01 + vsigmaab = 0.108593178080E+00 + vsigmabb = 0.542965890398E-01 + + v2rhoa2 = 0.329942643730E+00 + v2rhoab = -0.517763280120E+00 + v2rhob2 = 0.564642641219E+00 + + v2rhoasigmaaa = -0.232199446020E+00 + v2rhoasigmaab = -0.464398892040E+00 + v2rhoasigmabb = -0.232199446020E+00 + v2rhobsigmaaa = 0.164136266720E-01 + v2rhobsigmaab = 0.328272533439E-01 + v2rhobsigmabb = 0.164136266720E-01 + + v2sigmaaa2 = -0.145741442973E+01 + v2sigmaaaab = -0.291482885947E+01 + v2sigmaaabb = -0.145741442973E+01 + v2sigmaab2 = -0.582965771894E+01 + v2sigmaabbb = -0.291482885947E+01 + v2sigmabb2 = -0.145741442973E+01 + diff --git a/libxc-2.2.0/testsuite/df_repo/gga_c_pbe.data b/libxc-2.2.0/testsuite/df_repo/gga_c_pbe.data new file mode 100644 index 000000000..92ef05c65 --- /dev/null +++ b/libxc-2.2.0/testsuite/df_repo/gga_c_pbe.data @@ -0,0 +1,601 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.277343302026E+00 + vrhoa = -0.902545684170E-01 + vrhob = -0.902545684170E-01 + vsigmaaa = 0.828329874208E-03 + vsigmaab = 0.165665974842E-02 + vsigmabb = 0.828329874208E-03 + + v2rhoa2 = 0.129726391337E-01 + v2rhoab = -0.182703394917E-01 + v2rhob2 = 0.129726391337E-01 + + v2rhoasigmaaa = -0.324835244787E-03 + v2rhoasigmaab = -0.649670489575E-03 + v2rhoasigmabb = -0.324835244787E-03 + v2rhobsigmaaa = -0.324835244787E-03 + v2rhobsigmaab = -0.649670489575E-03 + v2rhobsigmabb = -0.324835244787E-03 + + v2sigmaaa2 = -0.649078703127E-05 + v2sigmaaaab = -0.129815740625E-04 + v2sigmaaabb = -0.649078703127E-05 + v2sigmaab2 = -0.259631481251E-04 + v2sigmaabbb = -0.129815740625E-04 + v2sigmabb2 = -0.649078703127E-05 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.271855691853E+00 + vrhoa = -0.923103473041E-01 + vrhob = -0.923103473041E-01 + vsigmaaa = 0.786385334368E-03 + vsigmaab = 0.157277066874E-02 + vsigmabb = 0.786385334368E-03 + + v2rhoa2 = 0.141731701968E-01 + v2rhoab = -0.168480493572E-01 + v2rhob2 = 0.141731701968E-01 + + v2rhoasigmaaa = -0.281023204875E-03 + v2rhoasigmaab = -0.562046409750E-03 + v2rhoasigmabb = -0.281023204875E-03 + v2rhobsigmaaa = -0.281023204875E-03 + v2rhobsigmaab = -0.562046409750E-03 + v2rhobsigmabb = -0.281023204875E-03 + + v2sigmaaa2 = -0.586202682069E-05 + v2sigmaaaab = -0.117240536414E-04 + v2sigmaaabb = -0.586202682069E-05 + v2sigmaab2 = -0.234481072827E-04 + v2sigmaabbb = -0.117240536414E-04 + v2sigmabb2 = -0.586202682069E-05 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.156330536080E+00 + vrhoa = -0.102948996370E+00 + vrhob = -0.102948996370E+00 + vsigmaaa = 0.378004824716E-03 + vsigmaab = 0.756009649433E-03 + vsigmabb = 0.378004824716E-03 + + v2rhoa2 = 0.767829363534E-02 + v2rhoab = -0.200905483619E-01 + v2rhob2 = 0.767829363534E-02 + + v2rhoasigmaaa = 0.267671090070E-04 + v2rhoasigmaab = 0.535342180140E-04 + v2rhoasigmabb = 0.267671090070E-04 + v2rhobsigmaaa = 0.267671090070E-04 + v2rhobsigmaab = 0.535342180140E-04 + v2rhobsigmabb = 0.267671090070E-04 + + v2sigmaaa2 = -0.171987026880E-05 + v2sigmaaaab = -0.343974053761E-05 + v2sigmaaabb = -0.171987026880E-05 + v2sigmaab2 = -0.687948107522E-05 + v2sigmaabbb = -0.343974053761E-05 + v2sigmabb2 = -0.171987026880E-05 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.353114293615E-02 + vrhoa = -0.644123523321E-01 + vrhob = -0.644123523321E-01 + vsigmaaa = 0.830804942063E-02 + vsigmaab = 0.166160988413E-01 + vsigmabb = 0.830804942063E-02 + + v2rhoa2 = -0.294409365638E+00 + v2rhoab = -0.534985274786E+00 + v2rhob2 = -0.294409365638E+00 + + v2rhoasigmaaa = 0.746427566937E-01 + v2rhoasigmaab = 0.149285513387E+00 + v2rhoasigmabb = 0.746427566937E-01 + v2rhobsigmaaa = 0.746427566937E-01 + v2rhobsigmaab = 0.149285513387E+00 + v2rhobsigmabb = 0.746427566937E-01 + + v2sigmaaa2 = -0.283776069209E-01 + v2sigmaaaab = -0.567552138418E-01 + v2sigmaaabb = -0.283776069209E-01 + v2sigmaab2 = -0.113510427684E+00 + v2sigmaabbb = -0.567552138418E-01 + v2sigmabb2 = -0.283776069209E-01 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.531558156901E+03 + vrhoa = -0.157670707589E+00 + vrhob = -0.157670707589E+00 + vsigmaaa = 0.767547413336E-07 + vsigmaab = 0.153509482667E-06 + vsigmabb = 0.767547413336E-07 + + v2rhoa2 = 0.222158431130E-04 + v2rhoab = -0.278288704562E-04 + v2rhob2 = 0.222158431130E-04 + + v2rhoasigmaaa = -0.284276819003E-10 + v2rhoasigmaab = -0.568553638007E-10 + v2rhoasigmabb = -0.284276819003E-10 + v2rhobsigmaaa = -0.284276819003E-10 + v2rhobsigmaab = -0.568553638007E-10 + v2rhobsigmabb = -0.284276819003E-10 + + v2sigmaaa2 = -0.526353544028E-16 + v2sigmaaaab = -0.105270708806E-15 + v2sigmaaabb = -0.526353544028E-16 + v2sigmaab2 = -0.210541417611E-15 + v2sigmaabbb = -0.105270708806E-15 + v2sigmabb2 = -0.526353544028E-16 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.531555516738E+03 + vrhoa = -0.157671685407E+00 + vrhob = -0.157671685407E+00 + vsigmaaa = 0.767529308359E-07 + vsigmaab = 0.153505861672E-06 + vsigmabb = 0.767529308359E-07 + + v2rhoa2 = 0.222164315920E-04 + v2rhoab = -0.278281914345E-04 + v2rhob2 = 0.222164315920E-04 + + v2rhoasigmaaa = -0.284258379026E-10 + v2rhoasigmaab = -0.568516758052E-10 + v2rhoasigmabb = -0.284258379026E-10 + v2rhobsigmaaa = -0.284258379026E-10 + v2rhobsigmaab = -0.568516758052E-10 + v2rhobsigmabb = -0.284258379026E-10 + + v2sigmaaa2 = -0.526328718655E-16 + v2sigmaaaab = -0.105265743731E-15 + v2sigmaaabb = -0.526328718655E-16 + v2sigmaab2 = -0.210531487462E-15 + v2sigmaabbb = -0.105265743731E-15 + v2sigmabb2 = -0.526328718655E-16 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.204845328577E+03 + vrhoa = -0.139570172131E+00 + vrhob = -0.139570172131E+00 + vsigmaaa = 0.609549582413E-08 + vsigmaab = 0.121909916483E-07 + vsigmabb = 0.609549582413E-08 + + v2rhoa2 = -0.845856478622E-05 + v2rhoab = -0.379435495181E-04 + v2rhob2 = -0.845856478622E-05 + + v2rhoasigmaaa = 0.183107776239E-11 + v2rhoasigmaab = 0.366215552479E-11 + v2rhoasigmabb = 0.183107776239E-11 + v2rhobsigmaaa = 0.183107776239E-11 + v2rhobsigmaab = 0.366215552479E-11 + v2rhobsigmabb = 0.183107776239E-11 + + v2sigmaaa2 = -0.402310862302E-18 + v2sigmaaaab = -0.804621724604E-18 + v2sigmaaabb = -0.402310862302E-18 + v2sigmaab2 = -0.160924344921E-17 + v2sigmaabbb = -0.804621724604E-18 + v2sigmabb2 = -0.402310862302E-18 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.257202574589E-01 + vrhoa = -0.866997760784E-01 + vrhob = -0.866997760784E-01 + vsigmaaa = 0.582853357983E-02 + vsigmaab = 0.116570671597E-01 + vsigmabb = 0.582853357983E-02 + + v2rhoa2 = 0.728321951048E-01 + v2rhoab = -0.756102345474E-01 + v2rhob2 = 0.728321951048E-01 + + v2rhoasigmaaa = -0.305698872548E-02 + v2rhoasigmaab = -0.611397745095E-02 + v2rhoasigmabb = -0.305698872548E-02 + v2rhobsigmaaa = -0.305698872548E-02 + v2rhobsigmaab = -0.611397745095E-02 + v2rhobsigmabb = -0.305698872548E-02 + + v2sigmaaa2 = -0.233980425019E-02 + v2sigmaaaab = -0.467960850038E-02 + v2sigmaaabb = -0.233980425019E-02 + v2sigmaab2 = -0.935921700077E-02 + v2sigmaabbb = -0.467960850038E-02 + v2sigmabb2 = -0.233980425019E-02 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.192839940466E+05 + vrhoa = -0.192144028270E+00 + vrhob = -0.192144028270E+00 + vsigmaaa = 0.844177976352E-09 + vsigmaab = 0.168835595270E-08 + vsigmabb = 0.844177976352E-09 + + v2rhoa2 = 0.930079636518E-06 + v2rhoab = -0.112362987226E-05 + v2rhob2 = 0.930079636518E-06 + + v2rhoasigmaaa = -0.106185890697E-13 + v2rhoasigmaab = -0.212371781394E-13 + v2rhoasigmabb = -0.106185890697E-13 + v2rhobsigmaaa = -0.106185890697E-13 + v2rhobsigmaab = -0.212371781394E-13 + v2rhobsigmabb = -0.106185890697E-13 + + v2sigmaaa2 = -0.216237891268E-21 + v2sigmaaaab = -0.432475782536E-21 + v2sigmaaabb = -0.216237891268E-21 + v2sigmaab2 = -0.864951565071E-21 + v2sigmaabbb = -0.432475782536E-21 + v2sigmabb2 = -0.216237891268E-21 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.621606173598E+04 + vrhoa = -0.145186193191E+00 + vrhob = -0.145186193191E+00 + vsigmaaa = 0.239893933515E-10 + vsigmaab = 0.479787867030E-10 + vsigmabb = 0.239893933515E-10 + + v2rhoa2 = -0.415550006172E-06 + v2rhoab = -0.137798903649E-05 + v2rhob2 = -0.415550006172E-06 + + v2rhoasigmaaa = 0.270195164309E-15 + v2rhoasigmaab = 0.540390328617E-15 + v2rhoasigmabb = 0.270195164309E-15 + v2rhobsigmaaa = 0.270195164309E-15 + v2rhobsigmaab = 0.540390328617E-15 + v2rhobsigmabb = 0.270195164309E-15 + + v2sigmaaa2 = -0.210724100250E-24 + v2sigmaaaab = -0.421448200501E-24 + v2sigmaaabb = -0.210724100250E-24 + v2sigmaab2 = -0.842896401002E-24 + v2sigmaabbb = -0.421448200501E-24 + v2sigmabb2 = -0.210724100250E-24 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.103495051751E-01 + vrhoa = -0.808320886304E-01 + vrhob = -0.808320886304E-01 + vsigmaaa = 0.782485884453E-02 + vsigmaab = 0.156497176891E-01 + vsigmabb = 0.782485884453E-02 + + v2rhoa2 = 0.974468235880E-02 + v2rhoab = -0.195273591427E+00 + v2rhob2 = 0.974468235880E-02 + + v2rhoasigmaaa = 0.120240976646E-01 + v2rhoasigmaab = 0.240481953292E-01 + v2rhoasigmabb = 0.120240976646E-01 + v2rhobsigmaaa = 0.120240976646E-01 + v2rhobsigmaab = 0.240481953292E-01 + v2rhobsigmabb = 0.120240976646E-01 + + v2sigmaaa2 = -0.914758040599E-02 + v2sigmaaaab = -0.182951608120E-01 + v2sigmaaabb = -0.914758040599E-02 + v2sigmaab2 = -0.365903216240E-01 + v2sigmaabbb = -0.182951608120E-01 + v2sigmabb2 = -0.914758040599E-02 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.149930438056E+00 + vrhoa = -0.472559970726E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.632520331340E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.130590959396E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.735327076770E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.147821297915E+00 + vrhoa = -0.480325520180E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.608456906274E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.815520844173E-03 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.681211100497E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.596933203014E-01 + vrhoa = -0.494521116430E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.163547485507E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.918226192391E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.752364152605E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.134201626930E-03 + vrhoa = -0.113336793038E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.418957314771E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.639691764043E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.192576380057E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.466827360026E+01 + vrhoa = -0.911386831086E-01 + vrhob = -0.914525751657E-01 + vsigmaaa = 0.195526696493E-06 + vsigmaab = 0.391053392985E-06 + vsigmabb = 0.195526696493E-06 + + v2rhoa2 = -0.535201657866E-03 + v2rhoab = -0.850604423798E-03 + v2rhob2 = -0.538228029079E-03 + + v2rhoasigmaaa = 0.214289755089E-08 + v2rhoasigmaab = 0.428579510177E-08 + v2rhoasigmabb = 0.214289755089E-08 + v2rhobsigmaaa = 0.215378864780E-08 + v2rhobsigmaab = 0.430757729559E-08 + v2rhobsigmabb = 0.215378864780E-08 + + v2sigmaaa2 = -0.128838364018E-13 + v2sigmaaaab = -0.257676728036E-13 + v2sigmaaabb = -0.128838364018E-13 + v2sigmaab2 = -0.515353456071E-13 + v2sigmaabbb = -0.257676728036E-13 + v2sigmabb2 = -0.128838364018E-13 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.184442072405E+01 + vrhoa = -0.814334534280E-01 + vrhob = -0.820182123795E-01 + vsigmaaa = 0.510839298939E-06 + vsigmaab = 0.102167859788E-05 + vsigmabb = 0.510839298939E-06 + + v2rhoa2 = -0.124297349784E-02 + v2rhoab = -0.183505806584E-02 + v2rhob2 = -0.125767116982E-02 + + v2rhoasigmaaa = 0.134850158624E-07 + v2rhoasigmaab = 0.269700317248E-07 + v2rhoasigmabb = 0.134850158624E-07 + v2rhobsigmaaa = 0.136189478240E-07 + v2rhobsigmaab = 0.272378956480E-07 + v2rhobsigmabb = 0.136189478240E-07 + + v2sigmaaa2 = -0.216571369852E-12 + v2sigmaaaab = -0.433142739704E-12 + v2sigmaaabb = -0.216571369852E-12 + v2sigmaab2 = -0.866285479407E-12 + v2sigmaabbb = -0.433142739704E-12 + v2sigmabb2 = -0.216571369852E-12 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.416748767197E-02 + vrhoa = -0.595487649525E-01 + vrhob = -0.658275108773E-01 + vsigmaaa = 0.500446791291E-02 + vsigmaab = 0.100089358258E-01 + vsigmabb = 0.500446791291E-02 + + v2rhoa2 = -0.254320619062E+00 + v2rhoab = -0.454911463637E+00 + v2rhob2 = -0.296322781759E+00 + + v2rhoasigmaaa = 0.376458611019E-01 + v2rhoasigmaab = 0.752917222037E-01 + v2rhoasigmabb = 0.376458611019E-01 + v2rhobsigmaaa = 0.432477759464E-01 + v2rhobsigmaab = 0.864955518927E-01 + v2rhobsigmabb = 0.432477759464E-01 + + v2sigmaaa2 = -0.873874773980E-02 + v2sigmaaaab = -0.174774954796E-01 + v2sigmaaabb = -0.873874773980E-02 + v2sigmaab2 = -0.349549909592E-01 + v2sigmaabbb = -0.174774954796E-01 + v2sigmabb2 = -0.873874773980E-02 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.446674124729E-02 + vrhoa = -0.576230218023E-01 + vrhob = -0.884299955306E-01 + vsigmaaa = 0.565507026894E-01 + vsigmaab = 0.113101405379E+00 + vsigmabb = 0.565507026894E-01 + + v2rhoa2 = 0.211475716365E+00 + v2rhoab = -0.313442480821E+00 + v2rhob2 = 0.661715882717E+00 + + v2rhoasigmaaa = -0.366634765948E+00 + v2rhoasigmaab = -0.733269531896E+00 + v2rhoasigmabb = -0.366634765948E+00 + v2rhobsigmaaa = -0.183738128575E+00 + v2rhobsigmaab = -0.367476257149E+00 + v2rhobsigmabb = -0.183738128575E+00 + + v2sigmaaa2 = -0.113703722438E+01 + v2sigmaaaab = -0.227407444876E+01 + v2sigmaaabb = -0.113703722438E+01 + v2sigmaab2 = -0.454814889752E+01 + v2sigmaabbb = -0.227407444876E+01 + v2sigmabb2 = -0.113703722438E+01 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.853822762402E+01 + vrhoa = -0.136330468738E+00 + vrhob = -0.137562342876E+00 + vsigmaaa = 0.397018264645E-05 + vsigmaab = 0.794036529289E-05 + vsigmabb = 0.397018264645E-05 + + v2rhoa2 = 0.505383535819E-03 + v2rhoab = -0.719176570320E-03 + v2rhob2 = 0.520080723382E-03 + + v2rhoasigmaaa = 0.220509385365E-09 + v2rhoasigmaab = 0.441018770730E-09 + v2rhoasigmabb = 0.220509385365E-09 + v2rhobsigmaaa = 0.606911398719E-09 + v2rhobsigmaab = 0.121382279744E-08 + v2rhobsigmabb = 0.606911398719E-09 + + v2sigmaaa2 = -0.518845125296E-11 + v2sigmaaaab = -0.103769025059E-10 + v2sigmaaabb = -0.518845125296E-11 + v2sigmaab2 = -0.207538050118E-10 + v2sigmaabbb = -0.103769025059E-10 + v2sigmabb2 = -0.518845125296E-11 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.615277551535E+01 + vrhoa = -0.133907518541E+00 + vrhob = -0.133907518541E+00 + vsigmaaa = 0.414743637478E-05 + vsigmaab = 0.829487274956E-05 + vsigmabb = 0.414743637478E-05 + + v2rhoa2 = 0.435534219905E-03 + v2rhoab = -0.969294804880E-03 + v2rhob2 = 0.435534219905E-03 + + v2rhoasigmaaa = 0.125079346911E-07 + v2rhoasigmaab = 0.250158693823E-07 + v2rhoasigmabb = 0.125079346911E-07 + v2rhobsigmaaa = 0.125079346911E-07 + v2rhobsigmaab = 0.250158693823E-07 + v2rhobsigmabb = 0.125079346911E-07 + + v2sigmaaa2 = -0.710218297869E-11 + v2sigmaaaab = -0.142043659574E-10 + v2sigmaaabb = -0.710218297869E-11 + v2sigmaab2 = -0.284087319147E-10 + v2sigmaabbb = -0.142043659574E-10 + v2sigmabb2 = -0.710218297869E-11 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.513978017858E-02 + vrhoa = -0.677801008926E-01 + vrhob = -0.720903652109E-01 + vsigmaaa = 0.723862883206E-02 + vsigmaab = 0.144772576641E-01 + vsigmabb = 0.723862883206E-02 + + v2rhoa2 = -0.172744794034E+00 + v2rhoab = -0.396171978594E+00 + v2rhob2 = -0.188314565988E+00 + + v2rhoasigmaaa = 0.403167927387E-01 + v2rhoasigmaab = 0.806335854774E-01 + v2rhoasigmabb = 0.403167927387E-01 + v2rhobsigmaaa = 0.445643432070E-01 + v2rhobsigmaab = 0.891286864140E-01 + v2rhobsigmabb = 0.445643432070E-01 + + v2sigmaaa2 = -0.149411369506E-01 + v2sigmaaaab = -0.298822739012E-01 + v2sigmaaabb = -0.149411369506E-01 + v2sigmaab2 = -0.597645478025E-01 + v2sigmaabbb = -0.298822739012E-01 + v2sigmabb2 = -0.149411369506E-01 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.203181802597E-02 + vrhoa = -0.608626957301E-01 + vrhob = -0.779575998152E-01 + vsigmaaa = 0.578479124549E-01 + vsigmaab = 0.115695824910E+00 + vsigmabb = 0.578479124549E-01 + + v2rhoa2 = 0.152335258351E-01 + v2rhoab = -0.720403954936E+00 + v2rhob2 = 0.952448412124E-01 + + v2rhoasigmaaa = 0.224592118966E+00 + v2rhoasigmaab = 0.449184237932E+00 + v2rhoasigmabb = 0.224592118966E+00 + v2rhobsigmaaa = 0.517340140054E+00 + v2rhobsigmaab = 0.103468028011E+01 + v2rhobsigmabb = 0.517340140054E+00 + + v2sigmaaa2 = -0.238365551254E+01 + v2sigmaaaab = -0.476731102509E+01 + v2sigmaaabb = -0.238365551254E+01 + v2sigmaab2 = -0.953462205018E+01 + v2sigmaabbb = -0.476731102509E+01 + v2sigmabb2 = -0.238365551254E+01 + diff --git a/libxc-2.2.0/testsuite/df_repo/gga_c_pw91.data b/libxc-2.2.0/testsuite/df_repo/gga_c_pw91.data new file mode 100644 index 000000000..17418174f --- /dev/null +++ b/libxc-2.2.0/testsuite/df_repo/gga_c_pw91.data @@ -0,0 +1,600 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.277344423214E+00 + vrhoa = -0.902549628505E-01 + vrhob = -0.902549628505E-01 + vsigmaaa = 0.973880560793E-03 + vsigmaab = 0.194776112159E-02 + vsigmabb = 0.973880560793E-03 + + v2rhoa2 = 0.129726626281E-01 + v2rhoab = -0.182704041173E-01 + v2rhob2 = 0.129726626281E-01 + + v2rhoasigmaaa = -0.381075641669E-03 + v2rhoasigmaab = -0.762151283338E-03 + v2rhoasigmabb = -0.381075641669E-03 + v2rhobsigmaaa = -0.381075641669E-03 + v2rhobsigmaab = -0.762151283338E-03 + v2rhobsigmabb = -0.381075641669E-03 + + v2sigmaaa2 = -0.372455307820E-04 + v2sigmaaaab = -0.744910615639E-04 + v2sigmaaabb = -0.372455307820E-04 + v2sigmaab2 = -0.148982123128E-03 + v2sigmaabbb = -0.744910615639E-04 + v2sigmabb2 = -0.372455307820E-04 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.271390707917E+00 + vrhoa = -0.922007758201E-01 + vrhob = -0.922007758201E-01 + vsigmaaa = 0.799975378309E-03 + vsigmaab = 0.159995075662E-02 + vsigmabb = 0.799975378309E-03 + + v2rhoa2 = 0.139081741919E-01 + v2rhoab = -0.171188952520E-01 + v2rhob2 = 0.139081741919E-01 + + v2rhoasigmaaa = -0.228201504472E-03 + v2rhoasigmaab = -0.456403008945E-03 + v2rhoasigmabb = -0.228201504472E-03 + v2rhobsigmaaa = -0.228201504472E-03 + v2rhobsigmaab = -0.456403008945E-03 + v2rhobsigmabb = -0.228201504472E-03 + + v2sigmaaa2 = -0.169041710688E-04 + v2sigmaaaab = -0.338083421376E-04 + v2sigmaaabb = -0.169041710688E-04 + v2sigmaab2 = -0.676166842752E-04 + v2sigmaabbb = -0.338083421376E-04 + v2sigmabb2 = -0.169041710688E-04 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.162732206486E+00 + vrhoa = -0.100173083518E+00 + vrhob = -0.100173083518E+00 + vsigmaaa = 0.333461786516E-03 + vsigmaab = 0.666923573033E-03 + vsigmabb = 0.333461786516E-03 + + v2rhoa2 = 0.777007069028E-02 + v2rhoab = -0.203064959581E-01 + v2rhob2 = 0.777007069028E-02 + + v2rhoasigmaaa = 0.283860923411E-04 + v2rhoasigmaab = 0.567721846822E-04 + v2rhoasigmabb = 0.283860923411E-04 + v2rhobsigmaaa = 0.283860923411E-04 + v2rhobsigmaab = 0.567721846822E-04 + v2rhobsigmabb = 0.283860923411E-04 + + v2sigmaaa2 = -0.156828317366E-05 + v2sigmaaaab = -0.313656634732E-05 + v2sigmaaabb = -0.156828317366E-05 + v2sigmaab2 = -0.627313269464E-05 + v2sigmaabbb = -0.313656634732E-05 + v2sigmabb2 = -0.156828317366E-05 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.395121494518E-02 + vrhoa = -0.657432879667E-01 + vrhob = -0.657432879667E-01 + vsigmaaa = 0.796497509469E-02 + vsigmaab = 0.159299501894E-01 + vsigmabb = 0.796497509469E-02 + + v2rhoa2 = -0.202034475850E+00 + v2rhoab = -0.457757341212E+00 + v2rhob2 = -0.202034475850E+00 + + v2rhoasigmaaa = 0.575363016683E-01 + v2rhoasigmaab = 0.115072603337E+00 + v2rhoasigmabb = 0.575363016683E-01 + v2rhobsigmaaa = 0.575363016683E-01 + v2rhobsigmaab = 0.115072603337E+00 + v2rhobsigmabb = 0.575363016683E-01 + + v2sigmaaa2 = -0.245078603329E-01 + v2sigmaaaab = -0.490157206657E-01 + v2sigmaaabb = -0.245078603329E-01 + v2sigmaab2 = -0.980314413314E-01 + v2sigmaabbb = -0.490157206657E-01 + v2sigmabb2 = -0.245078603329E-01 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.531561314188E+03 + vrhoa = -0.157671673276E+00 + vrhob = -0.157671673276E+00 + vsigmaaa = 0.901476672206E-07 + vsigmaab = 0.180295334441E-06 + vsigmabb = 0.901476672206E-07 + + v2rhoa2 = 0.222159132794E-04 + v2rhoab = -0.278289909468E-04 + v2rhob2 = 0.222159132794E-04 + + v2rhoasigmaaa = -0.334157735379E-10 + v2rhoasigmaab = -0.668315470758E-10 + v2rhoasigmabb = -0.334157735379E-10 + v2rhobsigmaaa = -0.334157735379E-10 + v2rhobsigmaab = -0.668315470758E-10 + v2rhobsigmabb = -0.334157735379E-10 + + v2sigmaaa2 = -0.891425333515E-16 + v2sigmaaaab = -0.178285066703E-15 + v2sigmaaabb = -0.891425333515E-16 + v2sigmaab2 = -0.356570133406E-15 + v2sigmaabbb = -0.178285066703E-15 + v2sigmabb2 = -0.891425333515E-16 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.531558213359E+03 + vrhoa = -0.157672822650E+00 + vrhob = -0.157672822650E+00 + vsigmaaa = 0.901446009986E-07 + vsigmaab = 0.180289201997E-06 + vsigmabb = 0.901446009986E-07 + + v2rhoa2 = 0.222166054165E-04 + v2rhoab = -0.278281924696E-04 + v2rhob2 = 0.222166054165E-04 + + v2rhoasigmaaa = -0.334125757620E-10 + v2rhoasigmaab = -0.668251515239E-10 + v2rhoasigmabb = -0.334125757620E-10 + v2rhobsigmaaa = -0.334125757620E-10 + v2rhobsigmaab = -0.668251515239E-10 + v2rhobsigmabb = -0.334125757620E-10 + + v2sigmaaa2 = -0.891375928080E-16 + v2sigmaaaab = -0.178275185616E-15 + v2sigmaaabb = -0.891375928080E-16 + v2sigmaab2 = -0.356550371232E-15 + v2sigmaabbb = -0.178275185616E-15 + v2sigmabb2 = -0.891375928080E-16 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.241006114605E+03 + vrhoa = -0.139542676620E+00 + vrhob = -0.139542676620E+00 + vsigmaaa = 0.502786520924E-08 + vsigmaab = 0.100557304185E-07 + vsigmabb = 0.502786520924E-08 + + v2rhoa2 = -0.192326293278E-05 + v2rhoab = -0.346455045398E-04 + v2rhob2 = -0.192326293278E-05 + + v2rhoasigmaaa = 0.139737398346E-11 + v2rhoasigmaab = 0.279474796692E-11 + v2rhoasigmabb = 0.139737398346E-11 + v2rhobsigmaaa = 0.139737398346E-11 + v2rhobsigmaab = 0.279474796692E-11 + v2rhobsigmabb = 0.139737398346E-11 + + v2sigmaaa2 = -0.323165021063E-18 + v2sigmaaaab = -0.646330042125E-18 + v2sigmaaabb = -0.323165021063E-18 + v2sigmaab2 = -0.129266008425E-17 + v2sigmaabbb = -0.646330042125E-18 + v2sigmabb2 = -0.323165021063E-18 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.261508836674E-01 + vrhoa = -0.850380343594E-01 + vrhob = -0.850380343594E-01 + vsigmaaa = 0.532761830491E-02 + vsigmaab = 0.106552366098E-01 + vsigmabb = 0.532761830491E-02 + + v2rhoa2 = 0.676821789787E-01 + v2rhoab = -0.810397979031E-01 + v2rhob2 = 0.676821789787E-01 + + v2rhoasigmaaa = -0.195075654625E-02 + v2rhoasigmaab = -0.390151309250E-02 + v2rhoasigmabb = -0.195075654625E-02 + v2rhobsigmaaa = -0.195075654625E-02 + v2rhobsigmaab = -0.390151309250E-02 + v2rhobsigmabb = -0.195075654625E-02 + + v2sigmaaa2 = -0.231629271760E-02 + v2sigmaaaab = -0.463258543520E-02 + v2sigmaaabb = -0.231629271760E-02 + v2sigmaab2 = -0.926517087040E-02 + v2sigmaabbb = -0.463258543520E-02 + v2sigmabb2 = -0.231629271760E-02 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.192841197359E+05 + vrhoa = -0.192145308961E+00 + vrhob = -0.192145308961E+00 + vsigmaaa = 0.988605615947E-09 + vsigmaab = 0.197721123189E-08 + vsigmabb = 0.988605615947E-09 + + v2rhoa2 = 0.930082983575E-06 + v2rhoab = -0.112363497767E-05 + v2rhob2 = 0.930082983575E-06 + + v2rhoasigmaaa = -0.124407912518E-13 + v2rhoasigmaab = -0.248815825037E-13 + v2rhoasigmabb = -0.124407912518E-13 + v2rhobsigmaaa = -0.124407912518E-13 + v2rhobsigmaab = -0.248815825037E-13 + v2rhobsigmabb = -0.124407912518E-13 + + v2sigmaaa2 = -0.301785816720E-21 + v2sigmaaaab = -0.603571633439E-21 + v2sigmaaabb = -0.301785816720E-21 + v2sigmaab2 = -0.120714326688E-20 + v2sigmaabbb = -0.603571633439E-21 + v2sigmabb2 = -0.301785816720E-21 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.787195454507E+04 + vrhoa = -0.150389301122E+00 + vrhob = -0.150389301122E+00 + vsigmaaa = 0.196050117191E-10 + vsigmaab = 0.392100234383E-10 + vsigmabb = 0.196050117191E-10 + + v2rhoa2 = -0.111565513161E-06 + v2rhoab = -0.126728935652E-05 + v2rhob2 = -0.111565513161E-06 + + v2rhoasigmaaa = 0.201213149017E-15 + v2rhoasigmaab = 0.402426298035E-15 + v2rhoasigmabb = 0.201213149017E-15 + v2rhobsigmaaa = 0.201213149017E-15 + v2rhobsigmaab = 0.402426298035E-15 + v2rhobsigmabb = 0.201213149017E-15 + + v2sigmaaa2 = -0.166334791796E-24 + v2sigmaaaab = -0.332669583592E-24 + v2sigmaaabb = -0.166334791796E-24 + v2sigmaab2 = -0.665339167185E-24 + v2sigmaabbb = -0.332669583592E-24 + v2sigmabb2 = -0.166334791796E-24 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.108821457516E-01 + vrhoa = -0.791955558902E-01 + vrhob = -0.791955558902E-01 + vsigmaaa = 0.710572162850E-02 + vsigmaab = 0.142114432570E-01 + vsigmabb = 0.710572162850E-02 + + v2rhoa2 = 0.253769163609E-01 + v2rhoab = -0.183037140984E+00 + v2rhob2 = 0.253769163609E-01 + + v2rhoasigmaaa = 0.965999714364E-02 + v2rhoasigmaab = 0.193199942873E-01 + v2rhoasigmabb = 0.965999714364E-02 + v2rhobsigmaaa = 0.965999714364E-02 + v2rhobsigmaab = 0.193199942873E-01 + v2rhobsigmabb = 0.965999714364E-02 + + v2sigmaaa2 = -0.813375887491E-02 + v2sigmaaaab = -0.162675177498E-01 + v2sigmaaabb = -0.813375887491E-02 + v2sigmaab2 = -0.325350354996E-01 + v2sigmaabbb = -0.162675177498E-01 + v2sigmabb2 = -0.813375887491E-02 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.149928973101E+00 + vrhoa = -0.472554998259E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.743726718647E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.130588545113E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.222014011291E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.147519972501E+00 + vrhoa = -0.480913103300E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.675729187591E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.829116659026E-03 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.179677466496E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.659226012199E-01 + vrhoa = -0.486953252341E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.144302755913E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.711870564589E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.629087409192E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.172759428017E-03 + vrhoa = -0.137874762962E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.494345568222E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.683493680484E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.207774437982E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.640006961124E+01 + vrhoa = -0.999866513511E-01 + vrhob = -0.100372571062E+00 + vsigmaaa = 0.184826494395E-06 + vsigmaab = 0.369652988790E-06 + vsigmabb = 0.184826494395E-06 + + v2rhoa2 = -0.263846884982E-03 + v2rhoab = -0.650432018513E-03 + v2rhob2 = -0.265180694533E-03 + + v2rhoasigmaaa = 0.136557309627E-08 + v2rhoasigmaab = 0.273114619254E-08 + v2rhoasigmabb = 0.136557309627E-08 + v2rhobsigmaaa = 0.137496927033E-08 + v2rhobsigmaab = 0.274993854066E-08 + v2rhobsigmabb = 0.137496927033E-08 + + v2sigmaaa2 = -0.100927632053E-13 + v2sigmaaaab = -0.201855264106E-13 + v2sigmaaabb = -0.100927632053E-13 + v2sigmaab2 = -0.403710528212E-13 + v2sigmaabbb = -0.201855264106E-13 + v2sigmabb2 = -0.100927632053E-13 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.258051271460E+01 + vrhoa = -0.917654870253E-01 + vrhob = -0.924958459953E-01 + vsigmaaa = 0.504340587823E-06 + vsigmaab = 0.100868117565E-05 + vsigmabb = 0.504340587823E-06 + + v2rhoa2 = -0.673510067892E-03 + v2rhoab = -0.140781632726E-02 + v2rhob2 = -0.681437355666E-03 + + v2rhoasigmaaa = 0.880806595654E-08 + v2rhoasigmaab = 0.176161319131E-07 + v2rhoasigmabb = 0.880806595654E-08 + v2rhobsigmaaa = 0.892599758143E-08 + v2rhobsigmaab = 0.178519951629E-07 + v2rhobsigmabb = 0.892599758143E-08 + + v2sigmaaa2 = -0.173276860156E-12 + v2sigmaaaab = -0.346553720312E-12 + v2sigmaaabb = -0.173276860156E-12 + v2sigmaab2 = -0.693107440625E-12 + v2sigmaabbb = -0.346553720312E-12 + v2sigmabb2 = -0.173276860156E-12 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.475398805591E-02 + vrhoa = -0.614930812180E-01 + vrhob = -0.682665101239E-01 + vsigmaaa = 0.486210103008E-02 + vsigmaab = 0.972420206015E-02 + vsigmabb = 0.486210103008E-02 + + v2rhoa2 = -0.180150058142E+00 + v2rhoab = -0.388435750226E+00 + v2rhob2 = -0.208827666674E+00 + + v2rhoasigmaaa = 0.288797891283E-01 + v2rhoasigmaab = 0.577595782566E-01 + v2rhoasigmabb = 0.288797891283E-01 + v2rhobsigmaaa = 0.338842245007E-01 + v2rhobsigmaab = 0.677684490015E-01 + v2rhobsigmabb = 0.338842245007E-01 + + v2sigmaaa2 = -0.755929074438E-02 + v2sigmaaaab = -0.151185814888E-01 + v2sigmaaabb = -0.755929074438E-02 + v2sigmaab2 = -0.302371629775E-01 + v2sigmaabbb = -0.151185814888E-01 + v2sigmabb2 = -0.755929074438E-02 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.450106022368E-02 + vrhoa = -0.568426120793E-01 + vrhob = -0.876498238182E-01 + vsigmaaa = 0.531751834129E-01 + vsigmaab = 0.106350366826E+00 + vsigmabb = 0.531751834129E-01 + + v2rhoa2 = 0.192611490688E+00 + v2rhoab = -0.331153469676E+00 + v2rhob2 = 0.645433404561E+00 + + v2rhoasigmaaa = -0.308498888708E+00 + v2rhoasigmaab = -0.616997777417E+00 + v2rhoasigmabb = -0.308498888708E+00 + v2rhobsigmaaa = -0.129198778272E+00 + v2rhobsigmaab = -0.258397556545E+00 + v2rhobsigmabb = -0.129198778272E+00 + + v2sigmaaa2 = -0.119074508391E+01 + v2sigmaaaab = -0.238149016782E+01 + v2sigmaaabb = -0.119074508391E+01 + v2sigmaab2 = -0.476298033563E+01 + v2sigmaabbb = -0.238149016782E+01 + v2sigmabb2 = -0.119074508391E+01 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.872911626818E+01 + vrhoa = -0.132719827372E+00 + vrhob = -0.133959465417E+00 + vsigmaaa = 0.344083560595E-05 + vsigmaab = 0.688167121190E-05 + vsigmabb = 0.344083560595E-05 + + v2rhoa2 = 0.505964577930E-03 + v2rhoab = -0.726078033783E-03 + v2rhob2 = 0.521227370759E-03 + + v2rhoasigmaaa = 0.115106405575E-08 + v2rhoasigmaab = 0.230212811151E-08 + v2rhoasigmabb = 0.115106405575E-08 + v2rhobsigmaaa = 0.151586408760E-08 + v2rhobsigmaab = 0.303172817520E-08 + v2rhobsigmabb = 0.151586408760E-08 + + v2sigmaaa2 = -0.463769328565E-11 + v2sigmaaaab = -0.927538657130E-11 + v2sigmaaabb = -0.463769328565E-11 + v2sigmaab2 = -0.185507731426E-10 + v2sigmaabbb = -0.927538657130E-11 + v2sigmabb2 = -0.463769328565E-11 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.638715240205E+01 + vrhoa = -0.130151243760E+00 + vrhob = -0.130151243760E+00 + vsigmaaa = 0.356214344775E-05 + vsigmaab = 0.712428689549E-05 + vsigmabb = 0.356214344775E-05 + + v2rhoa2 = 0.429350078205E-03 + v2rhoab = -0.992413954431E-03 + v2rhob2 = 0.429350078205E-03 + + v2rhoasigmaaa = 0.140483701399E-07 + v2rhoasigmaab = 0.280967402798E-07 + v2rhoasigmabb = 0.140483701399E-07 + v2rhobsigmaaa = 0.140483701399E-07 + v2rhobsigmaab = 0.280967402798E-07 + v2rhobsigmabb = 0.140483701399E-07 + + v2sigmaaa2 = -0.640783905442E-11 + v2sigmaaaab = -0.128156781088E-10 + v2sigmaaabb = -0.640783905442E-11 + v2sigmaab2 = -0.256313562177E-10 + v2sigmaabbb = -0.128156781088E-10 + v2sigmabb2 = -0.640783905442E-11 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.566491852414E-02 + vrhoa = -0.681082463225E-01 + vrhob = -0.726308333024E-01 + vsigmaaa = 0.680369403563E-02 + vsigmaab = 0.136073880713E-01 + vsigmabb = 0.680369403563E-02 + + v2rhoa2 = -0.109303945624E+00 + v2rhoab = -0.339659817865E+00 + v2rhob2 = -0.117365761801E+00 + + v2rhoasigmaaa = 0.302762854212E-01 + v2rhoasigmaab = 0.605525708424E-01 + v2rhoasigmabb = 0.302762854212E-01 + v2rhobsigmaaa = 0.340221664665E-01 + v2rhobsigmaab = 0.680443329331E-01 + v2rhobsigmabb = 0.340221664665E-01 + + v2sigmaaa2 = -0.128174817765E-01 + v2sigmaaaab = -0.256349635531E-01 + v2sigmaaabb = -0.128174817765E-01 + v2sigmaab2 = -0.512699271061E-01 + v2sigmaabbb = -0.256349635531E-01 + v2sigmabb2 = -0.128174817765E-01 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.211597767436E-02 + vrhoa = -0.596711649572E-01 + vrhob = -0.769843756564E-01 + vsigmaaa = 0.535412730241E-01 + vsigmaab = 0.107082546048E+00 + vsigmabb = 0.535412730241E-01 + + v2rhoa2 = 0.507933219381E-01 + v2rhoab = -0.677294674321E+00 + v2rhob2 = 0.167846055847E+00 + + v2rhoasigmaaa = 0.169155786052E+00 + v2rhoasigmaab = 0.338311572103E+00 + v2rhoasigmabb = 0.169155786052E+00 + v2rhobsigmaaa = 0.435630247613E+00 + v2rhobsigmaab = 0.871260495226E+00 + v2rhobsigmabb = 0.435630247613E+00 + + v2sigmaaa2 = -0.215562112877E+01 + v2sigmaaaab = -0.431124225755E+01 + v2sigmaaabb = -0.215562112877E+01 + v2sigmaab2 = -0.862248451509E+01 + v2sigmaabbb = -0.431124225755E+01 + v2sigmabb2 = -0.215562112877E+01 diff --git a/libxc-2.2.0/testsuite/df_repo/gga_x_b88.data b/libxc-2.2.0/testsuite/df_repo/gga_x_b88.data new file mode 100644 index 000000000..bf8ca951e --- /dev/null +++ b/libxc-2.2.0/testsuite/df_repo/gga_x_b88.data @@ -0,0 +1,601 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.377592720836E+01 + vrhoa = -0.148075576798E+01 + vrhob = -0.148075576798E+01 + vsigmaaa = -0.207006537839E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.207006537839E-02 + + v2rhoa2 = -0.290344268232E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.290344268232E+00 + + v2rhoasigmaaa = 0.162358068893E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.162358068893E-02 + + v2sigmaaa2 = 0.253445241319E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.253445241319E-04 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.378289713911E+01 + vrhoa = -0.147807268065E+01 + vrhob = -0.147807268065E+01 + vsigmaaa = -0.203114756676E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.203114756676E-02 + + v2rhoa2 = -0.293917869186E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.293917869186E+00 + + v2rhoasigmaaa = 0.153738619102E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.153738619102E-02 + + v2sigmaaa2 = 0.208765215311E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.208765215311E-04 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.334570325134E+01 + vrhoa = -0.136817307919E+01 + vrhob = -0.136817307919E+01 + vsigmaaa = -0.185634599412E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.185634599412E-02 + + v2rhoa2 = -0.371678164240E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.371678164240E+00 + + v2rhoasigmaaa = 0.105687034683E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.105687034683E-02 + + v2sigmaaa2 = 0.926898408248E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.926898408248E-05 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.851611545044E-01 + vrhoa = -0.501899165865E+00 + vrhob = -0.501899165865E+00 + vsigmaaa = -0.543404155466E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.543404155466E-01 + + v2rhoa2 = -0.253321231850E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.253321231850E+01 + + v2rhoasigmaaa = 0.239754146866E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.239754146866E+00 + + v2sigmaaa2 = 0.221360010652E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.221360010652E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.407494475322E+05 + vrhoa = -0.150923879747E+02 + vrhob = -0.150923879747E+02 + vsigmaaa = -0.191816494659E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.191816494659E-06 + + v2rhoa2 = -0.279488666210E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.279488666210E-02 + + v2rhoasigmaaa = 0.142086292324E-09 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.142086292324E-09 + + v2sigmaaa2 = 0.201646090402E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.201646090402E-16 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.407494508312E+05 + vrhoa = -0.150923867529E+02 + vrhob = -0.150923867529E+02 + vsigmaaa = -0.191816321255E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.191816321255E-06 + + v2rhoa2 = -0.279488824600E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.279488824600E-02 + + v2rhoasigmaaa = 0.142085906983E-09 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.142085906983E-09 + + v2sigmaaa2 = 0.201644008560E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.201644008560E-16 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.362648637930E+05 + vrhoa = -0.140333722784E+02 + vrhob = -0.140333722784E+02 + vsigmaaa = -0.174646643568E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.174646643568E-06 + + v2rhoa2 = -0.352244394438E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.352244394438E-02 + + v2rhoasigmaaa = 0.971067113036E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.971067113036E-10 + + v2sigmaaa2 = 0.785386351399E-17 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.785386351399E-17 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.321148637763E+00 + vrhoa = -0.766539815464E+00 + vrhob = -0.766539815464E+00 + vsigmaaa = -0.198197408319E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.198197408319E-01 + + v2rhoa2 = -0.117949870779E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.117949870779E+01 + + v2rhoasigmaaa = 0.685130252745E-01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.685130252745E-01 + + v2sigmaaa2 = 0.115351801846E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.115351801846E-01 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.370503980183E+07 + vrhoa = -0.466042742267E+02 + vrhob = -0.466042742267E+02 + vsigmaaa = -0.210967131116E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.210967131116E-08 + + v2rhoa2 = -0.293108643192E-03 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.293108643192E-03 + + v2rhoasigmaaa = 0.530734919752E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.530734919752E-13 + + v2sigmaaa2 = 0.268272614874E-22 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.268272614874E-22 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.328152696735E+07 + vrhoa = -0.433514250199E+02 + vrhob = -0.433514250199E+02 + vsigmaaa = -0.194182330561E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.194182330561E-08 + + v2rhoa2 = -0.368694289315E-03 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.368694289315E-03 + + v2rhoasigmaaa = 0.372175421272E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.372175421272E-13 + + v2sigmaaa2 = 0.108604300970E-22 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.108604300970E-22 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.161367392847E+00 + vrhoa = -0.619947650806E+00 + vrhob = -0.619947650806E+00 + vsigmaaa = -0.341862053361E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.341862053361E-01 + + v2rhoa2 = -0.179936512300E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.179936512300E+01 + + v2rhoasigmaaa = 0.148255198864E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.148255198864E+00 + + v2sigmaaa2 = 0.547109233247E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.547109233247E-01 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.494484233083E+01 + vrhoa = -0.188374945936E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.790360507210E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.179404710416E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.141061224494E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.494752158228E+01 + vrhoa = -0.188273473796E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.785719874797E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.180074584533E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.132207800833E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.419401965265E+01 + vrhoa = -0.172996985225E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.753968712720E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.231847776994E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.631038474677E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.259998774808E-01 + vrhoa = -0.428541964579E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.782798087404E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.312635380295E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.690680500539E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.740814331850E+03 + vrhoa = -0.498247046111E+01 + vrhob = -0.495532429311E+01 + vsigmaaa = -0.678262141094E-05 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.682517937334E-05 + + v2rhoa2 = -0.270432929879E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.272490060294E-01 + + v2rhoasigmaaa = 0.426066228043E-07 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.425046982664E-07 + + v2sigmaaa2 = 0.424725929436E-12 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.432961117719E-12 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.277987329958E+03 + vrhoa = -0.385951846654E+01 + vrhob = -0.381309494319E+01 + vsigmaaa = -0.172434478018E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.173712338362E-04 + + v2rhoa2 = -0.441426807406E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.447245742260E-01 + + v2rhoasigmaaa = 0.201415922856E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.195961359539E-06 + + v2sigmaaa2 = 0.700742719647E-11 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.718678968862E-11 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.120208982576E+00 + vrhoa = -0.583637510333E+00 + vrhob = -0.501672871724E+00 + vsigmaaa = -0.379227871606E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.367802205908E-01 + + v2rhoa2 = -0.199082326261E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.213690115573E+01 + + v2rhoasigmaaa = 0.160652968405E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.609908850345E-01 + + v2sigmaaa2 = 0.741970758035E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.737150455275E-01 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.416730804241E-01 + vrhoa = -0.522700471817E+00 + vrhob = -0.360524872778E+00 + vsigmaaa = -0.111846105258E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.249411314940E+00 + + v2rhoa2 = -0.245380935846E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.517371957290E+01 + + v2rhoasigmaaa = 0.156984506289E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.418857803825E+01 + + v2sigmaaa2 = 0.244026452179E+01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.211148438264E+02 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.343037899309E+03 + vrhoa = -0.451375531283E+01 + vrhob = -0.448071957650E+01 + vsigmaaa = -0.204625762085E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.209266539812E-04 + + v2rhoa2 = -0.327661718483E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.333090761894E-01 + + v2rhoasigmaaa = 0.455875527750E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.472402981076E-06 + + v2sigmaaa2 = 0.153056541719E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.162083837575E-10 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.260133861611E+03 + vrhoa = -0.416254426190E+01 + vrhob = -0.416322526434E+01 + vsigmaaa = -0.262815715798E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.263113502629E-04 + + v2rhoa2 = -0.391759770307E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.391492164486E-01 + + v2rhoasigmaaa = 0.680016391145E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.681990700893E-06 + + v2sigmaaa2 = 0.297024234619E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.298552512045E-10 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.112603177863E+00 + vrhoa = -0.568498809942E+00 + vrhob = -0.520860206545E+00 + vsigmaaa = -0.423139064219E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.436372569148E-01 + + v2rhoa2 = -0.209994430549E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.229642938280E+01 + + v2rhoasigmaaa = 0.195292854203E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.150061257405E+00 + + v2sigmaaa2 = 0.103073123098E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.115652366462E+00 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.253983617946E-01 + vrhoa = -0.431645138108E+00 + vrhob = -0.325991019475E+00 + vsigmaaa = -0.175455092294E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.260075409570E+00 + + v2rhoa2 = -0.374315005133E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.566470285703E+01 + + v2rhoasigmaaa = 0.291762144791E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.301407606104E+01 + + v2sigmaaa2 = 0.765442610536E+01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.248245711494E+02 + diff --git a/libxc-2.2.0/testsuite/df_repo/gga_x_ft97_b.data b/libxc-2.2.0/testsuite/df_repo/gga_x_ft97_b.data new file mode 100644 index 000000000..d685453de --- /dev/null +++ b/libxc-2.2.0/testsuite/df_repo/gga_x_ft97_b.data @@ -0,0 +1,601 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.377592720836E+01 + vrhoa = -0.148075576798E+01 + vrhob = -0.148075576798E+01 + vsigmaaa = -0.143605561175E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.143605561175E-02 + + v2rhoa2 = -0.290344268232E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.290344268232E+00 + + v2rhoasigmaaa = 0.112631812686E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.112631812686E-02 + + v2sigmaaa2 = -0.149288641286E-09 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.149288641286E-09 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.378080978542E+01 + vrhoa = -0.147884106019E+01 + vrhob = -0.147884106019E+01 + vsigmaaa = -0.143604158771E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.143604158771E-02 + + v2rhoa2 = -0.292972150379E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.292972150379E+00 + + v2rhoasigmaaa = 0.112624324247E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.112624324247E-02 + + v2sigmaaa2 = 0.238076427240E-07 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.238076427240E-07 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.331715455718E+01 + vrhoa = -0.136703399474E+01 + vrhob = -0.136703399474E+01 + vsigmaaa = -0.167589249857E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.167589249857E-02 + + v2rhoa2 = -0.395466109176E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.395466109176E+00 + + v2rhoasigmaaa = 0.143251479532E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.143251479532E-02 + + v2sigmaaa2 = 0.893069120069E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.893069120069E-06 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.852106905695E-01 + vrhoa = -0.469984067373E+00 + vrhob = -0.469984067373E+00 + vsigmaaa = -0.665884878683E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.665884878683E-01 + + v2rhoa2 = -0.366372661368E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.366372661368E+01 + + v2rhoasigmaaa = 0.714424943332E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.714424943332E+00 + + v2sigmaaa2 = 0.111703681307E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.111703681307E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.407494475321E+05 + vrhoa = -0.150923879748E+02 + vrhob = -0.150923879748E+02 + vsigmaaa = -0.133067859703E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.133067859703E-06 + + v2rhoa2 = -0.279488666207E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.279488666207E-02 + + v2rhoasigmaaa = 0.985687849651E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.985687849651E-10 + + v2sigmaaa2 = -0.138333873952E-13 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.138333873952E-13 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.407494498218E+05 + vrhoa = -0.150923871267E+02 + vrhob = -0.150923871267E+02 + vsigmaaa = -0.133186574384E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.133186574384E-06 + + v2rhoa2 = -0.279488776135E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.279488776135E-02 + + v2rhoasigmaaa = 0.986567217657E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.986567217657E-10 + + v2sigmaaa2 = -0.137764957633E-13 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.137764957633E-13 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.363433635640E+05 + vrhoa = -0.138931847324E+02 + vrhob = -0.138931847324E+02 + vsigmaaa = -0.202767444177E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.202767444177E-06 + + v2rhoa2 = -0.387943919205E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.387943919205E-02 + + v2rhoasigmaaa = 0.159799102049E-09 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.159799102049E-09 + + v2sigmaaa2 = 0.148829211285E-17 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.148829211285E-17 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.318630276460E+00 + vrhoa = -0.767047598725E+00 + vrhob = -0.767047598725E+00 + vsigmaaa = -0.173943868216E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.173943868216E-01 + + v2rhoa2 = -0.123201989739E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.123201989739E+01 + + v2rhoasigmaaa = 0.865749660907E-01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.865749660907E-01 + + v2sigmaaa2 = 0.914763270162E-03 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.914763270162E-03 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.370503980171E+07 + vrhoa = -0.466042742282E+02 + vrhob = -0.466042742282E+02 + vsigmaaa = -0.147780768222E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.147780768222E-08 + + v2rhoa2 = -0.293108643124E-03 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.293108643124E-03 + + v2rhoasigmaaa = 0.371775517540E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.371775517540E-13 + + v2sigmaaa2 = -0.145350140041E-15 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.145350140041E-15 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.328784912915E+07 + vrhoa = -0.429506798203E+02 + vrhob = -0.429506798203E+02 + vsigmaaa = -0.223988116852E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.223988116852E-08 + + v2rhoa2 = -0.403860117718E-03 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.403860117718E-03 + + v2rhoasigmaaa = 0.603172306456E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.603172306456E-13 + + v2sigmaaa2 = 0.196032405831E-23 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.196032405831E-23 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.159853974372E+00 + vrhoa = -0.610201561906E+00 + vrhob = -0.610201561906E+00 + vsigmaaa = -0.352478486399E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.352478486399E-01 + + v2rhoa2 = -0.215400804748E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.215400804748E+01 + + v2rhoasigmaaa = 0.280548486202E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.280548486202E+00 + + v2sigmaaa2 = 0.115191962996E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.115191962996E-01 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.494484233083E+01 + vrhoa = -0.188374945936E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.548292654683E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.179404710416E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.569990916614E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.494670652606E+01 + vrhoa = -0.188303929003E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.548292703294E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.179878155887E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.704950734383E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.416031985465E+01 + vrhoa = -0.173051807935E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.666642360632E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.243285204532E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.526773997267E-07 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.264716252566E-01 + vrhoa = -0.380886132581E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.105351899065E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.477536020320E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.566889970142E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.746707225313E+03 + vrhoa = -0.474243528961E+01 + vrhob = -0.470586596742E+01 + vsigmaaa = -0.916664705595E-05 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.928097585160E-05 + + v2rhoa2 = -0.363153367898E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.368237398844E-01 + + v2rhoasigmaaa = 0.113653473803E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.114994739857E-06 + + v2sigmaaa2 = 0.106803693788E-12 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.118387227367E-12 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.278380966422E+03 + vrhoa = -0.366163660538E+01 + vrhob = -0.359394800454E+01 + vsigmaaa = -0.215092265851E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.220464217027E-04 + + v2rhoa2 = -0.611473693278E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.630468092866E-01 + + v2rhoasigmaaa = 0.554234394848E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.563108455074E-06 + + v2sigmaaa2 = 0.198146496386E-11 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.236133877605E-11 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.121241538666E+00 + vrhoa = -0.566439926860E+00 + vrhob = -0.434688057577E+00 + vsigmaaa = -0.417888746850E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.511487718710E-01 + + v2rhoa2 = -0.256235594967E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.315194116477E+01 + + v2rhoasigmaaa = 0.360732413901E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.263417713761E+00 + + v2sigmaaa2 = 0.220582103560E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.735914956203E-01 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.414803112349E-01 + vrhoa = -0.523999095094E+00 + vrhob = -0.348035925848E+00 + vsigmaaa = -0.872785064391E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.280395158845E+00 + + v2rhoa2 = -0.244714614042E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.681116359183E+01 + + v2rhoasigmaaa = 0.148271651753E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.990980167503E+01 + + v2sigmaaa2 = 0.658036694552E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.694337079244E+01 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.341798671981E+03 + vrhoa = -0.452422714112E+01 + vrhob = -0.449131412032E+01 + vsigmaaa = -0.159723466327E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.164061070977E-04 + + v2rhoa2 = -0.326341212154E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.331963763824E-01 + + v2rhoasigmaaa = 0.423780501604E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.443961107001E-06 + + v2sigmaaa2 = -0.119007301890E-11 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.118683108753E-11 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.258800512911E+03 + vrhoa = -0.417287099243E+01 + vrhob = -0.417357788112E+01 + vsigmaaa = -0.214434667879E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.214425676217E-04 + + v2rhoa2 = -0.394160770240E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.393759231804E-01 + + v2rhoasigmaaa = 0.706840458625E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.706936770222E-06 + + v2sigmaaa2 = -0.895025851836E-12 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.903315004135E-12 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.112354675304E+00 + vrhoa = -0.552035803953E+00 + vrhob = -0.481501885869E+00 + vsigmaaa = -0.465309056912E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.549692654252E-01 + + v2rhoa2 = -0.269650306789E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.340717510246E+01 + + v2rhoasigmaaa = 0.436151357232E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.482723792920E+00 + + v2sigmaaa2 = 0.303220102088E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.670177842211E-01 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.253226784785E-01 + vrhoa = -0.430145824650E+00 + vrhob = -0.296152188022E+00 + vsigmaaa = -0.164171878994E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.338316339007E+00 + + v2rhoa2 = -0.409198933099E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.859533102439E+01 + + v2rhoasigmaaa = 0.432338693071E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.106249280141E+02 + + v2sigmaaa2 = 0.927168405887E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.169632851834E+02 + diff --git a/libxc-2.2.0/testsuite/df_repo/gga_x_pbe.data b/libxc-2.2.0/testsuite/df_repo/gga_x_pbe.data new file mode 100644 index 000000000..a2f524388 --- /dev/null +++ b/libxc-2.2.0/testsuite/df_repo/gga_x_pbe.data @@ -0,0 +1,600 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.377592720836E+01 + vrhoa = -0.148075576798E+01 + vrhob = -0.148075576798E+01 + vsigmaaa = -0.165665974842E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.165665974842E-02 + + v2rhoa2 = -0.290344268232E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.290344268232E+00 + + v2rhoasigmaaa = 0.129934097915E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.129934097915E-02 + + v2sigmaaa2 = 0.361615443758E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.361615443758E-05 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.378154942017E+01 + vrhoa = -0.147855914532E+01 + vrhob = -0.147855914532E+01 + vsigmaaa = -0.165052935245E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.165052935245E-02 + + v2rhoa2 = -0.293340073168E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.293340073168E+00 + + v2rhoasigmaaa = 0.128494322308E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.128494322308E-02 + + v2sigmaaa2 = 0.359610088925E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.359610088925E-05 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.332917118617E+01 + vrhoa = -0.136704102604E+01 + vrhob = -0.136704102604E+01 + vsigmaaa = -0.175922831660E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.175922831660E-02 + + v2rhoa2 = -0.383048644703E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.383048644703E+00 + + v2rhoasigmaaa = 0.123846484420E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.123846484420E-02 + + v2sigmaaa2 = 0.508271342885E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.508271342885E-05 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.847500738867E-01 + vrhoa = -0.498335317577E+00 + vrhob = -0.498335317577E+00 + vsigmaaa = -0.545109539268E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.545109539268E-01 + + v2rhoa2 = -0.229469146464E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.229469146464E+01 + + v2rhoasigmaaa = 0.154401191219E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.154401191219E+00 + + v2sigmaaa2 = 0.254715375324E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.254715375324E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.407494475322E+05 + vrhoa = -0.150923879748E+02 + vrhob = -0.150923879748E+02 + vsigmaaa = -0.153509482897E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.153509482897E-06 + + v2rhoa2 = -0.279488666208E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.279488666208E-02 + + v2rhoasigmaaa = 0.113710728070E-09 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.113710728070E-09 + + v2sigmaaa2 = 0.287708461721E-17 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.287708461721E-17 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.407494501724E+05 + vrhoa = -0.150923869969E+02 + vrhob = -0.150923869969E+02 + vsigmaaa = -0.153509458156E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.153509458156E-06 + + v2rhoa2 = -0.279488792967E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.279488792967E-02 + + v2rhoasigmaaa = 0.113710673089E-09 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.113710673089E-09 + + v2sigmaaa2 = 0.287708392165E-17 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.287708392165E-17 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.360960910073E+05 + vrhoa = -0.140305340798E+02 + vrhob = -0.140305340798E+02 + vsigmaaa = -0.163703325386E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.163703325386E-06 + + v2rhoa2 = -0.361179088671E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.361179088671E-02 + + v2rhoasigmaaa = 0.111691289742E-09 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.111691289742E-09 + + v2sigmaaa2 = 0.400996995891E-17 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.400996995891E-17 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.319679717401E+00 + vrhoa = -0.766494428708E+00 + vrhob = -0.766494428708E+00 + vsigmaaa = -0.185240091115E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.185240091115E-01 + + v2rhoa2 = -0.120781973536E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.120781973536E+01 + + v2rhoasigmaaa = 0.783950736036E-01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.783950736036E-01 + + v2sigmaaa2 = 0.578030314073E-02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.578030314073E-02 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.370503980175E+07 + vrhoa = -0.466042742277E+02 + vrhob = -0.466042742277E+02 + vsigmaaa = -0.168835611841E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.168835611841E-08 + + v2rhoa2 = -0.293108643147E-03 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.293108643147E-03 + + v2rhoasigmaaa = 0.424743677402E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.424743677402E-13 + + v2sigmaaa2 = 0.382771132308E-23 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.382771132308E-23 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.326657718168E+07 + vrhoa = -0.433502031071E+02 + vrhob = -0.433502031071E+02 + vsigmaaa = -0.181368847096E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.181368847096E-08 + + v2rhoa2 = -0.377435398713E-03 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.377435398713E-03 + + v2rhoasigmaaa = 0.425352935840E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.425352935840E-13 + + v2sigmaaa2 = 0.541929951945E-23 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.541929951945E-23 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.160448304498E+00 + vrhoa = -0.616293740752E+00 + vrhob = -0.616293740752E+00 + vsigmaaa = -0.340347075448E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.340347075448E-01 + + v2rhoa2 = -0.188013619179E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.188013619179E+01 + + v2rhoasigmaaa = 0.179505894965E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.179505894965E+00 + + v2sigmaaa2 = 0.432509198788E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.432509198788E-01 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.494484233083E+01 + vrhoa = -0.188374945936E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.632520331341E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.179404710416E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.201266029008E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.494699173727E+01 + vrhoa = -0.188293152324E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.631836581688E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.179948990030E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.200939766657E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.417440506676E+01 + vrhoa = -0.172954529118E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.707320404038E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.237820356120E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.323948969032E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.258503716227E-01 + vrhoa = -0.433574571158E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.743604018862E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.182332674956E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.934224897782E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.736865469611E+03 + vrhoa = -0.493897932478E+01 + vrhob = -0.491161504563E+01 + vsigmaaa = -0.685185279408E-05 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.689688466662E-05 + + v2rhoa2 = -0.273332629968E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.273922219983E-01 + + v2rhoasigmaaa = 0.455358003173E-07 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.445075229580E-07 + + v2sigmaaa2 = 0.413408272915E-12 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.427862514991E-12 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.276589791995E+03 + vrhoa = -0.382556082420E+01 + vrhob = -0.378108116179E+01 + vsigmaaa = -0.174145337536E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.175120610339E-04 + + v2rhoa2 = -0.429564214817E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.424802511645E-01 + + v2rhoasigmaaa = 0.185237729809E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.161839553501E-06 + + v2sigmaaa2 = 0.740514207206E-11 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.786563034093E-11 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.119421209325E+00 + vrhoa = -0.578832621965E+00 + vrhob = -0.517389121001E+00 + vsigmaaa = -0.382340404759E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.332973674309E-01 + + v2rhoa2 = -0.204167554105E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.722156009564E+00 + + v2rhoasigmaaa = 0.181184032538E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.177031055838E+00 + + v2sigmaaa2 = 0.685619910117E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.104342795817E+00 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.415413960050E-01 + vrhoa = -0.523382772310E+00 + vrhob = -0.357399049244E+00 + vsigmaaa = -0.975929514687E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.251904684435E+00 + + v2rhoa2 = -0.245525965200E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.524279284728E+01 + + v2rhoasigmaaa = 0.155938982496E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.452016269281E+01 + + v2sigmaaa2 = 0.776664232752E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.203904030316E+02 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.342262372442E+03 + vrhoa = -0.451953851009E+01 + vrhob = -0.448651692914E+01 + vsigmaaa = -0.177274055848E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.181825088154E-04 + + v2rhoa2 = -0.327443513253E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.333030095027E-01 + + v2rhoasigmaaa = 0.445584305337E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.464801667902E-06 + + v2sigmaaa2 = 0.462724606680E-11 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.500476145449E-11 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.259316875633E+03 + vrhoa = -0.416761407365E+01 + vrhob = -0.416832346828E+01 + vsigmaaa = -0.234431309174E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.234541298631E-04 + + v2rhoa2 = -0.394086605352E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.393741681091E-01 + + v2rhoasigmaaa = 0.708870190119E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.709919266338E-06 + + v2sigmaaa2 = 0.109950768377E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.110028156783E-10 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.112021068338E+00 + vrhoa = -0.563849973546E+00 + vrhob = -0.518540640509E+00 + vsigmaaa = -0.426508442574E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.433850716387E-01 + + v2rhoa2 = -0.215582132758E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.193599570809E+01 + + v2rhoasigmaaa = 0.221089275399E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.555875642118E-01 + + v2sigmaaa2 = 0.948033727977E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.140057158296E+00 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.252665336863E-01 + vrhoa = -0.430778167566E+00 + vrhob = -0.326346959743E+00 + vsigmaaa = -0.168954851377E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.254284088546E+00 + + v2rhoa2 = -0.388578815717E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.420071526691E+01 + + v2rhoasigmaaa = 0.349932953984E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.344308375753E+00 + + v2sigmaaa2 = 0.467162912424E+01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.317975451941E+02 diff --git a/libxc-2.2.0/testsuite/df_repo/gga_x_pw91.data b/libxc-2.2.0/testsuite/df_repo/gga_x_pw91.data new file mode 100644 index 000000000..53d542d6d --- /dev/null +++ b/libxc-2.2.0/testsuite/df_repo/gga_x_pw91.data @@ -0,0 +1,601 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.377592720836E+01 + vrhoa = -0.148075576798E+01 + vrhob = -0.148075576798E+01 + vsigmaaa = -0.932043387995E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.932043387995E-03 + + v2rhoa2 = -0.290344268232E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.290344268232E+00 + + v2rhoasigmaaa = 0.731014421969E-03 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.731014421969E-03 + + v2sigmaaa2 = -0.898210267526E-03 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.898210267526E-03 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.378095444846E+01 + vrhoa = -0.147778591928E+01 + vrhob = -0.147778591928E+01 + vsigmaaa = -0.185299327723E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.185299327723E-02 + + v2rhoa2 = -0.295642969077E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.295642969077E+00 + + v2rhoasigmaaa = 0.220538404493E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.220538404493E-02 + + v2sigmaaa2 = -0.282020994133E-03 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.282020994133E-03 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.334524619161E+01 + vrhoa = -0.136875736984E+01 + vrhob = -0.136875736984E+01 + vsigmaaa = -0.184404242682E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.184404242682E-02 + + v2rhoa2 = -0.369823738710E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.369823738710E+00 + + v2rhoasigmaaa = 0.102586616094E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.102586616094E-02 + + v2sigmaaa2 = 0.958254160782E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.958254160782E-05 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.849656692562E-01 + vrhoa = -0.505975525936E+00 + vrhob = -0.505975525936E+00 + vsigmaaa = -0.522324707834E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.522324707834E-01 + + v2rhoa2 = -0.232075764416E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.232075764416E+01 + + v2rhoasigmaaa = 0.153311051900E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.153311051900E+00 + + v2sigmaaa2 = 0.242034145736E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.242034145736E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.407494475321E+05 + vrhoa = -0.150923879748E+02 + vrhob = -0.150923879748E+02 + vsigmaaa = -0.863650482950E-07 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.863650482950E-07 + + v2rhoa2 = -0.279488666205E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.279488666205E-02 + + v2rhoasigmaaa = 0.639741104304E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.639741104304E-10 + + v2sigmaaa2 = -0.714634007138E-15 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.714634007138E-15 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.407494490175E+05 + vrhoa = -0.150923874246E+02 + vrhob = -0.150923874246E+02 + vsigmaaa = -0.863711936127E-07 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.863711936127E-07 + + v2rhoa2 = -0.279488737536E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.279488737536E-02 + + v2rhoasigmaaa = 0.639877664823E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.639877664823E-10 + + v2sigmaaa2 = -0.714601070507E-15 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.714601070507E-15 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.362611022960E+05 + vrhoa = -0.140378983689E+02 + vrhob = -0.140378983689E+02 + vsigmaaa = -0.173658527748E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.173658527748E-06 + + v2rhoa2 = -0.350892583997E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.350892583997E-02 + + v2rhoasigmaaa = 0.947616778029E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.947616778029E-10 + + v2sigmaaa2 = 0.810061005198E-17 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.810061005198E-17 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.321117679152E+00 + vrhoa = -0.766769287958E+00 + vrhob = -0.766769287958E+00 + vsigmaaa = -0.197121936150E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.197121936150E-01 + + v2rhoa2 = -0.117527513839E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.117527513839E+01 + + v2rhoasigmaaa = 0.669398749951E-01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.669398749951E-01 + + v2sigmaaa2 = 0.118909249839E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.118909249839E-01 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.370503980161E+07 + vrhoa = -0.466042742295E+02 + vrhob = -0.466042742295E+02 + vsigmaaa = -0.949875983759E-09 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.949875983759E-09 + + v2rhoa2 = -0.293108643068E-03 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.293108643068E-03 + + v2rhoasigmaaa = 0.238962557561E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.238962557561E-13 + + v2sigmaaa2 = -0.950758452942E-21 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.950758452942E-21 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.328121581863E+07 + vrhoa = -0.433641861522E+02 + vrhob = -0.433641861522E+02 + vsigmaaa = -0.193138530087E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.193138530087E-08 + + v2rhoa2 = -0.367394498371E-03 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.367394498371E-03 + + v2rhoasigmaaa = 0.363725780955E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.363725780955E-13 + + v2sigmaaa2 = 0.111939986725E-22 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.111939986725E-22 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.161281959179E+00 + vrhoa = -0.621017974954E+00 + vrhob = -0.621017974954E+00 + vsigmaaa = -0.336764293971E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.336764293971E-01 + + v2rhoa2 = -0.176594570925E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.176594570925E+01 + + v2rhoasigmaaa = 0.135669995475E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.135669995475E+00 + + v2sigmaaa2 = 0.575423590814E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.575423590814E-01 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.494484233083E+01 + vrhoa = -0.188374945936E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.355858463490E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.179404710416E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.499921164542E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.494631332487E+01 + vrhoa = -0.188301001743E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.501768985932E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.180074077999E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.364530853359E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.419357531760E+01 + vrhoa = -0.173053997913E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.749650911390E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.230939937528E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.650972931765E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.258584951104E-01 + vrhoa = -0.437338372420E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.727050628737E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.244260746620E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.788626837062E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.739934270280E+03 + vrhoa = -0.500194130392E+01 + vrhob = -0.497593413511E+01 + vsigmaaa = -0.661655297347E-05 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.665149614704E-05 + + v2rhoa2 = -0.259426653786E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.260706018375E-01 + + v2rhoasigmaaa = 0.352029178373E-07 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.346740334540E-07 + + v2sigmaaa2 = 0.454242196579E-12 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.463780470889E-12 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.277508827319E+03 + vrhoa = -0.388082848748E+01 + vrhob = -0.383766691652E+01 + vsigmaaa = -0.167197684376E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.167896719939E-04 + + v2rhoa2 = -0.416220420890E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.417483248081E-01 + + v2rhoasigmaaa = 0.152615808168E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.140494224330E-06 + + v2sigmaaa2 = 0.756528151156E-11 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.779608939054E-11 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.119728770337E+00 + vrhoa = -0.585486559894E+00 + vrhob = -0.517319511766E+00 + vsigmaaa = -0.371067307505E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.333018097938E-01 + + v2rhoa2 = -0.192471177532E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.140195266234E+01 + + v2rhoasigmaaa = 0.137625860400E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.669107971583E-01 + + v2sigmaaa2 = 0.789606978716E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.865209183894E-01 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.416606610942E-01 + vrhoa = -0.522604353726E+00 + vrhob = -0.361889021397E+00 + vsigmaaa = -0.112405560440E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.243425146968E+00 + + v2rhoa2 = -0.243569484671E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.496966001653E+01 + + v2rhoasigmaaa = 0.144354391474E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.348226944932E+01 + + v2sigmaaa2 = 0.340954163757E+01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.225642197599E+02 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.343023093496E+03 + vrhoa = -0.451226856998E+01 + vrhob = -0.447953235217E+01 + vsigmaaa = -0.206793144210E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.210943591227E-04 + + v2rhoa2 = -0.324555796871E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.330212301202E-01 + + v2rhoasigmaaa = 0.404623162590E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.425668722158E-06 + + v2sigmaaa2 = 0.250270264720E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.247774253789E-10 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.260126309305E+03 + vrhoa = -0.416275280459E+01 + vrhob = -0.416341719698E+01 + vsigmaaa = -0.262307773024E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.262628334268E-04 + + v2rhoa2 = -0.390699445174E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.390404185225E-01 + + v2rhoasigmaaa = 0.663687547341E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.665093145052E-06 + + v2sigmaaa2 = 0.319199539502E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.321940769142E-10 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.112397017484E+00 + vrhoa = -0.570266857493E+00 + vrhob = -0.526312948559E+00 + vsigmaaa = -0.414136182087E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.416437885637E-01 + + v2rhoa2 = -0.203144459871E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.204737952263E+01 + + v2rhoasigmaaa = 0.167763747962E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.784829537759E-01 + + v2sigmaaa2 = 0.109645337051E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.127705596537E+00 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.253628097987E-01 + vrhoa = -0.431923798174E+00 + vrhob = -0.330648852409E+00 + vsigmaaa = -0.173983322535E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.245517135909E+00 + + v2rhoa2 = -0.371564332659E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.481847641292E+01 + + v2rhoasigmaaa = 0.280241415366E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.937099956078E+00 + + v2sigmaaa2 = 0.794526228298E+01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.277983550893E+02 + diff --git a/libxc-2.2.0/testsuite/df_repo/gga_xc_b97.data b/libxc-2.2.0/testsuite/df_repo/gga_xc_b97.data new file mode 100644 index 000000000..7362ec655 --- /dev/null +++ b/libxc-2.2.0/testsuite/df_repo/gga_xc_b97.data @@ -0,0 +1,597 @@ + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.321430689469E+01 + vrhoa = -0.124990362109E+01 + vrhob = -0.124990362109E+01 + vsigmaaa = -0.870701549744E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.870701549744E-02 + + v2rhoa2 = -0.220710593157E+00 + v2rhoab = -0.172728400525E-01 + v2rhob2 = -0.220710593157E+00 + + v2rhoasigmaaa = 0.788320330617E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.251895880969E-04 + v2rhobsigmaaa = -0.251895880969E-04 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.788320330617E-02 + + v2sigmaaa2 = 0.154011690757E-02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.808256334986E-06 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.154011690757E-02 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.323995838121E+01 + vrhoa = -0.124110321291E+01 + vrhob = -0.124110321291E+01 + vsigmaaa = -0.651456037645E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.651456037645E-02 + + v2rhoa2 = -0.228031755427E+00 + v2rhoab = -0.171707807877E-01 + v2rhob2 = -0.228031755427E+00 + + v2rhoasigmaaa = 0.301664203956E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.264287147110E-04 + v2rhobsigmaaa = -0.264287147110E-04 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.301664203956E-02 + + v2sigmaaa2 = 0.107094175324E-02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.797160685607E-06 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.107094175324E-02 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.285716487370E+01 + vrhoa = -0.120729800275E+01 + vrhob = -0.120729800275E+01 + vsigmaaa = -0.753306490942E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.753306490942E-03 + + v2rhoa2 = -0.297497575701E+00 + v2rhoab = -0.156104205574E-01 + v2rhob2 = -0.297497575701E+00 + + v2rhoasigmaaa = 0.991152719927E-03 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.633489362381E-04 + v2rhobsigmaaa = -0.633489362381E-04 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.991152719927E-03 + + v2sigmaaa2 = -0.584317187982E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.914369190666E-06 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.584317187982E-05 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.731797277815E-01 + vrhoa = -0.453550856665E+00 + vrhob = -0.453550856665E+00 + vsigmaaa = -0.358396766141E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.358396766141E-01 + + v2rhoa2 = -0.245094535837E+01 + v2rhoab = -0.316936204566E+00 + v2rhob2 = -0.245094535837E+01 + + v2rhoasigmaaa = 0.484559490595E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.225599528319E-01 + v2rhobsigmaaa = -0.225599528319E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.484559490595E+00 + + v2sigmaaa2 = -0.117659907502E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.305620587231E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.117659907502E-01 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.332835386118E+05 + vrhoa = -0.123049859719E+02 + vrhob = -0.123049859719E+02 + vsigmaaa = -0.215481650006E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.215481650006E-06 + + v2rhoa2 = -0.223901688884E-02 + v2rhoab = -0.263095280890E-04 + v2rhob2 = -0.223901688884E-02 + + v2rhoasigmaaa = 0.178983422702E-09 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.374499143899E-12 + v2rhobsigmaaa = -0.374499143899E-12 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.178983422702E-09 + + v2sigmaaa2 = 0.219264126357E-15 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.113108131940E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.219264126357E-15 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.332835423178E+05 + vrhoa = -0.123049844359E+02 + vrhob = -0.123049844359E+02 + vsigmaaa = -0.215479763498E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.215479763498E-06 + + v2rhoa2 = -0.223901903070E-02 + v2rhoab = -0.263095207843E-04 + v2rhob2 = -0.223901903070E-02 + + v2rhoasigmaaa = 0.178978953277E-09 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.374500008389E-12 + v2rhobsigmaaa = -0.374500008389E-12 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.178978953277E-09 + + v2sigmaaa2 = 0.219260544343E-15 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.113108064009E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.219260544343E-15 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.293237558821E+05 + vrhoa = -0.115866066562E+02 + vrhob = -0.115866066562E+02 + vsigmaaa = -0.973795876085E-07 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.973795876085E-07 + + v2rhoa2 = -0.289046541209E-02 + v2rhoab = -0.237995402019E-04 + v2rhob2 = -0.289046541209E-02 + + v2rhoasigmaaa = 0.865822971230E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.931184800769E-12 + v2rhobsigmaaa = -0.931184800769E-12 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.865822971230E-10 + + v2sigmaaa2 = -0.103836941586E-17 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.131552533112E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.103836941586E-17 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.284097615296E+00 + vrhoa = -0.700983991533E+00 + vrhob = -0.700983991533E+00 + vsigmaaa = -0.563526841179E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.563526841179E-02 + + v2rhoa2 = -0.846687917786E+00 + v2rhoab = -0.802144866266E-01 + v2rhob2 = -0.846687917786E+00 + + v2rhoasigmaaa = 0.376804719959E-01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.538909275985E-02 + v2rhobsigmaaa = -0.538909275985E-02 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.376804719959E-01 + + v2sigmaaa2 = -0.448405677496E-02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.159661238808E-02 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.448405677496E-02 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.300975525154E+07 + vrhoa = -0.378300157084E+02 + vrhob = -0.378300157084E+02 + vsigmaaa = -0.151726414388E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.151726414388E-08 + + v2rhoa2 = -0.236288227431E-03 + v2rhoab = -0.106228461403E-05 + v2rhob2 = -0.236288227431E-03 + + v2rhoasigmaaa = 0.411919803939E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.550625910799E-16 + v2rhobsigmaaa = -0.550625910799E-16 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.411919803939E-13 + + v2sigmaaa2 = 0.116188680642E-21 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.598723607257E-25 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.116188680642E-21 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.263425773888E+07 + vrhoa = -0.354875450688E+02 + vrhob = -0.354875450688E+02 + vsigmaaa = -0.111676536955E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.111676536955E-08 + + v2rhoa2 = -0.303836246875E-03 + v2rhoab = -0.966392039643E-06 + v2rhob2 = -0.303836246875E-03 + + v2rhoasigmaaa = 0.331495319063E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.137766402652E-15 + v2rhobsigmaaa = -0.137766402652E-15 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.331495319063E-13 + + v2sigmaaa2 = -0.985234465619E-24 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.715781038233E-25 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.985234465619E-24 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.140649719651E+00 + vrhoa = -0.569841941897E+00 + vrhob = -0.569841941897E+00 + vsigmaaa = -0.163195197392E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.163195197392E-01 + + v2rhoa2 = -0.173636618314E+01 + v2rhoab = -0.113004330110E+00 + v2rhob2 = -0.173636618314E+01 + + v2rhoasigmaaa = 0.263056373110E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.221447008028E-01 + v2rhobsigmaaa = -0.221447008028E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.263056373110E+00 + + v2sigmaaa2 = -0.476397779650E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.984204171236E-02 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.476397779650E-01 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.402839804520E+01 + vrhoa = -0.153291509273E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.284931942724E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.145437004913E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.726834100420E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.403768046967E+01 + vrhoa = -0.152914574281E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.261516044966E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.147819054254E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.652160013784E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.342590305416E+01 + vrhoa = -0.146203256921E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.307160772065E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.189388799711E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.278805716216E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.211896681798E-01 + vrhoa = -0.320646347372E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.766505340463E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.449066756869E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.233114593891E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.598383795793E+03 + vrhoa = -0.405111231432E+01 + vrhob = -0.402217795062E+01 + vsigmaaa = -0.519408363171E-05 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.528209092215E-05 + + v2rhoa2 = -0.290954595434E-01 + v2rhoab = -0.380508082465E-03 + v2rhob2 = -0.295345106808E-01 + + v2rhoasigmaaa = 0.857627443410E-07 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.155021847000E-08 + v2rhobsigmaaa = -0.160039379800E-08 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.870944943023E-07 + + v2sigmaaa2 = -0.212433822467E-13 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.162038918346E-13 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.141280901637E-13 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.225313353525E+03 + vrhoa = -0.312184678677E+01 + vrhob = -0.306823565376E+01 + vsigmaaa = -0.137714367604E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.142288336047E-04 + + v2rhoa2 = -0.493050932822E-01 + v2rhoab = -0.961485362078E-03 + v2rhob2 = -0.506606337690E-01 + + v2rhoasigmaaa = 0.447407968434E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.708802700161E-08 + v2rhobsigmaaa = -0.802848142784E-08 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.452774526535E-06 + + v2sigmaaa2 = 0.151474989091E-12 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.285749516887E-12 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.530257026506E-12 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.102854122496E+00 + vrhoa = -0.524920278220E+00 + vrhob = -0.459928017285E+00 + vsigmaaa = -0.197671636236E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.271960701649E-01 + + v2rhoa2 = -0.205159366344E+01 + v2rhoab = -0.428394271613E+00 + v2rhob2 = -0.430400048678E+00 + + v2rhoasigmaaa = 0.320330843920E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.296964622206E-01 + v2rhobsigmaaa = -0.180434156695E-02 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.566697954138E-01 + + v2sigmaaa2 = -0.503937704775E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.500657094681E-02 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.567873412468E-01 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.377028900611E-01 + vrhoa = -0.459721095058E+00 + vrhob = -0.363471535561E+00 + vsigmaaa = -0.858770626506E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.141504900960E+00 + + v2rhoa2 = -0.106373335597E+01 + v2rhoab = -0.394159162322E+00 + v2rhob2 = -0.425467000779E+01 + + v2rhoasigmaaa = -0.461428675616E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.529383304736E-01 + v2rhobsigmaaa = -0.338975312799E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.640531222013E+01 + + v2sigmaaa2 = 0.438209398775E+02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.119612148192E+01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.318814224157E+01 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.285421835533E+03 + vrhoa = -0.375516560564E+01 + vrhob = -0.373252558776E+01 + vsigmaaa = -0.129840896754E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.128826913662E-04 + + v2rhoa2 = -0.232002594596E-01 + v2rhoab = -0.724983291844E-03 + v2rhob2 = -0.235344906929E-01 + + v2rhoasigmaaa = -0.110929317299E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.575398453952E-08 + v2rhobsigmaaa = -0.571720833008E-08 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.102852538318E-06 + + v2sigmaaa2 = 0.806407819389E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.448267849597E-12 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.781487001772E-10 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.216284652854E+03 + vrhoa = -0.349453071271E+01 + vrhob = -0.349461205919E+01 + vsigmaaa = -0.132273736704E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.132828425352E-04 + + v2rhoa2 = -0.280084397563E-01 + v2rhoab = -0.852329072583E-03 + v2rhob2 = -0.279607453210E-01 + + v2rhoasigmaaa = 0.737162778491E-07 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.111504551330E-07 + v2rhobsigmaaa = -0.110811629133E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.667321885673E-07 + + v2sigmaaa2 = 0.555271660744E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.103938329669E-11 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.574999449949E-10 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.969805650982E-01 + vrhoa = -0.517150345035E+00 + vrhob = -0.470746737631E+00 + vsigmaaa = -0.224168143525E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.306624174887E-01 + + v2rhoa2 = -0.212363725480E+01 + v2rhoab = -0.232311042708E+00 + v2rhob2 = -0.200682550776E+01 + + v2rhoasigmaaa = 0.383207068086E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.792395686035E-02 + v2rhobsigmaaa = -0.325893565531E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.264682090736E+00 + + v2sigmaaa2 = -0.656812249261E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.158859789537E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.217608483621E-01 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.226000175814E-01 + vrhoa = -0.404256618050E+00 + vrhob = -0.325995106885E+00 + vsigmaaa = -0.298372909564E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.160842228273E+00 + + v2rhoa2 = -0.318127613064E+01 + v2rhoab = -0.713328558287E+00 + v2rhob2 = -0.194399923084E+01 + + v2rhoasigmaaa = 0.356388978478E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.249625325380E+00 + v2rhobsigmaaa = -0.651103824015E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.656167329362E-01 + + v2sigmaaa2 = -0.126850474272E+02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.224888382282E+01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.144766733026E+02 diff --git a/libxc-2.2.0/testsuite/df_repo/gga_xc_b97_1.data b/libxc-2.2.0/testsuite/df_repo/gga_xc_b97_1.data new file mode 100644 index 000000000..3c253d725 --- /dev/null +++ b/libxc-2.2.0/testsuite/df_repo/gga_xc_b97_1.data @@ -0,0 +1,597 @@ + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.312832568140E+01 + vrhoa = -0.121690541305E+01 + vrhob = -0.121690541305E+01 + vsigmaaa = -0.100399536632E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.100399536632E-01 + + v2rhoa2 = -0.214536247161E+00 + v2rhoab = -0.174608242404E-01 + v2rhob2 = -0.214536247161E+00 + + v2rhoasigmaaa = 0.909025783282E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.265872039526E-04 + v2rhobsigmaaa = -0.265872039526E-04 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.909025783282E-02 + + v2sigmaaa2 = 0.178043409318E-02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.948034520398E-06 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.178043409318E-02 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.315789200487E+01 + vrhoa = -0.120676732119E+01 + vrhob = -0.120676732119E+01 + vsigmaaa = -0.750503620383E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.750503620383E-02 + + v2rhoa2 = -0.222938593952E+00 + v2rhoab = -0.173529222845E-01 + v2rhob2 = -0.222938593952E+00 + + v2rhoasigmaaa = 0.346318176127E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.280404161778E-04 + v2rhobsigmaaa = -0.280404161778E-04 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.346318176127E-02 + + v2sigmaaa2 = 0.123840841708E-02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.934922314118E-06 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.123840841708E-02 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.280122880144E+01 + vrhoa = -0.117956375094E+01 + vrhob = -0.117956375094E+01 + vsigmaaa = -0.800163391873E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.800163391873E-03 + + v2rhoa2 = -0.292163963549E+00 + v2rhoab = -0.155709222034E-01 + v2rhob2 = -0.292163963549E+00 + + v2rhoasigmaaa = 0.101889939003E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.700396269497E-04 + v2rhobsigmaaa = -0.700396269497E-04 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.101889939003E-02 + + v2sigmaaa2 = -0.583524276110E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.106876571795E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.583524276110E-05 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.718407332534E-01 + vrhoa = -0.446325133650E+00 + vrhob = -0.446325133650E+00 + vsigmaaa = -0.349798471321E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.349798471321E-01 + + v2rhoa2 = -0.216116225846E+01 + v2rhoab = -0.356664217787E+00 + v2rhob2 = -0.216116225846E+01 + + v2rhoasigmaaa = 0.399884763528E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.186984490590E-01 + v2rhobsigmaaa = -0.186984490590E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.399884763528E+00 + + v2sigmaaa2 = 0.712955256126E-02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.347357634486E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.712955256126E-02 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.324521835647E+05 + vrhoa = -0.119986308725E+02 + vrhob = -0.119986308725E+02 + vsigmaaa = -0.246915467734E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.246915467734E-06 + + v2rhoa2 = -0.218293471525E-02 + v2rhoab = -0.265958605773E-04 + v2rhob2 = -0.218293471525E-02 + + v2rhoasigmaaa = 0.205246310613E-09 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.395277806083E-12 + v2rhobsigmaaa = -0.395277806083E-12 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.205246310613E-09 + + v2sigmaaa2 = 0.253922742748E-15 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.132668819253E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.253922742748E-15 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.324521878114E+05 + vrhoa = -0.119986291109E+02 + vrhob = -0.119986291109E+02 + vsigmaaa = -0.246913283015E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.246913283015E-06 + + v2rhoa2 = -0.218293717240E-02 + v2rhoab = -0.265958528674E-04 + v2rhob2 = -0.218293717240E-02 + + v2rhoasigmaaa = 0.205241135381E-09 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.395278820076E-12 + v2rhobsigmaaa = -0.395278820076E-12 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.205241135381E-09 + + v2sigmaaa2 = 0.253918604490E-15 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.132668738976E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.253918604490E-15 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.287181980307E+05 + vrhoa = -0.112744809449E+02 + vrhob = -0.112744809449E+02 + vsigmaaa = -0.107105699267E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.107105699267E-06 + + v2rhoa2 = -0.285257801594E-02 + v2rhoab = -0.237248611115E-04 + v2rhob2 = -0.285257801594E-02 + + v2rhoasigmaaa = 0.912426804471E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.103024818554E-11 + v2rhobsigmaaa = -0.103024818554E-11 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.912426804471E-10 + + v2sigmaaa2 = -0.516977868651E-18 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.153846342996E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.516977868651E-18 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.278599054128E+00 + vrhoa = -0.686442624007E+00 + vrhob = -0.686442624007E+00 + vsigmaaa = -0.580571734957E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.580571734957E-02 + + v2rhoa2 = -0.819768524076E+00 + v2rhoab = -0.802320062166E-01 + v2rhob2 = -0.819768524076E+00 + + v2rhoasigmaaa = 0.361488479843E-01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.594591394367E-02 + v2rhobsigmaaa = -0.594591394367E-02 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.361488479843E-01 + + v2sigmaaa2 = -0.402317304883E-02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.186741617991E-02 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.402317304883E-02 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.293532064808E+07 + vrhoa = -0.368957405871E+02 + vrhob = -0.368957405871E+02 + vsigmaaa = -0.173019183681E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.173019183681E-08 + + v2rhoa2 = -0.230441211597E-03 + v2rhoab = -0.107384569545E-05 + v2rhob2 = -0.230441211597E-03 + + v2rhoasigmaaa = 0.470137481962E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.581176767990E-16 + v2rhobsigmaaa = -0.581176767990E-16 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.470137481962E-13 + + v2sigmaaa2 = 0.134988294027E-21 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.702265634409E-25 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.134988294027E-21 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.257916052470E+07 + vrhoa = -0.345152953253E+02 + vrhob = -0.345152953253E+02 + vsigmaaa = -0.123279011100E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.123279011100E-08 + + v2rhoa2 = -0.300165721130E-03 + v2rhoab = -0.963325888063E-06 + v2rhob2 = -0.300165721130E-03 + + v2rhoasigmaaa = 0.351499640706E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.152433182784E-15 + v2rhobsigmaaa = -0.152433182784E-15 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.351499640706E-13 + + v2sigmaaa2 = -0.222135813014E-24 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.837208407229E-25 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.222135813014E-24 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.138035126924E+00 + vrhoa = -0.557828495819E+00 + vrhob = -0.557828495819E+00 + vsigmaaa = -0.165681306559E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.165681306559E-01 + + v2rhoa2 = -0.170018315928E+01 + v2rhoab = -0.113873975887E+00 + v2rhob2 = -0.170018315928E+01 + + v2rhoasigmaaa = 0.263647924088E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.242906472012E-01 + v2rhobsigmaaa = -0.242906472012E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.263647924088E+00 + + v2sigmaaa2 = -0.487443175028E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.114478199072E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.487443175028E-01 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.391633636807E+01 + vrhoa = -0.149112910862E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.328678292843E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.141750332201E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.840299085946E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.392704289078E+01 + vrhoa = -0.148678050195E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.301605851914E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.144498266919E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.754032075773E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.335380641208E+01 + vrhoa = -0.142561845802E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.332793535392E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.186366124360E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.263206044080E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.208827482628E-01 + vrhoa = -0.311624077131E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.777710644914E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.420412784365E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.295520734113E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.589421566154E+03 + vrhoa = -0.393642849482E+01 + vrhob = -0.390859395500E+01 + vsigmaaa = -0.545772168417E-05 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.554242621426E-05 + + v2rhoa2 = -0.280568360218E-01 + v2rhoab = -0.405370536486E-03 + v2rhob2 = -0.284222855750E-01 + + v2rhoasigmaaa = 0.825516585585E-07 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.164615317273E-08 + v2rhobsigmaaa = -0.170662304491E-08 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.834939667850E-07 + + v2sigmaaa2 = 0.225224688659E-13 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.187066630180E-13 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.314017300670E-13 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.222140373007E+03 + vrhoa = -0.303653930163E+01 + vrhob = -0.298589553368E+01 + vsigmaaa = -0.143255582671E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.147456283407E-04 + + v2rhoa2 = -0.469336647195E-01 + v2rhoab = -0.106349512094E-02 + v2rhob2 = -0.478880580375E-01 + + v2rhoasigmaaa = 0.420323479049E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.705381952685E-08 + v2rhobsigmaaa = -0.817189771836E-08 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.419973560009E-06 + + v2sigmaaa2 = 0.915989049218E-12 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.327645904343E-12 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.134648643849E-11 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.100835011256E+00 + vrhoa = -0.512830248996E+00 + vrhob = -0.464589214466E+00 + vsigmaaa = -0.197666044769E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.248490695040E-01 + + v2rhoa2 = -0.198123304745E+01 + v2rhoab = -0.494438847835E+00 + v2rhob2 = 0.277674953108E+00 + + v2rhoasigmaaa = 0.310520086067E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.390854677254E-01 + v2rhobsigmaaa = 0.230337337582E-02 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.158141563936E+00 + + v2sigmaaa2 = -0.498790831187E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.547276473162E-02 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.645119035857E-01 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.369523332640E-01 + vrhoa = -0.448012336265E+00 + vrhob = -0.358233143589E+00 + vsigmaaa = -0.972541193828E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.137323022891E+00 + + v2rhoa2 = -0.903203590016E+00 + v2rhoab = -0.409791077214E+00 + v2rhob2 = -0.378677620428E+01 + + v2rhoasigmaaa = -0.540361574980E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.158955937027E-01 + v2rhobsigmaaa = -0.382448679335E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.532410185357E+01 + + v2sigmaaa2 = 0.508701617857E+02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.139380015420E+01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.114059942270E+01 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.279016013089E+03 + vrhoa = -0.365864521472E+01 + vrhob = -0.363685328006E+01 + vsigmaaa = -0.146463030072E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.145123212043E-04 + + v2rhoa2 = -0.223646085559E-01 + v2rhoab = -0.730564232170E-03 + v2rhob2 = -0.226853726928E-01 + + v2rhoasigmaaa = -0.143977544024E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.624389697441E-08 + v2rhobsigmaaa = -0.621525379269E-08 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.135904777044E-06 + + v2sigmaaa2 = 0.941696803336E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.525334477526E-12 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.913647444686E-10 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.211593869025E+03 + vrhoa = -0.340647365897E+01 + vrhob = -0.340653252022E+01 + vsigmaaa = -0.147129784976E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.147792635880E-04 + + v2rhoa2 = -0.271018607063E-01 + v2rhoab = -0.856789135223E-03 + v2rhob2 = -0.270500609987E-01 + + v2rhoasigmaaa = 0.506264169864E-07 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.122095881286E-07 + v2rhobsigmaaa = -0.121284261343E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.427432995854E-07 + + v2sigmaaa2 = 0.663662442578E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.121742991521E-11 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.686510680313E-10 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.952046150814E-01 + vrhoa = -0.506217965758E+00 + vrhob = -0.464894398560E+00 + vsigmaaa = -0.224231703510E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.297364236063E-01 + + v2rhoa2 = -0.204102496098E+01 + v2rhoab = -0.256875625600E+00 + v2rhob2 = -0.165521590713E+01 + + v2rhoasigmaaa = 0.369601684037E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.488318891851E-02 + v2rhobsigmaaa = -0.340705477668E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.187902398037E+00 + + v2sigmaaa2 = -0.641918954882E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.181931902162E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.347092043431E-01 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.221447108929E-01 + vrhoa = -0.396378943321E+00 + vrhob = -0.326538824980E+00 + vsigmaaa = -0.264639827171E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.144678049892E+00 + + v2rhoa2 = -0.313621413064E+01 + v2rhoab = -0.785373708088E+00 + v2rhob2 = -0.353191365040E+00 + + v2rhoasigmaaa = 0.365776937952E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.390252548108E+00 + v2rhobsigmaaa = -0.706328139980E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.321749638206E+01 + + v2sigmaaa2 = -0.138277289570E+02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.258372320451E+01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.183010304921E+02 diff --git a/libxc-2.2.0/testsuite/df_repo/gga_xc_b97_2.data b/libxc-2.2.0/testsuite/df_repo/gga_xc_b97_2.data new file mode 100644 index 000000000..e4715278d --- /dev/null +++ b/libxc-2.2.0/testsuite/df_repo/gga_xc_b97_2.data @@ -0,0 +1,597 @@ + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.334654951114E+01 + vrhoa = -0.129756330583E+01 + vrhob = -0.129756330583E+01 + vsigmaaa = 0.203356118194E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.203356118194E-02 + + v2rhoa2 = -0.226241408815E+00 + v2rhoab = -0.182676452863E-01 + v2rhob2 = -0.226241408815E+00 + + v2rhoasigmaaa = -0.182785462300E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.474141482494E-04 + v2rhobsigmaaa = -0.474141482494E-04 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.182785462300E-02 + + v2sigmaaa2 = -0.350827197415E-03 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.133824873479E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.350827197415E-03 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.334054349145E+01 + vrhoa = -0.129969634475E+01 + vrhob = -0.129969634475E+01 + vsigmaaa = 0.152651092657E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.152651092657E-02 + + v2rhoa2 = -0.224597150030E+00 + v2rhoab = -0.180758873086E-01 + v2rhob2 = -0.224597150030E+00 + + v2rhoasigmaaa = -0.686503839618E-03 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.494661970157E-04 + v2rhobsigmaaa = -0.494661970157E-04 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.686503839618E-03 + + v2sigmaaa2 = -0.254785255524E-03 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.132006587041E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.254785255524E-03 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.283020783585E+01 + vrhoa = -0.121867122505E+01 + vrhob = -0.121867122505E+01 + vsigmaaa = -0.416060868836E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.416060868836E-03 + + v2rhoa2 = -0.302978446473E+00 + v2rhoab = -0.134914247772E-01 + v2rhob2 = -0.302978446473E+00 + + v2rhoasigmaaa = 0.975684257194E-03 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.113114972459E-03 + v2rhobsigmaaa = -0.113114972459E-03 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.975684257194E-03 + + v2sigmaaa2 = -0.922178242744E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.152114240996E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.922178242744E-05 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.712953297989E-01 + vrhoa = -0.452170920395E+00 + vrhob = -0.452170920395E+00 + vsigmaaa = -0.307512563972E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.307512563972E-01 + + v2rhoa2 = -0.300012958960E+01 + v2rhoab = -0.324368296215E+00 + v2rhob2 = -0.300012958960E+01 + + v2rhoasigmaaa = 0.729729058826E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.523277809786E-01 + v2rhobsigmaaa = -0.523277809786E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.729729058826E+00 + + v2sigmaaa2 = -0.144765262785E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.527466468857E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.144765262785E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.341492694189E+05 + vrhoa = -0.126166276167E+02 + vrhob = -0.126166276167E+02 + vsigmaaa = 0.271790342923E-07 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.271790342923E-07 + + v2rhoa2 = -0.228979334244E-02 + v2rhoab = -0.278247888194E-04 + v2rhob2 = -0.228979334244E-02 + + v2rhoasigmaaa = -0.246137881553E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.704916565507E-12 + v2rhobsigmaaa = -0.704916565507E-12 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.246137881553E-10 + + v2sigmaaa2 = -0.540669108804E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.187275753881E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.540669108804E-16 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.341492689514E+05 + vrhoa = -0.126166278344E+02 + vrhob = -0.126166278344E+02 + vsigmaaa = 0.271785709602E-07 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.271785709602E-07 + + v2rhoa2 = -0.228979303476E-02 + v2rhoab = -0.278247750699E-04 + v2rhob2 = -0.228979303476E-02 + + v2rhoasigmaaa = -0.246126951639E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.704917996862E-12 + v2rhobsigmaaa = -0.704917996862E-12 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.246126951639E-10 + + v2sigmaaa2 = -0.540661841336E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.187275642563E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.540661841336E-16 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.293135701544E+05 + vrhoa = -0.119728242520E+02 + vrhob = -0.119728242520E+02 + vsigmaaa = -0.347910836323E-07 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.347910836323E-07 + + v2rhoa2 = -0.287307721961E-02 + v2rhoab = -0.207095023212E-04 + v2rhob2 = -0.287307721961E-02 + + v2rhoasigmaaa = 0.693764416376E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.166133141425E-11 + v2rhobsigmaaa = -0.166133141425E-11 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.693764416376E-10 + + v2sigmaaa2 = -0.650102941218E-17 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.218695382772E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.650102941218E-17 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.280630836242E+00 + vrhoa = -0.699212736181E+00 + vrhob = -0.699212736181E+00 + vsigmaaa = -0.371893747959E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.371893747959E-02 + + v2rhoa2 = -0.938426340694E+00 + v2rhoab = -0.728331742364E-01 + v2rhob2 = -0.938426340694E+00 + + v2rhoasigmaaa = 0.647642064563E-01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.964652265528E-02 + v2rhobsigmaaa = -0.964652265528E-02 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.647642064563E-01 + + v2sigmaaa2 = -0.152349330052E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.265379313263E-02 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.152349330052E-01 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.308179221255E+07 + vrhoa = -0.387245302059E+02 + vrhob = -0.387245302059E+02 + vsigmaaa = 0.660302728484E-10 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.660302728484E-10 + + v2rhoa2 = -0.241619051515E-03 + v2rhoab = -0.112346542070E-05 + v2rhob2 = -0.241619051515E-03 + + v2rhoasigmaaa = -0.236807848312E-14 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.103643848618E-15 + v2rhobsigmaaa = -0.103643848618E-15 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.236807848312E-14 + + v2sigmaaa2 = -0.326637840524E-22 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.991320544270E-25 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.326637840524E-22 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.263836067044E+07 + vrhoa = -0.367755393609E+02 + vrhob = -0.367755393609E+02 + vsigmaaa = -0.373036965257E-09 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.373036965257E-09 + + v2rhoa2 = -0.299265712517E-03 + v2rhoab = -0.843586670788E-06 + v2rhob2 = -0.299265712517E-03 + + v2rhoasigmaaa = 0.246011190040E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.245769261360E-15 + v2rhobsigmaaa = -0.245769261360E-15 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.246011190040E-13 + + v2sigmaaa2 = -0.849220321835E-23 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.118968445017E-24 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.849220321835E-23 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.138192666310E+00 + vrhoa = -0.570509273216E+00 + vrhob = -0.570509273216E+00 + vsigmaaa = -0.122857347126E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.122857347126E-01 + + v2rhoa2 = -0.161785658658E+01 + v2rhoab = -0.808357504126E-01 + v2rhob2 = -0.161785658658E+01 + + v2rhoasigmaaa = 0.218110115545E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.399133678697E-01 + v2rhobsigmaaa = -0.399133678697E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.218110115545E+00 + + v2sigmaaa2 = -0.417066032282E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.164814282536E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.417066032282E-01 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.418038878824E+01 + vrhoa = -0.158675281989E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.700961218120E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.149247871482E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.166818046950E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.417809892990E+01 + vrhoa = -0.158771442133E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.646873616057E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.148621890630E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.151648889817E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.338968277384E+01 + vrhoa = -0.148037079510E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.130941748015E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.196777996208E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.746992879141E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.207113047071E-01 + vrhoa = -0.283511334955E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.884555811863E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.730372913656E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.280300192626E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.582235697295E+03 + vrhoa = -0.413300492328E+01 + vrhob = -0.409712425677E+01 + vsigmaaa = -0.385412061844E-05 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.398447260964E-05 + + v2rhoa2 = -0.356656612473E-01 + v2rhoab = -0.270385252736E-03 + v2rhob2 = -0.366419564686E-01 + + v2rhoasigmaaa = 0.125227314034E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.289882247746E-08 + v2rhobsigmaaa = -0.297877911508E-08 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.129614634649E-06 + + v2sigmaaa2 = -0.405687855888E-12 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.274068863909E-13 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.410408282319E-12 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.218517855592E+03 + vrhoa = -0.315144677134E+01 + vrhob = -0.307838404544E+01 + vsigmaaa = -0.111279284316E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.119525885342E-04 + + v2rhoa2 = -0.643335334172E-01 + v2rhoab = -0.833468570198E-03 + v2rhob2 = -0.683613115081E-01 + + v2rhoasigmaaa = 0.718272745120E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.141663375440E-07 + v2rhobsigmaaa = -0.156945665894E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.763766415109E-06 + + v2sigmaaa2 = -0.641610473457E-11 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.487629191388E-12 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.631823315747E-11 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.100551545376E+00 + vrhoa = -0.527793228850E+00 + vrhob = -0.431613215933E+00 + vsigmaaa = -0.135704869089E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.301033389749E-01 + + v2rhoa2 = -0.204853887925E+01 + v2rhoab = -0.541385678705E+00 + v2rhob2 = -0.154042501825E+01 + + v2rhoasigmaaa = 0.321398875196E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.409644072387E-01 + v2rhobsigmaaa = -0.115131756157E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.182100003683E+00 + + v2sigmaaa2 = -0.734724120260E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.906038433225E-02 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.178683670736E-01 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.373013678572E-01 + vrhoa = -0.473435283691E+00 + vrhob = -0.361218005149E+00 + vsigmaaa = 0.359020337111E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.131562766064E+00 + + v2rhoa2 = -0.197163572369E+01 + v2rhoab = -0.394067363450E+00 + v2rhob2 = -0.370899186139E+01 + + v2rhoasigmaaa = 0.156172632966E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.176766532605E+00 + v2rhobsigmaaa = -0.590470328251E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.482372899310E+01 + + v2sigmaaa2 = -0.164476348552E+02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.199814672180E+01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.153004163905E+01 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.288118800455E+03 + vrhoa = -0.387190976620E+01 + vrhob = -0.384674293206E+01 + vsigmaaa = -0.926017812730E-07 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.304958432502E-06 + + v2rhoa2 = -0.256948221686E-01 + v2rhoab = -0.733123919164E-03 + v2rhob2 = -0.261082512764E-01 + + v2rhoasigmaaa = 0.195378863405E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.105014757198E-07 + v2rhobsigmaaa = -0.104126275098E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.208542970255E-06 + + v2sigmaaa2 = -0.333446383368E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.743086872059E-12 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.337634056804E-10 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.217269650543E+03 + vrhoa = -0.358742354350E+01 + vrhob = -0.358780399244E+01 + vsigmaaa = -0.224156645788E-05 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.219670356594E-05 + + v2rhoa2 = -0.307463012095E-01 + v2rhoab = -0.835295229330E-03 + v2rhob2 = -0.307208431786E-01 + + v2rhoasigmaaa = 0.360597817952E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.201387569030E-07 + v2rhobsigmaaa = -0.200238092690E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.360137201462E-06 + + v2sigmaaa2 = -0.428294481895E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.172421451059E-11 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.434505830110E-10 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.947215032653E-01 + vrhoa = -0.520331942477E+00 + vrhob = -0.465584076796E+00 + vsigmaaa = -0.161487029513E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.280975332438E-01 + + v2rhoa2 = -0.209729480584E+01 + v2rhoab = -0.227139588634E+00 + v2rhob2 = -0.266112764097E+01 + + v2rhoasigmaaa = 0.377472761787E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.216289107274E-01 + v2rhobsigmaaa = -0.619734366494E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.471758901127E+00 + + v2sigmaaa2 = -0.909660076372E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.271516902447E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.484173038134E-01 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.221643846362E-01 + vrhoa = -0.398051966421E+00 + vrhob = -0.323916098220E+00 + vsigmaaa = -0.227465906976E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.150020244938E+00 + + v2rhoa2 = -0.294341508627E+01 + v2rhoab = -0.779076273200E+00 + v2rhob2 = -0.247003061591E+01 + + v2rhoasigmaaa = 0.262406095188E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.225315294332E+00 + v2rhobsigmaaa = -0.118872618470E+01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.231832540263E+01 + + v2sigmaaa2 = -0.916949124493E+01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.382784516099E+01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.575406401616E+01 diff --git a/libxc-2.2.0/testsuite/df_repo/gga_xc_edf1.data b/libxc-2.2.0/testsuite/df_repo/gga_xc_edf1.data new file mode 100644 index 000000000..336428a9a --- /dev/null +++ b/libxc-2.2.0/testsuite/df_repo/gga_xc_edf1.data @@ -0,0 +1,600 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.410271047495E+01 + vrhoa = -0.159316635401E+01 + vrhob = -0.159316635401E+01 + vsigmaaa = -0.375008733521E-03 + vsigmaab = 0.751922016686E-04 + vsigmabb = -0.375008733521E-03 + + v2rhoa2 = -0.286557001073E+00 + v2rhoab = -0.150616809336E-01 + v2rhob2 = -0.286557001073E+00 + + v2rhoasigmaaa = 0.170398824729E-03 + v2rhoasigmaab = -0.389687448457E-04 + v2rhoasigmabb = 0.108792208968E-03 + v2rhobsigmaaa = 0.108792208968E-03 + v2rhobsigmaab = -0.389687448457E-04 + v2rhobsigmabb = 0.170398824729E-03 + + v2sigmaaa2 = -0.310350597338E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.310350597338E-04 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.410394050371E+01 + vrhoa = -0.159266517717E+01 + vrhob = -0.159266517717E+01 + vsigmaaa = -0.421988604932E-03 + vsigmaab = 0.751922016686E-04 + vsigmabb = -0.421988604932E-03 + + v2rhoa2 = -0.287027792883E+00 + v2rhoab = -0.153681048228E-01 + v2rhob2 = -0.287027792883E+00 + + v2rhoasigmaaa = 0.273462094370E-03 + v2rhoasigmaab = -0.389687448457E-04 + v2rhoasigmabb = 0.108792208968E-03 + v2rhobsigmaaa = 0.108792208968E-03 + v2rhobsigmaab = -0.389687448457E-04 + v2rhobsigmabb = 0.273462094370E-03 + + v2sigmaaa2 = -0.248311168770E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.248311168770E-04 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.353317167215E+01 + vrhoa = -0.149437801875E+01 + vrhob = -0.149437801875E+01 + vsigmaaa = -0.101133587566E-02 + vsigmaab = 0.937291761387E-04 + vsigmabb = -0.101133587566E-02 + + v2rhoa2 = -0.370527977942E+00 + v2rhoab = -0.270792723659E-01 + v2rhob2 = -0.370527977942E+00 + + v2rhoasigmaaa = 0.113824537120E-02 + v2rhoasigmaab = -0.549593870329E-04 + v2rhoasigmabb = 0.148957427973E-03 + v2rhobsigmaaa = 0.148957427973E-03 + v2rhobsigmaab = -0.549593870329E-04 + v2rhobsigmabb = 0.113824537120E-02 + + v2sigmaaa2 = -0.638874542644E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.638874542644E-05 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.892778843038E-01 + vrhoa = -0.559742833843E+00 + vrhob = -0.559742833843E+00 + vsigmaaa = -0.485966591860E-01 + vsigmaab = 0.117226935035E-01 + vsigmabb = -0.485966591860E-01 + + v2rhoa2 = -0.289221220665E+01 + v2rhoab = -0.589148566953E+00 + v2rhob2 = -0.289221220665E+01 + + v2rhoasigmaaa = 0.543812216100E+00 + v2rhoasigmaab = -0.108132011753E+00 + v2rhoasigmabb = 0.144351074329E+00 + v2rhobsigmaaa = 0.144351074329E+00 + v2rhobsigmaab = -0.108132011753E+00 + v2rhobsigmabb = 0.543812216100E+00 + + v2sigmaaa2 = 0.100982248283E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.100982248283E-01 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.422906921230E+05 + vrhoa = -0.156380064438E+02 + vrhob = -0.156380064438E+02 + vsigmaaa = -0.415054723635E-07 + vsigmaab = 0.348884492157E-09 + vsigmabb = -0.415054723635E-07 + + v2rhoa2 = -0.286795150729E-02 + v2rhoab = -0.137117509373E-04 + v2rhob2 = -0.286795150729E-02 + + v2rhoasigmaaa = 0.291541680912E-10 + v2rhoasigmaab = -0.167064055905E-12 + v2rhoasigmabb = 0.145502102912E-11 + v2rhobsigmaaa = 0.145502102912E-11 + v2rhobsigmaab = -0.167064055905E-12 + v2rhobsigmabb = 0.291541680912E-10 + + v2sigmaaa2 = -0.246921126931E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.246921126931E-16 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.422906928338E+05 + vrhoa = -0.156380061820E+02 + vrhob = -0.156380061820E+02 + vsigmaaa = -0.415056847009E-07 + vsigmaab = 0.348884492157E-09 + vsigmabb = -0.415056847009E-07 + + v2rhoa2 = -0.286795182240E-02 + v2rhoab = -0.137117737851E-04 + v2rhob2 = -0.286795182240E-02 + + v2rhoasigmaaa = 0.291546399502E-10 + v2rhoasigmaab = -0.167064055905E-12 + v2rhoasigmabb = 0.145502102912E-11 + v2rhobsigmaaa = 0.145502102912E-11 + v2rhobsigmaab = -0.167064055905E-12 + v2rhobsigmabb = 0.291546399502E-10 + + v2sigmaaa2 = -0.246918248473E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.246918248473E-16 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.367475920699E+05 + vrhoa = -0.146846059748E+02 + vrhob = -0.146846059748E+02 + vsigmaaa = -0.979350136945E-07 + vsigmaab = 0.427467436867E-09 + vsigmabb = -0.979350136945E-07 + + v2rhoa2 = -0.373278569101E-02 + v2rhoab = -0.305283776962E-04 + v2rhob2 = -0.373278569101E-02 + + v2rhoasigmaaa = 0.115157780815E-09 + v2rhoasigmaab = -0.230496105280E-12 + v2rhoasigmabb = 0.198781546095E-11 + v2rhobsigmaaa = 0.198781546095E-11 + v2rhobsigmaab = -0.230496105280E-12 + v2rhobsigmabb = 0.115157780815E-09 + + v2sigmaaa2 = -0.579225104437E-17 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.579225104437E-17 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.348528201524E+00 + vrhoa = -0.859930474066E+00 + vrhob = -0.859930474066E+00 + vsigmaaa = -0.934695675412E-02 + vsigmaab = 0.194214246028E-02 + vsigmabb = -0.934695675412E-02 + + v2rhoa2 = -0.110428505896E+01 + v2rhoab = -0.127743487136E+00 + v2rhob2 = -0.110428505896E+01 + + v2rhoasigmaaa = 0.599463862758E-01 + v2rhoasigmaab = -0.631848376073E-02 + v2rhoasigmabb = 0.111212799458E-01 + v2rhobsigmaaa = 0.111212799458E-01 + v2rhobsigmaab = -0.631848376073E-02 + v2rhobsigmabb = 0.599463862758E-01 + + v2sigmaaa2 = -0.864803214755E-02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.864803214755E-02 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.382811686671E+07 + vrhoa = -0.481262400373E+02 + vrhob = -0.481262400373E+02 + vsigmaaa = -0.461896925511E-09 + vsigmaab = 0.109272959577E-11 + vsigmabb = -0.461896925511E-09 + + v2rhoa2 = -0.301720491838E-03 + v2rhoab = -0.463461278156E-06 + v2rhob2 = -0.301720491838E-03 + + v2rhoasigmaaa = 0.114215954616E-13 + v2rhoasigmaab = -0.174158796585E-16 + v2rhoasigmabb = 0.182313623701E-15 + v2rhobsigmaaa = 0.182313623701E-15 + v2rhobsigmaab = -0.174158796585E-16 + v2rhobsigmabb = 0.114215954616E-13 + + v2sigmaaa2 = -0.328507119299E-22 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.328507119299E-22 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.331307943410E+07 + vrhoa = -0.451993427721E+02 + vrhob = -0.451993427721E+02 + vsigmaaa = -0.107599496047E-08 + vsigmaab = 0.133870527170E-11 + vsigmabb = -0.107599496047E-08 + + v2rhoa2 = -0.391209053170E-03 + v2rhoab = -0.103762485730E-05 + v2rhob2 = -0.391209053170E-03 + + v2rhoasigmaaa = 0.436971261297E-13 + v2rhoasigmaab = -0.240718018876E-16 + v2rhoasigmabb = 0.250991760809E-15 + v2rhobsigmaaa = 0.250991760809E-15 + v2rhobsigmaab = -0.240718018876E-16 + v2rhobsigmabb = 0.436971261297E-13 + + v2sigmaaa2 = -0.817172852791E-23 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.817172852791E-23 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.172353461024E+00 + vrhoa = -0.700377641164E+00 + vrhob = -0.700377641164E+00 + vsigmaaa = -0.230222675710E-01 + vsigmaab = 0.488320477001E-02 + vsigmabb = -0.230222675710E-01 + + v2rhoa2 = -0.185122501238E+01 + v2rhoab = -0.270635676763E+00 + v2rhob2 = -0.185122501238E+01 + + v2rhoasigmaaa = 0.218187041468E+00 + v2rhoasigmaab = -0.270174234880E-01 + v2rhoasigmabb = 0.413453714048E-01 + v2rhobsigmaaa = 0.413453714048E-01 + v2rhobsigmaab = -0.270174234880E-01 + v2rhobsigmabb = 0.218187041468E+00 + + v2sigmaaa2 = -0.215241600199E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.215241600199E-01 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.509789509065E+01 + vrhoa = -0.194205527263E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.174000500197E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.184957645012E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.172733309393E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.509849642856E+01 + vrhoa = -0.194181895323E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.179658285830E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.185123202549E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.160473971809E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.422130161843E+01 + vrhoa = -0.179997042841E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.428420386263E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.248484507489E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.463133116725E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.259869415408E-01 + vrhoa = -0.386326122627E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.976782468783E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.592299606819E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.246181810786E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.742795105176E+03 + vrhoa = -0.508080179859E+01 + vrhob = -0.504505045377E+01 + vsigmaaa = -0.618580218644E-05 + vsigmaab = 0.777038321513E-07 + vsigmabb = -0.628858953785E-05 + + v2rhoa2 = -0.367511279195E-01 + v2rhoab = -0.128206694872E-02 + v2rhob2 = -0.373182961309E-01 + + v2rhoasigmaaa = 0.106889667804E-06 + v2rhoasigmaab = -0.688806082380E-09 + v2rhoasigmabb = 0.504219052252E-08 + v2rhobsigmaaa = 0.514756229823E-08 + v2rhobsigmaab = -0.999062625764E-09 + v2rhobsigmabb = 0.108879202266E-06 + + v2sigmaaa2 = -0.746717609315E-13 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.683602585918E-13 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.279341680172E+03 + vrhoa = -0.390174587808E+01 + vrhob = -0.383612899924E+01 + vsigmaaa = -0.167150538358E-04 + vsigmaab = 0.294527623512E-06 + vsigmabb = -0.172507596526E-04 + + v2rhoa2 = -0.623773376902E-01 + v2rhoab = -0.306461944353E-02 + v2rhob2 = -0.643584502190E-01 + + v2rhoasigmaaa = 0.560662020455E-06 + v2rhoasigmaab = -0.447946015011E-08 + v2rhoasigmabb = 0.353575395008E-07 + v2rhobsigmaaa = 0.369533180221E-07 + v2rhobsigmaab = -0.916787520029E-08 + v2rhobsigmabb = 0.575797207196E-06 + + v2sigmaaa2 = -0.519565624316E-12 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.193709734028E-12 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.125616775264E+00 + vrhoa = -0.640325787337E+00 + vrhob = -0.557610385659E+00 + vsigmaaa = -0.314863093145E-01 + vsigmaab = 0.907754936682E-02 + vsigmabb = -0.378683587142E-01 + + v2rhoa2 = -0.237190889915E+01 + v2rhoab = -0.378361338247E+00 + v2rhob2 = -0.224432066878E+01 + + v2rhoasigmaaa = 0.296109132807E+00 + v2rhoasigmaab = -0.553761611064E-02 + v2rhoasigmabb = 0.489515549190E-01 + v2rhobsigmaaa = 0.985953221757E-01 + v2rhobsigmaab = -0.145737591325E+00 + v2rhobsigmabb = 0.216777316134E+00 + + v2sigmaaa2 = -0.174222846542E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.372167633195E-01 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.456881403986E-01 + vrhoa = -0.572964866280E+00 + vrhob = -0.452835738619E+00 + vsigmaaa = -0.483242338374E-01 + vsigmaab = 0.501931062266E-01 + vsigmabb = -0.172110361467E+00 + + v2rhoa2 = -0.224077703855E+01 + v2rhoab = -0.612320925253E+00 + v2rhob2 = -0.509704880332E+01 + + v2rhoasigmaaa = 0.951884282957E+00 + v2rhoasigmaab = -0.638856483123E-01 + v2rhoasigmabb = -0.212695038602E+00 + v2rhobsigmaaa = 0.458964850418E+00 + v2rhobsigmaab = -0.218291333478E+01 + v2rhobsigmabb = 0.904083942009E+01 + + v2sigmaaa2 = -0.242594653825E+01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.390666968502E+01 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.357339050138E+03 + vrhoa = -0.476259863035E+01 + vrhob = -0.473067001703E+01 + vsigmaaa = -0.737578865612E-05 + vsigmaab = 0.188237222341E-06 + vsigmabb = -0.763276970673E-05 + + v2rhoa2 = -0.323103007023E-01 + v2rhoab = -0.637819802370E-03 + v2rhob2 = -0.328255645368E-01 + + v2rhoasigmaaa = 0.267348569870E-06 + v2rhoasigmaab = -0.243773176564E-08 + v2rhoasigmabb = 0.184494645978E-07 + v2rhobsigmaaa = 0.190919197139E-07 + v2rhobsigmaab = -0.432672974638E-08 + v2rhobsigmabb = 0.284411818013E-06 + + v2sigmaaa2 = -0.155510273836E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.163245603199E-10 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.270065576063E+03 + vrhoa = -0.440741630824E+01 + vrhob = -0.440789785393E+01 + vsigmaaa = -0.111093800094E-04 + vsigmaab = 0.274098306632E-06 + vsigmabb = -0.110818542163E-04 + + v2rhoa2 = -0.388171303377E-01 + v2rhoab = -0.879203210839E-03 + v2rhob2 = -0.387805060657E-01 + + v2rhoasigmaaa = 0.514986610988E-06 + v2rhoasigmaab = -0.608595614103E-08 + v2rhoasigmabb = 0.327469830023E-07 + v2rhobsigmaaa = 0.327469830023E-07 + v2rhobsigmaab = -0.608595614103E-08 + v2rhobsigmabb = 0.513595886417E-06 + + v2sigmaaa2 = -0.274223191684E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.276297104655E-10 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.118471717102E+00 + vrhoa = -0.632289165790E+00 + vrhob = -0.585894880541E+00 + vsigmaaa = -0.335690880477E-01 + vsigmaab = 0.857765665993E-02 + vsigmabb = -0.392719146208E-01 + + v2rhoa2 = -0.235408981991E+01 + v2rhoab = -0.424110827134E+00 + v2rhob2 = -0.259466598824E+01 + + v2rhoasigmaaa = 0.346381971285E+00 + v2rhoasigmaab = -0.241061046296E-01 + v2rhoasigmabb = 0.675603959137E-01 + v2rhobsigmaaa = 0.985472547672E-01 + v2rhobsigmaab = -0.110524882708E+00 + v2rhobsigmabb = 0.371294161194E+00 + + v2sigmaaa2 = -0.247288161573E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.147703698131E-01 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.272783089874E-01 + vrhoa = -0.483657533063E+00 + vrhob = -0.395025984018E+00 + vsigmaaa = -0.112455284895E+00 + vsigmaab = 0.697046280199E-01 + vsigmabb = -0.223993537394E+00 + + v2rhoa2 = -0.373020838410E+01 + v2rhoab = -0.735681304479E+00 + v2rhob2 = -0.629082330972E+01 + + v2rhoasigmaaa = 0.351728356071E+01 + v2rhoasigmaab = -0.677165871202E-01 + v2rhoasigmabb = -0.232630024762E-02 + v2rhobsigmaaa = 0.133221901489E+01 + v2rhobsigmaab = -0.393983770823E+01 + v2rhobsigmabb = 0.930378499478E+01 + + v2sigmaaa2 = -0.468154042500E+01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.574825339547E+01 diff --git a/libxc-2.2.0/testsuite/df_repo/gga_xc_hcth_120.data b/libxc-2.2.0/testsuite/df_repo/gga_xc_hcth_120.data new file mode 100644 index 000000000..753dbf1a1 --- /dev/null +++ b/libxc-2.2.0/testsuite/df_repo/gga_xc_hcth_120.data @@ -0,0 +1,600 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.426126956109E+01 + vrhoa = -0.166178483841E+01 + vrhob = -0.166178483841E+01 + vsigmaaa = 0.150613213141E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.150613213141E-02 + + v2rhoa2 = -0.310204756744E+00 + v2rhoab = -0.940432511128E-02 + v2rhob2 = -0.310204756744E+00 + + v2rhoasigmaaa = -0.963907895726E-03 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.233649192057E-03 + v2rhobsigmaaa = -0.233649192057E-03 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.963907895726E-03 + + v2sigmaaa2 = -0.236908843951E-03 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.478569072105E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.236908843951E-03 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.425663464193E+01 + vrhoa = -0.166333196873E+01 + vrhob = -0.166333196873E+01 + vsigmaaa = 0.126196278300E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.126196278300E-02 + + v2rhoa2 = -0.309456564131E+00 + v2rhoab = -0.846291626299E-02 + v2rhob2 = -0.309456564131E+00 + + v2rhoasigmaaa = -0.517849594147E-03 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.240938042393E-03 + v2rhobsigmaaa = -0.240938042393E-03 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.517849594147E-03 + + v2sigmaaa2 = -0.870617454726E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.469724317807E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.870617454726E-04 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.357190813258E+01 + vrhoa = -0.156690197272E+01 + vrhob = -0.156690197272E+01 + vsigmaaa = -0.132239344235E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.132239344235E-03 + + v2rhoa2 = -0.449045373243E+00 + v2rhoab = 0.213241857584E-01 + v2rhob2 = -0.449045373243E+00 + + v2rhoasigmaaa = 0.173621941019E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.458759891749E-03 + v2rhobsigmaaa = -0.458759891749E-03 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.173621941019E-02 + + v2sigmaaa2 = -0.211466221361E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.473005594009E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.211466221361E-04 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.897250553352E-01 + vrhoa = -0.556447041616E+00 + vrhob = -0.556447041616E+00 + vsigmaaa = -0.426704389429E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.426704389429E-01 + + v2rhoa2 = -0.465736583962E+01 + v2rhoab = 0.135541275032E+00 + v2rhob2 = -0.465736583962E+01 + + v2rhoasigmaaa = 0.120318163510E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.222889516862E+00 + v2rhobsigmaaa = -0.222889516862E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.120318163510E+01 + + v2sigmaaa2 = -0.241065969021E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.110771457230E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.241065969021E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.447503408588E+05 + vrhoa = -0.165545055220E+02 + vrhob = -0.165545055220E+02 + vsigmaaa = 0.129503489268E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.129503489268E-06 + + v2rhoa2 = -0.303947628557E-02 + v2rhoab = -0.143244165320E-04 + v2rhob2 = -0.303947628557E-02 + + v2rhoasigmaaa = -0.928068908086E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.347371390341E-11 + v2rhobsigmaaa = -0.347371390341E-11 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.928068908086E-10 + + v2sigmaaa2 = -0.473881930182E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.669713943538E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.473881930182E-16 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.447503386315E+05 + vrhoa = -0.165545063499E+02 + vrhob = -0.165545063499E+02 + vsigmaaa = 0.129503087522E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.129503087522E-06 + + v2rhoa2 = -0.303947527741E-02 + v2rhoab = -0.143243487769E-04 + v2rhob2 = -0.303947527741E-02 + + v2rhoasigmaaa = -0.928059547893E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.347371902206E-11 + v2rhobsigmaaa = -0.347371902206E-11 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.928059547893E-10 + + v2sigmaaa2 = -0.473866583959E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.669713400505E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.473866583959E-16 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.375418866358E+05 + vrhoa = -0.159434504855E+02 + vrhob = -0.159434504855E+02 + vsigmaaa = 0.528086242806E-07 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.528086242806E-07 + + v2rhoa2 = -0.379776296469E-02 + v2rhoab = 0.314112007173E-04 + v2rhob2 = -0.379776296469E-02 + + v2rhoasigmaaa = 0.796172632466E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.681208180622E-11 + v2rhobsigmaaa = -0.681208180622E-11 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.796172632466E-10 + + v2sigmaaa2 = -0.193055664534E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.692375389520E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.193055664534E-16 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.352012041857E+00 + vrhoa = -0.882745411656E+00 + vrhob = -0.882745411656E+00 + vsigmaaa = -0.384078165354E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.384078165354E-02 + + v2rhoa2 = -0.147282162954E+01 + v2rhoab = 0.764724202649E-01 + v2rhob2 = -0.147282162954E+01 + + v2rhoasigmaaa = 0.136580135032E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.400849895858E-01 + v2rhobsigmaaa = -0.400849895858E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.136580135032E+00 + + v2sigmaaa2 = -0.319164014974E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.843863285689E-02 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.319164014974E-01 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.405421897288E+07 + vrhoa = -0.509711364154E+02 + vrhob = -0.509711364154E+02 + vsigmaaa = 0.140823797252E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.140823797252E-08 + + v2rhoa2 = -0.319485007747E-03 + v2rhoab = -0.578368686265E-06 + v2rhob2 = -0.319485007747E-03 + + v2rhoasigmaaa = -0.349737835737E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.510739987256E-15 + v2rhobsigmaaa = -0.510739987256E-15 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.349737835737E-13 + + v2sigmaaa2 = -0.384178853205E-22 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.354504615292E-24 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.384178853205E-22 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.338838896734E+07 + vrhoa = -0.491820600781E+02 + vrhob = -0.491820600781E+02 + vsigmaaa = 0.699581092806E-09 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.699581092806E-09 + + v2rhoa2 = -0.387837312019E-03 + v2rhoab = 0.125265317400E-05 + v2rhob2 = -0.387837312019E-03 + + v2rhoasigmaaa = 0.240814826820E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.101139444126E-14 + v2rhobsigmaaa = -0.101139444126E-14 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.240814826820E-13 + + v2sigmaaa2 = -0.262669890509E-22 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.378666813879E-24 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.262669890509E-22 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.173151339802E+00 + vrhoa = -0.712150126394E+00 + vrhob = -0.712150126394E+00 + vsigmaaa = -0.164103012298E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.164103012298E-01 + + v2rhoa2 = -0.250068041682E+01 + v2rhoab = 0.301045711529E+00 + v2rhob2 = -0.250068041682E+01 + + v2rhoasigmaaa = 0.375369427712E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.147171632151E+00 + v2rhobsigmaaa = -0.147171632151E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.375369427712E+00 + + v2sigmaaa2 = -0.674234996383E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.448743929541E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.674234996383E-01 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.547132966537E+01 + vrhoa = -0.207948936753E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.800197255739E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.196482805406E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.115887007028E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.546866991710E+01 + vrhoa = -0.208051879368E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.766010288846E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.195817998441E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.867303316821E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.435787455477E+01 + vrhoa = -0.196517908241E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.182160675746E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.263988345335E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.186537409761E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.262467344760E-01 + vrhoa = -0.358687806576E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.110982852409E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.869578925994E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.243424657490E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.723747385517E+03 + vrhoa = -0.536197693040E+01 + vrhob = -0.530462077679E+01 + vsigmaaa = -0.337553695705E-05 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.360628860243E-05 + + v2rhoa2 = -0.555196959130E-01 + v2rhoab = 0.104561012330E-02 + v2rhob2 = -0.571059786468E-01 + + v2rhoasigmaaa = 0.216924927011E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.101847708443E-07 + v2rhobsigmaaa = -0.103192807398E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.224072009309E-06 + + v2sigmaaa2 = -0.101440475949E-11 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.657448076634E-13 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.101875651601E-11 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.270927867747E+03 + vrhoa = -0.404418901898E+01 + vrhob = -0.392657858626E+01 + vsigmaaa = -0.113059881099E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.127726913696E-04 + + v2rhoa2 = -0.100148983151E+00 + v2rhoab = 0.151394073909E-02 + v2rhob2 = -0.105868777740E+00 + + v2rhoasigmaaa = 0.122253664566E-05 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.524313068177E-07 + v2rhobsigmaaa = -0.550724559100E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.128132535724E-05 + + v2sigmaaa2 = -0.152116239088E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.108851306076E-11 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.146126907412E-10 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.127035726763E+00 + vrhoa = -0.676650708272E+00 + vrhob = -0.519658938923E+00 + vsigmaaa = -0.139252218808E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.412480855065E-01 + + v2rhoa2 = -0.312335597986E+01 + v2rhoab = -0.400810700887E+00 + v2rhob2 = -0.901746796853E+00 + + v2rhoasigmaaa = 0.551288660561E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.137662644184E-01 + v2rhobsigmaaa = -0.626629020315E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.375020296119E-01 + + v2sigmaaa2 = -0.142832128092E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.170792459778E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.679995197696E-01 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.472759178368E-01 + vrhoa = -0.613477003462E+00 + vrhob = -0.394871884745E+00 + vsigmaaa = 0.794544324953E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.315264772245E+00 + + v2rhoa2 = -0.256180818722E+01 + v2rhoab = 0.150216952973E+00 + v2rhob2 = -0.634084034742E+01 + + v2rhoasigmaaa = 0.123846001149E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.173169630779E+01 + v2rhobsigmaaa = -0.201502878911E+01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.817324252934E+01 + + v2sigmaaa2 = -0.180584724060E+02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.567892302537E+01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.291097543902E+02 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.371990034529E+03 + vrhoa = -0.507547232140E+01 + vrhob = -0.504195268396E+01 + vsigmaaa = 0.107348018415E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.106699712128E-04 + + v2rhoa2 = -0.332636053644E-01 + v2rhoab = -0.448911372907E-04 + v2rhob2 = -0.338721776951E-01 + + v2rhoasigmaaa = 0.484992557043E-08 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.479787747776E-07 + v2rhobsigmaaa = -0.473293473146E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.300002329430E-07 + + v2sigmaaa2 = -0.430129560606E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.255409086340E-11 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.464257625100E-10 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.279322337147E+03 + vrhoa = -0.471066613655E+01 + vrhob = -0.471106313561E+01 + vsigmaaa = 0.106608025918E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.107569590189E-04 + + v2rhoa2 = -0.406782667755E-01 + v2rhoab = 0.216313978120E-03 + v2rhob2 = -0.406183299053E-01 + + v2rhoasigmaaa = 0.311205395139E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.887407260867E-07 + v2rhobsigmaaa = -0.883544104569E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.305680754753E-06 + + v2sigmaaa2 = -0.900615893372E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.579473444563E-11 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.906618479122E-10 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.119156082214E+00 + vrhoa = -0.659443087533E+00 + vrhob = -0.560370112465E+00 + vsigmaaa = -0.186523701196E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.409692907690E-01 + + v2rhoa2 = -0.322859554260E+01 + v2rhoab = 0.176717595534E+00 + v2rhob2 = -0.397058371560E+01 + + v2rhoasigmaaa = 0.647232376791E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.127010643416E+00 + v2rhobsigmaaa = -0.198407926134E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.721378653207E+00 + + v2sigmaaa2 = -0.170646210670E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.600010972713E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.590682367509E-01 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.281104267181E-01 + vrhoa = -0.511841920566E+00 + vrhob = -0.368079155413E+00 + vsigmaaa = -0.116907802800E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.273021560284E+00 + + v2rhoa2 = -0.428547298124E+01 + v2rhoab = 0.412141289988E-02 + v2rhob2 = -0.277267473501E+01 + + v2rhoasigmaaa = 0.462108392831E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.158060389347E+01 + v2rhobsigmaaa = -0.354578033150E+01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.650166579519E+00 + + v2sigmaaa2 = -0.165323136101E+02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.870046499599E+01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.284287727521E+02 diff --git a/libxc-2.2.0/testsuite/df_repo/gga_xc_hcth_147.data b/libxc-2.2.0/testsuite/df_repo/gga_xc_hcth_147.data new file mode 100644 index 000000000..ad8822e11 --- /dev/null +++ b/libxc-2.2.0/testsuite/df_repo/gga_xc_hcth_147.data @@ -0,0 +1,600 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.426985188443E+01 + vrhoa = -0.166423359090E+01 + vrhob = -0.166423359090E+01 + vsigmaaa = 0.681943067190E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.681943067190E-03 + + v2rhoa2 = -0.309565281480E+00 + v2rhoab = -0.990899021381E-02 + v2rhob2 = -0.309565281480E+00 + + v2rhoasigmaaa = -0.192950180722E-03 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.236509024559E-03 + v2rhobsigmaaa = -0.236509024559E-03 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.192950180722E-03 + + v2sigmaaa2 = 0.404191899919E-03 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.535441686040E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.404191899919E-03 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.426659470137E+01 + vrhoa = -0.166596702878E+01 + vrhob = -0.166596702878E+01 + vsigmaaa = 0.117131159198E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.117131159198E-02 + + v2rhoa2 = -0.307193750110E+00 + v2rhoab = -0.895514759908E-02 + v2rhob2 = -0.307193750110E+00 + + v2rhoasigmaaa = -0.113718298139E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.244640965718E-03 + v2rhobsigmaaa = -0.244640965718E-03 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.113718298139E-02 + + v2sigmaaa2 = 0.181763806685E-03 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.524451176027E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.181763806685E-03 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.357433662091E+01 + vrhoa = -0.156824489566E+01 + vrhob = -0.156824489566E+01 + vsigmaaa = -0.114433160907E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.114433160907E-03 + + v2rhoa2 = -0.442676674028E+00 + v2rhoab = 0.205208131550E-01 + v2rhob2 = -0.442676674028E+00 + + v2rhoasigmaaa = 0.165722386865E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.463139996085E-03 + v2rhobsigmaaa = -0.463139996085E-03 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.165722386865E-02 + + v2sigmaaa2 = -0.202907559548E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.496362337495E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.202907559548E-04 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.897622654692E-01 + vrhoa = -0.558798735175E+00 + vrhob = -0.558798735175E+00 + vsigmaaa = -0.417750637662E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.417750637662E-01 + + v2rhoa2 = -0.465088188192E+01 + v2rhoab = -0.406662915152E-01 + v2rhob2 = -0.465088188192E+01 + + v2rhoasigmaaa = 0.120001097278E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.155554787738E+00 + v2rhobsigmaaa = -0.155554787738E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.120001097278E+01 + + v2sigmaaa2 = -0.246626548261E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.862095523344E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.246626548261E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.447206619199E+05 + vrhoa = -0.165415581785E+02 + vrhob = -0.165415581785E+02 + vsigmaaa = 0.123056197647E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.123056197647E-06 + + v2rhoa2 = -0.303513298353E-02 + v2rhoab = -0.150931089213E-04 + v2rhob2 = -0.303513298353E-02 + + v2rhoasigmaaa = -0.857427039445E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.351623166196E-11 + v2rhobsigmaaa = -0.351623166196E-11 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.857427039445E-10 + + v2sigmaaa2 = 0.428466584750E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.749302000468E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.428466584750E-16 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.447206598035E+05 + vrhoa = -0.165415589461E+02 + vrhob = -0.165415589461E+02 + vsigmaaa = 0.123056572541E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.123056572541E-06 + + v2rhoa2 = -0.303513207143E-02 + v2rhoab = -0.150930403369E-04 + v2rhob2 = -0.303513207143E-02 + + v2rhoasigmaaa = -0.857436092411E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.351623738889E-11 + v2rhobsigmaaa = -0.351623738889E-11 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.857436092411E-10 + + v2sigmaaa2 = 0.428448645931E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.749301325135E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.428448645931E-16 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.374672029936E+05 + vrhoa = -0.159303168992E+02 + vrhob = -0.159303168992E+02 + vsigmaaa = 0.560254837797E-07 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.560254837797E-07 + + v2rhoa2 = -0.381001616383E-02 + v2rhoab = 0.305364593554E-04 + v2rhob2 = -0.381001616383E-02 + + v2rhoasigmaaa = 0.824271652892E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.692224695458E-11 + v2rhobsigmaaa = -0.692224695458E-11 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.824271652892E-10 + + v2sigmaaa2 = -0.202063912900E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.733089411926E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.202063912900E-16 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.352776876359E+00 + vrhoa = -0.883967939670E+00 + vrhob = -0.883967939670E+00 + vsigmaaa = -0.386986574925E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.386986574925E-02 + + v2rhoa2 = -0.145092926073E+01 + v2rhoab = 0.736712557814E-01 + v2rhob2 = -0.145092926073E+01 + + v2rhoasigmaaa = 0.130686805928E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.407321390204E-01 + v2rhobsigmaaa = -0.407321390204E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.130686805928E+00 + + v2sigmaaa2 = -0.299742168941E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.895404113925E-02 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.299742168941E-01 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.405007065773E+07 + vrhoa = -0.509164371083E+02 + vrhob = -0.509164371083E+02 + vsigmaaa = 0.143815790509E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.143815790509E-08 + + v2rhoa2 = -0.319059220792E-03 + v2rhoab = -0.609405734684E-06 + v2rhob2 = -0.319059220792E-03 + + v2rhoasigmaaa = -0.353694174693E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.516991371345E-15 + v2rhobsigmaaa = -0.516991371345E-15 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.353694174693E-13 + + v2sigmaaa2 = 0.838662093338E-23 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.396633547719E-24 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.838662093338E-23 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.338051225926E+07 + vrhoa = -0.491348160305E+02 + vrhob = -0.491348160305E+02 + vsigmaaa = 0.740213793805E-09 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.740213793805E-09 + + v2rhoa2 = -0.389665061547E-03 + v2rhoab = 0.122092381953E-05 + v2rhob2 = -0.389665061547E-03 + + v2rhoasigmaaa = 0.254524796099E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.102959686541E-14 + v2rhobsigmaaa = -0.102959686541E-14 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.254524796099E-13 + + v2sigmaaa2 = -0.278046909330E-22 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.401984490719E-24 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.278046909330E-22 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.173477635530E+00 + vrhoa = -0.716093584256E+00 + vrhob = -0.716093584256E+00 + vsigmaaa = -0.153408808412E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.153408808412E-01 + + v2rhoa2 = -0.243634098323E+01 + v2rhoab = 0.266691868158E+00 + v2rhob2 = -0.243634098323E+01 + + v2rhoasigmaaa = 0.357050369445E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.139478997832E+00 + v2rhobsigmaaa = -0.139478997832E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.357050369445E+00 + + v2sigmaaa2 = -0.663961333825E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.437178350932E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.663961333825E-01 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.547546079316E+01 + vrhoa = -0.208034265814E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.541574804517E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.196330645344E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.186426805698E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.547351908945E+01 + vrhoa = -0.208115640299E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.598512539411E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.195703492481E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.149505723310E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.435607936411E+01 + vrhoa = -0.196324889198E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.179856783265E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.263777784892E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.185291760035E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.262810695952E-01 + vrhoa = -0.364318608921E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.108553500954E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.836828112816E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.195227739675E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.722353875313E+03 + vrhoa = -0.535263336758E+01 + vrhob = -0.529582934030E+01 + vsigmaaa = -0.335611166053E-05 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.358431030187E-05 + + v2rhoa2 = -0.552705092548E-01 + v2rhoab = 0.782606445209E-03 + v2rhob2 = -0.567755205917E-01 + + v2rhoasigmaaa = 0.216036856244E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.876157116603E-08 + v2rhobsigmaaa = -0.888680967699E-08 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.222702608392E-06 + + v2sigmaaa2 = -0.101341020914E-11 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.585449914125E-13 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.101519299255E-11 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.270439146850E+03 + vrhoa = -0.403843494040E+01 + vrhob = -0.392308921945E+01 + vsigmaaa = -0.112424734342E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.126732160833E-04 + + v2rhoa2 = -0.991005653762E-01 + v2rhoab = 0.838753225097E-03 + v2rhob2 = -0.104356951048E+00 + + v2rhoasigmaaa = 0.120616334561E-05 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.412917949989E-07 + v2rhobsigmaaa = -0.435864824249E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.125739101361E-05 + + v2sigmaaa2 = -0.149866639028E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.908247682192E-12 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.142905275274E-10 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.126982026444E+00 + vrhoa = -0.675618993021E+00 + vrhob = -0.520941200385E+00 + vsigmaaa = -0.143298104213E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.407483039234E-01 + + v2rhoa2 = -0.315382011741E+01 + v2rhoab = -0.487126012818E+00 + v2rhob2 = -0.154322015531E+01 + + v2rhoasigmaaa = 0.559702155957E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.298615556335E-01 + v2rhobsigmaaa = -0.254352625789E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.133235433131E+00 + + v2sigmaaa2 = -0.143533176927E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.106728606050E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.524215554152E-01 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.473942228003E-01 + vrhoa = -0.615891803533E+00 + vrhob = -0.403477137965E+00 + vsigmaaa = 0.905499154816E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.292651679926E+00 + + v2rhoa2 = -0.268078486559E+01 + v2rhoab = 0.977652439250E-01 + v2rhob2 = -0.570830615321E+01 + + v2rhoasigmaaa = 0.209120333326E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.158897403440E+01 + v2rhobsigmaaa = -0.197539815416E+01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.642083376715E+01 + + v2sigmaaa2 = -0.257307335332E+02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.567699947872E+01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.299886117156E+02 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.371806348776E+03 + vrhoa = -0.507883923821E+01 + vrhob = -0.504506855586E+01 + vsigmaaa = 0.119318329592E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.118137057038E-04 + + v2rhoa2 = -0.335162659879E-01 + v2rhoab = -0.615455281396E-04 + v2rhob2 = -0.341545570838E-01 + + v2rhoasigmaaa = 0.547334189096E-07 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.492250189615E-07 + v2rhobsigmaaa = -0.486134709726E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.840879820782E-07 + + v2sigmaaa2 = -0.573397212444E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.280949920555E-11 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.609924926032E-10 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.279124163618E+03 + vrhoa = -0.471110297396E+01 + vrhob = -0.471156781006E+01 + vsigmaaa = 0.114051579361E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.115156407777E-04 + + v2rhoa2 = -0.410497447951E-01 + v2rhoab = 0.198714221056E-03 + v2rhob2 = -0.409935050433E-01 + + v2rhoasigmaaa = 0.376049675359E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.911535869735E-07 + v2rhobsigmaaa = -0.907328751422E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.371719204181E-06 + + v2sigmaaa2 = -0.103670968347E-09 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.631067747030E-11 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.104675179380E-09 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.119211698040E+00 + vrhoa = -0.660964700133E+00 + vrhob = -0.565728997509E+00 + vsigmaaa = -0.181455100706E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.394819355013E-01 + + v2rhoa2 = -0.322419793616E+01 + v2rhoab = 0.554017546086E-01 + v2rhob2 = -0.394342842129E+01 + + v2rhoasigmaaa = 0.647246195716E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.951267372079E-01 + v2rhobsigmaaa = -0.156272909911E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.715392858294E+00 + + v2sigmaaa2 = -0.174168397070E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.495480835703E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.646826302775E-01 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.281431091510E-01 + vrhoa = -0.512067460449E+00 + vrhob = -0.375933056590E+00 + vsigmaaa = -0.130855019890E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.254644665275E+00 + + v2rhoa2 = -0.417676161292E+01 + v2rhoab = -0.200036656726E+00 + v2rhob2 = -0.312524134522E+01 + + v2rhoasigmaaa = 0.420578822870E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.111178627705E+01 + v2rhobsigmaaa = -0.291838425602E+01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.153623274082E+01 + + v2sigmaaa2 = -0.148089363711E+02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.738915174006E+01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.233259401863E+02 diff --git a/libxc-2.2.0/testsuite/df_repo/gga_xc_hcth_407.data b/libxc-2.2.0/testsuite/df_repo/gga_xc_hcth_407.data new file mode 100644 index 000000000..e8177f893 --- /dev/null +++ b/libxc-2.2.0/testsuite/df_repo/gga_xc_hcth_407.data @@ -0,0 +1,600 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.432911132609E+01 + vrhoa = -0.168144444534E+01 + vrhob = -0.168144444534E+01 + vsigmaaa = 0.836834892002E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.836834892002E-02 + + v2rhoa2 = -0.308038826019E+00 + v2rhoab = -0.107626565758E-01 + v2rhob2 = -0.308038826019E+00 + + v2rhoasigmaaa = -0.739453940802E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.149152976105E-03 + v2rhobsigmaaa = -0.149152976105E-03 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.739453940802E-02 + + v2sigmaaa2 = -0.256505942948E-02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.357681866656E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.256505942948E-02 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.430661252967E+01 + vrhoa = -0.168781830257E+01 + vrhob = -0.168781830257E+01 + vsigmaaa = 0.522058635465E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.522058635465E-02 + + v2rhoa2 = -0.306037655275E+00 + v2rhoab = -0.101608410414E-01 + v2rhob2 = -0.306037655275E+00 + + v2rhoasigmaaa = -0.104460236673E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.154540111125E-03 + v2rhobsigmaaa = -0.154540111125E-03 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.104460236673E-02 + + v2sigmaaa2 = -0.130189701917E-02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.348202681315E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.130189701917E-02 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.357612103208E+01 + vrhoa = -0.157348861978E+01 + vrhob = -0.157348861978E+01 + vsigmaaa = -0.442824716765E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.442824716765E-04 + + v2rhoa2 = -0.445217533082E+00 + v2rhoab = 0.666859190153E-02 + v2rhob2 = -0.445217533082E+00 + + v2rhoasigmaaa = 0.174356919992E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.270283080766E-03 + v2rhobsigmaaa = -0.270283080766E-03 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.174356919992E-02 + + v2sigmaaa2 = -0.240472640403E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.274646850077E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.240472640403E-04 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.897105327570E-01 + vrhoa = -0.553677860844E+00 + vrhob = -0.553677860844E+00 + vsigmaaa = -0.432668188482E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.432668188482E-01 + + v2rhoa2 = -0.501556164669E+01 + v2rhoab = 0.413004581829E-01 + v2rhob2 = -0.501556164669E+01 + + v2rhoasigmaaa = 0.124150653529E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.111016135091E+00 + v2rhobsigmaaa = -0.111016135091E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.124150653529E+01 + + v2sigmaaa2 = -0.212213657533E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.401058930701E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.212213657533E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.445539177730E+05 + vrhoa = -0.164668663312E+02 + vrhob = -0.164668663312E+02 + vsigmaaa = 0.211566256298E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.211566256298E-06 + + v2rhoa2 = -0.301221020439E-02 + v2rhoab = -0.163933906983E-04 + v2rhob2 = -0.301221020439E-02 + + v2rhoasigmaaa = -0.172630445503E-09 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.221749008536E-11 + v2rhobsigmaaa = -0.221749008536E-11 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.172630445503E-09 + + v2sigmaaa2 = -0.375311119843E-15 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.500543280808E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.375311119843E-15 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.445539141343E+05 + vrhoa = -0.164668678347E+02 + vrhob = -0.164668678347E+02 + vsigmaaa = 0.211563033181E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.211563033181E-06 + + v2rhoa2 = -0.301220816158E-02 + v2rhoab = -0.163933474460E-04 + v2rhob2 = -0.301220816158E-02 + + v2rhoasigmaaa = -0.172622819803E-09 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.221749391102E-11 + v2rhobsigmaaa = -0.221749391102E-11 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.172622819803E-09 + + v2sigmaaa2 = -0.375299950844E-15 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.500542696870E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.375299950844E-15 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.374630770863E+05 + vrhoa = -0.158249264901E+02 + vrhob = -0.158249264901E+02 + vsigmaaa = 0.393140680588E-07 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.393140680588E-07 + + v2rhoa2 = -0.366026987622E-02 + v2rhoab = 0.101150683646E-04 + v2rhob2 = -0.366026987622E-02 + + v2rhoasigmaaa = 0.632140896207E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.410357007669E-11 + v2rhobsigmaaa = -0.410357007669E-11 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.632140896207E-10 + + v2sigmaaa2 = -0.151265803666E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.416336685213E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.151265803666E-16 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.353250306229E+00 + vrhoa = -0.893551934047E+00 + vrhob = -0.893551934047E+00 + vsigmaaa = -0.869695078271E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.869695078271E-03 + + v2rhoa2 = -0.150272458520E+01 + v2rhoab = 0.179046903370E-01 + v2rhob2 = -0.150272458520E+01 + + v2rhoasigmaaa = 0.152383821432E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.242727021867E-01 + v2rhobsigmaaa = -0.242727021867E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.152383821432E+00 + + v2sigmaaa2 = -0.463809997487E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.511719902669E-02 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.463809997487E-01 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.402531078351E+07 + vrhoa = -0.505882975693E+02 + vrhob = -0.505882975693E+02 + vsigmaaa = 0.151263216278E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.151263216278E-08 + + v2rhoa2 = -0.316606646400E-03 + v2rhoab = -0.661906462068E-06 + v2rhob2 = -0.316606646400E-03 + + v2rhoasigmaaa = -0.405615028260E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.326037460137E-15 + v2rhobsigmaaa = -0.326037460137E-15 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.405615028260E-13 + + v2sigmaaa2 = -0.208741171926E-21 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.264956262044E-24 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.208741171926E-21 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.337909147033E+07 + vrhoa = -0.487284135877E+02 + vrhob = -0.487284135877E+02 + vsigmaaa = 0.506093187410E-09 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.506093187410E-09 + + v2rhoa2 = -0.373257908345E-03 + v2rhoab = 0.404299144387E-06 + v2rhob2 = -0.373257908345E-03 + + v2rhoasigmaaa = 0.174869711697E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.613163446900E-15 + v2rhobsigmaaa = -0.613163446900E-15 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.174869711697E-13 + + v2sigmaaa2 = -0.191055410311E-22 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.230050348616E-24 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.191055410311E-22 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.173252379143E+00 + vrhoa = -0.716621441253E+00 + vrhob = -0.716621441253E+00 + vsigmaaa = -0.149251531883E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.149251531883E-01 + + v2rhoa2 = -0.237302943452E+01 + v2rhoab = 0.943722038095E-01 + v2rhob2 = -0.237302943452E+01 + + v2rhoasigmaaa = 0.324893770889E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.715275846482E-01 + v2rhobsigmaaa = -0.715275846482E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.324893770889E+00 + + v2sigmaaa2 = -0.559383609901E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.197883864175E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.559383609901E-01 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.552760936356E+01 + vrhoa = -0.209404418015E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.291462553996E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.195638283478E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.121417105019E-03 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.551835620697E+01 + vrhoa = -0.209762920936E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.254099190460E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.193565724277E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.991903280894E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.436864398244E+01 + vrhoa = -0.196192637095E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.146894617974E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.267962619460E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.197405478244E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.259110912875E-01 + vrhoa = -0.393771825312E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.905956665480E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.898177485960E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.478275332387E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.721113319377E+03 + vrhoa = -0.546488887740E+01 + vrhob = -0.541607999288E+01 + vsigmaaa = -0.259552638494E-05 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.276730355819E-05 + + v2rhoa2 = -0.478261944820E-01 + v2rhoab = 0.279862210625E-03 + v2rhob2 = -0.492409744411E-01 + + v2rhoasigmaaa = 0.164339412901E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.423800677183E-08 + v2rhobsigmaaa = -0.427264701102E-08 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.170731767279E-06 + + v2sigmaaa2 = -0.755055751823E-12 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.229067509281E-13 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.764520553770E-12 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.269292660020E+03 + vrhoa = -0.415145662482E+01 + vrhob = -0.405017129488E+01 + vsigmaaa = -0.889316476121E-05 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.100374042376E-04 + + v2rhoa2 = -0.876594082715E-01 + v2rhoab = 0.383329815310E-03 + v2rhob2 = -0.937438974583E-01 + + v2rhoasigmaaa = 0.965357580533E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.222481484942E-07 + v2rhobsigmaaa = -0.229499934912E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.103533715687E-05 + + v2sigmaaa2 = -0.117912149004E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.362378724273E-12 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.117267004587E-10 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.127243845868E+00 + vrhoa = -0.673587057999E+00 + vrhob = -0.469361951076E+00 + vsigmaaa = -0.173571205268E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.474232650708E-01 + + v2rhoa2 = -0.291816445225E+01 + v2rhoab = -0.279157026409E-01 + v2rhob2 = -0.526604303839E+01 + + v2rhoasigmaaa = 0.457726413430E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.314163785079E-01 + v2rhobsigmaaa = -0.701794212013E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.667055244175E+00 + + v2sigmaaa2 = -0.876335426733E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.119113917791E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.101120206000E-02 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.474948484240E-01 + vrhoa = -0.623378712168E+00 + vrhob = -0.413907509018E+00 + vsigmaaa = 0.124123130444E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.244905584528E+00 + + v2rhoa2 = -0.269490703187E+01 + v2rhoab = -0.366351862605E-01 + v2rhob2 = -0.685112984272E+01 + + v2rhoasigmaaa = 0.208668034130E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.101218125496E+01 + v2rhobsigmaaa = -0.102130243578E+01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.974878742645E+01 + + v2sigmaaa2 = -0.309654405946E+02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.274247156923E+01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.110071494898E+02 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.371431000033E+03 + vrhoa = -0.506487953888E+01 + vrhob = -0.503155649470E+01 + vsigmaaa = 0.110297844121E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.109167771396E-04 + + v2rhoa2 = -0.332847049132E-01 + v2rhoab = -0.240293112937E-03 + v2rhob2 = -0.338484493276E-01 + + v2rhoasigmaaa = 0.732933634801E-07 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.309622934009E-07 + v2rhobsigmaaa = -0.305828900415E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.916921311486E-07 + + v2sigmaaa2 = -0.614148698681E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.178531650028E-11 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.633519542795E-10 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.278968530889E+03 + vrhoa = -0.469965704251E+01 + vrhob = -0.470006385899E+01 + vsigmaaa = 0.103988564379E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.105048974313E-04 + + v2rhoa2 = -0.404710438077E-01 + v2rhoab = -0.125335940099E-03 + v2rhob2 = -0.404153570710E-01 + + v2rhoasigmaaa = 0.352606970965E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.566688328990E-07 + v2rhobsigmaaa = -0.564092726600E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.347934072651E-06 + + v2sigmaaa2 = -0.101685402001E-09 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.389340358557E-11 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.102611728763E-09 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.119047653006E+00 + vrhoa = -0.655375713984E+00 + vrhob = -0.559484570116E+00 + vsigmaaa = -0.209368203431E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.397122681545E-01 + + v2rhoa2 = -0.309924667359E+01 + v2rhoab = 0.276325071797E-01 + v2rhob2 = -0.490407596001E+01 + + v2rhoasigmaaa = 0.563255866059E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.610147329796E-01 + v2rhobsigmaaa = -0.807264677538E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.901128256648E+00 + + v2sigmaaa2 = -0.115318954571E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.200603163508E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.931248762739E-01 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.281073304159E-01 + vrhoa = -0.509625446067E+00 + vrhob = -0.353591652092E+00 + vsigmaaa = -0.299361629577E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.291653961143E+00 + + v2rhoa2 = -0.477804898328E+01 + v2rhoab = -0.111037074892E+00 + v2rhob2 = -0.113928998428E+02 + + v2rhoasigmaaa = 0.634687606016E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.996710931783E+00 + v2rhobsigmaaa = -0.137020610521E+01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.182054726041E+02 + + v2sigmaaa2 = -0.204428482387E+02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.289662265916E+01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.387965366373E+01 diff --git a/libxc-2.2.0/testsuite/df_repo/gga_xc_hcth_93.data b/libxc-2.2.0/testsuite/df_repo/gga_xc_hcth_93.data new file mode 100644 index 000000000..739f629eb --- /dev/null +++ b/libxc-2.2.0/testsuite/df_repo/gga_xc_hcth_93.data @@ -0,0 +1,600 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.426183502856E+01 + vrhoa = -0.166232660647E+01 + vrhob = -0.166232660647E+01 + vsigmaaa = 0.112801359159E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.112801359159E-02 + + v2rhoa2 = -0.306600170285E+00 + v2rhoab = -0.133369199751E-01 + v2rhob2 = -0.306600170285E+00 + + v2rhoasigmaaa = -0.739529602307E-03 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.113047000726E-03 + v2rhobsigmaaa = -0.113047000726E-03 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.739529602307E-03 + + v2sigmaaa2 = -0.271603541107E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.225327168974E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.271603541107E-04 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.425802985156E+01 + vrhoa = -0.166376331486E+01 + vrhob = -0.166376331486E+01 + vsigmaaa = 0.111796673488E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.111796673488E-02 + + v2rhoa2 = -0.305092543558E+00 + v2rhoab = -0.128815389739E-01 + v2rhob2 = -0.305092543558E+00 + + v2rhoasigmaaa = -0.740607378614E-03 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.116485588479E-03 + v2rhobsigmaaa = -0.116485588479E-03 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.740607378614E-03 + + v2sigmaaa2 = 0.103229323196E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.221481985791E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.103229323196E-05 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.356705319001E+01 + vrhoa = -0.157380190683E+01 + vrhob = -0.157380190683E+01 + vsigmaaa = -0.596739702854E-05 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.596739702854E-05 + + v2rhoa2 = -0.427612659000E+00 + v2rhoab = 0.684755783987E-03 + v2rhob2 = -0.427612659000E+00 + + v2rhoasigmaaa = 0.148448513819E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.225134022014E-03 + v2rhobsigmaaa = -0.225134022014E-03 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.148448513819E-02 + + v2sigmaaa2 = -0.206835676652E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.232918758649E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.206835676652E-04 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.890495584473E-01 + vrhoa = -0.544642875548E+00 + vrhob = -0.544642875548E+00 + vsigmaaa = -0.457174363667E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.457174363667E-01 + + v2rhoa2 = -0.488490804700E+01 + v2rhoab = -0.228893913486E-01 + v2rhob2 = -0.488490804700E+01 + + v2rhoasigmaaa = 0.126318550023E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.132745497976E+00 + v2rhobsigmaaa = -0.132745497976E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.126318550023E+01 + + v2sigmaaa2 = -0.234864343728E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.675438346398E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.234864343728E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.448027736363E+05 + vrhoa = -0.165747411950E+02 + vrhob = -0.165747411950E+02 + vsigmaaa = 0.122656405696E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.122656405696E-06 + + v2rhoa2 = -0.303773196098E-02 + v2rhoab = -0.203144398726E-04 + v2rhob2 = -0.303773196098E-02 + + v2rhoasigmaaa = -0.886074410839E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.168069461188E-11 + v2rhobsigmaaa = -0.168069461188E-11 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.886074410839E-10 + + v2sigmaaa2 = -0.186479577969E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.315324904421E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.186479577969E-16 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.448027715268E+05 + vrhoa = -0.165747419714E+02 + vrhob = -0.165747419714E+02 + vsigmaaa = 0.122656248048E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.122656248048E-06 + + v2rhoa2 = -0.303773099159E-02 + v2rhoab = -0.203144070905E-04 + v2rhob2 = -0.303773099159E-02 + + v2rhoasigmaaa = -0.886070879227E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.168069702192E-11 + v2rhobsigmaaa = -0.168069702192E-11 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.886070879227E-10 + + v2sigmaaa2 = -0.186475496558E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.315324668463E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.186475496558E-16 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.376027361257E+05 + vrhoa = -0.159530964843E+02 + vrhob = -0.159530964843E+02 + vsigmaaa = 0.499653496536E-07 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.499653496536E-07 + + v2rhoa2 = -0.380550483444E-02 + v2rhoab = 0.484146859610E-06 + v2rhob2 = -0.380550483444E-02 + + v2rhoasigmaaa = 0.824134553702E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.332952675534E-11 + v2rhobsigmaaa = -0.332952675534E-11 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.824134553702E-10 + + v2sigmaaa2 = -0.196726960197E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.338798045620E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.196726960197E-16 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.351221009652E+00 + vrhoa = -0.888121877052E+00 + vrhob = -0.888121877052E+00 + vsigmaaa = -0.147229756841E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.147229756841E-02 + + v2rhoa2 = -0.134940814291E+01 + v2rhoab = -0.108123594480E-01 + v2rhob2 = -0.134940814291E+01 + + v2rhoasigmaaa = 0.102656027402E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.195734608747E-01 + v2rhobsigmaaa = -0.195734608747E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.102656027402E+00 + + v2sigmaaa2 = -0.280342735949E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.412301704699E-02 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.280342735949E-01 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.405960372963E+07 + vrhoa = -0.510399672925E+02 + vrhob = -0.510399672925E+02 + vsigmaaa = 0.137440710662E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.137440710662E-08 + + v2rhoa2 = -0.319698379167E-03 + v2rhoab = -0.820224399619E-06 + v2rhob2 = -0.319698379167E-03 + + v2rhoasigmaaa = -0.342414050472E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.247112447506E-15 + v2rhobsigmaaa = -0.247112447506E-15 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.342414050472E-13 + + v2sigmaaa2 = -0.242876811647E-22 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.166913254564E-24 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.242876811647E-22 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.339496253738E+07 + vrhoa = -0.491931435255E+02 + vrhob = -0.491931435255E+02 + vsigmaaa = 0.648277989884E-09 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.648277989884E-09 + + v2rhoa2 = -0.391607160600E-03 + v2rhoab = 0.902620715289E-08 + v2rhob2 = -0.391607160600E-03 + + v2rhoasigmaaa = 0.266150650852E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.493771595655E-15 + v2rhobsigmaaa = -0.493771595655E-15 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.266150650852E-13 + + v2sigmaaa2 = -0.270936859522E-22 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.184950665683E-24 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.270936859522E-22 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.171916422170E+00 + vrhoa = -0.713628199022E+00 + vrhob = -0.713628199022E+00 + vsigmaaa = -0.144169056592E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.144169056592E-01 + + v2rhoa2 = -0.251950313836E+01 + v2rhoab = 0.758251991343E-01 + v2rhob2 = -0.251950313836E+01 + + v2rhoasigmaaa = 0.389423518238E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.751679973516E-01 + v2rhobsigmaaa = -0.751679973516E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.389423518238E+00 + + v2sigmaaa2 = -0.840797973397E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.232970614926E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.840797973397E-01 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.543907597540E+01 + vrhoa = -0.206983403049E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.557115573848E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.196415920834E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.157974405718E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.543718939135E+01 + vrhoa = -0.207055597598E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.553036007636E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.195935090970E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.878476728920E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.434938858930E+01 + vrhoa = -0.195569726015E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.142246104866E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.260209510633E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.165108737393E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.260656445211E-01 + vrhoa = -0.365166873568E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.106513084771E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.819172365319E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.173619601252E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.725379115965E+03 + vrhoa = -0.534614963159E+01 + vrhob = -0.529038256257E+01 + vsigmaaa = -0.358005117459E-05 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.380056446753E-05 + + v2rhoa2 = -0.547126219394E-01 + v2rhoab = 0.331851582522E-03 + v2rhob2 = -0.561612374075E-01 + + v2rhoasigmaaa = 0.211812533725E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.550352582102E-08 + v2rhobsigmaaa = -0.558043849973E-08 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.218122282394E-06 + + v2sigmaaa2 = -0.962162060193E-12 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.364084856597E-13 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.962755909353E-12 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.271499130108E+03 + vrhoa = -0.403050062341E+01 + vrhob = -0.391760261739E+01 + vsigmaaa = -0.117891187316E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.131606478805E-04 + + v2rhoa2 = -0.976555990047E-01 + v2rhoab = 0.410901913852E-03 + v2rhob2 = -0.102701021106E+00 + + v2rhoasigmaaa = 0.117376271770E-05 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.296010716633E-07 + v2rhobsigmaaa = -0.311641736390E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.122140816601E-05 + + v2sigmaaa2 = -0.139823022321E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.631643128415E-12 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.132804820251E-10 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.126306410966E+00 + vrhoa = -0.665248513940E+00 + vrhob = -0.494790254792E+00 + vsigmaaa = -0.169820789182E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.444715522815E-01 + + v2rhoa2 = -0.321934092349E+01 + v2rhoab = -0.306214337751E+00 + v2rhob2 = -0.235046602502E+01 + + v2rhoasigmaaa = 0.575272114659E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.619670865786E-02 + v2rhobsigmaaa = -0.465088582248E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.240484241604E+00 + + v2sigmaaa2 = -0.136114020029E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.120567968744E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.494006571666E-01 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.467550215963E-01 + vrhoa = -0.604812590905E+00 + vrhob = -0.413805622597E+00 + vsigmaaa = 0.578789203445E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.240453086688E+00 + + v2rhoa2 = -0.252163647108E+01 + v2rhoab = -0.124967183765E+00 + v2rhob2 = -0.741841255320E+01 + + v2rhoasigmaaa = 0.104875139561E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.850997001294E+00 + v2rhobsigmaaa = -0.101836891441E+01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.124868933343E+02 + + v2sigmaaa2 = -0.140939691804E+02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.289447742971E+01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.900853676292E+00 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.372353595742E+03 + vrhoa = -0.508055573091E+01 + vrhob = -0.504781046793E+01 + vsigmaaa = 0.107154101887E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.107131591854E-04 + + v2rhoa2 = -0.328807830078E-01 + v2rhoab = -0.411751824651E-03 + v2rhob2 = -0.334389244752E-01 + + v2rhoasigmaaa = -0.303373964272E-07 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.231718695007E-07 + v2rhobsigmaaa = -0.228533807090E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.107933923937E-07 + + v2sigmaaa2 = -0.399282165365E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.121680895464E-11 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.430192218415E-10 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.279578389357E+03 + vrhoa = -0.471709650708E+01 + vrhob = -0.471736061868E+01 + vsigmaaa = 0.108895229339E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.109752202727E-04 + + v2rhoa2 = -0.398525328883E-01 + v2rhoab = -0.370354586162E-03 + v2rhob2 = -0.398026080843E-01 + + v2rhoasigmaaa = 0.223838195745E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.429325168784E-07 + v2rhobsigmaaa = -0.427471799530E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.218692512984E-06 + + v2sigmaaa2 = -0.826593898471E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.278005388095E-11 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.831754765126E-10 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.118202281299E+00 + vrhoa = -0.649626721795E+00 + vrhob = -0.550880566949E+00 + vsigmaaa = -0.208103108865E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.422571437775E-01 + + v2rhoa2 = -0.335614626485E+01 + v2rhoab = 0.677450262331E-02 + v2rhob2 = -0.435762103327E+01 + + v2rhoasigmaaa = 0.687584936504E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.712070704012E-01 + v2rhobsigmaaa = -0.113628430335E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.807149241077E+00 + + v2sigmaaa2 = -0.173908645103E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.350767969911E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.730972322203E-01 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.277807919403E-01 + vrhoa = -0.504997712086E+00 + vrhob = -0.359292808905E+00 + vsigmaaa = -0.217551104209E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.279077046902E+00 + + v2rhoa2 = -0.421574010719E+01 + v2rhoab = -0.262905164821E+00 + v2rhob2 = -0.652587072204E+01 + + v2rhoasigmaaa = 0.429705676606E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.819589539779E+00 + v2rhobsigmaaa = -0.199692351190E+01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.867796631002E+01 + + v2sigmaaa2 = -0.139733659282E+02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.498509436820E+01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.118695103645E+02 diff --git a/libxc-2.2.0/testsuite/df_repo/hyb_gga_xc_b3lyp.data b/libxc-2.2.0/testsuite/df_repo/hyb_gga_xc_b3lyp.data new file mode 100644 index 000000000..282cffbcb --- /dev/null +++ b/libxc-2.2.0/testsuite/df_repo/hyb_gga_xc_b3lyp.data @@ -0,0 +1,600 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.323236848314E+01 + vrhoa = -0.125186680903E+01 + vrhob = -0.125186680903E+01 + vsigmaaa = -0.144159896521E-02 + vsigmaab = 0.455761547380E-04 + vsigmabb = -0.144159896521E-02 + + v2rhoa2 = -0.218336878948E+00 + v2rhoab = -0.165375839434E-01 + v2rhob2 = -0.218336878948E+00 + + v2rhoasigmaaa = 0.105592839796E-02 + v2rhoasigmaab = -0.236203506407E-04 + v2rhoasigmabb = 0.657036117021E-04 + v2rhobsigmaaa = 0.657036117021E-04 + v2rhobsigmaab = -0.236203506407E-04 + v2rhobsigmabb = 0.105592839796E-02 + + v2sigmaaa2 = 0.182480573750E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.182480573750E-04 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.323714327026E+01 + vrhoa = -0.125005562910E+01 + vrhob = -0.125005562910E+01 + vsigmaaa = -0.141357814083E-02 + vsigmaab = 0.455761547380E-04 + vsigmabb = -0.141357814083E-02 + + v2rhoa2 = -0.220535209854E+00 + v2rhoab = -0.167224803305E-01 + v2rhob2 = -0.220535209854E+00 + + v2rhoasigmaaa = 0.993868359460E-03 + v2rhoasigmaab = -0.236203506407E-04 + v2rhoasigmabb = 0.657036117021E-04 + v2rhobsigmaaa = 0.657036117021E-04 + v2rhobsigmaab = -0.236203506407E-04 + v2rhobsigmabb = 0.993868359460E-03 + + v2sigmaaa2 = 0.150310955024E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.150310955024E-04 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.284301452788E+01 + vrhoa = -0.116897854637E+01 + vrhob = -0.116897854637E+01 + vsigmaaa = -0.127654157835E-02 + vsigmaab = 0.568120340362E-04 + vsigmabb = -0.127654157835E-02 + + v2rhoa2 = -0.264800968146E+00 + v2rhoab = -0.246962380202E-01 + v2rhob2 = -0.264800968146E+00 + + v2rhoasigmaaa = 0.605149740433E-03 + v2rhoasigmaab = -0.333125831681E-04 + v2rhoasigmabb = 0.899525589269E-04 + v2rhobsigmaaa = 0.899525589269E-04 + v2rhobsigmaab = -0.333125831681E-04 + v2rhobsigmabb = 0.605149740433E-03 + + v2sigmaaa2 = 0.667366853939E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.667366853939E-05 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.734765385895E-01 + vrhoa = -0.471179307798E+00 + vrhob = -0.471179307798E+00 + vsigmaaa = -0.335031909041E-01 + vsigmaab = 0.709874878725E-02 + vsigmabb = -0.335031909041E-01 + + v2rhoa2 = -0.119087356581E+01 + v2rhoab = -0.461994975007E+00 + v2rhob2 = -0.119087356581E+01 + + v2rhoasigmaaa = -0.123500815668E-01 + v2rhoasigmaab = -0.654451937611E-01 + v2rhoasigmabb = 0.868364651756E-01 + v2rhobsigmaaa = 0.868364651756E-01 + v2rhobsigmaab = -0.654451937611E-01 + v2rhobsigmabb = -0.123500815668E-01 + + v2sigmaaa2 = 0.159379207669E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.159379207669E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.329091638490E+05 + vrhoa = -0.121623185279E+02 + vrhob = -0.121623185279E+02 + vsigmaaa = -0.137670025981E-06 + vsigmaab = 0.211226609041E-09 + vsigmabb = -0.137670025981E-06 + + v2rhoa2 = -0.221830902630E-02 + v2rhoab = -0.188590666589E-04 + v2rhob2 = -0.221830902630E-02 + + v2rhoasigmaaa = 0.101015443866E-09 + v2rhoasigmaab = -0.101154717316E-12 + v2rhoasigmabb = 0.880291835026E-12 + v2rhobsigmaaa = 0.880291835026E-12 + v2rhobsigmaab = -0.101154717316E-12 + v2rhobsigmabb = 0.101015443866E-09 + + v2sigmaaa2 = 0.145185185089E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.145185185089E-16 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.329091662150E+05 + vrhoa = -0.121623176525E+02 + vrhob = -0.121623176525E+02 + vsigmaaa = -0.137669901131E-06 + vsigmaab = 0.211226609041E-09 + vsigmabb = -0.137669901131E-06 + + v2rhoa2 = -0.221831014637E-02 + v2rhoab = -0.188590804811E-04 + v2rhob2 = -0.221831014637E-02 + + v2rhoasigmaaa = 0.101015166421E-09 + v2rhoasigmaab = -0.101154717316E-12 + v2rhoasigmabb = 0.880291835026E-12 + v2rhobsigmaaa = 0.880291835026E-12 + v2rhobsigmaab = -0.101154717316E-12 + v2rhobsigmabb = 0.101015166421E-09 + + v2sigmaaa2 = 0.145183686163E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.145183686163E-16 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.291662692953E+05 + vrhoa = -0.113556508147E+02 + vrhob = -0.113556508147E+02 + vsigmaaa = -0.125212508392E-06 + vsigmaab = 0.258807836033E-09 + vsigmabb = -0.125212508392E-06 + + v2rhoa2 = -0.274482776000E-02 + v2rhoab = -0.302896659912E-04 + v2rhob2 = -0.274482776000E-02 + + v2rhoasigmaaa = 0.681575421953E-10 + v2rhoasigmaab = -0.139564478099E-12 + v2rhoasigmabb = 0.120262598780E-11 + v2rhobsigmaaa = 0.120262598780E-11 + v2rhobsigmaab = -0.139564478099E-12 + v2rhobsigmabb = 0.681575421953E-10 + + v2sigmaaa2 = 0.565478173007E-17 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.565478173007E-17 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.281966570096E+00 + vrhoa = -0.675950257463E+00 + vrhob = -0.675950257463E+00 + vsigmaaa = -0.132396547866E-01 + vsigmaab = 0.117685000648E-02 + vsigmabb = -0.132396547866E-01 + + v2rhoa2 = -0.805530438829E+00 + v2rhoab = -0.118106298362E+00 + v2rhob2 = -0.805530438829E+00 + + v2rhoasigmaaa = 0.363141897451E-01 + v2rhoasigmaab = -0.382783053810E-02 + v2rhoasigmabb = 0.670327184932E-02 + v2rhobsigmaaa = 0.670327184932E-02 + v2rhobsigmaab = -0.382783053810E-02 + v2rhobsigmabb = 0.363141897451E-01 + + v2sigmaaa2 = 0.830532973290E-02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.830532973290E-02 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.297394905871E+07 + vrhoa = -0.373790914295E+02 + vrhob = -0.373790914295E+02 + vsigmaaa = -0.151741774296E-08 + vsigmaab = 0.661349905989E-12 + vsigmabb = -0.151741774296E-08 + + v2rhoa2 = -0.233832366784E-03 + v2rhoab = -0.693519389161E-06 + v2rhob2 = -0.233832366784E-03 + + v2rhoasigmaaa = 0.380539524393E-13 + v2rhoasigmaab = -0.105409669788E-16 + v2rhoasigmabb = 0.110312423429E-15 + v2rhobsigmaaa = 0.110312423429E-15 + v2rhobsigmaab = -0.105409669788E-16 + v2rhobsigmabb = 0.380539524393E-13 + + v2sigmaaa2 = 0.193156282710E-22 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.193156282710E-22 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.262386652992E+07 + vrhoa = -0.348927955181E+02 + vrhob = -0.348927955181E+02 + vsigmaaa = -0.139622416354E-08 + vsigmaab = 0.810227461136E-12 + vsigmabb = -0.139622416354E-08 + + v2rhoa2 = -0.289681929857E-03 + v2rhoab = -0.109149292582E-05 + v2rhob2 = -0.289681929857E-03 + + v2rhoasigmaaa = 0.265777258573E-13 + v2rhoasigmaab = -0.145695984127E-16 + v2rhoasigmabb = 0.151867150707E-15 + v2rhobsigmaaa = 0.151867150707E-15 + v2rhobsigmaab = -0.145695984127E-16 + v2rhobsigmabb = 0.265777258573E-13 + + v2sigmaaa2 = 0.781950966986E-23 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.781950966986E-23 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.141317331691E+00 + vrhoa = -0.560497981293E+00 + vrhob = -0.560497981293E+00 + vsigmaaa = -0.221566363225E-01 + vsigmaab = 0.295820080262E-02 + vsigmabb = -0.221566363225E-01 + + v2rhoa2 = -0.110705643629E+01 + v2rhoab = -0.230182661300E+00 + v2rhob2 = -0.110705643629E+01 + + v2rhoasigmaaa = 0.561817966912E-01 + v2rhoasigmaab = -0.163609821297E-01 + v2rhoasigmabb = 0.248982600284E-01 + v2rhobsigmaaa = 0.248982600284E-01 + v2rhobsigmaab = -0.163609821297E-01 + v2rhobsigmabb = 0.561817966912E-01 + + v2sigmaaa2 = 0.393918647938E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.393918647938E-01 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.399892263115E+01 + vrhoa = -0.152022926953E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.569059565191E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.143793255671E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.101564081636E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.400085169220E+01 + vrhoa = -0.151949867012E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.565718309854E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.144275565036E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.951896165997E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.337825554312E+01 + vrhoa = -0.140181476241E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.542857473158E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.183150035577E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.454347701768E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.208918715508E-01 + vrhoa = -0.356452444497E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.563614622931E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.248689706230E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.497289960388E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.597657791792E+03 + vrhoa = -0.410849174687E+01 + vrhob = -0.408944405306E+01 + vsigmaaa = -0.480994006130E-05 + vsigmaab = 0.470705833739E-07 + vsigmabb = -0.483282909871E-05 + + v2rhoa2 = -0.199799370665E-01 + v2rhoab = -0.975401299409E-03 + v2rhob2 = -0.200660427641E-01 + + v2rhoasigmaaa = 0.260989083811E-07 + v2rhoasigmaab = -0.417456492670E-09 + v2rhoasigmabb = 0.304958928738E-08 + v2rhobsigmaaa = 0.311332607385E-08 + v2rhobsigmaab = -0.605117741230E-09 + v2rhobsigmabb = 0.258390382546E-07 + + v2sigmaaa2 = 0.305802669194E-12 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.311732004758E-12 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.224706205597E+03 + vrhoa = -0.320409850337E+01 + vrhob = -0.317368254169E+01 + vsigmaaa = -0.121714301795E-04 + vsigmaab = 0.178441892970E-06 + vsigmabb = -0.122078926901E-04 + + v2rhoa2 = -0.317800393334E-01 + v2rhoab = -0.225886606202E-02 + v2rhob2 = -0.318134299631E-01 + + v2rhoasigmaaa = 0.112752322775E-06 + v2rhoasigmaab = -0.271686374867E-08 + v2rhoasigmabb = 0.213816335145E-07 + v2rhobsigmaaa = 0.223467723370E-07 + v2rhobsigmaab = -0.555234667672E-08 + v2rhobsigmabb = 0.106009545608E-06 + + v2sigmaaa2 = 0.504534758146E-11 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.517448857581E-11 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.102364834001E+00 + vrhoa = -0.520539483697E+00 + vrhob = -0.505870943988E+00 + vsigmaaa = -0.258581782652E-01 + vsigmaab = 0.549392678215E-02 + vsigmabb = -0.197777936291E-01 + + v2rhoa2 = -0.128917089285E+01 + v2rhoab = -0.313272349310E+00 + v2rhob2 = -0.341042522919E+00 + + v2rhoasigmaaa = 0.523813395958E-01 + v2rhoasigmaab = -0.350608937430E-02 + v2rhoasigmabb = 0.294447027718E-01 + v2rhobsigmaaa = 0.593594411251E-01 + v2rhobsigmaab = -0.879513086335E-01 + v2rhobsigmabb = -0.101203673067E+00 + + v2sigmaaa2 = 0.534218945785E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.530748327798E-01 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.370908948340E-01 + vrhoa = -0.451012905270E+00 + vrhob = -0.373868193934E+00 + vsigmaaa = -0.833833556166E-01 + vsigmaab = 0.302842221212E-01 + vsigmabb = -0.144390664966E+00 + + v2rhoa2 = -0.176591577637E+01 + v2rhoab = -0.519622735771E+00 + v2rhob2 = -0.244487009873E+01 + + v2rhoasigmaaa = 0.104993242174E+01 + v2rhoasigmaab = -0.393482201769E-01 + v2rhoasigmabb = -0.128113035972E+00 + v2rhobsigmaaa = 0.276123718282E+00 + v2rhobsigmaab = -0.131376004203E+01 + v2rhobsigmabb = 0.176232793556E+01 + + v2sigmaaa2 = 0.175699045569E+01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.152026875550E+02 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.281521772558E+03 + vrhoa = -0.369507027847E+01 + vrhob = -0.367023184597E+01 + vsigmaaa = -0.145690716360E-04 + vsigmaab = 0.114039548301E-06 + vsigmabb = -0.148744723017E-04 + + v2rhoa2 = -0.253527345932E-01 + v2rhoab = -0.706072438256E-03 + v2rhob2 = -0.257381602738E-01 + + v2rhoasigmaaa = 0.311415552822E-06 + v2rhoasigmaab = -0.147803254770E-08 + v2rhoasigmabb = 0.111574735738E-07 + v2rhobsigmaaa = 0.115460511919E-07 + v2rhobsigmaab = -0.262052086299E-08 + v2rhobsigmabb = 0.322180557867E-06 + + v2sigmaaa2 = 0.110200710038E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.116700363054E-10 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.213622104931E+03 + vrhoa = -0.341660378816E+01 + vrhob = -0.341704385893E+01 + vsigmaaa = -0.186681440156E-04 + vsigmaab = 0.166064527957E-06 + vsigmabb = -0.186895846674E-04 + + v2rhoa2 = -0.300897507679E-01 + v2rhoab = -0.923280211534E-03 + v2rhob2 = -0.300737760767E-01 + + v2rhoasigmaaa = 0.459163999447E-06 + v2rhoasigmaab = -0.368764035839E-08 + v2rhoasigmabb = 0.198031853578E-07 + v2rhobsigmaaa = 0.198031853578E-07 + v2rhobsigmaab = -0.368764035839E-08 + v2rhobsigmabb = 0.460585502466E-06 + + v2sigmaaa2 = 0.213857448925E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.214957808672E-10 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.973549787919E-01 + vrhoa = -0.513422548189E+00 + vrhob = -0.498404166041E+00 + vsigmaaa = -0.279927749358E-01 + vsigmaab = 0.519372784598E-02 + vsigmabb = -0.257633827920E-01 + + v2rhoa2 = -0.127015732306E+01 + v2rhoab = -0.343297185496E+00 + v2rhob2 = -0.957526903923E+00 + + v2rhoasigmaaa = 0.573950472502E-01 + v2rhoasigmaab = -0.147046387568E-01 + v2rhoasigmabb = 0.406497802386E-01 + v2rhobsigmaaa = 0.593213054050E-01 + v2rhobsigmaab = -0.667542710588E-01 + v2rhobsigmabb = -0.258248118537E-01 + + v2sigmaaa2 = 0.742126486309E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.832697038526E-01 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.224618905609E-01 + vrhoa = -0.383393770852E+00 + vrhob = -0.343323903582E+00 + vsigmaaa = -0.125297829477E+00 + vsigmaab = 0.420751297066E-01 + vsigmabb = -0.137996683570E+00 + + v2rhoa2 = -0.256288375723E+01 + v2rhoab = -0.665869909022E+00 + v2rhob2 = -0.188075111055E+01 + + v2rhoasigmaaa = 0.158911884007E+01 + v2rhoasigmaab = -0.437905384553E-01 + v2rhoasigmabb = -0.204783018941E-02 + v2rhobsigmaaa = 0.800379663970E+00 + v2rhobsigmaab = -0.237012133502E+01 + v2rhobsigmabb = -0.529596660601E+00 + + v2sigmaaa2 = 0.551118679586E+01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.178736912276E+02 diff --git a/libxc-2.2.0/testsuite/df_repo/lda_c_pw.data b/libxc-2.2.0/testsuite/df_repo/lda_c_pw.data new file mode 100644 index 000000000..298271556 --- /dev/null +++ b/libxc-2.2.0/testsuite/df_repo/lda_c_pw.data @@ -0,0 +1,601 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.277344423214E+00 + vrhoa = -0.902549628505E-01 + vrhob = -0.902549628505E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.129726626281E-01 + v2rhoab = -0.182704041173E-01 + v2rhob2 = 0.129726626281E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.277344423214E+00 + vrhoa = -0.902549628505E-01 + vrhob = -0.902549628505E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.129726626281E-01 + v2rhoab = -0.182704041173E-01 + v2rhob2 = 0.129726626281E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.241462898291E+00 + vrhoa = -0.891299404380E-01 + vrhob = -0.891299404380E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.145059415592E-01 + v2rhoab = -0.204863569452E-01 + v2rhob2 = 0.145059415592E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.101113671262E-01 + vrhoa = -0.650048339988E-01 + vrhob = -0.650048339988E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.175751480118E+00 + v2rhoab = -0.266529931758E+00 + v2rhob2 = 0.175751480118E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.531561314386E+03 + vrhoa = -0.157671673203E+00 + vrhob = -0.157671673203E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.222159132351E-04 + v2rhoab = -0.278289909979E-04 + v2rhob2 = 0.222159132351E-04 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.531561314386E+03 + vrhoa = -0.157671673203E+00 + vrhob = -0.157671673203E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.222159132351E-04 + v2rhoab = -0.278289909979E-04 + v2rhob2 = 0.222159132351E-04 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.468725918030E+03 + vrhoa = -0.156482120947E+00 + vrhob = -0.156482120947E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.247928300968E-04 + v2rhoab = -0.311024951454E-04 + v2rhob2 = 0.247928300968E-04 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.342588451589E-01 + vrhoa = -0.738873790706E-01 + vrhob = -0.738873790706E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.683852603450E-01 + v2rhoab = -0.100702257929E+00 + v2rhob2 = 0.683852603450E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.192841201155E+05 + vrhoa = -0.192145304184E+00 + vrhob = -0.192145304184E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.930082885891E-06 + v2rhoab = -0.112363509037E-05 + v2rhob2 = 0.930082885891E-06 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.169856224473E+05 + vrhoa = -0.190913041999E+00 + vrhob = -0.190913041999E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.104172392988E-05 + v2rhoab = -0.125991007708E-05 + v2rhob2 = 0.104172392988E-05 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.184621198143E-01 + vrhoa = -0.693213765453E-01 + vrhob = -0.693213765453E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.110605987361E+00 + v2rhoab = -0.165258291769E+00 + v2rhob2 = 0.110605987361E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.149928973101E+00 + vrhoa = -0.472554998259E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.130588545114E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.149928973101E+00 + vrhoa = -0.472554998259E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.130588545114E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.126472591534E+00 + vrhoa = -0.465524916146E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.151678898556E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.152273975281E-02 + vrhoa = -0.298637012243E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.663743228871E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.191023440920E+02 + vrhoa = -0.126372499013E+00 + vrhob = -0.127271129487E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.384120963008E-03 + v2rhoab = -0.509412484677E-03 + v2rhob2 = 0.394340080438E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.847142825874E+01 + vrhoa = -0.118619938062E+00 + vrhob = -0.120418335387E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.752030427237E-03 + v2rhoab = -0.102491320671E-02 + v2rhob2 = 0.795162900251E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.132375738405E-01 + vrhoa = -0.611512086125E-01 + vrhob = -0.736712016385E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.986052917391E-01 + v2rhoab = -0.213038819480E+00 + v2rhob2 = 0.198254114292E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.549158518524E-02 + vrhoa = -0.477671629140E-01 + vrhob = -0.812619026651E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.871540234631E-01 + v2rhoab = -0.417984495935E+00 + v2rhob2 = 0.718548334405E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.111287597560E+02 + vrhoa = -0.121243415280E+00 + vrhob = -0.122669154804E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.601411544714E-03 + v2rhoab = -0.811067153859E-03 + v2rhob2 = 0.628041069015E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.883097806026E+01 + vrhoa = -0.119884073877E+00 + vrhob = -0.119884073877E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.746837382094E-03 + v2rhoab = -0.989140543185E-03 + v2rhob2 = 0.746837382094E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.129760671683E-01 + vrhoa = -0.633067741771E-01 + vrhob = -0.705807768412E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.117614926995E+00 + v2rhoab = -0.217903575599E+00 + v2rhob2 = 0.176334524485E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.359308856987E-02 + vrhoa = -0.484278994334E-01 + vrhob = -0.709976526103E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.169554677091E+00 + v2rhoab = -0.581862691979E+00 + v2rhob2 = 0.746101923239E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + diff --git a/libxc-2.2.0/testsuite/df_repo/lda_c_pz.data b/libxc-2.2.0/testsuite/df_repo/lda_c_pz.data new file mode 100644 index 000000000..d5a384459 --- /dev/null +++ b/libxc-2.2.0/testsuite/df_repo/lda_c_pz.data @@ -0,0 +1,600 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.275576598637E+00 + vrhoa = -0.898549308454E-01 + vrhob = -0.898549308454E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.164699121751E-01 + v2rhoab = -0.219008166659E-01 + v2rhob2 = 0.164699121751E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.275576598637E+00 + vrhoa = -0.898549308454E-01 + vrhob = -0.898549308454E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.164699121751E-01 + v2rhoab = -0.219008166659E-01 + v2rhob2 = 0.164699121751E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.239860597689E+00 + vrhoa = -0.887018679444E-01 + vrhob = -0.887018679444E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.183759264066E-01 + v2rhoab = -0.245040566492E-01 + v2rhob2 = 0.183759264066E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.101115878931E-01 + vrhoa = -0.645883881441E-01 + vrhob = -0.645883881441E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.220271586641E+00 + v2rhoab = -0.302589888112E+00 + v2rhob2 = 0.220271586641E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.534484419511E+03 + vrhoa = -0.158618496504E+00 + vrhob = -0.158618496504E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.310826615168E-04 + v2rhoab = -0.367568997987E-04 + v2rhob2 = 0.310826615168E-04 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.534484419511E+03 + vrhoa = -0.158618496504E+00 + vrhob = -0.158618496504E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.310826615168E-04 + v2rhoab = -0.367568997987E-04 + v2rhob2 = 0.310826615168E-04 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.471272856619E+03 + vrhoa = -0.157415820108E+00 + vrhob = -0.157415820108E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.346518058416E-04 + v2rhoab = -0.410319530618E-04 + v2rhob2 = 0.346518058416E-04 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.340180801304E-01 + vrhoa = -0.731839837331E-01 + vrhob = -0.731839837331E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.844874748431E-01 + v2rhoab = -0.117027949768E+00 + v2rhob2 = 0.844874748431E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.194053922825E+05 + vrhoa = -0.193356581751E+00 + vrhob = -0.193356581751E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.133301546780E-05 + v2rhoab = -0.152755392377E-05 + v2rhob2 = 0.133301546780E-05 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.170923965495E+05 + vrhoa = -0.192117951697E+00 + vrhob = -0.192117951697E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.149198951158E-05 + v2rhoab = -0.171131903398E-05 + v2rhob2 = 0.149198951158E-05 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.183776320888E-01 + vrhoa = -0.686130203036E-01 + vrhob = -0.686130203036E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.136277830478E+00 + v2rhoab = -0.190627548224E+00 + v2rhob2 = 0.136277830478E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.150623736304E+00 + vrhoa = -0.475749572683E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.134925763779E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.150623736304E+00 + vrhoa = -0.475749572683E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.134925763779E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.127013319259E+00 + vrhoa = -0.468485924747E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.156717879356E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.153351792183E-02 + vrhoa = -0.300428464030E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.653711881171E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.191466615417E+02 + vrhoa = -0.126718515579E+00 + vrhob = -0.127893872437E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.519837169783E-03 + v2rhoab = -0.648951795770E-03 + v2rhob2 = 0.533005724246E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.847966726388E+01 + vrhoa = -0.118689256817E+00 + vrhob = -0.121016447321E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.100782705799E-02 + v2rhoab = -0.129204915717E-02 + v2rhob2 = 0.106274642401E-02 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.131923893912E-01 + vrhoa = -0.594644299138E-01 + vrhob = -0.742843103640E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.127234753062E+00 + v2rhoab = -0.241546731589E+00 + v2rhob2 = 0.244260283475E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.544482721650E-02 + vrhoa = -0.454638876967E-01 + vrhob = -0.841880179853E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.109439665854E+00 + v2rhoab = -0.444292481861E+00 + v2rhob2 = 0.783241629952E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.111449390609E+02 + vrhoa = -0.121416128339E+00 + vrhob = -0.123267881151E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.808656486686E-03 + v2rhoab = -0.102614314649E-02 + v2rhob2 = 0.842702808700E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.884035822245E+01 + vrhoa = -0.120224414500E+00 + vrhob = -0.120224414500E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.100004983178E-02 + v2rhoab = -0.124763782935E-02 + v2rhob2 = 0.100004983178E-02 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.129473179843E-01 + vrhoa = -0.620700119522E-01 + vrhob = -0.706816901297E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.150018424149E+00 + v2rhoab = -0.247369456267E+00 + v2rhob2 = 0.219063831018E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.358997585489E-02 + vrhoa = -0.468661877874E-01 + vrhob = -0.731782746282E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.218577885080E+00 + v2rhoab = -0.646538277526E+00 + v2rhob2 = 0.867717298846E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 diff --git a/libxc-2.2.0/testsuite/df_repo/lda_c_vwn.data b/libxc-2.2.0/testsuite/df_repo/lda_c_vwn.data new file mode 100644 index 000000000..d9bd0c8a0 --- /dev/null +++ b/libxc-2.2.0/testsuite/df_repo/lda_c_vwn.data @@ -0,0 +1,600 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.278978177367E+00 + vrhoa = -0.907896301530E-01 + vrhob = -0.907896301530E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.129443214985E-01 + v2rhoab = -0.182559901422E-01 + v2rhob2 = 0.129443214985E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.278978177367E+00 + vrhoa = -0.907896301530E-01 + vrhob = -0.907896301530E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.129443214985E-01 + v2rhoab = -0.182559901422E-01 + v2rhob2 = 0.129443214985E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.242883397986E+00 + vrhoa = -0.896613951966E-01 + vrhob = -0.896613951966E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.144649744464E-01 + v2rhoab = -0.204638346911E-01 + v2rhob2 = 0.144649744464E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.101483720780E-01 + vrhoa = -0.653289336535E-01 + vrhob = -0.653289336535E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.171179303519E+00 + v2rhoab = -0.263237442473E+00 + v2rhob2 = 0.171179303519E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.532741477023E+03 + vrhoa = -0.157944671704E+00 + vrhob = -0.157944671704E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.223669588268E-04 + v2rhoab = -0.279504750065E-04 + v2rhob2 = 0.223669588268E-04 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.532741477023E+03 + vrhoa = -0.157944671704E+00 + vrhob = -0.157944671704E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.223669588268E-04 + v2rhoab = -0.279504750065E-04 + v2rhob2 = 0.223669588268E-04 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.469795648279E+03 + vrhoa = -0.156761418492E+00 + vrhob = -0.156761418492E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.249624818738E-04 + v2rhoab = -0.312385564000E-04 + v2rhob2 = 0.249624818738E-04 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.344300981310E-01 + vrhoa = -0.743196778205E-01 + vrhob = -0.743196778205E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.673517043262E-01 + v2rhoab = -0.999958453856E-01 + v2rhob2 = 0.673517043262E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.193016440590E+05 + vrhoa = -0.192271893744E+00 + vrhob = -0.192271893744E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.934975367062E-06 + v2rhoab = -0.112791439004E-05 + v2rhob2 = 0.934975367062E-06 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.170016041806E+05 + vrhoa = -0.191043581788E+00 + vrhob = -0.191043581788E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.104726097228E-05 + v2rhoab = -0.126473945017E-05 + v2rhob2 = 0.104726097228E-05 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.185432270230E-01 + vrhoa = -0.697024933328E-01 + vrhob = -0.697024933328E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.108356325631E+00 + v2rhoab = -0.163679368941E+00 + v2rhob2 = 0.108356325631E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.149673920800E+00 + vrhoa = -0.471789714951E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.130468710291E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.149673920800E+00 + vrhoa = -0.471789714951E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.130468710291E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.126255646553E+00 + vrhoa = -0.464766057364E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.151540949651E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.151940115037E-02 + vrhoa = -0.297993118612E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.663179036789E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.191815088538E+02 + vrhoa = -0.126816376070E+00 + vrhob = -0.127719732599E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.386783435451E-03 + v2rhoab = -0.511451913589E-03 + v2rhob2 = 0.397050991054E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.851077910672E+01 + vrhoa = -0.119099058995E+00 + vrhob = -0.120906044904E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.756836181702E-03 + v2rhoab = -0.102861281830E-02 + v2rhob2 = 0.800136175083E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.132928938310E-01 + vrhoa = -0.615913447654E-01 + vrhob = -0.739125478228E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.963811005993E-01 + v2rhoab = -0.210790984367E+00 + v2rhob2 = 0.193655360428E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.551636081757E-02 + vrhoa = -0.482590171567E-01 + vrhob = -0.811494055217E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.864399166736E-01 + v2rhoab = -0.417632287561E+00 + v2rhob2 = 0.710228207528E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.111786110384E+02 + vrhoa = -0.121711427226E+00 + vrhob = -0.123144247973E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.605386382334E-03 + v2rhoab = -0.814117737252E-03 + v2rhob2 = 0.632128050135E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.887177858837E+01 + vrhoa = -0.120365709995E+00 + vrhob = -0.120365709995E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.751587360250E-03 + v2rhoab = -0.992735036010E-03 + v2rhob2 = 0.751587360250E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.130284832590E-01 + vrhoa = -0.637104594188E-01 + vrhob = -0.708674029459E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.114871866539E+00 + v2rhoab = -0.215499991137E+00 + v2rhob2 = 0.172160006882E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.360439923610E-02 + vrhoa = -0.488659901421E-01 + vrhob = -0.708954619404E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.164372114971E+00 + v2rhoab = -0.574640089589E+00 + v2rhob2 = 0.724506769540E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 diff --git a/libxc-2.2.0/testsuite/df_repo/lda_c_vwn_rpa.data b/libxc-2.2.0/testsuite/df_repo/lda_c_vwn_rpa.data new file mode 100644 index 000000000..8cd9b7f76 --- /dev/null +++ b/libxc-2.2.0/testsuite/df_repo/lda_c_vwn_rpa.data @@ -0,0 +1,600 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.349971804373E+00 + vrhoa = -0.112182056089E+00 + vrhob = -0.112182056089E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.125073604380E-01 + v2rhoab = -0.180852441120E-01 + v2rhob2 = 0.125073604380E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.349971804373E+00 + vrhoa = -0.112182056089E+00 + vrhob = -0.112182056089E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.125073604380E-01 + v2rhoab = -0.180852441120E-01 + v2rhob2 = 0.125073604380E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.305331202145E+00 + vrhoa = -0.110996751347E+00 + vrhob = -0.110996751347E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.139658271595E-01 + v2rhoab = -0.202709357125E-01 + v2rhob2 = 0.139658271595E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.135062242445E-01 + vrhoa = -0.851221079723E-01 + vrhob = -0.851221079723E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.161243063381E+00 + v2rhoab = -0.260529910537E+00 + v2rhob2 = 0.161243063381E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.616414180105E+03 + vrhoa = -0.181382595551E+00 + vrhob = -0.181382595551E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.221260868588E-04 + v2rhoab = -0.277997242116E-04 + v2rhob2 = 0.221260868588E-04 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.616414180105E+03 + vrhoa = -0.181382595551E+00 + vrhob = -0.181382595551E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.221260868588E-04 + v2rhoab = -0.277997242116E-04 + v2rhob2 = 0.221260868588E-04 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.544096954988E+03 + vrhoa = -0.180180028059E+00 + vrhob = -0.180180028059E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.246887796092E-04 + v2rhoab = -0.310684502489E-04 + v2rhob2 = 0.246887796092E-04 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.447303809292E-01 + vrhoa = -0.947616225987E-01 + vrhob = -0.947616225987E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.641645280793E-01 + v2rhoab = -0.989737282427E-01 + v2rhob2 = 0.641645280793E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.218176486145E+05 + vrhoa = -0.216110716113E+00 + vrhob = -0.216110716113E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.928781952796E-06 + v2rhoab = -0.112325680418E-05 + v2rhob2 = 0.928781952796E-06 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.192316008832E+05 + vrhoa = -0.214872492244E+00 + vrhob = -0.214872492244E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.104021134253E-05 + v2rhoab = -0.125946873167E-05 + v2rhob2 = 0.104021134253E-05 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.243778573127E-01 + vrhoa = -0.898249491466E-01 + vrhob = -0.898249491466E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.102674048027E+00 + v2rhoab = -0.161991045812E+00 + v2rhob2 = 0.102674048027E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.226572455226E+00 + vrhoa = -0.696300107524E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.141835441525E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.226572455226E+00 + vrhoa = -0.696300107524E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.141835441525E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.191943741044E+00 + vrhoa = -0.688654324023E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.165186470178E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.263502530841E-02 + vrhoa = -0.499022442746E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.795426744938E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.228426570385E+02 + vrhoa = -0.149597421494E+00 + vrhob = -0.150490334370E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.379966004438E-03 + v2rhoab = -0.507893349810E-03 + v2rhob2 = 0.390097953941E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.102211380123E+02 + vrhoa = -0.141671472141E+00 + vrhob = -0.143455382380E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.741686147163E-03 + v2rhoab = -0.102100217702E-02 + v2rhob2 = 0.784353256853E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.176275882873E-01 + vrhoa = -0.816985545468E-01 + vrhob = -0.936725006686E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.900615404426E-01 + v2rhoab = -0.208635792884E+00 + v2rhob2 = 0.184171240319E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.756937583935E-02 + vrhoa = -0.681479546460E-01 + vrhob = -0.999798510193E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.755043006977E-01 + v2rhoab = -0.411777663200E+00 + v2rhob2 = 0.674042059170E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.133861697298E+02 + vrhoa = -0.144355807714E+00 + vrhob = -0.145770933057E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.593780503248E-03 + v2rhoab = -0.808216427806E-03 + v2rhob2 = 0.620144399044E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.106498319979E+02 + vrhoa = -0.142938186954E+00 + vrhob = -0.142938186954E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.736748088158E-03 + v2rhoab = -0.985412092064E-03 + v2rhob2 = 0.736748088158E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.172614567022E-01 + vrhoa = -0.837402607886E-01 + vrhob = -0.906950168735E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.107869454021E+00 + v2rhoab = -0.213289389793E+00 + v2rhob2 = 0.163291946501E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.495307468553E-02 + vrhoa = -0.683765949187E-01 + vrhob = -0.896782469545E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.146529818145E+00 + v2rhoab = -0.568495409612E+00 + v2rhob2 = 0.684785645919E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 diff --git a/libxc-2.2.0/testsuite/df_repo/lda_x.data b/libxc-2.2.0/testsuite/df_repo/lda_x.data new file mode 100644 index 000000000..7eca198dc --- /dev/null +++ b/libxc-2.2.0/testsuite/df_repo/lda_x.data @@ -0,0 +1,600 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.377592720836E+01 + vrhoa = -0.148075576798E+01 + vrhob = -0.148075576798E+01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.290344268232E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.290344268232E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.377592720836E+01 + vrhoa = -0.148075576798E+01 + vrhob = -0.148075576798E+01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.290344268232E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.290344268232E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.319555819038E+01 + vrhoa = -0.142024808461E+01 + vrhob = -0.142024808461E+01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.315610685470E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.315610685470E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.728453690414E-01 + vrhoa = -0.551858856374E+00 + vrhob = -0.551858856374E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.209037445596E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.209037445596E+01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.407494475320E+05 + vrhoa = -0.150923879748E+02 + vrhob = -0.150923879748E+02 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.279488666200E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.279488666200E-02 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.407494475320E+05 + vrhoa = -0.150923879748E+02 + vrhob = -0.150923879748E+02 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.279488666200E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.279488666200E-02 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.348271841145E+05 + vrhoa = -0.145113267144E+02 + vrhob = -0.145113267144E+02 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.302319306550E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.302319306550E-02 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.308832394647E+00 + vrhoa = -0.791877934993E+00 + vrhob = -0.791877934993E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.101522812179E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.101522812179E+01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.370503980143E+07 + vrhoa = -0.466042742318E+02 + vrhob = -0.466042742318E+02 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.293108642967E-03 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.293108642967E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.315661921284E+07 + vrhoa = -0.447747406077E+02 + vrhob = -0.447747406077E+02 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.317551351828E-03 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.317551351828E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.148324672136E+00 + vrhoa = -0.659220765051E+00 + vrhob = -0.659220765051E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.146493503345E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.146493503345E+01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.494484233083E+01 + vrhoa = -0.188374945936E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.179404710416E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.494484233083E+01 + vrhoa = -0.188374945936E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.179404710416E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.402615103023E+01 + vrhoa = -0.178940045788E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.198822273098E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.208913119508E-01 + vrhoa = -0.480260044845E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.276011520026E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.657615683804E+03 + vrhoa = -0.539020244480E+01 + vrhob = -0.536820137364E+01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.219113920520E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.220913636775E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.241948147838E+03 + vrhoa = -0.420747936684E+01 + vrhob = -0.417120618800E+01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.359613621097E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.365895279649E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.101616142698E+00 + vrhoa = -0.628513933519E+00 + vrhob = -0.566119777958E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.161157418851E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.198638518582E+01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.400731073431E-01 + vrhoa = -0.530109182127E+00 + vrhob = -0.389751405963E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.226542385525E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.419087533293E+01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.338253135027E+03 + vrhoa = -0.457078149734E+01 + vrhob = -0.454010418713E+01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.304718766489E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.308850624975E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.254588260307E+03 + vrhoa = -0.424313767179E+01 + vrhob = -0.424313767179E+01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.353594805982E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.353594805982E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.982681500273E-01 + vrhoa = -0.611966348389E+00 + vrhob = -0.575882382297E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.169990652330E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.191960794099E+01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.230346081831E-01 + vrhoa = -0.450900660715E+00 + vrhob = -0.362783167860E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.313125458830E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.483710890480E+01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 diff --git a/libxc-2.2.0/testsuite/input/BrOH b/libxc-2.2.0/testsuite/input/BrOH new file mode 100644 index 000000000..89e9cfa93 --- /dev/null +++ b/libxc-2.2.0/testsuite/input/BrOH @@ -0,0 +1,91 @@ +90 + 9.6658608063855554e+03 9.6658608063855554e+03 7.1577283827077576e+11 7.1577283827077576e+11 7.1577283827077576e+11 -9.7009903695326671e+07 -9.7009903695326671e+07 9.8915460978334788e+06 9.8915460978334788e+06 + 9.6659311931826614e+03 9.6659311931826614e+03 7.1576824422897888e+11 7.1576824422897888e+11 7.1576824422897888e+11 -9.7011842898747653e+07 -9.7011842898747653e+07 9.8913993254544120e+06 9.8913993254544120e+06 + 9.6662970468709755e+03 9.6662970468709755e+03 7.1578472623049719e+11 7.1578472623049719e+11 7.1578472623049719e+11 -9.7020526277917609e+07 -9.7020526277917609e+07 9.8908576140609998e+06 9.8908576140609998e+06 + 9.6651434152040747e+03 9.6651434152040747e+03 7.1585919884965015e+11 7.1585919884965015e+11 7.1585919884965015e+11 -9.6988859076082855e+07 -9.6988859076082855e+07 9.8932312503201403e+06 9.8932312503201403e+06 + 9.6658974926453684e+03 9.6658974926453684e+03 7.1577010645911230e+11 7.1577010645911230e+11 7.1577010645911230e+11 -9.7010925799707815e+07 -9.7010925799707815e+07 9.8914681026772466e+06 9.8914681026772466e+06 + 9.6658974926453684e+03 9.6658974926453684e+03 7.1577010645911230e+11 7.1577010645911230e+11 7.1577010645911230e+11 -9.7010925799707815e+07 -9.7010925799707815e+07 9.8914681026772466e+06 9.8914681026772466e+06 + 4.1710569152961114e+01 4.1710569152961114e+01 4.8865216345087456e+05 4.8865216345087456e+05 4.8865216345087456e+05 6.1552642691308065e+03 6.1552642691308065e+03 3.3242672572752435e+03 3.3242672572752435e+03 + 4.1710831767166155e+01 4.1710831767166155e+01 4.8858004250468407e+05 4.8858004250468407e+05 4.8858004250468407e+05 6.1522482600506046e+03 6.1522482600506046e+03 3.3235356879671099e+03 3.3235356879671099e+03 + 4.1723202409221692e+01 4.1723202409221692e+01 4.8675950874266319e+05 4.8675950874266319e+05 4.8675950874266319e+05 6.0622773971125371e+03 6.0622773971125371e+03 3.3021807832066229e+03 3.3021807832066229e+03 + 4.1728413532845018e+01 4.1728413532845018e+01 4.9072843837001710e+05 4.9072843837001710e+05 4.9072843837001710e+05 6.0983606853539050e+03 6.0983606853539050e+03 3.3117599335036975e+03 3.3117599335036975e+03 + 4.1711237273600005e+01 4.1711237273600005e+01 4.8863172120625322e+05 4.8863172120625322e+05 4.8863172120625322e+05 6.1545275605454408e+03 6.1545275605454408e+03 3.3241432254559058e+03 3.3241432254559058e+03 + 4.1711237273600005e+01 4.1711237273600005e+01 4.8863172120625322e+05 4.8863172120625322e+05 4.8863172120625322e+05 6.1545275605454408e+03 6.1545275605454408e+03 3.3241432254559058e+03 3.3241432254559058e+03 + 2.9378362379928508e-01 2.9378362379928508e-01 1.6195421185107528e+00 1.6195421185107528e+00 1.6195421185107528e+00 6.6095642965065764e+00 6.6095642965065764e+00 1.8856971665121391e+00 1.8856971665121391e+00 + 2.9287984651360127e-01 2.9287984651360127e-01 1.6250844596740488e+00 1.6250844596740488e+00 1.6250844596740488e+00 6.6286734009411257e+00 6.6286734009411257e+00 1.8868177843151377e+00 1.8868177843151377e+00 + 2.7009780749125972e-01 2.7009780749125972e-01 1.7811458073862798e+00 1.7811458073862798e+00 1.7811458073862798e+00 7.1017382980458876e+00 7.1017382980458876e+00 1.9108226873096568e+00 1.9108226873096568e+00 + 2.7652758445160563e-01 2.7652758445160563e-01 1.8663767839731455e+00 1.8663767839731455e+00 1.8663767839731455e+00 6.7852784620444258e+00 6.7852784620444258e+00 1.8616801281000235e+00 1.8616801281000235e+00 + 2.9345377706681836e-01 2.9345377706681836e-01 1.6214815886910519e+00 1.6214815886910519e+00 1.6214815886910519e+00 6.6151475435842952e+00 6.6151475435842952e+00 1.8859135944159964e+00 1.8859135944159964e+00 + 2.9345377706681836e-01 2.9345377706681836e-01 1.6214815886910519e+00 1.6214815886910519e+00 1.6214815886910519e+00 6.6151475435842952e+00 6.6151475435842952e+00 1.8859135944159964e+00 1.8859135944159964e+00 + 6.0148524654617527e-03 6.0148524654617527e-03 1.4486830324853770e-04 1.4486830324853770e-04 1.4486830324853770e-04 1.4890698889581933e-02 1.4890698889581933e-02 3.4188220971414487e-03 3.4188220971414487e-03 + 6.2583303634490238e-03 6.2583303634490238e-03 1.5078186348416026e-04 1.5078186348416026e-04 1.5078186348416026e-04 1.4874155554639215e-02 1.4874155554639215e-02 3.4811572318960513e-03 3.4811572318960513e-03 + 5.0575290024567110e-01 5.0575290024567110e-01 4.9092402452804773e+00 4.9092402452804773e+00 4.9092402452804773e+00 2.5036283302592764e+01 2.5036283302592764e+01 6.9758287744490906e+00 6.9758287744490906e+00 + 2.2921228282562359e-03 2.2921228282562359e-03 2.8586486787312273e-05 2.8586486787312273e-05 2.8586486787312273e-05 1.1341026683012628e-02 1.1341026683012628e-02 2.3072645210211961e-03 2.3072645210211961e-03 + 6.0872107347802063e-03 6.0872107347802063e-03 1.4651677422547376e-04 1.4651677422547376e-04 1.4651677422547376e-04 1.4883193163897895e-02 1.4883193163897895e-02 3.4400419380180660e-03 3.4400419380180660e-03 + 6.0872107347802063e-03 6.0872107347802063e-03 1.4651677422547376e-04 1.4651677422547376e-04 1.4651677422547376e-04 1.4883193163897891e-02 1.4883193163897891e-02 3.4400419380180660e-03 3.4400419380180660e-03 + 1.0478746627345270e-06 1.0478746627345270e-06 4.4005905304828405e-12 4.4005905304828405e-12 4.4005905304828405e-12 3.4182575814402286e-06 3.4182575814402286e-06 5.3566346905150178e-07 5.3566346905150178e-07 + 1.2042414196542307e-06 1.2042414196542307e-06 5.8008374838438911e-12 5.8008374838438911e-12 5.8008374838438911e-12 3.9144274457851696e-06 3.9144274457851696e-06 6.1773035054443626e-07 6.1773035054443626e-07 + 8.0864258955377327e-05 8.0864258955377327e-05 3.8050800531473632e-08 3.8050800531473632e-08 3.8050800531473632e-08 3.7637285547139309e-04 3.7637285547139309e-04 6.7814966271671046e-05 6.7814966271671046e-05 + 1.1569302550376962e-07 1.1569302550376962e-07 6.4030685769744561e-14 6.4030685769744561e-14 6.4030685769744561e-14 5.7249335348461354e-07 5.7249335348461354e-07 9.9705226275132452e-08 9.9705226275132452e-08 + 1.1669841640201765e-06 1.1669841640201765e-06 5.3447296153828227e-12 5.3447296153828227e-12 5.3447296153828227e-12 3.7238658060636074e-06 3.7238658060636074e-06 5.8532650298429509e-07 5.8532650298429509e-07 + 1.1669841640201765e-06 1.1669841640201765e-06 5.3447296153828227e-12 5.3447296153828227e-12 5.3447296153828227e-12 3.7238658060636074e-06 3.7238658060636074e-06 5.8532650298429530e-07 5.8532650298429530e-07 + 1.3982624250735140e+02 1.3982624250735140e+02 6.4719693083805609e+06 6.4719693083805609e+06 6.4719693083805609e+06 1.1289395335553244e+06 1.1289395335553244e+06 5.8238736479839745e+03 5.8238736479839745e+03 + 1.3990086060047517e+02 1.3990086060047517e+02 6.4309075107444394e+06 6.4309075107444394e+06 6.4309075107444394e+06 1.9004117252422395e+05 1.9004117252422395e+05 5.7836779290307231e+03 5.7836779290307231e+03 + 1.3983411407430259e+02 1.3983411407430259e+02 6.4679177910854341e+06 6.4679177910854341e+06 6.4679177910854341e+06 -5.6161455720730862e+06 -5.6161455720730862e+06 5.8193982932836152e+03 5.8193982932836152e+03 + 1.3989213026070831e+02 1.3989213026070831e+02 6.4359875920307860e+06 6.4359875920307860e+06 6.4359875920307860e+06 1.6029643727382198e+06 1.6029643727382198e+06 5.7881707594483833e+03 5.7881707594483833e+03 + 1.3986416506252624e+02 1.3986416506252624e+02 6.4507093035873119e+06 6.4507093035873119e+06 6.4507093035873119e+06 -1.5243363200971362e+05 -1.5243363200971362e+05 5.8037405412283661e+03 5.8037405412283661e+03 + 1.3986416506252624e+02 1.3986416506252624e+02 6.4507093035873119e+06 6.4507093035873119e+06 6.4507093035873119e+06 7.6380672485245130e+04 7.6380672485245130e+04 5.8037405412283661e+03 5.8037405412283661e+03 + 7.4105075405610554e+00 7.4105075405610554e+00 1.2031673157137120e+04 1.2031673157137120e+04 1.2031673157137120e+04 -1.0877236019858922e+05 -1.0877236019858922e+05 2.3154216787749957e+02 2.3154216787749957e+02 + 7.5682519695007784e+00 7.5682519695007784e+00 1.2441210491510234e+04 1.2441210491510234e+04 1.2441210491510234e+04 2.1748045993892074e+03 2.1748045993892074e+03 2.3035605226984441e+02 2.3035605226984441e+02 + 7.3473668924627304e+00 7.3473668924627304e+00 1.2140014363821980e+04 1.2140014363821980e+04 1.2140014363821980e+04 9.3151926438429382e+02 9.3151926438429382e+02 2.3236578982723651e+02 2.3236578982723651e+02 + 7.4695943830643463e+00 7.4695943830643463e+00 1.2463154211367782e+04 1.2463154211367782e+04 1.2463154211367782e+04 9.6105487709052795e+02 9.6105487709052795e+02 2.3130040918810508e+02 2.3130040918810508e+02 + 7.6001135547416290e+00 7.6001135547416290e+00 1.2154929821764550e+04 1.2154929821764550e+04 1.2154929821764550e+04 9.2019078639531199e+02 9.2019078639531199e+02 2.2958419398893852e+02 2.2958419398893852e+02 + 7.6001135547416290e+00 7.6001135547416290e+00 1.2154929821764550e+04 1.2154929821764550e+04 1.2154929821764550e+04 1.8004415596112332e+02 1.8004415596112332e+02 2.2958419398893852e+02 2.2958419398893852e+02 + 1.9386750420471574e-01 1.9386750420471574e-01 2.4941354997680210e-01 2.4941354997680210e-01 2.4941354997680210e-01 4.2367476752742768e+01 4.2367476752742768e+01 2.7549690810886762e-01 2.7549690810886762e-01 + 2.4848161200327129e-01 2.4848161200327129e-01 1.2335000868256871e-01 1.2335000868256871e-01 1.2335000868256871e-01 1.7167460848798324e+01 1.7167460848798324e+01 2.2437040201247069e-01 2.2437040201247069e-01 + 1.6564060291691476e-01 1.6564060291691476e-01 1.7538508824039606e-01 1.7538508824039606e-01 1.7538508824039606e-01 2.2298796181652161e+01 2.2298796181652161e+01 2.7293226678274962e-01 2.7293226678274962e-01 + 1.8795484498346163e-01 1.8795484498346163e-01 9.1146577631431969e-02 9.1146577631431969e-02 9.1146577631431969e-02 6.5450106362815919e-01 6.5450106362815919e-01 2.2397145172232130e-01 2.2397145172232130e-01 + 2.1708342095318903e-01 2.1708342095318903e-01 2.9342204424802815e-01 2.9342204424802815e-01 2.9342204424802815e-01 1.0554086064628978e+00 1.0554086064628978e+00 2.7415890808911791e-01 2.7415890808911791e-01 + 2.1708342095318903e-01 2.1708342095318903e-01 2.9342204424802815e-01 2.9342204424802815e-01 2.9342204424802815e-01 2.1552208399389232e+00 2.1552208399389232e+00 2.7415890808911791e-01 2.7415890808911791e-01 + 9.0904201391466260e-04 9.0904201391466260e-04 5.3307688340573332e-06 5.3307688340573332e-06 5.3307688340573332e-06 -1.1335894967085215e-02 -1.1335894967085215e-02 9.1062532012076722e-04 9.1062532012076722e-04 + 6.1450608069784493e-03 6.1450608069784493e-03 2.7286260441045925e-04 2.7286260441045925e-04 2.7286260441045925e-04 1.7501153932481053e-01 1.7501153932481053e-01 6.0525464403678826e-03 6.0525464403678826e-03 + 8.7453390539365982e-04 8.7453390539365982e-04 4.5510466782155481e-06 4.5510466782155481e-06 4.5510466782155481e-06 -7.8918062444104653e-02 -7.8918062444104653e-02 8.0857645106196087e-04 8.0857645106196087e-04 + 6.9923886001480424e+00 6.9923886001480424e+00 9.1053205201657886e+02 9.1053205201657886e+02 9.1053205201657886e+02 3.5054884521846191e+02 3.5054884521846191e+02 8.7610235047914315e+01 8.7610235047914315e+01 + 1.4055273881797129e-03 1.4055273881797129e-03 1.0907952187439811e-05 1.0907952187439811e-05 1.0907952187439811e-05 4.5323918675257901e-03 4.5323918675257901e-03 1.1443601756214955e-03 1.1443601756214955e-03 + 1.4055273881797129e-03 1.4055273881797129e-03 1.0907952187439811e-05 1.0907952187439811e-05 1.0907952187439811e-05 2.6892653099880952e-03 2.6892653099880952e-03 1.1443601756214955e-03 1.1443601756214955e-03 + 1.0386433656183575e-07 1.0386433656183575e-07 5.0107143219059104e-14 5.0107143219059104e-14 5.0107143219059104e-14 2.2905888742249345e-06 2.2905888742249345e-06 7.2483838817221937e-08 7.2483838817221937e-08 + 1.5503113006450236e-07 1.5503113006450236e-07 1.1148508768820073e-13 1.1148508768820073e-13 1.1148508768820073e-13 2.1936651448261255e-03 2.1936651448261255e-03 1.1890420620644503e-07 1.1890420620644503e-07 + 6.5274367093891168e-08 6.5274367093891168e-08 1.1682719869632058e-14 1.1682719869632058e-14 1.1682719869632058e-14 -8.9662149514657230e-04 -8.9662149514657230e-04 2.5250174105938351e-08 2.5250174105938351e-08 + 2.1905836974735264e-04 2.1905836974735264e-04 2.6468846332397174e-07 2.6468846332397174e-07 2.6468846332397174e-07 -2.0294111939382214e-03 -2.0294111939382214e-03 2.1415581467202455e-04 2.1415581467202455e-04 + 1.1727238863608846e-07 1.1727238863608846e-07 5.2488908617121582e-14 5.2488908617121582e-14 5.2488908617121582e-14 1.0843014531759580e-06 1.0843014531759580e-06 8.1035051679747047e-08 8.1035051679747047e-08 + 1.1727238863608846e-07 1.1727238863608846e-07 5.2488908617121601e-14 5.2488908617121601e-14 5.2488908617121601e-14 -1.1314104862413551e-05 -1.1314104862413551e-05 8.1035051679747114e-08 8.1035051679747114e-08 + 2.1300269282388612e-01 2.1300269282388612e-01 2.3582568467779823e-02 2.3582568467779823e-02 2.3582568467779823e-02 2.5505723989537876e+05 2.5505723989537876e+05 2.8315649063041917e-02 2.8315649063041917e-02 + 2.0960944582296648e-01 2.0960944582296648e-01 6.8843661580521978e-02 6.8843661580521978e-02 6.8843661580521978e-02 -8.8755427077214219e+04 -8.8755427077214219e+04 5.4871711684158969e-02 5.4871711684158969e-02 + 2.1082168001013224e-01 2.1082168001013224e-01 5.2985234773965148e-02 5.2985234773965148e-02 5.2985234773965148e-02 -1.7007432209342553e+06 -1.7007432209342553e+06 4.5471874136991053e-02 4.5471874136991053e-02 + 2.1176009639273524e-01 2.1176009639273524e-01 4.0440274312467758e-02 4.0440274312467758e-02 4.0440274312467758e-02 2.4949515802380920e+03 2.4949515802380920e+03 3.8108340470829616e-02 3.8108340470829616e-02 + 2.1129007096346050e-01 2.1129007096346050e-01 4.6742238206866620e-02 4.6742238206866620e-02 4.6742238206866620e-02 -6.9935275771635381e+04 -6.9935275771635381e+04 4.1806044079237194e-02 4.1806044079237194e-02 + 2.1129007096346050e-01 2.1129007096346050e-01 4.6742238206866626e-02 4.6742238206866626e-02 4.6742238206866626e-02 3.2389863804109581e+06 3.2389863804109581e+06 4.1806044079237194e-02 4.1806044079237194e-02 + 1.9314558699221918e-01 1.9314558699221918e-01 1.2070649175922526e-02 1.2070649175922526e-02 1.2070649175922526e-02 -1.0852177948300601e+06 -1.0852177948300601e+06 3.2573749337624767e-02 3.2573749337624767e-02 + 1.2609173122732564e-01 1.2609173122732564e-01 1.3723590635116670e-01 1.3723590635116670e-01 1.3723590635116670e-01 3.7672184911419299e-01 3.7672184911419299e-01 1.4450858788811760e-01 1.4450858788811760e-01 + 1.4370372353179572e-01 1.4370372353179572e-01 1.2742301670905046e-01 1.2742301670905046e-01 1.2742301670905046e-01 1.4058911736056993e+01 1.4058911736056993e+01 1.2348071429243510e-01 1.2348071429243510e-01 + 1.6143644884268893e-01 1.6143644884268893e-01 1.0101365143589891e-01 1.0101365143589891e-01 1.0101365143589891e-01 -2.1208718020669175e+00 -2.1208718020669175e+00 9.5278381607406662e-02 9.5278381607406662e-02 + 1.5222894935588943e-01 1.5222894935588943e-01 1.1611932268027156e-01 1.1611932268027156e-01 1.1611932268027156e-01 1.1069948054487535e+00 1.1069948054487535e+00 1.1087197968471697e-01 1.1087197968471697e-01 + 1.5222894935588946e-01 1.5222894935588946e-01 1.1611932268027156e-01 1.1611932268027156e-01 1.1611932268027156e-01 3.4752941408919966e+01 3.4752941408919966e+01 1.1087197968471699e-01 1.1087197968471699e-01 + 2.8641667644582014e-01 2.8641667644582014e-01 1.9686612220607297e-01 1.9686612220607297e-01 1.9686612220607297e-01 7.6812528615454212e+01 7.6812528615454212e+01 3.4758087456305958e-01 3.4758087456305958e-01 + 1.2226559615888115e-02 1.2226559615888115e-02 1.1514389424101613e-03 1.1514389424101613e-03 1.1514389424101613e-03 -4.0020630542889393e+00 -4.0020630542889393e+00 1.2509341558004502e-02 1.2509341558004502e-02 + 2.0482583566006421e-02 2.0482583566006421e-02 2.9671771107588644e-03 2.9671771107588644e-03 2.9671771107588644e-03 -1.4489464846860828e+01 -1.4489464846860828e+01 2.0965578192710724e-02 2.0965578192710724e-02 + 4.2798388229757449e-02 4.2798388229757449e-02 9.3480676768845951e-03 9.3480676768845951e-03 9.3480676768845951e-03 -4.5025271688844546e+00 -4.5025271688844546e+00 4.1961761158689957e-02 4.1961761158689957e-02 + 2.9611465362935050e-02 2.9611465362935050e-02 5.3171979760190877e-03 5.3171979760190877e-03 5.3171979760190877e-03 3.5368350936736404e-01 3.5368350936736404e-01 2.8286008845218744e-02 2.8286008845218744e-02 + 2.9611465362935036e-02 2.9611465362935036e-02 5.3171979760190825e-03 5.3171979760190825e-03 5.3171979760190825e-03 2.0248290633319344e-01 2.0248290633319344e-01 2.8286008845218733e-02 2.8286008845218733e-02 + 9.2515753060853204e-02 9.2515753060853204e-02 6.4719910862976057e-02 6.4719910862976057e-02 6.4719910862976057e-02 3.8987538900922075e-01 3.8987538900922075e-01 1.1781392125740382e-01 1.1781392125740382e-01 + 6.4244816342635746e-05 6.4244816342635746e-05 2.6493204441416189e-08 2.6493204441416189e-08 2.6493204441416189e-08 1.7165771289874604e-03 1.7165771289874604e-03 5.5933895524750839e-05 5.5933895524750839e-05 + 1.5939327910675653e-04 1.5939327910675653e-04 1.5609902752347750e-07 1.5609902752347750e-07 1.5609902752347750e-07 1.0559355286400955e-03 1.0559355286400955e-03 1.4598483542988683e-04 1.4598483542988683e-04 + 3.6099536315518425e-02 3.6099536315518425e-02 4.2090333828583249e-03 4.2090333828583249e-03 4.2090333828583249e-03 7.3402558889111472e-02 7.3402558889111472e-02 2.5247708102302951e-02 2.5247708102302951e-02 + 4.8607574479290322e-04 4.8607574479290322e-04 1.2132758622395458e-06 1.2132758622395458e-06 1.2132758622395458e-06 -2.1964053055796646e-02 -2.1964053055796646e-02 3.7235629343929837e-04 3.7235629343929837e-04 + 4.8607574479290333e-04 4.8607574479290333e-04 1.2132758622395454e-06 1.2132758622395454e-06 1.2132758622395454e-06 1.5074498521267079e-03 1.5074498521267079e-03 3.7235629343929837e-04 3.7235629343929837e-04 + 1.6868769542433070e-06 1.6868769542433070e-06 1.3142774566351018e-11 1.3142774566351018e-11 1.3142774566351018e-11 -4.6590339012500980e-05 -4.6590339012500980e-05 1.3804982476466635e-06 1.3804982476466635e-06 + 3.1815371428648464e-09 3.1815371428648464e-09 3.5844616289773665e-17 3.5844616289773665e-17 3.5844616289773665e-17 3.4608739369747421e-07 3.4608739369747421e-07 2.3219291328745752e-09 2.3219291328745752e-09 + 2.1809614789124042e-08 2.1809614789124042e-08 1.8146780895195558e-15 1.8146780895195558e-15 1.8146780895195558e-15 -1.2649378433141856e-06 -1.2649378433141856e-06 1.1350195120127182e-08 1.1350195120127182e-08 + 4.2206385137723952e-04 4.2206385137723952e-04 8.2389961815966079e-07 8.2389961815966079e-07 8.2389961815966079e-07 -1.8457971661908746e-04 -1.8457971661908746e-04 2.9517699465554399e-04 2.9517699465554399e-04 + 7.1986272317329724e-08 7.1986272317329724e-08 1.6368662139920604e-14 1.6368662139920604e-14 1.6368662139920604e-14 -1.7196399504919702e-07 -1.7196399504919702e-07 4.1958276759057147e-08 4.1958276759057147e-08 + 7.1986272317329407e-08 7.1986272317329407e-08 1.6368662139920475e-14 1.6368662139920475e-14 1.6368662139920475e-14 -5.5804349445369525e-06 -5.5804349445369525e-06 4.1958276759056988e-08 4.1958276759056988e-08 diff --git a/libxc-2.2.0/testsuite/input/BrOH+ b/libxc-2.2.0/testsuite/input/BrOH+ new file mode 100644 index 000000000..ca2c4b7f7 --- /dev/null +++ b/libxc-2.2.0/testsuite/input/BrOH+ @@ -0,0 +1,91 @@ +90 + 9.6666237887446041e+03 9.6665864453688937e+03 7.1588226136934680e+11 7.1587759172715796e+11 7.1587292237859204e+11 -9.7015766148422763e+07 -9.7025106636549518e+07 9.8931936364997514e+06 9.8907079423943777e+06 + 9.6667174796208747e+03 9.6666545084255122e+03 7.1587614071981702e+11 7.1587231538412793e+11 7.1586849039480383e+11 -9.7018349156989202e+07 -9.7026980340590358e+07 9.8929979326499179e+06 9.8905662607139423e+06 + 9.6670357100906513e+03 9.6671053322557327e+03 7.1589313931371790e+11 7.1588787203739099e+11 7.1588260480015051e+11 -9.7025818544071645e+07 -9.7037918585551202e+07 9.8925366893693730e+06 9.8898594389914069e+06 + 9.6659771716621635e+03 9.6657562892094465e+03 7.1596131095140796e+11 7.1596554913906226e+11 7.1596978735760022e+11 -9.6996749095378682e+07 -9.7000828695340782e+07 9.8947190089565739e+06 9.8926487556825448e+06 + 9.6666787341748295e+03 9.6663091279795153e+03 7.1587676371975879e+11 7.1591930934011719e+11 7.1596185777913293e+11 -9.7017345931009293e+07 -9.7015091673487544e+07 9.8930594055389129e+06 9.8916569497946277e+06 + 9.6666787341748295e+03 9.6663091279795153e+03 7.1587676371975879e+11 7.1591930934011719e+11 7.1596185777913293e+11 -9.7017345931009293e+07 -9.7015091673487544e+07 9.8930594055389129e+06 9.8916569497946277e+06 + 4.1717199771553368e+01 4.1715492218115820e+01 4.8908261647920212e+05 4.8873810679299373e+05 4.8839383992921747e+05 6.1713857735245119e+03 6.1744815491694781e+03 3.3288950452098834e+03 3.3295292613327028e+03 + 4.1717591047100655e+01 4.1715641187420616e+01 4.8901525398305338e+05 4.8864674565296754e+05 4.8827851502066763e+05 6.1672313242869868e+03 6.1717751346907153e+03 3.3278910210816916e+03 3.3288614743588773e+03 + 4.1724638419773861e+01 4.1727215465189545e+01 4.8689731714789558e+05 4.8663104628134129e+05 4.8636492103693826e+05 6.0865774318135664e+03 6.0721314364143900e+03 3.3083447907462860e+03 3.3050292188579015e+03 + 4.1732628201458027e+01 4.1734385303204142e+01 4.9120375438927696e+05 4.9088088676444732e+05 4.9055823141251114e+05 6.1171756996968106e+03 6.1172601670565828e+03 3.3168394782504406e+03 3.3170446289009101e+03 + 4.1696275916630007e+01 4.1743097666992881e+01 4.8867899350765196e+05 4.8872287762898294e+05 4.8876676752756006e+05 6.1778944242475509e+03 6.0446847442316985e+03 3.3284650570260369e+03 3.2997727220632087e+03 + 4.1696275916630007e+01 4.1743097666992881e+01 4.8867899350765196e+05 4.8872287762898294e+05 4.8876676752756006e+05 6.1778944242475509e+03 6.0446847442316985e+03 3.3284650570260369e+03 3.2997727220632087e+03 + 2.9756838796846052e-01 3.0112096748593953e-01 1.5914928509179143e+00 1.5735509760661768e+00 1.5558494815926383e+00 6.5665662636608415e+00 6.4335865875054346e+00 1.8904179213820154e+00 1.8732235859158479e+00 + 2.9618122964306037e-01 3.0053009157911481e-01 1.6007476155534930e+00 1.5790301296736133e+00 1.5576169839775647e+00 6.5936234082588703e+00 6.4511062629417566e+00 1.8915328041331405e+00 1.8750651214689269e+00 + 2.7806238046895554e-01 2.7235522928877220e-01 1.6990654381026795e+00 1.7202802439744085e+00 1.7417600352227507e+00 7.0251735458779425e+00 7.0199809529355210e+00 1.9221185463266157e+00 1.8999746311694095e+00 + 2.8120326378032717e-01 2.8303478414463057e-01 1.8212486634419078e+00 1.8128185657770715e+00 1.8044300363377321e+00 6.7419159091280223e+00 6.6285464113093502e+00 1.8689584370008361e+00 1.8494029866133410e+00 + 3.0810246030899952e-01 2.5317736204850333e-01 1.5207553808005891e+00 1.7633993966653574e+00 2.0447936694474333e+00 6.4772990204770764e+00 7.0051547021526028e+00 1.9103463174399495e+00 1.8341097252049841e+00 + 3.0810246030899952e-01 2.5317736204850333e-01 1.5207553808005891e+00 1.7633993966653574e+00 2.0447936694474333e+00 6.4772990204770764e+00 7.0051547021526028e+00 1.9103463174399495e+00 1.8341097252049841e+00 + 4.8587637156924206e-03 5.4481035568319566e-03 1.1767410244006676e-04 1.2996992124893704e-04 1.4358092470996274e-04 1.5927321642842603e-02 1.5775423856338427e-02 3.3452780521451742e-03 3.4193562305532572e-03 + 5.0405975916711435e-03 5.7416888855954754e-03 1.2197947494783749e-04 1.3671493194031365e-04 1.5323547965155057e-04 1.5990293666156462e-02 1.5840010253763911e-02 3.4060852299917740e-03 3.5044960421123116e-03 + 4.5107648301399567e-01 4.9811432744654183e-01 4.6900567929719159e+00 4.7910818339423251e+00 4.8989168919499093e+00 2.7366403886946671e+01 2.4942159125082778e+01 7.1387235742583499e+00 6.8981230828617255e+00 + 2.2085710325857131e-03 2.3012768012430108e-03 2.9762554262861848e-05 3.1146279687712636e-05 3.2601813039189015e-05 1.1456183962588502e-02 1.0810965602147142e-02 2.2470603538578856e-03 2.1013580773404897e-03 + 5.5315854926725151e-03 8.5411179985959453e-04 1.6165740663650669e-04 2.7130256124895096e-05 4.5847026163500724e-06 1.8766751484818746e-02 5.5592600377248674e-03 4.1163824355254022e-03 1.0401876026988959e-03 + 5.5315854926725142e-03 8.5411179985959485e-04 1.6165740663650669e-04 2.7130256124895096e-05 4.5847026163500724e-06 1.8766751484818746e-02 5.5592600377248700e-03 4.1163824355254022e-03 1.0401876026988959e-03 + 1.9764398833974741e-07 2.3714576364844423e-07 2.2739942006097857e-13 2.7351214837994914e-13 3.2898102247109567e-13 9.2500213095102533e-07 1.1116422976669763e-06 1.4557919510500885e-07 1.7430967905372169e-07 + 2.2741485215188327e-07 2.7957221290300603e-07 2.9325167192493022e-13 3.6093186006647248e-13 4.4423483994970052e-13 1.0466272787720226e-06 1.2839756388888034e-06 1.6448234356705084e-07 2.0089039889376824e-07 + 3.9097199729659178e-05 4.6042136854144611e-05 1.1269639574371252e-08 1.3226575200224194e-08 1.5523345985692661e-08 2.3403622094051189e-04 2.6929131636657628e-04 4.0730578279231864e-05 4.6770831135369676e-05 + 4.2932308357766874e-08 4.0821735427800831e-08 1.1220745797236391e-14 1.0742112041002182e-14 1.0285404229923094e-14 2.2639012661283962e-07 2.1563743785788922e-07 3.6985559364172332e-08 3.4988924204856783e-08 + 1.4031942688704669e-07 2.5858228655378391e-08 1.1474575780255365e-13 1.6452659500152026e-14 2.4475426582898997e-15 6.8122139629231249e-07 9.8815389915473312e-08 1.0606821871860386e-07 1.4946525153776107e-08 + 1.4031942688704669e-07 2.5858228655378398e-08 1.1474575780255350e-13 1.6452659500152013e-14 2.4475426582898989e-15 6.8122139629231249e-07 9.8815389915473338e-08 1.0606821871860386e-07 1.4946525153776107e-08 + 1.4005965152524828e+02 1.3995902660604230e+02 6.4948882657516450e+06 6.4897412090591956e+06 6.4845982371741487e+06 9.8187235020282422e+05 7.5841290722653817e+05 5.8352361092630963e+03 5.8279523645070758e+03 + 1.4013813314012754e+02 1.4003479669447677e+02 6.4516277356736008e+06 6.4472438888747608e+06 6.4428630319351200e+06 2.8200914271798747e+05 2.7819196266010514e+05 5.7929553407399299e+03 5.7871338152646485e+03 + 1.4006442987680310e+02 1.3996192947279044e+02 6.4927712043682132e+06 6.4880681322541842e+06 6.4833684960568557e+06 -5.3608574979597880e+06 -6.0254450419797655e+06 5.8322380009626240e+03 5.8260812590913747e+03 + 1.4013176671391872e+02 1.4003075915022947e+02 6.4556473061977942e+06 6.4505471077323845e+06 6.4454509586896673e+06 1.8123739434941174e+06 1.9033332700817285e+06 5.7959890248752545e+03 5.7890297166170467e+03 + 1.4009952271232066e+02 1.3999702507622510e+02 6.4725078103383705e+06 6.4680517082417579e+06 6.4635987067974471e+06 -2.2810619267680342e+05 -2.2648962159840457e+05 5.8140595964126687e+03 5.8075256816083665e+03 + 1.4009952271232066e+02 1.3999702507622510e+02 6.4725078103383705e+06 6.4680517082417579e+06 6.4635987067974471e+06 7.8031409195323969e+04 5.7345676918094228e+04 5.8140595964126687e+03 5.8075256816083665e+03 + 7.4359846289395586e+00 7.4348574347645773e+00 1.2034142982479476e+04 1.2032086343333120e+04 1.2030042609826893e+04 -1.6035631283345856e+05 -1.3759868635189743e+05 2.3203511033079488e+02 2.3098903040081439e+02 + 7.6014980812570627e+00 7.5952937317612674e+00 1.2465159040341086e+04 1.2455072061741032e+04 1.2445008370736352e+04 2.1644460757650741e+03 2.1575469793497964e+03 2.3078565931215019e+02 2.2978921870647099e+02 + 7.2989568105635172e+00 7.3368949869686739e+00 1.2180558658981619e+04 1.2154734894406134e+04 1.2128982368774874e+04 9.3588731307992703e+02 9.2892408076572895e+02 2.3366840812397035e+02 2.3218462071410460e+02 + 7.4401701380464855e+00 7.4804601216787283e+00 1.2558708134732586e+04 1.2537251076999719e+04 1.2515841957224655e+04 9.1144513969447075e+02 9.2477277328425816e+02 2.3243565699836145e+02 2.3096178981129160e+02 + 7.6328549604639138e+00 7.5330123737119310e+00 1.2164722357575918e+04 1.2196573529638159e+04 1.2228508563429521e+04 9.1811038479746185e+02 9.1921836417788404e+02 2.3002490769624049e+02 2.3007272707184501e+02 + 7.6328549604639138e+00 7.5330123737119310e+00 1.2164722357575918e+04 1.2196573529638159e+04 1.2228508563429521e+04 2.7362518855533193e+02 3.3711620207867730e+02 2.3002490769624049e+02 2.3007272707184501e+02 + 2.0115363981444559e-01 1.9956020412226563e-01 2.7946999907687819e-01 2.7608366455651911e-01 2.7282541290284573e-01 3.5762413487906962e+01 4.5823762405066219e+01 2.8229368183957387e-01 2.7308463238761893e-01 + 2.5669682991605908e-01 2.5704659438228866e-01 1.4638102952579629e-01 1.4447769874149496e-01 1.4264243339902516e-01 1.6366056639226670e+01 1.6646160290640669e+01 2.2424294641886180e-01 2.1570024861254150e-01 + 1.5014082622519181e-01 1.6731627559189458e-01 1.5304651099193270e-01 1.6895588554084731e-01 1.8653988266595853e-01 2.8373105230593673e+01 2.4646019536616304e+01 2.7089256671695783e-01 2.6695331129518468e-01 + 1.6956139476068186e-01 1.8703105176179752e-01 6.4414534830221068e-02 7.4406801136433401e-02 8.6074613353389964e-02 7.5959977834280423e-01 7.3380377805696528e-01 2.2314612954792976e-01 2.2733158761164504e-01 + 2.2629171681055033e-01 1.9411747197886672e-01 3.3351302774546543e-01 2.7808327383952969e-01 2.3194988694428587e-01 1.0874881908507759e+00 1.0177582685834845e+00 2.8527970829337729e-01 2.5607926328051206e-01 + 2.2629171681055030e-01 1.9411747197886675e-01 3.3351302774546543e-01 2.7808327383952969e-01 2.3194988694428587e-01 2.1922519680555106e+00 1.8810867764369461e+00 2.8527970829337723e-01 2.5607926328051206e-01 + 7.4390481495671700e-04 7.6539032411135919e-04 4.1118115142802724e-06 4.1998073121369994e-06 4.2896864707902293e-06 -1.0215078056581513e-02 -1.0433850462139866e-02 8.1702183216608389e-04 8.4177342871899594e-04 + 5.1382910284822380e-03 5.2156045502787952e-03 2.1059942756477244e-04 2.1381451911476267e-04 2.1708006545182793e-04 1.6417154419052510e-01 1.6548013379806950e-01 5.5149551483017790e-03 5.6250444401095738e-03 + 5.5070023431674515e-04 6.4432339990688054e-04 2.1872151097207459e-06 2.5541932294777621e-06 2.9827499351275914e-06 -5.7769488189746206e-02 -6.7580510147672371e-02 6.0670012814781956e-04 6.8574514190032198e-04 + 7.0217068170644810e+00 7.0122471979470848e+00 9.2461790038478466e+02 9.2221192219443208e+02 9.1981220480036950e+02 3.5168855542749418e+02 3.5062968132172836e+02 8.7904560768119950e+01 8.7638376297501608e+01 + 1.1144449978133053e-03 1.3248286898846660e-03 8.0693355247097599e-06 8.7786995827597368e-06 9.6174135112877515e-06 4.1097893218836907e-03 4.0674875708420185e-03 1.0341346065481328e-03 1.0125742000831521e-03 + 1.1144449978133053e-03 1.3248286898846660e-03 8.0693355247097599e-06 8.7786995827597368e-06 9.6174135112877515e-06 2.6297842107606642e-03 2.2986169173340350e-03 1.0341346065481326e-03 1.0125742000831517e-03 + 1.8125803130052638e-08 2.0344530833477899e-08 1.6883325959922562e-15 1.9640635010858149e-15 2.2862088216585662e-15 5.6371651996723867e-07 6.0788209143099787e-07 1.8314385989713726e-08 2.1427175047682631e-08 + 3.8242655032894379e-08 4.0005480535188894e-08 8.0978339545755054e-15 8.6339089709639013e-15 9.2224811095504871e-15 1.1911957182558146e-03 1.1843684707217464e-03 3.3828305920966865e-08 3.7692530770078754e-08 + 1.5990339575578523e-08 1.8992800107286254e-08 5.9310651310450345e-16 6.8591372321348984e-16 7.9324890034264255e-16 -2.4460991287734318e-04 -1.3173751302116726e-04 5.2698387989836664e-09 5.9737113658459649e-09 + 1.8012346437011536e-04 1.8346650972284975e-04 2.0839860327930734e-07 2.1429301303238987e-07 2.2040565972522199e-07 -2.2212149678914701e-03 -2.8998651393892334e-03 1.7912844152385716e-04 1.7147789599768296e-04 + 1.7036439381771757e-08 4.4125979774440448e-08 9.5486951628261680e-16 2.4716268891371243e-15 6.4609019336704138e-15 2.0423955737748745e-07 2.7823962467200105e-07 1.2938643518307750e-08 1.8794317682116984e-08 + 1.7036439381771757e-08 4.4125979774440454e-08 9.5486951628261818e-16 2.4716268891371274e-15 6.4609019336704201e-15 -9.9780978961299452e-06 -1.1792482654990234e-05 1.2938643518307747e-08 1.8794317682116994e-08 + 2.0211311223327191e-01 2.0446609129444021e-01 2.6380222174074593e-02 2.6394091966986041e-02 2.6408421159123945e-02 2.5404764221724929e+05 2.6051692480837187e+05 2.9048343462588874e-02 2.8768827751868689e-02 + 1.9864328426826100e-01 2.0097926327655358e-01 6.9985094956751939e-02 7.0383104065661728e-02 7.0784218262482448e-02 -1.0120294250697449e+05 -1.0285248477786669e+05 5.6173928896255707e-02 5.6067767403395981e-02 + 1.9985597764847796e-01 2.0220538627625348e-01 5.5070435941452306e-02 5.5287257370025863e-02 5.5505121065352360e-02 -1.7621964134504180e+06 -1.7959940547340801e+06 4.6790789372208000e-02 4.6557699667607255e-02 + 2.0086896466899756e-01 2.0320860172571567e-01 4.2281425157618256e-02 4.2481627763082772e-02 4.2684328652322932e-02 2.4006260622865270e+03 2.1770951947108115e+03 3.8829193871164999e-02 3.8678347280256944e-02 + 2.0036161239560285e-01 2.0270591446918265e-01 4.8706539837370298e-02 4.8917936224390633e-02 4.9131173641290965e-02 -3.0137714235027350e+04 -3.5744696727030147e+04 4.2826601749599735e-02 4.2635651818907702e-02 + 2.0036161239560285e-01 2.0270591446918265e-01 4.8706539837370298e-02 4.8917936224390633e-02 4.9131173641290965e-02 3.2017025760402251e+06 3.2548350111127649e+06 4.2826601749599735e-02 4.2635651818907709e-02 + 1.8627548682842049e-01 1.8812891377560678e-01 9.9309969895127748e-03 1.0014626104863138e-02 1.0106223938938919e-02 -8.6802434387937270e+05 -9.0339084091396374e+05 2.8828541849074650e-02 2.8453645865016780e-02 + 1.1765143771673531e-01 1.1918718142694129e-01 1.2741272487083535e-01 1.2876126372294899e-01 1.3012446057380517e-01 3.7878382201208266e-01 3.6473627151820243e-01 1.4267337279650633e-01 1.4380381113881949e-01 + 1.3507254673596525e-01 1.3687888495804035e-01 1.2033560379836901e-01 1.2136194696168456e-01 1.2239704672730101e-01 1.4092651511172189e+01 1.4640515976177563e+01 1.2225297887339528e-01 1.2269284743329845e-01 + 1.5420715026011250e-01 1.5583959583491838e-01 9.4241238115175430e-02 9.5147491267525211e-02 9.6064729479212935e-02 -2.9118637197728892e+00 -3.6694392729171472e+00 9.1386264442336176e-02 9.2197429995123190e-02 + 1.4428046691826674e-01 1.4589432638734484e-01 1.0928486953360839e-01 1.1046824000250673e-01 1.1166791219850450e-01 1.0640858492523864e+00 1.0728670058295438e+00 1.0842377751196410e-01 1.0914556101999591e-01 + 1.4428046691826674e-01 1.4589432638734484e-01 1.0928486953360839e-01 1.1046824000250673e-01 1.1166791219850450e-01 3.9090074283209972e+01 3.9203658443256316e+01 1.0842377751196411e-01 1.0914556101999594e-01 + 2.9525430489310928e-01 2.9670002639679360e-01 2.3490708481802638e-01 2.3143784310081139e-01 2.2828614704488567e-01 8.1628909644616201e+01 7.9850112757145652e+01 3.4918054057859810e-01 3.2990084822265059e-01 + 1.0350430973838615e-02 1.0531264191721923e-02 9.1345492141646739e-04 9.2831472998202932e-04 9.4342028069342276e-04 -3.5220742652735857e+00 -3.6439230257778092e+00 1.1614116127516992e-02 1.1809764657409115e-02 + 1.7813884358933239e-02 1.8355268047116062e-02 2.5160687123233789e-03 2.5731558356639115e-03 2.6317205494060087e-03 -1.1188566363403128e+01 -1.1648734352097396e+01 1.9913575914356028e-02 2.0233583333456266e-02 + 4.1330705383418494e-02 4.2020085239154056e-02 9.1559561688758645e-03 9.3067823842284143e-03 9.4607391823371030e-03 -3.0592294678532332e+00 -3.3374426227925813e+00 4.1280713016299639e-02 4.2311226840884834e-02 + 2.7423864920665633e-02 2.7394852523969813e-02 4.9878227860105963e-03 4.9589640451738358e-03 4.9316744577085070e-03 3.2758903272553203e-01 3.3168595800462153e-01 2.7825048089193116e-02 2.7581624212204548e-02 + 2.7423864920665619e-02 2.7394852523969809e-02 4.9878227860105911e-03 4.9589640451738314e-03 4.9316744577085035e-03 1.9432919175889149e-01 1.9824512911308048e-01 2.7825048089193095e-02 2.7581624212204534e-02 + 9.1453282408202205e-02 9.3355595533397853e-02 6.7289793559242680e-02 6.8263006407801932e-02 6.9293321971409028e-02 4.2194297320411756e-01 4.2186317927925943e-01 1.2031301797346236e-01 1.1901366303459204e-01 + 3.6944010749794017e-05 3.7707552142586443e-05 1.0549067658460147e-08 1.0761508386870180e-08 1.0978296855010768e-08 -3.6213407501432696e-04 -2.8526301310789439e-04 3.7515828055714718e-05 3.8678691321920010e-05 + 8.9916881735749407e-05 9.9252395450181557e-05 6.1427454934340581e-08 6.7281794351799703e-08 7.3719669569614164e-08 5.8703889281276449e-04 7.2776201052530173e-04 9.8337235366215386e-05 1.0635265023736028e-04 + 3.6498223947077649e-02 3.8174353624360502e-02 4.7556985959211111e-03 4.9366415974517767e-03 5.1371811784933549e-03 9.0827903486595751e-02 7.0890474936800743e-02 2.7094686854839740e-02 2.4302785319320598e-02 + 3.4476031146537145e-04 4.0586370047341442e-04 7.2254374667153179e-07 8.0181150794491652e-07 8.9375436571619693e-07 -1.7716467473099091e-02 -1.7456909416330921e-02 3.0300032666934294e-04 3.1671993630595548e-04 + 3.4476031146537156e-04 4.0586370047341447e-04 7.2254374667153179e-07 8.0181150794491652e-07 8.9375436571619693e-07 1.2570593017694255e-03 1.1705767091135294e-03 3.0300032666934294e-04 3.1671993630595543e-04 + 5.7848874277743763e-07 6.4371567224202640e-07 2.1860296444130561e-12 2.4187603740159631e-12 2.6784528883523351e-12 -1.0495936206459324e-04 -6.3031382524276848e-05 6.1320465480884400e-07 6.8730418362971923e-07 + 7.4470169611304340e-10 7.4981957568351213e-10 1.6251001695356205e-18 1.4174988532819087e-18 1.2378498205493153e-18 -4.3742461979219940e-09 -1.0567701850320962e-08 6.1455775478227492e-10 6.2014604871517526e-10 + 6.2737527806502307e-09 7.5481196185512185e-09 1.4679191412312900e-16 1.7386221808424372e-16 2.0593192397831518e-16 -9.9384314623039734e-07 -1.0797550513149869e-06 3.1090531497812747e-09 3.6341019640315349e-09 + 3.0321650257763026e-04 3.1833705715500249e-04 5.3179443766902630e-07 5.6017757795732969e-07 5.9026863192233281e-07 -4.2718121846055469e-05 -5.6736713714458935e-04 2.4773913682941457e-04 2.4540930344542328e-04 + 1.4478411939386775e-08 3.3977901180468628e-08 4.8024082743363218e-16 1.3309917876187713e-15 3.7603172007430589e-15 -1.1210992305558339e-06 -1.6930646813938562e-06 6.8438187165368509e-09 1.4214981894699861e-08 + 1.4478411939386737e-08 3.3977901180468529e-08 4.8024082743362923e-16 1.3309917876187623e-15 3.7603172007430321e-15 -1.9563931636511040e-06 -3.3622153529901175e-06 6.8438187165368286e-09 1.4214981894699810e-08 diff --git a/libxc-2.2.0/testsuite/input/H b/libxc-2.2.0/testsuite/input/H new file mode 100644 index 000000000..bd5629538 --- /dev/null +++ b/libxc-2.2.0/testsuite/input/H @@ -0,0 +1,31 @@ +30 + 2.9812307552866940e-01 0.0000000000000000e+00 7.2885038299571603e-03 -0.0000000000000000e+00 0.0000000000000000e+00 -3.0093807601778920e+01 0.0000000000000000e+00 3.0559961805401883e-03 0.0000000000000000e+00 + 2.9812307552866940e-01 0.0000000000000000e+00 7.2885038299571603e-03 0.0000000000000000e+00 0.0000000000000000e+00 -3.0093807601778920e+01 0.0000000000000000e+00 3.0559961805401883e-03 0.0000000000000000e+00 + 2.9812307552866940e-01 0.0000000000000000e+00 7.2885038299571603e-03 -0.0000000000000000e+00 0.0000000000000000e+00 -3.0093807601778920e+01 0.0000000000000000e+00 3.0559961805401883e-03 0.0000000000000000e+00 + 2.9812307552866940e-01 0.0000000000000000e+00 7.2885038299571603e-03 0.0000000000000000e+00 0.0000000000000000e+00 -3.0093807601778920e+01 0.0000000000000000e+00 3.0559961805401883e-03 0.0000000000000000e+00 + 2.9812307552866940e-01 0.0000000000000000e+00 7.2885038299571603e-03 -0.0000000000000000e+00 0.0000000000000000e+00 -3.0093807601778920e+01 0.0000000000000000e+00 3.0559961805401883e-03 0.0000000000000000e+00 + 2.9812307552866940e-01 0.0000000000000000e+00 7.2885038299571603e-03 0.0000000000000000e+00 0.0000000000000000e+00 -3.0093807601778920e+01 0.0000000000000000e+00 3.0559961805401883e-03 0.0000000000000000e+00 + 2.1491116474335561e-01 0.0000000000000000e+00 1.7350578133885466e-01 -0.0000000000000000e+00 0.0000000000000000e+00 -3.2610655319530562e+00 0.0000000000000000e+00 1.0091715200018959e-01 0.0000000000000000e+00 + 2.1491116474335561e-01 0.0000000000000000e+00 1.7350578133885466e-01 0.0000000000000000e+00 0.0000000000000000e+00 -3.2610655319530562e+00 0.0000000000000000e+00 1.0091715200018959e-01 0.0000000000000000e+00 + 2.1491116474335561e-01 0.0000000000000000e+00 1.7350578133885466e-01 -0.0000000000000000e+00 0.0000000000000000e+00 -3.2610655319530562e+00 0.0000000000000000e+00 1.0091715200018959e-01 0.0000000000000000e+00 + 2.1491116474335561e-01 0.0000000000000000e+00 1.7350578133885466e-01 0.0000000000000000e+00 0.0000000000000000e+00 -3.2610655319530562e+00 0.0000000000000000e+00 1.0091715200018959e-01 0.0000000000000000e+00 + 2.1491116474335561e-01 0.0000000000000000e+00 1.7350578133885466e-01 -0.0000000000000000e+00 0.0000000000000000e+00 -3.2610655319530562e+00 0.0000000000000000e+00 1.0091715200018959e-01 0.0000000000000000e+00 + 2.1491116474335561e-01 0.0000000000000000e+00 1.7350578133885466e-01 0.0000000000000000e+00 0.0000000000000000e+00 -3.2610655319530562e+00 0.0000000000000000e+00 1.0091715200018959e-01 0.0000000000000000e+00 + 4.3002625309998613e-02 0.0000000000000000e+00 7.3839170838824976e-03 -0.0000000000000000e+00 0.0000000000000000e+00 5.1604093686707158e-03 0.0000000000000000e+00 2.1463564821005209e-02 0.0000000000000000e+00 + 4.3002625309998613e-02 0.0000000000000000e+00 7.3839170838824976e-03 0.0000000000000000e+00 0.0000000000000000e+00 5.1604093686707158e-03 0.0000000000000000e+00 2.1463564821005209e-02 0.0000000000000000e+00 + 4.3002625309998613e-02 0.0000000000000000e+00 7.3839170838824976e-03 -0.0000000000000000e+00 0.0000000000000000e+00 5.1604093686707158e-03 0.0000000000000000e+00 2.1463564821005209e-02 0.0000000000000000e+00 + 4.3002625309998613e-02 0.0000000000000000e+00 7.3839170838824976e-03 0.0000000000000000e+00 0.0000000000000000e+00 5.1604093686707158e-03 0.0000000000000000e+00 2.1463564821005209e-02 0.0000000000000000e+00 + 4.3002625309998613e-02 0.0000000000000000e+00 7.3839170838824976e-03 -0.0000000000000000e+00 0.0000000000000000e+00 5.1604093686707158e-03 0.0000000000000000e+00 2.1463564821005209e-02 0.0000000000000000e+00 + 4.3002625309998613e-02 0.0000000000000000e+00 7.3839170838824976e-03 0.0000000000000000e+00 0.0000000000000000e+00 5.1604093686707158e-03 0.0000000000000000e+00 2.1463564821005209e-02 0.0000000000000000e+00 + 8.1904694490289435e-04 0.0000000000000000e+00 2.7287023034495841e-06 -0.0000000000000000e+00 0.0000000000000000e+00 2.1844876941506846e-03 0.0000000000000000e+00 4.1644473495783306e-04 0.0000000000000000e+00 + 8.1904694490289435e-04 0.0000000000000000e+00 2.7287023034495841e-06 0.0000000000000000e+00 0.0000000000000000e+00 2.1844876941506846e-03 0.0000000000000000e+00 4.1644473495783306e-04 0.0000000000000000e+00 + 8.1904694490289435e-04 0.0000000000000000e+00 2.7287023034495841e-06 -0.0000000000000000e+00 0.0000000000000000e+00 2.1844876941506846e-03 0.0000000000000000e+00 4.1644473495783306e-04 0.0000000000000000e+00 + 8.1904694490289435e-04 0.0000000000000000e+00 2.7287023034495841e-06 0.0000000000000000e+00 0.0000000000000000e+00 2.1844876941506846e-03 0.0000000000000000e+00 4.1644473495783306e-04 0.0000000000000000e+00 + 8.1904694490289435e-04 0.0000000000000000e+00 2.7287023034495841e-06 -0.0000000000000000e+00 0.0000000000000000e+00 2.1844876941506846e-03 0.0000000000000000e+00 4.1644473495783306e-04 0.0000000000000000e+00 + 8.1904694490289435e-04 0.0000000000000000e+00 2.7287023034495841e-06 0.0000000000000000e+00 0.0000000000000000e+00 2.1844876941506846e-03 0.0000000000000000e+00 4.1644473495783306e-04 0.0000000000000000e+00 + 8.5637178972121104e-08 0.0000000000000000e+00 4.0188733593578916e-14 -0.0000000000000000e+00 0.0000000000000000e+00 4.1144644586606145e-07 0.0000000000000000e+00 5.8661340320124212e-08 0.0000000000000000e+00 + 8.5637178972121104e-08 0.0000000000000000e+00 4.0188733593578916e-14 0.0000000000000000e+00 0.0000000000000000e+00 4.1144644586606145e-07 0.0000000000000000e+00 5.8661340320124212e-08 0.0000000000000000e+00 + 8.5637178972121104e-08 0.0000000000000000e+00 4.0188733593578916e-14 -0.0000000000000000e+00 0.0000000000000000e+00 4.1144644586606145e-07 0.0000000000000000e+00 5.8661340320124212e-08 0.0000000000000000e+00 + 8.5637178972121104e-08 0.0000000000000000e+00 4.0188733593578916e-14 0.0000000000000000e+00 0.0000000000000000e+00 4.1144644586606145e-07 0.0000000000000000e+00 5.8661340320124212e-08 0.0000000000000000e+00 + 8.5637178972121104e-08 0.0000000000000000e+00 4.0188733593578916e-14 -0.0000000000000000e+00 0.0000000000000000e+00 4.1144644586606145e-07 0.0000000000000000e+00 5.8661340320124212e-08 0.0000000000000000e+00 + 8.5637178972121104e-08 0.0000000000000000e+00 4.0188733593578916e-14 0.0000000000000000e+00 0.0000000000000000e+00 4.1144644586606145e-07 0.0000000000000000e+00 5.8661340320124212e-08 0.0000000000000000e+00 diff --git a/libxc-2.2.0/testsuite/input/Li b/libxc-2.2.0/testsuite/input/Li new file mode 100644 index 000000000..36e639030 --- /dev/null +++ b/libxc-2.2.0/testsuite/input/Li @@ -0,0 +1,31 @@ +30 + 6.4861166230150555e+00 6.5036649228387189e+00 1.4194047833239990e+03 1.4232293901824482e+03 1.4270643024997728e+03 -1.0610898372216599e+04 -1.0639664359639688e+04 2.7368479581946655e+01 2.7428079400825251e+01 + 6.4861166230150555e+00 6.5036649228387189e+00 1.4194047833239990e+03 1.4232293901824482e+03 1.4270643024997728e+03 -1.0610898372216599e+04 -1.0639664359639688e+04 2.7368479581946655e+01 2.7428079400825251e+01 + 6.4861186736538796e+00 6.5036647525588354e+00 1.4193683774548181e+03 1.4232126319770002e+03 1.4270672983789070e+03 -1.0610898636379383e+04 -1.0639663984837518e+04 2.7368448902713162e+01 2.7428137699546870e+01 + 6.4861186736538796e+00 6.5036647525588354e+00 1.4193683774548181e+03 1.4232126319770002e+03 1.4270672983789070e+03 -1.0610898636379383e+04 -1.0639663984837518e+04 2.7368448902713162e+01 2.7428137699546870e+01 + 6.4861166230150555e+00 6.5036649228387127e+00 1.4194047833240006e+03 1.4232293901824517e+03 1.4270643024997780e+03 -1.0610898372216605e+04 -1.0639664359639697e+04 2.7368479581946634e+01 2.7428079400825187e+01 + 6.4861166230150555e+00 6.5036649228387127e+00 1.4194047833240006e+03 1.4232293901824517e+03 1.4270643024997780e+03 -1.0610898372216605e+04 -1.0639664359639697e+04 2.7368479581946634e+01 2.7428079400825187e+01 + 2.1707638135485769e+00 2.1763114221928235e+00 1.5451531107452470e+02 1.5495115738563598e+02 1.5538823310246494e+02 -5.2123140153080456e+01 -5.2318439378538102e+01 8.9092835174206417e+00 8.9249768819286928e+00 + 2.1707638135485769e+00 2.1763114221928235e+00 1.5451531107452470e+02 1.5495115738563598e+02 1.5538823310246494e+02 -5.2123140153080456e+01 -5.2318439378538102e+01 8.9092835174206417e+00 8.9249768819286928e+00 + 2.1716802072439831e+00 2.1762599620597758e+00 1.5431798212537268e+02 1.5485680704382963e+02 1.5539751335218526e+02 -5.2170686710922723e+01 -5.2314155427068613e+01 8.9057137445347454e+00 8.9257209620209572e+00 + 2.1716802072439831e+00 2.1762599620597758e+00 1.5431798212537268e+02 1.5485680704382963e+02 1.5539751335218526e+02 -5.2170686710922723e+01 -5.2314155427068613e+01 8.9057137445347454e+00 8.9257209620209572e+00 + 2.1707638135485832e+00 2.1763114221928266e+00 1.5451531107452411e+02 1.5495115738563527e+02 1.5538823310246417e+02 -5.2123140153081785e+01 -5.2318439378538258e+01 8.9092835174202616e+00 8.9249768819286626e+00 + 2.1707638135485832e+00 2.1763114221928266e+00 1.5451531107452411e+02 1.5495115738563527e+02 1.5538823310246417e+02 -5.2123140153081785e+01 -5.2318439378538258e+01 8.9092835174202616e+00 8.9249768819286626e+00 + 3.0095776303929744e-02 3.0057395981539382e-02 2.3266883924948207e-02 2.3271876430827901e-02 2.3276870007977606e-02 4.9086025614566042e-01 4.8057597402684793e-01 9.9398815379935043e-02 9.6801757312633019e-02 + 3.0095776303929744e-02 3.0057395981539382e-02 2.3266883924948207e-02 2.3271876430827901e-02 2.3276870007977606e-02 4.9086025614566042e-01 4.8057597402684793e-01 9.9398815379935043e-02 9.6801757312633019e-02 + 3.5667743948291239e-02 2.9946915358952261e-02 2.2333135124285607e-02 2.2778692569261419e-02 2.3233139112685281e-02 4.5645630263764825e-01 4.8162684339618539e-01 9.6766631106445677e-02 9.6976344793187910e-02 + 3.5667743948291239e-02 2.9946915358952261e-02 2.2333135124285607e-02 2.2778692569261419e-02 2.3233139112685281e-02 4.5645630263764825e-01 4.8162684339618539e-01 9.6766631106445677e-02 9.6976344793187910e-02 + 3.0095776303963661e-02 3.0057395981611619e-02 2.3266883924957554e-02 2.3271876430823880e-02 2.3276870007960210e-02 4.9086025614527889e-01 4.8057597402605456e-01 9.9398815379878450e-02 9.6801757312595160e-02 + 3.0095776303963661e-02 3.0057395981611619e-02 2.3266883924957554e-02 2.3271876430823880e-02 2.3276870007960210e-02 4.9086025614527889e-01 4.8057597402605456e-01 9.9398815379878450e-02 9.6801757312595160e-02 + 1.8563966531289203e-06 1.8161853710439767e-06 8.3595323953118973e-11 8.3199268725174546e-11 8.2805089914907147e-11 1.1179467690003199e-03 3.9256032612949076e-05 2.7526678760974991e-04 5.6991078127697100e-06 + 1.8563966531289203e-06 1.8161853710439767e-06 8.3595323953118973e-11 8.3199268725174546e-11 8.2805089914907147e-11 1.1179467690003199e-03 3.9256032612949076e-05 2.7526678760974991e-04 5.6991078127697100e-06 + 4.7984046357356829e-03 1.5964624289378327e-06 3.6980454953559325e-06 1.5182461958770077e-08 6.2332156653825732e-11 -3.4357867977894050e-03 3.4775215518530016e-05 1.0119865465024043e-04 4.8804904138848394e-06 + 4.7984046357356829e-03 1.5964624289378327e-06 3.6980454953559325e-06 1.5182461958770077e-08 6.2332156653825732e-11 -3.4357867977894050e-03 3.4775215518530016e-05 1.0119865465024043e-04 4.8804904138848394e-06 + 1.8563966531755312e-06 1.8161853717005107e-06 8.3595323975592372e-11 8.3199268771269884e-11 8.2805089984400064e-11 1.1179467690034333e-03 3.9256032624648126e-05 2.7526678760972020e-04 5.6991078140801344e-06 + 1.8563966531755312e-06 1.8161853717005107e-06 8.3595323975592372e-11 8.3199268771269884e-11 8.2805089984400064e-11 1.1179467690034333e-03 3.9256032624648126e-05 2.7526678760972020e-04 5.6991078140801344e-06 + 1.5177007400799703e-11 5.4528997162498950e-12 2.6138183376667439e-21 8.5857221677495029e-22 2.8201893023517251e-22 1.0874855750591191e-05 1.9948650561426283e-11 2.7187178133634310e-06 6.4648860257761249e-12 + 1.5177007400799703e-11 5.4528997162498950e-12 2.6138183376667439e-21 8.5857221677495029e-22 2.8201893023517251e-22 1.0874855750591191e-05 1.9948650561426283e-11 2.7187178133634310e-06 6.4648860257761249e-12 + 2.9893451559105509e-04 5.0929426813304125e-11 5.1228755095525470e-08 3.5867753338704198e-14 2.5112765812232162e-20 7.5203211551453606e-05 2.2491041491179418e-10 2.1421399347676239e-05 6.1636189666388111e-11 + 2.9893451559105509e-04 5.0929426813304125e-11 5.1228755095525470e-08 3.5867753338704198e-14 2.5112765812232162e-20 7.5203211551453606e-05 2.2491041491179418e-10 2.1421399347676239e-05 6.1636189666388111e-11 + 1.5177006792460753e-11 5.4528995709775956e-12 2.6138182385288591e-21 8.5857220241656684e-22 2.8201893149897212e-22 1.0874855750589578e-05 1.9948650998117136e-11 2.7187178133630866e-06 6.4648860561879137e-12 + 1.5177006792460753e-11 5.4528995709775956e-12 2.6138182385288591e-21 8.5857220241656684e-22 2.8201893149897212e-22 1.0874855750589578e-05 1.9948650998117136e-11 2.7187178133630866e-06 6.4648860561879137e-12 diff --git a/libxc-2.2.0/testsuite/input/README b/libxc-2.2.0/testsuite/input/README new file mode 100644 index 000000000..55daf8563 --- /dev/null +++ b/libxc-2.2.0/testsuite/input/README @@ -0,0 +1,15 @@ +This directory contains data from realistic atomic and molecular system. +Contents: + +H: Hydrogen atom (spin unrestricted) +Li: Lithium atom (spin unrestricted) +BrOH: Bromuous acid, RHF/un-aug-cc-pVQZ calculation + with relativistic effects at DKH2 level of theory +BrOH+: Same as above, but cation at UHF level of theory + +The files contain 13 columns of data in the format + rhoa rhob sigmaaa sigmaab sigmabb lapla laplb taua taub +for the spin up and spin down densities, the dot products of the gradients, +the Laplacians of the densities and the kinetic energy densities. + +The first line contains the number of data rows. diff --git a/libxc-2.2.0/testsuite/regression/lda_x.pol.bz2 b/libxc-2.2.0/testsuite/regression/lda_x.pol.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..13ba80e68c5f571c0461833fb61e1965adc32e3e GIT binary patch literal 4455 zcmV-t5t!~mT4*^jL0KkKS$RPtGXMwi`G8;^5CA}Hf8a7mkq}@Qo<5WWuCluw-+J`% z=X1|vNq4*6qV~pXdu~+`I^^E?Xc_{Q z00s~VQwD;lpa8-H7yu>!0$`OhKq*v)BLXx8nv*1IOp0wrLna`U&;+7XG5~1LljrO7 zew7ro`9mkdQTvfUTu$`l}?vS#VAgd`B8*$BKos4^aqn6VS0$^G&iH@Y4bTX{7|TP-Fx zh!-CDpv0QGG>u6R%P18tfVWi1Ealk-p^`4a0?^4r#Iqs?aX!MMSP`jLWu0EAvY=CV z&~7j|sR0ROY8bPj^u!+mPd%aSEVg zQ1h6Hdp7B!RUpl!3W_FMGMpZPF)oUUDGCwR?_p{%+GaTIYTSAr3q=-V+9YPY99k?A z5iCo|F!eQPnY-}qNb}%%#55>bujVF(- z^kIuV_vYuuKIh92C#cN$jSVdsljY?Ce-JF2ljp0-32fng_u4G*VO}pV>a*G&L1YkM z#%oQb8~2-z_|L)WRtb1bQfT8kyZjVDgjiS;2qMv2C>_27Q8i3YYdDb22Oyq#PLPO1 z{iKaB)upIPy_$o46FqGBWO_Oz&r8)q)8Sd`le8CVibT17PkX7do6@NEiJjt+?rknj z+w3sUNn543>K{pc<7Qle%B;bATL`DijQr{E6p56o3uRXv^>YK(RkIzX~T5Mk4+}^EH zFH}G)<(jrm_=Chl%;a&c>uYjv$mRi9=0l%UdocQ{GhOk}`Dx7FnILT)V%OVW9uhQZ z*bSB)j3;X}&sbLxDAyw+CD-xTIt*)2h~Y#<9t69Ksgt}H!2FAW6xLD>+t^rSXT==r ztc)8G=M86U9ovbeUg3#iPK@}2H;p?!Nqu$Y${uQrVFsqf4dNk|y++XQ0{YGNq4Hy# zX2|=;q>bXwuDIG~MHxJaZ@K9`_8AgSgL)pMQOu&qfVFlsD6KkcBZ45R-MLbE`QUJ= zG`iByh_;6x<6)Z6nuuqMM7aNWuPCX-@D4FNyD`w?w-NDYR6`tJhU@N;yYB|S1ggF& zrk6azoQUWZFQqS%;%tK|>njxTY{>)AzZ3R4or3^t|&A|fEf1I&}q!UDkWh57Yk z!3!++D*lC%e%O<3$}ZMm}&?f~Bdk#k-@MiREDTRhJW4Hy#*mOjLt(1<8jL ztWRessj%koBWoHT(R}x%nmmsAMV_N_SxE`gb4;9-%uV}ymO%9coSBWC!>X^JFT{#w zwsJ=wW-pHzRF#+I)G;h*`wQ4F79(A^(wH~BM8iqvP~+|j;bW|*o#V{)T|*agMdsy_ zo3OX#4O&>W7-Xr{vdo**iI>QRS2WoU$7xEABKoVJks1-t!j;-Jp)AH5yk4$~TUl^R zjBSm2W5I$i0<$-h-(Ci%H3&yZF`XFE=;El!)Yh5$42KY|q3TSJDbglvg(ns`%{8-7S{h^7k)_Pms(Bzk-&iIDA2LFER9FWN``vlhFFc-& zfLNphXEcVm%q_MCARUNVN9c9-T{RgV~{8F8I=wU+G+u`weif;+5f zX{X#&BD=&PZ+MxsHn2fWnwLQLCer9_*M}5g)v)$U542pMfuj<)^sMsL0XUjidV18f zCS%>CxZ}&wi=&HyQ~Pxo(HtsX8Z*n++=h9VjVLksQmEyUUisHw#qh<_j zyHQvwn5n~$PHCf%I>=edaWcNlK;m)F4?=`u zSUIze2c7iu;I&-hJA5|w_{SK%Cb*I&b2e)!*48RoQ=Obu&v3^Tds{Nj>Ws2)np)HA z!Wo6j#%1R5Dp5WQbvGl%S;dtiO^R7`Y!dHg6S8lfTh#tYTCz2q^9WY6tm@{AAxojg zi-(IF+C25V4kRLse6=vM9Aq@(CPVHSK?1lH;&MluAz{xtVA@#5j2k1g?;EI=H1`@y z+?A)AJLT6P;r*SKXHI`YW8HIUsfPK+Urb zLas90ytuR*!Y=3LWy5563ERoNFVsu91 zd`&K@dDh6A)_kEDU!6{=5yLckG*j;qC8QbMolP8P45vLOLqlt&n#i{2;xU)9TH{JN zdD-2X7`~Ct&9{@LQ}vEsOHN$Qp%r_JGi9a({w=tM65UT|;l`ubJ;7v}%{b_$rY`~E z4o*?eiUdh_n{qnz87(mEvd*f>i0h6XrpY!nCv|j8g0>Pa@0QS$GneQ3Z?3IT|^N$`6DrNbWtls2z6|Zi!X6}kNhEbjs7t;;rZm}#o z*8bymS%gI~#Ya>di+LvOrg8mhbcVQN7Vl>^KACxfT6W(HOULZ!t)?|qHL}RZiqi;& zRFLEyT*gU@!<(%hm~jzaiOBQLyGIJ|R8-9{thJ<~?zQn^cxN)_Ac7gohTM64Xxu1D z%+EeN>#`nl&vh#C#I`{1hlHXX9PVj|(@f-U$pmsL?`_~(XN*0=W!IRaCKPc+tFFp= zlU!9?WA(6Z-6KZ3m^BOn#TvF1zWZ$pDfGIGc+^*Qads)Cd?Dg7TjRExQEVR=W_C6t z%l8`w-A9+C&wMlLV<7hYyeszx2xO#Zyo_#py?pD~WL=J~PN|)glQ4_ZWP8F5!S^$l zWaVhja#}*@m9-vth?8jo)_3yRn1YUd%L{4~WR+%bk;LBU$3!gR-QlCmz@(2RXR0)s zL>owr1@1cx=4_1hT}+G0^^TWCu^w^kc%)T1f@+Ex_g+N=GwIWbt$~S1JD_q7Ty7E5 zNZA#L+p`Tg)jFc_R*1}sDqTB|WDd-V9;Bi!>36arQa2EXty()^J?Spum79)Af;x@f zD=2Ik3^`FIAnWMq$**9HdLzdzAo9}Qc$YN~ z)>?V;#RNp=)%viBAdHfjbo`mBIr`04S3aWQm}E2y3RBo^2$Nn7 z!x@I0izgsxqJ4r=TA|3(xYwM~VQa9gsxlLN7!SGSCjE%tot|FLVuR#kD3RdbeDhbwDXoJZXU=UJD55T|b5?sH%r0!Z#Uvi2 zXNqA#?TcZ>3}BqvtCd-6k7dSZmg4NVld4OG@@CU%%*e&MN-nQd7Y+YX*Ww^Z1%WsX* zP+DY6LGkW9coiYr>N##Cn>Q}oZ5L>9F;$(ZijFZo!Ohn(BS84KU%JV`?+1KrFkNmu zE$-HQPOMBtA^G5_g+;V+dW$A3Su0gk3bD+zrg4i#L#xcCsN8#ts-R61EYOG!6q~k= z;cQ9JI8{}uhMDf%bxzDGvo#q*B*IxPt>aqZrrsJ8%SM?($(zLa5f6q{qw|uyG9Jvh t^qCHM6P_BQ#Mm}wXPC^X^Evk10a){VB;NyRfX&4qUj0hC$O9G;*Y(o0P)Xuq{y&3>>)KCS4M179>z|&6G5t;rK2ft!6X3o8JGgUN!!)=DaT&L{?ScNj55m}Oe(P@W4*fpa`w&TE+L_s zt-a=}M3LnKBKhli6&5>EWv^+0{Ws1Wq}Xx6FrS8U;GMeVGRkz*R(9!-q+J*3QpOH5pyj$tvBV?he_$Hs;Fns4G+TIUXqH?tYcp-ge5fVN;d^DAY98LT z+hb{*;!eVr737A*?J2og3!8nJ<|c9QoWl2b$#(5zH%yPmTo&HLnUb>vY{XcG06sqq z%*4{{lg~OqUJr%4TL?Rwtk7FxZaAK z-)xO@R$#(*h9JgdH5B%YEoYjs>CLu73Nn1jF@{mJT-yhOtjrdU3#jBjdMi55GL>9x z^{&QtjuVt1WyVvJFPCWb6v@qvHV*_=Rv(llIWIE1RYdTj`Hepb8xGeXznsl+XS4SG-tz_ zT!$U7w2R14L6%{yH25>Y0=T6nN2IQ2VmlgLcytgtAdW<36#1siO(Uvt+ERN=*J8P; z*v6eVb|{vGzUr7pXFoA!TjY85U0aIkNR}l=wX&~I5}?9FU6s6c^_GYz(~z{)L6K9} zQHGfEjfs+zV5;Y};IS+-g0q?pBBogw@ualcc)MQSMA$K8ls^zWJxGM31|NoENJ*jI ze6bkXIJ91DX4=`0ZLI2&rB_v47&JvQ!#McZA`Bw%;WIavaIA-8QDn%;ovx~93lnd= zA09j*Nn?G9&#e{pK>64xFE7$>!=m7BAfBTPHlpF!iPeQf=24|Ug|hl-2#HrXlvKS_ z359q>URgdMa)q}nLT9WyhRYRIC@!n3MOf%wra8Rr28!{b2lkqlYpo^oY5I8zg?`K) z3*FhGf@H^LvN*y}=R6e!yYp#W*ojX%Q}UP?s>qK=Iwfb4!n9@?>iM4vtan|S>M0^c zBTI2lZ&>Mp*sj+u_pi$$2*=CotD4evt{kyvzB~k9NdsDXcA2A!Z=OD%FDUr3w`TKq z(QD0Uk3JYMg)wA(OD9KpVg08OvdFm`A*k3hYVPA$l+@HF))HyKl=;TCdL-tuI*E)r zAjWYO=&vjzTIM4dk?@S3Aa`am*q3=UUE*6X=@%qWqHta0{9{nPId0HmlGweig`ARl zB|PV8X0_1`eXvxHhI)7)&3=-nYK<9s#^R%)ZfU)}8ff^>TM}_x)t1R-A)V=E9K#rW z?*Q8qw>c3obO@~~&%Wh{9Wv$9WJ@T-NYAovjf~Qw2+oR{U0Z&Wt}+u&mwlU7nW?iz zsn2rtn}p2Qt8jH$$8V_~v10Ajnr%x{R5Z1#A@Et`Dw5dVT&#+1Z0%?xxt;4!s%q&O zWIOXlh<-x9I)etMHkPWj7p4mwti8O_J%&2L4&=wOha0eQxU^MJ$ksSt1)8@axJ?ojG8Xl1bm3Ni0USSKjbgxsu z^+}|NSq<;K*<}e`y~zhfPL6v&r)$5`}+84;NCjkan=LLiQ&3Xfo-ud8U%2Y9n4-AwAEy_{N%!tA_$#QWzM zQ*7lh+Xr1hDOEjdF5+Oq@uKPP%|4rot<#j|sJ5+MZl?B0!|E_c9Z_=zmYpGTIt4Rk zjG`OSw8(g?V$L5RRWY5Fjoy-XB*x|B_}Q?!S-NgXqM^HPHxpN|zmI;m^Krip#HE}s zv^bNt6>ZjY#;enmpx~(3j4q$d-N!{3ap$5YYq44I*i5T6AI}I8iNo z1T z?QPi=j_jvnD_`4u^7E~jb5^v!H=lHYi}u)(TQ05*dZ;HoF!5Ui7lk^4pL1(W7PVE* zVlARzNm?w|lxgbg9JWQY +#include +#include +#include + +#include + +static double xc_trial_points[][5] = { + /* rhoa rhob sigmaaa sigmaab sigmabb */ + {0.17E+01, 0.17E+01, 0.81E-11, 0.81E-11, 0.81E-11}, + {0.17E+01, 0.17E+01, 0.17E+01, 0.17E+01, 0.17E+01}, + {0.15E+01, 0.15E+01, 0.36E+02, 0.36E+02, 0.36E+02}, + {0.88E-01, 0.88E-01, 0.87E-01, 0.87E-01, 0.87E-01}, + {0.18E+04, 0.18E+04, 0.55E+00, 0.55E+00, 0.55E+00}, + {0.18E+04, 0.18E+04, 0.86E+04, 0.86E+04, 0.86E+04}, + {0.16E+04, 0.16E+04, 0.37E+10, 0.37E+10, 0.37E+10}, + {0.26E+00, 0.26E+00, 0.28E+00, 0.28E+00, 0.28E+00}, + {0.53E+05, 0.53E+05, 0.96E+05, 0.96E+05, 0.96E+05}, + {0.47E+05, 0.47E+05, 0.29E+14, 0.29E+14, 0.29E+14}, + {0.15E+00, 0.15E+00, 0.16E+00, 0.16E+00, 0.16E+00}, + {0.35E+01, 0.00E+00, 0.46E-10, 0.00E+00, 0.00E+00}, + {0.35E+01, 0.00E+00, 0.34E+01, 0.00E+00, 0.00E+00}, + {0.30E+01, 0.00E+00, 0.20E+03, 0.00E+00, 0.00E+00}, + {0.58E-01, 0.00E+00, 0.47E-01, 0.00E+00, 0.00E+00}, + {0.82E+02, 0.81E+02, 0.49E+07, 0.49E+07, 0.49E+07}, + {0.39E+02, 0.38E+02, 0.81E+06, 0.82E+06, 0.82E+06}, + {0.13E+00, 0.95E-01, 0.15E+00, 0.18E+00, 0.22E+00}, + {0.78E-01, 0.31E-01, 0.41E-02, 0.38E-02, 0.36E-02}, + {0.50E+02, 0.49E+02, 0.11E+06, 0.11E+06, 0.11E+06}, + {0.40E+02, 0.40E+02, 0.99E+05, 0.98E+05, 0.98E+05}, + {0.12E+00, 0.10E+00, 0.12E+00, 0.13E+00, 0.14E+00}, + {0.48E-01, 0.25E-01, 0.46E-02, 0.44E-02, 0.41E-02}, + {0.0, 0.0, 0.0, 0.0, 0.0} +}; + + +int nspin; + +void get_val(double point[5], double val[5]) +{ + if(nspin == 1){ + val[0] = point[0] + point[1]; + val[1] = 0; + val[2] = point[2] + 2*point[3] + point[4]; + val[3] = 0; + val[4] = 0; + }else{ + int i; + for(i=0; i<5; i++){ + val[i] = point[i]; + } + } +} + +double get_point(xc_func_type *func, double point[5], double *e, double der[5], int which) +{ + switch(func->info->family) + { + case XC_FAMILY_LDA: + xc_lda_exc_vxc(func, 1, &(point[0]), e, &(der[0])); + break; + case XC_FAMILY_GGA: + case XC_FAMILY_HYB_GGA: + xc_gga_exc_vxc(func, 1, &(point[0]), &(point[2]), + e, &(der[0]), &(der[2])); + break; + } + + if(which == 0) + return (*e)*(point[0] + point[1]); + else + return der[which-1]; +} + +void get_vxc(xc_func_type *func, double point[5], double *e, double der[5]) +{ + get_point(func, point, e, der, 0); +} + +void get_fxc(xc_func_type *func, double point[5], double der[5][5]) +{ + double v2rho[3], v2rhosigma[6], v2sigma[6]; + int i, j; + + for(i=0; i<5; i++) + for(j=0; j<5; j++) + der[i][j] = 0.0; + + for(i=0; i<3; i++) v2rho[i] = 0.0; + for(i=0; i<6; i++){ + v2rhosigma[i] = 0.0; + v2sigma[i] = 0.0; + } + + switch(func->info->family) + { + case XC_FAMILY_LDA: + xc_lda_fxc(func, 1, &(point[0]), v2rho); + break; + case XC_FAMILY_GGA: + case XC_FAMILY_HYB_GGA: + xc_gga_fxc(func, 1, &(point[0]), &(point[2]), + v2rho, v2rhosigma, v2sigma); + break; + } + + der[0][0] = v2rho[0]; + der[0][1] = der[1][0] = v2rho[1]; + der[1][1] = v2rho[2]; + der[0][2] = der[2][0] = v2rhosigma[0]; + der[0][3] = der[3][0] = v2rhosigma[1]; + der[0][4] = der[4][0] = v2rhosigma[2]; + der[1][2] = der[2][1] = v2rhosigma[3]; + der[1][3] = der[3][1] = v2rhosigma[4]; + der[1][4] = der[4][1] = v2rhosigma[5]; + der[2][2] = v2sigma[0]; + der[2][3] = der[3][2] = v2sigma[1]; + der[2][4] = der[4][2] = v2sigma[2]; + der[3][3] = v2sigma[3]; + der[3][4] = der[4][3] = v2sigma[4]; + der[4][4] = v2sigma[5]; +} + +void first_derivative(xc_func_type *func, double point[5], double der[5], int which) +{ + int i; + + for(i=0; i<5; i++){ + const double delta = 5e-10; + + double dd, p[5], v[5]; + int j; + + if(nspin==1 && (i!=0 && i!=2)){ + der[i] = 0.0; + continue; + } + + dd = point[i]*delta; + if(dd < delta) dd = delta; + + for(j=0; j<5; j++) p[j] = point[j]; + + if(point[i]>=3.0*dd){ /* centered difference */ + double e, em1, em2, ep1, ep2; + + p[i] = point[i] + dd; + ep1 = get_point(func, p, &e, v, which); + + p[i] = point[i] + 2*dd; + ep2 = get_point(func, p, &e, v, which); + + p[i] = point[i] - dd; /* backward point */ + em1 = get_point(func, p, &e, v, which); + + p[i] = point[i] - 2*dd; /* backward point */ + em2 = get_point(func, p, &e, v, which); + + der[i] = 1.0/2.0*(ep1 - em1); + der[i] += 1.0/12.0*(em2 - 2*em1 + 2*ep1 - ep2); + + der[i] /= dd; + + }else{ /* we use a 5 point forward difference */ + double e, e1, e2, e3, e4, e5; + + p[i] = point[i]; + e1 = get_point(func, p, &e, v, which); + + p[i] = point[i] + dd; + e2 = get_point(func, p, &e, v, which); + + p[i] = point[i] + 2.0*dd; + e3 = get_point(func, p, &e, v, which); + + p[i] = point[i] + 3.0*dd; + e4 = get_point(func, p, &e, v, which); + + p[i] = point[i] + 4.0*dd; + e5 = get_point(func, p, &e, v, which); + + der[i] = (-e1 + e2); + der[i] -= 1.0/2.0*( e1 - 2*e2 + e3); + der[i] += 1.0/3.0*(-e1 + 3*e2 - 3*e3 + e4); + der[i] -= 1.0/4.0*( e1 - 4*e2 + 6*e3 - 4*e4 + e5); + + der[i] /= dd; + } + } +} + +void second_derivatives(xc_func_type *func, double point[5], double der[5][5]) +{ + int i; + + for(i=0; i<5; i++){ + first_derivative(func, point, der[i], i+1); + } +} + + +void print_error(char *type, char *what, double diff, xc_func_type *func, double *p) +{ + static char *red="\033[31;1m", *norm="\033[0m"; + char *color; + + color = (diff > 5e-4) ? red : norm; + + printf("%s error %s: %s%g%s\n", type, what, color, diff, norm); + + if(func == NULL) return; + + printf(" point (% 8.2e, % 8.2e, % 8.2e, % 8.2e, % 8.2e)\n", + p[0], p[1], p[2], p[3], p[4]); + + if(strcmp(what, "vrho")==0 || strcmp(what, "vsig")==0){ + double e, v_an[5], v_fd[5]; + int j; + + for(j=0; j<5; j++) + v_fd[j] = v_an[j] = 0.0; + + get_vxc(func, p, &e, v_an); + first_derivative(func, p, v_fd, 0); + + if(strcmp(what, "vrho") == 0){ + printf(" analyt (% 8.2e, % 8.2e)\n", v_an[0], v_an[1]); + printf(" fd (% 8.2e, % 8.2e)\n", v_fd[0], v_fd[1]); + } + + if(strcmp(what, "vsig") == 0){ + printf(" analyt (% 8.2e, % 8.2e, % 8.2e)\n", v_an[2], v_an[3], v_an[4]); + printf(" fd (% 8.2e, % 8.2e, % 8.2e)\n", v_fd[2], v_fd[3], v_fd[4]); + } + } + + if(strcmp(what, "v2rho2")==0 || strcmp(what, "v2rhosig")==0 || strcmp(what, "v2sig2")==0){ + double f_an[5][5], f_fd[5][5]; + + get_fxc(func, p, f_an); + second_derivatives(func, p, f_fd); + + if(strcmp(what, "v2rho2") == 0){ + printf(" analyt (% 8.2e, % 8.2e, % 8.2e)\n", f_an[0][0], f_an[0][1], f_an[1][1]); + printf(" fd (% 8.2e, % 8.2e, % 8.2e)\n", f_fd[0][0], f_fd[0][1], f_fd[1][1]); + } + + if(strcmp(what, "v2rhosig") == 0){ + printf(" analyt (% 8.2e, % 8.2e, % 8.2e, % 8.2e, % 8.2e, % 8.2e)\n", + f_an[2][0], f_an[3][0], f_an[4][0], f_an[2][1], f_an[3][1], f_an[4][1]); + printf(" fd (% 8.2e, % 8.2e, % 8.2e, % 8.2e, % 8.2e, % 8.2e)\n", + f_fd[2][0], f_fd[3][0], f_fd[4][0], f_fd[2][1], f_fd[3][1], f_fd[4][1]); + } + + if(strcmp(what, "v2sig2") == 0){ + printf(" analyt (% 8.2e, % 8.2e, % 8.2e, % 8.2e, % 8.2e, % 8.2e)\n", + f_an[2][2], f_an[3][2], f_an[4][2], f_an[3][3], f_an[4][3], f_an[4][4]); + printf(" fd (% 8.2e, % 8.2e, % 8.2e, % 8.2e, % 8.2e, % 8.2e)\n", + f_fd[2][2], f_fd[3][2], f_fd[4][2], f_fd[3][3], f_fd[4][3], f_fd[4][4]); + } + } + +} + +#if defined(HAVE_FEENABLEEXCEPT) +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include +#endif + +void test_functional(int functional) +{ + xc_func_type func; + const xc_func_info_type *info; + int i, j, k, p_max[6][5]; + double max_diff[6][5], avg_diff[6][5], val[5]; + +#if defined(HAVE_FEENABLEEXCEPT) + feenableexcept(FE_INVALID | FE_OVERFLOW); +#endif + + /* initialize functional */ + if(xc_func_init(&func, functional, nspin) != 0){ + fprintf(stderr, "Functional '%d' not found\n", functional); + exit(1); + } + + info = func.info; + + if(functional == XC_LDA_C_2D_PRM) + xc_lda_c_2d_prm_set_params(&func, 10.0); + + for(k=0; k<6; k++) + for(j=0; j<5; j++){ + avg_diff[k][j] = 0.0; + + p_max[k][j] = 0; + max_diff[k][j] = -1.0; + } + + for(i=0; xc_trial_points[i][0]!=0.0; i++){ + double e, v_fd[5], f_fd[5][5], v_an[5], f_an[5][5]; + + for(j=0; j<5; j++) + v_fd[j] = v_an[j] = 0.0; + + get_val(xc_trial_points[i], val); + + /* first, get the analytic gradients */ + get_vxc(&func, val, &e, v_an); + + /* now get the numerical gradients */ + first_derivative(&func, val, v_fd, 0); + + if(info->flags & XC_FLAGS_HAVE_FXC){ + /* initialize */ + for(k=0; k<5; k++) + for(j=0; j<5; j++) + f_an[k][j] = f_fd[k][j] = 0.0; + + /* now get the second derivatives */ + second_derivatives(&func, val, f_fd); + get_fxc(&func, val, f_an); + } + + /* make statistics */ + for(j=0; j<5; j++){ + double diff = fabs(v_an[j] - v_fd[j]); + + /* do not test in case of spin unpolarized or if spin down is zero */ + if((nspin==1 || val[1]==0.0) && (j!=0 && j!=2)) + continue; + + avg_diff[0][j] += diff; + if(diff > max_diff[0][j]){ + max_diff[0][j] = diff; + p_max[0][j] = i; + } + + if(info->flags & XC_FLAGS_HAVE_FXC){ + for(k=0; k<5; k++){ + /* do not test in case of spin unpolarized or if spin down is zero */ + if((nspin==1 || val[1]==0.0) && (k!=0 && k!=2)) + continue; + + diff = fabs(f_an[k][j] - f_fd[k][j]); + + avg_diff[k+1][j] += diff; + if(diff > max_diff[k+1][j]){ + max_diff[k+1][j] = diff; + p_max[k+1][j] = i; + } + } + } + } + + } + + for(k=0; k<6; k++) + for(j=0; j<5; j++){ + avg_diff[k][j] /= i; + } + + /* print statistics */ + { + double diff; + + printf("Functional: %s\n", info->name); + print_error("Avg.", "vrho", (avg_diff[0][0] + avg_diff[0][1])/2.0, NULL, NULL); + j = (max_diff[0][0] > max_diff[0][1]) ? 0 : 1; + get_val(xc_trial_points[p_max[0][j]], val); + print_error("Max.", "vrho", max_diff[0][j], &func, val); + + if(info->family > XC_FAMILY_LDA){ + print_error("Avg.", "vsig", (avg_diff[0][2] + avg_diff[0][3] + avg_diff[0][4])/3.0, NULL, NULL); + j = (max_diff[0][2] > max_diff[0][3]) ? 2 : 3; + j = (max_diff[0][j] > max_diff[0][4]) ? j : 4; + get_val(xc_trial_points[p_max[0][j]], val); + print_error("Max.", "vsig", max_diff[0][j], &func, val); + } + + if(info->flags & XC_FLAGS_HAVE_FXC){ + diff = avg_diff[1][0] + avg_diff[1][1] + avg_diff[2][1]; + diff = diff/3.0; + print_error("Avg.", "v2rho2", diff, NULL, NULL); + if(max_diff[1][0] > max_diff[1][1]) {i=1; j=0;} else {i=1; j=1;} + if(max_diff[2][1] > max_diff[i][j]) {i=2; j=1;} + get_val(xc_trial_points[p_max[i][j]], val); + print_error("Max.", "v2rho2", max_diff[i][j], &func, val); + + if(info->family > XC_FAMILY_LDA){ + diff = avg_diff[3][0] + avg_diff[4][0] + avg_diff[5][0] + avg_diff[3][1] + avg_diff[4][1] + avg_diff[5][1]; + diff = diff/6.0; + print_error("Avg.", "v2rhosig", diff, NULL, NULL); + if(max_diff[3][0] > max_diff[4][0]) {i=3; j=0;} else {i=4; j=0;} + if(max_diff[5][0] > max_diff[i][j]) {i=5; j=0;} + if(max_diff[3][1] > max_diff[i][j]) {i=3; j=1;} + if(max_diff[4][1] > max_diff[i][j]) {i=4; j=1;} + if(max_diff[5][1] > max_diff[i][j]) {i=5; j=1;} + get_val(xc_trial_points[p_max[i][j]], val); + print_error("Max.", "v2rhosig", max_diff[i][j], &func, val); + + diff = avg_diff[3][2] + avg_diff[4][2] + avg_diff[5][2] + avg_diff[4][3] + avg_diff[5][3] + avg_diff[5][4]; + diff = diff/6.0; + print_error("Avg.", "v2sig2", diff, NULL, NULL); + if(max_diff[3][2] > max_diff[4][2]) {i=3; j=2;} else {i=4; j=2;} + if(max_diff[5][2] > max_diff[i][j]) {i=5; j=2;} + if(max_diff[4][3] > max_diff[i][j]) {i=4; j=3;} + if(max_diff[5][3] > max_diff[i][j]) {i=5; j=3;} + if(max_diff[5][4] > max_diff[i][j]) {i=5; j=4;} + get_val(xc_trial_points[p_max[i][j]], val); + print_error("Max.", "v2sig2", max_diff[i][j], &func, val); + } + } + } + + xc_func_end(&func); +} + +/*----------------------------------------------------------*/ +int main(int argc, char *argv[]) +{ + if(argc != 2){ + printf("Usage:\n%s funct\n", argv[0]); + return 1; + } + + printf("------------------------\nNspin = 1\n"); + nspin = 1; + test_functional(atoi(argv[1])); + + printf("------------------------\nNspin = 2\n"); + nspin = 2; + test_functional(atoi(argv[1])); + + return 0; +} diff --git a/libxc-2.2.0/testsuite/xc-error.c b/libxc-2.2.0/testsuite/xc-error.c new file mode 100644 index 000000000..c84001844 --- /dev/null +++ b/libxc-2.2.0/testsuite/xc-error.c @@ -0,0 +1,241 @@ +/* + Copyright (C) 2014 Susi Lehtola + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include +#include +#include "xc_config.h" + +/* Buffer size */ +#define BUFSIZE 4096 + +/* Max amount of columns in data */ +#define MAXCOL 100 +/* Legend entry length */ +#define LEGLEN 20 + +#define error_exit() fclose(in); \ + fclose(ref); \ + exit(1); + +#define in_line() cp=fgets(buf,BUFSIZE,in); \ + if(cp!=buf) { \ + fprintf(stderr,"Error reading line from input file.\n"); \ + error_exit(); \ + } + +#define ref_line() cp=fgets(buf,BUFSIZE,ref); \ + if(cp!=buf) { \ + fprintf(stderr,"Error reading line from reference file.\n"); \ + error_exit(); \ + } + +FLOAT maxabs(FLOAT x, FLOAT y) { + return ABS(x)>ABS(y) ? ABS(x) : ABS(y); +} + +FLOAT error(FLOAT x, FLOAT y) { + return ABS(x-y)/(1.0+maxabs(x,y)); +} + +int main(int argc, char **argv) { + /* Input file and reference */ + FILE *in; + FILE *ref; + + /* Functional IDs */ + int fidin, fidref; + + /* Sizes of input and reference */ + int nin, nref; + + /* Amount of columns read in */ + int cin, cref; + + /* Input buffer */ + char buf[BUFSIZE]; + char *cp; + int cur, nread; + + /* Loop indices */ + int i, j; + + /* Input and reference data */ + FLOAT din[MAXCOL], dref[MAXCOL]; + /* Column legends */ + char legin[MAXCOL][LEGLEN], legref[MAXCOL][LEGLEN]; + + /* Maximum difference between input and output */ + FLOAT maxdiff[MAXCOL]; + + if(argc!=3 && argc!=4) { + printf("Usage: %s file reference (verbose)\n",argv[0]); + return 1; + } + + /* Open files */ + in=fopen(argv[1],"r"); + if(!in) { + fprintf(stderr,"Error opening input file.\n"); + exit(1); + } + + ref=fopen(argv[2],"r"); + if(!ref) { + fprintf(stderr,"Error opening reference file.\n"); + exit(1); + } + + /* Read first line: functional id and file length */ + in_line(); + if(sscanf(buf,"%i %i",&fidin,&nin)!=2) { + fprintf(stderr,"Error reading func_id and file size from input file.\n"); + error_exit(); + } + + ref_line(); + if(sscanf(buf,"%i %i",&fidref,&nref)!=2) { + fprintf(stderr,"Error reading func_id and file size from input file.\n"); + error_exit(); + } + + if(fidin!=fidref) { + fprintf(stderr,"Functional ids %i and %i don't match!\n",fidin,fidref); + error_exit(); + } + + if(nin!=nref) { + fprintf(stderr,"Sizes of files %i and %i don't match!\n",nin,nref); + error_exit(); + } + + /* Read in legends */ + in_line(); + cin=0; + cur=0; + while(sscanf(buf+cur,"%s%n",legin[cin],&nread)==1) { + cin++; + cur+=nread; + + if(cin==MAXCOL) { + fprintf(stderr,"Array overflow. Increase MAXCOL.\n"); + error_exit(); + } + } + + ref_line(); + cref=0; + cur=0; + while(sscanf(buf+cur,"%s%n",legref[cref],&nread)==1) { + cref++; + cur+=nread; + + if(cref==MAXCOL) { + fprintf(stderr,"Array overflow. Increase MAXCOL.\n"); + error_exit(); + } + } + + /* Compare legends */ + if(cin != cref) { + fprintf(stderr,"Amount if columns doesn't match: input %i, reference %i.\n",cin,cref); + error_exit(); + } + for(i=0;i maxdiff[j]) + maxdiff[j]=error(din[j],dref[j]); + } + + fclose(in); + fclose(ref); + + if(argc==4 && atoi(argv[3])) { + /* Verbose operation */ + for(i=0;imax) + max=maxdiff[j]; + + printf("%i\n",max<=tol); + } + + return 0; +} diff --git a/libxc-2.2.0/testsuite/xc-get_data.c b/libxc-2.2.0/testsuite/xc-get_data.c new file mode 100644 index 000000000..082ae67dc --- /dev/null +++ b/libxc-2.2.0/testsuite/xc-get_data.c @@ -0,0 +1,282 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include + +/* xc_config.h needs to be included to use FLOAT and related macros*/ +#include "xc_config.h" + +typedef struct { + int functional; + int nspin; + + /* Input */ + double rho[2]; /* rhoa, rhob */ + double sigma[3]; /* sigmaaa, sigmaab, sigmabb */ + double lapl[2]; /* lapla, laplb */ + double tau[2]; /* taua, taub */ + + /* Energy */ + double zk; /* energy density per unit particle */ + + /* First derivatives */ + double vrho[2]; /* vrhoa, vrhob */ + double vsigma[3]; /* vsigmaaa, vsigmaab, vsigmabb */ + double vlapl[2]; /* vlapla, vlaplb */ + double vtau[2]; /* vtaua, vtaub */ + + /* Second derivatives */ + double v2rho2[3]; /* v2rhoa2, v2rhoab, v2rhob2 */ + double v2rhosigma[6]; /* v2rhoasigmaaa, v2rhoasigmaab, v2rhoasigmabb + v2rhobsigmaaa, v2rhobsigmaab, v2rhobsigmabb */ + double v2rholapl[3]; /* */ + double v2rhotau[3]; /* */ + double v2sigma2[6]; /* v2sigmaaa2, v2sigmaaaab, v2sigmaaabb + v2sigmaab2, v2sigmaabbb, v2sigmabb2 */ + double v2sigmalapl[6]; /* v2sigmaaalapla, v2sigmaaalaplb, + v2sigmaablapla, v2sigmaablaplb, + v2sigmabblapla, v2sigmabblaplb */ + double v2sigmatau[6]; /* v2sigmaaataua, v2sigmaaataub, + v2sigmaabtaua, v2sigmaabtaub, + v2sigmabbtaua, v2sigmabbtaub */ + double v2lapl2[3]; /* v2lapla2, v2laplab, v2laplb2 */ + double v2lapltau[3]; /* */ + double v2tau2[3]; /* v2taua2, v2tauab, v2taub2 */ + + /* Third derivatives */ + double v3rho3[4]; /* v3rhoaaa, v3rhoaab, v3rhoabb, v3rhobbb */ + +} xc_values_type; + +/*----------------------------------------------------------*/ +void init_values(xc_values_type *xc_values, char *argv[]) +{ + int i; + + xc_values->functional = atoi(argv[1]); + xc_values->nspin = atoi(argv[2]); + xc_values->rho[0] = atof(argv[3]); + xc_values->rho[1] = atof(argv[4]); + xc_values->sigma[0] = atof(argv[5]); + xc_values->sigma[1] = atof(argv[6]); + xc_values->sigma[2] = atof(argv[7]); + xc_values->lapl[0] = atof(argv[8]); + xc_values->lapl[1] = atof(argv[9]); + xc_values->tau[0] = atof(argv[10]); + xc_values->tau[1] = atof(argv[11]); + + xc_values->zk = 0; + + for(i=0; i<2; i++){ + xc_values->vrho[i] = 0; + xc_values->vlapl[i] = 0; + xc_values->vtau[i] = 0; + } + + for(i=0; i<3; i++){ + xc_values->vsigma[i] = 0; + xc_values->v2rho2[i] = 0; + xc_values->v2lapl2[i] = 0; + xc_values->v2tau2[i] = 0; + xc_values->v2rholapl[i] = 0; + xc_values->v2rhotau[i] = 0; + xc_values->v2lapltau[i] = 0; + } + + for(i=0; i<4; i++){ + xc_values->v3rho3[i] = 0; + } + + for(i=0; i<6; i++){ + xc_values->v2rhosigma[i] = 0; + xc_values->v2sigma2[i] = 0; + xc_values->v2sigmalapl[i] = 0; + xc_values->v2sigmatau[i] = 0; + } +} + + +/*----------------------------------------------------------*/ +void print_values(xc_values_type *xc) +{ + /*int family = xc_family_from_id(xc->functional, NULL, NULL);*/ + + printf(" rhoa= %#0.2E rhob= %#0.2E sigmaaa= %#0.2E sigmaab= %#0.2E sigmabb= %#0.2E lapla= %#0.2E laplb= %#0.2E taua= %#0.2E taub= %#0.2E\n\n", + xc->rho[0], xc->rho[1], + xc->sigma[0], xc->sigma[1], xc->sigma[2], + xc->lapl[0], xc->lapl[1], + xc->tau[0], xc->tau[1]); + printf(" zk = %#19.12E\n\n", + xc->zk); + printf(" vrhoa = %#19.12E\n" + " vrhob = %#19.12E\n" + " vsigmaaa = %#19.12E\n" + " vsigmaab = %#19.12E\n" + " vsigmabb = %#19.12E\n" + " vlapla = %#19.12E\n" + " vlaplb = %#19.12E\n" + " vtaua = %#19.12E\n" + " vtaub = %#19.12E\n\n", + xc->vrho[0], xc->vrho[1], + xc->vsigma[0], xc->vsigma[1], xc->vsigma[2], + xc->vlapl[0], xc->vlapl[1], + xc->vtau[0], xc->vtau[1]); + + printf(" v2rhoa2 = %#19.12E\n" + " v2rhoab = %#19.12E\n" + " v2rhob2 = %#19.12E\n" + " v2rhoasigmaaa = %#19.12E\n" + " v2rhoasigmaab = %#19.12E\n" + " v2rhoasigmabb = %#19.12E\n" + " v2rhobsigmaaa = %#19.12E\n" + " v2rhobsigmaab = %#19.12E\n" + " v2rhobsigmabb = %#19.12E\n" + " v2sigmaaa2 = %#19.12E\n" + " v2sigmaaaab = %#19.12E\n" + " v2sigmaaabb = %#19.12E\n" + " v2sigmaab2 = %#19.12E\n" + " v2sigmaabbb = %#19.12E\n" + " v2sigmabb2 = %#19.12E\n\n", + xc->v2rho2[0], xc->v2rho2[1], xc->v2rho2[2], + xc->v2rhosigma[0], xc->v2rhosigma[1], xc->v2rhosigma[2], + xc->v2rhosigma[3], xc->v2rhosigma[4], xc->v2rhosigma[5], + xc->v2sigma2[0], xc->v2sigma2[1], xc->v2sigma2[2], + xc->v2sigma2[3], xc->v2sigma2[4], xc->v2sigma2[5] + ); + printf(" v3rhoa3 = %#19.12E\n" + " v2rhoaab = %#19.12E\n" + " v2rhoabb = %#19.12E\n" + " v2rhob3 = %#19.12E\n\n", + xc->v3rho3[0], xc->v3rho3[1], xc->v3rho3[2], xc->v3rho3[3] + ); + +} + + +/*----------------------------------------------------------*/ +int main(int argc, char *argv[]) +{ + xc_values_type xc; + xc_func_type func; + const xc_func_info_type *info; + + FLOAT *pzk = NULL; + FLOAT *pvrho = NULL; + FLOAT *pvsigma = NULL; + FLOAT *pvlapl = NULL; + FLOAT *pvtau = NULL; + FLOAT *pv2rho2 = NULL; + FLOAT *pv2rhosigma = NULL; + FLOAT *pv2rholapl = NULL; + FLOAT *pv2rhotau = NULL; + FLOAT *pv2sigma2 = NULL; + FLOAT *pv2sigmalapl = NULL; + FLOAT *pv2sigmatau = NULL; + FLOAT *pv2lapl2 = NULL; + FLOAT *pv2lapltau = NULL; + FLOAT *pv2tau2 = NULL; + FLOAT *pv3rho3 = NULL; + + if(argc != 12){ + printf("Usage:\n%s funct pol rhoa rhob sigmaaa sigmaab sigmabb lapla laplb taua taub\n", argv[0]); + return 1; + } + + init_values(&xc, argv); + + if(xc.nspin == 1){ + xc.rho[0] += xc.rho[1]; + xc.sigma[0] += 2.0*xc.sigma[1] + xc.sigma[2]; + xc.lapl[0] += xc.lapl[1]; + xc.tau[0] += xc.tau[1]; + } + + if(xc_func_init(&func, xc.functional, xc.nspin) != 0){ + fprintf(stderr, "Functional '%d' not found\n", xc.functional); + exit(1); + } + info = func.info; + + if(info->flags & XC_FLAGS_HAVE_EXC){ + pzk = &xc.zk; + } + if(info->flags & XC_FLAGS_HAVE_VXC){ + pvrho = xc.vrho; + pvsigma = xc.vsigma; + pvlapl = xc.vlapl; + pvtau = xc.vtau; + } + if(info->flags & XC_FLAGS_HAVE_FXC){ + pv2rho2 = xc.v2rho2; + pv2rhosigma = xc.v2rhosigma; + pv2rholapl = xc.v2rholapl; + pv2rhotau = xc.v2rhotau; + pv2sigma2 = xc.v2sigma2; + pv2sigmalapl = xc.v2sigmalapl; + pv2sigmatau = xc.v2sigmatau; + pv2lapl2 = xc.v2lapl2; + pv2lapltau = xc.v2lapltau; + pv2tau2 = xc.v2tau2; + } + if(info->flags & XC_FLAGS_HAVE_KXC){ + pv3rho3 = xc.v3rho3; + } + + switch(func.info->family) + { + case XC_FAMILY_LDA: + xc_lda(&func, 1, xc.rho, pzk, pvrho, pv2rho2, pv3rho3); + break; + + case XC_FAMILY_GGA: + case XC_FAMILY_HYB_GGA: + xc_gga(&func, 1, xc.rho, xc.sigma, + pzk, pvrho, pvsigma, pv2rho2, pv2rhosigma, pv2sigma2, NULL, NULL, NULL, NULL); + break; + + case XC_FAMILY_MGGA: + case XC_FAMILY_HYB_MGGA: + xc_mgga(&func, 1, xc.rho, xc.sigma, xc.lapl, xc.tau, + pzk, pvrho, pvsigma, pvlapl, pvtau, + pv2rho2, pv2sigma2, pv2lapl2, pv2tau2, pv2rhosigma, pv2rholapl, pv2rhotau, pv2sigmalapl, pv2sigmatau, pv2lapltau); + break; + + default: + fprintf(stderr,"Family %i not supported by xc-get_data.\nEnding program.\n",func.info->family); + exit(1); + } + + + xc_func_end(&func); + + if(xc.nspin == 1){ + xc.zk *= xc.rho[0]; + }else{ + xc.zk *= (xc.rho[0] + xc.rho[1]); + } + + + print_values(&xc); + + return 0; +} + diff --git a/libxc-2.2.0/testsuite/xc-reference.pl b/libxc-2.2.0/testsuite/xc-reference.pl new file mode 100755 index 000000000..3a3ffe531 --- /dev/null +++ b/libxc-2.2.0/testsuite/xc-reference.pl @@ -0,0 +1,185 @@ +#!/usr/bin/env perl + +# Copyright (C) 2006-2007 M.A.L. Marques +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +use Getopt::Std; + +getopts("hf:s:b:"); +$opt_h && usage(); +$opt_f || usage(); + +# Handle options +$top_srcdir = ($opt_s ? $opt_s : ".."); +$top_builddir = ($opt_b ? $opt_b : ".."); +$opt_f =~ s/(.*)/\L$1\E/; + +my $tmp_file = "/tmp/xc.tmp.$$"; +my $exec_cmd = "$top_builddir/testsuite/xc-get_data"; + +# start by reading xc.h to get a list of the defined constants +my %constants; +read_xc_h(\%constants); +$constants{"$opt_f"} || die "Functional '$opt_f' not found"; + +# check if we have a data file +my $data_file = "$top_srcdir/testsuite/df_repo/$opt_f.data"; +(-f $data_file && -r $data_file) || die "Could not read data file '$data_file'"; +open DATA, "<$data_file"; + +my %data, $test_ok, $ntest; +$test_ok = 0; +$ntest = 0; + +while(data_read(*DATA, \%data) != 0){ + my $mpol, @cmp; + + $ntest++; + + $mpol = ($data{"rhoa"} == $data{"rhob"} && + $data{"sigmaaa"} == $data{"sigmabb"} && + $data{"sigmaab"} == $data{"sigmabb"}) ? 1 : 2; + $mpol = 2; + + my $ok; + for($pol=2;$pol>=$mpol; $pol--){ + $cmd1 = "$exec_cmd ".$constants{"$opt_f"}; + $cmd2 = " ".$data{"rhoa"}." ".$data{"rhob"}; + $cmd2 .= " ".$data{"sigmaaa"}." ".$data{"sigmaab"}." ".$data{"sigmabb"}; + `$cmd1 $pol $cmd2 >$tmp_file`; + + open DATA2, "<$tmp_file"; + my %data2; + data_read(*DATA2, \%data2) || die "Could not read data file '$tmp_file'"; + close DATA2; + + @cmp = ("zk", "vrhoa", "vsigmaaa"); + if($data2{"v2rhoa2"} != 0.0){ + push @cmp, ("v2rhoa2", "v2rhoasigmaaa", "v2sigmaaa2"); + } + + if($pol == 1){ + my $tmp = $data{"vsigmaaa"}; + $data{"vsigmaaa"} = ($data{"vsigmaaa"} + $data{"vsigmaab"} + $data{"vsigmabb"})/4.0; + + if($data2{"v2rhoa2"} != 0.0){ + #print $data{"v2rhoa2"}, "\n"; + $data{"v2rhoa2"} = ($data{"v2rhoa2"} + $data{"v2rhoab"} + $data{"v2rhobb"})/2.0; + #print $data{"v2rhoa2"}, "\n"; + } + + $ok = cmp_data(\%data, \%data2, \@cmp); + + $data{"vsigmaaa"} = $tmp; + + }else{ + if($data{"rhob"} != 0.0){ + # compare both up and down channels + push @cmp, ("vrhob", "vsigmaab", "vsigmabb"); + if($data2{"v2rhoa2"} != 0.0){ + push @cmp, ("v2rhoab", "v2rhob2", + "v2rhoasigmaab", "v2rhoasigmabb", "v2rhobsigmaaa", "v2rhobsigmaab", "v2rhobsigmabb", + "v2sigmaaaab", "v2sigmaaabb", "v2sigmaab2", "v2sigmaabbb", "v2sigmabb2"); + } + } + + $ok = cmp_data(\%data, \%data2, \@cmp); + } + } + $ok && $test_ok++; +} +close DATA; +unlink $tmp_file; + +exit ($ntest - $test_ok); + + +########################################### +sub usage { + print <. +EndOfUsage + exit 0; +} + + +########################################### +sub read_xc_h { + my $c = shift; + + open FILE, "<$top_builddir/src/xc_funcs.h"; + while($_ = ){ + if(/^#define +(\S*) +(\S*)/){ + my $name = $1; + my $value = $2; + + $name =~ s/^XC_(.*)/\L$1\E/; + $$c{$name} = $value; + } + } + close FILE; +} + +########################################### +sub data_read { + my ($FILE, $data) = @_; + + while( ($line = <$FILE>) && !($line =~ /rhoa/) ){} + $line || return 0; + + $line =~ / rhoa= (\S*) rhob= (\S*) sigmaaa= (\S*) sigmaab= (\S*) sigmabb= (\S*)/; + $$data{"rhoa"} = $1; + $$data{"rhob"} = $2; + $$data{"sigmaaa"} = $3; + $$data{"sigmaab"} = $4; + $$data{"sigmabb"} = $5; + + my $n = 0; + while($n++ < 24){ + $line = <$FILE> || return 0; + $line =~ /\s*(\S*)\s*=\s*(\S*)/; + $$data{$1} = $2; + } + return 1; +} + +sub cmp_data { + my ($d1, $d2, $what) = @_; + my $tol = 1e-10, $all_ok; + + $all_ok = 1; + foreach $var (@$what){ + $ok = (abs($$d1{$var}) < 1e-15 && abs($$d2{$var}) < 1e-15); + if(!$ok){ + $ok = (abs($$d1{$var} - $$d2{$var}) <= $tol*abs($$d1{$var})); + } + if(!$ok){ + print "$var mismatch: ", $$d1{$var}, " != ", $$d2{$var}, "\n"; + } + $all_ok = $all_ok && $ok; + } + return $all_ok; +} diff --git a/libxc-2.2.0/testsuite/xc-regression.c b/libxc-2.2.0/testsuite/xc-regression.c new file mode 100644 index 000000000..78618545e --- /dev/null +++ b/libxc-2.2.0/testsuite/xc-regression.c @@ -0,0 +1,516 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + Copyright (C) 2014 Susi Lehtola + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include + +#include +#include + +/* Buffer size (line length) for file reads */ +#define BUFSIZE 1024 + +typedef struct { + /* Amount of data points */ + int n; + + /* Input: density, gradient, laplacian and kinetic energy density */ + FLOAT *rho; + FLOAT *sigma; + FLOAT *lapl; + FLOAT *tau; + + /* Output: energy density and potentials for density, gradient, laplacian and tau */ + FLOAT *zk; + FLOAT *vrho; + FLOAT *vsigma; + FLOAT *vlapl; + FLOAT *vtau; + + /* ... and second derivatives */ + FLOAT *v2rho2; + FLOAT *v2tau2; + FLOAT *v2lapl2; + FLOAT *v2rhotau; + FLOAT *v2rholapl; + FLOAT *v2lapltau; + FLOAT *v2sigma2; + FLOAT *v2rhosigma; + FLOAT *v2sigmatau; + FLOAT *v2sigmalapl; + + /* ... and third derivatives */ + FLOAT *v3rho3; +} values_t; + +void allocate_memory(values_t *data, int nspin) { + switch(nspin) { + case(XC_UNPOLARIZED): + data->rho=calloc(data->n,sizeof(FLOAT)); + data->sigma=calloc(data->n,sizeof(FLOAT)); + data->lapl=calloc(data->n,sizeof(FLOAT)); + data->tau=calloc(data->n,sizeof(FLOAT)); + data->zk=calloc(data->n,sizeof(FLOAT)); + data->vrho=calloc(data->n,sizeof(FLOAT)); + data->vsigma=calloc(data->n,sizeof(FLOAT)); + data->vlapl=calloc(data->n,sizeof(FLOAT)); + data->vtau=calloc(data->n,sizeof(FLOAT)); + data->v2rho2=calloc(data->n,sizeof(FLOAT)); + data->v2tau2=calloc(data->n,sizeof(FLOAT)); + data->v2lapl2=calloc(data->n,sizeof(FLOAT)); + data->v2rhotau=calloc(data->n,sizeof(FLOAT)); + data->v2rholapl=calloc(data->n,sizeof(FLOAT)); + data->v2lapltau=calloc(data->n,sizeof(FLOAT)); + data->v2sigma2=calloc(data->n,sizeof(FLOAT)); + data->v2rhosigma=calloc(data->n,sizeof(FLOAT)); + data->v2sigmatau=calloc(data->n,sizeof(FLOAT)); + data->v2sigmalapl=calloc(data->n,sizeof(FLOAT)); + data->v3rho3=calloc(data->n,sizeof(FLOAT)); + break; + + case(XC_POLARIZED): + data->rho=calloc(2*data->n,sizeof(FLOAT)); + data->sigma=calloc(3*data->n,sizeof(FLOAT)); + data->lapl=calloc(2*data->n,sizeof(FLOAT)); + data->tau=calloc(2*data->n,sizeof(FLOAT)); + data->zk=calloc(data->n,sizeof(FLOAT)); + data->vrho=calloc(2*data->n,sizeof(FLOAT)); + data->vsigma=calloc(3*data->n,sizeof(FLOAT)); + data->vlapl=calloc(2*data->n,sizeof(FLOAT)); + data->vtau=calloc(2*data->n,sizeof(FLOAT)); + data->v2rho2=calloc(3*data->n,sizeof(FLOAT)); + data->v2tau2=calloc(3*data->n,sizeof(FLOAT)); + data->v2lapl2=calloc(3*data->n,sizeof(FLOAT)); + data->v2rhotau=calloc(4*data->n,sizeof(FLOAT)); + data->v2rholapl=calloc(4*data->n,sizeof(FLOAT)); + data->v2lapltau=calloc(4*data->n,sizeof(FLOAT)); + data->v2sigma2=calloc(6*data->n,sizeof(FLOAT)); + data->v2rhosigma=calloc(6*data->n,sizeof(FLOAT)); + data->v2sigmatau=calloc(6*data->n,sizeof(FLOAT)); + data->v2sigmalapl=calloc(6*data->n,sizeof(FLOAT)); + data->v3rho3=calloc(4*data->n,sizeof(FLOAT)); + break; + + default: + fprintf(stderr,"nspin = %i not recognized.\n",nspin); + exit(2); + } +} + +void free_memory(values_t val) { + free(val.rho); + free(val.sigma); + free(val.lapl); + free(val.tau); + free(val.zk); + free(val.vrho); + free(val.vsigma); + free(val.vlapl); + free(val.vtau); + free(val.v2rho2); + free(val.v2tau2); + free(val.v2lapl2); + free(val.v2rhotau); + free(val.v2rholapl); + free(val.v2lapltau); + free(val.v2sigma2); + free(val.v2rhosigma); + free(val.v2sigmatau); + free(val.v2sigmalapl); + free(val.v3rho3); +} + +values_t read_data(const char *file, int nspin) { + /* Format string */ +#ifdef SINGLE_PRECISION + static const char fmt[]="%f %f %f %f %f %f %f %f %f"; +#else + static const char fmt[]="%lf %lf %lf %lf %lf %lf %lf %lf %lf"; +#endif + + /* Data buffer */ + char buf[BUFSIZE]; + char *cp; + /* Input data file */ + FILE *in; + /* Loop index */ + int i; + /* Amount of points succesfully read */ + int nsucc; + /* Returned data */ + values_t data; + + /* Helper variables */ + FLOAT rhoa, rhob; + FLOAT sigmaaa, sigmaab, sigmabb; + FLOAT lapla, laplb; + FLOAT taua, taub; + + /* Open file */ + in=fopen(file,"r"); + if(!in) { + fprintf(stderr,"Error opening input file %s.\n",file); + exit(3); + } + + /* Read amount of data points */ + cp=fgets(buf,BUFSIZE,in); + if(cp!=buf) { + fprintf(stderr,"Error reading amount of data points.\n"); + exit(5); + } + nsucc=sscanf(buf,"%i",&data.n); + if(nsucc!=1) { + fprintf(stderr,"Error reading amount of input data points.\n"); + exit(4); + } + + /* Allocate memory */ + allocate_memory(&data,nspin); + + for(i=0;iflags; + family=func.info->family; + + /* Set helpers */ + zk = (flags & XC_FLAGS_HAVE_EXC) ? d.zk : NULL; + vrho = (flags & XC_FLAGS_HAVE_VXC) ? d.vrho : NULL; + v2rho2 = (flags & XC_FLAGS_HAVE_FXC) ? d.v2rho2 : NULL; + v3rho3 = (flags & XC_FLAGS_HAVE_KXC) ? d.v3rho3 : NULL; + + /* Evaluate xc functional */ + switch(family) { + case XC_FAMILY_LDA: + XC(lda)(&func, d.n, d.rho, zk, vrho, v2rho2, v3rho3); + break; + case XC_FAMILY_GGA: + case XC_FAMILY_HYB_GGA: + XC(gga)(&func, d.n, d.rho, d.sigma, zk, vrho, d.vsigma, \ + v2rho2, d.v2rhosigma, d.v2sigma2, NULL, NULL, NULL, NULL); + break; + case XC_FAMILY_MGGA: + case XC_FAMILY_HYB_MGGA: + XC(mgga)(&func, d.n, d.rho, d.sigma, d.lapl, d.tau, zk, vrho, d.vsigma, d.vlapl, d.vtau, \ + v2rho2, d.v2sigma2, d.v2lapl2, d.v2tau2, d.v2rhosigma, d.v2rholapl, d.v2rhotau, \ + d.v2sigmalapl, d.v2sigmatau, d.v2lapltau); + break; + + default: + fprintf(stderr,"Support for family %i not implemented.\n",family); + free_memory(d); + exit(1); + } + + + /* Open output file */ + fname = (nspin==XC_POLARIZED) ? argv[3] : argv[4]; + out = fopen(fname,"w"); + if(!out) { + fprintf(stderr,"Error opening output file %s.\n",fname); + free_memory(d); + exit(1); + } + + /* Functional id and amount of lines in output */ + fprintf(out,"%i %i\n",func_id,d.n); + + /* energy */ + if(flags & XC_FLAGS_HAVE_EXC) + fprintf(out,sfmt,"zk"); + + /* LDA part */ + if(nspin==XC_POLARIZED) { + /* first order derivatives */ + if(flags & XC_FLAGS_HAVE_VXC) { + fprintf(out,sfmt2,"vrho(a)","vrho(b)"); + if(family & (XC_FAMILY_GGA | XC_FAMILY_HYB_GGA | XC_FAMILY_MGGA | XC_FAMILY_HYB_MGGA)) + fprintf(out,sfmt3,"vsigma(aa)","vsigma(ab)","vsigma(bb)"); + if(family & (XC_FAMILY_MGGA | XC_FAMILY_HYB_MGGA)) { + fprintf(out,sfmt2,"vlapl(a)","vlapl(b)"); + fprintf(out,sfmt2,"vtau(a)","vtau(b)"); + } + } + + /* second-order derivatives */ + if(flags & XC_FLAGS_HAVE_FXC) { + fprintf(out,sfmt3,"v2rho(aa)","v2rho(ab)","v2rho(bb)"); + if(family & (XC_FAMILY_GGA | XC_FAMILY_HYB_GGA | XC_FAMILY_MGGA | XC_FAMILY_HYB_MGGA)) { + fprintf(out,sfmt3,"v2sigma2(aa-aa)","v2sigma2(aa-ab)","v2sigma2(aa-bb)"); + fprintf(out,sfmt3,"v2sigma2(ab-ab)","v2sigma2(ab-bb)","v2sigma2(bb-bb)"); + fprintf(out,sfmt3,"v2rho(a)sigma(aa)","v2rho(a)sigma(ab)","v2rho(a)sigma(bb)"); + fprintf(out,sfmt3,"v2rho(b)sigma(aa)","v2rho(b)sigma(ab)","v2rho(b)sigma(bb)"); + } + + if(family & (XC_FAMILY_MGGA | XC_FAMILY_HYB_MGGA)) { + fprintf(out,sfmt3,"v2lapl2(aa)","v2lapl2(ab)","v2lapl2(bb)"); + fprintf(out,sfmt3,"v2tau2(aa)","v2tau2(ab)","v2tau2(bb)"); + fprintf(out,sfmt3,"v2rholapl(aa)","v2rholapl(ab)","v2rholapl(bb)"); + fprintf(out,sfmt3,"v2rhotau(aa)","v2rhotau(ab)","v2rhotau(bb)"); + fprintf(out,sfmt3,"v2lapltau(aa)","v2lapltau(ab)","v2lapltau(bb)"); + fprintf(out,sfmt3,"v2sigma(aa)tau(a)","v2sigma(aa)tau(b)","v2sigma(ab)tau(a)"); + fprintf(out,sfmt3,"v2sigma(ab)tau(b)","v2sigma(bb)tau(a)","v2sigma(bb)tau(b)"); + fprintf(out,sfmt3,"v2sigma(aa)lapl(a)","v2sigma(aa)lapl(b)","v2sigma(ab)lapl(a)"); + fprintf(out,sfmt3,"v2sigma(ab)lapl(b)","v2sigma(bb)lapl(a)","v2sigma(bb)lapl(b)"); + } + } + + /* third-order derivatives ... to be done */ + + fprintf(out,"\n"); + + } else { + + /* first order derivatives */ + if(flags & XC_FLAGS_HAVE_VXC) { + fprintf(out,sfmt,"vrho"); + if(family & (XC_FAMILY_GGA | XC_FAMILY_HYB_GGA | XC_FAMILY_MGGA | XC_FAMILY_HYB_MGGA)) + fprintf(out,sfmt,"vsigma"); + if(family & (XC_FAMILY_MGGA | XC_FAMILY_HYB_MGGA)) { + fprintf(out,sfmt,"vlapl"); + fprintf(out,sfmt,"vtau"); + } + } + + /* second-order derivatives */ + if(flags & XC_FLAGS_HAVE_FXC) { + fprintf(out,sfmt,"v2rho"); + if(family & (XC_FAMILY_GGA | XC_FAMILY_HYB_GGA | XC_FAMILY_MGGA | XC_FAMILY_HYB_MGGA)) { + fprintf(out,sfmt,"v2sigma2"); + fprintf(out,sfmt,"v2rhosigma"); + } + + if(family & (XC_FAMILY_MGGA | XC_FAMILY_HYB_MGGA)) { + fprintf(out,sfmt,"v2lapl2"); + fprintf(out,sfmt,"v2tau2"); + fprintf(out,sfmt,"v2rholapl"); + fprintf(out,sfmt,"v2rhotau"); + fprintf(out,sfmt,"v2lapltau"); + fprintf(out,sfmt,"v2sigmatau"); + fprintf(out,sfmt,"v2sigmalapl"); + } + } + + /* third-order derivatives ... to be done */ + + fprintf(out,"\n"); + } + + + /* Loop over data points */ + for(i=0;i $tmpdir/$$.pol_ref + bunzip2 -c $srcdir/regression/$func.unpol.bz2 > $tmpdir/$$.unpol_ref + + $builddir/xc-regression $func $srcdir/input/BrOH+ $tmpdir/$$.pol $tmpdir/$$.unpol > /dev/null + + # Spin-restricted + res=`$builddir/xc-error $tmpdir/$$.unpol $tmpdir/$$.unpol_ref` + if [ "x$res" = "x1" ]; then + echo -ne "\033[32;1mOK" + else + echo -ne "\033[31;1mFAIL" + let fail++ + fi + + # Spin-unrestricted + res=`$builddir/xc-error $tmpdir/$$.pol $tmpdir/$$.pol_ref` + if [ "x$res" = "x1" ]; then + echo -e "\t\033[32;1mOK" + let ok++ + else + echo -e "\t\033[31;1mFAIL" + fi +done +echo -e "\033[0m" + +exit $fail + diff --git a/libxc-2.2.0/xc_version.h b/libxc-2.2.0/xc_version.h new file mode 100644 index 000000000..f23d50806 --- /dev/null +++ b/libxc-2.2.0/xc_version.h @@ -0,0 +1,34 @@ +/* + Copyright (C) 2012 M.A.L. Marques, M. Oliveira + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef _XC_VERSION_H +#define _XC_VERSION_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define XC_VERSION "2.2.0" +#define XC_MAJOR_VERSION 2 +#define XC_MINOR_VERSION 2 + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/libxc-2.2.0/xc_version.h.in b/libxc-2.2.0/xc_version.h.in new file mode 100644 index 000000000..fe18d3f95 --- /dev/null +++ b/libxc-2.2.0/xc_version.h.in @@ -0,0 +1,34 @@ +/* + Copyright (C) 2012 M.A.L. Marques, M. Oliveira + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef _XC_VERSION_H +#define _XC_VERSION_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define XC_VERSION "@VERSION@" +#define XC_MAJOR_VERSION @XC_MAJOR_VERSION@ +#define XC_MINOR_VERSION @XC_MINOR_VERSION@ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/libxc/AUTHORS b/libxc/AUTHORS new file mode 100644 index 000000000..40c4b9b17 --- /dev/null +++ b/libxc/AUTHORS @@ -0,0 +1,12 @@ +The main developing authors of this program consists of + + * Miguel A. L. Marques (marques@tddft.org) + * Micael Oliveira + * Tobias Burnus + +Other contributors are: + + * Georg Madsen (XC_GGA_X_PBEA) + * Xavier Andrade + * David Strubbe + * Susi Lehtola diff --git a/libxc/COPYING b/libxc/COPYING new file mode 100644 index 000000000..fc8a5de7e --- /dev/null +++ b/libxc/COPYING @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/libxc/ChangeLog b/libxc/ChangeLog new file mode 100644 index 000000000..65a5b440b --- /dev/null +++ b/libxc/ChangeLog @@ -0,0 +1,6485 @@ +2014-03-21 11:30 micael + + * [r11913] src/Makefile.am: * Bug fix: libxc soname was not set in + trunk nor in the 2.2.x branch. + +2014-03-21 10:31 micael + + * [r11910] Makefile.am: * Removed the automatic Libxc Changelog + update when creating the tarball. + +2014-03-21 09:40 micael + + * [r11909] testsuite/Makefile.am: * The contents of the + testsuite/inputs directory was missing from the distribution. + +2014-03-21 09:12 micael + + * [r11908] AUTHORS: * Updated Libxc AUTHORS file. + +2014-03-20 13:02 micael + + * [r11901] src/Makefile.am, src/integrate.c, src/libxc_master.F90, + src/mgga_x_2d_prhg07.c, src/mgga_x_br89.c, src/xc_s.h: Backport + of 11896 to branches/libxc-2.2.x: + ------------------------------------------------------------------------ + r11896 | lehtola | 2014-03-20 10:52:45 +0100 (Thu, 20 Mar 2014) | + 1 line + + Fix single precision preprocessor directives. #if clauses + shouldn't be used as the macro is not defined in double precision + mode. + ------------------------------------------------------------------------ + +2014-03-20 12:51 micael + + * [r11900] src/Makefile.am: Backport of 11898 to + branches/libxc-2.2.x: + ------------------------------------------------------------------------ + r11898 | lehtola | 2014-03-20 11:10:23 +0100 (Thu, 20 Mar 2014) | + 1 line + + This should fix the SMP build error. + ------------------------------------------------------------------------ + +2014-03-19 15:07 micael + + * [r11895] ., ChangeLog, configure.ac: * Created libxc 2.2.x + branch. + +2014-03-11 19:56 lehtola + + * [r11866] testsuite/xc-regression.c: Fix icc warning caused by + freeing uninitialized variable. + +2014-03-11 19:32 dstrubbe + + * [r11865] src, testsuite: svn:ignore properties for new libxc + executables. + +2014-03-04 08:52 lehtola + + * [r11859] src/gga_x_wpbeh.c, src/xc_config.h, src/xc_unconfig.h: + Macroize call to erfc in gga_x_wpbeh. + +2014-03-01 13:22 lehtola + + * [r11849] testsuite/xc-regression.c: Use similar output precision + to numerical precision in xc-regression. + +2014-03-01 11:47 lehtola + + * [r11848] testsuite/regression/lda_x.pol.bz2, + testsuite/regression/lda_x.unpol.bz2: Add lda reference files to + avoid compile errors. + +2014-03-01 10:46 lehtola + + * [r11847] testsuite/Makefile.am, testsuite/input, + testsuite/input/BrOH, testsuite/input/BrOH+, testsuite/input/H, + testsuite/input/Li, testsuite/input/README, testsuite/xc-error.c, + testsuite/xc-regression.c, testsuite/xc-reset-regression, + testsuite/xc-run_testsuite: Rewritten test routines. Still need + updated reference data. Reasonable tolerances should be also + determined. + +2014-03-01 10:44 lehtola + + * [r11846] TODO: Add MCY functionals to TODO. + +2014-02-28 23:32 lehtola + + * [r11845] src/expint_e1.c: Use double precision if necessary in + expint_e1. + +2014-02-28 23:20 lehtola + + * [r11844] src/xc_config.h: Fix bug in xc_config.h + +2014-02-27 13:35 lehtola + + * [r11838] src/gga_x_b86_mgc.c, src/gga_x_pbe.c: Remove one unused + variable and fix initialization of PBEmol exchange. + +2014-02-27 08:47 lehtola + + * [r11837] src/util.h: Forgot to modify function declarations for + Bessel functions. + +2014-02-27 08:25 lehtola + + * [r11836] src/bessel.c, src/mgga_x_br89.c: Changed some fabs() to + ABS(). + +2014-02-27 07:27 lehtola + + * [r11835] testsuite/xc-get_data.c: Added missing argument to + fprintf. + +2014-02-26 20:50 lehtola + + * [r11834] src/Makefile.am: Simplify Makefile by pulling out common + declaration per David Strubbe's proposal. + +2014-02-26 20:36 lehtola + + * [r11832] src/Makefile.am: If single precision enabled, double + precision modules still need to be installed. + +2014-02-26 20:26 lehtola + + * [r11831] src/integrate.c, src/lda_x_1d.c, src/test.c, src/util.h: + Last fixes to --enable-single. + +2014-02-26 20:19 lehtola + + * [r11830] src/bessel.c, src/expint_e1.c, src/gga_x_ityh.c, + src/gga_x_sfat.c, src/lda_x_1d.c, src/mgga_x_2d_prhg07.c, + src/test.c, src/util.c, src/util.h: More fixes to + --enable-single. + +2014-02-26 19:47 lehtola + + * [r11829] src/gga_c_ft97.c, src/hyb_mgga_xc_tpssh.c: Reduce scope + of some internal functions to fix --enable-single. + +2014-02-26 19:13 lehtola + + * [r11828] src/gga_x_am05.c, src/special_functions.c, src/util.h: + Multiple precisions of Lambert W function. + +2014-02-26 17:28 lehtola + + * [r11827] src/Makefile.am: Rewrite xc-info and libxcf90 + dependencies. + +2014-02-26 16:21 lehtola + + * [r11826] testsuite/xc-get_data.c: Add support for hybrid mgga + functionals in xc-get_data. + +2014-02-26 16:19 lehtola + + * [r11825] src/Makefile.am, src/xc-info.c: Added xc-info tool. + +2014-02-26 16:15 lehtola + + * [r11824] src/Makefile.am: Fix SMP build. + +2014-02-24 15:15 micael + + * [r11817] src/mgga_x_2d_prhg07.c: Another patch from Susi Lehtola: + mgga_x_2d_prhg07.c uses long double arithmetic, so one should use + long double functions. + +2014-02-24 15:13 micael + + * [r11816] src/gga_c_lm.c, src/gga_c_lyp.c, src/gga_c_p86.c, + src/gga_c_pbe.c, src/gga_c_pw91.c, src/gga_c_sogga11.c, + src/gga_c_tca.c, src/gga_c_wi.c, src/gga_x_2d_b88.c, + src/gga_x_b88.c, src/gga_x_bpccac.c, src/gga_x_c09x.c, + src/gga_x_ft97.c, src/gga_x_lb.c, src/gga_x_pw91.c, + src/gga_x_rpbe.c, src/gga_x_sogga11.c, src/gga_x_wc.c, + src/gga_x_wpbeh.c, src/lda_c_2d_amgb.c, src/lda_c_gombas.c, + src/lda_c_hl.c, src/lda_c_ml1.c, src/lda_c_pw.c, src/lda_c_pz.c, + src/lda_c_rc04.c, src/lda_c_rpa.c, src/lda_c_vwn.c, src/lda_x.c, + src/lda_x_1d.c, src/mgga_c_cs.c, src/mgga_x_br89.c, + src/xc_config.h, src/xc_unconfig.h: Patch from Susi Lehtola to + use correct version of several functions when SINGLE_PRECISION is + in use. + +2014-02-19 16:14 marques + + * [r11814] src/Makefile.am, src/gga_c_ft97.c, src/gga_c_q2d.c, + src/lda_c_2d_amgb.c, src/mgga_xc_otpss_d.c, src/test.c, + src/util.h, src/work_gga_c.c, src/work_lda.c, src/work_mgga_x.c: + Added the correlation part of the gga q2d. I have some doubts + about this as there is at least one clear mistake in the paper + started adding terms for kxc in the ggas. Still most of the terms + are missing. + +2014-02-19 10:13 marques + + * [r11813] src/gga_x_hjs.c, src/gga_x_wpbeh.c, src/mgga_c_pkzb.c, + src/util.h: Fixed a couple of unitialized variables found by + Jussi Lehtola + +2014-02-18 13:13 micael + + * [r11812] NEWS, PACKAGING, configure.ac: * Tagging Libxc version + 2.0.3. + +2014-02-18 12:15 marques + + * [r11811] src/Makefile.am, src/gga_x_q2d.c: Added functional + gga_x_q2d + +2014-02-17 13:17 marques + + * [r11807] src/work_mgga_c.c: Solves the bug that Susi Lehtola + reported for the c_tpss. + +2014-02-17 10:52 marques + + * [r11806] src/hyb_mgga_xc_tpssh.c, src/mgga_c_pkzb.c: Small + correction of reference + Now mgga_xc_revtpssh_init used revtpss correlation + +2014-02-17 10:19 marques + + * [r11805] src/Makefile.am, src/hyb_mgga_xc_tpssh.c: Patch from + Susi Lehtola that implements XC_HYB_MGGA_XC_REVTPSSH and + XC_HYB_MGGA_XC_TPSSH. + +2014-02-05 00:45 dstrubbe + + * [r11745] src/libxc_master.F90: The libxc fortran interface did + not provide the constant XC_FAMILY_HYB_MGGA. + +2014-01-31 08:18 marques + + * [r11694] src/gga_x_lg93.c: Bug fix: variable was not given a + value. It sj=hould be zero, so I guess that most compilers were + actually giving the right number... Thanks David ;) + +2013-12-17 14:42 marques + + * [r11592] src/gga_x_pbe.c: Added the functional GGA_X_PBE_MOL. + Patch by Susi Lehtola. + +2013-12-10 08:35 marques + + * [r11568] src/gga_x_b86.c, src/mgga_x_br89.c: Bug found by Søren + Smidstrup corrected (abs -> ABS) + +2013-11-22 12:06 marques + + * [r11542] src/hyb_gga_xc_pbeh.c: Added variant of PBE0 with + mixing=1/3 + +2013-11-09 04:25 xavier + + * [r11499] testsuite/xc-get_data.c: Converted a C++ style comment + into a C style one. + +2013-11-07 13:06 marques + + * [r11484] src/gga_c_wi.c, src/test.c, src/util.h, + src/work_gga_c.c: First attempt at Kxc for the GGA correlations. + For now, the WI functional is working. This is however a very + simple functional with most of the dependencies missing. A lot of + work is still left... + +2013-11-05 15:15 marques + + * [r11472] src/gga_x_am05.c: Bug fix. David, can you check if the + test is passed now? + +2013-10-30 15:20 marques + + * [r11433] src/gga_x_ssb_sw.c, src/gga_x_vmt.c, src/util.c, + src/util.h: SSB_SW and VMT also have Kxc. I finished all exchange + GGA for which Kxc was relatively simple to calculate. + +2013-10-30 14:41 marques + + * [r11432] src/gga_x_mpbe.c, src/gga_x_optx.c, src/gga_x_sogga11.c, + src/util.c, src/util.h: Kxc for optx, mpbe, sogga11 and variants + +2013-10-30 13:32 marques + + * [r11431] src/gga_x_dk87.c, src/gga_x_lv_rpw86.c, src/util.c, + src/util.h: Added Kxc to lv_rpw86 + added missing flags to dk87 (thanks Micael) + +2013-10-30 12:58 marques + + * [r11430] src/gga_x_herman.c, src/gga_x_lg93.c, src/util.c, + src/util.h: Added Kxc for hermand and lg93 + +2013-10-30 12:30 marques + + * [r11429] src/gga_x_dk87.c, src/util.c, src/util.h: Kxc for + DK87_R1 and DK87_R2 + +2013-10-30 12:17 marques + + * [r11428] src/gga_x_am05.c, src/gga_x_wc.c, src/util.c, + src/util.h: Added Kxc to X_AM05 + +2013-10-22 11:33 marques + + * [r11378] src/mgga_x_ms.c: Updated reference + +2013-10-18 08:14 marques + + * [r11360] src/gga_x_b86_mgc.c, src/gga_x_bpccac.c, + src/gga_x_c09x.c, src/gga_x_htbs.c, src/gga_x_wc.c, src/test.c, + src/util.c, src/util.h: KXC for C08x plus a series of bug + corrections. + +2013-10-18 07:33 marques + + * [r11359] src/gga_x_b86.c, src/gga_x_b86_mgc.c, + src/gga_x_bayesian.c, src/gga_x_bpccac.c, src/test.c, src/util.c, + src/util.h: Added Kxc to B86, B86_MGC, BAYESIAN, and BPCCAC. + +2013-10-17 11:06 marques + + * [r11351] src/work_gga_x.c: Bug fix: had some lines misplaced, so + Fxc and Kxc were badly calculated if (and only if) Vxc was not + calculated. + +2013-10-17 09:55 marques + + * [r11350] src/gga.c, src/gga_x_ak13.c, src/test.c, src/util.h, + src/work_gga_x.c: Added Kxc to AK13 + +2013-10-17 07:28 marques + + * [r11349] src/gga_x_airy.c, src/test.c, src/util.c, src/util.h: + Added Kxc to GGA_X_AIRY + +2013-10-16 14:45 marques + + * [r11342] src/work_gga_x.c: Bug fixed: a factor of 4 too much in + the calculation of Fxc + +2013-10-11 12:39 marques + + * [r11322] src/gga_x_g96.c, src/gga_x_htbs.c, src/gga_x_pw86.c, + src/gga_x_pw91.c, src/gga_x_rpbe.c: Added KXC for X_G96, X_RPBE, + X_HTBS, X_PW86, and X_PW91 + +2013-10-11 11:30 marques + + * [r11321] src/gga_x_wc.c: Added Kxc to X_WC + +2013-10-11 11:20 marques + + * [r11320] src/gga_x_pbe.c: Added Kxc to exchange PBE-like + functionals + +2013-10-11 10:01 marques + + * [r11318] src/gga_x_b88.c: Kxc for B88-like functionals + +2013-10-11 09:45 marques + + * [r11317] src/gga_x_lb.c: Sorry, made an error in the prvious + commit + +2013-10-11 09:44 marques + + * [r11316] src/gga_x_lb.c: This should fix the problem of David. + +2013-10-11 09:42 marques + + * [r11315] src/gga.c, src/gga_x_b86.c, src/test.c, src/util.c, + src/util.h, src/work_gga_x.c: We can now calculate third + derivatives for the exhange GGAs. For now only B86 works. Note + that most tests are failing at the moment. + +2013-10-10 12:03 marques + + * [r11308] TODO, src/gga.c, src/gga_c_op.c, src/gga_k_dk.c, + src/gga_k_meyer.c, src/gga_k_ol1.c, src/gga_k_ol2.c, + src/gga_k_pearson.c, src/gga_k_tflw.c, src/gga_x_2d_b86.c, + src/gga_x_2d_b86_mgc.c, src/gga_x_2d_b88.c, src/gga_x_2d_pbe.c, + src/gga_x_airy.c, src/gga_x_ak13.c, src/gga_x_am05.c, + src/gga_x_b86.c, src/gga_x_b86_mgc.c, src/gga_x_b88.c, + src/gga_x_bayesian.c, src/gga_x_bpccac.c, src/gga_x_c09x.c, + src/gga_x_dk87.c, src/gga_x_g96.c, src/gga_x_herman.c, + src/gga_x_htbs.c, src/gga_x_ityh.c, src/gga_x_lg93.c, + src/gga_x_lv_rpw86.c, src/gga_x_mpbe.c, src/gga_x_optx.c, + src/gga_x_pbe.c, src/gga_x_pbea.c, src/gga_x_pw86.c, + src/gga_x_pw91.c, src/gga_x_rpbe.c, src/gga_x_sfat.c, + src/gga_x_sogga11.c, src/gga_x_ssb_sw.c, src/gga_x_vmt.c, + src/gga_x_wc.c, src/libxc_master.F90, src/mgga_x_m05.c, + src/mgga_x_m06l.c, src/mgga_x_m08.c, src/mix_func.c, src/test.c, + src/util.h, src/work_gga_c.c, src/work_gga_x.c, src/xc.h, + src/xc_f.c, testsuite/xc-get_data.c, testsuite/xc-regression.c: + Started implementing Kxc for the GGAs + +2013-10-10 11:36 micael + + * [r11307] src/gga_k_tflw.c: Added XC_GGA_K_TFVW. + +2013-10-10 11:15 micael + + * [r11306] testsuite/atomic_densities, + testsuite/atomic_densities/H, testsuite/atomic_densities/Li: * + Added atomic densities and corresponding derivatives for H and Li + atoms. + +2013-10-09 13:10 marques + + * [r11304] src/gga_x_pbe.c: Added K_APBEINT and K_REVAPBEINT + +2013-10-09 12:32 marques + + * [r11303] src/gga_x_pbe.c: Added revAPBE for the kinetic energy + +2013-10-04 07:10 marques + + * [r11290] src/libxc_master.F90, src/xc_f.c: Changed function into + subroutine. Apparently, there is no way to keep all compilers + happy when interfacing functions between C and Fortran! + +2013-09-30 19:09 marques + + * [r11284] src/libxc_master.F90: Sorry, there was one line I forgot + to delete + +2013-09-30 18:54 marques + + * [r11283] src/libxc_master.F90: Let's see if it now compiles in + chum + +2013-09-23 09:36 micael + + * [r11280] src/libxc_master.F90, src/xc_f.c: * The C part of the + Fortran interface for the gga_ak13_get_asymptotic function was + missing. + * Made the Fortran name of the gga_ak13_get_asymptotic consistent + with the C name. + +2013-09-23 08:19 micael + + * [r11279] src/libxc_master.F90: * XC_GGA_K_ABSR1 and + XC_GGA_K_ABSR2 should also be included in the Fortran interface. + +2013-09-20 11:49 marques + + * [r11275] src/xc.h: Little think I forgot to save before + committing... + +2013-09-20 11:26 marques + + * [r11274] src/Makefile.am, src/gga_x_ak13.c, src/libxc_master.F90, + src/xc.h: Added exchange functional of Armiento and Kummel that + is becoming so popular + +2013-09-19 15:06 marques + + * [r11270] src/gga_x_ityh.c, src/gga_x_sfat.c, src/lda_x.c, + src/mgga_x_m08.c, src/util.c, src/util.h: A little cleaning: + *) now the names of the attenuation interactions are defined + *) little routine that returns the enhancement factors avoiding + duplicated code + +2013-09-19 14:13 marques + + * [r11269] src/Makefile.am, src/gga_x_sfat.c, + src/hyb_gga_xc_camy_blyp.c, src/lda_x.c, src/xc.h: Submitted + patch by Rolf Wuerdemann implementing CAMY_BLYP + +2013-09-16 12:34 marques + + * [r11261] src/gga_k_meyer.c, src/gga_k_tflw.c, src/xc.h: Changed + name of functional from gga_k_absr(1,2) to gga_k_absp(1,2) + Had forgotten factor of 8 in gga_k_meyer + +2013-09-16 12:29 marques + + * [r11260] src/Makefile.am, src/gga_k_meyer.c: Added another GGA + kinetic energy + +2013-09-16 10:31 micael + + * [r11259] src/gga_k_tflw.c: * A reference was slightly wrong. + +2013-09-13 08:56 marques + + * [r11251] src/hyb_gga_xc_pbeh.c: Added another reference to PBE0 + +2013-09-09 14:53 marques + + * [r11248] src/gga_x_n12.c: N12_SX is a hybrid GGA, not a GGA + +2013-09-09 14:05 marques + + * [r11247] TODO: Another functional for the TODO list + +2013-09-09 09:32 marques + + * [r11246] src/Makefile.am, src/gga_x_ityh.c, src/gga_x_lv_rpw86.c, + src/gga_x_pw86.c, src/util.h: Added functional gga_x_lv_rpw86 + +2013-09-04 16:39 micael + + * [r11235] TODO: Yet another set of missing functionals from libxc. + +2013-09-04 09:59 marques + + * [r11234] src/gga_x_pbe.c: Sorry, a 0 in the wrong place... don't + know how it got there ;) + +2013-09-04 09:49 marques + + * [r11233] src/gga_x_pbe.c: Corrected bug in PBEint + +2013-08-28 09:24 micael + + * [r11176] TODO: Added another missing functional to the TODO list. + +2013-08-22 08:52 micael + + * [r11156] TODO: * Added more missing functionals to the TODO file. + +2013-08-21 16:25 micael + + * [r11155] TODO: * Removed references to already implemented + functionals. + * Added several missing functionals. + +2013-08-21 10:24 marques + + * [r11154] TODO: Forgot to merge TODo + +2013-08-21 09:57 marques + + * [r11153] src/gga_x_bpccac.c, src/gga_x_pbe.c: Buf fixed: bpccac + functional should use a different version of revPBE. People + should be more original with the names of the functionals!!! + Added another revise dversion of PBE, that I called PBE_TCA + +2013-08-20 14:36 marques + + * [r11151] src/gga_x_sogga11.c: Wrong citation + +2013-08-12 13:06 marques + + * [r11105] src/gga_x_pbea.c: Bug fix: the value of alpha of + PBEalpha seems to be 0.52 and not 0.5. Strangely enough the + original routine (with alpha=0.5) had been sent to be by G. + Madsen, the author of the functional. + +2013-08-05 15:09 xavier + + * [r11066] src/Makefile.am, src/util.h, src/xc.h, src/xc_f.c, + src/xc_unconfig.h, testsuite/xc-get_data.c: Bugfix: xc.h was + defining FLOAT and other undocumented macros that + could case name clashes with user code. Now these macros are not + declared. Internal libxc code that uses them needs to include + "xc_config.h" explicitly. + +2013-08-05 15:04 marques + + * [r11065] src/gga_x_pbe.c: Added x_pbeint + +2013-08-05 14:51 marques + + * [r11064] src/gga_c_pbe.c: Added c_PBEint, c_zPBEsol, c_zPBEint + +2013-07-16 16:59 micael + + * [r11011] src/xc_f.c: * Improved the functional_get_name Fortran + interface. + +2013-07-16 16:56 micael + + * [r11010] src/lda_xc_teter93.c: Bug fix: some variable were used + before being set when calculating the second and third + derivatives with spin-polarization. + +2013-07-11 18:39 dstrubbe + + * [r10982] src/Makefile.am: I broke libxc compilation on chum + (older automake/libtool versions) with r10979, by explicitly + referring to the objects produced by libtool. Unfortunately, + their names are not always the same. Surprisingly, + libtool/automake do not seem to provide a macro or variable for + what the object names will be, so we have to extract it + ourselves. LTPREF=libxcf90_la-, or blank for older + libtool/automake versions. + + Produces these warnings on some systems. Does not seem to matter. + + src/Makefile.am:140: subst xc_f.lo,,$(firstword + $(am_libxcf90_la_OBJECTS: non-POSIX variable name + src/Makefile.am:140: (probably a GNU make extension) + +2013-07-11 16:42 dstrubbe + + * [r10979] src/Makefile.am: libxc has had occasional trouble with a + parallel build (make -j). I have tried to fix this before, but + with only partial success. I think this might be real solution. + Dependencies are in terms of the funny objects libtool makes, not + the normal .o files. Dependencies are declared on module files, + and the module files (while not having actual rules) are declared + dependent on the .lo files that will created in the same + compilation that produces the modules. It is necessary to declare + dependencies for both .lo and .o because 'make' and 'make + install' don't both necessary work with the same ones. + +2013-07-11 15:28 micael + + * [r10978] Makefile.am, build/Makefile.am, configure.ac, + m4/fc_integer.m4, m4/fcflags.m4, m4/fortran.m4, src/Makefile.am, + src/libxc_master.F90, src/string_f.h, testsuite/Makefile.am: + Corrected the FSF address in the copyright. + +2013-07-11 13:19 micael + + * [r10975] src/gga_x_kt.c, src/gga_x_ssb_sw.c, src/gga_x_vmt.c, + src/lda_c_2d_prm.c, src/mgga_c_pkzb.c, src/mgga_x_pkzb.c: * + Removed unused variables in libxc. + +2013-07-11 12:50 micael + + * [r10973] src/gga_c_am05.c, src/gga_c_ft97.c, src/gga_c_lm.c, + src/gga_c_lyp.c, src/gga_c_op.c, src/gga_c_optc.c, + src/gga_c_p86.c, src/gga_c_pbe.c, src/gga_c_pw91.c, + src/gga_c_sogga11.c, src/gga_c_tca.c, src/gga_c_wi.c, + src/gga_c_wl.c, src/gga_k_dk.c, src/gga_k_ol1.c, src/gga_k_ol2.c, + src/gga_k_pearson.c, src/gga_k_tflw.c, src/gga_x_2d_b86.c, + src/gga_x_2d_b86_mgc.c, src/gga_x_2d_b88.c, src/gga_x_2d_pbe.c, + src/gga_x_airy.c, src/gga_x_am05.c, src/gga_x_b86.c, + src/gga_x_b86_mgc.c, src/gga_x_b88.c, src/gga_x_bayesian.c, + src/gga_x_bpccac.c, src/gga_x_c09x.c, src/gga_x_dk87.c, + src/gga_x_ft97.c, src/gga_x_g96.c, src/gga_x_herman.c, + src/gga_x_hjs.c, src/gga_x_htbs.c, src/gga_x_ityh.c, + src/gga_x_kt.c, src/gga_x_lb.c, src/gga_x_lg93.c, + src/gga_x_mpbe.c, src/gga_x_n12.c, src/gga_x_optx.c, + src/gga_x_pbe.c, src/gga_x_pbea.c, src/gga_x_pw86.c, + src/gga_x_pw91.c, src/gga_x_rpbe.c, src/gga_x_sogga11.c, + src/gga_x_ssb_sw.c, src/gga_x_vmt.c, src/gga_x_wc.c, + src/gga_x_wpbeh.c, src/gga_xc_1w.c, src/gga_xc_b97.c, + src/gga_xc_edf1.c, src/gga_xc_oblyp_d.c, src/gga_xc_th.c, + src/hyb_gga_xc_b1wc.c, src/hyb_gga_xc_b3lyp.c, + src/hyb_gga_xc_b97.c, src/hyb_gga_xc_cam_b3lyp.c, + src/hyb_gga_xc_hse.c, src/hyb_gga_xc_o3lyp.c, + src/hyb_gga_xc_pbeh.c, src/hyb_mgga_xc_m05.c, src/lda_c_1d_csc.c, + src/lda_c_1d_loos.c, src/lda_c_2d_amgb.c, src/lda_c_2d_prm.c, + src/lda_c_gombas.c, src/lda_c_hl.c, src/lda_c_ml1.c, + src/lda_c_pw.c, src/lda_c_pz.c, src/lda_c_rc04.c, + src/lda_c_rpa.c, src/lda_c_vwn.c, src/lda_c_wigner.c, + src/lda_k_tf.c, src/lda_x.c, src/lda_x_1d.c, src/lda_x_2d.c, + src/lda_xc_teter93.c, src/mgga_xc_otpss_d.c: * Fixed warnings + about missing field initializers. + +2013-07-10 07:59 micael + + * [r10957] NEWS, PACKAGING, configure.ac: * Tagging version 2.0.2 + * Updated ChangeLog, NEWS, etc. + +2013-07-01 13:20 marques + + * [r10929] src/util.c: Making sure we never divide by zero. + Reported by Vittorio Zecca and David. + +2013-07-01 13:15 marques + + * [r10928] src/gga_x_c09x.c, testsuite/xc-consistency.c: *) + Corrected vug in c09x as reported by Lampros Andrinopoulos + *) Corrected bug in xc-consistency + +2013-06-26 16:46 askhl + + * [r10911] src/lda_c_2d_amgb.c: spelling + +2013-06-18 15:05 marques + + * [r10868] src/hyb_gga_xc_b3lyp.c: Added a revised B3LYP + functional. + +2013-06-17 15:05 dstrubbe + + * [r10860] configure.ac, m4/fortran.m4: Updating libxc build system + from octopus changes: + * Replaced obsolete AC_TRY_LINK_FUNC with AC_LINK_IFELSE. + * Removed AC_LANG_PREPROC(Fortran) and imported new ACX_FCCPP and + its dependency ACX_GREP_FCCPP. + Now libxc will make sure that a proper preprocessor for Fortran + is available. + +2013-06-17 05:05 dstrubbe + + * [r10859] m4/acx.m4, m4/fortran.m4: Renaming libxc m4 macro in + accordance with name change in octopus since it was copied in. + This is in preparation for merging recent changes in octopus file + to libxc. + +2013-06-13 13:46 marques + + * [r10847] src/xc.h: Sorry, small mistake in definition. + +2013-06-13 12:51 marques + + * [r10846] src/Makefile.am, src/gga_c_pbe.c, src/gga_xc_oblyp_d.c, + src/mgga_c_pkzb.c, src/mgga_x_tpss.c, src/mgga_xc_otpss_d.c, + src/xc.h: Added a few functionals: + + *) mgga_x_modtpss : tpss with optimized coefficients + *) gga_x_oblyp_d, opwlyp_d, opbe_d, tpss_d : reoptimizations by + Grimme to include dispersion terms. + +2013-05-28 14:42 marques + + * [r10735] src/Makefile.am: Next attempt at compiling in chum. But + can someone update the buggy libtool of this machine? + +2013-05-28 14:35 marques + + * [r10734] src/Makefile.am: Following's Xavier suggestion, I + changed the name of the library to libxcf90 + +2013-05-28 14:29 marques + + * [r10733] src/Makefile.am: I really hate libtools + +2013-05-28 14:18 marques + + * [r10732] src/Makefile.am: Let's see if this fixes compilation + with some slaves + +2013-05-28 13:18 marques + + * [r10730] src/Makefile.am: Following Yann's suggestion, I + separated libxc in two libraries, one containing the actual + library (libxc) and another the Fortran bindings (libxcf). + +2013-05-28 13:11 marques + + * [r10729] src/libxc_master.F90, src/xc_f.c: Patch by Yann + Pouillon: + + Please find attached a patch for LibXC 2.0.1 adding the following + Fortran + wrappers: + + * subroutine xc_f90_functional_get_name(id, name) + * integer function xc_f90_functional_get_number(name) + + that have been requested many times for various projects. In + particular, it + solves the issue of getting a functional number from the + corresponding + description string, avoiding many potential typos in input files + of Fortran + codes. + +2013-05-27 09:58 micael + + * [r10724] src/gga_x_lb.c: Reverting #10345 and #10396. + +2013-05-17 14:27 dstrubbe + + * [r10626] src/lda_c_pw.c, src/mgga_x_tpss.c: Typos in libxc. + +2013-05-17 12:48 marques + + * [r10625] src/gga_x_vmt.c: Added two version of VMT{8,4} + +2013-05-17 11:40 marques + + * [r10624] src/Makefile.am, src/gga_x_vmt.c: Added functional + gga_x_vmt + +2013-05-17 09:33 marques + + * [r10621] src/mgga_x_tpss.c: Added BLOC meta-GGA + +2013-05-13 07:31 marques + + * [r10585] src/lda_x.c: Bug found by Toon Verstraelen fixed. + +2013-04-29 16:59 dstrubbe + + * [r10468] src/Makefile.am: libxc: Fixing dependency that was + poorly written (by me) and could cause "make -j install" to fail. + +2013-04-22 15:16 umberto + + * [r10396] src/gga_x_lb.c: Profiled minimum density values for lb94 + functional. + The value previously set to 5e-13 is now 1e-14. + I haven''t checked against an extensive test set so the threshold + value may not be definitive. + +2013-04-16 10:41 umberto + + * [r10345] src/gga_x_lb.c: Fixes LB94 NaN in TD runs with adsorbing + boundaries. + +2013-03-26 09:29 marques + + * [r10289] src/gga_c_op.c: Small typo found by Xavier Gonze + +2013-02-12 13:20 marques + + * [r9960] src/Makefile.am, src/mgga_c_cc06.c, src/mgga_c_cs.c, + testsuite/regression/mgga_c_cc06.data.bz2, + testsuite/regression/mgga_c_cs.data.bz2: I had forgotten the + Colle and Salvetti functional. It is added now ;) + +2013-02-07 08:45 marques + + * [r9940] src/Makefile.am, src/mgga_x_mk00.c, src/work_mgga_x.c, + testsuite/regression/mgga_x_br89.data.bz2, + testsuite/regression/mgga_x_mk00.data.bz2, + testsuite/regression/mgga_x_mk00b.data.bz2: Added the functionals + MGGA_X_MK00 and MGGA_X_MK00B. Now we have all functionals of + molpro. + Corrected bug in the evaluation of fxc for the metaggas that + depend both in tau and nabla^2 n (only br89 up to now, actually). + +2013-02-06 14:25 marques + + * [r9938] TODO, src/Makefile.am, src/mgga_c_cc06.c, + testsuite/regression/mgga_c_cc06.data.bz2: Added functional + mgga_c_cc06 + +2013-02-05 15:53 marques + + * [r9935] src/mgga_x_m08.c, + testsuite/regression/hyb_mgga_x_m11.data.bz2, + testsuite/regression/mgga_x_m08_hx.data.bz2, + testsuite/regression/mgga_x_m08_so.data.bz2, + testsuite/regression/mgga_x_m11_l.data.bz2: Added the functionals + hyb_mgga_x_m11 and mgga_x_m11_l. I guess that most of the + functionals of Truhlar are now in. + +2013-02-05 13:34 marques + + * [r9934] src/Makefile.am, src/mgga_c_m08.c, + testsuite/regression/mgga_c_m08_hx.data.bz2, + testsuite/regression/mgga_c_m08_so.data.bz2, + testsuite/regression/mgga_c_m11.data.bz2, + testsuite/regression/mgga_c_m11_l.data.bz2, + testsuite/regression/mgga_c_mn12_l.data.bz2, + testsuite/regression/mgga_c_mn12_sx.data.bz2: Added functionals + MGGA_C_M08_HX, MGGA_C_M08_SO, MGGA_C_M11, MGGA_C_M11_L, + MGGA_C_MN12_L, and MGGA_C_MN12_SX + +2013-02-05 11:46 marques + + * [r9933] src/gga_x_n12.c, src/gga_xc_b97.c, src/mgga_x_mn12.c, + testsuite/regression/gga_c_n12.data.bz2, + testsuite/regression/gga_c_n12_sx.data.bz2, + testsuite/regression/gga_x_n12.data.bz2, + testsuite/regression/gga_x_n12_sx.data.bz2, + testsuite/regression/mgga_x_mn12_l.data.bz2, + testsuite/regression/mgga_x_mn12_sx.data.bz2: Added GGA_C_N12 and + GGA_C_N12_SX. + Corrected the spelling of Minnesota. + +2013-02-05 09:31 marques + + * [r9932] src/Makefile.am, src/gga_x_n12.c, + testsuite/regression/gga_x_n12.data.bz2, + testsuite/regression/gga_x_n12_sx.data.bz2: Added the functionals + GGA_X_N12 and GGA_X_N12_SX. Note that the library "Minnesota + Functional Module" seems to have a bug: F1 is initialized, so + Pi=acos(-F1) gets the value of Pi/2 ;((( + +2013-02-04 13:47 marques + + * [r9931] src/hyb_gga_xc_b1wc.c, + testsuite/regression/hyb_gga_xc_mpwlyp1m.data.bz2: Added + hyb_gga_xc_mpwlyp1m + +2013-02-04 13:17 marques + + * [r9930] src/gga_xc_1w.c, src/hyb_mgga_xc_m05.c, + testsuite/regression/mgga_xc_tpsslyp1w.data.bz2: Added + mgga_xc_tpsslyp1w + +2013-02-04 12:34 marques + + * [r9929] src/gga_x_pw91.c, src/hyb_mgga_xc_m05.c, + testsuite/regression/hyb_mgga_xc_pw6b95.data.bz2, + testsuite/regression/hyb_mgga_xc_pwb6k.data.bz2: Added + mgga_xc_pwb6k and mgga_xc_pw6b95 + +2013-02-04 12:16 marques + + * [r9928] src/mgga_c_bc95.c, src/xc.h: Added more flexibility to + Becke95 + +2013-02-04 11:10 marques + + * [r9927] src/gga_x_pw91.c, src/xc.h, + testsuite/regression/gga_c_vpbe.data.bz2, + testsuite/regression/gga_x_mpw91.data.bz2, + testsuite/regression/gga_xc_mpwlyp1w.data.bz2, + testsuite/regression/hyb_gga_xc_mpw1k.data.bz2, + testsuite/regression/hyb_gga_xc_mpw1pw.data.bz2, + testsuite/regression/hyb_gga_xc_mpw3lyp.data.bz2, + testsuite/regression/hyb_gga_xc_mpw3pw.data.bz2, + testsuite/regression/mgga_c_revtpss.data.bz2, + testsuite/regression/mgga_x_mn12_l.data.bz2, + testsuite/regression/mgga_x_mn12_sx.data.bz2: Made PW91 code a + bit more general. + Reset of the testsuite + +2013-02-04 09:43 marques + + * [r9926] src/Makefile.am, src/mgga_x_mn12.c: Added the functionals + MGGA_X_MN12_L and MGGA_X_MN12_SX + +2013-01-23 11:52 marques + + * [r9882] src/libxc_master.F90: Changed the name of a variable and + a comment. Thanks Fabien. + +2013-01-23 09:52 marques + + * [r9881] src/functionals.c, src/hyb_gga_xc_hse.c, + src/hyb_gga_xc_pbeh.c, src/libxc_master.F90, src/xc.h, + src/xc_f.c: Removed interface to _set_cam and _set_exx. + Added interface to set mixing of both pbe0 and hse + +2013-01-23 09:23 marques + + * [r9880] src/gga_c_pbe.c: Corrected reference. Thanks David. + +2013-01-22 13:40 marques + + * [r9879] src/mgga_c_pkzb.c, src/mgga_c_vsxc.c: Added revisedTPSS + correlation + +2013-01-22 13:20 marques + + * [r9877] testsuite/regression/gga_c_ft97.data.bz2, + testsuite/regression/gga_c_optc.data.bz2, + testsuite/regression/gga_c_vpbe.data.bz2, + testsuite/regression/gga_xc_b97.data.bz2, + testsuite/regression/gga_xc_b97_1.data.bz2, + testsuite/regression/gga_xc_b97_2.data.bz2, + testsuite/regression/gga_xc_b97_3.data.bz2, + testsuite/regression/gga_xc_b97_d.data.bz2, + testsuite/regression/gga_xc_b97_gga1.data.bz2, + testsuite/regression/gga_xc_b97_k.data.bz2, + testsuite/regression/gga_xc_hcth_120.data.bz2, + testsuite/regression/gga_xc_hcth_147.data.bz2, + testsuite/regression/gga_xc_hcth_407.data.bz2, + testsuite/regression/gga_xc_hcth_407p.data.bz2, + testsuite/regression/gga_xc_hcth_93.data.bz2, + testsuite/regression/gga_xc_hcth_a.data.bz2, + testsuite/regression/gga_xc_hcth_p14.data.bz2, + testsuite/regression/gga_xc_hcth_p76.data.bz2, + testsuite/regression/gga_xc_sb98_1a.data.bz2, + testsuite/regression/gga_xc_sb98_1b.data.bz2, + testsuite/regression/gga_xc_sb98_1c.data.bz2, + testsuite/regression/gga_xc_sb98_2a.data.bz2, + testsuite/regression/gga_xc_sb98_2b.data.bz2, + testsuite/regression/gga_xc_sb98_2c.data.bz2, + testsuite/regression/hyb_gga_xc_b97.data.bz2, + testsuite/regression/hyb_gga_xc_b97_1.data.bz2, + testsuite/regression/hyb_gga_xc_b97_2.data.bz2, + testsuite/regression/hyb_gga_xc_b97_3.data.bz2, + testsuite/regression/hyb_gga_xc_b97_k.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1a.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1b.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1c.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2a.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2b.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2c.data.bz2, + testsuite/regression/hyb_mgga_xc_b86b95.data.bz2, + testsuite/regression/hyb_mgga_xc_b88b95.data.bz2, + testsuite/regression/hyb_mgga_xc_bb1k.data.bz2, + testsuite/regression/hyb_mgga_xc_m05.data.bz2, + testsuite/regression/hyb_mgga_xc_m05_2x.data.bz2, + testsuite/regression/hyb_mgga_xc_m06.data.bz2, + testsuite/regression/hyb_mgga_xc_m06_2x.data.bz2, + testsuite/regression/hyb_mgga_xc_m06_hf.data.bz2, + testsuite/regression/hyb_mgga_xc_mpw1b95.data.bz2, + testsuite/regression/hyb_mgga_xc_mpwb1k.data.bz2, + testsuite/regression/hyb_mgga_xc_pw86b95.data.bz2, + testsuite/regression/hyb_mgga_xc_x1b95.data.bz2, + testsuite/regression/hyb_mgga_xc_xb1k.data.bz2, + testsuite/regression/mgga_c_bc95.data.bz2, + testsuite/regression/mgga_c_m05.data.bz2, + testsuite/regression/mgga_c_m05_2x.data.bz2, + testsuite/regression/mgga_c_m06.data.bz2, + testsuite/regression/mgga_c_m06_2x.data.bz2, + testsuite/regression/mgga_c_m06_hf.data.bz2, + testsuite/regression/mgga_c_m06_l.data.bz2, + testsuite/regression/mgga_c_pkzb.data.bz2, + testsuite/regression/mgga_c_tpss.data.bz2, + testsuite/regression/mgga_c_vsxc.data.bz2, + testsuite/regression/mgga_x_ms0.data.bz2, + testsuite/regression/mgga_x_ms1.data.bz2, + testsuite/regression/mgga_x_ms2.data.bz2, + testsuite/regression/mgga_x_ms2h.data.bz2: Reset of the testsuite + after all the bug corrections + +2013-01-22 13:15 marques + + * [r9876] src/gga_c_optc.c, src/gga_c_pbe.c, src/gga_x_hjs.c, + src/work_gga_x.c: Added the variant PBE (vPBE) functional. From + my tests this is virtually identical to the PBE. + +2013-01-22 12:25 marques + + * [r9875] src/functionals.c, src/libxc_master.F90, src/xc.h, + src/xc_f.c: Added interfaces to get/set hybrid and cam parameters + +2013-01-21 16:37 micael + + * [r9874] ChangeLog: * Tagging Libxc version 2.0.1. + +2013-01-21 14:40 micael + + * [r9872] src/gga_c_optc.c, src/gga_x_hjs.c: * Some NaN were still + appearing. + +2013-01-21 12:34 marques + + * [r9871] src/mgga_c_pkzb.c: Fixed NaNs in the TPSS and PKZB + +2013-01-21 12:29 marques + + * [r9870] src/gga_x_hjs.c: This fixes the NaNs that were appearing + on the HJS_B88 functional + +2013-01-21 10:23 marques + + * [r9869] src/gga_c_wl.c: No more NaN in gga_c_wl + +2013-01-21 10:11 marques + + * [r9868] src/gga_c_optc.c: No more NaNs in optc ;) + +2013-01-18 22:08 dstrubbe + + * [r9844] .: svn:ignore for new file 'test-driver' + +2013-01-18 08:59 marques + + * [r9839] src/gga_c_optc.c, src/gga_x_hjs.c, src/mgga_x_m08.c: + Small bug fixes. Micael can you check if any of the segfaults + disapears? + +2013-01-16 13:42 marques + + * [r9832] src/Makefile.am, src/gga_c_ft97.c, src/mgga_x_ms.c, + src/test.c: Added new metagga functionals: X_MS0, X_MS1, X_MS2, + and X_MS2H (a hybrid version of MS2) + +2013-01-16 09:47 marques + + * [r9831] src/mgga_c_bc95.c: Still another POLARIZED missing in a + functional that uses the stoll decomposition. + +2013-01-15 15:03 marques + + * [r9828] src/mgga_c_vsxc.c: And again the same error in vsxc + +2013-01-15 13:56 marques + + * [r9827] src/mgga_c_pkzb.c: The same kind of bug was also present + in TPSS. + +2013-01-15 12:47 marques + + * [r9825] src/xc_f.c: Added interface as noted by Fabien Tran. + +2013-01-15 12:43 marques + + * [r9824] src/gga_xc_b97.c: Let's see if this corrects the bug with + B97-like functionals + +2012-12-20 16:06 micael + + * [r9790] src/libxc_master.F90: * Added missing Fortran interface + for xc_f90_version. + +2012-12-07 01:37 dstrubbe + + * [r9743] src/Makefile.am: Adding missing dependencies: full list + of files generated by get_funcs.pl. + +2012-12-03 08:36 marques + + * [r9721] src/util.c: Missing include directive. Thanks David. + +2012-11-30 16:52 dstrubbe + + * [r9699] .: Setting svn:ignore for new file xc_version.h. + +2012-11-28 09:05 micael + + * [r9695] NEWS, PACKAGING, configure.ac: * Tagging version 2.0.0 of + Libxc. + +2012-11-26 14:06 micael + + * [r9694] m4/ac_prog_sed.m4: * The ac_prog_sed.m4 macro was not + included in libxc. + +2012-11-26 13:27 micael + + * [r9692] ChangeLog: * Update libxc ChangeLog. + +2012-11-26 13:02 micael + + * [r9690] Makefile.am, configure.ac, src/Makefile.am, + src/version.c, src/xc.h, src/xc_f.c, xc_version.h.in: * Added + function to return the version information. + * Version information is now also available in a header file. + * Set version number to 2.x + * Added proper libtool versioning. Note that this one works in a + different way than the libxc version number. + +2012-11-23 12:37 marques + + * [r9686] TODO, src/mgga_x_m05.c, src/mgga_x_m06l.c, + testsuite/regression/gga_c_ft97.data.bz2, + testsuite/regression/mgga_x_m06.data.bz2, + testsuite/regression/mgga_x_m06_2x.data.bz2, + testsuite/regression/mgga_x_m06_hf.data.bz2: Small change in the + references + +2012-11-23 12:29 marques + + * [r9685] testsuite/regression/hyb_gga_xc_td_cam_b3lyp.data.bz2, + testsuite/regression/mgga_x_m06l.data.bz2: These two functionals + had changed name + +2012-11-23 12:28 marques + + * [r9684] src/functionals.c: There were some bits missing for the + hyb_mgga family + +2012-11-23 12:28 marques + + * [r9683] testsuite/regression/gga_c_ft97.data.bz2, + testsuite/regression/gga_c_op_b88.data.bz2, + testsuite/regression/gga_c_op_g96.data.bz2, + testsuite/regression/gga_c_op_pbe.data.bz2, + testsuite/regression/gga_c_op_xalpha.data.bz2, + testsuite/regression/gga_c_spbe.data.bz2, + testsuite/regression/gga_x_bpccac.data.bz2, + testsuite/regression/gga_x_lb.data.bz2, + testsuite/regression/gga_x_lbm.data.bz2, + testsuite/regression/gga_x_mpw91.data.bz2, + testsuite/regression/gga_x_ssb.data.bz2, + testsuite/regression/gga_x_ssb_d.data.bz2, + testsuite/regression/gga_x_ssb_sw.data.bz2, + testsuite/regression/gga_xc_b97.data.bz2, + testsuite/regression/gga_xc_b97_1.data.bz2, + testsuite/regression/gga_xc_b97_2.data.bz2, + testsuite/regression/gga_xc_b97_3.data.bz2, + testsuite/regression/gga_xc_b97_d.data.bz2, + testsuite/regression/gga_xc_b97_gga1.data.bz2, + testsuite/regression/gga_xc_b97_k.data.bz2, + testsuite/regression/gga_xc_hcth_120.data.bz2, + testsuite/regression/gga_xc_hcth_147.data.bz2, + testsuite/regression/gga_xc_hcth_407.data.bz2, + testsuite/regression/gga_xc_hcth_407p.data.bz2, + testsuite/regression/gga_xc_hcth_93.data.bz2, + testsuite/regression/gga_xc_hcth_a.data.bz2, + testsuite/regression/gga_xc_hcth_p14.data.bz2, + testsuite/regression/gga_xc_hcth_p76.data.bz2, + testsuite/regression/gga_xc_kt2.data.bz2, + testsuite/regression/gga_xc_mpwlyp1w.data.bz2, + testsuite/regression/gga_xc_sb98_1a.data.bz2, + testsuite/regression/gga_xc_sb98_1b.data.bz2, + testsuite/regression/gga_xc_sb98_1c.data.bz2, + testsuite/regression/gga_xc_sb98_2a.data.bz2, + testsuite/regression/gga_xc_sb98_2b.data.bz2, + testsuite/regression/gga_xc_sb98_2c.data.bz2, + testsuite/regression/hyb_gga_xc_b3pw91.data.bz2, + testsuite/regression/hyb_gga_xc_b97.data.bz2, + testsuite/regression/hyb_gga_xc_b97_1.data.bz2, + testsuite/regression/hyb_gga_xc_b97_2.data.bz2, + testsuite/regression/hyb_gga_xc_b97_3.data.bz2, + testsuite/regression/hyb_gga_xc_b97_k.data.bz2, + testsuite/regression/hyb_gga_xc_mpw1k.data.bz2, + testsuite/regression/hyb_gga_xc_mpw1pw.data.bz2, + testsuite/regression/hyb_gga_xc_mpw3lyp.data.bz2, + testsuite/regression/hyb_gga_xc_mpw3pw.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1a.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1b.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1c.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2a.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2b.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2c.data.bz2, + testsuite/regression/hyb_gga_xc_tuned_cam_b3lyp.data.bz2, + testsuite/regression/hyb_mgga_xc_b86b95.data.bz2, + testsuite/regression/hyb_mgga_xc_b88b95.data.bz2, + testsuite/regression/hyb_mgga_xc_bb1k.data.bz2, + testsuite/regression/hyb_mgga_xc_m05.data.bz2, + testsuite/regression/hyb_mgga_xc_m05_2x.data.bz2, + testsuite/regression/hyb_mgga_xc_m06.data.bz2, + testsuite/regression/hyb_mgga_xc_m06_2x.data.bz2, + testsuite/regression/hyb_mgga_xc_m06_hf.data.bz2, + testsuite/regression/hyb_mgga_xc_mpw1b95.data.bz2, + testsuite/regression/hyb_mgga_xc_mpwb1k.data.bz2, + testsuite/regression/hyb_mgga_xc_pw86b95.data.bz2, + testsuite/regression/hyb_mgga_xc_x1b95.data.bz2, + testsuite/regression/hyb_mgga_xc_xb1k.data.bz2, + testsuite/regression/mgga_c_bc95.data.bz2, + testsuite/regression/mgga_c_m05.data.bz2, + testsuite/regression/mgga_c_m05_2x.data.bz2, + testsuite/regression/mgga_c_m06.data.bz2, + testsuite/regression/mgga_c_m06_2x.data.bz2, + testsuite/regression/mgga_c_m06_hf.data.bz2, + testsuite/regression/mgga_c_m06_l.data.bz2, + testsuite/regression/mgga_c_pkzb.data.bz2, + testsuite/regression/mgga_c_tpss.data.bz2, + testsuite/regression/mgga_c_vsxc.data.bz2, + testsuite/regression/mgga_x_2d_prhg07.data.bz2, + testsuite/regression/mgga_x_2d_prhg07_prp10.data.bz2, + testsuite/regression/mgga_x_bj06.data.bz2, + testsuite/regression/mgga_x_br89.data.bz2, + testsuite/regression/mgga_x_gvt4.data.bz2, + testsuite/regression/mgga_x_lta.data.bz2, + testsuite/regression/mgga_x_m05.data.bz2, + testsuite/regression/mgga_x_m05_2x.data.bz2, + testsuite/regression/mgga_x_m06.data.bz2, + testsuite/regression/mgga_x_m06_2x.data.bz2, + testsuite/regression/mgga_x_m06_hf.data.bz2, + testsuite/regression/mgga_x_m06_l.data.bz2, + testsuite/regression/mgga_x_m08_hx.data.bz2, + testsuite/regression/mgga_x_m08_so.data.bz2, + testsuite/regression/mgga_x_pkzb.data.bz2, + testsuite/regression/mgga_x_revtpss.data.bz2, + testsuite/regression/mgga_x_rpp09.data.bz2, + testsuite/regression/mgga_x_tau_hcth.data.bz2, + testsuite/regression/mgga_x_tb09.data.bz2, + testsuite/regression/mgga_x_tpss.data.bz2: Reset the regression + tests, and added the new functionals + +2012-11-23 12:18 marques + + * [r9682] src/hyb_mgga_xc_m05.c: Sorry, some names were wrong. + +2012-11-23 10:43 marques + + * [r9681] src/hyb_mgga_xc_m05.c: Seems that I forgot this file + +2012-11-23 10:37 marques + + * [r9680] src/Makefile.am, src/gga_x_ityh.c, src/gga_x_pw91.c, + src/gga_xc_1w.c, src/hyb_gga_xc_b1wc.c, src/hyb_gga_xc_b3lyp.c, + src/hyb_gga_xc_o3lyp.c, src/mgga_c_b95.c, src/mgga_c_bc95.c, + src/mgga_x_m05.c: Added a series of hybrid meta-ggas, namely + XC_HYB_MGGA_XC_M05, XC_HYB_MGGA_XC_M05_2X, + XC_HYB_MGGA_XC_BX88B95, XC_HYB_MGGA_XC_BX86B95, + XC_HYB_MGGA_XC_PWX86B95, XC_HYB_MGGA_XC_BB1K, + XC_HYB_MGGA_XC_MPW1B95, XC_HYB_MGGA_XC_MPWB1K, + XC_HYB_MGGA_XC_X1B95, XC_HYB_MGGA_XC_XB1K. + +2012-11-23 08:18 marques + + * [r9679] src/gga.c, src/gga_x_kt.c, src/gga_x_ssb_sw.c, + src/gga_xc_1w.c, src/gga_xc_edf1.c, src/hyb_gga_xc_b1wc.c, + src/hyb_gga_xc_b3lyp.c, src/hyb_gga_xc_b97.c, + src/hyb_gga_xc_cam_b3lyp.c, src/hyb_gga_xc_hse.c, + src/hyb_gga_xc_o3lyp.c, src/hyb_gga_xc_pbeh.c, src/mgga.c, + src/mix_func.c, src/util.c, src/util.h, src/xc.h: Added the + possibility of having MGGAs that are mixtures of other + functionals + +2012-11-22 15:23 marques + + * [r9678] src/work_mgga_x.c: Bug correction: v2rhotau and friends + should ahve 4 entries, not 3, and it is the last one that is the + down-down. + +2012-11-22 14:55 marques + + * [r9677] src/Makefile.am, src/mgga_c_b95.c: Added B95 correlation + +2012-11-22 13:22 marques + + * [r9676] src/Makefile.am, src/gga_c_ft97.c, src/mgga_c_pkzb.c, + src/mgga_c_tpss.c, src/stoll.c, src/util.h: Rewrote the TPSS + correlation. + +2012-11-21 14:21 marques + + * [r9666] src/Makefile.am, src/gga_c_pbe.c, src/mgga_c_pkzb.c, + src/stoll.c, src/util.h: Added the correlation part of PKZB + +2012-11-21 08:41 marques + + * [r9664] src/mgga_c_vsxc.c: Added the correlation part of M05 and + M05-2X. + +2012-11-20 21:42 dstrubbe + + * [r9661] testsuite/xc-consistency.c, testsuite/xc-regression.c: + Removing superfluous and redundant declarations, flagged by + ifort. + +2012-11-20 13:44 marques + + * [r9651] src/gga_xc_b97.c, src/mgga_c_vsxc.c, src/util.h: Added + the correlation part of M06, M06-L, M06-HF, and M06-2x + +2012-11-19 14:31 marques + + * [r9650] src/Makefile.am, src/gga_c_am05.c, src/gga_c_lm.c, + src/gga_c_p86.c, src/gga_c_pbe.c, src/gga_c_pw91.c, + src/gga_c_sogga11.c, src/gga_c_tca.c, src/gga_xc_b97.c, + src/lda_c_1d_csc.c, src/lda_c_1d_loos.c, src/lda_c_2d_amgb.c, + src/lda_c_2d_prm.c, src/lda_c_gombas.c, src/lda_c_hl.c, + src/lda_c_ml1.c, src/lda_c_pw.c, src/lda_c_pz.c, + src/lda_c_rc04.c, src/lda_c_rpa.c, src/lda_c_vwn.c, + src/lda_c_wigner.c, src/lda_k_tf.c, src/lda_x.c, src/lda_x_1d.c, + src/lda_x_2d.c, src/lda_xc_teter93.c, src/mgga_c_vsxc.c, + src/mgga_x_2d_prhg07.c, src/mgga_x_br89.c, src/mgga_x_gvt4.c, + src/mgga_x_lta.c, src/mgga_x_m05.c, src/mgga_x_m06l.c, + src/mgga_x_m08.c, src/mgga_x_pkzb.c, src/mgga_x_tau_hcth.c, + src/mgga_x_tpss.c, src/mgga_xc_vsxc.c, src/stoll.c, src/test.c, + src/util.h, src/work_lda.c, src/work_mgga_c.c, src/work_mgga_x.c: + Rewrote vsxc (correlation part) + +2012-11-19 09:57 marques + + * [r9649] src/Makefile.am, src/gga_xc_b97.c, src/mgga_xc_vsxc.c, + src/stoll.c, src/util.h, src/work_gga_becke.c: Rewrote becke 97 + in order to remove the ugly work_gga_becke that was only used by + one family of functionals. + +2012-11-16 14:10 marques + + * [r9645] src/gga_c_op.c: Silly mistake. + +2012-11-16 08:39 marques + + * [r9644] src/Makefile.am, src/mgga_x_m08.c: Added two M08 + variants, _HX and _SO + +2012-11-15 15:07 marques + + * [r9638] src/mgga_x_m05.c, src/mgga_x_m06l.c, src/util.h: + Reorganize the M05/06 echange functionals and added the exchange + part of m06, m06-hf, and m06-2x + +2012-11-15 13:38 marques + + * [r9637] src/mgga_xc_vsxc.c: Updated constants in vsxc by + comparison with nwchem + +2012-11-15 13:25 marques + + * [r9636] src/Makefile.am, src/mgga_x_m05.c: Added the exchange + part of M05 and M05-2X. + +2012-11-15 09:41 marques + + * [r9635] src/mgga_x_pkzb.c: Sorry the previous constant seemed to + be wrong + +2012-11-15 09:38 marques + + * [r9634] src/mgga_x_pkzb.c: Semms that g95 does not understand + what a constant expression is. + +2012-11-15 08:43 marques + + * [r9633] src/util.h: Missing declaration. Thanks David. + +2012-11-15 08:41 marques + + * [r9632] src/Makefile.am, src/mgga_x_pkzb.c, src/test.c: Added the + exchange part of the PKZB meta-GGA. As a curious notice, I do + remember trying to implement this in 2000, and giving up after + 200 or 300 lines of code because it was too complicated (and did + not give any significant difference in the potential). Today's + routine is 50 lines long and took a couple fo hours to implement. + +2012-11-14 20:16 dstrubbe + + * [r9627] src/lda_x.c: Unused variables. + +2012-11-14 14:28 marques + + * [r9624] src/Makefile.am, src/gga_c_op.c, src/gga_x_g96.c, + src/gga_x_ityh.c, src/util.h: Added a new family of functionals + (one parameter GGAs) + +2012-11-13 07:54 marques + + * [r9607] src/gga_x_lb.c: We treat LB as an exchange functional, + even if technically this is not exactly the case. + +2012-11-12 21:10 marques + + * [r9598] src/hyb_gga_xc_b3lyp.c, src/hyb_gga_xc_b97.c, src/xc.h: + Small inconsistencies found by Tiago Cerqueira. + +2012-11-12 20:23 marques + + * [r9597] src/gga_xc_b97.c, src/lda_c_vwn.c: Two bugs (one large + one small) found by David. Can you please check that your icc + does not complain now? Thanks. + +2012-11-12 14:59 marques + + * [r9596] TODO, src/Makefile.am, src/expint_e1.c, src/gga_c_ft97.c, + src/util.h, src/xc_config.h: Added the Fitalov & Thiel + correlation (GGA). + +2012-11-12 11:09 marques + + * [r9595] src/hyb_gga_xc_cam_b3lyp.c: Renamed TD_CAM_B3LYP to the + correct TUNED_CAM_B3LYP. Thanks Fabien (again). + +2012-10-26 19:31 marques + + * [r9532] src/gga_x_bpccac.c: Very silly mistake. Thanks David. + +2012-10-26 14:26 marques + + * [r9531] src/gga_x_bpccac.c, src/gga_x_pw91.c: According to nwchem + that seems to have contacted directly Carlo Adamo, there is a + small misprint in the mpw91 constants in the original paper. I am + now using the corrected constants. + +2012-10-22 15:54 marques + + * [r9516] src/mgga_x_br89.c: I forgot a couple of factors of 2 in + tb09. Thanks to Marjus Meitern for pointing it out. + +2012-09-26 14:25 marques + + * [r9471] src/gga_c_pbe.c, src/work_gga_c.c: Added functional + XC_GGA_C_SPBE + +2012-09-26 13:34 marques + + * [r9470] src/Makefile.am, src/gga_x_kt.c, src/gga_x_ssb_sw.c, + src/xc.h: Corrected bug in gga_xc_kt2 + Added functionals XC_GGA_X_SSB_SW, XC_GGA_X_SSB, and + XC_GGA_X_SSB_D + +2012-09-25 07:57 marques + + * [r9466] src/hyb_gga_xc_b3lyp.c, src/hyb_gga_xc_o3lyp.c: As I + changed the default interpolation for the VWN_RPA one does not + need to set it explicitly in the hybrids + +2012-09-25 07:56 marques + + * [r9465] testsuite/regression/gga_xc_b97_gga1.data.bz2, + testsuite/regression/gga_xc_hcth_407p.data.bz2, + testsuite/regression/gga_xc_hcth_a.data.bz2, + testsuite/regression/gga_xc_hcth_p14.data.bz2, + testsuite/regression/gga_xc_hcth_p76.data.bz2, + testsuite/regression/lda_c_vwn.data.bz2, + testsuite/regression/lda_c_vwn_1.data.bz2, + testsuite/regression/lda_c_vwn_2.data.bz2, + testsuite/regression/lda_c_vwn_3.data.bz2, + testsuite/regression/lda_c_vwn_4.data.bz2, + testsuite/regression/lda_c_vwn_rpa.data.bz2: Added tests for the + new functional from yesterday and today, and updated the VWN + tests that had changed slightly the title + +2012-09-25 07:52 marques + + * [r9464] src/gga_xc_b97.c, src/lda_c_vwn.c: Implemented all other + versions of VWN (VWN1, VWN2, VWN3, VWN4), besides the 5 and the + RPA that were already there. + +2012-09-24 12:01 marques + + * [r9462] src/gga_xc_b97.c, src/util.h, src/work_gga_becke.c: + Cleaned a bit the B97 functionals and added the functionals + HCTH_A, B97_GGA1, HCTH_P14, HCTH_P76, and HCTH_407P + +2012-09-21 09:45 marques + + * [r9459] testsuite/regression/gga_c_revtca.data.bz2, + testsuite/regression/gga_c_tca.data.bz2, + testsuite/regression/gga_x_bpccac.data.bz2, + testsuite/regression/hyb_gga_xc_mb3lyp_rc04.data.bz2, + testsuite/regression/lda_c_rc04.data.bz2, + testsuite/regression/mgga_c_tpss.data.bz2, + testsuite/regression/mgga_c_vsxc.data.bz2, + testsuite/regression/mgga_x_bj06.data.bz2, + testsuite/regression/mgga_x_br89.data.bz2, + testsuite/regression/mgga_x_m06l.data.bz2, + testsuite/regression/mgga_x_revtpss.data.bz2, + testsuite/regression/mgga_x_rpp09.data.bz2, + testsuite/regression/mgga_x_tb09.data.bz2: I reset the regression + tests. They are not very well chosen for the meta-GGAs, I have to + say... + +2012-09-21 09:42 marques + + * [r9458] src/mgga_c_tpss.c, src/mgga_x_2d_prhg07.c, + src/mgga_x_br89.c, src/mgga_x_lta.c, src/mgga_x_m06l.c, + src/mgga_x_tau_hcth.c, src/mgga_x_tpss.c, src/mgga_xc_vsxc.c, + src/test.c: Changed the definition of tau. Now tau_new = + tau_old/2 + +2012-09-21 09:03 marques + + * [r9457] src/Makefile.am, src/gga_x_bpccac.c, src/gga_x_ityh.c, + src/gga_x_pw91.c, src/util.h: Added a new functional, bpccac + +2012-09-17 09:18 marques + + * [r9434] src/Makefile.am, src/gga_c_tca.c: Added two new GGA + correlation functionals, LTA and revLTA + +2012-09-14 11:30 marques + + * [r9411] src/hyb_gga_xc_b3lyp.c: Added a b3lyp-like hybrid based + on rc04 + +2012-09-14 09:43 marques + + * [r9410] src/Makefile.am, src/lda_c_rc04.c: Added a new lda + correlation functional, Ragot-Cortona + +2012-09-08 15:37 marques + + * [r9376] src/gga_x_wc.c: This should fix the warning David was + getting. + +2012-09-07 13:40 marques + + * [r9365] src/lda_k_tf.c, src/work_gga_x.c, + testsuite/regression/gga_k_absr1.data.bz2, + testsuite/regression/gga_k_absr2.data.bz2, + testsuite/regression/gga_k_apbe.data.bz2, + testsuite/regression/gga_k_baltin.data.bz2, + testsuite/regression/gga_k_dk.data.bz2, + testsuite/regression/gga_k_ernzerhof.data.bz2, + testsuite/regression/gga_k_fr_b88.data.bz2, + testsuite/regression/gga_k_fr_pw86.data.bz2, + testsuite/regression/gga_k_ge2.data.bz2, + testsuite/regression/gga_k_golden.data.bz2, + testsuite/regression/gga_k_gp85.data.bz2, + testsuite/regression/gga_k_gr.data.bz2, + testsuite/regression/gga_k_lc94.data.bz2, + testsuite/regression/gga_k_lieb.data.bz2, + testsuite/regression/gga_k_llp.data.bz2, + testsuite/regression/gga_k_ludena.data.bz2, + testsuite/regression/gga_k_ol1.data.bz2, + testsuite/regression/gga_k_ol2.data.bz2, + testsuite/regression/gga_k_pearson.data.bz2, + testsuite/regression/gga_k_perdew.data.bz2, + testsuite/regression/gga_k_thakkar.data.bz2, + testsuite/regression/gga_k_tw1.data.bz2, + testsuite/regression/gga_k_tw2.data.bz2, + testsuite/regression/gga_k_tw3.data.bz2, + testsuite/regression/gga_k_tw4.data.bz2, + testsuite/regression/gga_k_vjks.data.bz2, + testsuite/regression/gga_k_vsk.data.bz2, + testsuite/regression/gga_k_vw.data.bz2, + testsuite/regression/gga_k_yt65.data.bz2, + testsuite/regression/lda_k_lp.data.bz2, + testsuite/regression/lda_k_tf.data.bz2: Started changing the + definition of tau in libxc. The new tau is the old tau/2, i.e. + now our tau is the correct kinetic energy density. + +2012-09-07 13:28 marques + + * [r9364] src/gga_xc_th.c, + testsuite/regression/gga_c_optc.data.bz2, + testsuite/regression/gga_k_golden.data.bz2, + testsuite/regression/gga_k_lc94.data.bz2, + testsuite/regression/gga_k_lieb.data.bz2, + testsuite/regression/gga_k_ol1.data.bz2, + testsuite/regression/gga_k_ol2.data.bz2, + testsuite/regression/gga_x_ityh.data.bz2, + testsuite/regression/gga_x_ol2.data.bz2, + testsuite/regression/gga_x_rpw86.data.bz2, + testsuite/regression/gga_xc_th1.data.bz2, + testsuite/regression/gga_xc_th2.data.bz2, + testsuite/regression/gga_xc_th3.data.bz2, + testsuite/regression/gga_xc_th4.data.bz2, + testsuite/regression/gga_xc_th_fc.data.bz2, + testsuite/regression/gga_xc_th_fcfo.data.bz2, + testsuite/regression/gga_xc_th_fco.data.bz2, + testsuite/regression/gga_xc_th_fl.data.bz2, + testsuite/regression/hyb_gga_xc_bhandh.data.bz2, + testsuite/regression/hyb_gga_xc_bhandhlyp.data.bz2, + testsuite/regression/hyb_gga_xc_cam_b3lyp.data.bz2, + testsuite/regression/hyb_gga_xc_td_cam_b3lyp.data.bz2, + testsuite/regression/lda_c_1d_loos.data.bz2, + testsuite/regression/mgga_c_tpss.data.bz2, + testsuite/regression/mgga_x_tpss.data.bz2: Reset the regression + tests. Most of the failing cases were trivial (the funny + characters in the reference), but I do not trust much the _th + family for now. + +2012-09-05 18:51 dstrubbe + + * [r9336] m4/fc_integer.m4: m4/fc_integer.m4 in libxc is an exact + copy of the one in Octopus. Therefore, I am backporting my + changes in r9308 and r9309 to libxc, for improved robustness and + ability to cross-compile. + +2012-09-04 23:00 dstrubbe + + * [r9319] src/functionals.c, src/work_gga_c.c: Libxc: + * Fixing an apparent bug from r9215 -- one occurrence of 'order' + was not changed to 'r.order' and as a result was a variable being + used without initialization (which could cause the function to + return without computing). + * Misspelling. + * Fixing apparent mistake in return type, as signalled by the + compiler warning 'missing return statement at end of non-void + function' for xc_hyb_cam_coef. + +2012-09-04 22:29 dstrubbe + + * [r9316] src/gga_k_ol1.c, src/gga_k_ol2.c, src/gga_k_tflw.c, + src/gga_x_pw86.c, src/gga_x_pw91.c: Fixing some peculiar + characters in place of dashes in libxc, which cause this warning + from ifort: invalid multibyte character sequence + +2012-09-04 22:13 xavier + + * [r9314] src/special_functions.c, src/util.h: Moved the definition + of cheb_eval to util.h, so xlc is happy. + +2012-08-01 13:53 marques + + * [r9221] src/lda_x.c: According to some people, one has to write + the attenuation function + differently in order to limit the numerical errors... + +2012-08-01 08:10 marques + + * [r9220] src/gga_x_ityh.c: Corrected what seemed to me as a bug... + +2012-08-01 07:51 marques + + * [r9219] src/Makefile.am, src/lda_c_1d_loos.c: Added a new LDA + functional for 1D systems + +2012-07-27 07:57 micael + + * [r9216] src/mgga_c_tpss.c, src/mgga_x_tpss.c: * Fixed several + bugs in the TPSS functional. + +2012-07-27 07:54 marques + + * [r9215] src/gga_c_am05.c, src/gga_c_lm.c, src/gga_c_lyp.c, + src/gga_c_optc.c, src/gga_c_p86.c, src/gga_c_pbe.c, + src/gga_c_pw91.c, src/gga_c_sogga11.c, src/gga_c_wi.c, + src/gga_c_wl.c, src/gga_xc_th.c, src/util.h, src/work_gga_c.c: + Simplyfied the interfaces to the GGA correlation functionals. + There were + too many arguments, and if one day I do implement kxc, then the + interface would probably be more than 10 lines long! + +2012-07-26 08:18 marques + + * [r9214] src/Makefile.am, src/gga_c_optc.c, src/gga_c_pw91.c, + src/util.h: Added the opc_c GGA functional. + +2012-07-19 11:53 marques + + * [r9205] src/hyb_gga_xc_b1wc.c: Another bug found by Fabien + +2012-07-18 14:02 marques + + * [r9203] src/hyb_gga_xc_cam_b3lyp.c: Bugs found by Fabien. + +2012-07-18 10:55 marques + + * [r9202] src/hyb_gga_xc_b1wc.c: Added Becke Half-and-Half and a + variation of it. These functionals are in Gaussian. + +2012-07-18 08:38 marques + + * [r9201] src/hyb_gga_xc_cam_b3lyp.c: With the debugging of Fabien + maybe CM-B3LYP will work now. + +2012-07-14 21:29 marques + + * [r9199] src/functionals.c, src/xc.h: functional_get_number needs + only a const char * not a char *. Thanks to Jussi Lehtola for + this. + +2012-06-14 13:11 mjv500 + + * [r9123] src/functionals.c, src/xc.h, src/xc_f.c: back to function + for hyb_exx_coeff + +2012-06-14 06:14 mjv500 + + * [r9122] src/functionals.c, src/xc.h, src/xc_f.c: intermediate + patch for libxc interface of hyb_exx_coef - still not fixed. + Miguel, please have a look + +2012-06-06 12:33 marques + + * [r9107] TODO, configure.ac, testsuite/xc-consistency.c: Now + feenableexcept is checked for, to make all your apple lovers + happy. + +2012-06-04 10:22 marques + + * [r9105] src/Makefile.am, src/hyb_gga_xc_cam_b3lyp.c: Added + CAM-B3LYP. Please handle with care, as I am not sure at all of + the actual definition of the functional. + +2012-06-04 07:32 marques + + * [r9103] src/lda_c_2d_prm.c, src/lda_x.c, + testsuite/xc-consistency.c: Small fixes + +2012-06-01 21:30 marques + + * [r9094] src/Makefile.am, src/gga_x_b88.c, src/gga_x_ityh.c, + src/lda_x.c, src/util.h, src/xc.h: Added a generic way to make + short-range exchange GGAs. + +2012-06-01 14:25 marques + + * [r9091] src/functionals.c, src/gga.c, src/gga_x_sogga11.c, + src/hyb_gga_xc_b1wc.c, src/hyb_gga_xc_b3lyp.c, + src/hyb_gga_xc_b97.c, src/hyb_gga_xc_hse.c, + src/hyb_gga_xc_o3lyp.c, src/hyb_gga_xc_pbeh.c, src/xc.h, + testsuite/regression/hyb_gga_xc_hjs_b88.data.bz2, + testsuite/regression/hyb_gga_xc_hjs_b97x.data.bz2, + testsuite/regression/hyb_gga_xc_hjs_pbe.data.bz2, + testsuite/regression/hyb_gga_xc_hjs_pbe_sol.data.bz2, + testsuite/regression/hyb_gga_xc_hse03.data.bz2, + testsuite/regression/hyb_gga_xc_hse06.data.bz2, + testsuite/xc-regression.c: Hope this fixes compilation. + Better interface to CAM functionals + +2012-06-01 13:49 marques + + * [r9090] TODO, src/functionals.c, src/gga.c, src/gga_c_am05.c, + src/gga_c_lm.c, src/gga_c_lyp.c, src/gga_c_p86.c, + src/gga_c_pbe.c, src/gga_c_pw91.c, src/gga_c_sogga11.c, + src/gga_c_wi.c, src/gga_c_wl.c, src/gga_k_dk.c, src/gga_k_ol1.c, + src/gga_k_ol2.c, src/gga_k_pearson.c, src/gga_k_tflw.c, + src/gga_x_2d_b86.c, src/gga_x_2d_b86_mgc.c, src/gga_x_2d_b88.c, + src/gga_x_2d_pbe.c, src/gga_x_airy.c, src/gga_x_am05.c, + src/gga_x_b86.c, src/gga_x_b86_mgc.c, src/gga_x_b88.c, + src/gga_x_bayesian.c, src/gga_x_c09x.c, src/gga_x_dk87.c, + src/gga_x_ft97.c, src/gga_x_g96.c, src/gga_x_herman.c, + src/gga_x_hjs.c, src/gga_x_htbs.c, src/gga_x_kt.c, + src/gga_x_lb.c, src/gga_x_lg93.c, src/gga_x_mpbe.c, + src/gga_x_optx.c, src/gga_x_pbe.c, src/gga_x_pbea.c, + src/gga_x_pw86.c, src/gga_x_pw91.c, src/gga_x_rpbe.c, + src/gga_x_sogga11.c, src/gga_x_wc.c, src/gga_x_wpbeh.c, + src/gga_xc_1w.c, src/gga_xc_b97.c, src/gga_xc_edf1.c, + src/gga_xc_th.c, src/hyb_gga_xc_b1wc.c, src/hyb_gga_xc_b3lyp.c, + src/hyb_gga_xc_b97.c, src/hyb_gga_xc_hse.c, + src/hyb_gga_xc_o3lyp.c, src/hyb_gga_xc_pbeh.c, src/lda.c, + src/lda_c_1d_csc.c, src/lda_c_2d_amgb.c, src/lda_c_2d_prm.c, + src/lda_c_gombas.c, src/lda_c_hl.c, src/lda_c_ml1.c, + src/lda_c_pw.c, src/lda_c_pz.c, src/lda_c_rpa.c, src/lda_c_vwn.c, + src/lda_c_wigner.c, src/lda_k_tf.c, src/lda_x.c, src/lda_x_1d.c, + src/lda_x_2d.c, src/lda_xc_teter93.c, src/libxc_master.F90, + src/mgga.c, src/mgga_c_tpss.c, src/mgga_x_2d_prhg07.c, + src/mgga_x_br89.c, src/mgga_x_lta.c, src/mgga_x_m06l.c, + src/mgga_x_tau_hcth.c, src/mgga_x_tpss.c, src/mgga_xc_vsxc.c, + src/mix_func.c, src/util.h, src/work_gga_becke.c, + src/work_gga_c.c, src/work_gga_x.c, src/work_lda.c, + src/work_mgga_c.c, src/work_mgga_x.c, src/xc.h, src/xc_f.c, + testsuite/regression/gga_x_hjs_b88.data.bz2, + testsuite/regression/gga_x_hjs_b97x.data.bz2, + testsuite/regression/gga_x_hjs_pbe.data.bz2, + testsuite/regression/gga_x_hjs_pbe_sol.data.bz2, + testsuite/regression/hyb_gga_xc_hjs_b88.data.bz2, + testsuite/regression/hyb_gga_xc_hjs_b97x.data.bz2, + testsuite/regression/hyb_gga_xc_hjs_pbe.data.bz2, + testsuite/regression/hyb_gga_xc_hjs_pbe_sol.data.bz2, + testsuite/xc-consistency.c: Spring cleaning in libxc. Got rid of + several code and simplified the structure of the library. + Changed the default screening of the HJS. + +2012-05-31 14:35 marques + + * [r9089] src/gga_x_wpbeh.c: Added another rescaling function (not + used by now) + +2012-05-31 13:08 marques + + * [r9088] testsuite/regression/gga_c_am05.data.bz2, + testsuite/regression/gga_c_apbe.data.bz2, + testsuite/regression/gga_c_lm.data.bz2, + testsuite/regression/gga_c_lyp.data.bz2, + testsuite/regression/gga_c_p86.data.bz2, + testsuite/regression/gga_c_pbe.data.bz2, + testsuite/regression/gga_c_pbe_jrgx.data.bz2, + testsuite/regression/gga_c_pbe_sol.data.bz2, + testsuite/regression/gga_c_pw91.data.bz2, + testsuite/regression/gga_c_rge2.data.bz2, + testsuite/regression/gga_c_sogga11.data.bz2, + testsuite/regression/gga_c_sogga11_x.data.bz2, + testsuite/regression/gga_c_wi.data.bz2, + testsuite/regression/gga_c_wi0.data.bz2, + testsuite/regression/gga_c_wl.data.bz2, + testsuite/regression/gga_c_xpbe.data.bz2, + testsuite/regression/gga_k_gp85.data.bz2, + testsuite/regression/gga_k_ludena.data.bz2, + testsuite/regression/gga_k_ol1.data.bz2, + testsuite/regression/gga_k_ol2.data.bz2, + testsuite/regression/gga_k_thakkar.data.bz2, + testsuite/regression/gga_k_vw.data.bz2, + testsuite/regression/gga_x_am05.data.bz2, + testsuite/regression/gga_x_hjs_b88.data.bz2, + testsuite/regression/gga_x_hjs_b97x.data.bz2, + testsuite/regression/gga_x_hjs_pbe.data.bz2, + testsuite/regression/gga_x_hjs_pbe_sol.data.bz2, + testsuite/regression/gga_x_lag.data.bz2, + testsuite/regression/gga_x_ol2.data.bz2, + testsuite/regression/gga_x_wpbeh.data.bz2, + testsuite/regression/gga_xc_b97.data.bz2, + testsuite/regression/gga_xc_b97_1.data.bz2, + testsuite/regression/gga_xc_b97_2.data.bz2, + testsuite/regression/gga_xc_b97_3.data.bz2, + testsuite/regression/gga_xc_b97_d.data.bz2, + testsuite/regression/gga_xc_b97_k.data.bz2, + testsuite/regression/gga_xc_edf1.data.bz2, + testsuite/regression/gga_xc_hcth_120.data.bz2, + testsuite/regression/gga_xc_hcth_147.data.bz2, + testsuite/regression/gga_xc_hcth_407.data.bz2, + testsuite/regression/gga_xc_hcth_93.data.bz2, + testsuite/regression/gga_xc_mohlyp.data.bz2, + testsuite/regression/gga_xc_mohlyp2.data.bz2, + testsuite/regression/gga_xc_mpwlyp1w.data.bz2, + testsuite/regression/gga_xc_pbe1w.data.bz2, + testsuite/regression/gga_xc_pbelyp1w.data.bz2, + testsuite/regression/gga_xc_sb98_1a.data.bz2, + testsuite/regression/gga_xc_sb98_1b.data.bz2, + testsuite/regression/gga_xc_sb98_1c.data.bz2, + testsuite/regression/gga_xc_sb98_2a.data.bz2, + testsuite/regression/gga_xc_sb98_2b.data.bz2, + testsuite/regression/gga_xc_sb98_2c.data.bz2, + testsuite/regression/gga_xc_th1.data.bz2, + testsuite/regression/gga_xc_th2.data.bz2, + testsuite/regression/gga_xc_th3.data.bz2, + testsuite/regression/gga_xc_th4.data.bz2, + testsuite/regression/gga_xc_th_fc.data.bz2, + testsuite/regression/gga_xc_th_fcfo.data.bz2, + testsuite/regression/gga_xc_th_fco.data.bz2, + testsuite/regression/gga_xc_xlyp.data.bz2, + testsuite/regression/hyb_gga_xc_b1lyp.data.bz2, + testsuite/regression/hyb_gga_xc_b1pw91.data.bz2, + testsuite/regression/hyb_gga_xc_b1wc.data.bz2, + testsuite/regression/hyb_gga_xc_b3lyp.data.bz2, + testsuite/regression/hyb_gga_xc_b3p86.data.bz2, + testsuite/regression/hyb_gga_xc_b3pw91.data.bz2, + testsuite/regression/hyb_gga_xc_b97.data.bz2, + testsuite/regression/hyb_gga_xc_b97_1.data.bz2, + testsuite/regression/hyb_gga_xc_b97_2.data.bz2, + testsuite/regression/hyb_gga_xc_b97_3.data.bz2, + testsuite/regression/hyb_gga_xc_b97_k.data.bz2, + testsuite/regression/hyb_gga_xc_hjs_b88.data.bz2, + testsuite/regression/hyb_gga_xc_hjs_b97x.data.bz2, + testsuite/regression/hyb_gga_xc_hjs_pbe.data.bz2, + testsuite/regression/hyb_gga_xc_hjs_pbe_sol.data.bz2, + testsuite/regression/hyb_gga_xc_hse03.data.bz2, + testsuite/regression/hyb_gga_xc_hse06.data.bz2, + testsuite/regression/hyb_gga_xc_mpw1k.data.bz2, + testsuite/regression/hyb_gga_xc_mpw1pw.data.bz2, + testsuite/regression/hyb_gga_xc_mpw3lyp.data.bz2, + testsuite/regression/hyb_gga_xc_mpw3pw.data.bz2, + testsuite/regression/hyb_gga_xc_o3lyp.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1a.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1b.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1c.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2a.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2b.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2c.data.bz2, + testsuite/regression/hyb_gga_xc_x3lyp.data.bz2, + testsuite/regression/lda_c_xalpha.data.bz2, + testsuite/regression/lda_x.data.bz2, + testsuite/regression/lda_x_1d.data.bz2, + testsuite/regression/mgga_x_2d_prhg07.data.bz2, + testsuite/regression/mgga_x_2d_prhg07_prp10.data.bz2, + testsuite/regression/mgga_x_m06l.data.bz2, + testsuite/regression/mgga_x_tb09.data.bz2: I reset the regression + tests that changed after Micael changed the thresholds for the + functionals. Please next do not forget to reset the regression + tests. + +2012-05-31 12:48 marques + + * [r9087] src/hyb_gga_xc_hse.c: Added the hybrid forms of hjs + +2012-05-31 12:25 marques + + * [r9086] src/lda_x.c, src/util.h: Added the range-separated + exchange LDA + +2012-05-30 09:29 marques + + * [r9085] src/gga_x_wpbeh.c, src/libxc_master.F90: Added fortran + interface to HJS + +2012-05-23 13:03 marques + + * [r9074] src/gga_x_wpbeh.c: Sorry had left a debug line + +2012-05-23 12:45 marques + + * [r9073] src/gga_x_wpbeh.c: A few bugs corrected in HSE + +2012-05-16 14:27 marques + + * [r9071] src/gga_x_hjs.c: Added other versions of this functional. + +2012-05-16 14:14 marques + + * [r9070] src/Makefile.am, src/gga_x_hjs.c, src/util.h, src/xc.h: + Added another short-range form of the PBE + +2012-05-11 15:10 marques + + * [r9069] src/Makefile.am, src/bessel.c, src/expint_e1.c, + src/lda_x_1d.c, src/mgga_x_2d_prhg07.c, src/special_functions.c, + src/test.c, src/util.h: Rewrote the bessel functions in order to + have proper double precision + +2012-05-11 09:08 marques + + * [r9068] src/gga_x_wpbeh.c, src/lda_x_1d.c, + src/special_functions.c, src/util.h: Implemented a more precise + version of the exponential integral + +2012-05-10 11:39 marques + + * [r9065] src/libxc_master.F90, src/xc_f.c: Added Fortran interface + to hse set par routines + +2012-05-10 11:33 marques + + * [r9064] src/hyb_gga_xc_hse.c, src/util.h, src/xc.h: Forgot to + rename a couple of routines + +2012-05-10 11:31 marques + + * [r9063] src/Makefile.am, src/gga_x_pbe_sr.c, src/gga_x_wpbeh.c, + src/hyb_gga_xc_hse.c: Renamed pbe_sr to wpbeh as it is commonly + called. + Now HSE if based on PBEh and not on PBE + +2012-05-07 22:18 marques + + * [r9061] src/hyb_gga_xc_hse.c: Sorry, one c too much + +2012-05-07 21:58 marques + + * [r9060] src/hyb_gga_xc_hse.c, src/util.h, src/xc.h: HSE is an xc + functional, not an x functional + +2012-05-07 09:50 marques + + * [r9059] src/hyb_gga_xc_hse.c: Bug found by F. Bruneval fixed + +2012-05-04 10:00 marques + + * [r9057] src/lda_x.c, src/mgga.c: A couple of bugs found by Micael + +2012-05-04 09:43 marques + + * [r9056] src/mgga_c_tpss.c, src/mgga_x_2d_prhg07.c, + src/mgga_x_br89.c, src/mgga_x_m06l.c: Small bug fixes + +2012-05-03 14:36 marques + + * [r9055] src/hyb_gga_xc_hse.c: Clarified a comment + +2012-05-03 14:07 marques + + * [r9054] src/gga_x_pbe_sr.c: Now xc-consistency tells me that the + derivatives are OK. There was a small bug that I fixed. + +2012-05-03 13:13 marques + + * [r9053] src/Makefile.am, src/gga_x_pbe_sr.c, src/hyb_gga_x_hse.c, + src/hyb_gga_xc_hse.c, src/util.h, src/xc.h: Copied the first + derivatives from espresso and rearranged the code. I still do not + trust the first derivatives, so beware! + +2012-05-02 15:23 marques + + * [r9052] src/hyb_gga_x_hse.c: This should make some C compilers + happy + +2012-05-02 14:31 marques + + * [r9051] src/lda_x.c, src/libxc_master.F90, src/xc_f.c: I better + add some work I had some in the range seperated LDAs, or libxc + will not compile. WARNING, there is a change in the API in order + to add the range separation */ + +2012-05-02 14:29 marques + + * [r9050] src/Makefile.am, src/hyb_gga_x_hse.c, src/util.h, + src/xc.h: Added the exc for the local part of HSE. I shamelessly + adapted the code from espresso. + +2012-04-26 12:36 micael + + * [r9041] README: * More information and some cosmetic changes to + the libxc README file. + +2012-04-25 09:51 marques + + * [r9040] README: Some comments on how the files are organized in + libxc + +2012-04-17 14:48 micael + + * [r9025] src/work_lda.c: * Reverted r9022, as that change is only + valid for exchange functionals. + +2012-04-17 09:56 micael + + * [r9024] testsuite/xc-get_data.c: * Updated xc-get_data utility to + work with MGGA's. + +2012-04-17 08:46 micael + + * [r9023] src/gga_c_am05.c, src/gga_c_lm.c, src/gga_c_lyp.c, + src/gga_c_p86.c, src/gga_c_pbe.c, src/gga_c_pw91.c, + src/gga_c_sogga11.c, src/gga_c_wi.c, src/gga_c_wl.c, + src/gga_k_dk.c, src/gga_k_ol1.c, src/gga_k_ol2.c, + src/gga_k_pearson.c, src/gga_k_tflw.c, src/gga_x_2d_b86.c, + src/gga_x_2d_b86_mgc.c, src/gga_x_2d_b88.c, src/gga_x_2d_pbe.c, + src/gga_x_airy.c, src/gga_x_am05.c, src/gga_x_b86.c, + src/gga_x_b86_mgc.c, src/gga_x_b88.c, src/gga_x_bayesian.c, + src/gga_x_c09x.c, src/gga_x_dk87.c, src/gga_x_ft97.c, + src/gga_x_g96.c, src/gga_x_herman.c, src/gga_x_htbs.c, + src/gga_x_kt.c, src/gga_x_lb.c, src/gga_x_lg93.c, + src/gga_x_mpbe.c, src/gga_x_optx.c, src/gga_x_pbe.c, + src/gga_x_pbea.c, src/gga_x_pw86.c, src/gga_x_pw91.c, + src/gga_x_rpbe.c, src/gga_x_sogga11.c, src/gga_x_wc.c, + src/gga_xc_1w.c, src/gga_xc_b97.c, src/gga_xc_edf1.c, + src/gga_xc_th.c, src/hyb_gga_xc_b1wc.c, src/hyb_gga_xc_b3lyp.c, + src/hyb_gga_xc_b97.c, src/hyb_gga_xc_o3lyp.c, + src/hyb_gga_xc_pbeh.c: Updated GGA and hybrids thresholds. + +2012-04-17 08:45 micael + + * [r9022] src/work_lda.c: * Now vxc[is] is zero if rho[is] is below + threshold. + +2012-04-17 08:43 micael + + * [r9021] src/util.c: * The value of the density is not checked + anymore when calculating zeta, as this should be done outside + this routine. + +2012-04-17 08:40 micael + + * [r9020] src/lda_c_1d_csc.c, src/lda_c_2d_amgb.c, + src/lda_c_2d_prm.c, src/lda_c_gombas.c, src/lda_c_hl.c, + src/lda_c_ml1.c, src/lda_c_pw.c, src/lda_c_pz.c, src/lda_c_rpa.c, + src/lda_c_vwn.c, src/lda_c_wigner.c, src/lda_k_tf.c, src/lda_x.c, + src/lda_x_1d.c, src/lda_x_2d.c, src/lda_xc_teter93.c: * Updated + thresholds for the LDA functionals. + +2012-04-17 08:39 micael + + * [r9019] src/mgga_c_tpss.c: * Bug fix: TPSS correlation was + returning NAN's when the density was zero. + +2012-03-28 13:22 marques + + * [r8942] src/work_gga_becke.c, + testsuite/regression/gga_xc_b97.data.bz2, + testsuite/regression/gga_xc_b97_1.data.bz2, + testsuite/regression/gga_xc_b97_2.data.bz2, + testsuite/regression/gga_xc_b97_3.data.bz2, + testsuite/regression/gga_xc_b97_d.data.bz2, + testsuite/regression/gga_xc_b97_k.data.bz2, + testsuite/regression/gga_xc_hcth_120.data.bz2, + testsuite/regression/gga_xc_hcth_147.data.bz2, + testsuite/regression/gga_xc_hcth_407.data.bz2, + testsuite/regression/gga_xc_hcth_93.data.bz2, + testsuite/regression/gga_xc_sb98_1a.data.bz2, + testsuite/regression/gga_xc_sb98_1b.data.bz2, + testsuite/regression/gga_xc_sb98_1c.data.bz2, + testsuite/regression/gga_xc_sb98_2a.data.bz2, + testsuite/regression/gga_xc_sb98_2b.data.bz2, + testsuite/regression/gga_xc_sb98_2c.data.bz2, + testsuite/regression/hyb_gga_xc_b97.data.bz2, + testsuite/regression/hyb_gga_xc_b97_1.data.bz2, + testsuite/regression/hyb_gga_xc_b97_2.data.bz2, + testsuite/regression/hyb_gga_xc_b97_3.data.bz2, + testsuite/regression/hyb_gga_xc_b97_k.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1a.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1b.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1c.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2a.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2b.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2c.data.bz2: Still one bug + (not the last one, for sure) + +2012-03-28 13:07 marques + + * [r8941] src/mgga_x_br89.c, src/work_gga_becke.c, + testsuite/regression/gga_x_am05.data.bz2, + testsuite/regression/gga_xc_b97.data.bz2, + testsuite/regression/gga_xc_b97_1.data.bz2, + testsuite/regression/gga_xc_b97_2.data.bz2, + testsuite/regression/gga_xc_b97_3.data.bz2, + testsuite/regression/gga_xc_b97_d.data.bz2, + testsuite/regression/gga_xc_b97_k.data.bz2, + testsuite/regression/gga_xc_hcth_120.data.bz2, + testsuite/regression/gga_xc_hcth_147.data.bz2, + testsuite/regression/gga_xc_hcth_407.data.bz2, + testsuite/regression/gga_xc_hcth_93.data.bz2, + testsuite/regression/gga_xc_sb98_1a.data.bz2, + testsuite/regression/gga_xc_sb98_1b.data.bz2, + testsuite/regression/gga_xc_sb98_1c.data.bz2, + testsuite/regression/gga_xc_sb98_2a.data.bz2, + testsuite/regression/gga_xc_sb98_2b.data.bz2, + testsuite/regression/gga_xc_sb98_2c.data.bz2, + testsuite/regression/hyb_gga_xc_b97.data.bz2, + testsuite/regression/hyb_gga_xc_b97_1.data.bz2, + testsuite/regression/hyb_gga_xc_b97_2.data.bz2, + testsuite/regression/hyb_gga_xc_b97_3.data.bz2, + testsuite/regression/hyb_gga_xc_b97_k.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1a.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1b.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1c.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2a.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2b.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2c.data.bz2, + testsuite/regression/mgga_x_bj06.data.bz2, + testsuite/regression/mgga_x_br89.data.bz2, + testsuite/regression/mgga_x_rpp09.data.bz2, + testsuite/regression/mgga_x_tb09.data.bz2: Solved a couple of + bugs that were leading to NaNs in the values of + functionals + +2012-03-27 20:37 dstrubbe + + * [r8933] src/get_funcs.pl, testsuite/xc-reset-regression, + testsuite/xc-run_testsuite: Using the more portable /usr/bin/env + for first line of scripts. Most are doing this already. + +2012-03-22 15:52 micael + + * [r8926] Makefile.am: * Removed DONE file from Makefile. + +2012-03-22 15:31 micael + + * [r8925] PACKAGING, README: * Updated PACKAGING and README files + +2012-03-22 15:30 micael + + * [r8924] AUTHORS, DONE, NEWS: * Updated NEWS and AUTHORS files and + removed the very outdated DONE file. + +2012-03-22 14:05 marques + + * [r8923] ChangeLog: New changelog + +2012-03-09 09:32 micael + + * [r8910] src/mgga_x_br89.c: * Reverted unintended changed. + +2012-03-09 09:30 micael + + * [r8909] src/mgga_x_br89.c: * Updated the thresholds for the BJ06 + and RPP10 functionals. + +2012-02-04 20:50 dstrubbe + + * [r8839] README: Two trivial changes. + +2012-02-03 18:04 micael + + * [r8838] src/gga_c_am05.c, src/gga_c_lm.c, src/gga_c_lyp.c, + src/gga_c_p86.c, src/gga_c_pbe.c, src/gga_c_pw91.c, + src/gga_c_sogga11.c, src/gga_c_wi.c, src/gga_c_wl.c, + src/gga_k_dk.c, src/gga_k_ol1.c, src/gga_k_ol2.c, + src/gga_k_pearson.c, src/gga_k_tflw.c, src/gga_x_2d_b86.c, + src/gga_x_2d_b86_mgc.c, src/gga_x_2d_b88.c, src/gga_x_2d_pbe.c, + src/gga_x_airy.c, src/gga_x_am05.c, src/gga_x_b86.c, + src/gga_x_b86_mgc.c, src/gga_x_b88.c, src/gga_x_bayesian.c, + src/gga_x_c09x.c, src/gga_x_dk87.c, src/gga_x_ft97.c, + src/gga_x_g96.c, src/gga_x_herman.c, src/gga_x_htbs.c, + src/gga_x_kt.c, src/gga_x_lb.c, src/gga_x_lg93.c, + src/gga_x_mpbe.c, src/gga_x_optx.c, src/gga_x_pbe.c, + src/gga_x_pbea.c, src/gga_x_pw86.c, src/gga_x_pw91.c, + src/gga_x_rpbe.c, src/gga_x_sogga11.c, src/gga_x_wc.c, + src/gga_xc_1w.c, src/gga_xc_b97.c, src/gga_xc_edf1.c, + src/gga_xc_th.c, src/hyb_gga_xc_b1wc.c, src/hyb_gga_xc_b3lyp.c, + src/hyb_gga_xc_b97.c, src/hyb_gga_xc_o3lyp.c, + src/hyb_gga_xc_pbeh.c, src/lda_c_1d_csc.c, src/lda_c_2d_amgb.c, + src/lda_c_2d_prm.c, src/lda_c_gombas.c, src/lda_c_hl.c, + src/lda_c_ml1.c, src/lda_c_pw.c, src/lda_c_pz.c, src/lda_c_rpa.c, + src/lda_c_vwn.c, src/lda_c_wigner.c, src/lda_k_tf.c, src/lda_x.c, + src/lda_x_1d.c, src/lda_x_2d.c, src/lda_xc_teter93.c, + src/mgga_c_tpss.c, src/mgga_x_2d_prhg07.c, src/mgga_x_br89.c, + src/mgga_x_lta.c, src/mgga_x_m06l.c, src/mgga_x_tau_hcth.c, + src/mgga_x_tpss.c, src/mgga_xc_vsxc.c, src/work_gga_becke.c, + src/work_gga_c.c, src/work_gga_x.c, src/work_lda.c, + src/work_mgga_c.c, src/work_mgga_x.c, src/xc.h: * The thresholds + of the density, density gradient, and kinetic energy density are + now part of the definition of a functional. + The idea is that each functional can have different thresholds, + although at the moment they are the same for all of them. + +2012-01-24 18:15 dstrubbe + + * [r8799] src: Set svn:ignore for new file funcs_hyb_mgga.c in + libxc. + +2012-01-24 10:35 marques + + * [r8795] src/mgga_x_2d_prhg07.c, src/mgga_x_br89.c, src/util.h, + src/work_mgga_x.c: Got rid of unelegant vrho0 in the meta-GGAs + +2012-01-24 10:29 marques + + * [r8794] src/get_funcs.pl, src/mgga.c, src/mgga_x_2d_prhg07.c, + src/mgga_x_br89.c, src/mgga_x_lta.c, src/mgga_x_m06l.c, + src/mgga_x_tau_hcth.c, src/mgga_x_tpss.c, src/mgga_xc_vsxc.c, + src/util.h, src/work_lda.c, src/work_mgga_x.c, src/xc.h: Some + reorganization of the meta-gga code + +2012-01-23 14:34 marques + + * [r8790] src/gga_c_sogga11.c, + testsuite/regression/gga_c_sogga11.data.bz2, + testsuite/regression/gga_c_sogga11_x.data.bz2: Added the + correlation part of the sogga11-x functional. I just realized + that I have 100 GGA functionals implemented. I am starting to + have problems with the numering ;) + +2012-01-23 14:19 marques + + * [r8789] src/get_funcs.pl, src/gga_x_sogga11.c, + testsuite/regression/gga_c_apbe.data.bz2, + testsuite/regression/gga_c_rge2.data.bz2, + testsuite/regression/gga_k_pearson.data.bz2, + testsuite/regression/gga_x_c09x.data.bz2, + testsuite/regression/gga_x_sogga11.data.bz2, + testsuite/regression/hyb_gga_x_sogga11_x.data.bz2, + testsuite/regression/lda_c_gombas.data.bz2, + testsuite/regression/lda_x_1d.data.bz2: *) Added the sogga11-x + hybrid (exchange part) + *) cleaned the regression tests. All the failures were related to + change in references or similar stuff + +2012-01-09 15:20 marques + + * [r8748] src/Makefile.am, src/gga_x_c09x.c: Added the new GGA + functional of Cooper + +2011-12-07 02:33 dstrubbe + + * [r8666] src/util.h: ifort 12.0 refuses to compile the inline + functions: + + /bin/sh ../libtool --tag=CC --mode=link mpicc -O3 -o xc-get_data + xc_get_data-xc-get_data.o -L../src/ -lxc -lm + libtool: link: mpicc -O3 -o xc-get_data xc_get_data-xc-get_data.o + -L/global/home/users/dstrubbe/octopus/libxc/src + /global/home/users/dstrubbe/octopus/libxc/src/.libs/libxc.a -lm + /global/software/centos-5.x86_64/modules/intel/composerxe-2011.1.107/lib/intel64/libimf.so: + warning: warning: feupdateenv is not implemented and will always + fail + /global/home/users/dstrubbe/octopus/libxc/src/.libs/libxc.a(gga_c_pbe.o): + In function `work_gga_c': + gga_c_pbe.c:(.text+0x3b0): undefined reference to + `xc_lda_c_pw_func' + /global/home/users/dstrubbe/octopus/libxc/src/.libs/libxc.a(gga_c_p86.o): + In function `work_gga_c': + gga_c_p86.c:(.text+0x389): undefined reference to + `xc_lda_c_pz_func' + /global/home/users/dstrubbe/octopus/libxc/src/.libs/libxc.a(gga_c_pw91.o): + In function `work_gga_c': + gga_c_pw91.c:(.text+0x40b): undefined reference to + `xc_lda_c_pw_func' + /global/home/users/dstrubbe/octopus/libxc/src/.libs/libxc.a(gga_c_am05.o): + In function `work_gga_c': + gga_c_am05.c:(.text+0x37a): undefined reference to + `xc_lda_c_pw_func' + /global/home/users/dstrubbe/octopus/libxc/src/.libs/libxc.a(gga_c_lm.o): + In function `work_gga_c': + gga_c_lm.c:(.text+0x3cf): undefined reference to + `xc_lda_c_hl_func' + /global/home/users/dstrubbe/octopus/libxc/src/.libs/libxc.a(gga_c_sogga11.o): + In function `work_gga_c': + gga_c_sogga11.c:(.text+0x445): undefined reference to + `xc_lda_c_pw_func' + make[1]: *** [xc-get_data] Error 1 + make[1]: Leaving directory + `/global/home/users/dstrubbe/octopus/libxc/testsuite' + make: *** [install-recursive] Error 1 + +2011-12-06 15:31 marques + + * [r8662] src/lda_c_1d_csc.c, + testsuite/regression/lda_c_1d_csc.data.bz2: Added fxc to the CSC + functional + +2011-11-30 09:43 fulvio + + * [r8642] INSTALL: Reverted accidental changes in INSTALL files + +2011-11-29 17:22 fulvio + + * [r8641] INSTALL: Included Lorenzo's implementation of jelli slab + + a small bugfix (thanks to Lorenzo) + +2011-11-28 21:15 dstrubbe + + * [r8640] src/Makefile.am: Missing dependencies in libxc. + +2011-11-19 06:08 xavier + + * [r8589] testsuite/xc-regression.c: Removed a C++ style comment. + +2011-10-10 13:17 marques + + * [r8374] src/special_functions.c: Small bug found by Martin + Persson + +2011-09-07 05:40 dstrubbe + + * [r8264] m4/fc_integer.m4: On MacOS, directories can be produced + by when the try build fails, and we need to do rm -rf to remove + them. + +2011-09-05 07:40 dstrubbe + + * [r8259] src/lda_c_gombas.c: Restored proper German title, and + added Wien to publication location for Gombas's book. + +2011-09-05 06:18 dstrubbe + + * [r8258] src/lda_c_gombas.c: Typo in reference. + +2011-09-05 04:47 dstrubbe + + * [r8257] src/gga_xc_th.c, src/mgga_c_tpss.c, src/util.h, + src/work_gga_becke.c, src/work_gga_c.c, src/work_mgga_c.c, + src/work_mgga_x.c: More explicit casts and a missing macro call. + +2011-09-04 23:32 dstrubbe + + * [r8256] src/lda_c_2d_prm.c, src/work_gga_x.c, src/work_lda.c: + Errors in pointer casting that g++ 4.5 will not accept. + +2011-08-23 18:55 dstrubbe + + * [r8219] src/gga_k_pearson.c, src/lda_x_1d.c: Tobias Burnus' patch + to libxc references. + +2011-08-22 14:34 micael + + * [r8212] src/gga_c_pbe.c: * Bug fix: some GGA correlations were + tagged as exchange functionals. + +2011-07-29 09:46 marques + + * [r8123] TODO, src/Makefile.am, src/gga_xc_th.c, src/test.c, + testsuite/regression/gga_c_lm.data.bz2, + testsuite/regression/gga_c_sogga11.data.bz2, + testsuite/regression/gga_c_wi0.data.bz2, + testsuite/regression/gga_x_sogga.data.bz2, + testsuite/regression/gga_x_sogga11.data.bz2, + testsuite/regression/gga_xc_th1.data.bz2, + testsuite/regression/gga_xc_th2.data.bz2, + testsuite/regression/gga_xc_th3.data.bz2, + testsuite/regression/gga_xc_th4.data.bz2, + testsuite/regression/gga_xc_th_fc.data.bz2, + testsuite/regression/gga_xc_th_fcfo.data.bz2, + testsuite/regression/gga_xc_th_fco.data.bz2, + testsuite/regression/gga_xc_th_fl.data.bz2, + testsuite/xc-reference.pl: Added the TH family of xc functionals. + Updated the regression tests. + +2011-07-28 19:19 xavier + + * [r8119] src/xc.h: Fixed a comment. + +2011-07-28 12:38 marques + + * [r8118] src/gga_c_lm.c: Added the spin-polarized version of the + LM functional + +2011-07-26 10:00 marques + + * [r8110] src/gga_c_wi.c: Added another version of the WI + functional + +2011-07-25 12:37 marques + + * [r8107] src/gga.c, src/gga_x_kt.c, src/gga_xc_1w.c, + src/gga_xc_edf1.c, src/hyb_gga_xc_b1wc.c, src/hyb_gga_xc_b3lyp.c, + src/hyb_gga_xc_b97.c, src/hyb_gga_xc_o3lyp.c, + src/hyb_gga_xc_pbeh.c, src/mgga_x_2d_prhg07.c, src/mgga_x_br89.c: + Some changes for libxc to compile in single precision. Thanks + Alberto. + +2011-07-23 16:49 marques + + * [r8105] src/work_gga_becke.c: Sorry, bad fix last time + +2011-07-23 16:41 marques + + * [r8104] src/gga_c_sogga11.c, src/gga_x_sogga11.c, + src/gga_xc_edf1.c, src/work_gga_becke.c: Bug fix: becke gga c + functionals were wrong when called with a list of values. Thanks + to Damien Caliste. + +2011-07-21 12:25 marques + + * [r8103] src/Makefile.am, src/gga_c_sogga11.c, + testsuite/regression/gga_c_sogga11.data.bz2: Added the + correlation part of the SOGGA11 functional + +2011-07-20 10:23 xavier + + * [r8099] testsuite/Makefile.am, testsuite/xc-run_testsuite: Now + the libxc testsuite works with VPATHs. (But I get FAILs in most + tests). + +2011-07-20 10:03 xavier + + * [r8098] src/gga_x_sogga11.c: This should fix the libxc + compilation issue. + +2011-07-20 08:56 marques + + * [r8097] src/Makefile.am, src/gga_x_sogga11.c, src/util.h, + testsuite/regression/gga_x_sogga11.data.bz2: Added a new + functional, SOGGA11 (in press). I check this functional against + the reference implementation of Truhlar (that was very badly + programmed, and impossible to compile) + +2011-07-19 23:13 dstrubbe + + * [r8094] src, testsuite: Set svn:ignore for new generated files in + libxc. + +2011-07-19 11:41 marques + + * [r8091] TODO, src/gga_x_rpbe.c, src/gga_xc_edf1.c, src/util.h, + src/xc.h, testsuite/regression/gga_x_optpbe_vdw.data.bz2, + testsuite/regression/gga_x_rpbe.data.bz2, + testsuite/regression/gga_x_sogga.data.bz2, + testsuite/regression/gga_xc_mohlyp.data.bz2, + testsuite/regression/gga_xc_mohlyp2.data.bz2: Added the SOGGA + functional + Changed the precision of RPBE. Now it uses the same constants as + PBE + Fixed a serious bug in optpbe_vdw + +2011-07-17 18:48 marques + + * [r8083] src/gga_x_optx.c, src/gga_xc_edf1.c, src/util.h, + src/xc.h: Added two new functionals, MOHLYP and MOHLYP2 + +2011-07-16 18:51 xavier + + * [r8078] testsuite/Makefile.am: This fixes libxc compilation with + VPATH. + +2011-07-15 12:39 marques + + * [r8077] testsuite/regression/lca_lch.data.bz2, + testsuite/regression/lca_omc.data.bz2, testsuite/xc-regression.c, + testsuite/xc-reset-regression, testsuite/xc-run_testsuite: Now + make check actually does something interesting and meaninful + +2011-07-15 12:18 marques + + * [r8076] ChangeLog, src/Makefile.am, src/get_funcs.pl, src/lca.c, + src/lca_lch.c, src/lca_omc.c, src/lda_c_2d_prm.c, src/util.h, + src/xc.h, src/xc_f.c, testsuite/Makefile.am, + testsuite/regression, testsuite/regression/gga_c_am05.data.bz2, + testsuite/regression/gga_c_apbe.data.bz2, + testsuite/regression/gga_c_lm.data.bz2, + testsuite/regression/gga_c_lyp.data.bz2, + testsuite/regression/gga_c_p86.data.bz2, + testsuite/regression/gga_c_pbe.data.bz2, + testsuite/regression/gga_c_pbe_jrgx.data.bz2, + testsuite/regression/gga_c_pbe_sol.data.bz2, + testsuite/regression/gga_c_pw91.data.bz2, + testsuite/regression/gga_c_rge2.data.bz2, + testsuite/regression/gga_c_wi.data.bz2, + testsuite/regression/gga_c_wl.data.bz2, + testsuite/regression/gga_c_xpbe.data.bz2, + testsuite/regression/gga_k_absr1.data.bz2, + testsuite/regression/gga_k_absr2.data.bz2, + testsuite/regression/gga_k_apbe.data.bz2, + testsuite/regression/gga_k_baltin.data.bz2, + testsuite/regression/gga_k_dk.data.bz2, + testsuite/regression/gga_k_ernzerhof.data.bz2, + testsuite/regression/gga_k_fr_b88.data.bz2, + testsuite/regression/gga_k_fr_pw86.data.bz2, + testsuite/regression/gga_k_ge2.data.bz2, + testsuite/regression/gga_k_golden.data.bz2, + testsuite/regression/gga_k_gp85.data.bz2, + testsuite/regression/gga_k_gr.data.bz2, + testsuite/regression/gga_k_lc94.data.bz2, + testsuite/regression/gga_k_lieb.data.bz2, + testsuite/regression/gga_k_llp.data.bz2, + testsuite/regression/gga_k_ludena.data.bz2, + testsuite/regression/gga_k_ol1.data.bz2, + testsuite/regression/gga_k_ol2.data.bz2, + testsuite/regression/gga_k_pearson.data.bz2, + testsuite/regression/gga_k_perdew.data.bz2, + testsuite/regression/gga_k_thakkar.data.bz2, + testsuite/regression/gga_k_tw1.data.bz2, + testsuite/regression/gga_k_tw2.data.bz2, + testsuite/regression/gga_k_tw3.data.bz2, + testsuite/regression/gga_k_tw4.data.bz2, + testsuite/regression/gga_k_vjks.data.bz2, + testsuite/regression/gga_k_vsk.data.bz2, + testsuite/regression/gga_k_vw.data.bz2, + testsuite/regression/gga_k_yt65.data.bz2, + testsuite/regression/gga_x_2d_b86.data.bz2, + testsuite/regression/gga_x_2d_b86_mgc.data.bz2, + testsuite/regression/gga_x_2d_b88.data.bz2, + testsuite/regression/gga_x_2d_pbe.data.bz2, + testsuite/regression/gga_x_airy.data.bz2, + testsuite/regression/gga_x_am05.data.bz2, + testsuite/regression/gga_x_apbe.data.bz2, + testsuite/regression/gga_x_b86.data.bz2, + testsuite/regression/gga_x_b86_mgc.data.bz2, + testsuite/regression/gga_x_b88.data.bz2, + testsuite/regression/gga_x_bayesian.data.bz2, + testsuite/regression/gga_x_dk87_r1.data.bz2, + testsuite/regression/gga_x_dk87_r2.data.bz2, + testsuite/regression/gga_x_ft97_a.data.bz2, + testsuite/regression/gga_x_ft97_b.data.bz2, + testsuite/regression/gga_x_g96.data.bz2, + testsuite/regression/gga_x_herman.data.bz2, + testsuite/regression/gga_x_htbs.data.bz2, + testsuite/regression/gga_x_kt1.data.bz2, + testsuite/regression/gga_x_lag.data.bz2, + testsuite/regression/gga_x_lb.data.bz2, + testsuite/regression/gga_x_lbm.data.bz2, + testsuite/regression/gga_x_lg93.data.bz2, + testsuite/regression/gga_x_mb88.data.bz2, + testsuite/regression/gga_x_mpbe.data.bz2, + testsuite/regression/gga_x_mpw91.data.bz2, + testsuite/regression/gga_x_ol2.data.bz2, + testsuite/regression/gga_x_optb88_vdw.data.bz2, + testsuite/regression/gga_x_optpbe_vdw.data.bz2, + testsuite/regression/gga_x_optx.data.bz2, + testsuite/regression/gga_x_pbe.data.bz2, + testsuite/regression/gga_x_pbe_jsjr.data.bz2, + testsuite/regression/gga_x_pbe_r.data.bz2, + testsuite/regression/gga_x_pbe_sol.data.bz2, + testsuite/regression/gga_x_pbea.data.bz2, + testsuite/regression/gga_x_pbek1_vdw.data.bz2, + testsuite/regression/gga_x_pw86.data.bz2, + testsuite/regression/gga_x_pw91.data.bz2, + testsuite/regression/gga_x_rge2.data.bz2, + testsuite/regression/gga_x_rpbe.data.bz2, + testsuite/regression/gga_x_rpw86.data.bz2, + testsuite/regression/gga_x_wc.data.bz2, + testsuite/regression/gga_x_xpbe.data.bz2, + testsuite/regression/gga_xc_b97.data.bz2, + testsuite/regression/gga_xc_b97_1.data.bz2, + testsuite/regression/gga_xc_b97_2.data.bz2, + testsuite/regression/gga_xc_b97_3.data.bz2, + testsuite/regression/gga_xc_b97_d.data.bz2, + testsuite/regression/gga_xc_b97_k.data.bz2, + testsuite/regression/gga_xc_edf1.data.bz2, + testsuite/regression/gga_xc_hcth_120.data.bz2, + testsuite/regression/gga_xc_hcth_147.data.bz2, + testsuite/regression/gga_xc_hcth_407.data.bz2, + testsuite/regression/gga_xc_hcth_93.data.bz2, + testsuite/regression/gga_xc_kt2.data.bz2, + testsuite/regression/gga_xc_mpwlyp1w.data.bz2, + testsuite/regression/gga_xc_pbe1w.data.bz2, + testsuite/regression/gga_xc_pbelyp1w.data.bz2, + testsuite/regression/gga_xc_sb98_1a.data.bz2, + testsuite/regression/gga_xc_sb98_1b.data.bz2, + testsuite/regression/gga_xc_sb98_1c.data.bz2, + testsuite/regression/gga_xc_sb98_2a.data.bz2, + testsuite/regression/gga_xc_sb98_2b.data.bz2, + testsuite/regression/gga_xc_sb98_2c.data.bz2, + testsuite/regression/gga_xc_xlyp.data.bz2, + testsuite/regression/hyb_gga_xc_b1lyp.data.bz2, + testsuite/regression/hyb_gga_xc_b1pw91.data.bz2, + testsuite/regression/hyb_gga_xc_b1wc.data.bz2, + testsuite/regression/hyb_gga_xc_b3lyp.data.bz2, + testsuite/regression/hyb_gga_xc_b3p86.data.bz2, + testsuite/regression/hyb_gga_xc_b3pw91.data.bz2, + testsuite/regression/hyb_gga_xc_b97.data.bz2, + testsuite/regression/hyb_gga_xc_b97_1.data.bz2, + testsuite/regression/hyb_gga_xc_b97_2.data.bz2, + testsuite/regression/hyb_gga_xc_b97_3.data.bz2, + testsuite/regression/hyb_gga_xc_b97_k.data.bz2, + testsuite/regression/hyb_gga_xc_mpw1k.data.bz2, + testsuite/regression/hyb_gga_xc_mpw1pw.data.bz2, + testsuite/regression/hyb_gga_xc_mpw3lyp.data.bz2, + testsuite/regression/hyb_gga_xc_mpw3pw.data.bz2, + testsuite/regression/hyb_gga_xc_o3lyp.data.bz2, + testsuite/regression/hyb_gga_xc_pbeh.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1a.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1b.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_1c.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2a.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2b.data.bz2, + testsuite/regression/hyb_gga_xc_sb98_2c.data.bz2, + testsuite/regression/hyb_gga_xc_x3lyp.data.bz2, + testsuite/regression/lca_lch.data.bz2, + testsuite/regression/lca_omc.data.bz2, + testsuite/regression/lda_c_1d_csc.data.bz2, + testsuite/regression/lda_c_2d_amgb.data.bz2, + testsuite/regression/lda_c_2d_prm.data.bz2, + testsuite/regression/lda_c_gl.data.bz2, + testsuite/regression/lda_c_gombas.data.bz2, + testsuite/regression/lda_c_hl.data.bz2, + testsuite/regression/lda_c_ml1.data.bz2, + testsuite/regression/lda_c_ml2.data.bz2, + testsuite/regression/lda_c_ob_pw.data.bz2, + testsuite/regression/lda_c_ob_pz.data.bz2, + testsuite/regression/lda_c_pw.data.bz2, + testsuite/regression/lda_c_pw_mod.data.bz2, + testsuite/regression/lda_c_pw_rpa.data.bz2, + testsuite/regression/lda_c_pz.data.bz2, + testsuite/regression/lda_c_pz_mod.data.bz2, + testsuite/regression/lda_c_rpa.data.bz2, + testsuite/regression/lda_c_vbh.data.bz2, + testsuite/regression/lda_c_vwn.data.bz2, + testsuite/regression/lda_c_vwn_rpa.data.bz2, + testsuite/regression/lda_c_wigner.data.bz2, + testsuite/regression/lda_c_xalpha.data.bz2, + testsuite/regression/lda_k_lp.data.bz2, + testsuite/regression/lda_k_tf.data.bz2, + testsuite/regression/lda_x.data.bz2, + testsuite/regression/lda_x_1d.data.bz2, + testsuite/regression/lda_x_2d.data.bz2, + testsuite/regression/lda_xc_teter93.data.bz2, + testsuite/regression/mgga_c_tpss.data.bz2, + testsuite/regression/mgga_c_vsxc.data.bz2, + testsuite/regression/mgga_x_2d_prhg07.data.bz2, + testsuite/regression/mgga_x_2d_prhg07_prp10.data.bz2, + testsuite/regression/mgga_x_bj06.data.bz2, + testsuite/regression/mgga_x_br89.data.bz2, + testsuite/regression/mgga_x_gvt4.data.bz2, + testsuite/regression/mgga_x_lta.data.bz2, + testsuite/regression/mgga_x_m06l.data.bz2, + testsuite/regression/mgga_x_rpp09.data.bz2, + testsuite/regression/mgga_x_tau_hcth.data.bz2, + testsuite/regression/mgga_x_tb09.data.bz2, + testsuite/regression/mgga_x_tpss.data.bz2, + testsuite/xc-run_testsuite: Deleted the LCA that was broken and + unused for years + Created files intended for regression test (coming soon) + +2011-07-15 08:48 marques + + * [r8075] testsuite/df_repo, testsuite/df_repo/gga_c_lyp.data, + testsuite/df_repo/gga_c_p86.data, + testsuite/df_repo/gga_c_pbe.data, + testsuite/df_repo/gga_c_pw91.data, + testsuite/df_repo/gga_x_b88.data, + testsuite/df_repo/gga_x_ft97_b.data, + testsuite/df_repo/gga_x_pbe.data, + testsuite/df_repo/gga_x_pw91.data, + testsuite/df_repo/gga_xc_b97.data, + testsuite/df_repo/gga_xc_b97_1.data, + testsuite/df_repo/gga_xc_b97_2.data, + testsuite/df_repo/gga_xc_edf1.data, + testsuite/df_repo/gga_xc_hcth_120.data, + testsuite/df_repo/gga_xc_hcth_147.data, + testsuite/df_repo/gga_xc_hcth_407.data, + testsuite/df_repo/gga_xc_hcth_93.data, + testsuite/df_repo/hyb_gga_xc_b3lyp.data, + testsuite/df_repo/lda_c_pw.data, testsuite/df_repo/lda_c_pz.data, + testsuite/df_repo/lda_c_vwn.data, + testsuite/df_repo/lda_c_vwn_rpa.data, + testsuite/df_repo/lda_x.data, testsuite/gga_c_lyp.data, + testsuite/gga_c_p86.data, testsuite/gga_c_pbe.data, + testsuite/gga_c_pw91.data, testsuite/gga_x_b88.data, + testsuite/gga_x_ft97_b.data, testsuite/gga_x_pbe.data, + testsuite/gga_x_pw91.data, testsuite/gga_xc_b97.data, + testsuite/gga_xc_b97_1.data, testsuite/gga_xc_b97_2.data, + testsuite/gga_xc_edf1.data, testsuite/gga_xc_hcth_120.data, + testsuite/gga_xc_hcth_147.data, testsuite/gga_xc_hcth_407.data, + testsuite/gga_xc_hcth_93.data, testsuite/hyb_gga_xc_b3lyp.data, + testsuite/lda_c_pw.data, testsuite/lda_c_pz.data, + testsuite/lda_c_vwn.data, testsuite/lda_c_vwn_rpa.data, + testsuite/lda_x.data: Moved data from the df repository to its + own directory + +2011-07-15 08:46 marques + + * [r8074] src/gga_k_dk.c, src/gga_k_ol1.c, src/gga_k_ol2.c, + src/gga_k_pearson.c, src/gga_k_tflw.c, src/gga_x_2d_b86.c, + src/gga_x_2d_b86_mgc.c, src/gga_x_2d_b88.c, src/gga_x_2d_pbe.c, + src/gga_x_airy.c, src/gga_x_am05.c, src/gga_x_b86.c, + src/gga_x_b86_mgc.c, src/gga_x_b88.c, src/gga_x_bayesian.c, + src/gga_x_dk87.c, src/gga_x_ft97.c, src/gga_x_g96.c, + src/gga_x_herman.c, src/gga_x_htbs.c, src/gga_x_lg93.c, + src/gga_x_mpbe.c, src/gga_x_optx.c, src/gga_x_pbe.c, + src/gga_x_pbea.c, src/gga_x_pw86.c, src/gga_x_pw91.c, + src/gga_x_rpbe.c, src/gga_x_wc.c, src/mgga_x_m06l.c, src/util.h, + src/work_gga_x.c: Removed an unused limit + +2011-07-13 14:04 marques + + * [r8072] src/gga_x_b88.c: Big bug in B88 solved + +2011-07-13 13:35 marques + + * [r8071] src/hyb_gga_xc_b1wc.c: Deleted wrong calls to + vwn_set_param + +2011-07-13 13:25 marques + + * [r8070] src/Makefile.am, src/gga_perdew.c, src/util.h: Removed + the framework of perdew functionals. This is now handled by more + generic routines + +2011-07-13 13:23 marques + + * [r8069] src/gga_c_pw91.c, src/test.c: Converted PW91 to the new + framework and implemented fxc + +2011-07-04 13:34 marques + + * [r8056] src/gga_c_lyp.c, src/gga_c_pbe.c, src/gga_k_ol2.c, + src/gga_x_2d_b88.c, src/gga_x_airy.c, src/lda_x_1d.c, + src/mgga_x_2d_prhg07.c, src/mgga_x_br89.c, src/test.c, + src/util.h, src/work_gga_x.c: Moved the gga_c_pbe to the new + framework. + Cleaned several unused variables + +2011-06-29 14:06 marques + + * [r8053] src/gga_c_p86.c: A couple of bugs corrected. Now it gives + the same as the reference. + +2011-06-29 09:04 marques + + * [r8052] src/gga_c_p86.c: Converted P86 to new framework and + implemented second derivatives. It is funny to see the + discontinuity of PZ propagated to poles in fxc ;(( + +2011-06-24 13:42 marques + + * [r8050] src/gga_c_am05.c, testsuite/xc-consistency.c, + testsuite/xc-get_data.c: Fixed bug in AM05. It took me 4 hours to + find this stupif thing! + +2011-06-24 10:20 marques + + * [r8049] src/lda_c_pw.c: This should solve the segfault in PW + +2011-06-22 13:19 marques + + * [r8048] src/functionals.c, src/get_funcs.pl, src/test.c, + src/util.c, src/util.h, src/xc.h: Added two new helper functions, + functional_get_number and functional_get_name that return the + number or the name of the functional given the other. + +2011-06-22 10:31 marques + + * [r8047] src/work_gga_x.c, src/work_mgga_x.c: Fixed NaN for zero + gradients. Thanks to Xavier Gonze. + +2011-06-22 09:03 marques + + * [r8046] src/gga_x_airy.c, src/lda_c_pw.c, src/test.c: Added new + functional, the PW parametrization of the RPA energy + +2011-06-22 08:31 marques + + * [r8045] src/gga_x_airy.c: New exchange functional, the Local Airy + Gas + +2011-06-22 08:20 marques + + * [r8044] src/Makefile.am, src/gga_x_airy.c: Added new exchange + functional based on the Airy gas + +2011-06-21 13:45 marques + + * [r8041] TODO, src/gga_x_pbe.c: Changed the precision in one + constant in the PBE functional. Thank you to Gian-Marco for + finding this one + +2011-06-10 09:16 marques + + * [r8009] src/gga_x_2d_pbe.c, src/work_gga_c.c: Bug corrected + (thanks David). The results seemed to be correct any way, but my + mere chance. + +2011-06-09 11:35 marques + + * [r7996] src/gga_x_wc.c, src/lda_c_pz.c: Sorry, forgot to submit + this file + +2011-06-09 10:13 marques + + * [r7995] src/Makefile.am, src/gga_x_htbs.c, src/gga_x_pbe.c, + src/gga_x_rpbe.c, src/util.h: Added new GGA x functional HTBS + +2011-06-08 15:09 marques + + * [r7994] src/gga_k_dk.c: I believe that there was a ff factor + missing. Can you check it Micael? + +2011-06-07 12:47 xavier + + * [r7985] src/lda_c_pw.c: Another fix for libxc and xlc. Now it + should compile. + +2011-06-07 12:30 xavier + + * [r7984] src/lda_c_hl.c: It seems that xlc doesn't like to call an + static function from an + inline one. + +2011-06-01 13:46 marques + + * [r7963] src/gga_xc_1w.c, src/gga_xc_edf1.c, + src/hyb_gga_xc_b1wc.c, src/hyb_gga_xc_b3lyp.c, + src/hyb_gga_xc_o3lyp.c, src/test.c: Several functionals that + denpended on LYP have now also fxc + +2011-06-01 13:42 marques + + * [r7962] src/gga_c_lyp.c, src/work_gga_c.c: LYP now has fxc. + +2011-05-30 14:04 marques + + * [r7952] src/gga_c_am05.c, src/gga_c_lm.c, src/lda_c_hl.c, + src/test.c, src/util.h: Langreth and Mehl converted to new + framework + +2011-05-30 13:06 marques + + * [r7951] src/test.c, src/work_gga_c.c: Several bugs corrected and + code simplified. Now it really seems to work (fingers crossed) + +2011-05-27 15:28 marques + + * [r7948] src/test.c, src/work_gga_c.c: Sopke too soon ;) v2sigma2 + is fine, but v2rhosigma still has a bug for some spins... + +2011-05-27 13:56 marques + + * [r7947] src/gga_c_am05.c, src/gga_c_wl.c: Sorry, left some debug + stuff around + +2011-05-27 13:55 marques + + * [r7946] src/gga_c_am05.c, src/gga_c_wl.c, src/lda_c_pw.c, + src/test.c, src/util.h, src/work_gga_c.c, src/xc_f.c: Second + derivatives are now working for AM05 and WL. I will still spend + some time trying to simplify the code. + +2011-05-18 08:10 micael + + * [r7906] src/gga_k_dk.c: * Bug fix: corrected the parameters of + two KED functionals. + +2011-05-13 02:30 xavier + + * [r7896] configure.ac: Updated the versions for trunk, octopus + nocturnus, and, libxc diurnus. + +2011-05-12 15:57 xavier + + * [r7881] src/gga_x_lb.c, src/libxc_master.F90, src/xc.h: Libxc now + defines XC_GGA_XC_LB to point to XC_GGA_X_LB. This keeps + compatibility. + +2011-05-11 12:46 marques + + * [r7863] src/gga_x_b88.c: Added the Thakkar approximation to the + kinetic energy density. I believe that this concludes the GGAs + for tau (at least I do not have any further on my list) + +2011-05-11 10:19 marques + + * [r7862] src/gga_x_b86.c, src/gga_x_pbe.c: The 4 versions of the + PBE for kinetics by Tran and Wesolowski + +2011-05-11 10:01 marques + + * [r7861] src/gga_x_pbe.c: Small bug corrected + +2011-05-11 09:57 marques + + * [r7860] src/gga_c_pbe.c: The correlation version of the previous + functional + +2011-05-11 09:17 marques + + * [r7859] src/gga_x_pbe.c: Added the APBE functional (both X and K, + I will implement C now) + +2011-05-01 01:17 xavier + + * [r7827] src/gga_c_am05.c, src/gga_c_lm.c, src/gga_c_pw91.c: + Missing deallocations in libxc. + +2011-05-01 00:07 xavier + + * [r7826] src/gga_c_pbe.c: The destructor of the gga_c_pbe + functional was missing. + +2011-04-21 13:26 marques + + * [r7739] src/gga_c_lyp.c: An unused variable was left behind. + Thanks David. + +2011-04-20 20:04 marques + + * [r7733] src/Makefile.am: Sorry for the mess. Let's see if it + compiles now. + +2011-04-20 14:04 marques + + * [r7731] src/gga_x_b88.c: Sorry forgot two "M" + +2011-04-20 14:02 marques + + * [r7730] src/Makefile.am, src/gga_x_b88.c, src/mgga_c_tpss.c, + src/test.c, src/work_gga_c.c: New functional, a modified Becke 88 + for proton transfer reactions. + +2011-04-18 14:18 micael + + * [r7720] src/gga_x_b88.c: * Two functionals had the same + identifier. + +2011-04-16 19:12 micael + + * [r7711] src/gga_c_am05.c: * Fixed AM05 correlation for very small + densities. + +2011-04-15 10:06 marques + + * [r7707] src/gga_c_lyp.c, src/work_gga_c.c: Also v2rho2 is well + calculated in spin polarized mode. Now it is only missing + v2sigma2 and v2rhosigma + +2011-04-01 09:42 marques + + * [r7659] src/gga_k_tflw.c: Now the VW term is defined withour the + TF part as requested by Micael + +2011-04-01 08:59 marques + + * [r7658] src/gga_x_pw91.c: Sorry I had left some bugs around + +2011-04-01 08:57 marques + + * [r7657] src/gga_x_pw91.c: Added the kinetic counterpart of PW91 + +2011-03-31 15:22 marques + + * [r7653] src/gga_k_dk.c: Another bunch of functionals for the + kinetic energy. These ones are all absed on a Pade approximant. + +2011-03-30 13:02 marques + + * [r7647] src/Makefile.am, src/gga_k_dk.c: Added the dePristo and + Kress GGA for the kinetic energy density + +2011-03-30 12:17 marques + + * [r7646] src/gga_k_ol2.c: Bug fix in K_OL2. The formula was not + correct. + Added the functional X_OL2, but I have very strong reasons to + believe that the formula in the paper is wrong. + +2011-03-28 16:15 micael + + * [r7635] src/gga_k_tflw.c: * The lambda parameter in the TflW + functionals was not set correctly. + +2011-03-28 15:30 micael + + * [r7633] src/gga_x_pw86.c: * Another KED functional that was + labeled as exchange. + +2011-03-28 15:06 micael + + * [r7629] src/gga_x_b88.c: * A couple of KED functionals were + labeled as exchange functionals. + +2011-03-28 15:02 marques + + * [r7628] src/Makefile.am, src/gga_x_lb.c, src/gga_xc_lb.c: Rename + the LB functional as "exchange", otherwise octopus can not sum + the PW92 correlation to it. + Added a modified LB potential by the Amsterdam group + +2011-03-27 05:10 dstrubbe + + * [r7626] src/gga_x_pw86.c, src/lda_k_tf.c, src/work_gga_x.c: Fixed + typos and funny characters in libxc. + +2011-03-25 13:23 marques + + * [r7615] src/gga_x_pw86.c: An assert was wrong + +2011-03-25 13:23 marques + + * [r7614] src/gga_c_wl.c, src/gga_x_pw86.c: Added a kinetic version + of the PW86 exchange functional + +2011-03-25 13:05 marques + + * [r7613] src/gga_x_b88.c: Sorry, a factor was wrong + +2011-03-25 13:04 marques + + * [r7612] src/gga_x_b88.c: Another version of becke 88 for the + kinetic energy density + +2011-03-25 11:30 marques + + * [r7611] src/work_gga_x.c: Bug fix: in the case of the kinetic + energy density, I was using the wrong power in the definition of + x. It should always be 4/3 and not 5/3 + +2011-03-24 14:14 marques + + * [r7604] src/lda_k_tf.c: Added a new LDA functional for the + kinetic energy + +2011-03-24 13:24 marques + + * [r7603] src/util.h, src/work_gga_x.c: Again problems with the + pre-factors. Hopefully this way of doing things is a bit more + robust. + +2011-03-24 11:01 marques + + * [r7602] src/Makefile.am, src/gga_k_ol1.c, src/gga_k_ol2.c, + src/gga_k_pearson.c, src/gga_x_b88.c, src/util.h: Two more + kinetic functionals OL1 and OL2 + Fixed one reference (thanks Tobias) + +2011-03-24 08:46 marques + + * [r7601] src/gga_k_tflw.c, src/gga_x_b88.c: Yes, you were right + Tobias. Thanks. + +2011-03-23 14:33 marques + + * [r7598] src/Makefile.am, src/gga_k_llp.c, src/gga_k_pearson.c, + src/gga_k_tflw.c, src/gga_x_b88.c, src/work_gga_x.c: Now the LLP + kinetic functional shares the same routine as B88 + +2011-03-23 14:11 marques + + * [r7597] src/Makefile.am, src/gga_k_ge2.c, src/gga_k_llp.c, + src/gga_k_pearson.c, src/gga_k_tflw.c, src/lda_k_tf.c, + src/util.h, src/xc.h: Added a bunch of functionals of the form + gamma T_TF + lambda T_vW + +2011-03-22 16:09 marques + + * [r7590] src/gga_k_ge2.c, src/util.h: Sorry, forgot an } and had + an error in a comment + +2011-03-22 16:00 marques + + * [r7589] src/gga_k_ge2.c, src/util.h: Corrected the value of + K_FACTOR_C to the correct spin-polarized and including the factor + of 2 from our definition of tau. + Added the von Weiszaecker functional + +2011-03-21 15:45 marques + + * [r7588] src/Makefile.am, src/gga_k_llp.c: New kinetic energy GGA + (actually the first of all), the Lee, Lee and Parr functional + +2011-03-18 15:15 micael + + * [r7573] src/lda_k_tf.c: * Now I think the constant in the + Thomas-Fermi functional is finally correct. + +2011-03-18 10:24 micael + + * [r7572] src/lda_k_tf.c, src/libxc_master.F90: * A constant was + wrong in the Thomas-Fermi kinetic energy functional. + * Definition of XC_KINETIC was missing from libxc_master.F90. + +2011-03-03 13:23 marques + + * [r7533] src/Makefile.am, src/gga_x_herman.c: Added a very simple + exchange functional, the Herman X\alpha\beta functional. This is + perhaps the first GGA for the exhange + +2011-03-02 12:42 marques + + * [r7521] src/gga_c_lyp.c, src/test.c: I rewrote lyp to the new + framework. Now the file is half the size as before, and it will + be easy to get the second derivatives. + +2011-03-02 12:42 marques + + * [r7520] src/gga_x_b86.c: There was a problem in the b86 + functional. First, what I called b86_r was in fact b86. Then my + b86 had a wrong coefficient. So I deleted b86_r and rewrote in a + clearer way b86. + +2011-03-02 12:41 marques + + * [r7519] src/util.c: Some programs pass negative densities to + libxc. This commit should fix many of the functionals in this + case. + +2011-02-28 11:11 marques + + * [r7507] src/Makefile.am, src/gga_c_wi.c: Added a new GGA + correlation functional: Wilson and Ivanov. Note that this + functional only has a spin-unpolarized version + +2011-02-24 15:26 marques + + * [r7493] src/Makefile.am, src/lda_c_gombas.c, src/lda_c_ml1.c, + src/lda_c_pz.c, src/lda_c_rpa.c, src/lda_x.c: *) Added the Gombas + interpolation of the correlation energy + *) Corrected a numerical coefficient in the RPA functional + *) A factor of 1/2 was missing in the ML functional + +2011-02-23 10:29 marques + + * [r7490] src/work_gga_c.c: Sorry, just realized that I used // + comments... + +2011-02-23 10:28 marques + + * [r7489] src/Makefile.am, src/gga_c_wl.c, src/work_gga_c.c: Added + a new GGA functional (WL) and more importantly, added a new + framework for GGA correlations. Most GGA correlations will be + adapted to this new framework in the future. Note: the second + derivatives in the spin polarized case are still missing. + +2011-02-18 11:33 xavier + + * [r7479] Makefile.am: An attempt to fix the libxc problem in + nowii. + +2011-02-17 13:10 marques + + * [r7471] configure.ac, src/gga_c_am05.c, src/gga_c_lm.c, + src/gga_c_lyp.c, src/gga_c_p86.c, src/gga_c_pw91.c, + src/gga_perdew.c, src/gga_x_2d_b88.c, src/gga_x_am05.c, + src/gga_x_b88.c, src/gga_x_ft97.c, src/gga_x_g96.c, + src/gga_x_kt.c, src/gga_x_pw91.c, src/gga_xc_lb.c, + src/integrate.c, src/lca.c, src/lca_omc.c, src/lda_c_2d_amgb.c, + src/lda_c_2d_prm.c, src/lda_c_ml1.c, src/lda_c_vwn.c, + src/lda_k_tf.c, src/lda_x.c, src/lda_x_2d.c, src/mgga_c_tpss.c, + src/mgga_x_2d_prhg07.c, src/mgga_x_br89.c, src/mgga_x_tpss.c, + src/util.c, src/util.h, src/work_gga_becke.c, src/work_gga_x.c, + src/work_lda.c, src/work_mgga_c.c, src/work_mgga_x.c, + src/xc_config.h: Patch by Janne.Blomqvist@tkk.fi: + + The attached patch does some minor optimizations and cleanups, + mostly + replacing usage of pow() with cbrt() as pow() can be somewhat + expensive. + + - Add tests for sqrtf, cbrtf, cbrt in configure.ac + - Add SQRT and CBRT macros to xc_config.h + - pow => POW if argument is FLOAT + - sqrt => SQRT if argument is FLOAT + - cbrt => CBRT + - POW(x, 1.0/3.0) => CBRT(x) + - POW(x, -1.0/3.0) => 1.0/CBRT(x) + - POW(x, 1.0/2.0) => SQRT(x) + - POX(x, -1.0/2.0) => 1.0/SQRT(x) + - POW(x, 1.0/4.0) => SQRT(SQRT(x)) + - sqrt(2.0) => M_SQRT2 + + Some of the pow(x,y) optimizations above can be done + automatically by + the compiler if one enables -ffast-math (or equivalent) but due + to + different corner-case behavior the compiler cannot enable them + otherwise (e.g. sqrt(-0.0) == -0.0 != pow(-0.0, 1.0/2.0) == + +0.0). See + e.g. + + http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25620 + + http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43419 + + http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42694 + + http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28252 + + + I ran the testsuite, and while I did get some failures I also got + exactly the same failures with the trunk, so as far as the + testsuite + is concerned the patch does not affect the numerics in any way. + +2011-02-14 13:12 marques + + * [r7456] src/hyb_gga_xc_b1wc.c, src/hyb_gga_xc_b3lyp.c, + src/hyb_gga_xc_b97.c, src/hyb_gga_xc_o3lyp.c, + src/hyb_gga_xc_pbeh.c: Flag XC_FLAGS_3D was missing from the + hybrid functionals + +2011-02-02 13:14 marques + + * [r7394] src/mgga_x_br89.c: Some debug lines were forgotten... + +2011-02-02 00:37 dstrubbe + + * [r7388] src/gga.c, src/lda.c, src/mgga.c: Corrected typos. + +2011-01-25 12:59 marques + + * [r7329] src/util.c, src/util.h: There was still one inline left. + This seems to be the source of the confusion of the xlc + compiler... + +2011-01-25 12:49 marques + + * [r7328] src/util.c, src/util.h: Tried to remove inline to see if + nowii compiles libxc + +2011-01-25 12:45 marques + + * [r7327] src/Makefile.am, src/mgga.c, src/mgga_x_br89.c, + src/test.c, src/work_mgga_x.c: *) changed the order of files in + makefile.am to see if it helps with nowii + *) Added fxc for the BR functional + +2011-01-19 23:21 xavier + + * [r7287] configure.ac: Changed the macro used to initialize libxc + so it works with old + libtool versions. + +2011-01-18 20:46 dstrubbe + + * [r7285] src/gga_k_tflw.c, src/util.h: Fixed PGI compilation error + via missing prototype. + PGC-S-0043-Redefinition of symbol, xc_gga_k_tflw_set_params_ + (gga_k_tflw.c: 55) + +2011-01-18 19:39 dstrubbe + + * [r7284] src/Makefile.am, src/gga_k_tflw.c: * Added hyphen, + changed m-dash to hyphen (for page numbers) which could render + strangely. + * The new file was missing .c in the Makefile. + +2011-01-18 15:34 marques + + * [r7283] src/Makefile.am, src/gga_k_pearson.c: Another kinetic + energy functional + +2011-01-18 15:13 marques + + * [r7282] src/Makefile.am, src/gga_k_tflw.c: Added a new kinetic + energy functional + +2011-01-16 05:52 xavier + + * [r7277] src/lda_xc_teter93.c, src/work_lda.c: Some optimization + for lda_xc_teter93. + +2011-01-16 04:18 xavier + + * [r7276] src/lda_xc_teter93.c, src/util.c, src/util.h: Some + optimizations for libxc: + + * Defined a faster function calculate to f(z). It calculates all + the + required derivatives at once, and avoids the calculation if the + system + is unpolarized. + + * The new function is used by the lda_xc_teter93 functional. + +2011-01-02 04:53 xavier + + * [r7217] configure.ac: By default libxc is now compiled + statically. This will probably save a + lot of problems for users (and for us). + +2010-12-16 14:01 marques + + * [r7190] src/libxc_master.F90: Had a misplaced ';' + +2010-12-16 13:47 marques + + * [r7189] src/gga.c, src/libxc_master.F90, src/mgga.c, + src/mgga_c_tpss.c, src/test.c, src/work_mgga_c.c, + src/work_mgga_x.c, src/xc.h, src/xc_f.c: Finished the interface + for the fxcs in the meta-ggas. Moreover, I think now that the + TPSS exchange fxc is correct. + +2010-12-15 16:19 marques + + * [r7179] src/work_mgga_x.c: The rest of the derivatives are there. + I will test it more thoroughly tomorrow, and finish to change the + interface to include also the derivatives of the laplacian of + rho. + +2010-12-15 15:39 marques + + * [r7177] src/mgga_x_2d_prhg07.c, src/mgga_x_br89.c, + src/mgga_x_lta.c, src/mgga_x_m06l.c, src/mgga_x_tau_hcth.c, + src/mgga_x_tpss.c, src/mgga_xc_vsxc.c, src/work_mgga_x.c: First + steps at the second derivatives of the meta-GGAs. Several things + are already OK for the tpss (exchange) but there are still some + terms missing. + +2010-12-14 09:54 marques + + * [r7172] src/gga_c_am05.c, src/mgga_x_tpss.c, src/work_mgga_x.c: + BUG fixes: + *) Fxc was missing from AM05 flags (thanks to Gian-Marco + Rignanese) + *) Vxc was wrong for x TPSS. Now I get exactly the same results + as GPAW + +2010-12-08 13:40 marques + + * [r7147] src/gga_perdew.c: Bug fix. Thanks to Gian-Marco Rignanese + for this! + +2010-11-02 19:24 olivares + + * [r7067] configure.ac: Had to correct the safe_allocate_A calls + that sometimes certain compilers go crazy about when commented + +2010-10-29 20:55 marques + + * [r7056] src/test.c: test + +2010-10-29 08:55 marques + + * [r7055] src/test.c: test + +2010-10-29 08:25 + + * [r7054] src/test.c: test + +2010-10-25 18:29 dstrubbe + + * [r7049] src/Makefile.am: A correction to my r7041: now the right + modules are associated in the single/double precision cases. This + solves the warnings about redefining a rule for these targets. + +2010-10-25 16:52 micael + + * [r7048] src/mgga_c_tpss.c: TPSS correlation is not an exchange + functional ;) + +2010-10-25 13:15 marques + + * [r7046] src/gga_c_p86.c, src/lda_c_rpa.c: Should not divide by + zero in P86 + +2010-10-25 12:04 marques + + * [r7045] src/work_gga_becke.c: Becke functionals should not divide + by zero when the density is zero ;) + +2010-10-25 11:37 marques + + * [r7044] src/gga_x_kt.c: Bug fix: KT1 and KT2 were completely + wrong. + +2010-10-25 11:13 marques + + * [r7043] src/gga_x_pbe.c: Bug fix: rge2 was not working. + +2010-10-20 20:19 dstrubbe + + * [r7041] src/Makefile.am: Added some missing rules and + dependencies in libxc. Running a parallel make failed miserably + before this, although evidently it just happened to work anyway + in serial. Something is still not perfect since I get these + warnings after "make -j install": + Makefile:817: warning: overriding commands for target + `xc_f90_lib_m.mod' + Makefile:811: warning: ignoring old commands for target + `xc_f90_lib_m.mod' + Makefile:817: warning: overriding commands for target + `xc_f90_types_m.mod' + Makefile:811: warning: ignoring old commands for target + `xc_f90_types_m.mod' + +2010-10-18 14:40 marques + + * [r7034] src/lda_c_1d_csc.c: Now the 1D CSC for beta=1 has a spin + dependence + +2010-10-14 15:10 marques + + * [r7032] src/Makefile.am, src/gga_k_ge2.c, src/util.h, + src/work_gga_x.c: Added the second-order gradient expansion of + the kinetic energy functional. + +2010-10-14 14:19 marques + + * [r7031] src/gga_c_pbe.c, src/gga_x_2d_b86_mgc.c, src/gga_x_pbe.c, + src/mgga_x_br89.c: Updated the citations. Thanks Tobias! + +2010-10-14 14:14 marques + + * [r7030] src/Makefile.am, src/lda_k_tf.c, src/xc.h: Added the + Thomas-Fermi functional for the kinetic energy density. + +2010-10-14 12:27 marques + + * [r7029] src/Makefile.am, src/gga_x_kt.c, src/work_gga_x.c: Added + two new functionals, Keal and Tozer version 1 and 2. + +2010-10-05 12:42 marques + + * [r7023] src/gga_x_pw86.c: Added a new functional: a + reparemetrization of PW86 to be used in vdW calculations. + +2010-09-28 16:34 micael + + * [r7022] src/work_mgga_x.c: The exchange potential of the + Becke-Johnson MGGA type should be zero if the density is zero in + order to avoid getting some NaN. + +2010-08-17 17:57 dstrubbe + + * [r6939] src/mgga_x_2d_prhg07.c: *) Made two tests run for MPI as + well as serial. There doesn't seem to be any reason they + shouldn't be run in parallel. + *) Updated Coordinates block to only have the appropriate number + of dimensions in these tests. + *) Typo. + +2010-08-17 07:14 juho + + * [r6938] src/mgga_x_2d_prhg07.c: Wrong sign (the equation is + solvable down to -1), wrong return value. Returning zero gives us + an effective lda approximation. See PRB 76, 235314, page 4. + +2010-08-16 11:54 juho + + * [r6934] src/mgga_x_2d_prhg07.c: Corrected the sign of the PRP10 + correction + +2010-08-16 11:01 juho + + * [r6933] src/Makefile.am, src/mgga_x_2d_prhg07.c, + src/work_mgga_x.c: PRHG10 2D exchange functional along with + optional PRP10 exchange correction. See: + http://prb.aps.org/abstract/PRB/v76/i23/e235314 and + http://prb.aps.org/abstract/PRB/v81/i11/e115108 + +2010-08-02 23:26 xavier + + * [r6898] src/mgga_x_br89.c: * Removed some debugging output. + + +2010-08-02 20:04 xavier + + * [r6897] src/mgga_x_br89.c, src/work_mgga_x.c: * The XC potential + for BR89 class of functionals is not set to zero + for low density and tau. This fixes the problem with the cusp. + The + problem for low densities remains. + + * The solution of the non-linear equation in the BR89 functionals + works properly for small positive values. + +2010-07-29 14:10 marques + + * [r6880] src/lda_x.c: Added reference to Slater's Xalpha method. + +2010-07-26 08:30 marques + + * [r6859] src/xc_f.c: Bug fix in the Fortran interface of + f90_hyb_gga_exx_coef. Thanks to Tyrel M. McQueen and John Kay + Dewhurst for this one ;) + +2010-07-14 19:04 dstrubbe + + * [r6819] configure.ac: autoconf on libxc is failing on some + systems and demanding this line. + +2010-07-09 12:49 marques + + * [r6804] configure.ac: As octopus is vulgaris, then libxc can be + ordinarius + +2010-07-09 12:43 marques + + * [r6801] ChangeLog, INSTALL, configure.ac: Changed the version + number to 1.0 + +2010-07-06 12:02 marques + + * [r6781] src/gga_c_pbe.c, src/gga_x_pbe.c: Added another + functional to the PBE family of functionals. Another one from + Scuseria, the RGE2, both the exchange and the correlation part. + +2010-06-13 12:44 acastro + + * [r6722] src/lda_c_2d_prm.c: Roll back to previous version (6720), + since the idea of moving the + obsolete variables to one place was not so good... + +2010-05-27 21:58 xavier + + * [r6665] src/mgga_x_br89.c: Improved the numerical accuracy of the + non-linear solver in the BR89 + class of MGGAs. This means that the equation converges for all + values + of the rhs and the bisection is no longer needed. + +2010-05-26 08:02 marques + + * [r6659] src/lda_c_1d_csc.c: Forgot an else + +2010-05-26 07:58 marques + + * [r6658] src/lda_c_1d_csc.c: Added the parametrization of the CSC + functional for the soft Coulomb interaction and a=0.5 + +2010-05-05 19:09 olivares + + * [r6604] INSTALL: Returned INSTALL to its original configuration + +2010-05-05 15:25 olivares + + * [r6601] INSTALL: updates on the electrostatic boundary conditions + +2010-03-25 10:48 xavier + + * [r6390] src/libxc_master.F90: Moved the definition of + XC_FAMILY_KS_INVERSION to octopus. Since libxc + is an independent library we should keep it separated from + octopus + specific variables. Anyway we should find a better way to deal + with + this situation. + +2010-03-25 08:15 appel + + * [r6389] src/libxc_master.F90: Adding KS inversion as a new family + of functionals + in a spirit similar to OEP. There is now a new module + xc_ks_inversion_m that contains most of the inversion + code. I have adapted the 'old' runmode invert_ks to + use this new infrastructure. + + To deal with dependencies I had to move the eigensolver + module from scf to system (as suggested by Miguel). This + is analogous to the linear solver in the case of OEP. + + Not all things are in place yet to use the functional + family in the general case, however the old runmode + should work as before. + +2010-03-24 08:27 marques + + * [r6383] src/Makefile.am: I believe this is the correct way of + handling the dependencies. Sorry, I + had this lingering around already for a couple of weeks, but I + forgot to + commit it. + +2010-03-23 18:34 xavier + + * [r6380] src/Makefile.am: Another attempt to get dependencies + right. + +2010-03-23 18:14 xavier + + * [r6379] src/Makefile.am: My "fix" for libxc makes things worse. + Someone knows how to fix this? + +2010-03-23 17:36 xavier + + * [r6378] src/Makefile.am: A hack to fix the dependencies in libxc. + +2010-03-22 16:46 xavier + + * [r6372] configure.ac, m4/ax_f90_module_extension.m4, + src/Makefile.am: Fixed some autotools warnings in libxc. + +2010-03-21 11:06 xavier + + * [r6362] configure.ac, m4/ax_f90_module_extension.m4, + src/Makefile.am: Now libxc can deal with compilers that use + uppercase filenames for + modules. + +2010-03-20 19:12 xavier + + * [r6359] configure.ac, m4/ax_f90_module_extension.m4, + src/Makefile.am: * Now libxc installs the Fortran modules. + * Added a macro to detect the module extension. + +2010-03-08 22:28 dstrubbe + + * [r6347] m4: *) Improved formatting + *) Added push_sub's + *) Changed single-letter variable + *) Set svn:ignore on another automatically generated file in + libxc + +2010-03-06 03:38 dstrubbe + + * [r6344] m4: *) Improved formatting and comments + *) Added push_sub's, and removed one that appeared an excessive + number of times in the debugging stack trace + *) Set svn:ignore properties for libxc files generated by libtool + 2 + +2010-03-02 15:55 marques + + * [r6334] src/Makefile.am: This is an overkill hack in order for + libxc to compile with different versions of libtool. Let's see + what I broke now... + +2010-03-02 00:21 dstrubbe + + * [r6329] ., build, src, testsuite: Set svn:ignore for new files + being created in libxc. + +2010-02-26 16:22 marques + + * [r6325] src/Makefile.am: Stupid hack to go around buggy + libtool/automake. This works in tddft.org, let's see the others + now. + +2010-02-26 15:42 marques + + * [r6324] configure.ac, src/Makefile.am: Let's see if this fixes + the compilations issues. Needless to say that it + compiles without problem in my machine... I hate the autotools! + +2010-02-26 14:01 marques + + * [r6323] Makefile.am, build, build/Makefile.am, build/libxc.pc.in, + build/libxc.spec.in, configure.ac, src/Makefile.am: Added the + option to compile libxc dynamically, and a target to create + libxc.rpm + + I had to use libtool, which led to some problem. Let's see if all + the + architectures are happy with them... + +2010-02-09 09:40 marques + + * [r6309] src/Makefile.am, src/lda_c_ml1.c, src/lda_c_ps94.c, + src/test.c: Renamed the PS94 functional to the name given in the + original article, + and added a second version of the functional + +2010-02-09 09:27 marques + + * [r6308] src/lda_c_ps94.c: Now also vxc is working for this + functional. I will leave fxc and kxc + for the future ;) + +2010-02-08 15:12 marques + + * [r6307] src/lda_c_ps94.c: Sorry, there was a semi-colon missing + +2010-02-08 14:11 marques + + * [r6306] src/Makefile.am, src/lda_c_ps94.c, src/test.c: Initial + implementation of the Proynov and Salahub 94 LDA. The energy is + working and giving the right results. Now it is time to optimize + and to + compute the derivatives. + + Yes, I was also surprised that there are even more LDA + functionals. This + one is anyway different, as it is not a parametrization of the CA + Monte-Carlo data, but uses a quite different approach. + +2010-02-04 10:11 marques + + * [r6302] src/gga_perdew.c: Small correction pointed out by Damien + Caliste. + +2010-02-03 15:58 marques + + * [r6301] src/gga.c, src/gga_c_am05.c, src/gga_c_lm.c, + src/gga_c_lyp.c, src/gga_c_p86.c, src/gga_c_pbe.c, + src/gga_c_pw91.c, src/gga_x_2d_b86.c, src/gga_x_2d_b86_mgc.c, + src/gga_x_2d_b88.c, src/gga_x_2d_pbe.c, src/gga_x_am05.c, + src/gga_x_b86.c, src/gga_x_b86_mgc.c, src/gga_x_b88.c, + src/gga_x_bayesian.c, src/gga_x_dk87.c, src/gga_x_ft97.c, + src/gga_x_g96.c, src/gga_x_lg93.c, src/gga_x_mpbe.c, + src/gga_x_optx.c, src/gga_x_pbe.c, src/gga_x_pbea.c, + src/gga_x_pw86.c, src/gga_x_pw91.c, src/gga_x_rpbe.c, + src/gga_x_wc.c, src/gga_xc_1w.c, src/gga_xc_b97.c, + src/gga_xc_edf1.c, src/gga_xc_lb.c, src/hyb_gga_xc_b1wc.c, + src/hyb_gga_xc_b3lyp.c, src/hyb_gga_xc_b97.c, + src/hyb_gga_xc_o3lyp.c, src/hyb_gga_xc_pbeh.c, src/lca_lch.c, + src/lca_omc.c, src/lda.c, src/lda_c_1d_csc.c, + src/lda_c_2d_amgb.c, src/lda_c_2d_prm.c, src/lda_c_hl.c, + src/lda_c_pw.c, src/lda_c_pz.c, src/lda_c_rpa.c, src/lda_c_vwn.c, + src/lda_c_wigner.c, src/lda_x.c, src/lda_x_1d.c, src/lda_x_2d.c, + src/lda_xc_teter93.c, src/libxc_master.F90, src/mgga.c, + src/mgga_c_tpss.c, src/mgga_x_br89.c, src/mgga_x_lta.c, + src/mgga_x_m06l.c, src/mgga_x_tau_hcth.c, src/mgga_x_tpss.c, + src/mgga_xc_vsxc.c, src/util.h, src/work_gga_x.c, src/work_lda.c, + src/work_mgga_c.c, src/work_mgga_x.c, src/xc.h, src/xc_f.c, + testsuite/xc-consistency.c, testsuite/xc-get_data.c: I finished + cleaning the interface of libxc. The release of 1.0beta will + follow in the next days. + +2010-02-01 09:27 micael + + * [r6295] src/mgga.c: *) The calculation of the laplacian of the + density was wrong in the spin-polarized case. + *) A variable was not initialized in libxc for the MGGAs when the + density was bellow the threshold. + *) Some small fixes to the etsf_io output. + +2010-01-19 11:29 marques + + * [r6265] src/gga_c_lyp.c, src/gga_c_p86.c, src/gga_c_pbe.c, + src/gga_c_pw91.c, src/gga_x_b88.c, src/gga_x_pbe.c, + src/gga_xc_edf1.c, src/mix_func.c: Several fixes for the bugs + found by Xavier while setting up the xc test. + Fairly trivial things, but anyway quite annoying... + +2009-12-15 14:37 marques + + * [r6226] src/lda_x_1d.c: Bug fix: there was a "-1" missing in an + index which caused some + compilers to return garbage (which was the correct answer). This + should + fix the 1D test that is currently failing. Please 1D people check + your + calculations!!!! + +2009-12-15 12:12 marques + + * [r6225] src/gga_x_b88.c, src/integrate.c: Bug fix in Pulay + mixing: a range was wrong in an allocation + Bug fix in 1D CSC functional: variables were not deallocated + +2009-12-08 13:17 marques + + * [r6198] src/gga_x_pbe.c, src/gga_x_rpbe.c, src/gga_xc_edf1.c, + src/mix_func.c, src/util.h, src/xc.h, testsuite/xc-reference.pl: + *) Bug fix when calculating v2rho2 in mixed GGAs + *) The optPBE_vdW functional was wrong + *) Now xc-reference.pl knows about build directories + +2009-12-08 09:02 dstrubbe + + * [r6197] src/lda_c_pz.c: *) The kdotp run mode now prints out band + velocities, which in fact needs only the perturbation Hamiltonian + and not the perturbed wavefunctions. + *) Broke up kdotp_output into kdotp_write_degeneracies and + kdotp_write_eff_mass + *) A couple typographical things in LDA C PZ. + +2009-12-03 20:17 marques + + * [r6190] src/work_lda.c: Bug fixed: this was triggered by the + changing of the thresholds, but it + was there for a long time. Now the tests should pass. + +2009-12-02 17:16 micael + + * [r6185] src/gga_perdew.c, src/util.h, src/work_gga_x.c, + src/work_mgga_x.c: More fixes regarding very small densities. + +2009-12-02 10:59 marques + + * [r6184] src/gga.c, src/gga_c_lm.c, src/gga_c_pbe.c, + src/gga_c_pw91.c, src/gga_perdew.c, src/gga_x_b88.c, src/lda.c, + src/util.c: Some cleaning regarding very small densities + +2009-12-01 09:22 marques + + * [r6175] src/Makefile.am: Sorry, this file should not have been + committed: reverting it. + +2009-12-01 09:10 marques + + * [r6174] src/Makefile.am, src/gga_x_b88.c, src/gga_x_pbe.c, + src/gga_xc_edf1.c, src/util.h, src/xc.h: 3 new functionals + optimized to be used with the Dion et al vdW + functional. See http://arxiv.org/abs/0910.0438 + +2009-11-24 13:16 xavier + + * [r6128] configure.ac: The macro required by C99 is not available + in autoconf 2.59, that is + the one in tddft. So we will have to stay with c89 for the + moment. + +2009-11-24 12:51 xavier + + * [r6127] configure.ac: Now Octopus and libxc set the C compiler in + C99 mode. + +2009-11-19 20:49 dstrubbe + + * [r6083] src/gga_xc_lb.c, testsuite/xc-consistency.c: A few + spelling issues. + +2009-11-18 09:53 marques + + * [r6077] src/Makefile.am, src/gga_x_2d_b86.c, + src/gga_x_2d_b86_mgc.c, src/gga_x_2d_b88.c, src/gga_x_2d_pbe.c, + src/gga_x_b86.c, src/util.h, src/work_gga_x.c, + src/work_gga_x_2d.c: Added a bunch of 2D GGA functionals. They + are still under testing, so + don't rush to do calculations with them... + +2009-11-09 09:03 marques + + * [r6046] src/lda_x.c, src/xc_f.c: *) Now the relativistic + corrections are also present in higher + derivatives + *) Corrected warning in the interface of the meta-GGAs + +2009-11-09 05:21 dstrubbe + + * [r6045] src/lda_x.c: *) Capitalization of SPARSKIT + *) A u-umlaut got turned into garbage in a comment, so I replaced + it with "ue" + +2009-11-07 12:20 micael + + * [r6040] src/lda_x.c, src/libxc_master.F90, src/util.h, src/xc.h, + src/xc_f.c: *) Put the relativistic correction to the exchange + part of the LDA back into libxc. + *) Replaced the Xe UPF pseudopotential with a correct one and + removed all the other UPF pseudos. + *) The SO coupling test is again active. + +2009-11-06 09:47 marques + + * [r6033] src/gga_x_2d_b86_mgc.c, src/lda_c_2d_prm.c, + src/work_gga_x_2d.c: Bug fix: some functionals were not working + in 2D. + +2009-11-06 07:52 marques + + * [r6032] src/xc_f.c: Fixed a couple of bugs: + *) LB94 was not working due to two problems with the interface + *) oct-center-geom was segfaulting due to incorrect + initialization of + geometry + +2009-11-03 16:51 micael + + * [r6014] src/mgga_x_br89.c: The gradient and the laplacian of the + density used to compute the xc potential are now computed + directly from the wavefunctions. + +2009-10-30 16:01 micael + + * [r6007] src/gga_xc_lb.c: *) Bug fixed: the LB94 functional was + not working for the spin-polarized case because of a couple of + misplaced brackets. + +2009-10-16 08:08 marques + + * [r5940] src/Makefile.am, src/functionals.c, src/gga.c, + src/gga_c_lyp.c, src/gga_x_b88.c, src/gga_xc_1w.c, + src/gga_xc_edf1.c, src/gga_xc_xlyp.c, src/hyb_gga.c, + src/hyb_gga_xc_b1wc.c, src/hyb_gga_xc_b3lyp.c, + src/hyb_gga_xc_b97.c, src/hyb_gga_xc_o3lyp.c, + src/hyb_gga_xc_pbeh.c, src/libxc_master.F90, src/mgga_x_br89.c, + src/mix_func.c, src/util.h, src/xc.h, src/xc_f.c, + testsuite/xc-consistency.c, testsuite/xc-get_data.c: Cleaned up + the hybrids. There is no more the specific interface + hyb_gga_xxx, as the generic gga_xxx handles the requests. + +2009-10-13 11:53 marques + + * [r5939] src/gga_xc_lb.c: Added teh asymptotic expansion fo LB94 + +2009-10-09 08:36 micael + + * [r5933] INSTALL, src/gga_xc_lb.c, src/mgga.c, src/mgga_x_br89.c, + src/xc.h, src/xc_f.c: *) Fixed a couple of bugs in libxc. + *) Changed the initial point for the Newton-Raphton routine in + the Becke & Johnson functional. + +2009-10-01 08:30 marques + + * [r5923] src/mgga.c: This corrects the assertion failure of Fulvio + +2009-09-25 18:46 dstrubbe + + * [r5916] src/lda_x.c: *) In the file xc_oep.F90, an error message + is written if in parallel saying "Full OEP is not allowed with + the code parallel in states." However, the actual condition + implemented in the code is whether it is parallel at all. I'm not + sure if the condition, or the message, is wrong and should be + changed. + *) Improvements to documentation, comments, and output. + *) Added and corrected push_sub's. + *) Lengthened some single-letter variables. + *) Alphabetized module lists. + *) Made tests be called curvilinear instead of 'curvlinear' + +2009-09-24 12:47 marques + + * [r5909] configure.ac, src/functionals.c, src/gga.c, + src/gga_c_am05.c, src/gga_c_lm.c, src/gga_c_lyp.c, + src/gga_c_p86.c, src/gga_c_pbe.c, src/gga_c_pw91.c, + src/gga_perdew.c, src/gga_xc_b97.c, src/gga_xc_lb.c, src/lda.c, + src/lda_c_1d_csc.c, src/lda_c_2d_prm.c, src/lda_c_vwn.c, + src/lda_x.c, src/lda_x_1d.c, src/libxc_master.F90, src/mgga.c, + src/mgga_c_tpss.c, src/mgga_x_br89.c, src/mgga_x_m06l.c, + src/mgga_xc_vsxc.c, src/util.h, src/work_gga_becke.c, + src/work_mgga_c.c, src/xc.h, src/xc_f.c, + testsuite/xc-consistency.c, testsuite/xc-get_data.c: *) I started + changing the interface of libxc following a suggestion of + the devlopers of ELK. Hybrids should nto work, and some + functionals may + give segmentation faults. In any case, all tests are passed in my + machine + *) Added the functional of Esa and Stefano + *) Corrected the builddir in mk_functionals_list.pl + *) Added dummy integers to mpi_debug.F90 mpi_lib.F90 so that + compilers + stop complaining + *) Decreased the precision of the SIC test + +2009-09-09 08:32 marques + + * [r5886] src/lda_x_1d.c, src/libxc_master.F90, src/xc_f.c, + testsuite/Makefile.am: *) Now octopus is also aware of the 1D + exchange functional + *) Replaced the _init_exchanged and _init_correlation by a + simpler + _init_functl + *) Some more tests are passed in 4D. The exceptions are now the + open + systems tests and the periodic_systems/06-h2o_pol_lr.test + *) kpoints are now properly deallocated and the volume of the + unit + cell is also properly calculated in 1D and 2D + +2009-09-07 11:31 marques + + * [r5885] src/lda_x_1d.c, src/special_functions.c, src/test.c, + src/util.h: Now the 1D exchange functional seems to be working. + It includes both + spins,a nd the two forms of the interaction. I also implemented + Fxc. + +2009-08-28 23:24 dstrubbe + + * [r5870] src/xc.h: Some changes to documentation, comments, and + output. + +2009-08-28 10:23 marques + + * [r5869] src/Makefile.am, src/integrate.c, src/lda_c_1d_csc.c, + src/lda_c_vwn.c, src/lda_x_1d.c, src/mgga_x_br89.c, + src/special_functions.c, src/test.c, src/util.h, src/xc.h, + src/xc_config.h: *) Added the LDA exchange in 1D. This functional + is still not functional + *) Added the LDA correlation in 1D of Casula for a soft-Coulomb + interaction + *) Corrected the segmentation fault found by Fulvio + +2009-08-24 18:50 dstrubbe + + * [r5853] src/lda_x.c: *) Removed troublesome ' in comment in + libxc, in the file produced by the new script, as well as what I + believe is the source from which it arises + *) Made mk_functionals_list.pl refer to its actual name + *) Corrected spelling and punctuation in variable documentation + +2009-08-21 09:21 marques + + * [r5840] src/lda_c_1d_csc.c, src/libxc_master.F90, src/xc.h, + src/xc_f.c: Added the soft-Coulomb version of the 1d_csc lda + +2009-07-21 08:56 marques + + * [r5740] src/gga.c: This should solve the problem of David. + +2009-07-15 09:46 marques + + * [r5718] src/gga_c_lyp.c, src/gga_c_p86.c, src/gga_xc_lb.c, + src/mix_func.c, src/work_gga_becke.c, src/xc.h: Some more changes + related to the interface. I am sure that many of the non-standard + functionals have problems, so be careful. + +2009-07-15 09:23 marques + + * [r5717] src/gga.c, src/gga_c_am05.c, src/gga_c_lm.c, + src/gga_c_lyp.c, src/gga_c_p86.c, src/gga_c_pbe.c, + src/gga_c_pw91.c, src/gga_xc_lb.c, src/hyb_gga.c, src/lda.c, + src/libxc_master.F90, src/mgga_c_tpss.c, src/mix_func.c, + src/work_gga_x.c, src/xc.h, src/xc_f.c, + testsuite/xc-consistency.c, testsuite/xc-get_data.c: Now the GGas + are also done in blocks. The current interface is just a hack to + make things work. I hope to be able to fix it soon. + +2009-06-30 11:03 marques + + * [r5661] src/Makefile.am, src/gga_xc_edf1.c, src/gga_xc_lb.c, + src/gga_xc_xlyp.c, src/hyb_gga_xc_b3lyp.c, + src/hyb_gga_xc_o3lyp.c, src/lda.c, src/lda_c_xalpha.c, + src/lda_x.c, src/libxc_master.F90, src/work_lda.c, src/xc.h, + src/xc_f.c, testsuite/xc-consistency.c, testsuite/xc-get_data.c: + *) now the LDA works on vectors to a very low level + *) Rearranged th exchange and xalpha interfaces to make them more + standard + + Note that libxc at the moment has a inconsistent interface. I + will try to fix it soon. + +2009-06-30 09:47 marques + + * [r5660] TODO, src/gga_c_am05.c, src/gga_c_p86.c, + src/gga_perdew.c, src/gga_xc_lb.c, src/lda.c, src/lda_c_xalpha.c, + src/libxc_master.F90, src/mix_func.c, src/work_gga_becke.c, + src/work_mgga_c.c, src/xc.h, src/xc_f.c, + testsuite/xc-consistency.c, testsuite/xc-get_data.c: *) First + step in the dircetion of vector calling libxc in order to + optimize performance. + +2009-06-29 09:55 marques + + * [r5654] src/mgga_x_br89.c, src/test.c, src/work_mgga_x.c: Some + more corrections to the TP09 functional. I believe that it might + be working now. + +2009-06-25 15:43 marques + + * [r5636] src/mgga.c, src/mgga_x_br89.c, src/work_mgga_x.c, + src/xc_f.c: One can not run the PB09 thing, but, as expected, the + calculation for a finite system is kind of unstable... maybe it + is better for a solid ;) + +2009-06-25 14:34 marques + + * [r5634] src/libxc_master.F90, src/xc_f.c: Now the mggas are again + implemented in the code. + +2009-06-25 10:47 xavier + + * [r5633] m4/acx.m4, m4/fc_integer.m4: Now octopus can be cross + compiled. To do it, + he user has to pass two variables + to the configure script: + + FC_INTEGER_SIZE=4 + CC_FORTRAN_INT=int + + With this change octopus compiles in a Blue Gene/P. + +2009-06-24 15:19 marques + + * [r5631] src/mgga_x_br89.c: Forgot a factor. + +2009-06-24 15:18 marques + + * [r5630] src/mgga_x_br89.c, src/mgga_x_lta.c, src/mgga_x_m06l.c, + src/mgga_x_tau_hcth.c, src/mgga_x_tpss.c, src/mgga_xc_vsxc.c, + src/work_mgga_x.c, src/xc.h: Added the famous new functional of + Tran & Blaha. This was not tested, and there is a factor of 2 + that is bugging me... + +2009-06-24 14:26 marques + + * [r5629] src/Makefile.am, src/libxc_master.F90, src/mgga_x_br89.c, + src/mgga_x_br97.c: *) I made a mistake in the year of + becke-roussel + *) hopefully it now compiles + +2009-06-24 14:15 marques + + * [r5628] src/Makefile.am, src/gga.c, src/gga_c_am05.c, + src/gga_c_p86.c, src/gga_perdew.c, src/gga_xc_lb.c, + src/hyb_gga.c, src/lda.c, src/libxc_master.F90, src/mgga.c, + src/mgga_c_tpss.c, src/mgga_x_br97.c, src/mgga_x_lta.c, + src/mgga_x_m06l.c, src/mgga_x_tau_hcth.c, src/mgga_x_tpss.c, + src/mgga_xc_vsxc.c, src/test.c, src/work_gga_becke.c, + src/work_mgga_c.c, src/work_mgga_x.c, src/xc.h, src/xc_f.c, + testsuite/xc-consistency.c, testsuite/xc-get_data.c: *) + Hartree-Fock now works with spinors (I hope) + *) Added Becke-Roussel Meta-GGA. This one should be working asa + it was tested against a piny_md. + *) Because of that i had to change slightly the interface to + libxc + +2009-06-03 23:47 dstrubbe + + * [r5555] src: *) Changed svn:ignore properties to get rid of a + bunch of ? from svn status. + *) Added FromScratch = yes to some tests to remove warnings about + being unable to read from restart directory. + *) Added a Cl pseudopotential since I am using this frequently. + +2009-05-27 11:05 marques + + * [r5508] ChangeLog: Small changes required to compile octopus with + ifort + +2009-05-26 09:23 marques + + * [r5495] ChangeLog: *) Added a MemoryLimit variable. Octopus will + stop if this variable is set and if the total memory depasses its + value + *) Octopus was not compiling in 4D due to array mismatches + +2009-05-18 08:25 marques + + * [r5417] ChangeLog, src/libxc_master.F90, src/xc_f.c: Changes + necessary to compile octopus in single precision more. Alberto, + I guess I made a disaster in your opt-control code (that now will + not + wortk in single precision). The problem are the minimizing + routines that + do not have interfaces in single precision more. One should add + it... + +2009-05-13 10:54 marques + + * [r5380] src/gga_c_pbe.c, src/gga_x_pbe.c: Added a couple of + reparametrizations of the PBE by the group of Klaus Capelle. Note + that all the other combinations present in the paper can be + obatined by combining the already existing exchanges and + correlations of PBE and PBE_SOL. For example: GCGX = x_PBE_SOL + + c_PBE + +2009-04-21 07:52 marques + + * [r5297] testsuite/Makefile.am: I implemented the inversion of the + Kohn-Sham equations (static). It seems to work in simple cases, + but the iterative procedure does lack stability, and fails to + converge for more complicated densities... + +2009-04-17 12:56 marques + + * [r5257] ChangeLog, Makefile.am, configure.ac, m4/acx.m4, + m4/fcflags.m4, src/Makefile.am, src/functionals.c, + src/get_funcs.pl, src/gga.c, src/gga_c_am05.c, src/gga_c_lm.c, + src/gga_c_lyp.c, src/gga_c_p86.c, src/gga_c_pbe.c, + src/gga_c_pw91.c, src/gga_perdew.c, src/gga_x_2d_b86_mgc.c, + src/gga_x_am05.c, src/gga_x_b86.c, src/gga_x_b86_mgc.c, + src/gga_x_b88.c, src/gga_x_bayesian.c, src/gga_x_dk87.c, + src/gga_x_ft97.c, src/gga_x_g96.c, src/gga_x_lg93.c, + src/gga_x_mpbe.c, src/gga_x_optx.c, src/gga_x_pbe.c, + src/gga_x_pbea.c, src/gga_x_pw86.c, src/gga_x_pw91.c, + src/gga_x_rpbe.c, src/gga_x_wc.c, src/gga_xc_1w.c, + src/gga_xc_b97.c, src/gga_xc_edf1.c, src/gga_xc_lb.c, + src/gga_xc_xlyp.c, src/hyb_gga.c, src/hyb_gga_xc_b1wc.c, + src/hyb_gga_xc_b3lyp.c, src/hyb_gga_xc_b97.c, + src/hyb_gga_xc_o3lyp.c, src/hyb_gga_xc_pbeh.c, src/lca.c, + src/lca_lch.c, src/lca_omc.c, src/lda.c, src/lda_c_1d_csc.c, + src/lda_c_2d_amgb.c, src/lda_c_2d_prm.c, src/lda_c_hl.c, + src/lda_c_pw.c, src/lda_c_pz.c, src/lda_c_rpa.c, src/lda_c_vwn.c, + src/lda_c_wigner.c, src/lda_c_xalpha.c, src/lda_x.c, + src/lda_x_2d.c, src/lda_xc_teter93.c, src/libxc_master.F90, + src/mgga.c, src/mgga_c_tpss.c, src/mgga_x_lta.c, + src/mgga_x_m06l.c, src/mgga_x_tau_hcth.c, src/mgga_x_tpss.c, + src/mgga_xc_vsxc.c, src/mix_func.c, src/special_functions.c, + src/string_f.h, src/test.c, src/util.c, src/util.h, + src/work_gga_becke.c, src/work_gga_x.c, src/work_gga_x_2d.c, + src/work_lda.c, src/work_mgga_c.c, src/work_mgga_x.c, src/xc.h, + src/xc_f.c, src/xc_s.h, testsuite/Makefile.am, + testsuite/xc-consistency.c, testsuite/xc-get_data.c, + testsuite/xc-reference.pl, testsuite/xc-run_testsuite: Changed + the license with the script that Tobias sent. Thanks Tobias. + +2009-04-13 22:25 xavier + + * [r5202] Makefile.am: This fixes the problem with make distcheck. + +2009-03-31 09:29 marques + + * [r5133] ChangeLog, Makefile.am, src/Makefile.am: A couple more + fixes to the make environment + +2009-03-31 09:09 marques + + * [r5131] AUTHORS, NEWS, README, src/lda_x.c: Little corrections to + some stupid files + +2009-03-26 10:27 marques + + * [r5116] ChangeLog, Makefile.am, PACKAGING, configure.ac, + m4/acx.m4: Several details necessary to package libxc. + *) There is now a PACKAGING file + *) FCCPP explanation now appears in ./configure --help + *) Automatic generation of ChangeLog file -- maybe it would be + better to + separate it per years, but I don't know how to do it well... + +2009-03-20 14:40 marques + + * [r5092] src/lda_x_2d.c: Forgot this file... sorry. + +2009-03-20 12:00 marques + + * [r5091] DONE, src/lda_c_2d_prm.c, src/lda_c_hl.c, src/test.c: + Some more fixes, and now HL also has Kxc. + +2009-03-20 09:48 marques + + * [r5090] configure.ac, src/Makefile.am, src/lda_c_1d_csc.c, + src/lda_c_2d_amgb.c, src/lda_x.c, src/test.c, src/work_lda.c, + src/work_lda_1d.c: Reorganization of the LDAs of reduced + dimension. Now there is a common + driver routine in work_lda that handles 1, 2, and 3 dimensions. I + also + took the opportunity to add fxc and kxc to the 2d ldas (both + exchange + and amgb). I do not know if his is useful (someone interested in + hyperpolarizabilities of 2D systems?), but I added it for + completeness. + +2009-03-17 10:03 mjv500 + + * [r5086] src/lda_x.c: MIGUEL CHECK THIS stray float + +2009-03-16 08:33 marques + + * [r5085] src/gga_x_am05.c, src/gga_x_b86.c, src/gga_x_b86_mgc.c, + src/gga_x_b88.c, src/gga_x_bayesian.c, src/gga_x_dk87.c, + src/gga_x_ft97.c, src/gga_x_g96.c, src/gga_x_lg93.c, + src/gga_x_mpbe.c, src/gga_x_optx.c, src/gga_x_pbe.c, + src/gga_x_pbea.c, src/gga_x_pw86.c, src/gga_x_pw91.c, + src/gga_x_rpbe.c, src/gga_x_wc.c, src/lda_x.c, src/mgga_x_m06l.c, + src/test.c, src/util.h, src/work_gga_x.c: Som cleaning in the + ggas + +2009-03-11 09:00 marques + + * [r5078] src/string_f.h: It is easier to maintain a copy of this + file here, so that this library + is indeed independent. + +2009-03-11 08:58 marques + + * [r5077] src/Makefile.am, src/lda_c_vwn.c, src/xc_f.c: Now also + VWN has analytical Kxc + +2009-03-09 16:52 mjv500 + + * [r5069] configure.ac: had to fix dependencies after removal of + libstring_f - someone competent check this + +2009-03-09 14:08 marques + + * [r5067] DONE, src/lda_c_pw.c: Now pw also has analytical Kxc + +2009-03-09 12:30 marques + + * [r5065] DONE, src/test.c: I got rid of libstring_f. It was + replaced simply by a header file + (string_f.h) that is included twice in octopus (liboct_parser and + libxc/src). The main difference is that TO_C_STR passed to a + subroutien + instead of a function. + + I used the opportunity to fix the strcasestr definition that was + quite + broken. + +2009-03-09 10:16 marques + + * [r5064] src/lda_c_pz.c: Now Perdew-Zunger has analitic 3rd + derivatives. Due to that, the values + of the hyperpolarizability test changed slightly (4th digit) + +2009-03-09 09:11 marques + + * [r5063] src/lda.c, src/lda_c_rpa.c, src/lda_c_wigner.c, + src/lda_xc_teter93.c, src/test.c, src/util.h, src/work_lda.c: *) + Added support for the calculation of kxc (the 3rd derivative of + Exc) + in libxc. I also changed the interface to something more + reasonable. Now + we have, when spin is polarized, kxc(4) = (uuu, uud, udd, ddd) + + *) Now octopus does stop if one tries to run with fxc or kxc != + LDA. Up + to now it was simply ignoring fxc (i.e., it was performing an RPA + calculation). David and Xavier, please check this one out. + +2009-03-05 13:04 marques + + * [r5036] src/lda.c, src/lda_c_hl.c, src/lda_c_pw.c, + src/lda_c_pz.c, src/lda_c_rpa.c, src/lda_c_vwn.c, + src/lda_c_wigner.c, src/lda_c_xalpha.c, src/lda_xc_teter93.c, + src/test.c, src/util.h, src/work_lda.c, src/xc.h: *) Simplified a + bit more the interface to the routines. + *) Added support for spin-unpolarized Kxc, and added the third + derivatives of wigner and rpa corelation functionals. + +2009-03-05 09:13 marques + + * [r5035] src/lda_c_hl.c, src/lda_c_pw.c, src/lda_c_pz.c, + src/lda_c_rpa.c, src/lda_c_vwn.c, src/lda_c_wigner.c, + src/lda_xc_teter93.c, src/work_lda.c: Cleaned a bit the LDAs. + +2009-02-25 17:40 xavier + + * [r5001] src/Makefile.am, src/lda_c_2d_prm.c, + src/lda_c_2d_prm08.c, src/libxc_master.F90, src/xc.h, src/xc_f.c, + testsuite/xc-consistency.c: Due to the 31 character limitation I + had to rename the lda_c_2d_prm08 functional + to lda_c_2d_prm. Miguel, can you check that I did it correctly? + +2009-02-25 10:25 marques + + * [r4998] src/Makefile.am, src/lda_c_1d_csc.c, + src/libxc_master.F90, src/test.c, src/work_lda_1d.c, src/xc.h, + src/xc_config.h, src/xc_f.c: I implemented the 1D correlation LDA + of Barone's group. Note that this + has not been tested, and that there is the exchange missing... + +2009-02-06 00:23 dstrubbe + + * [r4925] m4/acx.m4: The macro that checks for "very long lines" + used a test program with a line that was very long, but still not + nearly so long as some lines generated by the ALLOCATE + preprocessor macro in the code. The PGI 8.0-1 Fortran compiler + passed that test in the configure script since it could handle + 140 characters in a line, but could not handle 270 characters. I + approximately tripled the length of that line in the test program + to 433 characters, so that now PGI is considered not to accept + long lines. + +2009-01-05 10:41 marques + + * [r4848] DONE, TODO, src/Makefile.am, src/gga_x_bayesian.c: Added + a new form for the exachange enhancement factor that comes from a + bayesian best fit procedure + +2008-12-02 08:38 marques + + * [r4809] src/hyb_gga_xc_b1wc.c: Added a new hybrid, + XC_HYB_GGA_XC_mPW1K (modified Perdew-Wang for + kinetics) + +2008-12-01 09:58 marques + + * [r4808] TODO, src/gga_xc_b97.c, src/hyb_gga_xc_b3lyp.c, + src/hyb_gga_xc_b97.c: Added the Schmider-Becke 98 Hybrid GGA. + This is again a + reparametrization of the Becke-97 form. There are 6 versions of + it in + that paper, and I included them all. Although the functional is a + hybrid, I had to include also the "pure" GGA versions. The + keywords are: + + for the "pure" GGAs + XC_GGA_XC_SB98_1a, XC_GGA_XC_SB98_1b, XC_GGA_XC_SB98_1c, + XC_GGA_XC_SB98_2a, XC_GGA_XC_SB98_2b, XC_GGA_XC_SB98_2c + + to be used as a hybrid + XC_HYB_GGA_XC_SB98_1a, XC_HYB_GGA_XC_SB98_1b, + XC_HYB_GGA_XC_SB98_1c + XC_HYB_GGA_XC_SB98_2a, XC_HYB_GGA_XC_SB98_2b, + XC_HYB_GGA_XC_SB98_2c + +2008-11-28 15:40 marques + + * [r4803] TODO, src/Makefile.am, src/gga_xc_xlyp.c, + src/hyb_gga_xc_b1wc.c, src/hyb_gga_xc_b3lyp.c, + src/hyb_gga_xc_b3p86.c, src/hyb_gga_xc_b3pw91.c, + src/hyb_gga_xc_o3lyp.c, src/hyb_gga_xc_x3lyp.c: Cleaned up a bit + the hybrid GGAs, and added some more hybrids on the + process. Let me see if I don't forget any: XC_HYB_GGA_XC_mPW3PW, + XC_HYB_GGA_XC_B1LYP, XC_HYB_GGA_XC_B1PW91, XC_HYB_GGA_XC_mPW1PW, + XC_HYB_GGA_XC_mPW3LYP + +2008-11-28 10:07 marques + + * [r4801] src/gga_x_2d_b86_mgc.c, src/gga_x_pw91.c: *) Fixed the + parameters of mPW91. I believe that this functional is + correct now + *) Added the correct parameters for the 2D B86 MGC functional + +2008-11-27 10:39 marques + + * [r4795] testsuite/hyb_gga_xc_b3lyp.data: There was a small but in + b3lyp that was solved. Now libxc gives exactly + the same thing as the repository, so I submit the repository data + +2008-11-27 10:36 marques + + * [r4794] TODO, src/Makefile.am, src/gga.c, src/gga_xc_1w.c, + src/gga_xc_edf1.c, src/hyb_gga.c, src/hyb_gga_xc_b1wc.c, + src/hyb_gga_xc_b3lyp.c, src/hyb_gga_xc_b3p86.c, + src/hyb_gga_xc_b3pw91.c, src/hyb_gga_xc_b97.c, + src/hyb_gga_xc_o3lyp.c, src/hyb_gga_xc_pbeh.c, + src/hyb_gga_xc_x3lyp.c, src/mix_func.c, src/xc.h: *) Rewrote the + way that functionals that are linear combinations of + others are handled. + *) Added three new GGAs of this type that were constructed for + water: + XC_GGA_XC_PBE1W, XC_GGA_XC_MPWLYP1W, and XC_GGA_XC_PBELYP1W + +2008-11-26 10:24 marques + + * [r4793] src/hyb_gga_xc_b97.c: Sorry, there was a misspel that + broke the compilation + +2008-11-26 09:43 marques + + * [r4792] DONE, TODO, src/Makefile.am, src/gga.c, src/gga_xc_b97.c, + src/hyb_gga.c, src/hyb_gga_xc_b1wc.c, src/hyb_gga_xc_b97.c, + src/libxc_master.F90, src/util.h, src/work_gga_becke.c, src/xc.h, + src/xc_f.c, testsuite/xc-consistency.c, testsuite/xc-get_data.c, + testsuite/xc-reference.pl: Added the hybrid functionals + corresponding to the becke 97 GGAs. They + are: XC_HYB_GGA_XC_B97, XC_HYB_GGA_XC_B97_1, XC_HYB_GGA_XC_B97_2, + XC_HYB_GGA_XC_B97_K, and XC_HYB_GGA_XC_B97_3 + +2008-11-25 10:35 marques + + * [r4788] src/work_gga_becke.c: Forgot this file... + +2008-11-25 10:31 marques + + * [r4787] src/Makefile.am, src/gga_xc_b97.c, src/gga_xc_hcth.c, + src/test.c: Rewrote the B97 class of functionals. Now it also + includes fxc and some + mroe elements of this family. BTW, Xavier, included is the + functional of + Grimme that you sent me long ago... of course that to use it, one + should + also add the vdW term (trivial, actually) + +2008-11-20 15:18 marques + + * [r4778] src/gga_xc_hcth.c, testsuite/gga_xc_b97_1.data, + testsuite/gga_xc_b97_2.data: Added two other variants of Becke 97 + +2008-11-20 14:50 marques + + * [r4777] src/gga_xc_hcth.c, testsuite/gga_xc_b97.data: Added Becke + 97 functional + +2008-11-14 13:49 marques + + * [r4768] m4/fcflags.m4: Small things I found while trying to + compile in the new IBM Power 6 of CNRS + +2008-10-22 09:52 marques + + * [r4697] src/mgga_x_lta.c, src/work_mgga_x.c, src/xc_f.c: Some + bugs in the LTA corrected. I think one-shot calculations with LTA + are fine, but + self-consistent calculations give nonsense... + +2008-10-22 07:06 marques + + * [r4695] src/mgga_x_lta.c, src/mgga_xc_vsxc.c, src/test.c, + src/work_mgga_c.c, src/work_mgga_x.c, testsuite/xc-consistency.c: + *) Make check should work now. Can you please check, David? + *) Some bug fixes in the mggas, but there are still issues + +2008-10-20 14:21 xavier + + * [r4686] src/xc_f.c: The name of a libxc function was too long for + fortran. + +2008-10-20 13:21 marques + + * [r4685] src/libxc_master.F90, src/work_mgga_c.c: I implemented + the self-consistent MGGA functionals. However, calculatiosn with + them do not + converge! I am not sure if it is a bug somewhere, or numerical + instabilities. I am inclined to the + first option, of course, but I am not really sure. + +2008-10-20 09:39 marques + + * [r4683] src/xc.h, src/xc_f.c: Sorry for the mess: it should + compile now! + +2008-10-20 09:32 marques + + * [r4682] src/Makefile.am, src/gga_x_2D_b86_mgc.c, + src/gga_x_2d_b86_mgc.c, src/lda_c_2D_amgb.c, + src/lda_c_2D_prm08.c, src/lda_c_2d_amgb.c, src/lda_c_2d_prm08.c, + src/work_gga_x_2d.c: Cleanup the mess of 2d and 2D. Now, + everything is lowercase. + +2008-10-20 09:23 marques + + * [r4681] src/Makefile.am, src/gga_x_2D_b86_mgc.c, + src/lda_c_2D_amgb.c, src/lda_c_2D_prm08.c, src/lda_c_amgb.c, + src/lda_c_prm08.c, src/work_gga_x_2d.c: Added 2d to the + functionals in 2d + +2008-10-20 09:12 marques + + * [r4679] src/Makefile.am, src/gga_x_2D_b86_mgc.c, + src/mgga_xc_vsxc.c, src/test.c: I added support for mgga + calculations in the one_shot CalculationMode. Note that we can + _not_ dor + self-consistent mgga calculations at the moment. + I also added a new 2D functional that is going to be submitted + soon. + +2008-10-17 16:54 marques + + * [r4671] src/Makefile.am: Sorry, 2D GGAs will only go in the near + future ;)) Now it should + compile. + +2008-10-17 14:55 marques + + * [r4670] src/Makefile.am, src/mgga_x_gvt4.c, src/mgga_xc_vsxc.c, + src/util.h, src/work_mgga_c.c: *) Added support for the vsxc + correlation functional. Again, I have to + repeat that meta-GGAs have not been properly tested! + +2008-10-08 13:00 marques + + * [r4615] src/gga_perdew.c, src/mgga_c_tpss.c, src/work_mgga_x.c: + Some small fixes + +2008-10-07 07:45 marques + + * [r4598] src/Makefile.am, src/mgga_x_gvt4.c, src/mgga_x_m06l.c, + src/mgga_x_tau_hcth.c, src/test.c: Added the exchange part of the + tau-HCTH functional + +2008-10-06 14:22 marques + + * [r4591] src/Makefile.am, src/mgga_x_gvt4.c, src/mgga_x_m06l.c, + src/util.h: Added the exchange part of VSXC (called GVT4 for + whatever reason). + +2008-10-06 12:46 marques + + * [r4590] src/mgga_x_m06l.c: *) Changed the copyright notice to + something more "correct" + +2008-10-06 12:43 marques + + * [r4589] src/Makefile.am, src/gga_x_pbe.c, src/mgga_x_lta.c, + src/mgga_x_m06l.c, src/mgga_x_tpss.c, src/test.c, src/util.h, + src/work_mgga_x.c: *) Exchange in MGGA now is written in terms of + x and t + *) Added the exchange part of the M06l functional + +2008-10-01 15:02 marques + + * [r4581] src/mgga_c_tpss.c, src/mgga_x_tpss.c, src/test.c, + src/util.h, src/work_mgga_x.c: I have implemented the correlation + functional of TPSS. I made the usual + tests for the derivatives and they seem to work. However, I would + consider this functional highly experimental ;) + +2008-09-17 10:02 marques + + * [r4528] src/mgga_x_lta.c, src/mgga_x_tpss.c, src/test.c, + src/work_mgga_x.c: I believe that now the exchange in TPSS is + working. It has been + transformed to the new interface. It still has to be tested in + real + circunstances, of course. + +2008-09-16 14:51 marques + + * [r4523] src/mgga.c, src/mgga_x_lta.c, src/work_mgga_x.c: I now + believe that the LTA is working. + +2008-08-25 13:22 marques + + * [r4512] src/work_mgga_x.c: Sorry, forgot this detail + +2008-08-25 13:08 marques + + * [r4511] src/Makefile.am, src/functionals.c, src/mgga.c, + src/mgga_c_tpss.c, src/mgga_x_lta.c, src/mgga_x_tpss.c, + src/work_mgga_x.c, src/xc.h, src/xc_f.c, testsuite/xc-get_data.c: + Initial support for meta-GGAs. For now, I only added the local + tau approximation, but without real testing. I will proceed to + add also the TPSS. Note that for now, octopus is not able to use + these functionals. + +2008-08-25 09:19 marques + + * [r4510] src/gga_c_lm.c, src/lda_c_hl.c: *) added von Barth and + Hedin LDA + *) Now langreth & Mehl depends on the vBH LDA as it should + +2008-08-21 14:12 marques + + * [r4504] DONE, TODO, src/Makefile.am, src/gga_c_lm.c: Added + Langreth & Mehl GGA correlation + +2008-06-13 11:09 marques + + * [r4277] src/Makefile.am, src/lda_c_prm08.c, src/libxc_master.F90, + src/xc.h, src/xc_f.c, testsuite/xc-consistency.c: *) Added a 2D + correlation functional by Esa, Stefano and me to the + library. + +2008-05-30 07:45 marques + + * [r4208] src/util.h: Some people were having problems with the + definition of M_E. Apparently, + it is not standard (ansi) C, so we redefine it in case we are + asked + strict ansi + +2008-05-07 08:56 marques + + * [r4170] DONE, src/gga_perdew.c: Small problem with the PBE + solved. + +2008-05-07 08:46 marques + + * [r4169] src/gga_c_pbe.c, src/gga_c_pw91.c, src/gga_perdew.c, + src/util.h, testsuite/xc-consistency.c: Implemented the second + derivatives of the PBE xc functional. There seems + to be still a small error when for v2rho2 for spin unpolarized. + +2008-05-07 07:31 marques + + * [r4168] src/Makefile.am, src/hyb_gga_xc_b1wc.c: Added new hybrid + functional (B1WC) + +2008-04-30 13:18 marques + + * [r4128] DONE, src/gga_x_ft97.c, src/work_gga_x.c: Now also FT97 + gets second derivatives. This took me almost a day to do :(( + +2008-04-29 13:41 marques + + * [r4124] src/gga_x_am05.c: AM05 (exchange part) gets second + derivatives also + +2008-04-29 11:41 marques + + * [r4123] src/gga_c_pbe.c, src/gga_x_wc.c: Secon derivatives of the + WC functional + +2008-04-29 10:05 marques + + * [r4122] src/Makefile.am, src/gga_c_am05.c, src/gga_c_pbe.c, + src/gga_x_am05.c, src/gga_x_lg93.c, src/gga_x_mpbe.c, + src/gga_x_pbe.c, src/gga_x_pw86.c, src/gga_x_pw91.c, src/util.h: + Added two new functionals: mPBE and xPBE (both exchange and + correlation) + +2008-04-29 08:23 marques + + * [r4121] DONE, src/lda_xc_teter93.c: Now also Teter has second + derivatives + +2008-04-29 07:56 marques + + * [r4120] DONE, src/lda_c_pw.c: Now also PW92 is OK (including the + second derivatives) + +2008-04-28 14:29 marques + + * [r4117] DONE, src/lda_c_hl.c, src/lda_c_pz.c, src/lda_c_vwn.c: + Added the second derivatives to Perdew-Zunger. + +2008-04-28 14:04 marques + + * [r4116] src/hyb_gga_xc_b3lyp.c, src/lda_c_vwn.c, src/xc.h: *) Now + B3LYP has the correct definition of the VWN spin interpolation + (correct from + the point of view of Gaussian implementation) + +2008-04-28 13:15 marques + + * [r4115] src/lda_c_hl.c, src/lda_c_vwn.c: *) Added second + derivatives of vwn functional + +2008-04-28 11:45 marques + + * [r4114] DONE, src/Makefile.am, src/lda_c_hl.c, src/lda_c_rpa.c, + src/lda_c_wigner.c, src/util.h, src/work_lda.c, src/xc_config.h, + testsuite/xc-consistency.c: *) Code should now compile in single + precision mode + *) I am rewritting the LDA part. I created a system similar to + the exchange in GGA, + where one only has to write a formula in terms of rs and zeta. + *) Added the second derivatives os a number of LDA functionals. + +2008-04-28 08:12 marques + + * [r4112] src/libxc_master.F90, src/xc.h, src/xc_f.c: Commented all + references to the PRM functional that is currently ni the + drawing board. Hopefully, the problems will be solved, and I will + commit + it soon ;) + +2008-04-28 07:53 marques + + * [r4111] DONE, src/gga.c, src/gga_x_b86.c, src/gga_x_b86_mgc.c, + src/gga_x_b88.c, src/gga_x_dk87.c, src/gga_x_g96.c, + src/gga_x_lg93.c, src/gga_x_optx.c, src/gga_x_pbe.c, + src/gga_x_pbea.c, src/gga_x_pw86.c, src/gga_x_rpbe.c, src/lda.c, + src/lda_c_amgb.c, src/lda_c_pw.c, src/lda_x.c, + src/libxc_master.F90, src/xc.h, src/xc_f.c, + testsuite/Makefile.am, testsuite/xc-consistency.c, + testsuite/xc-run_testsuite: *) Added a run mode that allows for + one-shot calculations. This means + that we can do the self-consistent cycle with one xc functional, + and + then use that density and wave-functions to calculate the energy + using + another functional. Note that this does not work in HF or with + Hybrid + functionals! This also requires some cleaning in libxc, so do not + be + surprised if it segfaults (see libxc/DONE file for a resume of + what is + working in a clean way) + + *) Added a lot of fxc for exchange GGA functionals. Now the next + task + will be the fxc for the LDA correlation functionals. + +2008-04-18 09:06 xavier + + * [r4080] Makefile.am: Incorporated spglib as a external library + (http://spglib.wiki.sourceforge.net/), a C code to search + symmetries + of crystals. All source files are a clean copy of version 91 from + the + svn repository. + +2008-04-02 16:54 marques + + * [r4029] src/gga_x_pbea.c: Macro call missing. + +2008-04-02 14:21 marques + + * [r4024] src/Makefile.am, src/gga_x_pbea.c: Added new functional + Madsen 07. This was sent to me by the author. + +2008-04-02 14:14 marques + + * [r4023] src/gga_c_am05.c, testsuite/xc-consistency.c: I believe + that now the implementation is correct. It does give the same + energy as the reference implementation I have + from the authors, and xc-consistency gives me a small error, + which probably means that the derivatives are correct. + +2008-03-31 20:19 marques + + * [r3992] src/gga_c_am05.c, src/gga_x_am05.c, src/work_gga_x.c: + Added a first implementation of AM05 correlation. This is still + not + working. I again have some doubts concerning the spin-polarized + implementation, and I am waiting for the authors to answer mye + mail + before finishing my implementation. + +2008-03-31 19:59 marques + + * [r3991] src/Makefile.am: I also forgot this file. Let us see if + it now compiles. + +2008-03-31 14:41 marques + + * [r3987] m4/acx.m4, m4/fcflags.m4: I believe that I forgot these + files. + +2008-03-31 14:38 marques + + * [r3986] configure.ac: This should solve the problem of Xavier + with the g95 build. It is not + pretty though, and I would be happy if one of you automake + experts could + clean it... + +2008-03-28 14:16 marques + + * [r3961] src/special_functions.c: Forgot this file + +2008-03-28 14:02 marques + + * [r3960] configure.ac, m4/gsl.m4, src/Makefile.am, + src/gga_x_am05.c, src/util.h, src/work_gga_x.c, + testsuite/Makefile.am, testsuite/xc-consistency.c: *) Removed + dependency on the GSL. By other words, I reimplemented the + Lambert function I needed. + *) I believe that the exchange part of AM05 is now working + *) Some more work on fxc in the GGAs. Now xc-consistency also + calculates + the finite difference fxc to test against analitical values. + There are + still some issues with spin in this routine + +2008-03-26 15:34 xavier + + * [r3950] testsuite/Makefile.am: Because of the linking order, + sometimes gsl couldn't be found. + +2008-03-22 16:48 xavier + + * [r3926] m4/gsl.m4: gsl.m4 is also required by libxc. + +2008-03-18 13:55 xavier + + * [r3907] configure.ac: * Added a check for the inline keyword in + libxc. + +2008-03-18 12:57 marques + + * [r3905] configure.ac, src/Makefile.am, src/gga_x_am05.c, + testsuite/Makefile.am, testsuite/xc-reference.pl: Added + _experimental_ and _incomplete_ support for the AM05 functional. + For now, there is only exchange (correlation is actually simple), + and + I have no idea on how to write it for spin-polarized systems. I + have + contacted the authors of the functional to sort out the issues. + + As AM05 needs a lambert function, I had to add a dependence on + the GSL. + I plan to remove it further on (I will have to copy the + function...) + +2008-03-17 11:16 marques + + * [r3900] src/gga.c, src/gga_x_b86.c, src/gga_x_b86_mgc.c, + src/gga_x_b88.c, src/gga_x_dk87.c, src/gga_x_g96.c, + src/gga_x_lg93.c, src/gga_x_optx.c, src/gga_x_pbe.c, + src/gga_x_pw86.c, src/gga_x_pw91.c, src/gga_x_rpbe.c, + src/gga_x_wc.c, src/gga_xc_edf1.c, src/gga_xc_xlyp.c, + src/hyb_gga.c, src/libxc_master.F90, src/mgga_c_tpss.c, + src/work_gga_x.c, src/xc.h, src/xc_f.c, + testsuite/xc-consistency.c, testsuite/xc-get_data.c, + testsuite/xc-reference.pl: First attempt at fxcs using GGAs. For + now, two functionals are + implemented: B88 and LB93. There are still some issues for spin + _unpolarized_, as I am not sure of some factors of 2. + +2008-03-10 08:11 xavier + + * [r3854] src/Makefile.am: This should fix the compilation problems + in libxc. + +2008-03-10 00:43 xavier + + * [r3852] src/Makefile.am, src/libxc.F90, src/libxc_master.F90: + Having both libxc.F90 and libxc.f90 confused automake, so I + renamed libxc.F90 to libxc_master.F90 (for lack of a better + name). + +2008-03-09 23:24 xavier + + * [r3851] src/Makefile.am: File libxc.F90 was also missing from + Makefile.am. + +2008-03-09 09:49 xavier + + * [r3845] src/Makefile.am: One libxc file was missing from the + distribution. + +2008-03-07 08:24 marques + + * [r3835] src/Makefile.am, src/xc_s.h: Let's see if aramis is able + to compile in single precision mode like + this + +2008-03-06 11:59 xavier + + * [r3831] src/Makefile.am: Libxc still had problem with vpaths, + this fixes it (I don't know if it + is the correct way to do it, though). + +2008-03-06 08:55 marques + + * [r3829] src/Makefile.am: I hope this solves the compilation issue + in pepita. I hate this vpath + thing!!! + +2008-03-05 14:42 marques + + * [r3822] src/Makefile.am: I hope this fixes the automatic + compilation + +2008-03-05 08:38 marques + + * [r3818] src/Makefile.am: Dependency missing in the makefile. Hope + this solves your problem, + Alberto... + +2008-03-04 09:26 marques + + * [r3809] configure.ac, src/Makefile.am, src/functionals.c, + src/get_funcs.pl, src/gga.c, src/gga_c_lyp.c, src/gga_c_p86.c, + src/gga_c_pbe.c, src/gga_c_pw91.c, src/gga_perdew.c, + src/gga_x_b86.c, src/gga_x_b86_mgc.c, src/gga_x_b88.c, + src/gga_x_dk87.c, src/gga_x_ft97.c, src/gga_x_g96.c, + src/gga_x_lg93.c, src/gga_x_optx.c, src/gga_x_pbe.c, + src/gga_x_pw86.c, src/gga_x_pw91.c, src/gga_x_rpbe.c, + src/gga_x_wc.c, src/gga_xc_edf1.c, src/gga_xc_hcth.c, + src/gga_xc_lb.c, src/gga_xc_xlyp.c, src/hyb_gga.c, + src/hyb_gga_xc_b3lyp.c, src/hyb_gga_xc_b3p86.c, + src/hyb_gga_xc_b3pw91.c, src/hyb_gga_xc_o3lyp.c, + src/hyb_gga_xc_pbeh.c, src/hyb_gga_xc_x3lyp.c, src/lca.c, + src/lca_lch.c, src/lca_omc.c, src/lda.c, src/lda_c_amgb.c, + src/lda_c_hl.c, src/lda_c_pw.c, src/lda_c_pz.c, src/lda_c_rpa.c, + src/lda_c_vwn.c, src/lda_c_wigner.c, src/lda_c_xalpha.c, + src/lda_x.c, src/lda_xc_teter93.c, src/libxc.F90, + src/libxc.f90.in, src/mgga.c, src/mgga_c_tpss.c, + src/mgga_x_tpss.c, src/util.c, src/util.h, src/work_gga_x.c, + src/xc.h, src/xc_config.h, src/xc_config.h.in, src/xc_f.c, + src/xc_s.h: Now we can compile libxc in both float and double. + This is accomplish by + adding _s_ to the name of the single precision routines. I did + not find + a way of overloading the routines in Fortran in order to provide + for a + single interface to both single and double. + + P.S. Some tests are failing in my machine in single precision + (apparently unrelated to libxc), and the wavepacket test is + failing (in + double precision) + +2008-03-03 09:04 marques + + * [r3802] configure.ac, src/gga.c, src/gga_c_lyp.c, + src/gga_c_p86.c, src/gga_c_pbe.c, src/gga_c_pw91.c, + src/gga_perdew.c, src/gga_x_b86.c, src/gga_x_b86_mgc.c, + src/gga_x_b88.c, src/gga_x_dk87.c, src/gga_x_ft97.c, + src/gga_x_g96.c, src/gga_x_lg93.c, src/gga_x_optx.c, + src/gga_x_pbe.c, src/gga_x_pw86.c, src/gga_x_pw91.c, + src/gga_x_rpbe.c, src/gga_x_wc.c, src/gga_xc_edf1.c, + src/gga_xc_hcth.c, src/gga_xc_lb.c, src/gga_xc_xlyp.c, + src/hyb_gga.c, src/hyb_gga_xc_b3lyp.c, src/hyb_gga_xc_b3p86.c, + src/hyb_gga_xc_b3pw91.c, src/hyb_gga_xc_o3lyp.c, + src/hyb_gga_xc_pbeh.c, src/hyb_gga_xc_x3lyp.c, src/lca.c, + src/lca_lch.c, src/lca_omc.c, src/lda.c, src/lda_c_amgb.c, + src/lda_c_hl.c, src/lda_c_pw.c, src/lda_c_pz.c, src/lda_c_rpa.c, + src/lda_c_vwn.c, src/lda_c_wigner.c, src/lda_c_xalpha.c, + src/lda_x.c, src/lda_xc_teter93.c, src/libxc.f90, + src/libxc.f90.in, src/mgga.c, src/mgga_c_tpss.c, + src/mgga_x_tpss.c, src/test.c, src/util.c, src/util.h, + src/work_gga_x.c, src/xc.h, src/xc_config.h.in, src/xc_f.c: Now + we can compile libxc either in single or in double precision. I + did + not like the previous way it was done, i.e, but having _dp and + _sp in + the routines and doing all the necessary conversions. I think + that this + is cleaner. + +2008-02-20 09:31 marques + + * [r3728] src/gga_x_pw91.c: Added the mPW functional. I still have + some doubts concerning the + constants in the functional (they were taken from + http://scsg20.unige.ch/~dulak/files/functionals.pdf), so they + will + eventually have to be checked. + +2008-02-16 14:30 xavier + + * [r3697] src/gga_c_pbe.c, src/gga_c_pw91.c, src/gga_perdew.c: The + declaration of "inline void" functions causes problems with the + Sun C compiler. + + Patch submited by Marcin Dulak. + +2008-02-15 13:37 marques + + * [r3694] src/Makefile.am, src/lda_xc_teter93.c: *) Added support + for Ilya Tokatly's pressure as a measure of + localization. For this I reorganized the output layer of octopus. + I hope + it wortks ;) + + *) Added the teter 93 functionals to libxc + +2008-02-12 11:24 marques + + * [r3680] src/Makefile.am: My previous commit was not correct: + xc_funcs.h should be installed, but + not included in the distribution. + +2008-02-12 11:18 marques + + * [r3679] src/Makefile.am: xc_funcs.h was not being installed. + +2008-01-30 10:10 marques + + * [r3667] src/gga_perdew.c: Bug correction from Jussi Enkovaara: + + I found a small bug in the PBE of libxc. In the function + "perdew_params" + in the file "gga_perdew.c" the total gradient "pt->gdmt" + + /* get gdmt = |nabla n| */ + pt->gdmt = sigma[0]; + if(pt->nspin == XC_POLARIZED) pt->gdmt += 2.0*sigma[1] + + sigma[2]; + + can become a small negative number (in my antiferromagnetic + system ~ -1e-20), and + the following square root produces then NaN. I fixed that with a + simple if + statement i.e. + + /* get gdmt = |nabla n| */ + pt->gdmt = sigma[0]; + if(pt->nspin == XC_POLARIZED) pt->gdmt += 2.0*sigma[1] + + sigma[2]; + if(pt->gdmt < 0.0) pt->gdmt = MIN_GRAD*MIN_GRAD; + pt->gdmt = sqrt(pt->gdmt); + +2008-01-23 13:53 marques + + * [r3660] src/xc_f.c: Another memory leak fixed, this time in + xc_f90_lda_end + +2008-01-22 16:45 marques + + * [r3653] src/lda.c: Another bug found by valgrind. Xavier, can you + check this one? + +2008-01-09 13:12 marques + + * [r3638] testsuite/gga_c_pw91.data, testsuite/xc-consistency.c, + testsuite/xc-get_data.c: *) Checking of hybrids is now performed + *) The guys at the functional repository now get the same PW91 + functional as me, so I can commit their test file + +2007-11-26 16:05 acastro + + * [r3607] src/gga_c_pbe.c: The xlc IBM compiler complained about + using global variables within + "inline" functions. I just made a copy of the affected constant + definitions within the function bodies. + +2007-11-23 20:39 xavier + + * [r3597] configure.ac, m4/acx.m4, testsuite/xc-get_data.c: * Now + instead of using an integer of the size of a C pointer, there + exists an opaque c_pointer_t type that has two methods + associated, + set_null and is_null. This is the same we have already for libxc. + + * For the parser blocks there is a different type, block_t. + + * The only exception is xc_functl_write_info where a pointer is + used + both as a pointer and an integer. The variable is defined as + integer(SIZEOF_VOIDP), but we should fix it. + + * Removed the check for the non standard type 'long long' as a + candidate for equivalence fortran integer, in theory this could + be a + problem, but is very likely that if a fortran integer is 8 bytes + also + a 'long' is 8 bytes. A better solution would be to check first if + long + long or int64_t are available, and then use them. + + * Removed the check for the size of a pointer in C, instead the + size + of void * is measured using the standard macro. + + With this changes octopus compiles with gcc -pedantic-errors. + +2007-11-23 12:49 acastro + + * [r3593] src/test.c: I was trying to compile in an opteron using + the Portland C compiler, + and I got problems with the SSE2 extensions ("Illegal + instructsion"?). I changed a bit the beak.h preprocessor test to + avoid + its usage. But Xavier, you may want to take a look at that + change. + + The rest of the files are just "//" style comments, which the + Portland + C compiler does not accept. --This line, and those below, will be + ignored-- + + M src/beak/beak.h + M external_libs/libnbc/nbc_ialltoall.c + M external_libs/libnbc/nbc.c + M external_libs/libnbc/nbc_ibcast.c + M external_libs/libnbc/nbc_iallreduce.c + M libxc/src/test.c + +2007-11-23 11:19 xavier + + * [r3588] m4/acx.m4: * The variable ResponseMethod now validates + its value. + + * The C minimizer code was doing some very illegal things with + pointers, now it is legal C89 code (at least for gcc -pedantic). + + * Removed some compiler warnings. + +2007-11-22 12:47 marques + + * [r3586] TODO: Updated TODO list of libxc + +2007-11-22 12:43 marques + + * [r3585] src/Makefile.am, src/hyb_gga_xc_pbeh.c, + src/hyb_gga_xc_x3lyp.c: Two more hybrid functionals: PBE0 and + X3LYP. I have still a list of + another 7 hybrids to include. + +2007-11-19 16:43 marques + + * [r3553] src/gga_c_lyp.c, src/gga_c_pbe.c, src/gga_x_b86.c, + src/gga_x_b86_mgc.c, src/gga_x_b88.c, src/gga_x_dk87.c, + src/gga_x_ft97.c, src/gga_x_g96.c, src/gga_x_lg93.c, + src/gga_x_optx.c, src/gga_x_pbe.c, src/gga_x_pw86.c, + src/gga_x_pw91.c, src/gga_xc_hcth.c, src/hyb_gga.c, + src/lda_c_amgb.c, src/lda_c_hl.c, src/lda_c_pw.c, src/lda_c_pz.c, + src/lda_c_rpa.c, src/lda_c_vwn.c, src/lda_c_wigner.c, + src/lda_x.c: Made the references more uniform. + +2007-11-19 14:33 marques + + * [r3551] src/hyb_gga_xc_o3lyp.c: Forgot this file. + +2007-11-19 14:32 marques + + * [r3550] src/Makefile.am, src/functionals.c, src/get_funcs.pl, + src/hyb_gga.c, src/hyb_gga_b3pw91.c, src/hyb_gga_xc_b3lyp.c, + src/hyb_gga_xc_b3p86.c, src/hyb_gga_xc_b3pw91.c, src/libxc.f90, + src/xc_f.c: Now octopus can use hybrid functionals. The exact + exchange part is + handled within the OEP, while the rest is taken care by libxc. I + found + very hard to test these functionals. Quantum chemical + calculations use + basis sets and full potential. The ideal would be a 3D jellium + sphere, + or something like that. If you know of one such calculation... + + I will now try to implement it using Hatree-Fock for the exact + exchange + part. + +2007-11-16 16:43 marques + + * [r3528] src/Makefile.am, src/get_funcs.pl, src/gga.c, + src/gga_xc_lb.c, src/hyb_gga.c, src/hyb_gga_b3pw91.c, src/util.h, + src/xc.h: Initial support for hybrids. I also implemented B3PW91, + which + historically was the first hybrid (I think). This is not at all + tested, + of course. + +2007-11-15 15:58 marques + + * [r3521] src/get_funcs.pl, src/gga.c, src/gga_xc_lb.c, + src/libxc.f90, src/xc.h, src/xc_f.c: The LB94 functionals is now + working. There are two versions, one + modified and another unmodified. The unmodified gives the same + results + as my 2001 calculations. I did not test the modified version, + though. + + I made some more cosmetic arrangements, like adding the "_m" and + "_t" + suffixes to libxc.F90 + +2007-11-14 16:14 lorenzen + + * [r3512] m4/acx.m4: Bugfix: I had to insert the $LDFLAGS at two + more spots in the libxc AC macros. + +2007-11-14 15:14 lorenzen + + * [r3510] m4/acx.m4: Bugfix: the check for Fortran integer size in + libxc configure forgot about + $LDFLAGS during linkage. + +2007-11-12 11:30 marques + + * [r3493] src/Makefile.am: Dependecy missing: when compiling + without fortran, xc_funcs.h was not + generated. + +2007-11-12 10:57 marques + + * [r3491] src/Makefile.am, src/gga_c_p86.c, src/gga_c_pbe.c, + src/gga_c_pw91.c, src/gga_perdew.c, src/util.h: I built a common + framework for John Perdew's functionals. This + simplified a lot both PBE and PW91. + + Incidentally, I found why my implementation of PW91 (correlation) + was + giving slightly different results than the reference + implementation in + the Density functional repository of Daresbury. It is related to + the + number of digits in one constant. I believe the error is in the + repository, but I mailed them to sort out this issue. + +2007-10-26 16:08 lorenzen + + * [r3431] src/Makefile.am: Bugfix: this change repairs the make + distcheck target, so the distcheck Bot + should not fail anymore. + + Some dependencies had to be made explicit because Automake's + dependency tracking only has limited support for built headers. + +2007-10-25 13:51 marques + + * [r3417] Makefile.am, TODO: Added a TODO file + +2007-10-25 13:32 marques + + * [r3416] src/Makefile.am, src/gga_x_wc.c, src/gga_xc_edf1.c, + src/gga_xc_xlyp.c: Two new functionals GGA functionals: + Wu & Cohen + XLYP + +2007-10-24 10:14 xavier + + * [r3394] src/gga_c_pw91.c: Small fixes: + + * Inline functions can't use static global variables. + * Removed unused multigrid code and added some debug info. + * Assembler is now preprocessed using FCCPP, this is because Sun + C + compiler (cc -E) gets hanged with .S files. + * Workaround for a bug in gfortran openmp support. + * Fixed a misspelled openmp clause. + +2007-10-21 17:57 acastro + + * [r3387] src, testsuite: Added some new generated files to the + svn:ignore lists. + +2007-10-18 09:47 marques + + * [r3375] src/Makefile.am, src/gga.c, src/gga_c_lyp.c, + src/gga_x_b88.c, src/gga_xc_edf1.c, src/gga_xc_lb.c, src/util.h, + src/xc.h, testsuite/Makefile.am, testsuite/gga_xc_edf1.data: + Added EDF1 functional. This is again a fit, this time by Adamson, + Gill, + and Pople. + +2007-10-17 12:03 marques + + * [r3371] COPYING, src/functionals.c, src/get_funcs.pl, src/gga.c, + src/gga_c_lyp.c, src/gga_c_p86.c, src/gga_c_pbe.c, + src/gga_c_pw91.c, src/gga_x_b86.c, src/gga_x_b86_mgc.c, + src/gga_x_b88.c, src/gga_x_dk87.c, src/gga_x_ft97.c, + src/gga_x_g96.c, src/gga_x_lg93.c, src/gga_x_optx.c, + src/gga_x_pbe.c, src/gga_x_pw86.c, src/gga_x_pw91.c, + src/gga_x_rpbe.c, src/gga_xc_hcth.c, src/gga_xc_lb.c, src/lca.c, + src/lca_lch.c, src/lca_omc.c, src/lda.c, src/lda_c_amgb.c, + src/lda_c_hl.c, src/lda_c_pw.c, src/lda_c_pz.c, src/lda_c_rpa.c, + src/lda_c_vwn.c, src/lda_c_wigner.c, src/lda_c_xalpha.c, + src/lda_x.c, src/mgga.c, src/mgga_c_tpss.c, src/mgga_x_tpss.c, + src/test.c, src/util.c, src/util.h, src/work_gga_x.c, src/xc.h, + src/xc_f.c, testsuite/xc-consistency.c, testsuite/xc-get_data.c, + testsuite/xc-reference.pl: I changed the license to the LGPL 3.0. + I will also do that to libparser. + I think that the LGPL is a bit better for these licenses if one + wants + them to be included in other (non-GPL) programs. + + Note: I added only me to the copyright line, as most of the work + in this + library has been done by me. If, however, if you changed any of + the + files and want your name to appear, please add it. + +2007-10-17 10:59 marques + + * [r3369] src/Makefile.am, src/gga_lb.c, src/gga_xc_hcth.c, + src/gga_xc_lb.c, testsuite/gga_xc_hcth_120.data, + testsuite/gga_xc_hcth_147.data, testsuite/gga_xc_hcth_407.data, + testsuite/gga_xc_hcth_93.data: Added the HCTH class of + functionals. These are fits to several + (sometimes 407) molecules. They seem to be the most precise GGAs + for a large class of molecules. + +2007-10-16 14:54 xavier + + * [r3366] src/Makefile.am, src/libxc.f90: Now the libxc_funcs + module is used through libxc. As libxc is a + standalone we should have a simple (and constant) interface. + +2007-10-16 13:53 marques + + * [r3364] src/Makefile.am, src/gga.c, src/gga_c_pw91.c, + src/gga_lb.c, testsuite/xc-reference.pl: Added pw91 correlation + functional. Sometimes, I get differences in the + 9th digit when compared to reference values. I am not sure if it + is a + real bug or not. + +2007-10-16 07:08 acastro + + * [r3363] src/Makefile.am: The package created by "make dist" did + not contain the get_funcs.pl + script. + +2007-10-16 03:02 acastro + + * [r3362] src/Makefile.am: Depending on which machine I built the + code (from scratch, doing + autoreconf + configure + make) I got an error... I think the + problem is in the use of "+=" to define variables in automake, + and in the resulting ordering of the compilation (the file + xc_funcs.h is not created before it is needed). + + I think it is more robust in this way. + +2007-10-15 17:41 lorenzen + + * [r3359] src/Makefile.am, src/get_funcs.pl, src/lca.c, + src/lca_lch.c, src/lca_omc.c, src/mgga_c_tpss.c, + src/mgga_x_tpss.c: The mgga and lca files were not processed. I + don't know if this + was intentionally but at least Octopus wants them. + +2007-10-15 16:19 lorenzen + + * [r3358] src/Makefile.am, src/get_funcs.pl: This fixes the build + problems with the automatically + generated interface files for libxc. The problem was that + the interface files were built in the source tree and not + in the build tree. Now, $(srcdir) and $(top_builddir) are + passed to the get_funcs.pl script. + + Passing these two variables is nearly always necessary when + writing scripts like these. + +2007-10-15 15:20 marques + + * [r3357] src/get_funcs.pl, src/gga_c_p86.c, src/gga_c_pbe.c, + testsuite/xc-reference.pl, testsuite/xc-run_testsuite: I hope to + have fixed the compilation issue now. + +2007-10-15 14:54 marques + + * [r3356] src/gga_c_p86.c, src/gga_c_pbe.c: I wonder if this solves + the problem with the compilation now + +2007-10-15 14:20 xavier + + * [r3355] src/Makefile.am: This fixes compilation of libxc when + building outside the sources + directory. I don't know if it is the correct way to solve it, + though. + +2007-10-15 13:37 marques + + * [r3353] src/work_gga_x.c: Forgot this file... + +2007-10-15 13:36 marques + + * [r3352] src/Makefile.am, src/get_funcs.pl, src/gga_c_lyp.c, + src/gga_c_p86.c, src/gga_c_pbe.c, src/gga_lb.c, src/gga_x.c, + src/gga_x_b86.c, src/gga_x_b86_mgc.c, src/gga_x_b88.c, + src/gga_x_dk87.c, src/gga_x_ft97.c, src/gga_x_g96.c, + src/gga_x_lg93.c, src/gga_x_optx.c, src/gga_x_pbe.c, + src/gga_x_pw86.c, src/gga_x_pw91.c, src/gga_x_rpbe.c, src/lda.c, + src/lda_c_amgb.c, src/lda_c_hl.c, src/lda_c_pw.c, src/lda_c_pz.c, + src/lda_c_rpa.c, src/lda_c_vwn.c, src/lda_c_wigner.c, + src/lda_c_xalpha.c, src/lda_funcs.c, src/lda_x.c, src/libxc.f90, + src/xc.h: Now there is a file per functional. I also added a perl + script that allows to generate + automatically the interfaces. Like this, in order to add a + functional we do not have to touch + any other part of the code. One just has to add a single file! + +2007-10-15 09:48 marques + + * [r3351] src/gga.c, src/gga_c_pbe.c, src/gga_x.c, src/libxc.f90, + src/xc.h: Added two more functionals: PBE_SOL (x and c), and RPBE + (x) + +2007-10-08 18:25 xavier + + * [r3321] m4/acx.m4: Bugfix: CFLAGS were not properly passed in + some macros. This can cause + problems if one of your flags is -m32. + +2007-09-01 19:36 xavier + + * [r3155] src/lda.c: More fixes to the single precision version. + Now it is possible to run + gs calculations without segfaults. + +2007-09-01 13:16 xavier + + * [r3153] src/gga.c, src/gga_lb.c, src/lca.c, src/libxc.f90, + src/mgga.c, src/xc.h, src/xc_f.c: Added a single precision + interface for the rest of libxc calls. + +2007-09-01 11:17 xavier + + * [r3152] src/lda.c: Fixed a bug in my previous commit. + +2007-09-01 10:29 xavier + + * [r3151] src/lda.c, src/lda_c_amgb.c, src/lda_c_pw.c, + src/lda_c_pz.c, src/lda_c_vwn.c, src/lda_funcs.c, src/lda_x.c, + src/libxc.f90, src/util.c, src/util.h, src/xc.h, src/xc_f.c: * + Added single precision interface lda functions in libxc, for the + C + interface functions with an extra _sp are single precision, for + Fortran polymorphism is used. + + * Declared input arguments as const for lda functions in libxc. + +2007-07-25 08:10 xavier + + * [r3101] src/util.h: Bugfix: M_SQRT2 was not available for libxc + when the C compiler is in + ANSI mode. Reported by GPAW developers. + +2007-07-04 09:26 lorenzen + + * [r3064] src/Makefile.am, testsuite/xc-run_testsuite: * Added an + environment variable SKIP_CHECK that can be set + during a make distcheck to omit the testsuites: + + $ DISTCHECK_CONFIGURE_FLAGS="..." SKIP_CHECK=yes make distcheck + + This change is to provide the possibility to let the BuildBot + run make distcheck regularly without the testsuites (just to + find forgotten files in the Makefile.ams). + + this environment variable is honoured in testsuite/Makefile.am + and libxc/testsuite/xc-run_testsuite. + + * Fixed a bug in the clean-local rule in share/PP. + + * Added *.mod and others to CLEANFILES in libxc/srx/Makefile.am + +2007-06-19 08:50 acastro + + * [r3007] src: Finally, also (most of) the files generated by a + typical "make" will + also be ignored by the svn commands by including them in the + svn:ignore lists. + +2007-06-19 08:06 acastro + + * [r3006] src, testsuite: Now (almost all) the files generated by + configure are also included in + the svn:ignore properties. + +2007-06-19 07:58 acastro + + * [r3005] ., src, testsuite: Added to the svn:ignore property of + several directories the files + generated by autoreconf. + +2007-06-19 07:52 acastro + + * [r3004] .cvsignore: Removed the .cvsignore files, useless since a + lot of time + ago, I guess. + +2007-06-14 16:26 xavier + + * [r2998] src/libxc.f90: Bugfix in libxc: The interface of + xc_f90_lda was incorrect and the interface of + xc_f90_lda_vxc was missing. + +2007-06-14 11:11 xavier + + * [r2997] configure.ac, src/Makefile.am: * Added some modifications + to libxc configuration files suggested by + Yann Poullion to ease the integration with Abinit. + +2007-06-13 17:49 xavier + + * [r2995] configure.ac, src/Makefile.am, src/libxc.f90: Moved the + fortran interface of libxc to the libxc/src/ directory. This + + Instead of the C_POINTER, I defined some derived types (with a + pointer + inside), so in theory they should have enough space to hold a + pointer + but I have to test it. This approach is also more elegant as the + types + can't be passed incorrectly and their contents are private, so + the + user can't modify them without libxc. + +2007-06-12 11:24 xavier + + * [r2991] configure.ac, src/xc_f.c: Bugfix: libxc was trying to + compile the fortran interface even when + --disable-fortran was specified. + +2007-05-24 12:47 acastro + + * [r2926] src/mgga_x_tpss.c: Removed C++ ("//") comments in favor + of old-style C comments ("/* + */"), since some compilers refuse them. + +2007-03-20 18:29 lorenzen + + * [r2771] Makefile.am, src/Makefile.am, testsuite/Makefile.am, + testsuite/xc-reference.pl, testsuite/xc-run_testsuite: This is a + boring maintenance commit concerning the automake build and + distribution system. It is likely that some of the nightly builds + will + fail or that someone encounters building problems. In that case, + just + bug me, I feel in charge to fix that. + + I wanted to get VPATH builds working, i. e. compiling in a + directory that + does not contain the source code. This makes it easily possible + to + configure and build a single source tree with lots of different + options + (avoiding tedious copying). VPATH is basically a GNU make feature + but + the Makfefile.ams have to follow certain restrictions to get it + working: + + 1. Relative file names should be constructed with the $(srcdir), + $(top_srcdir), $(builddir), $(top_builddir) variables. + + 2. Wildcards should not be used in automake variables. This means + that all source files have to be mentioned in the Makefile.am. + This + is a bit tiresome (especially in the PP directory) but it is + recommended in the GNU Coding Standard and considered good + practice. + So, please add any .inp and .test files you include in the + testsuite + to the corresponding Makefile.ams. This also holds for the .psf + files + (and the .hgh) if a new element should be discovered... + + 3. I had to change the way the variable documentation is + generated a bit. + The main thing was to add command-line flags to specify input and + output + directories to the var2html.pl and mk_varinfo.pl scripts. + + 4. Filename flags for the compilers (like -I) should not be added + to the + corresponding variable in the configure.ac but to the AM_ version + in + the approripate Makefile.am (or to its per target variant). This + makes use of $(srcdir), etc. possible. In some Makefile.ams the + compilation rule is redefined, in these cases, it has to be + checked if + the AM_ variant is included (e. g. src/Makefile.am). + + There were some more things I ran across: + + 1. The testsuite can only be run after a make install because + the share data is not available otherwise. For that reason, I + replaced + the check target by an installcheck-local rule. + + 2. The oct-run_testsuite script used hardcoded paths, they are + now + patched by the configure script. So, the oct-run_testuite is + replaced + by oct-run_testsuite.in and the original script will disappear in + my + next commit. + + 3. The libxc testuite also needed some fixing to consider + different + source and build trees. + + 4. I completely removed the AC_CONFIG_SUBDIRS for the python + tree. + The conditional configuration of a subtree is a very subtle issue + as + automake does not support not configured subtrees. The + configure.ac and + Makefile.am of the python part seem to be in a very fragile + state, and as + it is not used anyway at the moment, I did not spend time to fix + them. + By the way, how is the state of the GUI? There is just few lines + of code + in the repository. + When it will be included again, I recommend just another + Makefile.am + and no subpackage configure. Necessary checks should be added to + our + main configure.ac (and can be skipped, if no GUI is requested). + + The code now passes the distcheck target which is desireable. + +2007-01-19 17:57 xavier + + * [r2656] src/mgga_c_tpss.c: * Added reference to mgga_c_tpss + * Changed indentifier from i to u for the output of a size_t + value in write_iter.c. + * This fixes #8 , the rest of the bugs were already fixed. + +2006-11-18 17:39 xavier + + * [r2590] testsuite/xc-get_data.c: Optimization: + + * Wrote a C version of dnl_operator_operate. The inner loop is + unrolled by hand to depth 3 and prefetching directives are used + to + keep the array of weights in the cache. + + For a test case (benzene gs with non interacting electrons, h=2.0 + r=6.0), total performance was increased by a factor of 1.47 for + ifort + 9.1 and by a factor of 2.2 for gfortran (p4 3.0GHz). In both + cases + gcc-4.1 was used. + + The new function is not enabled by default yet, but it is + selected by + the input variable OperateFunction, values can be either + 'fortran' or + 'c'. + + * Configure detects the presence of builtin functions + __builtin_expect + and __builtin_prefetch in the C compiler. If they are not found, + alternative dummy macros are provided. + + Fixed a couple of bugs revealed by gcc-2.95: + + * Assert is not always available in C. Put a check in + configure.ac. + * Move a declaration to the beginning of the function. + +2006-11-12 12:36 xavier + + * [r2569] src/xc.h: Libxc header is now usable from C++. + +2006-10-26 10:49 marques + + * [r2518] src/gga_c_p86.c, src/gga_c_pbe.c: Added a workaround so + that the functionals do not return NaN when + sigma=0. + +2006-10-25 08:48 marques + + * [r2517] src/lda.c, src/lda_funcs.c: Slater's Xalpha functional + was not working, so the test was failing. + + The test testsuite/finite_systems_3d/11-sic.test seems a bit + weird to + me. The functional used is Slater's Xalpha with alpha=2/3, which + means + that it only uses exchange (it would be easier to put + Cfunctional=none + ;) Is this really the functional used in the reference (that I + corrected, BTW)? + +2006-10-23 15:56 marques + + * [r2511] src/gga_c_p86.c, src/gga_c_pbe.c, src/gga_lb.c, + src/lca.c, src/lda.c, src/lda_c_amgb.c, src/lda_c_pw.c, + src/lda_funcs.c, src/lda_x.c, src/mgga_c_tpss.c, + src/mgga_x_tpss.c, src/util.h, src/xc.h, src/xc_f.c, + testsuite/gga_c_pbe.data, testsuite/gga_c_pbe.data-disabled, + testsuite/xc-consistency.c, testsuite/xc-get_data.c: I am + resyncing my tree that started diverging ;) + + *) Further cleanup of libxc. Now it was fxc that now has only 3 + components (uu, ud, dd) for spin-polarized calculations. This + amounted + to changes in libxc and in octopus. Note that kxc is still not + changed. + It should include only the independent elements! Maybe Xavier + would like + to do it ;)) + + *) Added a Perdew Wang modified lda functional. This is the + functional + used by Kieron in his implementation of the PBE (that i assume is + the + reference), and that is different from the published functional + (different number of digits in some costants, and he even has + incompatible definitions for the same constants). In this way, + the PBE + now gives the same as the reference numbers, so I rehabilitated + the + test. The differences to the previous implementation are very + small (4th + or 5th digit, but anyway...) + + *) Now we can have all-electron species also in 1 and 2 + dimensions. + +2006-10-16 11:11 marques + + * [r2500] src/gga.c, src/gga_x.c, src/xc.h, + testsuite/gga_x_ft97_b.data: Todays functional is the exchange + part of the Filatov & Thiel + functional (both A and B versions). At least the B version gives + the + same results are a reference implementation. + +2006-10-15 08:57 marques + + * [r2495] src/gga_x.c: Hopefully, this fixes the compilation errors + of the last couple of + nightly builds. Trivial changes. + +2006-10-13 14:13 marques + + * [r2491] src/Makefile.am, src/gga_c_pbe.c, src/gga_pbe.c, + src/gga_x.c, src/gga_x_b86.c: I believe that these file names are + more convinient. + +2006-10-13 09:32 marques + + * [r2490] src/Makefile.am, src/gga.c, src/gga_c_p86.c, + src/gga_pbe.c, src/lda_x.c, src/xc.h, testsuite/gga_c_p86.data: + Today's functional is Perdew 86. For this one I have reference + data, so + I can be pretty sure it is well implemented... + +2006-10-12 09:19 marques + + * [r2488] src/gga.c, src/gga_x_b86.c, src/xc.h: Another little + exchange functional: Lacks & Gordon 1993. The list of GGA + exchange + functionals to go is decreasing, but I still have the GGA + correlation (another 10 + functionals), and the metaGGAs (probably another 15 + functionals)... life is hard ;) + +2006-10-11 11:00 marques + + * [r2485] src/gga.c, src/gga_x_b86.c, src/xc.h: Today's new + functional is dePristo & Kress 87 in two different versions. + +2006-10-10 08:15 marques + + * [r2479] src/gga.c, src/gga_x_b86.c, src/xc.h: Added the OPTX + exchange functional (Handy & Cohen 2001) asked by + Angelica. + +2006-10-09 07:43 marques + + * [r2477] m4/acx.m4, src/gga_pbe.c, src/gga_x_b86.c: *) The nightly + build using ifc was not working due to the infamous + "static" flag, and subsequent problems with the pthread library. + I could + not solve cleanly the problem, so I made a workaround: the + configure + script doe not die, and assumes 4 byte ints. + + *) A couple of references added/corrected in libxc + +2006-10-06 16:53 marques + + * [r2471] m4/acx.m4: I believe that Axel copied an old version of + acx.m4. This is the correct + version... + +2006-10-06 16:34 marques + + * [r2470] configure.ac, src/gga.c, src/gga_x_b86.c, src/xc.h, + testsuite/gga_x_pw91.data: Sorry, there are several things in + this commit: + + *) I finally understood the problem that Alberto was having. The + variable i in xc_functl_write_info was used for two things. In + the first + it should be a normal integer, and in the second it should be a + pointer. + That is why the code was crashing. I simply solved the problem by + using + two variables with different names. + + *) Added a macro called C_POINTER that has the obvious meaning of + integer(POINTER_SIZE). I also changed all occurences in the code + of + integer(POINTER_SIZE) to C_POINTER. I believe it is much more + readable + like that. + + *) Added two new functionals, Perdew Wang 86 and the exchange + part of + Perdew Wang 91. I think the introduction of new functionals will + slow + down now ;) + +2006-10-06 16:12 athimm + + * [r2469] AUTHORS, COPYING, INSTALL, NEWS, m4/acx.m4: Convert + symlinks to regular files to please bitten. + + There is a bug in trac's API concerning extracting properties of + nodes + containing the metadata. + +2006-10-06 10:56 marques + + * [r2468] configure.ac, src/functionals.c, src/xc.h, src/xc_f.c, + testsuite/xc-get_data.c: *) Added automatic detection of the C + type that corresponds to the + Fortran type "integer". xc_f.c was the changed to use this macro. + This + should, hopefully, solve our previous problems. Now libxc has all + arguments "pure" Fortran integers. + + I tested this changes in i386 (ifc7.1), x64 (pathscale, nag, and + gfortran), and it passed all tests (with the exception of the + hyperpolarizability test that failed in ifc7.1 and *pathscale*, + but + Xavier alerady knows about it). + + *) Bug fix in xc-get_data.c. A missing "#include " was + making + the xc tests fail sometimes. + +2006-10-05 11:14 marques + + * [r2462] src/Makefile.am, src/functionals.c, src/gga.c, + src/gga_c_lyp.c, src/gga_lb.c, src/gga_pbe.c, src/gga_x_b86.c, + src/lca.c, src/lca_lch.c, src/lca_omc.c, src/lda.c, + src/lda_c_amgb.c, src/lda_c_pw.c, src/lda_c_pz.c, + src/lda_c_vwn.c, src/lda_funcs.c, src/lda_x.c, src/mgga.c, + src/mgga_c_tpss.c, src/mgga_x_tpss.c, src/util.h, src/xc.h, + src/xc_f.c, testsuite/xc-consistency.c, testsuite/xc-get_data.c: + *) changed the names of all exported routines of libxc to xc_XXX, + and + the F90 variants as xc-f90_XXX. Now it looks more like a library + ;) + This, of course, amountd to a lot of small changes in the code... + + *) pursuing a problem with the exchange part of the PBE (a + division by + zero), I decided to dump the old routine and to implement it in + the more + general framework of "Becke 86-like functionals". It is now 5 + lines of + code! + +2006-10-04 14:09 marques + + * [r2456] src/gga.c, src/gga_c_lyp.c, src/gga_lb.c, src/gga_pbe.c, + src/gga_x_b86.c, src/lca.c, src/lca_lch.c, src/lca_omc.c, + src/lda.c, src/lda_c_amgb.c, src/lda_c_pw.c, src/lda_c_pz.c, + src/lda_c_vwn.c, src/lda_funcs.c, src/lda_x.c, src/mgga_c_tpss.c, + src/mgga_x_tpss.c, src/util.h, src/xc.h, src/xc_f.c, + testsuite/Makefile.am, testsuite/xc-consistency.c, + testsuite/xc-get_data.c, testsuite/xc-reference.pl, + testsuite/xc-run_regression_test.pl, testsuite/xc-run_testsuite: + *) Added a consistency cjeck on the functionals. Basic it is a + script + that calculates vxc using finite differences, calls libxc for the + analitic functional and compares the difference. By now, three + functionals give problems PBE (exchange) has some NAN lingering + around; + PBE (correlation) and G96 have large deviations from the fd + results. + + *) Added a "provides" line to func_type. This is, e.g., + "XC_PROVIDES_EXC + | XC_PROVIDES_VXC". In this way, the upper level can know if it + has to + calculate something using finite differences. + +2006-10-03 14:49 marques + + * [r2452] src/gga_c_lyp.c: Fixed the problems with the LYP + functional when rho[is]=0. + +2006-10-03 14:48 marques + + * [r2451] testsuite/gga_c_pbe.data, + testsuite/gga_c_pbe.data-disabled, + testsuite/xc-run_regression_test.pl: * Disabled the test of the + correlation part of the PBE. I get + differences in teh 4th or 5th digit that I do not understand... + * Changed the way the tests were done, so that they are now + really + passed. + +2006-10-02 22:28 marques + + * [r2448] src/functionals.c: Forgot this file... + +2006-10-02 22:26 marques + + * [r2447] src/Makefile.am, src/gga.c, src/gga_c_lyp.c, + src/gga_lb.c, src/gga_pbe.c, src/gga_x_b86.c, src/gga_x_b88.c, + src/lda.c, src/lda_funcs.c, src/util.h, src/xc.h, src/xc_f.c, + testsuite/gga_c_lyp.data, testsuite/xc-run_regression_test.pl: + Next iteration of libxc + + *) Merged several functionals (B86, B88, G96 and variants) in one + routine as they are all of the same form + *) Added a routine family_from_id that simplifies initialization + of the + functionals + *) Added the functionals Gill 96 (anyone heard about this one?) + and LYP. + The LYP functional still has problems when the density is zero in + one of + the spin channels. So, please don't use if until I fix it. + *) Made the corresponding changes on the fortran side. Octopus + cannow + use all the functionals in libxc. + +2006-09-29 13:44 marques + + * [r2440] Makefile.am, configure.ac, gga.c, gga_lb.c, gga_pbe.c, + gga_x_b88.c, lca.c, lca_lch.c, lca_omc.c, lda.c, lda_c_amgb.c, + lda_c_pw.c, lda_c_pz.c, lda_c_vwn.c, lda_funcs.c, lda_x.c, + mgga.c, mgga_c_tpss.c, mgga_x_tpss.c, src, src/Makefile.am, + src/gga.c, src/gga_lb.c, src/gga_pbe.c, src/gga_x_b86.c, + src/gga_x_b88.c, src/lca.c, src/lca_lch.c, src/lca_omc.c, + src/lda.c, src/lda_c_amgb.c, src/lda_c_pw.c, src/lda_c_pz.c, + src/lda_c_vwn.c, src/lda_funcs.c, src/lda_x.c, src/mgga.c, + src/mgga_c_tpss.c, src/mgga_x_tpss.c, src/test.c, src/util.c, + src/util.h, src/xc.h, src/xc_f.c, test.c, testsuite/Makefile.am, + testsuite/xc-get_data.c, testsuite/xc-run_regression_test.pl, + util.c, util.h, xc.h, xc_f.c: Next iteration in libxc. In this + new version I have: + + *) Moved source files to the directory src/. It is neater that + way + *) Delete the LDA speedup thing that Alberto had implemented, but + which + he agreed to delete + *) Added two more functionals: Becke 86 and Becke 86 reoptimized + *) GGAs are now handled in the same way as LDAs + +2006-09-28 13:58 marques + + * [r2434] gga_lb.c, gga_pbe.c, gga_x_b88.c, lda.c, lda_c_amgb.c, + lda_c_pw.c, lda_c_pz.c, lda_c_vwn.c, lda_funcs.c, lda_x.c, + mgga_x_tpss.c, testsuite/xc-get_data.c, util.h, xc.h, xc_f.c: + Started a big cleaning in order to make libxc a bit more + elegant.Basically, there is now a mechanism to initialize, run + the + functional, and terminate it. In this way, there are no more the + horrendous switch statements in lda.c. The job is not finished + yet. + +2006-09-28 11:06 marques + + * [r2433] Makefile.am, gga.c, gga_lb.c, gga_pbe.c, gga_x_b88.c, + testsuite/gga_c_pbe.data, testsuite/gga_x_b88.data, + testsuite/gga_x_pbe.data, testsuite/lda_c_pw.data, + testsuite/xc-get_data.c, testsuite/xc-run_regression_test.pl, + util.h, xc.h: *) Added Becke 88 to libxc. However, this + functional is still not called + from octopus. That will come later. + + *) The GGAs are now also tested. The exchange PBE and B88 pass + all test + without problems. The correlation part of the PBE does not, + however. The + differences are small (5th digit or so), so you may relax ;) In + any + case, I believe that the problem is, in fact, the "reference" + implementation that has an inconsistency in the constants it + uses... + +2006-09-26 14:26 marques + + * [r2430] Makefile.am, configure.ac, lda.c, lda_c_pz.c, + lda_c_vwn.c, lda_x.c, testsuite, testsuite/Makefile.am, + testsuite/lda_c_pz.data, testsuite/lda_c_vwn.data, + testsuite/lda_c_vwn_rpa.data, testsuite/lda_x.data, + testsuite/xc-get_data.c, testsuite/xc-run_regression_test.pl, + testsuite/xc-run_testsuite, util.h, xc.h: The most important part + of this commit is the inclusion of tests for + some LDA functionals. The calculated value of these functionals + is + compared to reference data that can be found in + http://www.cse.clrc.ac.uk/qcg/dft/. + + Note that the tests do give some errors. This is related to fully + polarized cases, i.e., when rho_down=0. The reference data + hard-wires, + in this case, the value of vpot_down=0, which, in my opinion, is + not + correct. In any case, if the gas is fully polarized, the value of + vpot_down is irrelevant in this case ;) + + There were some very small precision issues in a couple of + functionals + that I adjusted in order to match the reference data. + + In the process I added two new LDA "functionals": + *) lda_c_pz_mod. This is the version of the Perdew Zunger + functional + modified by Alberto to match better the low and high rs regions + of the + parametrization. This is the old pz that we had in the code. The + original PZ functional is called lda_c_pz. Note that the default + is the + corrected functional. + *) lda_c_vwn_rpa. This is a parametrization of the RPA + correlation + energy using the VWN form, and that is also present in the + original + paper. + + Soon I will start playing with the GGAs ;) + +2006-09-25 08:18 marques + + * [r2424] AUTHORS, COPYING, ChangeLog, INSTALL, Makefile.am, NEWS, + README, configure.ac, m4, m4/acx.m4: First step in Making libxc + independent. Now it contains its own + configuration script. There are, however, several things still to + clean. + +2006-06-18 11:32 athimm + + * [r2221] .: Exclude build-aux from entering svn. + +2006-06-01 09:06 xavier + + * [r2174] lca.c: Portability fix, variable declaration was not in + the beginning of file. + +2006-05-24 10:16 athimm + + * [r2149] Makefile.am: a) python and xml + - Make python conditional, on by default. + + Use --disable-python to turn off python (see ./configure --help) + + - Remove variables.xml generation from main code, make it + python-private. variables.xml are only used by the GUI. Let it + live + under share for now, we'll see were we'll put it in the future, + perhaps it will be removed altogether. + + b) Add some vpath fixes + +2006-05-19 15:17 athimm + + * [r2117] .: Update svn:ignore recursively. + +2006-05-14 10:52 athimm + + * [r2073] .: Ignore config.h stamp file. + +2006-05-12 18:41 athimm + + * [r2063] ., .cvsignore: Sanitize .cvsignore and recursively feed + svn:ignore with them. + + The entries mirror the school of not committing generated files + into + the repository. Whether this is good or bad needs to be decided, + and + I'm probably in favour of adding them (as well as maintainer-mode + protection), but until this is agreed upon the current curse is + `minimal'. + +2006-04-08 19:42 acastro + + * [r1992] gga_pbe.c, lda.c, test.c, xc_f.c: Some more profiling + tags, and some unimportant changes. For example, now + the wavefunctions are not randomly generated if then a LCAO + calculation + is going to be performed. + +2006-04-05 13:52 acastro + + * [r1982] lda.c, lda_x.c, xc.h, xc_f.c: The option to interpolated + the LDA functionals instead of recalculating + them every time is now compiled always, although it is only used + if the InterpolateLDA is set to yes. + I will experiment with it for a few months to see if it is + worthed to + keep it as an option. + +2006-04-04 19:59 acastro + + * [r1980] lda.c: Still one bug. + +2006-04-04 19:42 acastro + + * [r1979] gga_lb.c, gga_pbe.c, lda_funcs.c, lda_x.c, mgga_x_tpss.c, + test.c, xc.h, xc_f.c: The XAlpha correlation functional was badly + calculated when code was + compiled with the "LDA_SPEEDUP" preprocessor flag. This option is + still + way too experimental to be compiled by default. If you want to + try it, + you have to define LDA_SPEEDUP (for example, setting + CPPFLAGS="-DLDA_SPEEDUP" when configuring). + +2006-03-21 11:51 micael + + * [r1939] gga_lb.c, gga_pbe.c, lda.c, lda_funcs.c, lda_x.c, + mgga_x_tpss.c, util.h, xc.h, xc_f.c: *) Syncing the libxc in APE + with the one in Octopus. + This new version includes the relativistic correction to the LDA + exchange functional. + This is not really important for Octopus (at least for the time + being) but it is + necessary for APE. + +2006-03-07 18:41 acastro + + * [r1881] lda_c_vwn.c: Bug fixed. + The Vosko/Wilk/Nusair xc potential had a bug related to units. + + Every time the initialization function was called, some + "constant" was + divided by two, in order to go from rydbergs to atomic units. But + the + inialization function is called twice by octopus, so the result + was + a factor of four. + +2006-01-31 11:11 acastro + + * [r1797] gga_lb.c: Bug fixed. + Removed the 05-Na2_LB94_Casida bug. + The LB94 is still rather under suspiscion, in any case. + + I don't know why the bug was there, in fact, it looked that the + code + that I removed was there for a reason, but I could not trace it + down + because it was there since the first revision... + +2005-11-28 11:03 marques + + * [r1726] lda.c, lda_c_vwn.c, lda_x.c, test.c: *) very tiny bug + corrected in VWN (one of the constants was wrong in the 5th + digit) + *) fxc is now calculated numerically a bit better in case of the + ferromagnetic gas. Actually I don't really know how to handle + this case properly, as fxc should diverge (at least fx). + +2005-11-12 19:47 acastro + + * [r1650] lda_c_amgb.c: Bug fixed. + One wrong character kept me busy the whole afternoon. + +2005-11-09 09:13 marques + + * [r1642] lda.c, xc.h, xc_f.c: *) Alberto, I think that the "break" + in the fxc calculation should be a + "continue" (i.e., he should skip the rest of the current cycle, + but + should get out of the cycle). Can you please check? + *) Xavier, I guess that the calculation of Kxc should have a + similar to + the one Alberto put in for fxc. Can you please check? + *) I cleaned a little bit the includes, whitespaces, and changed + "(*p)." to + "p->" as it is more C-like. + +2005-11-08 22:01 acastro + + * [r1641] lda.c: Bug fixed. + + The numerical functional derivation was not working properly in + some + spin-polarized cases (Perdew-Zunger parameterization, Na4(+1), it + was + just giving lots of NaN). Now, at least for those cases, it seems + to + work. I still have to do some more testing on the Casida module, + though. + + In any case, the PZ kernel should be obtained analytically. Maybe + in the + future. + +2005-10-18 12:51 xavier + + * [r1570] lda.c, util.h, xc.h, xc_f.c: Added Kxc, the third + derivatives of Exc, to libxc. It's calculated using a + second order numerical derivative of Vxc. + +2005-10-12 13:43 marques + + * [r1554] lda_c_pw.c: There was a sign wrong in the definition of + pw92. + + Micael, can you please test this functional? + +2005-10-12 09:10 marques + + * [r1552] Makefile.am: Some cleaning: + *) test.x is no longer generated in libxc/ + *) changed the names of several single character variables. + Please *do not* + call a variable a, b, n, c or whatever!!!! + *) I noticed that some of you had tabs of 3 and 4 spaces. Do not + forget that + the default we agreed upon some years ago was *2*. Please change + you emacs + settings! + +2005-09-05 16:36 acastro + + * [r1365] Makefile.am: It seems that the test_x_LINK variable needs + to be defined in this way + so that the executable is actually built. + +2005-08-30 14:24 acastro + + * [r1346] Makefile.am: Since the test.x program is all C, it is + better to link with the C compiler. + Otherwise some Fortran compilers (i.e. the Intel 9.0 version) + seem to have + problems with a duplicated "main" function. + +2005-07-11 13:23 acastro + + * [r1255] test.c: The xyzanim utility was broken, at least in the + IBM machines. I put + an emergency fix. If I get time I will take a look at the + utilities, see how + the system labels affect them, and make up some tests for them. + + Also, the IBM preprocessor had problems with the // comments in C + files.. + +2005-06-30 09:54 marques + + * [r1220] util.h: There were a couple of misspells in function + names + +2005-06-07 11:58 acastro + + * [r1201] Makefile.am, xc_f.c: I forgot to change also this when I + changed the config.h stuff. + +2005-05-17 09:55 appel + + * [r1121] Makefile.am: Add $Id:$ tags to most of the files (right + below the GPL header). At every + commit cvs is replacing these tags with lines of the following + form + + $Id: run_regression.pl,v 1.3 2005/05/12 10:23:59 marques Exp $ + + In this way it is easy to see who was the last person changing + the file, which + cvs revision the file has and at what date the last change was + made. + + Miguel: Is there a reason why the *.c files in libxc/ don't have + a GPL header? + +2005-04-06 16:33 marques + + * [r1081] lca_lch.c, lca_omc.c: LOL! Calculating derivatives is + always a hassle, even if only of simple functions ;))) Please + recheck them. + +2005-04-06 14:45 micael + + * [r1079] Makefile.am, lca.c, lca_lch.c, lca_omc.c, util.h, xc.h, + xc_f.c: *) Added the Vignale-Rasolt functional for CDFT to libxc. + Two parametrizations + are available. This has *not* been tested carefully yet. + +2005-04-04 12:57 acastro + + * [r1074] mgga_c_tpss.c: [*] A small change in the + "nl_operator_operate" subroutines, which, + specially in the complex case, seems to speed up things + significantly. + But most likely it does so only in some architecutures/compilers. + In the + case of the Portland compiler for opterons, the speedup is rather + spectacular, probably because before the type conversion was very + slow (the opteron was running slower that my laptop!) + [*] In mgga_c_tpss, some Portland C compilers complained about + those + array definitions, I think it is more correct now. + +2005-03-28 10:47 acastro + + * [r1061] Makefile.am, lda.c, lda_x.c, xc.h, xc_f.c: A pretty sick + performance hack. + + The idea is the following: instead of calculating the LDA + functionals + everytime, one can "spline" them at the beginning, and then + interpolate + every time, since they are very smooth functions. Some comments: + + (*) The calculation of the LDA exchange and correlation + functionals do + not take a significant calculation time, *except* if one wants to + use the + SIC+LDA within the OEP/KLI approximation for a big molecule. + (*) This commit is still experimental, and in fact the code is + still + exactly the same as it was, if you do not compile adding the + LDA_SPEEDUP + preprocessor variable (by doing CFLAGS="-O3 -DLDA_SPEEDUP", for + example). + So you do not have to worry at all about this for the moment... + I will make sure that it works well and that it makes sense + before making + it definive. + +2005-03-17 20:32 marques + + * [r1048] xc_f.c: This file was missing from the previous commit. + +2005-03-17 17:33 marques + + * [r1044] lda.c: Just a small rearrangement. + +2005-03-17 17:23 marques + + * [r1043] gga_lb.c, gga_pbe.c, lda.c, lda_c_pw.c, lda_funcs.c, + lda_x.c, mgga_x_tpss.c, test.c, util.h, xc.h, xc_f.c: *) Removed + "relativistic exchange", as, I am not mistaken, the potential was + wrong. + *) Added support for LDA fxc. For now, fxc for exchange and + Perdew Wang + correlation are analytical, while the rest is calculated through + finite + differences. Honestly, from the tests I've made, I am inclined to + believe + that it is actually better to get the numerical derivative. + (However, I + would not throw away the work of a full day, would I ;) + +2005-02-22 12:03 acastro + + * [r1014] lda_funcs.c: Bug fixed. + A small bug in the definition of the Slater Xalpha potential. + (Before it just added again the excahnge fucntional) + + Also, I have changed the definition of the alpha constant, to + meet the + usual definition in the literature: + + E_{xc}^{Xalpha} = (3/2)*alpha*E_x^{LDA} + + which means that the Xalpha correlation potential should be + defined as: + + E_{c}^{Xalpha} = ( (3/2)*alpha - 1)*E_x^{LDA} + + I have set the default to alpha = 1. In any case, the logical + thing would + be to define this functional as a exchange functional, rather + than as a + correlation part to be added to the exchange. But it is not + worthed to + loose too much time with this functional anyway... + +2005-02-15 13:51 acastro + + * [r1007] xc_f.c: I have put the embryo of what could be the + octopus developer's guide. + It just contains the description of one module, which is lib_xc, + the + interface to Miguel's C library that contains the LDA, GGA and + mGGA + functionals. And in fact it is not even complete. + + In the way, I have decided to simplify a little bit the interface + to the library, so that it is a little bit more user friendly. + +2005-02-02 03:07 appel + + * [r996] ., .cvsignore: now we are complete. + +2004-12-15 15:01 marques + + * [r964] mgga_c_tpss.c, mgga_x_tpss.c: A couple of bugs solved, but + I still get non-sense. This functiona is too + sensitive to numerical erors in the calculation of derivatives, I + think... + +2004-12-07 20:40 marques + + * [r957] mgga.c, mgga_c_tpss.c, xc_f.c: MGGA "runs" but gives + non-sense! + +2004-12-07 15:46 marques + + * [r956] gga_pbe.c, mgga.c, mgga_c_tpss.c, test.c, util.h: Bug + fixed in correlation PBE (yes, there was a serious bug there) + TPSS correlation is apparently working for spin-unpolarized + systems. I still + did not check the spin-polarized functionals (neither x nor c). + +2004-12-01 00:05 marques + + * [r946] gga_lb.c, gga_pbe.c, lda_c_amgb.c, lda_c_pw.c, lda_c_pz.c, + lda_c_vwn.c, lda_funcs.c, lda_x.c, mgga.c, mgga_c_tpss.c, + mgga_x_tpss.c, test.c, util.h, xc.h, xc_f.c: code now compiles + and runs with -ansi flag. Hope this solves your problems, + Alberto. + +2004-11-23 15:53 marques + + * [r938] Makefile.am, mgga.c, mgga_c_tpss.c, mgga_x_tpss.c, test.c, + util.h, xc.h: I am implementing the TPSS meta-GGA. The exchange + part is probably working, + the correlation is still a first draft. + +2004-10-28 20:34 marques + + * [r915] gga_pbe.c, lda_x.c, util.h, xc_f.c: several bug fixes. + +2004-10-27 18:34 marques + + * [r912] Makefile.am, gga.c, gga_lb.c, util.h, xc.h, xc_f.c: added + lb94 functional. As we all know this functional ahs problems, and + I am really not sure if these problems are handled correctly. + +2004-10-27 15:03 marques + + * [r910] Makefile.am, gga.c, gga_pbe.c, lda.c, lda_c_amgb.c, + lda_c_pw.c, lda_c_pz.c, lda_c_vwn.c, lda_funcs.c, lda_x.c, + util.h, xc.h, xc_f.c: There is now a mechanism to provide + informations about the functionals being used. + +2004-10-26 20:12 marques + + * [r907] Makefile.am, gga.c, gga_pbe.c, lda.c, util.c, util.h, + xc.h, xc_f.c: First support for GGAs. + Added PBE. + +2004-10-21 15:01 marques + + * [r904] util.c: removed an erraneous #include + +2004-10-20 16:41 marques + + * [r900] xc_f.c: *) Changed (again) the restart files because: + 1) There was a bug reading the occupations and the eigenvalues + 2) It did not work for spin-polarized calculations + + *) Added support for the libxc LDA functionals. Due to this + reason, GGAs + and the other functionals are desactivated. Now octopus can use + the + 13 LDAs provided by libxc. + +2004-10-20 13:39 marques + + * [r898] ., Makefile.am, lda.c, lda_c_amgb.c, lda_c_pw.c, + lda_c_pz.c, lda_c_vwn.c, lda_funcs.c, lda_x.c, test.c, util.c, + util.h, xc.h, xc_f.c: The begining of our library of xc + functionals. There are 13 LDA functionals implemented until now. + The unpolarized versions work I think. The polarized I have some + doubts, and we should do some further checking. + diff --git a/libxc/INSTALL b/libxc/INSTALL new file mode 100644 index 000000000..7d1c323be --- /dev/null +++ b/libxc/INSTALL @@ -0,0 +1,365 @@ +Installation Instructions +************************* + +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, +2006, 2007, 2008, 2009 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. This file is offered as-is, +without warranty of any kind. + +Basic Installation +================== + + Briefly, the shell commands `./configure; make; make install' should +configure, build, and install this package. The following +more-detailed instructions are generic; see the `README' file for +instructions specific to this package. Some packages provide this +`INSTALL' file but do not implement all of the features documented +below. The lack of an optional feature in a given package is not +necessarily a bug. More recommendations for GNU packages can be found +in *note Makefile Conventions: (standards)Makefile Conventions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. Caching is +disabled by default to prevent problems with accidental use of stale +cache files. + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You need `configure.ac' if +you want to change it or regenerate `configure' using a newer version +of `autoconf'. + + The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. + + Running `configure' might take a while. While running, it prints + some messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package, generally using the just-built uninstalled binaries. + + 4. Type `make install' to install the programs and any data files and + documentation. When installing into a prefix owned by root, it is + recommended that the package be configured and built as a regular + user, and only the `make install' phase executed with root + privileges. + + 5. Optionally, type `make installcheck' to repeat any self-tests, but + this time using the binaries in their final installed location. + This target does not install anything. Running this target as a + regular user, particularly if the prior `make install' required + root privileges, verifies that the installation completed + correctly. + + 6. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + + 7. Often, you can also type `make uninstall' to remove the installed + files again. In practice, not all packages have tested that + uninstallation works correctly, even though it is required by the + GNU Coding Standards. + + 8. Some packages, particularly those that use Automake, provide `make + distcheck', which can by used by developers to test that all other + targets like `make install' and `make uninstall' work correctly. + This target is generally not run by end users. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c99 CFLAGS=-g LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you can use GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. This +is known as a "VPATH" build. + + With a non-GNU `make', it is safer to compile the package for one +architecture at a time in the source code directory. After you have +installed the package for one architecture, use `make distclean' before +reconfiguring for another architecture. + + On MacOS X 10.5 and later systems, you can create libraries and +executables that work on multiple system types--known as "fat" or +"universal" binaries--by specifying multiple `-arch' options to the +compiler but only a single `-arch' option to the preprocessor. Like +this: + + ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CPP="gcc -E" CXXCPP="g++ -E" + + This is not guaranteed to produce working output in all cases, you +may have to build one architecture at a time and combine the results +using the `lipo' tool if you have problems. + +Installation Names +================== + + By default, `make install' installs the package's commands under +`/usr/local/bin', include files under `/usr/local/include', etc. You +can specify an installation prefix other than `/usr/local' by giving +`configure' the option `--prefix=PREFIX', where PREFIX must be an +absolute file name. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +pass the option `--exec-prefix=PREFIX' to `configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=DIR' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. In general, the +default for these options is expressed in terms of `${prefix}', so that +specifying just `--prefix' will affect all of the other directory +specifications that were not explicitly provided. + + The most portable way to affect installation locations is to pass the +correct locations to `configure'; however, many packages provide one or +both of the following shortcuts of passing variable assignments to the +`make install' command line to change installation locations without +having to reconfigure or recompile. + + The first method involves providing an override variable for each +affected directory. For example, `make install +prefix=/alternate/directory' will choose an alternate location for all +directory configuration variables that were expressed in terms of +`${prefix}'. Any directories that were specified during `configure', +but not in terms of `${prefix}', must each be overridden at install +time for the entire installation to be relocated. The approach of +makefile variable overrides for each directory variable is required by +the GNU Coding Standards, and ideally causes no recompilation. +However, some platforms have known limitations with the semantics of +shared libraries that end up requiring recompilation when using this +method, particularly noticeable in packages that use GNU Libtool. + + The second method involves providing the `DESTDIR' variable. For +example, `make install DESTDIR=/alternate/directory' will prepend +`/alternate/directory' before all installation names. The approach of +`DESTDIR' overrides is not required by the GNU Coding Standards, and +does not work on platforms that have drive letters. On the other hand, +it does better at avoiding recompilation issues, and works well even +when some directory options were not specified in terms of `${prefix}' +at `configure' time. + +Optional Features +================= + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + + Some packages offer the ability to configure how verbose the +execution of `make' will be. For these packages, running `./configure +--enable-silent-rules' sets the default to minimal output, which can be +overridden with `make V=1'; while running `./configure +--disable-silent-rules' sets the default to verbose, which can be +overridden with `make V=0'. + +Particular systems +================== + + On HP-UX, the default C compiler is not ANSI C compatible. If GNU +CC is not installed, it is recommended to use the following options in +order to use an ANSI C compiler: + + ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" + +and if that doesn't work, install pre-built binaries of GCC for HP-UX. + + On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot +parse its `' header file. The option `-nodtk' can be used as +a workaround. If GNU CC is not installed, it is therefore recommended +to try + + ./configure CC="cc" + +and if that doesn't work, try + + ./configure CC="cc -nodtk" + + On Solaris, don't put `/usr/ucb' early in your `PATH'. This +directory contains several dysfunctional programs; working variants of +these programs are available in `/usr/bin'. So, if you need `/usr/ucb' +in your `PATH', put it _after_ `/usr/bin'. + + On Haiku, software installed for all users goes in `/boot/common', +not `/usr/local'. It is recommended to use the following options: + + ./configure --prefix=/boot/common + +Specifying the System Type +========================== + + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS + KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the option `--target=TYPE' to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +causes the specified `gcc' to be used as the C compiler (unless it is +overridden in the site shell script). + +Unfortunately, this technique does not work for `CONFIG_SHELL' due to +an Autoconf bug. Until the bug is fixed you can use this workaround: + + CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash + +`configure' Invocation +====================== + + `configure' recognizes the following options to control how it +operates. + +`--help' +`-h' + Print a summary of all of the options to `configure', and exit. + +`--help=short' +`--help=recursive' + Print a summary of the options unique to this package's + `configure', and exit. The `short' variant lists options used + only in the top level, while the `recursive' variant lists options + also present in any nested packages. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--prefix=DIR' + Use DIR as the installation prefix. *note Installation Names:: + for more details, including other options available for fine-tuning + the installation locations. + +`--no-create' +`-n' + Run the configure checks, but stop before creating any output + files. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/libxc/Makefile.am b/libxc/Makefile.am new file mode 100644 index 000000000..67fd3a553 --- /dev/null +++ b/libxc/Makefile.am @@ -0,0 +1,40 @@ +## Process this file with automake to produce Makefile.in + +## Copyright (C) 2002 M. Marques, A. Castro, A. Rubio, G. Bertsch +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU Lesser General Public License as published by +## the Free Software Foundation; either version 2, or (at your option) +## any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. +## +## $Id: Makefile.am 11910 2014-03-21 10:31:07Z micael $ + +ACLOCAL_AMFLAGS = -I m4 +SUBDIRS = build src testsuite + +include_HEADERS = xc_version.h +EXTRA_DIST = ChangeLog PACKAGING TODO + +CLEANFILES = *~ *.bak + +rpm: dist + @topdir=`rpmbuild --showrc | @GREP@ ': *_topdir' | cut -f 2`; \ + mv -f $(PACKAGE)-$(VERSION).tar.gz $$topdir/SOURCES; \ + cp build/$(PACKAGE).spec $$topdir/SPECS; \ + rpmbuild -ba $$topdir/SPECS/$(PACKAGE).spec; \ + echo "-------------------------------------------------------------"; \ + echo " RPMs are built, and are located under:"; \ + echo " $$topdir/RPMS/"; \ + echo " $$topdir/SRPMS"; \ + echo "-------------------------------------------------------------" +# scp $(RPM_DIR)/RPMS/*/libxc*.rpm marques@www.tddft.org:/server/www/tddft.org/programs/octopus/download/ diff --git a/libxc/Makefile.in b/libxc/Makefile.in new file mode 100644 index 000000000..5d75c9169 --- /dev/null +++ b/libxc/Makefile.in @@ -0,0 +1,880 @@ +# Makefile.in generated by automake 1.13.4 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = . +DIST_COMMON = INSTALL NEWS README AUTHORS ChangeLog \ + $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/configure $(am__configure_deps) \ + $(srcdir)/config.h.in $(srcdir)/xc_version.h.in \ + $(include_HEADERS) COPYING TODO compile config.guess \ + config.sub depcomp install-sh missing ltmain.sh +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ac_prog_sed.m4 \ + $(top_srcdir)/m4/ax_f90_module_extension.m4 \ + $(top_srcdir)/m4/fc_integer.m4 $(top_srcdir)/m4/fcflags.m4 \ + $(top_srcdir)/m4/fortran.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = xc_version.h +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(includedir)" +HEADERS = $(include_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + cscope distdir dist dist-all distcheck +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +CSCOPE = cscope +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__post_remove_distdir = $(am__remove_distdir) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +DIST_TARGETS = dist-gzip +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F90_ACCEPTS_LINE_NUMBERS = @F90_ACCEPTS_LINE_NUMBERS@ +FC = @FC@ +FCCPP = @FCCPP@ +FCFLAGS = @FCFLAGS@ +FCFLAGS_f90 = @FCFLAGS_f90@ +FCLIBS = @FCLIBS@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LONG_LINES = @LONG_LINES@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +XC_LT_VERSION = @XC_LT_VERSION@ +XC_MAJOR_VERSION = @XC_MAJOR_VERSION@ +XC_MINOR_VERSION = @XC_MINOR_VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_FC = @ac_ct_FC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +ax_cv_f90_modext = @ax_cv_f90_modext@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +ACLOCAL_AMFLAGS = -I m4 +SUBDIRS = build src testsuite +include_HEADERS = xc_version.h +EXTRA_DIST = ChangeLog PACKAGING TODO +CLEANFILES = *~ *.bak +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @if test ! -f $@; then rm -f stamp-h1; else :; fi + @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 +xc_version.h: $(top_builddir)/config.status $(srcdir)/xc_version.h.in + cd $(top_builddir) && $(SHELL) ./config.status $@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt +install-includeHEADERS: $(include_HEADERS) + @$(NORMAL_INSTALL) + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ + done + +uninstall-includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscope: cscope.files + test ! -s cscope.files \ + || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) +clean-cscope: + -rm -f cscope.files +cscope.files: clean-cscope cscopelist +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__post_remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__post_remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__post_remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__post_remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__post_remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__post_remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__post_remove_distdir) + +dist dist-all: + $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' + $(am__post_remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir) + chmod u+w $(distdir) + mkdir $(distdir)/_build $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__post_remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile $(HEADERS) config.h +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(includedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr \ + distclean-libtool distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-includeHEADERS + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-includeHEADERS + +.MAKE: $(am__recursive_targets) all install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ + am--refresh check check-am clean clean-cscope clean-generic \ + clean-libtool cscope cscopelist-am ctags ctags-am dist \ + dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ + dist-xz dist-zip distcheck distclean distclean-generic \ + distclean-hdr distclean-libtool distclean-tags distcleancheck \ + distdir distuninstallcheck dvi dvi-am html html-am info \ + info-am install install-am install-data install-data-am \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-includeHEADERS \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-includeHEADERS + + +rpm: dist + @topdir=`rpmbuild --showrc | @GREP@ ': *_topdir' | cut -f 2`; \ + mv -f $(PACKAGE)-$(VERSION).tar.gz $$topdir/SOURCES; \ + cp build/$(PACKAGE).spec $$topdir/SPECS; \ + rpmbuild -ba $$topdir/SPECS/$(PACKAGE).spec; \ + echo "-------------------------------------------------------------"; \ + echo " RPMs are built, and are located under:"; \ + echo " $$topdir/RPMS/"; \ + echo " $$topdir/SRPMS"; \ + echo "-------------------------------------------------------------" +# scp $(RPM_DIR)/RPMS/*/libxc*.rpm marques@www.tddft.org:/server/www/tddft.org/programs/octopus/download/ + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libxc/NEWS b/libxc/NEWS new file mode 100644 index 000000000..d514f7015 --- /dev/null +++ b/libxc/NEWS @@ -0,0 +1,8 @@ +*) 2014/03/21 - release of libxc-2.1.0 and libxc-2.2.0 +*) 2014/02/18 - release of libxc-2.0.3 +*) 2013/07/10 - release of libxc-2.0.2 +*) 2013/01/21 - release of libxc-2.0.1 +*) 2012/11/28 - release of libxc-2.0.0 +*) 2011/05/12 - release of libxc-1.1 +*) 2010/07/09 - release of libxc-1.0 +*) 2009/03/31 - release of libxc-1.0-alpha diff --git a/libxc/PACKAGING b/libxc/PACKAGING new file mode 100644 index 000000000..48ee390dc --- /dev/null +++ b/libxc/PACKAGING @@ -0,0 +1,21 @@ +How to build: + Standard ./configure; make; make install + +Dependencies: + None + +New releases: + 2014/03/21 Version 2.2.0 + 2014/03/21 Version 2.1.0 + 2014/02/18 Version 2.0.3 + 2013/07/10 Version 2.0.2 + 2013/01/21 Version 2.0.1 + 2012/11/28 Version 2.0.0 + 2011/05/12 Version 1.1 + 2010/07/09 Version 1.0 + 2009/04/26 Version 1.0-alpha + +Bugs & Patches: + +SVN server + svn co http://www.tddft.org/svn/octopus/trunk/libxc diff --git a/libxc/README b/libxc/README new file mode 100644 index 000000000..5aae16362 --- /dev/null +++ b/libxc/README @@ -0,0 +1,73 @@ +This library implements many of the standard xc functionals in the +market. For more information, please check the manual at + +http://www.tddft.org/programs/Libxc + + + +INSTALLATION +============ + +To install the library, just use the standard procedure: + +./configure --prefix=PATH/TO/LIBXC +make +make check +make install + + + +INFORMATION FOR DEVELOPERS +========================== + +The distribution is organized in the following way: + +./ +./build Fedora spec files +./m4 m4 scripts used by configure.ac +./src source files +./testsuite regression tests + + +Furthermore, the most important contents of the src directory are: + +xc.h - main header file with all external definitions +util.h - header file with internal definitions +*f90 *.F90 xc_f.c - Fortran 90 interface + string_f.h +xc_funcs.h - automatically generated file with the list of functionals +funcs_*.c - automatically generated files with the functional definitions +functionals.c - generic interface to simplify access to the different families +lda.c gga.c mgga.c - interface to the different families of functionals +special_functions.c - implementation of a series of special functions +lda_*.c - definition of the different LDA functionals +work_lda.c - code that simplifies the implementation of LDAs +gga_*.c - definition of the different GGA functionals +work_gga_x.c - code that simplifies the implementation of exchange GGAs +work_gga_c.c - code that simplifies the implementation of some + correlation GGAs +work_gga_becke.c - code that simplifies the implementation of some + correlation GGAs +mgga_*.c - definition of the different meta-GGA functionals +work_mgga_x.c - code that simplifies the implementation of exchange meta-GGAs +work_mgga_c.c - code that simplifies the implementation of some correlation + meta-GGAs +hyb_gga_*.c - definition of the different hybrid-GGA functionals + +------------------------------------------------------------------------------- +Notes: + +*) Most functionals use the framework contained in a work_*.c file. This +simplifies tremendously the implementation of the different functionals. +The work_*.c is included in the gga_*.c through a preprocessor directive + +*) Some files contain more than one functional, as similar functionals +are usually grouped together. Therefore, the best way to find where a +functional is implemented is by looking at its keyword in xc_funcs.h and +using grep to find the correct file. + +*) The files where the functionals are defined are named as +family_type_name.c, where: + family - functional family (lda, gga, hyb_gga, or mgga) + type - type of functional (x, c, xc, or k) + name - name of the functional or class of functionals diff --git a/libxc/TODO b/libxc/TODO new file mode 100644 index 000000000..18ae7ff03 --- /dev/null +++ b/libxc/TODO @@ -0,0 +1,59 @@ +Add functionals: + +LDA: + *) McWeeny c (cited in JCP 69, 1177) + R. McWeeny, in The New World of Quantum Chemistry, edited by B. Pullman and R. Parr (Reidel, Boston, 1976), p. 3. + *) Handler x (JCP 61, 4824) + *) Rae self-energy correction to x (CPL 18, 574 (1973)) + *) ZLP x (Phys. Rev. A, 47 (1993), p. 918) and k (Chem. Phys. Lett. 232, 31) + +GGAs: + *) functionals of Della Salla (http://www.theory-nnl.it/software.php) + *) Liu and Parr (http://pra.aps.org/abstract/PRA/v55/i3/p1792_1) + *) http://dx.doi.org/10.1063/1.3243845 + *) df-LB94, df-revLB94 http://dx.doi.org/10.1103/PhysRevA.83.012509 + *) Lambda-LB94, Q-LB94, Q-revLB94 http://dx.doi.org/10.1063/1.3684261 + +mGGAs: + *) Colle and Salvetti http://www.molpro.net/info/current/doc/manual/node750.html + *) MK00 http://www.molpro.net/info/current/doc/manual/node760.html + *) MK00B http://www.molpro.net/info/current/doc/manual/node761.html + *) tau-HTCH + *) KCIS, B0KCIS, B1KCIS http://jcp.aip.org/resource/1/jcpsa6/v117/i23/p10465_s1 + *) regTPSS http://pubs.acs.org/doi/abs/10.1021/ct300269u + *) LAP class of functionals [70] + *) Perdew-Constantin laplacian-level KED functional http://link.aps.org/doi/10.1103/PhysRevB.75.155109 + *) Alternative parametrizations of the TB09 functional http://dx.doi.org/10.1103/PhysRevB.85.155109 + *) MCY1 and MCY2 http://dx.doi.org/10.1063/1.2179072 + +hybrids: + *) http://arxiv.org/abs/1205.4999 (versions of HSE) + *) http://link.aip.org/link/doi/10.1063/1.3524336 (HSE_sol) + *) doi:10.1021/ct800530u (LR-omegaPBE08) + *) http://arxiv.org/abs/1211.0387 + +hybrid meta: + *) TPSS1KCIS http://pubs.rsc.org/en/content/articlelanding/2005/cp/b416937a + *) MPWKCIS1K MPW1KCIS http://pubs.acs.org/doi/pdf/10.1021/jp045141s + *) PBE1KCIS http://pubs.acs.org/doi/pdf/10.1021/ct049851d + *) b1b95 (54, 60) + *) tpsslyp1w (1w class of functionals) + +check also "local" hybrids? +V. V. Karasiev, J. Mol. Struct. (THEOCHEM), 493, 21 (1999). +V. V. Karasiev and E. V. Lude˜na, Phys. Rev. A 65, 062510 (2002). +V. V. Karasiev and E. V. Lude˜na, Phys. Rev. A 65, 032515 (2002). + + +54: Becke, A. D. Phys. ReV. A 1988, 38, 3098. +60: Becke, A. D. J. Chem. Phys. 1996, 104, 1040. +67: Rey, J.; Savin, A. Int. J. Quantum Chem. 1998, 69, 581. +68: Kreiger, J. B.; Chen, J.; Iafrate, G. J.; Savin, A. In Electronic + Correlations and Materials Properties; Gonis, A., Kioussis, N., Eds; + Plenum: New York, 1999; p 463. +69: Toulouse, J.; Savin, A.; Adamo, C. J. Chem. Phys. 2002, 117, 1441. +70: http://dx.doi.org/10.1016/0009-2614(94)01189-3 + http://dx.doi.org/10.1002/qua.560560808 + http://dx.doi.org/10.1002/(SICI)1097-461X(1997)64:4<427::AID-QUA5>3.0.CO;2-Y + http://link.aip.org/link/doi/10.1063/1.1321309 + http://dx.doi.org/10.1021/ct600372t diff --git a/libxc/aclocal.m4 b/libxc/aclocal.m4 new file mode 100644 index 000000000..6f822fec8 --- /dev/null +++ b/libxc/aclocal.m4 @@ -0,0 +1,1081 @@ +# generated automatically by aclocal 1.13.4 -*- Autoconf -*- + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, +[m4_warning([this file was generated for autoconf 2.69. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically 'autoreconf'.])]) + +# Copyright (C) 2002-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.13' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.13.4], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.13.4])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to +# '$srcdir', '$srcdir/..', or '$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is '.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ([2.52])dnl + m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], + [$1], [CXX], [depcc="$CXX" am_compiler_list=], + [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], + [$1], [UPC], [depcc="$UPC" am_compiler_list=], + [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES. +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE([dependency-tracking], [dnl +AS_HELP_STRING( + [--enable-dependency-tracking], + [do not reject slow dependency extractors]) +AS_HELP_STRING( + [--disable-dependency-tracking], + [speeds up one-time build])]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each '.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.65])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[AC_DIAGNOSE([obsolete], + [$0: two- and three-arguments forms are deprecated.]) +m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if( + m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + [ok:ok],, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) + AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +AM_MISSING_PROG([AUTOCONF], [autoconf]) +AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +AM_MISSING_PROG([AUTOHEADER], [autoheader]) +AM_MISSING_PROG([MAKEINFO], [makeinfo]) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +AC_SUBST([mkdir_p], ['$(MKDIR_P)']) +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES([CC])], + [m4_define([AC_PROG_CC], + m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES([CXX])], + [m4_define([AC_PROG_CXX], + m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES([OBJC])], + [m4_define([AC_PROG_OBJC], + m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], + [_AM_DEPENDENCIES([OBJCXX])], + [m4_define([AC_PROG_OBJCXX], + m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl +]) +AC_REQUIRE([AM_SILENT_RULES])dnl +dnl The testsuite driver may need to know about EXEEXT, so add the +dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This +dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) + +dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST([install_sh])]) + +# Copyright (C) 2003-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_CC_C_O +# -------------- +# Like AC_PROG_CC_C_O, but changed for automake. +AC_DEFUN([AM_PROG_CC_C_O], +[AC_REQUIRE([AC_PROG_CC_C_O])dnl +AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +dnl Make sure AC_PROG_CC is never called again, or it will override our +dnl setting of CC. +m4_define([AC_PROG_CC], + [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it is modern enough. +# If it is, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + AC_MSG_WARN(['missing' script is too old or missing]) +fi +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# -------------------- +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) + +# _AM_SET_OPTIONS(OPTIONS) +# ------------------------ +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken + alias in your environment]) + fi + if test "$[2]" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT([yes]) +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi +AC_CONFIG_COMMANDS_PRE( + [AC_MSG_CHECKING([that generated files are newer than configure]) + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + AC_MSG_RESULT([done])]) +rm -f conftest.file +]) + +# Copyright (C) 2009-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# ("yes" being less verbose, "no" or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], [dnl +AS_HELP_STRING( + [--enable-silent-rules], + [less verbose build output (undo: "make V=1")]) +AS_HELP_STRING( + [--disable-silent-rules], + [verbose build output (undo: "make V=0")])dnl +]) +case $enable_silent_rules in @%:@ ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few 'make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using '$V' instead of '$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor 'install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in "make install-strip", and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of 'v7', 'ustar', or 'pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +# +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' + +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + + [m4_case([$1], + [ustar], + [# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) + if test $am_uid -le $am_max_uid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi + AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) + if test $am_gid -le $am_max_gid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi], + + [pax], + [], + + [m4_fatal([Unknown tar format])]) + + AC_MSG_CHECKING([how to create a $1 tar archive]) + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_$1-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi + done + rm -rf conftest.dir + + AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) + AC_MSG_RESULT([$am_cv_prog_tar_$1])]) + +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([m4/ac_prog_sed.m4]) +m4_include([m4/ax_f90_module_extension.m4]) +m4_include([m4/fc_integer.m4]) +m4_include([m4/fcflags.m4]) +m4_include([m4/fortran.m4]) +m4_include([m4/libtool.m4]) +m4_include([m4/ltoptions.m4]) +m4_include([m4/ltsugar.m4]) +m4_include([m4/ltversion.m4]) +m4_include([m4/lt~obsolete.m4]) diff --git a/libxc/build/Makefile.am b/libxc/build/Makefile.am new file mode 100644 index 000000000..d16a66a96 --- /dev/null +++ b/libxc/build/Makefile.am @@ -0,0 +1,29 @@ +## Process this file with automake to produce Makefile.in + +## Copyright (C) 2002 M. Marques, A. Castro, A. Rubio, G. Bertsch +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2, or (at your option) +## any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. +## +## $Id: Makefile.am 5782 2009-08-05 15:04:55Z olivares $ + +EXTRA_DIST = \ + libxc.spec.in libxc.pc.in + +DISTCLEANFILES = \ + libxc.spec libxc.pc + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = libxc.pc diff --git a/libxc/build/Makefile.in b/libxc/build/Makefile.in new file mode 100644 index 000000000..2a37640f1 --- /dev/null +++ b/libxc/build/Makefile.in @@ -0,0 +1,506 @@ +# Makefile.in generated by automake 1.13.4 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = build +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(srcdir)/libxc.pc.in $(srcdir)/libxc.spec.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ac_prog_sed.m4 \ + $(top_srcdir)/m4/ax_f90_module_extension.m4 \ + $(top_srcdir)/m4/fc_integer.m4 $(top_srcdir)/m4/fcflags.m4 \ + $(top_srcdir)/m4/fortran.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = libxc.pc libxc.spec +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(pkgconfigdir)" +DATA = $(pkgconfig_DATA) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F90_ACCEPTS_LINE_NUMBERS = @F90_ACCEPTS_LINE_NUMBERS@ +FC = @FC@ +FCCPP = @FCCPP@ +FCFLAGS = @FCFLAGS@ +FCFLAGS_f90 = @FCFLAGS_f90@ +FCLIBS = @FCLIBS@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LONG_LINES = @LONG_LINES@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +XC_LT_VERSION = @XC_LT_VERSION@ +XC_MAJOR_VERSION = @XC_MAJOR_VERSION@ +XC_MINOR_VERSION = @XC_MINOR_VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_FC = @ac_ct_FC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +ax_cv_f90_modext = @ax_cv_f90_modext@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = \ + libxc.spec.in libxc.pc.in + +DISTCLEANFILES = \ + libxc.spec libxc.pc + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = libxc.pc +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu build/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu build/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +libxc.pc: $(top_builddir)/config.status $(srcdir)/libxc.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +libxc.spec: $(top_builddir)/config.status $(srcdir)/libxc.spec.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-pkgconfigDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-pkgconfigDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + cscopelist-am ctags-am distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pkgconfigDATA install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags-am uninstall uninstall-am \ + uninstall-pkgconfigDATA + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libxc/build/libxc.pc.in b/libxc/build/libxc.pc.in new file mode 100644 index 000000000..eb7bef9db --- /dev/null +++ b/libxc/build/libxc.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: libxc +Description: Library of exchange and correlation functionals to be used in DFT codes +Requires: +Version: @VERSION@ +Libs: -L${libdir} -lxc +Cflags: -I${includedir} diff --git a/libxc/build/libxc.spec.in b/libxc/build/libxc.spec.in new file mode 100644 index 000000000..e611fa728 --- /dev/null +++ b/libxc/build/libxc.spec.in @@ -0,0 +1,72 @@ +# RPM spec file for @PACKAGE@. +# This file is used to build Redhat Package Manager packages for the +# @PACKAGE@. Such packages make it easy to install and uninstall +# the library and related files from binaries or source. +# +# This spec file is for version @VERSION@ of @PACKAGE@; the appropriate +# version numbers are automatically substituted in to @PACKAGE@.spec.in +# by the configure script. However, @PACKAGE@.spec.in may need to be +# modified for future releases, if the list of installed files +# or build commands change. +# +# RPM. To build, use the command: rpm --clean -ba @PACKAGE@.spec +# +# Alternatively, you can just use 'make rpm'. +# +Name: @PACKAGE@ +Summary: Library of exchange and correlation functionals to be used in DFT codes +Version: @VERSION@ +Release: 1 +Provides: %{name} +License: LGPL 2.0 +Group: Applications/Scientific +Prefix: /usr +BuildRoot: %{_tmppath}/%{name}-%{version}-buildroot +Source: http://www.tddft.org/programs/octopus/download/%{name}-%{version}.tar.gz +URL: http://www.tddft.org/programs/octopus/wiki/index.php/Libxc + +%description +Libxc is a library of exchange and correlation functionals. Its +purpose is to be used in codes that implement density-functional +theory. For the moment, the library includes most of the local density +approximations (LDAs), generalized density approximation (GGAs), and +meta-GGAs. The library provides values for the energy density and its +1st, 2nd, and (for the LDAs) 3rd derivatives. + +%prep +rm -rf $RPM_BUILD_ROOT +%setup -q + +# The installation is also performed in the %%build stage because the +# code has to be configured twice, with and without MPI support, and +# cleaned in between. +%build +%configure \ + CC="@CC@" \ + CPP="@CPP@" \ + FC="@FC@" \ + FCFLAGS="@FCFLAGS@" \ + CFLAGS="@CFLAGS@" \ + CPPFLAGS="@CPPFLAGS@" \ + LDFLAGS="@LDFLAGS@" \ + --disable-static + +make + +make install DESTDIR=${RPM_BUILD_ROOT} + +%clean +rm -rf ${RPM_BUILD_ROOT} + + +%post + + +%preun + + +%files +%defattr(-,root,root,0755) +%doc README NEWS COPYING AUTHORS ChangeLog +%{_libdir}/* +%{_includedir}/* diff --git a/libxc/compile b/libxc/compile new file mode 100755 index 000000000..531136b06 --- /dev/null +++ b/libxc/compile @@ -0,0 +1,347 @@ +#! /bin/sh +# Wrapper for compilers which do not understand '-c -o'. + +scriptversion=2012-10-14.11; # UTC + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Written by Tom Tromey . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +nl=' +' + +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent tools from complaining about whitespace usage. +IFS=" "" $nl" + +file_conv= + +# func_file_conv build_file lazy +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. If the determined conversion +# type is listed in (the comma separated) LAZY, no conversion will +# take place. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv/,$2, in + *,$file_conv,*) + ;; + mingw/*) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin/*) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine/*) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_cl_dashL linkdir +# Make cl look for libraries in LINKDIR +func_cl_dashL () +{ + func_file_conv "$1" + if test -z "$lib_path"; then + lib_path=$file + else + lib_path="$lib_path;$file" + fi + linker_opts="$linker_opts -LIBPATH:$file" +} + +# func_cl_dashl library +# Do a library search-path lookup for cl +func_cl_dashl () +{ + lib=$1 + found=no + save_IFS=$IFS + IFS=';' + for dir in $lib_path $LIB + do + IFS=$save_IFS + if $shared && test -f "$dir/$lib.dll.lib"; then + found=yes + lib=$dir/$lib.dll.lib + break + fi + if test -f "$dir/$lib.lib"; then + found=yes + lib=$dir/$lib.lib + break + fi + if test -f "$dir/lib$lib.a"; then + found=yes + lib=$dir/lib$lib.a + break + fi + done + IFS=$save_IFS + + if test "$found" != yes; then + lib=$lib.lib + fi +} + +# func_cl_wrapper cl arg... +# Adjust compile command to suit cl +func_cl_wrapper () +{ + # Assume a capable shell + lib_path= + shared=: + linker_opts= + for arg + do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + eat=1 + case $2 in + *.o | *.[oO][bB][jJ]) + func_file_conv "$2" + set x "$@" -Fo"$file" + shift + ;; + *) + func_file_conv "$2" + set x "$@" -Fe"$file" + shift + ;; + esac + ;; + -I) + eat=1 + func_file_conv "$2" mingw + set x "$@" -I"$file" + shift + ;; + -I*) + func_file_conv "${1#-I}" mingw + set x "$@" -I"$file" + shift + ;; + -l) + eat=1 + func_cl_dashl "$2" + set x "$@" "$lib" + shift + ;; + -l*) + func_cl_dashl "${1#-l}" + set x "$@" "$lib" + shift + ;; + -L) + eat=1 + func_cl_dashL "$2" + ;; + -L*) + func_cl_dashL "${1#-L}" + ;; + -static) + shared=false + ;; + -Wl,*) + arg=${1#-Wl,} + save_ifs="$IFS"; IFS=',' + for flag in $arg; do + IFS="$save_ifs" + linker_opts="$linker_opts $flag" + done + IFS="$save_ifs" + ;; + -Xlinker) + eat=1 + linker_opts="$linker_opts $2" + ;; + -*) + set x "$@" "$1" + shift + ;; + *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) + func_file_conv "$1" + set x "$@" -Tp"$file" + shift + ;; + *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) + func_file_conv "$1" mingw + set x "$@" "$file" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift + done + if test -n "$linker_opts"; then + linker_opts="-link$linker_opts" + fi + exec "$@" $linker_opts + exit 1 +} + +eat= + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand '-c -o'. +Remove '-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file 'INSTALL'. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) + func_cl_wrapper "$@" # Doesn't return... + ;; +esac + +ofile= +cfile= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + # So we strip '-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no '-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # '.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` + +# Create the lock directory. +# Note: use '[/\\:.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/libxc/config.guess b/libxc/config.guess new file mode 100755 index 000000000..1804e9fcd --- /dev/null +++ b/libxc/config.guess @@ -0,0 +1,1535 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +# 2011, 2012, 2013 Free Software Foundation, Inc. + +timestamp='2012-12-29' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). +# +# Originally written by Per Bothner. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +# +# Please send patches with a ChangeLog entry to config-patches@gnu.org. + + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, +2012, 2013 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm*:riscos:*:*|arm*:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + UNAME_PROCESSOR=`/usr/bin/uname -p` + case ${UNAME_PROCESSOR} in + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW64*:*) + echo ${UNAME_MACHINE}-pc-mingw64 + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:MSYS*:*) + echo ${UNAME_MACHINE}-pc-msys + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + aarch64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + hexagon:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + LIBC=gnu + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + tile*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + i386) + eval $set_cc_for_build + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + UNAME_PROCESSOR="x86_64" + fi + fi ;; + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-?:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk${UNAME_RELEASE} + exit ;; + NSE-*:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; + x86_64:VMkernel:*:*) + echo ${UNAME_MACHINE}-unknown-esx + exit ;; +esac + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/libxc/config.h.in b/libxc/config.h.in new file mode 100644 index 000000000..a2e7ac46d --- /dev/null +++ b/libxc/config.h.in @@ -0,0 +1,141 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* The C type of a Fortran integer */ +#undef CC_FORTRAN_INT + +/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP + systems. This function is required for `alloca.c' support on those systems. + */ +#undef CRAY_STACKSEG_END + +/* Define to 1 if using `alloca.c'. */ +#undef C_ALLOCA + +/* compiler supports line-number lines */ +#undef F90_ACCEPTS_LINE_NUMBERS + +/* Define to dummy `main' function (if any) required to link to the Fortran + libraries. */ +#undef FC_DUMMY_MAIN + +/* Define if F77 and FC dummy `main' functions are identical. */ +#undef FC_DUMMY_MAIN_EQ_F77 + +/* Define to a macro mangling the given C identifier (in lower and upper + case), which must not contain underscores, for linking with Fortran. */ +#undef FC_FUNC + +/* As FC_FUNC, but for C identifiers containing underscores. */ +#undef FC_FUNC_ + +/* The size of a Fortran integer */ +#undef FC_INTEGER_SIZE + +/* Define to 1 if you have `alloca', as a function or macro. */ +#undef HAVE_ALLOCA + +/* Define to 1 if you have and it should be used (not on Ultrix). + */ +#undef HAVE_ALLOCA_H + +/* libm includes cbrt */ +#undef HAVE_CBRT + +/* libm includes cbrtf */ +#undef HAVE_CBRTF + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* libm includes feenableexcept */ +#undef HAVE_FEENABLEEXCEPT + +/* Defined if libxc is compiled with fortran support */ +#undef HAVE_FORTRAN + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* libm includes sqrtf */ +#undef HAVE_SQRTF + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* compiler supports long lines */ +#undef LONG_LINES + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +#undef NO_MINUS_C_MINUS_O + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* The size of `void*', as computed by sizeof. */ +#undef SIZEOF_VOIDP + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at runtime. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +#undef STACK_DIRECTION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#undef inline +#endif + +/* Define to `unsigned int' if does not define. */ +#undef size_t diff --git a/libxc/config.sub b/libxc/config.sub new file mode 100755 index 000000000..52f04bcd7 --- /dev/null +++ b/libxc/config.sub @@ -0,0 +1,1790 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +# 2011, 2012, 2013 Free Software Foundation, Inc. + +timestamp='2012-12-29' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). + + +# Please send patches with a ChangeLog entry to config-patches@gnu.org. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, +2012, 2013 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + android-linux) + os=-linux-android + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze*) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*178) + os=-lynxos178 + ;; + -lynx*5) + os=-lynxos5 + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc \ + | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ + | avr | avr32 \ + | be32 | be64 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | epiphany \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nios | nios2 \ + | ns16k | ns32k \ + | open8 \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pyramid \ + | rl78 | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu \ + | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | we32k \ + | x86 | xc16x | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; + xgate) + basic_machine=$basic_machine-unknown + os=-none + ;; + xscaleeb) + basic_machine=armeb-unknown + ;; + + xscaleel) + basic_machine=armel-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | aarch64-* | aarch64_be-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | be32-* | be64-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | hexagon-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | le32-* | le64-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | microblaze-* | microblazeel-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | open8-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pyramid-* \ + | rl78-* | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ + | tahoe-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile*-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ + | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16 | cr16-*) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze*) + basic_machine=microblaze-xilinx + ;; + mingw64) + basic_machine=x86_64-pc + os=-mingw64 + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + msys) + basic_machine=i386-pc + os=-msys + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + nacl) + basic_machine=le32-unknown + os=-nacl + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc | ppcbe) basic_machine=powerpc-unknown + ;; + ppc-* | ppcbe-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-* | ppc64p7-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + os=-rdos + ;; + rdos32) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + strongarm-* | thumb-*) + basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tile*) + basic_machine=$basic_machine-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + xscale-* | xscalee[bl]-*) + basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -bitrig* | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-musl* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -nacl*) + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + hexagon-*) + os=-elf + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/libxc/configure b/libxc/configure new file mode 100755 index 000000000..1ad109386 --- /dev/null +++ b/libxc/configure @@ -0,0 +1,20133 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for libxc 2.2.0. +# +# Report bugs to . +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 + + test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and libxc@tddft.org +$0: about your system, including any error possibly output +$0: before this message. Then install a modern shell, or +$0: manually run the script under such a shell if you do +$0: have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + +SHELL=${CONFIG_SHELL-/bin/sh} + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='libxc' +PACKAGE_TARNAME='libxc' +PACKAGE_VERSION='2.2.0' +PACKAGE_STRING='libxc 2.2.0' +PACKAGE_BUGREPORT='libxc@tddft.org' +PACKAGE_URL='http://www.tddft.org/programs/Libxc' + +ac_unique_file="src/xc.h" +ac_default_prefix=/opt/etsf +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +COMPILE_SINGLE_FALSE +COMPILE_SINGLE_TRUE +COMPILE_FORTRAN_FALSE +COMPILE_FORTRAN_TRUE +F90_MOD_UPPERCASE_FALSE +F90_MOD_UPPERCASE_TRUE +ax_cv_f90_modext +F90_ACCEPTS_LINE_NUMBERS +LONG_LINES +FCLIBS +FCCPP +FCFLAGS_f90 +ac_ct_FC +FCFLAGS +FC +ENABLE_FORTRAN_FALSE +ENABLE_FORTRAN_TRUE +ALLOCA +CPP +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +MANIFEST_TOOL +RANLIB +ac_ct_AR +AR +DLLTOOL +OBJDUMP +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +LIBTOOL +XC_MINOR_VERSION +XC_MAJOR_VERSION +SED +XC_LT_VERSION +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +AM_DEFAULT_V +AM_V +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_silent_rules +enable_shared +enable_static +with_pic +enable_fast_install +enable_dependency_tracking +with_gnu_ld +with_sysroot +enable_libtool_lock +enable_fortran +enable_single +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP +FC +FCFLAGS +FCCPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures libxc 2.2.0 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/libxc] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of libxc 2.2.0:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-silent-rules less verbose build output (undo: "make V=1") + --disable-silent-rules verbose build output (undo: "make V=0") + --enable-shared[=PKGS] build shared libraries [default=no] + --enable-static[=PKGS] build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --enable-dependency-tracking + do not reject slow dependency extractors + --disable-dependency-tracking + speeds up one-time build + --disable-libtool-lock avoid locking (might break parallel builds) + --disable-fortran don't build/install fortran components + --enable-single compile libxc in single precision + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use + both] + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-sysroot=DIR Search for dependent libraries within DIR + (or the compiler's sysroot if not specified). + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CPP C preprocessor + FC Fortran compiler command + FCFLAGS Fortran compiler flags + FCCPP Fortran preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +libxc home page: . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +libxc configure 2.2.0 +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_type + +# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES +# -------------------------------------------- +# Tries to find the compile-time value of EXPR in a program that includes +# INCLUDES, setting VAR accordingly. Returns whether the value could be +# computed +ac_fn_c_compute_int () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= 0)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=0 ac_mid=0 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid; break +else + as_fn_arith $ac_mid + 1 && ac_lo=$as_val + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) < 0)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=-1 ac_mid=-1 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=$ac_mid; break +else + as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + ac_lo= ac_hi= +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid +else + as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in #(( +?*) eval "$3=\$ac_lo"; ac_retval=0 ;; +'') ac_retval=1 ;; +esac + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +static long int longval () { return $2; } +static unsigned long int ulongval () { return $2; } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (($2) < 0) + { + long int i = longval (); + if (i != ($2)) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ($2)) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + echo >>conftest.val; read $3 &5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_fc_try_compile + +# ac_fn_fc_try_link LINENO +# ------------------------ +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_fc_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_fc_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_fc_try_link + +# ac_fn_fc_try_run LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_fc_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_fc_try_run +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by libxc $as_me 2.2.0, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +am__api_version='1.13' + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken + alias in your environment" "$LINENO" 5 + fi + if test "$2" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi + +rm -f conftest.file + +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=1;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='libxc' + VERSION='2.2.0' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +mkdir_p='$(MKDIR_P)' + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar pax cpio none' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + + + + + +ac_config_headers="$ac_config_headers config.h" + + + +# Library versioning (C:R:A == current:revision:age) +# See the libtool manual for an explanation of the numbers +# +# libxc-2.0.0 1:0:0 +# libxc-2.0.1 1:1:0 +# libxc-2.0.2 1:2:0 +# libxc-2.0.3 1:3:0 +# libxc-2.1.0 2:0:1 +# libxc-2.2.0 3:0:0 +# +# Note that libtool versioning was not used prior to libxc-2.0. +# Because of this, we will start counting at 1. +# +# How to update library version number +# ==================================== +# +# C: increment if the interface has additions, changes, removals. +# +# R: increment any time the source changes; set to 0 if you +# incremented CURRENT +# +# A: increment if any interfaces have been added; set to 0 if any +# interfaces have been removed. removal has precedence over adding, +# so set to 0 if both happened. + +XC_CURRENT=3 +XC_REVISION=0 +XC_AGE=0 + +XC_LT_VERSION="${XC_CURRENT}:${XC_REVISION}:${XC_AGE}" + + +# Split VERSION into XC_VERSION_MAJOR and XC_VERSION_MINOR +# Follows AX_SPLIT_VERSION macro from AC-Archive +# Rhys Ulerich +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" | sed 99q >conftest.sed + $as_unset ac_script || ac_script= + # Extract the first word of "sed gsed" to use in msg output +if test -z "$SED"; then +set dummy sed gsed; ac_prog_name=$2 +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_path_SED_found=false +# Loop through the user's path and test for each of PROGNAME-LIST +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue + # Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + + $ac_path_SED_found && break 3 + done +done + + done +IFS=$as_save_IFS + + +fi + +SED="$ac_cv_path_SED" +if test -z "$SED"; then + as_fn_error $? "no acceptable $ac_prog_name could be found in \$PATH" "$LINENO" 5 +fi + +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +XC_MAJOR_VERSION=`echo "$VERSION" | $SED 's/\([^.][^.]*\).*/\1/'` +XC_MINOR_VERSION=`echo "$VERSION" | $SED 's/[^.][^.]*.\([^.][^.]*\).*/\1/'` + + + + + +# Installation prefix by default + + +# Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=no +fi + + + + + + + + + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.4.2' +macro_revision='1.3337' + + + + + + + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case "$ECHO" in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac + + + + + + + + + + + + + + +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" | sed 99q >conftest.sed + $as_unset ac_script || ac_script= + # Extract the first word of "sed gsed" to use in msg output +if test -z "$SED"; then +set dummy sed gsed; ac_prog_name=$2 +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_path_SED_found=false +# Loop through the user's path and test for each of PROGNAME-LIST +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue + # Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + + $ac_path_SED_found && break 3 + done +done + + done +IFS=$as_save_IFS + + +fi + +SED="$ac_cv_path_SED" +if test -z "$SED"; then + as_fn_error $? "no acceptable $ac_prog_name could be found in \$PATH" "$LINENO" 5 +fi + +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_FGREP" || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,b/c, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + +fi + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac + +fi + +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test "$GCC" != yes; then + reload_cmds=false + fi + ;; + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. + if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh + # decide which to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd="$ECHO" + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + + + + + + + + +if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +: ${AR=ar} +: ${AR_FLAGS=cru} + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ar_at_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -eq 0; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -ne 0; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } + +if test "x$lt_cv_ar_at_file" = xno; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } + +# Check whether --with-sysroot was given. +if test "${with_sysroot+set}" = set; then : + withval=$with_sysroot; +else + with_sysroot=no +fi + + +lt_sysroot= +case ${with_sysroot} in #( + yes) + if test "$GCC" = yes; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 +$as_echo "${with_sysroot}" >&6; } + as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 + ;; +esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } + + + + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD="${LD-ld}_sol2" + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. +set dummy ${ac_tool_prefix}mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MANIFEST_TOOL"; then + ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL +if test -n "$MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_MANIFEST_TOOL"; then + ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_MANIFEST_TOOL"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL +if test -n "$ac_ct_MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_MANIFEST_TOOL" = x; then + MANIFEST_TOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL + fi +else + MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" +fi + +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&5 + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } +if test "x$lt_cv_path_mainfest_tool" != xyes; then + MANIFEST_TOOL=: +fi + + + + + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&5 + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test $_lt_result -eq 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&5 + elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + + + +# Set options + + + + enable_dlopen=no + + + enable_win32_dll=no + + + + # Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for lt_pkg in $withval; do + IFS="$lt_save_ifs" + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + if test -n "$lt_prog_compiler_pic"; then + lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ F* | *Sun*Fortran*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Intel*\ [CF]*Compiler*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + *Portland\ Group*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='${wl}--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + always_export_symbols=yes + file_list_spec='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, )='true' + enable_shared_with_static_runtimes=yes + exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds='chmod 644 $oldlib' + postlink_cmds='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes=yes + ;; + esac + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler__b=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } + +if test x"$lt_cv_prog_compiler__b" = xyes; then + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (void) { return 0; } +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_irix_exported_symbol=yes +else + lt_cv_irix_exported_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } + if test "$lt_cv_irix_exported_symbol" = yes; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([A-Za-z]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Add ABI-specific directories to the system library path. + sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" + + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + + +# Checks for programs. +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + +if test "x$CC" != xcc; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 +$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5 +$as_echo_n "checking whether cc understands -c and -o together... " >&6; } +fi +set dummy $CC; ac_cc=`$as_echo "$2" | + sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +# Make sure it works both with $CC and with simple cc. +# We do the test twice because some compilers refuse to overwrite an +# existing .o file with -o, though they will create one. +ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' +rm -f conftest2.* +if { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && + test -f conftest2.$ac_objext && { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; +then + eval ac_cv_prog_cc_${ac_cc}_c_o=yes + if test "x$CC" != xcc; then + # Test first that cc exists at all. + if { ac_try='cc -c conftest.$ac_ext >&5' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' + rm -f conftest2.* + if { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && + test -f conftest2.$ac_objext && { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; + then + # cc works too. + : + else + # cc exists but doesn't like -o. + eval ac_cv_prog_cc_${ac_cc}_c_o=no + fi + fi + fi +else + eval ac_cv_prog_cc_${ac_cc}_c_o=no +fi +rm -f core conftest* + +fi +if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h + +fi + +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if ${ac_cv_c_inline+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } +#endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_inline=$ac_kw +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_inline" != no && break +done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +$as_echo "$ac_cv_c_inline" >&6; } + +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val +#endif +_ACEOF + ;; +esac + + +# Checks for header files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF + +fi + +# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works +# for constant arguments. Useless! +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 +$as_echo_n "checking for working alloca.h... " >&6; } +if ${ac_cv_working_alloca_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +char *p = (char *) alloca (2 * sizeof (int)); + if (p) return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_working_alloca_h=yes +else + ac_cv_working_alloca_h=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 +$as_echo "$ac_cv_working_alloca_h" >&6; } +if test $ac_cv_working_alloca_h = yes; then + +$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 +$as_echo_n "checking for alloca... " >&6; } +if ${ac_cv_func_alloca_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __GNUC__ +# define alloca __builtin_alloca +#else +# ifdef _MSC_VER +# include +# define alloca _alloca +# else +# ifdef HAVE_ALLOCA_H +# include +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +void *alloca (size_t); +# endif +# endif +# endif +# endif +#endif + +int +main () +{ +char *p = (char *) alloca (1); + if (p) return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_func_alloca_works=yes +else + ac_cv_func_alloca_works=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 +$as_echo "$ac_cv_func_alloca_works" >&6; } + +if test $ac_cv_func_alloca_works = yes; then + +$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h + +else + # The SVR3 libPW and SVR4 libucb both contain incompatible functions +# that cause trouble. Some versions do not even contain alloca or +# contain a buggy version. If you still want to use their alloca, +# use ar to extract alloca.o from them instead of compiling alloca.c. + +ALLOCA=\${LIBOBJDIR}alloca.$ac_objext + +$as_echo "#define C_ALLOCA 1" >>confdefs.h + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 +$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } +if ${ac_cv_os_cray+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined CRAY && ! defined CRAY2 +webecray +#else +wenotbecray +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "webecray" >/dev/null 2>&1; then : + ac_cv_os_cray=yes +else + ac_cv_os_cray=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 +$as_echo "$ac_cv_os_cray" >&6; } +if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + +cat >>confdefs.h <<_ACEOF +#define CRAY_STACKSEG_END $ac_func +_ACEOF + + break +fi + + done +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 +$as_echo_n "checking stack direction for C alloca... " >&6; } +if ${ac_cv_c_stack_direction+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_c_stack_direction=0 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +find_stack_direction (int *addr, int depth) +{ + int dir, dummy = 0; + if (! addr) + addr = &dummy; + *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; + dir = depth ? find_stack_direction (addr, depth - 1) : 0; + return dir + dummy; +} + +int +main (int argc, char **argv) +{ + return find_stack_direction (0, argc + !argv + 20) < 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_stack_direction=1 +else + ac_cv_c_stack_direction=-1 +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 +$as_echo "$ac_cv_c_stack_direction" >&6; } +cat >>confdefs.h <<_ACEOF +#define STACK_DIRECTION $ac_cv_c_stack_direction +_ACEOF + + +fi + + +# Checks for typedefs, structures, and compiler characteristics. +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void*" >&5 +$as_echo_n "checking size of void*... " >&6; } +if ${ac_cv_sizeof_voidp+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ac_cv_sizeof_voidp" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_voidp" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (void*) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_voidp=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_voidp" >&5 +$as_echo "$ac_cv_sizeof_voidp" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_VOIDP $ac_cv_sizeof_voidp +_ACEOF + + + +# Check for presence of some C99 libm functions +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqrtf in -lm" >&5 +$as_echo_n "checking for sqrtf in -lm... " >&6; } +if ${ac_cv_lib_m_sqrtf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char sqrtf (); +int +main () +{ +return sqrtf (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_m_sqrtf=yes +else + ac_cv_lib_m_sqrtf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_sqrtf" >&5 +$as_echo "$ac_cv_lib_m_sqrtf" >&6; } +if test "x$ac_cv_lib_m_sqrtf" = xyes; then : + +$as_echo "#define HAVE_SQRTF 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for cbrt in -lm" >&5 +$as_echo_n "checking for cbrt in -lm... " >&6; } +if ${ac_cv_lib_m_cbrt+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cbrt (); +int +main () +{ +return cbrt (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_m_cbrt=yes +else + ac_cv_lib_m_cbrt=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cbrt" >&5 +$as_echo "$ac_cv_lib_m_cbrt" >&6; } +if test "x$ac_cv_lib_m_cbrt" = xyes; then : + +$as_echo "#define HAVE_CBRT 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for cbrtf in -lm" >&5 +$as_echo_n "checking for cbrtf in -lm... " >&6; } +if ${ac_cv_lib_m_cbrtf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cbrtf (); +int +main () +{ +return cbrtf (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_m_cbrtf=yes +else + ac_cv_lib_m_cbrtf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cbrtf" >&5 +$as_echo "$ac_cv_lib_m_cbrtf" >&6; } +if test "x$ac_cv_lib_m_cbrtf" = xyes; then : + +$as_echo "#define HAVE_CBRTF 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for feenableexcept in -lm" >&5 +$as_echo_n "checking for feenableexcept in -lm... " >&6; } +if ${ac_cv_lib_m_feenableexcept+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char feenableexcept (); +int +main () +{ +return feenableexcept (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_m_feenableexcept=yes +else + ac_cv_lib_m_feenableexcept=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_feenableexcept" >&5 +$as_echo "$ac_cv_lib_m_feenableexcept" >&6; } +if test "x$ac_cv_lib_m_feenableexcept" = xyes; then : + +$as_echo "#define HAVE_FEENABLEEXCEPT 1" >>confdefs.h + +fi + + +# Check whether --enable-fortran was given. +if test "${enable_fortran+set}" = set; then : + enableval=$enable_fortran; ac_cv_build_fortran=$enableval +else + ac_cv_build_fortran=yes +fi + + if test $ac_cv_build_fortran = yes; then + ENABLE_FORTRAN_TRUE= + ENABLE_FORTRAN_FALSE='#' +else + ENABLE_FORTRAN_TRUE='#' + ENABLE_FORTRAN_FALSE= +fi + + +if test $ac_cv_build_fortran = yes; then + HAVE_FORTRAN=1 + +$as_echo "#define HAVE_FORTRAN 1" >>confdefs.h + + + acx_save_fcflags="${FCFLAGS}" + ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_FC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$FC"; then + ac_cv_prog_FC="$FC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_FC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +FC=$ac_cv_prog_FC +if test -n "$FC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 +$as_echo "$FC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$FC" && break + done +fi +if test -z "$FC"; then + ac_ct_FC=$FC + for ac_prog in xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_FC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_FC"; then + ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_FC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_FC=$ac_cv_prog_ac_ct_FC +if test -n "$ac_ct_FC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 +$as_echo "$ac_ct_FC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_FC" && break +done + + if test "x$ac_ct_FC" = x; then + FC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + FC=$ac_ct_FC + fi +fi + + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done +rm -f a.out + +# If we don't use `.F' as extension, the preprocessor is not run on the +# input file. (Note that this only needs to work for GNU compilers.) +ac_save_ext=$ac_ext +ac_ext=F +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Fortran compiler" >&5 +$as_echo_n "checking whether we are using the GNU Fortran compiler... " >&6; } +if ${ac_cv_fc_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.$ac_ext <<_ACEOF + program main +#ifndef __GNUC__ + choke me +#endif + + end +_ACEOF +if ac_fn_fc_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_fc_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 +$as_echo "$ac_cv_fc_compiler_gnu" >&6; } +ac_ext=$ac_save_ext +ac_test_FCFLAGS=${FCFLAGS+set} +ac_save_FCFLAGS=$FCFLAGS +FCFLAGS= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 +$as_echo_n "checking whether $FC accepts -g... " >&6; } +if ${ac_cv_prog_fc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + FCFLAGS=-g +cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +if ac_fn_fc_try_compile "$LINENO"; then : + ac_cv_prog_fc_g=yes +else + ac_cv_prog_fc_g=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 +$as_echo "$ac_cv_prog_fc_g" >&6; } +if test "$ac_test_FCFLAGS" = set; then + FCFLAGS=$ac_save_FCFLAGS +elif test $ac_cv_prog_fc_g = yes; then + if test "x$ac_cv_fc_compiler_gnu" = xyes; then + FCFLAGS="-g -O2" + else + FCFLAGS="-g" + fi +else + if test "x$ac_cv_fc_compiler_gnu" = xyes; then + FCFLAGS="-O2" + else + FCFLAGS= + fi +fi + +if test $ac_compiler_gnu = yes; then + GFC=yes +else + GFC= +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +func_stripname_cnf () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname_cnf + + + ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + + +if test -z "$FC" || test "X$FC" = "Xno"; then + _lt_disable_FC=yes +fi + +archive_cmds_need_lc_FC=no +allow_undefined_flag_FC= +always_export_symbols_FC=no +archive_expsym_cmds_FC= +export_dynamic_flag_spec_FC= +hardcode_direct_FC=no +hardcode_direct_absolute_FC=no +hardcode_libdir_flag_spec_FC= +hardcode_libdir_separator_FC= +hardcode_minus_L_FC=no +hardcode_automatic_FC=no +inherit_rpath_FC=no +module_cmds_FC= +module_expsym_cmds_FC= +link_all_deplibs_FC=unknown +old_archive_cmds_FC=$old_archive_cmds +reload_flag_FC=$reload_flag +reload_cmds_FC=$reload_cmds +no_undefined_flag_FC= +whole_archive_flag_spec_FC= +enable_shared_with_static_runtimes_FC=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +objext_FC=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_FC" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + + # save warnings/boilerplate of simple test code + ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + + ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${FC-"f95"} + CFLAGS=$FCFLAGS + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + compiler_FC=$CC + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + + + if test -n "$compiler"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + GCC_FC="$ac_cv_fc_compiler_gnu" + LD_FC="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + # Dependencies to place before and after the object being linked: +predep_objects_FC= +postdep_objects_FC= +predeps_FC= +postdeps_FC= +compiler_lib_search_path_FC= + +cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF + + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case ${prev}${p} in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test "$pre_test_object_deps_done" = no; then + case ${prev} in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_FC"; then + compiler_lib_search_path_FC="${prev}${p}" + else + compiler_lib_search_path_FC="${compiler_lib_search_path_FC} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_FC"; then + postdeps_FC="${prev}${p}" + else + postdeps_FC="${postdeps_FC} ${prev}${p}" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$predep_objects_FC"; then + predep_objects_FC="$p" + else + predep_objects_FC="$predep_objects_FC $p" + fi + else + if test -z "$postdep_objects_FC"; then + postdep_objects_FC="$p" + else + postdep_objects_FC="$postdep_objects_FC $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling FC test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken + + +case " $postdeps_FC " in +*" -lc "*) archive_cmds_need_lc_FC=no ;; +esac + compiler_lib_search_dirs_FC= +if test -n "${compiler_lib_search_path_FC}"; then + compiler_lib_search_dirs_FC=`echo " ${compiler_lib_search_path_FC}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lt_prog_compiler_wl_FC= +lt_prog_compiler_pic_FC= +lt_prog_compiler_static_FC= + + + if test "$GCC" = yes; then + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_static_FC='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_FC='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic_FC='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_FC='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic_FC='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_FC='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static_FC= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_FC='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared_FC=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_FC='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_FC=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic_FC='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl_FC='-Xlinker ' + if test -n "$lt_prog_compiler_pic_FC"; then + lt_prog_compiler_pic_FC="-Xcompiler $lt_prog_compiler_pic_FC" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl_FC='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_FC='-Bstatic' + else + lt_prog_compiler_static_FC='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_FC='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl_FC='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_FC='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static_FC='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl_FC='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static_FC='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_pic_FC='-KPIC' + lt_prog_compiler_static_FC='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_pic_FC='-fPIC' + lt_prog_compiler_static_FC='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_pic_FC='--shared' + lt_prog_compiler_static_FC='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl_FC='-Wl,-Wl,,' + lt_prog_compiler_pic_FC='-PIC' + lt_prog_compiler_static_FC='-Bstatic' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_pic_FC='-fpic' + lt_prog_compiler_static_FC='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl_FC='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static_FC='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_pic_FC='-qpic' + lt_prog_compiler_static_FC='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic_FC='-KPIC' + lt_prog_compiler_static_FC='-Bstatic' + lt_prog_compiler_wl_FC='' + ;; + *Sun\ F* | *Sun*Fortran*) + lt_prog_compiler_pic_FC='-KPIC' + lt_prog_compiler_static_FC='-Bstatic' + lt_prog_compiler_wl_FC='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic_FC='-KPIC' + lt_prog_compiler_static_FC='-Bstatic' + lt_prog_compiler_wl_FC='-Wl,' + ;; + *Intel*\ [CF]*Compiler*) + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_pic_FC='-fPIC' + lt_prog_compiler_static_FC='-static' + ;; + *Portland\ Group*) + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_pic_FC='-fpic' + lt_prog_compiler_static_FC='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic_FC='-KPIC' + lt_prog_compiler_static_FC='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_FC='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl_FC='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static_FC='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static_FC='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic_FC='-KPIC' + lt_prog_compiler_static_FC='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl_FC='-Qoption ld ';; + *) + lt_prog_compiler_wl_FC='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl_FC='-Qoption ld ' + lt_prog_compiler_pic_FC='-PIC' + lt_prog_compiler_static_FC='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_pic_FC='-KPIC' + lt_prog_compiler_static_FC='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic_FC='-Kconform_pic' + lt_prog_compiler_static_FC='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_pic_FC='-KPIC' + lt_prog_compiler_static_FC='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_can_build_shared_FC=no + ;; + + uts4*) + lt_prog_compiler_pic_FC='-pic' + lt_prog_compiler_static_FC='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared_FC=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_FC= + ;; + *) + lt_prog_compiler_pic_FC="$lt_prog_compiler_pic_FC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic_FC+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_FC=$lt_prog_compiler_pic_FC +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_FC" >&5 +$as_echo "$lt_cv_prog_compiler_pic_FC" >&6; } +lt_prog_compiler_pic_FC=$lt_cv_prog_compiler_pic_FC + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_FC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_FC works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_FC works... " >&6; } +if ${lt_cv_prog_compiler_pic_works_FC+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works_FC=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_FC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works_FC=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_FC" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works_FC" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works_FC" = xyes; then + case $lt_prog_compiler_pic_FC in + "" | " "*) ;; + *) lt_prog_compiler_pic_FC=" $lt_prog_compiler_pic_FC" ;; + esac +else + lt_prog_compiler_pic_FC= + lt_prog_compiler_can_build_shared_FC=no +fi + +fi + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_FC eval lt_tmp_static_flag=\"$lt_prog_compiler_static_FC\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works_FC+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works_FC=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works_FC=yes + fi + else + lt_cv_prog_compiler_static_works_FC=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_FC" >&5 +$as_echo "$lt_cv_prog_compiler_static_works_FC" >&6; } + +if test x"$lt_cv_prog_compiler_static_works_FC" = xyes; then + : +else + lt_prog_compiler_static_FC= +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_FC+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_FC=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_FC=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_FC" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_FC" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_FC+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_FC=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_FC=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_FC" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_FC" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_FC" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag_FC= + always_export_symbols_FC=no + archive_cmds_FC= + archive_expsym_cmds_FC= + compiler_needs_object_FC=no + enable_shared_with_static_runtimes_FC=no + export_dynamic_flag_spec_FC= + export_symbols_cmds_FC='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic_FC=no + hardcode_direct_FC=no + hardcode_direct_absolute_FC=no + hardcode_libdir_flag_spec_FC= + hardcode_libdir_separator_FC= + hardcode_minus_L_FC=no + hardcode_shlibpath_var_FC=unsupported + inherit_rpath_FC=no + link_all_deplibs_FC=unknown + module_cmds_FC= + module_expsym_cmds_FC= + old_archive_from_new_cmds_FC= + old_archive_from_expsyms_cmds_FC= + thread_safe_flag_spec_FC= + whole_archive_flag_spec_FC= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms_FC= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms_FC='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs_FC=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_FC='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_FC="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_FC= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs_FC=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_FC='' + ;; + m68k) + archive_cmds_FC='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_FC='-L$libdir' + hardcode_minus_L_FC=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_FC=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_FC='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_FC=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, FC) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_FC='-L$libdir' + export_dynamic_flag_spec_FC='${wl}--export-all-symbols' + allow_undefined_flag_FC=unsupported + always_export_symbols_FC=no + enable_shared_with_static_runtimes_FC=yes + export_symbols_cmds_FC='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_FC='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_FC='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_FC=no + fi + ;; + + haiku*) + archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + link_all_deplibs_FC=yes + ;; + + interix[3-9]*) + hardcode_direct_FC=no + hardcode_shlibpath_var_FC=no + hardcode_libdir_flag_spec_FC='${wl}-rpath,$libdir' + export_dynamic_flag_spec_FC='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_FC='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec_FC='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec_FC='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec_FC= + tmp_sharedflag='--shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec_FC='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object_FC=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec_FC='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object_FC=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds_FC='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds_FC='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec_FC='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir' + archive_cmds_FC='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds_FC='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs_FC=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_FC='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs_FC=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_FC=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs_FC=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir' + archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_FC=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds_FC='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct_FC=yes + hardcode_shlibpath_var_FC=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_FC=no + fi + ;; + esac + + if test "$ld_shlibs_FC" = no; then + runpath_var= + hardcode_libdir_flag_spec_FC= + export_dynamic_flag_spec_FC= + whole_archive_flag_spec_FC= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag_FC=unsupported + always_export_symbols_FC=yes + archive_expsym_cmds_FC='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L_FC=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct_FC=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds_FC='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_FC='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_FC='' + hardcode_direct_FC=yes + hardcode_direct_absolute_FC=yes + hardcode_libdir_separator_FC=':' + link_all_deplibs_FC=yes + file_list_spec_FC='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct_FC=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_FC=yes + hardcode_libdir_flag_spec_FC='-L$libdir' + hardcode_libdir_separator_FC= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec_FC='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols_FC=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_FC='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath__FC+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +if ac_fn_fc_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__FC=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__FC"; then + lt_cv_aix_libpath__FC=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__FC"; then + lt_cv_aix_libpath__FC="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath__FC +fi + + hardcode_libdir_flag_spec_FC='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds_FC='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_FC='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_FC="-z nodefs" + archive_expsym_cmds_FC="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath__FC+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +if ac_fn_fc_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__FC=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__FC"; then + lt_cv_aix_libpath__FC=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__FC"; then + lt_cv_aix_libpath__FC="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath__FC +fi + + hardcode_libdir_flag_spec_FC='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_FC=' ${wl}-bernotok' + allow_undefined_flag_FC=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec_FC='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_FC='$convenience' + fi + archive_cmds_need_lc_FC=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds_FC="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_FC='' + ;; + m68k) + archive_cmds_FC='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_FC='-L$libdir' + hardcode_minus_L_FC=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec_FC=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec_FC=' ' + allow_undefined_flag_FC=unsupported + always_export_symbols_FC=yes + file_list_spec_FC='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds_FC='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + archive_expsym_cmds_FC='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, FC)='true' + enable_shared_with_static_runtimes_FC=yes + exclude_expsyms_FC='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + export_symbols_cmds_FC='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds_FC='chmod 644 $oldlib' + postlink_cmds_FC='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec_FC=' ' + allow_undefined_flag_FC=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds_FC='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds_FC='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds_FC='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes_FC=yes + ;; + esac + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc_FC=no + hardcode_direct_FC=no + hardcode_automatic_FC=yes + hardcode_shlibpath_var_FC=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + whole_archive_flag_spec_FC='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + compiler_needs_object_FC=yes + else + whole_archive_flag_spec_FC='' + fi + link_all_deplibs_FC=yes + allow_undefined_flag_FC="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + archive_cmds_FC="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds_FC="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds_FC="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds_FC="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs_FC=no + fi + + ;; + + dgux*) + archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_FC='-L$libdir' + hardcode_shlibpath_var_FC=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec_FC='-R$libdir' + hardcode_direct_FC=yes + hardcode_shlibpath_var_FC=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_FC=yes + hardcode_minus_L_FC=yes + hardcode_shlibpath_var_FC=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds_FC='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_FC='-R$libdir' + hardcode_direct_FC=yes + hardcode_shlibpath_var_FC=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds_FC='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds_FC='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec_FC='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_FC=: + hardcode_direct_FC=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_FC=yes + export_dynamic_flag_spec_FC='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + archive_cmds_FC='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_FC='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec_FC='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_FC=: + hardcode_direct_FC=yes + hardcode_direct_absolute_FC=yes + export_dynamic_flag_spec_FC='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_FC=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds_FC='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds_FC='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_FC='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds_FC='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds_FC='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_FC='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec_FC='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_FC=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct_FC=no + hardcode_shlibpath_var_FC=no + ;; + *) + hardcode_direct_FC=yes + hardcode_direct_absolute_FC=yes + export_dynamic_flag_spec_FC='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_FC=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat > conftest.$ac_ext <<_ACEOF + + subroutine foo + end +_ACEOF +if ac_fn_fc_try_link "$LINENO"; then : + lt_cv_irix_exported_symbol=yes +else + lt_cv_irix_exported_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } + if test "$lt_cv_irix_exported_symbol" = yes; then + archive_expsym_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi + else + archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc_FC='no' + hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_FC=: + inherit_rpath_FC=yes + link_all_deplibs_FC=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds_FC='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec_FC='-R$libdir' + hardcode_direct_FC=yes + hardcode_shlibpath_var_FC=no + ;; + + newsos6) + archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_FC=yes + hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_FC=: + hardcode_shlibpath_var_FC=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct_FC=yes + hardcode_shlibpath_var_FC=no + hardcode_direct_absolute_FC=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds_FC='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_FC='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec_FC='${wl}-rpath,$libdir' + export_dynamic_flag_spec_FC='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_FC='-R$libdir' + ;; + *) + archive_cmds_FC='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_FC='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs_FC=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec_FC='-L$libdir' + hardcode_minus_L_FC=yes + allow_undefined_flag_FC=unsupported + archive_cmds_FC='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds_FC='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag_FC=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_FC='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag_FC=' -expect_unresolved \*' + archive_cmds_FC='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc_FC='no' + hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_FC=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag_FC=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_FC='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag_FC=' -expect_unresolved \*' + archive_cmds_FC='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_FC='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec_FC='-rpath $libdir' + fi + archive_cmds_need_lc_FC='no' + hardcode_libdir_separator_FC=: + ;; + + solaris*) + no_undefined_flag_FC=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds_FC='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_FC='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds_FC='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_FC='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds_FC='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_FC='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec_FC='-R$libdir' + hardcode_shlibpath_var_FC=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec_FC='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec_FC='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs_FC=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds_FC='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_FC='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec_FC='-L$libdir' + hardcode_direct_FC=yes + hardcode_minus_L_FC=yes + hardcode_shlibpath_var_FC=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_FC=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds_FC='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds_FC='$CC -r -o $output$reload_objs' + hardcode_direct_FC=no + ;; + motorola) + archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_FC=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_FC=no + ;; + + sysv4.3*) + archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_FC=no + export_dynamic_flag_spec_FC='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_FC=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs_FC=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag_FC='${wl}-z,text' + archive_cmds_need_lc_FC=no + hardcode_shlibpath_var_FC=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds_FC='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_FC='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_FC='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_FC='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_FC='${wl}-z,text' + allow_undefined_flag_FC='${wl}-z,nodefs' + archive_cmds_need_lc_FC=no + hardcode_shlibpath_var_FC=no + hardcode_libdir_flag_spec_FC='${wl}-R,$libdir' + hardcode_libdir_separator_FC=':' + link_all_deplibs_FC=yes + export_dynamic_flag_spec_FC='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds_FC='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_FC='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_FC='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_FC='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_FC='-L$libdir' + hardcode_shlibpath_var_FC=no + ;; + + *) + ld_shlibs_FC=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec_FC='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_FC" >&5 +$as_echo "$ld_shlibs_FC" >&6; } +test "$ld_shlibs_FC" = no && can_build_shared=no + +with_gnu_ld_FC=$with_gnu_ld + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_FC" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_FC=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_FC in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc_FC+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_FC + pic_flag=$lt_prog_compiler_pic_FC + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_FC + allow_undefined_flag_FC= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_FC 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds_FC 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc_FC=no + else + lt_cv_archive_cmds_need_lc_FC=yes + fi + allow_undefined_flag_FC=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_FC" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc_FC" >&6; } + archive_cmds_need_lc_FC=$lt_cv_archive_cmds_need_lc_FC + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_FC\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_FC\"" + cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +if ac_fn_fc_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Add ABI-specific directories to the system library path. + sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" + + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_FC= +if test -n "$hardcode_libdir_flag_spec_FC" || + test -n "$runpath_var_FC" || + test "X$hardcode_automatic_FC" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct_FC" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, FC)" != no && + test "$hardcode_minus_L_FC" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_FC=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_FC=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_FC=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_FC" >&5 +$as_echo "$hardcode_action_FC" >&6; } + +if test "$hardcode_action_FC" = relink || + test "$inherit_rpath_FC" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test "$_lt_disable_FC" != yes + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + if test x"$FC" = x; then + as_fn_error $? "could not find Fortran 90 compiler" "$LINENO" 5 + fi + + ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + + ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .f90 files" >&5 +$as_echo_n "checking for Fortran flag to compile .f90 files... " >&6; } +if ${ac_cv_fc_srcext_f90+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=f90 +ac_fcflags_srcext_save=$ac_fcflags_srcext +ac_fcflags_srcext= +ac_cv_fc_srcext_f90=unknown +case $ac_ext in #( + [fF]77) ac_try=f77;; #( + *) ac_try=f95;; +esac +for ac_flag in none -qsuffix=f=f90 -Tf "-x $ac_try"; do + test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag" + cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +if ac_fn_fc_try_compile "$LINENO"; then : + ac_cv_fc_srcext_f90=$ac_flag; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +rm -f conftest.$ac_objext conftest.f90 +ac_fcflags_srcext=$ac_fcflags_srcext_save + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_f90" >&5 +$as_echo "$ac_cv_fc_srcext_f90" >&6; } +if test "x$ac_cv_fc_srcext_f90" = xunknown; then + as_fn_error $? "Fortran could not compile .f90 files" "$LINENO" 5 +else + ac_fc_srcext=f90 + if test "x$ac_cv_fc_srcext_f90" = xnone; then + ac_fcflags_srcext="" + FCFLAGS_f90="" + else + ac_fcflags_srcext=$ac_cv_fc_srcext_f90 + FCFLAGS_f90=$ac_cv_fc_srcext_f90 + fi + + +fi +ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + + FCFLAGS="${acx_save_fcflags}" + + + + +if test -z "${FCFLAGS}"; then + case "${FC}" in + gfortran*) + FCFLAGS="-pipe -O3 -funroll-loops -ffast-math -ffree-line-length-none" + ;; + openf9*) + FCFLAGS="-O3 -funroll-loops -ffast-math" + ;; + g95*) + FCFLAGS="-pipe -O3 -funroll-loops -ffast-math" + ;; + efc*|ifc*|ifort*) + case "${host}" in + x86_64*) + FCFLAGS="-u -fpp1 -nbs -pc80 -pad -align -unroll -O3 -ip -no-fp-port -mno-ieee-fp -vec-report0 -no-prec-div" + ;; + i?86*linux*) + FCFLAGS="-u -fpp1 -nbs -pc80 -pad -align -unroll -O3 -ip -no-fp-port -mno-ieee-fp -vec-report0 -no-prec-div" + a=`echo $host | sed "s/^i//" | sed "s/86.*//"` + if test "$a" -gt 5 ; then + FCFLAGS="$FCFLAGS -tpp7 -xW" + fi + ;; + ia64*) + FCFLAGS="-O3 -ip -IPF_fp_relaxed -ftz -fpp -u -align all -pad" + ;; + esac + ;; + sun*) + case "${host}" in + i?86*linux*|x86_64*) + FCFLAGS="-fast -xprefetch -xvector=simd" + ;; + sparc*) + FCFLAGS="-fast" + ;; + esac + ;; + pathf9*) + FCFLAGS="-O3 -march=auto -mcpu=auto -OPT:Ofast -fno-math-errno -LNO:simd=2 -OPT:align_unsafe=ON" + ;; + pgf90*) + FCFLAGS="-O4 -fast -Munroll -Mnoframe -Mdalign" + ;; + abf90*) + FCFLAGS="-O3 -YEXT_NAMES=LCS -YEXT_SFX=_" + ;; + xlf*) + FCFLAGS="-O3 -qarch=auto -qtune=auto -qcache=auto -qxlf90=autodealloc" + ;; + f9*) + case "${host}" in + alphaev*) + FCFLAGS="-align dcommons -fast -tune host -arch host -noautomatic" + ;; + mips*) + FCFLAGS="-Ofast -O3" + ;; + sparc*) + FCFLAGS="-fast" + ;; + *) + FCFLAGS="-O3" + ;; + esac + ;; + *) + FCFLAGS="-O3" + ;; + esac +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: Using FCFLAGS=\"$FCFLAGS\"" >&5 +$as_echo "$as_me: Using FCFLAGS=\"$FCFLAGS\"" >&6;} + + + + # "gcc -E -x c" means treat the file as if it were C. For some reason, when gcc identifies the source + # as Fortran, it will not concatenate tokens in preprocessing, so we must trick it. + for FCCPP_base in "$FCCPP" "/lib/cpp" "$CPP" "$CPP -x c" "`which cpp`"; do + # cycle if blank + if test -z "$FCCPP_base"; then + continue + fi + + for FCCPP in "$FCCPP_base" "$FCCPP_base -ansi"; do + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $FCCPP is usable for Fortran preprocessing" >&5 +$as_echo_n "checking whether $FCCPP is usable for Fortran preprocessing... " >&6; } + acx_fpp_ok=yes + + + + + echo " program main +anything + end" > conftest.F90 + + if (eval "$FCCPP conftest.F90") 2>&5 | + grep "anything" >/dev/null 2>&1; then : + + else + acx_fpp_ok=no; { $as_echo "$as_me:${as_lineno-$LINENO}: result: preprocessor cannot be run" >&5 +$as_echo "preprocessor cannot be run" >&6; }; break + fi + rm -f conftest* + + # very unlikely that adding -ansi will allow it to be run at all + + + + + echo " program main + +#define ADD_I(x) x ## i +ADD_I(h) + end" > conftest.F90 + + if (eval "$FCCPP conftest.F90") 2>&5 | + grep "hi" >/dev/null 2>&1; then : + + else + acx_fpp_ok=no; { $as_echo "$as_me:${as_lineno-$LINENO}: result: preprocessor does not concatenate tokens" >&5 +$as_echo "preprocessor does not concatenate tokens" >&6; } + fi + rm -f conftest* + + + # in Fortran this is string concatenation, must not be stripped + # some cpp's (e.g. icc -E -ansi) might actually insert a space between // too which is not acceptable + + + + echo " program main + +#define PUSH_SUB(x) x // ine +PUSH_SUB(rout) + end" > conftest.F90 + + if (eval "$FCCPP conftest.F90") 2>&5 | + grep "rout // ine" >/dev/null 2>&1; then : + + else + acx_fpp_ok=no; { $as_echo "$as_me:${as_lineno-$LINENO}: result: preprocessor mangles C++ style comment" >&5 +$as_echo "preprocessor mangles C++ style comment" >&6; } + fi + rm -f conftest* + + + if test x"$acx_fpp_ok" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + break + fi + done + if test x"$acx_fpp_ok" = xyes; then + break + fi + done + + if test x"$acx_fpp_ok" = xno; then + as_fn_error $? "Could not find preprocessor usable for Fortran." "$LINENO" 5 + fi + + + + + ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5 +$as_echo_n "checking how to get verbose linking output from $FC... " >&6; } +if ${ac_cv_prog_fc_v+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +if ac_fn_fc_try_compile "$LINENO"; then : + ac_cv_prog_fc_v= +# Try some options frequently used verbose output +for ac_verb in -v -verbose --verbose -V -\#\#\#; do + cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF + +# Compile and link our simple test program by passing a flag (argument +# 1 to this macro) to the Fortran compiler in order to get +# "verbose" output that we can then parse for the Fortran linker +# flags. +ac_save_FCFLAGS=$FCFLAGS +FCFLAGS="$FCFLAGS $ac_verb" +eval "set x $ac_link" +shift +$as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5 +# gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, +# LIBRARY_PATH; skip all such settings. +ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | + sed '/^Driving:/d; /^Configured with:/d; + '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` +$as_echo "$ac_fc_v_output" >&5 +FCFLAGS=$ac_save_FCFLAGS + +rm -rf conftest* + +# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where +# /foo, /bar, and /baz are search directories for the Fortran linker. +# Here, we change these into -L/foo -L/bar -L/baz (and put it first): +ac_fc_v_output="`echo $ac_fc_v_output | + grep 'LPATH is:' | + sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" + +# FIXME: we keep getting bitten by quoted arguments; a more general fix +# that detects unbalanced quotes in FLIBS should be implemented +# and (ugh) tested at some point. +case $ac_fc_v_output in + # With xlf replace commas with spaces, + # and remove "-link" and closing parenthesis. + *xlfentry*) + ac_fc_v_output=`echo $ac_fc_v_output | + sed ' + s/,/ /g + s/ -link / /g + s/) *$// + ' + ` ;; + + # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted + # $LIBS confuse us, and the libraries appear later in the output anyway). + *mGLOB_options_string*) + ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; + + # Portland Group compiler has singly- or doubly-quoted -cmdline argument + # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. + # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". + *-cmdline\ * | *-ignore\ * | *-def\ *) + ac_fc_v_output=`echo $ac_fc_v_output | sed "\ + s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g + s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g + s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; + + # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. + *fort77*f2c*gcc*) + ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' + /:[ ]\+Running[ ]\{1,\}"gcc"/{ + /"-c"/d + /[.]c"*/d + s/^.*"gcc"/"gcc"/ + s/"//gp + }'` ;; + + # If we are using Cray Fortran then delete quotes. + *cft90*) + ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; +esac + + + # look for -l* and *.a constructs in the output + for ac_arg in $ac_fc_v_output; do + case $ac_arg in + [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) + ac_cv_prog_fc_v=$ac_verb + break 2 ;; + esac + done +done +if test -z "$ac_cv_prog_fc_v"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5 +$as_echo "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;} +fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 +$as_echo "$as_me: WARNING: compilation failed" >&2;} +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5 +$as_echo "$ac_cv_prog_fc_v" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5 +$as_echo_n "checking for Fortran libraries of $FC... " >&6; } +if ${ac_cv_fc_libs+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$FCLIBS" != "x"; then + ac_cv_fc_libs="$FCLIBS" # Let the user override the test. +else + +cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF + +# Compile and link our simple test program by passing a flag (argument +# 1 to this macro) to the Fortran compiler in order to get +# "verbose" output that we can then parse for the Fortran linker +# flags. +ac_save_FCFLAGS=$FCFLAGS +FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v" +eval "set x $ac_link" +shift +$as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5 +# gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, +# LIBRARY_PATH; skip all such settings. +ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | + sed '/^Driving:/d; /^Configured with:/d; + '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` +$as_echo "$ac_fc_v_output" >&5 +FCFLAGS=$ac_save_FCFLAGS + +rm -rf conftest* + +# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where +# /foo, /bar, and /baz are search directories for the Fortran linker. +# Here, we change these into -L/foo -L/bar -L/baz (and put it first): +ac_fc_v_output="`echo $ac_fc_v_output | + grep 'LPATH is:' | + sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" + +# FIXME: we keep getting bitten by quoted arguments; a more general fix +# that detects unbalanced quotes in FLIBS should be implemented +# and (ugh) tested at some point. +case $ac_fc_v_output in + # With xlf replace commas with spaces, + # and remove "-link" and closing parenthesis. + *xlfentry*) + ac_fc_v_output=`echo $ac_fc_v_output | + sed ' + s/,/ /g + s/ -link / /g + s/) *$// + ' + ` ;; + + # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted + # $LIBS confuse us, and the libraries appear later in the output anyway). + *mGLOB_options_string*) + ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; + + # Portland Group compiler has singly- or doubly-quoted -cmdline argument + # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. + # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". + *-cmdline\ * | *-ignore\ * | *-def\ *) + ac_fc_v_output=`echo $ac_fc_v_output | sed "\ + s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g + s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g + s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; + + # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. + *fort77*f2c*gcc*) + ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' + /:[ ]\+Running[ ]\{1,\}"gcc"/{ + /"-c"/d + /[.]c"*/d + s/^.*"gcc"/"gcc"/ + s/"//gp + }'` ;; + + # If we are using Cray Fortran then delete quotes. + *cft90*) + ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; +esac + + + +ac_cv_fc_libs= + +# Save positional arguments (if any) +ac_save_positional="$@" + +set X $ac_fc_v_output +while test $# != 1; do + shift + ac_arg=$1 + case $ac_arg in + [\\/]*.a | ?:[\\/]*.a) + ac_exists=false + for ac_i in $ac_cv_fc_libs; do + if test x"$ac_arg" = x"$ac_i"; then + ac_exists=true + break + fi + done + + if test x"$ac_exists" = xtrue; then : + +else + ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" +fi + ;; + -bI:*) + ac_exists=false + for ac_i in $ac_cv_fc_libs; do + if test x"$ac_arg" = x"$ac_i"; then + ac_exists=true + break + fi + done + + if test x"$ac_exists" = xtrue; then : + +else + if test "$ac_compiler_gnu" = yes; then + for ac_link_opt in $ac_arg; do + ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" + done +else + ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" +fi +fi + ;; + # Ignore these flags. + -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ + |-LANG:=* | -LIST:* | -LNO:* | -link) + ;; + -lkernel32) + case $host_os in + *cygwin*) ;; + *) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" + ;; + esac + ;; + -[LRuYz]) + # These flags, when seen by themselves, take an argument. + # We remove the space between option and argument and re-iterate + # unless we find an empty arg or a new option (starting with -) + case $2 in + "" | -*);; + *) + ac_arg="$ac_arg$2" + shift; shift + set X $ac_arg "$@" + ;; + esac + ;; + -YP,*) + for ac_j in `$as_echo "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do + ac_exists=false + for ac_i in $ac_cv_fc_libs; do + if test x"$ac_j" = x"$ac_i"; then + ac_exists=true + break + fi + done + + if test x"$ac_exists" = xtrue; then : + +else + ac_arg="$ac_arg $ac_j" + ac_cv_fc_libs="$ac_cv_fc_libs $ac_j" +fi + done + ;; + -[lLR]*) + ac_exists=false + for ac_i in $ac_cv_fc_libs; do + if test x"$ac_arg" = x"$ac_i"; then + ac_exists=true + break + fi + done + + if test x"$ac_exists" = xtrue; then : + +else + ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" +fi + ;; + -zallextract*| -zdefaultextract) + ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" + ;; + # Ignore everything else. + esac +done +# restore positional arguments +set X $ac_save_positional; shift + +# We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, +# then we insist that the "run path" must be an absolute path (i.e. it +# must begin with a "/"). +case `(uname -sr) 2>/dev/null` in + "SunOS 5"*) + ac_ld_run_path=`$as_echo "$ac_fc_v_output" | + sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` + test "x$ac_ld_run_path" != x && + if test "$ac_compiler_gnu" = yes; then + for ac_link_opt in $ac_ld_run_path; do + ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" + done +else + ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path" +fi + ;; +esac +fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5 +$as_echo "$ac_cv_fc_libs" >&6; } +FCLIBS="$ac_cv_fc_libs" + + +ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + +ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dummy main to link with Fortran libraries" >&5 +$as_echo_n "checking for dummy main to link with Fortran libraries... " >&6; } +if ${ac_cv_fc_dummy_main+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_fc_dm_save_LIBS=$LIBS + LIBS="$LIBS $FCLIBS" + ac_fortran_dm_var=FC_DUMMY_MAIN + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + # First, try linking without a dummy main: + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef FC_DUMMY_MAIN +#ifndef FC_DUMMY_MAIN_EQ_F77 +# ifdef __cplusplus + extern "C" +# endif + int FC_DUMMY_MAIN() { return 1; } +#endif +#endif +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_fortran_dummy_main=none +else + ac_cv_fortran_dummy_main=unknown +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + if test $ac_cv_fortran_dummy_main = unknown; then + for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define $ac_fortran_dm_var $ac_func +#ifdef FC_DUMMY_MAIN +#ifndef FC_DUMMY_MAIN_EQ_F77 +# ifdef __cplusplus + extern "C" +# endif + int FC_DUMMY_MAIN() { return 1; } +#endif +#endif +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_fortran_dummy_main=$ac_func; break +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + done + fi + ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + ac_cv_fc_dummy_main=$ac_cv_fortran_dummy_main + rm -rf conftest* + LIBS=$ac_fc_dm_save_LIBS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_dummy_main" >&5 +$as_echo "$ac_cv_fc_dummy_main" >&6; } +FC_DUMMY_MAIN=$ac_cv_fc_dummy_main +if test "$FC_DUMMY_MAIN" != unknown; then : + if test $FC_DUMMY_MAIN != none; then + +cat >>confdefs.h <<_ACEOF +#define FC_DUMMY_MAIN $FC_DUMMY_MAIN +_ACEOF + + if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then + +$as_echo "#define FC_DUMMY_MAIN_EQ_F77 1" >>confdefs.h + + fi +fi +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "linking to Fortran libraries from C fails +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + +ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran name-mangling scheme" >&5 +$as_echo_n "checking for Fortran name-mangling scheme... " >&6; } +if ${ac_cv_fc_mangling+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.$ac_ext <<_ACEOF + subroutine foobar() + return + end + subroutine foo_bar() + return + end +_ACEOF +if ac_fn_fc_try_compile "$LINENO"; then : + mv conftest.$ac_objext cfortran_test.$ac_objext + + ac_save_LIBS=$LIBS + LIBS="cfortran_test.$ac_objext $LIBS $FCLIBS" + + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + ac_success=no + for ac_foobar in foobar FOOBAR; do + for ac_underscore in "" "_"; do + ac_func="$ac_foobar$ac_underscore" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +#ifdef FC_DUMMY_MAIN +#ifndef FC_DUMMY_MAIN_EQ_F77 +# ifdef __cplusplus + extern "C" +# endif + int FC_DUMMY_MAIN() { return 1; } +#endif +#endif +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_success=yes; break 2 +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + done + done + ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + + if test "$ac_success" = "yes"; then + case $ac_foobar in + foobar) + ac_case=lower + ac_foo_bar=foo_bar + ;; + FOOBAR) + ac_case=upper + ac_foo_bar=FOO_BAR + ;; + esac + + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + ac_success_extra=no + for ac_extra in "" "_"; do + ac_func="$ac_foo_bar$ac_underscore$ac_extra" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +#ifdef FC_DUMMY_MAIN +#ifndef FC_DUMMY_MAIN_EQ_F77 +# ifdef __cplusplus + extern "C" +# endif + int FC_DUMMY_MAIN() { return 1; } +#endif +#endif +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_success_extra=yes; break +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + done + ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + + if test "$ac_success_extra" = "yes"; then + ac_cv_fc_mangling="$ac_case case" + if test -z "$ac_underscore"; then + ac_cv_fc_mangling="$ac_cv_fc_mangling, no underscore" + else + ac_cv_fc_mangling="$ac_cv_fc_mangling, underscore" + fi + if test -z "$ac_extra"; then + ac_cv_fc_mangling="$ac_cv_fc_mangling, no extra underscore" + else + ac_cv_fc_mangling="$ac_cv_fc_mangling, extra underscore" + fi + else + ac_cv_fc_mangling="unknown" + fi + else + ac_cv_fc_mangling="unknown" + fi + + LIBS=$ac_save_LIBS + rm -rf conftest* + rm -f cfortran_test* +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compile a simple Fortran program +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_mangling" >&5 +$as_echo "$ac_cv_fc_mangling" >&6; } + +ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + +ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu +case $ac_cv_fc_mangling in + "lower case, no underscore, no extra underscore") + $as_echo "#define FC_FUNC(name,NAME) name" >>confdefs.h + + $as_echo "#define FC_FUNC_(name,NAME) name" >>confdefs.h + ;; + "lower case, no underscore, extra underscore") + $as_echo "#define FC_FUNC(name,NAME) name" >>confdefs.h + + $as_echo "#define FC_FUNC_(name,NAME) name ## _" >>confdefs.h + ;; + "lower case, underscore, no extra underscore") + $as_echo "#define FC_FUNC(name,NAME) name ## _" >>confdefs.h + + $as_echo "#define FC_FUNC_(name,NAME) name ## _" >>confdefs.h + ;; + "lower case, underscore, extra underscore") + $as_echo "#define FC_FUNC(name,NAME) name ## _" >>confdefs.h + + $as_echo "#define FC_FUNC_(name,NAME) name ## __" >>confdefs.h + ;; + "upper case, no underscore, no extra underscore") + $as_echo "#define FC_FUNC(name,NAME) NAME" >>confdefs.h + + $as_echo "#define FC_FUNC_(name,NAME) NAME" >>confdefs.h + ;; + "upper case, no underscore, extra underscore") + $as_echo "#define FC_FUNC(name,NAME) NAME" >>confdefs.h + + $as_echo "#define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h + ;; + "upper case, underscore, no extra underscore") + $as_echo "#define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h + + $as_echo "#define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h + ;; + "upper case, underscore, extra underscore") + $as_echo "#define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h + + $as_echo "#define FC_FUNC_(name,NAME) NAME ## __" >>confdefs.h + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unknown Fortran name-mangling scheme" >&5 +$as_echo "$as_me: WARNING: unknown Fortran name-mangling scheme" >&2;} + ;; +esac + +ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler accepts very long lines" >&5 +$as_echo_n "checking whether the compiler accepts very long lines... " >&6; } +cat > conftest.$ac_ext <<_ACEOF + program main + +write(*, *) '456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678904567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789001234567890123456789045678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890' + + end +_ACEOF +if ac_fn_fc_try_compile "$LINENO"; then : + acx_long_lines_ok=yes; +$as_echo "#define LONG_LINES 1" >>confdefs.h + +else + acx_long_lines_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +LONG_LINES=$acx_long_lines_ok + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_long_lines_ok" >&5 +$as_echo "$acx_long_lines_ok" >&6; } + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler accepts \"line-number\" lines cast by the preprocessor" >&5 +$as_echo_n "checking whether the compiler accepts \"line-number\" lines cast by the preprocessor... " >&6; } +cat > conftest.$ac_ext <<_ACEOF + program main +# 1 + end +_ACEOF +if ac_fn_fc_try_compile "$LINENO"; then : + acx_f90_accepts_line_numbers_ok=yes + +$as_echo "#define F90_ACCEPTS_LINE_NUMBERS 1" >>confdefs.h + +else + acx_f90_accepts_line_numbers_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +F90_ACCEPTS_LINE_NUMBERS=$acx_f90_accepts_line_numbers_ok + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_f90_accepts_line_numbers_ok" >&5 +$as_echo "$acx_f90_accepts_line_numbers_ok" >&6; } + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking fortran 90 modules extension" >&5 +$as_echo_n "checking fortran 90 modules extension... " >&6; } +if ${ax_cv_f90_modext+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + +ax_f90_mod_uppercase=no +i=0 +while test \( -f tmpdir_$i \) -o \( -d tmpdir_$i \) ; do + i=`expr $i + 1` +done +mkdir tmpdir_$i +cd tmpdir_$i +cat > conftest.$ac_ext <<_ACEOF +module conftest_module + contains + subroutine conftest_routine + write(*,'(a)') 'gotcha!' + end subroutine conftest_routine + end module conftest_module + +_ACEOF +if ac_fn_fc_try_compile "$LINENO"; then : + ax_cv_f90_modext=`ls | sed -n 's,conftest_module\.,,p'` + if test x$ax_cv_f90_modext = x ; then + ax_cv_f90_modext=`ls | sed -n 's,CONFTEST_MODULE\.,,p'` + if test x$ax_cv_f90_modext = x ; then + ax_cv_f90_modext=unknown + else + ax_f90_mod_uppercase=yes + fi + fi + +else + ax_cv_f90_modext=unknown +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +cd .. +rm -fr tmpdir_$i +ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_f90_modext" >&5 +$as_echo "$ax_cv_f90_modext" >&6; } + + + + + if test -z "$FC_INTEGER_SIZE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the size of a Fortran integer" >&5 +$as_echo_n "checking for the size of a Fortran integer... " >&6; } + if test "$cross_compiling" = yes; then : + ac_fcintegersize=4; echo -n "cross-compiling; assuming... " +else + cat > conftest.$ac_ext <<_ACEOF + program main + + integer :: i + integer(8) :: i8 + + i8 = huge(i) + + select case(i8) + case(127_8); i = 1 + case(32767_8); i = 2 + case(2147483647_8); i = 4 + case(9223372036854775807_8); i = 8 + case default; write(*,'(a,i20)') "unrecognized size ", i8; stop 999 + end select + + open(1, file='conftest.out') + write(1,'(i1)') i + + end +_ACEOF +if ac_fn_fc_try_run "$LINENO"; then : + ac_fcintegersize=`cat conftest.out` +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "f90 program to find the size of a Fortran integer failed +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_fcintegersize} bytes" >&5 +$as_echo "${ac_fcintegersize} bytes" >&6; } + else + ac_fcintegersize=$FC_INTEGER_SIZE + fi + +cat >>confdefs.h <<_ACEOF +#define FC_INTEGER_SIZE ${ac_fcintegersize} +_ACEOF + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for which C type corresponds to Fortran integer" >&5 +$as_echo_n "checking for which C type corresponds to Fortran integer... " >&6; } + + + if test -z "$CC_FORTRAN_INT"; then + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + if test "$cross_compiling" = yes; then : + ac_ccfortranint="int"; echo -n "cross-compiling; assuming... " +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include + +#ifdef FC_DUMMY_MAIN +#ifndef FC_DUMMY_MAIN_EQ_F77 +# ifdef __cplusplus + extern "C" +# endif + int FC_DUMMY_MAIN() { return 1; } +#endif +#endif +int +main () +{ + + FILE* fp; + fp = fopen("conftest.out", "w"); + if(${ac_fcintegersize} == sizeof(char)) + fprintf(fp, "char"); + else if(${ac_fcintegersize} == sizeof(short)) + fprintf(fp, "short"); + else if(${ac_fcintegersize} == sizeof(int)) + fprintf(fp, "int"); + else if(${ac_fcintegersize} == sizeof(long)) + fprintf(fp, "long"); + else + return 1; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_ccfortranint=`cat conftest.out` +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C program failed to find the C type of a Fortran integer +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + ac_ext=${ac_fc_srcext-f} +ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_ccfortranint}" >&5 +$as_echo "${ac_ccfortranint}" >&6; } + else + ac_ccfortranint=$CC_FORTRAN_INT + fi + +cat >>confdefs.h <<_ACEOF +#define CC_FORTRAN_INT ${ac_ccfortranint} +_ACEOF + + + + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +else + HAVE_FORTRAN=0 +fi + + if test x$ax_f90_mod_uppercase = xyes; then + F90_MOD_UPPERCASE_TRUE= + F90_MOD_UPPERCASE_FALSE='#' +else + F90_MOD_UPPERCASE_TRUE='#' + F90_MOD_UPPERCASE_FALSE= +fi + + if test x${HAVE_FORTRAN} = x1; then + COMPILE_FORTRAN_TRUE= + COMPILE_FORTRAN_FALSE='#' +else + COMPILE_FORTRAN_TRUE='#' + COMPILE_FORTRAN_FALSE= +fi + + +# Check whether --enable-single was given. +if test "${enable_single+set}" = set; then : + enableval=$enable_single; ac_cv_single_prec=$enableval +else + ac_cv_single_prec=no +fi + + + if test $ac_cv_single_prec = yes; then + COMPILE_SINGLE_TRUE= + COMPILE_SINGLE_FALSE='#' +else + COMPILE_SINGLE_TRUE='#' + COMPILE_SINGLE_FALSE= +fi + + + +ac_config_files="$ac_config_files Makefile xc_version.h src/Makefile testsuite/Makefile build/Makefile build/libxc.pc build/libxc.spec" + + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +$as_echo_n "checking that generated files are newer than configure... " >&6; } + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 +$as_echo "done" >&6; } + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${ENABLE_FORTRAN_TRUE}" && test -z "${ENABLE_FORTRAN_FALSE}"; then + as_fn_error $? "conditional \"ENABLE_FORTRAN\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${F90_MOD_UPPERCASE_TRUE}" && test -z "${F90_MOD_UPPERCASE_FALSE}"; then + as_fn_error $? "conditional \"F90_MOD_UPPERCASE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COMPILE_FORTRAN_TRUE}" && test -z "${COMPILE_FORTRAN_FALSE}"; then + as_fn_error $? "conditional \"COMPILE_FORTRAN\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COMPILE_SINGLE_TRUE}" && test -z "${COMPILE_SINGLE_FALSE}"; then + as_fn_error $? "conditional \"COMPILE_SINGLE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by libxc $as_me 2.2.0, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to . +libxc home page: ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +libxc config.status 2.2.0 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' +macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' +macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' +pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' +ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' +host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' +host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' +host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' +build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' +build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' +build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' +SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' +Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' +GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' +EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' +FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' +LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' +NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' +LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' +ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' +exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' +lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' +lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' +reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' +want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' +sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' +AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' +STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' +RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' +lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' +CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' +compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' +GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' +lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' +objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' +need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' +LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' +OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' +libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' +module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' +need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' +version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' +runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' +libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' +soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' +install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' +finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' +old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' +striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' +predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' +postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' +predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' +postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' +LD_FC='`$ECHO "$LD_FC" | $SED "$delay_single_quote_subst"`' +reload_flag_FC='`$ECHO "$reload_flag_FC" | $SED "$delay_single_quote_subst"`' +reload_cmds_FC='`$ECHO "$reload_cmds_FC" | $SED "$delay_single_quote_subst"`' +old_archive_cmds_FC='`$ECHO "$old_archive_cmds_FC" | $SED "$delay_single_quote_subst"`' +compiler_FC='`$ECHO "$compiler_FC" | $SED "$delay_single_quote_subst"`' +GCC_FC='`$ECHO "$GCC_FC" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag_FC='`$ECHO "$lt_prog_compiler_no_builtin_flag_FC" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic_FC='`$ECHO "$lt_prog_compiler_pic_FC" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl_FC='`$ECHO "$lt_prog_compiler_wl_FC" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static_FC='`$ECHO "$lt_prog_compiler_static_FC" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o_FC='`$ECHO "$lt_cv_prog_compiler_c_o_FC" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc_FC='`$ECHO "$archive_cmds_need_lc_FC" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes_FC='`$ECHO "$enable_shared_with_static_runtimes_FC" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec_FC='`$ECHO "$export_dynamic_flag_spec_FC" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec_FC='`$ECHO "$whole_archive_flag_spec_FC" | $SED "$delay_single_quote_subst"`' +compiler_needs_object_FC='`$ECHO "$compiler_needs_object_FC" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds_FC='`$ECHO "$old_archive_from_new_cmds_FC" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds_FC='`$ECHO "$old_archive_from_expsyms_cmds_FC" | $SED "$delay_single_quote_subst"`' +archive_cmds_FC='`$ECHO "$archive_cmds_FC" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds_FC='`$ECHO "$archive_expsym_cmds_FC" | $SED "$delay_single_quote_subst"`' +module_cmds_FC='`$ECHO "$module_cmds_FC" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds_FC='`$ECHO "$module_expsym_cmds_FC" | $SED "$delay_single_quote_subst"`' +with_gnu_ld_FC='`$ECHO "$with_gnu_ld_FC" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag_FC='`$ECHO "$allow_undefined_flag_FC" | $SED "$delay_single_quote_subst"`' +no_undefined_flag_FC='`$ECHO "$no_undefined_flag_FC" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_FC='`$ECHO "$hardcode_libdir_flag_spec_FC" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator_FC='`$ECHO "$hardcode_libdir_separator_FC" | $SED "$delay_single_quote_subst"`' +hardcode_direct_FC='`$ECHO "$hardcode_direct_FC" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute_FC='`$ECHO "$hardcode_direct_absolute_FC" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L_FC='`$ECHO "$hardcode_minus_L_FC" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var_FC='`$ECHO "$hardcode_shlibpath_var_FC" | $SED "$delay_single_quote_subst"`' +hardcode_automatic_FC='`$ECHO "$hardcode_automatic_FC" | $SED "$delay_single_quote_subst"`' +inherit_rpath_FC='`$ECHO "$inherit_rpath_FC" | $SED "$delay_single_quote_subst"`' +link_all_deplibs_FC='`$ECHO "$link_all_deplibs_FC" | $SED "$delay_single_quote_subst"`' +always_export_symbols_FC='`$ECHO "$always_export_symbols_FC" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds_FC='`$ECHO "$export_symbols_cmds_FC" | $SED "$delay_single_quote_subst"`' +exclude_expsyms_FC='`$ECHO "$exclude_expsyms_FC" | $SED "$delay_single_quote_subst"`' +include_expsyms_FC='`$ECHO "$include_expsyms_FC" | $SED "$delay_single_quote_subst"`' +prelink_cmds_FC='`$ECHO "$prelink_cmds_FC" | $SED "$delay_single_quote_subst"`' +postlink_cmds_FC='`$ECHO "$postlink_cmds_FC" | $SED "$delay_single_quote_subst"`' +file_list_spec_FC='`$ECHO "$file_list_spec_FC" | $SED "$delay_single_quote_subst"`' +hardcode_action_FC='`$ECHO "$hardcode_action_FC" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs_FC='`$ECHO "$compiler_lib_search_dirs_FC" | $SED "$delay_single_quote_subst"`' +predep_objects_FC='`$ECHO "$predep_objects_FC" | $SED "$delay_single_quote_subst"`' +postdep_objects_FC='`$ECHO "$postdep_objects_FC" | $SED "$delay_single_quote_subst"`' +predeps_FC='`$ECHO "$predeps_FC" | $SED "$delay_single_quote_subst"`' +postdeps_FC='`$ECHO "$postdeps_FC" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path_FC='`$ECHO "$compiler_lib_search_path_FC" | $SED "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in SHELL \ +ECHO \ +PATH_SEPARATOR \ +SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +file_magic_glob \ +want_nocaseglob \ +DLLTOOL \ +sharedlib_from_linklib_cmd \ +AR \ +AR_FLAGS \ +archiver_list_spec \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +nm_file_list_spec \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_pic \ +lt_prog_compiler_wl \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +MANIFEST_TOOL \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_separator \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +install_override_mode \ +finish_eval \ +old_striplib \ +striplib \ +compiler_lib_search_dirs \ +predep_objects \ +postdep_objects \ +predeps \ +postdeps \ +compiler_lib_search_path \ +LD_FC \ +reload_flag_FC \ +compiler_FC \ +lt_prog_compiler_no_builtin_flag_FC \ +lt_prog_compiler_pic_FC \ +lt_prog_compiler_wl_FC \ +lt_prog_compiler_static_FC \ +lt_cv_prog_compiler_c_o_FC \ +export_dynamic_flag_spec_FC \ +whole_archive_flag_spec_FC \ +compiler_needs_object_FC \ +with_gnu_ld_FC \ +allow_undefined_flag_FC \ +no_undefined_flag_FC \ +hardcode_libdir_flag_spec_FC \ +hardcode_libdir_separator_FC \ +exclude_expsyms_FC \ +include_expsyms_FC \ +file_list_spec_FC \ +compiler_lib_search_dirs_FC \ +predep_objects_FC \ +postdep_objects_FC \ +predeps_FC \ +postdeps_FC \ +compiler_lib_search_path_FC; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postlink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec \ +reload_cmds_FC \ +old_archive_cmds_FC \ +old_archive_from_new_cmds_FC \ +old_archive_from_expsyms_cmds_FC \ +archive_cmds_FC \ +archive_expsym_cmds_FC \ +module_cmds_FC \ +module_expsym_cmds_FC \ +export_symbols_cmds_FC \ +prelink_cmds_FC \ +postlink_cmds_FC; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + + + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "xc_version.h") CONFIG_FILES="$CONFIG_FILES xc_version.h" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "testsuite/Makefile") CONFIG_FILES="$CONFIG_FILES testsuite/Makefile" ;; + "build/Makefile") CONFIG_FILES="$CONFIG_FILES build/Makefile" ;; + "build/libxc.pc") CONFIG_FILES="$CONFIG_FILES build/libxc.pc" ;; + "build/libxc.spec") CONFIG_FILES="$CONFIG_FILES build/libxc.spec" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="FC " + +# ### BEGIN LIBTOOL CONFIG + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The PATH separator for the build system. +PATH_SEPARATOR=$lt_PATH_SEPARATOR + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + +# The archiver. +AR=$lt_AR + +# Flags to create an archive. +AR_FLAGS=$lt_AR_FLAGS + +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and in which our libraries should be installed. +lt_sysroot=$lt_sysroot + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects +postdep_objects=$lt_postdep_objects +predeps=$lt_predeps +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + if test x"$xsi_shell" = xyes; then + sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ +func_dirname ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_basename ()$/,/^} # func_basename /c\ +func_basename ()\ +{\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ +func_dirname_and_basename ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ +func_stripname ()\ +{\ +\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ +\ # positional parameters, so assign one to ordinary parameter first.\ +\ func_stripname_result=${3}\ +\ func_stripname_result=${func_stripname_result#"${1}"}\ +\ func_stripname_result=${func_stripname_result%"${2}"}\ +} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ +func_split_long_opt ()\ +{\ +\ func_split_long_opt_name=${1%%=*}\ +\ func_split_long_opt_arg=${1#*=}\ +} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ +func_split_short_opt ()\ +{\ +\ func_split_short_opt_arg=${1#??}\ +\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ +} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ +func_lo2o ()\ +{\ +\ case ${1} in\ +\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ +\ *) func_lo2o_result=${1} ;;\ +\ esac\ +} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_xform ()$/,/^} # func_xform /c\ +func_xform ()\ +{\ + func_xform_result=${1%.*}.lo\ +} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_arith ()$/,/^} # func_arith /c\ +func_arith ()\ +{\ + func_arith_result=$(( $* ))\ +} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_len ()$/,/^} # func_len /c\ +func_len ()\ +{\ + func_len_result=${#1}\ +} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + +fi + +if test x"$lt_shell_append" = xyes; then + sed -e '/^func_append ()$/,/^} # func_append /c\ +func_append ()\ +{\ + eval "${1}+=\\${2}"\ +} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ +func_append_quoted ()\ +{\ +\ func_quote_for_eval "${2}"\ +\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ +} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + # Save a `func_append' function call where possible by direct use of '+=' + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +else + # Save a `func_append' function call even when '+=' is not available + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +fi + +if test x"$_lt_function_replace_fail" = x":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 +$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} +fi + + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + + cat <<_LT_EOF >> "$ofile" + +# ### BEGIN LIBTOOL TAG CONFIG: FC + +# The linker used to build libraries. +LD=$lt_LD_FC + +# How to create reloadable object files. +reload_flag=$lt_reload_flag_FC +reload_cmds=$lt_reload_cmds_FC + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_FC + +# A language specific compiler. +CC=$lt_compiler_FC + +# Is the compiler the GNU compiler? +with_gcc=$GCC_FC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_FC + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_FC + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_FC + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_FC + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_FC + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_FC + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_FC + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_FC + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_FC + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_FC + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_FC + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_FC + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_FC +archive_expsym_cmds=$lt_archive_expsym_cmds_FC + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_FC +module_expsym_cmds=$lt_module_expsym_cmds_FC + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_FC + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_FC + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_FC + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_FC + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_FC + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_FC + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_FC + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_FC + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_FC + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_FC + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_FC + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_FC + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_FC + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_FC + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_FC + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_FC + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_FC + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds_FC + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_FC + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_FC + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_FC + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects_FC +postdep_objects=$lt_postdep_objects_FC +predeps=$lt_predeps_FC +postdeps=$lt_postdeps_FC + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_FC + +# ### END LIBTOOL TAG CONFIG: FC +_LT_EOF + + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + diff --git a/libxc/configure.ac b/libxc/configure.ac new file mode 100644 index 000000000..56d6745ed --- /dev/null +++ b/libxc/configure.ac @@ -0,0 +1,165 @@ +## Copyright (C) 2002-2006 M. Marques, A. Castro, A. Rubio, G. Bertsch +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU Lesser General Public License as published by +## the Free Software Foundation; either version 2, or (at your option) +## any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. +## +## $Id: configure.ac 2422 2006-09-23 20:43:15Z marques $ + +AC_INIT([libxc],[2.2.0],[libxc@tddft.org],[libxc],[http://www.tddft.org/programs/Libxc]) +AC_CONFIG_SRCDIR([src/xc.h]) +AM_INIT_AUTOMAKE + +AC_CONFIG_HEADERS([config.h]) +AC_CONFIG_MACRO_DIR([m4]) + +# Library versioning (C:R:A == current:revision:age) +# See the libtool manual for an explanation of the numbers +# +# libxc-2.0.0 1:0:0 +# libxc-2.0.1 1:1:0 +# libxc-2.0.2 1:2:0 +# libxc-2.0.3 1:3:0 +# libxc-2.1.0 2:0:1 +# libxc-2.2.0 3:0:0 +# +# Note that libtool versioning was not used prior to libxc-2.0. +# Because of this, we will start counting at 1. +# +# How to update library version number +# ==================================== +# +# C: increment if the interface has additions, changes, removals. +# +# R: increment any time the source changes; set to 0 if you +# incremented CURRENT +# +# A: increment if any interfaces have been added; set to 0 if any +# interfaces have been removed. removal has precedence over adding, +# so set to 0 if both happened. + +XC_CURRENT=3 +XC_REVISION=0 +XC_AGE=0 + +XC_LT_VERSION="${XC_CURRENT}:${XC_REVISION}:${XC_AGE}" +AC_SUBST(XC_LT_VERSION) + +# Split VERSION into XC_VERSION_MAJOR and XC_VERSION_MINOR +# Follows AX_SPLIT_VERSION macro from AC-Archive +# Rhys Ulerich +AC_PROG_SED +XC_MAJOR_VERSION=`echo "$VERSION" | $SED 's/\([[^.]][[^.]]*\).*/\1/'` +XC_MINOR_VERSION=`echo "$VERSION" | $SED 's/[[^.]][[^.]]*.\([[^.]][[^.]]*\).*/\1/'` +AC_SUBST(XC_MAJOR_VERSION) +AC_SUBST(XC_MINOR_VERSION) + + + +# Installation prefix by default +AC_PREFIX_DEFAULT([/opt/etsf]) + +AC_DISABLE_SHARED +AC_PROG_LIBTOOL + +# Checks for programs. +AC_PROG_CC +AC_LANG_PREPROC +AM_PROG_CC_C_O +AC_C_INLINE + +# Checks for header files. +AC_HEADER_STDC +AC_FUNC_ALLOCA + +# Checks for typedefs, structures, and compiler characteristics. +AC_CHECK_SIZEOF(void*) + +# Check for presence of some C99 libm functions +AC_CHECK_LIB([m],[sqrtf],[AC_DEFINE([HAVE_SQRTF],[1],[libm includes sqrtf])]) +AC_CHECK_LIB([m],[cbrt],[AC_DEFINE([HAVE_CBRT],[1],[libm includes cbrt])]) +AC_CHECK_LIB([m],[cbrtf],[AC_DEFINE([HAVE_CBRTF],[1],[libm includes cbrtf])]) +AC_CHECK_LIB([m],[feenableexcept],[AC_DEFINE([HAVE_FEENABLEEXCEPT],[1],[libm includes feenableexcept])]) + +dnl build/install fortran bits unless --disable-fortran is used +AC_ARG_ENABLE([fortran], + AS_HELP_STRING([--disable-fortran], [don't build/install fortran components]), + [ac_cv_build_fortran=$enableval], + [ac_cv_build_fortran=yes]) +AM_CONDITIONAL([ENABLE_FORTRAN], [test $ac_cv_build_fortran = yes]) + +if test $ac_cv_build_fortran = yes; then + HAVE_FORTRAN=1 + AC_DEFINE(HAVE_FORTRAN, [1], [Defined if libxc is compiled with fortran support]) + + dnl try to find out what is the default FORTRAN 90 compiler + acx_save_fcflags="${FCFLAGS}" + AC_PROG_FC([], [Fortran 90]) + if test x"$FC" = x; then + AC_MSG_ERROR([could not find Fortran 90 compiler]) + fi + + AC_LANG_PUSH(Fortran) + AC_FC_SRCEXT(f90) + FCFLAGS="${acx_save_fcflags}" + + dnl Fortran default flags + ACX_FCFLAGS + + dnl libxc needs the preprocessor. The result goes to FCCPP + ACX_FCCPP + + dnl how Fortran mangles function names + AC_FC_WRAPPERS + + dnl check whether we have or not a compiler that allows for very long lines... + ACX_LONG_FORTRAN_LINES + + dnl check whether the Fortran 90 compiler accepts line markers cast by the preprocessor. + ACX_F90_ACCEPTS_LINE_NUMBERS + + AX_F90_MODULE_EXTENSION + + dnl Need to know the size of a Fortran integer + ACX_FC_INTEGER_SIZE + ACX_CC_FORTRAN_INT + + AC_LANG_POP([Fortran]) +else + HAVE_FORTRAN=0 +fi +AC_SUBST(ax_cv_f90_modext) +AM_CONDITIONAL(F90_MOD_UPPERCASE, [test x$ax_f90_mod_uppercase = xyes]) +AM_CONDITIONAL(COMPILE_FORTRAN, test x${HAVE_FORTRAN} = x1) + +dnl should I compile libxc in single precision? +AC_ARG_ENABLE([single], + AS_HELP_STRING([--enable-single], [compile libxc in single precision]), + [ac_cv_single_prec=$enableval], + [ac_cv_single_prec=no]) + +AM_CONDITIONAL(COMPILE_SINGLE, test $ac_cv_single_prec = yes) + + +AC_CONFIG_FILES([Makefile + xc_version.h + src/Makefile + testsuite/Makefile + build/Makefile + build/libxc.pc + build/libxc.spec +]) + +AC_OUTPUT + diff --git a/libxc/depcomp b/libxc/depcomp new file mode 100755 index 000000000..4ebd5b3a2 --- /dev/null +++ b/libxc/depcomp @@ -0,0 +1,791 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2013-05-30.07; # UTC + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by 'PROGRAMS ARGS'. + object Object file output by 'PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputting dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +# Get the directory component of the given path, and save it in the +# global variables '$dir'. Note that this directory component will +# be either empty or ending with a '/' character. This is deliberate. +set_dir_from () +{ + case $1 in + */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; + *) dir=;; + esac +} + +# Get the suffix-stripped basename of the given path, and save it the +# global variable '$base'. +set_base_from () +{ + base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` +} + +# If no dependency file was actually created by the compiler invocation, +# we still have to create a dummy depfile, to avoid errors with the +# Makefile "include basename.Plo" scheme. +make_dummy_depfile () +{ + echo "#dummy" > "$depfile" +} + +# Factor out some common post-processing of the generated depfile. +# Requires the auxiliary global variable '$tmpdepfile' to be set. +aix_post_process_depfile () +{ + # If the compiler actually managed to produce a dependency file, + # post-process it. + if test -f "$tmpdepfile"; then + # Each line is of the form 'foo.o: dependency.h'. + # Do two passes, one to just change these to + # $object: dependency.h + # and one to simply output + # dependency.h: + # which is needed to avoid the deleted-header problem. + { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" + sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" + } > "$depfile" + rm -f "$tmpdepfile" + else + make_dummy_depfile + fi +} + +# A tabulation character. +tab=' ' +# A newline character. +nl=' +' +# Character ranges might be problematic outside the C locale. +# These definitions help. +upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ +lower=abcdefghijklmnopqrstuvwxyz +digits=0123456789 +alpha=${upper}${lower} + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Avoid interferences from the environment. +gccflag= dashmflag= + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvisualcpp +fi + +if test "$depmode" = msvc7msys; then + # This is just like msvc7 but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvc7 +fi + +if test "$depmode" = xlc; then + # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. + gccflag=-qmakedep=gcc,-MF + depmode=gcc +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. +## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. +## (see the conditional assignment to $gccflag above). +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). Also, it might not be +## supported by the other compilers which use the 'gcc' depmode. +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The second -e expression handles DOS-style file names with drive + # letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the "deleted header file" problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. +## Some versions of gcc put a space before the ':'. On the theory +## that the space means something, we add a space to the output as +## well. hp depmode also adds that space, but also prefixes the VPATH +## to the object. Take care to not repeat it in the output. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like '#:fec' to the end of the + # dependency line. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ + | tr "$nl" ' ' >> "$depfile" + echo >> "$depfile" + # The second pass generates a dummy entry for each header file. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" + ;; + +xlc) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts '$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + aix_post_process_depfile + ;; + +tcc) + # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 + # FIXME: That version still under development at the moment of writing. + # Make that this statement remains true also for stable, released + # versions. + # It will wrap lines (doesn't matter whether long or short) with a + # trailing '\', as in: + # + # foo.o : \ + # foo.c \ + # foo.h \ + # + # It will put a trailing '\' even on the last line, and will use leading + # spaces rather than leading tabs (at least since its commit 0394caf7 + # "Emit spaces for -MD"). + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. + # We have to change lines of the first kind to '$object: \'. + sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" + # And for each line of the second kind, we have to emit a 'dep.h:' + # dummy dependency, to avoid the deleted-header problem. + sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" + rm -f "$tmpdepfile" + ;; + +## The order of this option in the case statement is important, since the +## shell code in configure will try each of these formats in the order +## listed in this file. A plain '-MD' option would be understood by many +## compilers, so we must ensure this comes after the gcc and icc options. +pgcc) + # Portland's C compiler understands '-MD'. + # Will always output deps to 'file.d' where file is the root name of the + # source file under compilation, even if file resides in a subdirectory. + # The object file name does not affect the name of the '.d' file. + # pgcc 10.2 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using '\' : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + set_dir_from "$object" + # Use the source, not the object, to determine the base name, since + # that's sadly what pgcc will do too. + set_base_from "$source" + tmpdepfile=$base.d + + # For projects that build the same source file twice into different object + # files, the pgcc approach of using the *source* file root name can cause + # problems in parallel builds. Use a locking strategy to avoid stomping on + # the same $tmpdepfile. + lockdir=$base.d-lock + trap " + echo '$0: caught signal, cleaning up...' >&2 + rmdir '$lockdir' + exit 1 + " 1 2 13 15 + numtries=100 + i=$numtries + while test $i -gt 0; do + # mkdir is a portable test-and-set. + if mkdir "$lockdir" 2>/dev/null; then + # This process acquired the lock. + "$@" -MD + stat=$? + # Release the lock. + rmdir "$lockdir" + break + else + # If the lock is being held by a different process, wait + # until the winning process is done or we timeout. + while test -d "$lockdir" && test $i -gt 0; do + sleep 1 + i=`expr $i - 1` + done + fi + i=`expr $i - 1` + done + trap - 1 2 13 15 + if test $i -le 0; then + echo "$0: failed to acquire lock after $numtries attempts" >&2 + echo "$0: check lockdir '$lockdir'" >&2 + exit 1 + fi + + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" + # Add 'dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in 'foo.d' instead, so we check for that too. + # Subdirectories are respected. + set_dir_from "$object" + set_base_from "$object" + + if test "$libtool" = yes; then + # Libtool generates 2 separate objects for the 2 libraries. These + # two compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir$base.o.d # libtool 1.5 + tmpdepfile2=$dir.libs/$base.o.d # Likewise. + tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + # Same post-processing that is required for AIX mode. + aix_post_process_depfile + ;; + +msvc7) + if test "$libtool" = yes; then + showIncludes=-Wc,-showIncludes + else + showIncludes=-showIncludes + fi + "$@" $showIncludes > "$tmpdepfile" + stat=$? + grep -v '^Note: including file: ' "$tmpdepfile" + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The first sed program below extracts the file names and escapes + # backslashes for cygpath. The second sed program outputs the file + # name when reading, but also accumulates all include files in the + # hold buffer in order to output them again at the end. This only + # works with sed implementations that can handle large buffers. + sed < "$tmpdepfile" -n ' +/^Note: including file: *\(.*\)/ { + s//\1/ + s/\\/\\\\/g + p +}' | $cygpath_u | sort -u | sed -n ' +s/ /\\ /g +s/\(.*\)/'"$tab"'\1 \\/p +s/.\(.*\) \\/\1:/ +H +$ { + s/.*/'"$tab"'/ + G + p +}' >> "$depfile" + echo >> "$depfile" # make sure the fragment doesn't end with a backslash + rm -f "$tmpdepfile" + ;; + +msvc7msys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for ':' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. + "$@" $dashmflag | + sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this sed invocation + # correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no eat=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + if test $eat = yes; then + eat=no + continue + fi + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + # makedepend may prepend the VPATH from the source file name to the object. + # No need to regex-escape $object, excess matching of '.' is harmless. + sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process the last invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed '1,2d' "$tmpdepfile" \ + | tr ' ' "$nl" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E \ + | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + | sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" + echo "$tab" >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/libxc/install-sh b/libxc/install-sh new file mode 100755 index 000000000..377bb8687 --- /dev/null +++ b/libxc/install-sh @@ -0,0 +1,527 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2011-11-20.07; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# 'make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call 'install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + do_exit='(exit $ret); exit $ret' + trap "ret=129; $do_exit" 1 + trap "ret=130; $do_exit" 2 + trap "ret=141; $do_exit" 13 + trap "ret=143; $do_exit" 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names problematic for 'test' and other utilities. + case $src in + -* | [=\(\)!]) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + dst=$dst_arg + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test X"$d" = X && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/libxc/ltmain.sh b/libxc/ltmain.sh new file mode 100644 index 000000000..63ae69dc6 --- /dev/null +++ b/libxc/ltmain.sh @@ -0,0 +1,9655 @@ + +# libtool (GNU libtool) 2.4.2 +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, +# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, +# or obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Usage: $progname [OPTION]... [MODE-ARG]... +# +# Provide generalized library-building support services. +# +# --config show all configuration variables +# --debug enable verbose shell tracing +# -n, --dry-run display commands without modifying any files +# --features display basic configuration information and exit +# --mode=MODE use operation mode MODE +# --preserve-dup-deps don't remove duplicate dependency libraries +# --quiet, --silent don't print informational messages +# --no-quiet, --no-silent +# print informational messages (default) +# --no-warn don't display warning messages +# --tag=TAG use configuration variables from tag TAG +# -v, --verbose print more informational messages than default +# --no-verbose don't print the extra informational messages +# --version print version information +# -h, --help, --help-all print short, long, or detailed help message +# +# MODE must be one of the following: +# +# clean remove files from the build directory +# compile compile a source file into a libtool object +# execute automatically set library path, then run a program +# finish complete the installation of libtool libraries +# install install libraries or executables +# link create a library or an executable +# uninstall remove libraries from an installed directory +# +# MODE-ARGS vary depending on the MODE. When passed as first option, +# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. +# Try `$progname --help --mode=MODE' for a more detailed description of MODE. +# +# When reporting a bug, please describe a test case to reproduce it and +# include the following information: +# +# host-triplet: $host +# shell: $SHELL +# compiler: $LTCC +# compiler flags: $LTCFLAGS +# linker: $LD (gnu? $with_gnu_ld) +# $progname: (GNU libtool) 2.4.2 +# automake: $automake_version +# autoconf: $autoconf_version +# +# Report bugs to . +# GNU libtool home page: . +# General help using GNU software: . + +PROGRAM=libtool +PACKAGE=libtool +VERSION=2.4.2 +TIMESTAMP="" +package_revision=1.3337 + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# NLS nuisances: We save the old values to restore during execute mode. +lt_user_locale= +lt_safe_locale= +for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test \"\${$lt_var+set}\" = set; then + save_$lt_var=\$$lt_var + $lt_var=C + export $lt_var + lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" + lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" + fi" +done +LC_ALL=C +LANGUAGE=C +export LANGUAGE LC_ALL + +$lt_unset CDPATH + + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + + + +: ${CP="cp -f"} +test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} +: ${Xsed="$SED -e 1s/^X//"} + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +exit_status=$EXIT_SUCCESS + +# Make sure IFS has a sensible default +lt_nl=' +' +IFS=" $lt_nl" + +dirname="s,/[^/]*$,," +basename="s,^.*/,," + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} # func_dirname may be replaced by extended shell implementation + + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "${1}" | $SED "$basename"` +} # func_basename may be replaced by extended shell implementation + + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi + func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` +} # func_dirname_and_basename may be replaced by extended shell implementation + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname may be replaced by extended shell implementation + + +# These SED scripts presuppose an absolute path with a trailing slash. +pathcar='s,^/\([^/]*\).*$,\1,' +pathcdr='s,^/[^/]*,,' +removedotparts=':dotsl + s@/\./@/@g + t dotsl + s,/\.$,/,' +collapseslashes='s@/\{1,\}@/@g' +finalslash='s,/*$,/,' + +# func_normal_abspath PATH +# Remove doubled-up and trailing slashes, "." path components, +# and cancel out any ".." path components in PATH after making +# it an absolute path. +# value returned in "$func_normal_abspath_result" +func_normal_abspath () +{ + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in + "") + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return + ;; + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. + ;; + *) + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath + ;; + esac + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` + while :; do + # Processed it all yet? + if test "$func_normal_abspath_tpath" = / ; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result" ; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result +} + +# func_relative_path SRCDIR DSTDIR +# generates a relative path from SRCDIR to DSTDIR, with a trailing +# slash if non-empty, suitable for immediately appending a filename +# without needing to append a separator. +# value returned in "$func_relative_path_result" +func_relative_path () +{ + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=${func_dirname_result} + if test "x$func_relative_path_tlibdir" = x ; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test "x$func_stripname_result" != x ; then + func_relative_path_result=${func_relative_path_result}/${func_stripname_result} + fi + + # Normalisation. If bindir is libdir, return empty string, + # else relative path ending with a slash; either way, target + # file name can be directly appended. + if test ! -z "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result/" + func_relative_path_result=$func_stripname_result + fi +} + +# The name of this program: +func_dirname_and_basename "$progpath" +progname=$func_basename_result + +# Make sure we have an absolute path for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=$func_dirname_result + progdir=`cd "$progdir" && pwd` + progpath="$progdir/$progname" + ;; + *) + save_IFS="$IFS" + IFS=${PATH_SEPARATOR-:} + for progdir in $PATH; do + IFS="$save_IFS" + test -x "$progdir/$progname" && break + done + IFS="$save_IFS" + test -n "$progdir" || progdir=`pwd` + progpath="$progdir/$progname" + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed="${SED}"' -e 1s/^X//' +sed_quote_subst='s/\([`"$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution that turns a string into a regex matching for the +# string literally. +sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' + +# Sed substitution that converts a w32 file name or path +# which contains forward slashes, into one that contains +# (escaped) backslashes. A very naive implementation. +lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + +# Re-`\' parameter expansions in output of double_quote_subst that were +# `\'-ed in input to the same. If an odd number of `\' preceded a '$' +# in input to double_quote_subst, that '$' was protected from expansion. +# Since each input `\' is now two `\'s, look for any number of runs of +# four `\'s followed by two `\'s and then a '$'. `\' that '$'. +bs='\\' +bs2='\\\\' +bs4='\\\\\\\\' +dollar='\$' +sed_double_backslash="\ + s/$bs4/&\\ +/g + s/^$bs2$dollar/$bs&/ + s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g + s/\n//g" + +# Standard options: +opt_dry_run=false +opt_help=false +opt_quiet=false +opt_verbose=false +opt_warning=: + +# func_echo arg... +# Echo program name prefixed message, along with the current mode +# name if it has been set yet. +func_echo () +{ + $ECHO "$progname: ${opt_mode+$opt_mode: }$*" +} + +# func_verbose arg... +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $opt_verbose && func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +# func_error arg... +# Echo program name prefixed message to standard error. +func_error () +{ + $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 +} + +# func_warning arg... +# Echo program name prefixed warning message to standard error. +func_warning () +{ + $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 + + # bash bug again: + : +} + +# func_fatal_error arg... +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + +# func_fatal_help arg... +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + func_error ${1+"$@"} + func_fatal_error "$help" +} +help="Try \`$progname --help' for more information." ## default + + +# func_grep expression filename +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_mkdir_p directory-path +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + my_directory_path="$1" + my_dir_list= + + if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then + + # Protect directory names starting with `-' + case $my_directory_path in + -*) my_directory_path="./$my_directory_path" ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$my_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + my_dir_list="$my_directory_path:$my_dir_list" + + # If the last portion added has no slash in it, the list is done + case $my_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` + done + my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` + + save_mkdir_p_IFS="$IFS"; IFS=':' + for my_dir in $my_dir_list; do + IFS="$save_mkdir_p_IFS" + # mkdir can fail with a `File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$my_dir" 2>/dev/null || : + done + IFS="$save_mkdir_p_IFS" + + # Bail out if we (or some other process) failed to create a directory. + test -d "$my_directory_path" || \ + func_fatal_error "Failed to create \`$1'" + fi +} + + +# func_mktempdir [string] +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, STRING is the basename for that directory. +func_mktempdir () +{ + my_template="${TMPDIR-/tmp}/${1-$progname}" + + if test "$opt_dry_run" = ":"; then + # Return a directory name, but don't create it in dry-run mode + my_tmpdir="${my_template}-$$" + else + + # If mktemp works, use that first and foremost + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + + if test ! -d "$my_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" + + save_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$my_tmpdir" + umask $save_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$my_tmpdir" || \ + func_fatal_error "cannot create temporary directory \`$my_tmpdir'" + fi + + $ECHO "$my_tmpdir" +} + + +# func_quote_for_eval arg +# Aesthetically quote ARG to be evaled later. +# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT +# is double-quoted, suitable for a subsequent eval, whereas +# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters +# which are still active within double quotes backslashified. +func_quote_for_eval () +{ + case $1 in + *[\\\`\"\$]*) + func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; + *) + func_quote_for_eval_unquoted_result="$1" ;; + esac + + case $func_quote_for_eval_unquoted_result in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and and variable + # expansion for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" + ;; + *) + func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" + esac +} + + +# func_quote_for_expand arg +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + case $1 in + *[\\\`\"]*) + my_arg=`$ECHO "$1" | $SED \ + -e "$double_quote_subst" -e "$sed_double_backslash"` ;; + *) + my_arg="$1" ;; + esac + + case $my_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + my_arg="\"$my_arg\"" + ;; + esac + + func_quote_for_expand_result="$my_arg" +} + + +# func_show_eval cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$my_cmd" + my_status=$? + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + +# func_show_eval_locale cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$lt_user_locale + $my_cmd" + my_status=$? + eval "$lt_safe_locale" + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + +# func_tr_sh +# Turn $1 into a string suitable for a shell variable name. +# Result is stored in $func_tr_sh_result. All characters +# not in the set a-zA-Z0-9_ are replaced with '_'. Further, +# if $1 begins with a digit, a '_' is prepended as well. +func_tr_sh () +{ + case $1 in + [0-9]* | *[!a-zA-Z0-9_]*) + func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` + ;; + * ) + func_tr_sh_result=$1 + ;; + esac +} + + +# func_version +# Echo version message to standard output and exit. +func_version () +{ + $opt_debug + + $SED -n '/(C)/!b go + :more + /\./!{ + N + s/\n# / / + b more + } + :go + /^# '$PROGRAM' (GNU /,/# warranty; / { + s/^# // + s/^# *$// + s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ + p + }' < "$progpath" + exit $? +} + +# func_usage +# Echo short help message to standard output and exit. +func_usage () +{ + $opt_debug + + $SED -n '/^# Usage:/,/^# *.*--help/ { + s/^# // + s/^# *$// + s/\$progname/'$progname'/ + p + }' < "$progpath" + echo + $ECHO "run \`$progname --help | more' for full usage" + exit $? +} + +# func_help [NOEXIT] +# Echo long help message to standard output and exit, +# unless 'noexit' is passed as argument. +func_help () +{ + $opt_debug + + $SED -n '/^# Usage:/,/# Report bugs to/ { + :print + s/^# // + s/^# *$// + s*\$progname*'$progname'* + s*\$host*'"$host"'* + s*\$SHELL*'"$SHELL"'* + s*\$LTCC*'"$LTCC"'* + s*\$LTCFLAGS*'"$LTCFLAGS"'* + s*\$LD*'"$LD"'* + s/\$with_gnu_ld/'"$with_gnu_ld"'/ + s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ + s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ + p + d + } + /^# .* home page:/b print + /^# General help using/b print + ' < "$progpath" + ret=$? + if test -z "$1"; then + exit $ret + fi +} + +# func_missing_arg argname +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + $opt_debug + + func_error "missing argument for $1." + exit_cmd=exit +} + + +# func_split_short_opt shortopt +# Set func_split_short_opt_name and func_split_short_opt_arg shell +# variables after splitting SHORTOPT after the 2nd character. +func_split_short_opt () +{ + my_sed_short_opt='1s/^\(..\).*$/\1/;q' + my_sed_short_rest='1s/^..\(.*\)$/\1/;q' + + func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` + func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` +} # func_split_short_opt may be replaced by extended shell implementation + + +# func_split_long_opt longopt +# Set func_split_long_opt_name and func_split_long_opt_arg shell +# variables after splitting LONGOPT at the `=' sign. +func_split_long_opt () +{ + my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' + my_sed_long_arg='1s/^--[^=]*=//' + + func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` + func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` +} # func_split_long_opt may be replaced by extended shell implementation + +exit_cmd=: + + + + + +magic="%%%MAGIC variable%%%" +magic_exe="%%%MAGIC EXE variable%%%" + +# Global variables. +nonopt= +preserve_args= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" +extracted_archives= +extracted_serial=0 + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "${1}=\$${1}\${2}" +} # func_append may be replaced by extended shell implementation + +# func_append_quoted var value +# Quote VALUE and append to the end of shell variable VAR, separated +# by a space. +func_append_quoted () +{ + func_quote_for_eval "${2}" + eval "${1}=\$${1}\\ \$func_quote_for_eval_result" +} # func_append_quoted may be replaced by extended shell implementation + + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "${@}"` +} # func_arith may be replaced by extended shell implementation + + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` +} # func_len may be replaced by extended shell implementation + + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` +} # func_lo2o may be replaced by extended shell implementation + + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` +} # func_xform may be replaced by extended shell implementation + + +# func_fatal_configuration arg... +# Echo program name prefixed message to standard error, followed by +# a configuration failure hint, and exit. +func_fatal_configuration () +{ + func_error ${1+"$@"} + func_error "See the $PACKAGE documentation for more information." + func_fatal_error "Fatal configuration error." +} + + +# func_config +# Display the configuration for all the tags in this script. +func_config () +{ + re_begincf='^# ### BEGIN LIBTOOL' + re_endcf='^# ### END LIBTOOL' + + # Default configuration. + $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" + + # Now print the configurations for the tags. + for tagname in $taglist; do + $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" + done + + exit $? +} + +# func_features +# Display the features supported by this script. +func_features () +{ + echo "host: $host" + if test "$build_libtool_libs" = yes; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + + exit $? +} + +# func_enable_tag tagname +# Verify that TAGNAME is valid, and either flag an error and exit, or +# enable the TAGNAME tag. We also add TAGNAME to the global $taglist +# variable here. +func_enable_tag () +{ + # Global variable: + tagname="$1" + + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf="/$re_begincf/,/$re_endcf/p" + + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac + + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; + *) + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + +# func_check_version_match +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +# Shorthand for --mode=foo, only valid as the first argument +case $1 in +clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; +compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; +execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; +finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; +install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; +link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; +uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; +esac + + + +# Option defaults: +opt_debug=: +opt_dry_run=false +opt_config=false +opt_preserve_dup_deps=false +opt_features=false +opt_finish=false +opt_help=false +opt_help_all=false +opt_silent=: +opt_warning=: +opt_verbose=: +opt_silent=false +opt_verbose=false + + +# Parse options once, thoroughly. This comes as soon as possible in the +# script to make things like `--version' happen as quickly as we can. +{ + # this just eases exit handling + while test $# -gt 0; do + opt="$1" + shift + case $opt in + --debug|-x) opt_debug='set -x' + func_echo "enabling shell trace mode" + $opt_debug + ;; + --dry-run|--dryrun|-n) + opt_dry_run=: + ;; + --config) + opt_config=: +func_config + ;; + --dlopen|-dlopen) + optarg="$1" + opt_dlopen="${opt_dlopen+$opt_dlopen +}$optarg" + shift + ;; + --preserve-dup-deps) + opt_preserve_dup_deps=: + ;; + --features) + opt_features=: +func_features + ;; + --finish) + opt_finish=: +set dummy --mode finish ${1+"$@"}; shift + ;; + --help) + opt_help=: + ;; + --help-all) + opt_help_all=: +opt_help=': help-all' + ;; + --mode) + test $# = 0 && func_missing_arg $opt && break + optarg="$1" + opt_mode="$optarg" +case $optarg in + # Valid mode arguments: + clean|compile|execute|finish|install|link|relink|uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $opt" + exit_cmd=exit + break + ;; +esac + shift + ;; + --no-silent|--no-quiet) + opt_silent=false +func_append preserve_args " $opt" + ;; + --no-warning|--no-warn) + opt_warning=false +func_append preserve_args " $opt" + ;; + --no-verbose) + opt_verbose=false +func_append preserve_args " $opt" + ;; + --silent|--quiet) + opt_silent=: +func_append preserve_args " $opt" + opt_verbose=false + ;; + --verbose|-v) + opt_verbose=: +func_append preserve_args " $opt" +opt_silent=false + ;; + --tag) + test $# = 0 && func_missing_arg $opt && break + optarg="$1" + opt_tag="$optarg" +func_append preserve_args " $opt $optarg" +func_enable_tag "$optarg" + shift + ;; + + -\?|-h) func_usage ;; + --help) func_help ;; + --version) func_version ;; + + # Separate optargs to long options: + --*=*) + func_split_long_opt "$opt" + set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} + shift + ;; + + # Separate non-argument short options: + -\?*|-h*|-n*|-v*) + func_split_short_opt "$opt" + set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + --) break ;; + -*) func_fatal_help "unrecognized option \`$opt'" ;; + *) set dummy "$opt" ${1+"$@"}; shift; break ;; + esac + done + + # Validate options: + + # save first non-option argument + if test "$#" -gt 0; then + nonopt="$opt" + shift + fi + + # preserve --debug + test "$opt_debug" = : || func_append preserve_args " --debug" + + case $host in + *cygwin* | *mingw* | *pw32* | *cegcc*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps + ;; + esac + + $opt_help || { + # Sanity checks first: + func_check_version_match + + if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + func_fatal_configuration "not configured to build any kind of library" + fi + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$opt_dlopen" && test "$opt_mode" != execute; then + func_error "unrecognized option \`-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$progname --help --mode=$opt_mode' for more information." + } + + + # Bail if the options were screwed + $exit_cmd $EXIT_FAILURE +} + + + + +## ----------- ## +## Main. ## +## ----------- ## + +# func_lalib_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null \ + | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if `file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case "$lalib_p_line" in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test "$lalib_p" = yes +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + func_lalib_p "$1" +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $opt_debug + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$save_ifs + eval cmd=\"$cmd\" + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# `FILE.' does not work on cygwin managed mounts. +func_source () +{ + $opt_debug + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_resolve_sysroot PATH +# Replace a leading = in PATH with a sysroot. Store the result into +# func_resolve_sysroot_result +func_resolve_sysroot () +{ + func_resolve_sysroot_result=$1 + case $func_resolve_sysroot_result in + =*) + func_stripname '=' '' "$func_resolve_sysroot_result" + func_resolve_sysroot_result=$lt_sysroot$func_stripname_result + ;; + esac +} + +# func_replace_sysroot PATH +# If PATH begins with the sysroot, replace it with = and +# store the result into func_replace_sysroot_result. +func_replace_sysroot () +{ + case "$lt_sysroot:$1" in + ?*:"$lt_sysroot"*) + func_stripname "$lt_sysroot" '' "$1" + func_replace_sysroot_result="=$func_stripname_result" + ;; + *) + # Including no sysroot. + func_replace_sysroot_result=$1 + ;; + esac +} + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $opt_debug + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case "$@ " in + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with \`--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=${1} + if test "$build_libtool_libs" = yes; then + write_lobj=\'${2}\' + else + write_lobj=none + fi + + if test "$build_old_libs" = yes; then + write_oldobj=\'${3}\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T </dev/null` + if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then + func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | + $SED -e "$lt_sed_naive_backslashify"` + else + func_convert_core_file_wine_to_w32_result= + fi + fi +} +# end: func_convert_core_file_wine_to_w32 + + +# func_convert_core_path_wine_to_w32 ARG +# Helper function used by path conversion functions when $build is *nix, and +# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly +# configured wine environment available, with the winepath program in $build's +# $PATH. Assumes ARG has no leading or trailing path separator characters. +# +# ARG is path to be converted from $build format to win32. +# Result is available in $func_convert_core_path_wine_to_w32_result. +# Unconvertible file (directory) names in ARG are skipped; if no directory names +# are convertible, then the result may be empty. +func_convert_core_path_wine_to_w32 () +{ + $opt_debug + # unfortunately, winepath doesn't convert paths, only file names + func_convert_core_path_wine_to_w32_result="" + if test -n "$1"; then + oldIFS=$IFS + IFS=: + for func_convert_core_path_wine_to_w32_f in $1; do + IFS=$oldIFS + func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" + if test -n "$func_convert_core_file_wine_to_w32_result" ; then + if test -z "$func_convert_core_path_wine_to_w32_result"; then + func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" + else + func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" + fi + fi + done + IFS=$oldIFS + fi +} +# end: func_convert_core_path_wine_to_w32 + + +# func_cygpath ARGS... +# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when +# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) +# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or +# (2), returns the Cygwin file name or path in func_cygpath_result (input +# file name or path is assumed to be in w32 format, as previously converted +# from $build's *nix or MSYS format). In case (3), returns the w32 file name +# or path in func_cygpath_result (input file name or path is assumed to be in +# Cygwin format). Returns an empty string on error. +# +# ARGS are passed to cygpath, with the last one being the file name or path to +# be converted. +# +# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH +# environment variable; do not put it in $PATH. +func_cygpath () +{ + $opt_debug + if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then + func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` + if test "$?" -ne 0; then + # on failure, ensure result is empty + func_cygpath_result= + fi + else + func_cygpath_result= + func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" + fi +} +#end: func_cygpath + + +# func_convert_core_msys_to_w32 ARG +# Convert file name or path ARG from MSYS format to w32 format. Return +# result in func_convert_core_msys_to_w32_result. +func_convert_core_msys_to_w32 () +{ + $opt_debug + # awkward: cmd appends spaces to result + func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` +} +#end: func_convert_core_msys_to_w32 + + +# func_convert_file_check ARG1 ARG2 +# Verify that ARG1 (a file name in $build format) was converted to $host +# format in ARG2. Otherwise, emit an error message, but continue (resetting +# func_to_host_file_result to ARG1). +func_convert_file_check () +{ + $opt_debug + if test -z "$2" && test -n "$1" ; then + func_error "Could not determine host file name corresponding to" + func_error " \`$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_file_result="$1" + fi +} +# end func_convert_file_check + + +# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH +# Verify that FROM_PATH (a path in $build format) was converted to $host +# format in TO_PATH. Otherwise, emit an error message, but continue, resetting +# func_to_host_file_result to a simplistic fallback value (see below). +func_convert_path_check () +{ + $opt_debug + if test -z "$4" && test -n "$3"; then + func_error "Could not determine the host path corresponding to" + func_error " \`$3'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This is a deliberately simplistic "conversion" and + # should not be "improved". See libtool.info. + if test "x$1" != "x$2"; then + lt_replace_pathsep_chars="s|$1|$2|g" + func_to_host_path_result=`echo "$3" | + $SED -e "$lt_replace_pathsep_chars"` + else + func_to_host_path_result="$3" + fi + fi +} +# end func_convert_path_check + + +# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG +# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT +# and appending REPL if ORIG matches BACKPAT. +func_convert_path_front_back_pathsep () +{ + $opt_debug + case $4 in + $1 ) func_to_host_path_result="$3$func_to_host_path_result" + ;; + esac + case $4 in + $2 ) func_append func_to_host_path_result "$3" + ;; + esac +} +# end func_convert_path_front_back_pathsep + + +################################################## +# $build to $host FILE NAME CONVERSION FUNCTIONS # +################################################## +# invoked via `$to_host_file_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# Result will be available in $func_to_host_file_result. + + +# func_to_host_file ARG +# Converts the file name ARG from $build format to $host format. Return result +# in func_to_host_file_result. +func_to_host_file () +{ + $opt_debug + $to_host_file_cmd "$1" +} +# end func_to_host_file + + +# func_to_tool_file ARG LAZY +# converts the file name ARG from $build format to toolchain format. Return +# result in func_to_tool_file_result. If the conversion in use is listed +# in (the comma separated) LAZY, no conversion takes place. +func_to_tool_file () +{ + $opt_debug + case ,$2, in + *,"$to_tool_file_cmd",*) + func_to_tool_file_result=$1 + ;; + *) + $to_tool_file_cmd "$1" + func_to_tool_file_result=$func_to_host_file_result + ;; + esac +} +# end func_to_tool_file + + +# func_convert_file_noop ARG +# Copy ARG to func_to_host_file_result. +func_convert_file_noop () +{ + func_to_host_file_result="$1" +} +# end func_convert_file_noop + + +# func_convert_file_msys_to_w32 ARG +# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_file_result. +func_convert_file_msys_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_to_host_file_result="$func_convert_core_msys_to_w32_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_w32 + + +# func_convert_file_cygwin_to_w32 ARG +# Convert file name ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_file_cygwin_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + # because $build is cygwin, we call "the" cygpath in $PATH; no need to use + # LT_CYGPATH in this case. + func_to_host_file_result=`cygpath -m "$1"` + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_cygwin_to_w32 + + +# func_convert_file_nix_to_w32 ARG +# Convert file name ARG from *nix to w32 format. Requires a wine environment +# and a working winepath. Returns result in func_to_host_file_result. +func_convert_file_nix_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_file_wine_to_w32 "$1" + func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_w32 + + +# func_convert_file_msys_to_cygwin ARG +# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_file_msys_to_cygwin () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_cygpath -u "$func_convert_core_msys_to_w32_result" + func_to_host_file_result="$func_cygpath_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_cygwin + + +# func_convert_file_nix_to_cygwin ARG +# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed +# in a wine environment, working winepath, and LT_CYGPATH set. Returns result +# in func_to_host_file_result. +func_convert_file_nix_to_cygwin () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. + func_convert_core_file_wine_to_w32 "$1" + func_cygpath -u "$func_convert_core_file_wine_to_w32_result" + func_to_host_file_result="$func_cygpath_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_cygwin + + +############################################# +# $build to $host PATH CONVERSION FUNCTIONS # +############################################# +# invoked via `$to_host_path_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# The result will be available in $func_to_host_path_result. +# +# Path separators are also converted from $build format to $host format. If +# ARG begins or ends with a path separator character, it is preserved (but +# converted to $host format) on output. +# +# All path conversion functions are named using the following convention: +# file name conversion function : func_convert_file_X_to_Y () +# path conversion function : func_convert_path_X_to_Y () +# where, for any given $build/$host combination the 'X_to_Y' value is the +# same. If conversion functions are added for new $build/$host combinations, +# the two new functions must follow this pattern, or func_init_to_host_path_cmd +# will break. + + +# func_init_to_host_path_cmd +# Ensures that function "pointer" variable $to_host_path_cmd is set to the +# appropriate value, based on the value of $to_host_file_cmd. +to_host_path_cmd= +func_init_to_host_path_cmd () +{ + $opt_debug + if test -z "$to_host_path_cmd"; then + func_stripname 'func_convert_file_' '' "$to_host_file_cmd" + to_host_path_cmd="func_convert_path_${func_stripname_result}" + fi +} + + +# func_to_host_path ARG +# Converts the path ARG from $build format to $host format. Return result +# in func_to_host_path_result. +func_to_host_path () +{ + $opt_debug + func_init_to_host_path_cmd + $to_host_path_cmd "$1" +} +# end func_to_host_path + + +# func_convert_path_noop ARG +# Copy ARG to func_to_host_path_result. +func_convert_path_noop () +{ + func_to_host_path_result="$1" +} +# end func_convert_path_noop + + +# func_convert_path_msys_to_w32 ARG +# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_path_result. +func_convert_path_msys_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # Remove leading and trailing path separator characters from ARG. MSYS + # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; + # and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result="$func_convert_core_msys_to_w32_result" + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_msys_to_w32 + + +# func_convert_path_cygwin_to_w32 ARG +# Convert path ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_path_cygwin_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_cygwin_to_w32 + + +# func_convert_path_nix_to_w32 ARG +# Convert path ARG from *nix to w32 format. Requires a wine environment and +# a working winepath. Returns result in func_to_host_file_result. +func_convert_path_nix_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_nix_to_w32 + + +# func_convert_path_msys_to_cygwin ARG +# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_path_msys_to_cygwin () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_msys_to_w32_result" + func_to_host_path_result="$func_cygpath_result" + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_msys_to_cygwin + + +# func_convert_path_nix_to_cygwin ARG +# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a +# a wine environment, working winepath, and LT_CYGPATH set. Returns result in +# func_to_host_file_result. +func_convert_path_nix_to_cygwin () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" + func_to_host_path_result="$func_cygpath_result" + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_nix_to_cygwin + + +# func_mode_compile arg... +func_mode_compile () +{ + $opt_debug + # Get the compilation command and the source file. + base_compile= + srcfile="$nonopt" # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + pie_flag= + + for arg + do + case $arg_mode in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg="$arg" + arg_mode=normal + ;; + + target ) + libobj="$arg" + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + test -n "$libobj" && \ + func_fatal_error "you cannot specify \`-o' more than once" + arg_mode=target + continue + ;; + + -pie | -fpie | -fPIE) + func_append pie_flag " $arg" + continue + ;; + + -shared | -static | -prefer-pic | -prefer-non-pic) + func_append later " $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + lastarg= + save_ifs="$IFS"; IFS=',' + for arg in $args; do + IFS="$save_ifs" + func_append_quoted lastarg "$arg" + done + IFS="$save_ifs" + func_stripname ' ' '' "$lastarg" + lastarg=$func_stripname_result + + # Add the arguments to base_compile. + func_append base_compile " $lastarg" + continue + ;; + + *) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg="$srcfile" + srcfile="$arg" + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + func_append_quoted base_compile "$lastarg" + done # for arg + + case $arg_mode in + arg) + func_fatal_error "you must specify an argument for -Xcompile" + ;; + target) + func_fatal_error "you must specify a target with \`-o'" + ;; + *) + # Get the name of the library object. + test -z "$libobj" && { + func_basename "$srcfile" + libobj="$func_basename_result" + } + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + case $libobj in + *.[cCFSifmso] | \ + *.ada | *.adb | *.ads | *.asm | \ + *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ + *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) + func_xform "$libobj" + libobj=$func_xform_result + ;; + esac + + case $libobj in + *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; + *) + func_fatal_error "cannot determine name of library object from \`$libobj'" + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + continue + ;; + + -static) + build_libtool_libs=no + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + func_quote_for_eval "$libobj" + test "X$libobj" != "X$func_quote_for_eval_result" \ + && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ + && func_warning "libobj name \`$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname="$func_basename_result" + xdir="$func_dirname_result" + lobj=${xdir}$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + func_append removelist " $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + func_append removelist " $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 + srcfile=$func_to_tool_file_result + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test "$pic_mode" != no; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + func_append command " -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test "$suppress_opt" = yes; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + if test "$pic_mode" != yes; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test "$compiler_c_o" = yes; then + func_append command " -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + func_append command "$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { + test "$opt_mode" = compile && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $opt_mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to build PIC objects only + -prefer-non-pic try to build non-PIC objects only + -shared do not build a \`.o' file suitable for static linking + -static only build a \`.o' file suitable for static linking + -Wc,FLAG pass FLAG directly to the compiler + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -bindir BINDIR specify path to binaries directory (for systems where + libraries must be found in the PATH setting at runtime) + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + -Wc,FLAG + -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wl,FLAG + -Xlinker FLAG pass linker-specific FLAG directly to the linker + -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode \`$opt_mode'" + ;; + esac + + echo + $ECHO "Try \`$progname --help' for more information about other modes." +} + +# Now that we've collected a possible --mode arg, show help if necessary +if $opt_help; then + if test "$opt_help" = :; then + func_mode_help + else + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + func_mode_help + done + } | sed -n '1p; 2,$s/^Usage:/ or: /p' + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + echo + func_mode_help + done + } | + sed '1d + /^When reporting/,/^Report/{ + H + d + } + $x + /information about other modes/d + /more detailed .*MODE/d + s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' + fi + exit $? +fi + + +# func_mode_execute arg... +func_mode_execute () +{ + $opt_debug + # The first argument is the command name. + cmd="$nonopt" + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $opt_dlopen; do + test -f "$file" \ + || func_fatal_help "\`$file' is not a file" + + dir= + case $file in + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "\`$file' was not linked with \`-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir="$func_dirname_result" + + if test -f "$dir/$objdir/$dlname"; then + func_append dir "/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir="$func_dirname_result" + ;; + + *) + func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -* | *.la | *.lo ) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file="$progdir/$program" + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_append_quoted args "$file" + done + + if test "X$opt_dry_run" = Xfalse; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + fi +} + +test "$opt_mode" = execute && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $opt_debug + libs= + libdirs= + admincmds= + + for opt in "$nonopt" ${1+"$@"} + do + if test -d "$opt"; then + func_append libdirs " $opt" + + elif test -f "$opt"; then + if func_lalib_unsafe_p "$opt"; then + func_append libs " $opt" + else + func_warning "\`$opt' is not a valid libtool archive" + fi + + else + func_fatal_error "invalid argument \`$opt'" + fi + done + + if test -n "$libs"; then + if test -n "$lt_sysroot"; then + sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` + sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" + else + sysroot_cmd= + fi + + # Remove sysroot references + if $opt_dry_run; then + for lib in $libs; do + echo "removing references to $lt_sysroot and \`=' prefixes from $lib" + done + else + tmpdir=`func_mktempdir` + for lib in $libs; do + sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ + > $tmpdir/tmp-la + mv -f $tmpdir/tmp-la $lib + done + ${RM}r "$tmpdir" + fi + fi + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || func_append admincmds " + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_silent && exit $EXIT_SUCCESS + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + echo + + echo "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" + echo "pages." + ;; + *) + echo "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + echo "----------------------------------------------------------------------" + fi + exit $EXIT_SUCCESS +} + +test "$opt_mode" = finish && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $opt_debug + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + case $nonopt in *shtool*) :;; *) false;; esac; then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + func_append install_prog "$func_quote_for_eval_result" + install_shared_prog=$install_prog + case " $install_prog " in + *[\\\ /]cp\ *) install_cp=: ;; + *) install_cp=false ;; + esac + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + no_mode=: + for arg + do + arg2= + if test -n "$dest"; then + func_append files " $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) + if $install_cp; then :; else + prev=$arg + fi + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + if test "x$prev" = x-m && test -n "$install_override_mode"; then + arg2=$install_override_mode + no_mode=false + fi + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + func_append install_prog " $func_quote_for_eval_result" + if test -n "$arg2"; then + func_quote_for_eval "$arg2" + fi + func_append install_shared_prog " $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the \`$prev' option requires an argument" + + if test -n "$install_override_mode" && $no_mode; then + if $install_cp; then :; else + func_quote_for_eval "$install_override_mode" + func_append install_shared_prog " -m $func_quote_for_eval_result" + fi + fi + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir="$func_dirname_result" + destname="$func_basename_result" + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "\`$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "\`$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + func_append staticlibs " $file" + ;; + + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) func_append current_libdirs " $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) func_append future_libdirs " $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir="$func_dirname_result" + func_append dir "$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking \`$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname="$1" + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme="$stripme" + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme="" + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try `ln -sf' first, because the `ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name="$func_basename_result" + instname="$dir/$name"i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && func_append staticlibs " $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to \`$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script \`$wrapper'" + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "\`$lib' has not been installed in \`$libdir'" + finalize=no + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + $opt_dry_run || { + if test "$finalize" = yes; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file="$func_basename_result" + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_silent || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink \`$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file="$outputname" + else + func_warning "cannot relink \`$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name="$func_basename_result" + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $tool_oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run \`$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test "$opt_mode" = install && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $opt_debug + my_outputname="$1" + my_originator="$2" + my_pic_p="${3-no}" + my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms="${my_outputname}S.c" + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${my_outputname}.nm" + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" +#endif + +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + func_verbose "generating symbol list for \`$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_to_tool_file "$progfile" func_convert_file_msys_to_w32 + func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" + $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$outputname.exp" + $opt_dry_run || { + $RM $export_symbols + eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from \`$dlprefile'" + func_basename "$dlprefile" + name="$func_basename_result" + case $host in + *cygwin* | *mingw* | *cegcc* ) + # if an import library, we need to obtain dlname + if func_win32_import_lib_p "$dlprefile"; then + func_tr_sh "$dlprefile" + eval "curr_lafile=\$libfile_$func_tr_sh_result" + dlprefile_dlbasename="" + if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then + # Use subshell, to avoid clobbering current variable values + dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` + if test -n "$dlprefile_dlname" ; then + func_basename "$dlprefile_dlname" + dlprefile_dlbasename="$func_basename_result" + else + # no lafile. user explicitly requested -dlpreopen . + $sharedlib_from_linklib_cmd "$dlprefile" + dlprefile_dlbasename=$sharedlib_from_linklib_result + fi + fi + $opt_dry_run || { + if test -n "$dlprefile_dlbasename" ; then + eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' + else + func_warning "Could not compute DLL name from $name" + eval '$ECHO ": $name " >> "$nlist"' + fi + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | + $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" + } + else # not an import lib + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + fi + ;; + *) + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + ;; + esac + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + echo >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +extern LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[]; +LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{\ + { \"$my_originator\", (void *) 0 }," + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + echo >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + if test "X$my_pic_p" != Xno; then + pic_flag_for_symtable=" $pic_flag" + fi + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) func_append symtab_cflags " $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' + + # Transform the symbol file into the correct name. + symfileobj="$output_objdir/${my_outputname}S.$objext" + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for \`$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` + fi +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +# Despite the name, also deal with 64 bit binaries. +func_win32_libid () +{ + $opt_debug + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + func_to_tool_file "$1" func_convert_file_msys_to_w32 + win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | + $SED -n -e ' + 1,100{ + / I /{ + s,.*,import, + p + q + } + }'` + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + +# func_cygming_dll_for_implib ARG +# +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib () +{ + $opt_debug + sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` +} + +# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs +# +# The is the core of a fallback implementation of a +# platform-specific function to extract the name of the +# DLL associated with the specified import library LIBNAME. +# +# SECTION_NAME is either .idata$6 or .idata$7, depending +# on the platform and compiler that created the implib. +# +# Echos the name of the DLL associated with the +# specified import library. +func_cygming_dll_for_implib_fallback_core () +{ + $opt_debug + match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` + $OBJDUMP -s --section "$1" "$2" 2>/dev/null | + $SED '/^Contents of section '"$match_literal"':/{ + # Place marker at beginning of archive member dllname section + s/.*/====MARK====/ + p + d + } + # These lines can sometimes be longer than 43 characters, but + # are always uninteresting + /:[ ]*file format pe[i]\{,1\}-/d + /^In archive [^:]*:/d + # Ensure marker is printed + /^====MARK====/p + # Remove all lines with less than 43 characters + /^.\{43\}/!d + # From remaining lines, remove first 43 characters + s/^.\{43\}//' | + $SED -n ' + # Join marker and all lines until next marker into a single line + /^====MARK====/ b para + H + $ b para + b + :para + x + s/\n//g + # Remove the marker + s/^====MARK====// + # Remove trailing dots and whitespace + s/[\. \t]*$// + # Print + /./p' | + # we now have a list, one entry per line, of the stringified + # contents of the appropriate section of all members of the + # archive which possess that section. Heuristic: eliminate + # all those which have a first or second character that is + # a '.' (that is, objdump's representation of an unprintable + # character.) This should work for all archives with less than + # 0x302f exports -- but will fail for DLLs whose name actually + # begins with a literal '.' or a single character followed by + # a '.'. + # + # Of those that remain, print the first one. + $SED -e '/^\./d;/^.\./d;q' +} + +# func_cygming_gnu_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is a GNU/binutils-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_gnu_implib_p () +{ + $opt_debug + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` + test -n "$func_cygming_gnu_implib_tmp" +} + +# func_cygming_ms_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is an MS-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_ms_implib_p () +{ + $opt_debug + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` + test -n "$func_cygming_ms_implib_tmp" +} + +# func_cygming_dll_for_implib_fallback ARG +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# +# This fallback implementation is for use when $DLLTOOL +# does not support the --identify-strict option. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib_fallback () +{ + $opt_debug + if func_cygming_gnu_implib_p "$1" ; then + # binutils import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` + elif func_cygming_ms_implib_p "$1" ; then + # ms-generated import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` + else + # unknown + sharedlib_from_linklib_result="" + fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $opt_debug + f_ex_an_ar_dir="$1"; shift + f_ex_an_ar_oldlib="$1" + if test "$lock_old_archive_extraction" = yes; then + lockfile=$f_ex_an_ar_oldlib.lock + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + fi + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ + 'stat=$?; rm -f "$lockfile"; exit $stat' + if test "$lock_old_archive_extraction" = yes; then + $opt_dry_run || rm -f "$lockfile" + fi + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $opt_debug + my_gentop="$1"; shift + my_oldlibs=${1+"$@"} + my_oldobjs="" + my_xlib="" + my_xabs="" + my_xdir="" + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib="$func_basename_result" + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir="$my_gentop/$my_xlib_u" + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + darwin_base_archive=`basename "$darwin_archive"` + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches ; do + func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" + $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" + cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" + func_extract_an_archive "`pwd`" "${darwin_base_archive}" + cd "$darwin_curdir" + $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` + done + + func_extract_archives_result="$my_oldobjs" +} + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory in which it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=${1-no} + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + file=\"\$0\"" + + qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` + $ECHO "\ + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + ECHO=\"$qECHO\" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ which is used only on +# windows platforms, and (c) all begin with the string "--lt-" +# (application programs are unlikely to have options which match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's $0 value, followed by "$@". +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=\$0 + shift + for lt_opt + do + case \"\$lt_opt\" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` + test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. + lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` + cat \"\$lt_dump_D/\$lt_dump_F\" + exit 0 + ;; + --lt-*) + \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n \"\$lt_option_debug\"; then + echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" + lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from \$@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + case \" \$* \" in + *\\ --lt-*) + for lt_wr_arg + do + case \$lt_wr_arg in + --lt-*) ;; + *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; + esac + shift + done ;; + esac + func_exec_program_core \${1+\"\$@\"} +} + + # Parse options + func_parse_lt_options \"\$0\" \${1+\"\$@\"} + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # fixup the dll searchpath if we need to. + # + # Fix the DLL searchpath if we need to. Do this before prepending + # to shlibpath, because on Windows, both are PATH and uninstalled + # libraries must come first. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` + + export $shlibpath_var +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + func_exec_program \${1+\"\$@\"} + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} + + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +#else +# include +# include +# ifdef __CYGWIN__ +# include +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +/* declarations of non-ANSI functions */ +#if defined(__MINGW32__) +# ifdef __STRICT_ANSI__ +int _putenv (const char *); +# endif +#elif defined(__CYGWIN__) +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +/* #elif defined (other platforms) ... */ +#endif + +/* portability defines, excluding path handling macros */ +#if defined(_MSC_VER) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +# define S_IXUSR _S_IEXEC +# ifndef _INTPTR_T_DEFINED +# define _INTPTR_T_DEFINED +# define intptr_t int +# endif +#elif defined(__MINGW32__) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +#elif defined(__CYGWIN__) +# define HAVE_SETENV +# define FOPEN_WB "wb" +/* #elif defined (other platforms) ... */ +#endif + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +/* path handling portability macros */ +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +#if defined(LT_DEBUGWRAPPER) +static int lt_debug = 1; +#else +static int lt_debug = 0; +#endif + +const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_debugprintf (const char *file, int line, const char *fmt, ...); +void lt_fatal (const char *file, int line, const char *message, ...); +static const char *nonnull (const char *s); +static const char *nonempty (const char *s); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); +void lt_dump_script (FILE *f); +EOF + + cat <= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + int tmp_len; + char *concat_name; + + lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", + nonempty (wrapper)); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = q - p; + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + lt_debugprintf (__FILE__, __LINE__, + "checking path component for symlinks: %s\n", + tmp_pathspec); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + lt_fatal (__FILE__, __LINE__, + "error accessing file \"%s\": %s", + tmp_pathspec, nonnull (strerror (errno))); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal (__FILE__, __LINE__, + "could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp (str, pat) == 0) + *str = '\0'; + } + return str; +} + +void +lt_debugprintf (const char *file, int line, const char *fmt, ...) +{ + va_list args; + if (lt_debug) + { + (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); + } +} + +static void +lt_error_core (int exit_status, const char *file, + int line, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *file, int line, const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); + va_end (ap); +} + +static const char * +nonnull (const char *s) +{ + return s ? s : "(null)"; +} + +static const char * +nonempty (const char *s) +{ + return (s && !*s) ? "(empty)" : nonnull (s); +} + +void +lt_setenv (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_setenv) setting '%s' to '%s'\n", + nonnull (name), nonnull (value)); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + int len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + int orig_value_len = strlen (orig_value); + int add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + int len = strlen (new_value); + while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[len-1] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +EOF + case $host_os in + mingw*) + cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Win32 CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XMALLOC (char *, argc + 1); + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = XMALLOC (char, length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} +EOF + ;; + esac + + cat <<"EOF" +void lt_dump_script (FILE* f) +{ +EOF + func_emit_wrapper yes | + $SED -n -e ' +s/^\(.\{79\}\)\(..*\)/\1\ +\2/ +h +s/\([\\"]\)/\\\1/g +s/$/\\n/ +s/\([^\n]*\).*/ fputs ("\1", f);/p +g +D' + cat <<"EOF" +} +EOF +} +# end: func_emit_cwrapperexe_src + +# func_win32_import_lib_p ARG +# True if ARG is an import lib, as indicated by $file_magic_cmd +func_win32_import_lib_p () +{ + $opt_debug + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in + *import*) : ;; + *) false ;; + esac +} + +# func_mode_link arg... +func_mode_link () +{ + $opt_debug + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # which system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll which has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + bindir= + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=no + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module="${wl}-single_module" + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + bindir) + bindir="$arg" + prev= + continue + ;; + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + func_append dlfiles " $arg" + else + func_append dlprefiles " $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + test -f "$arg" \ + || func_fatal_error "symbol file \`$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) func_append deplibs " $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# func_append moreargs " $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file \`$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) func_append rpath " $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) func_append xrpath " $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + weak) + func_append weak_libs " $arg" + prev= + continue + ;; + xcclinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "\`-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -bindir) + prev=bindir + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname "-L" '' "$arg" + if test -z "$func_stripname_result"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between \`-L' and \`$1'" + else + func_fatal_error "need path for \`-L' option" + fi + fi + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of \`$dir'" + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "* | *" $arg "*) + # Will only happen for absolute or sysroot arguments + ;; + *) + # Preserve sysroot, but never include relative directories + case $dir in + [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; + *) func_append deplibs " -L$dir" ;; + esac + func_append lib_search_path " $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) func_append dllsearchpath ":$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + func_append deplibs " System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test "X$arg" = "X-lc" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test "X$arg" = "X-lc" && continue + ;; + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + func_append deplibs " $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot|--sysroot) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) func_append new_inherited_linker_flags " $arg" ;; + esac + continue + ;; + + -multi_module) + single_module="${wl}-multi_module" + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "\`-no-install' is ignored for $host" + func_warning "assuming \`-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + =*) + func_stripname '=' '' "$dir" + dir=$lt_sysroot$func_stripname_result + ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + func_append arg " $func_quote_for_eval_result" + func_append compiler_flags " $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + func_append arg " $wl$func_quote_for_eval_result" + func_append compiler_flags " $wl$func_quote_for_eval_result" + func_append linker_flags " $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + # Flags to be passed through unchanged, with rationale: + # -64, -mips[0-9] enable 64-bit mode for the SGI compiler + # -r[0-9][0-9]* specify processor for the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler + # +DA*, +DD* enable 64-bit mode for the HP compiler + # -q* compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* architecture-specific flags for GCC + # -F/path path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # @file GCC response files + # -tp=* Portland pgcc target processor selection + # --sysroot=* for sysroot support + # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ + -O*|-flto*|-fwhopr*|-fuse-linker-plugin) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + func_append compile_command " $arg" + func_append finalize_command " $arg" + func_append compiler_flags " $arg" + continue + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + *.$objext) + # A standard object. + func_append objs " $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + func_append deplibs " $arg" + func_append old_deplibs " $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + func_resolve_sysroot "$arg" + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + func_append dlfiles " $func_resolve_sysroot_result" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + func_append dlprefiles " $func_resolve_sysroot_result" + prev= + else + func_append deplibs " $func_resolve_sysroot_result" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the \`$prevarg' option requires an argument" + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname="$func_basename_result" + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + func_dirname "$output" "/" "" + output_objdir="$func_dirname_result$objdir" + func_to_tool_file "$output_objdir/" + tool_output_objdir=$func_to_tool_file_result + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_preserve_dup_deps ; then + case "$libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append libs " $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; + esac + func_append pre_post_deps " $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test "$linkmode,$pass" = "lib,link"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs="$tmp_deplibs" + fi + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + esac + fi + if test "$linkmode,$pass" = "lib,dlpreopen"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + func_resolve_sysroot "$lib" + case $lib in + *.la) func_source "$func_resolve_sysroot_result" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + func_basename "$deplib" + deplib_base=$func_basename_result + case " $weak_libs " in + *" $deplib_base "*) ;; + *) func_append deplibs " $deplib" ;; + esac + done + done + libs="$dlprefiles" + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append compiler_flags " $deplib" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + func_warning "\`-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test "$linkmode" = lib; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + *.ltframework) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + *) + func_warning "\`-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + func_stripname '-R' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) + func_resolve_sysroot "$deplib" + lib=$func_resolve_sysroot_result + ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=no + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=yes + fi + ;; + pass_all) + valid_a_lib=yes + ;; + esac + if test "$valid_a_lib" != yes; then + echo + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not use here." + else + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + ;; + esac + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + func_append newdlprefiles " $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append newdlfiles " $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + + if test "$found" = yes || test -f "$lib"; then : + else + func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" + fi + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "\`$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && func_append dlfiles " $dlopen" + test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + # It is a libtool convenience library, so add in its objects. + func_append convenience " $ladir/$objdir/$old_library" + func_append old_convenience " $ladir/$objdir/$old_library" + elif test "$linkmode" != prog && test "$linkmode" != lib; then + func_fatal_error "\`$lib' is not a convenience library" + fi + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + if test -n "$old_library" && + { test "$prefer_static_libs" = yes || + test "$prefer_static_libs,$installed" = "built,no"; }; then + linklib=$old_library + else + for l in $old_library $library_names; do + linklib="$l" + done + fi + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + func_fatal_error "cannot -dlopen a convenience library: \`$lib'" + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + func_append dlprefiles " $lib $dependency_libs" + else + func_append newdlfiles " $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of \`$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir="$ladir" + fi + ;; + esac + func_basename "$lib" + laname="$func_basename_result" + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library \`$lib' was moved." + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$lt_sysroot$libdir" + absdir="$lt_sysroot$libdir" + fi + test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir="$ladir" + absdir="$abs_ladir" + # Remove this search path later + func_append notinst_path " $abs_ladir" + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + func_append notinst_path " $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir" && test "$linkmode" = prog; then + func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" + fi + case "$host" in + # special handling for platforms with PE-DLLs. + *cygwin* | *mingw* | *cegcc* ) + # Linker will automatically link against shared library if both + # static and shared are present. Therefore, ensure we extract + # symbols from the import library if a shared library is present + # (otherwise, the dlopen module name will be incorrect). We do + # this by putting the import library name into $newdlprefiles. + # We recover the dlopen module name by 'saving' the la file + # name in a special purpose variable, and (later) extracting the + # dlname from the la file. + if test -n "$dlname"; then + func_tr_sh "$dir/$linklib" + eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" + func_append newdlprefiles " $dir/$linklib" + else + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + fi + ;; + * ) + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + func_append newdlprefiles " $dir/$dlname" + else + func_append newdlprefiles " $dir/$linklib" + fi + ;; + esac + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + func_append newlib_search_path " $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { { test "$prefer_static_libs" = no || + test "$prefer_static_libs,$installed" = "built,yes"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath:" in + *"$absdir:"*) ;; + *) func_append temp_rpath "$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test "$use_static_libs" = built && test "$installed" = yes; then + use_static_libs=no + fi + if test -n "$library_names" && + { test "$use_static_libs" = no || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc*) + # No point in relinking DLLs because paths are not encoded + func_append notinst_deplibs " $lib" + need_relink=no + ;; + *) + if test "$installed" = no; then + func_append notinst_deplibs " $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule="" + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule="$dlpremoduletest" + break + fi + done + if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then + echo + if test "$linkmode" = prog; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname="$1" + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc*) + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + func_basename "$soroot" + soname="$func_basename_result" + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from \`$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for \`$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$opt_mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; + *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we can not + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null ; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + echo + echo "*** And there doesn't seem to be a static archive available" + echo "*** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + elif test -n "$old_library"; then + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$absdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) func_append compile_shlibpath "$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && + test "$hardcode_minus_L" != yes && + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$opt_mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + $ECHO "*** Warning: This system can not link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) func_append xrpath " $temp_xrpath";; + esac;; + *) func_append temp_deplibs " $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + func_append newlib_search_path " $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result";; + *) func_resolve_sysroot "$deplib" ;; + esac + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $func_resolve_sysroot_result "*) + func_append specialdeplibs " $func_resolve_sysroot_result" ;; + esac + fi + func_append tmp_libs " $func_resolve_sysroot_result" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + path= + case $deplib in + -L*) path="$deplib" ;; + *.la) + func_resolve_sysroot "$deplib" + deplib=$func_resolve_sysroot_result + func_dirname "$deplib" "" "." + dir=$func_dirname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of \`$dir'" + absdir="$dir" + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl" ; then + depdepl="$absdir/$objdir/$depdepl" + darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" + func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" + path= + fi + fi + ;; + *) + path="-L$absdir/$objdir" + ;; + esac + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "\`$deplib' seems to be moved" + + path="-L$absdir" + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test "$pass" = link; then + if test "$linkmode" = "prog"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) func_append lib_search_path " $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) func_append tmp_libs " $deplib" ;; + esac + ;; + *) func_append tmp_libs " $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + func_append tmp_libs " $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + fi + if test "$linkmode" = prog || test "$linkmode" = lib; then + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "\`-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "\`-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + func_append objs "$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test "$module" = no && \ + func_fatal_help "libtool library \`$output' must begin with \`lib'" + + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" + else + echo + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + func_append libobjs " $objs" + fi + fi + + test "$dlself" != no && \ + func_warning "\`-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test "$#" -gt 1 && \ + func_warning "ignoring multiple \`-rpath's for a libtool library" + + install_libdir="$1" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "\`-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + shift + IFS="$save_ifs" + + test -n "$7" && \ + func_fatal_help "too many parameters to \`-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$1" + number_minor="$2" + number_revision="$3" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + # correct linux to gnu/linux during the next big refactor + darwin|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|qnx|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_minor" + lt_irix_increment=no + ;; + esac + ;; + no) + current="$1" + revision="$2" + age="$3" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT \`$current' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION \`$revision' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE \`$age' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE \`$age' is greater than the current interface number \`$current'" + func_fatal_error "\`$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current" + ;; + + irix | nonstopux) + if test "X$lt_irix_increment" = "Xno"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) # correct to gnu/linux during the next big refactor + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + func_append verstring ":${current}.0" + ;; + + qnx) + major=".$current" + versuffix=".$current" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + + *) + func_fatal_configuration "unknown library version type \`$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + func_warning "undefined symbols not allowed in $host shared libraries" + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + fi + + func_generate_dlsyms "$libname" "$libname" "yes" + func_append libobjs " $symfileobj" + test "X$libobjs" = "X " && libobjs= + + if test "$opt_mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + func_append removelist " $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + func_append oldlibs " $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` + # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` + # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + func_replace_sysroot "$libdir" + func_append temp_xrpath " -R$func_replace_sysroot_result" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) func_append dlfiles " $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) func_append dlprefiles " $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + func_append deplibs " System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + func_append deplibs " -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + $nocaseglob + else + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + fi + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + func_append newdeplibs " $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` + done + fi + case $tmp_deplibs in + *[!\ \ ]*) + echo + if test "X$deplibs_check_method" = "Xnone"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + ;; + esac + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + deplibs="$new_libs" + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + # Remove ${wl} instances when linking with ld. + # FIXME: should test the right _cmds variable. + case $archive_cmds in + *\$LD\ *) wl= ;; + esac + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$opt_mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + func_replace_sysroot "$libdir" + libdir=$func_replace_sysroot_result + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append dep_rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname="$1" + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + linknames= + for link + do + func_append linknames " $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols="$output_objdir/$libname.uexp" + func_append delfiles " $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + if test "x`$SED 1q $export_symbols`" != xEXPORTS; then + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols="$export_symbols" + export_symbols= + always_export_symbols=yes + fi + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd1 in $cmds; do + IFS="$save_ifs" + # Take the normal branch if the nm_file_list_spec branch + # doesn't work or if tool conversion is not needed. + case $nm_file_list_spec~$to_tool_file_cmd in + *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) + try_normal_branch=yes + eval cmd=\"$cmd1\" + func_len " $cmd" + len=$func_len_result + ;; + *) + try_normal_branch=no + ;; + esac + if test "$try_normal_branch" = yes \ + && { test "$len" -lt "$max_cmd_len" \ + || test "$max_cmd_len" -le -1; } + then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + elif test -n "$nm_file_list_spec"; then + func_basename "$output" + output_la=$func_basename_result + save_libobjs=$libobjs + save_output=$output + output=${output_objdir}/${output_la}.nm + func_to_tool_file "$output" + libobjs=$nm_file_list_spec$func_to_tool_file_result + func_append delfiles " $output" + func_verbose "creating $NM input file list: $output" + for obj in $save_libobjs; do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > "$output" + eval cmd=\"$cmd1\" + func_show_eval "$cmd" 'exit $?' + output=$save_output + libobjs=$save_libobjs + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + func_append tmp_deplibs " $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test "$compiler_needs_object" = yes && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + func_append linker_flags " $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$opt_mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test "X$skipped_export" != "X:" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + func_basename "$output" + output_la=$func_basename_result + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then + output=${output_objdir}/${output_la}.lnkscript + func_verbose "creating GNU ld script: $output" + echo 'INPUT (' > $output + for obj in $save_libobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + echo ')' >> $output + func_append delfiles " $output" + func_to_tool_file "$output" + output=$func_to_tool_file_result + elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then + output=${output_objdir}/${output_la}.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test "$compiler_needs_object" = yes; then + firstobj="$1 " + shift + fi + for obj + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + func_append delfiles " $output" + func_to_tool_file "$output" + output=$firstobj\"$file_list_spec$func_to_tool_file_result\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-${k}.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test "X$objlist" = X || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + reload_objs=$objlist + eval concat_cmds=\"$reload_cmds\" + else + # All subsequent reloadable object files will link in + # the last one created. + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-${k}.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-${k}.$objext + objlist=" $obj" + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\${concat_cmds}$reload_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" + fi + func_append delfiles " $output" + + else + output= + fi + + if ${skipped_export-false}; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + fi + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + if ${skipped_export-false}; then + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + fi + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "\`-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object \`$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec and hope we can get by with + # turning comma into space.. + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + else + gentop="$output_objdir/${obj}x" + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # If we're not building shared, we need to use non_pic_objs + test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "\`-release' is ignored for programs" + + test "$preload" = yes \ + && test "$dlopen_support" = unknown \ + && test "$dlopen_self" = unknown \ + && test "$dlopen_self_static" = unknown && \ + func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test "$tagname" = CXX ; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + func_append compile_command " ${wl}-bind_at_load" + func_append finalize_command " ${wl}-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + compile_deplibs="$new_libs" + + + func_append compile_command " $compile_deplibs" + func_append finalize_command " $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) func_append dllsearchpath ":$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) func_append finalize_perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" "no" + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=yes + case $host in + *cegcc* | *mingw32ce*) + # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. + wrappers_required=no + ;; + *cygwin* | *mingw* ) + if test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + *) + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + esac + if test "$wrappers_required" = no; then + # Replace the output file specification. + compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.${objext}"; then + func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' + fi + + exit $exit_status + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + func_append rpath "$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "\`$output' will be relinked during installation" + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output_objdir/$outputname" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource="$output_path/$objdir/lt-$output_name.c" + cwrapper="$output_path/$output_name.exe" + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host" ; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save $symfileobj" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + if test "$preload" = yes && test -f "$symfileobj"; then + func_append oldobjs " $symfileobj" + fi + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $addlibs + func_append oldobjs " $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append oldobjs " $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + echo "copying selected object files to avoid basename conflicts..." + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase="$func_basename_result" + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + func_append oldobjs " $gentop/$newobj" + ;; + *) func_append oldobjs " $obj" ;; + esac + done + fi + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + elif test -n "$archiver_list_spec"; then + func_verbose "using command file archive linking..." + for obj in $oldobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > $output_objdir/$libname.libcmd + func_to_tool_file "$output_objdir/$libname.libcmd" + oldobjs=" $archiver_list_spec$func_to_tool_file_result" + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name="$func_basename_result" + func_resolve_sysroot "$deplib" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" + ;; + -L*) + func_stripname -L '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -L$func_replace_sysroot_result" + ;; + -R*) + func_stripname -R '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -R$func_replace_sysroot_result" + ;; + *) func_append newdependency_libs " $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" + ;; + *) func_append newdlfiles " $lib" ;; + esac + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" + ;; + esac + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlfiles " $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlprefiles " $abs" + done + dlprefiles="$newdlprefiles" + fi + $RM $output + # place dlname in correct position for cygwin + # In fact, it would be nice if we could use this code for all target + # systems that can't hard-code library paths into their executables + # and that have no shared library path variable independent of PATH, + # but it turns out we can't easily determine that from inspecting + # libtool variables, so we have to hard-code the OSs to which it + # applies here; at the moment, that means platforms that use the PE + # object format with DLL files. See the long comment at the top of + # tests/bindir.at for full details. + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) + # If a -bindir argument was supplied, place the dll there. + if test "x$bindir" != x ; + then + func_relative_path "$install_libdir" "$bindir" + tdlname=$func_relative_path_result$dlname + else + # Otherwise fall back on heuristic. + tdlname=../bin/$dlname + fi + ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that can not go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +{ test "$opt_mode" = link || test "$opt_mode" = relink; } && + func_mode_link ${1+"$@"} + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $opt_debug + RM="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) func_append RM " $arg"; rmforce=yes ;; + -*) func_append RM " $arg" ;; + *) func_append files " $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + for file in $files; do + func_dirname "$file" "" "." + dir="$func_dirname_result" + if test "X$dir" = X.; then + odir="$objdir" + else + odir="$dir/$objdir" + fi + func_basename "$file" + name="$func_basename_result" + test "$opt_mode" = uninstall && odir="$dir" + + # Remember odir for removal later, being careful to avoid duplicates + if test "$opt_mode" = clean; then + case " $rmdirs " in + *" $odir "*) ;; + *) func_append rmdirs " $odir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + func_append rmfiles " $odir/$n" + done + test -n "$old_library" && func_append rmfiles " $odir/$old_library" + + case "$opt_mode" in + clean) + case " $library_names " in + *" $dlname "*) ;; + *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; + esac + test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && + test "$pic_object" != none; then + func_append rmfiles " $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && + test "$non_pic_object" != none; then + func_append rmfiles " $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$opt_mode" = clean ; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + func_append rmfiles " $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + func_append rmfiles " $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + func_append rmfiles " $odir/$name $odir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + func_append rmfiles " $odir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + func_append rmfiles " $odir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && + func_mode_uninstall ${1+"$@"} + +test -z "$opt_mode" && { + help="$generic_help" + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode \`$opt_mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: +# vi:sw=2 + diff --git a/libxc/m4/ac_prog_sed.m4 b/libxc/m4/ac_prog_sed.m4 new file mode 100644 index 000000000..c225bd4d5 --- /dev/null +++ b/libxc/m4/ac_prog_sed.m4 @@ -0,0 +1,172 @@ +# -*- Autoconf -*- +# +# This file includes functions from Autoconf 2.61, for compatibility with older +# Autoconfs. Original copyright below. +# Remove this file when we drop support for AC 2.59 and older + +# This file is part of Autoconf. -*- Autoconf -*- +# Macros that test for specific, unclassified, features. +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception, the Free Software Foundation gives unlimited +# permission to copy, distribute and modify the configure scripts that +# are the output of Autoconf. You need not follow the terms of the GNU +# General Public License when using or distributing such scripts, even +# though portions of the text of Autoconf appear in them. The GNU +# General Public License (GPL) does govern all other use of the material +# that constitutes the Autoconf program. +# +# Certain portions of the Autoconf source text are designed to be copied +# (in certain cases, depending on the input) into the output of +# Autoconf. We call these the "data" portions. The rest of the Autoconf +# source text consists of comments plus executable code that decides which +# of the data portions to output in any given case. We call these +# comments and executable code the "non-data" portions. Autoconf never +# copies any of the non-data portions into its output. +# +# This special exception to the GPL applies to versions of Autoconf +# released by the Free Software Foundation. When you make and +# distribute a modified version of Autoconf, you may extend this special +# exception to the GPL to apply to your modified version as well, *unless* +# your modified version has the potential to copy into its output some +# of the text that was the non-data portion of the version that you started +# with. (In other words, unless your change moves or copies text from +# the non-data portions to the data portions.) If your modification has +# such potential, you must delete any notice of this special exception +# to the GPL from your modified version. +# +# Written by David MacKenzie, with help from +# Franc,ois Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor, +# Roland McGrath, Noah Friedman, david d zuhn, and many others. + +# AC_PROG_SED +# ----------- +# Check for a fully functional sed program that truncates +# as few characters as possible. Prefer GNU sed if found. +AC_DEFUN([AC_PROG_SED], +[AC_CACHE_CHECK([for a sed that does not truncate output], ac_cv_path_SED, + [dnl ac_script should not contain more than 99 commands (for HP-UX sed), + dnl but more than about 7000 bytes, to catch a limit in Solaris 8 /usr/ucb/sed. + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" | sed 99q >conftest.sed + $as_unset ac_script || ac_script= + _AC_PATH_PROG_FEATURE_CHECK(SED, [sed gsed], + [_AC_FEATURE_CHECK_LENGTH([ac_path_SED], [ac_cv_path_SED], + ["$ac_path_SED" -f conftest.sed])])]) + SED="$ac_cv_path_SED" + AC_SUBST([SED])dnl + rm -f conftest.sed +])# AC_PROG_SED + +# _AC_PATH_PROG_FEATURE_CHECK(VARIABLE, PROGNAME-LIST, FEATURE-TEST, [PATH]) +# -------------------------------------------------------------------------- +# FEATURE-TEST is called repeatedly with $ac_path_VARIABLE set to the +# name of a program in PROGNAME-LIST found in PATH. FEATURE-TEST must set +# $ac_cv_path_VARIABLE to the path of an acceptable program, or else +# _AC_PATH_PROG_FEATURE_CHECK will report that no acceptable program +# was found, and abort. If a suitable $ac_path_VARIABLE is found in the +# FEATURE-TEST macro, it can set $ac_path_VARIABLE_found=':' to accept +# that value without any further checks. +m4_define([_AC_PATH_PROG_FEATURE_CHECK], +[# Extract the first word of "$2" to use in msg output +if test -z "$$1"; then +set dummy $2; ac_prog_name=$[2] +AC_CACHE_VAL([ac_cv_path_$1], +[ac_path_$1_found=false +# Loop through the user's path and test for each of PROGNAME-LIST +_AS_PATH_WALK([$4], +[for ac_prog in $2; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_$1="$as_dir/$ac_prog$ac_exec_ext" + AS_EXECUTABLE_P(["$ac_path_$1"]) || continue + $3 + $ac_path_$1_found && break 3 + done +done +]) +]) +$1="$ac_cv_path_$1" +if test -z "$$1"; then + AC_MSG_ERROR([no acceptable $ac_prog_name could be found in dnl +m4_default([$4], [\$PATH])]) +fi +AC_SUBST([$1]) +else + ac_cv_path_$1=$$1 +fi +]) + + +# _AC_FEATURE_CHECK_LENGTH(PROGPATH, CACHE-VAR, CHECK-CMD, [MATCH-STRING]) +# ------------------------------------------------------------------------ +# For use as the FEATURE-TEST argument to _AC_PATH_PROG_FEATURE_TEST. +# On each iteration run CHECK-CMD on an input file, storing the value +# of PROGPATH in CACHE-VAR if the CHECK-CMD succeeds. The input file +# is always one line, starting with only 10 characters, and doubling +# in length at each iteration until approx 10000 characters or the +# feature check succeeds. The feature check is called at each +# iteration by appending (optionally, MATCH-STRING and) a newline +# to the file, and using the result as input to CHECK-CMD. +m4_define([_AC_FEATURE_CHECK_LENGTH], +[# Check for GNU $1 and select it if it is found. + _AC_PATH_PROG_FLAVOR_GNU([$$1], + [$2="$$1" $1_found=:], + [ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + echo '$4' >> "conftest.nl" + $3 < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${$1_max-0}; then + # Best one so far, save it but keep looking for a better one + $2="$$1" +dnl # Using $1_max so that each tool feature checked gets its +dnl # own variable. Don't reset it otherwise the implied search +dnl # for best performing tool in a list breaks down. + $1_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out]) +]) + + +# _AC_PATH_PROG_FLAVOR_GNU(PROGRAM-PATH, IF-SUCCESS, [IF-FAILURE]) +# ---------------------------------------------------------------- +m4_define([_AC_PATH_PROG_FLAVOR_GNU], +[# Check for GNU $1 +case `"$1" --version 2>&1` in +*GNU*) + $2;; +m4_ifval([$3], +[*) + $3;; +])esac +])# _AC_PATH_PROG_FLAVOR_GNU + diff --git a/libxc/m4/ax_f90_module_extension.m4 b/libxc/m4/ax_f90_module_extension.m4 new file mode 100644 index 000000000..32a226e24 --- /dev/null +++ b/libxc/m4/ax_f90_module_extension.m4 @@ -0,0 +1,45 @@ +dnl @synopsis AX_F90_MODULE_EXTENSION +dnl +dnl Find Fortran 90 modules file extension. The module extension is +dnl stored in the cached variable ax_cv_f90_modext, or "unknown" if the +dnl extension cannot be found. +dnl +dnl @category Fortran +dnl @author Luc Maisonobe +dnl @version 2005-06-17 +dnl @license AllPermissive + +AC_DEFUN([AX_F90_MODULE_EXTENSION],[ +AC_CACHE_CHECK([fortran 90 modules extension], +ax_cv_f90_modext, +[AC_LANG_PUSH(Fortran) +ax_f90_mod_uppercase=no +i=0 +while test \( -f tmpdir_$i \) -o \( -d tmpdir_$i \) ; do + i=`expr $i + 1` +done +mkdir tmpdir_$i +cd tmpdir_$i +AC_COMPILE_IFELSE([module conftest_module + contains + subroutine conftest_routine + write(*,'(a)') 'gotcha!' + end subroutine conftest_routine + end module conftest_module + ], + [ax_cv_f90_modext=`ls | sed -n 's,conftest_module\.,,p'` + if test x$ax_cv_f90_modext = x ; then +dnl Some F90 compilers put module filename in uppercase letters + ax_cv_f90_modext=`ls | sed -n 's,CONFTEST_MODULE\.,,p'` + if test x$ax_cv_f90_modext = x ; then + ax_cv_f90_modext=unknown + else + ax_f90_mod_uppercase=yes + fi + fi + ], + [ax_cv_f90_modext=unknown]) +cd .. +rm -fr tmpdir_$i +AC_LANG_POP(Fortran) +])]) diff --git a/libxc/m4/fc_integer.m4 b/libxc/m4/fc_integer.m4 new file mode 100644 index 000000000..62f3c6513 --- /dev/null +++ b/libxc/m4/fc_integer.m4 @@ -0,0 +1,90 @@ +## Copyright (C) 2002 M. Marques, A. Castro, A. Rubio, G. Bertsch +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU Lesser General Public License as published by +## the Free Software Foundation; either version 2, or (at your option) +## any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. +## +## $Id: acx.m4 3881 2008-03-12 23:51:07Z xavier $ +## + +################################################ +# Check size of a fortran integer +# ---------------------------------- +AC_DEFUN([ACX_FC_INTEGER_SIZE],[ + AC_REQUIRE([AC_PROG_FC]) + + if test -z "$FC_INTEGER_SIZE"; then + AC_MSG_CHECKING([for the size of a Fortran integer]) + AC_RUN_IFELSE([AC_LANG_PROGRAM([],[ + integer :: i + integer(8) :: i8 + + i8 = huge(i) + + select case(i8) + case(127_8); i = 1 + case(32767_8); i = 2 + case(2147483647_8); i = 4 + case(9223372036854775807_8); i = 8 + case default; write(*,'(a,i20)') "unrecognized size ", i8; stop 999 + end select + + open(1, file='conftest.out') + write(1,'(i1)') i +])], + [ac_fcintegersize=`cat conftest.out`], + [AC_MSG_FAILURE(f90 program to find the size of a Fortran integer failed)], + [ac_fcintegersize=4; echo -n "cross-compiling; assuming... "]) + AC_MSG_RESULT([${ac_fcintegersize} bytes]) + else + ac_fcintegersize=$FC_INTEGER_SIZE + fi + AC_DEFINE_UNQUOTED(FC_INTEGER_SIZE, ${ac_fcintegersize}, [The size of a Fortran integer]) +]) + +################################################ +# Check which C type corresponds to Fortran int +# ---------------------------------- +AC_DEFUN([ACX_CC_FORTRAN_INT],[ + AC_MSG_CHECKING([for which C type corresponds to Fortran integer]) + AC_REQUIRE([ACX_FC_INTEGER_SIZE]) + AC_REQUIRE([AC_PROG_CC]) + if test -z "$CC_FORTRAN_INT"; then + AC_LANG_PUSH([C]) + AC_RUN_IFELSE([AC_LANG_PROGRAM([ +#include +],[ + FILE* fp; + fp = fopen("conftest.out", "w"); + if(${ac_fcintegersize} == sizeof(char)) + fprintf(fp, "char"); + else if(${ac_fcintegersize} == sizeof(short)) + fprintf(fp, "short"); + else if(${ac_fcintegersize} == sizeof(int)) + fprintf(fp, "int"); + else if(${ac_fcintegersize} == sizeof(long)) + fprintf(fp, "long"); + else + return 1; +])], + [ac_ccfortranint=`cat conftest.out`], + [AC_MSG_FAILURE(C program failed to find the C type of a Fortran integer)], + [ac_ccfortranint="int"; echo -n "cross-compiling; assuming... "]) + AC_LANG_POP([C]) + AC_MSG_RESULT([${ac_ccfortranint}]) + else + ac_ccfortranint=$CC_FORTRAN_INT + fi + AC_DEFINE_UNQUOTED(CC_FORTRAN_INT, ${ac_ccfortranint}, [The C type of a Fortran integer]) +]) diff --git a/libxc/m4/fcflags.m4 b/libxc/m4/fcflags.m4 new file mode 100644 index 000000000..b71291fe6 --- /dev/null +++ b/libxc/m4/fcflags.m4 @@ -0,0 +1,100 @@ +## Copyright (C) 2002 M. Marques, A. Castro, A. Rubio, G. Bertsch +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU Lesser General Public License as published by +## the Free Software Foundation; either version 2, or (at your option) +## any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. +## +## $Id: fcflags.m4 10978 2013-07-11 15:28:46Z micael $ +## +################################################ +# Get default FFLAGS +# ---------------------------------- +# this function can certainly be improved on +AC_DEFUN([ACX_FCFLAGS], +[ +AC_REQUIRE([AC_CANONICAL_HOST]) + +if test -z "${FCFLAGS}"; then + case "${FC}" in + gfortran*) + FCFLAGS="-pipe -O3 -funroll-loops -ffast-math -ffree-line-length-none" + ;; + openf9*) + FCFLAGS="-O3 -funroll-loops -ffast-math" + ;; + g95*) + FCFLAGS="-pipe -O3 -funroll-loops -ffast-math" + ;; + efc*|ifc*|ifort*) + case "${host}" in + x86_64*) + FCFLAGS="-u -fpp1 -nbs -pc80 -pad -align -unroll -O3 -ip -no-fp-port -mno-ieee-fp -vec-report0 -no-prec-div" + ;; + i?86*linux*) + FCFLAGS="-u -fpp1 -nbs -pc80 -pad -align -unroll -O3 -ip -no-fp-port -mno-ieee-fp -vec-report0 -no-prec-div" + a=`echo $host | sed "s/^i//" | sed "s/86.*//"` + if test "$a" -gt 5 ; then + FCFLAGS="$FCFLAGS -tpp7 -xW" + fi + ;; + ia64*) + FCFLAGS="-O3 -ip -IPF_fp_relaxed -ftz -fpp -u -align all -pad" + ;; + esac + ;; + sun*) + case "${host}" in + i?86*linux*|x86_64*) + FCFLAGS="-fast -xprefetch -xvector=simd" + ;; + sparc*) + FCFLAGS="-fast" + ;; + esac + ;; + pathf9*) + FCFLAGS="-O3 -march=auto -mcpu=auto -OPT:Ofast -fno-math-errno -LNO:simd=2 -OPT:align_unsafe=ON" + ;; + pgf90*) + FCFLAGS="-O4 -fast -Munroll -Mnoframe -Mdalign" + ;; + abf90*) + FCFLAGS="-O3 -YEXT_NAMES=LCS -YEXT_SFX=_" + ;; + xlf*) + FCFLAGS="-O3 -qarch=auto -qtune=auto -qcache=auto -qxlf90=autodealloc" + ;; + f9*) + case "${host}" in + alphaev*) + FCFLAGS="-align dcommons -fast -tune host -arch host -noautomatic" + ;; + mips*) + FCFLAGS="-Ofast -O3" + ;; + sparc*) + FCFLAGS="-fast" + ;; + *) + FCFLAGS="-O3" + ;; + esac + ;; + *) + FCFLAGS="-O3" + ;; + esac +fi +AC_MSG_NOTICE([Using FCFLAGS="$FCFLAGS"]) +]) diff --git a/libxc/m4/fortran.m4 b/libxc/m4/fortran.m4 new file mode 100644 index 000000000..3d35b54e4 --- /dev/null +++ b/libxc/m4/fortran.m4 @@ -0,0 +1,144 @@ +## Copyright (C) 2002 M. Marques, A. Castro, A. Rubio, G. Bertsch +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU Lesser General Public License as published by +## the Free Software Foundation; either version 2, or (at your option) +## any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. +## +## $Id: acx.m4 3881 2008-03-12 23:51:07Z xavier $ +## + +################################################ +# Check whether the compiler accepts very long lines. +# ---------------------------------- +AC_DEFUN([ACX_LONG_FORTRAN_LINES], +[AC_MSG_CHECKING([whether the compiler accepts very long lines]) +AC_COMPILE_IFELSE( AC_LANG_PROGRAM( [], [ +write(*, *) '456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678904567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789001234567890123456789045678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890' + ]), + [acx_long_lines_ok=yes; AC_DEFINE(LONG_LINES, 1, [compiler supports long lines])], [acx_long_lines_ok=no]) +AC_SUBST([LONG_LINES], [$acx_long_lines_ok]) +AC_MSG_RESULT($acx_long_lines_ok) +]) + + +################################################ +# Check whether the compiler accepts preprocessor "# line-number" lines. +# ---------------------------------- +AC_DEFUN([ACX_F90_ACCEPTS_LINE_NUMBERS], +[ +AC_MSG_CHECKING([whether the compiler accepts "line-number" lines cast by the preprocessor]) +AC_COMPILE_IFELSE( + AC_LANG_PROGRAM( [], [# 1]), + [acx_f90_accepts_line_numbers_ok=yes + AC_DEFINE(F90_ACCEPTS_LINE_NUMBERS, 1, [compiler supports line-number lines])], + [acx_f90_accepts_line_numbers_ok=no]) +AC_SUBST(F90_ACCEPTS_LINE_NUMBERS, $acx_f90_accepts_line_numbers_ok) +AC_MSG_RESULT($acx_f90_accepts_line_numbers_ok) +] +) + +################################################ +# Check for the presence of a given function in Fortran. +# It substitutes AC_CHECK_FUNC, since the latter +# seems to fail with some autotools versions, due to a call to some broken +# version of AC_LANG_FUNC_LINK_TRY. +AC_DEFUN([ACX_FORTRAN_CHECK_FUNC], +[ +AC_MSG_CHECKING([for $1]) +AC_LANG_PUSH(Fortran)dnl +AC_LINK_IFELSE([AC_LANG_CALL([], [$1])], +[ +acx_fortran_check_func=yes +AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_$1]),1, [Define if the $1 function can be called from Fortran])], +[ +acx_fortran_check_func=no +])dnl +AC_LANG_POP(Fortran)dnl +AC_MSG_RESULT($acx_fortran_check_func) +]) + + +################################################ +# AC_LANG_FUNC_LINK_TRY(Fortran)(FUNCTION) +# ---------------------------------- +m4_define([AC_LANG_FUNC_LINK_TRY(Fortran)], +[AC_LANG_PROGRAM([], [call [$1]])]) + +################################################ +# Fortran preprocessing +# --------------------------- + +# like built-in AC_EGREP_CPP, only using FCCPP, .F90 file, and regular grep +# some cpp's will behave differently on .F90 and on .c files +# using $GREP or $EGREP would imply AC_REQUIRE(AC_PROG_GREP) which leads to this warning: +# configure.ac:189: *GNU* is m4_require'd but not m4_defun'd +AC_DEFUN([ACX_GREP_FCCPP],[ + AC_ARG_VAR(FCCPP, [Fortran preprocessor]) + + echo "$2" > conftest.F90 + + if (eval "$FCCPP conftest.F90") 2>&5 | + grep "$1" >/dev/null 2>&1; then : + $3 + else + $4 + fi + rm -f conftest* +]) + +AC_DEFUN([ACX_FCCPP],[ + # "gcc -E -x c" means treat the file as if it were C. For some reason, when gcc identifies the source + # as Fortran, it will not concatenate tokens in preprocessing, so we must trick it. + for FCCPP_base in "$FCCPP" "/lib/cpp" "$CPP" "$CPP -x c" "`which cpp`"; do + # cycle if blank + if test -z "$FCCPP_base"; then + continue + fi + + for FCCPP in "$FCCPP_base" "$FCCPP_base -ansi"; do + AC_MSG_CHECKING([whether $FCCPP is usable for Fortran preprocessing]) + acx_fpp_ok=yes + + ACX_GREP_FCCPP([anything], AC_LANG_PROGRAM([],[anything]), + [], [acx_fpp_ok=no; AC_MSG_RESULT([preprocessor cannot be run]); break]) + # very unlikely that adding -ansi will allow it to be run at all + + ACX_GREP_FCCPP([hi], AC_LANG_PROGRAM([],[ +#define ADD_I(x) x ## i +ADD_I(h)]), + [], [acx_fpp_ok=no; AC_MSG_RESULT([preprocessor does not concatenate tokens])]) + + # in Fortran this is string concatenation, must not be stripped + # some cpp's (e.g. icc -E -ansi) might actually insert a space between // too which is not acceptable + ACX_GREP_FCCPP([rout // ine], AC_LANG_PROGRAM([],[ +#define PUSH_SUB(x) x // ine +PUSH_SUB(rout)]), + [], [acx_fpp_ok=no; AC_MSG_RESULT([preprocessor mangles C++ style comment])]) + + if test x"$acx_fpp_ok" = xyes; then + AC_MSG_RESULT([yes]) + break + fi + done + if test x"$acx_fpp_ok" = xyes; then + break + fi + done + + if test x"$acx_fpp_ok" = xno; then + AC_MSG_ERROR([Could not find preprocessor usable for Fortran.]) + fi + + AC_SUBST(FCCPP) +]) diff --git a/libxc/m4/libtool.m4 b/libxc/m4/libtool.m4 new file mode 100644 index 000000000..f12cfdf0b --- /dev/null +++ b/libxc/m4/libtool.m4 @@ -0,0 +1,7992 @@ +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +]) + +# serial 57 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_CC_BASENAME(CC) +# ------------------- +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +m4_defun([_LT_CC_BASENAME], +[for cc_temp in $1""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl + +_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl +dnl +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_WITH_SYSROOT])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PREPARE_SED_QUOTE_VARS +# -------------------------- +# Define a few sed substitution that help us do robust quoting. +m4_defun([_LT_PREPARE_SED_QUOTE_VARS], +[# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' +]) + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from `configure', and `config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# `config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain="$ac_aux_dir/ltmain.sh" +])# _LT_PROG_LTMAIN + + +## ------------------------------------- ## +## Accumulate code for creating libtool. ## +## ------------------------------------- ## + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the `libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + +## ------------------------ ## +## FIXME: Eliminate VARNAME ## +## ------------------------ ## + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to `config.status' so that its +# declaration there will have the same value as in `configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags="_LT_TAGS"dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into `config.status', and then the shell code to quote escape them in +# for loops in `config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$[]1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +_LT_OUTPUT_LIBTOOL_INIT +]) + +# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) +# ------------------------------------ +# Generate a child script FILE with all initialization necessary to +# reuse the environment learned by the parent script, and make the +# file executable. If COMMENT is supplied, it is inserted after the +# `#!' sequence but before initialization text begins. After this +# macro, additional text can be appended to FILE to form the body of +# the child script. The macro ends with non-zero status if the +# file could not be fully written (such as if the disk is full). +m4_ifdef([AS_INIT_GENERATED], +[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], +[m4_defun([_LT_GENERATED_FILE_INIT], +[m4_require([AS_PREPARE])]dnl +[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl +[lt_write_fail=0 +cat >$1 <<_ASEOF || lt_write_fail=1 +#! $SHELL +# Generated by $as_me. +$2 +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$1 <<\_ASEOF || lt_write_fail=1 +AS_SHELL_SANITIZE +_AS_PREPARE +exec AS_MESSAGE_FD>&1 +_ASEOF +test $lt_write_fail = 0 && chmod +x $1[]dnl +m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], +[# Run this file to recreate a libtool stub with the current configuration.]) + +cat >>"$CONFIG_LT" <<\_LTEOF +lt_cl_silent=false +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +\`$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2011 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test $[#] != 0 +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try \`$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try \`$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +lt_cl_success=: +test "$silent" = yes && + lt_config_lt_args="$lt_config_lt_args --quiet" +exec AS_MESSAGE_LOG_FD>/dev/null +$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false +exec AS_MESSAGE_LOG_FD>>config.log +$lt_cl_success || AS_EXIT(1) +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +_LT_COPYING +_LT_LIBTOOL_TAGS + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + _LT_PROG_REPLACE_SHELLFNS + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Go], [_LT_LANG(GO)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +m4_ifndef([AC_PROG_GO], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_GO. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ +m4_defun([AC_PROG_GO], +[AC_LANG_PUSH(Go)dnl +AC_ARG_VAR([GOC], [Go compiler command])dnl +AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl +_AC_ARG_VAR_LDFLAGS()dnl +AC_CHECK_TOOL(GOC, gccgo) +if test -z "$GOC"; then + if test -n "$ac_tool_prefix"; then + AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) + fi +fi +if test -z "$GOC"; then + AC_CHECK_PROG(GOC, gccgo, gccgo, false) +fi +])#m4_defun +])#m4_ifndef + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([AC_PROG_GO], + [LT_LANG(GO)], + [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) +dnl AC_DEFUN([AC_LIBTOOL_RC], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test $_lt_result -eq 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS="$save_LDFLAGS" + ]) + + AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], + [lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD + echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD + $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD + echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD + $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[[012]]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES([TAG]) +# --------------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], + [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + m4_if([$1], [CXX], +[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) +# ---------------------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +# Store the results from the different compilers for each TAGNAME. +# Allow to override them for all tags through lt_cv_aix_libpath. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], + [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ + lt_aix_libpath_sed='[ + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }]' + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi],[]) + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" + fi + ]) + aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) +fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[m4_divert_text([M4SH-INIT], [$1 +])])# _LT_SHELL_INIT + + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Find how we can fake an echo command that does not interpret backslash. +# In particular, with Autoconf 2.60 or later we add some code to the start +# of the generated configure script which will find a shell with a builtin +# printf (which we can use as an echo command). +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +AC_MSG_CHECKING([how to print strings]) +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$[]1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +case "$ECHO" in + printf*) AC_MSG_RESULT([printf]) ;; + print*) AC_MSG_RESULT([print -r]) ;; + *) AC_MSG_RESULT([cat]) ;; +esac + +m4_ifdef([_AS_DETECT_SUGGESTED], +[_AS_DETECT_SUGGESTED([ + test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test "X`printf %s $ECHO`" = "X$ECHO" \ + || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) + +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_WITH_SYSROOT +# ---------------- +AC_DEFUN([_LT_WITH_SYSROOT], +[AC_MSG_CHECKING([for sysroot]) +AC_ARG_WITH([sysroot], +[ --with-sysroot[=DIR] Search for dependent libraries within DIR + (or the compiler's sysroot if not specified).], +[], [with_sysroot=no]) + +dnl lt_sysroot will always be passed unquoted. We quote it here +dnl in case the user passed a directory name. +lt_sysroot= +case ${with_sysroot} in #( + yes) + if test "$GCC" = yes; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + AC_MSG_RESULT([${with_sysroot}]) + AC_MSG_ERROR([The sysroot must be an absolute path.]) + ;; +esac + + AC_MSG_RESULT([${lt_sysroot:-no}]) +_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl +[dependent libraries, and in which our libraries should be installed.])]) + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD="${LD-ld}_sol2" + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" +])# _LT_ENABLE_LOCK + + +# _LT_PROG_AR +# ----------- +m4_defun([_LT_PROG_AR], +[AC_CHECK_TOOLS(AR, [ar], false) +: ${AR=ar} +: ${AR_FLAGS=cru} +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) + +AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], + [lt_cv_ar_at_file=no + AC_COMPILE_IFELSE([AC_LANG_PROGRAM], + [echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([lt_ar_try]) + if test "$ac_status" -eq 0; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + AC_TRY_EVAL([lt_ar_try]) + if test "$ac_status" -ne 0; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + ]) + ]) + +if test "x$lt_cv_ar_at_file" = xno; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi +_LT_DECL([], [archiver_list_spec], [1], + [How to feed a file listing to the archiver]) +])# _LT_PROG_AR + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[_LT_PROG_AR + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +_LT_DECL([], [lock_old_archive_extraction], [0], + [Whether to use a lock for old archive extraction]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test x"[$]$2" = xyes; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links="nottested" +if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", + [Define to the sub-directory in which libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || + test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[[4-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[23]].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[[3-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], + [lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [lt_cv_shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + ]) + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Add ABI-specific directories to the system library path. + sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" + + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [install_override_mode], [1], + [Permission mode override for installation of shared libraries]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], + [Run-time system search path for libraries]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program which can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program which can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PROG_ECHO_BACKSLASH])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method = "file_magic"]) +_LT_DECL([], [file_magic_glob], [1], + [How to find potential files when deplibs_check_method = "file_magic"]) +_LT_DECL([], [want_nocaseglob], [1], + [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi]) +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + AC_SUBST([DUMPBIN]) + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + +# _LT_CHECK_SHAREDLIB_FROM_LINKLIB +# -------------------------------- +# how to determine the name of the shared library +# associated with a specific link library. +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +m4_require([_LT_DECL_DLLTOOL]) +AC_CACHE_CHECK([how to associate runtime and link libraries], +lt_cv_sharedlib_from_linklib_cmd, +[lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh + # decide which to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd="$ECHO" + ;; +esac +]) +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + +_LT_DECL([], [sharedlib_from_linklib_cmd], [1], + [Command to associate shared and link libraries]) +])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB + + +# _LT_PATH_MANIFEST_TOOL +# ---------------------- +# locate the manifest tool +m4_defun([_LT_PATH_MANIFEST_TOOL], +[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], + [lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&AS_MESSAGE_LOG_FD + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest*]) +if test "x$lt_cv_path_mainfest_tool" != xyes; then + MANIFEST_TOOL=: +fi +_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl +])# _LT_PATH_MANIFEST_TOOL + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; + *) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; + esac + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT@&t@_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT@&t@_DLSYM_CONST +#else +# define LT@&t@_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT@&t@_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +_LT_DECL([], [nm_file_list_spec], [1], + [Specify filename containing input files for $NM]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' + if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + *Sun\ F* | *Sun*Fortran*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + *Intel*\ [[CF]]*Compiler*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + *Portland\ Group*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac + +AC_CACHE_CHECK([for $compiler option to produce PIC], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global defined + # symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + ;; + esac + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; + *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + esac + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + m4_if($1, [], [ + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + _LT_LINKER_OPTION([if $CC understands -b], + _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], + [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) + ;; + esac + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], + [lt_cv_irix_exported_symbol], + [save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + AC_LINK_IFELSE( + [AC_LANG_SOURCE( + [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], + [C++], [[int foo (void) { return 0; }]], + [Fortran 77], [[ + subroutine foo + end]], + [Fortran], [[ + subroutine foo + end]])])], + [lt_cv_irix_exported_symbol=yes], + [lt_cv_irix_exported_symbol=no]) + LDFLAGS="$save_LDFLAGS"]) + if test "$lt_cv_irix_exported_symbol" = yes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_CACHE_CHECK([whether -lc should be explicitly linked in], + [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), + [$RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + ]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting ${shlibpath_var} if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [postlink_cmds], [2], + [Commands necessary for finishing linking programs]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report which library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC="$lt_save_CC" +])# _LT_LANG_C_CONFIG + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + gnu*) + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ + '"$_LT_TAGVAR(old_archive_cmds, $1)" + _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ + '"$_LT_TAGVAR(reload_cmds, $1)" + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + + _LT_TAGVAR(GCC, $1)="$GXX" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_FUNC_STRIPNAME_CNF +# ---------------------- +# func_stripname_cnf prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# +# This function is identical to the (non-XSI) version of func_stripname, +# except this one can be used by m4 code that may be executed by configure, +# rather than the libtool script. +m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl +AC_REQUIRE([_LT_DECL_SED]) +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) +func_stripname_cnf () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname_cnf +])# _LT_FUNC_STRIPNAME_CNF + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF +package foo +func foo() { +} +_LT_EOF +]) + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case ${prev}${p} in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test "$pre_test_object_deps_done" = no; then + case ${prev} in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)="${prev}${p}" + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)="$p" + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)="$p" + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC* | sunCC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_LANG_PUSH(Fortran 77) +if test -z "$F77" || test "X$F77" = "Xno"; then + _lt_disable_F77=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_F77" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${F77-"f77"} + CFLAGS=$FFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$G77" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" + CFLAGS="$lt_save_CFLAGS" +fi # test "$_lt_disable_F77" != yes + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_LANG_PUSH(Fortran) + +if test -z "$FC" || test "X$FC" = "Xno"; then + _lt_disable_FC=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_FC" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${FC-"f95"} + CFLAGS=$FCFLAGS + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test "$_lt_disable_FC" != yes + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +CFLAGS=$GCJFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)="$LD" +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_GO_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Go compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_GO_CONFIG], +[AC_REQUIRE([LT_PROG_GO])dnl +AC_LANG_SAVE + +# Source file extension for Go test sources. +ac_ext=go + +# Object file extension for compiled Go test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="package main; func main() { }" + +# Code to be used in simple link tests +lt_simple_link_test_code='package main; func main() { }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GOC-"gccgo"} +CFLAGS=$GOFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)="$LD" +_LT_CC_BASENAME([$compiler]) + +# Go did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GO_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +CFLAGS= +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_GO +# ---------- +AC_DEFUN([LT_PROG_GO], +[AC_CHECK_TOOL(GOC, gccgo,) +]) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + +# _LT_DECL_DLLTOOL +# ---------------- +# Ensure DLLTOOL variable is set. +m4_defun([_LT_DECL_DLLTOOL], +[AC_CHECK_TOOL(DLLTOOL, dlltool, false) +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) +AC_SUBST([DLLTOOL]) +]) + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,b/c, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +AC_MSG_RESULT([$xsi_shell]) +_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) + +AC_MSG_CHECKING([whether the shell understands "+="]) +lt_shell_append=no +( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +AC_MSG_RESULT([$lt_shell_append]) +_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) +# ------------------------------------------------------ +# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and +# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. +m4_defun([_LT_PROG_FUNCTION_REPLACE], +[dnl { +sed -e '/^$1 ()$/,/^} # $1 /c\ +$1 ()\ +{\ +m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) +} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: +]) + + +# _LT_PROG_REPLACE_SHELLFNS +# ------------------------- +# Replace existing portable implementations of several shell functions with +# equivalent extended shell implementations where those features are available.. +m4_defun([_LT_PROG_REPLACE_SHELLFNS], +[if test x"$xsi_shell" = xyes; then + _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac]) + + _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl + func_basename_result="${1##*/}"]) + + _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}"]) + + _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"}]) + + _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl + func_split_long_opt_name=${1%%=*} + func_split_long_opt_arg=${1#*=}]) + + _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl + func_split_short_opt_arg=${1#??} + func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) + + _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac]) + + _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) + + _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) + + _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) +fi + +if test x"$lt_shell_append" = xyes; then + _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) + + _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl + func_quote_for_eval "${2}" +dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ + eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) + + # Save a `func_append' function call where possible by direct use of '+=' + sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +else + # Save a `func_append' function call even when '+=' is not available + sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +fi + +if test x"$_lt_function_replace_fail" = x":"; then + AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) +fi +]) + +# _LT_PATH_CONVERSION_FUNCTIONS +# ----------------------------- +# Determine which file name conversion functions should be used by +# func_to_host_file (and, implicitly, by func_to_host_path). These are needed +# for certain cross-compile configurations and native mingw. +m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_MSG_CHECKING([how to convert $build file names to $host format]) +AC_CACHE_VAL(lt_cv_to_host_file_cmd, +[case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac +]) +to_host_file_cmd=$lt_cv_to_host_file_cmd +AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) +_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], + [0], [convert $build file names to $host format])dnl + +AC_MSG_CHECKING([how to convert $build file names to toolchain format]) +AC_CACHE_VAL(lt_cv_to_tool_file_cmd, +[#assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac +]) +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) +_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], + [0], [convert $build files to toolchain format])dnl +])# _LT_PATH_CONVERSION_FUNCTIONS diff --git a/libxc/m4/ltoptions.m4 b/libxc/m4/ltoptions.m4 new file mode 100644 index 000000000..5d9acd8e2 --- /dev/null +++ b/libxc/m4/ltoptions.m4 @@ -0,0 +1,384 @@ +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 7 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option `$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl `shared' nor `disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + ]) +])# _LT_SET_OPTIONS + + +## --------------------------------- ## +## Macros to handle LT_INIT options. ## +## --------------------------------- ## + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [1], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the `shared' and +# `disable-shared' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the `static' and +# `disable-static' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the `fast-install' +# and `disable-fast-install' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the `pic-only' and `no-pic' +# LT_INIT options. +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for lt_pkg in $withval; do + IFS="$lt_save_ifs" + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [pic_mode=default]) + +test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + +## ----------------- ## +## LTDL_INIT Options ## +## ----------------- ## + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/libxc/m4/ltsugar.m4 b/libxc/m4/ltsugar.m4 new file mode 100644 index 000000000..9000a057d --- /dev/null +++ b/libxc/m4/ltsugar.m4 @@ -0,0 +1,123 @@ +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59 which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) diff --git a/libxc/m4/ltversion.m4 b/libxc/m4/ltversion.m4 new file mode 100644 index 000000000..07a8602d4 --- /dev/null +++ b/libxc/m4/ltversion.m4 @@ -0,0 +1,23 @@ +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# @configure_input@ + +# serial 3337 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.4.2]) +m4_define([LT_PACKAGE_REVISION], [1.3337]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.4.2' +macro_revision='1.3337' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) diff --git a/libxc/m4/lt~obsolete.m4 b/libxc/m4/lt~obsolete.m4 new file mode 100644 index 000000000..c573da90c --- /dev/null +++ b/libxc/m4/lt~obsolete.m4 @@ -0,0 +1,98 @@ +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 5 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) +m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) +m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) +m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) +m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) +m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) +m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) diff --git a/libxc/missing b/libxc/missing new file mode 100755 index 000000000..cdea51493 --- /dev/null +++ b/libxc/missing @@ -0,0 +1,215 @@ +#! /bin/sh +# Common wrapper for a few potentially missing GNU programs. + +scriptversion=2012-06-26.16; # UTC + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Originally written by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try '$0 --help' for more information" + exit 1 +fi + +case $1 in + + --is-lightweight) + # Used by our autoconf macros to check whether the available missing + # script is modern enough. + exit 0 + ;; + + --run) + # Back-compat with the calling convention used by older automake. + shift + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due +to PROGRAM being missing or too old. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + +Supported PROGRAM values: + aclocal autoconf autoheader autom4te automake makeinfo + bison yacc flex lex help2man + +Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and +'g' are ignored when checking the name. + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: unknown '$1' option" + echo 1>&2 "Try '$0 --help' for more information" + exit 1 + ;; + +esac + +# Run the given program, remember its exit status. +"$@"; st=$? + +# If it succeeded, we are done. +test $st -eq 0 && exit 0 + +# Also exit now if we it failed (or wasn't found), and '--version' was +# passed; such an option is passed most likely to detect whether the +# program is present and works. +case $2 in --version|--help) exit $st;; esac + +# Exit code 63 means version mismatch. This often happens when the user +# tries to use an ancient version of a tool on a file that requires a +# minimum version. +if test $st -eq 63; then + msg="probably too old" +elif test $st -eq 127; then + # Program was missing. + msg="missing on your system" +else + # Program was found and executed, but failed. Give up. + exit $st +fi + +perl_URL=http://www.perl.org/ +flex_URL=http://flex.sourceforge.net/ +gnu_software_URL=http://www.gnu.org/software + +program_details () +{ + case $1 in + aclocal|automake) + echo "The '$1' program is part of the GNU Automake package:" + echo "<$gnu_software_URL/automake>" + echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/autoconf>" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + autoconf|autom4te|autoheader) + echo "The '$1' program is part of the GNU Autoconf package:" + echo "<$gnu_software_URL/autoconf/>" + echo "It also requires GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + esac +} + +give_advice () +{ + # Normalize program name to check for. + normalized_program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + + printf '%s\n' "'$1' is $msg." + + configure_deps="'configure.ac' or m4 files included by 'configure.ac'" + case $normalized_program in + autoconf*) + echo "You should only need it if you modified 'configure.ac'," + echo "or m4 files included by it." + program_details 'autoconf' + ;; + autoheader*) + echo "You should only need it if you modified 'acconfig.h' or" + echo "$configure_deps." + program_details 'autoheader' + ;; + automake*) + echo "You should only need it if you modified 'Makefile.am' or" + echo "$configure_deps." + program_details 'automake' + ;; + aclocal*) + echo "You should only need it if you modified 'acinclude.m4' or" + echo "$configure_deps." + program_details 'aclocal' + ;; + autom4te*) + echo "You might have modified some maintainer files that require" + echo "the 'automa4te' program to be rebuilt." + program_details 'autom4te' + ;; + bison*|yacc*) + echo "You should only need it if you modified a '.y' file." + echo "You may want to install the GNU Bison package:" + echo "<$gnu_software_URL/bison/>" + ;; + lex*|flex*) + echo "You should only need it if you modified a '.l' file." + echo "You may want to install the Fast Lexical Analyzer package:" + echo "<$flex_URL>" + ;; + help2man*) + echo "You should only need it if you modified a dependency" \ + "of a man page." + echo "You may want to install the GNU Help2man package:" + echo "<$gnu_software_URL/help2man/>" + ;; + makeinfo*) + echo "You should only need it if you modified a '.texi' file, or" + echo "any other file indirectly affecting the aspect of the manual." + echo "You might want to install the Texinfo package:" + echo "<$gnu_software_URL/texinfo/>" + echo "The spurious makeinfo call might also be the consequence of" + echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" + echo "want to install GNU make:" + echo "<$gnu_software_URL/make/>" + ;; + *) + echo "You might have modified some files without having the proper" + echo "tools for further handling them. Check the 'README' file, it" + echo "often tells you about the needed prerequisites for installing" + echo "this package. You may also peek at any GNU archive site, in" + echo "case some other package contains this missing '$1' program." + ;; + esac +} + +give_advice "$1" | sed -e '1s/^/WARNING: /' \ + -e '2,$s/^/ /' >&2 + +# Propagate the correct exit status (expected to be 127 for a program +# not found, 63 for a program that failed due to version mismatch). +exit $st + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/libxc/src/Makefile.am b/libxc/src/Makefile.am new file mode 100644 index 000000000..273de9983 --- /dev/null +++ b/libxc/src/Makefile.am @@ -0,0 +1,175 @@ +## Process this file with automake to produce Makefile.in + +## Copyright (C) 2002 M. Marques, A. Castro, A. Rubio, G. Bertsch +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU Lesser General Public License as published by +## the Free Software Foundation; either version 2, or (at your option) +## any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. +## +## $Id: Makefile.am 2433 2006-09-28 11:06:54Z marques $ + +bin_PROGRAMS = xc-info + +xc_info_SOURCES = xc-info.c +xc_info_LDFLAGS = -lm +xc_info_LDADD = libxc.la + +lib_LTLIBRARIES = libxc.la + +libxc_la_FUNC_SOURCES = \ + special_functions.c bessel.c expint_e1.c integrate.c util.c mix_func.c functionals.c \ + version.c \ + lda.c lda_x.c lda_x_1d.c lda_x_2d.c \ + lda_c_wigner.c lda_c_gombas.c lda_c_rpa.c lda_c_hl.c \ + lda_c_vwn.c lda_c_pz.c lda_c_pw.c lda_c_ml1.c lda_c_rc04.c lda_xc_teter93.c \ + lda_c_1d_csc.c lda_c_1d_loos.c \ + lda_c_2d_amgb.c lda_c_2d_prm.c stoll.c \ + lda_k_tf.c \ + gga.c \ + gga_x_lg93.c gga_x_pbe.c gga_x_rpbe.c gga_x_pbea.c gga_x_mpbe.c gga_x_herman.c gga_x_b86.c gga_x_b86_mgc.c \ + gga_x_b88.c gga_x_g96.c gga_x_pw86.c gga_x_pw91.c gga_x_optx.c gga_x_airy.c gga_x_c09x.c \ + gga_x_dk87.c gga_x_ft97.c gga_x_wc.c gga_x_am05.c gga_x_bayesian.c gga_x_kt.c gga_x_htbs.c \ + gga_c_pbe.c gga_c_lyp.c gga_c_p86.c gga_c_pw91.c gga_c_am05.c gga_c_lm.c gga_c_wl.c gga_c_wi.c \ + gga_x_lb.c gga_xc_b97.c gga_xc_edf1.c gga_xc_1w.c gga_c_optc.c gga_c_tca.c gga_x_bpccac.c \ + gga_x_sogga11.c gga_c_sogga11.c gga_xc_th.c gga_x_wpbeh.c gga_x_hjs.c gga_x_ityh.c gga_x_sfat.c \ + gga_x_ak13.c gga_x_q2d.c gga_c_q2d.c \ + gga_x_ssb_sw.c gga_c_ft97.c gga_c_op.c gga_x_n12.c gga_x_lv_rpw86.c \ + gga_x_2d_b86.c gga_x_2d_b86_mgc.c gga_x_2d_b88.c gga_x_2d_pbe.c \ + gga_k_tflw.c gga_k_pearson.c gga_k_ol1.c gga_k_ol2.c gga_k_dk.c gga_k_meyer.c \ + gga_x_vmt.c gga_xc_oblyp_d.c \ + hyb_gga_xc_b3lyp.c hyb_gga_xc_o3lyp.c hyb_gga_xc_pbeh.c hyb_gga_xc_b1wc.c \ + hyb_gga_xc_b97.c hyb_gga_xc_hse.c hyb_gga_xc_cam_b3lyp.c hyb_gga_xc_camy_blyp.c \ + mgga.c \ + mgga_x_lta.c mgga_x_tpss.c mgga_x_br89.c mgga_x_gvt4.c mgga_x_m06l.c mgga_x_tau_hcth.c \ + mgga_x_2d_prhg07.c mgga_x_pkzb.c mgga_x_m05.c mgga_x_m08.c mgga_x_ms.c mgga_x_mn12.c mgga_x_mk00.c \ + mgga_c_vsxc.c mgga_c_pkzb.c mgga_c_bc95.c mgga_c_m08.c mgga_c_cc06.c mgga_c_cs.c mgga_xc_otpss_d.c \ + hyb_mgga_xc_m05.c hyb_mgga_xc_tpssh.c + +libxc_la_FUNC_SINGLE_SOURCES = $(libxc_la_FUNC_SOURCES:.c=_s.c) + +libxc_la_SOURCES = $(libxc_la_FUNC_SOURCES) +libxc_la_LDFLAGS = -version-info $(XC_LT_VERSION) + +if COMPILE_SINGLE + nodist_libxc_la_SOURCES = $(libxc_la_FUNC_SINGLE_SOURCES) +endif + +if COMPILE_FORTRAN + lib_LTLIBRARIES += libxcf90.la + + libxcf90_la_SOURCES = xc_f.c libxc_funcs.f90 libxc.f90 +if COMPILE_SINGLE + nodist_libxcf90_la_SOURCES = xc_f_s.c libxc_s.f90 +endif + + # libtool stuff + libxcf90_la_LDFLAGS = -version-info $(XC_LT_VERSION) + libxcf90_la_LIBADD = libxc.la + + # this is a hack to go around buggy libtool/automake versions + libxcf90_la_LIBTOOLFLAGS = --tag=F77 +endif + +# this is a hack to go around buggy libtool/automake versions +LTFCCOMPILE = $(LIBTOOL) --mode=compile --tag=F77 $(FC) $(AM_FCFLAGS) $(FCFLAGS) +FCLINK = $(LIBTOOL) --mode=link --tag=F77 $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ + +dist_noinst_SCRIPTS = get_funcs.pl + +noinst_HEADERS = \ + string_f.h util.h work_lda.c \ + work_gga_x.c work_gga_c.c \ + work_mgga_x.c work_mgga_c.c \ + libxc_master.F90 +include_HEADERS = xc.h xc_config.h xc_unconfig.h +nodist_include_HEADERS = xc_funcs.h + +if COMPILE_SINGLE + include_HEADERS += xc_s.h +endif + +BUILT_SOURCES = xc_funcs.h + +## declare fortran modules so they are installed +if COMPILE_FORTRAN + +if F90_MOD_UPPERCASE + LIBFUNCMOD = LIBXC_FUNCS_M.@ax_cv_f90_modext@ +else + LIBFUNCMOD = libxc_funcs_m.@ax_cv_f90_modext@ +endif +nodist_include_HEADERS += $(LIBFUNCMOD) + +# Double precision modules are always compiled +if F90_MOD_UPPERCASE + XCLIBMODS = XC_F90_LIB_M.@ax_cv_f90_modext@ XC_F90_TYPES_M.@ax_cv_f90_modext@ +else + XCLIBMODS = xc_f90_lib_m.@ax_cv_f90_modext@ xc_f90_types_m.@ax_cv_f90_modext@ +endif +nodist_include_HEADERS += $(XCLIBMODS) + +if COMPILE_SINGLE + +if F90_MOD_UPPERCASE + XCLIBMODS_S = XC_S_F90_LIB_M.@ax_cv_f90_modext@ XC_S_F90_TYPES_M.@ax_cv_f90_modext@ +else + XCLIBMODS_S = xc_s_f90_lib_m.@ax_cv_f90_modext@ xc_s_f90_types_m.@ax_cv_f90_modext@ +endif +nodist_include_HEADERS += $(XCLIBMODS_S) + +endif # COMPILE_SINGLE + +endif # COMPILE_FORTRAN + +SUFFIXES = _s.c +.c_s.c: + @CPP@ -D SINGLE_PRECISION @CPPFLAGS@ $(INCLUDES) $(DEFAULT_INCLUDES) $(AM_CPPFLAGS) $< > $*_s.c + +CLEANFILES = *~ *.bak *.mod *.il *.d *.pc* ifc* funcs_*.c funcs.h \ + libxc.f90 libxc_funcs.f90 xc_funcs.h *_s.c *_s.f90 + +xc_funcs.h libxc_funcs.f90 funcs_lda.c funcs_gga.c funcs_hyb_gga.c funcs_mgga.c funcs_hyb_mgga.c funcs_key.c: get_funcs.pl + $(srcdir)/get_funcs.pl $(srcdir) $(top_builddir) + +LTPREF = $(subst xc_f.lo,,$(firstword $(am_libxcf90_la_OBJECTS))) +# Surprisingly, libtool/automake do not seem to provide a macro or variable for what the object names will be, +# so we have to extract it ourselves. LTPREF=libxcf90_la-, or blank for older libtool/automake versions. +# Produces these warnings on some systems. Does not seem to matter. +#src/Makefile.am:140: subst xc_f.lo,,$(firstword $(am_libxcf90_la_OBJECTS: non-POSIX variable name +#src/Makefile.am:140: (probably a GNU make extension) + +$(LIBFUNCMOD) : $(LTPREF)libxc_funcs.lo + +libxc.f90 : libxc_master.F90 + @FCCPP@ @CPPFLAGS@ $(AM_CPPFLAGS) $(srcdir)/libxc_master.F90 > $(top_builddir)/src/libxc.f90 + @if [ "@F90_ACCEPTS_LINE_NUMBERS@" = "no" ]; then \ + grep -v "^#" $(top_builddir)/src/libxc.f90 > $(top_builddir)/src/libxc.f91; \ + mv -f $(top_builddir)/src/libxc.f91 $(top_builddir)/src/libxc.f90; \ + fi +libxc_s.f90 : libxc_master.F90 + @FCCPP@ -D SINGLE_PRECISION @CPPFLAGS@ $(AM_CPPFLAGS) $(srcdir)/libxc_master.F90 > $(top_builddir)/src/libxc_s.f90 + @if [ "@F90_ACCEPTS_LINE_NUMBERS@" = "no" ]; then \ + grep -v "^#" $(top_builddir)/src/libxc_s.f90 > $(top_builddir)/src/libxc_s.f91; \ + mv -f $(top_builddir)/src/libxc_s.f91 $(top_builddir)/src/libxc_s.f90; \ + fi + +$(LTPREF)libxc.lo : $(LTPREF)libxc.o +$(LTPREF)libxc_s.lo: $(LTPREF)libxc_s.o + +$(LTPREF)libxc.o : $(LIBFUNCMOD) +$(LTPREF)libxc_s.o : $(LIBFUNCMOD) + +$(XCLIBMODS) : $(LTPREF)libxc.lo +$(XCLIBMODS_S) : $(LTPREF)libxc_s.lo diff --git a/libxc/src/Makefile.in b/libxc/src/Makefile.in new file mode 100644 index 000000000..7f07826d7 --- /dev/null +++ b/libxc/src/Makefile.in @@ -0,0 +1,1266 @@ +# Makefile.in generated by automake 1.13.4 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + + + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +bin_PROGRAMS = xc-info$(EXEEXT) +@COMPILE_FORTRAN_TRUE@am__append_1 = libxcf90.la +@COMPILE_SINGLE_TRUE@am__append_2 = xc_s.h +@COMPILE_FORTRAN_TRUE@am__append_3 = $(LIBFUNCMOD) $(XCLIBMODS) +@COMPILE_FORTRAN_TRUE@@COMPILE_SINGLE_TRUE@am__append_4 = $(XCLIBMODS_S) +subdir = src +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(dist_noinst_SCRIPTS) $(top_srcdir)/depcomp \ + $(am__include_HEADERS_DIST) $(noinst_HEADERS) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ac_prog_sed.m4 \ + $(top_srcdir)/m4/ax_f90_module_extension.m4 \ + $(top_srcdir)/m4/fc_integer.m4 $(top_srcdir)/m4/fcflags.m4 \ + $(top_srcdir)/m4/fortran.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \ + "$(DESTDIR)$(includedir)" "$(DESTDIR)$(includedir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +libxc_la_LIBADD = +am__objects_1 = special_functions.lo bessel.lo expint_e1.lo \ + integrate.lo util.lo mix_func.lo functionals.lo version.lo \ + lda.lo lda_x.lo lda_x_1d.lo lda_x_2d.lo lda_c_wigner.lo \ + lda_c_gombas.lo lda_c_rpa.lo lda_c_hl.lo lda_c_vwn.lo \ + lda_c_pz.lo lda_c_pw.lo lda_c_ml1.lo lda_c_rc04.lo \ + lda_xc_teter93.lo lda_c_1d_csc.lo lda_c_1d_loos.lo \ + lda_c_2d_amgb.lo lda_c_2d_prm.lo stoll.lo lda_k_tf.lo gga.lo \ + gga_x_lg93.lo gga_x_pbe.lo gga_x_rpbe.lo gga_x_pbea.lo \ + gga_x_mpbe.lo gga_x_herman.lo gga_x_b86.lo gga_x_b86_mgc.lo \ + gga_x_b88.lo gga_x_g96.lo gga_x_pw86.lo gga_x_pw91.lo \ + gga_x_optx.lo gga_x_airy.lo gga_x_c09x.lo gga_x_dk87.lo \ + gga_x_ft97.lo gga_x_wc.lo gga_x_am05.lo gga_x_bayesian.lo \ + gga_x_kt.lo gga_x_htbs.lo gga_c_pbe.lo gga_c_lyp.lo \ + gga_c_p86.lo gga_c_pw91.lo gga_c_am05.lo gga_c_lm.lo \ + gga_c_wl.lo gga_c_wi.lo gga_x_lb.lo gga_xc_b97.lo \ + gga_xc_edf1.lo gga_xc_1w.lo gga_c_optc.lo gga_c_tca.lo \ + gga_x_bpccac.lo gga_x_sogga11.lo gga_c_sogga11.lo gga_xc_th.lo \ + gga_x_wpbeh.lo gga_x_hjs.lo gga_x_ityh.lo gga_x_sfat.lo \ + gga_x_ak13.lo gga_x_q2d.lo gga_c_q2d.lo gga_x_ssb_sw.lo \ + gga_c_ft97.lo gga_c_op.lo gga_x_n12.lo gga_x_lv_rpw86.lo \ + gga_x_2d_b86.lo gga_x_2d_b86_mgc.lo gga_x_2d_b88.lo \ + gga_x_2d_pbe.lo gga_k_tflw.lo gga_k_pearson.lo gga_k_ol1.lo \ + gga_k_ol2.lo gga_k_dk.lo gga_k_meyer.lo gga_x_vmt.lo \ + gga_xc_oblyp_d.lo hyb_gga_xc_b3lyp.lo hyb_gga_xc_o3lyp.lo \ + hyb_gga_xc_pbeh.lo hyb_gga_xc_b1wc.lo hyb_gga_xc_b97.lo \ + hyb_gga_xc_hse.lo hyb_gga_xc_cam_b3lyp.lo \ + hyb_gga_xc_camy_blyp.lo mgga.lo mgga_x_lta.lo mgga_x_tpss.lo \ + mgga_x_br89.lo mgga_x_gvt4.lo mgga_x_m06l.lo \ + mgga_x_tau_hcth.lo mgga_x_2d_prhg07.lo mgga_x_pkzb.lo \ + mgga_x_m05.lo mgga_x_m08.lo mgga_x_ms.lo mgga_x_mn12.lo \ + mgga_x_mk00.lo mgga_c_vsxc.lo mgga_c_pkzb.lo mgga_c_bc95.lo \ + mgga_c_m08.lo mgga_c_cc06.lo mgga_c_cs.lo mgga_xc_otpss_d.lo \ + hyb_mgga_xc_m05.lo hyb_mgga_xc_tpssh.lo +am_libxc_la_OBJECTS = $(am__objects_1) +am__objects_2 = special_functions_s.lo bessel_s.lo expint_e1_s.lo \ + integrate_s.lo util_s.lo mix_func_s.lo functionals_s.lo \ + version_s.lo lda_s.lo lda_x_s.lo lda_x_1d_s.lo lda_x_2d_s.lo \ + lda_c_wigner_s.lo lda_c_gombas_s.lo lda_c_rpa_s.lo \ + lda_c_hl_s.lo lda_c_vwn_s.lo lda_c_pz_s.lo lda_c_pw_s.lo \ + lda_c_ml1_s.lo lda_c_rc04_s.lo lda_xc_teter93_s.lo \ + lda_c_1d_csc_s.lo lda_c_1d_loos_s.lo lda_c_2d_amgb_s.lo \ + lda_c_2d_prm_s.lo stoll_s.lo lda_k_tf_s.lo gga_s.lo \ + gga_x_lg93_s.lo gga_x_pbe_s.lo gga_x_rpbe_s.lo gga_x_pbea_s.lo \ + gga_x_mpbe_s.lo gga_x_herman_s.lo gga_x_b86_s.lo \ + gga_x_b86_mgc_s.lo gga_x_b88_s.lo gga_x_g96_s.lo \ + gga_x_pw86_s.lo gga_x_pw91_s.lo gga_x_optx_s.lo \ + gga_x_airy_s.lo gga_x_c09x_s.lo gga_x_dk87_s.lo \ + gga_x_ft97_s.lo gga_x_wc_s.lo gga_x_am05_s.lo \ + gga_x_bayesian_s.lo gga_x_kt_s.lo gga_x_htbs_s.lo \ + gga_c_pbe_s.lo gga_c_lyp_s.lo gga_c_p86_s.lo gga_c_pw91_s.lo \ + gga_c_am05_s.lo gga_c_lm_s.lo gga_c_wl_s.lo gga_c_wi_s.lo \ + gga_x_lb_s.lo gga_xc_b97_s.lo gga_xc_edf1_s.lo gga_xc_1w_s.lo \ + gga_c_optc_s.lo gga_c_tca_s.lo gga_x_bpccac_s.lo \ + gga_x_sogga11_s.lo gga_c_sogga11_s.lo gga_xc_th_s.lo \ + gga_x_wpbeh_s.lo gga_x_hjs_s.lo gga_x_ityh_s.lo \ + gga_x_sfat_s.lo gga_x_ak13_s.lo gga_x_q2d_s.lo gga_c_q2d_s.lo \ + gga_x_ssb_sw_s.lo gga_c_ft97_s.lo gga_c_op_s.lo gga_x_n12_s.lo \ + gga_x_lv_rpw86_s.lo gga_x_2d_b86_s.lo gga_x_2d_b86_mgc_s.lo \ + gga_x_2d_b88_s.lo gga_x_2d_pbe_s.lo gga_k_tflw_s.lo \ + gga_k_pearson_s.lo gga_k_ol1_s.lo gga_k_ol2_s.lo gga_k_dk_s.lo \ + gga_k_meyer_s.lo gga_x_vmt_s.lo gga_xc_oblyp_d_s.lo \ + hyb_gga_xc_b3lyp_s.lo hyb_gga_xc_o3lyp_s.lo \ + hyb_gga_xc_pbeh_s.lo hyb_gga_xc_b1wc_s.lo hyb_gga_xc_b97_s.lo \ + hyb_gga_xc_hse_s.lo hyb_gga_xc_cam_b3lyp_s.lo \ + hyb_gga_xc_camy_blyp_s.lo mgga_s.lo mgga_x_lta_s.lo \ + mgga_x_tpss_s.lo mgga_x_br89_s.lo mgga_x_gvt4_s.lo \ + mgga_x_m06l_s.lo mgga_x_tau_hcth_s.lo mgga_x_2d_prhg07_s.lo \ + mgga_x_pkzb_s.lo mgga_x_m05_s.lo mgga_x_m08_s.lo \ + mgga_x_ms_s.lo mgga_x_mn12_s.lo mgga_x_mk00_s.lo \ + mgga_c_vsxc_s.lo mgga_c_pkzb_s.lo mgga_c_bc95_s.lo \ + mgga_c_m08_s.lo mgga_c_cc06_s.lo mgga_c_cs_s.lo \ + mgga_xc_otpss_d_s.lo hyb_mgga_xc_m05_s.lo \ + hyb_mgga_xc_tpssh_s.lo +am__objects_3 = $(am__objects_2) +@COMPILE_SINGLE_TRUE@nodist_libxc_la_OBJECTS = $(am__objects_3) +libxc_la_OBJECTS = $(am_libxc_la_OBJECTS) $(nodist_libxc_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +libxc_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libxc_la_LDFLAGS) $(LDFLAGS) -o $@ +@COMPILE_FORTRAN_TRUE@libxcf90_la_DEPENDENCIES = libxc.la +am__libxcf90_la_SOURCES_DIST = xc_f.c libxc_funcs.f90 libxc.f90 +@COMPILE_FORTRAN_TRUE@am_libxcf90_la_OBJECTS = libxcf90_la-xc_f.lo \ +@COMPILE_FORTRAN_TRUE@ libxcf90_la-libxc_funcs.lo \ +@COMPILE_FORTRAN_TRUE@ libxcf90_la-libxc.lo +@COMPILE_FORTRAN_TRUE@@COMPILE_SINGLE_TRUE@nodist_libxcf90_la_OBJECTS = libxcf90_la-xc_f_s.lo \ +@COMPILE_FORTRAN_TRUE@@COMPILE_SINGLE_TRUE@ libxcf90_la-libxc_s.lo +libxcf90_la_OBJECTS = $(am_libxcf90_la_OBJECTS) \ + $(nodist_libxcf90_la_OBJECTS) +libxcf90_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=FC \ + $(libxcf90_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \ + $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) $(libxcf90_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +@COMPILE_FORTRAN_TRUE@am_libxcf90_la_rpath = -rpath $(libdir) +PROGRAMS = $(bin_PROGRAMS) +am_xc_info_OBJECTS = xc-info.$(OBJEXT) +xc_info_OBJECTS = $(am_xc_info_OBJECTS) +xc_info_DEPENDENCIES = libxc.la +xc_info_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(xc_info_LDFLAGS) $(LDFLAGS) -o $@ +SCRIPTS = $(dist_noinst_SCRIPTS) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +FCCOMPILE = $(FC) $(AM_FCFLAGS) $(FCFLAGS) +AM_V_FC = $(am__v_FC_@AM_V@) +am__v_FC_ = $(am__v_FC_@AM_DEFAULT_V@) +am__v_FC_0 = @echo " FC " $@; +am__v_FC_1 = +FCLD = $(FC) +AM_V_FCLD = $(am__v_FCLD_@AM_V@) +am__v_FCLD_ = $(am__v_FCLD_@AM_DEFAULT_V@) +am__v_FCLD_0 = @echo " FCLD " $@; +am__v_FCLD_1 = +SOURCES = $(libxc_la_SOURCES) $(nodist_libxc_la_SOURCES) \ + $(libxcf90_la_SOURCES) $(nodist_libxcf90_la_SOURCES) \ + $(xc_info_SOURCES) +DIST_SOURCES = $(libxc_la_SOURCES) $(am__libxcf90_la_SOURCES_DIST) \ + $(xc_info_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__include_HEADERS_DIST = xc.h xc_config.h xc_unconfig.h xc_s.h +HEADERS = $(include_HEADERS) $(nodist_include_HEADERS) \ + $(noinst_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F90_ACCEPTS_LINE_NUMBERS = @F90_ACCEPTS_LINE_NUMBERS@ +FC = @FC@ +FCCPP = @FCCPP@ +FCFLAGS = @FCFLAGS@ +FCFLAGS_f90 = @FCFLAGS_f90@ +FCLIBS = @FCLIBS@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LONG_LINES = @LONG_LINES@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +XC_LT_VERSION = @XC_LT_VERSION@ +XC_MAJOR_VERSION = @XC_MAJOR_VERSION@ +XC_MINOR_VERSION = @XC_MINOR_VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_FC = @ac_ct_FC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +ax_cv_f90_modext = @ax_cv_f90_modext@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +xc_info_SOURCES = xc-info.c +xc_info_LDFLAGS = -lm +xc_info_LDADD = libxc.la +lib_LTLIBRARIES = libxc.la $(am__append_1) +libxc_la_FUNC_SOURCES = \ + special_functions.c bessel.c expint_e1.c integrate.c util.c mix_func.c functionals.c \ + version.c \ + lda.c lda_x.c lda_x_1d.c lda_x_2d.c \ + lda_c_wigner.c lda_c_gombas.c lda_c_rpa.c lda_c_hl.c \ + lda_c_vwn.c lda_c_pz.c lda_c_pw.c lda_c_ml1.c lda_c_rc04.c lda_xc_teter93.c \ + lda_c_1d_csc.c lda_c_1d_loos.c \ + lda_c_2d_amgb.c lda_c_2d_prm.c stoll.c \ + lda_k_tf.c \ + gga.c \ + gga_x_lg93.c gga_x_pbe.c gga_x_rpbe.c gga_x_pbea.c gga_x_mpbe.c gga_x_herman.c gga_x_b86.c gga_x_b86_mgc.c \ + gga_x_b88.c gga_x_g96.c gga_x_pw86.c gga_x_pw91.c gga_x_optx.c gga_x_airy.c gga_x_c09x.c \ + gga_x_dk87.c gga_x_ft97.c gga_x_wc.c gga_x_am05.c gga_x_bayesian.c gga_x_kt.c gga_x_htbs.c \ + gga_c_pbe.c gga_c_lyp.c gga_c_p86.c gga_c_pw91.c gga_c_am05.c gga_c_lm.c gga_c_wl.c gga_c_wi.c \ + gga_x_lb.c gga_xc_b97.c gga_xc_edf1.c gga_xc_1w.c gga_c_optc.c gga_c_tca.c gga_x_bpccac.c \ + gga_x_sogga11.c gga_c_sogga11.c gga_xc_th.c gga_x_wpbeh.c gga_x_hjs.c gga_x_ityh.c gga_x_sfat.c \ + gga_x_ak13.c gga_x_q2d.c gga_c_q2d.c \ + gga_x_ssb_sw.c gga_c_ft97.c gga_c_op.c gga_x_n12.c gga_x_lv_rpw86.c \ + gga_x_2d_b86.c gga_x_2d_b86_mgc.c gga_x_2d_b88.c gga_x_2d_pbe.c \ + gga_k_tflw.c gga_k_pearson.c gga_k_ol1.c gga_k_ol2.c gga_k_dk.c gga_k_meyer.c \ + gga_x_vmt.c gga_xc_oblyp_d.c \ + hyb_gga_xc_b3lyp.c hyb_gga_xc_o3lyp.c hyb_gga_xc_pbeh.c hyb_gga_xc_b1wc.c \ + hyb_gga_xc_b97.c hyb_gga_xc_hse.c hyb_gga_xc_cam_b3lyp.c hyb_gga_xc_camy_blyp.c \ + mgga.c \ + mgga_x_lta.c mgga_x_tpss.c mgga_x_br89.c mgga_x_gvt4.c mgga_x_m06l.c mgga_x_tau_hcth.c \ + mgga_x_2d_prhg07.c mgga_x_pkzb.c mgga_x_m05.c mgga_x_m08.c mgga_x_ms.c mgga_x_mn12.c mgga_x_mk00.c \ + mgga_c_vsxc.c mgga_c_pkzb.c mgga_c_bc95.c mgga_c_m08.c mgga_c_cc06.c mgga_c_cs.c mgga_xc_otpss_d.c \ + hyb_mgga_xc_m05.c hyb_mgga_xc_tpssh.c + +libxc_la_FUNC_SINGLE_SOURCES = $(libxc_la_FUNC_SOURCES:.c=_s.c) +libxc_la_SOURCES = $(libxc_la_FUNC_SOURCES) +libxc_la_LDFLAGS = -version-info $(XC_LT_VERSION) +@COMPILE_SINGLE_TRUE@nodist_libxc_la_SOURCES = $(libxc_la_FUNC_SINGLE_SOURCES) +@COMPILE_FORTRAN_TRUE@libxcf90_la_SOURCES = xc_f.c libxc_funcs.f90 libxc.f90 +@COMPILE_FORTRAN_TRUE@@COMPILE_SINGLE_TRUE@nodist_libxcf90_la_SOURCES = xc_f_s.c libxc_s.f90 +@COMPILE_FORTRAN_TRUE@libxcf90_la_LDFLAGS = -version-info $(XC_LT_VERSION) +@COMPILE_FORTRAN_TRUE@libxcf90_la_LIBADD = libxc.la +@COMPILE_FORTRAN_TRUE@libxcf90_la_LIBTOOLFLAGS = --tag=F77 + +# this is a hack to go around buggy libtool/automake versions +LTFCCOMPILE = $(LIBTOOL) --mode=compile --tag=F77 $(FC) $(AM_FCFLAGS) $(FCFLAGS) +FCLINK = $(LIBTOOL) --mode=link --tag=F77 $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ + +dist_noinst_SCRIPTS = get_funcs.pl +noinst_HEADERS = \ + string_f.h util.h work_lda.c \ + work_gga_x.c work_gga_c.c \ + work_mgga_x.c work_mgga_c.c \ + libxc_master.F90 + +include_HEADERS = xc.h xc_config.h xc_unconfig.h $(am__append_2) +nodist_include_HEADERS = xc_funcs.h $(am__append_3) $(am__append_4) +BUILT_SOURCES = xc_funcs.h +@COMPILE_FORTRAN_TRUE@@F90_MOD_UPPERCASE_FALSE@LIBFUNCMOD = libxc_funcs_m.@ax_cv_f90_modext@ +@COMPILE_FORTRAN_TRUE@@F90_MOD_UPPERCASE_TRUE@LIBFUNCMOD = LIBXC_FUNCS_M.@ax_cv_f90_modext@ +@COMPILE_FORTRAN_TRUE@@F90_MOD_UPPERCASE_FALSE@XCLIBMODS = xc_f90_lib_m.@ax_cv_f90_modext@ xc_f90_types_m.@ax_cv_f90_modext@ + +# Double precision modules are always compiled +@COMPILE_FORTRAN_TRUE@@F90_MOD_UPPERCASE_TRUE@XCLIBMODS = XC_F90_LIB_M.@ax_cv_f90_modext@ XC_F90_TYPES_M.@ax_cv_f90_modext@ +@COMPILE_FORTRAN_TRUE@@COMPILE_SINGLE_TRUE@@F90_MOD_UPPERCASE_FALSE@XCLIBMODS_S = xc_s_f90_lib_m.@ax_cv_f90_modext@ xc_s_f90_types_m.@ax_cv_f90_modext@ +@COMPILE_FORTRAN_TRUE@@COMPILE_SINGLE_TRUE@@F90_MOD_UPPERCASE_TRUE@XCLIBMODS_S = XC_S_F90_LIB_M.@ax_cv_f90_modext@ XC_S_F90_TYPES_M.@ax_cv_f90_modext@ +SUFFIXES = _s.c +CLEANFILES = *~ *.bak *.mod *.il *.d *.pc* ifc* funcs_*.c funcs.h \ + libxc.f90 libxc_funcs.f90 xc_funcs.h *_s.c *_s.f90 + +LTPREF = $(subst xc_f.lo,,$(firstword $(am_libxcf90_la_OBJECTS))) +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: _s.c .c .f90 .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libxc.la: $(libxc_la_OBJECTS) $(libxc_la_DEPENDENCIES) $(EXTRA_libxc_la_DEPENDENCIES) + $(AM_V_CCLD)$(libxc_la_LINK) -rpath $(libdir) $(libxc_la_OBJECTS) $(libxc_la_LIBADD) $(LIBS) + +libxcf90.la: $(libxcf90_la_OBJECTS) $(libxcf90_la_DEPENDENCIES) $(EXTRA_libxcf90_la_DEPENDENCIES) + $(AM_V_FCLD)$(libxcf90_la_LINK) $(am_libxcf90_la_rpath) $(libxcf90_la_OBJECTS) $(libxcf90_la_LIBADD) $(LIBS) +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + || test -f $$p1 \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +xc-info$(EXEEXT): $(xc_info_OBJECTS) $(xc_info_DEPENDENCIES) $(EXTRA_xc_info_DEPENDENCIES) + @rm -f xc-info$(EXEEXT) + $(AM_V_CCLD)$(xc_info_LINK) $(xc_info_OBJECTS) $(xc_info_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bessel_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/expint_e1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/expint_e1_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/functionals.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/functionals_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_am05.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_am05_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_ft97.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_ft97_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_lm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_lm_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_lyp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_lyp_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_op.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_op_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_optc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_optc_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_p86.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_p86_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_pbe.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_pbe_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_pw91.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_pw91_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_q2d.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_q2d_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_sogga11.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_sogga11_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_tca.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_tca_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_wi.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_wi_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_wl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_c_wl_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_k_dk.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_k_dk_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_k_meyer.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_k_meyer_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_k_ol1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_k_ol1_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_k_ol2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_k_ol2_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_k_pearson.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_k_pearson_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_k_tflw.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_k_tflw_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_2d_b86.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_2d_b86_mgc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_2d_b86_mgc_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_2d_b86_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_2d_b88.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_2d_b88_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_2d_pbe.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_2d_pbe_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_airy.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_airy_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_ak13.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_ak13_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_am05.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_am05_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_b86.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_b86_mgc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_b86_mgc_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_b86_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_b88.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_b88_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_bayesian.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_bayesian_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_bpccac.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_bpccac_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_c09x.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_c09x_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_dk87.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_dk87_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_ft97.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_ft97_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_g96.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_g96_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_herman.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_herman_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_hjs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_hjs_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_htbs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_htbs_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_ityh.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_ityh_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_kt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_kt_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_lb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_lb_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_lg93.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_lg93_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_lv_rpw86.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_lv_rpw86_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_mpbe.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_mpbe_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_n12.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_n12_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_optx.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_optx_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_pbe.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_pbe_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_pbea.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_pbea_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_pw86.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_pw86_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_pw91.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_pw91_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_q2d.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_q2d_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_rpbe.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_rpbe_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_sfat.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_sfat_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_sogga11.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_sogga11_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_ssb_sw.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_ssb_sw_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_vmt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_vmt_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_wc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_wc_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_wpbeh.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_x_wpbeh_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_xc_1w.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_xc_1w_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_xc_b97.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_xc_b97_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_xc_edf1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_xc_edf1_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_xc_oblyp_d.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_xc_oblyp_d_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_xc_th.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gga_xc_th_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_b1wc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_b1wc_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_b3lyp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_b3lyp_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_b97.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_b97_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_cam_b3lyp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_cam_b3lyp_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_camy_blyp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_camy_blyp_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_hse.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_hse_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_o3lyp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_o3lyp_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_pbeh.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_gga_xc_pbeh_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_mgga_xc_m05.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_mgga_xc_m05_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_mgga_xc_tpssh.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyb_mgga_xc_tpssh_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/integrate.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/integrate_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_1d_csc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_1d_csc_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_1d_loos.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_1d_loos_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_2d_amgb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_2d_amgb_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_2d_prm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_2d_prm_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_gombas.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_gombas_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_hl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_hl_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_ml1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_ml1_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_pw.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_pw_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_pz.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_pz_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_rc04.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_rc04_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_rpa.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_rpa_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_vwn.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_vwn_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_wigner.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_c_wigner_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_k_tf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_k_tf_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_x.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_x_1d.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_x_1d_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_x_2d.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_x_2d_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_x_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_xc_teter93.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda_xc_teter93_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libxcf90_la-xc_f.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libxcf90_la-xc_f_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_c_bc95.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_c_bc95_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_c_cc06.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_c_cc06_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_c_cs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_c_cs_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_c_m08.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_c_m08_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_c_pkzb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_c_pkzb_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_c_vsxc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_c_vsxc_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_2d_prhg07.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_2d_prhg07_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_br89.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_br89_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_gvt4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_gvt4_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_lta.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_lta_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_m05.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_m05_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_m06l.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_m06l_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_m08.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_m08_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_mk00.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_mk00_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_mn12.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_mn12_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_ms.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_ms_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_pkzb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_pkzb_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_tau_hcth.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_tau_hcth_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_tpss.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_x_tpss_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_xc_otpss_d.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mgga_xc_otpss_d_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mix_func.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mix_func_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/special_functions.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/special_functions_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stoll.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stoll_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xc-info.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +libxcf90_la-xc_f.lo: xc_f.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libxcf90_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libxcf90_la-xc_f.lo -MD -MP -MF $(DEPDIR)/libxcf90_la-xc_f.Tpo -c -o libxcf90_la-xc_f.lo `test -f 'xc_f.c' || echo '$(srcdir)/'`xc_f.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libxcf90_la-xc_f.Tpo $(DEPDIR)/libxcf90_la-xc_f.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xc_f.c' object='libxcf90_la-xc_f.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libxcf90_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libxcf90_la-xc_f.lo `test -f 'xc_f.c' || echo '$(srcdir)/'`xc_f.c + +libxcf90_la-xc_f_s.lo: xc_f_s.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libxcf90_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libxcf90_la-xc_f_s.lo -MD -MP -MF $(DEPDIR)/libxcf90_la-xc_f_s.Tpo -c -o libxcf90_la-xc_f_s.lo `test -f 'xc_f_s.c' || echo '$(srcdir)/'`xc_f_s.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libxcf90_la-xc_f_s.Tpo $(DEPDIR)/libxcf90_la-xc_f_s.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xc_f_s.c' object='libxcf90_la-xc_f_s.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libxcf90_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libxcf90_la-xc_f_s.lo `test -f 'xc_f_s.c' || echo '$(srcdir)/'`xc_f_s.c + +.f90.o: + $(AM_V_FC)$(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) $< + +.f90.obj: + $(AM_V_FC)$(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) `$(CYGPATH_W) '$<'` + +.f90.lo: + $(AM_V_FC)$(LTFCCOMPILE) -c -o $@ $(FCFLAGS_f90) $< + +libxcf90_la-libxc_funcs.lo: libxc_funcs.f90 + $(AM_V_FC)$(LIBTOOL) $(AM_V_lt) --tag=FC $(libxcf90_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(AM_FCFLAGS) $(FCFLAGS) -c -o libxcf90_la-libxc_funcs.lo $(FCFLAGS_f90) `test -f 'libxc_funcs.f90' || echo '$(srcdir)/'`libxc_funcs.f90 + +libxcf90_la-libxc.lo: libxc.f90 + $(AM_V_FC)$(LIBTOOL) $(AM_V_lt) --tag=FC $(libxcf90_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(AM_FCFLAGS) $(FCFLAGS) -c -o libxcf90_la-libxc.lo $(FCFLAGS_f90) `test -f 'libxc.f90' || echo '$(srcdir)/'`libxc.f90 + +libxcf90_la-libxc_s.lo: libxc_s.f90 + $(AM_V_FC)$(LIBTOOL) $(AM_V_lt) --tag=FC $(libxcf90_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(AM_FCFLAGS) $(FCFLAGS) -c -o libxcf90_la-libxc_s.lo $(FCFLAGS_f90) `test -f 'libxc_s.f90' || echo '$(srcdir)/'`libxc_s.f90 + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-includeHEADERS: $(include_HEADERS) + @$(NORMAL_INSTALL) + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ + done + +uninstall-includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) +install-nodist_includeHEADERS: $(nodist_include_HEADERS) + @$(NORMAL_INSTALL) + @list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ + done + +uninstall-nodist_includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(SCRIPTS) $(HEADERS) +install-binPROGRAMS: install-libLTLIBRARIES + +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(includedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \ + clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-includeHEADERS install-nodist_includeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-includeHEADERS \ + uninstall-libLTLIBRARIES uninstall-nodist_includeHEADERS + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ + clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \ + clean-libtool cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-binPROGRAMS install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am \ + install-includeHEADERS install-info install-info-am \ + install-libLTLIBRARIES install-man \ + install-nodist_includeHEADERS install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \ + uninstall-includeHEADERS uninstall-libLTLIBRARIES \ + uninstall-nodist_includeHEADERS + + +@COMPILE_FORTRAN_TRUE@ # libtool stuff + +@COMPILE_FORTRAN_TRUE@ # this is a hack to go around buggy libtool/automake versions +.c_s.c: + @CPP@ -D SINGLE_PRECISION @CPPFLAGS@ $(INCLUDES) $(DEFAULT_INCLUDES) $(AM_CPPFLAGS) $< > $*_s.c + +xc_funcs.h libxc_funcs.f90 funcs_lda.c funcs_gga.c funcs_hyb_gga.c funcs_mgga.c funcs_hyb_mgga.c funcs_key.c: get_funcs.pl + $(srcdir)/get_funcs.pl $(srcdir) $(top_builddir) +# Surprisingly, libtool/automake do not seem to provide a macro or variable for what the object names will be, +# so we have to extract it ourselves. LTPREF=libxcf90_la-, or blank for older libtool/automake versions. +# Produces these warnings on some systems. Does not seem to matter. +#src/Makefile.am:140: subst xc_f.lo,,$(firstword $(am_libxcf90_la_OBJECTS: non-POSIX variable name +#src/Makefile.am:140: (probably a GNU make extension) + +$(LIBFUNCMOD) : $(LTPREF)libxc_funcs.lo + +libxc.f90 : libxc_master.F90 + @FCCPP@ @CPPFLAGS@ $(AM_CPPFLAGS) $(srcdir)/libxc_master.F90 > $(top_builddir)/src/libxc.f90 + @if [ "@F90_ACCEPTS_LINE_NUMBERS@" = "no" ]; then \ + grep -v "^#" $(top_builddir)/src/libxc.f90 > $(top_builddir)/src/libxc.f91; \ + mv -f $(top_builddir)/src/libxc.f91 $(top_builddir)/src/libxc.f90; \ + fi +libxc_s.f90 : libxc_master.F90 + @FCCPP@ -D SINGLE_PRECISION @CPPFLAGS@ $(AM_CPPFLAGS) $(srcdir)/libxc_master.F90 > $(top_builddir)/src/libxc_s.f90 + @if [ "@F90_ACCEPTS_LINE_NUMBERS@" = "no" ]; then \ + grep -v "^#" $(top_builddir)/src/libxc_s.f90 > $(top_builddir)/src/libxc_s.f91; \ + mv -f $(top_builddir)/src/libxc_s.f91 $(top_builddir)/src/libxc_s.f90; \ + fi + +$(LTPREF)libxc.lo : $(LTPREF)libxc.o +$(LTPREF)libxc_s.lo: $(LTPREF)libxc_s.o + +$(LTPREF)libxc.o : $(LIBFUNCMOD) +$(LTPREF)libxc_s.o : $(LIBFUNCMOD) + +$(XCLIBMODS) : $(LTPREF)libxc.lo +$(XCLIBMODS_S) : $(LTPREF)libxc_s.lo + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libxc/src/bessel.c b/libxc/src/bessel.c new file mode 100644 index 000000000..7f1be2964 --- /dev/null +++ b/libxc/src/bessel.c @@ -0,0 +1,263 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +static FLOAT bi0_data[12] = { + -.07660547252839144951, 1.92733795399380827000, .22826445869203013390, .01304891466707290428, .00043442709008164874, + .00000942265768600193, .00000014340062895106, .00000000161384906966, .00000000001396650044, .00000000000009579451, + .00000000000000053339, .00000000000000000245 +}; + +static FLOAT ai0_data[21] = { + .07575994494023796, .00759138081082334, .00041531313389237, .00001070076463439, -.00000790117997921, + -.00000078261435014, .00000027838499429, .00000000825247260, -.00000001204463945, .00000000155964859, + .00000000022925563, -.00000000011916228, .00000000001757854, .00000000000112822, -.00000000000114684, + .00000000000027155, -.00000000000002415, -.00000000000000608, .00000000000000314, -.00000000000000071, + .00000000000000007 +}; + +static FLOAT ai02_data[22] = { + .05449041101410882, .00336911647825569, .00006889758346918, .00000289137052082, .00000020489185893, + .00000002266668991, .00000000339623203, .00000000049406022, .00000000001188914, -.00000000003149915, + -.00000000001321580, -.00000000000179419, .00000000000071801, .00000000000038529, .00000000000001539, + -.00000000000004151, -.00000000000000954, .00000000000000382, .00000000000000176, -.00000000000000034, + -.00000000000000027, .00000000000000003 +}; + +/* + Compute the exponentially scaled modified (hyperbolic) + Bessel function of the first kind of order zero. + + based on the SLATEC routine by W. Fullerton +*/ +FLOAT XC(bessel_I0_scaled)(const FLOAT x) +{ + FLOAT y = ABS(x), r = 0.0; + + if(y < 2.0*SQRT_FLOAT_EPSILON) + r = 1.0 - y; + else if(y <= 3.0) + r = EXP(-y)*(2.75 + XC(cheb_eval)(y*y/4.5-1.0, bi0_data, 12)); + else if(y <= 8.0) + r = (.375 + XC(cheb_eval)((48.0/y - 11.0)/5.0, ai0_data, 21))/SQRT(y); + else + r = (.375 + XC(cheb_eval)(16.0/y - 1.0, ai02_data, 22))/SQRT(y); + + return r; +} + + +/* + Compute the hyperbolic Bessel function of the first kind + of order zero. + + based on the SLATEC routine by W. Fullerton +*/ +FLOAT XC(bessel_I0)(const FLOAT x) +{ + FLOAT y = ABS(x), r = 0.0; + + if(y < 2.0*SQRT_FLOAT_EPSILON) + r = 1.0; + else if(y <= 3.0) + r = 2.75 + XC(cheb_eval)(y*y/4.5 - 1.0, bi0_data, 12); + else if(y < LOG_FLOAT_MAX - 1.0) + r = EXP(y) * XC(bessel_I0_scaled)(x); + else + fprintf(stderr, "Overflow in bessel_I0\n"); + + return r; +} + +static FLOAT bi1_data[11] = { + -0.001971713261099859, 0.407348876675464810, 0.034838994299959456, 0.001545394556300123, 0.000041888521098377, + 0.000000764902676483, 0.000000010042493924, 0.000000000099322077, 0.000000000000766380, 0.000000000000004741, + 0.000000000000000024 +}; + +static FLOAT ai1_data[21] = { + -0.02846744181881479, -0.01922953231443221, -0.00061151858579437, -0.00002069971253350, 0.00000858561914581, + 0.00000104949824671, -0.00000029183389184, -0.00000001559378146, 0.00000001318012367, -0.00000000144842341, + -0.00000000029085122, 0.00000000012663889, -0.00000000001664947, -0.00000000000166665, 0.00000000000124260, + -0.00000000000027315, 0.00000000000002023, 0.00000000000000730, -0.00000000000000333, 0.00000000000000071, + -0.00000000000000006 +}; + +static FLOAT ai12_data[22] = { + 0.02857623501828014, -0.00976109749136147, -0.00011058893876263, -0.00000388256480887, -0.00000025122362377, + -0.00000002631468847, -0.00000000383538039, -0.00000000055897433, -0.00000000001897495, 0.00000000003252602, + 0.00000000001412580, 0.00000000000203564, -0.00000000000071985, -0.00000000000040836, -0.00000000000002101, + 0.00000000000004273, 0.00000000000001041, -0.00000000000000382, -0.00000000000000186, 0.00000000000000033, + 0.00000000000000028, -0.00000000000000003 +}; + + +FLOAT XC(bessel_I1_scaled)(const FLOAT x) +{ + const FLOAT xmin = 2.0 * FLOAT_MIN; + const FLOAT x_small = 2.0 * M_SQRT2 * SQRT_FLOAT_EPSILON; + const FLOAT y = ABS(x); + FLOAT r = 0.0; + + if(y == 0.0) + r = 0.0; + else if(y < xmin) + fprintf(stderr, "Underflow error in bessel_I1_scaled\n"); + else if(y < x_small) + r = 0.5*x*EXP(-y); + else if(y <= 3.0) + r = x*EXP(-y)*(0.875 + XC(cheb_eval)(y*y/4.5 - 1.0, bi1_data, 11)); + else{ + if(y <= 8.0) + r = (0.375 + XC(cheb_eval)((48.0/y - 11.0)/5.0, ai1_data, 21))/SQRT(y); + else + r = (0.375 + XC(cheb_eval)(16.0/y - 1.0, ai12_data, 22))/SQRT(y); + + r *= (x > 0.0 ? 1.0 : -1.0); + } + + return r; +} + +FLOAT XC(bessel_I1)(const FLOAT x) +{ + const FLOAT xmin = 2.0 * FLOAT_MIN; + const FLOAT x_small = 2.0 * M_SQRT2 * SQRT_FLOAT_EPSILON; + const FLOAT y = ABS(x); + FLOAT r = 0.0; + + if(y == 0.0) + r = 0.0; + else if(y < xmin) + fprintf(stderr, "Underflow error in bessel_I1\n"); + else if(y < x_small) + r = 0.5*x; + else if(y <= 3.0) + r = x*(0.875 + XC(cheb_eval)(y*y/4.5 - 1.0, bi1_data, 11)); + else + r = EXP(x)*XC(bessel_I1_scaled(x)); + + return r; +} + +static FLOAT bk0_data[11] = { + -0.03532739323390276872, 0.3442898999246284869, 0.03597993651536150163, 0.00126461541144692592, 0.00002286212103119451, + 0.00000025347910790261, 0.00000000190451637722, 0.00000000001034969525, 0.00000000000004259816, 0.00000000000000013744, + 0.00000000000000000035 +}; + +static FLOAT ak0_data[17] = { + -0.07643947903327941, -0.02235652605699819, 0.00077341811546938, -0.00004281006688886, 0.00000308170017386, + -0.00000026393672220, 0.00000002563713036, -0.00000000274270554, 0.00000000031694296, -0.00000000003902353, + 0.00000000000506804, -0.00000000000068895, 0.00000000000009744, -0.00000000000001427, 0.00000000000000215, + -0.00000000000000033, 0.00000000000000005 +}; + +static FLOAT ak02_data[14] = { + -0.01201869826307592, -0.00917485269102569, 0.00014445509317750, -0.00000401361417543, 0.00000015678318108, + -0.00000000777011043, 0.00000000046111825, -0.00000000003158592, 0.00000000000243501, -0.00000000000020743, + 0.00000000000001925, -0.00000000000000192, 0.00000000000000020, -0.00000000000000002 +}; + + +FLOAT XC(bessel_K0_scaled)(const FLOAT x) +{ + FLOAT r = 0.0; + + if(x <= 0.0) + fprintf(stderr, "Domain error in bessel_K0_scaled\n"); + else if(x <= 2.0) + r = EXP(x)*(-LOG(0.5*x)*XC(bessel_I0)(x) - 0.25 + XC(cheb_eval)(0.5*x*x - 1.0, bk0_data, 11)); + else if(x <= 8.0) + r = (1.25 + XC(cheb_eval)((16.0/x - 5.0)/3.0, ak0_data, 17))/SQRT(x); + else + r = (1.25 + XC(cheb_eval)(16.0/x - 1.0, ak02_data, 14))/SQRT(x); + + return r; +} + +FLOAT XC(bessel_K0)(const FLOAT x) +{ + FLOAT r = 0.0; + + if(x <= 0.0) + fprintf(stderr, "Domain error in bessel_K0\n"); + else if(x <= 2.0) + r = -LOG(0.5*x)*XC(bessel_I0)(x) - 0.25 + XC(cheb_eval)(0.5*x*x - 1.0, bk0_data, 11); + else + r = EXP(-x)*XC(bessel_K0_scaled)(x); + + return r; +} + + +static FLOAT bk1_data[11] = { + 0.0253002273389477705, -0.3531559607765448760, -0.1226111808226571480, -0.0069757238596398643, -0.0001730288957513052, + -0.0000024334061415659, -0.0000000221338763073, -0.0000000001411488392, -0.0000000000006666901, -0.0000000000000024274, + -0.0000000000000000070 +}; + +static FLOAT ak1_data[17] = { + 0.27443134069738830, 0.07571989953199368, -0.00144105155647540, 0.00006650116955125, -0.00000436998470952, + 0.00000035402774997, -0.00000003311163779, 0.00000000344597758, -0.00000000038989323, 0.00000000004720819, + -0.00000000000604783, 0.00000000000081284, -0.00000000000011386, 0.00000000000001654, -0.00000000000000248, + 0.00000000000000038, -0.00000000000000006 +}; + +static FLOAT ak12_data[14] = { + 0.06379308343739001, 0.02832887813049721, -0.00024753706739052, 0.00000577197245160, -0.00000020689392195, + 0.00000000973998344, -0.00000000055853361, 0.00000000003732996, -0.00000000000282505, 0.00000000000023720, + -0.00000000000002176, 0.00000000000000215, -0.00000000000000022, 0.00000000000000002 +}; + +FLOAT XC(bessel_K1_scaled)(const FLOAT x) +{ + FLOAT r = 0.0; + + if(x <= 0.0) + fprintf(stderr, "Domain error in bessel_K1_scaled\n"); + else if(x <= 2.0) + r = EXP(x)*(LOG(0.5*x)*XC(bessel_I1)(x) + + (0.75 + XC(cheb_eval)(.5*x*x - 1.0, bk1_data, 11))/x); + else if(x <= 8.0) + r = (1.25 + XC(cheb_eval)((16.0/x - 5.0)/3.0, ak1_data, 17))/SQRT(x); + else + r = (1.25 + XC(cheb_eval)(16.0/x - 1.0, ak12_data, 14))/SQRT(x); + + return r; +} + + +FLOAT XC(bessel_K1)(const FLOAT x) +{ + FLOAT r = 0.0; + + if(x <= 0.0) + fprintf(stderr, "Domain error in bessel_K1\n"); + else if(x<2.0*FLOAT_MIN) + fprintf(stderr, "Overflow error in bessel_K1\n"); + else if(x <= 2.0) + r = LOG(0.5*x)*XC(bessel_I1)(x) + (0.75 + XC(cheb_eval)(0.5*x*x - 1.0, bk1_data, 11))/x; + else + r = EXP(-x)*XC(bessel_K1_scaled)(x); + + return r; +} diff --git a/libxc/src/expint_e1.c b/libxc/src/expint_e1.c new file mode 100644 index 000000000..8d5cff035 --- /dev/null +++ b/libxc/src/expint_e1.c @@ -0,0 +1,124 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +/* expint_E1 calculates the exponential integral, E1(X), for positive + argument X and the Cauchy principal value for negative X. If + principal values are used everywhere, then, for all X, + + E1(X) = -Ei(-X) + or + Ei(X) = -E1(-X). + + Based on the SLATEC routine by W. Fullerton and on the GSL. +*/ +static FLOAT AE11_data[39] = { + 0.121503239716065790, -0.065088778513550150, 0.004897651357459670, -0.000649237843027216, 0.000093840434587471, + 0.000000420236380882, -0.000008113374735904, 0.000002804247688663, 0.000000056487164441, -0.000000344809174450, + 0.000000058209273578, 0.000000038711426349, -0.000000012453235014, -0.000000005118504888, 0.000000002148771527, + 0.000000000868459898, -0.000000000343650105, -0.000000000179796603, 0.000000000047442060, 0.000000000040423282, + -0.000000000003543928, -0.000000000008853444, -0.000000000000960151, 0.000000000001692921, 0.000000000000607990, + -0.000000000000224338, -0.000000000000200327, -0.000000000000006246, 0.000000000000045571, 0.000000000000016383, + -0.000000000000005561, -0.000000000000006074, -0.000000000000000862, 0.000000000000001223, 0.000000000000000716, + -0.000000000000000024, -0.000000000000000201, -0.000000000000000082, 0.000000000000000017 +}; + +static FLOAT AE12_data[25] = { + 0.582417495134726740, -0.158348850905782750, -0.006764275590323141, 0.005125843950185725, 0.000435232492169391, + -0.000143613366305483, -0.000041801320556301, -0.000002713395758640, 0.000001151381913647, 0.000000420650022012, + 0.000000066581901391, 0.000000000662143777, -0.000000002844104870, -0.000000000940724197, -0.000000000177476602, + -0.000000000015830222, 0.000000000002905732, 0.000000000001769356, 0.000000000000492735, 0.000000000000093709, + 0.000000000000010707, -0.000000000000000537, -0.000000000000000716, -0.000000000000000244, -0.000000000000000058 +}; + +static FLOAT E11_data[19] = { + -16.11346165557149402600, 7.79407277874268027690, -1.95540581886314195070, 0.37337293866277945612, -0.05692503191092901938, + 0.00721107776966009185, -0.00078104901449841593, 0.00007388093356262168, -0.00000620286187580820, 0.00000046816002303176, + -0.00000003209288853329, 0.00000000201519974874, -0.00000000011673686816, 0.00000000000627627066, -0.00000000000031481541, + 0.00000000000001479904, -0.00000000000000065457, 0.00000000000000002733, -0.00000000000000000108 +}; + +static FLOAT E12_data[16] = { + -0.03739021479220279500, 0.04272398606220957700, -0.13031820798497005440, 0.01441912402469889073, -0.00134617078051068022, + 0.00010731029253063780, -0.00000742999951611943, 0.00000045377325690753, -0.00000002476417211390, 0.00000000122076581374, + -0.00000000005485141480, 0.00000000000226362142, -0.00000000000008635897, 0.00000000000000306291, -0.00000000000000010148, + 0.00000000000000000315 +}; + +static FLOAT AE13_data[25] = { + -0.605773246640603460, -0.112535243483660900, 0.013432266247902779, -0.001926845187381145, 0.000309118337720603, + -0.000053564132129618, 0.000009827812880247, -0.000001885368984916, 0.000000374943193568, -0.000000076823455870, + 0.000000016143270567, -0.000000003466802211, 0.000000000758754209, -0.000000000168864333, 0.000000000038145706, + -0.000000000008733026, 0.000000000002023672, -0.000000000000474132, 0.000000000000112211, -0.000000000000026804, + 0.000000000000006457, -0.000000000000001568, 0.000000000000000383, -0.000000000000000094, 0.000000000000000023 +}; + +static FLOAT AE14_data[26] = { + -0.18929180007530170, -0.08648117855259871, 0.00722410154374659, -0.00080975594575573, 0.00010999134432661, + -0.00001717332998937, 0.00000298562751447, -0.00000056596491457, 0.00000011526808397, -0.00000002495030440, + 0.00000000569232420, -0.00000000135995766, 0.00000000033846628, -0.00000000008737853, 0.00000000002331588, + -0.00000000000641148, 0.00000000000181224, -0.00000000000052538, 0.00000000000015592, -0.00000000000004729, + 0.00000000000001463, -0.00000000000000461, 0.00000000000000148, -0.00000000000000048, 0.00000000000000016, + -0.00000000000000005 +}; + +#ifdef SINGLE_PRECISION +/* May need double precision with large arguments */ +double xc_expint_e1_impl(const double x, const int scale); +#endif + +/* implementation for E1, allowing for scaling by exp(x) */ +FLOAT XC(expint_e1_impl)(const FLOAT x, const int scale){ + const FLOAT xmaxt = -LOG_FLOAT_MIN; /* XMAXT = -LOG (R1MACH(1)) */ + const FLOAT xmax = xmaxt - LOG(xmaxt); /* XMAX = XMAXT - LOG(XMAXT) */ + + FLOAT e1 = 0.0; + + if(x <= -10.0){ + const FLOAT s = 1.0/x * ( scale ? 1.0 : EXP(-x) ); + e1 = s * (1.0 + XC(cheb_eval)(20.0/x + 1.0, AE11_data, 39)); + }else if(x <= -4.0){ + const FLOAT s = 1.0/x * ( scale ? 1.0 : EXP(-x) ); + e1 = s * (1.0 + XC(cheb_eval)((40.0/x + 7.0)/3.0, AE12_data, 25)); + }else if(x <= -1.0){ + const FLOAT scale_factor = ( scale ? EXP(x) : 1.0 ); + e1 = scale_factor * (-LOG(ABS(x)) + XC(cheb_eval)((2.0*x + 5.0)/3.0, E11_data, 19)); + }else if(x == 0.0) { + fprintf(stderr, "Argument can not be 0.0 in expint_e1\n"); + }else if(x <= 1.0){ + const FLOAT scale_factor = ( scale ? EXP(x) : 1.0 ); + e1 = scale_factor*(-LOG(ABS(x)) - 0.6875 + x + XC(cheb_eval)(x, E12_data, 16)); + }else if(x <= 4.0){ + const FLOAT s = 1.0/x * ( scale ? 1.0 : EXP(-x) ); + e1 = s * (1.0 + XC(cheb_eval)((8.0/x - 5.0)/3.0, AE13_data, 25)); + }else if(x <= xmax || scale){ + const FLOAT s = 1.0/x * ( scale ? 1.0 : EXP(-x) ); + e1 = s * (1.0 + XC(cheb_eval)(8.0/x - 1.0, AE14_data, 26)); + }else +#ifdef SINGLE_PRECISION + return xc_expint_e1_impl(x,scale); +#else + fprintf(stderr, "Argument is larger than xmax in expint_e1\n"); +#endif + + return e1; +} + diff --git a/libxc/src/functionals.c b/libxc/src/functionals.c new file mode 100644 index 000000000..c0e2ff2d4 --- /dev/null +++ b/libxc/src/functionals.c @@ -0,0 +1,195 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include + +#include "xc.h" +#include "funcs_key.c" + +extern XC(func_info_type) + *XC(lda_known_funct)[], + *XC(gga_known_funct)[], + *XC(hyb_gga_known_funct)[], + *XC(mgga_known_funct)[], + *XC(hyb_mgga_known_funct)[]; + + +/*------------------------------------------------------*/ +int XC(functional_get_number)(const char *name) +{ + int ii; + + for(ii=0;;ii++){ + if(XC(functional_keys)[ii].number == -1) + return -1; + if(strncasecmp(XC(functional_keys)[ii].name, name, 256) == 0) + return XC(functional_keys)[ii].number; + } +} + + +/*------------------------------------------------------*/ +char *XC(functional_get_name)(int number) +{ + int ii; + + for(ii=0;;ii++){ + if(XC(functional_keys)[ii].number == -1) + return NULL; + if(XC(functional_keys)[ii].number == number) + /* return duplicated: caller has the responsibility to dealloc string */ + return strdup(XC(functional_keys)[ii].name); + } +} + + +/*------------------------------------------------------*/ +int XC(family_from_id)(int id, int *family, int *number) +{ + int ii; + + /* first let us check if it is an LDA */ + for(ii=0; XC(lda_known_funct)[ii]!=NULL; ii++){ + if(XC(lda_known_funct)[ii]->number == id){ + if(family != NULL) *family = XC_FAMILY_LDA; + if(number != NULL) *number = ii; + return XC_FAMILY_LDA; + } + } + + /* or is it a GGA? */ + for(ii=0; XC(gga_known_funct)[ii]!=NULL; ii++){ + if(XC(gga_known_funct)[ii]->number == id){ + if(family != NULL) *family = XC_FAMILY_GGA; + if(number != NULL) *number = ii; + return XC_FAMILY_GGA; + } + } + + /* or is it a hybrid GGA? */ + for(ii=0; XC(hyb_gga_known_funct)[ii]!=NULL; ii++){ + if(XC(hyb_gga_known_funct)[ii]->number == id){ + if(family != NULL) *family = XC_FAMILY_HYB_GGA; + if(number != NULL) *number = ii; + return XC_FAMILY_HYB_GGA; + } + } + + /* or is it a meta GGA? */ + for(ii=0; XC(mgga_known_funct)[ii]!=NULL; ii++){ + if(XC(mgga_known_funct)[ii]->number == id){ + if(family != NULL) *family = XC_FAMILY_MGGA; + if(number != NULL) *number = ii; + return XC_FAMILY_MGGA; + } + } + + /* or is it a hybrid meta GGA? */ + for(ii=0; XC(hyb_mgga_known_funct)[ii]!=NULL; ii++){ + if(XC(hyb_mgga_known_funct)[ii]->number == id){ + if(family != NULL) *family = XC_FAMILY_HYB_MGGA; + if(number != NULL) *number = ii; + return XC_FAMILY_HYB_MGGA; + } + } + + return XC_FAMILY_UNKNOWN; +} + + +/*------------------------------------------------------*/ +int XC(func_init)(XC(func_type) *p, int functional, int nspin) +{ + int number; + + assert(p != NULL); + assert(nspin==XC_UNPOLARIZED || nspin==XC_POLARIZED); + + p->nspin = nspin; + + switch(XC(family_from_id)(functional, NULL, &number)){ + case(XC_FAMILY_LDA): + p->info = XC(lda_known_funct)[number]; + return XC(lda_init)(p, p->info, nspin); + + case(XC_FAMILY_GGA): + p->info = XC(gga_known_funct)[number]; + return XC(gga_init)(p, p->info, nspin); + + case(XC_FAMILY_HYB_GGA): + p->info = XC(hyb_gga_known_funct)[number]; + return XC(gga_init)(p, p->info, nspin); + + case(XC_FAMILY_MGGA): + p->info = XC(mgga_known_funct)[number]; + return XC(mgga_init)(p, p->info, nspin); + + case(XC_FAMILY_HYB_MGGA): + p->info = XC(hyb_mgga_known_funct)[number]; + return XC(mgga_init)(p, p->info, nspin); + + default: + return -2; /* family not found */ + } +} + + +/*------------------------------------------------------*/ +void XC(func_end)(XC(func_type) *p) +{ + assert(p != NULL && p->info != NULL); + + switch(p->info->family){ + case(XC_FAMILY_LDA): + XC(lda_end)(p); + break; + + case(XC_FAMILY_GGA): + case(XC_FAMILY_HYB_GGA): + XC(gga_end)(p); + break; + + case(XC_FAMILY_MGGA): + case(XC_FAMILY_HYB_MGGA): + XC(mgga_end)(p); + break; + } + + p->info = NULL; +} + +/* returns the mixing coefficient for the hybrid GGAs */ +FLOAT XC(hyb_exx_coef)(const XC(func_type) *p) +{ + assert(p!=NULL); + + return p->cam_alpha; +} + +/* returns the CAM parameters for screened hybrids */ +void XC(hyb_cam_coef)(const XC(func_type) *p, FLOAT *omega, FLOAT *alpha, FLOAT *beta) +{ + assert(p!=NULL); + + *omega = p->cam_omega; + *alpha = p->cam_alpha; + *beta = p->cam_beta; +} diff --git a/libxc/src/get_funcs.pl b/libxc/src/get_funcs.pl new file mode 100755 index 000000000..1e2743f9b --- /dev/null +++ b/libxc/src/get_funcs.pl @@ -0,0 +1,118 @@ +#!/usr/bin/env perl + +# Copyright (C) 2006-2007 M.A.L. Marques +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +$srcdir = shift; +$top_builddir = shift; + +$builddir = "$top_builddir/src"; + +my @funcs = ("lda", "gga", "hyb_gga", "mgga", "hyb_mgga"); + +$s0 = ""; $s3 = ""; $s4 = ""; $s5 = ""; +foreach $func (@funcs){ + undef %deflist_f; + undef %deflist_c; + + read_file($srcdir, $func); + + $s1 = ""; $s2 = ""; + foreach $key (sort { $a <=> $b } keys %deflist_f) { + $s0 .= sprintf "%s %-20s %3s /*%-60s*/\n", "#define ", + $deflist_f{$key}, $key, $deflist_c{$key}; + + $t = $deflist_f{$key}; + $t =~ s/XC_(.*)/\L$1/; + + $s4 .= ",\n" if($s4); + $s4 .= sprintf "{\"%s\", %d}", $t, $key; + + $s3 .= sprintf " %s %-20s = %3s ! %s\n", "integer, parameter ::", + $deflist_f{$key}, $key, $deflist_c{$key}; + + $s1 .= "extern XC(func_info_type) XC(func_info_$t);\n"; + $s2 .= " &XC(func_info_$t),\n"; + } + + open(OUT, ">$builddir/funcs_$func.c"); + print OUT <$builddir/funcs_key.c"); +print OUT <$builddir/xc_funcs.h"); +print OUT $s0; +print $so; +close OUT; + +open(OUT, ">$builddir/libxc_funcs.f90"); +print OUT <){ + if(/#define\s+(XC_${TYPE}_\S+)\s+(\S+)\s+\/\*(.*)\*\//){ + $deflist_f{$2} = $1; + $deflist_c{$2} = $3; + } + } + close(IN); + } + closedir DIR; +} diff --git a/libxc/src/gga.c b/libxc/src/gga.c new file mode 100644 index 000000000..9b4bb820f --- /dev/null +++ b/libxc/src/gga.c @@ -0,0 +1,247 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include + +#include "util.h" +#include "funcs_gga.c" +#include "funcs_hyb_gga.c" + +/* initialization */ +int XC(gga_init)(XC(func_type) *func, const XC(func_info_type) *info, int nspin) +{ + assert(func != NULL); + + /* initialize structure */ + func->info = info; + func->nspin = nspin; + func->params = NULL; + func->func = 0; + + func->n_func_aux = 0; + func->func_aux = NULL; + func->mix_coef = NULL; + func->cam_omega = func->cam_alpha = func->cam_beta = 0.0; + + /* initialize spin counters */ + func->n_zk = 1; + func->n_rho = func->n_vrho = func->nspin; + if(func->nspin == XC_UNPOLARIZED){ + func->n_sigma = func->n_vsigma = 1; + func->n_v2rho2 = func->n_v2rhosigma = func->n_v2sigma2 = 1; + func->n_v3rho3 = func->n_v3rho2sigma = func->n_v3rhosigma2 = func->n_v3sigma3 = 1; + }else{ + func->n_sigma = func->n_vsigma = 3; + func->n_v2rho2 = 3; + func->n_v2rhosigma = func->n_v2sigma2 = 6; + + func->n_v3rho3 = 4; + func->n_v3rho2sigma = 9; + func->n_v3rhosigma2 = 12; + func->n_v3sigma3 = 10; + } + + /* see if we need to initialize the functional */ + if(func->info->init != NULL) + func->info->init(func); + return 0; +} + + +/* Termination */ +void XC(gga_end)(XC(func_type) *func) +{ + assert(func != NULL); + + /* call internal termination routine */ + if(func->info->end != NULL) + func->info->end(func); + + /* terminate any auxiliary functional */ + if(func->n_func_aux > 0){ + int ii; + + for(ii=0; iin_func_aux; ii++){ + XC(func_end)(func->func_aux[ii]); + free(func->func_aux[ii]); + } + free(func->func_aux); + func->n_func_aux = 0; + } + + if(func->mix_coef != NULL){ + free(func->mix_coef); + func->mix_coef = NULL; + } + + /* deallocate any used parameter */ + if(func->params != NULL){ + free(func->params); + func->params = NULL; + } +} + +/* Some useful formulas: + + sigma_st = grad rho_s . grad rho_t + zk = energy density per unit particle + + vrho_s = d zk / d rho_s + vsigma_st = d n*zk / d sigma_st + + v2rho2_st = d^2 n*zk / d rho_s d rho_t + v2rhosigma_svx = d^2 n*zk / d rho_s d sigma_tv + v2sigma2_stvx = d^2 n*zk / d sigma_st d sigma_vx + + v3rho3_stv = d^3 n*zk / d rho_s d rho_t d rho_v + v3rho2sigma_stvx = d^3 n*zk / d rho_s d rho_t d sigma_vx + v3rhosigma2_svxyz = d^3 n*zk / d rho_s d sigma_vx d sigma_yz + v3sigma3_stvxyz = d^3 n*zk / d sigma_st d sigma_vx d sigma_yz + +if nspin == 2 + rho(2) = (u, d) + sigma(3) = (uu, ud, dd) + + vrho(2) = (u, d) + vsigma(3) = (uu, ud, dd) + + v2rho2(3) = (u_u, u_d, d_d) + v2rhosigma(6) = (u_uu, u_ud, u_dd, d_uu, d_ud, d_dd) + v2sigma2(6) = (uu_uu, uu_ud, uu_dd, ud_ud, ud_dd, dd_dd) + + v3rho3(4) = (u_u_u, u_u_d, u_d_d, d_d_d) + v3rho2sigma(9) = (u_u_uu, u_u_ud, u_u_dd, u_d_uu, u_d_ud, u_d_dd, d_d_uu, d_d_ud, d_d_dd) + v3rhosigma2(12) = (u_uu_uu, u_uu_ud, u_uu_dd, u_ud_ud, u_ud_dd, u_dd_dd, d_uu_uu, d_uu_ud, d_uu_dd, d_ud_ud, d_ud_dd, d_dd_dd) + v3sigma(10) = (uu_uu_uu, uu_uu_ud, uu_uu_dd, uu_ud_ud, uu_ud_dd, uu_dd_dd, ud_ud_ud, ud_ud_dd, ud_dd_dd, dd_dd_dd) + +*/ +void XC(gga)(const XC(func_type) *func, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, + FLOAT *v2rho2, FLOAT *v2rhosigma, FLOAT *v2sigma2, + FLOAT *v3rho3, FLOAT *v3rho2sigma, FLOAT *v3rhosigma2, FLOAT *v3sigma3) +{ + assert(func != NULL); + + /* sanity check */ + if(zk != NULL && !(func->info->flags & XC_FLAGS_HAVE_EXC)){ + fprintf(stderr, "Functional '%s' does not provide an implementation of Exc", + func->info->name); + exit(1); + } + + if(vrho != NULL && !(func->info->flags & XC_FLAGS_HAVE_VXC)){ + fprintf(stderr, "Functional '%s' does not provide an implementation of vxc", + func->info->name); + exit(1); + } + + if(v2rho2 != NULL && !(func->info->flags & XC_FLAGS_HAVE_FXC)){ + fprintf(stderr, "Functional '%s' does not provide an implementation of fxc", + func->info->name); + exit(1); + } + + if(v3rho3 != NULL && !(func->info->flags & XC_FLAGS_HAVE_KXC)){ + fprintf(stderr, "Functional '%s' does not provide an implementation of kxc", + func->info->name); + exit(1); + } + + /* initialize output to zero */ + if(zk != NULL) + memset(zk, 0, func->n_zk*np*sizeof(FLOAT)); + + if(vrho != NULL){ + assert(vsigma != NULL); + + memset(vrho, 0, func->n_vrho *np*sizeof(FLOAT)); + memset(vsigma, 0, func->n_vsigma*np*sizeof(FLOAT)); + } + + if(v2rho2 != NULL){ + assert(v2rhosigma!=NULL && v2sigma2!=NULL); + + memset(v2rho2, 0, func->n_v2rho2 *np*sizeof(FLOAT)); + memset(v2rhosigma, 0, func->n_v2rhosigma*np*sizeof(FLOAT)); + memset(v2sigma2, 0, func->n_v2sigma2 *np*sizeof(FLOAT)); + } + + if(v3rho3 != NULL){ + assert(v3rho2sigma!=NULL && v3rhosigma2!=NULL && v3sigma3!=NULL); + + memset(v3rho3, 0, func->n_v3rho3 *np*sizeof(FLOAT)); + memset(v3rho2sigma, 0, func->n_v3rho2sigma*np*sizeof(FLOAT)); + memset(v3rhosigma2, 0, func->n_v3rhosigma2*np*sizeof(FLOAT)); + memset(v3sigma3, 0, func->n_v3sigma3 *np*sizeof(FLOAT)); + } + + /* call functional */ + if(func->info->gga != NULL) + func->info->gga(func, np, rho, sigma, zk, vrho, vsigma, + v2rho2, v2rhosigma, v2sigma2, + v3rho3, v3rho2sigma, v3rhosigma2, v3sigma3); + + if(func->mix_coef != NULL) + XC(mix_func)(func, np, rho, sigma, NULL, NULL, zk, vrho, vsigma, NULL, NULL, + v2rho2, v2sigma2, NULL, NULL, v2rhosigma, NULL, NULL, NULL, NULL, NULL); + +} + +/* specializations */ +/* returns only energy */ +inline void +XC(gga_exc)(const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *zk) +{ + XC(gga)(p, np, rho, sigma, zk, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +} + +/* returns only potential */ +inline void +XC(gga_vxc)(const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *vrho, FLOAT *vsigma) +{ + XC(gga)(p, np, rho, sigma, NULL, vrho, vsigma, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +} + +/* returns both energy and potential (the most common call usually) */ +inline void +XC(gga_exc_vxc)(const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma) +{ + XC(gga)(p, np, rho, sigma, zk, vrho, vsigma, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +} + +/* returns second derivatives */ +inline void +XC(gga_fxc)(const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *v2rho2, FLOAT *v2rhosigma, FLOAT *v2sigma2) +{ + XC(gga)(p, np, rho, sigma, NULL, NULL, NULL, v2rho2, v2rhosigma, v2sigma2, NULL, NULL, NULL, NULL); +} + +/* returns third derivatives */ +inline void +XC(gga_kxc)(const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *v3rho3, FLOAT *v3rho2sigma, FLOAT *v3rhosigma2, FLOAT *v3sigma3) +{ + XC(gga)(p, np, rho, sigma, NULL, NULL, NULL, NULL, NULL, NULL, v3rho3, v3rho2sigma, v3rhosigma2, v3sigma3); +} diff --git a/libxc/src/gga_c_am05.c b/libxc/src/gga_c_am05.c new file mode 100644 index 000000000..390173f4e --- /dev/null +++ b/libxc/src/gga_c_am05.c @@ -0,0 +1,125 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_GGA_C_AM05 135 /* Armiento & Mattsson 05 correlation */ + +static void +gga_c_am05_init(XC(func_type) *p) +{ + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_LDA_C_PW_MOD, p->nspin); +} + + +static inline void +func(const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + const FLOAT am05_alpha = 2.804; + const FLOAT am05_gamma = 0.8098; + + XC(lda_work_t) pw; + FLOAT sfact; + int is; + + pw.order = r->order; + pw.rs[0] = SQRT(r->rs); + pw.rs[1] = r->rs; + pw.rs[2] = r->rs*r->rs; + pw.zeta = r->zeta; + + XC(lda_c_pw_func)(p->func_aux[0], &pw); + + sfact = (p->nspin == XC_POLARIZED) ? 1.0 : 2.0; + + r->f = 0.0; + if(r->order > 0) + r->dfdrs = r->dfdz = r->dfdxt = 0.0; + if(r->order > 1){ + r->d2fdrs2 = r->d2fdrsz = r->d2fdrsxt = r->d2fdz2 = r->d2fdzxt = r->d2fdxt2 = 0.0; + r->d2fdxs2[1] = 0.0; + } + + for(is=0; isnspin; is++){ + FLOAT ss, ff, dff, d2ff, XX, dXX, d2XX; + FLOAT sign[2] = {1.0, -1.0}; + int js; + + ss = X2S*r->xs[is]; + XX = 1.0/(1.0 + am05_alpha*ss*ss); + ff = XX + (1.0 - XX)*am05_gamma; + + r->f += sfact*pw.zk*(1.0 + sign[is]*r->zeta)*ff/2.0; + + if(r->order < 1) continue; + + dXX = -2.0*am05_alpha*ss * XX*XX*X2S; + dff = dXX*(1.0 - am05_gamma); + + r->dfdrs += sfact*pw.dedrs*(1.0 + sign[is]*r->zeta)*ff/2.0; + r->dfdxs[is] = pw.zk*(1.0 + sign[is]*r->zeta)*dff/2.0; + if(p->nspin == XC_POLARIZED) + r->dfdz += (pw.dedz*(1.0 + sign[is]*r->zeta) + pw.zk*sign[is])*ff/2.0; + + if(r->order < 2) continue; + + js = (is == 0) ? 0 : 2; + + d2XX = 2.0*am05_alpha*(3.0*am05_alpha*ss*ss - 1.0)*(XX*XX*XX)*(X2S*X2S); + d2ff = d2XX*(1.0 - am05_gamma); + + r->d2fdrs2 += sfact*pw.d2edrs2*(1.0 + sign[is]*r->zeta)*ff/2.0; + r->d2fdrsxs[is] = pw.dedrs*(1.0 + sign[is]*r->zeta)*dff/2.0; + r->d2fdxtxs[is] = 0.0; + r->d2fdxs2[js] = pw.zk*(1.0 + sign[is]*r->zeta)*d2ff/2.0; + + if(p->nspin == XC_POLARIZED){ + r->d2fdrsz += (pw.d2edrsz*(1.0 + sign[is]*r->zeta) + pw.dedrs*sign[is])*ff/2.0; + r->d2fdz2 += (pw.d2edz2 *(1.0 + sign[is]*r->zeta) + 2.0*pw.dedz *sign[is])*ff/2.0; + r->d2fdzxs[is] = (pw.dedz *(1.0 + sign[is]*r->zeta) + pw.zk *sign[is])*dff/2.0; + }else + r->d2fdzxs[is] = 0.0; + + } +} + +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_c_am05) = { + XC_GGA_C_AM05, + XC_CORRELATION, + "Armiento & Mattsson 05", + XC_FAMILY_GGA, + "R Armiento and AE Mattsson, Phys. Rev. B 72, 085108 (2005)\n" + "AE Mattsson, R Armiento, J Paier, G Kresse, JM Wills, and TR Mattsson, J. Chem. Phys. 128, 084714 (2008).", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-27, 1e-32, 0.0, 1e-32, + gga_c_am05_init, + NULL, + NULL, /* this is not an LDA */ + work_gga_c, + NULL +}; diff --git a/libxc/src/gga_c_ft97.c b/libxc/src/gga_c_ft97.c new file mode 100644 index 000000000..a4541f533 --- /dev/null +++ b/libxc/src/gga_c_ft97.c @@ -0,0 +1,321 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_GGA_C_FT97 88 /* Filatov & Thiel correlation */ + +static const FLOAT + C0 = 0.01554534543483, /* (1-ln2)/(2*Pi**2), see eq.(9) */ + C1 = 0.02072712724644, /* 2*C0/3 , see eq.(13),(28),(33) */ + C2 = RS_FACTOR, /* (3/(4*Pi))**1/3 , see eq.(8) */ + C3 = 0.2067834969665; /* C2/3 */ + +static const FLOAT big = 1e4; + + +static void func_kssp0(FLOAT rs, int order, FLOAT *kssp0, FLOAT *dkssp0) +{ + /* calculate kssp0(rs) Eq. (39) */ + static FLOAT k0 = 1.291551074, k1 = 0.349064173, r1 = 0.083275880; + static const FLOAT KSSPBIG = 1.291551074 - 0.349064173; + + FLOAT aux1, aux2; + + if(rs > big) + *kssp0 = KSSPBIG; + else{ + aux1 = POW(rs, 4.0/5.0); + aux2 = EXP(-r1*aux1); + + *kssp0 = k0 - k1*(1.0 - aux2); + } + + if(order < 1) return; + + if(rs > big) + *dkssp0 = 0.0; + else + *dkssp0 = -4.0*r1*k1/5.0 * aux1/rs * aux2; +} + + +static void func_fssp(FLOAT rs, FLOAT gr, int order, FLOAT *fssp, FLOAT *dfsspdrs, FLOAT *dfsspdgr) +{ + /* calculate fssp(rs, gr) Eq. (45) */ + static const FLOAT A1=1.622118767, A2=0.489958076, A3=1.379021941; + + FLOAT aux1, aux2, aux3; + + aux1 = A2*A2*gr*gr; + if(aux1 > big) + *fssp = 0.0; + else{ + aux2 = EXP(-aux1); + aux3 = SQRT(1.0 + A3*gr/rs); + + *fssp = (1.0 + A1*gr + aux1)*aux2/aux3; + } + + if(order < 1) return; + + if(aux1 > big) + *dfsspdrs = *dfsspdgr = 0.0; + else{ + *dfsspdrs = (*fssp)*A3*gr/(2.0*rs*(rs + A3*gr)); + *dfsspdgr = aux2/aux3*(-(2.0*A2*A2*gr + A3/(2.0*rs*aux3*aux3))*(1.0 + A1*gr + aux1) + (A1 + 2.0*A2*A2*gr)); + } +} + + +static void func_factor(FLOAT rs, int order, FLOAT *fa, FLOAT *dfa) +{ + /* factor: see Eq. (34) */ + static const FLOAT fa_a1 = 0.939016, fa_a2 = 1.733170; + + FLOAT fa_den, fa_arg, dfa_den, dfa_arg; + + fa_den = fa_a1*SQRT(rs) + fa_a2*rs; + fa_arg = rs/fa_den; + + *fa = EXP(-fa_arg*fa_arg); + + if(order < 1) return; + + dfa_den = fa_a1/(2.0*SQRT(rs)) + fa_a2; + dfa_arg = (1.0 - rs*dfa_den/fa_den)/fa_den; + + *dfa = -2.0*fa_arg*dfa_arg*(*fa); +} + + +static void func_kss0(FLOAT rs, int order, FLOAT *kss0, FLOAT *dkss0) +{ + /* calculate kss0(rs) Eq. (40) */ + static const FLOAT k0 = 1.200801774, k1 = 0.859614445, k2 = -0.812904345, r1 = 1.089338848, r2 = 0.655638823; + static const FLOAT KSS0BIG = 1.200801774 + 0.859614445 - 0.812904345; + + FLOAT aux1, aux2, aux3; + + if(rs > big){ + *kss0 = KSS0BIG; + }else{ + aux1 = POW(rs, 2.0/5.0); + aux2 = EXP(-r1*SQRT(rs)); + aux3 = EXP(-r2*aux1); + + *kss0 = k0 + k1*(1.0 - aux2) + k2*(1.0 - aux3); + } + + if(order < 1) return; + + if(rs > big) + *dkss0 = 0.0; + else + *dkss0 = k1*r1/(2.0*SQRT(rs))*aux2 + 2.0*k2*r2*aux1*aux3/(5.0*rs); +} + + +static void func_fss(FLOAT rs, FLOAT gr, int order, FLOAT *fss, FLOAT *dfssdrs, FLOAT *dfssdgr) +{ + static const FLOAT A4 = 4.946281353, A5 = 3.600612059; + + FLOAT aux1, aux2, aux3; + + aux1 = A4*A4*gr*gr; + if(aux1 > big) + *fss = 0.0; + else{ + aux2 = EXP(-aux1); + aux3 = SQRT(1.0 + A5*gr/rs); + + *fss = (1.0 + aux1)*aux2/aux3; + } + + if(order < 1) return; + + if(aux1 > big) + *dfssdrs = *dfssdgr = 0.0; + else{ + *dfssdrs = (*fss)*A5*gr/(2.0*rs*(rs + A5*gr)); + *dfssdgr = aux2/aux3*(-(2.0*A4*A4*gr + A5/(2.0*rs*aux3*aux3))*(1.0 + aux1) + 2.0*A4*A4*gr); + } +} + + +static void func_eab(FLOAT mu, int order, FLOAT *eab, FLOAT *deabdmu) +{ + FLOAT mu12, eei, eei1, ff_n, ff_d, ff, deeidmu, deei1dmu, dffdmu; + + mu12 = SQRT(mu); + + eei = expint_Ei_scaled(-mu); + eei1 = mu*eei + 1.0; + + /* calculate approximate normalization, Eq. (15) */ + ff_n = 3.0 + 2.0*(mu12 + mu); + ff_d = 3.0 + 6.0*(mu12 + mu); + ff = ff_n/ff_d; + + /* eba : Correlation energy density, Eq. (19) */ + *eab = C0*(eei + 2.0*ff*eei1); + + if(order < 1) return; + + deeidmu = eei + 1.0/mu; + deei1dmu = eei*(1.0 + mu) + 1.0; + + dffdmu = (1.0 + 2.0*mu12)/(2.0*mu12*ff_d) * (2.0 - 6.0*ff_n/ff_d); + + *deabdmu = C0*(deeidmu + 2.0*(dffdmu*eei1 + ff*deei1dmu)); +} + + +static void +func(const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + /* numerical curoff for mu_aa, mu_ab, mu_ba, mu_bb, see Eqs.(13) and (33) */ + static const FLOAT CUTOFF = 1.0e7; + static const FLOAT sign[2] = {1.0, -1.0}; + + int ispin; + FLOAT rsa, ga2, opz, opz13; + FLOAT kssp0, fssp, den_ba, mu_ba, e_ba; + FLOAT kss0, fss, den_aa, mu_aa, e_aa, fa; + + FLOAT drsadrs, drsadzeta, dga2dxs; + FLOAT dkssp0, dfsspdrsa, dfsspdga2, dden_badrsa, dden_badga2, dmu_badrsa, dmu_badga2, de_badmu_ba; + FLOAT dkss0, dfssdrsa, dfssdga2, dden_aadrsa, dden_aadga2, dmu_aadrsa, dmu_aadga2, de_aadmu_aa, dfa; + + r->f = 0.0; + if(r->order >= 1) r->dfdrs = r->dfdz = r->dfdxs[0] = r->dfdxs[1] = 0.0; + + for(ispin=0; ispin<2; ispin++){ + opz = 1.0 + sign[ispin]*r->zeta; + opz13 = CBRT(opz); + + /* rs_alpha */ + rsa = r->rs*M_CBRT2/opz13; + + /* | grad rs_alpha |^2 */ + ga2 = C3*C3 * r->xs[ispin]*r->xs[ispin]; + + /* mu(beta,alpha), Eq.(13) */ + + /* calculate kssp0(rsa) Eq. (39) */ + func_kssp0(rsa, r->order, &kssp0, &dkssp0); + + /* calculate fssp(rsa, ga2) Eq. (45) */ + func_fssp(rsa, ga2, r->order, &fssp, &dfsspdrsa, &dfsspdga2); + + /* calculate denominator */ + den_ba = kssp0*kssp0*fssp*fssp; + + if(C1*rsa <= den_ba*CUTOFF){ + mu_ba = C1*rsa/den_ba; + + func_eab(mu_ba, r->order, &e_ba, &de_badmu_ba); + + r->f += e_ba*(1.0 - sign[ispin]*r->zeta)/2.0; + } + + /* mu(alpha,alpha), Eq. (33) */ + + /* factor: see Eq. (34) */ + func_factor(rsa, r->order, &fa, &dfa); + + /* calculate kss0(rsa) Eq. (40) */ + func_kss0(rsa, r->order, &kss0, &dkss0); + + /* calculate fss(rsa, ga2) Eq. (45) */ + func_fss(rsa, ga2, r->order, &fss, &dfssdrsa, &dfssdga2); + + /* calculate denominator */ + den_aa = kss0*kss0*fss*fss; + + if(C1*rsa <= den_aa*CUTOFF){ + mu_aa = C1*rsa/den_aa; + + func_eab(mu_aa, r->order, &e_aa, &de_aadmu_aa); + + r->f += e_aa*fa*(1.0 + sign[ispin]*r->zeta)/2.0; + } + + if(r->order < 1) continue; + + drsadrs = M_CBRT2/opz13; + drsadzeta = -r->rs*M_CBRT2*sign[ispin]/(3.0*opz*opz13); + + dga2dxs = 2.0*C3*C3 * r->xs[ispin]; + + /* mu(beta,alpha), Eq.(13) */ + + /* calculate denominator */ + dden_badrsa = 2.0*kssp0*fssp*(fssp*dkssp0 + dfsspdrsa*kssp0); + dden_badga2 = 2.0*kssp0*kssp0*fssp*dfsspdga2; + + if(C1*rsa <= den_ba*CUTOFF){ + dmu_badrsa = C1/den_ba *(1.0 - rsa*dden_badrsa/den_ba); + dmu_badga2 = -mu_ba*dden_badga2/den_ba; + + r->dfdrs += de_badmu_ba*dmu_badrsa*drsadrs*(1.0 - sign[ispin]*r->zeta)/2.0; + r->dfdz += (de_badmu_ba*dmu_badrsa*drsadzeta*(1.0 - sign[ispin]*r->zeta) - e_ba*sign[ispin])/2.0; + + r->dfdxs[ispin] += de_badmu_ba*dmu_badga2*dga2dxs*(1.0 - sign[ispin]*r->zeta)/2.0; + } + + /* mu(alpha,alpha), Eq. (33) */ + + /* calculate denominator */ + dden_aadrsa = 2.0*kss0*fss*(fss*dkss0 + dfssdrsa*kss0); + dden_aadga2 = 2.0*kss0*kss0*fss*dfssdga2; + + if(C1*rsa <= den_aa*CUTOFF){ + dmu_aadrsa = C1/den_aa *(1.0 - rsa*dden_aadrsa/den_aa); + dmu_aadga2 = -mu_aa*dden_aadga2/den_aa; + + r->dfdrs += (de_aadmu_aa*dmu_aadrsa*fa + e_aa*dfa)* drsadrs*(1.0 + sign[ispin]*r->zeta)/2.0; + r->dfdz += (de_aadmu_aa*dmu_aadrsa*fa + e_aa*dfa)*drsadzeta*(1.0 + sign[ispin]*r->zeta)/2.0 + e_aa*fa*sign[ispin]/2.0; + + r->dfdxs[ispin] += de_aadmu_aa*dmu_aadga2*dga2dxs*fa*(1.0 + sign[ispin]*r->zeta)/2.0; + } + + } /* for ispin */ +} + +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_c_ft97) = { + XC_GGA_C_FT97, + XC_CORRELATION, + "Filatov & Thiel correlation", + XC_FAMILY_GGA, + "M Filatov & W Thiel, Int. J. Quant. Chem. 62, 603-616 (1997)\n" + "M Filatov & W Thiel, Mol Phys 91, 847 (1997)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, + NULL, + NULL, + work_gga_c, + NULL +}; diff --git a/libxc/src/gga_c_lm.c b/libxc/src/gga_c_lm.c new file mode 100644 index 000000000..8b77ec8ae --- /dev/null +++ b/libxc/src/gga_c_lm.c @@ -0,0 +1,162 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +/************************************************************************ + This functional is provided for historical reasons. + It was one of the first GGAs that ever appeared. +************************************************************************/ + +#define XC_GGA_C_LM 137 /* Langreth and Mehl correlation */ + +static void +gga_c_lm_init(XC(func_type) *p) +{ + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_LDA_C_vBH, p->nspin); +} + + +static inline void +func(const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + const FLOAT a2 = -0.262; + const FLOAT a3 = -7.0/(9.0*2.0*M_CBRT2*M_CBRT2); + + FLOAT a1, alpha; + FLOAT opz, omz, opz13, omz13, DD, dDDdz, d2DDdz2; + FLOAT aux1, aux2, daux1drs, daux1dxt, d2aux1drs2, d2aux1dxt2, d2aux1drsxt; + FLOAT t1, t2, dt1drs, dt1dz, dt1dxt, dt2dz, d2t1drs2, d2t1dxt2, d2t1dz2, d2t2dz2, d2t1drsz, d2t1drsxt, d2t1dzxt; + + XC(lda_work_t) pw; + + alpha = POW(4.0*M_PI/3.0, 1.0/6.0); + a1 = M_PI/(16.0*POW(3*M_PI*M_PI, 4/3)); /* 4.28e-3/2.0, where the 2 comes from the covertion from Ryd. to Hartree */ + + pw.order = r->order; + pw.rs[0] = SQRT(r->rs); + pw.rs[1] = r->rs; + pw.rs[2] = r->rs*r->rs; + pw.zeta = r->zeta; + + XC(lda_c_hl_func)(p->func_aux[0], &pw); + + opz = 1.0 + r->zeta; + omz = 1.0 - r->zeta; + opz13 = CBRT(opz); + omz13 = CBRT(omz); + + DD = SQRT(opz*opz13*opz13 + omz*omz13*omz13)/M_SQRT2; + + aux1 = EXP(a2*r->xt/(alpha*pw.rs[0])); + aux2 = a1/(alpha*alpha*r->rs); + + t1 = r->xt*r->xt*aux1/DD; + t2 = a3*(r->xs[0]*r->xs[0]*opz*opz13 + r->xs[1]*r->xs[1]*omz*omz13); + + r->f = pw.zk + aux2*(t1 + t2); + + if(r->order < 1) return; + + dDDdz = 5.0/(3.0*4.0*DD)*(opz13*opz13 - omz13*omz13); + daux1drs = -a2*r->xt/(2.0*alpha*r->rs*pw.rs[0])*aux1; + daux1dxt = a2/(alpha*pw.rs[0])*aux1; + + dt1drs = r->xt*r->xt*daux1drs/DD; + dt1dz = -r->xt*r->xt*aux1*dDDdz/(DD*DD); + dt1dxt = r->xt*(2.0*aux1 + r->xt*daux1dxt)/DD; + + dt2dz = a3*(4.0/3.0)*(r->xs[0]*r->xs[0]*opz13 - r->xs[1]*r->xs[1]*omz13); + + r->dfdrs = pw.dedrs + aux2*(-(t1 + t2)/r->rs + dt1drs); + r->dfdz = pw.dedz + aux2*(dt1dz + dt2dz); + r->dfdxt = aux2*dt1dxt; + r->dfdxs[0] = aux2*(a3*2.0*r->xs[0]*opz*opz13); + r->dfdxs[1] = aux2*(a3*2.0*r->xs[1]*omz*omz13); + + if(r->order < 2) return; + + d2DDdz2 = d2t2dz2 = 0.0; + if(r->zeta < 1.0){ + d2DDdz2 += 1.0/omz13; + d2t2dz2 += r->xs[1]*r->xs[1]/(omz13*omz13); + } + if(r->zeta > -1.0){ + d2DDdz2 += 1.0/opz13; + d2t2dz2 += r->xs[0]*r->xs[0]/(opz13*opz13); + } + + d2DDdz2 = -dDDdz*dDDdz/DD + 10.0/(36.0*DD)*d2DDdz2; + d2t2dz2 = a3*(4.0/9.0)*d2t2dz2; + + d2aux1drs2 = -a2*r->xt/(2.0*alpha*r->rs*pw.rs[0])*(-3.0/2.0*aux1/r->rs + daux1drs); + d2aux1drsxt = -a2/(2.0*alpha*r->rs*pw.rs[0])*(aux1 + r->xt*daux1dxt); + d2aux1dxt2 = a2/(alpha*pw.rs[0])*daux1dxt; + + d2t1drs2 = r->xt*r->xt*d2aux1drs2/DD; + d2t1drsz = -r->xt*r->xt*daux1drs*dDDdz/(DD*DD); + d2t1drsxt = r->xt*(2.0*daux1drs + r->xt*d2aux1drsxt)/DD; + d2t1dz2 = r->xt*r->xt*aux1*(2.0*dDDdz*dDDdz - DD*d2DDdz2)/(DD*DD*DD); + d2t1dzxt = -r->xt*(2.0*aux1 + r->xt*daux1dxt)*dDDdz/(DD*DD); + + d2t1dxt2 = (2.0*aux1 + 4.0*r->xt*daux1dxt + r->xt*r->xt*d2aux1dxt2)/DD; + + r->d2fdrs2 = pw.d2edrs2 + aux2*(d2t1drs2 - 2.0*dt1drs/r->rs + 2.0*(t1 + t2)/pw.rs[2]); + r->d2fdrsz = pw.d2edrsz + aux2*(d2t1drsz - (dt1dz + dt2dz)/r->rs); + r->d2fdrsxt = aux2*(d2t1drsxt - dt1dxt/r->rs); + r->d2fdrsxs[0] = -aux2/r->rs*(a3*2.0*r->xs[0]*opz*opz13); + r->d2fdrsxs[1] = -aux2/r->rs*(a3*2.0*r->xs[1]*omz*omz13); + r->d2fdz2 = pw.d2edz2 + aux2*(d2t1dz2 + d2t2dz2); + r->d2fdzxt = aux2*d2t1dzxt;; + r->d2fdzxs[0] = aux2*(a3*8.0/3.0*r->xs[0]*opz13); + r->d2fdzxs[1] = -aux2*(a3*8.0/3.0*r->xs[1]*omz13); + r->d2fdxt2 = aux2*d2t1dxt2; + r->d2fdxtxs[0] = 0.0; + r->d2fdxtxs[1] = 0.0; + r->d2fdxs2[0] = aux2*(a3*2.0*opz*opz13); + r->d2fdxs2[1] = 0.0; + r->d2fdxs2[2] = aux2*(a3*2.0*omz*omz13); + +} + +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_c_lm) = { + XC_GGA_C_LM, + XC_CORRELATION, + "Langreth & Mehl", + XC_FAMILY_GGA, + "DC Langreth and MJ Mehl, Phys. Rev. Lett. 47, 446 (1981)\n" + "CD Hu and DC Langreth, Phys. Scr. 32, 391 (1985)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-10, 1e-32, 0.0, 1e-32, + gga_c_lm_init, + NULL, + NULL, /* this is not an LDA */ + work_gga_c, + NULL +}; + diff --git a/libxc/src/gga_c_lyp.c b/libxc/src/gga_c_lyp.c new file mode 100644 index 000000000..e286b30c8 --- /dev/null +++ b/libxc/src/gga_c_lyp.c @@ -0,0 +1,233 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_GGA_C_LYP 131 /* Lee, Yang & Parr */ + +typedef struct{ + FLOAT A, B, c, d; +} gga_c_lyp_params; + +void XC(gga_c_lyp_init)(XC(func_type) *p) +{ + assert(p->params == NULL); + + p->params = malloc(sizeof(gga_c_lyp_params)); + + /* values of constants in standard LYP functional */ + XC(gga_c_lyp_set_params)(p, 0.04918, 0.132, 0.2533, 0.349); +} + + +void XC(gga_c_lyp_set_params)(XC(func_type) *p, FLOAT A, FLOAT B, FLOAT c, FLOAT d) +{ + gga_c_lyp_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_c_lyp_params *) (p->params); + + params->A = A; + params->B = B; + params->c = c; + params->d = d; +} + + +static inline void +func(const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + gga_c_lyp_params *params; + + FLOAT AA, BB, cc, dd, Cf; /* sortcuts for parameters */ + FLOAT cnst_rs, xt2, opz, omz, opz23, omz23, opz53, omz53, opz83, omz83, zeta2, opdrs; + FLOAT omega, delta, domega, ddelta, d2omega, d2delta; + FLOAT aux4, aux5, aux6, xs02, xs12; + FLOAT t1, t2, t3, t4, t5, t6; + FLOAT dt1drs, dt2drs, dt4drs, dt5drs; + FLOAT dt1dz, dt2dz, dt3dz, dt4dz, dt5dz, dt6dz; + FLOAT d2t1drs2, d2t2drs2, d2t4drs2, d2t5drs2; + FLOAT d2t1drsz, d2t2drsz, d2t4drsz, d2t5drsz; + FLOAT d2t1dz2, d2t2dz2, d2t3dz2, d2t4dz2, d2t5dz2, d2t6dz2; + + assert(p->params != NULL); + params = (gga_c_lyp_params *)(p->params); + + cnst_rs = CBRT(4.0*M_PI/3.0); + Cf = 3.0*POW(3.0*M_PI*M_PI, 2.0/3.0)/10.0; + xt2 = r->xt*r->xt; + xs02 = r->xs[0]*r->xs[0]; + xs12 = r->xs[1]*r->xs[1]; + + AA = params->A; + BB = params->B; + cc = params->c*cnst_rs; + dd = params->d*cnst_rs; + + zeta2 = r->zeta*r->zeta; + opz = 1.0 + r->zeta; + omz = 1.0 - r->zeta; + opz23 = POW(opz, 2.0/3.0); + omz23 = POW(omz, 2.0/3.0); + opz53 = opz*opz23; + omz53 = omz*omz23; + opz83 = opz*opz53; + omz83 = omz*omz53; + + opdrs = 1.0/(1.0 + dd*r->rs); + omega = BB*EXP(-cc*r->rs)*opdrs; + delta = (cc + dd*opdrs)*r->rs; + + aux6 = 1.0/POW(2.0, 8.0/3.0); + aux4 = aux6/4.0; + aux5 = aux4/(9.0*2.0); + + t1 = -(1.0 - zeta2)/(1.0 + dd*r->rs); + t2 = -xt2*((1.0 - zeta2)*(47.0 - 7.0*delta)/(4.0*18.0) - 2.0/3.0); + t3 = -Cf/2.0*(1.0 - zeta2)*(opz83 + omz83); + t4 = aux4*(1.0 - zeta2)*(5.0/2.0 - delta/18.0)*(xs02*opz83 + xs12*omz83); + t5 = aux5*(1.0 - zeta2)*(delta - 11.0)*(xs02*opz*opz83 + xs12*omz*omz83); + t6 = -aux6*(2.0/3.0*(xs02*opz83 + xs12*omz83) - + opz*opz*xs12*omz83/4.0 - omz*omz*xs02*opz83/4.0); + + r->f = AA*(t1 + omega*(t2 + t3 + t4 + t5 + t6)); + + if(r->order < 1) return; + + domega = -omega*(cc + dd*opdrs); + ddelta = cc + dd*opdrs*opdrs; + + dt1drs = -dd*t1/(1.0 + dd*r->rs); + dt2drs = xt2 *(1.0 - zeta2)*ddelta*7.0/(4.0*18.0); + dt4drs = -aux4*(1.0 - zeta2)*ddelta/18.0*(xs02*opz83 + xs12*omz83); + dt5drs = aux5*(1.0 - zeta2)*ddelta*(xs02*opz*opz83 + xs12*omz*omz83); + r->dfdrs = AA*(dt1drs + domega*(t2 + t3 + t4 + t5 + t6) + omega*(dt2drs + dt4drs + dt5drs)); + + dt1dz = 2.0*r->zeta/(1.0 + dd*r->rs); + dt2dz = xt2*2.0*r->zeta*(47.0 - 7.0*delta)/(4.0*18.0); + dt3dz = -Cf/2.0*(-2.0*r->zeta*(opz83 + omz83) + (1.0 - zeta2)*8.0/3.0*(opz53 - omz53)); + dt4dz = aux4*(5.0/2.0 - delta/18.0)* + (-2.0*r->zeta*(xs02*opz83 + xs12*omz83) + + (1.0 - zeta2)*8.0/3.0*(xs02*opz53 - xs12*omz53)); + dt5dz = aux5*(delta - 11.0)* + (-2.0*r->zeta*(xs02*opz*opz83 + xs12*omz*omz83) + + (1.0 - zeta2)*11/3.0*(xs02*opz83 - xs12*omz83)); + dt6dz = -aux6*(16.0/9.0*(xs02*opz53 - xs12*omz53) - + 1.0/2.0*(opz*xs12*omz83 - omz*xs02*opz83) + + 2.0/3.0*(opz*opz*xs12*omz53 - omz*omz*xs02*opz53)); + r->dfdz = AA*(dt1dz + omega*(dt2dz + dt3dz + dt4dz + dt5dz + dt6dz)); + + r->dfdxt = -2.0*AA*omega*r->xt*((1.0 - zeta2)*(47.0 - 7.0*delta)/(4.0*18.0) - 2.0/3.0); + + r->dfdxs[0] = AA*omega*2.0*r->xs[0]* + (aux4*(1.0 - zeta2)*(5.0/2.0 - delta/18.0)*opz83 + + aux5*(1.0 - zeta2)*(delta - 11.0)*opz*opz83 - + aux6*(2.0/3.0*opz83 - omz*omz*opz83/4.0) + ); + r->dfdxs[1] = AA*omega*2.0*r->xs[1]* + (aux4*(1.0 - zeta2)*(5.0/2.0 - delta/18.0)*omz83 + + aux5*(1.0 - zeta2)*(delta - 11.0)*omz*omz83 - + aux6*(2.0/3.0*omz83 - opz*opz*omz83/4.0) + ); + + if(r->order < 2) return; + + d2omega = -domega*(cc + dd*opdrs) + dd*dd*omega*opdrs*opdrs; + d2delta = -2.0*dd*dd*opdrs*opdrs*opdrs; + + d2t1drs2 = -2.0*dd*dt1drs/(1.0 + dd*r->rs); + d2t2drs2 = xt2 *(1.0 - zeta2)*d2delta*7.0/(4.0*18.0); + d2t4drs2 = -aux4*(1.0 - zeta2)*d2delta/18.0*(xs02*opz83 + xs12*omz83); + d2t5drs2 = aux5*(1.0 - zeta2)*d2delta*(xs02*opz*opz83 + xs12*omz*omz83); + r->d2fdrs2 = AA*(d2t1drs2 + d2omega*(t2 + t3 + t4 + t5 + t6) + + 2.0*domega*(dt2drs + dt4drs + dt5drs) + omega*(d2t2drs2 + d2t4drs2 + d2t5drs2)); + + d2t1drsz = -dd*dt1dz/(1.0 + dd*r->rs); + d2t2drsz = -xt2*2.0*r->zeta*7.0*ddelta/(4.0*18.0); + d2t4drsz = -aux4*ddelta/18.0* + (-2.0*r->zeta*(xs02*opz83 + xs12*omz83) + (1.0 - zeta2)*8.0/3.0*(xs02*opz53 - xs12*omz53)); + d2t5drsz = aux5*ddelta* + (-2.0*r->zeta*(xs02*opz*opz83 + xs12*omz*omz83) + (1.0 - zeta2)*11/3.0*(xs02*opz83 - xs12*omz83)); + + r->d2fdrsz = AA*(d2t1drsz + domega*(dt2dz + dt3dz + dt4dz + dt5dz + dt6dz) + omega*(d2t2drsz + d2t4drsz + d2t5drsz)); + + r->d2fdrsxt = -2.0*AA*r->xt*(domega*((1.0 - zeta2)*(47.0 - 7.0*delta)/(4.0*18.0) - 2.0/3.0) - + omega*(1.0 - zeta2)*7.0*ddelta/(4.0*18.0)); + + r->d2fdrsxs[0] = r->dfdxs[0]*domega/omega + AA*omega*2.0*r->xs[0]*ddelta* + (-aux4*(1.0 - zeta2)/18.0*opz83 + aux5*(1.0 - zeta2)*opz*opz83); + r->d2fdrsxs[1] = r->dfdxs[1]*domega/omega + AA*omega*2.0*r->xs[1]*ddelta* + (-aux4*(1.0 - zeta2)/18.0*omz83 + aux5*(1.0 - zeta2)*omz*omz83); + + d2t1dz2 = 2.0/(1.0 + dd*r->rs); + d2t2dz2 = xt2*2.0*(47.0 - 7.0*delta)/(4.0*18.0); + d2t3dz2 = -Cf/2.0*(-2.0*(opz83 + omz83) - 4.0*r->zeta*8.0/3.0*(opz53 - omz53) + (1.0 - zeta2)*40.0/9.0*(opz23 + omz23)); + d2t4dz2 = aux4*(5.0/2.0 - delta/18.0)* + (-2.0*(xs02*opz83 + xs12*omz83) - 4.0*r->zeta*8.0/3.0*(xs02*opz53 - xs12*omz53) + + (1.0 - zeta2)*40.0/9.0*(xs02*opz23 + xs12*omz23)); + d2t5dz2 = aux5*(delta - 11.0)* + (-2.0*(xs02*opz*opz83 + xs12*omz*omz83) - 4.0*r->zeta*11.0/3.0*(xs02*opz83 - xs12*omz83) + + (1.0 - zeta2)*88.0/9.0*(xs02*opz53 + xs12*omz53)); + d2t6dz2 = -aux6*(80.0/27.0*(xs02*opz23 + xs12*omz23) - + 1.0/2.0*(xs12*omz83 + xs02*opz83) + + 8.0/3.0*(opz*xs12*omz53 + omz*xs02*opz53) - + 10.0/9.0*(opz*opz*xs12*omz23 + omz*omz*xs02*opz23)); + r->d2fdz2 = AA*(d2t1dz2 + omega*(d2t2dz2 + d2t3dz2 + d2t4dz2 + d2t5dz2 + d2t6dz2)); + + r->d2fdzxt = 4.0*AA*omega*r->xt*r->zeta*(47.0 - 7.0*delta)/(4.0*18.0); + + r->d2fdzxs[0] = 2.0*AA*omega*r->xs[0]* + (aux4*(5.0/2.0 - delta/18.0)*(-2.0*r->zeta*opz83 + (1.0 - zeta2)*8.0/3.0*opz53) + + aux5*(delta - 11.0)*(-2.0*r->zeta*opz*opz83 + (1.0 - zeta2)*11.0/3.0*opz83) - + aux6*(16.0/9.0*opz53 + 1.0/2.0*omz*opz83 - 2.0/3.0*omz*omz*opz53)); + r->d2fdzxs[1] = 2.0*AA*omega*r->xs[1]* + (aux4*(5.0/2.0 - delta/18.0)*(-2.0*r->zeta*omz83 - (1.0 - zeta2)*8.0/3.0*omz53) + + aux5*(delta - 11.0)*(-2.0*r->zeta*omz*omz83 - (1.0 - zeta2)*11/3.0*omz83) + + aux6*(16.0/9.0*omz53 + 1.0/2.0*opz*omz83 - 2.0/3.0*opz*opz*omz53)); + + r->d2fdxt2 = r->dfdxt/r->xt; + + r->d2fdxtxs[0] = 0.0; + r->d2fdxtxs[1] = 0.0; + + r->d2fdxs2[0] = r->dfdxs[0]/r->xs[0]; + r->d2fdxs2[1] = 0.0; + r->d2fdxs2[2] = r->dfdxs[1]/r->xs[1]; +} + +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_c_lyp) = { + XC_GGA_C_LYP, + XC_CORRELATION, + "Lee, Yang & Parr", + XC_FAMILY_GGA, + "C Lee, W Yang and RG Parr, Phys. Rev. B 37, 785 (1988)\n" + "B Miehlich, A Savin, H Stoll and H Preuss, Chem. Phys. Lett. 157, 200 (1989)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(gga_c_lyp_init), + NULL, + NULL, + work_gga_c, + NULL +}; diff --git a/libxc/src/gga_c_op.c b/libxc/src/gga_c_op.c new file mode 100644 index 000000000..92420ef96 --- /dev/null +++ b/libxc/src/gga_c_op.c @@ -0,0 +1,217 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_GGA_C_OP_B88 87 /* one-parameter progressive functional (B88 version) */ +#define XC_GGA_C_OP_PBE 86 /* one-parameter progressive functional (PBE version) */ +#define XC_GGA_C_OP_G96 85 /* one-parameter progressive functional (G96 version) */ +#define XC_GGA_C_OP_XALPHA 84 /* one-parameter progressive functional (XALPHA version) */ + +typedef struct{ + FLOAT qOPab; + xc_gga_enhancement_t enhancement_factor; +} gga_c_op_params; + + +static void gga_c_op_init(XC(func_type) *p) +{ + gga_c_op_params *params; + + assert(p != NULL && p->params == NULL); + p->params = malloc(sizeof(gga_c_op_params)); + params = (gga_c_op_params *) (p->params); + + if(p->info->number != XC_GGA_C_OP_XALPHA){ + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + } + + switch(p->info->number){ + case XC_GGA_C_OP_B88: + XC(func_init) (p->func_aux[0], XC_GGA_X_B88, XC_POLARIZED); + params->enhancement_factor = XC(gga_x_b88_enhance); + params->qOPab = 2.3670; + break; + case XC_GGA_C_OP_PBE: + XC(func_init) (p->func_aux[0], XC_GGA_X_PBE, XC_POLARIZED); + params->enhancement_factor = XC(gga_x_pbe_enhance); + params->qOPab = 2.3789; + break; + case XC_GGA_C_OP_G96: + XC(func_init) (p->func_aux[0], XC_GGA_X_G96, XC_POLARIZED); + params->enhancement_factor = XC(gga_x_g96_enhance); + params->qOPab = 2.3638; + break; + case XC_GGA_C_OP_XALPHA: + params->enhancement_factor = NULL; + params->qOPab = 2.5654; + break; + default: + fprintf(stderr, "Internal error in gga_c_op\n"); + exit(1); + } +} + +static inline void +func(const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + static const FLOAT a1 = 1.5214, a2 = 0.5764, b1 = 1.1284, b2 = 0.3183; + + gga_c_op_params *params; + FLOAT eu_f, eu_dfdx, eu_d2fdx2, ed_f, ed_dfdx, ed_d2fdx2; + FLOAT cnst, cnst13, pref, opz, omz, opz13, omz13, beta_num, beta_den, beta, beta2, f_num, f_den; + FLOAT dbeta_numdz, dbeta_numdxs[2], dbeta_dendz, dbeta_dendxs[2], dbetadz, dbetadxs[2]; + FLOAT df_numdz, df_numdrs, df_numdbeta, df_dendrs, df_dendbeta, dfdbeta; + + assert(p != NULL && p->params != NULL); + params = (gga_c_op_params *) (p->params); + + if(ABS(r->zeta) > 1.0 - p->info->min_zeta){ + r->f = 0.0; + }else{ + /* call enhancement factor */ + if(p->info->number != XC_GGA_C_OP_XALPHA){ + params->enhancement_factor(p->func_aux[0], r->order, r->xs[0], &eu_f, &eu_dfdx, &eu_d2fdx2, NULL); + params->enhancement_factor(p->func_aux[0], r->order, r->xs[1], &ed_f, &ed_dfdx, &ed_d2fdx2, NULL); + }else{ + eu_f = ed_f = 1.0; + eu_dfdx = ed_dfdx = 0.0; + eu_d2fdx2 = ed_d2fdx2 = 0.0; + } + + cnst = 4.0*M_PI/3.0; + cnst13 = CBRT(cnst); + pref = params->qOPab*2.0*X_FACTOR_C/(M_CBRT2*cnst13); + + opz = 1.0 + r->zeta; + omz = 1.0 - r->zeta; + + opz13 = POW(opz, 1.0/3.0); + omz13 = POW(omz, 1.0/3.0); + + beta_num = pref * opz13*omz13 * eu_f*ed_f; + beta_den = opz13*eu_f + omz13*ed_f; + beta = beta_num/beta_den; + beta2 = beta*beta; + + f_num = -opz*omz*(a1*beta + a2*r->rs); + f_den = 4.0*cnst*beta2*(beta2 + b1*r->rs*beta + b2*r->rs*r->rs); + + r->f = f_num/f_den; + } + + if(r->order < 1) return; + + if(ABS(r->zeta) > 1.0 - p->info->min_zeta){ + r->dfdrs = r->dfdz = r->dfdxt = r->dfdxs[0] = r->dfdxs[1] = 0.0; + }else{ + dbeta_numdz = pref * (-2.0*r->zeta/(3.0*opz13*opz13*omz13*omz13)) * eu_f*ed_f; + dbeta_numdxs[0] = pref * opz13*omz13 * eu_dfdx*ed_f; + dbeta_numdxs[1] = pref * opz13*omz13 * eu_f*ed_dfdx; + + dbeta_dendz = eu_f/(3.0*opz13*opz13) - ed_f/(3.0*omz13*omz13); + dbeta_dendxs[0] = opz13*eu_dfdx; + dbeta_dendxs[1] = omz13*ed_dfdx; + + dbetadz = ( dbeta_numdz*beta_den - beta_num*dbeta_dendz )/(beta_den*beta_den); + dbetadxs[0] = (dbeta_numdxs[0]*beta_den - beta_num*dbeta_dendxs[0])/(beta_den*beta_den); + dbetadxs[1] = (dbeta_numdxs[1]*beta_den - beta_num*dbeta_dendxs[1])/(beta_den*beta_den); + + df_numdz = 2.0*r->zeta*(a1*beta + a2*r->rs); + df_numdrs = -opz*omz*a2; + df_numdbeta = -opz*omz*a1; + + df_dendrs = 4.0*cnst*beta2*(b1*beta + 2.0*b2*r->rs); + df_dendbeta = 4.0*cnst*beta*(4.0*beta2 + 3.0*b1*r->rs*beta + 2.0*b2*r->rs*r->rs); + + dfdbeta = (df_numdbeta*f_den - f_num*df_dendbeta)/(f_den*f_den); + + r->dfdrs = (df_numdrs*f_den - f_num*df_dendrs)/(f_den*f_den); + r->dfdz = df_numdz/f_den + dfdbeta*dbetadz; + r->dfdxt = 0.0; + r->dfdxs[0] = dfdbeta*dbetadxs[0]; + r->dfdxs[1] = dfdbeta*dbetadxs[1]; + } + + if(r->order < 2) return; + +} + +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_c_op_b88) = { + XC_GGA_C_OP_B88, + XC_CORRELATION, + "one-parameter progressive functional (B88 version)", + XC_FAMILY_GGA, + "T Tsuneda, T Suzumura, and K Hirao, J. Chem. Phys. 110, 10664 (1999)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-12, 1e-32, 0.0, 1e-10, + gga_c_op_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_c_op_pbe) = { + XC_GGA_C_OP_PBE, + XC_CORRELATION, + "one-parameter progressive functional (PBE version)", + XC_FAMILY_GGA, + "T Tsuneda, T Suzumura, and K Hirao, J. Chem. Phys. 111, 5656 (1999)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-12, 1e-32, 0.0, 1e-10, + gga_c_op_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_c_op_g96) = { + XC_GGA_C_OP_G96, + XC_CORRELATION, + "one-parameter progressive functional (G96 version)", + XC_FAMILY_GGA, + "T Tsuneda, T Suzumura, and K Hirao, J. Chem. Phys. 111, 5656 (1999)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-12, 1e-32, 0.0, 1e-10, + gga_c_op_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_c_op_xalpha) = { + XC_GGA_C_OP_XALPHA, + XC_CORRELATION, + "one-parameter progressive functional (Xalpha version)", + XC_FAMILY_GGA, + "T Tsuneda, T Suzumura, and K Hirao, J. Chem. Phys. 111, 5656 (1999)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-12, 1e-32, 0.0, 1e-10, + gga_c_op_init, + NULL, NULL, + work_gga_c, + NULL +}; diff --git a/libxc/src/gga_c_optc.c b/libxc/src/gga_c_optc.c new file mode 100644 index 000000000..718824fea --- /dev/null +++ b/libxc/src/gga_c_optc.c @@ -0,0 +1,159 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_GGA_C_OPTC 200 /* Optimized correlation functional of Cohen and Handy */ + +static void +gga_c_optc_init(XC(func_type) *p) +{ + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + /* PW91 has always to be called polarized */ + XC(func_init)(p->func_aux[0], XC_GGA_C_PW91, XC_POLARIZED); +} + + +static inline void +func(const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + static FLOAT c1 = 1.1015, c2 = 0.6625; + FLOAT opz, omz, copz, comz, o_opz, o_copz, o_omz, o_comz; + + XC(gga_work_c_t) f_par[2], f_anti; + + opz = 1.0 + r->zeta; + omz = 1.0 - r->zeta; + copz = CBRT(opz); + comz = CBRT(omz); + + /* calculate the total part */ + f_anti.order = r->order; + f_anti.rs = r->rs; + f_anti.zeta = r->zeta; + f_anti.xt = r->xt; + f_anti.xs[0] = r->xs[0]; + f_anti.xs[1] = r->xs[1]; + + XC(gga_c_pw91_func) (p->func_aux[0], &f_anti); + + /* now the spin up */ + if(opz > p->info->min_zeta){ + f_par[0].order = r->order; + f_par[0].rs = r->rs*M_CBRT2*copz; + f_par[0].zeta = 1.0; + f_par[0].xt = r->xs[0]; + f_par[0].xs[0] = r->xs[0]; + f_par[0].xs[1] = 0.0; + + XC(gga_c_pw91_func) (p->func_aux[0], &(f_par[0])); + }else{ + f_par[0].f = 0.0; + if(r->order >= 1) f_par[0].dfdrs = f_par[0].dfdxt = f_par[0].dfdxs[0] = 0.0; + if(r->order >= 2) f_par[0].d2fdrs2 = f_par[0].d2fdrsxt = f_par[0].d2fdrsxs[0] = + f_par[0].d2fdxt2 = f_par[0].d2fdxtxs[0] = f_par[0].d2fdxs2[0] = 0.0; + } + + + /* now the spin down */ + if(omz > p->info->min_zeta){ + f_par[1].order = r->order; + f_par[1].rs = r->rs*M_CBRT2*comz; + f_par[1].zeta = -1.0; + f_par[1].xt = r->xs[1]; + f_par[1].xs[0] = 0.0; + f_par[1].xs[1] = r->xs[1]; + + XC(gga_c_pw91_func) (p->func_aux[0], &(f_par[1])); + }else{ + f_par[1].f = 0.0; + if(r->order >= 1) f_par[1].dfdrs = f_par[1].dfdxt = f_par[1].dfdxs[0] = 0.0; + if(r->order >= 2) f_par[1].d2fdrs2 = f_par[1].d2fdrsxt = f_par[1].d2fdrsxs[1] = + f_par[1].d2fdxt2 = f_par[1].d2fdxtxs[1] = f_par[1].d2fdxs2[2] = 0.0; + } + + + /* now we add everything */ + + r->f = c1*f_anti.f + (c2 - c1)*(f_par[0].f + f_par[1].f); + + if(r->order < 1) return; + + if(opz >= p->info->min_zeta){ + o_opz = 1.0/opz; + o_copz = 1.0/copz; + }else + o_opz = o_copz = 0.0; + + if(omz >= p->info->min_zeta){ + o_omz = 1.0/omz; + o_comz = 1.0/comz; + }else + o_omz = o_comz = 0.0; + + r->dfdrs = c1*f_anti.dfdrs + (c2 - c1)*M_CBRT2*(f_par[0].dfdrs*copz + f_par[1].dfdrs*comz); + r->dfdz = c1*f_anti.dfdz + (c2 - c1)*M_CBRT2*r->rs/3.0*(f_par[0].dfdrs*o_copz*o_copz - f_par[1].dfdrs*o_comz*o_comz); + r->dfdxt = c1*f_anti.dfdxt; + r->dfdxs[0] = c1*f_anti.dfdxs[0] + (c2 - c1)*(f_par[0].dfdxt + f_par[0].dfdxs[0]); + r->dfdxs[1] = c1*f_anti.dfdxs[1] + (c2 - c1)*(f_par[1].dfdxt + f_par[1].dfdxs[1]); + + if(r->order < 2) return; + + r->d2fdrs2 = c1*f_anti.d2fdrs2 + (c2 - c1)*M_CBRT2*M_CBRT2*(f_par[0].d2fdrs2*copz*copz + f_par[1].d2fdrs2*comz*comz); + r->d2fdrsz = c1*f_anti.d2fdrsz + (c2 - c1)*M_CBRT2/3.0* + (f_par[0].dfdrs*o_copz*o_copz - f_par[1].dfdrs*o_comz*o_comz + + M_CBRT2*(f_par[0].d2fdrs2*o_copz - f_par[1].d2fdrs2*o_comz)); + r->d2fdrsxt = c1*f_anti.d2fdrsxt; + r->d2fdrsxs[0] = c1*f_anti.d2fdrsxs[0] + (c2 - c1)*M_CBRT2*(f_par[0].d2fdrsxt + f_par[0].d2fdrsxs[0])*copz; + r->d2fdrsxs[1] = c1*f_anti.d2fdrsxs[1] + (c2 - c1)*M_CBRT2*(f_par[1].d2fdrsxt + f_par[1].d2fdrsxs[1])*comz; + r->d2fdz2 = c1*f_anti.d2fdz2 + (c2 - c1)*M_CBRT2*r->rs/3.0* + (-2.0/3.0*(f_par[0].dfdrs*o_opz*o_copz*o_copz + f_par[1].dfdrs*o_omz*o_comz*o_comz) + + M_CBRT2*r->rs/3.0*(f_par[0].d2fdrs2*o_opz*o_copz + f_par[1].d2fdrs2*o_omz*o_omz)); + r->d2fdzxt = c1*f_anti.d2fdzxt; + r->d2fdzxs[0] = c1*f_anti.d2fdzxs[0] + (c2 - c1)*M_CBRT2*r->rs/3.0*(f_par[0].d2fdrsxt + f_par[0].d2fdrsxs[0])*o_copz*o_copz; + r->d2fdzxs[1] = c1*f_anti.d2fdzxs[1] + (c2 - c1)*M_CBRT2*r->rs/3.0*(f_par[1].d2fdrsxt + f_par[1].d2fdrsxs[1])*o_comz*o_comz; + r->d2fdxt2 = c1*f_anti.d2fdxt2; + r->d2fdxtxs[0] = c1*f_anti.d2fdxtxs[0]; + r->d2fdxtxs[1] = c1*f_anti.d2fdxtxs[1]; + r->d2fdxs2[0] = c1*f_anti.d2fdxs2[0] + (c2 - c1)*(f_par[0].d2fdxt2 + 2.0*f_par[0].d2fdxtxs[0] + f_par[0].d2fdxs2[0]); + r->d2fdxs2[1] = c1*f_anti.d2fdxs2[1]; + r->d2fdxs2[2] = c1*f_anti.d2fdxs2[2] + (c2 - c1)*(f_par[1].d2fdxt2 + 2.0*f_par[1].d2fdxtxs[1] + f_par[1].d2fdxs2[2]); +} + +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_c_optc) = { + XC_GGA_C_OPTC, + XC_CORRELATION, + "Optimized correlation functional of Cohen and Handy", + XC_FAMILY_GGA, + "AJ Cohen and NC Handy, Mol. Phys. 99, 607-615 (2001)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-26, 1e-32, 0.0, 1e-32, /* densities smaller than 1e-26 give rise to NaNs */ + gga_c_optc_init, + NULL, NULL, + work_gga_c, + NULL +}; diff --git a/libxc/src/gga_c_p86.c b/libxc/src/gga_c_p86.c new file mode 100644 index 000000000..c515c377f --- /dev/null +++ b/libxc/src/gga_c_p86.c @@ -0,0 +1,163 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +/************************************************************************ + Implements Perdew 86 Generalized Gradient Approximation + correlation functional. +************************************************************************/ + +#define XC_GGA_C_P86 132 /* Perdew 86 */ + +static void +gga_c_p86_init(XC(func_type) *p) +{ + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_LDA_C_PZ, p->nspin); +} + + +static inline void +func(const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + static const FLOAT alpha = 0.023266, beta = 7.389e-6, gamma = 8.723, delta = 0.472; + static const FLOAT aa = 0.001667, bb = 0.002568; + static const FLOAT ftilde = 1.745*0.11; + + FLOAT rsconv, x1, dx1drs, dx1dxt, d2x1drs2, d2x1drsxt; + FLOAT f1, f2, H, df1, df2, dHdx1, dHdrs, d2f1, d2f2, d2Hdrs2, d2Hdx12, d2Hdrsx1; + FLOAT DD, dDDdzeta, d2DDdzeta2, CC, CCinf, dCCdrs, d2CCdrs2; + FLOAT Phi, dPhidx1, dPhidrs, d2Phidrs2, d2Phidrsx1; + + XC(lda_work_t) pw; + + rsconv = POW(4.0*M_PI/3.0, 1.0/6.0); + + pw.order = r->order; + pw.rs[0] = SQRT(r->rs); + pw.rs[1] = r->rs; + pw.rs[2] = r->rs*r->rs; + pw.zeta = r->zeta; + + XC(lda_c_pz_func)(p->func_aux[0], &pw); + + /* Equation [1].(4) */ + DD = SQRT(POW(1.0 + r->zeta, 5.0/3.0) + POW(1.0 - r->zeta, 5.0/3.0))/M_SQRT2; + + /* Equation [1].(6) */ + f1 = bb + alpha*r->rs + beta*pw.rs[2]; + f2 = 1.0 + gamma*r->rs + delta*pw.rs[2] + 1.0e4*beta*r->rs*pw.rs[2]; + CC = aa + f1/f2; + CCinf = aa + bb; + + /* Equation [1].(9) */ + x1 = r->xt/(rsconv*pw.rs[0]); + Phi = ftilde*(CCinf/CC)*x1; + + /* Equation [1].(8) */ + H = x1*x1*EXP(-Phi)*CC/DD; + r->f = pw.zk + H; + + if(r->order < 1) return; + + dDDdzeta = 5.0/(3.0*4.0*DD)*(POW(1.0 + r->zeta, 2.0/3.0) - POW(1.0 - r->zeta, 2.0/3.0)); + + df1 = alpha + 2.0*beta*r->rs; + df2 = gamma + 2.0*delta*r->rs + 3.0e4*beta*pw.rs[2]; + dCCdrs = (df1*f2 - f1*df2)/(f2*f2); + + dx1drs = -r->xt/(2.0*rsconv*r->rs*pw.rs[0]); + dx1dxt = 1.0/(rsconv*pw.rs[0]); + + dPhidx1 = ftilde*(CCinf/CC); + dPhidrs = -dCCdrs*Phi/CC; + + dHdx1 = x1*EXP(-Phi)*CC/DD*(2.0 - x1*dPhidx1); + dHdrs = x1*x1*EXP(-Phi)/DD*(dCCdrs - dPhidrs*CC); + + r->dfdrs = pw.dedrs + dHdrs + dHdx1*dx1drs; + r->dfdz = pw.dedz - H*dDDdzeta/DD; + r->dfdxt = dHdx1*dx1dxt; + r->dfdxs[0] = 0.0; + r->dfdxs[1] = 0.0; + + if(r->order < 2) return; + + d2DDdzeta2 = 0.0; + if(r->zeta < 1.0) + d2DDdzeta2 += POW(1.0 - r->zeta, -1.0/3.0); + if(r->zeta > -1.0) + d2DDdzeta2 += POW(1.0 + r->zeta, -1.0/3.0); + + d2DDdzeta2 = -dDDdzeta*dDDdzeta/DD + 10.0/(36.0*DD)*d2DDdzeta2; + + d2f1 = 2.0*beta; + d2f2 = 2.0*delta + 6.0e4*beta*r->rs; + d2CCdrs2 = (f2*(d2f1*f2 - f1*d2f2) - 2.0*df2*(df1*f2 - f1*df2))/(f2*f2*f2); + + d2Phidrs2 = -(d2CCdrs2*Phi + dCCdrs*dPhidrs - dCCdrs*dCCdrs*Phi/CC)/CC; + d2Phidrsx1 = -dCCdrs*dPhidx1/CC; + + d2x1drs2 = 3.0*r->xt/(4.0*rsconv*pw.rs[2]*pw.rs[0]); + d2x1drsxt = -1.0/(2.0*rsconv*r->rs*pw.rs[0]); + + d2Hdx12 = EXP(-Phi)*CC/DD*(2.0 + x1*dPhidx1*(x1*dPhidx1 - 4.0)); + d2Hdrs2 = x1*x1*EXP(-Phi)/DD*(d2CCdrs2 - d2Phidrs2*CC - dPhidrs*(2.0*dCCdrs - dPhidrs*CC)); + d2Hdrsx1 = x1*EXP(-Phi)/DD*((dCCdrs - CC*dPhidrs)*(2.0 - x1*dPhidx1) - CC*x1*d2Phidrsx1); + + r->d2fdrs2 = pw.d2edrs2 + d2Hdrs2 + 2.0*d2Hdrsx1*dx1drs + d2Hdx12*dx1drs*dx1drs + dHdx1*d2x1drs2; + r->d2fdrsz = pw.d2edrsz - (dHdrs + dHdx1*dx1drs)*dDDdzeta/DD; + r->d2fdrsxt = d2Hdrsx1*dx1dxt + d2Hdx12*dx1drs*dx1dxt + dHdx1*d2x1drsxt; + r->d2fdrsxs[0] = 0.0; + r->d2fdrsxs[1] = 0.0; + r->d2fdz2 = pw.d2edz2 - H*(d2DDdzeta2*DD - 2.0*dDDdzeta*dDDdzeta)/(DD*DD); + r->d2fdzxt = -dHdx1*dx1dxt*dDDdzeta/DD; + r->d2fdzxs[0] = 0.0; + r->d2fdzxs[1] = 0.0; + r->d2fdxt2 = d2Hdx12*dx1dxt*dx1dxt; + r->d2fdxtxs[0] = 0.0; + r->d2fdxtxs[1] = 0.0; + r->d2fdxs2[0] = 0.0; + r->d2fdxs2[1] = 0.0; + r->d2fdxs2[2] = 0.0; +} + +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_c_p86) = { + XC_GGA_C_P86, + XC_CORRELATION, + "Perdew 86", + XC_FAMILY_GGA, + "JP Perdew, Phys. Rev. B 33, 8822 (1986)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_c_p86_init, + NULL, + NULL, + work_gga_c, + NULL +}; diff --git a/libxc/src/gga_c_pbe.c b/libxc/src/gga_c_pbe.c new file mode 100644 index 000000000..8c50d1def --- /dev/null +++ b/libxc/src/gga_c_pbe.c @@ -0,0 +1,497 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +/************************************************************************ + Implements Perdew, Burke & Ernzerhof Generalized Gradient Approximation + correlation functional. + + I based this implementation on a routine from L.C. Balbas and J.M. Soler +************************************************************************/ + +#define XC_GGA_C_PBE 130 /* Perdew, Burke & Ernzerhof correlation */ +#define XC_GGA_C_PBE_SOL 133 /* Perdew, Burke & Ernzerhof correlation SOL */ +#define XC_GGA_C_XPBE 136 /* xPBE reparametrization by Xu & Goddard */ +#define XC_GGA_C_PBE_JRGX 138 /* JRGX reparametrization by Pedroza, Silva & Capelle */ +#define XC_GGA_C_RGE2 143 /* Regularized PBE */ +#define XC_GGA_C_APBE 186 /* mu fixed from the semiclassical neutral atom */ +#define XC_GGA_C_SPBE 89 /* PBE correlation to be used with the SSB exchange */ +#define XC_GGA_C_VPBE 83 /* variant PBE */ +#define XC_GGA_C_ZPBESOL 63 /* spin-dependent gradient correction to PBEsol */ +#define XC_GGA_C_PBEINT 62 /* PBE for hybrid interfaces */ +#define XC_GGA_C_ZPBEINT 61 /* spin-dependent gradient correction to PBEint */ + +typedef struct{ + FLOAT beta; +} gga_c_pbe_params; + + +static void gga_c_pbe_init(XC(func_type) *p) +{ + static const FLOAT beta[] = { + 0.06672455060314922, /* 0: original PBE */ + 0.046, /* 1: PBE sol */ + 0.089809, /* 2: xPBE */ + 3.0*10.0/(81.0*M_PI*M_PI), /* 3: PBE_JRGX */ + 0.053, /* 4: RGE2 */ + 3.0*0.260/(M_PI*M_PI), /* 5: APBE (C) */ + 0.06672455060314922, /* 6: sPBE */ + 0.0, /* 7: vPBE this is calculated */ + 0.046, /* 8: zPBEsol */ + 0.052, /* 9: PBEint */ + 0.052 /* 10: zPBEint */ + }; + + assert(p!=NULL && p->params == NULL); + p->params = malloc(sizeof(gga_c_pbe_params)); + + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_LDA_C_PW_MOD, p->nspin); + + switch(p->info->number){ + case XC_GGA_C_PBE: p->func = 0; break; + case XC_GGA_C_PBE_SOL: p->func = 1; break; + case XC_GGA_C_XPBE: p->func = 2; break; + case XC_GGA_C_PBE_JRGX: p->func = 3; break; + case XC_GGA_C_RGE2: p->func = 4; break; + case XC_GGA_C_APBE: p->func = 5; break; + case XC_GGA_C_SPBE: p->func = 6; break; + case XC_GGA_C_VPBE: p->func = 7; break; + case XC_GGA_C_ZPBESOL: p->func = 8; break; + case XC_GGA_C_PBEINT: p->func = 9; break; + case XC_GGA_C_ZPBEINT: p->func = 10; break; + default: + fprintf(stderr, "Internal error in gga_c_pbe\n"); + exit(1); + } + + XC(gga_c_pbe_set_params)(p, beta[p->func]); +} + + +void +XC(gga_c_pbe_set_params)(XC(func_type) *p, FLOAT beta) +{ + gga_c_pbe_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_c_pbe_params *) (p->params); + + params->beta = beta; +} + + +static inline void +pbe_eq8(int order, FLOAT beta, FLOAT gamm, FLOAT ecunif, FLOAT phi, + FLOAT *A, FLOAT *dbeta, FLOAT *dec, FLOAT *dphi, + FLOAT *dec2, FLOAT *decphi, FLOAT *dphi2) +{ + FLOAT phi3, f1, df1dphi, d2f1dphi2, f2, f3, dx, d2x; + + phi3 = POW(phi, 3); + f1 = ecunif/(gamm*phi3); + f2 = EXP(-f1); + f3 = f2 - 1.0; + + *A = beta/(gamm*f3); + + if(order < 1) return; + + df1dphi = -3.0*f1/phi; + dx = (*A)*f2/f3; + + *dbeta = 1.0/(gamm*f3); + *dec = dx/(gamm*phi3); + *dphi = dx*df1dphi; + + if(order < 2) return; + + d2f1dphi2 = -4.0*df1dphi/phi; + d2x = dx*(2.0*f2 - f3)/f3; + *dphi2 = d2x*df1dphi*df1dphi + dx*d2f1dphi2; + *decphi = (d2x*df1dphi*f1 + dx*df1dphi)/ecunif; + *dec2 = d2x/(gamm*gamm*phi3*phi3); +} + + +static inline void +pbe_eq7(int order, int func, FLOAT beta, FLOAT gamm, FLOAT phi, FLOAT t, FLOAT A, FLOAT B, + FLOAT *H, FLOAT *dbeta, FLOAT *dphi, FLOAT *dt, FLOAT *dA, + FLOAT *d2phi, FLOAT *d2phit, FLOAT *d2phiA, FLOAT *d2t2, FLOAT *d2tA, FLOAT *d2A2) +{ + FLOAT alpha, t2, phi3, f1, f2, f3; + FLOAT df2dbeta, df1dt, df2dt, df1dA, df2dA; + FLOAT d2f1dt2, d2f2dt2, d2f2dA2, d2f1dtA, d2f2dtA; + FLOAT ff, dffdt, dffdphi; + + t2 = t*t; + phi3 = POW(phi, 3); + + f1 = t2 + B*A*t2*t2; + f3 = 1.0 + A*f1; + f2 = beta*f1/(gamm*f3); + + if(func == 8 || func == 10){ /* zPBEsol and zPBEint */ + alpha = (func == 8) ? 4.8 : 2.4; + ff = POW(phi, alpha*t*t2); + }else + ff = 1.0; + + *H = ff*gamm*phi3*LOG(1.0 + f2); + + if(order < 1) return; + + if(func == 8 || func == 10){ /* zPBEsol and zPBEint */ + dffdphi = alpha*t*t2*ff/phi; + dffdt = 3.0*alpha*t2*ff*LOG(phi); + }else{ + dffdphi = 0.0; + dffdt = 0.0; + } + + *dphi = 3.0*(*H)/phi + (*H)*dffdphi/ff; + + df2dbeta = f2/beta; + *dbeta = ff*gamm*phi3*df2dbeta/(1.0 + f2); + + df1dt = t*(2.0 + 4.0*B*A*t2); + df2dt = beta/(gamm*f3*f3) * df1dt; + *dt = ff*gamm*phi3*df2dt/(1.0 + f2) + (*H)*dffdt/ff; + + df1dA = B*t2*t2; + df2dA = beta/(gamm*f3*f3) * (df1dA - f1*f1); + *dA = ff*gamm*phi3*df2dA/(1.0 + f2); + + if(order < 2) return; + + *d2phi = 2.0*(*dphi)/phi; + *d2phit = 3.0*(*dt)/phi; + *d2phiA = 3.0*(*dA)/phi; + + d2f1dt2 = 2.0 + 4.0*3.0*B*A*t2; + d2f2dt2 = beta/(gamm*f3*f3) * (d2f1dt2 - 2.0*A/f3*df1dt*df1dt); + *d2t2 = gamm*phi3*(d2f2dt2*(1.0 + f2) - df2dt*df2dt)/((1.0 + f2)*(1.0 + f2)); + + d2f1dtA = 4.0*B*t*t2; + d2f2dtA = beta/(gamm*f3*f3) * + (d2f1dtA - 2.0*df1dt*(f1 + A*df1dA)/f3); + *d2tA = gamm*phi3*(d2f2dtA*(1.0 + f2) - df2dt*df2dA)/((1.0 + f2)*(1.0 + f2)); + + d2f2dA2 = beta/(gamm*f3*f3*f3) *(-2.0)*(2.0*f1*df1dA - f1*f1*f1 + A*df1dA*df1dA); + *d2A2 = gamm*phi3*(d2f2dA2*(1.0 + f2) - df2dA*df2dA)/((1.0 + f2)*(1.0 + f2)); +} + + +inline void +XC(gga_c_pbe_func) (const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + /* parameter for beta of VPBE */ + static FLOAT b_1 = 0.066725, b_2 = 0.1, b_3 = 0.1778; + + FLOAT cnst_beta, phi, t; + + FLOAT A, dAdbeta, dAdec, dAdphi, d2Adec2, d2Adecphi, d2Adphi2; + FLOAT H, dHdbeta, dHdphi, dHdt, dHdA, d2Hdphi2, d2Hdphit, d2HdphiA, d2Hdt2, d2HdtA, d2HdA2; + FLOAT dfdbeta, dfdphi, dfdec, dfdt, dtdrs, dtdxt, dtdphi, dphidz; + FLOAT d2fdphi2, d2fdphit, d2fdphiec, d2fdt2, d2fdtec, d2fdec2; + FLOAT d2tdrs2, d2tdrsxt, d2tdphi2, d2tdrsphi, d2tdxtphi, d2phidz2; + FLOAT B; + + XC(lda_work_t) pw; + FLOAT tconv, auxp, auxm, beta, gamm, beta_den, dbetadrs; + + assert(p->params != NULL); + cnst_beta = ((gga_c_pbe_params *) (p->params))->beta; + + pw.order = r->order; + pw.rs[0] = SQRT(r->rs); + pw.rs[1] = r->rs; + pw.rs[2] = r->rs*r->rs; + pw.zeta = r->zeta; + + XC(lda_c_pw_func)(p->func_aux[0], &pw); + + tconv = 4.0*M_CBRT2; + + auxp = CBRT(1.0 + r->zeta); + auxm = CBRT(1.0 - r->zeta); + + phi = 0.5*(auxp*auxp + auxm*auxm); + t = r->xt/(tconv*phi*pw.rs[0]); + + if(p->func == 2) + gamm = cnst_beta*cnst_beta/(2.0*0.197363); /* for xPBE */ + else + gamm = (1.0 - LOG(2.0))/(M_PI*M_PI); + + if(p->func == 7){ + beta_den = (1.0 + b_3*r->rs); + beta = b_1 * (1.0 + b_2*r->rs)/beta_den; + }else + beta = cnst_beta; + + pbe_eq8(r->order, beta, gamm, pw.zk, phi, + &A, &dAdbeta, &dAdec, &dAdphi, &d2Adec2, &d2Adecphi, &d2Adphi2); + + /* the sPBE functional contains one term less than the original PBE, so we set it to zero */ + B = (p->func == 6) ? 0.0 : 1.0; + pbe_eq7(r->order, p->func, beta, gamm, phi, t, A, B, + &H, &dHdbeta, &dHdphi, &dHdt, &dHdA, &d2Hdphi2, &d2Hdphit, &d2HdphiA, &d2Hdt2, &d2HdtA, &d2HdA2); + + r->f = pw.zk + H; + + if(r->order < 1) return; + + if(p->func == 7){ + dbetadrs = b_1*(b_2 - b_3)/(beta_den*beta_den); + }else + dbetadrs = 0.0; + + /* full derivatives of functional */ + dfdbeta= dHdbeta + dHdA*dAdbeta; + dfdphi = dHdphi + dHdA*dAdphi; + dfdt = dHdt; + dfdec = 1.0 + dHdA*dAdec; + + dphidz = 0.0; + if(auxp > p->info->min_zeta) dphidz += 1/auxp; + if(auxm > p->info->min_zeta) dphidz -= 1/auxm; + dphidz *= 1.0/3.0; + + dtdrs = -r->xt/(2.0*tconv*phi*r->rs*pw.rs[0]); + dtdxt = t/r->xt; + dtdphi = -t/phi; + + r->dfdrs = dfdec*pw.dedrs + dfdt*dtdrs + dfdbeta*dbetadrs; + r->dfdz = dfdec*pw.dedz + (dfdphi + dfdt*dtdphi)*dphidz; + r->dfdxt = dfdt*dtdxt; + r->dfdxs[0] = 0.0; + r->dfdxs[1] = 0.0; + + if(r->order < 2) return; + + /* full derivatives of functional with respect to phi and zk */ + d2fdphi2 = d2Hdphi2 + 2.0*d2HdphiA*dAdphi + dHdA*d2Adphi2 + d2HdA2*dAdphi*dAdphi; + d2fdphit = d2Hdphit + d2HdtA*dAdphi; + d2fdphiec = d2HdphiA*dAdec + d2HdA2*dAdphi*dAdec + dHdA*d2Adecphi; + d2fdt2 = d2Hdt2; + d2fdtec = d2HdtA*dAdec; + d2fdec2 = d2HdA2*dAdec*dAdec + dHdA*d2Adec2; + + d2phidz2 = 0.0; + if(auxp > p->info->min_zeta) d2phidz2 += 1.0/((1.0 + r->zeta)*auxp); + if(auxm > p->info->min_zeta) d2phidz2 += 1.0/((1.0 - r->zeta)*auxm); + d2phidz2 *= -1.0/9.0; + + d2tdrs2 = 3.0*r->xt/(4.0*tconv*phi*pw.rs[2]*pw.rs[0]); + d2tdrsxt = dtdrs/r->xt; + d2tdphi2 = -2.0*dtdphi/phi; + d2tdrsphi = -dtdrs/phi; + d2tdxtphi = dtdphi/r->xt; + + r->d2fdrs2 = dfdec*pw.d2edrs2 + d2fdec2*pw.dedrs*pw.dedrs + 2.0*d2fdtec*pw.dedrs*dtdrs + d2fdt2*dtdrs*dtdrs + dfdt*d2tdrs2; + r->d2fdrsz = dfdec*pw.d2edrsz + pw.dedrs*(d2fdec2*pw.dedz + dphidz*(d2fdtec*dtdphi + d2fdphiec)) + + dfdt*dphidz*d2tdrsphi + dtdrs*(d2fdtec*pw.dedz + dphidz*(d2fdt2*dtdphi + d2fdphit)); + r->d2fdrsxt = dtdxt*(d2fdtec*pw.dedrs + d2fdt2*dtdrs) + dfdt*d2tdrsxt; + r->d2fdrsxs[0] = 0.0; + r->d2fdrsxs[1] = 0.0; + r->d2fdz2 = dfdec*pw.d2edz2 + d2fdec2*pw.dedz*pw.dedz + dfdt*(dtdphi*d2phidz2 + d2tdphi2*dphidz*dphidz) + + dfdphi*d2phidz2 + 2.0*dphidz*pw.dedz*(d2fdtec*dtdphi + d2fdphiec) + + dphidz*dphidz*(d2fdt2*dtdphi*dtdphi + 2.0*d2fdphit*dtdphi + d2fdphi2); + r->d2fdzxt = dfdt*d2tdxtphi*dphidz + dtdxt*(d2fdtec*pw.dedz + dphidz*(d2fdt2*dtdphi + d2fdphit)); + r->d2fdzxs[0] = 0.0; + r->d2fdzxs[1] = 0.0; + r->d2fdxt2 = d2fdt2*dtdxt*dtdxt; + r->d2fdxtxs[0] = 0.0; + r->d2fdxtxs[1] = 0.0; + r->d2fdxs2[0] = 0.0; + r->d2fdxs2[1] = 0.0; + r->d2fdxs2[2] = 0.0; +} + +#define func XC(gga_c_pbe_func) +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_c_pbe) = { + XC_GGA_C_PBE, + XC_CORRELATION, + "Perdew, Burke & Ernzerhof", + XC_FAMILY_GGA, + "JP Perdew, K Burke, and M Ernzerhof, Phys. Rev. Lett. 77, 3865 (1996)\n" + "JP Perdew, K Burke, and M Ernzerhof, Phys. Rev. Lett. 78, 1396(E) (1997)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-12, 1e-32, 0.0, 1e-32, + gga_c_pbe_init, + NULL, NULL, + work_gga_c, + NULL +}; + + +const XC(func_info_type) XC(func_info_gga_c_pbe_sol) = { + XC_GGA_C_PBE_SOL, + XC_CORRELATION, + "Perdew, Burke & Ernzerhof SOL", + XC_FAMILY_GGA, + "JP Perdew, et al, Phys. Rev. Lett. 100, 136406 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-12, 1e-32, 0.0, 1e-32, + gga_c_pbe_init, + NULL, NULL, + work_gga_c, + NULL +}; + + +const XC(func_info_type) XC(func_info_gga_c_xpbe) = { + XC_GGA_C_XPBE, + XC_CORRELATION, + "Extended PBE by Xu & Goddard III", + XC_FAMILY_GGA, + "X Xu and WA Goddard III, J. Chem. Phys. 121, 4068 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-12, 1e-32, 0.0, 1e-32, + gga_c_pbe_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_c_pbe_jrgx) = { + XC_GGA_C_PBE_JRGX, + XC_CORRELATION, + "Reparametrized PBE by Pedroza, Silva & Capelle", + XC_FAMILY_GGA, + "LS Pedroza, AJR da Silva, and K. Capelle, Phys. Rev. B 79, 201106(R) (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-12, 1e-32, 0.0, 1e-32, + gga_c_pbe_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_c_rge2) = { + XC_GGA_C_RGE2, + XC_CORRELATION, + "Regularized PBE", + XC_FAMILY_GGA, + "A Ruzsinszky, GI Csonka, and G Scuseria, J. Chem. Theory Comput. 5, 763 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-12, 1e-32, 0.0, 1e-32, + gga_c_pbe_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_c_apbe) = { + XC_GGA_C_APBE, + XC_CORRELATION, + "mu fixed from the semiclassical neutral atom", + XC_FAMILY_GGA, + "LA Constantin, E Fabiano, S Laricchia, and F Della Sala, Phys. Rev. Lett. 106, 186406 (2011)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-12, 1e-32, 0.0, 1e-32, + gga_c_pbe_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_c_spbe) = { + XC_GGA_C_SPBE, + XC_CORRELATION, + "PBE correlation to be used with the SSB exchange", + XC_FAMILY_GGA, + "M Swart, M Sola, and FM Bickelhaupt, J. Chem. Phys. 131, 094103 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-12, 1e-32, 0.0, 1e-32, + gga_c_pbe_init, + NULL, NULL, + work_gga_c, + NULL +}; + + +const XC(func_info_type) XC(func_info_gga_c_vpbe) = { + XC_GGA_C_VPBE, + XC_CORRELATION, + "variant PBE", + XC_FAMILY_GGA, + "JP Perdew, A Ruzsinszky, GI Csonka, LA Constantin, and J Sun, Phys. Rev. Lett. 103, 026403 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-12, 1e-32, 0.0, 1e-32, + gga_c_pbe_init, + NULL, NULL, + work_gga_c, + NULL +}; + + +const XC(func_info_type) XC(func_info_gga_c_zpbesol) = { + XC_GGA_C_ZPBESOL, + XC_CORRELATION, + "spin-dependent gradient correction to PBEsol", + XC_FAMILY_GGA, + "A Constantin, E Fabiano, and F Della Sala, Phys. Rev. B 84, 233103 (2011)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-12, 1e-32, 0.0, 1e-32, + gga_c_pbe_init, + NULL, NULL, + work_gga_c, + NULL +}; + + +const XC(func_info_type) XC(func_info_gga_c_pbeint) = { + XC_GGA_C_PBEINT, + XC_CORRELATION, + "PBE for hybrid interfaces", + XC_FAMILY_GGA, + "E. Fabiano, LA Constantin, and F. Della Sala, Phys. Rev. B 82, 113104 (2010)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-12, 1e-32, 0.0, 1e-32, + gga_c_pbe_init, + NULL, NULL, + work_gga_c, + NULL +}; + + +const XC(func_info_type) XC(func_info_gga_c_zpbeint) = { + XC_GGA_C_ZPBEINT, + XC_CORRELATION, + "spin-dependent gradient correction to PBEint", + XC_FAMILY_GGA, + "A Constantin, E Fabiano, and F Della Sala, Phys. Rev. B 84, 233103 (2011)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-12, 1e-32, 0.0, 1e-32, + gga_c_pbe_init, + NULL, NULL, + work_gga_c, + NULL +}; diff --git a/libxc/src/gga_c_pw91.c b/libxc/src/gga_c_pw91.c new file mode 100644 index 000000000..80c87839e --- /dev/null +++ b/libxc/src/gga_c_pw91.c @@ -0,0 +1,331 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include +#include "util.h" + +#define XC_GGA_C_PW91 134 /* Perdew & Wang 91 */ + +static FLOAT pw91_nu, pw91_beta; +static const FLOAT + pw91_C_c0 = 4.235e-3, + pw91_alpha = 0.09; + +static void +gga_c_pw91_init(XC(func_type) *p) +{ + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_LDA_C_PW, p->nspin); + + pw91_nu = 16.0/M_PI * CBRT(3.0*M_PI*M_PI); + pw91_beta = pw91_nu*pw91_C_c0; +} + + +static void +A_eq14(int order, FLOAT ec, FLOAT g, FLOAT *A, + FLOAT *dAec, FLOAT *dAg, + FLOAT *d2Aec2, FLOAT *d2Ag2, FLOAT *d2Aecg) +{ + FLOAT xx, expxx, g2, g3; + FLOAT dAdxx, dxxdec, dxxdg; + FLOAT d2Adxx2, d2xxdecg, d2xxdg2; + + g2 = g*g; + g3 = g*g2; + + xx = -2.0*pw91_alpha*ec/(g3*pw91_beta*pw91_beta); + expxx = EXP(xx); + + *A = (2.0*pw91_alpha/pw91_beta)/(expxx - 1.0); + + if(order < 1) return; + + dAdxx = -(*A)*expxx/(expxx - 1.0); + dxxdec = xx/ec; + dxxdg = -3.0*xx/g; + + *dAec = dAdxx*dxxdec; + *dAg = dAdxx*dxxdg; + + if(order < 2) return; + + d2Adxx2 = -dAdxx*(expxx + 1.0) / (expxx - 1.0); + d2xxdecg = dxxdg/ec; + d2xxdg2 = -4.0*dxxdg/g; + + *d2Aec2 = d2Adxx2*dxxdec*dxxdec; + *d2Aecg = d2Adxx2*dxxdec*dxxdg + dAdxx*d2xxdecg; + *d2Ag2 = d2Adxx2*dxxdg *dxxdg + dAdxx*d2xxdg2; +} + + +static void +H0_eq13(int order, FLOAT ec, FLOAT g, FLOAT t, FLOAT *H0, + FLOAT *dH0dec, FLOAT *dH0dg, FLOAT *dH0dt, + FLOAT *d2H0dec2, FLOAT *d2H0dg2, FLOAT *d2H0dt2, FLOAT *d2H0dgec, FLOAT *d2H0dtec, FLOAT *d2H0dgt) +{ + FLOAT c1, c2, A, dAdec, dAdg, d2Adec2, d2Adg2, d2Adecg; + FLOAT g3, t2, t4, n0, d0; + FLOAT f, dfdA, dfdt, pH0pg, pH0pA, pH0pt; + FLOAT d2fdA2, d2fdAt, d2fdt2, p2H0pg2, p2H0pgA, p2H0pgt, p2H0pA2, p2H0pAt, p2H0pt2; + + c1 = pw91_beta*pw91_beta/(2.0*pw91_alpha); + c2 = 2.0*pw91_alpha/pw91_beta; + + A_eq14(order, ec, g, &A, &dAdec, &dAdg, &d2Adec2, &d2Adg2, &d2Adecg); + + g3 = g*g*g; + t2 = t*t; + t4 = t2*t2; + + n0 = t2 + A*t4; + d0 = 1.0 + A*t2 + A*A*t4; + f = n0/d0; + + *H0 = c1*g3*LOG(1.0 + c2*f); + + if(order < 1) return; + + dfdA = -A*t2*t4*(2.0 + A*t2)/(d0*d0); + dfdt = 2.0*t*(1.0 + 2.0*A*t2)/(d0*d0); + + pH0pg = 3.0*(*H0)/g; + pH0pA = c1*g3*c2*dfdA/(1.0 + c2*f); + pH0pt = c1*g3*c2*dfdt/(1.0 + c2*f); + + *dH0dec = pH0pA*dAdec; + *dH0dg = pH0pg + pH0pA*dAdg; + *dH0dt = pH0pt; + + if(order < 2) return; + + d2fdA2 = 2.0*t4*t2*(A*A*t4*(A*t2 + 3.0) - 1.0)/(d0*d0*d0); + d2fdAt = -12.0*A*t4*t*(A*t2 + 1.0)/(d0*d0*d0); + d2fdt2 = (2.0 - 2.0*A*t2*(A*t2*(9.0 + 10.0*A*t2) - 3.0))/(d0*d0*d0); + + p2H0pg2 = 2.0*pH0pg/g; + p2H0pgA = 3.0*pH0pA/g; + p2H0pgt = 3.0*pH0pt/g; + p2H0pA2 = c1*g3*c2*(d2fdA2*(1.0 + c2*f) - c2*dfdA*dfdA)/((1.0 + c2*f)*(1.0 + c2*f)); + p2H0pAt = c1*g3*c2*(d2fdAt*(1.0 + c2*f) - c2*dfdA*dfdt)/((1.0 + c2*f)*(1.0 + c2*f)); + p2H0pt2 = c1*g3*c2*(d2fdt2*(1.0 + c2*f) - c2*dfdt*dfdt)/((1.0 + c2*f)*(1.0 + c2*f)); + + *d2H0dec2 = p2H0pA2*dAdec*dAdec + pH0pA*d2Adec2; + *d2H0dgec = p2H0pgA*dAdec + p2H0pA2*dAdec*dAdg + pH0pA*d2Adecg; + *d2H0dtec = p2H0pAt*dAdec; + *d2H0dg2 = p2H0pg2 + 2.0*p2H0pgA*dAdg + p2H0pA2*dAdg*dAdg + pH0pA*d2Adg2; + *d2H0dgt = p2H0pgt + p2H0pAt*dAdg; + *d2H0dt2 = p2H0pt2; +} + + +/* pade parametrized form of C-xc found in + M Rasolt & DJW Geldart, Phys. Rev. B 34, 1325 (1986) +*/ +static inline void +Rasold_Geldart_C_xc(int order, FLOAT rs, FLOAT *C_xc, FLOAT *drs, FLOAT *d2rs) +{ + const FLOAT + a[3] = {2.568, 23.266, 0.007389}, + b[3] = {1.0, 8.723, 0.472}; + + FLOAT d0, d1, d2, n0, n1, n2; + + n0 = (a[0] + rs*(a[1] + rs*a[2])); + d0 = b[0] + rs*(b[1] + rs*(b[2] + 10.0*rs*a[2])); + + *C_xc = n0/(1000.0*d0); + + if(order < 1) return; + + n1 = a[1] + 2.0*rs*a[2]; + d1 = b[1] + 2.0*rs*b[2] + 10.0*3.0*rs*rs*a[2]; + + *drs = (n1*d0 - n0*d1)/(1000.0*d0*d0); + + if(order < 2) return; + + n2 = 2.0*a[2]; + d2 = 2.0*b[2] + 10.0*3.0*2.0*rs*a[2]; + + *d2rs = (2.0*n0*d1*d1 - 2.0*d0*d1*n1 - d0*n0*d2 + d0*d0*n2)/(1000.0*d0*d0*d0); +} + + +static void +H1_eq15(int order, FLOAT rs, FLOAT g, FLOAT t, FLOAT *H1, + FLOAT *dH1drs, FLOAT *dH1dg, FLOAT *dH1dt, + FLOAT *d2H1drs2, FLOAT *d2H1dg2, FLOAT *d2H1dt2, FLOAT *d2H1dgrs, FLOAT *d2H1dtrs, FLOAT *d2H1dgt) +{ + const FLOAT C_xc0 = 2.568e-3, C_x = -0.001667; + const FLOAT a1 = -100.0*0.663436439606450070377435073068; /* -100*4/Pi (4/(9 Pi))^(1/3) */ + + FLOAT g3, g4, t2, C_xc; + FLOAT p1, dp1drs, dp1dg, dp1dt, d2p1drs2, d2p1dgrs, d2p1dtrs, d2p1dg2, d2p1dgt, d2p1dt2; + FLOAT p2, dp2drs, d2p2drs2; + + g3 = g*g*g; + g4 = g3*g; + t2 = t*t; + + p1 = a1*rs*g4*t2; + p1 = EXP(p1); + + Rasold_Geldart_C_xc(order, rs, &C_xc, &dp2drs, &d2p2drs2); + p2 = C_xc - C_xc0 - 3.0*C_x/7.0; + + *H1 = pw91_nu*p2*g3*t2*p1; + + if(order < 1) return; + + dp1drs = a1*g4*t2*p1; + dp1dg = a1*rs*4.0*g3*t2*p1; + dp1dt = a1*rs*g4*2.0*t*p1; + + *dH1drs = pw91_nu*g3*t2*(dp2drs*p1 + p2*dp1drs); + *dH1dg = pw91_nu*p2*t2*(3.0*g*g*p1 + g3*dp1dg); + *dH1dt = pw91_nu*p2*g3*(2.0*t*p1 + t2*dp1dt); + + if(order < 2) return; + + d2p1drs2 = a1*g4*t2*dp1drs; + d2p1dgrs = a1*t2*(4.0*g3*p1 + g4*dp1dg); + d2p1dtrs = a1*g4*(2.0*t *p1 + t2*dp1dt); + d2p1dg2 = a1*rs*t2*4.0*(3.0*g*g*p1 + g3*dp1dg); + d2p1dgt = a1*rs*4.0*g3*(2.0*t*p1 + t2*dp1dt); + d2p1dt2 = a1*rs*g4*2.0*(p1 + t*dp1dt); + + *d2H1drs2 = pw91_nu*g3*t2*(d2p2drs2*p1 + 2.0*dp2drs*dp1drs + p2*d2p1drs2); + *d2H1dgrs = pw91_nu*t2*(3.0*g*g*(dp2drs*p1 + p2*dp1drs) + g3*(dp2drs*dp1dg + p2*d2p1dgrs)); + *d2H1dtrs = pw91_nu*g3*(2.0*t *(dp2drs*p1 + p2*dp1drs) + t2*(dp2drs*dp1dt + p2*d2p1dtrs)); + *d2H1dg2 = pw91_nu*p2*t2*(6.0*g*p1 + 6.0*g*g*dp1dg + g3*d2p1dg2); + *d2H1dgt = pw91_nu*p2*(2.0*t*(3.0*g*g*p1 + g3*dp1dg) + t2*(3.0*g*g*dp1dt + g3*d2p1dgt)); + *d2H1dt2 = pw91_nu*p2*g3*(2.0*p1 + 4.0*t*dp1dt + t2*d2p1dt2); +} + + +void +XC(gga_c_pw91_func) (const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + FLOAT g, dgdz, d2gdz2; + FLOAT t, dtdrs, dtdxt, dtdg, d2tdrs2, d2tdrsxt, d2tdg2, d2tdgrs, d2tdxtg; + FLOAT H0, dH0dec, dH0dg, dH0dt, d2H0dec2, d2H0dg2, d2H0dt2, d2H0dgec, d2H0dtec, d2H0dgt; + FLOAT H1, dH1drs, dH1dg, dH1dt, d2H1drs2, d2H1dg2, d2H1dt2, d2H1dgrs, d2H1dtrs, d2H1dgt; + + XC(lda_work_t) pw; + FLOAT tconv, auxp, auxm; + + pw.order = r->order; + pw.rs[0] = SQRT(r->rs); + pw.rs[1] = r->rs; + pw.rs[2] = r->rs*r->rs; + pw.zeta = r->zeta; + + XC(lda_c_pw_func)(p->func_aux[0], &pw); + + tconv = 4.0*M_CBRT2; + + auxp = CBRT(1.0 + r->zeta); + auxm = CBRT(1.0 - r->zeta); + + g = 0.5*(auxp*auxp + auxm*auxm); /* g is called phi in PBE */ + t = r->xt/(tconv*g*pw.rs[0]); + + H0_eq13(r->order, pw.zk, g, t, &H0, &dH0dec, &dH0dg, &dH0dt, + &d2H0dec2, &d2H0dg2, &d2H0dt2, &d2H0dgec, &d2H0dtec, &d2H0dgt); + H1_eq15(r->order, r->rs, g, t, &H1, &dH1drs, &dH1dg, &dH1dt, + &d2H1drs2, &d2H1dg2, &d2H1dt2, &d2H1dgrs, &d2H1dtrs, &d2H1dgt); + + r->f = pw.zk + H0 + H1; + + if(r->order < 1) return; + + dgdz = 0.0; + if(auxp > p->info->min_zeta) dgdz += 1/auxp; + if(auxm > p->info->min_zeta) dgdz -= 1/auxm; + dgdz *= 1.0/3.0; + + dtdrs = -r->xt/(2.0*tconv*g*r->rs*pw.rs[0]); + dtdxt = t/r->xt; + dtdg = -t/g; + + r->dfdrs = dH1drs + (1.0 + dH0dec)*pw.dedrs + (dH0dt + dH1dt)*dtdrs; + r->dfdz = (1.0 + dH0dec)*pw.dedz + (dH0dg + dH1dg + (dH0dt + dH1dt)*dtdg)*dgdz; + r->dfdxt = (dH0dt + dH1dt)*dtdxt; + r->dfdxs[0] = 0.0; + r->dfdxs[1] = 0.0; + + if(r->order < 2) return; + + d2gdz2 = 0.0; + if(auxp > p->info->min_zeta) d2gdz2 += 1.0/((1.0 + r->zeta)*auxp); + if(auxm > p->info->min_zeta) d2gdz2 += 1.0/((1.0 - r->zeta)*auxm); + d2gdz2 *= -1.0/9.0; + + d2tdrs2 = 3.0*r->xt/(4.0*tconv*g*pw.rs[2]*pw.rs[0]); + d2tdrsxt = dtdrs/r->xt; + d2tdg2 = -2.0*dtdg/g; + d2tdgrs = -dtdrs/g; + d2tdxtg = dtdg/r->xt; + + r->d2fdrs2 = d2H1drs2 + d2H1dtrs*dtdrs + (1.0 + dH0dec)*pw.d2edrs2 + d2H0dec2*pw.dedrs*pw.dedrs + + 2.0*d2H0dtec*pw.dedrs*dtdrs + (d2H0dt2 + d2H1dt2)*dtdrs*dtdrs + (dH0dt + dH1dt)*d2tdrs2; + r->d2fdrsz = (1.0 + dH0dec)*pw.d2edrsz + pw.dedrs*(d2H0dec2*pw.dedz + dgdz*(d2H0dtec*dtdg + d2H0dgec)) + + (d2H1dgrs + d2H1dtrs*dtdg)*dgdz + (dH0dt + dH1dt)*dgdz*d2tdgrs + + dtdrs*(d2H0dtec*pw.dedz + dgdz*((d2H0dt2 + d2H1dt2)*dtdg + d2H0dgt + d2H1dgt)); + r->d2fdrsxt = d2H1dtrs*dtdxt + dtdxt*(d2H0dtec*pw.dedrs + (d2H0dt2 + d2H1dt2)*dtdrs) + (dH0dt + dH1dt)*d2tdrsxt; + r->d2fdrsxs[0] = 0.0; + r->d2fdrsxs[1] = 0.0; + r->d2fdz2 = (1.0 + dH0dec)*pw.d2edz2 + d2H0dec2*pw.dedz*pw.dedz + (dH0dt + dH1dt)*(dtdg*d2gdz2 + d2tdg2*dgdz*dgdz) + + (dH0dg + dH1dg)*d2gdz2 + 2.0*dgdz*pw.dedz*(d2H0dtec*dtdg + d2H0dgec) + + dgdz*dgdz*((d2H0dt2 + d2H1dt2)*dtdg*dtdg + 2.0*(d2H0dgt + d2H1dgt)*dtdg + d2H0dg2 + d2H1dg2); + r->d2fdzxt = (dH0dt + dH1dt)*d2tdxtg*dgdz + dtdxt*(d2H0dtec*pw.dedz + dgdz*((d2H0dt2 + d2H1dt2)*dtdg + d2H0dgt + d2H1dgt)); + r->d2fdzxs[0] = 0.0; + r->d2fdzxs[1] = 0.0; + r->d2fdxt2 = (d2H0dt2 + d2H1dt2)*dtdxt*dtdxt; + r->d2fdxtxs[0] = 0.0; + r->d2fdxtxs[1] = 0.0; + r->d2fdxs2[0] = 0.0; + r->d2fdxs2[1] = 0.0; + r->d2fdxs2[2] = 0.0; +} + +#define func XC(gga_c_pw91_func) +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_c_pw91) = { + XC_GGA_C_PW91, + XC_CORRELATION, + "Perdew & Wang 91", + XC_FAMILY_GGA, + "JP Perdew, JA Chevary, SH Vosko, KA Jackson, MR Pederson, DJ Singh, and C Fiolhais, Phys. Rev. B 46, 6671 (1992)\n" + "JP Perdew, JA Chevary, SH Vosko, KA Jackson, MR Pederson, DJ Singh, and C Fiolhais, Phys. Rev. B 48, 4978(E) (1993)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-12, 1e-32, 0.0, 1e-32, + gga_c_pw91_init, + NULL, NULL, + work_gga_c, + NULL +}; diff --git a/libxc/src/gga_c_q2d.c b/libxc/src/gga_c_q2d.c new file mode 100644 index 000000000..58dca77c5 --- /dev/null +++ b/libxc/src/gga_c_q2d.c @@ -0,0 +1,191 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include + +#include "util.h" + +#define XC_GGA_C_Q2D 47 /* Chiodo et al */ + +static void gga_c_q2d_init(XC(func_type) *p) +{ + p->n_func_aux = 2; + p->func_aux = (XC(func_type) **) malloc(2*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + p->func_aux[1] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_LDA_C_2D_AMGB, p->nspin); + XC(func_init)(p->func_aux[1], XC_GGA_C_PBE, p->nspin); +} + + +inline void +XC(gga_c_q2d_func) (const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + const FLOAT rs2D_factor = 1.704, dd = 1e6; + + FLOAT rs2D, phi, tconv, auxp, auxm, t, t2, t4, t6, num, den, fac; + FLOAT drs2Ddrs, drs2Ddxt, d2rs2Ddrsxt, d2rs2Ddxt2; + FLOAT dphidz, dtdrs, dtdxt, dtdphi, dtdz, dnumdt, ddendt, dfacdt; + FLOAT d2phidz2, d2tdrs2, d2tdrsxt, d2tdphi2, d2tdrsphi, d2tdxtphi, d2tdz2, d2tdrsz, d2tdzxt, d2numdt2, d2dendt2, d2facdt2; + + XC(lda_work_t) ldaw; + XC(gga_work_c_t) ggaw; + + /* we start by getting the 2D LDA */ + rs2D = rs2D_factor*r->rs*SQRT(X2S*r->xt)/RS_FACTOR; + + ldaw.order = r->order; + + ldaw.rs[0] = SQRT(rs2D); + ldaw.rs[1] = rs2D; + ldaw.rs[2] = rs2D*rs2D; + ldaw.zeta = r->zeta; + + XC(lda_c_2d_amgb_func)(p->func_aux[0], &ldaw); + + /* now we get the PBE */ + memcpy(&ggaw, r, sizeof(XC(gga_work_c_t))); + + XC(gga_c_pbe_func)(p->func_aux[1], &ggaw); + + /* now comes the interpolation between them */ + tconv = 4.0*M_CBRT2; + + auxp = CBRT(1.0 + r->zeta); + auxm = CBRT(1.0 - r->zeta); + + phi = 0.5*(auxp*auxp + auxm*auxm); + t = r->xt/(tconv*phi*SQRT(r->rs)); + + t2 = t*t; + t4 = t2*t2; + t6 = t4*t2; + + num = t4*(1.0 + t2); + den = dd + t6; + fac = num/den; + + r->f = ggaw.f + fac*(-ggaw.f + ldaw.zk); + + if(r->order < 1) return; + + drs2Ddrs = rs2D/r->rs; + drs2Ddxt = rs2D/(2.0*r->xt); + + dphidz = 0.0; + if(auxp > p->info->min_zeta) dphidz += 1/auxp; + if(auxm > p->info->min_zeta) dphidz -= 1/auxm; + dphidz *= 1.0/3.0; + + dtdrs = -t/(2.0*r->rs); + dtdxt = t/r->xt; + dtdphi = -t/phi; + dtdz = dtdphi*dphidz; + + dnumdt = t*t2*(4.0 + 6.0*t2); + ddendt = 6.0*t*t4; + dfacdt = DFRACTION(num, dnumdt, den, ddendt); + + r->dfdrs = ggaw.dfdrs + fac*(-ggaw.dfdrs + ldaw.dedrs*drs2Ddrs) + dfacdt*dtdrs*(-ggaw.f + ldaw.zk); + r->dfdz = ggaw.dfdz + fac*(-ggaw.dfdz + ldaw.dedz) + dfacdt*dtdz*(-ggaw.f + ldaw.zk); + r->dfdxt = ggaw.dfdxt + fac*(-ggaw.dfdxt + ldaw.dedrs*drs2Ddxt) + dfacdt*dtdxt*(-ggaw.f + ldaw.zk); + r->dfdxs[0] = (1.0 - fac)*ggaw.dfdxs[0]; + r->dfdxs[1] = (1.0 - fac)*ggaw.dfdxs[1]; + + + if(r->order < 2) return; + + d2rs2Ddrsxt = drs2Ddxt/r->rs; + d2rs2Ddxt2 = -drs2Ddxt/(2.0*r->xt); + + d2phidz2 = 0.0; + if(auxp > p->info->min_zeta) d2phidz2 += 1.0/((1.0 + r->zeta)*auxp); + if(auxm > p->info->min_zeta) d2phidz2 += 1.0/((1.0 - r->zeta)*auxm); + d2phidz2 *= -1.0/9.0; + + d2tdrs2 = -3.0*dtdrs/(2.0*r->rs); + d2tdrsxt = dtdrs/r->xt; + + d2tdphi2 = -2.0*dtdphi/phi; + d2tdrsphi = -dtdrs/phi; + d2tdxtphi = dtdphi/r->xt; + + d2tdz2 = d2tdphi2*dphidz*dphidz + dtdphi*d2phidz2; + d2tdrsz = d2tdrsphi*dphidz; + d2tdzxt = d2tdxtphi*dphidz; + + d2numdt2 = t2*(12.0 + 30.0*t2); + d2dendt2 = 30.0*t4; + d2facdt2 = D2FRACTION(num, dnumdt, d2numdt2, den, ddendt, d2dendt2); + + r->d2fdrs2 = ggaw.d2fdrs2 + fac*(-ggaw.d2fdrs2 + ldaw.d2edrs2*drs2Ddrs*drs2Ddrs) + + 2.0*dfacdt*dtdrs*(-ggaw.dfdrs + ldaw.dedrs*drs2Ddrs) + (d2facdt2*dtdrs*dtdrs + dfacdt*d2tdrs2)*(-ggaw.f + ldaw.zk); + + r->d2fdrsz = ggaw.d2fdrsz + fac*(-ggaw.d2fdrsz + ldaw.d2edrsz*drs2Ddrs) + + dfacdt*dtdrs*(-ggaw.dfdz + ldaw.dedz) + dfacdt*dtdz*(-ggaw.dfdrs + ldaw.dedrs*drs2Ddrs) + + (d2facdt2*dtdrs*dtdz + dfacdt*d2tdrsz)*(-ggaw.f + ldaw.zk); + + r->d2fdrsxt = ggaw.d2fdrsxt + fac*(-ggaw.d2fdrsxt + ldaw.d2edrs2*drs2Ddrs*drs2Ddxt + ldaw.dedrs*d2rs2Ddrsxt) + + dfacdt*dtdrs*(-ggaw.dfdxt + ldaw.dedrs*drs2Ddxt) + dfacdt*dtdxt*(-ggaw.dfdrs + ldaw.dedrs*drs2Ddrs) + + (d2facdt2*dtdrs*dtdxt + dfacdt*d2tdrsxt)*(-ggaw.f + ldaw.zk); + + r->d2fdrsxs[0] = 0.0; + r->d2fdrsxs[1] = 0.0; + + r->d2fdz2 = ggaw.d2fdz2 + fac*(-ggaw.d2fdz2 + ldaw.d2edz2) + + 2.0*dfacdt*dtdz*(-ggaw.dfdz + ldaw.dedz) + (d2facdt2*dtdz*dtdz + dfacdt*d2tdz2)*(-ggaw.f + ldaw.zk); + + r->d2fdzxt = ggaw.d2fdzxt + fac*(-ggaw.d2fdzxt + ldaw.d2edrsz*drs2Ddxt) + + dfacdt*dtdxt*(-ggaw.dfdz + ldaw.dedz) + dfacdt*dtdz*(-ggaw.dfdxt + ldaw.dedrs*drs2Ddxt) + + (d2facdt2*dtdxt*dtdz + dfacdt*d2tdzxt)*(-ggaw.f + ldaw.zk); + + r->d2fdzxs[0] = 0.0; + r->d2fdzxs[1] = 0.0; + + r->d2fdxt2 = ggaw.d2fdxt2 + fac*(-ggaw.d2fdxt2 + ldaw.d2edrs2*drs2Ddxt*drs2Ddxt + ldaw.dedrs*d2rs2Ddxt2) + + 2.0*dfacdt*dtdxt*(-ggaw.dfdxt + ldaw.dedrs*drs2Ddxt) + d2facdt2*dtdxt*dtdxt*(-ggaw.f + ldaw.zk); + + r->d2fdxtxs[0] = 0.0; + r->d2fdxtxs[1] = 0.0; + r->d2fdxs2[0] = 0.0; + r->d2fdxs2[1] = 0.0; + r->d2fdxs2[2] = 0.0; + +} + +#define func XC(gga_c_q2d_func) +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_c_q2d) = { + XC_GGA_C_Q2D, + XC_CORRELATION, + "Chiodo et al", + XC_FAMILY_GGA, + "L Chiodo, LA Constantin, E Fabiano, and F Della Sala, Phys. Rev. Lett. 108, 126402 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-23, 0.0, 1e-32, + gga_c_q2d_init, + NULL, NULL, + work_gga_c, + NULL +}; + diff --git a/libxc/src/gga_c_sogga11.c b/libxc/src/gga_c_sogga11.c new file mode 100644 index 000000000..fed17aeab --- /dev/null +++ b/libxc/src/gga_c_sogga11.c @@ -0,0 +1,207 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_GGA_C_SOGGA11 152 /* Second-order generalized gradient approximation 2011 */ +#define XC_GGA_C_SOGGA11_X 159 /* To be used with hyb_gga_x_SOGGA11-X */ + +static void +gga_c_sogga11_init(XC(func_type) *p) +{ + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_LDA_C_PW_MOD, p->nspin); + + switch(p->info->number){ + case XC_GGA_C_SOGGA11: p->func = 0; break; + case XC_GGA_C_SOGGA11_X: p->func = 1; break; + default: + fprintf(stderr, "Internal error in gga_c_sogga11\n"); + exit(1); + } +} + + +static inline void +func(const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + static FLOAT beta = 15.75592*0.004235; /* the usual value of 0.066726 */ + const FLOAT aa[][6] = { + {0.50000, -4.62334, 8.00410, -130.226, 38.2685, 69.5599}, + {0.50000, 78.2439, 25.7211, -13.8830, -9.87375, -14.1357} + }; + const FLOAT bb[][6] = { + {0.50000, 3.62334, 9.36393, 34.5114, -18.5684, -0.16519}, + {0.50000, -79.2439, 16.3725, 2.08129, 7.50769, -10.1861} + }; + + FLOAT phi, dphidz, d2phidz2; + FLOAT y, dydrs, dydxt, dydz, d2ydrs2, d2ydrsxt, d2ydrsz, d2ydxt2, d2ydxtz, d2ydz2; + FLOAT pyprs, pypzk, pypxt, pypphi; + FLOAT p2yprs2, p2yprszk, p2yprsxt, p2yprsphi, p2ypzk2, p2ypzkxt, p2ypzkphi, p2ypxt2, p2ypxtphi; + FLOAT dfdy, d2fdy2; + FLOAT den0, den1, t0, dt0, d2t0, t1, dt1, d2t1, f0, df0, d2f0, f1, df1, d2f1; + + XC(lda_work_t) pw; + FLOAT alpha, auxp, auxm; + + pw.order = r->order; + pw.rs[0] = SQRT(r->rs); + pw.rs[1] = r->rs; + pw.rs[2] = r->rs*r->rs; + pw.zeta = r->zeta; + + XC(lda_c_pw_func)(p->func_aux[0], &pw); + + alpha = beta/(16.0*M_CBRT2*M_CBRT2); + + auxp = CBRT(1.0 + r->zeta); + auxm = CBRT(1.0 - r->zeta); + + phi = 0.5*(auxp*auxp + auxm*auxm); + y = -alpha*phi*r->xt*r->xt/(r->rs*pw.zk); + + den0 = -1.0/(1.0 + y); + f0 = 1.0 + den0; + den1 = -EXP(-y); + f1 = 1.0 + den1; + + t0 = aa[p->func][0] + f0*(aa[p->func][1] + f0*(aa[p->func][2] + f0*(aa[p->func][3] + f0*(aa[p->func][4] + f0*aa[p->func][5])))); + t1 = bb[p->func][0] + f1*(bb[p->func][1] + f1*(bb[p->func][2] + f1*(bb[p->func][3] + f1*(bb[p->func][4] + f1*bb[p->func][5])))); + r->f = pw.zk*(t0 + t1); + + if(r->order < 1) return; + + dphidz = 0.0; + if(auxp > p->info->min_zeta) dphidz += 1/auxp; + if(auxm > p->info->min_zeta) dphidz -= 1/auxm; + dphidz *= 1.0/3.0; + + /* partial derivatives */ + pyprs = -y/r->rs; + pypzk = -y/pw.zk; + pypxt = -2.0*alpha*phi*r->xt/(r->rs*pw.zk); + pypphi = y/phi; + + /* full derivatives */ + dydrs = pyprs + pypzk*pw.dedrs; + dydxt = pypxt; + dydz = pypphi*dphidz + pypzk*pw.dedz; + + df0 = den0*den0; + df1 = -den1; + + dt0 = aa[p->func][1] + f0*(2.0*aa[p->func][2] + f0*(3.0*aa[p->func][3] + f0*(4.0*aa[p->func][4] + f0*5.0*aa[p->func][5]))); + dt1 = bb[p->func][1] + f1*(2.0*bb[p->func][2] + f1*(3.0*bb[p->func][3] + f1*(4.0*bb[p->func][4] + f1*5.0*bb[p->func][5]))); + + dfdy = dt0*df0 + dt1*df1; + + r->dfdrs = pw.dedrs*(t0 + t1) + pw.zk*dfdy*dydrs; + r->dfdz = pw.dedz *(t0 + t1) + pw.zk*dfdy*dydz; + r->dfdxt = pw.zk*dfdy*dydxt; + r->dfdxs[0] = 0.0; + r->dfdxs[1] = 0.0; + + if(r->order < 2) return; + + d2phidz2 = 0.0; + if(auxp > p->info->min_zeta) d2phidz2 += 1.0/((1.0 + r->zeta)*auxp); + if(auxm > p->info->min_zeta) d2phidz2 += 1.0/((1.0 - r->zeta)*auxm); + d2phidz2 *= -1.0/9.0; + + p2yprs2 = -2.0*pyprs/r->rs; + p2yprszk = -pypzk/r->rs; + p2yprsxt = -pypxt/r->rs; + p2yprsphi = -pypphi/r->rs; + p2ypzk2 = -2.0*pypzk/pw.zk; + p2ypzkxt = -pypxt/pw.zk; + p2ypzkphi = -pypphi/pw.zk; + p2ypxt2 = -2.0*alpha*phi/(r->rs*pw.zk); + p2ypxtphi = pypxt/phi; + + d2ydrs2 = p2yprs2 + 2.0*p2yprszk*pw.dedrs + pypzk*pw.d2edrs2 + p2ypzk2*pw.dedrs*pw.dedrs; + d2ydrsxt = p2yprsxt + p2ypzkxt*pw.dedrs; + d2ydrsz = pypzk*pw.d2edrsz + dphidz*(p2yprsphi + p2ypzkphi*pw.dedrs) + pw.dedz*(p2yprszk + p2ypzk2*pw.dedrs); + d2ydxt2 = p2ypxt2; + d2ydxtz = p2ypxtphi*dphidz + p2ypzkxt*pw.dedz; + d2ydz2 = pypphi*d2phidz2 + pypzk*pw.d2edz2 + 2.0*p2ypzkphi*dphidz*pw.dedz + p2ypzk2*pw.dedz*pw.dedz; + + d2f0 = 2.0*den0*df0; + d2f1 = -df1; + + d2t0 = 2.0*aa[p->func][2] + f0*(6.0*aa[p->func][3] + f0*(12.0*aa[p->func][4] + f0*20.0*aa[p->func][5])); + d2t1 = 2.0*bb[p->func][2] + f1*(6.0*bb[p->func][3] + f1*(12.0*bb[p->func][4] + f1*20.0*bb[p->func][5])); + + d2fdy2 = d2t0*df0*df0 + dt0*d2f0 + d2t1*df1*df1 + dt1*d2f1; + + r->d2fdrs2 = pw.d2edrs2*(t0 + t1) + 2.0*pw.dedrs*dfdy*dydrs + pw.zk*(d2fdy2*dydrs*dydrs + dfdy*d2ydrs2); + r->d2fdrsz = pw.d2edrsz*(t0 + t1) + dfdy*(pw.dedrs*dydz + pw.dedz*dydrs) + + pw.zk*(d2fdy2*dydrs*dydz + dfdy*d2ydrsz); + r->d2fdrsxt = pw.dedrs*dfdy*dydxt + pw.zk*(d2fdy2*dydrs*dydxt + dfdy*d2ydrsxt); + r->d2fdrsxs[0] = 0.0; + r->d2fdrsxs[1] = 0.0; + r->d2fdz2 = pw.d2edz2*(t0 + t1) + 2.0*pw.dedz*dfdy*dydz + pw.zk*(d2fdy2*dydz*dydz + dfdy*d2ydz2); + r->d2fdzxt = pw.dedz*dfdy*dydxt + pw.zk*(d2fdy2*dydz*dydxt + dfdy*d2ydxtz); + r->d2fdzxs[0] = 0.0; + r->d2fdzxs[1] = 0.0; + r->d2fdxt2 = pw.zk*(d2fdy2*dydxt*dydxt + dfdy*d2ydxt2); + r->d2fdxtxs[0] = 0.0; + r->d2fdxtxs[1] = 0.0; + r->d2fdxs2[0] = 0.0; + r->d2fdxs2[1] = 0.0; + r->d2fdxs2[2] = 0.0; +} + +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_c_sogga11) = { + XC_GGA_C_SOGGA11, + XC_CORRELATION, + "Second-order generalized gradient approximation 2011", + XC_FAMILY_GGA, + "R Peverati, Y Zhao, and DG Truhlar, J. Phys. Chem. Lett. 2, 1911-1997 (2011)\n" + "http://comp.chem.umn.edu/mfm/index.html", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-27, 1e-32, 0.0, 1e-32, + gga_c_sogga11_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_c_sogga11_x) = { + XC_GGA_C_SOGGA11_X, + XC_CORRELATION, + "To be used with hyb_gga_x_SOGGA11-X", + XC_FAMILY_GGA, + "R Peverati and DG Truhlar, J. Chem. Phys. 135, 191102 (2011)\n" + "http://comp.chem.umn.edu/mfm/index.html", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-26, 1e-32, 0.0, 1e-32, + gga_c_sogga11_init, + NULL, NULL, + work_gga_c, + NULL +}; diff --git a/libxc/src/gga_c_tca.c b/libxc/src/gga_c_tca.c new file mode 100644 index 000000000..9d7dcebad --- /dev/null +++ b/libxc/src/gga_c_tca.c @@ -0,0 +1,177 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_GGA_C_TCA 100 /* Tognetti, Cortona, Adamo */ +#define XC_GGA_C_REVTCA 99 /* Tognetti, Cortona, Adamo (revised) */ + +static void +gga_c_tca_init(XC(func_type) *p) +{ + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_LDA_C_RC04, p->nspin); +} + + +static inline void +func(const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + const FLOAT sigma=1.43, alpha=2.30; + const FLOAT xconv = X2S*M_CBRT2; + + FLOAT ss, ssalpha, aux, Bs, dBs, d2Bs; + FLOAT zeta2, zeta4, aa, arg, dargdrs, dargdxt, sinc, dsinc, DD, dDDdz, dDDdrs, dDDdxt; + FLOAT d2sinc, d2argdrs2, d2argdrsxt, d2DDdrs2, d2DDdrsz, d2DDdrsxt, d2DDdz2, d2DDdzxt, d2DDdxt2; + + XC(lda_work_t) pw; + + pw.order = r->order; + pw.rs[0] = SQRT(r->rs); + pw.rs[1] = r->rs; + pw.rs[2] = r->rs*r->rs; + pw.zeta = r->zeta; + + XC(lda_c_rc04_func)(p->func_aux[0], &pw); + + ss = xconv*r->xt; + + ssalpha = POW(ss, alpha); + aux = 1.0 + sigma*ssalpha; + Bs = 1.0/aux; + + if(p->info->number == XC_GGA_C_REVTCA){ + zeta2 = r->zeta*r->zeta; + zeta4 = zeta2*zeta2; + aa = M_PI*CBRT(9.0*M_PI/4.0); + arg = aa*ss/r->rs; + sinc = (arg == 0.0) ? 1.0 : SIN(arg)/arg; + + DD = 1.0 - zeta4*(1.0 - sinc*sinc); + }else{ + DD = 1.0; + } + + r->f = pw.zk*Bs*DD; + + if(r->order < 1) return; + + dBs = -sigma*alpha*ssalpha * xconv/(ss*aux*aux); + + if(p->info->number == XC_GGA_C_REVTCA){ + dsinc = (arg == 0.0) ? 0.0 : COS(arg)/arg - SIN(arg)/(arg*arg); + + dargdrs = -arg/r->rs; + dargdxt = aa*xconv/r->rs; + + dDDdrs = 2.0*zeta4*sinc*dsinc*dargdrs; + dDDdxt = 2.0*zeta4*sinc*dsinc*dargdxt; + dDDdz = -4.0*r->zeta*zeta2*(1.0 - sinc*sinc); + }else{ + dDDdrs = 0.0; + dDDdz = 0.0; + dDDdxt = 0.0; + } + + r->dfdrs = Bs*(pw.dedrs*DD + pw.zk*dDDdrs); + r->dfdz = Bs*(pw.dedz *DD + pw.zk*dDDdz); + r->dfdxt = pw.zk*(dBs*DD + Bs*dDDdxt); + r->dfdxs[0] = 0.0; + r->dfdxs[1] = 0.0; + + if(r->order < 2) return; + + d2Bs = -dBs/(ss*aux) * xconv * (1.0 - alpha + sigma*(1.0 + alpha)*ssalpha); + + if(p->info->number == XC_GGA_C_REVTCA){ + d2sinc = (arg == 0.0) ? -1.0/3.0 : -(2.0*arg*COS(arg) + (arg*arg - 2.0)*SIN(arg))/(arg*arg*arg); + + d2argdrs2 = -2.0*dargdrs/r->rs; + d2argdrsxt = -dargdxt/r->rs; + + d2DDdrs2 = 2.0*zeta4*((dsinc*dsinc + sinc*d2sinc)*dargdrs*dargdrs + sinc*dsinc*d2argdrs2); + d2DDdrsz = 8.0*r->zeta*zeta2*sinc*dsinc*dargdrs; + d2DDdrsxt = 2.0*zeta4*((dsinc*dsinc + sinc*d2sinc)*dargdrs*dargdxt + sinc*dsinc*d2argdrsxt); + d2DDdz2 = -12.0*zeta2*(1.0 - sinc*sinc); + d2DDdzxt = 8.0*r->zeta*zeta2*sinc*dsinc*dargdxt; + d2DDdxt2 = 2.0*zeta4*((dsinc*dsinc + sinc*d2sinc)*dargdxt*dargdxt); + }else{ + d2DDdrs2 = 0.0; + d2DDdrsz = 0.0; + d2DDdrsxt = 0.0; + d2DDdz2 = 0.0; + d2DDdzxt = 0.0; + d2DDdxt2 = 0.0; + } + + r->d2fdrs2 = Bs*(pw.d2edrs2*DD + 2.0*pw.dedrs*dDDdrs + pw.zk*d2DDdrs2); + r->d2fdrsz = Bs*(pw.d2edrsz*DD + pw.dedrs*dDDdz + pw.dedz*dDDdrs + pw.zk*d2DDdrsz); + r->d2fdrsxt = pw.dedrs*(dBs*DD + Bs*dDDdxt) + pw.zk*(dBs*dDDdrs + Bs*d2DDdrsxt); + r->d2fdrsxs[0] = 0.0; + r->d2fdrsxs[1] = 0.0; + r->d2fdz2 = Bs*(pw.d2edz2*DD + 2.0*pw.dedz*dDDdz + pw.zk*d2DDdz2); + r->d2fdzxt = pw.dedz*(dBs*DD + Bs*dDDdxt) + pw.zk*(dBs*dDDdz + Bs*d2DDdzxt); + r->d2fdzxs[0] = 0.0; + r->d2fdzxs[1] = 0.0; + r->d2fdxt2 = pw.zk*(d2Bs*DD + 2.0*dBs*dDDdxt + Bs*d2DDdxt2); + r->d2fdxtxs[0] = 0.0; + r->d2fdxtxs[1] = 0.0; + r->d2fdxs2[0] = 0.0; + r->d2fdxs2[1] = 0.0; + r->d2fdxs2[2] = 0.0; +} + +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_c_tca) = { + XC_GGA_C_TCA, + XC_CORRELATION, + "Tognetti, Cortona, Adamo", + XC_FAMILY_GGA, + "V Tognetti, P Cortona, and C Adamo, J. Chem. Phys. 128, 034101 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_c_tca_init, + NULL, + NULL, + work_gga_c, + NULL +}; + + +const XC(func_info_type) XC(func_info_gga_c_revtca) = { + XC_GGA_C_REVTCA, + XC_CORRELATION, + "Tognetti, Cortona, Adamo (revised)", + XC_FAMILY_GGA, + "V Tognetti, P Cortona, and C Adamo, Chem. Phys. Lett. 460, 536-539 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_c_tca_init, + NULL, + NULL, + work_gga_c, + NULL +}; diff --git a/libxc/src/gga_c_wi.c b/libxc/src/gga_c_wi.c new file mode 100644 index 000000000..4a6f41329 --- /dev/null +++ b/libxc/src/gga_c_wi.c @@ -0,0 +1,129 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_GGA_C_WI0 153 /* Wilson & Ivanov initial version */ +#define XC_GGA_C_WI 148 /* Wilson & Ivanov */ + +static void +gga_c_wi_init(XC(func_type) *p) +{ + switch(p->info->number){ + case XC_GGA_C_WI0: p->func = 0; break; + case XC_GGA_C_WI: p->func = 1; break; + default: + fprintf(stderr, "Internal error in gga_c_wi\n"); + exit(1); + } +} + + +static inline void +func(const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + static struct { + FLOAT a, b, c, d, k; + } *par, wi_par[2] = {{-0.44, 0.0032407, 7.8, 0.0073, 0.000311}, + {-0.00652, 0.0007, 0.21, 0.002, 0.001}}; + + FLOAT xt0, xt2, xt52, xt72, cnst_rs, aux; + FLOAT num, den, ddendrs, dnumdxt, ddendxt, d2dendrsxt, d2numdxt2, d2dendxt2, d3dendrsxt2, d3dendxt3, d3numdxt3; + + par = &(wi_par[p->func]); + + cnst_rs = CBRT(4.0*M_PI/3.0); + xt2 = r->xt*r->xt; + xt0 = SQRT(r->xt); + xt52 = xt2*xt0; + xt72 = r->xt*xt52; + + aux = EXP(-par->k*xt2); + + num = par->a + par->b*xt2*aux; + den = par->c + r->rs*(1.0 + par->d*cnst_rs*xt72); + + r->f = num/den; + + if(r->order < 1) return; + + ddendrs = 1.0 + par->d*cnst_rs*xt72; + ddendxt = 7.0/2.0*par->d*cnst_rs*r->rs*xt52; + dnumdxt = -2.0*par->b*r->xt*(par->k*xt2 - 1.0)*aux; + + r->dfdrs = DFRACTION(num, 0.0, den, ddendrs); + r->dfdxt = DFRACTION(num, dnumdxt, den, ddendxt); + + if(r->order < 2) return; + + d2dendrsxt = 7.0/2.0*par->d*cnst_rs*xt52; + d2dendxt2 = 5.0*ddendxt/(2.0*r->xt); + d2numdxt2 = par->b*(2.0 + 2.0*par->k*xt2*(2.0*par->k*xt2 - 5.0))*aux; + + r->d2fdrs2 = D2FRACTION(num, 0.0, 0.0, den, ddendrs, 0.0); + r->d2fdrsxt = ((-den*dnumdxt + 2.0*num*ddendxt)*ddendrs - den*num*d2dendrsxt)/(den*den*den); + r->d2fdxt2 = D2FRACTION(num, dnumdxt, d2numdxt2, den, ddendxt, d2dendxt2); + + if(r->order < 3) return; + + d3dendrsxt2 = 5.0*d2dendrsxt/(2.0*r->xt); + d3dendxt3 = 3.0*d2dendxt2 /(2.0*r->xt); + d3numdxt3 = -4.0*par->b*par->k*r->xt*(6.0 + par->k*xt2*(2.0*par->k*xt2 - 9.0))*aux; + + r->d3fdrs3 = D3FRACTION(num, 0.0, 0.0, 0.0, den, ddendrs, 0.0, 0.0); + r->d3fdrs2xt = (- 6.0*num*ddendxt*ddendrs*ddendrs + + 2.0*den*(dnumdxt*ddendrs*ddendrs + num*2.0*ddendrs*d2dendrsxt))/(den*den*den*den); + r->d3fdrsxt2 = (- 6.0*num*ddendxt*ddendxt*ddendrs + + 2.0*den*((2.0*dnumdxt*ddendxt + num*d2dendxt2)*ddendrs + 2.0*num*ddendxt*d2dendrsxt) + - den*den*(d2numdxt2*ddendrs + 2.0*dnumdxt*d2dendrsxt + num*d3dendrsxt2))/(den*den*den*den); + r->d3fdxt3 = D3FRACTION(num, dnumdxt, d2numdxt2, d3numdxt3, den, ddendxt, d2dendxt2, d3dendxt3); +} + +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_c_wi0) = { + XC_GGA_C_WI0, + XC_CORRELATION, + "Wilson & Ivanov initial version", + XC_FAMILY_GGA, + "LC Wilson & S Ivanov, Int. J. Quantum Chem. 69, 523-532 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_c_wi_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_c_wi) = { + XC_GGA_C_WI, + XC_CORRELATION, + "Wilson & Ivanov", + XC_FAMILY_GGA, + "LC Wilson & S Ivanov, Int. J. Quantum Chem. 69, 523-532 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_c_wi_init, + NULL, NULL, + work_gga_c, + NULL +}; diff --git a/libxc/src/gga_c_wl.c b/libxc/src/gga_c_wl.c new file mode 100644 index 000000000..fae6b702f --- /dev/null +++ b/libxc/src/gga_c_wl.c @@ -0,0 +1,95 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_GGA_C_WL 147 /* Wilson & Levy */ + +static inline void +func(const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + const FLOAT a=-0.74860, b=0.06001, c=3.60073, d=0.90000; + + FLOAT aux, num, den; + + if(1.0 - ABS(r->zeta) >= p->info->min_zeta){ + aux = SQRT(1.0 - r->zeta*r->zeta); + num = a + b*r->xt; + den = c + d*(r->xs[0] + r->xs[1]) + r->rs; + + r->f = aux * num/den; + }else + r->f = 0.0; + + if(r->order < 1) return; + + if(1.0 - ABS(r->zeta) >= p->info->min_zeta){ + r->dfdrs = -r->f/den; + r->dfdz = -r->zeta/aux * num/den; + r->dfdxt = b*aux/den; + r->dfdxs[0] = -d*r->f/den; + r->dfdxs[1] = r->dfdxs[0]; + }else{ + r->dfdrs = r->dfdz = r->dfdxt = 0.0; + r->dfdxs[0] = r->dfdxs[1] = 0.0; + } + + if(r->order < 2) return; + + if(1.0 - ABS(r->zeta) >= p->info->min_zeta){ + r->d2fdrs2 = -2.0*(r->dfdrs)/den; + r->d2fdrsz = r->zeta/aux * num/(den*den); + r->d2fdrsxt = -b*aux/(den*den); + r->d2fdrsxs[0] = -2.0*d*(r->dfdrs)/den; + r->d2fdrsxs[1] = r->d2fdrsxs[0]; + r->d2fdz2 = -num/(den*aux*aux*aux); + r->d2fdzxt = -r->zeta/aux * b/den; + r->d2fdzxs[0] = r->zeta/aux * d*num/(den*den); + r->d2fdzxs[1] = r->d2fdzxs[0]; + r->d2fdxt2 = 0.0; + r->d2fdxtxs[0] = -b*d*aux/(den*den); + r->d2fdxtxs[1] = r->d2fdxtxs[0]; + r->d2fdxs2[0] = -2.0*d*r->dfdxs[0]/den; + r->d2fdxs2[1] = r->d2fdxs2[0]; + r->d2fdxs2[2] = r->d2fdxs2[0]; + }else{ + r->d2fdrs2 = r->d2fdrsz = r->d2fdrsxt = r->d2fdrsxs[0] = r->d2fdrsxs[1] = 0.0; + r->d2fdz2 = r->d2fdzxt = r->d2fdzxs[0] = r->d2fdzxs[1] = 0.0; + r->d2fdxt2 = r->d2fdxtxs[0] = r->d2fdxtxs[1] = 0.0; + r->d2fdxs2[0] = r->d2fdxs2[1] = r->d2fdxs2[2] = 0.0; + } +} + +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_c_wl) = { + XC_GGA_C_WL, + XC_CORRELATION, + "Wilson & Levy", + XC_FAMILY_GGA, + "LC Wilson and M Levy, Phys. Rev. B 41, 12930 (1990)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_c, + NULL +}; diff --git a/libxc/src/gga_k_dk.c b/libxc/src/gga_k_dk.c new file mode 100644 index 000000000..989525bca --- /dev/null +++ b/libxc/src/gga_k_dk.c @@ -0,0 +1,228 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_K_DK 516 /* DePristo and Kress */ +#define XC_GGA_K_PERDEW 517 /* Perdew */ +#define XC_GGA_K_VSK 518 /* Vitos, Skriver, and Kollar */ +#define XC_GGA_K_VJKS 519 /* Vitos, Johansson, Kollar, and Skriver */ +#define XC_GGA_K_ERNZERHOF 520 /* Ernzerhof */ + +typedef struct{ + FLOAT aa[5], bb[5]; +} gga_k_dk_params; + +static void +gga_k_dk_init(XC(func_type) *p) +{ + int i; + FLOAT ff, *aa, *bb; + + assert(p->params == NULL); + p->params = malloc(sizeof(gga_k_dk_params)); + + /* shortcuts for a and b */ + aa = ((gga_k_dk_params *) (p->params))->aa; + bb = ((gga_k_dk_params *) (p->params))->bb; + + /* initialize parameters to zero */ + for(i=0; i<5; i++){ + aa[i] = 0.0; + bb[i] = 0.0; + } + + switch(p->info->number){ + case XC_GGA_K_DK: + ff = 5.0*X2S*X2S/27.0; /* = t2/t0 = 1.0/(72.0*K_FACTOR_C) */ + + bb[0] = 1.0; + bb[1] = -0.05 *ff; + bb[2] = 9.99802*(ff*ff); + bb[3] = 2.96085*(ff*ff*ff); + + aa[0] = 1.0; + aa[1] = 0.95 *ff; + aa[2] = 14.28111*(ff*ff); + aa[3] = -19.57962*(ff*ff*ff); + aa[4] = 9.0*bb[3]*ff; + + break; + + case XC_GGA_K_PERDEW: + ff = X2S*X2S; + + bb[0] = 1.0; + bb[1] = 88.3960*ff; + bb[2] = 16.3683*(ff*ff); + + aa[0] = 1.0; + aa[1] = 88.2108*ff; + + break; + + case XC_GGA_K_VSK: + ff = 5.0*X2S*X2S/27.0; /* = t2/t0 = 1.0/(72.0*K_FACTOR_C) */ + + bb[0] = 1.0; + bb[1] = -0.05 *ff; + bb[2] = 0.396 *(ff*ff); + + aa[0] = 1.0; + aa[1] = 0.95 *ff; + aa[3] = 9.0*bb[2]*ff; + + break; + + case XC_GGA_K_VJKS: + ff = X2S*X2S; + + bb[0] = 1.0; + bb[1] = 0.6511 *ff; + bb[2] = 0.0431 *(ff*ff); + + aa[0] = 1.0; + aa[1] = 0.8944 *ff; + aa[3] = -bb[2] *ff; + + break; + + case XC_GGA_K_ERNZERHOF: + ff = X2S*X2S; + + bb[0] = 135.0; + bb[1] = 3.0*ff; + + aa[0] = 135.0; + aa[1] = 28.0*ff; + aa[2] = 5.0*(ff*ff); + + break; + } +} + + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + FLOAT xx2, xx4, num, denom, dnum, ddenom, d2num, d2denom; + FLOAT *aa, *bb; + + assert(p->params != NULL); + aa = ((gga_k_dk_params *) (p->params))->aa; + bb = ((gga_k_dk_params *) (p->params))->bb; + + xx2 = x*x; + xx4 = xx2*xx2; + + num = aa[0] + aa[1]*xx2 + aa[2]*xx4 + aa[3]*xx2*xx4 + aa[4]*xx4*xx4; + denom = bb[0] + bb[1]*xx2 + bb[2]*xx4 + bb[3]*xx2*xx4 + bb[4]*xx4*xx4; + + *f = num/denom; + + if(order < 1) return; + + dnum = 2.0*aa[1]*x + 4.0*aa[2]*x*xx2 + 6.0*aa[3]*x*xx4 + 8.0*aa[4]*x*xx2*xx4; + ddenom = 2.0*bb[1]*x + 4.0*bb[2]*x*xx2 + 6.0*bb[3]*x*xx4 + 8.0*bb[4]*x*xx2*xx4; + + *dfdx = (dnum*denom - num*ddenom)/(denom*denom); + + if(order < 2) return; + + d2num = 2.0*aa[1] + 4.0*3.0*aa[2]*xx2 + 6.0*5.0*aa[3]*xx4 + 8.0*7.0*aa[4]*xx2*xx4; + d2denom = 2.0*bb[1] + 4.0*3.0*bb[2]*xx2 + 6.0*5.0*bb[3]*xx4 + 8.0*7.0*bb[4]*xx2*xx4; + + *d2fdx2 = ((d2num*denom - num*d2denom)*denom - 2.0*ddenom*(dnum*denom - ddenom*num))/(denom*denom*denom); +} + +#define XC_KINETIC_FUNCTIONAL +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_k_dk) = { + XC_GGA_K_DK, + XC_KINETIC, + "DePristo and Kress", + XC_FAMILY_GGA, + "AE DePristo and JD Kress, Phys. Rev. A 35, 438-441 (1987)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_dk_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_perdew) = { + XC_GGA_K_PERDEW, + XC_KINETIC, + "Perdew", + XC_FAMILY_GGA, + "JP Perdew, Phys. Lett. A 165, 79 (1992)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_dk_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_vsk) = { + XC_GGA_K_VSK, + XC_KINETIC, + "Vitos, Skriver, and Kollar", + XC_FAMILY_GGA, + "L Vitos, HL Skriver, and J. Kollár, Phys. Rev. B 57, 12611-12615 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_dk_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_vjks) = { + XC_GGA_K_VJKS, + XC_KINETIC, + "Vitos, Johansson, Kollar, and Skriver", + XC_FAMILY_GGA, + "L Vitos, B Johansson, J. Kollár, and HL Skriver, Phys. Rev. A 61, 052511 (2000)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_dk_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_ernzerhof) = { + XC_GGA_K_ERNZERHOF, + XC_KINETIC, + "Ernzerhof", + XC_FAMILY_GGA, + "M Ernzerhof, J. Mol. Struct.:THEOCHEM 501-502, 59 (2000)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_dk_init, + NULL, NULL, + work_gga_k, + NULL +}; diff --git a/libxc/src/gga_k_meyer.c b/libxc/src/gga_k_meyer.c new file mode 100644 index 000000000..1517930db --- /dev/null +++ b/libxc/src/gga_k_meyer.c @@ -0,0 +1,69 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_K_MEYER 57 /* Meyer, Wang, and Young */ + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + FLOAT y, ll, lambda, dy, dlambda, d2lambda; + + y = X2S*x/6.0; + + ll = LOG((1.0 + y)/ABS(1.0 - y)); + lambda = 0.5*(1.0 + (1.0 - y*y)*ll/(2.0*y)); + + *f = 1.0 + lambda*x*x/(8.0*K_FACTOR_C); + + if(order < 1) return; + + dy = X2S/6.0; + + dlambda = dy*(2.0*y - (1.0 + y*y)*ll)/(4.0*y*y); + + *dfdx = (dlambda*x + 2.0*lambda)*x/(8.0*K_FACTOR_C); + + if(order < 2) return; + + d2lambda = dy*dy*(2.0*y/(y*y - 1.0) + ll)/(2.0*y*y*y); + + *d2fdx2 = (d2lambda*x*x + 4.0*dlambda*x + 2.0*lambda)/(8.0*K_FACTOR_C); +} + +#define XC_KINETIC_FUNCTIONAL +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_k_meyer) = { + XC_GGA_K_MEYER, + XC_KINETIC, + "Meyer, Wang, and Young", + XC_FAMILY_GGA, + "A Meyer, GC Wang and WH Young, Z. Naturforsch. A 31, 898-903 (1976)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, + NULL, NULL, + work_gga_k, + NULL +}; diff --git a/libxc/src/gga_k_ol1.c b/libxc/src/gga_k_ol1.c new file mode 100644 index 000000000..5bc5b2b33 --- /dev/null +++ b/libxc/src/gga_k_ol1.c @@ -0,0 +1,61 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_K_OL1 512 /* Ou-Yang and Levy v.1 */ + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + const FLOAT c4 = 0.00677; + FLOAT ss, ss2; + + ss = x/M_CBRT2; + ss2 = ss*ss; + + *f = 1.0 + (ss2/72.0 + c4*ss)/K_FACTOR_C; + + if(order < 1) return; + + *dfdx = (2.0*ss/72.0 + c4)/(K_FACTOR_C*M_CBRT2); + + if(order < 2) return; + + *d2fdx2 = 2.0/(72.0*K_FACTOR_C*M_CBRT2*M_CBRT2); +} + +#define XC_KINETIC_FUNCTIONAL +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_k_ol1) = { + XC_GGA_K_OL1, + XC_KINETIC, + "Ou-Yang and Levy v.1", + XC_FAMILY_GGA, + "H Ou-Yang, M Levy, Int. J. of Quant. Chem. 40, 379-388 (1991)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_k, + NULL +}; diff --git a/libxc/src/gga_k_ol2.c b/libxc/src/gga_k_ol2.c new file mode 100644 index 000000000..92854768b --- /dev/null +++ b/libxc/src/gga_k_ol2.c @@ -0,0 +1,90 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_K_OL2 513 /* Ou-Yang and Levy v.2 */ +#define XC_GGA_X_OL2 183 /* Exchange form based on Ou-Yang and Levy v.2 */ + +static void +gga_k_ol2_init(XC(func_type) *p) +{ + switch(p->info->number){ + case XC_GGA_K_OL2: p->func = 0; break; + case XC_GGA_X_OL2: p->func = 1; break; + } +} + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static const FLOAT aa[2] = { 1.0, M_CBRT2*0.07064/X_FACTOR_C}; + static const FLOAT bb[2] = { 1.0/K_FACTOR_C, M_CBRT2*0.07064/X_FACTOR_C}; + static const FLOAT cc[2] = {0.00887/K_FACTOR_C, M_CBRT2*M_CBRT2*0.07064*34.0135/X_FACTOR_C}; + FLOAT denom; + + denom = M_CBRT2 + 4.0*x; + + *f = aa[p->func] + bb[p->func]*x*x/72.0 + cc[p->func]*x/denom; + + if(order < 1) return; + + *dfdx = 2.0*bb[p->func]*x/72.0 + cc[p->func]*M_CBRT2/(denom*denom); + + if(order < 2) return; + + *d2fdx2 = 2.0*bb[p->func]/72.0 - 8.0*cc[p->func]*M_CBRT2/(denom*denom*denom); +} + +#include "work_gga_x.c" +const XC(func_info_type) XC(func_info_gga_x_ol2) = { + XC_GGA_X_OL2, + XC_EXCHANGE, + "Exchange form based on Ou-Yang and Levy v.2", + XC_FAMILY_GGA, + "P Fuentealba and O Reyes, Chem. Phys. Lett. 232, 31-34 (1995)\n" + "H Ou-Yang, M Levy, Int. J. of Quant. Chem. 40, 379-388 (1991)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_ol2_init, + NULL, NULL, + work_gga_x, + NULL +}; + + +#define XC_KINETIC_FUNCTIONAL +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_k_ol2) = { + XC_GGA_K_OL2, + XC_KINETIC, + "Ou-Yang and Levy v.2", + XC_FAMILY_GGA, + "H Ou-Yang, M Levy, Int. J. of Quant. Chem. 40, 379-388 (1991)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_ol2_init, + NULL, NULL, + work_gga_k, + NULL +}; diff --git a/libxc/src/gga_k_pearson.c b/libxc/src/gga_k_pearson.c new file mode 100644 index 000000000..054057acc --- /dev/null +++ b/libxc/src/gga_k_pearson.c @@ -0,0 +1,64 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_K_PEARSON 511 /* Pearson */ + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + FLOAT ss, ss2, ss6, denom; + + ss = X2S*x; + ss2 = ss*ss; + ss6 = ss2*ss2*ss2; + denom = 1.0 + ss6; + + *f = 1.0 + 5.0/27.0 * ss2/denom; + + if(order < 1) return; + + *dfdx = X2S*5.0/27.0 * 2.0*ss*(1.0 - 2.0*ss6)/(denom*denom); + + if(order < 2) return; + + *d2fdx2 = X2S*X2S*5.0/27.0 * (2.0 - 50.0*ss6 + 20.0*ss6*ss6)/(denom*denom*denom); +} + +#define XC_KINETIC_FUNCTIONAL +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_k_pearson) = { + XC_GGA_K_PEARSON, + XC_KINETIC, + "Pearson 1992", + XC_FAMILY_GGA, + "DJ Lacks and RG Gordon, J. Chem. Phys. 100, 4446 (1994)\n" + "E W Pearson and R G Gordon, J. Chem. Phys. 82, 881 (1985)\n" + "E W Pearson, Ph.D. thesis, Harvard University (1983)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_k, + NULL +}; diff --git a/libxc/src/gga_k_tflw.c b/libxc/src/gga_k_tflw.c new file mode 100644 index 000000000..c84174c2f --- /dev/null +++ b/libxc/src/gga_k_tflw.c @@ -0,0 +1,320 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +/* for a review on the values of lambda and gamma, please see EV +Ludeña and VV Karasiev, in "Reviews of Modern Quantum Chemistry: a +Celebration of the Contributions of Robert G. Parr, edited by KD Sen +(World Scientific, Singapore, 2002), p. 612. + */ + +#define XC_GGA_K_TFVW 52 /* Thomas-Fermi plus von Weiszaecker correction */ +#define XC_GGA_K_VW 500 /* von Weiszaecker functional */ +#define XC_GGA_K_GE2 501 /* Second-order gradient expansion (l = 1/9) */ +#define XC_GGA_K_GOLDEN 502 /* TF-lambda-vW form by Golden (l = 13/45) */ +#define XC_GGA_K_YT65 503 /* TF-lambda-vW form by Yonei and Tomishima (l = 1/5) */ +#define XC_GGA_K_BALTIN 504 /* TF-lambda-vW form by Baltin (l = 5/9) */ +#define XC_GGA_K_LIEB 505 /* TF-lambda-vW form by Lieb (l = 0.185909191) */ +#define XC_GGA_K_ABSP1 506 /* gamma-TFvW form by Acharya et al [g = 1 - 1.412/N^(1/3)] */ +#define XC_GGA_K_ABSP2 507 /* gamma-TFvW form by Acharya et al [g = 1 - 1.332/N^(1/3)] */ +#define XC_GGA_K_GR 508 /* gamma-TFvW form by Gázquez and Robles */ +#define XC_GGA_K_LUDENA 509 /* gamma-TFvW form by Ludeña */ +#define XC_GGA_K_GP85 510 /* gamma-TFvW form by Ghosh and Parr */ + +typedef struct{ + FLOAT gamma, lambda; +} gga_k_tflw_params; + + +static void +gga_k_tflw_init(XC(func_type) *p) +{ + + assert(p->params == NULL); + p->params = malloc(sizeof(gga_k_tflw_params)); + + /* This automatically sets gamma and lambda depending on the functional chosen. + We put by default N = 1.0 */ + XC(gga_k_tflw_set_params)(p, -1.0, -1.0, 1.0); +} + +/* for automatically assigning lambda and gamma set them to -1 */ +void +XC(gga_k_tflw_set_params)(XC(func_type) *p, FLOAT gamma, FLOAT lambda, FLOAT N) +{ + gga_k_tflw_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_k_tflw_params *) (p->params); + + params->gamma = 1.0; + if(gamma > 0.0){ + params->gamma = gamma; + }else if(N > 0.0){ + switch(p->info->number){ + case XC_GGA_K_TFVW: + params->gamma = 1.0; + break; + case XC_GGA_K_VW: + params->gamma = 0.0; + break; + case XC_GGA_K_ABSP1: /* Ref. 79 */ + params->gamma = 1.0 - 1.412/CBRT(N); + break; + case XC_GGA_K_ABSP2: /* Ref. 79 */ + params->gamma = 1.0 - 1.332/CBRT(N); + break; + case XC_GGA_K_GR: /* Ref. 80 */ + params->gamma = (1.0 - 2.0/N)*(1.0 - 1.015/CBRT(N) + 0.150*CBRT(N*N)); + break; + case XC_GGA_K_LUDENA: /* Ref. 82 */ + params->gamma = CBRT(6.0*M_PI)*M_PI*M_PI*(1.0 - 1.0/(N*N)); + break; + case XC_GGA_K_GP85: /* Ref. 86 */ + params->gamma = CBRT(6.0*M_PI*M_PI)*M_PI*M_PI/4.0* + (1.0 - 1.0/N)*(1.0 + 1.0/N + 6.0/(N*N)); + break; + } + } + + params->lambda = 1.0; + if(lambda > 0.0){ + params->lambda = lambda; + }else{ + switch(p->info->number){ + case XC_GGA_K_TFVW: + params->lambda = 1.0; + break; + case XC_GGA_K_GE2: + params->lambda = 1.0/9.0; + break; + case XC_GGA_K_GOLDEN: /* Ref. 33 */ + params->lambda = 13.0/45.0; + break; + case XC_GGA_K_YT65: /* Ref. 57 */ + params->lambda = 1.0/5.0; + break; + case XC_GGA_K_BALTIN: /* Ref. 66 */ + params->lambda = 5.0/9.0; + break; + case XC_GGA_K_LIEB: /* Ref. 12 */ + params->lambda = 0.185909191; /* 1/5.37897... */ + break; + } + } +} + + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + FLOAT lambda, gamma; + + assert(p->params != NULL); + lambda = ((gga_k_tflw_params *) (p->params))->lambda; + gamma = ((gga_k_tflw_params *) (p->params))->gamma; + + lambda /= 8.0; /* the von Weiszaecker coefficient */ + + *f = gamma + lambda*x*x/K_FACTOR_C; + + if(order < 1) return; + + *dfdx = 2.0*lambda*x/K_FACTOR_C; + + if(order < 2) return; + + *d2fdx2 = 2.0*lambda/K_FACTOR_C; +} + +#define XC_KINETIC_FUNCTIONAL +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_k_tfvw) = { + XC_GGA_K_TFVW, + XC_KINETIC, + "Thomas-Fermi plus von Weiszaecker correction", + XC_FAMILY_GGA, + "CF von Weiszaecker, Z. Phys. 96, 431 (1935)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_tflw_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_vw) = { + XC_GGA_K_VW, + XC_KINETIC, + "von Weiszaecker correction to Thomas-Fermi", + XC_FAMILY_GGA, + "CF von Weiszaecker, Z. Phys. 96, 431 (1935)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_tflw_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_ge2) = { + XC_GGA_K_GE2, + XC_KINETIC, + "Second-order gradient expansion of the kinetic energy density", + XC_FAMILY_GGA, + "AS Kompaneets and ES Pavlovskii, Zh. Eksp. Teor. Fiz. 31, 427 (1956) [Sov. Phys. JETP 4, 328 (1957)]" + "DA Kirznits, Zh. Eksp. Teor. Fiz. 32, 115 (1957) [Sov. Phys. JETP 5, 64 (1957)]", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_tflw_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_golden) = { + XC_GGA_K_GOLDEN, + XC_KINETIC, + "TF-lambda-vW form by Golden (l = 13/45)", + XC_FAMILY_GGA, + "S Golden, Phys. Rev. 105, 604-615 (1957)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_tflw_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_yt65) = { + XC_GGA_K_YT65, + XC_KINETIC, + "TF-lambda-vW form by Yonei and Tomishima (l = 1/5)", + XC_FAMILY_GGA, + "K. Yonei and Y. Tomishima, J. Phys. Soc. Jpn. 20, 1051-1057 (1965)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_tflw_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_baltin) = { + XC_GGA_K_BALTIN, + XC_KINETIC, + "TF-lambda-vW form by Baltin (l = 5/9)", + XC_FAMILY_GGA, + "R Baltin, Z. Naturforsch. A 27, 1176 (1972)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_tflw_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_lieb) = { + XC_GGA_K_LIEB, + XC_KINETIC, + "TF-lambda-vW form by Lieb (l = 0.185909191)", + XC_FAMILY_GGA, + "EH Lieb, Rev. Mod. Phys. 53, 603-641 (1981)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_tflw_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_absp1) = { + XC_GGA_K_ABSP1, + XC_KINETIC, + "gamma-TFvW form by Acharya et al [g = 1 - 1.412/N^(1/3)]", + XC_FAMILY_GGA, + "PK Acharya, LJ Bartolotti, SB Sears, and RG Parr, Proc. Natl. Acad. Sci. USA 77 6978-6982 (1980)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_tflw_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_absp2) = { + XC_GGA_K_ABSP2, + XC_KINETIC, + "gamma-TFvW form by Acharya et al [g = 1 - 1.332/N^(1/3)]", + XC_FAMILY_GGA, + "PK Acharya, LJ Bartolotti, SB Sears, and RG Parr, Proc. Natl. Acad. Sci. USA 77 6978-6982 (1980)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_tflw_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_gr) = { + XC_GGA_K_GR, + XC_KINETIC, + "gamma-TFvW form by Gázquez and Robles", + XC_FAMILY_GGA, + "JL Gázquez and J Robles, J. Chem. Phys. 76, 1467 (1982)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_tflw_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_ludena) = { + XC_GGA_K_LUDENA, + XC_KINETIC, + "gamma-TFvW form by Ludeña", + XC_FAMILY_GGA, + "EV Ludeña, in Cond. Matt. Theor. Vol 1, ed. by FB Malik (Plenum, New York, 1986), p. 183", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_tflw_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_gp85) = { + XC_GGA_K_GP85, + XC_KINETIC, + "gamma-TFvW form by Ghosh and Parr", + XC_FAMILY_GGA, + "SK Ghosh and RG Parr, J. Chem. Phys. 82, 3307 (1985)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_k_tflw_init, + NULL, NULL, + work_gga_k, + NULL +}; diff --git a/libxc/src/gga_x_2d_b86.c b/libxc/src/gga_x_2d_b86.c new file mode 100644 index 000000000..982fd8161 --- /dev/null +++ b/libxc/src/gga_x_2d_b86.c @@ -0,0 +1,68 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_2D_B86 128 /* Becke 86 Xalfa,beta,gamma */ + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + FLOAT beta=0.002105, gamma=0.000119; + + FLOAT f1, f2, df1, df2, d2f1, d2f2; + + f1 = 1.0 + beta*x*x; + f2 = 1.0 + gamma*x*x; + *f = f1/f2; + + if(order < 1) return; + + df1 = 2.0*beta*x; + df2 = 2.0*gamma*x; + + *dfdx = (df1*f2 - f1*df2)/(f2*f2); + + if(order < 2) return; + + d2f1 = 2.0*beta; + d2f2 = 2.0*gamma; + + *d2fdx2 = (2.0*f1*df2*df2 + d2f1*f2*f2 - f2*(2.0*df1*df2 + f1*d2f2))/(f2*f2*f2); +} + +#define XC_DIMENSIONS 2 +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_2d_b86) = { + XC_GGA_X_2D_B86, + XC_EXCHANGE, + "Becke 86 in 2D", + XC_FAMILY_GGA, + "G Vilhena and MAL Marques, unpublished\n" + "AD Becke, J. Chem. Phys 84, 4524 (1986)", + XC_FLAGS_2D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-18, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; + diff --git a/libxc/src/gga_x_2d_b86_mgc.c b/libxc/src/gga_x_2d_b86_mgc.c new file mode 100644 index 000000000..f4a1421fb --- /dev/null +++ b/libxc/src/gga_x_2d_b86_mgc.c @@ -0,0 +1,70 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_2D_B86_MGC 124 /* Becke 86 MGC for 2D systems */ + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static const FLOAT beta=0.003317, gam=0.008323; + + FLOAT dd, ddp, f1, f2, df1, df2, d2f1, d2f2; + + dd = 1.0 + gam*x*x; + + f1 = beta/X_FACTOR_C*x*x; + f2 = POW(dd, 3.0/4.0); + *f = 1.0 + f1/f2; + + if(order < 1) return; /* nothing else to do */ + + df1 = beta/X_FACTOR_C*2.0*x; + ddp = gam*2.0*3.0/4.0*f2/dd; + df2 = ddp*x; + + *dfdx = (df1*f2 - f1*df2)/(f2*f2); + + if(order < 2) return; /* nothing else to do */ + + d2f1 = beta/X_FACTOR_C*2.0; + d2f2 = ddp*(1.0 - 2.0/4.0*gam*x*x/dd); + + *d2fdx2 = (2.0*f1*df2*df2 + d2f1*f2*f2 - f2*(2.0*df1*df2 + f1*d2f2))/(f2*f2*f2); +} + +#define XC_DIMENSIONS 2 +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_2d_b86_mgc) = { + XC_GGA_X_2D_B86_MGC, + XC_EXCHANGE, + "Becke 86 with modified gradient correction for 2D", + XC_FAMILY_GGA, + "S Pittalis, E Rasanen, JG Vilhena, and MAL Marques, Phys. Rev. A 79, 012503 (2009)\n" + "AD Becke, J. Chem. Phys 85, 7184 (1986)", + XC_FLAGS_2D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc/src/gga_x_2d_b88.c b/libxc/src/gga_x_2d_b88.c new file mode 100644 index 000000000..e917babdb --- /dev/null +++ b/libxc/src/gga_x_2d_b88.c @@ -0,0 +1,100 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_2D_B88 127 /* Becke 88 in 2D */ + +typedef struct{ + FLOAT beta; +} gga_x_2d_b88_params; + + +static void gga_x_2d_b88_init(XC(func_type) *p) +{ + assert(p->params == NULL); + + p->params = malloc(sizeof(gga_x_2d_b88_params)); + + /* value of beta in standard Becke 88 2D functional */ + XC(gga_x_2d_b88_set_params)(p, 0.018641); +} + + +void XC(gga_x_2d_b88_set_params)(XC(func_type) *p, FLOAT beta) +{ + gga_x_2d_b88_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_x_2d_b88_params *) (p->params); + + params->beta = beta; +} + + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + FLOAT f1, f2, df1, df2, d2f1, d2f2; + FLOAT beta, csi; + + assert(p->params != NULL); + beta = ((gga_x_2d_b88_params *) (p->params))->beta; + csi = 8.0; /* for harmonic potentials */ + + f1 = beta/X_FACTOR_2D_C*x*x; + f2 = 1.0 + csi*beta*x*ASINH(x); + *f = 1.0 + f1/f2; + + if(order < 1) return; + + df1 = 2.0*beta/X_FACTOR_2D_C*x; + df2 = csi*beta*(ASINH(x) + x/SQRT(1.0 + x*x)); + + *dfdx = (df1*f2 - f1*df2)/(f2*f2); + + if(order < 2) return; + + d2f1 = 2.0*beta/X_FACTOR_2D_C; + d2f2 = csi*beta*(2.0 + x*x)/POW(1.0 + x*x, 3.0/2.0); + + *d2fdx2 = (2.0*f1*df2*df2 + d2f1*f2*f2 - f2*(2.0*df1*df2 + f1*d2f2))/(f2*f2*f2); +} + +#define XC_DIMENSIONS 2 +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_2d_b88) = { + XC_GGA_X_2D_B88, + XC_EXCHANGE, + "Becke 88", + XC_FAMILY_GGA, + "G Vilhena, MAL Marques, unpublished\n" + "AD Becke, Phys. Rev. A 38, 3098 (1988)", + XC_FLAGS_2D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_2d_b88_init, + NULL, + NULL, + work_gga_x, + NULL +}; diff --git a/libxc/src/gga_x_2d_pbe.c b/libxc/src/gga_x_2d_pbe.c new file mode 100644 index 000000000..49da4a8c8 --- /dev/null +++ b/libxc/src/gga_x_2d_pbe.c @@ -0,0 +1,82 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_2D_PBE 129 /* Perdew, Burke & Ernzerhof exchange in 2D */ + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + //FILE *fin; + static const FLOAT kappa[1] = { + 0.4604, /* original PBE */ + }; + + FLOAT mu[1] = { + 0.354546875, + }; + + FLOAT ss, f0, df0, d2f0; + int func; + + switch(p->info->number){ + default: func = 0; /* original PBE */ + } + + //fin = fopen("gga_x_2d_b88_params", "r"); + //fscanf(fin, "%lf", &mu[0]); + //fclose(fin); + + ss = X2S_2D*x; + + f0 = kappa[func] + mu[func]*ss*ss; + *f = 1.0 + kappa[func]*(1.0 - kappa[func]/f0); + + if(order < 1) return; + + df0 = 2.0*ss*mu[func]; + + *dfdx = X2S_2D*kappa[func]*kappa[func]*df0/(f0*f0); + + if(order < 2) return; + + d2f0 = 2.0*mu[func]; + *d2fdx2 = X2S_2D*X2S_2D*kappa[func]*kappa[func]/(f0*f0)*(d2f0 - 2.0*df0*df0/f0); +} + +#define XC_DIMENSIONS 2 +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_2d_pbe) = { + XC_GGA_X_2D_PBE, + XC_EXCHANGE, + "Perdew, Burke & Ernzerhof in 2D", + XC_FAMILY_GGA, + "G Vilhena and MAL Marques, unpublished\n" + "JP Perdew, K Burke, and M Ernzerhof, Phys. Rev. Lett. 77, 3865 (1996)\n" + "JP Perdew, K Burke, and M Ernzerhof, Phys. Rev. Lett. 78, 1396(E) (1997)", + XC_FLAGS_2D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc/src/gga_x_airy.c b/libxc/src/gga_x_airy.c new file mode 100644 index 000000000..15b7b9c13 --- /dev/null +++ b/libxc/src/gga_x_airy.c @@ -0,0 +1,162 @@ +/* + Copyright (C) 2008 Georg Madsen + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_AIRY 192 /* Constantin et al based on the Airy gas */ +#define XC_GGA_X_LAG 193 /* Local Airy Gas */ + +static void +gga_x_airy_init(XC(func_type) *p) +{ + switch(p->info->number){ + case XC_GGA_X_AIRY: p->func = 0; break; + case XC_GGA_X_LAG: p->func = 1; break; + default: + fprintf(stderr, "Internal error in gga_x_airy\n"); + exit(1); + } +} + + +void XC(gga_x_airy_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static FLOAT + a1 = 0.041106, + a2 = 2.626712, + a3 = 0.092070, + a4 = 0.657946, + a5 = 133.983631, + a6 = 3.217063, + a7 = 136.707378, + a8 = 3.223476, + a9 = 2.675484, + a10 = 3.473804; + + FLOAT ss, ssa2, ssa6, ssa8, ssa10; + FLOAT den1, aux1, num1, den2, num2; + FLOAT dden1, daux1, dnum1, dden2, dnum2; + FLOAT d2den1, d2aux1, d2num1, d2den2, d2num2; + FLOAT d3den1, d3aux1, d3num1, d3den2, d3num2; + + ss = X2S*x; + ssa2 = POW(ss, a2); + ssa6 = POW(ss, a6); + ssa8 = POW(ss, a8); + ssa10 = POW(ss, a10); + + num1 = a1*ssa2; + aux1 = 1.0 + a3*ssa2; + den1 = POW(aux1, a4); + + *f = num1/den1; + + if(p->func == 0){ + num2 = 1.0 - a5*ssa6 + a7*ssa8; + den2 = 1.0 + a9*ssa10; + + *f += num2/den2; + } + + if(order < 1) return; + + dnum1 = a2*num1/ss; + daux1 = a3*a2*ssa2/ss; + dden1 = a4*daux1*den1/aux1; + + *dfdx = DFRACTION(num1, dnum1, den1, dden1); + + if(p->func == 0){ + dnum2 = -a5*a6*ssa6/ss + a7*a8*ssa8/ss; + dden2 = a9*a10*ssa10/ss; + + *dfdx += DFRACTION(num2, dnum2, den2, dden2); + } + + *dfdx *= X2S; + + if(order < 2) return; + + d2num1 = (a2 - 1.0)*dnum1/ss; + d2aux1 = (a2 - 1.0)*daux1/ss; + d2den1 = a4*den1/(aux1*aux1) * ((a4 - 1.0)*daux1*daux1 + aux1*d2aux1); + + *d2fdx2 = D2FRACTION(num1, dnum1, d2num1, den1, dden1, d2den1); + + if(p->func == 0){ + d2num2 = -a5*a6*(a6 - 1.0)*ssa6/(ss*ss) + a7*a8*(a8 - 1.0)*ssa8/(ss*ss); + d2den2 = (a10 - 1.0)*dden2/ss; + + *d2fdx2 += D2FRACTION(num2, dnum2, d2num2, den2, dden2, d2den2); + } + + *d2fdx2 *= X2S*X2S; + + if(order < 3) return; + + d3num1 = (a2 - 2.0)*d2num1/ss; + d3aux1 = (a2 - 1.0)*d2aux1/ss; + d3den1 = a4*den1/(aux1*aux1*aux1) * ((a4 - 1.0)*daux1*((a4 - 2.0)*daux1*daux1 + 3.0*aux1*d2aux1) + aux1*aux1*d3aux1); + + *d3fdx3 = D3FRACTION(num1, dnum1, d2num1, d3num1, den1, dden1, d2den1, d3den1); + + if(p->func == 0){ + d3num2 = -a5*a6*(a6 - 1.0)*(a6 - 2.0)*ssa6/(ss*ss*ss) + a7*a8*(a8 - 1.0)*(a8 - 2.0)*ssa8/(ss*ss*ss); + d3den2 = (a10 - 2.0)*d2den2/ss; + + *d3fdx3 += D3FRACTION(num2, dnum2, d2num2, d3num2, den2, dden2, d2den2, d3den2); + } + + *d3fdx3 *= X2S*X2S*X2S; +} + +#define func XC(gga_x_airy_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_airy) = { + XC_GGA_X_AIRY, + XC_EXCHANGE, + "Constantin et al based on the Airy gas", + XC_FAMILY_GGA, + "LA Constantin, A Ruzsinszky, and JP Perdew, Phys. Rev. B 80, 035125 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_airy_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_lag) = { + XC_GGA_X_LAG, + XC_EXCHANGE, + "Local Airy Gas", + XC_FAMILY_GGA, + "L Vitos, B Johansson, J Kollar, and HL Skriver, Phys. Rev. B 62, 10046-10050 (2000)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_airy_init, + NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc/src/gga_x_ak13.c b/libxc/src/gga_x_ak13.c new file mode 100644 index 000000000..b7059d446 --- /dev/null +++ b/libxc/src/gga_x_ak13.c @@ -0,0 +1,88 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include "util.h" + +#define XC_GGA_X_AK13 56 /* Armiento & Kuemmel 2013 */ + +static const FLOAT B1 = 1.74959015598863046792081721182; /* 3*muGE/5 + 8 pi/15 */ +static const FLOAT B2 = -1.62613336586517367779736042170; /* muGE - B1 */ + +FLOAT XC(gga_ak13_get_asymptotic) (FLOAT homo) +{ + FLOAT Qx, aa, aa2, factor; + + Qx = SQRT(2.0)*B1/(3.0*CBRT(3.0*M_PI*M_PI)); + + aa = X_FACTOR_C*Qx; + aa2 = aa*aa; + + factor = (homo < 0.0) ? -1.0 : 1.0; + + return (aa2/2.0)*(1.0 + factor*SQRT(1.0 - 4.0*homo/aa2)); +} + + +void XC(gga_x_ak13_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + FLOAT ss, den, f1, f2; + + ss = X2S*x; + + f1 = LOG(1.0 + ss); + f2 = LOG(1.0 + f1); + + *f = 1.0 + B1*ss*f1 + B2*ss*f2; + + if(order < 1) return; + + den = (1.0 + ss)*(1.0 + f1); + + *dfdx = B1*f1 + ss*(B1 + B2 + B1*f1)/den + B2*f2; + *dfdx *= X2S; + + if(order < 2) return; + + *d2fdx2 = (2.0*B2 + B1*(2.0 + ss) + (2.0 + ss)*f1*(2.0*B1 + B2 + B1*f1))/(den*den); + *d2fdx2 *= X2S*X2S; + + if(order < 3) return; + + *d3fdx3 = (B2*(ss - 6.0) - B1*(ss + 3.0) - f1*(3.0*B1*(ss + 3.0) + B2*(2.0*ss + 9.0) + (ss + 3.0)*f1*(3.0*B1 + B2 + B1*f1)))/(den*den*den); + *d3fdx3 *= X2S*X2S*X2S; +} + +#define func XC(gga_x_ak13_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_ak13) = { + XC_GGA_X_AK13, + XC_EXCHANGE, + "Armiento & Kuemmel 2013", + XC_FAMILY_GGA, + "R Armiento and S Kuemmel, PRL 111, 036402 (2013)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; + diff --git a/libxc/src/gga_x_am05.c b/libxc/src/gga_x_am05.c new file mode 100644 index 000000000..1c0ae5294 --- /dev/null +++ b/libxc/src/gga_x_am05.c @@ -0,0 +1,151 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_AM05 120 /* Armiento & Mattsson 05 exchange */ + +void XC(gga_x_am05_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + const FLOAT am05_c = 0.7168; + const FLOAT am05_alpha = 2.804; + + const FLOAT z_tt_factor = POW(CBRT(4.0/3.0) * 2.0*M_PI/3.0, 4); + + FLOAT ss, ss2, lam_x, dlam_x, d2lam_x, d3lam_x; + FLOAT aux1, aux2, aux12, aux22; + FLOAT ww, ww13, z_t, z_t2, z_tt, z_tt_aux, fx_b, xx, flaa_1, flaa_2, flaa; + FLOAT dww, dz_t, dz_tt, dfx_b, dxx, dflaa_1, dflaa_2, dflaa; + FLOAT d2ww, d2z_t, d2z_tt, d2fx_b, d2xx, d2flaa_1, d2flaa_2, d2flaa; + FLOAT d3ww, d3z_t, d3z_tt, d3fx_b, d3xx, d3flaa_2, d3flaa; + + if(x < p->info->min_grad){ + *f = 1.0; + return; + } + + ss = X2S*x; + ss2 = ss*ss; + + lam_x = ss*SQRT(ss)/(2.0*SQRT(6.0)); + ww = XC(lambert_w)(lam_x); + ww13 = CBRT(ww); + + z_t = (M_CBRT9/M_CBRT4)*ww13*ww13; + z_t2 = z_t*z_t; + + /* This is equal to sqrt(t_zeta) * tt_zeta of the JCP*/ + z_tt_aux = z_tt_factor + z_t2; + z_tt = z_t * SQRT(SQRT(z_tt_aux)); + + /* note that there is a factor of 2 missing in the JCP */ + fx_b = M_PI/3.0*ss/z_tt; + + xx = 1.0/(1.0 + am05_alpha*ss2); + + flaa_1 = am05_c*ss2 + 1.0; + flaa_2 = am05_c*ss2/fx_b + 1.0; + flaa = flaa_1/flaa_2; + + *f = xx + (1.0 - xx)*flaa; + + if(order < 1) return; + + dlam_x = 1.5*lam_x/ss; + aux1 = 1.0 + ww; + aux2 = lam_x*aux1; + + dww = ww*dlam_x/aux2; + dz_t = M_CBRT2*dww/(M_CBRT3*ww13); + dz_tt = (2.0*z_tt_factor + 3.0*z_t2)*z_tt/(2.0*z_t*z_tt_aux); + dfx_b = M_PI/3.0*(z_tt - ss*dz_tt*dz_t)/(z_tt*z_tt); + + dxx = -2.0*am05_alpha*ss * xx*xx; + dflaa_1 = 2.0*am05_c*ss; + dflaa_2 = DFRACTION(am05_c*ss2, dflaa_1, fx_b, dfx_b); + dflaa = DFRACTION(flaa_1, dflaa_1, flaa_2, dflaa_2); + + *dfdx = dxx*(1.0 - flaa) + dflaa*(1.0 - xx); + *dfdx *= X2S; + + if(order < 2) return; + + aux12 = aux1*aux1; + aux22 = aux2*aux2; + + d2lam_x = 0.5*dlam_x/ss; + d2ww = ww*(-ww*(2.0 + ww)*dlam_x*dlam_x + aux12*lam_x*d2lam_x)/(aux22*aux1); + d2z_t = -M_CBRT2*(dww*dww - 3.0*ww*d2ww)/(3.0*M_CBRT3*ww*ww13); + + d2z_tt = 3.0*z_t*(2.0*z_tt_factor + z_t2)*z_tt/(4.0*z_t*z_tt_aux*z_tt_aux); + d2fx_b = M_PI/3.0*(2.0*ss*dz_tt*dz_tt*dz_t*dz_t - z_tt*(dz_tt*(2.0*dz_t + ss*d2z_t) + ss*dz_t*dz_t*d2z_tt))/(z_tt*z_tt*z_tt); + + d2xx = 2.0*am05_alpha*(3.0*am05_alpha*ss2 - 1.0) * xx*xx*xx; + d2flaa_1 = 2.0*am05_c; + d2flaa_2 = D2FRACTION(am05_c*ss2, dflaa_1, d2flaa_1, fx_b, dfx_b, d2fx_b); + d2flaa = D2FRACTION(flaa_1, dflaa_1, d2flaa_1, flaa_2, dflaa_2, d2flaa_2); + + *d2fdx2 = d2xx*(1.0 - flaa) - 2.0*dxx*dflaa + (1.0 - xx)*d2flaa; + *d2fdx2 *= X2S*X2S; + + if(order < 3) return; + + d3lam_x = -0.5*d2lam_x/ss; + d3ww = ww*(ww*dlam_x*(ww*(9.0 + 2.0*ww*(4.0 + ww))*dlam_x*dlam_x - 3.0*lam_x*aux12*(2.0 + ww)*d2lam_x) + + lam_x*lam_x*aux12*aux12*d3lam_x)/(aux22*aux2*aux12); + d3z_t = M_CBRT2*(4.0*dww*dww*dww - 9.0*ww*dww*d2ww + 9.0*ww*ww*d3ww)/(9.0*M_CBRT3*ww*ww*ww13); + + d3z_tt = -3.0*(-4.0*z_tt_factor*z_tt_factor + 4.0*z_tt_factor*z_t2 + z_t2*z_t2)*z_tt/(8.0*z_t*z_tt_aux*z_tt_aux*z_tt_aux); + d3fx_b = M_PI/3.0*(-6.0*ss*dz_t*dz_t*dz_t*dz_tt*dz_tt*dz_tt + +6.0*z_tt*dz_t*dz_tt*(dz_tt*(dz_t + ss*d2z_t) + ss*dz_t*dz_t*d2z_tt) + -z_tt*z_tt*(3.0*dz_t*(dz_t + ss*d2z_t)*d2z_tt + dz_tt*(3.0*d2z_t + ss*d3z_t) + ss*dz_t*dz_t*dz_t*d3z_tt)) + /(z_tt*z_tt*z_tt*z_tt); + + d3xx = -24.0*am05_alpha*am05_alpha*ss*(am05_alpha*ss2 - 1.0) * xx*xx*xx*xx; + + d3flaa_2 = D3FRACTION(am05_c*ss2, dflaa_1, d2flaa_1, 0.0, fx_b, dfx_b, d2fx_b, d3fx_b); + d3flaa = D3FRACTION(flaa_1, dflaa_1, d2flaa_1, 0.0, flaa_2, dflaa_2, d2flaa_2, d3flaa_2); + + *d3fdx3 = d3xx*(1.0 - flaa) - 3.0*d2xx*dflaa + -3.0*dxx*d2flaa + (1.0 - xx)*d3flaa; + *d3fdx3 *= X2S*X2S*X2S; + +} + +#define func XC(gga_x_am05_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_am05) = { + XC_GGA_X_AM05, + XC_EXCHANGE, + "Armiento & Mattsson 05", + XC_FAMILY_GGA, + "R Armiento and AE Mattsson, Phys. Rev. B 72, 085108 (2005)\n" + "AE Mattsson, R Armiento, J Paier, G Kresse, JM Wills, and TR Mattsson, J. Chem. Phys. 128, 084714 (2008).", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc/src/gga_x_b86.c b/libxc/src/gga_x_b86.c new file mode 100644 index 000000000..9f340eb6e --- /dev/null +++ b/libxc/src/gga_x_b86.c @@ -0,0 +1,71 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_B86 103 /* Becke 86 Xalfa,beta,gamma */ + +void XC(gga_x_b86_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static const FLOAT beta = 0.0036/X_FACTOR_C; + static const FLOAT gamma = 0.004; + + FLOAT f1, f2, df1, df2, d2f1, d2f2; + + f1 = beta*x*x; + f2 = 1.0 + gamma*x*x; + *f = 1.0 + f1/f2; + + if(order < 1) return; + + df1 = 2.0*beta *x; + df2 = 2.0*gamma*x; + + *dfdx = (df1*f2 - f1*df2)/(f2*f2); + + if(order < 2) return; + + d2f1 = 2.0*beta; + d2f2 = 2.0*gamma; + + *d2fdx2 = (2.0*f1*df2*df2 + d2f1*f2*f2 - f2*(2.0*df1*df2 + f1*d2f2))/(f2*f2*f2); + + if(order < 3) return; + + *d3fdx3 = (-6.0*f1*df2*df2*df2 + 6.0*f2*df2*(df1*df2 + f1*d2f2) - f2*f2*(3.0*df2*d2f1 + 3.0*df1*d2f2))/(f2*f2*f2*f2); +} + +#define func XC(gga_x_b86_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_b86) = { + XC_GGA_X_B86, + XC_EXCHANGE, + "Becke 86", + XC_FAMILY_GGA, + "AD Becke, J. Chem. Phys 84, 4524 (1986)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-23, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc/src/gga_x_b86_mgc.c b/libxc/src/gga_x_b86_mgc.c new file mode 100644 index 000000000..528468e33 --- /dev/null +++ b/libxc/src/gga_x_b86_mgc.c @@ -0,0 +1,77 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_B86_MGC 105 /* Becke 86 Xalfa,beta,gamma (with mod. grad. correction) */ + +void XC(gga_x_b86_mgc_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static const FLOAT beta = 0.00375; + static const FLOAT gamma = 0.007; + + FLOAT dd, f1, f2, df1, df2, d2f1, d2f2, d3f1, d3f2; + + dd = 1.0 + gamma*x*x; + + f1 = beta/X_FACTOR_C*x*x; + f2 = POW(dd, 4.0/5.0); + *f = 1.0 + f1/f2; + + if(order < 1) return; + + df1 = beta/X_FACTOR_C*2.0*x; + df2 = 8.0*gamma*x*f2/(5.0*dd); + + *dfdx = DFRACTION(f1, df1, f2, df2); + + if(order < 2) return; + + d2f1 = beta/X_FACTOR_C*2.0; + d2f2 = 8.0*gamma*(5.0 + 3.0*gamma*x*x)*f2/(25.0*dd*dd); + + *d2fdx2 = D2FRACTION(f1, df1, d2f1, f2, df2, d2f2); + + if(order < 3) return; + + d3f1 = 0.0; + d3f2 = -48.0*gamma*gamma*x*(5.0 + gamma*x*x)*f2/(125.0*dd*dd*dd); + + *d3fdx3 = D3FRACTION(f1, df1, d2f1, d3f1, f2, df2, d2f2, d3f2); +} + +#define func XC(gga_x_b86_mgc_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_b86_mgc) = { + XC_GGA_X_B86_MGC, + XC_EXCHANGE, + "Becke 86 with modified gradient correction", + XC_FAMILY_GGA, + "AD Becke, J. Chem. Phys 84, 4524 (1986)\n" + "AD Becke, J. Chem. Phys 85, 7184 (1986)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc/src/gga_x_b88.c b/libxc/src/gga_x_b88.c new file mode 100644 index 000000000..56d18f2f5 --- /dev/null +++ b/libxc/src/gga_x_b88.c @@ -0,0 +1,238 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_B88 106 /* Becke 88 */ +#define XC_GGA_X_OPTB88_VDW 139 /* Becke 88 reoptimized to be used with vdW functional of Dion et al*/ +#define XC_GGA_X_MB88 149 /* Modified Becke 88 for proton transfer */ +#define XC_GGA_K_LLP 522 /* Lee, Lee & Parr */ +#define XC_GGA_K_FR_B88 514 /* Fuentealba & Reyes (B88 version) */ +#define XC_GGA_K_THAKKAR 523 /* Thakkar 1992 */ + +typedef struct{ + FLOAT beta, gamma; +} gga_x_b88_params; + + +static void +gga_x_b88_init(XC(func_type) *p) +{ + assert(p!=NULL && p->params == NULL); + p->params = malloc(sizeof(gga_x_b88_params)); + + /* value of beta in standard Becke 88 functional */ + switch(p->info->number){ + case XC_GGA_X_B88: + p->func = 0; + XC(gga_x_b88_set_params)(p, 0.0042, 6.0); + break; + case XC_GGA_X_OPTB88_VDW: + p->func = 1; + XC(gga_x_b88_set_params)(p, 0.00336865923905927, 6.98131700797731); + break; + case XC_GGA_K_LLP: + p->func = 2; + XC(gga_x_b88_set_params)(p, X_FACTOR_C*0.0044188, 0.0253/(X_FACTOR_C*0.0044188)); + break; + case XC_GGA_K_FR_B88: + p->func = 3; + XC(gga_x_b88_set_params)(p, X_FACTOR_C*0.004596, 0.02774/(X_FACTOR_C*0.004596)); + break; + case XC_GGA_X_MB88: + p->func = 4; + XC(gga_x_b88_set_params)(p, 0.0011, 6.0); + break; + case XC_GGA_K_THAKKAR: + p->func = 5; + XC(gga_x_b88_set_params)(p, X_FACTOR_C*0.0055, 0.0253/(X_FACTOR_C*0.0055)); + break; + default: + fprintf(stderr, "Internal error in gga_x_b88\n"); + exit(1); + } +} + + +void +XC(gga_x_b88_set_params)(XC(func_type) *p, FLOAT beta, FLOAT gamma) +{ + gga_x_b88_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_x_b88_params *) (p->params); + + params->beta = beta; + params->gamma = gamma; +} + + +void +XC(gga_x_b88_enhance)(const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + FLOAT x2, aux1, aux2, f1, f2, df1, df2, d2f1, d2f2, d3f1, d3f2, dd; + FLOAT beta, gamma; + + assert(p->params != NULL); + beta = ((gga_x_b88_params *) (p->params))->beta; + gamma = ((gga_x_b88_params *) (p->params))->gamma; + + x2 = x*x; + + f1 = beta/X_FACTOR_C*x2; + f2 = 1.0 + gamma*beta*x*ASINH(x); + *f = 1.0 + f1/f2; + + if(p->func == 5){ /* k_thakkar */ + dd = 1.0/(1.0 + 2.0*CBRT(4.0)*x); + *f += -0.072*x*dd; + } + + if(order < 1) return; + + aux1 = 1.0 + x2; + aux2 = SQRT(aux1); + + df1 = 2.0*beta/X_FACTOR_C*x; + df2 = gamma*beta*(ASINH(x) + x/aux2); + + *dfdx = (df1*f2 - f1*df2)/(f2*f2); + + if(p->func == 5) /* k_thakkar */ + *dfdx += -0.072*dd*dd; + + if(order < 2) return; + + d2f1 = 2.0*beta/X_FACTOR_C; + d2f2 = gamma*beta*(2.0 + x2)/(aux1*aux2); + + *d2fdx2 = (2.0*f1*df2*df2 + d2f1*f2*f2 - f2*(2.0*df1*df2 + f1*d2f2))/(f2*f2*f2); + + if(p->func == 5) /* k_thakkar */ + *d2fdx2 += 0.072*4.0*CBRT(4.0)*dd*dd*dd; + + if(order < 2) return; + + d3f1 = 0.0; + d3f2 = -beta*gamma*x*(4.0 + x2)/(aux1*aux1*aux2); + + *d3fdx3 = (-6.0*f1*df2*df2*df2 + 6.0*f2*df2*(df1*df2 + f1*d2f2) + f2*f2*f2*d3f1 - f2*f2*(3.0*df2*d2f1 + 3.0*df1*d2f2 + f1*d3f2))/(f2*f2*f2*f2); + + if(p->func == 5) /* k_thakkar */ + *d3fdx3 += -0.072*24.0*CBRT(4.0)*CBRT(4.0)*dd*dd*dd*dd; +} + +#define func XC(gga_x_b88_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_b88) = { + XC_GGA_X_B88, + XC_EXCHANGE, + "Becke 88", + XC_FAMILY_GGA, + "AD Becke, Phys. Rev. A 38, 3098 (1988)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_b88_init, + NULL, + NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_optb88_vdw) = { + XC_GGA_X_OPTB88_VDW, + XC_EXCHANGE, + "opt-Becke 88 for vdW", + XC_FAMILY_GGA, + "J Klimes, DR Bowler, and A Michaelides, J. Phys.: Condens. Matter 22, 022201 (2010)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_b88_init, + NULL, + NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_mb88) = { + XC_GGA_X_MB88, + XC_EXCHANGE, + "Modified Becke 88 for proton transfer", + XC_FAMILY_GGA, + "V Tognetti and C Adamo, J. Phys. Chem. A 113, 14415-14419 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_b88_init, + NULL, + NULL, + work_gga_x, + NULL +}; + +#define XC_KINETIC_FUNCTIONAL +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_k_llp) = { + XC_GGA_K_LLP, + XC_KINETIC, + "Becke 88", + XC_FAMILY_GGA, + "H Lee, C Lee, and RG Parr, Phys. Rev. A 44, 768 (1991)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_b88_init, + NULL, + NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_fr_b88) = { + XC_GGA_K_FR_B88, + XC_KINETIC, + "Fuentealba & Reyes (B88 version)", + XC_FAMILY_GGA, + "P Fuentealba and O Reyes, Chem. Phys. Lett. 232, 31-34 (1995)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_b88_init, + NULL, + NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_thakkar) = { + XC_GGA_K_THAKKAR, + XC_KINETIC, + "Thakkar 1992", + XC_FAMILY_GGA, + "AJ Thakkar, Phys. Rev. A 46, 6920-6924 (1992)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_b88_init, + NULL, + NULL, + work_gga_k, + NULL +}; diff --git a/libxc/src/gga_x_bayesian.c b/libxc/src/gga_x_bayesian.c new file mode 100644 index 000000000..b4dfd74fa --- /dev/null +++ b/libxc/src/gga_x_bayesian.c @@ -0,0 +1,81 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_BAYESIAN 125 /* Bayesian best fit for the enhancement factor */ + +void XC(gga_x_bayesian_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static const FLOAT theta[3] = { + 1.0008, 0.1926, 1.8962 + }; + + FLOAT ss, aux, f0, f02, df0, d2f0, d3f0; + + ss = X2S*x; + + aux = 1.0 + ss; + f0 = ss/aux; + f02 = f0*f0; + + *f = theta[0] + f02*(theta[1] + f02*theta[2]); + + if(order < 1) return; + + df0 = 1.0/(aux*aux); + + *dfdx = 2.0*f0*(theta[1] + 2.0*theta[2]*f02)*df0; + *dfdx *= X2S; + + if(order < 2) return; + + d2f0 = -2.0*df0/aux; + + *d2fdx2 = 2.0*(theta[1] + 6.0*theta[2]*f02)*df0*df0 + 2.0*f0*(theta[1] + 2.0*theta[2]*f02)*d2f0; + *d2fdx2 *= X2S*X2S; + + if(order < 3) return; + + d3f0 = -3.0*d2f0/aux; + + *d3fdx3 = 24.0*theta[2]*f0*df0*df0*df0 + 6.0*(theta[1] + 6.0*theta[2]*f02)*df0*d2f0 + + 2.0*f0*(theta[1] + 2.0*theta[2]*f02)*d3f0; + *d3fdx3 *= X2S*X2S*X2S; + +} + +#define func XC(gga_x_bayesian_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_bayesian) = { + XC_GGA_X_BAYESIAN, + XC_EXCHANGE, + "Bayesian best fit for the enhancement factor", + XC_FAMILY_GGA, + "JJ Mortensen, K Kaasbjerg, SL Frederiksen, JK Nørskov, JP Sethna, and KW Jacobsen, Phys. Rev. Lett. 95, 216401 (2005)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc/src/gga_x_bpccac.c b/libxc/src/gga_x_bpccac.c new file mode 100644 index 000000000..fa503c7ec --- /dev/null +++ b/libxc/src/gga_x_bpccac.c @@ -0,0 +1,89 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_BPCCAC 98 /* BPCCAC (GRAC for the energy) */ + +static void +gga_x_bpccac_init(XC(func_type) *p) +{ + p->n_func_aux = 2; + p->func_aux = (XC(func_type) **) malloc(2*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + p->func_aux[1] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_GGA_X_PBE_TCA, p->nspin); + XC(func_init)(p->func_aux[1], XC_GGA_X_PW91, p->nspin); +} + + +void XC(gga_x_bpccac_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static const FLOAT alpha = 1.0, beta = 19.0; + + FLOAT f1, df1dx, d2f1dx2, d3f1dx3; + FLOAT f2, df2dx, d2f2dx2, d3f2dx3; + FLOAT aux, den, fab, dfab, d2fab, d3fab; + + XC(gga_x_pbe_enhance) (p->func_aux[0], order, x, &f1, &df1dx, &d2f1dx2, &d3f1dx3); + XC(gga_x_pw91_enhance)(p->func_aux[1], order, x, &f2, &df2dx, &d2f2dx2, &d3f2dx3); + + aux = EXP(-(alpha*(x - beta))); + den = 1.0 + aux; + + fab = 1.0/den; + *f = (1.0 - fab)*f1 + fab*f2; + + if(order < 1) return; + + dfab = alpha*aux/(den*den); + *dfdx = dfab*(f2 - f1) + (1.0 - fab)*df1dx + fab*df2dx; + + if(order < 2) return; + + d2fab = -alpha*alpha*aux*(1.0 - aux)/(den*den*den); + *d2fdx2 = d2fab*(f2 - f1) + 2.0*dfab*(df2dx - df1dx) + (1.0 - fab)*d2f1dx2 + fab*d2f2dx2; + + if(order < 3) return; + + d3fab = alpha*alpha*alpha*aux*(1.0 - 4.0*aux + aux*aux)/(den*den*den*den); + *d3fdx3 = d3fab*(f2 - f1) + 3.0*dfab*(df2dx - df1dx) + 3.0*dfab*(d2f2dx2 - d2f1dx2) + (1.0 - fab)*d3f1dx3 + fab*d3f2dx3; +} + +#define func XC(gga_x_bpccac_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_bpccac) = { + XC_GGA_X_BPCCAC, + XC_EXCHANGE, + "BPCCAC (GRAC for the energy)", + XC_FAMILY_GGA, + "E Bremond, D Pilard, I Ciofini, H Chermette, C Adamo, and P Cortona, Theor Chem Acc 131, 1184 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_bpccac_init, + NULL, NULL, + work_gga_x, + NULL +}; + diff --git a/libxc/src/gga_x_c09x.c b/libxc/src/gga_x_c09x.c new file mode 100644 index 000000000..a57ba6ad6 --- /dev/null +++ b/libxc/src/gga_x_c09x.c @@ -0,0 +1,73 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_C09X 158 /* C09x to be used with the VdW of Rutgers-Chalmers */ + +void XC(gga_x_c09x_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static FLOAT mu = 0.0617, kappa = 1.245, alpha = 0.0483; + + FLOAT ss, ss2, aux, aux2; + + ss = X2S*x; + ss2 = ss*ss; + + aux = EXP(-0.5*alpha*ss2); + aux2 = aux*aux; + + *f = 1.0 + mu*ss2*aux2 + kappa*(1.0 - aux); + + if(order < 1) return; + + *dfdx = 2.0*ss*mu*aux2*(1.0 - alpha*ss2) + alpha*kappa*ss*aux; + *dfdx *= X2S; + + if(order < 2) return; + + *d2fdx2 = 2.0*mu*aux2*(1.0 + alpha*ss2*(2.0*alpha*ss2 - 5.0)) + alpha*kappa*aux*(1.0 - alpha*ss2); + *d2fdx2 *= X2S*X2S; + + if(order < 3) return; + + *d3fdx3 = alpha*ss*(-4.0*mu*aux2*(6.0 + alpha*ss2*(2.0*alpha*ss2 - 9.0)) + alpha*kappa*aux*(alpha*ss2 - 3.0)); + *d3fdx3 *= X2S*X2S*X2S; + +} + + +#define func XC(gga_x_c09x_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_c09x) = { + XC_GGA_X_C09X, + XC_EXCHANGE, + "C09x to be used with the VdW of Rutgers-Chalmers", + XC_FAMILY_GGA, + "VR Cooper, Phys. Rev. B 81, 161104(R) (2010)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc/src/gga_x_dk87.c b/libxc/src/gga_x_dk87.c new file mode 100644 index 000000000..6f06b6dd4 --- /dev/null +++ b/libxc/src/gga_x_dk87.c @@ -0,0 +1,96 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_DK87_R1 111 /* dePristo & Kress 87 (version R1) */ +#define XC_GGA_X_DK87_R2 112 /* dePristo & Kress 87 (version R2) */ + +void XC(gga_x_dk87_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static const FLOAT a1[2] = {0.861504, 0.861213}, + b1[2] = {0.044286, 0.042076}, alpha[2] = {1.0, 0.98}; + static const FLOAT betag = 0.00132326681668994855/X_FACTOR_C; /* 7/(432*pi*(6*pi^2)^(1/3)) */ + + FLOAT f0, f1, f2, df1, df2, d2f1, d2f2, d3f1; + int func; + + switch(p->info->number){ + case XC_GGA_X_DK87_R2: func = 1; break; + default: func = 0; /* XC_GGA_X_DK87_R1 */ + } + + f0 = a1[func]*POW(x, alpha[func]); + f1 = betag*x*x*(1.0 + f0); + f2 = 1.0 + b1[func]*x*x; + + *f = 1.0 + f1/f2; + + if(order < 1) return; + + df1 = betag*x*(2.0 + (2.0 + alpha[func])*f0); + df2 = 2.0*b1[func]*x; + + *dfdx = DFRACTION(f1, df1, f2, df2); + + if(order < 2) return; + + d2f1 = betag*(2.0 + (1.0 + alpha[func])*(2.0 + alpha[func])*f0); + d2f2 = 2.0*b1[func]; + + *d2fdx2 = D2FRACTION(f1, df1, d2f1, f2, df2, d2f2); + + if(order < 3) return; + + d3f1 = betag*alpha[func]*(1.0 + alpha[func])*(2.0 + alpha[func])*f0/x; + + *d3fdx3 = D3FRACTION(f1, df1, d2f1, d3f1, f2, df2, d2f2, 0.0); +} + +#define func XC(gga_x_dk87_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_dk87_r1) = { + XC_GGA_X_DK87_R1, + XC_EXCHANGE, + "dePristo & Kress 87 version R1", + XC_FAMILY_GGA, + "AE DePristo and JD Kress, J. Chem. Phys. 86, 1425 (1987)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-24, 1e-24, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_dk87_r2) = { + XC_GGA_X_DK87_R2, + XC_EXCHANGE, + "dePristo & Kress 87 version R2", + XC_FAMILY_GGA, + "AE DePristo and JD Kress, J. Chem. Phys. 86, 1425 (1987)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc/src/gga_x_ft97.c b/libxc/src/gga_x_ft97.c new file mode 100644 index 000000000..8f77b912d --- /dev/null +++ b/libxc/src/gga_x_ft97.c @@ -0,0 +1,114 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_FT97_A 114 /* Filatov & Thiel 97 (version A) */ +#define XC_GGA_X_FT97_B 115 /* Filatov & Thiel 97 (version B) */ + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, FLOAT sigma, + FLOAT *f, FLOAT *dfdx, + FLOAT *vsigma, FLOAT *d2fdx2, FLOAT *v2sigma2, FLOAT *v2sigmax) +{ + static const FLOAT + beta0 = 0.002913644, beta1 = 0.0009474169, beta2 = 6255746.320201; /* beta2 = 2501.149^2 ?? (Eq. (16a) */ + + FLOAT x2, beta, dbetadsigma, d2betadsigma2; + FLOAT f0, f1, f2, df2, d2f2, f3, df3, d2f3; + FLOAT df3df2, d2f3df2, d2f3df2x; + int func; + + switch(p->info->number){ + case XC_GGA_X_FT97_B: func = 1; break; + default: func = 0; /* XC_GGA_X_FT97_A */ + } + + if(func==0){ + beta = 0.00293; + }else{ + f1 = beta2 + sigma; + beta = beta0 + beta1*sigma/f1; + } + + x2 = x*x; + f2 = beta*ASINH(x2); + f3 = SQRT(1.0 + 9.0*x2*f2*f2); + *f = 1.0 + beta/X_FACTOR_C*x2/f3; + + if(order < 1) return; + + f0 = SQRT(1.0 + x2*x2); + df2 = beta*2.0*x/f0; + df3 = 9.0*x*f2*(f2 + x*df2)/f3; + + dbetadsigma = (func == 0) ? 0.0 : beta1*beta2/(f1*f1); + + *dfdx = beta/X_FACTOR_C*x*(2.0*f3 - x*df3)/(f3*f3); + + df3df2 = 9.0*x2*f2/f3; + *vsigma = dbetadsigma*x2/(f3*X_FACTOR_C)*(1.0 - f2*df3df2/f3); + + if(order < 2) return; + + d2f2 = beta*2.0*(1.0 - x2*x2)/(f0*f0*f0); + d2f3 = 9.0*(x2*f3*df2*df2 + f2*f2*(f3 - x*df3) + x*f2*(df2*(4.0*f3 - x*df3) + x*f3*d2f2)) / + (f3*f3); + + *d2fdx2 = beta/X_FACTOR_C*(2.0*(f3*f3 - 2.0*x*f3*df3 + x2*df3*df3) - x2*f3*d2f3)/(f3*f3*f3); + + d2betadsigma2 = (func == 0) ? 0.0 : -2.0*dbetadsigma/f1; + d2f3df2 = 9.0*x2*(f3 - f2*df3df2)/(f3*f3); + *v2sigma2 = d2betadsigma2*x2/(f3*X_FACTOR_C)*(1.0 - f2*df3df2/f3) + - dbetadsigma*dbetadsigma*x2*f2/(f3*f3*X_FACTOR_C*beta)*(2.0*df3df2 - 2.0*df3df2*df3df2*f2/f3 + d2f3df2*f2); + + d2f3df2x = 9.0*x*(2*f2/f3 + x*(df2*f3 - f2*df3)/(f3*f3)); + *v2sigmax = dbetadsigma*2.0*x/(f3*X_FACTOR_C)*(1.0 - f2*df3df2/f3) + - dbetadsigma/X_FACTOR_C*x2/(f3*f3)*(df3 + (df2*f3 - 2.0*f2*df3)/f3*df3df2 + d2f3df2x*f2); +} + +#define HEADER 2 +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_ft97_a) = { + XC_GGA_X_FT97_A, + XC_EXCHANGE, + "Filatov & Thiel 97 (version A)", + XC_FAMILY_GGA, + "M Filatov and W Thiel, Mol. Phys 91, 847 (1997)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_ft97_b) = { + XC_GGA_X_FT97_B, + XC_EXCHANGE, + "Filatov & Thiel 97 (version B)", + XC_FAMILY_GGA, + "M Filatov and W Thiel, Mol. Phys 91, 847 (1997)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc/src/gga_x_g96.c b/libxc/src/gga_x_g96.c new file mode 100644 index 000000000..34b407a2f --- /dev/null +++ b/libxc/src/gga_x_g96.c @@ -0,0 +1,61 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_G96 107 /* Gill 96 */ + +void +XC(gga_x_g96_enhance)(const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static const FLOAT c1 = 1.0/137.0; + FLOAT sx = SQRT(x); + + *f = 1.0 + c1/X_FACTOR_C*x*sx; + + if(order < 1) return; + + *dfdx = 3.0*c1/(2.0*X_FACTOR_C)*sx; + + if(order < 2) return; + + *d2fdx2 = 3.0*c1/(4.0*X_FACTOR_C*sx); + + if(order < 2) return; + + *d3fdx3 = -3.0*c1/(8.0*X_FACTOR_C*x*sx); +} + +#define func XC(gga_x_g96_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_g96) = { + XC_GGA_X_G96, + XC_EXCHANGE, + "Gill 96", + XC_FAMILY_GGA, + "PMW Gill, Mol. Phys. 89, 433 (1996)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc/src/gga_x_herman.c b/libxc/src/gga_x_herman.c new file mode 100644 index 000000000..b1e3e0ec0 --- /dev/null +++ b/libxc/src/gga_x_herman.c @@ -0,0 +1,61 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_HERMAN 104 /* Herman et al original GGA */ + +void XC(gga_x_herman_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static const FLOAT beta = 0.003/X_FACTOR_C; + + *f = 1.0 + beta*x*x; + + if(order < 1) return; + + *dfdx = 2.0*beta*x; + + if(order < 2) return; + + *d2fdx2 = 2.0*beta; + + if(order < 3) return; + + *d3fdx3 = 0.0; +} + +#define func XC(gga_x_herman_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_herman) = { + XC_GGA_X_HERMAN, + XC_EXCHANGE, + "Herman Xalphabeta GGA", + XC_FAMILY_GGA, + "F Herman, JP Van Dyke, and IB Ortenburger, Phys. Rev. Lett. 22, 807 (1969)\n" + "F Herman, IB Ortenburger, and JP Van Dyke, Int. J. Quantum Chem. Symp. 3, 827 (1970)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc/src/gga_x_hjs.c b/libxc/src/gga_x_hjs.c new file mode 100644 index 000000000..616184e1a --- /dev/null +++ b/libxc/src/gga_x_hjs.c @@ -0,0 +1,308 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_HJS_PBE 525 /* HJS screened exchange PBE version */ +#define XC_GGA_X_HJS_PBE_SOL 526 /* HJS screened exchange PBE_SOL version */ +#define XC_GGA_X_HJS_B88 527 /* HJS screened exchange B88 version */ +#define XC_GGA_X_HJS_B97X 528 /* HJS screened exchange B97x version */ + +typedef struct{ + FLOAT omega; + + const FLOAT *a, *b; /* pointers to the a and b parameters */ +} gga_x_hjs_params; + +static const FLOAT a_PBE[] = + {0.0159941, 0.0852995, -0.160368, 0.152645, -0.0971263, 0.0422061}; +static const FLOAT b_PBE[] = + {5.33319, -12.4780, 11.0988, -5.11013, 1.71468, -0.610380, 0.307555, -0.0770547, 0.0334840}; + +static const FLOAT a_PBE_sol[] = + {0.0047333, 0.0403304, -0.0574615, 0.0435395, -0.0216251, 0.0063721}; +static const FLOAT b_PBE_sol[] = + {8.52056, -13.9885, 9.28583, -3.27287, 0.843499, -0.235543, 0.0847074, -0.0171561, 0.0050552}; + +static const FLOAT a_B88[] = + {0.00968615, -0.0242498, 0.0259009, -0.0136606, 0.00309606, -7.32583e-5}; +static const FLOAT b_B88[] = + {-2.50356, 2.79656, -1.79401, 0.714888, -0.165924, 0.0118379, 0.0037806, -1.57905e-4, 1.45323e-6}; + +static const FLOAT a_B97x[] = + {0.0027355, 0.0432970, -0.0669379, 0.0699060, -0.0474635, 0.0153092}; +static const FLOAT b_B97x[] = + {15.8279, -26.8145, 17.8127, -5.98246, 1.25408, -0.270783, 0.0919536, -0.0140960, 0.0045466}; + +static void +gga_x_hjs_init(XC(func_type) *p) +{ + assert(p->params == NULL); + p->params = malloc(sizeof(gga_x_hjs_params)); + + XC(gga_x_hjs_set_params)(p, 0.0); + + switch(p->info->number){ + case XC_GGA_X_HJS_PBE: + ((gga_x_hjs_params *)(p->params))->a = a_PBE; + ((gga_x_hjs_params *)(p->params))->b = b_PBE; + break; + case XC_GGA_X_HJS_PBE_SOL: + ((gga_x_hjs_params *)(p->params))->a = a_PBE_sol; + ((gga_x_hjs_params *)(p->params))->b = b_PBE_sol; + break; + case XC_GGA_X_HJS_B88: + ((gga_x_hjs_params *)(p->params))->a = a_B88; + ((gga_x_hjs_params *)(p->params))->b = b_B88; + break; + case XC_GGA_X_HJS_B97X: + ((gga_x_hjs_params *)(p->params))->a = a_B97x; + ((gga_x_hjs_params *)(p->params))->b = b_B97x; + break; + default: + fprintf(stderr, "Internal error in gga_x_hjs_init\n"); + exit(1); + } +} + +void +XC(gga_x_hjs_set_params)(XC(func_type) *p, FLOAT omega) +{ + gga_x_hjs_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_x_hjs_params *) (p->params); + + params->omega = omega; +} + + +#define HEADER 3 + +/* This implementation follows the one from nwchem */ + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, FLOAT ds, + FLOAT *f, FLOAT *dfdx, FLOAT *lvrho) +{ + static const FLOAT AA=0.757211, BB=-0.106364, CC=-0.118649, DD=0.609650; + + FLOAT omega, kF, ss, ss2; + FLOAT H, F, EG; + FLOAT nu, zeta, eta, lambda, lambda2, lambda3, lambda4, chi, chi2, chi3, chi4, chi5; + FLOAT sqzpn2, sqepn2, sqlpn2; + FLOAT term1, term2, term3, term4, term5, term6; + + FLOAT dnudrho, dssdx, dHds, dFds, dEGds; + FLOAT dzeta, dchids, dchidnu; + + assert(p->params != NULL); + omega = ((gga_x_hjs_params *)(p->params))->omega; + + kF = POW(3.0*M_PI*M_PI*ds, 1.0/3.0); + nu = omega/kF; + + /* Rescaling the s values to ensure the Lieb-Oxford bound for s>8.3 */ + ss = X2S*x; + ss2 = ss*ss; + + if(order >= 1){ + dnudrho = -nu/(3.0*ds); + dssdx = X2S; + } + + /* first let us calculate H(s) */ + { + const FLOAT *a, *b; + FLOAT Hnum, Hden, dHnum, dHden; + + a = ((gga_x_hjs_params *)(p->params))->a; + b = ((gga_x_hjs_params *)(p->params))->b; + + Hnum = ss2*(a[0] + ss*(a[1] + ss*(a[2] + ss*(a[3] + ss*(a[4] + ss*a[5]))))); + Hden = 1.0 + ss*(b[0] + ss*(b[1] + ss*(b[2] + ss*(b[3] + ss*(b[4] + ss*(b[5] + ss*(b[6] + ss*(b[7] + ss*b[8])))))))); + + H = Hnum/Hden; + + if(order >= 1){ + dHnum = ss*(2.0*a[0] + ss*(3.0*a[1] + ss*(4.0*a[2] + ss*(5.0*a[3] + ss*(6.0*a[4] + ss*7.0*a[5]))))); + dHden = b[0] + ss*(2.0*b[1] + ss*(3.0*b[2] + ss*(4.0*b[3] + + ss*(5.0*b[4] + ss*(6.0*b[5] + ss*(7.0*b[6] + ss*(8.0*b[7] + ss*9.0*b[8]))))))); + + dHds = (Hden*dHnum - Hnum*dHden)/(Hden*Hden); + } + } + + /* auxiliary variables */ + { + FLOAT aux, saux; + + zeta = ss2*H; + eta = AA + zeta; + lambda = DD + zeta; + + aux = lambda + nu*nu; + saux = sqrt(aux); + chi = nu/saux; + + lambda2 = lambda*lambda; + lambda3 = lambda*lambda2; + lambda4 = lambda*lambda3; + + chi2 = chi*chi; + chi3 = chi*chi2; + chi4 = chi*chi3; + chi5 = chi*chi4; + + if(order >= 1){ + dzeta = 2*ss*H + ss2*dHds; + /* deta = dlambda = dzeta */ + dchids = -nu*dzeta/(2.0*aux*saux); + dchidnu = lambda/(aux*saux); + } + } + + /* now we calculate F(s) */ + { + FLOAT aux = 1.0 + 0.25*ss2; + + F = 1.0 - ss2/(27.0*CC*aux) - zeta/(2.0*CC); + + if(order >= 1){ + dFds = -2.0*ss/(27.0*CC*aux*aux) - dzeta/(2.0*CC); + } + } + + /* and now G(s) */ + { + FLOAT sqrtl = sqrt(lambda), sqrtz = sqrt(zeta), sqrte = sqrt(eta); + + EG = -(2.0/5.0)*CC*F*lambda - (4.0/15.0)*BB*lambda2 - (6.0/5.0)*AA*lambda3 + - lambda3*sqrtl*((4.0/5.0)*M_SQRTPI + (12.0/5.0)*(sqrtz - sqrte)); + + if(order >= 1){ + dEGds = -(2.0/5.0)*CC*(dFds*lambda + F*dzeta) - (8.0/15.0)*BB*lambda*dzeta - (18.0/5.0)*AA*lambda2*dzeta + - (14.0/5.0)*M_SQRTPI*lambda2*sqrtl*dzeta + - (42.0/5.0)*lambda2*sqrtl*dzeta*((sqrtz - sqrte) + (1.0/7.0)*lambda*(1.0/sqrtz - 1.0/sqrte)); + } + } + + sqzpn2 = sqrt(zeta + nu*nu); + sqepn2 = sqrt(eta + nu*nu); + sqlpn2 = sqrt(lambda + nu*nu); + + term1 = -(4.0/9.0)*BB*(1.0 - chi)/lambda; + term2 = -(2.0/9.0)*CC*F*(2.0 - 3.0*chi + chi3)/lambda2; + term3 = -(1.0/9.0)*EG*(8.0 - 15.0*chi + 10.0*chi3 - 3.0*chi5)/lambda3; + term4 = 2.0*nu*(sqzpn2 - sqepn2); + term5 = 2.0*zeta*LOG((nu + sqzpn2)/(nu + sqlpn2)); + term6 = -2.0*eta*LOG((nu + sqepn2)/(nu + sqlpn2)); + + *f = AA + term1 + term2 + term3 + term4 + term5 + term6; + + if(order >= 1){ + FLOAT dterm1ds, dterm2ds, dterm3ds, dterm4ds, dterm5ds, dterm6ds; + FLOAT dterm1dnu, dterm2dnu, dterm3dnu, dterm4dnu, dterm5dnu, dterm6dnu; + + dterm1ds = (4.0/9.0)*BB*(lambda*dchids + (1.0 - chi)*dzeta)/lambda2; + dterm2ds =-(2.0/9.0)*CC* + (chi - 1.0)*(-dFds*(2.0 - chi - chi2)*lambda + F*(3.0*(1.0 + chi)*lambda*dchids + 2.0*(2.0 - chi - chi2)*dzeta))/lambda3; + dterm3ds = -(1.0/9.0)*(chi - 1.0)*(chi - 1.0)* + ((8.0 + chi - 6.0*chi2 - 3.0*chi3)*lambda*dEGds + + 3.0*EG*(-5.0*(1.0 + chi)*(1.0 + chi)*lambda*dchids + (chi - 1.0)*(8.0 + 9.0*chi + 3.0*chi2)*dzeta))/lambda4; + dterm4ds = nu*dzeta*(1.0/sqzpn2 - 1.0/sqepn2); + dterm5ds = dzeta*(-(zeta/lambda)*(1.0 - nu/sqlpn2) + 1.0 + 2.0*LOG((nu + sqzpn2)/(nu + sqlpn2)) - nu/sqzpn2); + dterm6ds =-dzeta*(-( eta/lambda)*(1.0 - nu/sqlpn2) + 1.0 + 2.0*LOG((nu + sqepn2)/(nu + sqlpn2)) - nu/sqepn2); + + *dfdx = dterm1ds + dterm2ds + dterm3ds + dterm4ds + dterm5ds + dterm6ds; + + dterm1dnu = (4.0/9.0)*BB*dchidnu/lambda; + dterm2dnu = (2.0/3.0)*CC*F*(1.0 - chi2)*dchidnu/lambda2; + dterm3dnu = (5.0/3.0)*EG*(1.0 - 2.0*chi2 + chi4)*dchidnu/lambda3; + dterm4dnu = 2.0*(sqzpn2 - sqepn2 + nu*nu*(1.0/sqzpn2 - 1.0/sqepn2)); + dterm5dnu = 2.0*zeta*(1.0/sqzpn2 - 1.0/sqlpn2); + dterm6dnu =-2.0*eta*(1.0/sqepn2 - 1.0/sqlpn2); + + *lvrho = dterm1dnu + dterm2dnu + dterm3dnu + dterm4dnu + dterm5dnu + dterm6dnu; + + /* scale and convert to the right variables */ + *dfdx *= dssdx; + *lvrho *= dnudrho; + } +} + +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_hjs_pbe) = { + XC_GGA_X_HJS_PBE, + XC_EXCHANGE, + "HJS screened exchange PBE version", + XC_FAMILY_GGA, + "TM Henderson, BG Janesko, and GE Scuseria, J. Chem. Phys. 128, 194105 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_hjs_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_hjs_pbe_sol) = { + XC_GGA_X_HJS_PBE_SOL, + XC_EXCHANGE, + "HJS screened exchange PBE_SOL version", + XC_FAMILY_GGA, + "TM Henderson, BG Janesko, and GE Scuseria, J. Chem. Phys. 128, 194105 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_hjs_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_hjs_b88) = { + XC_GGA_X_HJS_B88, + XC_EXCHANGE, + "HJS screened exchange B88 version", + XC_FAMILY_GGA, + "TM Henderson, BG Janesko, and GE Scuseria, J. Chem. Phys. 128, 194105 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-6, 1e-11, 0.0, 0.0, /* densities smaller than 1e-6 yield NaNs */ + gga_x_hjs_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_hjs_b97x) = { + XC_GGA_X_HJS_B97X, + XC_EXCHANGE, + "HJS screened exchange B97x version", + XC_FAMILY_GGA, + "TM Henderson, BG Janesko, and GE Scuseria, J. Chem. Phys. 128, 194105 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_hjs_init, + NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc/src/gga_x_htbs.c b/libxc/src/gga_x_htbs.c new file mode 100644 index 000000000..10cdf33be --- /dev/null +++ b/libxc/src/gga_x_htbs.c @@ -0,0 +1,147 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_HTBS 191 /* Haas, Tran, Blaha, and Schwarz */ + +/* The equations to solve in order to obtain the coeficients cc are + + G(s1) = 0 + G(s2) = 1 + G'(s1) = 0 + G'(s2) = 0 +G''(s1) = 0 +G''(s2) = 0 +*/ + +static FLOAT s1 = 0.6, s2 = 2.6; +static FLOAT cc[6]; + +static void +gga_x_htbs_init(XC(func_type) *p) +{ + FLOAT s12, s22, s1_s2, aux; + + p->n_func_aux = 2; + p->func_aux = (XC(func_type) **) malloc(2*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + p->func_aux[1] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_GGA_X_RPBE, p->nspin); + XC(func_init)(p->func_aux[1], XC_GGA_X_WC, p->nspin); + + s12 = s1*s1; + s22 = s2*s2; + s1_s2 = s1 - s2; + + aux = s1_s2*s1_s2; + aux = 1.0/(aux*aux*s1_s2); + + cc[0] = aux*s12*s1*(s12 - 5.0*s1*s2 + 10*s22); + cc[1] = -aux*30.0*s12*s22; + cc[2] = aux*30*s1*s2*(s1 + s2); + cc[3] = -aux*10*(s12 + 4.0*s1*s2 + s22); + cc[4] = aux*15.0*(s1 + s2); + cc[5] = -aux*6.0; +} + + +void XC(gga_x_htbs_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + FLOAT s, g, dg, d2g, d3g, a, da, d2a, d3a, b, db, d2b, d3b; + + s = X2S*x; + + if(s > s1) + XC(gga_x_rpbe_enhance)(p->func_aux[0], order, x, &a, &da, &d2a, &d3a); + if(s < s2) + XC(gga_x_wc_enhance) (p->func_aux[1], order, x, &b, &db, &d2b, &d3b); + + if(s < s1) + *f = b; + else if(s > s2) + *f = a; + else{ + g = cc[0] + s*(cc[1] + s*(cc[2] + s*(cc[3] + s*(cc[4] + s*cc[5])))); + *f = g*a + (1.0 - g)*b; + } + + if(order < 1) return; + + if(s < s1) + *dfdx = db; + else if(s > s2) + *dfdx = da; + else{ + dg = cc[1] + s*(2.0*cc[2] + s*(3.0*cc[3] + s*(4.0*cc[4] + s*5.0*cc[5]))); + dg *= X2S; + + *dfdx = dg*(a - b) + g*(da - db) + db; + } + + if(order < 2) return; + + if(s < s1) + *d2fdx2 = d2b; + else if(s > s2) + *d2fdx2 = d2a; + else{ + d2g = 2.0*cc[2] + s*(6.0*cc[3] + s*(12.0*cc[4] + s*20.0*cc[5])); + d2g *= X2S*X2S; + + *d2fdx2 = d2g*(a - b) + 2.0*dg*(da - db) + g*(d2a - d2b) + d2b; + } + + if(order < 3) return; + + if(s < s1) + *d3fdx3 = d3b; + else if(s > s2) + *d3fdx3 = d3a; + else{ + d3g = 6.0*cc[3] + s*(24.0*cc[4] + s*60.0*cc[5]); + d3g *= X2S*X2S*X2S; + + *d3fdx3 = d3g*(a - b) + 3.0*d2g*(da - db) + 3.0*dg*(d2a - d2b) + g*(d3a - d3b) + d3b; + } +} + + +#define func XC(gga_x_htbs_enhance) +#include "work_gga_x.c" + + +const XC(func_info_type) XC(func_info_gga_x_htbs) = { + XC_GGA_X_HTBS, + XC_EXCHANGE, + "Haas, Tran, Blaha, and Schwarz", + XC_FAMILY_GGA, + "P Haas, F Tran, P Blaha, and K Schwarz, Phys. Rev. B 83, 205117 (2011)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_htbs_init, + NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc/src/gga_x_ityh.c b/libxc/src/gga_x_ityh.c new file mode 100644 index 000000000..afe297066 --- /dev/null +++ b/libxc/src/gga_x_ityh.c @@ -0,0 +1,123 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_ITYH 529 /* short-range recipe for exchange GGA functionals */ + +typedef struct{ + int func_id; + xc_gga_enhancement_t enhancement_factor; +} gga_x_ityh_params; + +static void +gga_x_ityh_init(XC(func_type) *p) +{ + assert(p->params == NULL); + p->params = malloc(sizeof(gga_x_ityh_params)); + + /* random functional, mainly intended for testing */ + ((gga_x_ityh_params *) (p->params))->func_id = -1; + XC(gga_x_ityh_set_params)(p, XC_GGA_X_B88, 0.2); +} + +void +XC(gga_x_ityh_set_params)(XC(func_type) *p, int func_id, FLOAT omega) +{ + gga_x_ityh_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_x_ityh_params *) (p->params); + + p->cam_omega = omega; + + /* if func_id == -1 do nothing */ + if(func_id != -1 && params->func_id == -1){ /* intialize stuff */ + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc(sizeof(XC(func_type) )); + } + + if(func_id != -1 && params->func_id != func_id){ + if(params->func_id != -1) + XC(func_end) (p->func_aux[0]); + + params->func_id = func_id; + XC(func_init) (p->func_aux[0], params->func_id, p->nspin); + + params->enhancement_factor = XC(get_gga_enhancement_factor)(func_id); + } +} + + +#define HEADER 3 + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, FLOAT ds, + FLOAT *f, FLOAT *dfdx, FLOAT *lvrho) +{ + gga_x_ityh_params *params; + FLOAT e_f, e_dfdx, e_d2fdx2; + FLOAT k_GGA, K_GGA, aa, f_aa, df_aa, d2f_aa, d3f_aa; + FLOAT dk_GGAdr, dk_GGAdx, daadr, daadx; + + assert(p != NULL && p->params != NULL); + params = (gga_x_ityh_params *) (p->params); + + /* call enhancement factor */ + params->enhancement_factor(p->func_aux[0], order, x, &e_f, &e_dfdx, &e_d2fdx2, NULL); + + K_GGA = 2.0*X_FACTOR_C*e_f; + k_GGA = SQRT(9.0*M_PI/K_GGA)*CBRT(ds); + + aa = p->cam_omega/(2.0*k_GGA); + + XC(lda_x_attenuation_function)(XC_RSF_ERF, order, aa, &f_aa, &df_aa, &d2f_aa, &d3f_aa); + + *f = e_f*f_aa; + + if(order < 1) return; + + dk_GGAdr = k_GGA/(3.0*ds); + dk_GGAdx = -k_GGA*e_dfdx/(2.0*e_f); + + daadr = -aa*dk_GGAdr/k_GGA; + daadx = -aa*dk_GGAdx/k_GGA; + + *dfdx = e_dfdx*f_aa + e_f*df_aa*daadx; + *lvrho = e_f*df_aa*daadr; +} + +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_ityh) = { + XC_GGA_X_ITYH, + XC_EXCHANGE, + "Short-range recipe for exchange GGA functionals", + XC_FAMILY_GGA, + "H Iikura, T Tsuneda, T Yanai, and K Hirao, J. Chem. Phys. 115, 3540 (2001)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_ityh_init, + NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc/src/gga_x_kt.c b/libxc/src/gga_x_kt.c new file mode 100644 index 000000000..9f8ef4563 --- /dev/null +++ b/libxc/src/gga_x_kt.c @@ -0,0 +1,125 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_KT1 145 /* Keal and Tozer version 1 */ +#define XC_GGA_XC_KT2 146 /* Keal and Tozer version 2 */ + +#define HEADER 3 + +typedef struct{ + FLOAT gamma, delta; +} gga_x_kt_params; + + +static void +gga_x_kt_init(XC(func_type) *p) +{ + + assert(p!=NULL && p->params == NULL); + p->params = malloc(sizeof(gga_x_kt_params)); + + XC(gga_x_kt_set_params)(p, -0.006, 0.1); +} + + +void +XC(gga_x_kt_set_params)(XC(func_type) *p, FLOAT gamma, FLOAT delta) +{ + gga_x_kt_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_x_kt_params *) (p->params); + + params->gamma = gamma; + params->delta = delta; +} + + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, FLOAT ds, + FLOAT *f, FLOAT *dfdx, FLOAT *lvrho) +{ + FLOAT dd, n13, n43; + gga_x_kt_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_x_kt_params *) (p->params); + + n13 = CBRT(ds); + n43 = ds*n13; + dd = 1.0/(n43 + params->delta); + + *f = 1.0 - params->gamma/X_FACTOR_C * x*x * n43*dd; + + if(order < 1) return; + + *dfdx = - params->gamma/X_FACTOR_C * 2.0*x * n43*dd; + *lvrho = - params->gamma/X_FACTOR_C * x*x * (4.0/3.0)*n13 * params->delta * dd*dd; + + if(order < 2) return; + + /* to be done */ +} + + +#include "work_gga_x.c" + +static void +gga_xc_kt2_init(XC(func_type) *p) +{ + static int funcs_id [3] = {XC_LDA_X, XC_GGA_X_KT1, XC_LDA_C_VWN}; + static FLOAT funcs_coef[3] = {1.07173 - 1.0, 1.0, 0.576727}; + + XC(mix_init)(p, 3, funcs_id, funcs_coef); +} + + +const XC(func_info_type) XC(func_info_gga_x_kt1) = { + XC_GGA_X_KT1, + XC_EXCHANGE, + "Keal and Tozer, version 1", + XC_FAMILY_GGA, + "TW Keal and DJ Tozer, J. Chem. Phys. 119, 3015 (2003)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_kt_init, + NULL, NULL, + work_gga_x, + NULL +}; + + +const XC(func_info_type) XC(func_info_gga_xc_kt2) = { + XC_GGA_XC_KT2, + XC_EXCHANGE_CORRELATION, + "Keal and Tozer, version 2", + XC_FAMILY_GGA, + "TW Keal and DJ Tozer, J. Chem. Phys. 119, 3015 (2003)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_kt2_init, + NULL, NULL, NULL, + NULL +}; + + diff --git a/libxc/src/gga_x_lb.c b/libxc/src/gga_x_lb.c new file mode 100644 index 000000000..2372a6d8d --- /dev/null +++ b/libxc/src/gga_x_lb.c @@ -0,0 +1,202 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +/* Note: Do not forget to add a correlation (LDA) functional to the + LB94. + + Note 2: The 160 value is hardcoded in xc.h and libxc_master.F90 to + define XC_GGA_XC_LB to keep backwards compatibility. + +*/ +#define XC_GGA_X_LB 160 /* van Leeuwen & Baerends */ +#define XC_GGA_X_LBM 182 /* van Leeuwen & Baerends modified*/ + +typedef struct{ + int modified; /* shall we use a modified version */ + FLOAT threshold; /* when to start using the analytic form */ + FLOAT ip; /* ionization potential of the species */ + FLOAT qtot; /* total charge in the region */ + + FLOAT aa; /* the parameters of LB94 */ + FLOAT gamm; + + FLOAT alpha; + FLOAT beta; +} XC(gga_x_lb_params); + +/************************************************************************ + Calculates van Leeuwen Baerends functional +************************************************************************/ + +static void +gga_lb_init(XC(func_type) *p) +{ + XC(gga_x_lb_params) *params; + + assert(p->params == NULL); + + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_LDA_X, p->nspin); + + p->params = malloc(sizeof(XC(gga_x_lb_params))); + XC(gga_lb_set_params)(p, 0, 0.0, 1e-32, 0.0); + + params = (XC(gga_x_lb_params) *) (p->params); + switch(p->info->number){ + case XC_GGA_X_LB: + params->alpha = 1.0; + params->beta = 0.05; + break; + case XC_GGA_X_LBM: + params->alpha = 1.19; + params->beta = 0.01; + break; + } +} + + +void +XC(gga_lb_set_params)(XC(func_type) *p, int modified, FLOAT threshold, FLOAT ip, FLOAT qtot) +{ + XC(gga_x_lb_params) *params; + + assert(p!=NULL && p->params!=NULL); + params = (XC(gga_x_lb_params) *) (p->params); + + params->modified = modified; + params->threshold = threshold; + params->ip = ip; + params->qtot = qtot; + + if(params->modified){ + params->aa = (params->ip > 0.0) ? 2.0*SQRT(2.0*params->ip) : 0.5; + params->gamm = CBRT(params->qtot)/(2.0*params->aa); + }else{ + params->aa = 0.5; + params->gamm = 1.0; + } +} + + +void +XC(gga_lb_modified)(const XC(func_type) *func, int np, const FLOAT *rho, const FLOAT *sigma, FLOAT r, FLOAT *vrho) +{ + int ip, is; + FLOAT gdm, x; + + XC(gga_x_lb_params) *params; + + assert(func != NULL); + + assert(func->params != NULL); + params = (XC(gga_x_lb_params) *) (func->params); + + XC(lda_vxc)(func->func_aux[0], np, rho, vrho); + + for(ip=0; ipnspin; is++){ + vrho[is] *= params->alpha; + + gdm = SQRT(sigma[(is==0) ? 0 : 2]); + + if(params->modified == 0 || + (rho[is] > params->threshold && gdm > params->threshold)){ + FLOAT f; + + if(rho[is] <= func->info->min_dens) continue; + + x = gdm/POW(rho[is], 4.0/3.0); + + if(x < 300.0) /* the actual functional */ + f = -params->beta*x*x/(1.0 + 3.0*params->beta*x*ASINH(params->gamm*x)); + else /* asymptotic expansion */ + f = -x/(3.0*LOG(2.0*params->gamm*x)); + + vrho[is] += f * CBRT(rho[is]); + + }else if(r > 0.0){ + /* the aymptotic expansion of LB94 */ + x = r + (3.0/params->aa)* + LOG(2.0*params->gamm * params->aa * 1.0 / CBRT(params->qtot)); + + /* x = x + POW(qtot*EXP(-aa*r), 1.0/3.0)/(beta*aa*aa); */ + + vrho[is] -= 1.0/x; + } + } + /* increment pointers */ + rho += func->n_rho; + sigma += func->n_sigma; + + if(vrho != NULL) + vrho += func->n_vrho; + + } /* ip loop */ +} + + +static void +gga_x_lb(const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, + FLOAT *v2rho2, FLOAT *v2rhosigma, FLOAT *v2sigma2, + FLOAT *v3rho3, FLOAT *v3rho2sigma, FLOAT *v3rhosigma2, FLOAT *v3sigma3) +{ + XC(gga_lb_modified)(p, np, rho, sigma, 0.0, vrho); +} + + +XC(func_info_type) XC(func_info_gga_x_lb) = { + XC_GGA_X_LB, + XC_EXCHANGE, + "van Leeuwen & Baerends", + XC_FAMILY_GGA, + "R van Leeuwen and EJ Baerends, Phys. Rev. A. 49, 2421 (1994)", + XC_FLAGS_3D | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_lb_init, + NULL, + NULL, + gga_x_lb, + NULL +}; + +XC(func_info_type) XC(func_info_gga_x_lbm) = { + XC_GGA_X_LBM, + XC_EXCHANGE, + "van Leeuwen & Baerends modified", + XC_FAMILY_GGA, + "PRT Schipper, OV Gritsenko, SJA van Gisbergen, and EJ Baerends, J. Chem. Phys. 112, 1344 (2000)\n" + "R van Leeuwen and EJ Baerends, Phys. Rev. A. 49, 2421 (1994)", + XC_FLAGS_3D | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_lb_init, + NULL, + NULL, + gga_x_lb, + NULL +}; + diff --git a/libxc/src/gga_x_lg93.c b/libxc/src/gga_x_lg93.c new file mode 100644 index 000000000..6bf6254be --- /dev/null +++ b/libxc/src/gga_x_lg93.c @@ -0,0 +1,88 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include "util.h" + +#define XC_GGA_X_LG93 113 /* Lacks & Gordon 93 */ + +void XC(gga_x_lg93_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static const FLOAT ad = 1e-8, a4 = 29.790, a6 = 22.417; + static const FLOAT a8 = 12.119, a10 = 1570.1, a12 = 55.944; + static const FLOAT a2 = 4.94113918475214219939; /* (ad + 0.1234)/b, b = 0.024974 */ + static const FLOAT b = 0.024974; + + FLOAT ss, ss2, ss4, ss6, ss8, ss10; + FLOAT f0, f1, f2, df0, df1, df2, d2f0, d2f1, d2f2, d3f0, d3f1, d3f2; + + ss = X2S*x; ss2 = ss*ss; + ss4 = ss2*ss2; ss6 = ss4*ss2; + ss8 = ss6*ss2; ss10 = ss8*ss2; + + f0 = 1.0 + a2*ss2 + a4*ss4 + a6*ss6 + a8*ss8 + a10*ss10 + a12*ss2*ss10; + f1 = POW(f0, b); + f2 = 1.0 + ad*ss2; + + *f = f1/f2; + + if(order < 1) return; + + df0 = ss*(2.0*a2 + 4.0*a4*ss2 + 6.0*a6*ss4 + 8.0*a8*ss6 + 10.0*a10*ss8 + 12.0*a12*ss10); + df1 = b*df0*f1/f0; + df2 = 2.0*ss*ad; + + *dfdx = X2S*DFRACTION(f1, df1, f2, df2); + + if(order < 2) return; + + d2f0 = 2.0*1.0*a2 + 4.0*3.0*a4*ss2 + 6.0*5.0*a6*ss4 + 8.0*7.0*a8*ss6 + + 10.0*9.0*a10*ss8 + 12.0*11.0*a12*ss10; + d2f1 = b*((b - 1.0)*df0*df0 + f0*d2f0)*f1/(f0*f0); + d2f2 = 2.0*ad; + + *d2fdx2 = X2S*X2S*D2FRACTION(f1, df1, d2f1, f2, df2, d2f2); + + if(order < 3) return; + + d3f0 = ss*(4.0*3.0*2.0*a4 + 6.0*5.0*4.0*a6*ss2 + 8.0*7.0*6.0*a8*ss4 + + 10.0*9.0*8.0*a10*ss6 + 12.0*11.0*10.0*a12*ss8); + d3f1 = (b*(b - 1.0)*df0*((b - 2.0)*df0*df0 + 3.0*f0*d2f0) + b*f0*f0*d3f0)*f1/(f0*f0*f0); + d3f2 = 0.0; + + *d3fdx3 = X2S*X2S*X2S*D3FRACTION(f1, df1, d2f1, d3f1, f2, df2, d2f2, d3f2); +} + +#define func XC(gga_x_lg93_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_lg93) = { + XC_GGA_X_LG93, + XC_EXCHANGE, + "Lacks & Gordon 93", + XC_FAMILY_GGA, + "DJ Lacks and RG Gordon, Phys. Rev. A 47, 4681 (1993)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; + diff --git a/libxc/src/gga_x_lv_rpw86.c b/libxc/src/gga_x_lv_rpw86.c new file mode 100644 index 000000000..d01fbb318 --- /dev/null +++ b/libxc/src/gga_x_lv_rpw86.c @@ -0,0 +1,111 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_LV_RPW86 58 /* Berland and Hyldgaard */ + +static void +gga_x_lv_rpw86_init(XC(func_type) *p) +{ + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_GGA_X_RPW86, p->nspin); +} + + +void XC(gga_x_lv_rpw86_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + const FLOAT alpha=0.02178, beta=1.15, muLV=0.8491/9.0; + FLOAT ss, ss2, ss4, ss6, a, da, d2a, d3a; + FLOAT num1, den1, num2, den2; + FLOAT dnum1, dden1, dnum2, d2num1, d2den1, d2num2, d3den1, d3num2; + + ss = X2S*x; + ss2 = ss*ss; + ss4 = ss2*ss2; + ss6 = ss2*ss4; + + XC(gga_x_pw86_enhance)(p->func_aux[0], order, x, &a, &da, &d2a, &d3a); + + num1 = 1.0 + muLV*ss2; + den1 = 1.0 + alpha*ss6; + + num2 = alpha*ss6*a; + den2 = beta + alpha*ss6; + + *f = num1/den1 + num2/den2; + + if(order < 1) return; + da /= X2S; + + dnum1 = 2.0*muLV*ss; + dden1 = 6.0*alpha*ss*ss4; + + dnum2 = alpha*ss*ss4*(6.0*a + ss*da); + + *dfdx = DFRACTION(num1, dnum1, den1, dden1) + DFRACTION(num2, dnum2, den2, dden1); + *dfdx *= X2S; + + if(order < 2) return; + d2a /= X2S*X2S; + + d2num1 = 2.0*muLV; + d2den1 = 6.0*5.0*alpha*ss4; + + d2num2 = alpha*ss4*(30.0*a + ss*(12.0*da + ss*d2a)); + + *d2fdx2 = D2FRACTION(num1, dnum1, d2num1, den1, dden1, d2den1) + + D2FRACTION(num2, dnum2, d2num2, den2, dden1, d2den1); + *d2fdx2 *= X2S*X2S; + + if(order < 2) return; + d3a /= X2S*X2S*X2S; + + d3den1 = 6.0*5.0*4.0*alpha*ss*ss2; + d3num2 = alpha*ss*ss2*(120.0*a + ss*(90.0*da + ss*(18.0*d2a + ss*d3a))); + + *d3fdx3 = D3FRACTION(num1, dnum1, d2num1, 0.0, den1, dden1, d2den1, d3den1) + + D3FRACTION(num2, dnum2, d2num2, d3num2, den2, dden1, d2den1, d3den1); + *d3fdx3 *= X2S*X2S*X2S; + +} + +#define func XC(gga_x_lv_rpw86_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_lv_rpw86) = { + XC_GGA_X_LV_RPW86, + XC_EXCHANGE, + "Berland and Hyldgaard", + XC_FAMILY_GGA, + "K Berland and P Hyldgaard, arXiv:1309.1756 [cond-mat.mtrl-sci] (2013)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_lv_rpw86_init, + NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc/src/gga_x_mpbe.c b/libxc/src/gga_x_mpbe.c new file mode 100644 index 000000000..fe9dfea35 --- /dev/null +++ b/libxc/src/gga_x_mpbe.c @@ -0,0 +1,74 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_MPBE 122 /* Adamo & Barone modification to PBE */ + + +void XC(gga_x_mpbe_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static FLOAT a = 0.157; + static FLOAT c1 = 0.21951, c2 = -0.015; + + FLOAT ss, ss2, f0, df0, d2f0, d3f0, f1; + + ss = X2S*x; + ss2 = ss*ss; + + f1 = 1.0 + a*ss2; + f0 = ss2/f1; + *f = 1.0 + c1*f0 + c2*f0*f0; + + if(order < 1) return; + + df0 = DFRACTION(ss2, 2.0*ss, f1, 2.0*a*ss); + + *dfdx = X2S*(c1 + 2.0*c2*f0)*df0; + + if(order < 2) return; + + d2f0 = D2FRACTION(ss2, 2.0*ss, 2.0, f1, 2.0*a*ss, 2.0*a); + *d2fdx2 = X2S*X2S*((c1 + 2.0*c2*f0)*d2f0 + 2.0*c2*df0*df0); + + if(order < 3) return; + + d3f0 = D3FRACTION(ss2, 2.0*ss, 2.0, 0.0, f1, 2.0*a*ss, 2.0*a, 0.0); + *d3fdx3 = X2S*X2S*X2S*((c1 + 2.0*c2*f0)*d3f0 + 6.0*c2*df0*d2f0); +} + + +#define func XC(gga_x_mpbe_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_mpbe) = { + XC_GGA_X_MPBE, + XC_EXCHANGE, + "Adamo & Barone modification to PBE", + XC_FAMILY_GGA, + "C Adamo and V Barone, J. Chem. Phys. 116, 5933 (2002)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc/src/gga_x_n12.c b/libxc/src/gga_x_n12.c new file mode 100644 index 000000000..8d5a036c3 --- /dev/null +++ b/libxc/src/gga_x_n12.c @@ -0,0 +1,157 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_GGA_X_N12 82 /* N12 functional from Minnesota */ +#define XC_HYB_GGA_X_N12_SX 81 /* N12-SX functional from Minnesota */ + +static const FLOAT CC_N12[4][4] = { + { 1.00000e+00, 5.07880e-01, 1.68233e-01, 1.28887e-01}, + { 8.60211e-02, -1.71008e+01, 6.50814e+01, -7.01726e+01}, + {-3.90755e-01, 5.13392e+01, -1.66220e+02, 1.42738e+02}, + { 4.03611e-01, -3.44631e+01, 7.61661e+01, -2.41834e+00} +}; + +static const FLOAT CC_N12_SX[4][4] = { + { 6.81116e-01, 1.88858e+00, 1.78590e+00, 8.79456e-01}, + {-8.12270e-02, -1.08723e+00, -4.18682e+00, -3.00000e+01}, + { 5.36236e-01, -5.45678e+00, 3.00000e+01, 5.51105e+01}, + {-7.09913e-01, 1.30001e+01, -7.24877e+01, 2.98363e+01} +}; + + +static void +hyb_gga_x_n12_sx_init(XC(func_type) *p) +{ + p->cam_beta = 0.25; + p->cam_omega = 0.11; +} + + +static void +func(const XC(func_type) *pt, XC(gga_work_c_t) *r) +{ + int is; + const FLOAT (*CC)[4]; + const FLOAT sign[2] = {1.0, -1.0}, omega_x=2.5, gamma_x=0.004; + + FLOAT cnst_rs, opz, opz13, rss, x2; + FLOAT vx, vx2, vx3, ux_d, ux, ux2, ux3; + FLOAT pol1, pol2, pol3, pol4; + FLOAT ex, FN12; + + FLOAT drssdrs, drssdz, dvxdrss, duxdxs; + FLOAT dpol1, dpol2, dpol3, dpol4; + FLOAT dexdz, dexdrss, dFN12dux, dFN12dvx; + + CC = (pt->info->number == XC_GGA_X_N12) ? CC_N12 : CC_N12_SX; + cnst_rs = CBRT(4.0*M_PI/3.0); + + r->f = 0.0; + if(r->order >= 1) + r->dfdrs = r->dfdz = r->dfdxt = r->dfdxs[0] = r->dfdxs[1] = 0.0; + + /* now the spin-resolved part */ + for(is = 0; is < 2; is++){ + opz = 1.0 + sign[is]*r->zeta; + if(opz < pt->info->min_zeta) continue; + + opz13 = CBRT(opz); + rss = r->rs*M_CBRT2/opz13; + x2 = r->xs[is]*r->xs[is]; + + vx = 1.0/(1.0 + (cnst_rs/omega_x)*rss); + + ux_d = 1.0/(1.0 + gamma_x*x2); + ux = gamma_x*x2*ux_d; + + vx2 = vx*vx; vx3 = vx2*vx; + ux2 = ux*ux; ux3 = ux2*ux; + + pol1 = CC[0][0] + CC[0][1]*ux + CC[0][2]*ux2 + CC[0][3]*ux3; + pol2 = CC[1][0] + CC[1][1]*ux + CC[1][2]*ux2 + CC[1][3]*ux3; + pol3 = CC[2][0] + CC[2][1]*ux + CC[2][2]*ux2 + CC[2][3]*ux3; + pol4 = CC[3][0] + CC[3][1]*ux + CC[3][2]*ux2 + CC[3][3]*ux3; + + FN12 = pol1 + vx*pol2 + vx2*pol3 + vx3*pol4; + + ex = -X_FACTOR_C*opz/(2.0*cnst_rs*rss); + r->f += ex*FN12; + + if(r->order < 1) continue; + + drssdrs = M_CBRT2/opz13; + drssdz = -sign[is]*rss/(3.0*opz); + + dvxdrss = -(cnst_rs/omega_x)*vx*vx; + duxdxs = 2.0*gamma_x*r->xs[is]*ux_d*ux_d; + + dpol1 = CC[0][1] + 2.0*CC[0][2]*ux + 3.0*CC[0][3]*ux2; + dpol2 = CC[1][1] + 2.0*CC[1][2]*ux + 3.0*CC[1][3]*ux2; + dpol3 = CC[2][1] + 2.0*CC[2][2]*ux + 3.0*CC[2][3]*ux2; + dpol4 = CC[3][1] + 2.0*CC[3][2]*ux + 3.0*CC[3][3]*ux2; + + dFN12dux = dpol1 + vx*dpol2 + vx2*dpol3 + vx3*dpol4; + dFN12dvx = pol2 + 2.0*vx*pol3 + 3.0*vx2*pol4; + + dexdrss = -ex/rss; + dexdz = sign[is]*ex/opz; + + r->dfdrs += (dexdrss*FN12 + ex*dFN12dvx*dvxdrss)*drssdrs; + r->dfdz += dexdz*FN12 + (dexdrss*FN12 + ex*dFN12dvx*dvxdrss)*drssdz; + r->dfdxs[is] = ex*dFN12dux*duxdxs; + } +} + + +#include "work_gga_c.c" + + +XC(func_info_type) XC(func_info_gga_x_n12) = { + XC_GGA_X_N12, + XC_EXCHANGE, + "N12 functional of Minnesota", + XC_FAMILY_GGA, + "R Peverati and DG Truhlar, J. Chem. Theory Comput. 8, 2310-2319 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + NULL, + NULL, NULL, + work_gga_c, + NULL +}; + +XC(func_info_type) XC(func_info_hyb_gga_x_n12_sx) = { + XC_HYB_GGA_X_N12_SX, + XC_EXCHANGE, + "N12-SX functional of Minnesota", + XC_FAMILY_HYB_GGA, + "R Peverati and DG Truhlar, Phys. Chem. Chem. Phys. 14, 16187-16191 (2012)", + XC_FLAGS_3D | XC_FLAGS_HYB_CAM | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + hyb_gga_x_n12_sx_init, + NULL, NULL, + work_gga_c, + NULL +}; + diff --git a/libxc/src/gga_x_optx.c b/libxc/src/gga_x_optx.c new file mode 100644 index 000000000..8a86f5dad --- /dev/null +++ b/libxc/src/gga_x_optx.c @@ -0,0 +1,110 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_OPTX 110 /* Handy & Cohen OPTX 01 */ + +typedef struct{ + FLOAT a, b, gamma; +} gga_x_optx_params; + + +static void +gga_x_optx_init(XC(func_type) *p) +{ + assert(p!=NULL && p->params == NULL); + p->params = malloc(sizeof(gga_x_optx_params)); + + XC(gga_x_optx_set_params)(p, 1.05151, 1.43169/X_FACTOR_C, 0.006); +} + + +void +XC(gga_x_optx_set_params)(XC(func_type) *p, FLOAT a, FLOAT b, FLOAT gamma) +{ + gga_x_optx_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_x_optx_params *) (p->params); + + params->a = a; + params->b = b; + params->gamma = gamma; +} + + +void XC(gga_x_optx_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + FLOAT a, b, gamma; + FLOAT num, dnum, d2num, den, u, du, d2u, d3u; + + assert(p->params != NULL); + a = ((gga_x_optx_params *) (p->params))->a; + b = ((gga_x_optx_params *) (p->params))->b; + gamma = ((gga_x_optx_params *) (p->params))->gamma; + + num = gamma*x*x; + den = 1.0 + num; + u = num/den; + + *f = a + b*u*u; + + if(order < 1) return; + + dnum = 2.0*gamma*x; + du = DFRACTION(num, dnum, den, dnum); + + *dfdx = 2.0*b*u*du; + + if(order < 2) return; + + d2num = 2.0*gamma; + d2u = D2FRACTION(num, dnum, d2num, den, dnum, d2num); + + *d2fdx2 = 2.0*b*(du*du + u*d2u); + + if(order < 3) return; + + d3u = D3FRACTION(num, dnum, d2num, 0.0, den, dnum, d2num, 0.0); + + *d3fdx3 = 2.0*b*(3.0*du*d2u + u*d3u); +} + + +#define func XC(gga_x_optx_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_optx) = { + XC_GGA_X_OPTX, + XC_EXCHANGE, + "Handy & Cohen OPTX 01", + XC_FAMILY_GGA, + "NC Handy and AJ Cohen, Mol. Phys. 99, 403 (2001)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_optx_init, + NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc/src/gga_x_pbe.c b/libxc/src/gga_x_pbe.c new file mode 100644 index 000000000..55721c031 --- /dev/null +++ b/libxc/src/gga_x_pbe.c @@ -0,0 +1,514 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_PBE 101 /* Perdew, Burke & Ernzerhof exchange */ +#define XC_GGA_X_PBE_R 102 /* Perdew, Burke & Ernzerhof exchange (revised) */ +#define XC_GGA_X_PBE_SOL 116 /* Perdew, Burke & Ernzerhof exchange (solids) */ +#define XC_GGA_X_XPBE 123 /* xPBE reparametrization by Xu & Goddard */ +#define XC_GGA_X_PBE_JSJR 126 /* JSJR reparametrization by Pedroza, Silva & Capelle */ +#define XC_GGA_X_PBEK1_VDW 140 /* PBE reparametrization for vdW */ +#define XC_GGA_X_RGE2 142 /* Regularized PBE */ +#define XC_GGA_X_APBE 184 /* mu fixed from the semiclassical neutral atom */ +#define XC_GGA_X_PBEINT 60 /* PBE for hybrid interfaces */ +#define XC_GGA_X_PBE_TCA 59 /* PBE revised by Tognetti et al */ +#define XC_GGA_K_APBE 185 /* mu fixed from the semiclassical neutral atom */ +#define XC_GGA_K_TW1 187 /* Tran and Wesolowski set 1 (Table II) */ +#define XC_GGA_K_TW2 188 /* Tran and Wesolowski set 2 (Table II) */ +#define XC_GGA_K_TW3 189 /* Tran and Wesolowski set 3 (Table II) */ +#define XC_GGA_K_TW4 190 /* Tran and Wesolowski set 4 (Table II) */ +#define XC_GGA_K_REVAPBE 55 /* revised APBE */ +#define XC_GGA_K_APBEINT 54 /* interpolated version of APBE */ +#define XC_GGA_K_REVAPBEINT 53 /* interpolated version of REVAPBE */ +#define XC_GGA_X_PBE_MOL 49 /* Del Campo, Gazquez, Trickey and Vela (PBE-like) */ + +typedef struct{ + FLOAT kappa, mu; + + /* parameters only used for PBEint and similar functionals */ + FLOAT alpha, muPBE, muGE; +} gga_x_pbe_params; + + +static void +gga_x_pbe_init(XC(func_type) *p) +{ + static const FLOAT kappa[19] = { + 0.8040, /* original PBE */ + 1.245, /* PBE R */ + 0.8040, /* PBE sol */ + 0.91954, /* xPBE */ + 0.8040, /* PBE_JSJR */ + 1.0, /* PBEK1_VDW */ + 0.8040, /* RGE2 */ + 0.8040, /* APBE (X) */ + 0.8040, /* APBE (K) */ + 0.8209, /* TW1 */ + 0.6774, /* TW2 */ + 0.8438, /* TW3 */ + 0.8589, /* TW4 */ + 0.8040, /* PBEint */ + 1.227, /* PBE TCA */ + 1.245, /* revAPBE (K) */ + 0.8040, /* APBEINT (K) */ + 1.245, /* revAPBEINT (K) */ + 0.8040 /* PBEmol */ + }; + + static const FLOAT mu[19] = { + 0.2195149727645171, /* PBE: mu = beta*pi^2/3, beta = 0.06672455060314922 */ + 0.2195149727645171, /* PBE rev: as PBE */ + 10.0/81.0, /* PBE sol */ + 0.23214, /* xPBE */ + 0.046*M_PI*M_PI/3.0, /* PBE_JSJR */ + 0.2195149727645171, /* PBEK1_VDW: as PBE */ + 10.0/81.0, /* RGE2 */ + 0.260, /* APBE (X) */ + 0.23889, /* APBE (K) */ + 0.2335, /* TW1 */ + 0.2371, /* TW2 */ + 0.2319, /* TW3 */ + 0.2309, /* TW4 */ + 0.0, /* PBEint (to be set later) */ + 0.2195149727645171, /* PBE TCA: as PBE */ + 0.23889, /* revAPBE (K) */ + 0.0, /* APBEINT (K) (to be set later) */ + 0.0, /* REVAPBEINT (K) (to be set later) */ + 0.27583 /* PBEmol */ + }; + + gga_x_pbe_params *params; + + assert(p!=NULL && p->params == NULL); + p->params = malloc(sizeof(gga_x_pbe_params)); + params = (gga_x_pbe_params *) (p->params); + + params->alpha = 0.0; + params->muPBE = 0.0; + params->muGE = 0.0; + + switch(p->info->number){ + case XC_GGA_X_PBE: p->func = 0; break; + case XC_GGA_X_PBE_R: p->func = 1; break; + case XC_GGA_X_PBE_SOL: p->func = 2; break; + case XC_GGA_X_XPBE: p->func = 3; break; + case XC_GGA_X_PBE_JSJR: p->func = 4; break; + case XC_GGA_X_PBEK1_VDW: p->func = 5; break; + case XC_GGA_X_RGE2: p->func = 6; break; + case XC_GGA_X_APBE: p->func = 7; break; + case XC_GGA_K_APBE: p->func = 8; break; + case XC_GGA_K_TW1: p->func = 9; break; + case XC_GGA_K_TW2: p->func = 10; break; + case XC_GGA_K_TW3: p->func = 11; break; + case XC_GGA_K_TW4: p->func = 12; break; + case XC_GGA_X_PBEINT: { + p->func = 13; + params->alpha = 0.197; + params->muPBE = 0.2195149727645171; + params->muGE = 10.0/81.0; + break; + } + case XC_GGA_X_PBE_TCA: p->func = 14; break; + case XC_GGA_K_REVAPBE: p->func = 15; break; + case XC_GGA_K_APBEINT: { + p->func = 16; + params->alpha = 5.0/3.0; + params->muPBE = 0.23899; + params->muGE = 5.0/27.0; + break; + } + case XC_GGA_K_REVAPBEINT: { /* equal to the previous one */ + p->func = 17; + params->alpha = 5.0/3.0; + params->muPBE = 0.23899; + params->muGE = 5.0/27.0; + break; + } + case XC_GGA_X_PBE_MOL: p->func = 18; break; + default:{ + fprintf(stderr, "Internal error in gga_x_pbe\n"); + exit(1); + }} + + XC(gga_x_pbe_set_params)(p, kappa[p->func], mu[p->func]); +} + + +void +XC(gga_x_pbe_set_params)(XC(func_type) *p, FLOAT kappa, FLOAT mu) +{ + gga_x_pbe_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_x_pbe_params *) (p->params); + + params->kappa = kappa; + params->mu = mu; +} + + +void XC(gga_x_pbe_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + gga_x_pbe_params *params; + FLOAT kappa, auxmu, mu, dmu, d2mu, d3mu, ss, ss2, f0, df0, d2f0, d3f0; + + assert(p->params != NULL); + params = (gga_x_pbe_params *) (p->params); + + kappa = params->kappa; + + ss = X2S*x; + ss2 = ss*ss; + + if(params->alpha != 0.0){ /* PBEint and related functionals */ + auxmu = 1.0 + params->alpha*ss2; + mu = params->muGE + (params->muPBE - params->muGE) * params->alpha*ss2/auxmu; + }else + mu = params->mu; + + f0 = kappa + mu*ss2; + if(p->info->number == XC_GGA_X_RGE2) + f0 += mu*mu*ss2*ss2/kappa; + + *f = 1.0 + kappa*(1.0 - kappa/f0); + + if(order < 1) return; + + if(params->alpha != 0.0){ /* PBEint and related functionals */ + dmu = (params->muPBE - params->muGE) * 2.0*params->alpha*ss/(auxmu*auxmu); + }else + dmu = 0.0; + + df0 = 2.0*mu*ss + dmu*ss2; + if(p->info->number == XC_GGA_X_RGE2) + df0 += 4.0*mu*mu*ss2*ss/kappa; + + *dfdx = X2S*kappa*kappa*df0/(f0*f0); + + if(order < 2) return; + + if(params->alpha != 0.0) /* PBEint and related functionals */ + d2mu = (params->muPBE - params->muGE) * + 2.0*params->alpha*(1.0 - 3.0*params->alpha*ss2)/(auxmu*auxmu*auxmu); + else + d2mu = 0.0; + + d2f0 = 2.0*mu + 4.0*dmu*ss + d2mu*ss2; + if(p->info->number == XC_GGA_X_RGE2) + d2f0 += 4.0*3.0*mu*mu*ss2/kappa; + + *d2fdx2 = -X2S*X2S*kappa*kappa*(2.0*df0*df0 - d2f0*f0)/(f0*f0*f0); + + if(order < 3) return; + + if(params->alpha != 0.0) /* PBEint and related functionals */ + d3mu = (params->muPBE - params->muGE) * + 24.0*params->alpha*params->alpha*ss*(-1.0 + params->alpha*ss2)/(auxmu*auxmu*auxmu*auxmu); + else + d3mu = 0.0; + + d3f0 = 6.0*dmu + 6.0*ss*d2mu + ss2*d3mu; + if(p->info->number == XC_GGA_X_RGE2) + d3f0 += 4.0*3.0*2.0*mu*mu*ss/kappa; + + *d3fdx3 = X2S*X2S*X2S*kappa*kappa*(6.0*df0*df0*df0 - 6.0*f0*df0*d2f0 + f0*f0*d3f0)/(f0*f0*f0*f0); + +} + + +#define func XC(gga_x_pbe_enhance) +#include "work_gga_x.c" + + +const XC(func_info_type) XC(func_info_gga_x_pbe) = { + XC_GGA_X_PBE, + XC_EXCHANGE, + "Perdew, Burke & Ernzerhof", + XC_FAMILY_GGA, + "JP Perdew, K Burke, and M Ernzerhof, Phys. Rev. Lett. 77, 3865 (1996)\n" + "JP Perdew, K Burke, and M Ernzerhof, Phys. Rev. Lett. 78, 1396(E) (1997)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_pbe_r) = { + XC_GGA_X_PBE_R, + XC_EXCHANGE, + "Revised PBE from Zhang & Yang", + XC_FAMILY_GGA, + "Y Zhang and W Yang, Phys. Rev. Lett 80, 890 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_pbe_sol) = { + XC_GGA_X_PBE_SOL, + XC_EXCHANGE, + "Perdew, Burke & Ernzerhof SOL", + XC_FAMILY_GGA, + "JP Perdew, et al, Phys. Rev. Lett. 100, 136406 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_xpbe) = { + XC_GGA_X_XPBE, + XC_EXCHANGE, + "Extended PBE by Xu & Goddard III", + XC_FAMILY_GGA, + "X Xu and WA Goddard III, J. Chem. Phys. 121, 4068 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_pbe_jsjr) = { + XC_GGA_X_PBE_JSJR, + XC_EXCHANGE, + "Reparametrized PBE by Pedroza, Silva & Capelle", + XC_FAMILY_GGA, + "LS Pedroza, AJR da Silva, and K. Capelle, Phys. Rev. B 79, 201106(R) (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_pbek1_vdw) = { + XC_GGA_X_PBEK1_VDW, + XC_EXCHANGE, + "Reparametrized PBE for vdW", + XC_FAMILY_GGA, + "J Klimes, DR Bowler, and A Michaelides, J. Phys.: Condens. Matter 22, 022201 (2010)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_rge2) = { + XC_GGA_X_RGE2, + XC_EXCHANGE, + "Regularized PBE", + XC_FAMILY_GGA, + "A Ruzsinszky, GI Csonka, and G Scuseria, J. Chem. Theory Comput. 5, 763 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_apbe) = { + XC_GGA_X_APBE, + XC_EXCHANGE, + "mu fixed from the semiclassical neutral atom", + XC_FAMILY_GGA, + "LA Constantin, E Fabiano, S Laricchia, and F Della Sala, Phys. Rev. Lett. 106, 186406 (2011)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_pbeint) = { + XC_GGA_X_PBEINT, + XC_EXCHANGE, + "PBE for hybrid interfaces", + XC_FAMILY_GGA, + "E. Fabiano, LA Constantin, and F. Della Sala, Phys. Rev. B 82, 113104 (2010)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-12, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_x, + NULL +}; + + +const XC(func_info_type) XC(func_info_gga_x_pbe_tca) = { + XC_GGA_X_PBE_TCA, + XC_EXCHANGE, + "PBE revised by Tognetti et al", + XC_FAMILY_GGA, + "V Tognetti, P Cortona, and C Adamo, Chem. Phys. Lett. 460, 536-539 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_x, + NULL +}; + + +#define XC_KINETIC_FUNCTIONAL +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_k_apbe) = { + XC_GGA_K_APBE, + XC_KINETIC, + "mu fixed from the semiclassical neutral atom", + XC_FAMILY_GGA, + "LA Constantin, E Fabiano, S Laricchia, and F Della Sala, Phys. Rev. Lett. 106, 186406 (2011)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_revapbe) = { + XC_GGA_K_REVAPBE, + XC_KINETIC, + "revised APBE", + XC_FAMILY_GGA, + "LA Constantin, E Fabiano, S Laricchia, and F Della Sala, Phys. Rev. Lett. 106, 186406 (2011)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_tw1) = { + XC_GGA_K_TW1, + XC_KINETIC, + "Tran and Wesolowski set 1 (Table II)", + XC_FAMILY_GGA, + "F Tran and TA Wesolowski, Int. J. Quant. Chem. 89, 441-446 (2002)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_tw2) = { + XC_GGA_K_TW2, + XC_KINETIC, + "Tran and Wesolowski set 1 (Table II)", + XC_FAMILY_GGA, + "F Tran and TA Wesolowski, Int. J. Quant. Chem. 89, 441-446 (2002)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_tw3) = { + XC_GGA_K_TW3, + XC_KINETIC, + "Tran and Wesolowski set 1 (Table II)", + XC_FAMILY_GGA, + "F Tran and TA Wesolowski, Int. J. Quant. Chem. 89, 441-446 (2002)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_tw4) = { + XC_GGA_K_TW4, + XC_KINETIC, + "Tran and Wesolowski set 1 (Table II)", + XC_FAMILY_GGA, + "F Tran and TA Wesolowski, Int. J. Quant. Chem. 89, 441-446 (2002)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_apbeint) = { + XC_GGA_K_APBEINT, + XC_KINETIC, + "interpolated version of APBE", + XC_FAMILY_GGA, + "S Laricchia, E Fabiano, LA Constantin, and F Della Sala, J. Chem. Theory Comput. 7, 2439-2451 (2011)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_k_revapbeint) = { + XC_GGA_K_REVAPBEINT, + XC_KINETIC, + "interpolated version of REVAPBE", + XC_FAMILY_GGA, + "S Laricchia, E Fabiano, LA Constantin, and F Della Sala, J. Chem. Theory Comput. 7, 2439-2451 (2011)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_k, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_pbe_mol) = { + XC_GGA_X_PBE_MOL, + XC_EXCHANGE, + "Reparametrized PBE by del Campo, Gazquez, Trickey & Vela", + XC_FAMILY_GGA, + "JM del Campo, JL Gazquez, SB Trickey, and A Vela, J. Chem. Phys. 136, 104108 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pbe_init, + NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc/src/gga_x_pbea.c b/libxc/src/gga_x_pbea.c new file mode 100644 index 000000000..a0d108964 --- /dev/null +++ b/libxc/src/gga_x_pbea.c @@ -0,0 +1,66 @@ +/* + Copyright (C) 2008 Georg Madsen + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_PBEA 121 /* Madsen (PBE-like) */ + +/* PBEA: see PBE for more details */ +static inline void +func(const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static const FLOAT kappa = 0.8040; + static const FLOAT mu = 0.00361218645365094697; + /* hard-coded alpha*/ + static const FLOAT alpha = 0.52; + + FLOAT f0, df0, d2f0; + + f0 = 1.0 + mu*x*x/(alpha*kappa); + *f = 1.0 + kappa*(1.0 - POW(f0, -alpha)); + + if(order < 1) return; + + df0 = 2.0*mu*x/(alpha*kappa); + + *dfdx = alpha*kappa*df0*POW(f0, -(alpha + 1.0)); + + if(order < 2) return; + + d2f0 = 2.0*mu/(alpha*kappa); + *d2fdx2 = alpha*kappa*POW(f0, -alpha - 1.0)* + (d2f0 - (alpha + 1.0)*df0*df0/f0); +} + +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_pbea) = { + XC_GGA_X_PBEA, + XC_EXCHANGE, + "Madsen 07", + XC_FAMILY_GGA, + "G Madsen, Phys. Rev. B 75, 195108 (2007)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + NULL, NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc/src/gga_x_pw86.c b/libxc/src/gga_x_pw86.c new file mode 100644 index 000000000..4c43c20f9 --- /dev/null +++ b/libxc/src/gga_x_pw86.c @@ -0,0 +1,123 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_PW86 108 /* Perdew & Wang 86 */ +#define XC_GGA_X_RPW86 144 /* refitted Perdew & Wang 86 */ +#define XC_GGA_K_FR_PW86 515 /* Fuentealba & Reyes (PW86 version) */ + +typedef struct{ + FLOAT aa, bb, cc; +} gga_x_pw86_params; + +static void +gga_x_pw86_init(XC(func_type) *p) +{ + switch(p->info->number){ + case XC_GGA_X_RPW86: p->func = 1; break; + case XC_GGA_K_FR_PW86: p->func = 2; break; + default: p->func = 0; /* original PW86 */ + } +} + +inline void +XC(gga_x_pw86_enhance)(const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static const gga_x_pw86_params par[3] = { + { 1.296, 14.0, 0.2}, + {15*0.1234, 17.33, 0.163}, + { 2.208, 9.27, 0.2} + }; + FLOAT ss, ss2, ss4, DD, dDD, d2DD, d3DD, aux; + + /* sanity check: do we have a valid functional */ + assert(p->func==0 || p->func==1 || p->func==2); + + ss = X2S*x; + ss2 = ss*ss; + ss4 = ss2*ss2; + + DD = 1.0 + par[p->func].aa*ss2 + par[p->func].bb*ss4 + par[p->func].cc*ss4*ss2; + aux = POW(DD, 1.0/15.0); + *f = aux; + + if(order < 1) return; + + dDD = ss*(2.0*par[p->func].aa + 4.0*par[p->func].bb*ss2 + 6.0*par[p->func].cc*ss4); + + *dfdx = X2S*dDD*aux/(15.0*DD); + + if(order < 2) return; + + d2DD = 2.0*par[p->func].aa + 4.0*3.0*par[p->func].bb*ss2 + 6.0*5.0*par[p->func].cc*ss4; + *d2fdx2 = X2S*X2S*aux*(15.0*DD*d2DD - 14.0*dDD*dDD)/(225.0*DD*DD); + + if(order < 3) return; + + d3DD = 4.0*3.0*2.0*par[p->func].bb*ss + 6.0*5.0*4.0*par[p->func].cc*ss*ss2; + *d3fdx3 = X2S*X2S*X2S*aux*(406.0*dDD*dDD*dDD - 630.0*DD*dDD*d2DD + 225.0*DD*DD*d3DD)/(3375.0*DD*DD*DD); +} + +#define func XC(gga_x_pw86_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_pw86) = { + XC_GGA_X_PW86, + XC_EXCHANGE, + "Perdew & Wang 86", + XC_FAMILY_GGA, + "JP Perdew and Y Wang, Phys. Rev. B 33, 8800 (1986)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pw86_init, NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_rpw86) = { + XC_GGA_X_RPW86, + XC_EXCHANGE, + "Refitted Perdew & Wang 86", + XC_FAMILY_GGA, + "ED Murray, K Lee and DC Langreth, J. Chem. Theory Comput. 5, 2754-2762 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pw86_init, NULL, NULL, + work_gga_x, + NULL +}; + +#define XC_KINETIC_FUNCTIONAL +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_k_fr_pw86) = { + XC_GGA_K_FR_PW86, + XC_KINETIC, + "Fuentealba & Reyes (PW86 version)", + XC_FAMILY_GGA, + "P Fuentealba and O Reyes, Chem. Phys. Lett. 232, 31-34 (1995)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_pw86_init, NULL, NULL, + work_gga_k, + NULL +}; diff --git a/libxc/src/gga_x_pw91.c b/libxc/src/gga_x_pw91.c new file mode 100644 index 000000000..d816e3005 --- /dev/null +++ b/libxc/src/gga_x_pw91.c @@ -0,0 +1,206 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_PW91 109 /* Perdew & Wang 91 */ +#define XC_GGA_X_MPW91 119 /* Modified form of PW91 by Adamo & Barone */ +#define XC_GGA_K_LC94 521 /* Lembarki & Chermette */ + +typedef struct{ + FLOAT a, b, c, d, f, alpha, expo; +} gga_x_pw91_params; + + +static void +gga_x_pw91_init(XC(func_type) *p) +{ + assert(p!=NULL && p->params == NULL); + p->params = malloc(sizeof(gga_x_pw91_params)); + + switch(p->info->number){ + case XC_GGA_X_PW91: + /* b_PW91 ~ 0.0042 */ + XC(gga_x_pw91_set_params)(p, 0.19645, 7.7956, 0.2743, -0.1508, 0.004, 100.0, 4.0); + break; + case XC_GGA_X_MPW91: + /* + === from nwchem source (xc_xmpw91.F) === + C. Adamo confirmed that there is a typo in the JCP paper + b_mPW91 is 0.00426 instead of 0.0046 + + also the power seems to be 3.72 and not 3.73 + */ + XC(gga_x_pw91_set_params2)(p, 0.00426, 100.0, 3.72); + break; + case XC_GGA_K_LC94: + XC(gga_x_pw91_set_params)(p, 0.093907, 76.320, 0.26608, -0.0809615, 0.000057767, 100.0, 4.0); + break; + default: + fprintf(stderr, "Internal error in gga_x_pw91\n"); + exit(1); + } +} + +void +XC(gga_x_pw91_set_params)(XC(func_type) *p, FLOAT a, FLOAT b, FLOAT c, FLOAT d, FLOAT f, FLOAT alpha, FLOAT expo) +{ + gga_x_pw91_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_x_pw91_params *) (p->params); + + params->a = a; + params->b = b; + params->c = c; + params->d = d; + params->f = f; + params->alpha = alpha; + params->expo = expo; +} + +void +XC(gga_x_pw91_set_params2)(XC(func_type) *p, FLOAT bt, FLOAT alpha, FLOAT expo) +{ + FLOAT beta; + FLOAT a, b, c, d, f; + + beta = 5.0*POW(36.0*M_PI,-5.0/3.0); + a = 6.0*bt/X2S; + b = 1.0/X2S; + c = bt/(X_FACTOR_C*X2S*X2S); + d = -(bt - beta)/(X_FACTOR_C*X2S*X2S); + f = 1.0e-6/(X_FACTOR_C*POW(X2S, expo)); + + XC(gga_x_pw91_set_params)(p, a, b, c, d, f, alpha, expo); +} + + +void XC(gga_x_pw91_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + + gga_x_pw91_params *params; + FLOAT ss, ss2, ss4, aux1, aux2; + FLOAT f1, df1, d2f1, d3f1, f2, df2, d2f2, d3f2, f3, df3, d2f3, d3f3, f4, df4, d2f4, d3f4; + + assert(p != NULL && p->params != NULL); + params = (gga_x_pw91_params *) (p->params); + + ss = X2S*x; + ss2 = ss*ss; + ss4 = POW(ss, params->expo); + + f1 = params->d*EXP(-params->alpha*ss2); + f2 = params->a*ASINH(params->b*ss); + f3 = (params->c + f1)*ss2 - params->f*ss4; + f4 = 1.0 + ss*f2 + params->f*ss4; + + *f = 1.0 + f3/f4; + + if(order < 1) return; + + aux1 = 1.0 + params->b*params->b*ss2; + aux2 = SQRT(aux1); + + df1 = -2.0*params->alpha*ss*f1; + df2 = params->a*params->b/aux2; + df3 = 2.0*ss*(params->c + f1) + ss2*df1 - params->expo*params->f*ss4/ss; + df4 = f2 + ss*df2 + params->expo*params->f*ss4/ss; + + *dfdx = (df3*f4 - f3*df4)/(f4*f4); + *dfdx *= X2S; + + if(order < 2) return; + + d2f1 = -2.0*params->alpha*(f1 + ss*df1); + d2f2 = -params->a*params->b*params->b*params->b*ss/(aux1*aux2); + d2f3 = 2.0*(params->c + f1) + 4.0*ss*df1 + ss2*d2f1 - + params->expo*(params->expo - 1.0)*params->f*ss4/ss2; + d2f4 = 2.0*df2 + ss*d2f2 + + params->expo*(params->expo - 1.0)*params->f*ss4/ss2; + + *d2fdx2 = (2.0*f3*df4*df4 + d2f3*f4*f4 - f4*(2.0*df3*df4 + f3*d2f4))/(f4*f4*f4); + *d2fdx2 *= X2S*X2S; + + if(order < 3) return; + + d3f1 = -2.0*params->alpha*(2.0*df1 + ss*d2f1); + d3f2 = params->a*params->b*params->b*params->b*(2.0*params->b*params->b*ss2 - 1.0)/(aux1*aux1*aux2); + d3f3 = 6.0*df1 + 6.0*ss*d2f1 + ss2*d3f1 - + params->expo*(params->expo - 1.0)*(params->expo - 2.0)*params->f*ss4/(ss*ss2); + d3f4 = 3.0*d2f2 + ss*d3f2 + + params->expo*(params->expo - 1.0)*(params->expo - 2.0)*params->f*ss4/(ss*ss2); + + *d3fdx3 = (-6.0*f3*df4*df4*df4 + 6.0*f4*df4*(df3*df4 + f3*d2f4) + f4*f4*f4*d3f3 - f4*f4*(3.0*df4*d2f3 + 3.0*df3*d2f4 + f3*d3f4))/(f4*f4*f4*f4); + *d3fdx3 *= X2S*X2S*X2S; +} + +#define func XC(gga_x_pw91_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_pw91) = { + XC_GGA_X_PW91, + XC_EXCHANGE, + "Perdew & Wang 91", + XC_FAMILY_GGA, + "JP Perdew, in Proceedings of the 21st Annual International Symposium on the Electronic Structure of Solids, ed. by P Ziesche and H Eschrig (Akademie Verlag, Berlin, 1991), p. 11.\n" + "JP Perdew, JA Chevary, SH Vosko, KA Jackson, MR Pederson, DJ Singh, and C Fiolhais, Phys. Rev. B 46, 6671 (1992)\n" + "JP Perdew, JA Chevary, SH Vosko, KA Jackson, MR Pederson, DJ Singh, and C Fiolhais, Phys. Rev. B 48, 4978(E) (1993)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-25, 1e-25, 0.0, 1e-32, + gga_x_pw91_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_mpw91) = { + XC_GGA_X_MPW91, + XC_EXCHANGE, + "mPW91 of Adamo & Barone", + XC_FAMILY_GGA, + "C Adamo and V Barone, J. Chem. Phys. 108, 664 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-31, 1e-31, 0.0, 1e-32, + gga_x_pw91_init, + NULL, NULL, + work_gga_x, + NULL +}; + +#define XC_KINETIC_FUNCTIONAL +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_k_lc94) = { + XC_GGA_K_LC94, + XC_KINETIC, + "Lembarki & Chermette", + XC_FAMILY_GGA, + "A Lembarki and H Chermette, Phys. Rev. A 50, 5328-5331 (1994)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-30, 1e-30, 0.0, 1e-32, + gga_x_pw91_init, + NULL, NULL, + work_gga_k, + NULL +}; diff --git a/libxc/src/gga_x_q2d.c b/libxc/src/gga_x_q2d.c new file mode 100644 index 000000000..f0147092a --- /dev/null +++ b/libxc/src/gga_x_q2d.c @@ -0,0 +1,101 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_Q2D 48 /* Chiodo et al */ + +static void +gga_x_q2D_init(XC(func_type) *p) +{ + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_GGA_X_PBE_SOL, p->nspin); + +} + +void XC(gga_x_q2d_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + static const FLOAT cc = 100, c1 = 0.5217; + + FLOAT ss, ss2, ss4, ss6, ss_2, a, da, d2a, d3a; + FLOAT f1, df1, d2f1, d3f1, f2, df2, d2f2, d3f2; + + ss = X2S*x; + ss2 = ss*ss; + ss4 = ss2*ss2; + ss6 = ss2*ss4; + ss_2 = SQRT(ss); + + XC(gga_x_pbe_enhance)(p->func_aux[0], order, x, &a, &da, &d2a, &d3a); + + f1 = a*(cc - ss4) + c1*ss*ss2*ss_2*(1.0 + ss2); + f2 = cc + ss6; + *f = f1/f2; + + if(order < 1) return; + + da /= X2S; + + df1 = da*(cc - ss4) - 4.0*a*ss*ss2 + c1*ss2*ss_2*(7.0 + 11.0*ss2)/2.0; + df2 = 6.0*ss*ss4; + + *dfdx = X2S*DFRACTION(f1, df1, f2, df2); + + if(order < 2) return; + + d2a /= X2S*X2S; + + d2f1 = d2a*(cc - ss4) - 8.0*da*ss*ss2 - 12.0*a*ss2 + c1*ss*ss_2*(35.0 + 99.0*ss2)/4.0; + d2f2 = 30.0*ss4; + + *d2fdx2 = X2S*X2S*D2FRACTION(f1, df1, d2f1, f2, df2, d2f2); + + if(order < 3) return; + + d3a /= X2S*X2S*X2S; + + d3f1 = d3a*(cc - ss4) - 12.0*ss*ss2*d2a - 36.0*da*ss2 - 24.0*a*ss + 21.0*c1*ss_2*(5.0 + 33.0*ss2)/8.0; + d3f2 = 120.0*ss*ss2; + + *d3fdx3 = X2S*X2S*X2S*D3FRACTION(f1, df1, d2f1, d3f1, f2, df2, d2f2, d3f2); +} + +#define func XC(gga_x_q2d_enhance) +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_q2d) = { + XC_GGA_X_Q2D, + XC_EXCHANGE, + "Chiodo et al", + XC_FAMILY_GGA, + "L Chiodo, LA Constantin, E Fabiano, and F Della Sala, Phys. Rev. Lett. 108, 126402 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-23, 0.0, 1e-32, + gga_x_q2D_init, + NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc/src/gga_x_rpbe.c b/libxc/src/gga_x_rpbe.c new file mode 100644 index 000000000..c86baa44c --- /dev/null +++ b/libxc/src/gga_x_rpbe.c @@ -0,0 +1,104 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_RPBE 117 /* Hammer, Hansen & Norskov (PBE-like) */ + + +typedef struct{ + FLOAT kappa, mu; +} gga_x_rpbe_params; + + +static void +gga_x_rpbe_init(XC(func_type) *p) +{ + assert(p!=NULL && p->params == NULL); + p->params = malloc(sizeof(gga_x_rpbe_params)); + + /* same parameters as standard PBE */ + XC(gga_x_rpbe_set_params)(p, 0.8040, 0.2195149727645171); +} + + +void +XC(gga_x_rpbe_set_params)(XC(func_type) *p, FLOAT kappa, FLOAT mu) +{ + gga_x_rpbe_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_x_rpbe_params *) (p->params); + + params->kappa = kappa; + params->mu = mu; +} + + +/* RPBE: see PBE for more details */ +void XC(gga_x_rpbe_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + FLOAT kappa, mu, f0, df0, d2f0, d3f0; + + assert(p->params != NULL); + kappa = ((gga_x_rpbe_params *) (p->params))->kappa; + mu = ((gga_x_rpbe_params *) (p->params))->mu*X2S*X2S; + + f0 = EXP(-mu*x*x/kappa); + *f = 1.0 + kappa*(1.0 - f0); + + if(order < 1) return; + + df0 = -2.0*x*mu/kappa*f0; + + *dfdx = -kappa*df0; + + if(order < 2) return; + + d2f0 = -2.0*mu*f0*(kappa - 2.0*x*x*mu)/(kappa*kappa); + *d2fdx2 = -kappa*d2f0; + + if(order < 3) return; + + d3f0 = 4.0*mu*mu*f0*x*(3.0*kappa - 2.0*mu*x*x)/(kappa*kappa*kappa); + *d3fdx3 = -kappa*d3f0; +} + + +#define func XC(gga_x_rpbe_enhance) +#include "work_gga_x.c" + + +const XC(func_info_type) XC(func_info_gga_x_rpbe) = { + XC_GGA_X_RPBE, + XC_EXCHANGE, + "Hammer, Hansen, and Nørskov", + XC_FAMILY_GGA, + "B Hammer, LB Hansen and JK Nørskov, Phys. Rev. B 59, 7413 (1999)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_rpbe_init, + NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc/src/gga_x_sfat.c b/libxc/src/gga_x_sfat.c new file mode 100644 index 000000000..0c95221d0 --- /dev/null +++ b/libxc/src/gga_x_sfat.c @@ -0,0 +1,129 @@ +/* + Copyright (C) 2013 Rolf Wuerdemann, M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_SFAT 530 /* short-range recipe for exchange GGA functionals */ +/* see + * Savin, Flad, Int. Jour. of Quant. Chem. Vol. 56, 327-332 (1995) + * Akinaga, Ten-no, Chem. Phys. Lett. 462 (2008) 348-351 + */ + +typedef struct{ + int func_id; + xc_gga_enhancement_t enhancement_factor; +} gga_x_sfat_params; + +static void +gga_x_sfat_init(XC(func_type) *p) +{ + assert(p->params == NULL); + p->params = malloc(sizeof(gga_x_sfat_params)); + + /* random functional, mainly intended for testing */ + ((gga_x_sfat_params *) (p->params))->func_id = -1; + XC(gga_x_sfat_set_params)(p, XC_GGA_X_B88, 0.44); +} + +void +XC(gga_x_sfat_set_params)(XC(func_type) *p, int func_id, FLOAT omega) +{ + gga_x_sfat_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_x_sfat_params *) (p->params); + + p->cam_omega = omega; + + /* if func_id == -1 do nothing */ + if(func_id != -1 && params->func_id == -1){ /* intialize stuff */ + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc(sizeof(XC(func_type) )); + } + + if(func_id != -1 && params->func_id != func_id){ + if(params->func_id != -1) + XC(func_end) (p->func_aux[0]); + + params->func_id = func_id; + XC(func_init) (p->func_aux[0], params->func_id, p->nspin); + + params->enhancement_factor = XC(get_gga_enhancement_factor)(func_id); + } +} + + +#define HEADER 3 + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, FLOAT ds, + FLOAT *f, FLOAT *dfdx, FLOAT *lvrho) +{ + gga_x_sfat_params *params; + FLOAT e_f, e_dfdx, e_d2fdx2; + FLOAT k_GGA, K_GGA, aa, f_aa, df_aa, d2f_aa, d3f_aa; + FLOAT dk_GGAdr, dk_GGAdx, daadr, daadx; + + assert(p != NULL && p->params != NULL); + params = (gga_x_sfat_params *) (p->params); + + /* call enhancement factor */ + params->enhancement_factor(p->func_aux[0], order, x, &e_f, &e_dfdx, &e_d2fdx2, NULL); + + K_GGA = 2.0*X_FACTOR_C*e_f; + k_GGA = SQRT(9.0*M_PI/K_GGA)*CBRT(ds); + + aa = p->cam_omega/(2.0*k_GGA); + + XC(lda_x_attenuation_function)(XC_RSF_YUKAWA, order, aa, &f_aa, &df_aa, &d2f_aa, &d3f_aa); + + *f = e_f*f_aa; + + if(order < 1) return; + + dk_GGAdr = k_GGA/(3.0*ds); + dk_GGAdx = -k_GGA*e_dfdx/(2.0*e_f); + + daadr = -aa*dk_GGAdr/k_GGA; + daadx = -aa*dk_GGAdx/k_GGA; + + *dfdx = e_dfdx*f_aa + e_f*df_aa*daadx; + *lvrho = e_f*df_aa*daadr; +} + +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_sfat) = { + XC_GGA_X_SFAT, + XC_EXCHANGE, + "Short-range recipe for exchange GGA functionals - Yukawa", + XC_FAMILY_GGA, + "A Savin, H-J Flad, J. of Quant. Chem. 56, 327-332 (1995)\n" + "Y Akinaga, S Ten-no, Chem. Phys. Lett. 462, 348-351 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_sfat_init, + NULL, NULL, + work_gga_x, + NULL +}; + diff --git a/libxc/src/gga_x_sogga11.c b/libxc/src/gga_x_sogga11.c new file mode 100644 index 000000000..9bbe2980b --- /dev/null +++ b/libxc/src/gga_x_sogga11.c @@ -0,0 +1,140 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_SOGGA11 151 /* Second-order generalized gradient approximation 2011 */ +#define XC_HYB_GGA_X_SOGGA11_X 426 /* Hybrid based on SOGGA11 form */ + +static void +gga_x_sogga11_init(XC(func_type) *p) +{ + switch(p->info->number){ + case XC_GGA_X_SOGGA11: + p->func = 0; + break; + case XC_HYB_GGA_X_SOGGA11_X: + p->func = 1; + p->cam_alpha = 0.4015; + break; + default: + fprintf(stderr, "Internal error in gga_x_sogga11\n"); + exit(1); + } +} + +void XC(gga_x_sogga11_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + const FLOAT kappa = 0.552; + const FLOAT mu = 10.0/81.0; + const FLOAT alpha = mu*X2S*X2S/kappa; + const FLOAT aa[][6] = { + {0.50000, -2.95535, 15.7974, -91.1804, 96.2030, 0.18683}, /* SOGGA11 */ + {0.50000, 5.37406, -5.94160, 12.7962, -18.8521, 8.78551} /* SOGGA11-X */ + }; + const FLOAT bb[][6] = { + {0.50000, 3.50743, -12.9523, 49.7870, -33.2545, -11.1396}, /* SOGGA11 */ + {0.50000, -4.82197, 5.40713, -4.10014, -6.27393, 6.62678} /* SOGGA11-X */ + }; + + FLOAT f0, df0, d2f0, d3f0, den0, den1, t0, dt0, d2t0, d3t0, t1, dt1, d2t1, d3t1, f1, df1, d2f1, d3f1; + + den0 = -1.0/(1.0 + alpha*x*x); + f0 = 1.0 + den0; + den1 = -EXP(-alpha*x*x); + f1 = 1.0 + den1; + + t0 = aa[p->func][0] + f0*(aa[p->func][1] + f0*(aa[p->func][2] + f0*(aa[p->func][3] + f0*(aa[p->func][4] + f0*aa[p->func][5])))); + t1 = bb[p->func][0] + f1*(bb[p->func][1] + f1*(bb[p->func][2] + f1*(bb[p->func][3] + f1*(bb[p->func][4] + f1*bb[p->func][5])))); + + *f = t0; + *f += t1; + + if(order < 1) return; + + df0 = 2.0*alpha*x*den0*den0; + df1 = -2.0*alpha*x*den1; + + dt0 = aa[p->func][1] + f0*(2.0*aa[p->func][2] + f0*(3.0*aa[p->func][3] + f0*(4.0*aa[p->func][4] + f0*5.0*aa[p->func][5]))); + dt1 = bb[p->func][1] + f1*(2.0*bb[p->func][2] + f1*(3.0*bb[p->func][3] + f1*(4.0*bb[p->func][4] + f1*5.0*bb[p->func][5]))); + + *dfdx = dt0*df0; + *dfdx += dt1*df1; + + if(order < 2) return; + + d2f0 = 2.0*alpha*(3.0*alpha*x*x - 1.0)*den0*den0*den0; + d2f1 = 2.0*alpha*(2.0*alpha*x*x - 1.0)*den1; + + d2t0 = 2.0*aa[p->func][2] + f0*(3.0*2.0*aa[p->func][3] + f0*(4.0*3.0*aa[p->func][4] + f0*5.0*4.0*aa[p->func][5])); + d2t1 = 2.0*bb[p->func][2] + f1*(3.0*2.0*bb[p->func][3] + f1*(4.0*3.0*bb[p->func][4] + f1*5.0*4.0*bb[p->func][5])); + + *d2fdx2 = dt0*d2f0 + df0*df0*d2t0; + *d2fdx2 += dt1*d2f1 + df1*df1*d2t1; + + if(order < 3) return; + + d3f0 = 24.0*alpha*alpha*x*(alpha*x*x - 1.0)*den0*den0*den0*den0; + d3f1 = -4.0*alpha*alpha*x*(2.0*alpha*x*x - 3.0)*den1; + + d3t0 = 3.0*2.0*aa[p->func][3] + f0*(4.0*3.0*2.0*aa[p->func][4] + f0*5.0*4.0*3.0*aa[p->func][5]); + d3t1 = 3.0*2.0*bb[p->func][3] + f1*(4.0*3.0*2.0*bb[p->func][4] + f1*5.0*4.0*3.0*bb[p->func][5]); + + *d3fdx3 = 3.0*df0*d2f0*d2t0 + dt0*d3f0 + df0*df0*df0*d3t0; + *d3fdx3 += 3.0*df1*d2f1*d2t1 + dt1*d3f1 + df1*df1*df1*d3t1; +} + + +#define func XC(gga_x_sogga11_enhance) +#include "work_gga_x.c" + + +const XC(func_info_type) XC(func_info_gga_x_sogga11) = { + XC_GGA_X_SOGGA11, + XC_EXCHANGE, + "Second-order generalized gradient approximation 2011", + XC_FAMILY_GGA, + "R Peverati, Y Zhao, and DG Truhlar, J. Phys. Chem. Lett. 2, 1991-1997 (2011)\n" + "http://comp.chem.umn.edu/mfm/index.html", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-31, 1e-32, 0.0, 1e-32, + gga_x_sogga11_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_hyb_gga_x_sogga11_x) = { + XC_HYB_GGA_X_SOGGA11_X, + XC_EXCHANGE, + "Hybrid based on SOGGA11 form", + XC_FAMILY_HYB_GGA, + "R Peverati and DG Truhlar, J. Chem. Phys. 135, 191102 (2011)\n" + "http://comp.chem.umn.edu/mfm/index.html", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-31, 1e-32, 0.0, 1e-32, + gga_x_sogga11_init, + NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc/src/gga_x_ssb_sw.c b/libxc/src/gga_x_ssb_sw.c new file mode 100644 index 000000000..e5b81ed0e --- /dev/null +++ b/libxc/src/gga_x_ssb_sw.c @@ -0,0 +1,190 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_SSB_SW 90 /* Swarta, Sola and Bickelhaupt correction to PBE */ +#define XC_GGA_X_SSB 91 /* Swarta, Sola and Bickelhaupt */ +#define XC_GGA_X_SSB_D 92 /* Swarta, Sola and Bickelhaupt dispersion */ + +typedef struct{ + FLOAT A, B, C, D, E; +} gga_x_ssb_sw_params; + + +static void +gga_x_ssb_sw_init(XC(func_type) *p) +{ + + assert(p!=NULL && p->params == NULL); + p->params = malloc(sizeof(gga_x_ssb_sw_params)); + + XC(gga_x_ssb_sw_set_params)(p, 1.0515, 0.191458, 0.254443, 0.180708, 4.036674); +} + + +void +XC(gga_x_ssb_sw_set_params)(XC(func_type) *p, FLOAT A, FLOAT B, FLOAT C, FLOAT D, FLOAT E) +{ + gga_x_ssb_sw_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_x_ssb_sw_params *) (p->params); + + params->A = A; + params->B = B; + params->C = C; + params->D = D; + params->E = E; +} + + +void XC(gga_x_ssb_sw_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + FLOAT ss, ss2, ss4, num1, dnum1, d2num1, num2, dnum2, d2num2, den1, dden1, d2den1, den2, dden2, d2den2, d3den2; + gga_x_ssb_sw_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_x_ssb_sw_params *) (p->params); + + ss = X2S*x; + ss2 = ss*ss; + ss4 = ss2*ss2; + + num1 = params->B*ss2; + den1 = 1.0 + params->C*ss2; + + num2 = -params->D*ss2; + den2 = 1.0 + params->E*ss4; + + *f = params->A + num1/den1 +num2/den2; + + if(order < 1) return; + + dnum1 = 2.0*params->B*ss; + dden1 = 2.0*params->C*ss; + + dnum2 = -2.0*params->D*ss; + dden2 = 4.0*params->E*ss*ss2; + + *dfdx = DFRACTION(num1, dnum1, den1, dden1) + DFRACTION(num2, dnum2, den2, dden2); + *dfdx *= X2S; + + if(order < 2) return; + + d2num1 = 2.0*params->B; + d2den1 = 2.0*params->C; + + d2num2 = -2.0*params->D; + d2den2 = 4.0*3.0*params->E*ss2; + + *d2fdx2 = D2FRACTION(num1, dnum1, d2num1, den1, dden1, d2den1) + + D2FRACTION(num2, dnum2, d2num2, den2, dden2, d2den2); + *d2fdx2 *= X2S*X2S; + + if(order < 3) return; + + d3den2 = 4.0*3.0*2.0*params->E*ss; + + *d3fdx3 = D3FRACTION(num1, dnum1, d2num1, 0.0, den1, dden1, d2den1, 0.0) + + D3FRACTION(num2, dnum2, d2num2, 0.0, den2, dden2, d2den2, d3den2); + *d3fdx3 *= X2S*X2S*X2S; +} + + +#define func XC(gga_x_ssb_sw_enhance) +#include "work_gga_x.c" + +static void +gga_x_ssb_init(XC(func_type) *p) +{ + static const FLOAT u = -1.205643, F = 0.995010, B = 0.137574; + + static int funcs_id [3] = {XC_LDA_X, XC_GGA_X_SSB_SW, XC_GGA_X_KT1}; + static FLOAT funcs_coef[3] = {-1.0, 1.0, 1.0}; + + XC(mix_init)(p, 3, funcs_id, funcs_coef); + + XC(gga_x_ssb_sw_set_params)(p->func_aux[1], 1.071769, 0.137574, 0.187883, 0.137574*(1.0 + 1.205643), 6.635315); + XC(gga_x_kt_set_params)(p->func_aux[2], u*F*X_FACTOR_C*B*(X2S*X2S), 0.1); +} + + +static void +gga_x_ssb_d_init(XC(func_type) *p) +{ + static const FLOAT u = -0.749940, F = 0.949488, B = 0.197465; + + static int funcs_id [3] = {XC_LDA_X, XC_GGA_X_SSB_SW, XC_GGA_X_KT1}; + static FLOAT funcs_coef[3] = {-1.0, 1.0, 1.0}; + + XC(mix_init)(p, 3, funcs_id, funcs_coef); + + XC(gga_x_ssb_sw_set_params)(p->func_aux[1], 1.079966, 0.197465, 0.272729, 0.197465*(1.0 + 0.749940), 5.873645); + XC(gga_x_kt_set_params)(p->func_aux[2], u*F*X_FACTOR_C*B*(X2S*X2S), 0.1); +} + + +const XC(func_info_type) XC(func_info_gga_x_ssb_sw) = { + XC_GGA_X_SSB_SW, + XC_EXCHANGE, + "Swarta, Sola and Bickelhaupt correction to PBE", + XC_FAMILY_GGA, + "M Swart, M Sola, and FM Bickelhaupt, J. Comp. Meth. Sci. Engin. 9, 69 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_ssb_sw_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_ssb) = { + XC_GGA_X_SSB, + XC_EXCHANGE, + "Swarta, Sola and Bickelhaupt", + XC_FAMILY_GGA, + "M Swart, M Sola, and FM Bickelhaupt, J. Chem. Phys. 131, 094103 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_ssb_init, + NULL, NULL, + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_ssb_d) = { + XC_GGA_X_SSB_D, + XC_EXCHANGE, + "Swarta, Sola and Bickelhaupt dispersion", + XC_FAMILY_GGA, + "M Swart, M Sola, and FM Bickelhaupt, J. Chem. Phys. 131, 094103 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_ssb_d_init, + NULL, NULL, + NULL, + NULL +}; + + diff --git a/libxc/src/gga_x_vmt.c b/libxc/src/gga_x_vmt.c new file mode 100644 index 000000000..40da01383 --- /dev/null +++ b/libxc/src/gga_x_vmt.c @@ -0,0 +1,201 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_VMT_PBE 71 /* Vela, Medel, and Trickey with mu = mu_PBE */ +#define XC_GGA_X_VMT_GE 70 /* Vela, Medel, and Trickey with mu = mu_GE */ +#define XC_GGA_X_VMT84_PBE 69 /* VMT{8,4} with constraint satisfaction with mu = mu_PBE */ +#define XC_GGA_X_VMT84_GE 68 /* VMT{8,4} with constraint satisfaction with mu = mu_GE */ + +typedef struct{ + FLOAT mu; + FLOAT alpha; +} gga_x_vmt_params; + + +static void +gga_x_vmt_init(XC(func_type) *p) +{ + gga_x_vmt_params *params; + + assert(p != NULL && p->params == NULL); + p->params = malloc(sizeof(gga_x_vmt_params)); + params = (gga_x_vmt_params *) (p->params); + + switch(p->info->number){ + case XC_GGA_X_VMT_PBE: + params->mu = 0.2195149727645171; + params->alpha = 0.002762; + break; + case XC_GGA_X_VMT_GE: + params->mu = 10.0/81.0; + params->alpha = 0.001553; + break; + case XC_GGA_X_VMT84_PBE: + params->mu = 0.2195149727645171; + params->alpha = 0.000074; + break; + case XC_GGA_X_VMT84_GE: + params->mu = 10.0/81.0; + params->alpha = 0.000023; + break; + default: + fprintf(stderr, "Internal error in gga_x_vmt\n"); + exit(1); + } +} + + +void XC(gga_x_vmt_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + FLOAT mu, alpha, ss, ss2, ss4, ss6, ss8, ss10, f0, g0, dg0, d2g0, d3g0; + FLOAT num1, den1, dnum1, dden1, d2num1, d2den1, d3num1; + + assert(p->params != NULL); + mu = ((gga_x_vmt_params *) (p->params))->mu; + alpha = ((gga_x_vmt_params *) (p->params))->alpha; + + ss = X2S*x; + ss2 = ss*ss; + ss4 = ss2*ss2; + + f0 = EXP(-alpha*ss2); + num1 = mu*ss2*f0; + den1 = 1.0 + mu*ss2; + + *f = 1.0 + num1/den1; + + if(p->info->number == XC_GGA_X_VMT84_PBE || p->info->number == XC_GGA_X_VMT84_GE){ + g0 = EXP(-alpha*ss4); + + *f += (1.0 - g0)/ss2 - 1.0 + g0; + } + + if(order < 1) return; + + ss6 = ss2*ss4; + + dnum1 = -2.0*mu*ss*(alpha*ss2 - 1.0)*f0; + dden1 = 2.0*mu*ss; + + *dfdx = DFRACTION(num1, dnum1, den1, dden1); + + if(p->info->number == XC_GGA_X_VMT84_PBE || p->info->number == XC_GGA_X_VMT84_GE){ + dg0 = -4.0*alpha*ss*ss2*g0; + + *dfdx += DFRACTION(1.0 - g0, -dg0, ss2, 2.0*ss) + dg0; + } + *dfdx *= X2S; + + if(order < 2) return; + + ss8 = ss2*ss6; + ss10 = ss2*ss8; + + d2num1 = 2.0*mu*(1.0 + alpha*ss2*(2.0*alpha*ss2 - 5.0))*f0; + d2den1 = 2.0*mu; + + *d2fdx2 = D2FRACTION(num1, dnum1, d2num1, den1, dden1, d2den1); + + if(p->info->number == XC_GGA_X_VMT84_PBE || p->info->number == XC_GGA_X_VMT84_GE){ + d2g0 = 4.0*alpha*ss2*(4.0*alpha*ss4 - 3.0)*g0; + + *d2fdx2 += D2FRACTION(1.0 - g0, -dg0, -d2g0, ss2, 2.0*ss, 2.0) + d2g0; + } + *d2fdx2 *= X2S*X2S; + + if(order < 3) return; + + d3num1 = -4.0*alpha*mu*ss*(6.0 + alpha*ss2*(2.0*alpha*ss2 - 9.0))*f0; + + *d3fdx3 = D3FRACTION(num1, dnum1, d2num1, d3num1, den1, dden1, d2den1, 0.0); + + if(p->info->number == XC_GGA_X_VMT84_PBE || p->info->number == XC_GGA_X_VMT84_GE){ + d3g0 = -8.0*alpha*ss*(3.0 + 2.0*alpha*ss4*(4.0*alpha*ss4 - 9.0))*g0; + + *d3fdx3 += D3FRACTION(1.0 - g0, -dg0, -d2g0, -d3g0, ss2, 2.0*ss, 2.0, 0.0) + d3g0; + } + *d3fdx3 *= X2S*X2S*X2S; +} + + +#define func XC(gga_x_vmt_enhance) +#include "work_gga_x.c" + + +const XC(func_info_type) XC(func_info_gga_x_vmt_pbe) = { + XC_GGA_X_VMT_PBE, + XC_EXCHANGE, + "Vela, Medel, and Trickey with mu = mu_PBE", + XC_FAMILY_GGA, + "A. Vela, V. Medel, and S. B. Trickey, J. Chem. Phys. 130, 244103 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_vmt_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_vmt_ge) = { + XC_GGA_X_VMT_GE, + XC_EXCHANGE, + "Vela, Medel, and Trickey with mu = mu_GE", + XC_FAMILY_GGA, + "A. Vela, V. Medel, and S. B. Trickey, J. Chem. Phys. 130, 244103 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_vmt_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_vmt84_pbe) = { + XC_GGA_X_VMT84_PBE, + XC_EXCHANGE, + "VMT{8,4} with constraint satisfaction with mu = mu_PBE", + XC_FAMILY_GGA, + "A Vela, JC Pacheco-Kato, JL Gazquez, JM del Campo, and SB Trickey, J. Chem. Phys. 136, 144115 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_vmt_init, + NULL, NULL, + work_gga_x, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_x_vmt84_ge) = { + XC_GGA_X_VMT84_PBE, + XC_EXCHANGE, + "VMT{8,4} with constraint satisfaction with mu = mu_GE", + XC_FAMILY_GGA, + "A Vela, JC Pacheco-Kato, JL Gazquez, JM del Campo, and SB Trickey, J. Chem. Phys. 136, 144115 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_vmt_init, + NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc/src/gga_x_wc.c b/libxc/src/gga_x_wc.c new file mode 100644 index 000000000..bba7d7029 --- /dev/null +++ b/libxc/src/gga_x_wc.c @@ -0,0 +1,94 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +#define XC_GGA_X_WC 118 /* Wu & Cohen */ + +static FLOAT wc_mu, wc_c; + +static void +gga_x_wc_init(XC(func_type) *p_) +{ + wc_mu = 0.2195149727645171; + wc_c = (146.0/2025.0)*(4.0/9.0) - (73.0/405.0)*(2.0/3.0) + (wc_mu - 10.0/81.0); +} + +void XC(gga_x_wc_enhance) + (const XC(func_type) *p, int order, FLOAT x, + FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3) +{ + const FLOAT kappa = 0.8040; + + FLOAT ss, ss2; + FLOAT aux1, aux2, f0, df0, d2f0, d3f0, dd; + + ss = X2S*x; + ss2 = ss*ss; + + aux1 = wc_mu - 10.0/81.0; + aux2 = EXP(-ss2); + + f0 = kappa + 10.0/81.0*ss2 + ss2*aux1*aux2 + LOG(1.0 + wc_c*ss2*ss2); + *f = 1.0 + kappa*(1.0 - kappa/f0); + + if(order < 1) return; + + dd = 1.0 + wc_c*ss2*ss2; + df0 = 20.0/81.0*ss + 2.0*ss*aux1*aux2*(1.0 - ss2) + 4.0*wc_c*ss*ss2/dd; + + *dfdx = kappa*kappa*df0/(f0*f0); + *dfdx *= X2S; + + if(order < 2) return; + + d2f0 = 20.0/81.0 + 2.0*aux1*aux2*(1.0 - 5.0*ss2 + 2.0*ss2*ss2) + - 4.0*wc_c*ss2*(dd - 4.0)/(dd*dd); + + *d2fdx2 = -kappa*kappa*(2.0*df0*df0 - d2f0*f0)/(f0*f0*f0); + *d2fdx2 *= X2S*X2S; + + if(order < 3) return; + + d3f0 = -4.0*aux1*aux2*ss*(6.0 - 9.0*ss2 + 2.0*ss2*ss2) + + 8.0*wc_c*ss*(3.0 + wc_c*ss2*ss2*(wc_c*ss2*ss2 - 12.0))/(dd*dd*dd); + + *d3fdx3 = kappa*kappa*(6.0*df0*df0*df0 - 6.0*f0*df0*d2f0 + f0*f0*d3f0)/(f0*f0*f0*f0); + *d3fdx3 *= X2S*X2S*X2S; + +} + +#define func XC(gga_x_wc_enhance) +#include "work_gga_x.c" + + +const XC(func_info_type) XC(func_info_gga_x_wc) = { + XC_GGA_X_WC, + XC_EXCHANGE, + "Wu & Cohen", + XC_FAMILY_GGA, + "Z Wu and RE Cohen, Phys. Rev. B 73, 235116 (2006)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_wc_init, + NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc/src/gga_x_wpbeh.c b/libxc/src/gga_x_wpbeh.c new file mode 100644 index 000000000..a4a8e8b85 --- /dev/null +++ b/libxc/src/gga_x_wpbeh.c @@ -0,0 +1,557 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_X_WPBEH 524 /* short-range version of the PBE */ + +typedef struct{ + FLOAT omega; +} gga_x_wpbeh_params; + +static void +gga_x_wpbeh_init(XC(func_type) *p) +{ + assert(p->params == NULL); + p->params = malloc(sizeof(gga_x_wpbeh_params)); + + /* The default value is actually PBEh */ + XC(gga_x_wpbeh_set_params)(p, 0.0); +} + +void +XC(gga_x_wpbeh_set_params)(XC(func_type) *p, FLOAT omega) +{ + gga_x_wpbeh_params *params; + + assert(p != NULL && p->params != NULL); + params = (gga_x_wpbeh_params *) (p->params); + + params->omega = omega; +} + + +#define HEADER 3 + +/* This implementation follows the one from espresso, that, in turn, + follows the one of the thesis of Jochen Heyd. Analytic derivatives + are only implemented in espresso though. These implementations can + be found in: + + vasp: xclib_grad.F, MODULE wpbe, and in particular SUBROUTINE EXCHWPBE_R + espresso: flib/functionals.f90, SUBROUTINE wpbe_analy_erfc_approx_grad + + very important details can be found in references: + + *) J Heyd, GE Scuseria, and M Ernzerhof, J. Chem. Phys. 118, 8207 (2003) + Erratum: J. Chem. Phys. 124, 219906 (2006). + *) M Ernzerhof and JP Perdew, J. Chem. Phys. 109, 3313 (1998) + *) J Heyd and GE Scuseria, J. Chem. Phys. 120, 7274 (2004) + + Also the whole mess with the rescaling of s is explained in + + *) TM Henderson, AF Izmaylov, G Scalmani, and GE Scuseria, J. Chem. Phys. 131, 044108 (2009) +*/ + +static inline void +s_scaling(int version, int order, FLOAT s1, FLOAT *s2, FLOAT *ds2ds1) +{ + /* parameters for the re-scaling of s */ + static const FLOAT strans=8.3, smax=8.572844, sconst=18.79622316; + static const FLOAT s0=8.572844, p4=0.615482, p5=1.136921, p6=-0.449154, + q4=1.229195, q5=-0.0269253, q6=0.313417, q7=-0.0508314, q8=0.0175739; + + FLOAT expms1, expmsmax, s12, s14, num, den, dnum, dden; + + switch(version){ + case 0: /* no scaling */ + *s2 = s1; + break; + + case 1: /* original scaling of Heyd */ + *s2 = (s1 < strans) ? s1 : smax - sconst/(s1*s1); + break; + + case 2: /* first version of the scaling by TM Henderson, apparently used by Gaussian */ + if(s1 < 1.0) + *s2 = s1; + else if(s1 > 15.0) + *s2 = smax; + else{ + expms1 = EXP(-s1); + expmsmax = EXP(-smax); + *s2 = s1 - LOG(1.0 + expmsmax/expms1); + } + break; + + case 3: /* second version of the scaling by TM Henderson */ + expms1 = EXP(-s1); + expmsmax = EXP(-smax); + *s2 = s1 - (1.0 - expms1)*LOG(1.0 + expmsmax/expms1); + break; + + case 4: /* appendix of JCP 128, 194105 (2008) */ + s12 = s1*s1; + s14 = s12*s12; + + num = s1*(1.0 + s14*(p4 + s1*(p5 + s1*(p6 + s1*q8*s0)))); + den = 1.0 + s14*(q4 + s1*(q5 + s1*(q6 + s1*(q7 + s1*q8)))); + + *s2 = num/den; + break; + + default: + fprintf(stderr, "Internal error in gga_x_hse\n"); + exit(1); + } + + if(order < 1) return; + + switch(version){ + case 0: + *ds2ds1 = 1.0; + break; + + case 1: + *ds2ds1 = (s1 < strans) ? 1.0 : 2.0*sconst/(s1*s1*s1); + break; + + case 2: + if(s1 < 1.0) + *ds2ds1 = 1.0; + else if(s1 > 15.0) + *ds2ds1 = 0.0; + else + *ds2ds1 = expms1/(expms1 + expmsmax); + break; + + case 3: + *ds2ds1 = expms1*(1.0 + expmsmax)/(expms1 + expmsmax) - expms1*LOG(1.0 + expmsmax/expms1); + + case 4: /* appendix of JCP 128, 194105 (2008) */ + dnum = 1.0 + s14*(5.0*p4 + s1*(6.0*p5 + s1*(7.0*p6 + s1*8.0*q8*s0))); + dden = s12*s1*(4.0*q4 + s1*(5.0*q5 + s1*(6.0*q6 + s1*(7.0*q7 + s1*8.0*q8)))); + + *ds2ds1 = (dnum*den - num*dden)/(den*den); + } +} + +static inline void +func(const XC(func_type) *p, int order, FLOAT x, FLOAT ds, + FLOAT *f, FLOAT *dfdx, FLOAT *lvrho) +{ + static const FLOAT AA=1.0161144, BB=-0.37170836, CC=-0.077215461, DD=0.57786348, EE=-0.051955731; + static const FLOAT m89=-8.0/9.0; + + /* Cutoff criterion below which to use polynomial expansion */ + static const FLOAT EGscut=0.08, wcutoff=14, expfcutoff=700.0; + + FLOAT omega, kF, ww, ww2, ww3, ww4, ww5, ww6, ww7, ww8, dwdrho; + FLOAT ss, ss2, ss3, ss4, ss5, ss6, dssdx; + FLOAT AA2, AA3, AA12, AA32, AA52; + FLOAT DHs, DHs2, DHs3, DHs4, DHs72, DHs92; + FLOAT eb1, f94Hs2_A, DHsw, DHsw2, DHsw52, DHsw72; + FLOAT Hsbw, Hsbw2, Hsbw3, Hsbw4, Hsbw12, Hsbw32, Hsbw52, Hsbw72; + FLOAT DHsbw, DHsbw2, DHsbw3, DHsbw4, DHsbw5, DHsbw12, DHsbw32, DHsbw52, DHsbw72, DHsbw92; + FLOAT HsbwA94, HsbwA942, HsbwA943, HsbwA945, HsbwA9412; + FLOAT H, F, EG, dHds, dFds, dEGds, dDHsds, dDHswdw, dHsbwds, dHsbwdw; + FLOAT term1, term2, term3, term4, term5, t10, piexperf, expei; + FLOAT dterm1ds, dterm2ds, dterm3ds, dterm4ds, dterm5ds, dterm1dw, dterm3dw, dterm4dw, dterm5dw; + FLOAT dt10ds, dt10dw, dpiexperfds, dpiexperfdw, dexpeids, dexpeidw; + + assert(p->params != NULL); + omega = ((gga_x_wpbeh_params *)(p->params))->omega; + + /* Note that kF has a 6 and not a 3 as it should in principle + be. This is because the HSE formula, if one would take the papers + seriously, does not fulfill the spin sum-rule. This is probably + an oversight from them. So, we have to choose, either a 6 or a 3. + + Nwchem seems to have the factor of 6, but VASP and espresso have + a 3. This would amount to rescaling omega by a factor of + cbrt(2). We follow the quantum chemistry community and put the 6. + */ + kF = POW(6.0*M_PI*M_PI*ds, 1.0/3.0); + ww = omega/kF; + ww2 = ww*ww; ww3 = ww*ww2; ww4 = ww*ww3; ww5 = ww*ww4; ww6 = ww*ww5; ww7 = ww*ww6; ww8 = ww*ww7; + + /* Rescaling the s values to ensure the Lieb-Oxford bound */ + s_scaling(2, order, X2S*x, &ss, &dssdx); + ss2 = ss*ss; + ss3 = ss*ss2; + ss4 = ss*ss3; + ss5 = ss*ss4; + ss6 = ss*ss5; + + if(order >= 1){ + dwdrho = -ww/(3.0*ds); + dssdx *= X2S; + } + + AA2 = AA*AA; + AA3 = AA2*AA; + AA12 = SQRT(AA); + AA32 = AA12*AA; + AA52 = AA32*AA; + + /* first let us calculate H(s) */ + { + static const FLOAT Ha1=0.00979681, Ha2=0.0410834, Ha3=0.187440, Ha4=0.00120824, Ha5=0.0347188; + FLOAT Hnum, Hden, dHnum, dHden; + + Hnum = Ha1*ss2 + Ha2*ss4; + Hden = 1.0 + Ha3*ss4 + Ha4*ss5 + Ha5*ss6; + + H = Hnum/Hden; + + if(order >= 1){ + dHnum = 2.0*Ha1*ss + 4.0*Ha2*ss3; + dHden = 4.0*Ha3*ss3 + 5.0*Ha4*ss4 + 6.0*Ha5*ss5; + + dHds = (Hden*dHnum - Hnum*dHden)/(Hden*Hden); + } + } + + /* now we calculate F(s) */ + { + FLOAT Fc1, Fc2; + + //Fc1 = 4.0*AA*AA/(9.0*CC) + (BB - AA*DD)/CC; + //Fc2 = -4.0/(3.0*36.0*CC); + + Fc1 = 6.4753871; + Fc2 = 0.47965830; + + F = Fc1*H + Fc2; + + if(order >= 1) + dFds = Fc1*dHds; + } + + /* useful variables for what comes next */ + DHs = DD + ss2*H; + DHs2 = DHs*DHs; + DHs3 = DHs2*DHs; + DHs4 = DHs3*DHs; + DHs72 = DHs3*SQRT(DHs); + DHs92 = DHs72*DHs; + + f94Hs2_A = 9.0*H*ss2/(4.0*AA); + + DHsw = DHs + ww2; + DHsw2 = DHsw*DHsw; + DHsw52 = SQRT(DHsw)*DHsw2; + DHsw72 = DHsw52*DHsw; + + eb1 = (ww < wcutoff) ? 1.455915450052607 : 2.0; + + Hsbw = ss2*H + eb1*ww2; + Hsbw2 = Hsbw*Hsbw; + Hsbw3 = Hsbw2*Hsbw; + Hsbw4 = Hsbw3*Hsbw; + Hsbw12 = SQRT(Hsbw); + Hsbw32 = Hsbw12*Hsbw; + Hsbw52 = Hsbw32*Hsbw; + Hsbw72 = Hsbw52*Hsbw; + + if(order >= 1){ + dDHsds = 2.0*ss*H + ss2*dHds; + dDHswdw = 2.0*ww; + dHsbwds = ss2*dHds + 2.0*ss*H; + dHsbwdw = 2.0*eb1*ww; + } + + DHsbw = DD + Hsbw; /* derivatives of DHsbw are equal to the ones of Hsbw */ + DHsbw2 = DHsbw*DHsbw; + DHsbw3 = DHsbw2*DHsbw; + DHsbw4 = DHsbw3*DHsbw; + DHsbw5 = DHsbw4*DHsbw; + DHsbw12 = SQRT(DHsbw); + DHsbw32 = DHsbw12*DHsbw; + DHsbw52 = DHsbw32*DHsbw; + DHsbw72 = DHsbw52*DHsbw; + DHsbw92 = DHsbw72*DHsbw; + + HsbwA94 = 9.0*Hsbw/(4.0*AA); + HsbwA942 = HsbwA94*HsbwA94; + HsbwA943 = HsbwA942*HsbwA94; + HsbwA945 = HsbwA943*HsbwA942; + HsbwA9412 = SQRT(HsbwA94); + + /* and now G(s) */ + if(ss > EGscut){ + FLOAT Ga, Gb, dGa, dGb; + + Ga = M_SQRTPI*(15.0*EE + 6.0*CC*(1.0 + F*ss2)*DHs + 4.0*BB*DHs2 + 8.0*AA*DHs3)/(16.0*DHs72) + - (3.0*M_PI/4.0)*SQRT(AA)*EXP(f94Hs2_A)*(1.0 - ERF(SQRT(f94Hs2_A))); + Gb = 15.0*M_SQRTPI*ss2/(16.0*DHs72); + + EG = -(3.0*M_PI/4.0 + Ga)/Gb; + + if(order >= 1){ + dGa = (M_SQRTPI/32.0) * + ((36.0*(2.0*H + dHds*ss)/(AA12*SQRT(H/AA)) + + (1.0/DHs92) *(-8.0*AA*dDHsds*DHs3 - 105.0*dDHsds*EE - 30.0*CC*dDHsds*DHs*(1.0 + ss2*F) + + 12.0*DHs2*(-BB*dDHsds + CC*ss*(dFds*ss + 2.0*F))) - + ((54.0*EXP(f94Hs2_A)*M_SQRTPI*ss*(2.0*H + dHds*ss)*ERFC(sqrt(f94Hs2_A)))/AA12))); + + dGb = (15.0*M_SQRTPI*ss*(4.0*DHs - 7.0*dDHsds*ss))/(32.0*DHs92); + + dEGds = (-4.0*dGa*Gb + dGb*(4.0*Ga + 3.0*M_PI))/(4.0*Gb*Gb); + } + }else{ + static const FLOAT EGa1=-0.02628417880, EGa2=-0.07117647788, EGa3=0.08534541323; + + EG = EGa1 + EGa2*ss2 + EGa3*ss4; + + if(order >= 1){ + dEGds = 2.0*EGa2*ss + 4.0*EGa3*ss3; + } + } + + /* Calculate the terms needed in any case */ + term2 = (DHs2*BB + DHs*CC + 2.0*EE + DHs*ss2*CC*F + 2.0*ss2*EG)/(2.0*DHs3); + term3 = -ww*(4.0*DHsw2*BB + 6.0*DHsw*CC + 15.0*EE + 6.0*DHsw*ss2*CC*F + 15.0*ss2*EG)/(8.0*DHs*DHsw52); + term4 = -ww3*(DHsw*CC + 5.0*EE + DHsw*ss2*CC*F + 5.0*ss2*EG)/(2.0*DHs2*DHsw52); + term5 = -ww5*(EE + ss2*EG)/(DHs3*DHsw52); + + if(order >=1){ + dterm2ds = (-6.0*dDHsds*(EG*ss2 + EE) + + DHs2*(-dDHsds*BB + ss*CC*(dFds*ss + 2.0*F)) + + 2.0*DHs*(2.0*EG*ss - dDHsds*CC + ss2*(dEGds - dDHsds*CC*F))) + /(2.0*DHs4); + + dterm3ds = ww*(2.0*dDHsds*DHsw*(4.0*DHsw2*BB + 6.0*DHsw*CC + 15.0*EE + 3.0*ss2*(5.0*EG + 2.0*DHsw*CC*F)) + + DHs*(75.0*dDHsds*(EG*ss2 + EE) + 4.0*DHsw2*(dDHsds*BB - 3.0*ss*CC*(dFds*ss + 2.0*F)) + - 6.0*DHsw*(-3.0*dDHsds*CC + ss*(10.0*EG + 5.0*dEGds*ss - 3.0*dDHsds*ss*CC*F)))) + /(16.0*DHs2*DHsw72); + + dterm3dw = (-2.0*DHsw*(4.0*DHsw2*BB + 6.0*DHsw*CC + 15.0*EE + 3.0*ss2*(5.0*EG + 2.0*DHsw*CC*F)) + + ww*dDHswdw*(75.0*(EG*ss2 + EE) + 2.0*DHsw*(2.0*DHsw*BB + 9.0*CC + 9.0*ss2*CC*F))) + /(16.0*DHs*DHsw72); + + dterm4ds = ww3*(4.0*dDHsds*DHsw*(DHsw*CC + 5.0*EE + ss2*(5.0*EG + DHsw*CC*F)) + + DHs*(25.0*dDHsds*(EG*ss2 + EE) - 2.0*DHsw2*ss*CC*(dFds*ss + 2.0*F) + + DHsw*(3.0*dDHsds*CC + ss*(-20.0*EG - 10.0*dEGds*ss + 3.0*dDHsds*ss*CC*F)))) + /(4.0*DHs3*DHsw72); + + dterm4dw = ww2*(-6.0*DHsw*(DHsw*CC + 5.0*EE + ss2*(5.0*EG + DHsw*CC*F)) + + ww*dDHswdw*(25.0*(EG*ss2 + EE) + 3.0*DHsw*CC*(1.0 + ss2*F))) + /(4.0*DHs2*DHsw72); + + dterm5ds = ww5*(6.0*dDHsds*DHsw*(EG*ss2 + EE) + + DHs*(-2.0*DHsw*ss*(2.0*EG + dEGds*ss) + 5.0*dDHsds*(EG*ss2 + EE))) + /(2.0*DHs4*DHsw72); + + dterm5dw = ww4*5.0*(EG*ss2 + EE)*(-2.0*DHsw + dDHswdw*ww) + /(2.0*DHs3*DHsw72); + } + + if((ss > 0.0) || (ww > 0.0)){ + FLOAT dt10; + + t10 = 0.5*AA*LOG(Hsbw/DHsbw); + + if(order >= 1){ + dt10 = 0.5*AA*(1.0/Hsbw - 1.0/DHsbw); + + dt10ds = dt10*dHsbwds; + dt10dw = dt10*dHsbwdw; + } + } + + /* Calculate exp(x)*f(x) depending on size of x */ + if(HsbwA94 < expfcutoff){ + piexperf = M_PI*EXP(HsbwA94)*ERFC(HsbwA9412); + expei = EXP(HsbwA94)*(-expint_e1(HsbwA94)); + + }else{ + static const FLOAT expei1=4.03640, expei2=1.15198, expei3=5.03627, expei4=4.19160; + + piexperf = M_PI*(1.0/(M_SQRTPI*HsbwA9412) - 1.0/(2.0*SQRT(M_PI*HsbwA943))+ 3.0/(4.0*SQRT(M_PI*HsbwA945))); + expei = - (1.0/HsbwA94)*(HsbwA942 + expei1*HsbwA94 + expei2)/(HsbwA942 + expei3*HsbwA94 + expei4); + } + + if(order >= 1){ + FLOAT dpiexperf, dexpei; + + dpiexperf = -(3.0*M_SQRTPI*SQRT(Hsbw/AA))/(2.0*Hsbw) + (9.0*piexperf)/(4.0*AA); + dpiexperfds = dpiexperf*dHsbwds; + dpiexperfdw = dpiexperf*dHsbwdw; + + dexpei = 1.0/Hsbw + 9.0*expei/(4.0*AA); + dexpeids = dexpei*dHsbwds; + dexpeidw = dexpei*dHsbwdw; + } + + if (ww == 0.0){ /* Fall back to original expression for the PBE hole */ + FLOAT t1, dt1ds, dt1dw; + + if(ss > MIN_GRAD){ + t1 = -0.5*AA*expei; + *f = m89*(t1 + t10 + term2); + }else{ + *f = 1.0; + } + + if(order >= 1){ + if(ss > MIN_GRAD){ + dt1ds = -0.5*AA*dexpeids; + dt1dw = -0.5*AA*dexpeidw; + + *dfdx = m89*(dt1ds + dt10ds + dterm2ds); + *lvrho = m89*(dt1dw + dt10dw); + }else{ + *dfdx = 0.0; + *lvrho = 0.0; + } + } + + }else if(ww > wcutoff){ /* Use simple gaussian approximation for large w */ + FLOAT dterm1; + + term1 = -0.5*AA*(expei + LOG(DHsbw) - LOG(Hsbw)); + *f = m89*(term1 + term2 + term3 + term4 + term5); + + if(order >= 1){ + dterm1 = -AA/(2.0*DHsbw) + m89*expei; + + dterm1ds = dterm1*dHsbwds; + dterm1dw = dterm1*dHsbwdw; + + *dfdx = m89*(dterm1ds + dterm2ds + dterm3ds + dterm4ds + dterm5ds); + *lvrho = m89*(dterm1dw + dterm3dw + dterm4dw + dterm5dw); + } + + }else{ /* For everything else use the full blown expression */ + + static const FLOAT ea1=-1.128223946706117, ea2=1.452736265762971, ea3=-1.243162299390327, + ea4=0.971824836115601, ea5=-0.568861079687373, ea6=0.246880514820192, ea7=-0.065032363850763, + ea8=0.008401793031216; + + FLOAT np1, np2, t1, f2, f3, f4, f5, f6, f7, f8, f9, t2t9; + FLOAT dnp1dw, dnp2dw, dt1ds, dt1dw, df2, df2ds, df2dw, df3, df3ds, df3dw; + FLOAT df4, df4ds, df4dw, df5, df5ds, df5dw, df6, df6ds, df6dw, df7ds, df7dw; + FLOAT df8, df8ds, df8dw, df9, df9ds, df9dw, dt2t9ds, dt2t9dw; + + np1 = -1.5*ea1*AA12*ww + 27.0*ea3*ww3/(8.0*AA12) - 243.0*ea5*ww5/(32.0*AA32) + 2187.0*ea7*ww7/(128.0*AA52); + np2 = -AA + 9.0*ea2*ww2/4.0 - 81.0*ea4*ww4/(16.0*AA) + 729.0*ea6*ww6/(64.0*AA2) - 6561.0*ea8*ww8/(256.0*AA3); + + t1 = 0.5*(np1*piexperf + np2*expei); + + f2 = 0.5*ea1*M_SQRTPI*AA/DHsbw12; + f3 = 0.5*ea2*AA/DHsbw; + f4 = ea3*M_SQRTPI*(-9.0/(8.0*Hsbw12) + 0.25*AA/DHsbw32); + f5 = (ea4/128.0)*(-144.0/Hsbw + 64.0*AA/DHsbw2); + f6 = ea5*(3.0*M_SQRTPI*(3.0*DHsbw52*(9.0*Hsbw - 2.0*AA) + + 4.0*Hsbw32*AA2))/(32.0*DHsbw52*Hsbw32*AA); + f7 = ea6*((32.0*AA/DHsbw3 + (-36.0 + 81.0*ss2*H/AA)/Hsbw2))/32.0; + f8 = ea7*(-3.0*M_SQRTPI*(-40.0*Hsbw52*AA3 + 9.0*DHsbw72*(27.0*Hsbw2 - 6.0*Hsbw*AA + 4.0*AA2)))/(128.0*DHsbw72*Hsbw52*AA2); + f9 = (324.0*ea6*eb1*DHsbw4*Hsbw*AA + ea8*(384.0*Hsbw3*AA3 + DHsbw4*(-729.0*Hsbw2 + 324.0*Hsbw*AA - 288.0*AA2)))/(128.0*DHsbw4*Hsbw3*AA2); + + t2t9 = f2*ww + f3*ww2 + f4*ww3 + f5*ww4 + f6*ww5 + f7*ww6 + f8*ww7 + f9*ww8; + + term1 = t1 + t2t9 + t10; + + *f = m89*(term1 + term2 + term3 + term4 + term5); + + if(order >= 1){ + dnp1dw = -1.5*ea1*AA12 + 81.0*ea3*ww2/(8.0*AA12) - 1215.0*ea5*ww4/(32.0*AA32) + + (15309.0*ea7*ww6)/(128.0*AA52); + + dnp2dw = 0.5*9.0*ea2*ww - 81.0*ea4*ww3/(4.0*AA) + 2187.0*ea6*ww5/(32.0*AA2) + - 6561.0*ea8*ww7/(32.0*AA3); + + dt1ds = 0.5*(dpiexperfds*np1 + dexpeids*np2); + dt1dw = 0.5*(dnp2dw*expei + dpiexperfdw*np1 + dexpeidw*np2 + dnp1dw*piexperf); + + df2 = -ea1*M_SQRTPI*AA/(4.0*DHsbw32); + df2ds = df2*dHsbwds; + df2dw = df2*dHsbwdw; + + df3 = -ea2*AA/(2.0*DHsbw2); + df3ds = df3*dHsbwds; + df3dw = df3*dHsbwdw; + + df4 = ea3*M_SQRTPI*(9.0/(16.0*Hsbw32)- 3.0*AA/(8.0*DHsbw52)); + df4ds = df4*dHsbwds; + df4dw = df4*dHsbwdw; + + df5 = ea4*(9.0/(8.0*Hsbw2) - AA/DHsbw3); + df5ds = df5*dHsbwds; + df5dw = df5*dHsbwdw; + + df6 = ea5*M_SQRTPI*(27.0/(32.0*Hsbw52)- 81.0/(64.0*Hsbw32*AA) - 15.0*AA/(16.0*DHsbw72)); + df6ds = df6*dHsbwds; + df6dw = df6*dHsbwdw; + + df7ds = ea6*(3.0*(27.0*dHds*DHsbw4*Hsbw*ss2 + 8.0*dHsbwds*AA*(3.0*DHsbw4 - 4.0*Hsbw3*AA) + + 54.0*DHsbw4*ss*(Hsbw - dHsbwds*ss)*H))/(32.0*DHsbw4*Hsbw3*AA); + df7dw = ea6*dHsbwdw*(9.0/(4.0*Hsbw3) - 3.0*AA/DHsbw4 - 81.0*ss2*H/(16.0*Hsbw3*AA)); + + df8 = ea7*M_SQRTPI*(135.0/(64.0*Hsbw72) + 729.0/(256.0*Hsbw32*AA2) + - 243.0/(128.0*Hsbw52*AA) - 105.0*AA/(32.0*DHsbw92)); + df8ds = df8*dHsbwds; + df8dw = df8*dHsbwdw; + + df9 = -81.0*ea6*eb1/(16.0*Hsbw3*AA) + + ea8*(27.0/(4.0*Hsbw4) + 729.0/(128.0*Hsbw2*AA2) - 81.0/(16.0*Hsbw3*AA) - 12.0*AA/DHsbw5); + df9ds = df9*dHsbwds; + df9dw = df9*dHsbwdw; + + dt2t9ds = df2ds*ww + df3ds*ww2 + df4ds*ww3 + df5ds*ww4 + + df6ds*ww5 + df7ds*ww6 + df8ds*ww7 + df9ds*ww8; + dt2t9dw = f2 + df2dw*ww + 2.0*f3*ww + df3dw*ww2 + + 3.0*f4*ww2 + df4dw*ww3 + 4.0*f5*ww3 + df5dw*ww4 + + 5.0*f6*ww4 + df6dw*ww5 + 6.0*f7*ww5 + df7dw*ww6 + + 7.0*f8*ww6 + df8dw*ww7 + 8.0*f9*ww7 + df9dw*ww8; + + dterm1ds = dt1ds + dt2t9ds + dt10ds; + dterm1dw = dt1dw + dt2t9dw + dt10dw; + + *dfdx = m89*(dterm1ds + dterm2ds + dterm3ds + dterm4ds + dterm5ds); + *lvrho = m89*(dterm1dw + dterm3dw + dterm4dw + dterm5dw); + } + + } + + /* scale and convert to the right variables */ + if(order >= 1){ + *dfdx *= dssdx; + *lvrho *= dwdrho; + } +} + +#include "work_gga_x.c" + +const XC(func_info_type) XC(func_info_gga_x_wpbeh) = { + XC_GGA_X_WPBEH, + XC_EXCHANGE, + "short-range part of the PBE (default w=0 gives PBEh)", + XC_FAMILY_GGA, + "J Heyd, GE Scuseria, and M Ernzerhof, J. Chem. Phys. 118, 8207 (2003)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_wpbeh_init, + NULL, NULL, + work_gga_x, + NULL +}; diff --git a/libxc/src/gga_xc_1w.c b/libxc/src/gga_xc_1w.c new file mode 100644 index 000000000..3bb125f00 --- /dev/null +++ b/libxc/src/gga_xc_1w.c @@ -0,0 +1,115 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_XC_XLYP 166 /* XLYP functional */ +#define XC_GGA_XC_PBE1W 173 /* Functionals fitted for water */ +#define XC_GGA_XC_MPWLYP1W 174 /* Functionals fitted for water */ +#define XC_GGA_XC_PBELYP1W 175 /* Functionals fitted for water */ + +static void +gga_xc_xlyp_init(XC(func_type) *p) +{ + static int funcs_id [4] = {XC_LDA_X, XC_GGA_X_B88, XC_GGA_X_PW91, XC_GGA_C_LYP}; + static FLOAT funcs_coef[4] = {1.0 - 0.722 - 0.347, 0.722, 0.347, 1.0}; + + XC(mix_init)(p, 4, funcs_id, funcs_coef); +} + +const XC(func_info_type) XC(func_info_gga_xc_xlyp) = { + XC_GGA_XC_XLYP, + XC_EXCHANGE_CORRELATION, + "XLYP", + XC_FAMILY_GGA, + "X Xu and WA Goddard, III, PNAS 101, 2673 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_xlyp_init, + NULL, NULL, NULL, NULL +}; + + +static void +gga_xc_pbe1w_init(XC(func_type) *p) +{ + static int funcs_id [3] = {XC_LDA_C_VWN, XC_GGA_X_PBE, XC_GGA_C_PBE}; + static FLOAT funcs_coef[3] = {1.0 - 74.0/100.0, 1.0, 74.0/100.0}; + + XC(mix_init)(p, 3, funcs_id, funcs_coef); +} + +const XC(func_info_type) XC(func_info_gga_xc_pbe1w) = { + XC_GGA_XC_PBE1W, + XC_EXCHANGE_CORRELATION, + "PBE1W", + XC_FAMILY_GGA, + "EE Dahlke and DG Truhlar, J. Phys. Chem. B 109, 15677 (2005)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_pbe1w_init, + NULL, NULL, NULL, NULL +}; + + +static void +gga_xc_mpwlyp1w_init(XC(func_type) *p) +{ + static int funcs_id [3] = {XC_LDA_C_VWN, XC_GGA_X_MPW91, XC_GGA_C_LYP}; + static FLOAT funcs_coef[3] = {1.0 - 88.0/100.0, 1.0, 88.0/100.0}; + + XC(mix_init)(p, 3, funcs_id, funcs_coef); +} + +const XC(func_info_type) XC(func_info_gga_xc_mpwlyp1w) = { + XC_GGA_XC_MPWLYP1W, + XC_EXCHANGE_CORRELATION, + "mPWLYP1w", + XC_FAMILY_GGA, + "EE Dahlke and DG Truhlar, J. Phys. Chem. B 109, 15677 (2005)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_mpwlyp1w_init, + NULL, NULL, NULL, NULL +}; + + +static void +gga_xc_pbelyp1w_init(XC(func_type) *p) +{ + static int funcs_id [3] = {XC_LDA_C_VWN, XC_GGA_X_PBE, XC_GGA_C_LYP}; + static FLOAT funcs_coef[3] = {1.0 - 74.0/100.0, 1.0, 74.0/100.0}; + + XC(mix_init)(p, 3, funcs_id, funcs_coef); +} + +const XC(func_info_type) XC(func_info_gga_xc_pbelyp1w) = { + XC_GGA_XC_PBELYP1W, + XC_EXCHANGE_CORRELATION, + "PBELYP1W", + XC_FAMILY_GGA, + "EE Dahlke and DG Truhlar, J. Phys. Chem. B 109, 15677 (2005)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_pbelyp1w_init, + NULL, NULL, NULL, NULL +}; + diff --git a/libxc/src/gga_xc_b97.c b/libxc/src/gga_xc_b97.c new file mode 100644 index 000000000..cbad178f1 --- /dev/null +++ b/libxc/src/gga_xc_b97.c @@ -0,0 +1,679 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_XC_HCTH_93 161 /* HCTH functional fitted to 93 molecules */ +#define XC_GGA_XC_HCTH_120 162 /* HCTH functional fitted to 120 molecules */ +#define XC_GGA_XC_HCTH_147 163 /* HCTH functional fitted to 147 molecules */ +#define XC_GGA_XC_HCTH_407 164 /* HCTH functional fitted to 407 molecules */ +#define XC_GGA_XC_B97 167 /* Becke 97 */ +#define XC_GGA_XC_B97_1 168 /* Becke 97-1 */ +#define XC_GGA_XC_B97_2 169 /* Becke 97-2 */ +#define XC_GGA_XC_B97_D 170 /* Grimme functional to be used with C6 vdW term */ +#define XC_GGA_XC_B97_K 171 /* Boese-Martin for Kinetics */ +#define XC_GGA_XC_B97_3 172 /* Becke 97-3 */ +#define XC_GGA_XC_SB98_1a 176 /* Schmider-Becke 98 parameterization 1a */ +#define XC_GGA_XC_SB98_1b 177 /* Schmider-Becke 98 parameterization 1b */ +#define XC_GGA_XC_SB98_1c 178 /* Schmider-Becke 98 parameterization 1c */ +#define XC_GGA_XC_SB98_2a 179 /* Schmider-Becke 98 parameterization 2a */ +#define XC_GGA_XC_SB98_2b 180 /* Schmider-Becke 98 parameterization 2b */ +#define XC_GGA_XC_SB98_2c 181 /* Schmider-Becke 98 parameterization 2c */ +#define XC_GGA_XC_HCTH_A 97 /* HCTH-A */ +#define XC_GGA_XC_B97_GGA1 96 /* Becke 97 GGA-1 */ +#define XC_GGA_XC_HCTH_P14 95 /* HCTH p=1/4 */ +#define XC_GGA_XC_HCTH_P76 94 /* HCTH p=7/6 */ +#define XC_GGA_XC_HCTH_407P 93 /* HCTH/407+ */ +#define XC_GGA_C_N12 80 /* N12 functional from Minnesota */ +#define XC_GGA_C_N12_SX 79 /* N12-SX functional from Minnesota */ + +static const FLOAT b97_params[][3][5] = { + { /* HCTH/93 */ + {1.09320, -0.744056, 5.59920, -6.78549, 4.49357}, /* X */ + {0.222601, -0.0338622, -0.0125170, -0.802496, 1.55396}, /* Css */ + {0.729974, 3.35287, -11.5430, 8.08564, -4.47857} /* Cab */ + }, { /* HCTH/120 */ + {1.09163, -0.747215, 5.07833, -4.10746, 1.17173}, /* X */ + {0.489508, -0.260699, 0.432917, -1.99247, 2.48531}, /* Css */ + {0.514730, 6.92982, -24.7073, 23.1098, -11.3234 } /* Cab */ + }, { /* HCTH/147 */ + {1.09025, -0.799194, 5.57212, -5.86760, 3.04544 }, /* X */ + {0.562576, 0.0171436, -1.30636, 1.05747, 0.885429}, /* Css */ + {0.542352, 7.01464, -28.3822, 35.0329, -20.4284 }, /* Cab */ + }, { /* HCTH/407 */ + {1.08184, -0.518339, 3.42562, -2.62901, 2.28855}, /* X */ + {1.18777, -2.40292, 5.61741, -9.17923, 6.24798}, /* Css */ + {0.589076, 4.42374, -19.2218, 42.5721, -42.0052 } /* Cab */ + }, { /* Becke 97 */ + {0.8094, 0.5073, 0.7481, 0.0, 0.0}, /* X */ + {0.1737, 2.3487, -2.4868, 0.0, 0.0}, /* Css */ + {0.9454, 0.7471, -4.5961, 0.0, 0.0} /* Cab */ + }, { /* Becke 97-1 */ + {0.789518, 0.573805, 0.660975, 0.0, 0.0}, /* X */ + {0.0820011, 2.71681, -2.87103, 0.0, 0.0}, /* Css */ + {0.955689, 0.788552, -5.47869, 0.0, 0.0} /* Cab */ + }, { /* Becke 97-2 */ + {0.827642, 0.0478400, 1.76125, 0.0, 0.0}, /* X */ + {0.585808, -0.691682, 0.394796, 0.0, 0.0}, /* Css */ + {0.999849, 1.40626, -7.44060, 0.0, 0.0} /* Cab */ + }, { /* Becke 97-D */ + {1.08662, -0.52127, 3.25429, 0.0, 0.0}, /* X */ + {0.22340, -1.56208, 1.94293, 0.0, 0.0}, /* Css */ + {0.69041, 6.30270, -14.9712, 0.0, 0.0} /* Cab */ + }, { /* Becke 97-K */ + {0.507863, 1.46873, -1.51301, 0.0, 0.0}, /* X */ + {0.12355, 2.65399, -3.20694, 0.0, 0.0}, /* Css */ + {1.58613, -6.20977, 6.46106, 0.0, 0.0} /* Cab */ + }, { /* Becke 97-3 */ + { 0.7334648, 0.2925270, 3.338789, -10.51158, 10.60907}, /* X */ + { 0.5623649, -1.322980, 6.359191, -7.464002, 1.827082}, /* Css */ + { 1.133830, -2.811967, 7.431302, -1.969342, -11.74423} /* Cab */ + }, { /* SB98-1a */ + { 0.845975, 0.228183, 0.749949, 0.0, 0.0}, /* X */ + {-0.817637, -0.054676, 0.592163, 0.0, 0.0}, /* Css */ + { 0.975483, 0.398379, -3.73540, 0.0, 0.0} /* Cab */ + }, { /* SB98-1b */ + { 0.800103, -0.084192, 1.47742, 0.0, 0.0}, /* X */ + { 1.44946, -2.37073, 2.13564, 0.0, 0.0}, /* Css */ + { 0.977621, 0.931199, -4.76973, 0.0, 0.0} /* Cab */ + }, { /* SB98-1c */ + { 0.810936, 0.496090, 0.772385, 0.0, 0.0}, /* X */ + { 0.262077, 2.12576, -2.30465, 0.0, 0.0}, /* Css */ + { 0.939269, 0.898121, -4.91276, 0.0, 0.0} /* Cab */ + }, { /* SB98-2a */ + { 0.749200, 0.402322, 0.620779, 0.0, 0.0}, /* X */ + { 1.26686, 1.67146, -1.22565, 0.0, 0.0}, /* Css */ + { 0.964641, 0.050527, -3.01966, 0.0, 0.0} /* Cab */ + }, { /* SB98-2b */ + { 0.770587, 0.180767, 0.955246, 0.0, 0.0}, /* X */ + { 0.170473, 1.24051, -0.862711, 0.0, 0.0}, /* Css */ + { 0.965362, 0.863300, -4.61778, 0.0, 0.0} /* Cab */ + }, { /* SB98-2c */ + { 0.790194, 0.400271, 0.832857, 0.0, 0.0}, /* X */ + {-0.120163, 2.82332, -2.59412, 0.0, 0.0}, /* Css */ + { 0.934715, 1.14105, -5.33398, 0.0, 0.0} /* Cab */ + }, { /* HCTH-A */ + { 1.09878, -2.51173, 0.0156233, 0.0, 0.0}, /* X */ + { 0.0136823, 0.268920, -0.550769, 1.03947, 0.0}, /* Css */ + { 0.836897, 1.72051, -2.78498, -4.57504, 0.0} /* Cab */ + }, { /* B97 GGA-1 */ + { 1.1068, -0.8765, 4.2639, 0.0, 0.0}, /* X */ + { 0.4883, -2.117, 2.3235, 0.0, 0.0}, /* Css */ + { 0.7961, 5.7060, -14.9820, 0.0, 0.0} /* Cab */ + }, { /* HCTH p=1/4 */ + { 1.03161, -0.360781, 3.51994, -4.95944, 2.41165}, /* X */ + { 2.82414, 0.0318843, -1.78512, 2.39795, -0.876909}, /* Css */ + { 0.0821827, 4.56466, -13.5529, 13.3820, -3.17493} /* Cab */ + }, { /* HCTH p=7/6 */ + { 1.16525, -0.583033, 2.51769, 3.81278, -5.45906}, /* X */ + {-3.92143, -1.10098, -0.0914050, -0.859723, 2.07184}, /* Css */ + { 0.192949, -5.73335, 50.8757, 135.475, 101.268} /* Cab */ + }, { /* HCTH 407p */ + { 1.08018, -0.4117, 2.4368, 1.3890, -1.3529}, /* X */ + { 0.80302, -1.0479, 4.9807, -12.890, 9.6446}, /* Css */ + { 0.73604, 3.0270, -10.075, 20.611, -29.418} /* Cab */ + }, { /* N12 */ + { 0.0, 0.0, 0.0, 0.0, 0.0}, /* X */ + { 1.00000e+00, 3.24511e+00, -2.52893e+01, 1.44407e+01, 1.96870e+01}, /* Css */ + { 1.00000e+00, -5.53170e+00, 3.07958e+01, -5.64196e+01, 3.21250e+01} /* Cab */ + }, { /* N12-SX */ + { 0.0, 0.0, 0.0, 0.0, 0.0}, /* X */ + { 8.33615e-01, 3.24128e+00, -1.06407e+01, -1.60471e+01, 2.51047e+01}, /* Css */ + { 2.63373e+00, -1.05450e+00, -7.29853e-01, 4.94024e+00, -7.31760e+00} /* Cab */ + }, +}; + +typedef struct{ + const FLOAT (*cc)[5]; +} gga_xc_b97_params; + + +static void +gga_xc_b97_init(XC(func_type) *p) +{ + gga_xc_b97_params *params; + + assert(p != NULL); + + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_LDA_C_PW, XC_POLARIZED); + + assert(p->params == NULL); + p->params = malloc(sizeof(gga_xc_b97_params)); + params = (gga_xc_b97_params *)(p->params); + + switch(p->info->number){ + case XC_GGA_XC_HCTH_93: p->func = 0; break; + case XC_GGA_XC_HCTH_120: p->func = 1; break; + case XC_GGA_XC_HCTH_147: p->func = 2; break; + case XC_GGA_XC_HCTH_407: p->func = 3; break; + case XC_GGA_XC_B97: p->func = 4; break; + case XC_GGA_XC_B97_1: p->func = 5; break; + case XC_GGA_XC_B97_2: p->func = 6; break; + case XC_GGA_XC_B97_D: p->func = 7; break; + case XC_GGA_XC_B97_K: p->func = 8; break; + case XC_GGA_XC_B97_3: p->func = 9; break; + case XC_GGA_XC_SB98_1a: p->func = 10; break; + case XC_GGA_XC_SB98_1b: p->func = 11; break; + case XC_GGA_XC_SB98_1c: p->func = 12; break; + case XC_GGA_XC_SB98_2a: p->func = 13; break; + case XC_GGA_XC_SB98_2b: p->func = 14; break; + case XC_GGA_XC_SB98_2c: p->func = 15; break; + case XC_GGA_XC_HCTH_A: p->func = 16; break; + case XC_GGA_XC_B97_GGA1: p->func = 17; break; + case XC_GGA_XC_HCTH_P14: p->func = 18; break; + case XC_GGA_XC_HCTH_P76: p->func = 19; break; + case XC_GGA_XC_HCTH_407P: p->func = 20; break; + case XC_GGA_C_N12: p->func = 21; break; + case XC_GGA_C_N12_SX: p->func = 22; break; + default: + fprintf(stderr, "Internal error in gga_b97\n"); + exit(1); + break; + } + + params->cc = b97_params[p->func]; +} + + +void +XC(mgga_b97_func_g)(const FLOAT *cc, FLOAT gamma, FLOAT s, int order, FLOAT *g, FLOAT *dgds, FLOAT *d2gds2) +{ + FLOAT s2, dd, x, dxds, d2xds2, dgdx, d2gdx2; + + s2 = s*s; + dd = 1.0 + gamma*s2; + x = gamma * s2/dd; + + *g = cc[0] + x*(cc[1] + x*(cc[2] + x*(cc[3] + x*cc[4]))); + + if(order < 1) return; + + dxds = gamma * 2.0*s/(dd*dd); + dgdx = cc[1] + x*(2.0*cc[2] + x*(3.0*cc[3] + x*4.0*cc[4])); + *dgds = dgdx*dxds; + + if(order < 2) return; + + d2gdx2 = 2.0*cc[2] + x*(6.0*cc[3] + x*12.0*cc[4]); + d2xds2 = 2.0*gamma*(1.0 - 3.0*gamma*s2)/(dd*dd*dd); + *d2gds2 = d2gdx2*dxds*dxds + dgdx*d2xds2; +} + + +static inline void +func(const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + static const FLOAT sign[2] = {1.0, -1.0}; + const FLOAT gamma[3] = {0.004, 0.2, 0.006}; + + XC(lda_work_t) LDA[3]; + const gga_xc_b97_params *params; + FLOAT cnst, ldax, x_avg; + FLOAT fx, dfxdx, d2fxdx2, fcpar, dfcpardx, d2fcpardx2, fcper, dfcperdx, d2fcperdx2; + FLOAT opz, opz13, dldaxdrs, dldaxdz, d2ldaxdrs2, d2ldaxdrsz, d2ldaxdz2, aux, aux12; + FLOAT dx_avgdxs[2], d2x_avgdxs2[3]; + int is, js; + + params = (gga_xc_b97_params *)(p->params); + + cnst = CBRT(4.0*M_PI/3.0); + + /* first we get the parallel and perpendicular LDAS */ + XC(lda_stoll) (p->func_aux[0], r->dens, r->zeta, r->order, LDA); + + /* initialize to zero */ + r->f = 0.0; + if(r->order >= 1){ + r->dfdrs = r->dfdz = r->dfdxs[0] = r->dfdxs[1] = r->dfdxt = 0.0; + } + if(r->order >= 2){ + r->d2fdrs2 = r->d2fdrsz = r->d2fdrsxt = r->d2fdrsxs[0] = r->d2fdrsxs[1] = 0.0; + r->d2fdz2 = r->d2fdzxt = r->d2fdzxs[0] = r->d2fdzxs[1] = r->d2fdxt2 = 0.0; + r->d2fdxtxs[0] = r->d2fdxtxs[1] = r->d2fdxs2[0] = r->d2fdxs2[1] = r->d2fdxs2[2] = 0.0; + } + + /* now we calculate the g functions for exchange and parallel correlation */ + for(is = 0; is < 2; is++){ + opz = 1.0 + sign[is]*r->zeta; + + if(r->dens*opz < 2.0*p->info->min_dens) continue; + + XC(mgga_b97_func_g)(params->cc[0], gamma[0], r->xs[is], r->order, &fx, &dfxdx, &d2fxdx2); + XC(mgga_b97_func_g)(params->cc[1], gamma[1], r->xs[is], r->order, &fcpar, &dfcpardx, &d2fcpardx2); + + opz13 = CBRT(opz); + + ldax = -X_FACTOR_C*opz*opz13/(2.0*M_CBRT2*cnst*r->rs); + + r->f += ldax*fx + LDA[is].zk*fcpar; + + if(r->order < 1) continue; + + dldaxdrs = -ldax/r->rs; + dldaxdz = sign[is]*4.0*ldax/(3.0*opz); + + r->dfdrs += dldaxdrs*fx + LDA[is].dedrs*fcpar; + r->dfdz += dldaxdz *fx + LDA[is].dedz *fcpar; + r->dfdxs[is] += ldax*dfxdx + LDA[is].zk*dfcpardx; + + if(r->order < 2) continue; + + js = (is == 0) ? 0 : 2; + + d2ldaxdrs2 = -2.0*dldaxdrs/r->rs; + d2ldaxdrsz = -dldaxdz/r->rs; + d2ldaxdz2 = sign[is]*dldaxdz/(3.0*opz); + + r->d2fdrs2 += d2ldaxdrs2*fx + LDA[is].d2edrs2*fcpar; + r->d2fdrsz += d2ldaxdrsz*fx + LDA[is].d2edrsz*fcpar; + r->d2fdrsxs[is] += dldaxdrs*dfxdx + LDA[is].dedrs*dfcpardx; + r->d2fdz2 += d2ldaxdz2*fx + LDA[is].d2edz2*fcpar; + r->d2fdzxs[is] += dldaxdz*dfxdx + LDA[is].dedz*dfcpardx; + r->d2fdxs2[js] += ldax*d2fxdx2 + LDA[is].zk*d2fcpardx2; + } + + /* and now we add the opposite-spin contribution */ + aux = r->xs[0]*r->xs[0] + r->xs[1]*r->xs[1]; + aux12 = SQRT(aux); + x_avg = aux12/M_SQRT2; + + XC(mgga_b97_func_g)(params->cc[2], gamma[2], x_avg, r->order, &fcper, &dfcperdx, &d2fcperdx2); + + r->f += LDA[2].zk*fcper; + + if(r->order < 1) return; + + dx_avgdxs[0] = r->xs[0]/(aux12*M_SQRT2); + dx_avgdxs[1] = r->xs[1]/(aux12*M_SQRT2); + + r->dfdrs += LDA[2].dedrs*fcper; + r->dfdz += LDA[2].dedz *fcper; + r->dfdxs[0] += LDA[2].zk*dfcperdx*dx_avgdxs[0]; + r->dfdxs[1] += LDA[2].zk*dfcperdx*dx_avgdxs[1]; + + if(r->order < 2) return; + + d2x_avgdxs2[0] = r->xs[1]*r->xs[1]/(aux*aux12*M_SQRT2); + d2x_avgdxs2[1] = -r->xs[0]*r->xs[1]/(aux*aux12*M_SQRT2); + d2x_avgdxs2[2] = r->xs[0]*r->xs[0]/(aux*aux12*M_SQRT2); + + r->d2fdrs2 += LDA[2].d2edrs2*fcper; + r->d2fdrsz += LDA[2].d2edrsz*fcper; + r->d2fdrsxs[0] += LDA[2].dedrs*dfcperdx*dx_avgdxs[0]; + r->d2fdrsxs[1] += LDA[2].dedrs*dfcperdx*dx_avgdxs[1]; + r->d2fdz2 += LDA[2].d2edz2*fcper; + r->d2fdzxs[0] += LDA[2].dedz*dfcperdx*dx_avgdxs[0]; + r->d2fdzxs[1] += LDA[2].dedz*dfcperdx*dx_avgdxs[1]; + r->d2fdxs2[0] += LDA[2].zk*(d2fcperdx2*dx_avgdxs[0]*dx_avgdxs[0] + dfcperdx*d2x_avgdxs2[0]); + r->d2fdxs2[1] += LDA[2].zk*(d2fcperdx2*dx_avgdxs[0]*dx_avgdxs[1] + dfcperdx*d2x_avgdxs2[1]); + r->d2fdxs2[2] += LDA[2].zk*(d2fcperdx2*dx_avgdxs[1]*dx_avgdxs[1] + dfcperdx*d2x_avgdxs2[2]); +} + + +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_xc_b97) = { + XC_GGA_XC_B97, + XC_EXCHANGE_CORRELATION, + "Becke 97", + XC_FAMILY_GGA, + "AD Becke, J. Chem. Phys. 107, 8554 (1997)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_b97_1) = { + XC_GGA_XC_B97_1, + XC_EXCHANGE_CORRELATION, + "Becke 97-1", + XC_FAMILY_GGA, + "FA Hamprecht, AJ Cohen, DJ Tozer, and NC Handy, J. Chem. Phys. 109, 6264 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_b97_2) = { + XC_GGA_XC_B97_2, + XC_EXCHANGE_CORRELATION, + "Becke 97-2", + XC_FAMILY_GGA, + "PJ Wilson, TJ Bradley, and DJ Tozer, J. Chem. Phys. 115, 9233 (2001)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_b97_d) = { + XC_GGA_XC_B97_D, + XC_EXCHANGE_CORRELATION, + "Becke 97-D", + XC_FAMILY_GGA, + "S Grimme, J. Comput. Chem. 27, 1787 (2006)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_b97_k) = { + XC_GGA_XC_B97_K, + XC_EXCHANGE_CORRELATION, + "Boese-Martin for Kinetics", + XC_FAMILY_GGA, + "AD Boese and JML Martin, J. Chem. Phys., Vol. 121, 3405 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_b97_3) = { + XC_GGA_XC_B97_3, + XC_EXCHANGE_CORRELATION, + "Becke 97-3", + XC_FAMILY_GGA, + "TW Keal and DJ Tozer, J. Chem. Phys. 123, 121103 (2005)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_hcth_93) = { + XC_GGA_XC_HCTH_93, + XC_EXCHANGE_CORRELATION, + "HCTH/93", + XC_FAMILY_GGA, + "FA Hamprecht, AJ Cohen, DJ Tozer, and NC Handy, J. Chem. Phys. 109, 6264 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_hcth_120) = { + XC_GGA_XC_HCTH_120, + XC_EXCHANGE_CORRELATION, + "HCTH/120", + XC_FAMILY_GGA, + "AD Boese, NL Doltsinis, NC Handy, and M Sprik, J. Chem. Phys. 112, 1670 (2000)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_hcth_147) = { + XC_GGA_XC_HCTH_147, + XC_EXCHANGE_CORRELATION, + "HCTH/147", + XC_FAMILY_GGA, + "AD Boese, NL Doltsinis, NC Handy, and M Sprik, J. Chem. Phys. 112, 1670 (2000)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_hcth_407) = { + XC_GGA_XC_HCTH_407, + XC_EXCHANGE_CORRELATION, + "HCTH/407", + XC_FAMILY_GGA, + "AD Boese and NC Handy, J. Chem. Phys. 114, 5497 (2001)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_sb98_1a) = { + XC_GGA_XC_SB98_1a, + XC_EXCHANGE_CORRELATION, + "SB98 (1a)", + XC_FAMILY_GGA, + "HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_sb98_1b) = { + XC_GGA_XC_SB98_1b, + XC_EXCHANGE_CORRELATION, + "SB98 (1b)", + XC_FAMILY_GGA, + "HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_sb98_1c) = { + XC_GGA_XC_SB98_1c, + XC_EXCHANGE_CORRELATION, + "SB98 (1c)", + XC_FAMILY_GGA, + "HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_sb98_2a) = { + XC_GGA_XC_SB98_2a, + XC_EXCHANGE_CORRELATION, + "SB98 (2a)", + XC_FAMILY_GGA, + "HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_sb98_2b) = { + XC_GGA_XC_SB98_2b, + XC_EXCHANGE_CORRELATION, + "SB98 (2b)", + XC_FAMILY_GGA, + "HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_sb98_2c) = { + XC_GGA_XC_SB98_2c, + XC_EXCHANGE_CORRELATION, + "SB98 (2c)", + XC_FAMILY_GGA, + "HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_hcth_a) = { + XC_GGA_XC_HCTH_A, + XC_EXCHANGE_CORRELATION, + "HCTH-A", + XC_FAMILY_GGA, + "FA Hamprecht, AJ Cohen, DJ Tozer, and NC Handy, J. Chem. Phys. 109, 6264 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_b97_gga1) = { + XC_GGA_XC_B97_GGA1, + XC_EXCHANGE_CORRELATION, + "Becke 97 GGA-1", + XC_FAMILY_GGA, + "AJ Cohen and NC Handy, Chem. Phys. Lett. 316, 160-166 (2000)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_hcth_p14) = { + XC_GGA_XC_HCTH_P14, + XC_EXCHANGE_CORRELATION, + "HCTH p=1/4", + XC_FAMILY_GGA, + "G Menconi, PJ Wilson, and DJ Tozer, J. Chem. Phys. 114, 3958 (2001)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_hcth_p76) = { + XC_GGA_XC_HCTH_P76, + XC_EXCHANGE_CORRELATION, + "HCTH p=1/4", + XC_FAMILY_GGA, + "G Menconi, PJ Wilson, and DJ Tozer, J. Chem. Phys. 114, 3958 (2001)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_hcth_407p) = { + XC_GGA_XC_HCTH_407P, + XC_EXCHANGE_CORRELATION, + "HCTH/407+", + XC_FAMILY_GGA, + "AD Boese, A Chandra, JML Martin, and Dominik Marx, J. Chem. Phys. 119, 5965 (2003)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-23, 1e-32, 0.0, 1e-32, + gga_xc_b97_init, + NULL, + NULL, + work_gga_c, + NULL +}; + +XC(func_info_type) XC(func_info_gga_c_n12) = { + XC_GGA_C_N12, + XC_CORRELATION, + "N12 functional of Minnesota", + XC_FAMILY_GGA, + "R Peverati and DG Truhlar, J. Chem. Theory Comput. 8, 2310-2319 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + gga_xc_b97_init, + NULL, NULL, + work_gga_c, + NULL +}; + +XC(func_info_type) XC(func_info_gga_c_n12_sx) = { + XC_GGA_C_N12_SX, + XC_CORRELATION, + "N12-SX functional of Minnesota", + XC_FAMILY_GGA, + "R Peverati and DG Truhlar, Phys. Chem. Chem. Phys. 14, 16187-16191 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + gga_xc_b97_init, + NULL, NULL, + work_gga_c, + NULL +}; + diff --git a/libxc/src/gga_xc_edf1.c b/libxc/src/gga_xc_edf1.c new file mode 100644 index 000000000..89fac1283 --- /dev/null +++ b/libxc/src/gga_xc_edf1.c @@ -0,0 +1,151 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_XC_EDF1 165 /* Empirical functionals from Adamson, Gill, and Pople */ +#define XC_GGA_X_OPTPBE_VDW 141 /* PBE reparametrization for vdW */ +#define XC_GGA_XC_MOHLYP 194 /* Functional for organometallic chemistry */ +#define XC_GGA_XC_MOHLYP2 195 /* Functional for barrier heights */ +#define XC_GGA_X_SOGGA 150 /* Second-order generalized gradient approximation */ + +static void +gga_xc_edf1_init(XC(func_type) *p) +{ + static int funcs_id [4] = {XC_LDA_X, XC_GGA_X_B88, XC_GGA_X_B88, XC_GGA_C_LYP}; + static FLOAT funcs_coef[4] = {1.030952 - 10.4017 + 8.44793, 10.4017, -8.44793, 1.0}; + + XC(mix_init)(p, 4, funcs_id, funcs_coef); + + XC(gga_x_b88_set_params)(p->func_aux[1], 0.0035, 6.0); + XC(gga_x_b88_set_params)(p->func_aux[2], 0.0042, 6.0); + XC(gga_c_lyp_set_params)(p->func_aux[3], 0.055, 0.158, 0.25, 0.3505); +} + +const XC(func_info_type) XC(func_info_gga_xc_edf1) = { + XC_GGA_XC_EDF1, + XC_EXCHANGE_CORRELATION, + "EDF1", + XC_FAMILY_GGA, + "RD Adamson, PMW Gill, and JA Pople, Chem. Phys. Lett. 284 6 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_edf1_init, + NULL, NULL, NULL, NULL +}; + + +static void +gga_x_optpbe_vdw_init(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_PBE, XC_GGA_X_RPBE}; + static FLOAT funcs_coef[2] = {1.0 - 0.054732, 0.054732}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + + XC(gga_x_pbe_set_params) (p->func_aux[0], 1.04804, 0.175519); + XC(gga_x_rpbe_set_params)(p->func_aux[1], 1.04804, 0.175519); +} + +const XC(func_info_type) XC(func_info_gga_x_optpbe_vdw) = { + XC_GGA_X_OPTPBE_VDW, + XC_EXCHANGE, + "Reparametrized PBE for vdW", + XC_FAMILY_GGA, + "J Klimes, DR Bowler, and A Michaelides, J. Phys.: Condens. Matter 22, 022201 (2010)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_x_optpbe_vdw_init, + NULL, NULL, NULL, NULL +}; + + +static void +gga_xc_mohlyp_init(XC(func_type) *p) +{ + static int funcs_id [3] = {XC_GGA_X_OPTX, XC_LDA_C_VWN, XC_GGA_C_LYP}; + static FLOAT funcs_coef[3] = {1.0, 0.5, 0.5}; + + XC(mix_init)(p, 3, funcs_id, funcs_coef); + + XC(gga_x_optx_set_params)(p->func_aux[0], 1.0, 1.292/X_FACTOR_C, 0.006); +} + +const XC(func_info_type) XC(func_info_gga_xc_mohlyp) = { + XC_GGA_XC_MOHLYP, + XC_EXCHANGE_CORRELATION, + "Functional for organometallic chemistry", + XC_FAMILY_GGA, + "NE Schultz, Y Zhao, DGJ Truhlar, Phys. Chem. A, 109, 11127 (2005)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_mohlyp_init, + NULL, NULL, NULL, NULL +}; + +static void +gga_xc_mohlyp2_init(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_OPTX, XC_GGA_C_LYP}; + static FLOAT funcs_coef[2] = {1.0, 0.5}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + + XC(gga_x_optx_set_params)(p->func_aux[0], 1.05151, 1.8497564/X_FACTOR_C, 0.006); +} + +const XC(func_info_type) XC(func_info_gga_xc_mohlyp2) = { + XC_GGA_XC_MOHLYP2, + XC_EXCHANGE_CORRELATION, + "Functional for barrier heights", + XC_FAMILY_GGA, + "J Zheng, Y Zhao, DGJ Truhlar, Chem. Theory. Comput. 5, 808 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_mohlyp2_init, + NULL, NULL, NULL, NULL +}; + +static void +gga_x_sogga_init(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_PBE, XC_GGA_X_RPBE}; + static FLOAT funcs_coef[2] = {0.5, 0.5}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + + XC(gga_x_pbe_set_params) (p->func_aux[0], 0.552, 10.0/81.0); + XC(gga_x_rpbe_set_params)(p->func_aux[1], 0.552, 10.0/81.0); +} + +const XC(func_info_type) XC(func_info_gga_x_sogga) = { + XC_GGA_X_SOGGA, + XC_EXCHANGE, + "Second-order generalized gradient approximation", + XC_FAMILY_GGA, + "Y Zhao and DG Truhlar, J. Chem. Phys. 128, 184109 (2008)\n" + "http://comp.chem.umn.edu/mfm/index.html", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-31, 1e-32, 0.0, 1e-32, + gga_x_sogga_init, + NULL, NULL, NULL, NULL +}; + diff --git a/libxc/src/gga_xc_oblyp_d.c b/libxc/src/gga_xc_oblyp_d.c new file mode 100644 index 000000000..1138c3bec --- /dev/null +++ b/libxc/src/gga_xc_oblyp_d.c @@ -0,0 +1,98 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_GGA_XC_OBLYP_D 67 /* oBLYP-D functional of Goerigk and Grimme */ +#define XC_GGA_XC_OPWLYP_D 66 /* oPWLYP-D functional of Goerigk and Grimme */ +#define XC_GGA_XC_OPBE_D 65 /* oPBE_D functional of Goerigk and Grimme */ + +static void +gga_xc_oblyp_d_init(XC(func_type) *p) +{ + static int funcs_id [4] = {XC_GGA_X_B88, XC_GGA_C_LYP}; + static FLOAT funcs_coef[4] = {1.0, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + XC(gga_x_b88_set_params)(p->func_aux[0], 0.00401, 6.0); + XC(gga_c_lyp_set_params)(p->func_aux[1], 0.05047, 0.140, 0.2196, 0.363); +} + +const XC(func_info_type) XC(func_info_gga_xc_oblyp_d) = { + XC_GGA_XC_OBLYP_D, + XC_EXCHANGE_CORRELATION, + "oBLYP-D functional of Goerigk and Grimme", + XC_FAMILY_GGA, + "L Goerigk and S Grimme, J. Chem. Theory Comput. 6, 107-126 (2010)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_oblyp_d_init, + NULL, NULL, NULL, NULL +}; + + +static void +gga_xc_opwlyp_d_init(XC(func_type) *p) +{ + static int funcs_id [4] = {XC_GGA_X_PW91, XC_GGA_C_LYP}; + static FLOAT funcs_coef[4] = {1.0, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + XC(gga_x_pw91_set_params2)(p->func_aux[0], 0.00402, 0.8894/(X2S*X2S), 0.79); + XC(gga_c_lyp_set_params)(p->func_aux[1], 0.04960, 0.144, 0.2262, 0.346); +} + +const XC(func_info_type) XC(func_info_gga_xc_opwlyp_d) = { + XC_GGA_XC_OPWLYP_D, + XC_EXCHANGE_CORRELATION, + "oPWLYP-D functional of Goerigk and Grimme", + XC_FAMILY_GGA, + "L Goerigk and S Grimme, J. Chem. Theory Comput. 6, 107-126 (2010)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_opwlyp_d_init, + NULL, NULL, NULL, NULL +}; + + +static void +gga_xc_opbe_d_init(XC(func_type) *p) +{ + static int funcs_id [4] = {XC_GGA_X_PBE, XC_GGA_C_PBE}; + static FLOAT funcs_coef[4] = {1.0, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + XC(gga_x_pbe_set_params)(p->func_aux[0], 1.2010, 0.21198); + XC(gga_c_pbe_set_params)(p->func_aux[1], 0.04636); +} + +const XC(func_info_type) XC(func_info_gga_xc_opbe_d) = { + XC_GGA_XC_OPBE_D, + XC_EXCHANGE_CORRELATION, + "oBLYP-D functional of Goerigk and Grimme", + XC_FAMILY_GGA, + "L Goerigk and S Grimme, J. Chem. Theory Comput. 6, 107-126 (2010)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_opbe_d_init, + NULL, NULL, NULL, NULL +}; + diff --git a/libxc/src/gga_xc_th.c b/libxc/src/gga_xc_th.c new file mode 100644 index 000000000..dfbd8b027 --- /dev/null +++ b/libxc/src/gga_xc_th.c @@ -0,0 +1,512 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +/* WARNING: These functionals should be checked!!! */ + +#define XC_GGA_XC_TH_FL 196 /* Tozer and Handy v. FL */ +#define XC_GGA_XC_TH_FC 197 /* Tozer and Handy v. FC */ +#define XC_GGA_XC_TH_FCFO 198 /* Tozer and Handy v. FCFO */ +#define XC_GGA_XC_TH_FCO 199 /* Tozer and Handy v. FCO */ +#define XC_GGA_XC_TH1 154 /* Tozer and Handy v. 1 */ +#define XC_GGA_XC_TH2 155 /* Tozer and Handy v. 2 */ +#define XC_GGA_XC_TH3 156 /* Tozer and Handy v. 3 */ +#define XC_GGA_XC_TH4 157 /* Tozer and Handy v. 4 */ + +typedef struct{ + int n, *b, *c, *d; + FLOAT *a, *omega; +} gga_xc_th_params; + + +/* parameters for TH_FL */ +static int n_TH_FL = 4; +static FLOAT omega_TH_FL[] = + {-0.106141e01, +0.898203e00, -0.134439e01, +0.302369e00}; + +/* parameters for TH_FC */ +static int n_TH_FC = 12; + +/* parameters for TH_FCFO */ +static int n_TH_FCFO = 20; +static FLOAT omega_TH_FCFO[] = + {-0.864448e+00, +0.565130e+00, -0.127306e+01, +0.309681e+00, -0.287658e+00, +0.588767e+00, + -0.252700e+00, +0.223563e-01, +0.140131e-01, -0.826608e-01, +0.556080e-01, -0.936227e-02, + -0.677146e-02, +0.515199e-01, -0.874213e-01, +0.423827e-01, +0.431940e+00, -0.691153e+00, + -0.637866e+00, +0.107565e+01}; + +/* parameters for TH_FCO */ +static int n_TH_FCO = 20; +static FLOAT omega_TH_FCO[] = + {-0.962998e+00, +0.860233e+00, -0.154092e+01, +0.381602e+00, -0.210208e+00, +0.391496e+00, + -0.107660e+00, -0.105324e-01, +0.837384e-02, -0.617859e-01, +0.383072e-01, -0.526905e-02, + -0.381514e-02, +0.321541e-01, -0.568280e-01, +0.288585e-01, +0.368326e+00, -0.328799e+00, + -0.122595e+01, +0.136412e+01}; + +/* parameters for TH1 */ +static int n_TH1 = 21; +static FLOAT a_TH1[] = + {7.0/6.0, 8.0/6.0, 9.0/6.0, 10.0/6.0, 8.0/6.0, 9.0/6.0, 10.0/6.0, + 11.0/6.0, 9.0/6.0, 10.0/6.0, 11.0/6.0, 12.0/6.0, 9.0/6.0, 10.0/6.0, + 11.0/6.0, 12.0/6.0, 7.0/6.0, 8.0/6.0, 9.0/6.0, 10.0/6.0, 1.0}; +static int b_TH1[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0}; +static int c_TH1[] = {0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static int d_TH1[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0}; +static FLOAT omega_TH1[] = + {-0.728255e+00, +0.331699e+00, -0.102946e+01, +0.235703e+00, -0.876221e-01, +0.140854e+00, + +0.336982e-01, -0.353615e-01, +0.497930e-02, -0.645900e-01, +0.461795e-01, -0.757191e-02, + -0.242717e-02, +0.428140e-01, -0.744891e-01, +0.386577e-01, -0.352519e+00, +0.219805e+01 + -0.372927e+01, +0.194441e+01, +0.128877e+00}; + +/* parameters for TH2 */ +static int n_TH2 = 19; +static FLOAT a_TH2[] = + {13.0/12.0, 7.0/6.0, 8.0/6.0, 9.0/6.0, 10.0/6.0, 17.0/12.0, 9.0/6.0, 10.0/6.0, + 11.0/6.0, 10.0/6.0, 11.0/6.0, 12.0/6.0, 10.0/6.0, 11.0/6.0, 12.0/6.0, 7.0/6.0, + 8.0/6.0, 9.0/6.0, 10.0/6.0}; +static int b_TH2[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1}; +static int c_TH2[] = {0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0}; +static int d_TH2[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}; +static FLOAT omega_TH2[] = + {+0.678831e+00, -0.175821e+01, +0.127676e+01, -0.160789e+01, +0.365610e+00, -0.181327e+00, + +0.146973e+00, +0.147141e+00, -0.716917e-01, -0.407167e-01, +0.214625e-01, -0.768156e-03, + +0.310377e-01, -0.720326e-01, +0.446562e-01, -0.266802e+00, +0.150822e+01, -0.194515e+01, + +0.679078e+00}; + +/* parameters for TH3 */ +static int n_TH3 = 19; +static FLOAT a_TH3[] = + {7.0/6.0, 8.0/6.0, 9.0/6.0, 10.0/6.0, 17.0/12.0, 9.0/6.0, 10.0/6.0, 11.0/6.0, + 10.0/6.0, 11.0/6.0, 12.0/6.0, 10.0/6.0, 11.0/6.0, 12.0/6.0, 7.0/6.0, 8.0/6.0, + 9.0/6.0, 10.0/6.0, 13.0/12.0}; +static int b_TH3[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0}; +static int c_TH3[] = {0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0}; +static int d_TH3[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0}; +static FLOAT omega_TH3[] = + {-0.142542e+00, -0.783603e+00, -0.188875e+00, +0.426830e-01, -0.304953e+00, +0.430407e+00, + -0.997699e-01, +0.355789e-02, -0.344374e-01, +0.192108e-01, -0.230906e-02, +0.235189e-01, + -0.331157e-01, +0.121316e-01, +0.441190e+00, -0.227167e+01, +0.403051e+01, -0.228074e+01, + +0.360204e-01}; + +/* parameters for TH4 */ +static int n_TH4 = 19; +static FLOAT omega_TH4[] = + {+0.677353e-01, -0.106763e+01, -0.419018e-01, +0.226313e-01, -0.222478e+00, +0.283432e+00, + -0.165089e-01, -0.167204e-01, -0.332362e-01, +0.162254e-01, -0.984119e-03, +0.376713e-01, + -0.653419e-01, +0.222835e-01, +0.375782e+00, -0.190675e+01, +0.322494e+01, -0.168698e+01, + -0.235810e-01}; + + +static void +gga_xc_th_init(XC(func_type) *p) +{ + gga_xc_th_params *params; + + assert(p->params == NULL); + p->params = (gga_xc_th_params *)malloc(sizeof(gga_xc_th_params)); + params = (gga_xc_th_params *)p->params; + + /* most functionals share the same a, b, c, d */ + params->a = a_TH1; + params->b = b_TH1; + params->c = c_TH1; + params->d = d_TH1; + + switch(p->info->number){ + case XC_GGA_XC_TH_FL: + p->func = 0; + params->n = n_TH_FL; + params->omega = omega_TH_FL; + break; + + case XC_GGA_XC_TH_FC: + p->func = 1; + params->n = n_TH_FC; + params->omega = omega_TH_FCFO; + break; + + case XC_GGA_XC_TH_FCFO: + p->func = 2; + params->n = n_TH_FCFO; + params->omega = omega_TH_FCFO; + break; + + case XC_GGA_XC_TH_FCO: + p->func = 3; + params->n = n_TH_FCO; + params->omega = omega_TH_FCO; + break; + + case XC_GGA_XC_TH1: + p->func = 4; + params->n = n_TH1; + params->omega = omega_TH1; + break; + + case XC_GGA_XC_TH2: + p->func = 5; + params->n = n_TH2; + params->a = a_TH2; + params->b = b_TH2; + params->c = c_TH2; + params->d = d_TH2; + params->omega = omega_TH2; + break; + + case XC_GGA_XC_TH3: + p->func = 6; + params->n = n_TH3; + params->a = a_TH3; + params->b = b_TH3; + params->c = c_TH3; + params->d = d_TH3; + params->omega = omega_TH3; + break; + + case XC_GGA_XC_TH4: + p->func = 7; + params->n = n_TH4; + params->a = a_TH3; + params->b = b_TH3; + params->c = c_TH3; + params->d = d_TH3; + params->omega = omega_TH4; + break; + + default: + fprintf(stderr, "Internal error in gga_xc_th\n"); + exit(1); + } +} + +static inline void +func(const XC(func_type) *p, XC(gga_work_c_t) *r) +{ + gga_xc_th_params *params; + int ii; + FLOAT opz, omz, XX[2], YY; + FLOAT ddens, dXXdxs[2], dXXdz[2], dYYdxt; + FLOAT d2dens, d2XXdxs2[2], d2XXdzxs[2], d2YYdxt2; + + assert(p->params != NULL); + params = (gga_xc_th_params *) p->params; + + opz = 1.0 + r->zeta; + omz = 1.0 - r->zeta; + XX[0] = 0.5*r->xs[0]*opz; + XX[1] = 0.5*r->xs[1]*omz; + YY = 2.0*(XX[0] + XX[1]) - r->xt*r->xt; + + r->f = 0.0; + + if(r->order >= 1){ + ddens = -3.0*r->dens/r->rs; + dXXdxs[0] = 0.5*opz; + dXXdxs[1] = 0.5*omz; + dXXdz[0] = 0.5*r->xs[0]; + dXXdz[1] = -0.5*r->xs[1]; + dYYdxt = -2.0*r->xt; + + r->dfdrs = r->dfdz = r->dfdxt = r->dfdxs[0] = r->dfdxs[1] = 0.0; + } + + if(r->order >= 2){ + d2dens = -4.0*ddens/r->rs; + d2XXdzxs[0] = 0.5; + d2XXdzxs[1] = -0.5; + d2YYdxt2 = -2.0; + + r->d2fdrs2 = r->d2fdrsz = r->d2fdrsxt = r->d2fdrsxs[0] = r->d2fdrsxs[1] = 0.0; + r->d2fdz2 = r->d2fdzxt = r->d2fdzxs[0] = r->d2fdzxs[1] = 0.0; + r->d2fdxt2 = r->d2fdxtxs[0] = r->d2fdxtxs[1] = 0.0; + r->d2fdxs2[0] = r->d2fdxs2[1] = r->d2fdxs2[2] = 0.0; + } + + for(ii=0; iin; ii++){ + FLOAT fz[2], Rid, Ri, Si, Xi, Yi; + FLOAT dfz[2], dRidrs, dRidz, dSidz, dXidz, dXidxs[2], dYidz, dYidxs[2], dYidxt; + FLOAT d2fz[2], d2Ridrs2, d2Ridrsz, d2Ridz2, d2Sidz2, d2Xidz2, d2Xidxs2[2], d2Xidzxs[2], d2Yidxt2, d2Yidxs2[2], d2Yidzxs[2]; + + fz[0] = POW(opz, params->a[ii]); + fz[1] = POW(omz, params->a[ii]); + Rid = POW(r->dens/2.0, params->a[ii]); + Ri = Rid*(fz[0] + fz[1]); + + /* b = 0 || 1 */ + Si = (params->b[ii] == 0) ? 1.0 : r->zeta*r->zeta; + + /* c = 0 || 1 || 2 */ + switch(params->c[ii]){ + case 0: + Xi = 1.0; + break; + case 1: + Xi = 0.5*(XX[0] + XX[1]); + break; + case 2: + Xi = 0.5*(XX[0]*XX[0] + XX[1]*XX[1]); + break; + } + + /* d = 0 || 1 */ + Yi = (params->d[ii] == 0) ? 1.0 : YY; + + /* the parametrization in the paper is for the energy per volume */ + r->f += params->omega[ii]*Ri*Si*Xi*Yi/r->dens; + + if(r->order < 1) continue; + + if(params->a[ii] == 1.0){ + dfz[0] = 1.0; + dfz[1] = -1.0; + }else{ + dfz[0] = (ABS(opz) < p->info->min_zeta) ? 0.0 : params->a[ii]*fz[0]/opz; + dfz[1] = (ABS(omz) < p->info->min_zeta) ? 0.0 : -params->a[ii]*fz[1]/omz; + } + dRidrs = params->a[ii]*Ri*ddens/r->dens; + dRidz = Rid*(dfz[0] + dfz[1]); + + /* b = 0 || 1 */ + dSidz = (params->b[ii] == 0) ? 0.0 : 2.0*r->zeta; + + /* c = 0 || 1 || 2 */ + switch(params->c[ii]){ + case 0: + dXidz = dXidxs[0] = dXidxs[1] = 0.0; + break; + case 1: + dXidz = 0.5*(dXXdz[0] + dXXdz[1]); + dXidxs[0] = 0.5*dXXdxs[0]; + dXidxs[1] = 0.5*dXXdxs[1]; + break; + case 2: + dXidz = (XX[0]*dXXdz[0] + XX[1]*dXXdz[1]); + dXidxs[0] = XX[0]*dXXdxs[0]; + dXidxs[1] = XX[1]*dXXdxs[1]; + break; + } + + /* d = 0 || 1 */ + if(params->d[ii] == 0){ + dYidz = dYidxt = dYidxs[0] = dYidxs[1] = 0.0; + }else{ + dYidz = 2.0*(dXXdz[0] + dXXdz[1]); + dYidxt = dYYdxt; + dYidxs[0] = 2.0*dXXdxs[0]; + dYidxs[1] = 2.0*dXXdxs[1]; + } + + r->dfdrs += params->omega[ii]*(dRidrs - Ri*ddens/r->dens)*Si*Xi*Yi/r->dens; + r->dfdz += params->omega[ii]*(dRidz*Si*Xi*Yi + Ri*dSidz*Xi*Yi + Ri*Si*dXidz*Yi + Ri*Si*Xi*dYidz)/r->dens; + r->dfdxt += params->omega[ii]*Ri*Si*Xi*dYidxt/r->dens; + r->dfdxs[0] += params->omega[ii]*Ri*Si*(dXidxs[0]*Yi + Xi*dYidxs[0])/r->dens; + r->dfdxs[1] += params->omega[ii]*Ri*Si*(dXidxs[1]*Yi + Xi*dYidxs[1])/r->dens; + + if(r->order < 2) continue; + + if(params->a[ii] == 1.0){ + d2fz[0] = d2fz[1] = 0.0; + }else{ + d2fz[0] = (ABS(opz) < p->info->min_zeta) ? 0.0 : (params->a[ii] - 1.0)*dfz[0]/opz; + d2fz[1] = (ABS(omz) < p->info->min_zeta) ? 0.0 : -(params->a[ii] - 1.0)*dfz[1]/omz; + } + d2Ridrs2 = params->a[ii]/r->dens*(dRidrs*ddens + Ri*(d2dens - ddens*ddens/r->dens)); + d2Ridrsz = params->a[ii]*Rid*(ddens/r->dens)*(dfz[0] + dfz[1]); + d2Ridz2 = Rid*(d2fz[0] + d2fz[1]); + + /* b = 0 || 1 */ + d2Sidz2 = (params->b[ii] == 0) ? 0.0 : 2.0; + + /* c = 0 || 1 || 2 */ + switch(params->c[ii]){ + case 0: + d2Xidz2 = d2Xidxs2[0] = d2Xidxs2[1] = d2Xidzxs[0] = d2Xidzxs[1] = 0.0; + break; + case 1: + d2Xidz2 = d2Xidxs2[0] = d2Xidxs2[1] = 0.0; + d2Xidzxs[0] = 0.5*d2XXdzxs[0]; + d2Xidzxs[1] = 0.5*d2XXdzxs[1]; + d2Xidxs2[0] = 0.5*d2XXdxs2[0]; + d2Xidxs2[1] = 0.5*d2XXdxs2[1]; + break; + case 2: + d2Xidz2 = (dXXdz[0]*dXXdz[0] + dXXdz[1]*dXXdz[1]); + d2Xidxs2[0] = dXXdxs[0]*dXXdxs[0]; + d2Xidxs2[1] = dXXdxs[1]*dXXdxs[1]; + d2Xidzxs[0] = dXXdz[0]*dXXdxs[0] + XX[0]*d2XXdzxs[0]; + d2Xidzxs[1] = dXXdz[1]*dXXdxs[1] + XX[1]*d2XXdzxs[1]; + d2Xidxs2[0] = dXXdxs[0]*dXXdxs[0]; + d2Xidxs2[1] = dXXdxs[1]*dXXdxs[1]; + break; + } + + /* d = 0 || 1 */ + if(params->d[ii] == 0){ + d2Yidxt2 = d2Yidxs2[0] = d2Yidxs2[1] = d2Yidzxs[0] = d2Yidzxs[1] = 0.0; + }else{ + d2Yidxt2 = d2YYdxt2; + d2Yidxs2[0] = 2.0*d2XXdxs2[0]; + d2Yidxs2[1] = 2.0*d2XXdxs2[1]; + d2Yidzxs[0] = 2.0*d2XXdzxs[0]; + d2Yidzxs[1] = 2.0*d2XXdzxs[1]; + } + + r->d2fdrs2 += params->omega[ii]*(d2Ridrs2 - 2.0*dRidrs*ddens/r->dens - Ri*(d2dens - 2.0*ddens*ddens/r->dens)/r->dens)*Si*Xi*Yi/r->dens; + r->d2fdrsz += params->omega[ii]* + (- (dRidz*Si*Xi*Yi + Ri*dSidz*Xi*Yi + Ri*Si*dXidz*Yi + Ri*Si*Xi*dYidz)*ddens/r->dens + + (d2Ridrsz*Si*Xi*Yi + dRidrs*dSidz*Xi*Yi + dRidrs*Si*dXidz*Yi + dRidrs*Si*Xi*dYidz))/r->dens; + r->d2fdrsxt += params->omega[ii]*(dRidrs - Ri*ddens/r->dens)*Si*Xi*dYidxt/r->dens;; + r->d2fdrsxs[0] += params->omega[ii]*(dRidrs - Ri*ddens/r->dens)*Si*(dXidxs[0]*Yi + Xi*dYidxs[0])/r->dens; + r->d2fdrsxs[1] += params->omega[ii]*(dRidrs - Ri*ddens/r->dens)*Si*(dXidxs[1]*Yi + Xi*dYidxs[1])/r->dens; + r->d2fdz2 += params->omega[ii]* + (2.0*(dRidz*dSidz*Xi*Yi + dRidz*Si*dXidz*Yi + dRidz*Si*Xi*dYidz + Ri*dSidz*dXidz*Yi + Ri*dSidz*Xi*dYidz + Ri*Si*dXidz*dYidz) + + d2Ridz2*Si*Xi*Yi + Ri*d2Sidz2*Xi*Yi + Ri*Si*d2Xidz2*Yi)/r->dens; + r->d2fdzxt += params->omega[ii]*(dRidz*Si*Xi*dYidxt + Ri*dSidz*Xi*dYidxt + Ri*Si*dXidz*dYidxt)/r->dens; + r->d2fdzxs[0] += params->omega[ii]* + ((dRidz*Si + Ri*dSidz)*(dXidxs[0]*Yi + Xi*dYidxs[0]) + + Ri*Si*(d2Xidzxs[0]*Yi + dXidz*dYidxs[0] + dXidxs[0]*dYidz + Xi*d2Yidzxs[0]))/r->dens; + r->d2fdzxs[1] += params->omega[ii]* + ((dRidz*Si + Ri*dSidz)*(dXidxs[1]*Yi + Xi*dYidxs[1]) + + Ri*Si*(d2Xidzxs[1]*Yi + dXidz*dYidxs[1] + dXidxs[1]*dYidz + Xi*d2Yidzxs[1]))/r->dens; + r->d2fdxt2 += params->omega[ii]*Ri*Si*Xi*d2Yidxt2/r->dens; + r->d2fdxtxs[0] += params->omega[ii]*Ri*Si*dXidxs[0]*dYidxt/r->dens; + r->d2fdxtxs[1] += params->omega[ii]*Ri*Si*dXidxs[1]*dYidxt/r->dens; + r->d2fdxs2[0] += params->omega[ii]*Ri*Si*(d2Xidxs2[0]*Yi + 2.0*dXidxs[0]*dYidxs[0])/r->dens; + r->d2fdxs2[1] += 0.0; + r->d2fdxs2[2] += params->omega[ii]*Ri*Si*(d2Xidxs2[1]*Yi + 2.0*dXidxs[1]*dYidxs[1])/r->dens; + + } +} + +#include "work_gga_c.c" + +const XC(func_info_type) XC(func_info_gga_xc_th_fl) = { + XC_GGA_XC_TH_FL, + XC_EXCHANGE_CORRELATION, + "Tozer and Handy v. FL", + XC_FAMILY_GGA, + "DJ Tozer, NC Handy, amd WH Green, Chem. Phys. Lett. 273, 183-194 (1997)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_th_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_th_fc) = { + XC_GGA_XC_TH_FC, + XC_EXCHANGE_CORRELATION, + "Tozer and Handy v. FC", + XC_FAMILY_GGA, + "DJ Tozer, NC Handy, amd WH Green, Chem. Phys. Lett. 273, 183-194 (1997)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_th_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_th_fcfo) = { + XC_GGA_XC_TH_FCFO, + XC_EXCHANGE_CORRELATION, + "Tozer and Handy v. FCFO", + XC_FAMILY_GGA, + "DJ Tozer, NC Handy, amd WH Green, Chem. Phys. Lett. 273, 183-194 (1997)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_th_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_th_fco) = { + XC_GGA_XC_TH_FCO, + XC_EXCHANGE_CORRELATION, + "Tozer and Handy v. FCO", + XC_FAMILY_GGA, + "DJ Tozer, NC Handy, amd WH Green, Chem. Phys. Lett. 273, 183-194 (1997)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_th_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_th1) = { + XC_GGA_XC_TH1, + XC_EXCHANGE_CORRELATION, + "Tozer and Handy v. 1", + XC_FAMILY_GGA, + "DJ Tozer and NC Handy, J. Chem. Phys. 108, 2545 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_th_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_th2) = { + XC_GGA_XC_TH2, + XC_EXCHANGE_CORRELATION, + "Tozer and Handy v. 2", + XC_FAMILY_GGA, + "DJ Tozer and NC Handy, J. Phys. Chem. A 102, 3162 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_th_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_th3) = { + XC_GGA_XC_TH3, + XC_EXCHANGE_CORRELATION, + "Tozer and Handy v. 3", + XC_FAMILY_GGA, + "DJ Tozer and NC Handy, Mol. Phys. 94, 707 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_th_init, + NULL, NULL, + work_gga_c, + NULL +}; + +const XC(func_info_type) XC(func_info_gga_xc_th4) = { + XC_GGA_XC_TH4, + XC_EXCHANGE_CORRELATION, + "Tozer and Handy v. 4", + XC_FAMILY_GGA, + "DJ Tozer and NC Handy, Mol. Phys. 94, 707 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_th_init, + NULL, NULL, + work_gga_c, + NULL +}; diff --git a/libxc/src/hyb_gga_xc_b1wc.c b/libxc/src/hyb_gga_xc_b1wc.c new file mode 100644 index 000000000..e74201cc6 --- /dev/null +++ b/libxc/src/hyb_gga_xc_b1wc.c @@ -0,0 +1,214 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_HYB_GGA_XC_B1WC 412 /* Becke 1-parameter mixture of WC and PBE */ +#define XC_HYB_GGA_XC_B1LYP 416 /* Becke 1-parameter mixture of B88 and LYP */ +#define XC_HYB_GGA_XC_B1PW91 417 /* Becke 1-parameter mixture of B88 and PW91 */ +#define XC_HYB_GGA_XC_mPW1PW 418 /* Becke 1-parameter mixture of mPW91 and PW91 */ +#define XC_HYB_GGA_XC_mPW1K 405 /* mixture of mPW91 and PW91 optimized for kinetics */ +#define XC_HYB_GGA_XC_BHANDH 435 /* Becke half-and-half */ +#define XC_HYB_GGA_XC_BHANDHLYP 436 /* Becke half-and-half with B88 exchange */ +#define XC_HYB_GGA_XC_MPWLYP1M 453 /* MPW with 1 par. for metals/LYP */ + +void +XC(hyb_gga_xc_b1wc_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_WC, XC_GGA_C_PBE}; + static FLOAT funcs_coef[2] = {1.0 - 0.16, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.16; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_b1wc) = { + XC_HYB_GGA_XC_B1WC, + XC_EXCHANGE_CORRELATION, + "B1WC", + XC_FAMILY_HYB_GGA, + "DI Bilc, R Orlando, R Shaltaf, G-M Rignanese, J Iniguez, and Ph Ghosez, Phys. Rev. B 77, 165107 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_b1wc_init), + NULL, NULL, NULL, NULL +}; + + +void +XC(hyb_gga_xc_b1lyp_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_B88, XC_GGA_C_LYP}; + static FLOAT funcs_coef[2] = {1.0 - 0.25, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.25; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_b1lyp) = { + XC_HYB_GGA_XC_B1LYP, + XC_EXCHANGE_CORRELATION, + "B1LYP", + XC_FAMILY_HYB_GGA, + "C. Adamo, V. Barone, Chem. Phys. Lett. 274, 242 (1997)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_b1lyp_init), + NULL, NULL, NULL, NULL +}; + + +void +XC(hyb_gga_xc_b1pw91_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_B88, XC_GGA_C_PW91}; + static FLOAT funcs_coef[2] = {1.0 - 0.25, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.25; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_b1pw91) = { + XC_HYB_GGA_XC_B1PW91, + XC_EXCHANGE_CORRELATION, + "B1PW91", + XC_FAMILY_HYB_GGA, + "C. Adamo, V. Barone, Chem. Phys. Lett. 274, 242 (1997)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_b1pw91_init), + NULL, NULL, NULL, NULL +}; + + +void +XC(hyb_gga_xc_mpw1pw_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_MPW91, XC_GGA_C_PW91}; + static FLOAT funcs_coef[2] = {1.0 - 0.25, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.25; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_mpw1pw) = { + XC_HYB_GGA_XC_mPW1PW, + XC_EXCHANGE_CORRELATION, + "mPW1PW", + XC_FAMILY_HYB_GGA, + "C. Adamo, V. Barone, J. Chem. Phys. 108, 664 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_mpw1pw_init), + NULL, NULL, NULL, NULL +}; + + +void +XC(hyb_gga_xc_mpw1k_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_MPW91, XC_GGA_C_PW91}; + static FLOAT funcs_coef[2] = {1.0 - 0.428, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.428; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_mpw1k) = { + XC_HYB_GGA_XC_mPW1K, + XC_EXCHANGE_CORRELATION, + "mPW1K", + XC_FAMILY_HYB_GGA, + "BJ Lynch, PL Fast, M Harris, DGJ Truhlar, Phys. Chem. A 104, 4811 (2000)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_mpw1k_init), + NULL, NULL, NULL, NULL +}; + + +void +XC(hyb_gga_xc_bhandh_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_LDA_X, XC_GGA_C_LYP}; + static FLOAT funcs_coef[2] = {0.5, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.5; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_bhandh) = { + XC_HYB_GGA_XC_BHANDH, + XC_EXCHANGE_CORRELATION, + "BHandH", + XC_FAMILY_HYB_GGA, + "AD Becke, J. Chem. Phys., 98 1372-77 (1993)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_bhandh_init), + NULL, NULL, NULL, NULL +}; + + +void +XC(hyb_gga_xc_bhandhlyp_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_B88, XC_GGA_C_LYP}; + static FLOAT funcs_coef[2] = {0.5, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.5; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_bhandhlyp) = { + XC_HYB_GGA_XC_BHANDHLYP, + XC_EXCHANGE_CORRELATION, + "BHandHLYP", + XC_FAMILY_HYB_GGA, + "AD Becke, J. Chem. Phys., 98 1372-77 (1993)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_bhandhlyp_init), + NULL, NULL, NULL, NULL +}; + + +void +XC(hyb_gga_xc_mpwlyp1m_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_MPW91, XC_GGA_C_LYP}; + static FLOAT funcs_coef[2] = {1.0 - 0.05, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.05; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_mpwlyp1m) = { + XC_HYB_GGA_XC_MPWLYP1M, + XC_EXCHANGE_CORRELATION, + "MPW with 1 par. for metals/LYP", + XC_FAMILY_HYB_GGA, + "NE Schultz, Y Zhao, and DG Truhlar, J. Phys. Chem. A 109, 11127-11143 (2005)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_mpwlyp1m_init), + NULL, NULL, NULL, NULL +}; diff --git a/libxc/src/hyb_gga_xc_b3lyp.c b/libxc/src/hyb_gga_xc_b3lyp.c new file mode 100644 index 000000000..8a40cf6f4 --- /dev/null +++ b/libxc/src/hyb_gga_xc_b3lyp.c @@ -0,0 +1,196 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_HYB_GGA_XC_B3PW91 401 /* The original (ACM) hybrid of Becke */ +#define XC_HYB_GGA_XC_B3LYP 402 /* The (in)famous B3LYP */ +#define XC_HYB_GGA_XC_B3P86 403 /* Perdew 86 hybrid similar to B3PW91 */ +#define XC_HYB_GGA_XC_MPW3PW 415 /* mixture with the mPW functional */ +#define XC_HYB_GGA_XC_MPW3LYP 419 /* mixture of mPW and LYP */ +#define XC_HYB_GGA_XC_MB3LYP_RC04 437 /* B3LYP with RC04 LDA */ +#define XC_HYB_GGA_XC_REVB3LYP 454 /* Revised B3LYP */ + +/*************************************************************/ +void +XC(hyb_gga_xc_b3pw91_init)(XC(func_type) *p) +{ + static int funcs_id [4] = {XC_LDA_X, XC_GGA_X_B88, XC_LDA_C_PW, XC_GGA_C_PW91}; + static FLOAT funcs_coef[4] = {1.0 - 0.20 - 0.72, 0.72, 1.0 - 0.81, 0.81}; + + XC(mix_init)(p, 4, funcs_id, funcs_coef); + p->cam_alpha = 0.20; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_b3pw91) = { + XC_HYB_GGA_XC_B3PW91, + XC_EXCHANGE_CORRELATION, + "The original (ACM, B3PW91) hybrid of Becke", + XC_FAMILY_HYB_GGA, + "AD Becke, J. Chem. Phys. 98, 5648 (1993)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_b3pw91_init), + NULL, NULL, NULL, NULL +}; + + +/*************************************************************/ +void +XC(hyb_gga_xc_b3lyp_init)(XC(func_type) *p) +{ + static int funcs_id [4] = {XC_LDA_X, XC_GGA_X_B88, XC_LDA_C_VWN_RPA, XC_GGA_C_LYP}; + static FLOAT funcs_coef[4] = {1.0 - 0.20 - 0.72, 0.72, 1.0 - 0.81, 0.81}; + + XC(mix_init)(p, 4, funcs_id, funcs_coef); + p->cam_alpha = 0.20; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_b3lyp) = { + XC_HYB_GGA_XC_B3LYP, + XC_EXCHANGE_CORRELATION, + "B3LYP", + XC_FAMILY_HYB_GGA, + "PJ Stephens, FJ Devlin, CF Chabalowski, MJ Frisch, J. Phys. Chem. 98 11623 (1994)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_b3lyp_init), + NULL, NULL, NULL, NULL +}; + + +/*************************************************************/ +void +XC(hyb_gga_xc_b3p86_init)(XC(func_type) *p) +{ + static int funcs_id [4] = {XC_LDA_X, XC_GGA_X_B88, XC_LDA_C_VWN_RPA, XC_GGA_C_P86}; + static FLOAT funcs_coef[4] = {1.0 - 0.20 - 0.72, 0.72, 1.0 - 0.81, 0.81}; + + XC(mix_init)(p, 4, funcs_id, funcs_coef); + p->cam_alpha = 0.20; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_b3p86) = { + XC_HYB_GGA_XC_B3P86, + XC_EXCHANGE_CORRELATION, + "B3P86", + XC_FAMILY_HYB_GGA, + "Defined through Gaussian implementation", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_b3p86_init), + NULL, NULL, NULL, NULL +}; + + +/*************************************************************/ +void +XC(hyb_gga_xc_mpw3pw_init)(XC(func_type) *p) +{ + static int funcs_id [4] = {XC_LDA_X, XC_GGA_X_MPW91, XC_LDA_C_VWN_RPA, XC_GGA_C_PW91}; + static FLOAT funcs_coef[4] = {1.0 - 0.20 - 0.72, 0.72, 1.0 - 0.81, 0.81}; + + XC(mix_init)(p, 4, funcs_id, funcs_coef); + p->cam_alpha = 0.20; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_mpw3pw) = { + XC_HYB_GGA_XC_MPW3PW, + XC_EXCHANGE_CORRELATION, + "MPW3PW of Adamo & Barone", + XC_FAMILY_HYB_GGA, + "C Adamo and V Barone, J. Chem. Phys. 108, 664 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_mpw3pw_init), + NULL, NULL, NULL, NULL +}; + + +/*************************************************************/ +void +XC(hyb_gga_xc_mpw3lyp_init)(XC(func_type) *p) +{ + static int funcs_id [4] = {XC_LDA_X, XC_GGA_X_MPW91, XC_LDA_C_VWN_RPA, XC_GGA_C_LYP}; + static FLOAT funcs_coef[4] = {1.0 - 0.218 - 0.709, 0.709, 1.0 - 0.871, 0.871}; + + XC(mix_init)(p, 4, funcs_id, funcs_coef); + p->cam_alpha = 0.218; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_mpw3lyp) = { + XC_HYB_GGA_XC_MPW3LYP, + XC_EXCHANGE_CORRELATION, + "MPW3LYP", + XC_FAMILY_HYB_GGA, + "Y Zhao and DGJ Truhlar, Phys. Chem. A 108, 6908-6918 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_mpw3lyp_init), + NULL, NULL, NULL, NULL +}; + + +/*************************************************************/ +void +XC(hyb_gga_xc_mb3lyp_rc04_init)(XC(func_type) *p) +{ + static int funcs_id [4] = {XC_LDA_X, XC_GGA_X_B88, XC_LDA_C_RC04, XC_GGA_C_LYP}; + static FLOAT funcs_coef[4] = {1.0 - 0.20 - 0.72, 0.72, 1.0 - 0.57*0.81, 0.81}; + + XC(mix_init)(p, 4, funcs_id, funcs_coef); + p->cam_alpha = 0.20; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_mb3lyp_rc04) = { + XC_HYB_GGA_XC_MB3LYP_RC04, + XC_EXCHANGE_CORRELATION, + "B3LYP with RC04 LDA", + XC_FAMILY_HYB_GGA, + "V Tognetti, P Cortona, and C Adamo, Chem. Phys. Lett. 439, 381-385 (2007)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_mb3lyp_rc04_init), + NULL, NULL, NULL, NULL +}; + +/*************************************************************/ +void +XC(hyb_gga_xc_revb3lyp_init)(XC(func_type) *p) +{ + static int funcs_id [4] = {XC_LDA_X, XC_GGA_X_B88, XC_LDA_C_VWN_RPA, XC_GGA_C_LYP}; + static FLOAT funcs_coef[4] = {1.0 - 0.20 - 0.67, 0.67, 1.0 - 0.84, 0.84}; + + XC(mix_init)(p, 4, funcs_id, funcs_coef); + p->cam_alpha = 0.20; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_revb3lyp) = { + XC_HYB_GGA_XC_REVB3LYP, + XC_EXCHANGE_CORRELATION, + "Revised B3LYP", + XC_FAMILY_HYB_GGA, + "L Lua, H Hua, H Houa, B Wang, Comput. Theor. Chem. 1015, 64-71 (2013)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_revb3lyp_init), + NULL, NULL, NULL, NULL +}; diff --git a/libxc/src/hyb_gga_xc_b97.c b/libxc/src/hyb_gga_xc_b97.c new file mode 100644 index 000000000..a39277d3d --- /dev/null +++ b/libxc/src/hyb_gga_xc_b97.c @@ -0,0 +1,209 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_HYB_GGA_XC_B97 407 /* Becke 97 */ +#define XC_HYB_GGA_XC_B97_1 408 /* Becke 97-1 */ +#define XC_HYB_GGA_XC_B97_2 410 /* Becke 97-2 */ +#define XC_HYB_GGA_XC_B97_K 413 /* Boese-Martin for Kinetics */ +#define XC_HYB_GGA_XC_B97_3 414 /* Becke 97-3 */ +#define XC_HYB_GGA_XC_SB98_1a 420 /* Schmider-Becke 98 parameterization 1a */ +#define XC_HYB_GGA_XC_SB98_1b 421 /* Schmider-Becke 98 parameterization 1b */ +#define XC_HYB_GGA_XC_SB98_1c 422 /* Schmider-Becke 98 parameterization 1c */ +#define XC_HYB_GGA_XC_SB98_2a 423 /* Schmider-Becke 98 parameterization 2a */ +#define XC_HYB_GGA_XC_SB98_2b 424 /* Schmider-Becke 98 parameterization 2b */ +#define XC_HYB_GGA_XC_SB98_2c 425 /* Schmider-Becke 98 parameterization 2c */ + +static void +hyb_gga_xc_b97_init(XC(func_type) *p) +{ + const struct { int iGGA; FLOAT a0; } par[] = { + {XC_GGA_XC_B97, 0.1943}, + {XC_GGA_XC_B97_1, 0.21}, + {XC_GGA_XC_B97_2, 0.21}, + {XC_GGA_XC_B97_K, 0.42}, + {XC_GGA_XC_B97_3, 2.692880E-01}, + {XC_GGA_XC_SB98_1a, 0.229015}, + {XC_GGA_XC_SB98_1b, 0.199352}, + {XC_GGA_XC_SB98_1c, 0.192416}, + {XC_GGA_XC_SB98_2a, 0.232055}, + {XC_GGA_XC_SB98_2b, 0.237978}, + {XC_GGA_XC_SB98_2c, 0.219847}, + }; + + int func; + FLOAT one = 1.0; + + switch(p->info->number){ + case XC_HYB_GGA_XC_B97: func = 0; break; + case XC_HYB_GGA_XC_B97_1: func = 1; break; + case XC_HYB_GGA_XC_B97_2: func = 2; break; + case XC_HYB_GGA_XC_B97_K: func = 3; break; + case XC_HYB_GGA_XC_B97_3: func = 4; break; + case XC_HYB_GGA_XC_SB98_1a: func = 5; break; + case XC_HYB_GGA_XC_SB98_1b: func = 6; break; + case XC_HYB_GGA_XC_SB98_1c: func = 7; break; + case XC_HYB_GGA_XC_SB98_2a: func = 8; break; + case XC_HYB_GGA_XC_SB98_2b: func = 9; break; + case XC_HYB_GGA_XC_SB98_2c: func = 10; break; + default: + fprintf(stderr, "Internal error in hyb_gga_xc_b97_init\n"); + exit(1); + break; + } + + XC(mix_init)(p, 1, &(par[func].iGGA), &one); + p->cam_alpha = par[func].a0; +} + + +const XC(func_info_type) XC(func_info_hyb_gga_xc_b97) = { + XC_HYB_GGA_XC_B97, + XC_EXCHANGE_CORRELATION, + "Becke 97", + XC_FAMILY_HYB_GGA, + "AD Becke, J. Chem. Phys. 107, 8554 (1997)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_b97_init, + NULL, NULL, NULL, NULL /* this is taken care by the generic routine */ +}; + +const XC(func_info_type) XC(func_info_hyb_gga_xc_b97_1) = { + XC_HYB_GGA_XC_B97_1, + XC_EXCHANGE_CORRELATION, + "Becke 97-1", + XC_FAMILY_HYB_GGA, + "FA Hamprecht, AJ Cohen, DJ Tozer, and NC Handy, J. Chem. Phys. 109, 6264 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_b97_init, + NULL, NULL, NULL, NULL +}; + +const XC(func_info_type) XC(func_info_hyb_gga_xc_b97_2) = { + XC_HYB_GGA_XC_B97_2, + XC_EXCHANGE_CORRELATION, + "Becke 97-2", + XC_FAMILY_HYB_GGA, + "PJ Wilson, TJ Bradley, and DJ Tozer, J. Chem. Phys. 115, 9233 (2001)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_b97_init, + NULL, NULL, NULL, NULL +}; + +const XC(func_info_type) XC(func_info_hyb_gga_xc_b97_k) = { + XC_HYB_GGA_XC_B97_K, + XC_EXCHANGE_CORRELATION, + "Boese-Martin for Kinetics", + XC_FAMILY_HYB_GGA, + "AD Boese and JML Martin, J. Chem. Phys., Vol. 121, 3405 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_b97_init, + NULL, NULL, NULL, NULL +}; + +const XC(func_info_type) XC(func_info_hyb_gga_xc_b97_3) = { + XC_HYB_GGA_XC_B97_3, + XC_EXCHANGE_CORRELATION, + "Becke 97-3", + XC_FAMILY_HYB_GGA, + "TW Keal and DJ Tozer, J. Chem. Phys. 123, 121103 (2005)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_b97_init, + NULL, NULL, NULL, NULL +}; + +const XC(func_info_type) XC(func_info_hyb_gga_xc_sb98_1a) = { + XC_HYB_GGA_XC_SB98_1a, + XC_EXCHANGE_CORRELATION, + "SB98 (1a)", + XC_FAMILY_HYB_GGA, + "HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_b97_init, + NULL, NULL, NULL, NULL +}; + +const XC(func_info_type) XC(func_info_hyb_gga_xc_sb98_1b) = { + XC_HYB_GGA_XC_SB98_1b, + XC_EXCHANGE_CORRELATION, + "SB98 (1b)", + XC_FAMILY_HYB_GGA, + "HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_b97_init, + NULL, NULL, NULL, NULL +}; + +const XC(func_info_type) XC(func_info_hyb_gga_xc_sb98_1c) = { + XC_HYB_GGA_XC_SB98_1c, + XC_EXCHANGE_CORRELATION, + "SB98 (1c)", + XC_FAMILY_HYB_GGA, + "HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_b97_init, + NULL, NULL, NULL, NULL +}; + +const XC(func_info_type) XC(func_info_hyb_gga_xc_sb98_2a) = { + XC_HYB_GGA_XC_SB98_2a, + XC_EXCHANGE_CORRELATION, + "SB98 (2a)", + XC_FAMILY_HYB_GGA, + "HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_b97_init, + NULL, NULL, NULL, NULL +}; + +const XC(func_info_type) XC(func_info_hyb_gga_xc_sb98_2b) = { + XC_HYB_GGA_XC_SB98_2b, + XC_EXCHANGE_CORRELATION, + "SB98 (2b)", + XC_FAMILY_HYB_GGA, + "HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_b97_init, + NULL, NULL, NULL, NULL +}; + +const XC(func_info_type) XC(func_info_hyb_gga_xc_sb98_2c) = { + XC_HYB_GGA_XC_SB98_2c, + XC_EXCHANGE_CORRELATION, + "SB98 (2c)", + XC_FAMILY_HYB_GGA, + "HL Schmider and AD Becke, J. Chem. Phys. 108, 9624 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_b97_init, + NULL, NULL, NULL, NULL +}; diff --git a/libxc/src/hyb_gga_xc_cam_b3lyp.c b/libxc/src/hyb_gga_xc_cam_b3lyp.c new file mode 100644 index 000000000..36fcef331 --- /dev/null +++ b/libxc/src/hyb_gga_xc_cam_b3lyp.c @@ -0,0 +1,80 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_HYB_GGA_XC_CAM_B3LYP 433 /* CAM version of B3LYP */ +#define XC_HYB_GGA_XC_TUNED_CAM_B3LYP 434 /* CAM version of B3LYP tunes for excitations*/ + +void +XC(hyb_gga_xc_cam_b3lyp_init)(XC(func_type) *p) +{ + static FLOAT ac = 0.81; + static int funcs_id [4] = {XC_GGA_X_B88, XC_GGA_X_ITYH, XC_LDA_C_VWN, XC_GGA_C_LYP}; + static FLOAT funcs_coef[4]; + + switch(p->info->number){ + case XC_HYB_GGA_XC_CAM_B3LYP: + p->cam_omega = 0.33; + p->cam_alpha = 0.19; + p->cam_beta = 0.46; + break; + case XC_HYB_GGA_XC_TUNED_CAM_B3LYP: + p->cam_omega = 0.150; + p->cam_alpha = 0.0799; + p->cam_beta = 0.9201; + break; + } + + funcs_coef[0] = 1.0 - p->cam_alpha - p->cam_beta; + funcs_coef[1] = p->cam_beta; + funcs_coef[2] = 1.0 - ac; + funcs_coef[3] = ac; + + XC(mix_init)(p, 4, funcs_id, funcs_coef); + + XC(gga_x_ityh_set_params)(p->func_aux[1], XC_GGA_X_B88, p->cam_omega); +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_cam_b3lyp) = { + XC_HYB_GGA_XC_CAM_B3LYP, + XC_EXCHANGE_CORRELATION, + "CAM version of B3LYP", + XC_FAMILY_HYB_GGA, + "T Yanai, DP Tew, NC Handy, Chem. Phys. Lett. 393, 51-57 (2004)", + XC_FLAGS_3D | XC_FLAGS_HYB_CAM | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_cam_b3lyp_init), + NULL, NULL, NULL, NULL +}; + + +const XC(func_info_type) XC(func_info_hyb_gga_xc_tuned_cam_b3lyp) = { + XC_HYB_GGA_XC_TUNED_CAM_B3LYP, + XC_EXCHANGE_CORRELATION, + "CAM version of B3LYP", + XC_FAMILY_HYB_GGA, + "K Okuno, Y Shigeta, R Kishi, H Miyasaka, M Nakano, J. Photochem. Photobiol., A 235, 29-34 (2012)", + XC_FLAGS_3D | XC_FLAGS_HYB_CAM | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_cam_b3lyp_init), + NULL, NULL, NULL, NULL +}; diff --git a/libxc/src/hyb_gga_xc_camy_blyp.c b/libxc/src/hyb_gga_xc_camy_blyp.c new file mode 100644 index 000000000..ccd17b858 --- /dev/null +++ b/libxc/src/hyb_gga_xc_camy_blyp.c @@ -0,0 +1,58 @@ +/* + Copyright (C) 2013 Rolf Wuerdemann, M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_HYB_GGA_XC_CAMY_BLYP 455 /* BLYP with yukawa screening */ + +void +XC(hyb_gga_xc_camy_blyp_init)(XC(func_type) *p) +{ + static int funcs_id [3] = {XC_GGA_X_B88, XC_GGA_X_SFAT, XC_GGA_C_LYP}; + static FLOAT funcs_coef[3]; + + p->cam_alpha = 0.20; + p->cam_beta = 0.80; + p->cam_omega = 0.44; /* we use omega for gamma here, 'cause + both denote dampening parameters for + range related interactions */ + + funcs_coef[0] = 1.0 - p->cam_alpha - p->cam_beta; + funcs_coef[1] = p->cam_beta; /* 1.0 - p->cam_alpha - p->cam_beta? */ + funcs_coef[2] = 1.0; + + XC(mix_init)(p, 3, funcs_id, funcs_coef); + + XC(gga_x_sfat_set_params)(p->func_aux[1], XC_GGA_X_B88, p->cam_omega); +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_camy_blyp) = { + XC_HYB_GGA_XC_CAMY_BLYP, + XC_EXCHANGE_CORRELATION, + "CAMY version of BLYP", + XC_FAMILY_HYB_GGA, + "Y Akinaga, S Ten-no, Chem. Phys. Lett. 462, 348-351 (2008)", + XC_FLAGS_3D | XC_FLAGS_HYB_CAM | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + XC(hyb_gga_xc_camy_blyp_init), + NULL, NULL, NULL, NULL +}; + diff --git a/libxc/src/hyb_gga_xc_hse.c b/libxc/src/hyb_gga_xc_hse.c new file mode 100644 index 000000000..7edc9031a --- /dev/null +++ b/libxc/src/hyb_gga_xc_hse.c @@ -0,0 +1,195 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_HYB_GGA_XC_HSE03 427 /* the 2003 version of the screened hybrid HSE */ +#define XC_HYB_GGA_XC_HSE06 428 /* the 2006 version of the screened hybrid HSE */ +#define XC_HYB_GGA_XC_HJS_PBE 429 /* HJS hybrid screened exchange PBE version */ +#define XC_HYB_GGA_XC_HJS_PBE_SOL 430 /* HJS hybrid screened exchange PBE_SOL version */ +#define XC_HYB_GGA_XC_HJS_B88 431 /* HJS hybrid screened exchange B88 version */ +#define XC_HYB_GGA_XC_HJS_B97X 432 /* HJS hybrid screened exchange B97x version */ + +static void +hyb_gga_xc_hse_init(XC(func_type) *p) +{ + static int funcs_id [3] = {XC_GGA_X_WPBEH, XC_GGA_X_WPBEH, XC_GGA_C_PBE}; + static FLOAT funcs_coef[3] = {1.0, -0.25, 1.0}; + + XC(mix_init)(p, 3, funcs_id, funcs_coef); + + /* Note that there is an enormous mess in the literature concerning + the values of omega in HSE. This is due to an error in the + original paper that stated that they had used omega=0.15. This + was in fact not true, and the real value used was omega^HF = + 0.15/sqrt(2) ~ 0.1061 and omega^PBE = 0.15*cbrt(2) ~ 0.1890. In + 2006 Krukau et al [JCP 125, 224106 (2006)] tried to clarify the + situation, and called HSE03 to the above choice of parameters, + and called HSE06 to the functional where omega^HF=omega^PBE. By + testing several properties for atoms they reached the conclusion + that the best value for omega=0.11. + + Of course, codes are just as messy as the papers. In espresso + HSE06 has the value omega=0.106. VASP, on the other hand, uses + for HSE03 the same value omega^HF = omega^PBE = 0.3 (A^-1) ~ + 0.1587 and for HSE06 omega^HF = omega^PBE = 0.2 (A^-1) ~ 0.1058. + + We try to follow the original definition of the functional. The + default omega for XC_GGA_X_WPBEH is zero, so WPBEh reduces to + PBEh + */ + switch(p->info->number){ + case XC_HYB_GGA_XC_HSE03: + /* in this case one should use omega^HF = 0.15/sqrt(2) and + omega^PBE = 0.15*CBRT(2.0)*/ + p->cam_omega = 0.15/M_SQRT2; + XC(hyb_gga_xc_hse_set_params)(p, 0.25, 0.15*CBRT(2.0)); + break; + case XC_HYB_GGA_XC_HSE06: + /* in this case one should use omega^HF = omega^PBE = 0.11 */ + p->cam_omega = 0.11; + XC(hyb_gga_xc_hse_set_params)(p, 0.25, 0.11); + break; + default: + fprintf(stderr, "Internal error in hyb_gga_xc_hse\n"); + exit(1); + } +} + + +void +XC(hyb_gga_xc_hse_set_params)(XC(func_type) *p, FLOAT beta, FLOAT omega) +{ + assert(p != NULL && p->func_aux[1] != NULL); + assert(beta>=0.0 && beta<=1.0); + + p->cam_beta = beta; + p->mix_coef[1] = -beta; + XC(gga_x_wpbeh_set_params)(p->func_aux[1], omega); +} + + +const XC(func_info_type) XC(func_info_hyb_gga_xc_hse03) = { + XC_HYB_GGA_XC_HSE03, + XC_EXCHANGE_CORRELATION, + "HSE03", + XC_FAMILY_HYB_GGA, + "J Heyd, GE Scuseria, and M Ernzerhof, J. Chem. Phys. 118, 8207 (2003)\n" + "J Heyd, GE Scuseria, and M Ernzerhof, J. Chem. Phys. 124, 219906 (2006)", + XC_FLAGS_3D | XC_FLAGS_HYB_CAM | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_hse_init, + NULL, NULL, NULL, NULL +}; + +const XC(func_info_type) XC(func_info_hyb_gga_xc_hse06) = { + XC_HYB_GGA_XC_HSE06, + XC_EXCHANGE_CORRELATION, + "HSE06", + XC_FAMILY_HYB_GGA, + "J Heyd, GE Scuseria, and M Ernzerhof, J. Chem. Phys. 118, 8207 (2003)\n" + "J Heyd, GE Scuseria, and M Ernzerhof, J. Chem. Phys. 124, 219906 (2006)\n" + "AV Krukau, OA Vydrov, AF Izmaylov, and GE Scuseria, J. Chem. Phys. 125, 224106 (2006)", + XC_FLAGS_3D | XC_FLAGS_HYB_CAM | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_hse_init, + NULL, NULL, NULL, NULL +}; + + +static void +hyb_gga_xc_hjs_init(XC(func_type) *p) +{ + static int funcs_id [3] = {-1, -1, XC_GGA_C_PBE}; + static FLOAT funcs_coef[3] = {1.0, -0.25, 1.0}; + + p->cam_omega = 0.11; + p->cam_beta = 0.25; + + switch(p->info->number){ + case XC_HYB_GGA_XC_HJS_PBE: + funcs_id[0] = funcs_id[1] = XC_GGA_X_HJS_PBE; + break; + case XC_HYB_GGA_XC_HJS_PBE_SOL: + funcs_id[0] = funcs_id[1] = XC_GGA_X_HJS_PBE_SOL; + break; + case XC_HYB_GGA_XC_HJS_B88: + funcs_id[0] = funcs_id[1] = XC_GGA_X_HJS_B88; + break; + case XC_HYB_GGA_XC_HJS_B97X: + funcs_id[0] = funcs_id[1] = XC_GGA_X_HJS_B97X; + break; + default: + fprintf(stderr, "Internal error in hyb_gga_xc_hjs\n"); + exit(1); + } + + XC(mix_init)(p, 3, funcs_id, funcs_coef); + XC(gga_x_hjs_set_params)(p->func_aux[1], p->cam_omega); +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_hjs_pbe) = { + XC_HYB_GGA_XC_HJS_PBE, + XC_EXCHANGE_CORRELATION, + "HJS hybrid screened exchange PBE version", + XC_FAMILY_HYB_GGA, + "TM Henderson, BG Janesko, and GE Scuseria, J. Chem. Phys. 128, 194105 (2008)", + XC_FLAGS_3D | XC_FLAGS_HYB_CAM | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_hjs_init, + NULL, NULL, NULL, NULL +}; + +const XC(func_info_type) XC(func_info_hyb_gga_xc_hjs_pbe_sol) = { + XC_HYB_GGA_XC_HJS_PBE_SOL, + XC_EXCHANGE_CORRELATION, + "HJS hybrid screened exchange PBE_SOL version", + XC_FAMILY_HYB_GGA, + "TM Henderson, BG Janesko, and GE Scuseria, J. Chem. Phys. 128, 194105 (2008)", + XC_FLAGS_3D | XC_FLAGS_HYB_CAM | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_hjs_init, + NULL, NULL, NULL, NULL +}; + +const XC(func_info_type) XC(func_info_hyb_gga_xc_hjs_b88) = { + XC_HYB_GGA_XC_HJS_B88, + XC_EXCHANGE_CORRELATION, + "HJS hybrid screened exchange B88 version", + XC_FAMILY_HYB_GGA, + "TM Henderson, BG Janesko, and GE Scuseria, J. Chem. Phys. 128, 194105 (2008)", + XC_FLAGS_3D | XC_FLAGS_HYB_CAM | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_hjs_init, + NULL, NULL, NULL, NULL +}; + +const XC(func_info_type) XC(func_info_hyb_gga_xc_hjs_b97x) = { + XC_HYB_GGA_XC_HJS_B97X, + XC_EXCHANGE_CORRELATION, + "HJS hybrid screened exchange B97x version", + XC_FAMILY_HYB_GGA, + "TM Henderson, BG Janesko, and GE Scuseria, J. Chem. Phys. 128, 194105 (2008)", + XC_FLAGS_3D | XC_FLAGS_HYB_CAM | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_hjs_init, + NULL, NULL, NULL, NULL +}; diff --git a/libxc/src/hyb_gga_xc_o3lyp.c b/libxc/src/hyb_gga_xc_o3lyp.c new file mode 100644 index 000000000..d4ea003b1 --- /dev/null +++ b/libxc/src/hyb_gga_xc_o3lyp.c @@ -0,0 +1,89 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_HYB_GGA_XC_O3LYP 404 /* hybrid using the optx functional */ +#define XC_HYB_GGA_XC_X3LYP 411 /* maybe the best hybrid */ + + +/*************************************************************/ +static void +gga_xc_o3lyp_init(XC(func_type) *p) +{ + const FLOAT a0 = 0.1161, b0 = 0.9262, ax = 0.8133, ac = 0.81; + static int funcs_id [4] = {XC_LDA_X, XC_GGA_X_OPTX, XC_LDA_C_VWN, XC_GGA_C_LYP}; + FLOAT funcs_coef[4]; + + funcs_coef[0] = b0 - ax; + funcs_coef[1] = ax; + funcs_coef[2] = 1.0 - ac; + funcs_coef[3] = ac; + + XC(mix_init)(p, 4, funcs_id, funcs_coef); + XC(lda_c_vwn_set_params)(p->func_aux[2], 1); + p->cam_alpha = a0; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_o3lyp) = { + XC_HYB_GGA_XC_O3LYP, + XC_EXCHANGE_CORRELATION, + "O3LYP", + XC_FAMILY_HYB_GGA, + "AJ Cohen, NC Handy, Mol. Phys. 99 607 (2001)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_o3lyp_init, + NULL, NULL, NULL, NULL +}; + + +/*************************************************************/ +static void +gga_xc_x3lyp_init(XC(func_type) *p) +{ + const FLOAT a1=0.675, a2=0.235; + const FLOAT a0=0.218, ax=0.709, ac=0.871; + + static int funcs_id[5] = {XC_LDA_X, XC_GGA_X_B88, XC_GGA_X_PW91, XC_LDA_C_VWN_RPA, XC_GGA_C_LYP}; + FLOAT funcs_coef[5]; + + funcs_coef[0] = 1.0 - a0 - ax*(a1 + a2);; + funcs_coef[1] = ax*a1; + funcs_coef[2] = ax*a2; + funcs_coef[3] = 1.0 - ac; + funcs_coef[4] = ac; + + XC(mix_init)(p, 5, funcs_id, funcs_coef); + p->cam_alpha = a0; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_x3lyp) = { + XC_HYB_GGA_XC_X3LYP, + XC_EXCHANGE_CORRELATION, + "X3LYP", + XC_FAMILY_HYB_GGA, + "X Xu, WA Goddard, III, PNAS 101, 2673 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + gga_xc_x3lyp_init, + NULL, NULL, NULL, NULL +}; diff --git a/libxc/src/hyb_gga_xc_pbeh.c b/libxc/src/hyb_gga_xc_pbeh.c new file mode 100644 index 000000000..e661f5d93 --- /dev/null +++ b/libxc/src/hyb_gga_xc_pbeh.c @@ -0,0 +1,82 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_HYB_GGA_XC_PBEH 406 /* aka PBE0 or PBE1PBE */ +#define XC_HYB_GGA_XC_PBE0_13 456 /* PBE0-1/3 */ + +static void +hyb_gga_xc_pbeh_init(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_PBE, XC_GGA_C_PBE}; + static FLOAT funcs_coef[2] = {1.0 - 0.25, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.25; +} + +void +XC(hyb_gga_xc_pbeh_set_params)(XC(func_type) *p, FLOAT alpha) +{ + assert(alpha>=0 && alpha<=1.0); + + p->cam_alpha = alpha; + p->mix_coef[0] = 1.0 - alpha; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_pbeh) = { + XC_HYB_GGA_XC_PBEH, + XC_EXCHANGE_CORRELATION, + "PBEH (PBE0)", + XC_FAMILY_HYB_GGA, + "C Adamo and V Barone, J. Chem. Phys. 110, 6158 (1999)\n" + "M. Ernzerhof, G. E. Scuseria, J. Chem. Phys. 110, 5029 (1999)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_pbeh_init, + NULL, NULL, NULL, NULL /* this is taken care by the generic routine */ +}; + + +static void +hyb_gga_xc_pbe0_13_init(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_PBE, XC_GGA_C_PBE}; + static FLOAT funcs_coef[2] = {1.0 - 1.0/3.0, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 1.0/3.0; +} + +const XC(func_info_type) XC(func_info_hyb_gga_xc_pbe0_13) = { + XC_HYB_GGA_XC_PBE0_13, + XC_EXCHANGE_CORRELATION, + "PBE0-1/3", + XC_FAMILY_HYB_GGA, + "P Cortona, J. Chem. Phys. 136, 086101 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_gga_xc_pbe0_13_init, + NULL, NULL, NULL, NULL /* this is taken care by the generic routine */ +}; + + diff --git a/libxc/src/hyb_mgga_xc_m05.c b/libxc/src/hyb_mgga_xc_m05.c new file mode 100644 index 000000000..4df04ced8 --- /dev/null +++ b/libxc/src/hyb_mgga_xc_m05.c @@ -0,0 +1,437 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_HYB_MGGA_XC_M05 438 /* M05 functional of Minnesota */ +#define XC_HYB_MGGA_XC_M05_2X 439 /* M05-2X functional of Minnesota */ +#define XC_HYB_MGGA_XC_B88B95 440 /* Mixture of B88 with BC95 (B1B95) */ +#define XC_HYB_MGGA_XC_B86B95 441 /* Mixture of B86 with BC95 */ +#define XC_HYB_MGGA_XC_PW86B95 442 /* Mixture of PW86 with BC95 */ +#define XC_HYB_MGGA_XC_BB1K 443 /* Mixture of B88 with BC95 from Zhao and Truhlar */ +#define XC_HYB_MGGA_XC_MPW1B95 445 /* Mixture of mPW91 with BC95 from Zhao and Truhlar */ +#define XC_HYB_MGGA_XC_MPWB1K 446 /* Mixture of mPW91 with BC95 for kinetics */ +#define XC_HYB_MGGA_XC_X1B95 447 /* Mixture of X with BC95 */ +#define XC_HYB_MGGA_XC_XB1K 448 /* Mixture of X with BC95 for kinetics */ +#define XC_HYB_MGGA_XC_M06_HF 444 /* M06-HF functional of Minnesota */ +#define XC_HYB_MGGA_XC_M06 449 /* M06 functional of Minnesota */ +#define XC_HYB_MGGA_XC_M06_2X 450 /* M06-2X functional of Minnesota */ +#define XC_HYB_MGGA_XC_PW6B95 451 /* Mixture of PW91 with BC95 from Zhao and Truhlar */ +#define XC_HYB_MGGA_XC_PWB6K 452 /* Mixture of PW91 with BC95 from Zhao and Truhlar for kinetics */ +#define XC_MGGA_XC_TPSSLYP1W 242 /* Functionals fitted for water */ + +/*************************************************************/ +void +XC(hyb_mgga_xc_m05_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_MGGA_X_M05, XC_MGGA_C_M05}; + static FLOAT funcs_coef[2] = {1.0 - 0.28, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.28; +} + +XC(func_info_type) XC(func_info_hyb_mgga_xc_m05) = { + XC_HYB_MGGA_XC_M05, + XC_EXCHANGE_CORRELATION, + "M05 functional of Minnesota", + XC_FAMILY_HYB_MGGA, + "Y Zhao, NE Schultz, and DG Truhlar, J. Chem. Phys. 123, 161103 (2005)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + XC(hyb_mgga_xc_m05_init), + NULL, NULL, NULL, NULL, +}; + + +/*************************************************************/ +void +XC(hyb_mgga_xc_m05_2x_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_MGGA_X_M05_2X, XC_MGGA_C_M05_2X}; + static FLOAT funcs_coef[2] = {1.0 - 0.56, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.56; +} + +XC(func_info_type) XC(func_info_hyb_mgga_xc_m05_2x) = { + XC_HYB_MGGA_XC_M05_2X, + XC_EXCHANGE_CORRELATION, + "M05-2X functional of Minnesota", + XC_FAMILY_HYB_MGGA, + "Y Zhao, NE Schultz, and DG Truhlar, J. Chem. Theory Comput. 2, 364 (2006)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + XC(hyb_mgga_xc_m05_2x_init), + NULL, NULL, NULL, NULL, +}; + + +/*************************************************************/ +void +XC(hyb_mgga_xc_b88b95_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_B88, XC_MGGA_C_BC95}; + static FLOAT funcs_coef[2] = {1.0 - 0.28, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.28; +} + +XC(func_info_type) XC(func_info_hyb_mgga_xc_b88b95) = { + XC_HYB_MGGA_XC_B88B95, + XC_EXCHANGE_CORRELATION, + "Mixture of B88 with BC95 (B1B95)", + XC_FAMILY_HYB_MGGA, + "A Becke, J. Chem. Phys. 104, 1040 (1996)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + XC(hyb_mgga_xc_b88b95_init), + NULL, NULL, NULL, NULL, +}; + + +/*************************************************************/ +void +XC(hyb_mgga_xc_b86b95_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_B86, XC_MGGA_C_BC95}; + static FLOAT funcs_coef[2] = {1.0 - 0.28, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.28; +} + +XC(func_info_type) XC(func_info_hyb_mgga_xc_b86b95) = { + XC_HYB_MGGA_XC_B86B95, + XC_EXCHANGE_CORRELATION, + "Mixture of B86 with BC95", + XC_FAMILY_HYB_MGGA, + "A Becke, J. Chem. Phys. 104, 1040 (1996)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + XC(hyb_mgga_xc_b86b95_init), + NULL, NULL, NULL, NULL, +}; + + +/*************************************************************/ +void +XC(hyb_mgga_xc_pw86b95_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_PW86, XC_MGGA_C_BC95}; + static FLOAT funcs_coef[2] = {1.0 - 0.29, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.29; +} + +XC(func_info_type) XC(func_info_hyb_mgga_xc_pw86b95) = { + XC_HYB_MGGA_XC_PW86B95, + XC_EXCHANGE_CORRELATION, + "Mixture of PW86 with BC95", + XC_FAMILY_HYB_MGGA, + "A Becke, J. Chem. Phys. 104, 1040 (1996)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + XC(hyb_mgga_xc_pw86b95_init), + NULL, NULL, NULL, NULL, +}; + + +/*************************************************************/ +void +XC(hyb_mgga_xc_bb1k_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_B88, XC_MGGA_C_BC95}; + static FLOAT funcs_coef[2] = {1.0 - 0.42, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.42; +} + +XC(func_info_type) XC(func_info_hyb_mgga_xc_bb1k) = { + XC_HYB_MGGA_XC_BB1K, + XC_EXCHANGE_CORRELATION, + "Mixture of B88 with BC95 from Zhao and Truhlar", + XC_FAMILY_HYB_MGGA, + "Y Zhao and DG Truhlar, J. Phys. Chem. A 108, 2715 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + XC(hyb_mgga_xc_bb1k_init), + NULL, NULL, NULL, NULL, +}; + + +/*************************************************************/ +void +XC(hyb_mgga_xc_mpw1b95_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_MPW91, XC_MGGA_C_BC95}; + static FLOAT funcs_coef[2] = {1.0 - 0.31, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.31; +} + +XC(func_info_type) XC(func_info_hyb_mgga_xc_mpw1b95) = { + XC_HYB_MGGA_XC_MPW1B95, + XC_EXCHANGE_CORRELATION, + "Mixture of mPW91 with BC95 from Zhao and Truhlar", + XC_FAMILY_HYB_MGGA, + "Y Zhao and DG Truhlar, J. Phys. Chem. A 108, 6908-6918 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + XC(hyb_mgga_xc_mpw1b95_init), + NULL, NULL, NULL, NULL, +}; + + +/*************************************************************/ +void +XC(hyb_mgga_xc_mpwb1k_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_MPW91, XC_MGGA_C_BC95}; + static FLOAT funcs_coef[2] = {1.0 - 0.44, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.44; +} + +XC(func_info_type) XC(func_info_hyb_mgga_xc_mpwb1k) = { + XC_HYB_MGGA_XC_MPWB1K, + XC_EXCHANGE_CORRELATION, + "Mixture of mPW91 with BC95 for kinetics", + XC_FAMILY_HYB_MGGA, + "Y Zhao and DG Truhlar, J. Phys. Chem. A 108, 6908-6918 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + XC(hyb_mgga_xc_mpwb1k_init), + NULL, NULL, NULL, NULL, +}; + + +/*************************************************************/ +void +XC(hyb_mgga_xc_x1b95_init)(XC(func_type) *p) +{ + const FLOAT a1=0.675, a2=0.235, a0=0.30; + + static int funcs_id [3] = {XC_GGA_X_B88, XC_GGA_X_PW91, XC_MGGA_C_BC95}; + FLOAT funcs_coef[3]; + + funcs_coef[0] = a0*a1; + funcs_coef[1] = a0*a2; + funcs_coef[2] = 1.0; + + XC(mix_init)(p, 3, funcs_id, funcs_coef); + p->cam_alpha = a0; +} + +XC(func_info_type) XC(func_info_hyb_mgga_xc_x1b95) = { + XC_HYB_MGGA_XC_X1B95, + XC_EXCHANGE_CORRELATION, + "Mixture of X with BC95", + XC_FAMILY_HYB_MGGA, + "Y Zhao and DG Truhlar, J. Phys. Chem. A 108, 6908-6918 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + XC(hyb_mgga_xc_x1b95_init), + NULL, NULL, NULL, NULL, +}; + + +/*************************************************************/ +void +XC(hyb_mgga_xc_xb1k_init)(XC(func_type) *p) +{ + const FLOAT a1=0.675, a2=0.235, a0=0.43; + + static int funcs_id [3] = {XC_GGA_X_B88, XC_GGA_X_PW91, XC_MGGA_C_BC95}; + FLOAT funcs_coef[3]; + + funcs_coef[0] = a0*a1; + funcs_coef[1] = a0*a2; + funcs_coef[2] = 1.0; + + XC(mix_init)(p, 3, funcs_id, funcs_coef); + p->cam_alpha = a0; +} + +XC(func_info_type) XC(func_info_hyb_mgga_xc_xb1k) = { + XC_HYB_MGGA_XC_XB1K, + XC_EXCHANGE_CORRELATION, + "Mixture of X with BC95 for kinetics", + XC_FAMILY_HYB_MGGA, + "Y Zhao and DG Truhlar, J. Phys. Chem. A 108, 6908-6918 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + XC(hyb_mgga_xc_xb1k_init), + NULL, NULL, NULL, NULL, +}; + + +/*************************************************************/ +void +XC(hyb_mgga_xc_m06_hf_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_MGGA_X_M06_HF, XC_MGGA_C_M06_HF}; + FLOAT funcs_coef[2] = {1.0, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 1.0; +} + +const XC(func_info_type) XC(func_info_hyb_mgga_xc_m06_hf) = { + XC_HYB_MGGA_XC_M06_HF, + XC_EXCHANGE_CORRELATION, + "M06-HF functional of Minnesota", + XC_FAMILY_HYB_MGGA, + "Y Zhao and DG Truhlar, J. Phys. Chem. A 110, 13126 (2006)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + XC(hyb_mgga_xc_m06_hf_init), + NULL, NULL, NULL, NULL +}; + + +/*************************************************************/ +void +XC(hyb_mgga_xc_m06_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_MGGA_X_M06, XC_MGGA_C_M06}; + FLOAT funcs_coef[2] = {1.0, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.27; +} + +const XC(func_info_type) XC(func_info_hyb_mgga_xc_m06) = { + XC_HYB_MGGA_XC_M06, + XC_EXCHANGE_CORRELATION, + "M06 functional of Minnesota", + XC_FAMILY_HYB_MGGA, + "Y Zhao and DG Truhlar, Theor. Chem. Acc. 120, 215 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + XC(hyb_mgga_xc_m06_init), + NULL, NULL, NULL, NULL +}; + + +/*************************************************************/ +void +XC(hyb_mgga_xc_m06_2x_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_MGGA_X_M06_2X, XC_MGGA_C_M06_2X}; + FLOAT funcs_coef[2] = {1.0, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.54; +} + +const XC(func_info_type) XC(func_info_hyb_mgga_xc_m06_2x) = { + XC_HYB_MGGA_XC_M06_2X, + XC_EXCHANGE_CORRELATION, + "M06-2X functional of Minnesota", + XC_FAMILY_HYB_MGGA, + "Y Zhao and DG Truhlar, Theor. Chem. Acc. 120, 215 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + XC(hyb_mgga_xc_m06_2x_init), + NULL, NULL, NULL, NULL +}; + + +/*************************************************************/ +void +XC(hyb_mgga_xc_pw6b95_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_PW91, XC_MGGA_C_BC95}; + static FLOAT funcs_coef[2] = {1.0 - 0.28, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + XC(gga_x_pw91_set_params2)(p->func_aux[0], 0.00538, 1.7382/(X2S*X2S), 3.8901); + XC(mgga_c_bc95_set_params)(p->func_aux[1], 0.03668, 0.00262); + p->cam_alpha = 0.28; +} + +XC(func_info_type) XC(func_info_hyb_mgga_xc_pw6b95) = { + XC_HYB_MGGA_XC_PW6B95, + XC_EXCHANGE_CORRELATION, + "Mixture of PW91 with BC95 from Zhao and Truhlar", + XC_FAMILY_HYB_MGGA, + "Y Zhao and DG Truhlar, J. Phys. Chem. A 109, 5656-5667 (2005)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + XC(hyb_mgga_xc_pw6b95_init), + NULL, NULL, NULL, NULL, +}; + + +/*************************************************************/ +void +XC(hyb_mgga_xc_pwb6k_init)(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_PW91, XC_MGGA_C_BC95}; + static FLOAT funcs_coef[2] = {1.0 - 0.46, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + XC(gga_x_pw91_set_params2)(p->func_aux[0], 0.00539, 1.7077/(X2S*X2S), 4.0876); + XC(mgga_c_bc95_set_params)(p->func_aux[1], 0.04120, 0.00353); + p->cam_alpha = 0.46; +} + +XC(func_info_type) XC(func_info_hyb_mgga_xc_pwb6k) = { + XC_HYB_MGGA_XC_PWB6K, + XC_EXCHANGE_CORRELATION, + "Mixture of PW91 with BC95 from Zhao and Truhlar for kinetics", + XC_FAMILY_HYB_MGGA, + "Y Zhao and DG Truhlar, J. Phys. Chem. A 109, 5656-5667 (2005)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + XC(hyb_mgga_xc_pwb6k_init), + NULL, NULL, NULL, NULL, +}; + + +/*************************************************************/ +static void +mgga_xc_tpsslyp1w_init(XC(func_type) *p) +{ + static int funcs_id [3] = {XC_LDA_C_VWN, XC_MGGA_X_TPSS, XC_GGA_C_LYP}; + static FLOAT funcs_coef[3] = {1.0 - 74.0/100.0, 1.0, 74.0/100.0}; + + XC(mix_init)(p, 3, funcs_id, funcs_coef); +} + +const XC(func_info_type) XC(func_info_mgga_xc_tpsslyp1w) = { + XC_MGGA_XC_TPSSLYP1W, + XC_EXCHANGE_CORRELATION, + "TPSSLYP1W", + XC_FAMILY_MGGA, + "EE Dahlke and DG Truhlar, J. Phys. Chem. B 109, 15677 (2005)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 0.0, 1e-32, + mgga_xc_tpsslyp1w_init, + NULL, NULL, NULL, NULL +}; diff --git a/libxc/src/hyb_mgga_xc_tpssh.c b/libxc/src/hyb_mgga_xc_tpssh.c new file mode 100644 index 000000000..4170ff850 --- /dev/null +++ b/libxc/src/hyb_mgga_xc_tpssh.c @@ -0,0 +1,88 @@ +/* + Copyright (C) 2014 Susi Lehtola + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_HYB_MGGA_XC_TPSSH 457 /* TPSS hybrid */ +#define XC_HYB_MGGA_XC_REVTPSSH 458 /* revTPSS hybrid */ + +static void +hyb_mgga_xc_tpssh_init(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_MGGA_X_TPSS, XC_MGGA_C_TPSS}; + static FLOAT funcs_coef[2] = {0.9, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.10; +} + +void +XC(hyb_mgga_xc_tpssh_set_params)(XC(func_type) *p, FLOAT alpha) +{ + assert(alpha>=0 && alpha<=1.0); + + p->cam_alpha = alpha; + p->mix_coef[0] = 1.0 - alpha; +} + +const XC(func_info_type) XC(func_info_hyb_mgga_xc_tpssh) = { + XC_HYB_MGGA_XC_TPSSH, + XC_EXCHANGE_CORRELATION, + "TPSSh", + XC_FAMILY_HYB_MGGA, + "V. N. Staroverov, G. E. Scuseria, J. Tao and J. P. Perdew, J. Chem. Phys. 119, 12129 (2003)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_mgga_xc_tpssh_init, + NULL, NULL, NULL, NULL /* this is taken care by the generic routine */ +}; + + +static void +hyb_mgga_xc_revtpssh_init(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_MGGA_X_REVTPSS, XC_MGGA_C_REVTPSS}; + static FLOAT funcs_coef[2] = {0.9, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + p->cam_alpha = 0.10; +} + +void +XC(hyb_mgga_xc_revtpssh_set_params)(XC(func_type) *p, FLOAT alpha) +{ + assert(alpha>=0 && alpha<=1.0); + + p->cam_alpha = alpha; + p->mix_coef[0] = 1.0 - alpha; +} + +const XC(func_info_type) XC(func_info_hyb_mgga_xc_revtpssh) = { + XC_HYB_MGGA_XC_REVTPSSH, + XC_EXCHANGE_CORRELATION, + "revTPSSh", + XC_FAMILY_HYB_MGGA, + "G. I. Csonka, J. P. Perdew, and A. Ruzsinszky, J. Chem. Theory Comput. 6, 3688 (2010)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + hyb_mgga_xc_revtpssh_init, + NULL, NULL, NULL, NULL /* this is taken care by the generic routine */ +}; diff --git a/libxc/src/integrate.c b/libxc/src/integrate.c new file mode 100644 index 000000000..435fff2b9 --- /dev/null +++ b/libxc/src/integrate.c @@ -0,0 +1,1144 @@ + +/* + Copyright (C) 2001-2004 the R Development Core Team + Copyright (C) 2009 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + DAG integration from QUADPACK + + This code has been adapted from + R : A Computer Language for Statistical Data Analysis +*/ + +#include +#include +#include +#include + + +#define FALSE 0 +#define TRUE 1 + +FLOAT XC(integrate)(integr_fn func, void *ex, FLOAT a, FLOAT b) +{ + FLOAT epsabs, epsrel, result, abserr, *alist, *blist, *rlist, *elist; + int limit, neval, ierr, *iord, last; + +#ifdef SINGLE_PRECISION + epsabs = 1e-5; + epsrel = 1e-5; +#else + epsabs = 1e-10; + epsrel = 1e-10; +#endif + + limit = 1000; + alist = (FLOAT *)malloc(limit*sizeof(FLOAT)); + blist = (FLOAT *)malloc(limit*sizeof(FLOAT)); + rlist = (FLOAT *)malloc(limit*sizeof(FLOAT)); + elist = (FLOAT *)malloc(limit*sizeof(FLOAT)); + iord = (int *)malloc(limit*sizeof(int)); + + XC(rdqagse)(func, ex, &a, &b, &epsabs, &epsrel, &limit, &result, &abserr, &neval, &ierr, + alist, blist, rlist, elist, iord, &last); + + free(alist); + free(blist); + free(rlist); + free(elist); + free(iord); + + return result; +} + +/* f2c-ed translations + modifications of QUADPACK functions from here down */ + +static void rdqk21(integr_fn f, void *ex, + FLOAT *, FLOAT *, FLOAT *, FLOAT *, FLOAT *, FLOAT *); + +static void rdqpsrt(int *, int *, int *, FLOAT *, FLOAT *, int *, int *); + +static void rdqelg(int *, FLOAT *, FLOAT *, FLOAT *, FLOAT *, int *); + +void XC(rdqagse)(integr_fn f, void *ex, FLOAT *a, FLOAT *b, + FLOAT *epsabs, FLOAT *epsrel, int *limit, FLOAT *result, + FLOAT *abserr, int *neval, int *ier, FLOAT *alist__, + FLOAT *blist, FLOAT *rlist, FLOAT *elist, int *iord, int *last) +{ + /* Local variables */ + int noext, extrap; + int k,ksgn, nres; + int ierro; + int ktmin, nrmax; + int iroff1, iroff2, iroff3; + int id; + int numrl2; + int jupbnd; + int maxerr; + FLOAT res3la[3]; + FLOAT rlist2[52]; + FLOAT abseps, area, area1, area2, area12, dres, epmach; + FLOAT a1, a2, b1, b2, defabs, defab1, defab2, oflow, uflow, resabs, reseps; + FLOAT error1, error2, erro12, errbnd, erlast, errmax, errsum; + + FLOAT correc = 0.0, erlarg = 0.0, ertest = 0.0, small = 0.0; + /* + ***begin prologue dqagse + ***date written 800101 (yymmdd) + ***revision date 830518 (yymmdd) + ***category no. h2a1a1 + ***keywords automatic integrator, general-purpose, + (end point) singularities, extrapolation, + globally adaptive + ***author piessens,robert,appl. math. & progr. div. - k.u.leuven + de doncker,elise,appl. math. & progr. div. - k.u.leuven + ***purpose the routine calculates an approximation result to a given + definite integral i = integral of f over (a,b), + hopefully satisfying following claim for accuracy + abs(i-result) <= max(epsabs,epsrel*abs(i)). + ***description + + computation of a definite integral + standard fortran subroutine + FLOAT precision version + + parameters + on entry + f - FLOAT precision + function subprogram defining the integrand + function f(x). the actual name for f needs to be + declared e x t e r n a l in the driver program. + + a - FLOAT precision + lower limit of integration + + b - FLOAT precision + upper limit of integration + + epsabs - FLOAT precision + absolute accuracy requested + epsrel - FLOAT precision + relative accuracy requested + if epsabs <= 0 + and epsrel < max(50*rel.mach.acc.,0.5d-28), + the routine will end with ier = 6. + + limit - int + gives an upperbound on the number of subintervals + in the partition of (a,b) + + on return + result - FLOAT precision + approximation to the integral + + abserr - FLOAT precision + estimate of the modulus of the absolute error, + which should equal or exceed abs(i-result) + + neval - int + number of integrand evaluations + + ier - int + ier = 0 normal and reliable termination of the + routine. it is assumed that the requested + accuracy has been achieved. + ier > 0 abnormal termination of the routine + the estimates for integral and error are + less reliable. it is assumed that the + requested accuracy has not been achieved. + error messages + = 1 maximum number of subdivisions allowed + has been achieved. one can allow more sub- + divisions by increasing the value of limit + (and taking the according dimension + adjustments into account). however, if + this yields no improvement it is advised + to analyze the integrand in order to + determine the integration difficulties. if + the position of a local difficulty can be + determined (e.g. singularity, + discontinuity within the interval) one + will probably gain from splitting up the + interval at this point and calling the + integrator on the subranges. if possible, + an appropriate special-purpose integrator + should be used, which is designed for + handling the type of difficulty involved. + = 2 the occurrence of roundoff error is detec- + ted, which prevents the requested + tolerance from being achieved. + the error may be under-estimated. + = 3 extremely bad integrand behaviour + occurs at some points of the integration + interval. + = 4 the algorithm does not converge. + roundoff error is detected in the + extrapolation table. + it is presumed that the requested + tolerance cannot be achieved, and that the + returned result is the best which can be + obtained. + = 5 the integral is probably divergent, or + slowly convergent. it must be noted that + divergence can occur with any other value + of ier. + = 6 the input is invalid, because + epsabs <= 0 and + epsrel < max(50*rel.mach.acc.,0.5d-28). + result, abserr, neval, last, rlist(1), + iord(1) and elist(1) are set to zero. + alist(1) and blist(1) are set to a and b + respectively. + + alist - FLOAT precision + vector of dimension at least limit, the first + last elements of which are the left end points + of the subintervals in the partition of the + given integration range (a,b) + + blist - FLOAT precision + vector of dimension at least limit, the first + last elements of which are the right end points + of the subintervals in the partition of the given + integration range (a,b) + + rlist - FLOAT precision + vector of dimension at least limit, the first + last elements of which are the integral + approximations on the subintervals + + elist - FLOAT precision + vector of dimension at least limit, the first + last elements of which are the moduli of the + absolute error estimates on the subintervals + + iord - int + vector of dimension at least limit, the first k + elements of which are pointers to the + error estimates over the subintervals, + such that elist(iord(1)), ..., elist(iord(k)) + form a decreasing sequence, with k = last + if last <= (limit/2+2), and k = limit+1-last + otherwise + + last - int + number of subintervals actually produced in the + subdivision process + + ***references (none) + ***routines called dqelg,dqk21,dqpsrt + ***end prologue dqagse + + + + the dimension of rlist2 is determined by the value of + limexp in subroutine dqelg (rlist2 should be of dimension + (limexp+2) at least). + + list of major variables + ----------------------- + + alist - list of left end points of all subintervals + considered up to now + blist - list of right end points of all subintervals + considered up to now + rlist(i) - approximation to the integral over + (alist(i),blist(i)) + rlist2 - array of dimension at least limexp+2 containing + the part of the epsilon table which is still + needed for further computations + elist(i) - error estimate applying to rlist(i) + maxerr - pointer to the interval with largest error + estimate + errmax - elist(maxerr) + erlast - error on the interval currently subdivided + (before that subdivision has taken place) + area - sum of the integrals over the subintervals + errsum - sum of the errors over the subintervals + errbnd - requested accuracy max(epsabs,epsrel* + abs(result)) + *****1 - variable for the left interval + *****2 - variable for the right interval + last - index for subdivision + nres - number of calls to the extrapolation routine + numrl2 - number of elements currently in rlist2. if an + appropriate approximation to the compounded + integral has been obtained it is put in + rlist2(numrl2) after numrl2 has been increased + by one. + small - length of the smallest interval considered up + to now, multiplied by 1.5 + erlarg - sum of the errors over the intervals larger + than the smallest interval considered up to now + extrap - logical variable denoting that the routine is + attempting to perform extrapolation i.e. before + subdividing the smallest interval we try to + decrease the value of erlarg. + noext - logical variable denoting that extrapolation + is no longer allowed (true value) + + machine dependent constants + --------------------------- + + epmach is the largest relative spacing. + uflow is the smallest positive magnitude. + oflow is the largest positive magnitude. */ + + /* ***first executable statement dqagse */ + /* Parameter adjustments */ + --iord; + --elist; + --rlist; + --blist; + --alist__; + + /* Function Body */ + epmach = FLOAT_EPSILON; + + /* test on validity of parameters */ + /* ------------------------------ */ + *ier = 0; + *neval = 0; + *last = 0; + *result = 0.; + *abserr = 0.; + alist__[1] = *a; + blist[1] = *b; + rlist[1] = 0.; + elist[1] = 0.; + if (*epsabs <= 0. && *epsrel < max(epmach * 50., 5e-29)) { + *ier = 6; + return; + } + + /* first approximation to the integral */ + /* ----------------------------------- */ + + uflow = FLOAT_MIN; + oflow = FLOAT_MAX; + ierro = 0; + rdqk21(f, ex, a, b, result, abserr, &defabs, &resabs); + + /* test on accuracy. */ + + dres = ABS(*result); + errbnd = max(*epsabs, *epsrel * dres); + *last = 1; + rlist[1] = *result; + elist[1] = *abserr; + iord[1] = 1; + if (*abserr <= epmach * 100. * defabs && *abserr > errbnd) + *ier = 2; + if (*limit == 1) + *ier = 1; + if (*ier != 0 || (*abserr <= errbnd && *abserr != resabs) + || *abserr == 0.) goto L140; + + /* initialization */ + /* -------------- */ + + rlist2[0] = *result; + errmax = *abserr; + maxerr = 1; + area = *result; + errsum = *abserr; + *abserr = oflow; + nrmax = 1; + nres = 0; + numrl2 = 2; + ktmin = 0; + extrap = FALSE; + noext = FALSE; + iroff1 = 0; + iroff2 = 0; + iroff3 = 0; + ksgn = -1; + if (dres >= (1. - epmach * 50.) * defabs) { + ksgn = 1; + } + + /* main do-loop */ + /* ------------ */ + + for (*last = 2; *last <= *limit; ++(*last)) { + + /* bisect the subinterval with the nrmax-th largest error estimate. */ + + a1 = alist__[maxerr]; + b1 = (alist__[maxerr] + blist[maxerr]) * .5; + a2 = b1; + b2 = blist[maxerr]; + erlast = errmax; + rdqk21(f, ex, &a1, &b1, &area1, &error1, &resabs, &defab1); + rdqk21(f, ex, &a2, &b2, &area2, &error2, &resabs, &defab2); + + /* improve previous approximations to integral + and error and test for accuracy. */ + + area12 = area1 + area2; + erro12 = error1 + error2; + errsum = errsum + erro12 - errmax; + area = area + area12 - rlist[maxerr]; + if (defab1 == error1 || defab2 == error2) { + goto L15; + } + if (ABS(rlist[maxerr] - area12) > ABS(area12) * 1e-5 || + erro12 < errmax * .99) { + goto L10; + } + if (extrap) { + ++iroff2; + } + if (! extrap) { + ++iroff1; + } + L10: + if (*last > 10 && erro12 > errmax) { + ++iroff3; + } + L15: + rlist[maxerr] = area1; + rlist[*last] = area2; + errbnd = max(*epsabs, *epsrel * ABS(area)); + + /* test for roundoff error and eventually set error flag. */ + + if (iroff1 + iroff2 >= 10 || iroff3 >= 20) + *ier = 2; + if (iroff2 >= 5) + ierro = 3; + + /* set error flag in the case that the number of subintervals equals limit. */ + if (*last == *limit) + *ier = 1; + + /* set error flag in the case of bad integrand behaviour + at a point of the integration range. */ + + if (max(ABS(a1), ABS(b2)) <= + (epmach * 100. + 1.) * (ABS(a2) + uflow * 1e3)) { + *ier = 4; + } + + /* append the newly-created intervals to the list. */ + + if (error2 > error1) { + alist__[maxerr] = a2; + alist__[*last] = a1; + blist[*last] = b1; + rlist[maxerr] = area2; + rlist[*last] = area1; + elist[maxerr] = error2; + elist[*last] = error1; + } else { + alist__[*last] = a2; + blist[maxerr] = b1; + blist[*last] = b2; + elist[maxerr] = error1; + elist[*last] = error2; + } + + /* call subroutine dqpsrt to maintain the descending ordering + in the list of error estimates and select the subinterval + with nrmax-th largest error estimate (to be bisected next). */ + + /*L30:*/ + rdqpsrt(limit, last, &maxerr, &errmax, &elist[1], &iord[1], &nrmax); + + if (errsum <= errbnd) goto L115;/* ***jump out of do-loop */ + if (*ier != 0) goto L100;/* ***jump out of do-loop */ + + if (*last == 2) goto L80; + if (noext) goto L90; + + erlarg -= erlast; + if (ABS(b1 - a1) > small) { + erlarg += erro12; + } + if (extrap) { + goto L40; + } + + /* test whether the interval to be bisected next is the + smallest interval. */ + + if (ABS(blist[maxerr] - alist__[maxerr]) > small) { + goto L90; + } + extrap = TRUE; + nrmax = 2; + L40: + if (ierro == 3 || erlarg <= ertest) { + goto L60; + } + + /* the smallest interval has the largest error. + before bisecting decrease the sum of the errors over the + larger intervals (erlarg) and perform extrapolation. */ + + id = nrmax; + jupbnd = *last; + if (*last > *limit / 2 + 2) { + jupbnd = *limit + 3 - *last; + } + for (k = id; k <= jupbnd; ++k) { + maxerr = iord[nrmax]; + errmax = elist[maxerr]; + if (ABS(blist[maxerr] - alist__[maxerr]) > small) { + goto L90;/* ***jump out of do-loop */ + } + ++nrmax; + /* L50: */ + } + + /* perform extrapolation. */ + + L60: + ++numrl2; + rlist2[numrl2 - 1] = area; + rdqelg(&numrl2, rlist2, &reseps, &abseps, res3la, &nres); + ++ktmin; + if (ktmin > 5 && *abserr < errsum * .001) { + *ier = 5; + } + if (abseps >= *abserr) { + goto L70; + } + ktmin = 0; + *abserr = abseps; + *result = reseps; + correc = erlarg; + ertest = max(*epsabs, *epsrel * ABS(reseps)); + if (*abserr <= ertest) { + goto L100;/* ***jump out of do-loop */ + } + + /* prepare bisection of the smallest interval. */ + + L70: + if (numrl2 == 1) { + noext = TRUE; + } + if (*ier == 5) { + goto L100; + } + maxerr = iord[1]; + errmax = elist[maxerr]; + nrmax = 1; + extrap = FALSE; + small *= .5; + erlarg = errsum; + goto L90; + L80: + small = ABS(*b - *a) * .375; + erlarg = errsum; + ertest = errbnd; + rlist2[1] = area; + L90: + ; + } + + + L100:/* set final result and error estimate. */ + /* ------------------------------------ */ + if (*abserr == oflow) goto L115; + if (*ier + ierro == 0) goto L110; + if (ierro == 3) + *abserr += correc; + if (*ier == 0) + *ier = 3; + if (*result != 0. && area != 0.) goto L105; + if (*abserr > errsum) goto L115; + if (area == 0.) goto L130; + goto L110; + + L105: + if (*abserr / ABS(*result) > errsum / ABS(area)) { + goto L115; + } + + L110:/* test on divergence. */ + if (ksgn == -1 && max(ABS(*result), ABS(area)) <= defabs * .01) { + goto L130; + } + if (.01 > *result / area || *result / area > 100. || errsum > ABS(area)) { + *ier = 5; + } + goto L130; + + L115:/* compute global integral sum. */ + *result = 0.; + for (k = 1; k <= *last; ++k) + *result += rlist[k]; + *abserr = errsum; + L130: + if (*ier > 2) + L140: + *neval = *last * 42 - 21; + + return; +} /* rdqagse_ */ + + +static void rdqelg(int *n, FLOAT *epstab, FLOAT * + result, FLOAT *abserr, FLOAT *res3la, int *nres) +{ + /* Local variables */ + int i__, indx, ib, ib2, ie, k1, k2, k3, num, newelm, limexp; + FLOAT delta1, delta2, delta3, e0, e1, e1abs, e2, e3, epmach, epsinf; + FLOAT oflow, ss, res; + FLOAT errA, err1, err2, err3, tol1, tol2, tol3; + + /* ***begin prologue dqelg + ***refer to dqagie,dqagoe,dqagpe,dqagse + ***revision date 830518 (yymmdd) + ***keywords epsilon algorithm, convergence acceleration, + extrapolation +***author piessens,robert,appl. math. & progr. div. - k.u.leuven + de doncker,elise,appl. math & progr. div. - k.u.leuven +***purpose the routine determines the limit of a given sequence of + approximations, by means of the epsilon algorithm of + p.wynn. an estimate of the absolute error is also given. + the condensed epsilon table is computed. only those + elements needed for the computation of the next diagonal + are preserved. +***description + + epsilon algorithm + standard fortran subroutine + FLOAT precision version + + parameters + n - int + epstab(n) contains the new element in the + first column of the epsilon table. + + epstab - FLOAT precision + vector of dimension 52 containing the elements + of the two lower diagonals of the triangular + epsilon table. the elements are numbered + starting at the right-hand corner of the + triangle. + + result - FLOAT precision + resulting approximation to the integral + + abserr - FLOAT precision + estimate of the absolute error computed from + result and the 3 previous results + + res3la - FLOAT precision + vector of dimension 3 containing the last 3 + results + + nres - int + number of calls to the routine + (should be zero at first call) + +***end prologue dqelg + + + list of major variables + ----------------------- + + e0 - the 4 elements on which the computation of a new + e1 element in the epsilon table is based + e2 + e3 e0 + e3 e1 new + e2 + + newelm - number of elements to be computed in the new diagonal + errA - errA = abs(e1-e0)+abs(e2-e1)+abs(new-e2) + result - the element in the new diagonal with least value of errA + + machine dependent constants + --------------------------- + + epmach is the largest relative spacing. + oflow is the largest positive magnitude. + limexp is the maximum number of elements the epsilon + table can contain. if this number is reached, the upper + diagonal of the epsilon table is deleted. */ + +/* ***first executable statement dqelg */ + /* Parameter adjustments */ + --res3la; + --epstab; + + /* Function Body */ + epmach = FLOAT_EPSILON; + oflow = FLOAT_MAX; + ++(*nres); + *abserr = oflow; + *result = epstab[*n]; + if (*n < 3) { + goto L100; + } + limexp = 50; + epstab[*n + 2] = epstab[*n]; + newelm = (*n - 1) / 2; + epstab[*n] = oflow; + num = *n; + k1 = *n; + for (i__ = 1; i__ <= newelm; ++i__) { + k2 = k1 - 1; + k3 = k1 - 2; + res = epstab[k1 + 2]; + e0 = epstab[k3]; + e1 = epstab[k2]; + e2 = res; + e1abs = ABS(e1); + delta2 = e2 - e1; + err2 = ABS(delta2); + tol2 = max(ABS(e2), e1abs) * epmach; + delta3 = e1 - e0; + err3 = ABS(delta3); + tol3 = max(e1abs, ABS(e0)) * epmach; + if (err2 <= tol2 && err3 <= tol3) { + /* if e0, e1 and e2 are equal to within machine + accuracy, convergence is assumed. */ + *result = res;/* result = e2 */ + *abserr = err2 + err3;/* abserr = ABS(e1-e0)+ABS(e2-e1) */ + + goto L100; /* ***jump out of do-loop */ + } + + e3 = epstab[k1]; + epstab[k1] = e1; + delta1 = e1 - e3; + err1 = ABS(delta1); + tol1 = max(e1abs, ABS(e3)) * epmach; + + /* if two elements are very close to each other, omit + a part of the table by adjusting the value of n */ + + if (err1 > tol1 && err2 > tol2 && err3 > tol3) { + ss = 1. / delta1 + 1. / delta2 - 1. / delta3; + epsinf = ABS(ss * e1); + + /* test to detect irregular behaviour in the table, and + eventually omit a part of the table adjusting the value of n. */ + + if (epsinf > 1e-4) { + goto L30; + } + } + + *n = i__ + i__ - 1; + goto L50;/* ***jump out of do-loop */ + + + L30:/* compute a new element and eventually adjust the value of result. */ + + res = e1 + 1. / ss; + epstab[k1] = res; + k1 += -2; + errA = err2 + ABS(res - e2) + err3; + if (errA <= *abserr) { + *abserr = errA; + *result = res; + } + } + + /* shift the table. */ + + L50: + if (*n == limexp) { + *n = (limexp / 2 << 1) - 1; + } + + if (num / 2 << 1 == num) ib = 2; else ib = 1; + ie = newelm + 1; + for (i__ = 1; i__ <= ie; ++i__) { + ib2 = ib + 2; + epstab[ib] = epstab[ib2]; + ib = ib2; + } + if (num != *n) { + indx = num - *n + 1; + for (i__ = 1; i__ <= *n; ++i__) { + epstab[i__] = epstab[indx]; + ++indx; + } + } + /*L80:*/ + if (*nres >= 4) { + /* L90: */ + *abserr = ABS(*result - res3la[3]) + + ABS(*result - res3la[2]) + + ABS(*result - res3la[1]); + res3la[1] = res3la[2]; + res3la[2] = res3la[3]; + res3la[3] = *result; + } else { + res3la[*nres] = *result; + *abserr = oflow; + } + + L100:/* compute error estimate */ + *abserr = max(*abserr, epmach * 5. * ABS(*result)); + return; +} /* rdqelg_ */ + +static void rdqk21(integr_fn f, void *ex, FLOAT *a, FLOAT *b, FLOAT *result, + FLOAT *abserr, FLOAT *resabs, FLOAT *resasc) +{ + /* Initialized data */ + + static FLOAT wg[5] = { .066671344308688137593568809893332, + .149451349150580593145776339657697, + .219086362515982043995534934228163, + .269266719309996355091226921569469, + .295524224714752870173892994651338 }; + static FLOAT xgk[11] = { .995657163025808080735527280689003, + .973906528517171720077964012084452, + .930157491355708226001207180059508, + .865063366688984510732096688423493, + .780817726586416897063717578345042, + .679409568299024406234327365114874, + .562757134668604683339000099272694, + .433395394129247190799265943165784, + .294392862701460198131126603103866, + .14887433898163121088482600112972,0. }; + static FLOAT wgk[11] = { .011694638867371874278064396062192, + .03255816230796472747881897245939, + .05475589657435199603138130024458, + .07503967481091995276704314091619, + .093125454583697605535065465083366, + .109387158802297641899210590325805, + .123491976262065851077958109831074, + .134709217311473325928054001771707, + .142775938577060080797094273138717, + .147739104901338491374841515972068, + .149445554002916905664936468389821 }; + + + /* Local variables */ + FLOAT fv1[10], fv2[10], vec[21]; + FLOAT absc, resg, resk, fsum, fval1, fval2; + FLOAT hlgth, centr, reskh, uflow; + FLOAT fc, epmach, dhlgth; + int j, jtw, jtwm1; + +/* ***begin prologue dqk21 +***date written 800101 (yymmdd) +***revision date 830518 (yymmdd) +***category no. h2a1a2 +***keywords 21-point gauss-kronrod rules +***author piessens,robert,appl. math. & progr. div. - k.u.leuven + de doncker,elise,appl. math. & progr. div. - k.u.leuven +***purpose to compute i = integral of f over (a,b), with error + estimate + j = integral of abs(f) over (a,b) +***description + + integration rules + standard fortran subroutine + FLOAT precision version + + parameters + on entry + f - FLOAT precision + function subprogram defining the integrand + function f(x). the actual name for f needs to be + declared e x t e r n a l in the driver program. + + a - FLOAT precision + lower limit of integration + + b - FLOAT precision + upper limit of integration + + on return + result - FLOAT precision + approximation to the integral i + result is computed by applying the 21-point + kronrod rule (resk) obtained by optimal addition + of abscissae to the 10-point gauss rule (resg). + + abserr - FLOAT precision + estimate of the modulus of the absolute error, + which should not exceed abs(i-result) + + resabs - FLOAT precision + approximation to the integral j + + resasc - FLOAT precision + approximation to the integral of abs(f-i/(b-a)) + over (a,b) + +***references (none) +***end prologue dqk21 + + + + the abscissae and weights are given for the interval (-1,1). + because of symmetry only the positive abscissae and their + corresponding weights are given. + + xgk - abscissae of the 21-point kronrod rule + xgk(2), xgk(4), ... abscissae of the 10-point + gauss rule + xgk(1), xgk(3), ... abscissae which are optimally + added to the 10-point gauss rule + + wgk - weights of the 21-point kronrod rule + + wg - weights of the 10-point gauss rule + + +gauss quadrature weights and kronron quadrature abscissae and weights +as evaluated with 80 decimal digit arithmetic by l. w. fullerton, +bell labs, nov. 1981. + + + + + + list of major variables + ----------------------- + + centr - mid point of the interval + hlgth - half-length of the interval + absc - abscissa + fval* - function value + resg - result of the 10-point gauss formula + resk - result of the 21-point kronrod formula + reskh - approximation to the mean value of f over (a,b), + i.e. to i/(b-a) + + + machine dependent constants + --------------------------- + + epmach is the largest relative spacing. + uflow is the smallest positive magnitude. */ + +/* ***first executable statement dqk21 */ + epmach = FLOAT_EPSILON; + uflow = FLOAT_MIN; + + centr = (*a + *b) * .5; + hlgth = (*b - *a) * .5; + dhlgth = ABS(hlgth); + + /* compute the 21-point kronrod approximation to + the integral, and estimate the absolute error. */ + + resg = 0.; + vec[0] = centr; + for (j = 1; j <= 5; ++j) { + jtw = j << 1; + absc = hlgth * xgk[jtw - 1]; + vec[(j << 1) - 1] = centr - absc; + /* L5: */ + vec[j * 2] = centr + absc; + } + for (j = 1; j <= 5; ++j) { + jtwm1 = (j << 1) - 1; + absc = hlgth * xgk[jtwm1 - 1]; + vec[(j << 1) + 9] = centr - absc; + vec[(j << 1) + 10] = centr + absc; + } + f(vec, 21, ex); + fc = vec[0]; + resk = wgk[10] * fc; + *resabs = ABS(resk); + for (j = 1; j <= 5; ++j) { + jtw = j << 1; + absc = hlgth * xgk[jtw - 1]; + fval1 = vec[(j << 1) - 1]; + fval2 = vec[j * 2]; + fv1[jtw - 1] = fval1; + fv2[jtw - 1] = fval2; + fsum = fval1 + fval2; + resg += wg[j - 1] * fsum; + resk += wgk[jtw - 1] * fsum; + *resabs += wgk[jtw - 1] * (ABS(fval1) + ABS(fval2)); + /* L10: */ + } + for (j = 1; j <= 5; ++j) { + jtwm1 = (j << 1) - 1; + absc = hlgth * xgk[jtwm1 - 1]; + fval1 = vec[(j << 1) + 9]; + fval2 = vec[(j << 1) + 10]; + fv1[jtwm1 - 1] = fval1; + fv2[jtwm1 - 1] = fval2; + fsum = fval1 + fval2; + resk += wgk[jtwm1 - 1] * fsum; + *resabs += wgk[jtwm1 - 1] * (ABS(fval1) + ABS(fval2)); + /* L15: */ + } + reskh = resk * .5; + *resasc = wgk[10] * ABS(fc - reskh); + for (j = 1; j <= 10; ++j) { + *resasc += wgk[j - 1] * (ABS(fv1[j - 1] - reskh) + + ABS(fv2[j - 1] - reskh)); + /* L20: */ + } + *result = resk * hlgth; + *resabs *= dhlgth; + *resasc *= dhlgth; + *abserr = ABS((resk - resg) * hlgth); + if (*resasc != 0. && *abserr != 0.) { + *abserr = *resasc * min(1., POW(*abserr * 200. / *resasc, 1.5)); + } + if (*resabs > uflow / (epmach * 50.)) { + *abserr = max(epmach * 50. * *resabs, *abserr); + } + return; +} /* rdqk21_ */ + + +static void rdqpsrt(int *limit, int *last, int *maxerr, + FLOAT *ermax, FLOAT *elist, int *iord, int *nrmax) +{ + /* Local variables */ + int i, j, k, ido, jbnd, isucc, jupbn; + FLOAT errmin, errmax; + +/* ***begin prologue dqpsrt + ***refer to dqage,dqagie,dqagpe,dqawse + ***routines called (none) + ***revision date 810101 (yymmdd) + ***keywords sequential sorting + ***author piessens,robert,appl. math. & progr. div. - k.u.leuven + de doncker,elise,appl. math. & progr. div. - k.u.leuven + ***purpose this routine maintains the descending ordering in the + list of the local error estimated resulting from the + interval subdivision process. at each call two error + estimates are inserted using the sequential search + method, top-down for the largest error estimate and + bottom-up for the smallest error estimate. + ***description + + ordering routine + standard fortran subroutine + FLOAT precision version + + parameters (meaning at output) + limit - int + maximum number of error estimates the list + can contain + + last - int + number of error estimates currently in the list + + maxerr - int + maxerr points to the nrmax-th largest error + estimate currently in the list + + ermax - FLOAT precision + nrmax-th largest error estimate + ermax = elist(maxerr) + + elist - FLOAT precision + vector of dimension last containing + the error estimates + + iord - int + vector of dimension last, the first k elements + of which contain pointers to the error + estimates, such that + elist(iord(1)),..., elist(iord(k)) + form a decreasing sequence, with + k = last if last <= (limit/2+2), and + k = limit+1-last otherwise + + nrmax - int + maxerr = iord(nrmax) + +***end prologue dqpsrt +*/ + + + /* Parameter adjustments */ + --iord; + --elist; + + /* Function Body */ + + /* check whether the list contains more than + two error estimates. */ + if (*last <= 2) { + iord[1] = 1; + iord[2] = 2; + goto Last; + } + /* this part of the routine is only executed if, due to a + difficult integrand, subdivision increased the error + estimate. in the normal case the insert procedure should + start after the nrmax-th largest error estimate. */ + + errmax = elist[*maxerr]; + if (*nrmax > 1) { + ido = *nrmax - 1; + for (i = 1; i <= ido; ++i) { + isucc = iord[*nrmax - 1]; + if (errmax <= elist[isucc]) + break; /* out of for-loop */ + iord[*nrmax] = isucc; + --(*nrmax); + /* L20: */ + } + } + + /*L30: compute the number of elements in the list to be maintained + in descending order. this number depends on the number of + subdivisions still allowed. */ + if (*last > *limit / 2 + 2) + jupbn = *limit + 3 - *last; + else + jupbn = *last; + + errmin = elist[*last]; + + /* insert errmax by traversing the list top-down, + starting comparison from the element elist(iord(nrmax+1)). */ + + jbnd = jupbn - 1; + for (i = *nrmax + 1; i <= jbnd; ++i) { + isucc = iord[i]; + if (errmax >= elist[isucc]) {/* ***jump out of do-loop */ + /* L60: insert errmin by traversing the list bottom-up. */ + iord[i - 1] = *maxerr; + for (j = i, k = jbnd; j <= jbnd; j++, k--) { + isucc = iord[k]; + if (errmin < elist[isucc]) { + /* goto L80; ***jump out of do-loop */ + iord[k + 1] = *last; + goto Last; + } + iord[k + 1] = isucc; + } + iord[i] = *last; + goto Last; + } + iord[i - 1] = isucc; + } + + iord[jbnd] = *maxerr; + iord[jupbn] = *last; + + Last:/* set maxerr and ermax. */ + + *maxerr = iord[*nrmax]; + *ermax = elist[*maxerr]; + return; +} /* rdqpsrt_ */ diff --git a/libxc/src/lda.c b/libxc/src/lda.c new file mode 100644 index 000000000..f3ae797d3 --- /dev/null +++ b/libxc/src/lda.c @@ -0,0 +1,236 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include + +#include "util.h" +#include "funcs_lda.c" + + +/* initialization */ +int +XC(lda_init)(XC(func_type) *func, const XC(func_info_type) *info, int nspin) +{ + assert(func != NULL); + + /* initialize structure */ + func->info = info; + func->nspin = nspin; + func->params = NULL; + func->func = 0; + + /* initialize spin counters */ + func->n_rho = func->n_vrho = func->nspin; + func->n_zk = 1; + if(func->nspin == XC_UNPOLARIZED){ + func->n_v2rho2 = func->n_v3rho3 = 1; + }else{ + func->n_v2rho2 = 3; + func->n_v3rho3 = 4; + } + + /* see if we need to initialize the functional */ + if(func->info->init != NULL) + func->info->init(func); + return 0; +} + + +/* termination */ +void +XC(lda_end)(XC(func_type) *func) +{ + assert(func != NULL); + + if(func->info->end != NULL) + func->info->end(func); + + /* deallocate any used parameter */ + if(func->params != NULL){ + free(func->params); + func->params = NULL; + } +} + + +/* get the lda functional */ +void +XC(lda)(const XC(func_type) *func, int np, const FLOAT *rho, + FLOAT *zk, FLOAT *vrho, FLOAT *v2rho2, FLOAT *v3rho3) +{ + assert(func != NULL); + + /* sanity check */ + if(zk != NULL && !(func->info->flags & XC_FLAGS_HAVE_EXC)){ + fprintf(stderr, "Functional '%s' does not provide an implementation of Exc", + func->info->name); + exit(1); + } + + if(vrho != NULL && !(func->info->flags & XC_FLAGS_HAVE_VXC)){ + fprintf(stderr, "Functional '%s' does not provide an implementation of vxc", + func->info->name); + exit(1); + } + + if(v2rho2 != NULL && !(func->info->flags & XC_FLAGS_HAVE_FXC)){ + fprintf(stderr, "Functional '%s' does not provide an implementation of fxc", + func->info->name); + exit(1); + } + + if(v3rho3 != NULL && !(func->info->flags & XC_FLAGS_HAVE_KXC)){ + fprintf(stderr, "Functional '%s' does not provide an implementation of kxc", + func->info->name); + exit(1); + } + + /* initialize output */ + if(zk != NULL) + memset(zk, 0, np*sizeof(FLOAT)*func->n_zk); + + if(vrho != NULL) + memset(vrho, 0, np*sizeof(FLOAT)*func->n_vrho); + + if(v2rho2 != NULL) + memset(v2rho2, 0, np*sizeof(FLOAT)*func->n_v2rho2); + + if(v3rho3 != NULL) + memset(v3rho3, 0, np*sizeof(FLOAT)*func->n_v3rho3); + + + assert(func->info!=NULL && func->info->lda!=NULL); + + /* call the LDA routines */ + func->info->lda(func, np, rho, zk, vrho, v2rho2, v3rho3); +} + + +/* specializations */ +inline void +XC(lda_exc)(const XC(func_type) *p, int np, const FLOAT *rho, FLOAT *zk) +{ + XC(lda)(p, np, rho, zk, NULL, NULL, NULL); +} + +inline void +XC(lda_exc_vxc)(const XC(func_type) *p, int np, const FLOAT *rho, FLOAT *zk, FLOAT *vrho) +{ + XC(lda)(p, np, rho, zk, vrho, NULL, NULL); +} + +inline void +XC(lda_vxc)(const XC(func_type) *p, int np, const FLOAT *rho, FLOAT *vrho) +{ + XC(lda)(p, np, rho, NULL, vrho, NULL, NULL); +} + +inline void +XC(lda_fxc)(const XC(func_type) *p, int np, const FLOAT *rho, FLOAT *v2rho2) +{ + XC(lda)(p, np, rho, NULL, NULL, v2rho2, NULL); +} + +inline void +XC(lda_kxc)(const XC(func_type) *p, int np, const FLOAT *rho, FLOAT *v3rho3) +{ + XC(lda)(p, np, rho, NULL, NULL, NULL, v3rho3); +} + + +#ifdef SINGLE_PRECISION +# define DELTA_RHO 1e-4 +#else +# define DELTA_RHO 1e-6 +#endif + +/* get the xc kernel through finite differences */ +void +XC(lda_fxc_fd)(const XC(func_type) *func, int np, const FLOAT *rho, FLOAT *v2rho2) +{ + int i, ip; + + assert(func != NULL); + + for(ip=0; ipnspin; i++){ + FLOAT rho2[2], vc1[2], vc2[2]; + int j, js; + + j = (i+1) % 2; + js = (i==0) ? 0 : 2; + + rho2[i] = rho[i] + DELTA_RHO; + rho2[j] = (func->nspin == XC_POLARIZED) ? rho[j] : 0.0; + XC(lda_vxc)(func, 1, rho2, vc1); + + if(rho[i]<2.0*DELTA_RHO){ /* we have to use a forward difference */ + XC(lda_vxc)(func, 1, rho, vc2); + + v2rho2[js] = (vc1[i] - vc2[i])/(DELTA_RHO); + if(func->nspin == XC_POLARIZED && i==0) + v2rho2[1] = (vc1[j] - vc2[j])/(DELTA_RHO); + + }else{ /* centered difference (more precise) */ + rho2[i] = rho[i] - DELTA_RHO; + XC(lda_vxc)(func, 1, rho2, vc2); + + v2rho2[js] = (vc1[i] - vc2[i])/(2.0*DELTA_RHO); + if(func->nspin == XC_POLARIZED && i==0) + v2rho2[1] = (vc1[j] - vc2[j])/(2.0*DELTA_RHO); + } + } + + rho += func->n_rho; + v2rho2 += func->n_v2rho2; + } /* for(ip) */ +} + + +void +XC(lda_kxc_fd)(const XC(func_type) *func, int np, const FLOAT *rho, FLOAT *v3rho3) +{ + /* Kxc, this is a third order tensor with respect to the densities */ + int ip, i, j, n; + + assert(func != NULL); + + for(ip=0; ipnspin; i++){ + FLOAT rho2[2], vc1[2], vc2[2], vc3[2]; + + for(n=0; nnspin; n++) rho2[n] = rho[n]; + XC(lda_vxc)(func, 1, rho, vc2); + + rho2[i] += DELTA_RHO; + XC(lda_vxc)(func, 1, rho2, vc1); + + rho2[i] -= 2.0*DELTA_RHO; + XC(lda_vxc)(func, 1, rho2, vc3); + + for(j=0; jnspin; j++) + v3rho3[i*func->nspin + j] = (vc1[j] - 2.0*vc2[j] + vc3[j])/(DELTA_RHO*DELTA_RHO); + } + + rho += func->n_rho; + v3rho3 += func->n_v3rho3; + } /* for(ip) */ +} diff --git a/libxc/src/lda_c_1d_csc.c b/libxc/src/lda_c_1d_csc.c new file mode 100644 index 000000000..2741ca703 --- /dev/null +++ b/libxc/src/lda_c_1d_csc.c @@ -0,0 +1,217 @@ +/* + Copyright (C) 2006-2009 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_LDA_C_1D_CSC 18 /* Casula, Sorella, and Senatore 1D correlation */ + +typedef struct{ + int interaction; /* 0: exponentially screened; 1: soft-Coulomb */ + int ii; /* index in the parameter list */ + + FLOAT bb; /* screening parameter */ +} lda_c_1d_csc_params; + +static void +lda_c_1d_csc_init(XC(func_type) *p) +{ + assert(p != NULL && p->params == NULL); + p->params = malloc(sizeof(lda_c_1d_csc_params)); + + /* default value is soft-Coulomb with beta=1.0 */ + XC(lda_c_1d_csc_set_params)(p, 1, 1.0); +} + +void +XC(lda_c_1d_csc_set_params)(XC(func_type) *p, int interaction, FLOAT bb) +{ + lda_c_1d_csc_params *params; + + assert(p != NULL && p->params != NULL); + params = (lda_c_1d_csc_params *)(p->params); + + assert(params != NULL); + + params->interaction = -1; + params->ii = -1; + + if(interaction == 0){ + if (bb == 0.1) + params->ii = 0; + else if(bb == 0.3) + params->ii = 1; + else if(bb == 0.5) + params->ii = 2; + else if(bb == 0.75) + params->ii = 3; + else if(bb == 1.0) + params->ii = 4; + else if(bb == 2.0) + params->ii = 5; + else if(bb == 4.0) + params->ii = 6; + }else if(interaction == 1){ + if (bb == 0.5) + params->ii = 7 + 0; + else if(bb == 1.0) + params->ii = 7 + 1; + } + + if(params->ii < 0){ + fprintf(stderr, "Invalid value of parameters (inter,b) = (%d,%f) in lda_c_1d_csc_set_params", interaction, bb); + exit(1); + } + + params->interaction = interaction; + params->bb = bb; +} + +typedef struct { + FLOAT A, B, C, D, E, n1, n2, alpha, beta, m; +} lda_csc_param_t; + + +static void +csc_func(lda_csc_param_t *pp, XC(lda_work_t) *r, FLOAT *func, FLOAT *dfunc, FLOAT *d2func) +{ + FLOAT rs_n1, rs_n2, rs_m, arg, larg, den, aux, num; + FLOAT darg, dnum, dden, daux; + FLOAT d2arg, d2num, d2den, d2aux; + + rs_n1 = POW(r->rs[1], pp->n1); + rs_n2 = POW(r->rs[1], pp->n2); + rs_m = POW(r->rs[1], pp->m); + + arg = 1.0 + pp->alpha*r->rs[1] + pp->beta*rs_m; + larg = LOG(arg); + + den = pp->A + pp->B*r->rs[1] + pp->C*rs_n1 + pp->D*rs_n2; + aux = r->rs[1] + pp->E*r->rs[2]; + num = -aux*larg; + + *func = num/den; + *func /= 2.0; /* conversion from Ry to Hartree */ + + if(r->order < 1) return; + + darg = pp->alpha + pp->beta*pp->m*rs_m/r->rs[1]; + dden = pp->B + pp->C*pp->n1*rs_n1/r->rs[1] + pp->D*pp->n2*rs_n2/r->rs[1]; + daux = 1.0 + 2.0*pp->E*r->rs[1]; + dnum = -(daux*larg + aux*darg/arg); + + *dfunc = (dnum*den - dden*num)/(den*den); + *dfunc /= 2.0; /* conversion from Ry to Hartree */ + + if(r->order < 2) return; + + d2arg = pp->beta*pp->m*(pp->m - 1.0)*rs_m/r->rs[2]; + d2den = pp->C*pp->n1*(pp->n1 - 1.0)*rs_n1/r->rs[2] + pp->D*pp->n2*(pp->n2 - 1.0)*rs_n2/r->rs[2]; + d2aux = 2.0*pp->E; + d2num = -(2.0*daux*arg*darg - aux*darg*darg + d2aux*arg*arg*larg + aux*arg*d2arg)/(arg*arg); + + *d2func = (2.0*num*dden*dden - 2.0*den*dden*dnum - den*num*d2den + den*den*d2num)/(den*den*den); + *d2func /= 2.0; /* conversion from Ry to Hartree */ +} + +static inline void +func(const XC(func_type) *p, XC(lda_work_t) *r) +{ + lda_csc_param_t pp[2][9] = { + { /* paramagnetic */ + { 4.66, 0.0, 2.092, 3.735, 0.0, 1.379, 2.0, 23.63, 109.9, 1.837}, /* exponentially screened interaction */ + { 9.5, 0.0, 1.85, 5.64, 0.0, 0.882, 2.0, 5.346, 6.69, 3.110}, + { 16.40, 0.0, 2.90, 6.235, 0.0, 0.908, 2.0, 3.323, 2.23, 3.368}, + { 22.53, 0.0, 2.09, 7.363, 0.0, 0.906, 2.0, 2.029, 0.394, 4.070}, + { 32.1, 0.0, 3.77, 7.576, 0.0, 0.941, 2.0, 1.63, 0.198, 4.086}, + {110.5, 0.0, 7.90, 8.37, 0.0, 1.287, 2.0, 1.399, 0.0481, 4.260}, + {413.0, 0.0, 10.8, 7.99, 0.0, 1.549, 2.0, 1.308, 0.0120, 4.165}, + + { 7.40, 1.120, 1.890, 0.0964, 0.0250, 2.0, 3.0, 2.431, 0.0142, 2.922}, /* soft-Coulomb interaction */ + {18.40, 0.0, 7.501, 0.10185, 0.012827, 2.0, 3.0, 1.511, 0.258, 4.424} + },{ /* ferromagnetic */ + { 4.66, 0.0, 2.092, 3.735, 0.0, 1.379, 2.0, 23.63, 109.9, 1.837}, /* exponentially screened interaction */ + { 9.5, 0.0, 1.85, 5.64, 0.0, 0.882, 2.0, 5.346, 6.69, 3.110}, + { 16.40, 0.0, 2.90, 6.235, 0.0, 0.908, 2.0, 3.323, 2.23, 3.368}, + { 22.53, 0.0, 2.09, 7.363, 0.0, 0.906, 2.0, 2.029, 0.394, 4.070}, + { 32.1, 0.0, 3.77, 7.576, 0.0, 0.941, 2.0, 1.63, 0.198, 4.086}, + {110.5, 0.0, 7.90, 8.37, 0.0, 1.287, 2.0, 1.399, 0.0481, 4.260}, + {413.0, 0.0, 10.8, 7.99, 0.0, 1.549, 2.0, 1.308, 0.0120, 4.165}, + + { 7.40, 1.120, 1.890, 0.0964, 0.0250, 2.0, 3.0, 2.431, 0.0142, 2.922}, /* soft-Coulomb interaction */ + { 5.24, 0.0, 1.568, 0.12856, 0.003201, 2.0, 3.0, 0.0538, 1.56e-5, 2.958} + } + }; + + int ii; + FLOAT zk_p, zk_f, dzk_p, dzk_f, d2zk_p, d2zk_f; + + assert(p->params != NULL); + ii = ((lda_c_1d_csc_params *)p->params)->ii; + + csc_func(&(pp[0][ii]), r, &zk_p, &dzk_p, &d2zk_p); + r->zk = zk_p; + + if(p->nspin == XC_POLARIZED){ + csc_func(&(pp[1][ii]), r, &zk_f, &dzk_f, &d2zk_f); + + r->zk += (zk_f - zk_p)*r->zeta*r->zeta; + } + + if(r->order < 1) return; + + r->dedrs = dzk_p; + if(p->nspin == XC_POLARIZED){ + r->dedrs += (dzk_f - dzk_p)*r->zeta*r->zeta; + r->dedz = 2.0*(zk_f - zk_p)*r->zeta; + }else + r->dedz = 0.0; + + if(r->order < 2) return; + + r->d2edrs2 = d2zk_p; + if(p->nspin == XC_POLARIZED){ + r->d2edrs2 += (d2zk_f - d2zk_p)*r->zeta*r->zeta; + r->d2edrsz = 2.0*(dzk_f - dzk_p)*r->zeta; + r->d2edz2 = 2.0*(zk_f - zk_p); + }else{ + r->d2edrsz = 0.0; + r->d2edz2 = 0.0; + } + +} + +#define XC_DIMENSIONS 1 +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_c_1d_csc) = { + XC_LDA_C_1D_CSC, + XC_CORRELATION, + "Casula, Sorella & Senatore", + XC_FAMILY_LDA, + "M Casula, S Sorella, and G Senatore, Phys. Rev. B 74, 245427 (2006)", + XC_FLAGS_1D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 0.0, 0.0, 1e-32, + lda_c_1d_csc_init, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; diff --git a/libxc/src/lda_c_1d_loos.c b/libxc/src/lda_c_1d_loos.c new file mode 100644 index 000000000..45675040e --- /dev/null +++ b/libxc/src/lda_c_1d_loos.c @@ -0,0 +1,96 @@ +/* + Copyright (C) 2006-2009 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_LDA_C_1D_LOOS 26 /* P-F Loos correlation LDA */ + +static FLOAT kappa, eta0, eta1, eps0, eps1; +static FLOAT c0, c1, c2, c3; + +static void +lda_c_1d_loos_init(XC(func_type) *p) +{ + eta0 = -LOG(SQRT(2.0*M_PI)) - 3.0/4.0; + eta1 = 0.359933; + eps0 = -M_PI*M_PI/360.0; + eps1 = 0.00714; + + kappa = 0.3083; + + c0 = kappa*eta0; + c1 = 4.0*kappa*eta0 + kappa*SQRT(kappa)*eta1; + c2 = 5.0*eps0 + eps1/kappa; + c3 = eps1; +} + +static inline void +func(const XC(func_type) *p, XC(lda_work_t) *r) +{ + FLOAT aux, tt, tt2, tt3, omtt, omtt2, omtt3; + FLOAT dttdrs, dfdtt, d2ttdrs2, d2fdtt2; + + aux = SQRT(1.0 + 4.0*kappa*r->rs[1]); + tt = (aux - 1.0)/(2.0*kappa*r->rs[1]); + + tt2 = tt*tt; + tt3 = tt*tt2; + omtt = 1.0 - tt; + omtt2 = omtt*omtt; + omtt3 = omtt*omtt2; + + r->zk = tt2*(c0*omtt3 + c1*tt*omtt2 + c2*tt2*omtt + c3*tt3); + + if(r->order < 1) return; + + dttdrs = 1.0/(r->rs[1]*aux) + (1.0 - aux)/(2.0*kappa*r->rs[2]); + dfdtt = 2.0*c0*omtt3*tt + 3.0*(c1 - c0)*omtt2*tt2 + (4.0*c2 - 2.0*c1)*omtt*tt3 + (5.0*c3 - c2)*tt*tt3; + + r->dedrs = dfdtt*dttdrs; + r->dedz = 0.0; + + if(r->order < 2) return; + + d2ttdrs2 = -2.0*kappa/(r->rs[1]*aux*aux*aux) - 2.0/(r->rs[2]*aux) - (1.0 - aux)/(kappa*r->rs[1]*r->rs[2]); + d2fdtt2 = 2.0*c0*omtt3 + 6.0*(c1 - 2.0*c0)*omtt2*tt + 6.0*(2.0*c2 - 2.0*c1 + c0)*omtt*tt2 + 2.0*(c1 - 4.0*c2)*tt3 + 20.0*c3*tt3; + + r->d2edrs2 = d2fdtt2*dttdrs*dttdrs + dfdtt*d2ttdrs2; + r->d2edrsz = 0.0; + r->d2edz2 = 0.0; +} + +#define XC_DIMENSIONS 1 +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_c_1d_loos) = { + XC_LDA_C_1D_LOOS, + XC_CORRELATION, + "P-F Loos correlation LDA", + XC_FAMILY_LDA, + "P-F Loos, arXiv:1207.6849v1 [cond-mat.str-el] (2012)", + XC_FLAGS_1D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 0.0, 0.0, 1e-32, + lda_c_1d_loos_init, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; diff --git a/libxc/src/lda_c_2d_amgb.c b/libxc/src/lda_c_2d_amgb.c new file mode 100644 index 000000000..05c5e1c52 --- /dev/null +++ b/libxc/src/lda_c_2d_amgb.c @@ -0,0 +1,208 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include + +#include "util.h" + +/************************************************************************ + Correlation energy per particle and potentials for a homogeneous electron + gas in 2D, as parametrized by Attaccalite et al. +************************************************************************/ + +#define XC_LDA_C_2D_AMGB 15 /* Attaccalite et al */ + + +/* parameters necessary to the calculation */ +static FLOAT a[3] = { -0.1925, 0.117331, 0.0234188 }; +static FLOAT b[3] = { 0.0863136, -3.394e-2, -0.037093 }; +static FLOAT c[3] = { 0.0572384, -7.66765e-3, 0.0163618 }; +static FLOAT d[3] = { 0.0, 0.0, 0.0 }; +static FLOAT e[3] = { 1.0022, 0.4133, 1.424301 }; +static FLOAT f[3] = { -0.02069, 0.0, 0.0 }; +static FLOAT g[3] = { 0.33997, 6.68467e-2, 0.0 }; +static FLOAT h[3] = { 1.747e-2, 7.799e-4, 1.163099 }; +static FLOAT beta = 1.3386, ax = 0.0; + + +/* Initialization */ +static void +lda_c_2d_amgb_init(XC(func_type) *p) +{ + int i; + + /* initialize a couple of constants */ + for(i=0; i<3; i++) d[i] = -a[i]*h[i]; + ax = -4.0/(3.0*M_PI*M_SQRT2); +} + +static void +malpha(int order, int i, FLOAT *rs, + FLOAT *alpha, FLOAT *dalpha, FLOAT *d2alpha, FLOAT *d3alpha) +{ + FLOAT p1, dp1, d2p1, d3p1, p2, dp2, d2p2, d3p2; + FLOAT rs3, aux2, logp2; + + rs3 = rs[2]*rs[1]; + + p1 = b[i]*rs[1] + c[i]*rs[2] + d[i]*rs3; + p2 = e[i]*rs[1] + f[i]*rs[0]*rs[1] + g[i]*rs[2] + h[i]*rs3; + + aux2 = 1.0 + p2; + logp2 = LOG(1.0 + 1.0/p2); + + *alpha = a[i] + p1*logp2; + + if(order < 1) return; + + dp1 = b[i] + 2.0*c[i]*rs[1] + 3.0*d[i]*rs[2]; + dp2 = e[i] + 1.5*f[i]*rs[0] + 2.0*g[i]*rs[1] + 3.0*h[i]*rs[2]; + + *dalpha = dp1*logp2 - p1*dp2/(p2*aux2); + + if(order < 2) return; + + d2p1 = 2.0*c[i] + 6.0*d[i]*rs[1]; + d2p2 = 1.5*0.5*f[i]/rs[0] + 2.0*g[i] + 6.0*h[i]*rs[1]; + + *d2alpha = d2p1*logp2 + + (-2.0*p2*aux2*dp1*dp2 + p1*(1.0 + 2.0*p2)*dp2*dp2 - p1*p2*aux2*d2p2)/(p2*p2*aux2*aux2); + + if(order < 3) return; + + d3p1 = 6.0*d[i]; + d3p2 = -1.5*0.5*0.5*f[i]/(rs[0]*rs[1]) + 6.0*h[i]; + + *d3alpha = d3p1*logp2 + + (2*p1*(2.0 + 3.0*p2)*dp2*dp2*dp2 - 3.0*p2*aux2*dp2*(dp1*dp2 + p1*d2p2) + + aux2*aux2*(-6.0*p1*dp2*dp2*dp2 + 6.0*p2*dp2*(dp1*dp2 + p1*d2p2) + -p2*p2*(3.0*dp2*d2p1 + 3.0*dp1*d2p2 + p1*d3p2)))/ + (p2*p2*p2*aux2*aux2*aux2); +} + + +void +XC(lda_c_2d_amgb_func)(const XC(func_type) *p, XC(lda_work_t) *r) +{ + FLOAT ecp, vcp, fcp, kcp; + FLOAT ecf, vcf, fcf, kcf; + FLOAT alpha, dalpha, d2alpha, d3alpha; + FLOAT z2, z3, z4, fz, dfz, d2fz, d3fz; + FLOAT ex, dex, d2ex, d3ex; + FLOAT ex6, dex6drs, dex6dz, d2ex6drs2, d2ex6drsz, d2ex6dz2, d3ex6drs3, d3ex6drs2z, d3ex6drsz2, d3ex6dz3; + + malpha(r->order, 0, r->rs, &ecp, &vcp, &fcp, &kcp); + + if(p->nspin == XC_UNPOLARIZED) + r->zk = ecp; + else{ + /* get ferromagnetic values */ + malpha(r->order, 1, r->rs, &ecf, &vcf, &fcf, &kcf); + + /* get alpha_c */ + malpha(r->order, 2, r->rs, &alpha, &dalpha, &d2alpha, &d3alpha); + + z2 = r->zeta*r->zeta; + z3 = r->zeta*z2; + z4 = r->zeta*z3; + + ex = -4.0*M_SQRT2/(3.0*M_PI*r->rs[1]) ; + fz = 0.5*(POW(1.0 + r->zeta, 3.0/2.0) + POW(1.0 - r->zeta, 3.0/2.0)); + ex6 = ex*(fz - 1.0 - 3.0/8.0*z2 - 3.0/128.0*z4); + + r->zk = ecp + ecf*z2 + alpha*z4 + (EXP(-beta*r->rs[1]) - 1.0)*ex6; + } + + if(r->order < 1) return; + + if(p->nspin == XC_UNPOLARIZED) + r->dedrs = vcp; + else{ + dex = -ex/r->rs[1]; + + dfz = 3.0/4.0*(SQRT(1.0 + r->zeta) - SQRT(1.0 - r->zeta)); + + dex6drs = dex*(fz - 1.0 - (3.0/8.0)*z2 - (3.0/128.0)*z4); + dex6dz = ex*(dfz - 2.0*(3.0/8.0)*r->zeta - 4.0*(3.0/128.0)*z3); + + r->dedrs = vcp + vcf*z2 + dalpha*z4 + EXP(-beta*r->rs[1])*(dex6drs - beta*ex6) - dex6drs; + r->dedz = 2.0*ecf*r->zeta + 4.0*alpha*z3 + (EXP(-beta*r->rs[1]) - 1.0)*dex6dz; + } + + if(r->order < 2) return; + + if(p->nspin == XC_UNPOLARIZED) + r->d2edrs2 = fcp; + else{ + d2ex = -2.0*dex/r->rs[1]; + + d2fz = 3.0/8.0*(1.0 / SQRT(1.0 + r->zeta) + 1.0 / SQRT(1.0 - r->zeta)); + + d2ex6drs2 = d2ex*( fz - 1.0 - (3.0/8.0)*z2 - (3.0/128.0)*z4); + d2ex6drsz = dex*( dfz - 2.0*(3.0/8.0)*r->zeta - 4.0*(3.0/128.0)*z3); + d2ex6dz2 = ex*(d2fz - 2.0*(3.0/8.0) - 12.0*(3.0/128.0)*z2); + + r->d2edrs2 = fcp + fcf*z2 + d2alpha*z4 + + EXP(-beta*r->rs[1])*(d2ex6drs2 - 2.0*beta*dex6drs + beta*beta*ex6) - d2ex6drs2; + r->d2edrsz = 2.0*vcf*r->zeta + 4.0*dalpha*z3 + EXP(-beta*r->rs[1])*(d2ex6drsz - beta*dex6dz) - d2ex6drsz; + r->d2edz2 = 2.0*ecf + 12.0*alpha*z2 + (EXP(-beta*r->rs[1]) - 1.0)*d2ex6dz2; + } + + if(r->order < 3) return; + + if(p->nspin == XC_UNPOLARIZED) + r->d3edrs3 = kcp; + else{ + d3ex = -3.0*d2ex/r->rs[1]; + + d3fz = -3.0/16.0*(POW(1.0 + r->zeta, -3.0/2.0) - POW(1.0 - r->zeta, -3.0/2.0)); + + d3ex6drs3 = d3ex*( fz - 1.0 - (3.0/8.0)*z2 - (3.0/128.0)*z4); + d3ex6drs2z = d2ex*( dfz - 2.0*(3.0/8.0)*r->zeta - 4.0*(3.0/128.0)*z3); + d3ex6drsz2 = dex*(d2fz - 2.0*(3.0/8.0) - 12.0*(3.0/128.0)*z2); + d3ex6dz3 = ex*(d3fz - 24.0*(3.0/128.0)*r->zeta); + + r->d3edrs3 = kcp + kcf*z2 + d3alpha*z4 + + EXP(-beta*r->rs[1])*(d3ex6drs3 - 3.0*beta*d2ex6drs2 + 3.0*beta*beta*dex6drs - beta*beta*beta*ex6) - d3ex6drs3; + r->d3edrs2z = 2.0*fcf*r->zeta + 4.0*d2alpha*z3 + + EXP(-beta*r->rs[1])*(d3ex6drs2z - 2.0*beta*d2ex6drsz + beta*beta*dex6dz) - d3ex6drs2z; + r->d3edrsz2 = 2.0*vcf + 12.0*dalpha*z2 + EXP(-beta*r->rs[1])*(d3ex6drsz2 - beta*d2ex6dz2) - d3ex6drsz2; + r->d3edz3 = 24.0*alpha*r->zeta + (EXP(-beta*r->rs[1]) - 1.0)*d3ex6dz3; + } +} + +#define XC_DIMENSIONS 2 +#define func XC(lda_c_2d_amgb_func) +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_c_2d_amgb) = { + XC_LDA_C_2D_AMGB, + XC_CORRELATION, + "AMGB (for 2D systems)", + XC_FAMILY_LDA, + "C Attaccalite et al, Phys. Rev. Lett. 88, 256601 (2002)\n" + "C Attaccalite, PhD thesis", + XC_FLAGS_2D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-9, 0.0, 0.0, 1e-32, + lda_c_2d_amgb_init, + NULL, + work_lda, + NULL, + NULL +}; diff --git a/libxc/src/lda_c_2d_prm.c b/libxc/src/lda_c_2d_prm.c new file mode 100644 index 000000000..5d79a9abb --- /dev/null +++ b/libxc/src/lda_c_2d_prm.c @@ -0,0 +1,145 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +/************************************************************************ +Correlation functional by Pittalis, Rasanen & Marques for the 2D electron gas +************************************************************************/ + +/* TODO: convert this to an (rs, zeta) expression */ + +#define XC_LDA_C_2D_PRM 16 /* Pittalis, Rasanen & Marques correlation in 2D */ + +typedef struct{ + FLOAT N; + FLOAT c; +} lda_c_prm_params; + +/* parameters necessary to the calculation */ +static FLOAT prm_q = 3.9274; /* 2.258 */ + +/* Initialization */ +static void +lda_c_2d_prm_init(XC(func_type) *p) +{ + lda_c_prm_params *params; + + assert(p != NULL && p->params == NULL); + + p->params = malloc(sizeof(lda_c_prm_params)); + params = (lda_c_prm_params *) (p->params); + + params->N = 2.0; /* Random values. This should be set by the caller */ + params->c = 0.0; +} + + +void +XC(lda_c_2d_prm_set_params)(XC(func_type) *p, FLOAT N) +{ + lda_c_prm_params *params; + + assert(p != NULL && p->params != NULL); + params = (lda_c_prm_params *) (p->params); + + if(N <= 1){ + fprintf(stderr, "PRM functional can not be used for N_electrons <= 1\n"); + exit(1); + } + + params->N = N; + params->c = M_PI/(2.0*(N - 1.0)*prm_q*prm_q); /* Eq. (13) */ +} + + +static inline void +func(const XC(func_type) *p, XC(lda_work_t) *r) +{ + lda_c_prm_params *params; + + FLOAT beta, phi, c; + FLOAT t1, t2, t3, dt1dbeta, dt1dphi, dt3dphi, dbetadrs, dphidrs; + + assert(p->params != NULL); + params = (lda_c_prm_params *) (p->params); + + assert(params->N > 1.0); + + beta = prm_q/(M_SQRTPI*r->rs[1]); /* Eq. (4) */ + c = params->c; + + phi = beta/(beta + M_SQRTPI/2.0); + + t3 = phi - 1.0; /* original version has (phi-1)^2 */ + t2 = M_PI/(2.0*prm_q*prm_q); + + t1 = M_SQRTPI*beta*t3/(2.0*SQRT(2.0 + c)); + t1 += phi*(phi - 1.0)/(2.0 + c); + t1 += M_SQRTPI*phi*phi/(4.0*beta*POW(2.0 + c, 1.5)); + t1 += M_SQRTPI*beta*(phi - 1.0)/SQRT(1.0 + c); + t1 += phi/(1.0 + c); + t1 *= t2; + + r->zk = t1; + if(r->order < 1) return; + + dt1dbeta = M_SQRTPI*t3/(2.0*SQRT(2.0 + c)); + dt1dbeta -= M_SQRTPI*phi*phi/(4.0*beta*beta*POW(2.0 + c, 1.5)); + dt1dbeta += M_SQRTPI*(phi - 1.0)/SQRT(1.0 + c); + dt1dbeta *= t2; + + dt3dphi = 1.0; + dt1dphi = M_SQRTPI*beta/(2.0*SQRT(2.0 + c))*dt3dphi; + dt1dphi += (2.0*phi - 1.0)/(2.0 + c); + dt1dphi += M_SQRTPI*2.0*phi/(4.0*beta*POW(2.0 + c, 1.5)); + dt1dphi += M_SQRTPI*beta/SQRT(1.0 + c); + dt1dphi += 1.0/(1.0 + c); + dt1dphi *= t2; + + dbetadrs = -prm_q/(M_SQRTPI*r->rs[2]); + dphidrs = M_SQRTPI/(2.0*(beta + M_SQRTPI/2.0)*(beta + M_SQRTPI/2.0)); + dphidrs *= dbetadrs; + + r->dedrs = dt1dbeta*dbetadrs + dt1dphi*dphidrs; + r->dedz = 0.0; /* no spin for the moment */ + + if(r->order < 2) return; +} + +#define XC_DIMENSIONS 2 +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_c_2d_prm) = { + XC_LDA_C_2D_PRM, + XC_CORRELATION, + "PRM (for 2D systems)", + XC_FAMILY_LDA, + "S Pittalis, E Rasanen, and MAL Marques, Phys. Rev. B 78, 195322 (2008)", + XC_FLAGS_2D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 0.0, 0.0, 1e-32, + lda_c_2d_prm_init, + NULL, + work_lda, + NULL, + NULL +}; diff --git a/libxc/src/lda_c_gombas.c b/libxc/src/lda_c_gombas.c new file mode 100644 index 000000000..d50643949 --- /dev/null +++ b/libxc/src/lda_c_gombas.c @@ -0,0 +1,76 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include "util.h" + +/************************************************************************ + Wigner's parametrization from the low density limit +************************************************************************/ + +#define XC_LDA_C_GOMBAS 24 /* Gombas parametrization */ + +static inline void +func(const XC(func_type) *p, XC(lda_work_t) *r) +{ + static FLOAT a1=-0.0357, a2=0.0562, b1=-0.0311, b2=2.39; + FLOAT t1, t2, cnst_rs, x; + + cnst_rs = CBRT(4.0*M_PI/3.0); + x = cnst_rs*r->rs[1]; + + t1 = 1.0 + a2*x; + t2 = x + b2; + + r->zk = a1/t1 + b1*LOG(t2/x); + + if(r->order < 1) return; + + r->dedrs = -a1*a2/(t1*t1) - b1*b2/(x*t2); + r->dedrs*= cnst_rs; + r->dedz = 0.0; + + if(r->order < 2) return; + + r->d2edrs2 = 2.0*a1*a2*a2/(t1*t1*t1) + b1*(1.0/(x*x) - 1.0/(t2*t2)); + r->d2edrs2*= cnst_rs*cnst_rs; + r->d2edrsz = r->d2edz2 = 0.0; + + if(r->order < 3) return; + + r->d3edrs3 = -6*a1*a2*a2*a2/(t1*t1*t1*t1) - 2.0*b1/(x*x*x) + 2.0*b1/(t2*t2*t2); + r->d3edrs3*= cnst_rs*cnst_rs*cnst_rs; + r->d3edrs2z = r->d3edrsz2 = r->d3edz3 = 0.0; +} + +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_c_gombas) = { + XC_LDA_C_GOMBAS, + XC_CORRELATION, + "Gombas", + XC_FAMILY_LDA, + "P. Gombas, Pseudopotentiale (Springer-Verlag, Wien, New York, 1967)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 0.0, 0.0, 1e-32, + NULL, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; diff --git a/libxc/src/lda_c_hl.c b/libxc/src/lda_c_hl.c new file mode 100644 index 000000000..213683607 --- /dev/null +++ b/libxc/src/lda_c_hl.c @@ -0,0 +1,178 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + + +/************************************************************************ + L. Hedin and B.I. Lundqvist + O. Gunnarsson and B. I. Lundqvist +************************************************************************/ + +#define XC_LDA_C_HL 4 /* Hedin & Lundqvist */ +#define XC_LDA_C_GL 5 /* Gunnarson & Lundqvist */ +#define XC_LDA_C_vBH 17 /* von Barth & Hedin */ + +static void +hl_f(int func, int order, int i, FLOAT rs, FLOAT *zk, FLOAT *drs, FLOAT *d2rs, FLOAT *d3rs) +{ + static const + FLOAT r[3][2] = {{21.0, 21.0}, /* HL unpolarized only*/ + {11.4, 15.9}, /* GL */ + {30, 75 }}; /* vBH */ + static const + FLOAT c[3][2] = {{0.0225, 0.0225}, /* HL unpolarized only */ + {0.0333, 0.0203}, /* GL */ + {0.0252, 0.0127}}; /* vBH */ + + FLOAT a, x, x2, x3; + + x = rs/r[func][i]; + x2 = x*x; + x3 = x2*x; + + a = LOG(1.0 + 1.0/x); + *zk = -c[func][i]*((1.0 + x3)*a - x2 + 0.5*x - 1.0/3.0); + + if(order < 1) return; + + *drs = 3.0*x*(x*a - 1) - 1/x + 3.0/2.0; + *drs *= -c[func][i]/r[func][i]; + + if(order < 2) return; + + *d2rs = -3.0 + 1.0/x2 - 3.0*x/(1.0 + x) + 6.0*x*a; + *d2rs *= -c[func][i]/(r[func][i]*r[func][i]); + + if(order < 3) return; + + *d3rs = -2.0/x3 + 3.0*x/((1.0 + x)*(1.0 + x)) - 9.0/(1.0 + x) + 6.0*a; + *d3rs *= -c[func][i]/(r[func][i]*r[func][i]*r[func][i]); +} + + +void +XC(lda_c_hl_func)(const XC(func_type) *p, XC(lda_work_t) *r) +{ + int func; + FLOAT ecp, vcp, fcp, kcp; + FLOAT ecf, vcf, fcf, kcf; + FLOAT fz, dfz, d2fz, d3fz; + + switch(p->info->number){ + case XC_LDA_C_GL: func = 1; break; + case XC_LDA_C_vBH: func = 2; break; + default: func = 0; /* original HL */ + } + + hl_f(func, r->order, 0, r->rs[1], &ecp, &vcp, &fcp, &kcp); + + if(p->nspin == XC_UNPOLARIZED) + r->zk = ecp; + else{ + /* get ferromagnetic values */ + hl_f(func, r->order, 1, r->rs[1], &ecf, &vcf, &fcf, &kcf); + + fz = FZETA(r->zeta); + r->zk = ecp + (ecf - ecp)*fz; + } + + if(r->order < 1) return; + + if(p->nspin == XC_UNPOLARIZED) + r->dedrs = vcp; + else{ + dfz = DFZETA(r->zeta); + r->dedrs = vcp + (vcf - vcp)*fz; + r->dedz = (ecf - ecp)*dfz; + } + + if(r->order < 2) return; + + if(p->nspin == XC_UNPOLARIZED) + r->d2edrs2 = fcp; + else{ + d2fz = D2FZETA(r->zeta); + r->d2edrs2 = fcp + (fcf - fcp)*fz; + r->d2edrsz = (vcf - vcp)*dfz; + r->d2edz2 = (ecf - ecp)*d2fz; + } + + if(r->order < 3) return; + + if(p->nspin == XC_UNPOLARIZED) + r->d3edrs3 = kcp; + else{ + d3fz = D3FZETA(r->zeta); + r->d3edrs3 = kcp + (kcf - kcp)*fz; + r->d3edrs2z = (fcf - fcp)*dfz; + r->d3edrsz2 = (vcf - vcp)*d2fz; + r->d3edz3 = (ecf - ecp)*d3fz; + } +} + +#define func XC(lda_c_hl_func) +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_c_hl) = { + XC_LDA_C_HL, + XC_CORRELATION, + "Hedin & Lundqvist", + XC_FAMILY_LDA, + /* can someone get me this paper, so I can find all coefficients? */ + "L Hedin and BI Lundqvist, J. Phys. C 4, 2064 (1971)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-16, 0.0, 0.0, 1e-32, + NULL, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_c_gl) = { + XC_LDA_C_GL, + XC_CORRELATION, + "Gunnarson & Lundqvist", + XC_FAMILY_LDA, + "O Gunnarsson and BI Lundqvist, PRB 13, 4274 (1976)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-12, 0.0, 0.0, 1e-32, + NULL, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_c_vbh) = { + XC_LDA_C_vBH, + XC_CORRELATION, + "von Barth & Hedin", + XC_FAMILY_LDA, + "U von Barth and L Hedin, J. Phys. C: Solid State Phys. 5, 1629 (1972)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-14, 0.0, 0.0, 1e-32, + NULL, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; diff --git a/libxc/src/lda_c_ml1.c b/libxc/src/lda_c_ml1.c new file mode 100644 index 000000000..1e710044b --- /dev/null +++ b/libxc/src/lda_c_ml1.c @@ -0,0 +1,118 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include + +#include "util.h" + +/************************************************************************ + Correlation energy of Proynov and Salahub +************************************************************************/ + +#define XC_LDA_C_ML1 22 /* Modified LSD (version 1) of Proynov and Salahub */ +#define XC_LDA_C_ML2 23 /* Modified LSD (version 2) of Proynov and Salahub */ + +static void +lda_c_ml1_init(XC(func_type) *p) +{ + switch(p->info->number){ + case XC_LDA_C_ML2: + p->func = 1; break; + default: + p->func = 0; break; + } +} + + +/* the functional */ +static inline void +func(const XC(func_type) *p, XC(lda_work_t) *r) +{ + static FLOAT fc[2] = {0.2026, 0.266}, q[2] = {0.084, 0.5}, C = 6.187335; + static FLOAT b[6] = {2.763169, 1.757515, 1.741397, 0.568985, 1.572202, 1.885389}; + + FLOAT cnst_rs, nn, zp3, zm3, alpha, beta, gamma, k, Q; + FLOAT dalpha, dbeta, dQ, dkdrs, dkdz; + + cnst_rs = CBRT(3.0/(4*M_PI)); + + alpha = fc[p->func]*(POW(1 + r->zeta, q[p->func]) + POW(1.0 - r->zeta, q[p->func])); + + zp3 = CBRT(1.0 + r->zeta); + zm3 = CBRT(1.0 - r->zeta); + beta = zp3*zm3/(zp3 + zm3); + + k = C*alpha*beta*cnst_rs/r->rs[1]; + + Q = (k == 0.0) ? -FLT_MAX : -b[0]/(1.0 + b[1]*k) + b[2]/k*LOG(1.0 + b[3]/k) + b[4]/k - b[5]/(k*k); + + gamma = (1 - r->zeta*r->zeta)/4.0; + nn = POW(cnst_rs/r->rs[1], 3); + r->zk = 0.5*nn*gamma*Q; + + if(r->order < 1) return; + + dQ = (k == 0.0) ? FLT_MAX : b[0]*b[1]/((1.0 + b[1]*k)*(1.0 + b[1]*k)) - b[2]*b[3]/((b[3] + k)*(k*k)) + - b[2]*LOG(1.0 + b[3]/k)/(k*k) - b[4]/(k*k) + 2.0*b[5]/(k*k*k); + + dkdrs = -k/r->rs[1]; + + if(ABS(r->zeta) == 1.0) + dalpha = dbeta = 0.0; + else{ + dalpha = fc[p->func]*q[p->func]*(POW(1 + r->zeta, q[p->func] - 1.0) - POW(1.0 - r->zeta, q[p->func] - 1.0)); + dbeta = (-2.0*r->zeta - zm3*zm3*zp3 + zm3*zp3*zp3)/(3.0*zm3*zm3*zp3*zp3*(zp3 + zm3)); + } + dkdz = C*(dalpha*beta + alpha*dbeta)*cnst_rs/r->rs[1]; + + r->dedrs = 0.5*nn*gamma*(dQ*dkdrs - 3.0*Q/r->rs[1]); + r->dedz = 0.5*nn*(-r->zeta*Q/2.0 + gamma*dQ*dkdz); +} + +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_c_ml1) = { + XC_LDA_C_ML1, + XC_CORRELATION, + "Modified LSD (version 1) of Proynov and Salahub", + XC_FAMILY_LDA, + "EI Proynov and D Salahub, Phys. Rev. B 49, 7874 (1994)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 0.0, 0.0, 1e-32, + lda_c_ml1_init, + NULL, + work_lda, + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_c_ml2) = { + XC_LDA_C_ML2, + XC_CORRELATION, + "Modified LSD (version 2) of Proynov and Salahub", + XC_FAMILY_LDA, + "EI Proynov and D Salahub, Phys. Rev. B 49, 7874 (1994)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 0.0, 0.0, 1e-32, + lda_c_ml1_init, + NULL, + work_lda, + NULL, + NULL +}; diff --git a/libxc/src/lda_c_pw.c b/libxc/src/lda_c_pw.c new file mode 100644 index 000000000..9e69338d8 --- /dev/null +++ b/libxc/src/lda_c_pw.c @@ -0,0 +1,301 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +/************************************************************************ + Correlation energy per-particle and potential of a HEG as parameterized + by + J.P. Perdew & Y. Wang + Ortiz & Ballone + +Note that the PW modified corresponds to the version of PW used in the +original PBE routine. This amounts to adding some more digits in some of +the constants of PW. +************************************************************************/ + +#define XC_LDA_C_PW 12 /* Perdew & Wang */ +#define XC_LDA_C_PW_MOD 13 /* Perdew & Wang (Modified) */ +#define XC_LDA_C_OB_PW 14 /* Ortiz & Ballone (PW) */ +#define XC_LDA_C_PW_RPA 25 /* Perdew & Wang fit of the RPA */ + +static void +lda_c_pw_init(XC(func_type) *p) +{ + switch(p->info->number){ + case XC_LDA_C_PW: p->func = 0; break; + case XC_LDA_C_PW_MOD: p->func = 1; break; + case XC_LDA_C_OB_PW: p->func = 2; break; + case XC_LDA_C_PW_RPA: p->func = 3; break; + default: + fprintf(stderr, "Internal error in lda_c_pw\n"); + exit(1); + } +} + + +/* Function g defined by Eq. 10 of the original paper, + and its derivative with respect to rs, Eq. A5 */ +static void g(int func, int order, int k, FLOAT *rs, + FLOAT *f, FLOAT *dfdrs, FLOAT *d2fdrs2, FLOAT *d3fdrs3) +{ + static FLOAT pp[4][3] = + { + {1.0, 1.0, 1.0}, /* PW */ + {1.0, 1.0, 1.0}, /* PW (modified) */ + {1.0, 1.0, 1.0}, /* OB */ + {0.75, 0.75, 1.0} /* PW_RPA */ + }; + static FLOAT a[4][3] = + { + {0.031091, 0.015545, 0.016887}, /* PW */ + {0.0310907, 0.01554535, 0.0168869}, /* PW (modified) */ + {0.031091, 0.015545, 0.016887}, /* OB */ + {0.031091, 0.015545, 0.016887} /* PW_RPA */ + }; + static FLOAT alpha[4][3] = + { + {0.21370, 0.20548, 0.11125}, /* PW */ + {0.21370, 0.20548, 0.11125}, /* PW (modified) */ + {0.026481, 0.022465, 0.11125}, /* OB */ + {0.082477, 0.035374, 0.028829} /* PW_RPA */ + }; + static FLOAT beta[4][3][4] = { + { + { 7.5957, 3.5876, 1.6382, 0.49294}, /* PW */ + {14.1189, 6.1977, 3.3662, 0.62517}, + {10.357, 3.6231, 0.88026, 0.49671} + },{ + { 7.5957, 3.5876, 1.6382, 0.49294}, /* PW (modified) */ + {14.1189, 6.1977, 3.3662, 0.62517}, + {10.357, 3.6231, 0.88026, 0.49671} + },{ + { 7.5957, 3.5876, -0.46647, 0.13354}, /* OB */ + {14.1189, 6.1977, -0.56043, 0.11313}, + {10.357, 3.6231, 0.88026, 0.49671} + },{ + { 5.1486, 1.6483, 0.23647, 0.20614}, /* PW_RPA */ + { 6.4869, 1.3083, 0.15180, 0.082349}, + {10.357, 3.6231, 0.47990, 0.12279}, + }}; + + FLOAT q0, dq0, q1, dq1, q2, d2q1, d3q1, aux1; + + q0 = -2.0*a[func][k]*(1.0 + alpha[func][k]*rs[1]); + q1 = 2.0*a[func][k]; + q1 *= beta[func][k][0]*rs[0] + beta[func][k][1]*rs[1] + + beta[func][k][2]*rs[0]*rs[1] + beta[func][k][3]*POW(rs[1], 1.0 + pp[func][k]); + q2 = LOG(1.0 + 1.0/q1); + + /* the function */ + *f = q0*q2; + + if(order < 1) return; /* nothing else to do */ + + aux1 = q1*(1.0 + q1); + + /* and now the derivative */ + dq0 = -2.0*a[func][k]*alpha[func][k]; + dq1 = a[func][k]*(beta[func][k][0]/rs[0] + 2.0*beta[func][k][1] + + 3.0*beta[func][k][2]*rs[0] + + 2.0*(1.0 + pp[func][k])*beta[func][k][3]*POW(rs[1], pp[func][k])); + + *dfdrs = dq0*q2 - q0*dq1/aux1; + + if(order < 2) return; + + d2q1 = a[func][k]*(-beta[func][k][0]/(2.0*rs[0]*rs[1]) + + 3.0*beta[func][k][2]/(2.0*rs[0]) + + 2.0*(1.0 + pp[func][k])*pp[func][k]*beta[func][k][3]*POW(rs[1], pp[func][k] - 1.0)); + + *d2fdrs2 = 1.0/aux1*(-2*dq0*dq1 - q0*d2q1 + q0*(2.0*q1 + 1.0)*dq1*dq1/aux1); + + if(order < 3) return; + + d3q1 = (3.0/4.0)*a[func][k]*(beta[func][k][0]/(rs[0]*rs[2]) - beta[func][k][2]/(rs[0]*rs[1])); + if(pp[func][k] != 1.0) + d3q1 += a[func][k]*2.0*(1.0 + pp[func][k])*pp[func][k]*(pp[func][k] - 1.0)*beta[func][k][3]*POW(rs[1], pp[func][k] - 2.0); + + *d3fdrs3 = 2.0*q0*(2.0 + 3.0*q1)*dq1*dq1*dq1; + *d3fdrs3 += -3.0*aux1*dq1*(dq0*dq1 + q0*d2q1); + *d3fdrs3 += (1.0 + q1)*(1.0 + q1)* + (-6.0*q0*dq1*dq1*dq1 + 6.0*q1*dq1*(dq0*dq1 + q0*d2q1) + -q1*q1*(3.0*dq0*d2q1 + q0*d3q1)); + *d3fdrs3 /= aux1*aux1*aux1; +} + + +/* the functional */ +void +XC(lda_c_pw_func)(const XC(func_type) *p, XC(lda_work_t) *r) +{ + static FLOAT fz20[4] = { + 1.709921, /* PW */ + 1.709920934161365617563962776245, /* PW (modified) */ + 1.709921, /* OB */ + 1.709921 /* PW_RPA */ + }; + + FLOAT ecp, vcp, fcp, kcp; + FLOAT ecf, vcf, fcf, kcf; + FLOAT alpha, dalpha, d2alpha, d3alpha; + FLOAT z2, z3, z4, fz, dfz, d2fz, d3fz; + + /* ec(rs, 0) */ + g(p->func, r->order, 0, r->rs, &ecp, &vcp, &fcp, &kcp); + + if(p->nspin == XC_UNPOLARIZED) + r->zk = ecp; + else{ + /* get ferromagnetic values */ + g(p->func, r->order, 1, r->rs, &ecf, &vcf, &fcf, &kcf); + + /* get -alpha_c */ + g(p->func, r->order, 2, r->rs, &alpha, &dalpha, &d2alpha, &d3alpha); + alpha *= -1.0; + + fz = FZETA(r->zeta); + z2 = r->zeta*r->zeta; + z3 = r->zeta*z2; + z4 = r->zeta*z3; + r->zk = ecp + z4*fz*(ecf - ecp - alpha/fz20[p->func]) + fz*alpha/fz20[p->func]; + } + + if(r->order < 1) return; + + if(p->nspin == XC_UNPOLARIZED){ + r->dedrs = vcp; + r->dedz = 0.0; + }else{ + dalpha *= -1.0; + + dfz = DFZETA(r->zeta); + r->dedrs = vcp + z4*fz*(vcf - vcp - dalpha/fz20[p->func]) + fz*dalpha/fz20[p->func]; + r->dedz = (4.0*z3*fz + z4*dfz)*(ecf - ecp - alpha/fz20[p->func]) + + dfz*alpha/fz20[p->func]; + } + + if(r->order < 2) return; + + if(p->nspin == XC_UNPOLARIZED){ + r->d2edrs2 = fcp; + r->d2edrsz = 0.0; + r->d2edz2 = 0.0; + }else{ + d2alpha *= -1.0; + + d2fz = D2FZETA(r->zeta); + r->d2edrs2 = fcp + z4*fz*(fcf - fcp - d2alpha/fz20[p->func]) + fz*d2alpha/fz20[p->func]; + r->d2edrsz = (4.0*z3*fz + z4*dfz)*(vcf - vcp - dalpha/fz20[p->func]) + + dfz*dalpha/fz20[p->func]; + r->d2edz2 = (12.0*z2*fz + 8.0*z3*dfz + z4*d2fz)*(ecf - ecp - alpha/fz20[p->func]) + + d2fz*alpha/fz20[p->func]; + } + + if(r->order < 3) return; + + if(p->nspin == XC_UNPOLARIZED){ + r->d3edrs3 = kcp; + r->d3edrs2z = 0.0; + r->d3edrsz2 = 0.0; + r->d3edz3 = 0.0; + }else{ + d3alpha *= -1.0; + + d3fz = D3FZETA(r->zeta); + + r->d3edrs3 = kcp + z4*fz*(kcf - kcp - d3alpha/fz20[p->func]) + fz*d3alpha/fz20[p->func]; + r->d3edrs2z = (4.0*z3*fz + z4*dfz)*(fcf - fcp - d2alpha/fz20[p->func]) + + dfz*d2alpha/fz20[p->func]; + r->d3edrsz2 = (12.0*z2*fz + 8.0*z3*dfz + z4*d2fz)*(vcf - vcp - dalpha/fz20[p->func]) + + d2fz*dalpha/fz20[p->func]; + r->d3edz3 = (24.0*r->zeta*fz + 36.0*z2*dfz + 12*z3*d2fz + z4*d3fz)*(ecf - ecp - alpha/fz20[p->func]) + + d3fz*alpha/fz20[p->func]; + } +} + +#define func XC(lda_c_pw_func) +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_c_pw) = { + XC_LDA_C_PW, + XC_CORRELATION, + "Perdew & Wang", + XC_FAMILY_LDA, + "JP Perdew and Y Wang, Phys. Rev. B 45, 13244 (1992)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-25, 0.0, 0.0, 1e-32, + lda_c_pw_init, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_c_pw_mod) = { + XC_LDA_C_PW_MOD, + XC_CORRELATION, + "Perdew & Wang (modified)", + XC_FAMILY_LDA, + "JP Perdew and Y Wang, Phys. Rev. B 45, 13244 (1992)\n" + "Added extra digits to some constants as in the PBE routine\n" + "http://dft.rutgers.edu/pubs/PBE.asc", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-26, 0.0, 0.0, 1e-32, + lda_c_pw_init, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_c_ob_pw) = { + XC_LDA_C_OB_PW, + XC_CORRELATION, + "Ortiz & Ballone (PW parametrization)", + XC_FAMILY_LDA, + "G Ortiz and P Ballone, Phys. Rev. B 50, 1391 (1994)\n" + "G Ortiz and P Ballone, Phys. Rev. B 56, 9970(E) (1997)\n" + "JP Perdew and Y Wang, Phys. Rev. B 45, 13244 (1992)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-26, 0.0, 0.0, 1e-32, + lda_c_pw_init, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_c_pw_rpa) = { + XC_LDA_C_PW_RPA, + XC_CORRELATION, + "Perdew & Wang (fit to the RPA energy)", + XC_FAMILY_LDA, + "JP Perdew and Y Wang, Phys. Rev. B 45, 13244 (1992)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-27, 0.0, 0.0, 1e-32, + lda_c_pw_init, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; diff --git a/libxc/src/lda_c_pz.c b/libxc/src/lda_c_pz.c new file mode 100644 index 000000000..65c03fd18 --- /dev/null +++ b/libxc/src/lda_c_pz.c @@ -0,0 +1,251 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include + +#include "util.h" + +/************************************************************************ + Correlation energy per particle and potential of a HEG as parametrized + by + Perdew & Zunger + Ortiz & Ballone +************************************************************************/ + +#define XC_LDA_C_PZ 9 /* Perdew & Zunger */ +#define XC_LDA_C_PZ_MOD 10 /* Perdew & Zunger (Modified) */ +#define XC_LDA_C_OB_PZ 11 /* Ortiz & Ballone (PZ) */ + +typedef struct { + FLOAT gamma[2]; + FLOAT beta1[2]; + FLOAT beta2[2]; + FLOAT a[2], b[2], c[2], d[2]; +} pz_consts_type; + +static pz_consts_type +pz_consts[3] = { + { /* PZ Original */ + {-0.1423, -0.0843}, /* gamma */ + { 1.0529, 1.3981}, /* beta1 */ + { 0.3334, 0.2611}, /* beta2 */ + { 0.0311, 0.01555}, /* a */ + {-0.048, -0.0269}, /* b */ + { 0.0020, 0.0007}, /* c */ + {-0.0116, -0.0048} /* d */ + }, { /* PZ Modified */ + {-0.1423, -0.0843}, + { 1.0529, 1.3981}, + { 0.3334, 0.2611}, + { 0.0311, 0.01555}, + {-0.048, -0.0269}, + { 0.0020191519406228, 0.00069255121311694}, + {-0.0116320663789130, -0.00480126353790614} + }, { /* OB */ + {-0.103756, -0.065951}, + { 0.56371, 1.11846}, + { 0.27358, 0.18797}, + { 0.031091, 0.015545}, + {-0.046644, -0.025599}, + { 0.00419, 0.00329}, /* the sign of c[0] and c[1] is different from [2], but is consistent + with the continuity requirement. There is nothing in [3] about this. */ + {-0.00983, -0.00300} + } +}; + + +/* Auxiliary functions to handle parametrizations */ +static void +ec_pot_low(pz_consts_type *X, int order, int i, FLOAT *rs, + FLOAT *zk, FLOAT *dedrs, FLOAT *d2edrs2, FLOAT *d3edrs3) +{ + FLOAT f1, f12, beta12, beta22; + + /* Eq. C3 */ + f1 = 1.0 + X->beta1[i]*rs[0] + X->beta2[i]*rs[1]; + *zk = X->gamma[i]/f1; + + if(order < 1) return; + + *dedrs = -X->gamma[i]; + *dedrs *= X->beta1[i]/(2.0*rs[0]) + X->beta2[i]; + *dedrs /= f1*f1; + + if(order < 2) return; + + f12 = f1*f1; + beta12 = X->beta1[i]*X->beta1[i]; + beta22 = X->beta2[i]*X->beta2[i]; + + *d2edrs2 = X->gamma[i]; + *d2edrs2 *= X->beta1[i] + 3.0*beta12*rs[0] + + 9.0*X->beta1[i]*X->beta2[i]*rs[1] + 8.0*beta22*rs[0]*rs[1]; + *d2edrs2 /= 4.0*rs[0]*rs[1]*f12*f1; + + if(order < 3) return; + + *d3edrs3 = -3.0*X->gamma[i]; + *d3edrs3 *= 5.0*beta12*X->beta1[i]*rs[1] + 16.0*beta22*X->beta2[i]*rs[0]*rs[2] + + 4.0*beta12*rs[0]*(1.0 + 5.0*X->beta2[i]*rs[1]) + + X->beta1[i]*(1.0 + X->beta2[i]*rs[1]*(6.0 + 29.0*X->beta2[i]*rs[1])); + *d3edrs3 /= 8.0*rs[0]*rs[2]*f12*f12; +} + + +static void +ec_pot_high(pz_consts_type *X, int order, int i, FLOAT *rs, + FLOAT *zk, FLOAT *dedrs, FLOAT *d2edrs2, FLOAT *d3edrs3) +{ + FLOAT lrs = LOG(rs[1]); + + /* Eq. [1].C5 */ + *zk = X->a[i]*lrs + X->b[i] + X->c[i]*rs[1]*lrs + X->d[i]*rs[1]; + + if(order < 1) return; + + *dedrs = X->a[i]/rs[1] + (X->c[i] + X->d[i]) + X->c[i]*lrs; + + if(order < 2) return; + + *d2edrs2 = -X->a[i]/rs[2] + X->c[i]/rs[1]; + + if(order < 3) return; + + *d3edrs3 = 2.0*X->a[i]/(rs[1]*rs[2]) - X->c[i]/rs[2]; +} + + +/* the functional */ +void +XC(lda_c_pz_func)(const XC(func_type) *p, XC(lda_work_t) *r) +{ + int func; + FLOAT ecp, vcp, fcp, kcp; + FLOAT ecf, vcf, fcf, kcf; + FLOAT fz, dfz, d2fz, d3fz; + + func= p->info->number - XC_LDA_C_PZ; + assert(func==0 || func==1 || func==2); + + if(r->rs[1] >= 1.0) + ec_pot_low (&pz_consts[func], r->order, 0, r->rs, &ecp, &vcp, &fcp, &kcp); + else + ec_pot_high(&pz_consts[func], r->order, 0, r->rs, &ecp, &vcp, &fcp, &kcp); + + if(p->nspin == XC_UNPOLARIZED) + r->zk = ecp; + else{ + fz = FZETA(r->zeta); + + /* get ferromagnetic values */ + if(r->rs[1] >= 1.0) + ec_pot_low (&pz_consts[func], r->order, 1, r->rs, &ecf, &vcf, &fcf, &kcf); + else + ec_pot_high(&pz_consts[func], r->order, 1, r->rs, &ecf, &vcf, &fcf, &kcf); + + r->zk = ecp + (ecf - ecp)*fz; + } + + if(r->order < 1) return; + + if(p->nspin == XC_UNPOLARIZED) + r->dedrs = vcp; + else{ + dfz = DFZETA(r->zeta); + + r->dedrs = vcp + (vcf - vcp)*fz; + r->dedz = (ecf - ecp)*dfz; + } + + if(r->order < 2) return; + + if(p->nspin == XC_UNPOLARIZED) + r->d2edrs2 = fcp; + else{ + d2fz = D2FZETA(r->zeta); + + r->d2edrs2 = fcp + (fcf - fcp)*fz; + r->d2edrsz = (vcf - vcp)*dfz; + r->d2edz2 = (ecf - ecp)*d2fz; + } + + if(r->order < 3) return; + + if(p->nspin == XC_UNPOLARIZED) + r->d3edrs3 = kcp; + else{ + d3fz = D3FZETA(r->zeta); + + r->d3edrs3 = kcp + (kcf - kcp)*fz; + r->d3edrs2z = (fcf - fcp)*dfz; + r->d3edrsz2 = (vcf - vcp)*d2fz; + r->d3edz3 = (ecf - ecp)*d3fz; + } +} + +#define func XC(lda_c_pz_func) +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_c_pz) = { + XC_LDA_C_PZ, + XC_CORRELATION, + "Perdew & Zunger", + XC_FAMILY_LDA, + "Perdew and Zunger, Phys. Rev. B 23, 5048 (1981)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 0.0, 0.0, 1e-32, + NULL, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_c_pz_mod) = { + XC_LDA_C_PZ_MOD, + XC_CORRELATION, + "Perdew & Zunger (Modified)", + XC_FAMILY_LDA, + "Perdew and Zunger, Phys. Rev. B 23, 5048 (1981)\n" + "Modified to improve the matching between the low- and high-rs parts", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 0.0, 0.0, 1e-32, + NULL, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_c_ob_pz) = { + XC_LDA_C_OB_PZ, + XC_CORRELATION, + "Ortiz & Ballone (PZ parametrization)", + XC_FAMILY_LDA, + "G Ortiz and P Ballone, Phys. Rev. B 50, 1391 (1994)\n" + "G Ortiz and P Ballone, Phys. Rev. B 56, 9970(E) (1997)\n" + "Perdew and Zunger, Phys. Rev. B 23, 5048 (1981)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 0.0, 0.0, 1e-32, + NULL, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; diff --git a/libxc/src/lda_c_rc04.c b/libxc/src/lda_c_rc04.c new file mode 100644 index 000000000..4c1043392 --- /dev/null +++ b/libxc/src/lda_c_rc04.c @@ -0,0 +1,129 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_LDA_C_RC04 27 /* Ragot-Cortona */ + +void +XC(lda_c_rc04_func)(const XC(func_type) *p, XC(lda_work_t) *r) +{ + static FLOAT AA=-0.655868, BB=4.888270, CC=3.177037, DD=0.897889; + + FLOAT ek, dek, d2ek, d3ek, aux, aux2; + FLOAT opz, omz, opz13, omz13, _opz13, _omz13, _opz43, _omz43, _opz73, _omz73, fz, fz2, dfz, d2fz, d3fz; + + aux = BB + CC*r->rs[1]; + ek = (AA*ATAN(aux) + DD)/r->rs[1]; + + if(p->nspin == XC_POLARIZED){ + opz = 1.0 + r->zeta; + omz = 1.0 - r->zeta; + + opz13 = CBRT(opz); + omz13 = CBRT(omz); + + fz = 0.5*(opz13*opz13 + omz13*omz13); + fz2 = fz*fz; + + r->zk = ek*fz2*fz; + }else + r->zk = ek; + + if(r->order < 1) return; + + aux2 = 1.0 + aux*aux; + dek = AA*CC/(r->rs[1]*aux2) - ek/r->rs[1]; + + if(p->nspin == XC_POLARIZED){ + _opz13 = (opz == 0.0) ? 0.0 : 1.0/opz13; + _omz13 = (omz == 0.0) ? 0.0 : 1.0/omz13; + + dfz = (_opz13 - _omz13)/3.0; + + r->dedrs = dek*fz2*fz; + r->dedz = ek*3.0*fz2*dfz; + }else{ + r->dedrs = dek; + r->dedz = 0.0; + } + + if(r->order < 2) return; + + d2ek = -2.0*AA*CC*CC*aux/(r->rs[1]*aux2*aux2) - 2.0*dek/r->rs[1]; + + if(p->nspin == XC_POLARIZED){ + _opz43 = (opz == 0.0) ? 0.0 : 1.0/(opz*opz13); + _omz43 = (omz == 0.0) ? 0.0 : 1.0/(omz*omz13); + + d2fz = -(_opz43 + _omz43)/9.0; + + r->d2edrs2 = d2ek*fz2*fz; + r->d2edrsz = dek*3.0*fz2*dfz; + r->d2edz2 = ek*3.0*fz*(2.0*dfz*dfz + fz*d2fz); + }else{ + r->d2edrs2 = d2ek; + r->d2edrsz = 0.0; + r->d2edz2 = 0.0; + } + + if(r->order < 3) return; + + d3ek = 2.0*AA*CC*CC*CC/(r->rs[1]*aux2*aux2)*(4.0*aux*aux/aux2 - 1.0) - 3.0*d2ek/r->rs[1]; + + if(p->nspin == XC_POLARIZED){ + _opz73 = (opz == 0.0) ? 0.0 : 1.0/(opz*opz*opz13); + _omz73 = (omz == 0.0) ? 0.0 : 1.0/(omz*omz*omz13); + + d3fz = (_opz73 - _omz73)*4.0/27.0; + + r->d3edrs3 = d3ek*fz2*fz; + r->d3edrs2z = d2ek*3.0*fz2*dfz; + r->d3edrsz2 = dek*3.0*fz*(2.0*dfz*dfz + fz*d2fz); + r->d3edz3 = ek*3.0*(dfz*dfz*dfz + 6.0*fz*dfz*d2fz + fz2*d3fz); + }else{ + r->d3edrs3 = d3ek; + r->d3edrs2z = 0.0; + r->d3edrsz2 = 0.0; + r->d3edz3 = 0.0; + } +} + +#define func XC(lda_c_rc04_func) +#include "work_lda.c" +#undef func + +const XC(func_info_type) XC(func_info_lda_c_rc04) = { + XC_LDA_C_RC04, + XC_CORRELATION, + "Ragot-Cortona", + XC_FAMILY_LDA, + "S Ragot and P Cortona, J. Chem. Phys. 121, 7671 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-25, 0.0, 0.0, 1e-32, + NULL, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; + diff --git a/libxc/src/lda_c_rpa.c b/libxc/src/lda_c_rpa.c new file mode 100644 index 000000000..acca3e300 --- /dev/null +++ b/libxc/src/lda_c_rpa.c @@ -0,0 +1,69 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include "util.h" + +/************************************************************************ + Random Phase Approximation (RPA) +************************************************************************/ + +#define XC_LDA_C_RPA 3 /* Random Phase Approximation */ + +static inline void +func(const XC(func_type) *p, XC(lda_work_t) *r) +{ + static FLOAT a = 0.0311, b = -0.048, c = 0.009, d = -0.017; + FLOAT lrs; + + lrs = LOG(r->rs[1]); + r->zk = a*lrs + b + c*r->rs[1]*lrs + d*r->rs[1]; + + if(r->order < 1) return; + + r->dedrs = a/r->rs[1] + c*(lrs + 1.0) + d; + /* no spin polarization for the moment */ + r->dedz = 0.0; + + if(r->order < 2) return; + + r->d2edrs2 = -a/r->rs[2] + c/r->rs[1]; + r->d2edrsz = r->d2edz2 = 0.0; + + if(r->order < 3) return; + + r->d3edrs3 = 2.0*a/(r->rs[1]*r->rs[2]) - c/r->rs[2]; + r->d3edrs2z = r->d3edrsz2 = r->d3edz3 = 0.0; +} + +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_c_rpa) = { + XC_LDA_C_RPA, + XC_CORRELATION, + "Random Phase Approximation (RPA)", + XC_FAMILY_LDA, + "M Gell-Mann and KA Brueckner, Phys. Rev. 106, 364 (1957)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 0.0, 0.0, 1e-32, + NULL, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; diff --git a/libxc/src/lda_c_vwn.c b/libxc/src/lda_c_vwn.c new file mode 100644 index 000000000..70528d179 --- /dev/null +++ b/libxc/src/lda_c_vwn.c @@ -0,0 +1,466 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +/************************************************************************ + LDA parametrization of Vosko, Wilk & Nusair +************************************************************************/ + +#define XC_LDA_C_VWN 7 /* Vosko, Wilk, & Nussair (5) */ +#define XC_LDA_C_VWN_RPA 8 /* Vosko, Wilk, & Nussair (RPA) */ +#define XC_LDA_C_VWN_1 28 /* Vosko, Wilk, & Nussair (1) */ +#define XC_LDA_C_VWN_2 29 /* Vosko, Wilk, & Nussair (2) */ +#define XC_LDA_C_VWN_3 30 /* Vosko, Wilk, & Nussair (3) */ +#define XC_LDA_C_VWN_4 31 /* Vosko, Wilk, & Nussair (4) */ + +/* some constants e_c^P e_c^F alpha_c */ +typedef struct { + FLOAT A[3]; /* e_c^P, e_c^F, alpha_c */ + FLOAT b[3]; + FLOAT c[3]; + FLOAT x0[3]; + FLOAT Q[3]; + FLOAT fpp; +} vwn_consts_type; + +/* These numbers are taken from the original reference, but divided by + two to convert from Rydbergs to Hartrees */ +static vwn_consts_type vwn_consts[2] = { + /* VWN parametrization of the correlation energy */ + { + { 0.0310907, 0.01554535, 0.0 }, /* A */ + { 3.72744, 7.06042, 1.13107 }, /* b */ + {12.9352, 18.0578, 13.0045 }, /* c */ + {-0.10498, -0.32500, -0.0047584}, /* x0 */ + { 0.0, 0.0, 0.0 }, /* Q */ + 0.0 /* fpp */ + }, + /* VWN RPA */ + { + { 0.0310907, 0.01554535, 0.0 }, /* A */ + {13.0720, 20.1231, 1.06835 }, /* b */ + {42.7198, 101.578, 11.4813 }, /* c */ + {-0.409286, -0.743294, -0.228344 }, /* x0 */ + { 0.0, 0.0, 0.0 }, /* Q */ + 0.0 /* fpp */ + } +}; + +typedef struct{ + int spin_interpolation; /* 0: VWN; 1: HL */ + vwn_consts_type *X1, *X2; +} lda_c_vwn_params; + + +/* initialization */ +static void +init_vwn_constants(vwn_consts_type *X) +{ + int i; + + X->A[2] = -1.0/(6.0*M_PI*M_PI); + for(i=0; i<3; i++){ + X->Q[i] = SQRT(4.0*X->c[i] - X->b[i]*X->b[i]); + } + X->fpp = 4.0/(9.0*(CBRT(2.0) - 1)); +} + +static void +lda_c_vwn_init(XC(func_type) *p) +{ + lda_c_vwn_params *params; + + assert(p->params == NULL); + + p->params = malloc(sizeof(lda_c_vwn_params)); + params = (lda_c_vwn_params *) (p->params); + + init_vwn_constants(&vwn_consts[0]); + init_vwn_constants(&vwn_consts[1]); + + switch(p->info->number){ + case XC_LDA_C_VWN: + params->X1 = params->X2 = &vwn_consts[0]; + params->spin_interpolation = 0; + break; + case XC_LDA_C_VWN_1: + params->X1 = params->X2 = &vwn_consts[0]; + params->spin_interpolation = 1; + break; + case XC_LDA_C_VWN_2: + case XC_LDA_C_VWN_3: + case XC_LDA_C_VWN_4: + params->X1 = &vwn_consts[0]; + params->X2 = &vwn_consts[1]; + params->spin_interpolation = 0; + break; + case XC_LDA_C_VWN_RPA: + params->X1 = params->X2 = &vwn_consts[1]; + params->spin_interpolation = 1; + break; + default: + fprintf(stderr, "Internal error in lda_vwn\n"); + exit(1); + break; + } +} + + +void XC(lda_c_vwn_set_params)(XC(func_type) *p, int spin_interpolation) +{ + lda_c_vwn_params *params; + + assert(p != NULL && p->params != NULL); + params = (lda_c_vwn_params *) (p->params); + + params->spin_interpolation = spin_interpolation; +} + + +/* Eq. (4.4) of [1] */ +static void +ec_i(vwn_consts_type *X, int order, int i, FLOAT x, + FLOAT *zk, FLOAT *dedrs, FLOAT *d2edrs2, FLOAT *d3edrs3) +{ + FLOAT f1, f2, f3, fx, qx, xx0, t1, t2, t3, x2, x3, fx2, fx3; + FLOAT drs, d2rs, d3rs; + + /* constants */ + f1 = 2.0*X->b[i]/X->Q[i]; + f2 = X->b[i]*X->x0[i]/(X->x0[i]*X->x0[i] + X->b[i]*X->x0[i] + X->c[i]); + f3 = 2.0*(2.0*X->x0[i] + X->b[i])/X->Q[i]; + + /* a couple of handy functions */ + fx = x*x + X->b[i]*x + X->c[i]; /* X(x) */ + qx = ATAN(X->Q[i]/(2.0*x + X->b[i])); + xx0 = x - X->x0[i]; + + *zk = X->A[i]*(LOG(x*x/fx) + (f1 - f2*f3)*qx - f2*LOG(xx0*xx0/fx)); + + if(order < 1) return; + + t1 = 2.0*x + X->b[i]; + t2 = 2.0*X->c[i] + X->b[i]*x; + t3 = t1*t1 + X->Q[i]*X->Q[i]; + + drs = X->A[i]; + drs *= -2.0*f2/xx0 + (f2*t1 + t2/x)/fx + - 2.0*X->Q[i]*(f1 - f2*f3)/t3; + + *dedrs = drs/(2.0*x); /* change of sqrt(rs) -> rs */ + + if(order < 2) return; + + x2 = x*x; + x3 = x*x2; + fx2 = fx*fx; + + d2rs = X->A[i]; + d2rs *= -f2*t1*t1/fx2 - t1*t2/(x*fx2) + 2.0*f2/fx + + X->b[i]/(x*fx) - t2/(x2*fx) + 8.0*(f1 - f2*f3)*X->Q[i]*t1/(t3*t3) + + 2.0*f2/(xx0*xx0); + + *d2edrs2 = (d2rs*x - drs)/(4.0*x3); + + if(order < 3) return; + + fx3 = fx*fx2; + + d3rs = 2.0*X->A[i]; + d3rs *= f2*t1*t1*t1/fx3 + t1*t1*t2/(x*fx3) - 3.0*f2*t1/fx2 - X->b[i]*t1/(x*fx2) + -t2/(x*fx2) + t1*t2/(x2*fx2) - X->b[i]/(x2*fx) + t2/(x3*fx) + + (f1 - f2*f3)*X->Q[i]/(t3*t3)*(-32.0*t1*t1/t3 + 8.0) - 2.0*f2/(xx0*xx0*xx0); + + *d3edrs3 = (d3rs*x2 - 3.0*d2rs*x + 3.0*drs)/(8.0*x3*x2); +} + +/* the functional */ +static inline void +func(const XC(func_type) *p, XC(lda_work_t) *r) +{ + lda_c_vwn_params *params; + + FLOAT ec1, ec2, ec3, ec4, ec5, vc1, vc2, vc3, vc4, vc5, fc1, fc2, fc3, fc4, fc5, kc1, kc2, kc3, kc4, kc5; + FLOAT z3, z4, t1, dt1, d2t1, d3t1, t2, dt2, d2t2, d3t2, fz, dfz, d2fz, d3fz; + FLOAT DMC, DRPA, dDMC, dDRPA, d2DMC, d2DRPA, d3DMC, d3DRPA, aux, daux, d2aux, d3aux; + + assert(p->params != NULL); + params = (lda_c_vwn_params *) (p->params); + + ec_i(params->X1, r->order, 0, r->rs[0], &ec1, &vc1, &fc1, &kc1); + + if(p->nspin==XC_UNPOLARIZED) + r->zk = ec1; + else{ + ec_i(params->X1, r->order, 1, r->rs[0], &ec2, &vc2, &fc2, &kc2); + ec_i(params->X2, r->order, 2, r->rs[0], &ec3, &vc3, &fc3, &kc3); + + DMC = ec2 - ec1; + fz = FZETA(r->zeta); + + if(params->spin_interpolation == 1){ + t1 = 0.0; + t2 = fz; + }else{ + z3 = POW(r->zeta, 3); + z4 = z3*r->zeta; + t1 = (fz/params->X1->fpp)*(1.0 - z4); + t2 = fz*z4; + } + + if(p->info->number == XC_LDA_C_VWN_2 || p->info->number == XC_LDA_C_VWN_3){ + ec_i(&vwn_consts[1], r->order, 0, r->rs[0], &ec4, &vc4, &fc4, &kc4); + ec_i(&vwn_consts[1], r->order, 1, r->rs[0], &ec5, &vc5, &fc5, &kc5); + } + + if(p->info->number == XC_LDA_C_VWN_2){ + DRPA = ec5 - ec4; + r->zk = ec1 + ec3*t1 + DRPA*(t2 - fz) + DMC*fz; + + }else if(p->info->number == XC_LDA_C_VWN_3){ + DRPA = ec5 - ec4; + aux = DMC*ec3/DRPA; + + r->zk = ec1 + aux*t1 + DMC*t2; + + }else + r->zk = ec1 + ec3*t1 + DMC*t2; + } + + if(r->order < 1) return; + + if(p->nspin == XC_UNPOLARIZED) + r->dedrs = vc1; + else{ + dDMC = vc2 - vc1; + dfz = DFZETA(r->zeta); + + if(params->spin_interpolation == 1){ + dt1 = 0.0; + dt2 = dfz; + }else{ + dt1 = dfz*(1.0 - z4) - 4.0*fz*z3; + dt1 /= params->X1->fpp; + dt2 = dfz*z4 + 4.0*fz*z3; + } + + if(p->info->number == XC_LDA_C_VWN_2){ + dDRPA = vc5 - vc4; + + r->dedrs = vc1 + vc3* t1 + dDRPA*( t2 - fz) + dDMC* fz; + r->dedz = ec3*dt1 + DRPA*(dt2 - dfz) + DMC*dfz; + + }else if(p->info->number == XC_LDA_C_VWN_3){ + dDRPA = vc5 - vc4; + daux = (DMC*DRPA*vc3 + ec3*DRPA*dDMC - ec3*DMC*dDRPA)/(DRPA*DRPA); + + r->dedrs = vc1 + daux* t1 + dDMC*t2; + r->dedz = aux*dt1 + DMC*dt2; + + }else{ + r->dedrs = vc1 + vc3* t1 + dDMC* t2; + r->dedz = ec3*dt1 + DMC*dt2; + } + } + + if(r->order < 2) return; + + if(p->nspin == XC_UNPOLARIZED) + r->d2edrs2 = fc1; + else{ + d2DMC = fc2 - fc1; + d2fz = D2FZETA(r->zeta); + + if(params->spin_interpolation == 1){ + d2t1 = 0.0; + d2t2 = d2fz; + }else{ + d2t1 = d2fz*(1.0 - z4) - 8.0*dfz*z3 - 4.0*3.0*fz*r->zeta*r->zeta; + d2t1 /= params->X1->fpp; + d2t2 = d2fz*z4 + 8.0*dfz*z3 + 4.0*3.0*fz*r->zeta*r->zeta; + } + + if(p->info->number == XC_LDA_C_VWN_2){ + d2DRPA = fc5 - fc4; + + r->d2edrs2 = fc1 + fc3* t1 + d2DRPA*( t2 - fz) + d2DMC* fz; + r->d2edrsz = vc3* dt1 + dDRPA*( dt2 - dfz) + dDMC* dfz; + r->d2edz2 = ec3*d2t1 + DRPA*(d2t2 - d2fz) + DMC*d2fz; + + }else if(p->info->number == XC_LDA_C_VWN_3){ + d2DRPA = fc5 - fc4; + d2aux = (2.0*ec3*DMC*dDRPA*dDRPA + DRPA*DRPA*(2.0*vc3*dDMC + DMC*fc3 + ec3*d2DMC) - + DRPA*(2.0*dDRPA*(DMC*vc3 + ec3*dDMC) + ec3*DMC*d2DRPA))/(DRPA*DRPA*DRPA); + + r->d2edrs2 = fc1 + d2aux* t1 + d2DMC* t2; + r->d2edrsz = daux* dt1 + dDMC* dt2; + r->d2edz2 = aux*d2t1 + DMC*d2t2; + + }else{ + r->d2edrs2 = fc1 + fc3* t1 + d2DMC* t2; + r->d2edrsz = vc3* dt1 + dDMC* dt2; + r->d2edz2 = ec3*d2t1 + DMC*d2t2; + } + } + + if(r->order < 3) return; + + if(p->nspin == XC_UNPOLARIZED) + r->d3edrs3 = kc1; + else{ + d3DMC = kc2 - kc1; + d3fz = D3FZETA(r->zeta); + + if(params->spin_interpolation == 1){ + d3t1 = 0.0; + d3t2 = d3fz; + }else{ + d3t1 = d3fz*(1.0 - z4) - 12.0*d2fz*z3 - 36.0*dfz*r->zeta*r->zeta - 24.0*fz*r->zeta; + d3t1 /= params->X1->fpp; + d3t2 = d3fz*z4 + 12.0*d2fz*z3 + 36.0*dfz*r->zeta*r->zeta + 24.0*fz*r->zeta; + } + + if(p->info->number == XC_LDA_C_VWN_2){ + d3DRPA = kc5 - kc4; + + r->d3edrs3 = kc1 + kc3* t1 + d3DRPA*( t2 - fz) + d3DMC* fz; + r->d3edrs2z = fc3* dt1 + d2DRPA*( dt2 - dfz) + d2DMC* dfz; + r->d3edrsz2 = vc3*d2t1 + dDRPA*(d2t2 - d2fz) + dDMC*d2fz; + r->d3edz3 = ec3*d3t1 + DRPA*(d3t2 - d3fz) + DMC*d3fz; + + }else if(p->info->number == XC_LDA_C_VWN_3){ + d3DRPA = kc5 - kc4; + d3aux = (-6.0*ec3*DMC*dDRPA*dDRPA*dDRPA + + 6.0*DRPA*dDRPA*(dDRPA*(DMC*vc3 + ec3*dDMC) + ec3*DMC*d2DRPA) + + DRPA*DRPA*DRPA*(3.0*dDMC*fc3 + 3.0*vc3*d2DMC + DMC*kc3 + ec3*d3DMC) + -DRPA*DRPA*(3.0*dDRPA*(2.0*vc3*dDMC + DMC*fc3 + ec3*d2DMC) + + 3.0*d2DRPA*(DMC*vc3 + ec3*dDMC) + + ec3*DMC*d3DRPA))/(DRPA*DRPA*DRPA*DRPA); + + r->d3edrs3 = kc1 + d3aux* t1 + d3DMC* t2; + r->d3edrs2z = d2aux* dt1 + d2DMC* dt2; + r->d3edrsz2 = daux*d2t1 + dDMC*d2t2; + r->d3edz3 = aux*d3t1 + DMC*d3t2; + + }else{ + r->d3edrs3 = kc1 + kc3* t1 + d3DMC* t2; + r->d3edrs2z = fc3* dt1 + d2DMC* dt2; + r->d3edrsz2 = vc3*d2t1 + dDMC*d2t2; + r->d3edz3 = ec3*d3t1 + DMC*d3t2; + } + } + +} + +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_c_vwn) = { + XC_LDA_C_VWN, + XC_CORRELATION, + "Vosko, Wilk & Nusair (VWN5)", + XC_FAMILY_LDA, + "SH Vosko, L Wilk, and M Nusair, Can. J. Phys. 58, 1200 (1980)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 0.0, 0.0, 1e-32, + lda_c_vwn_init, + NULL, + work_lda, + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_c_vwn_1) = { + XC_LDA_C_VWN_1, + XC_CORRELATION, + "Vosko, Wilk & Nusair (VWN1)", + XC_FAMILY_LDA, + "SH Vosko, L Wilk, and M Nusair, Can. J. Phys. 58, 1200 (1980)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 0.0, 0.0, 1e-32, + lda_c_vwn_init, + NULL, + work_lda, + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_c_vwn_2) = { + XC_LDA_C_VWN_2, + XC_CORRELATION, + "Vosko, Wilk & Nusair (VWN2)", + XC_FAMILY_LDA, + "SH Vosko, L Wilk, and M Nusair, Can. J. Phys. 58, 1200 (1980)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 0.0, 0.0, 1e-32, + lda_c_vwn_init, + NULL, + work_lda, + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_c_vwn_3) = { + XC_LDA_C_VWN_3, + XC_CORRELATION, + "Vosko, Wilk & Nusair (VWN3)", + XC_FAMILY_LDA, + "SH Vosko, L Wilk, and M Nusair, Can. J. Phys. 58, 1200 (1980)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 0.0, 0.0, 1e-32, + lda_c_vwn_init, + NULL, + work_lda, + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_c_vwn_4) = { + XC_LDA_C_VWN_4, + XC_CORRELATION, + "Vosko, Wilk & Nusair (VWN4)", + XC_FAMILY_LDA, + "SH Vosko, L Wilk, and M Nusair, Can. J. Phys. 58, 1200 (1980)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 0.0, 0.0, 1e-32, + lda_c_vwn_init, + NULL, + work_lda, + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_c_vwn_rpa) = { + XC_LDA_C_VWN_RPA, + XC_CORRELATION, + "Vosko, Wilk & Nusair (VWN5_RPA)", + XC_FAMILY_LDA, + "SH Vosko, L Wilk, and M Nusair, Can. J. Phys. 58, 1200 (1980)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 0.0, 0.0, 1e-32, + lda_c_vwn_init, + NULL, + work_lda, + NULL, + NULL +}; + diff --git a/libxc/src/lda_c_wigner.c b/libxc/src/lda_c_wigner.c new file mode 100644 index 000000000..be0abee5d --- /dev/null +++ b/libxc/src/lda_c_wigner.c @@ -0,0 +1,69 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include "util.h" + +/************************************************************************ + Wigner's parametrization from the low density limit +************************************************************************/ + +#define XC_LDA_C_WIGNER 2 /* Wigner parametrization */ + +static inline void +func(const XC(func_type) *p, XC(lda_work_t) *r) +{ + static FLOAT a = -0.44, b = 7.8; + FLOAT t, t2; + + t = b + r->rs[1]; + r->zk = a/t; + + if(r->order < 1) return; + + t2 = t*t; + r->dedrs = -a/t2; + r->dedz = 0.0; + + if(r->order < 2) return; + + r->d2edrs2 = 2.0*a/(t2*t); + r->d2edrsz = r->d2edz2 = 0.0; + + if(r->order < 3) return; + + r->d3edrs3 = -2.0*3.0*a/(t2*t2); + r->d3edrs2z = r->d3edrsz2 = r->d3edz3 = 0.0; +} + +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_c_wigner) = { + XC_LDA_C_WIGNER, + XC_CORRELATION, + "Wigner", + XC_FAMILY_LDA, + "EP Wigner, Trans. Faraday Soc. 34, 678 (1938)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 0.0, 0.0, 1e-32, + NULL, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; diff --git a/libxc/src/lda_k_tf.c b/libxc/src/lda_k_tf.c new file mode 100644 index 000000000..9481950f6 --- /dev/null +++ b/libxc/src/lda_k_tf.c @@ -0,0 +1,127 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_LDA_K_TF 50 /* Thomas-Fermi kinetic energy functional */ +#define XC_LDA_K_LP 51 /* Lee and Parr Gaussian ansatz */ + +static inline void +func(const XC(func_type) *p, XC(lda_work_t) *r) +{ + FLOAT ax, fz, dfz, d2fz, d3fz; + + switch(p->info->number){ + case XC_LDA_K_LP:\ + /* 3*M_PI/2^(5/3) * (3/4 pi)^(2/3) = 3*M_PI*POW(3/(8*M_PI), 2/3)*/ + ax = 1.142427709758666675644309251677891925671; + break; + case XC_LDA_K_TF: + /* 3/10*(3*M_PI^2)^(2/3) * (3/4 pi)^(2/3) = 3/10*POW(9*M_PI/4, 2/3) */ + ax = 1.104950565705860002098832079519635692942; + break; + } + + r->zk = ax/r->rs[2]; + + if(p->nspin == XC_POLARIZED){ + fz = 0.5*(POW(1.0 + r->zeta, 5.0/3.0) + POW(1.0 - r->zeta, 5.0/3.0)); + r->zk *= fz; + } + + if(r->order < 1) return; + + r->dedrs = -2.0*ax/(r->rs[1]*r->rs[2]); + + if(p->nspin == XC_POLARIZED){ + dfz = 5.0/(2.0*3.0)*(POW(1.0 + r->zeta, 2.0/3.0) - POW(1.0 - r->zeta, 2.0/3.0)); + + r->dedrs *= fz; + r->dedz = ax/r->rs[2]*dfz; + } + + if(r->order < 2) return; + + r->d2edrs2 = 2.0*3.0*ax/(r->rs[2]*r->rs[2]); + + if(p->nspin == XC_POLARIZED){ + if(ABS(r->zeta) == 1.0) + d2fz = FLT_MAX; + else + d2fz = 10.0/(2.0*9.0)*(1.0/CBRT(1.0 + r->zeta) + 1.0/CBRT(1.0 - r->zeta)); + + r->d2edrs2 *= fz; + r->d2edrsz = -2.0*ax/(r->rs[1]*r->rs[2])*dfz; + r->d2edz2 = ax/r->rs[2] *d2fz; + } + + if(r->order < 3) return; + + r->d3edrs3 = -2.0*3.0*4.0*ax/(r->rs[1]*r->rs[2]*r->rs[2]); + + if(p->nspin == XC_POLARIZED){ + if(ABS(r->zeta) == 1.0) + d3fz = FLT_MAX; + else + d3fz = -10.0/(2.0*27.0)*(POW(1.0 + r->zeta, -4.0/3.0) - POW(1.0 - r->zeta, -4.0/3.0)); + + r->d3edrs3 *= fz; + r->d3edrs2z = 2.0*3.0*ax/(r->rs[2]*r->rs[2])*dfz; + r->d3edrsz2 = -2.0*ax/(r->rs[1]*r->rs[2])*d2fz; + r->d3edz3 = ax/r->rs[2] *d3fz; + } + +} + +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_k_tf) = { + XC_LDA_K_TF, + XC_KINETIC, + "Thomas-Fermi kinetic energy", + XC_FAMILY_LDA, + "LH Thomas, Proc. Cambridge Phil. Soc. 23, 542-548 (1927)\n" + "E Fermi. Rend. Accad. Naz. Lincei 6, 602-607 (1927)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-29, 0.0, 0.0, 1e-32, + NULL, + NULL, + work_lda, + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_k_lp) = { + XC_LDA_K_LP, + XC_KINETIC, + "Lee and Parr Gaussian ansatz for the kinetic energy", + XC_FAMILY_LDA, + "CL and RG Parr, Phys. Rev. A 35, 2377-2383 (1987)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-29, 0.0, 0.0, 1e-32, + NULL, + NULL, + work_lda, + NULL, + NULL +}; + diff --git a/libxc/src/lda_x.c b/libxc/src/lda_x.c new file mode 100644 index 000000000..9c0841240 --- /dev/null +++ b/libxc/src/lda_x.c @@ -0,0 +1,410 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_LDA_X 1 /* Exchange */ +#define XC_LDA_C_XALPHA 6 /* Slater Xalpha */ + +/* + Slater's Xalpha functional (Exc = alpha Ex) + + Note: this is to be added to the exchange + + This correlation functional, added to the exchange functional, produces + a total exchange-correlation functional, Exc, equal to 3/2 * alpha * Ex + Setting alpha equal to one gives the *usual* Slater Xalpha functional, + whereas alpha equal to 2/3 just leaves the exchange functional unchanged. +*/ + +/* Relativistic corrections */ +/* A. K. Rajagopal, J. Phys. C 11, L943 (1978). + A. H. MacDonald and S. H. Vosko, J. Phys. C 12, 2977 (1979). + E. Engel, S. Keller, A. Facco Bonetti, H. Mueller, and R. M. Dreizler, Phys. Rev. A 52, 2750 (1995). +*/ + +/* Range separation */ +/* J. Toulouse, A. Savin, H.-J. Flad, Int. J. of Quant. Chem. 100, 1047-1056 (2004). +*/ + +typedef struct{ + FLOAT alpha; /* parameter for Xalpha functional */ + int relativistic; /* use the relativistic version of the functional or not */ +} XC(lda_x_params); + +static void +lda_x_init(XC(func_type) *p) +{ + assert(p != NULL && p->params == NULL); + p->params = malloc(sizeof(XC(lda_x_params))); + + /* exchange is equal to xalpha with a parameter of 4/3 */ + XC(lda_x_set_params)(p, 4.0/3.0, XC_NON_RELATIVISTIC, 0.0); +} + +static void +lda_c_xalpha_init(XC(func_type) *p) +{ + assert(p != NULL && p->params == NULL); + p->params = malloc(sizeof(XC(lda_x_params))); + + /* This gives the usual Xalpha functional */ + XC(lda_x_set_params)(p, 1.0, XC_NON_RELATIVISTIC, 0.0); +} + +void +XC(lda_c_xalpha_set_params)(XC(func_type) *p, FLOAT alpha) +{ + XC(lda_x_set_params)(p, alpha, XC_NON_RELATIVISTIC, 0.0); +} + +void +XC(lda_x_set_params)(XC(func_type) *p, FLOAT alpha, int relativistic, FLOAT omega) +{ + XC(lda_x_params) *params; + + assert(p != NULL && p->params != NULL); + params = (XC(lda_x_params) *) (p->params); + + params->alpha = 1.5*alpha - 1.0; + params->relativistic = relativistic; + p->cam_omega = omega; +} + + +/* +see + Int. J. of Quant. Chem. 100, 1047-1056 (2004). + Chem. Phys. Lett. 462(2008) 348-351 + J. Chem. Phys. 120, 8425 (2004) +*/ +void +XC(lda_x_attenuation_function)(int interaction, int order, FLOAT aa, FLOAT *f, FLOAT *df, FLOAT *d2f, FLOAT *d3f) +{ + FLOAT aa2, aa3, auxa1, auxa2, auxa3; + FLOAT bb, bb2, bb3, auxb1, auxb2; + + aa2 = aa*aa; + aa3 = aa*aa2; + + if (interaction == XC_RSF_ERF || interaction == XC_RSF_ERF_GAU) { + auxa1 = M_SQRTPI*ERF(1.0/(2.0*aa)); + + if(aa < 1.0e6) + auxa2 = EXP(-1.0/(4.0*aa2)) - 1.0; + else + auxa2 = -1.0/(4.0*aa2); + + auxa3 = 2.0*aa2*auxa2 + 0.5; + + *f = 1.0 - 8.0/3.0*aa*(auxa1 + 2.0*aa*(auxa2 - auxa3)); + + if(interaction == XC_RSF_ERF_GAU){ + bb = aa/M_SQRT3; + bb2 = bb*bb; + bb3 = bb*bb2; + auxb1 = M_SQRTPI*ERF(1.0/(2.0*bb)); + auxb2 = EXP(-1.0/(4.0*bb2)); + + *f += 8.0/M_SQRT3*bb*(auxb1 - 6.0*bb + 16.0*bb3 + (2.0*bb - 16*bb3)*auxb2); + } + + if(order < 1) return; + + *df = 8.0/3.0 * (4.0*aa - 2.0*(1.0 - 8.0*aa2)*aa*auxa2 - auxa1); + + if(interaction == XC_RSF_ERF_GAU) + *df -= 8.0/3.0*(4.0*bb*(3.0 - 16.0*bb2 + (1.0 + 16.0*bb2)*auxb2) - auxb1); + + if(order < 2) return; + + *d2f = 16.0*(2.0 + (1.0 + 8.0*aa2)*auxa2); + + if(interaction == XC_RSF_ERF_GAU) + *d2f -= 8.0/(3.0*M_SQRT3)*(12.0 - 192.0*bb2 + 3.0*(1.0/bb2 + 12.0 + 64.0*bb2)*auxb2); + + if(order < 3) return; + + *d3f = -256.0*aa + 8.0*(1.0 + 8.0*aa2 + 32.0*aa2*aa2)*(auxa2 + 1.0)/aa3; + + if(interaction == XC_RSF_ERF_GAU) + *d3f -= 8.0/9.0*(-384.0*bb + 3.0*(1.0 + 8.0*bb2*(1.0 + bb2*(8.0 + bb2*32.0))*auxb2/(2.0*bb2*bb2*bb))); + + } else { /* XC_RSF_YUKAWA */ + + auxa1 = ATAN2(1.0,aa); + auxa2 = LOG(1+(1.0/aa2)); + auxa3 = (aa2 + 1); + + switch (order) { + default: /* > 3 - catch-22 */ + case 3: + *d3f = 8*(2*aa2*auxa3*auxa2 - 2*aa2 -1)/(aa*auxa3); + + case 2: + *d2f = 4*(2*aa2 + 1)*auxa2 - 2; + + case 1: + *df = 4.0/3.0 * (aa*((2*aa2 + 3)*auxa2 - 2) - 2* auxa1); + + case 0: + *f = 1.0 - 8.0/3.0*aa*(auxa1 + aa/4.0* (1.0 - (auxa3 +2)*auxa2)); + } /* no break needed */ + } + +} + + +static inline void +func(const XC(func_type) *p, XC(lda_work_t) *r) +{ + FLOAT ax, omz, cbrtomz, opz, cbrtopz, fz, dfzdz, dfzdrs, d2fzdz2, d2fzdrsz, d2fzdrs2; + FLOAT d3fzdz3, d3fzdrsz2, d3fzdrs2z, d3fzdrs3; + FLOAT beta, beta2, beta4, beta6, f1, f1_3, f1_5, f2, f3; + FLOAT phi, dphi, d2phi, d3phi, dphidbeta, d2phidbeta2, d3phidbeta3, dbetadrs, d2betadrs2, d3betadrs3; + FLOAT zk_nr, dedrs_nr, dedz_nr, d2edrs2_nr, d2edrsz_nr, d2edz2_nr; + XC(lda_x_params) *params; + + FLOAT a_cnst, fa_u, dfa_u, d2fa_u, d3fa_u, fa_d, dfa_d, d2fa_d, d3fa_d; + + assert(p->params != NULL); + params = (XC(lda_x_params) *) (p->params); + + ax = -params->alpha*0.458165293283142893475554485052; /* -alpha * 3/4*POW(3/(2*M_PI), 2/3) */ + + if(p->nspin == XC_POLARIZED){ + opz = 1.0 + r->zeta; + omz = 1.0 - r->zeta; + cbrtopz = CBRT(opz); + cbrtomz = CBRT(omz); + } + + if(p->cam_omega == 0.0){ + a_cnst = 0.0; + fa_u = fa_d = 1.0; + + }else{ + a_cnst = CBRT(4.0/(9.0*M_PI))*p->cam_omega/2.0; + + if(p->nspin == XC_UNPOLARIZED){ + XC(lda_x_attenuation_function)(XC_RSF_ERF, r->order, a_cnst*r->rs[1], &fa_u, &dfa_u, &d2fa_u, &d3fa_u); + }else{ + if(cbrtopz > 0.0) + XC(lda_x_attenuation_function)(XC_RSF_ERF, r->order, a_cnst*r->rs[1]/cbrtopz, &fa_u, &dfa_u, &d2fa_u, &d3fa_u); + else + fa_u = dfa_u = d2fa_u = d3fa_u = 0.0; + + if(cbrtomz > 0.0) + XC(lda_x_attenuation_function)(XC_RSF_ERF, r->order, a_cnst*r->rs[1]/cbrtomz, &fa_d, &dfa_d, &d2fa_d, &d3fa_d); + else + fa_d = dfa_d = d2fa_d = d3fa_d = 0.0; + } + } + + if(p->nspin == XC_UNPOLARIZED) + fz = fa_u; + else + fz = 0.5*(opz*cbrtopz*fa_u + omz*cbrtomz*fa_d); + + r->zk = ax*fz/r->rs[1]; + + if(params->relativistic == XC_RELATIVISTIC){ + beta = CBRT(9.0*M_PI/4.0)/(r->rs[1]*M_C); + beta2 = beta*beta; + f1 = SQRT(1.0 + beta2); + f2 = ASINH(beta); + f3 = f1/beta - f2/beta2; + phi = 1.0 - 3.0/2.0*f3*f3; + + zk_nr = r->zk; + r->zk *= phi; + } + + if(r->order < 1) return; + + r->dedrs = -ax/r->rs[2]; + + if(p->cam_omega == 0.0) + dfa_u = dfa_d = 0.0; + + if(p->nspin == XC_POLARIZED){ + dfzdz = 1.0/6.0*(4.0*cbrtopz*fa_u - 4.0*cbrtomz*fa_d - a_cnst*r->rs[1]*(dfa_u - dfa_d)); + dfzdrs = 0.5*a_cnst*(opz*dfa_u + omz*dfa_d); + }else{ + dfzdrs = a_cnst*dfa_u; + } + + r->dedrs = ax*(-fz/r->rs[2] + dfzdrs/r->rs[1]); + if(p->nspin == XC_POLARIZED) + r->dedz = ax*dfzdz/r->rs[1]; + + if(params->relativistic == XC_RELATIVISTIC){ + beta4 = beta2*beta2; + dphidbeta = 6.0/(beta4*beta)*(beta2 - beta*(2 + beta2)*f2/f1 + f2*f2); + dbetadrs = -beta/r->rs[1]; + + dedrs_nr = r->dedrs; + dphi = dphidbeta*dbetadrs; + + r->dedrs = r->dedrs*phi + zk_nr*dphi; + if(p->nspin == XC_POLARIZED){ + dedz_nr = r->dedz; + r->dedz = r->dedz*phi; + } + } + + + if(r->order < 2) return; + + if(p->cam_omega == 0.0) + d2fa_u = d2fa_d = 0.0; + + if(p->nspin == XC_POLARIZED){ + d2fzdrs2 = 0.5*a_cnst*a_cnst*(cbrtopz*cbrtopz*d2fa_u + cbrtomz*cbrtomz*d2fa_d); + if(ABS(r->zeta) == 1.0){ + d2fzdz2 = d2fzdrsz = FLT_MAX; + }else{ + d2fzdrsz = a_cnst/6.0*(3.0*(dfa_u - dfa_d) - a_cnst*r->rs[1]*(d2fa_u/cbrtopz - d2fa_d/cbrtomz)); + d2fzdz2 = 1.0/18.0* + (+ 4.0*(fa_u/(cbrtopz*cbrtopz) + fa_d/(cbrtomz*cbrtomz)) + - 4.0*a_cnst*r->rs[1]*(dfa_u/opz + dfa_d/omz) + + a_cnst*a_cnst*r->rs[2]*(d2fa_u/(opz*cbrtopz) + d2fa_d/(omz*cbrtomz))); + } + }else{ + d2fzdrs2 = a_cnst*a_cnst*d2fa_u; + } + + r->d2edrs2 = ax*(2.0*fz/(r->rs[1]*r->rs[2]) - 2.0*dfzdrs/r->rs[2] + d2fzdrs2/r->rs[1]); + + if(p->nspin == XC_POLARIZED){ + r->d2edrsz = ax*(-dfzdz/r->rs[2] + d2fzdrsz/r->rs[1]); + r->d2edz2 = ax*d2fzdz2/r->rs[1]; + } + + if(params->relativistic == XC_RELATIVISTIC){ + f1_3 = f1*f1*f1; + d2phidbeta2 = -(beta2*f1*(5.0 + 4.0*beta2) - + beta*(10.0 + 14.0*beta2 + 3.0*beta4)*f2 + + 5.0*f1_3*f2*f2) * 6.0/(beta4*beta2*f1_3); + d2betadrs2 = -2.0*dbetadrs/r->rs[1]; + + d2edrs2_nr = r->d2edrs2; + d2phi = d2phidbeta2*dbetadrs*dbetadrs + dphidbeta*d2betadrs2; + + r->d2edrs2 = r->d2edrs2*phi + 2.0*dedrs_nr*dphi + zk_nr*d2phi; + if(p->nspin == XC_POLARIZED){ + d2edz2_nr = r->d2edz2; + d2edrsz_nr = r->d2edrsz; + + r->d2edrsz = r->d2edrsz*phi + dedz_nr*dphi; + r->d2edz2 = r->d2edz2*phi; + + } + } + + if(r->order < 3) return; + + if(p->cam_omega == 0.0) + d3fa_u = d3fa_d = 0.0; + + if(p->nspin == XC_POLARIZED){ + d3fzdrs3 = 0.5*a_cnst*a_cnst*a_cnst*(cbrtopz*d3fa_u + cbrtomz*d3fa_d); + if(ABS(r->zeta) == 1.0){ + d3fzdz3 = d3fzdrs2z = d3fzdrsz2 = FLT_MAX; + }else{ + d3fzdrs2z = a_cnst*a_cnst/6.0* + (2.0*(d2fa_u/cbrtopz - d2fa_d/cbrtomz) - a_cnst*r->rs[1]*(d3fa_u/(cbrtopz*cbrtopz) - d3fa_d/(cbrtomz*cbrtomz))); + d3fzdrsz2 = 1.0/18.0* + (-2.0*a_cnst*a_cnst*r->rs[1]*(d2fa_u/(opz*cbrtopz) + d2fa_d/(omz*cbrtomz)) + +a_cnst*a_cnst*a_cnst*r->rs[2]*(d3fa_u/(opz*cbrtopz*cbrtopz) + d2fa_d/(omz*cbrtomz*cbrtomz))); + d3fzdz3 = 1.0/54.0* + (-8.0*(fa_u/(opz*cbrtopz*cbrtopz) - fa_d/(omz*cbrtomz*cbrtomz)) + +8.0*a_cnst*r->rs[1]*(dfa_u/(opz*opz) - dfa_d/(omz*omz)) + -a_cnst*a_cnst*a_cnst*r->rs[1]*r->rs[2]*(d3fa_u/(opz*opz*cbrtopz*cbrtopz) - d3fa_d/(omz*omz*cbrtomz*cbrtomz))); + } + }else + d3fzdrs3 = a_cnst*a_cnst*a_cnst*d2fa_u; + + r->d3edrs3 = ax*(-6.0*fz/(r->rs[2]*r->rs[2]) + 6.0*dfzdrs/(r->rs[1]*r->rs[2]) + -3.0*d2fzdrs2/r->rs[2] + d3fzdrs3/r->rs[1]); + + if(p->nspin == XC_POLARIZED){ + r->d3edrs2z = ax*(2.0*dfzdz/(r->rs[1]*r->rs[2]) - 2.0*d2fzdrsz/r->rs[2] + d3fzdrs2z/r->rs[1]); + r->d3edrsz2 = ax*(-d2fzdz2/r->rs[2]+ d3fzdrsz2/r->rs[1]); + r->d3edz3 = ax*d3fzdz3/r->rs[1]; + } + + + if(params->relativistic == XC_RELATIVISTIC){ + beta6 = beta4*beta2; + f1_5 = f1_3*f1*f1; + + d3phidbeta3 = (beta2*f1*(30.0 + 52.0*beta2 + 19.0*beta4) - + beta*f2*(60.0 + 142.0*beta2 + 97.0*beta4 + 12.0*beta6) + + 30.0*f1_5*f2*f2) * 6.0/(beta6*beta*f1_5); + d3betadrs3 = -3.0*d2betadrs2/r->rs[1]; + + d3phi = d3phidbeta3*dbetadrs*dbetadrs*dbetadrs + 3.0*d2phidbeta2*dbetadrs*d2betadrs2 + + dphidbeta*d3betadrs3; + + r->d3edrs3 = r->d3edrs3*phi + 3.0*d2edrs2_nr*dphi + 3.0*dedrs_nr*d2phi + zk_nr*d3phi; + if(p->nspin == XC_POLARIZED){ + r->d3edrs2z = r->d3edrs2z*phi + 2.0*d2edrsz_nr*dphi + dedz_nr*d2phi; + r->d3edrsz2 = r->d3edrsz2*phi + d2edz2_nr*dphi; + r->d3edz3 = r->d3edz3*phi; + } + } +} + +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_x) = { + XC_LDA_X, + XC_EXCHANGE, + "Slater exchange", + XC_FAMILY_LDA, + "PAM Dirac, Proceedings of the Cambridge Philosophical Society 26, 376 (1930)\n" + "F Bloch, Zeitschrift fuer Physik 57, 545 (1929)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-29, 0.0, 0.0, 1e-32, + lda_x_init, + NULL, + work_lda, + NULL, + NULL +}; + +const XC(func_info_type) XC(func_info_lda_c_xalpha) = { + XC_LDA_C_XALPHA, + XC_CORRELATION, + "Slater's Xalpha", + XC_FAMILY_LDA, + "JC Slater, Phys. Rev. 81, 385 (1951)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-29, 0.0, 0.0, 1e-32, + lda_c_xalpha_init, + NULL, + work_lda, + NULL, + NULL +}; + diff --git a/libxc/src/lda_x_1d.c b/libxc/src/lda_x_1d.c new file mode 100644 index 000000000..ecf646fde --- /dev/null +++ b/libxc/src/lda_x_1d.c @@ -0,0 +1,169 @@ +/* + Copyright (C) 2006-2009 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_LDA_X_1D 21 /* Exchange in 1D */ + +typedef struct{ + int interaction; /* 0: exponentially screened; 1: soft-Coulomb */ + FLOAT bb; /* screening parameter beta */ +} lda_x_1d_params; + +static void +lda_x_1d_init(XC(func_type) *p) +{ + assert(p->params == NULL); + p->params = malloc(sizeof(lda_x_1d_params)); + + /* default value is soft-Coulomb with beta=1.0 */ + XC(lda_x_1d_set_params)(p, 1, 1.0); +} + + +void +XC(lda_x_1d_set_params)(XC(func_type) *p, int interaction, FLOAT bb) +{ + lda_x_1d_params *params; + + assert(p != NULL && p->params != NULL); + params = (lda_x_1d_params *)(p->params); + + assert(interaction == 0 || interaction == 1); + + params->interaction = interaction; + params->bb = bb; +} + + +static inline FLOAT FT_inter(FLOAT x, int interaction) +{ + assert(interaction == 0 || interaction == 1); + + if(interaction == 0){ + FLOAT x2 = x*x; + return expint_e1(x2)*EXP(x2); + }else + return 2.0*XC(bessel_K0)(x); +} + + +static void func1(FLOAT *x, int n, void *ex) +{ + int interaction = *(int *)ex; + int ii; + + for(ii=0; iiparams != NULL); + interaction = ((lda_x_1d_params *)p->params)->interaction; + bb = ((lda_x_1d_params *)p->params)->bb; + + r->zk = 0.0; + for(is=0; isnspin; is++){ + R = M_PI*bb*(1.0 + spin_sign[is]*r->zeta)/(2.0*r->rs[1]); + + if(R == 0.0) continue; + + int1[is] = XC(integrate)(func1, (void *)(&interaction), 0.0, R); + int2[is] = XC(integrate)(func2, (void *)(&interaction), 0.0, R); + + r->zk -= (1.0 + spin_sign[is]*r->zeta) * + (int1[is] - int2[is]/R); + } + r->zk *= spin_fact[p->nspin-1]/(4.0*M_PI*bb); + + if(r->order < 1) return; + + r->dedrs = 0.0; + r->dedz = 0.0; + for(is=0; isnspin; is++){ + if(1.0 + spin_sign[is]*r->zeta == 0.0) continue; + + r->dedrs += int2[is]; + r->dedz -= spin_sign[is]*int1[is]; + } + r->dedrs *= spin_fact[p->nspin-1]/(2.0*M_PI*M_PI*bb*bb); + r->dedz *= spin_fact[p->nspin-1]/(4.0*M_PI*bb); + + if(r->order < 2) return; + + r->d2edrs2 = r->d2edrsz = r->d2edz2 = 0.0; + for(is=0; isnspin; is++){ + FLOAT ft, aux = 1.0 + spin_sign[is]*r->zeta; + + if(aux == 0.0) continue; + + R = M_PI*bb*aux/(2.0*r->rs[1]); + ft = FT_inter(R, interaction); + + r->d2edrs2 -= aux*aux*ft; + r->d2edrsz += spin_sign[is]*aux*ft; + r->d2edz2 -= ft; + } + r->d2edrs2 *= spin_fact[p->nspin-1]/(8.0*r->rs[2]*r->rs[1]); + r->d2edrsz *= spin_fact[p->nspin-1]/(8.0*r->rs[2]); + r->d2edz2 *= spin_fact[p->nspin-1]/(8.0*r->rs[1]); + + if(r->order < 3) return; + + /* TODO : third derivatives */ +} + +#define XC_DIMENSIONS 1 +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_x_1d) = { + XC_LDA_X_1D, + XC_EXCHANGE, + "Exchange in 1D", + XC_FAMILY_LDA, + "N. Helbig, J. I. Fuks, M. Casula, M. J. Verstraete, M. A. L. Marques, I. V. Tokatly and A. Rubio, Phys. Rev. A 83, 032503 (2011)", + XC_FLAGS_1D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 0.0, 0.0, 1e-32, + lda_x_1d_init, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; diff --git a/libxc/src/lda_x_2d.c b/libxc/src/lda_x_2d.c new file mode 100644 index 000000000..eb4dfb0fb --- /dev/null +++ b/libxc/src/lda_x_2d.c @@ -0,0 +1,91 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_LDA_X_2D 19 /* Exchange in 2D */ + +static inline void +func(const XC(func_type) *p, XC(lda_work_t) *r) +{ + const FLOAT ax = -0.600210877438070713036799460671; /* -4/3*SQRT(2)/M_PI */ + FLOAT fz, dfz, d2fz, d3fz; + + r->zk = ax/r->rs[1]; + if(p->nspin == XC_POLARIZED){ + fz = 0.5*(POW(1.0 + r->zeta, 3.0/2.0) + POW(1.0 - r->zeta, 3.0/2.0)); + r->zk *= fz; + } + + if(r->order < 1) return; + + r->dedrs = -ax/r->rs[2]; + if(p->nspin == XC_POLARIZED){ + dfz = 3.0/4.0*(SQRT(1.0 + r->zeta) - SQRT(1.0 - r->zeta)); + + r->dedrs *= fz; + r->dedz = ax/r->rs[1]*dfz; + } + + if(r->order < 2) return; + + r->d2edrs2 = 2.0*ax/(r->rs[1]*r->rs[2]); + if(p->nspin == XC_POLARIZED){ + d2fz = 3.0/8.0*(1.0/SQRT(1.0 + r->zeta) + 1.0/SQRT(1.0 - r->zeta)); + + r->d2edrs2 *= fz; + r->d2edrsz = -ax/r->rs[2]* dfz; + r->d2edz2 = ax/r->rs[1]*d2fz; + } + + if(r->order < 3) return; + + r->d3edrs3 = -6.0*ax/(r->rs[2]*r->rs[2]); + if(p->nspin == XC_POLARIZED){ + d3fz = -3.0/16.0*(POW(1.0 + r->zeta, -3.0/2.0) - POW(1.0 - r->zeta, -3.0/2.0)); + + r->d3edrs3 *= fz; + r->d3edrs2z = 2.0*ax/(r->rs[1]*r->rs[2])*dfz; + r->d3edrsz2 = -ax/r->rs[2]* d2fz; + r->d3edz3 = ax/r->rs[1]* d3fz; + } +} + +#define XC_DIMENSIONS 2 +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_x_2d) = { + XC_LDA_X_2D, + XC_EXCHANGE, + "Slater exchange", + XC_FAMILY_LDA, + "PAM Dirac, Proceedings of the Cambridge Philosophical Society 26, 376 (1930)\n" + "F Bloch, Zeitschrift fuer Physik 57, 545 (1929)", + XC_FLAGS_2D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 0.0, 0.0, 1e-32, + NULL, + NULL, + work_lda, + NULL, + NULL +}; + diff --git a/libxc/src/lda_xc_teter93.c b/libxc/src/lda_xc_teter93.c new file mode 100644 index 000000000..3dcf14346 --- /dev/null +++ b/libxc/src/lda_xc_teter93.c @@ -0,0 +1,173 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_LDA_XC_TETER93 20 /* Teter 93 parametrization */ + +static FLOAT teter_a [4] = {0.4581652932831429, 2.217058676663745, 0.7405551735357053, 0.01968227878617998 }; +static FLOAT teter_ap[4] = {0.119086804055547, 0.6157402568883345, 0.1574201515892867, 0.003532336663397157}; +static FLOAT teter_b [4] = {1.0000000000000000, 4.504130959426697, 1.110667363742916, 0.02359291751427506 }; +static FLOAT teter_bp[4] = {0.000000000000000, 0.2673612973836267, 0.2052004607777787, 0.004200005045691381}; + + +/* the functional */ +static inline void +func(const XC(func_type) *p, XC(lda_work_t) *r) +{ + FLOAT mrs0, mrs1, mrs2, mrs3, mrs4; + FLOAT aa[4], bb[4]; + FLOAT fz[4]; + + FLOAT nn, dd, dd2, dd3, invdd; + FLOAT DnnDrs, DddDrs, DnnDz, DddDz; + FLOAT D2nnDrs2, D2nnDz2, D2nnDrsz, D2ddDrs2, D2ddDz2, D2ddDrsz; + FLOAT D3nnDrs3, D3nnDrs2z, D3nnDrsz2, D3nnDz3, D3ddDrs3, D3ddDrs2z, D3ddDrsz2, D3ddDz3; + int ii; + + /* Wigner radius */ + mrs0 = 1.0; + mrs1 = r->rs[1]; + mrs2 = r->rs[2]; + mrs3 = mrs1*mrs2; + mrs4 = mrs1*mrs3; + + if(p->nspin != XC_UNPOLARIZED){ + XC(fast_fzeta)(r->zeta, p->nspin, r->order, fz); + + for(ii=0; ii < 4; ii++){ + aa[ii] = teter_a[ii] + teter_ap[ii]*fz[0]; + bb[ii] = teter_b[ii] + teter_bp[ii]*fz[0]; + } + + } else { + + fz[0] = 0.0; + fz[1] = 0.0; + fz[2] = (8.0/9.0)/FZETAFACTOR; + fz[3] = 0.0; + + for(ii=0; ii < 4; ii++){ + aa[ii] = teter_a[ii]; + bb[ii] = teter_b[ii]; + } + } + + nn = aa[0]*mrs0 + aa[1]*mrs1 + aa[2]*mrs2 + aa[3]*mrs3; + dd = bb[0]*mrs1 + bb[1]*mrs2 + bb[2]*mrs3 + bb[3]*mrs4; + + invdd = 1.0/dd; + + r->zk = -nn*invdd; + + if(r->order < 1) return; /* nothing else to do */ + + DnnDrs = aa[1] + aa[2]*2.0*mrs1 + aa[3]*3.0*mrs2; + DddDrs = bb[0] + bb[1]*2.0*mrs1 + bb[2]*3.0*mrs2 + 4.0*bb[3]*mrs3; + + r->dedrs = -(DnnDrs - DddDrs*nn*invdd)*invdd; + + if(p->nspin == XC_POLARIZED){ + + DnnDz = (teter_ap[0]*mrs0 + teter_ap[1]*mrs1 + teter_ap[2]*mrs2 + teter_ap[3]*mrs3)*fz[1]; + DddDz = (teter_bp[0]*mrs1 + teter_bp[1]*mrs2 + teter_bp[2]*mrs3 + teter_bp[3]*mrs4)*fz[1]; + + r->dedz = -(DnnDz - DddDz*nn*invdd)*invdd; + } + + if(r->order < 2) return; /* nothing else to do */ + + D2nnDrs2 = 2*aa[2] + 3*2*aa[3]*mrs1; + D2ddDrs2 = 2*bb[1] + 3*2*bb[2]*mrs1 + 4*3*bb[3]*mrs2; + + dd2 = dd*dd; + dd3 = dd*dd2; + + r->d2edrs2 = -((D2nnDrs2*dd - D2ddDrs2*nn)*dd - + 2*DddDrs*(DnnDrs*dd - DddDrs*nn))/dd3; + + if(p->nspin == XC_POLARIZED){ + D2nnDrsz = (teter_ap[1] + 2*teter_ap[2]*mrs1 + 3*teter_ap[3]*mrs2)*fz[1]; + D2ddDrsz = (teter_bp[0] + 2*teter_bp[1]*mrs1 + 3*teter_bp[2]*mrs2 + 4*teter_bp[3]*mrs3)*fz[1]; + + D2nnDz2 = (teter_ap[0]*mrs0 + teter_ap[1]*mrs1 + teter_ap[2]*mrs2 + teter_ap[3]*mrs3)*fz[2]; + D2ddDz2 = (teter_bp[0]*mrs1 + teter_bp[1]*mrs2 + teter_bp[2]*mrs3 + teter_bp[3]*mrs4)*fz[2]; + + r->d2edz2 = -((D2nnDz2*dd - D2ddDz2*nn)*dd - + 2*DddDz* (DnnDz*dd - DddDz*nn)) /dd3; + r->d2edrsz = -((D2nnDrsz*dd + DnnDrs*DddDz - D2ddDrsz*nn - DddDrs*DnnDz)*dd - + 2*DddDz* (DnnDrs*dd - DddDrs*nn))/dd3; + } + + if(r->order < 3) return; /* nothing else to do */ + + D3nnDrs3 = 3*2*aa[3]; + D3ddDrs3 = 3*2*bb[2] + 4*3*2*bb[3]*mrs1; + + r->d3edrs3 = (- nn*(6.0*DddDrs*DddDrs*DddDrs - 6.0*dd*DddDrs*D2ddDrs2 + dd2*D3ddDrs3) + + dd*(6.0*DddDrs*DddDrs*DnnDrs - 3.0*dd*DddDrs*D2nnDrs2 + + dd*(-3.0*DnnDrs*D2ddDrs2 + dd*D3nnDrs3))); + r->d3edrs3 /= -dd3*dd; + + if(p->nspin == XC_POLARIZED){ + D3nnDrs2z = (2*teter_ap[2] + 3*2*teter_ap[3]*mrs1)*fz[1]; + D3ddDrs2z = (2*teter_bp[1] + 3*2*teter_bp[2]*mrs1 + 4*3*teter_bp[3]*mrs2)*fz[1]; + + D3nnDrsz2 = (teter_ap[1] + 2*teter_ap[2]*mrs1 + 3*teter_ap[3]*mrs2)*fz[2]; + D3ddDrsz2 = (teter_bp[0] + 2*teter_bp[1]*mrs1 + 3*teter_bp[2]*mrs2 + 4*teter_bp[3]*mrs3)*fz[2]; + + D3nnDz3 = (teter_ap[0]*mrs0 + teter_ap[1]*mrs1 + teter_ap[2]*mrs2 + teter_ap[3]*mrs3)*fz[3]; + D3ddDz3 = (teter_bp[0]*mrs1 + teter_bp[1]*mrs2 + teter_bp[2]*mrs3 + teter_bp[3]*mrs4)*fz[3]; + + r->d3edz3 = (- nn*(6.0*DddDz*DddDz*DddDz - 6.0*dd*DddDz*D2ddDz2 + dd2*D3ddDz3) + + dd*(6.0*DddDz*DddDz*DnnDz - 3.0*dd*DddDz*D2nnDz2 + + dd*(-3.0*DnnDz*D2ddDz2 + dd*D3nnDz3))); + r->d3edz3 /= -dd3*dd; + + r->d3edrs2z = -(nn*(DddDz*(6.0*DddDrs*DddDrs - 2.0*dd*D2ddDrs2) + dd*(-4.0*DddDrs*D2ddDrsz + dd*D3ddDrs2z)) + + dd*(DnnDz*(-2.0*DddDrs*DddDrs + dd*D2ddDrs2) + DddDz*(-4.0*DddDrs*DnnDrs + dd*D2nnDrs2) + + dd*(2.0*DnnDrs*D2ddDrsz + 2.0*DddDrs*D2nnDrsz - dd*D3nnDrs2z))); + r->d3edrs2z /= -dd3*dd; + + r->d3edrsz2 = -(nn*(DddDrs*(6.0*DddDz*DddDz - 2.0*dd*D2ddDz2) + dd*(-4.0*DddDz*D2ddDrsz + dd*D3ddDrsz2)) + + dd*(DnnDrs*(-2.0*DddDz*DddDz + dd*D2ddDz2) + DddDrs*(-4.0*DddDz*DnnDz + dd*D2nnDz2) + + dd*(2.0*DnnDz*D2ddDrsz + 2.0*DddDz*D2nnDrsz - dd*D3nnDrsz2))); + r->d3edrsz2 /= -dd3*dd; + } +} + +#include "work_lda.c" + +const XC(func_info_type) XC(func_info_lda_xc_teter93) = { + XC_LDA_XC_TETER93, + XC_EXCHANGE_CORRELATION, + "Teter 93", + XC_FAMILY_LDA, + "S Goedecker, M Teter, J Hutter, PRB 54, 1703 (1996)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC | XC_FLAGS_HAVE_KXC, + 1e-32, 0.0, 0.0, 1e-32, + NULL, /* init */ + NULL, /* end */ + work_lda, /* lda */ + NULL, + NULL +}; diff --git a/libxc/src/libxc.f90 b/libxc/src/libxc.f90 new file mode 100644 index 000000000..30cefb727 --- /dev/null +++ b/libxc/src/libxc.f90 @@ -0,0 +1,535 @@ +# 1 "./libxc_master.F90" +# 1 "" +# 1 "" +# 1 "./libxc_master.F90" +!! Copyright (C) 2003-2006 M. Marques, A. Castro, A. Rubio, G. Bertsch +!! +!! This program is free software; you can redistribute it and/or modify +!! it under the terms of the GNU Lesser General Public License as published by +!! the Free Software Foundation; either version 2, or (at your option) +!! any later version. +!! +!! This program is distributed in the hope that it will be useful, +!! but WITHOUT ANY WARRANTY; without even the implied warranty of +!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +!! GNU Lesser General Public License for more details. +!! +!! You should have received a copy of the GNU Lesser General Public License +!! along with this program; if not, write to the Free Software +!! Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +!! 02110-1301, USA. +!! +!! $Id: libxc.f90 3550 2007-11-19 14:32:49Z marques $ +# 27 "./libxc_master.F90" +!------------------------------------------------------------------- +module xc_f90_types_m + + + + integer, public, parameter :: xc_f90_kind = selected_real_kind(14) + + + type xc_f90_pointer_t + private + integer, pointer :: buffer + end type xc_f90_pointer_t + +end module xc_f90_types_m + + +!------------------------------------------------------------------- +module xc_f90_lib_m + + use xc_f90_types_m + use libxc_funcs_m + + implicit none + + public + + ! Families of xc functionals + integer, parameter :: & + XC_FAMILY_UNKNOWN = -1, & + XC_FAMILY_NONE = 0, & + XC_FAMILY_LDA = 1, & + XC_FAMILY_GGA = 2, & + XC_FAMILY_MGGA = 4, & + XC_FAMILY_LCA = 8, & + XC_FAMILY_OEP = 16, & + XC_FAMILY_HYB_GGA = 32, & + XC_FAMILY_HYB_MGGA = 64 + + integer, parameter :: & + XC_UNPOLARIZED = 1, & ! Spin unpolarized + XC_POLARIZED = 2 ! Spin polarized + + integer, parameter :: & + XC_NON_RELATIVISTIC = 0, & ! Functional includes or not relativistic + XC_RELATIVISTIC = 1 ! corrections. Only available in some functionals. + + ! Kinds + integer, parameter :: & + XC_EXCHANGE = 0, & + XC_CORRELATION = 1, & + XC_EXCHANGE_CORRELATION = 2, & + XC_KINETIC = 3 + + integer, parameter :: & + XC_FLAGS_HAVE_EXC = 1, & + XC_FLAGS_HAVE_VXC = 2, & + XC_FLAGS_HAVE_FXC = 4, & + XC_FLAGS_HAVE_KXC = 8, & + XC_FLAGS_HAVE_LXC = 16, & + XC_FLAGS_1D = 32, & + XC_FLAGS_2D = 64, & + XC_FLAGS_3D = 128, & + XC_FLAGS_STABLE = 512, & + XC_FLAGS_DEVELOPMENT = 1024 + + ! These are old names keep for compatibility, and that should disappear soon + integer, parameter :: XC_GGA_XC_LB = 160 + integer, parameter :: XC_GGA_K_ABSR1 = 506 + integer, parameter :: XC_GGA_K_ABSR2 = 507 + + !---------------------------------------------------------------- + interface + subroutine xc_f90_version(major, minor) + integer, intent(out) :: major, minor + end subroutine xc_f90_version + end interface + + !---------------------------------------------------------------- + interface + integer function xc_f90_info_number(info) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: info + end function xc_f90_info_number + + integer function xc_f90_info_kind(info) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: info + end function xc_f90_info_kind + + subroutine xc_f90_info_name(info, s) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: info + character(len=*), intent(out) :: s + end subroutine xc_f90_info_name + + integer function xc_f90_info_family(info) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: info + end function xc_f90_info_family + + integer function xc_f90_info_flags(info) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: info + end function xc_f90_info_flags + + subroutine xc_f90_info_refs(info, number, str, s) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: info + integer, intent(inout) :: number ! number of the reference. Must be 0 in the first call + type(xc_f90_pointer_t), intent(inout) :: str ! this will hold a (char **) pointer + character(len=*), intent(out) :: s ! the string that is output + end subroutine xc_f90_info_refs + + subroutine xc_f90_functional_get_name(func_number, func_string) + integer, intent(in) :: func_number + character(len=256), intent(out) :: func_string + end subroutine xc_f90_functional_get_name + + integer function xc_f90_functional_get_number(func_string) + character(len=*), intent(in) :: func_string + end function xc_f90_functional_get_number + + integer function xc_f90_family_from_id(id) + use xc_f90_types_m + integer, intent(in) :: id + end function xc_f90_family_from_id + end interface + + + !---------------------------------------------------------------- + interface + subroutine xc_f90_func_init(p, info, functional, nspin) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(out) :: p + type(xc_f90_pointer_t), intent(out) :: info + integer, intent(in) :: functional + integer, intent(in) :: nspin + end subroutine xc_f90_func_init + + subroutine xc_f90_func_end(p) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(inout) :: p + end subroutine xc_f90_func_end + end interface + + + ! LDAs + !---------------------------------------------------------------- + interface + subroutine xc_f90_lda(p, np, rho, zk, vrho, fxc, kxc) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho ! rho(nspin) the density + real(xc_f90_kind), intent(out) :: zk ! the energy per unit particle + real(xc_f90_kind), intent(out) :: vrho ! v(nspin) the potential + real(xc_f90_kind), intent(out) :: fxc ! v(nspin,nspin) the xc kernel + real(xc_f90_kind), intent(out) :: kxc ! v(nspin,nspin,nspin) the derivative of xc kernel + end subroutine xc_f90_lda + + subroutine xc_f90_lda_exc(p, np, rho, zk) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho ! rho(nspin) the density + real(xc_f90_kind), intent(out) :: zk ! the energy per unit particle + end subroutine xc_f90_lda_exc + + subroutine xc_f90_lda_exc_vxc(p, np, rho, e, v) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho ! rho(nspin) the density + real(xc_f90_kind), intent(out) :: e ! the energy per unit particle + real(xc_f90_kind), intent(out) :: v ! v(nspin) the potential + end subroutine xc_f90_lda_exc_vxc + + subroutine xc_f90_lda_vxc(p, np, rho, v) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho ! rho(nspin) the density + real(xc_f90_kind), intent(out) :: v ! v(nspin) the potential + end subroutine xc_f90_lda_vxc + + subroutine xc_f90_lda_fxc(p, np, rho, fxc) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho ! rho(nspin) the density + real(xc_f90_kind), intent(out) :: fxc ! v(nspin,nspin) the xc kernel + end subroutine xc_f90_lda_fxc + + subroutine xc_f90_lda_kxc(p, np, rho, kxc) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho ! rho(nspin) the density + real(xc_f90_kind), intent(out) :: kxc + end subroutine xc_f90_lda_kxc + end interface + + + interface + subroutine xc_f90_lda_x_1d_set_par(p, interaction, bb) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(inout) :: p + integer, intent(in) :: interaction + real(xc_f90_kind), intent(in) :: bb + end subroutine xc_f90_lda_x_1d_set_par + + subroutine xc_f90_lda_c_xalpha_set_par(p, alpha) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(inout) :: p + real(xc_f90_kind), intent(in) :: alpha + end subroutine xc_f90_lda_c_xalpha_set_par + + subroutine xc_f90_lda_x_set_par(p, alpha, relativistic, omega) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(inout) :: p + real(xc_f90_kind), intent(in) :: alpha ! of Xalpha, set to 4/3 to obtain standard LDA + integer, intent(in) :: relativistic + real(xc_f90_kind), intent(in) :: omega + end subroutine xc_f90_lda_x_set_par + + subroutine xc_f90_lda_c_1d_csc_set_par(p, interaction, bb) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(inout) :: p + integer, intent(in) :: interaction + real(xc_f90_kind), intent(in) :: bb + end subroutine xc_f90_lda_c_1d_csc_set_par + + subroutine xc_f90_lda_c_2d_prm_set_par(p, N) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(inout) :: p + real(xc_f90_kind), intent(in) :: N + end subroutine xc_f90_lda_c_2d_prm_set_par + end interface + + ! GGAs + !---------------------------------------------------------------- + interface + subroutine xc_f90_gga(p, np, rho, sigma, zk, vrho, vsigma, & + v2rho2, v2rhosigma, v2sigma2, v3rho3, v3rho2sigma, v3rhosigma2, v3sigma3) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(out) :: zk + real(xc_f90_kind), intent(out) :: vrho + real(xc_f90_kind), intent(out) :: vsigma + real(xc_f90_kind), intent(out) :: v2rho2 + real(xc_f90_kind), intent(out) :: v2rhosigma + real(xc_f90_kind), intent(out) :: v2sigma2 + real(xc_f90_kind), intent(out) :: v3rho3 + real(xc_f90_kind), intent(out) :: v3rho2sigma + real(xc_f90_kind), intent(out) :: v3rhosigma2 + real(xc_f90_kind), intent(out) :: v3sigma3 + end subroutine xc_f90_gga + + subroutine xc_f90_gga_exc(p, np, rho, sigma, zk) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(out) :: zk + end subroutine xc_f90_gga_exc + + subroutine xc_f90_gga_exc_vxc(p, np, rho, sigma, zk, vrho, vsigma) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(out) :: zk + real(xc_f90_kind), intent(out) :: vrho + real(xc_f90_kind), intent(out) :: vsigma + end subroutine xc_f90_gga_exc_vxc + + subroutine xc_f90_gga_vxc(p, np, rho, sigma, vrho, vsigma) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(out) :: vrho + real(xc_f90_kind), intent(out) :: vsigma + end subroutine xc_f90_gga_vxc + + subroutine xc_f90_gga_fxc(p, np, rho, sigma, v2rho2, v2rhosigma, v2sigma2) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(out) :: v2rho2 + real(xc_f90_kind), intent(out) :: v2rhosigma + real(xc_f90_kind), intent(out) :: v2sigma2 + end subroutine xc_f90_gga_fxc + + subroutine xc_f90_gga_kxc(p, np, rho, sigma, v3rho3, v3rho2sigma, v3rhosigma2, v3sigma3) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(out) :: v3rho3 + real(xc_f90_kind), intent(out) :: v3rho2sigma + real(xc_f90_kind), intent(out) :: v3rhosigma2 + real(xc_f90_kind), intent(out) :: v3sigma3 + end subroutine xc_f90_gga_kxc + end interface + + !---------------------------------------------------------------- + interface + subroutine xc_f90_gga_lb_set_par(p, modified, threshold, ip, qtot) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: modified ! should we use the modified version + real(xc_f90_kind), intent(in) :: threshold ! if so, the threshold to use the asymtotic version + real(xc_f90_kind), intent(in) :: ip ! ionization potential + real(xc_f90_kind), intent(in) :: qtot ! total charge + end subroutine xc_f90_gga_lb_set_par + end interface + + + !---------------------------------------------------------------- + interface + subroutine xc_f90_gga_lb_modified(p, np, rho, grho, r, dedd) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho ! rho(nspin) the density + real(xc_f90_kind), intent(in) :: grho ! grho(3,nspin) the gradient of the density + real(xc_f90_kind), intent(in) :: r ! distance from center of finite system + real(xc_f90_kind), intent(out) :: dedd + end subroutine xc_f90_gga_lb_modified + end interface + + + !---------------------------------------------------------------- + interface + subroutine xc_f90_gga_x_wpbeh_set_par(p, omega) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + real(xc_f90_kind), intent(in) :: omega ! range separation + end subroutine xc_f90_gga_x_wpbeh_set_par + end interface + + !---------------------------------------------------------------- + interface + subroutine xc_f90_gga_x_hjs_set_par(p, omega) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + real(xc_f90_kind), intent(in) :: omega ! range separation + end subroutine xc_f90_gga_x_hjs_set_par + end interface + + !---------------------------------------------------------------- + interface + subroutine xc_f90_gga_ak13_get_asymptotic(homo, asymp) + use xc_f90_types_m + real(xc_f90_kind), intent(in) :: homo + real(xc_f90_kind), intent(out) :: asymp + end subroutine xc_f90_gga_ak13_get_asymptotic + end interface + + !---------------------------------------------------------------- + interface + subroutine xc_f90_hyb_exx_coef(p, coef) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + real(xc_f90_kind), intent(out) :: coef + end subroutine xc_f90_hyb_exx_coef + + subroutine xc_f90_hyb_cam_coef(p, omega, alpha, beta) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + real(xc_f90_kind), intent(out) :: omega, alpha, beta + end subroutine xc_f90_hyb_cam_coef + end interface + + + !---------------------------------------------------------------- + interface + subroutine xc_f90_hyb_gga_xc_hse_set_par(p, beta, omega) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + real(xc_f90_kind), intent(in) :: beta ! mixing + real(xc_f90_kind), intent(in) :: omega ! range separation + end subroutine xc_f90_hyb_gga_xc_hse_set_par + + subroutine xc_f90_hyb_gga_xc_pbeh_set_par(p, alpha) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + real(xc_f90_kind), intent(in) :: alpha ! mixing + end subroutine xc_f90_hyb_gga_xc_pbeh_set_par + end interface + + + ! the meta-GGAs + !---------------------------------------------------------------- + interface + subroutine xc_f90_mgga(p, np, rho, sigma, lapl, tau, zk, vrho, vsigma, vlapl, vtau, & + v2rho2, v2sigma2, v2lapl2, v2tau2, v2rhosigma, v2rholapl, v2rhotau, & + v2sigmalapl, v2sigmatau, v2lapltau) + + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(in) :: lapl + real(xc_f90_kind), intent(in) :: tau + real(xc_f90_kind), intent(out) :: zk + real(xc_f90_kind), intent(out) :: vrho + real(xc_f90_kind), intent(out) :: vsigma + real(xc_f90_kind), intent(out) :: vlapl + real(xc_f90_kind), intent(out) :: vtau + real(xc_f90_kind), intent(out) :: v2rho2 + real(xc_f90_kind), intent(out) :: v2sigma2 + real(xc_f90_kind), intent(out) :: v2lapl2 + real(xc_f90_kind), intent(out) :: v2tau2 + real(xc_f90_kind), intent(out) :: v2rhosigma + real(xc_f90_kind), intent(out) :: v2rholapl + real(xc_f90_kind), intent(out) :: v2rhotau + real(xc_f90_kind), intent(out) :: v2sigmalapl + real(xc_f90_kind), intent(out) :: v2sigmatau + real(xc_f90_kind), intent(out) :: v2lapltau + end subroutine xc_f90_mgga + + subroutine xc_f90_mgga_exc(p, np, rho, sigma, lapl, tau, zk) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(in) :: lapl + real(xc_f90_kind), intent(in) :: tau + real(xc_f90_kind), intent(out) :: zk + end subroutine xc_f90_mgga_exc + + subroutine xc_f90_mgga_exc_vxc(p, np, rho, sigma, lapl, tau, zk, vrho, vsigma, vlapl, vtau) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(in) :: lapl + real(xc_f90_kind), intent(in) :: tau + real(xc_f90_kind), intent(out) :: zk + real(xc_f90_kind), intent(out) :: vrho + real(xc_f90_kind), intent(out) :: vsigma + real(xc_f90_kind), intent(out) :: vlapl + real(xc_f90_kind), intent(out) :: vtau + end subroutine xc_f90_mgga_exc_vxc + + subroutine xc_f90_mgga_vxc(p, np, rho, sigma, lapl, tau, vrho, vsigma, vlapl, vtau) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(in) :: lapl + real(xc_f90_kind), intent(in) :: tau + real(xc_f90_kind), intent(out) :: vrho + real(xc_f90_kind), intent(out) :: vsigma + real(xc_f90_kind), intent(out) :: vlapl + real(xc_f90_kind), intent(out) :: vtau + end subroutine xc_f90_mgga_vxc + + subroutine xc_f90_mgga_fxc(p, np, rho, sigma, lapl, tau, & + v2rho2, v2sigma2, v2lapl2, v2tau2, v2rhosigma, v2rholapl, v2rhotau, & + v2sigmalapl, v2sigmatau, v2lapltau) + + use xc_f90_types_m + type(xc_f90_pointer_t), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(in) :: lapl + real(xc_f90_kind), intent(in) :: tau + real(xc_f90_kind), intent(out) :: v2rho2 + real(xc_f90_kind), intent(out) :: v2sigma2 + real(xc_f90_kind), intent(out) :: v2lapl2 + real(xc_f90_kind), intent(out) :: v2tau2 + real(xc_f90_kind), intent(out) :: v2rhosigma + real(xc_f90_kind), intent(out) :: v2rholapl + real(xc_f90_kind), intent(out) :: v2rhotau + real(xc_f90_kind), intent(out) :: v2sigmalapl + real(xc_f90_kind), intent(out) :: v2sigmatau + real(xc_f90_kind), intent(out) :: v2lapltau + end subroutine xc_f90_mgga_fxc + end interface + + interface + subroutine xc_f90_mgga_x_tb09_set_par(p, cc) + use xc_f90_types_m + type(xc_f90_pointer_t), intent(inout) :: p + real(xc_f90_kind), intent(in) :: cc + end subroutine xc_f90_mgga_x_tb09_set_par + end interface + + +end module xc_f90_lib_m + +!! Local Variables: +!! mode: f90 +!! coding: utf-8 +!! End: diff --git a/libxc/src/libxc_funcs.f90 b/libxc/src/libxc_funcs.f90 new file mode 100644 index 000000000..1ef3a7a89 --- /dev/null +++ b/libxc/src/libxc_funcs.f90 @@ -0,0 +1,325 @@ +module libxc_funcs_m + implicit none + + public + + integer, parameter :: XC_LDA_X = 1 ! Exchange + integer, parameter :: XC_LDA_C_WIGNER = 2 ! Wigner parametrization + integer, parameter :: XC_LDA_C_RPA = 3 ! Random Phase Approximation + integer, parameter :: XC_LDA_C_HL = 4 ! Hedin & Lundqvist + integer, parameter :: XC_LDA_C_GL = 5 ! Gunnarson & Lundqvist + integer, parameter :: XC_LDA_C_XALPHA = 6 ! Slater Xalpha + integer, parameter :: XC_LDA_C_VWN = 7 ! Vosko, Wilk, & Nussair (5) + integer, parameter :: XC_LDA_C_VWN_RPA = 8 ! Vosko, Wilk, & Nussair (RPA) + integer, parameter :: XC_LDA_C_PZ = 9 ! Perdew & Zunger + integer, parameter :: XC_LDA_C_PZ_MOD = 10 ! Perdew & Zunger (Modified) + integer, parameter :: XC_LDA_C_OB_PZ = 11 ! Ortiz & Ballone (PZ) + integer, parameter :: XC_LDA_C_PW = 12 ! Perdew & Wang + integer, parameter :: XC_LDA_C_PW_MOD = 13 ! Perdew & Wang (Modified) + integer, parameter :: XC_LDA_C_OB_PW = 14 ! Ortiz & Ballone (PW) + integer, parameter :: XC_LDA_C_2D_AMGB = 15 ! Attaccalite et al + integer, parameter :: XC_LDA_C_2D_PRM = 16 ! Pittalis, Rasanen & Marques correlation in 2D + integer, parameter :: XC_LDA_C_vBH = 17 ! von Barth & Hedin + integer, parameter :: XC_LDA_C_1D_CSC = 18 ! Casula, Sorella, and Senatore 1D correlation + integer, parameter :: XC_LDA_X_2D = 19 ! Exchange in 2D + integer, parameter :: XC_LDA_XC_TETER93 = 20 ! Teter 93 parametrization + integer, parameter :: XC_LDA_X_1D = 21 ! Exchange in 1D + integer, parameter :: XC_LDA_C_ML1 = 22 ! Modified LSD (version 1) of Proynov and Salahub + integer, parameter :: XC_LDA_C_ML2 = 23 ! Modified LSD (version 2) of Proynov and Salahub + integer, parameter :: XC_LDA_C_GOMBAS = 24 ! Gombas parametrization + integer, parameter :: XC_LDA_C_PW_RPA = 25 ! Perdew & Wang fit of the RPA + integer, parameter :: XC_LDA_C_1D_LOOS = 26 ! P-F Loos correlation LDA + integer, parameter :: XC_LDA_C_RC04 = 27 ! Ragot-Cortona + integer, parameter :: XC_LDA_C_VWN_1 = 28 ! Vosko, Wilk, & Nussair (1) + integer, parameter :: XC_LDA_C_VWN_2 = 29 ! Vosko, Wilk, & Nussair (2) + integer, parameter :: XC_LDA_C_VWN_3 = 30 ! Vosko, Wilk, & Nussair (3) + integer, parameter :: XC_LDA_C_VWN_4 = 31 ! Vosko, Wilk, & Nussair (4) + integer, parameter :: XC_LDA_K_TF = 50 ! Thomas-Fermi kinetic energy functional + integer, parameter :: XC_LDA_K_LP = 51 ! Lee and Parr Gaussian ansatz + integer, parameter :: XC_GGA_C_Q2D = 47 ! Chiodo et al + integer, parameter :: XC_GGA_X_Q2D = 48 ! Chiodo et al + integer, parameter :: XC_GGA_X_PBE_MOL = 49 ! Del Campo, Gazquez, Trickey and Vela (PBE-like) + integer, parameter :: XC_GGA_K_TFVW = 52 ! Thomas-Fermi plus von Weiszaecker correction + integer, parameter :: XC_GGA_K_REVAPBEINT = 53 ! interpolated version of REVAPBE + integer, parameter :: XC_GGA_K_APBEINT = 54 ! interpolated version of APBE + integer, parameter :: XC_GGA_K_REVAPBE = 55 ! revised APBE + integer, parameter :: XC_GGA_X_AK13 = 56 ! Armiento & Kuemmel 2013 + integer, parameter :: XC_GGA_K_MEYER = 57 ! Meyer, Wang, and Young + integer, parameter :: XC_GGA_X_LV_RPW86 = 58 ! Berland and Hyldgaard + integer, parameter :: XC_GGA_X_PBE_TCA = 59 ! PBE revised by Tognetti et al + integer, parameter :: XC_GGA_X_PBEINT = 60 ! PBE for hybrid interfaces + integer, parameter :: XC_GGA_C_ZPBEINT = 61 ! spin-dependent gradient correction to PBEint + integer, parameter :: XC_GGA_C_PBEINT = 62 ! PBE for hybrid interfaces + integer, parameter :: XC_GGA_C_ZPBESOL = 63 ! spin-dependent gradient correction to PBEsol + integer, parameter :: XC_GGA_XC_OPBE_D = 65 ! oPBE_D functional of Goerigk and Grimme + integer, parameter :: XC_GGA_XC_OPWLYP_D = 66 ! oPWLYP-D functional of Goerigk and Grimme + integer, parameter :: XC_GGA_XC_OBLYP_D = 67 ! oBLYP-D functional of Goerigk and Grimme + integer, parameter :: XC_GGA_X_VMT84_GE = 68 ! VMT{8,4} with constraint satisfaction with mu = mu_GE + integer, parameter :: XC_GGA_X_VMT84_PBE = 69 ! VMT{8,4} with constraint satisfaction with mu = mu_PBE + integer, parameter :: XC_GGA_X_VMT_GE = 70 ! Vela, Medel, and Trickey with mu = mu_GE + integer, parameter :: XC_GGA_X_VMT_PBE = 71 ! Vela, Medel, and Trickey with mu = mu_PBE + integer, parameter :: XC_GGA_C_N12_SX = 79 ! N12-SX functional from Minnesota + integer, parameter :: XC_GGA_C_N12 = 80 ! N12 functional from Minnesota + integer, parameter :: XC_GGA_X_N12 = 82 ! N12 functional from Minnesota + integer, parameter :: XC_GGA_C_VPBE = 83 ! variant PBE + integer, parameter :: XC_GGA_C_OP_XALPHA = 84 ! one-parameter progressive functional (XALPHA version) + integer, parameter :: XC_GGA_C_OP_G96 = 85 ! one-parameter progressive functional (G96 version) + integer, parameter :: XC_GGA_C_OP_PBE = 86 ! one-parameter progressive functional (PBE version) + integer, parameter :: XC_GGA_C_OP_B88 = 87 ! one-parameter progressive functional (B88 version) + integer, parameter :: XC_GGA_C_FT97 = 88 ! Filatov & Thiel correlation + integer, parameter :: XC_GGA_C_SPBE = 89 ! PBE correlation to be used with the SSB exchange + integer, parameter :: XC_GGA_X_SSB_SW = 90 ! Swarta, Sola and Bickelhaupt correction to PBE + integer, parameter :: XC_GGA_X_SSB = 91 ! Swarta, Sola and Bickelhaupt + integer, parameter :: XC_GGA_X_SSB_D = 92 ! Swarta, Sola and Bickelhaupt dispersion + integer, parameter :: XC_GGA_XC_HCTH_407P = 93 ! HCTH/407+ + integer, parameter :: XC_GGA_XC_HCTH_P76 = 94 ! HCTH p=7/6 + integer, parameter :: XC_GGA_XC_HCTH_P14 = 95 ! HCTH p=1/4 + integer, parameter :: XC_GGA_XC_B97_GGA1 = 96 ! Becke 97 GGA-1 + integer, parameter :: XC_GGA_XC_HCTH_A = 97 ! HCTH-A + integer, parameter :: XC_GGA_X_BPCCAC = 98 ! BPCCAC (GRAC for the energy) + integer, parameter :: XC_GGA_C_REVTCA = 99 ! Tognetti, Cortona, Adamo (revised) + integer, parameter :: XC_GGA_C_TCA = 100 ! Tognetti, Cortona, Adamo + integer, parameter :: XC_GGA_X_PBE = 101 ! Perdew, Burke & Ernzerhof exchange + integer, parameter :: XC_GGA_X_PBE_R = 102 ! Perdew, Burke & Ernzerhof exchange (revised) + integer, parameter :: XC_GGA_X_B86 = 103 ! Becke 86 Xalfa,beta,gamma + integer, parameter :: XC_GGA_X_HERMAN = 104 ! Herman et al original GGA + integer, parameter :: XC_GGA_X_B86_MGC = 105 ! Becke 86 Xalfa,beta,gamma (with mod. grad. correction) + integer, parameter :: XC_GGA_X_B88 = 106 ! Becke 88 + integer, parameter :: XC_GGA_X_G96 = 107 ! Gill 96 + integer, parameter :: XC_GGA_X_PW86 = 108 ! Perdew & Wang 86 + integer, parameter :: XC_GGA_X_PW91 = 109 ! Perdew & Wang 91 + integer, parameter :: XC_GGA_X_OPTX = 110 ! Handy & Cohen OPTX 01 + integer, parameter :: XC_GGA_X_DK87_R1 = 111 ! dePristo & Kress 87 (version R1) + integer, parameter :: XC_GGA_X_DK87_R2 = 112 ! dePristo & Kress 87 (version R2) + integer, parameter :: XC_GGA_X_LG93 = 113 ! Lacks & Gordon 93 + integer, parameter :: XC_GGA_X_FT97_A = 114 ! Filatov & Thiel 97 (version A) + integer, parameter :: XC_GGA_X_FT97_B = 115 ! Filatov & Thiel 97 (version B) + integer, parameter :: XC_GGA_X_PBE_SOL = 116 ! Perdew, Burke & Ernzerhof exchange (solids) + integer, parameter :: XC_GGA_X_RPBE = 117 ! Hammer, Hansen & Norskov (PBE-like) + integer, parameter :: XC_GGA_X_WC = 118 ! Wu & Cohen + integer, parameter :: XC_GGA_X_MPW91 = 119 ! Modified form of PW91 by Adamo & Barone + integer, parameter :: XC_GGA_X_AM05 = 120 ! Armiento & Mattsson 05 exchange + integer, parameter :: XC_GGA_X_PBEA = 121 ! Madsen (PBE-like) + integer, parameter :: XC_GGA_X_MPBE = 122 ! Adamo & Barone modification to PBE + integer, parameter :: XC_GGA_X_XPBE = 123 ! xPBE reparametrization by Xu & Goddard + integer, parameter :: XC_GGA_X_2D_B86_MGC = 124 ! Becke 86 MGC for 2D systems + integer, parameter :: XC_GGA_X_BAYESIAN = 125 ! Bayesian best fit for the enhancement factor + integer, parameter :: XC_GGA_X_PBE_JSJR = 126 ! JSJR reparametrization by Pedroza, Silva & Capelle + integer, parameter :: XC_GGA_X_2D_B88 = 127 ! Becke 88 in 2D + integer, parameter :: XC_GGA_X_2D_B86 = 128 ! Becke 86 Xalfa,beta,gamma + integer, parameter :: XC_GGA_X_2D_PBE = 129 ! Perdew, Burke & Ernzerhof exchange in 2D + integer, parameter :: XC_GGA_C_PBE = 130 ! Perdew, Burke & Ernzerhof correlation + integer, parameter :: XC_GGA_C_LYP = 131 ! Lee, Yang & Parr + integer, parameter :: XC_GGA_C_P86 = 132 ! Perdew 86 + integer, parameter :: XC_GGA_C_PBE_SOL = 133 ! Perdew, Burke & Ernzerhof correlation SOL + integer, parameter :: XC_GGA_C_PW91 = 134 ! Perdew & Wang 91 + integer, parameter :: XC_GGA_C_AM05 = 135 ! Armiento & Mattsson 05 correlation + integer, parameter :: XC_GGA_C_XPBE = 136 ! xPBE reparametrization by Xu & Goddard + integer, parameter :: XC_GGA_C_LM = 137 ! Langreth and Mehl correlation + integer, parameter :: XC_GGA_C_PBE_JRGX = 138 ! JRGX reparametrization by Pedroza, Silva & Capelle + integer, parameter :: XC_GGA_X_OPTB88_VDW = 139 ! Becke 88 reoptimized to be used with vdW functional of Dion et al + integer, parameter :: XC_GGA_X_PBEK1_VDW = 140 ! PBE reparametrization for vdW + integer, parameter :: XC_GGA_X_OPTPBE_VDW = 141 ! PBE reparametrization for vdW + integer, parameter :: XC_GGA_X_RGE2 = 142 ! Regularized PBE + integer, parameter :: XC_GGA_C_RGE2 = 143 ! Regularized PBE + integer, parameter :: XC_GGA_X_RPW86 = 144 ! refitted Perdew & Wang 86 + integer, parameter :: XC_GGA_X_KT1 = 145 ! Keal and Tozer version 1 + integer, parameter :: XC_GGA_XC_KT2 = 146 ! Keal and Tozer version 2 + integer, parameter :: XC_GGA_C_WL = 147 ! Wilson & Levy + integer, parameter :: XC_GGA_C_WI = 148 ! Wilson & Ivanov + integer, parameter :: XC_GGA_X_MB88 = 149 ! Modified Becke 88 for proton transfer + integer, parameter :: XC_GGA_X_SOGGA = 150 ! Second-order generalized gradient approximation + integer, parameter :: XC_GGA_X_SOGGA11 = 151 ! Second-order generalized gradient approximation 2011 + integer, parameter :: XC_GGA_C_SOGGA11 = 152 ! Second-order generalized gradient approximation 2011 + integer, parameter :: XC_GGA_C_WI0 = 153 ! Wilson & Ivanov initial version + integer, parameter :: XC_GGA_XC_TH1 = 154 ! Tozer and Handy v. 1 + integer, parameter :: XC_GGA_XC_TH2 = 155 ! Tozer and Handy v. 2 + integer, parameter :: XC_GGA_XC_TH3 = 156 ! Tozer and Handy v. 3 + integer, parameter :: XC_GGA_XC_TH4 = 157 ! Tozer and Handy v. 4 + integer, parameter :: XC_GGA_X_C09X = 158 ! C09x to be used with the VdW of Rutgers-Chalmers + integer, parameter :: XC_GGA_C_SOGGA11_X = 159 ! To be used with hyb_gga_x_SOGGA11-X + integer, parameter :: XC_GGA_X_LB = 160 ! van Leeuwen & Baerends + integer, parameter :: XC_GGA_XC_HCTH_93 = 161 ! HCTH functional fitted to 93 molecules + integer, parameter :: XC_GGA_XC_HCTH_120 = 162 ! HCTH functional fitted to 120 molecules + integer, parameter :: XC_GGA_XC_HCTH_147 = 163 ! HCTH functional fitted to 147 molecules + integer, parameter :: XC_GGA_XC_HCTH_407 = 164 ! HCTH functional fitted to 407 molecules + integer, parameter :: XC_GGA_XC_EDF1 = 165 ! Empirical functionals from Adamson, Gill, and Pople + integer, parameter :: XC_GGA_XC_XLYP = 166 ! XLYP functional + integer, parameter :: XC_GGA_XC_B97 = 167 ! Becke 97 + integer, parameter :: XC_GGA_XC_B97_1 = 168 ! Becke 97-1 + integer, parameter :: XC_GGA_XC_B97_2 = 169 ! Becke 97-2 + integer, parameter :: XC_GGA_XC_B97_D = 170 ! Grimme functional to be used with C6 vdW term + integer, parameter :: XC_GGA_XC_B97_K = 171 ! Boese-Martin for Kinetics + integer, parameter :: XC_GGA_XC_B97_3 = 172 ! Becke 97-3 + integer, parameter :: XC_GGA_XC_PBE1W = 173 ! Functionals fitted for water + integer, parameter :: XC_GGA_XC_MPWLYP1W = 174 ! Functionals fitted for water + integer, parameter :: XC_GGA_XC_PBELYP1W = 175 ! Functionals fitted for water + integer, parameter :: XC_GGA_XC_SB98_1a = 176 ! Schmider-Becke 98 parameterization 1a + integer, parameter :: XC_GGA_XC_SB98_1b = 177 ! Schmider-Becke 98 parameterization 1b + integer, parameter :: XC_GGA_XC_SB98_1c = 178 ! Schmider-Becke 98 parameterization 1c + integer, parameter :: XC_GGA_XC_SB98_2a = 179 ! Schmider-Becke 98 parameterization 2a + integer, parameter :: XC_GGA_XC_SB98_2b = 180 ! Schmider-Becke 98 parameterization 2b + integer, parameter :: XC_GGA_XC_SB98_2c = 181 ! Schmider-Becke 98 parameterization 2c + integer, parameter :: XC_GGA_X_LBM = 182 ! van Leeuwen & Baerends modified + integer, parameter :: XC_GGA_X_OL2 = 183 ! Exchange form based on Ou-Yang and Levy v.2 + integer, parameter :: XC_GGA_X_APBE = 184 ! mu fixed from the semiclassical neutral atom + integer, parameter :: XC_GGA_K_APBE = 185 ! mu fixed from the semiclassical neutral atom + integer, parameter :: XC_GGA_C_APBE = 186 ! mu fixed from the semiclassical neutral atom + integer, parameter :: XC_GGA_K_TW1 = 187 ! Tran and Wesolowski set 1 (Table II) + integer, parameter :: XC_GGA_K_TW2 = 188 ! Tran and Wesolowski set 2 (Table II) + integer, parameter :: XC_GGA_K_TW3 = 189 ! Tran and Wesolowski set 3 (Table II) + integer, parameter :: XC_GGA_K_TW4 = 190 ! Tran and Wesolowski set 4 (Table II) + integer, parameter :: XC_GGA_X_HTBS = 191 ! Haas, Tran, Blaha, and Schwarz + integer, parameter :: XC_GGA_X_AIRY = 192 ! Constantin et al based on the Airy gas + integer, parameter :: XC_GGA_X_LAG = 193 ! Local Airy Gas + integer, parameter :: XC_GGA_XC_MOHLYP = 194 ! Functional for organometallic chemistry + integer, parameter :: XC_GGA_XC_MOHLYP2 = 195 ! Functional for barrier heights + integer, parameter :: XC_GGA_XC_TH_FL = 196 ! Tozer and Handy v. FL + integer, parameter :: XC_GGA_XC_TH_FC = 197 ! Tozer and Handy v. FC + integer, parameter :: XC_GGA_XC_TH_FCFO = 198 ! Tozer and Handy v. FCFO + integer, parameter :: XC_GGA_XC_TH_FCO = 199 ! Tozer and Handy v. FCO + integer, parameter :: XC_GGA_C_OPTC = 200 ! Optimized correlation functional of Cohen and Handy + integer, parameter :: XC_GGA_K_VW = 500 ! von Weiszaecker functional + integer, parameter :: XC_GGA_K_GE2 = 501 ! Second-order gradient expansion (l = 1/9) + integer, parameter :: XC_GGA_K_GOLDEN = 502 ! TF-lambda-vW form by Golden (l = 13/45) + integer, parameter :: XC_GGA_K_YT65 = 503 ! TF-lambda-vW form by Yonei and Tomishima (l = 1/5) + integer, parameter :: XC_GGA_K_BALTIN = 504 ! TF-lambda-vW form by Baltin (l = 5/9) + integer, parameter :: XC_GGA_K_LIEB = 505 ! TF-lambda-vW form by Lieb (l = 0.185909191) + integer, parameter :: XC_GGA_K_ABSP1 = 506 ! gamma-TFvW form by Acharya et al [g = 1 - 1.412/N^(1/3)] + integer, parameter :: XC_GGA_K_ABSP2 = 507 ! gamma-TFvW form by Acharya et al [g = 1 - 1.332/N^(1/3)] + integer, parameter :: XC_GGA_K_GR = 508 ! gamma-TFvW form by Gázquez and Robles + integer, parameter :: XC_GGA_K_LUDENA = 509 ! gamma-TFvW form by Ludeña + integer, parameter :: XC_GGA_K_GP85 = 510 ! gamma-TFvW form by Ghosh and Parr + integer, parameter :: XC_GGA_K_PEARSON = 511 ! Pearson + integer, parameter :: XC_GGA_K_OL1 = 512 ! Ou-Yang and Levy v.1 + integer, parameter :: XC_GGA_K_OL2 = 513 ! Ou-Yang and Levy v.2 + integer, parameter :: XC_GGA_K_FR_B88 = 514 ! Fuentealba & Reyes (B88 version) + integer, parameter :: XC_GGA_K_FR_PW86 = 515 ! Fuentealba & Reyes (PW86 version) + integer, parameter :: XC_GGA_K_DK = 516 ! DePristo and Kress + integer, parameter :: XC_GGA_K_PERDEW = 517 ! Perdew + integer, parameter :: XC_GGA_K_VSK = 518 ! Vitos, Skriver, and Kollar + integer, parameter :: XC_GGA_K_VJKS = 519 ! Vitos, Johansson, Kollar, and Skriver + integer, parameter :: XC_GGA_K_ERNZERHOF = 520 ! Ernzerhof + integer, parameter :: XC_GGA_K_LC94 = 521 ! Lembarki & Chermette + integer, parameter :: XC_GGA_K_LLP = 522 ! Lee, Lee & Parr + integer, parameter :: XC_GGA_K_THAKKAR = 523 ! Thakkar 1992 + integer, parameter :: XC_GGA_X_WPBEH = 524 ! short-range version of the PBE + integer, parameter :: XC_GGA_X_HJS_PBE = 525 ! HJS screened exchange PBE version + integer, parameter :: XC_GGA_X_HJS_PBE_SOL = 526 ! HJS screened exchange PBE_SOL version + integer, parameter :: XC_GGA_X_HJS_B88 = 527 ! HJS screened exchange B88 version + integer, parameter :: XC_GGA_X_HJS_B97X = 528 ! HJS screened exchange B97x version + integer, parameter :: XC_GGA_X_ITYH = 529 ! short-range recipe for exchange GGA functionals + integer, parameter :: XC_GGA_X_SFAT = 530 ! short-range recipe for exchange GGA functionals + integer, parameter :: XC_HYB_GGA_X_N12_SX = 81 ! N12-SX functional from Minnesota + integer, parameter :: XC_HYB_GGA_XC_B3PW91 = 401 ! The original (ACM) hybrid of Becke + integer, parameter :: XC_HYB_GGA_XC_B3LYP = 402 ! The (in)famous B3LYP + integer, parameter :: XC_HYB_GGA_XC_B3P86 = 403 ! Perdew 86 hybrid similar to B3PW91 + integer, parameter :: XC_HYB_GGA_XC_O3LYP = 404 ! hybrid using the optx functional + integer, parameter :: XC_HYB_GGA_XC_mPW1K = 405 ! mixture of mPW91 and PW91 optimized for kinetics + integer, parameter :: XC_HYB_GGA_XC_PBEH = 406 ! aka PBE0 or PBE1PBE + integer, parameter :: XC_HYB_GGA_XC_B97 = 407 ! Becke 97 + integer, parameter :: XC_HYB_GGA_XC_B97_1 = 408 ! Becke 97-1 + integer, parameter :: XC_HYB_GGA_XC_B97_2 = 410 ! Becke 97-2 + integer, parameter :: XC_HYB_GGA_XC_X3LYP = 411 ! maybe the best hybrid + integer, parameter :: XC_HYB_GGA_XC_B1WC = 412 ! Becke 1-parameter mixture of WC and PBE + integer, parameter :: XC_HYB_GGA_XC_B97_K = 413 ! Boese-Martin for Kinetics + integer, parameter :: XC_HYB_GGA_XC_B97_3 = 414 ! Becke 97-3 + integer, parameter :: XC_HYB_GGA_XC_MPW3PW = 415 ! mixture with the mPW functional + integer, parameter :: XC_HYB_GGA_XC_B1LYP = 416 ! Becke 1-parameter mixture of B88 and LYP + integer, parameter :: XC_HYB_GGA_XC_B1PW91 = 417 ! Becke 1-parameter mixture of B88 and PW91 + integer, parameter :: XC_HYB_GGA_XC_mPW1PW = 418 ! Becke 1-parameter mixture of mPW91 and PW91 + integer, parameter :: XC_HYB_GGA_XC_MPW3LYP = 419 ! mixture of mPW and LYP + integer, parameter :: XC_HYB_GGA_XC_SB98_1a = 420 ! Schmider-Becke 98 parameterization 1a + integer, parameter :: XC_HYB_GGA_XC_SB98_1b = 421 ! Schmider-Becke 98 parameterization 1b + integer, parameter :: XC_HYB_GGA_XC_SB98_1c = 422 ! Schmider-Becke 98 parameterization 1c + integer, parameter :: XC_HYB_GGA_XC_SB98_2a = 423 ! Schmider-Becke 98 parameterization 2a + integer, parameter :: XC_HYB_GGA_XC_SB98_2b = 424 ! Schmider-Becke 98 parameterization 2b + integer, parameter :: XC_HYB_GGA_XC_SB98_2c = 425 ! Schmider-Becke 98 parameterization 2c + integer, parameter :: XC_HYB_GGA_X_SOGGA11_X = 426 ! Hybrid based on SOGGA11 form + integer, parameter :: XC_HYB_GGA_XC_HSE03 = 427 ! the 2003 version of the screened hybrid HSE + integer, parameter :: XC_HYB_GGA_XC_HSE06 = 428 ! the 2006 version of the screened hybrid HSE + integer, parameter :: XC_HYB_GGA_XC_HJS_PBE = 429 ! HJS hybrid screened exchange PBE version + integer, parameter :: XC_HYB_GGA_XC_HJS_PBE_SOL = 430 ! HJS hybrid screened exchange PBE_SOL version + integer, parameter :: XC_HYB_GGA_XC_HJS_B88 = 431 ! HJS hybrid screened exchange B88 version + integer, parameter :: XC_HYB_GGA_XC_HJS_B97X = 432 ! HJS hybrid screened exchange B97x version + integer, parameter :: XC_HYB_GGA_XC_CAM_B3LYP = 433 ! CAM version of B3LYP + integer, parameter :: XC_HYB_GGA_XC_TUNED_CAM_B3LYP = 434 ! CAM version of B3LYP tunes for excitations + integer, parameter :: XC_HYB_GGA_XC_BHANDH = 435 ! Becke half-and-half + integer, parameter :: XC_HYB_GGA_XC_BHANDHLYP = 436 ! Becke half-and-half with B88 exchange + integer, parameter :: XC_HYB_GGA_XC_MB3LYP_RC04 = 437 ! B3LYP with RC04 LDA + integer, parameter :: XC_HYB_GGA_XC_MPWLYP1M = 453 ! MPW with 1 par. for metals/LYP + integer, parameter :: XC_HYB_GGA_XC_REVB3LYP = 454 ! Revised B3LYP + integer, parameter :: XC_HYB_GGA_XC_CAMY_BLYP = 455 ! BLYP with yukawa screening + integer, parameter :: XC_HYB_GGA_XC_PBE0_13 = 456 ! PBE0-1/3 + integer, parameter :: XC_MGGA_XC_OTPSS_D = 64 ! oTPSS_D functional of Goerigk and Grimme + integer, parameter :: XC_MGGA_C_CS = 72 ! Colle and Salvetti + integer, parameter :: XC_MGGA_C_MN12_SX = 73 ! MN12-SX functional of Minnesota + integer, parameter :: XC_MGGA_C_MN12_L = 74 ! MN12-L functional of Minnesota + integer, parameter :: XC_MGGA_C_M11_L = 75 ! M11-L functional of Minnesota + integer, parameter :: XC_MGGA_C_M11 = 76 ! M11 functional of Minnesota + integer, parameter :: XC_MGGA_C_M08_SO = 77 ! M08-SO functional of Minnesota + integer, parameter :: XC_MGGA_C_M08_HX = 78 ! M08-HX functional of Minnesota + integer, parameter :: XC_MGGA_X_LTA = 201 ! Local tau approximation of Ernzerhof & Scuseria + integer, parameter :: XC_MGGA_X_TPSS = 202 ! Perdew, Tao, Staroverov & Scuseria exchange + integer, parameter :: XC_MGGA_X_M06_L = 203 ! M06-Local functional of Minnesota + integer, parameter :: XC_MGGA_X_GVT4 = 204 ! GVT4 from Van Voorhis and Scuseria + integer, parameter :: XC_MGGA_X_TAU_HCTH = 205 ! tau-HCTH from Boese and Handy + integer, parameter :: XC_MGGA_X_BR89 = 206 ! Becke-Roussel 89 + integer, parameter :: XC_MGGA_X_BJ06 = 207 ! Becke & Johnson correction to Becke-Roussel 89 + integer, parameter :: XC_MGGA_X_TB09 = 208 ! Tran & Blaha correction to Becke & Johnson + integer, parameter :: XC_MGGA_X_RPP09 = 209 ! Rasanen, Pittalis, and Proetto correction to Becke & Johnson + integer, parameter :: XC_MGGA_X_2D_PRHG07 = 210 ! Pittalis, Rasanen, Helbig, Gross Exchange Functional + integer, parameter :: XC_MGGA_X_2D_PRHG07_PRP10 = 211 ! PRGH07 with PRP10 correction + integer, parameter :: XC_MGGA_X_REVTPSS = 212 ! revised Perdew, Tao, Staroverov & Scuseria exchange + integer, parameter :: XC_MGGA_X_PKZB = 213 ! Perdew, Kurth, Zupan, and Blaha + integer, parameter :: XC_MGGA_X_M05 = 214 ! M05 functional of Minnesota + integer, parameter :: XC_MGGA_X_M05_2X = 215 ! M05-2X functional of Minnesota + integer, parameter :: XC_MGGA_X_M06_HF = 216 ! M06-HF functional of Minnesota + integer, parameter :: XC_MGGA_X_M06 = 217 ! M06 functional of Minnesota + integer, parameter :: XC_MGGA_X_M06_2X = 218 ! M06-2X functional of Minnesota + integer, parameter :: XC_MGGA_X_M08_HX = 219 ! M08-HX functional of Minnesota + integer, parameter :: XC_MGGA_X_M08_SO = 220 ! M08-SO functional of Minnesota + integer, parameter :: XC_MGGA_X_MS0 = 221 ! MS exchange of Sun, Xiao, and Ruzsinszky + integer, parameter :: XC_MGGA_X_MS1 = 222 ! MS1 exchange of Sun, et al + integer, parameter :: XC_MGGA_X_MS2 = 223 ! MS2 exchange of Sun, et al + integer, parameter :: XC_MGGA_X_MS2H = 224 ! MS2 hybrid exchange of Sun, et al + integer, parameter :: XC_MGGA_X_M11_L = 226 ! M11-L functional of Minnesota + integer, parameter :: XC_MGGA_X_MN12_L = 227 ! MN12-L functional from Minnesota + integer, parameter :: XC_MGGA_X_MN12_SX = 228 ! MN12-SX functional from Minnesota + integer, parameter :: XC_MGGA_C_CC06 = 229 ! Cancio and Chou 2006 + integer, parameter :: XC_MGGA_X_MK00 = 230 ! Exchange for accurate virtual orbital energies + integer, parameter :: XC_MGGA_C_TPSS = 231 ! Perdew, Tao, Staroverov & Scuseria correlation + integer, parameter :: XC_MGGA_C_VSXC = 232 ! VSxc from Van Voorhis and Scuseria (correlation part) + integer, parameter :: XC_MGGA_C_M06_L = 233 ! M06-Local functional of Minnesota + integer, parameter :: XC_MGGA_C_M06_HF = 234 ! M06-HF functional of Minnesota + integer, parameter :: XC_MGGA_C_M06 = 235 ! M06 functional of Minnesota + integer, parameter :: XC_MGGA_C_M06_2X = 236 ! M06-2X functional of Minnesota + integer, parameter :: XC_MGGA_C_M05 = 237 ! M05 functional of Minnesota + integer, parameter :: XC_MGGA_C_M05_2X = 238 ! M05-2X functional of Minnesota + integer, parameter :: XC_MGGA_C_PKZB = 239 ! Perdew, Kurth, Zupan, and Blaha + integer, parameter :: XC_MGGA_C_BC95 = 240 ! Becke correlation 95 + integer, parameter :: XC_MGGA_C_REVTPSS = 241 ! revised TPSS correlation + integer, parameter :: XC_MGGA_XC_TPSSLYP1W = 242 ! Functionals fitted for water + integer, parameter :: XC_MGGA_X_MK00B = 243 ! Exchange for accurate virtual orbital energies (v. B) + integer, parameter :: XC_MGGA_X_BLOC = 244 ! functional with balanced localization + integer, parameter :: XC_MGGA_X_MODTPSS = 245 ! Modified Perdew, Tao, Staroverov & Scuseria exchange + integer, parameter :: XC_HYB_MGGA_X_M11 = 225 ! M11 functional of Minnesota + integer, parameter :: XC_HYB_MGGA_XC_M05 = 438 ! M05 functional of Minnesota + integer, parameter :: XC_HYB_MGGA_XC_M05_2X = 439 ! M05-2X functional of Minnesota + integer, parameter :: XC_HYB_MGGA_XC_B88B95 = 440 ! Mixture of B88 with BC95 (B1B95) + integer, parameter :: XC_HYB_MGGA_XC_B86B95 = 441 ! Mixture of B86 with BC95 + integer, parameter :: XC_HYB_MGGA_XC_PW86B95 = 442 ! Mixture of PW86 with BC95 + integer, parameter :: XC_HYB_MGGA_XC_BB1K = 443 ! Mixture of B88 with BC95 from Zhao and Truhlar + integer, parameter :: XC_HYB_MGGA_XC_M06_HF = 444 ! M06-HF functional of Minnesota + integer, parameter :: XC_HYB_MGGA_XC_MPW1B95 = 445 ! Mixture of mPW91 with BC95 from Zhao and Truhlar + integer, parameter :: XC_HYB_MGGA_XC_MPWB1K = 446 ! Mixture of mPW91 with BC95 for kinetics + integer, parameter :: XC_HYB_MGGA_XC_X1B95 = 447 ! Mixture of X with BC95 + integer, parameter :: XC_HYB_MGGA_XC_XB1K = 448 ! Mixture of X with BC95 for kinetics + integer, parameter :: XC_HYB_MGGA_XC_M06 = 449 ! M06 functional of Minnesota + integer, parameter :: XC_HYB_MGGA_XC_M06_2X = 450 ! M06-2X functional of Minnesota + integer, parameter :: XC_HYB_MGGA_XC_PW6B95 = 451 ! Mixture of PW91 with BC95 from Zhao and Truhlar + integer, parameter :: XC_HYB_MGGA_XC_PWB6K = 452 ! Mixture of PW91 with BC95 from Zhao and Truhlar for kinetics + integer, parameter :: XC_HYB_MGGA_XC_TPSSH = 457 ! TPSS hybrid + integer, parameter :: XC_HYB_MGGA_XC_REVTPSSH = 458 ! revTPSS hybrid + +end module libxc_funcs_m diff --git a/libxc/src/libxc_master.F90 b/libxc/src/libxc_master.F90 new file mode 100644 index 000000000..3c36db0f8 --- /dev/null +++ b/libxc/src/libxc_master.F90 @@ -0,0 +1,538 @@ +!! Copyright (C) 2003-2006 M. Marques, A. Castro, A. Rubio, G. Bertsch +!! +!! This program is free software; you can redistribute it and/or modify +!! it under the terms of the GNU Lesser General Public License as published by +!! the Free Software Foundation; either version 2, or (at your option) +!! any later version. +!! +!! This program is distributed in the hope that it will be useful, +!! but WITHOUT ANY WARRANTY; without even the implied warranty of +!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +!! GNU Lesser General Public License for more details. +!! +!! You should have received a copy of the GNU Lesser General Public License +!! along with this program; if not, write to the Free Software +!! Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +!! 02110-1301, USA. +!! +!! $Id: libxc.f90 3550 2007-11-19 14:32:49Z marques $ + +#ifdef SINGLE_PRECISION +# define XC_F90(x) xc_s_f90_ ## x +#else +# define XC_F90(x) xc_f90_ ## x +#endif + + +!------------------------------------------------------------------- +module XC_F90(types_m) +#ifdef SINGLE_PRECISION + integer, public, parameter :: xc_f90_kind = selected_real_kind(4) +#else + integer, public, parameter :: xc_f90_kind = selected_real_kind(14) +#endif + + type XC_F90(pointer_t) + private + integer, pointer :: buffer + end type XC_F90(pointer_t) + +end module XC_F90(types_m) + + +!------------------------------------------------------------------- +module XC_F90(lib_m) + + use XC_F90(types_m) + use libxc_funcs_m + + implicit none + + public + + ! Families of xc functionals + integer, parameter :: & + XC_FAMILY_UNKNOWN = -1, & + XC_FAMILY_NONE = 0, & + XC_FAMILY_LDA = 1, & + XC_FAMILY_GGA = 2, & + XC_FAMILY_MGGA = 4, & + XC_FAMILY_LCA = 8, & + XC_FAMILY_OEP = 16, & + XC_FAMILY_HYB_GGA = 32, & + XC_FAMILY_HYB_MGGA = 64 + + integer, parameter :: & + XC_UNPOLARIZED = 1, & ! Spin unpolarized + XC_POLARIZED = 2 ! Spin polarized + + integer, parameter :: & + XC_NON_RELATIVISTIC = 0, & ! Functional includes or not relativistic + XC_RELATIVISTIC = 1 ! corrections. Only available in some functionals. + + ! Kinds + integer, parameter :: & + XC_EXCHANGE = 0, & + XC_CORRELATION = 1, & + XC_EXCHANGE_CORRELATION = 2, & + XC_KINETIC = 3 + + integer, parameter :: & + XC_FLAGS_HAVE_EXC = 1, & + XC_FLAGS_HAVE_VXC = 2, & + XC_FLAGS_HAVE_FXC = 4, & + XC_FLAGS_HAVE_KXC = 8, & + XC_FLAGS_HAVE_LXC = 16, & + XC_FLAGS_1D = 32, & + XC_FLAGS_2D = 64, & + XC_FLAGS_3D = 128, & + XC_FLAGS_STABLE = 512, & + XC_FLAGS_DEVELOPMENT = 1024 + + ! These are old names keep for compatibility, and that should disappear soon + integer, parameter :: XC_GGA_XC_LB = 160 + integer, parameter :: XC_GGA_K_ABSR1 = 506 + integer, parameter :: XC_GGA_K_ABSR2 = 507 + + !---------------------------------------------------------------- + interface + subroutine XC_F90(version)(major, minor) + integer, intent(out) :: major, minor + end subroutine XC_F90(version) + end interface + + !---------------------------------------------------------------- + interface + integer function XC_F90(info_number)(info) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: info + end function XC_F90(info_number) + + integer function XC_F90(info_kind)(info) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: info + end function XC_F90(info_kind) + + subroutine XC_F90(info_name)(info, s) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: info + character(len=*), intent(out) :: s + end subroutine XC_F90(info_name) + + integer function XC_F90(info_family)(info) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: info + end function XC_F90(info_family) + + integer function XC_F90(info_flags)(info) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: info + end function XC_F90(info_flags) + + subroutine XC_F90(info_refs)(info, number, str, s) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: info + integer, intent(inout) :: number ! number of the reference. Must be 0 in the first call + type(XC_F90(pointer_t)), intent(inout) :: str ! this will hold a (char **) pointer + character(len=*), intent(out) :: s ! the string that is output + end subroutine XC_F90(info_refs) + + subroutine XC_F90(functional_get_name)(func_number, func_string) + integer, intent(in) :: func_number + character(len=256), intent(out) :: func_string + end subroutine XC_F90(functional_get_name) + + integer function XC_F90(functional_get_number)(func_string) + character(len=*), intent(in) :: func_string + end function XC_F90(functional_get_number) + + integer function XC_F90(family_from_id)(id) + use XC_F90(types_m) + integer, intent(in) :: id + end function XC_F90(family_from_id) + end interface + + + !---------------------------------------------------------------- + interface + subroutine XC_F90(func_init)(p, info, functional, nspin) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(out) :: p + type(XC_F90(pointer_t)), intent(out) :: info + integer, intent(in) :: functional + integer, intent(in) :: nspin + end subroutine XC_F90(func_init) + + subroutine XC_F90(func_end)(p) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(inout) :: p + end subroutine XC_F90(func_end) + end interface + + + ! LDAs + !---------------------------------------------------------------- + interface + subroutine XC_F90(lda)(p, np, rho, zk, vrho, fxc, kxc) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho ! rho(nspin) the density + real(xc_f90_kind), intent(out) :: zk ! the energy per unit particle + real(xc_f90_kind), intent(out) :: vrho ! v(nspin) the potential + real(xc_f90_kind), intent(out) :: fxc ! v(nspin,nspin) the xc kernel + real(xc_f90_kind), intent(out) :: kxc ! v(nspin,nspin,nspin) the derivative of xc kernel + end subroutine XC_F90(lda) + + subroutine XC_F90(lda_exc)(p, np, rho, zk) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho ! rho(nspin) the density + real(xc_f90_kind), intent(out) :: zk ! the energy per unit particle + end subroutine XC_F90(lda_exc) + + subroutine XC_F90(lda_exc_vxc)(p, np, rho, e, v) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho ! rho(nspin) the density + real(xc_f90_kind), intent(out) :: e ! the energy per unit particle + real(xc_f90_kind), intent(out) :: v ! v(nspin) the potential + end subroutine XC_F90(lda_exc_vxc) + + subroutine XC_F90(lda_vxc)(p, np, rho, v) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho ! rho(nspin) the density + real(xc_f90_kind), intent(out) :: v ! v(nspin) the potential + end subroutine XC_F90(lda_vxc) + + subroutine XC_F90(lda_fxc)(p, np, rho, fxc) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho ! rho(nspin) the density + real(xc_f90_kind), intent(out) :: fxc ! v(nspin,nspin) the xc kernel + end subroutine XC_F90(lda_fxc) + + subroutine XC_F90(lda_kxc)(p, np, rho, kxc) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho ! rho(nspin) the density + real(xc_f90_kind), intent(out) :: kxc + end subroutine XC_F90(lda_kxc) + end interface + + + interface + subroutine XC_F90(lda_x_1d_set_par)(p, interaction, bb) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(inout) :: p + integer, intent(in) :: interaction + real(xc_f90_kind), intent(in) :: bb + end subroutine XC_F90(lda_x_1d_set_par) + + subroutine XC_F90(lda_c_xalpha_set_par)(p, alpha) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(inout) :: p + real(xc_f90_kind), intent(in) :: alpha + end subroutine XC_F90(lda_c_xalpha_set_par) + + subroutine XC_F90(lda_x_set_par)(p, alpha, relativistic, omega) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(inout) :: p + real(xc_f90_kind), intent(in) :: alpha ! of Xalpha, set to 4/3 to obtain standard LDA + integer, intent(in) :: relativistic + real(xc_f90_kind), intent(in) :: omega + end subroutine XC_F90(lda_x_set_par) + + subroutine XC_F90(lda_c_1d_csc_set_par)(p, interaction, bb) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(inout) :: p + integer, intent(in) :: interaction + real(xc_f90_kind), intent(in) :: bb + end subroutine XC_F90(lda_c_1d_csc_set_par) + + subroutine XC_F90(lda_c_2d_prm_set_par)(p, N) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(inout) :: p + real(xc_f90_kind), intent(in) :: N + end subroutine XC_F90(lda_c_2d_prm_set_par) + end interface + + ! GGAs + !---------------------------------------------------------------- + interface + subroutine XC_F90(gga)(p, np, rho, sigma, zk, vrho, vsigma, & + v2rho2, v2rhosigma, v2sigma2, v3rho3, v3rho2sigma, v3rhosigma2, v3sigma3) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(out) :: zk + real(xc_f90_kind), intent(out) :: vrho + real(xc_f90_kind), intent(out) :: vsigma + real(xc_f90_kind), intent(out) :: v2rho2 + real(xc_f90_kind), intent(out) :: v2rhosigma + real(xc_f90_kind), intent(out) :: v2sigma2 + real(xc_f90_kind), intent(out) :: v3rho3 + real(xc_f90_kind), intent(out) :: v3rho2sigma + real(xc_f90_kind), intent(out) :: v3rhosigma2 + real(xc_f90_kind), intent(out) :: v3sigma3 + end subroutine XC_F90(gga) + + subroutine XC_F90(gga_exc)(p, np, rho, sigma, zk) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(out) :: zk + end subroutine XC_F90(gga_exc) + + subroutine XC_F90(gga_exc_vxc)(p, np, rho, sigma, zk, vrho, vsigma) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(out) :: zk + real(xc_f90_kind), intent(out) :: vrho + real(xc_f90_kind), intent(out) :: vsigma + end subroutine XC_F90(gga_exc_vxc) + + subroutine XC_F90(gga_vxc)(p, np, rho, sigma, vrho, vsigma) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(out) :: vrho + real(xc_f90_kind), intent(out) :: vsigma + end subroutine XC_F90(gga_vxc) + + subroutine XC_F90(gga_fxc)(p, np, rho, sigma, v2rho2, v2rhosigma, v2sigma2) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(out) :: v2rho2 + real(xc_f90_kind), intent(out) :: v2rhosigma + real(xc_f90_kind), intent(out) :: v2sigma2 + end subroutine XC_F90(gga_fxc) + + subroutine XC_F90(gga_kxc)(p, np, rho, sigma, v3rho3, v3rho2sigma, v3rhosigma2, v3sigma3) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(out) :: v3rho3 + real(xc_f90_kind), intent(out) :: v3rho2sigma + real(xc_f90_kind), intent(out) :: v3rhosigma2 + real(xc_f90_kind), intent(out) :: v3sigma3 + end subroutine XC_F90(gga_kxc) + end interface + + !---------------------------------------------------------------- + interface + subroutine XC_F90(gga_lb_set_par)(p, modified, threshold, ip, qtot) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: modified ! should we use the modified version + real(xc_f90_kind), intent(in) :: threshold ! if so, the threshold to use the asymtotic version + real(xc_f90_kind), intent(in) :: ip ! ionization potential + real(xc_f90_kind), intent(in) :: qtot ! total charge + end subroutine XC_F90(gga_lb_set_par) + end interface + + + !---------------------------------------------------------------- + interface + subroutine XC_F90(gga_lb_modified)(p, np, rho, grho, r, dedd) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho ! rho(nspin) the density + real(xc_f90_kind), intent(in) :: grho ! grho(3,nspin) the gradient of the density + real(xc_f90_kind), intent(in) :: r ! distance from center of finite system + real(xc_f90_kind), intent(out) :: dedd + end subroutine XC_F90(gga_lb_modified) + end interface + + + !---------------------------------------------------------------- + interface + subroutine XC_F90(gga_x_wpbeh_set_par)(p, omega) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + real(xc_f90_kind), intent(in) :: omega ! range separation + end subroutine XC_F90(gga_x_wpbeh_set_par) + end interface + + !---------------------------------------------------------------- + interface + subroutine XC_F90(gga_x_hjs_set_par)(p, omega) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + real(xc_f90_kind), intent(in) :: omega ! range separation + end subroutine XC_F90(gga_x_hjs_set_par) + end interface + + !---------------------------------------------------------------- + interface + subroutine XC_F90(gga_ak13_get_asymptotic)(homo, asymp) + use XC_F90(types_m) + real(xc_f90_kind), intent(in) :: homo + real(xc_f90_kind), intent(out) :: asymp + end subroutine XC_F90(gga_ak13_get_asymptotic) + end interface + + !---------------------------------------------------------------- + interface + subroutine XC_F90(hyb_exx_coef)(p, coef) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + real(xc_f90_kind), intent(out) :: coef + end subroutine XC_F90(hyb_exx_coef) + + subroutine XC_F90(hyb_cam_coef)(p, omega, alpha, beta) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + real(xc_f90_kind), intent(out) :: omega, alpha, beta + end subroutine XC_F90(hyb_cam_coef) + end interface + + + !---------------------------------------------------------------- + interface + subroutine XC_F90(hyb_gga_xc_hse_set_par)(p, beta, omega) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + real(xc_f90_kind), intent(in) :: beta ! mixing + real(xc_f90_kind), intent(in) :: omega ! range separation + end subroutine XC_F90(hyb_gga_xc_hse_set_par) + + subroutine XC_F90(hyb_gga_xc_pbeh_set_par)(p, alpha) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + real(xc_f90_kind), intent(in) :: alpha ! mixing + end subroutine XC_F90(hyb_gga_xc_pbeh_set_par) + end interface + + + ! the meta-GGAs + !---------------------------------------------------------------- + interface + subroutine XC_F90(mgga)(p, np, rho, sigma, lapl, tau, zk, vrho, vsigma, vlapl, vtau, & + v2rho2, v2sigma2, v2lapl2, v2tau2, v2rhosigma, v2rholapl, v2rhotau, & + v2sigmalapl, v2sigmatau, v2lapltau) + + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(in) :: lapl + real(xc_f90_kind), intent(in) :: tau + real(xc_f90_kind), intent(out) :: zk + real(xc_f90_kind), intent(out) :: vrho + real(xc_f90_kind), intent(out) :: vsigma + real(xc_f90_kind), intent(out) :: vlapl + real(xc_f90_kind), intent(out) :: vtau + real(xc_f90_kind), intent(out) :: v2rho2 + real(xc_f90_kind), intent(out) :: v2sigma2 + real(xc_f90_kind), intent(out) :: v2lapl2 + real(xc_f90_kind), intent(out) :: v2tau2 + real(xc_f90_kind), intent(out) :: v2rhosigma + real(xc_f90_kind), intent(out) :: v2rholapl + real(xc_f90_kind), intent(out) :: v2rhotau + real(xc_f90_kind), intent(out) :: v2sigmalapl + real(xc_f90_kind), intent(out) :: v2sigmatau + real(xc_f90_kind), intent(out) :: v2lapltau + end subroutine XC_F90(mgga) + + subroutine XC_F90(mgga_exc)(p, np, rho, sigma, lapl, tau, zk) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(in) :: lapl + real(xc_f90_kind), intent(in) :: tau + real(xc_f90_kind), intent(out) :: zk + end subroutine XC_F90(mgga_exc) + + subroutine XC_F90(mgga_exc_vxc)(p, np, rho, sigma, lapl, tau, zk, vrho, vsigma, vlapl, vtau) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(in) :: lapl + real(xc_f90_kind), intent(in) :: tau + real(xc_f90_kind), intent(out) :: zk + real(xc_f90_kind), intent(out) :: vrho + real(xc_f90_kind), intent(out) :: vsigma + real(xc_f90_kind), intent(out) :: vlapl + real(xc_f90_kind), intent(out) :: vtau + end subroutine XC_F90(mgga_exc_vxc) + + subroutine XC_F90(mgga_vxc)(p, np, rho, sigma, lapl, tau, vrho, vsigma, vlapl, vtau) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(in) :: lapl + real(xc_f90_kind), intent(in) :: tau + real(xc_f90_kind), intent(out) :: vrho + real(xc_f90_kind), intent(out) :: vsigma + real(xc_f90_kind), intent(out) :: vlapl + real(xc_f90_kind), intent(out) :: vtau + end subroutine XC_F90(mgga_vxc) + + subroutine XC_F90(mgga_fxc)(p, np, rho, sigma, lapl, tau, & + v2rho2, v2sigma2, v2lapl2, v2tau2, v2rhosigma, v2rholapl, v2rhotau, & + v2sigmalapl, v2sigmatau, v2lapltau) + + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(in) :: p + integer, intent(in) :: np + real(xc_f90_kind), intent(in) :: rho + real(xc_f90_kind), intent(in) :: sigma + real(xc_f90_kind), intent(in) :: lapl + real(xc_f90_kind), intent(in) :: tau + real(xc_f90_kind), intent(out) :: v2rho2 + real(xc_f90_kind), intent(out) :: v2sigma2 + real(xc_f90_kind), intent(out) :: v2lapl2 + real(xc_f90_kind), intent(out) :: v2tau2 + real(xc_f90_kind), intent(out) :: v2rhosigma + real(xc_f90_kind), intent(out) :: v2rholapl + real(xc_f90_kind), intent(out) :: v2rhotau + real(xc_f90_kind), intent(out) :: v2sigmalapl + real(xc_f90_kind), intent(out) :: v2sigmatau + real(xc_f90_kind), intent(out) :: v2lapltau + end subroutine XC_F90(mgga_fxc) + end interface + + interface + subroutine XC_F90(mgga_x_tb09_set_par)(p, cc) + use XC_F90(types_m) + type(XC_F90(pointer_t)), intent(inout) :: p + real(xc_f90_kind), intent(in) :: cc + end subroutine XC_F90(mgga_x_tb09_set_par) + end interface + + +end module XC_F90(lib_m) + +!! Local Variables: +!! mode: f90 +!! coding: utf-8 +!! End: diff --git a/libxc/src/mgga.c b/libxc/src/mgga.c new file mode 100644 index 000000000..5c385feb7 --- /dev/null +++ b/libxc/src/mgga.c @@ -0,0 +1,212 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include + +#include "util.h" +#include "funcs_mgga.c" +#include "funcs_hyb_mgga.c" + +/* initialization */ +int XC(mgga_init)(XC(func_type) *func, const XC(func_info_type) *info, int nspin) +{ + assert(func != NULL); + + /* initialize structure */ + func->info = info; + func->nspin = nspin; + func->params = NULL; + func->func = 0; + + func->n_func_aux = 0; + func->func_aux = NULL; + func->mix_coef = NULL; + + /* initialize spin counters */ + func->n_zk = 1; + func->n_rho = func->n_vrho = func->nspin; + func->n_tau = func->n_vtau = func->nspin; + func->n_lapl = func->n_vlapl = func->nspin; + if(func->nspin == XC_UNPOLARIZED){ + func->n_sigma = func->n_vsigma = 1; + func->n_v2rho2 = func->n_v2tau2 = func->n_v2lapl2 = 1; + func->n_v2rhotau = func->n_v2rholapl = func->n_v2lapltau = 1; + func->n_v2sigma2 = 1; + func->n_v2rhosigma = func->n_v2sigmatau = func->n_v2sigmalapl = 1; + }else{ + func->n_sigma = func->n_vsigma = 3; + func->n_v2rho2 = func->n_v2tau2 = func->n_v2lapl2 = 3; + func->n_v2rhotau = func->n_v2rholapl = func->n_v2lapltau = 4; + func->n_v2sigma2 = 6; + func->n_v2rhosigma = func->n_v2sigmatau = func->n_v2sigmalapl = 6; + } + + /* see if we need to initialize the functional */ + if(func->info->init != NULL) + func->info->init(func); + return 0; +} + + +void XC(mgga_end)(XC(func_type) *func) +{ + assert(func != NULL); + + /* call internal termination routine */ + if(func->info->end != NULL) + func->info->end(func); + + /* terminate any auxiliary functional */ + if(func->n_func_aux > 0){ + int ii; + + for(ii=0; iin_func_aux; ii++){ + XC(func_end)(func->func_aux[ii]); + free(func->func_aux[ii]); + } + free(func->func_aux); + } + + if(func->mix_coef != NULL){ + free(func->mix_coef); + func->mix_coef = NULL; + } + + /* deallocate any used parameter */ + if(func->params != NULL){ + free(func->params); + func->params = NULL; + } +} + + +void +XC(mgga)(const XC(func_type) *func, int np, + const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl, const FLOAT *tau, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, FLOAT *vlapl, FLOAT *vtau, + FLOAT *v2rho2, FLOAT *v2sigma2, FLOAT *v2lapl2, FLOAT *v2tau2, + FLOAT *v2rhosigma, FLOAT *v2rholapl, FLOAT *v2rhotau, + FLOAT *v2sigmalapl, FLOAT *v2sigmatau, FLOAT *v2lapltau) +{ + assert(func != NULL); + + /* sanity check */ + if(zk != NULL && !(func->info->flags & XC_FLAGS_HAVE_EXC)){ + fprintf(stderr, "Functional '%s' does not provide an implementation of Exc", + func->info->name); + exit(1); + } + + if(vrho != NULL && !(func->info->flags & XC_FLAGS_HAVE_VXC)){ + fprintf(stderr, "Functional '%s' does not provide an implementation of vxc", + func->info->name); + exit(1); + } + + if(v2rho2 != NULL && !(func->info->flags & XC_FLAGS_HAVE_FXC)){ + fprintf(stderr, "Functional '%s' does not provide an implementation of fxc", + func->info->name); + exit(1); + } + + /* initialize output to zero */ + if(zk != NULL) + memset(zk, 0, func->n_zk*np*sizeof(FLOAT)); + + if(vrho != NULL){ + assert(vsigma != NULL); + + memset(vrho, 0, func->n_vrho *np*sizeof(FLOAT)); + memset(vsigma, 0, func->n_vsigma*np*sizeof(FLOAT)); + memset(vtau, 0, func->n_vtau *np*sizeof(FLOAT)); + memset(vlapl, 0, func->n_vlapl *np*sizeof(FLOAT)); + } + + if(v2rho2 != NULL){ + /* warning : lapl terms missing here */ + assert(v2sigma2 != NULL && v2tau2 != NULL && v2lapl2 != NULL && + v2rhosigma != NULL && v2rhotau != NULL && v2rholapl != NULL && + v2sigmatau != NULL && v2sigmalapl != NULL && v2lapltau != NULL); + + memset(v2rho2, 0, func->n_v2rho2 *np*sizeof(FLOAT)); + memset(v2sigma2, 0, func->n_v2sigma2 *np*sizeof(FLOAT)); + memset(v2tau2, 0, func->n_v2tau2 *np*sizeof(FLOAT)); + memset(v2lapl2, 0, func->n_v2lapl2 *np*sizeof(FLOAT)); + memset(v2rhosigma, 0, func->n_v2rhosigma *np*sizeof(FLOAT)); + memset(v2rhotau, 0, func->n_v2rhotau *np*sizeof(FLOAT)); + memset(v2rholapl, 0, func->n_v2rholapl *np*sizeof(FLOAT)); + memset(v2sigmatau, 0, func->n_v2sigmatau *np*sizeof(FLOAT)); + memset(v2sigmalapl, 0, func->n_v2sigmalapl*np*sizeof(FLOAT)); + memset(v2lapltau, 0, func->n_v2lapltau *np*sizeof(FLOAT)); + } + + /* call functional */ + if(func->info->mgga != NULL) + func->info->mgga(func, np, rho, sigma, lapl, tau, zk, vrho, vsigma, vlapl, vtau, + v2rho2, v2sigma2, v2lapl2, v2tau2, v2rhosigma, v2rholapl, v2rhotau, + v2sigmalapl, v2sigmatau, v2lapltau); + + if(func->mix_coef != NULL) + XC(mix_func)(func, np, rho, sigma, lapl, tau, zk, vrho, vsigma, vlapl, vtau, + v2rho2, v2sigma2, v2lapl2, v2tau2, v2rhosigma, v2rholapl, v2rhotau, + v2sigmalapl, v2sigmatau, v2lapltau); + +} + +/* specializations */ +inline void +XC(mgga_exc)(const XC(func_type) *p, int np, + const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl, const FLOAT *tau, + FLOAT *zk) +{ + XC(mgga)(p, np, rho, sigma, lapl, tau, zk, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +} + +inline void +XC(mgga_exc_vxc)(const XC(func_type) *p, int np, + const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl, const FLOAT *tau, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, FLOAT *vlapl, FLOAT *vtau) +{ + XC(mgga)(p, np, rho, sigma, lapl, tau, zk, vrho, vsigma, vlapl, vtau, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +} + +inline void +XC(mgga_vxc)(const XC(func_type) *p, int np, + const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl, const FLOAT *tau, + FLOAT *vrho, FLOAT *vsigma, FLOAT *vlapl, FLOAT *vtau) +{ + XC(mgga)(p, np, rho, sigma, lapl, tau, NULL, vrho, vsigma, vlapl, vtau, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +} + +inline void +XC(mgga_fxc)(const XC(func_type) *p, int np, + const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl, const FLOAT *tau, + FLOAT *v2rho2, FLOAT *v2sigma2, FLOAT *v2lapl2, FLOAT *v2tau2, + FLOAT *v2rhosigma, FLOAT *v2rholapl, FLOAT *v2rhotau, + FLOAT *v2sigmalapl, FLOAT *v2sigmatau, FLOAT *v2lapltau) +{ + XC(mgga)(p, np, rho, sigma, lapl, tau, NULL, NULL, NULL, NULL, NULL, + v2rho2, v2sigma2, v2lapl2, v2tau2, v2rhosigma, v2rholapl, v2rhotau, + v2sigmalapl, v2sigmatau, v2lapltau); +} diff --git a/libxc/src/mgga_c_bc95.c b/libxc/src/mgga_c_bc95.c new file mode 100644 index 000000000..86f97a720 --- /dev/null +++ b/libxc/src/mgga_c_bc95.c @@ -0,0 +1,142 @@ +/* + Copyright (C) 2008 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_C_BC95 240 /* Becke correlation 95 */ + +typedef struct{ + FLOAT css, copp; +} mgga_c_bc95_params; + + +static void +mgga_c_bc95_init(XC(func_type) *p) +{ + assert(p!=NULL && p->params == NULL); + p->params = malloc(sizeof(mgga_c_bc95_params)); + + XC(mgga_c_bc95_set_params)(p, 0.038, 0.0031); + + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_LDA_C_PW_MOD, XC_POLARIZED); +} + + +void +XC(mgga_c_bc95_set_params)(XC(func_type) *p, FLOAT css, FLOAT copp) +{ + mgga_c_bc95_params *params; + + assert(p != NULL && p->params != NULL); + params = (mgga_c_bc95_params *) (p->params); + + params->css = css; + params->copp = copp; +} + + +static void +func(const XC(func_type) *p, XC(mgga_work_c_t) *r) +{ + static const FLOAT sign[2] = {1.0, -1.0}; + mgga_c_bc95_params *params; + + XC(lda_work_t) LDA[3]; + FLOAT opz, dd, g, g2, dgdxs, ddddxs, ddddts; + int is; + + assert(p != NULL && p->params != NULL); + params = (mgga_c_bc95_params *) (p->params); + + /* first we get the parallel and perpendicular LDAS */ + XC(lda_stoll) (p->func_aux[0], r->dens, r->zeta, r->order, LDA); + + /* initialize to zero */ + r->f = 0.0; + if(r->order >= 1){ + r->dfdrs = r->dfdz = r->dfdxs[0] = r->dfdxs[1] = r->dfdxt = 0.0; + r->dfdus[0] = r->dfdus[1] = r->dfdts[0] = r->dfdts[1] = 0.0; + } + if(r->order >= 2){ + r->d2fdrs2 = r->d2fdrsz = r->d2fdrsxt = r->d2fdrsxs[0] = r->d2fdrsxs[1] = 0.0; + r->d2fdz2 = r->d2fdzxt = r->d2fdzxs[0] = r->d2fdzxs[1] = r->d2fdxt2 = 0.0; + r->d2fdxtxs[0] = r->d2fdxtxs[1] = r->d2fdxs2[0] = r->d2fdxs2[1] = r->d2fdxs2[2] = 0.0; + } + + /* now we calculate the g functions for exchange and parallel correlation */ + for(is = 0; is < 2; is++){ + opz = 1.0 + sign[is]*r->zeta; + + if(r->dens*opz < 2.0*p->info->min_dens) continue; + + g = 1.0 + params->css*r->xs[is]*r->xs[is]; + g2 = g*g; + + dd = (r->ts[is] - r->xs[is]*r->xs[is]/8.0)/K_FACTOR_C; + + r->f += LDA[is].zk*dd/g2; + + if(r->order < 1) continue; + + dgdxs = 2.0*params->css*r->xs[is]; + ddddxs = -r->xs[is]/(4.0*K_FACTOR_C); + ddddts = 1.0/K_FACTOR_C; + + r->dfdrs += LDA[is].dedrs*dd/g2; + r->dfdz += LDA[is].dedz *dd/g2; + r->dfdxs[is] += LDA[is].zk*(ddddxs*g - 2.0*dd*dgdxs)/(g*g2); + r->dfdts[is] += LDA[is].zk*ddddts/g2; + } + + /* and now we add the opposite-spin contribution */ + g = 1.0 + params->copp*(r->xs[0]*r->xs[0] + r->xs[1]*r->xs[1]); + g2 = g*g; + + r->f += LDA[2].zk/g; + + if(r->order < 1) return; + + r->dfdrs += LDA[2].dedrs/g; + r->dfdz += LDA[2].dedz/g; + r->dfdxs[0] += -LDA[2].zk*2.0*params->copp*r->xs[0]/g2; + r->dfdxs[1] += -LDA[2].zk*2.0*params->copp*r->xs[1]/g2; +} + +#include "work_mgga_c.c" + +XC(func_info_type) XC(func_info_mgga_c_bc95) = { + XC_MGGA_C_BC95, + XC_CORRELATION, + "Becke correlation 95", + XC_FAMILY_MGGA, + "AD Becke, J. Chem. Phys. 104, 1040 (1996)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_c_bc95_init, + NULL, NULL, NULL, + work_mgga_c, +}; + diff --git a/libxc/src/mgga_c_cc06.c b/libxc/src/mgga_c_cc06.c new file mode 100644 index 000000000..896fa035e --- /dev/null +++ b/libxc/src/mgga_c_cc06.c @@ -0,0 +1,111 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_C_CC06 229 /* Cancio and Chou 2006 */ + + +static void +mgga_c_cc06_init(XC(func_type) *p) +{ + assert(p != NULL); + + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_LDA_C_PW, p->nspin); +} + + +static void +func(const XC(func_type) *pt, XC(mgga_work_c_t) *r) +{ + static FLOAT alpha = -0.0007, beta = 0.0080, gamma = 0.026; + XC(lda_work_t) pw; + FLOAT l_cnst, opz, omz, opz13, omz13, opz23, omz23, l, fxc_n, fxc_d, fxc; + FLOAT dldz, dldus[2], dfxc; + + pw.order = r->order; + pw.rs[0] = SQRT(r->rs); + pw.rs[1] = r->rs; + pw.rs[2] = r->rs*r->rs; + pw.zeta = r->zeta; + + XC(lda_c_pw_func)(pt->func_aux[0], &pw); + + l_cnst = CBRT(3.0/(2.0*4.0*M_PI)); + l_cnst = l_cnst*l_cnst/2.0; + + opz = 1.0 + r->zeta; + omz = 1.0 - r->zeta; + + opz13 = CBRT(opz); opz23 = opz13*opz13; + omz13 = CBRT(omz); omz23 = omz13*omz13; + + l = l_cnst*(r->us[0]*opz*opz23 + r->us[1]*omz*omz23); + + fxc_n = alpha + beta*l; + fxc_d = 1.0 + gamma*l; + fxc = 1.0 + fxc_n/fxc_d; + + r->f = pw.zk*fxc; + + if(r->order < 1) return; + + dldz = l_cnst*(5.0/3.0)*(r->us[0]*opz23 - r->us[1]*omz23); + dldus[0] = l_cnst*opz*opz23; + dldus[1] = l_cnst*omz*omz23; + + dfxc = -(alpha*gamma - beta)/(fxc_d*fxc_d); + + r->dfdrs = pw.dedrs*fxc; + r->dfdz = pw.dedz *fxc + pw.zk*dfxc*dldz; + r->dfdxt = 0.0; + r->dfdxs[0] = 0.0; + r->dfdxs[1] = 0.0; + r->dfdts[0] = 0.0; + r->dfdts[1] = 0.0; + r->dfdus[0] = pw.zk*dfxc*dldus[0]; + r->dfdus[1] = pw.zk*dfxc*dldus[1]; + + if(r->order < 2) return; +} + + +#include "work_mgga_c.c" + + +XC(func_info_type) XC(func_info_mgga_c_cc06) = { + XC_MGGA_C_CC06, + XC_CORRELATION, + "Cancio and Chou 2006", + XC_FAMILY_MGGA, + "AC Cancio, and MY Chou, Phys. Rev. B 74, 081202(R) (2006)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_c_cc06_init, + NULL, NULL, NULL, + work_mgga_c, +}; + diff --git a/libxc/src/mgga_c_cs.c b/libxc/src/mgga_c_cs.c new file mode 100644 index 000000000..b0709353f --- /dev/null +++ b/libxc/src/mgga_c_cs.c @@ -0,0 +1,104 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_C_CS 72 /* Colle and Salvetti */ + +static void +func(const XC(func_type) *pt, XC(mgga_work_c_t) *r) +{ + static FLOAT a = -0.04918, b = 0.132, c = 0.2533, d = 0.349; + FLOAT cnst_rs, cnst_283, opz, omz, opz13, omz13, opz23, omz23; + FLOAT ta, tb, tw, aux, ff, num, den; + FLOAT dtwdz, dtwdxt, dtwdus0, dtwdus1, dauxdrs; + FLOAT dnumdrs, dnumdz, dnumdxt, dnumdts0, dnumdts1, dnumdus0, dnumdus1, ddendrs; + + cnst_rs = CBRT(4*M_PI/3.0); + cnst_283 = 1.0/(4.0*M_CBRT2*M_CBRT2); + + opz = 1.0 + r->zeta; + omz = 1.0 - r->zeta; + + opz13 = CBRT(opz); opz23 = opz13*opz13; + omz13 = CBRT(omz); omz23 = omz13*omz13; + + ta = r->ts[0] - r->us[0]/8.0; + tb = r->ts[1] - r->us[1]/8.0; + tw = r->xt*r->xt/8.0 - cnst_283*(r->us[0]*opz*opz23 + r->us[1]*omz*omz23); + + aux = EXP(-c*cnst_rs*r->rs); + ff = opz*ta + omz*tb - tw; + num = 1.0 + 2.0*b*ff*aux; + den = 1.0 + d*cnst_rs*r->rs; + + r->f = a*num/den; + + if(r->order < 1) return; + + dtwdz = -cnst_283*(5.0/3.0)*(r->us[0]*opz23 - r->us[1]*omz23); + dtwdxt = r->xt/4.0; + dtwdus0 = -cnst_283*opz*opz23; + dtwdus1 = -cnst_283*omz*omz23; + + dauxdrs = -c*cnst_rs*aux; + + dnumdrs = 2.0*b*ff*dauxdrs; + dnumdz = 2.0*b*(ta - tb - dtwdz)*aux; + dnumdxt = -2.0*b*dtwdxt*aux; + dnumdts0 = 2.0*b*opz*aux; + dnumdts1 = 2.0*b*omz*aux; + dnumdus0 = 2.0*b*(-opz/8.0 - dtwdus0)*aux; + dnumdus1 = 2.0*b*(-omz/8.0 - dtwdus1)*aux; + + ddendrs = d*cnst_rs; + + r->dfdrs = a*(dnumdrs*den - num*ddendrs)/(den*den); + r->dfdz = a*dnumdz/den; + r->dfdxt = a*dnumdxt/den; + r->dfdxs[0] = 0.0; + r->dfdxs[1] = 0.0; + r->dfdts[0] = a*dnumdts0/den; + r->dfdts[1] = a*dnumdts1/den; + r->dfdus[0] = a*dnumdus0/den; + r->dfdus[1] = a*dnumdus1/den; + + if(r->order < 2) return; +} + + +#include "work_mgga_c.c" + + +XC(func_info_type) XC(func_info_mgga_c_cs) = { + XC_MGGA_C_CS, + XC_CORRELATION, + "Colle and Salvetti", + XC_FAMILY_MGGA, + "Colle and Salvetti, Theor. Chim. Acta 37, 329 (1975)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + NULL, + NULL, NULL, NULL, + work_mgga_c, +}; + diff --git a/libxc/src/mgga_c_m08.c b/libxc/src/mgga_c_m08.c new file mode 100644 index 000000000..8fc1cde7d --- /dev/null +++ b/libxc/src/mgga_c_m08.c @@ -0,0 +1,287 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_C_M08_HX 78 /* M08-HX functional of Minnesota */ +#define XC_MGGA_C_M08_SO 77 /* M08-SO functional of Minnesota */ +#define XC_MGGA_C_M11 76 /* M11 functional of Minnesota */ +#define XC_MGGA_C_M11_L 75 /* M11-L functional of Minnesota */ +#define XC_MGGA_C_MN12_L 74 /* MN12-L functional of Minnesota */ +#define XC_MGGA_C_MN12_SX 73 /* MN12-SX functional of Minnesota */ + + +static const FLOAT a_m08_hx[12] = { + 1.0000000e+00, -4.0661387e-01, -3.3232530e+00, 1.5540980e+00, 4.4248033e+01, -8.4351930e+01, + -1.1955581e+02, 3.9147081e+02, 1.8363851e+02, -6.3268223e+02, -1.1297403e+02, 3.3629312e+02 +}; +static const FLOAT b_m08_hx[12] = { + 1.3812334e+00, -2.4683806e+00, -1.1901501e+01, -5.4112667e+01, 1.0055846e+01, 1.4800687e+02, + 1.1561420e+02, 2.5591815e+02, 2.1320772e+02, -4.8412067e+02, -4.3430813e+02, 5.6627964e+01 +}; + +static const FLOAT a_m08_so[12] = { + 1.0000000e+00, 0.0000000e+00, -3.9980886e+00, 1.2982340e+01, 1.0117507e+02, -8.9541984e+01, + -3.5640242e+02, 2.0698803e+02, 4.6037780e+02, -2.4510559e+02, -1.9638425e+02, 1.1881459e+02 +}; +static const FLOAT b_m08_so[12] = { + 1.0000000e+00, -4.4117403e+00, -6.4128622e+00, 4.7583635e+01, 1.8630053e+02, -1.2800784e+02, + -5.5385258e+02, 1.3873727e+02, 4.1646537e+02, -2.6626577e+02, 5.6676300e+01, 3.1673746e+02 +}; + +static const FLOAT a_m11[12] = { + 1.0000000e+00, 0.0000000e+00, -3.8933250e+00, -2.1688455e+00, 9.3497200e+00, -1.9845140e+01, + 2.3455253e+00, 7.9246513e+01, 9.6042757e+00, -6.7856719e+01, -9.1841067e+00, 0.0000000e+00 +}; +static const FLOAT b_m11[12] = { + 7.2239798e-01, 4.3730564e-01, -1.6088809e+01, -6.5542437e+01, 3.2057230e+01, 1.8617888e+02, + 2.0483468e+01, -7.0853739e+01, 4.4483915e+01, -9.4484747e+01, -1.1459868e+02, 0.0000000e+00 +}; + +static const FLOAT a_m11_l[12] = { + 1.000000e+00, 0.000000e+00, 2.750880e+00, -1.562287e+01, 9.363381e+00, 2.141024e+01, + -1.424975e+01, -1.134712e+01, 1.022365e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00 +}; +static const FLOAT b_m11_l[12] = { + 1.000000e+00, -9.082060e+00, 6.134682e+00, -1.333216e+01, -1.464115e+01, 1.713143e+01, + 2.480738e+00, -1.007036e+01, -1.117521e-01, 0.000000e+00, 0.000000e+00, 0.000000e+00 +}; + +static const FLOAT a_mn12_l[12] = { + 8.844610e-01, -2.202279e-01, 5.701372e+00, -2.562378e+00, -9.646827e-01, 1.982183e-01, + 1.019976e+01, 9.789352e-01, -1.512722e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 +}; +static const FLOAT b_mn12_l[12] = { + 5.323948e-01, -5.831909e+00, 3.882386e+00, 5.878488e+00, 1.493228e+01, -1.374636e+01, + -8.492327e+00, -2.486548e+00, -1.822346e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00 +}; + +static const FLOAT a_mn12_sx[12] = { + 7.171161e-01, -2.380914e+00, 5.793565e+00, -1.243624e+00, 1.364920e+01, -2.110812e+01, + -1.598767e+01, 1.429208e+01, 6.149191e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 +}; +static const FLOAT b_mn12_sx[12] = { + 4.663699e-01, -9.110685e+00, 8.705051e+00, -1.813949e+00, -4.147211e-01, -1.021527e+01, + 8.240270e-01, 4.993815e+00, -2.563930e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00 +}; + + +typedef struct{ + const FLOAT *a, *b; +} mgga_c_m08_params; + + +static void +mgga_c_m08_init(XC(func_type) *p) +{ + mgga_c_m08_params *params; + + assert(p != NULL); + + p->n_func_aux = 2; + p->func_aux = (XC(func_type) **) malloc(2*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + p->func_aux[1] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_LDA_C_PW_MOD, p->nspin); + XC(func_init)(p->func_aux[1], XC_GGA_C_PBE, p->nspin); + + assert(p->params == NULL); + p->params = malloc(sizeof(mgga_c_m08_params)); + params = (mgga_c_m08_params *) (p->params); + + switch(p->info->number){ + case XC_MGGA_C_M08_HX: + params->a = a_m08_hx; + params->b = b_m08_hx; + break; + case XC_MGGA_C_M08_SO: + params->a = a_m08_so; + params->b = b_m08_so; + break; + case XC_MGGA_C_M11: + params->a = a_m11; + params->b = b_m11; + break; + case XC_MGGA_C_M11_L: + params->a = a_m11_l; + params->b = b_m11_l; + break; + case XC_MGGA_C_MN12_L: + params->a = a_mn12_l; + params->b = b_mn12_l; + break; + case XC_MGGA_C_MN12_SX: + params->a = a_mn12_sx; + params->b = b_mn12_sx; + break; + default: + fprintf(stderr, "Internal error in mgga_c_m08\n"); + exit(1); + } +} + + +static void +func(const XC(func_type) *pt, XC(mgga_work_c_t) *r) +{ + mgga_c_m08_params *params; + + XC(gga_work_c_t) pbe; + XC(lda_work_t) pw; + FLOAT t, dtdz, dtdts[2], opz, omz, opz13, omz13, opz23, omz23; + FLOAT fw1, fw2, dfw1dt, dfw2dt; + + assert(pt != NULL && pt->params != NULL); + params = (mgga_c_m08_params *) (pt->params); + + pw.order = r->order; + pw.rs[0] = SQRT(r->rs); + pw.rs[1] = r->rs; + pw.rs[2] = r->rs*r->rs; + pw.zeta = r->zeta; + XC(lda_c_pw_func)(pt->func_aux[0], &pw); + + pbe.order = r->order; + pbe.rs = r->rs; + pbe.zeta = r->zeta; + pbe.xt = r->xt; + pbe.xs[0] = r->xs[0]; + pbe.xs[1] = r->xs[1]; + XC(gga_c_pbe_func)(pt->func_aux[1], &pbe); + + opz = 1.0 + r->zeta; + omz = 1.0 - r->zeta; + + opz13 = CBRT(opz); opz23 = opz13*opz13; + omz13 = CBRT(omz); omz23 = omz13*omz13; + + /* the 0.5 was chosen to get the right K_FACTOR_C in mgga_series_w */ + t = 0.5*(r->ts[0]*opz*opz23 + r->ts[1]*omz*omz23); + + XC(mgga_series_w)(r->order, 12, params->a, t, &fw1, &dfw1dt); + XC(mgga_series_w)(r->order, 12, params->b, t, &fw2, &dfw2dt); + + r->f = fw1*pw.zk + fw2*pbe.f; + + if(r->order < 1) return; + + dtdz = (5.0/6.0)*(r->ts[0]*opz23 - r->ts[1]*omz23); + dtdts[0] = 0.5*opz*opz23; + dtdts[1] = 0.5*omz*omz23; + + r->dfdrs = fw1*pw.dedrs + fw2*pbe.dfdrs; + r->dfdz = fw1*pw.dedz + fw2*pbe.dfdz + (dfw1dt*pw.zk + dfw2dt*pbe.f)*dtdz; + r->dfdxt = fw2*pbe.dfdxt; + r->dfdxs[0] = fw2*pbe.dfdxs[0]; + r->dfdxs[1] = fw2*pbe.dfdxs[1]; + r->dfdus[0] = 0.0; + r->dfdus[1] = 0.0; + r->dfdts[0] = (dfw1dt*pw.zk + dfw2dt*pbe.f)*dtdts[0]; + r->dfdts[1] = (dfw1dt*pw.zk + dfw2dt*pbe.f)*dtdts[1]; + + if(r->order < 2) return; + +} + + +#include "work_mgga_c.c" + + +XC(func_info_type) XC(func_info_mgga_c_m08_hx) = { + XC_MGGA_C_M08_HX, + XC_EXCHANGE, + "M08-HX functional of Minnesota", + XC_FAMILY_MGGA, + "Y Zhao and DG Truhlar, J. Chem. Theory Comput. 4, 1849-1868 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_c_m08_init, + NULL, NULL, NULL, + work_mgga_c, +}; + +XC(func_info_type) XC(func_info_mgga_c_m08_so) = { + XC_MGGA_C_M08_SO, + XC_EXCHANGE, + "M08-SO functional of Minnesota", + XC_FAMILY_MGGA, + "Y Zhao and DG Truhlar, J. Chem. Theory Comput. 4, 1849-1868 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_c_m08_init, + NULL, NULL, NULL, + work_mgga_c, +}; + +XC(func_info_type) XC(func_info_mgga_c_m11) = { + XC_MGGA_C_M11, + XC_EXCHANGE, + "M11 functional of Minnesota", + XC_FAMILY_MGGA, + "R Peverati, and DG Truhlar, J. Phys. Chem. Lett. 2, 2810 (2011)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_c_m08_init, + NULL, NULL, NULL, + work_mgga_c, +}; + +XC(func_info_type) XC(func_info_mgga_c_m11_l) = { + XC_MGGA_C_M11_L, + XC_EXCHANGE, + "M11-L functional of Minnesota", + XC_FAMILY_MGGA, + "R Peverati, and DG Truhlar, J. Phys. Chem. Lett. 3, 117 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_c_m08_init, + NULL, NULL, NULL, + work_mgga_c, +}; + +XC(func_info_type) XC(func_info_mgga_c_mn12_l) = { + XC_MGGA_C_MN12_L, + XC_CORRELATION, + "MN12-L functional of Minnesota", + XC_FAMILY_MGGA, + "R Peverati and DG Truhlar, Phys. Chem. Chem. Phys. 14, 13171-13174 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_c_m08_init, + NULL, NULL, NULL, + work_mgga_c, +}; + +XC(func_info_type) XC(func_info_mgga_c_mn12_sx) = { + XC_MGGA_C_MN12_SX, + XC_CORRELATION, + "MN12-SX functional of Minnesota", + XC_FAMILY_MGGA, + "R Peverati and DG Truhlar, Phys. Chem. Chem. Phys. 14, accepted (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_c_m08_init, + NULL, NULL, NULL, + work_mgga_c, +}; + diff --git a/libxc/src/mgga_c_pkzb.c b/libxc/src/mgga_c_pkzb.c new file mode 100644 index 000000000..f763fa0bc --- /dev/null +++ b/libxc/src/mgga_c_pkzb.c @@ -0,0 +1,332 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_C_TPSS 231 /* Perdew, Tao, Staroverov & Scuseria correlation */ +#define XC_MGGA_C_PKZB 239 /* Perdew, Kurth, Zupan, and Blaha */ +#define XC_MGGA_C_REVTPSS 241 /* revised TPSS correlation */ + +typedef struct{ + FLOAT C0_c[4]; + FLOAT d, beta; +} mgga_c_pkzb_params; + + +static void +mgga_c_pkzb_init(XC(func_type) *p) +{ + + assert(p != NULL && p->params == NULL); + + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_GGA_C_PBE, XC_POLARIZED); + + p->params = malloc(sizeof(mgga_c_pkzb_params)); + + switch(p->info->number){ + case XC_MGGA_C_PKZB: + case XC_MGGA_C_TPSS: + XC(mgga_c_pkzb_set_params)(p, 0.06672455060314922, 2.8, 0.53, 0.87, 0.50, 2.26); + break; + case XC_MGGA_C_REVTPSS: + XC(mgga_c_pkzb_set_params)(p, 0.06672455060314922, 2.8, 0.59, 0.9269, 0.6225, 2.1540); + break; + default: + fprintf(stderr, "Internal error in mgga_c_tpss\n"); + exit(1); + } +} + +void +XC(mgga_c_pkzb_set_params)(XC(func_type) *p, FLOAT beta, FLOAT d, FLOAT C0_0, FLOAT C0_1, FLOAT C0_2, FLOAT C0_3) +{ + mgga_c_pkzb_params *params; + + assert(p != NULL && p->params != NULL); + params = (mgga_c_pkzb_params *) (p->params); + + params->beta = beta; + params->d = d; + params->C0_c[0] = C0_0; + params->C0_c[1] = C0_1; + params->C0_c[2] = C0_2; + params->C0_c[3] = C0_3; + + XC(gga_c_pbe_set_params) (p->func_aux[0], beta); +} + + +static void +tpss_eq_13_14(const FLOAT *C0_c, FLOAT zeta, FLOAT csi2, int order, FLOAT *C, FLOAT *dCdzeta, FLOAT *dCdcsi2) +{ + FLOAT fz, C0, dC0dz, dfzdz, aa, a4; + FLOAT z2=zeta*zeta; + + if(zeta >= 1.0 || zeta <= -1.0){ + *C = 0.0; + if(order > 0) *dCdcsi2 = *dCdzeta = 0.0; + return; + } + + /* Equation (13) */ + C0 = C0_c[0] + z2*(C0_c[1] + z2*(C0_c[2] + z2*C0_c[3])); + fz = 0.5*(POW(1.0 + zeta, -4.0/3.0) + POW(1.0 - zeta, -4.0/3.0)); + + /* Equation (14) */ + aa = 1.0 + csi2*fz; + a4 = POW(aa, 4); + + *C = C0 / a4; + + if(order > 0){ + /* Equation (13) */ + dC0dz = zeta*(2.0*C0_c[1] + z2*(4.0*C0_c[2] + z2*6.0*C0_c[3])); + dfzdz = 0.5*(POW(1.0 + zeta, -7.0/3.0) - POW(1.0 - zeta, -7.0/3.0))*(-4.0/3.0); + + /* Equation (14) */ + *dCdcsi2 = -4.0*C0*fz/(aa*a4); + *dCdzeta = (dC0dz*aa - C0*4.0*csi2*dfzdz)/(aa*a4); + } +} + + +static void +func(const XC(func_type) *pt, XC(mgga_work_c_t) *r) +{ + static const FLOAT tmin = 0.5e-10; + + XC(gga_work_c_t) PBE[3]; + mgga_c_pkzb_params *params; + + FLOAT opz, omz, opz13, omz13, opz23, omz23, taut, xtot, dd, dd2, ddt, ddt2; + FLOAT C, dCdz, dCdxt, dCdxs[2]; + FLOAT dtautdz, dtautdts[2], dxtotdz, dxtotdxt, dxtotdxs[2]; + FLOAT ddddz, ddddxt, ddddxs[2], ddddts[2], dddtdz, dddtdxt, dddtdxs[2], dddtdts[2]; + int is, is_tpss; + + assert(pt!=NULL && pt->params != NULL); + params = (mgga_c_pkzb_params *)pt->params; + + /* first we get the parallel and perpendicular PBE */ + is_tpss = (pt->info->number == XC_MGGA_C_TPSS || pt->info->number == XC_MGGA_C_REVTPSS) ? 1 : 0; + XC(pbe_c_stoll) (pt->func_aux[0], is_tpss, r, PBE); + + opz = 1.0 + r->zeta; + omz = 1.0 - r->zeta; + + opz13 = CBRT(opz); + omz13 = CBRT(omz); + + opz23 = opz13*opz13; + omz23 = omz13*omz13; + + /* get value of C */ + if(is_tpss){ + FLOAT z2, cnst, aux, csi2; + FLOAT dCdcsi2,dauxdz, dcsi2dz, dcsi2dxt, dcsi2dxs[2]; + + z2 = r->zeta*r->zeta; + cnst = 2.0*CBRT(3.0*M_PI*M_PI); + + aux = -r->xt*r->xt + (r->xs[0]*r->xs[0]*opz*opz23 + r->xs[1]*r->xs[1]*omz*omz23)/(2.0*M_CBRT2*M_CBRT2); + csi2 = (1.0 - z2)*aux/(cnst*cnst); + + tpss_eq_13_14(params->C0_c, r->zeta, csi2, r->order, &C, &dCdz, &dCdcsi2); + + if(r->order >= 1){ + dauxdz = 5.0*(r->xs[0]*r->xs[0]*opz23 - r->xs[1]*r->xs[1]*omz23)/(6.0*M_CBRT2*M_CBRT2); + dcsi2dz = (-2.0*r->zeta*aux + (1.0 - z2)*dauxdz)/(cnst*cnst); + + dcsi2dxt = -2.0*(1.0 - z2)*r->xt/(cnst*cnst); + dcsi2dxs[0] = (1.0 - z2)*r->xs[0]*opz*opz23/(cnst*cnst*M_CBRT2*M_CBRT2); + dcsi2dxs[1] = (1.0 - z2)*r->xs[1]*omz*omz23/(cnst*cnst*M_CBRT2*M_CBRT2); + + dCdz += dCdcsi2*dcsi2dz; + dCdxt = dCdcsi2*dcsi2dxt; + dCdxs[0] = dCdcsi2*dcsi2dxs[0]; + dCdxs[1] = dCdcsi2*dcsi2dxs[1]; + } + + }else{ + C = 0.53; + if(r->order >= 1) dCdz = dCdxt = dCdxs[0] = dCdxs[1] = 0.0; + } + + /* we get the spin compensated part */ + taut = (r->ts[0]*opz*opz23 + r->ts[1]*omz*omz23)/(2.0*M_CBRT2*M_CBRT2); + + if(is_tpss) + xtot = r->xt*r->xt; + else + xtot = (r->xs[0]*r->xs[0]*opz*opz23 + r->xs[1]*r->xs[1]*omz*omz23)/(2.0*M_CBRT2*M_CBRT2); + + ddt = (taut > tmin) ? xtot/(8.0*taut) : 0.0; + ddt2 = ddt*ddt; + + /* the functional */ + r->f = (1.0 + C*ddt2)*PBE[2].f; + + /* and the derivative */ + if(r->order >= 1){ + if(taut > tmin){ + dtautdz = 5.0/3.0 * (r->ts[0]*opz23 - r->ts[1]*omz23)/(2.0*M_CBRT2*M_CBRT2); + dtautdts[0] = opz*opz23/(2.0*M_CBRT2*M_CBRT2); + dtautdts[1] = omz*omz23/(2.0*M_CBRT2*M_CBRT2); + + if(is_tpss){ + dxtotdz = 0.0; + dxtotdxt = 2.0*r->xt; + dxtotdxs[0] = 0.0; + dxtotdxs[1] = 0.0; + }else{ + dxtotdz = 5.0/3.0 * (r->xs[0]*r->xs[0]*opz23 - r->xs[1]*r->xs[1]*omz23)/(2.0*M_CBRT2*M_CBRT2); + dxtotdxt = 0.0; + dxtotdxs[0] = 2.0*r->xs[0]*opz*opz23/(2.0*M_CBRT2*M_CBRT2); + dxtotdxs[1] = 2.0*r->xs[1]*omz*omz23/(2.0*M_CBRT2*M_CBRT2); + } + + dddtdz = (dxtotdz*taut - xtot*dtautdz)/(8.0*taut*taut); + dddtdxt = dxtotdxt/(8.0*taut); + dddtdxs[0] = dxtotdxs[0]/(8.0*taut); + dddtdxs[1] = dxtotdxs[1]/(8.0*taut); + dddtdts[0] = -xtot*dtautdts[0]/(8.0*taut*taut); + dddtdts[1] = -xtot*dtautdts[1]/(8.0*taut*taut); + }else{ + dddtdz = dddtdxt = dddtdxs[0] = dddtdxs[1] = dddtdts[0] = dddtdts[1] = 0.0; + } + + r->dfdrs = (1.0 + C*ddt2)*PBE[2].dfdrs; + r->dfdz = (1.0 + C*ddt2)*PBE[2].dfdz + (dCdz *ddt2 + 2.0*C*ddt*dddtdz )*PBE[2].f; + r->dfdxt = (1.0 + C*ddt2)*PBE[2].dfdxt + (dCdxt *ddt2 + 2.0*C*ddt*dddtdxt )*PBE[2].f; + r->dfdxs[0] = (1.0 + C*ddt2)*PBE[2].dfdxs[0] + (dCdxs[0]*ddt2 + 2.0*C*ddt*dddtdxs[0])*PBE[2].f; + r->dfdxs[1] = (1.0 + C*ddt2)*PBE[2].dfdxs[1] + (dCdxs[1]*ddt2 + 2.0*C*ddt*dddtdxs[1])*PBE[2].f; + r->dfdts[0] = 2.0*C*ddt*dddtdts[0]*PBE[2].f; + r->dfdts[1] = 2.0*C*ddt*dddtdts[1]*PBE[2].f; + } + + if(r->order >= 2){ + } + + /* now the spin-resolved part */ + for(is = 0; is < 2; is++){ + int js = (is == 0) ? 1 : 0; + + if(is_tpss){ + dd = ddt; + dd2 = ddt2; + }else{ + dd = (r->ts[is] > tmin) ? r->xs[is]*r->xs[is]/(8.0*r->ts[is]) : 0.0; + dd2 = dd*dd; + } + + r->f += -(1.0 + C)*dd2*PBE[is].f; + + if(r->order < 1) continue; + + if(is_tpss){ + ddddz = dddtdz; + ddddxt = dddtdxt; + ddddxs[0] = dddtdxs[0]; + ddddxs[1] = dddtdxs[1]; + ddddts[0] = dddtdts[0]; + ddddts[1] = dddtdts[1]; + }else{ + ddddz = ddddxt = ddddxs[js] = ddddts[js] = 0.0; + if(r->ts[is] > tmin){ + ddddxs[is] = 2.0*r->xs[is]/(8.0*r->ts[is]); + ddddts[is] = -r->xs[is]*r->xs[is]/(8.0*r->ts[is]*r->ts[is]); + }else + ddddxs[is] = ddddts[is] = 0.0; + } + + r->dfdrs += -(1.0 + C)*dd2*PBE[is].dfdrs; + r->dfdz += -(1.0 + C)*dd*(2.0*ddddz *PBE[is].f + dd*PBE[is].dfdz) - dCdz *dd2*PBE[is].f; + r->dfdxt += -(1.0 + C)*dd*(2.0*ddddxt *PBE[is].f + dd*PBE[is].dfdxt) - dCdxt *dd2*PBE[is].f; + r->dfdxs[0] += -(1.0 + C)*dd*(2.0*ddddxs[0]*PBE[is].f + dd*PBE[is].dfdxs[0]) - dCdxs[0]*dd2*PBE[is].f; + r->dfdxs[1] += -(1.0 + C)*dd*(2.0*ddddxs[1]*PBE[is].f + dd*PBE[is].dfdxs[1]) - dCdxs[1]*dd2*PBE[is].f; + r->dfdts[0] += -(1.0 + C)*2.0*dd*ddddts[0]*PBE[is].f; + r->dfdts[1] += -(1.0 + C)*2.0*dd*ddddts[1]*PBE[is].f; + } + + if(is_tpss){ + r->f = r->f*(1.0 + params->d*r->f*ddt*ddt2); + + if(r->order >= 1){ + r->dfdrs = r->dfdrs*(1.0 + 2.0*params->d*r->f*ddt*ddt2); + r->dfdz = r->dfdz *(1.0 + 2.0*params->d*r->f*ddt*ddt2) + 3.0*r->f*r->f*params->d*dddtdz *ddt2; + r->dfdxt = r->dfdxt*(1.0 + 2.0*params->d*r->f*ddt*ddt2) + 3.0*r->f*r->f*params->d*dddtdxt*ddt2; + r->dfdxs[0] = r->dfdxs[0]*(1.0 + 2.0*params->d*r->f*ddt*ddt2) + 3.0*r->f*r->f*params->d*dddtdxs[0]*ddt2; + r->dfdxs[1] = r->dfdxs[1]*(1.0 + 2.0*params->d*r->f*ddt*ddt2) + 3.0*r->f*r->f*params->d*dddtdxs[1]*ddt2; + r->dfdts[0] = r->dfdts[0]*(1.0 + 2.0*params->d*r->f*ddt*ddt2) + 3.0*r->f*r->f*params->d*dddtdts[0]*ddt2; + r->dfdts[1] = r->dfdts[1]*(1.0 + 2.0*params->d*r->f*ddt*ddt2) + 3.0*r->f*r->f*params->d*dddtdts[1]*ddt2; + } + } +} + + +#include "work_mgga_c.c" + + +XC(func_info_type) XC(func_info_mgga_c_pkzb) = { + XC_MGGA_C_PKZB, + XC_CORRELATION, + "Perdew, Kurth, Zupan, and Blaha", + XC_FAMILY_MGGA, + "JP Perdew, S Kurth, A Zupan, and P. Blaha, Phys. Rev. Lett. 82, 2544-2547 (1999)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-26, 1e-32, 1e-32, 1e-32, /* densities smaller than 1e-26 give NaNs */ + mgga_c_pkzb_init, + NULL, NULL, NULL, + work_mgga_c, +}; + +XC(func_info_type) XC(func_info_mgga_c_tpss) = { + XC_MGGA_C_TPSS, + XC_CORRELATION, + "Tao, Perdew, Staroverov & Scuseria", + XC_FAMILY_MGGA, + "J Tao, JP Perdew, VN Staroverov, and G Scuseria, Phys. Rev. Lett. 91, 146401 (2003)\n" + "JP Perdew, J Tao, VN Staroverov, and G Scuseria, J. Chem. Phys. 120, 6898 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-26, 1e-32, 1e-32, 1e-32, /* densities smaller than 1e-26 give NaNs */ + mgga_c_pkzb_init, + NULL, NULL, NULL, + work_mgga_c, +}; + +XC(func_info_type) XC(func_info_mgga_c_revtpss) = { + XC_MGGA_C_REVTPSS, + XC_CORRELATION, + "revised TPSS correlation", + XC_FAMILY_MGGA, + "JP Perdew, A Ruzsinszky, GI Csonka, LA Constantin, and J Sun, Phys. Rev. Lett. 103, 026403 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-26, 1e-32, 1e-32, 1e-32, /* densities smaller than 1e-26 give NaNs */ + mgga_c_pkzb_init, + NULL, NULL, NULL, + work_mgga_c, +}; + diff --git a/libxc/src/mgga_c_vsxc.c b/libxc/src/mgga_c_vsxc.c new file mode 100644 index 000000000..bf2c3e45d --- /dev/null +++ b/libxc/src/mgga_c_vsxc.c @@ -0,0 +1,350 @@ +/* + Copyright (C) 2008 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_C_VSXC 232 /* VSxc from Van Voorhis and Scuseria (correlation part) */ +#define XC_MGGA_C_M05 237 /* M05 functional of Minnesota */ +#define XC_MGGA_C_M05_2X 238 /* M05-2X functional of Minnesota */ +#define XC_MGGA_C_M06_L 233 /* M06-Local functional of Minnesota */ +#define XC_MGGA_C_M06_HF 234 /* M06-HF functional of Minnesota */ +#define XC_MGGA_C_M06 235 /* M06 functional of Minnesota */ +#define XC_MGGA_C_M06_2X 236 /* M06-2X functional of Minnesota */ + +static const FLOAT vsxc_dab[6] = { 7.035010e-01, 7.694574e-03, 5.152765e-02, 3.394308e-05, -1.269420e-03, 1.296118e-03}; +static const FLOAT vsxc_dss[6] = { 3.270912e-01, -3.228915e-02, -2.942406e-02, 2.134222e-03, -5.451559e-03, 1.577575e-02}; + +static const FLOAT m05_cab[5] = { 1.00000e0, 3.78569e0, -14.15261e0, -7.46589e0, 17.94491e0}; +static const FLOAT m05_css[5] = { 1.00000e0, 3.77344e0, -26.04463e0, 30.69913e0, -9.22695e0}; + +static const FLOAT m052x_cab[5] = { 1.00000e0, 1.09297e0, -3.79171e0, 2.82810e0, -10.58909e0}; +static const FLOAT m052x_css[5] = { 1.00000e0, -3.05430e0, 7.61854e0, 1.47665e0, -11.92365e0}; + +static const FLOAT m06l_cab[5] = { 6.042374e-01, 1.776783e+02, -2.513252e+02, 7.635173e+01, -1.255699e+01}; +static const FLOAT m06l_css[5] = { 5.349466e-01, 5.396620e-01, -3.161217e+01, 5.149592e+01, -2.919613e+01}; +static const FLOAT m06l_dab[6] = { 3.957626e-01, -5.614546e-01, 1.403963e-02, 9.831442e-04, -3.577176e-03, 0.000000e+00}; +static const FLOAT m06l_dss[6] = { 4.650534e-01, 1.617589e-01, 1.833657e-01, 4.692100e-04, -4.990573e-03, 0.000000e+00}; + +static const FLOAT m06hf_cab[5] = { 1.674634e+00, 5.732017e+01, 5.955416e+01, -2.311007e+02, 1.255199e+02}; +static const FLOAT m06hf_css[5] = { 1.023254e-01, -2.453783e+00, 2.913180e+01, -3.494358e+01, 2.315955e+01}; +static const FLOAT m06hf_dab[6] = {-6.746338e-01, -1.534002e-01, -9.021521e-02, -1.292037e-03, -2.352983e-04, 0.000000e+00}; +static const FLOAT m06hf_dss[6] = { 8.976746e-01, -2.345830e-01, 2.368173e-01, -9.913890e-04, -1.146165e-02, 0.000000e+00}; + +static const FLOAT m06_cab[5] = { 3.741539e+00, 2.187098e+02, -4.531252e+02, 2.936479e+02, -6.287470e+01}; +static const FLOAT m06_css[5] = { 5.094055e-01, -1.491085e+00, 1.723922e+01, -3.859018e+01, 2.845044e+01}; +static const FLOAT m06_dab[6] = {-2.741539e+00, -6.720113e-01, -7.932688e-02, 1.918681e-03, -2.032902e-03, 0.000000e+00}; +static const FLOAT m06_dss[6] = { 4.905945e-01, -1.437348e-01, 2.357824e-01, 1.871015e-03, -3.788963e-03, 0.000000e+00}; + +static const FLOAT m062x_cab[5] = { 8.833596e-01, 3.357972e+01, -7.043548e+01, 4.978271e+01, -1.852891e+01}; +static const FLOAT m062x_css[5] = { 3.097855e-01, -5.528642e+00, 1.347420e+01, -3.213623e+01, 2.846742e+01}; +static const FLOAT m062x_dab[6] = { 1.166404e-01, -9.120847e-02, -6.726189e-02, 6.720580e-05, 8.448011e-04, 0.000000e+00}; +static const FLOAT m062x_dss[6] = { 6.902145e-01, 9.847204e-02, 2.214797e-01, -1.968264e-03, -6.775479e-03, 0.000000e+00}; + +typedef struct{ + const FLOAT *cab, *css, *dab, *dss; + FLOAT alpha_ab, alpha_ss, gamma_ab, gamma_ss; +} mgga_c_m06l_params; + + +static void +mgga_c_vsxc_init(XC(func_type) *p) +{ + mgga_c_m06l_params *params; + + assert(p != NULL); + + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_LDA_C_PW_MOD, XC_POLARIZED); + + assert(p!=NULL && p->params == NULL); + p->params = malloc(sizeof(mgga_c_m06l_params)); + params = (mgga_c_m06l_params *)p->params; + + switch(p->info->number){ + case XC_MGGA_C_VSXC: + params->cab = params->css = NULL; + params->alpha_ab = 0.00304966; + params->dab = vsxc_dab; + params->alpha_ss = 0.00515088; + params->dss = vsxc_dss; + break; + case XC_MGGA_C_M05: + params->gamma_ab = 0.0031; + params->cab = m05_cab; + params->gamma_ss = 0.06; + params->css = m05_css; + params->dab = params->dss = NULL; + break; + case XC_MGGA_C_M05_2X: + params->gamma_ab = 0.0031; + params->cab = m052x_cab; + params->gamma_ss = 0.06; + params->css = m052x_css; + params->dab = params->dss = NULL; + break; + case XC_MGGA_C_M06_L: + params->gamma_ab = 0.0031; + params->cab = m06l_cab; + params->gamma_ss = 0.06; + params->css = m06l_css; + params->alpha_ab = 0.00304966; + params->dab = m06l_dab; + params->alpha_ss = 0.00515088; + params->dss = m06l_dss; + break; + case XC_MGGA_C_M06_HF: + params->gamma_ab = 0.0031; + params->cab = m06hf_cab; + params->gamma_ss = 0.06; + params->css = m06hf_css; + params->alpha_ab = 0.00304966; + params->dab = m06hf_dab; + params->alpha_ss = 0.00515088; + params->dss = m06hf_dss; + break; + case XC_MGGA_C_M06: + params->gamma_ab = 0.0031; + params->cab = m06_cab; + params->gamma_ss = 0.06; + params->css = m06_css; + params->alpha_ab = 0.00304966; + params->dab = m06_dab; + params->alpha_ss = 0.00515088; + params->dss = m06_dss; + break; + case XC_MGGA_C_M06_2X: + params->gamma_ab = 0.0031; + params->cab = m062x_cab; + params->gamma_ss = 0.06; + params->css = m062x_css; + params->alpha_ab = 0.00304966; + params->dab = m062x_dab; + params->alpha_ss = 0.00515088; + params->dss = m062x_dss; + break; + default: + fprintf(stderr, "Internal error in mgga_c_vsxc\n"); + exit(1); + } +} + + +static void +func(const XC(func_type) *pt, XC(mgga_work_c_t) *r) +{ + static const FLOAT tmin = 0.5e-10; + static const FLOAT sign[2] = {1.0, -1.0}; + + mgga_c_m06l_params *params; + XC(lda_work_t) LDA[3]; + FLOAT opz, dd, g, dgdx, d2gdx2, h, dhdx, dhdt, aux, x_tot, dx_totdxs[2], ddddxs, ddddts; + int is; + + assert(pt!=NULL && pt->params != NULL); + params = (mgga_c_m06l_params *)pt->params; + + /* first we get the parallel and perpendicular LDAS */ + XC(lda_stoll) (pt->func_aux[0], r->dens, r->zeta, r->order, LDA); + + /* initialize to zero */ + r->f = 0.0; + if(r->order >= 1){ + r->dfdrs = r->dfdz = r->dfdxs[0] = r->dfdxs[1] = r->dfdxt = 0.0; + r->dfdus[0] = r->dfdus[1] = r->dfdts[0] = r->dfdts[1] = 0.0; + } + if(r->order >= 2){ + r->d2fdrs2 = r->d2fdrsz = r->d2fdrsxt = r->d2fdrsxs[0] = r->d2fdrsxs[1] = 0.0; + r->d2fdz2 = r->d2fdzxt = r->d2fdzxs[0] = r->d2fdzxs[1] = r->d2fdxt2 = 0.0; + r->d2fdxtxs[0] = r->d2fdxtxs[1] = r->d2fdxs2[0] = r->d2fdxs2[1] = r->d2fdxs2[2] = 0.0; + } + + /* now we calculate the g functions for exchange and parallel correlation */ + for(is = 0; is < 2; is++){ + opz = 1.0 + sign[is]*r->zeta; + + if(r->dens*opz < 2.0*pt->info->min_dens) continue; + + if(params->dss == NULL){ + h = dhdx = dhdt = 0.0; + }else{ + XC(mgga_x_gvt4_func)(r->order, r->xs[is], 2.0*(r->ts[is] - K_FACTOR_C), + params->alpha_ss, params->dss, &h, &dhdx, &dhdt); + } + + if(params->css == NULL){ + g = dgdx = 0.0; + }else{ + XC(mgga_b97_func_g)(params->css, params->gamma_ss, r->xs[is], r->order, &g, &dgdx, &d2gdx2); + } + + dd = (r->ts[is] > tmin) ? 1.0 - r->xs[is]*r->xs[is]/(8.0*r->ts[is]) : 0.0; + + r->f += LDA[is].zk*dd*(g + h); + + if(r->order < 1) continue; + + if(r->ts[is] > tmin){ + ddddxs = -2.0*r->xs[is]/(8.0*r->ts[is]); + ddddts = r->xs[is]*r->xs[is]/(8.0*r->ts[is]*r->ts[is]); + }else + ddddxs = ddddts = 0.0; + + r->dfdrs += LDA[is].dedrs*dd*(g + h); + r->dfdz += LDA[is].dedz *dd*(g + h); + r->dfdxs[is] += LDA[is].zk*(ddddxs*(g + h) + dd*(dgdx + dhdx)); + r->dfdts[is] += LDA[is].zk*(ddddts*(g + h) + 2.0*dd*dhdt); + } + + /* and now we add the opposite-spin contribution */ + aux = r->xs[0]*r->xs[0] + r->xs[1]*r->xs[1]; + x_tot = SQRT(aux); + + if(params->dab == NULL){ + h = dhdx = dhdt = 0.0; + }else{ + XC(mgga_x_gvt4_func)(r->order, x_tot, 2.0*(r->ts[0] + r->ts[1] - 2.0*K_FACTOR_C), + params->alpha_ab, params->dab, &h, &dhdx, &dhdt); + } + + if(params->cab == NULL){ + g = dgdx = 0.0; + }else{ + XC(mgga_b97_func_g)(params->cab, params->gamma_ab, x_tot, r->order, &g, &dgdx, &d2gdx2); + } + + r->f += LDA[2].zk*(g + h); + + if(r->order < 1) return; + + dx_totdxs[0] = r->xs[0]/x_tot; + dx_totdxs[1] = r->xs[1]/x_tot; + + r->dfdrs += LDA[2].dedrs*(g + h); + r->dfdz += LDA[2].dedz *(g + h); + r->dfdxs[0] += LDA[2].zk*(dgdx + dhdx)*dx_totdxs[0]; + r->dfdxs[1] += LDA[2].zk*(dgdx + dhdx)*dx_totdxs[1]; + r->dfdts[0] += LDA[2].zk*dhdt*2.0; + r->dfdts[1] += LDA[2].zk*dhdt*2.0; +} + +#include "work_mgga_c.c" + +XC(func_info_type) XC(func_info_mgga_c_m05) = { + XC_MGGA_C_M05, + XC_CORRELATION, + "M05 functional of Minnesota", + XC_FAMILY_MGGA, + "Y Zhao, NE Schultz, and DG Truhlar, J. Chem. Phys. 123, 161103 (2005)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_c_vsxc_init, + NULL, NULL, NULL, + work_mgga_c, +}; + + +XC(func_info_type) XC(func_info_mgga_c_m05_2x) = { + XC_MGGA_C_M05_2X, + XC_CORRELATION, + "M05-2X functional of Minnesota", + XC_FAMILY_MGGA, + "Y Zhao, NE Schultz, and DG Truhlar, J. Chem. Theory Comput. 2, 364 (2006)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_c_vsxc_init, + NULL, NULL, NULL, + work_mgga_c, +}; + +const XC(func_info_type) XC(func_info_mgga_c_vsxc) = { + XC_MGGA_C_VSXC, + XC_CORRELATION, + "VSXC (correlation part)", + XC_FAMILY_MGGA, + "T Van Voorhis and GE Scuseria, JCP 109, 400 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + mgga_c_vsxc_init, + NULL, + NULL, NULL, + work_mgga_c, +}; + +const XC(func_info_type) XC(func_info_mgga_c_m06_l) = { + XC_MGGA_C_M06_L, + XC_CORRELATION, + "M06-Local functional of Minnesota", + XC_FAMILY_MGGA, + "Y Zhao and DG Truhlar, JCP 125, 194101 (2006)\n" + "Y Zhao and DG Truhlar, Theor. Chem. Account 120, 215 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + mgga_c_vsxc_init, + NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_c, +}; + +const XC(func_info_type) XC(func_info_mgga_c_m06_hf) = { + XC_MGGA_C_M06_HF, + XC_CORRELATION, + "M06-HF functional of Minnesota", + XC_FAMILY_MGGA, + "Y Zhao and DG Truhlar, J. Phys. Chem. A 110, 13126 (2006)\n", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + mgga_c_vsxc_init, + NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_c, +}; + +const XC(func_info_type) XC(func_info_mgga_c_m06) = { + XC_MGGA_C_M06, + XC_CORRELATION, + "M06 functional of Minnesota", + XC_FAMILY_MGGA, + "Theor. Chem. Acc. 120, 215 (2008)\n", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + mgga_c_vsxc_init, + NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_c, +}; + +const XC(func_info_type) XC(func_info_mgga_c_m06_2x) = { + XC_MGGA_C_M06_2X, + XC_CORRELATION, + "M06-2X functional of Minnesota", + XC_FAMILY_MGGA, + "Theor. Chem. Acc. 120, 215 (2008)\n", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + mgga_c_vsxc_init, + NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_c, +}; diff --git a/libxc/src/mgga_x_2d_prhg07.c b/libxc/src/mgga_x_2d_prhg07.c new file mode 100644 index 000000000..9a3ab0aad --- /dev/null +++ b/libxc/src/mgga_x_2d_prhg07.c @@ -0,0 +1,168 @@ +/* + Copyright (C) 2006-2009 J.I.J. Ojajarvi + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_X_2D_PRHG07 210 /* Pittalis, Rasanen, Helbig, Gross Exchange Functional */ +#define XC_MGGA_X_2D_PRHG07_PRP10 211 /* PRGH07 with PRP10 correction */ + + +/* Standard Newton's method */ +static FLOAT +prhg_newt(FLOAT c, FLOAT tol, FLOAT * res, int *ierr) +{ + int count; + long double y, f, yf; + long double ey, fp, step; + static int max_iter = 50; + + *ierr = 1; + if(c < -1.0) + return 0.0; + + count = 0; + + /** We need to calculate y in different ways in different regions + because of numerical problems. (y-1)*exp(y) is very nasty at high y + and log(y-1)+y is very nasty at low y. **/ + if (c < 4.0) { + y = 2.0; + do { + ey = expl(y); + yf = (y-1.0)*ey; + f = yf - c; + fp = ey*y; + + step = f/fp; + + y -= fabsl(step) < 1.0 ? step : (step)/fabsl(step); + y = fabsl(y); + + count ++; + *res = fabsl(f); + } while((*res > tol) && (count < max_iter)); + } + else { + y = 6.0; + c = logl(c); + do { + yf = logl(y-1.0)+y; + f = yf - c; + fp = 1.0 + 1.0/(-1.0 + y); + + step = f/fp; + + y -= fabsl(step) < 1.0 ? step : (step)/fabsl(step); + y = fabsl(y); + + count ++; + *res = fabsl(f); + } while((*res > tol) && (count < max_iter)); + } + + if(count == max_iter) *ierr=0; + + return y; +} + +FLOAT XC(mgga_x_2d_prhg_get_y)(FLOAT C) +{ + FLOAT rhs, res, y, tol; + int ierr; + +#ifdef SINGLE_PRECISION + tol = 1e-6; +#else + tol = 5e-12; +#endif + + rhs = C/M_PI; + + y = prhg_newt(rhs, tol, &res, &ierr); + if(ierr == 0){ + fprintf(stderr, + "Warning: Convergence not reached in PRHG functional\n" + "For c = %e (residual = %e)\n", C, res); + } + + return y; +} + +static void +func(const XC(func_type) *p, XC(mgga_work_x_t) *r) +{ + FLOAT y; + FLOAT v_PRHG, C; + + assert(p != NULL); + + C = 0.25*(r->u - 4.0*r->t + 0.5*r->x*r->x); + + y = XC(mgga_x_2d_prhg_get_y)(C); + + v_PRHG = M_PI*XC(bessel_I0)(y/2.0); + v_PRHG /= X_FACTOR_2D_C; + + if (p->info->number == XC_MGGA_X_2D_PRHG07) { + r->dfdrs = v_PRHG*(1.0 / 3.0); // This factor is here in order to get the correct potential through work_mgga_x.c + r->f = v_PRHG / 2.0; + }else if (p->info->number == XC_MGGA_X_2D_PRHG07_PRP10) { + r->dfdrs = (v_PRHG - ((2.0*M_SQRT2)/(3.0*M_PI))*SQRT(max(2.0*r->t - 0.25*r->x*r->x, 0.0))/X_FACTOR_2D_C)*(1.0 / 3.0); + r->f = r->dfdrs * (3.0 / 2.0); + } + + r->dfdrs /= -r->rs; /* due to the definition of dfdrs */ + + return; +} +#define XC_DIMENSIONS 2 +#include "work_mgga_x.c" + +const XC(func_info_type) XC(func_info_mgga_x_2d_prhg07) = { + XC_MGGA_X_2D_PRHG07, + XC_EXCHANGE, + "Pittalis-Rasanen-Helbig-Gross 2007", + XC_FAMILY_MGGA, + "S. Pittalis, E. Rasanen, N. Helbig, and E. K. U. Gross, Phys. Rev. B 76, 235314 (2007)", + XC_FLAGS_2D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + NULL, NULL, + NULL, NULL, + work_mgga_x, +}; + +const XC(func_info_type) XC(func_info_mgga_x_2d_prhg07_prp10) = { + XC_MGGA_X_2D_PRHG07_PRP10, + XC_EXCHANGE, + "PRHG07 with Pittalis-Rasanen-Proetto 2010 correction", + XC_FAMILY_MGGA, + "S. Pittalis, E. Rasanen, N. Helbig, and E. K. U. Gross, Phys. Rev. B 76, 235314 (2007)\n" + "S. Pittalis, E. Rasanen, C.R. Proetto, Phys. Rev. B. 81, 115108 (2010)", + XC_FLAGS_2D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + NULL, + NULL, + NULL, NULL, + work_mgga_x, +}; + diff --git a/libxc/src/mgga_x_br89.c b/libxc/src/mgga_x_br89.c new file mode 100644 index 000000000..efc074b59 --- /dev/null +++ b/libxc/src/mgga_x_br89.c @@ -0,0 +1,316 @@ +/* + Copyright (C) 2006-2009 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_X_BR89 206 /* Becke-Roussel 89 */ +#define XC_MGGA_X_BJ06 207 /* Becke & Johnson correction to Becke-Roussel 89 */ +#define XC_MGGA_X_TB09 208 /* Tran & Blaha correction to Becke & Johnson */ +#define XC_MGGA_X_RPP09 209 /* Rasanen, Pittalis, and Proetto correction to Becke & Johnson */ + +typedef struct{ + FLOAT c; +} mgga_x_tb09_params; + +static FLOAT br89_gamma = 0.8; + + +static void +mgga_x_tb09_init(XC(func_type) *p) +{ + assert(p->params == NULL); + + switch(p->info->number){ + case XC_MGGA_X_BR89: p->func = 0; break; + case XC_MGGA_X_BJ06: p->func = 1; break; + case XC_MGGA_X_TB09: p->func = 2; break; + case XC_MGGA_X_RPP09: p->func = 3; break; + } + + p->params = malloc(sizeof(mgga_x_tb09_params)); + + /* value of c in Becke-Johnson */ + XC(mgga_x_tb09_set_params)(p, 1.0); +} + + +void XC(mgga_x_tb09_set_params)(XC(func_type) *p, FLOAT c) +{ + mgga_x_tb09_params *params; + + assert(p != NULL && p->params != NULL); + params = (mgga_x_tb09_params *) (p->params); + + params->c = c; +} + +/* This code follows the inversion done in the PINY_MD package */ +static FLOAT +br_newt_raph(FLOAT a, FLOAT tol, FLOAT * res, int *ierr) +{ + int count; + FLOAT x, f; + static int max_iter = 50; + + *ierr = 1; + if(a == 0.0) + return 0.0; + + /* starting point */ + x = (a < 0.0) ? -1.0 : 1.0; + + count = 0; + do { + FLOAT arg, eee, xm2, fp; + + xm2 = x - 2.0; + arg = 2.0*x/3.0; + eee = EXP(-arg)/a; + + f = x*eee - xm2; + fp = eee*(1.0 - 2.0/3.0*x) - 1.0; + + x -= f/fp; + x = ABS(x); + + count ++; + *res = ABS(f); + } while((*res > tol) && (count < max_iter)); + + if(count == max_iter) *ierr=0; + return x; +} + +static FLOAT +br_bisect(FLOAT a, FLOAT tol, int *ierr) { + int count; + FLOAT f, x, x1, x2; + static int max_iter = 500; + + *ierr = 1; + if(a == 0.0) + return 0.0; + + /* starting interval */ + if(a > 0.0) { + x1 = 2.0 + tol; + x2 = 1.0/a + 2.0; + }else{ + x2 = 2.0 - tol; + x1 = 0.0; + } + + /* bisection */ + count = 0; + do{ + FLOAT arg, eee, xm2; + x = 0.5*(x1 + x2); + xm2 = x - 2.0; + arg = 2.0*x/3.0; + eee = EXP(-arg); + f = x*eee - a*xm2; + + if(f > 0.0) x1 = x; + if(f < 0.0) x2 = x; + + count++; + }while((ABS(f) > tol) && (count < max_iter)); + + if(count == max_iter) *ierr=0; + return x; +} + +FLOAT XC(mgga_x_br89_get_x)(FLOAT Q) +{ + FLOAT rhs, br_x, tol, res; + int ierr; + +#ifdef SINGLE_PRECISION + tol = 1e-6; +#else + tol = 5e-12; +#endif + + /* build right-hand side of the non-linear equation + Remember we use a different definition of tau */ + rhs = 2.0/3.0*POW(M_PI, 2.0/3.0)/Q; + + br_x = br_newt_raph(rhs, tol, &res, &ierr); + if(ierr == 0){ + br_x = br_bisect(rhs, tol, &ierr); + if(ierr == 0){ + fprintf(stderr, + "Warning: Convergence not reached in Becke-Roussel functional\n" + "For rhs = %e (residual = %e)\n", rhs, res); + } + } + + return br_x; +} + +static void +func(const XC(func_type) *pt, XC(mgga_work_x_t) *r) +{ + FLOAT Q, br_x, v_BR, dv_BRdbx, d2v_BRdbx2, dxdQ, d2xdQ2, ff, dffdx, d2ffdx2; + FLOAT cnst, c_TB09, c_HEG, exp1, exp2; + + Q = (r->u - 4.0*br89_gamma*r->t + 0.5*br89_gamma*r->x*r->x)/6.0; + if(ABS(Q) < MIN_DENS) Q = (Q < 0) ? -MIN_DENS : MIN_DENS; + + br_x = XC(mgga_x_br89_get_x)(Q); + + cnst = -2.0*CBRT(M_PI)/X_FACTOR_C; + exp1 = EXP(br_x/3.0); + exp2 = EXP(-br_x); + + v_BR = (ABS(br_x) > pt->info->min_tau) ? + exp1*(1.0 - exp2*(1.0 + br_x/2.0))/br_x : + 1.0/2.0 + br_x/6.0 - br_x*br_x/18.0; + + v_BR *= cnst; + + if(pt->func == 0){ /* XC_MGGA_X_BR89 */ + /* we have also to include the factor 1/2 from Eq. (9) */ + r->f = - v_BR / 2.0; + }else{ /* XC_MGGA_X_BJ06 & XC_MGGA_X_TB09 */ + r->f = 0.0; + } + + if(r->order < 1) return; + + if(pt->func == 0 || r->order > 1){ + dv_BRdbx = (ABS(br_x) > pt->info->min_tau) ? + (3.0 + br_x*(br_x + 2.0) + (br_x - 3.0)/exp2) / (3.0*exp1*exp1*br_x*br_x) : + 1.0/6.0 - br_x/9.0; + dv_BRdbx *= cnst; + + ff = br_x*EXP(-2.0/3.0*br_x)/(br_x - 2); + dffdx = ff*(-2.0/3.0 + 1.0/br_x - 1.0/(br_x - 2.0)); + dxdQ = -ff/(Q*dffdx); + } + + if(pt->func == 0){ /* XC_MGGA_X_BR89 */ + r->dfdx = -r->x*br89_gamma*dv_BRdbx*dxdQ/12.0; + r->dfdt = 4.0*br89_gamma*dv_BRdbx*dxdQ/12.0; + r->dfdu = -dv_BRdbx*dxdQ/12.0; + + }else{ + assert(pt->params != NULL); + c_TB09 = ((mgga_x_tb09_params *) (pt->params))->c; + + r->dfdrs = -c_TB09*v_BR; + + c_HEG = (3.0*c_TB09 - 2.0)*SQRT(5.0/12.0)/(X_FACTOR_C*M_PI); + + if(pt->func == 1 || pt->func == 2) /* XC_MGGA_X_BJ0 & XC_MGGA_X_TB09 */ + r->dfdrs -= c_HEG*SQRT(2.0*r->t); + else /* XC_MGGA_X_RPP09 */ + r->dfdrs -= c_HEG*SQRT(max(2.0*r->t - r->x*r->x/4.0, 0.0)); + + r->dfdrs /= -r->rs; /* due to the definition of dfdrs */ + } + + if(r->order < 2) return; + + if(pt->func == 0 || r->order > 2){ + d2v_BRdbx2 = (ABS(br_x) > pt->info->min_tau) ? + ((18.0 + (br_x - 6.0)*br_x)/exp2 - 2.0*(9.0 + br_x*(6.0 + br_x*(br_x + 2.0)))) + / (9.0*exp1*exp1*br_x*br_x*br_x) : + -1.0/9.0; + d2v_BRdbx2 *= cnst; + + d2ffdx2 = dffdx*dffdx/ff + ff*(-1.0/(br_x*br_x) + 1.0/((br_x - 2.0)*(br_x - 2.0))); + d2xdQ2 = -(2.0*dxdQ/Q + d2ffdx2*dxdQ*dxdQ/dffdx); + } + + if(pt->func == 0){ /* XC_MGGA_X_BR89 */ + FLOAT aux1 = d2v_BRdbx2*dxdQ*dxdQ + dv_BRdbx*d2xdQ2; + + r->d2fdx2 = -(aux1*br89_gamma*r->x*r->x/6.0 + dv_BRdbx*dxdQ)*br89_gamma/12.0; + r->d2fdxt = aux1*br89_gamma*br89_gamma*r->x/18.0; + r->d2fdxu = -aux1*br89_gamma*r->x/72.0; + r->d2fdt2 = -aux1*2.0*br89_gamma*br89_gamma/9.0; + r->d2fdtu = aux1*br89_gamma/18.0; + r->d2fdu2 = -aux1/72.0; + }else{ + + } + +} + +#include "work_mgga_x.c" + +const XC(func_info_type) XC(func_info_mgga_x_br89) = { + XC_MGGA_X_BR89, + XC_EXCHANGE, + "Becke-Roussel 89", + XC_FAMILY_MGGA, + "AD Becke and MR Roussel, Phys. Rev. A 39, 3761 (1989)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + NULL, NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_x, +}; + +const XC(func_info_type) XC(func_info_mgga_x_bj06) = { + XC_MGGA_X_BJ06, + XC_EXCHANGE, + "Becke & Johnson 06", + XC_FAMILY_MGGA, + "AD Becke and ER Johnson, J. Chem. Phys. 124, 221101 (2006)", + XC_FLAGS_3D | XC_FLAGS_HAVE_VXC, + 1e-22, 1e-32, 1e-22, 1e-22, + mgga_x_tb09_init, + NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_x, +}; + +const XC(func_info_type) XC(func_info_mgga_x_tb09) = { + XC_MGGA_X_TB09, + XC_EXCHANGE, + "Tran & Blaha 09", + XC_FAMILY_MGGA, + "F Tran and P Blaha, Phys. Rev. Lett. 102, 226401 (2009)", + XC_FLAGS_3D | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + mgga_x_tb09_init, + NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_x, +}; + +const XC(func_info_type) XC(func_info_mgga_x_rpp09) = { + XC_MGGA_X_RPP09, + XC_EXCHANGE, + "Rasanen, Pittalis & Proetto 09", + XC_FAMILY_MGGA, + "E Rasanen, S Pittalis & C Proetto, J. Chem. Phys. 132, 044112 (2010)", + XC_FLAGS_3D | XC_FLAGS_HAVE_VXC, + 1e-22, 1e-22, 1e-22, 1e-22, + mgga_x_tb09_init, + NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_x, +}; diff --git a/libxc/src/mgga_x_gvt4.c b/libxc/src/mgga_x_gvt4.c new file mode 100644 index 000000000..c902d0843 --- /dev/null +++ b/libxc/src/mgga_x_gvt4.c @@ -0,0 +1,84 @@ +/* + Copyright (C) 2008 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_X_GVT4 204 /* GVT4 from Van Voorhis and Scuseria */ + +/* calculate h and h derivatives with respect to rho, grho and tau: Equation (5) */ +void XC(mgga_x_gvt4_func)(int order, FLOAT x, FLOAT z, FLOAT alpha, const FLOAT *d, + FLOAT *h, FLOAT *dhdx, FLOAT *dhdz) +{ + FLOAT gam, gam2, x2, dhdgam; + FLOAT n1, n2, n3; + + x2 = x*x; + gam = 1.0 + alpha*(x2 + z); + gam2 = gam*gam; + + n1 = d[0]; + n2 = d[1]*x2 + d[2]*z; + n3 = d[3]*x2*x2 + d[4]*x2*z + d[5]*z*z; + + *h = n1/gam + n2/gam2 + n3/(gam*gam2); + + if(order < 1) return; + + dhdgam = -n1/gam2 - 2.0*n2/(gam*gam2) - 3.0*n3/(gam2*gam2); + + *dhdx = 2.0*d[1]*x/gam2 + (4.0*d[3]*x*x2 + 2.0*d[4]*x*z)/(gam*gam2) + + dhdgam*(2.0*alpha*x); + *dhdz = d[2]/gam2 + (d[4]*x2 + 2.0*d[5]*z)/(gam*gam2) + + dhdgam*alpha; +} + +static void +func(const XC(func_type) *pt, XC(mgga_work_x_t) *r) +{ + static const FLOAT abcd[6] = + {-9.800683e-01, -3.556788e-03, 6.250326e-03, -2.354518e-05, -1.282732e-04, 3.574822e-04}; + static const FLOAT alpha = 0.00186726; + + XC(mgga_x_gvt4_func)(r->order, r->x, 2.0*(r->t - K_FACTOR_C), alpha, abcd, &r->f, &r->dfdx, &r->dfdt); + + r->f /= -X_FACTOR_C; + + if(r->order < 1) return; + + r->dfdx /= -X_FACTOR_C; + r->dfdt /= -X_FACTOR_C/2.0; +} + +#include "work_mgga_x.c" + +const XC(func_info_type) XC(func_info_mgga_x_gvt4) = { + XC_MGGA_X_GVT4, + XC_EXCHANGE, + "GVT4 (X part of VSXC)", + XC_FAMILY_MGGA, + "T Van Voorhis and GE Scuseria, JCP 109, 400 (1998)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + NULL, NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_x, +}; diff --git a/libxc/src/mgga_x_lta.c b/libxc/src/mgga_x_lta.c new file mode 100644 index 000000000..c4861ec37 --- /dev/null +++ b/libxc/src/mgga_x_lta.c @@ -0,0 +1,59 @@ +/* + Copyright (C) 2006-2008 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +/* Local tau approximation */ + +#define XC_MGGA_X_LTA 201 /* Local tau approximation of Ernzerhof & Scuseria */ + +static void +func(const XC(func_type) *pt, XC(mgga_work_x_t) *r) +{ + /* POW(10.0/(3.0*POW(6.0*M_PI*M_PI, 2.0/3.0)), 4.0/5.0) = (2/C_F)^(4/5) */ + const FLOAT a1 = 0.297163728291293581339216378935; + FLOAT t; + + t = r->t; /* we use a different definition of t */ + r->f = a1*POW(t, 4.0/5.0); + + if(r->order < 1) return; + + r->dfdt = (t > 1e-10) ? a1*4.0/5.0*POW(t, -1.0/5.0) : 0.0; + + if(r->order < 2) return; + + r->d2fdt2 = (t > 1e-10) ? -a1*4.0/25.0*POW(t, -6.0/5.0) : 0.0; +} + +#include "work_mgga_x.c" + +const XC(func_info_type) XC(func_info_mgga_x_lta) = { + XC_MGGA_X_LTA, + XC_EXCHANGE, + "Local tau approximation", + XC_FAMILY_MGGA, + "M Ernzerhof and G Scuseria, J. Chem. Phys. 111, 911 (1999)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + NULL, NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_x, +}; diff --git a/libxc/src/mgga_x_m05.c b/libxc/src/mgga_x_m05.c new file mode 100644 index 000000000..ca4ac5dd0 --- /dev/null +++ b/libxc/src/mgga_x_m05.c @@ -0,0 +1,154 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_X_M05 214 /* M05 functional of Minnesota */ +#define XC_MGGA_X_M05_2X 215 /* M05-2X functional of Minnesota */ +#define XC_MGGA_X_M06_2X 218 /* M06-2X functional of Minnesota */ + +static const FLOAT a_m05[12] = + {1.0, 0.08151, -0.43956, -3.22422, 2.01819, 8.79431, -0.00295, + 9.82029, -4.82351, -48.17574, 3.64802, 34.02248}; + +static const FLOAT a_m05_2x[12] = + {1.0, -0.56833, -1.30057, 5.50070, 9.06402, -32.21075, -23.73298, + 70.22996, 29.88614, -60.25778, -13.22205, 15.23694}; + +static const FLOAT a_m06_2x[12] = + {4.600000e-01, -2.206052e-01, -9.431788e-02, 2.164494e+00, -2.556466e+00, -1.422133e+01, + 1.555044e+01, 3.598078e+01, -2.722754e+01, -3.924093e+01, 1.522808e+01, 1.522227e+01}; + +typedef struct{ + int n; + const FLOAT *a; +} mgga_x_m05_params; + + +static void +mgga_x_m05_init(XC(func_type) *p) +{ + mgga_x_m05_params *params; + + assert(p != NULL); + + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(1*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_GGA_X_PBE, p->nspin); + + assert(p->params == NULL); + p->params = malloc(sizeof(mgga_x_m05_params)); + params = (mgga_x_m05_params *) (p->params); + + switch(p->info->number){ + case XC_MGGA_X_M05: + params->n = 12; + params->a = a_m05; + break; + case XC_MGGA_X_M05_2X: + params->n = 12; + params->a = a_m05_2x; + break; + case XC_MGGA_X_M06_2X: + params->n = 12; + params->a = a_m06_2x; + break; + default: + fprintf(stderr, "Internal error in mgga_x_m05\n"); + exit(1); + } +} + + +static void +func(const XC(func_type) *pt, XC(mgga_work_x_t) *r) +{ + mgga_x_m05_params *params; + + FLOAT e_f, e_dfdx, e_d2fdx2; + FLOAT fw, dfwdt; + + assert(pt != NULL && pt->params != NULL); + params = (mgga_x_m05_params *) (pt->params); + + XC(gga_x_pbe_enhance)(pt->func_aux[0], r->order, r->x, &e_f, &e_dfdx, &e_d2fdx2, NULL); + + XC(mgga_series_w)(r->order, params->n, params->a, r->t, &fw, &dfwdt); + + r->f = e_f*fw; + + if(r->order < 1) return; + + r->dfdx = e_dfdx*fw; + r->dfdt = e_f*dfwdt; + r->dfdu = 0.0; + + if(r->order < 2) return; + +} + + +#include "work_mgga_x.c" + + +XC(func_info_type) XC(func_info_mgga_x_m05) = { + XC_MGGA_X_M05, + XC_EXCHANGE, + "M05 functional of Minnesota", + XC_FAMILY_MGGA, + "Y Zhao, NE Schultz, and DG Truhlar, J. Chem. Phys. 123, 161103 (2005)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_x_m05_init, + NULL, NULL, NULL, + work_mgga_x, +}; + + +XC(func_info_type) XC(func_info_mgga_x_m05_2x) = { + XC_MGGA_X_M05_2X, + XC_EXCHANGE, + "M05-2X functional of Minnesota", + XC_FAMILY_MGGA, + "Y Zhao, NE Schultz, and DG Truhlar, J. Chem. Theory Comput. 2, 364 (2006)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_x_m05_init, + NULL, NULL, NULL, + work_mgga_x, +}; + +const XC(func_info_type) XC(func_info_mgga_x_m06_2x) = { + XC_MGGA_X_M06_2X, + XC_EXCHANGE, + "M06-2X functional of Minnesota", + XC_FAMILY_MGGA, + "Y Zhao and DG Truhlar, Theor. Chem. Acc. 120, 215 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + mgga_x_m05_init, + NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_x, +}; diff --git a/libxc/src/mgga_x_m06l.c b/libxc/src/mgga_x_m06l.c new file mode 100644 index 000000000..ffc32d5fc --- /dev/null +++ b/libxc/src/mgga_x_m06l.c @@ -0,0 +1,185 @@ +/* + Copyright (C) 2008 Lara Ferrigni, Georg Madsen, M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_X_M06_L 203 /* M06-Local functional of Minnesota */ +#define XC_MGGA_X_M06_HF 216 /* M06-HF functional of Minnesota */ +#define XC_MGGA_X_M06 217 /* M06 functional of Minnesota */ + +static const FLOAT a_m06l[12] = { + 0.3987756, 0.2548219, 0.3923994, -2.103655, -6.302147, 10.97615, + 30.97273, -23.18489, -56.73480, 21.60364, 34.21814, -9.049762 +}; +static const FLOAT d_m06l[6] = {0.6012244, 0.004748822, -0.008635108, -0.000009308062, 0.00004482811, 0.0}; + +static const FLOAT a_m06hf[12] = { + 1.179732e-01, -1.066708e+00, -1.462405e-01, 7.481848e+00, 3.776679e+00, -4.436118e+01, + -1.830962e+01, 1.003903e+02, 3.864360e+01, -9.806018e+01, -2.557716e+01, 3.590404e+01 +}; +static const FLOAT d_m06hf[6] = {-1.179732e-01, -2.500000e-03, -1.180065e-02, 0.0, 0.0, 0.0}; + +static const FLOAT a_m06[12] = { + 5.877943e-01, -1.371776e-01, 2.682367e-01, -2.515898e+00, -2.978892e+00, 8.710679e+00, + 1.688195e+01, -4.489724e+00, -3.299983e+01, -1.449050e+01, 2.043747e+01, 1.256504e+01 +}; +static const FLOAT d_m06[6] = {1.422057e-01, 7.370319e-04, -1.601373e-02, 0.0, 0.0, 0.0}; + +typedef struct{ + const FLOAT *a, *d; +} mgga_x_m06l_params; + + +static void +mgga_x_m06l_init(XC(func_type) *p) +{ + mgga_x_m06l_params *params; + + assert(p!=NULL && p->params == NULL); + p->params = malloc(sizeof(mgga_x_m06l_params)); + params = (mgga_x_m06l_params *)p->params; + + switch(p->info->number){ + case XC_MGGA_X_M06_L: + params->a = a_m06l; + params->d = d_m06l; + break; + case XC_MGGA_X_M06_HF: + params->a = a_m06hf; + params->d = d_m06hf; + break; + case XC_MGGA_X_M06: + params->a = a_m06; + params->d = d_m06; + break; + default: + fprintf(stderr, "Internal error in mgga_x_m06l\n"); + exit(1); + } + + p->n_func_aux = 1; + p->func_aux = (XC(func_type) **) malloc(sizeof(XC(func_type) *)*p->n_func_aux); + p->func_aux[0] = (XC(func_type) *) malloc(sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_GGA_X_PBE, p->nspin); +} + + +/* Eq. (8) */ +void +XC(mgga_series_w)(int order, int n, const FLOAT *a, FLOAT t, FLOAT *fw, FLOAT *dfwdt) +{ + FLOAT w, w_den, wp; + int i; + + w_den = K_FACTOR_C + t; + w = (K_FACTOR_C - t)/w_den; + + *fw = 0.0; + if(order>0) *dfwdt = 0.0; + wp = 1.0; + for(i=0; i0) *dfwdt += i*a[i]*wp; + + wp *= w; + } + if (order>0){ + *dfwdt /= w; + *dfwdt *= -2.0*K_FACTOR_C/(w_den*w_den); + } +} + + +static void +func(const XC(func_type) *pt, XC(mgga_work_x_t) *r) +{ + const FLOAT alpha = 0.00186726; /* set alpha of Eq. (4) */ + + mgga_x_m06l_params *params; + FLOAT f_pbe, dfdx_pbe; + FLOAT h, dhdx, dhdz, fw, dfwdt; + + assert(pt!=NULL && pt->params != NULL); + params = (mgga_x_m06l_params *)pt->params; + + XC(gga_x_pbe_enhance)(pt->func_aux[0], r->order, r->x, &f_pbe, &dfdx_pbe, NULL, NULL); + + XC(mgga_series_w)(r->order, 12, params->a, r->t, &fw, &dfwdt); + + /* there is a factor if 2 in the definition of z, as in Theor. Chem. Account 120, 215 (2008) */ + XC(mgga_x_gvt4_func)(r->order, r->x, 2.0*(r->t - K_FACTOR_C), alpha, params->d, &h, &dhdx, &dhdz); + + /* A MINUS was missing in Eq. (7) of the paper */ + r->f = f_pbe*fw + h; + + if(r->order < 1) return; + + r->dfdx = dfdx_pbe*fw + dhdx; + r->dfdt = f_pbe*dfwdt + 2.0*dhdz; +} + + +#include "work_mgga_x.c" + +const XC(func_info_type) XC(func_info_mgga_x_m06_l) = { + XC_MGGA_X_M06_L, + XC_EXCHANGE, + "M06-Local functional of Minnesota", + XC_FAMILY_MGGA, + "Y Zhao and DG Truhlar, JCP 125, 194101 (2006)\n" + "Y Zhao and DG Truhlar, Theor. Chem. Account 120, 215 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + mgga_x_m06l_init, + NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_x, +}; + +const XC(func_info_type) XC(func_info_mgga_x_m06_hf) = { + XC_MGGA_X_M06_HF, + XC_EXCHANGE, + "M06-HF functional of Minnesota", + XC_FAMILY_MGGA, + "Y Zhao and DG Truhlar, J. Phys. Chem. A 110, 13126 (2006)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + mgga_x_m06l_init, + NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_x, +}; + +const XC(func_info_type) XC(func_info_mgga_x_m06) = { + XC_MGGA_X_M06, + XC_EXCHANGE, + "M06 functional of Minnesota", + XC_FAMILY_MGGA, + "Y Zhao and DG Truhlar, Theor. Chem. Acc. 120, 215 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + mgga_x_m06l_init, + NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_x, +}; diff --git a/libxc/src/mgga_x_m08.c b/libxc/src/mgga_x_m08.c new file mode 100644 index 000000000..7f5e100aa --- /dev/null +++ b/libxc/src/mgga_x_m08.c @@ -0,0 +1,274 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_X_M08_HX 219 /* M08-HX functional of Minnesota */ +#define XC_MGGA_X_M08_SO 220 /* M08-SO functional of Minnesota */ +#define XC_HYB_MGGA_X_M11 225 /* M11 functional of Minnesota */ +#define XC_MGGA_X_M11_L 226 /* M11-L functional of Minnesota */ + +static const FLOAT a_m08_hx[12] = { + 1.3340172e+00, -9.4751087e+00, -1.2541893e+01, 9.1369974e+00, 3.4717204e+01, 5.8831807e+01, + 7.1369574e+01, 2.3312961e+01, 4.8314679e+00, -6.5044167e+00, -1.4058265e+01, 1.2880570e+01 +}; +static const FLOAT b_m08_hx[12] = { + -8.5631823e-01, 9.2810354e+00, 1.2260749e+01, -5.5189665e+00, -3.5534989e+01, -8.2049996e+01, + -6.8586558e+01, 3.6085694e+01, -9.3740983e+00, -5.9731688e+01, 1.6587868e+01, 1.3993203e+01 +}; + +static const FLOAT a_m08_so[12] = { + -3.4888428e-01, -5.8157416e+00, 3.7550810e+01, 6.3727406e+01, -5.3742313e+01, -9.8595529e+01, + 1.6282216e+01, 1.7513468e+01, -6.7627553e+00, 1.1106658e+01, 1.5663545e+00, 8.7603470e+00 +}; +static const FLOAT b_m08_so[12] = { + 7.8098428e-01, 5.4538178e+00, -3.7853348e+01, -6.2295080e+01, 4.6713254e+01, 8.7321376e+01, + 1.6053446e+01, 2.0126920e+01, -4.0343695e+01, -5.8577565e+01, 2.0890272e+01, 1.0946903e+01 +}; + +static const FLOAT a_m11[12] = { + -0.18399900e+00, -1.39046703e+01, 1.18206837e+01, 3.10098465e+01, -5.19625696e+01, 1.55750312e+01, + -6.94775730e+00, -1.58465014e+02, -1.48447565e+00, 5.51042124e+01, -1.34714184e+01, 0.00000000e+00 +}; +static const FLOAT b_m11[12] = { + 0.75599900e+00, 1.37137944e+01, -1.27998304e+01, -2.93428814e+01, 5.91075674e+01, -2.27604866e+01, + -1.02769340e+01, 1.64752731e+02, 1.85349258e+01, -5.56825639e+01, 7.47980859e+00, 0.00000000e+00 +}; + +static const FLOAT a_m11_l[12] = { + 8.121131e-01, 1.738124e+01, 1.154007e+00, 6.869556e+01, 1.016864e+02, -5.887467e+00, + 4.517409e+01, -2.773149e+00, -2.617211e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00 +}; +static const FLOAT b_m11_l[12] = { + 1.878869e-01, -1.653877e+01, 6.755753e-01, -7.567572e+01, -1.040272e+02, 1.831853e+01, + -5.573352e+01, -3.520210e+00, 3.724276e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00 +}; +static const FLOAT c_m11_l[12] = { + -4.386615e-01, -1.214016e+02, -1.393573e+02, -2.046649e+00, 2.804098e+01, -1.312258e+01, + -6.361819e+00, -8.055758e-01, 3.736551e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00 +}; +static const FLOAT d_m11_l[12] = { + 1.438662e+00, 1.209465e+02, 1.328252e+02, 1.296355e+01, 5.854866e+00, -3.378162e+00, + -4.423393e+01, 6.844475e+00, 1.949541e+01, 0.000000e+00, 0.000000e+00, 0.000000e+00 +}; + +typedef struct{ + const FLOAT *a, *b; + int LC; +} mgga_x_m08_params; + + +static void +mgga_x_m08_init(XC(func_type) *p) +{ + mgga_x_m08_params *params; + + assert(p != NULL); + + p->n_func_aux = 2; + p->func_aux = (XC(func_type) **) malloc(2*sizeof(XC(func_type) *)); + p->func_aux[0] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + p->func_aux[1] = (XC(func_type) *) malloc( sizeof(XC(func_type))); + + XC(func_init)(p->func_aux[0], XC_GGA_X_PBE, p->nspin); + XC(func_init)(p->func_aux[1], XC_GGA_X_RPBE, p->nspin); + + XC(gga_x_pbe_set_params) (p->func_aux[0], 0.804, 0.21951); + XC(gga_x_rpbe_set_params) (p->func_aux[1], 0.552, 10.0/81.0); + + assert(p->params == NULL); + p->params = malloc(sizeof(mgga_x_m08_params)); + params = (mgga_x_m08_params *) (p->params); + + switch(p->info->number){ + case XC_MGGA_X_M08_HX: + params->a = a_m08_hx; + params->b = b_m08_hx; + params->LC = 0; + break; + case XC_MGGA_X_M08_SO: + params->a = a_m08_so; + params->b = b_m08_so; + params->LC = 0; + break; + case XC_HYB_MGGA_X_M11: + params->a = a_m11; + params->b = b_m11; + params->LC = 1; + p->cam_alpha = 1.0; + p->cam_beta = -(1.0 - 0.428); + p->cam_omega = 0.25; + break; + case XC_MGGA_X_M11_L: + params->a = a_m11_l; + params->b = b_m11_l; + params->LC = 1; + break; + default: + fprintf(stderr, "Internal error in mgga_x_m08\n"); + exit(1); + } +} + + +static void +func(const XC(func_type) *pt, XC(mgga_work_c_t) *r) +{ + const FLOAT sign[2] = {1.0, -1.0}; + mgga_x_m08_params *params; + + int is; + FLOAT ep_f, ep_dfdx, ep_d2fdx2, er_f, er_dfdx, er_d2fdx2; + FLOAT fw1, fw2, fw3, fw4, dfw1dt, dfw2dt, dfw3dt, dfw4dt; + FLOAT cnst_rs, opz, opz13, rss, ex, drssdrs, drssdz, dexdrss, dexdz; + FLOAT a_cnst, f_aa, df_aa; + + assert(pt != NULL && pt->params != NULL); + params = (mgga_x_m08_params *) (pt->params); + + cnst_rs = CBRT(4.0*M_PI/3.0); + + r->f = 0.0; + if(r->order >= 1) + r->dfdrs = r->dfdz = r->dfdxt = r->dfdxs[0] = r->dfdxs[1] = r->dfdts[0] = r->dfdts[1] = 0.0; + + for(is = 0; is < 2; is++){ + opz = 1.0 + sign[is]*r->zeta; + if(opz < pt->info->min_zeta) continue; + + opz13 = CBRT(opz); + rss = r->rs*M_CBRT2/opz13; + + XC(gga_x_pbe_enhance) (pt->func_aux[0], r->order, r->xs[is], &ep_f, &ep_dfdx, &ep_d2fdx2, NULL); + XC(gga_x_rpbe_enhance)(pt->func_aux[1], r->order, r->xs[is], &er_f, &er_dfdx, &er_d2fdx2, NULL); + + XC(mgga_series_w)(r->order, 12, params->a, r->ts[is], &fw1, &dfw1dt); + XC(mgga_series_w)(r->order, 12, params->b, r->ts[is], &fw2, &dfw2dt); + + if(pt->info->number == XC_MGGA_X_M11_L){ + XC(mgga_series_w)(r->order, 12, c_m11_l, r->ts[is], &fw3, &dfw3dt); + XC(mgga_series_w)(r->order, 12, d_m11_l, r->ts[is], &fw4, &dfw4dt); + } + + if(params->LC == 1){ + a_cnst = CBRT(2.0/(9.0*M_PI))*pt->cam_omega/2.0; + XC(lda_x_attenuation_function)(XC_RSF_ERF, r->order, a_cnst*rss, &f_aa, &df_aa, NULL, NULL); + + /* the rest of the SR is evaluated at the HF level */ + if(pt->info->number == XC_HYB_MGGA_X_M11){ + f_aa *= -pt->cam_beta; + df_aa *= -pt->cam_beta; + } + + df_aa *= a_cnst; + }else{ + f_aa = 1.0; + df_aa = 0.0; + } + + ex = -X_FACTOR_C*opz/(2.0*cnst_rs*rss); + r->f += ex*f_aa*(ep_f*fw1 + er_f*fw2); + + if(pt->info->number == XC_MGGA_X_M11_L){ + r->f += ex*(1.0 - f_aa)*(ep_f*fw3 + er_f*fw4); + } + + if(r->order < 1) continue; + + drssdrs = M_CBRT2/opz13; + drssdz = -sign[is]*rss/(3.0*opz); + + dexdrss = -ex/rss; + dexdz = sign[is]*ex/opz; + + r->dfdrs += (dexdrss*f_aa + ex*df_aa)*drssdrs*(ep_f*fw1 + er_f*fw2); + r->dfdz += (dexdz*f_aa + (dexdrss*f_aa + ex*df_aa)*drssdz) *(ep_f*fw1 + er_f*fw2); + r->dfdxs[is] = ex*f_aa*(ep_dfdx*fw1 + er_dfdx*fw2); + r->dfdts[is] = ex*f_aa*(ep_f*dfw1dt + er_f*dfw2dt); + + if(pt->info->number == XC_MGGA_X_M11_L){ + r->dfdrs += (dexdrss*(1.0 - f_aa) - ex*df_aa)*drssdrs*(ep_f*fw3 + er_f*fw4); + r->dfdz += (dexdz*(1.0 - f_aa) + (dexdrss*(1.0 - f_aa) - ex*df_aa)*drssdz) *(ep_f*fw3 + er_f*fw4); + r->dfdxs[is] += ex*(1.0 - f_aa)*(ep_dfdx*fw3 + er_dfdx*fw4); + r->dfdts[is] += ex*(1.0 - f_aa)*(ep_f*dfw3dt + er_f*dfw4dt); + } + + + if(r->order < 2) continue; + } +} + + +#include "work_mgga_c.c" + + +XC(func_info_type) XC(func_info_mgga_x_m08_hx) = { + XC_MGGA_X_M08_HX, + XC_EXCHANGE, + "M08-HX functional of Minnesota", + XC_FAMILY_MGGA, + "Y Zhao and DG Truhlar, J. Chem. Theory Comput. 4, 1849-1868 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_x_m08_init, + NULL, NULL, NULL, + work_mgga_c, +}; + +XC(func_info_type) XC(func_info_mgga_x_m08_so) = { + XC_MGGA_X_M08_SO, + XC_EXCHANGE, + "M08-SO functional of Minnesota", + XC_FAMILY_MGGA, + "Y Zhao and DG Truhlar, J. Chem. Theory Comput. 4, 1849-1868 (2008)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_x_m08_init, + NULL, NULL, NULL, + work_mgga_c, +}; + +XC(func_info_type) XC(func_info_hyb_mgga_x_m11) = { + XC_HYB_MGGA_X_M11, + XC_EXCHANGE, + "M11 functional of Minnesota", + XC_FAMILY_MGGA, + "R Peverati, and DG Truhlar, J. Phys. Chem. Lett. 2, 2810 (2011)", + XC_FLAGS_3D | XC_FLAGS_HYB_CAM | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_x_m08_init, + NULL, NULL, NULL, + work_mgga_c, +}; + +XC(func_info_type) XC(func_info_mgga_x_m11_l) = { + XC_MGGA_X_M11_L, + XC_EXCHANGE, + "M11-L functional of Minnesota", + XC_FAMILY_MGGA, + "R Peverati, and DG Truhlar, J. Phys. Chem. Lett. 3, 117 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_x_m08_init, + NULL, NULL, NULL, + work_mgga_c, +}; diff --git a/libxc/src/mgga_x_mk00.c b/libxc/src/mgga_x_mk00.c new file mode 100644 index 000000000..bcc6b7a81 --- /dev/null +++ b/libxc/src/mgga_x_mk00.c @@ -0,0 +1,103 @@ +/* + Copyright (C) 2006-2008 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +/* Local tau approximation */ + +#define XC_MGGA_X_MK00 230 /* Exchange for accurate virtual orbital energies */ +#define XC_MGGA_X_MK00B 243 /* Exchange for accurate virtual orbital energies (v. B) */ + +static void +func(const XC(func_type) *pt, XC(mgga_work_x_t) *r) +{ + FLOAT cnst, den, den2, den3; + + cnst = 3.0*M_PI/X_FACTOR_C; + + den = 2.0*r->t - r->u/4.0; + + if(ABS(den) < pt->info->min_tau){ + r->f = 0.0; + if(r->order >= 1) r->dfdt = r->dfdu = 0.0; + if(r->order >= 2) r->d2fdt2 = r->d2fdtu = r->d2fdu2 = 0.0; + return; + } + + r->f = cnst/den; + + if(r->order < 1) return; + + den2 = den*den; + + r->dfdx = 0.0; + r->dfdt = -2.0*cnst/den2; + r->dfdu = cnst/(4.0*den2); + + if(r->order < 2) return; + + den3 = den2*den; + + r->d2fdx2 = 0.0; + r->d2fdxt = 0.0; + r->d2fdxu = 0.0; + r->d2fdt2 = 8.0*cnst/den3; + r->d2fdtu = -cnst/den3; + r->d2fdu2 = cnst/(8.0*den3); +} + +#include "work_mgga_x.c" + +const XC(func_info_type) XC(func_info_mgga_x_mk00) = { + XC_MGGA_X_MK00, + XC_EXCHANGE, + "Exchange for accurate virtual orbital energies", + XC_FAMILY_MGGA, + "FR Manby and PJ Knowles, J. Chem. Phys. 112, 7002 (2000)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + NULL, NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_x, +}; + + +static void +mgga_x_mk00b_init(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_GGA_X_B88, XC_MGGA_X_MK00}; + static FLOAT funcs_coef[2] = {1.0, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + + XC(gga_x_b88_set_params)(p->func_aux[0], 0.0016, 6.0); +} + +const XC(func_info_type) XC(func_info_mgga_x_mk00b) = { + XC_MGGA_X_MK00B, + XC_EXCHANGE, + "Exchange for accurate virtual orbital energies (v. B)", + XC_FAMILY_MGGA, + "FR Manby and PJ Knowles, J. Chem. Phys. 112, 7002 (2000)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + mgga_x_mk00b_init, + NULL, NULL, NULL, NULL, +}; diff --git a/libxc/src/mgga_x_mn12.c b/libxc/src/mgga_x_mn12.c new file mode 100644 index 000000000..32a29d3e5 --- /dev/null +++ b/libxc/src/mgga_x_mn12.c @@ -0,0 +1,191 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_X_MN12_L 227 /* MN12-L functional from Minnesota */ +#define XC_MGGA_X_MN12_SX 228 /* MN12-SX functional from Minnesota */ + +/* the ordering is +CC000 [ 0], CC001 [ 1], CC002 [ 2], CC003 [ 3], CC004 [ 4], CC005 [ 5] +CC010 [ 6], CC011 [ 7], CC012 [ 8], CC013 [ 9], CC014 [10], +CC020 [11], CC021 [12], CC022 [13], CC023 [14], +CC030 [15], CC031 [16], CC032 [17], +CC100 [18], CC101 [19], CC102 [20], CC103 [21], CC104 [22] +CC110 [23], CC111 [24], CC112 [25], CC113 [26], +CC120 [27], CC121 [28], CC122 [29], +CC200 [30], CC201 [31], CC202 [32], CC203 [33], +CC210 [34], CC211 [35], CC212 [36], +CC300 [37], CC301 [38], CC302 [39] +*/ +static const FLOAT CC_MN12_L[] = + { 6.735981e-01, -2.270598e+00, -2.613712e+00, 3.993609e+00, 4.635575e+00, 1.250676e+00, + 8.444920e-01, -1.301173e+01, -1.777730e+01, -4.627211e+00, 5.976605e+00, + 1.142897e+00, -2.040226e+01, -2.382843e+01, 7.119109e+00, + -2.335726e+01, -1.622633e+01, 1.482732e+01, + 1.449285e+00, 1.020598e+01, 4.407450e+00, -2.008193e+01, -1.253561e+01, + -5.435031e+00, 1.656736e+01, 2.000229e+01, -2.513105e+00, + 9.658436e+00, -3.825281e+00, -2.500000e+01, + -2.070080e+00, -9.951913e+00, 8.731211e-01, 2.210891e+01, + 8.822633e+00, 2.499949e+01, 2.500000e+01, + 6.851693e-01, -7.406948e-02, -6.788000e-01 + }; + +static const FLOAT CC_MN12_SX[] = + { 5.226556e-01, -2.681208e-01, -4.670705e+00, 3.067320e+00, 4.095370e+00, 2.653023e+00, + 5.165969e-01, -2.035442e+01, -9.946472e+00, 2.938637e+00, 1.131100e+01, + 4.752452e+00, -3.061331e+00, -2.523173e+01, 1.710903e+01, + -2.357480e+01, -2.727754e+01, 1.603291e+01, + 1.842503e+00, 1.927120e+00, 1.107987e+01, -1.182087e+01, -1.117768e+01, + -5.821000e+00, 2.266545e+01, 8.246708e+00, -4.778364e+00, + 5.329122e-01, -6.666755e+00, 1.671429e+00, + -3.311409e+00, 3.415913e-01, -6.413076e+00, 1.038584e+01, + 9.026277e+00, 1.929689e+01, 2.669232e+01, + 1.517278e+00, -3.442503e+00, 1.100161e+00 + }; + + +static void +func(const XC(func_type) *pt, XC(mgga_work_c_t) *r) +{ + int is; + const FLOAT *CC, sign[2] = {1.0, -1.0}, omega_x=2.5, gamma_x=0.004; + + FLOAT cnst_rs, opz, opz13, rss, x2; + FLOAT vx, vx2, vx3, ux_d, ux, ux2, ux3, wx_d, wx, wx2, wx3, wx4, wx5; + FLOAT pol1, pol2, pol3, pol4, pol5, pol6, pol7, pol8, pol9, pol10; + FLOAT ex, FMN12; + + FLOAT drssdrs, drssdz, dvxdrss, duxdxs, dwxdts; + FLOAT dpol1, dpol2, dpol3, dpol4, dpol5, dpol6, dpol7, dpol8, dpol9, dpol10; + FLOAT dexdz, dexdrss, dFMN12dwx, dFMN12dux, dFMN12dvx; + + CC = (pt->info->number == XC_MGGA_X_MN12_L) ? CC_MN12_L : CC_MN12_SX; + cnst_rs = CBRT(4.0*M_PI/3.0); + + r->f = 0.0; + if(r->order >= 1) + r->dfdrs = r->dfdz = r->dfdxt = r->dfdxs[0] = r->dfdxs[1] = r->dfdts[0] = r->dfdts[1] = 0.0; + + /* now the spin-resolved part */ + for(is = 0; is < 2; is++){ + opz = 1.0 + sign[is]*r->zeta; + if(opz < pt->info->min_zeta) continue; + + opz13 = CBRT(opz); + rss = r->rs*M_CBRT2/opz13; + x2 = r->xs[is]*r->xs[is]; + + vx = 1.0/(1.0 + (cnst_rs/omega_x)*rss); + + ux_d = 1.0/(1.0 + gamma_x*x2); + ux = gamma_x*x2*ux_d; + + wx_d = 1.0/(K_FACTOR_C + r->ts[is]); + wx = (K_FACTOR_C - r->ts[is])*wx_d; + + vx2 = vx*vx; vx3 = vx2*vx; + ux2 = ux*ux; ux3 = ux2*ux; + wx2 = wx*wx; wx3 = wx2*wx; wx4 = wx3*wx; wx5 = wx4*wx; + + pol1 = CC[ 0] + CC[ 1]*wx + CC[ 2]*wx2 + CC[ 3]*wx3 + CC[ 4]*wx4 + CC[ 5]*wx5; + pol2 = CC[ 6] + CC[ 7]*wx + CC[ 8]*wx2 + CC[ 9]*wx3 + CC[10]*wx4; + pol3 = CC[11] + CC[12]*wx + CC[13]*wx2 + CC[14]*wx3; + pol4 = CC[15] + CC[16]*wx + CC[17]*wx2; + pol5 = CC[18] + CC[19]*wx + CC[20]*wx2 + CC[21]*wx3 + CC[22]*wx4; + pol6 = CC[23] + CC[24]*wx + CC[25]*wx2 + CC[26]*wx3; + pol7 = CC[27] + CC[28]*wx + CC[29]*wx2; + pol8 = CC[30] + CC[31]*wx + CC[32]*wx2 + CC[33]*wx3; + pol9 = CC[34] + CC[35]*wx + CC[36]*wx2; + pol10 = CC[37] + CC[38]*wx + CC[39]*wx2; + + FMN12 = pol1 + ux*pol2 + ux2*pol3 + ux3*pol4 + + vx*pol5 + ux*vx*pol6 + ux2*vx*pol7 + vx2*pol8 + ux*vx2*pol9 + vx3*pol10; + + ex = -X_FACTOR_C*opz/(2.0*cnst_rs*rss); + r->f += ex*FMN12; + + if(r->order < 1) continue; + + drssdrs = M_CBRT2/opz13; + drssdz = -sign[is]*rss/(3.0*opz); + + dvxdrss = -(cnst_rs/omega_x)*vx*vx; + duxdxs = 2.0*gamma_x*r->xs[is]*ux_d*ux_d; + dwxdts = -2.0*K_FACTOR_C*wx_d*wx_d; + + dpol1 = CC[ 1] + 2.0*CC[ 2]*wx + 3.0*CC[ 3]*wx2 + 4.0*CC[ 4]*wx3 + 5.0*CC[ 5]*wx4; + dpol2 = CC[ 7] + 2.0*CC[ 8]*wx + 3.0*CC[ 9]*wx2 + 4.0*CC[10]*wx3; + dpol3 = CC[12] + 2.0*CC[13]*wx + 3.0*CC[14]*wx2; + dpol4 = CC[16] + 2.0*CC[17]*wx; + dpol5 = CC[19] + 2.0*CC[20]*wx + 3.0*CC[21]*wx2 + 4.0*CC[22]*wx3; + dpol6 = CC[24] + 2.0*CC[25]*wx + 3.0*CC[26]*wx2; + dpol7 = CC[28] + 2.0*CC[29]*wx; + dpol8 = CC[31] + 2.0*CC[32]*wx + 3.0*CC[33]*wx2; + dpol9 = CC[35] + 2.0*CC[36]*wx; + dpol10 = CC[38] + 2.0*CC[39]*wx; + + dFMN12dwx = dpol1 + ux*dpol2 + ux2*dpol3 + ux3*dpol4 + + vx*dpol5 + ux*vx*dpol6 + ux2*vx*dpol7 + vx2*dpol8 + ux*vx2*dpol9 + vx3*dpol10; + dFMN12dux = pol2 + 2.0*ux*pol3 + 3.0*ux2*pol4 + vx*pol6 + 2.0*ux*vx*pol7 + vx2*pol9; + dFMN12dvx = pol5 + ux*pol6 + ux2*pol7 + 2.0*vx*pol8 + 2.0*ux*vx*pol9 + 3.0*vx2*pol10; + + dexdrss = -ex/rss; + dexdz = sign[is]*ex/opz; + + r->dfdrs += (dexdrss*FMN12 + ex*dFMN12dvx*dvxdrss)*drssdrs; + r->dfdz += dexdz*FMN12 + (dexdrss*FMN12 + ex*dFMN12dvx*dvxdrss)*drssdz; + r->dfdxs[is] = ex*dFMN12dux*duxdxs; + r->dfdts[is] = ex*dFMN12dwx*dwxdts; + } +} + + +#include "work_mgga_c.c" + + +XC(func_info_type) XC(func_info_mgga_x_mn12_l) = { + XC_MGGA_X_MN12_L, + XC_EXCHANGE, + "MN12-L functional of Minnesota", + XC_FAMILY_MGGA, + "R Peverati and DG Truhlar, Phys. Chem. Chem. Phys. 14, 13171-13174 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + NULL, + NULL, NULL, NULL, + work_mgga_c, +}; + +XC(func_info_type) XC(func_info_mgga_x_mn12_sx) = { + XC_MGGA_X_MN12_SX, + XC_EXCHANGE, + "MN12-SX functional of Minnesota", + XC_FAMILY_MGGA, + "R Peverati and DG Truhlar, Phys. Chem. Chem. Phys. 14, accepted (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + NULL, + NULL, NULL, NULL, + work_mgga_c, +}; + diff --git a/libxc/src/mgga_x_ms.c b/libxc/src/mgga_x_ms.c new file mode 100644 index 000000000..8eadffd5c --- /dev/null +++ b/libxc/src/mgga_x_ms.c @@ -0,0 +1,226 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_X_MS0 221 /* MS exchange of Sun, Xiao, and Ruzsinszky */ +#define XC_MGGA_X_MS1 222 /* MS1 exchange of Sun, et al */ +#define XC_MGGA_X_MS2 223 /* MS2 exchange of Sun, et al */ +#define XC_MGGA_X_MS2H 224 /* MS2 hybrid exchange of Sun, et al */ + +typedef struct{ + FLOAT kappa, c, b; +} mgga_x_ms_params; + +static void +mgga_x_ms_init(XC(func_type) *p) +{ + mgga_x_ms_params *params; + + assert(p!=NULL && p->params == NULL); + p->params = malloc(sizeof(mgga_x_ms_params)); + params = (mgga_x_ms_params *)p->params; + + /* value of beta in standard Becke 88 functional */ + switch(p->info->number){ + case XC_MGGA_X_MS0: + params->kappa = 0.29; + params->c = 0.28771; + params->b = 1.0; + break; + case XC_MGGA_X_MS1: + params->kappa = 0.404; + params->c = 0.18150; + params->b = 1.0; + break; + case XC_MGGA_X_MS2: + params->kappa = 0.504; + params->c = 0.14601; + params->b = 4.0; + break; + case XC_MGGA_X_MS2H: + p->cam_alpha = 0.09; + params->kappa = 0.504; + params->c = 0.14601; + params->b = 4.0; + break; + default: + fprintf(stderr, "Internal error in mgga_x_ms\n"); + exit(1); + } +} + + +static void +func_fa(FLOAT b, int order, FLOAT a, + FLOAT *f, FLOAT *dfda, FLOAT *d2fda2) +{ + FLOAT a2, a4, a6, aux, num, den, dnum, dden, d2num, d2den; + + a2 = a*a; + a4 = a2*a2; + a6 = a2*a4; + + aux = 1.0 - a2; + + num = aux*aux*aux; + den = 1.0 + a*a2 + b*a6; + + *f = num/den; + + if(order < 1) return; /* And now the derivatives */ + + dnum = -6.0*a*aux*aux; + dden = 3.0*a2 + 6.0*b*a*a4; + + *dfda = (dnum*den - num*dden)/(den*den); + + if(order < 2) return; + + d2num = -6.0*aux*(1.0 - 5.0*a2); + d2den = 6.0*a + 30.0*b*a4; + + *d2fda2 = ((d2num*den - num*d2den)*den - 2.0*dden*(dnum*den - dden*num))/(den*den*den); +} + + +static void +func_f(FLOAT kappa, FLOAT c, int order, FLOAT p, + FLOAT *f, FLOAT *dfdp, FLOAT *d2fdp2) +{ + FLOAT mu = 10.0/81.0; + FLOAT den, dden; + + den = kappa + mu*p + c; + + *f = 1.0 + kappa*(1.0 - kappa/den); + + if(order < 1) return; /* And now the derivatives */ + + dden = mu; + *dfdp = kappa*kappa*dden/(den*den); + + if(order < 2) return; + + *d2fdp2 = -2.0*kappa*kappa*dden*dden/(den*den*den); +} + + +static void +func(const XC(func_type) *pt, XC(mgga_work_x_t) *r) +{ + FLOAT ss; + FLOAT alpha, dalphadt, dalphadx, d2alphadx2, fa, dfada, d2fada2; + FLOAT pp, dpdx, d2pdx2, f0, df0dp, d2f0dp2, f1, df1dp, d2f1dp2; + mgga_x_ms_params *params; + + params = (mgga_x_ms_params *)pt->params; + assert(params != NULL); + + ss = X2S*r->x; + pp = ss*ss; + + alpha = (r->t - r->x*r->x/8.0)/K_FACTOR_C; + + func_fa(params->b, r->order, alpha, &fa, &dfada, &d2fada2); + func_f (params->kappa, params->c, r->order, pp, &f0, &df0dp, &d2f0dp2); + func_f (params->kappa, 0.0, r->order, pp, &f1, &df1dp, &d2f1dp2); + + r->f = f1 + fa*(f0 - f1); + + if(r->order < 1) return; + + dpdx = 2.0*ss*X2S; + dalphadx = -2.0*r->x/(8.0*K_FACTOR_C); + dalphadt = 1.0/K_FACTOR_C; + + r->dfdx = (df1dp + fa*(df0dp - df1dp))*dpdx + (f0 - f1)*dfada*dalphadx; + r->dfdt = (f0 - f1)*dfada*dalphadt; + r->dfdu = 0.0; + + if(r->order < 2) return; + + d2pdx2 = 2.0*X2S*X2S; + d2alphadx2 = -2.0/(8.0*K_FACTOR_C); + + r->d2fdx2 = (d2f1dp2 + fa*(d2f0dp2 - d2f1dp2))*dpdx*dpdx + (df1dp + fa*(df0dp - df1dp))*d2pdx2 + + 2.0*(df0dp - df1dp)*dpdx*dfada*dalphadx + + (f0 - f1)*(d2fada2*dalphadx*dalphadx + dfada*d2alphadx2); + r->d2fdt2 = (f0 - f1)*d2fada2*dalphadt*dalphadt; + r->d2fdxt = (f0 - f1)*d2fada2*dalphadt*dalphadx; +} + + +#include "work_mgga_x.c" + + +XC(func_info_type) XC(func_info_mgga_x_ms0) = { + XC_MGGA_X_MS0, + XC_EXCHANGE, + "MS exchange of Sun, Xiao, and Ruzsinszky", + XC_FAMILY_MGGA, + "J Sun, B Xiao, and A Ruzsinszky, J. Chem. Phys. 137, 051101 (2012)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_x_ms_init, + NULL, NULL, NULL, + work_mgga_x, +}; + +XC(func_info_type) XC(func_info_mgga_x_ms1) = { + XC_MGGA_X_MS1, + XC_EXCHANGE, + "MS1 exchange of Sun, et al", + XC_FAMILY_MGGA, + "J Sun, R Haunschild, B Xiao, IW Bulik, GE Scuseria, JP Perdew, J. Chem. Phys. 138, 044113 (2013)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_x_ms_init, + NULL, NULL, NULL, + work_mgga_x, +}; + +XC(func_info_type) XC(func_info_mgga_x_ms2) = { + XC_MGGA_X_MS2, + XC_EXCHANGE, + "MS2 exchange of Sun, et al", + XC_FAMILY_MGGA, + "J Sun, R Haunschild, B Xiao, IW Bulik, GE Scuseria, JP Perdew, J. Chem. Phys. 138, 044113 (2013)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_x_ms_init, + NULL, NULL, NULL, + work_mgga_x, +}; + +XC(func_info_type) XC(func_info_mgga_x_ms2h) = { + XC_MGGA_X_MS2H, + XC_EXCHANGE, + "MS2 hybrid exchange of Sun, et al", + XC_FAMILY_MGGA, + "J Sun, R Haunschild, B Xiao, IW Bulik, GE Scuseria, JP Perdew, J. Chem. Phys. 138, 044113 (2013)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_x_ms_init, + NULL, NULL, NULL, + work_mgga_x, +}; diff --git a/libxc/src/mgga_x_pkzb.c b/libxc/src/mgga_x_pkzb.c new file mode 100644 index 000000000..a94e416ac --- /dev/null +++ b/libxc/src/mgga_x_pkzb.c @@ -0,0 +1,94 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_X_PKZB 213 /* Perdew, Kurth, Zupan, and Blaha */ + +static const FLOAT kappa = 0.804; + +static void Eq_14(FLOAT pp, FLOAT qt, int order, FLOAT *xx, FLOAT *dxxdpp, FLOAT *dxxdqt) +{ + static const FLOAT + a1 = 10.0/81.0, + a2 = 146.0/2025.0, + a3 = -73.0/405.0, + a4 = 0.131957187845257783631757384393; /* DD + 100.0/(81.0*81.0*kappa); */ + + *xx = a1*pp + a2*qt*qt + a3*qt*pp + a4*pp*pp; + + if(order < 1) return; + + *dxxdpp = a1 + a3*qt + 2.0*a4*pp; + *dxxdqt = 2.0*a2*qt + a3*pp; +} + +static void +func(const XC(func_type) *pt, XC(mgga_work_x_t) *r) +{ + FLOAT x2s2, pp, rr, qt, xx, dxxdpp, dxxdqt; + FLOAT kpxx, k2, dqtdrr, dqtdpp, dfdxx; + + x2s2 = X2S*X2S; + k2 = kappa*kappa; + + pp = x2s2*r->x*r->x; + rr = x2s2*r->t; + + qt = 6.0*rr - 9.0/20.0 - pp/12.0; + + Eq_14(pp, qt, r->order, &xx, &dxxdpp, &dxxdqt); + + kpxx = kappa + xx; + r->f = 1.0 + kappa - k2/kpxx; + + if(r->order < 1) return; + + dqtdrr = 6.0; + dqtdpp = -1.0/12.0; + + dfdxx = k2/(kpxx*kpxx); + + r->dfdx = dfdxx*(dxxdpp + dxxdqt*dqtdpp)*2.0*x2s2*r->x; + r->dfdt = dfdxx*dxxdqt*dqtdrr*x2s2; + r->dfdu = 0.0; + + if(r->order < 2) return; + +} + + +#include "work_mgga_x.c" + + +XC(func_info_type) XC(func_info_mgga_x_pkzb) = { + XC_MGGA_X_PKZB, + XC_EXCHANGE, + "Perdew, Kurth, Zupan, and Blaha", + XC_FAMILY_MGGA, + "JP Perdew, S Kurth, A Zupan, and P. Blaha, Phys. Rev. Lett. 82, 2544-2547 (1999)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 1e-32, 1e-32, + NULL, + NULL, NULL, NULL, + work_mgga_x, +}; diff --git a/libxc/src/mgga_x_tau_hcth.c b/libxc/src/mgga_x_tau_hcth.c new file mode 100644 index 000000000..4c526822b --- /dev/null +++ b/libxc/src/mgga_x_tau_hcth.c @@ -0,0 +1,103 @@ +/* + Copyright (C) 2008 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define XC_MGGA_X_TAU_HCTH 205 /* tau-HCTH from Boese and Handy */ + +/* Eq. (22) */ +static void +eq_22(int order, FLOAT t, FLOAT *fx, FLOAT *dfxdt) +{ + FLOAT CFermi = (3.0/5.0) * POW(6.0*M_PI*M_PI, 2.0/3.0); + + FLOAT w, w2; + + w = (CFermi - t)/(CFermi + t); + w2 = w*w; + + *fx = w*(1.0 - 2.0*w2 + w2*w2); + + if(order < 1) return; + + *dfxdt = 1.0 - 6.0*w2 + 5.0*w2*w2; + *dfxdt *= -2.0*CFermi/((CFermi + t)*(CFermi + t)); +} + + +static void +eq_29(int order, FLOAT x, FLOAT *ux, FLOAT *duxdx) +{ + static FLOAT gamX = 0.004; + FLOAT x2, denom; + + x2 = x*x; + denom = 1.0 + gamX*x2; + + *ux = gamX*x2/denom; + + if(order < 1) return; + + *duxdx = 2.0*gamX*x/(denom*denom); +} + +static void +func(const XC(func_type) *pt, XC(mgga_work_x_t) *r) +{ + const FLOAT cx_local [4] = {1.10734, -1.0534, 6.3491, -2.5531}; + const FLOAT cx_nlocal[4] = {0.00110, -0.3041, 6.9543, -0.7235}; + + FLOAT ux, ux2, gxl, gxnl, fx; + FLOAT duxdx, dgxldu, dgxnldu, dfxdt; + + eq_29(r->order, r->x, &ux, &duxdx); + eq_22(r->order, 2.0*r->t, &fx, &dfxdt); + + ux2 = ux*ux; + gxl = cx_local [0] + ux*(cx_local [1] + cx_local [2]*ux + cx_local [3]*ux2); + gxnl = cx_nlocal[0] + ux*(cx_nlocal[1] + cx_nlocal[2]*ux + cx_nlocal[3]*ux2); + + r->f = gxl + gxnl*fx; + + if(r->order < 1) return; + + dgxldu = cx_local [1] + 2.0*cx_local [2]*ux + 3.0*cx_local [3]*ux2; + dgxnldu = cx_nlocal[1] + 2.0*cx_nlocal[2]*ux + 3.0*cx_nlocal[3]*ux2; + + r->dfdx = (dgxldu + dgxnldu*fx)*duxdx; + r->dfdt = 2.0*gxnl*dfxdt; +} + +#include "work_mgga_x.c" + +const XC(func_info_type) XC(func_info_mgga_x_tau_hcth) = { + XC_MGGA_X_TAU_HCTH, + XC_EXCHANGE, + "tau-HCTH", + XC_FAMILY_MGGA, + "AD Boese and NC Handy, JCP 116, 9559 (2002)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + MIN_DENS, MIN_GRAD, MIN_TAU, MIN_ZETA, + NULL, NULL, + NULL, NULL, /* this is not an LDA */ + work_mgga_x, +}; diff --git a/libxc/src/mgga_x_tpss.c b/libxc/src/mgga_x_tpss.c new file mode 100644 index 000000000..9c15aba9f --- /dev/null +++ b/libxc/src/mgga_x_tpss.c @@ -0,0 +1,362 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +/************************************************************************ + Implements Perdew, Tao, Staroverov & Scuseria + meta-Generalized Gradient Approximation. + + Exchange part +************************************************************************/ + +#define XC_MGGA_X_TPSS 202 /* Perdew, Tao, Staroverov & Scuseria exchange */ +#define XC_MGGA_X_MODTPSS 245 /* Modified Perdew, Tao, Staroverov & Scuseria exchange */ +#define XC_MGGA_X_REVTPSS 212 /* revised Perdew, Tao, Staroverov & Scuseria exchange */ +#define XC_MGGA_X_BLOC 244 /* functional with balanced localization */ + +typedef struct{ + int func; + FLOAT b, c, e, kappa, mu; +} mgga_x_tpss_params; + +static void +mgga_x_tpss_init(XC(func_type) *p) +{ + mgga_x_tpss_params *params; + + assert(p!=NULL && p->params == NULL); + p->params = malloc(sizeof(mgga_x_tpss_params)); + params = (mgga_x_tpss_params *)p->params; + + /* value of beta in standard Becke 88 functional */ + switch(p->info->number){ + case XC_MGGA_X_TPSS: + params->func = p->func = 0; + XC(mgga_x_tpss_set_params)(p, 0.40, 1.59096, 1.537, 0.804, 0.21951); + break; + case XC_MGGA_X_MODTPSS: + params->func = p->func = 0; /* this has exactly the same form as TPSS */ + XC(mgga_x_tpss_set_params)(p, 0.40, 1.39660, 1.38, 0.804, 0.250); + break; + case XC_MGGA_X_REVTPSS: + params->func = p->func = 1; + XC(mgga_x_tpss_set_params)(p, 0.40, 2.35203946, 2.16769874, 0.804, 0.14); + break; + case XC_MGGA_X_BLOC: + params->func = p->func = 2; + XC(mgga_x_tpss_set_params)(p, 0.40, 1.59096, 1.537, 0.804, 0.21951); + break; + default: + fprintf(stderr, "Internal error in mgga_x_tpss\n"); + exit(1); + } +} + + +void +XC(mgga_x_tpss_set_params)(XC(func_type) *p, FLOAT b, FLOAT c, FLOAT e, FLOAT kappa, FLOAT mu) +{ + mgga_x_tpss_params *params; + + assert(p != NULL && p->params != NULL); + params = (mgga_x_tpss_params *) (p->params); + + params->b = b; + params->c = c; + params->e = e; + params->kappa = kappa; + params->mu = mu; +} + + +/* This is Equation (7) from the paper and its derivatives */ +static void +x_tpss_7(mgga_x_tpss_params *params, int order, FLOAT p, FLOAT z, + FLOAT *qb, FLOAT *dqbdp, FLOAT *dqbdz, FLOAT *d2qbdp2, FLOAT *d2qbdpz, FLOAT *d2qbdz2) +{ + FLOAT a1, a2, a2_3, a2_5, h1, h2; + FLOAT alpha, dalphadp, dalphadz, dqbdalpha; + FLOAT d2alphadpz, d2alphadz2, dqb2dalpha2; + + /* Eq. (8) */ + a1 = (1.0 - z)/z; + h1 = 5.0/3.0; + + alpha = h1*a1*p; + + /* Eq. (7) */ + a2 = SQRT(1.0 + params->b*alpha*(alpha - 1.0)); + h2 = 9.0/20.0; + + *qb = h2*(alpha - 1.0)/a2 + 2.0*p/3.0; + + if(order < 1) return; /* And now the derivatives */ + + /* Eq. (8) */ + dalphadp = h1*a1; + dalphadz = -h1*p/(z*z); + + a2_3 = a2*a2*a2; + dqbdalpha = h2*(1.0 + 0.5*params->b*(alpha - 1.0))/a2_3; + + *dqbdp = dqbdalpha*dalphadp + 2.0/3.0; + *dqbdz = dqbdalpha*dalphadz; + + if(order < 2) return; + + /* Eq. (8) */ + d2alphadpz = -h1/(z*z); + d2alphadz2 = -2.0*dalphadz/z; + + a2_5 = a2*a2*a2_3; + dqb2dalpha2 = -h2*params->b/(4.0*a2_5)* + (-8.0 + 3.0*params->b + 12.0*alpha - 7.0*alpha*params->b + 4*alpha*alpha*params->b); + + *d2qbdp2 = dqb2dalpha2*dalphadp*dalphadp; + *d2qbdpz = dqb2dalpha2*dalphadp*dalphadz + dqbdalpha*d2alphadpz; + *d2qbdz2 = dqb2dalpha2*dalphadz*dalphadz + dqbdalpha*d2alphadz2; +} + + +/* Equation (10) in all its glory */ +static +void x_tpss_10(mgga_x_tpss_params *params, int order, FLOAT p, FLOAT z, + FLOAT *x, FLOAT *dxdp, FLOAT *dxdz, FLOAT *d2xdp2, FLOAT *d2xdpz, FLOAT *d2xdz2) +{ + static FLOAT BLOC_a = 4.0, BLOC_b = -3.3; + + FLOAT x1, dxdp1, dxdz1, d2xdp1, d2xdpz1, d2xdz1, zlogz, ff, dff, zff; + FLOAT aux1, aux2, z2, p2; + FLOAT qb, dqbdp, dqbdz, d2qbdp2, d2qbdpz, d2qbdz2; + + FLOAT a1, a1_2, a2, a3, h3, a4, a5, a6, d1, d1_2; + + /* Equation 7 */ + dqbdp = dqbdz = 0.0; + x_tpss_7(params, order, p, z, &qb, &dqbdp, &dqbdz, &d2qbdp2, &d2qbdpz, &d2qbdz2); + + z2 = z*z; + p2 = p*p; + aux1 = 10.0/81.0; + aux2 = 9.0/25.0; + + /* first we handle the numerator */ + x1 = 0.0; + + a1 = 1.0 + z2; /* first term */ + a1_2 = a1*a1; + + switch(params->func){ + case 0: /* TPSS */ + ff = 2.0; break; + case 1: /* revTPSS */ + ff = 3.0; break; + case 2: /* BLOC */ + ff = BLOC_a + BLOC_b * z; + break; + } + + zff = POW(z, ff); + + x1 += (aux1 + params->c*zff/a1_2)*p; + + a2 = 146.0/2025.0; /* second term */ + x1 += a2*qb*qb; + + a3 = SQRT(0.5*(aux2*z2 + p2)); /* third term */ + h3 = -73.0/405; + x1 += h3*qb*a3; + + a4 = aux1*aux1/params->kappa; /* fourth term */ + x1 += a4*p2; + + a5 = 2.0*SQRT(params->e)*aux1*aux2; /* fifth term */ + x1 += a5*z2; + + a6 = params->e*params->mu; /* sixth term */ + x1 += a6*p*p2; + + d1 = 1.0 + SQRT(params->e)*p; /* denominator */ + d1_2 = d1*d1; + *x = x1/d1_2; + + if(order < 1) return; /* the derivatives */ + + dxdp1 = dxdz1 = 0.0; + + dff = (params->func != 2) ? 0.0 : BLOC_b; + zlogz = z*LOG(z)*dff; + + dxdp1 += aux1 + params->c*zff/a1_2; /* first term */ + dxdz1 += params->c*p*zff*(zlogz*a1 + a1*ff - 4.0*z2)/(z*a1*a1_2); + + dxdp1 += 2.0*a2*qb*dqbdp; /* second term */ + dxdz1 += 2.0*a2*qb*dqbdz; + + dxdp1 += h3*(a3*dqbdp + 0.5*qb*p/a3); /* third term */ + dxdz1 += h3*(a3*dqbdz + 0.5*qb*aux2*z/a3); + + dxdp1 += a4*2.0*p; /* fourth term */ + + dxdz1 += a5*2.0*z; /* fifth term */ + + dxdp1 += a6*3.0*p2; /* sixth term */ + + *dxdp = (dxdp1*d1 - 2.0*SQRT(params->e)*x1)/(d1*d1_2); /* denominator */ + *dxdz = dxdz1/d1_2; + + if(order < 2) return; + + d2xdp1 = d2xdz1 = d2xdpz1 = 0.0; + + d2xdpz1+= params->c*zff*(zlogz*a1 + a1*ff - 4.0*z2)/(z*a1*a1_2); + d2xdz1 += params->c*p*zff/(a1_2*a1_2) * + (24.0*z2 - 4.0*a1*(2.0*zlogz + 2.0*ff + 1.0) + a1_2/z2 * (2.0*dff*z - ff + (zlogz + ff)*(zlogz + ff))); + + d2xdp1 += 2.0*a2*(dqbdp*dqbdp + qb*d2qbdp2); /* second term */ + d2xdpz1+= 2.0*a2*(dqbdp*dqbdz + qb*d2qbdpz); + d2xdz1 += 2.0*a2*(dqbdz*dqbdz + qb*d2qbdz2); + + /* third term */ + d2xdp1 += h3*( aux2*z2*qb + (p2 + aux2*z2)*(2.0*p*dqbdp + (p2 + aux2*z2)*d2qbdp2))/(4.0*a3*a3*a3); + d2xdpz1+= h3*(-aux2*p*z*qb + (p2 + aux2*z2)*(aux2*z*dqbdp + p*dqbdz + (p2 + aux2*z2)*d2qbdpz))/(4.0*a3*a3*a3); + d2xdz1 += h3*( aux2*p2*qb + (p2 + aux2*z2)*(2.0*aux2*z*dqbdz + (p2 + aux2*z2)*d2qbdz2))/(4.0*a3*a3*a3); + + d2xdp1 += a4*2.0; /* fourth term */ + + d2xdz1 += a5*2.0; /* fifth term */ + + d2xdp1 += a6*6.0*p; /* sixth term */ + + *d2xdp2 = (6.0*params->e*x1 + d1*(-4.0*SQRT(params->e)*dxdp1 + d1*d2xdp1))/(d1_2*d1_2); + *d2xdpz = (d2xdpz1*d1 - 2.0*SQRT(params->e)*dxdz1)/(d1*d1_2); + *d2xdz2 = d2xdz1/d1_2; +} + + +static void +func(const XC(func_type) *pt, XC(mgga_work_x_t) *r) +{ + FLOAT ss, pp, xx, a1, a1_2, zz; + FLOAT dxxdp, dxxdz, d2xxdp2, d2xxdpz, d2xxdz2; + FLOAT dpdx, dzdx, dzdt, d2pdx2, d2zdx2, d2zdxt, d2zdt2; + mgga_x_tpss_params *params; + + params = (mgga_x_tpss_params *)pt->params; + + ss = X2S*r->x; + pp = ss*ss; + + zz = r->x*r->x/(8.0*r->t); + + /* Eq. 10 */ + x_tpss_10(params, r->order, pp, zz, &xx, &dxxdp, &dxxdz, &d2xxdp2, &d2xxdpz, &d2xxdz2); + + /* Eq. (5) */ + a1 = params->kappa/(params->kappa + xx); + a1_2 = a1*a1; + + r->f = 1.0 + params->kappa*(1.0 - a1); + + if(r->order < 1) return; + + dpdx = 2.0*ss*X2S; + dzdx = r->x/(4.0*r->t); + dzdt = -zz/r->t; + + r->dfdx = a1_2*(dxxdp*dpdx + dxxdz*dzdx); + r->dfdt = a1_2*dxxdz*dzdt; + r->dfdu = 0.0; + + if(r->order < 2) return; + + d2pdx2 = 2.0*X2S*X2S; + d2zdx2 = 1.0/(4.0*r->t); + d2zdxt = -dzdx/r->t; + d2zdt2 = -2.0*dzdt/r->t; + + r->d2fdx2 = -2.0*(r->dfdx)*(r->dfdx)/(params->kappa*a1) + + a1_2*(d2xxdp2*dpdx*dpdx + 2.0*d2xxdpz*dpdx*dzdx + dxxdp*d2pdx2 + d2xxdz2*dzdx*dzdx + dxxdz*d2zdx2); + r->d2fdt2 = -2.0*(r->dfdt)*(r->dfdt)/(params->kappa*a1) + + a1_2*(d2xxdz2*dzdt*dzdt + dxxdz*d2zdt2); + r->d2fdxt = -2.0*a1*(r->dfdx)*dxxdz*dzdt/params->kappa + + a1_2*(d2xxdpz*dpdx*dzdt + d2xxdz2*dzdx*dzdt + dxxdz*d2zdxt); +} + + +#include "work_mgga_x.c" + + +XC(func_info_type) XC(func_info_mgga_x_tpss) = { + XC_MGGA_X_TPSS, + XC_EXCHANGE, + "Tao, Perdew, Staroverov & Scuseria", + XC_FAMILY_MGGA, + "J Tao, JP Perdew, VN Staroverov, and G Scuseria, Phys. Rev. Lett. 91, 146401 (2003)\n" + "JP Perdew, J Tao, VN Staroverov, and G Scuseria, J. Chem. Phys. 120, 6898 (2004)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_x_tpss_init, + NULL, NULL, NULL, + work_mgga_x, +}; + +XC(func_info_type) XC(func_info_mgga_x_modtpss) = { + XC_MGGA_X_MODTPSS, + XC_EXCHANGE, + "Modified Tao, Perdew, Staroverov & Scuseria", + XC_FAMILY_MGGA, + "JP Perdew, A Ruzsinszky, J Tao, GI Csonka, and GE Scuseria, Phys. Rev. A 76, 042506 (2007)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_x_tpss_init, + NULL, NULL, NULL, + work_mgga_x, +}; + +XC(func_info_type) XC(func_info_mgga_x_revtpss) = { + XC_MGGA_X_REVTPSS, + XC_EXCHANGE, + "revised Tao, Perdew, Staroverov & Scuseria", + XC_FAMILY_MGGA, + "JP Perdew, A Ruzsinszky, GI Csonka, LA Constantin, and J Sun, Phys. Rev. Lett. 103, 026403 (2009)\n" + "JP Perdew, A Ruzsinszky, GI Csonka, LA Constantin, and J Sun, Phys. Rev. Lett. 106, 179902(E) (2011)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_x_tpss_init, + NULL, NULL, NULL, + work_mgga_x, +}; + +XC(func_info_type) XC(func_info_mgga_x_bloc) = { + XC_MGGA_X_BLOC, + XC_EXCHANGE, + "functional with balanced localization", + XC_FAMILY_MGGA, + "LA Constantin, E Fabiano, F Della Sala, J. Chem. Theory Comput. 9, 2256 (2013)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC | XC_FLAGS_HAVE_FXC, + 1e-32, 1e-32, 1e-32, 1e-32, + mgga_x_tpss_init, + NULL, NULL, NULL, + work_mgga_x, +}; diff --git a/libxc/src/mgga_xc_otpss_d.c b/libxc/src/mgga_xc_otpss_d.c new file mode 100644 index 000000000..1ef385ddf --- /dev/null +++ b/libxc/src/mgga_xc_otpss_d.c @@ -0,0 +1,47 @@ +/* + Copyright (C) 2006-2013 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include "util.h" + +#define XC_MGGA_XC_OTPSS_D 64 /* oTPSS_D functional of Goerigk and Grimme */ + +static void +mgga_xc_otpss_d_init(XC(func_type) *p) +{ + static int funcs_id [2] = {XC_MGGA_X_TPSS, XC_MGGA_C_TPSS}; + static FLOAT funcs_coef[2] = {1.0, 1.0}; + + XC(mix_init)(p, 2, funcs_id, funcs_coef); + XC(mgga_x_tpss_set_params)(p->func_aux[0], 3.43, 0.75896, 0.165, 0.778, 0.41567); + XC(mgga_c_pkzb_set_params)(p->func_aux[1], 0.08861, 0.7, 0.59, 0.9269, 0.6225, 2.1540); +} + +const XC(func_info_type) XC(func_info_mgga_xc_otpss_d) = { + XC_MGGA_XC_OTPSS_D, + XC_EXCHANGE_CORRELATION, + "oTPSS-D functional of Goerigk and Grimme", + XC_FAMILY_MGGA, + "L Goerigk and S Grimme, J. Chem. Theory Comput. 6, 107-126 (2010)", + XC_FLAGS_3D | XC_FLAGS_HAVE_EXC | XC_FLAGS_HAVE_VXC, + 1e-32, 1e-32, 0.0, 1e-32, + mgga_xc_otpss_d_init, + NULL, NULL, NULL, NULL +}; diff --git a/libxc/src/mix_func.c b/libxc/src/mix_func.c new file mode 100644 index 000000000..72f452da5 --- /dev/null +++ b/libxc/src/mix_func.c @@ -0,0 +1,157 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +#define is_mgga(id) ((id) == XC_FAMILY_MGGA || (id) == XC_FAMILY_HYB_MGGA) +#define is_gga(id) ((id) == XC_FAMILY_GGA || (id) == XC_FAMILY_HYB_GGA || is_mgga(id)) +#define is_lda(id) ((id) == XC_FAMILY_LDA || is_gga(is)) +#define safe_free(pt) if(pt != NULL) free(pt) + +void XC(mix_func) + (const XC(func_type) *func, int np, + const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl, const FLOAT *tau, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, FLOAT *vlapl, FLOAT *vtau, + FLOAT *v2rho2, FLOAT *v2sigma2, FLOAT *v2lapl2, FLOAT *v2tau2, + FLOAT *v2rhosigma, FLOAT *v2rholapl, FLOAT *v2rhotau, + FLOAT *v2sigmalapl, FLOAT *v2sigmatau, FLOAT *v2lapltau) +{ + const XC(func_type) *aux; + FLOAT *zk_, *vrho_, *vsigma_, *vlapl_, *vtau_; + FLOAT *v2rho2_, *v2sigma2_, *v2lapl2_, *v2tau2_; + FLOAT *v2rhosigma_, *v2rholapl_, *v2rhotau_; + FLOAT *v2sigmalapl_, *v2sigmatau_, *v2lapltau_; + + int ip, ii; + + /* prepare buffers that will hold the results from the individual functionals */ + zk_ = NULL; + vrho_ = vsigma_ = vlapl_ = vtau_ = NULL; + v2rho2_ = v2sigma2_ = v2lapl2_ = v2tau2_ = NULL; + v2rhosigma_ = v2rholapl_ = v2rhotau_ = NULL; + v2sigmalapl_ = v2sigmatau_ = v2lapltau_ = NULL; + + if(zk != NULL) + zk_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_zk); + + if(vrho != NULL){ + vrho_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_vrho); + if(is_gga(func->info->family)){ + vsigma_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_vsigma); + } + if(is_mgga(func->info->family)){ + vlapl_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_vlapl); + vtau_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_vtau); + } + } + + if(v2rho2 != NULL){ + v2rho2_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_v2rho2); + if(is_gga(func->info->family)){ + v2sigma2_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_v2sigma2); + v2rhosigma_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_v2rhosigma); + } + if(is_mgga(func->info->family)){ + v2lapl2_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_v2lapl2); + v2tau2_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_v2tau2); + v2rholapl_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_v2rholapl); + v2rhotau_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_v2rhotau); + v2sigmalapl_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_v2sigmalapl); + v2sigmatau_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_v2sigmatau); + v2lapltau_ = (FLOAT *) malloc(sizeof(FLOAT)*np*func->n_v2lapltau); + } + } + + /* we now add the different components */ + for(ii=0; iin_func_aux; ii++){ + aux = func->func_aux[ii]; + switch(aux->info->family){ + case XC_FAMILY_LDA: + XC(lda)(aux, np, rho, zk_, vrho_, v2rho2_, NULL); + break; + case XC_FAMILY_GGA: + XC(gga)(aux, np, rho, sigma, zk_, vrho_, vsigma_, v2rho2_, v2rhosigma_, v2sigma2_, NULL, NULL, NULL, NULL); + break; + case XC_FAMILY_MGGA: + XC(mgga)(aux, np, rho, sigma, lapl, tau, zk_, vrho_, vsigma_, vlapl_, vtau_, + v2rho2_, v2sigma2_, v2lapl2_, v2tau2_, v2rhosigma_, v2rholapl_, v2rhotau_, + v2sigmalapl_, v2sigmatau_, v2lapltau_); + break; + } + + if(zk != NULL) + for(ip = 0; ip < np*func->n_zk; ip++) + zk[ip] += func->mix_coef[ii] * zk_[ip]; + + if(vrho != NULL){ + for(ip = 0; ip < np*func->n_vrho; ip++) + vrho[ip] += func->mix_coef[ii] * vrho_[ip]; + + if(is_gga(func->info->family) && is_gga(aux->info->family)) + for(ip = 0; ip < np*func->n_vsigma; ip++) + vsigma[ip] += func->mix_coef[ii] * vsigma_[ip]; + + if(is_mgga(func->info->family) && is_mgga(aux->info->family)){ + for(ip = 0; ip < np*func->n_vlapl; ip++) + vlapl[ip] += func->mix_coef[ii] * vlapl_[ip]; + for(ip = 0; ip < np*func->n_vtau; ip++) + vtau[ip] += func->mix_coef[ii] * vtau_[ip]; + } + } + + if(v2rho2 != NULL){ + for(ip = 0; ip < np*func->n_v2rho2; ip++) + v2rho2[ip] += func->mix_coef[ii] * v2rho2_[ip]; + + if(is_gga(func->info->family) && is_gga(aux->info->family)){ + for(ip = 0; ip < np*func->n_v2rhosigma; ip++) + v2rhosigma[ip] += func->mix_coef[ii] * v2rhosigma_[ip]; + for(ip = 0; ip < np*func->n_v2sigma2; ip++) + v2sigma2[ip] += func->mix_coef[ii] * v2sigma2_[ip]; + } + + if(is_mgga(func->info->family) && is_mgga(aux->info->family)){ + for(ip = 0; ip < np*func->n_v2lapl2; ip++) + v2lapl2[ip] += func->mix_coef[ii] * v2lapl2_[ip]; + for(ip = 0; ip < np*func->n_v2tau2; ip++) + v2tau2[ip] += func->mix_coef[ii] * v2tau2_[ip]; + for(ip = 0; ip < np*func->n_v2rholapl; ip++) + v2rholapl[ip] += func->mix_coef[ii] * v2rholapl_[ip]; + for(ip = 0; ip < np*func->n_v2rhotau; ip++) + v2rhotau[ip] += func->mix_coef[ii] * v2rhotau_[ip]; + for(ip = 0; ip < np*func->n_v2sigmalapl; ip++) + v2sigmalapl[ip] += func->mix_coef[ii] * v2sigmalapl_[ip]; + for(ip = 0; ip < np*func->n_v2sigmatau; ip++) + v2sigmatau[ip] += func->mix_coef[ii] * v2sigmatau_[ip]; + for(ip = 0; ip < np*func->n_v2lapltau; ip++) + v2lapltau[ip] += func->mix_coef[ii] * v2lapltau_[ip]; + } + } + } + + /* deallocate internal buffers */ + safe_free(zk_); + safe_free(vrho_); safe_free(vsigma_); safe_free(vlapl_); safe_free(vtau_); + safe_free(v2rho2_); safe_free(v2sigma2_); safe_free(v2lapl2_); safe_free(v2tau2_); + safe_free(v2rhosigma_); safe_free(v2rholapl_); safe_free(v2rhotau_); + safe_free(v2sigmalapl_); safe_free(v2sigmatau_); safe_free(v2lapltau_); +} diff --git a/libxc/src/special_functions.c b/libxc/src/special_functions.c new file mode 100644 index 000000000..7b808ffaf --- /dev/null +++ b/libxc/src/special_functions.c @@ -0,0 +1,100 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include "util.h" + +/* + Lambert W function. + adapted from the Fortran code of Rickard Armiento + + Corless, Gonnet, Hare, Jeffrey, and Knuth (1996), + Adv. in Comp. Math. 5(4):329-359. +*/ + +FLOAT XC(lambert_w)(FLOAT z) +{ + FLOAT w; + int i; + + /* Sanity check - function is only defined for z >= -1/e */ + if(z + 1.0/M_E < -10*FLOAT_EPSILON) { + fprintf(stderr,"Error - Lambert function called with argument z = %e.\n",z); + exit(1); + } else if(z < -1.0/M_E) + /* Value of W(x) at x=-1/e is -1 */ + return -1.0; + + /* If z is small, go with the first terms of the power expansion + (if z smaller than cube root of epsilon, z^4 will be zero to + machine precision). + */ + if(ABS(z) < CBRT(FLOAT_EPSILON)) + return z - z*z + 1.5*z*z*z; + + /* Initial guess. */ + if(z <= -0.3140862435046707) { /* Point where sqrt and Taylor polynomials match */ + /* Near the branching point: first terms in eqn (4.22) */ + w = SQRT(2.0*M_E*z + 2.0) - 1.0; + + } else if(z <= 1.149876485041417) { /* Point where Taylor and log expansion match */ + + /* Taylor series around origin */ + w = z - z*z + 1.5*z*z*z; + + } else { + /* Asymptotic expansion */ + FLOAT lnz = LOG(z); + + w = lnz - LOG(lnz); + } + + /* Find result through iteration */ + for(i=0; i<10; i++){ + FLOAT expmw, dw; + expmw = EXP(-w); + + /* Halley's equation, (5.9) in Corless et al */ + if( w != -1.0 ) + dw = - (w - z*expmw) / ( w + 1.0 - (w + 2.0)/(2.0*w + 2.0)*(w - z*expmw) ); + else + dw = 0.0; + + w += dw; + if(ABS(dw) < 10*FLOAT_EPSILON*(1.0 + ABS(w))) + return w; + } + + /* This should never happen! */ + fprintf(stderr, "%s\n%s\n", "lambert_w: iteration limit reached", + "Should never happen: execution aborted"); + exit(1); +} + + +struct cheb_series_struct { + double * c; /* coefficients */ + int order; /* order of expansion */ + double a; /* lower interval point */ + double b; /* upper interval point */ + int order_sp; /* effective single precision order */ +}; +typedef struct cheb_series_struct cheb_series; + +/* cheb_eval is defined in util.h */ diff --git a/libxc/src/stoll.c b/libxc/src/stoll.c new file mode 100644 index 000000000..e6264e61a --- /dev/null +++ b/libxc/src/stoll.c @@ -0,0 +1,194 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include "util.h" + +void +XC(lda_stoll) (const XC(func_type) *pw, FLOAT dens, FLOAT zeta, int order, XC(lda_work_t) res[3]) +{ + static const FLOAT sign[2] = {1.0, -1.0}; + int is; + FLOAT opz[2] = {1.0 + zeta, 1.0 - zeta}; + + res[2].rs[1] = RS(dens); + + /* first we get the parallel contributions */ + for(is=0; is<2; is++){ + FLOAT opz13; + + if(opz[is] < pw->info->min_zeta){ + res[is].zk = 0.0; + if(order >= 1) res[is].dedz = res[is].dedrs = 0.0; + }else{ + FLOAT drssdrs, drssdz, d2rssdrsz, d2rssdz2; + FLOAT LDA_zk, LDA_dedrs, LDA_d2edrs2; + + opz13 = CBRT(opz[is]); + + res[is].rs[1] = RS(dens*opz[is]/2.0); + res[is].rs[0] = sqrt(res[is].rs[1]); + res[is].rs[2] = res[is].rs[1]*res[is].rs[1]; + res[is].zeta = sign[is]; + res[is].order = order; + + XC(lda_c_pw_func)(pw, &(res[is])); + + LDA_zk = res[is].zk; + + res[is].zk *= opz[is]/2.0; + + if(order < 1) continue; + + LDA_dedrs = res[is].dedrs; + drssdrs = M_CBRT2/opz13; + drssdz = -sign[is]*res[is].rs[1]/(3.0*opz[is]); + + res[is].dedrs = LDA_dedrs*drssdrs*opz[is]/2.0; + res[is].dedz = LDA_zk*sign[is]/2.0 + LDA_dedrs*drssdz*opz[is]/2.0; + + if(order < 2) continue; + + LDA_d2edrs2 = res[is].d2edrs2; + d2rssdrsz = -sign[is]*M_CBRT2/(3.0*opz13*opz[is]); + d2rssdz2 = res[is].rs[1]*4.0/(9.0*opz[is]*opz[is]); + + res[is].d2edrs2 = LDA_d2edrs2*drssdrs*drssdrs*opz[is]/2.0; + res[is].d2edrsz = sign[is]*LDA_dedrs*drssdrs/2.0 + (LDA_d2edrs2*drssdrs*drssdz + LDA_dedrs*d2rssdrsz)*opz[is]/2.0; + res[is].d2edz2 = sign[is]*LDA_dedrs*drssdz + (LDA_d2edrs2*drssdz*drssdz + LDA_dedrs*d2rssdz2)*opz[is]/2.0; + } + } + + /* and now the perpendicular */ + res[2].rs[0] = sqrt(res[2].rs[1]); + res[2].rs[2] = res[2].rs[1]*res[2].rs[1]; + res[is].zeta = zeta; + res[is].order = order; + + XC(lda_c_pw_func)(pw, &(res[2])); + + res[2].zk -= res[0].zk + res[1].zk; + + if(order < 1) return; + + res[2].dedrs -= res[0].dedrs + res[1].dedrs; + res[2].dedz -= res[0].dedz + res[1].dedz; + + if(order < 2) return; + + res[2].d2edrs2 -= res[0].d2edrs2 + res[1].d2edrs2; + res[2].d2edrsz -= res[0].d2edrsz + res[1].d2edrsz; + res[2].d2edz2 -= res[0].d2edz2 + res[1].d2edz2; +} + + +void +XC(pbe_c_stoll) (const XC(func_type) *pbe, int get_max, const XC(mgga_work_c_t) *in, XC(gga_work_c_t) out[3]) +{ + static const FLOAT sign[2] = {1.0, -1.0}; + int is; + FLOAT opz[2] = {1.0 + in->zeta, 1.0 - in->zeta}; + + /* first we get the perpendicular contributions */ + out[2].order = in->order; + out[2].dens = in->dens; + out[2].rs = in->rs; + out[2].zeta = in->zeta; + out[2].xt = in->xt; + out[2].xs[0] = in->xs[0]; + out[2].xs[1] = in->xs[1]; + + XC(gga_c_pbe_func) (pbe, &(out[2])); + + /* and now the parallel contributions */ + for(is=0; is<2; is++){ + FLOAT opz13; + + if(in->ds[is] < pbe->info->min_dens){ + out[is].f = 0.0; + if(in->order >= 1){ + out[is].dfdrs = out[is].dfdz = out[is].dfdxt = 0.0; + out[is].dfdxs[0] = out[is].dfdxs[1] = 0.0; + } + }else{ + FLOAT drssdrs, drssdz; + FLOAT GGA_f, GGA_dfdrs; + + opz13 = CBRT(opz[is]); + + out[is].order = in->order; + out[is].dens = in->ds[is]; + out[is].rs = RS(out[is].dens); + out[is].zeta = sign[is]; + out[is].xt = (is == 0) ? in->xs[0] : in->xs[1]; + out[is].xs[0] = (is == 0) ? in->xs[0] : 0.0; + out[is].xs[1] = (is == 1) ? in->xs[1] : 0.0; + + XC(gga_c_pbe_func) (pbe, &(out[is])); + + if(get_max && out[is].f < out[2].f){ + /* perform maximum operation */ + out[is].f = out[2].f; + + if(in->order >= 1){ + out[is].dfdrs = out[2].dfdrs; + out[is].dfdz = out[2].dfdz; + out[is].dfdxs[0] = out[2].dfdxs[0]; + out[is].dfdxs[1] = out[2].dfdxs[1]; + out[is].dfdxt = out[2].dfdxt; + } + }else{ + if(in->order >= 1){ + GGA_dfdrs = out[is].dfdrs; + + drssdrs = M_CBRT2/opz13; + drssdz = -sign[is]*out[is].rs/(3.0*opz[is]); + + out[is].dfdrs = GGA_dfdrs*drssdrs; + out[is].dfdz = GGA_dfdrs*drssdz; + if(is == 0){ + out[is].dfdxs[0] += out[is].dfdxt; + out[is].dfdxs[1] = 0.0; + }else{ + out[is].dfdxs[0] = 0.0; + out[is].dfdxs[1] += out[is].dfdxt; + } + out[is].dfdxt = 0.0; + } + } + + /* take care of the opz[is]/2 factor */ + GGA_f = out[is].f; + + out[is].f *= opz[is]/2.0; + + if(in->order < 1) continue; + + out[is].dfdrs = out[is].dfdrs*opz[is]/2.0; + out[is].dfdz = GGA_f*sign[is]/2.0 + out[is].dfdz*opz[is]/2.0; + out[is].dfdxs[0] = out[is].dfdxs[0]*opz[is]/2.0; + out[is].dfdxs[1] = out[is].dfdxs[1]*opz[is]/2.0; + out[is].dfdxt = out[is].dfdxt*opz[is]/2.0; + + if(in->order < 2) continue; + } + } +} diff --git a/libxc/src/string_f.h b/libxc/src/string_f.h new file mode 100644 index 000000000..79ad8fd50 --- /dev/null +++ b/libxc/src/string_f.h @@ -0,0 +1,94 @@ +/* + Copyright (C) 2003 M. Marques, A. Castro, A. Rubio, G. Bertsch + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + + $Id: string_f.h 3341 2007-10-12 15:47:30Z marques $ +*/ + +/* --------------------- Fortran to C string compatibility ---------------------- */ +#include + +#if defined(_CRAY) +#include + +#define to_c_str(f, c) { \ + char *fc; int slen; \ + fc = _fcdtocp(f); \ + for(slen=_fcdlen(f)-1; slen>=0 && fc[slen]==' '; slen--); \ + slen++; \ + c = (char *)malloc(slen+1); \ + strncpy(c, _fcdtocp(f), slen); \ + c[slen] = '\0'; \ +} + +#define to_f_str(c, f) { \ + char *fc; int flen, clen, i; \ + flen = _fcdlen(f); \ + fc = _fcdtocp(f); \ + clen = strlen(c); \ + for(i=0; i=0; ll--) \ + if(f[ll] != ' ') break; \ + ll++; \ + c = (char *)malloc((ll+1)*sizeof(char)); \ + for(i=0; i +#include +#include + +#include "util.h" + + +/* this function converts the spin-density into total density and + relative magnetization */ +/* inline */ void +XC(rho2dzeta)(int nspin, const FLOAT *rho, FLOAT *d, FLOAT *zeta) +{ + if(nspin==XC_UNPOLARIZED){ + *d = max(rho[0], 0.0); + *zeta = 0.0; + }else{ + *d = rho[0] + rho[1]; + if(*d > 0.0){ + *zeta = (rho[0] - rho[1])/(*d); + *zeta = min(*zeta, 1.0); + *zeta = max(*zeta, -1.0); + }else{ + *d = 0.0; + *zeta = 0.0; + } + } +} + +/* inline */ void +XC(fast_fzeta)(const FLOAT x, const int nspin, const int order, FLOAT * fz){ + + FLOAT aa, bb, aa2, bb2; + + if(nspin != XC_UNPOLARIZED){ + aa = CBRT(1.0 + x); + bb = CBRT(1.0 - x); + + aa2 = aa*aa; + bb2 = bb*bb; + + fz[0] = (aa2*aa2 + bb2*bb2 - 2.0)/FZETAFACTOR; + if(order < 1) return; + fz[1] = (aa - bb)*(4.0/3.0)/FZETAFACTOR; + if(order < 2) return; + fz[2] = ((4.0/9.0)/FZETAFACTOR)*(ABS(x)==1.0 ? (FLT_MAX) : (pow(1.0 + (x), -2.0/3.0) + pow(1.0 - (x), -2.0/3.0))); + if(order < 3) return; + fz[3] = (-(8.0/27.0)/FZETAFACTOR)*(ABS(x)==1.0 ? (FLT_MAX) : (pow(1.0 + (x), -5.0/3.0) - pow(1.0 - (x), -5.0/3.0))); + } else { + fz[0] = 0.0; + fz[1] = 0.0; + fz[2] = (8.0/9.0)/FZETAFACTOR; + fz[3] = 0.0; + } +} + +/* initializes the mixing */ +void +XC(mix_init)(XC(func_type) *p, int n_funcs, const int *funcs_id, const FLOAT *mix_coef) +{ + int ii; + + assert(p != NULL); + assert(p->func_aux == NULL && p->mix_coef == NULL); + + /* allocate structures needed for */ + p->n_func_aux = n_funcs; + p->mix_coef = (FLOAT *) malloc(n_funcs*sizeof(FLOAT)); + p->func_aux = (XC(func_type) **) malloc(n_funcs*sizeof(XC(func_type) *)); + + for(ii=0; iimix_coef[ii] = mix_coef[ii]; + p->func_aux[ii] = (XC(func_type) *) malloc(sizeof(XC(func_type))); + XC(func_init) (p->func_aux[ii], funcs_id[ii], p->nspin); + } + +} + +xc_gga_enhancement_t +XC(get_gga_enhancement_factor)(int func_id) +{ + switch(func_id){ + + case XC_GGA_X_WC: + return XC(gga_x_wc_enhance); + + case XC_GGA_X_PBE: + case XC_GGA_X_PBE_R: + case XC_GGA_X_PBE_SOL: + case XC_GGA_X_XPBE: + case XC_GGA_X_PBE_JSJR: + case XC_GGA_X_PBEK1_VDW: + case XC_GGA_X_RGE2: + case XC_GGA_X_APBE: + case XC_GGA_X_PBEINT: + case XC_GGA_X_PBE_TCA: + return XC(gga_x_pbe_enhance); + + case XC_GGA_X_PW91: + case XC_GGA_X_MPW91: + return XC(gga_x_pw91_enhance); + + case XC_GGA_X_RPBE: + return XC(gga_x_rpbe_enhance); + + case XC_GGA_X_HTBS: + return XC(gga_x_htbs_enhance); + + case XC_GGA_X_B86: + return XC(gga_x_b86_enhance); + + case XC_GGA_X_B86_MGC: + return XC(gga_x_b86_mgc_enhance); + + case XC_GGA_X_B88: + case XC_GGA_X_OPTB88_VDW: + case XC_GGA_X_MB88: + return XC(gga_x_b88_enhance); + + case XC_GGA_X_G96: + return XC(gga_x_g96_enhance); + + case XC_GGA_X_PW86: + case XC_GGA_X_RPW86: + return XC(gga_x_pw86_enhance); + + case XC_GGA_X_AIRY: + case XC_GGA_X_LAG: + return XC(gga_x_airy_enhance); + + case XC_GGA_X_BAYESIAN: + return XC(gga_x_bayesian_enhance); + + case XC_GGA_X_BPCCAC: + return XC(gga_x_bpccac_enhance); + + case XC_GGA_X_C09X: + return XC(gga_x_c09x_enhance); + + case XC_GGA_X_AM05: + return XC(gga_x_am05_enhance); + + case XC_GGA_X_DK87_R1: + case XC_GGA_X_DK87_R2: + return XC(gga_x_dk87_enhance); + + case XC_GGA_X_HERMAN: + return XC(gga_x_herman_enhance); + + case XC_GGA_X_LG93: + return XC(gga_x_lg93_enhance); + + case XC_GGA_X_LV_RPW86: + return XC(gga_x_lv_rpw86_enhance); + + case XC_GGA_X_MPBE: + return XC(gga_x_mpbe_enhance); + + case XC_GGA_X_OPTX: + return XC(gga_x_optx_enhance); + + case XC_GGA_X_SOGGA11: + case XC_HYB_GGA_X_SOGGA11_X: + return XC(gga_x_sogga11_enhance); + + case XC_GGA_X_SSB_SW: + case XC_GGA_X_SSB: + case XC_GGA_X_SSB_D: + return XC(gga_x_ssb_sw_enhance); + + case XC_GGA_X_VMT_PBE: + case XC_GGA_X_VMT_GE: + case XC_GGA_X_VMT84_PBE: + case XC_GGA_X_VMT84_GE: + return XC(gga_x_vmt_enhance); + + default: + fprintf(stderr, "Internal error in get_gga_enhancement\n"); + exit(1); + } +} diff --git a/libxc/src/util.h b/libxc/src/util.h new file mode 100644 index 000000000..36af656ec --- /dev/null +++ b/libxc/src/util.h @@ -0,0 +1,266 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef _LDA_H +#define _LDA_H + +#include +#include + +#include "xc.h" + +/* xc_config.h needs to be included to use FLOAT and related macros*/ +#include "xc_config.h" + +/* If strict ANSI, then some useful macros are not defined */ +#if defined(__STRICT_ANSI__) +# define M_E 2.7182818284590452354 /* e */ +# define M_PI 3.14159265358979323846 /* pi */ +# define M_SQRT2 1.41421356237309504880 /* sqrt(2) */ +double asinh (double x); +float asinhf(float x); +#endif + +#define M_SQRTPI 1.772453850905516027298167483341145182798L +#define M_SQRT3 1.732050807568877293527446341505872366943L +#define M_CBRT2 1.259921049894873164767210607278228350570L +#define M_CBRT3 1.442249570307408382321638310780109588392L +#define M_CBRT4 1.587401051968199474751705639272308260391L +#define M_CBRT5 1.709975946676696989353108872543860109868L +#define M_CBRT6 1.817120592832139658891211756327260502428L +#define M_CBRT7 1.912931182772389101199116839548760282862L +#define M_CBRT9 2.080083823051904114530056824357885386338L + +/* Very useful macros */ +#define min(x,y) ((x=0; i--){ + b2 = b1; + b1 = b0; + b0 = twox*b1 - b2 + cs[i]; + } + + return 0.5*(b0 - b2); +} + +FLOAT XC(bessel_I0_scaled)(const FLOAT x); +FLOAT XC(bessel_I0)(const FLOAT x); +FLOAT XC(bessel_K0_scaled)(const FLOAT x); +FLOAT XC(bessel_K0)(const FLOAT x); +FLOAT XC(bessel_K1_scaled)(const FLOAT x); +FLOAT XC(bessel_K1)(const FLOAT x); + +FLOAT XC(expint_e1_impl)(const FLOAT x, const int scale); +static inline FLOAT expint_e1(const FLOAT x) { return XC(expint_e1_impl)( x, 0); } +static inline FLOAT expint_e1_scaled(const FLOAT x) { return XC(expint_e1_impl)( x, 1); } +static inline FLOAT expint_Ei(const FLOAT x) { return -XC(expint_e1_impl)(-x, 0); } +static inline FLOAT expint_Ei_scaled(const FLOAT x) { return -XC(expint_e1_impl)(-x, 1); } + +/* integration */ +typedef void integr_fn(FLOAT *x, int n, void *ex); +FLOAT XC(integrate)(integr_fn func, void *ex, FLOAT a, FLOAT b); +void XC(rdqagse)(integr_fn f, void *ex, FLOAT *a, FLOAT *b, + FLOAT *epsabs, FLOAT *epsrel, int *limit, FLOAT *result, + FLOAT *abserr, int *neval, int *ier, FLOAT *alist__, + FLOAT *blist, FLOAT *rlist, FLOAT *elist, int *iord, int *last); + +typedef struct XC(functional_key_t) { + char name[256]; + int number; +} XC(functional_key_t); + + +#define M_C 137.0359996287515 /* speed of light */ + +#define RS_FACTOR 0.6203504908994000166680068120477781673508 /* (3/(4*Pi))^1/3 */ +#define X_FACTOR_C 0.9305257363491000250020102180716672510262 /* 3/8*cur(3/pi)*4^(2/3) */ +#define X_FACTOR_2D_C 1.504505556127350098528211870828726895584 /* 8/(3*sqrt(pi)) */ +#define K_FACTOR_C 4.557799872345597137288163759599305358515 /* 3/10*(6*pi^2)^(2/3) */ +#define X2S 0.1282782438530421943003109254455883701296 /* 1/(2*(6*pi^2)^(1/3)) */ +#define X2S_2D 0.1410473958869390717370198628901931464610 /* 1/(2*(4*pi)^(1/2)) */ +#define FZETAFACTOR 0.5198420997897463295344212145564567011405 /* 2^(4/3) - 2 */ + +#define RS(x) (RS_FACTOR/CBRT(x)) +#define FZETA(x) ((POW(1.0 + (x), 4.0/3.0) + POW(1.0 - (x), 4.0/3.0) - 2.0)/FZETAFACTOR) +#define DFZETA(x) ((CBRT(1.0 + (x)) - CBRT(1.0 - (x)))*(4.0/3.0)/FZETAFACTOR) +#define D2FZETA(x) ((4.0/9.0)/FZETAFACTOR)* \ + (ABS(x)==1.0 ? (FLT_MAX) : (pow(1.0 + (x), -2.0/3.0) + pow(1.0 - (x), -2.0/3.0))) +#define D3FZETA(x) (-(8.0/27.0)/FZETAFACTOR)* \ + (ABS(x)==1.0 ? (FLT_MAX) : (pow(1.0 + (x), -5.0/3.0) - pow(1.0 - (x), -5.0/3.0))) + +#define MIN_DENS 5.0e-13 +#define MIN_GRAD 5.0e-13 +#define MIN_TAU 5.0e-13 +#define MIN_ZETA 5.0e-13 + +/* The following inlines confuse the xlc compiler */ +void XC(rho2dzeta)(int nspin, const FLOAT *rho, FLOAT *d, FLOAT *zeta); +void XC(fast_fzeta)(const FLOAT x, const int nspin, const int order, FLOAT * fz); +void XC(mix_init)(XC(func_type) *p, int n_funcs, const int *funcs_id, const FLOAT *mix_coef); + +/* LDAs */ +typedef struct XC(lda_work_t) { + int order; /* to which order should I return the derivatives */ + FLOAT rs[3], zeta; + + FLOAT zk; + FLOAT dedrs, dedz; /* first derivatives of zk */ + FLOAT d2edrs2, d2edrsz, d2edz2; /* second derivatives of zk */ + FLOAT d3edrs3, d3edrs2z, d3edrsz2, d3edz3; /* third derivatives of zk */ +} XC(lda_work_t); + +void XC(lda_fxc_fd)(const XC(func_type) *p, int np, const FLOAT *rho, FLOAT *fxc); +void XC(lda_kxc_fd)(const XC(func_type) *p, int np, const FLOAT *rho, FLOAT *kxc); + +/* the different possibilities for screening the interaction */ +#define XC_RSF_ERF 0 +#define XC_RSF_ERF_GAU 1 +#define XC_RSF_YUKAWA 2 + +void XC(lda_x_attenuation_function)(int interaction, int order, FLOAT aa, FLOAT *f, FLOAT *df, FLOAT *d2f, FLOAT *d3f); +void XC(lda_stoll)(const XC(func_type) *pw, FLOAT dens, FLOAT zeta, int order, XC(lda_work_t) res[3]); + +/* direct access to the internal functions */ +void XC(lda_c_hl_func) (const XC(func_type) *p, XC(lda_work_t) *r); +void XC(lda_c_pw_func) (const XC(func_type) *p, XC(lda_work_t) *r); +void XC(lda_c_pz_func) (const XC(func_type) *p, XC(lda_work_t) *r); +void XC(lda_c_rc04_func)(const XC(func_type) *p, XC(lda_work_t) *r); +void XC(lda_c_2d_amgb_func)(const XC(func_type) *p, XC(lda_work_t) *r); + + +/* GGAs */ +void work_gga_becke_init(XC(func_type) *p); + +/* exchange enhancement factors: if you add one, please add it also to the util.c */ +typedef void(*xc_gga_enhancement_t)(const XC(func_type) *, int, FLOAT, FLOAT *, FLOAT *, FLOAT *, FLOAT *); +xc_gga_enhancement_t XC(get_gga_enhancement_factor)(int func_id); + +void XC(gga_x_wc_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_pbe_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_pw91_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_rpbe_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_htbs_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_b86_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_b86_mgc_enhance)(const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_b88_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_g96_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_pw86_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_airy_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_ak13_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_bayesian_enhance)(const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_bpccac_enhance)(const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_c09x_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_am05_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_dk87_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_herman_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_lg93_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_lv_rpw86_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_mpbe_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_optx_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_sogga11_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_ssb_sw_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); +void XC(gga_x_vmt_enhance) (const XC(func_type) *p, int order, FLOAT x, FLOAT *f, FLOAT *dfdx, FLOAT *d2fdx2, FLOAT *d3fdx3); + +/* correlation functions */ + +typedef struct XC(gga_work_c_t) { + int order; /* to which order should I return the derivatives */ + + FLOAT dens, ds[2], sigmat, sigmas[3]; + FLOAT rs, zeta, xt, xs[2]; + + FLOAT f; + + FLOAT dfdrs, dfdz, dfdxt, dfdxs[2]; + FLOAT d2fdrs2, d2fdrsz, d2fdrsxt, d2fdrsxs[2], d2fdz2, + d2fdzxt, d2fdzxs[2], d2fdxt2, d2fdxtxs[2], d2fdxs2[3]; + + FLOAT d3fdrs3, d3fdz3, d3fdxt3, d3fdxs3[4]; /* uuu, uud, udd, ddd */ + FLOAT d3fdrs2z, d3fdrs2xt, d3fdrs2xs[2]; + FLOAT d3fdrsz2, d3fdz2xt, d3fdz2xs[2]; + FLOAT d3fdrsxt2, d3fdzxt2, d3fdxt2xs[2]; + FLOAT d3fdrsxs2[3], d3fdzxs2[3],d3fdxtxs2[3]; + FLOAT d3fdrszxt, d3fdrszxs[2], d3fdrsxtxs[2], d3fdzxtxs[2]; +} XC(gga_work_c_t); + +void XC(gga_c_pw91_func)(const XC(func_type) *p, XC(gga_work_c_t) *r); +void XC(gga_c_pbe_func) (const XC(func_type) *p, XC(gga_work_c_t) *r); + +/* meta GGAs */ +typedef struct XC(mgga_work_x_t) { + int order; /* to which order should I return the derivatives */ + FLOAT rs, zeta, x, t, u; + + FLOAT f; /* enhancement factor */ + FLOAT dfdrs, dfdx, dfdt, dfdu; /* first derivatives of f */ + FLOAT d2fdrs2, d2fdx2, d2fdt2, d2fdu2; /* second derivatives of zk */ + FLOAT d2fdrsx, d2fdrst, d2fdrsu, d2fdxt, d2fdxu, d2fdtu; +} XC(mgga_work_x_t); + +typedef struct XC(mgga_work_c_t) { + int order; /* to which order should I return the derivatives */ + + FLOAT dens, ds[2], sigmat, sigmas[3]; + FLOAT rs, zeta, xt, xs[2], ts[2], us[2]; + + FLOAT f; + FLOAT dfdrs, dfdz, dfdxt, dfdxs[2], dfdts[2], dfdus[2]; + FLOAT d2fdrs2, d2fdrsz, d2fdrsxt, d2fdrsxs[2], d2fdrsts[2], d2fdrsus[2]; + FLOAT d2fdz2, d2fdzxt, d2fdzxs[2], d2fdzts[2], d2fdzus[2]; + FLOAT d2fdxt2, d2fdxtxs[2], d2fdxtts[2], d2fdxtus[2]; + FLOAT d2fdxs2[3], d2fxsts[4], d2fxsus[4]; + FLOAT d2dts2[3], d2fdtsus[4]; + FLOAT d2fdus2[3]; +} XC(mgga_work_c_t); + + +void XC(pbe_c_stoll) (const XC(func_type) *pbe, int get_max, const XC(mgga_work_c_t) *in, XC(gga_work_c_t) out[3]); + +void XC(mgga_series_w)(int order, int n, const FLOAT *a, FLOAT t, FLOAT *fw, FLOAT *dfwdt); +void XC(mgga_b97_func_g)(const FLOAT *cc, FLOAT gamma, FLOAT s, int order, FLOAT *g, FLOAT *dgds, FLOAT *d2gds2); +void XC(mgga_x_gvt4_func)(int order, FLOAT x, FLOAT z, FLOAT alpha, const FLOAT *d, FLOAT *h, FLOAT *dhdx, FLOAT *dhdz); + +/* useful MACROS */ +#define DFRACTION(num, dnum, den, dden) \ + (((dnum)*(den) - (num)*(dden))/((den)*(den))) +#define D2FRACTION(num, dnum, d2num, den, dden, d2den) \ + ((2.0*(num)*(dden)*(dden) - 2.0*(den)*(dden)*(dnum) - (den)*(num)*(d2den) + (den)*(den)*(d2num))/((den)*(den)*(den))) +#define D3FRACTION(num, dnum, d2num, d3num, den, dden, d2den, d3den) \ + ((-(num)*(6.0*(dden)*(dden)*(dden) - 6.0*(den)*(dden)*(d2den) + (den)*(den)*(d3den)) + \ + (den)*(6.0*(dden)*(dden)*(dnum) - 3.0*(den)*(dden)*(d2num) + (den)*(-3.0*(dnum)*(d2den) + (den)*(d3num))))/((den)*(den)*(den)*(den))) + +#endif diff --git a/libxc/src/version.c b/libxc/src/version.c new file mode 100644 index 000000000..1c41e5177 --- /dev/null +++ b/libxc/src/version.c @@ -0,0 +1,31 @@ +/* + Copyright (C) 2012 M.A.L. Marques, M. Oliveira + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include + +#include "xc.h" +#include "config.h" + +void XC(version)(int *major, int *minor) { + const char *version_string = PACKAGE_VERSION; + + *major = -1; + *minor = -1; + sscanf(version_string,"%d.%d",major,minor); + +} diff --git a/libxc/src/work_gga_c.c b/libxc/src/work_gga_c.c new file mode 100644 index 000000000..0abd5378d --- /dev/null +++ b/libxc/src/work_gga_c.c @@ -0,0 +1,363 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include +#include + +#include "util.h" + +static void +work_gga_c(const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, + FLOAT *v2rho2, FLOAT *v2rhosigma, FLOAT *v2sigma2, + FLOAT *v3rho3, FLOAT *v3rho2sigma, FLOAT *v3rhosigma2, FLOAT *v3sigma3) +{ + XC(gga_work_c_t) r; + FLOAT min_grad2 = p->info->min_grad*p->info->min_grad; + int ip; + + FLOAT drs, dxtdn, dxtds, ndzdn[2], dxsdn[2], dxsds[2];; + FLOAT d2rs, d2xtdn2, d2xtds2, d2xtdns, d2xsdn2[2], d2xsds2[2], d2xsdns[2]; + FLOAT d3rs, d3xtdn3, d3xtdn2s, d3xtdns2, d3xtds3, d3xsdn3[2], d3xsdn2s[2], d3xsdns2[2], d3xsds3[2]; + + /* set all elements of r to zero */ + memset(&r, 0, sizeof(r)); + + r.order = -1; + if(zk != NULL) r.order = 0; + if(vrho != NULL) r.order = 1; + if(v2rho2 != NULL) r.order = 2; + if(v3rho3 != NULL) r.order = 3; + + if(r.order < 0) return; + + for(ip = 0; ip < np; ip++){ + XC(rho2dzeta)(p->nspin, rho, &(r.dens), &(r.zeta)); + + if(r.dens < p->info->min_dens) goto end_ip_loop; + + r.rs = RS(r.dens); + if(p->nspin == XC_UNPOLARIZED){ + r.ds[0] = r.dens/2.0; + r.ds[1] = r.ds[0]; + + r.sigmat = max(min_grad2, sigma[0]); + r.xt = SQRT(r.sigmat)/ POW(r.dens, 4.0/3.0); + + r.sigmas[0] = r.sigmat/4.0; + r.sigmas[1] = r.sigmas[0]; + r.sigmas[2] = r.sigmas[0]; + + r.xs[0] = CBRT(2.0)*r.xt; + r.xs[1] = r.xs[0]; + }else{ + r.ds[0] = max(p->info->min_dens, rho[0]); + r.ds[1] = max(p->info->min_dens, rho[1]); + + r.sigmat = max(min_grad2, sigma[0] + 2.0*sigma[1] + sigma[2]); + r.xt = SQRT(r.sigmat)/ POW(r.dens, 4.0/3.0); + + r.sigmas[0] = max(min_grad2, sigma[0]); + r.sigmas[1] = max(min_grad2, sigma[1]); + r.sigmas[2] = max(min_grad2, sigma[2]); + + r.xs[0] = SQRT(r.sigmas[0])/POW(r.ds[0], 4.0/3.0); + r.xs[1] = SQRT(r.sigmas[2])/POW(r.ds[1], 4.0/3.0); + } + + func(p, &r); + + if(zk != NULL && (p->info->flags & XC_FLAGS_HAVE_EXC)) + *zk = r.f; + + if(r.order < 1) goto end_ip_loop; + + /* setup auxiliary variables */ + drs = -r.rs/(3.0*r.dens); + dxtdn = -4.0*r.xt/(3.0*r.dens); + dxtds = r.xt/(2.0*r.sigmat); + if(p->nspin == XC_POLARIZED){ + ndzdn[1] = -(r.zeta + 1.0); + ndzdn[0] = -(r.zeta - 1.0); + + dxsdn[1] = -4.0/3.0*r.xs[1]/r.ds[1]; + dxsdn[0] = -4.0/3.0*r.xs[0]/r.ds[0]; + + dxsds[1] = r.xs[1]/(2.0*r.sigmas[2]); + dxsds[0] = r.xs[0]/(2.0*r.sigmas[0]); + }else{ + dxsdn[0] = M_CBRT2*dxtdn; + dxsds[0] = M_CBRT2*dxtds; + } + + if(vrho != NULL && (p->info->flags & XC_FLAGS_HAVE_VXC)){ + vrho[0] = r.f + r.dens*(r.dfdrs*drs + r.dfdxt*dxtdn); + vsigma[0] = r.dens*r.dfdxt*dxtds; + + if(p->nspin == XC_POLARIZED){ + vrho[1] = vrho[0] + r.dfdz*ndzdn[1] + r.dens*r.dfdxs[1]*dxsdn[1]; + vrho[0] = vrho[0] + r.dfdz*ndzdn[0] + r.dens*r.dfdxs[0]*dxsdn[0];; + + vsigma[2] = vsigma[0] + r.dens*r.dfdxs[1]*dxsds[1]; + vsigma[1] = 2.0*vsigma[0]; + vsigma[0] = vsigma[0] + r.dens*r.dfdxs[0]*dxsds[0]; + + }else{ + vrho[0] += 2.0*r.dens*r.dfdxs[0]*dxsdn[0]; /* factor of 2 comes from sum over sigma */ + vsigma[0] += 2.0*r.dens*r.dfdxs[0]*dxsds[0]; + } + } + + if(r.order < 2) goto end_ip_loop; + + /* setup auxiliary variables */ + d2rs = -4.0*drs/(3.0*r.dens); + d2xtdn2 = -7.0*dxtdn/(3.0*r.dens); + d2xtds2 = -dxtds/(2.0*r.sigmat); + d2xtdns = dxtdn/(2.0*r.sigmat); + if(p->nspin == XC_POLARIZED){ + d2xsdn2[0] = -7.0*dxsdn[0]/(3.0*r.ds[0]); + d2xsdn2[1] = -7.0*dxsdn[1]/(3.0*r.ds[1]); + + d2xsdns[0] = -4.0/3.0*dxsds[0]/r.ds[0]; + d2xsdns[1] = -4.0/3.0*dxsds[1]/r.ds[1]; + + d2xsds2[0] = -dxsds[0]/(2.0*r.sigmas[0]); + d2xsds2[1] = -dxsds[1]/(2.0*r.sigmas[2]); + }else{ + d2xsdn2[0] = M_CBRT2*d2xtdn2; + d2xsdns[0] = M_CBRT2*d2xtdns; + d2xsds2[0] = M_CBRT2*d2xtds2; + } + + if(v2rho2 != NULL && (p->info->flags & XC_FLAGS_HAVE_FXC)){ + v2rho2[0] = 2.0*r.dfdrs*drs + 2.0*r.dfdxt*dxtdn + + r.dens*(r.d2fdrs2*drs*drs + r.d2fdxt2*dxtdn*dxtdn + r.dfdrs*d2rs + r.dfdxt*d2xtdn2 + 2.0*r.d2fdrsxt*drs*dxtdn); + + v2sigma2[0] = r.dens*(r.d2fdxt2*dxtds*dxtds + r.dfdxt*d2xtds2); + + v2rhosigma[0] = r.dfdxt*dxtds + r.dens*(r.d2fdrsxt*drs*dxtds + r.d2fdxt2*dxtdn*dxtds + r.dfdxt*d2xtdns); + + if(p->nspin == XC_POLARIZED){ + int is; + + for(is=2; is>=0; is--){ + int s1 = (is > 1) ? 1 : 0; /* {0, 0, 1}[is] */ + int s2 = (is > 0) ? 1 : 0; /* {0, 1, 1}[is] */ + + v2rho2[is] = v2rho2[0]; + + v2rho2[is] += r.dfdxs[s1]*dxsdn[s1] + + ndzdn[s1]*(r.d2fdrsz*drs + r.d2fdzxt*dxtdn + r.d2fdzxs[s2]*dxsdn[s2]) + + r.dens*(r.d2fdrsxs[s1]*drs*dxsdn[s1] + r.d2fdxtxs[s1]*dxtdn*dxsdn[s1]); + + v2rho2[is] += r.dfdxs[s2]*dxsdn[s2] + + ndzdn[s2]*(r.d2fdrsz*drs + r.d2fdzxt*dxtdn + r.d2fdzxs[s1]*dxsdn[s1]) + + r.dens*(r.d2fdrsxs[s2]*drs*dxsdn[s2] + r.d2fdxtxs[s2]*dxtdn*dxsdn[s2]); + + v2rho2[is] += r.d2fdz2*ndzdn[s1]*ndzdn[s2]/r.dens + r.dens*r.d2fdxs2[is]*dxsdn[s1]*dxsdn[s2]; + + if(is != 1) + v2rho2[is] += r.dens*r.dfdxs[s1]*d2xsdn2[s1]; + } + + /* v2sigma */ + v2sigma2[5] = v2sigma2[0] + r.dens* + (2.0*r.d2fdxtxs[1]*dxtds*dxsds[1] + r.d2fdxs2[2]*dxsds[1]*dxsds[1] + r.dfdxs[1]*d2xsds2[1]); + v2sigma2[4] = 2.0*v2sigma2[0] + r.dens* + (2.0*r.d2fdxtxs[1]*dxtds*dxsds[1]); + v2sigma2[3] = 4.0*v2sigma2[0]; + v2sigma2[2] = v2sigma2[0] + r.dens* + ( dxtds*(r.d2fdxtxs[0]*dxsds[0] + r.d2fdxtxs[1]*dxsds[1]) + r.d2fdxs2[1]*dxsds[0]*dxsds[1]); + v2sigma2[1] = 2.0*v2sigma2[0] + r.dens* + (2.0*r.d2fdxtxs[0]*dxtds*dxsds[0]); + v2sigma2[0] = v2sigma2[0] + r.dens* + (2.0*r.d2fdxtxs[0]*dxtds*dxsds[0] + r.d2fdxs2[0]*dxsds[0]*dxsds[0] + r.dfdxs[0]*d2xsds2[0]); + + /* v2rhosigma */ + v2rhosigma[5] = v2rhosigma[0] + r.dfdxs[1]*dxsds[1] + ndzdn[1]*(r.d2fdzxt*dxtds + r.d2fdzxs[1]*dxsds[1]) + + r.dens*(r.d2fdrsxs[1]*drs*dxsds[1] + r.d2fdxtxs[1]*(dxsdn[1]*dxtds + dxtdn*dxsds[1]) + r.d2fdxs2[2]*dxsdn[1]*dxsds[1] + + r.dfdxs[1]*d2xsdns[1]); + + v2rhosigma[4] = 2.0*v2rhosigma[0] + 2.0*ndzdn[1]*r.d2fdzxt*dxtds + + 2.0*r.dens*r.d2fdxtxs[1]*dxsdn[1]*dxtds; + + v2rhosigma[3] = v2rhosigma[0] + r.dfdxs[0]*dxsds[0] + ndzdn[1]*(r.d2fdzxt*dxtds + r.d2fdzxs[0]*dxsds[0]) + + r.dens*(r.d2fdrsxs[0]*drs*dxsds[0] + r.d2fdxtxs[1]*(dxsdn[1]*dxtds + dxtdn*dxsds[0]) + r.d2fdxs2[1]*dxsdn[1]*dxsds[0]); + + v2rhosigma[2] = v2rhosigma[0] + r.dfdxs[1]*dxsds[1] + ndzdn[0]*(r.d2fdzxt*dxtds + r.d2fdzxs[1]*dxsds[1]) + + r.dens*(r.d2fdrsxs[1]*drs*dxsds[1] + r.d2fdxtxs[0]*(dxsdn[0]*dxtds + dxtdn*dxsds[1]) + r.d2fdxs2[1]*dxsdn[0]*dxsds[1]); + + v2rhosigma[1] = 2.0*v2rhosigma[0] + 2.0*ndzdn[0]*r.d2fdzxt*dxtds + + 2.0*r.dens*r.d2fdxtxs[0]*dxsdn[0]*dxtds; + + v2rhosigma[0] = v2rhosigma[0] + r.dfdxs[0]*dxsds[0] + ndzdn[0]*(r.d2fdzxt*dxtds + r.d2fdzxs[0]*dxsds[0]) + + r.dens*(r.d2fdrsxs[0]*drs*dxsds[0] + r.d2fdxtxs[0]*(dxsdn[0]*dxtds + dxtdn*dxsds[0]) + r.d2fdxs2[0]*dxsdn[0]*dxsds[0] + + r.dfdxs[0]*d2xsdns[0]); + + }else{ + v2rho2[0] += 2.0*dxsdn[0]* + (2.0*r.dfdxs[0] + r.dens*(2.0*r.d2fdrsxs[0]*drs + 2.0*r.d2fdxtxs[0]*dxtdn + (r.d2fdxs2[0] + r.d2fdxs2[1])*dxsdn[0])) + + 2.0*r.dens*r.dfdxs[0]*d2xsdn2[0]; + + v2sigma2[0] += 2.0*r.dens*((r.d2fdxs2[0] + r.d2fdxs2[1])*dxsds[0]*dxsds[0] + r.dfdxs[0]*d2xsds2[0] + 2.0*r.d2fdxtxs[0]*dxtds*dxsds[0]); + + v2rhosigma[0] += 2.0*r.dens*r.d2fdxtxs[0]*(dxsdn[0]*dxtds + dxtdn*dxsds[0]) + + 2.0*(r.dfdxs[0] + r.dens*(r.d2fdrsxs[0]*drs + (r.d2fdxs2[0] + r.d2fdxs2[1])*dxsdn[0]))*dxsds[0] + + 2.0*r.dens*r.dfdxs[0]*d2xsdns[0]; + } + } + + if(r.order < 3) goto end_ip_loop; + + /* setup auxiliary variables */ + d3rs = -7.0*d2rs/(3.0*r.dens); + + d3xtdn3 = -10.0*d2xtdn2/(3.0*r.dens); + d3xtdn2s = d2xtdn2/(2.0*r.sigmat); + d3xtdns2 = -d2xtdns/(2.0*r.sigmat); + d3xtds3 = -3.0*d2xtds2/(2.0*r.sigmat); + + if(p->nspin == XC_POLARIZED){ + /* not done */ + d3xsdn3[0] = -7.0*dxsdn[0]/(3.0*r.ds[0]); + d3xsdn3[1] = -7.0*dxsdn[1]/(3.0*r.ds[1]); + + d3xsdn2s[0] = -4.0/3.0*dxsds[0]/r.ds[0]; + d3xsdn2s[1] = -4.0/3.0*dxsds[1]/r.ds[1]; + + d3xsds3[0] = -dxsds[0]/(2.0*r.sigmas[0]); + d3xsds3[1] = -dxsds[1]/(2.0*r.sigmas[2]); + }else{ + d3xsdn3[0] = M_CBRT2*d3xtdn3; + d3xsdn2s[0] = M_CBRT2*d3xtdn2s; + d3xsdns2[0] = M_CBRT2*d3xtdns2; + d3xsds3[0] = M_CBRT2*d3xtds3; + } + + if(v3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC)){ + v3rho3[0] = + r.dfdrs * (3.0*d2rs + r.dens*d3rs) + + r.dfdxt * (3.0*d2xtdn2 + r.dens*d3xtdn3) + + r.d2fdrs2 * 3.0*drs*(drs + r.dens*d2rs) + + r.d2fdrsxt * (6.0*drs*dxtdn + 3.0*r.dens*d2rs*dxtdn + 3.0*r.dens*drs*d2xtdn2) + + r.d2fdxt2 * 3.0*dxtdn*(dxtdn + r.dens*d2xtdn2) + + r.d3fdrs3 * r.dens*drs*drs*drs + + r.d3fdrs2xt * 3.0*r.dens*drs*drs*dxtdn + + r.d3fdrsxt2 * 3.0*r.dens*drs*dxtdn*dxtdn + + r.d3fdxt3 * r.dens*dxtdn*dxtdn*dxtdn; + + v3rhosigma2[0] = r.dfdxt*d2xtds2 + r.d2fdxt2*dxtds*dxtds + + r.dens*(r.dfdxt*d3xtdns2 + r.d2fdxt2*(d2xtds2*dxtdn + 2.0*dxtds*d2xtdns) + r.d2fdrsxt*d2xtds2*drs + + dxtds*dxtds*(r.d3fdxt3*dxtdn + r.d3fdrsxt2*drs)); + + v3rho2sigma[0] = 2.0*r.dfdxt*d2xtdns + 2.0*r.d2fdxt2*dxtds*dxtdn + 2.0*r.d2fdrsxt*drs*dxtds + + r.dens*(r.dfdxt*d3xtdn2s + r.d2fdxt2*(d2xtdn2*dxtds + 2.0*dxtdn*d2xtdns) + r.d2fdrsxt*(2.0*drs*d2xtdns + d2rs*dxtds) + + r.d3fdrs2xt*drs*drs*dxtds + 2.0*r.d3fdrsxt2*drs*dxtdn*dxtds + r.d3fdxt3*dxtdn*dxtdn*dxtds); + + v3sigma3[0] = r.dens*(r.d3fdxt3*dxtds*dxtds*dxtds + 3.0*r.d2fdxt2*d2xtds2*dxtds + r.dfdxt*d3xtds3); + + if(p->nspin == XC_POLARIZED){ + int is; + + for(is=3; is>=0; is--){ + int s1 = (is > 2) ? 1 : 0; /* {0, 0, 0, 1}[is] */ + int s2 = (is > 1) ? 1 : 0; /* {0, 0, 1, 1}[is] */ + int s3 = (is > 0) ? 1 : 0; /* {0, 1, 1, 1}[is] */ + + int s12 = s1 + s2; /* 0 + 0 = 0 */ + int s13 = s1 + s3; /* 0 + 1 = 1 + 0 = 1 */ + int s23 = s2 + s3; /* 1 + 1 = 2 */ + int s123 = s1 + s2 + s3; + + v3rho3[is] = v3rho3[0]; + + if(s1 == s2){ + v3rho3[is] += + r.dfdxs[s1] * d2xsdn2[s1] + + r.d2fdxs2[s23] * r.dens*d2xsdn2[s2]*dxsdn[s3]; + } + + if(s2 == s3){ + v3rho3[is] += + r.dfdxs[s2] * d2xsdn2[s2] + + r.d2fdxs2[s13] * r.dens*d2xsdn2[s3]*dxsdn[s1]; + } + + if(s1 == s3){ + v3rho3[is] += + r.dfdxs[s3] * d2xsdn2[s3] + + r.d2fdxs2[s12] * r.dens*d2xsdn2[s1]*dxsdn[s2]; + } + + if(s1 == s2 && s2 == s3) + v3rho3[is] += r.dens*r.dfdxs[s1] * d3xsdn3[s1]; + + v3rho3[0] += + r.d2fdz2 * (-ndzdn[s1]*ndzdn[s2] - ndzdn[s1]*ndzdn[s3] - ndzdn[s2]*ndzdn[s3])/(r.dens*r.dens) + + r.d3fdz3 * ndzdn[s1]*ndzdn[s2]*ndzdn[s3]/(r.dens*r.dens) + + r.d3fdxs3[s123] * r.dens*dxsdn[s1]*dxsdn[s2]*dxsdn[s3] + + r.d3fdrs2z * drs*drs*(ndzdn[s1] + ndzdn[s2] + ndzdn[s3]) + + r.dens*drs*drs*(r.d3fdrs2xs[s1]*dxsdn[s1] + r.d3fdrs2xs[s2]*dxsdn[s2] + r.d3fdrs2xs[s3]*dxsdn[s3]) + + r.d3fdzxt2 * dxtdn*dxtdn*(ndzdn[s1] + ndzdn[s2] + ndzdn[s3]) + + r.dens*dxtdn*dxtdn*(r.d3fdxt2xs[s1]*dxsdn[s1] + r.d3fdxt2xs[s2]*dxsdn[s2] + r.d3fdxt2xs[s3]*dxsdn[s3]) + + r.d3fdrsz2 * drs *(ndzdn[s1]*ndzdn[s2] + ndzdn[s1]*ndzdn[s3] + ndzdn[s2]*ndzdn[s3])/r.dens + + r.d3fdz2xt * dxtdn*(ndzdn[s1]*ndzdn[s2] + ndzdn[s1]*ndzdn[s3] + ndzdn[s2]*ndzdn[s3])/r.dens + + r.d3fdz2xs[s1] * ndzdn[s2]*ndzdn[s3]*dxsdn[s1]/r.dens + + r.d3fdz2xs[s2] * ndzdn[s1]*ndzdn[s3]*dxsdn[s2]/r.dens + + r.d3fdz2xs[s3] * ndzdn[s1]*ndzdn[s2]*dxsdn[s3]/r.dens + + r.dens*drs *(r.d3fdrsxs2[s12]*dxsdn[s1]*dxsdn[s2] + r.d3fdrsxs2[s13]*dxsdn[s1]*dxsdn[s3] + r.d3fdrsxs2[s23]*dxsdn[s2]*dxsdn[s3]) + + r.dens*dxtdn*(r.d3fdxtxs2[s12]*dxsdn[s1]*dxsdn[s2] + r.d3fdxtxs2[s13]*dxsdn[s1]*dxsdn[s3] + r.d3fdxtxs2[s23]*dxsdn[s2]*dxsdn[s3]) + ; + + } + + }else{ + } + } + + end_ip_loop: + /* increment pointers */ + rho += p->n_rho; + sigma += p->n_sigma; + + if(zk != NULL) + zk += p->n_zk; + + if(vrho != NULL){ + vrho += p->n_vrho; + vsigma += p->n_vsigma; + } + + if(v2rho2 != NULL){ + v2rho2 += p->n_v2rho2; + v2rhosigma += p->n_v2rhosigma; + v2sigma2 += p->n_v2sigma2; + } + + if(v3rho3 != NULL){ + v3rho3 += p->n_v3rho3; + v3rho2sigma += p->n_v3rho2sigma; + v3rhosigma2 += p->n_v3rhosigma2; + v3sigma3 += p->n_v3sigma3; + } + } +} diff --git a/libxc/src/work_gga_x.c b/libxc/src/work_gga_x.c new file mode 100644 index 000000000..9232cb92f --- /dev/null +++ b/libxc/src/work_gga_x.c @@ -0,0 +1,244 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/************************************************************************ + This file is to be included in GGA exchange functionals. As often these + functionals are written as a function of s = |grad n|/n^(4/3), this + routine performs the necessary conversions between a functional of s + and of rho. +************************************************************************/ + +#ifndef HEADER +# define HEADER 1 +#endif + +#ifndef XC_DIMENSIONS +# define XC_DIMENSIONS 3 +#endif + +static void +#ifdef XC_KINETIC_FUNCTIONAL +work_gga_k +#else +work_gga_x +#endif +(const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, + FLOAT *v2rho2, FLOAT *v2rhosigma, FLOAT *v2sigma2, + FLOAT *v3rho3, FLOAT *v3rho2sigma, FLOAT *v3rhosigma2, FLOAT *v3sigma3) +{ + FLOAT sfact, sfact2, x_factor_c, alpha, beta, dens; + int is, is2, ip, order; + + /* constants for the evaluation of the different terms */ + FLOAT c_zk[1]; + FLOAT c_vrho[3], c_vsigma[2]; + FLOAT c_v2rho2[3], c_v2rhosigma[4], c_v2sigma2[2]; + FLOAT c_v3rho3[4], c_v3rho2sigma[3], c_v3rhosigma2[3], c_v3sigma3[3]; + + /* variables used inside the is loop */ + FLOAT gdm, ds, rhoLDA; + FLOAT x, f, dfdx, d2fdx2, d3fdx3, lvsigma, lv2sigma2, lvsigmax, lvrho; + + /* alpha is the power of rho in the corresponding LDA + beta is the power of rho in the expression for x */ + + beta = 1.0 + 1.0/XC_DIMENSIONS; /* exponent of the density in expression for x */ + +#ifndef XC_KINETIC_FUNCTIONAL + alpha = beta; + +# if XC_DIMENSIONS == 2 + x_factor_c = -X_FACTOR_2D_C; +# else /* three dimensions */ + x_factor_c = -X_FACTOR_C; +# endif + +#else + +# if XC_DIMENSIONS == 2 +# else /* three dimensions */ + alpha = 5.0/3.0; + x_factor_c = K_FACTOR_C; +# endif + +#endif + + sfact = (p->nspin == XC_POLARIZED) ? 1.0 : 2.0; + sfact2 = sfact*sfact; + + /* Initialize several constants */ + order = -1; + if(zk != NULL){ + order = 0; + c_zk[0] = sfact*x_factor_c; + } + if(vrho != NULL){ + order = 1; + c_vrho[0] = x_factor_c*alpha; + c_vrho[1] = -x_factor_c*beta; + c_vrho[2] = x_factor_c; + c_vsigma[0] = sfact*x_factor_c; + c_vsigma[1] = sfact*x_factor_c; + } + if(v2rho2 != NULL){ + order = 2; + c_v2rho2[0] = (x_factor_c/sfact) * (alpha - 1.0)*alpha; + c_v2rho2[1] = (x_factor_c/sfact) * beta*(beta - 2.0*alpha + 1.0); + c_v2rho2[2] = (x_factor_c/sfact) * beta*beta; + c_v2rhosigma[0] = x_factor_c * (alpha - beta)/2.0; + c_v2rhosigma[1] = -x_factor_c * beta/2.0; + c_v2rhosigma[2] = x_factor_c * alpha; + c_v2rhosigma[3] = -x_factor_c * beta; + c_v2sigma2[0] = x_factor_c*sfact / 4.0; + c_v2sigma2[1] = x_factor_c*sfact; + } + if(v3rho3 != NULL){ + order = 3; + c_v3rho3[0] = (x_factor_c/sfact2) * (alpha - 2.0)*(alpha - 1.0)*alpha; + c_v3rho3[1] = -(x_factor_c/sfact2) * (3.0*alpha*alpha - 3.0*alpha*(2.0 + beta) + (1.0 + beta)*(2.0 + beta))*beta; + c_v3rho3[2] = -(x_factor_c/sfact2) * 3.0*(1.0 - alpha + beta)*beta*beta; + c_v3rho3[3] = -(x_factor_c/sfact2) * beta*beta*beta; + c_v3rho2sigma[0] = (x_factor_c/sfact) * (alpha - beta - 1.0)*(alpha - beta)/2.0; + c_v3rho2sigma[1] = (x_factor_c/sfact) * (1.0 - 2.0*alpha + 3.0*beta)*beta/2.0; + c_v3rho2sigma[2] = (x_factor_c/sfact) * beta*beta/2.0; + c_v3rhosigma2[0] = -x_factor_c * (alpha - beta)/4.0; + c_v3rhosigma2[1] = x_factor_c * (alpha - beta)/4.0; + c_v3rhosigma2[2] = -x_factor_c * beta/4.0; + c_v3sigma3[0] = x_factor_c*sfact * 3.0/8.0; + c_v3sigma3[1] = -x_factor_c*sfact * 3.0/8.0; + c_v3sigma3[2] = x_factor_c*sfact /8.0; + } + if(order < 0) return; + + + /* the loop over the points starts */ + for(ip = 0; ip < np; ip++){ + dens = (p->nspin == XC_UNPOLARIZED) ? rho[0] : rho[0] + rho[1]; + if(dens < p->info->min_dens) goto end_ip_loop; + + for(is=0; isnspin; is++){ + is2 = 2*is; + + if(rho[is] < p->info->min_dens) continue; + + gdm = max(SQRT(sigma[is2])/sfact, p->info->min_grad); + ds = rho[is]/sfact; + rhoLDA = POW(ds, alpha); + x = gdm/POW(ds, beta); + + dfdx = d2fdx2 = d3fdx3 = 0.0; + lvsigma = lv2sigma2 = lvsigmax = lvrho = 0.0; + +#if HEADER == 1 + + func(p, order, x, &f, &dfdx, &d2fdx2, &d3fdx3); + +#elif HEADER == 2 + + /* this second header is useful for functionals that depend + explicitly both on x and on sigma */ + func(p, order, x, gdm*gdm, &f, &dfdx, &lvsigma, &d2fdx2, &lv2sigma2, &lvsigmax); + + lvsigma /= sfact2; + lvsigmax /= sfact2; + lv2sigma2 /= sfact2*sfact2; + +#elif HEADER == 3 + + /* this second header is useful for functionals that depend + explicitly both on x and on rho*/ + func(p, order, x, ds, &f, &dfdx, &lvrho); + +#endif + + if(order > 0) dfdx *= x; + if(order > 1) d2fdx2 *= x*x; + if(order > 2) d3fdx3 *= x*x*x; + + if(zk != NULL && (p->info->flags & XC_FLAGS_HAVE_EXC)) + *zk += rhoLDA* + c_zk[0]*f; + + if(vrho != NULL && (p->info->flags & XC_FLAGS_HAVE_VXC)){ + vrho[is] += (rhoLDA/ds)* + (c_vrho[0]*f + c_vrho[1]*dfdx) + rhoLDA*c_vrho[2]*lvrho; + + if(gdm > p->info->min_grad) + vsigma[is2] = rhoLDA* + (c_vsigma[0]*dfdx/(2.0*sigma[is2]) + c_vsigma[1]*lvsigma); + } + + if(v2rho2 != NULL && (p->info->flags & XC_FLAGS_HAVE_FXC)){ + v2rho2[is2] = rhoLDA/(ds*ds) * (c_v2rho2[0]*f + c_v2rho2[1]*dfdx + c_v2rho2[2]*d2fdx2); + + if(gdm > p->info->min_grad){ + v2rhosigma[is*5] = (rhoLDA/ds) * + ((c_v2rhosigma[0]*dfdx + c_v2rhosigma[1]*d2fdx2)/sigma[is2] + c_v2rhosigma[2]*lvsigma + c_v2rhosigma[3]*x*lvsigmax); + v2sigma2 [is*5] = rhoLDA* + (c_v2sigma2[0]*(d2fdx2 - dfdx)/(sigma[is2]*sigma[is2]) + c_v2sigma2[1]*(lv2sigma2 + lvsigmax*x/sigma[is2])); + } + } + + if(v3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC)){ + v3rho3[is*3] = rhoLDA/(ds*ds*ds) * + (c_v3rho3[0]*f + c_v3rho3[1]*dfdx + c_v3rho3[2]*d2fdx2 + c_v3rho3[3]*d3fdx3); + + if(gdm > p->info->min_grad){ + v3rho2sigma[is*8] = rhoLDA/(ds*ds) * + (c_v3rho2sigma[0]*dfdx + c_v3rho2sigma[1]*d2fdx2 + c_v3rho2sigma[2]*d3fdx3)/sigma[is2]; + + v3rhosigma2[is*11] = (rhoLDA/ds) * + (c_v3rhosigma2[0]*dfdx + c_v3rhosigma2[1]*d2fdx2 + c_v3rhosigma2[2]*d3fdx3)/(sigma[is2]*sigma[is2]); + + v3sigma3[is*9] = rhoLDA* + (c_v3sigma3[0]*dfdx + c_v3sigma3[1]*d2fdx2 + c_v3sigma3[2]*d3fdx3)/(sigma[is2]*sigma[is2]*sigma[is2]); + } + } + } + + if(zk != NULL && (p->info->flags & XC_FLAGS_HAVE_EXC)) + *zk /= dens; /* we want energy per particle */ + + end_ip_loop: + /* increment pointers */ + rho += p->n_rho; + sigma += p->n_sigma; + + if(zk != NULL) + zk += p->n_zk; + + if(vrho != NULL){ + vrho += p->n_vrho; + vsigma += p->n_vsigma; + } + + if(v2rho2 != NULL){ + v2rho2 += p->n_v2rho2; + v2rhosigma += p->n_v2rhosigma; + v2sigma2 += p->n_v2sigma2; + } + + if(v3rho3 != NULL){ + v3rho3 += p->n_v3rho3; + v3rho2sigma += p->n_v3rho2sigma; + v3rhosigma2 += p->n_v3rhosigma2; + v3sigma3 += p->n_v3sigma3; + } + } +} diff --git a/libxc/src/work_lda.c b/libxc/src/work_lda.c new file mode 100644 index 000000000..24041a6d9 --- /dev/null +++ b/libxc/src/work_lda.c @@ -0,0 +1,141 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/************************************************************************ + This file is to be included in LDA functionals. As often these + functionals are written as a function of rs and zeta, this + routine performs the necessary conversions between this and a functional + of rho. +************************************************************************/ + +#ifndef XC_DIMENSIONS +#define XC_DIMENSIONS 3 +#endif + +static void +work_lda(const XC(func_type) *p, int np, const FLOAT *rho, + FLOAT *zk, FLOAT *vrho, FLOAT *v2rho2, FLOAT *v3rho3) +{ + XC(lda_work_t) r; + int is, ip; + FLOAT dens, drs, d2rs, d3rs; + + /* Wigner radius */ +# if XC_DIMENSIONS == 1 + const FLOAT cnst_rs = 0.5; +# elif XC_DIMENSIONS == 2 + const FLOAT cnst_rs = 1.0/M_SQRTPI; +# else /* three dimensions */ + const FLOAT cnst_rs = RS_FACTOR; +# endif + + r.order = -1; + if(zk != NULL) r.order = 0; + if(vrho != NULL) r.order = 1; + if(v2rho2 != NULL) r.order = 2; + if(v3rho3 != NULL) r.order = 3; + if(r.order < 0) return; + + for(ip = 0; ip < np; ip++){ + XC(rho2dzeta)(p->nspin, rho, &dens, &r.zeta); + + if(dens < p->info->min_dens) goto end_ip_loop; + + r.rs[1] = cnst_rs*POW(dens, -1.0/XC_DIMENSIONS); + r.rs[0] = SQRT(r.rs[1]); + r.rs[2] = r.rs[1]*r.rs[1]; + + func(p, &r); + + if(zk != NULL && (p->info->flags & XC_FLAGS_HAVE_EXC)) + *zk = r.zk; + + if(r.order < 1) goto end_ip_loop; + + drs = -r.rs[1]/(XC_DIMENSIONS*dens); + + if(vrho != NULL && (p->info->flags & XC_FLAGS_HAVE_VXC)){ + vrho[0] = r.zk + dens*r.dedrs*drs; + + if(p->nspin == XC_POLARIZED){ + vrho[1] = vrho[0] - (r.zeta + 1.0)*r.dedz; + vrho[0] = vrho[0] - (r.zeta - 1.0)*r.dedz; + } + } + + if(r.order < 2) goto end_ip_loop; + + d2rs = -drs*(1.0 + XC_DIMENSIONS)/(XC_DIMENSIONS*dens); + + if(v2rho2 != NULL && (p->info->flags & XC_FLAGS_HAVE_FXC)){ + v2rho2[0] = r.dedrs*(2.0*drs + dens*d2rs) + dens*r.d2edrs2*drs*drs; + + if(p->nspin == XC_POLARIZED){ + FLOAT sign[3][2] = {{-1.0, -1.0}, {-1.0, +1.0}, {+1.0, +1.0}}; + + for(is=2; is>=0; is--){ + v2rho2[is] = v2rho2[0] - r.d2edrsz*(2.0*r.zeta + sign[is][0] + sign[is][1])*drs + + (r.zeta + sign[is][0])*(r.zeta + sign[is][1])*r.d2edz2/dens; + } + } + } + + if(r.order < 3) goto end_ip_loop; + + d3rs = -d2rs*(1.0 + 2.0*XC_DIMENSIONS)/(XC_DIMENSIONS*dens); + + if(v3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC)){ + v3rho3[0] = r.dedrs*(3.0*d2rs + dens*d3rs) + + 3.0*r.d2edrs2*drs*(drs + dens*d2rs) + r.d3edrs3*dens*drs*drs*drs; + + if(p->nspin == XC_POLARIZED){ + FLOAT sign[4][3] = {{-1.0, -1.0, -1.0}, {-1.0, -1.0, +1.0}, {-1.0, +1.0, +1.0}, {+1.0, +1.0, +1.0}}; + + for(is=3; is>=0; is--){ + FLOAT ff; + + v3rho3[is] = v3rho3[0] - (2.0*r.zeta + sign[is][0] + sign[is][1])*(d2rs*r.d2edrsz + drs*drs*r.d3edrs2z); + v3rho3[is] += (r.zeta + sign[is][0])*(r.zeta + sign[is][1])*(-r.d2edz2/dens + r.d3edrsz2*drs)/dens; + + ff = r.d2edrsz*(2.0*drs + dens*d2rs) + dens*r.d3edrs2z*drs*drs; + ff += -2.0*r.d2edrsz*drs - r.d3edrsz2*(2.0*r.zeta + sign[is][0] + sign[is][1])*drs; + ff += (r.zeta + sign[is][0])*(r.zeta + sign[is][1])*r.d3edz3/dens; + ff += (2.0*r.zeta + sign[is][0] + sign[is][1])*r.d2edz2/dens; + + v3rho3[is] += -ff*(r.zeta + sign[is][2])/dens; + } + } + } + + end_ip_loop: + rho += p->n_rho; + + if(zk != NULL) + zk += p->n_zk; + + if(vrho != NULL) + vrho += p->n_vrho; + + if(v2rho2 != NULL) + v2rho2 += p->n_v2rho2; + + if(v3rho3 != NULL) + v3rho3 += p->n_v3rho3; + + } /* for(ip) */ +} diff --git a/libxc/src/work_mgga_c.c b/libxc/src/work_mgga_c.c new file mode 100644 index 000000000..89ae6964c --- /dev/null +++ b/libxc/src/work_mgga_c.c @@ -0,0 +1,205 @@ +/* + Copyright (C) 2006-2008 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include + +static void +work_mgga_c(const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl, const FLOAT *tau, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, FLOAT *vlapl, FLOAT *vtau, + FLOAT *v2rho2, FLOAT *v2sigma2, FLOAT *v2lapl2, FLOAT *v2tau2, + FLOAT *v2rhosigma, FLOAT *v2rholapl, FLOAT *v2rhotau, + FLOAT *v2sigmalapl, FLOAT *v2sigmatau, FLOAT *v2lapltau) +{ + XC(mgga_work_c_t) r; + FLOAT min_grad2 = p->info->min_grad*p->info->min_grad; + int ip; + + /* set all elements of r to zero */ + memset(&r, 0, sizeof(r)); + + r.order = -1; + if(zk != NULL) r.order = 0; + if(vrho != NULL) r.order = 1; + if(v2rho2 != NULL) r.order = 2; + + if(r.order < 0) return; + + for(ip = 0; ip < np; ip++){ + FLOAT rho13[3], drs, dxt; + FLOAT ndzdn[2], dxsdn[2]; + FLOAT dxtds, dxsds[2]; + FLOAT dusdn[2], dusdlapl[2], dtsdn[2], dtsdtau[2]; + + XC(rho2dzeta)(p->nspin, rho, &(r.dens), &(r.zeta)); + + if(r.dens < p->info->min_dens) goto end_ip_loop; + + r.rs = RS(r.dens); + rho13[2] = CBRT(r.dens); + + if(p->nspin == XC_UNPOLARIZED){ + r.ds[0] = r.dens/2.0; + r.ds[1] = r.ds[0]; + + rho13[0] = rho13[2]/M_CBRT2; + rho13[1] = rho13[0]; + + /* we already know that dens > min_dens */ + r.sigmat = max(min_grad2, sigma[0]); + r.xt = SQRT(r.sigmat)/(r.dens*rho13[2]); + + r.sigmas[0] = r.sigmat/4.0; + r.sigmas[1] = r.sigmas[0]; + r.sigmas[2] = r.sigmas[0]; + + r.xs[0] = M_CBRT2*r.xt; + r.xs[1] = r.xs[0]; + + r.us[0] = lapl[0]/(2.0*r.ds[0]*rho13[0]*rho13[0]); /* lapl/rho^(5/3) */ + r.us[1] = r.us[0]; + + r.ts[0] = tau[0]/(2.0*r.ds[0]*rho13[0]*rho13[0]); /* tau/rho^(5/3) */ + r.ts[1] = r.ts[0]; + }else{ + r.ds[0] = max(p->info->min_dens, rho[0]); + r.ds[1] = max(p->info->min_dens, rho[1]); + + rho13[0] = CBRT(r.ds[0]); + rho13[1] = CBRT(r.ds[1]); + + r.sigmat = max(min_grad2, sigma[0] + 2.0*sigma[1] + sigma[2]); + r.xt = SQRT(r.sigmat)/(r.dens*rho13[2]); + + r.sigmas[0] = max(min_grad2, sigma[0]); + r.sigmas[1] = max(min_grad2, sigma[1]); + r.sigmas[2] = max(min_grad2, sigma[2]); + + r.xs[0] = SQRT(r.sigmas[0])/(r.ds[0]*rho13[0]); + r.xs[1] = SQRT(r.sigmas[2])/(r.ds[1]*rho13[1]); + + r.us[0] = lapl[0]/(r.ds[0]*rho13[0]*rho13[0]); + r.us[1] = lapl[1]/(r.ds[1]*rho13[1]*rho13[1]); + + r.ts[0] = tau[0]/(r.ds[0]*rho13[0]*rho13[0]); + r.ts[1] = tau[1]/(r.ds[1]*rho13[1]*rho13[1]); + } + + func(p, &r); + + if(zk != NULL && (p->info->flags & XC_FLAGS_HAVE_EXC)) + *zk = r.f; + + if(r.order < 1) goto end_ip_loop; + + /* setup auxiliary variables */ + drs = -r.rs/(3.0*r.dens); + dxt = -4.0*r.xt/(3.0*r.dens); + dxtds = r.xt/(2.0*r.sigmat); + + if(p->nspin == XC_POLARIZED){ + ndzdn[1] = -(r.zeta + 1.0); + ndzdn[0] = -(r.zeta - 1.0); + + dxsdn[1] = -4.0*r.xs[1]/(3.0*r.ds[1]); + dxsdn[0] = -4.0*r.xs[0]/(3.0*r.ds[0]); + + dxsds[1] = r.xs[1]/(2.0*r.sigmas[2]); + dxsds[0] = r.xs[0]/(2.0*r.sigmas[0]); + + dusdn[1] = -5.0*r.us[1]/(3.0*r.ds[1]); + dusdn[0] = -5.0*r.us[0]/(3.0*r.ds[0]); + + dusdlapl[1] = 1.0/(r.ds[1]*rho13[1]*rho13[1]); + dusdlapl[0] = 1.0/(r.ds[0]*rho13[0]*rho13[0]); + + dtsdn[1] = -5.0*r.ts[1]/(3.0*r.ds[1]); + dtsdn[0] = -5.0*r.ts[0]/(3.0*r.ds[0]); + + dtsdtau[1] = dusdlapl[1]; + dtsdtau[0] = dusdlapl[0]; + }else{ + dxsdn[0] = M_CBRT2*dxt; + dxsds[0] = M_CBRT2*dxtds; + + dusdn[0] = -5.0*r.us[0]/(6.0*r.ds[0]); + dusdlapl[0] = 1.0/(2.0*r.ds[0]*rho13[0]*rho13[0]); + + dtsdn[0] = -5.0*r.ts[0]/(6.0*r.ds[0]); + dtsdtau[0] = dusdlapl[0]; + } + + if(vrho != NULL && (p->info->flags & XC_FLAGS_HAVE_VXC)){ + vrho[0] = r.f + r.dens*(r.dfdrs*drs + r.dfdxt*dxt); + vsigma[0] = r.dens*r.dfdxt*dxtds; + + if(p->nspin == XC_POLARIZED){ + vrho[1] = vrho[0] + r.dfdz*ndzdn[1] + r.dens*(r.dfdxs[1]*dxsdn[1] + r.dfdus[1]*dusdn[1] + r.dfdts[1]*dtsdn[1]); + vrho[0] = vrho[0] + r.dfdz*ndzdn[0] + r.dens*(r.dfdxs[0]*dxsdn[0] + r.dfdus[0]*dusdn[0] + r.dfdts[0]*dtsdn[0]); + + vsigma[2] = vsigma[0] + r.dens*r.dfdxs[1]*dxsds[1]; + vsigma[1] = 2.0*vsigma[0]; + vsigma[0] = vsigma[0] + r.dens*r.dfdxs[0]*dxsds[0]; + + vlapl[1] = r.dens*r.dfdus[1]*dusdlapl[1]; + vlapl[0] = r.dens*r.dfdus[0]*dusdlapl[0]; + + vtau[1] = r.dens*r.dfdts[1]*dtsdtau[1]; + vtau[0] = r.dens*r.dfdts[0]*dtsdtau[0]; + + }else{ + /* factor of 2 comes from sum over sigma */ + vrho[0] += 2.0*r.dens*(r.dfdxs[0]*dxsdn[0] + r.dfdus[0]*dusdn[0] + r.dfdts[0]*dtsdn[0]); + vsigma[0] += 2.0*r.dens*r.dfdxs[0]*dxsds[0]; + vlapl[0] = 2.0*r.dens*r.dfdus[0]*dusdlapl[0]; + vtau[0] = 2.0*r.dens*r.dfdts[0]*dtsdtau[0]; + } + } + + if(r.order < 2) goto end_ip_loop; + + end_ip_loop: + /* increment pointers */ + rho += p->n_rho; + sigma += p->n_sigma; + tau += p->n_tau; + lapl += p->n_lapl; + + if(zk != NULL) + zk += p->n_zk; + + if(vrho != NULL){ + vrho += p->n_vrho; + vsigma += p->n_vsigma; + vtau += p->n_vtau; + vlapl += p->n_vlapl; + } + + if(v2rho2 != NULL){ + v2rho2 += p->n_v2rho2; + v2sigma2 += p->n_v2sigma2; + v2tau2 += p->n_v2tau2; + v2lapl2 += p->n_v2lapl2; + v2rhosigma += p->n_v2rhosigma; + v2rhotau += p->n_v2rhotau; + v2rholapl += p->n_v2rholapl; + v2sigmatau += p->n_v2sigmatau; + v2sigmalapl += p->n_v2sigmalapl; + v2lapltau += p->n_v2lapltau; + } + } +} diff --git a/libxc/src/work_mgga_x.c b/libxc/src/work_mgga_x.c new file mode 100644 index 000000000..12605f148 --- /dev/null +++ b/libxc/src/work_mgga_x.c @@ -0,0 +1,186 @@ +/* + Copyright (C) 2006-2008 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/************************************************************************ + This file is to be included in meta GGA exchange functionals. As often these + functionals are written as a function of s = |grad n|/n^(4/3) and tau, this + routine performs the necessary conversions between a functional of s and tau + and of rho. +************************************************************************/ + +#include +#include + +#ifndef XC_DIMENSIONS +# define XC_DIMENSIONS 3 +#endif + +static void +work_mgga_x(const XC(func_type) *p, int np, + const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl, const FLOAT *tau, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, FLOAT *vlapl, FLOAT *vtau, + FLOAT *v2rho2, FLOAT *v2sigma2, FLOAT *v2lapl2, FLOAT *v2tau2, + FLOAT *v2rhosigma, FLOAT *v2rholapl, FLOAT *v2rhotau, + FLOAT *v2sigmalapl, FLOAT *v2sigmatau, FLOAT *v2lapltau) +{ + XC(mgga_work_x_t) r; + FLOAT sfact, sfact2, dens, x_factor_c; + int is, ip; + int has_tail; + + /* WARNING: derivatives are _not_ OK for 2 dimensions */ +#if XC_DIMENSIONS == 2 + const FLOAT cnst_rs = 1.0/M_SQRTPI; + x_factor_c = X_FACTOR_2D_C; +#else /* three dimensions */ + const FLOAT cnst_rs = RS_FACTOR; + x_factor_c = X_FACTOR_C; +#endif + + /* initialize everything to zero */ + memset(&r, 0, sizeof(r)); + + r.order = -1; + if(zk != NULL) r.order = 0; + if(vrho != NULL) r.order = 1; + if(v2rho2 != NULL) r.order = 2; + if(r.order < 0) return; + + sfact = (p->nspin == XC_POLARIZED) ? 1.0 : 2.0; + sfact2 = sfact*sfact; + + has_tail = 0; + switch(p->info->number){ + case XC_MGGA_X_BR89: + case XC_MGGA_X_BJ06: + case XC_MGGA_X_TB09: + case XC_MGGA_X_RPP09: + has_tail = 1; + break; + } + + for(ip = 0; ip < np; ip++){ + XC(rho2dzeta)(p->nspin, rho, &dens, &r.zeta); + + if(dens < p->info->min_dens) goto end_ip_loop; + + r.rs = cnst_rs*POW(dens, -1.0/XC_DIMENSIONS); + + for(is=0; isnspin; is++){ + FLOAT lrho, rho1D, rho2pD_D, lsigma, gdm, lnr2, ltau; + int js = (is == 0) ? 0 : 2; + int ls = (is == 0) ? 0 : 3; + int ks = (is == 0) ? 0 : 5; + + if((!has_tail && (rho[is] < p->info->min_dens || tau[is] < p->info->min_tau)) || (rho[is] == 0.0)) continue; + + lsigma= max(sigma[js]/sfact2, p->info->min_grad*p->info->min_grad); + gdm = SQRT(lsigma); + lrho = rho[is]/sfact; + rho1D = POW(lrho, 1.0/XC_DIMENSIONS); + rho2pD_D = lrho*rho1D*rho1D; + r.x = gdm/(lrho*rho1D); + + ltau = tau[is]/sfact; + r.t = ltau/rho2pD_D; /* tau/rho^((2+D)/D) */ + + lnr2 = lapl[is]/sfact; /* this can be negative */ + r.u = lnr2/rho2pD_D; /* lapl/rho^((2+D)/D) */ + + func(p, &r); + + if(zk != NULL && (p->info->flags & XC_FLAGS_HAVE_EXC)) + *zk += -sfact*x_factor_c*(lrho*rho1D)*r.f; + + if(vrho != NULL && (p->info->flags & XC_FLAGS_HAVE_VXC)){ + vrho[is] = -x_factor_c*rho1D*(-r.rs*r.dfdrs + 4.0/3.0*(r.f - r.dfdx*r.x) - 5.0/3.0*(r.dfdt*r.t + r.dfdu*r.u)); + + vtau[is] = -x_factor_c*r.dfdt/rho1D; + + vlapl[is] = -x_factor_c*r.dfdu/rho1D; + + if(gdm>p->info->min_grad) + vsigma[js] = -x_factor_c*(rho1D*lrho)*r.dfdx*r.x/(2.0*sfact*lsigma); + } + + /* WARNING: terms with rs not implemented yet */ + if(v2rho2 != NULL && (p->info->flags & XC_FLAGS_HAVE_FXC)){ + v2rho2[js] = -x_factor_c/(9.0*sfact*rho1D*rho1D)* + (4.0*r.f - 4.0*r.x*r.dfdx + 4.0*4.0*r.x*r.x*r.d2fdx2 + 5.0*5.0*r.t*r.t*r.d2fdt2 + 5.0*5.0*r.u*r.u*r.d2fdu2 + + 2.0*5.0*(4.0*r.x*r.t*r.d2fdxt + 4.0*r.x*r.u*r.d2fdxu + 5.0*r.t*r.u*r.d2fdtu)); + + v2lapl2[js] = -x_factor_c*r.d2fdu2/(sfact*rho1D*rho2pD_D); + + v2tau2[js] = -x_factor_c*r.d2fdt2/(sfact*rho1D*rho2pD_D); + + v2rholapl[ls] = -x_factor_c*rho1D/(3.0*sfact*rho2pD_D)* + (4.0*r.dfdu - 4.0*r.x*r.d2fdxu - 5.0*r.t*r.d2fdtu - 5.0*(r.dfdu + r.u*r.d2fdu2)); + + v2rhotau[ls] = -x_factor_c*rho1D/(3.0*sfact*rho2pD_D)* + (4.0*r.dfdt - 4.0*r.x*r.d2fdxt - 5.0*r.u*r.d2fdtu - 5.0*(r.dfdt + r.t*r.d2fdt2)); + + v2lapltau[ls] = -x_factor_c*r.d2fdtu/(rho1D*rho2pD_D); + + if(gdm > p->info->min_grad){ + v2sigma2[ks] = -x_factor_c*(rho1D*lrho)/(4.0*sfact2*sfact*lsigma*lsigma)* + (r.d2fdx2*r.x*r.x - r.dfdx*r.x); + + v2rhosigma[ks] = -x_factor_c*rho1D*r.x/(3.0*2.0*sfact2*lsigma)* + (-4.0*r.x*r.d2fdx2 - 5.0*r.t*r.d2fdxt - 5.0*r.u*r.d2fdxu); + + v2sigmalapl[ks] = -x_factor_c*r.x/(2.0*sfact2*lsigma*rho1D)*r.d2fdxu; + + v2sigmatau[ks] = -x_factor_c*r.x/(2.0*sfact2*lsigma*rho1D)*r.d2fdxt; + } + } + } + + if(zk != NULL) + *zk /= dens; /* we want energy per particle */ + + end_ip_loop: + /* increment pointers */ + rho += p->n_rho; + sigma += p->n_sigma; + tau += p->n_tau; + lapl += p->n_lapl; + + if(zk != NULL) + zk += p->n_zk; + + if(vrho != NULL){ + vrho += p->n_vrho; + vsigma += p->n_vsigma; + vtau += p->n_vtau; + vlapl += p->n_vlapl; + } + + if(v2rho2 != NULL){ + v2rho2 += p->n_v2rho2; + v2sigma2 += p->n_v2sigma2; + v2tau2 += p->n_v2tau2; + v2lapl2 += p->n_v2lapl2; + v2rhosigma += p->n_v2rhosigma; + v2rhotau += p->n_v2rhotau; + v2rholapl += p->n_v2rholapl; + v2sigmatau += p->n_v2sigmatau; + v2sigmalapl += p->n_v2sigmalapl; + v2lapltau += p->n_v2lapltau; + } + } +} diff --git a/libxc/src/xc-info.c b/libxc/src/xc-info.c new file mode 100644 index 000000000..8d29925c2 --- /dev/null +++ b/libxc/src/xc-info.c @@ -0,0 +1,116 @@ +/* + Copyright (C) 2014 Susi Lehtola + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + + +#include +#include +#include +#include "xc.h" + +const char *get_kind(const xc_func_type *func) { + switch(func->info->kind) { + case(XC_EXCHANGE): + return "XC_EXCHANGE"; + + case(XC_CORRELATION): + return "XC_CORRELATION"; + + case(XC_EXCHANGE_CORRELATION): + return "XC_EXCHANGE_CORRELATION"; + + case(XC_KINETIC): + return "XC_KINETIC"; + + default: + printf("Internal error in get_kind.\n"); + return ""; + } +} + +const char *get_family(const xc_func_type *func) { + switch(func->info->family) { + case(XC_FAMILY_UNKNOWN): + return "XC_FAMILY_UNKNOWN"; + + case(XC_FAMILY_LDA): + return "XC_FAMILY_LDA"; + + case(XC_FAMILY_GGA): + return "XC_FAMILY_GGA"; + + case(XC_FAMILY_MGGA): + return "XC_FAMILY_MGGA"; + + case(XC_FAMILY_LCA): + return "XC_FAMILY_LCA"; + + case(XC_FAMILY_OEP): + return "XC_FAMILY_OEP"; + + case(XC_FAMILY_HYB_GGA): + return "XC_FAMILY_HYB_GGA"; + + case(XC_FAMILY_HYB_MGGA): + return "XC_FAMILY_HYB_MGGA"; + + default: + printf("Internal error in get_family.\n"); + return ""; + } +} + +int main(int argc, char **argv) { + if(argc!=2) { + printf("Usage: %s func_id\n",argv[0]); + return 1; + } + + int func_id, error; + xc_func_type func; + char *fname; + + /* Is functional defined by a string constant? */ + if(isalpha(argv[1][0])) + func_id=XC(functional_get_number)(argv[1]); + else + func_id=atoi(argv[1]); + + /* Initialize functional */ + error=xc_func_init(&func, func_id, XC_UNPOLARIZED); + if(error) { + printf("Functional '%s' not found.\n",argv[1]); + return 1; + } + + /* Get functional name */ + fname=XC(functional_get_name)(func_id); + + /* Print out info */ + printf("%10s: %-20i\t%10s: %-25s\n","func_id",func_id,"name",fname); + printf("%10s: %-20s\t%10s: %-25s\n","family",get_family(&func),"kind",get_kind(&func)); + printf("%10s: %s\n","comment",func.info->name); + + printf("\nReference(s):\n"); + printf("%s\n",func.info->refs); + + /* Free memory */ + xc_func_end(&func); + free(fname); + + return 0; +} diff --git a/libxc/src/xc.h b/libxc/src/xc.h new file mode 100644 index 000000000..68bec9323 --- /dev/null +++ b/libxc/src/xc.h @@ -0,0 +1,255 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef _XC_H +#define _XC_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include "xc_config.h" + +#define XC_UNPOLARIZED 1 +#define XC_POLARIZED 2 + +#define XC_NON_RELATIVISTIC 0 +#define XC_RELATIVISTIC 1 + +#define XC_EXCHANGE 0 +#define XC_CORRELATION 1 +#define XC_EXCHANGE_CORRELATION 2 +#define XC_KINETIC 3 + +#define XC_FAMILY_UNKNOWN -1 +#define XC_FAMILY_LDA 1 +#define XC_FAMILY_GGA 2 +#define XC_FAMILY_MGGA 4 +#define XC_FAMILY_LCA 8 +#define XC_FAMILY_OEP 16 +#define XC_FAMILY_HYB_GGA 32 +#define XC_FAMILY_HYB_MGGA 64 + +/* flags that can be used in info.flags */ +#define XC_FLAGS_HAVE_EXC (1 << 0) /* 1 */ +#define XC_FLAGS_HAVE_VXC (1 << 1) /* 2 */ +#define XC_FLAGS_HAVE_FXC (1 << 2) /* 4 */ +#define XC_FLAGS_HAVE_KXC (1 << 3) /* 8 */ +#define XC_FLAGS_HAVE_LXC (1 << 4) /* 16 */ +#define XC_FLAGS_1D (1 << 5) /* 32 */ +#define XC_FLAGS_2D (1 << 6) /* 64 */ +#define XC_FLAGS_3D (1 << 7) /* 128 */ +#define XC_FLAGS_HYB_CAM (1 << 8) /* 256 */ +#define XC_FLAGS_STABLE (1 << 9) /* 512 */ +#define XC_FLAGS_DEVELOPMENT (1 << 10) /* 1024 */ + +#define XC_TAU_EXPLICIT 0 +#define XC_TAU_EXPANSION 1 + +/* These are old names keep for compatibility, and that should disappear soon */ +#define XC_GGA_XC_LB 160 +#define XC_GGA_K_ABSR1 506 +#define XC_GGA_K_ABSR2 507 + +void XC(version)(int *major, int *minor); + +struct XC(func_type); + +typedef struct{ + int number; /* indentifier number */ + int kind; /* XC_EXCHANGE, XC_CORRELATION, or XC_EXCHANGE_CORRELATION */ + + char *name; /* name of the functional, e.g. "PBE" */ + int family; /* type of the functional, e.g. XC_FAMILY_GGA */ + char *refs; /* references */ + + int flags; /* see above for a list of possible flags */ + + FLOAT min_dens; + FLOAT min_grad; + FLOAT min_tau; + FLOAT min_zeta; + + void (*init)(struct XC(func_type) *p); + void (*end) (struct XC(func_type) *p); + void (*lda) (const struct XC(func_type) *p, int np, + const FLOAT *rho, + FLOAT *zk, FLOAT *vrho, FLOAT *v2rho2, FLOAT *v3rho3); + void (*gga) (const struct XC(func_type) *p, int np, + const FLOAT *rho, const FLOAT *sigma, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, + FLOAT *v2rho2, FLOAT *v2rhosigma, FLOAT *v2sigma2, + FLOAT *v3rho3, FLOAT *v3rho2sigma, FLOAT *v3rhosigma2, FLOAT *v3sigma3); + void (*mgga)(const struct XC(func_type) *p, int np, + const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl_rho, const FLOAT *tau, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, FLOAT *vlapl_rho, FLOAT *vtau, + FLOAT *v2rho2, FLOAT *v2sigma2, FLOAT *v2tau2, FLOAT *v2lapl2, + FLOAT *v2rhosigma, FLOAT *v2rhotau, FLOAT *v2rholapl, + FLOAT *v2sigmatau, FLOAT *v2sigmalapl, FLOAT *v2taulapl); +} XC(func_info_type); + + +struct XC(func_type){ + const XC(func_info_type) *info; /* all the information concerning this functional */ + int nspin; /* XC_UNPOLARIZED or XC_POLARIZED */ + + int n_func_aux; /* how many auxiliary functions we need */ + struct XC(func_type) **func_aux; /* most GGAs are based on a LDA or other GGAs */ + FLOAT *mix_coef; /* coefficients for the mixing */ + + FLOAT cam_omega; /* range separation parameter for hybrids */ + FLOAT cam_alpha; /* the Hartree-Fock mixing parameter for the hybrids */ + FLOAT cam_beta; /* idem, but for the screened hybrid */ + + int func; /* Shortcut in case of several functionals sharing the same interface */ + int n_rho, n_sigma, n_tau, n_lapl; /* spin dimensions of the arrays */ + int n_zk; + + int n_vrho, n_vsigma, n_vtau, n_vlapl; + + int n_v2rho2, n_v2sigma2, n_v2tau2, n_v2lapl2, + n_v2rhosigma, n_v2rhotau, n_v2rholapl, + n_v2sigmatau, n_v2sigmalapl, n_v2lapltau; + + int n_v3rho3, n_v3rho2sigma, n_v3rhosigma2, n_v3sigma3; + + void *params; /* this allows us to fix parameters in the functional */ +}; + +typedef struct XC(func_type) XC(func_type); + +/* functionals */ +int XC(functional_get_number)(const char *name); +char *XC(functional_get_name)(int number); +int XC(family_from_id)(int id, int *family, int *number); +int XC(func_init)(XC(func_type) *p, int functional, int nspin); +void XC(func_end)(XC(func_type) *p); + +#include "xc_funcs.h" + +int XC(lda_init)(XC(func_type) *p, const XC(func_info_type) *info, int nspin); +void XC(lda_end) (XC(func_type) *p); + +void XC(lda) (const XC(func_type) *p, int np, const FLOAT *rho, FLOAT *zk, FLOAT *vrho, FLOAT *v2rho2, FLOAT *v3rho3); +void XC(lda_exc) (const XC(func_type) *p, int np, const FLOAT *rho, FLOAT *zk); +void XC(lda_exc_vxc)(const XC(func_type) *p, int np, const FLOAT *rho, FLOAT *zk, FLOAT *vrho); +void XC(lda_vxc) (const XC(func_type) *p, int np, const FLOAT *rho, FLOAT *vrho); +void XC(lda_fxc) (const XC(func_type) *p, int np, const FLOAT *rho, FLOAT *v2rho2); +void XC(lda_kxc) (const XC(func_type) *p, int np, const FLOAT *rho, FLOAT *v3rho3); + +void XC(lda_x_set_params) (XC(func_type) *p, FLOAT alpha, int relativistic, FLOAT omega); +void XC(lda_x_1d_set_params) (XC(func_type) *p, int interaction, FLOAT bb); +void XC(lda_c_1d_csc_set_params) (XC(func_type) *p, int interaction, FLOAT bb); +void XC(lda_c_xalpha_set_params) (XC(func_type) *p, FLOAT alpha); +void XC(lda_c_2d_prm_set_params) (XC(func_type) *p, FLOAT N); +void XC(lda_c_vwn_set_params) (XC(func_type) *p, int spin_interpolation); + + +int XC(gga_init)(XC(func_type) *p, const XC(func_info_type) *info, int nspin); +void XC(gga_end) (XC(func_type) *p); +void XC(gga) (const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, + FLOAT *v2rho2, FLOAT *v2rhosigma, FLOAT *v2sigma2, + FLOAT *v3rho3, FLOAT *v3rho2sigma, FLOAT *v3rhosigma2, FLOAT *v3sigma3); +void XC(gga_exc)(const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *zk); +void XC(gga_exc_vxc)(const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma); +void XC(gga_vxc)(const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *vrho, FLOAT *vsigma); +void XC(gga_fxc)(const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *v2rho2, FLOAT *v2rhosigma, FLOAT *v2sigma2); +void XC(gga_kxc)(const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT *v3rho3, FLOAT *v3rho2sigma, FLOAT *v3rhosigma2, FLOAT *v3sigma3); + +void XC(gga_lb_modified) (const XC(func_type) *p, int np, const FLOAT *rho, const FLOAT *sigma, + FLOAT r, FLOAT *vrho); + +void XC(gga_x_b88_set_params) (XC(func_type) *p, FLOAT beta, FLOAT gamma); +void XC(gga_x_pbe_set_params) (XC(func_type) *p, FLOAT kappa, FLOAT mu); +void XC(gga_c_pbe_set_params) (XC(func_type) *p, FLOAT beta); +void XC(gga_x_pw91_set_params) (XC(func_type) *p, FLOAT a, FLOAT b, FLOAT c, FLOAT d, FLOAT f, FLOAT alpha, FLOAT expo); +void XC(gga_x_pw91_set_params2) (XC(func_type) *p, FLOAT bt, FLOAT alpha, FLOAT expo); +void XC(gga_x_rpbe_set_params) (XC(func_type) *p, FLOAT kappa, FLOAT mu); +void XC(gga_x_optx_set_params) (XC(func_type) *p, FLOAT a, FLOAT b, FLOAT gamma); +void XC(gga_c_lyp_set_params) (XC(func_type) *p, FLOAT A, FLOAT B, FLOAT c, FLOAT d); +void XC(gga_lb_set_params) (XC(func_type) *p, int modified, FLOAT threshold, FLOAT ip, FLOAT qtot); +void XC(gga_k_tflw_set_params) (XC(func_type) *p, FLOAT gamma, FLOAT lambda, FLOAT N); +void XC(gga_x_2d_b88_set_params) (XC(func_type) *p, FLOAT beta); +void XC(gga_x_wpbeh_set_params) (XC(func_type) *p, FLOAT omega); +void XC(gga_x_hjs_set_params) (XC(func_type) *p, FLOAT omega); +void XC(gga_x_ityh_set_params) (XC(func_type) *p, int func_id, FLOAT omega); +void XC(gga_x_sfat_set_params) (XC(func_type) *p, int func_id, FLOAT omega); +void XC(gga_x_ssb_sw_set_params) (XC(func_type) *p, FLOAT A, FLOAT B, FLOAT C, FLOAT D, FLOAT E); +void XC(gga_x_kt_set_params) (XC(func_type) *p, FLOAT gamma, FLOAT delta); + +FLOAT XC(gga_ak13_get_asymptotic) (FLOAT homo); + +FLOAT XC(hyb_exx_coef)(const XC(func_type) *p); +void XC(hyb_cam_coef)(const XC(func_type) *p, FLOAT *omega, FLOAT *alpha, FLOAT *beta); + +void XC(hyb_gga_xc_hse_set_params) (XC(func_type) *p, FLOAT alpha, FLOAT omega); +void XC(hyb_gga_xc_pbeh_set_params)(XC(func_type) *p, FLOAT alpha); + +/* the meta-GGAs */ +int XC(mgga_init)(XC(func_type) *p, const XC(func_info_type) *info, int nspin); +void XC(mgga_end) (XC(func_type) *p); +void XC(mgga) (const XC(func_type) *p, int np, + const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl, const FLOAT *tau, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, FLOAT *vlapl, FLOAT *vtau, + FLOAT *v2rho2, FLOAT *v2sigma2, FLOAT *v2lapl2, FLOAT *v2tau2, + FLOAT *v2rhosigma, FLOAT *v2rholapl, FLOAT *v2rhotau, + FLOAT *v2sigmalapl, FLOAT *v2sigmatau, FLOAT *v2lapltau); +void XC(mgga_exc) (const XC(func_type) *p, int np, + const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl, const FLOAT *tau, + FLOAT *zk); +void XC(mgga_exc_vxc)(const XC(func_type) *p, int np, + const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl, const FLOAT *tau, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, FLOAT *vlapl, FLOAT *vtau); +void XC(mgga_vxc) (const XC(func_type) *p, int np, + const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl, const FLOAT *tau, + FLOAT *vrho, FLOAT *vsigma, FLOAT *vlapl, FLOAT *vtau); +void XC(mgga_fxc) (const XC(func_type) *p, int np, + const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl, const FLOAT *tau, + FLOAT *v2rho2, FLOAT *v2sigma2, FLOAT *v2lapl2, FLOAT *v2tau2, + FLOAT *v2rhosigma, FLOAT *v2rholapl, FLOAT *v2rhotau, + FLOAT *v2sigmalapl, FLOAT *v2sigmatau, FLOAT *v2lapltau); + +void XC(mgga_x_tb09_set_params)(XC(func_type) *p, FLOAT c); +void XC(mgga_x_tpss_set_params)(XC(func_type) *p, FLOAT b, FLOAT c, FLOAT e, FLOAT kappa, FLOAT mu); +void XC(mgga_c_bc95_set_params)(XC(func_type) *p, FLOAT css, FLOAT copp); +void XC(mgga_c_pkzb_set_params)(XC(func_type) *p, FLOAT beta, FLOAT d, FLOAT C0_0, FLOAT C0_1, FLOAT C0_2, FLOAT C0_3); + +/* Functionals that are defined as mixtures of others */ +void XC(mix_func) + (const XC(func_type) *func, int np, + const FLOAT *rho, const FLOAT *sigma, const FLOAT *lapl, const FLOAT *tau, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, FLOAT *vlapl, FLOAT *vtau, + FLOAT *v2rho2, FLOAT *v2sigma2, FLOAT *v2lapl2, FLOAT *v2tau2, + FLOAT *v2rhosigma, FLOAT *v2rholapl, FLOAT *v2rhotau, + FLOAT *v2sigmalapl, FLOAT *v2sigmatau, FLOAT *v2lapltau); + +#include "xc_unconfig.h" + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/libxc/src/xc_config.h b/libxc/src/xc_config.h new file mode 100644 index 000000000..808f12dad --- /dev/null +++ b/libxc/src/xc_config.h @@ -0,0 +1,69 @@ +#ifdef SINGLE_PRECISION +# define FLOAT float +# define POW powf +# define LOG logf +# define ABS fabsf +# define EXP expf +# define ERF erff +# define ERFC erfcf +# define SIN sinf +# define COS cosf +# define TAN tanf +# define ATAN atanf +# define ATAN2 atan2f +# define ASINH asinhf + +#ifdef HAVE_SQRTF +# define SQRT sqrtf +#else +# define SQRT sqrt +#endif + +#ifdef HAVE_CBRTF +#define CBRT cbrtf +#elif defined(HAVE_CBRT) +#define CBRT cbrt +#else +#define CBRT(x) powf((x), 1.0/3.0) +#endif + +# define XC(x) xc_s_ ## x +# define XC_U(X) XC_S_ ## X +# define FLOAT_EPSILON FLT_EPSILON +# define FLOAT_MIN FLT_MIN +# define FLOAT_MAX FLT_MAX + +#else +/* Double precision */ + +# define FLOAT double +# define POW pow +# define LOG log +# define ABS fabs +# define EXP exp +# define ERF erf +# define ERFC erfc +# define SIN sin +# define COS cos +# define TAN tan +# define ATAN atan +# define ATAN2 atan2 +# define ASINH asinh +# define SQRT sqrt + +#ifdef HAVE_CBRT +#define CBRT cbrt +#else +#define CBRT(x) pow((x), 1.0/3.0) +#endif + +# define XC(x) xc_ ## x +# define XC_U(X) XC_ ## X +# define FLOAT_EPSILON DBL_EPSILON +# define FLOAT_MIN DBL_MIN +# define FLOAT_MAX DBL_MAX + +#endif + +#define XC_FC_FUNC2(a,b) FC_FUNC_(a,b) +#define XC_FC_FUNC(a,b) XC_FC_FUNC2(XC(a), XC_U(b)) diff --git a/libxc/src/xc_f.c b/libxc/src/xc_f.c new file mode 100644 index 000000000..18b72676d --- /dev/null +++ b/libxc/src/xc_f.c @@ -0,0 +1,421 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include + +#include "config.h" + +#ifdef HAVE_FORTRAN + +#include "xc.h" +#include "string_f.h" + +/* xc_config.h needs to be included to use FLOAT and related macros*/ +#include "xc_config.h" + +/* version */ +void XC_FC_FUNC(f90_version, F90_VERSION) + (int *major, int *minor) +{ + XC(version)(major, minor); +} + + +/* info */ +CC_FORTRAN_INT XC_FC_FUNC(f90_info_number, F90_INFO_NUMBER) + (void **info) +{ + return (CC_FORTRAN_INT) ((XC(func_info_type) *)(*info))->number; +} + + +CC_FORTRAN_INT XC_FC_FUNC(f90_info_kind, F90_INFO_KIND) + (void **info) +{ + return (CC_FORTRAN_INT) ((XC(func_info_type) *)(*info))->kind; +} + + +void XC_FC_FUNC(f90_info_name, F90_INFO_NAME) + (void **info, STR_F_TYPE s STR_ARG1) +{ + TO_F_STR1(((XC(func_info_type) *)(*info))->name, s); +} + + +CC_FORTRAN_INT XC_FC_FUNC(f90_info_family, F90_INFO_FAMILY) + (void **info) +{ + return (CC_FORTRAN_INT) ((XC(func_info_type) *)(*info))->family; +} + + +CC_FORTRAN_INT XC_FC_FUNC(f90_info_flags, F90_INFO_FLAGS) + (void **info) +{ + return (CC_FORTRAN_INT) ((XC(func_info_type) *)(*info))->flags; +} + + +void XC_FC_FUNC(f90_info_refs, F90_INFO_REFS) + (void **info, CC_FORTRAN_INT *number, char **s, STR_F_TYPE ref_f STR_ARG1) +{ + char *c, ref[256]; /* hopefully no ref is longer than 256 characters ;) */ + XC(func_info_type) *func_p = (XC(func_info_type) *)(*info); + + if(*number == 0) *s = func_p->refs; + + if(*s == NULL || **s == '\0'){ + *number = -1; + return; + } + + for(c=ref; **s!='\0' && **s!='\n'; (*s)++, c++) + *c = **s; + *c = '\0'; + if(**s=='\n') (*s)++; + + TO_F_STR1(ref, ref_f); + + (*number)++; + fflush(stdout); +} + + +void XC_FC_FUNC(f90_functional_get_name, F90_FUNCTIONAL_GET_NAME) + (CC_FORTRAN_INT *func_number, STR_F_TYPE func_string STR_ARG1) +{ + char *name; + + name = XC(functional_get_name)(*func_number); + if ( name == NULL ) name = strdup("unknown"); + + TO_F_STR1(name, func_string); + free(name); +} + + +CC_FORTRAN_INT XC_FC_FUNC(f90_functional_get_number, F90_FUNCTIONAL_GET_NUMBER) + (STR_F_TYPE func_string STR_ARG1) +{ + char *name; + int ret; + + TO_C_STR1(func_string, name); + + ret = XC(functional_get_number)(name); + free(name); + + return (CC_FORTRAN_INT) ret; +} + + +/* functionals */ +CC_FORTRAN_INT XC_FC_FUNC(f90_family_from_id, F90_FAMILY_FROM_ID) + (CC_FORTRAN_INT *functional) +{ + return (CC_FORTRAN_INT) XC(family_from_id)((int) (*functional), NULL, NULL); +} + + +/* Standard initialization */ +void XC_FC_FUNC(f90_func_init, F90_FUNC_INIT) + (void **p, void **info, CC_FORTRAN_INT *functional, CC_FORTRAN_INT *nspin) +{ + XC(func_type) *func_p; + + func_p = (XC(func_type) *)malloc(sizeof(XC(func_type))); + XC(func_init)(func_p, (int) (*functional), (int) (*nspin)); + + *p = (void *) func_p; + *info = (void *)(func_p->info); +} + + +void XC_FC_FUNC(f90_func_end, F90_FUNC_END) + (void **p) +{ + XC(func_end)((XC(func_type) *)(*p)); + free(*p); + *p = NULL; +} + + +/* LDAs */ + +void XC_FC_FUNC(f90_lda, F90_LDA) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, + FLOAT *zk, FLOAT *vrho, FLOAT *v2rho2, FLOAT *v3rho3) +{ + XC(lda)((XC(func_type) *)(*p), *np, rho, zk, vrho, v2rho2, v3rho3); +} + + +void XC_FC_FUNC(f90_lda_exc, F90_LDA_EXC) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, + FLOAT *zk) +{ + XC(lda)((XC(func_type) *)(*p), *np, rho, zk, NULL, NULL, NULL); +} + + +void XC_FC_FUNC(f90_lda_exc_vxc, F90_LDA_EXC_VXC) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, + FLOAT *zk, FLOAT *vrho) +{ + XC(lda)((XC(func_type) *)(*p), *np, rho, zk, vrho, NULL, NULL); +} + + +void XC_FC_FUNC(f90_lda_vxc, F90_LDA_VXC) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, + FLOAT *vrho) +{ + XC(lda)((XC(func_type) *)(*p), *np, rho, NULL, vrho, NULL, NULL); +} + + +void XC_FC_FUNC(f90_lda_fxc, F90_LDA_FXC) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, + FLOAT *v2rho2) +{ + XC(lda)((XC(func_type) *)(*p), *np, rho, NULL, NULL, v2rho2, NULL); +} + + +void XC_FC_FUNC(f90_lda_kxc, F90_LDA_KXC) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, + FLOAT *v3rho3) +{ + XC(lda)((XC(func_type) *)(*p), *np, rho, NULL, NULL, NULL, v3rho3); +} + + +/* Now come some special initializations */ + +/* parameter of LDA_1D */ +void XC_FC_FUNC(f90_lda_x_1d_set_par, F90_LDA_X_1D_SET_PAR) + (void **p, CC_FORTRAN_INT *interaction, FLOAT *bb) +{ + XC(lda_x_1d_set_params)((XC(func_type) *)(*p), *interaction, *bb); +} + +/* parameter of Xalpha */ +void XC_FC_FUNC(f90_lda_c_xalpha_set_par, F90_LDA_C_XALPHA_SET_PAR) + (void **p, FLOAT *alpha) +{ + XC(lda_c_xalpha_set_params)((XC(func_type) *)(*p), *alpha); +} + +/* relativistic option of LDA_X */ +void XC_FC_FUNC(f90_lda_x_set_par, F90_LDA_X_SET_PAR) + (void **p, FLOAT *alpha, CC_FORTRAN_INT *relativistic, FLOAT *omega) +{ + XC(lda_x_set_params)((XC(func_type) *)(*p), *alpha, *relativistic, *omega); +} + +/* parameter of CSC */ +void XC_FC_FUNC(f90_lda_c_1d_csc_set_par, F90_LDA_C_1D_CSC_SET_PAR) + (void **p, CC_FORTRAN_INT *interaction, FLOAT *bb) +{ + XC(lda_c_1d_csc_set_params)((XC(func_type) *)(*p), *interaction, *bb); +} + +/* parameter of PRM */ +void XC_FC_FUNC(f90_lda_c_2d_prm_set_par, F90_LDA_C_2D_PRM_SET_PAR) + (void **p, FLOAT *N) +{ + XC(lda_c_2d_prm_set_params)((XC(func_type) *)(*p), *N); +} + + +/* GGAs */ + +void XC_FC_FUNC(f90_gga, F90_GGA) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, FLOAT *sigma, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, + FLOAT *v2rho2, FLOAT *v2rhosigma, FLOAT *v2sigma2, + FLOAT *v3rho3, FLOAT *v3rho2sigma, FLOAT *v3rhosigma2, FLOAT *v3sigma3) +{ + XC(gga)((XC(func_type) *)(*p), *np, rho, sigma, zk, vrho, vsigma, + v2rho2, v2rhosigma, v2sigma2, v3rho3, v3rho2sigma, v3rhosigma2, v3sigma3); +} + +void XC_FC_FUNC(f90_gga_exc, F90_GGA_EXC) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, FLOAT *sigma, + FLOAT *zk) +{ + XC(gga)((XC(func_type) *)(*p), *np, rho, sigma, zk, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL); +} + +void XC_FC_FUNC(f90_gga_exc_vxc, F90_GGA_EXC_VXC) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, FLOAT *sigma, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma) +{ + XC(gga)((XC(func_type) *)(*p), *np, rho, sigma, zk, vrho, vsigma, + NULL, NULL, NULL, NULL, NULL, NULL, NULL); +} + +void XC_FC_FUNC(f90_gga_vxc, F90_GGA_VXC) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, FLOAT *sigma, + FLOAT *vrho, FLOAT *vsigma) +{ + XC(gga)((XC(func_type) *)(*p), *np, rho, sigma, NULL, vrho, vsigma, + NULL, NULL, NULL, NULL, NULL, NULL, NULL); +} + +void XC_FC_FUNC(f90_gga_fxc, F90_GGA_FXC) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, FLOAT *sigma, + FLOAT *v2rho2, FLOAT *v2rhosigma, FLOAT *v2sigma2) +{ + XC(gga)((XC(func_type) *)(*p), *np, rho, sigma, NULL, NULL, NULL, + v2rho2, v2rhosigma, v2sigma2, NULL, NULL, NULL, NULL); +} + +void XC_FC_FUNC(f90_gga_kxc, F90_GGA_KXC) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, FLOAT *sigma, + FLOAT *v3rho3, FLOAT *v3rho2sigma, FLOAT *v3rhosigma2, FLOAT *v3sigma3) +{ + XC(gga)((XC(func_type) *)(*p), *np, rho, sigma, NULL, NULL, NULL, + NULL, NULL, NULL, v3rho3, v3rho2sigma, v3rhosigma2, v3sigma3); +} + + +/* the van Leeuwen & Baerends functional is special */ +void XC_FC_FUNC(f90_gga_lb_set_par, F90_GGA_LB_SET_PAR) + (void **p, CC_FORTRAN_INT *modified, FLOAT *threshold, FLOAT *ip, FLOAT *qtot) +{ + XC(gga_lb_set_params)((XC(func_type) *)(*p), *modified, *threshold, *ip, *qtot); +} + +void XC_FC_FUNC(f90_gga_lb_modified, F90_GGA_LB_MODIFIED) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, FLOAT *sigma, FLOAT *r, FLOAT *vrho) +{ + XC(gga_lb_modified)((XC(func_type) *)(*p), *np, rho, sigma, *r, vrho); +} + +void XC_FC_FUNC(f90_gga_x_wpbeh_set_par, F90_GGA_X_WPBEH_SET_PAR) + (void **p, FLOAT *omega) +{ + XC(gga_x_wpbeh_set_params)((XC(func_type) *)(*p), *omega); +} + +void XC_FC_FUNC(f90_gga_x_hjs_set_par, F90_GGA_X_HJS_SET_PAR) + (void **p, FLOAT *omega) +{ + XC(gga_x_hjs_set_params)((XC(func_type) *)(*p), *omega); +} + +void XC_FC_FUNC(f90_gga_ak13_get_asymptotic, F90_GGA_AK13_GET_ASYMPTOTIC) + (FLOAT *homo, FLOAT *asymp) +{ + *asymp = XC(gga_ak13_get_asymptotic)(*homo); +} + +void XC_FC_FUNC(f90_hyb_exx_coef, F90_HYB_EXX_COEF) + (void **p, FLOAT *coef) +{ + *coef = XC(hyb_exx_coef)((XC(func_type) *)(*p)); +} + +void XC_FC_FUNC(f90_hyb_cam_coef, F90_HYB_CAM_COEF) + (void **p, FLOAT *omega, FLOAT *alpha, FLOAT *beta) +{ + XC(hyb_cam_coef)((XC(func_type) *)(*p), omega, alpha, beta); +} + +void XC_FC_FUNC(f90_hyb_gga_xc_hse_set_par, F90_HYB_GGA_XC_HSE_SET_PAR) + (void **p, FLOAT *beta, FLOAT *omega) +{ + XC(hyb_gga_xc_hse_set_params)((XC(func_type) *)(*p), *beta, *omega); +} + +void XC_FC_FUNC(f90_hyb_gga_xc_pbeh_set_par, F90_HYB_GGA_XC_PBEH_SET_PAR) + (void **p, FLOAT *alpha) +{ + XC(hyb_gga_xc_pbeh_set_params)((XC(func_type) *)(*p), *alpha); +} + +/* meta-GGAs */ + +void XC_FC_FUNC(f90_mgga, F90_MGGA) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, FLOAT *sigma, FLOAT *lapl, FLOAT *tau, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, FLOAT *vlapl, FLOAT *vtau, + FLOAT *v2rho2, FLOAT *v2sigma2, FLOAT *v2lapl2, FLOAT *v2tau2, + FLOAT *v2rhosigma, FLOAT *v2rholapl, FLOAT *v2rhotau, + FLOAT *v2sigmalapl, FLOAT *v2sigmatau, FLOAT *v2lapltau) +{ + XC(mgga)((XC(func_type) *)(*p), *np, rho, sigma, lapl, tau, + zk, vrho, vsigma, vlapl, vtau, + v2rho2, v2sigma2, v2lapl2, v2tau2, v2rhosigma, v2rholapl, v2rhotau, + v2sigmalapl, v2sigmatau, v2lapltau); + +} + +void XC_FC_FUNC(f90_mgga_exc, F90_MGGA_EXC) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, FLOAT *sigma, FLOAT *lapl, FLOAT *tau, + FLOAT *zk) +{ + XC(mgga)((XC(func_type) *)(*p), *np, rho, sigma, lapl, tau, + zk, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +} + +void XC_FC_FUNC(f90_mgga_exc_vxc, F90_MGGA_EXC_VXC) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, FLOAT *sigma, FLOAT *lapl, FLOAT *tau, + FLOAT *zk, FLOAT *vrho, FLOAT *vsigma, FLOAT *vlapl, FLOAT *vtau) +{ + XC(mgga)((XC(func_type) *)(*p), *np, rho, sigma, lapl, tau, + zk, vrho, vsigma, vlapl, vtau, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +} + +void XC_FC_FUNC(f90_mgga_vxc, F90_MGGA_VXC) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, FLOAT *sigma, FLOAT *lapl, FLOAT *tau, + FLOAT *vrho, FLOAT *vsigma, FLOAT *vlapl, FLOAT *vtau) +{ + XC(mgga)((XC(func_type) *)(*p), *np, rho, sigma, lapl, tau, + NULL, vrho, vsigma, vlapl, vtau, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +} + +void XC_FC_FUNC(f90_mgga_fxc, F90_MGGA_FXC) + (void **p, CC_FORTRAN_INT *np, FLOAT *rho, FLOAT *sigma, FLOAT *lapl, FLOAT *tau, + FLOAT *v2rho2, FLOAT *v2sigma2, FLOAT *v2lapl2, FLOAT *v2tau2, + FLOAT *v2rhosigma, FLOAT *v2rholapl, FLOAT *v2rhotau, + FLOAT *v2sigmalapl, FLOAT *v2sigmatau, FLOAT *v2lapltau) +{ + XC(mgga)((XC(func_type) *)(*p), *np, rho, sigma, lapl, tau, + NULL, NULL, NULL, NULL, NULL, + v2rho2, v2sigma2, v2lapl2, v2tau2, v2rhosigma, v2rholapl, v2rhotau, + v2sigmalapl, v2sigmatau, v2lapltau); +} + +/* parameter of TP09 */ +void XC_FC_FUNC(f90_mgga_x_tb09_set_par, F90_MGGA_X_TB09_SET_PAR) + (void **p, FLOAT *cc) +{ + XC(mgga_x_tb09_set_params)((XC(func_type) *)(*p), *cc); +} + + +#endif diff --git a/libxc/src/xc_s.h b/libxc/src/xc_s.h new file mode 100644 index 000000000..afc975c15 --- /dev/null +++ b/libxc/src/xc_s.h @@ -0,0 +1,28 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef _XC_S_H +#define _XC_S_H + +#ifndef SINGLE_PRECISION +#define SINGLE_PRECISION +#endif + +#include "xc.h" + +#endif diff --git a/libxc/src/xc_unconfig.h b/libxc/src/xc_unconfig.h new file mode 100644 index 000000000..ced92c85e --- /dev/null +++ b/libxc/src/xc_unconfig.h @@ -0,0 +1,18 @@ +#undef FLOAT +#undef POW +#undef LOG +#undef ABS +#undef EXP +#undef ERF +#undef ERFC +#undef SIN +#undef COS +#undef TAN +#undef ATAN +#undef ATAN2 +#undef ASINH +#undef SQRT +#undef CBRT +#undef FLOAT_EPSILON +#undef FLOAT_MIN +#undef FLOAT_MAX diff --git a/libxc/test-driver b/libxc/test-driver new file mode 100755 index 000000000..32bf39e83 --- /dev/null +++ b/libxc/test-driver @@ -0,0 +1,127 @@ +#! /bin/sh +# test-driver - basic testsuite driver script. + +scriptversion=2012-06-27.10; # UTC + +# Copyright (C) 2011-2013 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +# Make unconditional expansion of undefined variables an error. This +# helps a lot in preventing typo-related bugs. +set -u + +usage_error () +{ + echo "$0: $*" >&2 + print_usage >&2 + exit 2 +} + +print_usage () +{ + cat <$log_file 2>&1 +estatus=$? +if test $enable_hard_errors = no && test $estatus -eq 99; then + estatus=1 +fi + +case $estatus:$expect_failure in + 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; + 0:*) col=$grn res=PASS recheck=no gcopy=no;; + 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; + 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; + *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; + *:*) col=$red res=FAIL recheck=yes gcopy=yes;; +esac + +# Report outcome to console. +echo "${col}${res}${std}: $test_name" + +# Register the test result, and other relevant metadata. +echo ":test-result: $res" > $trs_file +echo ":global-test-result: $res" >> $trs_file +echo ":recheck: $recheck" >> $trs_file +echo ":copy-in-global-log: $gcopy" >> $trs_file + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/libxc/testsuite/Makefile.am b/libxc/testsuite/Makefile.am new file mode 100644 index 000000000..7013a9fd9 --- /dev/null +++ b/libxc/testsuite/Makefile.am @@ -0,0 +1,45 @@ +## Process this file with automake to produce Makefile.in + +## Copyright (C) 2002 M. Marques, A. Castro, A. Rubio, G. Bertsch +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU Lesser General Public License as published by +## the Free Software Foundation; either version 2, or (at your option) +## any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. +## +## $Id$ + +noinst_PROGRAMS = xc-get_data xc-consistency xc-regression xc-error +dist_noinst_SCRIPTS = xc-run_testsuite xc-reference.pl +TESTS = xc-run_testsuite +TESTS_ENVIRONMENT = buildir=$(top_builddir)/testsuite + +xc_get_data_SOURCES = xc-get_data.c +xc_get_data_LDADD = -L../src/ -lxc -lm +xc_get_data_CPPFLAGS = -I$(srcdir)/../src/ -I$(top_builddir)/src + +xc_consistency_SOURCES = xc-consistency.c +xc_consistency_LDADD = -L../src/ -lxc -lm +xc_consistency_CPPFLAGS = -I$(srcdir)/../src/ -I$(top_builddir)/src + +xc_regression_SOURCES = xc-regression.c +xc_regression_LDADD = -L../src/ -lxc -lm +xc_regression_CPPFLAGS = -I$(srcdir)/../src/ -I$(top_builddir)/src + +xc_error_SOURCES = xc-error.c +xc_error_LDADD = -lm +xc_error_CPPFLAGS = -I$(srcdir)/../src/ -I$(top_builddir)/src + +dist_noinst_DATA = $(srcdir)/df_repo/*.data $(srcdir)/regression/*.pol.bz2 $(srcdir)/regression/*.unpol.bz2 $(srcdir)/input/* + +CLEANFILES = *~ *.bak diff --git a/libxc/testsuite/Makefile.in b/libxc/testsuite/Makefile.in new file mode 100644 index 000000000..67ea1be85 --- /dev/null +++ b/libxc/testsuite/Makefile.in @@ -0,0 +1,1061 @@ +# Makefile.in generated by automake 1.13.4 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +noinst_PROGRAMS = xc-get_data$(EXEEXT) xc-consistency$(EXEEXT) \ + xc-regression$(EXEEXT) xc-error$(EXEEXT) +subdir = testsuite +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(dist_noinst_SCRIPTS) $(top_srcdir)/depcomp \ + $(dist_noinst_DATA) $(top_srcdir)/test-driver +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ac_prog_sed.m4 \ + $(top_srcdir)/m4/ax_f90_module_extension.m4 \ + $(top_srcdir)/m4/fc_integer.m4 $(top_srcdir)/m4/fcflags.m4 \ + $(top_srcdir)/m4/fortran.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +PROGRAMS = $(noinst_PROGRAMS) +am_xc_consistency_OBJECTS = xc_consistency-xc-consistency.$(OBJEXT) +xc_consistency_OBJECTS = $(am_xc_consistency_OBJECTS) +xc_consistency_DEPENDENCIES = +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +am_xc_error_OBJECTS = xc_error-xc-error.$(OBJEXT) +xc_error_OBJECTS = $(am_xc_error_OBJECTS) +xc_error_DEPENDENCIES = +am_xc_get_data_OBJECTS = xc_get_data-xc-get_data.$(OBJEXT) +xc_get_data_OBJECTS = $(am_xc_get_data_OBJECTS) +xc_get_data_DEPENDENCIES = +am_xc_regression_OBJECTS = xc_regression-xc-regression.$(OBJEXT) +xc_regression_OBJECTS = $(am_xc_regression_OBJECTS) +xc_regression_DEPENDENCIES = +SCRIPTS = $(dist_noinst_SCRIPTS) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(xc_consistency_SOURCES) $(xc_error_SOURCES) \ + $(xc_get_data_SOURCES) $(xc_regression_SOURCES) +DIST_SOURCES = $(xc_consistency_SOURCES) $(xc_error_SOURCES) \ + $(xc_get_data_SOURCES) $(xc_regression_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +DATA = $(dist_noinst_DATA) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__tty_colors_dummy = \ + mgn= red= grn= lgn= blu= brg= std=; \ + am__color_tests=no +am__tty_colors = { \ + $(am__tty_colors_dummy); \ + if test "X$(AM_COLOR_TESTS)" = Xno; then \ + am__color_tests=no; \ + elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ + am__color_tests=yes; \ + elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ + am__color_tests=yes; \ + fi; \ + if test $$am__color_tests = yes; then \ + red=''; \ + grn=''; \ + lgn=''; \ + blu=''; \ + mgn=''; \ + brg=''; \ + std=''; \ + fi; \ +} +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__recheck_rx = ^[ ]*:recheck:[ ]* +am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* +am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* +# A command that, given a newline-separated list of test names on the +# standard input, print the name of the tests that are to be re-run +# upon "make recheck". +am__list_recheck_tests = $(AWK) '{ \ + recheck = 1; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + { \ + if ((getline line2 < ($$0 ".log")) < 0) \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ + { \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ + { \ + break; \ + } \ + }; \ + if (recheck) \ + print $$0; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# A command that, given a newline-separated list of test names on the +# standard input, create the global log from their .trs and .log files. +am__create_global_log = $(AWK) ' \ +function fatal(msg) \ +{ \ + print "fatal: making $@: " msg | "cat >&2"; \ + exit 1; \ +} \ +function rst_section(header) \ +{ \ + print header; \ + len = length(header); \ + for (i = 1; i <= len; i = i + 1) \ + printf "="; \ + printf "\n\n"; \ +} \ +{ \ + copy_in_global_log = 1; \ + global_test_result = "RUN"; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".trs"); \ + if (line ~ /$(am__global_test_result_rx)/) \ + { \ + sub("$(am__global_test_result_rx)", "", line); \ + sub("[ ]*$$", "", line); \ + global_test_result = line; \ + } \ + else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ + copy_in_global_log = 0; \ + }; \ + if (copy_in_global_log) \ + { \ + rst_section(global_test_result ": " $$0); \ + while ((rc = (getline line < ($$0 ".log"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".log"); \ + print line; \ + }; \ + printf "\n"; \ + }; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# Restructured Text title. +am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } +# Solaris 10 'make', and several other traditional 'make' implementations, +# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it +# by disabling -e (using the XSI extension "set +e") if it's set. +am__sh_e_setup = case $$- in *e*) set +e;; esac +# Default flags passed to test drivers. +am__common_driver_flags = \ + --color-tests "$$am__color_tests" \ + --enable-hard-errors "$$am__enable_hard_errors" \ + --expect-failure "$$am__expect_failure" +# To be inserted before the command running the test. Creates the +# directory for the log if needed. Stores in $dir the directory +# containing $f, in $tst the test, in $log the log. Executes the +# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and +# passes TESTS_ENVIRONMENT. Set up options for the wrapper that +# will run the test scripts (or their associated LOG_COMPILER, if +# thy have one). +am__check_pre = \ +$(am__sh_e_setup); \ +$(am__vpath_adj_setup) $(am__vpath_adj) \ +$(am__tty_colors); \ +srcdir=$(srcdir); export srcdir; \ +case "$@" in \ + */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ + *) am__odir=.;; \ +esac; \ +test "x$$am__odir" = x"." || test -d "$$am__odir" \ + || $(MKDIR_P) "$$am__odir" || exit $$?; \ +if test -f "./$$f"; then dir=./; \ +elif test -f "$$f"; then dir=; \ +else dir="$(srcdir)/"; fi; \ +tst=$$dir$$f; log='$@'; \ +if test -n '$(DISABLE_HARD_ERRORS)'; then \ + am__enable_hard_errors=no; \ +else \ + am__enable_hard_errors=yes; \ +fi; \ +case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ + am__expect_failure=yes;; \ + *) \ + am__expect_failure=no;; \ +esac; \ +$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) +# A shell command to get the names of the tests scripts with any registered +# extension removed (i.e., equivalently, the names of the test logs, with +# the '.log' extension removed). The result is saved in the shell variable +# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, +# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", +# since that might cause problem with VPATH rewrites for suffix-less tests. +# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. +am__set_TESTS_bases = \ + bases='$(TEST_LOGS)'; \ + bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ + bases=`echo $$bases` +RECHECK_LOGS = $(TEST_LOGS) +AM_RECURSIVE_TARGETS = check recheck +TEST_SUITE_LOG = test-suite.log +TEST_EXTENSIONS = @EXEEXT@ .test +LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver +LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) +am__set_b = \ + case '$@' in \ + */*) \ + case '$*' in \ + */*) b='$*';; \ + *) b=`echo '$@' | sed 's/\.log$$//'`; \ + esac;; \ + *) \ + b='$*';; \ + esac +am__test_logs1 = $(TESTS:=.log) +am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) +TEST_LOGS = $(am__test_logs2:.test.log=.log) +TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver +TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ + $(TEST_LOG_FLAGS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F90_ACCEPTS_LINE_NUMBERS = @F90_ACCEPTS_LINE_NUMBERS@ +FC = @FC@ +FCCPP = @FCCPP@ +FCFLAGS = @FCFLAGS@ +FCFLAGS_f90 = @FCFLAGS_f90@ +FCLIBS = @FCLIBS@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LONG_LINES = @LONG_LINES@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +XC_LT_VERSION = @XC_LT_VERSION@ +XC_MAJOR_VERSION = @XC_MAJOR_VERSION@ +XC_MINOR_VERSION = @XC_MINOR_VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_FC = @ac_ct_FC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +ax_cv_f90_modext = @ax_cv_f90_modext@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +dist_noinst_SCRIPTS = xc-run_testsuite xc-reference.pl +TESTS = xc-run_testsuite +TESTS_ENVIRONMENT = buildir=$(top_builddir)/testsuite +xc_get_data_SOURCES = xc-get_data.c +xc_get_data_LDADD = -L../src/ -lxc -lm +xc_get_data_CPPFLAGS = -I$(srcdir)/../src/ -I$(top_builddir)/src +xc_consistency_SOURCES = xc-consistency.c +xc_consistency_LDADD = -L../src/ -lxc -lm +xc_consistency_CPPFLAGS = -I$(srcdir)/../src/ -I$(top_builddir)/src +xc_regression_SOURCES = xc-regression.c +xc_regression_LDADD = -L../src/ -lxc -lm +xc_regression_CPPFLAGS = -I$(srcdir)/../src/ -I$(top_builddir)/src +xc_error_SOURCES = xc-error.c +xc_error_LDADD = -lm +xc_error_CPPFLAGS = -I$(srcdir)/../src/ -I$(top_builddir)/src +dist_noinst_DATA = $(srcdir)/df_repo/*.data $(srcdir)/regression/*.pol.bz2 $(srcdir)/regression/*.unpol.bz2 $(srcdir)/input/* +CLEANFILES = *~ *.bak +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu testsuite/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu testsuite/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +xc-consistency$(EXEEXT): $(xc_consistency_OBJECTS) $(xc_consistency_DEPENDENCIES) $(EXTRA_xc_consistency_DEPENDENCIES) + @rm -f xc-consistency$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(xc_consistency_OBJECTS) $(xc_consistency_LDADD) $(LIBS) + +xc-error$(EXEEXT): $(xc_error_OBJECTS) $(xc_error_DEPENDENCIES) $(EXTRA_xc_error_DEPENDENCIES) + @rm -f xc-error$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(xc_error_OBJECTS) $(xc_error_LDADD) $(LIBS) + +xc-get_data$(EXEEXT): $(xc_get_data_OBJECTS) $(xc_get_data_DEPENDENCIES) $(EXTRA_xc_get_data_DEPENDENCIES) + @rm -f xc-get_data$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(xc_get_data_OBJECTS) $(xc_get_data_LDADD) $(LIBS) + +xc-regression$(EXEEXT): $(xc_regression_OBJECTS) $(xc_regression_DEPENDENCIES) $(EXTRA_xc_regression_DEPENDENCIES) + @rm -f xc-regression$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(xc_regression_OBJECTS) $(xc_regression_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xc_consistency-xc-consistency.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xc_error-xc-error.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xc_get_data-xc-get_data.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xc_regression-xc-regression.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +xc_consistency-xc-consistency.o: xc-consistency.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_consistency_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xc_consistency-xc-consistency.o -MD -MP -MF $(DEPDIR)/xc_consistency-xc-consistency.Tpo -c -o xc_consistency-xc-consistency.o `test -f 'xc-consistency.c' || echo '$(srcdir)/'`xc-consistency.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xc_consistency-xc-consistency.Tpo $(DEPDIR)/xc_consistency-xc-consistency.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xc-consistency.c' object='xc_consistency-xc-consistency.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_consistency_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xc_consistency-xc-consistency.o `test -f 'xc-consistency.c' || echo '$(srcdir)/'`xc-consistency.c + +xc_consistency-xc-consistency.obj: xc-consistency.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_consistency_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xc_consistency-xc-consistency.obj -MD -MP -MF $(DEPDIR)/xc_consistency-xc-consistency.Tpo -c -o xc_consistency-xc-consistency.obj `if test -f 'xc-consistency.c'; then $(CYGPATH_W) 'xc-consistency.c'; else $(CYGPATH_W) '$(srcdir)/xc-consistency.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xc_consistency-xc-consistency.Tpo $(DEPDIR)/xc_consistency-xc-consistency.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xc-consistency.c' object='xc_consistency-xc-consistency.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_consistency_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xc_consistency-xc-consistency.obj `if test -f 'xc-consistency.c'; then $(CYGPATH_W) 'xc-consistency.c'; else $(CYGPATH_W) '$(srcdir)/xc-consistency.c'; fi` + +xc_error-xc-error.o: xc-error.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_error_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xc_error-xc-error.o -MD -MP -MF $(DEPDIR)/xc_error-xc-error.Tpo -c -o xc_error-xc-error.o `test -f 'xc-error.c' || echo '$(srcdir)/'`xc-error.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xc_error-xc-error.Tpo $(DEPDIR)/xc_error-xc-error.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xc-error.c' object='xc_error-xc-error.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_error_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xc_error-xc-error.o `test -f 'xc-error.c' || echo '$(srcdir)/'`xc-error.c + +xc_error-xc-error.obj: xc-error.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_error_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xc_error-xc-error.obj -MD -MP -MF $(DEPDIR)/xc_error-xc-error.Tpo -c -o xc_error-xc-error.obj `if test -f 'xc-error.c'; then $(CYGPATH_W) 'xc-error.c'; else $(CYGPATH_W) '$(srcdir)/xc-error.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xc_error-xc-error.Tpo $(DEPDIR)/xc_error-xc-error.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xc-error.c' object='xc_error-xc-error.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_error_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xc_error-xc-error.obj `if test -f 'xc-error.c'; then $(CYGPATH_W) 'xc-error.c'; else $(CYGPATH_W) '$(srcdir)/xc-error.c'; fi` + +xc_get_data-xc-get_data.o: xc-get_data.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_get_data_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xc_get_data-xc-get_data.o -MD -MP -MF $(DEPDIR)/xc_get_data-xc-get_data.Tpo -c -o xc_get_data-xc-get_data.o `test -f 'xc-get_data.c' || echo '$(srcdir)/'`xc-get_data.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xc_get_data-xc-get_data.Tpo $(DEPDIR)/xc_get_data-xc-get_data.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xc-get_data.c' object='xc_get_data-xc-get_data.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_get_data_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xc_get_data-xc-get_data.o `test -f 'xc-get_data.c' || echo '$(srcdir)/'`xc-get_data.c + +xc_get_data-xc-get_data.obj: xc-get_data.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_get_data_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xc_get_data-xc-get_data.obj -MD -MP -MF $(DEPDIR)/xc_get_data-xc-get_data.Tpo -c -o xc_get_data-xc-get_data.obj `if test -f 'xc-get_data.c'; then $(CYGPATH_W) 'xc-get_data.c'; else $(CYGPATH_W) '$(srcdir)/xc-get_data.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xc_get_data-xc-get_data.Tpo $(DEPDIR)/xc_get_data-xc-get_data.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xc-get_data.c' object='xc_get_data-xc-get_data.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_get_data_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xc_get_data-xc-get_data.obj `if test -f 'xc-get_data.c'; then $(CYGPATH_W) 'xc-get_data.c'; else $(CYGPATH_W) '$(srcdir)/xc-get_data.c'; fi` + +xc_regression-xc-regression.o: xc-regression.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_regression_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xc_regression-xc-regression.o -MD -MP -MF $(DEPDIR)/xc_regression-xc-regression.Tpo -c -o xc_regression-xc-regression.o `test -f 'xc-regression.c' || echo '$(srcdir)/'`xc-regression.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xc_regression-xc-regression.Tpo $(DEPDIR)/xc_regression-xc-regression.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xc-regression.c' object='xc_regression-xc-regression.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_regression_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xc_regression-xc-regression.o `test -f 'xc-regression.c' || echo '$(srcdir)/'`xc-regression.c + +xc_regression-xc-regression.obj: xc-regression.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_regression_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xc_regression-xc-regression.obj -MD -MP -MF $(DEPDIR)/xc_regression-xc-regression.Tpo -c -o xc_regression-xc-regression.obj `if test -f 'xc-regression.c'; then $(CYGPATH_W) 'xc-regression.c'; else $(CYGPATH_W) '$(srcdir)/xc-regression.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xc_regression-xc-regression.Tpo $(DEPDIR)/xc_regression-xc-regression.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xc-regression.c' object='xc_regression-xc-regression.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xc_regression_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xc_regression-xc-regression.obj `if test -f 'xc-regression.c'; then $(CYGPATH_W) 'xc-regression.c'; else $(CYGPATH_W) '$(srcdir)/xc-regression.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +# Recover from deleted '.trs' file; this should ensure that +# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create +# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells +# to avoid problems with "make -n". +.log.trs: + rm -f $< $@ + $(MAKE) $(AM_MAKEFLAGS) $< + +# Leading 'am--fnord' is there to ensure the list of targets does not +# expand to empty, as could happen e.g. with make check TESTS=''. +am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) +am--force-recheck: + @: + +$(TEST_SUITE_LOG): $(TEST_LOGS) + @$(am__set_TESTS_bases); \ + am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ + redo_bases=`for i in $$bases; do \ + am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ + done`; \ + if test -n "$$redo_bases"; then \ + redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ + redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ + if $(am__make_dryrun); then :; else \ + rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ + fi; \ + fi; \ + if test -n "$$am__remaking_logs"; then \ + echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ + "recursion detected" >&2; \ + else \ + am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ + fi; \ + if $(am__make_dryrun); then :; else \ + st=0; \ + errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ + for i in $$redo_bases; do \ + test -f $$i.trs && test -r $$i.trs \ + || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ + test -f $$i.log && test -r $$i.log \ + || { echo "$$errmsg $$i.log" >&2; st=1; }; \ + done; \ + test $$st -eq 0 || exit 1; \ + fi + @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ + ws='[ ]'; \ + results=`for b in $$bases; do echo $$b.trs; done`; \ + test -n "$$results" || results=/dev/null; \ + all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ + pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ + fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ + skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ + xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ + xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ + error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ + if test `expr $$fail + $$xpass + $$error` -eq 0; then \ + success=true; \ + else \ + success=false; \ + fi; \ + br='==================='; br=$$br$$br$$br$$br; \ + result_count () \ + { \ + if test x"$$1" = x"--maybe-color"; then \ + maybe_colorize=yes; \ + elif test x"$$1" = x"--no-color"; then \ + maybe_colorize=no; \ + else \ + echo "$@: invalid 'result_count' usage" >&2; exit 4; \ + fi; \ + shift; \ + desc=$$1 count=$$2; \ + if test $$maybe_colorize = yes && test $$count -gt 0; then \ + color_start=$$3 color_end=$$std; \ + else \ + color_start= color_end=; \ + fi; \ + echo "$${color_start}# $$desc $$count$${color_end}"; \ + }; \ + create_testsuite_report () \ + { \ + result_count $$1 "TOTAL:" $$all "$$brg"; \ + result_count $$1 "PASS: " $$pass "$$grn"; \ + result_count $$1 "SKIP: " $$skip "$$blu"; \ + result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ + result_count $$1 "FAIL: " $$fail "$$red"; \ + result_count $$1 "XPASS:" $$xpass "$$red"; \ + result_count $$1 "ERROR:" $$error "$$mgn"; \ + }; \ + { \ + echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ + $(am__rst_title); \ + create_testsuite_report --no-color; \ + echo; \ + echo ".. contents:: :depth: 2"; \ + echo; \ + for b in $$bases; do echo $$b; done \ + | $(am__create_global_log); \ + } >$(TEST_SUITE_LOG).tmp || exit 1; \ + mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ + if $$success; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ + fi; \ + echo "$${col}$$br$${std}"; \ + echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}$$br$${std}"; \ + create_testsuite_report --maybe-color; \ + echo "$$col$$br$$std"; \ + if $$success; then :; else \ + echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ + if test -n "$(PACKAGE_BUGREPORT)"; then \ + echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ + fi; \ + echo "$$col$$br$$std"; \ + fi; \ + $$success || exit 1 + +check-TESTS: + @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list + @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + trs_list=`for i in $$bases; do echo $$i.trs; done`; \ + log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ + exit $$?; +recheck: all + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + bases=`for i in $$bases; do echo $$i; done \ + | $(am__list_recheck_tests)` || exit 1; \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + log_list=`echo $$log_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ + am__force_recheck=am--force-recheck \ + TEST_LOGS="$$log_list"; \ + exit $$? +xc-run_testsuite.log: xc-run_testsuite + @p='xc-run_testsuite'; \ + b='xc-run_testsuite'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +.test.log: + @p='$<'; \ + $(am__set_b); \ + $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +@am__EXEEXT_TRUE@.test$(EXEEXT).log: +@am__EXEEXT_TRUE@ @p='$<'; \ +@am__EXEEXT_TRUE@ $(am__set_b); \ +@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ +@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ +@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ +@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile $(PROGRAMS) $(SCRIPTS) $(DATA) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) + -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) + -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \ + clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \ + ctags ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + recheck tags tags-am uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libxc/testsuite/df_repo/gga_c_lyp.data b/libxc/testsuite/df_repo/gga_c_lyp.data new file mode 100644 index 000000000..3241972c9 --- /dev/null +++ b/libxc/testsuite/df_repo/gga_c_lyp.data @@ -0,0 +1,601 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.179175399535E+00 + vrhoa = -0.567254370239E-01 + vrhob = -0.567254370239E-01 + vsigmaaa = 0.603063052247E-04 + vsigmaab = 0.562668577012E-04 + vsigmabb = 0.603063052247E-04 + + v2rhoa2 = 0.133393844920E-01 + v2rhoab = -0.152396936370E-01 + v2rhob2 = 0.133393844920E-01 + + v2rhoasigmaaa = -0.139567528486E-03 + v2rhoasigmaab = -0.291609267169E-04 + v2rhoasigmabb = 0.811155700026E-04 + v2rhobsigmaaa = 0.811155700026E-04 + v2rhobsigmaab = -0.291609267169E-04 + v2rhobsigmabb = -0.139567528486E-03 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.178874704439E+00 + vrhoa = -0.568743789287E-01 + vrhob = -0.568743789287E-01 + vsigmaaa = 0.603063052247E-04 + vsigmaab = 0.562668577012E-04 + vsigmabb = 0.603063052247E-04 + + v2rhoa2 = 0.138019299001E-01 + v2rhoab = -0.154679607816E-01 + v2rhob2 = 0.138019299001E-01 + + v2rhoasigmaaa = -0.139567528486E-03 + v2rhoasigmaab = -0.291609267169E-04 + v2rhoasigmabb = 0.811155700026E-04 + v2rhobsigmaaa = 0.811155700026E-04 + v2rhobsigmaab = -0.291609267169E-04 + v2rhobsigmabb = -0.139567528486E-03 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.148704448499E+00 + vrhoa = -0.607218516385E-01 + vrhob = -0.607218516385E-01 + vsigmaaa = 0.741080708899E-04 + vsigmaab = 0.701383136250E-04 + vsigmabb = 0.741080708899E-04 + + v2rhoa2 = 0.303235212020E-01 + v2rhoab = -0.246964871909E-01 + v2rhob2 = 0.303235212020E-01 + + v2rhoasigmaaa = -0.192341863313E-03 + v2rhoasigmaab = -0.411266458866E-04 + v2rhoasigmabb = 0.111052541885E-03 + v2rhobsigmaaa = 0.111052541885E-03 + v2rhobsigmaab = -0.411266458866E-04 + v2rhobsigmabb = -0.192341863313E-03 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.465024100803E-02 + vrhoa = -0.610987646298E-01 + vrhob = -0.610987646298E-01 + vsigmaaa = 0.694062751783E-02 + vsigmaab = 0.876388739167E-02 + vsigmabb = 0.694062751783E-02 + + v2rhoa2 = 0.939780887292E+00 + v2rhoab = -0.498868805878E+00 + v2rhob2 = 0.939780887292E+00 + + v2rhoasigmaaa = -0.228361811495E+00 + v2rhoasigmaab = -0.807965355076E-01 + v2rhoasigmabb = 0.107205512562E+00 + v2rhobsigmaaa = 0.107205512562E+00 + v2rhobsigmaab = -0.807965355076E-01 + v2rhobsigmabb = -0.228361811495E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.237638430952E+03 + vrhoa = -0.665993271139E-01 + vrhob = -0.665993271139E-01 + vsigmaaa = 0.540555769454E-09 + vsigmaab = 0.260773591409E-09 + vsigmabb = 0.540555769454E-09 + + v2rhoa2 = 0.144305866044E-04 + v2rhoab = -0.146537621392E-04 + v2rhob2 = 0.144305866044E-04 + + v2rhoasigmaaa = -0.158850198364E-11 + v2rhoasigmaab = -0.124882367057E-12 + v2rhoasigmabb = 0.108678004324E-11 + v2rhobsigmaaa = 0.108678004324E-11 + v2rhobsigmaab = -0.124882367057E-12 + v2rhobsigmabb = -0.158850198364E-11 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.237638419413E+03 + vrhoa = -0.665993325023E-01 + vrhob = -0.665993325023E-01 + vsigmaaa = 0.540555769454E-09 + vsigmaab = 0.260773591409E-09 + vsigmabb = 0.540555769454E-09 + + v2rhoa2 = 0.144306117017E-04 + v2rhoab = -0.146537792037E-04 + v2rhob2 = 0.144306117017E-04 + + v2rhoasigmaaa = -0.158850198364E-11 + v2rhoasigmaab = -0.124882367057E-12 + v2rhoasigmabb = 0.108678004324E-11 + v2rhobsigmaaa = 0.108678004324E-11 + v2rhobsigmaab = -0.124882367057E-12 + v2rhobsigmabb = -0.158850198364E-11 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.204955819468E+03 + vrhoa = -0.697313972428E-01 + vrhob = -0.697313972428E-01 + vsigmaaa = 0.658117255270E-09 + vsigmaab = 0.319515846955E-09 + vsigmabb = 0.658117255270E-09 + + v2rhoa2 = 0.328352356048E-04 + v2rhoab = -0.277614126197E-04 + v2rhob2 = 0.328352356048E-04 + + v2rhoasigmaaa = -0.217196289305E-11 + v2rhoasigmaab = -0.172301824814E-12 + v2rhoasigmabb = 0.148472344173E-11 + v2rhobsigmaaa = 0.148472344173E-11 + v2rhobsigmaab = -0.172301824814E-12 + v2rhobsigmabb = -0.217196289305E-11 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.216471443930E-01 + vrhoa = -0.526995644881E-01 + vrhob = -0.526995644881E-01 + vsigmaaa = 0.127229458316E-02 + vsigmaab = 0.145290124256E-02 + vsigmabb = 0.127229458316E-02 + + v2rhoa2 = 0.134806861660E+00 + v2rhoab = -0.118221268828E+00 + v2rhob2 = 0.134806861660E+00 + + v2rhoasigmaaa = -0.160681338920E-01 + v2rhoasigmaab = -0.472571671370E-02 + v2rhoasigmabb = 0.827564425842E-02 + v2rhobsigmaaa = 0.827564425842E-02 + v2rhobsigmaab = -0.472571671370E-02 + v2rhobsigmabb = -0.160681338920E-01 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.712575807209E+04 + vrhoa = -0.674210020682E-01 + vrhob = -0.674210020682E-01 + vsigmaaa = 0.190814948140E-11 + vsigmaab = 0.816481365419E-12 + vsigmabb = 0.190814948140E-11 + + v2rhoa2 = 0.495469678644E-06 + v2rhoab = -0.497965254694E-06 + v2rhob2 = 0.495469678644E-06 + + v2rhoasigmaaa = -0.196249114596E-15 + v2rhoasigmaab = -0.130135394800E-16 + v2rhoasigmabb = 0.136188177073E-15 + v2rhobsigmaaa = 0.136188177073E-15 + v2rhobsigmaab = -0.130135394800E-16 + v2rhobsigmabb = -0.196249114596E-15 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.615255831041E+04 + vrhoa = -0.703265205307E-01 + vrhob = -0.703265205307E-01 + vsigmaaa = 0.233162530668E-11 + vsigmaab = 0.100028081622E-11 + vsigmabb = 0.233162530668E-11 + + v2rhoa2 = 0.110943737062E-05 + v2rhoab = -0.946187279564E-06 + v2rhob2 = 0.110943737062E-05 + + v2rhoasigmaaa = -0.270252437366E-15 + v2rhoasigmaab = -0.179871585341E-16 + v2rhoasigmabb = 0.187490309515E-15 + v2rhobsigmaaa = 0.187490309515E-15 + v2rhobsigmaab = -0.179871585341E-16 + v2rhobsigmabb = -0.270252437366E-15 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.106605459023E-01 + vrhoa = -0.547299644084E-01 + vrhob = -0.547299644084E-01 + vsigmaaa = 0.303386607339E-02 + vsigmaab = 0.365209975632E-02 + vsigmabb = 0.303386607339E-02 + + v2rhoa2 = 0.346499910453E+00 + v2rhoab = -0.239377906462E+00 + v2rhob2 = 0.346499910453E+00 + + v2rhoasigmaaa = -0.624221561613E-01 + v2rhoasigmaab = -0.201987433700E-01 + v2rhoasigmabb = 0.307385926277E-01 + v2rhobsigmaaa = 0.307385926277E-01 + v2rhobsigmaab = -0.201987433700E-01 + v2rhobsigmabb = -0.624221561613E-01 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = 0.000000000000E+00 + vrhoa = 0.000000000000E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.000000000000E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = 0.000000000000E+00 + vrhoa = 0.000000000000E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.000000000000E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = 0.000000000000E+00 + vrhoa = 0.000000000000E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.000000000000E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = 0.000000000000E+00 + vrhoa = 0.000000000000E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.000000000000E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.903966286601E+01 + vrhoa = -0.759264713358E-01 + vrhob = -0.784370481382E-01 + vsigmaaa = 0.907992031805E-07 + vsigmaab = 0.581118313258E-07 + vsigmabb = 0.100370432217E-06 + + v2rhoa2 = 0.141362773226E-02 + v2rhoab = -0.105147646057E-02 + v2rhob2 = 0.150485268125E-02 + + v2rhoasigmaaa = -0.565167905921E-08 + v2rhoasigmaab = -0.515378386013E-09 + v2rhoasigmabb = 0.376492504615E-08 + v2rhobsigmaaa = 0.384361243685E-08 + v2rhobsigmaab = -0.747058939790E-09 + v2rhobsigmabb = -0.588190678666E-08 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.402158795173E+01 + vrhoa = -0.762734644914E-01 + vrhob = -0.830226435821E-01 + vsigmaaa = 0.301052145436E-06 + vsigmaab = 0.220298633297E-06 + vsigmabb = 0.369624286402E-06 + + v2rhoa2 = 0.331769729999E-02 + v2rhoab = -0.248438749270E-02 + v2rhob2 = 0.384280348438E-02 + + v2rhoasigmaaa = -0.398359773843E-07 + v2rhoasigmaab = -0.335415277613E-08 + v2rhoasigmabb = 0.263970784129E-07 + v2rhobsigmaaa = 0.275886078235E-07 + v2rhobsigmaab = -0.685474898360E-08 + v2rhobsigmabb = -0.433118929134E-07 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.535812609335E-02 + vrhoa = -0.428946532738E-01 + vrhob = -0.100396349615E+00 + vsigmaaa = 0.178546727213E-02 + vsigmaab = 0.678262565697E-02 + vsigmabb = 0.827650024238E-02 + + v2rhoa2 = 0.309477814856E+00 + v2rhoab = -0.329371433841E+00 + v2rhob2 = 0.162055387526E+01 + + v2rhoasigmaaa = -0.781343180939E-01 + v2rhoasigmaab = -0.432850540037E-02 + v2rhoasigmabb = 0.363514849034E-01 + v2rhobsigmaaa = 0.732832606483E-01 + v2rhobsigmaab = -0.108581862510E+00 + v2rhobsigmabb = -0.179156926286E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.303154148293E-02 + vrhoa = -0.244020499979E-01 + vrhob = -0.783890652209E-01 + vsigmaaa = -0.352365411226E-02 + vsigmaab = 0.373879285446E-01 + vsigmabb = 0.434388664083E-01 + + v2rhoa2 = 0.202330890903E+00 + v2rhoab = -0.536912334084E+00 + v2rhob2 = 0.182166278214E+01 + + v2rhoasigmaaa = -0.992049673308E-01 + v2rhoasigmaab = -0.485780496011E-01 + v2rhoasigmabb = -0.158164241941E+00 + v2rhobsigmaaa = 0.340893479361E+00 + v2rhobsigmaab = -0.162192597781E+01 + v2rhobsigmabb = -0.154746697775E+01 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.608750998131E+01 + vrhoa = -0.643435848234E-01 + vrhob = -0.656377677365E-01 + vsigmaaa = 0.202448437183E-06 + vsigmaab = 0.140789565804E-06 + vsigmabb = 0.237924154032E-06 + + v2rhoa2 = 0.644965086508E-03 + v2rhoab = -0.630065421347E-03 + v2rhob2 = 0.684494690431E-03 + + v2rhoasigmaaa = -0.207590458741E-07 + v2rhoasigmaab = -0.182473154038E-08 + v2rhoasigmabb = 0.137746587331E-07 + v2rhobsigmaaa = 0.142543841876E-07 + v2rhobsigmaab = -0.323521094196E-08 + v2rhobsigmabb = -0.221599858116E-07 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.485826625474E+01 + vrhoa = -0.653859880589E-01 + vrhob = -0.653239498026E-01 + vsigmaaa = 0.314305582522E-06 + vsigmaab = 0.205017935750E-06 + vsigmabb = 0.314305582522E-06 + + v2rhoa2 = 0.932011907377E-03 + v2rhoab = -0.845990806989E-03 + v2rhob2 = 0.927946564209E-03 + + v2rhoasigmaaa = -0.375898792310E-07 + v2rhoasigmaab = -0.455264241776E-08 + v2rhoasigmabb = 0.244483769850E-07 + v2rhobsigmaaa = 0.244483769850E-07 + v2rhobsigmaab = -0.455264241776E-08 + v2rhobsigmabb = -0.375898792310E-07 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.634688010938E-02 + vrhoa = -0.486068357646E-01 + vrhob = -0.739949355207E-01 + vsigmaaa = 0.305337986175E-02 + vsigmaab = 0.641200968640E-02 + vsigmabb = 0.698202739086E-02 + + v2rhoa2 = 0.433585531118E+00 + v2rhoab = -0.365108886112E+00 + v2rhob2 = 0.100038106732E+01 + + v2rhoasigmaaa = -0.102735565156E+00 + v2rhoasigmaab = -0.181538750084E-01 + v2rhoasigmabb = 0.501849138748E-01 + v2rhobsigmaaa = 0.732361795124E-01 + v2rhobsigmaab = -0.824126803195E-01 + v2rhobsigmabb = -0.165270268130E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.172301075975E-02 + vrhoa = -0.294822900234E-01 + vrhob = -0.766946918598E-01 + vsigmaaa = 0.127140367254E-02 + vsigmaab = 0.519446045760E-01 + vsigmabb = 0.608118658277E-01 + + v2rhoa2 = 0.427000673980E+00 + v2rhoab = -0.671140471911E+00 + v2rhob2 = 0.300158916489E+01 + + v2rhoasigmaaa = -0.631566175836E+00 + v2rhoasigmaab = -0.540623931547E-01 + v2rhoasigmabb = -0.252818541902E-02 + v2rhobsigmaaa = 0.988123041938E+00 + v2rhobsigmaab = -0.292607572225E+01 + v2rhobsigmabb = -0.333300175870E+01 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + diff --git a/libxc/testsuite/df_repo/gga_c_p86.data b/libxc/testsuite/df_repo/gga_c_p86.data new file mode 100644 index 000000000..a6171e82e --- /dev/null +++ b/libxc/testsuite/df_repo/gga_c_p86.data @@ -0,0 +1,601 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.275576598637E+00 + vrhoa = -0.898549308454E-01 + vrhob = -0.898549308454E-01 + vsigmaaa = 0.834140389764E-03 + vsigmaab = 0.166828077953E-02 + vsigmabb = 0.834140389764E-03 + + v2rhoa2 = 0.164699121751E-01 + v2rhoab = -0.219008166659E-01 + v2rhob2 = 0.164699121751E-01 + + v2rhoasigmaaa = -0.326275462868E-03 + v2rhoasigmaab = -0.652550925737E-03 + v2rhoasigmabb = -0.326275462868E-03 + v2rhobsigmaaa = -0.326275462868E-03 + v2rhobsigmaab = -0.652550925737E-03 + v2rhobsigmabb = -0.326275462868E-03 + + v2sigmaaa2 = -0.502496274333E+01 + v2sigmaaaab = -0.100499254867E+02 + v2sigmaaabb = -0.502496274333E+01 + v2sigmaab2 = -0.200998509733E+02 + v2sigmaabbb = -0.100499254867E+02 + v2sigmabb2 = -0.502496274333E+01 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.270541935453E+00 + vrhoa = -0.916176785198E-01 + vrhob = -0.916176785198E-01 + vsigmaaa = 0.696255856383E-03 + vsigmaab = 0.139251171277E-02 + vsigmabb = 0.696255856383E-03 + + v2rhoa2 = 0.172914869726E-01 + v2rhoab = -0.205953257607E-01 + v2rhob2 = 0.172914869726E-01 + + v2rhoasigmaaa = -0.228585687716E-03 + v2rhoasigmaab = -0.457171375432E-03 + v2rhoasigmabb = -0.228585687716E-03 + v2rhobsigmaaa = -0.228585687716E-03 + v2rhobsigmaab = -0.457171375432E-03 + v2rhobsigmabb = -0.228585687716E-03 + + v2sigmaaa2 = -0.934892441509E-05 + v2sigmaaaab = -0.186978488302E-04 + v2sigmaaabb = -0.934892441509E-05 + v2sigmaab2 = -0.373956976604E-04 + v2sigmaabbb = -0.186978488302E-04 + v2sigmabb2 = -0.934892441509E-05 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.164692950916E+00 + vrhoa = -0.103391393448E+00 + vrhob = -0.103391393448E+00 + vsigmaaa = 0.356216534176E-03 + vsigmaab = 0.712433068352E-03 + vsigmabb = 0.356216534176E-03 + + v2rhoa2 = 0.142073138397E-01 + v2rhoab = -0.193927128243E-01 + v2rhob2 = 0.142073138397E-01 + + v2rhoasigmaaa = -0.493923795453E-05 + v2rhoasigmaab = -0.987847590906E-05 + v2rhoasigmabb = -0.493923795453E-05 + v2rhobsigmaaa = -0.493923795453E-05 + v2rhobsigmaab = -0.987847590906E-05 + v2rhobsigmabb = -0.493923795453E-05 + + v2sigmaaa2 = -0.136125824414E-05 + v2sigmaaaab = -0.272251648828E-05 + v2sigmaaabb = -0.136125824414E-05 + v2sigmaab2 = -0.544503297656E-05 + v2sigmaabbb = -0.272251648828E-05 + v2sigmabb2 = -0.136125824414E-05 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.397450460376E-02 + vrhoa = -0.746190981909E-01 + vrhob = -0.746190981909E-01 + vsigmaaa = 0.993263060266E-02 + vsigmaab = 0.198652612053E-01 + vsigmabb = 0.993263060266E-02 + + v2rhoa2 = -0.599447216161E-01 + v2rhoab = -0.362668624294E+00 + v2rhob2 = -0.599447216161E-01 + + v2rhoasigmaaa = 0.354447185309E-01 + v2rhoasigmaab = 0.708894370618E-01 + v2rhoasigmabb = 0.354447185309E-01 + v2rhobsigmaaa = 0.354447185309E-01 + v2rhobsigmaab = 0.708894370618E-01 + v2rhobsigmabb = 0.354447185309E-01 + + v2sigmaaa2 = -0.235335148061E-01 + v2sigmaaaab = -0.470670296122E-01 + v2sigmaaabb = -0.235335148061E-01 + v2sigmaab2 = -0.941340592245E-01 + v2sigmaabbb = -0.470670296122E-01 + v2sigmabb2 = -0.235335148061E-01 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.534484419341E+03 + vrhoa = -0.158618496567E+00 + vrhob = -0.158618496567E+00 + vsigmaaa = 0.771967614898E-07 + vsigmaab = 0.154393522980E-06 + vsigmabb = 0.771967614898E-07 + + v2rhoa2 = 0.310826615503E-04 + v2rhoab = -0.367568997506E-04 + v2rhob2 = 0.310826615503E-04 + + v2rhoasigmaaa = -0.286183881794E-10 + v2rhoasigmaab = -0.572367763588E-10 + v2rhoasigmabb = -0.286183881794E-10 + v2rhobsigmaaa = -0.286183881794E-10 + v2rhobsigmaab = -0.572367763588E-10 + v2rhobsigmabb = -0.286183881794E-10 + + v2sigmaaa2 = -0.528595633667E-12 + v2sigmaaaab = -0.105719126733E-11 + v2sigmaaabb = -0.528595633667E-12 + v2sigmaab2 = -0.211438253467E-11 + v2sigmaabbb = -0.105719126733E-11 + v2sigmabb2 = -0.528595633667E-12 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.534481770524E+03 + vrhoa = -0.158619476408E+00 + vrhob = -0.158619476408E+00 + vsigmaaa = 0.769087327316E-07 + vsigmaab = 0.153817465463E-06 + vsigmabb = 0.769087327316E-07 + + v2rhoa2 = 0.310831819703E-04 + v2rhoab = -0.367561522373E-04 + v2rhob2 = 0.310831819703E-04 + + v2rhoasigmaaa = -0.284185255134E-10 + v2rhoasigmaab = -0.568370510268E-10 + v2rhoasigmabb = -0.284185255134E-10 + v2rhobsigmaaa = -0.284185255134E-10 + v2rhobsigmaab = -0.568370510268E-10 + v2rhobsigmabb = -0.284185255134E-10 + + v2sigmaaa2 = -0.421320700353E-14 + v2sigmaaaab = -0.842641400705E-14 + v2sigmaaabb = -0.421320700353E-14 + v2sigmaab2 = -0.168528280141E-13 + v2sigmaabbb = -0.842641400705E-14 + v2sigmabb2 = -0.421320700353E-14 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.269243249838E+03 + vrhoa = -0.102637357895E+00 + vrhob = -0.102637357895E+00 + vsigmaaa = 0.752165325842E-09 + vsigmaab = 0.150433065168E-08 + vsigmabb = 0.752165325842E-09 + + v2rhoa2 = -0.292028677323E-04 + v2rhoab = -0.829650113166E-04 + v2rhob2 = -0.292028677323E-04 + + v2rhoasigmaaa = 0.490124188590E-11 + v2rhoasigmaab = 0.980248377181E-11 + v2rhoasigmabb = 0.490124188590E-11 + v2rhobsigmaaa = 0.490124188590E-11 + v2rhobsigmaab = 0.980248377181E-11 + v2rhobsigmabb = 0.490124188590E-11 + + v2sigmaaa2 = -0.483781223284E-18 + v2sigmaaaab = -0.967562446568E-18 + v2sigmaaabb = -0.483781223284E-18 + v2sigmaab2 = -0.193512489314E-17 + v2sigmaabbb = -0.967562446568E-18 + v2sigmabb2 = -0.483781223284E-18 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.267229464823E-01 + vrhoa = -0.845518075134E-01 + vrhob = -0.845518075134E-01 + vsigmaaa = 0.508903498245E-02 + vsigmaab = 0.101780699649E-01 + vsigmabb = 0.508903498245E-02 + + v2rhoa2 = 0.926140310853E-01 + v2rhoab = -0.789246773515E-01 + v2rhob2 = 0.926140310853E-01 + + v2rhoasigmaaa = -0.470989252647E-02 + v2rhoasigmaab = -0.941978505294E-02 + v2rhoasigmabb = -0.470989252647E-02 + v2rhobsigmaaa = -0.470989252647E-02 + v2rhobsigmaab = -0.941978505294E-02 + v2rhobsigmabb = -0.470989252647E-02 + + v2sigmaaa2 = -0.162963280788E-02 + v2sigmaaaab = -0.325926561577E-02 + v2sigmaaabb = -0.162963280788E-02 + v2sigmaab2 = -0.651853123153E-02 + v2sigmaabbb = -0.325926561577E-02 + v2sigmabb2 = -0.162963280788E-02 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.194053919576E+05 + vrhoa = -0.193356585840E+00 + vrhob = -0.193356585840E+00 + vsigmaaa = 0.845985754531E-09 + vsigmaab = 0.169197150906E-08 + vsigmabb = 0.845985754531E-09 + + v2rhoa2 = 0.133301554174E-05 + v2rhoab = -0.152755381770E-05 + v2rhob2 = 0.133301554174E-05 + + v2rhoasigmaaa = -0.106445604178E-13 + v2rhoasigmaab = -0.212891208356E-13 + v2rhoasigmabb = -0.106445604178E-13 + v2rhobsigmaaa = -0.106445604178E-13 + v2rhobsigmaab = -0.212891208356E-13 + v2rhobsigmabb = -0.106445604178E-13 + + v2sigmaaa2 = -0.268892251090E-18 + v2sigmaaaab = -0.537784502180E-18 + v2sigmaaabb = -0.268892251090E-18 + v2sigmaab2 = -0.107556900436E-17 + v2sigmaabbb = -0.537784502180E-18 + v2sigmabb2 = -0.268892251090E-18 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.126411706583E+05 + vrhoa = -0.756471838962E-01 + vrhob = -0.756471838962E-01 + vsigmaaa = -0.240534746730E-10 + vsigmaab = -0.481069493460E-10 + vsigmabb = -0.240534746730E-10 + + v2rhoa2 = 0.792774897108E-06 + v2rhoab = -0.185079999683E-05 + v2rhob2 = 0.792774897108E-06 + + v2rhoasigmaaa = 0.144937327450E-15 + v2rhoasigmaab = 0.289874654901E-15 + v2rhoasigmabb = 0.144937327450E-15 + v2rhobsigmaaa = 0.144937327450E-15 + v2rhobsigmaab = 0.289874654901E-15 + v2rhobsigmabb = 0.144937327450E-15 + + v2sigmaaa2 = 0.682593160617E-25 + v2sigmaaaab = 0.136518632123E-24 + v2sigmaaabb = 0.682593160617E-25 + v2sigmaab2 = 0.273037264247E-24 + v2sigmaabbb = 0.136518632123E-24 + v2sigmabb2 = 0.682593160617E-25 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.112693683420E-01 + vrhoa = -0.823095663901E-01 + vrhob = -0.823095663901E-01 + vsigmaaa = 0.759916679933E-02 + vsigmaab = 0.151983335987E-01 + vsigmabb = 0.759916679933E-02 + + v2rhoa2 = 0.946010517007E-01 + v2rhoab = -0.144547984448E+00 + v2rhob2 = 0.946010517007E-01 + + v2rhoasigmaaa = -0.870262483792E-03 + v2rhoasigmaab = -0.174052496758E-02 + v2rhoasigmabb = -0.870262483792E-03 + v2rhobsigmaaa = -0.870262483792E-03 + v2rhobsigmaab = -0.174052496758E-02 + v2rhobsigmabb = -0.870262483792E-03 + + v2sigmaaa2 = -0.648995677523E-02 + v2sigmaaaab = -0.129799135505E-01 + v2sigmaaabb = -0.648995677523E-02 + v2sigmaab2 = -0.259598271009E-01 + v2sigmaabbb = -0.129799135505E-01 + v2sigmabb2 = -0.648995677523E-02 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.150623736304E+00 + vrhoa = -0.475749572683E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.637019797503E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.134925763778E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.311322322974E+01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.148627368481E+00 + vrhoa = -0.482791781160E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.563242330304E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.918179362576E-03 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.102682884804E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.530337298800E-01 + vrhoa = -0.580335324348E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.231451441139E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.460696056760E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.779257939631E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = 0.519030654587E-03 + vrhoa = -0.261147874918E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.175603815266E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.116948219733E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.501164144370E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.881112024754E+01 + vrhoa = -0.482543333077E-01 + vrhob = -0.489974673998E-01 + vsigmaaa = -0.551331569711E-07 + vsigmaab = -0.110266313942E-06 + vsigmabb = -0.551331569711E-07 + + v2rhoa2 = -0.746279999379E-03 + v2rhoab = -0.148488381542E-02 + v2rhob2 = -0.737137272306E-03 + + v2rhoasigmaaa = 0.374688026774E-08 + v2rhoasigmaab = 0.749376053547E-08 + v2rhoasigmabb = 0.374688026774E-08 + v2rhobsigmaaa = 0.374457465017E-08 + v2rhobsigmaab = 0.748914930033E-08 + v2rhobsigmabb = 0.374457465017E-08 + + v2sigmaaa2 = -0.117515746318E-13 + v2sigmaaaab = -0.235031492637E-13 + v2sigmaaabb = -0.117515746318E-13 + v2sigmaab2 = -0.470062985273E-13 + v2sigmaabbb = -0.235031492637E-13 + v2sigmabb2 = -0.117515746318E-13 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.356963343227E+01 + vrhoa = -0.433530899660E-01 + vrhob = -0.447602011737E-01 + vsigmaaa = -0.122488989075E-06 + vsigmaab = -0.244977978150E-06 + vsigmabb = -0.122488989075E-06 + + v2rhoa2 = -0.169450157064E-02 + v2rhoab = -0.308422706942E-02 + v2rhob2 = -0.165896811718E-02 + + v2rhoasigmaaa = 0.227151852191E-07 + v2rhoasigmaab = 0.454303704383E-07 + v2rhoasigmabb = 0.227151852191E-07 + v2rhobsigmaaa = 0.226922323054E-07 + v2rhobsigmaab = 0.453844646108E-07 + v2rhobsigmabb = 0.226922323054E-07 + + v2sigmaaa2 = -0.207808284633E-12 + v2sigmaaaab = -0.415616569266E-12 + v2sigmaaabb = -0.207808284633E-12 + v2sigmaab2 = -0.831233138532E-12 + v2sigmaabbb = -0.415616569266E-12 + v2sigmabb2 = -0.207808284633E-12 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.459865393257E-02 + vrhoa = -0.700052118462E-01 + vrhob = -0.782994528720E-01 + vsigmaaa = 0.619901785967E-02 + vsigmaab = 0.123980357193E-01 + vsigmabb = 0.619901785967E-02 + + v2rhoa2 = -0.910705100797E-01 + v2rhoab = -0.343025175419E+00 + v2rhob2 = -0.997792874752E-01 + + v2rhoasigmaaa = 0.216108031263E-01 + v2rhoasigmaab = 0.432216062525E-01 + v2rhoasigmabb = 0.216108031263E-01 + v2rhobsigmaaa = 0.263180175306E-01 + v2rhobsigmaab = 0.526360350612E-01 + v2rhobsigmabb = 0.263180175306E-01 + + v2sigmaaa2 = -0.783747224727E-02 + v2sigmaaaab = -0.156749444945E-01 + v2sigmaaabb = -0.783747224727E-02 + v2sigmaab2 = -0.313498889891E-01 + v2sigmaabbb = -0.156749444945E-01 + v2sigmabb2 = -0.783747224727E-02 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.460734753694E-02 + vrhoa = -0.536017333597E-01 + vrhob = -0.889420396114E-01 + vsigmaaa = 0.459038484126E-01 + vsigmaab = 0.918076968253E-01 + vsigmabb = 0.459038484126E-01 + + v2rhoa2 = 0.229638421508E+00 + v2rhoab = -0.353542137607E+00 + v2rhob2 = 0.736991366799E+00 + + v2rhoasigmaaa = -0.350102066264E+00 + v2rhoasigmaab = -0.700204132528E+00 + v2rhoasigmabb = -0.350102066264E+00 + v2rhobsigmaaa = -0.164628257846E+00 + v2rhobsigmaab = -0.329256515692E+00 + v2rhobsigmabb = -0.164628257846E+00 + + v2sigmaaa2 = -0.772847332877E+00 + v2sigmaaaab = -0.154569466575E+01 + v2sigmaaabb = -0.772847332877E+00 + v2sigmaab2 = -0.309138933151E+01 + v2sigmaabbb = -0.154569466575E+01 + v2sigmabb2 = -0.772847332877E+00 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.887103892606E+01 + vrhoa = -0.136333005296E+00 + vrhob = -0.137926985270E+00 + vsigmaaa = 0.363840653782E-05 + vsigmaab = 0.727681307564E-05 + vsigmabb = 0.363840653782E-05 + + v2rhoa2 = 0.745283378039E-03 + v2rhoab = -0.838667017684E-03 + v2rhob2 = 0.765562368477E-03 + + v2rhoasigmaaa = -0.585425105252E-08 + v2rhoasigmaab = -0.117085021050E-07 + v2rhoasigmabb = -0.585425105252E-08 + v2rhobsigmaaa = -0.544179565582E-08 + v2rhobsigmaab = -0.108835913116E-07 + v2rhobsigmabb = -0.544179565582E-08 + + v2sigmaaa2 = -0.418551226382E-11 + v2sigmaaaab = -0.837102452764E-11 + v2sigmaaabb = -0.418551226382E-11 + v2sigmaab2 = -0.167420490553E-10 + v2sigmaabbb = -0.837102452764E-11 + v2sigmabb2 = -0.418551226382E-11 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.645931566117E+01 + vrhoa = -0.135034162021E+00 + vrhob = -0.135034162021E+00 + vsigmaaa = 0.388594292816E-05 + vsigmaab = 0.777188585632E-05 + vsigmabb = 0.388594292816E-05 + + v2rhoa2 = 0.707362501623E-03 + v2rhoab = -0.112694971484E-02 + v2rhob2 = 0.707362501623E-03 + + v2rhoasigmaaa = 0.749901545667E-08 + v2rhoasigmaab = 0.149980309133E-07 + v2rhoasigmabb = 0.749901545667E-08 + v2rhobsigmaaa = 0.749901545667E-08 + v2rhobsigmaab = 0.149980309133E-07 + v2rhobsigmabb = 0.749901545667E-08 + + v2sigmaaa2 = -0.631013973411E-11 + v2sigmaaaab = -0.126202794682E-10 + v2sigmaaabb = -0.631013973411E-11 + v2sigmaab2 = -0.252405589364E-10 + v2sigmaabbb = -0.126202794682E-10 + v2sigmabb2 = -0.631013973411E-11 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.576134473525E-02 + vrhoa = -0.750781317880E-01 + vrhob = -0.804035318584E-01 + vsigmaaa = 0.814920118229E-02 + vsigmaab = 0.162984023646E-01 + vsigmabb = 0.814920118229E-02 + + v2rhoa2 = 0.113019384585E-02 + v2rhoab = -0.268950178633E+00 + v2rhob2 = 0.266716769984E-03 + + v2rhoasigmaaa = 0.156483706057E-01 + v2rhoasigmaab = 0.312967412114E-01 + v2rhoasigmabb = 0.156483706057E-01 + v2rhobsigmaaa = 0.193751506127E-01 + v2rhobsigmaab = 0.387503012254E-01 + v2rhobsigmabb = 0.193751506127E-01 + + v2sigmaaa2 = -0.118818999163E-01 + v2sigmaaaab = -0.237637998326E-01 + v2sigmaaabb = -0.118818999163E-01 + v2sigmaab2 = -0.475275996652E-01 + v2sigmaabbb = -0.237637998326E-01 + v2sigmabb2 = -0.118818999163E-01 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.227465804486E-02 + vrhoa = -0.607101652780E-01 + vrhob = -0.809996785446E-01 + vsigmaaa = 0.542965890398E-01 + vsigmaab = 0.108593178080E+00 + vsigmabb = 0.542965890398E-01 + + v2rhoa2 = 0.329942643730E+00 + v2rhoab = -0.517763280120E+00 + v2rhob2 = 0.564642641219E+00 + + v2rhoasigmaaa = -0.232199446020E+00 + v2rhoasigmaab = -0.464398892040E+00 + v2rhoasigmabb = -0.232199446020E+00 + v2rhobsigmaaa = 0.164136266720E-01 + v2rhobsigmaab = 0.328272533439E-01 + v2rhobsigmabb = 0.164136266720E-01 + + v2sigmaaa2 = -0.145741442973E+01 + v2sigmaaaab = -0.291482885947E+01 + v2sigmaaabb = -0.145741442973E+01 + v2sigmaab2 = -0.582965771894E+01 + v2sigmaabbb = -0.291482885947E+01 + v2sigmabb2 = -0.145741442973E+01 + diff --git a/libxc/testsuite/df_repo/gga_c_pbe.data b/libxc/testsuite/df_repo/gga_c_pbe.data new file mode 100644 index 000000000..92ef05c65 --- /dev/null +++ b/libxc/testsuite/df_repo/gga_c_pbe.data @@ -0,0 +1,601 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.277343302026E+00 + vrhoa = -0.902545684170E-01 + vrhob = -0.902545684170E-01 + vsigmaaa = 0.828329874208E-03 + vsigmaab = 0.165665974842E-02 + vsigmabb = 0.828329874208E-03 + + v2rhoa2 = 0.129726391337E-01 + v2rhoab = -0.182703394917E-01 + v2rhob2 = 0.129726391337E-01 + + v2rhoasigmaaa = -0.324835244787E-03 + v2rhoasigmaab = -0.649670489575E-03 + v2rhoasigmabb = -0.324835244787E-03 + v2rhobsigmaaa = -0.324835244787E-03 + v2rhobsigmaab = -0.649670489575E-03 + v2rhobsigmabb = -0.324835244787E-03 + + v2sigmaaa2 = -0.649078703127E-05 + v2sigmaaaab = -0.129815740625E-04 + v2sigmaaabb = -0.649078703127E-05 + v2sigmaab2 = -0.259631481251E-04 + v2sigmaabbb = -0.129815740625E-04 + v2sigmabb2 = -0.649078703127E-05 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.271855691853E+00 + vrhoa = -0.923103473041E-01 + vrhob = -0.923103473041E-01 + vsigmaaa = 0.786385334368E-03 + vsigmaab = 0.157277066874E-02 + vsigmabb = 0.786385334368E-03 + + v2rhoa2 = 0.141731701968E-01 + v2rhoab = -0.168480493572E-01 + v2rhob2 = 0.141731701968E-01 + + v2rhoasigmaaa = -0.281023204875E-03 + v2rhoasigmaab = -0.562046409750E-03 + v2rhoasigmabb = -0.281023204875E-03 + v2rhobsigmaaa = -0.281023204875E-03 + v2rhobsigmaab = -0.562046409750E-03 + v2rhobsigmabb = -0.281023204875E-03 + + v2sigmaaa2 = -0.586202682069E-05 + v2sigmaaaab = -0.117240536414E-04 + v2sigmaaabb = -0.586202682069E-05 + v2sigmaab2 = -0.234481072827E-04 + v2sigmaabbb = -0.117240536414E-04 + v2sigmabb2 = -0.586202682069E-05 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.156330536080E+00 + vrhoa = -0.102948996370E+00 + vrhob = -0.102948996370E+00 + vsigmaaa = 0.378004824716E-03 + vsigmaab = 0.756009649433E-03 + vsigmabb = 0.378004824716E-03 + + v2rhoa2 = 0.767829363534E-02 + v2rhoab = -0.200905483619E-01 + v2rhob2 = 0.767829363534E-02 + + v2rhoasigmaaa = 0.267671090070E-04 + v2rhoasigmaab = 0.535342180140E-04 + v2rhoasigmabb = 0.267671090070E-04 + v2rhobsigmaaa = 0.267671090070E-04 + v2rhobsigmaab = 0.535342180140E-04 + v2rhobsigmabb = 0.267671090070E-04 + + v2sigmaaa2 = -0.171987026880E-05 + v2sigmaaaab = -0.343974053761E-05 + v2sigmaaabb = -0.171987026880E-05 + v2sigmaab2 = -0.687948107522E-05 + v2sigmaabbb = -0.343974053761E-05 + v2sigmabb2 = -0.171987026880E-05 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.353114293615E-02 + vrhoa = -0.644123523321E-01 + vrhob = -0.644123523321E-01 + vsigmaaa = 0.830804942063E-02 + vsigmaab = 0.166160988413E-01 + vsigmabb = 0.830804942063E-02 + + v2rhoa2 = -0.294409365638E+00 + v2rhoab = -0.534985274786E+00 + v2rhob2 = -0.294409365638E+00 + + v2rhoasigmaaa = 0.746427566937E-01 + v2rhoasigmaab = 0.149285513387E+00 + v2rhoasigmabb = 0.746427566937E-01 + v2rhobsigmaaa = 0.746427566937E-01 + v2rhobsigmaab = 0.149285513387E+00 + v2rhobsigmabb = 0.746427566937E-01 + + v2sigmaaa2 = -0.283776069209E-01 + v2sigmaaaab = -0.567552138418E-01 + v2sigmaaabb = -0.283776069209E-01 + v2sigmaab2 = -0.113510427684E+00 + v2sigmaabbb = -0.567552138418E-01 + v2sigmabb2 = -0.283776069209E-01 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.531558156901E+03 + vrhoa = -0.157670707589E+00 + vrhob = -0.157670707589E+00 + vsigmaaa = 0.767547413336E-07 + vsigmaab = 0.153509482667E-06 + vsigmabb = 0.767547413336E-07 + + v2rhoa2 = 0.222158431130E-04 + v2rhoab = -0.278288704562E-04 + v2rhob2 = 0.222158431130E-04 + + v2rhoasigmaaa = -0.284276819003E-10 + v2rhoasigmaab = -0.568553638007E-10 + v2rhoasigmabb = -0.284276819003E-10 + v2rhobsigmaaa = -0.284276819003E-10 + v2rhobsigmaab = -0.568553638007E-10 + v2rhobsigmabb = -0.284276819003E-10 + + v2sigmaaa2 = -0.526353544028E-16 + v2sigmaaaab = -0.105270708806E-15 + v2sigmaaabb = -0.526353544028E-16 + v2sigmaab2 = -0.210541417611E-15 + v2sigmaabbb = -0.105270708806E-15 + v2sigmabb2 = -0.526353544028E-16 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.531555516738E+03 + vrhoa = -0.157671685407E+00 + vrhob = -0.157671685407E+00 + vsigmaaa = 0.767529308359E-07 + vsigmaab = 0.153505861672E-06 + vsigmabb = 0.767529308359E-07 + + v2rhoa2 = 0.222164315920E-04 + v2rhoab = -0.278281914345E-04 + v2rhob2 = 0.222164315920E-04 + + v2rhoasigmaaa = -0.284258379026E-10 + v2rhoasigmaab = -0.568516758052E-10 + v2rhoasigmabb = -0.284258379026E-10 + v2rhobsigmaaa = -0.284258379026E-10 + v2rhobsigmaab = -0.568516758052E-10 + v2rhobsigmabb = -0.284258379026E-10 + + v2sigmaaa2 = -0.526328718655E-16 + v2sigmaaaab = -0.105265743731E-15 + v2sigmaaabb = -0.526328718655E-16 + v2sigmaab2 = -0.210531487462E-15 + v2sigmaabbb = -0.105265743731E-15 + v2sigmabb2 = -0.526328718655E-16 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.204845328577E+03 + vrhoa = -0.139570172131E+00 + vrhob = -0.139570172131E+00 + vsigmaaa = 0.609549582413E-08 + vsigmaab = 0.121909916483E-07 + vsigmabb = 0.609549582413E-08 + + v2rhoa2 = -0.845856478622E-05 + v2rhoab = -0.379435495181E-04 + v2rhob2 = -0.845856478622E-05 + + v2rhoasigmaaa = 0.183107776239E-11 + v2rhoasigmaab = 0.366215552479E-11 + v2rhoasigmabb = 0.183107776239E-11 + v2rhobsigmaaa = 0.183107776239E-11 + v2rhobsigmaab = 0.366215552479E-11 + v2rhobsigmabb = 0.183107776239E-11 + + v2sigmaaa2 = -0.402310862302E-18 + v2sigmaaaab = -0.804621724604E-18 + v2sigmaaabb = -0.402310862302E-18 + v2sigmaab2 = -0.160924344921E-17 + v2sigmaabbb = -0.804621724604E-18 + v2sigmabb2 = -0.402310862302E-18 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.257202574589E-01 + vrhoa = -0.866997760784E-01 + vrhob = -0.866997760784E-01 + vsigmaaa = 0.582853357983E-02 + vsigmaab = 0.116570671597E-01 + vsigmabb = 0.582853357983E-02 + + v2rhoa2 = 0.728321951048E-01 + v2rhoab = -0.756102345474E-01 + v2rhob2 = 0.728321951048E-01 + + v2rhoasigmaaa = -0.305698872548E-02 + v2rhoasigmaab = -0.611397745095E-02 + v2rhoasigmabb = -0.305698872548E-02 + v2rhobsigmaaa = -0.305698872548E-02 + v2rhobsigmaab = -0.611397745095E-02 + v2rhobsigmabb = -0.305698872548E-02 + + v2sigmaaa2 = -0.233980425019E-02 + v2sigmaaaab = -0.467960850038E-02 + v2sigmaaabb = -0.233980425019E-02 + v2sigmaab2 = -0.935921700077E-02 + v2sigmaabbb = -0.467960850038E-02 + v2sigmabb2 = -0.233980425019E-02 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.192839940466E+05 + vrhoa = -0.192144028270E+00 + vrhob = -0.192144028270E+00 + vsigmaaa = 0.844177976352E-09 + vsigmaab = 0.168835595270E-08 + vsigmabb = 0.844177976352E-09 + + v2rhoa2 = 0.930079636518E-06 + v2rhoab = -0.112362987226E-05 + v2rhob2 = 0.930079636518E-06 + + v2rhoasigmaaa = -0.106185890697E-13 + v2rhoasigmaab = -0.212371781394E-13 + v2rhoasigmabb = -0.106185890697E-13 + v2rhobsigmaaa = -0.106185890697E-13 + v2rhobsigmaab = -0.212371781394E-13 + v2rhobsigmabb = -0.106185890697E-13 + + v2sigmaaa2 = -0.216237891268E-21 + v2sigmaaaab = -0.432475782536E-21 + v2sigmaaabb = -0.216237891268E-21 + v2sigmaab2 = -0.864951565071E-21 + v2sigmaabbb = -0.432475782536E-21 + v2sigmabb2 = -0.216237891268E-21 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.621606173598E+04 + vrhoa = -0.145186193191E+00 + vrhob = -0.145186193191E+00 + vsigmaaa = 0.239893933515E-10 + vsigmaab = 0.479787867030E-10 + vsigmabb = 0.239893933515E-10 + + v2rhoa2 = -0.415550006172E-06 + v2rhoab = -0.137798903649E-05 + v2rhob2 = -0.415550006172E-06 + + v2rhoasigmaaa = 0.270195164309E-15 + v2rhoasigmaab = 0.540390328617E-15 + v2rhoasigmabb = 0.270195164309E-15 + v2rhobsigmaaa = 0.270195164309E-15 + v2rhobsigmaab = 0.540390328617E-15 + v2rhobsigmabb = 0.270195164309E-15 + + v2sigmaaa2 = -0.210724100250E-24 + v2sigmaaaab = -0.421448200501E-24 + v2sigmaaabb = -0.210724100250E-24 + v2sigmaab2 = -0.842896401002E-24 + v2sigmaabbb = -0.421448200501E-24 + v2sigmabb2 = -0.210724100250E-24 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.103495051751E-01 + vrhoa = -0.808320886304E-01 + vrhob = -0.808320886304E-01 + vsigmaaa = 0.782485884453E-02 + vsigmaab = 0.156497176891E-01 + vsigmabb = 0.782485884453E-02 + + v2rhoa2 = 0.974468235880E-02 + v2rhoab = -0.195273591427E+00 + v2rhob2 = 0.974468235880E-02 + + v2rhoasigmaaa = 0.120240976646E-01 + v2rhoasigmaab = 0.240481953292E-01 + v2rhoasigmabb = 0.120240976646E-01 + v2rhobsigmaaa = 0.120240976646E-01 + v2rhobsigmaab = 0.240481953292E-01 + v2rhobsigmabb = 0.120240976646E-01 + + v2sigmaaa2 = -0.914758040599E-02 + v2sigmaaaab = -0.182951608120E-01 + v2sigmaaabb = -0.914758040599E-02 + v2sigmaab2 = -0.365903216240E-01 + v2sigmaabbb = -0.182951608120E-01 + v2sigmabb2 = -0.914758040599E-02 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.149930438056E+00 + vrhoa = -0.472559970726E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.632520331340E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.130590959396E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.735327076770E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.147821297915E+00 + vrhoa = -0.480325520180E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.608456906274E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.815520844173E-03 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.681211100497E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.596933203014E-01 + vrhoa = -0.494521116430E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.163547485507E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.918226192391E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.752364152605E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.134201626930E-03 + vrhoa = -0.113336793038E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.418957314771E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.639691764043E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.192576380057E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.466827360026E+01 + vrhoa = -0.911386831086E-01 + vrhob = -0.914525751657E-01 + vsigmaaa = 0.195526696493E-06 + vsigmaab = 0.391053392985E-06 + vsigmabb = 0.195526696493E-06 + + v2rhoa2 = -0.535201657866E-03 + v2rhoab = -0.850604423798E-03 + v2rhob2 = -0.538228029079E-03 + + v2rhoasigmaaa = 0.214289755089E-08 + v2rhoasigmaab = 0.428579510177E-08 + v2rhoasigmabb = 0.214289755089E-08 + v2rhobsigmaaa = 0.215378864780E-08 + v2rhobsigmaab = 0.430757729559E-08 + v2rhobsigmabb = 0.215378864780E-08 + + v2sigmaaa2 = -0.128838364018E-13 + v2sigmaaaab = -0.257676728036E-13 + v2sigmaaabb = -0.128838364018E-13 + v2sigmaab2 = -0.515353456071E-13 + v2sigmaabbb = -0.257676728036E-13 + v2sigmabb2 = -0.128838364018E-13 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.184442072405E+01 + vrhoa = -0.814334534280E-01 + vrhob = -0.820182123795E-01 + vsigmaaa = 0.510839298939E-06 + vsigmaab = 0.102167859788E-05 + vsigmabb = 0.510839298939E-06 + + v2rhoa2 = -0.124297349784E-02 + v2rhoab = -0.183505806584E-02 + v2rhob2 = -0.125767116982E-02 + + v2rhoasigmaaa = 0.134850158624E-07 + v2rhoasigmaab = 0.269700317248E-07 + v2rhoasigmabb = 0.134850158624E-07 + v2rhobsigmaaa = 0.136189478240E-07 + v2rhobsigmaab = 0.272378956480E-07 + v2rhobsigmabb = 0.136189478240E-07 + + v2sigmaaa2 = -0.216571369852E-12 + v2sigmaaaab = -0.433142739704E-12 + v2sigmaaabb = -0.216571369852E-12 + v2sigmaab2 = -0.866285479407E-12 + v2sigmaabbb = -0.433142739704E-12 + v2sigmabb2 = -0.216571369852E-12 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.416748767197E-02 + vrhoa = -0.595487649525E-01 + vrhob = -0.658275108773E-01 + vsigmaaa = 0.500446791291E-02 + vsigmaab = 0.100089358258E-01 + vsigmabb = 0.500446791291E-02 + + v2rhoa2 = -0.254320619062E+00 + v2rhoab = -0.454911463637E+00 + v2rhob2 = -0.296322781759E+00 + + v2rhoasigmaaa = 0.376458611019E-01 + v2rhoasigmaab = 0.752917222037E-01 + v2rhoasigmabb = 0.376458611019E-01 + v2rhobsigmaaa = 0.432477759464E-01 + v2rhobsigmaab = 0.864955518927E-01 + v2rhobsigmabb = 0.432477759464E-01 + + v2sigmaaa2 = -0.873874773980E-02 + v2sigmaaaab = -0.174774954796E-01 + v2sigmaaabb = -0.873874773980E-02 + v2sigmaab2 = -0.349549909592E-01 + v2sigmaabbb = -0.174774954796E-01 + v2sigmabb2 = -0.873874773980E-02 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.446674124729E-02 + vrhoa = -0.576230218023E-01 + vrhob = -0.884299955306E-01 + vsigmaaa = 0.565507026894E-01 + vsigmaab = 0.113101405379E+00 + vsigmabb = 0.565507026894E-01 + + v2rhoa2 = 0.211475716365E+00 + v2rhoab = -0.313442480821E+00 + v2rhob2 = 0.661715882717E+00 + + v2rhoasigmaaa = -0.366634765948E+00 + v2rhoasigmaab = -0.733269531896E+00 + v2rhoasigmabb = -0.366634765948E+00 + v2rhobsigmaaa = -0.183738128575E+00 + v2rhobsigmaab = -0.367476257149E+00 + v2rhobsigmabb = -0.183738128575E+00 + + v2sigmaaa2 = -0.113703722438E+01 + v2sigmaaaab = -0.227407444876E+01 + v2sigmaaabb = -0.113703722438E+01 + v2sigmaab2 = -0.454814889752E+01 + v2sigmaabbb = -0.227407444876E+01 + v2sigmabb2 = -0.113703722438E+01 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.853822762402E+01 + vrhoa = -0.136330468738E+00 + vrhob = -0.137562342876E+00 + vsigmaaa = 0.397018264645E-05 + vsigmaab = 0.794036529289E-05 + vsigmabb = 0.397018264645E-05 + + v2rhoa2 = 0.505383535819E-03 + v2rhoab = -0.719176570320E-03 + v2rhob2 = 0.520080723382E-03 + + v2rhoasigmaaa = 0.220509385365E-09 + v2rhoasigmaab = 0.441018770730E-09 + v2rhoasigmabb = 0.220509385365E-09 + v2rhobsigmaaa = 0.606911398719E-09 + v2rhobsigmaab = 0.121382279744E-08 + v2rhobsigmabb = 0.606911398719E-09 + + v2sigmaaa2 = -0.518845125296E-11 + v2sigmaaaab = -0.103769025059E-10 + v2sigmaaabb = -0.518845125296E-11 + v2sigmaab2 = -0.207538050118E-10 + v2sigmaabbb = -0.103769025059E-10 + v2sigmabb2 = -0.518845125296E-11 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.615277551535E+01 + vrhoa = -0.133907518541E+00 + vrhob = -0.133907518541E+00 + vsigmaaa = 0.414743637478E-05 + vsigmaab = 0.829487274956E-05 + vsigmabb = 0.414743637478E-05 + + v2rhoa2 = 0.435534219905E-03 + v2rhoab = -0.969294804880E-03 + v2rhob2 = 0.435534219905E-03 + + v2rhoasigmaaa = 0.125079346911E-07 + v2rhoasigmaab = 0.250158693823E-07 + v2rhoasigmabb = 0.125079346911E-07 + v2rhobsigmaaa = 0.125079346911E-07 + v2rhobsigmaab = 0.250158693823E-07 + v2rhobsigmabb = 0.125079346911E-07 + + v2sigmaaa2 = -0.710218297869E-11 + v2sigmaaaab = -0.142043659574E-10 + v2sigmaaabb = -0.710218297869E-11 + v2sigmaab2 = -0.284087319147E-10 + v2sigmaabbb = -0.142043659574E-10 + v2sigmabb2 = -0.710218297869E-11 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.513978017858E-02 + vrhoa = -0.677801008926E-01 + vrhob = -0.720903652109E-01 + vsigmaaa = 0.723862883206E-02 + vsigmaab = 0.144772576641E-01 + vsigmabb = 0.723862883206E-02 + + v2rhoa2 = -0.172744794034E+00 + v2rhoab = -0.396171978594E+00 + v2rhob2 = -0.188314565988E+00 + + v2rhoasigmaaa = 0.403167927387E-01 + v2rhoasigmaab = 0.806335854774E-01 + v2rhoasigmabb = 0.403167927387E-01 + v2rhobsigmaaa = 0.445643432070E-01 + v2rhobsigmaab = 0.891286864140E-01 + v2rhobsigmabb = 0.445643432070E-01 + + v2sigmaaa2 = -0.149411369506E-01 + v2sigmaaaab = -0.298822739012E-01 + v2sigmaaabb = -0.149411369506E-01 + v2sigmaab2 = -0.597645478025E-01 + v2sigmaabbb = -0.298822739012E-01 + v2sigmabb2 = -0.149411369506E-01 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.203181802597E-02 + vrhoa = -0.608626957301E-01 + vrhob = -0.779575998152E-01 + vsigmaaa = 0.578479124549E-01 + vsigmaab = 0.115695824910E+00 + vsigmabb = 0.578479124549E-01 + + v2rhoa2 = 0.152335258351E-01 + v2rhoab = -0.720403954936E+00 + v2rhob2 = 0.952448412124E-01 + + v2rhoasigmaaa = 0.224592118966E+00 + v2rhoasigmaab = 0.449184237932E+00 + v2rhoasigmabb = 0.224592118966E+00 + v2rhobsigmaaa = 0.517340140054E+00 + v2rhobsigmaab = 0.103468028011E+01 + v2rhobsigmabb = 0.517340140054E+00 + + v2sigmaaa2 = -0.238365551254E+01 + v2sigmaaaab = -0.476731102509E+01 + v2sigmaaabb = -0.238365551254E+01 + v2sigmaab2 = -0.953462205018E+01 + v2sigmaabbb = -0.476731102509E+01 + v2sigmabb2 = -0.238365551254E+01 + diff --git a/libxc/testsuite/df_repo/gga_c_pw91.data b/libxc/testsuite/df_repo/gga_c_pw91.data new file mode 100644 index 000000000..17418174f --- /dev/null +++ b/libxc/testsuite/df_repo/gga_c_pw91.data @@ -0,0 +1,600 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.277344423214E+00 + vrhoa = -0.902549628505E-01 + vrhob = -0.902549628505E-01 + vsigmaaa = 0.973880560793E-03 + vsigmaab = 0.194776112159E-02 + vsigmabb = 0.973880560793E-03 + + v2rhoa2 = 0.129726626281E-01 + v2rhoab = -0.182704041173E-01 + v2rhob2 = 0.129726626281E-01 + + v2rhoasigmaaa = -0.381075641669E-03 + v2rhoasigmaab = -0.762151283338E-03 + v2rhoasigmabb = -0.381075641669E-03 + v2rhobsigmaaa = -0.381075641669E-03 + v2rhobsigmaab = -0.762151283338E-03 + v2rhobsigmabb = -0.381075641669E-03 + + v2sigmaaa2 = -0.372455307820E-04 + v2sigmaaaab = -0.744910615639E-04 + v2sigmaaabb = -0.372455307820E-04 + v2sigmaab2 = -0.148982123128E-03 + v2sigmaabbb = -0.744910615639E-04 + v2sigmabb2 = -0.372455307820E-04 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.271390707917E+00 + vrhoa = -0.922007758201E-01 + vrhob = -0.922007758201E-01 + vsigmaaa = 0.799975378309E-03 + vsigmaab = 0.159995075662E-02 + vsigmabb = 0.799975378309E-03 + + v2rhoa2 = 0.139081741919E-01 + v2rhoab = -0.171188952520E-01 + v2rhob2 = 0.139081741919E-01 + + v2rhoasigmaaa = -0.228201504472E-03 + v2rhoasigmaab = -0.456403008945E-03 + v2rhoasigmabb = -0.228201504472E-03 + v2rhobsigmaaa = -0.228201504472E-03 + v2rhobsigmaab = -0.456403008945E-03 + v2rhobsigmabb = -0.228201504472E-03 + + v2sigmaaa2 = -0.169041710688E-04 + v2sigmaaaab = -0.338083421376E-04 + v2sigmaaabb = -0.169041710688E-04 + v2sigmaab2 = -0.676166842752E-04 + v2sigmaabbb = -0.338083421376E-04 + v2sigmabb2 = -0.169041710688E-04 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.162732206486E+00 + vrhoa = -0.100173083518E+00 + vrhob = -0.100173083518E+00 + vsigmaaa = 0.333461786516E-03 + vsigmaab = 0.666923573033E-03 + vsigmabb = 0.333461786516E-03 + + v2rhoa2 = 0.777007069028E-02 + v2rhoab = -0.203064959581E-01 + v2rhob2 = 0.777007069028E-02 + + v2rhoasigmaaa = 0.283860923411E-04 + v2rhoasigmaab = 0.567721846822E-04 + v2rhoasigmabb = 0.283860923411E-04 + v2rhobsigmaaa = 0.283860923411E-04 + v2rhobsigmaab = 0.567721846822E-04 + v2rhobsigmabb = 0.283860923411E-04 + + v2sigmaaa2 = -0.156828317366E-05 + v2sigmaaaab = -0.313656634732E-05 + v2sigmaaabb = -0.156828317366E-05 + v2sigmaab2 = -0.627313269464E-05 + v2sigmaabbb = -0.313656634732E-05 + v2sigmabb2 = -0.156828317366E-05 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.395121494518E-02 + vrhoa = -0.657432879667E-01 + vrhob = -0.657432879667E-01 + vsigmaaa = 0.796497509469E-02 + vsigmaab = 0.159299501894E-01 + vsigmabb = 0.796497509469E-02 + + v2rhoa2 = -0.202034475850E+00 + v2rhoab = -0.457757341212E+00 + v2rhob2 = -0.202034475850E+00 + + v2rhoasigmaaa = 0.575363016683E-01 + v2rhoasigmaab = 0.115072603337E+00 + v2rhoasigmabb = 0.575363016683E-01 + v2rhobsigmaaa = 0.575363016683E-01 + v2rhobsigmaab = 0.115072603337E+00 + v2rhobsigmabb = 0.575363016683E-01 + + v2sigmaaa2 = -0.245078603329E-01 + v2sigmaaaab = -0.490157206657E-01 + v2sigmaaabb = -0.245078603329E-01 + v2sigmaab2 = -0.980314413314E-01 + v2sigmaabbb = -0.490157206657E-01 + v2sigmabb2 = -0.245078603329E-01 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.531561314188E+03 + vrhoa = -0.157671673276E+00 + vrhob = -0.157671673276E+00 + vsigmaaa = 0.901476672206E-07 + vsigmaab = 0.180295334441E-06 + vsigmabb = 0.901476672206E-07 + + v2rhoa2 = 0.222159132794E-04 + v2rhoab = -0.278289909468E-04 + v2rhob2 = 0.222159132794E-04 + + v2rhoasigmaaa = -0.334157735379E-10 + v2rhoasigmaab = -0.668315470758E-10 + v2rhoasigmabb = -0.334157735379E-10 + v2rhobsigmaaa = -0.334157735379E-10 + v2rhobsigmaab = -0.668315470758E-10 + v2rhobsigmabb = -0.334157735379E-10 + + v2sigmaaa2 = -0.891425333515E-16 + v2sigmaaaab = -0.178285066703E-15 + v2sigmaaabb = -0.891425333515E-16 + v2sigmaab2 = -0.356570133406E-15 + v2sigmaabbb = -0.178285066703E-15 + v2sigmabb2 = -0.891425333515E-16 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.531558213359E+03 + vrhoa = -0.157672822650E+00 + vrhob = -0.157672822650E+00 + vsigmaaa = 0.901446009986E-07 + vsigmaab = 0.180289201997E-06 + vsigmabb = 0.901446009986E-07 + + v2rhoa2 = 0.222166054165E-04 + v2rhoab = -0.278281924696E-04 + v2rhob2 = 0.222166054165E-04 + + v2rhoasigmaaa = -0.334125757620E-10 + v2rhoasigmaab = -0.668251515239E-10 + v2rhoasigmabb = -0.334125757620E-10 + v2rhobsigmaaa = -0.334125757620E-10 + v2rhobsigmaab = -0.668251515239E-10 + v2rhobsigmabb = -0.334125757620E-10 + + v2sigmaaa2 = -0.891375928080E-16 + v2sigmaaaab = -0.178275185616E-15 + v2sigmaaabb = -0.891375928080E-16 + v2sigmaab2 = -0.356550371232E-15 + v2sigmaabbb = -0.178275185616E-15 + v2sigmabb2 = -0.891375928080E-16 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.241006114605E+03 + vrhoa = -0.139542676620E+00 + vrhob = -0.139542676620E+00 + vsigmaaa = 0.502786520924E-08 + vsigmaab = 0.100557304185E-07 + vsigmabb = 0.502786520924E-08 + + v2rhoa2 = -0.192326293278E-05 + v2rhoab = -0.346455045398E-04 + v2rhob2 = -0.192326293278E-05 + + v2rhoasigmaaa = 0.139737398346E-11 + v2rhoasigmaab = 0.279474796692E-11 + v2rhoasigmabb = 0.139737398346E-11 + v2rhobsigmaaa = 0.139737398346E-11 + v2rhobsigmaab = 0.279474796692E-11 + v2rhobsigmabb = 0.139737398346E-11 + + v2sigmaaa2 = -0.323165021063E-18 + v2sigmaaaab = -0.646330042125E-18 + v2sigmaaabb = -0.323165021063E-18 + v2sigmaab2 = -0.129266008425E-17 + v2sigmaabbb = -0.646330042125E-18 + v2sigmabb2 = -0.323165021063E-18 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.261508836674E-01 + vrhoa = -0.850380343594E-01 + vrhob = -0.850380343594E-01 + vsigmaaa = 0.532761830491E-02 + vsigmaab = 0.106552366098E-01 + vsigmabb = 0.532761830491E-02 + + v2rhoa2 = 0.676821789787E-01 + v2rhoab = -0.810397979031E-01 + v2rhob2 = 0.676821789787E-01 + + v2rhoasigmaaa = -0.195075654625E-02 + v2rhoasigmaab = -0.390151309250E-02 + v2rhoasigmabb = -0.195075654625E-02 + v2rhobsigmaaa = -0.195075654625E-02 + v2rhobsigmaab = -0.390151309250E-02 + v2rhobsigmabb = -0.195075654625E-02 + + v2sigmaaa2 = -0.231629271760E-02 + v2sigmaaaab = -0.463258543520E-02 + v2sigmaaabb = -0.231629271760E-02 + v2sigmaab2 = -0.926517087040E-02 + v2sigmaabbb = -0.463258543520E-02 + v2sigmabb2 = -0.231629271760E-02 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.192841197359E+05 + vrhoa = -0.192145308961E+00 + vrhob = -0.192145308961E+00 + vsigmaaa = 0.988605615947E-09 + vsigmaab = 0.197721123189E-08 + vsigmabb = 0.988605615947E-09 + + v2rhoa2 = 0.930082983575E-06 + v2rhoab = -0.112363497767E-05 + v2rhob2 = 0.930082983575E-06 + + v2rhoasigmaaa = -0.124407912518E-13 + v2rhoasigmaab = -0.248815825037E-13 + v2rhoasigmabb = -0.124407912518E-13 + v2rhobsigmaaa = -0.124407912518E-13 + v2rhobsigmaab = -0.248815825037E-13 + v2rhobsigmabb = -0.124407912518E-13 + + v2sigmaaa2 = -0.301785816720E-21 + v2sigmaaaab = -0.603571633439E-21 + v2sigmaaabb = -0.301785816720E-21 + v2sigmaab2 = -0.120714326688E-20 + v2sigmaabbb = -0.603571633439E-21 + v2sigmabb2 = -0.301785816720E-21 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.787195454507E+04 + vrhoa = -0.150389301122E+00 + vrhob = -0.150389301122E+00 + vsigmaaa = 0.196050117191E-10 + vsigmaab = 0.392100234383E-10 + vsigmabb = 0.196050117191E-10 + + v2rhoa2 = -0.111565513161E-06 + v2rhoab = -0.126728935652E-05 + v2rhob2 = -0.111565513161E-06 + + v2rhoasigmaaa = 0.201213149017E-15 + v2rhoasigmaab = 0.402426298035E-15 + v2rhoasigmabb = 0.201213149017E-15 + v2rhobsigmaaa = 0.201213149017E-15 + v2rhobsigmaab = 0.402426298035E-15 + v2rhobsigmabb = 0.201213149017E-15 + + v2sigmaaa2 = -0.166334791796E-24 + v2sigmaaaab = -0.332669583592E-24 + v2sigmaaabb = -0.166334791796E-24 + v2sigmaab2 = -0.665339167185E-24 + v2sigmaabbb = -0.332669583592E-24 + v2sigmabb2 = -0.166334791796E-24 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.108821457516E-01 + vrhoa = -0.791955558902E-01 + vrhob = -0.791955558902E-01 + vsigmaaa = 0.710572162850E-02 + vsigmaab = 0.142114432570E-01 + vsigmabb = 0.710572162850E-02 + + v2rhoa2 = 0.253769163609E-01 + v2rhoab = -0.183037140984E+00 + v2rhob2 = 0.253769163609E-01 + + v2rhoasigmaaa = 0.965999714364E-02 + v2rhoasigmaab = 0.193199942873E-01 + v2rhoasigmabb = 0.965999714364E-02 + v2rhobsigmaaa = 0.965999714364E-02 + v2rhobsigmaab = 0.193199942873E-01 + v2rhobsigmabb = 0.965999714364E-02 + + v2sigmaaa2 = -0.813375887491E-02 + v2sigmaaaab = -0.162675177498E-01 + v2sigmaaabb = -0.813375887491E-02 + v2sigmaab2 = -0.325350354996E-01 + v2sigmaabbb = -0.162675177498E-01 + v2sigmabb2 = -0.813375887491E-02 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.149928973101E+00 + vrhoa = -0.472554998259E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.743726718647E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.130588545113E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.222014011291E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.147519972501E+00 + vrhoa = -0.480913103300E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.675729187591E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.829116659026E-03 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.179677466496E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.659226012199E-01 + vrhoa = -0.486953252341E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.144302755913E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.711870564589E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.629087409192E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.172759428017E-03 + vrhoa = -0.137874762962E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.494345568222E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.683493680484E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.207774437982E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.640006961124E+01 + vrhoa = -0.999866513511E-01 + vrhob = -0.100372571062E+00 + vsigmaaa = 0.184826494395E-06 + vsigmaab = 0.369652988790E-06 + vsigmabb = 0.184826494395E-06 + + v2rhoa2 = -0.263846884982E-03 + v2rhoab = -0.650432018513E-03 + v2rhob2 = -0.265180694533E-03 + + v2rhoasigmaaa = 0.136557309627E-08 + v2rhoasigmaab = 0.273114619254E-08 + v2rhoasigmabb = 0.136557309627E-08 + v2rhobsigmaaa = 0.137496927033E-08 + v2rhobsigmaab = 0.274993854066E-08 + v2rhobsigmabb = 0.137496927033E-08 + + v2sigmaaa2 = -0.100927632053E-13 + v2sigmaaaab = -0.201855264106E-13 + v2sigmaaabb = -0.100927632053E-13 + v2sigmaab2 = -0.403710528212E-13 + v2sigmaabbb = -0.201855264106E-13 + v2sigmabb2 = -0.100927632053E-13 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.258051271460E+01 + vrhoa = -0.917654870253E-01 + vrhob = -0.924958459953E-01 + vsigmaaa = 0.504340587823E-06 + vsigmaab = 0.100868117565E-05 + vsigmabb = 0.504340587823E-06 + + v2rhoa2 = -0.673510067892E-03 + v2rhoab = -0.140781632726E-02 + v2rhob2 = -0.681437355666E-03 + + v2rhoasigmaaa = 0.880806595654E-08 + v2rhoasigmaab = 0.176161319131E-07 + v2rhoasigmabb = 0.880806595654E-08 + v2rhobsigmaaa = 0.892599758143E-08 + v2rhobsigmaab = 0.178519951629E-07 + v2rhobsigmabb = 0.892599758143E-08 + + v2sigmaaa2 = -0.173276860156E-12 + v2sigmaaaab = -0.346553720312E-12 + v2sigmaaabb = -0.173276860156E-12 + v2sigmaab2 = -0.693107440625E-12 + v2sigmaabbb = -0.346553720312E-12 + v2sigmabb2 = -0.173276860156E-12 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.475398805591E-02 + vrhoa = -0.614930812180E-01 + vrhob = -0.682665101239E-01 + vsigmaaa = 0.486210103008E-02 + vsigmaab = 0.972420206015E-02 + vsigmabb = 0.486210103008E-02 + + v2rhoa2 = -0.180150058142E+00 + v2rhoab = -0.388435750226E+00 + v2rhob2 = -0.208827666674E+00 + + v2rhoasigmaaa = 0.288797891283E-01 + v2rhoasigmaab = 0.577595782566E-01 + v2rhoasigmabb = 0.288797891283E-01 + v2rhobsigmaaa = 0.338842245007E-01 + v2rhobsigmaab = 0.677684490015E-01 + v2rhobsigmabb = 0.338842245007E-01 + + v2sigmaaa2 = -0.755929074438E-02 + v2sigmaaaab = -0.151185814888E-01 + v2sigmaaabb = -0.755929074438E-02 + v2sigmaab2 = -0.302371629775E-01 + v2sigmaabbb = -0.151185814888E-01 + v2sigmabb2 = -0.755929074438E-02 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.450106022368E-02 + vrhoa = -0.568426120793E-01 + vrhob = -0.876498238182E-01 + vsigmaaa = 0.531751834129E-01 + vsigmaab = 0.106350366826E+00 + vsigmabb = 0.531751834129E-01 + + v2rhoa2 = 0.192611490688E+00 + v2rhoab = -0.331153469676E+00 + v2rhob2 = 0.645433404561E+00 + + v2rhoasigmaaa = -0.308498888708E+00 + v2rhoasigmaab = -0.616997777417E+00 + v2rhoasigmabb = -0.308498888708E+00 + v2rhobsigmaaa = -0.129198778272E+00 + v2rhobsigmaab = -0.258397556545E+00 + v2rhobsigmabb = -0.129198778272E+00 + + v2sigmaaa2 = -0.119074508391E+01 + v2sigmaaaab = -0.238149016782E+01 + v2sigmaaabb = -0.119074508391E+01 + v2sigmaab2 = -0.476298033563E+01 + v2sigmaabbb = -0.238149016782E+01 + v2sigmabb2 = -0.119074508391E+01 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.872911626818E+01 + vrhoa = -0.132719827372E+00 + vrhob = -0.133959465417E+00 + vsigmaaa = 0.344083560595E-05 + vsigmaab = 0.688167121190E-05 + vsigmabb = 0.344083560595E-05 + + v2rhoa2 = 0.505964577930E-03 + v2rhoab = -0.726078033783E-03 + v2rhob2 = 0.521227370759E-03 + + v2rhoasigmaaa = 0.115106405575E-08 + v2rhoasigmaab = 0.230212811151E-08 + v2rhoasigmabb = 0.115106405575E-08 + v2rhobsigmaaa = 0.151586408760E-08 + v2rhobsigmaab = 0.303172817520E-08 + v2rhobsigmabb = 0.151586408760E-08 + + v2sigmaaa2 = -0.463769328565E-11 + v2sigmaaaab = -0.927538657130E-11 + v2sigmaaabb = -0.463769328565E-11 + v2sigmaab2 = -0.185507731426E-10 + v2sigmaabbb = -0.927538657130E-11 + v2sigmabb2 = -0.463769328565E-11 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.638715240205E+01 + vrhoa = -0.130151243760E+00 + vrhob = -0.130151243760E+00 + vsigmaaa = 0.356214344775E-05 + vsigmaab = 0.712428689549E-05 + vsigmabb = 0.356214344775E-05 + + v2rhoa2 = 0.429350078205E-03 + v2rhoab = -0.992413954431E-03 + v2rhob2 = 0.429350078205E-03 + + v2rhoasigmaaa = 0.140483701399E-07 + v2rhoasigmaab = 0.280967402798E-07 + v2rhoasigmabb = 0.140483701399E-07 + v2rhobsigmaaa = 0.140483701399E-07 + v2rhobsigmaab = 0.280967402798E-07 + v2rhobsigmabb = 0.140483701399E-07 + + v2sigmaaa2 = -0.640783905442E-11 + v2sigmaaaab = -0.128156781088E-10 + v2sigmaaabb = -0.640783905442E-11 + v2sigmaab2 = -0.256313562177E-10 + v2sigmaabbb = -0.128156781088E-10 + v2sigmabb2 = -0.640783905442E-11 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.566491852414E-02 + vrhoa = -0.681082463225E-01 + vrhob = -0.726308333024E-01 + vsigmaaa = 0.680369403563E-02 + vsigmaab = 0.136073880713E-01 + vsigmabb = 0.680369403563E-02 + + v2rhoa2 = -0.109303945624E+00 + v2rhoab = -0.339659817865E+00 + v2rhob2 = -0.117365761801E+00 + + v2rhoasigmaaa = 0.302762854212E-01 + v2rhoasigmaab = 0.605525708424E-01 + v2rhoasigmabb = 0.302762854212E-01 + v2rhobsigmaaa = 0.340221664665E-01 + v2rhobsigmaab = 0.680443329331E-01 + v2rhobsigmabb = 0.340221664665E-01 + + v2sigmaaa2 = -0.128174817765E-01 + v2sigmaaaab = -0.256349635531E-01 + v2sigmaaabb = -0.128174817765E-01 + v2sigmaab2 = -0.512699271061E-01 + v2sigmaabbb = -0.256349635531E-01 + v2sigmabb2 = -0.128174817765E-01 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.211597767436E-02 + vrhoa = -0.596711649572E-01 + vrhob = -0.769843756564E-01 + vsigmaaa = 0.535412730241E-01 + vsigmaab = 0.107082546048E+00 + vsigmabb = 0.535412730241E-01 + + v2rhoa2 = 0.507933219381E-01 + v2rhoab = -0.677294674321E+00 + v2rhob2 = 0.167846055847E+00 + + v2rhoasigmaaa = 0.169155786052E+00 + v2rhoasigmaab = 0.338311572103E+00 + v2rhoasigmabb = 0.169155786052E+00 + v2rhobsigmaaa = 0.435630247613E+00 + v2rhobsigmaab = 0.871260495226E+00 + v2rhobsigmabb = 0.435630247613E+00 + + v2sigmaaa2 = -0.215562112877E+01 + v2sigmaaaab = -0.431124225755E+01 + v2sigmaaabb = -0.215562112877E+01 + v2sigmaab2 = -0.862248451509E+01 + v2sigmaabbb = -0.431124225755E+01 + v2sigmabb2 = -0.215562112877E+01 diff --git a/libxc/testsuite/df_repo/gga_x_b88.data b/libxc/testsuite/df_repo/gga_x_b88.data new file mode 100644 index 000000000..bf8ca951e --- /dev/null +++ b/libxc/testsuite/df_repo/gga_x_b88.data @@ -0,0 +1,601 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.377592720836E+01 + vrhoa = -0.148075576798E+01 + vrhob = -0.148075576798E+01 + vsigmaaa = -0.207006537839E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.207006537839E-02 + + v2rhoa2 = -0.290344268232E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.290344268232E+00 + + v2rhoasigmaaa = 0.162358068893E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.162358068893E-02 + + v2sigmaaa2 = 0.253445241319E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.253445241319E-04 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.378289713911E+01 + vrhoa = -0.147807268065E+01 + vrhob = -0.147807268065E+01 + vsigmaaa = -0.203114756676E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.203114756676E-02 + + v2rhoa2 = -0.293917869186E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.293917869186E+00 + + v2rhoasigmaaa = 0.153738619102E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.153738619102E-02 + + v2sigmaaa2 = 0.208765215311E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.208765215311E-04 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.334570325134E+01 + vrhoa = -0.136817307919E+01 + vrhob = -0.136817307919E+01 + vsigmaaa = -0.185634599412E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.185634599412E-02 + + v2rhoa2 = -0.371678164240E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.371678164240E+00 + + v2rhoasigmaaa = 0.105687034683E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.105687034683E-02 + + v2sigmaaa2 = 0.926898408248E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.926898408248E-05 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.851611545044E-01 + vrhoa = -0.501899165865E+00 + vrhob = -0.501899165865E+00 + vsigmaaa = -0.543404155466E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.543404155466E-01 + + v2rhoa2 = -0.253321231850E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.253321231850E+01 + + v2rhoasigmaaa = 0.239754146866E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.239754146866E+00 + + v2sigmaaa2 = 0.221360010652E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.221360010652E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.407494475322E+05 + vrhoa = -0.150923879747E+02 + vrhob = -0.150923879747E+02 + vsigmaaa = -0.191816494659E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.191816494659E-06 + + v2rhoa2 = -0.279488666210E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.279488666210E-02 + + v2rhoasigmaaa = 0.142086292324E-09 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.142086292324E-09 + + v2sigmaaa2 = 0.201646090402E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.201646090402E-16 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.407494508312E+05 + vrhoa = -0.150923867529E+02 + vrhob = -0.150923867529E+02 + vsigmaaa = -0.191816321255E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.191816321255E-06 + + v2rhoa2 = -0.279488824600E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.279488824600E-02 + + v2rhoasigmaaa = 0.142085906983E-09 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.142085906983E-09 + + v2sigmaaa2 = 0.201644008560E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.201644008560E-16 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.362648637930E+05 + vrhoa = -0.140333722784E+02 + vrhob = -0.140333722784E+02 + vsigmaaa = -0.174646643568E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.174646643568E-06 + + v2rhoa2 = -0.352244394438E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.352244394438E-02 + + v2rhoasigmaaa = 0.971067113036E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.971067113036E-10 + + v2sigmaaa2 = 0.785386351399E-17 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.785386351399E-17 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.321148637763E+00 + vrhoa = -0.766539815464E+00 + vrhob = -0.766539815464E+00 + vsigmaaa = -0.198197408319E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.198197408319E-01 + + v2rhoa2 = -0.117949870779E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.117949870779E+01 + + v2rhoasigmaaa = 0.685130252745E-01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.685130252745E-01 + + v2sigmaaa2 = 0.115351801846E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.115351801846E-01 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.370503980183E+07 + vrhoa = -0.466042742267E+02 + vrhob = -0.466042742267E+02 + vsigmaaa = -0.210967131116E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.210967131116E-08 + + v2rhoa2 = -0.293108643192E-03 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.293108643192E-03 + + v2rhoasigmaaa = 0.530734919752E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.530734919752E-13 + + v2sigmaaa2 = 0.268272614874E-22 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.268272614874E-22 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.328152696735E+07 + vrhoa = -0.433514250199E+02 + vrhob = -0.433514250199E+02 + vsigmaaa = -0.194182330561E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.194182330561E-08 + + v2rhoa2 = -0.368694289315E-03 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.368694289315E-03 + + v2rhoasigmaaa = 0.372175421272E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.372175421272E-13 + + v2sigmaaa2 = 0.108604300970E-22 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.108604300970E-22 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.161367392847E+00 + vrhoa = -0.619947650806E+00 + vrhob = -0.619947650806E+00 + vsigmaaa = -0.341862053361E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.341862053361E-01 + + v2rhoa2 = -0.179936512300E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.179936512300E+01 + + v2rhoasigmaaa = 0.148255198864E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.148255198864E+00 + + v2sigmaaa2 = 0.547109233247E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.547109233247E-01 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.494484233083E+01 + vrhoa = -0.188374945936E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.790360507210E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.179404710416E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.141061224494E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.494752158228E+01 + vrhoa = -0.188273473796E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.785719874797E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.180074584533E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.132207800833E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.419401965265E+01 + vrhoa = -0.172996985225E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.753968712720E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.231847776994E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.631038474677E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.259998774808E-01 + vrhoa = -0.428541964579E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.782798087404E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.312635380295E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.690680500539E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.740814331850E+03 + vrhoa = -0.498247046111E+01 + vrhob = -0.495532429311E+01 + vsigmaaa = -0.678262141094E-05 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.682517937334E-05 + + v2rhoa2 = -0.270432929879E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.272490060294E-01 + + v2rhoasigmaaa = 0.426066228043E-07 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.425046982664E-07 + + v2sigmaaa2 = 0.424725929436E-12 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.432961117719E-12 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.277987329958E+03 + vrhoa = -0.385951846654E+01 + vrhob = -0.381309494319E+01 + vsigmaaa = -0.172434478018E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.173712338362E-04 + + v2rhoa2 = -0.441426807406E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.447245742260E-01 + + v2rhoasigmaaa = 0.201415922856E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.195961359539E-06 + + v2sigmaaa2 = 0.700742719647E-11 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.718678968862E-11 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.120208982576E+00 + vrhoa = -0.583637510333E+00 + vrhob = -0.501672871724E+00 + vsigmaaa = -0.379227871606E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.367802205908E-01 + + v2rhoa2 = -0.199082326261E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.213690115573E+01 + + v2rhoasigmaaa = 0.160652968405E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.609908850345E-01 + + v2sigmaaa2 = 0.741970758035E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.737150455275E-01 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.416730804241E-01 + vrhoa = -0.522700471817E+00 + vrhob = -0.360524872778E+00 + vsigmaaa = -0.111846105258E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.249411314940E+00 + + v2rhoa2 = -0.245380935846E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.517371957290E+01 + + v2rhoasigmaaa = 0.156984506289E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.418857803825E+01 + + v2sigmaaa2 = 0.244026452179E+01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.211148438264E+02 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.343037899309E+03 + vrhoa = -0.451375531283E+01 + vrhob = -0.448071957650E+01 + vsigmaaa = -0.204625762085E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.209266539812E-04 + + v2rhoa2 = -0.327661718483E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.333090761894E-01 + + v2rhoasigmaaa = 0.455875527750E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.472402981076E-06 + + v2sigmaaa2 = 0.153056541719E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.162083837575E-10 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.260133861611E+03 + vrhoa = -0.416254426190E+01 + vrhob = -0.416322526434E+01 + vsigmaaa = -0.262815715798E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.263113502629E-04 + + v2rhoa2 = -0.391759770307E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.391492164486E-01 + + v2rhoasigmaaa = 0.680016391145E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.681990700893E-06 + + v2sigmaaa2 = 0.297024234619E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.298552512045E-10 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.112603177863E+00 + vrhoa = -0.568498809942E+00 + vrhob = -0.520860206545E+00 + vsigmaaa = -0.423139064219E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.436372569148E-01 + + v2rhoa2 = -0.209994430549E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.229642938280E+01 + + v2rhoasigmaaa = 0.195292854203E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.150061257405E+00 + + v2sigmaaa2 = 0.103073123098E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.115652366462E+00 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.253983617946E-01 + vrhoa = -0.431645138108E+00 + vrhob = -0.325991019475E+00 + vsigmaaa = -0.175455092294E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.260075409570E+00 + + v2rhoa2 = -0.374315005133E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.566470285703E+01 + + v2rhoasigmaaa = 0.291762144791E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.301407606104E+01 + + v2sigmaaa2 = 0.765442610536E+01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.248245711494E+02 + diff --git a/libxc/testsuite/df_repo/gga_x_ft97_b.data b/libxc/testsuite/df_repo/gga_x_ft97_b.data new file mode 100644 index 000000000..d685453de --- /dev/null +++ b/libxc/testsuite/df_repo/gga_x_ft97_b.data @@ -0,0 +1,601 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.377592720836E+01 + vrhoa = -0.148075576798E+01 + vrhob = -0.148075576798E+01 + vsigmaaa = -0.143605561175E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.143605561175E-02 + + v2rhoa2 = -0.290344268232E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.290344268232E+00 + + v2rhoasigmaaa = 0.112631812686E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.112631812686E-02 + + v2sigmaaa2 = -0.149288641286E-09 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.149288641286E-09 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.378080978542E+01 + vrhoa = -0.147884106019E+01 + vrhob = -0.147884106019E+01 + vsigmaaa = -0.143604158771E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.143604158771E-02 + + v2rhoa2 = -0.292972150379E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.292972150379E+00 + + v2rhoasigmaaa = 0.112624324247E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.112624324247E-02 + + v2sigmaaa2 = 0.238076427240E-07 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.238076427240E-07 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.331715455718E+01 + vrhoa = -0.136703399474E+01 + vrhob = -0.136703399474E+01 + vsigmaaa = -0.167589249857E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.167589249857E-02 + + v2rhoa2 = -0.395466109176E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.395466109176E+00 + + v2rhoasigmaaa = 0.143251479532E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.143251479532E-02 + + v2sigmaaa2 = 0.893069120069E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.893069120069E-06 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.852106905695E-01 + vrhoa = -0.469984067373E+00 + vrhob = -0.469984067373E+00 + vsigmaaa = -0.665884878683E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.665884878683E-01 + + v2rhoa2 = -0.366372661368E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.366372661368E+01 + + v2rhoasigmaaa = 0.714424943332E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.714424943332E+00 + + v2sigmaaa2 = 0.111703681307E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.111703681307E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.407494475321E+05 + vrhoa = -0.150923879748E+02 + vrhob = -0.150923879748E+02 + vsigmaaa = -0.133067859703E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.133067859703E-06 + + v2rhoa2 = -0.279488666207E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.279488666207E-02 + + v2rhoasigmaaa = 0.985687849651E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.985687849651E-10 + + v2sigmaaa2 = -0.138333873952E-13 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.138333873952E-13 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.407494498218E+05 + vrhoa = -0.150923871267E+02 + vrhob = -0.150923871267E+02 + vsigmaaa = -0.133186574384E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.133186574384E-06 + + v2rhoa2 = -0.279488776135E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.279488776135E-02 + + v2rhoasigmaaa = 0.986567217657E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.986567217657E-10 + + v2sigmaaa2 = -0.137764957633E-13 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.137764957633E-13 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.363433635640E+05 + vrhoa = -0.138931847324E+02 + vrhob = -0.138931847324E+02 + vsigmaaa = -0.202767444177E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.202767444177E-06 + + v2rhoa2 = -0.387943919205E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.387943919205E-02 + + v2rhoasigmaaa = 0.159799102049E-09 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.159799102049E-09 + + v2sigmaaa2 = 0.148829211285E-17 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.148829211285E-17 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.318630276460E+00 + vrhoa = -0.767047598725E+00 + vrhob = -0.767047598725E+00 + vsigmaaa = -0.173943868216E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.173943868216E-01 + + v2rhoa2 = -0.123201989739E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.123201989739E+01 + + v2rhoasigmaaa = 0.865749660907E-01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.865749660907E-01 + + v2sigmaaa2 = 0.914763270162E-03 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.914763270162E-03 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.370503980171E+07 + vrhoa = -0.466042742282E+02 + vrhob = -0.466042742282E+02 + vsigmaaa = -0.147780768222E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.147780768222E-08 + + v2rhoa2 = -0.293108643124E-03 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.293108643124E-03 + + v2rhoasigmaaa = 0.371775517540E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.371775517540E-13 + + v2sigmaaa2 = -0.145350140041E-15 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.145350140041E-15 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.328784912915E+07 + vrhoa = -0.429506798203E+02 + vrhob = -0.429506798203E+02 + vsigmaaa = -0.223988116852E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.223988116852E-08 + + v2rhoa2 = -0.403860117718E-03 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.403860117718E-03 + + v2rhoasigmaaa = 0.603172306456E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.603172306456E-13 + + v2sigmaaa2 = 0.196032405831E-23 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.196032405831E-23 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.159853974372E+00 + vrhoa = -0.610201561906E+00 + vrhob = -0.610201561906E+00 + vsigmaaa = -0.352478486399E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.352478486399E-01 + + v2rhoa2 = -0.215400804748E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.215400804748E+01 + + v2rhoasigmaaa = 0.280548486202E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.280548486202E+00 + + v2sigmaaa2 = 0.115191962996E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.115191962996E-01 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.494484233083E+01 + vrhoa = -0.188374945936E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.548292654683E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.179404710416E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.569990916614E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.494670652606E+01 + vrhoa = -0.188303929003E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.548292703294E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.179878155887E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.704950734383E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.416031985465E+01 + vrhoa = -0.173051807935E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.666642360632E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.243285204532E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.526773997267E-07 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.264716252566E-01 + vrhoa = -0.380886132581E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.105351899065E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.477536020320E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.566889970142E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.746707225313E+03 + vrhoa = -0.474243528961E+01 + vrhob = -0.470586596742E+01 + vsigmaaa = -0.916664705595E-05 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.928097585160E-05 + + v2rhoa2 = -0.363153367898E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.368237398844E-01 + + v2rhoasigmaaa = 0.113653473803E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.114994739857E-06 + + v2sigmaaa2 = 0.106803693788E-12 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.118387227367E-12 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.278380966422E+03 + vrhoa = -0.366163660538E+01 + vrhob = -0.359394800454E+01 + vsigmaaa = -0.215092265851E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.220464217027E-04 + + v2rhoa2 = -0.611473693278E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.630468092866E-01 + + v2rhoasigmaaa = 0.554234394848E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.563108455074E-06 + + v2sigmaaa2 = 0.198146496386E-11 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.236133877605E-11 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.121241538666E+00 + vrhoa = -0.566439926860E+00 + vrhob = -0.434688057577E+00 + vsigmaaa = -0.417888746850E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.511487718710E-01 + + v2rhoa2 = -0.256235594967E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.315194116477E+01 + + v2rhoasigmaaa = 0.360732413901E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.263417713761E+00 + + v2sigmaaa2 = 0.220582103560E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.735914956203E-01 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.414803112349E-01 + vrhoa = -0.523999095094E+00 + vrhob = -0.348035925848E+00 + vsigmaaa = -0.872785064391E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.280395158845E+00 + + v2rhoa2 = -0.244714614042E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.681116359183E+01 + + v2rhoasigmaaa = 0.148271651753E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.990980167503E+01 + + v2sigmaaa2 = 0.658036694552E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.694337079244E+01 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.341798671981E+03 + vrhoa = -0.452422714112E+01 + vrhob = -0.449131412032E+01 + vsigmaaa = -0.159723466327E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.164061070977E-04 + + v2rhoa2 = -0.326341212154E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.331963763824E-01 + + v2rhoasigmaaa = 0.423780501604E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.443961107001E-06 + + v2sigmaaa2 = -0.119007301890E-11 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.118683108753E-11 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.258800512911E+03 + vrhoa = -0.417287099243E+01 + vrhob = -0.417357788112E+01 + vsigmaaa = -0.214434667879E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.214425676217E-04 + + v2rhoa2 = -0.394160770240E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.393759231804E-01 + + v2rhoasigmaaa = 0.706840458625E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.706936770222E-06 + + v2sigmaaa2 = -0.895025851836E-12 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.903315004135E-12 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.112354675304E+00 + vrhoa = -0.552035803953E+00 + vrhob = -0.481501885869E+00 + vsigmaaa = -0.465309056912E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.549692654252E-01 + + v2rhoa2 = -0.269650306789E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.340717510246E+01 + + v2rhoasigmaaa = 0.436151357232E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.482723792920E+00 + + v2sigmaaa2 = 0.303220102088E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.670177842211E-01 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.253226784785E-01 + vrhoa = -0.430145824650E+00 + vrhob = -0.296152188022E+00 + vsigmaaa = -0.164171878994E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.338316339007E+00 + + v2rhoa2 = -0.409198933099E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.859533102439E+01 + + v2rhoasigmaaa = 0.432338693071E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.106249280141E+02 + + v2sigmaaa2 = 0.927168405887E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.169632851834E+02 + diff --git a/libxc/testsuite/df_repo/gga_x_pbe.data b/libxc/testsuite/df_repo/gga_x_pbe.data new file mode 100644 index 000000000..a2f524388 --- /dev/null +++ b/libxc/testsuite/df_repo/gga_x_pbe.data @@ -0,0 +1,600 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.377592720836E+01 + vrhoa = -0.148075576798E+01 + vrhob = -0.148075576798E+01 + vsigmaaa = -0.165665974842E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.165665974842E-02 + + v2rhoa2 = -0.290344268232E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.290344268232E+00 + + v2rhoasigmaaa = 0.129934097915E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.129934097915E-02 + + v2sigmaaa2 = 0.361615443758E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.361615443758E-05 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.378154942017E+01 + vrhoa = -0.147855914532E+01 + vrhob = -0.147855914532E+01 + vsigmaaa = -0.165052935245E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.165052935245E-02 + + v2rhoa2 = -0.293340073168E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.293340073168E+00 + + v2rhoasigmaaa = 0.128494322308E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.128494322308E-02 + + v2sigmaaa2 = 0.359610088925E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.359610088925E-05 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.332917118617E+01 + vrhoa = -0.136704102604E+01 + vrhob = -0.136704102604E+01 + vsigmaaa = -0.175922831660E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.175922831660E-02 + + v2rhoa2 = -0.383048644703E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.383048644703E+00 + + v2rhoasigmaaa = 0.123846484420E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.123846484420E-02 + + v2sigmaaa2 = 0.508271342885E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.508271342885E-05 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.847500738867E-01 + vrhoa = -0.498335317577E+00 + vrhob = -0.498335317577E+00 + vsigmaaa = -0.545109539268E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.545109539268E-01 + + v2rhoa2 = -0.229469146464E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.229469146464E+01 + + v2rhoasigmaaa = 0.154401191219E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.154401191219E+00 + + v2sigmaaa2 = 0.254715375324E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.254715375324E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.407494475322E+05 + vrhoa = -0.150923879748E+02 + vrhob = -0.150923879748E+02 + vsigmaaa = -0.153509482897E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.153509482897E-06 + + v2rhoa2 = -0.279488666208E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.279488666208E-02 + + v2rhoasigmaaa = 0.113710728070E-09 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.113710728070E-09 + + v2sigmaaa2 = 0.287708461721E-17 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.287708461721E-17 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.407494501724E+05 + vrhoa = -0.150923869969E+02 + vrhob = -0.150923869969E+02 + vsigmaaa = -0.153509458156E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.153509458156E-06 + + v2rhoa2 = -0.279488792967E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.279488792967E-02 + + v2rhoasigmaaa = 0.113710673089E-09 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.113710673089E-09 + + v2sigmaaa2 = 0.287708392165E-17 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.287708392165E-17 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.360960910073E+05 + vrhoa = -0.140305340798E+02 + vrhob = -0.140305340798E+02 + vsigmaaa = -0.163703325386E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.163703325386E-06 + + v2rhoa2 = -0.361179088671E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.361179088671E-02 + + v2rhoasigmaaa = 0.111691289742E-09 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.111691289742E-09 + + v2sigmaaa2 = 0.400996995891E-17 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.400996995891E-17 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.319679717401E+00 + vrhoa = -0.766494428708E+00 + vrhob = -0.766494428708E+00 + vsigmaaa = -0.185240091115E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.185240091115E-01 + + v2rhoa2 = -0.120781973536E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.120781973536E+01 + + v2rhoasigmaaa = 0.783950736036E-01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.783950736036E-01 + + v2sigmaaa2 = 0.578030314073E-02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.578030314073E-02 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.370503980175E+07 + vrhoa = -0.466042742277E+02 + vrhob = -0.466042742277E+02 + vsigmaaa = -0.168835611841E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.168835611841E-08 + + v2rhoa2 = -0.293108643147E-03 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.293108643147E-03 + + v2rhoasigmaaa = 0.424743677402E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.424743677402E-13 + + v2sigmaaa2 = 0.382771132308E-23 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.382771132308E-23 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.326657718168E+07 + vrhoa = -0.433502031071E+02 + vrhob = -0.433502031071E+02 + vsigmaaa = -0.181368847096E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.181368847096E-08 + + v2rhoa2 = -0.377435398713E-03 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.377435398713E-03 + + v2rhoasigmaaa = 0.425352935840E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.425352935840E-13 + + v2sigmaaa2 = 0.541929951945E-23 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.541929951945E-23 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.160448304498E+00 + vrhoa = -0.616293740752E+00 + vrhob = -0.616293740752E+00 + vsigmaaa = -0.340347075448E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.340347075448E-01 + + v2rhoa2 = -0.188013619179E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.188013619179E+01 + + v2rhoasigmaaa = 0.179505894965E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.179505894965E+00 + + v2sigmaaa2 = 0.432509198788E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.432509198788E-01 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.494484233083E+01 + vrhoa = -0.188374945936E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.632520331341E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.179404710416E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.201266029008E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.494699173727E+01 + vrhoa = -0.188293152324E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.631836581688E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.179948990030E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.200939766657E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.417440506676E+01 + vrhoa = -0.172954529118E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.707320404038E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.237820356120E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.323948969032E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.258503716227E-01 + vrhoa = -0.433574571158E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.743604018862E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.182332674956E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.934224897782E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.736865469611E+03 + vrhoa = -0.493897932478E+01 + vrhob = -0.491161504563E+01 + vsigmaaa = -0.685185279408E-05 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.689688466662E-05 + + v2rhoa2 = -0.273332629968E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.273922219983E-01 + + v2rhoasigmaaa = 0.455358003173E-07 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.445075229580E-07 + + v2sigmaaa2 = 0.413408272915E-12 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.427862514991E-12 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.276589791995E+03 + vrhoa = -0.382556082420E+01 + vrhob = -0.378108116179E+01 + vsigmaaa = -0.174145337536E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.175120610339E-04 + + v2rhoa2 = -0.429564214817E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.424802511645E-01 + + v2rhoasigmaaa = 0.185237729809E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.161839553501E-06 + + v2sigmaaa2 = 0.740514207206E-11 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.786563034093E-11 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.119421209325E+00 + vrhoa = -0.578832621965E+00 + vrhob = -0.517389121001E+00 + vsigmaaa = -0.382340404759E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.332973674309E-01 + + v2rhoa2 = -0.204167554105E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.722156009564E+00 + + v2rhoasigmaaa = 0.181184032538E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.177031055838E+00 + + v2sigmaaa2 = 0.685619910117E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.104342795817E+00 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.415413960050E-01 + vrhoa = -0.523382772310E+00 + vrhob = -0.357399049244E+00 + vsigmaaa = -0.975929514687E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.251904684435E+00 + + v2rhoa2 = -0.245525965200E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.524279284728E+01 + + v2rhoasigmaaa = 0.155938982496E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.452016269281E+01 + + v2sigmaaa2 = 0.776664232752E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.203904030316E+02 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.342262372442E+03 + vrhoa = -0.451953851009E+01 + vrhob = -0.448651692914E+01 + vsigmaaa = -0.177274055848E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.181825088154E-04 + + v2rhoa2 = -0.327443513253E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.333030095027E-01 + + v2rhoasigmaaa = 0.445584305337E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.464801667902E-06 + + v2sigmaaa2 = 0.462724606680E-11 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.500476145449E-11 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.259316875633E+03 + vrhoa = -0.416761407365E+01 + vrhob = -0.416832346828E+01 + vsigmaaa = -0.234431309174E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.234541298631E-04 + + v2rhoa2 = -0.394086605352E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.393741681091E-01 + + v2rhoasigmaaa = 0.708870190119E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.709919266338E-06 + + v2sigmaaa2 = 0.109950768377E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.110028156783E-10 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.112021068338E+00 + vrhoa = -0.563849973546E+00 + vrhob = -0.518540640509E+00 + vsigmaaa = -0.426508442574E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.433850716387E-01 + + v2rhoa2 = -0.215582132758E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.193599570809E+01 + + v2rhoasigmaaa = 0.221089275399E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.555875642118E-01 + + v2sigmaaa2 = 0.948033727977E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.140057158296E+00 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.252665336863E-01 + vrhoa = -0.430778167566E+00 + vrhob = -0.326346959743E+00 + vsigmaaa = -0.168954851377E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.254284088546E+00 + + v2rhoa2 = -0.388578815717E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.420071526691E+01 + + v2rhoasigmaaa = 0.349932953984E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.344308375753E+00 + + v2sigmaaa2 = 0.467162912424E+01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.317975451941E+02 diff --git a/libxc/testsuite/df_repo/gga_x_pw91.data b/libxc/testsuite/df_repo/gga_x_pw91.data new file mode 100644 index 000000000..53d542d6d --- /dev/null +++ b/libxc/testsuite/df_repo/gga_x_pw91.data @@ -0,0 +1,601 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.377592720836E+01 + vrhoa = -0.148075576798E+01 + vrhob = -0.148075576798E+01 + vsigmaaa = -0.932043387995E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.932043387995E-03 + + v2rhoa2 = -0.290344268232E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.290344268232E+00 + + v2rhoasigmaaa = 0.731014421969E-03 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.731014421969E-03 + + v2sigmaaa2 = -0.898210267526E-03 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.898210267526E-03 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.378095444846E+01 + vrhoa = -0.147778591928E+01 + vrhob = -0.147778591928E+01 + vsigmaaa = -0.185299327723E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.185299327723E-02 + + v2rhoa2 = -0.295642969077E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.295642969077E+00 + + v2rhoasigmaaa = 0.220538404493E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.220538404493E-02 + + v2sigmaaa2 = -0.282020994133E-03 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.282020994133E-03 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.334524619161E+01 + vrhoa = -0.136875736984E+01 + vrhob = -0.136875736984E+01 + vsigmaaa = -0.184404242682E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.184404242682E-02 + + v2rhoa2 = -0.369823738710E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.369823738710E+00 + + v2rhoasigmaaa = 0.102586616094E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.102586616094E-02 + + v2sigmaaa2 = 0.958254160782E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.958254160782E-05 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.849656692562E-01 + vrhoa = -0.505975525936E+00 + vrhob = -0.505975525936E+00 + vsigmaaa = -0.522324707834E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.522324707834E-01 + + v2rhoa2 = -0.232075764416E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.232075764416E+01 + + v2rhoasigmaaa = 0.153311051900E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.153311051900E+00 + + v2sigmaaa2 = 0.242034145736E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.242034145736E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.407494475321E+05 + vrhoa = -0.150923879748E+02 + vrhob = -0.150923879748E+02 + vsigmaaa = -0.863650482950E-07 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.863650482950E-07 + + v2rhoa2 = -0.279488666205E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.279488666205E-02 + + v2rhoasigmaaa = 0.639741104304E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.639741104304E-10 + + v2sigmaaa2 = -0.714634007138E-15 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.714634007138E-15 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.407494490175E+05 + vrhoa = -0.150923874246E+02 + vrhob = -0.150923874246E+02 + vsigmaaa = -0.863711936127E-07 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.863711936127E-07 + + v2rhoa2 = -0.279488737536E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.279488737536E-02 + + v2rhoasigmaaa = 0.639877664823E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.639877664823E-10 + + v2sigmaaa2 = -0.714601070507E-15 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.714601070507E-15 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.362611022960E+05 + vrhoa = -0.140378983689E+02 + vrhob = -0.140378983689E+02 + vsigmaaa = -0.173658527748E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.173658527748E-06 + + v2rhoa2 = -0.350892583997E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.350892583997E-02 + + v2rhoasigmaaa = 0.947616778029E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.947616778029E-10 + + v2sigmaaa2 = 0.810061005198E-17 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.810061005198E-17 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.321117679152E+00 + vrhoa = -0.766769287958E+00 + vrhob = -0.766769287958E+00 + vsigmaaa = -0.197121936150E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.197121936150E-01 + + v2rhoa2 = -0.117527513839E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.117527513839E+01 + + v2rhoasigmaaa = 0.669398749951E-01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.669398749951E-01 + + v2sigmaaa2 = 0.118909249839E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.118909249839E-01 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.370503980161E+07 + vrhoa = -0.466042742295E+02 + vrhob = -0.466042742295E+02 + vsigmaaa = -0.949875983759E-09 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.949875983759E-09 + + v2rhoa2 = -0.293108643068E-03 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.293108643068E-03 + + v2rhoasigmaaa = 0.238962557561E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.238962557561E-13 + + v2sigmaaa2 = -0.950758452942E-21 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.950758452942E-21 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.328121581863E+07 + vrhoa = -0.433641861522E+02 + vrhob = -0.433641861522E+02 + vsigmaaa = -0.193138530087E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.193138530087E-08 + + v2rhoa2 = -0.367394498371E-03 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.367394498371E-03 + + v2rhoasigmaaa = 0.363725780955E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.363725780955E-13 + + v2sigmaaa2 = 0.111939986725E-22 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.111939986725E-22 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.161281959179E+00 + vrhoa = -0.621017974954E+00 + vrhob = -0.621017974954E+00 + vsigmaaa = -0.336764293971E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.336764293971E-01 + + v2rhoa2 = -0.176594570925E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.176594570925E+01 + + v2rhoasigmaaa = 0.135669995475E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.135669995475E+00 + + v2sigmaaa2 = 0.575423590814E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.575423590814E-01 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.494484233083E+01 + vrhoa = -0.188374945936E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.355858463490E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.179404710416E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.499921164542E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.494631332487E+01 + vrhoa = -0.188301001743E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.501768985932E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.180074077999E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.364530853359E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.419357531760E+01 + vrhoa = -0.173053997913E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.749650911390E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.230939937528E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.650972931765E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.258584951104E-01 + vrhoa = -0.437338372420E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.727050628737E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.244260746620E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.788626837062E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.739934270280E+03 + vrhoa = -0.500194130392E+01 + vrhob = -0.497593413511E+01 + vsigmaaa = -0.661655297347E-05 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.665149614704E-05 + + v2rhoa2 = -0.259426653786E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.260706018375E-01 + + v2rhoasigmaaa = 0.352029178373E-07 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.346740334540E-07 + + v2sigmaaa2 = 0.454242196579E-12 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.463780470889E-12 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.277508827319E+03 + vrhoa = -0.388082848748E+01 + vrhob = -0.383766691652E+01 + vsigmaaa = -0.167197684376E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.167896719939E-04 + + v2rhoa2 = -0.416220420890E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.417483248081E-01 + + v2rhoasigmaaa = 0.152615808168E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.140494224330E-06 + + v2sigmaaa2 = 0.756528151156E-11 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.779608939054E-11 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.119728770337E+00 + vrhoa = -0.585486559894E+00 + vrhob = -0.517319511766E+00 + vsigmaaa = -0.371067307505E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.333018097938E-01 + + v2rhoa2 = -0.192471177532E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.140195266234E+01 + + v2rhoasigmaaa = 0.137625860400E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.669107971583E-01 + + v2sigmaaa2 = 0.789606978716E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.865209183894E-01 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.416606610942E-01 + vrhoa = -0.522604353726E+00 + vrhob = -0.361889021397E+00 + vsigmaaa = -0.112405560440E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.243425146968E+00 + + v2rhoa2 = -0.243569484671E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.496966001653E+01 + + v2rhoasigmaaa = 0.144354391474E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.348226944932E+01 + + v2sigmaaa2 = 0.340954163757E+01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.225642197599E+02 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.343023093496E+03 + vrhoa = -0.451226856998E+01 + vrhob = -0.447953235217E+01 + vsigmaaa = -0.206793144210E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.210943591227E-04 + + v2rhoa2 = -0.324555796871E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.330212301202E-01 + + v2rhoasigmaaa = 0.404623162590E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.425668722158E-06 + + v2sigmaaa2 = 0.250270264720E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.247774253789E-10 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.260126309305E+03 + vrhoa = -0.416275280459E+01 + vrhob = -0.416341719698E+01 + vsigmaaa = -0.262307773024E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.262628334268E-04 + + v2rhoa2 = -0.390699445174E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.390404185225E-01 + + v2rhoasigmaaa = 0.663687547341E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.665093145052E-06 + + v2sigmaaa2 = 0.319199539502E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.321940769142E-10 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.112397017484E+00 + vrhoa = -0.570266857493E+00 + vrhob = -0.526312948559E+00 + vsigmaaa = -0.414136182087E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.416437885637E-01 + + v2rhoa2 = -0.203144459871E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.204737952263E+01 + + v2rhoasigmaaa = 0.167763747962E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.784829537759E-01 + + v2sigmaaa2 = 0.109645337051E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.127705596537E+00 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.253628097987E-01 + vrhoa = -0.431923798174E+00 + vrhob = -0.330648852409E+00 + vsigmaaa = -0.173983322535E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.245517135909E+00 + + v2rhoa2 = -0.371564332659E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.481847641292E+01 + + v2rhoasigmaaa = 0.280241415366E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.937099956078E+00 + + v2sigmaaa2 = 0.794526228298E+01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.277983550893E+02 + diff --git a/libxc/testsuite/df_repo/gga_xc_b97.data b/libxc/testsuite/df_repo/gga_xc_b97.data new file mode 100644 index 000000000..7362ec655 --- /dev/null +++ b/libxc/testsuite/df_repo/gga_xc_b97.data @@ -0,0 +1,597 @@ + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.321430689469E+01 + vrhoa = -0.124990362109E+01 + vrhob = -0.124990362109E+01 + vsigmaaa = -0.870701549744E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.870701549744E-02 + + v2rhoa2 = -0.220710593157E+00 + v2rhoab = -0.172728400525E-01 + v2rhob2 = -0.220710593157E+00 + + v2rhoasigmaaa = 0.788320330617E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.251895880969E-04 + v2rhobsigmaaa = -0.251895880969E-04 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.788320330617E-02 + + v2sigmaaa2 = 0.154011690757E-02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.808256334986E-06 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.154011690757E-02 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.323995838121E+01 + vrhoa = -0.124110321291E+01 + vrhob = -0.124110321291E+01 + vsigmaaa = -0.651456037645E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.651456037645E-02 + + v2rhoa2 = -0.228031755427E+00 + v2rhoab = -0.171707807877E-01 + v2rhob2 = -0.228031755427E+00 + + v2rhoasigmaaa = 0.301664203956E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.264287147110E-04 + v2rhobsigmaaa = -0.264287147110E-04 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.301664203956E-02 + + v2sigmaaa2 = 0.107094175324E-02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.797160685607E-06 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.107094175324E-02 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.285716487370E+01 + vrhoa = -0.120729800275E+01 + vrhob = -0.120729800275E+01 + vsigmaaa = -0.753306490942E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.753306490942E-03 + + v2rhoa2 = -0.297497575701E+00 + v2rhoab = -0.156104205574E-01 + v2rhob2 = -0.297497575701E+00 + + v2rhoasigmaaa = 0.991152719927E-03 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.633489362381E-04 + v2rhobsigmaaa = -0.633489362381E-04 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.991152719927E-03 + + v2sigmaaa2 = -0.584317187982E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.914369190666E-06 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.584317187982E-05 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.731797277815E-01 + vrhoa = -0.453550856665E+00 + vrhob = -0.453550856665E+00 + vsigmaaa = -0.358396766141E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.358396766141E-01 + + v2rhoa2 = -0.245094535837E+01 + v2rhoab = -0.316936204566E+00 + v2rhob2 = -0.245094535837E+01 + + v2rhoasigmaaa = 0.484559490595E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.225599528319E-01 + v2rhobsigmaaa = -0.225599528319E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.484559490595E+00 + + v2sigmaaa2 = -0.117659907502E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.305620587231E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.117659907502E-01 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.332835386118E+05 + vrhoa = -0.123049859719E+02 + vrhob = -0.123049859719E+02 + vsigmaaa = -0.215481650006E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.215481650006E-06 + + v2rhoa2 = -0.223901688884E-02 + v2rhoab = -0.263095280890E-04 + v2rhob2 = -0.223901688884E-02 + + v2rhoasigmaaa = 0.178983422702E-09 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.374499143899E-12 + v2rhobsigmaaa = -0.374499143899E-12 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.178983422702E-09 + + v2sigmaaa2 = 0.219264126357E-15 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.113108131940E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.219264126357E-15 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.332835423178E+05 + vrhoa = -0.123049844359E+02 + vrhob = -0.123049844359E+02 + vsigmaaa = -0.215479763498E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.215479763498E-06 + + v2rhoa2 = -0.223901903070E-02 + v2rhoab = -0.263095207843E-04 + v2rhob2 = -0.223901903070E-02 + + v2rhoasigmaaa = 0.178978953277E-09 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.374500008389E-12 + v2rhobsigmaaa = -0.374500008389E-12 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.178978953277E-09 + + v2sigmaaa2 = 0.219260544343E-15 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.113108064009E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.219260544343E-15 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.293237558821E+05 + vrhoa = -0.115866066562E+02 + vrhob = -0.115866066562E+02 + vsigmaaa = -0.973795876085E-07 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.973795876085E-07 + + v2rhoa2 = -0.289046541209E-02 + v2rhoab = -0.237995402019E-04 + v2rhob2 = -0.289046541209E-02 + + v2rhoasigmaaa = 0.865822971230E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.931184800769E-12 + v2rhobsigmaaa = -0.931184800769E-12 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.865822971230E-10 + + v2sigmaaa2 = -0.103836941586E-17 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.131552533112E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.103836941586E-17 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.284097615296E+00 + vrhoa = -0.700983991533E+00 + vrhob = -0.700983991533E+00 + vsigmaaa = -0.563526841179E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.563526841179E-02 + + v2rhoa2 = -0.846687917786E+00 + v2rhoab = -0.802144866266E-01 + v2rhob2 = -0.846687917786E+00 + + v2rhoasigmaaa = 0.376804719959E-01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.538909275985E-02 + v2rhobsigmaaa = -0.538909275985E-02 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.376804719959E-01 + + v2sigmaaa2 = -0.448405677496E-02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.159661238808E-02 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.448405677496E-02 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.300975525154E+07 + vrhoa = -0.378300157084E+02 + vrhob = -0.378300157084E+02 + vsigmaaa = -0.151726414388E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.151726414388E-08 + + v2rhoa2 = -0.236288227431E-03 + v2rhoab = -0.106228461403E-05 + v2rhob2 = -0.236288227431E-03 + + v2rhoasigmaaa = 0.411919803939E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.550625910799E-16 + v2rhobsigmaaa = -0.550625910799E-16 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.411919803939E-13 + + v2sigmaaa2 = 0.116188680642E-21 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.598723607257E-25 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.116188680642E-21 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.263425773888E+07 + vrhoa = -0.354875450688E+02 + vrhob = -0.354875450688E+02 + vsigmaaa = -0.111676536955E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.111676536955E-08 + + v2rhoa2 = -0.303836246875E-03 + v2rhoab = -0.966392039643E-06 + v2rhob2 = -0.303836246875E-03 + + v2rhoasigmaaa = 0.331495319063E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.137766402652E-15 + v2rhobsigmaaa = -0.137766402652E-15 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.331495319063E-13 + + v2sigmaaa2 = -0.985234465619E-24 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.715781038233E-25 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.985234465619E-24 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.140649719651E+00 + vrhoa = -0.569841941897E+00 + vrhob = -0.569841941897E+00 + vsigmaaa = -0.163195197392E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.163195197392E-01 + + v2rhoa2 = -0.173636618314E+01 + v2rhoab = -0.113004330110E+00 + v2rhob2 = -0.173636618314E+01 + + v2rhoasigmaaa = 0.263056373110E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.221447008028E-01 + v2rhobsigmaaa = -0.221447008028E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.263056373110E+00 + + v2sigmaaa2 = -0.476397779650E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.984204171236E-02 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.476397779650E-01 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.402839804520E+01 + vrhoa = -0.153291509273E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.284931942724E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.145437004913E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.726834100420E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.403768046967E+01 + vrhoa = -0.152914574281E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.261516044966E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.147819054254E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.652160013784E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.342590305416E+01 + vrhoa = -0.146203256921E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.307160772065E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.189388799711E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.278805716216E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.211896681798E-01 + vrhoa = -0.320646347372E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.766505340463E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.449066756869E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.233114593891E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.598383795793E+03 + vrhoa = -0.405111231432E+01 + vrhob = -0.402217795062E+01 + vsigmaaa = -0.519408363171E-05 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.528209092215E-05 + + v2rhoa2 = -0.290954595434E-01 + v2rhoab = -0.380508082465E-03 + v2rhob2 = -0.295345106808E-01 + + v2rhoasigmaaa = 0.857627443410E-07 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.155021847000E-08 + v2rhobsigmaaa = -0.160039379800E-08 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.870944943023E-07 + + v2sigmaaa2 = -0.212433822467E-13 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.162038918346E-13 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.141280901637E-13 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.225313353525E+03 + vrhoa = -0.312184678677E+01 + vrhob = -0.306823565376E+01 + vsigmaaa = -0.137714367604E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.142288336047E-04 + + v2rhoa2 = -0.493050932822E-01 + v2rhoab = -0.961485362078E-03 + v2rhob2 = -0.506606337690E-01 + + v2rhoasigmaaa = 0.447407968434E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.708802700161E-08 + v2rhobsigmaaa = -0.802848142784E-08 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.452774526535E-06 + + v2sigmaaa2 = 0.151474989091E-12 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.285749516887E-12 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.530257026506E-12 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.102854122496E+00 + vrhoa = -0.524920278220E+00 + vrhob = -0.459928017285E+00 + vsigmaaa = -0.197671636236E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.271960701649E-01 + + v2rhoa2 = -0.205159366344E+01 + v2rhoab = -0.428394271613E+00 + v2rhob2 = -0.430400048678E+00 + + v2rhoasigmaaa = 0.320330843920E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.296964622206E-01 + v2rhobsigmaaa = -0.180434156695E-02 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.566697954138E-01 + + v2sigmaaa2 = -0.503937704775E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.500657094681E-02 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.567873412468E-01 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.377028900611E-01 + vrhoa = -0.459721095058E+00 + vrhob = -0.363471535561E+00 + vsigmaaa = -0.858770626506E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.141504900960E+00 + + v2rhoa2 = -0.106373335597E+01 + v2rhoab = -0.394159162322E+00 + v2rhob2 = -0.425467000779E+01 + + v2rhoasigmaaa = -0.461428675616E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.529383304736E-01 + v2rhobsigmaaa = -0.338975312799E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.640531222013E+01 + + v2sigmaaa2 = 0.438209398775E+02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.119612148192E+01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.318814224157E+01 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.285421835533E+03 + vrhoa = -0.375516560564E+01 + vrhob = -0.373252558776E+01 + vsigmaaa = -0.129840896754E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.128826913662E-04 + + v2rhoa2 = -0.232002594596E-01 + v2rhoab = -0.724983291844E-03 + v2rhob2 = -0.235344906929E-01 + + v2rhoasigmaaa = -0.110929317299E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.575398453952E-08 + v2rhobsigmaaa = -0.571720833008E-08 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.102852538318E-06 + + v2sigmaaa2 = 0.806407819389E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.448267849597E-12 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.781487001772E-10 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.216284652854E+03 + vrhoa = -0.349453071271E+01 + vrhob = -0.349461205919E+01 + vsigmaaa = -0.132273736704E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.132828425352E-04 + + v2rhoa2 = -0.280084397563E-01 + v2rhoab = -0.852329072583E-03 + v2rhob2 = -0.279607453210E-01 + + v2rhoasigmaaa = 0.737162778491E-07 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.111504551330E-07 + v2rhobsigmaaa = -0.110811629133E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.667321885673E-07 + + v2sigmaaa2 = 0.555271660744E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.103938329669E-11 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.574999449949E-10 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.969805650982E-01 + vrhoa = -0.517150345035E+00 + vrhob = -0.470746737631E+00 + vsigmaaa = -0.224168143525E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.306624174887E-01 + + v2rhoa2 = -0.212363725480E+01 + v2rhoab = -0.232311042708E+00 + v2rhob2 = -0.200682550776E+01 + + v2rhoasigmaaa = 0.383207068086E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.792395686035E-02 + v2rhobsigmaaa = -0.325893565531E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.264682090736E+00 + + v2sigmaaa2 = -0.656812249261E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.158859789537E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.217608483621E-01 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.226000175814E-01 + vrhoa = -0.404256618050E+00 + vrhob = -0.325995106885E+00 + vsigmaaa = -0.298372909564E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.160842228273E+00 + + v2rhoa2 = -0.318127613064E+01 + v2rhoab = -0.713328558287E+00 + v2rhob2 = -0.194399923084E+01 + + v2rhoasigmaaa = 0.356388978478E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.249625325380E+00 + v2rhobsigmaaa = -0.651103824015E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.656167329362E-01 + + v2sigmaaa2 = -0.126850474272E+02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.224888382282E+01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.144766733026E+02 diff --git a/libxc/testsuite/df_repo/gga_xc_b97_1.data b/libxc/testsuite/df_repo/gga_xc_b97_1.data new file mode 100644 index 000000000..3c253d725 --- /dev/null +++ b/libxc/testsuite/df_repo/gga_xc_b97_1.data @@ -0,0 +1,597 @@ + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.312832568140E+01 + vrhoa = -0.121690541305E+01 + vrhob = -0.121690541305E+01 + vsigmaaa = -0.100399536632E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.100399536632E-01 + + v2rhoa2 = -0.214536247161E+00 + v2rhoab = -0.174608242404E-01 + v2rhob2 = -0.214536247161E+00 + + v2rhoasigmaaa = 0.909025783282E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.265872039526E-04 + v2rhobsigmaaa = -0.265872039526E-04 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.909025783282E-02 + + v2sigmaaa2 = 0.178043409318E-02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.948034520398E-06 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.178043409318E-02 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.315789200487E+01 + vrhoa = -0.120676732119E+01 + vrhob = -0.120676732119E+01 + vsigmaaa = -0.750503620383E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.750503620383E-02 + + v2rhoa2 = -0.222938593952E+00 + v2rhoab = -0.173529222845E-01 + v2rhob2 = -0.222938593952E+00 + + v2rhoasigmaaa = 0.346318176127E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.280404161778E-04 + v2rhobsigmaaa = -0.280404161778E-04 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.346318176127E-02 + + v2sigmaaa2 = 0.123840841708E-02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.934922314118E-06 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.123840841708E-02 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.280122880144E+01 + vrhoa = -0.117956375094E+01 + vrhob = -0.117956375094E+01 + vsigmaaa = -0.800163391873E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.800163391873E-03 + + v2rhoa2 = -0.292163963549E+00 + v2rhoab = -0.155709222034E-01 + v2rhob2 = -0.292163963549E+00 + + v2rhoasigmaaa = 0.101889939003E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.700396269497E-04 + v2rhobsigmaaa = -0.700396269497E-04 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.101889939003E-02 + + v2sigmaaa2 = -0.583524276110E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.106876571795E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.583524276110E-05 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.718407332534E-01 + vrhoa = -0.446325133650E+00 + vrhob = -0.446325133650E+00 + vsigmaaa = -0.349798471321E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.349798471321E-01 + + v2rhoa2 = -0.216116225846E+01 + v2rhoab = -0.356664217787E+00 + v2rhob2 = -0.216116225846E+01 + + v2rhoasigmaaa = 0.399884763528E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.186984490590E-01 + v2rhobsigmaaa = -0.186984490590E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.399884763528E+00 + + v2sigmaaa2 = 0.712955256126E-02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.347357634486E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.712955256126E-02 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.324521835647E+05 + vrhoa = -0.119986308725E+02 + vrhob = -0.119986308725E+02 + vsigmaaa = -0.246915467734E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.246915467734E-06 + + v2rhoa2 = -0.218293471525E-02 + v2rhoab = -0.265958605773E-04 + v2rhob2 = -0.218293471525E-02 + + v2rhoasigmaaa = 0.205246310613E-09 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.395277806083E-12 + v2rhobsigmaaa = -0.395277806083E-12 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.205246310613E-09 + + v2sigmaaa2 = 0.253922742748E-15 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.132668819253E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.253922742748E-15 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.324521878114E+05 + vrhoa = -0.119986291109E+02 + vrhob = -0.119986291109E+02 + vsigmaaa = -0.246913283015E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.246913283015E-06 + + v2rhoa2 = -0.218293717240E-02 + v2rhoab = -0.265958528674E-04 + v2rhob2 = -0.218293717240E-02 + + v2rhoasigmaaa = 0.205241135381E-09 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.395278820076E-12 + v2rhobsigmaaa = -0.395278820076E-12 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.205241135381E-09 + + v2sigmaaa2 = 0.253918604490E-15 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.132668738976E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.253918604490E-15 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.287181980307E+05 + vrhoa = -0.112744809449E+02 + vrhob = -0.112744809449E+02 + vsigmaaa = -0.107105699267E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.107105699267E-06 + + v2rhoa2 = -0.285257801594E-02 + v2rhoab = -0.237248611115E-04 + v2rhob2 = -0.285257801594E-02 + + v2rhoasigmaaa = 0.912426804471E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.103024818554E-11 + v2rhobsigmaaa = -0.103024818554E-11 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.912426804471E-10 + + v2sigmaaa2 = -0.516977868651E-18 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.153846342996E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.516977868651E-18 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.278599054128E+00 + vrhoa = -0.686442624007E+00 + vrhob = -0.686442624007E+00 + vsigmaaa = -0.580571734957E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.580571734957E-02 + + v2rhoa2 = -0.819768524076E+00 + v2rhoab = -0.802320062166E-01 + v2rhob2 = -0.819768524076E+00 + + v2rhoasigmaaa = 0.361488479843E-01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.594591394367E-02 + v2rhobsigmaaa = -0.594591394367E-02 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.361488479843E-01 + + v2sigmaaa2 = -0.402317304883E-02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.186741617991E-02 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.402317304883E-02 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.293532064808E+07 + vrhoa = -0.368957405871E+02 + vrhob = -0.368957405871E+02 + vsigmaaa = -0.173019183681E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.173019183681E-08 + + v2rhoa2 = -0.230441211597E-03 + v2rhoab = -0.107384569545E-05 + v2rhob2 = -0.230441211597E-03 + + v2rhoasigmaaa = 0.470137481962E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.581176767990E-16 + v2rhobsigmaaa = -0.581176767990E-16 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.470137481962E-13 + + v2sigmaaa2 = 0.134988294027E-21 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.702265634409E-25 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.134988294027E-21 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.257916052470E+07 + vrhoa = -0.345152953253E+02 + vrhob = -0.345152953253E+02 + vsigmaaa = -0.123279011100E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.123279011100E-08 + + v2rhoa2 = -0.300165721130E-03 + v2rhoab = -0.963325888063E-06 + v2rhob2 = -0.300165721130E-03 + + v2rhoasigmaaa = 0.351499640706E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.152433182784E-15 + v2rhobsigmaaa = -0.152433182784E-15 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.351499640706E-13 + + v2sigmaaa2 = -0.222135813014E-24 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.837208407229E-25 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.222135813014E-24 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.138035126924E+00 + vrhoa = -0.557828495819E+00 + vrhob = -0.557828495819E+00 + vsigmaaa = -0.165681306559E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.165681306559E-01 + + v2rhoa2 = -0.170018315928E+01 + v2rhoab = -0.113873975887E+00 + v2rhob2 = -0.170018315928E+01 + + v2rhoasigmaaa = 0.263647924088E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.242906472012E-01 + v2rhobsigmaaa = -0.242906472012E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.263647924088E+00 + + v2sigmaaa2 = -0.487443175028E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.114478199072E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.487443175028E-01 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.391633636807E+01 + vrhoa = -0.149112910862E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.328678292843E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.141750332201E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.840299085946E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.392704289078E+01 + vrhoa = -0.148678050195E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.301605851914E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.144498266919E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.754032075773E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.335380641208E+01 + vrhoa = -0.142561845802E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.332793535392E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.186366124360E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.263206044080E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.208827482628E-01 + vrhoa = -0.311624077131E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.777710644914E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.420412784365E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.295520734113E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.589421566154E+03 + vrhoa = -0.393642849482E+01 + vrhob = -0.390859395500E+01 + vsigmaaa = -0.545772168417E-05 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.554242621426E-05 + + v2rhoa2 = -0.280568360218E-01 + v2rhoab = -0.405370536486E-03 + v2rhob2 = -0.284222855750E-01 + + v2rhoasigmaaa = 0.825516585585E-07 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.164615317273E-08 + v2rhobsigmaaa = -0.170662304491E-08 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.834939667850E-07 + + v2sigmaaa2 = 0.225224688659E-13 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.187066630180E-13 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.314017300670E-13 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.222140373007E+03 + vrhoa = -0.303653930163E+01 + vrhob = -0.298589553368E+01 + vsigmaaa = -0.143255582671E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.147456283407E-04 + + v2rhoa2 = -0.469336647195E-01 + v2rhoab = -0.106349512094E-02 + v2rhob2 = -0.478880580375E-01 + + v2rhoasigmaaa = 0.420323479049E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.705381952685E-08 + v2rhobsigmaaa = -0.817189771836E-08 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.419973560009E-06 + + v2sigmaaa2 = 0.915989049218E-12 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.327645904343E-12 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.134648643849E-11 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.100835011256E+00 + vrhoa = -0.512830248996E+00 + vrhob = -0.464589214466E+00 + vsigmaaa = -0.197666044769E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.248490695040E-01 + + v2rhoa2 = -0.198123304745E+01 + v2rhoab = -0.494438847835E+00 + v2rhob2 = 0.277674953108E+00 + + v2rhoasigmaaa = 0.310520086067E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.390854677254E-01 + v2rhobsigmaaa = 0.230337337582E-02 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.158141563936E+00 + + v2sigmaaa2 = -0.498790831187E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.547276473162E-02 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.645119035857E-01 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.369523332640E-01 + vrhoa = -0.448012336265E+00 + vrhob = -0.358233143589E+00 + vsigmaaa = -0.972541193828E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.137323022891E+00 + + v2rhoa2 = -0.903203590016E+00 + v2rhoab = -0.409791077214E+00 + v2rhob2 = -0.378677620428E+01 + + v2rhoasigmaaa = -0.540361574980E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.158955937027E-01 + v2rhobsigmaaa = -0.382448679335E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.532410185357E+01 + + v2sigmaaa2 = 0.508701617857E+02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.139380015420E+01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.114059942270E+01 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.279016013089E+03 + vrhoa = -0.365864521472E+01 + vrhob = -0.363685328006E+01 + vsigmaaa = -0.146463030072E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.145123212043E-04 + + v2rhoa2 = -0.223646085559E-01 + v2rhoab = -0.730564232170E-03 + v2rhob2 = -0.226853726928E-01 + + v2rhoasigmaaa = -0.143977544024E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.624389697441E-08 + v2rhobsigmaaa = -0.621525379269E-08 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.135904777044E-06 + + v2sigmaaa2 = 0.941696803336E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.525334477526E-12 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.913647444686E-10 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.211593869025E+03 + vrhoa = -0.340647365897E+01 + vrhob = -0.340653252022E+01 + vsigmaaa = -0.147129784976E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.147792635880E-04 + + v2rhoa2 = -0.271018607063E-01 + v2rhoab = -0.856789135223E-03 + v2rhob2 = -0.270500609987E-01 + + v2rhoasigmaaa = 0.506264169864E-07 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.122095881286E-07 + v2rhobsigmaaa = -0.121284261343E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.427432995854E-07 + + v2sigmaaa2 = 0.663662442578E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.121742991521E-11 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.686510680313E-10 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.952046150814E-01 + vrhoa = -0.506217965758E+00 + vrhob = -0.464894398560E+00 + vsigmaaa = -0.224231703510E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.297364236063E-01 + + v2rhoa2 = -0.204102496098E+01 + v2rhoab = -0.256875625600E+00 + v2rhob2 = -0.165521590713E+01 + + v2rhoasigmaaa = 0.369601684037E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.488318891851E-02 + v2rhobsigmaaa = -0.340705477668E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.187902398037E+00 + + v2sigmaaa2 = -0.641918954882E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.181931902162E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.347092043431E-01 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.221447108929E-01 + vrhoa = -0.396378943321E+00 + vrhob = -0.326538824980E+00 + vsigmaaa = -0.264639827171E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.144678049892E+00 + + v2rhoa2 = -0.313621413064E+01 + v2rhoab = -0.785373708088E+00 + v2rhob2 = -0.353191365040E+00 + + v2rhoasigmaaa = 0.365776937952E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.390252548108E+00 + v2rhobsigmaaa = -0.706328139980E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.321749638206E+01 + + v2sigmaaa2 = -0.138277289570E+02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.258372320451E+01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.183010304921E+02 diff --git a/libxc/testsuite/df_repo/gga_xc_b97_2.data b/libxc/testsuite/df_repo/gga_xc_b97_2.data new file mode 100644 index 000000000..e4715278d --- /dev/null +++ b/libxc/testsuite/df_repo/gga_xc_b97_2.data @@ -0,0 +1,597 @@ + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.334654951114E+01 + vrhoa = -0.129756330583E+01 + vrhob = -0.129756330583E+01 + vsigmaaa = 0.203356118194E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.203356118194E-02 + + v2rhoa2 = -0.226241408815E+00 + v2rhoab = -0.182676452863E-01 + v2rhob2 = -0.226241408815E+00 + + v2rhoasigmaaa = -0.182785462300E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.474141482494E-04 + v2rhobsigmaaa = -0.474141482494E-04 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.182785462300E-02 + + v2sigmaaa2 = -0.350827197415E-03 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.133824873479E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.350827197415E-03 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.334054349145E+01 + vrhoa = -0.129969634475E+01 + vrhob = -0.129969634475E+01 + vsigmaaa = 0.152651092657E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.152651092657E-02 + + v2rhoa2 = -0.224597150030E+00 + v2rhoab = -0.180758873086E-01 + v2rhob2 = -0.224597150030E+00 + + v2rhoasigmaaa = -0.686503839618E-03 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.494661970157E-04 + v2rhobsigmaaa = -0.494661970157E-04 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.686503839618E-03 + + v2sigmaaa2 = -0.254785255524E-03 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.132006587041E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.254785255524E-03 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.283020783585E+01 + vrhoa = -0.121867122505E+01 + vrhob = -0.121867122505E+01 + vsigmaaa = -0.416060868836E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.416060868836E-03 + + v2rhoa2 = -0.302978446473E+00 + v2rhoab = -0.134914247772E-01 + v2rhob2 = -0.302978446473E+00 + + v2rhoasigmaaa = 0.975684257194E-03 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.113114972459E-03 + v2rhobsigmaaa = -0.113114972459E-03 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.975684257194E-03 + + v2sigmaaa2 = -0.922178242744E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.152114240996E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.922178242744E-05 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.712953297989E-01 + vrhoa = -0.452170920395E+00 + vrhob = -0.452170920395E+00 + vsigmaaa = -0.307512563972E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.307512563972E-01 + + v2rhoa2 = -0.300012958960E+01 + v2rhoab = -0.324368296215E+00 + v2rhob2 = -0.300012958960E+01 + + v2rhoasigmaaa = 0.729729058826E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.523277809786E-01 + v2rhobsigmaaa = -0.523277809786E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.729729058826E+00 + + v2sigmaaa2 = -0.144765262785E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.527466468857E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.144765262785E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.341492694189E+05 + vrhoa = -0.126166276167E+02 + vrhob = -0.126166276167E+02 + vsigmaaa = 0.271790342923E-07 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.271790342923E-07 + + v2rhoa2 = -0.228979334244E-02 + v2rhoab = -0.278247888194E-04 + v2rhob2 = -0.228979334244E-02 + + v2rhoasigmaaa = -0.246137881553E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.704916565507E-12 + v2rhobsigmaaa = -0.704916565507E-12 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.246137881553E-10 + + v2sigmaaa2 = -0.540669108804E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.187275753881E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.540669108804E-16 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.341492689514E+05 + vrhoa = -0.126166278344E+02 + vrhob = -0.126166278344E+02 + vsigmaaa = 0.271785709602E-07 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.271785709602E-07 + + v2rhoa2 = -0.228979303476E-02 + v2rhoab = -0.278247750699E-04 + v2rhob2 = -0.228979303476E-02 + + v2rhoasigmaaa = -0.246126951639E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.704917996862E-12 + v2rhobsigmaaa = -0.704917996862E-12 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.246126951639E-10 + + v2sigmaaa2 = -0.540661841336E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.187275642563E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.540661841336E-16 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.293135701544E+05 + vrhoa = -0.119728242520E+02 + vrhob = -0.119728242520E+02 + vsigmaaa = -0.347910836323E-07 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.347910836323E-07 + + v2rhoa2 = -0.287307721961E-02 + v2rhoab = -0.207095023212E-04 + v2rhob2 = -0.287307721961E-02 + + v2rhoasigmaaa = 0.693764416376E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.166133141425E-11 + v2rhobsigmaaa = -0.166133141425E-11 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.693764416376E-10 + + v2sigmaaa2 = -0.650102941218E-17 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.218695382772E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.650102941218E-17 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.280630836242E+00 + vrhoa = -0.699212736181E+00 + vrhob = -0.699212736181E+00 + vsigmaaa = -0.371893747959E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.371893747959E-02 + + v2rhoa2 = -0.938426340694E+00 + v2rhoab = -0.728331742364E-01 + v2rhob2 = -0.938426340694E+00 + + v2rhoasigmaaa = 0.647642064563E-01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.964652265528E-02 + v2rhobsigmaaa = -0.964652265528E-02 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.647642064563E-01 + + v2sigmaaa2 = -0.152349330052E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.265379313263E-02 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.152349330052E-01 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.308179221255E+07 + vrhoa = -0.387245302059E+02 + vrhob = -0.387245302059E+02 + vsigmaaa = 0.660302728484E-10 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.660302728484E-10 + + v2rhoa2 = -0.241619051515E-03 + v2rhoab = -0.112346542070E-05 + v2rhob2 = -0.241619051515E-03 + + v2rhoasigmaaa = -0.236807848312E-14 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.103643848618E-15 + v2rhobsigmaaa = -0.103643848618E-15 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.236807848312E-14 + + v2sigmaaa2 = -0.326637840524E-22 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.991320544270E-25 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.326637840524E-22 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.263836067044E+07 + vrhoa = -0.367755393609E+02 + vrhob = -0.367755393609E+02 + vsigmaaa = -0.373036965257E-09 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.373036965257E-09 + + v2rhoa2 = -0.299265712517E-03 + v2rhoab = -0.843586670788E-06 + v2rhob2 = -0.299265712517E-03 + + v2rhoasigmaaa = 0.246011190040E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.245769261360E-15 + v2rhobsigmaaa = -0.245769261360E-15 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.246011190040E-13 + + v2sigmaaa2 = -0.849220321835E-23 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.118968445017E-24 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.849220321835E-23 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.138192666310E+00 + vrhoa = -0.570509273216E+00 + vrhob = -0.570509273216E+00 + vsigmaaa = -0.122857347126E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.122857347126E-01 + + v2rhoa2 = -0.161785658658E+01 + v2rhoab = -0.808357504126E-01 + v2rhob2 = -0.161785658658E+01 + + v2rhoasigmaaa = 0.218110115545E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.399133678697E-01 + v2rhobsigmaaa = -0.399133678697E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.218110115545E+00 + + v2sigmaaa2 = -0.417066032282E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.164814282536E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.417066032282E-01 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.418038878824E+01 + vrhoa = -0.158675281989E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.700961218120E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.149247871482E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.166818046950E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.417809892990E+01 + vrhoa = -0.158771442133E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.646873616057E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.148621890630E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.151648889817E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.338968277384E+01 + vrhoa = -0.148037079510E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.130941748015E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.196777996208E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.746992879141E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.207113047071E-01 + vrhoa = -0.283511334955E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.884555811863E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.730372913656E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.280300192626E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.582235697295E+03 + vrhoa = -0.413300492328E+01 + vrhob = -0.409712425677E+01 + vsigmaaa = -0.385412061844E-05 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.398447260964E-05 + + v2rhoa2 = -0.356656612473E-01 + v2rhoab = -0.270385252736E-03 + v2rhob2 = -0.366419564686E-01 + + v2rhoasigmaaa = 0.125227314034E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.289882247746E-08 + v2rhobsigmaaa = -0.297877911508E-08 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.129614634649E-06 + + v2sigmaaa2 = -0.405687855888E-12 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.274068863909E-13 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.410408282319E-12 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.218517855592E+03 + vrhoa = -0.315144677134E+01 + vrhob = -0.307838404544E+01 + vsigmaaa = -0.111279284316E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.119525885342E-04 + + v2rhoa2 = -0.643335334172E-01 + v2rhoab = -0.833468570198E-03 + v2rhob2 = -0.683613115081E-01 + + v2rhoasigmaaa = 0.718272745120E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.141663375440E-07 + v2rhobsigmaaa = -0.156945665894E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.763766415109E-06 + + v2sigmaaa2 = -0.641610473457E-11 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.487629191388E-12 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.631823315747E-11 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.100551545376E+00 + vrhoa = -0.527793228850E+00 + vrhob = -0.431613215933E+00 + vsigmaaa = -0.135704869089E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.301033389749E-01 + + v2rhoa2 = -0.204853887925E+01 + v2rhoab = -0.541385678705E+00 + v2rhob2 = -0.154042501825E+01 + + v2rhoasigmaaa = 0.321398875196E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.409644072387E-01 + v2rhobsigmaaa = -0.115131756157E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.182100003683E+00 + + v2sigmaaa2 = -0.734724120260E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.906038433225E-02 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.178683670736E-01 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.373013678572E-01 + vrhoa = -0.473435283691E+00 + vrhob = -0.361218005149E+00 + vsigmaaa = 0.359020337111E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.131562766064E+00 + + v2rhoa2 = -0.197163572369E+01 + v2rhoab = -0.394067363450E+00 + v2rhob2 = -0.370899186139E+01 + + v2rhoasigmaaa = 0.156172632966E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.176766532605E+00 + v2rhobsigmaaa = -0.590470328251E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.482372899310E+01 + + v2sigmaaa2 = -0.164476348552E+02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.199814672180E+01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.153004163905E+01 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.288118800455E+03 + vrhoa = -0.387190976620E+01 + vrhob = -0.384674293206E+01 + vsigmaaa = -0.926017812730E-07 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.304958432502E-06 + + v2rhoa2 = -0.256948221686E-01 + v2rhoab = -0.733123919164E-03 + v2rhob2 = -0.261082512764E-01 + + v2rhoasigmaaa = 0.195378863405E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.105014757198E-07 + v2rhobsigmaaa = -0.104126275098E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.208542970255E-06 + + v2sigmaaa2 = -0.333446383368E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.743086872059E-12 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.337634056804E-10 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.217269650543E+03 + vrhoa = -0.358742354350E+01 + vrhob = -0.358780399244E+01 + vsigmaaa = -0.224156645788E-05 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.219670356594E-05 + + v2rhoa2 = -0.307463012095E-01 + v2rhoab = -0.835295229330E-03 + v2rhob2 = -0.307208431786E-01 + + v2rhoasigmaaa = 0.360597817952E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.201387569030E-07 + v2rhobsigmaaa = -0.200238092690E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.360137201462E-06 + + v2sigmaaa2 = -0.428294481895E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.172421451059E-11 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.434505830110E-10 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.947215032653E-01 + vrhoa = -0.520331942477E+00 + vrhob = -0.465584076796E+00 + vsigmaaa = -0.161487029513E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.280975332438E-01 + + v2rhoa2 = -0.209729480584E+01 + v2rhoab = -0.227139588634E+00 + v2rhob2 = -0.266112764097E+01 + + v2rhoasigmaaa = 0.377472761787E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.216289107274E-01 + v2rhobsigmaaa = -0.619734366494E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.471758901127E+00 + + v2sigmaaa2 = -0.909660076372E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.271516902447E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.484173038134E-01 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.221643846362E-01 + vrhoa = -0.398051966421E+00 + vrhob = -0.323916098220E+00 + vsigmaaa = -0.227465906976E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.150020244938E+00 + + v2rhoa2 = -0.294341508627E+01 + v2rhoab = -0.779076273200E+00 + v2rhob2 = -0.247003061591E+01 + + v2rhoasigmaaa = 0.262406095188E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.225315294332E+00 + v2rhobsigmaaa = -0.118872618470E+01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.231832540263E+01 + + v2sigmaaa2 = -0.916949124493E+01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.382784516099E+01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.575406401616E+01 diff --git a/libxc/testsuite/df_repo/gga_xc_edf1.data b/libxc/testsuite/df_repo/gga_xc_edf1.data new file mode 100644 index 000000000..336428a9a --- /dev/null +++ b/libxc/testsuite/df_repo/gga_xc_edf1.data @@ -0,0 +1,600 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.410271047495E+01 + vrhoa = -0.159316635401E+01 + vrhob = -0.159316635401E+01 + vsigmaaa = -0.375008733521E-03 + vsigmaab = 0.751922016686E-04 + vsigmabb = -0.375008733521E-03 + + v2rhoa2 = -0.286557001073E+00 + v2rhoab = -0.150616809336E-01 + v2rhob2 = -0.286557001073E+00 + + v2rhoasigmaaa = 0.170398824729E-03 + v2rhoasigmaab = -0.389687448457E-04 + v2rhoasigmabb = 0.108792208968E-03 + v2rhobsigmaaa = 0.108792208968E-03 + v2rhobsigmaab = -0.389687448457E-04 + v2rhobsigmabb = 0.170398824729E-03 + + v2sigmaaa2 = -0.310350597338E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.310350597338E-04 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.410394050371E+01 + vrhoa = -0.159266517717E+01 + vrhob = -0.159266517717E+01 + vsigmaaa = -0.421988604932E-03 + vsigmaab = 0.751922016686E-04 + vsigmabb = -0.421988604932E-03 + + v2rhoa2 = -0.287027792883E+00 + v2rhoab = -0.153681048228E-01 + v2rhob2 = -0.287027792883E+00 + + v2rhoasigmaaa = 0.273462094370E-03 + v2rhoasigmaab = -0.389687448457E-04 + v2rhoasigmabb = 0.108792208968E-03 + v2rhobsigmaaa = 0.108792208968E-03 + v2rhobsigmaab = -0.389687448457E-04 + v2rhobsigmabb = 0.273462094370E-03 + + v2sigmaaa2 = -0.248311168770E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.248311168770E-04 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.353317167215E+01 + vrhoa = -0.149437801875E+01 + vrhob = -0.149437801875E+01 + vsigmaaa = -0.101133587566E-02 + vsigmaab = 0.937291761387E-04 + vsigmabb = -0.101133587566E-02 + + v2rhoa2 = -0.370527977942E+00 + v2rhoab = -0.270792723659E-01 + v2rhob2 = -0.370527977942E+00 + + v2rhoasigmaaa = 0.113824537120E-02 + v2rhoasigmaab = -0.549593870329E-04 + v2rhoasigmabb = 0.148957427973E-03 + v2rhobsigmaaa = 0.148957427973E-03 + v2rhobsigmaab = -0.549593870329E-04 + v2rhobsigmabb = 0.113824537120E-02 + + v2sigmaaa2 = -0.638874542644E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.638874542644E-05 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.892778843038E-01 + vrhoa = -0.559742833843E+00 + vrhob = -0.559742833843E+00 + vsigmaaa = -0.485966591860E-01 + vsigmaab = 0.117226935035E-01 + vsigmabb = -0.485966591860E-01 + + v2rhoa2 = -0.289221220665E+01 + v2rhoab = -0.589148566953E+00 + v2rhob2 = -0.289221220665E+01 + + v2rhoasigmaaa = 0.543812216100E+00 + v2rhoasigmaab = -0.108132011753E+00 + v2rhoasigmabb = 0.144351074329E+00 + v2rhobsigmaaa = 0.144351074329E+00 + v2rhobsigmaab = -0.108132011753E+00 + v2rhobsigmabb = 0.543812216100E+00 + + v2sigmaaa2 = 0.100982248283E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.100982248283E-01 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.422906921230E+05 + vrhoa = -0.156380064438E+02 + vrhob = -0.156380064438E+02 + vsigmaaa = -0.415054723635E-07 + vsigmaab = 0.348884492157E-09 + vsigmabb = -0.415054723635E-07 + + v2rhoa2 = -0.286795150729E-02 + v2rhoab = -0.137117509373E-04 + v2rhob2 = -0.286795150729E-02 + + v2rhoasigmaaa = 0.291541680912E-10 + v2rhoasigmaab = -0.167064055905E-12 + v2rhoasigmabb = 0.145502102912E-11 + v2rhobsigmaaa = 0.145502102912E-11 + v2rhobsigmaab = -0.167064055905E-12 + v2rhobsigmabb = 0.291541680912E-10 + + v2sigmaaa2 = -0.246921126931E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.246921126931E-16 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.422906928338E+05 + vrhoa = -0.156380061820E+02 + vrhob = -0.156380061820E+02 + vsigmaaa = -0.415056847009E-07 + vsigmaab = 0.348884492157E-09 + vsigmabb = -0.415056847009E-07 + + v2rhoa2 = -0.286795182240E-02 + v2rhoab = -0.137117737851E-04 + v2rhob2 = -0.286795182240E-02 + + v2rhoasigmaaa = 0.291546399502E-10 + v2rhoasigmaab = -0.167064055905E-12 + v2rhoasigmabb = 0.145502102912E-11 + v2rhobsigmaaa = 0.145502102912E-11 + v2rhobsigmaab = -0.167064055905E-12 + v2rhobsigmabb = 0.291546399502E-10 + + v2sigmaaa2 = -0.246918248473E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.246918248473E-16 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.367475920699E+05 + vrhoa = -0.146846059748E+02 + vrhob = -0.146846059748E+02 + vsigmaaa = -0.979350136945E-07 + vsigmaab = 0.427467436867E-09 + vsigmabb = -0.979350136945E-07 + + v2rhoa2 = -0.373278569101E-02 + v2rhoab = -0.305283776962E-04 + v2rhob2 = -0.373278569101E-02 + + v2rhoasigmaaa = 0.115157780815E-09 + v2rhoasigmaab = -0.230496105280E-12 + v2rhoasigmabb = 0.198781546095E-11 + v2rhobsigmaaa = 0.198781546095E-11 + v2rhobsigmaab = -0.230496105280E-12 + v2rhobsigmabb = 0.115157780815E-09 + + v2sigmaaa2 = -0.579225104437E-17 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.579225104437E-17 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.348528201524E+00 + vrhoa = -0.859930474066E+00 + vrhob = -0.859930474066E+00 + vsigmaaa = -0.934695675412E-02 + vsigmaab = 0.194214246028E-02 + vsigmabb = -0.934695675412E-02 + + v2rhoa2 = -0.110428505896E+01 + v2rhoab = -0.127743487136E+00 + v2rhob2 = -0.110428505896E+01 + + v2rhoasigmaaa = 0.599463862758E-01 + v2rhoasigmaab = -0.631848376073E-02 + v2rhoasigmabb = 0.111212799458E-01 + v2rhobsigmaaa = 0.111212799458E-01 + v2rhobsigmaab = -0.631848376073E-02 + v2rhobsigmabb = 0.599463862758E-01 + + v2sigmaaa2 = -0.864803214755E-02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.864803214755E-02 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.382811686671E+07 + vrhoa = -0.481262400373E+02 + vrhob = -0.481262400373E+02 + vsigmaaa = -0.461896925511E-09 + vsigmaab = 0.109272959577E-11 + vsigmabb = -0.461896925511E-09 + + v2rhoa2 = -0.301720491838E-03 + v2rhoab = -0.463461278156E-06 + v2rhob2 = -0.301720491838E-03 + + v2rhoasigmaaa = 0.114215954616E-13 + v2rhoasigmaab = -0.174158796585E-16 + v2rhoasigmabb = 0.182313623701E-15 + v2rhobsigmaaa = 0.182313623701E-15 + v2rhobsigmaab = -0.174158796585E-16 + v2rhobsigmabb = 0.114215954616E-13 + + v2sigmaaa2 = -0.328507119299E-22 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.328507119299E-22 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.331307943410E+07 + vrhoa = -0.451993427721E+02 + vrhob = -0.451993427721E+02 + vsigmaaa = -0.107599496047E-08 + vsigmaab = 0.133870527170E-11 + vsigmabb = -0.107599496047E-08 + + v2rhoa2 = -0.391209053170E-03 + v2rhoab = -0.103762485730E-05 + v2rhob2 = -0.391209053170E-03 + + v2rhoasigmaaa = 0.436971261297E-13 + v2rhoasigmaab = -0.240718018876E-16 + v2rhoasigmabb = 0.250991760809E-15 + v2rhobsigmaaa = 0.250991760809E-15 + v2rhobsigmaab = -0.240718018876E-16 + v2rhobsigmabb = 0.436971261297E-13 + + v2sigmaaa2 = -0.817172852791E-23 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.817172852791E-23 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.172353461024E+00 + vrhoa = -0.700377641164E+00 + vrhob = -0.700377641164E+00 + vsigmaaa = -0.230222675710E-01 + vsigmaab = 0.488320477001E-02 + vsigmabb = -0.230222675710E-01 + + v2rhoa2 = -0.185122501238E+01 + v2rhoab = -0.270635676763E+00 + v2rhob2 = -0.185122501238E+01 + + v2rhoasigmaaa = 0.218187041468E+00 + v2rhoasigmaab = -0.270174234880E-01 + v2rhoasigmabb = 0.413453714048E-01 + v2rhobsigmaaa = 0.413453714048E-01 + v2rhobsigmaab = -0.270174234880E-01 + v2rhobsigmabb = 0.218187041468E+00 + + v2sigmaaa2 = -0.215241600199E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.215241600199E-01 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.509789509065E+01 + vrhoa = -0.194205527263E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.174000500197E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.184957645012E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.172733309393E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.509849642856E+01 + vrhoa = -0.194181895323E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.179658285830E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.185123202549E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.160473971809E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.422130161843E+01 + vrhoa = -0.179997042841E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.428420386263E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.248484507489E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.463133116725E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.259869415408E-01 + vrhoa = -0.386326122627E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.976782468783E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.592299606819E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.246181810786E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.742795105176E+03 + vrhoa = -0.508080179859E+01 + vrhob = -0.504505045377E+01 + vsigmaaa = -0.618580218644E-05 + vsigmaab = 0.777038321513E-07 + vsigmabb = -0.628858953785E-05 + + v2rhoa2 = -0.367511279195E-01 + v2rhoab = -0.128206694872E-02 + v2rhob2 = -0.373182961309E-01 + + v2rhoasigmaaa = 0.106889667804E-06 + v2rhoasigmaab = -0.688806082380E-09 + v2rhoasigmabb = 0.504219052252E-08 + v2rhobsigmaaa = 0.514756229823E-08 + v2rhobsigmaab = -0.999062625764E-09 + v2rhobsigmabb = 0.108879202266E-06 + + v2sigmaaa2 = -0.746717609315E-13 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.683602585918E-13 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.279341680172E+03 + vrhoa = -0.390174587808E+01 + vrhob = -0.383612899924E+01 + vsigmaaa = -0.167150538358E-04 + vsigmaab = 0.294527623512E-06 + vsigmabb = -0.172507596526E-04 + + v2rhoa2 = -0.623773376902E-01 + v2rhoab = -0.306461944353E-02 + v2rhob2 = -0.643584502190E-01 + + v2rhoasigmaaa = 0.560662020455E-06 + v2rhoasigmaab = -0.447946015011E-08 + v2rhoasigmabb = 0.353575395008E-07 + v2rhobsigmaaa = 0.369533180221E-07 + v2rhobsigmaab = -0.916787520029E-08 + v2rhobsigmabb = 0.575797207196E-06 + + v2sigmaaa2 = -0.519565624316E-12 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.193709734028E-12 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.125616775264E+00 + vrhoa = -0.640325787337E+00 + vrhob = -0.557610385659E+00 + vsigmaaa = -0.314863093145E-01 + vsigmaab = 0.907754936682E-02 + vsigmabb = -0.378683587142E-01 + + v2rhoa2 = -0.237190889915E+01 + v2rhoab = -0.378361338247E+00 + v2rhob2 = -0.224432066878E+01 + + v2rhoasigmaaa = 0.296109132807E+00 + v2rhoasigmaab = -0.553761611064E-02 + v2rhoasigmabb = 0.489515549190E-01 + v2rhobsigmaaa = 0.985953221757E-01 + v2rhobsigmaab = -0.145737591325E+00 + v2rhobsigmabb = 0.216777316134E+00 + + v2sigmaaa2 = -0.174222846542E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.372167633195E-01 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.456881403986E-01 + vrhoa = -0.572964866280E+00 + vrhob = -0.452835738619E+00 + vsigmaaa = -0.483242338374E-01 + vsigmaab = 0.501931062266E-01 + vsigmabb = -0.172110361467E+00 + + v2rhoa2 = -0.224077703855E+01 + v2rhoab = -0.612320925253E+00 + v2rhob2 = -0.509704880332E+01 + + v2rhoasigmaaa = 0.951884282957E+00 + v2rhoasigmaab = -0.638856483123E-01 + v2rhoasigmabb = -0.212695038602E+00 + v2rhobsigmaaa = 0.458964850418E+00 + v2rhobsigmaab = -0.218291333478E+01 + v2rhobsigmabb = 0.904083942009E+01 + + v2sigmaaa2 = -0.242594653825E+01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.390666968502E+01 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.357339050138E+03 + vrhoa = -0.476259863035E+01 + vrhob = -0.473067001703E+01 + vsigmaaa = -0.737578865612E-05 + vsigmaab = 0.188237222341E-06 + vsigmabb = -0.763276970673E-05 + + v2rhoa2 = -0.323103007023E-01 + v2rhoab = -0.637819802370E-03 + v2rhob2 = -0.328255645368E-01 + + v2rhoasigmaaa = 0.267348569870E-06 + v2rhoasigmaab = -0.243773176564E-08 + v2rhoasigmabb = 0.184494645978E-07 + v2rhobsigmaaa = 0.190919197139E-07 + v2rhobsigmaab = -0.432672974638E-08 + v2rhobsigmabb = 0.284411818013E-06 + + v2sigmaaa2 = -0.155510273836E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.163245603199E-10 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.270065576063E+03 + vrhoa = -0.440741630824E+01 + vrhob = -0.440789785393E+01 + vsigmaaa = -0.111093800094E-04 + vsigmaab = 0.274098306632E-06 + vsigmabb = -0.110818542163E-04 + + v2rhoa2 = -0.388171303377E-01 + v2rhoab = -0.879203210839E-03 + v2rhob2 = -0.387805060657E-01 + + v2rhoasigmaaa = 0.514986610988E-06 + v2rhoasigmaab = -0.608595614103E-08 + v2rhoasigmabb = 0.327469830023E-07 + v2rhobsigmaaa = 0.327469830023E-07 + v2rhobsigmaab = -0.608595614103E-08 + v2rhobsigmabb = 0.513595886417E-06 + + v2sigmaaa2 = -0.274223191684E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.276297104655E-10 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.118471717102E+00 + vrhoa = -0.632289165790E+00 + vrhob = -0.585894880541E+00 + vsigmaaa = -0.335690880477E-01 + vsigmaab = 0.857765665993E-02 + vsigmabb = -0.392719146208E-01 + + v2rhoa2 = -0.235408981991E+01 + v2rhoab = -0.424110827134E+00 + v2rhob2 = -0.259466598824E+01 + + v2rhoasigmaaa = 0.346381971285E+00 + v2rhoasigmaab = -0.241061046296E-01 + v2rhoasigmabb = 0.675603959137E-01 + v2rhobsigmaaa = 0.985472547672E-01 + v2rhobsigmaab = -0.110524882708E+00 + v2rhobsigmabb = 0.371294161194E+00 + + v2sigmaaa2 = -0.247288161573E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.147703698131E-01 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.272783089874E-01 + vrhoa = -0.483657533063E+00 + vrhob = -0.395025984018E+00 + vsigmaaa = -0.112455284895E+00 + vsigmaab = 0.697046280199E-01 + vsigmabb = -0.223993537394E+00 + + v2rhoa2 = -0.373020838410E+01 + v2rhoab = -0.735681304479E+00 + v2rhob2 = -0.629082330972E+01 + + v2rhoasigmaaa = 0.351728356071E+01 + v2rhoasigmaab = -0.677165871202E-01 + v2rhoasigmabb = -0.232630024762E-02 + v2rhobsigmaaa = 0.133221901489E+01 + v2rhobsigmaab = -0.393983770823E+01 + v2rhobsigmabb = 0.930378499478E+01 + + v2sigmaaa2 = -0.468154042500E+01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.574825339547E+01 diff --git a/libxc/testsuite/df_repo/gga_xc_hcth_120.data b/libxc/testsuite/df_repo/gga_xc_hcth_120.data new file mode 100644 index 000000000..753dbf1a1 --- /dev/null +++ b/libxc/testsuite/df_repo/gga_xc_hcth_120.data @@ -0,0 +1,600 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.426126956109E+01 + vrhoa = -0.166178483841E+01 + vrhob = -0.166178483841E+01 + vsigmaaa = 0.150613213141E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.150613213141E-02 + + v2rhoa2 = -0.310204756744E+00 + v2rhoab = -0.940432511128E-02 + v2rhob2 = -0.310204756744E+00 + + v2rhoasigmaaa = -0.963907895726E-03 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.233649192057E-03 + v2rhobsigmaaa = -0.233649192057E-03 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.963907895726E-03 + + v2sigmaaa2 = -0.236908843951E-03 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.478569072105E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.236908843951E-03 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.425663464193E+01 + vrhoa = -0.166333196873E+01 + vrhob = -0.166333196873E+01 + vsigmaaa = 0.126196278300E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.126196278300E-02 + + v2rhoa2 = -0.309456564131E+00 + v2rhoab = -0.846291626299E-02 + v2rhob2 = -0.309456564131E+00 + + v2rhoasigmaaa = -0.517849594147E-03 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.240938042393E-03 + v2rhobsigmaaa = -0.240938042393E-03 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.517849594147E-03 + + v2sigmaaa2 = -0.870617454726E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.469724317807E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.870617454726E-04 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.357190813258E+01 + vrhoa = -0.156690197272E+01 + vrhob = -0.156690197272E+01 + vsigmaaa = -0.132239344235E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.132239344235E-03 + + v2rhoa2 = -0.449045373243E+00 + v2rhoab = 0.213241857584E-01 + v2rhob2 = -0.449045373243E+00 + + v2rhoasigmaaa = 0.173621941019E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.458759891749E-03 + v2rhobsigmaaa = -0.458759891749E-03 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.173621941019E-02 + + v2sigmaaa2 = -0.211466221361E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.473005594009E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.211466221361E-04 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.897250553352E-01 + vrhoa = -0.556447041616E+00 + vrhob = -0.556447041616E+00 + vsigmaaa = -0.426704389429E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.426704389429E-01 + + v2rhoa2 = -0.465736583962E+01 + v2rhoab = 0.135541275032E+00 + v2rhob2 = -0.465736583962E+01 + + v2rhoasigmaaa = 0.120318163510E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.222889516862E+00 + v2rhobsigmaaa = -0.222889516862E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.120318163510E+01 + + v2sigmaaa2 = -0.241065969021E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.110771457230E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.241065969021E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.447503408588E+05 + vrhoa = -0.165545055220E+02 + vrhob = -0.165545055220E+02 + vsigmaaa = 0.129503489268E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.129503489268E-06 + + v2rhoa2 = -0.303947628557E-02 + v2rhoab = -0.143244165320E-04 + v2rhob2 = -0.303947628557E-02 + + v2rhoasigmaaa = -0.928068908086E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.347371390341E-11 + v2rhobsigmaaa = -0.347371390341E-11 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.928068908086E-10 + + v2sigmaaa2 = -0.473881930182E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.669713943538E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.473881930182E-16 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.447503386315E+05 + vrhoa = -0.165545063499E+02 + vrhob = -0.165545063499E+02 + vsigmaaa = 0.129503087522E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.129503087522E-06 + + v2rhoa2 = -0.303947527741E-02 + v2rhoab = -0.143243487769E-04 + v2rhob2 = -0.303947527741E-02 + + v2rhoasigmaaa = -0.928059547893E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.347371902206E-11 + v2rhobsigmaaa = -0.347371902206E-11 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.928059547893E-10 + + v2sigmaaa2 = -0.473866583959E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.669713400505E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.473866583959E-16 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.375418866358E+05 + vrhoa = -0.159434504855E+02 + vrhob = -0.159434504855E+02 + vsigmaaa = 0.528086242806E-07 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.528086242806E-07 + + v2rhoa2 = -0.379776296469E-02 + v2rhoab = 0.314112007173E-04 + v2rhob2 = -0.379776296469E-02 + + v2rhoasigmaaa = 0.796172632466E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.681208180622E-11 + v2rhobsigmaaa = -0.681208180622E-11 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.796172632466E-10 + + v2sigmaaa2 = -0.193055664534E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.692375389520E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.193055664534E-16 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.352012041857E+00 + vrhoa = -0.882745411656E+00 + vrhob = -0.882745411656E+00 + vsigmaaa = -0.384078165354E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.384078165354E-02 + + v2rhoa2 = -0.147282162954E+01 + v2rhoab = 0.764724202649E-01 + v2rhob2 = -0.147282162954E+01 + + v2rhoasigmaaa = 0.136580135032E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.400849895858E-01 + v2rhobsigmaaa = -0.400849895858E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.136580135032E+00 + + v2sigmaaa2 = -0.319164014974E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.843863285689E-02 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.319164014974E-01 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.405421897288E+07 + vrhoa = -0.509711364154E+02 + vrhob = -0.509711364154E+02 + vsigmaaa = 0.140823797252E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.140823797252E-08 + + v2rhoa2 = -0.319485007747E-03 + v2rhoab = -0.578368686265E-06 + v2rhob2 = -0.319485007747E-03 + + v2rhoasigmaaa = -0.349737835737E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.510739987256E-15 + v2rhobsigmaaa = -0.510739987256E-15 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.349737835737E-13 + + v2sigmaaa2 = -0.384178853205E-22 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.354504615292E-24 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.384178853205E-22 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.338838896734E+07 + vrhoa = -0.491820600781E+02 + vrhob = -0.491820600781E+02 + vsigmaaa = 0.699581092806E-09 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.699581092806E-09 + + v2rhoa2 = -0.387837312019E-03 + v2rhoab = 0.125265317400E-05 + v2rhob2 = -0.387837312019E-03 + + v2rhoasigmaaa = 0.240814826820E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.101139444126E-14 + v2rhobsigmaaa = -0.101139444126E-14 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.240814826820E-13 + + v2sigmaaa2 = -0.262669890509E-22 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.378666813879E-24 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.262669890509E-22 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.173151339802E+00 + vrhoa = -0.712150126394E+00 + vrhob = -0.712150126394E+00 + vsigmaaa = -0.164103012298E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.164103012298E-01 + + v2rhoa2 = -0.250068041682E+01 + v2rhoab = 0.301045711529E+00 + v2rhob2 = -0.250068041682E+01 + + v2rhoasigmaaa = 0.375369427712E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.147171632151E+00 + v2rhobsigmaaa = -0.147171632151E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.375369427712E+00 + + v2sigmaaa2 = -0.674234996383E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.448743929541E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.674234996383E-01 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.547132966537E+01 + vrhoa = -0.207948936753E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.800197255739E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.196482805406E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.115887007028E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.546866991710E+01 + vrhoa = -0.208051879368E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.766010288846E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.195817998441E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.867303316821E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.435787455477E+01 + vrhoa = -0.196517908241E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.182160675746E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.263988345335E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.186537409761E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.262467344760E-01 + vrhoa = -0.358687806576E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.110982852409E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.869578925994E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.243424657490E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.723747385517E+03 + vrhoa = -0.536197693040E+01 + vrhob = -0.530462077679E+01 + vsigmaaa = -0.337553695705E-05 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.360628860243E-05 + + v2rhoa2 = -0.555196959130E-01 + v2rhoab = 0.104561012330E-02 + v2rhob2 = -0.571059786468E-01 + + v2rhoasigmaaa = 0.216924927011E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.101847708443E-07 + v2rhobsigmaaa = -0.103192807398E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.224072009309E-06 + + v2sigmaaa2 = -0.101440475949E-11 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.657448076634E-13 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.101875651601E-11 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.270927867747E+03 + vrhoa = -0.404418901898E+01 + vrhob = -0.392657858626E+01 + vsigmaaa = -0.113059881099E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.127726913696E-04 + + v2rhoa2 = -0.100148983151E+00 + v2rhoab = 0.151394073909E-02 + v2rhob2 = -0.105868777740E+00 + + v2rhoasigmaaa = 0.122253664566E-05 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.524313068177E-07 + v2rhobsigmaaa = -0.550724559100E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.128132535724E-05 + + v2sigmaaa2 = -0.152116239088E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.108851306076E-11 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.146126907412E-10 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.127035726763E+00 + vrhoa = -0.676650708272E+00 + vrhob = -0.519658938923E+00 + vsigmaaa = -0.139252218808E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.412480855065E-01 + + v2rhoa2 = -0.312335597986E+01 + v2rhoab = -0.400810700887E+00 + v2rhob2 = -0.901746796853E+00 + + v2rhoasigmaaa = 0.551288660561E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.137662644184E-01 + v2rhobsigmaaa = -0.626629020315E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.375020296119E-01 + + v2sigmaaa2 = -0.142832128092E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.170792459778E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.679995197696E-01 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.472759178368E-01 + vrhoa = -0.613477003462E+00 + vrhob = -0.394871884745E+00 + vsigmaaa = 0.794544324953E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.315264772245E+00 + + v2rhoa2 = -0.256180818722E+01 + v2rhoab = 0.150216952973E+00 + v2rhob2 = -0.634084034742E+01 + + v2rhoasigmaaa = 0.123846001149E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.173169630779E+01 + v2rhobsigmaaa = -0.201502878911E+01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.817324252934E+01 + + v2sigmaaa2 = -0.180584724060E+02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.567892302537E+01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.291097543902E+02 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.371990034529E+03 + vrhoa = -0.507547232140E+01 + vrhob = -0.504195268396E+01 + vsigmaaa = 0.107348018415E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.106699712128E-04 + + v2rhoa2 = -0.332636053644E-01 + v2rhoab = -0.448911372907E-04 + v2rhob2 = -0.338721776951E-01 + + v2rhoasigmaaa = 0.484992557043E-08 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.479787747776E-07 + v2rhobsigmaaa = -0.473293473146E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.300002329430E-07 + + v2sigmaaa2 = -0.430129560606E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.255409086340E-11 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.464257625100E-10 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.279322337147E+03 + vrhoa = -0.471066613655E+01 + vrhob = -0.471106313561E+01 + vsigmaaa = 0.106608025918E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.107569590189E-04 + + v2rhoa2 = -0.406782667755E-01 + v2rhoab = 0.216313978120E-03 + v2rhob2 = -0.406183299053E-01 + + v2rhoasigmaaa = 0.311205395139E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.887407260867E-07 + v2rhobsigmaaa = -0.883544104569E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.305680754753E-06 + + v2sigmaaa2 = -0.900615893372E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.579473444563E-11 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.906618479122E-10 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.119156082214E+00 + vrhoa = -0.659443087533E+00 + vrhob = -0.560370112465E+00 + vsigmaaa = -0.186523701196E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.409692907690E-01 + + v2rhoa2 = -0.322859554260E+01 + v2rhoab = 0.176717595534E+00 + v2rhob2 = -0.397058371560E+01 + + v2rhoasigmaaa = 0.647232376791E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.127010643416E+00 + v2rhobsigmaaa = -0.198407926134E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.721378653207E+00 + + v2sigmaaa2 = -0.170646210670E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.600010972713E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.590682367509E-01 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.281104267181E-01 + vrhoa = -0.511841920566E+00 + vrhob = -0.368079155413E+00 + vsigmaaa = -0.116907802800E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.273021560284E+00 + + v2rhoa2 = -0.428547298124E+01 + v2rhoab = 0.412141289988E-02 + v2rhob2 = -0.277267473501E+01 + + v2rhoasigmaaa = 0.462108392831E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.158060389347E+01 + v2rhobsigmaaa = -0.354578033150E+01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.650166579519E+00 + + v2sigmaaa2 = -0.165323136101E+02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.870046499599E+01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.284287727521E+02 diff --git a/libxc/testsuite/df_repo/gga_xc_hcth_147.data b/libxc/testsuite/df_repo/gga_xc_hcth_147.data new file mode 100644 index 000000000..ad8822e11 --- /dev/null +++ b/libxc/testsuite/df_repo/gga_xc_hcth_147.data @@ -0,0 +1,600 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.426985188443E+01 + vrhoa = -0.166423359090E+01 + vrhob = -0.166423359090E+01 + vsigmaaa = 0.681943067190E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.681943067190E-03 + + v2rhoa2 = -0.309565281480E+00 + v2rhoab = -0.990899021381E-02 + v2rhob2 = -0.309565281480E+00 + + v2rhoasigmaaa = -0.192950180722E-03 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.236509024559E-03 + v2rhobsigmaaa = -0.236509024559E-03 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.192950180722E-03 + + v2sigmaaa2 = 0.404191899919E-03 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.535441686040E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.404191899919E-03 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.426659470137E+01 + vrhoa = -0.166596702878E+01 + vrhob = -0.166596702878E+01 + vsigmaaa = 0.117131159198E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.117131159198E-02 + + v2rhoa2 = -0.307193750110E+00 + v2rhoab = -0.895514759908E-02 + v2rhob2 = -0.307193750110E+00 + + v2rhoasigmaaa = -0.113718298139E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.244640965718E-03 + v2rhobsigmaaa = -0.244640965718E-03 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.113718298139E-02 + + v2sigmaaa2 = 0.181763806685E-03 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.524451176027E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.181763806685E-03 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.357433662091E+01 + vrhoa = -0.156824489566E+01 + vrhob = -0.156824489566E+01 + vsigmaaa = -0.114433160907E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.114433160907E-03 + + v2rhoa2 = -0.442676674028E+00 + v2rhoab = 0.205208131550E-01 + v2rhob2 = -0.442676674028E+00 + + v2rhoasigmaaa = 0.165722386865E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.463139996085E-03 + v2rhobsigmaaa = -0.463139996085E-03 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.165722386865E-02 + + v2sigmaaa2 = -0.202907559548E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.496362337495E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.202907559548E-04 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.897622654692E-01 + vrhoa = -0.558798735175E+00 + vrhob = -0.558798735175E+00 + vsigmaaa = -0.417750637662E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.417750637662E-01 + + v2rhoa2 = -0.465088188192E+01 + v2rhoab = -0.406662915152E-01 + v2rhob2 = -0.465088188192E+01 + + v2rhoasigmaaa = 0.120001097278E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.155554787738E+00 + v2rhobsigmaaa = -0.155554787738E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.120001097278E+01 + + v2sigmaaa2 = -0.246626548261E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.862095523344E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.246626548261E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.447206619199E+05 + vrhoa = -0.165415581785E+02 + vrhob = -0.165415581785E+02 + vsigmaaa = 0.123056197647E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.123056197647E-06 + + v2rhoa2 = -0.303513298353E-02 + v2rhoab = -0.150931089213E-04 + v2rhob2 = -0.303513298353E-02 + + v2rhoasigmaaa = -0.857427039445E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.351623166196E-11 + v2rhobsigmaaa = -0.351623166196E-11 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.857427039445E-10 + + v2sigmaaa2 = 0.428466584750E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.749302000468E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.428466584750E-16 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.447206598035E+05 + vrhoa = -0.165415589461E+02 + vrhob = -0.165415589461E+02 + vsigmaaa = 0.123056572541E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.123056572541E-06 + + v2rhoa2 = -0.303513207143E-02 + v2rhoab = -0.150930403369E-04 + v2rhob2 = -0.303513207143E-02 + + v2rhoasigmaaa = -0.857436092411E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.351623738889E-11 + v2rhobsigmaaa = -0.351623738889E-11 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.857436092411E-10 + + v2sigmaaa2 = 0.428448645931E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.749301325135E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.428448645931E-16 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.374672029936E+05 + vrhoa = -0.159303168992E+02 + vrhob = -0.159303168992E+02 + vsigmaaa = 0.560254837797E-07 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.560254837797E-07 + + v2rhoa2 = -0.381001616383E-02 + v2rhoab = 0.305364593554E-04 + v2rhob2 = -0.381001616383E-02 + + v2rhoasigmaaa = 0.824271652892E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.692224695458E-11 + v2rhobsigmaaa = -0.692224695458E-11 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.824271652892E-10 + + v2sigmaaa2 = -0.202063912900E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.733089411926E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.202063912900E-16 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.352776876359E+00 + vrhoa = -0.883967939670E+00 + vrhob = -0.883967939670E+00 + vsigmaaa = -0.386986574925E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.386986574925E-02 + + v2rhoa2 = -0.145092926073E+01 + v2rhoab = 0.736712557814E-01 + v2rhob2 = -0.145092926073E+01 + + v2rhoasigmaaa = 0.130686805928E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.407321390204E-01 + v2rhobsigmaaa = -0.407321390204E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.130686805928E+00 + + v2sigmaaa2 = -0.299742168941E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.895404113925E-02 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.299742168941E-01 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.405007065773E+07 + vrhoa = -0.509164371083E+02 + vrhob = -0.509164371083E+02 + vsigmaaa = 0.143815790509E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.143815790509E-08 + + v2rhoa2 = -0.319059220792E-03 + v2rhoab = -0.609405734684E-06 + v2rhob2 = -0.319059220792E-03 + + v2rhoasigmaaa = -0.353694174693E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.516991371345E-15 + v2rhobsigmaaa = -0.516991371345E-15 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.353694174693E-13 + + v2sigmaaa2 = 0.838662093338E-23 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.396633547719E-24 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.838662093338E-23 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.338051225926E+07 + vrhoa = -0.491348160305E+02 + vrhob = -0.491348160305E+02 + vsigmaaa = 0.740213793805E-09 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.740213793805E-09 + + v2rhoa2 = -0.389665061547E-03 + v2rhoab = 0.122092381953E-05 + v2rhob2 = -0.389665061547E-03 + + v2rhoasigmaaa = 0.254524796099E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.102959686541E-14 + v2rhobsigmaaa = -0.102959686541E-14 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.254524796099E-13 + + v2sigmaaa2 = -0.278046909330E-22 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.401984490719E-24 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.278046909330E-22 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.173477635530E+00 + vrhoa = -0.716093584256E+00 + vrhob = -0.716093584256E+00 + vsigmaaa = -0.153408808412E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.153408808412E-01 + + v2rhoa2 = -0.243634098323E+01 + v2rhoab = 0.266691868158E+00 + v2rhob2 = -0.243634098323E+01 + + v2rhoasigmaaa = 0.357050369445E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.139478997832E+00 + v2rhobsigmaaa = -0.139478997832E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.357050369445E+00 + + v2sigmaaa2 = -0.663961333825E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.437178350932E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.663961333825E-01 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.547546079316E+01 + vrhoa = -0.208034265814E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.541574804517E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.196330645344E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.186426805698E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.547351908945E+01 + vrhoa = -0.208115640299E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.598512539411E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.195703492481E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.149505723310E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.435607936411E+01 + vrhoa = -0.196324889198E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.179856783265E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.263777784892E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.185291760035E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.262810695952E-01 + vrhoa = -0.364318608921E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.108553500954E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.836828112816E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.195227739675E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.722353875313E+03 + vrhoa = -0.535263336758E+01 + vrhob = -0.529582934030E+01 + vsigmaaa = -0.335611166053E-05 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.358431030187E-05 + + v2rhoa2 = -0.552705092548E-01 + v2rhoab = 0.782606445209E-03 + v2rhob2 = -0.567755205917E-01 + + v2rhoasigmaaa = 0.216036856244E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.876157116603E-08 + v2rhobsigmaaa = -0.888680967699E-08 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.222702608392E-06 + + v2sigmaaa2 = -0.101341020914E-11 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.585449914125E-13 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.101519299255E-11 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.270439146850E+03 + vrhoa = -0.403843494040E+01 + vrhob = -0.392308921945E+01 + vsigmaaa = -0.112424734342E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.126732160833E-04 + + v2rhoa2 = -0.991005653762E-01 + v2rhoab = 0.838753225097E-03 + v2rhob2 = -0.104356951048E+00 + + v2rhoasigmaaa = 0.120616334561E-05 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.412917949989E-07 + v2rhobsigmaaa = -0.435864824249E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.125739101361E-05 + + v2sigmaaa2 = -0.149866639028E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.908247682192E-12 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.142905275274E-10 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.126982026444E+00 + vrhoa = -0.675618993021E+00 + vrhob = -0.520941200385E+00 + vsigmaaa = -0.143298104213E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.407483039234E-01 + + v2rhoa2 = -0.315382011741E+01 + v2rhoab = -0.487126012818E+00 + v2rhob2 = -0.154322015531E+01 + + v2rhoasigmaaa = 0.559702155957E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.298615556335E-01 + v2rhobsigmaaa = -0.254352625789E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.133235433131E+00 + + v2sigmaaa2 = -0.143533176927E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.106728606050E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.524215554152E-01 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.473942228003E-01 + vrhoa = -0.615891803533E+00 + vrhob = -0.403477137965E+00 + vsigmaaa = 0.905499154816E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.292651679926E+00 + + v2rhoa2 = -0.268078486559E+01 + v2rhoab = 0.977652439250E-01 + v2rhob2 = -0.570830615321E+01 + + v2rhoasigmaaa = 0.209120333326E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.158897403440E+01 + v2rhobsigmaaa = -0.197539815416E+01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.642083376715E+01 + + v2sigmaaa2 = -0.257307335332E+02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.567699947872E+01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.299886117156E+02 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.371806348776E+03 + vrhoa = -0.507883923821E+01 + vrhob = -0.504506855586E+01 + vsigmaaa = 0.119318329592E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.118137057038E-04 + + v2rhoa2 = -0.335162659879E-01 + v2rhoab = -0.615455281396E-04 + v2rhob2 = -0.341545570838E-01 + + v2rhoasigmaaa = 0.547334189096E-07 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.492250189615E-07 + v2rhobsigmaaa = -0.486134709726E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.840879820782E-07 + + v2sigmaaa2 = -0.573397212444E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.280949920555E-11 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.609924926032E-10 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.279124163618E+03 + vrhoa = -0.471110297396E+01 + vrhob = -0.471156781006E+01 + vsigmaaa = 0.114051579361E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.115156407777E-04 + + v2rhoa2 = -0.410497447951E-01 + v2rhoab = 0.198714221056E-03 + v2rhob2 = -0.409935050433E-01 + + v2rhoasigmaaa = 0.376049675359E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.911535869735E-07 + v2rhobsigmaaa = -0.907328751422E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.371719204181E-06 + + v2sigmaaa2 = -0.103670968347E-09 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.631067747030E-11 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.104675179380E-09 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.119211698040E+00 + vrhoa = -0.660964700133E+00 + vrhob = -0.565728997509E+00 + vsigmaaa = -0.181455100706E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.394819355013E-01 + + v2rhoa2 = -0.322419793616E+01 + v2rhoab = 0.554017546086E-01 + v2rhob2 = -0.394342842129E+01 + + v2rhoasigmaaa = 0.647246195716E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.951267372079E-01 + v2rhobsigmaaa = -0.156272909911E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.715392858294E+00 + + v2sigmaaa2 = -0.174168397070E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.495480835703E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.646826302775E-01 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.281431091510E-01 + vrhoa = -0.512067460449E+00 + vrhob = -0.375933056590E+00 + vsigmaaa = -0.130855019890E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.254644665275E+00 + + v2rhoa2 = -0.417676161292E+01 + v2rhoab = -0.200036656726E+00 + v2rhob2 = -0.312524134522E+01 + + v2rhoasigmaaa = 0.420578822870E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.111178627705E+01 + v2rhobsigmaaa = -0.291838425602E+01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.153623274082E+01 + + v2sigmaaa2 = -0.148089363711E+02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.738915174006E+01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.233259401863E+02 diff --git a/libxc/testsuite/df_repo/gga_xc_hcth_407.data b/libxc/testsuite/df_repo/gga_xc_hcth_407.data new file mode 100644 index 000000000..e8177f893 --- /dev/null +++ b/libxc/testsuite/df_repo/gga_xc_hcth_407.data @@ -0,0 +1,600 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.432911132609E+01 + vrhoa = -0.168144444534E+01 + vrhob = -0.168144444534E+01 + vsigmaaa = 0.836834892002E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.836834892002E-02 + + v2rhoa2 = -0.308038826019E+00 + v2rhoab = -0.107626565758E-01 + v2rhob2 = -0.308038826019E+00 + + v2rhoasigmaaa = -0.739453940802E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.149152976105E-03 + v2rhobsigmaaa = -0.149152976105E-03 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.739453940802E-02 + + v2sigmaaa2 = -0.256505942948E-02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.357681866656E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.256505942948E-02 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.430661252967E+01 + vrhoa = -0.168781830257E+01 + vrhob = -0.168781830257E+01 + vsigmaaa = 0.522058635465E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.522058635465E-02 + + v2rhoa2 = -0.306037655275E+00 + v2rhoab = -0.101608410414E-01 + v2rhob2 = -0.306037655275E+00 + + v2rhoasigmaaa = -0.104460236673E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.154540111125E-03 + v2rhobsigmaaa = -0.154540111125E-03 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.104460236673E-02 + + v2sigmaaa2 = -0.130189701917E-02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.348202681315E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.130189701917E-02 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.357612103208E+01 + vrhoa = -0.157348861978E+01 + vrhob = -0.157348861978E+01 + vsigmaaa = -0.442824716765E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.442824716765E-04 + + v2rhoa2 = -0.445217533082E+00 + v2rhoab = 0.666859190153E-02 + v2rhob2 = -0.445217533082E+00 + + v2rhoasigmaaa = 0.174356919992E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.270283080766E-03 + v2rhobsigmaaa = -0.270283080766E-03 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.174356919992E-02 + + v2sigmaaa2 = -0.240472640403E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.274646850077E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.240472640403E-04 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.897105327570E-01 + vrhoa = -0.553677860844E+00 + vrhob = -0.553677860844E+00 + vsigmaaa = -0.432668188482E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.432668188482E-01 + + v2rhoa2 = -0.501556164669E+01 + v2rhoab = 0.413004581829E-01 + v2rhob2 = -0.501556164669E+01 + + v2rhoasigmaaa = 0.124150653529E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.111016135091E+00 + v2rhobsigmaaa = -0.111016135091E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.124150653529E+01 + + v2sigmaaa2 = -0.212213657533E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.401058930701E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.212213657533E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.445539177730E+05 + vrhoa = -0.164668663312E+02 + vrhob = -0.164668663312E+02 + vsigmaaa = 0.211566256298E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.211566256298E-06 + + v2rhoa2 = -0.301221020439E-02 + v2rhoab = -0.163933906983E-04 + v2rhob2 = -0.301221020439E-02 + + v2rhoasigmaaa = -0.172630445503E-09 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.221749008536E-11 + v2rhobsigmaaa = -0.221749008536E-11 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.172630445503E-09 + + v2sigmaaa2 = -0.375311119843E-15 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.500543280808E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.375311119843E-15 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.445539141343E+05 + vrhoa = -0.164668678347E+02 + vrhob = -0.164668678347E+02 + vsigmaaa = 0.211563033181E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.211563033181E-06 + + v2rhoa2 = -0.301220816158E-02 + v2rhoab = -0.163933474460E-04 + v2rhob2 = -0.301220816158E-02 + + v2rhoasigmaaa = -0.172622819803E-09 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.221749391102E-11 + v2rhobsigmaaa = -0.221749391102E-11 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.172622819803E-09 + + v2sigmaaa2 = -0.375299950844E-15 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.500542696870E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.375299950844E-15 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.374630770863E+05 + vrhoa = -0.158249264901E+02 + vrhob = -0.158249264901E+02 + vsigmaaa = 0.393140680588E-07 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.393140680588E-07 + + v2rhoa2 = -0.366026987622E-02 + v2rhoab = 0.101150683646E-04 + v2rhob2 = -0.366026987622E-02 + + v2rhoasigmaaa = 0.632140896207E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.410357007669E-11 + v2rhobsigmaaa = -0.410357007669E-11 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.632140896207E-10 + + v2sigmaaa2 = -0.151265803666E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.416336685213E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.151265803666E-16 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.353250306229E+00 + vrhoa = -0.893551934047E+00 + vrhob = -0.893551934047E+00 + vsigmaaa = -0.869695078271E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.869695078271E-03 + + v2rhoa2 = -0.150272458520E+01 + v2rhoab = 0.179046903370E-01 + v2rhob2 = -0.150272458520E+01 + + v2rhoasigmaaa = 0.152383821432E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.242727021867E-01 + v2rhobsigmaaa = -0.242727021867E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.152383821432E+00 + + v2sigmaaa2 = -0.463809997487E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.511719902669E-02 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.463809997487E-01 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.402531078351E+07 + vrhoa = -0.505882975693E+02 + vrhob = -0.505882975693E+02 + vsigmaaa = 0.151263216278E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.151263216278E-08 + + v2rhoa2 = -0.316606646400E-03 + v2rhoab = -0.661906462068E-06 + v2rhob2 = -0.316606646400E-03 + + v2rhoasigmaaa = -0.405615028260E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.326037460137E-15 + v2rhobsigmaaa = -0.326037460137E-15 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.405615028260E-13 + + v2sigmaaa2 = -0.208741171926E-21 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.264956262044E-24 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.208741171926E-21 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.337909147033E+07 + vrhoa = -0.487284135877E+02 + vrhob = -0.487284135877E+02 + vsigmaaa = 0.506093187410E-09 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.506093187410E-09 + + v2rhoa2 = -0.373257908345E-03 + v2rhoab = 0.404299144387E-06 + v2rhob2 = -0.373257908345E-03 + + v2rhoasigmaaa = 0.174869711697E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.613163446900E-15 + v2rhobsigmaaa = -0.613163446900E-15 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.174869711697E-13 + + v2sigmaaa2 = -0.191055410311E-22 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.230050348616E-24 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.191055410311E-22 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.173252379143E+00 + vrhoa = -0.716621441253E+00 + vrhob = -0.716621441253E+00 + vsigmaaa = -0.149251531883E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.149251531883E-01 + + v2rhoa2 = -0.237302943452E+01 + v2rhoab = 0.943722038095E-01 + v2rhob2 = -0.237302943452E+01 + + v2rhoasigmaaa = 0.324893770889E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.715275846482E-01 + v2rhobsigmaaa = -0.715275846482E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.324893770889E+00 + + v2sigmaaa2 = -0.559383609901E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.197883864175E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.559383609901E-01 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.552760936356E+01 + vrhoa = -0.209404418015E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.291462553996E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.195638283478E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.121417105019E-03 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.551835620697E+01 + vrhoa = -0.209762920936E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.254099190460E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.193565724277E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.991903280894E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.436864398244E+01 + vrhoa = -0.196192637095E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.146894617974E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.267962619460E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.197405478244E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.259110912875E-01 + vrhoa = -0.393771825312E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.905956665480E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.898177485960E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.478275332387E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.721113319377E+03 + vrhoa = -0.546488887740E+01 + vrhob = -0.541607999288E+01 + vsigmaaa = -0.259552638494E-05 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.276730355819E-05 + + v2rhoa2 = -0.478261944820E-01 + v2rhoab = 0.279862210625E-03 + v2rhob2 = -0.492409744411E-01 + + v2rhoasigmaaa = 0.164339412901E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.423800677183E-08 + v2rhobsigmaaa = -0.427264701102E-08 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.170731767279E-06 + + v2sigmaaa2 = -0.755055751823E-12 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.229067509281E-13 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.764520553770E-12 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.269292660020E+03 + vrhoa = -0.415145662482E+01 + vrhob = -0.405017129488E+01 + vsigmaaa = -0.889316476121E-05 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.100374042376E-04 + + v2rhoa2 = -0.876594082715E-01 + v2rhoab = 0.383329815310E-03 + v2rhob2 = -0.937438974583E-01 + + v2rhoasigmaaa = 0.965357580533E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.222481484942E-07 + v2rhobsigmaaa = -0.229499934912E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.103533715687E-05 + + v2sigmaaa2 = -0.117912149004E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.362378724273E-12 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.117267004587E-10 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.127243845868E+00 + vrhoa = -0.673587057999E+00 + vrhob = -0.469361951076E+00 + vsigmaaa = -0.173571205268E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.474232650708E-01 + + v2rhoa2 = -0.291816445225E+01 + v2rhoab = -0.279157026409E-01 + v2rhob2 = -0.526604303839E+01 + + v2rhoasigmaaa = 0.457726413430E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.314163785079E-01 + v2rhobsigmaaa = -0.701794212013E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.667055244175E+00 + + v2sigmaaa2 = -0.876335426733E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.119113917791E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.101120206000E-02 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.474948484240E-01 + vrhoa = -0.623378712168E+00 + vrhob = -0.413907509018E+00 + vsigmaaa = 0.124123130444E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.244905584528E+00 + + v2rhoa2 = -0.269490703187E+01 + v2rhoab = -0.366351862605E-01 + v2rhob2 = -0.685112984272E+01 + + v2rhoasigmaaa = 0.208668034130E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.101218125496E+01 + v2rhobsigmaaa = -0.102130243578E+01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.974878742645E+01 + + v2sigmaaa2 = -0.309654405946E+02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.274247156923E+01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.110071494898E+02 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.371431000033E+03 + vrhoa = -0.506487953888E+01 + vrhob = -0.503155649470E+01 + vsigmaaa = 0.110297844121E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.109167771396E-04 + + v2rhoa2 = -0.332847049132E-01 + v2rhoab = -0.240293112937E-03 + v2rhob2 = -0.338484493276E-01 + + v2rhoasigmaaa = 0.732933634801E-07 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.309622934009E-07 + v2rhobsigmaaa = -0.305828900415E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.916921311486E-07 + + v2sigmaaa2 = -0.614148698681E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.178531650028E-11 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.633519542795E-10 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.278968530889E+03 + vrhoa = -0.469965704251E+01 + vrhob = -0.470006385899E+01 + vsigmaaa = 0.103988564379E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.105048974313E-04 + + v2rhoa2 = -0.404710438077E-01 + v2rhoab = -0.125335940099E-03 + v2rhob2 = -0.404153570710E-01 + + v2rhoasigmaaa = 0.352606970965E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.566688328990E-07 + v2rhobsigmaaa = -0.564092726600E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.347934072651E-06 + + v2sigmaaa2 = -0.101685402001E-09 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.389340358557E-11 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.102611728763E-09 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.119047653006E+00 + vrhoa = -0.655375713984E+00 + vrhob = -0.559484570116E+00 + vsigmaaa = -0.209368203431E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.397122681545E-01 + + v2rhoa2 = -0.309924667359E+01 + v2rhoab = 0.276325071797E-01 + v2rhob2 = -0.490407596001E+01 + + v2rhoasigmaaa = 0.563255866059E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.610147329796E-01 + v2rhobsigmaaa = -0.807264677538E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.901128256648E+00 + + v2sigmaaa2 = -0.115318954571E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.200603163508E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.931248762739E-01 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.281073304159E-01 + vrhoa = -0.509625446067E+00 + vrhob = -0.353591652092E+00 + vsigmaaa = -0.299361629577E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.291653961143E+00 + + v2rhoa2 = -0.477804898328E+01 + v2rhoab = -0.111037074892E+00 + v2rhob2 = -0.113928998428E+02 + + v2rhoasigmaaa = 0.634687606016E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.996710931783E+00 + v2rhobsigmaaa = -0.137020610521E+01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.182054726041E+02 + + v2sigmaaa2 = -0.204428482387E+02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.289662265916E+01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.387965366373E+01 diff --git a/libxc/testsuite/df_repo/gga_xc_hcth_93.data b/libxc/testsuite/df_repo/gga_xc_hcth_93.data new file mode 100644 index 000000000..739f629eb --- /dev/null +++ b/libxc/testsuite/df_repo/gga_xc_hcth_93.data @@ -0,0 +1,600 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.426183502856E+01 + vrhoa = -0.166232660647E+01 + vrhob = -0.166232660647E+01 + vsigmaaa = 0.112801359159E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.112801359159E-02 + + v2rhoa2 = -0.306600170285E+00 + v2rhoab = -0.133369199751E-01 + v2rhob2 = -0.306600170285E+00 + + v2rhoasigmaaa = -0.739529602307E-03 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.113047000726E-03 + v2rhobsigmaaa = -0.113047000726E-03 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.739529602307E-03 + + v2sigmaaa2 = -0.271603541107E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.225327168974E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.271603541107E-04 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.425802985156E+01 + vrhoa = -0.166376331486E+01 + vrhob = -0.166376331486E+01 + vsigmaaa = 0.111796673488E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.111796673488E-02 + + v2rhoa2 = -0.305092543558E+00 + v2rhoab = -0.128815389739E-01 + v2rhob2 = -0.305092543558E+00 + + v2rhoasigmaaa = -0.740607378614E-03 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.116485588479E-03 + v2rhobsigmaaa = -0.116485588479E-03 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.740607378614E-03 + + v2sigmaaa2 = 0.103229323196E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.221481985791E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.103229323196E-05 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.356705319001E+01 + vrhoa = -0.157380190683E+01 + vrhob = -0.157380190683E+01 + vsigmaaa = -0.596739702854E-05 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.596739702854E-05 + + v2rhoa2 = -0.427612659000E+00 + v2rhoab = 0.684755783987E-03 + v2rhob2 = -0.427612659000E+00 + + v2rhoasigmaaa = 0.148448513819E-02 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.225134022014E-03 + v2rhobsigmaaa = -0.225134022014E-03 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.148448513819E-02 + + v2sigmaaa2 = -0.206835676652E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.232918758649E-05 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.206835676652E-04 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.890495584473E-01 + vrhoa = -0.544642875548E+00 + vrhob = -0.544642875548E+00 + vsigmaaa = -0.457174363667E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.457174363667E-01 + + v2rhoa2 = -0.488490804700E+01 + v2rhoab = -0.228893913486E-01 + v2rhob2 = -0.488490804700E+01 + + v2rhoasigmaaa = 0.126318550023E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.132745497976E+00 + v2rhobsigmaaa = -0.132745497976E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.126318550023E+01 + + v2sigmaaa2 = -0.234864343728E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.675438346398E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.234864343728E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.448027736363E+05 + vrhoa = -0.165747411950E+02 + vrhob = -0.165747411950E+02 + vsigmaaa = 0.122656405696E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.122656405696E-06 + + v2rhoa2 = -0.303773196098E-02 + v2rhoab = -0.203144398726E-04 + v2rhob2 = -0.303773196098E-02 + + v2rhoasigmaaa = -0.886074410839E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.168069461188E-11 + v2rhobsigmaaa = -0.168069461188E-11 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.886074410839E-10 + + v2sigmaaa2 = -0.186479577969E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.315324904421E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.186479577969E-16 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.448027715268E+05 + vrhoa = -0.165747419714E+02 + vrhob = -0.165747419714E+02 + vsigmaaa = 0.122656248048E-06 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.122656248048E-06 + + v2rhoa2 = -0.303773099159E-02 + v2rhoab = -0.203144070905E-04 + v2rhob2 = -0.303773099159E-02 + + v2rhoasigmaaa = -0.886070879227E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.168069702192E-11 + v2rhobsigmaaa = -0.168069702192E-11 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.886070879227E-10 + + v2sigmaaa2 = -0.186475496558E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.315324668463E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.186475496558E-16 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.376027361257E+05 + vrhoa = -0.159530964843E+02 + vrhob = -0.159530964843E+02 + vsigmaaa = 0.499653496536E-07 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.499653496536E-07 + + v2rhoa2 = -0.380550483444E-02 + v2rhoab = 0.484146859610E-06 + v2rhob2 = -0.380550483444E-02 + + v2rhoasigmaaa = 0.824134553702E-10 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.332952675534E-11 + v2rhobsigmaaa = -0.332952675534E-11 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.824134553702E-10 + + v2sigmaaa2 = -0.196726960197E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.338798045620E-18 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.196726960197E-16 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.351221009652E+00 + vrhoa = -0.888121877052E+00 + vrhob = -0.888121877052E+00 + vsigmaaa = -0.147229756841E-02 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.147229756841E-02 + + v2rhoa2 = -0.134940814291E+01 + v2rhoab = -0.108123594480E-01 + v2rhob2 = -0.134940814291E+01 + + v2rhoasigmaaa = 0.102656027402E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.195734608747E-01 + v2rhobsigmaaa = -0.195734608747E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.102656027402E+00 + + v2sigmaaa2 = -0.280342735949E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.412301704699E-02 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.280342735949E-01 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.405960372963E+07 + vrhoa = -0.510399672925E+02 + vrhob = -0.510399672925E+02 + vsigmaaa = 0.137440710662E-08 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.137440710662E-08 + + v2rhoa2 = -0.319698379167E-03 + v2rhoab = -0.820224399619E-06 + v2rhob2 = -0.319698379167E-03 + + v2rhoasigmaaa = -0.342414050472E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.247112447506E-15 + v2rhobsigmaaa = -0.247112447506E-15 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.342414050472E-13 + + v2sigmaaa2 = -0.242876811647E-22 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.166913254564E-24 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.242876811647E-22 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.339496253738E+07 + vrhoa = -0.491931435255E+02 + vrhob = -0.491931435255E+02 + vsigmaaa = 0.648277989884E-09 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.648277989884E-09 + + v2rhoa2 = -0.391607160600E-03 + v2rhoab = 0.902620715289E-08 + v2rhob2 = -0.391607160600E-03 + + v2rhoasigmaaa = 0.266150650852E-13 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.493771595655E-15 + v2rhobsigmaaa = -0.493771595655E-15 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.266150650852E-13 + + v2sigmaaa2 = -0.270936859522E-22 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.184950665683E-24 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.270936859522E-22 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.171916422170E+00 + vrhoa = -0.713628199022E+00 + vrhob = -0.713628199022E+00 + vsigmaaa = -0.144169056592E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.144169056592E-01 + + v2rhoa2 = -0.251950313836E+01 + v2rhoab = 0.758251991343E-01 + v2rhob2 = -0.251950313836E+01 + + v2rhoasigmaaa = 0.389423518238E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.751679973516E-01 + v2rhobsigmaaa = -0.751679973516E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.389423518238E+00 + + v2sigmaaa2 = -0.840797973397E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.232970614926E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.840797973397E-01 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.543907597540E+01 + vrhoa = -0.206983403049E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.557115573848E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.196415920834E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.157974405718E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.543718939135E+01 + vrhoa = -0.207055597598E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.553036007636E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.195935090970E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.878476728920E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.434938858930E+01 + vrhoa = -0.195569726015E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.142246104866E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.260209510633E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.165108737393E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.260656445211E-01 + vrhoa = -0.365166873568E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.106513084771E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.819172365319E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = -0.173619601252E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.725379115965E+03 + vrhoa = -0.534614963159E+01 + vrhob = -0.529038256257E+01 + vsigmaaa = -0.358005117459E-05 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.380056446753E-05 + + v2rhoa2 = -0.547126219394E-01 + v2rhoab = 0.331851582522E-03 + v2rhob2 = -0.561612374075E-01 + + v2rhoasigmaaa = 0.211812533725E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.550352582102E-08 + v2rhobsigmaaa = -0.558043849973E-08 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.218122282394E-06 + + v2sigmaaa2 = -0.962162060193E-12 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.364084856597E-13 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.962755909353E-12 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.271499130108E+03 + vrhoa = -0.403050062341E+01 + vrhob = -0.391760261739E+01 + vsigmaaa = -0.117891187316E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.131606478805E-04 + + v2rhoa2 = -0.976555990047E-01 + v2rhoab = 0.410901913852E-03 + v2rhob2 = -0.102701021106E+00 + + v2rhoasigmaaa = 0.117376271770E-05 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.296010716633E-07 + v2rhobsigmaaa = -0.311641736390E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.122140816601E-05 + + v2sigmaaa2 = -0.139823022321E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.631643128415E-12 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.132804820251E-10 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.126306410966E+00 + vrhoa = -0.665248513940E+00 + vrhob = -0.494790254792E+00 + vsigmaaa = -0.169820789182E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.444715522815E-01 + + v2rhoa2 = -0.321934092349E+01 + v2rhoab = -0.306214337751E+00 + v2rhob2 = -0.235046602502E+01 + + v2rhoasigmaaa = 0.575272114659E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.619670865786E-02 + v2rhobsigmaaa = -0.465088582248E-01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.240484241604E+00 + + v2sigmaaa2 = -0.136114020029E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.120567968744E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.494006571666E-01 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.467550215963E-01 + vrhoa = -0.604812590905E+00 + vrhob = -0.413805622597E+00 + vsigmaaa = 0.578789203445E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.240453086688E+00 + + v2rhoa2 = -0.252163647108E+01 + v2rhoab = -0.124967183765E+00 + v2rhob2 = -0.741841255320E+01 + + v2rhoasigmaaa = 0.104875139561E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.850997001294E+00 + v2rhobsigmaaa = -0.101836891441E+01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.124868933343E+02 + + v2sigmaaa2 = -0.140939691804E+02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.289447742971E+01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.900853676292E+00 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.372353595742E+03 + vrhoa = -0.508055573091E+01 + vrhob = -0.504781046793E+01 + vsigmaaa = 0.107154101887E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.107131591854E-04 + + v2rhoa2 = -0.328807830078E-01 + v2rhoab = -0.411751824651E-03 + v2rhob2 = -0.334389244752E-01 + + v2rhoasigmaaa = -0.303373964272E-07 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.231718695007E-07 + v2rhobsigmaaa = -0.228533807090E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = -0.107933923937E-07 + + v2sigmaaa2 = -0.399282165365E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.121680895464E-11 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.430192218415E-10 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.279578389357E+03 + vrhoa = -0.471709650708E+01 + vrhob = -0.471736061868E+01 + vsigmaaa = 0.108895229339E-04 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.109752202727E-04 + + v2rhoa2 = -0.398525328883E-01 + v2rhoab = -0.370354586162E-03 + v2rhob2 = -0.398026080843E-01 + + v2rhoasigmaaa = 0.223838195745E-06 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.429325168784E-07 + v2rhobsigmaaa = -0.427471799530E-07 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.218692512984E-06 + + v2sigmaaa2 = -0.826593898471E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.278005388095E-11 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.831754765126E-10 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.118202281299E+00 + vrhoa = -0.649626721795E+00 + vrhob = -0.550880566949E+00 + vsigmaaa = -0.208103108865E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.422571437775E-01 + + v2rhoa2 = -0.335614626485E+01 + v2rhoab = 0.677450262331E-02 + v2rhob2 = -0.435762103327E+01 + + v2rhoasigmaaa = 0.687584936504E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.712070704012E-01 + v2rhobsigmaaa = -0.113628430335E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.807149241077E+00 + + v2sigmaaa2 = -0.173908645103E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.350767969911E-01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = -0.730972322203E-01 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.277807919403E-01 + vrhoa = -0.504997712086E+00 + vrhob = -0.359292808905E+00 + vsigmaaa = -0.217551104209E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = -0.279077046902E+00 + + v2rhoa2 = -0.421574010719E+01 + v2rhoab = -0.262905164821E+00 + v2rhob2 = -0.652587072204E+01 + + v2rhoasigmaaa = 0.429705676606E+01 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = -0.819589539779E+00 + v2rhobsigmaaa = -0.199692351190E+01 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.867796631002E+01 + + v2sigmaaa2 = -0.139733659282E+02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.498509436820E+01 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.118695103645E+02 diff --git a/libxc/testsuite/df_repo/hyb_gga_xc_b3lyp.data b/libxc/testsuite/df_repo/hyb_gga_xc_b3lyp.data new file mode 100644 index 000000000..282cffbcb --- /dev/null +++ b/libxc/testsuite/df_repo/hyb_gga_xc_b3lyp.data @@ -0,0 +1,600 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.323236848314E+01 + vrhoa = -0.125186680903E+01 + vrhob = -0.125186680903E+01 + vsigmaaa = -0.144159896521E-02 + vsigmaab = 0.455761547380E-04 + vsigmabb = -0.144159896521E-02 + + v2rhoa2 = -0.218336878948E+00 + v2rhoab = -0.165375839434E-01 + v2rhob2 = -0.218336878948E+00 + + v2rhoasigmaaa = 0.105592839796E-02 + v2rhoasigmaab = -0.236203506407E-04 + v2rhoasigmabb = 0.657036117021E-04 + v2rhobsigmaaa = 0.657036117021E-04 + v2rhobsigmaab = -0.236203506407E-04 + v2rhobsigmabb = 0.105592839796E-02 + + v2sigmaaa2 = 0.182480573750E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.182480573750E-04 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.323714327026E+01 + vrhoa = -0.125005562910E+01 + vrhob = -0.125005562910E+01 + vsigmaaa = -0.141357814083E-02 + vsigmaab = 0.455761547380E-04 + vsigmabb = -0.141357814083E-02 + + v2rhoa2 = -0.220535209854E+00 + v2rhoab = -0.167224803305E-01 + v2rhob2 = -0.220535209854E+00 + + v2rhoasigmaaa = 0.993868359460E-03 + v2rhoasigmaab = -0.236203506407E-04 + v2rhoasigmabb = 0.657036117021E-04 + v2rhobsigmaaa = 0.657036117021E-04 + v2rhobsigmaab = -0.236203506407E-04 + v2rhobsigmabb = 0.993868359460E-03 + + v2sigmaaa2 = 0.150310955024E-04 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.150310955024E-04 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.284301452788E+01 + vrhoa = -0.116897854637E+01 + vrhob = -0.116897854637E+01 + vsigmaaa = -0.127654157835E-02 + vsigmaab = 0.568120340362E-04 + vsigmabb = -0.127654157835E-02 + + v2rhoa2 = -0.264800968146E+00 + v2rhoab = -0.246962380202E-01 + v2rhob2 = -0.264800968146E+00 + + v2rhoasigmaaa = 0.605149740433E-03 + v2rhoasigmaab = -0.333125831681E-04 + v2rhoasigmabb = 0.899525589269E-04 + v2rhobsigmaaa = 0.899525589269E-04 + v2rhobsigmaab = -0.333125831681E-04 + v2rhobsigmabb = 0.605149740433E-03 + + v2sigmaaa2 = 0.667366853939E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.667366853939E-05 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.734765385895E-01 + vrhoa = -0.471179307798E+00 + vrhob = -0.471179307798E+00 + vsigmaaa = -0.335031909041E-01 + vsigmaab = 0.709874878725E-02 + vsigmabb = -0.335031909041E-01 + + v2rhoa2 = -0.119087356581E+01 + v2rhoab = -0.461994975007E+00 + v2rhob2 = -0.119087356581E+01 + + v2rhoasigmaaa = -0.123500815668E-01 + v2rhoasigmaab = -0.654451937611E-01 + v2rhoasigmabb = 0.868364651756E-01 + v2rhobsigmaaa = 0.868364651756E-01 + v2rhobsigmaab = -0.654451937611E-01 + v2rhobsigmabb = -0.123500815668E-01 + + v2sigmaaa2 = 0.159379207669E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.159379207669E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.329091638490E+05 + vrhoa = -0.121623185279E+02 + vrhob = -0.121623185279E+02 + vsigmaaa = -0.137670025981E-06 + vsigmaab = 0.211226609041E-09 + vsigmabb = -0.137670025981E-06 + + v2rhoa2 = -0.221830902630E-02 + v2rhoab = -0.188590666589E-04 + v2rhob2 = -0.221830902630E-02 + + v2rhoasigmaaa = 0.101015443866E-09 + v2rhoasigmaab = -0.101154717316E-12 + v2rhoasigmabb = 0.880291835026E-12 + v2rhobsigmaaa = 0.880291835026E-12 + v2rhobsigmaab = -0.101154717316E-12 + v2rhobsigmabb = 0.101015443866E-09 + + v2sigmaaa2 = 0.145185185089E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.145185185089E-16 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.329091662150E+05 + vrhoa = -0.121623176525E+02 + vrhob = -0.121623176525E+02 + vsigmaaa = -0.137669901131E-06 + vsigmaab = 0.211226609041E-09 + vsigmabb = -0.137669901131E-06 + + v2rhoa2 = -0.221831014637E-02 + v2rhoab = -0.188590804811E-04 + v2rhob2 = -0.221831014637E-02 + + v2rhoasigmaaa = 0.101015166421E-09 + v2rhoasigmaab = -0.101154717316E-12 + v2rhoasigmabb = 0.880291835026E-12 + v2rhobsigmaaa = 0.880291835026E-12 + v2rhobsigmaab = -0.101154717316E-12 + v2rhobsigmabb = 0.101015166421E-09 + + v2sigmaaa2 = 0.145183686163E-16 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.145183686163E-16 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.291662692953E+05 + vrhoa = -0.113556508147E+02 + vrhob = -0.113556508147E+02 + vsigmaaa = -0.125212508392E-06 + vsigmaab = 0.258807836033E-09 + vsigmabb = -0.125212508392E-06 + + v2rhoa2 = -0.274482776000E-02 + v2rhoab = -0.302896659912E-04 + v2rhob2 = -0.274482776000E-02 + + v2rhoasigmaaa = 0.681575421953E-10 + v2rhoasigmaab = -0.139564478099E-12 + v2rhoasigmabb = 0.120262598780E-11 + v2rhobsigmaaa = 0.120262598780E-11 + v2rhobsigmaab = -0.139564478099E-12 + v2rhobsigmabb = 0.681575421953E-10 + + v2sigmaaa2 = 0.565478173007E-17 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.565478173007E-17 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.281966570096E+00 + vrhoa = -0.675950257463E+00 + vrhob = -0.675950257463E+00 + vsigmaaa = -0.132396547866E-01 + vsigmaab = 0.117685000648E-02 + vsigmabb = -0.132396547866E-01 + + v2rhoa2 = -0.805530438829E+00 + v2rhoab = -0.118106298362E+00 + v2rhob2 = -0.805530438829E+00 + + v2rhoasigmaaa = 0.363141897451E-01 + v2rhoasigmaab = -0.382783053810E-02 + v2rhoasigmabb = 0.670327184932E-02 + v2rhobsigmaaa = 0.670327184932E-02 + v2rhobsigmaab = -0.382783053810E-02 + v2rhobsigmabb = 0.363141897451E-01 + + v2sigmaaa2 = 0.830532973290E-02 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.830532973290E-02 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.297394905871E+07 + vrhoa = -0.373790914295E+02 + vrhob = -0.373790914295E+02 + vsigmaaa = -0.151741774296E-08 + vsigmaab = 0.661349905989E-12 + vsigmabb = -0.151741774296E-08 + + v2rhoa2 = -0.233832366784E-03 + v2rhoab = -0.693519389161E-06 + v2rhob2 = -0.233832366784E-03 + + v2rhoasigmaaa = 0.380539524393E-13 + v2rhoasigmaab = -0.105409669788E-16 + v2rhoasigmabb = 0.110312423429E-15 + v2rhobsigmaaa = 0.110312423429E-15 + v2rhobsigmaab = -0.105409669788E-16 + v2rhobsigmabb = 0.380539524393E-13 + + v2sigmaaa2 = 0.193156282710E-22 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.193156282710E-22 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.262386652992E+07 + vrhoa = -0.348927955181E+02 + vrhob = -0.348927955181E+02 + vsigmaaa = -0.139622416354E-08 + vsigmaab = 0.810227461136E-12 + vsigmabb = -0.139622416354E-08 + + v2rhoa2 = -0.289681929857E-03 + v2rhoab = -0.109149292582E-05 + v2rhob2 = -0.289681929857E-03 + + v2rhoasigmaaa = 0.265777258573E-13 + v2rhoasigmaab = -0.145695984127E-16 + v2rhoasigmabb = 0.151867150707E-15 + v2rhobsigmaaa = 0.151867150707E-15 + v2rhobsigmaab = -0.145695984127E-16 + v2rhobsigmabb = 0.265777258573E-13 + + v2sigmaaa2 = 0.781950966986E-23 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.781950966986E-23 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.141317331691E+00 + vrhoa = -0.560497981293E+00 + vrhob = -0.560497981293E+00 + vsigmaaa = -0.221566363225E-01 + vsigmaab = 0.295820080262E-02 + vsigmabb = -0.221566363225E-01 + + v2rhoa2 = -0.110705643629E+01 + v2rhoab = -0.230182661300E+00 + v2rhob2 = -0.110705643629E+01 + + v2rhoasigmaaa = 0.561817966912E-01 + v2rhoasigmaab = -0.163609821297E-01 + v2rhoasigmabb = 0.248982600284E-01 + v2rhobsigmaaa = 0.248982600284E-01 + v2rhobsigmaab = -0.163609821297E-01 + v2rhobsigmabb = 0.561817966912E-01 + + v2sigmaaa2 = 0.393918647938E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.393918647938E-01 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.399892263115E+01 + vrhoa = -0.152022926953E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.569059565191E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.143793255671E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.101564081636E-05 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.400085169220E+01 + vrhoa = -0.151949867012E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.565718309854E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.144275565036E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.951896165997E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.337825554312E+01 + vrhoa = -0.140181476241E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.542857473158E-03 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.183150035577E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.454347701768E-06 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.208918715508E-01 + vrhoa = -0.356452444497E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = -0.563614622931E-01 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.248689706230E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.497289960388E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.597657791792E+03 + vrhoa = -0.410849174687E+01 + vrhob = -0.408944405306E+01 + vsigmaaa = -0.480994006130E-05 + vsigmaab = 0.470705833739E-07 + vsigmabb = -0.483282909871E-05 + + v2rhoa2 = -0.199799370665E-01 + v2rhoab = -0.975401299409E-03 + v2rhob2 = -0.200660427641E-01 + + v2rhoasigmaaa = 0.260989083811E-07 + v2rhoasigmaab = -0.417456492670E-09 + v2rhoasigmabb = 0.304958928738E-08 + v2rhobsigmaaa = 0.311332607385E-08 + v2rhobsigmaab = -0.605117741230E-09 + v2rhobsigmabb = 0.258390382546E-07 + + v2sigmaaa2 = 0.305802669194E-12 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.311732004758E-12 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.224706205597E+03 + vrhoa = -0.320409850337E+01 + vrhob = -0.317368254169E+01 + vsigmaaa = -0.121714301795E-04 + vsigmaab = 0.178441892970E-06 + vsigmabb = -0.122078926901E-04 + + v2rhoa2 = -0.317800393334E-01 + v2rhoab = -0.225886606202E-02 + v2rhob2 = -0.318134299631E-01 + + v2rhoasigmaaa = 0.112752322775E-06 + v2rhoasigmaab = -0.271686374867E-08 + v2rhoasigmabb = 0.213816335145E-07 + v2rhobsigmaaa = 0.223467723370E-07 + v2rhobsigmaab = -0.555234667672E-08 + v2rhobsigmabb = 0.106009545608E-06 + + v2sigmaaa2 = 0.504534758146E-11 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.517448857581E-11 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.102364834001E+00 + vrhoa = -0.520539483697E+00 + vrhob = -0.505870943988E+00 + vsigmaaa = -0.258581782652E-01 + vsigmaab = 0.549392678215E-02 + vsigmabb = -0.197777936291E-01 + + v2rhoa2 = -0.128917089285E+01 + v2rhoab = -0.313272349310E+00 + v2rhob2 = -0.341042522919E+00 + + v2rhoasigmaaa = 0.523813395958E-01 + v2rhoasigmaab = -0.350608937430E-02 + v2rhoasigmabb = 0.294447027718E-01 + v2rhobsigmaaa = 0.593594411251E-01 + v2rhobsigmaab = -0.879513086335E-01 + v2rhobsigmabb = -0.101203673067E+00 + + v2sigmaaa2 = 0.534218945785E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.530748327798E-01 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.370908948340E-01 + vrhoa = -0.451012905270E+00 + vrhob = -0.373868193934E+00 + vsigmaaa = -0.833833556166E-01 + vsigmaab = 0.302842221212E-01 + vsigmabb = -0.144390664966E+00 + + v2rhoa2 = -0.176591577637E+01 + v2rhoab = -0.519622735771E+00 + v2rhob2 = -0.244487009873E+01 + + v2rhoasigmaaa = 0.104993242174E+01 + v2rhoasigmaab = -0.393482201769E-01 + v2rhoasigmabb = -0.128113035972E+00 + v2rhobsigmaaa = 0.276123718282E+00 + v2rhobsigmaab = -0.131376004203E+01 + v2rhobsigmabb = 0.176232793556E+01 + + v2sigmaaa2 = 0.175699045569E+01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.152026875550E+02 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.281521772558E+03 + vrhoa = -0.369507027847E+01 + vrhob = -0.367023184597E+01 + vsigmaaa = -0.145690716360E-04 + vsigmaab = 0.114039548301E-06 + vsigmabb = -0.148744723017E-04 + + v2rhoa2 = -0.253527345932E-01 + v2rhoab = -0.706072438256E-03 + v2rhob2 = -0.257381602738E-01 + + v2rhoasigmaaa = 0.311415552822E-06 + v2rhoasigmaab = -0.147803254770E-08 + v2rhoasigmabb = 0.111574735738E-07 + v2rhobsigmaaa = 0.115460511919E-07 + v2rhobsigmaab = -0.262052086299E-08 + v2rhobsigmabb = 0.322180557867E-06 + + v2sigmaaa2 = 0.110200710038E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.116700363054E-10 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.213622104931E+03 + vrhoa = -0.341660378816E+01 + vrhob = -0.341704385893E+01 + vsigmaaa = -0.186681440156E-04 + vsigmaab = 0.166064527957E-06 + vsigmabb = -0.186895846674E-04 + + v2rhoa2 = -0.300897507679E-01 + v2rhoab = -0.923280211534E-03 + v2rhob2 = -0.300737760767E-01 + + v2rhoasigmaaa = 0.459163999447E-06 + v2rhoasigmaab = -0.368764035839E-08 + v2rhoasigmabb = 0.198031853578E-07 + v2rhobsigmaaa = 0.198031853578E-07 + v2rhobsigmaab = -0.368764035839E-08 + v2rhobsigmabb = 0.460585502466E-06 + + v2sigmaaa2 = 0.213857448925E-10 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.214957808672E-10 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.973549787919E-01 + vrhoa = -0.513422548189E+00 + vrhob = -0.498404166041E+00 + vsigmaaa = -0.279927749358E-01 + vsigmaab = 0.519372784598E-02 + vsigmabb = -0.257633827920E-01 + + v2rhoa2 = -0.127015732306E+01 + v2rhoab = -0.343297185496E+00 + v2rhob2 = -0.957526903923E+00 + + v2rhoasigmaaa = 0.573950472502E-01 + v2rhoasigmaab = -0.147046387568E-01 + v2rhoasigmabb = 0.406497802386E-01 + v2rhobsigmaaa = 0.593213054050E-01 + v2rhobsigmaab = -0.667542710588E-01 + v2rhobsigmabb = -0.258248118537E-01 + + v2sigmaaa2 = 0.742126486309E-01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.832697038526E-01 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.224618905609E-01 + vrhoa = -0.383393770852E+00 + vrhob = -0.343323903582E+00 + vsigmaaa = -0.125297829477E+00 + vsigmaab = 0.420751297066E-01 + vsigmabb = -0.137996683570E+00 + + v2rhoa2 = -0.256288375723E+01 + v2rhoab = -0.665869909022E+00 + v2rhob2 = -0.188075111055E+01 + + v2rhoasigmaaa = 0.158911884007E+01 + v2rhoasigmaab = -0.437905384553E-01 + v2rhoasigmabb = -0.204783018941E-02 + v2rhobsigmaaa = 0.800379663970E+00 + v2rhobsigmaab = -0.237012133502E+01 + v2rhobsigmabb = -0.529596660601E+00 + + v2sigmaaa2 = 0.551118679586E+01 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.178736912276E+02 diff --git a/libxc/testsuite/df_repo/lda_c_pw.data b/libxc/testsuite/df_repo/lda_c_pw.data new file mode 100644 index 000000000..298271556 --- /dev/null +++ b/libxc/testsuite/df_repo/lda_c_pw.data @@ -0,0 +1,601 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.277344423214E+00 + vrhoa = -0.902549628505E-01 + vrhob = -0.902549628505E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.129726626281E-01 + v2rhoab = -0.182704041173E-01 + v2rhob2 = 0.129726626281E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.277344423214E+00 + vrhoa = -0.902549628505E-01 + vrhob = -0.902549628505E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.129726626281E-01 + v2rhoab = -0.182704041173E-01 + v2rhob2 = 0.129726626281E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.241462898291E+00 + vrhoa = -0.891299404380E-01 + vrhob = -0.891299404380E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.145059415592E-01 + v2rhoab = -0.204863569452E-01 + v2rhob2 = 0.145059415592E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.101113671262E-01 + vrhoa = -0.650048339988E-01 + vrhob = -0.650048339988E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.175751480118E+00 + v2rhoab = -0.266529931758E+00 + v2rhob2 = 0.175751480118E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.531561314386E+03 + vrhoa = -0.157671673203E+00 + vrhob = -0.157671673203E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.222159132351E-04 + v2rhoab = -0.278289909979E-04 + v2rhob2 = 0.222159132351E-04 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.531561314386E+03 + vrhoa = -0.157671673203E+00 + vrhob = -0.157671673203E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.222159132351E-04 + v2rhoab = -0.278289909979E-04 + v2rhob2 = 0.222159132351E-04 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.468725918030E+03 + vrhoa = -0.156482120947E+00 + vrhob = -0.156482120947E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.247928300968E-04 + v2rhoab = -0.311024951454E-04 + v2rhob2 = 0.247928300968E-04 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.342588451589E-01 + vrhoa = -0.738873790706E-01 + vrhob = -0.738873790706E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.683852603450E-01 + v2rhoab = -0.100702257929E+00 + v2rhob2 = 0.683852603450E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.192841201155E+05 + vrhoa = -0.192145304184E+00 + vrhob = -0.192145304184E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.930082885891E-06 + v2rhoab = -0.112363509037E-05 + v2rhob2 = 0.930082885891E-06 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.169856224473E+05 + vrhoa = -0.190913041999E+00 + vrhob = -0.190913041999E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.104172392988E-05 + v2rhoab = -0.125991007708E-05 + v2rhob2 = 0.104172392988E-05 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.184621198143E-01 + vrhoa = -0.693213765453E-01 + vrhob = -0.693213765453E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.110605987361E+00 + v2rhoab = -0.165258291769E+00 + v2rhob2 = 0.110605987361E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.149928973101E+00 + vrhoa = -0.472554998259E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.130588545114E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.149928973101E+00 + vrhoa = -0.472554998259E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.130588545114E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.126472591534E+00 + vrhoa = -0.465524916146E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.151678898556E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.152273975281E-02 + vrhoa = -0.298637012243E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.663743228871E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.191023440920E+02 + vrhoa = -0.126372499013E+00 + vrhob = -0.127271129487E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.384120963008E-03 + v2rhoab = -0.509412484677E-03 + v2rhob2 = 0.394340080438E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.847142825874E+01 + vrhoa = -0.118619938062E+00 + vrhob = -0.120418335387E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.752030427237E-03 + v2rhoab = -0.102491320671E-02 + v2rhob2 = 0.795162900251E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.132375738405E-01 + vrhoa = -0.611512086125E-01 + vrhob = -0.736712016385E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.986052917391E-01 + v2rhoab = -0.213038819480E+00 + v2rhob2 = 0.198254114292E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.549158518524E-02 + vrhoa = -0.477671629140E-01 + vrhob = -0.812619026651E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.871540234631E-01 + v2rhoab = -0.417984495935E+00 + v2rhob2 = 0.718548334405E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.111287597560E+02 + vrhoa = -0.121243415280E+00 + vrhob = -0.122669154804E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.601411544714E-03 + v2rhoab = -0.811067153859E-03 + v2rhob2 = 0.628041069015E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.883097806026E+01 + vrhoa = -0.119884073877E+00 + vrhob = -0.119884073877E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.746837382094E-03 + v2rhoab = -0.989140543185E-03 + v2rhob2 = 0.746837382094E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.129760671683E-01 + vrhoa = -0.633067741771E-01 + vrhob = -0.705807768412E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.117614926995E+00 + v2rhoab = -0.217903575599E+00 + v2rhob2 = 0.176334524485E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.359308856987E-02 + vrhoa = -0.484278994334E-01 + vrhob = -0.709976526103E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.169554677091E+00 + v2rhoab = -0.581862691979E+00 + v2rhob2 = 0.746101923239E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + diff --git a/libxc/testsuite/df_repo/lda_c_pz.data b/libxc/testsuite/df_repo/lda_c_pz.data new file mode 100644 index 000000000..d5a384459 --- /dev/null +++ b/libxc/testsuite/df_repo/lda_c_pz.data @@ -0,0 +1,600 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.275576598637E+00 + vrhoa = -0.898549308454E-01 + vrhob = -0.898549308454E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.164699121751E-01 + v2rhoab = -0.219008166659E-01 + v2rhob2 = 0.164699121751E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.275576598637E+00 + vrhoa = -0.898549308454E-01 + vrhob = -0.898549308454E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.164699121751E-01 + v2rhoab = -0.219008166659E-01 + v2rhob2 = 0.164699121751E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.239860597689E+00 + vrhoa = -0.887018679444E-01 + vrhob = -0.887018679444E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.183759264066E-01 + v2rhoab = -0.245040566492E-01 + v2rhob2 = 0.183759264066E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.101115878931E-01 + vrhoa = -0.645883881441E-01 + vrhob = -0.645883881441E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.220271586641E+00 + v2rhoab = -0.302589888112E+00 + v2rhob2 = 0.220271586641E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.534484419511E+03 + vrhoa = -0.158618496504E+00 + vrhob = -0.158618496504E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.310826615168E-04 + v2rhoab = -0.367568997987E-04 + v2rhob2 = 0.310826615168E-04 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.534484419511E+03 + vrhoa = -0.158618496504E+00 + vrhob = -0.158618496504E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.310826615168E-04 + v2rhoab = -0.367568997987E-04 + v2rhob2 = 0.310826615168E-04 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.471272856619E+03 + vrhoa = -0.157415820108E+00 + vrhob = -0.157415820108E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.346518058416E-04 + v2rhoab = -0.410319530618E-04 + v2rhob2 = 0.346518058416E-04 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.340180801304E-01 + vrhoa = -0.731839837331E-01 + vrhob = -0.731839837331E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.844874748431E-01 + v2rhoab = -0.117027949768E+00 + v2rhob2 = 0.844874748431E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.194053922825E+05 + vrhoa = -0.193356581751E+00 + vrhob = -0.193356581751E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.133301546780E-05 + v2rhoab = -0.152755392377E-05 + v2rhob2 = 0.133301546780E-05 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.170923965495E+05 + vrhoa = -0.192117951697E+00 + vrhob = -0.192117951697E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.149198951158E-05 + v2rhoab = -0.171131903398E-05 + v2rhob2 = 0.149198951158E-05 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.183776320888E-01 + vrhoa = -0.686130203036E-01 + vrhob = -0.686130203036E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.136277830478E+00 + v2rhoab = -0.190627548224E+00 + v2rhob2 = 0.136277830478E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.150623736304E+00 + vrhoa = -0.475749572683E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.134925763779E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.150623736304E+00 + vrhoa = -0.475749572683E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.134925763779E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.127013319259E+00 + vrhoa = -0.468485924747E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.156717879356E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.153351792183E-02 + vrhoa = -0.300428464030E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.653711881171E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.191466615417E+02 + vrhoa = -0.126718515579E+00 + vrhob = -0.127893872437E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.519837169783E-03 + v2rhoab = -0.648951795770E-03 + v2rhob2 = 0.533005724246E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.847966726388E+01 + vrhoa = -0.118689256817E+00 + vrhob = -0.121016447321E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.100782705799E-02 + v2rhoab = -0.129204915717E-02 + v2rhob2 = 0.106274642401E-02 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.131923893912E-01 + vrhoa = -0.594644299138E-01 + vrhob = -0.742843103640E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.127234753062E+00 + v2rhoab = -0.241546731589E+00 + v2rhob2 = 0.244260283475E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.544482721650E-02 + vrhoa = -0.454638876967E-01 + vrhob = -0.841880179853E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.109439665854E+00 + v2rhoab = -0.444292481861E+00 + v2rhob2 = 0.783241629952E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.111449390609E+02 + vrhoa = -0.121416128339E+00 + vrhob = -0.123267881151E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.808656486686E-03 + v2rhoab = -0.102614314649E-02 + v2rhob2 = 0.842702808700E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.884035822245E+01 + vrhoa = -0.120224414500E+00 + vrhob = -0.120224414500E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.100004983178E-02 + v2rhoab = -0.124763782935E-02 + v2rhob2 = 0.100004983178E-02 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.129473179843E-01 + vrhoa = -0.620700119522E-01 + vrhob = -0.706816901297E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.150018424149E+00 + v2rhoab = -0.247369456267E+00 + v2rhob2 = 0.219063831018E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.358997585489E-02 + vrhoa = -0.468661877874E-01 + vrhob = -0.731782746282E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.218577885080E+00 + v2rhoab = -0.646538277526E+00 + v2rhob2 = 0.867717298846E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 diff --git a/libxc/testsuite/df_repo/lda_c_vwn.data b/libxc/testsuite/df_repo/lda_c_vwn.data new file mode 100644 index 000000000..d9bd0c8a0 --- /dev/null +++ b/libxc/testsuite/df_repo/lda_c_vwn.data @@ -0,0 +1,600 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.278978177367E+00 + vrhoa = -0.907896301530E-01 + vrhob = -0.907896301530E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.129443214985E-01 + v2rhoab = -0.182559901422E-01 + v2rhob2 = 0.129443214985E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.278978177367E+00 + vrhoa = -0.907896301530E-01 + vrhob = -0.907896301530E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.129443214985E-01 + v2rhoab = -0.182559901422E-01 + v2rhob2 = 0.129443214985E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.242883397986E+00 + vrhoa = -0.896613951966E-01 + vrhob = -0.896613951966E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.144649744464E-01 + v2rhoab = -0.204638346911E-01 + v2rhob2 = 0.144649744464E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.101483720780E-01 + vrhoa = -0.653289336535E-01 + vrhob = -0.653289336535E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.171179303519E+00 + v2rhoab = -0.263237442473E+00 + v2rhob2 = 0.171179303519E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.532741477023E+03 + vrhoa = -0.157944671704E+00 + vrhob = -0.157944671704E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.223669588268E-04 + v2rhoab = -0.279504750065E-04 + v2rhob2 = 0.223669588268E-04 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.532741477023E+03 + vrhoa = -0.157944671704E+00 + vrhob = -0.157944671704E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.223669588268E-04 + v2rhoab = -0.279504750065E-04 + v2rhob2 = 0.223669588268E-04 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.469795648279E+03 + vrhoa = -0.156761418492E+00 + vrhob = -0.156761418492E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.249624818738E-04 + v2rhoab = -0.312385564000E-04 + v2rhob2 = 0.249624818738E-04 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.344300981310E-01 + vrhoa = -0.743196778205E-01 + vrhob = -0.743196778205E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.673517043262E-01 + v2rhoab = -0.999958453856E-01 + v2rhob2 = 0.673517043262E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.193016440590E+05 + vrhoa = -0.192271893744E+00 + vrhob = -0.192271893744E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.934975367062E-06 + v2rhoab = -0.112791439004E-05 + v2rhob2 = 0.934975367062E-06 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.170016041806E+05 + vrhoa = -0.191043581788E+00 + vrhob = -0.191043581788E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.104726097228E-05 + v2rhoab = -0.126473945017E-05 + v2rhob2 = 0.104726097228E-05 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.185432270230E-01 + vrhoa = -0.697024933328E-01 + vrhob = -0.697024933328E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.108356325631E+00 + v2rhoab = -0.163679368941E+00 + v2rhob2 = 0.108356325631E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.149673920800E+00 + vrhoa = -0.471789714951E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.130468710291E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.149673920800E+00 + vrhoa = -0.471789714951E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.130468710291E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.126255646553E+00 + vrhoa = -0.464766057364E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.151540949651E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.151940115037E-02 + vrhoa = -0.297993118612E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.663179036789E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.191815088538E+02 + vrhoa = -0.126816376070E+00 + vrhob = -0.127719732599E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.386783435451E-03 + v2rhoab = -0.511451913589E-03 + v2rhob2 = 0.397050991054E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.851077910672E+01 + vrhoa = -0.119099058995E+00 + vrhob = -0.120906044904E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.756836181702E-03 + v2rhoab = -0.102861281830E-02 + v2rhob2 = 0.800136175083E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.132928938310E-01 + vrhoa = -0.615913447654E-01 + vrhob = -0.739125478228E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.963811005993E-01 + v2rhoab = -0.210790984367E+00 + v2rhob2 = 0.193655360428E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.551636081757E-02 + vrhoa = -0.482590171567E-01 + vrhob = -0.811494055217E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.864399166736E-01 + v2rhoab = -0.417632287561E+00 + v2rhob2 = 0.710228207528E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.111786110384E+02 + vrhoa = -0.121711427226E+00 + vrhob = -0.123144247973E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.605386382334E-03 + v2rhoab = -0.814117737252E-03 + v2rhob2 = 0.632128050135E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.887177858837E+01 + vrhoa = -0.120365709995E+00 + vrhob = -0.120365709995E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.751587360250E-03 + v2rhoab = -0.992735036010E-03 + v2rhob2 = 0.751587360250E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.130284832590E-01 + vrhoa = -0.637104594188E-01 + vrhob = -0.708674029459E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.114871866539E+00 + v2rhoab = -0.215499991137E+00 + v2rhob2 = 0.172160006882E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.360439923610E-02 + vrhoa = -0.488659901421E-01 + vrhob = -0.708954619404E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.164372114971E+00 + v2rhoab = -0.574640089589E+00 + v2rhob2 = 0.724506769540E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 diff --git a/libxc/testsuite/df_repo/lda_c_vwn_rpa.data b/libxc/testsuite/df_repo/lda_c_vwn_rpa.data new file mode 100644 index 000000000..8cd9b7f76 --- /dev/null +++ b/libxc/testsuite/df_repo/lda_c_vwn_rpa.data @@ -0,0 +1,600 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.349971804373E+00 + vrhoa = -0.112182056089E+00 + vrhob = -0.112182056089E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.125073604380E-01 + v2rhoab = -0.180852441120E-01 + v2rhob2 = 0.125073604380E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.349971804373E+00 + vrhoa = -0.112182056089E+00 + vrhob = -0.112182056089E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.125073604380E-01 + v2rhoab = -0.180852441120E-01 + v2rhob2 = 0.125073604380E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.305331202145E+00 + vrhoa = -0.110996751347E+00 + vrhob = -0.110996751347E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.139658271595E-01 + v2rhoab = -0.202709357125E-01 + v2rhob2 = 0.139658271595E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.135062242445E-01 + vrhoa = -0.851221079723E-01 + vrhob = -0.851221079723E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.161243063381E+00 + v2rhoab = -0.260529910537E+00 + v2rhob2 = 0.161243063381E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.616414180105E+03 + vrhoa = -0.181382595551E+00 + vrhob = -0.181382595551E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.221260868588E-04 + v2rhoab = -0.277997242116E-04 + v2rhob2 = 0.221260868588E-04 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.616414180105E+03 + vrhoa = -0.181382595551E+00 + vrhob = -0.181382595551E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.221260868588E-04 + v2rhoab = -0.277997242116E-04 + v2rhob2 = 0.221260868588E-04 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.544096954988E+03 + vrhoa = -0.180180028059E+00 + vrhob = -0.180180028059E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.246887796092E-04 + v2rhoab = -0.310684502489E-04 + v2rhob2 = 0.246887796092E-04 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.447303809292E-01 + vrhoa = -0.947616225987E-01 + vrhob = -0.947616225987E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.641645280793E-01 + v2rhoab = -0.989737282427E-01 + v2rhob2 = 0.641645280793E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.218176486145E+05 + vrhoa = -0.216110716113E+00 + vrhob = -0.216110716113E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.928781952796E-06 + v2rhoab = -0.112325680418E-05 + v2rhob2 = 0.928781952796E-06 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.192316008832E+05 + vrhoa = -0.214872492244E+00 + vrhob = -0.214872492244E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.104021134253E-05 + v2rhoab = -0.125946873167E-05 + v2rhob2 = 0.104021134253E-05 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.243778573127E-01 + vrhoa = -0.898249491466E-01 + vrhob = -0.898249491466E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.102674048027E+00 + v2rhoab = -0.161991045812E+00 + v2rhob2 = 0.102674048027E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.226572455226E+00 + vrhoa = -0.696300107524E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.141835441525E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.226572455226E+00 + vrhoa = -0.696300107524E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.141835441525E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.191943741044E+00 + vrhoa = -0.688654324023E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.165186470178E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.263502530841E-02 + vrhoa = -0.499022442746E-01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.795426744938E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.228426570385E+02 + vrhoa = -0.149597421494E+00 + vrhob = -0.150490334370E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.379966004438E-03 + v2rhoab = -0.507893349810E-03 + v2rhob2 = 0.390097953941E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.102211380123E+02 + vrhoa = -0.141671472141E+00 + vrhob = -0.143455382380E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.741686147163E-03 + v2rhoab = -0.102100217702E-02 + v2rhob2 = 0.784353256853E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.176275882873E-01 + vrhoa = -0.816985545468E-01 + vrhob = -0.936725006686E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.900615404426E-01 + v2rhoab = -0.208635792884E+00 + v2rhob2 = 0.184171240319E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.756937583935E-02 + vrhoa = -0.681479546460E-01 + vrhob = -0.999798510193E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.755043006977E-01 + v2rhoab = -0.411777663200E+00 + v2rhob2 = 0.674042059170E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.133861697298E+02 + vrhoa = -0.144355807714E+00 + vrhob = -0.145770933057E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.593780503248E-03 + v2rhoab = -0.808216427806E-03 + v2rhob2 = 0.620144399044E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.106498319979E+02 + vrhoa = -0.142938186954E+00 + vrhob = -0.142938186954E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.736748088158E-03 + v2rhoab = -0.985412092064E-03 + v2rhob2 = 0.736748088158E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.172614567022E-01 + vrhoa = -0.837402607886E-01 + vrhob = -0.906950168735E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.107869454021E+00 + v2rhoab = -0.213289389793E+00 + v2rhob2 = 0.163291946501E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.495307468553E-02 + vrhoa = -0.683765949187E-01 + vrhob = -0.896782469545E-01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = 0.146529818145E+00 + v2rhoab = -0.568495409612E+00 + v2rhob2 = 0.684785645919E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 diff --git a/libxc/testsuite/df_repo/lda_x.data b/libxc/testsuite/df_repo/lda_x.data new file mode 100644 index 000000000..7eca198dc --- /dev/null +++ b/libxc/testsuite/df_repo/lda_x.data @@ -0,0 +1,600 @@ +# Reference data from the Density functional repository +# http://www.cse.clrc.ac.uk/qcg/dft/ + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.81E-11 sigmaab= 0.81E-11 sigmabb= 0.81E-11 + zk = -0.377592720836E+01 + vrhoa = -0.148075576798E+01 + vrhob = -0.148075576798E+01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.290344268232E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.290344268232E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.17E+01 rhob= 0.17E+01 sigmaaa= 0.17E+01 sigmaab= 0.17E+01 sigmabb= 0.17E+01 + zk = -0.377592720836E+01 + vrhoa = -0.148075576798E+01 + vrhob = -0.148075576798E+01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.290344268232E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.290344268232E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.15E+01 rhob= 0.15E+01 sigmaaa= 0.36E+02 sigmaab= 0.36E+02 sigmabb= 0.36E+02 + zk = -0.319555819038E+01 + vrhoa = -0.142024808461E+01 + vrhob = -0.142024808461E+01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.315610685470E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.315610685470E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.88E-01 rhob= 0.88E-01 sigmaaa= 0.87E-01 sigmaab= 0.87E-01 sigmabb= 0.87E-01 + zk = -0.728453690414E-01 + vrhoa = -0.551858856374E+00 + vrhob = -0.551858856374E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.209037445596E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.209037445596E+01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.55E+00 sigmaab= 0.55E+00 sigmabb= 0.55E+00 + zk = -0.407494475320E+05 + vrhoa = -0.150923879748E+02 + vrhob = -0.150923879748E+02 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.279488666200E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.279488666200E-02 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.18E+04 rhob= 0.18E+04 sigmaaa= 0.86E+04 sigmaab= 0.86E+04 sigmabb= 0.86E+04 + zk = -0.407494475320E+05 + vrhoa = -0.150923879748E+02 + vrhob = -0.150923879748E+02 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.279488666200E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.279488666200E-02 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.16E+04 rhob= 0.16E+04 sigmaaa= 0.37E+10 sigmaab= 0.37E+10 sigmabb= 0.37E+10 + zk = -0.348271841145E+05 + vrhoa = -0.145113267144E+02 + vrhob = -0.145113267144E+02 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.302319306550E-02 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.302319306550E-02 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.26E+00 rhob= 0.26E+00 sigmaaa= 0.28E+00 sigmaab= 0.28E+00 sigmabb= 0.28E+00 + zk = -0.308832394647E+00 + vrhoa = -0.791877934993E+00 + vrhob = -0.791877934993E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.101522812179E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.101522812179E+01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.53E+05 rhob= 0.53E+05 sigmaaa= 0.96E+05 sigmaab= 0.96E+05 sigmabb= 0.96E+05 + zk = -0.370503980143E+07 + vrhoa = -0.466042742318E+02 + vrhob = -0.466042742318E+02 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.293108642967E-03 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.293108642967E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.47E+05 rhob= 0.47E+05 sigmaaa= 0.29E+14 sigmaab= 0.29E+14 sigmabb= 0.29E+14 + zk = -0.315661921284E+07 + vrhoa = -0.447747406077E+02 + vrhob = -0.447747406077E+02 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.317551351828E-03 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.317551351828E-03 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.15E+00 rhob= 0.15E+00 sigmaaa= 0.16E+00 sigmaab= 0.16E+00 sigmabb= 0.16E+00 + zk = -0.148324672136E+00 + vrhoa = -0.659220765051E+00 + vrhob = -0.659220765051E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.146493503345E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.146493503345E+01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.46E-10 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.494484233083E+01 + vrhoa = -0.188374945936E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.179404710416E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.35E+01 rhob= 0.00E+00 sigmaaa= 0.34E+01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.494484233083E+01 + vrhoa = -0.188374945936E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.179404710416E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.30E+01 rhob= 0.00E+00 sigmaaa= 0.20E+03 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.402615103023E+01 + vrhoa = -0.178940045788E+01 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.198822273098E+00 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.58E-01 rhob= 0.00E+00 sigmaaa= 0.47E-01 sigmaab= 0.00E+00 sigmabb= 0.00E+00 + zk = -0.208913119508E-01 + vrhoa = -0.480260044845E+00 + vrhob = 0.000000000000E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.276011520026E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = 0.000000000000E+00 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.82E+02 rhob= 0.81E+02 sigmaaa= 0.49E+07 sigmaab= 0.49E+07 sigmabb= 0.49E+07 + zk = -0.657615683804E+03 + vrhoa = -0.539020244480E+01 + vrhob = -0.536820137364E+01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.219113920520E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.220913636775E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.39E+02 rhob= 0.38E+02 sigmaaa= 0.81E+06 sigmaab= 0.82E+06 sigmabb= 0.82E+06 + zk = -0.241948147838E+03 + vrhoa = -0.420747936684E+01 + vrhob = -0.417120618800E+01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.359613621097E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.365895279649E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.13E+00 rhob= 0.95E-01 sigmaaa= 0.15E+00 sigmaab= 0.18E+00 sigmabb= 0.22E+00 + zk = -0.101616142698E+00 + vrhoa = -0.628513933519E+00 + vrhob = -0.566119777958E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.161157418851E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.198638518582E+01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.78E-01 rhob= 0.31E-01 sigmaaa= 0.41E-02 sigmaab= 0.38E-02 sigmabb= 0.36E-02 + zk = -0.400731073431E-01 + vrhoa = -0.530109182127E+00 + vrhob = -0.389751405963E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.226542385525E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.419087533293E+01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.50E+02 rhob= 0.49E+02 sigmaaa= 0.11E+06 sigmaab= 0.11E+06 sigmabb= 0.11E+06 + zk = -0.338253135027E+03 + vrhoa = -0.457078149734E+01 + vrhob = -0.454010418713E+01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.304718766489E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.308850624975E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.40E+02 rhob= 0.40E+02 sigmaaa= 0.99E+05 sigmaab= 0.98E+05 sigmabb= 0.98E+05 + zk = -0.254588260307E+03 + vrhoa = -0.424313767179E+01 + vrhob = -0.424313767179E+01 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.353594805982E-01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.353594805982E-01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.12E+00 rhob= 0.10E+00 sigmaaa= 0.12E+00 sigmaab= 0.13E+00 sigmabb= 0.14E+00 + zk = -0.982681500273E-01 + vrhoa = -0.611966348389E+00 + vrhob = -0.575882382297E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.169990652330E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.191960794099E+01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 + + rhoa= 0.48E-01 rhob= 0.25E-01 sigmaaa= 0.46E-02 sigmaab= 0.44E-02 sigmabb= 0.41E-02 + zk = -0.230346081831E-01 + vrhoa = -0.450900660715E+00 + vrhob = -0.362783167860E+00 + vsigmaaa = 0.000000000000E+00 + vsigmaab = 0.000000000000E+00 + vsigmabb = 0.000000000000E+00 + + v2rhoa2 = -0.313125458830E+01 + v2rhoab = 0.000000000000E+00 + v2rhob2 = -0.483710890480E+01 + + v2rhoasigmaaa = 0.000000000000E+00 + v2rhoasigmaab = 0.000000000000E+00 + v2rhoasigmabb = 0.000000000000E+00 + v2rhobsigmaaa = 0.000000000000E+00 + v2rhobsigmaab = 0.000000000000E+00 + v2rhobsigmabb = 0.000000000000E+00 + + v2sigmaaa2 = 0.000000000000E+00 + v2sigmaaaab = 0.000000000000E+00 + v2sigmaaabb = 0.000000000000E+00 + v2sigmaab2 = 0.000000000000E+00 + v2sigmaabbb = 0.000000000000E+00 + v2sigmabb2 = 0.000000000000E+00 diff --git a/libxc/testsuite/input/BrOH b/libxc/testsuite/input/BrOH new file mode 100644 index 000000000..89e9cfa93 --- /dev/null +++ b/libxc/testsuite/input/BrOH @@ -0,0 +1,91 @@ +90 + 9.6658608063855554e+03 9.6658608063855554e+03 7.1577283827077576e+11 7.1577283827077576e+11 7.1577283827077576e+11 -9.7009903695326671e+07 -9.7009903695326671e+07 9.8915460978334788e+06 9.8915460978334788e+06 + 9.6659311931826614e+03 9.6659311931826614e+03 7.1576824422897888e+11 7.1576824422897888e+11 7.1576824422897888e+11 -9.7011842898747653e+07 -9.7011842898747653e+07 9.8913993254544120e+06 9.8913993254544120e+06 + 9.6662970468709755e+03 9.6662970468709755e+03 7.1578472623049719e+11 7.1578472623049719e+11 7.1578472623049719e+11 -9.7020526277917609e+07 -9.7020526277917609e+07 9.8908576140609998e+06 9.8908576140609998e+06 + 9.6651434152040747e+03 9.6651434152040747e+03 7.1585919884965015e+11 7.1585919884965015e+11 7.1585919884965015e+11 -9.6988859076082855e+07 -9.6988859076082855e+07 9.8932312503201403e+06 9.8932312503201403e+06 + 9.6658974926453684e+03 9.6658974926453684e+03 7.1577010645911230e+11 7.1577010645911230e+11 7.1577010645911230e+11 -9.7010925799707815e+07 -9.7010925799707815e+07 9.8914681026772466e+06 9.8914681026772466e+06 + 9.6658974926453684e+03 9.6658974926453684e+03 7.1577010645911230e+11 7.1577010645911230e+11 7.1577010645911230e+11 -9.7010925799707815e+07 -9.7010925799707815e+07 9.8914681026772466e+06 9.8914681026772466e+06 + 4.1710569152961114e+01 4.1710569152961114e+01 4.8865216345087456e+05 4.8865216345087456e+05 4.8865216345087456e+05 6.1552642691308065e+03 6.1552642691308065e+03 3.3242672572752435e+03 3.3242672572752435e+03 + 4.1710831767166155e+01 4.1710831767166155e+01 4.8858004250468407e+05 4.8858004250468407e+05 4.8858004250468407e+05 6.1522482600506046e+03 6.1522482600506046e+03 3.3235356879671099e+03 3.3235356879671099e+03 + 4.1723202409221692e+01 4.1723202409221692e+01 4.8675950874266319e+05 4.8675950874266319e+05 4.8675950874266319e+05 6.0622773971125371e+03 6.0622773971125371e+03 3.3021807832066229e+03 3.3021807832066229e+03 + 4.1728413532845018e+01 4.1728413532845018e+01 4.9072843837001710e+05 4.9072843837001710e+05 4.9072843837001710e+05 6.0983606853539050e+03 6.0983606853539050e+03 3.3117599335036975e+03 3.3117599335036975e+03 + 4.1711237273600005e+01 4.1711237273600005e+01 4.8863172120625322e+05 4.8863172120625322e+05 4.8863172120625322e+05 6.1545275605454408e+03 6.1545275605454408e+03 3.3241432254559058e+03 3.3241432254559058e+03 + 4.1711237273600005e+01 4.1711237273600005e+01 4.8863172120625322e+05 4.8863172120625322e+05 4.8863172120625322e+05 6.1545275605454408e+03 6.1545275605454408e+03 3.3241432254559058e+03 3.3241432254559058e+03 + 2.9378362379928508e-01 2.9378362379928508e-01 1.6195421185107528e+00 1.6195421185107528e+00 1.6195421185107528e+00 6.6095642965065764e+00 6.6095642965065764e+00 1.8856971665121391e+00 1.8856971665121391e+00 + 2.9287984651360127e-01 2.9287984651360127e-01 1.6250844596740488e+00 1.6250844596740488e+00 1.6250844596740488e+00 6.6286734009411257e+00 6.6286734009411257e+00 1.8868177843151377e+00 1.8868177843151377e+00 + 2.7009780749125972e-01 2.7009780749125972e-01 1.7811458073862798e+00 1.7811458073862798e+00 1.7811458073862798e+00 7.1017382980458876e+00 7.1017382980458876e+00 1.9108226873096568e+00 1.9108226873096568e+00 + 2.7652758445160563e-01 2.7652758445160563e-01 1.8663767839731455e+00 1.8663767839731455e+00 1.8663767839731455e+00 6.7852784620444258e+00 6.7852784620444258e+00 1.8616801281000235e+00 1.8616801281000235e+00 + 2.9345377706681836e-01 2.9345377706681836e-01 1.6214815886910519e+00 1.6214815886910519e+00 1.6214815886910519e+00 6.6151475435842952e+00 6.6151475435842952e+00 1.8859135944159964e+00 1.8859135944159964e+00 + 2.9345377706681836e-01 2.9345377706681836e-01 1.6214815886910519e+00 1.6214815886910519e+00 1.6214815886910519e+00 6.6151475435842952e+00 6.6151475435842952e+00 1.8859135944159964e+00 1.8859135944159964e+00 + 6.0148524654617527e-03 6.0148524654617527e-03 1.4486830324853770e-04 1.4486830324853770e-04 1.4486830324853770e-04 1.4890698889581933e-02 1.4890698889581933e-02 3.4188220971414487e-03 3.4188220971414487e-03 + 6.2583303634490238e-03 6.2583303634490238e-03 1.5078186348416026e-04 1.5078186348416026e-04 1.5078186348416026e-04 1.4874155554639215e-02 1.4874155554639215e-02 3.4811572318960513e-03 3.4811572318960513e-03 + 5.0575290024567110e-01 5.0575290024567110e-01 4.9092402452804773e+00 4.9092402452804773e+00 4.9092402452804773e+00 2.5036283302592764e+01 2.5036283302592764e+01 6.9758287744490906e+00 6.9758287744490906e+00 + 2.2921228282562359e-03 2.2921228282562359e-03 2.8586486787312273e-05 2.8586486787312273e-05 2.8586486787312273e-05 1.1341026683012628e-02 1.1341026683012628e-02 2.3072645210211961e-03 2.3072645210211961e-03 + 6.0872107347802063e-03 6.0872107347802063e-03 1.4651677422547376e-04 1.4651677422547376e-04 1.4651677422547376e-04 1.4883193163897895e-02 1.4883193163897895e-02 3.4400419380180660e-03 3.4400419380180660e-03 + 6.0872107347802063e-03 6.0872107347802063e-03 1.4651677422547376e-04 1.4651677422547376e-04 1.4651677422547376e-04 1.4883193163897891e-02 1.4883193163897891e-02 3.4400419380180660e-03 3.4400419380180660e-03 + 1.0478746627345270e-06 1.0478746627345270e-06 4.4005905304828405e-12 4.4005905304828405e-12 4.4005905304828405e-12 3.4182575814402286e-06 3.4182575814402286e-06 5.3566346905150178e-07 5.3566346905150178e-07 + 1.2042414196542307e-06 1.2042414196542307e-06 5.8008374838438911e-12 5.8008374838438911e-12 5.8008374838438911e-12 3.9144274457851696e-06 3.9144274457851696e-06 6.1773035054443626e-07 6.1773035054443626e-07 + 8.0864258955377327e-05 8.0864258955377327e-05 3.8050800531473632e-08 3.8050800531473632e-08 3.8050800531473632e-08 3.7637285547139309e-04 3.7637285547139309e-04 6.7814966271671046e-05 6.7814966271671046e-05 + 1.1569302550376962e-07 1.1569302550376962e-07 6.4030685769744561e-14 6.4030685769744561e-14 6.4030685769744561e-14 5.7249335348461354e-07 5.7249335348461354e-07 9.9705226275132452e-08 9.9705226275132452e-08 + 1.1669841640201765e-06 1.1669841640201765e-06 5.3447296153828227e-12 5.3447296153828227e-12 5.3447296153828227e-12 3.7238658060636074e-06 3.7238658060636074e-06 5.8532650298429509e-07 5.8532650298429509e-07 + 1.1669841640201765e-06 1.1669841640201765e-06 5.3447296153828227e-12 5.3447296153828227e-12 5.3447296153828227e-12 3.7238658060636074e-06 3.7238658060636074e-06 5.8532650298429530e-07 5.8532650298429530e-07 + 1.3982624250735140e+02 1.3982624250735140e+02 6.4719693083805609e+06 6.4719693083805609e+06 6.4719693083805609e+06 1.1289395335553244e+06 1.1289395335553244e+06 5.8238736479839745e+03 5.8238736479839745e+03 + 1.3990086060047517e+02 1.3990086060047517e+02 6.4309075107444394e+06 6.4309075107444394e+06 6.4309075107444394e+06 1.9004117252422395e+05 1.9004117252422395e+05 5.7836779290307231e+03 5.7836779290307231e+03 + 1.3983411407430259e+02 1.3983411407430259e+02 6.4679177910854341e+06 6.4679177910854341e+06 6.4679177910854341e+06 -5.6161455720730862e+06 -5.6161455720730862e+06 5.8193982932836152e+03 5.8193982932836152e+03 + 1.3989213026070831e+02 1.3989213026070831e+02 6.4359875920307860e+06 6.4359875920307860e+06 6.4359875920307860e+06 1.6029643727382198e+06 1.6029643727382198e+06 5.7881707594483833e+03 5.7881707594483833e+03 + 1.3986416506252624e+02 1.3986416506252624e+02 6.4507093035873119e+06 6.4507093035873119e+06 6.4507093035873119e+06 -1.5243363200971362e+05 -1.5243363200971362e+05 5.8037405412283661e+03 5.8037405412283661e+03 + 1.3986416506252624e+02 1.3986416506252624e+02 6.4507093035873119e+06 6.4507093035873119e+06 6.4507093035873119e+06 7.6380672485245130e+04 7.6380672485245130e+04 5.8037405412283661e+03 5.8037405412283661e+03 + 7.4105075405610554e+00 7.4105075405610554e+00 1.2031673157137120e+04 1.2031673157137120e+04 1.2031673157137120e+04 -1.0877236019858922e+05 -1.0877236019858922e+05 2.3154216787749957e+02 2.3154216787749957e+02 + 7.5682519695007784e+00 7.5682519695007784e+00 1.2441210491510234e+04 1.2441210491510234e+04 1.2441210491510234e+04 2.1748045993892074e+03 2.1748045993892074e+03 2.3035605226984441e+02 2.3035605226984441e+02 + 7.3473668924627304e+00 7.3473668924627304e+00 1.2140014363821980e+04 1.2140014363821980e+04 1.2140014363821980e+04 9.3151926438429382e+02 9.3151926438429382e+02 2.3236578982723651e+02 2.3236578982723651e+02 + 7.4695943830643463e+00 7.4695943830643463e+00 1.2463154211367782e+04 1.2463154211367782e+04 1.2463154211367782e+04 9.6105487709052795e+02 9.6105487709052795e+02 2.3130040918810508e+02 2.3130040918810508e+02 + 7.6001135547416290e+00 7.6001135547416290e+00 1.2154929821764550e+04 1.2154929821764550e+04 1.2154929821764550e+04 9.2019078639531199e+02 9.2019078639531199e+02 2.2958419398893852e+02 2.2958419398893852e+02 + 7.6001135547416290e+00 7.6001135547416290e+00 1.2154929821764550e+04 1.2154929821764550e+04 1.2154929821764550e+04 1.8004415596112332e+02 1.8004415596112332e+02 2.2958419398893852e+02 2.2958419398893852e+02 + 1.9386750420471574e-01 1.9386750420471574e-01 2.4941354997680210e-01 2.4941354997680210e-01 2.4941354997680210e-01 4.2367476752742768e+01 4.2367476752742768e+01 2.7549690810886762e-01 2.7549690810886762e-01 + 2.4848161200327129e-01 2.4848161200327129e-01 1.2335000868256871e-01 1.2335000868256871e-01 1.2335000868256871e-01 1.7167460848798324e+01 1.7167460848798324e+01 2.2437040201247069e-01 2.2437040201247069e-01 + 1.6564060291691476e-01 1.6564060291691476e-01 1.7538508824039606e-01 1.7538508824039606e-01 1.7538508824039606e-01 2.2298796181652161e+01 2.2298796181652161e+01 2.7293226678274962e-01 2.7293226678274962e-01 + 1.8795484498346163e-01 1.8795484498346163e-01 9.1146577631431969e-02 9.1146577631431969e-02 9.1146577631431969e-02 6.5450106362815919e-01 6.5450106362815919e-01 2.2397145172232130e-01 2.2397145172232130e-01 + 2.1708342095318903e-01 2.1708342095318903e-01 2.9342204424802815e-01 2.9342204424802815e-01 2.9342204424802815e-01 1.0554086064628978e+00 1.0554086064628978e+00 2.7415890808911791e-01 2.7415890808911791e-01 + 2.1708342095318903e-01 2.1708342095318903e-01 2.9342204424802815e-01 2.9342204424802815e-01 2.9342204424802815e-01 2.1552208399389232e+00 2.1552208399389232e+00 2.7415890808911791e-01 2.7415890808911791e-01 + 9.0904201391466260e-04 9.0904201391466260e-04 5.3307688340573332e-06 5.3307688340573332e-06 5.3307688340573332e-06 -1.1335894967085215e-02 -1.1335894967085215e-02 9.1062532012076722e-04 9.1062532012076722e-04 + 6.1450608069784493e-03 6.1450608069784493e-03 2.7286260441045925e-04 2.7286260441045925e-04 2.7286260441045925e-04 1.7501153932481053e-01 1.7501153932481053e-01 6.0525464403678826e-03 6.0525464403678826e-03 + 8.7453390539365982e-04 8.7453390539365982e-04 4.5510466782155481e-06 4.5510466782155481e-06 4.5510466782155481e-06 -7.8918062444104653e-02 -7.8918062444104653e-02 8.0857645106196087e-04 8.0857645106196087e-04 + 6.9923886001480424e+00 6.9923886001480424e+00 9.1053205201657886e+02 9.1053205201657886e+02 9.1053205201657886e+02 3.5054884521846191e+02 3.5054884521846191e+02 8.7610235047914315e+01 8.7610235047914315e+01 + 1.4055273881797129e-03 1.4055273881797129e-03 1.0907952187439811e-05 1.0907952187439811e-05 1.0907952187439811e-05 4.5323918675257901e-03 4.5323918675257901e-03 1.1443601756214955e-03 1.1443601756214955e-03 + 1.4055273881797129e-03 1.4055273881797129e-03 1.0907952187439811e-05 1.0907952187439811e-05 1.0907952187439811e-05 2.6892653099880952e-03 2.6892653099880952e-03 1.1443601756214955e-03 1.1443601756214955e-03 + 1.0386433656183575e-07 1.0386433656183575e-07 5.0107143219059104e-14 5.0107143219059104e-14 5.0107143219059104e-14 2.2905888742249345e-06 2.2905888742249345e-06 7.2483838817221937e-08 7.2483838817221937e-08 + 1.5503113006450236e-07 1.5503113006450236e-07 1.1148508768820073e-13 1.1148508768820073e-13 1.1148508768820073e-13 2.1936651448261255e-03 2.1936651448261255e-03 1.1890420620644503e-07 1.1890420620644503e-07 + 6.5274367093891168e-08 6.5274367093891168e-08 1.1682719869632058e-14 1.1682719869632058e-14 1.1682719869632058e-14 -8.9662149514657230e-04 -8.9662149514657230e-04 2.5250174105938351e-08 2.5250174105938351e-08 + 2.1905836974735264e-04 2.1905836974735264e-04 2.6468846332397174e-07 2.6468846332397174e-07 2.6468846332397174e-07 -2.0294111939382214e-03 -2.0294111939382214e-03 2.1415581467202455e-04 2.1415581467202455e-04 + 1.1727238863608846e-07 1.1727238863608846e-07 5.2488908617121582e-14 5.2488908617121582e-14 5.2488908617121582e-14 1.0843014531759580e-06 1.0843014531759580e-06 8.1035051679747047e-08 8.1035051679747047e-08 + 1.1727238863608846e-07 1.1727238863608846e-07 5.2488908617121601e-14 5.2488908617121601e-14 5.2488908617121601e-14 -1.1314104862413551e-05 -1.1314104862413551e-05 8.1035051679747114e-08 8.1035051679747114e-08 + 2.1300269282388612e-01 2.1300269282388612e-01 2.3582568467779823e-02 2.3582568467779823e-02 2.3582568467779823e-02 2.5505723989537876e+05 2.5505723989537876e+05 2.8315649063041917e-02 2.8315649063041917e-02 + 2.0960944582296648e-01 2.0960944582296648e-01 6.8843661580521978e-02 6.8843661580521978e-02 6.8843661580521978e-02 -8.8755427077214219e+04 -8.8755427077214219e+04 5.4871711684158969e-02 5.4871711684158969e-02 + 2.1082168001013224e-01 2.1082168001013224e-01 5.2985234773965148e-02 5.2985234773965148e-02 5.2985234773965148e-02 -1.7007432209342553e+06 -1.7007432209342553e+06 4.5471874136991053e-02 4.5471874136991053e-02 + 2.1176009639273524e-01 2.1176009639273524e-01 4.0440274312467758e-02 4.0440274312467758e-02 4.0440274312467758e-02 2.4949515802380920e+03 2.4949515802380920e+03 3.8108340470829616e-02 3.8108340470829616e-02 + 2.1129007096346050e-01 2.1129007096346050e-01 4.6742238206866620e-02 4.6742238206866620e-02 4.6742238206866620e-02 -6.9935275771635381e+04 -6.9935275771635381e+04 4.1806044079237194e-02 4.1806044079237194e-02 + 2.1129007096346050e-01 2.1129007096346050e-01 4.6742238206866626e-02 4.6742238206866626e-02 4.6742238206866626e-02 3.2389863804109581e+06 3.2389863804109581e+06 4.1806044079237194e-02 4.1806044079237194e-02 + 1.9314558699221918e-01 1.9314558699221918e-01 1.2070649175922526e-02 1.2070649175922526e-02 1.2070649175922526e-02 -1.0852177948300601e+06 -1.0852177948300601e+06 3.2573749337624767e-02 3.2573749337624767e-02 + 1.2609173122732564e-01 1.2609173122732564e-01 1.3723590635116670e-01 1.3723590635116670e-01 1.3723590635116670e-01 3.7672184911419299e-01 3.7672184911419299e-01 1.4450858788811760e-01 1.4450858788811760e-01 + 1.4370372353179572e-01 1.4370372353179572e-01 1.2742301670905046e-01 1.2742301670905046e-01 1.2742301670905046e-01 1.4058911736056993e+01 1.4058911736056993e+01 1.2348071429243510e-01 1.2348071429243510e-01 + 1.6143644884268893e-01 1.6143644884268893e-01 1.0101365143589891e-01 1.0101365143589891e-01 1.0101365143589891e-01 -2.1208718020669175e+00 -2.1208718020669175e+00 9.5278381607406662e-02 9.5278381607406662e-02 + 1.5222894935588943e-01 1.5222894935588943e-01 1.1611932268027156e-01 1.1611932268027156e-01 1.1611932268027156e-01 1.1069948054487535e+00 1.1069948054487535e+00 1.1087197968471697e-01 1.1087197968471697e-01 + 1.5222894935588946e-01 1.5222894935588946e-01 1.1611932268027156e-01 1.1611932268027156e-01 1.1611932268027156e-01 3.4752941408919966e+01 3.4752941408919966e+01 1.1087197968471699e-01 1.1087197968471699e-01 + 2.8641667644582014e-01 2.8641667644582014e-01 1.9686612220607297e-01 1.9686612220607297e-01 1.9686612220607297e-01 7.6812528615454212e+01 7.6812528615454212e+01 3.4758087456305958e-01 3.4758087456305958e-01 + 1.2226559615888115e-02 1.2226559615888115e-02 1.1514389424101613e-03 1.1514389424101613e-03 1.1514389424101613e-03 -4.0020630542889393e+00 -4.0020630542889393e+00 1.2509341558004502e-02 1.2509341558004502e-02 + 2.0482583566006421e-02 2.0482583566006421e-02 2.9671771107588644e-03 2.9671771107588644e-03 2.9671771107588644e-03 -1.4489464846860828e+01 -1.4489464846860828e+01 2.0965578192710724e-02 2.0965578192710724e-02 + 4.2798388229757449e-02 4.2798388229757449e-02 9.3480676768845951e-03 9.3480676768845951e-03 9.3480676768845951e-03 -4.5025271688844546e+00 -4.5025271688844546e+00 4.1961761158689957e-02 4.1961761158689957e-02 + 2.9611465362935050e-02 2.9611465362935050e-02 5.3171979760190877e-03 5.3171979760190877e-03 5.3171979760190877e-03 3.5368350936736404e-01 3.5368350936736404e-01 2.8286008845218744e-02 2.8286008845218744e-02 + 2.9611465362935036e-02 2.9611465362935036e-02 5.3171979760190825e-03 5.3171979760190825e-03 5.3171979760190825e-03 2.0248290633319344e-01 2.0248290633319344e-01 2.8286008845218733e-02 2.8286008845218733e-02 + 9.2515753060853204e-02 9.2515753060853204e-02 6.4719910862976057e-02 6.4719910862976057e-02 6.4719910862976057e-02 3.8987538900922075e-01 3.8987538900922075e-01 1.1781392125740382e-01 1.1781392125740382e-01 + 6.4244816342635746e-05 6.4244816342635746e-05 2.6493204441416189e-08 2.6493204441416189e-08 2.6493204441416189e-08 1.7165771289874604e-03 1.7165771289874604e-03 5.5933895524750839e-05 5.5933895524750839e-05 + 1.5939327910675653e-04 1.5939327910675653e-04 1.5609902752347750e-07 1.5609902752347750e-07 1.5609902752347750e-07 1.0559355286400955e-03 1.0559355286400955e-03 1.4598483542988683e-04 1.4598483542988683e-04 + 3.6099536315518425e-02 3.6099536315518425e-02 4.2090333828583249e-03 4.2090333828583249e-03 4.2090333828583249e-03 7.3402558889111472e-02 7.3402558889111472e-02 2.5247708102302951e-02 2.5247708102302951e-02 + 4.8607574479290322e-04 4.8607574479290322e-04 1.2132758622395458e-06 1.2132758622395458e-06 1.2132758622395458e-06 -2.1964053055796646e-02 -2.1964053055796646e-02 3.7235629343929837e-04 3.7235629343929837e-04 + 4.8607574479290333e-04 4.8607574479290333e-04 1.2132758622395454e-06 1.2132758622395454e-06 1.2132758622395454e-06 1.5074498521267079e-03 1.5074498521267079e-03 3.7235629343929837e-04 3.7235629343929837e-04 + 1.6868769542433070e-06 1.6868769542433070e-06 1.3142774566351018e-11 1.3142774566351018e-11 1.3142774566351018e-11 -4.6590339012500980e-05 -4.6590339012500980e-05 1.3804982476466635e-06 1.3804982476466635e-06 + 3.1815371428648464e-09 3.1815371428648464e-09 3.5844616289773665e-17 3.5844616289773665e-17 3.5844616289773665e-17 3.4608739369747421e-07 3.4608739369747421e-07 2.3219291328745752e-09 2.3219291328745752e-09 + 2.1809614789124042e-08 2.1809614789124042e-08 1.8146780895195558e-15 1.8146780895195558e-15 1.8146780895195558e-15 -1.2649378433141856e-06 -1.2649378433141856e-06 1.1350195120127182e-08 1.1350195120127182e-08 + 4.2206385137723952e-04 4.2206385137723952e-04 8.2389961815966079e-07 8.2389961815966079e-07 8.2389961815966079e-07 -1.8457971661908746e-04 -1.8457971661908746e-04 2.9517699465554399e-04 2.9517699465554399e-04 + 7.1986272317329724e-08 7.1986272317329724e-08 1.6368662139920604e-14 1.6368662139920604e-14 1.6368662139920604e-14 -1.7196399504919702e-07 -1.7196399504919702e-07 4.1958276759057147e-08 4.1958276759057147e-08 + 7.1986272317329407e-08 7.1986272317329407e-08 1.6368662139920475e-14 1.6368662139920475e-14 1.6368662139920475e-14 -5.5804349445369525e-06 -5.5804349445369525e-06 4.1958276759056988e-08 4.1958276759056988e-08 diff --git a/libxc/testsuite/input/BrOH+ b/libxc/testsuite/input/BrOH+ new file mode 100644 index 000000000..ca2c4b7f7 --- /dev/null +++ b/libxc/testsuite/input/BrOH+ @@ -0,0 +1,91 @@ +90 + 9.6666237887446041e+03 9.6665864453688937e+03 7.1588226136934680e+11 7.1587759172715796e+11 7.1587292237859204e+11 -9.7015766148422763e+07 -9.7025106636549518e+07 9.8931936364997514e+06 9.8907079423943777e+06 + 9.6667174796208747e+03 9.6666545084255122e+03 7.1587614071981702e+11 7.1587231538412793e+11 7.1586849039480383e+11 -9.7018349156989202e+07 -9.7026980340590358e+07 9.8929979326499179e+06 9.8905662607139423e+06 + 9.6670357100906513e+03 9.6671053322557327e+03 7.1589313931371790e+11 7.1588787203739099e+11 7.1588260480015051e+11 -9.7025818544071645e+07 -9.7037918585551202e+07 9.8925366893693730e+06 9.8898594389914069e+06 + 9.6659771716621635e+03 9.6657562892094465e+03 7.1596131095140796e+11 7.1596554913906226e+11 7.1596978735760022e+11 -9.6996749095378682e+07 -9.7000828695340782e+07 9.8947190089565739e+06 9.8926487556825448e+06 + 9.6666787341748295e+03 9.6663091279795153e+03 7.1587676371975879e+11 7.1591930934011719e+11 7.1596185777913293e+11 -9.7017345931009293e+07 -9.7015091673487544e+07 9.8930594055389129e+06 9.8916569497946277e+06 + 9.6666787341748295e+03 9.6663091279795153e+03 7.1587676371975879e+11 7.1591930934011719e+11 7.1596185777913293e+11 -9.7017345931009293e+07 -9.7015091673487544e+07 9.8930594055389129e+06 9.8916569497946277e+06 + 4.1717199771553368e+01 4.1715492218115820e+01 4.8908261647920212e+05 4.8873810679299373e+05 4.8839383992921747e+05 6.1713857735245119e+03 6.1744815491694781e+03 3.3288950452098834e+03 3.3295292613327028e+03 + 4.1717591047100655e+01 4.1715641187420616e+01 4.8901525398305338e+05 4.8864674565296754e+05 4.8827851502066763e+05 6.1672313242869868e+03 6.1717751346907153e+03 3.3278910210816916e+03 3.3288614743588773e+03 + 4.1724638419773861e+01 4.1727215465189545e+01 4.8689731714789558e+05 4.8663104628134129e+05 4.8636492103693826e+05 6.0865774318135664e+03 6.0721314364143900e+03 3.3083447907462860e+03 3.3050292188579015e+03 + 4.1732628201458027e+01 4.1734385303204142e+01 4.9120375438927696e+05 4.9088088676444732e+05 4.9055823141251114e+05 6.1171756996968106e+03 6.1172601670565828e+03 3.3168394782504406e+03 3.3170446289009101e+03 + 4.1696275916630007e+01 4.1743097666992881e+01 4.8867899350765196e+05 4.8872287762898294e+05 4.8876676752756006e+05 6.1778944242475509e+03 6.0446847442316985e+03 3.3284650570260369e+03 3.2997727220632087e+03 + 4.1696275916630007e+01 4.1743097666992881e+01 4.8867899350765196e+05 4.8872287762898294e+05 4.8876676752756006e+05 6.1778944242475509e+03 6.0446847442316985e+03 3.3284650570260369e+03 3.2997727220632087e+03 + 2.9756838796846052e-01 3.0112096748593953e-01 1.5914928509179143e+00 1.5735509760661768e+00 1.5558494815926383e+00 6.5665662636608415e+00 6.4335865875054346e+00 1.8904179213820154e+00 1.8732235859158479e+00 + 2.9618122964306037e-01 3.0053009157911481e-01 1.6007476155534930e+00 1.5790301296736133e+00 1.5576169839775647e+00 6.5936234082588703e+00 6.4511062629417566e+00 1.8915328041331405e+00 1.8750651214689269e+00 + 2.7806238046895554e-01 2.7235522928877220e-01 1.6990654381026795e+00 1.7202802439744085e+00 1.7417600352227507e+00 7.0251735458779425e+00 7.0199809529355210e+00 1.9221185463266157e+00 1.8999746311694095e+00 + 2.8120326378032717e-01 2.8303478414463057e-01 1.8212486634419078e+00 1.8128185657770715e+00 1.8044300363377321e+00 6.7419159091280223e+00 6.6285464113093502e+00 1.8689584370008361e+00 1.8494029866133410e+00 + 3.0810246030899952e-01 2.5317736204850333e-01 1.5207553808005891e+00 1.7633993966653574e+00 2.0447936694474333e+00 6.4772990204770764e+00 7.0051547021526028e+00 1.9103463174399495e+00 1.8341097252049841e+00 + 3.0810246030899952e-01 2.5317736204850333e-01 1.5207553808005891e+00 1.7633993966653574e+00 2.0447936694474333e+00 6.4772990204770764e+00 7.0051547021526028e+00 1.9103463174399495e+00 1.8341097252049841e+00 + 4.8587637156924206e-03 5.4481035568319566e-03 1.1767410244006676e-04 1.2996992124893704e-04 1.4358092470996274e-04 1.5927321642842603e-02 1.5775423856338427e-02 3.3452780521451742e-03 3.4193562305532572e-03 + 5.0405975916711435e-03 5.7416888855954754e-03 1.2197947494783749e-04 1.3671493194031365e-04 1.5323547965155057e-04 1.5990293666156462e-02 1.5840010253763911e-02 3.4060852299917740e-03 3.5044960421123116e-03 + 4.5107648301399567e-01 4.9811432744654183e-01 4.6900567929719159e+00 4.7910818339423251e+00 4.8989168919499093e+00 2.7366403886946671e+01 2.4942159125082778e+01 7.1387235742583499e+00 6.8981230828617255e+00 + 2.2085710325857131e-03 2.3012768012430108e-03 2.9762554262861848e-05 3.1146279687712636e-05 3.2601813039189015e-05 1.1456183962588502e-02 1.0810965602147142e-02 2.2470603538578856e-03 2.1013580773404897e-03 + 5.5315854926725151e-03 8.5411179985959453e-04 1.6165740663650669e-04 2.7130256124895096e-05 4.5847026163500724e-06 1.8766751484818746e-02 5.5592600377248674e-03 4.1163824355254022e-03 1.0401876026988959e-03 + 5.5315854926725142e-03 8.5411179985959485e-04 1.6165740663650669e-04 2.7130256124895096e-05 4.5847026163500724e-06 1.8766751484818746e-02 5.5592600377248700e-03 4.1163824355254022e-03 1.0401876026988959e-03 + 1.9764398833974741e-07 2.3714576364844423e-07 2.2739942006097857e-13 2.7351214837994914e-13 3.2898102247109567e-13 9.2500213095102533e-07 1.1116422976669763e-06 1.4557919510500885e-07 1.7430967905372169e-07 + 2.2741485215188327e-07 2.7957221290300603e-07 2.9325167192493022e-13 3.6093186006647248e-13 4.4423483994970052e-13 1.0466272787720226e-06 1.2839756388888034e-06 1.6448234356705084e-07 2.0089039889376824e-07 + 3.9097199729659178e-05 4.6042136854144611e-05 1.1269639574371252e-08 1.3226575200224194e-08 1.5523345985692661e-08 2.3403622094051189e-04 2.6929131636657628e-04 4.0730578279231864e-05 4.6770831135369676e-05 + 4.2932308357766874e-08 4.0821735427800831e-08 1.1220745797236391e-14 1.0742112041002182e-14 1.0285404229923094e-14 2.2639012661283962e-07 2.1563743785788922e-07 3.6985559364172332e-08 3.4988924204856783e-08 + 1.4031942688704669e-07 2.5858228655378391e-08 1.1474575780255365e-13 1.6452659500152026e-14 2.4475426582898997e-15 6.8122139629231249e-07 9.8815389915473312e-08 1.0606821871860386e-07 1.4946525153776107e-08 + 1.4031942688704669e-07 2.5858228655378398e-08 1.1474575780255350e-13 1.6452659500152013e-14 2.4475426582898989e-15 6.8122139629231249e-07 9.8815389915473338e-08 1.0606821871860386e-07 1.4946525153776107e-08 + 1.4005965152524828e+02 1.3995902660604230e+02 6.4948882657516450e+06 6.4897412090591956e+06 6.4845982371741487e+06 9.8187235020282422e+05 7.5841290722653817e+05 5.8352361092630963e+03 5.8279523645070758e+03 + 1.4013813314012754e+02 1.4003479669447677e+02 6.4516277356736008e+06 6.4472438888747608e+06 6.4428630319351200e+06 2.8200914271798747e+05 2.7819196266010514e+05 5.7929553407399299e+03 5.7871338152646485e+03 + 1.4006442987680310e+02 1.3996192947279044e+02 6.4927712043682132e+06 6.4880681322541842e+06 6.4833684960568557e+06 -5.3608574979597880e+06 -6.0254450419797655e+06 5.8322380009626240e+03 5.8260812590913747e+03 + 1.4013176671391872e+02 1.4003075915022947e+02 6.4556473061977942e+06 6.4505471077323845e+06 6.4454509586896673e+06 1.8123739434941174e+06 1.9033332700817285e+06 5.7959890248752545e+03 5.7890297166170467e+03 + 1.4009952271232066e+02 1.3999702507622510e+02 6.4725078103383705e+06 6.4680517082417579e+06 6.4635987067974471e+06 -2.2810619267680342e+05 -2.2648962159840457e+05 5.8140595964126687e+03 5.8075256816083665e+03 + 1.4009952271232066e+02 1.3999702507622510e+02 6.4725078103383705e+06 6.4680517082417579e+06 6.4635987067974471e+06 7.8031409195323969e+04 5.7345676918094228e+04 5.8140595964126687e+03 5.8075256816083665e+03 + 7.4359846289395586e+00 7.4348574347645773e+00 1.2034142982479476e+04 1.2032086343333120e+04 1.2030042609826893e+04 -1.6035631283345856e+05 -1.3759868635189743e+05 2.3203511033079488e+02 2.3098903040081439e+02 + 7.6014980812570627e+00 7.5952937317612674e+00 1.2465159040341086e+04 1.2455072061741032e+04 1.2445008370736352e+04 2.1644460757650741e+03 2.1575469793497964e+03 2.3078565931215019e+02 2.2978921870647099e+02 + 7.2989568105635172e+00 7.3368949869686739e+00 1.2180558658981619e+04 1.2154734894406134e+04 1.2128982368774874e+04 9.3588731307992703e+02 9.2892408076572895e+02 2.3366840812397035e+02 2.3218462071410460e+02 + 7.4401701380464855e+00 7.4804601216787283e+00 1.2558708134732586e+04 1.2537251076999719e+04 1.2515841957224655e+04 9.1144513969447075e+02 9.2477277328425816e+02 2.3243565699836145e+02 2.3096178981129160e+02 + 7.6328549604639138e+00 7.5330123737119310e+00 1.2164722357575918e+04 1.2196573529638159e+04 1.2228508563429521e+04 9.1811038479746185e+02 9.1921836417788404e+02 2.3002490769624049e+02 2.3007272707184501e+02 + 7.6328549604639138e+00 7.5330123737119310e+00 1.2164722357575918e+04 1.2196573529638159e+04 1.2228508563429521e+04 2.7362518855533193e+02 3.3711620207867730e+02 2.3002490769624049e+02 2.3007272707184501e+02 + 2.0115363981444559e-01 1.9956020412226563e-01 2.7946999907687819e-01 2.7608366455651911e-01 2.7282541290284573e-01 3.5762413487906962e+01 4.5823762405066219e+01 2.8229368183957387e-01 2.7308463238761893e-01 + 2.5669682991605908e-01 2.5704659438228866e-01 1.4638102952579629e-01 1.4447769874149496e-01 1.4264243339902516e-01 1.6366056639226670e+01 1.6646160290640669e+01 2.2424294641886180e-01 2.1570024861254150e-01 + 1.5014082622519181e-01 1.6731627559189458e-01 1.5304651099193270e-01 1.6895588554084731e-01 1.8653988266595853e-01 2.8373105230593673e+01 2.4646019536616304e+01 2.7089256671695783e-01 2.6695331129518468e-01 + 1.6956139476068186e-01 1.8703105176179752e-01 6.4414534830221068e-02 7.4406801136433401e-02 8.6074613353389964e-02 7.5959977834280423e-01 7.3380377805696528e-01 2.2314612954792976e-01 2.2733158761164504e-01 + 2.2629171681055033e-01 1.9411747197886672e-01 3.3351302774546543e-01 2.7808327383952969e-01 2.3194988694428587e-01 1.0874881908507759e+00 1.0177582685834845e+00 2.8527970829337729e-01 2.5607926328051206e-01 + 2.2629171681055030e-01 1.9411747197886675e-01 3.3351302774546543e-01 2.7808327383952969e-01 2.3194988694428587e-01 2.1922519680555106e+00 1.8810867764369461e+00 2.8527970829337723e-01 2.5607926328051206e-01 + 7.4390481495671700e-04 7.6539032411135919e-04 4.1118115142802724e-06 4.1998073121369994e-06 4.2896864707902293e-06 -1.0215078056581513e-02 -1.0433850462139866e-02 8.1702183216608389e-04 8.4177342871899594e-04 + 5.1382910284822380e-03 5.2156045502787952e-03 2.1059942756477244e-04 2.1381451911476267e-04 2.1708006545182793e-04 1.6417154419052510e-01 1.6548013379806950e-01 5.5149551483017790e-03 5.6250444401095738e-03 + 5.5070023431674515e-04 6.4432339990688054e-04 2.1872151097207459e-06 2.5541932294777621e-06 2.9827499351275914e-06 -5.7769488189746206e-02 -6.7580510147672371e-02 6.0670012814781956e-04 6.8574514190032198e-04 + 7.0217068170644810e+00 7.0122471979470848e+00 9.2461790038478466e+02 9.2221192219443208e+02 9.1981220480036950e+02 3.5168855542749418e+02 3.5062968132172836e+02 8.7904560768119950e+01 8.7638376297501608e+01 + 1.1144449978133053e-03 1.3248286898846660e-03 8.0693355247097599e-06 8.7786995827597368e-06 9.6174135112877515e-06 4.1097893218836907e-03 4.0674875708420185e-03 1.0341346065481328e-03 1.0125742000831521e-03 + 1.1144449978133053e-03 1.3248286898846660e-03 8.0693355247097599e-06 8.7786995827597368e-06 9.6174135112877515e-06 2.6297842107606642e-03 2.2986169173340350e-03 1.0341346065481326e-03 1.0125742000831517e-03 + 1.8125803130052638e-08 2.0344530833477899e-08 1.6883325959922562e-15 1.9640635010858149e-15 2.2862088216585662e-15 5.6371651996723867e-07 6.0788209143099787e-07 1.8314385989713726e-08 2.1427175047682631e-08 + 3.8242655032894379e-08 4.0005480535188894e-08 8.0978339545755054e-15 8.6339089709639013e-15 9.2224811095504871e-15 1.1911957182558146e-03 1.1843684707217464e-03 3.3828305920966865e-08 3.7692530770078754e-08 + 1.5990339575578523e-08 1.8992800107286254e-08 5.9310651310450345e-16 6.8591372321348984e-16 7.9324890034264255e-16 -2.4460991287734318e-04 -1.3173751302116726e-04 5.2698387989836664e-09 5.9737113658459649e-09 + 1.8012346437011536e-04 1.8346650972284975e-04 2.0839860327930734e-07 2.1429301303238987e-07 2.2040565972522199e-07 -2.2212149678914701e-03 -2.8998651393892334e-03 1.7912844152385716e-04 1.7147789599768296e-04 + 1.7036439381771757e-08 4.4125979774440448e-08 9.5486951628261680e-16 2.4716268891371243e-15 6.4609019336704138e-15 2.0423955737748745e-07 2.7823962467200105e-07 1.2938643518307750e-08 1.8794317682116984e-08 + 1.7036439381771757e-08 4.4125979774440454e-08 9.5486951628261818e-16 2.4716268891371274e-15 6.4609019336704201e-15 -9.9780978961299452e-06 -1.1792482654990234e-05 1.2938643518307747e-08 1.8794317682116994e-08 + 2.0211311223327191e-01 2.0446609129444021e-01 2.6380222174074593e-02 2.6394091966986041e-02 2.6408421159123945e-02 2.5404764221724929e+05 2.6051692480837187e+05 2.9048343462588874e-02 2.8768827751868689e-02 + 1.9864328426826100e-01 2.0097926327655358e-01 6.9985094956751939e-02 7.0383104065661728e-02 7.0784218262482448e-02 -1.0120294250697449e+05 -1.0285248477786669e+05 5.6173928896255707e-02 5.6067767403395981e-02 + 1.9985597764847796e-01 2.0220538627625348e-01 5.5070435941452306e-02 5.5287257370025863e-02 5.5505121065352360e-02 -1.7621964134504180e+06 -1.7959940547340801e+06 4.6790789372208000e-02 4.6557699667607255e-02 + 2.0086896466899756e-01 2.0320860172571567e-01 4.2281425157618256e-02 4.2481627763082772e-02 4.2684328652322932e-02 2.4006260622865270e+03 2.1770951947108115e+03 3.8829193871164999e-02 3.8678347280256944e-02 + 2.0036161239560285e-01 2.0270591446918265e-01 4.8706539837370298e-02 4.8917936224390633e-02 4.9131173641290965e-02 -3.0137714235027350e+04 -3.5744696727030147e+04 4.2826601749599735e-02 4.2635651818907702e-02 + 2.0036161239560285e-01 2.0270591446918265e-01 4.8706539837370298e-02 4.8917936224390633e-02 4.9131173641290965e-02 3.2017025760402251e+06 3.2548350111127649e+06 4.2826601749599735e-02 4.2635651818907709e-02 + 1.8627548682842049e-01 1.8812891377560678e-01 9.9309969895127748e-03 1.0014626104863138e-02 1.0106223938938919e-02 -8.6802434387937270e+05 -9.0339084091396374e+05 2.8828541849074650e-02 2.8453645865016780e-02 + 1.1765143771673531e-01 1.1918718142694129e-01 1.2741272487083535e-01 1.2876126372294899e-01 1.3012446057380517e-01 3.7878382201208266e-01 3.6473627151820243e-01 1.4267337279650633e-01 1.4380381113881949e-01 + 1.3507254673596525e-01 1.3687888495804035e-01 1.2033560379836901e-01 1.2136194696168456e-01 1.2239704672730101e-01 1.4092651511172189e+01 1.4640515976177563e+01 1.2225297887339528e-01 1.2269284743329845e-01 + 1.5420715026011250e-01 1.5583959583491838e-01 9.4241238115175430e-02 9.5147491267525211e-02 9.6064729479212935e-02 -2.9118637197728892e+00 -3.6694392729171472e+00 9.1386264442336176e-02 9.2197429995123190e-02 + 1.4428046691826674e-01 1.4589432638734484e-01 1.0928486953360839e-01 1.1046824000250673e-01 1.1166791219850450e-01 1.0640858492523864e+00 1.0728670058295438e+00 1.0842377751196410e-01 1.0914556101999591e-01 + 1.4428046691826674e-01 1.4589432638734484e-01 1.0928486953360839e-01 1.1046824000250673e-01 1.1166791219850450e-01 3.9090074283209972e+01 3.9203658443256316e+01 1.0842377751196411e-01 1.0914556101999594e-01 + 2.9525430489310928e-01 2.9670002639679360e-01 2.3490708481802638e-01 2.3143784310081139e-01 2.2828614704488567e-01 8.1628909644616201e+01 7.9850112757145652e+01 3.4918054057859810e-01 3.2990084822265059e-01 + 1.0350430973838615e-02 1.0531264191721923e-02 9.1345492141646739e-04 9.2831472998202932e-04 9.4342028069342276e-04 -3.5220742652735857e+00 -3.6439230257778092e+00 1.1614116127516992e-02 1.1809764657409115e-02 + 1.7813884358933239e-02 1.8355268047116062e-02 2.5160687123233789e-03 2.5731558356639115e-03 2.6317205494060087e-03 -1.1188566363403128e+01 -1.1648734352097396e+01 1.9913575914356028e-02 2.0233583333456266e-02 + 4.1330705383418494e-02 4.2020085239154056e-02 9.1559561688758645e-03 9.3067823842284143e-03 9.4607391823371030e-03 -3.0592294678532332e+00 -3.3374426227925813e+00 4.1280713016299639e-02 4.2311226840884834e-02 + 2.7423864920665633e-02 2.7394852523969813e-02 4.9878227860105963e-03 4.9589640451738358e-03 4.9316744577085070e-03 3.2758903272553203e-01 3.3168595800462153e-01 2.7825048089193116e-02 2.7581624212204548e-02 + 2.7423864920665619e-02 2.7394852523969809e-02 4.9878227860105911e-03 4.9589640451738314e-03 4.9316744577085035e-03 1.9432919175889149e-01 1.9824512911308048e-01 2.7825048089193095e-02 2.7581624212204534e-02 + 9.1453282408202205e-02 9.3355595533397853e-02 6.7289793559242680e-02 6.8263006407801932e-02 6.9293321971409028e-02 4.2194297320411756e-01 4.2186317927925943e-01 1.2031301797346236e-01 1.1901366303459204e-01 + 3.6944010749794017e-05 3.7707552142586443e-05 1.0549067658460147e-08 1.0761508386870180e-08 1.0978296855010768e-08 -3.6213407501432696e-04 -2.8526301310789439e-04 3.7515828055714718e-05 3.8678691321920010e-05 + 8.9916881735749407e-05 9.9252395450181557e-05 6.1427454934340581e-08 6.7281794351799703e-08 7.3719669569614164e-08 5.8703889281276449e-04 7.2776201052530173e-04 9.8337235366215386e-05 1.0635265023736028e-04 + 3.6498223947077649e-02 3.8174353624360502e-02 4.7556985959211111e-03 4.9366415974517767e-03 5.1371811784933549e-03 9.0827903486595751e-02 7.0890474936800743e-02 2.7094686854839740e-02 2.4302785319320598e-02 + 3.4476031146537145e-04 4.0586370047341442e-04 7.2254374667153179e-07 8.0181150794491652e-07 8.9375436571619693e-07 -1.7716467473099091e-02 -1.7456909416330921e-02 3.0300032666934294e-04 3.1671993630595548e-04 + 3.4476031146537156e-04 4.0586370047341447e-04 7.2254374667153179e-07 8.0181150794491652e-07 8.9375436571619693e-07 1.2570593017694255e-03 1.1705767091135294e-03 3.0300032666934294e-04 3.1671993630595543e-04 + 5.7848874277743763e-07 6.4371567224202640e-07 2.1860296444130561e-12 2.4187603740159631e-12 2.6784528883523351e-12 -1.0495936206459324e-04 -6.3031382524276848e-05 6.1320465480884400e-07 6.8730418362971923e-07 + 7.4470169611304340e-10 7.4981957568351213e-10 1.6251001695356205e-18 1.4174988532819087e-18 1.2378498205493153e-18 -4.3742461979219940e-09 -1.0567701850320962e-08 6.1455775478227492e-10 6.2014604871517526e-10 + 6.2737527806502307e-09 7.5481196185512185e-09 1.4679191412312900e-16 1.7386221808424372e-16 2.0593192397831518e-16 -9.9384314623039734e-07 -1.0797550513149869e-06 3.1090531497812747e-09 3.6341019640315349e-09 + 3.0321650257763026e-04 3.1833705715500249e-04 5.3179443766902630e-07 5.6017757795732969e-07 5.9026863192233281e-07 -4.2718121846055469e-05 -5.6736713714458935e-04 2.4773913682941457e-04 2.4540930344542328e-04 + 1.4478411939386775e-08 3.3977901180468628e-08 4.8024082743363218e-16 1.3309917876187713e-15 3.7603172007430589e-15 -1.1210992305558339e-06 -1.6930646813938562e-06 6.8438187165368509e-09 1.4214981894699861e-08 + 1.4478411939386737e-08 3.3977901180468529e-08 4.8024082743362923e-16 1.3309917876187623e-15 3.7603172007430321e-15 -1.9563931636511040e-06 -3.3622153529901175e-06 6.8438187165368286e-09 1.4214981894699810e-08 diff --git a/libxc/testsuite/input/H b/libxc/testsuite/input/H new file mode 100644 index 000000000..bd5629538 --- /dev/null +++ b/libxc/testsuite/input/H @@ -0,0 +1,31 @@ +30 + 2.9812307552866940e-01 0.0000000000000000e+00 7.2885038299571603e-03 -0.0000000000000000e+00 0.0000000000000000e+00 -3.0093807601778920e+01 0.0000000000000000e+00 3.0559961805401883e-03 0.0000000000000000e+00 + 2.9812307552866940e-01 0.0000000000000000e+00 7.2885038299571603e-03 0.0000000000000000e+00 0.0000000000000000e+00 -3.0093807601778920e+01 0.0000000000000000e+00 3.0559961805401883e-03 0.0000000000000000e+00 + 2.9812307552866940e-01 0.0000000000000000e+00 7.2885038299571603e-03 -0.0000000000000000e+00 0.0000000000000000e+00 -3.0093807601778920e+01 0.0000000000000000e+00 3.0559961805401883e-03 0.0000000000000000e+00 + 2.9812307552866940e-01 0.0000000000000000e+00 7.2885038299571603e-03 0.0000000000000000e+00 0.0000000000000000e+00 -3.0093807601778920e+01 0.0000000000000000e+00 3.0559961805401883e-03 0.0000000000000000e+00 + 2.9812307552866940e-01 0.0000000000000000e+00 7.2885038299571603e-03 -0.0000000000000000e+00 0.0000000000000000e+00 -3.0093807601778920e+01 0.0000000000000000e+00 3.0559961805401883e-03 0.0000000000000000e+00 + 2.9812307552866940e-01 0.0000000000000000e+00 7.2885038299571603e-03 0.0000000000000000e+00 0.0000000000000000e+00 -3.0093807601778920e+01 0.0000000000000000e+00 3.0559961805401883e-03 0.0000000000000000e+00 + 2.1491116474335561e-01 0.0000000000000000e+00 1.7350578133885466e-01 -0.0000000000000000e+00 0.0000000000000000e+00 -3.2610655319530562e+00 0.0000000000000000e+00 1.0091715200018959e-01 0.0000000000000000e+00 + 2.1491116474335561e-01 0.0000000000000000e+00 1.7350578133885466e-01 0.0000000000000000e+00 0.0000000000000000e+00 -3.2610655319530562e+00 0.0000000000000000e+00 1.0091715200018959e-01 0.0000000000000000e+00 + 2.1491116474335561e-01 0.0000000000000000e+00 1.7350578133885466e-01 -0.0000000000000000e+00 0.0000000000000000e+00 -3.2610655319530562e+00 0.0000000000000000e+00 1.0091715200018959e-01 0.0000000000000000e+00 + 2.1491116474335561e-01 0.0000000000000000e+00 1.7350578133885466e-01 0.0000000000000000e+00 0.0000000000000000e+00 -3.2610655319530562e+00 0.0000000000000000e+00 1.0091715200018959e-01 0.0000000000000000e+00 + 2.1491116474335561e-01 0.0000000000000000e+00 1.7350578133885466e-01 -0.0000000000000000e+00 0.0000000000000000e+00 -3.2610655319530562e+00 0.0000000000000000e+00 1.0091715200018959e-01 0.0000000000000000e+00 + 2.1491116474335561e-01 0.0000000000000000e+00 1.7350578133885466e-01 0.0000000000000000e+00 0.0000000000000000e+00 -3.2610655319530562e+00 0.0000000000000000e+00 1.0091715200018959e-01 0.0000000000000000e+00 + 4.3002625309998613e-02 0.0000000000000000e+00 7.3839170838824976e-03 -0.0000000000000000e+00 0.0000000000000000e+00 5.1604093686707158e-03 0.0000000000000000e+00 2.1463564821005209e-02 0.0000000000000000e+00 + 4.3002625309998613e-02 0.0000000000000000e+00 7.3839170838824976e-03 0.0000000000000000e+00 0.0000000000000000e+00 5.1604093686707158e-03 0.0000000000000000e+00 2.1463564821005209e-02 0.0000000000000000e+00 + 4.3002625309998613e-02 0.0000000000000000e+00 7.3839170838824976e-03 -0.0000000000000000e+00 0.0000000000000000e+00 5.1604093686707158e-03 0.0000000000000000e+00 2.1463564821005209e-02 0.0000000000000000e+00 + 4.3002625309998613e-02 0.0000000000000000e+00 7.3839170838824976e-03 0.0000000000000000e+00 0.0000000000000000e+00 5.1604093686707158e-03 0.0000000000000000e+00 2.1463564821005209e-02 0.0000000000000000e+00 + 4.3002625309998613e-02 0.0000000000000000e+00 7.3839170838824976e-03 -0.0000000000000000e+00 0.0000000000000000e+00 5.1604093686707158e-03 0.0000000000000000e+00 2.1463564821005209e-02 0.0000000000000000e+00 + 4.3002625309998613e-02 0.0000000000000000e+00 7.3839170838824976e-03 0.0000000000000000e+00 0.0000000000000000e+00 5.1604093686707158e-03 0.0000000000000000e+00 2.1463564821005209e-02 0.0000000000000000e+00 + 8.1904694490289435e-04 0.0000000000000000e+00 2.7287023034495841e-06 -0.0000000000000000e+00 0.0000000000000000e+00 2.1844876941506846e-03 0.0000000000000000e+00 4.1644473495783306e-04 0.0000000000000000e+00 + 8.1904694490289435e-04 0.0000000000000000e+00 2.7287023034495841e-06 0.0000000000000000e+00 0.0000000000000000e+00 2.1844876941506846e-03 0.0000000000000000e+00 4.1644473495783306e-04 0.0000000000000000e+00 + 8.1904694490289435e-04 0.0000000000000000e+00 2.7287023034495841e-06 -0.0000000000000000e+00 0.0000000000000000e+00 2.1844876941506846e-03 0.0000000000000000e+00 4.1644473495783306e-04 0.0000000000000000e+00 + 8.1904694490289435e-04 0.0000000000000000e+00 2.7287023034495841e-06 0.0000000000000000e+00 0.0000000000000000e+00 2.1844876941506846e-03 0.0000000000000000e+00 4.1644473495783306e-04 0.0000000000000000e+00 + 8.1904694490289435e-04 0.0000000000000000e+00 2.7287023034495841e-06 -0.0000000000000000e+00 0.0000000000000000e+00 2.1844876941506846e-03 0.0000000000000000e+00 4.1644473495783306e-04 0.0000000000000000e+00 + 8.1904694490289435e-04 0.0000000000000000e+00 2.7287023034495841e-06 0.0000000000000000e+00 0.0000000000000000e+00 2.1844876941506846e-03 0.0000000000000000e+00 4.1644473495783306e-04 0.0000000000000000e+00 + 8.5637178972121104e-08 0.0000000000000000e+00 4.0188733593578916e-14 -0.0000000000000000e+00 0.0000000000000000e+00 4.1144644586606145e-07 0.0000000000000000e+00 5.8661340320124212e-08 0.0000000000000000e+00 + 8.5637178972121104e-08 0.0000000000000000e+00 4.0188733593578916e-14 0.0000000000000000e+00 0.0000000000000000e+00 4.1144644586606145e-07 0.0000000000000000e+00 5.8661340320124212e-08 0.0000000000000000e+00 + 8.5637178972121104e-08 0.0000000000000000e+00 4.0188733593578916e-14 -0.0000000000000000e+00 0.0000000000000000e+00 4.1144644586606145e-07 0.0000000000000000e+00 5.8661340320124212e-08 0.0000000000000000e+00 + 8.5637178972121104e-08 0.0000000000000000e+00 4.0188733593578916e-14 0.0000000000000000e+00 0.0000000000000000e+00 4.1144644586606145e-07 0.0000000000000000e+00 5.8661340320124212e-08 0.0000000000000000e+00 + 8.5637178972121104e-08 0.0000000000000000e+00 4.0188733593578916e-14 -0.0000000000000000e+00 0.0000000000000000e+00 4.1144644586606145e-07 0.0000000000000000e+00 5.8661340320124212e-08 0.0000000000000000e+00 + 8.5637178972121104e-08 0.0000000000000000e+00 4.0188733593578916e-14 0.0000000000000000e+00 0.0000000000000000e+00 4.1144644586606145e-07 0.0000000000000000e+00 5.8661340320124212e-08 0.0000000000000000e+00 diff --git a/libxc/testsuite/input/Li b/libxc/testsuite/input/Li new file mode 100644 index 000000000..36e639030 --- /dev/null +++ b/libxc/testsuite/input/Li @@ -0,0 +1,31 @@ +30 + 6.4861166230150555e+00 6.5036649228387189e+00 1.4194047833239990e+03 1.4232293901824482e+03 1.4270643024997728e+03 -1.0610898372216599e+04 -1.0639664359639688e+04 2.7368479581946655e+01 2.7428079400825251e+01 + 6.4861166230150555e+00 6.5036649228387189e+00 1.4194047833239990e+03 1.4232293901824482e+03 1.4270643024997728e+03 -1.0610898372216599e+04 -1.0639664359639688e+04 2.7368479581946655e+01 2.7428079400825251e+01 + 6.4861186736538796e+00 6.5036647525588354e+00 1.4193683774548181e+03 1.4232126319770002e+03 1.4270672983789070e+03 -1.0610898636379383e+04 -1.0639663984837518e+04 2.7368448902713162e+01 2.7428137699546870e+01 + 6.4861186736538796e+00 6.5036647525588354e+00 1.4193683774548181e+03 1.4232126319770002e+03 1.4270672983789070e+03 -1.0610898636379383e+04 -1.0639663984837518e+04 2.7368448902713162e+01 2.7428137699546870e+01 + 6.4861166230150555e+00 6.5036649228387127e+00 1.4194047833240006e+03 1.4232293901824517e+03 1.4270643024997780e+03 -1.0610898372216605e+04 -1.0639664359639697e+04 2.7368479581946634e+01 2.7428079400825187e+01 + 6.4861166230150555e+00 6.5036649228387127e+00 1.4194047833240006e+03 1.4232293901824517e+03 1.4270643024997780e+03 -1.0610898372216605e+04 -1.0639664359639697e+04 2.7368479581946634e+01 2.7428079400825187e+01 + 2.1707638135485769e+00 2.1763114221928235e+00 1.5451531107452470e+02 1.5495115738563598e+02 1.5538823310246494e+02 -5.2123140153080456e+01 -5.2318439378538102e+01 8.9092835174206417e+00 8.9249768819286928e+00 + 2.1707638135485769e+00 2.1763114221928235e+00 1.5451531107452470e+02 1.5495115738563598e+02 1.5538823310246494e+02 -5.2123140153080456e+01 -5.2318439378538102e+01 8.9092835174206417e+00 8.9249768819286928e+00 + 2.1716802072439831e+00 2.1762599620597758e+00 1.5431798212537268e+02 1.5485680704382963e+02 1.5539751335218526e+02 -5.2170686710922723e+01 -5.2314155427068613e+01 8.9057137445347454e+00 8.9257209620209572e+00 + 2.1716802072439831e+00 2.1762599620597758e+00 1.5431798212537268e+02 1.5485680704382963e+02 1.5539751335218526e+02 -5.2170686710922723e+01 -5.2314155427068613e+01 8.9057137445347454e+00 8.9257209620209572e+00 + 2.1707638135485832e+00 2.1763114221928266e+00 1.5451531107452411e+02 1.5495115738563527e+02 1.5538823310246417e+02 -5.2123140153081785e+01 -5.2318439378538258e+01 8.9092835174202616e+00 8.9249768819286626e+00 + 2.1707638135485832e+00 2.1763114221928266e+00 1.5451531107452411e+02 1.5495115738563527e+02 1.5538823310246417e+02 -5.2123140153081785e+01 -5.2318439378538258e+01 8.9092835174202616e+00 8.9249768819286626e+00 + 3.0095776303929744e-02 3.0057395981539382e-02 2.3266883924948207e-02 2.3271876430827901e-02 2.3276870007977606e-02 4.9086025614566042e-01 4.8057597402684793e-01 9.9398815379935043e-02 9.6801757312633019e-02 + 3.0095776303929744e-02 3.0057395981539382e-02 2.3266883924948207e-02 2.3271876430827901e-02 2.3276870007977606e-02 4.9086025614566042e-01 4.8057597402684793e-01 9.9398815379935043e-02 9.6801757312633019e-02 + 3.5667743948291239e-02 2.9946915358952261e-02 2.2333135124285607e-02 2.2778692569261419e-02 2.3233139112685281e-02 4.5645630263764825e-01 4.8162684339618539e-01 9.6766631106445677e-02 9.6976344793187910e-02 + 3.5667743948291239e-02 2.9946915358952261e-02 2.2333135124285607e-02 2.2778692569261419e-02 2.3233139112685281e-02 4.5645630263764825e-01 4.8162684339618539e-01 9.6766631106445677e-02 9.6976344793187910e-02 + 3.0095776303963661e-02 3.0057395981611619e-02 2.3266883924957554e-02 2.3271876430823880e-02 2.3276870007960210e-02 4.9086025614527889e-01 4.8057597402605456e-01 9.9398815379878450e-02 9.6801757312595160e-02 + 3.0095776303963661e-02 3.0057395981611619e-02 2.3266883924957554e-02 2.3271876430823880e-02 2.3276870007960210e-02 4.9086025614527889e-01 4.8057597402605456e-01 9.9398815379878450e-02 9.6801757312595160e-02 + 1.8563966531289203e-06 1.8161853710439767e-06 8.3595323953118973e-11 8.3199268725174546e-11 8.2805089914907147e-11 1.1179467690003199e-03 3.9256032612949076e-05 2.7526678760974991e-04 5.6991078127697100e-06 + 1.8563966531289203e-06 1.8161853710439767e-06 8.3595323953118973e-11 8.3199268725174546e-11 8.2805089914907147e-11 1.1179467690003199e-03 3.9256032612949076e-05 2.7526678760974991e-04 5.6991078127697100e-06 + 4.7984046357356829e-03 1.5964624289378327e-06 3.6980454953559325e-06 1.5182461958770077e-08 6.2332156653825732e-11 -3.4357867977894050e-03 3.4775215518530016e-05 1.0119865465024043e-04 4.8804904138848394e-06 + 4.7984046357356829e-03 1.5964624289378327e-06 3.6980454953559325e-06 1.5182461958770077e-08 6.2332156653825732e-11 -3.4357867977894050e-03 3.4775215518530016e-05 1.0119865465024043e-04 4.8804904138848394e-06 + 1.8563966531755312e-06 1.8161853717005107e-06 8.3595323975592372e-11 8.3199268771269884e-11 8.2805089984400064e-11 1.1179467690034333e-03 3.9256032624648126e-05 2.7526678760972020e-04 5.6991078140801344e-06 + 1.8563966531755312e-06 1.8161853717005107e-06 8.3595323975592372e-11 8.3199268771269884e-11 8.2805089984400064e-11 1.1179467690034333e-03 3.9256032624648126e-05 2.7526678760972020e-04 5.6991078140801344e-06 + 1.5177007400799703e-11 5.4528997162498950e-12 2.6138183376667439e-21 8.5857221677495029e-22 2.8201893023517251e-22 1.0874855750591191e-05 1.9948650561426283e-11 2.7187178133634310e-06 6.4648860257761249e-12 + 1.5177007400799703e-11 5.4528997162498950e-12 2.6138183376667439e-21 8.5857221677495029e-22 2.8201893023517251e-22 1.0874855750591191e-05 1.9948650561426283e-11 2.7187178133634310e-06 6.4648860257761249e-12 + 2.9893451559105509e-04 5.0929426813304125e-11 5.1228755095525470e-08 3.5867753338704198e-14 2.5112765812232162e-20 7.5203211551453606e-05 2.2491041491179418e-10 2.1421399347676239e-05 6.1636189666388111e-11 + 2.9893451559105509e-04 5.0929426813304125e-11 5.1228755095525470e-08 3.5867753338704198e-14 2.5112765812232162e-20 7.5203211551453606e-05 2.2491041491179418e-10 2.1421399347676239e-05 6.1636189666388111e-11 + 1.5177006792460753e-11 5.4528995709775956e-12 2.6138182385288591e-21 8.5857220241656684e-22 2.8201893149897212e-22 1.0874855750589578e-05 1.9948650998117136e-11 2.7187178133630866e-06 6.4648860561879137e-12 + 1.5177006792460753e-11 5.4528995709775956e-12 2.6138182385288591e-21 8.5857220241656684e-22 2.8201893149897212e-22 1.0874855750589578e-05 1.9948650998117136e-11 2.7187178133630866e-06 6.4648860561879137e-12 diff --git a/libxc/testsuite/input/README b/libxc/testsuite/input/README new file mode 100644 index 000000000..55daf8563 --- /dev/null +++ b/libxc/testsuite/input/README @@ -0,0 +1,15 @@ +This directory contains data from realistic atomic and molecular system. +Contents: + +H: Hydrogen atom (spin unrestricted) +Li: Lithium atom (spin unrestricted) +BrOH: Bromuous acid, RHF/un-aug-cc-pVQZ calculation + with relativistic effects at DKH2 level of theory +BrOH+: Same as above, but cation at UHF level of theory + +The files contain 13 columns of data in the format + rhoa rhob sigmaaa sigmaab sigmabb lapla laplb taua taub +for the spin up and spin down densities, the dot products of the gradients, +the Laplacians of the densities and the kinetic energy densities. + +The first line contains the number of data rows. diff --git a/libxc/testsuite/regression/lda_x.pol.bz2 b/libxc/testsuite/regression/lda_x.pol.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..13ba80e68c5f571c0461833fb61e1965adc32e3e GIT binary patch literal 4455 zcmV-t5t!~mT4*^jL0KkKS$RPtGXMwi`G8;^5CA}Hf8a7mkq}@Qo<5WWuCluw-+J`% z=X1|vNq4*6qV~pXdu~+`I^^E?Xc_{Q z00s~VQwD;lpa8-H7yu>!0$`OhKq*v)BLXx8nv*1IOp0wrLna`U&;+7XG5~1LljrO7 zew7ro`9mkdQTvfUTu$`l}?vS#VAgd`B8*$BKos4^aqn6VS0$^G&iH@Y4bTX{7|TP-Fx zh!-CDpv0QGG>u6R%P18tfVWi1Ealk-p^`4a0?^4r#Iqs?aX!MMSP`jLWu0EAvY=CV z&~7j|sR0ROY8bPj^u!+mPd%aSEVg zQ1h6Hdp7B!RUpl!3W_FMGMpZPF)oUUDGCwR?_p{%+GaTIYTSAr3q=-V+9YPY99k?A z5iCo|F!eQPnY-}qNb}%%#55>bujVF(- z^kIuV_vYuuKIh92C#cN$jSVdsljY?Ce-JF2ljp0-32fng_u4G*VO}pV>a*G&L1YkM z#%oQb8~2-z_|L)WRtb1bQfT8kyZjVDgjiS;2qMv2C>_27Q8i3YYdDb22Oyq#PLPO1 z{iKaB)upIPy_$o46FqGBWO_Oz&r8)q)8Sd`le8CVibT17PkX7do6@NEiJjt+?rknj z+w3sUNn543>K{pc<7Qle%B;bATL`DijQr{E6p56o3uRXv^>YK(RkIzX~T5Mk4+}^EH zFH}G)<(jrm_=Chl%;a&c>uYjv$mRi9=0l%UdocQ{GhOk}`Dx7FnILT)V%OVW9uhQZ z*bSB)j3;X}&sbLxDAyw+CD-xTIt*)2h~Y#<9t69Ksgt}H!2FAW6xLD>+t^rSXT==r ztc)8G=M86U9ovbeUg3#iPK@}2H;p?!Nqu$Y${uQrVFsqf4dNk|y++XQ0{YGNq4Hy# zX2|=;q>bXwuDIG~MHxJaZ@K9`_8AgSgL)pMQOu&qfVFlsD6KkcBZ45R-MLbE`QUJ= zG`iByh_;6x<6)Z6nuuqMM7aNWuPCX-@D4FNyD`w?w-NDYR6`tJhU@N;yYB|S1ggF& zrk6azoQUWZFQqS%;%tK|>njxTY{>)AzZ3R4or3^t|&A|fEf1I&}q!UDkWh57Yk z!3!++D*lC%e%O<3$}ZMm}&?f~Bdk#k-@MiREDTRhJW4Hy#*mOjLt(1<8jL ztWRessj%koBWoHT(R}x%nmmsAMV_N_SxE`gb4;9-%uV}ymO%9coSBWC!>X^JFT{#w zwsJ=wW-pHzRF#+I)G;h*`wQ4F79(A^(wH~BM8iqvP~+|j;bW|*o#V{)T|*agMdsy_ zo3OX#4O&>W7-Xr{vdo**iI>QRS2WoU$7xEABKoVJks1-t!j;-Jp)AH5yk4$~TUl^R zjBSm2W5I$i0<$-h-(Ci%H3&yZF`XFE=;El!)Yh5$42KY|q3TSJDbglvg(ns`%{8-7S{h^7k)_Pms(Bzk-&iIDA2LFER9FWN``vlhFFc-& zfLNphXEcVm%q_MCARUNVN9c9-T{RgV~{8F8I=wU+G+u`weif;+5f zX{X#&BD=&PZ+MxsHn2fWnwLQLCer9_*M}5g)v)$U542pMfuj<)^sMsL0XUjidV18f zCS%>CxZ}&wi=&HyQ~Pxo(HtsX8Z*n++=h9VjVLksQmEyUUisHw#qh<_j zyHQvwn5n~$PHCf%I>=edaWcNlK;m)F4?=`u zSUIze2c7iu;I&-hJA5|w_{SK%Cb*I&b2e)!*48RoQ=Obu&v3^Tds{Nj>Ws2)np)HA z!Wo6j#%1R5Dp5WQbvGl%S;dtiO^R7`Y!dHg6S8lfTh#tYTCz2q^9WY6tm@{AAxojg zi-(IF+C25V4kRLse6=vM9Aq@(CPVHSK?1lH;&MluAz{xtVA@#5j2k1g?;EI=H1`@y z+?A)AJLT6P;r*SKXHI`YW8HIUsfPK+Urb zLas90ytuR*!Y=3LWy5563ERoNFVsu91 zd`&K@dDh6A)_kEDU!6{=5yLckG*j;qC8QbMolP8P45vLOLqlt&n#i{2;xU)9TH{JN zdD-2X7`~Ct&9{@LQ}vEsOHN$Qp%r_JGi9a({w=tM65UT|;l`ubJ;7v}%{b_$rY`~E z4o*?eiUdh_n{qnz87(mEvd*f>i0h6XrpY!nCv|j8g0>Pa@0QS$GneQ3Z?3IT|^N$`6DrNbWtls2z6|Zi!X6}kNhEbjs7t;;rZm}#o z*8bymS%gI~#Ya>di+LvOrg8mhbcVQN7Vl>^KACxfT6W(HOULZ!t)?|qHL}RZiqi;& zRFLEyT*gU@!<(%hm~jzaiOBQLyGIJ|R8-9{thJ<~?zQn^cxN)_Ac7gohTM64Xxu1D z%+EeN>#`nl&vh#C#I`{1hlHXX9PVj|(@f-U$pmsL?`_~(XN*0=W!IRaCKPc+tFFp= zlU!9?WA(6Z-6KZ3m^BOn#TvF1zWZ$pDfGIGc+^*Qads)Cd?Dg7TjRExQEVR=W_C6t z%l8`w-A9+C&wMlLV<7hYyeszx2xO#Zyo_#py?pD~WL=J~PN|)glQ4_ZWP8F5!S^$l zWaVhja#}*@m9-vth?8jo)_3yRn1YUd%L{4~WR+%bk;LBU$3!gR-QlCmz@(2RXR0)s zL>owr1@1cx=4_1hT}+G0^^TWCu^w^kc%)T1f@+Ex_g+N=GwIWbt$~S1JD_q7Ty7E5 zNZA#L+p`Tg)jFc_R*1}sDqTB|WDd-V9;Bi!>36arQa2EXty()^J?Spum79)Af;x@f zD=2Ik3^`FIAnWMq$**9HdLzdzAo9}Qc$YN~ z)>?V;#RNp=)%viBAdHfjbo`mBIr`04S3aWQm}E2y3RBo^2$Nn7 z!x@I0izgsxqJ4r=TA|3(xYwM~VQa9gsxlLN7!SGSCjE%tot|FLVuR#kD3RdbeDhbwDXoJZXU=UJD55T|b5?sH%r0!Z#Uvi2 zXNqA#?TcZ>3}BqvtCd-6k7dSZmg4NVld4OG@@CU%%*e&MN-nQd7Y+YX*Ww^Z1%WsX* zP+DY6LGkW9coiYr>N##Cn>Q}oZ5L>9F;$(ZijFZo!Ohn(BS84KU%JV`?+1KrFkNmu zE$-HQPOMBtA^G5_g+;V+dW$A3Su0gk3bD+zrg4i#L#xcCsN8#ts-R61EYOG!6q~k= z;cQ9JI8{}uhMDf%bxzDGvo#q*B*IxPt>aqZrrsJ8%SM?($(zLa5f6q{qw|uyG9Jvh t^qCHM6P_BQ#Mm}wXPC^X^Evk10a){VB;NyRfX&4qUj0hC$O9G;*Y(o0P)Xuq{y&3>>)KCS4M179>z|&6G5t;rK2ft!6X3o8JGgUN!!)=DaT&L{?ScNj55m}Oe(P@W4*fpa`w&TE+L_s zt-a=}M3LnKBKhli6&5>EWv^+0{Ws1Wq}Xx6FrS8U;GMeVGRkz*R(9!-q+J*3QpOH5pyj$tvBV?he_$Hs;Fns4G+TIUXqH?tYcp-ge5fVN;d^DAY98LT z+hb{*;!eVr737A*?J2og3!8nJ<|c9QoWl2b$#(5zH%yPmTo&HLnUb>vY{XcG06sqq z%*4{{lg~OqUJr%4TL?Rwtk7FxZaAK z-)xO@R$#(*h9JgdH5B%YEoYjs>CLu73Nn1jF@{mJT-yhOtjrdU3#jBjdMi55GL>9x z^{&QtjuVt1WyVvJFPCWb6v@qvHV*_=Rv(llIWIE1RYdTj`Hepb8xGeXznsl+XS4SG-tz_ zT!$U7w2R14L6%{yH25>Y0=T6nN2IQ2VmlgLcytgtAdW<36#1siO(Uvt+ERN=*J8P; z*v6eVb|{vGzUr7pXFoA!TjY85U0aIkNR}l=wX&~I5}?9FU6s6c^_GYz(~z{)L6K9} zQHGfEjfs+zV5;Y};IS+-g0q?pBBogw@ualcc)MQSMA$K8ls^zWJxGM31|NoENJ*jI ze6bkXIJ91DX4=`0ZLI2&rB_v47&JvQ!#McZA`Bw%;WIavaIA-8QDn%;ovx~93lnd= zA09j*Nn?G9&#e{pK>64xFE7$>!=m7BAfBTPHlpF!iPeQf=24|Ug|hl-2#HrXlvKS_ z359q>URgdMa)q}nLT9WyhRYRIC@!n3MOf%wra8Rr28!{b2lkqlYpo^oY5I8zg?`K) z3*FhGf@H^LvN*y}=R6e!yYp#W*ojX%Q}UP?s>qK=Iwfb4!n9@?>iM4vtan|S>M0^c zBTI2lZ&>Mp*sj+u_pi$$2*=CotD4evt{kyvzB~k9NdsDXcA2A!Z=OD%FDUr3w`TKq z(QD0Uk3JYMg)wA(OD9KpVg08OvdFm`A*k3hYVPA$l+@HF))HyKl=;TCdL-tuI*E)r zAjWYO=&vjzTIM4dk?@S3Aa`am*q3=UUE*6X=@%qWqHta0{9{nPId0HmlGweig`ARl zB|PV8X0_1`eXvxHhI)7)&3=-nYK<9s#^R%)ZfU)}8ff^>TM}_x)t1R-A)V=E9K#rW z?*Q8qw>c3obO@~~&%Wh{9Wv$9WJ@T-NYAovjf~Qw2+oR{U0Z&Wt}+u&mwlU7nW?iz zsn2rtn}p2Qt8jH$$8V_~v10Ajnr%x{R5Z1#A@Et`Dw5dVT&#+1Z0%?xxt;4!s%q&O zWIOXlh<-x9I)etMHkPWj7p4mwti8O_J%&2L4&=wOha0eQxU^MJ$ksSt1)8@axJ?ojG8Xl1bm3Ni0USSKjbgxsu z^+}|NSq<;K*<}e`y~zhfPL6v&r)$5`}+84;NCjkan=LLiQ&3Xfo-ud8U%2Y9n4-AwAEy_{N%!tA_$#QWzM zQ*7lh+Xr1hDOEjdF5+Oq@uKPP%|4rot<#j|sJ5+MZl?B0!|E_c9Z_=zmYpGTIt4Rk zjG`OSw8(g?V$L5RRWY5Fjoy-XB*x|B_}Q?!S-NgXqM^HPHxpN|zmI;m^Krip#HE}s zv^bNt6>ZjY#;enmpx~(3j4q$d-N!{3ap$5YYq44I*i5T6AI}I8iNo z1T z?QPi=j_jvnD_`4u^7E~jb5^v!H=lHYi}u)(TQ05*dZ;HoF!5Ui7lk^4pL1(W7PVE* zVlARzNm?w|lxgbg9JWQY +#include +#include +#include + +#include + +static double xc_trial_points[][5] = { + /* rhoa rhob sigmaaa sigmaab sigmabb */ + {0.17E+01, 0.17E+01, 0.81E-11, 0.81E-11, 0.81E-11}, + {0.17E+01, 0.17E+01, 0.17E+01, 0.17E+01, 0.17E+01}, + {0.15E+01, 0.15E+01, 0.36E+02, 0.36E+02, 0.36E+02}, + {0.88E-01, 0.88E-01, 0.87E-01, 0.87E-01, 0.87E-01}, + {0.18E+04, 0.18E+04, 0.55E+00, 0.55E+00, 0.55E+00}, + {0.18E+04, 0.18E+04, 0.86E+04, 0.86E+04, 0.86E+04}, + {0.16E+04, 0.16E+04, 0.37E+10, 0.37E+10, 0.37E+10}, + {0.26E+00, 0.26E+00, 0.28E+00, 0.28E+00, 0.28E+00}, + {0.53E+05, 0.53E+05, 0.96E+05, 0.96E+05, 0.96E+05}, + {0.47E+05, 0.47E+05, 0.29E+14, 0.29E+14, 0.29E+14}, + {0.15E+00, 0.15E+00, 0.16E+00, 0.16E+00, 0.16E+00}, + {0.35E+01, 0.00E+00, 0.46E-10, 0.00E+00, 0.00E+00}, + {0.35E+01, 0.00E+00, 0.34E+01, 0.00E+00, 0.00E+00}, + {0.30E+01, 0.00E+00, 0.20E+03, 0.00E+00, 0.00E+00}, + {0.58E-01, 0.00E+00, 0.47E-01, 0.00E+00, 0.00E+00}, + {0.82E+02, 0.81E+02, 0.49E+07, 0.49E+07, 0.49E+07}, + {0.39E+02, 0.38E+02, 0.81E+06, 0.82E+06, 0.82E+06}, + {0.13E+00, 0.95E-01, 0.15E+00, 0.18E+00, 0.22E+00}, + {0.78E-01, 0.31E-01, 0.41E-02, 0.38E-02, 0.36E-02}, + {0.50E+02, 0.49E+02, 0.11E+06, 0.11E+06, 0.11E+06}, + {0.40E+02, 0.40E+02, 0.99E+05, 0.98E+05, 0.98E+05}, + {0.12E+00, 0.10E+00, 0.12E+00, 0.13E+00, 0.14E+00}, + {0.48E-01, 0.25E-01, 0.46E-02, 0.44E-02, 0.41E-02}, + {0.0, 0.0, 0.0, 0.0, 0.0} +}; + + +int nspin; + +void get_val(double point[5], double val[5]) +{ + if(nspin == 1){ + val[0] = point[0] + point[1]; + val[1] = 0; + val[2] = point[2] + 2*point[3] + point[4]; + val[3] = 0; + val[4] = 0; + }else{ + int i; + for(i=0; i<5; i++){ + val[i] = point[i]; + } + } +} + +double get_point(xc_func_type *func, double point[5], double *e, double der[5], int which) +{ + switch(func->info->family) + { + case XC_FAMILY_LDA: + xc_lda_exc_vxc(func, 1, &(point[0]), e, &(der[0])); + break; + case XC_FAMILY_GGA: + case XC_FAMILY_HYB_GGA: + xc_gga_exc_vxc(func, 1, &(point[0]), &(point[2]), + e, &(der[0]), &(der[2])); + break; + } + + if(which == 0) + return (*e)*(point[0] + point[1]); + else + return der[which-1]; +} + +void get_vxc(xc_func_type *func, double point[5], double *e, double der[5]) +{ + get_point(func, point, e, der, 0); +} + +void get_fxc(xc_func_type *func, double point[5], double der[5][5]) +{ + double v2rho[3], v2rhosigma[6], v2sigma[6]; + int i, j; + + for(i=0; i<5; i++) + for(j=0; j<5; j++) + der[i][j] = 0.0; + + for(i=0; i<3; i++) v2rho[i] = 0.0; + for(i=0; i<6; i++){ + v2rhosigma[i] = 0.0; + v2sigma[i] = 0.0; + } + + switch(func->info->family) + { + case XC_FAMILY_LDA: + xc_lda_fxc(func, 1, &(point[0]), v2rho); + break; + case XC_FAMILY_GGA: + case XC_FAMILY_HYB_GGA: + xc_gga_fxc(func, 1, &(point[0]), &(point[2]), + v2rho, v2rhosigma, v2sigma); + break; + } + + der[0][0] = v2rho[0]; + der[0][1] = der[1][0] = v2rho[1]; + der[1][1] = v2rho[2]; + der[0][2] = der[2][0] = v2rhosigma[0]; + der[0][3] = der[3][0] = v2rhosigma[1]; + der[0][4] = der[4][0] = v2rhosigma[2]; + der[1][2] = der[2][1] = v2rhosigma[3]; + der[1][3] = der[3][1] = v2rhosigma[4]; + der[1][4] = der[4][1] = v2rhosigma[5]; + der[2][2] = v2sigma[0]; + der[2][3] = der[3][2] = v2sigma[1]; + der[2][4] = der[4][2] = v2sigma[2]; + der[3][3] = v2sigma[3]; + der[3][4] = der[4][3] = v2sigma[4]; + der[4][4] = v2sigma[5]; +} + +void first_derivative(xc_func_type *func, double point[5], double der[5], int which) +{ + int i; + + for(i=0; i<5; i++){ + const double delta = 5e-10; + + double dd, p[5], v[5]; + int j; + + if(nspin==1 && (i!=0 && i!=2)){ + der[i] = 0.0; + continue; + } + + dd = point[i]*delta; + if(dd < delta) dd = delta; + + for(j=0; j<5; j++) p[j] = point[j]; + + if(point[i]>=3.0*dd){ /* centered difference */ + double e, em1, em2, ep1, ep2; + + p[i] = point[i] + dd; + ep1 = get_point(func, p, &e, v, which); + + p[i] = point[i] + 2*dd; + ep2 = get_point(func, p, &e, v, which); + + p[i] = point[i] - dd; /* backward point */ + em1 = get_point(func, p, &e, v, which); + + p[i] = point[i] - 2*dd; /* backward point */ + em2 = get_point(func, p, &e, v, which); + + der[i] = 1.0/2.0*(ep1 - em1); + der[i] += 1.0/12.0*(em2 - 2*em1 + 2*ep1 - ep2); + + der[i] /= dd; + + }else{ /* we use a 5 point forward difference */ + double e, e1, e2, e3, e4, e5; + + p[i] = point[i]; + e1 = get_point(func, p, &e, v, which); + + p[i] = point[i] + dd; + e2 = get_point(func, p, &e, v, which); + + p[i] = point[i] + 2.0*dd; + e3 = get_point(func, p, &e, v, which); + + p[i] = point[i] + 3.0*dd; + e4 = get_point(func, p, &e, v, which); + + p[i] = point[i] + 4.0*dd; + e5 = get_point(func, p, &e, v, which); + + der[i] = (-e1 + e2); + der[i] -= 1.0/2.0*( e1 - 2*e2 + e3); + der[i] += 1.0/3.0*(-e1 + 3*e2 - 3*e3 + e4); + der[i] -= 1.0/4.0*( e1 - 4*e2 + 6*e3 - 4*e4 + e5); + + der[i] /= dd; + } + } +} + +void second_derivatives(xc_func_type *func, double point[5], double der[5][5]) +{ + int i; + + for(i=0; i<5; i++){ + first_derivative(func, point, der[i], i+1); + } +} + + +void print_error(char *type, char *what, double diff, xc_func_type *func, double *p) +{ + static char *red="\033[31;1m", *norm="\033[0m"; + char *color; + + color = (diff > 5e-4) ? red : norm; + + printf("%s error %s: %s%g%s\n", type, what, color, diff, norm); + + if(func == NULL) return; + + printf(" point (% 8.2e, % 8.2e, % 8.2e, % 8.2e, % 8.2e)\n", + p[0], p[1], p[2], p[3], p[4]); + + if(strcmp(what, "vrho")==0 || strcmp(what, "vsig")==0){ + double e, v_an[5], v_fd[5]; + int j; + + for(j=0; j<5; j++) + v_fd[j] = v_an[j] = 0.0; + + get_vxc(func, p, &e, v_an); + first_derivative(func, p, v_fd, 0); + + if(strcmp(what, "vrho") == 0){ + printf(" analyt (% 8.2e, % 8.2e)\n", v_an[0], v_an[1]); + printf(" fd (% 8.2e, % 8.2e)\n", v_fd[0], v_fd[1]); + } + + if(strcmp(what, "vsig") == 0){ + printf(" analyt (% 8.2e, % 8.2e, % 8.2e)\n", v_an[2], v_an[3], v_an[4]); + printf(" fd (% 8.2e, % 8.2e, % 8.2e)\n", v_fd[2], v_fd[3], v_fd[4]); + } + } + + if(strcmp(what, "v2rho2")==0 || strcmp(what, "v2rhosig")==0 || strcmp(what, "v2sig2")==0){ + double f_an[5][5], f_fd[5][5]; + + get_fxc(func, p, f_an); + second_derivatives(func, p, f_fd); + + if(strcmp(what, "v2rho2") == 0){ + printf(" analyt (% 8.2e, % 8.2e, % 8.2e)\n", f_an[0][0], f_an[0][1], f_an[1][1]); + printf(" fd (% 8.2e, % 8.2e, % 8.2e)\n", f_fd[0][0], f_fd[0][1], f_fd[1][1]); + } + + if(strcmp(what, "v2rhosig") == 0){ + printf(" analyt (% 8.2e, % 8.2e, % 8.2e, % 8.2e, % 8.2e, % 8.2e)\n", + f_an[2][0], f_an[3][0], f_an[4][0], f_an[2][1], f_an[3][1], f_an[4][1]); + printf(" fd (% 8.2e, % 8.2e, % 8.2e, % 8.2e, % 8.2e, % 8.2e)\n", + f_fd[2][0], f_fd[3][0], f_fd[4][0], f_fd[2][1], f_fd[3][1], f_fd[4][1]); + } + + if(strcmp(what, "v2sig2") == 0){ + printf(" analyt (% 8.2e, % 8.2e, % 8.2e, % 8.2e, % 8.2e, % 8.2e)\n", + f_an[2][2], f_an[3][2], f_an[4][2], f_an[3][3], f_an[4][3], f_an[4][4]); + printf(" fd (% 8.2e, % 8.2e, % 8.2e, % 8.2e, % 8.2e, % 8.2e)\n", + f_fd[2][2], f_fd[3][2], f_fd[4][2], f_fd[3][3], f_fd[4][3], f_fd[4][4]); + } + } + +} + +#if defined(HAVE_FEENABLEEXCEPT) +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include +#endif + +void test_functional(int functional) +{ + xc_func_type func; + const xc_func_info_type *info; + int i, j, k, p_max[6][5]; + double max_diff[6][5], avg_diff[6][5], val[5]; + +#if defined(HAVE_FEENABLEEXCEPT) + feenableexcept(FE_INVALID | FE_OVERFLOW); +#endif + + /* initialize functional */ + if(xc_func_init(&func, functional, nspin) != 0){ + fprintf(stderr, "Functional '%d' not found\n", functional); + exit(1); + } + + info = func.info; + + if(functional == XC_LDA_C_2D_PRM) + xc_lda_c_2d_prm_set_params(&func, 10.0); + + for(k=0; k<6; k++) + for(j=0; j<5; j++){ + avg_diff[k][j] = 0.0; + + p_max[k][j] = 0; + max_diff[k][j] = -1.0; + } + + for(i=0; xc_trial_points[i][0]!=0.0; i++){ + double e, v_fd[5], f_fd[5][5], v_an[5], f_an[5][5]; + + for(j=0; j<5; j++) + v_fd[j] = v_an[j] = 0.0; + + get_val(xc_trial_points[i], val); + + /* first, get the analytic gradients */ + get_vxc(&func, val, &e, v_an); + + /* now get the numerical gradients */ + first_derivative(&func, val, v_fd, 0); + + if(info->flags & XC_FLAGS_HAVE_FXC){ + /* initialize */ + for(k=0; k<5; k++) + for(j=0; j<5; j++) + f_an[k][j] = f_fd[k][j] = 0.0; + + /* now get the second derivatives */ + second_derivatives(&func, val, f_fd); + get_fxc(&func, val, f_an); + } + + /* make statistics */ + for(j=0; j<5; j++){ + double diff = fabs(v_an[j] - v_fd[j]); + + /* do not test in case of spin unpolarized or if spin down is zero */ + if((nspin==1 || val[1]==0.0) && (j!=0 && j!=2)) + continue; + + avg_diff[0][j] += diff; + if(diff > max_diff[0][j]){ + max_diff[0][j] = diff; + p_max[0][j] = i; + } + + if(info->flags & XC_FLAGS_HAVE_FXC){ + for(k=0; k<5; k++){ + /* do not test in case of spin unpolarized or if spin down is zero */ + if((nspin==1 || val[1]==0.0) && (k!=0 && k!=2)) + continue; + + diff = fabs(f_an[k][j] - f_fd[k][j]); + + avg_diff[k+1][j] += diff; + if(diff > max_diff[k+1][j]){ + max_diff[k+1][j] = diff; + p_max[k+1][j] = i; + } + } + } + } + + } + + for(k=0; k<6; k++) + for(j=0; j<5; j++){ + avg_diff[k][j] /= i; + } + + /* print statistics */ + { + double diff; + + printf("Functional: %s\n", info->name); + print_error("Avg.", "vrho", (avg_diff[0][0] + avg_diff[0][1])/2.0, NULL, NULL); + j = (max_diff[0][0] > max_diff[0][1]) ? 0 : 1; + get_val(xc_trial_points[p_max[0][j]], val); + print_error("Max.", "vrho", max_diff[0][j], &func, val); + + if(info->family > XC_FAMILY_LDA){ + print_error("Avg.", "vsig", (avg_diff[0][2] + avg_diff[0][3] + avg_diff[0][4])/3.0, NULL, NULL); + j = (max_diff[0][2] > max_diff[0][3]) ? 2 : 3; + j = (max_diff[0][j] > max_diff[0][4]) ? j : 4; + get_val(xc_trial_points[p_max[0][j]], val); + print_error("Max.", "vsig", max_diff[0][j], &func, val); + } + + if(info->flags & XC_FLAGS_HAVE_FXC){ + diff = avg_diff[1][0] + avg_diff[1][1] + avg_diff[2][1]; + diff = diff/3.0; + print_error("Avg.", "v2rho2", diff, NULL, NULL); + if(max_diff[1][0] > max_diff[1][1]) {i=1; j=0;} else {i=1; j=1;} + if(max_diff[2][1] > max_diff[i][j]) {i=2; j=1;} + get_val(xc_trial_points[p_max[i][j]], val); + print_error("Max.", "v2rho2", max_diff[i][j], &func, val); + + if(info->family > XC_FAMILY_LDA){ + diff = avg_diff[3][0] + avg_diff[4][0] + avg_diff[5][0] + avg_diff[3][1] + avg_diff[4][1] + avg_diff[5][1]; + diff = diff/6.0; + print_error("Avg.", "v2rhosig", diff, NULL, NULL); + if(max_diff[3][0] > max_diff[4][0]) {i=3; j=0;} else {i=4; j=0;} + if(max_diff[5][0] > max_diff[i][j]) {i=5; j=0;} + if(max_diff[3][1] > max_diff[i][j]) {i=3; j=1;} + if(max_diff[4][1] > max_diff[i][j]) {i=4; j=1;} + if(max_diff[5][1] > max_diff[i][j]) {i=5; j=1;} + get_val(xc_trial_points[p_max[i][j]], val); + print_error("Max.", "v2rhosig", max_diff[i][j], &func, val); + + diff = avg_diff[3][2] + avg_diff[4][2] + avg_diff[5][2] + avg_diff[4][3] + avg_diff[5][3] + avg_diff[5][4]; + diff = diff/6.0; + print_error("Avg.", "v2sig2", diff, NULL, NULL); + if(max_diff[3][2] > max_diff[4][2]) {i=3; j=2;} else {i=4; j=2;} + if(max_diff[5][2] > max_diff[i][j]) {i=5; j=2;} + if(max_diff[4][3] > max_diff[i][j]) {i=4; j=3;} + if(max_diff[5][3] > max_diff[i][j]) {i=5; j=3;} + if(max_diff[5][4] > max_diff[i][j]) {i=5; j=4;} + get_val(xc_trial_points[p_max[i][j]], val); + print_error("Max.", "v2sig2", max_diff[i][j], &func, val); + } + } + } + + xc_func_end(&func); +} + +/*----------------------------------------------------------*/ +int main(int argc, char *argv[]) +{ + if(argc != 2){ + printf("Usage:\n%s funct\n", argv[0]); + return 1; + } + + printf("------------------------\nNspin = 1\n"); + nspin = 1; + test_functional(atoi(argv[1])); + + printf("------------------------\nNspin = 2\n"); + nspin = 2; + test_functional(atoi(argv[1])); + + return 0; +} diff --git a/libxc/testsuite/xc-error.c b/libxc/testsuite/xc-error.c new file mode 100644 index 000000000..c84001844 --- /dev/null +++ b/libxc/testsuite/xc-error.c @@ -0,0 +1,241 @@ +/* + Copyright (C) 2014 Susi Lehtola + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include +#include +#include "xc_config.h" + +/* Buffer size */ +#define BUFSIZE 4096 + +/* Max amount of columns in data */ +#define MAXCOL 100 +/* Legend entry length */ +#define LEGLEN 20 + +#define error_exit() fclose(in); \ + fclose(ref); \ + exit(1); + +#define in_line() cp=fgets(buf,BUFSIZE,in); \ + if(cp!=buf) { \ + fprintf(stderr,"Error reading line from input file.\n"); \ + error_exit(); \ + } + +#define ref_line() cp=fgets(buf,BUFSIZE,ref); \ + if(cp!=buf) { \ + fprintf(stderr,"Error reading line from reference file.\n"); \ + error_exit(); \ + } + +FLOAT maxabs(FLOAT x, FLOAT y) { + return ABS(x)>ABS(y) ? ABS(x) : ABS(y); +} + +FLOAT error(FLOAT x, FLOAT y) { + return ABS(x-y)/(1.0+maxabs(x,y)); +} + +int main(int argc, char **argv) { + /* Input file and reference */ + FILE *in; + FILE *ref; + + /* Functional IDs */ + int fidin, fidref; + + /* Sizes of input and reference */ + int nin, nref; + + /* Amount of columns read in */ + int cin, cref; + + /* Input buffer */ + char buf[BUFSIZE]; + char *cp; + int cur, nread; + + /* Loop indices */ + int i, j; + + /* Input and reference data */ + FLOAT din[MAXCOL], dref[MAXCOL]; + /* Column legends */ + char legin[MAXCOL][LEGLEN], legref[MAXCOL][LEGLEN]; + + /* Maximum difference between input and output */ + FLOAT maxdiff[MAXCOL]; + + if(argc!=3 && argc!=4) { + printf("Usage: %s file reference (verbose)\n",argv[0]); + return 1; + } + + /* Open files */ + in=fopen(argv[1],"r"); + if(!in) { + fprintf(stderr,"Error opening input file.\n"); + exit(1); + } + + ref=fopen(argv[2],"r"); + if(!ref) { + fprintf(stderr,"Error opening reference file.\n"); + exit(1); + } + + /* Read first line: functional id and file length */ + in_line(); + if(sscanf(buf,"%i %i",&fidin,&nin)!=2) { + fprintf(stderr,"Error reading func_id and file size from input file.\n"); + error_exit(); + } + + ref_line(); + if(sscanf(buf,"%i %i",&fidref,&nref)!=2) { + fprintf(stderr,"Error reading func_id and file size from input file.\n"); + error_exit(); + } + + if(fidin!=fidref) { + fprintf(stderr,"Functional ids %i and %i don't match!\n",fidin,fidref); + error_exit(); + } + + if(nin!=nref) { + fprintf(stderr,"Sizes of files %i and %i don't match!\n",nin,nref); + error_exit(); + } + + /* Read in legends */ + in_line(); + cin=0; + cur=0; + while(sscanf(buf+cur,"%s%n",legin[cin],&nread)==1) { + cin++; + cur+=nread; + + if(cin==MAXCOL) { + fprintf(stderr,"Array overflow. Increase MAXCOL.\n"); + error_exit(); + } + } + + ref_line(); + cref=0; + cur=0; + while(sscanf(buf+cur,"%s%n",legref[cref],&nread)==1) { + cref++; + cur+=nread; + + if(cref==MAXCOL) { + fprintf(stderr,"Array overflow. Increase MAXCOL.\n"); + error_exit(); + } + } + + /* Compare legends */ + if(cin != cref) { + fprintf(stderr,"Amount if columns doesn't match: input %i, reference %i.\n",cin,cref); + error_exit(); + } + for(i=0;i maxdiff[j]) + maxdiff[j]=error(din[j],dref[j]); + } + + fclose(in); + fclose(ref); + + if(argc==4 && atoi(argv[3])) { + /* Verbose operation */ + for(i=0;imax) + max=maxdiff[j]; + + printf("%i\n",max<=tol); + } + + return 0; +} diff --git a/libxc/testsuite/xc-get_data.c b/libxc/testsuite/xc-get_data.c new file mode 100644 index 000000000..082ae67dc --- /dev/null +++ b/libxc/testsuite/xc-get_data.c @@ -0,0 +1,282 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +#include + +/* xc_config.h needs to be included to use FLOAT and related macros*/ +#include "xc_config.h" + +typedef struct { + int functional; + int nspin; + + /* Input */ + double rho[2]; /* rhoa, rhob */ + double sigma[3]; /* sigmaaa, sigmaab, sigmabb */ + double lapl[2]; /* lapla, laplb */ + double tau[2]; /* taua, taub */ + + /* Energy */ + double zk; /* energy density per unit particle */ + + /* First derivatives */ + double vrho[2]; /* vrhoa, vrhob */ + double vsigma[3]; /* vsigmaaa, vsigmaab, vsigmabb */ + double vlapl[2]; /* vlapla, vlaplb */ + double vtau[2]; /* vtaua, vtaub */ + + /* Second derivatives */ + double v2rho2[3]; /* v2rhoa2, v2rhoab, v2rhob2 */ + double v2rhosigma[6]; /* v2rhoasigmaaa, v2rhoasigmaab, v2rhoasigmabb + v2rhobsigmaaa, v2rhobsigmaab, v2rhobsigmabb */ + double v2rholapl[3]; /* */ + double v2rhotau[3]; /* */ + double v2sigma2[6]; /* v2sigmaaa2, v2sigmaaaab, v2sigmaaabb + v2sigmaab2, v2sigmaabbb, v2sigmabb2 */ + double v2sigmalapl[6]; /* v2sigmaaalapla, v2sigmaaalaplb, + v2sigmaablapla, v2sigmaablaplb, + v2sigmabblapla, v2sigmabblaplb */ + double v2sigmatau[6]; /* v2sigmaaataua, v2sigmaaataub, + v2sigmaabtaua, v2sigmaabtaub, + v2sigmabbtaua, v2sigmabbtaub */ + double v2lapl2[3]; /* v2lapla2, v2laplab, v2laplb2 */ + double v2lapltau[3]; /* */ + double v2tau2[3]; /* v2taua2, v2tauab, v2taub2 */ + + /* Third derivatives */ + double v3rho3[4]; /* v3rhoaaa, v3rhoaab, v3rhoabb, v3rhobbb */ + +} xc_values_type; + +/*----------------------------------------------------------*/ +void init_values(xc_values_type *xc_values, char *argv[]) +{ + int i; + + xc_values->functional = atoi(argv[1]); + xc_values->nspin = atoi(argv[2]); + xc_values->rho[0] = atof(argv[3]); + xc_values->rho[1] = atof(argv[4]); + xc_values->sigma[0] = atof(argv[5]); + xc_values->sigma[1] = atof(argv[6]); + xc_values->sigma[2] = atof(argv[7]); + xc_values->lapl[0] = atof(argv[8]); + xc_values->lapl[1] = atof(argv[9]); + xc_values->tau[0] = atof(argv[10]); + xc_values->tau[1] = atof(argv[11]); + + xc_values->zk = 0; + + for(i=0; i<2; i++){ + xc_values->vrho[i] = 0; + xc_values->vlapl[i] = 0; + xc_values->vtau[i] = 0; + } + + for(i=0; i<3; i++){ + xc_values->vsigma[i] = 0; + xc_values->v2rho2[i] = 0; + xc_values->v2lapl2[i] = 0; + xc_values->v2tau2[i] = 0; + xc_values->v2rholapl[i] = 0; + xc_values->v2rhotau[i] = 0; + xc_values->v2lapltau[i] = 0; + } + + for(i=0; i<4; i++){ + xc_values->v3rho3[i] = 0; + } + + for(i=0; i<6; i++){ + xc_values->v2rhosigma[i] = 0; + xc_values->v2sigma2[i] = 0; + xc_values->v2sigmalapl[i] = 0; + xc_values->v2sigmatau[i] = 0; + } +} + + +/*----------------------------------------------------------*/ +void print_values(xc_values_type *xc) +{ + /*int family = xc_family_from_id(xc->functional, NULL, NULL);*/ + + printf(" rhoa= %#0.2E rhob= %#0.2E sigmaaa= %#0.2E sigmaab= %#0.2E sigmabb= %#0.2E lapla= %#0.2E laplb= %#0.2E taua= %#0.2E taub= %#0.2E\n\n", + xc->rho[0], xc->rho[1], + xc->sigma[0], xc->sigma[1], xc->sigma[2], + xc->lapl[0], xc->lapl[1], + xc->tau[0], xc->tau[1]); + printf(" zk = %#19.12E\n\n", + xc->zk); + printf(" vrhoa = %#19.12E\n" + " vrhob = %#19.12E\n" + " vsigmaaa = %#19.12E\n" + " vsigmaab = %#19.12E\n" + " vsigmabb = %#19.12E\n" + " vlapla = %#19.12E\n" + " vlaplb = %#19.12E\n" + " vtaua = %#19.12E\n" + " vtaub = %#19.12E\n\n", + xc->vrho[0], xc->vrho[1], + xc->vsigma[0], xc->vsigma[1], xc->vsigma[2], + xc->vlapl[0], xc->vlapl[1], + xc->vtau[0], xc->vtau[1]); + + printf(" v2rhoa2 = %#19.12E\n" + " v2rhoab = %#19.12E\n" + " v2rhob2 = %#19.12E\n" + " v2rhoasigmaaa = %#19.12E\n" + " v2rhoasigmaab = %#19.12E\n" + " v2rhoasigmabb = %#19.12E\n" + " v2rhobsigmaaa = %#19.12E\n" + " v2rhobsigmaab = %#19.12E\n" + " v2rhobsigmabb = %#19.12E\n" + " v2sigmaaa2 = %#19.12E\n" + " v2sigmaaaab = %#19.12E\n" + " v2sigmaaabb = %#19.12E\n" + " v2sigmaab2 = %#19.12E\n" + " v2sigmaabbb = %#19.12E\n" + " v2sigmabb2 = %#19.12E\n\n", + xc->v2rho2[0], xc->v2rho2[1], xc->v2rho2[2], + xc->v2rhosigma[0], xc->v2rhosigma[1], xc->v2rhosigma[2], + xc->v2rhosigma[3], xc->v2rhosigma[4], xc->v2rhosigma[5], + xc->v2sigma2[0], xc->v2sigma2[1], xc->v2sigma2[2], + xc->v2sigma2[3], xc->v2sigma2[4], xc->v2sigma2[5] + ); + printf(" v3rhoa3 = %#19.12E\n" + " v2rhoaab = %#19.12E\n" + " v2rhoabb = %#19.12E\n" + " v2rhob3 = %#19.12E\n\n", + xc->v3rho3[0], xc->v3rho3[1], xc->v3rho3[2], xc->v3rho3[3] + ); + +} + + +/*----------------------------------------------------------*/ +int main(int argc, char *argv[]) +{ + xc_values_type xc; + xc_func_type func; + const xc_func_info_type *info; + + FLOAT *pzk = NULL; + FLOAT *pvrho = NULL; + FLOAT *pvsigma = NULL; + FLOAT *pvlapl = NULL; + FLOAT *pvtau = NULL; + FLOAT *pv2rho2 = NULL; + FLOAT *pv2rhosigma = NULL; + FLOAT *pv2rholapl = NULL; + FLOAT *pv2rhotau = NULL; + FLOAT *pv2sigma2 = NULL; + FLOAT *pv2sigmalapl = NULL; + FLOAT *pv2sigmatau = NULL; + FLOAT *pv2lapl2 = NULL; + FLOAT *pv2lapltau = NULL; + FLOAT *pv2tau2 = NULL; + FLOAT *pv3rho3 = NULL; + + if(argc != 12){ + printf("Usage:\n%s funct pol rhoa rhob sigmaaa sigmaab sigmabb lapla laplb taua taub\n", argv[0]); + return 1; + } + + init_values(&xc, argv); + + if(xc.nspin == 1){ + xc.rho[0] += xc.rho[1]; + xc.sigma[0] += 2.0*xc.sigma[1] + xc.sigma[2]; + xc.lapl[0] += xc.lapl[1]; + xc.tau[0] += xc.tau[1]; + } + + if(xc_func_init(&func, xc.functional, xc.nspin) != 0){ + fprintf(stderr, "Functional '%d' not found\n", xc.functional); + exit(1); + } + info = func.info; + + if(info->flags & XC_FLAGS_HAVE_EXC){ + pzk = &xc.zk; + } + if(info->flags & XC_FLAGS_HAVE_VXC){ + pvrho = xc.vrho; + pvsigma = xc.vsigma; + pvlapl = xc.vlapl; + pvtau = xc.vtau; + } + if(info->flags & XC_FLAGS_HAVE_FXC){ + pv2rho2 = xc.v2rho2; + pv2rhosigma = xc.v2rhosigma; + pv2rholapl = xc.v2rholapl; + pv2rhotau = xc.v2rhotau; + pv2sigma2 = xc.v2sigma2; + pv2sigmalapl = xc.v2sigmalapl; + pv2sigmatau = xc.v2sigmatau; + pv2lapl2 = xc.v2lapl2; + pv2lapltau = xc.v2lapltau; + pv2tau2 = xc.v2tau2; + } + if(info->flags & XC_FLAGS_HAVE_KXC){ + pv3rho3 = xc.v3rho3; + } + + switch(func.info->family) + { + case XC_FAMILY_LDA: + xc_lda(&func, 1, xc.rho, pzk, pvrho, pv2rho2, pv3rho3); + break; + + case XC_FAMILY_GGA: + case XC_FAMILY_HYB_GGA: + xc_gga(&func, 1, xc.rho, xc.sigma, + pzk, pvrho, pvsigma, pv2rho2, pv2rhosigma, pv2sigma2, NULL, NULL, NULL, NULL); + break; + + case XC_FAMILY_MGGA: + case XC_FAMILY_HYB_MGGA: + xc_mgga(&func, 1, xc.rho, xc.sigma, xc.lapl, xc.tau, + pzk, pvrho, pvsigma, pvlapl, pvtau, + pv2rho2, pv2sigma2, pv2lapl2, pv2tau2, pv2rhosigma, pv2rholapl, pv2rhotau, pv2sigmalapl, pv2sigmatau, pv2lapltau); + break; + + default: + fprintf(stderr,"Family %i not supported by xc-get_data.\nEnding program.\n",func.info->family); + exit(1); + } + + + xc_func_end(&func); + + if(xc.nspin == 1){ + xc.zk *= xc.rho[0]; + }else{ + xc.zk *= (xc.rho[0] + xc.rho[1]); + } + + + print_values(&xc); + + return 0; +} + diff --git a/libxc/testsuite/xc-reference.pl b/libxc/testsuite/xc-reference.pl new file mode 100755 index 000000000..3a3ffe531 --- /dev/null +++ b/libxc/testsuite/xc-reference.pl @@ -0,0 +1,185 @@ +#!/usr/bin/env perl + +# Copyright (C) 2006-2007 M.A.L. Marques +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +use Getopt::Std; + +getopts("hf:s:b:"); +$opt_h && usage(); +$opt_f || usage(); + +# Handle options +$top_srcdir = ($opt_s ? $opt_s : ".."); +$top_builddir = ($opt_b ? $opt_b : ".."); +$opt_f =~ s/(.*)/\L$1\E/; + +my $tmp_file = "/tmp/xc.tmp.$$"; +my $exec_cmd = "$top_builddir/testsuite/xc-get_data"; + +# start by reading xc.h to get a list of the defined constants +my %constants; +read_xc_h(\%constants); +$constants{"$opt_f"} || die "Functional '$opt_f' not found"; + +# check if we have a data file +my $data_file = "$top_srcdir/testsuite/df_repo/$opt_f.data"; +(-f $data_file && -r $data_file) || die "Could not read data file '$data_file'"; +open DATA, "<$data_file"; + +my %data, $test_ok, $ntest; +$test_ok = 0; +$ntest = 0; + +while(data_read(*DATA, \%data) != 0){ + my $mpol, @cmp; + + $ntest++; + + $mpol = ($data{"rhoa"} == $data{"rhob"} && + $data{"sigmaaa"} == $data{"sigmabb"} && + $data{"sigmaab"} == $data{"sigmabb"}) ? 1 : 2; + $mpol = 2; + + my $ok; + for($pol=2;$pol>=$mpol; $pol--){ + $cmd1 = "$exec_cmd ".$constants{"$opt_f"}; + $cmd2 = " ".$data{"rhoa"}." ".$data{"rhob"}; + $cmd2 .= " ".$data{"sigmaaa"}." ".$data{"sigmaab"}." ".$data{"sigmabb"}; + `$cmd1 $pol $cmd2 >$tmp_file`; + + open DATA2, "<$tmp_file"; + my %data2; + data_read(*DATA2, \%data2) || die "Could not read data file '$tmp_file'"; + close DATA2; + + @cmp = ("zk", "vrhoa", "vsigmaaa"); + if($data2{"v2rhoa2"} != 0.0){ + push @cmp, ("v2rhoa2", "v2rhoasigmaaa", "v2sigmaaa2"); + } + + if($pol == 1){ + my $tmp = $data{"vsigmaaa"}; + $data{"vsigmaaa"} = ($data{"vsigmaaa"} + $data{"vsigmaab"} + $data{"vsigmabb"})/4.0; + + if($data2{"v2rhoa2"} != 0.0){ + #print $data{"v2rhoa2"}, "\n"; + $data{"v2rhoa2"} = ($data{"v2rhoa2"} + $data{"v2rhoab"} + $data{"v2rhobb"})/2.0; + #print $data{"v2rhoa2"}, "\n"; + } + + $ok = cmp_data(\%data, \%data2, \@cmp); + + $data{"vsigmaaa"} = $tmp; + + }else{ + if($data{"rhob"} != 0.0){ + # compare both up and down channels + push @cmp, ("vrhob", "vsigmaab", "vsigmabb"); + if($data2{"v2rhoa2"} != 0.0){ + push @cmp, ("v2rhoab", "v2rhob2", + "v2rhoasigmaab", "v2rhoasigmabb", "v2rhobsigmaaa", "v2rhobsigmaab", "v2rhobsigmabb", + "v2sigmaaaab", "v2sigmaaabb", "v2sigmaab2", "v2sigmaabbb", "v2sigmabb2"); + } + } + + $ok = cmp_data(\%data, \%data2, \@cmp); + } + } + $ok && $test_ok++; +} +close DATA; +unlink $tmp_file; + +exit ($ntest - $test_ok); + + +########################################### +sub usage { + print <. +EndOfUsage + exit 0; +} + + +########################################### +sub read_xc_h { + my $c = shift; + + open FILE, "<$top_builddir/src/xc_funcs.h"; + while($_ = ){ + if(/^#define +(\S*) +(\S*)/){ + my $name = $1; + my $value = $2; + + $name =~ s/^XC_(.*)/\L$1\E/; + $$c{$name} = $value; + } + } + close FILE; +} + +########################################### +sub data_read { + my ($FILE, $data) = @_; + + while( ($line = <$FILE>) && !($line =~ /rhoa/) ){} + $line || return 0; + + $line =~ / rhoa= (\S*) rhob= (\S*) sigmaaa= (\S*) sigmaab= (\S*) sigmabb= (\S*)/; + $$data{"rhoa"} = $1; + $$data{"rhob"} = $2; + $$data{"sigmaaa"} = $3; + $$data{"sigmaab"} = $4; + $$data{"sigmabb"} = $5; + + my $n = 0; + while($n++ < 24){ + $line = <$FILE> || return 0; + $line =~ /\s*(\S*)\s*=\s*(\S*)/; + $$data{$1} = $2; + } + return 1; +} + +sub cmp_data { + my ($d1, $d2, $what) = @_; + my $tol = 1e-10, $all_ok; + + $all_ok = 1; + foreach $var (@$what){ + $ok = (abs($$d1{$var}) < 1e-15 && abs($$d2{$var}) < 1e-15); + if(!$ok){ + $ok = (abs($$d1{$var} - $$d2{$var}) <= $tol*abs($$d1{$var})); + } + if(!$ok){ + print "$var mismatch: ", $$d1{$var}, " != ", $$d2{$var}, "\n"; + } + $all_ok = $all_ok && $ok; + } + return $all_ok; +} diff --git a/libxc/testsuite/xc-regression.c b/libxc/testsuite/xc-regression.c new file mode 100644 index 000000000..78618545e --- /dev/null +++ b/libxc/testsuite/xc-regression.c @@ -0,0 +1,516 @@ +/* + Copyright (C) 2006-2007 M.A.L. Marques + Copyright (C) 2014 Susi Lehtola + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +#include + +#include +#include + +/* Buffer size (line length) for file reads */ +#define BUFSIZE 1024 + +typedef struct { + /* Amount of data points */ + int n; + + /* Input: density, gradient, laplacian and kinetic energy density */ + FLOAT *rho; + FLOAT *sigma; + FLOAT *lapl; + FLOAT *tau; + + /* Output: energy density and potentials for density, gradient, laplacian and tau */ + FLOAT *zk; + FLOAT *vrho; + FLOAT *vsigma; + FLOAT *vlapl; + FLOAT *vtau; + + /* ... and second derivatives */ + FLOAT *v2rho2; + FLOAT *v2tau2; + FLOAT *v2lapl2; + FLOAT *v2rhotau; + FLOAT *v2rholapl; + FLOAT *v2lapltau; + FLOAT *v2sigma2; + FLOAT *v2rhosigma; + FLOAT *v2sigmatau; + FLOAT *v2sigmalapl; + + /* ... and third derivatives */ + FLOAT *v3rho3; +} values_t; + +void allocate_memory(values_t *data, int nspin) { + switch(nspin) { + case(XC_UNPOLARIZED): + data->rho=calloc(data->n,sizeof(FLOAT)); + data->sigma=calloc(data->n,sizeof(FLOAT)); + data->lapl=calloc(data->n,sizeof(FLOAT)); + data->tau=calloc(data->n,sizeof(FLOAT)); + data->zk=calloc(data->n,sizeof(FLOAT)); + data->vrho=calloc(data->n,sizeof(FLOAT)); + data->vsigma=calloc(data->n,sizeof(FLOAT)); + data->vlapl=calloc(data->n,sizeof(FLOAT)); + data->vtau=calloc(data->n,sizeof(FLOAT)); + data->v2rho2=calloc(data->n,sizeof(FLOAT)); + data->v2tau2=calloc(data->n,sizeof(FLOAT)); + data->v2lapl2=calloc(data->n,sizeof(FLOAT)); + data->v2rhotau=calloc(data->n,sizeof(FLOAT)); + data->v2rholapl=calloc(data->n,sizeof(FLOAT)); + data->v2lapltau=calloc(data->n,sizeof(FLOAT)); + data->v2sigma2=calloc(data->n,sizeof(FLOAT)); + data->v2rhosigma=calloc(data->n,sizeof(FLOAT)); + data->v2sigmatau=calloc(data->n,sizeof(FLOAT)); + data->v2sigmalapl=calloc(data->n,sizeof(FLOAT)); + data->v3rho3=calloc(data->n,sizeof(FLOAT)); + break; + + case(XC_POLARIZED): + data->rho=calloc(2*data->n,sizeof(FLOAT)); + data->sigma=calloc(3*data->n,sizeof(FLOAT)); + data->lapl=calloc(2*data->n,sizeof(FLOAT)); + data->tau=calloc(2*data->n,sizeof(FLOAT)); + data->zk=calloc(data->n,sizeof(FLOAT)); + data->vrho=calloc(2*data->n,sizeof(FLOAT)); + data->vsigma=calloc(3*data->n,sizeof(FLOAT)); + data->vlapl=calloc(2*data->n,sizeof(FLOAT)); + data->vtau=calloc(2*data->n,sizeof(FLOAT)); + data->v2rho2=calloc(3*data->n,sizeof(FLOAT)); + data->v2tau2=calloc(3*data->n,sizeof(FLOAT)); + data->v2lapl2=calloc(3*data->n,sizeof(FLOAT)); + data->v2rhotau=calloc(4*data->n,sizeof(FLOAT)); + data->v2rholapl=calloc(4*data->n,sizeof(FLOAT)); + data->v2lapltau=calloc(4*data->n,sizeof(FLOAT)); + data->v2sigma2=calloc(6*data->n,sizeof(FLOAT)); + data->v2rhosigma=calloc(6*data->n,sizeof(FLOAT)); + data->v2sigmatau=calloc(6*data->n,sizeof(FLOAT)); + data->v2sigmalapl=calloc(6*data->n,sizeof(FLOAT)); + data->v3rho3=calloc(4*data->n,sizeof(FLOAT)); + break; + + default: + fprintf(stderr,"nspin = %i not recognized.\n",nspin); + exit(2); + } +} + +void free_memory(values_t val) { + free(val.rho); + free(val.sigma); + free(val.lapl); + free(val.tau); + free(val.zk); + free(val.vrho); + free(val.vsigma); + free(val.vlapl); + free(val.vtau); + free(val.v2rho2); + free(val.v2tau2); + free(val.v2lapl2); + free(val.v2rhotau); + free(val.v2rholapl); + free(val.v2lapltau); + free(val.v2sigma2); + free(val.v2rhosigma); + free(val.v2sigmatau); + free(val.v2sigmalapl); + free(val.v3rho3); +} + +values_t read_data(const char *file, int nspin) { + /* Format string */ +#ifdef SINGLE_PRECISION + static const char fmt[]="%f %f %f %f %f %f %f %f %f"; +#else + static const char fmt[]="%lf %lf %lf %lf %lf %lf %lf %lf %lf"; +#endif + + /* Data buffer */ + char buf[BUFSIZE]; + char *cp; + /* Input data file */ + FILE *in; + /* Loop index */ + int i; + /* Amount of points succesfully read */ + int nsucc; + /* Returned data */ + values_t data; + + /* Helper variables */ + FLOAT rhoa, rhob; + FLOAT sigmaaa, sigmaab, sigmabb; + FLOAT lapla, laplb; + FLOAT taua, taub; + + /* Open file */ + in=fopen(file,"r"); + if(!in) { + fprintf(stderr,"Error opening input file %s.\n",file); + exit(3); + } + + /* Read amount of data points */ + cp=fgets(buf,BUFSIZE,in); + if(cp!=buf) { + fprintf(stderr,"Error reading amount of data points.\n"); + exit(5); + } + nsucc=sscanf(buf,"%i",&data.n); + if(nsucc!=1) { + fprintf(stderr,"Error reading amount of input data points.\n"); + exit(4); + } + + /* Allocate memory */ + allocate_memory(&data,nspin); + + for(i=0;iflags; + family=func.info->family; + + /* Set helpers */ + zk = (flags & XC_FLAGS_HAVE_EXC) ? d.zk : NULL; + vrho = (flags & XC_FLAGS_HAVE_VXC) ? d.vrho : NULL; + v2rho2 = (flags & XC_FLAGS_HAVE_FXC) ? d.v2rho2 : NULL; + v3rho3 = (flags & XC_FLAGS_HAVE_KXC) ? d.v3rho3 : NULL; + + /* Evaluate xc functional */ + switch(family) { + case XC_FAMILY_LDA: + XC(lda)(&func, d.n, d.rho, zk, vrho, v2rho2, v3rho3); + break; + case XC_FAMILY_GGA: + case XC_FAMILY_HYB_GGA: + XC(gga)(&func, d.n, d.rho, d.sigma, zk, vrho, d.vsigma, \ + v2rho2, d.v2rhosigma, d.v2sigma2, NULL, NULL, NULL, NULL); + break; + case XC_FAMILY_MGGA: + case XC_FAMILY_HYB_MGGA: + XC(mgga)(&func, d.n, d.rho, d.sigma, d.lapl, d.tau, zk, vrho, d.vsigma, d.vlapl, d.vtau, \ + v2rho2, d.v2sigma2, d.v2lapl2, d.v2tau2, d.v2rhosigma, d.v2rholapl, d.v2rhotau, \ + d.v2sigmalapl, d.v2sigmatau, d.v2lapltau); + break; + + default: + fprintf(stderr,"Support for family %i not implemented.\n",family); + free_memory(d); + exit(1); + } + + + /* Open output file */ + fname = (nspin==XC_POLARIZED) ? argv[3] : argv[4]; + out = fopen(fname,"w"); + if(!out) { + fprintf(stderr,"Error opening output file %s.\n",fname); + free_memory(d); + exit(1); + } + + /* Functional id and amount of lines in output */ + fprintf(out,"%i %i\n",func_id,d.n); + + /* energy */ + if(flags & XC_FLAGS_HAVE_EXC) + fprintf(out,sfmt,"zk"); + + /* LDA part */ + if(nspin==XC_POLARIZED) { + /* first order derivatives */ + if(flags & XC_FLAGS_HAVE_VXC) { + fprintf(out,sfmt2,"vrho(a)","vrho(b)"); + if(family & (XC_FAMILY_GGA | XC_FAMILY_HYB_GGA | XC_FAMILY_MGGA | XC_FAMILY_HYB_MGGA)) + fprintf(out,sfmt3,"vsigma(aa)","vsigma(ab)","vsigma(bb)"); + if(family & (XC_FAMILY_MGGA | XC_FAMILY_HYB_MGGA)) { + fprintf(out,sfmt2,"vlapl(a)","vlapl(b)"); + fprintf(out,sfmt2,"vtau(a)","vtau(b)"); + } + } + + /* second-order derivatives */ + if(flags & XC_FLAGS_HAVE_FXC) { + fprintf(out,sfmt3,"v2rho(aa)","v2rho(ab)","v2rho(bb)"); + if(family & (XC_FAMILY_GGA | XC_FAMILY_HYB_GGA | XC_FAMILY_MGGA | XC_FAMILY_HYB_MGGA)) { + fprintf(out,sfmt3,"v2sigma2(aa-aa)","v2sigma2(aa-ab)","v2sigma2(aa-bb)"); + fprintf(out,sfmt3,"v2sigma2(ab-ab)","v2sigma2(ab-bb)","v2sigma2(bb-bb)"); + fprintf(out,sfmt3,"v2rho(a)sigma(aa)","v2rho(a)sigma(ab)","v2rho(a)sigma(bb)"); + fprintf(out,sfmt3,"v2rho(b)sigma(aa)","v2rho(b)sigma(ab)","v2rho(b)sigma(bb)"); + } + + if(family & (XC_FAMILY_MGGA | XC_FAMILY_HYB_MGGA)) { + fprintf(out,sfmt3,"v2lapl2(aa)","v2lapl2(ab)","v2lapl2(bb)"); + fprintf(out,sfmt3,"v2tau2(aa)","v2tau2(ab)","v2tau2(bb)"); + fprintf(out,sfmt3,"v2rholapl(aa)","v2rholapl(ab)","v2rholapl(bb)"); + fprintf(out,sfmt3,"v2rhotau(aa)","v2rhotau(ab)","v2rhotau(bb)"); + fprintf(out,sfmt3,"v2lapltau(aa)","v2lapltau(ab)","v2lapltau(bb)"); + fprintf(out,sfmt3,"v2sigma(aa)tau(a)","v2sigma(aa)tau(b)","v2sigma(ab)tau(a)"); + fprintf(out,sfmt3,"v2sigma(ab)tau(b)","v2sigma(bb)tau(a)","v2sigma(bb)tau(b)"); + fprintf(out,sfmt3,"v2sigma(aa)lapl(a)","v2sigma(aa)lapl(b)","v2sigma(ab)lapl(a)"); + fprintf(out,sfmt3,"v2sigma(ab)lapl(b)","v2sigma(bb)lapl(a)","v2sigma(bb)lapl(b)"); + } + } + + /* third-order derivatives ... to be done */ + + fprintf(out,"\n"); + + } else { + + /* first order derivatives */ + if(flags & XC_FLAGS_HAVE_VXC) { + fprintf(out,sfmt,"vrho"); + if(family & (XC_FAMILY_GGA | XC_FAMILY_HYB_GGA | XC_FAMILY_MGGA | XC_FAMILY_HYB_MGGA)) + fprintf(out,sfmt,"vsigma"); + if(family & (XC_FAMILY_MGGA | XC_FAMILY_HYB_MGGA)) { + fprintf(out,sfmt,"vlapl"); + fprintf(out,sfmt,"vtau"); + } + } + + /* second-order derivatives */ + if(flags & XC_FLAGS_HAVE_FXC) { + fprintf(out,sfmt,"v2rho"); + if(family & (XC_FAMILY_GGA | XC_FAMILY_HYB_GGA | XC_FAMILY_MGGA | XC_FAMILY_HYB_MGGA)) { + fprintf(out,sfmt,"v2sigma2"); + fprintf(out,sfmt,"v2rhosigma"); + } + + if(family & (XC_FAMILY_MGGA | XC_FAMILY_HYB_MGGA)) { + fprintf(out,sfmt,"v2lapl2"); + fprintf(out,sfmt,"v2tau2"); + fprintf(out,sfmt,"v2rholapl"); + fprintf(out,sfmt,"v2rhotau"); + fprintf(out,sfmt,"v2lapltau"); + fprintf(out,sfmt,"v2sigmatau"); + fprintf(out,sfmt,"v2sigmalapl"); + } + } + + /* third-order derivatives ... to be done */ + + fprintf(out,"\n"); + } + + + /* Loop over data points */ + for(i=0;i $tmpdir/$$.pol_ref + bunzip2 -c $srcdir/regression/$func.unpol.bz2 > $tmpdir/$$.unpol_ref + + $builddir/xc-regression $func $srcdir/input/BrOH+ $tmpdir/$$.pol $tmpdir/$$.unpol > /dev/null + + # Spin-restricted + res=`$builddir/xc-error $tmpdir/$$.unpol $tmpdir/$$.unpol_ref` + if [ "x$res" = "x1" ]; then + echo -ne "\033[32;1mOK" + else + echo -ne "\033[31;1mFAIL" + let fail++ + fi + + # Spin-unrestricted + res=`$builddir/xc-error $tmpdir/$$.pol $tmpdir/$$.pol_ref` + if [ "x$res" = "x1" ]; then + echo -e "\t\033[32;1mOK" + let ok++ + else + echo -e "\t\033[31;1mFAIL" + fi +done +echo -e "\033[0m" + +exit $fail + diff --git a/libxc/xc_version.h b/libxc/xc_version.h new file mode 100644 index 000000000..f23d50806 --- /dev/null +++ b/libxc/xc_version.h @@ -0,0 +1,34 @@ +/* + Copyright (C) 2012 M.A.L. Marques, M. Oliveira + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef _XC_VERSION_H +#define _XC_VERSION_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define XC_VERSION "2.2.0" +#define XC_MAJOR_VERSION 2 +#define XC_MINOR_VERSION 2 + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/libxc/xc_version.h.in b/libxc/xc_version.h.in new file mode 100644 index 000000000..fe18d3f95 --- /dev/null +++ b/libxc/xc_version.h.in @@ -0,0 +1,34 @@ +/* + Copyright (C) 2012 M.A.L. Marques, M. Oliveira + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef _XC_VERSION_H +#define _XC_VERSION_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define XC_VERSION "@VERSION@" +#define XC_MAJOR_VERSION @XC_MAJOR_VERSION@ +#define XC_MINOR_VERSION @XC_MINOR_VERSION@ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/lua-5.2.4/Makefile b/lua-5.2.4/Makefile new file mode 100644 index 000000000..37751e526 --- /dev/null +++ b/lua-5.2.4/Makefile @@ -0,0 +1,116 @@ +# Makefile for installing Lua +# See doc/readme.html for installation and customization instructions. + +# == CHANGE THE SETTINGS BELOW TO SUIT YOUR ENVIRONMENT ======================= + +# Your platform. See PLATS for possible values. +PLAT= generic + +# Where to install. The installation starts in the src and doc directories, +# so take care if INSTALL_TOP is not an absolute path. See the local target. +# You may want to make INSTALL_LMOD and INSTALL_CMOD consistent with +# LUA_ROOT, LUA_LDIR, and LUA_CDIR in luaconf.h. +INSTALL_TOP= /usr/local +INSTALL_BIN= $(INSTALL_TOP)/bin +INSTALL_INC= $(INSTALL_TOP)/include +INSTALL_LIB= $(INSTALL_TOP)/lib +INSTALL_MAN= $(INSTALL_TOP)/man/man1 +INSTALL_LMOD= $(INSTALL_TOP)/share/lua/$V +INSTALL_CMOD= $(INSTALL_TOP)/lib/lua/$V + +# How to install. If your install program does not support "-p", then +# you may have to run ranlib on the installed liblua.a. +INSTALL= install -p +INSTALL_EXEC= $(INSTALL) -m 0755 +INSTALL_DATA= $(INSTALL) -m 0644 +# +# If you don't have "install" you can use "cp" instead. +# INSTALL= cp -p +# INSTALL_EXEC= $(INSTALL) +# INSTALL_DATA= $(INSTALL) + +# Other utilities. +MKDIR= mkdir -p +RM= rm -f + +# == END OF USER SETTINGS -- NO NEED TO CHANGE ANYTHING BELOW THIS LINE ======= + +# Convenience platforms targets. +PLATS= aix ansi bsd freebsd generic linux macosx mingw posix solaris + +# What to install. +TO_BIN= lua luac +TO_INC= lua.h luaconf.h lualib.h lauxlib.h lua.hpp +TO_LIB= liblua.a +TO_MAN= lua.1 luac.1 + +# Lua version and release. +V= 5.2 +R= $V.4 + +# Targets start here. +all: $(PLAT) + +$(PLATS) clean: + cd src && $(MAKE) $@ + cd bin && rm -f lua luac + cd lib && rm -rf lua liblua.a + +test: dummy + src/lua -v + +install: dummy + cd src && $(MKDIR) $(INSTALL_BIN) $(INSTALL_INC) $(INSTALL_LIB) $(INSTALL_MAN) $(INSTALL_LMOD) $(INSTALL_CMOD) + cd src && $(INSTALL_EXEC) $(TO_BIN) $(INSTALL_BIN) + cd src && $(INSTALL_DATA) $(TO_INC) $(INSTALL_INC) + cd src && $(INSTALL_DATA) $(TO_LIB) $(INSTALL_LIB) + cd doc && $(INSTALL_DATA) $(TO_MAN) $(INSTALL_MAN) + +uninstall: + cd src && cd $(INSTALL_BIN) && $(RM) $(TO_BIN) + cd src && cd $(INSTALL_INC) && $(RM) $(TO_INC) + cd src && cd $(INSTALL_LIB) && $(RM) $(TO_LIB) + cd doc && cd $(INSTALL_MAN) && $(RM) $(TO_MAN) + +local: + $(MAKE) install INSTALL_TOP=.. + +none: + @echo "Please do 'make PLATFORM' where PLATFORM is one of these:" + @echo " $(PLATS)" + @echo "See doc/readme.html for complete instructions." + +# make may get confused with test/ and install/ +dummy: + +# echo config parameters +echo: + @cd src && $(MAKE) -s echo + @echo "PLAT= $(PLAT)" + @echo "V= $V" + @echo "R= $R" + @echo "TO_BIN= $(TO_BIN)" + @echo "TO_INC= $(TO_INC)" + @echo "TO_LIB= $(TO_LIB)" + @echo "TO_MAN= $(TO_MAN)" + @echo "INSTALL_TOP= $(INSTALL_TOP)" + @echo "INSTALL_BIN= $(INSTALL_BIN)" + @echo "INSTALL_INC= $(INSTALL_INC)" + @echo "INSTALL_LIB= $(INSTALL_LIB)" + @echo "INSTALL_MAN= $(INSTALL_MAN)" + @echo "INSTALL_LMOD= $(INSTALL_LMOD)" + @echo "INSTALL_CMOD= $(INSTALL_CMOD)" + @echo "INSTALL_EXEC= $(INSTALL_EXEC)" + @echo "INSTALL_DATA= $(INSTALL_DATA)" + +# echo pkg-config data +pc: + @echo "version=$R" + @echo "prefix=$(INSTALL_TOP)" + @echo "libdir=$(INSTALL_LIB)" + @echo "includedir=$(INSTALL_INC)" + +# list targets that do not create files (but not all makes understand .PHONY) +.PHONY: all $(PLATS) clean test install local none dummy echo pecho lecho + +# (end of Makefile) diff --git a/lua-5.2.4/README b/lua-5.2.4/README new file mode 100644 index 000000000..710e3ee15 --- /dev/null +++ b/lua-5.2.4/README @@ -0,0 +1,6 @@ + +This is Lua 5.2.4, released on 25 Feb 2015. + +For installation instructions, license details, and +further information about Lua, see doc/readme.html. + diff --git a/lua-5.2.4/bin/README b/lua-5.2.4/bin/README new file mode 100644 index 000000000..3063f3b5d --- /dev/null +++ b/lua-5.2.4/bin/README @@ -0,0 +1,3 @@ +This directory will contain the compiled executables. +It should not contain any files in the repository except this README. + diff --git a/lua-5.2.4/doc/contents.html b/lua-5.2.4/doc/contents.html new file mode 100644 index 000000000..9d5202fa8 --- /dev/null +++ b/lua-5.2.4/doc/contents.html @@ -0,0 +1,608 @@ + + + +Lua 5.2 Reference Manual - contents + + + + + + + +
+

+ +Lua 5.2 Reference Manual +

+ +

+The reference manual is the official definition of the Lua language. +For a complete introduction to Lua programming, see the book +Programming in Lua. + +

+start +· +contents +· +index +


+ +Copyright © 2011–2015 Lua.org, PUC-Rio. +Freely available under the terms of the +Lua license. + + +

Contents

+ + +

Index

+ + + + + + + +
+

Lua functions

+

+basic
+_G
+_VERSION
+ +assert
+collectgarbage
+dofile
+error
+getmetatable
+ipairs
+load
+loadfile
+next
+pairs
+pcall
+print
+rawequal
+rawget
+rawlen
+rawset
+require
+select
+setmetatable
+tonumber
+tostring
+type
+xpcall
+ +

+bit32
+bit32.arshift
+bit32.band
+bit32.bnot
+bit32.bor
+bit32.btest
+bit32.bxor
+bit32.extract
+bit32.lrotate
+bit32.lshift
+bit32.replace
+bit32.rrotate
+bit32.rshift
+ +

+coroutine
+coroutine.create
+coroutine.resume
+coroutine.running
+coroutine.status
+coroutine.wrap
+coroutine.yield
+ +

+debug
+debug.debug
+debug.getuservalue
+debug.gethook
+debug.getinfo
+debug.getlocal
+debug.getmetatable
+debug.getregistry
+debug.getupvalue
+debug.setuservalue
+debug.sethook
+debug.setlocal
+debug.setmetatable
+debug.setupvalue
+debug.traceback
+debug.upvalueid
+debug.upvaluejoin
+ +

+io
+io.close
+io.flush
+io.input
+io.lines
+io.open
+io.output
+io.popen
+io.read
+io.stderr
+io.stdin
+io.stdout
+io.tmpfile
+io.type
+io.write
+file:close
+file:flush
+file:lines
+file:read
+file:seek
+file:setvbuf
+file:write
+ +

+

 

+

+math
+math.abs
+math.acos
+math.asin
+math.atan
+math.atan2
+math.ceil
+math.cos
+math.cosh
+math.deg
+math.exp
+math.floor
+math.fmod
+math.frexp
+math.huge
+math.ldexp
+math.log
+math.max
+math.min
+math.modf
+math.pi
+math.pow
+math.rad
+math.random
+math.randomseed
+math.sin
+math.sinh
+math.sqrt
+math.tan
+math.tanh
+ +

+os
+os.clock
+os.date
+os.difftime
+os.execute
+os.exit
+os.getenv
+os.remove
+os.rename
+os.setlocale
+os.time
+os.tmpname
+ +

+package
+package.config
+package.cpath
+package.loaded
+package.loadlib
+package.path
+package.preload
+package.searchers
+package.searchpath
+ +

+string
+string.byte
+string.char
+string.dump
+string.find
+string.format
+string.gmatch
+string.gsub
+string.len
+string.lower
+string.match
+string.rep
+string.reverse
+string.sub
+string.upper
+ +

+table
+table.concat
+table.insert
+table.pack
+table.remove
+table.sort
+table.unpack
+ +

environment
variables

+LUA_CPATH
+LUA_CPATH_5_2
+LUA_INIT
+LUA_INIT_5_2
+LUA_PATH
+LUA_PATH_5_2
+ +
+

C API

+

+lua_Alloc
+lua_CFunction
+lua_Debug
+lua_Hook
+lua_Integer
+lua_Number
+lua_Reader
+lua_State
+lua_Unsigned
+lua_Writer
+ +

+lua_absindex
+lua_arith
+lua_atpanic
+lua_call
+lua_callk
+lua_checkstack
+lua_close
+lua_compare
+lua_concat
+lua_copy
+lua_createtable
+lua_dump
+lua_error
+lua_gc
+lua_getallocf
+lua_getctx
+lua_getfield
+lua_getglobal
+lua_gethook
+lua_gethookcount
+lua_gethookmask
+lua_getinfo
+lua_getlocal
+lua_getmetatable
+lua_getstack
+lua_gettable
+lua_gettop
+lua_getupvalue
+lua_getuservalue
+lua_insert
+lua_isboolean
+lua_iscfunction
+lua_isfunction
+lua_islightuserdata
+lua_isnil
+lua_isnone
+lua_isnoneornil
+lua_isnumber
+lua_isstring
+lua_istable
+lua_isthread
+lua_isuserdata
+lua_len
+lua_load
+lua_newstate
+lua_newtable
+lua_newthread
+lua_newuserdata
+lua_next
+lua_pcall
+lua_pcallk
+lua_pop
+lua_pushboolean
+lua_pushcclosure
+lua_pushcfunction
+lua_pushfstring
+lua_pushglobaltable
+lua_pushinteger
+lua_pushlightuserdata
+lua_pushliteral
+lua_pushlstring
+lua_pushnil
+lua_pushnumber
+lua_pushstring
+lua_pushthread
+lua_pushunsigned
+lua_pushvalue
+lua_pushvfstring
+lua_rawequal
+lua_rawget
+lua_rawgeti
+lua_rawgetp
+lua_rawlen
+lua_rawset
+lua_rawseti
+lua_rawsetp
+lua_register
+lua_remove
+lua_replace
+lua_resume
+lua_setallocf
+lua_setfield
+lua_setglobal
+lua_sethook
+lua_setlocal
+lua_setmetatable
+lua_settable
+lua_settop
+lua_setupvalue
+lua_setuservalue
+lua_status
+lua_toboolean
+lua_tocfunction
+lua_tointeger
+lua_tointegerx
+lua_tolstring
+lua_tonumber
+lua_tonumberx
+lua_topointer
+lua_tostring
+lua_tothread
+lua_tounsigned
+lua_tounsignedx
+lua_touserdata
+lua_type
+lua_typename
+lua_upvalueid
+lua_upvalueindex
+lua_upvaluejoin
+lua_version
+lua_xmove
+lua_yield
+lua_yieldk
+ +

+

auxiliary library

+

+luaL_Buffer
+luaL_Reg
+ +

+luaL_addchar
+luaL_addlstring
+luaL_addsize
+luaL_addstring
+luaL_addvalue
+luaL_argcheck
+luaL_argerror
+luaL_buffinit
+luaL_buffinitsize
+luaL_callmeta
+luaL_checkany
+luaL_checkint
+luaL_checkinteger
+luaL_checklong
+luaL_checklstring
+luaL_checknumber
+luaL_checkoption
+luaL_checkstack
+luaL_checkstring
+luaL_checktype
+luaL_checkudata
+luaL_checkunsigned
+luaL_checkversion
+luaL_dofile
+luaL_dostring
+luaL_error
+luaL_execresult
+luaL_fileresult
+luaL_getmetafield
+luaL_getmetatable
+luaL_getsubtable
+luaL_gsub
+luaL_len
+luaL_loadbuffer
+luaL_loadbufferx
+luaL_loadfile
+luaL_loadfilex
+luaL_loadstring
+luaL_newlib
+luaL_newlibtable
+luaL_newmetatable
+luaL_newstate
+luaL_openlibs
+luaL_optint
+luaL_optinteger
+luaL_optlong
+luaL_optlstring
+luaL_optnumber
+luaL_optstring
+luaL_optunsigned
+luaL_prepbuffer
+luaL_prepbuffsize
+luaL_pushresult
+luaL_pushresultsize
+luaL_ref
+luaL_requiref
+luaL_setfuncs
+luaL_setmetatable
+luaL_testudata
+luaL_tolstring
+luaL_traceback
+luaL_typename
+luaL_unref
+luaL_where
+ +

standard library

+

+luaopen_base
+luaopen_bit32
+luaopen_coroutine
+luaopen_debug
+luaopen_io
+luaopen_math
+luaopen_os
+luaopen_package
+luaopen_string
+luaopen_table
+ +

constants

+LUA_ERRERR
+LUA_ERRFILE
+LUA_ERRGCMM
+LUA_ERRMEM
+LUA_ERRRUN
+LUA_ERRSYNTAX
+LUA_HOOKCALL
+LUA_HOOKCOUNT
+LUA_HOOKLINE
+LUA_HOOKRET
+LUA_HOOKTAILCALL
+LUA_MASKCALL
+LUA_MASKCOUNT
+LUA_MASKLINE
+LUA_MASKRET
+LUA_MINSTACK
+LUA_MULTRET
+LUA_NOREF
+LUA_OK
+LUA_OPADD
+LUA_OPDIV
+LUA_OPEQ
+LUA_OPLE
+LUA_OPLT
+LUA_OPMOD
+LUA_OPMUL
+LUA_OPPOW
+LUA_OPSUB
+LUA_OPUNM
+LUA_REFNIL
+LUA_REGISTRYINDEX
+LUA_RIDX_GLOBALS
+LUA_RIDX_MAINTHREAD
+LUA_TBOOLEAN
+LUA_TFUNCTION
+LUA_TLIGHTUSERDATA
+LUA_TNIL
+LUA_TNONE
+LUA_TNUMBER
+LUA_TSTRING
+LUA_TTABLE
+LUA_TTHREAD
+LUA_TUSERDATA
+LUA_USE_APICHECK
+LUA_YIELD
+LUAL_BUFFERSIZE
+ +
+ +
+ +Last update: +Mon Feb 23 22:24:36 BRT 2015 + + + + + diff --git a/lua-5.2.4/doc/logo.gif b/lua-5.2.4/doc/logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..2f5e4ac2e742fbb7675e739879211553758aea9c GIT binary patch literal 4232 zcmeH``9G8i;K!fm@ywWE@XWZzZ5SF?A>^uN#>^O6HI%DVL*tw8h1>$H%uPC0$QQ=txe!o}PX)Ev+jn>*nFZ-TC=<^76WcLZL(=DJm)| zEiIKwrInSHXU?3duCC_u@5try#>U2`rlw1mF15F}U%!66tE;QKyIUmcDJ<+QF77*W zFJd#&)VAl)kJ6K zi<>tmZ{3>g>+2gB7#JQNe(>OdLh;A=`1q42PbMZNCMPF*dXxhLZw3aYhlZwyhu@Bj z%#4n{d-Q1b$&i4QMce4L#8^!oMdw{PDnm4D66&3*dxX=-YIX6DQL_g`jbzkd4k zZDCoLf=%jL&vIeE zO=XcZ9fxt`f}-DQ^%H*PHMUs(JN%UWkI|Y8h9#6~I$Cw@{RqzO4&P-x;jHCPJ6Ks2 zoU%foi)nXd_sdkiuJa@@5J4RrreKfWSnz5>eMa5yTP=)16uu)TIdx~Fhho))6jZl) z($*i>QrIX4u}u3>m{WSn_ehkUGQ& zs})aUlTH1Cj1g3ZE3=MPXsSniEwJ{e6C3N#HjD=B4`8rWIsz!a7ecYpec?WuH+y?Wsm18^$cS4WmHhH3_=r zh*ILlm*X1dB^E5($KVl&zT524%l}vpHg%;Y+LezV_&TAJCmH`idhuj-n$4FZ)UE|jXLayXa-&O3Q z?Iyo!x*$5hD_HfFnDfGYj-RD|eIb7I?%>Y_kf%}Nbd`BXb4l1(Pc+}zoUR|9%_!7f zum2T;wbx&pohtI+&@~wm3nH9xLbOYkg*`phY~TK5iC#3tZNXo9s`cahx+8j2)rh5C zQgZh6D7Ekgib|hpdhxYf{r!PTJc z!vsYG@{hA}l5kL)g)0N_)(nC<*L0qdUi*3fD5<0sn58>zklX@6Tyv3*X^}m=Cqc40 zQ6GfjG@kd1mFIm`qaubWunm_?P>WUZ`9|f_z%gGHi{n|uu(N8!L=aw5(qAcDj$-QK zu;D#j6e42OXTQD>)i zlvM$LX`$n9EEjxM$_QDF&a z7cme_rat}aXmiN&7`6Q98}dh4Z@8L_uAb#nK&GQiZOOUnA9kAEVb-csuN1AWL=sXt z{z9GCN%%l0N9QvJM;tl1nf?rrhT{*sE%4WqR?{0~aIrfCcCPxf4eh_*jjQ=`$p53Y z@_|Rsx2i}|3dNFetMQQ5y8agTK-E0D&7;@3-LUxfvZ7 z7~!p@&mFe^oca2^F|CBt+4Ly?^ViUVSAhAH>JH1GN{^TQb3QnM*x0ZiZgDyNI@_c3 z@{}(WH4*e3T~}n_^0}da4ElIxAf9B!IaL7z9X0Icvj@cIkE*~W--17&WN`Ea5)Gn> z#gpfRb#44;jVTOS{FuaZgd(-ZD848=fQzgST2MxR>wSLc1P=2HDvByz$B$IsNCC6L zCM?nK*OHj6JA9gz4|b<~2%RqelN^1Y)jIqnRs!mDKV^BQTfo@hOtz7*Ug}Ee^cbsj zNNlumRgAmt`1$b5MO;&X#5-EP<}AaY;52ihIpem&MTea$?3!DrwbYa?V`NjEfWF3z zUq5JY8Ch;L{kx&J<1K&Fe_Vn;8gk{%c;n?nA2(%(f%DCRHko3uT~VI7RE^JWEqaCq z)i|%nfj(*4|V*XhY3W%M# z*yn6SN4eUOHFxAD7B&9E_PO`G5bqgs^@J{9bk>&;PlUAiqo`j3rjQDgD!}mqLUtb` zCB}ZD@m@s#pf7bV4jreOC*JVfHZ|hyHkX!rauVdd_I9FL45d{gWH!DNYu;i(|8wVx z!)eLY6YXxZ2{Coae0xuTnxo1ACb5wtED?VJAz&@114$Ao6uG9YSy*!K;m5_mj=0^j zw%?b%AOs}ql@$TGC-!^^*_#RT5+y_kTzQG9?LPPZNAtt6cJ%d2$q(I)ws21*?xF%p zN+NeGnWRQ<5w70Rc(bl|S0Xr&5@WrmdurS|IgPB|EyuZO#=tf!35)G!HJ`E1jh^lH zTBu~rL#DhQO*XAWtBt}JHH$lc>3%r0yD|maW_(W=B_J+y164F>O4dO|@&@N3Z3p=B zmVl{|^Z&#atHY|9n&la)SBo}=3AFIF=_~LDJk6MTlA73CXtX+4bnn+c!}N}IPa5pp zwyqbqIkN|I3j_3vD6$zlu{Ps(N-J|*qzEt<$5Soh;s^AuKv_ z-Tz+O1_~6*9CJh4r}`}mbUtjbf#fX58RIIkP6&@*y9kI|5fK*_eZ%jv3U$5*x<>D_ za2M(TV8?XY+9xy>0En#Te<6X4$0&dbyd(go$~eq4u(u)EA2msyF<5ssLZ zDP|I}=~Bi_q)whWv=Ri~L1TYaNrR;5cMB@s78HF1{w&r(6GJ;_2@bD?#1p&P4n_?n0#9Vx~$qjMX=Lk?*!@aKo8m&$iPO7S{g3sFUwr`*<53(68xx7?z`2xf# zGSicy_zI(PJ|%qc2VxT+6bOE--a{k&aq7$<<= zFt)C<@|TPs`+eycPGoGL1Wn9|Ed&a2JyAmjnkm3DQBECX&`bt~odH9cUPq4M{#$-q?G3!)qO-it*&YHw+j-O* zYy78V*`4Q=kQ@^Yz*b6Tal4(Me7BGeS^;phWAW8+L^5A(=D)t?k!rLIwVAKtq=f7h z&^n&VX1-T$ScvN~639QLZ^d@niMaS{C-Q)8oHHBhwD*r~-1Ze#Q)GFOFptW32a-uF z;M@ux%i%a25NwIgXt*=GHX$3~aZfwovGL!}sf?j9TsVo^cn(%&a<--0mIXYqGe>c PWz_J}_#7St0k8iB@FZjZ literal 0 HcmV?d00001 diff --git a/lua-5.2.4/doc/lua.1 b/lua-5.2.4/doc/lua.1 new file mode 100644 index 000000000..1dbf04366 --- /dev/null +++ b/lua-5.2.4/doc/lua.1 @@ -0,0 +1,116 @@ +.\" $Id: lua.man,v 1.13 2011/11/16 17:16:53 lhf Exp $ +.TH LUA 1 "$Date: 2011/11/16 17:16:53 $" +.SH NAME +lua \- Lua interpreter +.SH SYNOPSIS +.B lua +[ +.I options +] +[ +.I script +[ +.I args +] +] +.SH DESCRIPTION +.B lua +is the standalone Lua interpreter. +It loads and executes Lua programs, +either in textual source form or +in precompiled binary form. +(Precompiled binaries are output by +.BR luac , +the Lua compiler.) +.B lua +can be used as a batch interpreter and also interactively. +.LP +The given +.I options +are handled in order and then +the Lua program in file +.I script +is loaded and executed. +The given +.I args +are available to +.I script +as strings in a global table named +.BR arg . +If no options or arguments are given, +then +.B "\-v \-i" +is assumed when the standard input is a terminal; +otherwise, +.B "\-" +is assumed. +.LP +In interactive mode, +.B lua +prompts the user, +reads lines from the standard input, +and executes them as they are read. +If a line does not contain a complete statement, +then a secondary prompt is displayed and +lines are read until a complete statement is formed or +a syntax error is found. +If a line starts with +.BR '=' , +then +.B lua +evaluates and displays +the values of the expressions in the remainder of the line. +.LP +At the very start, +before even handling the command line, +.B lua +checks the contents of the environment variables +.B LUA_INIT_5_2 +or +.BR LUA_INIT , +in that order. +If the contents is of the form +.RI '@ filename ', +then +.I filename +is executed. +Otherwise, the string is assumed to be a Lua statement and is executed. +.SH OPTIONS +.TP +.BI \-e " stat" +execute statement +.IR stat . +.TP +.B \-i +enter interactive mode after executing +.IR script . +.TP +.BI \-l " name" +execute the equivalent of +.IB name =require(' name ') +before executing +.IR script . +.TP +.B \-v +show version information. +.TP +.B \-E +ignore environment variables. +.TP +.B \-\- +stop handling options. +.TP +.B \- +stop handling options and execute the standard input as a file. +.SH "SEE ALSO" +.BR luac (1) +.br +The documentation at lua.org, +especially section 7 of the reference manual. +.SH DIAGNOSTICS +Error messages should be self explanatory. +.SH AUTHORS +R. Ierusalimschy, +L. H. de Figueiredo, +W. Celes +.\" EOF diff --git a/lua-5.2.4/doc/lua.css b/lua-5.2.4/doc/lua.css new file mode 100644 index 000000000..5dc9a8b9e --- /dev/null +++ b/lua-5.2.4/doc/lua.css @@ -0,0 +1,106 @@ +html { + background-color: #F8F8F8 ; +} + +body { + border: solid #a0a0a0 1px ; + border-radius: 20px ; + padding: 26px ; + margin: 16px ; + color: #000000 ; + background-color: #FFFFFF ; + font-family: Helvetica, Arial, sans-serif ; + text-align: justify ; + line-height: 1.25 ; +} + +h1, h2, h3, h4 { + font-family: Verdana, Geneva, sans-serif ; + font-weight: normal ; + font-style: normal ; +} + +h2 { + padding-top: 0.4em ; + padding-bottom: 0.4em ; + padding-left: 0.8em ; + padding-right: 0.8em ; + background-color: #D0D0FF ; + border-radius: 8px ; + border: solid #a0a0a0 1px ; +} + +h3 { + padding-left: 0.5em ; + border-left: solid #D0D0FF 1em ; +} + +table h3 { + padding-left: 0px ; + border-left: none ; +} + +a:link { + color: #000080 ; + background-color: inherit ; + text-decoration: none ; +} + +a:visited { + background-color: inherit ; + text-decoration: none ; +} + +a:link:hover, a:visited:hover { + color: #000080 ; + background-color: #D0D0FF ; + border-radius: 4px ; +} + +a:link:active, a:visited:active { + color: #FF0000 ; +} + +h1 a img { + vertical-align: text-bottom ; +} + +hr { + border: 0 ; + height: 1px ; + color: #a0a0a0 ; + background-color: #a0a0a0 ; + display: none ; +} + +table hr { + display: block ; +} + +:target { + background-color: #F8F8F8 ; + padding: 8px ; + border: solid #a0a0a0 2px ; + border-radius: 8px ; +} + +.footer { + color: gray ; + font-size: x-small ; +} + +input[type=text] { + border: solid #a0a0a0 2px ; + border-radius: 2em ; + background-image: url('images/search.png') ; + background-repeat: no-repeat ; + background-position: 4px center ; + padding-left: 20px ; + height: 2em ; +} + +pre.session { + background-color: #F8F8F8 ; + padding: 1em ; + border-radius: 8px ; +} diff --git a/lua-5.2.4/doc/luac.1 b/lua-5.2.4/doc/luac.1 new file mode 100644 index 000000000..33a4ed00a --- /dev/null +++ b/lua-5.2.4/doc/luac.1 @@ -0,0 +1,118 @@ +.\" $Id: luac.man,v 1.29 2011/11/16 13:53:40 lhf Exp $ +.TH LUAC 1 "$Date: 2011/11/16 13:53:40 $" +.SH NAME +luac \- Lua compiler +.SH SYNOPSIS +.B luac +[ +.I options +] [ +.I filenames +] +.SH DESCRIPTION +.B luac +is the Lua compiler. +It translates programs written in the Lua programming language +into binary files containing precompiled chunks +that can be later loaded and executed. +.LP +The main advantages of precompiling chunks are: +faster loading, +protecting source code from accidental user changes, +and +off-line syntax checking. +Precompiling does not imply faster execution +because in Lua chunks are always compiled into bytecodes before being executed. +.B luac +simply allows those bytecodes to be saved in a file for later execution. +Precompiled chunks are not necessarily smaller than the corresponding source. +The main goal in precompiling is faster loading. +.LP +In the command line, +you can mix +text files containing Lua source and +binary files containing precompiled chunks. +.B luac +produces a single output file containing the combined bytecodes +for all files given. +Executing the combined file is equivalent to executing the given files. +By default, +the output file is named +.BR luac.out , +but you can change this with the +.B \-o +option. +.LP +Precompiled chunks are +.I not +portable across different architectures. +Moreover, +the internal format of precompiled chunks +is likely to change when a new version of Lua is released. +Make sure you save the source files of all Lua programs that you precompile. +.LP +.SH OPTIONS +.TP +.B \-l +produce a listing of the compiled bytecode for Lua's virtual machine. +Listing bytecodes is useful to learn about Lua's virtual machine. +If no files are given, then +.B luac +loads +.B luac.out +and lists its contents. +Use +.B \-l \-l +for a full listing. +.TP +.BI \-o " file" +output to +.IR file , +instead of the default +.BR luac.out . +(You can use +.B "'\-'" +for standard output, +but not on platforms that open standard output in text mode.) +The output file may be one of the given files because +all files are loaded before the output file is written. +Be careful not to overwrite precious files. +.TP +.B \-p +load files but do not generate any output file. +Used mainly for syntax checking and for testing precompiled chunks: +corrupted files will probably generate errors when loaded. +If no files are given, then +.B luac +loads +.B luac.out +and tests its contents. +No messages are displayed if the file loads without errors. +.TP +.B \-s +strip debug information before writing the output file. +This saves some space in very large chunks, +but if errors occur when running a stripped chunk, +then the error messages may not contain the full information they usually do. +In particular, +line numbers and names of local variables are lost. +.TP +.B \-v +show version information. +.TP +.B \-\- +stop handling options. +.TP +.B \- +stop handling options and process standard input. +.SH "SEE ALSO" +.BR lua (1) +.br +The documentation at lua.org. +.SH DIAGNOSTICS +Error messages should be self explanatory. +.SH AUTHORS +R. Ierusalimschy, +L. H. de Figueiredo, +W. Celes +.\" EOF diff --git a/lua-5.2.4/doc/manual.css b/lua-5.2.4/doc/manual.css new file mode 100644 index 000000000..ca613cd9f --- /dev/null +++ b/lua-5.2.4/doc/manual.css @@ -0,0 +1,27 @@ +h3 code { + font-family: inherit ; + font-size: inherit ; +} + +pre, code { + font-size: 12pt ; +} + +span.apii { + float: right ; + font-family: inherit ; + font-style: normal ; + font-size: small ; + color: gray ; +} + +p+h1, ul+h1 { + font-style: normal ; + padding-top: 0.4em ; + padding-bottom: 0.4em ; + padding-left: 16px ; + margin-left: -16px ; + background-color: #D0D0FF ; + border-radius: 8px ; + border: solid #000080 1px ; +} diff --git a/lua-5.2.4/doc/manual.html b/lua-5.2.4/doc/manual.html new file mode 100644 index 000000000..0a95e9e02 --- /dev/null +++ b/lua-5.2.4/doc/manual.html @@ -0,0 +1,10508 @@ + + + + +Lua 5.2 Reference Manual + + + + + + + +
+

+ +Lua 5.2 Reference Manual +

+ +by Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes +

+ +Copyright © 2011–2015 Lua.org, PUC-Rio. +Freely available under the terms of the +Lua license. + +


+

+ +contents +· +index + + +

+ + + + + + +

1 – Introduction

+ +

+Lua is an extension programming language designed to support +general procedural programming with data description +facilities. +It also offers good support for object-oriented programming, +functional programming, and data-driven programming. +Lua is intended to be used as a powerful, lightweight, +embeddable scripting language for any program that needs one. +Lua is implemented as a library, written in clean C, +the common subset of Standard C and C++. + + +

+Being an extension language, Lua has no notion of a "main" program: +it only works embedded in a host client, +called the embedding program or simply the host. +The host program can invoke functions to execute a piece of Lua code, +can write and read Lua variables, +and can register C functions to be called by Lua code. +Through the use of C functions, Lua can be augmented to cope with +a wide range of different domains, +thus creating customized programming languages sharing a syntactical framework. +The Lua distribution includes a sample host program called lua, +which uses the Lua library to offer a complete, standalone Lua interpreter, +for interactive or batch use. + + +

+Lua is free software, +and is provided as usual with no guarantees, +as stated in its license. +The implementation described in this manual is available +at Lua's official web site, www.lua.org. + + +

+Like any other reference manual, +this document is dry in places. +For a discussion of the decisions behind the design of Lua, +see the technical papers available at Lua's web site. +For a detailed introduction to programming in Lua, +see Roberto's book, Programming in Lua. + + + +

2 – Basic Concepts

+ +

+This section describes the basic concepts of the language. + + + +

2.1 – Values and Types

+ +

+Lua is a dynamically typed language. +This means that +variables do not have types; only values do. +There are no type definitions in the language. +All values carry their own type. + + +

+All values in Lua are first-class values. +This means that all values can be stored in variables, +passed as arguments to other functions, and returned as results. + + +

+There are eight basic types in Lua: +nil, boolean, number, +string, function, userdata, +thread, and table. +Nil is the type of the value nil, +whose main property is to be different from any other value; +it usually represents the absence of a useful value. +Boolean is the type of the values false and true. +Both nil and false make a condition false; +any other value makes it true. +Number represents real (double-precision floating-point) numbers. +Operations on numbers follow the same rules of +the underlying C implementation, +which, in turn, usually follows the IEEE 754 standard. +(It is easy to build Lua interpreters that use other +internal representations for numbers, +such as single-precision floats or long integers; +see file luaconf.h.) +String represents immutable sequences of bytes. + +Lua is 8-bit clean: +strings can contain any 8-bit value, +including embedded zeros ('\0'). + + +

+Lua can call (and manipulate) functions written in Lua and +functions written in C +(see §3.4.9). + + +

+The type userdata is provided to allow arbitrary C data to +be stored in Lua variables. +A userdata value is a pointer to a block of raw memory. +There are two kinds of userdata: +full userdata, where the block of memory is managed by Lua, +and light userdata, where the block of memory is managed by the host. +Userdata has no predefined operations in Lua, +except assignment and identity test. +By using metatables, +the programmer can define operations for full userdata values +(see §2.4). +Userdata values cannot be created or modified in Lua, +only through the C API. +This guarantees the integrity of data owned by the host program. + + +

+The type thread represents independent threads of execution +and it is used to implement coroutines (see §2.6). +Do not confuse Lua threads with operating-system threads. +Lua supports coroutines on all systems, +even those that do not support threads. + + +

+The type table implements associative arrays, +that is, arrays that can be indexed not only with numbers, +but with any Lua value except nil and NaN +(Not a Number, a special numeric value used to represent +undefined or unrepresentable results, such as 0/0). +Tables can be heterogeneous; +that is, they can contain values of all types (except nil). +Any key with value nil is not considered part of the table. +Conversely, any key that is not part of a table has +an associated value nil. + + +

+Tables are the sole data structuring mechanism in Lua; +they can be used to represent ordinary arrays, sequences, +symbol tables, sets, records, graphs, trees, etc. +To represent records, Lua uses the field name as an index. +The language supports this representation by +providing a.name as syntactic sugar for a["name"]. +There are several convenient ways to create tables in Lua +(see §3.4.8). + + +

+We use the term sequence to denote a table where +the set of all positive numeric keys is equal to {1..n} +for some integer n, +which is called the length of the sequence (see §3.4.6). + + +

+Like indices, +the values of table fields can be of any type. +In particular, +because functions are first-class values, +table fields can contain functions. +Thus tables can also carry methods (see §3.4.10). + + +

+The indexing of tables follows +the definition of raw equality in the language. +The expressions a[i] and a[j] +denote the same table element +if and only if i and j are raw equal +(that is, equal without metamethods). + + +

+Tables, functions, threads, and (full) userdata values are objects: +variables do not actually contain these values, +only references to them. +Assignment, parameter passing, and function returns +always manipulate references to such values; +these operations do not imply any kind of copy. + + +

+The library function type returns a string describing the type +of a given value (see §6.1). + + + + + +

2.2 – Environments and the Global Environment

+ +

+As will be discussed in §3.2 and §3.3.3, +any reference to a global name var is syntactically translated +to _ENV.var. +Moreover, every chunk is compiled in the scope of +an external local variable called _ENV (see §3.3.2), +so _ENV itself is never a global name in a chunk. + + +

+Despite the existence of this external _ENV variable and +the translation of global names, +_ENV is a completely regular name. +In particular, +you can define new variables and parameters with that name. +Each reference to a global name uses the _ENV that is +visible at that point in the program, +following the usual visibility rules of Lua (see §3.5). + + +

+Any table used as the value of _ENV is called an environment. + + +

+Lua keeps a distinguished environment called the global environment. +This value is kept at a special index in the C registry (see §4.5). +In Lua, the variable _G is initialized with this same value. + + +

+When Lua compiles a chunk, +it initializes the value of its _ENV upvalue +with the global environment (see load). +Therefore, by default, +global variables in Lua code refer to entries in the global environment. +Moreover, all standard libraries are loaded in the global environment +and several functions there operate on that environment. +You can use load (or loadfile) +to load a chunk with a different environment. +(In C, you have to load the chunk and then change the value +of its first upvalue.) + + +

+If you change the global environment in the registry +(through C code or the debug library), +all chunks loaded after the change will get the new environment. +Previously loaded chunks are not affected, however, +as each has its own reference to the environment in its _ENV variable. +Moreover, the variable _G +(which is stored in the original global environment) +is never updated by Lua. + + + + + +

2.3 – Error Handling

+ +

+Because Lua is an embedded extension language, +all Lua actions start from C code in the host program +calling a function from the Lua library (see lua_pcall). +Whenever an error occurs during +the compilation or execution of a Lua chunk, +control returns to the host, +which can take appropriate measures +(such as printing an error message). + + +

+Lua code can explicitly generate an error by calling the +error function. +If you need to catch errors in Lua, +you can use pcall or xpcall +to call a given function in protected mode. + + +

+Whenever there is an error, +an error object (also called an error message) +is propagated with information about the error. +Lua itself only generates errors where the error object is a string, +but programs may generate errors with +any value for the error object. + + +

+When you use xpcall or lua_pcall, +you may give a message handler +to be called in case of errors. +This function is called with the original error message +and returns a new error message. +It is called before the error unwinds the stack, +so that it can gather more information about the error, +for instance by inspecting the stack and creating a stack traceback. +This message handler is still protected by the protected call; +so, an error inside the message handler +will call the message handler again. +If this loop goes on, Lua breaks it and returns an appropriate message. + + + + + +

2.4 – Metatables and Metamethods

+ +

+Every value in Lua can have a metatable. +This metatable is an ordinary Lua table +that defines the behavior of the original value +under certain special operations. +You can change several aspects of the behavior +of operations over a value by setting specific fields in its metatable. +For instance, when a non-numeric value is the operand of an addition, +Lua checks for a function in the field "__add" of the value's metatable. +If it finds one, +Lua calls this function to perform the addition. + + +

+The keys in a metatable are derived from the event names; +the corresponding values are called metamethods. +In the previous example, the event is "add" +and the metamethod is the function that performs the addition. + + +

+You can query the metatable of any value +using the getmetatable function. + + +

+You can replace the metatable of tables +using the setmetatable function. +You cannot change the metatable of other types from Lua +(except by using the debug library); +you must use the C API for that. + + +

+Tables and full userdata have individual metatables +(although multiple tables and userdata can share their metatables). +Values of all other types share one single metatable per type; +that is, there is one single metatable for all numbers, +one for all strings, etc. +By default, a value has no metatable, +but the string library sets a metatable for the string type (see §6.4). + + +

+A metatable controls how an object behaves in arithmetic operations, +order comparisons, concatenation, length operation, and indexing. +A metatable also can define a function to be called +when a userdata or a table is garbage collected. +When Lua performs one of these operations over a value, +it checks whether this value has a metatable with the corresponding event. +If so, the value associated with that key (the metamethod) +controls how Lua will perform the operation. + + +

+Metatables control the operations listed next. +Each operation is identified by its corresponding name. +The key for each operation is a string with its name prefixed by +two underscores, '__'; +for instance, the key for operation "add" is the +string "__add". + + +

+The semantics of these operations is better explained by a Lua function +describing how the interpreter executes the operation. +The code shown here in Lua is only illustrative; +the real behavior is hard coded in the interpreter +and it is much more efficient than this simulation. +All functions used in these descriptions +(rawget, tonumber, etc.) +are described in §6.1. +In particular, to retrieve the metamethod of a given object, +we use the expression + +

+     metatable(obj)[event]
+

+This should be read as + +

+     rawget(getmetatable(obj) or {}, event)
+

+This means that the access to a metamethod does not invoke other metamethods, +and access to objects with no metatables does not fail +(it simply results in nil). + + +

+For the unary - and # operators, +the metamethod is called with a dummy second argument. +This extra argument is only to simplify Lua's internals; +it may be removed in future versions and therefore it is not present +in the following code. +(For most uses this extra argument is irrelevant.) + + + +

    + +
  • "add": +the + operation. + + + +

    +The function getbinhandler below defines how Lua chooses a handler +for a binary operation. +First, Lua tries the first operand. +If its type does not define a handler for the operation, +then Lua tries the second operand. + +

    +     function getbinhandler (op1, op2, event)
    +       return metatable(op1)[event] or metatable(op2)[event]
    +     end
    +

    +By using this function, +the behavior of the op1 + op2 is + +

    +     function add_event (op1, op2)
    +       local o1, o2 = tonumber(op1), tonumber(op2)
    +       if o1 and o2 then  -- both operands are numeric?
    +         return o1 + o2   -- '+' here is the primitive 'add'
    +       else  -- at least one of the operands is not numeric
    +         local h = getbinhandler(op1, op2, "__add")
    +         if h then
    +           -- call the handler with both operands
    +           return (h(op1, op2))
    +         else  -- no handler available: default behavior
    +           error(···)
    +         end
    +       end
    +     end
    +

    +

  • + +
  • "sub": +the - operation. + +Behavior similar to the "add" operation. +
  • + +
  • "mul": +the * operation. + +Behavior similar to the "add" operation. +
  • + +
  • "div": +the / operation. + +Behavior similar to the "add" operation. +
  • + +
  • "mod": +the % operation. + +Behavior similar to the "add" operation, +with the operation +o1 - floor(o1/o2)*o2 as the primitive operation. +
  • + +
  • "pow": +the ^ (exponentiation) operation. + +Behavior similar to the "add" operation, +with the function pow (from the C math library) +as the primitive operation. +
  • + +
  • "unm": +the unary - operation. + + +
    +     function unm_event (op)
    +       local o = tonumber(op)
    +       if o then  -- operand is numeric?
    +         return -o  -- '-' here is the primitive 'unm'
    +       else  -- the operand is not numeric.
    +         -- Try to get a handler from the operand
    +         local h = metatable(op).__unm
    +         if h then
    +           -- call the handler with the operand
    +           return (h(op))
    +         else  -- no handler available: default behavior
    +           error(···)
    +         end
    +       end
    +     end
    +

    +

  • + +
  • "concat": +the .. (concatenation) operation. + + +
    +     function concat_event (op1, op2)
    +       if (type(op1) == "string" or type(op1) == "number") and
    +          (type(op2) == "string" or type(op2) == "number") then
    +         return op1 .. op2  -- primitive string concatenation
    +       else
    +         local h = getbinhandler(op1, op2, "__concat")
    +         if h then
    +           return (h(op1, op2))
    +         else
    +           error(···)
    +         end
    +       end
    +     end
    +

    +

  • + +
  • "len": +the # operation. + + +
    +     function len_event (op)
    +       if type(op) == "string" then
    +         return strlen(op)      -- primitive string length
    +       else
    +         local h = metatable(op).__len
    +         if h then
    +           return (h(op))       -- call handler with the operand
    +         elseif type(op) == "table" then
    +           return #op              -- primitive table length
    +         else  -- no handler available: error
    +           error(···)
    +         end
    +       end
    +     end
    +

    +See §3.4.6 for a description of the length of a table. +

  • + +
  • "eq": +the == operation. + +The function getequalhandler defines how Lua chooses a metamethod +for equality. +A metamethod is selected only when both values +being compared have the same type +and the same metamethod for the selected operation, +and the values are either tables or full userdata. + +
    +     function getequalhandler (op1, op2)
    +       if type(op1) ~= type(op2) or
    +          (type(op1) ~= "table" and type(op1) ~= "userdata") then
    +         return nil     -- different values
    +       end
    +       local mm1 = metatable(op1).__eq
    +       local mm2 = metatable(op2).__eq
    +       if mm1 == mm2 then return mm1 else return nil end
    +     end
    +

    +The "eq" event is defined as follows: + +

    +     function eq_event (op1, op2)
    +       if op1 == op2 then   -- primitive equal?
    +         return true   -- values are equal
    +       end
    +       -- try metamethod
    +       local h = getequalhandler(op1, op2)
    +       if h then
    +         return not not h(op1, op2)
    +       else
    +         return false
    +       end
    +     end
    +

    +Note that the result is always a boolean. +

  • + +
  • "lt": +the < operation. + + +
    +     function lt_event (op1, op2)
    +       if type(op1) == "number" and type(op2) == "number" then
    +         return op1 < op2   -- numeric comparison
    +       elseif type(op1) == "string" and type(op2) == "string" then
    +         return op1 < op2   -- lexicographic comparison
    +       else
    +         local h = getbinhandler(op1, op2, "__lt")
    +         if h then
    +           return not not h(op1, op2)
    +         else
    +           error(···)
    +         end
    +       end
    +     end
    +

    +Note that the result is always a boolean. +

  • + +
  • "le": +the <= operation. + + +
    +     function le_event (op1, op2)
    +       if type(op1) == "number" and type(op2) == "number" then
    +         return op1 <= op2   -- numeric comparison
    +       elseif type(op1) == "string" and type(op2) == "string" then
    +         return op1 <= op2   -- lexicographic comparison
    +       else
    +         local h = getbinhandler(op1, op2, "__le")
    +         if h then
    +           return not not h(op1, op2)
    +         else
    +           h = getbinhandler(op1, op2, "__lt")
    +           if h then
    +             return not h(op2, op1)
    +           else
    +             error(···)
    +           end
    +         end
    +       end
    +     end
    +

    +Note that, in the absence of a "le" metamethod, +Lua tries the "lt", assuming that a <= b is +equivalent to not (b < a). + + +

    +As with the other comparison operators, +the result is always a boolean. +

  • + +
  • "index": +The indexing access table[key]. +Note that the metamethod is tried only +when key is not present in table. +(When table is not a table, +no key is ever present, +so the metamethod is always tried.) + + +
    +     function gettable_event (table, key)
    +       local h
    +       if type(table) == "table" then
    +         local v = rawget(table, key)
    +         -- if key is present, return raw value
    +         if v ~= nil then return v end
    +         h = metatable(table).__index
    +         if h == nil then return nil end
    +       else
    +         h = metatable(table).__index
    +         if h == nil then
    +           error(···)
    +         end
    +       end
    +       if type(h) == "function" then
    +         return (h(table, key))     -- call the handler
    +       else return h[key]           -- or repeat operation on it
    +       end
    +     end
    +

    +

  • + +
  • "newindex": +The indexing assignment table[key] = value. +Note that the metamethod is tried only +when key is not present in table. + + +
    +     function settable_event (table, key, value)
    +       local h
    +       if type(table) == "table" then
    +         local v = rawget(table, key)
    +         -- if key is present, do raw assignment
    +         if v ~= nil then rawset(table, key, value); return end
    +         h = metatable(table).__newindex
    +         if h == nil then rawset(table, key, value); return end
    +       else
    +         h = metatable(table).__newindex
    +         if h == nil then
    +           error(···)
    +         end
    +       end
    +       if type(h) == "function" then
    +         h(table, key,value)           -- call the handler
    +       else h[key] = value             -- or repeat operation on it
    +       end
    +     end
    +

    +

  • + +
  • "call": +called when Lua calls a value. + + +
    +     function function_event (func, ...)
    +       if type(func) == "function" then
    +         return func(...)   -- primitive call
    +       else
    +         local h = metatable(func).__call
    +         if h then
    +           return h(func, ...)
    +         else
    +           error(···)
    +         end
    +       end
    +     end
    +

    +

  • + +
+ + + + +

2.5 – Garbage Collection

+ +

+Lua performs automatic memory management. +This means that +you have to worry neither about allocating memory for new objects +nor about freeing it when the objects are no longer needed. +Lua manages memory automatically by running +a garbage collector to collect all dead objects +(that is, objects that are no longer accessible from Lua). +All memory used by Lua is subject to automatic management: +strings, tables, userdata, functions, threads, internal structures, etc. + + +

+Lua implements an incremental mark-and-sweep collector. +It uses two numbers to control its garbage-collection cycles: +the garbage-collector pause and +the garbage-collector step multiplier. +Both use percentage points as units +(e.g., a value of 100 means an internal value of 1). + + +

+The garbage-collector pause +controls how long the collector waits before starting a new cycle. +Larger values make the collector less aggressive. +Values smaller than 100 mean the collector will not wait to +start a new cycle. +A value of 200 means that the collector waits for the total memory in use +to double before starting a new cycle. + + +

+The garbage-collector step multiplier +controls the relative speed of the collector relative to +memory allocation. +Larger values make the collector more aggressive but also increase +the size of each incremental step. +Values smaller than 100 make the collector too slow and +can result in the collector never finishing a cycle. +The default is 200, +which means that the collector runs at "twice" +the speed of memory allocation. + + +

+If you set the step multiplier to a very large number +(larger than 10% of the maximum number of +bytes that the program may use), +the collector behaves like a stop-the-world collector. +If you then set the pause to 200, +the collector behaves as in old Lua versions, +doing a complete collection every time Lua doubles its +memory usage. + + +

+You can change these numbers by calling lua_gc in C +or collectgarbage in Lua. +You can also use these functions to control +the collector directly (e.g., stop and restart it). + + +

+As an experimental feature in Lua 5.2, +you can change the collector's operation mode +from incremental to generational. +A generational collector assumes that most objects die young, +and therefore it traverses only young (recently created) objects. +This behavior can reduce the time used by the collector, +but also increases memory usage (as old dead objects may accumulate). +To mitigate this second problem, +from time to time the generational collector performs a full collection. +Remember that this is an experimental feature; +you are welcome to try it, +but check your gains. + + + +

2.5.1 – Garbage-Collection Metamethods

+ +

+You can set garbage-collector metamethods for tables +and, using the C API, +for full userdata (see §2.4). +These metamethods are also called finalizers. +Finalizers allow you to coordinate Lua's garbage collection +with external resource management +(such as closing files, network or database connections, +or freeing your own memory). + + +

+For an object (table or userdata) to be finalized when collected, +you must mark it for finalization. + +You mark an object for finalization when you set its metatable +and the metatable has a field indexed by the string "__gc". +Note that if you set a metatable without a __gc field +and later create that field in the metatable, +the object will not be marked for finalization. +However, after an object is marked, +you can freely change the __gc field of its metatable. + + +

+When a marked object becomes garbage, +it is not collected immediately by the garbage collector. +Instead, Lua puts it in a list. +After the collection, +Lua does the equivalent of the following function +for each object in that list: + +

+     function gc_event (obj)
+       local h = metatable(obj).__gc
+       if type(h) == "function" then
+         h(obj)
+       end
+     end
+
+ +

+At the end of each garbage-collection cycle, +the finalizers for objects are called in +the reverse order that they were marked for collection, +among those collected in that cycle; +that is, the first finalizer to be called is the one associated +with the object marked last in the program. +The execution of each finalizer may occur at any point during +the execution of the regular code. + + +

+Because the object being collected must still be used by the finalizer, +it (and other objects accessible only through it) +must be resurrected by Lua. +Usually, this resurrection is transient, +and the object memory is freed in the next garbage-collection cycle. +However, if the finalizer stores the object in some global place +(e.g., a global variable), +then there is a permanent resurrection. +In any case, +the object memory is freed only when it becomes completely inaccessible; +its finalizer will never be called twice. + + +

+When you close a state (see lua_close), +Lua calls the finalizers of all objects marked for finalization, +following the reverse order that they were marked. +If any finalizer marks new objects for collection during that phase, +these new objects will not be finalized. + + + + + +

2.5.2 – Weak Tables

+ +

+A weak table is a table whose elements are +weak references. +A weak reference is ignored by the garbage collector. +In other words, +if the only references to an object are weak references, +then the garbage collector will collect that object. + + +

+A weak table can have weak keys, weak values, or both. +A table with weak keys allows the collection of its keys, +but prevents the collection of its values. +A table with both weak keys and weak values allows the collection of +both keys and values. +In any case, if either the key or the value is collected, +the whole pair is removed from the table. +The weakness of a table is controlled by the +__mode field of its metatable. +If the __mode field is a string containing the character 'k', +the keys in the table are weak. +If __mode contains 'v', +the values in the table are weak. + + +

+A table with weak keys and strong values +is also called an ephemeron table. +In an ephemeron table, +a value is considered reachable only if its key is reachable. +In particular, +if the only reference to a key comes through its value, +the pair is removed. + + +

+Any change in the weakness of a table may take effect only +at the next collect cycle. +In particular, if you change the weakness to a stronger mode, +Lua may still collect some items from that table +before the change takes effect. + + +

+Only objects that have an explicit construction +are removed from weak tables. +Values, such as numbers and light C functions, +are not subject to garbage collection, +and therefore are not removed from weak tables +(unless its associated value is collected). +Although strings are subject to garbage collection, +they do not have an explicit construction, +and therefore are not removed from weak tables. + + +

+Resurrected objects +(that is, objects being finalized +and objects accessible only through objects being finalized) +have a special behavior in weak tables. +They are removed from weak values before running their finalizers, +but are removed from weak keys only in the next collection +after running their finalizers, when such objects are actually freed. +This behavior allows the finalizer to access properties +associated with the object through weak tables. + + +

+If a weak table is among the resurrected objects in a collection cycle, +it may not be properly cleared until the next cycle. + + + + + + + +

2.6 – Coroutines

+ +

+Lua supports coroutines, +also called collaborative multithreading. +A coroutine in Lua represents an independent thread of execution. +Unlike threads in multithread systems, however, +a coroutine only suspends its execution by explicitly calling +a yield function. + + +

+You create a coroutine by calling coroutine.create. +Its sole argument is a function +that is the main function of the coroutine. +The create function only creates a new coroutine and +returns a handle to it (an object of type thread); +it does not start the coroutine. + + +

+You execute a coroutine by calling coroutine.resume. +When you first call coroutine.resume, +passing as its first argument +a thread returned by coroutine.create, +the coroutine starts its execution, +at the first line of its main function. +Extra arguments passed to coroutine.resume are passed on +to the coroutine main function. +After the coroutine starts running, +it runs until it terminates or yields. + + +

+A coroutine can terminate its execution in two ways: +normally, when its main function returns +(explicitly or implicitly, after the last instruction); +and abnormally, if there is an unprotected error. +In the first case, coroutine.resume returns true, +plus any values returned by the coroutine main function. +In case of errors, coroutine.resume returns false +plus an error message. + + +

+A coroutine yields by calling coroutine.yield. +When a coroutine yields, +the corresponding coroutine.resume returns immediately, +even if the yield happens inside nested function calls +(that is, not in the main function, +but in a function directly or indirectly called by the main function). +In the case of a yield, coroutine.resume also returns true, +plus any values passed to coroutine.yield. +The next time you resume the same coroutine, +it continues its execution from the point where it yielded, +with the call to coroutine.yield returning any extra +arguments passed to coroutine.resume. + + +

+Like coroutine.create, +the coroutine.wrap function also creates a coroutine, +but instead of returning the coroutine itself, +it returns a function that, when called, resumes the coroutine. +Any arguments passed to this function +go as extra arguments to coroutine.resume. +coroutine.wrap returns all the values returned by coroutine.resume, +except the first one (the boolean error code). +Unlike coroutine.resume, +coroutine.wrap does not catch errors; +any error is propagated to the caller. + + +

+As an example of how coroutines work, +consider the following code: + +

+     function foo (a)
+       print("foo", a)
+       return coroutine.yield(2*a)
+     end
+     
+     co = coroutine.create(function (a,b)
+           print("co-body", a, b)
+           local r = foo(a+1)
+           print("co-body", r)
+           local r, s = coroutine.yield(a+b, a-b)
+           print("co-body", r, s)
+           return b, "end"
+     end)
+     
+     print("main", coroutine.resume(co, 1, 10))
+     print("main", coroutine.resume(co, "r"))
+     print("main", coroutine.resume(co, "x", "y"))
+     print("main", coroutine.resume(co, "x", "y"))
+

+When you run it, it produces the following output: + +

+     co-body 1       10
+     foo     2
+     main    true    4
+     co-body r
+     main    true    11      -9
+     co-body x       y
+     main    true    10      end
+     main    false   cannot resume dead coroutine
+
+ +

+You can also create and manipulate coroutines through the C API: +see functions lua_newthread, lua_resume, +and lua_yield. + + + + + +

3 – The Language

+ +

+This section describes the lexis, the syntax, and the semantics of Lua. +In other words, +this section describes +which tokens are valid, +how they can be combined, +and what their combinations mean. + + +

+Language constructs will be explained using the usual extended BNF notation, +in which +{a} means 0 or more a's, and +[a] means an optional a. +Non-terminals are shown like non-terminal, +keywords are shown like kword, +and other terminal symbols are shown like ‘=’. +The complete syntax of Lua can be found in §9 +at the end of this manual. + + + +

3.1 – Lexical Conventions

+ +

+Lua is a free-form language. +It ignores spaces (including new lines) and comments +between lexical elements (tokens), +except as delimiters between names and keywords. + + +

+Names +(also called identifiers) +in Lua can be any string of letters, +digits, and underscores, +not beginning with a digit. +Identifiers are used to name variables, table fields, and labels. + + +

+The following keywords are reserved +and cannot be used as names: + + +

+     and       break     do        else      elseif    end
+     false     for       function  goto      if        in
+     local     nil       not       or        repeat    return
+     then      true      until     while
+
+ +

+Lua is a case-sensitive language: +and is a reserved word, but And and AND +are two different, valid names. +As a convention, names starting with an underscore followed by +uppercase letters (such as _VERSION) +are reserved for variables used by Lua. + + +

+The following strings denote other tokens: + +

+     +     -     *     /     %     ^     #
+     ==    ~=    <=    >=    <     >     =
+     (     )     {     }     [     ]     ::
+     ;     :     ,     .     ..    ...
+
+ +

+Literal strings +can be delimited by matching single or double quotes, +and can contain the following C-like escape sequences: +'\a' (bell), +'\b' (backspace), +'\f' (form feed), +'\n' (newline), +'\r' (carriage return), +'\t' (horizontal tab), +'\v' (vertical tab), +'\\' (backslash), +'\"' (quotation mark [double quote]), +and '\'' (apostrophe [single quote]). +A backslash followed by a real newline +results in a newline in the string. +The escape sequence '\z' skips the following span +of white-space characters, +including line breaks; +it is particularly useful to break and indent a long literal string +into multiple lines without adding the newlines and spaces +into the string contents. + + +

+A byte in a literal string can also be specified by its numerical value. +This can be done with the escape sequence \xXX, +where XX is a sequence of exactly two hexadecimal digits, +or with the escape sequence \ddd, +where ddd is a sequence of up to three decimal digits. +(Note that if a decimal escape is to be followed by a digit, +it must be expressed using exactly three digits.) +Strings in Lua can contain any 8-bit value, including embedded zeros, +which can be specified as '\0'. + + +

+Literal strings can also be defined using a long format +enclosed by long brackets. +We define an opening long bracket of level n as an opening +square bracket followed by n equal signs followed by another +opening square bracket. +So, an opening long bracket of level 0 is written as [[, +an opening long bracket of level 1 is written as [=[, +and so on. +A closing long bracket is defined similarly; +for instance, a closing long bracket of level 4 is written as ]====]. +A long literal starts with an opening long bracket of any level and +ends at the first closing long bracket of the same level. +It can contain any text except a closing bracket of the proper level. +Literals in this bracketed form can run for several lines, +do not interpret any escape sequences, +and ignore long brackets of any other level. +Any kind of end-of-line sequence +(carriage return, newline, carriage return followed by newline, +or newline followed by carriage return) +is converted to a simple newline. + + +

+Any byte in a literal string not +explicitly affected by the previous rules represents itself. +However, Lua opens files for parsing in text mode, +and the system file functions may have problems with +some control characters. +So, it is safer to represent +non-text data as a quoted literal with +explicit escape sequences for non-text characters. + + +

+For convenience, +when the opening long bracket is immediately followed by a newline, +the newline is not included in the string. +As an example, in a system using ASCII +(in which 'a' is coded as 97, +newline is coded as 10, and '1' is coded as 49), +the five literal strings below denote the same string: + +

+     a = 'alo\n123"'
+     a = "alo\n123\""
+     a = '\97lo\10\04923"'
+     a = [[alo
+     123"]]
+     a = [==[
+     alo
+     123"]==]
+
+ +

+A numerical constant can be written with an optional fractional part +and an optional decimal exponent, +marked by a letter 'e' or 'E'. +Lua also accepts hexadecimal constants, +which start with 0x or 0X. +Hexadecimal constants also accept an optional fractional part +plus an optional binary exponent, +marked by a letter 'p' or 'P'. +Examples of valid numerical constants are + +

+     3     3.0     3.1416     314.16e-2     0.31416E1
+     0xff  0x0.1E  0xA23p-4   0X1.921FB54442D18P+1
+
+ +

+A comment starts with a double hyphen (--) +anywhere outside a string. +If the text immediately after -- is not an opening long bracket, +the comment is a short comment, +which runs until the end of the line. +Otherwise, it is a long comment, +which runs until the corresponding closing long bracket. +Long comments are frequently used to disable code temporarily. + + + + + +

3.2 – Variables

+ +

+Variables are places that store values. +There are three kinds of variables in Lua: +global variables, local variables, and table fields. + + +

+A single name can denote a global variable or a local variable +(or a function's formal parameter, +which is a particular kind of local variable): + +

+	var ::= Name
+

+Name denotes identifiers, as defined in §3.1. + + +

+Any variable name is assumed to be global unless explicitly declared +as a local (see §3.3.7). +Local variables are lexically scoped: +local variables can be freely accessed by functions +defined inside their scope (see §3.5). + + +

+Before the first assignment to a variable, its value is nil. + + +

+Square brackets are used to index a table: + +

+	var ::= prefixexp ‘[’ exp ‘]’
+

+The meaning of accesses to table fields can be changed via metatables. +An access to an indexed variable t[i] is equivalent to +a call gettable_event(t,i). +(See §2.4 for a complete description of the +gettable_event function. +This function is not defined or callable in Lua. +We use it here only for explanatory purposes.) + + +

+The syntax var.Name is just syntactic sugar for +var["Name"]: + +

+	var ::= prefixexp ‘.’ Name
+
+ +

+An access to a global variable x +is equivalent to _ENV.x. +Due to the way that chunks are compiled, +_ENV is never a global name (see §2.2). + + + + + +

3.3 – Statements

+ +

+Lua supports an almost conventional set of statements, +similar to those in Pascal or C. +This set includes +assignments, control structures, function calls, +and variable declarations. + + + +

3.3.1 – Blocks

+ +

+A block is a list of statements, +which are executed sequentially: + +

+	block ::= {stat}
+

+Lua has empty statements +that allow you to separate statements with semicolons, +start a block with a semicolon +or write two semicolons in sequence: + +

+	stat ::= ‘;’
+
+ +

+Function calls and assignments +can start with an open parenthesis. +This possibility leads to an ambiguity in Lua's grammar. +Consider the following fragment: + +

+     a = b + c
+     (print or io.write)('done')
+

+The grammar could see it in two ways: + +

+     a = b + c(print or io.write)('done')
+     
+     a = b + c; (print or io.write)('done')
+

+The current parser always sees such constructions +in the first way, +interpreting the open parenthesis +as the start of the arguments to a call. +To avoid this ambiguity, +it is a good practice to always precede with a semicolon +statements that start with a parenthesis: + +

+     ;(print or io.write)('done')
+
+ +

+A block can be explicitly delimited to produce a single statement: + +

+	stat ::= do block end
+

+Explicit blocks are useful +to control the scope of variable declarations. +Explicit blocks are also sometimes used to +add a return statement in the middle +of another block (see §3.3.4). + + + + + +

3.3.2 – Chunks

+ +

+The unit of compilation of Lua is called a chunk. +Syntactically, +a chunk is simply a block: + +

+	chunk ::= block
+
+ +

+Lua handles a chunk as the body of an anonymous function +with a variable number of arguments +(see §3.4.10). +As such, chunks can define local variables, +receive arguments, and return values. +Moreover, such anonymous function is compiled as in the +scope of an external local variable called _ENV (see §2.2). +The resulting function always has _ENV as its only upvalue, +even if it does not use that variable. + + +

+A chunk can be stored in a file or in a string inside the host program. +To execute a chunk, +Lua first precompiles the chunk into instructions for a virtual machine, +and then it executes the compiled code +with an interpreter for the virtual machine. + + +

+Chunks can also be precompiled into binary form; +see program luac for details. +Programs in source and compiled forms are interchangeable; +Lua automatically detects the file type and acts accordingly. + + + + + + +

3.3.3 – Assignment

+ +

+Lua allows multiple assignments. +Therefore, the syntax for assignment +defines a list of variables on the left side +and a list of expressions on the right side. +The elements in both lists are separated by commas: + +

+	stat ::= varlist ‘=’ explist
+	varlist ::= var {‘,’ var}
+	explist ::= exp {‘,’ exp}
+

+Expressions are discussed in §3.4. + + +

+Before the assignment, +the list of values is adjusted to the length of +the list of variables. +If there are more values than needed, +the excess values are thrown away. +If there are fewer values than needed, +the list is extended with as many nil's as needed. +If the list of expressions ends with a function call, +then all values returned by that call enter the list of values, +before the adjustment +(except when the call is enclosed in parentheses; see §3.4). + + +

+The assignment statement first evaluates all its expressions +and only then are the assignments performed. +Thus the code + +

+     i = 3
+     i, a[i] = i+1, 20
+

+sets a[3] to 20, without affecting a[4] +because the i in a[i] is evaluated (to 3) +before it is assigned 4. +Similarly, the line + +

+     x, y = y, x
+

+exchanges the values of x and y, +and + +

+     x, y, z = y, z, x
+

+cyclically permutes the values of x, y, and z. + + +

+The meaning of assignments to global variables +and table fields can be changed via metatables. +An assignment to an indexed variable t[i] = val is equivalent to +settable_event(t,i,val). +(See §2.4 for a complete description of the +settable_event function. +This function is not defined or callable in Lua. +We use it here only for explanatory purposes.) + + +

+An assignment to a global variable x = val +is equivalent to the assignment +_ENV.x = val (see §2.2). + + + + + +

3.3.4 – Control Structures

+The control structures +if, while, and repeat have the usual meaning and +familiar syntax: + + + + +

+	stat ::= while exp do block end
+	stat ::= repeat block until exp
+	stat ::= if exp then block {elseif exp then block} [else block] end
+

+Lua also has a for statement, in two flavors (see §3.3.5). + + +

+The condition expression of a +control structure can return any value. +Both false and nil are considered false. +All values different from nil and false are considered true +(in particular, the number 0 and the empty string are also true). + + +

+In the repeatuntil loop, +the inner block does not end at the until keyword, +but only after the condition. +So, the condition can refer to local variables +declared inside the loop block. + + +

+The goto statement transfers the program control to a label. +For syntactical reasons, +labels in Lua are considered statements too: + + + +

+	stat ::= goto Name
+	stat ::= label
+	label ::= ‘::’ Name ‘::’
+
+ +

+A label is visible in the entire block where it is defined, +except +inside nested blocks where a label with the same name is defined and +inside nested functions. +A goto may jump to any visible label as long as it does not +enter into the scope of a local variable. + + +

+Labels and empty statements are called void statements, +as they perform no actions. + + +

+The break statement terminates the execution of a +while, repeat, or for loop, +skipping to the next statement after the loop: + + +

+	stat ::= break
+

+A break ends the innermost enclosing loop. + + +

+The return statement is used to return values +from a function or a chunk (which is a function in disguise). + +Functions can return more than one value, +so the syntax for the return statement is + +

+	stat ::= return [explist] [‘;’]
+
+ +

+The return statement can only be written +as the last statement of a block. +If it is really necessary to return in the middle of a block, +then an explicit inner block can be used, +as in the idiom do return end, +because now return is the last statement in its (inner) block. + + + + + +

3.3.5 – For Statement

+ +

+ +The for statement has two forms: +one numeric and one generic. + + +

+The numeric for loop repeats a block of code while a +control variable runs through an arithmetic progression. +It has the following syntax: + +

+	stat ::= for Name ‘=’ exp ‘,’ exp [‘,’ exp] do block end
+

+The block is repeated for name starting at the value of +the first exp, until it passes the second exp by steps of the +third exp. +More precisely, a for statement like + +

+     for v = e1, e2, e3 do block end
+

+is equivalent to the code: + +

+     do
+       local var, limit, step = tonumber(e1), tonumber(e2), tonumber(e3)
+       if not (var and limit and step) then error() end
+       while (step > 0 and var <= limit) or (step <= 0 and var >= limit) do
+         local v = var
+         block
+         var = var + step
+       end
+     end
+

+Note the following: + +

    + +
  • +All three control expressions are evaluated only once, +before the loop starts. +They must all result in numbers. +
  • + +
  • +var, limit, and step are invisible variables. +The names shown here are for explanatory purposes only. +
  • + +
  • +If the third expression (the step) is absent, +then a step of 1 is used. +
  • + +
  • +You can use break to exit a for loop. +
  • + +
  • +The loop variable v is local to the loop; +you cannot use its value after the for ends or is broken. +If you need this value, +assign it to another variable before breaking or exiting the loop. +
  • + +
+ +

+The generic for statement works over functions, +called iterators. +On each iteration, the iterator function is called to produce a new value, +stopping when this new value is nil. +The generic for loop has the following syntax: + +

+	stat ::= for namelist in explist do block end
+	namelist ::= Name {‘,’ Name}
+

+A for statement like + +

+     for var_1, ···, var_n in explist do block end
+

+is equivalent to the code: + +

+     do
+       local f, s, var = explist
+       while true do
+         local var_1, ···, var_n = f(s, var)
+         if var_1 == nil then break end
+         var = var_1
+         block
+       end
+     end
+

+Note the following: + +

    + +
  • +explist is evaluated only once. +Its results are an iterator function, +a state, +and an initial value for the first iterator variable. +
  • + +
  • +f, s, and var are invisible variables. +The names are here for explanatory purposes only. +
  • + +
  • +You can use break to exit a for loop. +
  • + +
  • +The loop variables var_i are local to the loop; +you cannot use their values after the for ends. +If you need these values, +then assign them to other variables before breaking or exiting the loop. +
  • + +
+ + + + +

3.3.6 – Function Calls as Statements

+To allow possible side-effects, +function calls can be executed as statements: + +

+	stat ::= functioncall
+

+In this case, all returned values are thrown away. +Function calls are explained in §3.4.9. + + + + + +

3.3.7 – Local Declarations

+Local variables can be declared anywhere inside a block. +The declaration can include an initial assignment: + +

+	stat ::= local namelist [‘=’ explist]
+

+If present, an initial assignment has the same semantics +of a multiple assignment (see §3.3.3). +Otherwise, all variables are initialized with nil. + + +

+A chunk is also a block (see §3.3.2), +and so local variables can be declared in a chunk outside any explicit block. + + +

+The visibility rules for local variables are explained in §3.5. + + + + + + + +

3.4 – Expressions

+ +

+The basic expressions in Lua are the following: + +

+	exp ::= prefixexp
+	exp ::= nil | false | true
+	exp ::= Number
+	exp ::= String
+	exp ::= functiondef
+	exp ::= tableconstructor
+	exp ::= ‘...’
+	exp ::= exp binop exp
+	exp ::= unop exp
+	prefixexp ::= var | functioncall | ‘(’ exp ‘)’
+
+ +

+Numbers and literal strings are explained in §3.1; +variables are explained in §3.2; +function definitions are explained in §3.4.10; +function calls are explained in §3.4.9; +table constructors are explained in §3.4.8. +Vararg expressions, +denoted by three dots ('...'), can only be used when +directly inside a vararg function; +they are explained in §3.4.10. + + +

+Binary operators comprise arithmetic operators (see §3.4.1), +relational operators (see §3.4.3), logical operators (see §3.4.4), +and the concatenation operator (see §3.4.5). +Unary operators comprise the unary minus (see §3.4.1), +the unary not (see §3.4.4), +and the unary length operator (see §3.4.6). + + +

+Both function calls and vararg expressions can result in multiple values. +If a function call is used as a statement (see §3.3.6), +then its return list is adjusted to zero elements, +thus discarding all returned values. +If an expression is used as the last (or the only) element +of a list of expressions, +then no adjustment is made +(unless the expression is enclosed in parentheses). +In all other contexts, +Lua adjusts the result list to one element, +either discarding all values except the first one +or adding a single nil if there are no values. + + +

+Here are some examples: + +

+     f()                -- adjusted to 0 results
+     g(f(), x)          -- f() is adjusted to 1 result
+     g(x, f())          -- g gets x plus all results from f()
+     a,b,c = f(), x     -- f() is adjusted to 1 result (c gets nil)
+     a,b = ...          -- a gets the first vararg parameter, b gets
+                        -- the second (both a and b can get nil if there
+                        -- is no corresponding vararg parameter)
+     
+     a,b,c = x, f()     -- f() is adjusted to 2 results
+     a,b,c = f()        -- f() is adjusted to 3 results
+     return f()         -- returns all results from f()
+     return ...         -- returns all received vararg parameters
+     return x,y,f()     -- returns x, y, and all results from f()
+     {f()}              -- creates a list with all results from f()
+     {...}              -- creates a list with all vararg parameters
+     {f(), nil}         -- f() is adjusted to 1 result
+
+ +

+Any expression enclosed in parentheses always results in only one value. +Thus, +(f(x,y,z)) is always a single value, +even if f returns several values. +(The value of (f(x,y,z)) is the first value returned by f +or nil if f does not return any values.) + + + +

3.4.1 – Arithmetic Operators

+Lua supports the usual arithmetic operators: +the binary + (addition), +- (subtraction), * (multiplication), +/ (division), % (modulo), and ^ (exponentiation); +and unary - (mathematical negation). +If the operands are numbers, or strings that can be converted to +numbers (see §3.4.2), +then all operations have the usual meaning. +Exponentiation works for any exponent. +For instance, x^(-0.5) computes the inverse of the square root of x. +Modulo is defined as + +

+     a % b == a - math.floor(a/b)*b
+

+That is, it is the remainder of a division that rounds +the quotient towards minus infinity. + + + + + +

3.4.2 – Coercion

+ +

+Lua provides automatic conversion between +string and number values at run time. +Any arithmetic operation applied to a string tries to convert +this string to a number, following the rules of the Lua lexer. +(The string may have leading and trailing spaces and a sign.) +Conversely, whenever a number is used where a string is expected, +the number is converted to a string, in a reasonable format. +For complete control over how numbers are converted to strings, +use the format function from the string library +(see string.format). + + + + + +

3.4.3 – Relational Operators

+The relational operators in Lua are + +

+     ==    ~=    <     >     <=    >=
+

+These operators always result in false or true. + + +

+Equality (==) first compares the type of its operands. +If the types are different, then the result is false. +Otherwise, the values of the operands are compared. +Numbers and strings are compared in the usual way. +Tables, userdata, and threads +are compared by reference: +two objects are considered equal only if they are the same object. +Every time you create a new object +(a table, userdata, or thread), +this new object is different from any previously existing object. +Closures with the same reference are always equal. +Closures with any detectable difference +(different behavior, different definition) are always different. + + +

+You can change the way that Lua compares tables and userdata +by using the "eq" metamethod (see §2.4). + + +

+The conversion rules of §3.4.2 +do not apply to equality comparisons. +Thus, "0"==0 evaluates to false, +and t[0] and t["0"] denote different +entries in a table. + + +

+The operator ~= is exactly the negation of equality (==). + + +

+The order operators work as follows. +If both arguments are numbers, then they are compared as such. +Otherwise, if both arguments are strings, +then their values are compared according to the current locale. +Otherwise, Lua tries to call the "lt" or the "le" +metamethod (see §2.4). +A comparison a > b is translated to b < a +and a >= b is translated to b <= a. + + + + + +

3.4.4 – Logical Operators

+The logical operators in Lua are +and, or, and not. +Like the control structures (see §3.3.4), +all logical operators consider both false and nil as false +and anything else as true. + + +

+The negation operator not always returns false or true. +The conjunction operator and returns its first argument +if this value is false or nil; +otherwise, and returns its second argument. +The disjunction operator or returns its first argument +if this value is different from nil and false; +otherwise, or returns its second argument. +Both and and or use short-cut evaluation; +that is, +the second operand is evaluated only if necessary. +Here are some examples: + +

+     10 or 20            --> 10
+     10 or error()       --> 10
+     nil or "a"          --> "a"
+     nil and 10          --> nil
+     false and error()   --> false
+     false and nil       --> false
+     false or nil        --> nil
+     10 and 20           --> 20
+

+(In this manual, +--> indicates the result of the preceding expression.) + + + + + +

3.4.5 – Concatenation

+The string concatenation operator in Lua is +denoted by two dots ('..'). +If both operands are strings or numbers, then they are converted to +strings according to the rules mentioned in §3.4.2. +Otherwise, the __concat metamethod is called (see §2.4). + + + + + +

3.4.6 – The Length Operator

+ +

+The length operator is denoted by the unary prefix operator #. +The length of a string is its number of bytes +(that is, the usual meaning of string length when each +character is one byte). + + +

+A program can modify the behavior of the length operator for +any value but strings through the __len metamethod (see §2.4). + + +

+Unless a __len metamethod is given, +the length of a table t is only defined if the +table is a sequence, +that is, +the set of its positive numeric keys is equal to {1..n} +for some non-negative integer n. +In that case, n is its length. +Note that a table like + +

+     {10, 20, nil, 40}
+

+is not a sequence, because it has the key 4 +but does not have the key 3. +(So, there is no n such that the set {1..n} is equal +to the set of positive numeric keys of that table.) +Note, however, that non-numeric keys do not interfere +with whether a table is a sequence. + + + + + +

3.4.7 – Precedence

+Operator precedence in Lua follows the table below, +from lower to higher priority: + +

+     or
+     and
+     <     >     <=    >=    ~=    ==
+     ..
+     +     -
+     *     /     %
+     not   #     - (unary)
+     ^
+

+As usual, +you can use parentheses to change the precedences of an expression. +The concatenation ('..') and exponentiation ('^') +operators are right associative. +All other binary operators are left associative. + + + + + +

3.4.8 – Table Constructors

+Table constructors are expressions that create tables. +Every time a constructor is evaluated, a new table is created. +A constructor can be used to create an empty table +or to create a table and initialize some of its fields. +The general syntax for constructors is + +

+	tableconstructor ::= ‘{’ [fieldlist] ‘}’
+	fieldlist ::= field {fieldsep field} [fieldsep]
+	field ::= ‘[’ exp ‘]’ ‘=’ exp | Name ‘=’ exp | exp
+	fieldsep ::= ‘,’ | ‘;’
+
+ +

+Each field of the form [exp1] = exp2 adds to the new table an entry +with key exp1 and value exp2. +A field of the form name = exp is equivalent to +["name"] = exp. +Finally, fields of the form exp are equivalent to +[i] = exp, where i are consecutive numerical integers, +starting with 1. +Fields in the other formats do not affect this counting. +For example, + +

+     a = { [f(1)] = g; "x", "y"; x = 1, f(x), [30] = 23; 45 }
+

+is equivalent to + +

+     do
+       local t = {}
+       t[f(1)] = g
+       t[1] = "x"         -- 1st exp
+       t[2] = "y"         -- 2nd exp
+       t.x = 1            -- t["x"] = 1
+       t[3] = f(x)        -- 3rd exp
+       t[30] = 23
+       t[4] = 45          -- 4th exp
+       a = t
+     end
+
+ +

+If the last field in the list has the form exp +and the expression is a function call or a vararg expression, +then all values returned by this expression enter the list consecutively +(see §3.4.9). + + +

+The field list can have an optional trailing separator, +as a convenience for machine-generated code. + + + + + +

3.4.9 – Function Calls

+A function call in Lua has the following syntax: + +

+	functioncall ::= prefixexp args
+

+In a function call, +first prefixexp and args are evaluated. +If the value of prefixexp has type function, +then this function is called +with the given arguments. +Otherwise, the prefixexp "call" metamethod is called, +having as first parameter the value of prefixexp, +followed by the original call arguments +(see §2.4). + + +

+The form + +

+	functioncall ::= prefixexp ‘:’ Name args
+

+can be used to call "methods". +A call v:name(args) +is syntactic sugar for v.name(v,args), +except that v is evaluated only once. + + +

+Arguments have the following syntax: + +

+	args ::= ‘(’ [explist] ‘)’
+	args ::= tableconstructor
+	args ::= String
+

+All argument expressions are evaluated before the call. +A call of the form f{fields} is +syntactic sugar for f({fields}); +that is, the argument list is a single new table. +A call of the form f'string' +(or f"string" or f[[string]]) +is syntactic sugar for f('string'); +that is, the argument list is a single literal string. + + +

+A call of the form return functioncall is called +a tail call. +Lua implements proper tail calls +(or proper tail recursion): +in a tail call, +the called function reuses the stack entry of the calling function. +Therefore, there is no limit on the number of nested tail calls that +a program can execute. +However, a tail call erases any debug information about the +calling function. +Note that a tail call only happens with a particular syntax, +where the return has one single function call as argument; +this syntax makes the calling function return exactly +the returns of the called function. +So, none of the following examples are tail calls: + +

+     return (f(x))        -- results adjusted to 1
+     return 2 * f(x)
+     return x, f(x)       -- additional results
+     f(x); return         -- results discarded
+     return x or f(x)     -- results adjusted to 1
+
+ + + + +

3.4.10 – Function Definitions

+ +

+The syntax for function definition is + +

+	functiondef ::= function funcbody
+	funcbody ::= ‘(’ [parlist] ‘)’ block end
+
+ +

+The following syntactic sugar simplifies function definitions: + +

+	stat ::= function funcname funcbody
+	stat ::= local function Name funcbody
+	funcname ::= Name {‘.’ Name} [‘:’ Name]
+

+The statement + +

+     function f () body end
+

+translates to + +

+     f = function () body end
+

+The statement + +

+     function t.a.b.c.f () body end
+

+translates to + +

+     t.a.b.c.f = function () body end
+

+The statement + +

+     local function f () body end
+

+translates to + +

+     local f; f = function () body end
+

+not to + +

+     local f = function () body end
+

+(This only makes a difference when the body of the function +contains references to f.) + + +

+A function definition is an executable expression, +whose value has type function. +When Lua precompiles a chunk, +all its function bodies are precompiled too. +Then, whenever Lua executes the function definition, +the function is instantiated (or closed). +This function instance (or closure) +is the final value of the expression. + + +

+Parameters act as local variables that are +initialized with the argument values: + +

+	parlist ::= namelist [‘,’ ‘...’] | ‘...’
+

+When a function is called, +the list of arguments is adjusted to +the length of the list of parameters, +unless the function is a vararg function, +which is indicated by three dots ('...') +at the end of its parameter list. +A vararg function does not adjust its argument list; +instead, it collects all extra arguments and supplies them +to the function through a vararg expression, +which is also written as three dots. +The value of this expression is a list of all actual extra arguments, +similar to a function with multiple results. +If a vararg expression is used inside another expression +or in the middle of a list of expressions, +then its return list is adjusted to one element. +If the expression is used as the last element of a list of expressions, +then no adjustment is made +(unless that last expression is enclosed in parentheses). + + +

+As an example, consider the following definitions: + +

+     function f(a, b) end
+     function g(a, b, ...) end
+     function r() return 1,2,3 end
+

+Then, we have the following mapping from arguments to parameters and +to the vararg expression: + +

+     CALL            PARAMETERS
+     
+     f(3)             a=3, b=nil
+     f(3, 4)          a=3, b=4
+     f(3, 4, 5)       a=3, b=4
+     f(r(), 10)       a=1, b=10
+     f(r())           a=1, b=2
+     
+     g(3)             a=3, b=nil, ... -->  (nothing)
+     g(3, 4)          a=3, b=4,   ... -->  (nothing)
+     g(3, 4, 5, 8)    a=3, b=4,   ... -->  5  8
+     g(5, r())        a=5, b=1,   ... -->  2  3
+
+ +

+Results are returned using the return statement (see §3.3.4). +If control reaches the end of a function +without encountering a return statement, +then the function returns with no results. + + +

+ +There is a system-dependent limit on the number of values +that a function may return. +This limit is guaranteed to be larger than 1000. + + +

+The colon syntax +is used for defining methods, +that is, functions that have an implicit extra parameter self. +Thus, the statement + +

+     function t.a.b.c:f (params) body end
+

+is syntactic sugar for + +

+     t.a.b.c.f = function (self, params) body end
+
+ + + + + + +

3.5 – Visibility Rules

+ +

+ +Lua is a lexically scoped language. +The scope of a local variable begins at the first statement after +its declaration and lasts until the last non-void statement +of the innermost block that includes the declaration. +Consider the following example: + +

+     x = 10                -- global variable
+     do                    -- new block
+       local x = x         -- new 'x', with value 10
+       print(x)            --> 10
+       x = x+1
+       do                  -- another block
+         local x = x+1     -- another 'x'
+         print(x)          --> 12
+       end
+       print(x)            --> 11
+     end
+     print(x)              --> 10  (the global one)
+
+ +

+Notice that, in a declaration like local x = x, +the new x being declared is not in scope yet, +and so the second x refers to the outside variable. + + +

+Because of the lexical scoping rules, +local variables can be freely accessed by functions +defined inside their scope. +A local variable used by an inner function is called +an upvalue, or external local variable, +inside the inner function. + + +

+Notice that each execution of a local statement +defines new local variables. +Consider the following example: + +

+     a = {}
+     local x = 20
+     for i=1,10 do
+       local y = 0
+       a[i] = function () y=y+1; return x+y end
+     end
+

+The loop creates ten closures +(that is, ten instances of the anonymous function). +Each of these closures uses a different y variable, +while all of them share the same x. + + + + + +

4 – The Application Program Interface

+ +

+ +This section describes the C API for Lua, that is, +the set of C functions available to the host program to communicate +with Lua. +All API functions and related types and constants +are declared in the header file lua.h. + + +

+Even when we use the term "function", +any facility in the API may be provided as a macro instead. +Except where stated otherwise, +all such macros use each of their arguments exactly once +(except for the first argument, which is always a Lua state), +and so do not generate any hidden side-effects. + + +

+As in most C libraries, +the Lua API functions do not check their arguments for validity or consistency. +However, you can change this behavior by compiling Lua +with the macro LUA_USE_APICHECK defined. + + + +

4.1 – The Stack

+ +

+Lua uses a virtual stack to pass values to and from C. +Each element in this stack represents a Lua value +(nil, number, string, etc.). + + +

+Whenever Lua calls C, the called function gets a new stack, +which is independent of previous stacks and of stacks of +C functions that are still active. +This stack initially contains any arguments to the C function +and it is where the C function pushes its results +to be returned to the caller (see lua_CFunction). + + +

+For convenience, +most query operations in the API do not follow a strict stack discipline. +Instead, they can refer to any element in the stack +by using an index: +A positive index represents an absolute stack position +(starting at 1); +a negative index represents an offset relative to the top of the stack. +More specifically, if the stack has n elements, +then index 1 represents the first element +(that is, the element that was pushed onto the stack first) +and +index n represents the last element; +index -1 also represents the last element +(that is, the element at the top) +and index -n represents the first element. + + + + + +

4.2 – Stack Size

+ +

+When you interact with the Lua API, +you are responsible for ensuring consistency. +In particular, +you are responsible for controlling stack overflow. +You can use the function lua_checkstack +to ensure that the stack has extra slots when pushing new elements. + + +

+Whenever Lua calls C, +it ensures that the stack has at least LUA_MINSTACK extra slots. +LUA_MINSTACK is defined as 20, +so that usually you do not have to worry about stack space +unless your code has loops pushing elements onto the stack. + + +

+When you call a Lua function +without a fixed number of results (see lua_call), +Lua ensures that the stack has enough size for all results, +but it does not ensure any extra space. +So, before pushing anything in the stack after such a call +you should use lua_checkstack. + + + + + +

4.3 – Valid and Acceptable Indices

+ +

+Any function in the API that receives stack indices +works only with valid indices or acceptable indices. + + +

+A valid index is an index that refers to a +real position within the stack, that is, +its position lies between 1 and the stack top +(1 ≤ abs(index) ≤ top). + +Usually, functions that can modify the value at an index +require valid indices. + + +

+Unless otherwise noted, +any function that accepts valid indices also accepts pseudo-indices, +which represent some Lua values that are accessible to C code +but which are not in the stack. +Pseudo-indices are used to access the registry +and the upvalues of a C function (see §4.4). + + +

+Functions that do not need a specific stack position, +but only a value in the stack (e.g., query functions), +can be called with acceptable indices. +An acceptable index can be any valid index, +including the pseudo-indices, +but it also can be any positive index after the stack top +within the space allocated for the stack, +that is, indices up to the stack size. +(Note that 0 is never an acceptable index.) +Except when noted otherwise, +functions in the API work with acceptable indices. + + +

+Acceptable indices serve to avoid extra tests +against the stack top when querying the stack. +For instance, a C function can query its third argument +without the need to first check whether there is a third argument, +that is, without the need to check whether 3 is a valid index. + + +

+For functions that can be called with acceptable indices, +any non-valid index is treated as if it +contains a value of a virtual type LUA_TNONE, +which behaves like a nil value. + + + + + +

4.4 – C Closures

+ +

+When a C function is created, +it is possible to associate some values with it, +thus creating a C closure +(see lua_pushcclosure); +these values are called upvalues and are +accessible to the function whenever it is called. + + +

+Whenever a C function is called, +its upvalues are located at specific pseudo-indices. +These pseudo-indices are produced by the macro +lua_upvalueindex. +The first value associated with a function is at position +lua_upvalueindex(1), and so on. +Any access to lua_upvalueindex(n), +where n is greater than the number of upvalues of the +current function (but not greater than 256), +produces an acceptable but invalid index. + + + + + +

4.5 – Registry

+ +

+Lua provides a registry, +a predefined table that can be used by any C code to +store whatever Lua values it needs to store. +The registry table is always located at pseudo-index +LUA_REGISTRYINDEX, +which is a valid index. +Any C library can store data into this table, +but it should take care to choose keys +that are different from those used +by other libraries, to avoid collisions. +Typically, you should use as key a string containing your library name, +or a light userdata with the address of a C object in your code, +or any Lua object created by your code. +As with global names, +string keys starting with an underscore followed by +uppercase letters are reserved for Lua. + + +

+The integer keys in the registry are used by the reference mechanism, +implemented by the auxiliary library, +and by some predefined values. +Therefore, integer keys should not be used for other purposes. + + +

+When you create a new Lua state, +its registry comes with some predefined values. +These predefined values are indexed with integer keys +defined as constants in lua.h. +The following constants are defined: + +

    +
  • LUA_RIDX_MAINTHREAD: At this index the registry has +the main thread of the state. +(The main thread is the one created together with the state.) +
  • + +
  • LUA_RIDX_GLOBALS: At this index the registry has +the global environment. +
  • +
+ + + + +

4.6 – Error Handling in C

+ +

+Internally, Lua uses the C longjmp facility to handle errors. +(You can also choose to use exceptions if you compile Lua as C++; +search for LUAI_THROW in the source code.) +When Lua faces any error +(such as a memory allocation error, type errors, syntax errors, +and runtime errors) +it raises an error; +that is, it does a long jump. +A protected environment uses setjmp +to set a recovery point; +any error jumps to the most recent active recovery point. + + +

+If an error happens outside any protected environment, +Lua calls a panic function (see lua_atpanic) +and then calls abort, +thus exiting the host application. +Your panic function can avoid this exit by +never returning +(e.g., doing a long jump to your own recovery point outside Lua). + + +

+The panic function runs as if it were a message handler (see §2.3); +in particular, the error message is at the top of the stack. +However, there is no guarantees about stack space. +To push anything on the stack, +the panic function should first check the available space (see §4.2). + + +

+Most functions in the API can throw an error, +for instance due to a memory allocation error. +The documentation for each function indicates whether +it can throw errors. + + +

+Inside a C function you can throw an error by calling lua_error. + + + + + +

4.7 – Handling Yields in C

+ +

+Internally, Lua uses the C longjmp facility to yield a coroutine. +Therefore, if a function foo calls an API function +and this API function yields +(directly or indirectly by calling another function that yields), +Lua cannot return to foo any more, +because the longjmp removes its frame from the C stack. + + +

+To avoid this kind of problem, +Lua raises an error whenever it tries to yield across an API call, +except for three functions: +lua_yieldk, lua_callk, and lua_pcallk. +All those functions receive a continuation function +(as a parameter called k) to continue execution after a yield. + + +

+We need to set some terminology to explain continuations. +We have a C function called from Lua which we will call +the original function. +This original function then calls one of those three functions in the C API, +which we will call the callee function, +that then yields the current thread. +(This can happen when the callee function is lua_yieldk, +or when the callee function is either lua_callk or lua_pcallk +and the function called by them yields.) + + +

+Suppose the running thread yields while executing the callee function. +After the thread resumes, +it eventually will finish running the callee function. +However, +the callee function cannot return to the original function, +because its frame in the C stack was destroyed by the yield. +Instead, Lua calls a continuation function, +which was given as an argument to the callee function. +As the name implies, +the continuation function should continue the task +of the original function. + + +

+Lua treats the continuation function as if it were the original function. +The continuation function receives the same Lua stack +from the original function, +in the same state it would be if the callee function had returned. +(For instance, +after a lua_callk the function and its arguments are +removed from the stack and replaced by the results from the call.) +It also has the same upvalues. +Whatever it returns is handled by Lua as if it were the return +of the original function. + + +

+The only difference in the Lua state between the original function +and its continuation is the result of a call to lua_getctx. + + + + + +

4.8 – Functions and Types

+ +

+Here we list all functions and types from the C API in +alphabetical order. +Each function has an indicator like this: +[-o, +p, x] + + +

+The first field, o, +is how many elements the function pops from the stack. +The second field, p, +is how many elements the function pushes onto the stack. +(Any function always pushes its results after popping its arguments.) +A field in the form x|y means the function can push (or pop) +x or y elements, +depending on the situation; +an interrogation mark '?' means that +we cannot know how many elements the function pops/pushes +by looking only at its arguments +(e.g., they may depend on what is on the stack). +The third field, x, +tells whether the function may throw errors: +'-' means the function never throws any error; +'e' means the function may throw errors; +'v' means the function may throw an error on purpose. + + + +


lua_absindex

+[-0, +0, –] +

int lua_absindex (lua_State *L, int idx);
+ +

+Converts the acceptable index idx into an absolute index +(that is, one that does not depend on the stack top). + + + + + +


lua_Alloc

+
typedef void * (*lua_Alloc) (void *ud,
+                             void *ptr,
+                             size_t osize,
+                             size_t nsize);
+ +

+The type of the memory-allocation function used by Lua states. +The allocator function must provide a +functionality similar to realloc, +but not exactly the same. +Its arguments are +ud, an opaque pointer passed to lua_newstate; +ptr, a pointer to the block being allocated/reallocated/freed; +osize, the original size of the block or some code about what +is being allocated; +nsize, the new size of the block. + + +

+When ptr is not NULL, +osize is the size of the block pointed by ptr, +that is, the size given when it was allocated or reallocated. + + +

+When ptr is NULL, +osize encodes the kind of object that Lua is allocating. +osize is any of +LUA_TSTRING, LUA_TTABLE, LUA_TFUNCTION, +LUA_TUSERDATA, or LUA_TTHREAD when (and only when) +Lua is creating a new object of that type. +When osize is some other value, +Lua is allocating memory for something else. + + +

+Lua assumes the following behavior from the allocator function: + + +

+When nsize is zero, +the allocator should behave like free +and return NULL. + + +

+When nsize is not zero, +the allocator should behave like realloc. +The allocator returns NULL +if and only if it cannot fulfill the request. +Lua assumes that the allocator never fails when +osize >= nsize. + + +

+Here is a simple implementation for the allocator function. +It is used in the auxiliary library by luaL_newstate. + +

+     static void *l_alloc (void *ud, void *ptr, size_t osize,
+                                                size_t nsize) {
+       (void)ud;  (void)osize;  /* not used */
+       if (nsize == 0) {
+         free(ptr);
+         return NULL;
+       }
+       else
+         return realloc(ptr, nsize);
+     }
+

+Note that Standard C ensures +that free(NULL) has no effect and that +realloc(NULL, size) is equivalent to malloc(size). +This code assumes that realloc does not fail when shrinking a block. +(Although Standard C does not ensure this behavior, +it seems to be a safe assumption.) + + + + + +


lua_arith

+[-(2|1), +1, e] +

void lua_arith (lua_State *L, int op);
+ +

+Performs an arithmetic operation over the two values +(or one, in the case of negation) +at the top of the stack, +with the value at the top being the second operand, +pops these values, and pushes the result of the operation. +The function follows the semantics of the corresponding Lua operator +(that is, it may call metamethods). + + +

+The value of op must be one of the following constants: + +

+ + + + +

lua_atpanic

+[-0, +0, –] +

lua_CFunction lua_atpanic (lua_State *L, lua_CFunction panicf);
+ +

+Sets a new panic function and returns the old one (see §4.6). + + + + + +


lua_call

+[-(nargs+1), +nresults, e] +

void lua_call (lua_State *L, int nargs, int nresults);
+ +

+Calls a function. + + +

+To call a function you must use the following protocol: +first, the function to be called is pushed onto the stack; +then, the arguments to the function are pushed +in direct order; +that is, the first argument is pushed first. +Finally you call lua_call; +nargs is the number of arguments that you pushed onto the stack. +All arguments and the function value are popped from the stack +when the function is called. +The function results are pushed onto the stack when the function returns. +The number of results is adjusted to nresults, +unless nresults is LUA_MULTRET. +In this case, all results from the function are pushed. +Lua takes care that the returned values fit into the stack space. +The function results are pushed onto the stack in direct order +(the first result is pushed first), +so that after the call the last result is on the top of the stack. + + +

+Any error inside the called function is propagated upwards +(with a longjmp). + + +

+The following example shows how the host program can do the +equivalent to this Lua code: + +

+     a = f("how", t.x, 14)
+

+Here it is in C: + +

+     lua_getglobal(L, "f");                  /* function to be called */
+     lua_pushstring(L, "how");                        /* 1st argument */
+     lua_getglobal(L, "t");                    /* table to be indexed */
+     lua_getfield(L, -1, "x");        /* push result of t.x (2nd arg) */
+     lua_remove(L, -2);                  /* remove 't' from the stack */
+     lua_pushinteger(L, 14);                          /* 3rd argument */
+     lua_call(L, 3, 1);     /* call 'f' with 3 arguments and 1 result */
+     lua_setglobal(L, "a");                         /* set global 'a' */
+

+Note that the code above is "balanced": +at its end, the stack is back to its original configuration. +This is considered good programming practice. + + + + + +


lua_callk

+[-(nargs + 1), +nresults, e] +

void lua_callk (lua_State *L, int nargs, int nresults, int ctx,
+                lua_CFunction k);
+ +

+This function behaves exactly like lua_call, +but allows the called function to yield (see §4.7). + + + + + +


lua_CFunction

+
typedef int (*lua_CFunction) (lua_State *L);
+ +

+Type for C functions. + + +

+In order to communicate properly with Lua, +a C function must use the following protocol, +which defines the way parameters and results are passed: +a C function receives its arguments from Lua in its stack +in direct order (the first argument is pushed first). +So, when the function starts, +lua_gettop(L) returns the number of arguments received by the function. +The first argument (if any) is at index 1 +and its last argument is at index lua_gettop(L). +To return values to Lua, a C function just pushes them onto the stack, +in direct order (the first result is pushed first), +and returns the number of results. +Any other value in the stack below the results will be properly +discarded by Lua. +Like a Lua function, a C function called by Lua can also return +many results. + + +

+As an example, the following function receives a variable number +of numerical arguments and returns their average and sum: + +

+     static int foo (lua_State *L) {
+       int n = lua_gettop(L);    /* number of arguments */
+       lua_Number sum = 0;
+       int i;
+       for (i = 1; i <= n; i++) {
+         if (!lua_isnumber(L, i)) {
+           lua_pushstring(L, "incorrect argument");
+           lua_error(L);
+         }
+         sum += lua_tonumber(L, i);
+       }
+       lua_pushnumber(L, sum/n);        /* first result */
+       lua_pushnumber(L, sum);         /* second result */
+       return 2;                   /* number of results */
+     }
+
+ + + + +

lua_checkstack

+[-0, +0, –] +

int lua_checkstack (lua_State *L, int extra);
+ +

+Ensures that there are at least extra free stack slots in the stack. +It returns false if it cannot fulfill the request, +because it would cause the stack to be larger than a fixed maximum size +(typically at least a few thousand elements) or +because it cannot allocate memory for the new stack size. +This function never shrinks the stack; +if the stack is already larger than the new size, +it is left unchanged. + + + + + +


lua_close

+[-0, +0, –] +

void lua_close (lua_State *L);
+ +

+Destroys all objects in the given Lua state +(calling the corresponding garbage-collection metamethods, if any) +and frees all dynamic memory used by this state. +On several platforms, you may not need to call this function, +because all resources are naturally released when the host program ends. +On the other hand, long-running programs that create multiple states, +such as daemons or web servers, +might need to close states as soon as they are not needed. + + + + + +


lua_compare

+[-0, +0, e] +

int lua_compare (lua_State *L, int index1, int index2, int op);
+ +

+Compares two Lua values. +Returns 1 if the value at index index1 satisfies op +when compared with the value at index index2, +following the semantics of the corresponding Lua operator +(that is, it may call metamethods). +Otherwise returns 0. +Also returns 0 if any of the indices is non valid. + + +

+The value of op must be one of the following constants: + +

    + +
  • LUA_OPEQ: compares for equality (==)
  • +
  • LUA_OPLT: compares for less than (<)
  • +
  • LUA_OPLE: compares for less or equal (<=)
  • + +
+ + + + +

lua_concat

+[-n, +1, e] +

void lua_concat (lua_State *L, int n);
+ +

+Concatenates the n values at the top of the stack, +pops them, and leaves the result at the top. +If n is 1, the result is the single value on the stack +(that is, the function does nothing); +if n is 0, the result is the empty string. +Concatenation is performed following the usual semantics of Lua +(see §3.4.5). + + + + + +


lua_copy

+[-0, +0, –] +

void lua_copy (lua_State *L, int fromidx, int toidx);
+ +

+Moves the element at index fromidx +into the valid index toidx +without shifting any element +(therefore replacing the value at that position). + + + + + +


lua_createtable

+[-0, +1, e] +

void lua_createtable (lua_State *L, int narr, int nrec);
+ +

+Creates a new empty table and pushes it onto the stack. +Parameter narr is a hint for how many elements the table +will have as a sequence; +parameter nrec is a hint for how many other elements +the table will have. +Lua may use these hints to preallocate memory for the new table. +This pre-allocation is useful for performance when you know in advance +how many elements the table will have. +Otherwise you can use the function lua_newtable. + + + + + +


lua_dump

+[-0, +0, e] +

int lua_dump (lua_State *L, lua_Writer writer, void *data);
+ +

+Dumps a function as a binary chunk. +Receives a Lua function on the top of the stack +and produces a binary chunk that, +if loaded again, +results in a function equivalent to the one dumped. +As it produces parts of the chunk, +lua_dump calls function writer (see lua_Writer) +with the given data +to write them. + + +

+The value returned is the error code returned by the last +call to the writer; +0 means no errors. + + +

+This function does not pop the Lua function from the stack. + + + + + +


lua_error

+[-1, +0, v] +

int lua_error (lua_State *L);
+ +

+Generates a Lua error. +The error message (which can actually be a Lua value of any type) +must be on the stack top. +This function does a long jump, +and therefore never returns +(see luaL_error). + + + + + +


lua_gc

+[-0, +0, e] +

int lua_gc (lua_State *L, int what, int data);
+ +

+Controls the garbage collector. + + +

+This function performs several tasks, +according to the value of the parameter what: + +

    + +
  • LUA_GCSTOP: +stops the garbage collector. +
  • + +
  • LUA_GCRESTART: +restarts the garbage collector. +
  • + +
  • LUA_GCCOLLECT: +performs a full garbage-collection cycle. +
  • + +
  • LUA_GCCOUNT: +returns the current amount of memory (in Kbytes) in use by Lua. +
  • + +
  • LUA_GCCOUNTB: +returns the remainder of dividing the current amount of bytes of +memory in use by Lua by 1024. +
  • + +
  • LUA_GCSTEP: +performs an incremental step of garbage collection. +The step "size" is controlled by data +(larger values mean more steps) in a non-specified way. +If you want to control the step size +you must experimentally tune the value of data. +The function returns 1 if the step finished a +garbage-collection cycle. +
  • + +
  • LUA_GCSETPAUSE: +sets data as the new value +for the pause of the collector (see §2.5). +The function returns the previous value of the pause. +
  • + +
  • LUA_GCSETSTEPMUL: +sets data as the new value for the step multiplier of +the collector (see §2.5). +The function returns the previous value of the step multiplier. +
  • + +
  • LUA_GCISRUNNING: +returns a boolean that tells whether the collector is running +(i.e., not stopped). +
  • + +
  • LUA_GCGEN: +changes the collector to generational mode +(see §2.5). +
  • + +
  • LUA_GCINC: +changes the collector to incremental mode. +This is the default mode. +
  • + +
+ +

+For more details about these options, +see collectgarbage. + + + + + +


lua_getallocf

+[-0, +0, –] +

lua_Alloc lua_getallocf (lua_State *L, void **ud);
+ +

+Returns the memory-allocation function of a given state. +If ud is not NULL, Lua stores in *ud the +opaque pointer passed to lua_newstate. + + + + + +


lua_getctx

+[-0, +0, –] +

int lua_getctx (lua_State *L, int *ctx);
+ +

+This function is called by a continuation function (see §4.7) +to retrieve the status of the thread and a context information. + + +

+When called in the original function, +lua_getctx always returns LUA_OK +and does not change the value of its argument ctx. +When called inside a continuation function, +lua_getctx returns LUA_YIELD and sets +the value of ctx to be the context information +(the value passed as the ctx argument +to the callee together with the continuation function). + + +

+When the callee is lua_pcallk, +Lua may also call its continuation function +to handle errors during the call. +That is, upon an error in the function called by lua_pcallk, +Lua may not return to the original function +but instead may call the continuation function. +In that case, a call to lua_getctx will return the error code +(the value that would be returned by lua_pcallk); +the value of ctx will be set to the context information, +as in the case of a yield. + + + + + +


lua_getfield

+[-0, +1, e] +

void lua_getfield (lua_State *L, int index, const char *k);
+ +

+Pushes onto the stack the value t[k], +where t is the value at the given index. +As in Lua, this function may trigger a metamethod +for the "index" event (see §2.4). + + + + + +


lua_getglobal

+[-0, +1, e] +

void lua_getglobal (lua_State *L, const char *name);
+ +

+Pushes onto the stack the value of the global name. + + + + + +


lua_getmetatable

+[-0, +(0|1), –] +

int lua_getmetatable (lua_State *L, int index);
+ +

+Pushes onto the stack the metatable of the value at the given index. +If the value does not have a metatable, +the function returns 0 and pushes nothing on the stack. + + + + + +


lua_gettable

+[-1, +1, e] +

void lua_gettable (lua_State *L, int index);
+ +

+Pushes onto the stack the value t[k], +where t is the value at the given index +and k is the value at the top of the stack. + + +

+This function pops the key from the stack +(putting the resulting value in its place). +As in Lua, this function may trigger a metamethod +for the "index" event (see §2.4). + + + + + +


lua_gettop

+[-0, +0, –] +

int lua_gettop (lua_State *L);
+ +

+Returns the index of the top element in the stack. +Because indices start at 1, +this result is equal to the number of elements in the stack +(and so 0 means an empty stack). + + + + + +


lua_getuservalue

+[-0, +1, –] +

void lua_getuservalue (lua_State *L, int index);
+ +

+Pushes onto the stack the Lua value associated with the userdata +at the given index. +This Lua value must be a table or nil. + + + + + +


lua_insert

+[-1, +1, –] +

void lua_insert (lua_State *L, int index);
+ +

+Moves the top element into the given valid index, +shifting up the elements above this index to open space. +This function cannot be called with a pseudo-index, +because a pseudo-index is not an actual stack position. + + + + + +


lua_Integer

+
typedef ptrdiff_t lua_Integer;
+ +

+The type used by the Lua API to represent signed integral values. + + +

+By default it is a ptrdiff_t, +which is usually the largest signed integral type the machine handles +"comfortably". + + + + + +


lua_isboolean

+[-0, +0, –] +

int lua_isboolean (lua_State *L, int index);
+ +

+Returns 1 if the value at the given index is a boolean, +and 0 otherwise. + + + + + +


lua_iscfunction

+[-0, +0, –] +

int lua_iscfunction (lua_State *L, int index);
+ +

+Returns 1 if the value at the given index is a C function, +and 0 otherwise. + + + + + +


lua_isfunction

+[-0, +0, –] +

int lua_isfunction (lua_State *L, int index);
+ +

+Returns 1 if the value at the given index is a function +(either C or Lua), and 0 otherwise. + + + + + +


lua_islightuserdata

+[-0, +0, –] +

int lua_islightuserdata (lua_State *L, int index);
+ +

+Returns 1 if the value at the given index is a light userdata, +and 0 otherwise. + + + + + +


lua_isnil

+[-0, +0, –] +

int lua_isnil (lua_State *L, int index);
+ +

+Returns 1 if the value at the given index is nil, +and 0 otherwise. + + + + + +


lua_isnone

+[-0, +0, –] +

int lua_isnone (lua_State *L, int index);
+ +

+Returns 1 if the given index is not valid, +and 0 otherwise. + + + + + +


lua_isnoneornil

+[-0, +0, –] +

int lua_isnoneornil (lua_State *L, int index);
+ +

+Returns 1 if the given index is not valid +or if the value at this index is nil, +and 0 otherwise. + + + + + +


lua_isnumber

+[-0, +0, –] +

int lua_isnumber (lua_State *L, int index);
+ +

+Returns 1 if the value at the given index is a number +or a string convertible to a number, +and 0 otherwise. + + + + + +


lua_isstring

+[-0, +0, –] +

int lua_isstring (lua_State *L, int index);
+ +

+Returns 1 if the value at the given index is a string +or a number (which is always convertible to a string), +and 0 otherwise. + + + + + +


lua_istable

+[-0, +0, –] +

int lua_istable (lua_State *L, int index);
+ +

+Returns 1 if the value at the given index is a table, +and 0 otherwise. + + + + + +


lua_isthread

+[-0, +0, –] +

int lua_isthread (lua_State *L, int index);
+ +

+Returns 1 if the value at the given index is a thread, +and 0 otherwise. + + + + + +


lua_isuserdata

+[-0, +0, –] +

int lua_isuserdata (lua_State *L, int index);
+ +

+Returns 1 if the value at the given index is a userdata +(either full or light), and 0 otherwise. + + + + + +


lua_len

+[-0, +1, e] +

void lua_len (lua_State *L, int index);
+ +

+Returns the "length" of the value at the given index; +it is equivalent to the '#' operator in Lua (see §3.4.6). +The result is pushed on the stack. + + + + + +


lua_load

+[-0, +1, –] +

int lua_load (lua_State *L,
+              lua_Reader reader,
+              void *data,
+              const char *source,
+              const char *mode);
+ +

+Loads a Lua chunk (without running it). +If there are no errors, +lua_load pushes the compiled chunk as a Lua +function on top of the stack. +Otherwise, it pushes an error message. + + +

+The return values of lua_load are: + +

    + +
  • LUA_OK: no errors;
  • + +
  • LUA_ERRSYNTAX: +syntax error during precompilation;
  • + +
  • LUA_ERRMEM: +memory allocation error;
  • + +
  • LUA_ERRGCMM: +error while running a __gc metamethod. +(This error has no relation with the chunk being loaded. +It is generated by the garbage collector.) +
  • + +
+ +

+The lua_load function uses a user-supplied reader function +to read the chunk (see lua_Reader). +The data argument is an opaque value passed to the reader function. + + +

+The source argument gives a name to the chunk, +which is used for error messages and in debug information (see §4.9). + + +

+lua_load automatically detects whether the chunk is text or binary +and loads it accordingly (see program luac). +The string mode works as in function load, +with the addition that +a NULL value is equivalent to the string "bt". + + +

+lua_load uses the stack internally, +so the reader function should always leave the stack +unmodified when returning. + + +

+If the resulting function has one upvalue, +this upvalue is set to the value of the global environment +stored at index LUA_RIDX_GLOBALS in the registry (see §4.5). +When loading main chunks, +this upvalue will be the _ENV variable (see §2.2). + + + + + +


lua_newstate

+[-0, +0, –] +

lua_State *lua_newstate (lua_Alloc f, void *ud);
+ +

+Creates a new thread running in a new, independent state. +Returns NULL if cannot create the thread or the state +(due to lack of memory). +The argument f is the allocator function; +Lua does all memory allocation for this state through this function. +The second argument, ud, is an opaque pointer that Lua +passes to the allocator in every call. + + + + + +


lua_newtable

+[-0, +1, e] +

void lua_newtable (lua_State *L);
+ +

+Creates a new empty table and pushes it onto the stack. +It is equivalent to lua_createtable(L, 0, 0). + + + + + +


lua_newthread

+[-0, +1, e] +

lua_State *lua_newthread (lua_State *L);
+ +

+Creates a new thread, pushes it on the stack, +and returns a pointer to a lua_State that represents this new thread. +The new thread returned by this function shares with the original thread +its global environment, +but has an independent execution stack. + + +

+There is no explicit function to close or to destroy a thread. +Threads are subject to garbage collection, +like any Lua object. + + + + + +


lua_newuserdata

+[-0, +1, e] +

void *lua_newuserdata (lua_State *L, size_t size);
+ +

+This function allocates a new block of memory with the given size, +pushes onto the stack a new full userdata with the block address, +and returns this address. +The host program can freely use this memory. + + + + + +


lua_next

+[-1, +(2|0), e] +

int lua_next (lua_State *L, int index);
+ +

+Pops a key from the stack, +and pushes a key–value pair from the table at the given index +(the "next" pair after the given key). +If there are no more elements in the table, +then lua_next returns 0 (and pushes nothing). + + +

+A typical traversal looks like this: + +

+     /* table is in the stack at index 't' */
+     lua_pushnil(L);  /* first key */
+     while (lua_next(L, t) != 0) {
+       /* uses 'key' (at index -2) and 'value' (at index -1) */
+       printf("%s - %s\n",
+              lua_typename(L, lua_type(L, -2)),
+              lua_typename(L, lua_type(L, -1)));
+       /* removes 'value'; keeps 'key' for next iteration */
+       lua_pop(L, 1);
+     }
+
+ +

+While traversing a table, +do not call lua_tolstring directly on a key, +unless you know that the key is actually a string. +Recall that lua_tolstring may change +the value at the given index; +this confuses the next call to lua_next. + + +

+See function next for the caveats of modifying +the table during its traversal. + + + + + +


lua_Number

+
typedef double lua_Number;
+ +

+The type of numbers in Lua. +By default, it is double, but that can be changed in luaconf.h. +Through this configuration file you can change +Lua to operate with another type for numbers (e.g., float or long). + + + + + +


lua_pcall

+[-(nargs + 1), +(nresults|1), –] +

int lua_pcall (lua_State *L, int nargs, int nresults, int msgh);
+ +

+Calls a function in protected mode. + + +

+Both nargs and nresults have the same meaning as +in lua_call. +If there are no errors during the call, +lua_pcall behaves exactly like lua_call. +However, if there is any error, +lua_pcall catches it, +pushes a single value on the stack (the error message), +and returns an error code. +Like lua_call, +lua_pcall always removes the function +and its arguments from the stack. + + +

+If msgh is 0, +then the error message returned on the stack +is exactly the original error message. +Otherwise, msgh is the stack index of a +message handler. +(In the current implementation, this index cannot be a pseudo-index.) +In case of runtime errors, +this function will be called with the error message +and its return value will be the message +returned on the stack by lua_pcall. + + +

+Typically, the message handler is used to add more debug +information to the error message, such as a stack traceback. +Such information cannot be gathered after the return of lua_pcall, +since by then the stack has unwound. + + +

+The lua_pcall function returns one of the following codes +(defined in lua.h): + +

    + +
  • LUA_OK (0): +success.
  • + +
  • LUA_ERRRUN: +a runtime error. +
  • + +
  • LUA_ERRMEM: +memory allocation error. +For such errors, Lua does not call the message handler. +
  • + +
  • LUA_ERRERR: +error while running the message handler. +
  • + +
  • LUA_ERRGCMM: +error while running a __gc metamethod. +(This error typically has no relation with the function being called. +It is generated by the garbage collector.) +
  • + +
+ + + + +

lua_pcallk

+[-(nargs + 1), +(nresults|1), –] +

int lua_pcallk (lua_State *L,
+                int nargs,
+                int nresults,
+                int errfunc,
+                int ctx,
+                lua_CFunction k);
+ +

+This function behaves exactly like lua_pcall, +but allows the called function to yield (see §4.7). + + + + + +


lua_pop

+[-n, +0, –] +

void lua_pop (lua_State *L, int n);
+ +

+Pops n elements from the stack. + + + + + +


lua_pushboolean

+[-0, +1, –] +

void lua_pushboolean (lua_State *L, int b);
+ +

+Pushes a boolean value with value b onto the stack. + + + + + +


lua_pushcclosure

+[-n, +1, e] +

void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n);
+ +

+Pushes a new C closure onto the stack. + + +

+When a C function is created, +it is possible to associate some values with it, +thus creating a C closure (see §4.4); +these values are then accessible to the function whenever it is called. +To associate values with a C function, +first these values should be pushed onto the stack +(when there are multiple values, the first value is pushed first). +Then lua_pushcclosure +is called to create and push the C function onto the stack, +with the argument n telling how many values should be +associated with the function. +lua_pushcclosure also pops these values from the stack. + + +

+The maximum value for n is 255. + + +

+When n is zero, +this function creates a light C function, +which is just a pointer to the C function. +In that case, it never throws a memory error. + + + + + +


lua_pushcfunction

+[-0, +1, –] +

void lua_pushcfunction (lua_State *L, lua_CFunction f);
+ +

+Pushes a C function onto the stack. +This function receives a pointer to a C function +and pushes onto the stack a Lua value of type function that, +when called, invokes the corresponding C function. + + +

+Any function to be registered in Lua must +follow the correct protocol to receive its parameters +and return its results (see lua_CFunction). + + +

+lua_pushcfunction is defined as a macro: + +

+     #define lua_pushcfunction(L,f)  lua_pushcclosure(L,f,0)
+

+Note that f is used twice. + + + + + +


lua_pushfstring

+[-0, +1, e] +

const char *lua_pushfstring (lua_State *L, const char *fmt, ...);
+ +

+Pushes onto the stack a formatted string +and returns a pointer to this string. +It is similar to the ISO C function sprintf, +but has some important differences: + +

    + +
  • +You do not have to allocate space for the result: +the result is a Lua string and Lua takes care of memory allocation +(and deallocation, through garbage collection). +
  • + +
  • +The conversion specifiers are quite restricted. +There are no flags, widths, or precisions. +The conversion specifiers can only be +'%%' (inserts a '%' in the string), +'%s' (inserts a zero-terminated string, with no size restrictions), +'%f' (inserts a lua_Number), +'%p' (inserts a pointer as a hexadecimal numeral), +'%d' (inserts an int), and +'%c' (inserts an int as a byte). +
  • + +
+ + + + +

lua_pushglobaltable

+[-0, +1, –] +

void lua_pushglobaltable (lua_State *L);
+ +

+Pushes the global environment onto the stack. + + + + + +


lua_pushinteger

+[-0, +1, –] +

void lua_pushinteger (lua_State *L, lua_Integer n);
+ +

+Pushes a number with value n onto the stack. + + + + + +


lua_pushlightuserdata

+[-0, +1, –] +

void lua_pushlightuserdata (lua_State *L, void *p);
+ +

+Pushes a light userdata onto the stack. + + +

+Userdata represent C values in Lua. +A light userdata represents a pointer, a void*. +It is a value (like a number): +you do not create it, it has no individual metatable, +and it is not collected (as it was never created). +A light userdata is equal to "any" +light userdata with the same C address. + + + + + +


lua_pushliteral

+[-0, +1, e] +

const char *lua_pushliteral (lua_State *L, const char *s);
+ +

+This macro is equivalent to lua_pushlstring, +but can be used only when s is a literal string. +It automatically provides the string length. + + + + + +


lua_pushlstring

+[-0, +1, e] +

const char *lua_pushlstring (lua_State *L, const char *s, size_t len);
+ +

+Pushes the string pointed to by s with size len +onto the stack. +Lua makes (or reuses) an internal copy of the given string, +so the memory at s can be freed or reused immediately after +the function returns. +The string can contain any binary data, +including embedded zeros. + + +

+Returns a pointer to the internal copy of the string. + + + + + +


lua_pushnil

+[-0, +1, –] +

void lua_pushnil (lua_State *L);
+ +

+Pushes a nil value onto the stack. + + + + + +


lua_pushnumber

+[-0, +1, –] +

void lua_pushnumber (lua_State *L, lua_Number n);
+ +

+Pushes a number with value n onto the stack. + + + + + +


lua_pushstring

+[-0, +1, e] +

const char *lua_pushstring (lua_State *L, const char *s);
+ +

+Pushes the zero-terminated string pointed to by s +onto the stack. +Lua makes (or reuses) an internal copy of the given string, +so the memory at s can be freed or reused immediately after +the function returns. + + +

+Returns a pointer to the internal copy of the string. + + +

+If s is NULL, pushes nil and returns NULL. + + + + + +


lua_pushthread

+[-0, +1, –] +

int lua_pushthread (lua_State *L);
+ +

+Pushes the thread represented by L onto the stack. +Returns 1 if this thread is the main thread of its state. + + + + + +


lua_pushunsigned

+[-0, +1, –] +

void lua_pushunsigned (lua_State *L, lua_Unsigned n);
+ +

+Pushes a number with value n onto the stack. + + + + + +


lua_pushvalue

+[-0, +1, –] +

void lua_pushvalue (lua_State *L, int index);
+ +

+Pushes a copy of the element at the given index +onto the stack. + + + + + +


lua_pushvfstring

+[-0, +1, e] +

const char *lua_pushvfstring (lua_State *L,
+                              const char *fmt,
+                              va_list argp);
+ +

+Equivalent to lua_pushfstring, except that it receives a va_list +instead of a variable number of arguments. + + + + + +


lua_rawequal

+[-0, +0, –] +

int lua_rawequal (lua_State *L, int index1, int index2);
+ +

+Returns 1 if the two values in indices index1 and +index2 are primitively equal +(that is, without calling metamethods). +Otherwise returns 0. +Also returns 0 if any of the indices are non valid. + + + + + +


lua_rawget

+[-1, +1, –] +

void lua_rawget (lua_State *L, int index);
+ +

+Similar to lua_gettable, but does a raw access +(i.e., without metamethods). + + + + + +


lua_rawgeti

+[-0, +1, –] +

void lua_rawgeti (lua_State *L, int index, int n);
+ +

+Pushes onto the stack the value t[n], +where t is the table at the given index. +The access is raw; +that is, it does not invoke metamethods. + + + + + +


lua_rawgetp

+[-0, +1, –] +

void lua_rawgetp (lua_State *L, int index, const void *p);
+ +

+Pushes onto the stack the value t[k], +where t is the table at the given index and +k is the pointer p represented as a light userdata. +The access is raw; +that is, it does not invoke metamethods. + + + + + +


lua_rawlen

+[-0, +0, –] +

size_t lua_rawlen (lua_State *L, int index);
+ +

+Returns the raw "length" of the value at the given index: +for strings, this is the string length; +for tables, this is the result of the length operator ('#') +with no metamethods; +for userdata, this is the size of the block of memory allocated +for the userdata; +for other values, it is 0. + + + + + +


lua_rawset

+[-2, +0, e] +

void lua_rawset (lua_State *L, int index);
+ +

+Similar to lua_settable, but does a raw assignment +(i.e., without metamethods). + + + + + +


lua_rawseti

+[-1, +0, e] +

void lua_rawseti (lua_State *L, int index, int n);
+ +

+Does the equivalent of t[n] = v, +where t is the table at the given index +and v is the value at the top of the stack. + + +

+This function pops the value from the stack. +The assignment is raw; +that is, it does not invoke metamethods. + + + + + +


lua_rawsetp

+[-1, +0, e] +

void lua_rawsetp (lua_State *L, int index, const void *p);
+ +

+Does the equivalent of t[k] = v, +where t is the table at the given index, +k is the pointer p represented as a light userdata, +and v is the value at the top of the stack. + + +

+This function pops the value from the stack. +The assignment is raw; +that is, it does not invoke metamethods. + + + + + +


lua_Reader

+
typedef const char * (*lua_Reader) (lua_State *L,
+                                    void *data,
+                                    size_t *size);
+ +

+The reader function used by lua_load. +Every time it needs another piece of the chunk, +lua_load calls the reader, +passing along its data parameter. +The reader must return a pointer to a block of memory +with a new piece of the chunk +and set size to the block size. +The block must exist until the reader function is called again. +To signal the end of the chunk, +the reader must return NULL or set size to zero. +The reader function may return pieces of any size greater than zero. + + + + + +


lua_register

+[-0, +0, e] +

void lua_register (lua_State *L, const char *name, lua_CFunction f);
+ +

+Sets the C function f as the new value of global name. +It is defined as a macro: + +

+     #define lua_register(L,n,f) \
+            (lua_pushcfunction(L, f), lua_setglobal(L, n))
+
+ + + + +

lua_remove

+[-1, +0, –] +

void lua_remove (lua_State *L, int index);
+ +

+Removes the element at the given valid index, +shifting down the elements above this index to fill the gap. +This function cannot be called with a pseudo-index, +because a pseudo-index is not an actual stack position. + + + + + +


lua_replace

+[-1, +0, –] +

void lua_replace (lua_State *L, int index);
+ +

+Moves the top element into the given valid index +without shifting any element +(therefore replacing the value at the given index), +and then pops the top element. + + + + + +


lua_resume

+[-?, +?, –] +

int lua_resume (lua_State *L, lua_State *from, int nargs);
+ +

+Starts and resumes a coroutine in a given thread. + + +

+To start a coroutine, +you push onto the thread stack the main function plus any arguments; +then you call lua_resume, +with nargs being the number of arguments. +This call returns when the coroutine suspends or finishes its execution. +When it returns, the stack contains all values passed to lua_yield, +or all values returned by the body function. +lua_resume returns +LUA_YIELD if the coroutine yields, +LUA_OK if the coroutine finishes its execution +without errors, +or an error code in case of errors (see lua_pcall). + + +

+In case of errors, +the stack is not unwound, +so you can use the debug API over it. +The error message is on the top of the stack. + + +

+To resume a coroutine, +you remove any results from the last lua_yield, +put on its stack only the values to +be passed as results from yield, +and then call lua_resume. + + +

+The parameter from represents the coroutine that is resuming L. +If there is no such coroutine, +this parameter can be NULL. + + + + + +


lua_setallocf

+[-0, +0, –] +

void lua_setallocf (lua_State *L, lua_Alloc f, void *ud);
+ +

+Changes the allocator function of a given state to f +with user data ud. + + + + + +


lua_setfield

+[-1, +0, e] +

void lua_setfield (lua_State *L, int index, const char *k);
+ +

+Does the equivalent to t[k] = v, +where t is the value at the given index +and v is the value at the top of the stack. + + +

+This function pops the value from the stack. +As in Lua, this function may trigger a metamethod +for the "newindex" event (see §2.4). + + + + + +


lua_setglobal

+[-1, +0, e] +

void lua_setglobal (lua_State *L, const char *name);
+ +

+Pops a value from the stack and +sets it as the new value of global name. + + + + + +


lua_setmetatable

+[-1, +0, –] +

void lua_setmetatable (lua_State *L, int index);
+ +

+Pops a table from the stack and +sets it as the new metatable for the value at the given index. + + + + + +


lua_settable

+[-2, +0, e] +

void lua_settable (lua_State *L, int index);
+ +

+Does the equivalent to t[k] = v, +where t is the value at the given index, +v is the value at the top of the stack, +and k is the value just below the top. + + +

+This function pops both the key and the value from the stack. +As in Lua, this function may trigger a metamethod +for the "newindex" event (see §2.4). + + + + + +


lua_settop

+[-?, +?, –] +

void lua_settop (lua_State *L, int index);
+ +

+Accepts any index, or 0, +and sets the stack top to this index. +If the new top is larger than the old one, +then the new elements are filled with nil. +If index is 0, then all stack elements are removed. + + + + + +


lua_setuservalue

+[-1, +0, –] +

void lua_setuservalue (lua_State *L, int index);
+ +

+Pops a table or nil from the stack and sets it as +the new value associated to the userdata at the given index. + + + + + +


lua_State

+
typedef struct lua_State lua_State;
+ +

+An opaque structure that points to a thread and indirectly +(through the thread) to the whole state of a Lua interpreter. +The Lua library is fully reentrant: +it has no global variables. +All information about a state is accessible through this structure. + + +

+A pointer to this structure must be passed as the first argument to +every function in the library, except to lua_newstate, +which creates a Lua state from scratch. + + + + + +


lua_status

+[-0, +0, –] +

int lua_status (lua_State *L);
+ +

+Returns the status of the thread L. + + +

+The status can be 0 (LUA_OK) for a normal thread, +an error code if the thread finished the execution +of a lua_resume with an error, +or LUA_YIELD if the thread is suspended. + + +

+You can only call functions in threads with status LUA_OK. +You can resume threads with status LUA_OK +(to start a new coroutine) or LUA_YIELD +(to resume a coroutine). + + + + + +


lua_toboolean

+[-0, +0, –] +

int lua_toboolean (lua_State *L, int index);
+ +

+Converts the Lua value at the given index to a C boolean +value (0 or 1). +Like all tests in Lua, +lua_toboolean returns true for any Lua value +different from false and nil; +otherwise it returns false. +(If you want to accept only actual boolean values, +use lua_isboolean to test the value's type.) + + + + + +


lua_tocfunction

+[-0, +0, –] +

lua_CFunction lua_tocfunction (lua_State *L, int index);
+ +

+Converts a value at the given index to a C function. +That value must be a C function; +otherwise, returns NULL. + + + + + +


lua_tointeger

+[-0, +0, –] +

lua_Integer lua_tointeger (lua_State *L, int index);
+ +

+Equivalent to lua_tointegerx with isnum equal to NULL. + + + + + +


lua_tointegerx

+[-0, +0, –] +

lua_Integer lua_tointegerx (lua_State *L, int index, int *isnum);
+ +

+Converts the Lua value at the given index +to the signed integral type lua_Integer. +The Lua value must be a number or a string convertible to a number +(see §3.4.2); +otherwise, lua_tointegerx returns 0. + + +

+If the number is not an integer, +it is truncated in some non-specified way. + + +

+If isnum is not NULL, +its referent is assigned a boolean value that +indicates whether the operation succeeded. + + + + + +


lua_tolstring

+[-0, +0, e] +

const char *lua_tolstring (lua_State *L, int index, size_t *len);
+ +

+Converts the Lua value at the given index to a C string. +If len is not NULL, +it also sets *len with the string length. +The Lua value must be a string or a number; +otherwise, the function returns NULL. +If the value is a number, +then lua_tolstring also +changes the actual value in the stack to a string. +(This change confuses lua_next +when lua_tolstring is applied to keys during a table traversal.) + + +

+lua_tolstring returns a fully aligned pointer +to a string inside the Lua state. +This string always has a zero ('\0') +after its last character (as in C), +but can contain other zeros in its body. +Because Lua has garbage collection, +there is no guarantee that the pointer returned by lua_tolstring +will be valid after the corresponding value is removed from the stack. + + + + + +


lua_tonumber

+[-0, +0, –] +

lua_Number lua_tonumber (lua_State *L, int index);
+ +

+Equivalent to lua_tonumberx with isnum equal to NULL. + + + + + +


lua_tonumberx

+[-0, +0, –] +

lua_Number lua_tonumberx (lua_State *L, int index, int *isnum);
+ +

+Converts the Lua value at the given index +to the C type lua_Number (see lua_Number). +The Lua value must be a number or a string convertible to a number +(see §3.4.2); +otherwise, lua_tonumberx returns 0. + + +

+If isnum is not NULL, +its referent is assigned a boolean value that +indicates whether the operation succeeded. + + + + + +


lua_topointer

+[-0, +0, –] +

const void *lua_topointer (lua_State *L, int index);
+ +

+Converts the value at the given index to a generic +C pointer (void*). +The value can be a userdata, a table, a thread, or a function; +otherwise, lua_topointer returns NULL. +Different objects will give different pointers. +There is no way to convert the pointer back to its original value. + + +

+Typically this function is used only for debug information. + + + + + +


lua_tostring

+[-0, +0, e] +

const char *lua_tostring (lua_State *L, int index);
+ +

+Equivalent to lua_tolstring with len equal to NULL. + + + + + +


lua_tothread

+[-0, +0, –] +

lua_State *lua_tothread (lua_State *L, int index);
+ +

+Converts the value at the given index to a Lua thread +(represented as lua_State*). +This value must be a thread; +otherwise, the function returns NULL. + + + + + +


lua_tounsigned

+[-0, +0, –] +

lua_Unsigned lua_tounsigned (lua_State *L, int index);
+ +

+Equivalent to lua_tounsignedx with isnum equal to NULL. + + + + + +


lua_tounsignedx

+[-0, +0, –] +

lua_Unsigned lua_tounsignedx (lua_State *L, int index, int *isnum);
+ +

+Converts the Lua value at the given index +to the unsigned integral type lua_Unsigned. +The Lua value must be a number or a string convertible to a number +(see §3.4.2); +otherwise, lua_tounsignedx returns 0. + + +

+If the number is not an integer, +it is truncated in some non-specified way. +If the number is outside the range of representable values, +it is normalized to the remainder of its division by +one more than the maximum representable value. + + +

+If isnum is not NULL, +its referent is assigned a boolean value that +indicates whether the operation succeeded. + + + + + +


lua_touserdata

+[-0, +0, –] +

void *lua_touserdata (lua_State *L, int index);
+ +

+If the value at the given index is a full userdata, +returns its block address. +If the value is a light userdata, +returns its pointer. +Otherwise, returns NULL. + + + + + +


lua_type

+[-0, +0, –] +

int lua_type (lua_State *L, int index);
+ +

+Returns the type of the value in the given valid index, +or LUA_TNONE for a non-valid (but acceptable) index. +The types returned by lua_type are coded by the following constants +defined in lua.h: +LUA_TNIL, +LUA_TNUMBER, +LUA_TBOOLEAN, +LUA_TSTRING, +LUA_TTABLE, +LUA_TFUNCTION, +LUA_TUSERDATA, +LUA_TTHREAD, +and +LUA_TLIGHTUSERDATA. + + + + + +


lua_typename

+[-0, +0, –] +

const char *lua_typename (lua_State *L, int tp);
+ +

+Returns the name of the type encoded by the value tp, +which must be one the values returned by lua_type. + + + + + +


lua_Unsigned

+
typedef unsigned long lua_Unsigned;
+ +

+The type used by the Lua API to represent unsigned integral values. +It must have at least 32 bits. + + +

+By default it is an unsigned int or an unsigned long, +whichever can hold 32-bit values. + + + + + +


lua_upvalueindex

+[-0, +0, –] +

int lua_upvalueindex (int i);
+ +

+Returns the pseudo-index that represents the i-th upvalue of +the running function (see §4.4). + + + + + +


lua_version

+[-0, +0, v] +

const lua_Number *lua_version (lua_State *L);
+ +

+Returns the address of the version number stored in the Lua core. +When called with a valid lua_State, +returns the address of the version used to create that state. +When called with NULL, +returns the address of the version running the call. + + + + + +


lua_Writer

+
typedef int (*lua_Writer) (lua_State *L,
+                           const void* p,
+                           size_t sz,
+                           void* ud);
+ +

+The type of the writer function used by lua_dump. +Every time it produces another piece of chunk, +lua_dump calls the writer, +passing along the buffer to be written (p), +its size (sz), +and the data parameter supplied to lua_dump. + + +

+The writer returns an error code: +0 means no errors; +any other value means an error and stops lua_dump from +calling the writer again. + + + + + +


lua_xmove

+[-?, +?, –] +

void lua_xmove (lua_State *from, lua_State *to, int n);
+ +

+Exchange values between different threads of the same state. + + +

+This function pops n values from the stack from, +and pushes them onto the stack to. + + + + + +


lua_yield

+[-?, +?, –] +

int lua_yield (lua_State *L, int nresults);
+ +

+This function is equivalent to lua_yieldk, +but it has no continuation (see §4.7). +Therefore, when the thread resumes, +it returns to the function that called +the function calling lua_yield. + + + + + +


lua_yieldk

+[-?, +?, –] +

int lua_yieldk (lua_State *L, int nresults, int ctx, lua_CFunction k);
+ +

+Yields a coroutine. + + +

+This function should only be called as the +return expression of a C function, as follows: + +

+     return lua_yieldk (L, n, i, k);
+

+When a C function calls lua_yieldk in that way, +the running coroutine suspends its execution, +and the call to lua_resume that started this coroutine returns. +The parameter nresults is the number of values from the stack +that are passed as results to lua_resume. + + +

+When the coroutine is resumed again, +Lua calls the given continuation function k to continue +the execution of the C function that yielded (see §4.7). +This continuation function receives the same stack +from the previous function, +with the results removed and +replaced by the arguments passed to lua_resume. +Moreover, +the continuation function may access the value ctx +by calling lua_getctx. + + + + + + + +

4.9 – The Debug Interface

+ +

+Lua has no built-in debugging facilities. +Instead, it offers a special interface +by means of functions and hooks. +This interface allows the construction of different +kinds of debuggers, profilers, and other tools +that need "inside information" from the interpreter. + + + +


lua_Debug

+
typedef struct lua_Debug {
+  int event;
+  const char *name;           /* (n) */
+  const char *namewhat;       /* (n) */
+  const char *what;           /* (S) */
+  const char *source;         /* (S) */
+  int currentline;            /* (l) */
+  int linedefined;            /* (S) */
+  int lastlinedefined;        /* (S) */
+  unsigned char nups;         /* (u) number of upvalues */
+  unsigned char nparams;      /* (u) number of parameters */
+  char isvararg;              /* (u) */
+  char istailcall;            /* (t) */
+  char short_src[LUA_IDSIZE]; /* (S) */
+  /* private part */
+  other fields
+} lua_Debug;
+ +

+A structure used to carry different pieces of +information about a function or an activation record. +lua_getstack fills only the private part +of this structure, for later use. +To fill the other fields of lua_Debug with useful information, +call lua_getinfo. + + +

+The fields of lua_Debug have the following meaning: + +

    + +
  • source: +the source of the chunk that created the function. +If source starts with a '@', +it means that the function was defined in a file where +the file name follows the '@'. +If source starts with a '=', +the remainder of its contents describe the source in a user-dependent manner. +Otherwise, +the function was defined in a string where +source is that string. +
  • + +
  • short_src: +a "printable" version of source, to be used in error messages. +
  • + +
  • linedefined: +the line number where the definition of the function starts. +
  • + +
  • lastlinedefined: +the line number where the definition of the function ends. +
  • + +
  • what: +the string "Lua" if the function is a Lua function, +"C" if it is a C function, +"main" if it is the main part of a chunk. +
  • + +
  • currentline: +the current line where the given function is executing. +When no line information is available, +currentline is set to -1. +
  • + +
  • name: +a reasonable name for the given function. +Because functions in Lua are first-class values, +they do not have a fixed name: +some functions can be the value of multiple global variables, +while others can be stored only in a table field. +The lua_getinfo function checks how the function was +called to find a suitable name. +If it cannot find a name, +then name is set to NULL. +
  • + +
  • namewhat: +explains the name field. +The value of namewhat can be +"global", "local", "method", +"field", "upvalue", or "" (the empty string), +according to how the function was called. +(Lua uses the empty string when no other option seems to apply.) +
  • + +
  • istailcall: +true if this function invocation was called by a tail call. +In this case, the caller of this level is not in the stack. +
  • + +
  • nups: +the number of upvalues of the function. +
  • + +
  • nparams: +the number of fixed parameters of the function +(always 0 for C functions). +
  • + +
  • isvararg: +true if the function is a vararg function +(always true for C functions). +
  • + +
+ + + + +

lua_gethook

+[-0, +0, –] +

lua_Hook lua_gethook (lua_State *L);
+ +

+Returns the current hook function. + + + + + +


lua_gethookcount

+[-0, +0, –] +

int lua_gethookcount (lua_State *L);
+ +

+Returns the current hook count. + + + + + +


lua_gethookmask

+[-0, +0, –] +

int lua_gethookmask (lua_State *L);
+ +

+Returns the current hook mask. + + + + + +


lua_getinfo

+[-(0|1), +(0|1|2), e] +

int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar);
+ +

+Gets information about a specific function or function invocation. + + +

+To get information about a function invocation, +the parameter ar must be a valid activation record that was +filled by a previous call to lua_getstack or +given as argument to a hook (see lua_Hook). + + +

+To get information about a function you push it onto the stack +and start the what string with the character '>'. +(In that case, +lua_getinfo pops the function from the top of the stack.) +For instance, to know in which line a function f was defined, +you can write the following code: + +

+     lua_Debug ar;
+     lua_getglobal(L, "f");  /* get global 'f' */
+     lua_getinfo(L, ">S", &ar);
+     printf("%d\n", ar.linedefined);
+
+ +

+Each character in the string what +selects some fields of the structure ar to be filled or +a value to be pushed on the stack: + +

    + +
  • 'n': fills in the field name and namewhat; +
  • + +
  • 'S': +fills in the fields source, short_src, +linedefined, lastlinedefined, and what; +
  • + +
  • 'l': fills in the field currentline; +
  • + +
  • 't': fills in the field istailcall; +
  • + +
  • 'u': fills in the fields +nups, nparams, and isvararg; +
  • + +
  • 'f': +pushes onto the stack the function that is +running at the given level; +
  • + +
  • 'L': +pushes onto the stack a table whose indices are the +numbers of the lines that are valid on the function. +(A valid line is a line with some associated code, +that is, a line where you can put a break point. +Non-valid lines include empty lines and comments.) +
  • + +
+ +

+This function returns 0 on error +(for instance, an invalid option in what). + + + + + +


lua_getlocal

+[-0, +(0|1), –] +

const char *lua_getlocal (lua_State *L, lua_Debug *ar, int n);
+ +

+Gets information about a local variable of +a given activation record or a given function. + + +

+In the first case, +the parameter ar must be a valid activation record that was +filled by a previous call to lua_getstack or +given as argument to a hook (see lua_Hook). +The index n selects which local variable to inspect; +see debug.getlocal for details about variable indices +and names. + + +

+lua_getlocal pushes the variable's value onto the stack +and returns its name. + + +

+In the second case, ar should be NULL and the function +to be inspected must be at the top of the stack. +In this case, only parameters of Lua functions are visible +(as there is no information about what variables are active) +and no values are pushed onto the stack. + + +

+Returns NULL (and pushes nothing) +when the index is greater than +the number of active local variables. + + + + + +


lua_getstack

+[-0, +0, –] +

int lua_getstack (lua_State *L, int level, lua_Debug *ar);
+ +

+Gets information about the interpreter runtime stack. + + +

+This function fills parts of a lua_Debug structure with +an identification of the activation record +of the function executing at a given level. +Level 0 is the current running function, +whereas level n+1 is the function that has called level n +(except for tail calls, which do not count on the stack). +When there are no errors, lua_getstack returns 1; +when called with a level greater than the stack depth, +it returns 0. + + + + + +


lua_getupvalue

+[-0, +(0|1), –] +

const char *lua_getupvalue (lua_State *L, int funcindex, int n);
+ +

+Gets information about a closure's upvalue. +(For Lua functions, +upvalues are the external local variables that the function uses, +and that are consequently included in its closure.) +lua_getupvalue gets the index n of an upvalue, +pushes the upvalue's value onto the stack, +and returns its name. +funcindex points to the closure in the stack. +(Upvalues have no particular order, +as they are active through the whole function. +So, they are numbered in an arbitrary order.) + + +

+Returns NULL (and pushes nothing) +when the index is greater than the number of upvalues. +For C functions, this function uses the empty string "" +as a name for all upvalues. + + + + + +


lua_Hook

+
typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar);
+ +

+Type for debugging hook functions. + + +

+Whenever a hook is called, its ar argument has its field +event set to the specific event that triggered the hook. +Lua identifies these events with the following constants: +LUA_HOOKCALL, LUA_HOOKRET, +LUA_HOOKTAILCALL, LUA_HOOKLINE, +and LUA_HOOKCOUNT. +Moreover, for line events, the field currentline is also set. +To get the value of any other field in ar, +the hook must call lua_getinfo. + + +

+For call events, event can be LUA_HOOKCALL, +the normal value, or LUA_HOOKTAILCALL, for a tail call; +in this case, there will be no corresponding return event. + + +

+While Lua is running a hook, it disables other calls to hooks. +Therefore, if a hook calls back Lua to execute a function or a chunk, +this execution occurs without any calls to hooks. + + +

+Hook functions cannot have continuations, +that is, they cannot call lua_yieldk, +lua_pcallk, or lua_callk with a non-null k. + + +

+Hook functions can yield under the following conditions: +Only count and line events can yield +and they cannot yield any value; +to yield a hook function must finish its execution +calling lua_yield with nresults equal to zero. + + + + + +


lua_sethook

+[-0, +0, –] +

int lua_sethook (lua_State *L, lua_Hook f, int mask, int count);
+ +

+Sets the debugging hook function. + + +

+Argument f is the hook function. +mask specifies on which events the hook will be called: +it is formed by a bitwise or of the constants +LUA_MASKCALL, +LUA_MASKRET, +LUA_MASKLINE, +and LUA_MASKCOUNT. +The count argument is only meaningful when the mask +includes LUA_MASKCOUNT. +For each event, the hook is called as explained below: + +

    + +
  • The call hook: is called when the interpreter calls a function. +The hook is called just after Lua enters the new function, +before the function gets its arguments. +
  • + +
  • The return hook: is called when the interpreter returns from a function. +The hook is called just before Lua leaves the function. +There is no standard way to access the values +to be returned by the function. +
  • + +
  • The line hook: is called when the interpreter is about to +start the execution of a new line of code, +or when it jumps back in the code (even to the same line). +(This event only happens while Lua is executing a Lua function.) +
  • + +
  • The count hook: is called after the interpreter executes every +count instructions. +(This event only happens while Lua is executing a Lua function.) +
  • + +
+ +

+A hook is disabled by setting mask to zero. + + + + + +


lua_setlocal

+[-(0|1), +0, –] +

const char *lua_setlocal (lua_State *L, lua_Debug *ar, int n);
+ +

+Sets the value of a local variable of a given activation record. +Parameters ar and n are as in lua_getlocal +(see lua_getlocal). +lua_setlocal assigns the value at the top of the stack +to the variable and returns its name. +It also pops the value from the stack. + + +

+Returns NULL (and pops nothing) +when the index is greater than +the number of active local variables. + + + + + +


lua_setupvalue

+[-(0|1), +0, –] +

const char *lua_setupvalue (lua_State *L, int funcindex, int n);
+ +

+Sets the value of a closure's upvalue. +It assigns the value at the top of the stack +to the upvalue and returns its name. +It also pops the value from the stack. +Parameters funcindex and n are as in the lua_getupvalue +(see lua_getupvalue). + + +

+Returns NULL (and pops nothing) +when the index is greater than the number of upvalues. + + + + + +


lua_upvalueid

+[-0, +0, –] +

void *lua_upvalueid (lua_State *L, int funcindex, int n);
+ +

+Returns an unique identifier for the upvalue numbered n +from the closure at index funcindex. +Parameters funcindex and n are as in the lua_getupvalue +(see lua_getupvalue) +(but n cannot be greater than the number of upvalues). + + +

+These unique identifiers allow a program to check whether different +closures share upvalues. +Lua closures that share an upvalue +(that is, that access a same external local variable) +will return identical ids for those upvalue indices. + + + + + +


lua_upvaluejoin

+[-0, +0, –] +

void lua_upvaluejoin (lua_State *L, int funcindex1, int n1,
+                                    int funcindex2, int n2);
+ +

+Make the n1-th upvalue of the Lua closure at index funcindex1 +refer to the n2-th upvalue of the Lua closure at index funcindex2. + + + + + + + +

5 – The Auxiliary Library

+ +

+ +The auxiliary library provides several convenient functions +to interface C with Lua. +While the basic API provides the primitive functions for all +interactions between C and Lua, +the auxiliary library provides higher-level functions for some +common tasks. + + +

+All functions and types from the auxiliary library +are defined in header file lauxlib.h and +have a prefix luaL_. + + +

+All functions in the auxiliary library are built on +top of the basic API, +and so they provide nothing that cannot be done with that API. +Nevertheless, the use of the auxiliary library ensures +more consistency to your code. + + +

+Several functions in the auxiliary library use internally some +extra stack slots. +When a function in the auxiliary library uses less than five slots, +it does not check the stack size; +it simply assumes that there are enough slots. + + +

+Several functions in the auxiliary library are used to +check C function arguments. +Because the error message is formatted for arguments +(e.g., "bad argument #1"), +you should not use these functions for other stack values. + + +

+Functions called luaL_check* +always throw an error if the check is not satisfied. + + + +

5.1 – Functions and Types

+ +

+Here we list all functions and types from the auxiliary library +in alphabetical order. + + + +


luaL_addchar

+[-?, +?, e] +

void luaL_addchar (luaL_Buffer *B, char c);
+ +

+Adds the byte c to the buffer B +(see luaL_Buffer). + + + + + +


luaL_addlstring

+[-?, +?, e] +

void luaL_addlstring (luaL_Buffer *B, const char *s, size_t l);
+ +

+Adds the string pointed to by s with length l to +the buffer B +(see luaL_Buffer). +The string can contain embedded zeros. + + + + + +


luaL_addsize

+[-?, +?, e] +

void luaL_addsize (luaL_Buffer *B, size_t n);
+ +

+Adds to the buffer B (see luaL_Buffer) +a string of length n previously copied to the +buffer area (see luaL_prepbuffer). + + + + + +


luaL_addstring

+[-?, +?, e] +

void luaL_addstring (luaL_Buffer *B, const char *s);
+ +

+Adds the zero-terminated string pointed to by s +to the buffer B +(see luaL_Buffer). +The string cannot contain embedded zeros. + + + + + +


luaL_addvalue

+[-1, +?, e] +

void luaL_addvalue (luaL_Buffer *B);
+ +

+Adds the value at the top of the stack +to the buffer B +(see luaL_Buffer). +Pops the value. + + +

+This is the only function on string buffers that can (and must) +be called with an extra element on the stack, +which is the value to be added to the buffer. + + + + + +


luaL_argcheck

+[-0, +0, v] +

void luaL_argcheck (lua_State *L,
+                    int cond,
+                    int arg,
+                    const char *extramsg);
+ +

+Checks whether cond is true. +If not, raises an error with a standard message. + + + + + +


luaL_argerror

+[-0, +0, v] +

int luaL_argerror (lua_State *L, int arg, const char *extramsg);
+ +

+Raises an error with a standard message +that includes extramsg as a comment. + + +

+This function never returns, +but it is an idiom to use it in C functions +as return luaL_argerror(args). + + + + + +


luaL_Buffer

+
typedef struct luaL_Buffer luaL_Buffer;
+ +

+Type for a string buffer. + + +

+A string buffer allows C code to build Lua strings piecemeal. +Its pattern of use is as follows: + +

    + +
  • First declare a variable b of type luaL_Buffer.
  • + +
  • Then initialize it with a call luaL_buffinit(L, &b).
  • + +
  • +Then add string pieces to the buffer calling any of +the luaL_add* functions. +
  • + +
  • +Finish by calling luaL_pushresult(&b). +This call leaves the final string on the top of the stack. +
  • + +
+ +

+If you know beforehand the total size of the resulting string, +you can use the buffer like this: + +

    + +
  • First declare a variable b of type luaL_Buffer.
  • + +
  • Then initialize it and preallocate a space of +size sz with a call luaL_buffinitsize(L, &b, sz).
  • + +
  • Then copy the string into that space.
  • + +
  • +Finish by calling luaL_pushresultsize(&b, sz), +where sz is the total size of the resulting string +copied into that space. +
  • + +
+ +

+During its normal operation, +a string buffer uses a variable number of stack slots. +So, while using a buffer, you cannot assume that you know where +the top of the stack is. +You can use the stack between successive calls to buffer operations +as long as that use is balanced; +that is, +when you call a buffer operation, +the stack is at the same level +it was immediately after the previous buffer operation. +(The only exception to this rule is luaL_addvalue.) +After calling luaL_pushresult the stack is back to its +level when the buffer was initialized, +plus the final string on its top. + + + + + +


luaL_buffinit

+[-0, +0, –] +

void luaL_buffinit (lua_State *L, luaL_Buffer *B);
+ +

+Initializes a buffer B. +This function does not allocate any space; +the buffer must be declared as a variable +(see luaL_Buffer). + + + + + +


luaL_buffinitsize

+[-?, +?, e] +

char *luaL_buffinitsize (lua_State *L, luaL_Buffer *B, size_t sz);
+ +

+Equivalent to the sequence +luaL_buffinit, luaL_prepbuffsize. + + + + + +


luaL_callmeta

+[-0, +(0|1), e] +

int luaL_callmeta (lua_State *L, int obj, const char *e);
+ +

+Calls a metamethod. + + +

+If the object at index obj has a metatable and this +metatable has a field e, +this function calls this field passing the object as its only argument. +In this case this function returns true and pushes onto the +stack the value returned by the call. +If there is no metatable or no metamethod, +this function returns false (without pushing any value on the stack). + + + + + +


luaL_checkany

+[-0, +0, v] +

void luaL_checkany (lua_State *L, int arg);
+ +

+Checks whether the function has an argument +of any type (including nil) at position arg. + + + + + +


luaL_checkint

+[-0, +0, v] +

int luaL_checkint (lua_State *L, int arg);
+ +

+Checks whether the function argument arg is a number +and returns this number cast to an int. + + + + + +


luaL_checkinteger

+[-0, +0, v] +

lua_Integer luaL_checkinteger (lua_State *L, int arg);
+ +

+Checks whether the function argument arg is a number +and returns this number cast to a lua_Integer. + + + + + +


luaL_checklong

+[-0, +0, v] +

long luaL_checklong (lua_State *L, int arg);
+ +

+Checks whether the function argument arg is a number +and returns this number cast to a long. + + + + + +


luaL_checklstring

+[-0, +0, v] +

const char *luaL_checklstring (lua_State *L, int arg, size_t *l);
+ +

+Checks whether the function argument arg is a string +and returns this string; +if l is not NULL fills *l +with the string's length. + + +

+This function uses lua_tolstring to get its result, +so all conversions and caveats of that function apply here. + + + + + +


luaL_checknumber

+[-0, +0, v] +

lua_Number luaL_checknumber (lua_State *L, int arg);
+ +

+Checks whether the function argument arg is a number +and returns this number. + + + + + +


luaL_checkoption

+[-0, +0, v] +

int luaL_checkoption (lua_State *L,
+                      int arg,
+                      const char *def,
+                      const char *const lst[]);
+ +

+Checks whether the function argument arg is a string and +searches for this string in the array lst +(which must be NULL-terminated). +Returns the index in the array where the string was found. +Raises an error if the argument is not a string or +if the string cannot be found. + + +

+If def is not NULL, +the function uses def as a default value when +there is no argument arg or when this argument is nil. + + +

+This is a useful function for mapping strings to C enums. +(The usual convention in Lua libraries is +to use strings instead of numbers to select options.) + + + + + +


luaL_checkstack

+[-0, +0, v] +

void luaL_checkstack (lua_State *L, int sz, const char *msg);
+ +

+Grows the stack size to top + sz elements, +raising an error if the stack cannot grow to that size. +msg is an additional text to go into the error message +(or NULL for no additional text). + + + + + +


luaL_checkstring

+[-0, +0, v] +

const char *luaL_checkstring (lua_State *L, int arg);
+ +

+Checks whether the function argument arg is a string +and returns this string. + + +

+This function uses lua_tolstring to get its result, +so all conversions and caveats of that function apply here. + + + + + +


luaL_checktype

+[-0, +0, v] +

void luaL_checktype (lua_State *L, int arg, int t);
+ +

+Checks whether the function argument arg has type t. +See lua_type for the encoding of types for t. + + + + + +


luaL_checkudata

+[-0, +0, v] +

void *luaL_checkudata (lua_State *L, int arg, const char *tname);
+ +

+Checks whether the function argument arg is a userdata +of the type tname (see luaL_newmetatable) and +returns the userdata address (see lua_touserdata). + + + + + +


luaL_checkunsigned

+[-0, +0, v] +

lua_Unsigned luaL_checkunsigned (lua_State *L, int arg);
+ +

+Checks whether the function argument arg is a number +and returns this number cast to a lua_Unsigned. + + + + + +


luaL_checkversion

+[-0, +0, –] +

void luaL_checkversion (lua_State *L);
+ +

+Checks whether the core running the call, +the core that created the Lua state, +and the code making the call are all using the same version of Lua. +Also checks whether the core running the call +and the core that created the Lua state +are using the same address space. + + + + + +


luaL_dofile

+[-0, +?, e] +

int luaL_dofile (lua_State *L, const char *filename);
+ +

+Loads and runs the given file. +It is defined as the following macro: + +

+     (luaL_loadfile(L, filename) || lua_pcall(L, 0, LUA_MULTRET, 0))
+

+It returns false if there are no errors +or true in case of errors. + + + + + +


luaL_dostring

+[-0, +?, –] +

int luaL_dostring (lua_State *L, const char *str);
+ +

+Loads and runs the given string. +It is defined as the following macro: + +

+     (luaL_loadstring(L, str) || lua_pcall(L, 0, LUA_MULTRET, 0))
+

+It returns false if there are no errors +or true in case of errors. + + + + + +


luaL_error

+[-0, +0, v] +

int luaL_error (lua_State *L, const char *fmt, ...);
+ +

+Raises an error. +The error message format is given by fmt +plus any extra arguments, +following the same rules of lua_pushfstring. +It also adds at the beginning of the message the file name and +the line number where the error occurred, +if this information is available. + + +

+This function never returns, +but it is an idiom to use it in C functions +as return luaL_error(args). + + + + + +


luaL_execresult

+[-0, +3, e] +

int luaL_execresult (lua_State *L, int stat);
+ +

+This function produces the return values for +process-related functions in the standard library +(os.execute and io.close). + + + + + +


luaL_fileresult

+[-0, +(1|3), e] +

int luaL_fileresult (lua_State *L, int stat, const char *fname);
+ +

+This function produces the return values for +file-related functions in the standard library +(io.open, os.rename, file:seek, etc.). + + + + + +


luaL_getmetafield

+[-0, +(0|1), e] +

int luaL_getmetafield (lua_State *L, int obj, const char *e);
+ +

+Pushes onto the stack the field e from the metatable +of the object at index obj. +If the object does not have a metatable, +or if the metatable does not have this field, +returns false and pushes nothing. + + + + + +


luaL_getmetatable

+[-0, +1, –] +

void luaL_getmetatable (lua_State *L, const char *tname);
+ +

+Pushes onto the stack the metatable associated with name tname +in the registry (see luaL_newmetatable). + + + + + +


luaL_getsubtable

+[-0, +1, e] +

int luaL_getsubtable (lua_State *L, int idx, const char *fname);
+ +

+Ensures that the value t[fname], +where t is the value at index idx, +is a table, +and pushes that table onto the stack. +Returns true if it finds a previous table there +and false if it creates a new table. + + + + + +


luaL_gsub

+[-0, +1, e] +

const char *luaL_gsub (lua_State *L,
+                       const char *s,
+                       const char *p,
+                       const char *r);
+ +

+Creates a copy of string s by replacing +any occurrence of the string p +with the string r. +Pushes the resulting string on the stack and returns it. + + + + + +


luaL_len

+[-0, +0, e] +

int luaL_len (lua_State *L, int index);
+ +

+Returns the "length" of the value at the given index +as a number; +it is equivalent to the '#' operator in Lua (see §3.4.6). +Raises an error if the result of the operation is not a number. +(This case only can happen through metamethods.) + + + + + +


luaL_loadbuffer

+[-0, +1, –] +

int luaL_loadbuffer (lua_State *L,
+                     const char *buff,
+                     size_t sz,
+                     const char *name);
+ +

+Equivalent to luaL_loadbufferx with mode equal to NULL. + + + + + +


luaL_loadbufferx

+[-0, +1, –] +

int luaL_loadbufferx (lua_State *L,
+                      const char *buff,
+                      size_t sz,
+                      const char *name,
+                      const char *mode);
+ +

+Loads a buffer as a Lua chunk. +This function uses lua_load to load the chunk in the +buffer pointed to by buff with size sz. + + +

+This function returns the same results as lua_load. +name is the chunk name, +used for debug information and error messages. +The string mode works as in function lua_load. + + + + + +


luaL_loadfile

+[-0, +1, e] +

int luaL_loadfile (lua_State *L, const char *filename);
+ +

+Equivalent to luaL_loadfilex with mode equal to NULL. + + + + + +


luaL_loadfilex

+[-0, +1, e] +

int luaL_loadfilex (lua_State *L, const char *filename,
+                                            const char *mode);
+ +

+Loads a file as a Lua chunk. +This function uses lua_load to load the chunk in the file +named filename. +If filename is NULL, +then it loads from the standard input. +The first line in the file is ignored if it starts with a #. + + +

+The string mode works as in function lua_load. + + +

+This function returns the same results as lua_load, +but it has an extra error code LUA_ERRFILE +if it cannot open/read the file or the file has a wrong mode. + + +

+As lua_load, this function only loads the chunk; +it does not run it. + + + + + +


luaL_loadstring

+[-0, +1, –] +

int luaL_loadstring (lua_State *L, const char *s);
+ +

+Loads a string as a Lua chunk. +This function uses lua_load to load the chunk in +the zero-terminated string s. + + +

+This function returns the same results as lua_load. + + +

+Also as lua_load, this function only loads the chunk; +it does not run it. + + + + + +


luaL_newlib

+[-0, +1, e] +

void luaL_newlib (lua_State *L, const luaL_Reg *l);
+ +

+Creates a new table and registers there +the functions in list l. +It is implemented as the following macro: + +

+     (luaL_newlibtable(L,l), luaL_setfuncs(L,l,0))
+
+ + + + +

luaL_newlibtable

+[-0, +1, e] +

void luaL_newlibtable (lua_State *L, const luaL_Reg l[]);
+ +

+Creates a new table with a size optimized +to store all entries in the array l +(but does not actually store them). +It is intended to be used in conjunction with luaL_setfuncs +(see luaL_newlib). + + +

+It is implemented as a macro. +The array l must be the actual array, +not a pointer to it. + + + + + +


luaL_newmetatable

+[-0, +1, e] +

int luaL_newmetatable (lua_State *L, const char *tname);
+ +

+If the registry already has the key tname, +returns 0. +Otherwise, +creates a new table to be used as a metatable for userdata, +adds it to the registry with key tname, +and returns 1. + + +

+In both cases pushes onto the stack the final value associated +with tname in the registry. + + + + + +


luaL_newstate

+[-0, +0, –] +

lua_State *luaL_newstate (void);
+ +

+Creates a new Lua state. +It calls lua_newstate with an +allocator based on the standard C realloc function +and then sets a panic function (see §4.6) that prints +an error message to the standard error output in case of fatal +errors. + + +

+Returns the new state, +or NULL if there is a memory allocation error. + + + + + +


luaL_openlibs

+[-0, +0, e] +

void luaL_openlibs (lua_State *L);
+ +

+Opens all standard Lua libraries into the given state. + + + + + +


luaL_optint

+[-0, +0, v] +

int luaL_optint (lua_State *L, int arg, int d);
+ +

+If the function argument arg is a number, +returns this number cast to an int. +If this argument is absent or is nil, +returns d. +Otherwise, raises an error. + + + + + +


luaL_optinteger

+[-0, +0, v] +

lua_Integer luaL_optinteger (lua_State *L,
+                             int arg,
+                             lua_Integer d);
+ +

+If the function argument arg is a number, +returns this number cast to a lua_Integer. +If this argument is absent or is nil, +returns d. +Otherwise, raises an error. + + + + + +


luaL_optlong

+[-0, +0, v] +

long luaL_optlong (lua_State *L, int arg, long d);
+ +

+If the function argument arg is a number, +returns this number cast to a long. +If this argument is absent or is nil, +returns d. +Otherwise, raises an error. + + + + + +


luaL_optlstring

+[-0, +0, v] +

const char *luaL_optlstring (lua_State *L,
+                             int arg,
+                             const char *d,
+                             size_t *l);
+ +

+If the function argument arg is a string, +returns this string. +If this argument is absent or is nil, +returns d. +Otherwise, raises an error. + + +

+If l is not NULL, +fills the position *l with the result's length. + + + + + +


luaL_optnumber

+[-0, +0, v] +

lua_Number luaL_optnumber (lua_State *L, int arg, lua_Number d);
+ +

+If the function argument arg is a number, +returns this number. +If this argument is absent or is nil, +returns d. +Otherwise, raises an error. + + + + + +


luaL_optstring

+[-0, +0, v] +

const char *luaL_optstring (lua_State *L,
+                            int arg,
+                            const char *d);
+ +

+If the function argument arg is a string, +returns this string. +If this argument is absent or is nil, +returns d. +Otherwise, raises an error. + + + + + +


luaL_optunsigned

+[-0, +0, v] +

lua_Unsigned luaL_optunsigned (lua_State *L,
+                               int arg,
+                               lua_Unsigned u);
+ +

+If the function argument arg is a number, +returns this number cast to a lua_Unsigned. +If this argument is absent or is nil, +returns u. +Otherwise, raises an error. + + + + + +


luaL_prepbuffer

+[-?, +?, e] +

char *luaL_prepbuffer (luaL_Buffer *B);
+ +

+Equivalent to luaL_prepbuffsize +with the predefined size LUAL_BUFFERSIZE. + + + + + +


luaL_prepbuffsize

+[-?, +?, e] +

char *luaL_prepbuffsize (luaL_Buffer *B, size_t sz);
+ +

+Returns an address to a space of size sz +where you can copy a string to be added to buffer B +(see luaL_Buffer). +After copying the string into this space you must call +luaL_addsize with the size of the string to actually add +it to the buffer. + + + + + +


luaL_pushresult

+[-?, +1, e] +

void luaL_pushresult (luaL_Buffer *B);
+ +

+Finishes the use of buffer B leaving the final string on +the top of the stack. + + + + + +


luaL_pushresultsize

+[-?, +1, e] +

void luaL_pushresultsize (luaL_Buffer *B, size_t sz);
+ +

+Equivalent to the sequence luaL_addsize, luaL_pushresult. + + + + + +


luaL_ref

+[-1, +0, e] +

int luaL_ref (lua_State *L, int t);
+ +

+Creates and returns a reference, +in the table at index t, +for the object at the top of the stack (and pops the object). + + +

+A reference is a unique integer key. +As long as you do not manually add integer keys into table t, +luaL_ref ensures the uniqueness of the key it returns. +You can retrieve an object referred by reference r +by calling lua_rawgeti(L, t, r). +Function luaL_unref frees a reference and its associated object. + + +

+If the object at the top of the stack is nil, +luaL_ref returns the constant LUA_REFNIL. +The constant LUA_NOREF is guaranteed to be different +from any reference returned by luaL_ref. + + + + + +


luaL_Reg

+
typedef struct luaL_Reg {
+  const char *name;
+  lua_CFunction func;
+} luaL_Reg;
+ +

+Type for arrays of functions to be registered by +luaL_setfuncs. +name is the function name and func is a pointer to +the function. +Any array of luaL_Reg must end with an sentinel entry +in which both name and func are NULL. + + + + + +


luaL_requiref

+[-0, +1, e] +

void luaL_requiref (lua_State *L, const char *modname,
+                    lua_CFunction openf, int glb);
+ +

+Calls function openf with string modname as an argument +and sets the call result in package.loaded[modname], +as if that function has been called through require. + + +

+If glb is true, +also stores the result into global modname. + + +

+Leaves a copy of that result on the stack. + + + + + +


luaL_setfuncs

+[-nup, +0, e] +

void luaL_setfuncs (lua_State *L, const luaL_Reg *l, int nup);
+ +

+Registers all functions in the array l +(see luaL_Reg) into the table on the top of the stack +(below optional upvalues, see next). + + +

+When nup is not zero, +all functions are created sharing nup upvalues, +which must be previously pushed on the stack +on top of the library table. +These values are popped from the stack after the registration. + + + + + +


luaL_setmetatable

+[-0, +0, –] +

void luaL_setmetatable (lua_State *L, const char *tname);
+ +

+Sets the metatable of the object at the top of the stack +as the metatable associated with name tname +in the registry (see luaL_newmetatable). + + + + + +


luaL_testudata

+[-0, +0, e] +

void *luaL_testudata (lua_State *L, int arg, const char *tname);
+ +

+This function works like luaL_checkudata, +except that, when the test fails, +it returns NULL instead of throwing an error. + + + + + +


luaL_tolstring

+[-0, +1, e] +

const char *luaL_tolstring (lua_State *L, int idx, size_t *len);
+ +

+Converts any Lua value at the given index to a C string +in a reasonable format. +The resulting string is pushed onto the stack and also +returned by the function. +If len is not NULL, +the function also sets *len with the string length. + + +

+If the value has a metatable with a "__tostring" field, +then luaL_tolstring calls the corresponding metamethod +with the value as argument, +and uses the result of the call as its result. + + + + + +


luaL_traceback

+[-0, +1, e] +

void luaL_traceback (lua_State *L, lua_State *L1, const char *msg,
+                     int level);
+ +

+Creates and pushes a traceback of the stack L1. +If msg is not NULL it is appended +at the beginning of the traceback. +The level parameter tells at which level +to start the traceback. + + + + + +


luaL_typename

+[-0, +0, –] +

const char *luaL_typename (lua_State *L, int index);
+ +

+Returns the name of the type of the value at the given index. + + + + + +


luaL_unref

+[-0, +0, –] +

void luaL_unref (lua_State *L, int t, int ref);
+ +

+Releases reference ref from the table at index t +(see luaL_ref). +The entry is removed from the table, +so that the referred object can be collected. +The reference ref is also freed to be used again. + + +

+If ref is LUA_NOREF or LUA_REFNIL, +luaL_unref does nothing. + + + + + +


luaL_where

+[-0, +1, e] +

void luaL_where (lua_State *L, int lvl);
+ +

+Pushes onto the stack a string identifying the current position +of the control at level lvl in the call stack. +Typically this string has the following format: + +

+     chunkname:currentline:
+

+Level 0 is the running function, +level 1 is the function that called the running function, +etc. + + +

+This function is used to build a prefix for error messages. + + + + + + + +

6 – Standard Libraries

+ +

+The standard Lua libraries provide useful functions +that are implemented directly through the C API. +Some of these functions provide essential services to the language +(e.g., type and getmetatable); +others provide access to "outside" services (e.g., I/O); +and others could be implemented in Lua itself, +but are quite useful or have critical performance requirements that +deserve an implementation in C (e.g., table.sort). + + +

+All libraries are implemented through the official C API +and are provided as separate C modules. +Currently, Lua has the following standard libraries: + +

    + +
  • basic library (§6.1);
  • + +
  • coroutine library (§6.2);
  • + +
  • package library (§6.3);
  • + +
  • string manipulation (§6.4);
  • + +
  • table manipulation (§6.5);
  • + +
  • mathematical functions (§6.6) (sin, log, etc.);
  • + +
  • bitwise operations (§6.7);
  • + +
  • input and output (§6.8);
  • + +
  • operating system facilities (§6.9);
  • + +
  • debug facilities (§6.10).
  • + +

+Except for the basic and the package libraries, +each library provides all its functions as fields of a global table +or as methods of its objects. + + +

+To have access to these libraries, +the C host program should call the luaL_openlibs function, +which opens all standard libraries. +Alternatively, +the host program can open them individually by using +luaL_requiref to call +luaopen_base (for the basic library), +luaopen_package (for the package library), +luaopen_coroutine (for the coroutine library), +luaopen_string (for the string library), +luaopen_table (for the table library), +luaopen_math (for the mathematical library), +luaopen_bit32 (for the bit library), +luaopen_io (for the I/O library), +luaopen_os (for the Operating System library), +and luaopen_debug (for the debug library). +These functions are declared in lualib.h. + + + +

6.1 – Basic Functions

+ +

+The basic library provides core functions to Lua. +If you do not include this library in your application, +you should check carefully whether you need to provide +implementations for some of its facilities. + + +

+


assert (v [, message])

+Issues an error when +the value of its argument v is false (i.e., nil or false); +otherwise, returns all its arguments. +message is an error message; +when absent, it defaults to "assertion failed!" + + + + +

+


collectgarbage ([opt [, arg]])

+ + +

+This function is a generic interface to the garbage collector. +It performs different functions according to its first argument, opt: + +

    + +
  • "collect": +performs a full garbage-collection cycle. +This is the default option. +
  • + +
  • "stop": +stops automatic execution of the garbage collector. +The collector will run only when explicitly invoked, +until a call to restart it. +
  • + +
  • "restart": +restarts automatic execution of the garbage collector. +
  • + +
  • "count": +returns the total memory in use by Lua (in Kbytes) and +a second value with the total memory in bytes modulo 1024. +The first value has a fractional part, +so the following equality is always true: + +
    +     k, b = collectgarbage("count")
    +     assert(k*1024 == math.floor(k)*1024 + b)
    +

    +(The second result is useful when Lua is compiled +with a non floating-point type for numbers.) +

  • + +
  • "step": +performs a garbage-collection step. +The step "size" is controlled by arg +(larger values mean more steps) in a non-specified way. +If you want to control the step size +you must experimentally tune the value of arg. +Returns true if the step finished a collection cycle. +
  • + +
  • "setpause": +sets arg as the new value for the pause of +the collector (see §2.5). +Returns the previous value for pause. +
  • + +
  • "setstepmul": +sets arg as the new value for the step multiplier of +the collector (see §2.5). +Returns the previous value for step. +
  • + +
  • "isrunning": +returns a boolean that tells whether the collector is running +(i.e., not stopped). +
  • + +
  • "generational": +changes the collector to generational mode. +This is an experimental feature (see §2.5). +
  • + +
  • "incremental": +changes the collector to incremental mode. +This is the default mode. +
  • + +
+ + + +

+


dofile ([filename])

+Opens the named file and executes its contents as a Lua chunk. +When called without arguments, +dofile executes the contents of the standard input (stdin). +Returns all values returned by the chunk. +In case of errors, dofile propagates the error +to its caller (that is, dofile does not run in protected mode). + + + + +

+


error (message [, level])

+Terminates the last protected function called +and returns message as the error message. +Function error never returns. + + +

+Usually, error adds some information about the error position +at the beginning of the message, if the message is a string. +The level argument specifies how to get the error position. +With level 1 (the default), the error position is where the +error function was called. +Level 2 points the error to where the function +that called error was called; and so on. +Passing a level 0 avoids the addition of error position information +to the message. + + + + +

+


_G

+A global variable (not a function) that +holds the global environment (see §2.2). +Lua itself does not use this variable; +changing its value does not affect any environment, +nor vice-versa. + + + + +

+


getmetatable (object)

+ + +

+If object does not have a metatable, returns nil. +Otherwise, +if the object's metatable has a "__metatable" field, +returns the associated value. +Otherwise, returns the metatable of the given object. + + + + +

+


ipairs (t)

+ + +

+If t has a metamethod __ipairs, +calls it with t as argument and returns the first three +results from the call. + + +

+Otherwise, +returns three values: an iterator function, the table t, and 0, +so that the construction + +

+     for i,v in ipairs(t) do body end
+

+will iterate over the pairs (1,t[1]), (2,t[2]), ..., +up to the first integer key absent from the table. + + + + +

+


load (ld [, source [, mode [, env]]])

+ + +

+Loads a chunk. + + +

+If ld is a string, the chunk is this string. +If ld is a function, +load calls it repeatedly to get the chunk pieces. +Each call to ld must return a string that concatenates +with previous results. +A return of an empty string, nil, or no value signals the end of the chunk. + + +

+If there are no syntactic errors, +returns the compiled chunk as a function; +otherwise, returns nil plus the error message. + + +

+If the resulting function has upvalues, +the first upvalue is set to the value of env, +if that parameter is given, +or to the value of the global environment. +(When you load a main chunk, +the resulting function will always have exactly one upvalue, +the _ENV variable (see §2.2). +When you load a binary chunk created from a function (see string.dump), +the resulting function can have arbitrary upvalues.) + + +

+source is used as the source of the chunk for error messages +and debug information (see §4.9). +When absent, +it defaults to ld, if ld is a string, +or to "=(load)" otherwise. + + +

+The string mode controls whether the chunk can be text or binary +(that is, a precompiled chunk). +It may be the string "b" (only binary chunks), +"t" (only text chunks), +or "bt" (both binary and text). +The default is "bt". + + + + +

+


loadfile ([filename [, mode [, env]]])

+ + +

+Similar to load, +but gets the chunk from file filename +or from the standard input, +if no file name is given. + + + + +

+


next (table [, index])

+ + +

+Allows a program to traverse all fields of a table. +Its first argument is a table and its second argument +is an index in this table. +next returns the next index of the table +and its associated value. +When called with nil as its second argument, +next returns an initial index +and its associated value. +When called with the last index, +or with nil in an empty table, +next returns nil. +If the second argument is absent, then it is interpreted as nil. +In particular, +you can use next(t) to check whether a table is empty. + + +

+The order in which the indices are enumerated is not specified, +even for numeric indices. +(To traverse a table in numeric order, +use a numerical for.) + + +

+The behavior of next is undefined if, +during the traversal, +you assign any value to a non-existent field in the table. +You may however modify existing fields. +In particular, you may clear existing fields. + + + + +

+


pairs (t)

+ + +

+If t has a metamethod __pairs, +calls it with t as argument and returns the first three +results from the call. + + +

+Otherwise, +returns three values: the next function, the table t, and nil, +so that the construction + +

+     for k,v in pairs(t) do body end
+

+will iterate over all key–value pairs of table t. + + +

+See function next for the caveats of modifying +the table during its traversal. + + + + +

+


pcall (f [, arg1, ···])

+ + +

+Calls function f with +the given arguments in protected mode. +This means that any error inside f is not propagated; +instead, pcall catches the error +and returns a status code. +Its first result is the status code (a boolean), +which is true if the call succeeds without errors. +In such case, pcall also returns all results from the call, +after this first result. +In case of any error, pcall returns false plus the error message. + + + + +

+


print (···)

+Receives any number of arguments +and prints their values to stdout, +using the tostring function to convert each argument to a string. +print is not intended for formatted output, +but only as a quick way to show a value, +for instance for debugging. +For complete control over the output, +use string.format and io.write. + + + + +

+


rawequal (v1, v2)

+Checks whether v1 is equal to v2, +without invoking any metamethod. +Returns a boolean. + + + + +

+


rawget (table, index)

+Gets the real value of table[index], +without invoking any metamethod. +table must be a table; +index may be any value. + + + + +

+


rawlen (v)

+Returns the length of the object v, +which must be a table or a string, +without invoking any metamethod. +Returns an integer number. + + + + +

+


rawset (table, index, value)

+Sets the real value of table[index] to value, +without invoking any metamethod. +table must be a table, +index any value different from nil and NaN, +and value any Lua value. + + +

+This function returns table. + + + + +

+


select (index, ···)

+ + +

+If index is a number, +returns all arguments after argument number index; +a negative number indexes from the end (-1 is the last argument). +Otherwise, index must be the string "#", +and select returns the total number of extra arguments it received. + + + + +

+


setmetatable (table, metatable)

+ + +

+Sets the metatable for the given table. +(You cannot change the metatable of other types from Lua, only from C.) +If metatable is nil, +removes the metatable of the given table. +If the original metatable has a "__metatable" field, +raises an error. + + +

+This function returns table. + + + + +

+


tonumber (e [, base])

+ + +

+When called with no base, +tonumber tries to convert its argument to a number. +If the argument is already a number or +a string convertible to a number (see §3.4.2), +then tonumber returns this number; +otherwise, it returns nil. + + +

+When called with base, +then e should be a string to be interpreted as +an integer numeral in that base. +The base may be any integer between 2 and 36, inclusive. +In bases above 10, the letter 'A' (in either upper or lower case) +represents 10, 'B' represents 11, and so forth, +with 'Z' representing 35. +If the string e is not a valid numeral in the given base, +the function returns nil. + + + + +

+


tostring (v)

+Receives a value of any type and +converts it to a string in a reasonable format. +(For complete control of how numbers are converted, +use string.format.) + + +

+If the metatable of v has a "__tostring" field, +then tostring calls the corresponding value +with v as argument, +and uses the result of the call as its result. + + + + +

+


type (v)

+Returns the type of its only argument, coded as a string. +The possible results of this function are +"nil" (a string, not the value nil), +"number", +"string", +"boolean", +"table", +"function", +"thread", +and "userdata". + + + + +

+


_VERSION

+A global variable (not a function) that +holds a string containing the current interpreter version. +The current contents of this variable is "Lua 5.2". + + + + +

+


xpcall (f, msgh [, arg1, ···])

+ + +

+This function is similar to pcall, +except that it sets a new message handler msgh. + + + + + + + +

6.2 – Coroutine Manipulation

+ +

+The operations related to coroutines comprise a sub-library of +the basic library and come inside the table coroutine. +See §2.6 for a general description of coroutines. + + +

+


coroutine.create (f)

+ + +

+Creates a new coroutine, with body f. +f must be a Lua function. +Returns this new coroutine, +an object with type "thread". + + + + +

+


coroutine.resume (co [, val1, ···])

+ + +

+Starts or continues the execution of coroutine co. +The first time you resume a coroutine, +it starts running its body. +The values val1, ... are passed +as the arguments to the body function. +If the coroutine has yielded, +resume restarts it; +the values val1, ... are passed +as the results from the yield. + + +

+If the coroutine runs without any errors, +resume returns true plus any values passed to yield +(if the coroutine yields) or any values returned by the body function +(if the coroutine terminates). +If there is any error, +resume returns false plus the error message. + + + + +

+


coroutine.running ()

+ + +

+Returns the running coroutine plus a boolean, +true when the running coroutine is the main one. + + + + +

+


coroutine.status (co)

+ + +

+Returns the status of coroutine co, as a string: +"running", +if the coroutine is running (that is, it called status); +"suspended", if the coroutine is suspended in a call to yield, +or if it has not started running yet; +"normal" if the coroutine is active but not running +(that is, it has resumed another coroutine); +and "dead" if the coroutine has finished its body function, +or if it has stopped with an error. + + + + +

+


coroutine.wrap (f)

+ + +

+Creates a new coroutine, with body f. +f must be a Lua function. +Returns a function that resumes the coroutine each time it is called. +Any arguments passed to the function behave as the +extra arguments to resume. +Returns the same values returned by resume, +except the first boolean. +In case of error, propagates the error. + + + + +

+


coroutine.yield (···)

+ + +

+Suspends the execution of the calling coroutine. +Any arguments to yield are passed as extra results to resume. + + + + + + + +

6.3 – Modules

+ +

+The package library provides basic +facilities for loading modules in Lua. +It exports one function directly in the global environment: +require. +Everything else is exported in a table package. + + +

+


require (modname)

+ + +

+Loads the given module. +The function starts by looking into the package.loaded table +to determine whether modname is already loaded. +If it is, then require returns the value stored +at package.loaded[modname]. +Otherwise, it tries to find a loader for the module. + + +

+To find a loader, +require is guided by the package.searchers sequence. +By changing this sequence, +we can change how require looks for a module. +The following explanation is based on the default configuration +for package.searchers. + + +

+First require queries package.preload[modname]. +If it has a value, +this value (which should be a function) is the loader. +Otherwise require searches for a Lua loader using the +path stored in package.path. +If that also fails, it searches for a C loader using the +path stored in package.cpath. +If that also fails, +it tries an all-in-one loader (see package.searchers). + + +

+Once a loader is found, +require calls the loader with two arguments: +modname and an extra value dependent on how it got the loader. +(If the loader came from a file, +this extra value is the file name.) +If the loader returns any non-nil value, +require assigns the returned value to package.loaded[modname]. +If the loader does not return a non-nil value and +has not assigned any value to package.loaded[modname], +then require assigns true to this entry. +In any case, require returns the +final value of package.loaded[modname]. + + +

+If there is any error loading or running the module, +or if it cannot find any loader for the module, +then require raises an error. + + + + +

+


package.config

+ + +

+A string describing some compile-time configurations for packages. +This string is a sequence of lines: + +

    + +
  • The first line is the directory separator string. +Default is '\' for Windows and '/' for all other systems.
  • + +
  • The second line is the character that separates templates in a path. +Default is ';'.
  • + +
  • The third line is the string that marks the +substitution points in a template. +Default is '?'.
  • + +
  • The fourth line is a string that, in a path in Windows, +is replaced by the executable's directory. +Default is '!'.
  • + +
  • The fifth line is a mark to ignore all text before it +when building the luaopen_ function name. +Default is '-'.
  • + +
+ + + +

+


package.cpath

+ + +

+The path used by require to search for a C loader. + + +

+Lua initializes the C path package.cpath in the same way +it initializes the Lua path package.path, +using the environment variable LUA_CPATH_5_2 +or the environment variable LUA_CPATH +or a default path defined in luaconf.h. + + + + +

+


package.loaded

+ + +

+A table used by require to control which +modules are already loaded. +When you require a module modname and +package.loaded[modname] is not false, +require simply returns the value stored there. + + +

+This variable is only a reference to the real table; +assignments to this variable do not change the +table used by require. + + + + +

+


package.loadlib (libname, funcname)

+ + +

+Dynamically links the host program with the C library libname. + + +

+If funcname is "*", +then it only links with the library, +making the symbols exported by the library +available to other dynamically linked libraries. +Otherwise, +it looks for a function funcname inside the library +and returns this function as a C function. +So, funcname must follow the lua_CFunction prototype +(see lua_CFunction). + + +

+This is a low-level function. +It completely bypasses the package and module system. +Unlike require, +it does not perform any path searching and +does not automatically adds extensions. +libname must be the complete file name of the C library, +including if necessary a path and an extension. +funcname must be the exact name exported by the C library +(which may depend on the C compiler and linker used). + + +

+This function is not supported by Standard C. +As such, it is only available on some platforms +(Windows, Linux, Mac OS X, Solaris, BSD, +plus other Unix systems that support the dlfcn standard). + + + + +

+


package.path

+ + +

+The path used by require to search for a Lua loader. + + +

+At start-up, Lua initializes this variable with +the value of the environment variable LUA_PATH_5_2 or +the environment variable LUA_PATH or +with a default path defined in luaconf.h, +if those environment variables are not defined. +Any ";;" in the value of the environment variable +is replaced by the default path. + + + + +

+


package.preload

+ + +

+A table to store loaders for specific modules +(see require). + + +

+This variable is only a reference to the real table; +assignments to this variable do not change the +table used by require. + + + + +

+


package.searchers

+ + +

+A table used by require to control how to load modules. + + +

+Each entry in this table is a searcher function. +When looking for a module, +require calls each of these searchers in ascending order, +with the module name (the argument given to require) as its +sole parameter. +The function can return another function (the module loader) +plus an extra value that will be passed to that loader, +or a string explaining why it did not find that module +(or nil if it has nothing to say). + + +

+Lua initializes this table with four searcher functions. + + +

+The first searcher simply looks for a loader in the +package.preload table. + + +

+The second searcher looks for a loader as a Lua library, +using the path stored at package.path. +The search is done as described in function package.searchpath. + + +

+The third searcher looks for a loader as a C library, +using the path given by the variable package.cpath. +Again, +the search is done as described in function package.searchpath. +For instance, +if the C path is the string + +

+     "./?.so;./?.dll;/usr/local/?/init.so"
+

+the searcher for module foo +will try to open the files ./foo.so, ./foo.dll, +and /usr/local/foo/init.so, in that order. +Once it finds a C library, +this searcher first uses a dynamic link facility to link the +application with the library. +Then it tries to find a C function inside the library to +be used as the loader. +The name of this C function is the string "luaopen_" +concatenated with a copy of the module name where each dot +is replaced by an underscore. +Moreover, if the module name has a hyphen, +its prefix up to (and including) the first hyphen is removed. +For instance, if the module name is a.v1-b.c, +the function name will be luaopen_b_c. + + +

+The fourth searcher tries an all-in-one loader. +It searches the C path for a library for +the root name of the given module. +For instance, when requiring a.b.c, +it will search for a C library for a. +If found, it looks into it for an open function for +the submodule; +in our example, that would be luaopen_a_b_c. +With this facility, a package can pack several C submodules +into one single library, +with each submodule keeping its original open function. + + +

+All searchers except the first one (preload) return as the extra value +the file name where the module was found, +as returned by package.searchpath. +The first searcher returns no extra value. + + + + +

+


package.searchpath (name, path [, sep [, rep]])

+ + +

+Searches for the given name in the given path. + + +

+A path is a string containing a sequence of +templates separated by semicolons. +For each template, +the function replaces each interrogation mark (if any) +in the template with a copy of name +wherein all occurrences of sep +(a dot, by default) +were replaced by rep +(the system's directory separator, by default), +and then tries to open the resulting file name. + + +

+For instance, if the path is the string + +

+     "./?.lua;./?.lc;/usr/local/?/init.lua"
+

+the search for the name foo.a +will try to open the files +./foo/a.lua, ./foo/a.lc, and +/usr/local/foo/a/init.lua, in that order. + + +

+Returns the resulting name of the first file that it can +open in read mode (after closing the file), +or nil plus an error message if none succeeds. +(This error message lists all file names it tried to open.) + + + + + + + +

6.4 – String Manipulation

+ +

+This library provides generic functions for string manipulation, +such as finding and extracting substrings, and pattern matching. +When indexing a string in Lua, the first character is at position 1 +(not at 0, as in C). +Indices are allowed to be negative and are interpreted as indexing backwards, +from the end of the string. +Thus, the last character is at position -1, and so on. + + +

+The string library provides all its functions inside the table +string. +It also sets a metatable for strings +where the __index field points to the string table. +Therefore, you can use the string functions in object-oriented style. +For instance, string.byte(s,i) +can be written as s:byte(i). + + +

+The string library assumes one-byte character encodings. + + +

+


string.byte (s [, i [, j]])

+Returns the internal numerical codes of the characters s[i], +s[i+1], ..., s[j]. +The default value for i is 1; +the default value for j is i. +These indices are corrected +following the same rules of function string.sub. + + +

+Numerical codes are not necessarily portable across platforms. + + + + +

+


string.char (···)

+Receives zero or more integers. +Returns a string with length equal to the number of arguments, +in which each character has the internal numerical code equal +to its corresponding argument. + + +

+Numerical codes are not necessarily portable across platforms. + + + + +

+


string.dump (function)

+ + +

+Returns a string containing a binary representation of the given function, +so that a later load on this string returns +a copy of the function (but with new upvalues). + + + + +

+


string.find (s, pattern [, init [, plain]])

+ + +

+Looks for the first match of +pattern in the string s. +If it finds a match, then find returns the indices of s +where this occurrence starts and ends; +otherwise, it returns nil. +A third, optional numerical argument init specifies +where to start the search; +its default value is 1 and can be negative. +A value of true as a fourth, optional argument plain +turns off the pattern matching facilities, +so the function does a plain "find substring" operation, +with no characters in pattern being considered magic. +Note that if plain is given, then init must be given as well. + + +

+If the pattern has captures, +then in a successful match +the captured values are also returned, +after the two indices. + + + + +

+


string.format (formatstring, ···)

+ + +

+Returns a formatted version of its variable number of arguments +following the description given in its first argument (which must be a string). +The format string follows the same rules as the ISO C function sprintf. +The only differences are that the options/modifiers +*, h, L, l, n, +and p are not supported +and that there is an extra option, q. +The q option formats a string between double quotes, +using escape sequences when necessary to ensure that +it can safely be read back by the Lua interpreter. +For instance, the call + +

+     string.format('%q', 'a string with "quotes" and \n new line')
+

+may produce the string: + +

+     "a string with \"quotes\" and \
+      new line"
+
+ +

+Options +A and a (when available), +E, e, f, +G, and g all expect a number as argument. +Options c, d, +i, o, u, X, and x +also expect a number, +but the range of that number may be limited by +the underlying C implementation. +For options o, u, X, and x, +the number cannot be negative. +Option q expects a string; +option s expects a string without embedded zeros. +If the argument to option s is not a string, +it is converted to one following the same rules of tostring. + + + + +

+


string.gmatch (s, pattern)

+Returns an iterator function that, +each time it is called, +returns the next captures from pattern over the string s. +If pattern specifies no captures, +then the whole match is produced in each call. + + +

+As an example, the following loop +will iterate over all the words from string s, +printing one per line: + +

+     s = "hello world from Lua"
+     for w in string.gmatch(s, "%a+") do
+       print(w)
+     end
+

+The next example collects all pairs key=value from the +given string into a table: + +

+     t = {}
+     s = "from=world, to=Lua"
+     for k, v in string.gmatch(s, "(%w+)=(%w+)") do
+       t[k] = v
+     end
+
+ +

+For this function, a caret '^' at the start of a pattern does not +work as an anchor, as this would prevent the iteration. + + + + +

+


string.gsub (s, pattern, repl [, n])

+Returns a copy of s +in which all (or the first n, if given) +occurrences of the pattern have been +replaced by a replacement string specified by repl, +which can be a string, a table, or a function. +gsub also returns, as its second value, +the total number of matches that occurred. +The name gsub comes from Global SUBstitution. + + +

+If repl is a string, then its value is used for replacement. +The character % works as an escape character: +any sequence in repl of the form %d, +with d between 1 and 9, +stands for the value of the d-th captured substring. +The sequence %0 stands for the whole match. +The sequence %% stands for a single %. + + +

+If repl is a table, then the table is queried for every match, +using the first capture as the key. + + +

+If repl is a function, then this function is called every time a +match occurs, with all captured substrings passed as arguments, +in order. + + +

+In any case, +if the pattern specifies no captures, +then it behaves as if the whole pattern was inside a capture. + + +

+If the value returned by the table query or by the function call +is a string or a number, +then it is used as the replacement string; +otherwise, if it is false or nil, +then there is no replacement +(that is, the original match is kept in the string). + + +

+Here are some examples: + +

+     x = string.gsub("hello world", "(%w+)", "%1 %1")
+     --> x="hello hello world world"
+     
+     x = string.gsub("hello world", "%w+", "%0 %0", 1)
+     --> x="hello hello world"
+     
+     x = string.gsub("hello world from Lua", "(%w+)%s*(%w+)", "%2 %1")
+     --> x="world hello Lua from"
+     
+     x = string.gsub("home = $HOME, user = $USER", "%$(%w+)", os.getenv)
+     --> x="home = /home/roberto, user = roberto"
+     
+     x = string.gsub("4+5 = $return 4+5$", "%$(.-)%$", function (s)
+           return load(s)()
+         end)
+     --> x="4+5 = 9"
+     
+     local t = {name="lua", version="5.2"}
+     x = string.gsub("$name-$version.tar.gz", "%$(%w+)", t)
+     --> x="lua-5.2.tar.gz"
+
+ + + +

+


string.len (s)

+Receives a string and returns its length. +The empty string "" has length 0. +Embedded zeros are counted, +so "a\000bc\000" has length 5. + + + + +

+


string.lower (s)

+Receives a string and returns a copy of this string with all +uppercase letters changed to lowercase. +All other characters are left unchanged. +The definition of what an uppercase letter is depends on the current locale. + + + + +

+


string.match (s, pattern [, init])

+Looks for the first match of +pattern in the string s. +If it finds one, then match returns +the captures from the pattern; +otherwise it returns nil. +If pattern specifies no captures, +then the whole match is returned. +A third, optional numerical argument init specifies +where to start the search; +its default value is 1 and can be negative. + + + + +

+


string.rep (s, n [, sep])

+Returns a string that is the concatenation of n copies of +the string s separated by the string sep. +The default value for sep is the empty string +(that is, no separator). + + + + +

+


string.reverse (s)

+Returns a string that is the string s reversed. + + + + +

+


string.sub (s, i [, j])

+Returns the substring of s that +starts at i and continues until j; +i and j can be negative. +If j is absent, then it is assumed to be equal to -1 +(which is the same as the string length). +In particular, +the call string.sub(s,1,j) returns a prefix of s +with length j, +and string.sub(s, -i) returns a suffix of s +with length i. + + +

+If, after the translation of negative indices, +i is less than 1, +it is corrected to 1. +If j is greater than the string length, +it is corrected to that length. +If, after these corrections, +i is greater than j, +the function returns the empty string. + + + + +

+


string.upper (s)

+Receives a string and returns a copy of this string with all +lowercase letters changed to uppercase. +All other characters are left unchanged. +The definition of what a lowercase letter is depends on the current locale. + + + +

6.4.1 – Patterns

+ + +

Character Class:

+A character class is used to represent a set of characters. +The following combinations are allowed in describing a character class: + +

    + +
  • x: +(where x is not one of the magic characters +^$()%.[]*+-?) +represents the character x itself. +
  • + +
  • .: (a dot) represents all characters.
  • + +
  • %a: represents all letters.
  • + +
  • %c: represents all control characters.
  • + +
  • %d: represents all digits.
  • + +
  • %g: represents all printable characters except space.
  • + +
  • %l: represents all lowercase letters.
  • + +
  • %p: represents all punctuation characters.
  • + +
  • %s: represents all space characters.
  • + +
  • %u: represents all uppercase letters.
  • + +
  • %w: represents all alphanumeric characters.
  • + +
  • %x: represents all hexadecimal digits.
  • + +
  • %x: (where x is any non-alphanumeric character) +represents the character x. +This is the standard way to escape the magic characters. +Any punctuation character (even the non magic) +can be preceded by a '%' +when used to represent itself in a pattern. +
  • + +
  • [set]: +represents the class which is the union of all +characters in set. +A range of characters can be specified by +separating the end characters of the range, +in ascending order, with a '-', +All classes %x described above can also be used as +components in set. +All other characters in set represent themselves. +For example, [%w_] (or [_%w]) +represents all alphanumeric characters plus the underscore, +[0-7] represents the octal digits, +and [0-7%l%-] represents the octal digits plus +the lowercase letters plus the '-' character. + + +

    +The interaction between ranges and classes is not defined. +Therefore, patterns like [%a-z] or [a-%%] +have no meaning. +

  • + +
  • [^set]: +represents the complement of set, +where set is interpreted as above. +
  • + +

+For all classes represented by single letters (%a, %c, etc.), +the corresponding uppercase letter represents the complement of the class. +For instance, %S represents all non-space characters. + + +

+The definitions of letter, space, and other character groups +depend on the current locale. +In particular, the class [a-z] may not be equivalent to %l. + + + + + +

Pattern Item:

+A pattern item can be + +

    + +
  • +a single character class, +which matches any single character in the class; +
  • + +
  • +a single character class followed by '*', +which matches 0 or more repetitions of characters in the class. +These repetition items will always match the longest possible sequence; +
  • + +
  • +a single character class followed by '+', +which matches 1 or more repetitions of characters in the class. +These repetition items will always match the longest possible sequence; +
  • + +
  • +a single character class followed by '-', +which also matches 0 or more repetitions of characters in the class. +Unlike '*', +these repetition items will always match the shortest possible sequence; +
  • + +
  • +a single character class followed by '?', +which matches 0 or 1 occurrence of a character in the class; +
  • + +
  • +%n, for n between 1 and 9; +such item matches a substring equal to the n-th captured string +(see below); +
  • + +
  • +%bxy, where x and y are two distinct characters; +such item matches strings that start with x, end with y, +and where the x and y are balanced. +This means that, if one reads the string from left to right, +counting +1 for an x and -1 for a y, +the ending y is the first y where the count reaches 0. +For instance, the item %b() matches expressions with +balanced parentheses. +
  • + +
  • +%f[set], a frontier pattern; +such item matches an empty string at any position such that +the next character belongs to set +and the previous character does not belong to set. +The set set is interpreted as previously described. +The beginning and the end of the subject are handled as if +they were the character '\0'. +
  • + +
+ + + + +

Pattern:

+A pattern is a sequence of pattern items. +A caret '^' at the beginning of a pattern anchors the match at the +beginning of the subject string. +A '$' at the end of a pattern anchors the match at the +end of the subject string. +At other positions, +'^' and '$' have no special meaning and represent themselves. + + + + + +

Captures:

+A pattern can contain sub-patterns enclosed in parentheses; +they describe captures. +When a match succeeds, the substrings of the subject string +that match captures are stored (captured) for future use. +Captures are numbered according to their left parentheses. +For instance, in the pattern "(a*(.)%w(%s*))", +the part of the string matching "a*(.)%w(%s*)" is +stored as the first capture (and therefore has number 1); +the character matching "." is captured with number 2, +and the part matching "%s*" has number 3. + + +

+As a special case, the empty capture () captures +the current string position (a number). +For instance, if we apply the pattern "()aa()" on the +string "flaaap", there will be two captures: 3 and 5. + + + + + + + + + + + +

6.5 – Table Manipulation

+ +

+This library provides generic functions for table manipulation. +It provides all its functions inside the table table. + + +

+Remember that, whenever an operation needs the length of a table, +the table should be a proper sequence +or have a __len metamethod (see §3.4.6). +All functions ignore non-numeric keys +in tables given as arguments. + + +

+For performance reasons, +all table accesses (get/set) performed by these functions are raw. + + +

+


table.concat (list [, sep [, i [, j]]])

+ + +

+Given a list where all elements are strings or numbers, +returns the string list[i]..sep..list[i+1] ··· sep..list[j]. +The default value for sep is the empty string, +the default for i is 1, +and the default for j is #list. +If i is greater than j, returns the empty string. + + + + +

+


table.insert (list, [pos,] value)

+ + +

+Inserts element value at position pos in list, +shifting up the elements +list[pos], list[pos+1], ···, list[#list]. +The default value for pos is #list+1, +so that a call table.insert(t,x) inserts x at the end +of list t. + + + + +

+


table.pack (···)

+ + +

+Returns a new table with all parameters stored into keys 1, 2, etc. +and with a field "n" with the total number of parameters. +Note that the resulting table may not be a sequence. + + + + +

+


table.remove (list [, pos])

+ + +

+Removes from list the element at position pos, +returning the value of the removed element. +When pos is an integer between 1 and #list, +it shifts down the elements +list[pos+1], list[pos+2], ···, list[#list] +and erases element list[#list]; +The index pos can also be 0 when #list is 0, +or #list + 1; +in those cases, the function erases the element list[pos]. + + +

+The default value for pos is #list, +so that a call table.remove(t) removes the last element +of list t. + + + + +

+


table.sort (list [, comp])

+ + +

+Sorts list elements in a given order, in-place, +from list[1] to list[#list]. +If comp is given, +then it must be a function that receives two list elements +and returns true when the first element must come +before the second in the final order +(so that not comp(list[i+1],list[i]) will be true after the sort). +If comp is not given, +then the standard Lua operator < is used instead. + + +

+The sort algorithm is not stable; +that is, elements considered equal by the given order +may have their relative positions changed by the sort. + + + + +

+


table.unpack (list [, i [, j]])

+ + +

+Returns the elements from the given table. +This function is equivalent to + +

+     return list[i], list[i+1], ···, list[j]
+

+By default, i is 1 and j is #list. + + + + + + + +

6.6 – Mathematical Functions

+ +

+This library is an interface to the standard C math library. +It provides all its functions inside the table math. + + +

+


math.abs (x)

+ + +

+Returns the absolute value of x. + + + + +

+


math.acos (x)

+ + +

+Returns the arc cosine of x (in radians). + + + + +

+


math.asin (x)

+ + +

+Returns the arc sine of x (in radians). + + + + +

+


math.atan (x)

+ + +

+Returns the arc tangent of x (in radians). + + + + +

+


math.atan2 (y, x)

+ + +

+Returns the arc tangent of y/x (in radians), +but uses the signs of both parameters to find the +quadrant of the result. +(It also handles correctly the case of x being zero.) + + + + +

+


math.ceil (x)

+ + +

+Returns the smallest integer larger than or equal to x. + + + + +

+


math.cos (x)

+ + +

+Returns the cosine of x (assumed to be in radians). + + + + +

+


math.cosh (x)

+ + +

+Returns the hyperbolic cosine of x. + + + + +

+


math.deg (x)

+ + +

+Returns the angle x (given in radians) in degrees. + + + + +

+


math.exp (x)

+ + +

+Returns the value ex. + + + + +

+


math.floor (x)

+ + +

+Returns the largest integer smaller than or equal to x. + + + + +

+


math.fmod (x, y)

+ + +

+Returns the remainder of the division of x by y +that rounds the quotient towards zero. + + + + +

+


math.frexp (x)

+ + +

+Returns m and e such that x = m2e, +e is an integer and the absolute value of m is +in the range [0.5, 1) +(or zero when x is zero). + + + + +

+


math.huge

+ + +

+The value HUGE_VAL, +a value larger than or equal to any other numerical value. + + + + +

+


math.ldexp (m, e)

+ + +

+Returns m2e (e should be an integer). + + + + +

+


math.log (x [, base])

+ + +

+Returns the logarithm of x in the given base. +The default for base is e +(so that the function returns the natural logarithm of x). + + + + +

+


math.max (x, ···)

+ + +

+Returns the maximum value among its arguments. + + + + +

+


math.min (x, ···)

+ + +

+Returns the minimum value among its arguments. + + + + +

+


math.modf (x)

+ + +

+Returns two numbers, +the integral part of x and the fractional part of x. + + + + +

+


math.pi

+ + +

+The value of π. + + + + +

+


math.pow (x, y)

+ + +

+Returns xy. +(You can also use the expression x^y to compute this value.) + + + + +

+


math.rad (x)

+ + +

+Returns the angle x (given in degrees) in radians. + + + + +

+


math.random ([m [, n]])

+ + +

+This function is an interface to the simple +pseudo-random generator function rand provided by Standard C. +(No guarantees can be given for its statistical properties.) + + +

+When called without arguments, +returns a uniform pseudo-random real number +in the range [0,1). +When called with an integer number m, +math.random returns +a uniform pseudo-random integer in the range [1, m]. +When called with two integer numbers m and n, +math.random returns a uniform pseudo-random +integer in the range [m, n]. + + + + +

+


math.randomseed (x)

+ + +

+Sets x as the "seed" +for the pseudo-random generator: +equal seeds produce equal sequences of numbers. + + + + +

+


math.sin (x)

+ + +

+Returns the sine of x (assumed to be in radians). + + + + +

+


math.sinh (x)

+ + +

+Returns the hyperbolic sine of x. + + + + +

+


math.sqrt (x)

+ + +

+Returns the square root of x. +(You can also use the expression x^0.5 to compute this value.) + + + + +

+


math.tan (x)

+ + +

+Returns the tangent of x (assumed to be in radians). + + + + +

+


math.tanh (x)

+ + +

+Returns the hyperbolic tangent of x. + + + + + + + +

6.7 – Bitwise Operations

+ +

+This library provides bitwise operations. +It provides all its functions inside the table bit32. + + +

+Unless otherwise stated, +all functions accept numeric arguments in the range +(-251,+251); +each argument is normalized to +the remainder of its division by 232 +and truncated to an integer (in some unspecified way), +so that its final value falls in the range [0,232 - 1]. +Similarly, all results are in the range [0,232 - 1]. +Note that bit32.bnot(0) is 0xFFFFFFFF, +which is different from -1. + + +

+


bit32.arshift (x, disp)

+ + +

+Returns the number x shifted disp bits to the right. +The number disp may be any representable integer. +Negative displacements shift to the left. + + +

+This shift operation is what is called arithmetic shift. +Vacant bits on the left are filled +with copies of the higher bit of x; +vacant bits on the right are filled with zeros. +In particular, +displacements with absolute values higher than 31 +result in zero or 0xFFFFFFFF (all original bits are shifted out). + + + + +

+


bit32.band (···)

+ + +

+Returns the bitwise and of its operands. + + + + +

+


bit32.bnot (x)

+ + +

+Returns the bitwise negation of x. +For any integer x, +the following identity holds: + +

+     assert(bit32.bnot(x) == (-1 - x) % 2^32)
+
+ + + +

+


bit32.bor (···)

+ + +

+Returns the bitwise or of its operands. + + + + +

+


bit32.btest (···)

+ + +

+Returns a boolean signaling +whether the bitwise and of its operands is different from zero. + + + + +

+


bit32.bxor (···)

+ + +

+Returns the bitwise exclusive or of its operands. + + + + +

+


bit32.extract (n, field [, width])

+ + +

+Returns the unsigned number formed by the bits +field to field + width - 1 from n. +Bits are numbered from 0 (least significant) to 31 (most significant). +All accessed bits must be in the range [0, 31]. + + +

+The default for width is 1. + + + + +

+


bit32.replace (n, v, field [, width])

+ + +

+Returns a copy of n with +the bits field to field + width - 1 +replaced by the value v. +See bit32.extract for details about field and width. + + + + +

+


bit32.lrotate (x, disp)

+ + +

+Returns the number x rotated disp bits to the left. +The number disp may be any representable integer. + + +

+For any valid displacement, +the following identity holds: + +

+     assert(bit32.lrotate(x, disp) == bit32.lrotate(x, disp % 32))
+

+In particular, +negative displacements rotate to the right. + + + + +

+


bit32.lshift (x, disp)

+ + +

+Returns the number x shifted disp bits to the left. +The number disp may be any representable integer. +Negative displacements shift to the right. +In any direction, vacant bits are filled with zeros. +In particular, +displacements with absolute values higher than 31 +result in zero (all bits are shifted out). + + +

+For positive displacements, +the following equality holds: + +

+     assert(bit32.lshift(b, disp) == (b * 2^disp) % 2^32)
+
+ + + +

+


bit32.rrotate (x, disp)

+ + +

+Returns the number x rotated disp bits to the right. +The number disp may be any representable integer. + + +

+For any valid displacement, +the following identity holds: + +

+     assert(bit32.rrotate(x, disp) == bit32.rrotate(x, disp % 32))
+

+In particular, +negative displacements rotate to the left. + + + + +

+


bit32.rshift (x, disp)

+ + +

+Returns the number x shifted disp bits to the right. +The number disp may be any representable integer. +Negative displacements shift to the left. +In any direction, vacant bits are filled with zeros. +In particular, +displacements with absolute values higher than 31 +result in zero (all bits are shifted out). + + +

+For positive displacements, +the following equality holds: + +

+     assert(bit32.rshift(b, disp) == math.floor(b % 2^32 / 2^disp))
+
+ +

+This shift operation is what is called logical shift. + + + + + + + +

6.8 – Input and Output Facilities

+ +

+The I/O library provides two different styles for file manipulation. +The first one uses implicit file descriptors; +that is, there are operations to set a default input file and a +default output file, +and all input/output operations are over these default files. +The second style uses explicit file descriptors. + + +

+When using implicit file descriptors, +all operations are supplied by table io. +When using explicit file descriptors, +the operation io.open returns a file descriptor +and then all operations are supplied as methods of the file descriptor. + + +

+The table io also provides +three predefined file descriptors with their usual meanings from C: +io.stdin, io.stdout, and io.stderr. +The I/O library never closes these files. + + +

+Unless otherwise stated, +all I/O functions return nil on failure +(plus an error message as a second result and +a system-dependent error code as a third result) +and some value different from nil on success. +On non-Posix systems, +the computation of the error message and error code +in case of errors +may be not thread safe, +because they rely on the global C variable errno. + + +

+


io.close ([file])

+ + +

+Equivalent to file:close(). +Without a file, closes the default output file. + + + + +

+


io.flush ()

+ + +

+Equivalent to io.output():flush(). + + + + +

+


io.input ([file])

+ + +

+When called with a file name, it opens the named file (in text mode), +and sets its handle as the default input file. +When called with a file handle, +it simply sets this file handle as the default input file. +When called without parameters, +it returns the current default input file. + + +

+In case of errors this function raises the error, +instead of returning an error code. + + + + +

+


io.lines ([filename ···])

+ + +

+Opens the given file name in read mode +and returns an iterator function that +works like file:lines(···) over the opened file. +When the iterator function detects the end of file, +it returns nil (to finish the loop) and automatically closes the file. + + +

+The call io.lines() (with no file name) is equivalent +to io.input():lines(); +that is, it iterates over the lines of the default input file. +In this case it does not close the file when the loop ends. + + +

+In case of errors this function raises the error, +instead of returning an error code. + + + + +

+


io.open (filename [, mode])

+ + +

+This function opens a file, +in the mode specified in the string mode. +It returns a new file handle, +or, in case of errors, nil plus an error message. + + +

+The mode string can be any of the following: + +

    +
  • "r": read mode (the default);
  • +
  • "w": write mode;
  • +
  • "a": append mode;
  • +
  • "r+": update mode, all previous data is preserved;
  • +
  • "w+": update mode, all previous data is erased;
  • +
  • "a+": append update mode, previous data is preserved, + writing is only allowed at the end of file.
  • +

+The mode string can also have a 'b' at the end, +which is needed in some systems to open the file in binary mode. + + + + +

+


io.output ([file])

+ + +

+Similar to io.input, but operates over the default output file. + + + + +

+


io.popen (prog [, mode])

+ + +

+This function is system dependent and is not available +on all platforms. + + +

+Starts program prog in a separated process and returns +a file handle that you can use to read data from this program +(if mode is "r", the default) +or to write data to this program +(if mode is "w"). + + + + +

+


io.read (···)

+ + +

+Equivalent to io.input():read(···). + + + + +

+


io.tmpfile ()

+ + +

+Returns a handle for a temporary file. +This file is opened in update mode +and it is automatically removed when the program ends. + + + + +

+


io.type (obj)

+ + +

+Checks whether obj is a valid file handle. +Returns the string "file" if obj is an open file handle, +"closed file" if obj is a closed file handle, +or nil if obj is not a file handle. + + + + +

+


io.write (···)

+ + +

+Equivalent to io.output():write(···). + + + + +

+


file:close ()

+ + +

+Closes file. +Note that files are automatically closed when +their handles are garbage collected, +but that takes an unpredictable amount of time to happen. + + +

+When closing a file handle created with io.popen, +file:close returns the same values +returned by os.execute. + + + + +

+


file:flush ()

+ + +

+Saves any written data to file. + + + + +

+


file:lines (···)

+ + +

+Returns an iterator function that, +each time it is called, +reads the file according to the given formats. +When no format is given, +uses "*l" as a default. +As an example, the construction + +

+     for c in file:lines(1) do body end
+

+will iterate over all characters of the file, +starting at the current position. +Unlike io.lines, this function does not close the file +when the loop ends. + + +

+In case of errors this function raises the error, +instead of returning an error code. + + + + +

+


file:read (···)

+ + +

+Reads the file file, +according to the given formats, which specify what to read. +For each format, +the function returns a string (or a number) with the characters read, +or nil if it cannot read data with the specified format. +When called without formats, +it uses a default format that reads the next line +(see below). + + +

+The available formats are + +

    + +
  • "*n": +reads a number; +this is the only format that returns a number instead of a string. +
  • + +
  • "*a": +reads the whole file, starting at the current position. +On end of file, it returns the empty string. +
  • + +
  • "*l": +reads the next line skipping the end of line, +returning nil on end of file. +This is the default format. +
  • + +
  • "*L": +reads the next line keeping the end of line (if present), +returning nil on end of file. +
  • + +
  • number: +reads a string with up to this number of bytes, +returning nil on end of file. +If number is zero, +it reads nothing and returns an empty string, +or nil on end of file. +
  • + +
+ + + +

+


file:seek ([whence [, offset]])

+ + +

+Sets and gets the file position, +measured from the beginning of the file, +to the position given by offset plus a base +specified by the string whence, as follows: + +

    +
  • "set": base is position 0 (beginning of the file);
  • +
  • "cur": base is current position;
  • +
  • "end": base is end of file;
  • +

+In case of success, seek returns the final file position, +measured in bytes from the beginning of the file. +If seek fails, it returns nil, +plus a string describing the error. + + +

+The default value for whence is "cur", +and for offset is 0. +Therefore, the call file:seek() returns the current +file position, without changing it; +the call file:seek("set") sets the position to the +beginning of the file (and returns 0); +and the call file:seek("end") sets the position to the +end of the file, and returns its size. + + + + +

+


file:setvbuf (mode [, size])

+ + +

+Sets the buffering mode for an output file. +There are three available modes: + +

    + +
  • "no": +no buffering; the result of any output operation appears immediately. +
  • + +
  • "full": +full buffering; output operation is performed only +when the buffer is full or when +you explicitly flush the file (see io.flush). +
  • + +
  • "line": +line buffering; output is buffered until a newline is output +or there is any input from some special files +(such as a terminal device). +
  • + +

+For the last two cases, size +specifies the size of the buffer, in bytes. +The default is an appropriate size. + + + + +

+


file:write (···)

+ + +

+Writes the value of each of its arguments to file. +The arguments must be strings or numbers. + + +

+In case of success, this function returns file. +Otherwise it returns nil plus a string describing the error. + + + + + + + +

6.9 – Operating System Facilities

+ +

+This library is implemented through table os. + + +

+


os.clock ()

+ + +

+Returns an approximation of the amount in seconds of CPU time +used by the program. + + + + +

+


os.date ([format [, time]])

+ + +

+Returns a string or a table containing date and time, +formatted according to the given string format. + + +

+If the time argument is present, +this is the time to be formatted +(see the os.time function for a description of this value). +Otherwise, date formats the current time. + + +

+If format starts with '!', +then the date is formatted in Coordinated Universal Time. +After this optional character, +if format is the string "*t", +then date returns a table with the following fields: +year (four digits), month (1–12), day (1–31), +hour (0–23), min (0–59), sec (0–61), +wday (weekday, Sunday is 1), +yday (day of the year), +and isdst (daylight saving flag, a boolean). +This last field may be absent +if the information is not available. + + +

+If format is not "*t", +then date returns the date as a string, +formatted according to the same rules as the ISO C function strftime. + + +

+When called without arguments, +date returns a reasonable date and time representation that depends on +the host system and on the current locale +(that is, os.date() is equivalent to os.date("%c")). + + +

+On non-Posix systems, +this function may be not thread safe +because of its reliance on C function gmtime and C function localtime. + + + + +

+


os.difftime (t2, t1)

+ + +

+Returns the number of seconds from time t1 to time t2. +In POSIX, Windows, and some other systems, +this value is exactly t2-t1. + + + + +

+


os.execute ([command])

+ + +

+This function is equivalent to the ISO C function system. +It passes command to be executed by an operating system shell. +Its first result is true +if the command terminated successfully, +or nil otherwise. +After this first result +the function returns a string and a number, +as follows: + +

    + +
  • "exit": +the command terminated normally; +the following number is the exit status of the command. +
  • + +
  • "signal": +the command was terminated by a signal; +the following number is the signal that terminated the command. +
  • + +
+ +

+When called without a command, +os.execute returns a boolean that is true if a shell is available. + + + + +

+


os.exit ([code [, close])

+ + +

+Calls the ISO C function exit to terminate the host program. +If code is true, +the returned status is EXIT_SUCCESS; +if code is false, +the returned status is EXIT_FAILURE; +if code is a number, +the returned status is this number. +The default value for code is true. + + +

+If the optional second argument close is true, +closes the Lua state before exiting. + + + + +

+


os.getenv (varname)

+ + +

+Returns the value of the process environment variable varname, +or nil if the variable is not defined. + + + + +

+


os.remove (filename)

+ + +

+Deletes the file (or empty directory, on POSIX systems) +with the given name. +If this function fails, it returns nil, +plus a string describing the error and the error code. + + + + +

+


os.rename (oldname, newname)

+ + +

+Renames file or directory named oldname to newname. +If this function fails, it returns nil, +plus a string describing the error and the error code. + + + + +

+


os.setlocale (locale [, category])

+ + +

+Sets the current locale of the program. +locale is a system-dependent string specifying a locale; +category is an optional string describing which category to change: +"all", "collate", "ctype", +"monetary", "numeric", or "time"; +the default category is "all". +The function returns the name of the new locale, +or nil if the request cannot be honored. + + +

+If locale is the empty string, +the current locale is set to an implementation-defined native locale. +If locale is the string "C", +the current locale is set to the standard C locale. + + +

+When called with nil as the first argument, +this function only returns the name of the current locale +for the given category. + + +

+This function may be not thread safe +because of its reliance on C function setlocale. + + + + +

+


os.time ([table])

+ + +

+Returns the current time when called without arguments, +or a time representing the date and time specified by the given table. +This table must have fields year, month, and day, +and may have fields +hour (default is 12), +min (default is 0), +sec (default is 0), +and isdst (default is nil). +For a description of these fields, see the os.date function. + + +

+The returned value is a number, whose meaning depends on your system. +In POSIX, Windows, and some other systems, +this number counts the number +of seconds since some given start time (the "epoch"). +In other systems, the meaning is not specified, +and the number returned by time can be used only as an argument to +os.date and os.difftime. + + + + +

+


os.tmpname ()

+ + +

+Returns a string with a file name that can +be used for a temporary file. +The file must be explicitly opened before its use +and explicitly removed when no longer needed. + + +

+On POSIX systems, +this function also creates a file with that name, +to avoid security risks. +(Someone else might create the file with wrong permissions +in the time between getting the name and creating the file.) +You still have to open the file to use it +and to remove it (even if you do not use it). + + +

+When possible, +you may prefer to use io.tmpfile, +which automatically removes the file when the program ends. + + + + + + + +

6.10 – The Debug Library

+ +

+This library provides +the functionality of the debug interface (§4.9) to Lua programs. +You should exert care when using this library. +Several of its functions +violate basic assumptions about Lua code +(e.g., that variables local to a function +cannot be accessed from outside; +that userdata metatables cannot be changed by Lua code; +that Lua programs do not crash) +and therefore can compromise otherwise secure code. +Moreover, some functions in this library may be slow. + + +

+All functions in this library are provided +inside the debug table. +All functions that operate over a thread +have an optional first argument which is the +thread to operate over. +The default is always the current thread. + + +

+


debug.debug ()

+ + +

+Enters an interactive mode with the user, +running each string that the user enters. +Using simple commands and other debug facilities, +the user can inspect global and local variables, +change their values, evaluate expressions, and so on. +A line containing only the word cont finishes this function, +so that the caller continues its execution. + + +

+Note that commands for debug.debug are not lexically nested +within any function and so have no direct access to local variables. + + + + +

+


debug.gethook ([thread])

+ + +

+Returns the current hook settings of the thread, as three values: +the current hook function, the current hook mask, +and the current hook count +(as set by the debug.sethook function). + + + + +

+


debug.getinfo ([thread,] f [, what])

+ + +

+Returns a table with information about a function. +You can give the function directly +or you can give a number as the value of f, +which means the function running at level f of the call stack +of the given thread: +level 0 is the current function (getinfo itself); +level 1 is the function that called getinfo +(except for tail calls, which do not count on the stack); +and so on. +If f is a number larger than the number of active functions, +then getinfo returns nil. + + +

+The returned table can contain all the fields returned by lua_getinfo, +with the string what describing which fields to fill in. +The default for what is to get all information available, +except the table of valid lines. +If present, +the option 'f' +adds a field named func with the function itself. +If present, +the option 'L' +adds a field named activelines with the table of +valid lines. + + +

+For instance, the expression debug.getinfo(1,"n").name returns +a table with a name for the current function, +if a reasonable name can be found, +and the expression debug.getinfo(print) +returns a table with all available information +about the print function. + + + + +

+


debug.getlocal ([thread,] f, local)

+ + +

+This function returns the name and the value of the local variable +with index local of the function at level f of the stack. +This function accesses not only explicit local variables, +but also parameters, temporaries, etc. + + +

+The first parameter or local variable has index 1, and so on, +until the last active variable. +Negative indices refer to vararg parameters; +-1 is the first vararg parameter. +The function returns nil if there is no variable with the given index, +and raises an error when called with a level out of range. +(You can call debug.getinfo to check whether the level is valid.) + + +

+Variable names starting with '(' (open parenthesis) +represent internal variables +(loop control variables, temporaries, varargs, and C function locals). + + +

+The parameter f may also be a function. +In that case, getlocal returns only the name of function parameters. + + + + +

+


debug.getmetatable (value)

+ + +

+Returns the metatable of the given value +or nil if it does not have a metatable. + + + + +

+


debug.getregistry ()

+ + +

+Returns the registry table (see §4.5). + + + + +

+


debug.getupvalue (f, up)

+ + +

+This function returns the name and the value of the upvalue +with index up of the function f. +The function returns nil if there is no upvalue with the given index. + + + + +

+


debug.getuservalue (u)

+ + +

+Returns the Lua value associated to u. +If u is not a userdata, +returns nil. + + + + +

+


debug.sethook ([thread,] hook, mask [, count])

+ + +

+Sets the given function as a hook. +The string mask and the number count describe +when the hook will be called. +The string mask may have any combination of the following characters, +with the given meaning: + +

    +
  • 'c': the hook is called every time Lua calls a function;
  • +
  • 'r': the hook is called every time Lua returns from a function;
  • +
  • 'l': the hook is called every time Lua enters a new line of code.
  • +

+Moreover, +with a count different from zero, +the hook is called also after every count instructions. + + +

+When called without arguments, +debug.sethook turns off the hook. + + +

+When the hook is called, its first parameter is a string +describing the event that has triggered its call: +"call" (or "tail call"), +"return", +"line", and "count". +For line events, +the hook also gets the new line number as its second parameter. +Inside a hook, +you can call getinfo with level 2 to get more information about +the running function +(level 0 is the getinfo function, +and level 1 is the hook function). + + + + +

+


debug.setlocal ([thread,] level, local, value)

+ + +

+This function assigns the value value to the local variable +with index local of the function at level level of the stack. +The function returns nil if there is no local +variable with the given index, +and raises an error when called with a level out of range. +(You can call getinfo to check whether the level is valid.) +Otherwise, it returns the name of the local variable. + + +

+See debug.getlocal for more information about +variable indices and names. + + + + +

+


debug.setmetatable (value, table)

+ + +

+Sets the metatable for the given value to the given table +(which can be nil). +Returns value. + + + + +

+


debug.setupvalue (f, up, value)

+ + +

+This function assigns the value value to the upvalue +with index up of the function f. +The function returns nil if there is no upvalue +with the given index. +Otherwise, it returns the name of the upvalue. + + + + +

+


debug.setuservalue (udata, value)

+ + +

+Sets the given value as +the Lua value associated to the given udata. +value must be a table or nil; +udata must be a full userdata. + + +

+Returns udata. + + + + +

+


debug.traceback ([thread,] [message [, level]])

+ + +

+If message is present but is neither a string nor nil, +this function returns message without further processing. +Otherwise, +it returns a string with a traceback of the call stack. +An optional message string is appended +at the beginning of the traceback. +An optional level number tells at which level +to start the traceback +(default is 1, the function calling traceback). + + + + +

+


debug.upvalueid (f, n)

+ + +

+Returns an unique identifier (as a light userdata) +for the upvalue numbered n +from the given function. + + +

+These unique identifiers allow a program to check whether different +closures share upvalues. +Lua closures that share an upvalue +(that is, that access a same external local variable) +will return identical ids for those upvalue indices. + + + + +

+


debug.upvaluejoin (f1, n1, f2, n2)

+ + +

+Make the n1-th upvalue of the Lua closure f1 +refer to the n2-th upvalue of the Lua closure f2. + + + + + + + +

7 – Lua Standalone

+ +

+Although Lua has been designed as an extension language, +to be embedded in a host C program, +it is also frequently used as a standalone language. +An interpreter for Lua as a standalone language, +called simply lua, +is provided with the standard distribution. +The standalone interpreter includes +all standard libraries, including the debug library. +Its usage is: + +

+     lua [options] [script [args]]
+

+The options are: + +

    +
  • -e stat: executes string stat;
  • +
  • -l mod: "requires" mod;
  • +
  • -i: enters interactive mode after running script;
  • +
  • -v: prints version information;
  • +
  • -E: ignores environment variables;
  • +
  • --: stops handling options;
  • +
  • -: executes stdin as a file and stops handling options.
  • +

+After handling its options, lua runs the given script, +passing to it the given args as string arguments. +When called without arguments, +lua behaves as lua -v -i +when the standard input (stdin) is a terminal, +and as lua - otherwise. + + +

+When called without option -E, +the interpreter checks for an environment variable LUA_INIT_5_2 +(or LUA_INIT if it is not defined) +before running any argument. +If the variable content has the format @filename, +then lua executes the file. +Otherwise, lua executes the string itself. + + +

+When called with option -E, +besides ignoring LUA_INIT, +Lua also ignores +the values of LUA_PATH and LUA_CPATH, +setting the values of +package.path and package.cpath +with the default paths defined in luaconf.h. + + +

+All options are handled in order, except -i and -E. +For instance, an invocation like + +

+     $ lua -e'a=1' -e 'print(a)' script.lua
+

+will first set a to 1, then print the value of a, +and finally run the file script.lua with no arguments. +(Here $ is the shell prompt. Your prompt may be different.) + + +

+Before starting to run the script, +lua collects all arguments in the command line +in a global table called arg. +The script name is stored at index 0, +the first argument after the script name goes to index 1, +and so on. +Any arguments before the script name +(that is, the interpreter name plus the options) +go to negative indices. +For instance, in the call + +

+     $ lua -la b.lua t1 t2
+

+the interpreter first runs the file a.lua, +then creates a table + +

+     arg = { [-2] = "lua", [-1] = "-la",
+             [0] = "b.lua",
+             [1] = "t1", [2] = "t2" }
+

+and finally runs the file b.lua. +The script is called with arg[1], arg[2], ... +as arguments; +it can also access these arguments with the vararg expression '...'. + + +

+In interactive mode, +if you write an incomplete statement, +the interpreter waits for its completion +by issuing a different prompt. + + +

+In case of unprotected errors in the script, +the interpreter reports the error to the standard error stream. +If the error object is a string, +the interpreter adds a stack traceback to it. +Otherwise, if the error object has a metamethod __tostring, +the interpreter calls this metamethod to produce the final message. +Finally, if the error object is nil, +the interpreter does not report the error. + + +

+When finishing normally, +the interpreter closes its main Lua state +(see lua_close). +The script can avoid this step by +calling os.exit to terminate. + + +

+To allow the use of Lua as a +script interpreter in Unix systems, +the standalone interpreter skips +the first line of a chunk if it starts with #. +Therefore, Lua scripts can be made into executable programs +by using chmod +x and the #! form, +as in + +

+     #!/usr/local/bin/lua
+

+(Of course, +the location of the Lua interpreter may be different in your machine. +If lua is in your PATH, +then + +

+     #!/usr/bin/env lua
+

+is a more portable solution.) + + + +

8 – Incompatibilities with the Previous Version

+ +

+Here we list the incompatibilities that you may find when moving a program +from Lua 5.1 to Lua 5.2. +You can avoid some incompatibilities by compiling Lua with +appropriate options (see file luaconf.h). +However, +all these compatibility options will be removed in the next version of Lua. +Similarly, +all features marked as deprecated in Lua 5.1 +have been removed in Lua 5.2. + + + +

8.1 – Changes in the Language

+
    + +
  • +The concept of environment changed. +Only Lua functions have environments. +To set the environment of a Lua function, +use the variable _ENV or the function load. + + +

    +C functions no longer have environments. +Use an upvalue with a shared table if you need to keep +shared state among several C functions. +(You may use luaL_setfuncs to open a C library +with all functions sharing a common upvalue.) + + +

    +To manipulate the "environment" of a userdata +(which is now called user value), +use the new functions +lua_getuservalue and lua_setuservalue. +

  • + +
  • +Lua identifiers cannot use locale-dependent letters. +
  • + +
  • +Doing a step or a full collection in the garbage collector +does not restart the collector if it has been stopped. +
  • + +
  • +Weak tables with weak keys now perform like ephemeron tables. +
  • + +
  • +The event tail return in debug hooks was removed. +Instead, tail calls generate a special new event, +tail call, so that the debugger can know that +there will not be a corresponding return event. +
  • + +
  • +Equality between function values has changed. +Now, a function definition may not create a new value; +it may reuse some previous value if there is no +observable difference to the new function. +
  • + +
+ + + + +

8.2 – Changes in the Libraries

+
    + +
  • +Function module is deprecated. +It is easy to set up a module with regular Lua code. +Modules are not expected to set global variables. +
  • + +
  • +Functions setfenv and getfenv were removed, +because of the changes in environments. +
  • + +
  • +Function math.log10 is deprecated. +Use math.log with 10 as its second argument, instead. +
  • + +
  • +Function loadstring is deprecated. +Use load instead; it now accepts string arguments +and are exactly equivalent to loadstring. +
  • + +
  • +Function table.maxn is deprecated. +Write it in Lua if you really need it. +
  • + +
  • +Function os.execute now returns true when command +terminates successfully and nil plus error information +otherwise. +
  • + +
  • +Function unpack was moved into the table library +and therefore must be called as table.unpack. +
  • + +
  • +Character class %z in patterns is deprecated, +as now patterns may contain '\0' as a regular character. +
  • + +
  • +The table package.loaders was renamed package.searchers. +
  • + +
  • +Lua does not have bytecode verification anymore. +So, all functions that load code +(load and loadfile) +are potentially insecure when loading untrusted binary data. +(Actually, those functions were already insecure because +of flaws in the verification algorithm.) +When in doubt, +use the mode argument of those functions +to restrict them to loading textual chunks. +
  • + +
  • +The standard paths in the official distribution may +change between versions. +
  • + +
+ + + + +

8.3 – Changes in the API

+
    + +
  • +Pseudoindex LUA_GLOBALSINDEX was removed. +You must get the global environment from the registry +(see §4.5). +
  • + +
  • +Pseudoindex LUA_ENVIRONINDEX +and functions lua_getfenv/lua_setfenv +were removed, +as C functions no longer have environments. +
  • + +
  • +Function luaL_register is deprecated. +Use luaL_setfuncs so that your module does not create globals. +(Modules are not expected to set global variables anymore.) +
  • + +
  • +The osize argument to the allocation function +may not be zero when creating a new block, +that is, when ptr is NULL +(see lua_Alloc). +Use only the test ptr == NULL to check whether +the block is new. +
  • + +
  • +Finalizers (__gc metamethods) for userdata are called in the +reverse order that they were marked for finalization, +not that they were created (see §2.5.1). +(Most userdata are marked immediately after they are created.) +Moreover, +if the metatable does not have a __gc field when set, +the finalizer will not be called, +even if it is set later. +
  • + +
  • +luaL_typerror was removed. +Write your own version if you need it. +
  • + +
  • +Function lua_cpcall is deprecated. +You can simply push the function with lua_pushcfunction +and call it with lua_pcall. +
  • + +
  • +Functions lua_equal and lua_lessthan are deprecated. +Use the new lua_compare with appropriate options instead. +
  • + +
  • +Function lua_objlen was renamed lua_rawlen. +
  • + +
  • +Function lua_load has an extra parameter, mode. +Pass NULL to simulate the old behavior. +
  • + +
  • +Function lua_resume has an extra parameter, from. +Pass NULL or the thread doing the call. +
  • + +
+ + + + +

9 – The Complete Syntax of Lua

+ +

+Here is the complete syntax of Lua in extended BNF. +(It does not describe operator precedences.) + + + + +

+
+	chunk ::= block
+
+	block ::= {stat} [retstat]
+
+	stat ::=  ‘;’ | 
+		 varlist ‘=’ explist | 
+		 functioncall | 
+		 label | 
+		 break | 
+		 goto Name | 
+		 do block end | 
+		 while exp do block end | 
+		 repeat block until exp | 
+		 if exp then block {elseif exp then block} [else block] end | 
+		 for Name ‘=’ exp ‘,’ exp [‘,’ exp] do block end | 
+		 for namelist in explist do block end | 
+		 function funcname funcbody | 
+		 local function Name funcbody | 
+		 local namelist [‘=’ explist] 
+
+	retstat ::= return [explist] [‘;’]
+
+	label ::= ‘::’ Name ‘::’
+
+	funcname ::= Name {‘.’ Name} [‘:’ Name]
+
+	varlist ::= var {‘,’ var}
+
+	var ::=  Name | prefixexp ‘[’ exp ‘]’ | prefixexp ‘.’ Name 
+
+	namelist ::= Name {‘,’ Name}
+
+	explist ::= exp {‘,’ exp}
+
+	exp ::=  nil | false | true | Number | String | ‘...’ | functiondef | 
+		 prefixexp | tableconstructor | exp binop exp | unop exp 
+
+	prefixexp ::= var | functioncall | ‘(’ exp ‘)’
+
+	functioncall ::=  prefixexp args | prefixexp ‘:’ Name args 
+
+	args ::=  ‘(’ [explist] ‘)’ | tableconstructor | String 
+
+	functiondef ::= function funcbody
+
+	funcbody ::= ‘(’ [parlist] ‘)’ block end
+
+	parlist ::= namelist [‘,’ ‘...’] | ‘...’
+
+	tableconstructor ::= ‘{’ [fieldlist] ‘}’
+
+	fieldlist ::= field {fieldsep field} [fieldsep]
+
+	field ::= ‘[’ exp ‘]’ ‘=’ exp | Name ‘=’ exp | exp
+
+	fieldsep ::= ‘,’ | ‘;’
+
+	binop ::= ‘+’ | ‘-’ | ‘*’ | ‘/’ | ‘^’ | ‘%’ | ‘..’ | 
+		 ‘<’ | ‘<=’ | ‘>’ | ‘>=’ | ‘==’ | ‘~=’ | 
+		 and | or
+
+	unop ::= ‘-’ | not | ‘#’
+
+
+ +

+ + + + + + + +


+ +Last update: +Mon Feb 23 22:24:44 BRT 2015 + + + + + diff --git a/lua-5.2.4/doc/osi-certified-72x60.png b/lua-5.2.4/doc/osi-certified-72x60.png new file mode 100644 index 0000000000000000000000000000000000000000..07df5f6ee7a7a8b2108025dcd815f73f145a83af GIT binary patch literal 3774 zcmV;v4ngsWP)$kl5 zqcT7g&?zu8?ezWYz4zUB-|zR9d+&Qy2xAN{qY(ew0A7^*gV^7jytKqPFV3{hZfovn zs%x!l>(m&Gdb8C+5XeR7>h0kj=o=X3A39;2KLYfEMt>p1YMW~dt`rpAC{lN~P>5pq zH1L4nAdCT17}*hN=LnEsvMl=5Ij^QArAa&_V~zoht-Ei~)E~(Ivhe0#jik{t$isEK znCH$TxCB8EKmcF>3@pRaHpbR%Gqm*dsZA4H{j(NjZFp^iNFW+RBx6R*X19J*`0XG5 z^Y>cR=^Hi9#ovYGlbFSr#Q*^PgCGC^gb*SC5TcBfzQLe-r2m!Quik&_g9XzTj0qSR zD`FkG_RYWDa^+#UUxL&t+!K+&(ion@Fd`5l5p7{Qsva9vegC|4^NzJUMvn)^gqWsF zvu^j=%FfCVg^cgbXDRl1DE$lsfe;BjjmFmRHER~E-MeWoNsyyNHCpG%Y}igd_(Md;&9La8_B075NDRX9gTD zIHY`}9E~aGi9Kk1@P~rmPna=*=gz~UTdTpsQmjX)J23%v9NliQS)8`xJh6Qz_nE~e z&tP|!dcJdo;JMNa3>afSx$lko8>fp-I}OiCVz(dOF1u6e8$IrsSP?=5mp~lkaFqm? zAUMxRq%ecIu3WE)Uf=%p8g z+RSY?G=VO%wAfdICj?Uzb+5jr{8m|)i#{M}JjaDIoXf#1=DYLwX;1EW&sijPvm6EkBGuOx6r~lKv`g`yH?)|&PRUr$5Ibw2HBM7C74XvE@gaPjN+@;j$J)AgYhnT-U5m+wj|Wz8K630AfO8PUoGD^^Mcq zY9C<~%wUm^u%ox5P21)KNN0$(v^OI$A~?iwsS_fRu1+`EH|CRdpA4zsk8Z#|?x@^vVEAL+2JxH%&^{JUU%B=?EU7`Ar*Q|JvqPofcBt765(*f5JI$>=3{<%K)4ei zogo$)5XP}_X$y^pIYyWTt}EAnhTq}u4sAdBvC(WC{I#x4^>$vCvQ0UDs^18sAQG9o zEaP0qjrSSv1W0FyO%9&y$@em~n@8}}EXBG6x%ew49J_q%l@As_XnNpi|MTTPr~ca_ zW%uon6dBKL*pvzYFvf<~p6K8hK9BDNNN0$7xp^hWC3n^7FoQ?P(=m(6!Pj&S2f1fqH=`(w)KcPl5aEi2}~4hF*f*g}vaS-=c7v>N8c z{yNM*%+azq=@prWtgpi~^3?^AsJqS(>=pb=6PrGH#=O{Hcho$_F#MtsK$$3e2fZvg zy}!-V%`+uFMOW87LIgu3vKuMgqwY0}*Sd;aokQp(F#-{}Ss(Iy1iekY1ZQX?1WEL? z7=zq`lH-#Hw=bHRio3yPun%`c5rI1Hb|wTSWTs|12Mg#QkkwTmy zAYul0H*_b(BnkP#!R_&p@d54uz0JKthGv3C^fdKS%~alookE`QX@%#MQN2=SFWrOha7Ij7ImStNaWsy~? zsylUeT02_-z-G4s0L!v=+Wx|cxr$tmY&$a1by8z#6HBp!*9{@mU9XQ0h@L%V_R}4g z&s#2{MCOj4`5ux-SUautC5@{U895o-biKMWWoQ09{|jx8wz}@_(ep%Yk4{90C#s6-sa}fU5{}m>#>VtE_b#5bn8O+3k{&6GoEkB;yGie;A_5Uy zqPN*tU()pE+_&~``5XX({el-xT_}%`%fsc>_0@m5{+FhXru>rpyLESe31R>cK^FFrCm+#WL$-D{Z3*9>Lg{wi}xEYn_`@Hy`-d z1N}kIY%@Eu&Bpe|Rr6N;%Yk>6&RI$lgpIO26BYT%C!dU-o4bqqQpGY?p6lPru6Hzc z@WuSDI^BYaDH*>R)~)$V1J0Edn4r(9vo>E<2XjOJr2*G124;t^U+p{iUnZN5oapCpCk(F}}<#3ZZli!Nk z^UWT;Q9qm-i`i$kJS}5P%puBJ<&krTO;*#$Y7d$o96EbQ{aF1XFpTj}wf}eI|IOba z%w}_CWu?JjkV>U-ad9L$@Mu$CU;pUQBZgt5QmI@n=W@9K(A(SF-rnxzy|_!5ekKqCQTad`sa|&&Q6jfy}iAEst?|mH*emIjg9SB zRVWlHl?r3bvh2qnf6V6(+>4TulB%kzFveeh{k1?K*t&J=m>dk9P8SjqQdn4sF;*&- z(b3VFnVH$y*$Rb%rs zefJ#z#KpyZ_0?C$jvY%)O?7a?7#}%u1OT>d*)keF*REZ=c=4j6tkr5MilS*cB_$;< zFArmEv)Oby-7}4>TD9uE_ulKT4s6Bp@^Y0*rBEo&o;?cy8#Zi^%jH+DTv4f1SFc_L zfc5LwXJ=;vKt@K!?%liR&!6Almmq$2R@G|tg$oyGnpP+jQBhF<(9qCOR8%AuiBtJCSc zyu1LQw6wIQre^Zw$^E0N)#}R1%J}$rkw`Qc#z0A{)dIkjDN`I(PfyS2=x9f~R4N64 zPe1*1=gytQ#l=RWao4V0bLY-=?Bpl*dQDA@LZMJ9l{Gar$;rvzfB$`Tb#+==T0=ua zSy@?1N{UXWyL9Q&#*G`Zv$GE#JXljxBauj2T3VD!rO9N<%F3#*uP-Sn(P%W=w{Jgx z{(NC!VNOmC0OaN6ZQHg@tJQw^;fGtdZUulVSFX&NGv~~iGoO9-nNq0~2n78w23E{L zmth7T3|W>10ISuSm6cUgRCMXmr5!tV0D!x@`?6)rcI?<8lgZ#IIehqVOiYYpi@x#3 z8xau^+1c4ER;th&( zVHk--A`l3|!os9dsYatANm8TH96x@%qM{-&FmUtc&2qVX-MV%A_U(J~%{TY#*<&ym zX3Ur|c$No?u%e>k#EBDaZEY7XUVLH`0zh|n zw_~XRz;RH!y1MS)zn_X$Km70mNs@ZKo~G$z$BuD09F}FpVzEY}F&d2ug#rLPJUpgPpKh}a^y$-i zJl@%}XHT6vRaaNHckf=MQYn>6Fk&*D<+ja0B z5C{a#&CQN-V`HPyXe3EeAP~gH#>U3RayT5ZSd1}tbaaSNDAZ^)j%n&QHMoE=7KubA zlWEeVNpiV7Dk=&gzM|0Dz(>0HA5Q-_F}_znz(xxqbU~E|+`a#EH|V zPjA|^DJLg~rs?+f_6rv-T)upnAP7fChoq;cFJHcV=gyt)zWXjs(+gZ<%kMDTlOd1+TFW%&z(D`)oKF*0@Bmd zLqkIy?RvewprGK+ojWv5%Ve?@D^>&r1p$CcrMhuv}x1&joiO~|IC>)G) + + +Lua 5.2 readme + + + + + + + +
+

+Lua +Welcome to Lua 5.2 +

+ +

+about +· +installation +· +changes +· +license +· +reference manual + +

About Lua

+ +

+Lua is a powerful, fast, lightweight, embeddable scripting language +developed by a +team +at +PUC-Rio, +the Pontifical Catholic University of Rio de Janeiro in Brazil. +Lua is +free software +used in many products and projects around the world. + +

+Lua's +official web site +provides complete information +about Lua, +including +an +executive summary +and +updated +documentation, +especially the +reference manual, +which may differ slightly from the +local copy +distributed in this package. + +

Installing Lua

+ +

+Lua is distributed in +source +form. +You need to build it before using it. +Building Lua should be straightforward +because +Lua is implemented in pure ANSI C and compiles unmodified in all known +platforms that have an ANSI C compiler. +Lua also compiles unmodified as C++. +The instructions given below for building Lua are for Unix-like platforms. +See also +instructions for other systems +and +customization options. + +

+If you don't have the time or the inclination to compile Lua yourself, +get a binary from +LuaBinaries. +Try also +LuaDist, +a multi-platform distribution of Lua that includes batteries. + +

Building Lua

+ +

+In most Unix-like platforms, simply do "make" with a suitable target. +Here are the details. + +

    +
  1. +Open a terminal window and move to +the top-level directory, which is named lua-5.2.x. +The Makefile there controls both the build process and the installation process. +

    +

  2. + Do "make" and see if your platform is listed. + The platforms currently supported are: +

    +

    + aix ansi bsd freebsd generic linux macosx mingw posix solaris +

    +

    + If your platform is listed, just do "make xxx", where xxx + is your platform name. +

    + If your platform is not listed, try the closest one or posix, generic, + ansi, in this order. +

    +

  3. +The compilation takes only a few moments +and produces three files in the src directory: +lua (the interpreter), +luac (the compiler), +and liblua.a (the library). +

    +

  4. + To check that Lua has been built correctly, do "make test" + after building Lua. This will run the interpreter and print its version. +
+

+If you're running Linux and get compilation errors, +make sure you have installed the readline development package +(which is probably named libreadline-dev or readline-devel). +If you get link errors after that, +then try "make linux MYLIBS=-ltermcap". + +

Installing Lua

+

+ Once you have built Lua, you may want to install it in an official + place in your system. In this case, do "make install". The official + place and the way to install files are defined in the Makefile. You'll + probably need the right permissions to install files. + +

+ To build and install Lua in one step, do "make xxx install", + where xxx is your platform name. + +

+ To install Lua locally, do "make local". + This will create a directory install with subdirectories + bin, include, lib, man, share, + and install Lua as listed below. + + To install Lua locally, but in some other directory, do + "make install INSTALL_TOP=xxx", where xxx is your chosen directory. + The installation starts in the src and doc directories, + so take care if INSTALL_TOP is not an absolute path. + +

+
+ bin: +
+ lua luac +
+ include: +
+ lua.h luaconf.h lualib.h lauxlib.h lua.hpp +
+ lib: +
+ liblua.a +
+ man/man1: +
+ lua.1 luac.1 +
+ +

+ These are the only directories you need for development. + If you only want to run Lua programs, + you only need the files in bin and man. + The files in include and lib are needed for + embedding Lua in C or C++ programs. + +

Customization

+

+ Three kinds of things can be customized by editing a file: +

    +
  • Where and how to install Lua — edit Makefile. +
  • How to build Lua — edit src/Makefile. +
  • Lua features — edit src/luaconf.h. +
+ +

+ You don't actually need to edit the Makefiles because you may set the + relevant variables in the command line when invoking make. + Nevertheless, it's probably best to edit and save the Makefiles to + record the changes you've made. + +

+ On the other hand, if you need to customize some Lua features, you'll need + to edit src/luaconf.h before building and installing Lua. + The edited file will be the one installed, and + it will be used by any Lua clients that you build, to ensure consistency. + Further customization is available to experts by editing the Lua sources. + +

+ We strongly recommend that you enable dynamic loading in src/luaconf.h. + This is done automatically for all platforms listed above that have + this feature and also for Windows. + +

Building Lua on other systems

+ +

+ If you're not using the usual Unix tools, then the instructions for + building Lua depend on the compiler you use. You'll need to create + projects (or whatever your compiler uses) for building the library, + the interpreter, and the compiler, as follows: + +

+
+library: +
+lapi.c lcode.c lctype.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c +lmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c ltable.c +ltm.c lundump.c lvm.c lzio.c +lauxlib.c lbaselib.c lbitlib.c lcorolib.c ldblib.c liolib.c +lmathlib.c loslib.c lstrlib.c ltablib.c loadlib.c linit.c +
+interpreter: +
+ library, lua.c +
+compiler: +
+ library, luac.c +
+ +

+ To use Lua as a library in your own programs you'll need to know how to + create and use libraries with your compiler. Moreover, to dynamically load + C libraries for Lua you'll need to know how to create dynamic libraries + and you'll need to make sure that the Lua API functions are accessible to + those dynamic libraries — but don't link the Lua library + into each dynamic library. For Unix, we recommend that the Lua library + be linked statically into the host program and its symbols exported for + dynamic linking; src/Makefile does this for the Lua interpreter. + For Windows, we recommend that the Lua library be a DLL. + In all cases, the compiler luac should be linked statically. + +

+ As mentioned above, you may edit src/luaconf.h to customize + some features before building Lua. + +

Changes since Lua 5.1

+ +

+Here are the main changes introduced in Lua 5.2. +The +reference manual +lists the +incompatibilities that had to be introduced. + +

Main changes

+
    +
  • yieldable pcall and metamethods +
  • new lexical scheme for globals +
  • ephemeron tables +
  • new library for bitwise operations +
  • light C functions +
  • emergency garbage collector +
  • goto statement +
  • finalizers for tables +
+ +Here are the other changes introduced in Lua 5.2: +

Language

+
    +
  • no more fenv for threads or functions +
  • tables honor the __len metamethod +
  • hex and \z escapes in strings +
  • support for hexadecimal floats +
  • order metamethods work for different types +
  • no more verification of opcode consistency +
  • hook event "tail return" replaced by "tail call" +
  • empty statement +
  • break statement may appear in the middle of a block +
+ +

Libraries

+
    +
  • arguments for function called through xpcall +
  • optional 'mode' argument to load and loadfile (to control binary x text) +
  • optional 'env' argument to load and loadfile (environment for loaded chunk) +
  • loadlib may load libraries with global names (RTLD_GLOBAL) +
  • new function package.searchpath +
  • modules receive their paths when loaded +
  • optional base in math.log +
  • optional separator in string.rep +
  • file:write returns file +
  • closing a pipe returns exit status +
  • os.exit may close state +
  • new metamethods __pairs and __ipairs +
  • new option 'isrunning' for collectgarbage and lua_gc +
  • frontier patterns +
  • \0 in patterns +
  • new option *L for io.read +
  • options for io.lines +
  • debug.getlocal can access function varargs +
+ +

C API

+
    +
  • main thread predefined in the registry +
  • new functions +lua_absindex, +lua_arith, +lua_compare, +lua_copy, +lua_len, +lua_rawgetp, +lua_rawsetp, +lua_upvalueid, +lua_upvaluejoin, +lua_version. +
  • new functions +luaL_checkversion, +luaL_setmetatable, +luaL_testudata, +luaL_tolstring. +
  • lua_pushstring and pushlstring return string +
  • nparams and isvararg available in debug API +
  • new lua_Unsigned +
+ +

Implementation

+
    +
  • max constants per function raised to 226 +
  • generational mode for garbage collection (experimental) +
  • NaN trick (experimental) +
  • internal (immutable) version of ctypes +
  • simpler implementation for string buffers +
  • parser uses much less C-stack space (no more auto arrays) +
+ +

Lua standalone interpreter

+
    +
  • new -E option to avoid environment variables +
  • handling of non-string error messages +
+ +

License

+ +[osi certified] + + +

+Lua is free software distributed under the terms of the +MIT license +reproduced below; +it may be used for any purpose, including commercial purposes, +at absolutely no cost without having to ask us. + +The only requirement is that if you do use Lua, +then you should give us credit by including the appropriate copyright notice somewhere in your product or its documentation. + +For details, see +this. + +

+Copyright © 1994–2015 Lua.org, PUC-Rio. + +

+Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +

+The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +

+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +

+

+ +


+ +Last update: +Mon Feb 23 22:25:08 BRT 2015 + + + + + diff --git a/lua-5.2.4/lib/README b/lua-5.2.4/lib/README new file mode 100644 index 000000000..f5d2b6a1a --- /dev/null +++ b/lua-5.2.4/lib/README @@ -0,0 +1,3 @@ +This directory will contain the compiled lua libraries. +It should not contain any files in the repository except this README. + diff --git a/lua-5.2.4/src/Makefile b/lua-5.2.4/src/Makefile new file mode 100644 index 000000000..8bbe735dc --- /dev/null +++ b/lua-5.2.4/src/Makefile @@ -0,0 +1,187 @@ +# Makefile for building Lua +# See ../doc/readme.html for installation and customization instructions. + +# == CHANGE THE SETTINGS BELOW TO SUIT YOUR ENVIRONMENT ======================= + +# Your platform. See PLATS for possible values. +PLAT= none + +# CC= $(CXX) +CFLAGS= -O2 -DLUA_COMPAT_ALL $(SYSCFLAGS) $(MYCFLAGS) +LDFLAGS= $(SYSLDFLAGS) $(MYLDFLAGS) +LIBS= -lm $(SYSLIBS) $(MYLIBS) + +AR= ar rcu +RANLIB= ranlib +RM= rm -f + +SYSCFLAGS= +SYSLDFLAGS= +SYSLIBS= + +MYCFLAGS= +MYLDFLAGS= +MYLIBS= +MYOBJS= + +# == END OF USER SETTINGS -- NO NEED TO CHANGE ANYTHING BELOW THIS LINE ======= + +PLATS= aix ansi bsd freebsd generic linux macosx mingw posix solaris + +LUA_A= liblua.a +CORE_O= lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o \ + lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o \ + ltm.o lundump.o lvm.o lzio.o +LIB_O= lauxlib.o lbaselib.o lbitlib.o lcorolib.o ldblib.o liolib.o \ + lmathlib.o loslib.o lstrlib.o ltablib.o loadlib.o linit.o +BASE_O= $(CORE_O) $(LIB_O) $(MYOBJS) + +LUA_T= lua +LUA_O= lua.o + +LUAC_T= luac +LUAC_O= luac.o + +ALL_O= $(BASE_O) $(LUA_O) $(LUAC_O) +ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T) +ALL_A= $(LUA_A) + +# Targets start here. +default: $(PLAT) + +all: $(ALL_T) + +o: $(ALL_O) + +a: $(ALL_A) + +$(LUA_A): $(BASE_O) + $(AR) $@ $(BASE_O) + $(RANLIB) $@ + +$(LUA_T): $(LUA_O) $(LUA_A) + $(CC) -o $@ $(LDFLAGS) $(LUA_O) $(LUA_A) $(LIBS) + +$(LUAC_T): $(LUAC_O) $(LUA_A) + $(CC) -o $@ $(LDFLAGS) $(LUAC_O) $(LUA_A) $(LIBS) + +clean: + $(RM) $(ALL_T) $(ALL_O) + +depend: + @$(CC) $(CFLAGS) -MM l*.c + +echo: + @echo "PLAT= $(PLAT)" + @echo "CC= $(CC)" + @echo "CFLAGS= $(CFLAGS)" + @echo "LDFLAGS= $(SYSLDFLAGS)" + @echo "LIBS= $(LIBS)" + @echo "AR= $(AR)" + @echo "RANLIB= $(RANLIB)" + @echo "RM= $(RM)" + +# Convenience targets for popular platforms +ALL= all + +none: + @echo "Please do 'make PLATFORM' where PLATFORM is one of these:" + @echo " $(PLATS)" + +aix: + $(MAKE) $(ALL) CC="xlc" CFLAGS="-O2 -DLUA_USE_POSIX -DLUA_USE_DLOPEN" SYSLIBS="-ldl" SYSLDFLAGS="-brtl -bexpall" + +ansi: + $(MAKE) $(ALL) SYSCFLAGS="-DLUA_ANSI" + +bsd: + $(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_POSIX -DLUA_USE_DLOPEN" SYSLIBS="-Wl,-E" + +freebsd: + $(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -lreadline" + +generic: $(ALL) + +linux: + $(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl -lreadline" + +macosx: + $(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_MACOSX" SYSLIBS="-lreadline" CC=cc + +mingw: + $(MAKE) "LUA_A=lua52.dll" "LUA_T=lua.exe" \ + "AR=$(CC) -shared -o" "RANLIB=strip --strip-unneeded" \ + "SYSCFLAGS=-DLUA_BUILD_AS_DLL" "SYSLIBS=" "SYSLDFLAGS=-s" lua.exe + $(MAKE) "LUAC_T=luac.exe" luac.exe + +posix: + $(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_POSIX" + +solaris: + $(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_POSIX -DLUA_USE_DLOPEN" SYSLIBS="-ldl" + +# list targets that do not create files (but not all makes understand .PHONY) +.PHONY: all $(PLATS) default o a clean depend echo none + +# DO NOT DELETE + +lapi.o: lapi.c lua.h luaconf.h lapi.h llimits.h lstate.h lobject.h ltm.h \ + lzio.h lmem.h ldebug.h ldo.h lfunc.h lgc.h lstring.h ltable.h lundump.h \ + lvm.h +lauxlib.o: lauxlib.c lua.h luaconf.h lauxlib.h +lbaselib.o: lbaselib.c lua.h luaconf.h lauxlib.h lualib.h +lbitlib.o: lbitlib.c lua.h luaconf.h lauxlib.h lualib.h +lcode.o: lcode.c lua.h luaconf.h lcode.h llex.h lobject.h llimits.h \ + lzio.h lmem.h lopcodes.h lparser.h ldebug.h lstate.h ltm.h ldo.h lgc.h \ + lstring.h ltable.h lvm.h +lcorolib.o: lcorolib.c lua.h luaconf.h lauxlib.h lualib.h +lctype.o: lctype.c lctype.h lua.h luaconf.h llimits.h +ldblib.o: ldblib.c lua.h luaconf.h lauxlib.h lualib.h +ldebug.o: ldebug.c lua.h luaconf.h lapi.h llimits.h lstate.h lobject.h \ + ltm.h lzio.h lmem.h lcode.h llex.h lopcodes.h lparser.h ldebug.h ldo.h \ + lfunc.h lstring.h lgc.h ltable.h lvm.h +ldo.o: ldo.c lua.h luaconf.h lapi.h llimits.h lstate.h lobject.h ltm.h \ + lzio.h lmem.h ldebug.h ldo.h lfunc.h lgc.h lopcodes.h lparser.h \ + lstring.h ltable.h lundump.h lvm.h +ldump.o: ldump.c lua.h luaconf.h lobject.h llimits.h lstate.h ltm.h \ + lzio.h lmem.h lundump.h +lfunc.o: lfunc.c lua.h luaconf.h lfunc.h lobject.h llimits.h lgc.h \ + lstate.h ltm.h lzio.h lmem.h +lgc.o: lgc.c lua.h luaconf.h ldebug.h lstate.h lobject.h llimits.h ltm.h \ + lzio.h lmem.h ldo.h lfunc.h lgc.h lstring.h ltable.h +linit.o: linit.c lua.h luaconf.h lualib.h lauxlib.h +liolib.o: liolib.c lua.h luaconf.h lauxlib.h lualib.h +llex.o: llex.c lua.h luaconf.h lctype.h llimits.h ldo.h lobject.h \ + lstate.h ltm.h lzio.h lmem.h llex.h lparser.h lstring.h lgc.h ltable.h +lmathlib.o: lmathlib.c lua.h luaconf.h lauxlib.h lualib.h +lmem.o: lmem.c lua.h luaconf.h ldebug.h lstate.h lobject.h llimits.h \ + ltm.h lzio.h lmem.h ldo.h lgc.h +loadlib.o: loadlib.c lua.h luaconf.h lauxlib.h lualib.h +lobject.o: lobject.c lua.h luaconf.h lctype.h llimits.h ldebug.h lstate.h \ + lobject.h ltm.h lzio.h lmem.h ldo.h lstring.h lgc.h lvm.h +lopcodes.o: lopcodes.c lopcodes.h llimits.h lua.h luaconf.h +loslib.o: loslib.c lua.h luaconf.h lauxlib.h lualib.h +lparser.o: lparser.c lua.h luaconf.h lcode.h llex.h lobject.h llimits.h \ + lzio.h lmem.h lopcodes.h lparser.h ldebug.h lstate.h ltm.h ldo.h lfunc.h \ + lstring.h lgc.h ltable.h +lstate.o: lstate.c lua.h luaconf.h lapi.h llimits.h lstate.h lobject.h \ + ltm.h lzio.h lmem.h ldebug.h ldo.h lfunc.h lgc.h llex.h lstring.h \ + ltable.h +lstring.o: lstring.c lua.h luaconf.h lmem.h llimits.h lobject.h lstate.h \ + ltm.h lzio.h lstring.h lgc.h +lstrlib.o: lstrlib.c lua.h luaconf.h lauxlib.h lualib.h +ltable.o: ltable.c lua.h luaconf.h ldebug.h lstate.h lobject.h llimits.h \ + ltm.h lzio.h lmem.h ldo.h lgc.h lstring.h ltable.h lvm.h +ltablib.o: ltablib.c lua.h luaconf.h lauxlib.h lualib.h +ltm.o: ltm.c lua.h luaconf.h lobject.h llimits.h lstate.h ltm.h lzio.h \ + lmem.h lstring.h lgc.h ltable.h +lua.o: lua.c lua.h luaconf.h lauxlib.h lualib.h +luac.o: luac.c lua.h luaconf.h lauxlib.h lobject.h llimits.h lstate.h \ + ltm.h lzio.h lmem.h lundump.h ldebug.h lopcodes.h +lundump.o: lundump.c lua.h luaconf.h ldebug.h lstate.h lobject.h \ + llimits.h ltm.h lzio.h lmem.h ldo.h lfunc.h lstring.h lgc.h lundump.h +lvm.o: lvm.c lua.h luaconf.h ldebug.h lstate.h lobject.h llimits.h ltm.h \ + lzio.h lmem.h ldo.h lfunc.h lgc.h lopcodes.h lstring.h ltable.h lvm.h +lzio.o: lzio.c lua.h luaconf.h llimits.h lmem.h lstate.h lobject.h ltm.h \ + lzio.h + diff --git a/lua-5.2.4/src/lapi.c b/lua-5.2.4/src/lapi.c new file mode 100644 index 000000000..d011431ea --- /dev/null +++ b/lua-5.2.4/src/lapi.c @@ -0,0 +1,1284 @@ +/* +** $Id: lapi.c,v 2.171.1.1 2013/04/12 18:48:47 roberto Exp $ +** Lua API +** See Copyright Notice in lua.h +*/ + + +#include +#include + +#define lapi_c +#define LUA_CORE + +#include "lua.h" + +#include "lapi.h" +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "lgc.h" +#include "lmem.h" +#include "lobject.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "ltm.h" +#include "lundump.h" +#include "lvm.h" + + + +const char lua_ident[] = + "$LuaVersion: " LUA_COPYRIGHT " $" + "$LuaAuthors: " LUA_AUTHORS " $"; + + +/* value at a non-valid index */ +#define NONVALIDVALUE cast(TValue *, luaO_nilobject) + +/* corresponding test */ +#define isvalid(o) ((o) != luaO_nilobject) + +/* test for pseudo index */ +#define ispseudo(i) ((i) <= LUA_REGISTRYINDEX) + +/* test for valid but not pseudo index */ +#define isstackindex(i, o) (isvalid(o) && !ispseudo(i)) + +#define api_checkvalidindex(L, o) api_check(L, isvalid(o), "invalid index") + +#define api_checkstackindex(L, i, o) \ + api_check(L, isstackindex(i, o), "index not in the stack") + + +static TValue *index2addr (lua_State *L, int idx) { + CallInfo *ci = L->ci; + if (idx > 0) { + TValue *o = ci->func + idx; + api_check(L, idx <= ci->top - (ci->func + 1), "unacceptable index"); + if (o >= L->top) return NONVALIDVALUE; + else return o; + } + else if (!ispseudo(idx)) { /* negative index */ + api_check(L, idx != 0 && -idx <= L->top - (ci->func + 1), "invalid index"); + return L->top + idx; + } + else if (idx == LUA_REGISTRYINDEX) + return &G(L)->l_registry; + else { /* upvalues */ + idx = LUA_REGISTRYINDEX - idx; + api_check(L, idx <= MAXUPVAL + 1, "upvalue index too large"); + if (ttislcf(ci->func)) /* light C function? */ + return NONVALIDVALUE; /* it has no upvalues */ + else { + CClosure *func = clCvalue(ci->func); + return (idx <= func->nupvalues) ? &func->upvalue[idx-1] : NONVALIDVALUE; + } + } +} + + +/* +** to be called by 'lua_checkstack' in protected mode, to grow stack +** capturing memory errors +*/ +static void growstack (lua_State *L, void *ud) { + int size = *(int *)ud; + luaD_growstack(L, size); +} + + +LUA_API int lua_checkstack (lua_State *L, int size) { + int res; + CallInfo *ci = L->ci; + lua_lock(L); + if (L->stack_last - L->top > size) /* stack large enough? */ + res = 1; /* yes; check is OK */ + else { /* no; need to grow stack */ + int inuse = cast_int(L->top - L->stack) + EXTRA_STACK; + if (inuse > LUAI_MAXSTACK - size) /* can grow without overflow? */ + res = 0; /* no */ + else /* try to grow stack */ + res = (luaD_rawrunprotected(L, &growstack, &size) == LUA_OK); + } + if (res && ci->top < L->top + size) + ci->top = L->top + size; /* adjust frame top */ + lua_unlock(L); + return res; +} + + +LUA_API void lua_xmove (lua_State *from, lua_State *to, int n) { + int i; + if (from == to) return; + lua_lock(to); + api_checknelems(from, n); + api_check(from, G(from) == G(to), "moving among independent states"); + api_check(from, to->ci->top - to->top >= n, "not enough elements to move"); + from->top -= n; + for (i = 0; i < n; i++) { + setobj2s(to, to->top++, from->top + i); + } + lua_unlock(to); +} + + +LUA_API lua_CFunction lua_atpanic (lua_State *L, lua_CFunction panicf) { + lua_CFunction old; + lua_lock(L); + old = G(L)->panic; + G(L)->panic = panicf; + lua_unlock(L); + return old; +} + + +LUA_API const lua_Number *lua_version (lua_State *L) { + static const lua_Number version = LUA_VERSION_NUM; + if (L == NULL) return &version; + else return G(L)->version; +} + + + +/* +** basic stack manipulation +*/ + + +/* +** convert an acceptable stack index into an absolute index +*/ +LUA_API int lua_absindex (lua_State *L, int idx) { + return (idx > 0 || ispseudo(idx)) + ? idx + : cast_int(L->top - L->ci->func + idx); +} + + +LUA_API int lua_gettop (lua_State *L) { + return cast_int(L->top - (L->ci->func + 1)); +} + + +LUA_API void lua_settop (lua_State *L, int idx) { + StkId func = L->ci->func; + lua_lock(L); + if (idx >= 0) { + api_check(L, idx <= L->stack_last - (func + 1), "new top too large"); + while (L->top < (func + 1) + idx) + setnilvalue(L->top++); + L->top = (func + 1) + idx; + } + else { + api_check(L, -(idx+1) <= (L->top - (func + 1)), "invalid new top"); + L->top += idx+1; /* `subtract' index (index is negative) */ + } + lua_unlock(L); +} + + +LUA_API void lua_remove (lua_State *L, int idx) { + StkId p; + lua_lock(L); + p = index2addr(L, idx); + api_checkstackindex(L, idx, p); + while (++p < L->top) setobjs2s(L, p-1, p); + L->top--; + lua_unlock(L); +} + + +LUA_API void lua_insert (lua_State *L, int idx) { + StkId p; + StkId q; + lua_lock(L); + p = index2addr(L, idx); + api_checkstackindex(L, idx, p); + for (q = L->top; q > p; q--) /* use L->top as a temporary */ + setobjs2s(L, q, q - 1); + setobjs2s(L, p, L->top); + lua_unlock(L); +} + + +static void moveto (lua_State *L, TValue *fr, int idx) { + TValue *to = index2addr(L, idx); + api_checkvalidindex(L, to); + setobj(L, to, fr); + if (idx < LUA_REGISTRYINDEX) /* function upvalue? */ + luaC_barrier(L, clCvalue(L->ci->func), fr); + /* LUA_REGISTRYINDEX does not need gc barrier + (collector revisits it before finishing collection) */ +} + + +LUA_API void lua_replace (lua_State *L, int idx) { + lua_lock(L); + api_checknelems(L, 1); + moveto(L, L->top - 1, idx); + L->top--; + lua_unlock(L); +} + + +LUA_API void lua_copy (lua_State *L, int fromidx, int toidx) { + TValue *fr; + lua_lock(L); + fr = index2addr(L, fromidx); + moveto(L, fr, toidx); + lua_unlock(L); +} + + +LUA_API void lua_pushvalue (lua_State *L, int idx) { + lua_lock(L); + setobj2s(L, L->top, index2addr(L, idx)); + api_incr_top(L); + lua_unlock(L); +} + + + +/* +** access functions (stack -> C) +*/ + + +LUA_API int lua_type (lua_State *L, int idx) { + StkId o = index2addr(L, idx); + return (isvalid(o) ? ttypenv(o) : LUA_TNONE); +} + + +LUA_API const char *lua_typename (lua_State *L, int t) { + UNUSED(L); + return ttypename(t); +} + + +LUA_API int lua_iscfunction (lua_State *L, int idx) { + StkId o = index2addr(L, idx); + return (ttislcf(o) || (ttisCclosure(o))); +} + + +LUA_API int lua_isnumber (lua_State *L, int idx) { + TValue n; + const TValue *o = index2addr(L, idx); + return tonumber(o, &n); +} + + +LUA_API int lua_isstring (lua_State *L, int idx) { + int t = lua_type(L, idx); + return (t == LUA_TSTRING || t == LUA_TNUMBER); +} + + +LUA_API int lua_isuserdata (lua_State *L, int idx) { + const TValue *o = index2addr(L, idx); + return (ttisuserdata(o) || ttislightuserdata(o)); +} + + +LUA_API int lua_rawequal (lua_State *L, int index1, int index2) { + StkId o1 = index2addr(L, index1); + StkId o2 = index2addr(L, index2); + return (isvalid(o1) && isvalid(o2)) ? luaV_rawequalobj(o1, o2) : 0; +} + + +LUA_API void lua_arith (lua_State *L, int op) { + StkId o1; /* 1st operand */ + StkId o2; /* 2nd operand */ + lua_lock(L); + if (op != LUA_OPUNM) /* all other operations expect two operands */ + api_checknelems(L, 2); + else { /* for unary minus, add fake 2nd operand */ + api_checknelems(L, 1); + setobjs2s(L, L->top, L->top - 1); + L->top++; + } + o1 = L->top - 2; + o2 = L->top - 1; + if (ttisnumber(o1) && ttisnumber(o2)) { + setnvalue(o1, luaO_arith(op, nvalue(o1), nvalue(o2))); + } + else + luaV_arith(L, o1, o1, o2, cast(TMS, op - LUA_OPADD + TM_ADD)); + L->top--; + lua_unlock(L); +} + + +LUA_API int lua_compare (lua_State *L, int index1, int index2, int op) { + StkId o1, o2; + int i = 0; + lua_lock(L); /* may call tag method */ + o1 = index2addr(L, index1); + o2 = index2addr(L, index2); + if (isvalid(o1) && isvalid(o2)) { + switch (op) { + case LUA_OPEQ: i = equalobj(L, o1, o2); break; + case LUA_OPLT: i = luaV_lessthan(L, o1, o2); break; + case LUA_OPLE: i = luaV_lessequal(L, o1, o2); break; + default: api_check(L, 0, "invalid option"); + } + } + lua_unlock(L); + return i; +} + + +LUA_API lua_Number lua_tonumberx (lua_State *L, int idx, int *isnum) { + TValue n; + const TValue *o = index2addr(L, idx); + if (tonumber(o, &n)) { + if (isnum) *isnum = 1; + return nvalue(o); + } + else { + if (isnum) *isnum = 0; + return 0; + } +} + + +LUA_API lua_Integer lua_tointegerx (lua_State *L, int idx, int *isnum) { + TValue n; + const TValue *o = index2addr(L, idx); + if (tonumber(o, &n)) { + lua_Integer res; + lua_Number num = nvalue(o); + lua_number2integer(res, num); + if (isnum) *isnum = 1; + return res; + } + else { + if (isnum) *isnum = 0; + return 0; + } +} + + +LUA_API lua_Unsigned lua_tounsignedx (lua_State *L, int idx, int *isnum) { + TValue n; + const TValue *o = index2addr(L, idx); + if (tonumber(o, &n)) { + lua_Unsigned res; + lua_Number num = nvalue(o); + lua_number2unsigned(res, num); + if (isnum) *isnum = 1; + return res; + } + else { + if (isnum) *isnum = 0; + return 0; + } +} + + +LUA_API int lua_toboolean (lua_State *L, int idx) { + const TValue *o = index2addr(L, idx); + return !l_isfalse(o); +} + + +LUA_API const char *lua_tolstring (lua_State *L, int idx, size_t *len) { + StkId o = index2addr(L, idx); + if (!ttisstring(o)) { + lua_lock(L); /* `luaV_tostring' may create a new string */ + if (!luaV_tostring(L, o)) { /* conversion failed? */ + if (len != NULL) *len = 0; + lua_unlock(L); + return NULL; + } + luaC_checkGC(L); + o = index2addr(L, idx); /* previous call may reallocate the stack */ + lua_unlock(L); + } + if (len != NULL) *len = tsvalue(o)->len; + return svalue(o); +} + + +LUA_API size_t lua_rawlen (lua_State *L, int idx) { + StkId o = index2addr(L, idx); + switch (ttypenv(o)) { + case LUA_TSTRING: return tsvalue(o)->len; + case LUA_TUSERDATA: return uvalue(o)->len; + case LUA_TTABLE: return luaH_getn(hvalue(o)); + default: return 0; + } +} + + +LUA_API lua_CFunction lua_tocfunction (lua_State *L, int idx) { + StkId o = index2addr(L, idx); + if (ttislcf(o)) return fvalue(o); + else if (ttisCclosure(o)) + return clCvalue(o)->f; + else return NULL; /* not a C function */ +} + + +LUA_API void *lua_touserdata (lua_State *L, int idx) { + StkId o = index2addr(L, idx); + switch (ttypenv(o)) { + case LUA_TUSERDATA: return (rawuvalue(o) + 1); + case LUA_TLIGHTUSERDATA: return pvalue(o); + default: return NULL; + } +} + + +LUA_API lua_State *lua_tothread (lua_State *L, int idx) { + StkId o = index2addr(L, idx); + return (!ttisthread(o)) ? NULL : thvalue(o); +} + + +LUA_API const void *lua_topointer (lua_State *L, int idx) { + StkId o = index2addr(L, idx); + switch (ttype(o)) { + case LUA_TTABLE: return hvalue(o); + case LUA_TLCL: return clLvalue(o); + case LUA_TCCL: return clCvalue(o); + case LUA_TLCF: return cast(void *, cast(size_t, fvalue(o))); + case LUA_TTHREAD: return thvalue(o); + case LUA_TUSERDATA: + case LUA_TLIGHTUSERDATA: + return lua_touserdata(L, idx); + default: return NULL; + } +} + + + +/* +** push functions (C -> stack) +*/ + + +LUA_API void lua_pushnil (lua_State *L) { + lua_lock(L); + setnilvalue(L->top); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API void lua_pushnumber (lua_State *L, lua_Number n) { + lua_lock(L); + setnvalue(L->top, n); + luai_checknum(L, L->top, + luaG_runerror(L, "C API - attempt to push a signaling NaN")); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API void lua_pushinteger (lua_State *L, lua_Integer n) { + lua_lock(L); + setnvalue(L->top, cast_num(n)); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API void lua_pushunsigned (lua_State *L, lua_Unsigned u) { + lua_Number n; + lua_lock(L); + n = lua_unsigned2number(u); + setnvalue(L->top, n); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API const char *lua_pushlstring (lua_State *L, const char *s, size_t len) { + TString *ts; + lua_lock(L); + luaC_checkGC(L); + ts = luaS_newlstr(L, s, len); + setsvalue2s(L, L->top, ts); + api_incr_top(L); + lua_unlock(L); + return getstr(ts); +} + + +LUA_API const char *lua_pushstring (lua_State *L, const char *s) { + if (s == NULL) { + lua_pushnil(L); + return NULL; + } + else { + TString *ts; + lua_lock(L); + luaC_checkGC(L); + ts = luaS_new(L, s); + setsvalue2s(L, L->top, ts); + api_incr_top(L); + lua_unlock(L); + return getstr(ts); + } +} + + +LUA_API const char *lua_pushvfstring (lua_State *L, const char *fmt, + va_list argp) { + const char *ret; + lua_lock(L); + luaC_checkGC(L); + ret = luaO_pushvfstring(L, fmt, argp); + lua_unlock(L); + return ret; +} + + +LUA_API const char *lua_pushfstring (lua_State *L, const char *fmt, ...) { + const char *ret; + va_list argp; + lua_lock(L); + luaC_checkGC(L); + va_start(argp, fmt); + ret = luaO_pushvfstring(L, fmt, argp); + va_end(argp); + lua_unlock(L); + return ret; +} + + +LUA_API void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n) { + lua_lock(L); + if (n == 0) { + setfvalue(L->top, fn); + } + else { + Closure *cl; + api_checknelems(L, n); + api_check(L, n <= MAXUPVAL, "upvalue index too large"); + luaC_checkGC(L); + cl = luaF_newCclosure(L, n); + cl->c.f = fn; + L->top -= n; + while (n--) + setobj2n(L, &cl->c.upvalue[n], L->top + n); + setclCvalue(L, L->top, cl); + } + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API void lua_pushboolean (lua_State *L, int b) { + lua_lock(L); + setbvalue(L->top, (b != 0)); /* ensure that true is 1 */ + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API void lua_pushlightuserdata (lua_State *L, void *p) { + lua_lock(L); + setpvalue(L->top, p); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API int lua_pushthread (lua_State *L) { + lua_lock(L); + setthvalue(L, L->top, L); + api_incr_top(L); + lua_unlock(L); + return (G(L)->mainthread == L); +} + + + +/* +** get functions (Lua -> stack) +*/ + + +LUA_API void lua_getglobal (lua_State *L, const char *var) { + Table *reg = hvalue(&G(L)->l_registry); + const TValue *gt; /* global table */ + lua_lock(L); + gt = luaH_getint(reg, LUA_RIDX_GLOBALS); + setsvalue2s(L, L->top++, luaS_new(L, var)); + luaV_gettable(L, gt, L->top - 1, L->top - 1); + lua_unlock(L); +} + + +LUA_API void lua_gettable (lua_State *L, int idx) { + StkId t; + lua_lock(L); + t = index2addr(L, idx); + luaV_gettable(L, t, L->top - 1, L->top - 1); + lua_unlock(L); +} + + +LUA_API void lua_getfield (lua_State *L, int idx, const char *k) { + StkId t; + lua_lock(L); + t = index2addr(L, idx); + setsvalue2s(L, L->top, luaS_new(L, k)); + api_incr_top(L); + luaV_gettable(L, t, L->top - 1, L->top - 1); + lua_unlock(L); +} + + +LUA_API void lua_rawget (lua_State *L, int idx) { + StkId t; + lua_lock(L); + t = index2addr(L, idx); + api_check(L, ttistable(t), "table expected"); + setobj2s(L, L->top - 1, luaH_get(hvalue(t), L->top - 1)); + lua_unlock(L); +} + + +LUA_API void lua_rawgeti (lua_State *L, int idx, int n) { + StkId t; + lua_lock(L); + t = index2addr(L, idx); + api_check(L, ttistable(t), "table expected"); + setobj2s(L, L->top, luaH_getint(hvalue(t), n)); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API void lua_rawgetp (lua_State *L, int idx, const void *p) { + StkId t; + TValue k; + lua_lock(L); + t = index2addr(L, idx); + api_check(L, ttistable(t), "table expected"); + setpvalue(&k, cast(void *, p)); + setobj2s(L, L->top, luaH_get(hvalue(t), &k)); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API void lua_createtable (lua_State *L, int narray, int nrec) { + Table *t; + lua_lock(L); + luaC_checkGC(L); + t = luaH_new(L); + sethvalue(L, L->top, t); + api_incr_top(L); + if (narray > 0 || nrec > 0) + luaH_resize(L, t, narray, nrec); + lua_unlock(L); +} + + +LUA_API int lua_getmetatable (lua_State *L, int objindex) { + const TValue *obj; + Table *mt = NULL; + int res; + lua_lock(L); + obj = index2addr(L, objindex); + switch (ttypenv(obj)) { + case LUA_TTABLE: + mt = hvalue(obj)->metatable; + break; + case LUA_TUSERDATA: + mt = uvalue(obj)->metatable; + break; + default: + mt = G(L)->mt[ttypenv(obj)]; + break; + } + if (mt == NULL) + res = 0; + else { + sethvalue(L, L->top, mt); + api_incr_top(L); + res = 1; + } + lua_unlock(L); + return res; +} + + +LUA_API void lua_getuservalue (lua_State *L, int idx) { + StkId o; + lua_lock(L); + o = index2addr(L, idx); + api_check(L, ttisuserdata(o), "userdata expected"); + if (uvalue(o)->env) { + sethvalue(L, L->top, uvalue(o)->env); + } else + setnilvalue(L->top); + api_incr_top(L); + lua_unlock(L); +} + + +/* +** set functions (stack -> Lua) +*/ + + +LUA_API void lua_setglobal (lua_State *L, const char *var) { + Table *reg = hvalue(&G(L)->l_registry); + const TValue *gt; /* global table */ + lua_lock(L); + api_checknelems(L, 1); + gt = luaH_getint(reg, LUA_RIDX_GLOBALS); + setsvalue2s(L, L->top++, luaS_new(L, var)); + luaV_settable(L, gt, L->top - 1, L->top - 2); + L->top -= 2; /* pop value and key */ + lua_unlock(L); +} + + +LUA_API void lua_settable (lua_State *L, int idx) { + StkId t; + lua_lock(L); + api_checknelems(L, 2); + t = index2addr(L, idx); + luaV_settable(L, t, L->top - 2, L->top - 1); + L->top -= 2; /* pop index and value */ + lua_unlock(L); +} + + +LUA_API void lua_setfield (lua_State *L, int idx, const char *k) { + StkId t; + lua_lock(L); + api_checknelems(L, 1); + t = index2addr(L, idx); + setsvalue2s(L, L->top++, luaS_new(L, k)); + luaV_settable(L, t, L->top - 1, L->top - 2); + L->top -= 2; /* pop value and key */ + lua_unlock(L); +} + + +LUA_API void lua_rawset (lua_State *L, int idx) { + StkId t; + lua_lock(L); + api_checknelems(L, 2); + t = index2addr(L, idx); + api_check(L, ttistable(t), "table expected"); + setobj2t(L, luaH_set(L, hvalue(t), L->top-2), L->top-1); + invalidateTMcache(hvalue(t)); + luaC_barrierback(L, gcvalue(t), L->top-1); + L->top -= 2; + lua_unlock(L); +} + + +LUA_API void lua_rawseti (lua_State *L, int idx, int n) { + StkId t; + lua_lock(L); + api_checknelems(L, 1); + t = index2addr(L, idx); + api_check(L, ttistable(t), "table expected"); + luaH_setint(L, hvalue(t), n, L->top - 1); + luaC_barrierback(L, gcvalue(t), L->top-1); + L->top--; + lua_unlock(L); +} + + +LUA_API void lua_rawsetp (lua_State *L, int idx, const void *p) { + StkId t; + TValue k; + lua_lock(L); + api_checknelems(L, 1); + t = index2addr(L, idx); + api_check(L, ttistable(t), "table expected"); + setpvalue(&k, cast(void *, p)); + setobj2t(L, luaH_set(L, hvalue(t), &k), L->top - 1); + luaC_barrierback(L, gcvalue(t), L->top - 1); + L->top--; + lua_unlock(L); +} + + +LUA_API int lua_setmetatable (lua_State *L, int objindex) { + TValue *obj; + Table *mt; + lua_lock(L); + api_checknelems(L, 1); + obj = index2addr(L, objindex); + if (ttisnil(L->top - 1)) + mt = NULL; + else { + api_check(L, ttistable(L->top - 1), "table expected"); + mt = hvalue(L->top - 1); + } + switch (ttypenv(obj)) { + case LUA_TTABLE: { + hvalue(obj)->metatable = mt; + if (mt) { + luaC_objbarrierback(L, gcvalue(obj), mt); + luaC_checkfinalizer(L, gcvalue(obj), mt); + } + break; + } + case LUA_TUSERDATA: { + uvalue(obj)->metatable = mt; + if (mt) { + luaC_objbarrier(L, rawuvalue(obj), mt); + luaC_checkfinalizer(L, gcvalue(obj), mt); + } + break; + } + default: { + G(L)->mt[ttypenv(obj)] = mt; + break; + } + } + L->top--; + lua_unlock(L); + return 1; +} + + +LUA_API void lua_setuservalue (lua_State *L, int idx) { + StkId o; + lua_lock(L); + api_checknelems(L, 1); + o = index2addr(L, idx); + api_check(L, ttisuserdata(o), "userdata expected"); + if (ttisnil(L->top - 1)) + uvalue(o)->env = NULL; + else { + api_check(L, ttistable(L->top - 1), "table expected"); + uvalue(o)->env = hvalue(L->top - 1); + luaC_objbarrier(L, gcvalue(o), hvalue(L->top - 1)); + } + L->top--; + lua_unlock(L); +} + + +/* +** `load' and `call' functions (run Lua code) +*/ + + +#define checkresults(L,na,nr) \ + api_check(L, (nr) == LUA_MULTRET || (L->ci->top - L->top >= (nr) - (na)), \ + "results from function overflow current stack size") + + +LUA_API int lua_getctx (lua_State *L, int *ctx) { + if (L->ci->callstatus & CIST_YIELDED) { + if (ctx) *ctx = L->ci->u.c.ctx; + return L->ci->u.c.status; + } + else return LUA_OK; +} + + +LUA_API void lua_callk (lua_State *L, int nargs, int nresults, int ctx, + lua_CFunction k) { + StkId func; + lua_lock(L); + api_check(L, k == NULL || !isLua(L->ci), + "cannot use continuations inside hooks"); + api_checknelems(L, nargs+1); + api_check(L, L->status == LUA_OK, "cannot do calls on non-normal thread"); + checkresults(L, nargs, nresults); + func = L->top - (nargs+1); + if (k != NULL && L->nny == 0) { /* need to prepare continuation? */ + L->ci->u.c.k = k; /* save continuation */ + L->ci->u.c.ctx = ctx; /* save context */ + luaD_call(L, func, nresults, 1); /* do the call */ + } + else /* no continuation or no yieldable */ + luaD_call(L, func, nresults, 0); /* just do the call */ + adjustresults(L, nresults); + lua_unlock(L); +} + + + +/* +** Execute a protected call. +*/ +struct CallS { /* data to `f_call' */ + StkId func; + int nresults; +}; + + +static void f_call (lua_State *L, void *ud) { + struct CallS *c = cast(struct CallS *, ud); + luaD_call(L, c->func, c->nresults, 0); +} + + + +LUA_API int lua_pcallk (lua_State *L, int nargs, int nresults, int errfunc, + int ctx, lua_CFunction k) { + struct CallS c; + int status; + ptrdiff_t func; + lua_lock(L); + api_check(L, k == NULL || !isLua(L->ci), + "cannot use continuations inside hooks"); + api_checknelems(L, nargs+1); + api_check(L, L->status == LUA_OK, "cannot do calls on non-normal thread"); + checkresults(L, nargs, nresults); + if (errfunc == 0) + func = 0; + else { + StkId o = index2addr(L, errfunc); + api_checkstackindex(L, errfunc, o); + func = savestack(L, o); + } + c.func = L->top - (nargs+1); /* function to be called */ + if (k == NULL || L->nny > 0) { /* no continuation or no yieldable? */ + c.nresults = nresults; /* do a 'conventional' protected call */ + status = luaD_pcall(L, f_call, &c, savestack(L, c.func), func); + } + else { /* prepare continuation (call is already protected by 'resume') */ + CallInfo *ci = L->ci; + ci->u.c.k = k; /* save continuation */ + ci->u.c.ctx = ctx; /* save context */ + /* save information for error recovery */ + ci->extra = savestack(L, c.func); + ci->u.c.old_allowhook = L->allowhook; + ci->u.c.old_errfunc = L->errfunc; + L->errfunc = func; + /* mark that function may do error recovery */ + ci->callstatus |= CIST_YPCALL; + luaD_call(L, c.func, nresults, 1); /* do the call */ + ci->callstatus &= ~CIST_YPCALL; + L->errfunc = ci->u.c.old_errfunc; + status = LUA_OK; /* if it is here, there were no errors */ + } + adjustresults(L, nresults); + lua_unlock(L); + return status; +} + + +LUA_API int lua_load (lua_State *L, lua_Reader reader, void *data, + const char *chunkname, const char *mode) { + ZIO z; + int status; + lua_lock(L); + if (!chunkname) chunkname = "?"; + luaZ_init(L, &z, reader, data); + status = luaD_protectedparser(L, &z, chunkname, mode); + if (status == LUA_OK) { /* no errors? */ + LClosure *f = clLvalue(L->top - 1); /* get newly created function */ + if (f->nupvalues == 1) { /* does it have one upvalue? */ + /* get global table from registry */ + Table *reg = hvalue(&G(L)->l_registry); + const TValue *gt = luaH_getint(reg, LUA_RIDX_GLOBALS); + /* set global table as 1st upvalue of 'f' (may be LUA_ENV) */ + setobj(L, f->upvals[0]->v, gt); + luaC_barrier(L, f->upvals[0], gt); + } + } + lua_unlock(L); + return status; +} + + +LUA_API int lua_dump (lua_State *L, lua_Writer writer, void *data) { + int status; + TValue *o; + lua_lock(L); + api_checknelems(L, 1); + o = L->top - 1; + if (isLfunction(o)) + status = luaU_dump(L, getproto(o), writer, data, 0); + else + status = 1; + lua_unlock(L); + return status; +} + + +LUA_API int lua_status (lua_State *L) { + return L->status; +} + + +/* +** Garbage-collection function +*/ + +LUA_API int lua_gc (lua_State *L, int what, int data) { + int res = 0; + global_State *g; + lua_lock(L); + g = G(L); + switch (what) { + case LUA_GCSTOP: { + g->gcrunning = 0; + break; + } + case LUA_GCRESTART: { + luaE_setdebt(g, 0); + g->gcrunning = 1; + break; + } + case LUA_GCCOLLECT: { + luaC_fullgc(L, 0); + break; + } + case LUA_GCCOUNT: { + /* GC values are expressed in Kbytes: #bytes/2^10 */ + res = cast_int(gettotalbytes(g) >> 10); + break; + } + case LUA_GCCOUNTB: { + res = cast_int(gettotalbytes(g) & 0x3ff); + break; + } + case LUA_GCSTEP: { + if (g->gckind == KGC_GEN) { /* generational mode? */ + res = (g->GCestimate == 0); /* true if it will do major collection */ + luaC_forcestep(L); /* do a single step */ + } + else { + lu_mem debt = cast(lu_mem, data) * 1024 - GCSTEPSIZE; + if (g->gcrunning) + debt += g->GCdebt; /* include current debt */ + luaE_setdebt(g, debt); + luaC_forcestep(L); + if (g->gcstate == GCSpause) /* end of cycle? */ + res = 1; /* signal it */ + } + break; + } + case LUA_GCSETPAUSE: { + res = g->gcpause; + g->gcpause = data; + break; + } + case LUA_GCSETMAJORINC: { + res = g->gcmajorinc; + g->gcmajorinc = data; + break; + } + case LUA_GCSETSTEPMUL: { + res = g->gcstepmul; + g->gcstepmul = data; + break; + } + case LUA_GCISRUNNING: { + res = g->gcrunning; + break; + } + case LUA_GCGEN: { /* change collector to generational mode */ + luaC_changemode(L, KGC_GEN); + break; + } + case LUA_GCINC: { /* change collector to incremental mode */ + luaC_changemode(L, KGC_NORMAL); + break; + } + default: res = -1; /* invalid option */ + } + lua_unlock(L); + return res; +} + + + +/* +** miscellaneous functions +*/ + + +LUA_API int lua_error (lua_State *L) { + lua_lock(L); + api_checknelems(L, 1); + luaG_errormsg(L); + /* code unreachable; will unlock when control actually leaves the kernel */ + return 0; /* to avoid warnings */ +} + + +LUA_API int lua_next (lua_State *L, int idx) { + StkId t; + int more; + lua_lock(L); + t = index2addr(L, idx); + api_check(L, ttistable(t), "table expected"); + more = luaH_next(L, hvalue(t), L->top - 1); + if (more) { + api_incr_top(L); + } + else /* no more elements */ + L->top -= 1; /* remove key */ + lua_unlock(L); + return more; +} + + +LUA_API void lua_concat (lua_State *L, int n) { + lua_lock(L); + api_checknelems(L, n); + if (n >= 2) { + luaC_checkGC(L); + luaV_concat(L, n); + } + else if (n == 0) { /* push empty string */ + setsvalue2s(L, L->top, luaS_newlstr(L, "", 0)); + api_incr_top(L); + } + /* else n == 1; nothing to do */ + lua_unlock(L); +} + + +LUA_API void lua_len (lua_State *L, int idx) { + StkId t; + lua_lock(L); + t = index2addr(L, idx); + luaV_objlen(L, L->top, t); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API lua_Alloc lua_getallocf (lua_State *L, void **ud) { + lua_Alloc f; + lua_lock(L); + if (ud) *ud = G(L)->ud; + f = G(L)->frealloc; + lua_unlock(L); + return f; +} + + +LUA_API void lua_setallocf (lua_State *L, lua_Alloc f, void *ud) { + lua_lock(L); + G(L)->ud = ud; + G(L)->frealloc = f; + lua_unlock(L); +} + + +LUA_API void *lua_newuserdata (lua_State *L, size_t size) { + Udata *u; + lua_lock(L); + luaC_checkGC(L); + u = luaS_newudata(L, size, NULL); + setuvalue(L, L->top, u); + api_incr_top(L); + lua_unlock(L); + return u + 1; +} + + + +static const char *aux_upvalue (StkId fi, int n, TValue **val, + GCObject **owner) { + switch (ttype(fi)) { + case LUA_TCCL: { /* C closure */ + CClosure *f = clCvalue(fi); + if (!(1 <= n && n <= f->nupvalues)) return NULL; + *val = &f->upvalue[n-1]; + if (owner) *owner = obj2gco(f); + return ""; + } + case LUA_TLCL: { /* Lua closure */ + LClosure *f = clLvalue(fi); + TString *name; + Proto *p = f->p; + if (!(1 <= n && n <= p->sizeupvalues)) return NULL; + *val = f->upvals[n-1]->v; + if (owner) *owner = obj2gco(f->upvals[n - 1]); + name = p->upvalues[n-1].name; + return (name == NULL) ? "" : getstr(name); + } + default: return NULL; /* not a closure */ + } +} + + +LUA_API const char *lua_getupvalue (lua_State *L, int funcindex, int n) { + const char *name; + TValue *val = NULL; /* to avoid warnings */ + lua_lock(L); + name = aux_upvalue(index2addr(L, funcindex), n, &val, NULL); + if (name) { + setobj2s(L, L->top, val); + api_incr_top(L); + } + lua_unlock(L); + return name; +} + + +LUA_API const char *lua_setupvalue (lua_State *L, int funcindex, int n) { + const char *name; + TValue *val = NULL; /* to avoid warnings */ + GCObject *owner = NULL; /* to avoid warnings */ + StkId fi; + lua_lock(L); + fi = index2addr(L, funcindex); + api_checknelems(L, 1); + name = aux_upvalue(fi, n, &val, &owner); + if (name) { + L->top--; + setobj(L, val, L->top); + luaC_barrier(L, owner, L->top); + } + lua_unlock(L); + return name; +} + + +static UpVal **getupvalref (lua_State *L, int fidx, int n, LClosure **pf) { + LClosure *f; + StkId fi = index2addr(L, fidx); + api_check(L, ttisLclosure(fi), "Lua function expected"); + f = clLvalue(fi); + api_check(L, (1 <= n && n <= f->p->sizeupvalues), "invalid upvalue index"); + if (pf) *pf = f; + return &f->upvals[n - 1]; /* get its upvalue pointer */ +} + + +LUA_API void *lua_upvalueid (lua_State *L, int fidx, int n) { + StkId fi = index2addr(L, fidx); + switch (ttype(fi)) { + case LUA_TLCL: { /* lua closure */ + return *getupvalref(L, fidx, n, NULL); + } + case LUA_TCCL: { /* C closure */ + CClosure *f = clCvalue(fi); + api_check(L, 1 <= n && n <= f->nupvalues, "invalid upvalue index"); + return &f->upvalue[n - 1]; + } + default: { + api_check(L, 0, "closure expected"); + return NULL; + } + } +} + + +LUA_API void lua_upvaluejoin (lua_State *L, int fidx1, int n1, + int fidx2, int n2) { + LClosure *f1; + UpVal **up1 = getupvalref(L, fidx1, n1, &f1); + UpVal **up2 = getupvalref(L, fidx2, n2, NULL); + *up1 = *up2; + luaC_objbarrier(L, f1, *up2); +} + diff --git a/lua-5.2.4/src/lapi.h b/lua-5.2.4/src/lapi.h new file mode 100644 index 000000000..c7d34ad84 --- /dev/null +++ b/lua-5.2.4/src/lapi.h @@ -0,0 +1,24 @@ +/* +** $Id: lapi.h,v 2.7.1.1 2013/04/12 18:48:47 roberto Exp $ +** Auxiliary functions from Lua API +** See Copyright Notice in lua.h +*/ + +#ifndef lapi_h +#define lapi_h + + +#include "llimits.h" +#include "lstate.h" + +#define api_incr_top(L) {L->top++; api_check(L, L->top <= L->ci->top, \ + "stack overflow");} + +#define adjustresults(L,nres) \ + { if ((nres) == LUA_MULTRET && L->ci->top < L->top) L->ci->top = L->top; } + +#define api_checknelems(L,n) api_check(L, (n) < (L->top - L->ci->func), \ + "not enough elements in the stack") + + +#endif diff --git a/lua-5.2.4/src/lauxlib.c b/lua-5.2.4/src/lauxlib.c new file mode 100644 index 000000000..b00f8c709 --- /dev/null +++ b/lua-5.2.4/src/lauxlib.c @@ -0,0 +1,959 @@ +/* +** $Id: lauxlib.c,v 1.248.1.1 2013/04/12 18:48:47 roberto Exp $ +** Auxiliary functions for building Lua libraries +** See Copyright Notice in lua.h +*/ + + +#include +#include +#include +#include +#include + + +/* This file uses only the official API of Lua. +** Any function declared here could be written as an application function. +*/ + +#define lauxlib_c +#define LUA_LIB + +#include "lua.h" + +#include "lauxlib.h" + + +/* +** {====================================================== +** Traceback +** ======================================================= +*/ + + +#define LEVELS1 12 /* size of the first part of the stack */ +#define LEVELS2 10 /* size of the second part of the stack */ + + + +/* +** search for 'objidx' in table at index -1. +** return 1 + string at top if find a good name. +*/ +static int findfield (lua_State *L, int objidx, int level) { + if (level == 0 || !lua_istable(L, -1)) + return 0; /* not found */ + lua_pushnil(L); /* start 'next' loop */ + while (lua_next(L, -2)) { /* for each pair in table */ + if (lua_type(L, -2) == LUA_TSTRING) { /* ignore non-string keys */ + if (lua_rawequal(L, objidx, -1)) { /* found object? */ + lua_pop(L, 1); /* remove value (but keep name) */ + return 1; + } + else if (findfield(L, objidx, level - 1)) { /* try recursively */ + lua_remove(L, -2); /* remove table (but keep name) */ + lua_pushliteral(L, "."); + lua_insert(L, -2); /* place '.' between the two names */ + lua_concat(L, 3); + return 1; + } + } + lua_pop(L, 1); /* remove value */ + } + return 0; /* not found */ +} + + +static int pushglobalfuncname (lua_State *L, lua_Debug *ar) { + int top = lua_gettop(L); + lua_getinfo(L, "f", ar); /* push function */ + lua_pushglobaltable(L); + if (findfield(L, top + 1, 2)) { + lua_copy(L, -1, top + 1); /* move name to proper place */ + lua_pop(L, 2); /* remove pushed values */ + return 1; + } + else { + lua_settop(L, top); /* remove function and global table */ + return 0; + } +} + + +static void pushfuncname (lua_State *L, lua_Debug *ar) { + if (*ar->namewhat != '\0') /* is there a name? */ + lua_pushfstring(L, "function " LUA_QS, ar->name); + else if (*ar->what == 'm') /* main? */ + lua_pushliteral(L, "main chunk"); + else if (*ar->what == 'C') { + if (pushglobalfuncname(L, ar)) { + lua_pushfstring(L, "function " LUA_QS, lua_tostring(L, -1)); + lua_remove(L, -2); /* remove name */ + } + else + lua_pushliteral(L, "?"); + } + else + lua_pushfstring(L, "function <%s:%d>", ar->short_src, ar->linedefined); +} + + +static int countlevels (lua_State *L) { + lua_Debug ar; + int li = 1, le = 1; + /* find an upper bound */ + while (lua_getstack(L, le, &ar)) { li = le; le *= 2; } + /* do a binary search */ + while (li < le) { + int m = (li + le)/2; + if (lua_getstack(L, m, &ar)) li = m + 1; + else le = m; + } + return le - 1; +} + + +LUALIB_API void luaL_traceback (lua_State *L, lua_State *L1, + const char *msg, int level) { + lua_Debug ar; + int top = lua_gettop(L); + int numlevels = countlevels(L1); + int mark = (numlevels > LEVELS1 + LEVELS2) ? LEVELS1 : 0; + if (msg) lua_pushfstring(L, "%s\n", msg); + lua_pushliteral(L, "stack traceback:"); + while (lua_getstack(L1, level++, &ar)) { + if (level == mark) { /* too many levels? */ + lua_pushliteral(L, "\n\t..."); /* add a '...' */ + level = numlevels - LEVELS2; /* and skip to last ones */ + } + else { + lua_getinfo(L1, "Slnt", &ar); + lua_pushfstring(L, "\n\t%s:", ar.short_src); + if (ar.currentline > 0) + lua_pushfstring(L, "%d:", ar.currentline); + lua_pushliteral(L, " in "); + pushfuncname(L, &ar); + if (ar.istailcall) + lua_pushliteral(L, "\n\t(...tail calls...)"); + lua_concat(L, lua_gettop(L) - top); + } + } + lua_concat(L, lua_gettop(L) - top); +} + +/* }====================================================== */ + + +/* +** {====================================================== +** Error-report functions +** ======================================================= +*/ + +LUALIB_API int luaL_argerror (lua_State *L, int narg, const char *extramsg) { + lua_Debug ar; + if (!lua_getstack(L, 0, &ar)) /* no stack frame? */ + return luaL_error(L, "bad argument #%d (%s)", narg, extramsg); + lua_getinfo(L, "n", &ar); + if (strcmp(ar.namewhat, "method") == 0) { + narg--; /* do not count `self' */ + if (narg == 0) /* error is in the self argument itself? */ + return luaL_error(L, "calling " LUA_QS " on bad self (%s)", + ar.name, extramsg); + } + if (ar.name == NULL) + ar.name = (pushglobalfuncname(L, &ar)) ? lua_tostring(L, -1) : "?"; + return luaL_error(L, "bad argument #%d to " LUA_QS " (%s)", + narg, ar.name, extramsg); +} + + +static int typeerror (lua_State *L, int narg, const char *tname) { + const char *msg = lua_pushfstring(L, "%s expected, got %s", + tname, luaL_typename(L, narg)); + return luaL_argerror(L, narg, msg); +} + + +static void tag_error (lua_State *L, int narg, int tag) { + typeerror(L, narg, lua_typename(L, tag)); +} + + +LUALIB_API void luaL_where (lua_State *L, int level) { + lua_Debug ar; + if (lua_getstack(L, level, &ar)) { /* check function at level */ + lua_getinfo(L, "Sl", &ar); /* get info about it */ + if (ar.currentline > 0) { /* is there info? */ + lua_pushfstring(L, "%s:%d: ", ar.short_src, ar.currentline); + return; + } + } + lua_pushliteral(L, ""); /* else, no information available... */ +} + + +LUALIB_API int luaL_error (lua_State *L, const char *fmt, ...) { + va_list argp; + va_start(argp, fmt); + luaL_where(L, 1); + lua_pushvfstring(L, fmt, argp); + va_end(argp); + lua_concat(L, 2); + return lua_error(L); +} + + +LUALIB_API int luaL_fileresult (lua_State *L, int stat, const char *fname) { + int en = errno; /* calls to Lua API may change this value */ + if (stat) { + lua_pushboolean(L, 1); + return 1; + } + else { + lua_pushnil(L); + if (fname) + lua_pushfstring(L, "%s: %s", fname, strerror(en)); + else + lua_pushstring(L, strerror(en)); + lua_pushinteger(L, en); + return 3; + } +} + + +#if !defined(inspectstat) /* { */ + +#if defined(LUA_USE_POSIX) + +#include + +/* +** use appropriate macros to interpret 'pclose' return status +*/ +#define inspectstat(stat,what) \ + if (WIFEXITED(stat)) { stat = WEXITSTATUS(stat); } \ + else if (WIFSIGNALED(stat)) { stat = WTERMSIG(stat); what = "signal"; } + +#else + +#define inspectstat(stat,what) /* no op */ + +#endif + +#endif /* } */ + + +LUALIB_API int luaL_execresult (lua_State *L, int stat) { + const char *what = "exit"; /* type of termination */ + if (stat == -1) /* error? */ + return luaL_fileresult(L, 0, NULL); + else { + inspectstat(stat, what); /* interpret result */ + if (*what == 'e' && stat == 0) /* successful termination? */ + lua_pushboolean(L, 1); + else + lua_pushnil(L); + lua_pushstring(L, what); + lua_pushinteger(L, stat); + return 3; /* return true/nil,what,code */ + } +} + +/* }====================================================== */ + + +/* +** {====================================================== +** Userdata's metatable manipulation +** ======================================================= +*/ + +LUALIB_API int luaL_newmetatable (lua_State *L, const char *tname) { + luaL_getmetatable(L, tname); /* try to get metatable */ + if (!lua_isnil(L, -1)) /* name already in use? */ + return 0; /* leave previous value on top, but return 0 */ + lua_pop(L, 1); + lua_newtable(L); /* create metatable */ + lua_pushvalue(L, -1); + lua_setfield(L, LUA_REGISTRYINDEX, tname); /* registry.name = metatable */ + return 1; +} + + +LUALIB_API void luaL_setmetatable (lua_State *L, const char *tname) { + luaL_getmetatable(L, tname); + lua_setmetatable(L, -2); +} + + +LUALIB_API void *luaL_testudata (lua_State *L, int ud, const char *tname) { + void *p = lua_touserdata(L, ud); + if (p != NULL) { /* value is a userdata? */ + if (lua_getmetatable(L, ud)) { /* does it have a metatable? */ + luaL_getmetatable(L, tname); /* get correct metatable */ + if (!lua_rawequal(L, -1, -2)) /* not the same? */ + p = NULL; /* value is a userdata with wrong metatable */ + lua_pop(L, 2); /* remove both metatables */ + return p; + } + } + return NULL; /* value is not a userdata with a metatable */ +} + + +LUALIB_API void *luaL_checkudata (lua_State *L, int ud, const char *tname) { + void *p = luaL_testudata(L, ud, tname); + if (p == NULL) typeerror(L, ud, tname); + return p; +} + +/* }====================================================== */ + + +/* +** {====================================================== +** Argument check functions +** ======================================================= +*/ + +LUALIB_API int luaL_checkoption (lua_State *L, int narg, const char *def, + const char *const lst[]) { + const char *name = (def) ? luaL_optstring(L, narg, def) : + luaL_checkstring(L, narg); + int i; + for (i=0; lst[i]; i++) + if (strcmp(lst[i], name) == 0) + return i; + return luaL_argerror(L, narg, + lua_pushfstring(L, "invalid option " LUA_QS, name)); +} + + +LUALIB_API void luaL_checkstack (lua_State *L, int space, const char *msg) { + /* keep some extra space to run error routines, if needed */ + const int extra = LUA_MINSTACK; + if (!lua_checkstack(L, space + extra)) { + if (msg) + luaL_error(L, "stack overflow (%s)", msg); + else + luaL_error(L, "stack overflow"); + } +} + + +LUALIB_API void luaL_checktype (lua_State *L, int narg, int t) { + if (lua_type(L, narg) != t) + tag_error(L, narg, t); +} + + +LUALIB_API void luaL_checkany (lua_State *L, int narg) { + if (lua_type(L, narg) == LUA_TNONE) + luaL_argerror(L, narg, "value expected"); +} + + +LUALIB_API const char *luaL_checklstring (lua_State *L, int narg, size_t *len) { + const char *s = lua_tolstring(L, narg, len); + if (!s) tag_error(L, narg, LUA_TSTRING); + return s; +} + + +LUALIB_API const char *luaL_optlstring (lua_State *L, int narg, + const char *def, size_t *len) { + if (lua_isnoneornil(L, narg)) { + if (len) + *len = (def ? strlen(def) : 0); + return def; + } + else return luaL_checklstring(L, narg, len); +} + + +LUALIB_API lua_Number luaL_checknumber (lua_State *L, int narg) { + int isnum; + lua_Number d = lua_tonumberx(L, narg, &isnum); + if (!isnum) + tag_error(L, narg, LUA_TNUMBER); + return d; +} + + +LUALIB_API lua_Number luaL_optnumber (lua_State *L, int narg, lua_Number def) { + return luaL_opt(L, luaL_checknumber, narg, def); +} + + +LUALIB_API lua_Integer luaL_checkinteger (lua_State *L, int narg) { + int isnum; + lua_Integer d = lua_tointegerx(L, narg, &isnum); + if (!isnum) + tag_error(L, narg, LUA_TNUMBER); + return d; +} + + +LUALIB_API lua_Unsigned luaL_checkunsigned (lua_State *L, int narg) { + int isnum; + lua_Unsigned d = lua_tounsignedx(L, narg, &isnum); + if (!isnum) + tag_error(L, narg, LUA_TNUMBER); + return d; +} + + +LUALIB_API lua_Integer luaL_optinteger (lua_State *L, int narg, + lua_Integer def) { + return luaL_opt(L, luaL_checkinteger, narg, def); +} + + +LUALIB_API lua_Unsigned luaL_optunsigned (lua_State *L, int narg, + lua_Unsigned def) { + return luaL_opt(L, luaL_checkunsigned, narg, def); +} + +/* }====================================================== */ + + +/* +** {====================================================== +** Generic Buffer manipulation +** ======================================================= +*/ + +/* +** check whether buffer is using a userdata on the stack as a temporary +** buffer +*/ +#define buffonstack(B) ((B)->b != (B)->initb) + + +/* +** returns a pointer to a free area with at least 'sz' bytes +*/ +LUALIB_API char *luaL_prepbuffsize (luaL_Buffer *B, size_t sz) { + lua_State *L = B->L; + if (B->size - B->n < sz) { /* not enough space? */ + char *newbuff; + size_t newsize = B->size * 2; /* double buffer size */ + if (newsize - B->n < sz) /* not big enough? */ + newsize = B->n + sz; + if (newsize < B->n || newsize - B->n < sz) + luaL_error(L, "buffer too large"); + /* create larger buffer */ + newbuff = (char *)lua_newuserdata(L, newsize * sizeof(char)); + /* move content to new buffer */ + memcpy(newbuff, B->b, B->n * sizeof(char)); + if (buffonstack(B)) + lua_remove(L, -2); /* remove old buffer */ + B->b = newbuff; + B->size = newsize; + } + return &B->b[B->n]; +} + + +LUALIB_API void luaL_addlstring (luaL_Buffer *B, const char *s, size_t l) { + char *b = luaL_prepbuffsize(B, l); + memcpy(b, s, l * sizeof(char)); + luaL_addsize(B, l); +} + + +LUALIB_API void luaL_addstring (luaL_Buffer *B, const char *s) { + luaL_addlstring(B, s, strlen(s)); +} + + +LUALIB_API void luaL_pushresult (luaL_Buffer *B) { + lua_State *L = B->L; + lua_pushlstring(L, B->b, B->n); + if (buffonstack(B)) + lua_remove(L, -2); /* remove old buffer */ +} + + +LUALIB_API void luaL_pushresultsize (luaL_Buffer *B, size_t sz) { + luaL_addsize(B, sz); + luaL_pushresult(B); +} + + +LUALIB_API void luaL_addvalue (luaL_Buffer *B) { + lua_State *L = B->L; + size_t l; + const char *s = lua_tolstring(L, -1, &l); + if (buffonstack(B)) + lua_insert(L, -2); /* put value below buffer */ + luaL_addlstring(B, s, l); + lua_remove(L, (buffonstack(B)) ? -2 : -1); /* remove value */ +} + + +LUALIB_API void luaL_buffinit (lua_State *L, luaL_Buffer *B) { + B->L = L; + B->b = B->initb; + B->n = 0; + B->size = LUAL_BUFFERSIZE; +} + + +LUALIB_API char *luaL_buffinitsize (lua_State *L, luaL_Buffer *B, size_t sz) { + luaL_buffinit(L, B); + return luaL_prepbuffsize(B, sz); +} + +/* }====================================================== */ + + +/* +** {====================================================== +** Reference system +** ======================================================= +*/ + +/* index of free-list header */ +#define freelist 0 + + +LUALIB_API int luaL_ref (lua_State *L, int t) { + int ref; + if (lua_isnil(L, -1)) { + lua_pop(L, 1); /* remove from stack */ + return LUA_REFNIL; /* `nil' has a unique fixed reference */ + } + t = lua_absindex(L, t); + lua_rawgeti(L, t, freelist); /* get first free element */ + ref = (int)lua_tointeger(L, -1); /* ref = t[freelist] */ + lua_pop(L, 1); /* remove it from stack */ + if (ref != 0) { /* any free element? */ + lua_rawgeti(L, t, ref); /* remove it from list */ + lua_rawseti(L, t, freelist); /* (t[freelist] = t[ref]) */ + } + else /* no free elements */ + ref = (int)lua_rawlen(L, t) + 1; /* get a new reference */ + lua_rawseti(L, t, ref); + return ref; +} + + +LUALIB_API void luaL_unref (lua_State *L, int t, int ref) { + if (ref >= 0) { + t = lua_absindex(L, t); + lua_rawgeti(L, t, freelist); + lua_rawseti(L, t, ref); /* t[ref] = t[freelist] */ + lua_pushinteger(L, ref); + lua_rawseti(L, t, freelist); /* t[freelist] = ref */ + } +} + +/* }====================================================== */ + + +/* +** {====================================================== +** Load functions +** ======================================================= +*/ + +typedef struct LoadF { + int n; /* number of pre-read characters */ + FILE *f; /* file being read */ + char buff[LUAL_BUFFERSIZE]; /* area for reading file */ +} LoadF; + + +static const char *getF (lua_State *L, void *ud, size_t *size) { + LoadF *lf = (LoadF *)ud; + (void)L; /* not used */ + if (lf->n > 0) { /* are there pre-read characters to be read? */ + *size = lf->n; /* return them (chars already in buffer) */ + lf->n = 0; /* no more pre-read characters */ + } + else { /* read a block from file */ + /* 'fread' can return > 0 *and* set the EOF flag. If next call to + 'getF' called 'fread', it might still wait for user input. + The next check avoids this problem. */ + if (feof(lf->f)) return NULL; + *size = fread(lf->buff, 1, sizeof(lf->buff), lf->f); /* read block */ + } + return lf->buff; +} + + +static int errfile (lua_State *L, const char *what, int fnameindex) { + const char *serr = strerror(errno); + const char *filename = lua_tostring(L, fnameindex) + 1; + lua_pushfstring(L, "cannot %s %s: %s", what, filename, serr); + lua_remove(L, fnameindex); + return LUA_ERRFILE; +} + + +static int skipBOM (LoadF *lf) { + const char *p = "\xEF\xBB\xBF"; /* Utf8 BOM mark */ + int c; + lf->n = 0; + do { + c = getc(lf->f); + if (c == EOF || c != *(const unsigned char *)p++) return c; + lf->buff[lf->n++] = c; /* to be read by the parser */ + } while (*p != '\0'); + lf->n = 0; /* prefix matched; discard it */ + return getc(lf->f); /* return next character */ +} + + +/* +** reads the first character of file 'f' and skips an optional BOM mark +** in its beginning plus its first line if it starts with '#'. Returns +** true if it skipped the first line. In any case, '*cp' has the +** first "valid" character of the file (after the optional BOM and +** a first-line comment). +*/ +static int skipcomment (LoadF *lf, int *cp) { + int c = *cp = skipBOM(lf); + if (c == '#') { /* first line is a comment (Unix exec. file)? */ + do { /* skip first line */ + c = getc(lf->f); + } while (c != EOF && c != '\n') ; + *cp = getc(lf->f); /* skip end-of-line, if present */ + return 1; /* there was a comment */ + } + else return 0; /* no comment */ +} + + +LUALIB_API int luaL_loadfilex (lua_State *L, const char *filename, + const char *mode) { + LoadF lf; + int status, readstatus; + int c; + int fnameindex = lua_gettop(L) + 1; /* index of filename on the stack */ + if (filename == NULL) { + lua_pushliteral(L, "=stdin"); + lf.f = stdin; + } + else { + lua_pushfstring(L, "@%s", filename); + lf.f = fopen(filename, "r"); + if (lf.f == NULL) return errfile(L, "open", fnameindex); + } + if (skipcomment(&lf, &c)) /* read initial portion */ + lf.buff[lf.n++] = '\n'; /* add line to correct line numbers */ + if (c == LUA_SIGNATURE[0] && filename) { /* binary file? */ + lf.f = freopen(filename, "rb", lf.f); /* reopen in binary mode */ + if (lf.f == NULL) return errfile(L, "reopen", fnameindex); + skipcomment(&lf, &c); /* re-read initial portion */ + } + if (c != EOF) + lf.buff[lf.n++] = c; /* 'c' is the first character of the stream */ + status = lua_load(L, getF, &lf, lua_tostring(L, -1), mode); + readstatus = ferror(lf.f); + if (filename) fclose(lf.f); /* close file (even in case of errors) */ + if (readstatus) { + lua_settop(L, fnameindex); /* ignore results from `lua_load' */ + return errfile(L, "read", fnameindex); + } + lua_remove(L, fnameindex); + return status; +} + + +typedef struct LoadS { + const char *s; + size_t size; +} LoadS; + + +static const char *getS (lua_State *L, void *ud, size_t *size) { + LoadS *ls = (LoadS *)ud; + (void)L; /* not used */ + if (ls->size == 0) return NULL; + *size = ls->size; + ls->size = 0; + return ls->s; +} + + +LUALIB_API int luaL_loadbufferx (lua_State *L, const char *buff, size_t size, + const char *name, const char *mode) { + LoadS ls; + ls.s = buff; + ls.size = size; + return lua_load(L, getS, &ls, name, mode); +} + + +LUALIB_API int luaL_loadstring (lua_State *L, const char *s) { + return luaL_loadbuffer(L, s, strlen(s), s); +} + +/* }====================================================== */ + + + +LUALIB_API int luaL_getmetafield (lua_State *L, int obj, const char *event) { + if (!lua_getmetatable(L, obj)) /* no metatable? */ + return 0; + lua_pushstring(L, event); + lua_rawget(L, -2); + if (lua_isnil(L, -1)) { + lua_pop(L, 2); /* remove metatable and metafield */ + return 0; + } + else { + lua_remove(L, -2); /* remove only metatable */ + return 1; + } +} + + +LUALIB_API int luaL_callmeta (lua_State *L, int obj, const char *event) { + obj = lua_absindex(L, obj); + if (!luaL_getmetafield(L, obj, event)) /* no metafield? */ + return 0; + lua_pushvalue(L, obj); + lua_call(L, 1, 1); + return 1; +} + + +LUALIB_API int luaL_len (lua_State *L, int idx) { + int l; + int isnum; + lua_len(L, idx); + l = (int)lua_tointegerx(L, -1, &isnum); + if (!isnum) + luaL_error(L, "object length is not a number"); + lua_pop(L, 1); /* remove object */ + return l; +} + + +LUALIB_API const char *luaL_tolstring (lua_State *L, int idx, size_t *len) { + if (!luaL_callmeta(L, idx, "__tostring")) { /* no metafield? */ + switch (lua_type(L, idx)) { + case LUA_TNUMBER: + case LUA_TSTRING: + lua_pushvalue(L, idx); + break; + case LUA_TBOOLEAN: + lua_pushstring(L, (lua_toboolean(L, idx) ? "true" : "false")); + break; + case LUA_TNIL: + lua_pushliteral(L, "nil"); + break; + default: + lua_pushfstring(L, "%s: %p", luaL_typename(L, idx), + lua_topointer(L, idx)); + break; + } + } + return lua_tolstring(L, -1, len); +} + + +/* +** {====================================================== +** Compatibility with 5.1 module functions +** ======================================================= +*/ +#if defined(LUA_COMPAT_MODULE) + +static const char *luaL_findtable (lua_State *L, int idx, + const char *fname, int szhint) { + const char *e; + if (idx) lua_pushvalue(L, idx); + do { + e = strchr(fname, '.'); + if (e == NULL) e = fname + strlen(fname); + lua_pushlstring(L, fname, e - fname); + lua_rawget(L, -2); + if (lua_isnil(L, -1)) { /* no such field? */ + lua_pop(L, 1); /* remove this nil */ + lua_createtable(L, 0, (*e == '.' ? 1 : szhint)); /* new table for field */ + lua_pushlstring(L, fname, e - fname); + lua_pushvalue(L, -2); + lua_settable(L, -4); /* set new table into field */ + } + else if (!lua_istable(L, -1)) { /* field has a non-table value? */ + lua_pop(L, 2); /* remove table and value */ + return fname; /* return problematic part of the name */ + } + lua_remove(L, -2); /* remove previous table */ + fname = e + 1; + } while (*e == '.'); + return NULL; +} + + +/* +** Count number of elements in a luaL_Reg list. +*/ +static int libsize (const luaL_Reg *l) { + int size = 0; + for (; l && l->name; l++) size++; + return size; +} + + +/* +** Find or create a module table with a given name. The function +** first looks at the _LOADED table and, if that fails, try a +** global variable with that name. In any case, leaves on the stack +** the module table. +*/ +LUALIB_API void luaL_pushmodule (lua_State *L, const char *modname, + int sizehint) { + luaL_findtable(L, LUA_REGISTRYINDEX, "_LOADED", 1); /* get _LOADED table */ + lua_getfield(L, -1, modname); /* get _LOADED[modname] */ + if (!lua_istable(L, -1)) { /* not found? */ + lua_pop(L, 1); /* remove previous result */ + /* try global variable (and create one if it does not exist) */ + lua_pushglobaltable(L); + if (luaL_findtable(L, 0, modname, sizehint) != NULL) + luaL_error(L, "name conflict for module " LUA_QS, modname); + lua_pushvalue(L, -1); + lua_setfield(L, -3, modname); /* _LOADED[modname] = new table */ + } + lua_remove(L, -2); /* remove _LOADED table */ +} + + +LUALIB_API void luaL_openlib (lua_State *L, const char *libname, + const luaL_Reg *l, int nup) { + luaL_checkversion(L); + if (libname) { + luaL_pushmodule(L, libname, libsize(l)); /* get/create library table */ + lua_insert(L, -(nup + 1)); /* move library table to below upvalues */ + } + if (l) + luaL_setfuncs(L, l, nup); + else + lua_pop(L, nup); /* remove upvalues */ +} + +#endif +/* }====================================================== */ + +/* +** set functions from list 'l' into table at top - 'nup'; each +** function gets the 'nup' elements at the top as upvalues. +** Returns with only the table at the stack. +*/ +LUALIB_API void luaL_setfuncs (lua_State *L, const luaL_Reg *l, int nup) { + luaL_checkversion(L); + luaL_checkstack(L, nup, "too many upvalues"); + for (; l->name != NULL; l++) { /* fill the table with given functions */ + int i; + for (i = 0; i < nup; i++) /* copy upvalues to the top */ + lua_pushvalue(L, -nup); + lua_pushcclosure(L, l->func, nup); /* closure with those upvalues */ + lua_setfield(L, -(nup + 2), l->name); + } + lua_pop(L, nup); /* remove upvalues */ +} + + +/* +** ensure that stack[idx][fname] has a table and push that table +** into the stack +*/ +LUALIB_API int luaL_getsubtable (lua_State *L, int idx, const char *fname) { + lua_getfield(L, idx, fname); + if (lua_istable(L, -1)) return 1; /* table already there */ + else { + lua_pop(L, 1); /* remove previous result */ + idx = lua_absindex(L, idx); + lua_newtable(L); + lua_pushvalue(L, -1); /* copy to be left at top */ + lua_setfield(L, idx, fname); /* assign new table to field */ + return 0; /* false, because did not find table there */ + } +} + + +/* +** stripped-down 'require'. Calls 'openf' to open a module, +** registers the result in 'package.loaded' table and, if 'glb' +** is true, also registers the result in the global table. +** Leaves resulting module on the top. +*/ +LUALIB_API void luaL_requiref (lua_State *L, const char *modname, + lua_CFunction openf, int glb) { + lua_pushcfunction(L, openf); + lua_pushstring(L, modname); /* argument to open function */ + lua_call(L, 1, 1); /* open module */ + luaL_getsubtable(L, LUA_REGISTRYINDEX, "_LOADED"); + lua_pushvalue(L, -2); /* make copy of module (call result) */ + lua_setfield(L, -2, modname); /* _LOADED[modname] = module */ + lua_pop(L, 1); /* remove _LOADED table */ + if (glb) { + lua_pushvalue(L, -1); /* copy of 'mod' */ + lua_setglobal(L, modname); /* _G[modname] = module */ + } +} + + +LUALIB_API const char *luaL_gsub (lua_State *L, const char *s, const char *p, + const char *r) { + const char *wild; + size_t l = strlen(p); + luaL_Buffer b; + luaL_buffinit(L, &b); + while ((wild = strstr(s, p)) != NULL) { + luaL_addlstring(&b, s, wild - s); /* push prefix */ + luaL_addstring(&b, r); /* push replacement in place of pattern */ + s = wild + l; /* continue after `p' */ + } + luaL_addstring(&b, s); /* push last suffix */ + luaL_pushresult(&b); + return lua_tostring(L, -1); +} + + +static void *l_alloc (void *ud, void *ptr, size_t osize, size_t nsize) { + (void)ud; (void)osize; /* not used */ + if (nsize == 0) { + free(ptr); + return NULL; + } + else + return realloc(ptr, nsize); +} + + +static int panic (lua_State *L) { + luai_writestringerror("PANIC: unprotected error in call to Lua API (%s)\n", + lua_tostring(L, -1)); + return 0; /* return to Lua to abort */ +} + + +LUALIB_API lua_State *luaL_newstate (void) { + lua_State *L = lua_newstate(l_alloc, NULL); + if (L) lua_atpanic(L, &panic); + return L; +} + + +LUALIB_API void luaL_checkversion_ (lua_State *L, lua_Number ver) { + const lua_Number *v = lua_version(L); + if (v != lua_version(NULL)) + luaL_error(L, "multiple Lua VMs detected"); + else if (*v != ver) + luaL_error(L, "version mismatch: app. needs %f, Lua core provides %f", + ver, *v); + /* check conversions number -> integer types */ + lua_pushnumber(L, -(lua_Number)0x1234); + if (lua_tointeger(L, -1) != -0x1234 || + lua_tounsigned(L, -1) != (lua_Unsigned)-0x1234) + luaL_error(L, "bad conversion number->int;" + " must recompile Lua with proper settings"); + lua_pop(L, 1); +} + diff --git a/lua-5.2.4/src/lauxlib.h b/lua-5.2.4/src/lauxlib.h new file mode 100644 index 000000000..0fb023b8e --- /dev/null +++ b/lua-5.2.4/src/lauxlib.h @@ -0,0 +1,212 @@ +/* +** $Id: lauxlib.h,v 1.120.1.1 2013/04/12 18:48:47 roberto Exp $ +** Auxiliary functions for building Lua libraries +** See Copyright Notice in lua.h +*/ + + +#ifndef lauxlib_h +#define lauxlib_h + + +#include +#include + +#include "lua.h" + + + +/* extra error code for `luaL_load' */ +#define LUA_ERRFILE (LUA_ERRERR+1) + + +typedef struct luaL_Reg { + const char *name; + lua_CFunction func; +} luaL_Reg; + + +LUALIB_API void (luaL_checkversion_) (lua_State *L, lua_Number ver); +#define luaL_checkversion(L) luaL_checkversion_(L, LUA_VERSION_NUM) + +LUALIB_API int (luaL_getmetafield) (lua_State *L, int obj, const char *e); +LUALIB_API int (luaL_callmeta) (lua_State *L, int obj, const char *e); +LUALIB_API const char *(luaL_tolstring) (lua_State *L, int idx, size_t *len); +LUALIB_API int (luaL_argerror) (lua_State *L, int numarg, const char *extramsg); +LUALIB_API const char *(luaL_checklstring) (lua_State *L, int numArg, + size_t *l); +LUALIB_API const char *(luaL_optlstring) (lua_State *L, int numArg, + const char *def, size_t *l); +LUALIB_API lua_Number (luaL_checknumber) (lua_State *L, int numArg); +LUALIB_API lua_Number (luaL_optnumber) (lua_State *L, int nArg, lua_Number def); + +LUALIB_API lua_Integer (luaL_checkinteger) (lua_State *L, int numArg); +LUALIB_API lua_Integer (luaL_optinteger) (lua_State *L, int nArg, + lua_Integer def); +LUALIB_API lua_Unsigned (luaL_checkunsigned) (lua_State *L, int numArg); +LUALIB_API lua_Unsigned (luaL_optunsigned) (lua_State *L, int numArg, + lua_Unsigned def); + +LUALIB_API void (luaL_checkstack) (lua_State *L, int sz, const char *msg); +LUALIB_API void (luaL_checktype) (lua_State *L, int narg, int t); +LUALIB_API void (luaL_checkany) (lua_State *L, int narg); + +LUALIB_API int (luaL_newmetatable) (lua_State *L, const char *tname); +LUALIB_API void (luaL_setmetatable) (lua_State *L, const char *tname); +LUALIB_API void *(luaL_testudata) (lua_State *L, int ud, const char *tname); +LUALIB_API void *(luaL_checkudata) (lua_State *L, int ud, const char *tname); + +LUALIB_API void (luaL_where) (lua_State *L, int lvl); +LUALIB_API int (luaL_error) (lua_State *L, const char *fmt, ...); + +LUALIB_API int (luaL_checkoption) (lua_State *L, int narg, const char *def, + const char *const lst[]); + +LUALIB_API int (luaL_fileresult) (lua_State *L, int stat, const char *fname); +LUALIB_API int (luaL_execresult) (lua_State *L, int stat); + +/* pre-defined references */ +#define LUA_NOREF (-2) +#define LUA_REFNIL (-1) + +LUALIB_API int (luaL_ref) (lua_State *L, int t); +LUALIB_API void (luaL_unref) (lua_State *L, int t, int ref); + +LUALIB_API int (luaL_loadfilex) (lua_State *L, const char *filename, + const char *mode); + +#define luaL_loadfile(L,f) luaL_loadfilex(L,f,NULL) + +LUALIB_API int (luaL_loadbufferx) (lua_State *L, const char *buff, size_t sz, + const char *name, const char *mode); +LUALIB_API int (luaL_loadstring) (lua_State *L, const char *s); + +LUALIB_API lua_State *(luaL_newstate) (void); + +LUALIB_API int (luaL_len) (lua_State *L, int idx); + +LUALIB_API const char *(luaL_gsub) (lua_State *L, const char *s, const char *p, + const char *r); + +LUALIB_API void (luaL_setfuncs) (lua_State *L, const luaL_Reg *l, int nup); + +LUALIB_API int (luaL_getsubtable) (lua_State *L, int idx, const char *fname); + +LUALIB_API void (luaL_traceback) (lua_State *L, lua_State *L1, + const char *msg, int level); + +LUALIB_API void (luaL_requiref) (lua_State *L, const char *modname, + lua_CFunction openf, int glb); + +/* +** =============================================================== +** some useful macros +** =============================================================== +*/ + + +#define luaL_newlibtable(L,l) \ + lua_createtable(L, 0, sizeof(l)/sizeof((l)[0]) - 1) + +#define luaL_newlib(L,l) (luaL_newlibtable(L,l), luaL_setfuncs(L,l,0)) + +#define luaL_argcheck(L, cond,numarg,extramsg) \ + ((void)((cond) || luaL_argerror(L, (numarg), (extramsg)))) +#define luaL_checkstring(L,n) (luaL_checklstring(L, (n), NULL)) +#define luaL_optstring(L,n,d) (luaL_optlstring(L, (n), (d), NULL)) +#define luaL_checkint(L,n) ((int)luaL_checkinteger(L, (n))) +#define luaL_optint(L,n,d) ((int)luaL_optinteger(L, (n), (d))) +#define luaL_checklong(L,n) ((long)luaL_checkinteger(L, (n))) +#define luaL_optlong(L,n,d) ((long)luaL_optinteger(L, (n), (d))) + +#define luaL_typename(L,i) lua_typename(L, lua_type(L,(i))) + +#define luaL_dofile(L, fn) \ + (luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0)) + +#define luaL_dostring(L, s) \ + (luaL_loadstring(L, s) || lua_pcall(L, 0, LUA_MULTRET, 0)) + +#define luaL_getmetatable(L,n) (lua_getfield(L, LUA_REGISTRYINDEX, (n))) + +#define luaL_opt(L,f,n,d) (lua_isnoneornil(L,(n)) ? (d) : f(L,(n))) + +#define luaL_loadbuffer(L,s,sz,n) luaL_loadbufferx(L,s,sz,n,NULL) + + +/* +** {====================================================== +** Generic Buffer manipulation +** ======================================================= +*/ + +typedef struct luaL_Buffer { + char *b; /* buffer address */ + size_t size; /* buffer size */ + size_t n; /* number of characters in buffer */ + lua_State *L; + char initb[LUAL_BUFFERSIZE]; /* initial buffer */ +} luaL_Buffer; + + +#define luaL_addchar(B,c) \ + ((void)((B)->n < (B)->size || luaL_prepbuffsize((B), 1)), \ + ((B)->b[(B)->n++] = (c))) + +#define luaL_addsize(B,s) ((B)->n += (s)) + +LUALIB_API void (luaL_buffinit) (lua_State *L, luaL_Buffer *B); +LUALIB_API char *(luaL_prepbuffsize) (luaL_Buffer *B, size_t sz); +LUALIB_API void (luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l); +LUALIB_API void (luaL_addstring) (luaL_Buffer *B, const char *s); +LUALIB_API void (luaL_addvalue) (luaL_Buffer *B); +LUALIB_API void (luaL_pushresult) (luaL_Buffer *B); +LUALIB_API void (luaL_pushresultsize) (luaL_Buffer *B, size_t sz); +LUALIB_API char *(luaL_buffinitsize) (lua_State *L, luaL_Buffer *B, size_t sz); + +#define luaL_prepbuffer(B) luaL_prepbuffsize(B, LUAL_BUFFERSIZE) + +/* }====================================================== */ + + + +/* +** {====================================================== +** File handles for IO library +** ======================================================= +*/ + +/* +** A file handle is a userdata with metatable 'LUA_FILEHANDLE' and +** initial structure 'luaL_Stream' (it may contain other fields +** after that initial structure). +*/ + +#define LUA_FILEHANDLE "FILE*" + + +typedef struct luaL_Stream { + FILE *f; /* stream (NULL for incompletely created streams) */ + lua_CFunction closef; /* to close stream (NULL for closed streams) */ +} luaL_Stream; + +/* }====================================================== */ + + + +/* compatibility with old module system */ +#if defined(LUA_COMPAT_MODULE) + +LUALIB_API void (luaL_pushmodule) (lua_State *L, const char *modname, + int sizehint); +LUALIB_API void (luaL_openlib) (lua_State *L, const char *libname, + const luaL_Reg *l, int nup); + +#define luaL_register(L,n,l) (luaL_openlib(L,(n),(l),0)) + +#endif + + +#endif + + diff --git a/lua-5.2.4/src/lbaselib.c b/lua-5.2.4/src/lbaselib.c new file mode 100644 index 000000000..5255b3cd9 --- /dev/null +++ b/lua-5.2.4/src/lbaselib.c @@ -0,0 +1,458 @@ +/* +** $Id: lbaselib.c,v 1.276.1.1 2013/04/12 18:48:47 roberto Exp $ +** Basic library +** See Copyright Notice in lua.h +*/ + + + +#include +#include +#include +#include + +#define lbaselib_c +#define LUA_LIB + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +static int luaB_print (lua_State *L) { + int n = lua_gettop(L); /* number of arguments */ + int i; + lua_getglobal(L, "tostring"); + for (i=1; i<=n; i++) { + const char *s; + size_t l; + lua_pushvalue(L, -1); /* function to be called */ + lua_pushvalue(L, i); /* value to print */ + lua_call(L, 1, 1); + s = lua_tolstring(L, -1, &l); /* get result */ + if (s == NULL) + return luaL_error(L, + LUA_QL("tostring") " must return a string to " LUA_QL("print")); + if (i>1) luai_writestring("\t", 1); + luai_writestring(s, l); + lua_pop(L, 1); /* pop result */ + } + luai_writeline(); + return 0; +} + + +#define SPACECHARS " \f\n\r\t\v" + +static int luaB_tonumber (lua_State *L) { + if (lua_isnoneornil(L, 2)) { /* standard conversion */ + int isnum; + lua_Number n = lua_tonumberx(L, 1, &isnum); + if (isnum) { + lua_pushnumber(L, n); + return 1; + } /* else not a number; must be something */ + luaL_checkany(L, 1); + } + else { + size_t l; + const char *s = luaL_checklstring(L, 1, &l); + const char *e = s + l; /* end point for 's' */ + int base = luaL_checkint(L, 2); + int neg = 0; + luaL_argcheck(L, 2 <= base && base <= 36, 2, "base out of range"); + s += strspn(s, SPACECHARS); /* skip initial spaces */ + if (*s == '-') { s++; neg = 1; } /* handle signal */ + else if (*s == '+') s++; + if (isalnum((unsigned char)*s)) { + lua_Number n = 0; + do { + int digit = (isdigit((unsigned char)*s)) ? *s - '0' + : toupper((unsigned char)*s) - 'A' + 10; + if (digit >= base) break; /* invalid numeral; force a fail */ + n = n * (lua_Number)base + (lua_Number)digit; + s++; + } while (isalnum((unsigned char)*s)); + s += strspn(s, SPACECHARS); /* skip trailing spaces */ + if (s == e) { /* no invalid trailing characters? */ + lua_pushnumber(L, (neg) ? -n : n); + return 1; + } /* else not a number */ + } /* else not a number */ + } + lua_pushnil(L); /* not a number */ + return 1; +} + + +static int luaB_error (lua_State *L) { + int level = luaL_optint(L, 2, 1); + lua_settop(L, 1); + if (lua_isstring(L, 1) && level > 0) { /* add extra information? */ + luaL_where(L, level); + lua_pushvalue(L, 1); + lua_concat(L, 2); + } + return lua_error(L); +} + + +static int luaB_getmetatable (lua_State *L) { + luaL_checkany(L, 1); + if (!lua_getmetatable(L, 1)) { + lua_pushnil(L); + return 1; /* no metatable */ + } + luaL_getmetafield(L, 1, "__metatable"); + return 1; /* returns either __metatable field (if present) or metatable */ +} + + +static int luaB_setmetatable (lua_State *L) { + int t = lua_type(L, 2); + luaL_checktype(L, 1, LUA_TTABLE); + luaL_argcheck(L, t == LUA_TNIL || t == LUA_TTABLE, 2, + "nil or table expected"); + if (luaL_getmetafield(L, 1, "__metatable")) + return luaL_error(L, "cannot change a protected metatable"); + lua_settop(L, 2); + lua_setmetatable(L, 1); + return 1; +} + + +static int luaB_rawequal (lua_State *L) { + luaL_checkany(L, 1); + luaL_checkany(L, 2); + lua_pushboolean(L, lua_rawequal(L, 1, 2)); + return 1; +} + + +static int luaB_rawlen (lua_State *L) { + int t = lua_type(L, 1); + luaL_argcheck(L, t == LUA_TTABLE || t == LUA_TSTRING, 1, + "table or string expected"); + lua_pushinteger(L, lua_rawlen(L, 1)); + return 1; +} + + +static int luaB_rawget (lua_State *L) { + luaL_checktype(L, 1, LUA_TTABLE); + luaL_checkany(L, 2); + lua_settop(L, 2); + lua_rawget(L, 1); + return 1; +} + +static int luaB_rawset (lua_State *L) { + luaL_checktype(L, 1, LUA_TTABLE); + luaL_checkany(L, 2); + luaL_checkany(L, 3); + lua_settop(L, 3); + lua_rawset(L, 1); + return 1; +} + + +static int luaB_collectgarbage (lua_State *L) { + static const char *const opts[] = {"stop", "restart", "collect", + "count", "step", "setpause", "setstepmul", + "setmajorinc", "isrunning", "generational", "incremental", NULL}; + static const int optsnum[] = {LUA_GCSTOP, LUA_GCRESTART, LUA_GCCOLLECT, + LUA_GCCOUNT, LUA_GCSTEP, LUA_GCSETPAUSE, LUA_GCSETSTEPMUL, + LUA_GCSETMAJORINC, LUA_GCISRUNNING, LUA_GCGEN, LUA_GCINC}; + int o = optsnum[luaL_checkoption(L, 1, "collect", opts)]; + int ex = luaL_optint(L, 2, 0); + int res = lua_gc(L, o, ex); + switch (o) { + case LUA_GCCOUNT: { + int b = lua_gc(L, LUA_GCCOUNTB, 0); + lua_pushnumber(L, res + ((lua_Number)b/1024)); + lua_pushinteger(L, b); + return 2; + } + case LUA_GCSTEP: case LUA_GCISRUNNING: { + lua_pushboolean(L, res); + return 1; + } + default: { + lua_pushinteger(L, res); + return 1; + } + } +} + + +static int luaB_type (lua_State *L) { + luaL_checkany(L, 1); + lua_pushstring(L, luaL_typename(L, 1)); + return 1; +} + + +static int pairsmeta (lua_State *L, const char *method, int iszero, + lua_CFunction iter) { + if (!luaL_getmetafield(L, 1, method)) { /* no metamethod? */ + luaL_checktype(L, 1, LUA_TTABLE); /* argument must be a table */ + lua_pushcfunction(L, iter); /* will return generator, */ + lua_pushvalue(L, 1); /* state, */ + if (iszero) lua_pushinteger(L, 0); /* and initial value */ + else lua_pushnil(L); + } + else { + lua_pushvalue(L, 1); /* argument 'self' to metamethod */ + lua_call(L, 1, 3); /* get 3 values from metamethod */ + } + return 3; +} + + +static int luaB_next (lua_State *L) { + luaL_checktype(L, 1, LUA_TTABLE); + lua_settop(L, 2); /* create a 2nd argument if there isn't one */ + if (lua_next(L, 1)) + return 2; + else { + lua_pushnil(L); + return 1; + } +} + + +static int luaB_pairs (lua_State *L) { + return pairsmeta(L, "__pairs", 0, luaB_next); +} + + +static int ipairsaux (lua_State *L) { + int i = luaL_checkint(L, 2); + luaL_checktype(L, 1, LUA_TTABLE); + i++; /* next value */ + lua_pushinteger(L, i); + lua_rawgeti(L, 1, i); + return (lua_isnil(L, -1)) ? 1 : 2; +} + + +static int luaB_ipairs (lua_State *L) { + return pairsmeta(L, "__ipairs", 1, ipairsaux); +} + + +static int load_aux (lua_State *L, int status, int envidx) { + if (status == LUA_OK) { + if (envidx != 0) { /* 'env' parameter? */ + lua_pushvalue(L, envidx); /* environment for loaded function */ + if (!lua_setupvalue(L, -2, 1)) /* set it as 1st upvalue */ + lua_pop(L, 1); /* remove 'env' if not used by previous call */ + } + return 1; + } + else { /* error (message is on top of the stack) */ + lua_pushnil(L); + lua_insert(L, -2); /* put before error message */ + return 2; /* return nil plus error message */ + } +} + + +static int luaB_loadfile (lua_State *L) { + const char *fname = luaL_optstring(L, 1, NULL); + const char *mode = luaL_optstring(L, 2, NULL); + int env = (!lua_isnone(L, 3) ? 3 : 0); /* 'env' index or 0 if no 'env' */ + int status = luaL_loadfilex(L, fname, mode); + return load_aux(L, status, env); +} + + +/* +** {====================================================== +** Generic Read function +** ======================================================= +*/ + + +/* +** reserved slot, above all arguments, to hold a copy of the returned +** string to avoid it being collected while parsed. 'load' has four +** optional arguments (chunk, source name, mode, and environment). +*/ +#define RESERVEDSLOT 5 + + +/* +** Reader for generic `load' function: `lua_load' uses the +** stack for internal stuff, so the reader cannot change the +** stack top. Instead, it keeps its resulting string in a +** reserved slot inside the stack. +*/ +static const char *generic_reader (lua_State *L, void *ud, size_t *size) { + (void)(ud); /* not used */ + luaL_checkstack(L, 2, "too many nested functions"); + lua_pushvalue(L, 1); /* get function */ + lua_call(L, 0, 1); /* call it */ + if (lua_isnil(L, -1)) { + lua_pop(L, 1); /* pop result */ + *size = 0; + return NULL; + } + else if (!lua_isstring(L, -1)) + luaL_error(L, "reader function must return a string"); + lua_replace(L, RESERVEDSLOT); /* save string in reserved slot */ + return lua_tolstring(L, RESERVEDSLOT, size); +} + + +static int luaB_load (lua_State *L) { + int status; + size_t l; + const char *s = lua_tolstring(L, 1, &l); + const char *mode = luaL_optstring(L, 3, "bt"); + int env = (!lua_isnone(L, 4) ? 4 : 0); /* 'env' index or 0 if no 'env' */ + if (s != NULL) { /* loading a string? */ + const char *chunkname = luaL_optstring(L, 2, s); + status = luaL_loadbufferx(L, s, l, chunkname, mode); + } + else { /* loading from a reader function */ + const char *chunkname = luaL_optstring(L, 2, "=(load)"); + luaL_checktype(L, 1, LUA_TFUNCTION); + lua_settop(L, RESERVEDSLOT); /* create reserved slot */ + status = lua_load(L, generic_reader, NULL, chunkname, mode); + } + return load_aux(L, status, env); +} + +/* }====================================================== */ + + +static int dofilecont (lua_State *L) { + return lua_gettop(L) - 1; +} + + +static int luaB_dofile (lua_State *L) { + const char *fname = luaL_optstring(L, 1, NULL); + lua_settop(L, 1); + if (luaL_loadfile(L, fname) != LUA_OK) + return lua_error(L); + lua_callk(L, 0, LUA_MULTRET, 0, dofilecont); + return dofilecont(L); +} + + +static int luaB_assert (lua_State *L) { + if (!lua_toboolean(L, 1)) + return luaL_error(L, "%s", luaL_optstring(L, 2, "assertion failed!")); + return lua_gettop(L); +} + + +static int luaB_select (lua_State *L) { + int n = lua_gettop(L); + if (lua_type(L, 1) == LUA_TSTRING && *lua_tostring(L, 1) == '#') { + lua_pushinteger(L, n-1); + return 1; + } + else { + int i = luaL_checkint(L, 1); + if (i < 0) i = n + i; + else if (i > n) i = n; + luaL_argcheck(L, 1 <= i, 1, "index out of range"); + return n - i; + } +} + + +static int finishpcall (lua_State *L, int status) { + if (!lua_checkstack(L, 1)) { /* no space for extra boolean? */ + lua_settop(L, 0); /* create space for return values */ + lua_pushboolean(L, 0); + lua_pushstring(L, "stack overflow"); + return 2; /* return false, msg */ + } + lua_pushboolean(L, status); /* first result (status) */ + lua_replace(L, 1); /* put first result in first slot */ + return lua_gettop(L); +} + + +static int pcallcont (lua_State *L) { + int status = lua_getctx(L, NULL); + return finishpcall(L, (status == LUA_YIELD)); +} + + +static int luaB_pcall (lua_State *L) { + int status; + luaL_checkany(L, 1); + lua_pushnil(L); + lua_insert(L, 1); /* create space for status result */ + status = lua_pcallk(L, lua_gettop(L) - 2, LUA_MULTRET, 0, 0, pcallcont); + return finishpcall(L, (status == LUA_OK)); +} + + +static int luaB_xpcall (lua_State *L) { + int status; + int n = lua_gettop(L); + luaL_argcheck(L, n >= 2, 2, "value expected"); + lua_pushvalue(L, 1); /* exchange function... */ + lua_copy(L, 2, 1); /* ...and error handler */ + lua_replace(L, 2); + status = lua_pcallk(L, n - 2, LUA_MULTRET, 1, 0, pcallcont); + return finishpcall(L, (status == LUA_OK)); +} + + +static int luaB_tostring (lua_State *L) { + luaL_checkany(L, 1); + luaL_tolstring(L, 1, NULL); + return 1; +} + + +static const luaL_Reg base_funcs[] = { + {"assert", luaB_assert}, + {"collectgarbage", luaB_collectgarbage}, + {"dofile", luaB_dofile}, + {"error", luaB_error}, + {"getmetatable", luaB_getmetatable}, + {"ipairs", luaB_ipairs}, + {"loadfile", luaB_loadfile}, + {"load", luaB_load}, +#if defined(LUA_COMPAT_LOADSTRING) + {"loadstring", luaB_load}, +#endif + {"next", luaB_next}, + {"pairs", luaB_pairs}, + {"pcall", luaB_pcall}, + {"print", luaB_print}, + {"rawequal", luaB_rawequal}, + {"rawlen", luaB_rawlen}, + {"rawget", luaB_rawget}, + {"rawset", luaB_rawset}, + {"select", luaB_select}, + {"setmetatable", luaB_setmetatable}, + {"tonumber", luaB_tonumber}, + {"tostring", luaB_tostring}, + {"type", luaB_type}, + {"xpcall", luaB_xpcall}, + {NULL, NULL} +}; + + +LUAMOD_API int luaopen_base (lua_State *L) { + /* set global _G */ + lua_pushglobaltable(L); + lua_pushglobaltable(L); + lua_setfield(L, -2, "_G"); + /* open lib into global table */ + luaL_setfuncs(L, base_funcs, 0); + lua_pushliteral(L, LUA_VERSION); + lua_setfield(L, -2, "_VERSION"); /* set global _VERSION */ + return 1; +} + diff --git a/lua-5.2.4/src/lbitlib.c b/lua-5.2.4/src/lbitlib.c new file mode 100644 index 000000000..31c7b66f1 --- /dev/null +++ b/lua-5.2.4/src/lbitlib.c @@ -0,0 +1,212 @@ +/* +** $Id: lbitlib.c,v 1.18.1.2 2013/07/09 18:01:41 roberto Exp $ +** Standard library for bitwise operations +** See Copyright Notice in lua.h +*/ + +#define lbitlib_c +#define LUA_LIB + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +/* number of bits to consider in a number */ +#if !defined(LUA_NBITS) +#define LUA_NBITS 32 +#endif + + +#define ALLONES (~(((~(lua_Unsigned)0) << (LUA_NBITS - 1)) << 1)) + +/* macro to trim extra bits */ +#define trim(x) ((x) & ALLONES) + + +/* builds a number with 'n' ones (1 <= n <= LUA_NBITS) */ +#define mask(n) (~((ALLONES << 1) << ((n) - 1))) + + +typedef lua_Unsigned b_uint; + + + +static b_uint andaux (lua_State *L) { + int i, n = lua_gettop(L); + b_uint r = ~(b_uint)0; + for (i = 1; i <= n; i++) + r &= luaL_checkunsigned(L, i); + return trim(r); +} + + +static int b_and (lua_State *L) { + b_uint r = andaux(L); + lua_pushunsigned(L, r); + return 1; +} + + +static int b_test (lua_State *L) { + b_uint r = andaux(L); + lua_pushboolean(L, r != 0); + return 1; +} + + +static int b_or (lua_State *L) { + int i, n = lua_gettop(L); + b_uint r = 0; + for (i = 1; i <= n; i++) + r |= luaL_checkunsigned(L, i); + lua_pushunsigned(L, trim(r)); + return 1; +} + + +static int b_xor (lua_State *L) { + int i, n = lua_gettop(L); + b_uint r = 0; + for (i = 1; i <= n; i++) + r ^= luaL_checkunsigned(L, i); + lua_pushunsigned(L, trim(r)); + return 1; +} + + +static int b_not (lua_State *L) { + b_uint r = ~luaL_checkunsigned(L, 1); + lua_pushunsigned(L, trim(r)); + return 1; +} + + +static int b_shift (lua_State *L, b_uint r, int i) { + if (i < 0) { /* shift right? */ + i = -i; + r = trim(r); + if (i >= LUA_NBITS) r = 0; + else r >>= i; + } + else { /* shift left */ + if (i >= LUA_NBITS) r = 0; + else r <<= i; + r = trim(r); + } + lua_pushunsigned(L, r); + return 1; +} + + +static int b_lshift (lua_State *L) { + return b_shift(L, luaL_checkunsigned(L, 1), luaL_checkint(L, 2)); +} + + +static int b_rshift (lua_State *L) { + return b_shift(L, luaL_checkunsigned(L, 1), -luaL_checkint(L, 2)); +} + + +static int b_arshift (lua_State *L) { + b_uint r = luaL_checkunsigned(L, 1); + int i = luaL_checkint(L, 2); + if (i < 0 || !(r & ((b_uint)1 << (LUA_NBITS - 1)))) + return b_shift(L, r, -i); + else { /* arithmetic shift for 'negative' number */ + if (i >= LUA_NBITS) r = ALLONES; + else + r = trim((r >> i) | ~(~(b_uint)0 >> i)); /* add signal bit */ + lua_pushunsigned(L, r); + return 1; + } +} + + +static int b_rot (lua_State *L, int i) { + b_uint r = luaL_checkunsigned(L, 1); + i &= (LUA_NBITS - 1); /* i = i % NBITS */ + r = trim(r); + if (i != 0) /* avoid undefined shift of LUA_NBITS when i == 0 */ + r = (r << i) | (r >> (LUA_NBITS - i)); + lua_pushunsigned(L, trim(r)); + return 1; +} + + +static int b_lrot (lua_State *L) { + return b_rot(L, luaL_checkint(L, 2)); +} + + +static int b_rrot (lua_State *L) { + return b_rot(L, -luaL_checkint(L, 2)); +} + + +/* +** get field and width arguments for field-manipulation functions, +** checking whether they are valid. +** ('luaL_error' called without 'return' to avoid later warnings about +** 'width' being used uninitialized.) +*/ +static int fieldargs (lua_State *L, int farg, int *width) { + int f = luaL_checkint(L, farg); + int w = luaL_optint(L, farg + 1, 1); + luaL_argcheck(L, 0 <= f, farg, "field cannot be negative"); + luaL_argcheck(L, 0 < w, farg + 1, "width must be positive"); + if (f + w > LUA_NBITS) + luaL_error(L, "trying to access non-existent bits"); + *width = w; + return f; +} + + +static int b_extract (lua_State *L) { + int w; + b_uint r = luaL_checkunsigned(L, 1); + int f = fieldargs(L, 2, &w); + r = (r >> f) & mask(w); + lua_pushunsigned(L, r); + return 1; +} + + +static int b_replace (lua_State *L) { + int w; + b_uint r = luaL_checkunsigned(L, 1); + b_uint v = luaL_checkunsigned(L, 2); + int f = fieldargs(L, 3, &w); + int m = mask(w); + v &= m; /* erase bits outside given width */ + r = (r & ~(m << f)) | (v << f); + lua_pushunsigned(L, r); + return 1; +} + + +static const luaL_Reg bitlib[] = { + {"arshift", b_arshift}, + {"band", b_and}, + {"bnot", b_not}, + {"bor", b_or}, + {"bxor", b_xor}, + {"btest", b_test}, + {"extract", b_extract}, + {"lrotate", b_lrot}, + {"lshift", b_lshift}, + {"replace", b_replace}, + {"rrotate", b_rrot}, + {"rshift", b_rshift}, + {NULL, NULL} +}; + + + +LUAMOD_API int luaopen_bit32 (lua_State *L) { + luaL_newlib(L, bitlib); + return 1; +} + diff --git a/lua-5.2.4/src/lcode.c b/lua-5.2.4/src/lcode.c new file mode 100644 index 000000000..820b95c0e --- /dev/null +++ b/lua-5.2.4/src/lcode.c @@ -0,0 +1,881 @@ +/* +** $Id: lcode.c,v 2.62.1.1 2013/04/12 18:48:47 roberto Exp $ +** Code generator for Lua +** See Copyright Notice in lua.h +*/ + + +#include + +#define lcode_c +#define LUA_CORE + +#include "lua.h" + +#include "lcode.h" +#include "ldebug.h" +#include "ldo.h" +#include "lgc.h" +#include "llex.h" +#include "lmem.h" +#include "lobject.h" +#include "lopcodes.h" +#include "lparser.h" +#include "lstring.h" +#include "ltable.h" +#include "lvm.h" + + +#define hasjumps(e) ((e)->t != (e)->f) + + +static int isnumeral(expdesc *e) { + return (e->k == VKNUM && e->t == NO_JUMP && e->f == NO_JUMP); +} + + +void luaK_nil (FuncState *fs, int from, int n) { + Instruction *previous; + int l = from + n - 1; /* last register to set nil */ + if (fs->pc > fs->lasttarget) { /* no jumps to current position? */ + previous = &fs->f->code[fs->pc-1]; + if (GET_OPCODE(*previous) == OP_LOADNIL) { + int pfrom = GETARG_A(*previous); + int pl = pfrom + GETARG_B(*previous); + if ((pfrom <= from && from <= pl + 1) || + (from <= pfrom && pfrom <= l + 1)) { /* can connect both? */ + if (pfrom < from) from = pfrom; /* from = min(from, pfrom) */ + if (pl > l) l = pl; /* l = max(l, pl) */ + SETARG_A(*previous, from); + SETARG_B(*previous, l - from); + return; + } + } /* else go through */ + } + luaK_codeABC(fs, OP_LOADNIL, from, n - 1, 0); /* else no optimization */ +} + + +int luaK_jump (FuncState *fs) { + int jpc = fs->jpc; /* save list of jumps to here */ + int j; + fs->jpc = NO_JUMP; + j = luaK_codeAsBx(fs, OP_JMP, 0, NO_JUMP); + luaK_concat(fs, &j, jpc); /* keep them on hold */ + return j; +} + + +void luaK_ret (FuncState *fs, int first, int nret) { + luaK_codeABC(fs, OP_RETURN, first, nret+1, 0); +} + + +static int condjump (FuncState *fs, OpCode op, int A, int B, int C) { + luaK_codeABC(fs, op, A, B, C); + return luaK_jump(fs); +} + + +static void fixjump (FuncState *fs, int pc, int dest) { + Instruction *jmp = &fs->f->code[pc]; + int offset = dest-(pc+1); + lua_assert(dest != NO_JUMP); + if (abs(offset) > MAXARG_sBx) + luaX_syntaxerror(fs->ls, "control structure too long"); + SETARG_sBx(*jmp, offset); +} + + +/* +** returns current `pc' and marks it as a jump target (to avoid wrong +** optimizations with consecutive instructions not in the same basic block). +*/ +int luaK_getlabel (FuncState *fs) { + fs->lasttarget = fs->pc; + return fs->pc; +} + + +static int getjump (FuncState *fs, int pc) { + int offset = GETARG_sBx(fs->f->code[pc]); + if (offset == NO_JUMP) /* point to itself represents end of list */ + return NO_JUMP; /* end of list */ + else + return (pc+1)+offset; /* turn offset into absolute position */ +} + + +static Instruction *getjumpcontrol (FuncState *fs, int pc) { + Instruction *pi = &fs->f->code[pc]; + if (pc >= 1 && testTMode(GET_OPCODE(*(pi-1)))) + return pi-1; + else + return pi; +} + + +/* +** check whether list has any jump that do not produce a value +** (or produce an inverted value) +*/ +static int need_value (FuncState *fs, int list) { + for (; list != NO_JUMP; list = getjump(fs, list)) { + Instruction i = *getjumpcontrol(fs, list); + if (GET_OPCODE(i) != OP_TESTSET) return 1; + } + return 0; /* not found */ +} + + +static int patchtestreg (FuncState *fs, int node, int reg) { + Instruction *i = getjumpcontrol(fs, node); + if (GET_OPCODE(*i) != OP_TESTSET) + return 0; /* cannot patch other instructions */ + if (reg != NO_REG && reg != GETARG_B(*i)) + SETARG_A(*i, reg); + else /* no register to put value or register already has the value */ + *i = CREATE_ABC(OP_TEST, GETARG_B(*i), 0, GETARG_C(*i)); + + return 1; +} + + +static void removevalues (FuncState *fs, int list) { + for (; list != NO_JUMP; list = getjump(fs, list)) + patchtestreg(fs, list, NO_REG); +} + + +static void patchlistaux (FuncState *fs, int list, int vtarget, int reg, + int dtarget) { + while (list != NO_JUMP) { + int next = getjump(fs, list); + if (patchtestreg(fs, list, reg)) + fixjump(fs, list, vtarget); + else + fixjump(fs, list, dtarget); /* jump to default target */ + list = next; + } +} + + +static void dischargejpc (FuncState *fs) { + patchlistaux(fs, fs->jpc, fs->pc, NO_REG, fs->pc); + fs->jpc = NO_JUMP; +} + + +void luaK_patchlist (FuncState *fs, int list, int target) { + if (target == fs->pc) + luaK_patchtohere(fs, list); + else { + lua_assert(target < fs->pc); + patchlistaux(fs, list, target, NO_REG, target); + } +} + + +LUAI_FUNC void luaK_patchclose (FuncState *fs, int list, int level) { + level++; /* argument is +1 to reserve 0 as non-op */ + while (list != NO_JUMP) { + int next = getjump(fs, list); + lua_assert(GET_OPCODE(fs->f->code[list]) == OP_JMP && + (GETARG_A(fs->f->code[list]) == 0 || + GETARG_A(fs->f->code[list]) >= level)); + SETARG_A(fs->f->code[list], level); + list = next; + } +} + + +void luaK_patchtohere (FuncState *fs, int list) { + luaK_getlabel(fs); + luaK_concat(fs, &fs->jpc, list); +} + + +void luaK_concat (FuncState *fs, int *l1, int l2) { + if (l2 == NO_JUMP) return; + else if (*l1 == NO_JUMP) + *l1 = l2; + else { + int list = *l1; + int next; + while ((next = getjump(fs, list)) != NO_JUMP) /* find last element */ + list = next; + fixjump(fs, list, l2); + } +} + + +static int luaK_code (FuncState *fs, Instruction i) { + Proto *f = fs->f; + dischargejpc(fs); /* `pc' will change */ + /* put new instruction in code array */ + luaM_growvector(fs->ls->L, f->code, fs->pc, f->sizecode, Instruction, + MAX_INT, "opcodes"); + f->code[fs->pc] = i; + /* save corresponding line information */ + luaM_growvector(fs->ls->L, f->lineinfo, fs->pc, f->sizelineinfo, int, + MAX_INT, "opcodes"); + f->lineinfo[fs->pc] = fs->ls->lastline; + return fs->pc++; +} + + +int luaK_codeABC (FuncState *fs, OpCode o, int a, int b, int c) { + lua_assert(getOpMode(o) == iABC); + lua_assert(getBMode(o) != OpArgN || b == 0); + lua_assert(getCMode(o) != OpArgN || c == 0); + lua_assert(a <= MAXARG_A && b <= MAXARG_B && c <= MAXARG_C); + return luaK_code(fs, CREATE_ABC(o, a, b, c)); +} + + +int luaK_codeABx (FuncState *fs, OpCode o, int a, unsigned int bc) { + lua_assert(getOpMode(o) == iABx || getOpMode(o) == iAsBx); + lua_assert(getCMode(o) == OpArgN); + lua_assert(a <= MAXARG_A && bc <= MAXARG_Bx); + return luaK_code(fs, CREATE_ABx(o, a, bc)); +} + + +static int codeextraarg (FuncState *fs, int a) { + lua_assert(a <= MAXARG_Ax); + return luaK_code(fs, CREATE_Ax(OP_EXTRAARG, a)); +} + + +int luaK_codek (FuncState *fs, int reg, int k) { + if (k <= MAXARG_Bx) + return luaK_codeABx(fs, OP_LOADK, reg, k); + else { + int p = luaK_codeABx(fs, OP_LOADKX, reg, 0); + codeextraarg(fs, k); + return p; + } +} + + +void luaK_checkstack (FuncState *fs, int n) { + int newstack = fs->freereg + n; + if (newstack > fs->f->maxstacksize) { + if (newstack >= MAXSTACK) + luaX_syntaxerror(fs->ls, "function or expression too complex"); + fs->f->maxstacksize = cast_byte(newstack); + } +} + + +void luaK_reserveregs (FuncState *fs, int n) { + luaK_checkstack(fs, n); + fs->freereg += n; +} + + +static void freereg (FuncState *fs, int reg) { + if (!ISK(reg) && reg >= fs->nactvar) { + fs->freereg--; + lua_assert(reg == fs->freereg); + } +} + + +static void freeexp (FuncState *fs, expdesc *e) { + if (e->k == VNONRELOC) + freereg(fs, e->u.info); +} + + +static int addk (FuncState *fs, TValue *key, TValue *v) { + lua_State *L = fs->ls->L; + TValue *idx = luaH_set(L, fs->h, key); + Proto *f = fs->f; + int k, oldsize; + if (ttisnumber(idx)) { + lua_Number n = nvalue(idx); + lua_number2int(k, n); + if (luaV_rawequalobj(&f->k[k], v)) + return k; + /* else may be a collision (e.g., between 0.0 and "\0\0\0\0\0\0\0\0"); + go through and create a new entry for this value */ + } + /* constant not found; create a new entry */ + oldsize = f->sizek; + k = fs->nk; + /* numerical value does not need GC barrier; + table has no metatable, so it does not need to invalidate cache */ + setnvalue(idx, cast_num(k)); + luaM_growvector(L, f->k, k, f->sizek, TValue, MAXARG_Ax, "constants"); + while (oldsize < f->sizek) setnilvalue(&f->k[oldsize++]); + setobj(L, &f->k[k], v); + fs->nk++; + luaC_barrier(L, f, v); + return k; +} + + +int luaK_stringK (FuncState *fs, TString *s) { + TValue o; + setsvalue(fs->ls->L, &o, s); + return addk(fs, &o, &o); +} + + +int luaK_numberK (FuncState *fs, lua_Number r) { + int n; + lua_State *L = fs->ls->L; + TValue o; + setnvalue(&o, r); + if (r == 0 || luai_numisnan(NULL, r)) { /* handle -0 and NaN */ + /* use raw representation as key to avoid numeric problems */ + setsvalue(L, L->top++, luaS_newlstr(L, (char *)&r, sizeof(r))); + n = addk(fs, L->top - 1, &o); + L->top--; + } + else + n = addk(fs, &o, &o); /* regular case */ + return n; +} + + +static int boolK (FuncState *fs, int b) { + TValue o; + setbvalue(&o, b); + return addk(fs, &o, &o); +} + + +static int nilK (FuncState *fs) { + TValue k, v; + setnilvalue(&v); + /* cannot use nil as key; instead use table itself to represent nil */ + sethvalue(fs->ls->L, &k, fs->h); + return addk(fs, &k, &v); +} + + +void luaK_setreturns (FuncState *fs, expdesc *e, int nresults) { + if (e->k == VCALL) { /* expression is an open function call? */ + SETARG_C(getcode(fs, e), nresults+1); + } + else if (e->k == VVARARG) { + SETARG_B(getcode(fs, e), nresults+1); + SETARG_A(getcode(fs, e), fs->freereg); + luaK_reserveregs(fs, 1); + } +} + + +void luaK_setoneret (FuncState *fs, expdesc *e) { + if (e->k == VCALL) { /* expression is an open function call? */ + e->k = VNONRELOC; + e->u.info = GETARG_A(getcode(fs, e)); + } + else if (e->k == VVARARG) { + SETARG_B(getcode(fs, e), 2); + e->k = VRELOCABLE; /* can relocate its simple result */ + } +} + + +void luaK_dischargevars (FuncState *fs, expdesc *e) { + switch (e->k) { + case VLOCAL: { + e->k = VNONRELOC; + break; + } + case VUPVAL: { + e->u.info = luaK_codeABC(fs, OP_GETUPVAL, 0, e->u.info, 0); + e->k = VRELOCABLE; + break; + } + case VINDEXED: { + OpCode op = OP_GETTABUP; /* assume 't' is in an upvalue */ + freereg(fs, e->u.ind.idx); + if (e->u.ind.vt == VLOCAL) { /* 't' is in a register? */ + freereg(fs, e->u.ind.t); + op = OP_GETTABLE; + } + e->u.info = luaK_codeABC(fs, op, 0, e->u.ind.t, e->u.ind.idx); + e->k = VRELOCABLE; + break; + } + case VVARARG: + case VCALL: { + luaK_setoneret(fs, e); + break; + } + default: break; /* there is one value available (somewhere) */ + } +} + + +static int code_label (FuncState *fs, int A, int b, int jump) { + luaK_getlabel(fs); /* those instructions may be jump targets */ + return luaK_codeABC(fs, OP_LOADBOOL, A, b, jump); +} + + +static void discharge2reg (FuncState *fs, expdesc *e, int reg) { + luaK_dischargevars(fs, e); + switch (e->k) { + case VNIL: { + luaK_nil(fs, reg, 1); + break; + } + case VFALSE: case VTRUE: { + luaK_codeABC(fs, OP_LOADBOOL, reg, e->k == VTRUE, 0); + break; + } + case VK: { + luaK_codek(fs, reg, e->u.info); + break; + } + case VKNUM: { + luaK_codek(fs, reg, luaK_numberK(fs, e->u.nval)); + break; + } + case VRELOCABLE: { + Instruction *pc = &getcode(fs, e); + SETARG_A(*pc, reg); + break; + } + case VNONRELOC: { + if (reg != e->u.info) + luaK_codeABC(fs, OP_MOVE, reg, e->u.info, 0); + break; + } + default: { + lua_assert(e->k == VVOID || e->k == VJMP); + return; /* nothing to do... */ + } + } + e->u.info = reg; + e->k = VNONRELOC; +} + + +static void discharge2anyreg (FuncState *fs, expdesc *e) { + if (e->k != VNONRELOC) { + luaK_reserveregs(fs, 1); + discharge2reg(fs, e, fs->freereg-1); + } +} + + +static void exp2reg (FuncState *fs, expdesc *e, int reg) { + discharge2reg(fs, e, reg); + if (e->k == VJMP) + luaK_concat(fs, &e->t, e->u.info); /* put this jump in `t' list */ + if (hasjumps(e)) { + int final; /* position after whole expression */ + int p_f = NO_JUMP; /* position of an eventual LOAD false */ + int p_t = NO_JUMP; /* position of an eventual LOAD true */ + if (need_value(fs, e->t) || need_value(fs, e->f)) { + int fj = (e->k == VJMP) ? NO_JUMP : luaK_jump(fs); + p_f = code_label(fs, reg, 0, 1); + p_t = code_label(fs, reg, 1, 0); + luaK_patchtohere(fs, fj); + } + final = luaK_getlabel(fs); + patchlistaux(fs, e->f, final, reg, p_f); + patchlistaux(fs, e->t, final, reg, p_t); + } + e->f = e->t = NO_JUMP; + e->u.info = reg; + e->k = VNONRELOC; +} + + +void luaK_exp2nextreg (FuncState *fs, expdesc *e) { + luaK_dischargevars(fs, e); + freeexp(fs, e); + luaK_reserveregs(fs, 1); + exp2reg(fs, e, fs->freereg - 1); +} + + +int luaK_exp2anyreg (FuncState *fs, expdesc *e) { + luaK_dischargevars(fs, e); + if (e->k == VNONRELOC) { + if (!hasjumps(e)) return e->u.info; /* exp is already in a register */ + if (e->u.info >= fs->nactvar) { /* reg. is not a local? */ + exp2reg(fs, e, e->u.info); /* put value on it */ + return e->u.info; + } + } + luaK_exp2nextreg(fs, e); /* default */ + return e->u.info; +} + + +void luaK_exp2anyregup (FuncState *fs, expdesc *e) { + if (e->k != VUPVAL || hasjumps(e)) + luaK_exp2anyreg(fs, e); +} + + +void luaK_exp2val (FuncState *fs, expdesc *e) { + if (hasjumps(e)) + luaK_exp2anyreg(fs, e); + else + luaK_dischargevars(fs, e); +} + + +int luaK_exp2RK (FuncState *fs, expdesc *e) { + luaK_exp2val(fs, e); + switch (e->k) { + case VTRUE: + case VFALSE: + case VNIL: { + if (fs->nk <= MAXINDEXRK) { /* constant fits in RK operand? */ + e->u.info = (e->k == VNIL) ? nilK(fs) : boolK(fs, (e->k == VTRUE)); + e->k = VK; + return RKASK(e->u.info); + } + else break; + } + case VKNUM: { + e->u.info = luaK_numberK(fs, e->u.nval); + e->k = VK; + /* go through */ + } + case VK: { + if (e->u.info <= MAXINDEXRK) /* constant fits in argC? */ + return RKASK(e->u.info); + else break; + } + default: break; + } + /* not a constant in the right range: put it in a register */ + return luaK_exp2anyreg(fs, e); +} + + +void luaK_storevar (FuncState *fs, expdesc *var, expdesc *ex) { + switch (var->k) { + case VLOCAL: { + freeexp(fs, ex); + exp2reg(fs, ex, var->u.info); + return; + } + case VUPVAL: { + int e = luaK_exp2anyreg(fs, ex); + luaK_codeABC(fs, OP_SETUPVAL, e, var->u.info, 0); + break; + } + case VINDEXED: { + OpCode op = (var->u.ind.vt == VLOCAL) ? OP_SETTABLE : OP_SETTABUP; + int e = luaK_exp2RK(fs, ex); + luaK_codeABC(fs, op, var->u.ind.t, var->u.ind.idx, e); + break; + } + default: { + lua_assert(0); /* invalid var kind to store */ + break; + } + } + freeexp(fs, ex); +} + + +void luaK_self (FuncState *fs, expdesc *e, expdesc *key) { + int ereg; + luaK_exp2anyreg(fs, e); + ereg = e->u.info; /* register where 'e' was placed */ + freeexp(fs, e); + e->u.info = fs->freereg; /* base register for op_self */ + e->k = VNONRELOC; + luaK_reserveregs(fs, 2); /* function and 'self' produced by op_self */ + luaK_codeABC(fs, OP_SELF, e->u.info, ereg, luaK_exp2RK(fs, key)); + freeexp(fs, key); +} + + +static void invertjump (FuncState *fs, expdesc *e) { + Instruction *pc = getjumpcontrol(fs, e->u.info); + lua_assert(testTMode(GET_OPCODE(*pc)) && GET_OPCODE(*pc) != OP_TESTSET && + GET_OPCODE(*pc) != OP_TEST); + SETARG_A(*pc, !(GETARG_A(*pc))); +} + + +static int jumponcond (FuncState *fs, expdesc *e, int cond) { + if (e->k == VRELOCABLE) { + Instruction ie = getcode(fs, e); + if (GET_OPCODE(ie) == OP_NOT) { + fs->pc--; /* remove previous OP_NOT */ + return condjump(fs, OP_TEST, GETARG_B(ie), 0, !cond); + } + /* else go through */ + } + discharge2anyreg(fs, e); + freeexp(fs, e); + return condjump(fs, OP_TESTSET, NO_REG, e->u.info, cond); +} + + +void luaK_goiftrue (FuncState *fs, expdesc *e) { + int pc; /* pc of last jump */ + luaK_dischargevars(fs, e); + switch (e->k) { + case VJMP: { + invertjump(fs, e); + pc = e->u.info; + break; + } + case VK: case VKNUM: case VTRUE: { + pc = NO_JUMP; /* always true; do nothing */ + break; + } + default: { + pc = jumponcond(fs, e, 0); + break; + } + } + luaK_concat(fs, &e->f, pc); /* insert last jump in `f' list */ + luaK_patchtohere(fs, e->t); + e->t = NO_JUMP; +} + + +void luaK_goiffalse (FuncState *fs, expdesc *e) { + int pc; /* pc of last jump */ + luaK_dischargevars(fs, e); + switch (e->k) { + case VJMP: { + pc = e->u.info; + break; + } + case VNIL: case VFALSE: { + pc = NO_JUMP; /* always false; do nothing */ + break; + } + default: { + pc = jumponcond(fs, e, 1); + break; + } + } + luaK_concat(fs, &e->t, pc); /* insert last jump in `t' list */ + luaK_patchtohere(fs, e->f); + e->f = NO_JUMP; +} + + +static void codenot (FuncState *fs, expdesc *e) { + luaK_dischargevars(fs, e); + switch (e->k) { + case VNIL: case VFALSE: { + e->k = VTRUE; + break; + } + case VK: case VKNUM: case VTRUE: { + e->k = VFALSE; + break; + } + case VJMP: { + invertjump(fs, e); + break; + } + case VRELOCABLE: + case VNONRELOC: { + discharge2anyreg(fs, e); + freeexp(fs, e); + e->u.info = luaK_codeABC(fs, OP_NOT, 0, e->u.info, 0); + e->k = VRELOCABLE; + break; + } + default: { + lua_assert(0); /* cannot happen */ + break; + } + } + /* interchange true and false lists */ + { int temp = e->f; e->f = e->t; e->t = temp; } + removevalues(fs, e->f); + removevalues(fs, e->t); +} + + +void luaK_indexed (FuncState *fs, expdesc *t, expdesc *k) { + lua_assert(!hasjumps(t)); + t->u.ind.t = t->u.info; + t->u.ind.idx = luaK_exp2RK(fs, k); + t->u.ind.vt = (t->k == VUPVAL) ? VUPVAL + : check_exp(vkisinreg(t->k), VLOCAL); + t->k = VINDEXED; +} + + +static int constfolding (OpCode op, expdesc *e1, expdesc *e2) { + lua_Number r; + if (!isnumeral(e1) || !isnumeral(e2)) return 0; + if ((op == OP_DIV || op == OP_MOD) && e2->u.nval == 0) + return 0; /* do not attempt to divide by 0 */ + r = luaO_arith(op - OP_ADD + LUA_OPADD, e1->u.nval, e2->u.nval); + e1->u.nval = r; + return 1; +} + + +static void codearith (FuncState *fs, OpCode op, + expdesc *e1, expdesc *e2, int line) { + if (constfolding(op, e1, e2)) + return; + else { + int o2 = (op != OP_UNM && op != OP_LEN) ? luaK_exp2RK(fs, e2) : 0; + int o1 = luaK_exp2RK(fs, e1); + if (o1 > o2) { + freeexp(fs, e1); + freeexp(fs, e2); + } + else { + freeexp(fs, e2); + freeexp(fs, e1); + } + e1->u.info = luaK_codeABC(fs, op, 0, o1, o2); + e1->k = VRELOCABLE; + luaK_fixline(fs, line); + } +} + + +static void codecomp (FuncState *fs, OpCode op, int cond, expdesc *e1, + expdesc *e2) { + int o1 = luaK_exp2RK(fs, e1); + int o2 = luaK_exp2RK(fs, e2); + freeexp(fs, e2); + freeexp(fs, e1); + if (cond == 0 && op != OP_EQ) { + int temp; /* exchange args to replace by `<' or `<=' */ + temp = o1; o1 = o2; o2 = temp; /* o1 <==> o2 */ + cond = 1; + } + e1->u.info = condjump(fs, op, cond, o1, o2); + e1->k = VJMP; +} + + +void luaK_prefix (FuncState *fs, UnOpr op, expdesc *e, int line) { + expdesc e2; + e2.t = e2.f = NO_JUMP; e2.k = VKNUM; e2.u.nval = 0; + switch (op) { + case OPR_MINUS: { + if (isnumeral(e)) /* minus constant? */ + e->u.nval = luai_numunm(NULL, e->u.nval); /* fold it */ + else { + luaK_exp2anyreg(fs, e); + codearith(fs, OP_UNM, e, &e2, line); + } + break; + } + case OPR_NOT: codenot(fs, e); break; + case OPR_LEN: { + luaK_exp2anyreg(fs, e); /* cannot operate on constants */ + codearith(fs, OP_LEN, e, &e2, line); + break; + } + default: lua_assert(0); + } +} + + +void luaK_infix (FuncState *fs, BinOpr op, expdesc *v) { + switch (op) { + case OPR_AND: { + luaK_goiftrue(fs, v); + break; + } + case OPR_OR: { + luaK_goiffalse(fs, v); + break; + } + case OPR_CONCAT: { + luaK_exp2nextreg(fs, v); /* operand must be on the `stack' */ + break; + } + case OPR_ADD: case OPR_SUB: case OPR_MUL: case OPR_DIV: + case OPR_MOD: case OPR_POW: { + if (!isnumeral(v)) luaK_exp2RK(fs, v); + break; + } + default: { + luaK_exp2RK(fs, v); + break; + } + } +} + + +void luaK_posfix (FuncState *fs, BinOpr op, + expdesc *e1, expdesc *e2, int line) { + switch (op) { + case OPR_AND: { + lua_assert(e1->t == NO_JUMP); /* list must be closed */ + luaK_dischargevars(fs, e2); + luaK_concat(fs, &e2->f, e1->f); + *e1 = *e2; + break; + } + case OPR_OR: { + lua_assert(e1->f == NO_JUMP); /* list must be closed */ + luaK_dischargevars(fs, e2); + luaK_concat(fs, &e2->t, e1->t); + *e1 = *e2; + break; + } + case OPR_CONCAT: { + luaK_exp2val(fs, e2); + if (e2->k == VRELOCABLE && GET_OPCODE(getcode(fs, e2)) == OP_CONCAT) { + lua_assert(e1->u.info == GETARG_B(getcode(fs, e2))-1); + freeexp(fs, e1); + SETARG_B(getcode(fs, e2), e1->u.info); + e1->k = VRELOCABLE; e1->u.info = e2->u.info; + } + else { + luaK_exp2nextreg(fs, e2); /* operand must be on the 'stack' */ + codearith(fs, OP_CONCAT, e1, e2, line); + } + break; + } + case OPR_ADD: case OPR_SUB: case OPR_MUL: case OPR_DIV: + case OPR_MOD: case OPR_POW: { + codearith(fs, cast(OpCode, op - OPR_ADD + OP_ADD), e1, e2, line); + break; + } + case OPR_EQ: case OPR_LT: case OPR_LE: { + codecomp(fs, cast(OpCode, op - OPR_EQ + OP_EQ), 1, e1, e2); + break; + } + case OPR_NE: case OPR_GT: case OPR_GE: { + codecomp(fs, cast(OpCode, op - OPR_NE + OP_EQ), 0, e1, e2); + break; + } + default: lua_assert(0); + } +} + + +void luaK_fixline (FuncState *fs, int line) { + fs->f->lineinfo[fs->pc - 1] = line; +} + + +void luaK_setlist (FuncState *fs, int base, int nelems, int tostore) { + int c = (nelems - 1)/LFIELDS_PER_FLUSH + 1; + int b = (tostore == LUA_MULTRET) ? 0 : tostore; + lua_assert(tostore != 0); + if (c <= MAXARG_C) + luaK_codeABC(fs, OP_SETLIST, base, b, c); + else if (c <= MAXARG_Ax) { + luaK_codeABC(fs, OP_SETLIST, base, b, 0); + codeextraarg(fs, c); + } + else + luaX_syntaxerror(fs->ls, "constructor too long"); + fs->freereg = base + 1; /* free registers with list values */ +} + diff --git a/lua-5.2.4/src/lcode.h b/lua-5.2.4/src/lcode.h new file mode 100644 index 000000000..6a1424cf5 --- /dev/null +++ b/lua-5.2.4/src/lcode.h @@ -0,0 +1,83 @@ +/* +** $Id: lcode.h,v 1.58.1.1 2013/04/12 18:48:47 roberto Exp $ +** Code generator for Lua +** See Copyright Notice in lua.h +*/ + +#ifndef lcode_h +#define lcode_h + +#include "llex.h" +#include "lobject.h" +#include "lopcodes.h" +#include "lparser.h" + + +/* +** Marks the end of a patch list. It is an invalid value both as an absolute +** address, and as a list link (would link an element to itself). +*/ +#define NO_JUMP (-1) + + +/* +** grep "ORDER OPR" if you change these enums (ORDER OP) +*/ +typedef enum BinOpr { + OPR_ADD, OPR_SUB, OPR_MUL, OPR_DIV, OPR_MOD, OPR_POW, + OPR_CONCAT, + OPR_EQ, OPR_LT, OPR_LE, + OPR_NE, OPR_GT, OPR_GE, + OPR_AND, OPR_OR, + OPR_NOBINOPR +} BinOpr; + + +typedef enum UnOpr { OPR_MINUS, OPR_NOT, OPR_LEN, OPR_NOUNOPR } UnOpr; + + +#define getcode(fs,e) ((fs)->f->code[(e)->u.info]) + +#define luaK_codeAsBx(fs,o,A,sBx) luaK_codeABx(fs,o,A,(sBx)+MAXARG_sBx) + +#define luaK_setmultret(fs,e) luaK_setreturns(fs, e, LUA_MULTRET) + +#define luaK_jumpto(fs,t) luaK_patchlist(fs, luaK_jump(fs), t) + +LUAI_FUNC int luaK_codeABx (FuncState *fs, OpCode o, int A, unsigned int Bx); +LUAI_FUNC int luaK_codeABC (FuncState *fs, OpCode o, int A, int B, int C); +LUAI_FUNC int luaK_codek (FuncState *fs, int reg, int k); +LUAI_FUNC void luaK_fixline (FuncState *fs, int line); +LUAI_FUNC void luaK_nil (FuncState *fs, int from, int n); +LUAI_FUNC void luaK_reserveregs (FuncState *fs, int n); +LUAI_FUNC void luaK_checkstack (FuncState *fs, int n); +LUAI_FUNC int luaK_stringK (FuncState *fs, TString *s); +LUAI_FUNC int luaK_numberK (FuncState *fs, lua_Number r); +LUAI_FUNC void luaK_dischargevars (FuncState *fs, expdesc *e); +LUAI_FUNC int luaK_exp2anyreg (FuncState *fs, expdesc *e); +LUAI_FUNC void luaK_exp2anyregup (FuncState *fs, expdesc *e); +LUAI_FUNC void luaK_exp2nextreg (FuncState *fs, expdesc *e); +LUAI_FUNC void luaK_exp2val (FuncState *fs, expdesc *e); +LUAI_FUNC int luaK_exp2RK (FuncState *fs, expdesc *e); +LUAI_FUNC void luaK_self (FuncState *fs, expdesc *e, expdesc *key); +LUAI_FUNC void luaK_indexed (FuncState *fs, expdesc *t, expdesc *k); +LUAI_FUNC void luaK_goiftrue (FuncState *fs, expdesc *e); +LUAI_FUNC void luaK_goiffalse (FuncState *fs, expdesc *e); +LUAI_FUNC void luaK_storevar (FuncState *fs, expdesc *var, expdesc *e); +LUAI_FUNC void luaK_setreturns (FuncState *fs, expdesc *e, int nresults); +LUAI_FUNC void luaK_setoneret (FuncState *fs, expdesc *e); +LUAI_FUNC int luaK_jump (FuncState *fs); +LUAI_FUNC void luaK_ret (FuncState *fs, int first, int nret); +LUAI_FUNC void luaK_patchlist (FuncState *fs, int list, int target); +LUAI_FUNC void luaK_patchtohere (FuncState *fs, int list); +LUAI_FUNC void luaK_patchclose (FuncState *fs, int list, int level); +LUAI_FUNC void luaK_concat (FuncState *fs, int *l1, int l2); +LUAI_FUNC int luaK_getlabel (FuncState *fs); +LUAI_FUNC void luaK_prefix (FuncState *fs, UnOpr op, expdesc *v, int line); +LUAI_FUNC void luaK_infix (FuncState *fs, BinOpr op, expdesc *v); +LUAI_FUNC void luaK_posfix (FuncState *fs, BinOpr op, expdesc *v1, + expdesc *v2, int line); +LUAI_FUNC void luaK_setlist (FuncState *fs, int base, int nelems, int tostore); + + +#endif diff --git a/lua-5.2.4/src/lcorolib.c b/lua-5.2.4/src/lcorolib.c new file mode 100644 index 000000000..ce4f6ad42 --- /dev/null +++ b/lua-5.2.4/src/lcorolib.c @@ -0,0 +1,155 @@ +/* +** $Id: lcorolib.c,v 1.5.1.1 2013/04/12 18:48:47 roberto Exp $ +** Coroutine Library +** See Copyright Notice in lua.h +*/ + + +#include + + +#define lcorolib_c +#define LUA_LIB + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +static int auxresume (lua_State *L, lua_State *co, int narg) { + int status; + if (!lua_checkstack(co, narg)) { + lua_pushliteral(L, "too many arguments to resume"); + return -1; /* error flag */ + } + if (lua_status(co) == LUA_OK && lua_gettop(co) == 0) { + lua_pushliteral(L, "cannot resume dead coroutine"); + return -1; /* error flag */ + } + lua_xmove(L, co, narg); + status = lua_resume(co, L, narg); + if (status == LUA_OK || status == LUA_YIELD) { + int nres = lua_gettop(co); + if (!lua_checkstack(L, nres + 1)) { + lua_pop(co, nres); /* remove results anyway */ + lua_pushliteral(L, "too many results to resume"); + return -1; /* error flag */ + } + lua_xmove(co, L, nres); /* move yielded values */ + return nres; + } + else { + lua_xmove(co, L, 1); /* move error message */ + return -1; /* error flag */ + } +} + + +static int luaB_coresume (lua_State *L) { + lua_State *co = lua_tothread(L, 1); + int r; + luaL_argcheck(L, co, 1, "coroutine expected"); + r = auxresume(L, co, lua_gettop(L) - 1); + if (r < 0) { + lua_pushboolean(L, 0); + lua_insert(L, -2); + return 2; /* return false + error message */ + } + else { + lua_pushboolean(L, 1); + lua_insert(L, -(r + 1)); + return r + 1; /* return true + `resume' returns */ + } +} + + +static int luaB_auxwrap (lua_State *L) { + lua_State *co = lua_tothread(L, lua_upvalueindex(1)); + int r = auxresume(L, co, lua_gettop(L)); + if (r < 0) { + if (lua_isstring(L, -1)) { /* error object is a string? */ + luaL_where(L, 1); /* add extra info */ + lua_insert(L, -2); + lua_concat(L, 2); + } + return lua_error(L); /* propagate error */ + } + return r; +} + + +static int luaB_cocreate (lua_State *L) { + lua_State *NL; + luaL_checktype(L, 1, LUA_TFUNCTION); + NL = lua_newthread(L); + lua_pushvalue(L, 1); /* move function to top */ + lua_xmove(L, NL, 1); /* move function from L to NL */ + return 1; +} + + +static int luaB_cowrap (lua_State *L) { + luaB_cocreate(L); + lua_pushcclosure(L, luaB_auxwrap, 1); + return 1; +} + + +static int luaB_yield (lua_State *L) { + return lua_yield(L, lua_gettop(L)); +} + + +static int luaB_costatus (lua_State *L) { + lua_State *co = lua_tothread(L, 1); + luaL_argcheck(L, co, 1, "coroutine expected"); + if (L == co) lua_pushliteral(L, "running"); + else { + switch (lua_status(co)) { + case LUA_YIELD: + lua_pushliteral(L, "suspended"); + break; + case LUA_OK: { + lua_Debug ar; + if (lua_getstack(co, 0, &ar) > 0) /* does it have frames? */ + lua_pushliteral(L, "normal"); /* it is running */ + else if (lua_gettop(co) == 0) + lua_pushliteral(L, "dead"); + else + lua_pushliteral(L, "suspended"); /* initial state */ + break; + } + default: /* some error occurred */ + lua_pushliteral(L, "dead"); + break; + } + } + return 1; +} + + +static int luaB_corunning (lua_State *L) { + int ismain = lua_pushthread(L); + lua_pushboolean(L, ismain); + return 2; +} + + +static const luaL_Reg co_funcs[] = { + {"create", luaB_cocreate}, + {"resume", luaB_coresume}, + {"running", luaB_corunning}, + {"status", luaB_costatus}, + {"wrap", luaB_cowrap}, + {"yield", luaB_yield}, + {NULL, NULL} +}; + + + +LUAMOD_API int luaopen_coroutine (lua_State *L) { + luaL_newlib(L, co_funcs); + return 1; +} + diff --git a/lua-5.2.4/src/lctype.c b/lua-5.2.4/src/lctype.c new file mode 100644 index 000000000..93f8cadc3 --- /dev/null +++ b/lua-5.2.4/src/lctype.c @@ -0,0 +1,52 @@ +/* +** $Id: lctype.c,v 1.11.1.1 2013/04/12 18:48:47 roberto Exp $ +** 'ctype' functions for Lua +** See Copyright Notice in lua.h +*/ + +#define lctype_c +#define LUA_CORE + +#include "lctype.h" + +#if !LUA_USE_CTYPE /* { */ + +#include + +LUAI_DDEF const lu_byte luai_ctype_[UCHAR_MAX + 2] = { + 0x00, /* EOZ */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0. */ + 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 1. */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, /* 2. */ + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, /* 3. */ + 0x16, 0x16, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x05, /* 4. */ + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, /* 5. */ + 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x05, + 0x04, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x05, /* 6. */ + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, /* 7. */ + 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 8. */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 9. */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* a. */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* b. */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* c. */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* d. */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* e. */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* f. */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +#endif /* } */ diff --git a/lua-5.2.4/src/lctype.h b/lua-5.2.4/src/lctype.h new file mode 100644 index 000000000..b09b21a33 --- /dev/null +++ b/lua-5.2.4/src/lctype.h @@ -0,0 +1,95 @@ +/* +** $Id: lctype.h,v 1.12.1.1 2013/04/12 18:48:47 roberto Exp $ +** 'ctype' functions for Lua +** See Copyright Notice in lua.h +*/ + +#ifndef lctype_h +#define lctype_h + +#include "lua.h" + + +/* +** WARNING: the functions defined here do not necessarily correspond +** to the similar functions in the standard C ctype.h. They are +** optimized for the specific needs of Lua +*/ + +#if !defined(LUA_USE_CTYPE) + +#if 'A' == 65 && '0' == 48 +/* ASCII case: can use its own tables; faster and fixed */ +#define LUA_USE_CTYPE 0 +#else +/* must use standard C ctype */ +#define LUA_USE_CTYPE 1 +#endif + +#endif + + +#if !LUA_USE_CTYPE /* { */ + +#include + +#include "llimits.h" + + +#define ALPHABIT 0 +#define DIGITBIT 1 +#define PRINTBIT 2 +#define SPACEBIT 3 +#define XDIGITBIT 4 + + +#define MASK(B) (1 << (B)) + + +/* +** add 1 to char to allow index -1 (EOZ) +*/ +#define testprop(c,p) (luai_ctype_[(c)+1] & (p)) + +/* +** 'lalpha' (Lua alphabetic) and 'lalnum' (Lua alphanumeric) both include '_' +*/ +#define lislalpha(c) testprop(c, MASK(ALPHABIT)) +#define lislalnum(c) testprop(c, (MASK(ALPHABIT) | MASK(DIGITBIT))) +#define lisdigit(c) testprop(c, MASK(DIGITBIT)) +#define lisspace(c) testprop(c, MASK(SPACEBIT)) +#define lisprint(c) testprop(c, MASK(PRINTBIT)) +#define lisxdigit(c) testprop(c, MASK(XDIGITBIT)) + +/* +** this 'ltolower' only works for alphabetic characters +*/ +#define ltolower(c) ((c) | ('A' ^ 'a')) + + +/* two more entries for 0 and -1 (EOZ) */ +LUAI_DDEC const lu_byte luai_ctype_[UCHAR_MAX + 2]; + + +#else /* }{ */ + +/* +** use standard C ctypes +*/ + +#include + + +#define lislalpha(c) (isalpha(c) || (c) == '_') +#define lislalnum(c) (isalnum(c) || (c) == '_') +#define lisdigit(c) (isdigit(c)) +#define lisspace(c) (isspace(c)) +#define lisprint(c) (isprint(c)) +#define lisxdigit(c) (isxdigit(c)) + +#define ltolower(c) (tolower(c)) + +#endif /* } */ + +#endif + diff --git a/lua-5.2.4/src/ldblib.c b/lua-5.2.4/src/ldblib.c new file mode 100644 index 000000000..bd8df9da3 --- /dev/null +++ b/lua-5.2.4/src/ldblib.c @@ -0,0 +1,408 @@ +/* +** $Id: ldblib.c,v 1.132.1.2 2015/02/19 17:16:55 roberto Exp $ +** Interface from Lua to its debug API +** See Copyright Notice in lua.h +*/ + + +#include +#include +#include + +#define ldblib_c +#define LUA_LIB + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +#define HOOKKEY "_HKEY" + + +static void checkstack (lua_State *L, lua_State *L1, int n) { + if (L != L1 && !lua_checkstack(L1, n)) + luaL_error(L, "stack overflow"); +} + + +static int db_getregistry (lua_State *L) { + lua_pushvalue(L, LUA_REGISTRYINDEX); + return 1; +} + + +static int db_getmetatable (lua_State *L) { + luaL_checkany(L, 1); + if (!lua_getmetatable(L, 1)) { + lua_pushnil(L); /* no metatable */ + } + return 1; +} + + +static int db_setmetatable (lua_State *L) { + int t = lua_type(L, 2); + luaL_argcheck(L, t == LUA_TNIL || t == LUA_TTABLE, 2, + "nil or table expected"); + lua_settop(L, 2); + lua_setmetatable(L, 1); + return 1; /* return 1st argument */ +} + + +static int db_getuservalue (lua_State *L) { + if (lua_type(L, 1) != LUA_TUSERDATA) + lua_pushnil(L); + else + lua_getuservalue(L, 1); + return 1; +} + + +static int db_setuservalue (lua_State *L) { + if (lua_type(L, 1) == LUA_TLIGHTUSERDATA) + luaL_argerror(L, 1, "full userdata expected, got light userdata"); + luaL_checktype(L, 1, LUA_TUSERDATA); + if (!lua_isnoneornil(L, 2)) + luaL_checktype(L, 2, LUA_TTABLE); + lua_settop(L, 2); + lua_setuservalue(L, 1); + return 1; +} + + +static void settabss (lua_State *L, const char *i, const char *v) { + lua_pushstring(L, v); + lua_setfield(L, -2, i); +} + + +static void settabsi (lua_State *L, const char *i, int v) { + lua_pushinteger(L, v); + lua_setfield(L, -2, i); +} + + +static void settabsb (lua_State *L, const char *i, int v) { + lua_pushboolean(L, v); + lua_setfield(L, -2, i); +} + + +static lua_State *getthread (lua_State *L, int *arg) { + if (lua_isthread(L, 1)) { + *arg = 1; + return lua_tothread(L, 1); + } + else { + *arg = 0; + return L; + } +} + + +static void treatstackoption (lua_State *L, lua_State *L1, const char *fname) { + if (L == L1) { + lua_pushvalue(L, -2); + lua_remove(L, -3); + } + else + lua_xmove(L1, L, 1); + lua_setfield(L, -2, fname); +} + + +static int db_getinfo (lua_State *L) { + lua_Debug ar; + int arg; + lua_State *L1 = getthread(L, &arg); + const char *options = luaL_optstring(L, arg+2, "flnStu"); + checkstack(L, L1, 3); + if (lua_isnumber(L, arg+1)) { + if (!lua_getstack(L1, (int)lua_tointeger(L, arg+1), &ar)) { + lua_pushnil(L); /* level out of range */ + return 1; + } + } + else if (lua_isfunction(L, arg+1)) { + lua_pushfstring(L, ">%s", options); + options = lua_tostring(L, -1); + lua_pushvalue(L, arg+1); + lua_xmove(L, L1, 1); + } + else + return luaL_argerror(L, arg+1, "function or level expected"); + if (!lua_getinfo(L1, options, &ar)) + return luaL_argerror(L, arg+2, "invalid option"); + lua_createtable(L, 0, 2); + if (strchr(options, 'S')) { + settabss(L, "source", ar.source); + settabss(L, "short_src", ar.short_src); + settabsi(L, "linedefined", ar.linedefined); + settabsi(L, "lastlinedefined", ar.lastlinedefined); + settabss(L, "what", ar.what); + } + if (strchr(options, 'l')) + settabsi(L, "currentline", ar.currentline); + if (strchr(options, 'u')) { + settabsi(L, "nups", ar.nups); + settabsi(L, "nparams", ar.nparams); + settabsb(L, "isvararg", ar.isvararg); + } + if (strchr(options, 'n')) { + settabss(L, "name", ar.name); + settabss(L, "namewhat", ar.namewhat); + } + if (strchr(options, 't')) + settabsb(L, "istailcall", ar.istailcall); + if (strchr(options, 'L')) + treatstackoption(L, L1, "activelines"); + if (strchr(options, 'f')) + treatstackoption(L, L1, "func"); + return 1; /* return table */ +} + + +static int db_getlocal (lua_State *L) { + int arg; + lua_State *L1 = getthread(L, &arg); + lua_Debug ar; + const char *name; + int nvar = luaL_checkint(L, arg+2); /* local-variable index */ + if (lua_isfunction(L, arg + 1)) { /* function argument? */ + lua_pushvalue(L, arg + 1); /* push function */ + lua_pushstring(L, lua_getlocal(L, NULL, nvar)); /* push local name */ + return 1; + } + else { /* stack-level argument */ + if (!lua_getstack(L1, luaL_checkint(L, arg+1), &ar)) /* out of range? */ + return luaL_argerror(L, arg+1, "level out of range"); + checkstack(L, L1, 1); + name = lua_getlocal(L1, &ar, nvar); + if (name) { + lua_xmove(L1, L, 1); /* push local value */ + lua_pushstring(L, name); /* push name */ + lua_pushvalue(L, -2); /* re-order */ + return 2; + } + else { + lua_pushnil(L); /* no name (nor value) */ + return 1; + } + } +} + + +static int db_setlocal (lua_State *L) { + int arg; + lua_State *L1 = getthread(L, &arg); + lua_Debug ar; + if (!lua_getstack(L1, luaL_checkint(L, arg+1), &ar)) /* out of range? */ + return luaL_argerror(L, arg+1, "level out of range"); + luaL_checkany(L, arg+3); + lua_settop(L, arg+3); + checkstack(L, L1, 1); + lua_xmove(L, L1, 1); + lua_pushstring(L, lua_setlocal(L1, &ar, luaL_checkint(L, arg+2))); + return 1; +} + + +static int auxupvalue (lua_State *L, int get) { + const char *name; + int n = luaL_checkint(L, 2); + luaL_checktype(L, 1, LUA_TFUNCTION); + name = get ? lua_getupvalue(L, 1, n) : lua_setupvalue(L, 1, n); + if (name == NULL) return 0; + lua_pushstring(L, name); + lua_insert(L, -(get+1)); + return get + 1; +} + + +static int db_getupvalue (lua_State *L) { + return auxupvalue(L, 1); +} + + +static int db_setupvalue (lua_State *L) { + luaL_checkany(L, 3); + return auxupvalue(L, 0); +} + + +static int checkupval (lua_State *L, int argf, int argnup) { + lua_Debug ar; + int nup = luaL_checkint(L, argnup); + luaL_checktype(L, argf, LUA_TFUNCTION); + lua_pushvalue(L, argf); + lua_getinfo(L, ">u", &ar); + luaL_argcheck(L, 1 <= nup && nup <= ar.nups, argnup, "invalid upvalue index"); + return nup; +} + + +static int db_upvalueid (lua_State *L) { + int n = checkupval(L, 1, 2); + lua_pushlightuserdata(L, lua_upvalueid(L, 1, n)); + return 1; +} + + +static int db_upvaluejoin (lua_State *L) { + int n1 = checkupval(L, 1, 2); + int n2 = checkupval(L, 3, 4); + luaL_argcheck(L, !lua_iscfunction(L, 1), 1, "Lua function expected"); + luaL_argcheck(L, !lua_iscfunction(L, 3), 3, "Lua function expected"); + lua_upvaluejoin(L, 1, n1, 3, n2); + return 0; +} + + +#define gethooktable(L) luaL_getsubtable(L, LUA_REGISTRYINDEX, HOOKKEY) + + +static void hookf (lua_State *L, lua_Debug *ar) { + static const char *const hooknames[] = + {"call", "return", "line", "count", "tail call"}; + gethooktable(L); + lua_pushthread(L); + lua_rawget(L, -2); + if (lua_isfunction(L, -1)) { + lua_pushstring(L, hooknames[(int)ar->event]); + if (ar->currentline >= 0) + lua_pushinteger(L, ar->currentline); + else lua_pushnil(L); + lua_assert(lua_getinfo(L, "lS", ar)); + lua_call(L, 2, 0); + } +} + + +static int makemask (const char *smask, int count) { + int mask = 0; + if (strchr(smask, 'c')) mask |= LUA_MASKCALL; + if (strchr(smask, 'r')) mask |= LUA_MASKRET; + if (strchr(smask, 'l')) mask |= LUA_MASKLINE; + if (count > 0) mask |= LUA_MASKCOUNT; + return mask; +} + + +static char *unmakemask (int mask, char *smask) { + int i = 0; + if (mask & LUA_MASKCALL) smask[i++] = 'c'; + if (mask & LUA_MASKRET) smask[i++] = 'r'; + if (mask & LUA_MASKLINE) smask[i++] = 'l'; + smask[i] = '\0'; + return smask; +} + + +static int db_sethook (lua_State *L) { + int arg, mask, count; + lua_Hook func; + lua_State *L1 = getthread(L, &arg); + if (lua_isnoneornil(L, arg+1)) { + lua_settop(L, arg+1); + func = NULL; mask = 0; count = 0; /* turn off hooks */ + } + else { + const char *smask = luaL_checkstring(L, arg+2); + luaL_checktype(L, arg+1, LUA_TFUNCTION); + count = luaL_optint(L, arg+3, 0); + func = hookf; mask = makemask(smask, count); + } + if (gethooktable(L) == 0) { /* creating hook table? */ + lua_pushstring(L, "k"); + lua_setfield(L, -2, "__mode"); /** hooktable.__mode = "k" */ + lua_pushvalue(L, -1); + lua_setmetatable(L, -2); /* setmetatable(hooktable) = hooktable */ + } + checkstack(L, L1, 1); + lua_pushthread(L1); lua_xmove(L1, L, 1); + lua_pushvalue(L, arg+1); + lua_rawset(L, -3); /* set new hook */ + lua_sethook(L1, func, mask, count); /* set hooks */ + return 0; +} + + +static int db_gethook (lua_State *L) { + int arg; + lua_State *L1 = getthread(L, &arg); + char buff[5]; + int mask = lua_gethookmask(L1); + lua_Hook hook = lua_gethook(L1); + if (hook != NULL && hook != hookf) /* external hook? */ + lua_pushliteral(L, "external hook"); + else { + gethooktable(L); + checkstack(L, L1, 1); + lua_pushthread(L1); lua_xmove(L1, L, 1); + lua_rawget(L, -2); /* get hook */ + lua_remove(L, -2); /* remove hook table */ + } + lua_pushstring(L, unmakemask(mask, buff)); + lua_pushinteger(L, lua_gethookcount(L1)); + return 3; +} + + +static int db_debug (lua_State *L) { + for (;;) { + char buffer[250]; + luai_writestringerror("%s", "lua_debug> "); + if (fgets(buffer, sizeof(buffer), stdin) == 0 || + strcmp(buffer, "cont\n") == 0) + return 0; + if (luaL_loadbuffer(L, buffer, strlen(buffer), "=(debug command)") || + lua_pcall(L, 0, 0, 0)) + luai_writestringerror("%s\n", lua_tostring(L, -1)); + lua_settop(L, 0); /* remove eventual returns */ + } +} + + +static int db_traceback (lua_State *L) { + int arg; + lua_State *L1 = getthread(L, &arg); + const char *msg = lua_tostring(L, arg + 1); + if (msg == NULL && !lua_isnoneornil(L, arg + 1)) /* non-string 'msg'? */ + lua_pushvalue(L, arg + 1); /* return it untouched */ + else { + int level = luaL_optint(L, arg + 2, (L == L1) ? 1 : 0); + luaL_traceback(L, L1, msg, level); + } + return 1; +} + + +static const luaL_Reg dblib[] = { + {"debug", db_debug}, + {"getuservalue", db_getuservalue}, + {"gethook", db_gethook}, + {"getinfo", db_getinfo}, + {"getlocal", db_getlocal}, + {"getregistry", db_getregistry}, + {"getmetatable", db_getmetatable}, + {"getupvalue", db_getupvalue}, + {"upvaluejoin", db_upvaluejoin}, + {"upvalueid", db_upvalueid}, + {"setuservalue", db_setuservalue}, + {"sethook", db_sethook}, + {"setlocal", db_setlocal}, + {"setmetatable", db_setmetatable}, + {"setupvalue", db_setupvalue}, + {"traceback", db_traceback}, + {NULL, NULL} +}; + + +LUAMOD_API int luaopen_debug (lua_State *L) { + luaL_newlib(L, dblib); + return 1; +} + diff --git a/lua-5.2.4/src/ldebug.c b/lua-5.2.4/src/ldebug.c new file mode 100644 index 000000000..96118461d --- /dev/null +++ b/lua-5.2.4/src/ldebug.c @@ -0,0 +1,610 @@ +/* +** $Id: ldebug.c,v 2.90.1.4 2015/02/19 17:05:13 roberto Exp $ +** Debug Interface +** See Copyright Notice in lua.h +*/ + + +#include +#include +#include + + +#define ldebug_c +#define LUA_CORE + +#include "lua.h" + +#include "lapi.h" +#include "lcode.h" +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "lobject.h" +#include "lopcodes.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "ltm.h" +#include "lvm.h" + + + +#define noLuaClosure(f) ((f) == NULL || (f)->c.tt == LUA_TCCL) + + +static const char *getfuncname (lua_State *L, CallInfo *ci, const char **name); + + +static int currentpc (CallInfo *ci) { + lua_assert(isLua(ci)); + return pcRel(ci->u.l.savedpc, ci_func(ci)->p); +} + + +static int currentline (CallInfo *ci) { + return getfuncline(ci_func(ci)->p, currentpc(ci)); +} + + +static void swapextra (lua_State *L) { + if (L->status == LUA_YIELD) { + CallInfo *ci = L->ci; /* get function that yielded */ + StkId temp = ci->func; /* exchange its 'func' and 'extra' values */ + ci->func = restorestack(L, ci->extra); + ci->extra = savestack(L, temp); + } +} + + +/* +** this function can be called asynchronous (e.g. during a signal) +*/ +LUA_API int lua_sethook (lua_State *L, lua_Hook func, int mask, int count) { + if (func == NULL || mask == 0) { /* turn off hooks? */ + mask = 0; + func = NULL; + } + if (isLua(L->ci)) + L->oldpc = L->ci->u.l.savedpc; + L->hook = func; + L->basehookcount = count; + resethookcount(L); + L->hookmask = cast_byte(mask); + return 1; +} + + +LUA_API lua_Hook lua_gethook (lua_State *L) { + return L->hook; +} + + +LUA_API int lua_gethookmask (lua_State *L) { + return L->hookmask; +} + + +LUA_API int lua_gethookcount (lua_State *L) { + return L->basehookcount; +} + + +LUA_API int lua_getstack (lua_State *L, int level, lua_Debug *ar) { + int status; + CallInfo *ci; + if (level < 0) return 0; /* invalid (negative) level */ + lua_lock(L); + for (ci = L->ci; level > 0 && ci != &L->base_ci; ci = ci->previous) + level--; + if (level == 0 && ci != &L->base_ci) { /* level found? */ + status = 1; + ar->i_ci = ci; + } + else status = 0; /* no such level */ + lua_unlock(L); + return status; +} + + +static const char *upvalname (Proto *p, int uv) { + TString *s = check_exp(uv < p->sizeupvalues, p->upvalues[uv].name); + if (s == NULL) return "?"; + else return getstr(s); +} + + +static const char *findvararg (CallInfo *ci, int n, StkId *pos) { + int nparams = clLvalue(ci->func)->p->numparams; + if (n >= ci->u.l.base - ci->func - nparams) + return NULL; /* no such vararg */ + else { + *pos = ci->func + nparams + n; + return "(*vararg)"; /* generic name for any vararg */ + } +} + + +static const char *findlocal (lua_State *L, CallInfo *ci, int n, + StkId *pos) { + const char *name = NULL; + StkId base; + if (isLua(ci)) { + if (n < 0) /* access to vararg values? */ + return findvararg(ci, -n, pos); + else { + base = ci->u.l.base; + name = luaF_getlocalname(ci_func(ci)->p, n, currentpc(ci)); + } + } + else + base = ci->func + 1; + if (name == NULL) { /* no 'standard' name? */ + StkId limit = (ci == L->ci) ? L->top : ci->next->func; + if (limit - base >= n && n > 0) /* is 'n' inside 'ci' stack? */ + name = "(*temporary)"; /* generic name for any valid slot */ + else + return NULL; /* no name */ + } + *pos = base + (n - 1); + return name; +} + + +LUA_API const char *lua_getlocal (lua_State *L, const lua_Debug *ar, int n) { + const char *name; + lua_lock(L); + swapextra(L); + if (ar == NULL) { /* information about non-active function? */ + if (!isLfunction(L->top - 1)) /* not a Lua function? */ + name = NULL; + else /* consider live variables at function start (parameters) */ + name = luaF_getlocalname(clLvalue(L->top - 1)->p, n, 0); + } + else { /* active function; get information through 'ar' */ + StkId pos = 0; /* to avoid warnings */ + name = findlocal(L, ar->i_ci, n, &pos); + if (name) { + setobj2s(L, L->top, pos); + api_incr_top(L); + } + } + swapextra(L); + lua_unlock(L); + return name; +} + + +LUA_API const char *lua_setlocal (lua_State *L, const lua_Debug *ar, int n) { + StkId pos = 0; /* to avoid warnings */ + const char *name; + lua_lock(L); + swapextra(L); + name = findlocal(L, ar->i_ci, n, &pos); + if (name) + setobjs2s(L, pos, L->top - 1); + L->top--; /* pop value */ + swapextra(L); + lua_unlock(L); + return name; +} + + +static void funcinfo (lua_Debug *ar, Closure *cl) { + if (noLuaClosure(cl)) { + ar->source = "=[C]"; + ar->linedefined = -1; + ar->lastlinedefined = -1; + ar->what = "C"; + } + else { + Proto *p = cl->l.p; + ar->source = p->source ? getstr(p->source) : "=?"; + ar->linedefined = p->linedefined; + ar->lastlinedefined = p->lastlinedefined; + ar->what = (ar->linedefined == 0) ? "main" : "Lua"; + } + luaO_chunkid(ar->short_src, ar->source, LUA_IDSIZE); +} + + +static void collectvalidlines (lua_State *L, Closure *f) { + if (noLuaClosure(f)) { + setnilvalue(L->top); + api_incr_top(L); + } + else { + int i; + TValue v; + int *lineinfo = f->l.p->lineinfo; + Table *t = luaH_new(L); /* new table to store active lines */ + sethvalue(L, L->top, t); /* push it on stack */ + api_incr_top(L); + setbvalue(&v, 1); /* boolean 'true' to be the value of all indices */ + for (i = 0; i < f->l.p->sizelineinfo; i++) /* for all lines with code */ + luaH_setint(L, t, lineinfo[i], &v); /* table[line] = true */ + } +} + + +static int auxgetinfo (lua_State *L, const char *what, lua_Debug *ar, + Closure *f, CallInfo *ci) { + int status = 1; + for (; *what; what++) { + switch (*what) { + case 'S': { + funcinfo(ar, f); + break; + } + case 'l': { + ar->currentline = (ci && isLua(ci)) ? currentline(ci) : -1; + break; + } + case 'u': { + ar->nups = (f == NULL) ? 0 : f->c.nupvalues; + if (noLuaClosure(f)) { + ar->isvararg = 1; + ar->nparams = 0; + } + else { + ar->isvararg = f->l.p->is_vararg; + ar->nparams = f->l.p->numparams; + } + break; + } + case 't': { + ar->istailcall = (ci) ? ci->callstatus & CIST_TAIL : 0; + break; + } + case 'n': { + /* calling function is a known Lua function? */ + if (ci && !(ci->callstatus & CIST_TAIL) && isLua(ci->previous)) + ar->namewhat = getfuncname(L, ci->previous, &ar->name); + else + ar->namewhat = NULL; + if (ar->namewhat == NULL) { + ar->namewhat = ""; /* not found */ + ar->name = NULL; + } + break; + } + case 'L': + case 'f': /* handled by lua_getinfo */ + break; + default: status = 0; /* invalid option */ + } + } + return status; +} + + +LUA_API int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar) { + int status; + Closure *cl; + CallInfo *ci; + StkId func; + lua_lock(L); + swapextra(L); + if (*what == '>') { + ci = NULL; + func = L->top - 1; + api_check(L, ttisfunction(func), "function expected"); + what++; /* skip the '>' */ + L->top--; /* pop function */ + } + else { + ci = ar->i_ci; + func = ci->func; + lua_assert(ttisfunction(ci->func)); + } + cl = ttisclosure(func) ? clvalue(func) : NULL; + status = auxgetinfo(L, what, ar, cl, ci); + if (strchr(what, 'f')) { + setobjs2s(L, L->top, func); + api_incr_top(L); + } + swapextra(L); + if (strchr(what, 'L')) + collectvalidlines(L, cl); + lua_unlock(L); + return status; +} + + +/* +** {====================================================== +** Symbolic Execution +** ======================================================= +*/ + +static const char *getobjname (Proto *p, int lastpc, int reg, + const char **name); + + +/* +** find a "name" for the RK value 'c' +*/ +static void kname (Proto *p, int pc, int c, const char **name) { + if (ISK(c)) { /* is 'c' a constant? */ + TValue *kvalue = &p->k[INDEXK(c)]; + if (ttisstring(kvalue)) { /* literal constant? */ + *name = svalue(kvalue); /* it is its own name */ + return; + } + /* else no reasonable name found */ + } + else { /* 'c' is a register */ + const char *what = getobjname(p, pc, c, name); /* search for 'c' */ + if (what && *what == 'c') { /* found a constant name? */ + return; /* 'name' already filled */ + } + /* else no reasonable name found */ + } + *name = "?"; /* no reasonable name found */ +} + + +static int filterpc (int pc, int jmptarget) { + if (pc < jmptarget) /* is code conditional (inside a jump)? */ + return -1; /* cannot know who sets that register */ + else return pc; /* current position sets that register */ +} + + +/* +** try to find last instruction before 'lastpc' that modified register 'reg' +*/ +static int findsetreg (Proto *p, int lastpc, int reg) { + int pc; + int setreg = -1; /* keep last instruction that changed 'reg' */ + int jmptarget = 0; /* any code before this address is conditional */ + for (pc = 0; pc < lastpc; pc++) { + Instruction i = p->code[pc]; + OpCode op = GET_OPCODE(i); + int a = GETARG_A(i); + switch (op) { + case OP_LOADNIL: { + int b = GETARG_B(i); + if (a <= reg && reg <= a + b) /* set registers from 'a' to 'a+b' */ + setreg = filterpc(pc, jmptarget); + break; + } + case OP_TFORCALL: { + if (reg >= a + 2) /* affect all regs above its base */ + setreg = filterpc(pc, jmptarget); + break; + } + case OP_CALL: + case OP_TAILCALL: { + if (reg >= a) /* affect all registers above base */ + setreg = filterpc(pc, jmptarget); + break; + } + case OP_JMP: { + int b = GETARG_sBx(i); + int dest = pc + 1 + b; + /* jump is forward and do not skip `lastpc'? */ + if (pc < dest && dest <= lastpc) { + if (dest > jmptarget) + jmptarget = dest; /* update 'jmptarget' */ + } + break; + } + case OP_TEST: { + if (reg == a) /* jumped code can change 'a' */ + setreg = filterpc(pc, jmptarget); + break; + } + default: + if (testAMode(op) && reg == a) /* any instruction that set A */ + setreg = filterpc(pc, jmptarget); + break; + } + } + return setreg; +} + + +static const char *getobjname (Proto *p, int lastpc, int reg, + const char **name) { + int pc; + *name = luaF_getlocalname(p, reg + 1, lastpc); + if (*name) /* is a local? */ + return "local"; + /* else try symbolic execution */ + pc = findsetreg(p, lastpc, reg); + if (pc != -1) { /* could find instruction? */ + Instruction i = p->code[pc]; + OpCode op = GET_OPCODE(i); + switch (op) { + case OP_MOVE: { + int b = GETARG_B(i); /* move from 'b' to 'a' */ + if (b < GETARG_A(i)) + return getobjname(p, pc, b, name); /* get name for 'b' */ + break; + } + case OP_GETTABUP: + case OP_GETTABLE: { + int k = GETARG_C(i); /* key index */ + int t = GETARG_B(i); /* table index */ + const char *vn = (op == OP_GETTABLE) /* name of indexed variable */ + ? luaF_getlocalname(p, t + 1, pc) + : upvalname(p, t); + kname(p, pc, k, name); + return (vn && strcmp(vn, LUA_ENV) == 0) ? "global" : "field"; + } + case OP_GETUPVAL: { + *name = upvalname(p, GETARG_B(i)); + return "upvalue"; + } + case OP_LOADK: + case OP_LOADKX: { + int b = (op == OP_LOADK) ? GETARG_Bx(i) + : GETARG_Ax(p->code[pc + 1]); + if (ttisstring(&p->k[b])) { + *name = svalue(&p->k[b]); + return "constant"; + } + break; + } + case OP_SELF: { + int k = GETARG_C(i); /* key index */ + kname(p, pc, k, name); + return "method"; + } + default: break; /* go through to return NULL */ + } + } + return NULL; /* could not find reasonable name */ +} + + +static const char *getfuncname (lua_State *L, CallInfo *ci, const char **name) { + TMS tm; + Proto *p = ci_func(ci)->p; /* calling function */ + int pc = currentpc(ci); /* calling instruction index */ + Instruction i = p->code[pc]; /* calling instruction */ + switch (GET_OPCODE(i)) { + case OP_CALL: + case OP_TAILCALL: /* get function name */ + return getobjname(p, pc, GETARG_A(i), name); + case OP_TFORCALL: { /* for iterator */ + *name = "for iterator"; + return "for iterator"; + } + /* all other instructions can call only through metamethods */ + case OP_SELF: + case OP_GETTABUP: + case OP_GETTABLE: tm = TM_INDEX; break; + case OP_SETTABUP: + case OP_SETTABLE: tm = TM_NEWINDEX; break; + case OP_EQ: tm = TM_EQ; break; + case OP_ADD: tm = TM_ADD; break; + case OP_SUB: tm = TM_SUB; break; + case OP_MUL: tm = TM_MUL; break; + case OP_DIV: tm = TM_DIV; break; + case OP_MOD: tm = TM_MOD; break; + case OP_POW: tm = TM_POW; break; + case OP_UNM: tm = TM_UNM; break; + case OP_LEN: tm = TM_LEN; break; + case OP_LT: tm = TM_LT; break; + case OP_LE: tm = TM_LE; break; + case OP_CONCAT: tm = TM_CONCAT; break; + default: + return NULL; /* else no useful name can be found */ + } + *name = getstr(G(L)->tmname[tm]); + return "metamethod"; +} + +/* }====================================================== */ + + + +/* +** only ANSI way to check whether a pointer points to an array +** (used only for error messages, so efficiency is not a big concern) +*/ +static int isinstack (CallInfo *ci, const TValue *o) { + StkId p; + for (p = ci->u.l.base; p < ci->top; p++) + if (o == p) return 1; + return 0; +} + + +static const char *getupvalname (CallInfo *ci, const TValue *o, + const char **name) { + LClosure *c = ci_func(ci); + int i; + for (i = 0; i < c->nupvalues; i++) { + if (c->upvals[i]->v == o) { + *name = upvalname(c->p, i); + return "upvalue"; + } + } + return NULL; +} + + +l_noret luaG_typeerror (lua_State *L, const TValue *o, const char *op) { + CallInfo *ci = L->ci; + const char *name = NULL; + const char *t = objtypename(o); + const char *kind = NULL; + if (isLua(ci)) { + kind = getupvalname(ci, o, &name); /* check whether 'o' is an upvalue */ + if (!kind && isinstack(ci, o)) /* no? try a register */ + kind = getobjname(ci_func(ci)->p, currentpc(ci), + cast_int(o - ci->u.l.base), &name); + } + if (kind) + luaG_runerror(L, "attempt to %s %s " LUA_QS " (a %s value)", + op, kind, name, t); + else + luaG_runerror(L, "attempt to %s a %s value", op, t); +} + + +l_noret luaG_concaterror (lua_State *L, StkId p1, StkId p2) { + if (ttisstring(p1) || ttisnumber(p1)) p1 = p2; + lua_assert(!ttisstring(p1) && !ttisnumber(p1)); + luaG_typeerror(L, p1, "concatenate"); +} + + +l_noret luaG_aritherror (lua_State *L, const TValue *p1, const TValue *p2) { + TValue temp; + if (luaV_tonumber(p1, &temp) == NULL) + p2 = p1; /* first operand is wrong */ + luaG_typeerror(L, p2, "perform arithmetic on"); +} + + +l_noret luaG_ordererror (lua_State *L, const TValue *p1, const TValue *p2) { + const char *t1 = objtypename(p1); + const char *t2 = objtypename(p2); + if (t1 == t2) + luaG_runerror(L, "attempt to compare two %s values", t1); + else + luaG_runerror(L, "attempt to compare %s with %s", t1, t2); +} + + +static void addinfo (lua_State *L, const char *msg) { + CallInfo *ci = L->ci; + if (isLua(ci)) { /* is Lua code? */ + char buff[LUA_IDSIZE]; /* add file:line information */ + int line = currentline(ci); + TString *src = ci_func(ci)->p->source; + if (src) + luaO_chunkid(buff, getstr(src), LUA_IDSIZE); + else { /* no source available; use "?" instead */ + buff[0] = '?'; buff[1] = '\0'; + } + luaO_pushfstring(L, "%s:%d: %s", buff, line, msg); + } +} + + +l_noret luaG_errormsg (lua_State *L) { + if (L->errfunc != 0) { /* is there an error handling function? */ + StkId errfunc = restorestack(L, L->errfunc); + if (!ttisfunction(errfunc)) luaD_throw(L, LUA_ERRERR); + setobjs2s(L, L->top, L->top - 1); /* move argument */ + setobjs2s(L, L->top - 1, errfunc); /* push function */ + L->top++; + luaD_call(L, L->top - 2, 1, 0); /* call it */ + } + luaD_throw(L, LUA_ERRRUN); +} + + +l_noret luaG_runerror (lua_State *L, const char *fmt, ...) { + va_list argp; + va_start(argp, fmt); + addinfo(L, luaO_pushvfstring(L, fmt, argp)); + va_end(argp); + luaG_errormsg(L); +} + diff --git a/lua-5.2.4/src/ldebug.h b/lua-5.2.4/src/ldebug.h new file mode 100644 index 000000000..6445c763e --- /dev/null +++ b/lua-5.2.4/src/ldebug.h @@ -0,0 +1,34 @@ +/* +** $Id: ldebug.h,v 2.7.1.1 2013/04/12 18:48:47 roberto Exp $ +** Auxiliary functions from Debug Interface module +** See Copyright Notice in lua.h +*/ + +#ifndef ldebug_h +#define ldebug_h + + +#include "lstate.h" + + +#define pcRel(pc, p) (cast(int, (pc) - (p)->code) - 1) + +#define getfuncline(f,pc) (((f)->lineinfo) ? (f)->lineinfo[pc] : 0) + +#define resethookcount(L) (L->hookcount = L->basehookcount) + +/* Active Lua function (given call info) */ +#define ci_func(ci) (clLvalue((ci)->func)) + + +LUAI_FUNC l_noret luaG_typeerror (lua_State *L, const TValue *o, + const char *opname); +LUAI_FUNC l_noret luaG_concaterror (lua_State *L, StkId p1, StkId p2); +LUAI_FUNC l_noret luaG_aritherror (lua_State *L, const TValue *p1, + const TValue *p2); +LUAI_FUNC l_noret luaG_ordererror (lua_State *L, const TValue *p1, + const TValue *p2); +LUAI_FUNC l_noret luaG_runerror (lua_State *L, const char *fmt, ...); +LUAI_FUNC l_noret luaG_errormsg (lua_State *L); + +#endif diff --git a/lua-5.2.4/src/ldo.c b/lua-5.2.4/src/ldo.c new file mode 100644 index 000000000..e9dd5fa95 --- /dev/null +++ b/lua-5.2.4/src/ldo.c @@ -0,0 +1,681 @@ +/* +** $Id: ldo.c,v 2.108.1.3 2013/11/08 18:22:50 roberto Exp $ +** Stack and Call structure of Lua +** See Copyright Notice in lua.h +*/ + + +#include +#include +#include + +#define ldo_c +#define LUA_CORE + +#include "lua.h" + +#include "lapi.h" +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "lgc.h" +#include "lmem.h" +#include "lobject.h" +#include "lopcodes.h" +#include "lparser.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "ltm.h" +#include "lundump.h" +#include "lvm.h" +#include "lzio.h" + + + + +/* +** {====================================================== +** Error-recovery functions +** ======================================================= +*/ + +/* +** LUAI_THROW/LUAI_TRY define how Lua does exception handling. By +** default, Lua handles errors with exceptions when compiling as +** C++ code, with _longjmp/_setjmp when asked to use them, and with +** longjmp/setjmp otherwise. +*/ +#if !defined(LUAI_THROW) + +#if defined(__cplusplus) && !defined(LUA_USE_LONGJMP) +/* C++ exceptions */ +#define LUAI_THROW(L,c) throw(c) +#define LUAI_TRY(L,c,a) \ + try { a } catch(...) { if ((c)->status == 0) (c)->status = -1; } +#define luai_jmpbuf int /* dummy variable */ + +#elif defined(LUA_USE_ULONGJMP) +/* in Unix, try _longjmp/_setjmp (more efficient) */ +#define LUAI_THROW(L,c) _longjmp((c)->b, 1) +#define LUAI_TRY(L,c,a) if (_setjmp((c)->b) == 0) { a } +#define luai_jmpbuf jmp_buf + +#else +/* default handling with long jumps */ +#define LUAI_THROW(L,c) longjmp((c)->b, 1) +#define LUAI_TRY(L,c,a) if (setjmp((c)->b) == 0) { a } +#define luai_jmpbuf jmp_buf + +#endif + +#endif + + + +/* chain list of long jump buffers */ +struct lua_longjmp { + struct lua_longjmp *previous; + luai_jmpbuf b; + volatile int status; /* error code */ +}; + + +static void seterrorobj (lua_State *L, int errcode, StkId oldtop) { + switch (errcode) { + case LUA_ERRMEM: { /* memory error? */ + setsvalue2s(L, oldtop, G(L)->memerrmsg); /* reuse preregistered msg. */ + break; + } + case LUA_ERRERR: { + setsvalue2s(L, oldtop, luaS_newliteral(L, "error in error handling")); + break; + } + default: { + setobjs2s(L, oldtop, L->top - 1); /* error message on current top */ + break; + } + } + L->top = oldtop + 1; +} + + +l_noret luaD_throw (lua_State *L, int errcode) { + if (L->errorJmp) { /* thread has an error handler? */ + L->errorJmp->status = errcode; /* set status */ + LUAI_THROW(L, L->errorJmp); /* jump to it */ + } + else { /* thread has no error handler */ + L->status = cast_byte(errcode); /* mark it as dead */ + if (G(L)->mainthread->errorJmp) { /* main thread has a handler? */ + setobjs2s(L, G(L)->mainthread->top++, L->top - 1); /* copy error obj. */ + luaD_throw(G(L)->mainthread, errcode); /* re-throw in main thread */ + } + else { /* no handler at all; abort */ + if (G(L)->panic) { /* panic function? */ + lua_unlock(L); + G(L)->panic(L); /* call it (last chance to jump out) */ + } + abort(); + } + } +} + + +int luaD_rawrunprotected (lua_State *L, Pfunc f, void *ud) { + unsigned short oldnCcalls = L->nCcalls; + struct lua_longjmp lj; + lj.status = LUA_OK; + lj.previous = L->errorJmp; /* chain new error handler */ + L->errorJmp = &lj; + LUAI_TRY(L, &lj, + (*f)(L, ud); + ); + L->errorJmp = lj.previous; /* restore old error handler */ + L->nCcalls = oldnCcalls; + return lj.status; +} + +/* }====================================================== */ + + +static void correctstack (lua_State *L, TValue *oldstack) { + CallInfo *ci; + GCObject *up; + L->top = (L->top - oldstack) + L->stack; + for (up = L->openupval; up != NULL; up = up->gch.next) + gco2uv(up)->v = (gco2uv(up)->v - oldstack) + L->stack; + for (ci = L->ci; ci != NULL; ci = ci->previous) { + ci->top = (ci->top - oldstack) + L->stack; + ci->func = (ci->func - oldstack) + L->stack; + if (isLua(ci)) + ci->u.l.base = (ci->u.l.base - oldstack) + L->stack; + } +} + + +/* some space for error handling */ +#define ERRORSTACKSIZE (LUAI_MAXSTACK + 200) + + +void luaD_reallocstack (lua_State *L, int newsize) { + TValue *oldstack = L->stack; + int lim = L->stacksize; + lua_assert(newsize <= LUAI_MAXSTACK || newsize == ERRORSTACKSIZE); + lua_assert(L->stack_last - L->stack == L->stacksize - EXTRA_STACK); + luaM_reallocvector(L, L->stack, L->stacksize, newsize, TValue); + for (; lim < newsize; lim++) + setnilvalue(L->stack + lim); /* erase new segment */ + L->stacksize = newsize; + L->stack_last = L->stack + newsize - EXTRA_STACK; + correctstack(L, oldstack); +} + + +void luaD_growstack (lua_State *L, int n) { + int size = L->stacksize; + if (size > LUAI_MAXSTACK) /* error after extra size? */ + luaD_throw(L, LUA_ERRERR); + else { + int needed = cast_int(L->top - L->stack) + n + EXTRA_STACK; + int newsize = 2 * size; + if (newsize > LUAI_MAXSTACK) newsize = LUAI_MAXSTACK; + if (newsize < needed) newsize = needed; + if (newsize > LUAI_MAXSTACK) { /* stack overflow? */ + luaD_reallocstack(L, ERRORSTACKSIZE); + luaG_runerror(L, "stack overflow"); + } + else + luaD_reallocstack(L, newsize); + } +} + + +static int stackinuse (lua_State *L) { + CallInfo *ci; + StkId lim = L->top; + for (ci = L->ci; ci != NULL; ci = ci->previous) { + lua_assert(ci->top <= L->stack_last); + if (lim < ci->top) lim = ci->top; + } + return cast_int(lim - L->stack) + 1; /* part of stack in use */ +} + + +void luaD_shrinkstack (lua_State *L) { + int inuse = stackinuse(L); + int goodsize = inuse + (inuse / 8) + 2*EXTRA_STACK; + if (goodsize > LUAI_MAXSTACK) goodsize = LUAI_MAXSTACK; + if (inuse > LUAI_MAXSTACK || /* handling stack overflow? */ + goodsize >= L->stacksize) /* would grow instead of shrink? */ + condmovestack(L); /* don't change stack (change only for debugging) */ + else + luaD_reallocstack(L, goodsize); /* shrink it */ +} + + +void luaD_hook (lua_State *L, int event, int line) { + lua_Hook hook = L->hook; + if (hook && L->allowhook) { + CallInfo *ci = L->ci; + ptrdiff_t top = savestack(L, L->top); + ptrdiff_t ci_top = savestack(L, ci->top); + lua_Debug ar; + ar.event = event; + ar.currentline = line; + ar.i_ci = ci; + luaD_checkstack(L, LUA_MINSTACK); /* ensure minimum stack size */ + ci->top = L->top + LUA_MINSTACK; + lua_assert(ci->top <= L->stack_last); + L->allowhook = 0; /* cannot call hooks inside a hook */ + ci->callstatus |= CIST_HOOKED; + lua_unlock(L); + (*hook)(L, &ar); + lua_lock(L); + lua_assert(!L->allowhook); + L->allowhook = 1; + ci->top = restorestack(L, ci_top); + L->top = restorestack(L, top); + ci->callstatus &= ~CIST_HOOKED; + } +} + + +static void callhook (lua_State *L, CallInfo *ci) { + int hook = LUA_HOOKCALL; + ci->u.l.savedpc++; /* hooks assume 'pc' is already incremented */ + if (isLua(ci->previous) && + GET_OPCODE(*(ci->previous->u.l.savedpc - 1)) == OP_TAILCALL) { + ci->callstatus |= CIST_TAIL; + hook = LUA_HOOKTAILCALL; + } + luaD_hook(L, hook, -1); + ci->u.l.savedpc--; /* correct 'pc' */ +} + + +static StkId adjust_varargs (lua_State *L, Proto *p, int actual) { + int i; + int nfixargs = p->numparams; + StkId base, fixed; + lua_assert(actual >= nfixargs); + /* move fixed parameters to final position */ + luaD_checkstack(L, p->maxstacksize); /* check again for new 'base' */ + fixed = L->top - actual; /* first fixed argument */ + base = L->top; /* final position of first argument */ + for (i=0; itop++, fixed + i); + setnilvalue(fixed + i); + } + return base; +} + + +static StkId tryfuncTM (lua_State *L, StkId func) { + const TValue *tm = luaT_gettmbyobj(L, func, TM_CALL); + StkId p; + ptrdiff_t funcr = savestack(L, func); + if (!ttisfunction(tm)) + luaG_typeerror(L, func, "call"); + /* Open a hole inside the stack at `func' */ + for (p = L->top; p > func; p--) setobjs2s(L, p, p-1); + incr_top(L); + func = restorestack(L, funcr); /* previous call may change stack */ + setobj2s(L, func, tm); /* tag method is the new function to be called */ + return func; +} + + + +#define next_ci(L) (L->ci = (L->ci->next ? L->ci->next : luaE_extendCI(L))) + + +/* +** returns true if function has been executed (C function) +*/ +int luaD_precall (lua_State *L, StkId func, int nresults) { + lua_CFunction f; + CallInfo *ci; + int n; /* number of arguments (Lua) or returns (C) */ + ptrdiff_t funcr = savestack(L, func); + switch (ttype(func)) { + case LUA_TLCF: /* light C function */ + f = fvalue(func); + goto Cfunc; + case LUA_TCCL: { /* C closure */ + f = clCvalue(func)->f; + Cfunc: + luaD_checkstack(L, LUA_MINSTACK); /* ensure minimum stack size */ + ci = next_ci(L); /* now 'enter' new function */ + ci->nresults = nresults; + ci->func = restorestack(L, funcr); + ci->top = L->top + LUA_MINSTACK; + lua_assert(ci->top <= L->stack_last); + ci->callstatus = 0; + luaC_checkGC(L); /* stack grow uses memory */ + if (L->hookmask & LUA_MASKCALL) + luaD_hook(L, LUA_HOOKCALL, -1); + lua_unlock(L); + n = (*f)(L); /* do the actual call */ + lua_lock(L); + api_checknelems(L, n); + luaD_poscall(L, L->top - n); + return 1; + } + case LUA_TLCL: { /* Lua function: prepare its call */ + StkId base; + Proto *p = clLvalue(func)->p; + n = cast_int(L->top - func) - 1; /* number of real arguments */ + luaD_checkstack(L, p->maxstacksize); + for (; n < p->numparams; n++) + setnilvalue(L->top++); /* complete missing arguments */ + if (!p->is_vararg) { + func = restorestack(L, funcr); + base = func + 1; + } + else { + base = adjust_varargs(L, p, n); + func = restorestack(L, funcr); /* previous call can change stack */ + } + ci = next_ci(L); /* now 'enter' new function */ + ci->nresults = nresults; + ci->func = func; + ci->u.l.base = base; + ci->top = base + p->maxstacksize; + lua_assert(ci->top <= L->stack_last); + ci->u.l.savedpc = p->code; /* starting point */ + ci->callstatus = CIST_LUA; + L->top = ci->top; + luaC_checkGC(L); /* stack grow uses memory */ + if (L->hookmask & LUA_MASKCALL) + callhook(L, ci); + return 0; + } + default: { /* not a function */ + func = tryfuncTM(L, func); /* retry with 'function' tag method */ + return luaD_precall(L, func, nresults); /* now it must be a function */ + } + } +} + + +int luaD_poscall (lua_State *L, StkId firstResult) { + StkId res; + int wanted, i; + CallInfo *ci = L->ci; + if (L->hookmask & (LUA_MASKRET | LUA_MASKLINE)) { + if (L->hookmask & LUA_MASKRET) { + ptrdiff_t fr = savestack(L, firstResult); /* hook may change stack */ + luaD_hook(L, LUA_HOOKRET, -1); + firstResult = restorestack(L, fr); + } + L->oldpc = ci->previous->u.l.savedpc; /* 'oldpc' for caller function */ + } + res = ci->func; /* res == final position of 1st result */ + wanted = ci->nresults; + L->ci = ci = ci->previous; /* back to caller */ + /* move results to correct place */ + for (i = wanted; i != 0 && firstResult < L->top; i--) + setobjs2s(L, res++, firstResult++); + while (i-- > 0) + setnilvalue(res++); + L->top = res; + return (wanted - LUA_MULTRET); /* 0 iff wanted == LUA_MULTRET */ +} + + +/* +** Call a function (C or Lua). The function to be called is at *func. +** The arguments are on the stack, right after the function. +** When returns, all the results are on the stack, starting at the original +** function position. +*/ +void luaD_call (lua_State *L, StkId func, int nResults, int allowyield) { + if (++L->nCcalls >= LUAI_MAXCCALLS) { + if (L->nCcalls == LUAI_MAXCCALLS) + luaG_runerror(L, "C stack overflow"); + else if (L->nCcalls >= (LUAI_MAXCCALLS + (LUAI_MAXCCALLS>>3))) + luaD_throw(L, LUA_ERRERR); /* error while handing stack error */ + } + if (!allowyield) L->nny++; + if (!luaD_precall(L, func, nResults)) /* is a Lua function? */ + luaV_execute(L); /* call it */ + if (!allowyield) L->nny--; + L->nCcalls--; +} + + +static void finishCcall (lua_State *L) { + CallInfo *ci = L->ci; + int n; + lua_assert(ci->u.c.k != NULL); /* must have a continuation */ + lua_assert(L->nny == 0); + if (ci->callstatus & CIST_YPCALL) { /* was inside a pcall? */ + ci->callstatus &= ~CIST_YPCALL; /* finish 'lua_pcall' */ + L->errfunc = ci->u.c.old_errfunc; + } + /* finish 'lua_callk'/'lua_pcall' */ + adjustresults(L, ci->nresults); + /* call continuation function */ + if (!(ci->callstatus & CIST_STAT)) /* no call status? */ + ci->u.c.status = LUA_YIELD; /* 'default' status */ + lua_assert(ci->u.c.status != LUA_OK); + ci->callstatus = (ci->callstatus & ~(CIST_YPCALL | CIST_STAT)) | CIST_YIELDED; + lua_unlock(L); + n = (*ci->u.c.k)(L); + lua_lock(L); + api_checknelems(L, n); + /* finish 'luaD_precall' */ + luaD_poscall(L, L->top - n); +} + + +static void unroll (lua_State *L, void *ud) { + UNUSED(ud); + for (;;) { + if (L->ci == &L->base_ci) /* stack is empty? */ + return; /* coroutine finished normally */ + if (!isLua(L->ci)) /* C function? */ + finishCcall(L); + else { /* Lua function */ + luaV_finishOp(L); /* finish interrupted instruction */ + luaV_execute(L); /* execute down to higher C 'boundary' */ + } + } +} + + +/* +** check whether thread has a suspended protected call +*/ +static CallInfo *findpcall (lua_State *L) { + CallInfo *ci; + for (ci = L->ci; ci != NULL; ci = ci->previous) { /* search for a pcall */ + if (ci->callstatus & CIST_YPCALL) + return ci; + } + return NULL; /* no pending pcall */ +} + + +static int recover (lua_State *L, int status) { + StkId oldtop; + CallInfo *ci = findpcall(L); + if (ci == NULL) return 0; /* no recovery point */ + /* "finish" luaD_pcall */ + oldtop = restorestack(L, ci->extra); + luaF_close(L, oldtop); + seterrorobj(L, status, oldtop); + L->ci = ci; + L->allowhook = ci->u.c.old_allowhook; + L->nny = 0; /* should be zero to be yieldable */ + luaD_shrinkstack(L); + L->errfunc = ci->u.c.old_errfunc; + ci->callstatus |= CIST_STAT; /* call has error status */ + ci->u.c.status = status; /* (here it is) */ + return 1; /* continue running the coroutine */ +} + + +/* +** signal an error in the call to 'resume', not in the execution of the +** coroutine itself. (Such errors should not be handled by any coroutine +** error handler and should not kill the coroutine.) +*/ +static l_noret resume_error (lua_State *L, const char *msg, StkId firstArg) { + L->top = firstArg; /* remove args from the stack */ + setsvalue2s(L, L->top, luaS_new(L, msg)); /* push error message */ + api_incr_top(L); + luaD_throw(L, -1); /* jump back to 'lua_resume' */ +} + + +/* +** do the work for 'lua_resume' in protected mode +*/ +static void resume (lua_State *L, void *ud) { + int nCcalls = L->nCcalls; + StkId firstArg = cast(StkId, ud); + CallInfo *ci = L->ci; + if (nCcalls >= LUAI_MAXCCALLS) + resume_error(L, "C stack overflow", firstArg); + if (L->status == LUA_OK) { /* may be starting a coroutine */ + if (ci != &L->base_ci) /* not in base level? */ + resume_error(L, "cannot resume non-suspended coroutine", firstArg); + /* coroutine is in base level; start running it */ + if (!luaD_precall(L, firstArg - 1, LUA_MULTRET)) /* Lua function? */ + luaV_execute(L); /* call it */ + } + else if (L->status != LUA_YIELD) + resume_error(L, "cannot resume dead coroutine", firstArg); + else { /* resuming from previous yield */ + L->status = LUA_OK; + ci->func = restorestack(L, ci->extra); + if (isLua(ci)) /* yielded inside a hook? */ + luaV_execute(L); /* just continue running Lua code */ + else { /* 'common' yield */ + if (ci->u.c.k != NULL) { /* does it have a continuation? */ + int n; + ci->u.c.status = LUA_YIELD; /* 'default' status */ + ci->callstatus |= CIST_YIELDED; + lua_unlock(L); + n = (*ci->u.c.k)(L); /* call continuation */ + lua_lock(L); + api_checknelems(L, n); + firstArg = L->top - n; /* yield results come from continuation */ + } + luaD_poscall(L, firstArg); /* finish 'luaD_precall' */ + } + unroll(L, NULL); + } + lua_assert(nCcalls == L->nCcalls); +} + + +LUA_API int lua_resume (lua_State *L, lua_State *from, int nargs) { + int status; + int oldnny = L->nny; /* save 'nny' */ + lua_lock(L); + luai_userstateresume(L, nargs); + L->nCcalls = (from) ? from->nCcalls + 1 : 1; + L->nny = 0; /* allow yields */ + api_checknelems(L, (L->status == LUA_OK) ? nargs + 1 : nargs); + status = luaD_rawrunprotected(L, resume, L->top - nargs); + if (status == -1) /* error calling 'lua_resume'? */ + status = LUA_ERRRUN; + else { /* yield or regular error */ + while (status != LUA_OK && status != LUA_YIELD) { /* error? */ + if (recover(L, status)) /* recover point? */ + status = luaD_rawrunprotected(L, unroll, NULL); /* run continuation */ + else { /* unrecoverable error */ + L->status = cast_byte(status); /* mark thread as `dead' */ + seterrorobj(L, status, L->top); + L->ci->top = L->top; + break; + } + } + lua_assert(status == L->status); + } + L->nny = oldnny; /* restore 'nny' */ + L->nCcalls--; + lua_assert(L->nCcalls == ((from) ? from->nCcalls : 0)); + lua_unlock(L); + return status; +} + + +LUA_API int lua_yieldk (lua_State *L, int nresults, int ctx, lua_CFunction k) { + CallInfo *ci = L->ci; + luai_userstateyield(L, nresults); + lua_lock(L); + api_checknelems(L, nresults); + if (L->nny > 0) { + if (L != G(L)->mainthread) + luaG_runerror(L, "attempt to yield across a C-call boundary"); + else + luaG_runerror(L, "attempt to yield from outside a coroutine"); + } + L->status = LUA_YIELD; + ci->extra = savestack(L, ci->func); /* save current 'func' */ + if (isLua(ci)) { /* inside a hook? */ + api_check(L, k == NULL, "hooks cannot continue after yielding"); + } + else { + if ((ci->u.c.k = k) != NULL) /* is there a continuation? */ + ci->u.c.ctx = ctx; /* save context */ + ci->func = L->top - nresults - 1; /* protect stack below results */ + luaD_throw(L, LUA_YIELD); + } + lua_assert(ci->callstatus & CIST_HOOKED); /* must be inside a hook */ + lua_unlock(L); + return 0; /* return to 'luaD_hook' */ +} + + +int luaD_pcall (lua_State *L, Pfunc func, void *u, + ptrdiff_t old_top, ptrdiff_t ef) { + int status; + CallInfo *old_ci = L->ci; + lu_byte old_allowhooks = L->allowhook; + unsigned short old_nny = L->nny; + ptrdiff_t old_errfunc = L->errfunc; + L->errfunc = ef; + status = luaD_rawrunprotected(L, func, u); + if (status != LUA_OK) { /* an error occurred? */ + StkId oldtop = restorestack(L, old_top); + luaF_close(L, oldtop); /* close possible pending closures */ + seterrorobj(L, status, oldtop); + L->ci = old_ci; + L->allowhook = old_allowhooks; + L->nny = old_nny; + luaD_shrinkstack(L); + } + L->errfunc = old_errfunc; + return status; +} + + + +/* +** Execute a protected parser. +*/ +struct SParser { /* data to `f_parser' */ + ZIO *z; + Mbuffer buff; /* dynamic structure used by the scanner */ + Dyndata dyd; /* dynamic structures used by the parser */ + const char *mode; + const char *name; +}; + + +static void checkmode (lua_State *L, const char *mode, const char *x) { + if (mode && strchr(mode, x[0]) == NULL) { + luaO_pushfstring(L, + "attempt to load a %s chunk (mode is " LUA_QS ")", x, mode); + luaD_throw(L, LUA_ERRSYNTAX); + } +} + + +static void f_parser (lua_State *L, void *ud) { + int i; + Closure *cl; + struct SParser *p = cast(struct SParser *, ud); + int c = zgetc(p->z); /* read first character */ + if (c == LUA_SIGNATURE[0]) { + checkmode(L, p->mode, "binary"); + cl = luaU_undump(L, p->z, &p->buff, p->name); + } + else { + checkmode(L, p->mode, "text"); + cl = luaY_parser(L, p->z, &p->buff, &p->dyd, p->name, c); + } + lua_assert(cl->l.nupvalues == cl->l.p->sizeupvalues); + for (i = 0; i < cl->l.nupvalues; i++) { /* initialize upvalues */ + UpVal *up = luaF_newupval(L); + cl->l.upvals[i] = up; + luaC_objbarrier(L, cl, up); + } +} + + +int luaD_protectedparser (lua_State *L, ZIO *z, const char *name, + const char *mode) { + struct SParser p; + int status; + L->nny++; /* cannot yield during parsing */ + p.z = z; p.name = name; p.mode = mode; + p.dyd.actvar.arr = NULL; p.dyd.actvar.size = 0; + p.dyd.gt.arr = NULL; p.dyd.gt.size = 0; + p.dyd.label.arr = NULL; p.dyd.label.size = 0; + luaZ_initbuffer(L, &p.buff); + status = luaD_pcall(L, f_parser, &p, savestack(L, L->top), L->errfunc); + luaZ_freebuffer(L, &p.buff); + luaM_freearray(L, p.dyd.actvar.arr, p.dyd.actvar.size); + luaM_freearray(L, p.dyd.gt.arr, p.dyd.gt.size); + luaM_freearray(L, p.dyd.label.arr, p.dyd.label.size); + L->nny--; + return status; +} + + diff --git a/lua-5.2.4/src/ldo.h b/lua-5.2.4/src/ldo.h new file mode 100644 index 000000000..d3d3082c9 --- /dev/null +++ b/lua-5.2.4/src/ldo.h @@ -0,0 +1,46 @@ +/* +** $Id: ldo.h,v 2.20.1.1 2013/04/12 18:48:47 roberto Exp $ +** Stack and Call structure of Lua +** See Copyright Notice in lua.h +*/ + +#ifndef ldo_h +#define ldo_h + + +#include "lobject.h" +#include "lstate.h" +#include "lzio.h" + + +#define luaD_checkstack(L,n) if (L->stack_last - L->top <= (n)) \ + luaD_growstack(L, n); else condmovestack(L); + + +#define incr_top(L) {L->top++; luaD_checkstack(L,0);} + +#define savestack(L,p) ((char *)(p) - (char *)L->stack) +#define restorestack(L,n) ((TValue *)((char *)L->stack + (n))) + + +/* type of protected functions, to be ran by `runprotected' */ +typedef void (*Pfunc) (lua_State *L, void *ud); + +LUAI_FUNC int luaD_protectedparser (lua_State *L, ZIO *z, const char *name, + const char *mode); +LUAI_FUNC void luaD_hook (lua_State *L, int event, int line); +LUAI_FUNC int luaD_precall (lua_State *L, StkId func, int nresults); +LUAI_FUNC void luaD_call (lua_State *L, StkId func, int nResults, + int allowyield); +LUAI_FUNC int luaD_pcall (lua_State *L, Pfunc func, void *u, + ptrdiff_t oldtop, ptrdiff_t ef); +LUAI_FUNC int luaD_poscall (lua_State *L, StkId firstResult); +LUAI_FUNC void luaD_reallocstack (lua_State *L, int newsize); +LUAI_FUNC void luaD_growstack (lua_State *L, int n); +LUAI_FUNC void luaD_shrinkstack (lua_State *L); + +LUAI_FUNC l_noret luaD_throw (lua_State *L, int errcode); +LUAI_FUNC int luaD_rawrunprotected (lua_State *L, Pfunc f, void *ud); + +#endif + diff --git a/lua-5.2.4/src/ldump.c b/lua-5.2.4/src/ldump.c new file mode 100644 index 000000000..61fa2cd89 --- /dev/null +++ b/lua-5.2.4/src/ldump.c @@ -0,0 +1,173 @@ +/* +** $Id: ldump.c,v 2.17.1.1 2013/04/12 18:48:47 roberto Exp $ +** save precompiled Lua chunks +** See Copyright Notice in lua.h +*/ + +#include + +#define ldump_c +#define LUA_CORE + +#include "lua.h" + +#include "lobject.h" +#include "lstate.h" +#include "lundump.h" + +typedef struct { + lua_State* L; + lua_Writer writer; + void* data; + int strip; + int status; +} DumpState; + +#define DumpMem(b,n,size,D) DumpBlock(b,(n)*(size),D) +#define DumpVar(x,D) DumpMem(&x,1,sizeof(x),D) + +static void DumpBlock(const void* b, size_t size, DumpState* D) +{ + if (D->status==0) + { + lua_unlock(D->L); + D->status=(*D->writer)(D->L,b,size,D->data); + lua_lock(D->L); + } +} + +static void DumpChar(int y, DumpState* D) +{ + char x=(char)y; + DumpVar(x,D); +} + +static void DumpInt(int x, DumpState* D) +{ + DumpVar(x,D); +} + +static void DumpNumber(lua_Number x, DumpState* D) +{ + DumpVar(x,D); +} + +static void DumpVector(const void* b, int n, size_t size, DumpState* D) +{ + DumpInt(n,D); + DumpMem(b,n,size,D); +} + +static void DumpString(const TString* s, DumpState* D) +{ + if (s==NULL) + { + size_t size=0; + DumpVar(size,D); + } + else + { + size_t size=s->tsv.len+1; /* include trailing '\0' */ + DumpVar(size,D); + DumpBlock(getstr(s),size*sizeof(char),D); + } +} + +#define DumpCode(f,D) DumpVector(f->code,f->sizecode,sizeof(Instruction),D) + +static void DumpFunction(const Proto* f, DumpState* D); + +static void DumpConstants(const Proto* f, DumpState* D) +{ + int i,n=f->sizek; + DumpInt(n,D); + for (i=0; ik[i]; + DumpChar(ttypenv(o),D); + switch (ttypenv(o)) + { + case LUA_TNIL: + break; + case LUA_TBOOLEAN: + DumpChar(bvalue(o),D); + break; + case LUA_TNUMBER: + DumpNumber(nvalue(o),D); + break; + case LUA_TSTRING: + DumpString(rawtsvalue(o),D); + break; + default: lua_assert(0); + } + } + n=f->sizep; + DumpInt(n,D); + for (i=0; ip[i],D); +} + +static void DumpUpvalues(const Proto* f, DumpState* D) +{ + int i,n=f->sizeupvalues; + DumpInt(n,D); + for (i=0; iupvalues[i].instack,D); + DumpChar(f->upvalues[i].idx,D); + } +} + +static void DumpDebug(const Proto* f, DumpState* D) +{ + int i,n; + DumpString((D->strip) ? NULL : f->source,D); + n= (D->strip) ? 0 : f->sizelineinfo; + DumpVector(f->lineinfo,n,sizeof(int),D); + n= (D->strip) ? 0 : f->sizelocvars; + DumpInt(n,D); + for (i=0; ilocvars[i].varname,D); + DumpInt(f->locvars[i].startpc,D); + DumpInt(f->locvars[i].endpc,D); + } + n= (D->strip) ? 0 : f->sizeupvalues; + DumpInt(n,D); + for (i=0; iupvalues[i].name,D); +} + +static void DumpFunction(const Proto* f, DumpState* D) +{ + DumpInt(f->linedefined,D); + DumpInt(f->lastlinedefined,D); + DumpChar(f->numparams,D); + DumpChar(f->is_vararg,D); + DumpChar(f->maxstacksize,D); + DumpCode(f,D); + DumpConstants(f,D); + DumpUpvalues(f,D); + DumpDebug(f,D); +} + +static void DumpHeader(DumpState* D) +{ + lu_byte h[LUAC_HEADERSIZE]; + luaU_header(h); + DumpBlock(h,LUAC_HEADERSIZE,D); +} + +/* +** dump Lua function as precompiled chunk +*/ +int luaU_dump (lua_State* L, const Proto* f, lua_Writer w, void* data, int strip) +{ + DumpState D; + D.L=L; + D.writer=w; + D.data=data; + D.strip=strip; + D.status=0; + DumpHeader(&D); + DumpFunction(f,&D); + return D.status; +} diff --git a/lua-5.2.4/src/lfunc.c b/lua-5.2.4/src/lfunc.c new file mode 100644 index 000000000..e90e1520c --- /dev/null +++ b/lua-5.2.4/src/lfunc.c @@ -0,0 +1,161 @@ +/* +** $Id: lfunc.c,v 2.30.1.1 2013/04/12 18:48:47 roberto Exp $ +** Auxiliary functions to manipulate prototypes and closures +** See Copyright Notice in lua.h +*/ + + +#include + +#define lfunc_c +#define LUA_CORE + +#include "lua.h" + +#include "lfunc.h" +#include "lgc.h" +#include "lmem.h" +#include "lobject.h" +#include "lstate.h" + + + +Closure *luaF_newCclosure (lua_State *L, int n) { + Closure *c = &luaC_newobj(L, LUA_TCCL, sizeCclosure(n), NULL, 0)->cl; + c->c.nupvalues = cast_byte(n); + return c; +} + + +Closure *luaF_newLclosure (lua_State *L, int n) { + Closure *c = &luaC_newobj(L, LUA_TLCL, sizeLclosure(n), NULL, 0)->cl; + c->l.p = NULL; + c->l.nupvalues = cast_byte(n); + while (n--) c->l.upvals[n] = NULL; + return c; +} + + +UpVal *luaF_newupval (lua_State *L) { + UpVal *uv = &luaC_newobj(L, LUA_TUPVAL, sizeof(UpVal), NULL, 0)->uv; + uv->v = &uv->u.value; + setnilvalue(uv->v); + return uv; +} + + +UpVal *luaF_findupval (lua_State *L, StkId level) { + global_State *g = G(L); + GCObject **pp = &L->openupval; + UpVal *p; + UpVal *uv; + while (*pp != NULL && (p = gco2uv(*pp))->v >= level) { + GCObject *o = obj2gco(p); + lua_assert(p->v != &p->u.value); + lua_assert(!isold(o) || isold(obj2gco(L))); + if (p->v == level) { /* found a corresponding upvalue? */ + if (isdead(g, o)) /* is it dead? */ + changewhite(o); /* resurrect it */ + return p; + } + pp = &p->next; + } + /* not found: create a new one */ + uv = &luaC_newobj(L, LUA_TUPVAL, sizeof(UpVal), pp, 0)->uv; + uv->v = level; /* current value lives in the stack */ + uv->u.l.prev = &g->uvhead; /* double link it in `uvhead' list */ + uv->u.l.next = g->uvhead.u.l.next; + uv->u.l.next->u.l.prev = uv; + g->uvhead.u.l.next = uv; + lua_assert(uv->u.l.next->u.l.prev == uv && uv->u.l.prev->u.l.next == uv); + return uv; +} + + +static void unlinkupval (UpVal *uv) { + lua_assert(uv->u.l.next->u.l.prev == uv && uv->u.l.prev->u.l.next == uv); + uv->u.l.next->u.l.prev = uv->u.l.prev; /* remove from `uvhead' list */ + uv->u.l.prev->u.l.next = uv->u.l.next; +} + + +void luaF_freeupval (lua_State *L, UpVal *uv) { + if (uv->v != &uv->u.value) /* is it open? */ + unlinkupval(uv); /* remove from open list */ + luaM_free(L, uv); /* free upvalue */ +} + + +void luaF_close (lua_State *L, StkId level) { + UpVal *uv; + global_State *g = G(L); + while (L->openupval != NULL && (uv = gco2uv(L->openupval))->v >= level) { + GCObject *o = obj2gco(uv); + lua_assert(!isblack(o) && uv->v != &uv->u.value); + L->openupval = uv->next; /* remove from `open' list */ + if (isdead(g, o)) + luaF_freeupval(L, uv); /* free upvalue */ + else { + unlinkupval(uv); /* remove upvalue from 'uvhead' list */ + setobj(L, &uv->u.value, uv->v); /* move value to upvalue slot */ + uv->v = &uv->u.value; /* now current value lives here */ + gch(o)->next = g->allgc; /* link upvalue into 'allgc' list */ + g->allgc = o; + luaC_checkupvalcolor(g, uv); + } + } +} + + +Proto *luaF_newproto (lua_State *L) { + Proto *f = &luaC_newobj(L, LUA_TPROTO, sizeof(Proto), NULL, 0)->p; + f->k = NULL; + f->sizek = 0; + f->p = NULL; + f->sizep = 0; + f->code = NULL; + f->cache = NULL; + f->sizecode = 0; + f->lineinfo = NULL; + f->sizelineinfo = 0; + f->upvalues = NULL; + f->sizeupvalues = 0; + f->numparams = 0; + f->is_vararg = 0; + f->maxstacksize = 0; + f->locvars = NULL; + f->sizelocvars = 0; + f->linedefined = 0; + f->lastlinedefined = 0; + f->source = NULL; + return f; +} + + +void luaF_freeproto (lua_State *L, Proto *f) { + luaM_freearray(L, f->code, f->sizecode); + luaM_freearray(L, f->p, f->sizep); + luaM_freearray(L, f->k, f->sizek); + luaM_freearray(L, f->lineinfo, f->sizelineinfo); + luaM_freearray(L, f->locvars, f->sizelocvars); + luaM_freearray(L, f->upvalues, f->sizeupvalues); + luaM_free(L, f); +} + + +/* +** Look for n-th local variable at line `line' in function `func'. +** Returns NULL if not found. +*/ +const char *luaF_getlocalname (const Proto *f, int local_number, int pc) { + int i; + for (i = 0; isizelocvars && f->locvars[i].startpc <= pc; i++) { + if (pc < f->locvars[i].endpc) { /* is variable active? */ + local_number--; + if (local_number == 0) + return getstr(f->locvars[i].varname); + } + } + return NULL; /* not found */ +} + diff --git a/lua-5.2.4/src/lfunc.h b/lua-5.2.4/src/lfunc.h new file mode 100644 index 000000000..ca0d3a3e0 --- /dev/null +++ b/lua-5.2.4/src/lfunc.h @@ -0,0 +1,33 @@ +/* +** $Id: lfunc.h,v 2.8.1.1 2013/04/12 18:48:47 roberto Exp $ +** Auxiliary functions to manipulate prototypes and closures +** See Copyright Notice in lua.h +*/ + +#ifndef lfunc_h +#define lfunc_h + + +#include "lobject.h" + + +#define sizeCclosure(n) (cast(int, sizeof(CClosure)) + \ + cast(int, sizeof(TValue)*((n)-1))) + +#define sizeLclosure(n) (cast(int, sizeof(LClosure)) + \ + cast(int, sizeof(TValue *)*((n)-1))) + + +LUAI_FUNC Proto *luaF_newproto (lua_State *L); +LUAI_FUNC Closure *luaF_newCclosure (lua_State *L, int nelems); +LUAI_FUNC Closure *luaF_newLclosure (lua_State *L, int nelems); +LUAI_FUNC UpVal *luaF_newupval (lua_State *L); +LUAI_FUNC UpVal *luaF_findupval (lua_State *L, StkId level); +LUAI_FUNC void luaF_close (lua_State *L, StkId level); +LUAI_FUNC void luaF_freeproto (lua_State *L, Proto *f); +LUAI_FUNC void luaF_freeupval (lua_State *L, UpVal *uv); +LUAI_FUNC const char *luaF_getlocalname (const Proto *func, int local_number, + int pc); + + +#endif diff --git a/lua-5.2.4/src/lgc.c b/lua-5.2.4/src/lgc.c new file mode 100644 index 000000000..553fd1774 --- /dev/null +++ b/lua-5.2.4/src/lgc.c @@ -0,0 +1,1220 @@ +/* +** $Id: lgc.c,v 2.140.1.3 2014/09/01 16:55:08 roberto Exp $ +** Garbage Collector +** See Copyright Notice in lua.h +*/ + +#include + +#define lgc_c +#define LUA_CORE + +#include "lua.h" + +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "lgc.h" +#include "lmem.h" +#include "lobject.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "ltm.h" + + + +/* +** cost of sweeping one element (the size of a small object divided +** by some adjust for the sweep speed) +*/ +#define GCSWEEPCOST ((sizeof(TString) + 4) / 4) + +/* maximum number of elements to sweep in each single step */ +#define GCSWEEPMAX (cast_int((GCSTEPSIZE / GCSWEEPCOST) / 4)) + +/* maximum number of finalizers to call in each GC step */ +#define GCFINALIZENUM 4 + + +/* +** macro to adjust 'stepmul': 'stepmul' is actually used like +** 'stepmul / STEPMULADJ' (value chosen by tests) +*/ +#define STEPMULADJ 200 + + +/* +** macro to adjust 'pause': 'pause' is actually used like +** 'pause / PAUSEADJ' (value chosen by tests) +*/ +#define PAUSEADJ 100 + + +/* +** 'makewhite' erases all color bits plus the old bit and then +** sets only the current white bit +*/ +#define maskcolors (~(bit2mask(BLACKBIT, OLDBIT) | WHITEBITS)) +#define makewhite(g,x) \ + (gch(x)->marked = cast_byte((gch(x)->marked & maskcolors) | luaC_white(g))) + +#define white2gray(x) resetbits(gch(x)->marked, WHITEBITS) +#define black2gray(x) resetbit(gch(x)->marked, BLACKBIT) + + +#define isfinalized(x) testbit(gch(x)->marked, FINALIZEDBIT) + +#define checkdeadkey(n) lua_assert(!ttisdeadkey(gkey(n)) || ttisnil(gval(n))) + + +#define checkconsistency(obj) \ + lua_longassert(!iscollectable(obj) || righttt(obj)) + + +#define markvalue(g,o) { checkconsistency(o); \ + if (valiswhite(o)) reallymarkobject(g,gcvalue(o)); } + +#define markobject(g,t) { if ((t) && iswhite(obj2gco(t))) \ + reallymarkobject(g, obj2gco(t)); } + +static void reallymarkobject (global_State *g, GCObject *o); + + +/* +** {====================================================== +** Generic functions +** ======================================================= +*/ + + +/* +** one after last element in a hash array +*/ +#define gnodelast(h) gnode(h, cast(size_t, sizenode(h))) + + +/* +** link table 'h' into list pointed by 'p' +*/ +#define linktable(h,p) ((h)->gclist = *(p), *(p) = obj2gco(h)) + + +/* +** if key is not marked, mark its entry as dead (therefore removing it +** from the table) +*/ +static void removeentry (Node *n) { + lua_assert(ttisnil(gval(n))); + if (valiswhite(gkey(n))) + setdeadvalue(gkey(n)); /* unused and unmarked key; remove it */ +} + + +/* +** tells whether a key or value can be cleared from a weak +** table. Non-collectable objects are never removed from weak +** tables. Strings behave as `values', so are never removed too. for +** other objects: if really collected, cannot keep them; for objects +** being finalized, keep them in keys, but not in values +*/ +static int iscleared (global_State *g, const TValue *o) { + if (!iscollectable(o)) return 0; + else if (ttisstring(o)) { + markobject(g, rawtsvalue(o)); /* strings are `values', so are never weak */ + return 0; + } + else return iswhite(gcvalue(o)); +} + + +/* +** barrier that moves collector forward, that is, mark the white object +** being pointed by a black object. +*/ +void luaC_barrier_ (lua_State *L, GCObject *o, GCObject *v) { + global_State *g = G(L); + lua_assert(isblack(o) && iswhite(v) && !isdead(g, v) && !isdead(g, o)); + lua_assert(g->gcstate != GCSpause); + lua_assert(gch(o)->tt != LUA_TTABLE); + if (keepinvariantout(g)) /* must keep invariant? */ + reallymarkobject(g, v); /* restore invariant */ + else { /* sweep phase */ + lua_assert(issweepphase(g)); + makewhite(g, o); /* mark main obj. as white to avoid other barriers */ + } +} + + +/* +** barrier that moves collector backward, that is, mark the black object +** pointing to a white object as gray again. (Current implementation +** only works for tables; access to 'gclist' is not uniform across +** different types.) +*/ +void luaC_barrierback_ (lua_State *L, GCObject *o) { + global_State *g = G(L); + lua_assert(isblack(o) && !isdead(g, o) && gch(o)->tt == LUA_TTABLE); + black2gray(o); /* make object gray (again) */ + gco2t(o)->gclist = g->grayagain; + g->grayagain = o; +} + + +/* +** barrier for prototypes. When creating first closure (cache is +** NULL), use a forward barrier; this may be the only closure of the +** prototype (if it is a "regular" function, with a single instance) +** and the prototype may be big, so it is better to avoid traversing +** it again. Otherwise, use a backward barrier, to avoid marking all +** possible instances. +*/ +LUAI_FUNC void luaC_barrierproto_ (lua_State *L, Proto *p, Closure *c) { + global_State *g = G(L); + lua_assert(isblack(obj2gco(p))); + if (p->cache == NULL) { /* first time? */ + luaC_objbarrier(L, p, c); + } + else { /* use a backward barrier */ + black2gray(obj2gco(p)); /* make prototype gray (again) */ + p->gclist = g->grayagain; + g->grayagain = obj2gco(p); + } +} + + +/* +** check color (and invariants) for an upvalue that was closed, +** i.e., moved into the 'allgc' list +*/ +void luaC_checkupvalcolor (global_State *g, UpVal *uv) { + GCObject *o = obj2gco(uv); + lua_assert(!isblack(o)); /* open upvalues are never black */ + if (isgray(o)) { + if (keepinvariant(g)) { + resetoldbit(o); /* see MOVE OLD rule */ + gray2black(o); /* it is being visited now */ + markvalue(g, uv->v); + } + else { + lua_assert(issweepphase(g)); + makewhite(g, o); + } + } +} + + +/* +** create a new collectable object (with given type and size) and link +** it to '*list'. 'offset' tells how many bytes to allocate before the +** object itself (used only by states). +*/ +GCObject *luaC_newobj (lua_State *L, int tt, size_t sz, GCObject **list, + int offset) { + global_State *g = G(L); + char *raw = cast(char *, luaM_newobject(L, novariant(tt), sz)); + GCObject *o = obj2gco(raw + offset); + if (list == NULL) + list = &g->allgc; /* standard list for collectable objects */ + gch(o)->marked = luaC_white(g); + gch(o)->tt = tt; + gch(o)->next = *list; + *list = o; + return o; +} + +/* }====================================================== */ + + + +/* +** {====================================================== +** Mark functions +** ======================================================= +*/ + + +/* +** mark an object. Userdata, strings, and closed upvalues are visited +** and turned black here. Other objects are marked gray and added +** to appropriate list to be visited (and turned black) later. (Open +** upvalues are already linked in 'headuv' list.) +*/ +static void reallymarkobject (global_State *g, GCObject *o) { + lu_mem size; + white2gray(o); + switch (gch(o)->tt) { + case LUA_TSHRSTR: + case LUA_TLNGSTR: { + size = sizestring(gco2ts(o)); + break; /* nothing else to mark; make it black */ + } + case LUA_TUSERDATA: { + Table *mt = gco2u(o)->metatable; + markobject(g, mt); + markobject(g, gco2u(o)->env); + size = sizeudata(gco2u(o)); + break; + } + case LUA_TUPVAL: { + UpVal *uv = gco2uv(o); + markvalue(g, uv->v); + if (uv->v != &uv->u.value) /* open? */ + return; /* open upvalues remain gray */ + size = sizeof(UpVal); + break; + } + case LUA_TLCL: { + gco2lcl(o)->gclist = g->gray; + g->gray = o; + return; + } + case LUA_TCCL: { + gco2ccl(o)->gclist = g->gray; + g->gray = o; + return; + } + case LUA_TTABLE: { + linktable(gco2t(o), &g->gray); + return; + } + case LUA_TTHREAD: { + gco2th(o)->gclist = g->gray; + g->gray = o; + return; + } + case LUA_TPROTO: { + gco2p(o)->gclist = g->gray; + g->gray = o; + return; + } + default: lua_assert(0); return; + } + gray2black(o); + g->GCmemtrav += size; +} + + +/* +** mark metamethods for basic types +*/ +static void markmt (global_State *g) { + int i; + for (i=0; i < LUA_NUMTAGS; i++) + markobject(g, g->mt[i]); +} + + +/* +** mark all objects in list of being-finalized +*/ +static void markbeingfnz (global_State *g) { + GCObject *o; + for (o = g->tobefnz; o != NULL; o = gch(o)->next) { + makewhite(g, o); + reallymarkobject(g, o); + } +} + + +/* +** mark all values stored in marked open upvalues. (See comment in +** 'lstate.h'.) +*/ +static void remarkupvals (global_State *g) { + UpVal *uv; + for (uv = g->uvhead.u.l.next; uv != &g->uvhead; uv = uv->u.l.next) { + if (isgray(obj2gco(uv))) + markvalue(g, uv->v); + } +} + + +/* +** mark root set and reset all gray lists, to start a new +** incremental (or full) collection +*/ +static void restartcollection (global_State *g) { + g->gray = g->grayagain = NULL; + g->weak = g->allweak = g->ephemeron = NULL; + markobject(g, g->mainthread); + markvalue(g, &g->l_registry); + markmt(g); + markbeingfnz(g); /* mark any finalizing object left from previous cycle */ +} + +/* }====================================================== */ + + +/* +** {====================================================== +** Traverse functions +** ======================================================= +*/ + +static void traverseweakvalue (global_State *g, Table *h) { + Node *n, *limit = gnodelast(h); + /* if there is array part, assume it may have white values (do not + traverse it just to check) */ + int hasclears = (h->sizearray > 0); + for (n = gnode(h, 0); n < limit; n++) { + checkdeadkey(n); + if (ttisnil(gval(n))) /* entry is empty? */ + removeentry(n); /* remove it */ + else { + lua_assert(!ttisnil(gkey(n))); + markvalue(g, gkey(n)); /* mark key */ + if (!hasclears && iscleared(g, gval(n))) /* is there a white value? */ + hasclears = 1; /* table will have to be cleared */ + } + } + if (hasclears) + linktable(h, &g->weak); /* has to be cleared later */ + else /* no white values */ + linktable(h, &g->grayagain); /* no need to clean */ +} + + +static int traverseephemeron (global_State *g, Table *h) { + int marked = 0; /* true if an object is marked in this traversal */ + int hasclears = 0; /* true if table has white keys */ + int prop = 0; /* true if table has entry "white-key -> white-value" */ + Node *n, *limit = gnodelast(h); + int i; + /* traverse array part (numeric keys are 'strong') */ + for (i = 0; i < h->sizearray; i++) { + if (valiswhite(&h->array[i])) { + marked = 1; + reallymarkobject(g, gcvalue(&h->array[i])); + } + } + /* traverse hash part */ + for (n = gnode(h, 0); n < limit; n++) { + checkdeadkey(n); + if (ttisnil(gval(n))) /* entry is empty? */ + removeentry(n); /* remove it */ + else if (iscleared(g, gkey(n))) { /* key is not marked (yet)? */ + hasclears = 1; /* table must be cleared */ + if (valiswhite(gval(n))) /* value not marked yet? */ + prop = 1; /* must propagate again */ + } + else if (valiswhite(gval(n))) { /* value not marked yet? */ + marked = 1; + reallymarkobject(g, gcvalue(gval(n))); /* mark it now */ + } + } + if (g->gcstate != GCSatomic || prop) + linktable(h, &g->ephemeron); /* have to propagate again */ + else if (hasclears) /* does table have white keys? */ + linktable(h, &g->allweak); /* may have to clean white keys */ + else /* no white keys */ + linktable(h, &g->grayagain); /* no need to clean */ + return marked; +} + + +static void traversestrongtable (global_State *g, Table *h) { + Node *n, *limit = gnodelast(h); + int i; + for (i = 0; i < h->sizearray; i++) /* traverse array part */ + markvalue(g, &h->array[i]); + for (n = gnode(h, 0); n < limit; n++) { /* traverse hash part */ + checkdeadkey(n); + if (ttisnil(gval(n))) /* entry is empty? */ + removeentry(n); /* remove it */ + else { + lua_assert(!ttisnil(gkey(n))); + markvalue(g, gkey(n)); /* mark key */ + markvalue(g, gval(n)); /* mark value */ + } + } +} + + +static lu_mem traversetable (global_State *g, Table *h) { + const char *weakkey, *weakvalue; + const TValue *mode = gfasttm(g, h->metatable, TM_MODE); + markobject(g, h->metatable); + if (mode && ttisstring(mode) && /* is there a weak mode? */ + ((weakkey = strchr(svalue(mode), 'k')), + (weakvalue = strchr(svalue(mode), 'v')), + (weakkey || weakvalue))) { /* is really weak? */ + black2gray(obj2gco(h)); /* keep table gray */ + if (!weakkey) /* strong keys? */ + traverseweakvalue(g, h); + else if (!weakvalue) /* strong values? */ + traverseephemeron(g, h); + else /* all weak */ + linktable(h, &g->allweak); /* nothing to traverse now */ + } + else /* not weak */ + traversestrongtable(g, h); + return sizeof(Table) + sizeof(TValue) * h->sizearray + + sizeof(Node) * cast(size_t, sizenode(h)); +} + + +static int traverseproto (global_State *g, Proto *f) { + int i; + if (f->cache && iswhite(obj2gco(f->cache))) + f->cache = NULL; /* allow cache to be collected */ + markobject(g, f->source); + for (i = 0; i < f->sizek; i++) /* mark literals */ + markvalue(g, &f->k[i]); + for (i = 0; i < f->sizeupvalues; i++) /* mark upvalue names */ + markobject(g, f->upvalues[i].name); + for (i = 0; i < f->sizep; i++) /* mark nested protos */ + markobject(g, f->p[i]); + for (i = 0; i < f->sizelocvars; i++) /* mark local-variable names */ + markobject(g, f->locvars[i].varname); + return sizeof(Proto) + sizeof(Instruction) * f->sizecode + + sizeof(Proto *) * f->sizep + + sizeof(TValue) * f->sizek + + sizeof(int) * f->sizelineinfo + + sizeof(LocVar) * f->sizelocvars + + sizeof(Upvaldesc) * f->sizeupvalues; +} + + +static lu_mem traverseCclosure (global_State *g, CClosure *cl) { + int i; + for (i = 0; i < cl->nupvalues; i++) /* mark its upvalues */ + markvalue(g, &cl->upvalue[i]); + return sizeCclosure(cl->nupvalues); +} + +static lu_mem traverseLclosure (global_State *g, LClosure *cl) { + int i; + markobject(g, cl->p); /* mark its prototype */ + for (i = 0; i < cl->nupvalues; i++) /* mark its upvalues */ + markobject(g, cl->upvals[i]); + return sizeLclosure(cl->nupvalues); +} + + +static lu_mem traversestack (global_State *g, lua_State *th) { + int n = 0; + StkId o = th->stack; + if (o == NULL) + return 1; /* stack not completely built yet */ + for (; o < th->top; o++) /* mark live elements in the stack */ + markvalue(g, o); + if (g->gcstate == GCSatomic) { /* final traversal? */ + StkId lim = th->stack + th->stacksize; /* real end of stack */ + for (; o < lim; o++) /* clear not-marked stack slice */ + setnilvalue(o); + } + else { /* count call infos to compute size */ + CallInfo *ci; + for (ci = &th->base_ci; ci != th->ci; ci = ci->next) + n++; + } + return sizeof(lua_State) + sizeof(TValue) * th->stacksize + + sizeof(CallInfo) * n; +} + + +/* +** traverse one gray object, turning it to black (except for threads, +** which are always gray). +*/ +static void propagatemark (global_State *g) { + lu_mem size; + GCObject *o = g->gray; + lua_assert(isgray(o)); + gray2black(o); + switch (gch(o)->tt) { + case LUA_TTABLE: { + Table *h = gco2t(o); + g->gray = h->gclist; /* remove from 'gray' list */ + size = traversetable(g, h); + break; + } + case LUA_TLCL: { + LClosure *cl = gco2lcl(o); + g->gray = cl->gclist; /* remove from 'gray' list */ + size = traverseLclosure(g, cl); + break; + } + case LUA_TCCL: { + CClosure *cl = gco2ccl(o); + g->gray = cl->gclist; /* remove from 'gray' list */ + size = traverseCclosure(g, cl); + break; + } + case LUA_TTHREAD: { + lua_State *th = gco2th(o); + g->gray = th->gclist; /* remove from 'gray' list */ + th->gclist = g->grayagain; + g->grayagain = o; /* insert into 'grayagain' list */ + black2gray(o); + size = traversestack(g, th); + break; + } + case LUA_TPROTO: { + Proto *p = gco2p(o); + g->gray = p->gclist; /* remove from 'gray' list */ + size = traverseproto(g, p); + break; + } + default: lua_assert(0); return; + } + g->GCmemtrav += size; +} + + +static void propagateall (global_State *g) { + while (g->gray) propagatemark(g); +} + + +static void propagatelist (global_State *g, GCObject *l) { + lua_assert(g->gray == NULL); /* no grays left */ + g->gray = l; + propagateall(g); /* traverse all elements from 'l' */ +} + +/* +** retraverse all gray lists. Because tables may be reinserted in other +** lists when traversed, traverse the original lists to avoid traversing +** twice the same table (which is not wrong, but inefficient) +*/ +static void retraversegrays (global_State *g) { + GCObject *weak = g->weak; /* save original lists */ + GCObject *grayagain = g->grayagain; + GCObject *ephemeron = g->ephemeron; + g->weak = g->grayagain = g->ephemeron = NULL; + propagateall(g); /* traverse main gray list */ + propagatelist(g, grayagain); + propagatelist(g, weak); + propagatelist(g, ephemeron); +} + + +static void convergeephemerons (global_State *g) { + int changed; + do { + GCObject *w; + GCObject *next = g->ephemeron; /* get ephemeron list */ + g->ephemeron = NULL; /* tables will return to this list when traversed */ + changed = 0; + while ((w = next) != NULL) { + next = gco2t(w)->gclist; + if (traverseephemeron(g, gco2t(w))) { /* traverse marked some value? */ + propagateall(g); /* propagate changes */ + changed = 1; /* will have to revisit all ephemeron tables */ + } + } + } while (changed); +} + +/* }====================================================== */ + + +/* +** {====================================================== +** Sweep Functions +** ======================================================= +*/ + + +/* +** clear entries with unmarked keys from all weaktables in list 'l' up +** to element 'f' +*/ +static void clearkeys (global_State *g, GCObject *l, GCObject *f) { + for (; l != f; l = gco2t(l)->gclist) { + Table *h = gco2t(l); + Node *n, *limit = gnodelast(h); + for (n = gnode(h, 0); n < limit; n++) { + if (!ttisnil(gval(n)) && (iscleared(g, gkey(n)))) { + setnilvalue(gval(n)); /* remove value ... */ + removeentry(n); /* and remove entry from table */ + } + } + } +} + + +/* +** clear entries with unmarked values from all weaktables in list 'l' up +** to element 'f' +*/ +static void clearvalues (global_State *g, GCObject *l, GCObject *f) { + for (; l != f; l = gco2t(l)->gclist) { + Table *h = gco2t(l); + Node *n, *limit = gnodelast(h); + int i; + for (i = 0; i < h->sizearray; i++) { + TValue *o = &h->array[i]; + if (iscleared(g, o)) /* value was collected? */ + setnilvalue(o); /* remove value */ + } + for (n = gnode(h, 0); n < limit; n++) { + if (!ttisnil(gval(n)) && iscleared(g, gval(n))) { + setnilvalue(gval(n)); /* remove value ... */ + removeentry(n); /* and remove entry from table */ + } + } + } +} + + +static void freeobj (lua_State *L, GCObject *o) { + switch (gch(o)->tt) { + case LUA_TPROTO: luaF_freeproto(L, gco2p(o)); break; + case LUA_TLCL: { + luaM_freemem(L, o, sizeLclosure(gco2lcl(o)->nupvalues)); + break; + } + case LUA_TCCL: { + luaM_freemem(L, o, sizeCclosure(gco2ccl(o)->nupvalues)); + break; + } + case LUA_TUPVAL: luaF_freeupval(L, gco2uv(o)); break; + case LUA_TTABLE: luaH_free(L, gco2t(o)); break; + case LUA_TTHREAD: luaE_freethread(L, gco2th(o)); break; + case LUA_TUSERDATA: luaM_freemem(L, o, sizeudata(gco2u(o))); break; + case LUA_TSHRSTR: + G(L)->strt.nuse--; + /* go through */ + case LUA_TLNGSTR: { + luaM_freemem(L, o, sizestring(gco2ts(o))); + break; + } + default: lua_assert(0); + } +} + + +#define sweepwholelist(L,p) sweeplist(L,p,MAX_LUMEM) +static GCObject **sweeplist (lua_State *L, GCObject **p, lu_mem count); + + +/* +** sweep the (open) upvalues of a thread and resize its stack and +** list of call-info structures. +*/ +static void sweepthread (lua_State *L, lua_State *L1) { + if (L1->stack == NULL) return; /* stack not completely built yet */ + sweepwholelist(L, &L1->openupval); /* sweep open upvalues */ + luaE_freeCI(L1); /* free extra CallInfo slots */ + /* should not change the stack during an emergency gc cycle */ + if (G(L)->gckind != KGC_EMERGENCY) + luaD_shrinkstack(L1); +} + + +/* +** sweep at most 'count' elements from a list of GCObjects erasing dead +** objects, where a dead (not alive) object is one marked with the "old" +** (non current) white and not fixed. +** In non-generational mode, change all non-dead objects back to white, +** preparing for next collection cycle. +** In generational mode, keep black objects black, and also mark them as +** old; stop when hitting an old object, as all objects after that +** one will be old too. +** When object is a thread, sweep its list of open upvalues too. +*/ +static GCObject **sweeplist (lua_State *L, GCObject **p, lu_mem count) { + global_State *g = G(L); + int ow = otherwhite(g); + int toclear, toset; /* bits to clear and to set in all live objects */ + int tostop; /* stop sweep when this is true */ + if (isgenerational(g)) { /* generational mode? */ + toclear = ~0; /* clear nothing */ + toset = bitmask(OLDBIT); /* set the old bit of all surviving objects */ + tostop = bitmask(OLDBIT); /* do not sweep old generation */ + } + else { /* normal mode */ + toclear = maskcolors; /* clear all color bits + old bit */ + toset = luaC_white(g); /* make object white */ + tostop = 0; /* do not stop */ + } + while (*p != NULL && count-- > 0) { + GCObject *curr = *p; + int marked = gch(curr)->marked; + if (isdeadm(ow, marked)) { /* is 'curr' dead? */ + *p = gch(curr)->next; /* remove 'curr' from list */ + freeobj(L, curr); /* erase 'curr' */ + } + else { + if (testbits(marked, tostop)) + return NULL; /* stop sweeping this list */ + if (gch(curr)->tt == LUA_TTHREAD) + sweepthread(L, gco2th(curr)); /* sweep thread's upvalues */ + /* update marks */ + gch(curr)->marked = cast_byte((marked & toclear) | toset); + p = &gch(curr)->next; /* go to next element */ + } + } + return (*p == NULL) ? NULL : p; +} + + +/* +** sweep a list until a live object (or end of list) +*/ +static GCObject **sweeptolive (lua_State *L, GCObject **p, int *n) { + GCObject ** old = p; + int i = 0; + do { + i++; + p = sweeplist(L, p, 1); + } while (p == old); + if (n) *n += i; + return p; +} + +/* }====================================================== */ + + +/* +** {====================================================== +** Finalization +** ======================================================= +*/ + +static void checkSizes (lua_State *L) { + global_State *g = G(L); + if (g->gckind != KGC_EMERGENCY) { /* do not change sizes in emergency */ + int hs = g->strt.size / 2; /* half the size of the string table */ + if (g->strt.nuse < cast(lu_int32, hs)) /* using less than that half? */ + luaS_resize(L, hs); /* halve its size */ + luaZ_freebuffer(L, &g->buff); /* free concatenation buffer */ + } +} + + +static GCObject *udata2finalize (global_State *g) { + GCObject *o = g->tobefnz; /* get first element */ + lua_assert(isfinalized(o)); + g->tobefnz = gch(o)->next; /* remove it from 'tobefnz' list */ + gch(o)->next = g->allgc; /* return it to 'allgc' list */ + g->allgc = o; + resetbit(gch(o)->marked, SEPARATED); /* mark that it is not in 'tobefnz' */ + lua_assert(!isold(o)); /* see MOVE OLD rule */ + if (!keepinvariantout(g)) /* not keeping invariant? */ + makewhite(g, o); /* "sweep" object */ + return o; +} + + +static void dothecall (lua_State *L, void *ud) { + UNUSED(ud); + luaD_call(L, L->top - 2, 0, 0); +} + + +static void GCTM (lua_State *L, int propagateerrors) { + global_State *g = G(L); + const TValue *tm; + TValue v; + setgcovalue(L, &v, udata2finalize(g)); + tm = luaT_gettmbyobj(L, &v, TM_GC); + if (tm != NULL && ttisfunction(tm)) { /* is there a finalizer? */ + int status; + lu_byte oldah = L->allowhook; + int running = g->gcrunning; + L->allowhook = 0; /* stop debug hooks during GC metamethod */ + g->gcrunning = 0; /* avoid GC steps */ + setobj2s(L, L->top, tm); /* push finalizer... */ + setobj2s(L, L->top + 1, &v); /* ... and its argument */ + L->top += 2; /* and (next line) call the finalizer */ + status = luaD_pcall(L, dothecall, NULL, savestack(L, L->top - 2), 0); + L->allowhook = oldah; /* restore hooks */ + g->gcrunning = running; /* restore state */ + if (status != LUA_OK && propagateerrors) { /* error while running __gc? */ + if (status == LUA_ERRRUN) { /* is there an error object? */ + const char *msg = (ttisstring(L->top - 1)) + ? svalue(L->top - 1) + : "no message"; + luaO_pushfstring(L, "error in __gc metamethod (%s)", msg); + status = LUA_ERRGCMM; /* error in __gc metamethod */ + } + luaD_throw(L, status); /* re-throw error */ + } + } +} + + +/* +** move all unreachable objects (or 'all' objects) that need +** finalization from list 'finobj' to list 'tobefnz' (to be finalized) +*/ +static void separatetobefnz (lua_State *L, int all) { + global_State *g = G(L); + GCObject **p = &g->finobj; + GCObject *curr; + GCObject **lastnext = &g->tobefnz; + /* find last 'next' field in 'tobefnz' list (to add elements in its end) */ + while (*lastnext != NULL) + lastnext = &gch(*lastnext)->next; + while ((curr = *p) != NULL) { /* traverse all finalizable objects */ + lua_assert(!isfinalized(curr)); + lua_assert(testbit(gch(curr)->marked, SEPARATED)); + if (!(iswhite(curr) || all)) /* not being collected? */ + p = &gch(curr)->next; /* don't bother with it */ + else { + l_setbit(gch(curr)->marked, FINALIZEDBIT); /* won't be finalized again */ + *p = gch(curr)->next; /* remove 'curr' from 'finobj' list */ + gch(curr)->next = *lastnext; /* link at the end of 'tobefnz' list */ + *lastnext = curr; + lastnext = &gch(curr)->next; + } + } +} + + +/* +** if object 'o' has a finalizer, remove it from 'allgc' list (must +** search the list to find it) and link it in 'finobj' list. +*/ +void luaC_checkfinalizer (lua_State *L, GCObject *o, Table *mt) { + global_State *g = G(L); + if (testbit(gch(o)->marked, SEPARATED) || /* obj. is already separated... */ + isfinalized(o) || /* ... or is finalized... */ + gfasttm(g, mt, TM_GC) == NULL) /* or has no finalizer? */ + return; /* nothing to be done */ + else { /* move 'o' to 'finobj' list */ + GCObject **p; + GCheader *ho = gch(o); + if (g->sweepgc == &ho->next) { /* avoid removing current sweep object */ + lua_assert(issweepphase(g)); + g->sweepgc = sweeptolive(L, g->sweepgc, NULL); + } + /* search for pointer pointing to 'o' */ + for (p = &g->allgc; *p != o; p = &gch(*p)->next) { /* empty */ } + *p = ho->next; /* remove 'o' from root list */ + ho->next = g->finobj; /* link it in list 'finobj' */ + g->finobj = o; + l_setbit(ho->marked, SEPARATED); /* mark it as such */ + if (!keepinvariantout(g)) /* not keeping invariant? */ + makewhite(g, o); /* "sweep" object */ + else + resetoldbit(o); /* see MOVE OLD rule */ + } +} + +/* }====================================================== */ + + +/* +** {====================================================== +** GC control +** ======================================================= +*/ + + +/* +** set a reasonable "time" to wait before starting a new GC cycle; +** cycle will start when memory use hits threshold +*/ +static void setpause (global_State *g, l_mem estimate) { + l_mem debt, threshold; + estimate = estimate / PAUSEADJ; /* adjust 'estimate' */ + threshold = (g->gcpause < MAX_LMEM / estimate) /* overflow? */ + ? estimate * g->gcpause /* no overflow */ + : MAX_LMEM; /* overflow; truncate to maximum */ + debt = -cast(l_mem, threshold - gettotalbytes(g)); + luaE_setdebt(g, debt); +} + + +#define sweepphases \ + (bitmask(GCSsweepstring) | bitmask(GCSsweepudata) | bitmask(GCSsweep)) + + +/* +** enter first sweep phase (strings) and prepare pointers for other +** sweep phases. The calls to 'sweeptolive' make pointers point to an +** object inside the list (instead of to the header), so that the real +** sweep do not need to skip objects created between "now" and the start +** of the real sweep. +** Returns how many objects it swept. +*/ +static int entersweep (lua_State *L) { + global_State *g = G(L); + int n = 0; + g->gcstate = GCSsweepstring; + lua_assert(g->sweepgc == NULL && g->sweepfin == NULL); + /* prepare to sweep strings, finalizable objects, and regular objects */ + g->sweepstrgc = 0; + g->sweepfin = sweeptolive(L, &g->finobj, &n); + g->sweepgc = sweeptolive(L, &g->allgc, &n); + return n; +} + + +/* +** change GC mode +*/ +void luaC_changemode (lua_State *L, int mode) { + global_State *g = G(L); + if (mode == g->gckind) return; /* nothing to change */ + if (mode == KGC_GEN) { /* change to generational mode */ + /* make sure gray lists are consistent */ + luaC_runtilstate(L, bitmask(GCSpropagate)); + g->GCestimate = gettotalbytes(g); + g->gckind = KGC_GEN; + } + else { /* change to incremental mode */ + /* sweep all objects to turn them back to white + (as white has not changed, nothing extra will be collected) */ + g->gckind = KGC_NORMAL; + entersweep(L); + luaC_runtilstate(L, ~sweepphases); + } +} + + +/* +** call all pending finalizers +*/ +static void callallpendingfinalizers (lua_State *L, int propagateerrors) { + global_State *g = G(L); + while (g->tobefnz) { + resetoldbit(g->tobefnz); + GCTM(L, propagateerrors); + } +} + + +void luaC_freeallobjects (lua_State *L) { + global_State *g = G(L); + int i; + separatetobefnz(L, 1); /* separate all objects with finalizers */ + lua_assert(g->finobj == NULL); + callallpendingfinalizers(L, 0); + g->currentwhite = WHITEBITS; /* this "white" makes all objects look dead */ + g->gckind = KGC_NORMAL; + sweepwholelist(L, &g->finobj); /* finalizers can create objs. in 'finobj' */ + sweepwholelist(L, &g->allgc); + for (i = 0; i < g->strt.size; i++) /* free all string lists */ + sweepwholelist(L, &g->strt.hash[i]); + lua_assert(g->strt.nuse == 0); +} + + +static l_mem atomic (lua_State *L) { + global_State *g = G(L); + l_mem work = -cast(l_mem, g->GCmemtrav); /* start counting work */ + GCObject *origweak, *origall; + lua_assert(!iswhite(obj2gco(g->mainthread))); + markobject(g, L); /* mark running thread */ + /* registry and global metatables may be changed by API */ + markvalue(g, &g->l_registry); + markmt(g); /* mark basic metatables */ + /* remark occasional upvalues of (maybe) dead threads */ + remarkupvals(g); + propagateall(g); /* propagate changes */ + work += g->GCmemtrav; /* stop counting (do not (re)count grays) */ + /* traverse objects caught by write barrier and by 'remarkupvals' */ + retraversegrays(g); + work -= g->GCmemtrav; /* restart counting */ + convergeephemerons(g); + /* at this point, all strongly accessible objects are marked. */ + /* clear values from weak tables, before checking finalizers */ + clearvalues(g, g->weak, NULL); + clearvalues(g, g->allweak, NULL); + origweak = g->weak; origall = g->allweak; + work += g->GCmemtrav; /* stop counting (objects being finalized) */ + separatetobefnz(L, 0); /* separate objects to be finalized */ + markbeingfnz(g); /* mark objects that will be finalized */ + propagateall(g); /* remark, to propagate `preserveness' */ + work -= g->GCmemtrav; /* restart counting */ + convergeephemerons(g); + /* at this point, all resurrected objects are marked. */ + /* remove dead objects from weak tables */ + clearkeys(g, g->ephemeron, NULL); /* clear keys from all ephemeron tables */ + clearkeys(g, g->allweak, NULL); /* clear keys from all allweak tables */ + /* clear values from resurrected weak tables */ + clearvalues(g, g->weak, origweak); + clearvalues(g, g->allweak, origall); + g->currentwhite = cast_byte(otherwhite(g)); /* flip current white */ + work += g->GCmemtrav; /* complete counting */ + return work; /* estimate of memory marked by 'atomic' */ +} + + +static lu_mem singlestep (lua_State *L) { + global_State *g = G(L); + switch (g->gcstate) { + case GCSpause: { + /* start to count memory traversed */ + g->GCmemtrav = g->strt.size * sizeof(GCObject*); + lua_assert(!isgenerational(g)); + restartcollection(g); + g->gcstate = GCSpropagate; + return g->GCmemtrav; + } + case GCSpropagate: { + if (g->gray) { + lu_mem oldtrav = g->GCmemtrav; + propagatemark(g); + return g->GCmemtrav - oldtrav; /* memory traversed in this step */ + } + else { /* no more `gray' objects */ + lu_mem work; + int sw; + g->gcstate = GCSatomic; /* finish mark phase */ + g->GCestimate = g->GCmemtrav; /* save what was counted */; + work = atomic(L); /* add what was traversed by 'atomic' */ + g->GCestimate += work; /* estimate of total memory traversed */ + sw = entersweep(L); + return work + sw * GCSWEEPCOST; + } + } + case GCSsweepstring: { + int i; + for (i = 0; i < GCSWEEPMAX && g->sweepstrgc + i < g->strt.size; i++) + sweepwholelist(L, &g->strt.hash[g->sweepstrgc + i]); + g->sweepstrgc += i; + if (g->sweepstrgc >= g->strt.size) /* no more strings to sweep? */ + g->gcstate = GCSsweepudata; + return i * GCSWEEPCOST; + } + case GCSsweepudata: { + if (g->sweepfin) { + g->sweepfin = sweeplist(L, g->sweepfin, GCSWEEPMAX); + return GCSWEEPMAX*GCSWEEPCOST; + } + else { + g->gcstate = GCSsweep; + return 0; + } + } + case GCSsweep: { + if (g->sweepgc) { + g->sweepgc = sweeplist(L, g->sweepgc, GCSWEEPMAX); + return GCSWEEPMAX*GCSWEEPCOST; + } + else { + /* sweep main thread */ + GCObject *mt = obj2gco(g->mainthread); + sweeplist(L, &mt, 1); + checkSizes(L); + g->gcstate = GCSpause; /* finish collection */ + return GCSWEEPCOST; + } + } + default: lua_assert(0); return 0; + } +} + + +/* +** advances the garbage collector until it reaches a state allowed +** by 'statemask' +*/ +void luaC_runtilstate (lua_State *L, int statesmask) { + global_State *g = G(L); + while (!testbit(statesmask, g->gcstate)) + singlestep(L); +} + + +static void generationalcollection (lua_State *L) { + global_State *g = G(L); + lua_assert(g->gcstate == GCSpropagate); + if (g->GCestimate == 0) { /* signal for another major collection? */ + luaC_fullgc(L, 0); /* perform a full regular collection */ + g->GCestimate = gettotalbytes(g); /* update control */ + } + else { + lu_mem estimate = g->GCestimate; + luaC_runtilstate(L, bitmask(GCSpause)); /* run complete (minor) cycle */ + g->gcstate = GCSpropagate; /* skip restart */ + if (gettotalbytes(g) > (estimate / 100) * g->gcmajorinc) + g->GCestimate = 0; /* signal for a major collection */ + else + g->GCestimate = estimate; /* keep estimate from last major coll. */ + + } + setpause(g, gettotalbytes(g)); + lua_assert(g->gcstate == GCSpropagate); +} + + +static void incstep (lua_State *L) { + global_State *g = G(L); + l_mem debt = g->GCdebt; + int stepmul = g->gcstepmul; + if (stepmul < 40) stepmul = 40; /* avoid ridiculous low values (and 0) */ + /* convert debt from Kb to 'work units' (avoid zero debt and overflows) */ + debt = (debt / STEPMULADJ) + 1; + debt = (debt < MAX_LMEM / stepmul) ? debt * stepmul : MAX_LMEM; + do { /* always perform at least one single step */ + lu_mem work = singlestep(L); /* do some work */ + debt -= work; + } while (debt > -GCSTEPSIZE && g->gcstate != GCSpause); + if (g->gcstate == GCSpause) + setpause(g, g->GCestimate); /* pause until next cycle */ + else { + debt = (debt / stepmul) * STEPMULADJ; /* convert 'work units' to Kb */ + luaE_setdebt(g, debt); + } +} + + +/* +** performs a basic GC step +*/ +void luaC_forcestep (lua_State *L) { + global_State *g = G(L); + int i; + if (isgenerational(g)) generationalcollection(L); + else incstep(L); + /* run a few finalizers (or all of them at the end of a collect cycle) */ + for (i = 0; g->tobefnz && (i < GCFINALIZENUM || g->gcstate == GCSpause); i++) + GCTM(L, 1); /* call one finalizer */ +} + + +/* +** performs a basic GC step only if collector is running +*/ +void luaC_step (lua_State *L) { + global_State *g = G(L); + if (g->gcrunning) luaC_forcestep(L); + else luaE_setdebt(g, -GCSTEPSIZE); /* avoid being called too often */ +} + + + +/* +** performs a full GC cycle; if "isemergency", does not call +** finalizers (which could change stack positions) +*/ +void luaC_fullgc (lua_State *L, int isemergency) { + global_State *g = G(L); + int origkind = g->gckind; + lua_assert(origkind != KGC_EMERGENCY); + if (isemergency) /* do not run finalizers during emergency GC */ + g->gckind = KGC_EMERGENCY; + else { + g->gckind = KGC_NORMAL; + callallpendingfinalizers(L, 1); + } + if (keepinvariant(g)) { /* may there be some black objects? */ + /* must sweep all objects to turn them back to white + (as white has not changed, nothing will be collected) */ + entersweep(L); + } + /* finish any pending sweep phase to start a new cycle */ + luaC_runtilstate(L, bitmask(GCSpause)); + luaC_runtilstate(L, ~bitmask(GCSpause)); /* start new collection */ + luaC_runtilstate(L, bitmask(GCSpause)); /* run entire collection */ + if (origkind == KGC_GEN) { /* generational mode? */ + /* generational mode must be kept in propagate phase */ + luaC_runtilstate(L, bitmask(GCSpropagate)); + } + g->gckind = origkind; + setpause(g, gettotalbytes(g)); + if (!isemergency) /* do not run finalizers during emergency GC */ + callallpendingfinalizers(L, 1); +} + +/* }====================================================== */ + + diff --git a/lua-5.2.4/src/lgc.h b/lua-5.2.4/src/lgc.h new file mode 100644 index 000000000..84bb1cdf9 --- /dev/null +++ b/lua-5.2.4/src/lgc.h @@ -0,0 +1,157 @@ +/* +** $Id: lgc.h,v 2.58.1.1 2013/04/12 18:48:47 roberto Exp $ +** Garbage Collector +** See Copyright Notice in lua.h +*/ + +#ifndef lgc_h +#define lgc_h + + +#include "lobject.h" +#include "lstate.h" + +/* +** Collectable objects may have one of three colors: white, which +** means the object is not marked; gray, which means the +** object is marked, but its references may be not marked; and +** black, which means that the object and all its references are marked. +** The main invariant of the garbage collector, while marking objects, +** is that a black object can never point to a white one. Moreover, +** any gray object must be in a "gray list" (gray, grayagain, weak, +** allweak, ephemeron) so that it can be visited again before finishing +** the collection cycle. These lists have no meaning when the invariant +** is not being enforced (e.g., sweep phase). +*/ + + + +/* how much to allocate before next GC step */ +#if !defined(GCSTEPSIZE) +/* ~100 small strings */ +#define GCSTEPSIZE (cast_int(100 * sizeof(TString))) +#endif + + +/* +** Possible states of the Garbage Collector +*/ +#define GCSpropagate 0 +#define GCSatomic 1 +#define GCSsweepstring 2 +#define GCSsweepudata 3 +#define GCSsweep 4 +#define GCSpause 5 + + +#define issweepphase(g) \ + (GCSsweepstring <= (g)->gcstate && (g)->gcstate <= GCSsweep) + +#define isgenerational(g) ((g)->gckind == KGC_GEN) + +/* +** macros to tell when main invariant (white objects cannot point to black +** ones) must be kept. During a non-generational collection, the sweep +** phase may break the invariant, as objects turned white may point to +** still-black objects. The invariant is restored when sweep ends and +** all objects are white again. During a generational collection, the +** invariant must be kept all times. +*/ + +#define keepinvariant(g) (isgenerational(g) || g->gcstate <= GCSatomic) + + +/* +** Outside the collector, the state in generational mode is kept in +** 'propagate', so 'keepinvariant' is always true. +*/ +#define keepinvariantout(g) \ + check_exp(g->gcstate == GCSpropagate || !isgenerational(g), \ + g->gcstate <= GCSatomic) + + +/* +** some useful bit tricks +*/ +#define resetbits(x,m) ((x) &= cast(lu_byte, ~(m))) +#define setbits(x,m) ((x) |= (m)) +#define testbits(x,m) ((x) & (m)) +#define bitmask(b) (1<<(b)) +#define bit2mask(b1,b2) (bitmask(b1) | bitmask(b2)) +#define l_setbit(x,b) setbits(x, bitmask(b)) +#define resetbit(x,b) resetbits(x, bitmask(b)) +#define testbit(x,b) testbits(x, bitmask(b)) + + +/* Layout for bit use in `marked' field: */ +#define WHITE0BIT 0 /* object is white (type 0) */ +#define WHITE1BIT 1 /* object is white (type 1) */ +#define BLACKBIT 2 /* object is black */ +#define FINALIZEDBIT 3 /* object has been separated for finalization */ +#define SEPARATED 4 /* object is in 'finobj' list or in 'tobefnz' */ +#define FIXEDBIT 5 /* object is fixed (should not be collected) */ +#define OLDBIT 6 /* object is old (only in generational mode) */ +/* bit 7 is currently used by tests (luaL_checkmemory) */ + +#define WHITEBITS bit2mask(WHITE0BIT, WHITE1BIT) + + +#define iswhite(x) testbits((x)->gch.marked, WHITEBITS) +#define isblack(x) testbit((x)->gch.marked, BLACKBIT) +#define isgray(x) /* neither white nor black */ \ + (!testbits((x)->gch.marked, WHITEBITS | bitmask(BLACKBIT))) + +#define isold(x) testbit((x)->gch.marked, OLDBIT) + +/* MOVE OLD rule: whenever an object is moved to the beginning of + a GC list, its old bit must be cleared */ +#define resetoldbit(o) resetbit((o)->gch.marked, OLDBIT) + +#define otherwhite(g) (g->currentwhite ^ WHITEBITS) +#define isdeadm(ow,m) (!(((m) ^ WHITEBITS) & (ow))) +#define isdead(g,v) isdeadm(otherwhite(g), (v)->gch.marked) + +#define changewhite(x) ((x)->gch.marked ^= WHITEBITS) +#define gray2black(x) l_setbit((x)->gch.marked, BLACKBIT) + +#define valiswhite(x) (iscollectable(x) && iswhite(gcvalue(x))) + +#define luaC_white(g) cast(lu_byte, (g)->currentwhite & WHITEBITS) + + +#define luaC_condGC(L,c) \ + {if (G(L)->GCdebt > 0) {c;}; condchangemem(L);} +#define luaC_checkGC(L) luaC_condGC(L, luaC_step(L);) + + +#define luaC_barrier(L,p,v) { if (valiswhite(v) && isblack(obj2gco(p))) \ + luaC_barrier_(L,obj2gco(p),gcvalue(v)); } + +#define luaC_barrierback(L,p,v) { if (valiswhite(v) && isblack(obj2gco(p))) \ + luaC_barrierback_(L,p); } + +#define luaC_objbarrier(L,p,o) \ + { if (iswhite(obj2gco(o)) && isblack(obj2gco(p))) \ + luaC_barrier_(L,obj2gco(p),obj2gco(o)); } + +#define luaC_objbarrierback(L,p,o) \ + { if (iswhite(obj2gco(o)) && isblack(obj2gco(p))) luaC_barrierback_(L,p); } + +#define luaC_barrierproto(L,p,c) \ + { if (isblack(obj2gco(p))) luaC_barrierproto_(L,p,c); } + +LUAI_FUNC void luaC_freeallobjects (lua_State *L); +LUAI_FUNC void luaC_step (lua_State *L); +LUAI_FUNC void luaC_forcestep (lua_State *L); +LUAI_FUNC void luaC_runtilstate (lua_State *L, int statesmask); +LUAI_FUNC void luaC_fullgc (lua_State *L, int isemergency); +LUAI_FUNC GCObject *luaC_newobj (lua_State *L, int tt, size_t sz, + GCObject **list, int offset); +LUAI_FUNC void luaC_barrier_ (lua_State *L, GCObject *o, GCObject *v); +LUAI_FUNC void luaC_barrierback_ (lua_State *L, GCObject *o); +LUAI_FUNC void luaC_barrierproto_ (lua_State *L, Proto *p, Closure *c); +LUAI_FUNC void luaC_checkfinalizer (lua_State *L, GCObject *o, Table *mt); +LUAI_FUNC void luaC_checkupvalcolor (global_State *g, UpVal *uv); +LUAI_FUNC void luaC_changemode (lua_State *L, int mode); + +#endif diff --git a/lua-5.2.4/src/linit.c b/lua-5.2.4/src/linit.c new file mode 100644 index 000000000..c1a383047 --- /dev/null +++ b/lua-5.2.4/src/linit.c @@ -0,0 +1,67 @@ +/* +** $Id: linit.c,v 1.32.1.1 2013/04/12 18:48:47 roberto Exp $ +** Initialization of libraries for lua.c and other clients +** See Copyright Notice in lua.h +*/ + + +/* +** If you embed Lua in your program and need to open the standard +** libraries, call luaL_openlibs in your program. If you need a +** different set of libraries, copy this file to your project and edit +** it to suit your needs. +*/ + + +#define linit_c +#define LUA_LIB + +#include "lua.h" + +#include "lualib.h" +#include "lauxlib.h" + + +/* +** these libs are loaded by lua.c and are readily available to any Lua +** program +*/ +static const luaL_Reg loadedlibs[] = { + {"_G", luaopen_base}, + {LUA_LOADLIBNAME, luaopen_package}, + {LUA_COLIBNAME, luaopen_coroutine}, + {LUA_TABLIBNAME, luaopen_table}, + {LUA_IOLIBNAME, luaopen_io}, + {LUA_OSLIBNAME, luaopen_os}, + {LUA_STRLIBNAME, luaopen_string}, + {LUA_BITLIBNAME, luaopen_bit32}, + {LUA_MATHLIBNAME, luaopen_math}, + {LUA_DBLIBNAME, luaopen_debug}, + {NULL, NULL} +}; + + +/* +** these libs are preloaded and must be required before used +*/ +static const luaL_Reg preloadedlibs[] = { + {NULL, NULL} +}; + + +LUALIB_API void luaL_openlibs (lua_State *L) { + const luaL_Reg *lib; + /* call open functions from 'loadedlibs' and set results to global table */ + for (lib = loadedlibs; lib->func; lib++) { + luaL_requiref(L, lib->name, lib->func, 1); + lua_pop(L, 1); /* remove lib */ + } + /* add open functions from 'preloadedlibs' into 'package.preload' table */ + luaL_getsubtable(L, LUA_REGISTRYINDEX, "_PRELOAD"); + for (lib = preloadedlibs; lib->func; lib++) { + lua_pushcfunction(L, lib->func); + lua_setfield(L, -2, lib->name); + } + lua_pop(L, 1); /* remove _PRELOAD table */ +} + diff --git a/lua-5.2.4/src/liolib.c b/lua-5.2.4/src/liolib.c new file mode 100644 index 000000000..2a4ec4aa3 --- /dev/null +++ b/lua-5.2.4/src/liolib.c @@ -0,0 +1,666 @@ +/* +** $Id: liolib.c,v 2.112.1.1 2013/04/12 18:48:47 roberto Exp $ +** Standard I/O (and system) library +** See Copyright Notice in lua.h +*/ + + +/* +** This definition must come before the inclusion of 'stdio.h'; it +** should not affect non-POSIX systems +*/ +#if !defined(_FILE_OFFSET_BITS) +#define _LARGEFILE_SOURCE 1 +#define _FILE_OFFSET_BITS 64 +#endif + + +#include +#include +#include +#include + +#define liolib_c +#define LUA_LIB + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +#if !defined(lua_checkmode) + +/* +** Check whether 'mode' matches '[rwa]%+?b?'. +** Change this macro to accept other modes for 'fopen' besides +** the standard ones. +*/ +#define lua_checkmode(mode) \ + (*mode != '\0' && strchr("rwa", *(mode++)) != NULL && \ + (*mode != '+' || ++mode) && /* skip if char is '+' */ \ + (*mode != 'b' || ++mode) && /* skip if char is 'b' */ \ + (*mode == '\0')) + +#endif + +/* +** {====================================================== +** lua_popen spawns a new process connected to the current +** one through the file streams. +** ======================================================= +*/ + +#if !defined(lua_popen) /* { */ + +#if defined(LUA_USE_POPEN) /* { */ + +#define lua_popen(L,c,m) ((void)L, fflush(NULL), popen(c,m)) +#define lua_pclose(L,file) ((void)L, pclose(file)) + +#elif defined(LUA_WIN) /* }{ */ + +#define lua_popen(L,c,m) ((void)L, _popen(c,m)) +#define lua_pclose(L,file) ((void)L, _pclose(file)) + + +#else /* }{ */ + +#define lua_popen(L,c,m) ((void)((void)c, m), \ + luaL_error(L, LUA_QL("popen") " not supported"), (FILE*)0) +#define lua_pclose(L,file) ((void)((void)L, file), -1) + + +#endif /* } */ + +#endif /* } */ + +/* }====================================================== */ + + +/* +** {====================================================== +** lua_fseek: configuration for longer offsets +** ======================================================= +*/ + +#if !defined(lua_fseek) && !defined(LUA_ANSI) /* { */ + +#if defined(LUA_USE_POSIX) /* { */ + +#define l_fseek(f,o,w) fseeko(f,o,w) +#define l_ftell(f) ftello(f) +#define l_seeknum off_t + +#elif defined(LUA_WIN) && !defined(_CRTIMP_TYPEINFO) \ + && defined(_MSC_VER) && (_MSC_VER >= 1400) /* }{ */ +/* Windows (but not DDK) and Visual C++ 2005 or higher */ + +#define l_fseek(f,o,w) _fseeki64(f,o,w) +#define l_ftell(f) _ftelli64(f) +#define l_seeknum __int64 + +#endif /* } */ + +#endif /* } */ + + +#if !defined(l_fseek) /* default definitions */ +#define l_fseek(f,o,w) fseek(f,o,w) +#define l_ftell(f) ftell(f) +#define l_seeknum long +#endif + +/* }====================================================== */ + + +#define IO_PREFIX "_IO_" +#define IO_INPUT (IO_PREFIX "input") +#define IO_OUTPUT (IO_PREFIX "output") + + +typedef luaL_Stream LStream; + + +#define tolstream(L) ((LStream *)luaL_checkudata(L, 1, LUA_FILEHANDLE)) + +#define isclosed(p) ((p)->closef == NULL) + + +static int io_type (lua_State *L) { + LStream *p; + luaL_checkany(L, 1); + p = (LStream *)luaL_testudata(L, 1, LUA_FILEHANDLE); + if (p == NULL) + lua_pushnil(L); /* not a file */ + else if (isclosed(p)) + lua_pushliteral(L, "closed file"); + else + lua_pushliteral(L, "file"); + return 1; +} + + +static int f_tostring (lua_State *L) { + LStream *p = tolstream(L); + if (isclosed(p)) + lua_pushliteral(L, "file (closed)"); + else + lua_pushfstring(L, "file (%p)", p->f); + return 1; +} + + +static FILE *tofile (lua_State *L) { + LStream *p = tolstream(L); + if (isclosed(p)) + luaL_error(L, "attempt to use a closed file"); + lua_assert(p->f); + return p->f; +} + + +/* +** When creating file handles, always creates a `closed' file handle +** before opening the actual file; so, if there is a memory error, the +** file is not left opened. +*/ +static LStream *newprefile (lua_State *L) { + LStream *p = (LStream *)lua_newuserdata(L, sizeof(LStream)); + p->closef = NULL; /* mark file handle as 'closed' */ + luaL_setmetatable(L, LUA_FILEHANDLE); + return p; +} + + +static int aux_close (lua_State *L) { + LStream *p = tolstream(L); + lua_CFunction cf = p->closef; + p->closef = NULL; /* mark stream as closed */ + return (*cf)(L); /* close it */ +} + + +static int io_close (lua_State *L) { + if (lua_isnone(L, 1)) /* no argument? */ + lua_getfield(L, LUA_REGISTRYINDEX, IO_OUTPUT); /* use standard output */ + tofile(L); /* make sure argument is an open stream */ + return aux_close(L); +} + + +static int f_gc (lua_State *L) { + LStream *p = tolstream(L); + if (!isclosed(p) && p->f != NULL) + aux_close(L); /* ignore closed and incompletely open files */ + return 0; +} + + +/* +** function to close regular files +*/ +static int io_fclose (lua_State *L) { + LStream *p = tolstream(L); + int res = fclose(p->f); + return luaL_fileresult(L, (res == 0), NULL); +} + + +static LStream *newfile (lua_State *L) { + LStream *p = newprefile(L); + p->f = NULL; + p->closef = &io_fclose; + return p; +} + + +static void opencheck (lua_State *L, const char *fname, const char *mode) { + LStream *p = newfile(L); + p->f = fopen(fname, mode); + if (p->f == NULL) + luaL_error(L, "cannot open file " LUA_QS " (%s)", fname, strerror(errno)); +} + + +static int io_open (lua_State *L) { + const char *filename = luaL_checkstring(L, 1); + const char *mode = luaL_optstring(L, 2, "r"); + LStream *p = newfile(L); + const char *md = mode; /* to traverse/check mode */ + luaL_argcheck(L, lua_checkmode(md), 2, "invalid mode"); + p->f = fopen(filename, mode); + return (p->f == NULL) ? luaL_fileresult(L, 0, filename) : 1; +} + + +/* +** function to close 'popen' files +*/ +static int io_pclose (lua_State *L) { + LStream *p = tolstream(L); + return luaL_execresult(L, lua_pclose(L, p->f)); +} + + +static int io_popen (lua_State *L) { + const char *filename = luaL_checkstring(L, 1); + const char *mode = luaL_optstring(L, 2, "r"); + LStream *p = newprefile(L); + p->f = lua_popen(L, filename, mode); + p->closef = &io_pclose; + return (p->f == NULL) ? luaL_fileresult(L, 0, filename) : 1; +} + + +static int io_tmpfile (lua_State *L) { + LStream *p = newfile(L); + p->f = tmpfile(); + return (p->f == NULL) ? luaL_fileresult(L, 0, NULL) : 1; +} + + +static FILE *getiofile (lua_State *L, const char *findex) { + LStream *p; + lua_getfield(L, LUA_REGISTRYINDEX, findex); + p = (LStream *)lua_touserdata(L, -1); + if (isclosed(p)) + luaL_error(L, "standard %s file is closed", findex + strlen(IO_PREFIX)); + return p->f; +} + + +static int g_iofile (lua_State *L, const char *f, const char *mode) { + if (!lua_isnoneornil(L, 1)) { + const char *filename = lua_tostring(L, 1); + if (filename) + opencheck(L, filename, mode); + else { + tofile(L); /* check that it's a valid file handle */ + lua_pushvalue(L, 1); + } + lua_setfield(L, LUA_REGISTRYINDEX, f); + } + /* return current value */ + lua_getfield(L, LUA_REGISTRYINDEX, f); + return 1; +} + + +static int io_input (lua_State *L) { + return g_iofile(L, IO_INPUT, "r"); +} + + +static int io_output (lua_State *L) { + return g_iofile(L, IO_OUTPUT, "w"); +} + + +static int io_readline (lua_State *L); + + +static void aux_lines (lua_State *L, int toclose) { + int i; + int n = lua_gettop(L) - 1; /* number of arguments to read */ + /* ensure that arguments will fit here and into 'io_readline' stack */ + luaL_argcheck(L, n <= LUA_MINSTACK - 3, LUA_MINSTACK - 3, "too many options"); + lua_pushvalue(L, 1); /* file handle */ + lua_pushinteger(L, n); /* number of arguments to read */ + lua_pushboolean(L, toclose); /* close/not close file when finished */ + for (i = 1; i <= n; i++) lua_pushvalue(L, i + 1); /* copy arguments */ + lua_pushcclosure(L, io_readline, 3 + n); +} + + +static int f_lines (lua_State *L) { + tofile(L); /* check that it's a valid file handle */ + aux_lines(L, 0); + return 1; +} + + +static int io_lines (lua_State *L) { + int toclose; + if (lua_isnone(L, 1)) lua_pushnil(L); /* at least one argument */ + if (lua_isnil(L, 1)) { /* no file name? */ + lua_getfield(L, LUA_REGISTRYINDEX, IO_INPUT); /* get default input */ + lua_replace(L, 1); /* put it at index 1 */ + tofile(L); /* check that it's a valid file handle */ + toclose = 0; /* do not close it after iteration */ + } + else { /* open a new file */ + const char *filename = luaL_checkstring(L, 1); + opencheck(L, filename, "r"); + lua_replace(L, 1); /* put file at index 1 */ + toclose = 1; /* close it after iteration */ + } + aux_lines(L, toclose); + return 1; +} + + +/* +** {====================================================== +** READ +** ======================================================= +*/ + + +static int read_number (lua_State *L, FILE *f) { + lua_Number d; + if (fscanf(f, LUA_NUMBER_SCAN, &d) == 1) { + lua_pushnumber(L, d); + return 1; + } + else { + lua_pushnil(L); /* "result" to be removed */ + return 0; /* read fails */ + } +} + + +static int test_eof (lua_State *L, FILE *f) { + int c = getc(f); + ungetc(c, f); + lua_pushlstring(L, NULL, 0); + return (c != EOF); +} + + +static int read_line (lua_State *L, FILE *f, int chop) { + luaL_Buffer b; + luaL_buffinit(L, &b); + for (;;) { + size_t l; + char *p = luaL_prepbuffer(&b); + if (fgets(p, LUAL_BUFFERSIZE, f) == NULL) { /* eof? */ + luaL_pushresult(&b); /* close buffer */ + return (lua_rawlen(L, -1) > 0); /* check whether read something */ + } + l = strlen(p); + if (l == 0 || p[l-1] != '\n') + luaL_addsize(&b, l); + else { + luaL_addsize(&b, l - chop); /* chop 'eol' if needed */ + luaL_pushresult(&b); /* close buffer */ + return 1; /* read at least an `eol' */ + } + } +} + + +#define MAX_SIZE_T (~(size_t)0) + +static void read_all (lua_State *L, FILE *f) { + size_t rlen = LUAL_BUFFERSIZE; /* how much to read in each cycle */ + luaL_Buffer b; + luaL_buffinit(L, &b); + for (;;) { + char *p = luaL_prepbuffsize(&b, rlen); + size_t nr = fread(p, sizeof(char), rlen, f); + luaL_addsize(&b, nr); + if (nr < rlen) break; /* eof? */ + else if (rlen <= (MAX_SIZE_T / 4)) /* avoid buffers too large */ + rlen *= 2; /* double buffer size at each iteration */ + } + luaL_pushresult(&b); /* close buffer */ +} + + +static int read_chars (lua_State *L, FILE *f, size_t n) { + size_t nr; /* number of chars actually read */ + char *p; + luaL_Buffer b; + luaL_buffinit(L, &b); + p = luaL_prepbuffsize(&b, n); /* prepare buffer to read whole block */ + nr = fread(p, sizeof(char), n, f); /* try to read 'n' chars */ + luaL_addsize(&b, nr); + luaL_pushresult(&b); /* close buffer */ + return (nr > 0); /* true iff read something */ +} + + +static int g_read (lua_State *L, FILE *f, int first) { + int nargs = lua_gettop(L) - 1; + int success; + int n; + clearerr(f); + if (nargs == 0) { /* no arguments? */ + success = read_line(L, f, 1); + n = first+1; /* to return 1 result */ + } + else { /* ensure stack space for all results and for auxlib's buffer */ + luaL_checkstack(L, nargs+LUA_MINSTACK, "too many arguments"); + success = 1; + for (n = first; nargs-- && success; n++) { + if (lua_type(L, n) == LUA_TNUMBER) { + size_t l = (size_t)lua_tointeger(L, n); + success = (l == 0) ? test_eof(L, f) : read_chars(L, f, l); + } + else { + const char *p = lua_tostring(L, n); + luaL_argcheck(L, p && p[0] == '*', n, "invalid option"); + switch (p[1]) { + case 'n': /* number */ + success = read_number(L, f); + break; + case 'l': /* line */ + success = read_line(L, f, 1); + break; + case 'L': /* line with end-of-line */ + success = read_line(L, f, 0); + break; + case 'a': /* file */ + read_all(L, f); /* read entire file */ + success = 1; /* always success */ + break; + default: + return luaL_argerror(L, n, "invalid format"); + } + } + } + } + if (ferror(f)) + return luaL_fileresult(L, 0, NULL); + if (!success) { + lua_pop(L, 1); /* remove last result */ + lua_pushnil(L); /* push nil instead */ + } + return n - first; +} + + +static int io_read (lua_State *L) { + return g_read(L, getiofile(L, IO_INPUT), 1); +} + + +static int f_read (lua_State *L) { + return g_read(L, tofile(L), 2); +} + + +static int io_readline (lua_State *L) { + LStream *p = (LStream *)lua_touserdata(L, lua_upvalueindex(1)); + int i; + int n = (int)lua_tointeger(L, lua_upvalueindex(2)); + if (isclosed(p)) /* file is already closed? */ + return luaL_error(L, "file is already closed"); + lua_settop(L , 1); + for (i = 1; i <= n; i++) /* push arguments to 'g_read' */ + lua_pushvalue(L, lua_upvalueindex(3 + i)); + n = g_read(L, p->f, 2); /* 'n' is number of results */ + lua_assert(n > 0); /* should return at least a nil */ + if (!lua_isnil(L, -n)) /* read at least one value? */ + return n; /* return them */ + else { /* first result is nil: EOF or error */ + if (n > 1) { /* is there error information? */ + /* 2nd result is error message */ + return luaL_error(L, "%s", lua_tostring(L, -n + 1)); + } + if (lua_toboolean(L, lua_upvalueindex(3))) { /* generator created file? */ + lua_settop(L, 0); + lua_pushvalue(L, lua_upvalueindex(1)); + aux_close(L); /* close it */ + } + return 0; + } +} + +/* }====================================================== */ + + +static int g_write (lua_State *L, FILE *f, int arg) { + int nargs = lua_gettop(L) - arg; + int status = 1; + for (; nargs--; arg++) { + if (lua_type(L, arg) == LUA_TNUMBER) { + /* optimization: could be done exactly as for strings */ + status = status && + fprintf(f, LUA_NUMBER_FMT, lua_tonumber(L, arg)) > 0; + } + else { + size_t l; + const char *s = luaL_checklstring(L, arg, &l); + status = status && (fwrite(s, sizeof(char), l, f) == l); + } + } + if (status) return 1; /* file handle already on stack top */ + else return luaL_fileresult(L, status, NULL); +} + + +static int io_write (lua_State *L) { + return g_write(L, getiofile(L, IO_OUTPUT), 1); +} + + +static int f_write (lua_State *L) { + FILE *f = tofile(L); + lua_pushvalue(L, 1); /* push file at the stack top (to be returned) */ + return g_write(L, f, 2); +} + + +static int f_seek (lua_State *L) { + static const int mode[] = {SEEK_SET, SEEK_CUR, SEEK_END}; + static const char *const modenames[] = {"set", "cur", "end", NULL}; + FILE *f = tofile(L); + int op = luaL_checkoption(L, 2, "cur", modenames); + lua_Number p3 = luaL_optnumber(L, 3, 0); + l_seeknum offset = (l_seeknum)p3; + luaL_argcheck(L, (lua_Number)offset == p3, 3, + "not an integer in proper range"); + op = l_fseek(f, offset, mode[op]); + if (op) + return luaL_fileresult(L, 0, NULL); /* error */ + else { + lua_pushnumber(L, (lua_Number)l_ftell(f)); + return 1; + } +} + + +static int f_setvbuf (lua_State *L) { + static const int mode[] = {_IONBF, _IOFBF, _IOLBF}; + static const char *const modenames[] = {"no", "full", "line", NULL}; + FILE *f = tofile(L); + int op = luaL_checkoption(L, 2, NULL, modenames); + lua_Integer sz = luaL_optinteger(L, 3, LUAL_BUFFERSIZE); + int res = setvbuf(f, NULL, mode[op], sz); + return luaL_fileresult(L, res == 0, NULL); +} + + + +static int io_flush (lua_State *L) { + return luaL_fileresult(L, fflush(getiofile(L, IO_OUTPUT)) == 0, NULL); +} + + +static int f_flush (lua_State *L) { + return luaL_fileresult(L, fflush(tofile(L)) == 0, NULL); +} + + +/* +** functions for 'io' library +*/ +static const luaL_Reg iolib[] = { + {"close", io_close}, + {"flush", io_flush}, + {"input", io_input}, + {"lines", io_lines}, + {"open", io_open}, + {"output", io_output}, + {"popen", io_popen}, + {"read", io_read}, + {"tmpfile", io_tmpfile}, + {"type", io_type}, + {"write", io_write}, + {NULL, NULL} +}; + + +/* +** methods for file handles +*/ +static const luaL_Reg flib[] = { + {"close", io_close}, + {"flush", f_flush}, + {"lines", f_lines}, + {"read", f_read}, + {"seek", f_seek}, + {"setvbuf", f_setvbuf}, + {"write", f_write}, + {"__gc", f_gc}, + {"__tostring", f_tostring}, + {NULL, NULL} +}; + + +static void createmeta (lua_State *L) { + luaL_newmetatable(L, LUA_FILEHANDLE); /* create metatable for file handles */ + lua_pushvalue(L, -1); /* push metatable */ + lua_setfield(L, -2, "__index"); /* metatable.__index = metatable */ + luaL_setfuncs(L, flib, 0); /* add file methods to new metatable */ + lua_pop(L, 1); /* pop new metatable */ +} + + +/* +** function to (not) close the standard files stdin, stdout, and stderr +*/ +static int io_noclose (lua_State *L) { + LStream *p = tolstream(L); + p->closef = &io_noclose; /* keep file opened */ + lua_pushnil(L); + lua_pushliteral(L, "cannot close standard file"); + return 2; +} + + +static void createstdfile (lua_State *L, FILE *f, const char *k, + const char *fname) { + LStream *p = newprefile(L); + p->f = f; + p->closef = &io_noclose; + if (k != NULL) { + lua_pushvalue(L, -1); + lua_setfield(L, LUA_REGISTRYINDEX, k); /* add file to registry */ + } + lua_setfield(L, -2, fname); /* add file to module */ +} + + +LUAMOD_API int luaopen_io (lua_State *L) { + luaL_newlib(L, iolib); /* new module */ + createmeta(L); + /* create (and set) default files */ + createstdfile(L, stdin, IO_INPUT, "stdin"); + createstdfile(L, stdout, IO_OUTPUT, "stdout"); + createstdfile(L, stderr, NULL, "stderr"); + return 1; +} + diff --git a/lua-5.2.4/src/llex.c b/lua-5.2.4/src/llex.c new file mode 100644 index 000000000..32cdcf1cf --- /dev/null +++ b/lua-5.2.4/src/llex.c @@ -0,0 +1,530 @@ +/* +** $Id: llex.c,v 2.63.1.3 2015/02/09 17:56:34 roberto Exp $ +** Lexical Analyzer +** See Copyright Notice in lua.h +*/ + + +#include +#include + +#define llex_c +#define LUA_CORE + +#include "lua.h" + +#include "lctype.h" +#include "ldo.h" +#include "llex.h" +#include "lobject.h" +#include "lparser.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "lzio.h" + + + +#define next(ls) (ls->current = zgetc(ls->z)) + + + +#define currIsNewline(ls) (ls->current == '\n' || ls->current == '\r') + + +/* ORDER RESERVED */ +static const char *const luaX_tokens [] = { + "and", "break", "do", "else", "elseif", + "end", "false", "for", "function", "goto", "if", + "in", "local", "nil", "not", "or", "repeat", + "return", "then", "true", "until", "while", + "..", "...", "==", ">=", "<=", "~=", "::", "", + "", "", "" +}; + + +#define save_and_next(ls) (save(ls, ls->current), next(ls)) + + +static l_noret lexerror (LexState *ls, const char *msg, int token); + + +static void save (LexState *ls, int c) { + Mbuffer *b = ls->buff; + if (luaZ_bufflen(b) + 1 > luaZ_sizebuffer(b)) { + size_t newsize; + if (luaZ_sizebuffer(b) >= MAX_SIZET/2) + lexerror(ls, "lexical element too long", 0); + newsize = luaZ_sizebuffer(b) * 2; + luaZ_resizebuffer(ls->L, b, newsize); + } + b->buffer[luaZ_bufflen(b)++] = cast(char, c); +} + + +void luaX_init (lua_State *L) { + int i; + for (i=0; itsv.extra = cast_byte(i+1); /* reserved word */ + } +} + + +const char *luaX_token2str (LexState *ls, int token) { + if (token < FIRST_RESERVED) { /* single-byte symbols? */ + lua_assert(token == cast(unsigned char, token)); + return (lisprint(token)) ? luaO_pushfstring(ls->L, LUA_QL("%c"), token) : + luaO_pushfstring(ls->L, "char(%d)", token); + } + else { + const char *s = luaX_tokens[token - FIRST_RESERVED]; + if (token < TK_EOS) /* fixed format (symbols and reserved words)? */ + return luaO_pushfstring(ls->L, LUA_QS, s); + else /* names, strings, and numerals */ + return s; + } +} + + +static const char *txtToken (LexState *ls, int token) { + switch (token) { + case TK_NAME: + case TK_STRING: + case TK_NUMBER: + save(ls, '\0'); + return luaO_pushfstring(ls->L, LUA_QS, luaZ_buffer(ls->buff)); + default: + return luaX_token2str(ls, token); + } +} + + +static l_noret lexerror (LexState *ls, const char *msg, int token) { + char buff[LUA_IDSIZE]; + luaO_chunkid(buff, getstr(ls->source), LUA_IDSIZE); + msg = luaO_pushfstring(ls->L, "%s:%d: %s", buff, ls->linenumber, msg); + if (token) + luaO_pushfstring(ls->L, "%s near %s", msg, txtToken(ls, token)); + luaD_throw(ls->L, LUA_ERRSYNTAX); +} + + +l_noret luaX_syntaxerror (LexState *ls, const char *msg) { + lexerror(ls, msg, ls->t.token); +} + + +/* +** creates a new string and anchors it in function's table so that +** it will not be collected until the end of the function's compilation +** (by that time it should be anchored in function's prototype) +*/ +TString *luaX_newstring (LexState *ls, const char *str, size_t l) { + lua_State *L = ls->L; + TValue *o; /* entry for `str' */ + TString *ts = luaS_newlstr(L, str, l); /* create new string */ + setsvalue2s(L, L->top++, ts); /* temporarily anchor it in stack */ + o = luaH_set(L, ls->fs->h, L->top - 1); + if (ttisnil(o)) { /* not in use yet? (see 'addK') */ + /* boolean value does not need GC barrier; + table has no metatable, so it does not need to invalidate cache */ + setbvalue(o, 1); /* t[string] = true */ + luaC_checkGC(L); + } + else { /* string already present */ + ts = rawtsvalue(keyfromval(o)); /* re-use value previously stored */ + } + L->top--; /* remove string from stack */ + return ts; +} + + +/* +** increment line number and skips newline sequence (any of +** \n, \r, \n\r, or \r\n) +*/ +static void inclinenumber (LexState *ls) { + int old = ls->current; + lua_assert(currIsNewline(ls)); + next(ls); /* skip `\n' or `\r' */ + if (currIsNewline(ls) && ls->current != old) + next(ls); /* skip `\n\r' or `\r\n' */ + if (++ls->linenumber >= MAX_INT) + lexerror(ls, "chunk has too many lines", 0); +} + + +void luaX_setinput (lua_State *L, LexState *ls, ZIO *z, TString *source, + int firstchar) { + ls->decpoint = '.'; + ls->L = L; + ls->current = firstchar; + ls->lookahead.token = TK_EOS; /* no look-ahead token */ + ls->z = z; + ls->fs = NULL; + ls->linenumber = 1; + ls->lastline = 1; + ls->source = source; + ls->envn = luaS_new(L, LUA_ENV); /* create env name */ + luaS_fix(ls->envn); /* never collect this name */ + luaZ_resizebuffer(ls->L, ls->buff, LUA_MINBUFFER); /* initialize buffer */ +} + + + +/* +** ======================================================= +** LEXICAL ANALYZER +** ======================================================= +*/ + + + +static int check_next (LexState *ls, const char *set) { + if (ls->current == '\0' || !strchr(set, ls->current)) + return 0; + save_and_next(ls); + return 1; +} + + +/* +** change all characters 'from' in buffer to 'to' +*/ +static void buffreplace (LexState *ls, char from, char to) { + size_t n = luaZ_bufflen(ls->buff); + char *p = luaZ_buffer(ls->buff); + while (n--) + if (p[n] == from) p[n] = to; +} + + +#if !defined(getlocaledecpoint) +#define getlocaledecpoint() (localeconv()->decimal_point[0]) +#endif + + +#define buff2d(b,e) luaO_str2d(luaZ_buffer(b), luaZ_bufflen(b) - 1, e) + +/* +** in case of format error, try to change decimal point separator to +** the one defined in the current locale and check again +*/ +static void trydecpoint (LexState *ls, SemInfo *seminfo) { + char old = ls->decpoint; + ls->decpoint = getlocaledecpoint(); + buffreplace(ls, old, ls->decpoint); /* try new decimal separator */ + if (!buff2d(ls->buff, &seminfo->r)) { + /* format error with correct decimal point: no more options */ + buffreplace(ls, ls->decpoint, '.'); /* undo change (for error message) */ + lexerror(ls, "malformed number", TK_NUMBER); + } +} + + +/* LUA_NUMBER */ +/* +** this function is quite liberal in what it accepts, as 'luaO_str2d' +** will reject ill-formed numerals. +*/ +static void read_numeral (LexState *ls, SemInfo *seminfo) { + const char *expo = "Ee"; + int first = ls->current; + lua_assert(lisdigit(ls->current)); + save_and_next(ls); + if (first == '0' && check_next(ls, "Xx")) /* hexadecimal? */ + expo = "Pp"; + for (;;) { + if (check_next(ls, expo)) /* exponent part? */ + check_next(ls, "+-"); /* optional exponent sign */ + if (lisxdigit(ls->current) || ls->current == '.') + save_and_next(ls); + else break; + } + save(ls, '\0'); + buffreplace(ls, '.', ls->decpoint); /* follow locale for decimal point */ + if (!buff2d(ls->buff, &seminfo->r)) /* format error? */ + trydecpoint(ls, seminfo); /* try to update decimal point separator */ +} + + +/* +** skip a sequence '[=*[' or ']=*]' and return its number of '='s or +** -1 if sequence is malformed +*/ +static int skip_sep (LexState *ls) { + int count = 0; + int s = ls->current; + lua_assert(s == '[' || s == ']'); + save_and_next(ls); + while (ls->current == '=') { + save_and_next(ls); + count++; + } + return (ls->current == s) ? count : (-count) - 1; +} + + +static void read_long_string (LexState *ls, SemInfo *seminfo, int sep) { + save_and_next(ls); /* skip 2nd `[' */ + if (currIsNewline(ls)) /* string starts with a newline? */ + inclinenumber(ls); /* skip it */ + for (;;) { + switch (ls->current) { + case EOZ: + lexerror(ls, (seminfo) ? "unfinished long string" : + "unfinished long comment", TK_EOS); + break; /* to avoid warnings */ + case ']': { + if (skip_sep(ls) == sep) { + save_and_next(ls); /* skip 2nd `]' */ + goto endloop; + } + break; + } + case '\n': case '\r': { + save(ls, '\n'); + inclinenumber(ls); + if (!seminfo) luaZ_resetbuffer(ls->buff); /* avoid wasting space */ + break; + } + default: { + if (seminfo) save_and_next(ls); + else next(ls); + } + } + } endloop: + if (seminfo) + seminfo->ts = luaX_newstring(ls, luaZ_buffer(ls->buff) + (2 + sep), + luaZ_bufflen(ls->buff) - 2*(2 + sep)); +} + + +static void escerror (LexState *ls, int *c, int n, const char *msg) { + int i; + luaZ_resetbuffer(ls->buff); /* prepare error message */ + save(ls, '\\'); + for (i = 0; i < n && c[i] != EOZ; i++) + save(ls, c[i]); + lexerror(ls, msg, TK_STRING); +} + + +static int readhexaesc (LexState *ls) { + int c[3], i; /* keep input for error message */ + int r = 0; /* result accumulator */ + c[0] = 'x'; /* for error message */ + for (i = 1; i < 3; i++) { /* read two hexadecimal digits */ + c[i] = next(ls); + if (!lisxdigit(c[i])) + escerror(ls, c, i + 1, "hexadecimal digit expected"); + r = (r << 4) + luaO_hexavalue(c[i]); + } + return r; +} + + +static int readdecesc (LexState *ls) { + int c[3], i; + int r = 0; /* result accumulator */ + for (i = 0; i < 3 && lisdigit(ls->current); i++) { /* read up to 3 digits */ + c[i] = ls->current; + r = 10*r + c[i] - '0'; + next(ls); + } + if (r > UCHAR_MAX) + escerror(ls, c, i, "decimal escape too large"); + return r; +} + + +static void read_string (LexState *ls, int del, SemInfo *seminfo) { + save_and_next(ls); /* keep delimiter (for error messages) */ + while (ls->current != del) { + switch (ls->current) { + case EOZ: + lexerror(ls, "unfinished string", TK_EOS); + break; /* to avoid warnings */ + case '\n': + case '\r': + lexerror(ls, "unfinished string", TK_STRING); + break; /* to avoid warnings */ + case '\\': { /* escape sequences */ + int c; /* final character to be saved */ + next(ls); /* do not save the `\' */ + switch (ls->current) { + case 'a': c = '\a'; goto read_save; + case 'b': c = '\b'; goto read_save; + case 'f': c = '\f'; goto read_save; + case 'n': c = '\n'; goto read_save; + case 'r': c = '\r'; goto read_save; + case 't': c = '\t'; goto read_save; + case 'v': c = '\v'; goto read_save; + case 'x': c = readhexaesc(ls); goto read_save; + case '\n': case '\r': + inclinenumber(ls); c = '\n'; goto only_save; + case '\\': case '\"': case '\'': + c = ls->current; goto read_save; + case EOZ: goto no_save; /* will raise an error next loop */ + case 'z': { /* zap following span of spaces */ + next(ls); /* skip the 'z' */ + while (lisspace(ls->current)) { + if (currIsNewline(ls)) inclinenumber(ls); + else next(ls); + } + goto no_save; + } + default: { + if (!lisdigit(ls->current)) + escerror(ls, &ls->current, 1, "invalid escape sequence"); + /* digital escape \ddd */ + c = readdecesc(ls); + goto only_save; + } + } + read_save: next(ls); /* read next character */ + only_save: save(ls, c); /* save 'c' */ + no_save: break; + } + default: + save_and_next(ls); + } + } + save_and_next(ls); /* skip delimiter */ + seminfo->ts = luaX_newstring(ls, luaZ_buffer(ls->buff) + 1, + luaZ_bufflen(ls->buff) - 2); +} + + +static int llex (LexState *ls, SemInfo *seminfo) { + luaZ_resetbuffer(ls->buff); + for (;;) { + switch (ls->current) { + case '\n': case '\r': { /* line breaks */ + inclinenumber(ls); + break; + } + case ' ': case '\f': case '\t': case '\v': { /* spaces */ + next(ls); + break; + } + case '-': { /* '-' or '--' (comment) */ + next(ls); + if (ls->current != '-') return '-'; + /* else is a comment */ + next(ls); + if (ls->current == '[') { /* long comment? */ + int sep = skip_sep(ls); + luaZ_resetbuffer(ls->buff); /* `skip_sep' may dirty the buffer */ + if (sep >= 0) { + read_long_string(ls, NULL, sep); /* skip long comment */ + luaZ_resetbuffer(ls->buff); /* previous call may dirty the buff. */ + break; + } + } + /* else short comment */ + while (!currIsNewline(ls) && ls->current != EOZ) + next(ls); /* skip until end of line (or end of file) */ + break; + } + case '[': { /* long string or simply '[' */ + int sep = skip_sep(ls); + if (sep >= 0) { + read_long_string(ls, seminfo, sep); + return TK_STRING; + } + else if (sep == -1) return '['; + else lexerror(ls, "invalid long string delimiter", TK_STRING); + } + case '=': { + next(ls); + if (ls->current != '=') return '='; + else { next(ls); return TK_EQ; } + } + case '<': { + next(ls); + if (ls->current != '=') return '<'; + else { next(ls); return TK_LE; } + } + case '>': { + next(ls); + if (ls->current != '=') return '>'; + else { next(ls); return TK_GE; } + } + case '~': { + next(ls); + if (ls->current != '=') return '~'; + else { next(ls); return TK_NE; } + } + case ':': { + next(ls); + if (ls->current != ':') return ':'; + else { next(ls); return TK_DBCOLON; } + } + case '"': case '\'': { /* short literal strings */ + read_string(ls, ls->current, seminfo); + return TK_STRING; + } + case '.': { /* '.', '..', '...', or number */ + save_and_next(ls); + if (check_next(ls, ".")) { + if (check_next(ls, ".")) + return TK_DOTS; /* '...' */ + else return TK_CONCAT; /* '..' */ + } + else if (!lisdigit(ls->current)) return '.'; + /* else go through */ + } + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': { + read_numeral(ls, seminfo); + return TK_NUMBER; + } + case EOZ: { + return TK_EOS; + } + default: { + if (lislalpha(ls->current)) { /* identifier or reserved word? */ + TString *ts; + do { + save_and_next(ls); + } while (lislalnum(ls->current)); + ts = luaX_newstring(ls, luaZ_buffer(ls->buff), + luaZ_bufflen(ls->buff)); + seminfo->ts = ts; + if (isreserved(ts)) /* reserved word? */ + return ts->tsv.extra - 1 + FIRST_RESERVED; + else { + return TK_NAME; + } + } + else { /* single-char tokens (+ - / ...) */ + int c = ls->current; + next(ls); + return c; + } + } + } + } +} + + +void luaX_next (LexState *ls) { + ls->lastline = ls->linenumber; + if (ls->lookahead.token != TK_EOS) { /* is there a look-ahead token? */ + ls->t = ls->lookahead; /* use this one */ + ls->lookahead.token = TK_EOS; /* and discharge it */ + } + else + ls->t.token = llex(ls, &ls->t.seminfo); /* read next token */ +} + + +int luaX_lookahead (LexState *ls) { + lua_assert(ls->lookahead.token == TK_EOS); + ls->lookahead.token = llex(ls, &ls->lookahead.seminfo); + return ls->lookahead.token; +} + diff --git a/lua-5.2.4/src/llex.h b/lua-5.2.4/src/llex.h new file mode 100644 index 000000000..a4acdd302 --- /dev/null +++ b/lua-5.2.4/src/llex.h @@ -0,0 +1,78 @@ +/* +** $Id: llex.h,v 1.72.1.1 2013/04/12 18:48:47 roberto Exp $ +** Lexical Analyzer +** See Copyright Notice in lua.h +*/ + +#ifndef llex_h +#define llex_h + +#include "lobject.h" +#include "lzio.h" + + +#define FIRST_RESERVED 257 + + + +/* +* WARNING: if you change the order of this enumeration, +* grep "ORDER RESERVED" +*/ +enum RESERVED { + /* terminal symbols denoted by reserved words */ + TK_AND = FIRST_RESERVED, TK_BREAK, + TK_DO, TK_ELSE, TK_ELSEIF, TK_END, TK_FALSE, TK_FOR, TK_FUNCTION, + TK_GOTO, TK_IF, TK_IN, TK_LOCAL, TK_NIL, TK_NOT, TK_OR, TK_REPEAT, + TK_RETURN, TK_THEN, TK_TRUE, TK_UNTIL, TK_WHILE, + /* other terminal symbols */ + TK_CONCAT, TK_DOTS, TK_EQ, TK_GE, TK_LE, TK_NE, TK_DBCOLON, TK_EOS, + TK_NUMBER, TK_NAME, TK_STRING +}; + +/* number of reserved words */ +#define NUM_RESERVED (cast(int, TK_WHILE-FIRST_RESERVED+1)) + + +typedef union { + lua_Number r; + TString *ts; +} SemInfo; /* semantics information */ + + +typedef struct Token { + int token; + SemInfo seminfo; +} Token; + + +/* state of the lexer plus state of the parser when shared by all + functions */ +typedef struct LexState { + int current; /* current character (charint) */ + int linenumber; /* input line counter */ + int lastline; /* line of last token `consumed' */ + Token t; /* current token */ + Token lookahead; /* look ahead token */ + struct FuncState *fs; /* current function (parser) */ + struct lua_State *L; + ZIO *z; /* input stream */ + Mbuffer *buff; /* buffer for tokens */ + struct Dyndata *dyd; /* dynamic structures used by the parser */ + TString *source; /* current source name */ + TString *envn; /* environment variable name */ + char decpoint; /* locale decimal point */ +} LexState; + + +LUAI_FUNC void luaX_init (lua_State *L); +LUAI_FUNC void luaX_setinput (lua_State *L, LexState *ls, ZIO *z, + TString *source, int firstchar); +LUAI_FUNC TString *luaX_newstring (LexState *ls, const char *str, size_t l); +LUAI_FUNC void luaX_next (LexState *ls); +LUAI_FUNC int luaX_lookahead (LexState *ls); +LUAI_FUNC l_noret luaX_syntaxerror (LexState *ls, const char *s); +LUAI_FUNC const char *luaX_token2str (LexState *ls, int token); + + +#endif diff --git a/lua-5.2.4/src/llimits.h b/lua-5.2.4/src/llimits.h new file mode 100644 index 000000000..152dd0551 --- /dev/null +++ b/lua-5.2.4/src/llimits.h @@ -0,0 +1,309 @@ +/* +** $Id: llimits.h,v 1.103.1.1 2013/04/12 18:48:47 roberto Exp $ +** Limits, basic types, and some other `installation-dependent' definitions +** See Copyright Notice in lua.h +*/ + +#ifndef llimits_h +#define llimits_h + + +#include +#include + + +#include "lua.h" + + +typedef unsigned LUA_INT32 lu_int32; + +typedef LUAI_UMEM lu_mem; + +typedef LUAI_MEM l_mem; + + + +/* chars used as small naturals (so that `char' is reserved for characters) */ +typedef unsigned char lu_byte; + + +#define MAX_SIZET ((size_t)(~(size_t)0)-2) + +#define MAX_LUMEM ((lu_mem)(~(lu_mem)0)-2) + +#define MAX_LMEM ((l_mem) ((MAX_LUMEM >> 1) - 2)) + + +#define MAX_INT (INT_MAX-2) /* maximum value of an int (-2 for safety) */ + +/* +** conversion of pointer to integer +** this is for hashing only; there is no problem if the integer +** cannot hold the whole pointer value +*/ +#define IntPoint(p) ((unsigned int)(lu_mem)(p)) + + + +/* type to ensure maximum alignment */ +#if !defined(LUAI_USER_ALIGNMENT_T) +#define LUAI_USER_ALIGNMENT_T union { double u; void *s; long l; } +#endif + +typedef LUAI_USER_ALIGNMENT_T L_Umaxalign; + + +/* result of a `usual argument conversion' over lua_Number */ +typedef LUAI_UACNUMBER l_uacNumber; + + +/* internal assertions for in-house debugging */ +#if defined(lua_assert) +#define check_exp(c,e) (lua_assert(c), (e)) +/* to avoid problems with conditions too long */ +#define lua_longassert(c) { if (!(c)) lua_assert(0); } +#else +#define lua_assert(c) ((void)0) +#define check_exp(c,e) (e) +#define lua_longassert(c) ((void)0) +#endif + +/* +** assertion for checking API calls +*/ +#if !defined(luai_apicheck) + +#if defined(LUA_USE_APICHECK) +#include +#define luai_apicheck(L,e) assert(e) +#else +#define luai_apicheck(L,e) lua_assert(e) +#endif + +#endif + +#define api_check(l,e,msg) luai_apicheck(l,(e) && msg) + + +#if !defined(UNUSED) +#define UNUSED(x) ((void)(x)) /* to avoid warnings */ +#endif + + +#define cast(t, exp) ((t)(exp)) + +#define cast_byte(i) cast(lu_byte, (i)) +#define cast_num(i) cast(lua_Number, (i)) +#define cast_int(i) cast(int, (i)) +#define cast_uchar(i) cast(unsigned char, (i)) + + +/* +** non-return type +*/ +#if defined(__GNUC__) +#define l_noret void __attribute__((noreturn)) +#elif defined(_MSC_VER) +#define l_noret void __declspec(noreturn) +#else +#define l_noret void +#endif + + + +/* +** maximum depth for nested C calls and syntactical nested non-terminals +** in a program. (Value must fit in an unsigned short int.) +*/ +#if !defined(LUAI_MAXCCALLS) +#define LUAI_MAXCCALLS 200 +#endif + +/* +** maximum number of upvalues in a closure (both C and Lua). (Value +** must fit in an unsigned char.) +*/ +#define MAXUPVAL UCHAR_MAX + + +/* +** type for virtual-machine instructions +** must be an unsigned with (at least) 4 bytes (see details in lopcodes.h) +*/ +typedef lu_int32 Instruction; + + + +/* maximum stack for a Lua function */ +#define MAXSTACK 250 + + + +/* minimum size for the string table (must be power of 2) */ +#if !defined(MINSTRTABSIZE) +#define MINSTRTABSIZE 32 +#endif + + +/* minimum size for string buffer */ +#if !defined(LUA_MINBUFFER) +#define LUA_MINBUFFER 32 +#endif + + +#if !defined(lua_lock) +#define lua_lock(L) ((void) 0) +#define lua_unlock(L) ((void) 0) +#endif + +#if !defined(luai_threadyield) +#define luai_threadyield(L) {lua_unlock(L); lua_lock(L);} +#endif + + +/* +** these macros allow user-specific actions on threads when you defined +** LUAI_EXTRASPACE and need to do something extra when a thread is +** created/deleted/resumed/yielded. +*/ +#if !defined(luai_userstateopen) +#define luai_userstateopen(L) ((void)L) +#endif + +#if !defined(luai_userstateclose) +#define luai_userstateclose(L) ((void)L) +#endif + +#if !defined(luai_userstatethread) +#define luai_userstatethread(L,L1) ((void)L) +#endif + +#if !defined(luai_userstatefree) +#define luai_userstatefree(L,L1) ((void)L) +#endif + +#if !defined(luai_userstateresume) +#define luai_userstateresume(L,n) ((void)L) +#endif + +#if !defined(luai_userstateyield) +#define luai_userstateyield(L,n) ((void)L) +#endif + +/* +** lua_number2int is a macro to convert lua_Number to int. +** lua_number2integer is a macro to convert lua_Number to lua_Integer. +** lua_number2unsigned is a macro to convert a lua_Number to a lua_Unsigned. +** lua_unsigned2number is a macro to convert a lua_Unsigned to a lua_Number. +** luai_hashnum is a macro to hash a lua_Number value into an integer. +** The hash must be deterministic and give reasonable values for +** both small and large values (outside the range of integers). +*/ + +#if defined(MS_ASMTRICK) || defined(LUA_MSASMTRICK) /* { */ +/* trick with Microsoft assembler for X86 */ + +#define lua_number2int(i,n) __asm {__asm fld n __asm fistp i} +#define lua_number2integer(i,n) lua_number2int(i, n) +#define lua_number2unsigned(i,n) \ + {__int64 l; __asm {__asm fld n __asm fistp l} i = (unsigned int)l;} + + +#elif defined(LUA_IEEE754TRICK) /* }{ */ +/* the next trick should work on any machine using IEEE754 with + a 32-bit int type */ + +union luai_Cast { double l_d; LUA_INT32 l_p[2]; }; + +#if !defined(LUA_IEEEENDIAN) /* { */ +#define LUAI_EXTRAIEEE \ + static const union luai_Cast ieeeendian = {-(33.0 + 6755399441055744.0)}; +#define LUA_IEEEENDIANLOC (ieeeendian.l_p[1] == 33) +#else +#define LUA_IEEEENDIANLOC LUA_IEEEENDIAN +#define LUAI_EXTRAIEEE /* empty */ +#endif /* } */ + +#define lua_number2int32(i,n,t) \ + { LUAI_EXTRAIEEE \ + volatile union luai_Cast u; u.l_d = (n) + 6755399441055744.0; \ + (i) = (t)u.l_p[LUA_IEEEENDIANLOC]; } + +#define luai_hashnum(i,n) \ + { volatile union luai_Cast u; u.l_d = (n) + 1.0; /* avoid -0 */ \ + (i) = u.l_p[0]; (i) += u.l_p[1]; } /* add double bits for his hash */ + +#define lua_number2int(i,n) lua_number2int32(i, n, int) +#define lua_number2unsigned(i,n) lua_number2int32(i, n, lua_Unsigned) + +/* the trick can be expanded to lua_Integer when it is a 32-bit value */ +#if defined(LUA_IEEELL) +#define lua_number2integer(i,n) lua_number2int32(i, n, lua_Integer) +#endif + +#endif /* } */ + + +/* the following definitions always work, but may be slow */ + +#if !defined(lua_number2int) +#define lua_number2int(i,n) ((i)=(int)(n)) +#endif + +#if !defined(lua_number2integer) +#define lua_number2integer(i,n) ((i)=(lua_Integer)(n)) +#endif + +#if !defined(lua_number2unsigned) /* { */ +/* the following definition assures proper modulo behavior */ +#if defined(LUA_NUMBER_DOUBLE) || defined(LUA_NUMBER_FLOAT) +#include +#define SUPUNSIGNED ((lua_Number)(~(lua_Unsigned)0) + 1) +#define lua_number2unsigned(i,n) \ + ((i)=(lua_Unsigned)((n) - floor((n)/SUPUNSIGNED)*SUPUNSIGNED)) +#else +#define lua_number2unsigned(i,n) ((i)=(lua_Unsigned)(n)) +#endif +#endif /* } */ + + +#if !defined(lua_unsigned2number) +/* on several machines, coercion from unsigned to double is slow, + so it may be worth to avoid */ +#define lua_unsigned2number(u) \ + (((u) <= (lua_Unsigned)INT_MAX) ? (lua_Number)(int)(u) : (lua_Number)(u)) +#endif + + + +#if defined(ltable_c) && !defined(luai_hashnum) + +#include +#include + +#define luai_hashnum(i,n) { int e; \ + n = l_mathop(frexp)(n, &e) * (lua_Number)(INT_MAX - DBL_MAX_EXP); \ + lua_number2int(i, n); i += e; } + +#endif + + + +/* +** macro to control inclusion of some hard tests on stack reallocation +*/ +#if !defined(HARDSTACKTESTS) +#define condmovestack(L) ((void)0) +#else +/* realloc stack keeping its size */ +#define condmovestack(L) luaD_reallocstack((L), (L)->stacksize) +#endif + +#if !defined(HARDMEMTESTS) +#define condchangemem(L) condmovestack(L) +#else +#define condchangemem(L) \ + ((void)(!(G(L)->gcrunning) || (luaC_fullgc(L, 0), 1))) +#endif + +#endif diff --git a/lua-5.2.4/src/lmathlib.c b/lua-5.2.4/src/lmathlib.c new file mode 100644 index 000000000..fe9fc5423 --- /dev/null +++ b/lua-5.2.4/src/lmathlib.c @@ -0,0 +1,279 @@ +/* +** $Id: lmathlib.c,v 1.83.1.1 2013/04/12 18:48:47 roberto Exp $ +** Standard mathematical library +** See Copyright Notice in lua.h +*/ + + +#include +#include + +#define lmathlib_c +#define LUA_LIB + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +#undef PI +#define PI ((lua_Number)(3.1415926535897932384626433832795)) +#define RADIANS_PER_DEGREE ((lua_Number)(PI/180.0)) + + + +static int math_abs (lua_State *L) { + lua_pushnumber(L, l_mathop(fabs)(luaL_checknumber(L, 1))); + return 1; +} + +static int math_sin (lua_State *L) { + lua_pushnumber(L, l_mathop(sin)(luaL_checknumber(L, 1))); + return 1; +} + +static int math_sinh (lua_State *L) { + lua_pushnumber(L, l_mathop(sinh)(luaL_checknumber(L, 1))); + return 1; +} + +static int math_cos (lua_State *L) { + lua_pushnumber(L, l_mathop(cos)(luaL_checknumber(L, 1))); + return 1; +} + +static int math_cosh (lua_State *L) { + lua_pushnumber(L, l_mathop(cosh)(luaL_checknumber(L, 1))); + return 1; +} + +static int math_tan (lua_State *L) { + lua_pushnumber(L, l_mathop(tan)(luaL_checknumber(L, 1))); + return 1; +} + +static int math_tanh (lua_State *L) { + lua_pushnumber(L, l_mathop(tanh)(luaL_checknumber(L, 1))); + return 1; +} + +static int math_asin (lua_State *L) { + lua_pushnumber(L, l_mathop(asin)(luaL_checknumber(L, 1))); + return 1; +} + +static int math_acos (lua_State *L) { + lua_pushnumber(L, l_mathop(acos)(luaL_checknumber(L, 1))); + return 1; +} + +static int math_atan (lua_State *L) { + lua_pushnumber(L, l_mathop(atan)(luaL_checknumber(L, 1))); + return 1; +} + +static int math_atan2 (lua_State *L) { + lua_pushnumber(L, l_mathop(atan2)(luaL_checknumber(L, 1), + luaL_checknumber(L, 2))); + return 1; +} + +static int math_ceil (lua_State *L) { + lua_pushnumber(L, l_mathop(ceil)(luaL_checknumber(L, 1))); + return 1; +} + +static int math_floor (lua_State *L) { + lua_pushnumber(L, l_mathop(floor)(luaL_checknumber(L, 1))); + return 1; +} + +static int math_fmod (lua_State *L) { + lua_pushnumber(L, l_mathop(fmod)(luaL_checknumber(L, 1), + luaL_checknumber(L, 2))); + return 1; +} + +static int math_modf (lua_State *L) { + lua_Number ip; + lua_Number fp = l_mathop(modf)(luaL_checknumber(L, 1), &ip); + lua_pushnumber(L, ip); + lua_pushnumber(L, fp); + return 2; +} + +static int math_sqrt (lua_State *L) { + lua_pushnumber(L, l_mathop(sqrt)(luaL_checknumber(L, 1))); + return 1; +} + +static int math_pow (lua_State *L) { + lua_Number x = luaL_checknumber(L, 1); + lua_Number y = luaL_checknumber(L, 2); + lua_pushnumber(L, l_mathop(pow)(x, y)); + return 1; +} + +static int math_log (lua_State *L) { + lua_Number x = luaL_checknumber(L, 1); + lua_Number res; + if (lua_isnoneornil(L, 2)) + res = l_mathop(log)(x); + else { + lua_Number base = luaL_checknumber(L, 2); + if (base == (lua_Number)10.0) res = l_mathop(log10)(x); + else res = l_mathop(log)(x)/l_mathop(log)(base); + } + lua_pushnumber(L, res); + return 1; +} + +#if defined(LUA_COMPAT_LOG10) +static int math_log10 (lua_State *L) { + lua_pushnumber(L, l_mathop(log10)(luaL_checknumber(L, 1))); + return 1; +} +#endif + +static int math_exp (lua_State *L) { + lua_pushnumber(L, l_mathop(exp)(luaL_checknumber(L, 1))); + return 1; +} + +static int math_deg (lua_State *L) { + lua_pushnumber(L, luaL_checknumber(L, 1)/RADIANS_PER_DEGREE); + return 1; +} + +static int math_rad (lua_State *L) { + lua_pushnumber(L, luaL_checknumber(L, 1)*RADIANS_PER_DEGREE); + return 1; +} + +static int math_frexp (lua_State *L) { + int e; + lua_pushnumber(L, l_mathop(frexp)(luaL_checknumber(L, 1), &e)); + lua_pushinteger(L, e); + return 2; +} + +static int math_ldexp (lua_State *L) { + lua_Number x = luaL_checknumber(L, 1); + int ep = luaL_checkint(L, 2); + lua_pushnumber(L, l_mathop(ldexp)(x, ep)); + return 1; +} + + + +static int math_min (lua_State *L) { + int n = lua_gettop(L); /* number of arguments */ + lua_Number dmin = luaL_checknumber(L, 1); + int i; + for (i=2; i<=n; i++) { + lua_Number d = luaL_checknumber(L, i); + if (d < dmin) + dmin = d; + } + lua_pushnumber(L, dmin); + return 1; +} + + +static int math_max (lua_State *L) { + int n = lua_gettop(L); /* number of arguments */ + lua_Number dmax = luaL_checknumber(L, 1); + int i; + for (i=2; i<=n; i++) { + lua_Number d = luaL_checknumber(L, i); + if (d > dmax) + dmax = d; + } + lua_pushnumber(L, dmax); + return 1; +} + + +static int math_random (lua_State *L) { + /* the `%' avoids the (rare) case of r==1, and is needed also because on + some systems (SunOS!) `rand()' may return a value larger than RAND_MAX */ + lua_Number r = (lua_Number)(rand()%RAND_MAX) / (lua_Number)RAND_MAX; + switch (lua_gettop(L)) { /* check number of arguments */ + case 0: { /* no arguments */ + lua_pushnumber(L, r); /* Number between 0 and 1 */ + break; + } + case 1: { /* only upper limit */ + lua_Number u = luaL_checknumber(L, 1); + luaL_argcheck(L, (lua_Number)1.0 <= u, 1, "interval is empty"); + lua_pushnumber(L, l_mathop(floor)(r*u) + (lua_Number)(1.0)); /* [1, u] */ + break; + } + case 2: { /* lower and upper limits */ + lua_Number l = luaL_checknumber(L, 1); + lua_Number u = luaL_checknumber(L, 2); + luaL_argcheck(L, l <= u, 2, "interval is empty"); + lua_pushnumber(L, l_mathop(floor)(r*(u-l+1)) + l); /* [l, u] */ + break; + } + default: return luaL_error(L, "wrong number of arguments"); + } + return 1; +} + + +static int math_randomseed (lua_State *L) { + srand(luaL_checkunsigned(L, 1)); + (void)rand(); /* discard first value to avoid undesirable correlations */ + return 0; +} + + +static const luaL_Reg mathlib[] = { + {"abs", math_abs}, + {"acos", math_acos}, + {"asin", math_asin}, + {"atan2", math_atan2}, + {"atan", math_atan}, + {"ceil", math_ceil}, + {"cosh", math_cosh}, + {"cos", math_cos}, + {"deg", math_deg}, + {"exp", math_exp}, + {"floor", math_floor}, + {"fmod", math_fmod}, + {"frexp", math_frexp}, + {"ldexp", math_ldexp}, +#if defined(LUA_COMPAT_LOG10) + {"log10", math_log10}, +#endif + {"log", math_log}, + {"max", math_max}, + {"min", math_min}, + {"modf", math_modf}, + {"pow", math_pow}, + {"rad", math_rad}, + {"random", math_random}, + {"randomseed", math_randomseed}, + {"sinh", math_sinh}, + {"sin", math_sin}, + {"sqrt", math_sqrt}, + {"tanh", math_tanh}, + {"tan", math_tan}, + {NULL, NULL} +}; + + +/* +** Open math library +*/ +LUAMOD_API int luaopen_math (lua_State *L) { + luaL_newlib(L, mathlib); + lua_pushnumber(L, PI); + lua_setfield(L, -2, "pi"); + lua_pushnumber(L, HUGE_VAL); + lua_setfield(L, -2, "huge"); + return 1; +} + diff --git a/lua-5.2.4/src/lmem.c b/lua-5.2.4/src/lmem.c new file mode 100644 index 000000000..ee343e3e0 --- /dev/null +++ b/lua-5.2.4/src/lmem.c @@ -0,0 +1,99 @@ +/* +** $Id: lmem.c,v 1.84.1.1 2013/04/12 18:48:47 roberto Exp $ +** Interface to Memory Manager +** See Copyright Notice in lua.h +*/ + + +#include + +#define lmem_c +#define LUA_CORE + +#include "lua.h" + +#include "ldebug.h" +#include "ldo.h" +#include "lgc.h" +#include "lmem.h" +#include "lobject.h" +#include "lstate.h" + + + +/* +** About the realloc function: +** void * frealloc (void *ud, void *ptr, size_t osize, size_t nsize); +** (`osize' is the old size, `nsize' is the new size) +** +** * frealloc(ud, NULL, x, s) creates a new block of size `s' (no +** matter 'x'). +** +** * frealloc(ud, p, x, 0) frees the block `p' +** (in this specific case, frealloc must return NULL); +** particularly, frealloc(ud, NULL, 0, 0) does nothing +** (which is equivalent to free(NULL) in ANSI C) +** +** frealloc returns NULL if it cannot create or reallocate the area +** (any reallocation to an equal or smaller size cannot fail!) +*/ + + + +#define MINSIZEARRAY 4 + + +void *luaM_growaux_ (lua_State *L, void *block, int *size, size_t size_elems, + int limit, const char *what) { + void *newblock; + int newsize; + if (*size >= limit/2) { /* cannot double it? */ + if (*size >= limit) /* cannot grow even a little? */ + luaG_runerror(L, "too many %s (limit is %d)", what, limit); + newsize = limit; /* still have at least one free place */ + } + else { + newsize = (*size)*2; + if (newsize < MINSIZEARRAY) + newsize = MINSIZEARRAY; /* minimum size */ + } + newblock = luaM_reallocv(L, block, *size, newsize, size_elems); + *size = newsize; /* update only when everything else is OK */ + return newblock; +} + + +l_noret luaM_toobig (lua_State *L) { + luaG_runerror(L, "memory allocation error: block too big"); +} + + + +/* +** generic allocation routine. +*/ +void *luaM_realloc_ (lua_State *L, void *block, size_t osize, size_t nsize) { + void *newblock; + global_State *g = G(L); + size_t realosize = (block) ? osize : 0; + lua_assert((realosize == 0) == (block == NULL)); +#if defined(HARDMEMTESTS) + if (nsize > realosize && g->gcrunning) + luaC_fullgc(L, 1); /* force a GC whenever possible */ +#endif + newblock = (*g->frealloc)(g->ud, block, osize, nsize); + if (newblock == NULL && nsize > 0) { + api_check(L, nsize > realosize, + "realloc cannot fail when shrinking a block"); + if (g->gcrunning) { + luaC_fullgc(L, 1); /* try to free some memory... */ + newblock = (*g->frealloc)(g->ud, block, osize, nsize); /* try again */ + } + if (newblock == NULL) + luaD_throw(L, LUA_ERRMEM); + } + lua_assert((nsize == 0) == (newblock == NULL)); + g->GCdebt = (g->GCdebt + nsize) - realosize; + return newblock; +} + diff --git a/lua-5.2.4/src/lmem.h b/lua-5.2.4/src/lmem.h new file mode 100644 index 000000000..bd4f4e072 --- /dev/null +++ b/lua-5.2.4/src/lmem.h @@ -0,0 +1,57 @@ +/* +** $Id: lmem.h,v 1.40.1.1 2013/04/12 18:48:47 roberto Exp $ +** Interface to Memory Manager +** See Copyright Notice in lua.h +*/ + +#ifndef lmem_h +#define lmem_h + + +#include + +#include "llimits.h" +#include "lua.h" + + +/* +** This macro avoids the runtime division MAX_SIZET/(e), as 'e' is +** always constant. +** The macro is somewhat complex to avoid warnings: +** +1 avoids warnings of "comparison has constant result"; +** cast to 'void' avoids warnings of "value unused". +*/ +#define luaM_reallocv(L,b,on,n,e) \ + (cast(void, \ + (cast(size_t, (n)+1) > MAX_SIZET/(e)) ? (luaM_toobig(L), 0) : 0), \ + luaM_realloc_(L, (b), (on)*(e), (n)*(e))) + +#define luaM_freemem(L, b, s) luaM_realloc_(L, (b), (s), 0) +#define luaM_free(L, b) luaM_realloc_(L, (b), sizeof(*(b)), 0) +#define luaM_freearray(L, b, n) luaM_reallocv(L, (b), n, 0, sizeof((b)[0])) + +#define luaM_malloc(L,s) luaM_realloc_(L, NULL, 0, (s)) +#define luaM_new(L,t) cast(t *, luaM_malloc(L, sizeof(t))) +#define luaM_newvector(L,n,t) \ + cast(t *, luaM_reallocv(L, NULL, 0, n, sizeof(t))) + +#define luaM_newobject(L,tag,s) luaM_realloc_(L, NULL, tag, (s)) + +#define luaM_growvector(L,v,nelems,size,t,limit,e) \ + if ((nelems)+1 > (size)) \ + ((v)=cast(t *, luaM_growaux_(L,v,&(size),sizeof(t),limit,e))) + +#define luaM_reallocvector(L, v,oldn,n,t) \ + ((v)=cast(t *, luaM_reallocv(L, v, oldn, n, sizeof(t)))) + +LUAI_FUNC l_noret luaM_toobig (lua_State *L); + +/* not to be called directly */ +LUAI_FUNC void *luaM_realloc_ (lua_State *L, void *block, size_t oldsize, + size_t size); +LUAI_FUNC void *luaM_growaux_ (lua_State *L, void *block, int *size, + size_t size_elem, int limit, + const char *what); + +#endif + diff --git a/lua-5.2.4/src/loadlib.c b/lua-5.2.4/src/loadlib.c new file mode 100644 index 000000000..bedbea3e9 --- /dev/null +++ b/lua-5.2.4/src/loadlib.c @@ -0,0 +1,725 @@ +/* +** $Id: loadlib.c,v 1.111.1.1 2013/04/12 18:48:47 roberto Exp $ +** Dynamic library loader for Lua +** See Copyright Notice in lua.h +** +** This module contains an implementation of loadlib for Unix systems +** that have dlfcn, an implementation for Windows, and a stub for other +** systems. +*/ + + +/* +** if needed, includes windows header before everything else +*/ +#if defined(_WIN32) +#include +#endif + + +#include +#include + + +#define loadlib_c +#define LUA_LIB + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +/* +** LUA_PATH and LUA_CPATH are the names of the environment +** variables that Lua check to set its paths. +*/ +#if !defined(LUA_PATH) +#define LUA_PATH "LUA_PATH" +#endif + +#if !defined(LUA_CPATH) +#define LUA_CPATH "LUA_CPATH" +#endif + +#define LUA_PATHSUFFIX "_" LUA_VERSION_MAJOR "_" LUA_VERSION_MINOR + +#define LUA_PATHVERSION LUA_PATH LUA_PATHSUFFIX +#define LUA_CPATHVERSION LUA_CPATH LUA_PATHSUFFIX + +/* +** LUA_PATH_SEP is the character that separates templates in a path. +** LUA_PATH_MARK is the string that marks the substitution points in a +** template. +** LUA_EXEC_DIR in a Windows path is replaced by the executable's +** directory. +** LUA_IGMARK is a mark to ignore all before it when building the +** luaopen_ function name. +*/ +#if !defined (LUA_PATH_SEP) +#define LUA_PATH_SEP ";" +#endif +#if !defined (LUA_PATH_MARK) +#define LUA_PATH_MARK "?" +#endif +#if !defined (LUA_EXEC_DIR) +#define LUA_EXEC_DIR "!" +#endif +#if !defined (LUA_IGMARK) +#define LUA_IGMARK "-" +#endif + + +/* +** LUA_CSUBSEP is the character that replaces dots in submodule names +** when searching for a C loader. +** LUA_LSUBSEP is the character that replaces dots in submodule names +** when searching for a Lua loader. +*/ +#if !defined(LUA_CSUBSEP) +#define LUA_CSUBSEP LUA_DIRSEP +#endif + +#if !defined(LUA_LSUBSEP) +#define LUA_LSUBSEP LUA_DIRSEP +#endif + + +/* prefix for open functions in C libraries */ +#define LUA_POF "luaopen_" + +/* separator for open functions in C libraries */ +#define LUA_OFSEP "_" + + +/* table (in the registry) that keeps handles for all loaded C libraries */ +#define CLIBS "_CLIBS" + +#define LIB_FAIL "open" + + +/* error codes for ll_loadfunc */ +#define ERRLIB 1 +#define ERRFUNC 2 + +#define setprogdir(L) ((void)0) + + +/* +** system-dependent functions +*/ +static void ll_unloadlib (void *lib); +static void *ll_load (lua_State *L, const char *path, int seeglb); +static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym); + + + +#if defined(LUA_USE_DLOPEN) +/* +** {======================================================================== +** This is an implementation of loadlib based on the dlfcn interface. +** The dlfcn interface is available in Linux, SunOS, Solaris, IRIX, FreeBSD, +** NetBSD, AIX 4.2, HPUX 11, and probably most other Unix flavors, at least +** as an emulation layer on top of native functions. +** ========================================================================= +*/ + +#include + +static void ll_unloadlib (void *lib) { + dlclose(lib); +} + + +static void *ll_load (lua_State *L, const char *path, int seeglb) { + void *lib = dlopen(path, RTLD_NOW | (seeglb ? RTLD_GLOBAL : RTLD_LOCAL)); + if (lib == NULL) lua_pushstring(L, dlerror()); + return lib; +} + + +static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym) { + lua_CFunction f = (lua_CFunction)dlsym(lib, sym); + if (f == NULL) lua_pushstring(L, dlerror()); + return f; +} + +/* }====================================================== */ + + + +#elif defined(LUA_DL_DLL) +/* +** {====================================================================== +** This is an implementation of loadlib for Windows using native functions. +** ======================================================================= +*/ + +#undef setprogdir + +/* +** optional flags for LoadLibraryEx +*/ +#if !defined(LUA_LLE_FLAGS) +#define LUA_LLE_FLAGS 0 +#endif + + +static void setprogdir (lua_State *L) { + char buff[MAX_PATH + 1]; + char *lb; + DWORD nsize = sizeof(buff)/sizeof(char); + DWORD n = GetModuleFileNameA(NULL, buff, nsize); + if (n == 0 || n == nsize || (lb = strrchr(buff, '\\')) == NULL) + luaL_error(L, "unable to get ModuleFileName"); + else { + *lb = '\0'; + luaL_gsub(L, lua_tostring(L, -1), LUA_EXEC_DIR, buff); + lua_remove(L, -2); /* remove original string */ + } +} + + +static void pusherror (lua_State *L) { + int error = GetLastError(); + char buffer[128]; + if (FormatMessageA(FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM, + NULL, error, 0, buffer, sizeof(buffer)/sizeof(char), NULL)) + lua_pushstring(L, buffer); + else + lua_pushfstring(L, "system error %d\n", error); +} + +static void ll_unloadlib (void *lib) { + FreeLibrary((HMODULE)lib); +} + + +static void *ll_load (lua_State *L, const char *path, int seeglb) { + HMODULE lib = LoadLibraryExA(path, NULL, LUA_LLE_FLAGS); + (void)(seeglb); /* not used: symbols are 'global' by default */ + if (lib == NULL) pusherror(L); + return lib; +} + + +static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym) { + lua_CFunction f = (lua_CFunction)GetProcAddress((HMODULE)lib, sym); + if (f == NULL) pusherror(L); + return f; +} + +/* }====================================================== */ + + +#else +/* +** {====================================================== +** Fallback for other systems +** ======================================================= +*/ + +#undef LIB_FAIL +#define LIB_FAIL "absent" + + +#define DLMSG "dynamic libraries not enabled; check your Lua installation" + + +static void ll_unloadlib (void *lib) { + (void)(lib); /* not used */ +} + + +static void *ll_load (lua_State *L, const char *path, int seeglb) { + (void)(path); (void)(seeglb); /* not used */ + lua_pushliteral(L, DLMSG); + return NULL; +} + + +static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym) { + (void)(lib); (void)(sym); /* not used */ + lua_pushliteral(L, DLMSG); + return NULL; +} + +/* }====================================================== */ +#endif + + +static void *ll_checkclib (lua_State *L, const char *path) { + void *plib; + lua_getfield(L, LUA_REGISTRYINDEX, CLIBS); + lua_getfield(L, -1, path); + plib = lua_touserdata(L, -1); /* plib = CLIBS[path] */ + lua_pop(L, 2); /* pop CLIBS table and 'plib' */ + return plib; +} + + +static void ll_addtoclib (lua_State *L, const char *path, void *plib) { + lua_getfield(L, LUA_REGISTRYINDEX, CLIBS); + lua_pushlightuserdata(L, plib); + lua_pushvalue(L, -1); + lua_setfield(L, -3, path); /* CLIBS[path] = plib */ + lua_rawseti(L, -2, luaL_len(L, -2) + 1); /* CLIBS[#CLIBS + 1] = plib */ + lua_pop(L, 1); /* pop CLIBS table */ +} + + +/* +** __gc tag method for CLIBS table: calls 'll_unloadlib' for all lib +** handles in list CLIBS +*/ +static int gctm (lua_State *L) { + int n = luaL_len(L, 1); + for (; n >= 1; n--) { /* for each handle, in reverse order */ + lua_rawgeti(L, 1, n); /* get handle CLIBS[n] */ + ll_unloadlib(lua_touserdata(L, -1)); + lua_pop(L, 1); /* pop handle */ + } + return 0; +} + + +static int ll_loadfunc (lua_State *L, const char *path, const char *sym) { + void *reg = ll_checkclib(L, path); /* check loaded C libraries */ + if (reg == NULL) { /* must load library? */ + reg = ll_load(L, path, *sym == '*'); + if (reg == NULL) return ERRLIB; /* unable to load library */ + ll_addtoclib(L, path, reg); + } + if (*sym == '*') { /* loading only library (no function)? */ + lua_pushboolean(L, 1); /* return 'true' */ + return 0; /* no errors */ + } + else { + lua_CFunction f = ll_sym(L, reg, sym); + if (f == NULL) + return ERRFUNC; /* unable to find function */ + lua_pushcfunction(L, f); /* else create new function */ + return 0; /* no errors */ + } +} + + +static int ll_loadlib (lua_State *L) { + const char *path = luaL_checkstring(L, 1); + const char *init = luaL_checkstring(L, 2); + int stat = ll_loadfunc(L, path, init); + if (stat == 0) /* no errors? */ + return 1; /* return the loaded function */ + else { /* error; error message is on stack top */ + lua_pushnil(L); + lua_insert(L, -2); + lua_pushstring(L, (stat == ERRLIB) ? LIB_FAIL : "init"); + return 3; /* return nil, error message, and where */ + } +} + + + +/* +** {====================================================== +** 'require' function +** ======================================================= +*/ + + +static int readable (const char *filename) { + FILE *f = fopen(filename, "r"); /* try to open file */ + if (f == NULL) return 0; /* open failed */ + fclose(f); + return 1; +} + + +static const char *pushnexttemplate (lua_State *L, const char *path) { + const char *l; + while (*path == *LUA_PATH_SEP) path++; /* skip separators */ + if (*path == '\0') return NULL; /* no more templates */ + l = strchr(path, *LUA_PATH_SEP); /* find next separator */ + if (l == NULL) l = path + strlen(path); + lua_pushlstring(L, path, l - path); /* template */ + return l; +} + + +static const char *searchpath (lua_State *L, const char *name, + const char *path, + const char *sep, + const char *dirsep) { + luaL_Buffer msg; /* to build error message */ + luaL_buffinit(L, &msg); + if (*sep != '\0') /* non-empty separator? */ + name = luaL_gsub(L, name, sep, dirsep); /* replace it by 'dirsep' */ + while ((path = pushnexttemplate(L, path)) != NULL) { + const char *filename = luaL_gsub(L, lua_tostring(L, -1), + LUA_PATH_MARK, name); + lua_remove(L, -2); /* remove path template */ + if (readable(filename)) /* does file exist and is readable? */ + return filename; /* return that file name */ + lua_pushfstring(L, "\n\tno file " LUA_QS, filename); + lua_remove(L, -2); /* remove file name */ + luaL_addvalue(&msg); /* concatenate error msg. entry */ + } + luaL_pushresult(&msg); /* create error message */ + return NULL; /* not found */ +} + + +static int ll_searchpath (lua_State *L) { + const char *f = searchpath(L, luaL_checkstring(L, 1), + luaL_checkstring(L, 2), + luaL_optstring(L, 3, "."), + luaL_optstring(L, 4, LUA_DIRSEP)); + if (f != NULL) return 1; + else { /* error message is on top of the stack */ + lua_pushnil(L); + lua_insert(L, -2); + return 2; /* return nil + error message */ + } +} + + +static const char *findfile (lua_State *L, const char *name, + const char *pname, + const char *dirsep) { + const char *path; + lua_getfield(L, lua_upvalueindex(1), pname); + path = lua_tostring(L, -1); + if (path == NULL) + luaL_error(L, LUA_QL("package.%s") " must be a string", pname); + return searchpath(L, name, path, ".", dirsep); +} + + +static int checkload (lua_State *L, int stat, const char *filename) { + if (stat) { /* module loaded successfully? */ + lua_pushstring(L, filename); /* will be 2nd argument to module */ + return 2; /* return open function and file name */ + } + else + return luaL_error(L, "error loading module " LUA_QS + " from file " LUA_QS ":\n\t%s", + lua_tostring(L, 1), filename, lua_tostring(L, -1)); +} + + +static int searcher_Lua (lua_State *L) { + const char *filename; + const char *name = luaL_checkstring(L, 1); + filename = findfile(L, name, "path", LUA_LSUBSEP); + if (filename == NULL) return 1; /* module not found in this path */ + return checkload(L, (luaL_loadfile(L, filename) == LUA_OK), filename); +} + + +static int loadfunc (lua_State *L, const char *filename, const char *modname) { + const char *funcname; + const char *mark; + modname = luaL_gsub(L, modname, ".", LUA_OFSEP); + mark = strchr(modname, *LUA_IGMARK); + if (mark) { + int stat; + funcname = lua_pushlstring(L, modname, mark - modname); + funcname = lua_pushfstring(L, LUA_POF"%s", funcname); + stat = ll_loadfunc(L, filename, funcname); + if (stat != ERRFUNC) return stat; + modname = mark + 1; /* else go ahead and try old-style name */ + } + funcname = lua_pushfstring(L, LUA_POF"%s", modname); + return ll_loadfunc(L, filename, funcname); +} + + +static int searcher_C (lua_State *L) { + const char *name = luaL_checkstring(L, 1); + const char *filename = findfile(L, name, "cpath", LUA_CSUBSEP); + if (filename == NULL) return 1; /* module not found in this path */ + return checkload(L, (loadfunc(L, filename, name) == 0), filename); +} + + +static int searcher_Croot (lua_State *L) { + const char *filename; + const char *name = luaL_checkstring(L, 1); + const char *p = strchr(name, '.'); + int stat; + if (p == NULL) return 0; /* is root */ + lua_pushlstring(L, name, p - name); + filename = findfile(L, lua_tostring(L, -1), "cpath", LUA_CSUBSEP); + if (filename == NULL) return 1; /* root not found */ + if ((stat = loadfunc(L, filename, name)) != 0) { + if (stat != ERRFUNC) + return checkload(L, 0, filename); /* real error */ + else { /* open function not found */ + lua_pushfstring(L, "\n\tno module " LUA_QS " in file " LUA_QS, + name, filename); + return 1; + } + } + lua_pushstring(L, filename); /* will be 2nd argument to module */ + return 2; +} + + +static int searcher_preload (lua_State *L) { + const char *name = luaL_checkstring(L, 1); + lua_getfield(L, LUA_REGISTRYINDEX, "_PRELOAD"); + lua_getfield(L, -1, name); + if (lua_isnil(L, -1)) /* not found? */ + lua_pushfstring(L, "\n\tno field package.preload['%s']", name); + return 1; +} + + +static void findloader (lua_State *L, const char *name) { + int i; + luaL_Buffer msg; /* to build error message */ + luaL_buffinit(L, &msg); + lua_getfield(L, lua_upvalueindex(1), "searchers"); /* will be at index 3 */ + if (!lua_istable(L, 3)) + luaL_error(L, LUA_QL("package.searchers") " must be a table"); + /* iterate over available searchers to find a loader */ + for (i = 1; ; i++) { + lua_rawgeti(L, 3, i); /* get a searcher */ + if (lua_isnil(L, -1)) { /* no more searchers? */ + lua_pop(L, 1); /* remove nil */ + luaL_pushresult(&msg); /* create error message */ + luaL_error(L, "module " LUA_QS " not found:%s", + name, lua_tostring(L, -1)); + } + lua_pushstring(L, name); + lua_call(L, 1, 2); /* call it */ + if (lua_isfunction(L, -2)) /* did it find a loader? */ + return; /* module loader found */ + else if (lua_isstring(L, -2)) { /* searcher returned error message? */ + lua_pop(L, 1); /* remove extra return */ + luaL_addvalue(&msg); /* concatenate error message */ + } + else + lua_pop(L, 2); /* remove both returns */ + } +} + + +static int ll_require (lua_State *L) { + const char *name = luaL_checkstring(L, 1); + lua_settop(L, 1); /* _LOADED table will be at index 2 */ + lua_getfield(L, LUA_REGISTRYINDEX, "_LOADED"); + lua_getfield(L, 2, name); /* _LOADED[name] */ + if (lua_toboolean(L, -1)) /* is it there? */ + return 1; /* package is already loaded */ + /* else must load package */ + lua_pop(L, 1); /* remove 'getfield' result */ + findloader(L, name); + lua_pushstring(L, name); /* pass name as argument to module loader */ + lua_insert(L, -2); /* name is 1st argument (before search data) */ + lua_call(L, 2, 1); /* run loader to load module */ + if (!lua_isnil(L, -1)) /* non-nil return? */ + lua_setfield(L, 2, name); /* _LOADED[name] = returned value */ + lua_getfield(L, 2, name); + if (lua_isnil(L, -1)) { /* module did not set a value? */ + lua_pushboolean(L, 1); /* use true as result */ + lua_pushvalue(L, -1); /* extra copy to be returned */ + lua_setfield(L, 2, name); /* _LOADED[name] = true */ + } + return 1; +} + +/* }====================================================== */ + + + +/* +** {====================================================== +** 'module' function +** ======================================================= +*/ +#if defined(LUA_COMPAT_MODULE) + +/* +** changes the environment variable of calling function +*/ +static void set_env (lua_State *L) { + lua_Debug ar; + if (lua_getstack(L, 1, &ar) == 0 || + lua_getinfo(L, "f", &ar) == 0 || /* get calling function */ + lua_iscfunction(L, -1)) + luaL_error(L, LUA_QL("module") " not called from a Lua function"); + lua_pushvalue(L, -2); /* copy new environment table to top */ + lua_setupvalue(L, -2, 1); + lua_pop(L, 1); /* remove function */ +} + + +static void dooptions (lua_State *L, int n) { + int i; + for (i = 2; i <= n; i++) { + if (lua_isfunction(L, i)) { /* avoid 'calling' extra info. */ + lua_pushvalue(L, i); /* get option (a function) */ + lua_pushvalue(L, -2); /* module */ + lua_call(L, 1, 0); + } + } +} + + +static void modinit (lua_State *L, const char *modname) { + const char *dot; + lua_pushvalue(L, -1); + lua_setfield(L, -2, "_M"); /* module._M = module */ + lua_pushstring(L, modname); + lua_setfield(L, -2, "_NAME"); + dot = strrchr(modname, '.'); /* look for last dot in module name */ + if (dot == NULL) dot = modname; + else dot++; + /* set _PACKAGE as package name (full module name minus last part) */ + lua_pushlstring(L, modname, dot - modname); + lua_setfield(L, -2, "_PACKAGE"); +} + + +static int ll_module (lua_State *L) { + const char *modname = luaL_checkstring(L, 1); + int lastarg = lua_gettop(L); /* last parameter */ + luaL_pushmodule(L, modname, 1); /* get/create module table */ + /* check whether table already has a _NAME field */ + lua_getfield(L, -1, "_NAME"); + if (!lua_isnil(L, -1)) /* is table an initialized module? */ + lua_pop(L, 1); + else { /* no; initialize it */ + lua_pop(L, 1); + modinit(L, modname); + } + lua_pushvalue(L, -1); + set_env(L); + dooptions(L, lastarg); + return 1; +} + + +static int ll_seeall (lua_State *L) { + luaL_checktype(L, 1, LUA_TTABLE); + if (!lua_getmetatable(L, 1)) { + lua_createtable(L, 0, 1); /* create new metatable */ + lua_pushvalue(L, -1); + lua_setmetatable(L, 1); + } + lua_pushglobaltable(L); + lua_setfield(L, -2, "__index"); /* mt.__index = _G */ + return 0; +} + +#endif +/* }====================================================== */ + + + +/* auxiliary mark (for internal use) */ +#define AUXMARK "\1" + + +/* +** return registry.LUA_NOENV as a boolean +*/ +static int noenv (lua_State *L) { + int b; + lua_getfield(L, LUA_REGISTRYINDEX, "LUA_NOENV"); + b = lua_toboolean(L, -1); + lua_pop(L, 1); /* remove value */ + return b; +} + + +static void setpath (lua_State *L, const char *fieldname, const char *envname1, + const char *envname2, const char *def) { + const char *path = getenv(envname1); + if (path == NULL) /* no environment variable? */ + path = getenv(envname2); /* try alternative name */ + if (path == NULL || noenv(L)) /* no environment variable? */ + lua_pushstring(L, def); /* use default */ + else { + /* replace ";;" by ";AUXMARK;" and then AUXMARK by default path */ + path = luaL_gsub(L, path, LUA_PATH_SEP LUA_PATH_SEP, + LUA_PATH_SEP AUXMARK LUA_PATH_SEP); + luaL_gsub(L, path, AUXMARK, def); + lua_remove(L, -2); + } + setprogdir(L); + lua_setfield(L, -2, fieldname); +} + + +static const luaL_Reg pk_funcs[] = { + {"loadlib", ll_loadlib}, + {"searchpath", ll_searchpath}, +#if defined(LUA_COMPAT_MODULE) + {"seeall", ll_seeall}, +#endif + {NULL, NULL} +}; + + +static const luaL_Reg ll_funcs[] = { +#if defined(LUA_COMPAT_MODULE) + {"module", ll_module}, +#endif + {"require", ll_require}, + {NULL, NULL} +}; + + +static void createsearcherstable (lua_State *L) { + static const lua_CFunction searchers[] = + {searcher_preload, searcher_Lua, searcher_C, searcher_Croot, NULL}; + int i; + /* create 'searchers' table */ + lua_createtable(L, sizeof(searchers)/sizeof(searchers[0]) - 1, 0); + /* fill it with pre-defined searchers */ + for (i=0; searchers[i] != NULL; i++) { + lua_pushvalue(L, -2); /* set 'package' as upvalue for all searchers */ + lua_pushcclosure(L, searchers[i], 1); + lua_rawseti(L, -2, i+1); + } +} + + +LUAMOD_API int luaopen_package (lua_State *L) { + /* create table CLIBS to keep track of loaded C libraries */ + luaL_getsubtable(L, LUA_REGISTRYINDEX, CLIBS); + lua_createtable(L, 0, 1); /* metatable for CLIBS */ + lua_pushcfunction(L, gctm); + lua_setfield(L, -2, "__gc"); /* set finalizer for CLIBS table */ + lua_setmetatable(L, -2); + /* create `package' table */ + luaL_newlib(L, pk_funcs); + createsearcherstable(L); +#if defined(LUA_COMPAT_LOADERS) + lua_pushvalue(L, -1); /* make a copy of 'searchers' table */ + lua_setfield(L, -3, "loaders"); /* put it in field `loaders' */ +#endif + lua_setfield(L, -2, "searchers"); /* put it in field 'searchers' */ + /* set field 'path' */ + setpath(L, "path", LUA_PATHVERSION, LUA_PATH, LUA_PATH_DEFAULT); + /* set field 'cpath' */ + setpath(L, "cpath", LUA_CPATHVERSION, LUA_CPATH, LUA_CPATH_DEFAULT); + /* store config information */ + lua_pushliteral(L, LUA_DIRSEP "\n" LUA_PATH_SEP "\n" LUA_PATH_MARK "\n" + LUA_EXEC_DIR "\n" LUA_IGMARK "\n"); + lua_setfield(L, -2, "config"); + /* set field `loaded' */ + luaL_getsubtable(L, LUA_REGISTRYINDEX, "_LOADED"); + lua_setfield(L, -2, "loaded"); + /* set field `preload' */ + luaL_getsubtable(L, LUA_REGISTRYINDEX, "_PRELOAD"); + lua_setfield(L, -2, "preload"); + lua_pushglobaltable(L); + lua_pushvalue(L, -2); /* set 'package' as upvalue for next lib */ + luaL_setfuncs(L, ll_funcs, 1); /* open lib into global table */ + lua_pop(L, 1); /* pop global table */ + return 1; /* return 'package' table */ +} + diff --git a/lua-5.2.4/src/lobject.c b/lua-5.2.4/src/lobject.c new file mode 100644 index 000000000..882d994d4 --- /dev/null +++ b/lua-5.2.4/src/lobject.c @@ -0,0 +1,287 @@ +/* +** $Id: lobject.c,v 2.58.1.1 2013/04/12 18:48:47 roberto Exp $ +** Some generic functions over Lua objects +** See Copyright Notice in lua.h +*/ + +#include +#include +#include +#include + +#define lobject_c +#define LUA_CORE + +#include "lua.h" + +#include "lctype.h" +#include "ldebug.h" +#include "ldo.h" +#include "lmem.h" +#include "lobject.h" +#include "lstate.h" +#include "lstring.h" +#include "lvm.h" + + + +LUAI_DDEF const TValue luaO_nilobject_ = {NILCONSTANT}; + + +/* +** converts an integer to a "floating point byte", represented as +** (eeeeexxx), where the real value is (1xxx) * 2^(eeeee - 1) if +** eeeee != 0 and (xxx) otherwise. +*/ +int luaO_int2fb (unsigned int x) { + int e = 0; /* exponent */ + if (x < 8) return x; + while (x >= 0x10) { + x = (x+1) >> 1; + e++; + } + return ((e+1) << 3) | (cast_int(x) - 8); +} + + +/* converts back */ +int luaO_fb2int (int x) { + int e = (x >> 3) & 0x1f; + if (e == 0) return x; + else return ((x & 7) + 8) << (e - 1); +} + + +int luaO_ceillog2 (unsigned int x) { + static const lu_byte log_2[256] = { + 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 + }; + int l = 0; + x--; + while (x >= 256) { l += 8; x >>= 8; } + return l + log_2[x]; +} + + +lua_Number luaO_arith (int op, lua_Number v1, lua_Number v2) { + switch (op) { + case LUA_OPADD: return luai_numadd(NULL, v1, v2); + case LUA_OPSUB: return luai_numsub(NULL, v1, v2); + case LUA_OPMUL: return luai_nummul(NULL, v1, v2); + case LUA_OPDIV: return luai_numdiv(NULL, v1, v2); + case LUA_OPMOD: return luai_nummod(NULL, v1, v2); + case LUA_OPPOW: return luai_numpow(NULL, v1, v2); + case LUA_OPUNM: return luai_numunm(NULL, v1); + default: lua_assert(0); return 0; + } +} + + +int luaO_hexavalue (int c) { + if (lisdigit(c)) return c - '0'; + else return ltolower(c) - 'a' + 10; +} + + +#if !defined(lua_strx2number) + +#include + + +static int isneg (const char **s) { + if (**s == '-') { (*s)++; return 1; } + else if (**s == '+') (*s)++; + return 0; +} + + +static lua_Number readhexa (const char **s, lua_Number r, int *count) { + for (; lisxdigit(cast_uchar(**s)); (*s)++) { /* read integer part */ + r = (r * cast_num(16.0)) + cast_num(luaO_hexavalue(cast_uchar(**s))); + (*count)++; + } + return r; +} + + +/* +** convert an hexadecimal numeric string to a number, following +** C99 specification for 'strtod' +*/ +static lua_Number lua_strx2number (const char *s, char **endptr) { + lua_Number r = 0.0; + int e = 0, i = 0; + int neg = 0; /* 1 if number is negative */ + *endptr = cast(char *, s); /* nothing is valid yet */ + while (lisspace(cast_uchar(*s))) s++; /* skip initial spaces */ + neg = isneg(&s); /* check signal */ + if (!(*s == '0' && (*(s + 1) == 'x' || *(s + 1) == 'X'))) /* check '0x' */ + return 0.0; /* invalid format (no '0x') */ + s += 2; /* skip '0x' */ + r = readhexa(&s, r, &i); /* read integer part */ + if (*s == '.') { + s++; /* skip dot */ + r = readhexa(&s, r, &e); /* read fractional part */ + } + if (i == 0 && e == 0) + return 0.0; /* invalid format (no digit) */ + e *= -4; /* each fractional digit divides value by 2^-4 */ + *endptr = cast(char *, s); /* valid up to here */ + if (*s == 'p' || *s == 'P') { /* exponent part? */ + int exp1 = 0; + int neg1; + s++; /* skip 'p' */ + neg1 = isneg(&s); /* signal */ + if (!lisdigit(cast_uchar(*s))) + goto ret; /* must have at least one digit */ + while (lisdigit(cast_uchar(*s))) /* read exponent */ + exp1 = exp1 * 10 + *(s++) - '0'; + if (neg1) exp1 = -exp1; + e += exp1; + } + *endptr = cast(char *, s); /* valid up to here */ + ret: + if (neg) r = -r; + return l_mathop(ldexp)(r, e); +} + +#endif + + +int luaO_str2d (const char *s, size_t len, lua_Number *result) { + char *endptr; + if (strpbrk(s, "nN")) /* reject 'inf' and 'nan' */ + return 0; + else if (strpbrk(s, "xX")) /* hexa? */ + *result = lua_strx2number(s, &endptr); + else + *result = lua_str2number(s, &endptr); + if (endptr == s) return 0; /* nothing recognized */ + while (lisspace(cast_uchar(*endptr))) endptr++; + return (endptr == s + len); /* OK if no trailing characters */ +} + + + +static void pushstr (lua_State *L, const char *str, size_t l) { + setsvalue2s(L, L->top++, luaS_newlstr(L, str, l)); +} + + +/* this function handles only `%d', `%c', %f, %p, and `%s' formats */ +const char *luaO_pushvfstring (lua_State *L, const char *fmt, va_list argp) { + int n = 0; + for (;;) { + const char *e = strchr(fmt, '%'); + if (e == NULL) break; + luaD_checkstack(L, 2); /* fmt + item */ + pushstr(L, fmt, e - fmt); + switch (*(e+1)) { + case 's': { + const char *s = va_arg(argp, char *); + if (s == NULL) s = "(null)"; + pushstr(L, s, strlen(s)); + break; + } + case 'c': { + char buff; + buff = cast(char, va_arg(argp, int)); + pushstr(L, &buff, 1); + break; + } + case 'd': { + setnvalue(L->top++, cast_num(va_arg(argp, int))); + break; + } + case 'f': { + setnvalue(L->top++, cast_num(va_arg(argp, l_uacNumber))); + break; + } + case 'p': { + char buff[4*sizeof(void *) + 8]; /* should be enough space for a `%p' */ + int l = sprintf(buff, "%p", va_arg(argp, void *)); + pushstr(L, buff, l); + break; + } + case '%': { + pushstr(L, "%", 1); + break; + } + default: { + luaG_runerror(L, + "invalid option " LUA_QL("%%%c") " to " LUA_QL("lua_pushfstring"), + *(e + 1)); + } + } + n += 2; + fmt = e+2; + } + luaD_checkstack(L, 1); + pushstr(L, fmt, strlen(fmt)); + if (n > 0) luaV_concat(L, n + 1); + return svalue(L->top - 1); +} + + +const char *luaO_pushfstring (lua_State *L, const char *fmt, ...) { + const char *msg; + va_list argp; + va_start(argp, fmt); + msg = luaO_pushvfstring(L, fmt, argp); + va_end(argp); + return msg; +} + + +/* number of chars of a literal string without the ending \0 */ +#define LL(x) (sizeof(x)/sizeof(char) - 1) + +#define RETS "..." +#define PRE "[string \"" +#define POS "\"]" + +#define addstr(a,b,l) ( memcpy(a,b,(l) * sizeof(char)), a += (l) ) + +void luaO_chunkid (char *out, const char *source, size_t bufflen) { + size_t l = strlen(source); + if (*source == '=') { /* 'literal' source */ + if (l <= bufflen) /* small enough? */ + memcpy(out, source + 1, l * sizeof(char)); + else { /* truncate it */ + addstr(out, source + 1, bufflen - 1); + *out = '\0'; + } + } + else if (*source == '@') { /* file name */ + if (l <= bufflen) /* small enough? */ + memcpy(out, source + 1, l * sizeof(char)); + else { /* add '...' before rest of name */ + addstr(out, RETS, LL(RETS)); + bufflen -= LL(RETS); + memcpy(out, source + 1 + l - bufflen, bufflen * sizeof(char)); + } + } + else { /* string; format as [string "source"] */ + const char *nl = strchr(source, '\n'); /* find first new line (if any) */ + addstr(out, PRE, LL(PRE)); /* add prefix */ + bufflen -= LL(PRE RETS POS) + 1; /* save space for prefix+suffix+'\0' */ + if (l < bufflen && nl == NULL) { /* small one-line source? */ + addstr(out, source, l); /* keep it */ + } + else { + if (nl != NULL) l = nl - source; /* stop at first newline */ + if (l > bufflen) l = bufflen; + addstr(out, source, l); + addstr(out, RETS, LL(RETS)); + } + memcpy(out, POS, (LL(POS) + 1) * sizeof(char)); + } +} + diff --git a/lua-5.2.4/src/lobject.h b/lua-5.2.4/src/lobject.h new file mode 100644 index 000000000..bc0bb69f1 --- /dev/null +++ b/lua-5.2.4/src/lobject.h @@ -0,0 +1,607 @@ +/* +** $Id: lobject.h,v 2.71.1.2 2014/05/07 14:14:58 roberto Exp $ +** Type definitions for Lua objects +** See Copyright Notice in lua.h +*/ + + +#ifndef lobject_h +#define lobject_h + + +#include + + +#include "llimits.h" +#include "lua.h" + + +/* +** Extra tags for non-values +*/ +#define LUA_TPROTO LUA_NUMTAGS +#define LUA_TUPVAL (LUA_NUMTAGS+1) +#define LUA_TDEADKEY (LUA_NUMTAGS+2) + +/* +** number of all possible tags (including LUA_TNONE but excluding DEADKEY) +*/ +#define LUA_TOTALTAGS (LUA_TUPVAL+2) + + +/* +** tags for Tagged Values have the following use of bits: +** bits 0-3: actual tag (a LUA_T* value) +** bits 4-5: variant bits +** bit 6: whether value is collectable +*/ + +#define VARBITS (3 << 4) + + +/* +** LUA_TFUNCTION variants: +** 0 - Lua function +** 1 - light C function +** 2 - regular C function (closure) +*/ + +/* Variant tags for functions */ +#define LUA_TLCL (LUA_TFUNCTION | (0 << 4)) /* Lua closure */ +#define LUA_TLCF (LUA_TFUNCTION | (1 << 4)) /* light C function */ +#define LUA_TCCL (LUA_TFUNCTION | (2 << 4)) /* C closure */ + + +/* Variant tags for strings */ +#define LUA_TSHRSTR (LUA_TSTRING | (0 << 4)) /* short strings */ +#define LUA_TLNGSTR (LUA_TSTRING | (1 << 4)) /* long strings */ + + +/* Bit mark for collectable types */ +#define BIT_ISCOLLECTABLE (1 << 6) + +/* mark a tag as collectable */ +#define ctb(t) ((t) | BIT_ISCOLLECTABLE) + + +/* +** Union of all collectable objects +*/ +typedef union GCObject GCObject; + + +/* +** Common Header for all collectable objects (in macro form, to be +** included in other objects) +*/ +#define CommonHeader GCObject *next; lu_byte tt; lu_byte marked + + +/* +** Common header in struct form +*/ +typedef struct GCheader { + CommonHeader; +} GCheader; + + + +/* +** Union of all Lua values +*/ +typedef union Value Value; + + +#define numfield lua_Number n; /* numbers */ + + + +/* +** Tagged Values. This is the basic representation of values in Lua, +** an actual value plus a tag with its type. +*/ + +#define TValuefields Value value_; int tt_ + +typedef struct lua_TValue TValue; + + +/* macro defining a nil value */ +#define NILCONSTANT {NULL}, LUA_TNIL + + +#define val_(o) ((o)->value_) +#define num_(o) (val_(o).n) + + +/* raw type tag of a TValue */ +#define rttype(o) ((o)->tt_) + +/* tag with no variants (bits 0-3) */ +#define novariant(x) ((x) & 0x0F) + +/* type tag of a TValue (bits 0-3 for tags + variant bits 4-5) */ +#define ttype(o) (rttype(o) & 0x3F) + +/* type tag of a TValue with no variants (bits 0-3) */ +#define ttypenv(o) (novariant(rttype(o))) + + +/* Macros to test type */ +#define checktag(o,t) (rttype(o) == (t)) +#define checktype(o,t) (ttypenv(o) == (t)) +#define ttisnumber(o) checktag((o), LUA_TNUMBER) +#define ttisnil(o) checktag((o), LUA_TNIL) +#define ttisboolean(o) checktag((o), LUA_TBOOLEAN) +#define ttislightuserdata(o) checktag((o), LUA_TLIGHTUSERDATA) +#define ttisstring(o) checktype((o), LUA_TSTRING) +#define ttisshrstring(o) checktag((o), ctb(LUA_TSHRSTR)) +#define ttislngstring(o) checktag((o), ctb(LUA_TLNGSTR)) +#define ttistable(o) checktag((o), ctb(LUA_TTABLE)) +#define ttisfunction(o) checktype(o, LUA_TFUNCTION) +#define ttisclosure(o) ((rttype(o) & 0x1F) == LUA_TFUNCTION) +#define ttisCclosure(o) checktag((o), ctb(LUA_TCCL)) +#define ttisLclosure(o) checktag((o), ctb(LUA_TLCL)) +#define ttislcf(o) checktag((o), LUA_TLCF) +#define ttisuserdata(o) checktag((o), ctb(LUA_TUSERDATA)) +#define ttisthread(o) checktag((o), ctb(LUA_TTHREAD)) +#define ttisdeadkey(o) checktag((o), LUA_TDEADKEY) + +#define ttisequal(o1,o2) (rttype(o1) == rttype(o2)) + +/* Macros to access values */ +#define nvalue(o) check_exp(ttisnumber(o), num_(o)) +#define gcvalue(o) check_exp(iscollectable(o), val_(o).gc) +#define pvalue(o) check_exp(ttislightuserdata(o), val_(o).p) +#define rawtsvalue(o) check_exp(ttisstring(o), &val_(o).gc->ts) +#define tsvalue(o) (&rawtsvalue(o)->tsv) +#define rawuvalue(o) check_exp(ttisuserdata(o), &val_(o).gc->u) +#define uvalue(o) (&rawuvalue(o)->uv) +#define clvalue(o) check_exp(ttisclosure(o), &val_(o).gc->cl) +#define clLvalue(o) check_exp(ttisLclosure(o), &val_(o).gc->cl.l) +#define clCvalue(o) check_exp(ttisCclosure(o), &val_(o).gc->cl.c) +#define fvalue(o) check_exp(ttislcf(o), val_(o).f) +#define hvalue(o) check_exp(ttistable(o), &val_(o).gc->h) +#define bvalue(o) check_exp(ttisboolean(o), val_(o).b) +#define thvalue(o) check_exp(ttisthread(o), &val_(o).gc->th) +/* a dead value may get the 'gc' field, but cannot access its contents */ +#define deadvalue(o) check_exp(ttisdeadkey(o), cast(void *, val_(o).gc)) + +#define l_isfalse(o) (ttisnil(o) || (ttisboolean(o) && bvalue(o) == 0)) + + +#define iscollectable(o) (rttype(o) & BIT_ISCOLLECTABLE) + + +/* Macros for internal tests */ +#define righttt(obj) (ttype(obj) == gcvalue(obj)->gch.tt) + +#define checkliveness(g,obj) \ + lua_longassert(!iscollectable(obj) || \ + (righttt(obj) && !isdead(g,gcvalue(obj)))) + + +/* Macros to set values */ +#define settt_(o,t) ((o)->tt_=(t)) + +#define setnvalue(obj,x) \ + { TValue *io=(obj); num_(io)=(x); settt_(io, LUA_TNUMBER); } + +#define setnilvalue(obj) settt_(obj, LUA_TNIL) + +#define setfvalue(obj,x) \ + { TValue *io=(obj); val_(io).f=(x); settt_(io, LUA_TLCF); } + +#define setpvalue(obj,x) \ + { TValue *io=(obj); val_(io).p=(x); settt_(io, LUA_TLIGHTUSERDATA); } + +#define setbvalue(obj,x) \ + { TValue *io=(obj); val_(io).b=(x); settt_(io, LUA_TBOOLEAN); } + +#define setgcovalue(L,obj,x) \ + { TValue *io=(obj); GCObject *i_g=(x); \ + val_(io).gc=i_g; settt_(io, ctb(gch(i_g)->tt)); } + +#define setsvalue(L,obj,x) \ + { TValue *io=(obj); \ + TString *x_ = (x); \ + val_(io).gc=cast(GCObject *, x_); settt_(io, ctb(x_->tsv.tt)); \ + checkliveness(G(L),io); } + +#define setuvalue(L,obj,x) \ + { TValue *io=(obj); \ + val_(io).gc=cast(GCObject *, (x)); settt_(io, ctb(LUA_TUSERDATA)); \ + checkliveness(G(L),io); } + +#define setthvalue(L,obj,x) \ + { TValue *io=(obj); \ + val_(io).gc=cast(GCObject *, (x)); settt_(io, ctb(LUA_TTHREAD)); \ + checkliveness(G(L),io); } + +#define setclLvalue(L,obj,x) \ + { TValue *io=(obj); \ + val_(io).gc=cast(GCObject *, (x)); settt_(io, ctb(LUA_TLCL)); \ + checkliveness(G(L),io); } + +#define setclCvalue(L,obj,x) \ + { TValue *io=(obj); \ + val_(io).gc=cast(GCObject *, (x)); settt_(io, ctb(LUA_TCCL)); \ + checkliveness(G(L),io); } + +#define sethvalue(L,obj,x) \ + { TValue *io=(obj); \ + val_(io).gc=cast(GCObject *, (x)); settt_(io, ctb(LUA_TTABLE)); \ + checkliveness(G(L),io); } + +#define setdeadvalue(obj) settt_(obj, LUA_TDEADKEY) + + + +#define setobj(L,obj1,obj2) \ + { const TValue *io2=(obj2); TValue *io1=(obj1); \ + io1->value_ = io2->value_; io1->tt_ = io2->tt_; \ + checkliveness(G(L),io1); } + + +/* +** different types of assignments, according to destination +*/ + +/* from stack to (same) stack */ +#define setobjs2s setobj +/* to stack (not from same stack) */ +#define setobj2s setobj +#define setsvalue2s setsvalue +#define sethvalue2s sethvalue +#define setptvalue2s setptvalue +/* from table to same table */ +#define setobjt2t setobj +/* to table */ +#define setobj2t setobj +/* to new object */ +#define setobj2n setobj +#define setsvalue2n setsvalue + + +/* check whether a number is valid (useful only for NaN trick) */ +#define luai_checknum(L,o,c) { /* empty */ } + + +/* +** {====================================================== +** NaN Trick +** ======================================================= +*/ +#if defined(LUA_NANTRICK) + +/* +** numbers are represented in the 'd_' field. All other values have the +** value (NNMARK | tag) in 'tt__'. A number with such pattern would be +** a "signaled NaN", which is never generated by regular operations by +** the CPU (nor by 'strtod') +*/ + +/* allows for external implementation for part of the trick */ +#if !defined(NNMARK) /* { */ + + +#if !defined(LUA_IEEEENDIAN) +#error option 'LUA_NANTRICK' needs 'LUA_IEEEENDIAN' +#endif + + +#define NNMARK 0x7FF7A500 +#define NNMASK 0x7FFFFF00 + +#undef TValuefields +#undef NILCONSTANT + +#if (LUA_IEEEENDIAN == 0) /* { */ + +/* little endian */ +#define TValuefields \ + union { struct { Value v__; int tt__; } i; double d__; } u +#define NILCONSTANT {{{NULL}, tag2tt(LUA_TNIL)}} +/* field-access macros */ +#define v_(o) ((o)->u.i.v__) +#define d_(o) ((o)->u.d__) +#define tt_(o) ((o)->u.i.tt__) + +#else /* }{ */ + +/* big endian */ +#define TValuefields \ + union { struct { int tt__; Value v__; } i; double d__; } u +#define NILCONSTANT {{tag2tt(LUA_TNIL), {NULL}}} +/* field-access macros */ +#define v_(o) ((o)->u.i.v__) +#define d_(o) ((o)->u.d__) +#define tt_(o) ((o)->u.i.tt__) + +#endif /* } */ + +#endif /* } */ + + +/* correspondence with standard representation */ +#undef val_ +#define val_(o) v_(o) +#undef num_ +#define num_(o) d_(o) + + +#undef numfield +#define numfield /* no such field; numbers are the entire struct */ + +/* basic check to distinguish numbers from non-numbers */ +#undef ttisnumber +#define ttisnumber(o) ((tt_(o) & NNMASK) != NNMARK) + +#define tag2tt(t) (NNMARK | (t)) + +#undef rttype +#define rttype(o) (ttisnumber(o) ? LUA_TNUMBER : tt_(o) & 0xff) + +#undef settt_ +#define settt_(o,t) (tt_(o) = tag2tt(t)) + +#undef setnvalue +#define setnvalue(obj,x) \ + { TValue *io_=(obj); num_(io_)=(x); lua_assert(ttisnumber(io_)); } + +#undef setobj +#define setobj(L,obj1,obj2) \ + { const TValue *o2_=(obj2); TValue *o1_=(obj1); \ + o1_->u = o2_->u; \ + checkliveness(G(L),o1_); } + + +/* +** these redefinitions are not mandatory, but these forms are more efficient +*/ + +#undef checktag +#undef checktype +#define checktag(o,t) (tt_(o) == tag2tt(t)) +#define checktype(o,t) (ctb(tt_(o) | VARBITS) == ctb(tag2tt(t) | VARBITS)) + +#undef ttisequal +#define ttisequal(o1,o2) \ + (ttisnumber(o1) ? ttisnumber(o2) : (tt_(o1) == tt_(o2))) + + +#undef luai_checknum +#define luai_checknum(L,o,c) { if (!ttisnumber(o)) c; } + +#endif +/* }====================================================== */ + + + +/* +** {====================================================== +** types and prototypes +** ======================================================= +*/ + + +union Value { + GCObject *gc; /* collectable objects */ + void *p; /* light userdata */ + int b; /* booleans */ + lua_CFunction f; /* light C functions */ + numfield /* numbers */ +}; + + +struct lua_TValue { + TValuefields; +}; + + +typedef TValue *StkId; /* index to stack elements */ + + + + +/* +** Header for string value; string bytes follow the end of this structure +*/ +typedef union TString { + L_Umaxalign dummy; /* ensures maximum alignment for strings */ + struct { + CommonHeader; + lu_byte extra; /* reserved words for short strings; "has hash" for longs */ + unsigned int hash; + size_t len; /* number of characters in string */ + } tsv; +} TString; + + +/* get the actual string (array of bytes) from a TString */ +#define getstr(ts) cast(const char *, (ts) + 1) + +/* get the actual string (array of bytes) from a Lua value */ +#define svalue(o) getstr(rawtsvalue(o)) + + +/* +** Header for userdata; memory area follows the end of this structure +*/ +typedef union Udata { + L_Umaxalign dummy; /* ensures maximum alignment for `local' udata */ + struct { + CommonHeader; + struct Table *metatable; + struct Table *env; + size_t len; /* number of bytes */ + } uv; +} Udata; + + + +/* +** Description of an upvalue for function prototypes +*/ +typedef struct Upvaldesc { + TString *name; /* upvalue name (for debug information) */ + lu_byte instack; /* whether it is in stack */ + lu_byte idx; /* index of upvalue (in stack or in outer function's list) */ +} Upvaldesc; + + +/* +** Description of a local variable for function prototypes +** (used for debug information) +*/ +typedef struct LocVar { + TString *varname; + int startpc; /* first point where variable is active */ + int endpc; /* first point where variable is dead */ +} LocVar; + + +/* +** Function Prototypes +*/ +typedef struct Proto { + CommonHeader; + TValue *k; /* constants used by the function */ + Instruction *code; + struct Proto **p; /* functions defined inside the function */ + int *lineinfo; /* map from opcodes to source lines (debug information) */ + LocVar *locvars; /* information about local variables (debug information) */ + Upvaldesc *upvalues; /* upvalue information */ + union Closure *cache; /* last created closure with this prototype */ + TString *source; /* used for debug information */ + int sizeupvalues; /* size of 'upvalues' */ + int sizek; /* size of `k' */ + int sizecode; + int sizelineinfo; + int sizep; /* size of `p' */ + int sizelocvars; + int linedefined; + int lastlinedefined; + GCObject *gclist; + lu_byte numparams; /* number of fixed parameters */ + lu_byte is_vararg; + lu_byte maxstacksize; /* maximum stack used by this function */ +} Proto; + + + +/* +** Lua Upvalues +*/ +typedef struct UpVal { + CommonHeader; + TValue *v; /* points to stack or to its own value */ + union { + TValue value; /* the value (when closed) */ + struct { /* double linked list (when open) */ + struct UpVal *prev; + struct UpVal *next; + } l; + } u; +} UpVal; + + +/* +** Closures +*/ + +#define ClosureHeader \ + CommonHeader; lu_byte nupvalues; GCObject *gclist + +typedef struct CClosure { + ClosureHeader; + lua_CFunction f; + TValue upvalue[1]; /* list of upvalues */ +} CClosure; + + +typedef struct LClosure { + ClosureHeader; + struct Proto *p; + UpVal *upvals[1]; /* list of upvalues */ +} LClosure; + + +typedef union Closure { + CClosure c; + LClosure l; +} Closure; + + +#define isLfunction(o) ttisLclosure(o) + +#define getproto(o) (clLvalue(o)->p) + + +/* +** Tables +*/ + +typedef union TKey { + struct { + TValuefields; + struct Node *next; /* for chaining */ + } nk; + TValue tvk; +} TKey; + + +typedef struct Node { + TValue i_val; + TKey i_key; +} Node; + + +typedef struct Table { + CommonHeader; + lu_byte flags; /* 1<

lsizenode)) + + +/* +** (address of) a fixed nil value +*/ +#define luaO_nilobject (&luaO_nilobject_) + + +LUAI_DDEC const TValue luaO_nilobject_; + + +LUAI_FUNC int luaO_int2fb (unsigned int x); +LUAI_FUNC int luaO_fb2int (int x); +LUAI_FUNC int luaO_ceillog2 (unsigned int x); +LUAI_FUNC lua_Number luaO_arith (int op, lua_Number v1, lua_Number v2); +LUAI_FUNC int luaO_str2d (const char *s, size_t len, lua_Number *result); +LUAI_FUNC int luaO_hexavalue (int c); +LUAI_FUNC const char *luaO_pushvfstring (lua_State *L, const char *fmt, + va_list argp); +LUAI_FUNC const char *luaO_pushfstring (lua_State *L, const char *fmt, ...); +LUAI_FUNC void luaO_chunkid (char *out, const char *source, size_t len); + + +#endif + diff --git a/lua-5.2.4/src/lopcodes.c b/lua-5.2.4/src/lopcodes.c new file mode 100644 index 000000000..4190dc762 --- /dev/null +++ b/lua-5.2.4/src/lopcodes.c @@ -0,0 +1,107 @@ +/* +** $Id: lopcodes.c,v 1.49.1.1 2013/04/12 18:48:47 roberto Exp $ +** Opcodes for Lua virtual machine +** See Copyright Notice in lua.h +*/ + + +#define lopcodes_c +#define LUA_CORE + + +#include "lopcodes.h" + + +/* ORDER OP */ + +LUAI_DDEF const char *const luaP_opnames[NUM_OPCODES+1] = { + "MOVE", + "LOADK", + "LOADKX", + "LOADBOOL", + "LOADNIL", + "GETUPVAL", + "GETTABUP", + "GETTABLE", + "SETTABUP", + "SETUPVAL", + "SETTABLE", + "NEWTABLE", + "SELF", + "ADD", + "SUB", + "MUL", + "DIV", + "MOD", + "POW", + "UNM", + "NOT", + "LEN", + "CONCAT", + "JMP", + "EQ", + "LT", + "LE", + "TEST", + "TESTSET", + "CALL", + "TAILCALL", + "RETURN", + "FORLOOP", + "FORPREP", + "TFORCALL", + "TFORLOOP", + "SETLIST", + "CLOSURE", + "VARARG", + "EXTRAARG", + NULL +}; + + +#define opmode(t,a,b,c,m) (((t)<<7) | ((a)<<6) | ((b)<<4) | ((c)<<2) | (m)) + +LUAI_DDEF const lu_byte luaP_opmodes[NUM_OPCODES] = { +/* T A B C mode opcode */ + opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_MOVE */ + ,opmode(0, 1, OpArgK, OpArgN, iABx) /* OP_LOADK */ + ,opmode(0, 1, OpArgN, OpArgN, iABx) /* OP_LOADKX */ + ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_LOADBOOL */ + ,opmode(0, 1, OpArgU, OpArgN, iABC) /* OP_LOADNIL */ + ,opmode(0, 1, OpArgU, OpArgN, iABC) /* OP_GETUPVAL */ + ,opmode(0, 1, OpArgU, OpArgK, iABC) /* OP_GETTABUP */ + ,opmode(0, 1, OpArgR, OpArgK, iABC) /* OP_GETTABLE */ + ,opmode(0, 0, OpArgK, OpArgK, iABC) /* OP_SETTABUP */ + ,opmode(0, 0, OpArgU, OpArgN, iABC) /* OP_SETUPVAL */ + ,opmode(0, 0, OpArgK, OpArgK, iABC) /* OP_SETTABLE */ + ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_NEWTABLE */ + ,opmode(0, 1, OpArgR, OpArgK, iABC) /* OP_SELF */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_ADD */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_SUB */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_MUL */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_DIV */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_MOD */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_POW */ + ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_UNM */ + ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_NOT */ + ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_LEN */ + ,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_CONCAT */ + ,opmode(0, 0, OpArgR, OpArgN, iAsBx) /* OP_JMP */ + ,opmode(1, 0, OpArgK, OpArgK, iABC) /* OP_EQ */ + ,opmode(1, 0, OpArgK, OpArgK, iABC) /* OP_LT */ + ,opmode(1, 0, OpArgK, OpArgK, iABC) /* OP_LE */ + ,opmode(1, 0, OpArgN, OpArgU, iABC) /* OP_TEST */ + ,opmode(1, 1, OpArgR, OpArgU, iABC) /* OP_TESTSET */ + ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_CALL */ + ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_TAILCALL */ + ,opmode(0, 0, OpArgU, OpArgN, iABC) /* OP_RETURN */ + ,opmode(0, 1, OpArgR, OpArgN, iAsBx) /* OP_FORLOOP */ + ,opmode(0, 1, OpArgR, OpArgN, iAsBx) /* OP_FORPREP */ + ,opmode(0, 0, OpArgN, OpArgU, iABC) /* OP_TFORCALL */ + ,opmode(0, 1, OpArgR, OpArgN, iAsBx) /* OP_TFORLOOP */ + ,opmode(0, 0, OpArgU, OpArgU, iABC) /* OP_SETLIST */ + ,opmode(0, 1, OpArgU, OpArgN, iABx) /* OP_CLOSURE */ + ,opmode(0, 1, OpArgU, OpArgN, iABC) /* OP_VARARG */ + ,opmode(0, 0, OpArgU, OpArgU, iAx) /* OP_EXTRAARG */ +}; + diff --git a/lua-5.2.4/src/lopcodes.h b/lua-5.2.4/src/lopcodes.h new file mode 100644 index 000000000..8e2f80a13 --- /dev/null +++ b/lua-5.2.4/src/lopcodes.h @@ -0,0 +1,288 @@ +/* +** $Id: lopcodes.h,v 1.142.1.2 2014/10/20 18:32:09 roberto Exp $ +** Opcodes for Lua virtual machine +** See Copyright Notice in lua.h +*/ + +#ifndef lopcodes_h +#define lopcodes_h + +#include "llimits.h" + + +/*=========================================================================== + We assume that instructions are unsigned numbers. + All instructions have an opcode in the first 6 bits. + Instructions can have the following fields: + `A' : 8 bits + `B' : 9 bits + `C' : 9 bits + 'Ax' : 26 bits ('A', 'B', and 'C' together) + `Bx' : 18 bits (`B' and `C' together) + `sBx' : signed Bx + + A signed argument is represented in excess K; that is, the number + value is the unsigned value minus K. K is exactly the maximum value + for that argument (so that -max is represented by 0, and +max is + represented by 2*max), which is half the maximum for the corresponding + unsigned argument. +===========================================================================*/ + + +enum OpMode {iABC, iABx, iAsBx, iAx}; /* basic instruction format */ + + +/* +** size and position of opcode arguments. +*/ +#define SIZE_C 9 +#define SIZE_B 9 +#define SIZE_Bx (SIZE_C + SIZE_B) +#define SIZE_A 8 +#define SIZE_Ax (SIZE_C + SIZE_B + SIZE_A) + +#define SIZE_OP 6 + +#define POS_OP 0 +#define POS_A (POS_OP + SIZE_OP) +#define POS_C (POS_A + SIZE_A) +#define POS_B (POS_C + SIZE_C) +#define POS_Bx POS_C +#define POS_Ax POS_A + + +/* +** limits for opcode arguments. +** we use (signed) int to manipulate most arguments, +** so they must fit in LUAI_BITSINT-1 bits (-1 for sign) +*/ +#if SIZE_Bx < LUAI_BITSINT-1 +#define MAXARG_Bx ((1<>1) /* `sBx' is signed */ +#else +#define MAXARG_Bx MAX_INT +#define MAXARG_sBx MAX_INT +#endif + +#if SIZE_Ax < LUAI_BITSINT-1 +#define MAXARG_Ax ((1<>POS_OP) & MASK1(SIZE_OP,0))) +#define SET_OPCODE(i,o) ((i) = (((i)&MASK0(SIZE_OP,POS_OP)) | \ + ((cast(Instruction, o)<>pos) & MASK1(size,0))) +#define setarg(i,v,pos,size) ((i) = (((i)&MASK0(size,pos)) | \ + ((cast(Instruction, v)<= R(A - 1) */ +OP_EQ,/* A B C if ((RK(B) == RK(C)) ~= A) then pc++ */ +OP_LT,/* A B C if ((RK(B) < RK(C)) ~= A) then pc++ */ +OP_LE,/* A B C if ((RK(B) <= RK(C)) ~= A) then pc++ */ + +OP_TEST,/* A C if not (R(A) <=> C) then pc++ */ +OP_TESTSET,/* A B C if (R(B) <=> C) then R(A) := R(B) else pc++ */ + +OP_CALL,/* A B C R(A), ... ,R(A+C-2) := R(A)(R(A+1), ... ,R(A+B-1)) */ +OP_TAILCALL,/* A B C return R(A)(R(A+1), ... ,R(A+B-1)) */ +OP_RETURN,/* A B return R(A), ... ,R(A+B-2) (see note) */ + +OP_FORLOOP,/* A sBx R(A)+=R(A+2); + if R(A) > 4) & 3)) +#define getCMode(m) (cast(enum OpArgMask, (luaP_opmodes[m] >> 2) & 3)) +#define testAMode(m) (luaP_opmodes[m] & (1 << 6)) +#define testTMode(m) (luaP_opmodes[m] & (1 << 7)) + + +LUAI_DDEC const char *const luaP_opnames[NUM_OPCODES+1]; /* opcode names */ + + +/* number of list items to accumulate before a SETLIST instruction */ +#define LFIELDS_PER_FLUSH 50 + + +#endif diff --git a/lua-5.2.4/src/loslib.c b/lua-5.2.4/src/loslib.c new file mode 100644 index 000000000..052ba1744 --- /dev/null +++ b/lua-5.2.4/src/loslib.c @@ -0,0 +1,323 @@ +/* +** $Id: loslib.c,v 1.40.1.1 2013/04/12 18:48:47 roberto Exp $ +** Standard Operating System library +** See Copyright Notice in lua.h +*/ + + +#include +#include +#include +#include +#include + +#define loslib_c +#define LUA_LIB + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +/* +** list of valid conversion specifiers for the 'strftime' function +*/ +#if !defined(LUA_STRFTIMEOPTIONS) + +#if !defined(LUA_USE_POSIX) +#define LUA_STRFTIMEOPTIONS { "aAbBcdHIjmMpSUwWxXyYz%", "" } +#else +#define LUA_STRFTIMEOPTIONS \ + { "aAbBcCdDeFgGhHIjmMnprRStTuUVwWxXyYzZ%", "" \ + "", "E", "cCxXyY", \ + "O", "deHImMSuUVwWy" } +#endif + +#endif + + + +/* +** By default, Lua uses tmpnam except when POSIX is available, where it +** uses mkstemp. +*/ +#if defined(LUA_USE_MKSTEMP) +#include +#define LUA_TMPNAMBUFSIZE 32 +#define lua_tmpnam(b,e) { \ + strcpy(b, "/tmp/lua_XXXXXX"); \ + e = mkstemp(b); \ + if (e != -1) close(e); \ + e = (e == -1); } + +#elif !defined(lua_tmpnam) + +#define LUA_TMPNAMBUFSIZE L_tmpnam +#define lua_tmpnam(b,e) { e = (tmpnam(b) == NULL); } + +#endif + + +/* +** By default, Lua uses gmtime/localtime, except when POSIX is available, +** where it uses gmtime_r/localtime_r +*/ +#if defined(LUA_USE_GMTIME_R) + +#define l_gmtime(t,r) gmtime_r(t,r) +#define l_localtime(t,r) localtime_r(t,r) + +#elif !defined(l_gmtime) + +#define l_gmtime(t,r) ((void)r, gmtime(t)) +#define l_localtime(t,r) ((void)r, localtime(t)) + +#endif + + + +static int os_execute (lua_State *L) { + const char *cmd = luaL_optstring(L, 1, NULL); + int stat = system(cmd); + if (cmd != NULL) + return luaL_execresult(L, stat); + else { + lua_pushboolean(L, stat); /* true if there is a shell */ + return 1; + } +} + + +static int os_remove (lua_State *L) { + const char *filename = luaL_checkstring(L, 1); + return luaL_fileresult(L, remove(filename) == 0, filename); +} + + +static int os_rename (lua_State *L) { + const char *fromname = luaL_checkstring(L, 1); + const char *toname = luaL_checkstring(L, 2); + return luaL_fileresult(L, rename(fromname, toname) == 0, NULL); +} + + +static int os_tmpname (lua_State *L) { + char buff[LUA_TMPNAMBUFSIZE]; + int err; + lua_tmpnam(buff, err); + if (err) + return luaL_error(L, "unable to generate a unique filename"); + lua_pushstring(L, buff); + return 1; +} + + +static int os_getenv (lua_State *L) { + lua_pushstring(L, getenv(luaL_checkstring(L, 1))); /* if NULL push nil */ + return 1; +} + + +static int os_clock (lua_State *L) { + lua_pushnumber(L, ((lua_Number)clock())/(lua_Number)CLOCKS_PER_SEC); + return 1; +} + + +/* +** {====================================================== +** Time/Date operations +** { year=%Y, month=%m, day=%d, hour=%H, min=%M, sec=%S, +** wday=%w+1, yday=%j, isdst=? } +** ======================================================= +*/ + +static void setfield (lua_State *L, const char *key, int value) { + lua_pushinteger(L, value); + lua_setfield(L, -2, key); +} + +static void setboolfield (lua_State *L, const char *key, int value) { + if (value < 0) /* undefined? */ + return; /* does not set field */ + lua_pushboolean(L, value); + lua_setfield(L, -2, key); +} + +static int getboolfield (lua_State *L, const char *key) { + int res; + lua_getfield(L, -1, key); + res = lua_isnil(L, -1) ? -1 : lua_toboolean(L, -1); + lua_pop(L, 1); + return res; +} + + +static int getfield (lua_State *L, const char *key, int d) { + int res, isnum; + lua_getfield(L, -1, key); + res = (int)lua_tointegerx(L, -1, &isnum); + if (!isnum) { + if (d < 0) + return luaL_error(L, "field " LUA_QS " missing in date table", key); + res = d; + } + lua_pop(L, 1); + return res; +} + + +static const char *checkoption (lua_State *L, const char *conv, char *buff) { + static const char *const options[] = LUA_STRFTIMEOPTIONS; + unsigned int i; + for (i = 0; i < sizeof(options)/sizeof(options[0]); i += 2) { + if (*conv != '\0' && strchr(options[i], *conv) != NULL) { + buff[1] = *conv; + if (*options[i + 1] == '\0') { /* one-char conversion specifier? */ + buff[2] = '\0'; /* end buffer */ + return conv + 1; + } + else if (*(conv + 1) != '\0' && + strchr(options[i + 1], *(conv + 1)) != NULL) { + buff[2] = *(conv + 1); /* valid two-char conversion specifier */ + buff[3] = '\0'; /* end buffer */ + return conv + 2; + } + } + } + luaL_argerror(L, 1, + lua_pushfstring(L, "invalid conversion specifier '%%%s'", conv)); + return conv; /* to avoid warnings */ +} + + +static int os_date (lua_State *L) { + const char *s = luaL_optstring(L, 1, "%c"); + time_t t = luaL_opt(L, (time_t)luaL_checknumber, 2, time(NULL)); + struct tm tmr, *stm; + if (*s == '!') { /* UTC? */ + stm = l_gmtime(&t, &tmr); + s++; /* skip `!' */ + } + else + stm = l_localtime(&t, &tmr); + if (stm == NULL) /* invalid date? */ + lua_pushnil(L); + else if (strcmp(s, "*t") == 0) { + lua_createtable(L, 0, 9); /* 9 = number of fields */ + setfield(L, "sec", stm->tm_sec); + setfield(L, "min", stm->tm_min); + setfield(L, "hour", stm->tm_hour); + setfield(L, "day", stm->tm_mday); + setfield(L, "month", stm->tm_mon+1); + setfield(L, "year", stm->tm_year+1900); + setfield(L, "wday", stm->tm_wday+1); + setfield(L, "yday", stm->tm_yday+1); + setboolfield(L, "isdst", stm->tm_isdst); + } + else { + char cc[4]; + luaL_Buffer b; + cc[0] = '%'; + luaL_buffinit(L, &b); + while (*s) { + if (*s != '%') /* no conversion specifier? */ + luaL_addchar(&b, *s++); + else { + size_t reslen; + char buff[200]; /* should be big enough for any conversion result */ + s = checkoption(L, s + 1, cc); + reslen = strftime(buff, sizeof(buff), cc, stm); + luaL_addlstring(&b, buff, reslen); + } + } + luaL_pushresult(&b); + } + return 1; +} + + +static int os_time (lua_State *L) { + time_t t; + if (lua_isnoneornil(L, 1)) /* called without args? */ + t = time(NULL); /* get current time */ + else { + struct tm ts; + luaL_checktype(L, 1, LUA_TTABLE); + lua_settop(L, 1); /* make sure table is at the top */ + ts.tm_sec = getfield(L, "sec", 0); + ts.tm_min = getfield(L, "min", 0); + ts.tm_hour = getfield(L, "hour", 12); + ts.tm_mday = getfield(L, "day", -1); + ts.tm_mon = getfield(L, "month", -1) - 1; + ts.tm_year = getfield(L, "year", -1) - 1900; + ts.tm_isdst = getboolfield(L, "isdst"); + t = mktime(&ts); + } + if (t == (time_t)(-1)) + lua_pushnil(L); + else + lua_pushnumber(L, (lua_Number)t); + return 1; +} + + +static int os_difftime (lua_State *L) { + lua_pushnumber(L, difftime((time_t)(luaL_checknumber(L, 1)), + (time_t)(luaL_optnumber(L, 2, 0)))); + return 1; +} + +/* }====================================================== */ + + +static int os_setlocale (lua_State *L) { + static const int cat[] = {LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, + LC_NUMERIC, LC_TIME}; + static const char *const catnames[] = {"all", "collate", "ctype", "monetary", + "numeric", "time", NULL}; + const char *l = luaL_optstring(L, 1, NULL); + int op = luaL_checkoption(L, 2, "all", catnames); + lua_pushstring(L, setlocale(cat[op], l)); + return 1; +} + + +static int os_exit (lua_State *L) { + int status; + if (lua_isboolean(L, 1)) + status = (lua_toboolean(L, 1) ? EXIT_SUCCESS : EXIT_FAILURE); + else + status = luaL_optint(L, 1, EXIT_SUCCESS); + if (lua_toboolean(L, 2)) + lua_close(L); + if (L) exit(status); /* 'if' to avoid warnings for unreachable 'return' */ + return 0; +} + + +static const luaL_Reg syslib[] = { + {"clock", os_clock}, + {"date", os_date}, + {"difftime", os_difftime}, + {"execute", os_execute}, + {"exit", os_exit}, + {"getenv", os_getenv}, + {"remove", os_remove}, + {"rename", os_rename}, + {"setlocale", os_setlocale}, + {"time", os_time}, + {"tmpname", os_tmpname}, + {NULL, NULL} +}; + +/* }====================================================== */ + + + +LUAMOD_API int luaopen_os (lua_State *L) { + luaL_newlib(L, syslib); + return 1; +} + diff --git a/lua-5.2.4/src/lparser.c b/lua-5.2.4/src/lparser.c new file mode 100644 index 000000000..9e1a9ca2c --- /dev/null +++ b/lua-5.2.4/src/lparser.c @@ -0,0 +1,1638 @@ +/* +** $Id: lparser.c,v 2.130.1.1 2013/04/12 18:48:47 roberto Exp $ +** Lua Parser +** See Copyright Notice in lua.h +*/ + + +#include + +#define lparser_c +#define LUA_CORE + +#include "lua.h" + +#include "lcode.h" +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "llex.h" +#include "lmem.h" +#include "lobject.h" +#include "lopcodes.h" +#include "lparser.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" + + + +/* maximum number of local variables per function (must be smaller + than 250, due to the bytecode format) */ +#define MAXVARS 200 + + +#define hasmultret(k) ((k) == VCALL || (k) == VVARARG) + + + +/* +** nodes for block list (list of active blocks) +*/ +typedef struct BlockCnt { + struct BlockCnt *previous; /* chain */ + short firstlabel; /* index of first label in this block */ + short firstgoto; /* index of first pending goto in this block */ + lu_byte nactvar; /* # active locals outside the block */ + lu_byte upval; /* true if some variable in the block is an upvalue */ + lu_byte isloop; /* true if `block' is a loop */ +} BlockCnt; + + + +/* +** prototypes for recursive non-terminal functions +*/ +static void statement (LexState *ls); +static void expr (LexState *ls, expdesc *v); + + +static void anchor_token (LexState *ls) { + /* last token from outer function must be EOS */ + lua_assert(ls->fs != NULL || ls->t.token == TK_EOS); + if (ls->t.token == TK_NAME || ls->t.token == TK_STRING) { + TString *ts = ls->t.seminfo.ts; + luaX_newstring(ls, getstr(ts), ts->tsv.len); + } +} + + +/* semantic error */ +static l_noret semerror (LexState *ls, const char *msg) { + ls->t.token = 0; /* remove 'near to' from final message */ + luaX_syntaxerror(ls, msg); +} + + +static l_noret error_expected (LexState *ls, int token) { + luaX_syntaxerror(ls, + luaO_pushfstring(ls->L, "%s expected", luaX_token2str(ls, token))); +} + + +static l_noret errorlimit (FuncState *fs, int limit, const char *what) { + lua_State *L = fs->ls->L; + const char *msg; + int line = fs->f->linedefined; + const char *where = (line == 0) + ? "main function" + : luaO_pushfstring(L, "function at line %d", line); + msg = luaO_pushfstring(L, "too many %s (limit is %d) in %s", + what, limit, where); + luaX_syntaxerror(fs->ls, msg); +} + + +static void checklimit (FuncState *fs, int v, int l, const char *what) { + if (v > l) errorlimit(fs, l, what); +} + + +static int testnext (LexState *ls, int c) { + if (ls->t.token == c) { + luaX_next(ls); + return 1; + } + else return 0; +} + + +static void check (LexState *ls, int c) { + if (ls->t.token != c) + error_expected(ls, c); +} + + +static void checknext (LexState *ls, int c) { + check(ls, c); + luaX_next(ls); +} + + +#define check_condition(ls,c,msg) { if (!(c)) luaX_syntaxerror(ls, msg); } + + + +static void check_match (LexState *ls, int what, int who, int where) { + if (!testnext(ls, what)) { + if (where == ls->linenumber) + error_expected(ls, what); + else { + luaX_syntaxerror(ls, luaO_pushfstring(ls->L, + "%s expected (to close %s at line %d)", + luaX_token2str(ls, what), luaX_token2str(ls, who), where)); + } + } +} + + +static TString *str_checkname (LexState *ls) { + TString *ts; + check(ls, TK_NAME); + ts = ls->t.seminfo.ts; + luaX_next(ls); + return ts; +} + + +static void init_exp (expdesc *e, expkind k, int i) { + e->f = e->t = NO_JUMP; + e->k = k; + e->u.info = i; +} + + +static void codestring (LexState *ls, expdesc *e, TString *s) { + init_exp(e, VK, luaK_stringK(ls->fs, s)); +} + + +static void checkname (LexState *ls, expdesc *e) { + codestring(ls, e, str_checkname(ls)); +} + + +static int registerlocalvar (LexState *ls, TString *varname) { + FuncState *fs = ls->fs; + Proto *f = fs->f; + int oldsize = f->sizelocvars; + luaM_growvector(ls->L, f->locvars, fs->nlocvars, f->sizelocvars, + LocVar, SHRT_MAX, "local variables"); + while (oldsize < f->sizelocvars) f->locvars[oldsize++].varname = NULL; + f->locvars[fs->nlocvars].varname = varname; + luaC_objbarrier(ls->L, f, varname); + return fs->nlocvars++; +} + + +static void new_localvar (LexState *ls, TString *name) { + FuncState *fs = ls->fs; + Dyndata *dyd = ls->dyd; + int reg = registerlocalvar(ls, name); + checklimit(fs, dyd->actvar.n + 1 - fs->firstlocal, + MAXVARS, "local variables"); + luaM_growvector(ls->L, dyd->actvar.arr, dyd->actvar.n + 1, + dyd->actvar.size, Vardesc, MAX_INT, "local variables"); + dyd->actvar.arr[dyd->actvar.n++].idx = cast(short, reg); +} + + +static void new_localvarliteral_ (LexState *ls, const char *name, size_t sz) { + new_localvar(ls, luaX_newstring(ls, name, sz)); +} + +#define new_localvarliteral(ls,v) \ + new_localvarliteral_(ls, "" v, (sizeof(v)/sizeof(char))-1) + + +static LocVar *getlocvar (FuncState *fs, int i) { + int idx = fs->ls->dyd->actvar.arr[fs->firstlocal + i].idx; + lua_assert(idx < fs->nlocvars); + return &fs->f->locvars[idx]; +} + + +static void adjustlocalvars (LexState *ls, int nvars) { + FuncState *fs = ls->fs; + fs->nactvar = cast_byte(fs->nactvar + nvars); + for (; nvars; nvars--) { + getlocvar(fs, fs->nactvar - nvars)->startpc = fs->pc; + } +} + + +static void removevars (FuncState *fs, int tolevel) { + fs->ls->dyd->actvar.n -= (fs->nactvar - tolevel); + while (fs->nactvar > tolevel) + getlocvar(fs, --fs->nactvar)->endpc = fs->pc; +} + + +static int searchupvalue (FuncState *fs, TString *name) { + int i; + Upvaldesc *up = fs->f->upvalues; + for (i = 0; i < fs->nups; i++) { + if (luaS_eqstr(up[i].name, name)) return i; + } + return -1; /* not found */ +} + + +static int newupvalue (FuncState *fs, TString *name, expdesc *v) { + Proto *f = fs->f; + int oldsize = f->sizeupvalues; + checklimit(fs, fs->nups + 1, MAXUPVAL, "upvalues"); + luaM_growvector(fs->ls->L, f->upvalues, fs->nups, f->sizeupvalues, + Upvaldesc, MAXUPVAL, "upvalues"); + while (oldsize < f->sizeupvalues) f->upvalues[oldsize++].name = NULL; + f->upvalues[fs->nups].instack = (v->k == VLOCAL); + f->upvalues[fs->nups].idx = cast_byte(v->u.info); + f->upvalues[fs->nups].name = name; + luaC_objbarrier(fs->ls->L, f, name); + return fs->nups++; +} + + +static int searchvar (FuncState *fs, TString *n) { + int i; + for (i = cast_int(fs->nactvar) - 1; i >= 0; i--) { + if (luaS_eqstr(n, getlocvar(fs, i)->varname)) + return i; + } + return -1; /* not found */ +} + + +/* + Mark block where variable at given level was defined + (to emit close instructions later). +*/ +static void markupval (FuncState *fs, int level) { + BlockCnt *bl = fs->bl; + while (bl->nactvar > level) bl = bl->previous; + bl->upval = 1; +} + + +/* + Find variable with given name 'n'. If it is an upvalue, add this + upvalue into all intermediate functions. +*/ +static int singlevaraux (FuncState *fs, TString *n, expdesc *var, int base) { + if (fs == NULL) /* no more levels? */ + return VVOID; /* default is global */ + else { + int v = searchvar(fs, n); /* look up locals at current level */ + if (v >= 0) { /* found? */ + init_exp(var, VLOCAL, v); /* variable is local */ + if (!base) + markupval(fs, v); /* local will be used as an upval */ + return VLOCAL; + } + else { /* not found as local at current level; try upvalues */ + int idx = searchupvalue(fs, n); /* try existing upvalues */ + if (idx < 0) { /* not found? */ + if (singlevaraux(fs->prev, n, var, 0) == VVOID) /* try upper levels */ + return VVOID; /* not found; is a global */ + /* else was LOCAL or UPVAL */ + idx = newupvalue(fs, n, var); /* will be a new upvalue */ + } + init_exp(var, VUPVAL, idx); + return VUPVAL; + } + } +} + + +static void singlevar (LexState *ls, expdesc *var) { + TString *varname = str_checkname(ls); + FuncState *fs = ls->fs; + if (singlevaraux(fs, varname, var, 1) == VVOID) { /* global name? */ + expdesc key; + singlevaraux(fs, ls->envn, var, 1); /* get environment variable */ + lua_assert(var->k == VLOCAL || var->k == VUPVAL); + codestring(ls, &key, varname); /* key is variable name */ + luaK_indexed(fs, var, &key); /* env[varname] */ + } +} + + +static void adjust_assign (LexState *ls, int nvars, int nexps, expdesc *e) { + FuncState *fs = ls->fs; + int extra = nvars - nexps; + if (hasmultret(e->k)) { + extra++; /* includes call itself */ + if (extra < 0) extra = 0; + luaK_setreturns(fs, e, extra); /* last exp. provides the difference */ + if (extra > 1) luaK_reserveregs(fs, extra-1); + } + else { + if (e->k != VVOID) luaK_exp2nextreg(fs, e); /* close last expression */ + if (extra > 0) { + int reg = fs->freereg; + luaK_reserveregs(fs, extra); + luaK_nil(fs, reg, extra); + } + } +} + + +static void enterlevel (LexState *ls) { + lua_State *L = ls->L; + ++L->nCcalls; + checklimit(ls->fs, L->nCcalls, LUAI_MAXCCALLS, "C levels"); +} + + +#define leavelevel(ls) ((ls)->L->nCcalls--) + + +static void closegoto (LexState *ls, int g, Labeldesc *label) { + int i; + FuncState *fs = ls->fs; + Labellist *gl = &ls->dyd->gt; + Labeldesc *gt = &gl->arr[g]; + lua_assert(luaS_eqstr(gt->name, label->name)); + if (gt->nactvar < label->nactvar) { + TString *vname = getlocvar(fs, gt->nactvar)->varname; + const char *msg = luaO_pushfstring(ls->L, + " at line %d jumps into the scope of local " LUA_QS, + getstr(gt->name), gt->line, getstr(vname)); + semerror(ls, msg); + } + luaK_patchlist(fs, gt->pc, label->pc); + /* remove goto from pending list */ + for (i = g; i < gl->n - 1; i++) + gl->arr[i] = gl->arr[i + 1]; + gl->n--; +} + + +/* +** try to close a goto with existing labels; this solves backward jumps +*/ +static int findlabel (LexState *ls, int g) { + int i; + BlockCnt *bl = ls->fs->bl; + Dyndata *dyd = ls->dyd; + Labeldesc *gt = &dyd->gt.arr[g]; + /* check labels in current block for a match */ + for (i = bl->firstlabel; i < dyd->label.n; i++) { + Labeldesc *lb = &dyd->label.arr[i]; + if (luaS_eqstr(lb->name, gt->name)) { /* correct label? */ + if (gt->nactvar > lb->nactvar && + (bl->upval || dyd->label.n > bl->firstlabel)) + luaK_patchclose(ls->fs, gt->pc, lb->nactvar); + closegoto(ls, g, lb); /* close it */ + return 1; + } + } + return 0; /* label not found; cannot close goto */ +} + + +static int newlabelentry (LexState *ls, Labellist *l, TString *name, + int line, int pc) { + int n = l->n; + luaM_growvector(ls->L, l->arr, n, l->size, + Labeldesc, SHRT_MAX, "labels/gotos"); + l->arr[n].name = name; + l->arr[n].line = line; + l->arr[n].nactvar = ls->fs->nactvar; + l->arr[n].pc = pc; + l->n++; + return n; +} + + +/* +** check whether new label 'lb' matches any pending gotos in current +** block; solves forward jumps +*/ +static void findgotos (LexState *ls, Labeldesc *lb) { + Labellist *gl = &ls->dyd->gt; + int i = ls->fs->bl->firstgoto; + while (i < gl->n) { + if (luaS_eqstr(gl->arr[i].name, lb->name)) + closegoto(ls, i, lb); + else + i++; + } +} + + +/* +** "export" pending gotos to outer level, to check them against +** outer labels; if the block being exited has upvalues, and +** the goto exits the scope of any variable (which can be the +** upvalue), close those variables being exited. +*/ +static void movegotosout (FuncState *fs, BlockCnt *bl) { + int i = bl->firstgoto; + Labellist *gl = &fs->ls->dyd->gt; + /* correct pending gotos to current block and try to close it + with visible labels */ + while (i < gl->n) { + Labeldesc *gt = &gl->arr[i]; + if (gt->nactvar > bl->nactvar) { + if (bl->upval) + luaK_patchclose(fs, gt->pc, bl->nactvar); + gt->nactvar = bl->nactvar; + } + if (!findlabel(fs->ls, i)) + i++; /* move to next one */ + } +} + + +static void enterblock (FuncState *fs, BlockCnt *bl, lu_byte isloop) { + bl->isloop = isloop; + bl->nactvar = fs->nactvar; + bl->firstlabel = fs->ls->dyd->label.n; + bl->firstgoto = fs->ls->dyd->gt.n; + bl->upval = 0; + bl->previous = fs->bl; + fs->bl = bl; + lua_assert(fs->freereg == fs->nactvar); +} + + +/* +** create a label named "break" to resolve break statements +*/ +static void breaklabel (LexState *ls) { + TString *n = luaS_new(ls->L, "break"); + int l = newlabelentry(ls, &ls->dyd->label, n, 0, ls->fs->pc); + findgotos(ls, &ls->dyd->label.arr[l]); +} + +/* +** generates an error for an undefined 'goto'; choose appropriate +** message when label name is a reserved word (which can only be 'break') +*/ +static l_noret undefgoto (LexState *ls, Labeldesc *gt) { + const char *msg = isreserved(gt->name) + ? "<%s> at line %d not inside a loop" + : "no visible label " LUA_QS " for at line %d"; + msg = luaO_pushfstring(ls->L, msg, getstr(gt->name), gt->line); + semerror(ls, msg); +} + + +static void leaveblock (FuncState *fs) { + BlockCnt *bl = fs->bl; + LexState *ls = fs->ls; + if (bl->previous && bl->upval) { + /* create a 'jump to here' to close upvalues */ + int j = luaK_jump(fs); + luaK_patchclose(fs, j, bl->nactvar); + luaK_patchtohere(fs, j); + } + if (bl->isloop) + breaklabel(ls); /* close pending breaks */ + fs->bl = bl->previous; + removevars(fs, bl->nactvar); + lua_assert(bl->nactvar == fs->nactvar); + fs->freereg = fs->nactvar; /* free registers */ + ls->dyd->label.n = bl->firstlabel; /* remove local labels */ + if (bl->previous) /* inner block? */ + movegotosout(fs, bl); /* update pending gotos to outer block */ + else if (bl->firstgoto < ls->dyd->gt.n) /* pending gotos in outer block? */ + undefgoto(ls, &ls->dyd->gt.arr[bl->firstgoto]); /* error */ +} + + +/* +** adds a new prototype into list of prototypes +*/ +static Proto *addprototype (LexState *ls) { + Proto *clp; + lua_State *L = ls->L; + FuncState *fs = ls->fs; + Proto *f = fs->f; /* prototype of current function */ + if (fs->np >= f->sizep) { + int oldsize = f->sizep; + luaM_growvector(L, f->p, fs->np, f->sizep, Proto *, MAXARG_Bx, "functions"); + while (oldsize < f->sizep) f->p[oldsize++] = NULL; + } + f->p[fs->np++] = clp = luaF_newproto(L); + luaC_objbarrier(L, f, clp); + return clp; +} + + +/* +** codes instruction to create new closure in parent function. +** The OP_CLOSURE instruction must use the last available register, +** so that, if it invokes the GC, the GC knows which registers +** are in use at that time. +*/ +static void codeclosure (LexState *ls, expdesc *v) { + FuncState *fs = ls->fs->prev; + init_exp(v, VRELOCABLE, luaK_codeABx(fs, OP_CLOSURE, 0, fs->np - 1)); + luaK_exp2nextreg(fs, v); /* fix it at the last register */ +} + + +static void open_func (LexState *ls, FuncState *fs, BlockCnt *bl) { + lua_State *L = ls->L; + Proto *f; + fs->prev = ls->fs; /* linked list of funcstates */ + fs->ls = ls; + ls->fs = fs; + fs->pc = 0; + fs->lasttarget = 0; + fs->jpc = NO_JUMP; + fs->freereg = 0; + fs->nk = 0; + fs->np = 0; + fs->nups = 0; + fs->nlocvars = 0; + fs->nactvar = 0; + fs->firstlocal = ls->dyd->actvar.n; + fs->bl = NULL; + f = fs->f; + f->source = ls->source; + f->maxstacksize = 2; /* registers 0/1 are always valid */ + fs->h = luaH_new(L); + /* anchor table of constants (to avoid being collected) */ + sethvalue2s(L, L->top, fs->h); + incr_top(L); + enterblock(fs, bl, 0); +} + + +static void close_func (LexState *ls) { + lua_State *L = ls->L; + FuncState *fs = ls->fs; + Proto *f = fs->f; + luaK_ret(fs, 0, 0); /* final return */ + leaveblock(fs); + luaM_reallocvector(L, f->code, f->sizecode, fs->pc, Instruction); + f->sizecode = fs->pc; + luaM_reallocvector(L, f->lineinfo, f->sizelineinfo, fs->pc, int); + f->sizelineinfo = fs->pc; + luaM_reallocvector(L, f->k, f->sizek, fs->nk, TValue); + f->sizek = fs->nk; + luaM_reallocvector(L, f->p, f->sizep, fs->np, Proto *); + f->sizep = fs->np; + luaM_reallocvector(L, f->locvars, f->sizelocvars, fs->nlocvars, LocVar); + f->sizelocvars = fs->nlocvars; + luaM_reallocvector(L, f->upvalues, f->sizeupvalues, fs->nups, Upvaldesc); + f->sizeupvalues = fs->nups; + lua_assert(fs->bl == NULL); + ls->fs = fs->prev; + /* last token read was anchored in defunct function; must re-anchor it */ + anchor_token(ls); + L->top--; /* pop table of constants */ + luaC_checkGC(L); +} + + + +/*============================================================*/ +/* GRAMMAR RULES */ +/*============================================================*/ + + +/* +** check whether current token is in the follow set of a block. +** 'until' closes syntactical blocks, but do not close scope, +** so it handled in separate. +*/ +static int block_follow (LexState *ls, int withuntil) { + switch (ls->t.token) { + case TK_ELSE: case TK_ELSEIF: + case TK_END: case TK_EOS: + return 1; + case TK_UNTIL: return withuntil; + default: return 0; + } +} + + +static void statlist (LexState *ls) { + /* statlist -> { stat [`;'] } */ + while (!block_follow(ls, 1)) { + if (ls->t.token == TK_RETURN) { + statement(ls); + return; /* 'return' must be last statement */ + } + statement(ls); + } +} + + +static void fieldsel (LexState *ls, expdesc *v) { + /* fieldsel -> ['.' | ':'] NAME */ + FuncState *fs = ls->fs; + expdesc key; + luaK_exp2anyregup(fs, v); + luaX_next(ls); /* skip the dot or colon */ + checkname(ls, &key); + luaK_indexed(fs, v, &key); +} + + +static void yindex (LexState *ls, expdesc *v) { + /* index -> '[' expr ']' */ + luaX_next(ls); /* skip the '[' */ + expr(ls, v); + luaK_exp2val(ls->fs, v); + checknext(ls, ']'); +} + + +/* +** {====================================================================== +** Rules for Constructors +** ======================================================================= +*/ + + +struct ConsControl { + expdesc v; /* last list item read */ + expdesc *t; /* table descriptor */ + int nh; /* total number of `record' elements */ + int na; /* total number of array elements */ + int tostore; /* number of array elements pending to be stored */ +}; + + +static void recfield (LexState *ls, struct ConsControl *cc) { + /* recfield -> (NAME | `['exp1`]') = exp1 */ + FuncState *fs = ls->fs; + int reg = ls->fs->freereg; + expdesc key, val; + int rkkey; + if (ls->t.token == TK_NAME) { + checklimit(fs, cc->nh, MAX_INT, "items in a constructor"); + checkname(ls, &key); + } + else /* ls->t.token == '[' */ + yindex(ls, &key); + cc->nh++; + checknext(ls, '='); + rkkey = luaK_exp2RK(fs, &key); + expr(ls, &val); + luaK_codeABC(fs, OP_SETTABLE, cc->t->u.info, rkkey, luaK_exp2RK(fs, &val)); + fs->freereg = reg; /* free registers */ +} + + +static void closelistfield (FuncState *fs, struct ConsControl *cc) { + if (cc->v.k == VVOID) return; /* there is no list item */ + luaK_exp2nextreg(fs, &cc->v); + cc->v.k = VVOID; + if (cc->tostore == LFIELDS_PER_FLUSH) { + luaK_setlist(fs, cc->t->u.info, cc->na, cc->tostore); /* flush */ + cc->tostore = 0; /* no more items pending */ + } +} + + +static void lastlistfield (FuncState *fs, struct ConsControl *cc) { + if (cc->tostore == 0) return; + if (hasmultret(cc->v.k)) { + luaK_setmultret(fs, &cc->v); + luaK_setlist(fs, cc->t->u.info, cc->na, LUA_MULTRET); + cc->na--; /* do not count last expression (unknown number of elements) */ + } + else { + if (cc->v.k != VVOID) + luaK_exp2nextreg(fs, &cc->v); + luaK_setlist(fs, cc->t->u.info, cc->na, cc->tostore); + } +} + + +static void listfield (LexState *ls, struct ConsControl *cc) { + /* listfield -> exp */ + expr(ls, &cc->v); + checklimit(ls->fs, cc->na, MAX_INT, "items in a constructor"); + cc->na++; + cc->tostore++; +} + + +static void field (LexState *ls, struct ConsControl *cc) { + /* field -> listfield | recfield */ + switch(ls->t.token) { + case TK_NAME: { /* may be 'listfield' or 'recfield' */ + if (luaX_lookahead(ls) != '=') /* expression? */ + listfield(ls, cc); + else + recfield(ls, cc); + break; + } + case '[': { + recfield(ls, cc); + break; + } + default: { + listfield(ls, cc); + break; + } + } +} + + +static void constructor (LexState *ls, expdesc *t) { + /* constructor -> '{' [ field { sep field } [sep] ] '}' + sep -> ',' | ';' */ + FuncState *fs = ls->fs; + int line = ls->linenumber; + int pc = luaK_codeABC(fs, OP_NEWTABLE, 0, 0, 0); + struct ConsControl cc; + cc.na = cc.nh = cc.tostore = 0; + cc.t = t; + init_exp(t, VRELOCABLE, pc); + init_exp(&cc.v, VVOID, 0); /* no value (yet) */ + luaK_exp2nextreg(ls->fs, t); /* fix it at stack top */ + checknext(ls, '{'); + do { + lua_assert(cc.v.k == VVOID || cc.tostore > 0); + if (ls->t.token == '}') break; + closelistfield(fs, &cc); + field(ls, &cc); + } while (testnext(ls, ',') || testnext(ls, ';')); + check_match(ls, '}', '{', line); + lastlistfield(fs, &cc); + SETARG_B(fs->f->code[pc], luaO_int2fb(cc.na)); /* set initial array size */ + SETARG_C(fs->f->code[pc], luaO_int2fb(cc.nh)); /* set initial table size */ +} + +/* }====================================================================== */ + + + +static void parlist (LexState *ls) { + /* parlist -> [ param { `,' param } ] */ + FuncState *fs = ls->fs; + Proto *f = fs->f; + int nparams = 0; + f->is_vararg = 0; + if (ls->t.token != ')') { /* is `parlist' not empty? */ + do { + switch (ls->t.token) { + case TK_NAME: { /* param -> NAME */ + new_localvar(ls, str_checkname(ls)); + nparams++; + break; + } + case TK_DOTS: { /* param -> `...' */ + luaX_next(ls); + f->is_vararg = 1; + break; + } + default: luaX_syntaxerror(ls, " or " LUA_QL("...") " expected"); + } + } while (!f->is_vararg && testnext(ls, ',')); + } + adjustlocalvars(ls, nparams); + f->numparams = cast_byte(fs->nactvar); + luaK_reserveregs(fs, fs->nactvar); /* reserve register for parameters */ +} + + +static void body (LexState *ls, expdesc *e, int ismethod, int line) { + /* body -> `(' parlist `)' block END */ + FuncState new_fs; + BlockCnt bl; + new_fs.f = addprototype(ls); + new_fs.f->linedefined = line; + open_func(ls, &new_fs, &bl); + checknext(ls, '('); + if (ismethod) { + new_localvarliteral(ls, "self"); /* create 'self' parameter */ + adjustlocalvars(ls, 1); + } + parlist(ls); + checknext(ls, ')'); + statlist(ls); + new_fs.f->lastlinedefined = ls->linenumber; + check_match(ls, TK_END, TK_FUNCTION, line); + codeclosure(ls, e); + close_func(ls); +} + + +static int explist (LexState *ls, expdesc *v) { + /* explist -> expr { `,' expr } */ + int n = 1; /* at least one expression */ + expr(ls, v); + while (testnext(ls, ',')) { + luaK_exp2nextreg(ls->fs, v); + expr(ls, v); + n++; + } + return n; +} + + +static void funcargs (LexState *ls, expdesc *f, int line) { + FuncState *fs = ls->fs; + expdesc args; + int base, nparams; + switch (ls->t.token) { + case '(': { /* funcargs -> `(' [ explist ] `)' */ + luaX_next(ls); + if (ls->t.token == ')') /* arg list is empty? */ + args.k = VVOID; + else { + explist(ls, &args); + luaK_setmultret(fs, &args); + } + check_match(ls, ')', '(', line); + break; + } + case '{': { /* funcargs -> constructor */ + constructor(ls, &args); + break; + } + case TK_STRING: { /* funcargs -> STRING */ + codestring(ls, &args, ls->t.seminfo.ts); + luaX_next(ls); /* must use `seminfo' before `next' */ + break; + } + default: { + luaX_syntaxerror(ls, "function arguments expected"); + } + } + lua_assert(f->k == VNONRELOC); + base = f->u.info; /* base register for call */ + if (hasmultret(args.k)) + nparams = LUA_MULTRET; /* open call */ + else { + if (args.k != VVOID) + luaK_exp2nextreg(fs, &args); /* close last argument */ + nparams = fs->freereg - (base+1); + } + init_exp(f, VCALL, luaK_codeABC(fs, OP_CALL, base, nparams+1, 2)); + luaK_fixline(fs, line); + fs->freereg = base+1; /* call remove function and arguments and leaves + (unless changed) one result */ +} + + + + +/* +** {====================================================================== +** Expression parsing +** ======================================================================= +*/ + + +static void primaryexp (LexState *ls, expdesc *v) { + /* primaryexp -> NAME | '(' expr ')' */ + switch (ls->t.token) { + case '(': { + int line = ls->linenumber; + luaX_next(ls); + expr(ls, v); + check_match(ls, ')', '(', line); + luaK_dischargevars(ls->fs, v); + return; + } + case TK_NAME: { + singlevar(ls, v); + return; + } + default: { + luaX_syntaxerror(ls, "unexpected symbol"); + } + } +} + + +static void suffixedexp (LexState *ls, expdesc *v) { + /* suffixedexp -> + primaryexp { '.' NAME | '[' exp ']' | ':' NAME funcargs | funcargs } */ + FuncState *fs = ls->fs; + int line = ls->linenumber; + primaryexp(ls, v); + for (;;) { + switch (ls->t.token) { + case '.': { /* fieldsel */ + fieldsel(ls, v); + break; + } + case '[': { /* `[' exp1 `]' */ + expdesc key; + luaK_exp2anyregup(fs, v); + yindex(ls, &key); + luaK_indexed(fs, v, &key); + break; + } + case ':': { /* `:' NAME funcargs */ + expdesc key; + luaX_next(ls); + checkname(ls, &key); + luaK_self(fs, v, &key); + funcargs(ls, v, line); + break; + } + case '(': case TK_STRING: case '{': { /* funcargs */ + luaK_exp2nextreg(fs, v); + funcargs(ls, v, line); + break; + } + default: return; + } + } +} + + +static void simpleexp (LexState *ls, expdesc *v) { + /* simpleexp -> NUMBER | STRING | NIL | TRUE | FALSE | ... | + constructor | FUNCTION body | suffixedexp */ + switch (ls->t.token) { + case TK_NUMBER: { + init_exp(v, VKNUM, 0); + v->u.nval = ls->t.seminfo.r; + break; + } + case TK_STRING: { + codestring(ls, v, ls->t.seminfo.ts); + break; + } + case TK_NIL: { + init_exp(v, VNIL, 0); + break; + } + case TK_TRUE: { + init_exp(v, VTRUE, 0); + break; + } + case TK_FALSE: { + init_exp(v, VFALSE, 0); + break; + } + case TK_DOTS: { /* vararg */ + FuncState *fs = ls->fs; + check_condition(ls, fs->f->is_vararg, + "cannot use " LUA_QL("...") " outside a vararg function"); + init_exp(v, VVARARG, luaK_codeABC(fs, OP_VARARG, 0, 1, 0)); + break; + } + case '{': { /* constructor */ + constructor(ls, v); + return; + } + case TK_FUNCTION: { + luaX_next(ls); + body(ls, v, 0, ls->linenumber); + return; + } + default: { + suffixedexp(ls, v); + return; + } + } + luaX_next(ls); +} + + +static UnOpr getunopr (int op) { + switch (op) { + case TK_NOT: return OPR_NOT; + case '-': return OPR_MINUS; + case '#': return OPR_LEN; + default: return OPR_NOUNOPR; + } +} + + +static BinOpr getbinopr (int op) { + switch (op) { + case '+': return OPR_ADD; + case '-': return OPR_SUB; + case '*': return OPR_MUL; + case '/': return OPR_DIV; + case '%': return OPR_MOD; + case '^': return OPR_POW; + case TK_CONCAT: return OPR_CONCAT; + case TK_NE: return OPR_NE; + case TK_EQ: return OPR_EQ; + case '<': return OPR_LT; + case TK_LE: return OPR_LE; + case '>': return OPR_GT; + case TK_GE: return OPR_GE; + case TK_AND: return OPR_AND; + case TK_OR: return OPR_OR; + default: return OPR_NOBINOPR; + } +} + + +static const struct { + lu_byte left; /* left priority for each binary operator */ + lu_byte right; /* right priority */ +} priority[] = { /* ORDER OPR */ + {6, 6}, {6, 6}, {7, 7}, {7, 7}, {7, 7}, /* `+' `-' `*' `/' `%' */ + {10, 9}, {5, 4}, /* ^, .. (right associative) */ + {3, 3}, {3, 3}, {3, 3}, /* ==, <, <= */ + {3, 3}, {3, 3}, {3, 3}, /* ~=, >, >= */ + {2, 2}, {1, 1} /* and, or */ +}; + +#define UNARY_PRIORITY 8 /* priority for unary operators */ + + +/* +** subexpr -> (simpleexp | unop subexpr) { binop subexpr } +** where `binop' is any binary operator with a priority higher than `limit' +*/ +static BinOpr subexpr (LexState *ls, expdesc *v, int limit) { + BinOpr op; + UnOpr uop; + enterlevel(ls); + uop = getunopr(ls->t.token); + if (uop != OPR_NOUNOPR) { + int line = ls->linenumber; + luaX_next(ls); + subexpr(ls, v, UNARY_PRIORITY); + luaK_prefix(ls->fs, uop, v, line); + } + else simpleexp(ls, v); + /* expand while operators have priorities higher than `limit' */ + op = getbinopr(ls->t.token); + while (op != OPR_NOBINOPR && priority[op].left > limit) { + expdesc v2; + BinOpr nextop; + int line = ls->linenumber; + luaX_next(ls); + luaK_infix(ls->fs, op, v); + /* read sub-expression with higher priority */ + nextop = subexpr(ls, &v2, priority[op].right); + luaK_posfix(ls->fs, op, v, &v2, line); + op = nextop; + } + leavelevel(ls); + return op; /* return first untreated operator */ +} + + +static void expr (LexState *ls, expdesc *v) { + subexpr(ls, v, 0); +} + +/* }==================================================================== */ + + + +/* +** {====================================================================== +** Rules for Statements +** ======================================================================= +*/ + + +static void block (LexState *ls) { + /* block -> statlist */ + FuncState *fs = ls->fs; + BlockCnt bl; + enterblock(fs, &bl, 0); + statlist(ls); + leaveblock(fs); +} + + +/* +** structure to chain all variables in the left-hand side of an +** assignment +*/ +struct LHS_assign { + struct LHS_assign *prev; + expdesc v; /* variable (global, local, upvalue, or indexed) */ +}; + + +/* +** check whether, in an assignment to an upvalue/local variable, the +** upvalue/local variable is begin used in a previous assignment to a +** table. If so, save original upvalue/local value in a safe place and +** use this safe copy in the previous assignment. +*/ +static void check_conflict (LexState *ls, struct LHS_assign *lh, expdesc *v) { + FuncState *fs = ls->fs; + int extra = fs->freereg; /* eventual position to save local variable */ + int conflict = 0; + for (; lh; lh = lh->prev) { /* check all previous assignments */ + if (lh->v.k == VINDEXED) { /* assigning to a table? */ + /* table is the upvalue/local being assigned now? */ + if (lh->v.u.ind.vt == v->k && lh->v.u.ind.t == v->u.info) { + conflict = 1; + lh->v.u.ind.vt = VLOCAL; + lh->v.u.ind.t = extra; /* previous assignment will use safe copy */ + } + /* index is the local being assigned? (index cannot be upvalue) */ + if (v->k == VLOCAL && lh->v.u.ind.idx == v->u.info) { + conflict = 1; + lh->v.u.ind.idx = extra; /* previous assignment will use safe copy */ + } + } + } + if (conflict) { + /* copy upvalue/local value to a temporary (in position 'extra') */ + OpCode op = (v->k == VLOCAL) ? OP_MOVE : OP_GETUPVAL; + luaK_codeABC(fs, op, extra, v->u.info, 0); + luaK_reserveregs(fs, 1); + } +} + + +static void assignment (LexState *ls, struct LHS_assign *lh, int nvars) { + expdesc e; + check_condition(ls, vkisvar(lh->v.k), "syntax error"); + if (testnext(ls, ',')) { /* assignment -> ',' suffixedexp assignment */ + struct LHS_assign nv; + nv.prev = lh; + suffixedexp(ls, &nv.v); + if (nv.v.k != VINDEXED) + check_conflict(ls, lh, &nv.v); + checklimit(ls->fs, nvars + ls->L->nCcalls, LUAI_MAXCCALLS, + "C levels"); + assignment(ls, &nv, nvars+1); + } + else { /* assignment -> `=' explist */ + int nexps; + checknext(ls, '='); + nexps = explist(ls, &e); + if (nexps != nvars) { + adjust_assign(ls, nvars, nexps, &e); + if (nexps > nvars) + ls->fs->freereg -= nexps - nvars; /* remove extra values */ + } + else { + luaK_setoneret(ls->fs, &e); /* close last expression */ + luaK_storevar(ls->fs, &lh->v, &e); + return; /* avoid default */ + } + } + init_exp(&e, VNONRELOC, ls->fs->freereg-1); /* default assignment */ + luaK_storevar(ls->fs, &lh->v, &e); +} + + +static int cond (LexState *ls) { + /* cond -> exp */ + expdesc v; + expr(ls, &v); /* read condition */ + if (v.k == VNIL) v.k = VFALSE; /* `falses' are all equal here */ + luaK_goiftrue(ls->fs, &v); + return v.f; +} + + +static void gotostat (LexState *ls, int pc) { + int line = ls->linenumber; + TString *label; + int g; + if (testnext(ls, TK_GOTO)) + label = str_checkname(ls); + else { + luaX_next(ls); /* skip break */ + label = luaS_new(ls->L, "break"); + } + g = newlabelentry(ls, &ls->dyd->gt, label, line, pc); + findlabel(ls, g); /* close it if label already defined */ +} + + +/* check for repeated labels on the same block */ +static void checkrepeated (FuncState *fs, Labellist *ll, TString *label) { + int i; + for (i = fs->bl->firstlabel; i < ll->n; i++) { + if (luaS_eqstr(label, ll->arr[i].name)) { + const char *msg = luaO_pushfstring(fs->ls->L, + "label " LUA_QS " already defined on line %d", + getstr(label), ll->arr[i].line); + semerror(fs->ls, msg); + } + } +} + + +/* skip no-op statements */ +static void skipnoopstat (LexState *ls) { + while (ls->t.token == ';' || ls->t.token == TK_DBCOLON) + statement(ls); +} + + +static void labelstat (LexState *ls, TString *label, int line) { + /* label -> '::' NAME '::' */ + FuncState *fs = ls->fs; + Labellist *ll = &ls->dyd->label; + int l; /* index of new label being created */ + checkrepeated(fs, ll, label); /* check for repeated labels */ + checknext(ls, TK_DBCOLON); /* skip double colon */ + /* create new entry for this label */ + l = newlabelentry(ls, ll, label, line, fs->pc); + skipnoopstat(ls); /* skip other no-op statements */ + if (block_follow(ls, 0)) { /* label is last no-op statement in the block? */ + /* assume that locals are already out of scope */ + ll->arr[l].nactvar = fs->bl->nactvar; + } + findgotos(ls, &ll->arr[l]); +} + + +static void whilestat (LexState *ls, int line) { + /* whilestat -> WHILE cond DO block END */ + FuncState *fs = ls->fs; + int whileinit; + int condexit; + BlockCnt bl; + luaX_next(ls); /* skip WHILE */ + whileinit = luaK_getlabel(fs); + condexit = cond(ls); + enterblock(fs, &bl, 1); + checknext(ls, TK_DO); + block(ls); + luaK_jumpto(fs, whileinit); + check_match(ls, TK_END, TK_WHILE, line); + leaveblock(fs); + luaK_patchtohere(fs, condexit); /* false conditions finish the loop */ +} + + +static void repeatstat (LexState *ls, int line) { + /* repeatstat -> REPEAT block UNTIL cond */ + int condexit; + FuncState *fs = ls->fs; + int repeat_init = luaK_getlabel(fs); + BlockCnt bl1, bl2; + enterblock(fs, &bl1, 1); /* loop block */ + enterblock(fs, &bl2, 0); /* scope block */ + luaX_next(ls); /* skip REPEAT */ + statlist(ls); + check_match(ls, TK_UNTIL, TK_REPEAT, line); + condexit = cond(ls); /* read condition (inside scope block) */ + if (bl2.upval) /* upvalues? */ + luaK_patchclose(fs, condexit, bl2.nactvar); + leaveblock(fs); /* finish scope */ + luaK_patchlist(fs, condexit, repeat_init); /* close the loop */ + leaveblock(fs); /* finish loop */ +} + + +static int exp1 (LexState *ls) { + expdesc e; + int reg; + expr(ls, &e); + luaK_exp2nextreg(ls->fs, &e); + lua_assert(e.k == VNONRELOC); + reg = e.u.info; + return reg; +} + + +static void forbody (LexState *ls, int base, int line, int nvars, int isnum) { + /* forbody -> DO block */ + BlockCnt bl; + FuncState *fs = ls->fs; + int prep, endfor; + adjustlocalvars(ls, 3); /* control variables */ + checknext(ls, TK_DO); + prep = isnum ? luaK_codeAsBx(fs, OP_FORPREP, base, NO_JUMP) : luaK_jump(fs); + enterblock(fs, &bl, 0); /* scope for declared variables */ + adjustlocalvars(ls, nvars); + luaK_reserveregs(fs, nvars); + block(ls); + leaveblock(fs); /* end of scope for declared variables */ + luaK_patchtohere(fs, prep); + if (isnum) /* numeric for? */ + endfor = luaK_codeAsBx(fs, OP_FORLOOP, base, NO_JUMP); + else { /* generic for */ + luaK_codeABC(fs, OP_TFORCALL, base, 0, nvars); + luaK_fixline(fs, line); + endfor = luaK_codeAsBx(fs, OP_TFORLOOP, base + 2, NO_JUMP); + } + luaK_patchlist(fs, endfor, prep + 1); + luaK_fixline(fs, line); +} + + +static void fornum (LexState *ls, TString *varname, int line) { + /* fornum -> NAME = exp1,exp1[,exp1] forbody */ + FuncState *fs = ls->fs; + int base = fs->freereg; + new_localvarliteral(ls, "(for index)"); + new_localvarliteral(ls, "(for limit)"); + new_localvarliteral(ls, "(for step)"); + new_localvar(ls, varname); + checknext(ls, '='); + exp1(ls); /* initial value */ + checknext(ls, ','); + exp1(ls); /* limit */ + if (testnext(ls, ',')) + exp1(ls); /* optional step */ + else { /* default step = 1 */ + luaK_codek(fs, fs->freereg, luaK_numberK(fs, 1)); + luaK_reserveregs(fs, 1); + } + forbody(ls, base, line, 1, 1); +} + + +static void forlist (LexState *ls, TString *indexname) { + /* forlist -> NAME {,NAME} IN explist forbody */ + FuncState *fs = ls->fs; + expdesc e; + int nvars = 4; /* gen, state, control, plus at least one declared var */ + int line; + int base = fs->freereg; + /* create control variables */ + new_localvarliteral(ls, "(for generator)"); + new_localvarliteral(ls, "(for state)"); + new_localvarliteral(ls, "(for control)"); + /* create declared variables */ + new_localvar(ls, indexname); + while (testnext(ls, ',')) { + new_localvar(ls, str_checkname(ls)); + nvars++; + } + checknext(ls, TK_IN); + line = ls->linenumber; + adjust_assign(ls, 3, explist(ls, &e), &e); + luaK_checkstack(fs, 3); /* extra space to call generator */ + forbody(ls, base, line, nvars - 3, 0); +} + + +static void forstat (LexState *ls, int line) { + /* forstat -> FOR (fornum | forlist) END */ + FuncState *fs = ls->fs; + TString *varname; + BlockCnt bl; + enterblock(fs, &bl, 1); /* scope for loop and control variables */ + luaX_next(ls); /* skip `for' */ + varname = str_checkname(ls); /* first variable name */ + switch (ls->t.token) { + case '=': fornum(ls, varname, line); break; + case ',': case TK_IN: forlist(ls, varname); break; + default: luaX_syntaxerror(ls, LUA_QL("=") " or " LUA_QL("in") " expected"); + } + check_match(ls, TK_END, TK_FOR, line); + leaveblock(fs); /* loop scope (`break' jumps to this point) */ +} + + +static void test_then_block (LexState *ls, int *escapelist) { + /* test_then_block -> [IF | ELSEIF] cond THEN block */ + BlockCnt bl; + FuncState *fs = ls->fs; + expdesc v; + int jf; /* instruction to skip 'then' code (if condition is false) */ + luaX_next(ls); /* skip IF or ELSEIF */ + expr(ls, &v); /* read condition */ + checknext(ls, TK_THEN); + if (ls->t.token == TK_GOTO || ls->t.token == TK_BREAK) { + luaK_goiffalse(ls->fs, &v); /* will jump to label if condition is true */ + enterblock(fs, &bl, 0); /* must enter block before 'goto' */ + gotostat(ls, v.t); /* handle goto/break */ + skipnoopstat(ls); /* skip other no-op statements */ + if (block_follow(ls, 0)) { /* 'goto' is the entire block? */ + leaveblock(fs); + return; /* and that is it */ + } + else /* must skip over 'then' part if condition is false */ + jf = luaK_jump(fs); + } + else { /* regular case (not goto/break) */ + luaK_goiftrue(ls->fs, &v); /* skip over block if condition is false */ + enterblock(fs, &bl, 0); + jf = v.f; + } + statlist(ls); /* `then' part */ + leaveblock(fs); + if (ls->t.token == TK_ELSE || + ls->t.token == TK_ELSEIF) /* followed by 'else'/'elseif'? */ + luaK_concat(fs, escapelist, luaK_jump(fs)); /* must jump over it */ + luaK_patchtohere(fs, jf); +} + + +static void ifstat (LexState *ls, int line) { + /* ifstat -> IF cond THEN block {ELSEIF cond THEN block} [ELSE block] END */ + FuncState *fs = ls->fs; + int escapelist = NO_JUMP; /* exit list for finished parts */ + test_then_block(ls, &escapelist); /* IF cond THEN block */ + while (ls->t.token == TK_ELSEIF) + test_then_block(ls, &escapelist); /* ELSEIF cond THEN block */ + if (testnext(ls, TK_ELSE)) + block(ls); /* `else' part */ + check_match(ls, TK_END, TK_IF, line); + luaK_patchtohere(fs, escapelist); /* patch escape list to 'if' end */ +} + + +static void localfunc (LexState *ls) { + expdesc b; + FuncState *fs = ls->fs; + new_localvar(ls, str_checkname(ls)); /* new local variable */ + adjustlocalvars(ls, 1); /* enter its scope */ + body(ls, &b, 0, ls->linenumber); /* function created in next register */ + /* debug information will only see the variable after this point! */ + getlocvar(fs, b.u.info)->startpc = fs->pc; +} + + +static void localstat (LexState *ls) { + /* stat -> LOCAL NAME {`,' NAME} [`=' explist] */ + int nvars = 0; + int nexps; + expdesc e; + do { + new_localvar(ls, str_checkname(ls)); + nvars++; + } while (testnext(ls, ',')); + if (testnext(ls, '=')) + nexps = explist(ls, &e); + else { + e.k = VVOID; + nexps = 0; + } + adjust_assign(ls, nvars, nexps, &e); + adjustlocalvars(ls, nvars); +} + + +static int funcname (LexState *ls, expdesc *v) { + /* funcname -> NAME {fieldsel} [`:' NAME] */ + int ismethod = 0; + singlevar(ls, v); + while (ls->t.token == '.') + fieldsel(ls, v); + if (ls->t.token == ':') { + ismethod = 1; + fieldsel(ls, v); + } + return ismethod; +} + + +static void funcstat (LexState *ls, int line) { + /* funcstat -> FUNCTION funcname body */ + int ismethod; + expdesc v, b; + luaX_next(ls); /* skip FUNCTION */ + ismethod = funcname(ls, &v); + body(ls, &b, ismethod, line); + luaK_storevar(ls->fs, &v, &b); + luaK_fixline(ls->fs, line); /* definition `happens' in the first line */ +} + + +static void exprstat (LexState *ls) { + /* stat -> func | assignment */ + FuncState *fs = ls->fs; + struct LHS_assign v; + suffixedexp(ls, &v.v); + if (ls->t.token == '=' || ls->t.token == ',') { /* stat -> assignment ? */ + v.prev = NULL; + assignment(ls, &v, 1); + } + else { /* stat -> func */ + check_condition(ls, v.v.k == VCALL, "syntax error"); + SETARG_C(getcode(fs, &v.v), 1); /* call statement uses no results */ + } +} + + +static void retstat (LexState *ls) { + /* stat -> RETURN [explist] [';'] */ + FuncState *fs = ls->fs; + expdesc e; + int first, nret; /* registers with returned values */ + if (block_follow(ls, 1) || ls->t.token == ';') + first = nret = 0; /* return no values */ + else { + nret = explist(ls, &e); /* optional return values */ + if (hasmultret(e.k)) { + luaK_setmultret(fs, &e); + if (e.k == VCALL && nret == 1) { /* tail call? */ + SET_OPCODE(getcode(fs,&e), OP_TAILCALL); + lua_assert(GETARG_A(getcode(fs,&e)) == fs->nactvar); + } + first = fs->nactvar; + nret = LUA_MULTRET; /* return all values */ + } + else { + if (nret == 1) /* only one single value? */ + first = luaK_exp2anyreg(fs, &e); + else { + luaK_exp2nextreg(fs, &e); /* values must go to the `stack' */ + first = fs->nactvar; /* return all `active' values */ + lua_assert(nret == fs->freereg - first); + } + } + } + luaK_ret(fs, first, nret); + testnext(ls, ';'); /* skip optional semicolon */ +} + + +static void statement (LexState *ls) { + int line = ls->linenumber; /* may be needed for error messages */ + enterlevel(ls); + switch (ls->t.token) { + case ';': { /* stat -> ';' (empty statement) */ + luaX_next(ls); /* skip ';' */ + break; + } + case TK_IF: { /* stat -> ifstat */ + ifstat(ls, line); + break; + } + case TK_WHILE: { /* stat -> whilestat */ + whilestat(ls, line); + break; + } + case TK_DO: { /* stat -> DO block END */ + luaX_next(ls); /* skip DO */ + block(ls); + check_match(ls, TK_END, TK_DO, line); + break; + } + case TK_FOR: { /* stat -> forstat */ + forstat(ls, line); + break; + } + case TK_REPEAT: { /* stat -> repeatstat */ + repeatstat(ls, line); + break; + } + case TK_FUNCTION: { /* stat -> funcstat */ + funcstat(ls, line); + break; + } + case TK_LOCAL: { /* stat -> localstat */ + luaX_next(ls); /* skip LOCAL */ + if (testnext(ls, TK_FUNCTION)) /* local function? */ + localfunc(ls); + else + localstat(ls); + break; + } + case TK_DBCOLON: { /* stat -> label */ + luaX_next(ls); /* skip double colon */ + labelstat(ls, str_checkname(ls), line); + break; + } + case TK_RETURN: { /* stat -> retstat */ + luaX_next(ls); /* skip RETURN */ + retstat(ls); + break; + } + case TK_BREAK: /* stat -> breakstat */ + case TK_GOTO: { /* stat -> 'goto' NAME */ + gotostat(ls, luaK_jump(ls->fs)); + break; + } + default: { /* stat -> func | assignment */ + exprstat(ls); + break; + } + } + lua_assert(ls->fs->f->maxstacksize >= ls->fs->freereg && + ls->fs->freereg >= ls->fs->nactvar); + ls->fs->freereg = ls->fs->nactvar; /* free registers */ + leavelevel(ls); +} + +/* }====================================================================== */ + + +/* +** compiles the main function, which is a regular vararg function with an +** upvalue named LUA_ENV +*/ +static void mainfunc (LexState *ls, FuncState *fs) { + BlockCnt bl; + expdesc v; + open_func(ls, fs, &bl); + fs->f->is_vararg = 1; /* main function is always vararg */ + init_exp(&v, VLOCAL, 0); /* create and... */ + newupvalue(fs, ls->envn, &v); /* ...set environment upvalue */ + luaX_next(ls); /* read first token */ + statlist(ls); /* parse main body */ + check(ls, TK_EOS); + close_func(ls); +} + + +Closure *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff, + Dyndata *dyd, const char *name, int firstchar) { + LexState lexstate; + FuncState funcstate; + Closure *cl = luaF_newLclosure(L, 1); /* create main closure */ + /* anchor closure (to avoid being collected) */ + setclLvalue(L, L->top, cl); + incr_top(L); + funcstate.f = cl->l.p = luaF_newproto(L); + funcstate.f->source = luaS_new(L, name); /* create and anchor TString */ + lexstate.buff = buff; + lexstate.dyd = dyd; + dyd->actvar.n = dyd->gt.n = dyd->label.n = 0; + luaX_setinput(L, &lexstate, z, funcstate.f->source, firstchar); + mainfunc(&lexstate, &funcstate); + lua_assert(!funcstate.prev && funcstate.nups == 1 && !lexstate.fs); + /* all scopes should be correctly finished */ + lua_assert(dyd->actvar.n == 0 && dyd->gt.n == 0 && dyd->label.n == 0); + return cl; /* it's on the stack too */ +} + diff --git a/lua-5.2.4/src/lparser.h b/lua-5.2.4/src/lparser.h new file mode 100644 index 000000000..0346e3c41 --- /dev/null +++ b/lua-5.2.4/src/lparser.h @@ -0,0 +1,119 @@ +/* +** $Id: lparser.h,v 1.70.1.1 2013/04/12 18:48:47 roberto Exp $ +** Lua Parser +** See Copyright Notice in lua.h +*/ + +#ifndef lparser_h +#define lparser_h + +#include "llimits.h" +#include "lobject.h" +#include "lzio.h" + + +/* +** Expression descriptor +*/ + +typedef enum { + VVOID, /* no value */ + VNIL, + VTRUE, + VFALSE, + VK, /* info = index of constant in `k' */ + VKNUM, /* nval = numerical value */ + VNONRELOC, /* info = result register */ + VLOCAL, /* info = local register */ + VUPVAL, /* info = index of upvalue in 'upvalues' */ + VINDEXED, /* t = table register/upvalue; idx = index R/K */ + VJMP, /* info = instruction pc */ + VRELOCABLE, /* info = instruction pc */ + VCALL, /* info = instruction pc */ + VVARARG /* info = instruction pc */ +} expkind; + + +#define vkisvar(k) (VLOCAL <= (k) && (k) <= VINDEXED) +#define vkisinreg(k) ((k) == VNONRELOC || (k) == VLOCAL) + +typedef struct expdesc { + expkind k; + union { + struct { /* for indexed variables (VINDEXED) */ + short idx; /* index (R/K) */ + lu_byte t; /* table (register or upvalue) */ + lu_byte vt; /* whether 't' is register (VLOCAL) or upvalue (VUPVAL) */ + } ind; + int info; /* for generic use */ + lua_Number nval; /* for VKNUM */ + } u; + int t; /* patch list of `exit when true' */ + int f; /* patch list of `exit when false' */ +} expdesc; + + +/* description of active local variable */ +typedef struct Vardesc { + short idx; /* variable index in stack */ +} Vardesc; + + +/* description of pending goto statements and label statements */ +typedef struct Labeldesc { + TString *name; /* label identifier */ + int pc; /* position in code */ + int line; /* line where it appeared */ + lu_byte nactvar; /* local level where it appears in current block */ +} Labeldesc; + + +/* list of labels or gotos */ +typedef struct Labellist { + Labeldesc *arr; /* array */ + int n; /* number of entries in use */ + int size; /* array size */ +} Labellist; + + +/* dynamic structures used by the parser */ +typedef struct Dyndata { + struct { /* list of active local variables */ + Vardesc *arr; + int n; + int size; + } actvar; + Labellist gt; /* list of pending gotos */ + Labellist label; /* list of active labels */ +} Dyndata; + + +/* control of blocks */ +struct BlockCnt; /* defined in lparser.c */ + + +/* state needed to generate code for a given function */ +typedef struct FuncState { + Proto *f; /* current function header */ + Table *h; /* table to find (and reuse) elements in `k' */ + struct FuncState *prev; /* enclosing function */ + struct LexState *ls; /* lexical state */ + struct BlockCnt *bl; /* chain of current blocks */ + int pc; /* next position to code (equivalent to `ncode') */ + int lasttarget; /* 'label' of last 'jump label' */ + int jpc; /* list of pending jumps to `pc' */ + int nk; /* number of elements in `k' */ + int np; /* number of elements in `p' */ + int firstlocal; /* index of first local var (in Dyndata array) */ + short nlocvars; /* number of elements in 'f->locvars' */ + lu_byte nactvar; /* number of active local variables */ + lu_byte nups; /* number of upvalues */ + lu_byte freereg; /* first free register */ +} FuncState; + + +LUAI_FUNC Closure *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff, + Dyndata *dyd, const char *name, int firstchar); + + +#endif diff --git a/lua-5.2.4/src/lstate.c b/lua-5.2.4/src/lstate.c new file mode 100644 index 000000000..c7f2672be --- /dev/null +++ b/lua-5.2.4/src/lstate.c @@ -0,0 +1,323 @@ +/* +** $Id: lstate.c,v 2.99.1.2 2013/11/08 17:45:31 roberto Exp $ +** Global State +** See Copyright Notice in lua.h +*/ + + +#include +#include + +#define lstate_c +#define LUA_CORE + +#include "lua.h" + +#include "lapi.h" +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "lgc.h" +#include "llex.h" +#include "lmem.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "ltm.h" + + +#if !defined(LUAI_GCPAUSE) +#define LUAI_GCPAUSE 200 /* 200% */ +#endif + +#if !defined(LUAI_GCMAJOR) +#define LUAI_GCMAJOR 200 /* 200% */ +#endif + +#if !defined(LUAI_GCMUL) +#define LUAI_GCMUL 200 /* GC runs 'twice the speed' of memory allocation */ +#endif + + +#define MEMERRMSG "not enough memory" + + +/* +** a macro to help the creation of a unique random seed when a state is +** created; the seed is used to randomize hashes. +*/ +#if !defined(luai_makeseed) +#include +#define luai_makeseed() cast(unsigned int, time(NULL)) +#endif + + + +/* +** thread state + extra space +*/ +typedef struct LX { +#if defined(LUAI_EXTRASPACE) + char buff[LUAI_EXTRASPACE]; +#endif + lua_State l; +} LX; + + +/* +** Main thread combines a thread state and the global state +*/ +typedef struct LG { + LX l; + global_State g; +} LG; + + + +#define fromstate(L) (cast(LX *, cast(lu_byte *, (L)) - offsetof(LX, l))) + + +/* +** Compute an initial seed as random as possible. In ANSI, rely on +** Address Space Layout Randomization (if present) to increase +** randomness.. +*/ +#define addbuff(b,p,e) \ + { size_t t = cast(size_t, e); \ + memcpy(buff + p, &t, sizeof(t)); p += sizeof(t); } + +static unsigned int makeseed (lua_State *L) { + char buff[4 * sizeof(size_t)]; + unsigned int h = luai_makeseed(); + int p = 0; + addbuff(buff, p, L); /* heap variable */ + addbuff(buff, p, &h); /* local variable */ + addbuff(buff, p, luaO_nilobject); /* global variable */ + addbuff(buff, p, &lua_newstate); /* public function */ + lua_assert(p == sizeof(buff)); + return luaS_hash(buff, p, h); +} + + +/* +** set GCdebt to a new value keeping the value (totalbytes + GCdebt) +** invariant +*/ +void luaE_setdebt (global_State *g, l_mem debt) { + g->totalbytes -= (debt - g->GCdebt); + g->GCdebt = debt; +} + + +CallInfo *luaE_extendCI (lua_State *L) { + CallInfo *ci = luaM_new(L, CallInfo); + lua_assert(L->ci->next == NULL); + L->ci->next = ci; + ci->previous = L->ci; + ci->next = NULL; + return ci; +} + + +void luaE_freeCI (lua_State *L) { + CallInfo *ci = L->ci; + CallInfo *next = ci->next; + ci->next = NULL; + while ((ci = next) != NULL) { + next = ci->next; + luaM_free(L, ci); + } +} + + +static void stack_init (lua_State *L1, lua_State *L) { + int i; CallInfo *ci; + /* initialize stack array */ + L1->stack = luaM_newvector(L, BASIC_STACK_SIZE, TValue); + L1->stacksize = BASIC_STACK_SIZE; + for (i = 0; i < BASIC_STACK_SIZE; i++) + setnilvalue(L1->stack + i); /* erase new stack */ + L1->top = L1->stack; + L1->stack_last = L1->stack + L1->stacksize - EXTRA_STACK; + /* initialize first ci */ + ci = &L1->base_ci; + ci->next = ci->previous = NULL; + ci->callstatus = 0; + ci->func = L1->top; + setnilvalue(L1->top++); /* 'function' entry for this 'ci' */ + ci->top = L1->top + LUA_MINSTACK; + L1->ci = ci; +} + + +static void freestack (lua_State *L) { + if (L->stack == NULL) + return; /* stack not completely built yet */ + L->ci = &L->base_ci; /* free the entire 'ci' list */ + luaE_freeCI(L); + luaM_freearray(L, L->stack, L->stacksize); /* free stack array */ +} + + +/* +** Create registry table and its predefined values +*/ +static void init_registry (lua_State *L, global_State *g) { + TValue mt; + /* create registry */ + Table *registry = luaH_new(L); + sethvalue(L, &g->l_registry, registry); + luaH_resize(L, registry, LUA_RIDX_LAST, 0); + /* registry[LUA_RIDX_MAINTHREAD] = L */ + setthvalue(L, &mt, L); + luaH_setint(L, registry, LUA_RIDX_MAINTHREAD, &mt); + /* registry[LUA_RIDX_GLOBALS] = table of globals */ + sethvalue(L, &mt, luaH_new(L)); + luaH_setint(L, registry, LUA_RIDX_GLOBALS, &mt); +} + + +/* +** open parts of the state that may cause memory-allocation errors +*/ +static void f_luaopen (lua_State *L, void *ud) { + global_State *g = G(L); + UNUSED(ud); + stack_init(L, L); /* init stack */ + init_registry(L, g); + luaS_resize(L, MINSTRTABSIZE); /* initial size of string table */ + luaT_init(L); + luaX_init(L); + /* pre-create memory-error message */ + g->memerrmsg = luaS_newliteral(L, MEMERRMSG); + luaS_fix(g->memerrmsg); /* it should never be collected */ + g->gcrunning = 1; /* allow gc */ + g->version = lua_version(NULL); + luai_userstateopen(L); +} + + +/* +** preinitialize a state with consistent values without allocating +** any memory (to avoid errors) +*/ +static void preinit_state (lua_State *L, global_State *g) { + G(L) = g; + L->stack = NULL; + L->ci = NULL; + L->stacksize = 0; + L->errorJmp = NULL; + L->nCcalls = 0; + L->hook = NULL; + L->hookmask = 0; + L->basehookcount = 0; + L->allowhook = 1; + resethookcount(L); + L->openupval = NULL; + L->nny = 1; + L->status = LUA_OK; + L->errfunc = 0; +} + + +static void close_state (lua_State *L) { + global_State *g = G(L); + luaF_close(L, L->stack); /* close all upvalues for this thread */ + luaC_freeallobjects(L); /* collect all objects */ + if (g->version) /* closing a fully built state? */ + luai_userstateclose(L); + luaM_freearray(L, G(L)->strt.hash, G(L)->strt.size); + luaZ_freebuffer(L, &g->buff); + freestack(L); + lua_assert(gettotalbytes(g) == sizeof(LG)); + (*g->frealloc)(g->ud, fromstate(L), sizeof(LG), 0); /* free main block */ +} + + +LUA_API lua_State *lua_newthread (lua_State *L) { + lua_State *L1; + lua_lock(L); + luaC_checkGC(L); + L1 = &luaC_newobj(L, LUA_TTHREAD, sizeof(LX), NULL, offsetof(LX, l))->th; + setthvalue(L, L->top, L1); + api_incr_top(L); + preinit_state(L1, G(L)); + L1->hookmask = L->hookmask; + L1->basehookcount = L->basehookcount; + L1->hook = L->hook; + resethookcount(L1); + luai_userstatethread(L, L1); + stack_init(L1, L); /* init stack */ + lua_unlock(L); + return L1; +} + + +void luaE_freethread (lua_State *L, lua_State *L1) { + LX *l = fromstate(L1); + luaF_close(L1, L1->stack); /* close all upvalues for this thread */ + lua_assert(L1->openupval == NULL); + luai_userstatefree(L, L1); + freestack(L1); + luaM_free(L, l); +} + + +LUA_API lua_State *lua_newstate (lua_Alloc f, void *ud) { + int i; + lua_State *L; + global_State *g; + LG *l = cast(LG *, (*f)(ud, NULL, LUA_TTHREAD, sizeof(LG))); + if (l == NULL) return NULL; + L = &l->l.l; + g = &l->g; + L->next = NULL; + L->tt = LUA_TTHREAD; + g->currentwhite = bit2mask(WHITE0BIT, FIXEDBIT); + L->marked = luaC_white(g); + g->gckind = KGC_NORMAL; + preinit_state(L, g); + g->frealloc = f; + g->ud = ud; + g->mainthread = L; + g->seed = makeseed(L); + g->uvhead.u.l.prev = &g->uvhead; + g->uvhead.u.l.next = &g->uvhead; + g->gcrunning = 0; /* no GC while building state */ + g->GCestimate = 0; + g->strt.size = 0; + g->strt.nuse = 0; + g->strt.hash = NULL; + setnilvalue(&g->l_registry); + luaZ_initbuffer(L, &g->buff); + g->panic = NULL; + g->version = NULL; + g->gcstate = GCSpause; + g->allgc = NULL; + g->finobj = NULL; + g->tobefnz = NULL; + g->sweepgc = g->sweepfin = NULL; + g->gray = g->grayagain = NULL; + g->weak = g->ephemeron = g->allweak = NULL; + g->totalbytes = sizeof(LG); + g->GCdebt = 0; + g->gcpause = LUAI_GCPAUSE; + g->gcmajorinc = LUAI_GCMAJOR; + g->gcstepmul = LUAI_GCMUL; + for (i=0; i < LUA_NUMTAGS; i++) g->mt[i] = NULL; + if (luaD_rawrunprotected(L, f_luaopen, NULL) != LUA_OK) { + /* memory allocation error: free partial state */ + close_state(L); + L = NULL; + } + return L; +} + + +LUA_API void lua_close (lua_State *L) { + L = G(L)->mainthread; /* only the main thread can be closed */ + lua_lock(L); + close_state(L); +} + + diff --git a/lua-5.2.4/src/lstate.h b/lua-5.2.4/src/lstate.h new file mode 100644 index 000000000..daffd9aac --- /dev/null +++ b/lua-5.2.4/src/lstate.h @@ -0,0 +1,228 @@ +/* +** $Id: lstate.h,v 2.82.1.1 2013/04/12 18:48:47 roberto Exp $ +** Global State +** See Copyright Notice in lua.h +*/ + +#ifndef lstate_h +#define lstate_h + +#include "lua.h" + +#include "lobject.h" +#include "ltm.h" +#include "lzio.h" + + +/* + +** Some notes about garbage-collected objects: All objects in Lua must +** be kept somehow accessible until being freed. +** +** Lua keeps most objects linked in list g->allgc. The link uses field +** 'next' of the CommonHeader. +** +** Strings are kept in several lists headed by the array g->strt.hash. +** +** Open upvalues are not subject to independent garbage collection. They +** are collected together with their respective threads. Lua keeps a +** double-linked list with all open upvalues (g->uvhead) so that it can +** mark objects referred by them. (They are always gray, so they must +** be remarked in the atomic step. Usually their contents would be marked +** when traversing the respective threads, but the thread may already be +** dead, while the upvalue is still accessible through closures.) +** +** Objects with finalizers are kept in the list g->finobj. +** +** The list g->tobefnz links all objects being finalized. + +*/ + + +struct lua_longjmp; /* defined in ldo.c */ + + + +/* extra stack space to handle TM calls and some other extras */ +#define EXTRA_STACK 5 + + +#define BASIC_STACK_SIZE (2*LUA_MINSTACK) + + +/* kinds of Garbage Collection */ +#define KGC_NORMAL 0 +#define KGC_EMERGENCY 1 /* gc was forced by an allocation failure */ +#define KGC_GEN 2 /* generational collection */ + + +typedef struct stringtable { + GCObject **hash; + lu_int32 nuse; /* number of elements */ + int size; +} stringtable; + + +/* +** information about a call +*/ +typedef struct CallInfo { + StkId func; /* function index in the stack */ + StkId top; /* top for this function */ + struct CallInfo *previous, *next; /* dynamic call link */ + short nresults; /* expected number of results from this function */ + lu_byte callstatus; + ptrdiff_t extra; + union { + struct { /* only for Lua functions */ + StkId base; /* base for this function */ + const Instruction *savedpc; + } l; + struct { /* only for C functions */ + int ctx; /* context info. in case of yields */ + lua_CFunction k; /* continuation in case of yields */ + ptrdiff_t old_errfunc; + lu_byte old_allowhook; + lu_byte status; + } c; + } u; +} CallInfo; + + +/* +** Bits in CallInfo status +*/ +#define CIST_LUA (1<<0) /* call is running a Lua function */ +#define CIST_HOOKED (1<<1) /* call is running a debug hook */ +#define CIST_REENTRY (1<<2) /* call is running on same invocation of + luaV_execute of previous call */ +#define CIST_YIELDED (1<<3) /* call reentered after suspension */ +#define CIST_YPCALL (1<<4) /* call is a yieldable protected call */ +#define CIST_STAT (1<<5) /* call has an error status (pcall) */ +#define CIST_TAIL (1<<6) /* call was tail called */ +#define CIST_HOOKYIELD (1<<7) /* last hook called yielded */ + + +#define isLua(ci) ((ci)->callstatus & CIST_LUA) + + +/* +** `global state', shared by all threads of this state +*/ +typedef struct global_State { + lua_Alloc frealloc; /* function to reallocate memory */ + void *ud; /* auxiliary data to `frealloc' */ + lu_mem totalbytes; /* number of bytes currently allocated - GCdebt */ + l_mem GCdebt; /* bytes allocated not yet compensated by the collector */ + lu_mem GCmemtrav; /* memory traversed by the GC */ + lu_mem GCestimate; /* an estimate of the non-garbage memory in use */ + stringtable strt; /* hash table for strings */ + TValue l_registry; + unsigned int seed; /* randomized seed for hashes */ + lu_byte currentwhite; + lu_byte gcstate; /* state of garbage collector */ + lu_byte gckind; /* kind of GC running */ + lu_byte gcrunning; /* true if GC is running */ + int sweepstrgc; /* position of sweep in `strt' */ + GCObject *allgc; /* list of all collectable objects */ + GCObject *finobj; /* list of collectable objects with finalizers */ + GCObject **sweepgc; /* current position of sweep in list 'allgc' */ + GCObject **sweepfin; /* current position of sweep in list 'finobj' */ + GCObject *gray; /* list of gray objects */ + GCObject *grayagain; /* list of objects to be traversed atomically */ + GCObject *weak; /* list of tables with weak values */ + GCObject *ephemeron; /* list of ephemeron tables (weak keys) */ + GCObject *allweak; /* list of all-weak tables */ + GCObject *tobefnz; /* list of userdata to be GC */ + UpVal uvhead; /* head of double-linked list of all open upvalues */ + Mbuffer buff; /* temporary buffer for string concatenation */ + int gcpause; /* size of pause between successive GCs */ + int gcmajorinc; /* pause between major collections (only in gen. mode) */ + int gcstepmul; /* GC `granularity' */ + lua_CFunction panic; /* to be called in unprotected errors */ + struct lua_State *mainthread; + const lua_Number *version; /* pointer to version number */ + TString *memerrmsg; /* memory-error message */ + TString *tmname[TM_N]; /* array with tag-method names */ + struct Table *mt[LUA_NUMTAGS]; /* metatables for basic types */ +} global_State; + + +/* +** `per thread' state +*/ +struct lua_State { + CommonHeader; + lu_byte status; + StkId top; /* first free slot in the stack */ + global_State *l_G; + CallInfo *ci; /* call info for current function */ + const Instruction *oldpc; /* last pc traced */ + StkId stack_last; /* last free slot in the stack */ + StkId stack; /* stack base */ + int stacksize; + unsigned short nny; /* number of non-yieldable calls in stack */ + unsigned short nCcalls; /* number of nested C calls */ + lu_byte hookmask; + lu_byte allowhook; + int basehookcount; + int hookcount; + lua_Hook hook; + GCObject *openupval; /* list of open upvalues in this stack */ + GCObject *gclist; + struct lua_longjmp *errorJmp; /* current error recover point */ + ptrdiff_t errfunc; /* current error handling function (stack index) */ + CallInfo base_ci; /* CallInfo for first level (C calling Lua) */ +}; + + +#define G(L) (L->l_G) + + +/* +** Union of all collectable objects +*/ +union GCObject { + GCheader gch; /* common header */ + union TString ts; + union Udata u; + union Closure cl; + struct Table h; + struct Proto p; + struct UpVal uv; + struct lua_State th; /* thread */ +}; + + +#define gch(o) (&(o)->gch) + +/* macros to convert a GCObject into a specific value */ +#define rawgco2ts(o) \ + check_exp(novariant((o)->gch.tt) == LUA_TSTRING, &((o)->ts)) +#define gco2ts(o) (&rawgco2ts(o)->tsv) +#define rawgco2u(o) check_exp((o)->gch.tt == LUA_TUSERDATA, &((o)->u)) +#define gco2u(o) (&rawgco2u(o)->uv) +#define gco2lcl(o) check_exp((o)->gch.tt == LUA_TLCL, &((o)->cl.l)) +#define gco2ccl(o) check_exp((o)->gch.tt == LUA_TCCL, &((o)->cl.c)) +#define gco2cl(o) \ + check_exp(novariant((o)->gch.tt) == LUA_TFUNCTION, &((o)->cl)) +#define gco2t(o) check_exp((o)->gch.tt == LUA_TTABLE, &((o)->h)) +#define gco2p(o) check_exp((o)->gch.tt == LUA_TPROTO, &((o)->p)) +#define gco2uv(o) check_exp((o)->gch.tt == LUA_TUPVAL, &((o)->uv)) +#define gco2th(o) check_exp((o)->gch.tt == LUA_TTHREAD, &((o)->th)) + +/* macro to convert any Lua object into a GCObject */ +#define obj2gco(v) (cast(GCObject *, (v))) + + +/* actual number of total bytes allocated */ +#define gettotalbytes(g) ((g)->totalbytes + (g)->GCdebt) + +LUAI_FUNC void luaE_setdebt (global_State *g, l_mem debt); +LUAI_FUNC void luaE_freethread (lua_State *L, lua_State *L1); +LUAI_FUNC CallInfo *luaE_extendCI (lua_State *L); +LUAI_FUNC void luaE_freeCI (lua_State *L); + + +#endif + diff --git a/lua-5.2.4/src/lstring.c b/lua-5.2.4/src/lstring.c new file mode 100644 index 000000000..af96c89c1 --- /dev/null +++ b/lua-5.2.4/src/lstring.c @@ -0,0 +1,185 @@ +/* +** $Id: lstring.c,v 2.26.1.1 2013/04/12 18:48:47 roberto Exp $ +** String table (keeps all strings handled by Lua) +** See Copyright Notice in lua.h +*/ + + +#include + +#define lstring_c +#define LUA_CORE + +#include "lua.h" + +#include "lmem.h" +#include "lobject.h" +#include "lstate.h" +#include "lstring.h" + + +/* +** Lua will use at most ~(2^LUAI_HASHLIMIT) bytes from a string to +** compute its hash +*/ +#if !defined(LUAI_HASHLIMIT) +#define LUAI_HASHLIMIT 5 +#endif + + +/* +** equality for long strings +*/ +int luaS_eqlngstr (TString *a, TString *b) { + size_t len = a->tsv.len; + lua_assert(a->tsv.tt == LUA_TLNGSTR && b->tsv.tt == LUA_TLNGSTR); + return (a == b) || /* same instance or... */ + ((len == b->tsv.len) && /* equal length and ... */ + (memcmp(getstr(a), getstr(b), len) == 0)); /* equal contents */ +} + + +/* +** equality for strings +*/ +int luaS_eqstr (TString *a, TString *b) { + return (a->tsv.tt == b->tsv.tt) && + (a->tsv.tt == LUA_TSHRSTR ? eqshrstr(a, b) : luaS_eqlngstr(a, b)); +} + + +unsigned int luaS_hash (const char *str, size_t l, unsigned int seed) { + unsigned int h = seed ^ cast(unsigned int, l); + size_t l1; + size_t step = (l >> LUAI_HASHLIMIT) + 1; + for (l1 = l; l1 >= step; l1 -= step) + h = h ^ ((h<<5) + (h>>2) + cast_byte(str[l1 - 1])); + return h; +} + + +/* +** resizes the string table +*/ +void luaS_resize (lua_State *L, int newsize) { + int i; + stringtable *tb = &G(L)->strt; + /* cannot resize while GC is traversing strings */ + luaC_runtilstate(L, ~bitmask(GCSsweepstring)); + if (newsize > tb->size) { + luaM_reallocvector(L, tb->hash, tb->size, newsize, GCObject *); + for (i = tb->size; i < newsize; i++) tb->hash[i] = NULL; + } + /* rehash */ + for (i=0; isize; i++) { + GCObject *p = tb->hash[i]; + tb->hash[i] = NULL; + while (p) { /* for each node in the list */ + GCObject *next = gch(p)->next; /* save next */ + unsigned int h = lmod(gco2ts(p)->hash, newsize); /* new position */ + gch(p)->next = tb->hash[h]; /* chain it */ + tb->hash[h] = p; + resetoldbit(p); /* see MOVE OLD rule */ + p = next; + } + } + if (newsize < tb->size) { + /* shrinking slice must be empty */ + lua_assert(tb->hash[newsize] == NULL && tb->hash[tb->size - 1] == NULL); + luaM_reallocvector(L, tb->hash, tb->size, newsize, GCObject *); + } + tb->size = newsize; +} + + +/* +** creates a new string object +*/ +static TString *createstrobj (lua_State *L, const char *str, size_t l, + int tag, unsigned int h, GCObject **list) { + TString *ts; + size_t totalsize; /* total size of TString object */ + totalsize = sizeof(TString) + ((l + 1) * sizeof(char)); + ts = &luaC_newobj(L, tag, totalsize, list, 0)->ts; + ts->tsv.len = l; + ts->tsv.hash = h; + ts->tsv.extra = 0; + memcpy(ts+1, str, l*sizeof(char)); + ((char *)(ts+1))[l] = '\0'; /* ending 0 */ + return ts; +} + + +/* +** creates a new short string, inserting it into string table +*/ +static TString *newshrstr (lua_State *L, const char *str, size_t l, + unsigned int h) { + GCObject **list; /* (pointer to) list where it will be inserted */ + stringtable *tb = &G(L)->strt; + TString *s; + if (tb->nuse >= cast(lu_int32, tb->size) && tb->size <= MAX_INT/2) + luaS_resize(L, tb->size*2); /* too crowded */ + list = &tb->hash[lmod(h, tb->size)]; + s = createstrobj(L, str, l, LUA_TSHRSTR, h, list); + tb->nuse++; + return s; +} + + +/* +** checks whether short string exists and reuses it or creates a new one +*/ +static TString *internshrstr (lua_State *L, const char *str, size_t l) { + GCObject *o; + global_State *g = G(L); + unsigned int h = luaS_hash(str, l, g->seed); + for (o = g->strt.hash[lmod(h, g->strt.size)]; + o != NULL; + o = gch(o)->next) { + TString *ts = rawgco2ts(o); + if (h == ts->tsv.hash && + l == ts->tsv.len && + (memcmp(str, getstr(ts), l * sizeof(char)) == 0)) { + if (isdead(G(L), o)) /* string is dead (but was not collected yet)? */ + changewhite(o); /* resurrect it */ + return ts; + } + } + return newshrstr(L, str, l, h); /* not found; create a new string */ +} + + +/* +** new string (with explicit length) +*/ +TString *luaS_newlstr (lua_State *L, const char *str, size_t l) { + if (l <= LUAI_MAXSHORTLEN) /* short string? */ + return internshrstr(L, str, l); + else { + if (l + 1 > (MAX_SIZET - sizeof(TString))/sizeof(char)) + luaM_toobig(L); + return createstrobj(L, str, l, LUA_TLNGSTR, G(L)->seed, NULL); + } +} + + +/* +** new zero-terminated string +*/ +TString *luaS_new (lua_State *L, const char *str) { + return luaS_newlstr(L, str, strlen(str)); +} + + +Udata *luaS_newudata (lua_State *L, size_t s, Table *e) { + Udata *u; + if (s > MAX_SIZET - sizeof(Udata)) + luaM_toobig(L); + u = &luaC_newobj(L, LUA_TUSERDATA, sizeof(Udata) + s, NULL, 0)->u; + u->uv.len = s; + u->uv.metatable = NULL; + u->uv.env = e; + return u; +} + diff --git a/lua-5.2.4/src/lstring.h b/lua-5.2.4/src/lstring.h new file mode 100644 index 000000000..260e7f169 --- /dev/null +++ b/lua-5.2.4/src/lstring.h @@ -0,0 +1,46 @@ +/* +** $Id: lstring.h,v 1.49.1.1 2013/04/12 18:48:47 roberto Exp $ +** String table (keep all strings handled by Lua) +** See Copyright Notice in lua.h +*/ + +#ifndef lstring_h +#define lstring_h + +#include "lgc.h" +#include "lobject.h" +#include "lstate.h" + + +#define sizestring(s) (sizeof(union TString)+((s)->len+1)*sizeof(char)) + +#define sizeudata(u) (sizeof(union Udata)+(u)->len) + +#define luaS_newliteral(L, s) (luaS_newlstr(L, "" s, \ + (sizeof(s)/sizeof(char))-1)) + +#define luaS_fix(s) l_setbit((s)->tsv.marked, FIXEDBIT) + + +/* +** test whether a string is a reserved word +*/ +#define isreserved(s) ((s)->tsv.tt == LUA_TSHRSTR && (s)->tsv.extra > 0) + + +/* +** equality for short strings, which are always internalized +*/ +#define eqshrstr(a,b) check_exp((a)->tsv.tt == LUA_TSHRSTR, (a) == (b)) + + +LUAI_FUNC unsigned int luaS_hash (const char *str, size_t l, unsigned int seed); +LUAI_FUNC int luaS_eqlngstr (TString *a, TString *b); +LUAI_FUNC int luaS_eqstr (TString *a, TString *b); +LUAI_FUNC void luaS_resize (lua_State *L, int newsize); +LUAI_FUNC Udata *luaS_newudata (lua_State *L, size_t s, Table *e); +LUAI_FUNC TString *luaS_newlstr (lua_State *L, const char *str, size_t l); +LUAI_FUNC TString *luaS_new (lua_State *L, const char *str); + + +#endif diff --git a/lua-5.2.4/src/lstrlib.c b/lua-5.2.4/src/lstrlib.c new file mode 100644 index 000000000..9261fd220 --- /dev/null +++ b/lua-5.2.4/src/lstrlib.c @@ -0,0 +1,1019 @@ +/* +** $Id: lstrlib.c,v 1.178.1.1 2013/04/12 18:48:47 roberto Exp $ +** Standard library for string operations and pattern-matching +** See Copyright Notice in lua.h +*/ + + +#include +#include +#include +#include +#include + +#define lstrlib_c +#define LUA_LIB + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +/* +** maximum number of captures that a pattern can do during +** pattern-matching. This limit is arbitrary. +*/ +#if !defined(LUA_MAXCAPTURES) +#define LUA_MAXCAPTURES 32 +#endif + + +/* macro to `unsign' a character */ +#define uchar(c) ((unsigned char)(c)) + + + +static int str_len (lua_State *L) { + size_t l; + luaL_checklstring(L, 1, &l); + lua_pushinteger(L, (lua_Integer)l); + return 1; +} + + +/* translate a relative string position: negative means back from end */ +static size_t posrelat (ptrdiff_t pos, size_t len) { + if (pos >= 0) return (size_t)pos; + else if (0u - (size_t)pos > len) return 0; + else return len - ((size_t)-pos) + 1; +} + + +static int str_sub (lua_State *L) { + size_t l; + const char *s = luaL_checklstring(L, 1, &l); + size_t start = posrelat(luaL_checkinteger(L, 2), l); + size_t end = posrelat(luaL_optinteger(L, 3, -1), l); + if (start < 1) start = 1; + if (end > l) end = l; + if (start <= end) + lua_pushlstring(L, s + start - 1, end - start + 1); + else lua_pushliteral(L, ""); + return 1; +} + + +static int str_reverse (lua_State *L) { + size_t l, i; + luaL_Buffer b; + const char *s = luaL_checklstring(L, 1, &l); + char *p = luaL_buffinitsize(L, &b, l); + for (i = 0; i < l; i++) + p[i] = s[l - i - 1]; + luaL_pushresultsize(&b, l); + return 1; +} + + +static int str_lower (lua_State *L) { + size_t l; + size_t i; + luaL_Buffer b; + const char *s = luaL_checklstring(L, 1, &l); + char *p = luaL_buffinitsize(L, &b, l); + for (i=0; i> 1) + +static int str_rep (lua_State *L) { + size_t l, lsep; + const char *s = luaL_checklstring(L, 1, &l); + int n = luaL_checkint(L, 2); + const char *sep = luaL_optlstring(L, 3, "", &lsep); + if (n <= 0) lua_pushliteral(L, ""); + else if (l + lsep < l || l + lsep >= MAXSIZE / n) /* may overflow? */ + return luaL_error(L, "resulting string too large"); + else { + size_t totallen = n * l + (n - 1) * lsep; + luaL_Buffer b; + char *p = luaL_buffinitsize(L, &b, totallen); + while (n-- > 1) { /* first n-1 copies (followed by separator) */ + memcpy(p, s, l * sizeof(char)); p += l; + if (lsep > 0) { /* avoid empty 'memcpy' (may be expensive) */ + memcpy(p, sep, lsep * sizeof(char)); p += lsep; + } + } + memcpy(p, s, l * sizeof(char)); /* last copy (not followed by separator) */ + luaL_pushresultsize(&b, totallen); + } + return 1; +} + + +static int str_byte (lua_State *L) { + size_t l; + const char *s = luaL_checklstring(L, 1, &l); + size_t posi = posrelat(luaL_optinteger(L, 2, 1), l); + size_t pose = posrelat(luaL_optinteger(L, 3, posi), l); + int n, i; + if (posi < 1) posi = 1; + if (pose > l) pose = l; + if (posi > pose) return 0; /* empty interval; return no values */ + n = (int)(pose - posi + 1); + if (posi + n <= pose) /* (size_t -> int) overflow? */ + return luaL_error(L, "string slice too long"); + luaL_checkstack(L, n, "string slice too long"); + for (i=0; i= ms->level || ms->capture[l].len == CAP_UNFINISHED) + return luaL_error(ms->L, "invalid capture index %%%d", l + 1); + return l; +} + + +static int capture_to_close (MatchState *ms) { + int level = ms->level; + for (level--; level>=0; level--) + if (ms->capture[level].len == CAP_UNFINISHED) return level; + return luaL_error(ms->L, "invalid pattern capture"); +} + + +static const char *classend (MatchState *ms, const char *p) { + switch (*p++) { + case L_ESC: { + if (p == ms->p_end) + luaL_error(ms->L, "malformed pattern (ends with " LUA_QL("%%") ")"); + return p+1; + } + case '[': { + if (*p == '^') p++; + do { /* look for a `]' */ + if (p == ms->p_end) + luaL_error(ms->L, "malformed pattern (missing " LUA_QL("]") ")"); + if (*(p++) == L_ESC && p < ms->p_end) + p++; /* skip escapes (e.g. `%]') */ + } while (*p != ']'); + return p+1; + } + default: { + return p; + } + } +} + + +static int match_class (int c, int cl) { + int res; + switch (tolower(cl)) { + case 'a' : res = isalpha(c); break; + case 'c' : res = iscntrl(c); break; + case 'd' : res = isdigit(c); break; + case 'g' : res = isgraph(c); break; + case 'l' : res = islower(c); break; + case 'p' : res = ispunct(c); break; + case 's' : res = isspace(c); break; + case 'u' : res = isupper(c); break; + case 'w' : res = isalnum(c); break; + case 'x' : res = isxdigit(c); break; + case 'z' : res = (c == 0); break; /* deprecated option */ + default: return (cl == c); + } + return (islower(cl) ? res : !res); +} + + +static int matchbracketclass (int c, const char *p, const char *ec) { + int sig = 1; + if (*(p+1) == '^') { + sig = 0; + p++; /* skip the `^' */ + } + while (++p < ec) { + if (*p == L_ESC) { + p++; + if (match_class(c, uchar(*p))) + return sig; + } + else if ((*(p+1) == '-') && (p+2 < ec)) { + p+=2; + if (uchar(*(p-2)) <= c && c <= uchar(*p)) + return sig; + } + else if (uchar(*p) == c) return sig; + } + return !sig; +} + + +static int singlematch (MatchState *ms, const char *s, const char *p, + const char *ep) { + if (s >= ms->src_end) + return 0; + else { + int c = uchar(*s); + switch (*p) { + case '.': return 1; /* matches any char */ + case L_ESC: return match_class(c, uchar(*(p+1))); + case '[': return matchbracketclass(c, p, ep-1); + default: return (uchar(*p) == c); + } + } +} + + +static const char *matchbalance (MatchState *ms, const char *s, + const char *p) { + if (p >= ms->p_end - 1) + luaL_error(ms->L, "malformed pattern " + "(missing arguments to " LUA_QL("%%b") ")"); + if (*s != *p) return NULL; + else { + int b = *p; + int e = *(p+1); + int cont = 1; + while (++s < ms->src_end) { + if (*s == e) { + if (--cont == 0) return s+1; + } + else if (*s == b) cont++; + } + } + return NULL; /* string ends out of balance */ +} + + +static const char *max_expand (MatchState *ms, const char *s, + const char *p, const char *ep) { + ptrdiff_t i = 0; /* counts maximum expand for item */ + while (singlematch(ms, s + i, p, ep)) + i++; + /* keeps trying to match with the maximum repetitions */ + while (i>=0) { + const char *res = match(ms, (s+i), ep+1); + if (res) return res; + i--; /* else didn't match; reduce 1 repetition to try again */ + } + return NULL; +} + + +static const char *min_expand (MatchState *ms, const char *s, + const char *p, const char *ep) { + for (;;) { + const char *res = match(ms, s, ep+1); + if (res != NULL) + return res; + else if (singlematch(ms, s, p, ep)) + s++; /* try with one more repetition */ + else return NULL; + } +} + + +static const char *start_capture (MatchState *ms, const char *s, + const char *p, int what) { + const char *res; + int level = ms->level; + if (level >= LUA_MAXCAPTURES) luaL_error(ms->L, "too many captures"); + ms->capture[level].init = s; + ms->capture[level].len = what; + ms->level = level+1; + if ((res=match(ms, s, p)) == NULL) /* match failed? */ + ms->level--; /* undo capture */ + return res; +} + + +static const char *end_capture (MatchState *ms, const char *s, + const char *p) { + int l = capture_to_close(ms); + const char *res; + ms->capture[l].len = s - ms->capture[l].init; /* close capture */ + if ((res = match(ms, s, p)) == NULL) /* match failed? */ + ms->capture[l].len = CAP_UNFINISHED; /* undo capture */ + return res; +} + + +static const char *match_capture (MatchState *ms, const char *s, int l) { + size_t len; + l = check_capture(ms, l); + len = ms->capture[l].len; + if ((size_t)(ms->src_end-s) >= len && + memcmp(ms->capture[l].init, s, len) == 0) + return s+len; + else return NULL; +} + + +static const char *match (MatchState *ms, const char *s, const char *p) { + if (ms->matchdepth-- == 0) + luaL_error(ms->L, "pattern too complex"); + init: /* using goto's to optimize tail recursion */ + if (p != ms->p_end) { /* end of pattern? */ + switch (*p) { + case '(': { /* start capture */ + if (*(p + 1) == ')') /* position capture? */ + s = start_capture(ms, s, p + 2, CAP_POSITION); + else + s = start_capture(ms, s, p + 1, CAP_UNFINISHED); + break; + } + case ')': { /* end capture */ + s = end_capture(ms, s, p + 1); + break; + } + case '$': { + if ((p + 1) != ms->p_end) /* is the `$' the last char in pattern? */ + goto dflt; /* no; go to default */ + s = (s == ms->src_end) ? s : NULL; /* check end of string */ + break; + } + case L_ESC: { /* escaped sequences not in the format class[*+?-]? */ + switch (*(p + 1)) { + case 'b': { /* balanced string? */ + s = matchbalance(ms, s, p + 2); + if (s != NULL) { + p += 4; goto init; /* return match(ms, s, p + 4); */ + } /* else fail (s == NULL) */ + break; + } + case 'f': { /* frontier? */ + const char *ep; char previous; + p += 2; + if (*p != '[') + luaL_error(ms->L, "missing " LUA_QL("[") " after " + LUA_QL("%%f") " in pattern"); + ep = classend(ms, p); /* points to what is next */ + previous = (s == ms->src_init) ? '\0' : *(s - 1); + if (!matchbracketclass(uchar(previous), p, ep - 1) && + matchbracketclass(uchar(*s), p, ep - 1)) { + p = ep; goto init; /* return match(ms, s, ep); */ + } + s = NULL; /* match failed */ + break; + } + case '0': case '1': case '2': case '3': + case '4': case '5': case '6': case '7': + case '8': case '9': { /* capture results (%0-%9)? */ + s = match_capture(ms, s, uchar(*(p + 1))); + if (s != NULL) { + p += 2; goto init; /* return match(ms, s, p + 2) */ + } + break; + } + default: goto dflt; + } + break; + } + default: dflt: { /* pattern class plus optional suffix */ + const char *ep = classend(ms, p); /* points to optional suffix */ + /* does not match at least once? */ + if (!singlematch(ms, s, p, ep)) { + if (*ep == '*' || *ep == '?' || *ep == '-') { /* accept empty? */ + p = ep + 1; goto init; /* return match(ms, s, ep + 1); */ + } + else /* '+' or no suffix */ + s = NULL; /* fail */ + } + else { /* matched once */ + switch (*ep) { /* handle optional suffix */ + case '?': { /* optional */ + const char *res; + if ((res = match(ms, s + 1, ep + 1)) != NULL) + s = res; + else { + p = ep + 1; goto init; /* else return match(ms, s, ep + 1); */ + } + break; + } + case '+': /* 1 or more repetitions */ + s++; /* 1 match already done */ + /* go through */ + case '*': /* 0 or more repetitions */ + s = max_expand(ms, s, p, ep); + break; + case '-': /* 0 or more repetitions (minimum) */ + s = min_expand(ms, s, p, ep); + break; + default: /* no suffix */ + s++; p = ep; goto init; /* return match(ms, s + 1, ep); */ + } + } + break; + } + } + } + ms->matchdepth++; + return s; +} + + + +static const char *lmemfind (const char *s1, size_t l1, + const char *s2, size_t l2) { + if (l2 == 0) return s1; /* empty strings are everywhere */ + else if (l2 > l1) return NULL; /* avoids a negative `l1' */ + else { + const char *init; /* to search for a `*s2' inside `s1' */ + l2--; /* 1st char will be checked by `memchr' */ + l1 = l1-l2; /* `s2' cannot be found after that */ + while (l1 > 0 && (init = (const char *)memchr(s1, *s2, l1)) != NULL) { + init++; /* 1st char is already checked */ + if (memcmp(init, s2+1, l2) == 0) + return init-1; + else { /* correct `l1' and `s1' to try again */ + l1 -= init-s1; + s1 = init; + } + } + return NULL; /* not found */ + } +} + + +static void push_onecapture (MatchState *ms, int i, const char *s, + const char *e) { + if (i >= ms->level) { + if (i == 0) /* ms->level == 0, too */ + lua_pushlstring(ms->L, s, e - s); /* add whole match */ + else + luaL_error(ms->L, "invalid capture index"); + } + else { + ptrdiff_t l = ms->capture[i].len; + if (l == CAP_UNFINISHED) luaL_error(ms->L, "unfinished capture"); + if (l == CAP_POSITION) + lua_pushinteger(ms->L, ms->capture[i].init - ms->src_init + 1); + else + lua_pushlstring(ms->L, ms->capture[i].init, l); + } +} + + +static int push_captures (MatchState *ms, const char *s, const char *e) { + int i; + int nlevels = (ms->level == 0 && s) ? 1 : ms->level; + luaL_checkstack(ms->L, nlevels, "too many captures"); + for (i = 0; i < nlevels; i++) + push_onecapture(ms, i, s, e); + return nlevels; /* number of strings pushed */ +} + + +/* check whether pattern has no special characters */ +static int nospecials (const char *p, size_t l) { + size_t upto = 0; + do { + if (strpbrk(p + upto, SPECIALS)) + return 0; /* pattern has a special character */ + upto += strlen(p + upto) + 1; /* may have more after \0 */ + } while (upto <= l); + return 1; /* no special chars found */ +} + + +static int str_find_aux (lua_State *L, int find) { + size_t ls, lp; + const char *s = luaL_checklstring(L, 1, &ls); + const char *p = luaL_checklstring(L, 2, &lp); + size_t init = posrelat(luaL_optinteger(L, 3, 1), ls); + if (init < 1) init = 1; + else if (init > ls + 1) { /* start after string's end? */ + lua_pushnil(L); /* cannot find anything */ + return 1; + } + /* explicit request or no special characters? */ + if (find && (lua_toboolean(L, 4) || nospecials(p, lp))) { + /* do a plain search */ + const char *s2 = lmemfind(s + init - 1, ls - init + 1, p, lp); + if (s2) { + lua_pushinteger(L, s2 - s + 1); + lua_pushinteger(L, s2 - s + lp); + return 2; + } + } + else { + MatchState ms; + const char *s1 = s + init - 1; + int anchor = (*p == '^'); + if (anchor) { + p++; lp--; /* skip anchor character */ + } + ms.L = L; + ms.matchdepth = MAXCCALLS; + ms.src_init = s; + ms.src_end = s + ls; + ms.p_end = p + lp; + do { + const char *res; + ms.level = 0; + lua_assert(ms.matchdepth == MAXCCALLS); + if ((res=match(&ms, s1, p)) != NULL) { + if (find) { + lua_pushinteger(L, s1 - s + 1); /* start */ + lua_pushinteger(L, res - s); /* end */ + return push_captures(&ms, NULL, 0) + 2; + } + else + return push_captures(&ms, s1, res); + } + } while (s1++ < ms.src_end && !anchor); + } + lua_pushnil(L); /* not found */ + return 1; +} + + +static int str_find (lua_State *L) { + return str_find_aux(L, 1); +} + + +static int str_match (lua_State *L) { + return str_find_aux(L, 0); +} + + +static int gmatch_aux (lua_State *L) { + MatchState ms; + size_t ls, lp; + const char *s = lua_tolstring(L, lua_upvalueindex(1), &ls); + const char *p = lua_tolstring(L, lua_upvalueindex(2), &lp); + const char *src; + ms.L = L; + ms.matchdepth = MAXCCALLS; + ms.src_init = s; + ms.src_end = s+ls; + ms.p_end = p + lp; + for (src = s + (size_t)lua_tointeger(L, lua_upvalueindex(3)); + src <= ms.src_end; + src++) { + const char *e; + ms.level = 0; + lua_assert(ms.matchdepth == MAXCCALLS); + if ((e = match(&ms, src, p)) != NULL) { + lua_Integer newstart = e-s; + if (e == src) newstart++; /* empty match? go at least one position */ + lua_pushinteger(L, newstart); + lua_replace(L, lua_upvalueindex(3)); + return push_captures(&ms, src, e); + } + } + return 0; /* not found */ +} + + +static int gmatch (lua_State *L) { + luaL_checkstring(L, 1); + luaL_checkstring(L, 2); + lua_settop(L, 2); + lua_pushinteger(L, 0); + lua_pushcclosure(L, gmatch_aux, 3); + return 1; +} + + +static void add_s (MatchState *ms, luaL_Buffer *b, const char *s, + const char *e) { + size_t l, i; + const char *news = lua_tolstring(ms->L, 3, &l); + for (i = 0; i < l; i++) { + if (news[i] != L_ESC) + luaL_addchar(b, news[i]); + else { + i++; /* skip ESC */ + if (!isdigit(uchar(news[i]))) { + if (news[i] != L_ESC) + luaL_error(ms->L, "invalid use of " LUA_QL("%c") + " in replacement string", L_ESC); + luaL_addchar(b, news[i]); + } + else if (news[i] == '0') + luaL_addlstring(b, s, e - s); + else { + push_onecapture(ms, news[i] - '1', s, e); + luaL_addvalue(b); /* add capture to accumulated result */ + } + } + } +} + + +static void add_value (MatchState *ms, luaL_Buffer *b, const char *s, + const char *e, int tr) { + lua_State *L = ms->L; + switch (tr) { + case LUA_TFUNCTION: { + int n; + lua_pushvalue(L, 3); + n = push_captures(ms, s, e); + lua_call(L, n, 1); + break; + } + case LUA_TTABLE: { + push_onecapture(ms, 0, s, e); + lua_gettable(L, 3); + break; + } + default: { /* LUA_TNUMBER or LUA_TSTRING */ + add_s(ms, b, s, e); + return; + } + } + if (!lua_toboolean(L, -1)) { /* nil or false? */ + lua_pop(L, 1); + lua_pushlstring(L, s, e - s); /* keep original text */ + } + else if (!lua_isstring(L, -1)) + luaL_error(L, "invalid replacement value (a %s)", luaL_typename(L, -1)); + luaL_addvalue(b); /* add result to accumulator */ +} + + +static int str_gsub (lua_State *L) { + size_t srcl, lp; + const char *src = luaL_checklstring(L, 1, &srcl); + const char *p = luaL_checklstring(L, 2, &lp); + int tr = lua_type(L, 3); + size_t max_s = luaL_optinteger(L, 4, srcl+1); + int anchor = (*p == '^'); + size_t n = 0; + MatchState ms; + luaL_Buffer b; + luaL_argcheck(L, tr == LUA_TNUMBER || tr == LUA_TSTRING || + tr == LUA_TFUNCTION || tr == LUA_TTABLE, 3, + "string/function/table expected"); + luaL_buffinit(L, &b); + if (anchor) { + p++; lp--; /* skip anchor character */ + } + ms.L = L; + ms.matchdepth = MAXCCALLS; + ms.src_init = src; + ms.src_end = src+srcl; + ms.p_end = p + lp; + while (n < max_s) { + const char *e; + ms.level = 0; + lua_assert(ms.matchdepth == MAXCCALLS); + e = match(&ms, src, p); + if (e) { + n++; + add_value(&ms, &b, src, e, tr); + } + if (e && e>src) /* non empty match? */ + src = e; /* skip it */ + else if (src < ms.src_end) + luaL_addchar(&b, *src++); + else break; + if (anchor) break; + } + luaL_addlstring(&b, src, ms.src_end-src); + luaL_pushresult(&b); + lua_pushinteger(L, n); /* number of substitutions */ + return 2; +} + +/* }====================================================== */ + + + +/* +** {====================================================== +** STRING FORMAT +** ======================================================= +*/ + +/* +** LUA_INTFRMLEN is the length modifier for integer conversions in +** 'string.format'; LUA_INTFRM_T is the integer type corresponding to +** the previous length +*/ +#if !defined(LUA_INTFRMLEN) /* { */ +#if defined(LUA_USE_LONGLONG) + +#define LUA_INTFRMLEN "ll" +#define LUA_INTFRM_T long long + +#else + +#define LUA_INTFRMLEN "l" +#define LUA_INTFRM_T long + +#endif +#endif /* } */ + + +/* +** LUA_FLTFRMLEN is the length modifier for float conversions in +** 'string.format'; LUA_FLTFRM_T is the float type corresponding to +** the previous length +*/ +#if !defined(LUA_FLTFRMLEN) + +#define LUA_FLTFRMLEN "" +#define LUA_FLTFRM_T double + +#endif + + +/* maximum size of each formatted item (> len(format('%99.99f', -1e308))) */ +#define MAX_ITEM 512 +/* valid flags in a format specification */ +#define FLAGS "-+ #0" +/* +** maximum size of each format specification (such as '%-099.99d') +** (+10 accounts for %99.99x plus margin of error) +*/ +#define MAX_FORMAT (sizeof(FLAGS) + sizeof(LUA_INTFRMLEN) + 10) + + +static void addquoted (lua_State *L, luaL_Buffer *b, int arg) { + size_t l; + const char *s = luaL_checklstring(L, arg, &l); + luaL_addchar(b, '"'); + while (l--) { + if (*s == '"' || *s == '\\' || *s == '\n') { + luaL_addchar(b, '\\'); + luaL_addchar(b, *s); + } + else if (*s == '\0' || iscntrl(uchar(*s))) { + char buff[10]; + if (!isdigit(uchar(*(s+1)))) + sprintf(buff, "\\%d", (int)uchar(*s)); + else + sprintf(buff, "\\%03d", (int)uchar(*s)); + luaL_addstring(b, buff); + } + else + luaL_addchar(b, *s); + s++; + } + luaL_addchar(b, '"'); +} + +static const char *scanformat (lua_State *L, const char *strfrmt, char *form) { + const char *p = strfrmt; + while (*p != '\0' && strchr(FLAGS, *p) != NULL) p++; /* skip flags */ + if ((size_t)(p - strfrmt) >= sizeof(FLAGS)/sizeof(char)) + luaL_error(L, "invalid format (repeated flags)"); + if (isdigit(uchar(*p))) p++; /* skip width */ + if (isdigit(uchar(*p))) p++; /* (2 digits at most) */ + if (*p == '.') { + p++; + if (isdigit(uchar(*p))) p++; /* skip precision */ + if (isdigit(uchar(*p))) p++; /* (2 digits at most) */ + } + if (isdigit(uchar(*p))) + luaL_error(L, "invalid format (width or precision too long)"); + *(form++) = '%'; + memcpy(form, strfrmt, (p - strfrmt + 1) * sizeof(char)); + form += p - strfrmt + 1; + *form = '\0'; + return p; +} + + +/* +** add length modifier into formats +*/ +static void addlenmod (char *form, const char *lenmod) { + size_t l = strlen(form); + size_t lm = strlen(lenmod); + char spec = form[l - 1]; + strcpy(form + l - 1, lenmod); + form[l + lm - 1] = spec; + form[l + lm] = '\0'; +} + + +static int str_format (lua_State *L) { + int top = lua_gettop(L); + int arg = 1; + size_t sfl; + const char *strfrmt = luaL_checklstring(L, arg, &sfl); + const char *strfrmt_end = strfrmt+sfl; + luaL_Buffer b; + luaL_buffinit(L, &b); + while (strfrmt < strfrmt_end) { + if (*strfrmt != L_ESC) + luaL_addchar(&b, *strfrmt++); + else if (*++strfrmt == L_ESC) + luaL_addchar(&b, *strfrmt++); /* %% */ + else { /* format item */ + char form[MAX_FORMAT]; /* to store the format (`%...') */ + char *buff = luaL_prepbuffsize(&b, MAX_ITEM); /* to put formatted item */ + int nb = 0; /* number of bytes in added item */ + if (++arg > top) + luaL_argerror(L, arg, "no value"); + strfrmt = scanformat(L, strfrmt, form); + switch (*strfrmt++) { + case 'c': { + nb = sprintf(buff, form, luaL_checkint(L, arg)); + break; + } + case 'd': case 'i': { + lua_Number n = luaL_checknumber(L, arg); + LUA_INTFRM_T ni = (LUA_INTFRM_T)n; + lua_Number diff = n - (lua_Number)ni; + luaL_argcheck(L, -1 < diff && diff < 1, arg, + "not a number in proper range"); + addlenmod(form, LUA_INTFRMLEN); + nb = sprintf(buff, form, ni); + break; + } + case 'o': case 'u': case 'x': case 'X': { + lua_Number n = luaL_checknumber(L, arg); + unsigned LUA_INTFRM_T ni = (unsigned LUA_INTFRM_T)n; + lua_Number diff = n - (lua_Number)ni; + luaL_argcheck(L, -1 < diff && diff < 1, arg, + "not a non-negative number in proper range"); + addlenmod(form, LUA_INTFRMLEN); + nb = sprintf(buff, form, ni); + break; + } + case 'e': case 'E': case 'f': +#if defined(LUA_USE_AFORMAT) + case 'a': case 'A': +#endif + case 'g': case 'G': { + addlenmod(form, LUA_FLTFRMLEN); + nb = sprintf(buff, form, (LUA_FLTFRM_T)luaL_checknumber(L, arg)); + break; + } + case 'q': { + addquoted(L, &b, arg); + break; + } + case 's': { + size_t l; + const char *s = luaL_tolstring(L, arg, &l); + if (!strchr(form, '.') && l >= 100) { + /* no precision and string is too long to be formatted; + keep original string */ + luaL_addvalue(&b); + break; + } + else { + nb = sprintf(buff, form, s); + lua_pop(L, 1); /* remove result from 'luaL_tolstring' */ + break; + } + } + default: { /* also treat cases `pnLlh' */ + return luaL_error(L, "invalid option " LUA_QL("%%%c") " to " + LUA_QL("format"), *(strfrmt - 1)); + } + } + luaL_addsize(&b, nb); + } + } + luaL_pushresult(&b); + return 1; +} + +/* }====================================================== */ + + +static const luaL_Reg strlib[] = { + {"byte", str_byte}, + {"char", str_char}, + {"dump", str_dump}, + {"find", str_find}, + {"format", str_format}, + {"gmatch", gmatch}, + {"gsub", str_gsub}, + {"len", str_len}, + {"lower", str_lower}, + {"match", str_match}, + {"rep", str_rep}, + {"reverse", str_reverse}, + {"sub", str_sub}, + {"upper", str_upper}, + {NULL, NULL} +}; + + +static void createmetatable (lua_State *L) { + lua_createtable(L, 0, 1); /* table to be metatable for strings */ + lua_pushliteral(L, ""); /* dummy string */ + lua_pushvalue(L, -2); /* copy table */ + lua_setmetatable(L, -2); /* set table as metatable for strings */ + lua_pop(L, 1); /* pop dummy string */ + lua_pushvalue(L, -2); /* get string library */ + lua_setfield(L, -2, "__index"); /* metatable.__index = string */ + lua_pop(L, 1); /* pop metatable */ +} + + +/* +** Open string library +*/ +LUAMOD_API int luaopen_string (lua_State *L) { + luaL_newlib(L, strlib); + createmetatable(L); + return 1; +} + diff --git a/lua-5.2.4/src/ltable.c b/lua-5.2.4/src/ltable.c new file mode 100644 index 000000000..5d76f97ec --- /dev/null +++ b/lua-5.2.4/src/ltable.c @@ -0,0 +1,588 @@ +/* +** $Id: ltable.c,v 2.72.1.1 2013/04/12 18:48:47 roberto Exp $ +** Lua tables (hash) +** See Copyright Notice in lua.h +*/ + + +/* +** Implementation of tables (aka arrays, objects, or hash tables). +** Tables keep its elements in two parts: an array part and a hash part. +** Non-negative integer keys are all candidates to be kept in the array +** part. The actual size of the array is the largest `n' such that at +** least half the slots between 0 and n are in use. +** Hash uses a mix of chained scatter table with Brent's variation. +** A main invariant of these tables is that, if an element is not +** in its main position (i.e. the `original' position that its hash gives +** to it), then the colliding element is in its own main position. +** Hence even when the load factor reaches 100%, performance remains good. +*/ + +#include + +#define ltable_c +#define LUA_CORE + +#include "lua.h" + +#include "ldebug.h" +#include "ldo.h" +#include "lgc.h" +#include "lmem.h" +#include "lobject.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "lvm.h" + + +/* +** max size of array part is 2^MAXBITS +*/ +#if LUAI_BITSINT >= 32 +#define MAXBITS 30 +#else +#define MAXBITS (LUAI_BITSINT-2) +#endif + +#define MAXASIZE (1 << MAXBITS) + + +#define hashpow2(t,n) (gnode(t, lmod((n), sizenode(t)))) + +#define hashstr(t,str) hashpow2(t, (str)->tsv.hash) +#define hashboolean(t,p) hashpow2(t, p) + + +/* +** for some types, it is better to avoid modulus by power of 2, as +** they tend to have many 2 factors. +*/ +#define hashmod(t,n) (gnode(t, ((n) % ((sizenode(t)-1)|1)))) + + +#define hashpointer(t,p) hashmod(t, IntPoint(p)) + + +#define dummynode (&dummynode_) + +#define isdummy(n) ((n) == dummynode) + +static const Node dummynode_ = { + {NILCONSTANT}, /* value */ + {{NILCONSTANT, NULL}} /* key */ +}; + + +/* +** hash for lua_Numbers +*/ +static Node *hashnum (const Table *t, lua_Number n) { + int i; + luai_hashnum(i, n); + if (i < 0) { + if (cast(unsigned int, i) == 0u - i) /* use unsigned to avoid overflows */ + i = 0; /* handle INT_MIN */ + i = -i; /* must be a positive value */ + } + return hashmod(t, i); +} + + + +/* +** returns the `main' position of an element in a table (that is, the index +** of its hash value) +*/ +static Node *mainposition (const Table *t, const TValue *key) { + switch (ttype(key)) { + case LUA_TNUMBER: + return hashnum(t, nvalue(key)); + case LUA_TLNGSTR: { + TString *s = rawtsvalue(key); + if (s->tsv.extra == 0) { /* no hash? */ + s->tsv.hash = luaS_hash(getstr(s), s->tsv.len, s->tsv.hash); + s->tsv.extra = 1; /* now it has its hash */ + } + return hashstr(t, rawtsvalue(key)); + } + case LUA_TSHRSTR: + return hashstr(t, rawtsvalue(key)); + case LUA_TBOOLEAN: + return hashboolean(t, bvalue(key)); + case LUA_TLIGHTUSERDATA: + return hashpointer(t, pvalue(key)); + case LUA_TLCF: + return hashpointer(t, fvalue(key)); + default: + return hashpointer(t, gcvalue(key)); + } +} + + +/* +** returns the index for `key' if `key' is an appropriate key to live in +** the array part of the table, -1 otherwise. +*/ +static int arrayindex (const TValue *key) { + if (ttisnumber(key)) { + lua_Number n = nvalue(key); + int k; + lua_number2int(k, n); + if (luai_numeq(cast_num(k), n)) + return k; + } + return -1; /* `key' did not match some condition */ +} + + +/* +** returns the index of a `key' for table traversals. First goes all +** elements in the array part, then elements in the hash part. The +** beginning of a traversal is signaled by -1. +*/ +static int findindex (lua_State *L, Table *t, StkId key) { + int i; + if (ttisnil(key)) return -1; /* first iteration */ + i = arrayindex(key); + if (0 < i && i <= t->sizearray) /* is `key' inside array part? */ + return i-1; /* yes; that's the index (corrected to C) */ + else { + Node *n = mainposition(t, key); + for (;;) { /* check whether `key' is somewhere in the chain */ + /* key may be dead already, but it is ok to use it in `next' */ + if (luaV_rawequalobj(gkey(n), key) || + (ttisdeadkey(gkey(n)) && iscollectable(key) && + deadvalue(gkey(n)) == gcvalue(key))) { + i = cast_int(n - gnode(t, 0)); /* key index in hash table */ + /* hash elements are numbered after array ones */ + return i + t->sizearray; + } + else n = gnext(n); + if (n == NULL) + luaG_runerror(L, "invalid key to " LUA_QL("next")); /* key not found */ + } + } +} + + +int luaH_next (lua_State *L, Table *t, StkId key) { + int i = findindex(L, t, key); /* find original element */ + for (i++; i < t->sizearray; i++) { /* try first array part */ + if (!ttisnil(&t->array[i])) { /* a non-nil value? */ + setnvalue(key, cast_num(i+1)); + setobj2s(L, key+1, &t->array[i]); + return 1; + } + } + for (i -= t->sizearray; i < sizenode(t); i++) { /* then hash part */ + if (!ttisnil(gval(gnode(t, i)))) { /* a non-nil value? */ + setobj2s(L, key, gkey(gnode(t, i))); + setobj2s(L, key+1, gval(gnode(t, i))); + return 1; + } + } + return 0; /* no more elements */ +} + + +/* +** {============================================================= +** Rehash +** ============================================================== +*/ + + +static int computesizes (int nums[], int *narray) { + int i; + int twotoi; /* 2^i */ + int a = 0; /* number of elements smaller than 2^i */ + int na = 0; /* number of elements to go to array part */ + int n = 0; /* optimal size for array part */ + for (i = 0, twotoi = 1; twotoi/2 < *narray; i++, twotoi *= 2) { + if (nums[i] > 0) { + a += nums[i]; + if (a > twotoi/2) { /* more than half elements present? */ + n = twotoi; /* optimal size (till now) */ + na = a; /* all elements smaller than n will go to array part */ + } + } + if (a == *narray) break; /* all elements already counted */ + } + *narray = n; + lua_assert(*narray/2 <= na && na <= *narray); + return na; +} + + +static int countint (const TValue *key, int *nums) { + int k = arrayindex(key); + if (0 < k && k <= MAXASIZE) { /* is `key' an appropriate array index? */ + nums[luaO_ceillog2(k)]++; /* count as such */ + return 1; + } + else + return 0; +} + + +static int numusearray (const Table *t, int *nums) { + int lg; + int ttlg; /* 2^lg */ + int ause = 0; /* summation of `nums' */ + int i = 1; /* count to traverse all array keys */ + for (lg=0, ttlg=1; lg<=MAXBITS; lg++, ttlg*=2) { /* for each slice */ + int lc = 0; /* counter */ + int lim = ttlg; + if (lim > t->sizearray) { + lim = t->sizearray; /* adjust upper limit */ + if (i > lim) + break; /* no more elements to count */ + } + /* count elements in range (2^(lg-1), 2^lg] */ + for (; i <= lim; i++) { + if (!ttisnil(&t->array[i-1])) + lc++; + } + nums[lg] += lc; + ause += lc; + } + return ause; +} + + +static int numusehash (const Table *t, int *nums, int *pnasize) { + int totaluse = 0; /* total number of elements */ + int ause = 0; /* summation of `nums' */ + int i = sizenode(t); + while (i--) { + Node *n = &t->node[i]; + if (!ttisnil(gval(n))) { + ause += countint(gkey(n), nums); + totaluse++; + } + } + *pnasize += ause; + return totaluse; +} + + +static void setarrayvector (lua_State *L, Table *t, int size) { + int i; + luaM_reallocvector(L, t->array, t->sizearray, size, TValue); + for (i=t->sizearray; iarray[i]); + t->sizearray = size; +} + + +static void setnodevector (lua_State *L, Table *t, int size) { + int lsize; + if (size == 0) { /* no elements to hash part? */ + t->node = cast(Node *, dummynode); /* use common `dummynode' */ + lsize = 0; + } + else { + int i; + lsize = luaO_ceillog2(size); + if (lsize > MAXBITS) + luaG_runerror(L, "table overflow"); + size = twoto(lsize); + t->node = luaM_newvector(L, size, Node); + for (i=0; ilsizenode = cast_byte(lsize); + t->lastfree = gnode(t, size); /* all positions are free */ +} + + +void luaH_resize (lua_State *L, Table *t, int nasize, int nhsize) { + int i; + int oldasize = t->sizearray; + int oldhsize = t->lsizenode; + Node *nold = t->node; /* save old hash ... */ + if (nasize > oldasize) /* array part must grow? */ + setarrayvector(L, t, nasize); + /* create new hash part with appropriate size */ + setnodevector(L, t, nhsize); + if (nasize < oldasize) { /* array part must shrink? */ + t->sizearray = nasize; + /* re-insert elements from vanishing slice */ + for (i=nasize; iarray[i])) + luaH_setint(L, t, i + 1, &t->array[i]); + } + /* shrink array */ + luaM_reallocvector(L, t->array, oldasize, nasize, TValue); + } + /* re-insert elements from hash part */ + for (i = twoto(oldhsize) - 1; i >= 0; i--) { + Node *old = nold+i; + if (!ttisnil(gval(old))) { + /* doesn't need barrier/invalidate cache, as entry was + already present in the table */ + setobjt2t(L, luaH_set(L, t, gkey(old)), gval(old)); + } + } + if (!isdummy(nold)) + luaM_freearray(L, nold, cast(size_t, twoto(oldhsize))); /* free old array */ +} + + +void luaH_resizearray (lua_State *L, Table *t, int nasize) { + int nsize = isdummy(t->node) ? 0 : sizenode(t); + luaH_resize(L, t, nasize, nsize); +} + + +static void rehash (lua_State *L, Table *t, const TValue *ek) { + int nasize, na; + int nums[MAXBITS+1]; /* nums[i] = number of keys with 2^(i-1) < k <= 2^i */ + int i; + int totaluse; + for (i=0; i<=MAXBITS; i++) nums[i] = 0; /* reset counts */ + nasize = numusearray(t, nums); /* count keys in array part */ + totaluse = nasize; /* all those keys are integer keys */ + totaluse += numusehash(t, nums, &nasize); /* count keys in hash part */ + /* count extra key */ + nasize += countint(ek, nums); + totaluse++; + /* compute new size for array part */ + na = computesizes(nums, &nasize); + /* resize the table to new computed sizes */ + luaH_resize(L, t, nasize, totaluse - na); +} + + + +/* +** }============================================================= +*/ + + +Table *luaH_new (lua_State *L) { + Table *t = &luaC_newobj(L, LUA_TTABLE, sizeof(Table), NULL, 0)->h; + t->metatable = NULL; + t->flags = cast_byte(~0); + t->array = NULL; + t->sizearray = 0; + setnodevector(L, t, 0); + return t; +} + + +void luaH_free (lua_State *L, Table *t) { + if (!isdummy(t->node)) + luaM_freearray(L, t->node, cast(size_t, sizenode(t))); + luaM_freearray(L, t->array, t->sizearray); + luaM_free(L, t); +} + + +static Node *getfreepos (Table *t) { + while (t->lastfree > t->node) { + t->lastfree--; + if (ttisnil(gkey(t->lastfree))) + return t->lastfree; + } + return NULL; /* could not find a free place */ +} + + + +/* +** inserts a new key into a hash table; first, check whether key's main +** position is free. If not, check whether colliding node is in its main +** position or not: if it is not, move colliding node to an empty place and +** put new key in its main position; otherwise (colliding node is in its main +** position), new key goes to an empty position. +*/ +TValue *luaH_newkey (lua_State *L, Table *t, const TValue *key) { + Node *mp; + if (ttisnil(key)) luaG_runerror(L, "table index is nil"); + else if (ttisnumber(key) && luai_numisnan(L, nvalue(key))) + luaG_runerror(L, "table index is NaN"); + mp = mainposition(t, key); + if (!ttisnil(gval(mp)) || isdummy(mp)) { /* main position is taken? */ + Node *othern; + Node *n = getfreepos(t); /* get a free place */ + if (n == NULL) { /* cannot find a free place? */ + rehash(L, t, key); /* grow table */ + /* whatever called 'newkey' take care of TM cache and GC barrier */ + return luaH_set(L, t, key); /* insert key into grown table */ + } + lua_assert(!isdummy(n)); + othern = mainposition(t, gkey(mp)); + if (othern != mp) { /* is colliding node out of its main position? */ + /* yes; move colliding node into free position */ + while (gnext(othern) != mp) othern = gnext(othern); /* find previous */ + gnext(othern) = n; /* redo the chain with `n' in place of `mp' */ + *n = *mp; /* copy colliding node into free pos. (mp->next also goes) */ + gnext(mp) = NULL; /* now `mp' is free */ + setnilvalue(gval(mp)); + } + else { /* colliding node is in its own main position */ + /* new node will go into free position */ + gnext(n) = gnext(mp); /* chain new position */ + gnext(mp) = n; + mp = n; + } + } + setobj2t(L, gkey(mp), key); + luaC_barrierback(L, obj2gco(t), key); + lua_assert(ttisnil(gval(mp))); + return gval(mp); +} + + +/* +** search function for integers +*/ +const TValue *luaH_getint (Table *t, int key) { + /* (1 <= key && key <= t->sizearray) */ + if (cast(unsigned int, key-1) < cast(unsigned int, t->sizearray)) + return &t->array[key-1]; + else { + lua_Number nk = cast_num(key); + Node *n = hashnum(t, nk); + do { /* check whether `key' is somewhere in the chain */ + if (ttisnumber(gkey(n)) && luai_numeq(nvalue(gkey(n)), nk)) + return gval(n); /* that's it */ + else n = gnext(n); + } while (n); + return luaO_nilobject; + } +} + + +/* +** search function for short strings +*/ +const TValue *luaH_getstr (Table *t, TString *key) { + Node *n = hashstr(t, key); + lua_assert(key->tsv.tt == LUA_TSHRSTR); + do { /* check whether `key' is somewhere in the chain */ + if (ttisshrstring(gkey(n)) && eqshrstr(rawtsvalue(gkey(n)), key)) + return gval(n); /* that's it */ + else n = gnext(n); + } while (n); + return luaO_nilobject; +} + + +/* +** main search function +*/ +const TValue *luaH_get (Table *t, const TValue *key) { + switch (ttype(key)) { + case LUA_TSHRSTR: return luaH_getstr(t, rawtsvalue(key)); + case LUA_TNIL: return luaO_nilobject; + case LUA_TNUMBER: { + int k; + lua_Number n = nvalue(key); + lua_number2int(k, n); + if (luai_numeq(cast_num(k), n)) /* index is int? */ + return luaH_getint(t, k); /* use specialized version */ + /* else go through */ + } + default: { + Node *n = mainposition(t, key); + do { /* check whether `key' is somewhere in the chain */ + if (luaV_rawequalobj(gkey(n), key)) + return gval(n); /* that's it */ + else n = gnext(n); + } while (n); + return luaO_nilobject; + } + } +} + + +/* +** beware: when using this function you probably need to check a GC +** barrier and invalidate the TM cache. +*/ +TValue *luaH_set (lua_State *L, Table *t, const TValue *key) { + const TValue *p = luaH_get(t, key); + if (p != luaO_nilobject) + return cast(TValue *, p); + else return luaH_newkey(L, t, key); +} + + +void luaH_setint (lua_State *L, Table *t, int key, TValue *value) { + const TValue *p = luaH_getint(t, key); + TValue *cell; + if (p != luaO_nilobject) + cell = cast(TValue *, p); + else { + TValue k; + setnvalue(&k, cast_num(key)); + cell = luaH_newkey(L, t, &k); + } + setobj2t(L, cell, value); +} + + +static int unbound_search (Table *t, unsigned int j) { + unsigned int i = j; /* i is zero or a present index */ + j++; + /* find `i' and `j' such that i is present and j is not */ + while (!ttisnil(luaH_getint(t, j))) { + i = j; + j *= 2; + if (j > cast(unsigned int, MAX_INT)) { /* overflow? */ + /* table was built with bad purposes: resort to linear search */ + i = 1; + while (!ttisnil(luaH_getint(t, i))) i++; + return i - 1; + } + } + /* now do a binary search between them */ + while (j - i > 1) { + unsigned int m = (i+j)/2; + if (ttisnil(luaH_getint(t, m))) j = m; + else i = m; + } + return i; +} + + +/* +** Try to find a boundary in table `t'. A `boundary' is an integer index +** such that t[i] is non-nil and t[i+1] is nil (and 0 if t[1] is nil). +*/ +int luaH_getn (Table *t) { + unsigned int j = t->sizearray; + if (j > 0 && ttisnil(&t->array[j - 1])) { + /* there is a boundary in the array part: (binary) search for it */ + unsigned int i = 0; + while (j - i > 1) { + unsigned int m = (i+j)/2; + if (ttisnil(&t->array[m - 1])) j = m; + else i = m; + } + return i; + } + /* else must find a boundary in hash part */ + else if (isdummy(t->node)) /* hash part is empty? */ + return j; /* that is easy... */ + else return unbound_search(t, j); +} + + + +#if defined(LUA_DEBUG) + +Node *luaH_mainposition (const Table *t, const TValue *key) { + return mainposition(t, key); +} + +int luaH_isdummy (Node *n) { return isdummy(n); } + +#endif diff --git a/lua-5.2.4/src/ltable.h b/lua-5.2.4/src/ltable.h new file mode 100644 index 000000000..d69449b2b --- /dev/null +++ b/lua-5.2.4/src/ltable.h @@ -0,0 +1,45 @@ +/* +** $Id: ltable.h,v 2.16.1.2 2013/08/30 15:49:41 roberto Exp $ +** Lua tables (hash) +** See Copyright Notice in lua.h +*/ + +#ifndef ltable_h +#define ltable_h + +#include "lobject.h" + + +#define gnode(t,i) (&(t)->node[i]) +#define gkey(n) (&(n)->i_key.tvk) +#define gval(n) (&(n)->i_val) +#define gnext(n) ((n)->i_key.nk.next) + +#define invalidateTMcache(t) ((t)->flags = 0) + +/* returns the key, given the value of a table entry */ +#define keyfromval(v) \ + (gkey(cast(Node *, cast(char *, (v)) - offsetof(Node, i_val)))) + + +LUAI_FUNC const TValue *luaH_getint (Table *t, int key); +LUAI_FUNC void luaH_setint (lua_State *L, Table *t, int key, TValue *value); +LUAI_FUNC const TValue *luaH_getstr (Table *t, TString *key); +LUAI_FUNC const TValue *luaH_get (Table *t, const TValue *key); +LUAI_FUNC TValue *luaH_newkey (lua_State *L, Table *t, const TValue *key); +LUAI_FUNC TValue *luaH_set (lua_State *L, Table *t, const TValue *key); +LUAI_FUNC Table *luaH_new (lua_State *L); +LUAI_FUNC void luaH_resize (lua_State *L, Table *t, int nasize, int nhsize); +LUAI_FUNC void luaH_resizearray (lua_State *L, Table *t, int nasize); +LUAI_FUNC void luaH_free (lua_State *L, Table *t); +LUAI_FUNC int luaH_next (lua_State *L, Table *t, StkId key); +LUAI_FUNC int luaH_getn (Table *t); + + +#if defined(LUA_DEBUG) +LUAI_FUNC Node *luaH_mainposition (const Table *t, const TValue *key); +LUAI_FUNC int luaH_isdummy (Node *n); +#endif + + +#endif diff --git a/lua-5.2.4/src/ltablib.c b/lua-5.2.4/src/ltablib.c new file mode 100644 index 000000000..99764d26d --- /dev/null +++ b/lua-5.2.4/src/ltablib.c @@ -0,0 +1,285 @@ +/* +** $Id: ltablib.c,v 1.65.1.2 2014/05/07 16:32:55 roberto Exp $ +** Library for Table Manipulation +** See Copyright Notice in lua.h +*/ + + +#include +#include + +#define ltablib_c +#define LUA_LIB + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +#define aux_getn(L,n) (luaL_checktype(L, n, LUA_TTABLE), luaL_len(L, n)) + + + +#if defined(LUA_COMPAT_MAXN) +static int maxn (lua_State *L) { + lua_Number max = 0; + luaL_checktype(L, 1, LUA_TTABLE); + lua_pushnil(L); /* first key */ + while (lua_next(L, 1)) { + lua_pop(L, 1); /* remove value */ + if (lua_type(L, -1) == LUA_TNUMBER) { + lua_Number v = lua_tonumber(L, -1); + if (v > max) max = v; + } + } + lua_pushnumber(L, max); + return 1; +} +#endif + + +static int tinsert (lua_State *L) { + int e = aux_getn(L, 1) + 1; /* first empty element */ + int pos; /* where to insert new element */ + switch (lua_gettop(L)) { + case 2: { /* called with only 2 arguments */ + pos = e; /* insert new element at the end */ + break; + } + case 3: { + int i; + pos = luaL_checkint(L, 2); /* 2nd argument is the position */ + luaL_argcheck(L, 1 <= pos && pos <= e, 2, "position out of bounds"); + for (i = e; i > pos; i--) { /* move up elements */ + lua_rawgeti(L, 1, i-1); + lua_rawseti(L, 1, i); /* t[i] = t[i-1] */ + } + break; + } + default: { + return luaL_error(L, "wrong number of arguments to " LUA_QL("insert")); + } + } + lua_rawseti(L, 1, pos); /* t[pos] = v */ + return 0; +} + + +static int tremove (lua_State *L) { + int size = aux_getn(L, 1); + int pos = luaL_optint(L, 2, size); + if (pos != size) /* validate 'pos' if given */ + luaL_argcheck(L, 1 <= pos && pos <= size + 1, 1, "position out of bounds"); + lua_rawgeti(L, 1, pos); /* result = t[pos] */ + for ( ; pos < size; pos++) { + lua_rawgeti(L, 1, pos+1); + lua_rawseti(L, 1, pos); /* t[pos] = t[pos+1] */ + } + lua_pushnil(L); + lua_rawseti(L, 1, pos); /* t[pos] = nil */ + return 1; +} + + +static void addfield (lua_State *L, luaL_Buffer *b, int i) { + lua_rawgeti(L, 1, i); + if (!lua_isstring(L, -1)) + luaL_error(L, "invalid value (%s) at index %d in table for " + LUA_QL("concat"), luaL_typename(L, -1), i); + luaL_addvalue(b); +} + + +static int tconcat (lua_State *L) { + luaL_Buffer b; + size_t lsep; + int i, last; + const char *sep = luaL_optlstring(L, 2, "", &lsep); + luaL_checktype(L, 1, LUA_TTABLE); + i = luaL_optint(L, 3, 1); + last = luaL_opt(L, luaL_checkint, 4, luaL_len(L, 1)); + luaL_buffinit(L, &b); + for (; i < last; i++) { + addfield(L, &b, i); + luaL_addlstring(&b, sep, lsep); + } + if (i == last) /* add last value (if interval was not empty) */ + addfield(L, &b, i); + luaL_pushresult(&b); + return 1; +} + + +/* +** {====================================================== +** Pack/unpack +** ======================================================= +*/ + +static int pack (lua_State *L) { + int n = lua_gettop(L); /* number of elements to pack */ + lua_createtable(L, n, 1); /* create result table */ + lua_pushinteger(L, n); + lua_setfield(L, -2, "n"); /* t.n = number of elements */ + if (n > 0) { /* at least one element? */ + int i; + lua_pushvalue(L, 1); + lua_rawseti(L, -2, 1); /* insert first element */ + lua_replace(L, 1); /* move table into index 1 */ + for (i = n; i >= 2; i--) /* assign other elements */ + lua_rawseti(L, 1, i); + } + return 1; /* return table */ +} + + +static int unpack (lua_State *L) { + int i, e; + unsigned int n; + luaL_checktype(L, 1, LUA_TTABLE); + i = luaL_optint(L, 2, 1); + e = luaL_opt(L, luaL_checkint, 3, luaL_len(L, 1)); + if (i > e) return 0; /* empty range */ + n = (unsigned int)e - (unsigned int)i; /* number of elements minus 1 */ + if (n > (INT_MAX - 10) || !lua_checkstack(L, ++n)) + return luaL_error(L, "too many results to unpack"); + lua_rawgeti(L, 1, i); /* push arg[i] (avoiding overflow problems) */ + while (i++ < e) /* push arg[i + 1...e] */ + lua_rawgeti(L, 1, i); + return n; +} + +/* }====================================================== */ + + + +/* +** {====================================================== +** Quicksort +** (based on `Algorithms in MODULA-3', Robert Sedgewick; +** Addison-Wesley, 1993.) +** ======================================================= +*/ + + +static void set2 (lua_State *L, int i, int j) { + lua_rawseti(L, 1, i); + lua_rawseti(L, 1, j); +} + +static int sort_comp (lua_State *L, int a, int b) { + if (!lua_isnil(L, 2)) { /* function? */ + int res; + lua_pushvalue(L, 2); + lua_pushvalue(L, a-1); /* -1 to compensate function */ + lua_pushvalue(L, b-2); /* -2 to compensate function and `a' */ + lua_call(L, 2, 1); + res = lua_toboolean(L, -1); + lua_pop(L, 1); + return res; + } + else /* a < b? */ + return lua_compare(L, a, b, LUA_OPLT); +} + +static void auxsort (lua_State *L, int l, int u) { + while (l < u) { /* for tail recursion */ + int i, j; + /* sort elements a[l], a[(l+u)/2] and a[u] */ + lua_rawgeti(L, 1, l); + lua_rawgeti(L, 1, u); + if (sort_comp(L, -1, -2)) /* a[u] < a[l]? */ + set2(L, l, u); /* swap a[l] - a[u] */ + else + lua_pop(L, 2); + if (u-l == 1) break; /* only 2 elements */ + i = (l+u)/2; + lua_rawgeti(L, 1, i); + lua_rawgeti(L, 1, l); + if (sort_comp(L, -2, -1)) /* a[i]= P */ + while (lua_rawgeti(L, 1, ++i), sort_comp(L, -1, -2)) { + if (i>=u) luaL_error(L, "invalid order function for sorting"); + lua_pop(L, 1); /* remove a[i] */ + } + /* repeat --j until a[j] <= P */ + while (lua_rawgeti(L, 1, --j), sort_comp(L, -3, -1)) { + if (j<=l) luaL_error(L, "invalid order function for sorting"); + lua_pop(L, 1); /* remove a[j] */ + } + if (j + +#define ltm_c +#define LUA_CORE + +#include "lua.h" + +#include "lobject.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "ltm.h" + + +static const char udatatypename[] = "userdata"; + +LUAI_DDEF const char *const luaT_typenames_[LUA_TOTALTAGS] = { + "no value", + "nil", "boolean", udatatypename, "number", + "string", "table", "function", udatatypename, "thread", + "proto", "upval" /* these last two cases are used for tests only */ +}; + + +void luaT_init (lua_State *L) { + static const char *const luaT_eventname[] = { /* ORDER TM */ + "__index", "__newindex", + "__gc", "__mode", "__len", "__eq", + "__add", "__sub", "__mul", "__div", "__mod", + "__pow", "__unm", "__lt", "__le", + "__concat", "__call" + }; + int i; + for (i=0; itmname[i] = luaS_new(L, luaT_eventname[i]); + luaS_fix(G(L)->tmname[i]); /* never collect these names */ + } +} + + +/* +** function to be used with macro "fasttm": optimized for absence of +** tag methods +*/ +const TValue *luaT_gettm (Table *events, TMS event, TString *ename) { + const TValue *tm = luaH_getstr(events, ename); + lua_assert(event <= TM_EQ); + if (ttisnil(tm)) { /* no tag method? */ + events->flags |= cast_byte(1u<metatable; + break; + case LUA_TUSERDATA: + mt = uvalue(o)->metatable; + break; + default: + mt = G(L)->mt[ttypenv(o)]; + } + return (mt ? luaH_getstr(mt, G(L)->tmname[event]) : luaO_nilobject); +} + diff --git a/lua-5.2.4/src/ltm.h b/lua-5.2.4/src/ltm.h new file mode 100644 index 000000000..7f89c841f --- /dev/null +++ b/lua-5.2.4/src/ltm.h @@ -0,0 +1,57 @@ +/* +** $Id: ltm.h,v 2.11.1.1 2013/04/12 18:48:47 roberto Exp $ +** Tag methods +** See Copyright Notice in lua.h +*/ + +#ifndef ltm_h +#define ltm_h + + +#include "lobject.h" + + +/* +* WARNING: if you change the order of this enumeration, +* grep "ORDER TM" +*/ +typedef enum { + TM_INDEX, + TM_NEWINDEX, + TM_GC, + TM_MODE, + TM_LEN, + TM_EQ, /* last tag method with `fast' access */ + TM_ADD, + TM_SUB, + TM_MUL, + TM_DIV, + TM_MOD, + TM_POW, + TM_UNM, + TM_LT, + TM_LE, + TM_CONCAT, + TM_CALL, + TM_N /* number of elements in the enum */ +} TMS; + + + +#define gfasttm(g,et,e) ((et) == NULL ? NULL : \ + ((et)->flags & (1u<<(e))) ? NULL : luaT_gettm(et, e, (g)->tmname[e])) + +#define fasttm(l,et,e) gfasttm(G(l), et, e) + +#define ttypename(x) luaT_typenames_[(x) + 1] +#define objtypename(x) ttypename(ttypenv(x)) + +LUAI_DDEC const char *const luaT_typenames_[LUA_TOTALTAGS]; + + +LUAI_FUNC const TValue *luaT_gettm (Table *events, TMS event, TString *ename); +LUAI_FUNC const TValue *luaT_gettmbyobj (lua_State *L, const TValue *o, + TMS event); +LUAI_FUNC void luaT_init (lua_State *L); + +#endif diff --git a/lua-5.2.4/src/lua.c b/lua-5.2.4/src/lua.c new file mode 100644 index 000000000..4345e554e --- /dev/null +++ b/lua-5.2.4/src/lua.c @@ -0,0 +1,497 @@ +/* +** $Id: lua.c,v 1.206.1.1 2013/04/12 18:48:47 roberto Exp $ +** Lua stand-alone interpreter +** See Copyright Notice in lua.h +*/ + + +#include +#include +#include +#include + +#define lua_c + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +#if !defined(LUA_PROMPT) +#define LUA_PROMPT "> " +#define LUA_PROMPT2 ">> " +#endif + +#if !defined(LUA_PROGNAME) +#define LUA_PROGNAME "lua" +#endif + +#if !defined(LUA_MAXINPUT) +#define LUA_MAXINPUT 512 +#endif + +#if !defined(LUA_INIT) +#define LUA_INIT "LUA_INIT" +#endif + +#define LUA_INITVERSION \ + LUA_INIT "_" LUA_VERSION_MAJOR "_" LUA_VERSION_MINOR + + +/* +** lua_stdin_is_tty detects whether the standard input is a 'tty' (that +** is, whether we're running lua interactively). +*/ +#if defined(LUA_USE_ISATTY) +#include +#define lua_stdin_is_tty() isatty(0) +#elif defined(LUA_WIN) +#include +#include +#define lua_stdin_is_tty() _isatty(_fileno(stdin)) +#else +#define lua_stdin_is_tty() 1 /* assume stdin is a tty */ +#endif + + +/* +** lua_readline defines how to show a prompt and then read a line from +** the standard input. +** lua_saveline defines how to "save" a read line in a "history". +** lua_freeline defines how to free a line read by lua_readline. +*/ +#if defined(LUA_USE_READLINE) + +#include +#include +#include +#define lua_readline(L,b,p) ((void)L, ((b)=readline(p)) != NULL) +#define lua_saveline(L,idx) \ + if (lua_rawlen(L,idx) > 0) /* non-empty line? */ \ + add_history(lua_tostring(L, idx)); /* add it to history */ +#define lua_freeline(L,b) ((void)L, free(b)) + +#elif !defined(lua_readline) + +#define lua_readline(L,b,p) \ + ((void)L, fputs(p, stdout), fflush(stdout), /* show prompt */ \ + fgets(b, LUA_MAXINPUT, stdin) != NULL) /* get line */ +#define lua_saveline(L,idx) { (void)L; (void)idx; } +#define lua_freeline(L,b) { (void)L; (void)b; } + +#endif + + + + +static lua_State *globalL = NULL; + +static const char *progname = LUA_PROGNAME; + + + +static void lstop (lua_State *L, lua_Debug *ar) { + (void)ar; /* unused arg. */ + lua_sethook(L, NULL, 0, 0); + luaL_error(L, "interrupted!"); +} + + +static void laction (int i) { + signal(i, SIG_DFL); /* if another SIGINT happens before lstop, + terminate process (default action) */ + lua_sethook(globalL, lstop, LUA_MASKCALL | LUA_MASKRET | LUA_MASKCOUNT, 1); +} + + +static void print_usage (const char *badoption) { + luai_writestringerror("%s: ", progname); + if (badoption[1] == 'e' || badoption[1] == 'l') + luai_writestringerror("'%s' needs argument\n", badoption); + else + luai_writestringerror("unrecognized option '%s'\n", badoption); + luai_writestringerror( + "usage: %s [options] [script [args]]\n" + "Available options are:\n" + " -e stat execute string " LUA_QL("stat") "\n" + " -i enter interactive mode after executing " LUA_QL("script") "\n" + " -l name require library " LUA_QL("name") "\n" + " -v show version information\n" + " -E ignore environment variables\n" + " -- stop handling options\n" + " - stop handling options and execute stdin\n" + , + progname); +} + + +static void l_message (const char *pname, const char *msg) { + if (pname) luai_writestringerror("%s: ", pname); + luai_writestringerror("%s\n", msg); +} + + +static int report (lua_State *L, int status) { + if (status != LUA_OK && !lua_isnil(L, -1)) { + const char *msg = lua_tostring(L, -1); + if (msg == NULL) msg = "(error object is not a string)"; + l_message(progname, msg); + lua_pop(L, 1); + /* force a complete garbage collection in case of errors */ + lua_gc(L, LUA_GCCOLLECT, 0); + } + return status; +} + + +/* the next function is called unprotected, so it must avoid errors */ +static void finalreport (lua_State *L, int status) { + if (status != LUA_OK) { + const char *msg = (lua_type(L, -1) == LUA_TSTRING) ? lua_tostring(L, -1) + : NULL; + if (msg == NULL) msg = "(error object is not a string)"; + l_message(progname, msg); + lua_pop(L, 1); + } +} + + +static int traceback (lua_State *L) { + const char *msg = lua_tostring(L, 1); + if (msg) + luaL_traceback(L, L, msg, 1); + else if (!lua_isnoneornil(L, 1)) { /* is there an error object? */ + if (!luaL_callmeta(L, 1, "__tostring")) /* try its 'tostring' metamethod */ + lua_pushliteral(L, "(no error message)"); + } + return 1; +} + + +static int docall (lua_State *L, int narg, int nres) { + int status; + int base = lua_gettop(L) - narg; /* function index */ + lua_pushcfunction(L, traceback); /* push traceback function */ + lua_insert(L, base); /* put it under chunk and args */ + globalL = L; /* to be available to 'laction' */ + signal(SIGINT, laction); + status = lua_pcall(L, narg, nres, base); + signal(SIGINT, SIG_DFL); + lua_remove(L, base); /* remove traceback function */ + return status; +} + + +static void print_version (void) { + luai_writestring(LUA_COPYRIGHT, strlen(LUA_COPYRIGHT)); + luai_writeline(); +} + + +static int getargs (lua_State *L, char **argv, int n) { + int narg; + int i; + int argc = 0; + while (argv[argc]) argc++; /* count total number of arguments */ + narg = argc - (n + 1); /* number of arguments to the script */ + luaL_checkstack(L, narg + 3, "too many arguments to script"); + for (i=n+1; i < argc; i++) + lua_pushstring(L, argv[i]); + lua_createtable(L, narg, n + 1); + for (i=0; i < argc; i++) { + lua_pushstring(L, argv[i]); + lua_rawseti(L, -2, i - n); + } + return narg; +} + + +static int dofile (lua_State *L, const char *name) { + int status = luaL_loadfile(L, name); + if (status == LUA_OK) status = docall(L, 0, 0); + return report(L, status); +} + + +static int dostring (lua_State *L, const char *s, const char *name) { + int status = luaL_loadbuffer(L, s, strlen(s), name); + if (status == LUA_OK) status = docall(L, 0, 0); + return report(L, status); +} + + +static int dolibrary (lua_State *L, const char *name) { + int status; + lua_getglobal(L, "require"); + lua_pushstring(L, name); + status = docall(L, 1, 1); /* call 'require(name)' */ + if (status == LUA_OK) + lua_setglobal(L, name); /* global[name] = require return */ + return report(L, status); +} + + +static const char *get_prompt (lua_State *L, int firstline) { + const char *p; + lua_getglobal(L, firstline ? "_PROMPT" : "_PROMPT2"); + p = lua_tostring(L, -1); + if (p == NULL) p = (firstline ? LUA_PROMPT : LUA_PROMPT2); + return p; +} + +/* mark in error messages for incomplete statements */ +#define EOFMARK "" +#define marklen (sizeof(EOFMARK)/sizeof(char) - 1) + +static int incomplete (lua_State *L, int status) { + if (status == LUA_ERRSYNTAX) { + size_t lmsg; + const char *msg = lua_tolstring(L, -1, &lmsg); + if (lmsg >= marklen && strcmp(msg + lmsg - marklen, EOFMARK) == 0) { + lua_pop(L, 1); + return 1; + } + } + return 0; /* else... */ +} + + +static int pushline (lua_State *L, int firstline) { + char buffer[LUA_MAXINPUT]; + char *b = buffer; + size_t l; + const char *prmt = get_prompt(L, firstline); + int readstatus = lua_readline(L, b, prmt); + lua_pop(L, 1); /* remove result from 'get_prompt' */ + if (readstatus == 0) + return 0; /* no input */ + l = strlen(b); + if (l > 0 && b[l-1] == '\n') /* line ends with newline? */ + b[l-1] = '\0'; /* remove it */ + if (firstline && b[0] == '=') /* first line starts with `=' ? */ + lua_pushfstring(L, "return %s", b+1); /* change it to `return' */ + else + lua_pushstring(L, b); + lua_freeline(L, b); + return 1; +} + + +static int loadline (lua_State *L) { + int status; + lua_settop(L, 0); + if (!pushline(L, 1)) + return -1; /* no input */ + for (;;) { /* repeat until gets a complete line */ + size_t l; + const char *line = lua_tolstring(L, 1, &l); + status = luaL_loadbuffer(L, line, l, "=stdin"); + if (!incomplete(L, status)) break; /* cannot try to add lines? */ + if (!pushline(L, 0)) /* no more input? */ + return -1; + lua_pushliteral(L, "\n"); /* add a new line... */ + lua_insert(L, -2); /* ...between the two lines */ + lua_concat(L, 3); /* join them */ + } + lua_saveline(L, 1); + lua_remove(L, 1); /* remove line */ + return status; +} + + +static void dotty (lua_State *L) { + int status; + const char *oldprogname = progname; + progname = NULL; + while ((status = loadline(L)) != -1) { + if (status == LUA_OK) status = docall(L, 0, LUA_MULTRET); + report(L, status); + if (status == LUA_OK && lua_gettop(L) > 0) { /* any result to print? */ + luaL_checkstack(L, LUA_MINSTACK, "too many results to print"); + lua_getglobal(L, "print"); + lua_insert(L, 1); + if (lua_pcall(L, lua_gettop(L)-1, 0, 0) != LUA_OK) + l_message(progname, lua_pushfstring(L, + "error calling " LUA_QL("print") " (%s)", + lua_tostring(L, -1))); + } + } + lua_settop(L, 0); /* clear stack */ + luai_writeline(); + progname = oldprogname; +} + + +static int handle_script (lua_State *L, char **argv, int n) { + int status; + const char *fname; + int narg = getargs(L, argv, n); /* collect arguments */ + lua_setglobal(L, "arg"); + fname = argv[n]; + if (strcmp(fname, "-") == 0 && strcmp(argv[n-1], "--") != 0) + fname = NULL; /* stdin */ + status = luaL_loadfile(L, fname); + lua_insert(L, -(narg+1)); + if (status == LUA_OK) + status = docall(L, narg, LUA_MULTRET); + else + lua_pop(L, narg); + return report(L, status); +} + + +/* check that argument has no extra characters at the end */ +#define noextrachars(x) {if ((x)[2] != '\0') return -1;} + + +/* indices of various argument indicators in array args */ +#define has_i 0 /* -i */ +#define has_v 1 /* -v */ +#define has_e 2 /* -e */ +#define has_E 3 /* -E */ + +#define num_has 4 /* number of 'has_*' */ + + +static int collectargs (char **argv, int *args) { + int i; + for (i = 1; argv[i] != NULL; i++) { + if (argv[i][0] != '-') /* not an option? */ + return i; + switch (argv[i][1]) { /* option */ + case '-': + noextrachars(argv[i]); + return (argv[i+1] != NULL ? i+1 : 0); + case '\0': + return i; + case 'E': + args[has_E] = 1; + break; + case 'i': + noextrachars(argv[i]); + args[has_i] = 1; /* go through */ + case 'v': + noextrachars(argv[i]); + args[has_v] = 1; + break; + case 'e': + args[has_e] = 1; /* go through */ + case 'l': /* both options need an argument */ + if (argv[i][2] == '\0') { /* no concatenated argument? */ + i++; /* try next 'argv' */ + if (argv[i] == NULL || argv[i][0] == '-') + return -(i - 1); /* no next argument or it is another option */ + } + break; + default: /* invalid option; return its index... */ + return -i; /* ...as a negative value */ + } + } + return 0; +} + + +static int runargs (lua_State *L, char **argv, int n) { + int i; + for (i = 1; i < n; i++) { + lua_assert(argv[i][0] == '-'); + switch (argv[i][1]) { /* option */ + case 'e': { + const char *chunk = argv[i] + 2; + if (*chunk == '\0') chunk = argv[++i]; + lua_assert(chunk != NULL); + if (dostring(L, chunk, "=(command line)") != LUA_OK) + return 0; + break; + } + case 'l': { + const char *filename = argv[i] + 2; + if (*filename == '\0') filename = argv[++i]; + lua_assert(filename != NULL); + if (dolibrary(L, filename) != LUA_OK) + return 0; /* stop if file fails */ + break; + } + default: break; + } + } + return 1; +} + + +static int handle_luainit (lua_State *L) { + const char *name = "=" LUA_INITVERSION; + const char *init = getenv(name + 1); + if (init == NULL) { + name = "=" LUA_INIT; + init = getenv(name + 1); /* try alternative name */ + } + if (init == NULL) return LUA_OK; + else if (init[0] == '@') + return dofile(L, init+1); + else + return dostring(L, init, name); +} + + +static int pmain (lua_State *L) { + int argc = (int)lua_tointeger(L, 1); + char **argv = (char **)lua_touserdata(L, 2); + int script; + int args[num_has]; + args[has_i] = args[has_v] = args[has_e] = args[has_E] = 0; + if (argv[0] && argv[0][0]) progname = argv[0]; + script = collectargs(argv, args); + if (script < 0) { /* invalid arg? */ + print_usage(argv[-script]); + return 0; + } + if (args[has_v]) print_version(); + if (args[has_E]) { /* option '-E'? */ + lua_pushboolean(L, 1); /* signal for libraries to ignore env. vars. */ + lua_setfield(L, LUA_REGISTRYINDEX, "LUA_NOENV"); + } + /* open standard libraries */ + luaL_checkversion(L); + lua_gc(L, LUA_GCSTOP, 0); /* stop collector during initialization */ + luaL_openlibs(L); /* open libraries */ + lua_gc(L, LUA_GCRESTART, 0); + if (!args[has_E] && handle_luainit(L) != LUA_OK) + return 0; /* error running LUA_INIT */ + /* execute arguments -e and -l */ + if (!runargs(L, argv, (script > 0) ? script : argc)) return 0; + /* execute main script (if there is one) */ + if (script && handle_script(L, argv, script) != LUA_OK) return 0; + if (args[has_i]) /* -i option? */ + dotty(L); + else if (script == 0 && !args[has_e] && !args[has_v]) { /* no arguments? */ + if (lua_stdin_is_tty()) { + print_version(); + dotty(L); + } + else dofile(L, NULL); /* executes stdin as a file */ + } + lua_pushboolean(L, 1); /* signal no errors */ + return 1; +} + + +int main (int argc, char **argv) { + int status, result; + lua_State *L = luaL_newstate(); /* create state */ + if (L == NULL) { + l_message(argv[0], "cannot create state: not enough memory"); + return EXIT_FAILURE; + } + /* call 'pmain' in protected mode */ + lua_pushcfunction(L, &pmain); + lua_pushinteger(L, argc); /* 1st argument */ + lua_pushlightuserdata(L, argv); /* 2nd argument */ + status = lua_pcall(L, 2, 1, 0); + result = lua_toboolean(L, -1); /* get result */ + finalreport(L, status); + lua_close(L); + return (result && status == LUA_OK) ? EXIT_SUCCESS : EXIT_FAILURE; +} + diff --git a/lua-5.2.4/src/lua.h b/lua-5.2.4/src/lua.h new file mode 100644 index 000000000..ff4a10861 --- /dev/null +++ b/lua-5.2.4/src/lua.h @@ -0,0 +1,444 @@ +/* +** $Id: lua.h,v 1.285.1.4 2015/02/21 14:04:50 roberto Exp $ +** Lua - A Scripting Language +** Lua.org, PUC-Rio, Brazil (http://www.lua.org) +** See Copyright Notice at the end of this file +*/ + + +#ifndef lua_h +#define lua_h + +#include +#include + + +#include "luaconf.h" + + +#define LUA_VERSION_MAJOR "5" +#define LUA_VERSION_MINOR "2" +#define LUA_VERSION_NUM 502 +#define LUA_VERSION_RELEASE "4" + +#define LUA_VERSION "Lua " LUA_VERSION_MAJOR "." LUA_VERSION_MINOR +#define LUA_RELEASE LUA_VERSION "." LUA_VERSION_RELEASE +#define LUA_COPYRIGHT LUA_RELEASE " Copyright (C) 1994-2015 Lua.org, PUC-Rio" +#define LUA_AUTHORS "R. Ierusalimschy, L. H. de Figueiredo, W. Celes" + + +/* mark for precompiled code ('Lua') */ +#define LUA_SIGNATURE "\033Lua" + +/* option for multiple returns in 'lua_pcall' and 'lua_call' */ +#define LUA_MULTRET (-1) + + +/* +** pseudo-indices +*/ +#define LUA_REGISTRYINDEX LUAI_FIRSTPSEUDOIDX +#define lua_upvalueindex(i) (LUA_REGISTRYINDEX - (i)) + + +/* thread status */ +#define LUA_OK 0 +#define LUA_YIELD 1 +#define LUA_ERRRUN 2 +#define LUA_ERRSYNTAX 3 +#define LUA_ERRMEM 4 +#define LUA_ERRGCMM 5 +#define LUA_ERRERR 6 + + +typedef struct lua_State lua_State; + +typedef int (*lua_CFunction) (lua_State *L); + + +/* +** functions that read/write blocks when loading/dumping Lua chunks +*/ +typedef const char * (*lua_Reader) (lua_State *L, void *ud, size_t *sz); + +typedef int (*lua_Writer) (lua_State *L, const void* p, size_t sz, void* ud); + + +/* +** prototype for memory-allocation functions +*/ +typedef void * (*lua_Alloc) (void *ud, void *ptr, size_t osize, size_t nsize); + + +/* +** basic types +*/ +#define LUA_TNONE (-1) + +#define LUA_TNIL 0 +#define LUA_TBOOLEAN 1 +#define LUA_TLIGHTUSERDATA 2 +#define LUA_TNUMBER 3 +#define LUA_TSTRING 4 +#define LUA_TTABLE 5 +#define LUA_TFUNCTION 6 +#define LUA_TUSERDATA 7 +#define LUA_TTHREAD 8 + +#define LUA_NUMTAGS 9 + + + +/* minimum Lua stack available to a C function */ +#define LUA_MINSTACK 20 + + +/* predefined values in the registry */ +#define LUA_RIDX_MAINTHREAD 1 +#define LUA_RIDX_GLOBALS 2 +#define LUA_RIDX_LAST LUA_RIDX_GLOBALS + + +/* type of numbers in Lua */ +typedef LUA_NUMBER lua_Number; + + +/* type for integer functions */ +typedef LUA_INTEGER lua_Integer; + +/* unsigned integer type */ +typedef LUA_UNSIGNED lua_Unsigned; + + + +/* +** generic extra include file +*/ +#if defined(LUA_USER_H) +#include LUA_USER_H +#endif + + +/* +** RCS ident string +*/ +extern const char lua_ident[]; + + +/* +** state manipulation +*/ +LUA_API lua_State *(lua_newstate) (lua_Alloc f, void *ud); +LUA_API void (lua_close) (lua_State *L); +LUA_API lua_State *(lua_newthread) (lua_State *L); + +LUA_API lua_CFunction (lua_atpanic) (lua_State *L, lua_CFunction panicf); + + +LUA_API const lua_Number *(lua_version) (lua_State *L); + + +/* +** basic stack manipulation +*/ +LUA_API int (lua_absindex) (lua_State *L, int idx); +LUA_API int (lua_gettop) (lua_State *L); +LUA_API void (lua_settop) (lua_State *L, int idx); +LUA_API void (lua_pushvalue) (lua_State *L, int idx); +LUA_API void (lua_remove) (lua_State *L, int idx); +LUA_API void (lua_insert) (lua_State *L, int idx); +LUA_API void (lua_replace) (lua_State *L, int idx); +LUA_API void (lua_copy) (lua_State *L, int fromidx, int toidx); +LUA_API int (lua_checkstack) (lua_State *L, int sz); + +LUA_API void (lua_xmove) (lua_State *from, lua_State *to, int n); + + +/* +** access functions (stack -> C) +*/ + +LUA_API int (lua_isnumber) (lua_State *L, int idx); +LUA_API int (lua_isstring) (lua_State *L, int idx); +LUA_API int (lua_iscfunction) (lua_State *L, int idx); +LUA_API int (lua_isuserdata) (lua_State *L, int idx); +LUA_API int (lua_type) (lua_State *L, int idx); +LUA_API const char *(lua_typename) (lua_State *L, int tp); + +LUA_API lua_Number (lua_tonumberx) (lua_State *L, int idx, int *isnum); +LUA_API lua_Integer (lua_tointegerx) (lua_State *L, int idx, int *isnum); +LUA_API lua_Unsigned (lua_tounsignedx) (lua_State *L, int idx, int *isnum); +LUA_API int (lua_toboolean) (lua_State *L, int idx); +LUA_API const char *(lua_tolstring) (lua_State *L, int idx, size_t *len); +LUA_API size_t (lua_rawlen) (lua_State *L, int idx); +LUA_API lua_CFunction (lua_tocfunction) (lua_State *L, int idx); +LUA_API void *(lua_touserdata) (lua_State *L, int idx); +LUA_API lua_State *(lua_tothread) (lua_State *L, int idx); +LUA_API const void *(lua_topointer) (lua_State *L, int idx); + + +/* +** Comparison and arithmetic functions +*/ + +#define LUA_OPADD 0 /* ORDER TM */ +#define LUA_OPSUB 1 +#define LUA_OPMUL 2 +#define LUA_OPDIV 3 +#define LUA_OPMOD 4 +#define LUA_OPPOW 5 +#define LUA_OPUNM 6 + +LUA_API void (lua_arith) (lua_State *L, int op); + +#define LUA_OPEQ 0 +#define LUA_OPLT 1 +#define LUA_OPLE 2 + +LUA_API int (lua_rawequal) (lua_State *L, int idx1, int idx2); +LUA_API int (lua_compare) (lua_State *L, int idx1, int idx2, int op); + + +/* +** push functions (C -> stack) +*/ +LUA_API void (lua_pushnil) (lua_State *L); +LUA_API void (lua_pushnumber) (lua_State *L, lua_Number n); +LUA_API void (lua_pushinteger) (lua_State *L, lua_Integer n); +LUA_API void (lua_pushunsigned) (lua_State *L, lua_Unsigned n); +LUA_API const char *(lua_pushlstring) (lua_State *L, const char *s, size_t l); +LUA_API const char *(lua_pushstring) (lua_State *L, const char *s); +LUA_API const char *(lua_pushvfstring) (lua_State *L, const char *fmt, + va_list argp); +LUA_API const char *(lua_pushfstring) (lua_State *L, const char *fmt, ...); +LUA_API void (lua_pushcclosure) (lua_State *L, lua_CFunction fn, int n); +LUA_API void (lua_pushboolean) (lua_State *L, int b); +LUA_API void (lua_pushlightuserdata) (lua_State *L, void *p); +LUA_API int (lua_pushthread) (lua_State *L); + + +/* +** get functions (Lua -> stack) +*/ +LUA_API void (lua_getglobal) (lua_State *L, const char *var); +LUA_API void (lua_gettable) (lua_State *L, int idx); +LUA_API void (lua_getfield) (lua_State *L, int idx, const char *k); +LUA_API void (lua_rawget) (lua_State *L, int idx); +LUA_API void (lua_rawgeti) (lua_State *L, int idx, int n); +LUA_API void (lua_rawgetp) (lua_State *L, int idx, const void *p); +LUA_API void (lua_createtable) (lua_State *L, int narr, int nrec); +LUA_API void *(lua_newuserdata) (lua_State *L, size_t sz); +LUA_API int (lua_getmetatable) (lua_State *L, int objindex); +LUA_API void (lua_getuservalue) (lua_State *L, int idx); + + +/* +** set functions (stack -> Lua) +*/ +LUA_API void (lua_setglobal) (lua_State *L, const char *var); +LUA_API void (lua_settable) (lua_State *L, int idx); +LUA_API void (lua_setfield) (lua_State *L, int idx, const char *k); +LUA_API void (lua_rawset) (lua_State *L, int idx); +LUA_API void (lua_rawseti) (lua_State *L, int idx, int n); +LUA_API void (lua_rawsetp) (lua_State *L, int idx, const void *p); +LUA_API int (lua_setmetatable) (lua_State *L, int objindex); +LUA_API void (lua_setuservalue) (lua_State *L, int idx); + + +/* +** 'load' and 'call' functions (load and run Lua code) +*/ +LUA_API void (lua_callk) (lua_State *L, int nargs, int nresults, int ctx, + lua_CFunction k); +#define lua_call(L,n,r) lua_callk(L, (n), (r), 0, NULL) + +LUA_API int (lua_getctx) (lua_State *L, int *ctx); + +LUA_API int (lua_pcallk) (lua_State *L, int nargs, int nresults, int errfunc, + int ctx, lua_CFunction k); +#define lua_pcall(L,n,r,f) lua_pcallk(L, (n), (r), (f), 0, NULL) + +LUA_API int (lua_load) (lua_State *L, lua_Reader reader, void *dt, + const char *chunkname, + const char *mode); + +LUA_API int (lua_dump) (lua_State *L, lua_Writer writer, void *data); + + +/* +** coroutine functions +*/ +LUA_API int (lua_yieldk) (lua_State *L, int nresults, int ctx, + lua_CFunction k); +#define lua_yield(L,n) lua_yieldk(L, (n), 0, NULL) +LUA_API int (lua_resume) (lua_State *L, lua_State *from, int narg); +LUA_API int (lua_status) (lua_State *L); + +/* +** garbage-collection function and options +*/ + +#define LUA_GCSTOP 0 +#define LUA_GCRESTART 1 +#define LUA_GCCOLLECT 2 +#define LUA_GCCOUNT 3 +#define LUA_GCCOUNTB 4 +#define LUA_GCSTEP 5 +#define LUA_GCSETPAUSE 6 +#define LUA_GCSETSTEPMUL 7 +#define LUA_GCSETMAJORINC 8 +#define LUA_GCISRUNNING 9 +#define LUA_GCGEN 10 +#define LUA_GCINC 11 + +LUA_API int (lua_gc) (lua_State *L, int what, int data); + + +/* +** miscellaneous functions +*/ + +LUA_API int (lua_error) (lua_State *L); + +LUA_API int (lua_next) (lua_State *L, int idx); + +LUA_API void (lua_concat) (lua_State *L, int n); +LUA_API void (lua_len) (lua_State *L, int idx); + +LUA_API lua_Alloc (lua_getallocf) (lua_State *L, void **ud); +LUA_API void (lua_setallocf) (lua_State *L, lua_Alloc f, void *ud); + + + +/* +** =============================================================== +** some useful macros +** =============================================================== +*/ + +#define lua_tonumber(L,i) lua_tonumberx(L,i,NULL) +#define lua_tointeger(L,i) lua_tointegerx(L,i,NULL) +#define lua_tounsigned(L,i) lua_tounsignedx(L,i,NULL) + +#define lua_pop(L,n) lua_settop(L, -(n)-1) + +#define lua_newtable(L) lua_createtable(L, 0, 0) + +#define lua_register(L,n,f) (lua_pushcfunction(L, (f)), lua_setglobal(L, (n))) + +#define lua_pushcfunction(L,f) lua_pushcclosure(L, (f), 0) + +#define lua_isfunction(L,n) (lua_type(L, (n)) == LUA_TFUNCTION) +#define lua_istable(L,n) (lua_type(L, (n)) == LUA_TTABLE) +#define lua_islightuserdata(L,n) (lua_type(L, (n)) == LUA_TLIGHTUSERDATA) +#define lua_isnil(L,n) (lua_type(L, (n)) == LUA_TNIL) +#define lua_isboolean(L,n) (lua_type(L, (n)) == LUA_TBOOLEAN) +#define lua_isthread(L,n) (lua_type(L, (n)) == LUA_TTHREAD) +#define lua_isnone(L,n) (lua_type(L, (n)) == LUA_TNONE) +#define lua_isnoneornil(L, n) (lua_type(L, (n)) <= 0) + +#define lua_pushliteral(L, s) \ + lua_pushlstring(L, "" s, (sizeof(s)/sizeof(char))-1) + +#define lua_pushglobaltable(L) \ + lua_rawgeti(L, LUA_REGISTRYINDEX, LUA_RIDX_GLOBALS) + +#define lua_tostring(L,i) lua_tolstring(L, (i), NULL) + + + +/* +** {====================================================================== +** Debug API +** ======================================================================= +*/ + + +/* +** Event codes +*/ +#define LUA_HOOKCALL 0 +#define LUA_HOOKRET 1 +#define LUA_HOOKLINE 2 +#define LUA_HOOKCOUNT 3 +#define LUA_HOOKTAILCALL 4 + + +/* +** Event masks +*/ +#define LUA_MASKCALL (1 << LUA_HOOKCALL) +#define LUA_MASKRET (1 << LUA_HOOKRET) +#define LUA_MASKLINE (1 << LUA_HOOKLINE) +#define LUA_MASKCOUNT (1 << LUA_HOOKCOUNT) + +typedef struct lua_Debug lua_Debug; /* activation record */ + + +/* Functions to be called by the debugger in specific events */ +typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar); + + +LUA_API int (lua_getstack) (lua_State *L, int level, lua_Debug *ar); +LUA_API int (lua_getinfo) (lua_State *L, const char *what, lua_Debug *ar); +LUA_API const char *(lua_getlocal) (lua_State *L, const lua_Debug *ar, int n); +LUA_API const char *(lua_setlocal) (lua_State *L, const lua_Debug *ar, int n); +LUA_API const char *(lua_getupvalue) (lua_State *L, int funcindex, int n); +LUA_API const char *(lua_setupvalue) (lua_State *L, int funcindex, int n); + +LUA_API void *(lua_upvalueid) (lua_State *L, int fidx, int n); +LUA_API void (lua_upvaluejoin) (lua_State *L, int fidx1, int n1, + int fidx2, int n2); + +LUA_API int (lua_sethook) (lua_State *L, lua_Hook func, int mask, int count); +LUA_API lua_Hook (lua_gethook) (lua_State *L); +LUA_API int (lua_gethookmask) (lua_State *L); +LUA_API int (lua_gethookcount) (lua_State *L); + + +struct lua_Debug { + int event; + const char *name; /* (n) */ + const char *namewhat; /* (n) 'global', 'local', 'field', 'method' */ + const char *what; /* (S) 'Lua', 'C', 'main', 'tail' */ + const char *source; /* (S) */ + int currentline; /* (l) */ + int linedefined; /* (S) */ + int lastlinedefined; /* (S) */ + unsigned char nups; /* (u) number of upvalues */ + unsigned char nparams;/* (u) number of parameters */ + char isvararg; /* (u) */ + char istailcall; /* (t) */ + char short_src[LUA_IDSIZE]; /* (S) */ + /* private part */ + struct CallInfo *i_ci; /* active function */ +}; + +/* }====================================================================== */ + + +/****************************************************************************** +* Copyright (C) 1994-2015 Lua.org, PUC-Rio. +* +* Permission is hereby granted, free of charge, to any person obtaining +* a copy of this software and associated documentation files (the +* "Software"), to deal in the Software without restriction, including +* without limitation the rights to use, copy, modify, merge, publish, +* distribute, sublicense, and/or sell copies of the Software, and to +* permit persons to whom the Software is furnished to do so, subject to +* the following conditions: +* +* The above copyright notice and this permission notice shall be +* included in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +******************************************************************************/ + + +#endif diff --git a/lua-5.2.4/src/lua.hpp b/lua-5.2.4/src/lua.hpp new file mode 100644 index 000000000..ec417f594 --- /dev/null +++ b/lua-5.2.4/src/lua.hpp @@ -0,0 +1,9 @@ +// lua.hpp +// Lua header files for C++ +// <> not supplied automatically because Lua also compiles as C++ + +extern "C" { +#include "lua.h" +#include "lualib.h" +#include "lauxlib.h" +} diff --git a/lua-5.2.4/src/luac.c b/lua-5.2.4/src/luac.c new file mode 100644 index 000000000..7409706ec --- /dev/null +++ b/lua-5.2.4/src/luac.c @@ -0,0 +1,432 @@ +/* +** $Id: luac.c,v 1.69 2011/11/29 17:46:33 lhf Exp $ +** Lua compiler (saves bytecodes to files; also list bytecodes) +** See Copyright Notice in lua.h +*/ + +#include +#include +#include +#include + +#define luac_c +#define LUA_CORE + +#include "lua.h" +#include "lauxlib.h" + +#include "lobject.h" +#include "lstate.h" +#include "lundump.h" + +static void PrintFunction(const Proto* f, int full); +#define luaU_print PrintFunction + +#define PROGNAME "luac" /* default program name */ +#define OUTPUT PROGNAME ".out" /* default output file */ + +static int listing=0; /* list bytecodes? */ +static int dumping=1; /* dump bytecodes? */ +static int stripping=0; /* strip debug information? */ +static char Output[]={ OUTPUT }; /* default output file name */ +static const char* output=Output; /* actual output file name */ +static const char* progname=PROGNAME; /* actual program name */ + +static void fatal(const char* message) +{ + fprintf(stderr,"%s: %s\n",progname,message); + exit(EXIT_FAILURE); +} + +static void cannot(const char* what) +{ + fprintf(stderr,"%s: cannot %s %s: %s\n",progname,what,output,strerror(errno)); + exit(EXIT_FAILURE); +} + +static void usage(const char* message) +{ + if (*message=='-') + fprintf(stderr,"%s: unrecognized option " LUA_QS "\n",progname,message); + else + fprintf(stderr,"%s: %s\n",progname,message); + fprintf(stderr, + "usage: %s [options] [filenames]\n" + "Available options are:\n" + " -l list (use -l -l for full listing)\n" + " -o name output to file " LUA_QL("name") " (default is \"%s\")\n" + " -p parse only\n" + " -s strip debug information\n" + " -v show version information\n" + " -- stop handling options\n" + " - stop handling options and process stdin\n" + ,progname,Output); + exit(EXIT_FAILURE); +} + +#define IS(s) (strcmp(argv[i],s)==0) + +static int doargs(int argc, char* argv[]) +{ + int i; + int version=0; + if (argv[0]!=NULL && *argv[0]!=0) progname=argv[0]; + for (i=1; itop+(i)) + +static const Proto* combine(lua_State* L, int n) +{ + if (n==1) + return toproto(L,-1); + else + { + Proto* f; + int i=n; + if (lua_load(L,reader,&i,"=(" PROGNAME ")",NULL)!=LUA_OK) fatal(lua_tostring(L,-1)); + f=toproto(L,-1); + for (i=0; ip[i]=toproto(L,i-n-1); + if (f->p[i]->sizeupvalues>0) f->p[i]->upvalues[0].instack=0; + } + f->sizelineinfo=0; + return f; + } +} + +static int writer(lua_State* L, const void* p, size_t size, void* u) +{ + UNUSED(L); + return (fwrite(p,size,1,(FILE*)u)!=1) && (size!=0); +} + +static int pmain(lua_State* L) +{ + int argc=(int)lua_tointeger(L,1); + char** argv=(char**)lua_touserdata(L,2); + const Proto* f; + int i; + if (!lua_checkstack(L,argc)) fatal("too many input files"); + for (i=0; i1); + if (dumping) + { + FILE* D= (output==NULL) ? stdout : fopen(output,"wb"); + if (D==NULL) cannot("open"); + lua_lock(L); + luaU_dump(L,f,writer,D,stripping); + lua_unlock(L); + if (ferror(D)) cannot("write"); + if (fclose(D)) cannot("close"); + } + return 0; +} + +int main(int argc, char* argv[]) +{ + lua_State* L; + int i=doargs(argc,argv); + argc-=i; argv+=i; + if (argc<=0) usage("no input files given"); + L=luaL_newstate(); + if (L==NULL) fatal("cannot create state: not enough memory"); + lua_pushcfunction(L,&pmain); + lua_pushinteger(L,argc); + lua_pushlightuserdata(L,argv); + if (lua_pcall(L,2,0,0)!=LUA_OK) fatal(lua_tostring(L,-1)); + lua_close(L); + return EXIT_SUCCESS; +} + +/* +** $Id: print.c,v 1.69 2013/07/04 01:03:46 lhf Exp $ +** print bytecodes +** See Copyright Notice in lua.h +*/ + +#include +#include + +#define luac_c +#define LUA_CORE + +#include "ldebug.h" +#include "lobject.h" +#include "lopcodes.h" + +#define VOID(p) ((const void*)(p)) + +static void PrintString(const TString* ts) +{ + const char* s=getstr(ts); + size_t i,n=ts->tsv.len; + printf("%c",'"'); + for (i=0; ik[i]; + switch (ttypenv(o)) + { + case LUA_TNIL: + printf("nil"); + break; + case LUA_TBOOLEAN: + printf(bvalue(o) ? "true" : "false"); + break; + case LUA_TNUMBER: + printf(LUA_NUMBER_FMT,nvalue(o)); + break; + case LUA_TSTRING: + PrintString(rawtsvalue(o)); + break; + default: /* cannot happen */ + printf("? type=%d",ttype(o)); + break; + } +} + +#define UPVALNAME(x) ((f->upvalues[x].name) ? getstr(f->upvalues[x].name) : "-") +#define MYK(x) (-1-(x)) + +static void PrintCode(const Proto* f) +{ + const Instruction* code=f->code; + int pc,n=f->sizecode; + for (pc=0; pc0) printf("[%d]\t",line); else printf("[-]\t"); + printf("%-9s\t",luaP_opnames[o]); + switch (getOpMode(o)) + { + case iABC: + printf("%d",a); + if (getBMode(o)!=OpArgN) printf(" %d",ISK(b) ? (MYK(INDEXK(b))) : b); + if (getCMode(o)!=OpArgN) printf(" %d",ISK(c) ? (MYK(INDEXK(c))) : c); + break; + case iABx: + printf("%d",a); + if (getBMode(o)==OpArgK) printf(" %d",MYK(bx)); + if (getBMode(o)==OpArgU) printf(" %d",bx); + break; + case iAsBx: + printf("%d %d",a,sbx); + break; + case iAx: + printf("%d",MYK(ax)); + break; + } + switch (o) + { + case OP_LOADK: + printf("\t; "); PrintConstant(f,bx); + break; + case OP_GETUPVAL: + case OP_SETUPVAL: + printf("\t; %s",UPVALNAME(b)); + break; + case OP_GETTABUP: + printf("\t; %s",UPVALNAME(b)); + if (ISK(c)) { printf(" "); PrintConstant(f,INDEXK(c)); } + break; + case OP_SETTABUP: + printf("\t; %s",UPVALNAME(a)); + if (ISK(b)) { printf(" "); PrintConstant(f,INDEXK(b)); } + if (ISK(c)) { printf(" "); PrintConstant(f,INDEXK(c)); } + break; + case OP_GETTABLE: + case OP_SELF: + if (ISK(c)) { printf("\t; "); PrintConstant(f,INDEXK(c)); } + break; + case OP_SETTABLE: + case OP_ADD: + case OP_SUB: + case OP_MUL: + case OP_DIV: + case OP_POW: + case OP_EQ: + case OP_LT: + case OP_LE: + if (ISK(b) || ISK(c)) + { + printf("\t; "); + if (ISK(b)) PrintConstant(f,INDEXK(b)); else printf("-"); + printf(" "); + if (ISK(c)) PrintConstant(f,INDEXK(c)); else printf("-"); + } + break; + case OP_JMP: + case OP_FORLOOP: + case OP_FORPREP: + case OP_TFORLOOP: + printf("\t; to %d",sbx+pc+2); + break; + case OP_CLOSURE: + printf("\t; %p",VOID(f->p[bx])); + break; + case OP_SETLIST: + if (c==0) printf("\t; %d",(int)code[++pc]); else printf("\t; %d",c); + break; + case OP_EXTRAARG: + printf("\t; "); PrintConstant(f,ax); + break; + default: + break; + } + printf("\n"); + } +} + +#define SS(x) ((x==1)?"":"s") +#define S(x) (int)(x),SS(x) + +static void PrintHeader(const Proto* f) +{ + const char* s=f->source ? getstr(f->source) : "=?"; + if (*s=='@' || *s=='=') + s++; + else if (*s==LUA_SIGNATURE[0]) + s="(bstring)"; + else + s="(string)"; + printf("\n%s <%s:%d,%d> (%d instruction%s at %p)\n", + (f->linedefined==0)?"main":"function",s, + f->linedefined,f->lastlinedefined, + S(f->sizecode),VOID(f)); + printf("%d%s param%s, %d slot%s, %d upvalue%s, ", + (int)(f->numparams),f->is_vararg?"+":"",SS(f->numparams), + S(f->maxstacksize),S(f->sizeupvalues)); + printf("%d local%s, %d constant%s, %d function%s\n", + S(f->sizelocvars),S(f->sizek),S(f->sizep)); +} + +static void PrintDebug(const Proto* f) +{ + int i,n; + n=f->sizek; + printf("constants (%d) for %p:\n",n,VOID(f)); + for (i=0; isizelocvars; + printf("locals (%d) for %p:\n",n,VOID(f)); + for (i=0; ilocvars[i].varname),f->locvars[i].startpc+1,f->locvars[i].endpc+1); + } + n=f->sizeupvalues; + printf("upvalues (%d) for %p:\n",n,VOID(f)); + for (i=0; iupvalues[i].instack,f->upvalues[i].idx); + } +} + +static void PrintFunction(const Proto* f, int full) +{ + int i,n=f->sizep; + PrintHeader(f); + PrintCode(f); + if (full) PrintDebug(f); + for (i=0; ip[i],full); +} diff --git a/lua-5.2.4/src/luaconf.h b/lua-5.2.4/src/luaconf.h new file mode 100644 index 000000000..1b0ff59fa --- /dev/null +++ b/lua-5.2.4/src/luaconf.h @@ -0,0 +1,551 @@ +/* +** $Id: luaconf.h,v 1.176.1.2 2013/11/21 17:26:16 roberto Exp $ +** Configuration file for Lua +** See Copyright Notice in lua.h +*/ + + +#ifndef lconfig_h +#define lconfig_h + +#include +#include + + +/* +** ================================================================== +** Search for "@@" to find all configurable definitions. +** =================================================================== +*/ + + +/* +@@ LUA_ANSI controls the use of non-ansi features. +** CHANGE it (define it) if you want Lua to avoid the use of any +** non-ansi feature or library. +*/ +#if !defined(LUA_ANSI) && defined(__STRICT_ANSI__) +#define LUA_ANSI +#endif + + +#if !defined(LUA_ANSI) && defined(_WIN32) && !defined(_WIN32_WCE) +#define LUA_WIN /* enable goodies for regular Windows platforms */ +#endif + +#if defined(LUA_WIN) +#define LUA_DL_DLL +#define LUA_USE_AFORMAT /* assume 'printf' handles 'aA' specifiers */ +#endif + + + +#if defined(LUA_USE_LINUX) +#define LUA_USE_POSIX +#define LUA_USE_DLOPEN /* needs an extra library: -ldl */ +#define LUA_USE_READLINE /* needs some extra libraries */ +#define LUA_USE_STRTODHEX /* assume 'strtod' handles hex formats */ +#define LUA_USE_AFORMAT /* assume 'printf' handles 'aA' specifiers */ +#define LUA_USE_LONGLONG /* assume support for long long */ +#endif + +#if defined(LUA_USE_MACOSX) +#define LUA_USE_POSIX +#define LUA_USE_DLOPEN /* does not need -ldl */ +#define LUA_USE_READLINE /* needs an extra library: -lreadline */ +#define LUA_USE_STRTODHEX /* assume 'strtod' handles hex formats */ +#define LUA_USE_AFORMAT /* assume 'printf' handles 'aA' specifiers */ +#define LUA_USE_LONGLONG /* assume support for long long */ +#endif + + + +/* +@@ LUA_USE_POSIX includes all functionality listed as X/Open System +@* Interfaces Extension (XSI). +** CHANGE it (define it) if your system is XSI compatible. +*/ +#if defined(LUA_USE_POSIX) +#define LUA_USE_MKSTEMP +#define LUA_USE_ISATTY +#define LUA_USE_POPEN +#define LUA_USE_ULONGJMP +#define LUA_USE_GMTIME_R +#endif + + + +/* +@@ LUA_PATH_DEFAULT is the default path that Lua uses to look for +@* Lua libraries. +@@ LUA_CPATH_DEFAULT is the default path that Lua uses to look for +@* C libraries. +** CHANGE them if your machine has a non-conventional directory +** hierarchy or if you want to install your libraries in +** non-conventional directories. +*/ +#if defined(_WIN32) /* { */ +/* +** In Windows, any exclamation mark ('!') in the path is replaced by the +** path of the directory of the executable file of the current process. +*/ +#define LUA_LDIR "!\\lua\\" +#define LUA_CDIR "!\\" +#define LUA_PATH_DEFAULT \ + LUA_LDIR"?.lua;" LUA_LDIR"?\\init.lua;" \ + LUA_CDIR"?.lua;" LUA_CDIR"?\\init.lua;" ".\\?.lua" +#define LUA_CPATH_DEFAULT \ + LUA_CDIR"?.dll;" LUA_CDIR"loadall.dll;" ".\\?.dll" + +#else /* }{ */ + +#define LUA_VDIR LUA_VERSION_MAJOR "." LUA_VERSION_MINOR "/" +#define LUA_ROOT "/usr/local/" +#define LUA_LDIR LUA_ROOT "share/lua/" LUA_VDIR +#define LUA_CDIR LUA_ROOT "lib/lua/" LUA_VDIR +#define LUA_PATH_DEFAULT \ + LUA_LDIR"?.lua;" LUA_LDIR"?/init.lua;" \ + LUA_CDIR"?.lua;" LUA_CDIR"?/init.lua;" "./?.lua" +#define LUA_CPATH_DEFAULT \ + LUA_CDIR"?.so;" LUA_CDIR"loadall.so;" "./?.so" +#endif /* } */ + + +/* +@@ LUA_DIRSEP is the directory separator (for submodules). +** CHANGE it if your machine does not use "/" as the directory separator +** and is not Windows. (On Windows Lua automatically uses "\".) +*/ +#if defined(_WIN32) +#define LUA_DIRSEP "\\" +#else +#define LUA_DIRSEP "/" +#endif + + +/* +@@ LUA_ENV is the name of the variable that holds the current +@@ environment, used to access global names. +** CHANGE it if you do not like this name. +*/ +#define LUA_ENV "_ENV" + + +/* +@@ LUA_API is a mark for all core API functions. +@@ LUALIB_API is a mark for all auxiliary library functions. +@@ LUAMOD_API is a mark for all standard library opening functions. +** CHANGE them if you need to define those functions in some special way. +** For instance, if you want to create one Windows DLL with the core and +** the libraries, you may want to use the following definition (define +** LUA_BUILD_AS_DLL to get it). +*/ +#if defined(LUA_BUILD_AS_DLL) /* { */ + +#if defined(LUA_CORE) || defined(LUA_LIB) /* { */ +#define LUA_API __declspec(dllexport) +#else /* }{ */ +#define LUA_API __declspec(dllimport) +#endif /* } */ + +#else /* }{ */ + +#define LUA_API extern + +#endif /* } */ + + +/* more often than not the libs go together with the core */ +#define LUALIB_API LUA_API +#define LUAMOD_API LUALIB_API + + +/* +@@ LUAI_FUNC is a mark for all extern functions that are not to be +@* exported to outside modules. +@@ LUAI_DDEF and LUAI_DDEC are marks for all extern (const) variables +@* that are not to be exported to outside modules (LUAI_DDEF for +@* definitions and LUAI_DDEC for declarations). +** CHANGE them if you need to mark them in some special way. Elf/gcc +** (versions 3.2 and later) mark them as "hidden" to optimize access +** when Lua is compiled as a shared library. Not all elf targets support +** this attribute. Unfortunately, gcc does not offer a way to check +** whether the target offers that support, and those without support +** give a warning about it. To avoid these warnings, change to the +** default definition. +*/ +#if defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 302) && \ + defined(__ELF__) /* { */ +#define LUAI_FUNC __attribute__((visibility("hidden"))) extern +#define LUAI_DDEC LUAI_FUNC +#define LUAI_DDEF /* empty */ + +#else /* }{ */ +#define LUAI_FUNC extern +#define LUAI_DDEC extern +#define LUAI_DDEF /* empty */ +#endif /* } */ + + + +/* +@@ LUA_QL describes how error messages quote program elements. +** CHANGE it if you want a different appearance. +*/ +#define LUA_QL(x) "'" x "'" +#define LUA_QS LUA_QL("%s") + + +/* +@@ LUA_IDSIZE gives the maximum size for the description of the source +@* of a function in debug information. +** CHANGE it if you want a different size. +*/ +#define LUA_IDSIZE 60 + + +/* +@@ luai_writestring/luai_writeline define how 'print' prints its results. +** They are only used in libraries and the stand-alone program. (The #if +** avoids including 'stdio.h' everywhere.) +*/ +#if defined(LUA_LIB) || defined(lua_c) +#include +#define luai_writestring(s,l) fwrite((s), sizeof(char), (l), stdout) +#define luai_writeline() (luai_writestring("\n", 1), fflush(stdout)) +#endif + +/* +@@ luai_writestringerror defines how to print error messages. +** (A format string with one argument is enough for Lua...) +*/ +#define luai_writestringerror(s,p) \ + (fprintf(stderr, (s), (p)), fflush(stderr)) + + +/* +@@ LUAI_MAXSHORTLEN is the maximum length for short strings, that is, +** strings that are internalized. (Cannot be smaller than reserved words +** or tags for metamethods, as these strings must be internalized; +** #("function") = 8, #("__newindex") = 10.) +*/ +#define LUAI_MAXSHORTLEN 40 + + + +/* +** {================================================================== +** Compatibility with previous versions +** =================================================================== +*/ + +/* +@@ LUA_COMPAT_ALL controls all compatibility options. +** You can define it to get all options, or change specific options +** to fit your specific needs. +*/ +#if defined(LUA_COMPAT_ALL) /* { */ + +/* +@@ LUA_COMPAT_UNPACK controls the presence of global 'unpack'. +** You can replace it with 'table.unpack'. +*/ +#define LUA_COMPAT_UNPACK + +/* +@@ LUA_COMPAT_LOADERS controls the presence of table 'package.loaders'. +** You can replace it with 'package.searchers'. +*/ +#define LUA_COMPAT_LOADERS + +/* +@@ macro 'lua_cpcall' emulates deprecated function lua_cpcall. +** You can call your C function directly (with light C functions). +*/ +#define lua_cpcall(L,f,u) \ + (lua_pushcfunction(L, (f)), \ + lua_pushlightuserdata(L,(u)), \ + lua_pcall(L,1,0,0)) + + +/* +@@ LUA_COMPAT_LOG10 defines the function 'log10' in the math library. +** You can rewrite 'log10(x)' as 'log(x, 10)'. +*/ +#define LUA_COMPAT_LOG10 + +/* +@@ LUA_COMPAT_LOADSTRING defines the function 'loadstring' in the base +** library. You can rewrite 'loadstring(s)' as 'load(s)'. +*/ +#define LUA_COMPAT_LOADSTRING + +/* +@@ LUA_COMPAT_MAXN defines the function 'maxn' in the table library. +*/ +#define LUA_COMPAT_MAXN + +/* +@@ The following macros supply trivial compatibility for some +** changes in the API. The macros themselves document how to +** change your code to avoid using them. +*/ +#define lua_strlen(L,i) lua_rawlen(L, (i)) + +#define lua_objlen(L,i) lua_rawlen(L, (i)) + +#define lua_equal(L,idx1,idx2) lua_compare(L,(idx1),(idx2),LUA_OPEQ) +#define lua_lessthan(L,idx1,idx2) lua_compare(L,(idx1),(idx2),LUA_OPLT) + +/* +@@ LUA_COMPAT_MODULE controls compatibility with previous +** module functions 'module' (Lua) and 'luaL_register' (C). +*/ +#define LUA_COMPAT_MODULE + +#endif /* } */ + +/* }================================================================== */ + + + +/* +@@ LUAI_BITSINT defines the number of bits in an int. +** CHANGE here if Lua cannot automatically detect the number of bits of +** your machine. Probably you do not need to change this. +*/ +/* avoid overflows in comparison */ +#if INT_MAX-20 < 32760 /* { */ +#define LUAI_BITSINT 16 +#elif INT_MAX > 2147483640L /* }{ */ +/* int has at least 32 bits */ +#define LUAI_BITSINT 32 +#else /* }{ */ +#error "you must define LUA_BITSINT with number of bits in an integer" +#endif /* } */ + + +/* +@@ LUA_INT32 is a signed integer with exactly 32 bits. +@@ LUAI_UMEM is an unsigned integer big enough to count the total +@* memory used by Lua. +@@ LUAI_MEM is a signed integer big enough to count the total memory +@* used by Lua. +** CHANGE here if for some weird reason the default definitions are not +** good enough for your machine. Probably you do not need to change +** this. +*/ +#if LUAI_BITSINT >= 32 /* { */ +#define LUA_INT32 int +#define LUAI_UMEM size_t +#define LUAI_MEM ptrdiff_t +#else /* }{ */ +/* 16-bit ints */ +#define LUA_INT32 long +#define LUAI_UMEM unsigned long +#define LUAI_MEM long +#endif /* } */ + + +/* +@@ LUAI_MAXSTACK limits the size of the Lua stack. +** CHANGE it if you need a different limit. This limit is arbitrary; +** its only purpose is to stop Lua from consuming unlimited stack +** space (and to reserve some numbers for pseudo-indices). +*/ +#if LUAI_BITSINT >= 32 +#define LUAI_MAXSTACK 1000000 +#else +#define LUAI_MAXSTACK 15000 +#endif + +/* reserve some space for error handling */ +#define LUAI_FIRSTPSEUDOIDX (-LUAI_MAXSTACK - 1000) + + + + +/* +@@ LUAL_BUFFERSIZE is the buffer size used by the lauxlib buffer system. +** CHANGE it if it uses too much C-stack space. +*/ +#define LUAL_BUFFERSIZE BUFSIZ + + + + +/* +** {================================================================== +@@ LUA_NUMBER is the type of numbers in Lua. +** CHANGE the following definitions only if you want to build Lua +** with a number type different from double. You may also need to +** change lua_number2int & lua_number2integer. +** =================================================================== +*/ + +#define LUA_NUMBER_DOUBLE +#define LUA_NUMBER double + +/* +@@ LUAI_UACNUMBER is the result of an 'usual argument conversion' +@* over a number. +*/ +#define LUAI_UACNUMBER double + + +/* +@@ LUA_NUMBER_SCAN is the format for reading numbers. +@@ LUA_NUMBER_FMT is the format for writing numbers. +@@ lua_number2str converts a number to a string. +@@ LUAI_MAXNUMBER2STR is maximum size of previous conversion. +*/ +#define LUA_NUMBER_SCAN "%lf" +#define LUA_NUMBER_FMT "%.14g" +#define lua_number2str(s,n) sprintf((s), LUA_NUMBER_FMT, (n)) +#define LUAI_MAXNUMBER2STR 32 /* 16 digits, sign, point, and \0 */ + + +/* +@@ l_mathop allows the addition of an 'l' or 'f' to all math operations +*/ +#define l_mathop(x) (x) + + +/* +@@ lua_str2number converts a decimal numeric string to a number. +@@ lua_strx2number converts an hexadecimal numeric string to a number. +** In C99, 'strtod' does both conversions. C89, however, has no function +** to convert floating hexadecimal strings to numbers. For these +** systems, you can leave 'lua_strx2number' undefined and Lua will +** provide its own implementation. +*/ +#define lua_str2number(s,p) strtod((s), (p)) + +#if defined(LUA_USE_STRTODHEX) +#define lua_strx2number(s,p) strtod((s), (p)) +#endif + + +/* +@@ The luai_num* macros define the primitive operations over numbers. +*/ + +/* the following operations need the math library */ +#if defined(lobject_c) || defined(lvm_c) +#include +#define luai_nummod(L,a,b) ((a) - l_mathop(floor)((a)/(b))*(b)) +#define luai_numpow(L,a,b) (l_mathop(pow)(a,b)) +#endif + +/* these are quite standard operations */ +#if defined(LUA_CORE) +#define luai_numadd(L,a,b) ((a)+(b)) +#define luai_numsub(L,a,b) ((a)-(b)) +#define luai_nummul(L,a,b) ((a)*(b)) +#define luai_numdiv(L,a,b) ((a)/(b)) +#define luai_numunm(L,a) (-(a)) +#define luai_numeq(a,b) ((a)==(b)) +#define luai_numlt(L,a,b) ((a)<(b)) +#define luai_numle(L,a,b) ((a)<=(b)) +#define luai_numisnan(L,a) (!luai_numeq((a), (a))) +#endif + + + +/* +@@ LUA_INTEGER is the integral type used by lua_pushinteger/lua_tointeger. +** CHANGE that if ptrdiff_t is not adequate on your machine. (On most +** machines, ptrdiff_t gives a good choice between int or long.) +*/ +#define LUA_INTEGER ptrdiff_t + +/* +@@ LUA_UNSIGNED is the integral type used by lua_pushunsigned/lua_tounsigned. +** It must have at least 32 bits. +*/ +#define LUA_UNSIGNED unsigned LUA_INT32 + + + +/* +** Some tricks with doubles +*/ + +#if defined(LUA_NUMBER_DOUBLE) && !defined(LUA_ANSI) /* { */ +/* +** The next definitions activate some tricks to speed up the +** conversion from doubles to integer types, mainly to LUA_UNSIGNED. +** +@@ LUA_MSASMTRICK uses Microsoft assembler to avoid clashes with a +** DirectX idiosyncrasy. +** +@@ LUA_IEEE754TRICK uses a trick that should work on any machine +** using IEEE754 with a 32-bit integer type. +** +@@ LUA_IEEELL extends the trick to LUA_INTEGER; should only be +** defined when LUA_INTEGER is a 32-bit integer. +** +@@ LUA_IEEEENDIAN is the endianness of doubles in your machine +** (0 for little endian, 1 for big endian); if not defined, Lua will +** check it dynamically for LUA_IEEE754TRICK (but not for LUA_NANTRICK). +** +@@ LUA_NANTRICK controls the use of a trick to pack all types into +** a single double value, using NaN values to represent non-number +** values. The trick only works on 32-bit machines (ints and pointers +** are 32-bit values) with numbers represented as IEEE 754-2008 doubles +** with conventional endianess (12345678 or 87654321), in CPUs that do +** not produce signaling NaN values (all NaNs are quiet). +*/ + +/* Microsoft compiler on a Pentium (32 bit) ? */ +#if defined(LUA_WIN) && defined(_MSC_VER) && defined(_M_IX86) /* { */ + +#define LUA_MSASMTRICK +#define LUA_IEEEENDIAN 0 +#define LUA_NANTRICK + + +/* pentium 32 bits? */ +#elif defined(__i386__) || defined(__i386) || defined(__X86__) /* }{ */ + +#define LUA_IEEE754TRICK +#define LUA_IEEELL +#define LUA_IEEEENDIAN 0 +#define LUA_NANTRICK + +/* pentium 64 bits? */ +#elif defined(__x86_64) /* }{ */ + +#define LUA_IEEE754TRICK +#define LUA_IEEEENDIAN 0 + +#elif defined(__POWERPC__) || defined(__ppc__) /* }{ */ + +#define LUA_IEEE754TRICK +#define LUA_IEEEENDIAN 1 + +#else /* }{ */ + +/* assume IEEE754 and a 32-bit integer type */ +#define LUA_IEEE754TRICK + +#endif /* } */ + +#endif /* } */ + +/* }================================================================== */ + + + + +/* =================================================================== */ + +/* +** Local configuration. You can use this space to add your redefinitions +** without modifying the main part of the file. +*/ + + + +#endif + diff --git a/lua-5.2.4/src/lualib.h b/lua-5.2.4/src/lualib.h new file mode 100644 index 000000000..da82005c9 --- /dev/null +++ b/lua-5.2.4/src/lualib.h @@ -0,0 +1,55 @@ +/* +** $Id: lualib.h,v 1.43.1.1 2013/04/12 18:48:47 roberto Exp $ +** Lua standard libraries +** See Copyright Notice in lua.h +*/ + + +#ifndef lualib_h +#define lualib_h + +#include "lua.h" + + + +LUAMOD_API int (luaopen_base) (lua_State *L); + +#define LUA_COLIBNAME "coroutine" +LUAMOD_API int (luaopen_coroutine) (lua_State *L); + +#define LUA_TABLIBNAME "table" +LUAMOD_API int (luaopen_table) (lua_State *L); + +#define LUA_IOLIBNAME "io" +LUAMOD_API int (luaopen_io) (lua_State *L); + +#define LUA_OSLIBNAME "os" +LUAMOD_API int (luaopen_os) (lua_State *L); + +#define LUA_STRLIBNAME "string" +LUAMOD_API int (luaopen_string) (lua_State *L); + +#define LUA_BITLIBNAME "bit32" +LUAMOD_API int (luaopen_bit32) (lua_State *L); + +#define LUA_MATHLIBNAME "math" +LUAMOD_API int (luaopen_math) (lua_State *L); + +#define LUA_DBLIBNAME "debug" +LUAMOD_API int (luaopen_debug) (lua_State *L); + +#define LUA_LOADLIBNAME "package" +LUAMOD_API int (luaopen_package) (lua_State *L); + + +/* open all previous libraries */ +LUALIB_API void (luaL_openlibs) (lua_State *L); + + + +#if !defined(lua_assert) +#define lua_assert(x) ((void)0) +#endif + + +#endif diff --git a/lua-5.2.4/src/lundump.c b/lua-5.2.4/src/lundump.c new file mode 100644 index 000000000..4163cb5d3 --- /dev/null +++ b/lua-5.2.4/src/lundump.c @@ -0,0 +1,258 @@ +/* +** $Id: lundump.c,v 2.22.1.1 2013/04/12 18:48:47 roberto Exp $ +** load precompiled Lua chunks +** See Copyright Notice in lua.h +*/ + +#include + +#define lundump_c +#define LUA_CORE + +#include "lua.h" + +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "lmem.h" +#include "lobject.h" +#include "lstring.h" +#include "lundump.h" +#include "lzio.h" + +typedef struct { + lua_State* L; + ZIO* Z; + Mbuffer* b; + const char* name; +} LoadState; + +static l_noret error(LoadState* S, const char* why) +{ + luaO_pushfstring(S->L,"%s: %s precompiled chunk",S->name,why); + luaD_throw(S->L,LUA_ERRSYNTAX); +} + +#define LoadMem(S,b,n,size) LoadBlock(S,b,(n)*(size)) +#define LoadByte(S) (lu_byte)LoadChar(S) +#define LoadVar(S,x) LoadMem(S,&x,1,sizeof(x)) +#define LoadVector(S,b,n,size) LoadMem(S,b,n,size) + +#if !defined(luai_verifycode) +#define luai_verifycode(L,b,f) /* empty */ +#endif + +static void LoadBlock(LoadState* S, void* b, size_t size) +{ + if (luaZ_read(S->Z,b,size)!=0) error(S,"truncated"); +} + +static int LoadChar(LoadState* S) +{ + char x; + LoadVar(S,x); + return x; +} + +static int LoadInt(LoadState* S) +{ + int x; + LoadVar(S,x); + if (x<0) error(S,"corrupted"); + return x; +} + +static lua_Number LoadNumber(LoadState* S) +{ + lua_Number x; + LoadVar(S,x); + return x; +} + +static TString* LoadString(LoadState* S) +{ + size_t size; + LoadVar(S,size); + if (size==0) + return NULL; + else + { + char* s=luaZ_openspace(S->L,S->b,size); + LoadBlock(S,s,size*sizeof(char)); + return luaS_newlstr(S->L,s,size-1); /* remove trailing '\0' */ + } +} + +static void LoadCode(LoadState* S, Proto* f) +{ + int n=LoadInt(S); + f->code=luaM_newvector(S->L,n,Instruction); + f->sizecode=n; + LoadVector(S,f->code,n,sizeof(Instruction)); +} + +static void LoadFunction(LoadState* S, Proto* f); + +static void LoadConstants(LoadState* S, Proto* f) +{ + int i,n; + n=LoadInt(S); + f->k=luaM_newvector(S->L,n,TValue); + f->sizek=n; + for (i=0; ik[i]); + for (i=0; ik[i]; + int t=LoadChar(S); + switch (t) + { + case LUA_TNIL: + setnilvalue(o); + break; + case LUA_TBOOLEAN: + setbvalue(o,LoadChar(S)); + break; + case LUA_TNUMBER: + setnvalue(o,LoadNumber(S)); + break; + case LUA_TSTRING: + setsvalue2n(S->L,o,LoadString(S)); + break; + default: lua_assert(0); + } + } + n=LoadInt(S); + f->p=luaM_newvector(S->L,n,Proto*); + f->sizep=n; + for (i=0; ip[i]=NULL; + for (i=0; ip[i]=luaF_newproto(S->L); + LoadFunction(S,f->p[i]); + } +} + +static void LoadUpvalues(LoadState* S, Proto* f) +{ + int i,n; + n=LoadInt(S); + f->upvalues=luaM_newvector(S->L,n,Upvaldesc); + f->sizeupvalues=n; + for (i=0; iupvalues[i].name=NULL; + for (i=0; iupvalues[i].instack=LoadByte(S); + f->upvalues[i].idx=LoadByte(S); + } +} + +static void LoadDebug(LoadState* S, Proto* f) +{ + int i,n; + f->source=LoadString(S); + n=LoadInt(S); + f->lineinfo=luaM_newvector(S->L,n,int); + f->sizelineinfo=n; + LoadVector(S,f->lineinfo,n,sizeof(int)); + n=LoadInt(S); + f->locvars=luaM_newvector(S->L,n,LocVar); + f->sizelocvars=n; + for (i=0; ilocvars[i].varname=NULL; + for (i=0; ilocvars[i].varname=LoadString(S); + f->locvars[i].startpc=LoadInt(S); + f->locvars[i].endpc=LoadInt(S); + } + n=LoadInt(S); + for (i=0; iupvalues[i].name=LoadString(S); +} + +static void LoadFunction(LoadState* S, Proto* f) +{ + f->linedefined=LoadInt(S); + f->lastlinedefined=LoadInt(S); + f->numparams=LoadByte(S); + f->is_vararg=LoadByte(S); + f->maxstacksize=LoadByte(S); + LoadCode(S,f); + LoadConstants(S,f); + LoadUpvalues(S,f); + LoadDebug(S,f); +} + +/* the code below must be consistent with the code in luaU_header */ +#define N0 LUAC_HEADERSIZE +#define N1 (sizeof(LUA_SIGNATURE)-sizeof(char)) +#define N2 N1+2 +#define N3 N2+6 + +static void LoadHeader(LoadState* S) +{ + lu_byte h[LUAC_HEADERSIZE]; + lu_byte s[LUAC_HEADERSIZE]; + luaU_header(h); + memcpy(s,h,sizeof(char)); /* first char already read */ + LoadBlock(S,s+sizeof(char),LUAC_HEADERSIZE-sizeof(char)); + if (memcmp(h,s,N0)==0) return; + if (memcmp(h,s,N1)!=0) error(S,"not a"); + if (memcmp(h,s,N2)!=0) error(S,"version mismatch in"); + if (memcmp(h,s,N3)!=0) error(S,"incompatible"); else error(S,"corrupted"); +} + +/* +** load precompiled chunk +*/ +Closure* luaU_undump (lua_State* L, ZIO* Z, Mbuffer* buff, const char* name) +{ + LoadState S; + Closure* cl; + if (*name=='@' || *name=='=') + S.name=name+1; + else if (*name==LUA_SIGNATURE[0]) + S.name="binary string"; + else + S.name=name; + S.L=L; + S.Z=Z; + S.b=buff; + LoadHeader(&S); + cl=luaF_newLclosure(L,1); + setclLvalue(L,L->top,cl); incr_top(L); + cl->l.p=luaF_newproto(L); + LoadFunction(&S,cl->l.p); + if (cl->l.p->sizeupvalues != 1) + { + Proto* p=cl->l.p; + cl=luaF_newLclosure(L,cl->l.p->sizeupvalues); + cl->l.p=p; + setclLvalue(L,L->top-1,cl); + } + luai_verifycode(L,buff,cl->l.p); + return cl; +} + +#define MYINT(s) (s[0]-'0') +#define VERSION MYINT(LUA_VERSION_MAJOR)*16+MYINT(LUA_VERSION_MINOR) +#define FORMAT 0 /* this is the official format */ + +/* +* make header for precompiled chunks +* if you change the code below be sure to update LoadHeader and FORMAT above +* and LUAC_HEADERSIZE in lundump.h +*/ +void luaU_header (lu_byte* h) +{ + int x=1; + memcpy(h,LUA_SIGNATURE,sizeof(LUA_SIGNATURE)-sizeof(char)); + h+=sizeof(LUA_SIGNATURE)-sizeof(char); + *h++=cast_byte(VERSION); + *h++=cast_byte(FORMAT); + *h++=cast_byte(*(char*)&x); /* endianness */ + *h++=cast_byte(sizeof(int)); + *h++=cast_byte(sizeof(size_t)); + *h++=cast_byte(sizeof(Instruction)); + *h++=cast_byte(sizeof(lua_Number)); + *h++=cast_byte(((lua_Number)0.5)==0); /* is lua_Number integral? */ + memcpy(h,LUAC_TAIL,sizeof(LUAC_TAIL)-sizeof(char)); +} diff --git a/lua-5.2.4/src/lundump.h b/lua-5.2.4/src/lundump.h new file mode 100644 index 000000000..5255db259 --- /dev/null +++ b/lua-5.2.4/src/lundump.h @@ -0,0 +1,28 @@ +/* +** $Id: lundump.h,v 1.39.1.1 2013/04/12 18:48:47 roberto Exp $ +** load precompiled Lua chunks +** See Copyright Notice in lua.h +*/ + +#ifndef lundump_h +#define lundump_h + +#include "lobject.h" +#include "lzio.h" + +/* load one chunk; from lundump.c */ +LUAI_FUNC Closure* luaU_undump (lua_State* L, ZIO* Z, Mbuffer* buff, const char* name); + +/* make header; from lundump.c */ +LUAI_FUNC void luaU_header (lu_byte* h); + +/* dump one chunk; from ldump.c */ +LUAI_FUNC int luaU_dump (lua_State* L, const Proto* f, lua_Writer w, void* data, int strip); + +/* data to catch conversion errors */ +#define LUAC_TAIL "\x19\x93\r\n\x1a\n" + +/* size in bytes of header of binary files */ +#define LUAC_HEADERSIZE (sizeof(LUA_SIGNATURE)-sizeof(char)+2+6+sizeof(LUAC_TAIL)-sizeof(char)) + +#endif diff --git a/lua-5.2.4/src/lvm.c b/lua-5.2.4/src/lvm.c new file mode 100644 index 000000000..141b9fd19 --- /dev/null +++ b/lua-5.2.4/src/lvm.c @@ -0,0 +1,867 @@ +/* +** $Id: lvm.c,v 2.155.1.1 2013/04/12 18:48:47 roberto Exp $ +** Lua virtual machine +** See Copyright Notice in lua.h +*/ + + +#include +#include +#include + +#define lvm_c +#define LUA_CORE + +#include "lua.h" + +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "lgc.h" +#include "lobject.h" +#include "lopcodes.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "ltm.h" +#include "lvm.h" + + + +/* limit for table tag-method chains (to avoid loops) */ +#define MAXTAGLOOP 100 + + +const TValue *luaV_tonumber (const TValue *obj, TValue *n) { + lua_Number num; + if (ttisnumber(obj)) return obj; + if (ttisstring(obj) && luaO_str2d(svalue(obj), tsvalue(obj)->len, &num)) { + setnvalue(n, num); + return n; + } + else + return NULL; +} + + +int luaV_tostring (lua_State *L, StkId obj) { + if (!ttisnumber(obj)) + return 0; + else { + char s[LUAI_MAXNUMBER2STR]; + lua_Number n = nvalue(obj); + int l = lua_number2str(s, n); + setsvalue2s(L, obj, luaS_newlstr(L, s, l)); + return 1; + } +} + + +static void traceexec (lua_State *L) { + CallInfo *ci = L->ci; + lu_byte mask = L->hookmask; + int counthook = ((mask & LUA_MASKCOUNT) && L->hookcount == 0); + if (counthook) + resethookcount(L); /* reset count */ + if (ci->callstatus & CIST_HOOKYIELD) { /* called hook last time? */ + ci->callstatus &= ~CIST_HOOKYIELD; /* erase mark */ + return; /* do not call hook again (VM yielded, so it did not move) */ + } + if (counthook) + luaD_hook(L, LUA_HOOKCOUNT, -1); /* call count hook */ + if (mask & LUA_MASKLINE) { + Proto *p = ci_func(ci)->p; + int npc = pcRel(ci->u.l.savedpc, p); + int newline = getfuncline(p, npc); + if (npc == 0 || /* call linehook when enter a new function, */ + ci->u.l.savedpc <= L->oldpc || /* when jump back (loop), or when */ + newline != getfuncline(p, pcRel(L->oldpc, p))) /* enter a new line */ + luaD_hook(L, LUA_HOOKLINE, newline); /* call line hook */ + } + L->oldpc = ci->u.l.savedpc; + if (L->status == LUA_YIELD) { /* did hook yield? */ + if (counthook) + L->hookcount = 1; /* undo decrement to zero */ + ci->u.l.savedpc--; /* undo increment (resume will increment it again) */ + ci->callstatus |= CIST_HOOKYIELD; /* mark that it yielded */ + ci->func = L->top - 1; /* protect stack below results */ + luaD_throw(L, LUA_YIELD); + } +} + + +static void callTM (lua_State *L, const TValue *f, const TValue *p1, + const TValue *p2, TValue *p3, int hasres) { + ptrdiff_t result = savestack(L, p3); + setobj2s(L, L->top++, f); /* push function */ + setobj2s(L, L->top++, p1); /* 1st argument */ + setobj2s(L, L->top++, p2); /* 2nd argument */ + if (!hasres) /* no result? 'p3' is third argument */ + setobj2s(L, L->top++, p3); /* 3rd argument */ + /* metamethod may yield only when called from Lua code */ + luaD_call(L, L->top - (4 - hasres), hasres, isLua(L->ci)); + if (hasres) { /* if has result, move it to its place */ + p3 = restorestack(L, result); + setobjs2s(L, p3, --L->top); + } +} + + +void luaV_gettable (lua_State *L, const TValue *t, TValue *key, StkId val) { + int loop; + for (loop = 0; loop < MAXTAGLOOP; loop++) { + const TValue *tm; + if (ttistable(t)) { /* `t' is a table? */ + Table *h = hvalue(t); + const TValue *res = luaH_get(h, key); /* do a primitive get */ + if (!ttisnil(res) || /* result is not nil? */ + (tm = fasttm(L, h->metatable, TM_INDEX)) == NULL) { /* or no TM? */ + setobj2s(L, val, res); + return; + } + /* else will try the tag method */ + } + else if (ttisnil(tm = luaT_gettmbyobj(L, t, TM_INDEX))) + luaG_typeerror(L, t, "index"); + if (ttisfunction(tm)) { + callTM(L, tm, t, key, val, 1); + return; + } + t = tm; /* else repeat with 'tm' */ + } + luaG_runerror(L, "loop in gettable"); +} + + +void luaV_settable (lua_State *L, const TValue *t, TValue *key, StkId val) { + int loop; + for (loop = 0; loop < MAXTAGLOOP; loop++) { + const TValue *tm; + if (ttistable(t)) { /* `t' is a table? */ + Table *h = hvalue(t); + TValue *oldval = cast(TValue *, luaH_get(h, key)); + /* if previous value is not nil, there must be a previous entry + in the table; moreover, a metamethod has no relevance */ + if (!ttisnil(oldval) || + /* previous value is nil; must check the metamethod */ + ((tm = fasttm(L, h->metatable, TM_NEWINDEX)) == NULL && + /* no metamethod; is there a previous entry in the table? */ + (oldval != luaO_nilobject || + /* no previous entry; must create one. (The next test is + always true; we only need the assignment.) */ + (oldval = luaH_newkey(L, h, key), 1)))) { + /* no metamethod and (now) there is an entry with given key */ + setobj2t(L, oldval, val); /* assign new value to that entry */ + invalidateTMcache(h); + luaC_barrierback(L, obj2gco(h), val); + return; + } + /* else will try the metamethod */ + } + else /* not a table; check metamethod */ + if (ttisnil(tm = luaT_gettmbyobj(L, t, TM_NEWINDEX))) + luaG_typeerror(L, t, "index"); + /* there is a metamethod */ + if (ttisfunction(tm)) { + callTM(L, tm, t, key, val, 0); + return; + } + t = tm; /* else repeat with 'tm' */ + } + luaG_runerror(L, "loop in settable"); +} + + +static int call_binTM (lua_State *L, const TValue *p1, const TValue *p2, + StkId res, TMS event) { + const TValue *tm = luaT_gettmbyobj(L, p1, event); /* try first operand */ + if (ttisnil(tm)) + tm = luaT_gettmbyobj(L, p2, event); /* try second operand */ + if (ttisnil(tm)) return 0; + callTM(L, tm, p1, p2, res, 1); + return 1; +} + + +static const TValue *get_equalTM (lua_State *L, Table *mt1, Table *mt2, + TMS event) { + const TValue *tm1 = fasttm(L, mt1, event); + const TValue *tm2; + if (tm1 == NULL) return NULL; /* no metamethod */ + if (mt1 == mt2) return tm1; /* same metatables => same metamethods */ + tm2 = fasttm(L, mt2, event); + if (tm2 == NULL) return NULL; /* no metamethod */ + if (luaV_rawequalobj(tm1, tm2)) /* same metamethods? */ + return tm1; + return NULL; +} + + +static int call_orderTM (lua_State *L, const TValue *p1, const TValue *p2, + TMS event) { + if (!call_binTM(L, p1, p2, L->top, event)) + return -1; /* no metamethod */ + else + return !l_isfalse(L->top); +} + + +static int l_strcmp (const TString *ls, const TString *rs) { + const char *l = getstr(ls); + size_t ll = ls->tsv.len; + const char *r = getstr(rs); + size_t lr = rs->tsv.len; + for (;;) { + int temp = strcoll(l, r); + if (temp != 0) return temp; + else { /* strings are equal up to a `\0' */ + size_t len = strlen(l); /* index of first `\0' in both strings */ + if (len == lr) /* r is finished? */ + return (len == ll) ? 0 : 1; + else if (len == ll) /* l is finished? */ + return -1; /* l is smaller than r (because r is not finished) */ + /* both strings longer than `len'; go on comparing (after the `\0') */ + len++; + l += len; ll -= len; r += len; lr -= len; + } + } +} + + +int luaV_lessthan (lua_State *L, const TValue *l, const TValue *r) { + int res; + if (ttisnumber(l) && ttisnumber(r)) + return luai_numlt(L, nvalue(l), nvalue(r)); + else if (ttisstring(l) && ttisstring(r)) + return l_strcmp(rawtsvalue(l), rawtsvalue(r)) < 0; + else if ((res = call_orderTM(L, l, r, TM_LT)) < 0) + luaG_ordererror(L, l, r); + return res; +} + + +int luaV_lessequal (lua_State *L, const TValue *l, const TValue *r) { + int res; + if (ttisnumber(l) && ttisnumber(r)) + return luai_numle(L, nvalue(l), nvalue(r)); + else if (ttisstring(l) && ttisstring(r)) + return l_strcmp(rawtsvalue(l), rawtsvalue(r)) <= 0; + else if ((res = call_orderTM(L, l, r, TM_LE)) >= 0) /* first try `le' */ + return res; + else if ((res = call_orderTM(L, r, l, TM_LT)) < 0) /* else try `lt' */ + luaG_ordererror(L, l, r); + return !res; +} + + +/* +** equality of Lua values. L == NULL means raw equality (no metamethods) +*/ +int luaV_equalobj_ (lua_State *L, const TValue *t1, const TValue *t2) { + const TValue *tm; + lua_assert(ttisequal(t1, t2)); + switch (ttype(t1)) { + case LUA_TNIL: return 1; + case LUA_TNUMBER: return luai_numeq(nvalue(t1), nvalue(t2)); + case LUA_TBOOLEAN: return bvalue(t1) == bvalue(t2); /* true must be 1 !! */ + case LUA_TLIGHTUSERDATA: return pvalue(t1) == pvalue(t2); + case LUA_TLCF: return fvalue(t1) == fvalue(t2); + case LUA_TSHRSTR: return eqshrstr(rawtsvalue(t1), rawtsvalue(t2)); + case LUA_TLNGSTR: return luaS_eqlngstr(rawtsvalue(t1), rawtsvalue(t2)); + case LUA_TUSERDATA: { + if (uvalue(t1) == uvalue(t2)) return 1; + else if (L == NULL) return 0; + tm = get_equalTM(L, uvalue(t1)->metatable, uvalue(t2)->metatable, TM_EQ); + break; /* will try TM */ + } + case LUA_TTABLE: { + if (hvalue(t1) == hvalue(t2)) return 1; + else if (L == NULL) return 0; + tm = get_equalTM(L, hvalue(t1)->metatable, hvalue(t2)->metatable, TM_EQ); + break; /* will try TM */ + } + default: + lua_assert(iscollectable(t1)); + return gcvalue(t1) == gcvalue(t2); + } + if (tm == NULL) return 0; /* no TM? */ + callTM(L, tm, t1, t2, L->top, 1); /* call TM */ + return !l_isfalse(L->top); +} + + +void luaV_concat (lua_State *L, int total) { + lua_assert(total >= 2); + do { + StkId top = L->top; + int n = 2; /* number of elements handled in this pass (at least 2) */ + if (!(ttisstring(top-2) || ttisnumber(top-2)) || !tostring(L, top-1)) { + if (!call_binTM(L, top-2, top-1, top-2, TM_CONCAT)) + luaG_concaterror(L, top-2, top-1); + } + else if (tsvalue(top-1)->len == 0) /* second operand is empty? */ + (void)tostring(L, top - 2); /* result is first operand */ + else if (ttisstring(top-2) && tsvalue(top-2)->len == 0) { + setobjs2s(L, top - 2, top - 1); /* result is second op. */ + } + else { + /* at least two non-empty string values; get as many as possible */ + size_t tl = tsvalue(top-1)->len; + char *buffer; + int i; + /* collect total length */ + for (i = 1; i < total && tostring(L, top-i-1); i++) { + size_t l = tsvalue(top-i-1)->len; + if (l >= (MAX_SIZET/sizeof(char)) - tl) + luaG_runerror(L, "string length overflow"); + tl += l; + } + buffer = luaZ_openspace(L, &G(L)->buff, tl); + tl = 0; + n = i; + do { /* concat all strings */ + size_t l = tsvalue(top-i)->len; + memcpy(buffer+tl, svalue(top-i), l * sizeof(char)); + tl += l; + } while (--i > 0); + setsvalue2s(L, top-n, luaS_newlstr(L, buffer, tl)); + } + total -= n-1; /* got 'n' strings to create 1 new */ + L->top -= n-1; /* popped 'n' strings and pushed one */ + } while (total > 1); /* repeat until only 1 result left */ +} + + +void luaV_objlen (lua_State *L, StkId ra, const TValue *rb) { + const TValue *tm; + switch (ttypenv(rb)) { + case LUA_TTABLE: { + Table *h = hvalue(rb); + tm = fasttm(L, h->metatable, TM_LEN); + if (tm) break; /* metamethod? break switch to call it */ + setnvalue(ra, cast_num(luaH_getn(h))); /* else primitive len */ + return; + } + case LUA_TSTRING: { + setnvalue(ra, cast_num(tsvalue(rb)->len)); + return; + } + default: { /* try metamethod */ + tm = luaT_gettmbyobj(L, rb, TM_LEN); + if (ttisnil(tm)) /* no metamethod? */ + luaG_typeerror(L, rb, "get length of"); + break; + } + } + callTM(L, tm, rb, rb, ra, 1); +} + + +void luaV_arith (lua_State *L, StkId ra, const TValue *rb, + const TValue *rc, TMS op) { + TValue tempb, tempc; + const TValue *b, *c; + if ((b = luaV_tonumber(rb, &tempb)) != NULL && + (c = luaV_tonumber(rc, &tempc)) != NULL) { + lua_Number res = luaO_arith(op - TM_ADD + LUA_OPADD, nvalue(b), nvalue(c)); + setnvalue(ra, res); + } + else if (!call_binTM(L, rb, rc, ra, op)) + luaG_aritherror(L, rb, rc); +} + + +/* +** check whether cached closure in prototype 'p' may be reused, that is, +** whether there is a cached closure with the same upvalues needed by +** new closure to be created. +*/ +static Closure *getcached (Proto *p, UpVal **encup, StkId base) { + Closure *c = p->cache; + if (c != NULL) { /* is there a cached closure? */ + int nup = p->sizeupvalues; + Upvaldesc *uv = p->upvalues; + int i; + for (i = 0; i < nup; i++) { /* check whether it has right upvalues */ + TValue *v = uv[i].instack ? base + uv[i].idx : encup[uv[i].idx]->v; + if (c->l.upvals[i]->v != v) + return NULL; /* wrong upvalue; cannot reuse closure */ + } + } + return c; /* return cached closure (or NULL if no cached closure) */ +} + + +/* +** create a new Lua closure, push it in the stack, and initialize +** its upvalues. Note that the call to 'luaC_barrierproto' must come +** before the assignment to 'p->cache', as the function needs the +** original value of that field. +*/ +static void pushclosure (lua_State *L, Proto *p, UpVal **encup, StkId base, + StkId ra) { + int nup = p->sizeupvalues; + Upvaldesc *uv = p->upvalues; + int i; + Closure *ncl = luaF_newLclosure(L, nup); + ncl->l.p = p; + setclLvalue(L, ra, ncl); /* anchor new closure in stack */ + for (i = 0; i < nup; i++) { /* fill in its upvalues */ + if (uv[i].instack) /* upvalue refers to local variable? */ + ncl->l.upvals[i] = luaF_findupval(L, base + uv[i].idx); + else /* get upvalue from enclosing function */ + ncl->l.upvals[i] = encup[uv[i].idx]; + } + luaC_barrierproto(L, p, ncl); + p->cache = ncl; /* save it on cache for reuse */ +} + + +/* +** finish execution of an opcode interrupted by an yield +*/ +void luaV_finishOp (lua_State *L) { + CallInfo *ci = L->ci; + StkId base = ci->u.l.base; + Instruction inst = *(ci->u.l.savedpc - 1); /* interrupted instruction */ + OpCode op = GET_OPCODE(inst); + switch (op) { /* finish its execution */ + case OP_ADD: case OP_SUB: case OP_MUL: case OP_DIV: + case OP_MOD: case OP_POW: case OP_UNM: case OP_LEN: + case OP_GETTABUP: case OP_GETTABLE: case OP_SELF: { + setobjs2s(L, base + GETARG_A(inst), --L->top); + break; + } + case OP_LE: case OP_LT: case OP_EQ: { + int res = !l_isfalse(L->top - 1); + L->top--; + /* metamethod should not be called when operand is K */ + lua_assert(!ISK(GETARG_B(inst))); + if (op == OP_LE && /* "<=" using "<" instead? */ + ttisnil(luaT_gettmbyobj(L, base + GETARG_B(inst), TM_LE))) + res = !res; /* invert result */ + lua_assert(GET_OPCODE(*ci->u.l.savedpc) == OP_JMP); + if (res != GETARG_A(inst)) /* condition failed? */ + ci->u.l.savedpc++; /* skip jump instruction */ + break; + } + case OP_CONCAT: { + StkId top = L->top - 1; /* top when 'call_binTM' was called */ + int b = GETARG_B(inst); /* first element to concatenate */ + int total = cast_int(top - 1 - (base + b)); /* yet to concatenate */ + setobj2s(L, top - 2, top); /* put TM result in proper position */ + if (total > 1) { /* are there elements to concat? */ + L->top = top - 1; /* top is one after last element (at top-2) */ + luaV_concat(L, total); /* concat them (may yield again) */ + } + /* move final result to final position */ + setobj2s(L, ci->u.l.base + GETARG_A(inst), L->top - 1); + L->top = ci->top; /* restore top */ + break; + } + case OP_TFORCALL: { + lua_assert(GET_OPCODE(*ci->u.l.savedpc) == OP_TFORLOOP); + L->top = ci->top; /* correct top */ + break; + } + case OP_CALL: { + if (GETARG_C(inst) - 1 >= 0) /* nresults >= 0? */ + L->top = ci->top; /* adjust results */ + break; + } + case OP_TAILCALL: case OP_SETTABUP: case OP_SETTABLE: + break; + default: lua_assert(0); + } +} + + + +/* +** some macros for common tasks in `luaV_execute' +*/ + +#if !defined luai_runtimecheck +#define luai_runtimecheck(L, c) /* void */ +#endif + + +#define RA(i) (base+GETARG_A(i)) +/* to be used after possible stack reallocation */ +#define RB(i) check_exp(getBMode(GET_OPCODE(i)) == OpArgR, base+GETARG_B(i)) +#define RC(i) check_exp(getCMode(GET_OPCODE(i)) == OpArgR, base+GETARG_C(i)) +#define RKB(i) check_exp(getBMode(GET_OPCODE(i)) == OpArgK, \ + ISK(GETARG_B(i)) ? k+INDEXK(GETARG_B(i)) : base+GETARG_B(i)) +#define RKC(i) check_exp(getCMode(GET_OPCODE(i)) == OpArgK, \ + ISK(GETARG_C(i)) ? k+INDEXK(GETARG_C(i)) : base+GETARG_C(i)) +#define KBx(i) \ + (k + (GETARG_Bx(i) != 0 ? GETARG_Bx(i) - 1 : GETARG_Ax(*ci->u.l.savedpc++))) + + +/* execute a jump instruction */ +#define dojump(ci,i,e) \ + { int a = GETARG_A(i); \ + if (a > 0) luaF_close(L, ci->u.l.base + a - 1); \ + ci->u.l.savedpc += GETARG_sBx(i) + e; } + +/* for test instructions, execute the jump instruction that follows it */ +#define donextjump(ci) { i = *ci->u.l.savedpc; dojump(ci, i, 1); } + + +#define Protect(x) { {x;}; base = ci->u.l.base; } + +#define checkGC(L,c) \ + Protect( luaC_condGC(L,{L->top = (c); /* limit of live values */ \ + luaC_step(L); \ + L->top = ci->top;}) /* restore top */ \ + luai_threadyield(L); ) + + +#define arith_op(op,tm) { \ + TValue *rb = RKB(i); \ + TValue *rc = RKC(i); \ + if (ttisnumber(rb) && ttisnumber(rc)) { \ + lua_Number nb = nvalue(rb), nc = nvalue(rc); \ + setnvalue(ra, op(L, nb, nc)); \ + } \ + else { Protect(luaV_arith(L, ra, rb, rc, tm)); } } + + +#define vmdispatch(o) switch(o) +#define vmcase(l,b) case l: {b} break; +#define vmcasenb(l,b) case l: {b} /* nb = no break */ + +void luaV_execute (lua_State *L) { + CallInfo *ci = L->ci; + LClosure *cl; + TValue *k; + StkId base; + newframe: /* reentry point when frame changes (call/return) */ + lua_assert(ci == L->ci); + cl = clLvalue(ci->func); + k = cl->p->k; + base = ci->u.l.base; + /* main loop of interpreter */ + for (;;) { + Instruction i = *(ci->u.l.savedpc++); + StkId ra; + if ((L->hookmask & (LUA_MASKLINE | LUA_MASKCOUNT)) && + (--L->hookcount == 0 || L->hookmask & LUA_MASKLINE)) { + Protect(traceexec(L)); + } + /* WARNING: several calls may realloc the stack and invalidate `ra' */ + ra = RA(i); + lua_assert(base == ci->u.l.base); + lua_assert(base <= L->top && L->top < L->stack + L->stacksize); + vmdispatch (GET_OPCODE(i)) { + vmcase(OP_MOVE, + setobjs2s(L, ra, RB(i)); + ) + vmcase(OP_LOADK, + TValue *rb = k + GETARG_Bx(i); + setobj2s(L, ra, rb); + ) + vmcase(OP_LOADKX, + TValue *rb; + lua_assert(GET_OPCODE(*ci->u.l.savedpc) == OP_EXTRAARG); + rb = k + GETARG_Ax(*ci->u.l.savedpc++); + setobj2s(L, ra, rb); + ) + vmcase(OP_LOADBOOL, + setbvalue(ra, GETARG_B(i)); + if (GETARG_C(i)) ci->u.l.savedpc++; /* skip next instruction (if C) */ + ) + vmcase(OP_LOADNIL, + int b = GETARG_B(i); + do { + setnilvalue(ra++); + } while (b--); + ) + vmcase(OP_GETUPVAL, + int b = GETARG_B(i); + setobj2s(L, ra, cl->upvals[b]->v); + ) + vmcase(OP_GETTABUP, + int b = GETARG_B(i); + Protect(luaV_gettable(L, cl->upvals[b]->v, RKC(i), ra)); + ) + vmcase(OP_GETTABLE, + Protect(luaV_gettable(L, RB(i), RKC(i), ra)); + ) + vmcase(OP_SETTABUP, + int a = GETARG_A(i); + Protect(luaV_settable(L, cl->upvals[a]->v, RKB(i), RKC(i))); + ) + vmcase(OP_SETUPVAL, + UpVal *uv = cl->upvals[GETARG_B(i)]; + setobj(L, uv->v, ra); + luaC_barrier(L, uv, ra); + ) + vmcase(OP_SETTABLE, + Protect(luaV_settable(L, ra, RKB(i), RKC(i))); + ) + vmcase(OP_NEWTABLE, + int b = GETARG_B(i); + int c = GETARG_C(i); + Table *t = luaH_new(L); + sethvalue(L, ra, t); + if (b != 0 || c != 0) + luaH_resize(L, t, luaO_fb2int(b), luaO_fb2int(c)); + checkGC(L, ra + 1); + ) + vmcase(OP_SELF, + StkId rb = RB(i); + setobjs2s(L, ra+1, rb); + Protect(luaV_gettable(L, rb, RKC(i), ra)); + ) + vmcase(OP_ADD, + arith_op(luai_numadd, TM_ADD); + ) + vmcase(OP_SUB, + arith_op(luai_numsub, TM_SUB); + ) + vmcase(OP_MUL, + arith_op(luai_nummul, TM_MUL); + ) + vmcase(OP_DIV, + arith_op(luai_numdiv, TM_DIV); + ) + vmcase(OP_MOD, + arith_op(luai_nummod, TM_MOD); + ) + vmcase(OP_POW, + arith_op(luai_numpow, TM_POW); + ) + vmcase(OP_UNM, + TValue *rb = RB(i); + if (ttisnumber(rb)) { + lua_Number nb = nvalue(rb); + setnvalue(ra, luai_numunm(L, nb)); + } + else { + Protect(luaV_arith(L, ra, rb, rb, TM_UNM)); + } + ) + vmcase(OP_NOT, + TValue *rb = RB(i); + int res = l_isfalse(rb); /* next assignment may change this value */ + setbvalue(ra, res); + ) + vmcase(OP_LEN, + Protect(luaV_objlen(L, ra, RB(i))); + ) + vmcase(OP_CONCAT, + int b = GETARG_B(i); + int c = GETARG_C(i); + StkId rb; + L->top = base + c + 1; /* mark the end of concat operands */ + Protect(luaV_concat(L, c - b + 1)); + ra = RA(i); /* 'luav_concat' may invoke TMs and move the stack */ + rb = b + base; + setobjs2s(L, ra, rb); + checkGC(L, (ra >= rb ? ra + 1 : rb)); + L->top = ci->top; /* restore top */ + ) + vmcase(OP_JMP, + dojump(ci, i, 0); + ) + vmcase(OP_EQ, + TValue *rb = RKB(i); + TValue *rc = RKC(i); + Protect( + if (cast_int(equalobj(L, rb, rc)) != GETARG_A(i)) + ci->u.l.savedpc++; + else + donextjump(ci); + ) + ) + vmcase(OP_LT, + Protect( + if (luaV_lessthan(L, RKB(i), RKC(i)) != GETARG_A(i)) + ci->u.l.savedpc++; + else + donextjump(ci); + ) + ) + vmcase(OP_LE, + Protect( + if (luaV_lessequal(L, RKB(i), RKC(i)) != GETARG_A(i)) + ci->u.l.savedpc++; + else + donextjump(ci); + ) + ) + vmcase(OP_TEST, + if (GETARG_C(i) ? l_isfalse(ra) : !l_isfalse(ra)) + ci->u.l.savedpc++; + else + donextjump(ci); + ) + vmcase(OP_TESTSET, + TValue *rb = RB(i); + if (GETARG_C(i) ? l_isfalse(rb) : !l_isfalse(rb)) + ci->u.l.savedpc++; + else { + setobjs2s(L, ra, rb); + donextjump(ci); + } + ) + vmcase(OP_CALL, + int b = GETARG_B(i); + int nresults = GETARG_C(i) - 1; + if (b != 0) L->top = ra+b; /* else previous instruction set top */ + if (luaD_precall(L, ra, nresults)) { /* C function? */ + if (nresults >= 0) L->top = ci->top; /* adjust results */ + base = ci->u.l.base; + } + else { /* Lua function */ + ci = L->ci; + ci->callstatus |= CIST_REENTRY; + goto newframe; /* restart luaV_execute over new Lua function */ + } + ) + vmcase(OP_TAILCALL, + int b = GETARG_B(i); + if (b != 0) L->top = ra+b; /* else previous instruction set top */ + lua_assert(GETARG_C(i) - 1 == LUA_MULTRET); + if (luaD_precall(L, ra, LUA_MULTRET)) /* C function? */ + base = ci->u.l.base; + else { + /* tail call: put called frame (n) in place of caller one (o) */ + CallInfo *nci = L->ci; /* called frame */ + CallInfo *oci = nci->previous; /* caller frame */ + StkId nfunc = nci->func; /* called function */ + StkId ofunc = oci->func; /* caller function */ + /* last stack slot filled by 'precall' */ + StkId lim = nci->u.l.base + getproto(nfunc)->numparams; + int aux; + /* close all upvalues from previous call */ + if (cl->p->sizep > 0) luaF_close(L, oci->u.l.base); + /* move new frame into old one */ + for (aux = 0; nfunc + aux < lim; aux++) + setobjs2s(L, ofunc + aux, nfunc + aux); + oci->u.l.base = ofunc + (nci->u.l.base - nfunc); /* correct base */ + oci->top = L->top = ofunc + (L->top - nfunc); /* correct top */ + oci->u.l.savedpc = nci->u.l.savedpc; + oci->callstatus |= CIST_TAIL; /* function was tail called */ + ci = L->ci = oci; /* remove new frame */ + lua_assert(L->top == oci->u.l.base + getproto(ofunc)->maxstacksize); + goto newframe; /* restart luaV_execute over new Lua function */ + } + ) + vmcasenb(OP_RETURN, + int b = GETARG_B(i); + if (b != 0) L->top = ra+b-1; + if (cl->p->sizep > 0) luaF_close(L, base); + b = luaD_poscall(L, ra); + if (!(ci->callstatus & CIST_REENTRY)) /* 'ci' still the called one */ + return; /* external invocation: return */ + else { /* invocation via reentry: continue execution */ + ci = L->ci; + if (b) L->top = ci->top; + lua_assert(isLua(ci)); + lua_assert(GET_OPCODE(*((ci)->u.l.savedpc - 1)) == OP_CALL); + goto newframe; /* restart luaV_execute over new Lua function */ + } + ) + vmcase(OP_FORLOOP, + lua_Number step = nvalue(ra+2); + lua_Number idx = luai_numadd(L, nvalue(ra), step); /* increment index */ + lua_Number limit = nvalue(ra+1); + if (luai_numlt(L, 0, step) ? luai_numle(L, idx, limit) + : luai_numle(L, limit, idx)) { + ci->u.l.savedpc += GETARG_sBx(i); /* jump back */ + setnvalue(ra, idx); /* update internal index... */ + setnvalue(ra+3, idx); /* ...and external index */ + } + ) + vmcase(OP_FORPREP, + const TValue *init = ra; + const TValue *plimit = ra+1; + const TValue *pstep = ra+2; + if (!tonumber(init, ra)) + luaG_runerror(L, LUA_QL("for") " initial value must be a number"); + else if (!tonumber(plimit, ra+1)) + luaG_runerror(L, LUA_QL("for") " limit must be a number"); + else if (!tonumber(pstep, ra+2)) + luaG_runerror(L, LUA_QL("for") " step must be a number"); + setnvalue(ra, luai_numsub(L, nvalue(ra), nvalue(pstep))); + ci->u.l.savedpc += GETARG_sBx(i); + ) + vmcasenb(OP_TFORCALL, + StkId cb = ra + 3; /* call base */ + setobjs2s(L, cb+2, ra+2); + setobjs2s(L, cb+1, ra+1); + setobjs2s(L, cb, ra); + L->top = cb + 3; /* func. + 2 args (state and index) */ + Protect(luaD_call(L, cb, GETARG_C(i), 1)); + L->top = ci->top; + i = *(ci->u.l.savedpc++); /* go to next instruction */ + ra = RA(i); + lua_assert(GET_OPCODE(i) == OP_TFORLOOP); + goto l_tforloop; + ) + vmcase(OP_TFORLOOP, + l_tforloop: + if (!ttisnil(ra + 1)) { /* continue loop? */ + setobjs2s(L, ra, ra + 1); /* save control variable */ + ci->u.l.savedpc += GETARG_sBx(i); /* jump back */ + } + ) + vmcase(OP_SETLIST, + int n = GETARG_B(i); + int c = GETARG_C(i); + int last; + Table *h; + if (n == 0) n = cast_int(L->top - ra) - 1; + if (c == 0) { + lua_assert(GET_OPCODE(*ci->u.l.savedpc) == OP_EXTRAARG); + c = GETARG_Ax(*ci->u.l.savedpc++); + } + luai_runtimecheck(L, ttistable(ra)); + h = hvalue(ra); + last = ((c-1)*LFIELDS_PER_FLUSH) + n; + if (last > h->sizearray) /* needs more space? */ + luaH_resizearray(L, h, last); /* pre-allocate it at once */ + for (; n > 0; n--) { + TValue *val = ra+n; + luaH_setint(L, h, last--, val); + luaC_barrierback(L, obj2gco(h), val); + } + L->top = ci->top; /* correct top (in case of previous open call) */ + ) + vmcase(OP_CLOSURE, + Proto *p = cl->p->p[GETARG_Bx(i)]; + Closure *ncl = getcached(p, cl->upvals, base); /* cached closure */ + if (ncl == NULL) /* no match? */ + pushclosure(L, p, cl->upvals, base, ra); /* create a new one */ + else + setclLvalue(L, ra, ncl); /* push cashed closure */ + checkGC(L, ra + 1); + ) + vmcase(OP_VARARG, + int b = GETARG_B(i) - 1; + int j; + int n = cast_int(base - ci->func) - cl->p->numparams - 1; + if (b < 0) { /* B == 0? */ + b = n; /* get all var. arguments */ + Protect(luaD_checkstack(L, n)); + ra = RA(i); /* previous call may change the stack */ + L->top = ra + n; + } + for (j = 0; j < b; j++) { + if (j < n) { + setobjs2s(L, ra + j, base - n + j); + } + else { + setnilvalue(ra + j); + } + } + ) + vmcase(OP_EXTRAARG, + lua_assert(0); + ) + } + } +} + diff --git a/lua-5.2.4/src/lvm.h b/lua-5.2.4/src/lvm.h new file mode 100644 index 000000000..5380270da --- /dev/null +++ b/lua-5.2.4/src/lvm.h @@ -0,0 +1,44 @@ +/* +** $Id: lvm.h,v 2.18.1.1 2013/04/12 18:48:47 roberto Exp $ +** Lua virtual machine +** See Copyright Notice in lua.h +*/ + +#ifndef lvm_h +#define lvm_h + + +#include "ldo.h" +#include "lobject.h" +#include "ltm.h" + + +#define tostring(L,o) (ttisstring(o) || (luaV_tostring(L, o))) + +#define tonumber(o,n) (ttisnumber(o) || (((o) = luaV_tonumber(o,n)) != NULL)) + +#define equalobj(L,o1,o2) (ttisequal(o1, o2) && luaV_equalobj_(L, o1, o2)) + +#define luaV_rawequalobj(o1,o2) equalobj(NULL,o1,o2) + + +/* not to called directly */ +LUAI_FUNC int luaV_equalobj_ (lua_State *L, const TValue *t1, const TValue *t2); + + +LUAI_FUNC int luaV_lessthan (lua_State *L, const TValue *l, const TValue *r); +LUAI_FUNC int luaV_lessequal (lua_State *L, const TValue *l, const TValue *r); +LUAI_FUNC const TValue *luaV_tonumber (const TValue *obj, TValue *n); +LUAI_FUNC int luaV_tostring (lua_State *L, StkId obj); +LUAI_FUNC void luaV_gettable (lua_State *L, const TValue *t, TValue *key, + StkId val); +LUAI_FUNC void luaV_settable (lua_State *L, const TValue *t, TValue *key, + StkId val); +LUAI_FUNC void luaV_finishOp (lua_State *L); +LUAI_FUNC void luaV_execute (lua_State *L); +LUAI_FUNC void luaV_concat (lua_State *L, int total); +LUAI_FUNC void luaV_arith (lua_State *L, StkId ra, const TValue *rb, + const TValue *rc, TMS op); +LUAI_FUNC void luaV_objlen (lua_State *L, StkId ra, const TValue *rb); + +#endif diff --git a/lua-5.2.4/src/lzio.c b/lua-5.2.4/src/lzio.c new file mode 100644 index 000000000..20efea983 --- /dev/null +++ b/lua-5.2.4/src/lzio.c @@ -0,0 +1,76 @@ +/* +** $Id: lzio.c,v 1.35.1.1 2013/04/12 18:48:47 roberto Exp $ +** Buffered streams +** See Copyright Notice in lua.h +*/ + + +#include + +#define lzio_c +#define LUA_CORE + +#include "lua.h" + +#include "llimits.h" +#include "lmem.h" +#include "lstate.h" +#include "lzio.h" + + +int luaZ_fill (ZIO *z) { + size_t size; + lua_State *L = z->L; + const char *buff; + lua_unlock(L); + buff = z->reader(L, z->data, &size); + lua_lock(L); + if (buff == NULL || size == 0) + return EOZ; + z->n = size - 1; /* discount char being returned */ + z->p = buff; + return cast_uchar(*(z->p++)); +} + + +void luaZ_init (lua_State *L, ZIO *z, lua_Reader reader, void *data) { + z->L = L; + z->reader = reader; + z->data = data; + z->n = 0; + z->p = NULL; +} + + +/* --------------------------------------------------------------- read --- */ +size_t luaZ_read (ZIO *z, void *b, size_t n) { + while (n) { + size_t m; + if (z->n == 0) { /* no bytes in buffer? */ + if (luaZ_fill(z) == EOZ) /* try to read more */ + return n; /* no more input; return number of missing bytes */ + else { + z->n++; /* luaZ_fill consumed first byte; put it back */ + z->p--; + } + } + m = (n <= z->n) ? n : z->n; /* min. between n and z->n */ + memcpy(b, z->p, m); + z->n -= m; + z->p += m; + b = (char *)b + m; + n -= m; + } + return 0; +} + +/* ------------------------------------------------------------------------ */ +char *luaZ_openspace (lua_State *L, Mbuffer *buff, size_t n) { + if (n > buff->buffsize) { + if (n < LUA_MINBUFFER) n = LUA_MINBUFFER; + luaZ_resizebuffer(L, buff, n); + } + return buff->buffer; +} + + diff --git a/lua-5.2.4/src/lzio.h b/lua-5.2.4/src/lzio.h new file mode 100644 index 000000000..441f7479c --- /dev/null +++ b/lua-5.2.4/src/lzio.h @@ -0,0 +1,65 @@ +/* +** $Id: lzio.h,v 1.26.1.1 2013/04/12 18:48:47 roberto Exp $ +** Buffered streams +** See Copyright Notice in lua.h +*/ + + +#ifndef lzio_h +#define lzio_h + +#include "lua.h" + +#include "lmem.h" + + +#define EOZ (-1) /* end of stream */ + +typedef struct Zio ZIO; + +#define zgetc(z) (((z)->n--)>0 ? cast_uchar(*(z)->p++) : luaZ_fill(z)) + + +typedef struct Mbuffer { + char *buffer; + size_t n; + size_t buffsize; +} Mbuffer; + +#define luaZ_initbuffer(L, buff) ((buff)->buffer = NULL, (buff)->buffsize = 0) + +#define luaZ_buffer(buff) ((buff)->buffer) +#define luaZ_sizebuffer(buff) ((buff)->buffsize) +#define luaZ_bufflen(buff) ((buff)->n) + +#define luaZ_resetbuffer(buff) ((buff)->n = 0) + + +#define luaZ_resizebuffer(L, buff, size) \ + (luaM_reallocvector(L, (buff)->buffer, (buff)->buffsize, size, char), \ + (buff)->buffsize = size) + +#define luaZ_freebuffer(L, buff) luaZ_resizebuffer(L, buff, 0) + + +LUAI_FUNC char *luaZ_openspace (lua_State *L, Mbuffer *buff, size_t n); +LUAI_FUNC void luaZ_init (lua_State *L, ZIO *z, lua_Reader reader, + void *data); +LUAI_FUNC size_t luaZ_read (ZIO* z, void* b, size_t n); /* read next n bytes */ + + + +/* --------- Private Part ------------------ */ + +struct Zio { + size_t n; /* bytes still unread */ + const char *p; /* current position in buffer */ + lua_Reader reader; /* reader function */ + void* data; /* additional data */ + lua_State *L; /* Lua state (for reader) */ +}; + + +LUAI_FUNC int luaZ_fill (ZIO *z); + +#endif diff --git a/mjson/Makefile b/mjson/Makefile new file mode 100644 index 000000000..ae44a3369 --- /dev/null +++ b/mjson/Makefile @@ -0,0 +1,11 @@ +OBJECTS = json.o json_helper.o rstring.o +HEADERS = json.h json_helper.h rstring.h +SRC = json.c json_helper.c rstring.c + +all: mjson.a + +clean: + rm -f mjson.a $(OBJECTS) + +mjson.a : $(OBJECTS) + ar -r mjson.a $(OBJECTS) diff --git a/mjson/json.c b/mjson/json.c new file mode 100644 index 000000000..5878f4f5f --- /dev/null +++ b/mjson/json.c @@ -0,0 +1,3608 @@ +/*************************************************************************** + * Copyright (C) 2007 by Rui Maciel * + * rui.maciel@gmail.com * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU Library General Public License as * + * published by the Free Software Foundation; either version 2 of the * + * License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU Library General Public * + * License along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include "json.h" + +#include +#include +#include +#include +#include + +#include "rstring.h" + +enum LEX_VALUE +{ LEX_MORE = 0, + LEX_INVALID_CHARACTER, + LEX_TRUE, + LEX_FALSE, + LEX_NULL, + LEX_BEGIN_OBJECT, + LEX_END_OBJECT, + LEX_BEGIN_ARRAY, + LEX_END_ARRAY, + LEX_NAME_SEPARATOR, + LEX_VALUE_SEPARATOR, + LEX_STRING, + LEX_NUMBER, + LEX_ERROR, + LEX_MEMORY +}; + + +json_t * +json_new_value (const enum json_value_type type) +{ + json_t *new_object; + /* allocate memory to the new object */ + new_object = malloc (sizeof (json_t)); + if (new_object == NULL) + return NULL; + + /* initialize members */ + new_object->text = NULL; + new_object->parent = NULL; + new_object->child = NULL; + new_object->child_end = NULL; + new_object->previous = NULL; + new_object->next = NULL; + new_object->type = type; + return new_object; +} + + +json_t * +json_new_string (const char *text) +{ + json_t *new_object; + size_t length; + + assert (text != NULL); + + /* allocate memory for the new object */ + new_object = malloc (sizeof (json_t)); + if (new_object == NULL) + return NULL; + + /* initialize members */ + length = strlen (text) + 1; + new_object->text = calloc (sizeof (char), length); + if (new_object->text == NULL) + { + free (new_object); + return NULL; + } + strncpy (new_object->text, text, length); + new_object->parent = NULL; + new_object->child = NULL; + new_object->child_end = NULL; + new_object->previous = NULL; + new_object->next = NULL; + new_object->type = JSON_STRING; + return new_object; +} + + +json_t * +json_new_number (const char *text) +{ + json_t *new_object; + size_t length; + + assert (text != NULL); + + /* allocate memory for the new object */ + new_object = malloc (sizeof (json_t)); + if (new_object == NULL) + return NULL; + + /* initialize members */ + length = strlen (text) + 1; + new_object->text = calloc (sizeof (char), length); + if (new_object->text == NULL) + { + free (new_object); + return NULL; + } + strncpy (new_object->text, text, length); + new_object->parent = NULL; + new_object->child = NULL; + new_object->child_end = NULL; + new_object->previous = NULL; + new_object->next = NULL; + new_object->type = JSON_NUMBER; + return new_object; +} + + +json_t * +json_new_object (void) +{ + return json_new_value (JSON_OBJECT); +} + + +json_t * +json_new_array (void) +{ + return json_new_value (JSON_ARRAY); +} + + +json_t * +json_new_null (void) +{ + return json_new_value (JSON_NULL); +} + + +json_t * +json_new_true (void) +{ + return json_new_value (JSON_TRUE); +} + + +json_t * +json_new_false (void) +{ + return json_new_value (JSON_FALSE); +} + + +void +json_free_value (json_t ** value) +{ + assert (value != NULL); + assert ((*value) != NULL); + + /* free each and every child node */ + if ((*value)->child != NULL) + { + json_t *i, *j; + i = (*value)->child_end; + while (i != NULL) + { + j = i->previous; + json_free_value (&i); + i = j; + } + } + + /* fixing sibling linked list connections */ + if ((*value)->previous && (*value)->next) + { + (*value)->previous->next = (*value)->next; + (*value)->next->previous = (*value)->previous; + } + else + { + if ((*value)->previous) + { + (*value)->previous->next = NULL; + } + if ((*value)->next) + { + (*value)->next->previous = NULL; + } + } + + /*fixing parent node connections */ + if ((*value)->parent) + { + if ((*value)->parent->child == (*value)) + { + if ((*value)->next) + { + (*value)->parent->child = (*value)->next; /* the parent node always points to the first node */ + } + else + { + if ((*value)->previous) + (*value)->parent->child = (*value)->next; /* the parent node always points to the first node */ + (*value)->parent->child = NULL; + } + } + } + + /*finally, freeing the memory allocated for this value */ + if ((*value)->text != NULL) + { + free ((*value)->text); + } + free (*value); /* the json value */ + (*value) = NULL; +} + + +enum json_error +json_insert_child (json_t * parent, json_t * child) +{ + /*TODO change the child list from FIFO to LIFO, in order to get rid of the child_end pointer */ + assert (parent != NULL); /* the parent must exist */ + assert (child != NULL); /* the child must exist */ + assert (parent != child); /* parent and child must not be the same. if they are, it will enter an infinite loop */ + + /* enforce tree structure correctness */ + switch (parent->type) + { + case JSON_STRING: + /* a string accepts every JSON type as a child value */ + /* therefore, the sanity check must be performed on the child node */ + switch (child->type) + { + case JSON_STRING: + case JSON_NUMBER: + case JSON_TRUE: + case JSON_FALSE: + case JSON_NULL: + if (child->child != NULL) + return JSON_BAD_TREE_STRUCTURE; + break; + + case JSON_OBJECT: + case JSON_ARRAY: + break; + + default: + return JSON_BAD_TREE_STRUCTURE; /* this part should never be reached */ + break; + } + break; + + case JSON_OBJECT: /* JSON objects may only accept JSON string objects which already have child nodes of their own */ + if (child->type != JSON_STRING) + return JSON_BAD_TREE_STRUCTURE; + break; + + case JSON_ARRAY: + switch (child->type) + { + case JSON_STRING: + case JSON_TRUE: + case JSON_FALSE: + case JSON_NULL: + case JSON_NUMBER: + if (child->child) + return JSON_BAD_TREE_STRUCTURE; + break; + + case JSON_OBJECT: + case JSON_ARRAY: + break; + default: + return JSON_BAD_TREE_STRUCTURE; + } + break; + + default: + return JSON_BAD_TREE_STRUCTURE; + } + + child->parent = parent; + if (parent->child) + { + child->previous = parent->child_end; + parent->child_end->next = child; + parent->child_end = child; + } + else + { + parent->child = child; + parent->child_end = child; + } + + return JSON_OK; +} + + +enum json_error +json_insert_pair_into_object (json_t * parent, const char *text_label, json_t * value) +{ + enum json_error error; + json_t *label; + /* verify if the parameters are valid */ + assert (parent != NULL); + assert (text_label != NULL); + assert (value != NULL); + assert (parent != value); + + /* enforce type coherence */ + assert (parent->type == JSON_OBJECT); + + + /* create label json_value */ + label = json_new_string (text_label); + if (label == NULL) + return JSON_MEMORY; + + /*insert value and check for error */ + error = json_insert_child (label, value); + if (error != JSON_OK) + return error; + /*insert value and check for error */ + error = json_insert_child (parent, label); + if (error != JSON_OK) + return error; + + return JSON_OK; +} + + +enum json_error +json_tree_to_string (json_t * root, char **text) +{ + json_t *cursor; + rcstring *output; + assert (root != NULL); + assert (text != NULL); + + cursor = root; + /* set up the output and temporary rwstrings */ + output = rcs_create (5); + + /* start the convoluted fun */ + state1: /* open value */ + { + if ((cursor->previous) && (cursor != root)) /*if cursor is children and not root than it is a followup sibling */ + { + /* append comma */ + if (rcs_catc (output, ',') != RS_OK) + { + return JSON_MEMORY; + } + } + switch (cursor->type) + { + case JSON_STRING: + /* append the "text"\0, which means 1 + wcslen(cursor->text) + 1 + 1 */ + /* set the new output size */ + if (rcs_catc (output, '\"') != RS_OK) + { + return JSON_MEMORY; + } + if (rcs_catcs (output, cursor->text, strlen (cursor->text)) != RS_OK) + { + return JSON_MEMORY; + } + if (rcs_catc (output, '\"') != RS_OK) + { + return JSON_MEMORY; + } + + if (cursor->parent != NULL) + { + if (cursor->parent->type == JSON_OBJECT) /* cursor is label in label:value pair */ + { + /* error checking: if parent is object and cursor is string then cursor must have a single child */ + if (cursor->child != NULL) + { + if (rcs_catc (output, ':') != RS_OK) + { + return JSON_MEMORY; + } + } + else + { + /* malformed document tree: label without value in label:value pair */ + rcs_free (&output); + text = NULL; + return JSON_BAD_TREE_STRUCTURE; + } + } + } + else /* does not have a parent */ + { + if (cursor->child != NULL) /* is root label in label:value pair */ + { + if (rcs_catc (output, ':') != RS_OK) + { + return JSON_MEMORY; + } + } + else + { + /* malformed document tree: label without value in label:value pair */ + rcs_free (&output); + text = NULL; + return JSON_BAD_TREE_STRUCTURE; + } + } + break; + + case JSON_NUMBER: + /* must not have any children */ + /* set the new size */ + if (rcs_catcs (output, cursor->text, strlen (cursor->text)) != RS_OK) + { + return JSON_MEMORY; + } + goto state2; /* close value */ + break; + + case JSON_OBJECT: + if (rcs_catc (output, '{') != RS_OK) + { + return JSON_MEMORY; + } + + if (cursor->child) + { + cursor = cursor->child; + goto state1; /* open value */ + } + else + { + goto state2; /* close value */ + } + break; + + case JSON_ARRAY: + if (rcs_catc (output, '[') != RS_OK) + { + return JSON_MEMORY; + } + + if (cursor->child != NULL) + { + cursor = cursor->child; + goto state1; + } + else + { + goto state2; /* close value */ + } + break; + + case JSON_TRUE: + /* must not have any children */ + if (rcs_catcs (output, "true", 4) != RS_OK) + { + return JSON_MEMORY; + } + goto state2; /* close value */ + break; + + case JSON_FALSE: + /* must not have any children */ + if (rcs_catcs (output, "false", 5) != RS_OK) + { + return JSON_MEMORY; + } + goto state2; /* close value */ + break; + + case JSON_NULL: + /* must not have any children */ + if (rcs_catcs (output, "null", 4) != RS_OK) + { + return JSON_MEMORY; + } + goto state2; /* close value */ + break; + + default: + goto error; + } + if (cursor->child) + { + cursor = cursor->child; + goto state1; /* open value */ + } + else + { + /* does not have any children */ + goto state2; /* close value */ + } + } + + state2: /* close value */ + { + switch (cursor->type) + { + case JSON_OBJECT: + if (rcs_catc (output, '}') != RS_OK) + { + return JSON_MEMORY; + } + break; + + case JSON_ARRAY: + if (rcs_catc (output, ']') != RS_OK) + { + return JSON_MEMORY; + } + break; + + case JSON_STRING: + break; + case JSON_NUMBER: + break; + case JSON_TRUE: + break; + case JSON_FALSE: + break; + case JSON_NULL: + break; + default: + goto error; + } + if ((cursor->parent == NULL) || (cursor == root)) + { + goto end; + } + else if (cursor->next) + { + cursor = cursor->next; + goto state1; /* open value */ + } + else + { + cursor = cursor->parent; + goto state2; /* close value */ + } + } + + error: + { + rcs_free (&output); + return JSON_UNKNOWN_PROBLEM; + } + + end: + { + *text = rcs_unwrap(output); + return JSON_OK; + } +} + + +void +json_strip_white_spaces (char *text) +{ + size_t in, out, length; + int state; + + assert (text != NULL); + + in = 0; + out = 0; + length = strlen (text); + state = 0; /* possible states: 0 -> document, 1 -> inside a string */ + + while (in < length) + { + switch (text[in]) + { + case '\x20': /* space */ + case '\x09': /* horizontal tab */ + case '\x0A': /* line feed or new line */ + case '\x0D': /* Carriage return */ + if (state == 1) + { + text[out++] = text[in]; + } + break; + + case '\"': + switch (state) + { + case 0: /* not inside a JSON string */ + state = 1; + break; + + case 1: /* inside a JSON string */ + if (text[in - 1] != '\\') + { + state = 0; + } + break; + + default: + assert (0); + } + text[out++] = text[in]; + break; + + default: + text[out++] = text[in]; + } + ++in; + } + text[out] = '\0'; +} + + +char * +json_format_string (char *text) +{ + size_t pos = 0; + unsigned int indentation = 0; /* the current indentation level */ + unsigned int i; /* loop iterator variable */ + char loop; + + rcstring *output; + + output = rcs_create (strlen (text)); + while (pos < strlen (text)) + { + switch (text[pos]) + { + case '\x20': + case '\x09': + case '\x0A': + case '\x0D': /* JSON insignificant white spaces */ + pos++; + break; + + case '{': + indentation++; + rcs_catc (output, '{'); + for (i = 0; i < indentation; i++) + { + rcs_catc (output, '\t'); + } + pos++; + break; + + case '}': + indentation--; + rcs_catc (output, '\n'); + for (i = 0; i < indentation; i++) + { + rcs_catc (output, '\t'); + } + rcs_catc (output, '}'); + pos++; + break; + + case ':': + rcs_catcs (output, ": ", 2); + pos++; + break; + + case ',': + rcs_catcs (output, ",\n", 2); + for (i = 0; i < indentation; i++) + { + rcs_catc (output, '\t'); + } + pos++; + break; + + case '\"': /* open string */ + rcs_catc (output, text[pos]); + pos++; + loop = 1; /* inner string loop trigger is enabled */ + while (loop) /* parse the inner part of the string ///TODO rethink this loop */ + { + if (text[pos] == '\\') /* escaped sequence */ + { + rcs_catc (output, '\\'); + pos++; + if (text[pos] == '\"') /* don't consider a \" escaped sequence as an end of string */ + { + rcs_catc (output, '\"'); + pos++; + } + } + else if (text[pos] == '\"') /* reached end of string */ + { + loop = 0; + } + + rcs_catc (output, text[pos]); + + pos++; + if (pos >= strlen (text)) + { + loop = 0; + } + } + break; + + default: + rcs_catc (output, text[pos]); + pos++; + break; + } + } + + return rcs_unwrap (output); +} + + +char * +json_escape (char * text) +{ + rcstring *output; + size_t i, length; + char buffer[6]; + /* check if pre-conditions are met */ + assert (text != NULL); + + /* defining the temporary variables */ + length = strlen(text); + output = rcs_create (length); + if (output == NULL) + return NULL; + for (i = 0; i < length; i++) + { + if (text[i] == '\\') + { + rcs_catcs (output, "\\\\", 2); + } + else if (text[i] == '\"') + { + rcs_catcs (output, "\\\"", 2); + } + else if (text[i] == '/') + { + rcs_catcs (output, "\\/", 2); + } + else if (text[i] == '\b') + { + rcs_catcs (output, "\\b", 2); + } + else if (text[i] == '\f') + { + rcs_catcs (output, "\\f", 2); + } + else if (text[i] == '\n') + { + rcs_catcs (output, "\\n", 2); + } + else if (text[i] == '\r') + { + rcs_catcs (output, "\\r", 2); + } + else if (text[i] == '\t') + { + rcs_catcs (output, "\\t", 2); + } + else if (text[i] < 0) /* non-BMP character */ + { + rcs_catc (output, text[i]); + } + else if (text[i] < 0x20) + { + sprintf(buffer,"\\u%4.4x",text[i]); + rcs_catcs(output,buffer,6); + } + else + { + rcs_catc (output, text[i]); + } + } + return rcs_unwrap (output); +} + + +void +json_jpi_init (struct json_parsing_info *jpi) +{ + assert (jpi != NULL); + jpi->state = 0; + jpi->lex_state = 0; + jpi->lex_text = NULL; + jpi->p = NULL; + jpi->cursor = NULL; + jpi->string_length_limit_reached = 0; +} + + +int +lexer (char *buffer, char **p, unsigned int *state, rcstring ** text) +{ + assert (buffer != NULL); + assert (p != NULL); + assert (state != NULL); + assert (text != NULL); + if (*p == NULL) + *p = buffer; + + while (**p != '\0') + { + switch (*state) + { + + case 0: /* Root document */ + { + switch (*(*p)++) + { + case '\x20': /* space */ + case '\x09': /* horizontal tab */ + case '\x0A': /* line feed or new line */ + case '\x0D': /* Carriage return */ + break; + + case '{': + return LEX_BEGIN_OBJECT; + case '}': + return LEX_END_OBJECT; + case '[': + return LEX_BEGIN_ARRAY; + case ']': + return LEX_END_ARRAY; + case ':': + return LEX_NAME_SEPARATOR; + case ',': + return LEX_VALUE_SEPARATOR; + + case '\"': + *text = rcs_create (5); + if (*text == NULL) + return LEX_MEMORY; + *state = 1; /* inside a JSON string */ + break; + + case 't': + *state = 7; /* true: 1 */ + break; + + case 'f': + *state = 10; /* false: 1 */ + break; + + case 'n': + *state = 14; /* false: 1 */ + break; + + case '-': + *text = rcs_create (5); + if (*text == NULL) + return LEX_MEMORY; + if (rcs_catc (*text, '-') != RS_OK) + return LEX_MEMORY; + *state = 17; /* number: '0' */ + break; + + case '0': + *text = rcs_create (5); + if (*text == NULL) + return LEX_MEMORY; + if (rcs_catc (*text, '0') != RS_OK) + return LEX_MEMORY; + *state = 18; /* number: '0' */ + break; + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + *text = rcs_create (5); + if (*text == NULL) + return LEX_MEMORY; + if (rcs_catc (*text, *(*p - 1)) != RS_OK) + return LEX_MEMORY; + *state = 19; /* number: decimal followup */ + break; + + + default: + return LEX_INVALID_CHARACTER; + } + } + break; + + case 1: /* inside a JSON string */ + { + assert (*text != NULL); + switch (**p) + { + case '\"': /* close JSON string */ + /* it is expected that, in the routine that calls this function, text is set to NULL */ + *state = 0; + ++*p; + return LEX_STRING; + break; + + case '\\': + if (rcs_catc (*text, '\\') != RS_OK) + return LEX_MEMORY; + *state = 2; /* inside a JSON string: start escape sequence */ + break; + + default: + if (rcs_catc (*text, **p) != RS_OK) + return LEX_MEMORY; + } + ++*p; + } + break; + + case 2: /* inside a JSON string: start escape sequence */ + { + assert (*text != NULL); + switch (**p) + { + case '\\': + case '\"': + case '/': + case 'b': + case 'f': + case 'n': + case 'r': + case 't': + if (rcs_catc (*text, **p) != RS_OK) + return LEX_MEMORY; + *state = 1; /* inside a JSON string */ + break; + + case 'u': + if (rcs_catc (*text, **p) != RS_OK) + return LEX_MEMORY; + *state = 3; /* inside a JSON string: escape unicode */ + break; + + default: + return LEX_INVALID_CHARACTER; + } + ++*p; + } + break; + + case 3: /*inside a JSON string: escape unicode */ + { + assert (*text != NULL); + if ((**p >= 'a') && (**p <= 'e')) + { + if (rcs_catc (*text, **p) != RS_OK) + return LEX_MEMORY; + *state = 4; /* inside a JSON string: escape unicode */ + } + else if ((**p >= 'A') && (**p <= 'E')) + { + if (rcs_catc (*text, **p) != RS_OK) + return LEX_MEMORY; + *state = 4; /* inside a JSON string: escape unicode */ + } + else if ((**p >= '0') && (**p <= '9')) + { + if (rcs_catc (*text, **p) != RS_OK) + return LEX_MEMORY; + *state = 4; /* inside a JSON string: escape unicode */ + } + else + return LEX_INVALID_CHARACTER; + ++*p; + } + break; + + case 4: /* inside a JSON string: escape unicode */ + { + assert (*text != NULL); + if ((**p >= 'a') && (**p <= 'e')) + { + if (rcs_catc (*text, **p) != RS_OK) + return LEX_MEMORY; + *state = 5; /* inside a JSON string: escape unicode */ + } + else if ((**p >= 'A') && (**p <= 'E')) + { + if (rcs_catc (*text, **p) != RS_OK) + return LEX_MEMORY; + *state = 5; /* inside a JSON string: escape unicode */ + } + else if ((**p >= '0') && (**p <= '9')) + { + if (rcs_catc (*text, **p) != RS_OK) + return LEX_MEMORY; + *state = 5; /* inside a JSON string: escape unicode */ + } + else + return LEX_INVALID_CHARACTER; + ++*p; + } + + case 5: /* inside a JSON string: escape unicode */ + { + assert (*text != NULL); + if ((**p >= 'a') && (**p <= 'e')) + { + if (rcs_catc (*text, **p) != RS_OK) + return LEX_MEMORY; + *state = 6; /* inside a JSON string: escape unicode */ + } + else if ((**p >= 'A') && (**p <= 'E')) + { + if (rcs_catc (*text, **p) != RS_OK) + return LEX_MEMORY; + *state = 6; /* inside a JSON string: escape unicode */ + } + else if ((**p >= '0') && (**p <= '9')) + { + if (rcs_catc (*text, **p) != RS_OK) + return LEX_MEMORY; + *state = 6; /* inside a JSON string: escape unicode */ + } + else + return LEX_INVALID_CHARACTER; + ++*p; + } + break; + + case 6: /* inside a JSON string: escape unicode */ + { + assert (*text != NULL); + if ((**p >= 'a') && (**p <= 'e')) + { + if (rcs_catc (*text, **p) != RS_OK) + return LEX_MEMORY; + *state = 1; /* inside a JSON string: escape unicode */ + } + else if ((**p >= 'A') && (**p <= 'E')) + { + if (rcs_catc (*text, **p) != RS_OK) + return LEX_MEMORY; + *state = 1; /* inside a JSON string: escape unicode */ + } + else if ((**p >= '0') && (**p <= '9')) + { + if (rcs_catc (*text, **p) != RS_OK) + return LEX_MEMORY; + *state = 1; /* inside a JSON string: escape unicode */ + } + else + return LEX_INVALID_CHARACTER; + ++*p; + } + break; + + case 7: /* true: 1 */ + { + switch (*(*p)++) + { + case 'r': + *state = 8; + break; + default: + return LEX_INVALID_CHARACTER; + break; + } + } + break; + + case 8: /* true: 2 */ + { + switch (*(*p)++) + { + case 'u': + *state = 9; + break; + default: + return LEX_INVALID_CHARACTER; + break; + } + } + break; + + case 9: /* true: 3 */ + { + switch (*(*p)++) + { + case 'e': + *state = 0; + return LEX_TRUE; + break; + default: + return LEX_INVALID_CHARACTER; + break; + } + } + break; + + case 10: /* false: 1 */ + { + switch (*(*p)++) + { + case 'a': + *state = 11; + break; + default: + return LEX_INVALID_CHARACTER; + break; + } + } + break; + + case 11: /* false: 2 */ + { + switch (*(*p)++) + { + case 'l': + *state = 12; + break; + default: + return LEX_INVALID_CHARACTER; + break; + } + } + break; + + case 12: /* false: 3 */ + { + switch (*(*p)++) + { + case 's': + *state = 13; + break; + default: + return LEX_INVALID_CHARACTER; + break; + } + } + break; + + case 13: /* false: 4 */ + { + switch (*(*p)++) + { + case 'e': + *state = 0; + return LEX_FALSE; + break; + default: + return LEX_INVALID_CHARACTER; + break; + } + } + break; + + case 14: /* null: 1 */ + { + switch (*(*p)++) + { + case 'u': + *state = 15; + break; + default: + return LEX_INVALID_CHARACTER; + break; + } + } + break; + + case 15: /* null: 2 */ + { + switch (*(*p)++) + { + case 'l': + *state = 16; + break; + default: + return LEX_INVALID_CHARACTER; + break; + } + } + break; + + case 16: /* null: 3 */ + { + switch (*(*p)++) + { + case 'l': + *state = 0; + return LEX_NULL; + break; + default: + return LEX_INVALID_CHARACTER; + break; + } + } + break; + + case 17: /* number: minus sign */ + { + assert (*text != NULL); + switch (**p) + { + case '0': + if (rcs_catc (*text, **p) != RS_OK) + return LEX_MEMORY; + ++*p; + *state = 18; /* number: '0' */ + break; + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (rcs_catc (*text, **p) != RS_OK) + return LEX_MEMORY; + ++*p; + *state = 19; /* number: decimal followup */ + break; + + default: + return LEX_INVALID_CHARACTER; + break; + } + } + break; + + case 18: /* number: '0' */ + { + assert (*text != NULL); + switch (**p) + { + case '\x20': /* space */ + case '\x09': /* horizontal tab */ + case '\x0A': /* line feed or new line */ + case '\x0D': /* Carriage return */ + ++*p; + case ']': + case '}': + case ',': + *state = 0; + return LEX_NUMBER; + break; + + case '.': + if (rcs_catc (*text, **p) != RS_OK) + return LEX_MEMORY; + /*TODO finish this state */ + ++*p; + *state = 20; /* number: frac start */ + break; + + case 'e': + case 'E': + if (rcs_catc (*text, **p) != RS_OK) + return LEX_MEMORY; + ++*p; + *state = 22; /* number: exp start */ + break; + + default: + return LEX_INVALID_CHARACTER; + break; + } + } + break; + + case 19: /* number: int followup */ + { + assert (*text != NULL); + switch (**p) + { + case '\x20': /* space */ + case '\x09': /* horizontal tab */ + case '\x0A': /* line feed or new line */ + case '\x0D': /* Carriage return */ + ++*p; + case ']': + case '}': + case ',': + *state = 0; + return LEX_NUMBER; + break; + + case '.': + if (rcs_catc (*text, **p) != RS_OK) + return LEX_MEMORY; + ++*p; + *state = 20; /* number: frac start */ + break; + + case 'e': + case 'E': + if (rcs_catc (*text, **p) != RS_OK) + return LEX_MEMORY; + ++*p; + *state = 22; /* number: exp start */ + break; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (rcs_catc (*text, **p) != RS_OK) + return LEX_MEMORY; + ++*p; + break; + + default: + return LEX_INVALID_CHARACTER; + break; + } + } + break; + + case 20: /* number: frac start */ + { + assert (*text != NULL); + switch (**p) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (rcs_catc (*text, **p) != RS_OK) + return LEX_MEMORY; + ++*p; + *state = 21; /* number: frac continue */ + break; + + default: + return LEX_INVALID_CHARACTER; + break; + } + } + break; + + case 21: /* number: frac continue */ + { + assert (*text != NULL); + switch (**p) + { + case '\x20': /* space */ + case '\x09': /* horizontal tab */ + case '\x0A': /* line feed or new line */ + case '\x0D': /* Carriage return */ + ++*p; + case ']': + case '}': + case ',': + *state = 0; + return LEX_NUMBER; + break; + + case 'e': + case 'E': + if (rcs_catc (*text, **p) != RS_OK) + return LEX_MEMORY; + ++*p; + *state = 22; /* number: exp start */ + break; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (rcs_catc (*text, **p) != RS_OK) + return LEX_MEMORY; + ++*p; + break; + + default: + return LEX_INVALID_CHARACTER; + break; + } + } + break; + + case 22: /* number: exp start */ + { + assert (*text != NULL); + switch (**p) + { + case '-': + case '+': + if (rcs_catc (*text, **p) != RS_OK) + return LEX_MEMORY; + ++*p; + *state = 23; /* number: exp continue */ + break; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (rcs_catc (*text, **p) != RS_OK) + return LEX_MEMORY; + ++*p; + *state = 24; /* number: exp end */ + break; + + default: + return LEX_INVALID_CHARACTER; + break; + } + } + break; + + case 23: /* number: exp continue */ + { + assert (*text != NULL); + switch (**p) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (rcs_catc (*text, **p) != RS_OK) + return LEX_MEMORY; + ++*p; + *state = 24; /* number: exp end */ + break; + + default: + return LEX_INVALID_CHARACTER; + break; + } + } + break; + + case 24: /* number: exp end */ + { + assert (*text != NULL); + switch (**p) + { + case '\x20': /* space */ + case '\x09': /* horizontal tab */ + case '\x0A': /* line feed or new line */ + case '\x0D': /* Carriage return */ + ++*p; + case ']': + case '}': + case ',': + *state = 0; + return LEX_NUMBER; + break; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (rcs_catc (*text, **p) != RS_OK) + return LEX_MEMORY; + ++*p; + break; + + default: + return LEX_INVALID_CHARACTER; + break; + } + } + break; + + default: + printf ("*state missing: %d\n", *state); + return LEX_INVALID_CHARACTER; + } + + } + + *p = NULL; + return LEX_MORE; +} + + +enum json_error +json_parse_fragment (struct json_parsing_info *info, char *buffer) +{ + json_t *temp = NULL; + + assert (info != NULL); + assert (buffer != NULL); + + info->p = buffer; + while (*info->p != '\0') + { + switch (info->state) + { + case 0: /* starting point */ + { + switch (lexer (buffer, &info->p, &info->lex_state, (rcstring **) & info->lex_text)) + { + case LEX_BEGIN_OBJECT: + info->state = 1; /* begin object */ + break; + + case LEX_BEGIN_ARRAY: + info->state = 7; /* begin array */ + break; + + default: + printf ("state %d: defaulted\n", info->state); + return JSON_MALFORMED_DOCUMENT; + break; + } + } + break; + + case 1: /* open object */ + { + if (info->cursor == NULL) + { + if ((info->cursor = json_new_object ()) == NULL) + { + return JSON_MEMORY; + } + } + else + { + /* perform tree sanity check */ + assert ((info->cursor->type == JSON_STRING) || (info->cursor->type == JSON_ARRAY)); + + if ((temp = json_new_object ()) == NULL) + { + return JSON_MEMORY; + } + if (json_insert_child (info->cursor, temp) != JSON_OK) + { + return JSON_UNKNOWN_PROBLEM; + } + info->cursor = temp; + temp = NULL; + } + info->state = 2; /* just entered an object */ + } + break; + + case 2: /* opened object */ + { + /*perform tree sanity checks */ + assert (info->cursor != NULL); + assert (info->cursor->type == JSON_OBJECT); + + switch (lexer (buffer, &info->p, &info->lex_state, (rcstring **) & info->lex_text)) + { + case LEX_STRING: + if ((temp = json_new_value (JSON_STRING)) == NULL) + return JSON_MEMORY; + temp->text = rcs_unwrap ((rcstring *) info->lex_text), info->lex_text = NULL; + if (json_insert_child (info->cursor, temp) != JSON_OK) + { + /*TODO return value according to the value returned from json_insert_child() */ + return JSON_UNKNOWN_PROBLEM; + } + info->cursor = temp; + temp = NULL; + info->state = 5; /* label, pre label:value separator */ + break; + + case LEX_END_OBJECT: + if (info->cursor->parent == NULL) + { + info->state = 99; /* finished document. only accept whitespaces until EOF */ + } + else + { + info->cursor = info->cursor->parent; + switch (info->cursor->type) + { + case JSON_STRING: + /* perform tree sanity checks */ + assert (info->cursor->parent != NULL); + + info->cursor = info->cursor->parent; + if (info->cursor->type != JSON_OBJECT) + { + return JSON_BAD_TREE_STRUCTURE; + } + else + { + info->state = 3; /* finished adding a field to an object */ + } + break; + + case JSON_ARRAY: + info->state = 9; + break; + + default: + return JSON_BAD_TREE_STRUCTURE; + } + } + break; + + case LEX_MORE: + return JSON_INCOMPLETE_DOCUMENT; + break; + + default: + printf ("state %d: defaulted\n", info->state); + return JSON_MALFORMED_DOCUMENT; + break; + } + } + break; + + case 3: /* finished adding a field to an object */ + { + /*perform tree sanity checks */ + assert (info->cursor != NULL); + assert (info->cursor->type == JSON_OBJECT); + + switch (lexer (buffer, &info->p, &info->lex_state, (rcstring **) & info->lex_text)) + { + case LEX_VALUE_SEPARATOR: + info->state = 4; /* sibling, post-object */ + break; + + case LEX_END_OBJECT: + if (info->cursor->parent == NULL) + { + info->state = 99; /* parse until EOF */ + } + else + { + info->cursor = info->cursor->parent; + switch (info->cursor->type) + { + case JSON_STRING: + /* perform tree sanity checks */ + assert (info->cursor->parent != NULL); + + info->cursor = info->cursor->parent; + if (info->cursor->type != JSON_OBJECT) + { + return JSON_BAD_TREE_STRUCTURE; + } + else + { + info->state = 3; /* finished adding a field to an object */ + } + break; + + case JSON_ARRAY: + info->state = 9; + break; + + default: + return JSON_BAD_TREE_STRUCTURE; + } + } + break; + + case LEX_MORE: + return JSON_INCOMPLETE_DOCUMENT; + break; + + default: + printf ("state %d: defaulted\n", info->state); + return JSON_MALFORMED_DOCUMENT; + break; + } + } + break; + + case 4: /* sibling, post-object */ + { + assert (info->cursor != NULL); + assert (info->cursor->type == JSON_OBJECT); + + switch (lexer (buffer, &info->p, &info->lex_state, (rcstring **) & info->lex_text)) + { + case LEX_STRING: + if ((temp = json_new_value (JSON_STRING)) == NULL) + return JSON_MEMORY; + temp->text = rcs_unwrap ((rcstring *) info->lex_text), info->lex_text = NULL; + if (json_insert_child (info->cursor, temp) != JSON_OK) + { + return JSON_UNKNOWN_PROBLEM; + } + info->cursor = temp; + temp = NULL; + info->state = 5; + break; + + case LEX_MORE: + return JSON_INCOMPLETE_DOCUMENT; + break; + + default: + printf ("state %d: defaulted\n", info->state); + return JSON_MALFORMED_DOCUMENT; + break; + } + } + break; + + case 5: /* label, pre name separator */ + { + /* perform tree sanity checks */ + assert (info->cursor != NULL); + assert (info->cursor->type == JSON_STRING); + + switch (lexer (buffer, &info->p, &info->lex_state, (rcstring **) & info->lex_text)) + { + case LEX_NAME_SEPARATOR: + info->state = 6; /* label, pos label:value separator */ + break; + + case LEX_MORE: + return JSON_INCOMPLETE_DOCUMENT; + break; + + default: + printf ("state %d: defaulted\n", info->state); + return JSON_MALFORMED_DOCUMENT; + break; + } + } + break; + + case 6: /* label, pos name separator */ + { + unsigned int value; /* to avoid redundant code */ + /* perform tree sanity checks */ + assert (info->cursor != NULL); + assert (info->cursor->type == JSON_STRING); + + switch (value = lexer (buffer, &info->p, &info->lex_state, (rcstring **) & info->lex_text)) + { + case LEX_STRING: + if ((temp = json_new_value (JSON_STRING)) == NULL) + return JSON_MEMORY; + temp->text = rcs_unwrap ((rcstring *) info->lex_text), info->lex_text = NULL; + if (json_insert_child (info->cursor, temp) != JSON_OK) + { + /*TODO specify the exact error message */ + return JSON_UNKNOWN_PROBLEM; + } + if (info->cursor->parent == NULL) + { + info->state = 99; /* finished document. only accepts whitespaces until EOF */ + } + else + { + info->cursor = info->cursor->parent; + } + temp = NULL; + info->state = 3; /* finished adding a field to an object */ + break; + + case LEX_NUMBER: + if ((temp = json_new_value (JSON_NUMBER)) == NULL) + return JSON_MEMORY; + temp->text = rcs_unwrap ((rcstring *) info->lex_text), info->lex_text = NULL; + if (json_insert_child (info->cursor, temp) != JSON_OK) + { + /*TODO specify the exact error message */ + return JSON_UNKNOWN_PROBLEM; + } + if (info->cursor->parent == NULL) + { + info->state = 99; /* finished document. only accepts whitespaces until EOF */ + } + else + { + info->cursor = info->cursor->parent; + } + temp = NULL; + info->state = 3; /* finished adding a field to an object */ + break; + + case LEX_TRUE: + if ((temp = json_new_value (JSON_TRUE)) == NULL) + return JSON_MEMORY; + if (json_insert_child (info->cursor, temp) != JSON_OK) + { + /*TODO specify the exact error message */ + return JSON_UNKNOWN_PROBLEM; + } + if (info->cursor->parent == NULL) + { + info->state = 99; /* finished document. only accepts whitespaces until EOF */ + } + else + { + info->cursor = info->cursor->parent; + } + temp = NULL; + info->state = 3; /* finished adding a field to an object */ + break; + + case LEX_FALSE: + if ((temp = json_new_value (JSON_FALSE)) == NULL) + return JSON_MEMORY; + if (json_insert_child (info->cursor, temp) != JSON_OK) + { + /*TODO specify the exact error message */ + return JSON_UNKNOWN_PROBLEM; + } + if (info->cursor->parent == NULL) + { + info->state = 99; /* finished document. only accepts whitespaces until EOF */ + } + else + { + info->cursor = info->cursor->parent; + } + temp = NULL; + info->state = 3; /* finished adding a field to an object */ + break; + + case LEX_NULL: + if ((temp = json_new_value (JSON_NULL)) == NULL) + return JSON_MEMORY; + if (json_insert_child (info->cursor, temp) != JSON_OK) + { + /*TODO specify the exact error message */ + return JSON_UNKNOWN_PROBLEM; + } + if (info->cursor->parent == NULL) + { + info->state = 99; /* finished document. only accepts whitespaces until EOF */ + } + else + { + info->cursor = info->cursor->parent; + } + temp = NULL; + info->state = 3; /* finished adding a field to an object */ + break; + + case LEX_BEGIN_OBJECT: + info->state = 1; + break; + + case LEX_BEGIN_ARRAY: + info->state = 7; + break; + + case LEX_MORE: + return JSON_INCOMPLETE_DOCUMENT; + break; + + case LEX_MEMORY: + return JSON_MEMORY; + break; + + default: + printf ("state %d: defaulted\n", info->state); + return JSON_MALFORMED_DOCUMENT; + break; + } + } + break; + + case 7: /* open array */ + { + if (info->cursor == NULL) + { + if ((info->cursor = json_new_array ()) == NULL) + { + return JSON_MEMORY; + } + } + else + { + /* perform tree sanity checks */ + assert ((info->cursor->type == JSON_ARRAY) || (info->cursor->type == JSON_STRING)); + + if ((temp = json_new_array ()) == NULL) + { + return JSON_MEMORY; + } + if (json_insert_child (info->cursor, temp) != JSON_OK) + { + return JSON_UNKNOWN_PROBLEM; + } + info->cursor = temp; + temp = NULL; + } + info->state = 8; /* just entered an array */ + } + break; + + case 8: /* just entered an array */ + { + /* perform tree sanity checks */ + assert (info->cursor != NULL); + assert (info->cursor->type == JSON_ARRAY); + + switch (lexer (buffer, &info->p, &info->lex_state, (rcstring **) & info->lex_text)) + { + case LEX_STRING: + if ((temp = json_new_value (JSON_STRING)) == NULL) + return JSON_MEMORY; + temp->text = rcs_unwrap ((rcstring *) info->lex_text), info->lex_text = NULL; + if (json_insert_child (info->cursor, temp) != JSON_OK) + { + return JSON_UNKNOWN_PROBLEM; + } + temp = NULL; + info->state = 9; /* label, pre label:value separator */ + break; + + case LEX_NUMBER: + if ((temp = json_new_value (JSON_NUMBER)) == NULL) + return JSON_MEMORY; + temp->text = rcs_unwrap ((rcstring *) info->lex_text), info->lex_text = NULL; + if (json_insert_child (info->cursor, temp) != JSON_OK) + { + return JSON_UNKNOWN_PROBLEM; + } + temp = NULL; + info->state = 9; /* label, pre label:value separator */ + break; + + case LEX_TRUE: + if ((temp = json_new_value (JSON_TRUE)) == NULL) + return JSON_MEMORY; + if (json_insert_child (info->cursor, temp) != JSON_OK) + { + return JSON_UNKNOWN_PROBLEM; + } + info->state = 9; /* label, pre label:value separator */ + break; + + case LEX_FALSE: + if ((temp = json_new_value (JSON_FALSE)) == NULL) + return JSON_MEMORY; + if (json_insert_child (info->cursor, temp) != JSON_OK) + { + return JSON_UNKNOWN_PROBLEM; + } + info->state = 9; /* label, pre label:value separator */ + break; + + case LEX_NULL: + if ((temp = json_new_value (JSON_NULL)) == NULL) + return JSON_MEMORY; + if (json_insert_child (info->cursor, temp) != JSON_OK) + { + return JSON_UNKNOWN_PROBLEM; + } + info->state = 9; /* label, pre label:value separator */ + break; + + case LEX_BEGIN_ARRAY: + info->state = 7; /* open array */ + break; + + case LEX_END_ARRAY: + if (info->cursor->parent == NULL) + { + /*TODO implement this */ + info->state = 99; /* finished document. only accept whitespaces until EOF */ + } + else + { + info->cursor = info->cursor->parent; + switch (info->cursor->type) + { + case JSON_STRING: + if (info->cursor->parent == NULL) + return JSON_BAD_TREE_STRUCTURE; + else + { + info->cursor = info->cursor->parent; + if (info->cursor->type != JSON_OBJECT) + { + return JSON_BAD_TREE_STRUCTURE; + } + + info->state = 3; /* followup to adding child to array */ + } + break; + + case JSON_ARRAY: + info->state = 9; /* followup to adding child to array */ + break; + + default: + return JSON_BAD_TREE_STRUCTURE; + } + } + break; + + case LEX_BEGIN_OBJECT: + info->state = 1; /* open object */ + break; + + case LEX_MORE: + return JSON_INCOMPLETE_DOCUMENT; + break; + + default: + printf ("state %d: defaulted\n", info->state); + return JSON_MALFORMED_DOCUMENT; + break; + } + } + break; + + case 9: /* followup to adding child to array */ + { + /*TODO perform tree sanity checks */ + assert (info->cursor != NULL); + switch (lexer (buffer, &info->p, &info->lex_state, (rcstring **) & info->lex_text)) + { + case LEX_VALUE_SEPARATOR: + info->state = 8; + break; + + case LEX_END_ARRAY: + if (info->cursor->parent == NULL) + { + info->state = 99; /* finished document. only accept whitespaces until EOF */ + } + else + { + info->cursor = info->cursor->parent; + switch (info->cursor->type) + { + case JSON_STRING: + if (info->cursor->parent == NULL) + { + info->state = 99; /* finished document. only accept whitespaces until EOF */ + } + else + { + info->cursor = info->cursor->parent; + if (info->cursor->type != JSON_OBJECT) + { + return JSON_BAD_TREE_STRUCTURE; + } + else + { + info->state = 3; /* followup to adding child to array */ + } + } + break; + + case JSON_ARRAY: + info->state = 9; /* followup to adding child to array */ + break; + + default: + return JSON_BAD_TREE_STRUCTURE; + } + } + break; + + case LEX_MORE: + return JSON_INCOMPLETE_DOCUMENT; + break; + + default: + printf ("state %d: defaulted\n", info->state); + return JSON_MALFORMED_DOCUMENT; + break; + } + } + break; + + case 99: /* finished document. only accept whitespaces until EOF */ + { + /* perform tree sanity check */ + assert (info->cursor->parent == NULL); + switch (lexer (buffer, &info->p, &info->lex_state, (rcstring **) & info->lex_text)) + { + case LEX_MORE: + return JSON_WAITING_FOR_EOF; + break; + + case LEX_MEMORY: + return JSON_MEMORY; + break; + + default: + return JSON_MALFORMED_DOCUMENT; + break; + } + } + break; + + default: + printf ("invalid parser state %d: defaulted\n", info->state); + return JSON_UNKNOWN_PROBLEM; + } + } + info->p = NULL; + if (info->state == 99) + return JSON_WAITING_FOR_EOF; + else + return JSON_INCOMPLETE_DOCUMENT; +} + + + +enum json_error json_parse_document (json_t **root, char *text) +{ + enum json_error error; + struct json_parsing_info *jpi; + + assert(root != NULL); + assert(*root == NULL); + assert(text != NULL); + + /* initialize the parsing structure */ + jpi = malloc(sizeof(struct json_parsing_info)); + if(jpi == NULL) + { + return JSON_MEMORY; + } + json_jpi_init (jpi); + + error = json_parse_fragment (jpi, text); + if ( (error == JSON_WAITING_FOR_EOF) || (error == JSON_OK)) + { + *root = jpi->cursor; + free(jpi); + return JSON_OK; + } + else + { + free(jpi); + return error; + } +} + + + enum json_error +json_saxy_parse (struct json_saxy_parser_status *jsps, struct json_saxy_functions *jsf, char c) +{ + /*TODO handle a string instead of a single char */ + /* temp variables */ + rcstring *temp; + + /* make sure everything is in it's place */ + assert (jsps != NULL); + assert (jsf != NULL); + temp = NULL; + + /* goto where we left off */ + switch (jsps->state) + { + case 0: /* general state. everything goes. */ + goto state0; + break; + case 1: /* parse string */ + goto state1; + break; + case 2: /* parse string: escaped character */ + goto state2; + break; + case 3: /* parse string: escaped unicode 1 */ + goto state3; + break; + case 4: /* parse string: escaped unicode 2 */ + goto state4; + break; + case 5: /* parse string: escaped unicode 3 */ + goto state5; + break; + case 6: /* parse string: escaped unicode 4 */ + goto state6; + break; + case 7: /* parse true: tr */ + goto state7; + break; + case 8: /* parse true: tru */ + goto state8; + break; + case 9: /* parse true: true */ + goto state9; + break; + case 10: /* parse false: fa */ + goto state10; + break; + case 11: /* parse false: fal */ + goto state11; + break; + case 12: /* parse false: fals */ + goto state12; + break; + case 13: /* parse false: false */ + goto state13; + break; + case 14: /* parse null: nu */ + goto state14; + break; + case 15: /* parse null: nul */ + goto state15; + break; + case 16: /* parse null: null */ + goto state16; + break; + case 17: /* parse number: 0 */ + goto state17; + break; + case 18: /* parse number: start fraccional part */ + goto state18; + break; + case 19: /* parse number: fraccional part */ + goto state19; + break; + case 20: /* parse number: start exponent part */ + goto state20; + break; + case 21: /* parse number: exponent part */ + goto state21; + break; + case 22: /* parse number: exponent sign part */ + goto state22; + break; + case 23: /* parse number: start negative */ + goto state23; + break; + case 24: /* parse number: decimal part */ + goto state24; + break; + case 25: /* open object */ + goto state25; + break; + case 26: /* close object/array */ + goto state26; + break; + case 27: /* sibling followup */ + goto state27; + break; + + default: /* oops... this should never be reached */ + return JSON_UNKNOWN_PROBLEM; + } + + state0: /* starting point */ + { + switch (c) + { + case '\x20': + case '\x09': + case '\x0A': + case '\x0D': /* JSON insignificant white spaces */ + break; + + case '\"': /* starting a string */ + jsps->string_length_limit_reached = 0; + jsps->state = 1; + break; + + case '{': + if (jsf->open_object != NULL) + jsf->open_object (); + jsps->state = 25; /*open object */ + break; + + case '}': + if (jsf->close_object != NULL) + jsf->close_object (); + jsps->state = 26; /* close object/array */ + break; + + case '[': + if (jsf->open_array != NULL) + jsf->open_array (); +/* jsps->state = 0; // redundant*/ + break; + + case ']': + if (jsf->close_array != NULL) + jsf->close_array (); + jsps->state = 26; /* close object/array */ + break; + + case 't': + jsps->state = 7; /* parse true: tr */ + break; + + case 'f': + jsps->state = 10; /* parse false: fa */ + break; + + case 'n': + jsps->state = 14; /* parse null: nu */ + break; + + case ':': + if (jsf->label_value_separator != NULL) + jsf->label_value_separator (); +/* jsps->state = 0; // redundant*/ + break; + + case ',': + if (jsf->sibling_separator != NULL) + jsf->sibling_separator (); + jsps->state = 27; /* sibling followup */ + break; + + case '0': + jsps->string_length_limit_reached = 0; + jsps->state = 17; /* parse number: 0 */ + if ((jsps->temp = rcs_create (5)) == NULL) + { + return JSON_MEMORY; + } + if (rcs_catc (((rcstring *) jsps->temp), '0') != RS_OK) + { + return JSON_MEMORY; + } + break; + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + jsps->string_length_limit_reached = 0; + jsps->state = 24; /* parse number: decimal */ + if ((jsps->temp = rcs_create (5)) == NULL) + { + return JSON_MEMORY; + } + if (rcs_catc (((rcstring *) jsps->temp), c) != RS_OK) + { + return JSON_MEMORY; + } + break; + + case '-': + jsps->string_length_limit_reached = 0; + jsps->state = 23; /* number: */ + jsps->temp = NULL; + if ((jsps->temp = rcs_create (5)) == NULL) + { + return JSON_MEMORY; + } + if (rcs_catc (((rcstring *) jsps->temp), '-') != RS_OK) + { + return JSON_MEMORY; + } + + break; + + default: + return JSON_ILLEGAL_CHARACTER; + break; + } + return JSON_OK; + } + + state1: /* parse string */ + { + switch (c) + { + case '\\': + if (!jsps->string_length_limit_reached) + { + if (rcs_length (((rcstring *) jsps->temp)) < JSON_MAX_STRING_LENGTH - 1) /* check if there is space for a two character escape sequence */ + { + if (rcs_catc (((rcstring *) jsps->temp), '\\') != RS_OK) + { + return JSON_MEMORY; + } + } + else + { + jsps->string_length_limit_reached = 1; + } + } + jsps->state = 2; /* parse string: escaped character */ + break; + + case '\"': /* end of string */ + if (((rcstring *) jsps->temp) != NULL) + { + jsps->state = 0; /* starting point */ + if (jsf->new_string != NULL) + jsf->new_string (((rcstring *) ((rcstring *) jsps->temp))->text); /*copied or integral? */ + rcs_free ((rcstring **) & jsps->temp); + } + else + return JSON_UNKNOWN_PROBLEM; + break; + + default: + if (!jsps->string_length_limit_reached) + { + if (rcs_length (((rcstring *) jsps->temp)) < JSON_MAX_STRING_LENGTH) /* check if there is space for a two character escape sequence */ + { + if (rcs_catc (((rcstring *) jsps->temp), c) != RS_OK) + { + return JSON_MEMORY; + } + } + else + { + jsps->string_length_limit_reached = 1; + } + } + break; + } + return JSON_OK; + } + + state2: /* parse string: escaped character */ + { + switch (c) + { + case '\"': + case '\\': + case '/': + case 'b': + case 'f': + case 'n': + case 'r': + case 't': + if (!jsps->string_length_limit_reached) + { + if (rcs_length (((rcstring *) jsps->temp)) < JSON_MAX_STRING_LENGTH) + { + if (rcs_catc (((rcstring *) jsps->temp), c) != RS_OK) + { + return JSON_MEMORY; + } + } + else + { + jsps->string_length_limit_reached = 1; + } + } + break; + + case 'u': + if (!jsps->string_length_limit_reached) + { + if (rcs_length (((rcstring *) jsps->temp)) < JSON_MAX_STRING_LENGTH - 4) + { + if (rcs_catc (((rcstring *) jsps->temp), 'u') != RS_OK) + { + return JSON_MEMORY; + } + } + else + { + jsps->string_length_limit_reached = 1; + } + } + jsps->state = 3; /* parse string: escaped unicode 1; */ + break; + + default: + return JSON_ILLEGAL_CHARACTER; + break; + } + return JSON_OK; + } + + state3: /* parse string: escaped unicode 1 */ + { + switch (c) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + if (!jsps->string_length_limit_reached) + { + if (rcs_length (((rcstring *) jsps->temp)) < JSON_MAX_STRING_LENGTH - 3) + { + if (rcs_catc (((rcstring *) jsps->temp), 'u') != RS_OK) + { + return JSON_MEMORY; + } + } + else + { + jsps->string_length_limit_reached = 1; + } + } + jsps->state = 4; /* parse string. escaped unicode 2 */ + break; + + default: + return JSON_ILLEGAL_CHARACTER; + } + return JSON_OK; + } + + state4: /* parse string: escaped unicode 2 */ + { + switch (c) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + if (!jsps->string_length_limit_reached) + { + if (rcs_length (((rcstring *) jsps->temp)) < JSON_MAX_STRING_LENGTH - 2) + { + if (rcs_catc (((rcstring *) jsps->temp), c) != RS_OK) + { + return JSON_MEMORY; + } + } + else + { + jsps->string_length_limit_reached = 1; + } + } + jsps->state = 5; /* parse string. escaped unicode 3 */ + break; + + default: + return JSON_ILLEGAL_CHARACTER; + } + return JSON_OK; + } + + state5: /* parse string: escaped unicode 3 */ + { + switch (c) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + if (!jsps->string_length_limit_reached) + { + if (rcs_length (((rcstring *) jsps->temp)) < JSON_MAX_STRING_LENGTH - 1) + { + if (rcs_catc (((rcstring *) jsps->temp), c) != RS_OK) + { + return JSON_MEMORY; + } + } + else + { + jsps->string_length_limit_reached = 1; + } + } + jsps->state = 6; /* parse string. escaped unicode 4 */ + break; + + default: + return JSON_ILLEGAL_CHARACTER; + } + return JSON_OK; + } + + state6: /* parse string: escaped unicode 4 */ + { + switch (c) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + if (!jsps->string_length_limit_reached) + { + if (rcs_length (((rcstring *) jsps->temp)) < JSON_MAX_STRING_LENGTH) + { + if (rcs_catc (((rcstring *) jsps->temp), c) != RS_OK) + { + return JSON_MEMORY; + } + } + else + { + jsps->string_length_limit_reached = 1; + } + } + jsps->state = 1; /* parse string */ + break; + + default: + return JSON_ILLEGAL_CHARACTER; + } + return JSON_OK; + } + + state7: /* parse true: tr */ + { + if (c != 'r') + { + return JSON_ILLEGAL_CHARACTER; + } + + jsps->state = 8; /* parse true: tru */ + return JSON_OK; + } + + state8: /* parse true: tru */ + { + if (c != 'u') + { + return JSON_ILLEGAL_CHARACTER; + } + + jsps->state = 9; /* parse true: true */ + return JSON_OK; + } + + state9: /* parse true: true */ + { + if (c != 'e') + { + return JSON_ILLEGAL_CHARACTER; + } + + jsps->state = 0; /* back to general state. */ + if (jsf->new_true != NULL) + jsf->new_true (); + return JSON_OK; + } + + state10: /* parse false: fa */ + { + if (c != 'a') + { + return JSON_ILLEGAL_CHARACTER; + } + + jsps->state = 11; /* parse true: fal */ + return JSON_OK; + } + + state11: /* parse false: fal */ + { + if (c != 'l') + { + return JSON_ILLEGAL_CHARACTER; + } + + jsps->state = 12; /* parse true: fals */ + return JSON_OK; + } + + state12: /* parse false: fals */ + { + if (c != 's') + { + return JSON_ILLEGAL_CHARACTER; + } + + jsps->state = 13; /* parse true: false */ + return JSON_OK; + } + + state13: /* parse false: false */ + { + if (c != 'e') + { + return JSON_ILLEGAL_CHARACTER; + } + + jsps->state = 0; /* general state. everything goes. */ + if (jsf->new_false != NULL) + jsf->new_false (); + return JSON_OK; + } + + state14: /* parse null: nu */ + { + if (c != 'u') + { + return JSON_ILLEGAL_CHARACTER; + } + + jsps->state = 15; /* parse null: nul */ + return JSON_OK; + } + + state15: /* parse null: nul */ + { + if (c != 'l') + { + return JSON_ILLEGAL_CHARACTER; + } + + jsps->state = 16; /* parse null: null */ + return JSON_OK; + } + + state16: /* parse null: null */ + { + if (c != 'l') + { + return JSON_ILLEGAL_CHARACTER; + } + + jsps->state = 0; /* general state. everything goes. */ + if (jsf->new_null != NULL) + jsf->new_null (); + return JSON_OK; + } + + state17: /* parse number: 0 */ + { + switch (c) + { + case '.': + if ((jsps->temp = rcs_create (5)) == NULL) + { + return JSON_MEMORY; + } + if (rcs_catc (((rcstring *) jsps->temp), '.') != RS_OK) + { + return JSON_MEMORY; + } + jsps->state = 18; /* parse number: fraccional part */ + break; + + case '\x20': + case '\x09': + case '\x0A': + case '\x0D': /* JSON insignificant white spaces */ + if (((rcstring *) jsps->temp) == NULL) + return JSON_MEMORY; + if (jsf->new_number != NULL) + { + jsf->new_number (((rcstring *) jsps->temp)->text); + } + rcs_free ((rcstring **) & jsps->temp); + + jsps->state = 0; + break; + + case '}': + if (((rcstring *) jsps->temp) == NULL) + return JSON_MEMORY; + if (jsf->new_number != NULL) + { + jsf->new_number (((rcstring *) jsps->temp)->text); + } + rcs_free ((rcstring **) & jsps->temp); + + if (jsf->open_object != NULL) + jsf->close_object (); + jsps->state = 26; /* close object/array */ + break; + + case ']': + + if (((rcstring *) jsps->temp) == NULL) + return JSON_MEMORY; + if (jsf->new_number != NULL) + { + jsf->new_number (((rcstring *) jsps->temp)->text); + } + rcs_free ((rcstring **) & jsps->temp); + + if (jsf->open_object != NULL) + jsf->close_array (); + jsps->state = 26; /* close object/array */ + break; + + case ',': + + if (((rcstring *) jsps->temp) == NULL) + return JSON_MEMORY; + if (jsf->new_number != NULL) + { + jsf->new_number (((rcstring *) jsps->temp)->text); + } + rcs_free ((rcstring **) & jsps->temp); + + if (jsf->open_object != NULL) + jsf->label_value_separator (); + jsps->state = 27; /* sibling followup */ + break; + + default: + return JSON_ILLEGAL_CHARACTER; + break; + } + + return JSON_OK; + } + + state18: /* parse number: start fraccional part */ + { + switch (c) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (!jsps->string_length_limit_reached) + { + if (rcs_length (((rcstring *) jsps->temp)) < JSON_MAX_STRING_LENGTH / 2) + { + if (rcs_catc (((rcstring *) jsps->temp), c) != RS_OK) + { + return JSON_MEMORY; + } + } + else + { + jsps->string_length_limit_reached = 1; + } + } + jsps->state = 19; /* parse number: fractional part */ + break; + + default: + return JSON_ILLEGAL_CHARACTER; + break; + } + return JSON_OK; + } + + state19: /* parse number: fraccional part */ + { + switch (c) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (!jsps->string_length_limit_reached) + { + if (rcs_length (((rcstring *) jsps->temp)) < JSON_MAX_STRING_LENGTH / 2) + { + if (rcs_catc (((rcstring *) jsps->temp), c) != RS_OK) + { + return JSON_MEMORY; + } + } + else + { + jsps->string_length_limit_reached = 1; + } + } +/* jsps->state = 19; // parse number: fractional part*/ + break; + + case 'e': + case 'E': + if (rcs_catc (((rcstring *) jsps->temp), c) != RS_OK) + { + return JSON_MEMORY; + } + + jsps->state = 20; /* parse number: start exponent part */ + break; + + + case '\x20': + case '\x09': + case '\x0A': + case '\x0D': /* JSON insignificant white spaces */ + + if (((rcstring *) jsps->temp) == NULL) + return JSON_MEMORY; + if (jsf->new_number != NULL) + { + jsf->new_number (((rcstring *) jsps->temp)->text); + } + rcs_free ((rcstring **) & jsps->temp); + + jsps->state = 0; + break; + + case '}': + + if (((rcstring *) jsps->temp) == NULL) + return JSON_MEMORY; + if (jsf->new_number != NULL) + { + jsf->new_number (((rcstring *) jsps->temp)->text); + } + rcs_free ((rcstring **) & jsps->temp); + + if (jsf->open_object != NULL) + jsf->close_object (); + jsps->state = 26; /* close object/array */ + break; + + case ']': + if (jsf->new_number != NULL) + { + if (((rcstring *) jsps->temp) == NULL) + return JSON_MEMORY; + jsf->new_number (((rcstring *) jsps->temp)->text); + rcs_free ((rcstring **) & jsps->temp); + } + else + { + rcs_free ((rcstring **) & jsps->temp); + jsps->temp = NULL; + } + if (jsf->open_object != NULL) + jsf->close_array (); + jsps->state = 26; /* close object/array */ + break; + + case ',': + + if (((rcstring *) jsps->temp) == NULL) + return JSON_MEMORY; + if (jsf->new_number != NULL) + { + jsf->new_number (((rcstring *) jsps->temp)->text); + } + rcs_free ((rcstring **) & jsps->temp); + + if (jsf->label_value_separator != NULL) + jsf->label_value_separator (); + jsps->state = 27; /* sibling followup */ + break; + + + default: + return JSON_ILLEGAL_CHARACTER; + break; + } + return JSON_OK; + } + + state20: /* parse number: start exponent part */ + { + switch (c) + { + case '+': + case '-': + jsps->string_length_limit_reached = 0; + if (rcs_catc (((rcstring *) jsps->temp), c) != RS_OK) + { + return JSON_MEMORY; + } + + jsps->state = 22; /* parse number: exponent sign part */ + break; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (!jsps->string_length_limit_reached) + { + if (rcs_length (((rcstring *) jsps->temp)) < JSON_MAX_STRING_LENGTH) + { + if (rcs_catc (((rcstring *) jsps->temp), c) != RS_OK) + { + return JSON_MEMORY; + } + + } + else + { + jsps->string_length_limit_reached = 1; + } + } + jsps->state = 21; /* parse number: exponent part */ + break; + + default: + return JSON_ILLEGAL_CHARACTER; + break; + } + return JSON_OK; + } + + state21: /* parse number: exponent part */ + { + switch (c) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (!jsps->string_length_limit_reached) + { + if (rcs_length (((rcstring *) jsps->temp)) < JSON_MAX_STRING_LENGTH) + { + if (rcs_catc (((rcstring *) jsps->temp), c) != RS_OK) + { + return JSON_MEMORY; + } + } + else + { + jsps->string_length_limit_reached = 1; + } + } +/* jsps->state = 21; // parse number: exponent part*/ + break; + + case '\x20': + case '\x09': + case '\x0A': + case '\x0D': /* JSON insignificant white spaces */ + + if (((rcstring *) jsps->temp) == NULL) + return JSON_MEMORY; + if (jsf->new_number != NULL) + { + jsf->new_number (((rcstring *) jsps->temp)->text); + } + rcs_free ((rcstring **) & jsps->temp); + + jsps->state = 0; + break; + + case '}': + if (((rcstring *) jsps->temp) == NULL) + return JSON_MEMORY; + if (jsf->new_number != NULL) + { + jsf->new_number (((rcstring *) jsps->temp)->text); + } + rcs_free ((rcstring **) & jsps->temp); + + if (jsf->open_object != NULL) + jsf->close_object (); + jsps->state = 26; /* close object */ + break; + + case ']': + if (jsf->new_number != NULL) + { + if (((rcstring *) jsps->temp) == NULL) + return JSON_MEMORY; + jsf->new_number (((rcstring *) jsps->temp)->text); + free ((rcstring *) jsps->temp); + jsps->temp = NULL; + } + else + { + free (((rcstring *) jsps->temp)); + jsps->temp = NULL; + } + if (jsf->open_object != NULL) + jsf->close_array (); + jsps->state = 26; /* close object/array */ + break; + + case ',': + if (jsf->new_number != NULL) + { + if (((rcstring *) jsps->temp) == NULL) + return JSON_MEMORY; + jsf->new_number (((rcstring *) jsps->temp)->text); + free (((rcstring *) jsps->temp)); + jsps->temp = NULL; + } + else + { + free ((rcstring *) jsps->temp); + jsps->temp = NULL; + } + if (jsf->label_value_separator != NULL) + jsf->label_value_separator (); + jsps->state = 27; /* sibling followup */ + break; + + default: + return JSON_ILLEGAL_CHARACTER; + break; + } + return JSON_OK; + } + + state22: /* parse number: start exponent part */ + { + switch (c) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (!jsps->string_length_limit_reached) + { + if (rcs_length (((rcstring *) jsps->temp)) < JSON_MAX_STRING_LENGTH) + { + rcs_catc (((rcstring *) jsps->temp), c); + } + else + { + jsps->string_length_limit_reached = 1; + } + } + jsps->state = 21; /* parse number: exponent part */ + break; + + default: + return JSON_ILLEGAL_CHARACTER; + break; + } + return JSON_OK; + } + + state23: /* parse number: start negative */ + { + switch (c) + { + case '0': + rcs_catc (((rcstring *) jsps->temp), c); + jsps->state = 17; /* parse number: 0 */ + break; + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (!jsps->string_length_limit_reached) + { + if (rcs_length (((rcstring *) jsps->temp)) < JSON_MAX_STRING_LENGTH / 2) + { + if ((jsps->temp = rcs_create (5)) == NULL) + { + return JSON_MEMORY; + } + if (rcs_catc (((rcstring *) jsps->temp), c) != RS_OK) + { + return JSON_MEMORY; + } + else + { + jsps->string_length_limit_reached = 1; + } + } + } + jsps->state = 24; /* parse number: start decimal part */ + break; + + default: + return JSON_ILLEGAL_CHARACTER; + break; + } + return JSON_OK; + } + + state24: /* parse number: decimal part */ + { + switch (c) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (!jsps->string_length_limit_reached) + { + if (rcs_length (((rcstring *) jsps->temp)) < JSON_MAX_STRING_LENGTH / 2) + { + if ((jsps->temp = rcs_create (5)) == NULL) + { + return JSON_MEMORY; + } + if (rcs_catc (((rcstring *) jsps->temp), c) != RS_OK) + { + return JSON_MEMORY; + } + } + else + { + jsps->string_length_limit_reached = 1; + } + } +/* jsps->state = 24; // parse number: decimal part*/ + break; + + case '.': + if ((jsps->temp = rcs_create (5)) == NULL) + { + return JSON_MEMORY; + } + if (rcs_catc (((rcstring *) jsps->temp), '.') != RS_OK) + { + return JSON_MEMORY; + } + + jsps->state = 18; /* parse number: start exponent part */ + break; + + case 'e': + case 'E': + if ((jsps->temp = rcs_create (5)) == NULL) + { + return JSON_MEMORY; + } + if (rcs_catc (((rcstring *) jsps->temp), c) != RS_OK) + { + return JSON_MEMORY; + } + + jsps->string_length_limit_reached = 0; /* reset to accept the exponential part */ + jsps->state = 20; /* parse number: start exponent part */ + break; + + case '\x20': + case '\x09': + case '\x0A': + case '\x0D': /* JSON insignificant white spaces */ + if (((rcstring *) jsps->temp) == NULL) + return JSON_MEMORY; + if (jsf->new_number != NULL) + { + jsf->new_number (((rcstring *) jsps->temp)->text); + } + rcs_free ((rcstring **) & jsps->temp); + + jsps->state = 0; + break; + + case '}': + if (((rcstring *) jsps->temp) == NULL) + return JSON_MEMORY; + if (jsf->new_number != NULL) + { + jsf->new_number (((rcstring *) jsps->temp)->text); + } + rcs_free ((rcstring **) & jsps->temp); + + if (jsf->open_object != NULL) + jsf->close_object (); + jsps->state = 26; /* close object/array */ + break; + + case ']': + if (((rcstring *) jsps->temp) == NULL) + return JSON_MEMORY; + if (jsf->new_number != NULL) + { + jsf->new_number (((rcstring *) jsps->temp)->text); + } + rcs_free ((rcstring **) & jsps->temp); + + if (jsf->open_object != NULL) + jsf->close_array (); + jsps->state = 26; /* close object/array */ + break; + + case ',': + if (((rcstring *) jsps->temp) == NULL) + return JSON_MEMORY; + if (jsf->new_number != NULL) + { + jsf->new_number (((rcstring *) jsps->temp)->text); + } + rcs_free ((rcstring **) & jsps->temp); + + if (jsf->label_value_separator != NULL) + jsf->label_value_separator (); + jsps->state = 27; /* sibling followup */ + break; + + default: + return JSON_ILLEGAL_CHARACTER; + break; + } + return JSON_OK; + } + + state25: /* open object */ + { + switch (c) + { + case '\x20': + case '\x09': + case '\x0A': + case '\x0D': /* JSON insignificant white spaces */ + break; + + case '\"': + jsps->temp = NULL; + jsps->state = 1; + break; + + case '}': + if (jsf->close_object != NULL) + jsf->close_object (); + jsps->state = 26; /* close object */ + break; + + default: + return JSON_ILLEGAL_CHARACTER; + break; + } + return JSON_OK; + } + + state26: /* close object/array */ + { + switch (c) + { + case '\x20': + case '\x09': + case '\x0A': + case '\x0D': /* JSON insignificant white spaces */ + break; + + case '}': + if (jsf->close_object != NULL) + jsf->close_object (); +/* jsp->state = 26; // close object*/ + break; + + case ']': + if (jsf->close_array != NULL) + jsf->close_array (); +/* jsps->state = 26; // close object/array*/ + break; + + case ',': + if (jsf->sibling_separator != NULL) + jsf->sibling_separator (); + jsps->state = 27; /* sibling followup */ + break; + + default: + return JSON_ILLEGAL_CHARACTER; + break; + } + return JSON_OK; + } + + state27: /* sibling followup */ + { + switch (c) + { + case '\x20': + case '\x09': + case '\x0A': + case '\x0D': /* JSON insignificant white spaces */ + break; + + case '\"': + jsps->state = 1; + jsps->temp = NULL; + break; + + case '{': + if (jsf->open_object != NULL) + jsf->open_object (); + jsps->state = 25; /*open object */ + break; + + case '[': + if (jsf->open_array != NULL) + jsf->open_array (); +/* jsps->state = 0; // redundant*/ + break; + + case 't': + jsps->state = 7; /* parse true: tr */ + break; + + case 'f': + jsps->state = 10; /* parse false: fa */ + break; + + case 'n': + jsps->state = 14; /* parse null: nu */ + break; + + case '0': + jsps->state = 17; /* parse number: 0 */ + if ((jsps->temp = rcs_create (5)) == NULL) + { + return JSON_MEMORY; + } + if (rcs_catc (((rcstring *) jsps->temp), '0') != RS_OK) + { + return JSON_MEMORY; + } + break; + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + jsps->state = 24; /* parse number: decimal */ + if ((jsps->temp = rcs_create (5)) == NULL) + { + return JSON_MEMORY; + } + if (rcs_catc (((rcstring *) jsps->temp), c) != RS_OK) + { + return JSON_MEMORY; + } + break; + + case '-': + jsps->state = 23; /* number: */ + if ((jsps->temp = rcs_create (5)) == NULL) + { + return JSON_MEMORY; + } + if (rcs_catc (((rcstring *) jsps->temp), '-') != RS_OK) + { + return JSON_MEMORY; + } + break; + + default: + return JSON_ILLEGAL_CHARACTER; + break; + } + return JSON_OK; + } + + return JSON_UNKNOWN_PROBLEM; +} + + +json_t * +json_find_first_label (const json_t * object, const char *text_label) +{ + json_t *cursor; + + assert (object != NULL); + assert (text_label != NULL); + assert (object->type == JSON_OBJECT); + + if (object->child == NULL) + return NULL; + cursor = object->child; + while (cursor != NULL) + { + if (strncmp (cursor->text, text_label, strlen (text_label)) == 0) + return cursor; + cursor = cursor->next; + } + return NULL; +} diff --git a/mjson/json.h b/mjson/json.h new file mode 100644 index 000000000..1f03aa523 --- /dev/null +++ b/mjson/json.h @@ -0,0 +1,304 @@ +/*************************************************************************** + * Copyright (C) 2007 by Rui Maciel * + * rui.maciel@gmail.com * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU Library General Public License as * + * published by the Free Software Foundation; either version 2 of the * + * License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU Library General Public * + * License along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +/** @file json.h A small library that helps deal with JSON-encoded information +\ingroup JSON + +\note error handling is only in a very rudimentary form. +\author Rui Maciel rui_maciel@users.sourceforge.net +\version v0.9 +*/ + +#include +#include + +#ifndef JSON_H +#define JSON_H + +#ifdef __cplusplus +extern "C" +{ +#endif + +#define JSON_MAX_STRING_LENGTH SIZE_MAX-1 + +/** +The descriptions of the json_value node type +**/ + enum json_value_type + { JSON_STRING = 0, JSON_NUMBER, JSON_OBJECT, JSON_ARRAY, JSON_TRUE, JSON_FALSE, JSON_NULL }; + + +/** +The error messages produced by the JSON parsers +**/ + enum json_error + { + JSON_OK = 1, /*!< everything went smoothly */ + JSON_INCOMPLETE_DOCUMENT, /*!< the parsed document didn't ended */ + JSON_WAITING_FOR_EOF, /*!< A complete JSON document tree was already finished but needs to get to EOF. Other characters beyond whitespaces produce errors */ + JSON_MALFORMED_DOCUMENT, /* the JSON document which was fed to this parser is malformed */ + JSON_INCOMPATIBLE_TYPE, /*!< the currently parsed type does not belong here */ + JSON_MEMORY, /*!< an error occurred when allocating memory */ + JSON_ILLEGAL_CHARACTER, /*!< the currently parsed character does not belong here */ + JSON_BAD_TREE_STRUCTURE, /*!< the document tree structure is malformed */ + JSON_MAXIMUM_LENGTH, /*!< the parsed string reached the maximum allowed size */ + JSON_UNKNOWN_PROBLEM /*!< some random, unaccounted problem occurred */ + }; + + +/** +The JSON document tree node, which is a basic JSON type +**/ + struct json_value + { + enum json_value_type type; /*!< the type of node */ + char *text; /*!< The text stored by the node. It stores UTF-8 strings and is used exclusively by the JSON_STRING and JSON_NUMBER node types */ + + /* FIFO queue data */ + struct json_value *next; /*!< The pointer pointing to the next element in the FIFO sibling list */ + struct json_value *previous; /*!< The pointer pointing to the previous element in the FIFO sibling list */ + struct json_value *parent; /*!< The pointer pointing to the parent node in the document tree */ + struct json_value *child; /*!< The pointer pointing to the first child node in the document tree */ + struct json_value *child_end; /*!< The pointer pointing to the last child node in the document tree */ + }; + + + typedef struct json_value json_t; + + +/** +The structure holding all information needed to resume parsing +**/ + struct json_parsing_info + { + unsigned int state; /*!< the state where the parsing was left on the last parser run */ + unsigned int lex_state; + void *lex_text; + char *p; + int string_length_limit_reached; /*!< flag informing if the string limit length defined by JSON_MAX_STRING_LENGTH was reached */ + json_t *cursor; /*!< pointers to nodes belonging to the document tree which aid the document parsing */ + }; + + +/** +The structure which holds the pointers to the functions that will be called by the saxy parser whenever their evens are triggered +**/ + struct json_saxy_functions + { + int (*open_object) (); + int (*close_object) (); + int (*open_array) (); + int (*close_array) (); + int (*new_string) (char * text); + int (*new_number) (char * text); + int (*new_true) (); + int (*new_false) (); + int (*new_null) (); + int (*label_value_separator) (); + int (*sibling_separator) (); + }; + + +/** +The structure holding the information needed for json_saxy_parse to resume parsing +**/ + struct json_saxy_parser_status + { + unsigned int state; /*!< current parser state */ + int string_length_limit_reached; /*!< flag informing if the string limit length defined by JSON_MAX_STRING_LENGTH was reached */ + void *temp; /*!< temporary string which will be used to build up parsed strings between parser runs. */ + }; + +/** +Creates a new JSON value and defines it's type +@param type the value's type +@return a pointer to the newly created value structure +**/ + json_t *json_new_value (const enum json_value_type type); + + +/** +Creates a new JSON string and defines it's text +@param text the value's text +@return a pointer to the newly created JSON string value +**/ + json_t *json_new_string (const char *text); + + +/** +Creates a new JSON number and defines it's text. The user is responsible for the number string's correctness +@param text the value's number +@return a pointer to the newly created JSON string value +**/ + json_t *json_new_number (const char *text); + + +/** +Creates a new JSON object +@return a pointer to the newly created JSON object value +**/ + json_t *json_new_object (void); + + +/** +Creates a new JSON array +@return a pointer to the newly created JSON array value +**/ + json_t *json_new_array (void); + + +/** +Creates a new JSON null +@return a pointer to the newly created JSON null value +**/ + json_t *json_new_null (void); + + +/** +Creates a new JSON true +@return a pointer to the newly created JSON true value +**/ + json_t *json_new_true (void); + + +/** +Creates a new JSON false +@return a pointer to the newly created JSON false value +**/ + json_t *json_new_false (void); + + +/** +Frees the memory appointed to the value fed as the parameter, as well as all the child nodes +@param value the root node of the tree being freed +**/ + void json_free_value (json_t ** value); + + +/** +Inserts a child node into a parent node, as well as performs some document tree integrity checks. +@param parent the parent node +@param child the node being added as a child to parent +@return the error code corresponding to the operation result +**/ + enum json_error json_insert_child (json_t * parent, json_t * child); + + +/** +Inserts a label:value pair into a parent node, as well as performs some document tree integrity checks. +@param parent the parent node +@param text_label a char string which serves as the label in the label:value pair +@param value the value in the label:value pair +@return the error code corresponding to the operation result +**/ + enum json_error json_insert_pair_into_object (json_t * parent, const char *text_label, json_t * value); + + +/** +Produces a JSON markup text document from a document tree +@param root The document's root node +@param text a pointer to a char string that will hold the JSON document text. +@return a json_error code describing how the operation went +**/ + enum json_error json_tree_to_string (json_t * root, char **text); + + +/** +Produces a JSON markup text document from a json_t document tree to a text stream +@param root The document's root node +@param text a pointer to a char string that will hold the JSON document text. +@return a json_error code describing how the operation went +**/ +/* enum json_error json_tree_to_file (json_t * root, FILE *file); */ + + +/** +Strips all JSON white spaces from the text string +@param text a char string holding a JSON document or document snippet +**/ + void json_strip_white_spaces (char *text); + + +/** +Formats a JSON markup text contained in the given string +@param text a JSON formatted document +@return a char string holding the formated document +**/ + char *json_format_string (char *text); + + +/** +Outputs a new UTF8 c-string which replaces all characters that must be escaped with their respective escaped versions +@param text an UTF8 char text string +@return an UTF-8 c-string holding the same text string but with escaped characters +**/ + char *json_escape (char * text); + + +/** +This function takes care of the tedious task of initializing any instance of +struct json_parsing_info +@param jpi a pointer to a struct json_parsing_info instance +**/ + void json_jpi_init (struct json_parsing_info *jpi); + + +/** +Produces a document tree sequentially from a JSON markup text fragment +@param info the information necessary to resume parsing any incomplete document +@param buffer a c-string containing a JSON document fragment +@return a code describing how the operation ended up +**/ + enum json_error json_parse_fragment (struct json_parsing_info *info, char *buffer); + + +/** +Produces a document tree from a JSON markup text string that contains a complete document +@param root a reference to a pointer to a json_t type. The function allocates memory to the passed pointer and sets up the value +@param text a c-string containing a complete JSON text document +@return a pointer to the new document tree or NULL if some error occurred +**/ + enum json_error json_parse_document (json_t **root, char *text); + + +/** +Function to perform a SAX-like parsing of any JSON document or document fragment that is passed to it +@param jsps a structure holding the status information of the current parser +@param jsf a structure holding the function pointers to the event functions +@param c the character to be parsed +@return a json_error code informing how the parsing went +**/ + enum json_error json_saxy_parse (struct json_saxy_parser_status *jsps, struct json_saxy_functions *jsf, char c); + + +/** +Searches through the object's children for a label holding the text text_label +@param object a json_value of type JSON_OBJECT +@param text_label the c-string to search for through the object's child labels +@return a pointer to the first label holding a text equal to text_label or NULL if there is no such label or if object has no children +**/ + json_t *json_find_first_label (const json_t * object, const char *text_label); + + +#ifdef __cplusplus +} +#endif +#endif diff --git a/mjson/json_helper.c b/mjson/json_helper.c new file mode 100644 index 000000000..1840f8373 --- /dev/null +++ b/mjson/json_helper.c @@ -0,0 +1,72 @@ +/* +* C Implementation: json_helper +* +* Description: +* +* +* Author: Rui Maciel , (C) 2007 +* +* Copyright: See COPYING file that comes with this distribution +* +*/ + +#include "json_helper.h" + +#include +#include + + +void +json_render_tree_indented (json_t * root, int level) +{ + int tab; + assert (root != NULL); + for (tab = 0; tab < level; tab++) + { + printf ("> "); + } + switch (root->type) + { + case JSON_STRING: + printf ("STRING: %s\n", root->text); + break; + case JSON_NUMBER: + printf ("NUMBER: %s\n", root->text); + break; + case JSON_OBJECT: + printf ("OBJECT: \n"); + break; + case JSON_ARRAY: + printf ("ARRAY: \n"); + break; + case JSON_TRUE: + printf ("TRUE:\n"); + break; + case JSON_FALSE: + printf ("FALSE:\n"); + break; + case JSON_NULL: + printf ("NULL:\n"); + break; + } + /* iterate through children */ + if (root->child != NULL) + { + json_t *ita, *itb; + ita = root->child; + while (ita != NULL) + { + json_render_tree_indented (ita, level + 1); + itb = ita->next; + ita = itb; + } + } +} + + +void +json_render_tree (json_t * root) +{ + assert (root != NULL); + json_render_tree_indented (root, 0); +} diff --git a/mjson/json_helper.h b/mjson/json_helper.h new file mode 100644 index 000000000..c3db0a406 --- /dev/null +++ b/mjson/json_helper.h @@ -0,0 +1,27 @@ +/*// C++ Interface: json_helper*/ +/*// Description:*/ +/*// Author: Rui Maciel , (C) 2007*/ +/*// Copyright: See COPYING file that comes with this distribution*/ + + +#ifndef JSON_HELPER_H +#define JSON_HELPER_H + +#include "json.h" + + +/** +Renders the tree structure where root is the tree's root, which can also be a tree branch. This function is used recursively by json_render_tree() +@param root the tree's root node (may be a child node) +@param level the indentation level (number of tabs) + **/ +void json_render_tree_indented (json_t * root, int level); + +/** +Renders the tree structure where root is the tree's root, which can also be a tree branch. +@param root the tree's root node (may be a child node) + **/ +void json_render_tree (json_t * root); + + +#endif diff --git a/mjson/rstring.c b/mjson/rstring.c new file mode 100644 index 000000000..77ac78d63 --- /dev/null +++ b/mjson/rstring.c @@ -0,0 +1,684 @@ +/*************************************************************************** + * Copyright (C) 2007 by Rui Maciel * + * rui.maciel@gmail.com * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU Library General Public License as * + * published by the Free Software Foundation; either version 2 of the * + * License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU Library General Public * + * License along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include "rstring.h" + +#include +#include +#include +#include + + +#define RSTRING_INCSTEP 3 + + +rwstring * +rws_create (size_t length) +{ + rwstring *rws; + rws = malloc (sizeof (rwstring)); /* allocates memory for a struct rwstring */ + if (rws == NULL) + return NULL; + + rws->text = calloc (length + 1, sizeof (wchar_t)); /* text[max] reserved for L'\0' */ + if (rws->text == NULL) + { + free (rws); + return NULL; + } + + rws->max = length; + return rws; +} + + +void +rws_free (rwstring ** rws) +{ + assert (rws != NULL); + if (*rws != NULL) + { + if ((*rws)->text != NULL) + { + free ((*rws)->text); + (*rws)->text = NULL; + } + free (*rws); + *rws = NULL; + } + +} + + +rstring_code +rws_resize (rwstring * rws, size_t length) +{ + wchar_t *temp; + assert (rws != NULL); + + temp = realloc (rws->text, sizeof (wchar_t) * (length + 1)); /* length plus L'\0' */ + if (temp == NULL) + { + free (rws); + return RS_MEMORY; + } + rws->text = temp; + rws->max = length; + rws->text[rws->max] = L'\0'; + return RS_OK; +} + + +rwstring * +rws_duplicate (rwstring * copied) +{ + rwstring *copy; + assert (copied != NULL); + + copy = rws_create (copy->max); + if (copy == NULL) + return NULL; + + wcsncpy (copy->text, copied->text, wcslen (copied->text)); + return copy; +} + + +size_t +rws_length (rwstring * rws) +{ + assert (rws != NULL); + return wcslen (rws->text); +} + + +rstring_code +rws_copyrws (rwstring * to, const rwstring * from) +{ + size_t from_length; + assert (from != NULL); + assert (to != NULL); + + from_length = wcslen (from->text); + /*TODO implement intelligent memory allocation */ + if (to->max < from_length) + { + if (rws_resize (to, from_length + 1) != RS_OK) + return RS_MEMORY; + } + wcsncpy (to->text, from->text, from_length); + to->text[from_length] = L'\0'; + return RS_OK; +} + + +rstring_code +rws_copywcs (rwstring * to, const wchar_t * from, const size_t length) +{ + assert (from != NULL); + assert (to != NULL); + + /*TODO implement intelligent memory allocation */ + if (to->max < length) + { + if (rws_resize (to, length + 1) != RS_OK) + return RS_MEMORY; + } + wcsncpy (to->text, from, length); + to->text[length] = L'\0'; + return RS_OK; +} + + +rstring_code +rws_catrws (rwstring * pre, const rwstring * pos) +{ + size_t pre_length, pos_length; + assert (pre != NULL); + assert (pos != NULL); + + pre_length = wcslen (pre->text); + pos_length = wcslen (pos->text); + if (pos == NULL) + return RS_OK; + + if (pre->max < pre_length + pos_length + 1) + { + if (rws_resize (pre, pre_length + pos_length + 1) != RS_OK) + return RS_MEMORY; + } + wcsncpy (pre->text + pre_length, pos->text, pos_length); + pre->text[pre_length + pos_length] = L'\0'; + return RS_OK; +} + + +rstring_code +rws_catrcs (rwstring * pre, const rcstring * pos) +{ + size_t utf8pos; + wchar_t wc; + char i; /* static loop counter */ + + assert (pre != NULL); + assert (pos != NULL); + + /* starting the conversion */ + utf8pos = 0; + + while (utf8pos < strlen (pos->text)) + { + if ((pos->text[utf8pos] & 0x80) == 0) + { + if (rws_catc (pre, pos->text[utf8pos++]) != RS_OK) + { + return RS_MEMORY; + } + } + else if ((pos->text[utf8pos] & 0xE0) == 0xC0) + { + wc = (pos->text[utf8pos++] & 0x1F) << 6; + if ((pos->text[utf8pos] & 0xC0) == 0x80) + { + wc |= (pos->text[utf8pos++] & 63); + + } + else + { /* Invalid utf8 string */ + return RS_UNKNOWN; /* malformed UTF8 string */ + } + if (rws_catwc (pre, wc) != RS_OK) + { + return RS_MEMORY; + } + } + else if ((pos->text[utf8pos] & 0xF0) == 0xE0) + { + wc = pos->text[utf8pos++] & 0xF << 12; + for (i = 1; i >= 0; i--) + { + if ((pos->text[utf8pos] & 0xC0) == 0x80) + { + wc &= pos->text[utf8pos++] & 0x3F << i; + } + else + { /* Invalid utf8 string */ + return RS_UNKNOWN; + } + } + if (rws_catwc (pre, wc) != RS_OK) + { + return RS_MEMORY; + } + + } + else if ((pos->text[utf8pos] & 0xF8) == 0xF0) + { + wc = pos->text[utf8pos++] & 0xF << 12; + for (i = 2; i >= 0; i--) + { + if ((pos->text[utf8pos] & 0xC0) == 0x80) + { + wc &= pos->text[utf8pos++] & 0x3F << i; + } + else + { /* Invalid utf8 string */ + return RS_UNKNOWN; + + } + } + if (rws_catwc (pre, wc) != RS_OK) + { + return RS_MEMORY; + } + + } + else if ((pos->text[utf8pos] & 0xFC) == 0xF8) + { + for (i = 3; i >= 0; i--) + { + if ((pos->text[utf8pos] & 0xC0) == 0x80) + { + wc &= pos->text[utf8pos++] & 0x3F << i; + } + else + { /* Invalid utf8 string */ + return RS_UNKNOWN; + + } + } + if (rws_catwc (pre, wc) != RS_OK) + { + return RS_MEMORY; + } + } + else if ((pos->text[utf8pos] & 0xFE) == 0xFC) + { + for (i = 4; i >= 0; i--) + { + if ((pos->text[utf8pos] & 0xC0) == 0x80) + { + wc &= pos->text[utf8pos++] & 0x3F << i; + } + else + { /* Invalid utf8 string */ + return RS_UNKNOWN; + } + } + if (rws_catwc (pre, wc) != RS_OK) + { + return RS_MEMORY; + } + } + else /* Invalid utf8 string */ + { + return RS_UNKNOWN; + } + } + + return RS_OK; +} + + +rstring_code +rws_catwcs (rwstring * pre, const wchar_t * pos, const size_t length) +{ + size_t pre_length; + + assert (pre != NULL); + assert (pos != NULL); + + pre_length = wcslen (pre->text); + + if (pre->max < pre_length + length) + { + if (rws_resize (pre, pre_length + length + 1) != RS_OK) + return RS_MEMORY; + } + wcsncpy (pre->text + pre_length, pos, length); + pre->text[pre_length + length] = L'\0'; + return RS_OK; +} + + +rstring_code +rws_catcs (rwstring * pre, const char *pos, const size_t length) +{ + size_t pre_length; + + assert (pre != NULL); + assert (pos != NULL); + + pre_length = wcslen (pre->text); + + if (pre->max < pre_length + length) + { + if (rws_resize (pre, pre_length + length + 1) != RS_OK) + return RS_MEMORY; + } + mbsrtowcs (pre->text + pre_length, &pos, length, NULL); + pre->text[pre_length + length] = L'\0'; + return RS_OK; +} + + +rstring_code +rws_catwc (rwstring * pre, const wchar_t c) +{ + size_t pre_length; + + assert (pre != NULL); + + pre_length = wcslen (pre->text); + if (pre->max <= pre_length) + { + pre->max += RSTRING_INCSTEP; + if (rws_resize (pre, pre->max) != RS_OK) + return RS_MEMORY; + } + pre->text[pre_length] = c; + pre->text[pre_length + 1] = L'\0'; + return RS_OK; +} + + +rstring_code +rws_catc (rwstring * pre, const char c) +{ + wchar_t newc; + + assert (pre != NULL); + mbtowc (&newc, &c, 1); + return rws_catwc (pre, newc); +} + + +rwstring * +rws_wrap (wchar_t * wcs) +{ + rwstring *wrapper; + + assert (wcs != NULL); + wrapper = malloc (sizeof (rwstring)); + if (wrapper == NULL) + return NULL; + wrapper->max = wcslen (wcs); + wrapper->text = wcs; + return wrapper; +} + + +wchar_t * +rws_unwrap (rwstring * rws) +{ + wchar_t *out; + assert (rws != NULL); + if (rws->text == NULL) + out = NULL; + else + out = realloc (rws->text, sizeof (wchar_t) * (wcslen (rws->text) + 1)); + free (rws); + return out; +} + + +rcstring * +rcs_create (size_t length) +{ + rcstring *rcs; + rcs = malloc (sizeof (rcstring)); /* allocates memory for a struct rcstring */ + if (rcs == NULL) + return NULL; + + rcs->max = length; + + rcs->text = calloc (rcs->max + 1, sizeof (char)); + if (rcs->text == NULL) + { + free (rcs); + return NULL; + } + + return rcs; +} + + +void +rcs_free (rcstring ** rcs) +{ + assert (rcs != NULL); + if (*rcs != NULL) + { + if ((*rcs)->text != NULL) + { + free ((*rcs)->text); + (*rcs)->text = NULL; + } + free (*rcs); + *rcs = NULL; + } + +} + + +rstring_code +rcs_resize (rcstring * rcs, size_t length) +{ + char *temp; + assert (rcs != NULL); + + temp = realloc (rcs->text, sizeof (char) * (length + 1)); /* length plus L'\0' */ + if (temp == NULL) + { + free (rcs); + return RS_MEMORY; + } + rcs->text = temp; + rcs->max = length; + rcs->text[rcs->max] = L'\0'; + return RS_OK; +} + + +rcstring * +rcs_duplicate (rcstring * copied) +{ + rcstring *copy; + assert (copied != NULL); + + copy = rcs_create (copy->max); + if (copy == NULL) + return NULL; + + strncpy (copy->text, copied->text, strlen (copied->text)); + return copy; +} + + +size_t +rcs_length (rcstring * rcs) +{ + /*TODO account for UTF8 */ + assert (rcs != NULL); + return strlen (rcs->text); +} + + +rstring_code +rcs_copyrcs (rcstring * to, const rcstring * from) +{ + size_t from_length; + assert (from != NULL); + assert (to != NULL); + + from_length = strlen (from->text); + /*TODO implement intelligent memory allocation */ + if (to->max < from_length) + { + if (rcs_resize (to, from_length + 1) != RS_OK) + return RS_MEMORY; + } + strncpy (to->text, from->text, from_length); + to->text[from_length] = '\0'; + return RS_OK; +} + + +rstring_code +rcs_copycs (rcstring * to, const char *from, const size_t length) +{ + assert (to != NULL); + + if (from == NULL) + return RS_OK; + + /*TODO implement intelligent memory allocation */ + if (to->max < length) + { + if (rcs_resize (to, length + 1) != RS_OK) + return RS_MEMORY; + } + strncpy (to->text, from, length); + to->text[length] = '\0'; + return RS_OK; +} + + +rstring_code +rcs_catrcs (rcstring * pre, const rcstring * pos) +{ + size_t pre_length, pos_length; + assert (pre != NULL); + assert (pos != NULL); + + pre_length = strlen (pre->text); + pos_length = strlen (pos->text); + + if (pre->max < pre_length + pos_length + 1) + { + if (rcs_resize (pre, pre_length + pos_length + 1) != RS_OK) + return RS_MEMORY; + } + strncpy (pre->text + pre_length, pos->text, pos_length); + pre->text[pre_length + pos_length] = '\0'; + return RS_OK; +} + + +rstring_code +rcs_catcs (rcstring * pre, const char *pos, const size_t length) +{ + size_t pre_length; + + assert (pre != NULL); + assert (pos != NULL); + + pre_length = strlen (pre->text); + + if (pre->max < pre_length + length) + { + if (rcs_resize (pre, pre_length + length + 5) != RS_OK) + return RS_MEMORY; + } + strncpy (pre->text + pre_length, pos, length); + pre->text[pre_length + length] = '\0'; + return RS_OK; +} + + +rstring_code +rcs_catwcs (rcstring * pre, const wchar_t * pos, const size_t length) +{ + size_t i; + rstring_code code; + assert (pre != NULL); + assert (pos != NULL); + + for (i = 0; i < length; i++) + { + code = rcs_catwc (pre, pos[i]); + if (code != RS_OK) + { + return code; + } + } + + return RS_OK; +} + + +rstring_code +rcs_catwc (rcstring * pre, const wchar_t wc) +{ + assert (pre != NULL); + /* convert wc to multi-byte UTF8 string and append the product */ + + if (wc <= 0x7F) + { + rcs_catc (pre, wc); + } + else if (wc <= 0x7FF) + { + rcs_catc (pre, (wc >> 6) | 192); + rcs_catc (pre, (wc & 63) | 128); + } + else if (wc <= 0xFFFF) + { + rcs_catc (pre, wc >> 12 | 224); + rcs_catc (pre, (wc >> 6 & 63) | 128); + rcs_catc (pre, (wc & 63) | 128); + } + else if (wc <= 0x1FFFFF) + { + rcs_catc (pre, wc >> 18 | 240); + rcs_catc (pre, (wc >> 12 & 63) | 128); + rcs_catc (pre, (wc >> 6 & 63) | 128); + rcs_catc (pre, (wc & 63) | 128); + } + else if (wc <= 0x3FFFFFF) + { + rcs_catc (pre, wc >> 24 | 248); + rcs_catc (pre, (wc >> 18 & 63) | 128); + rcs_catc (pre, (wc >> 12 & 63) | 128); + rcs_catc (pre, (wc >> 6 & 63) | 128); + rcs_catc (pre, (wc & 63) | 128); + } + else if (wc <= 0x7FFFFFFF) + { + rcs_catc (pre, wc >> 30 | 252); + rcs_catc (pre, (wc >> 24 & 63) | 128); + rcs_catc (pre, (wc >> 18 & 63) | 128); + rcs_catc (pre, (wc >> 12 & 63) | 128); + rcs_catc (pre, (wc >> 6 & 63) | 128); + rcs_catc (pre, (wc & 63) | 128); + } + return RS_OK; +} + + +rstring_code +rcs_catc (rcstring * pre, const char c) +{ + size_t pre_length; + + assert (pre != NULL); + + pre_length = strlen (pre->text); + if (pre->max <= pre_length) + { + pre->max += RSTRING_INCSTEP; + if (rcs_resize (pre, pre->max) != RS_OK) + return RS_MEMORY; + } + pre->text[pre_length] = c; + pre->text[pre_length + 1] = '\0'; + return RS_OK; +} + + +rcstring * +rcs_wrap (char *cs) +{ + rcstring *wrapper; + assert (cs != NULL); + + wrapper = malloc (sizeof (rcstring)); + if (wrapper == NULL) + return NULL; + wrapper->max = strlen (cs); + wrapper->text = cs; + return wrapper; +} + + +char * +rcs_unwrap (rcstring * rcs) +{ + char *out; + assert (rcs != NULL); + + if (rcs->text == NULL) + out = NULL; + else + out = realloc (rcs->text, sizeof (char) * (strlen (rcs->text) + 1)); + + free (rcs); + return out; +} diff --git a/mjson/rstring.h b/mjson/rstring.h new file mode 100644 index 000000000..2ce9be3ce --- /dev/null +++ b/mjson/rstring.h @@ -0,0 +1,262 @@ +/*************************************************************************** + * Copyright (C) 2007 by Rui Maciel * + * rui.maciel@gmail.com * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU Library General Public License as * + * published by the Free Software Foundation; either version 2 of the * + * License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU Library General Public * + * License along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include + +#ifndef RSTRING +#define RSTRING + +#ifdef __cplusplus +extern "C" +{ +#endif + + + struct rui_wstring + { + wchar_t *text; /* +#include +#endif + +void acceleratorInitialize(int sz, int nthreads) +{ + accelerator_initialize_(&sz); +} + +void acceleratorFinalize(void) +{ + accelerator_finalize_(); +#if defined(ACCELERATOR_CUDA_C) + cudaDeviceReset(); +#endif +} + +void acceleratorPrint(void) +{ +#if defined(ACCELERATOR_CUDA_C) + cudaError_t cuda_error; + int cuda_count; + cudaDeviceProp cuda_prop; + cuda_error = cudaGetDeviceCount(&cuda_count); + std::cout << "Found " << cuda_count << " CUDA GPUs." << std::endl; + for (int i = 0; i < cuda_count; i++) + { + cuda_error = cudaGetDeviceProperties(&cuda_prop, i); + std::cout << "Device " << i << ": " << cuda_prop.name << std::endl; + } +#else + ; +#endif +} diff --git a/src/Accelerator/Accelerator.hpp b/src/Accelerator/Accelerator.hpp new file mode 100644 index 000000000..8053191e6 --- /dev/null +++ b/src/Accelerator/Accelerator.hpp @@ -0,0 +1,14 @@ +#ifndef LSMS_ACCELERATOR_HPP +#define LSMS_ACCELERATOR_HPP + +void acceleratorInitialize(int sz, int nthreads); +void acceleratorFinalize(void); +void acceleratorPrint(void); + +extern "C" +{ +void accelerator_initialize_(int *sz); +void accelerator_finalize_(void); +} + +#endif diff --git a/src/Accelerator/CULA_Common.h b/src/Accelerator/CULA_Common.h new file mode 100644 index 000000000..9f671d499 --- /dev/null +++ b/src/Accelerator/CULA_Common.h @@ -0,0 +1,9 @@ + integer sizeof_Z,sizeof_I + parameter (sizeof_Z=16) + parameter (sizeof_I=8) + + integer devSZ +! integer*8 devA, devIPVT +! common /Accelerator_CULA/ devA,devIPVT,devSZ + common /Accelerator_CULA/ devSZ + diff --git a/src/Accelerator/DeviceArray3d.hpp b/src/Accelerator/DeviceArray3d.hpp new file mode 100755 index 000000000..ec0ebb322 --- /dev/null +++ b/src/Accelerator/DeviceArray3d.hpp @@ -0,0 +1,121 @@ +#ifndef LSMS_DEVICE_ARRAY3D_HPP +#define LSMS_DEVICE_ARRAY3D_HPP + +#include "Array3d.hpp" + + template + class DeviceArray3d { + public: + typedef size_t size_type; + + // The basic constructor builds an empty matrix, that needs to be resized before use. + __inline__ DeviceArray3d() : nRow(0), nCol(0), nSlice(0), lDim1(0), lDim2(0), lDim12(0), data(0), owner(0) {} + + __inline__ DeviceArray3d(Array3d& in): data(0) { + *this=in; + } + + __inline__ DeviceArray3d(size_type nRows,size_type nCols, size_type nSlices, size_type ldim1=0, size_type ldim2=0) { + nRow=nRows; nCol=nCols; nSlice=nSlices; lDim1=ldim1; lDim2=ldim2; lDim12=lDim1*lDim2; + if(ldim1; + // Finaly we need a destructor to free the memory allocated by the array. + __inline__ ~DeviceArray3d() { + free(); + } + + // ; + // We provide two methods to access the elements of a matrix. The most natural one uses |operator()| with row and collumn arguments and looks simimar to a matrix access in {\bf Fortran}. + __inline__ __device__ T& operator() (size_type i, size_type j, size_type k) { + return data[k*lDim12+j*lDim1+i]; + } + + // The second way to access the elements of a matrix uses the familair C |[]| operator and vies the |data| array as a continous block of memory. + __inline__ __device__ T& operator[](size_type i) { + return data[i]; + } + + // We provide a few functions to return information about the matrix. + __inline__ __host__ __device__ size_type size() const { return lDim12*nSlice; } + __inline__ __host__ __device__ T* raw() const { return data; } + __inline__ __host__ __device__ size_type n_row() const { return nRow; } + __inline__ __host__ __device__ size_type n_col() const { return nCol; } + __inline__ __host__ __device__ size_type n_slice() const {return nSlice;} + __inline__ __host__ __device__ size_type l_dim1() const { return lDim1; } + __inline__ __host__ __device__ size_type l_dim2() const { return lDim2;} + + // Assignments and copy: + __inline__ DeviceArray3d &operator=(Array3d& a) + { + copy_async(a,0); + return *this; + } + __inline__ void copy(Array3d &a) { + size_type curSize=lDim12*nSlice; + nRow=a.n_row(); nCol=a.n_col(); nSlice=a.n_slice(); lDim1=a.l_dim1(); lDim2=a.l_dim2(); lDim12=lDim1*lDim2; + size_type num_bytes=sizeof(T)*lDim12*nSlice; + + if(curSize!=lDim12*nSlice) { + if(nRow*nCol*nSlice>0) { + allocate(num_bytes); + } + else { nRow=0; nCol=0; nSlice=0; lDim1=0; lDim2=0; lDim12=0; data=0; } + } + cudaMemcpy(data,&a[0],num_bytes,cudaMemcpyHostToDevice); + } + + __inline__ void copy_async(Array3d &a, cudaStream_t s) { + size_type curSize=lDim12*nSlice; + nRow=a.n_row(); nCol=a.n_col(); nSlice=a.n_slice(); lDim1=a.l_dim1(); lDim2=a.l_dim2(); lDim12=lDim1*lDim2; + size_type num_bytes=sizeof(T)*lDim12*nSlice; + + if(curSize!=lDim12*nSlice) { + if(nRow*nCol*nSlice>0) { + allocate(num_bytes); + } + else { nRow=0; nCol=0; nSlice=0; lDim1=0; lDim2=0; lDim12=0; data=0; } + } + cudaMemcpyAsync(data,&a[0],num_bytes,cudaMemcpyHostToDevice,s); + } + + private: + size_type nRow,nCol,nSlice,lDim1,lDim2,lDim12; + T* data; + DeviceArray3d *owner; + + __inline__ void allocate(size_type num_bytes) { + if(num_bytes>0) { + free(); + owner=this; + cudaMalloc(&data,num_bytes); + cudaCheckError(); + } + else { // DANGEROUS!! Might cause memory leak! + nRow = 0; + nCol = 0; + nSlice = 0; + lDim1 = 0; + lDim2 = 0; + lDim12 = 0; + data = 0; + owner = 0; + } + } + __inline__ void free() { + if(owner==this && data!=0) { + cudaFree(data); + owner=0; + data=0; + } + } + }; + +#endif + diff --git a/src/Accelerator/DeviceMatrix.hpp b/src/Accelerator/DeviceMatrix.hpp new file mode 100755 index 000000000..7e23353e5 --- /dev/null +++ b/src/Accelerator/DeviceMatrix.hpp @@ -0,0 +1,118 @@ +#ifndef LSMS_DEVICE_MATRIX_HPP +#define LSMS_DEVICE_MATRIX_HPP + +#include "Matrix.hpp" +#include "cudaCheckError.hpp" +#include + template + struct DeviceMatrix { + public: + typedef size_t size_type; + __inline__ DeviceMatrix() : nRow(0), nCol(0), lDim(0), data(0), owner(0) {} + + __inline__ DeviceMatrix(Matrix& in) : data(0) { + *this=in; + } + + __inline__ DeviceMatrix(size_type nRows,size_type nCols,size_type ldim=0) : nRow(nRows), nCol(nCols), lDim(ldim) { + if(lDim; + // We provide two methods to access the lements of a matrix. The most natural one uses |operator()| with row and collumn arguments and looks simimar to a matrix access in {\bf Fortran}. + __inline__ __device__ T& operator() (size_type i, size_type j) { + return data[j*lDim+i]; + } + + // The second way to access the elements of a matrix uses the familair C |[]| operator and vies the |data| array as a continous block of memory. + __inline__ __device__ T& operator[](size_type i) { + return data[i]; + } + + __inline__ DeviceMatrix &operator=(Matrix& mat) { + //TODO BACK TO ASYNC + copy_async(mat,0); + cudaCheckError(); + return *this; + } + + __inline__ void copy(Matrix &mat) { + size_type curSize=lDim*nCol; + nRow=mat.n_row(); nCol=mat.n_col(); lDim=mat.l_dim(); + size_type num_bytes=sizeof(T)*lDim*nCol; + + printf("lDim: %d, nCol: %d, nRow: %d, num_bytes: %d, curSize: %d\n",lDim,nCol,nRow,num_bytes,curSize); + if(lDim*nCol!=curSize) { + if((nRow*nCol)>0) { + allocate(num_bytes); + } + else { free(); nRow=0; nCol=0; lDim=0; } + } + cudaMemcpy(data,&mat[0],num_bytes,cudaMemcpyHostToDevice); + } + + __inline__ void copy_async(Matrix &mat, cudaStream_t s) { + size_type curSize=lDim*nCol; + nRow=mat.n_row(); nCol=mat.n_col(); lDim=mat.l_dim(); + size_type num_bytes=sizeof(T)*lDim*nCol; + + if(lDim*nCol!=curSize) { + if(data!=0) free(); + if((nRow*nCol)>0) { + allocate(num_bytes); + } + else { nRow=0; nCol=0; lDim=0; data=0;} + } + cudaMemcpyAsync(data,&mat[0],num_bytes,cudaMemcpyHostToDevice,s); + } + + + // We provide a few functions to return information about the matrix. + __inline__ __host__ __device__ size_type size() const { return lDim*nCol; } + __inline__ __host__ __device__ T* raw() const { return data; } + __inline__ __host__ __device__ size_type n_row() const { return nRow; } + __inline__ __host__ __device__ size_type n_col() const { return nCol; } + __inline__ __host__ __device__ size_type l_dim() const { return lDim; } + + private: + size_type lDim; + size_type nRow,nCol; + + T* data; + DeviceMatrix *owner; + + __inline__ void allocate(size_type num_bytes) { + if(num_bytes>0) { + free(); + owner=this; + cudaMalloc(&data,num_bytes); + cudaCheckError(); + } + else { // DANGEROUS!! Might cause memory leak! + owner = 0; + data = 0; + nRow = 0; + nCol = 0; + lDim = 0; + } + } + __inline__ void free() { + if(owner==this && data!=0) { + cudaFree(data); + } + owner=0; + data=0; + } + }; + +#endif + diff --git a/src/Accelerator/DeviceStorage.cu b/src/Accelerator/DeviceStorage.cu new file mode 100644 index 000000000..0d40e7c9f --- /dev/null +++ b/src/Accelerator/DeviceStorage.cu @@ -0,0 +1,210 @@ +// -*- mode: c++; -*- + +#include +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" + +#include "DeviceMatrix.hpp" +#include "DeviceArray3d.hpp" +#include "DeviceVector.hpp" +#include "Main/SystemParameters.hpp" + +#include +#include +#include +#include +#ifdef _OPENMP +#include +#else +inline int omp_get_max_threads() {return 1;} +inline int omp_get_num_threads() {return 1;} +inline int omp_get_thread_num() {return 0;} +#endif + +// #include "cuda_error.h" +#include "cudaCheckError.hpp" + +using namespace std; + +//TODO move inside DeviceStorage? +//allocate a thread specific matrix on the host and pin its memory +extern "C" +Complex* get_host_m_(const int &max_nrmat_ns) { + static Complex * m_v=0; + static int cur_size=0; + static cudaError_t pinned; + + if(cur_size dev_tmat_store; + static bool initialized; +public: + static int allocate(int kkrsz_max,int nspin, int numLIZ, int _nThreads) + { + if(!initialized) + { + //printf("*************************************MEMORY IS BEING ALLOCATED\n"); + if(_nThreads>MAX_THREADS) + { + printf("nThreads (%d) in DeviceStorage::allocate exceeds MAX_THREADS (%d)\n",_nThreads,MAX_THREADS); + printf(" change MAX_THREADS in src/Accelerator/DeviceStorage.cu and recompile!\n"); + exit(1); + } + nThreads=_nThreads; + int N=kkrsz_max*nspin*numLIZ; + for(int i=0;i* getDevTmatStore() { return &dev_tmat_store; } +}; + +bool DeviceStorage::initialized = false; +Complex *DeviceStorage::dev_m[MAX_THREADS], *DeviceStorage::dev_bgij[MAX_THREADS], *DeviceStorage::dev_tmat_n[MAX_THREADS]; +int *DeviceStorage::dev_ipvt[MAX_THREADS]; +cublasHandle_t DeviceStorage::cublas_h[MAX_THREADS]; +cudaEvent_t DeviceStorage::event[MAX_THREADS]; +cudaStream_t DeviceStorage::stream[MAX_THREADS][2]; +DeviceMatrix DeviceStorage::dev_tmat_store; +int DeviceStorage::nThreads=1; +bool initialized; + + +/****************Fortran Interfaces*********************/ +extern "C" +Complex* get_dev_m_() { + return DeviceStorage::getDevM(); +} + +extern "C" +Complex* get_dev_bgij_() { + return DeviceStorage::getDevBGij(); +} + +extern "C" +Complex* get_dev_tmat_n_() { + return DeviceStorage::getDevTmatN(); +} + +extern "C" +int* get_dev_ipvt_() { + return DeviceStorage::getDevIpvt(); +} + +extern "C" +cudaStream_t get_stream_(const int &id) { + return DeviceStorage::getStream(id); +} + +extern "C" +cublasHandle_t get_cublas_handle_() { + return DeviceStorage::getCublasHandle(); +} + +//allocate a thread specific event +extern "C" +cudaEvent_t get_cuda_event_() { + return DeviceStorage::getEvent(); +} +/********************************************************/ + +DeviceMatrix* get_dev_tmat_store() { + return DeviceStorage::getDevTmatStore(); +} + +void *allocateDStore(void) +{ + return static_cast(new DeviceStorage); +} + +void freeDStore(void * d_store) +{ + static_cast(d_store)->free(); + delete static_cast(d_store); +} + +int initDStore(void * d_store,int kkrsz_max, int nspin, int numLIZ, int nthreads) +{ + return (*static_cast(d_store)).allocate(kkrsz_max,nspin,numLIZ,nthreads); +} + +void copyTmatStoreToDevice(LocalTypeInfo &local) { + DeviceMatrix &d_tmat_store=*get_dev_tmat_store(); + d_tmat_store.copy_async(local.tmatStore,0); +} diff --git a/src/Accelerator/DeviceStorage.hpp b/src/Accelerator/DeviceStorage.hpp new file mode 100644 index 000000000..50ab64ccf --- /dev/null +++ b/src/Accelerator/DeviceStorage.hpp @@ -0,0 +1,61 @@ +#ifndef LSMS_DEVICE_STORAGE_HPP +#define LSMS_DEVICE_STORAGE_HPP + +#include "Real.hpp" +#include "Complex.hpp" +#include + +#ifdef _OPENMP +#include +#else +inline int omp_get_max_threads() {return 1;} +inline int omp_get_num_threads() {return 1;} +inline int omp_get_thread_num() {return 0;} +#endif + +// #include "DeviceMatrix.hpp" + +template class DeviceMatrix; + +extern "C" Complex* get_dev_m_(); +extern "C" Complex* get_dev_bgij_(); +extern "C" Complex* get_dev_tmat_n_(); +extern "C" int* get_dev_ipvt_(); +extern "C" cudaStream_t get_stream_(const int &id); +extern "C" cublasHandle_t get_cublas_handle_(); +extern "C" cudaEvent_t get_cuda_event_(); +extern "C" Complex* get_host_m_(const int &max_nrmat_ns); + +static const int MAX_THREADS=16; +class DeviceStorage { +private: + static int nThreads; + static Complex *dev_m[MAX_THREADS], *dev_bgij[MAX_THREADS], *dev_tmat_n[MAX_THREADS]; + static int *dev_ipvt[MAX_THREADS]; + static cublasHandle_t cublas_h[MAX_THREADS]; + static cudaEvent_t event[MAX_THREADS]; + static cudaStream_t stream[MAX_THREADS][2]; + static DeviceMatrix dev_tmat_store; + static bool initialized; +public: + static int allocate(int kkrsz_max,int nspin, int numLIZ, int _nThreads); + static void free(); + + static Complex* getDevM() { return dev_m[omp_get_thread_num()]; } + static Complex* getDevBGij() { if(!initialized) {printf("DeviceStorage not initialized\n"); exit(1);} + return dev_bgij[omp_get_thread_num()]; } + static Complex* getDevTmatN() { return dev_tmat_n[omp_get_thread_num()]; } + static int* getDevIpvt() { return dev_ipvt[omp_get_thread_num()]; } + static cudaStream_t getStream(int i) { return stream[omp_get_thread_num()][i]; } + static cudaEvent_t getEvent() { return event[omp_get_thread_num()]; } + static cublasHandle_t getCublasHandle() { return cublas_h[omp_get_thread_num()]; } + static DeviceMatrix* getDevTmatStore() { return &dev_tmat_store; } +}; + +DeviceMatrix* get_dev_tmat_store(); + +void *allocateDStore(void); +void freeDStore(void * d_store); +int initDStore(void * d_store,int kkrsz_max, int nspin, int numLIZ, int nthreads); + +#endif diff --git a/src/Accelerator/DeviceVector.hpp b/src/Accelerator/DeviceVector.hpp new file mode 100755 index 000000000..84e8116c4 --- /dev/null +++ b/src/Accelerator/DeviceVector.hpp @@ -0,0 +1,90 @@ +// #include "cuda_error.h" +#ifndef LSMS_DEVICE_VECTOR_HPP +#define LSMS_DEVICE_VECTOR_HPP + +#include "cudaCheckError.hpp" +#include + + template + class DeviceVector { + public: + typedef size_t size_type; + __inline__ DeviceVector() : N(0), data(0), owner(0) {} + + __inline__ DeviceVector( std::vector& in): data(0) { + *this=in; + } + __inline__ DeviceVector( size_type size ) { + allocate(size*sizeof(T)); + } + + __inline__ ~DeviceVector() { + free(); + } + + __inline__ __device__ T& operator[](size_type i) { + return data[i]; + } + + __inline__ DeviceVector &operator=(const std::vector& in) { + copy_async(in,0); + return *this; + } + + __inline__ void copy(const std::vector& in) { + size_type N=in.size(); + size_type num_bytes=N*sizeof(T); + if(this->N!=N) { + this->N=N; + allocate(num_bytes); + } + cudaMemcpy(data,&in[0],num_bytes,cudaMemcpyHostToDevice); + cudaCheckError(); + } + + __inline__ void copy_async(const std::vector& in,cudaStream_t s) { + size_type N=in.size(); + size_type num_bytes=N*sizeof(T); + if(this->N!=N) { + this->N=N; + allocate(num_bytes); + } + cudaMemcpyAsync(data,&in[0],num_bytes,cudaMemcpyHostToDevice,s); + cudaCheckError(); + } + + // We provide a few functions to return information about the vector + __inline__ __host__ __device__ size_type size() const { return N; } + __inline__ __host__ __device__ T* raw() const { return data; } + + private: + __inline__ void allocate(size_type num_bytes) { + if(num_bytes>0) { + free(); + owner=this; + cudaMalloc(&data,num_bytes); + cudaCheckError(); + } + else { // DANGEROUS!! Might cause memory leak! + owner=0; + data=0; + N=0; + } + } + __inline__ void free() { + if(owner==this && data!=0) { + cudaFree(data); + cudaCheckError(); + owner=0; + data=0; + N=0; + } + } + + DeviceVector *owner; + size_type N; + T* data; + }; + +#endif + diff --git a/src/Accelerator/Makefile b/src/Accelerator/Makefile new file mode 100644 index 000000000..55b95d9c3 --- /dev/null +++ b/src/Accelerator/Makefile @@ -0,0 +1,58 @@ + +OBJ = accelerator_initialize.o accelerator_finalize.o accelerator_interface.o Accelerator.o \ + buildKKRMatrix_kernel_gpu.o buildKKRMatrix_gpu.o zblock_lu_cuda_c.o fortran.o inverse.o DeviceStorage.o + +all: libAccelerator.a + +%.o: %.F + $(F77) -c $(FFLAGS) $< -o $@ + +%.o: %.c + $(CC) -c $(CFLAGS) $(INC_PATH) $< -o $@ + +%.o: %.cpp + $(CXX) $(INC_PATH) -c $(CFLAGS) $< -o $@ + +buildKKRMatrix_gpu.o: buildKKRMatrix_gpu.cu +ifdef CUDA_CXX + $(CUDA_CXX) -c buildKKRMatrix_gpu.cu $(INC_PATH) -I. $(OPT) +else + $(CXX) -c no_gpu_buildKKRMatrix.cpp -o buildKKRMatrix_gpu.o +endif + +buildKKRMatrix_kernel_gpu.o: buildKKRMatrix_kernels.cu makebgij_device.hpp plglmax_device.hpp DeviceMatrix.hpp DeviceVector.hpp DeviceArray3d.hpp no_gpu_buildKKRMatrix.cpp +ifdef CUDA_CXX + $(CUDA_CXX) -c buildKKRMatrix_kernels.cu $(INC_PATH) -I. $(OPT) -o buildKKRMatrix_kernel_gpu.o +else + $(CXX) -c no_gpu_kernel_buildKKRMatrix.cpp -o buildKKRMatrix_kernel_gpu.o +endif + +zblock_lu_cuda_c.o: zblock_lu_cuda_c.cu +ifdef CUDA_CXX + $(CUDA_CXX) -c zblock_lu_cuda_c.cu $(INC_PATH) -I. -I $(MPICH_DIR)/include $(OPT) +else + touch zblock_lu_cuda_c.o +endif + +DeviceStorage.o: DeviceStorage.cu +ifdef CUDA_CXX + $(CUDA_CXX) -c DeviceStorage.cu $(INC_PATH) -I. $(OPT) +else + touch DeviceStorage.o +endif + +inverse.o: inverse.cu inverse.h operations.h +ifdef CUDA_CXX + $(CUDA_CXX) -c inverse.cu $(INC_PATH) -I. $(OPT) +else + touch inverse.o +endif + + +clean: + rm -f *.o *.a + +libAccelerator.a: $(OBJ) + $(AR) -r libAccelerator.a $(OBJ) + cp libAccelerator.a $(TOP_DIR)/lib + diff --git a/src/Accelerator/accelerator_finalize.F b/src/Accelerator/accelerator_finalize.F new file mode 100644 index 000000000..ade504ed8 --- /dev/null +++ b/src/Accelerator/accelerator_finalize.F @@ -0,0 +1,23 @@ + subroutine accelerator_finalize() + implicit none +#if defined(ACCELERATOR_CULA) || defined(ACCELERATOR_CUDA_C) + include 'CULA_Common.h' + +! call cublas_free(devA) +! call cublas_free(devIPVT) +#if defined(ACCELERATOR_CULA) || defined(CULA_FALLBACK) + call cula_shutdown() +#endif +#elif defined(ACCELERATOR_LIBSCI) +! external libsci_acc_finalize,cublas_shutdown +! integer cublas_shutdown,ierr +! call libsci_acc_finalize() +! ierr = cublas_shutdown() +! if (ierr.ne.0) then +! write(*,*)'CUBLAS_SHUTDOWN',0 +! endif +#else +! write(*,*) "UNKNOWN ACCLERATOR in accelerator_finalize()" +#endif + end subroutine + diff --git a/src/Accelerator/accelerator_initialize.F b/src/Accelerator/accelerator_initialize.F new file mode 100644 index 000000000..27857f227 --- /dev/null +++ b/src/Accelerator/accelerator_initialize.F @@ -0,0 +1,64 @@ + subroutine accelerator_initialize(sz) + implicit none + integer sz +#if defined(ACCELERATOR_CULA) || defined(ACCELERATOR_CUDA_C) + integer culaStatus, info, dev, minV, curV + character infostr(100) + + integer*8 get_dev_ipvt + integer*8 get_dev_a + + integer cula_initialize,cublas_alloc, + & cula_get_cuda_minimum_version, + & cula_get_cuda_runtime_version, + & cula_get_cuda_driver_version, + & cula_get_cublas_minimum_version, + & cula_get_cublas_runtime_version, + & cula_get_device_info, + & cula_get_executing_device + + include 'CULA_Common.h' + +#if defined(ACCELERATOR_CULA) || defined(CULA_FALLBACK) + culaStatus=cula_initialize() +! write(*,*) 'cula_initialize (',mynod,') = ',culaStatus + if (culaStatus.ne.0) then + write(*,*) 'cula_initialize = ',culaStatus + call cula_get_status_string() + endif + info = cula_get_executing_device(dev) + info = cula_get_device_info(dev, infostr, 100) + write(*,*) 'Accelerator found: ',infostr + !JL Available in R12 and up + !Check CUDA Version + minV = cula_get_cuda_minimum_version() + curV = cula_get_cuda_runtime_version() + if (curV.lt.minV) then + write(*,*)'CUDA Runtime ',minV,' required. Found ',curV + stop + endif + !Check Driver Version + curV = cula_get_cuda_driver_version() + if (curV.lt.minV) then + write(*,*)'CUDA Driver ',minV,' required. Found ',curV + stop + endif + !Check CUBLAS Version + minV = cula_get_cublas_minimum_version() + curv = cula_get_cublas_runtime_version() + if (curV.lt.minV) then + write(*,*)'CUBLAS ',minV,' required. Found ',curV + stop + endif +#endif +#elif defined(ACCELERATOR_LIBSCI) + external libsci_acc_init!,cublas_init +! integer cublas_init,ierr + call libsci_acc_init() +! ierr = cublas_init() +! if (ierr.ne.0) then +! write(*,*)'CUBLAS_INIT',0 +! endif +#endif +! write(*,*) "UNKNOWN ACCLERATOR in accelerator_init()" + end subroutine diff --git a/src/Accelerator/accelerator_interface.c b/src/Accelerator/accelerator_interface.c new file mode 100644 index 000000000..a6426c643 --- /dev/null +++ b/src/Accelerator/accelerator_interface.c @@ -0,0 +1,3 @@ +#if defined(ACCELERATOR_CULA) || defined(ACCELERATOR_CUDA_C) +#include "fortran.c" +#endif diff --git a/src/Accelerator/associatedLegendreTest.cu b/src/Accelerator/associatedLegendreTest.cu new file mode 100644 index 000000000..23d970eec --- /dev/null +++ b/src/Accelerator/associatedLegendreTest.cu @@ -0,0 +1,41 @@ +#include "associatedLegendreFunction.hpp" +#include "plglmax_device.hpp" + +#include +#include + +#define NDLM 28 +#define LMAX 3 + +__global__ void wrapAssociatedLegendre(double x, int lmax, double *plmOut) +{ + __shared__ double plm[NDLM]; + associatedLegendreFunctionNormalizedDevice(x,lmax,plm); + for ( int i = threadIdx.x; i <= LMAX; i += blockDim.x) + plmOut[i] = plm[i]; +} +int main() +{ + double costheta = 0.3; + int lmax = LMAX; + double plmC[NDLM]; + double *plmG = 0; + cudaMallocManaged(&plmG,NDLM * sizeof(double)); + + associatedLegendreFunctionNormalized(costheta,lmax,plmC); + + wrapAssociatedLegendre<<<1,1>>>(costheta,lmax,plmG); + cudaDeviceSynchronize(); + + for(int i = 0; i <= lmax; i++) + { + if(plmC[i] != plmG[i]) + { + fprintf(stderr, "%d: %lf != %lf\n", i, plmC[i], plmG[i]); + return -1; + } + } + + cudaFree(plmG); + return 0; +} diff --git a/src/Accelerator/buildKKRMatrix_gpu.cu b/src/Accelerator/buildKKRMatrix_gpu.cu new file mode 100755 index 000000000..c6d040552 --- /dev/null +++ b/src/Accelerator/buildKKRMatrix_gpu.cu @@ -0,0 +1,417 @@ +// -*- mode: c++; -*- + +#include +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" + +#include "DeviceMatrix.hpp" +#include "DeviceArray3d.hpp" +#include "DeviceVector.hpp" + +// #include "TestStructures.hpp" +#include "Misc/Indices.hpp" +#include "Main/SystemParameters.hpp" +#include "SingleSite/AtomData.hpp" +#include "Misc/Coeficients.hpp" + +#include + +#ifdef CRAYPAT +#include +#endif + +#include +#include +#include +#include +#ifdef _OPENMP +#include +#else +inline int omp_get_max_threads() {return 1;} +inline int omp_get_num_threads() {return 1;} +inline int omp_get_thread_num() {return 0;} +inline double omp_get_wtime() {return 0.0;} +#endif + +// #include "cuda_error.h" +#include "cudaCheckError.hpp" +#include "DeviceStorage.hpp" +//#define TRANSFER +//#define CHECK + +#include "buildKKRMatrix_gpu.hpp" + +using namespace std; + +extern "C" +{ + void write_kkrmat_(Complex *a,int *n,int *lda,Complex *e); + + void makegij_(int *lmaxi,int *kkri,int *lmaxj,int *kkrj, + int *lmax,int *kkrsz,int *ndlj,int *ndlm, + Complex *prel,double *rij,double *sinmp,double *cosmp, + double *clm,double *plm,double *cgnt,int *lmax_cg,int *lofk,int *mofk, + Complex *ilp1,Complex *illp, + Complex *hfn,Complex *dlm,Complex *gij, + double *pi4,int *iprint,char *istop,int len_sitop); + + void setgij_(Complex *gij,Complex *bgij,int *kkr1,int *kkr1_ns,int *kkr2,int *kkr2_ns, + int *n_spin_cant,int *nrel_rel,Complex *psq,Complex *energy); + +}; + +void setDiagonal_cuda(Complex *m, int rows, int lda, cudaStream_t s ); +void makeTmat_cuda_batched(DeviceVector &LIZStoreIdx, DeviceVector &LIZlmax, int iie, int blkSizeTmatStore, DeviceMatrix &tmat_store, int n_spin_cant, int numLIZ, int kkr1, int kkrsz, Complex *tmat_n, cudaStream_t s); +void makeBGijs_cuda_batched(int numLIZ, int ndlj, int ndlm, int lmax, int gntlmax, int kkrsz, int nspin, Complex prel, Complex energy, + DeviceVector &LIZlmax, DeviceMatrix &LIZPos, DeviceVector &clm, DeviceArray3d &cgnt, + DeviceVector &lofk, DeviceVector &mofk, DeviceVector &ilp1, DeviceMatrix &illp, + Complex *bgij, cudaStream_t s); +void zgemm_cuda_batched(int numLIZ, int kkrsz, int nspin, int nrmat_ns, cublasHandle_t &cublas_h, Complex* a, Complex *b, Complex *c, cudaStream_t s); + + +ostream& operator<<(ostream& out, const Complex &c) { + out << "( " << c.real() << " , " << c.imag() << " )"; + return out; +} + +/* +//Instantiate this once, use the = operator from their host counterparts after the host has valid data. Then leave them on the device, pass into kernels as necessary +class DeviceConstants { + public: + //DeviceConstants() : LIZStoreIdx(0), LIZlmax(0), clm(0), lofk(0), mofk(0), ilp1(0), LIZPos(0,0), illp(0,0), cgnt(0,0,0) { } + + //~DeviceConstants() { } + + DeviceVector LIZStoreIdx; + DeviceVector LIZlmax; + DeviceVector clm; + DeviceVector lofk; + DeviceVector mofk; + DeviceVector ilp1; + DeviceMatrix LIZPos; + DeviceMatrix illp; + DeviceArray3d cgnt; +}; +*/ + +void *allocateDConst(void) +{ + return static_cast(new DeviceConstants); +} + +void freeDConst(void * d_const) +{ + delete static_cast(d_const); +} + +#if defined(CHECK) || defined(MAKE_BGIJ_CPU) + //test function for comparing two arrays within a tolerance + template + void checkResults(T* host, T* dev, unsigned int num, string where, double tol) { + T* tmp=new T[num]; + cudaDeviceSynchronize(); + cudaCheckError(); + cudaMemcpy(tmp,dev,sizeof(T)*num,cudaMemcpyDeviceToHost); + + cudaCheckError(); + int count=0, max_count=10; + for(int i=0;itol) { + cout << where << ": Error at index " << i << " host(" << host[i] << ") device(" << tmp[i] << ")\n"; + count++; + } + if(count>max_count) + exit(1); + } + + if(count!=0) + exit(1); + + cout << where << " passed\n"; + delete [] tmp; + } + + + //host side function for comparison + void initializeM(Matrix &m, int nrmat_ns ) { + for(int i=0; i &m ) { + int ncst=0; + //Todo combine into a single zgemm call + for(int ir2=0; ir2(d_const)); +} + +void printDeviceComplex(char* where, Complex* val) { + Complex h; + cudaMemcpy(&h,val,sizeof(Complex),cudaMemcpyDeviceToHost); + printf("**********************%s: %lg, %lg\n",where,h.real(),h.imag()); +} +void buildKKRMatrix_gpu(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, Complex energy, Complex prel, int iie, Matrix &m, DeviceConstants &d_const) +{ + int lmax=lsms.maxlmax; + int kkrsz=(lmax+1)*(lmax+1); + int nrmat_ns=lsms.n_spin_cant*atom.nrmat; + +#if defined(CHECK) || defined(MAKE_BGIJ_CPU) + /******************************************** + * Host pointers + * *****************************************/ + Complex *gij = new Complex[kkrsz*kkrsz*atom.numLIZ]; //Replicating for parallelism + memset(gij,0,kkrsz*kkrsz*atom.numLIZ*sizeof(Complex)); + Complex *bgij = new Complex[4*kkrsz*kkrsz*atom.numLIZ]; //Replicating for parallelism + Complex *tmat_n = new Complex[atom.kkrsz*atom.kkrsz*4]; + cudaHostRegister(gij,sizeof(Complex)*kkrsz*kkrsz*atom.numLIZ,0); + cudaHostRegister(bgij,sizeof(Complex)*4*kkrsz*kkrsz*atom.numLIZ,0); + cudaHostRegister(tmat_n,sizeof(Complex)*atom.kkrsz*atom.kkrsz*4,0); + cudaDeviceSynchronize(); //syncing to make sure the timing below is accurate +#endif + + cublasHandle_t cublas_h=get_cublas_handle_(); + cudaStream_t stream=get_stream_(0); + cudaEvent_t done_event=get_cuda_event_(); + + /******************************************** + * Device arrays + * *****************************************/ + Complex *dev_m, *dev_bgij, *dev_tmat_n; + dev_m=(Complex*)get_dev_m_(); + dev_bgij=(Complex*)get_dev_bgij_(); + dev_tmat_n=get_dev_tmat_n_(); + + +/*********************************************************************************************************/ + DeviceMatrix &d_tmat_store=*get_dev_tmat_store(); + +#ifdef CHECK + checkResults(&local.tmatStore[0],d_tmat_store.raw(), d_tmat_store.size(), "TMAT STORE", 0); + checkResults(&atom.LIZStoreIdx[0], d_const.LIZStoreIdx.raw(), d_const.LIZStoreIdx.size(), "LIZStoreIDX", 0); + checkResults(&atom.LIZlmax[0], d_const.LIZlmax.raw(), d_const.LIZlmax.size(), "LIZlmax", 0); +#endif + + + + cudaCheckError(); + unsigned long long flops=0; + int kkrsz_ns=kkrsz*lsms.n_spin_cant; + + //batch makeTmat + makeTmat_cuda_batched(d_const.LIZStoreIdx, d_const.LIZlmax, iie, local.blkSizeTmatStore, d_tmat_store, lsms.n_spin_cant, atom.numLIZ, kkrsz, kkrsz, dev_tmat_n,stream); +#ifdef MAKE_BGIJ_CPU + // JLARKIN - It appears that makeBGijs_cuda_batched may have a bug, this can + // instead be constructed on the host. WAR + // loop over LIZ to make each gij + for(int ir1=0; ir1 &m, void *d_const) +{ + buildKKRMatrix_gpu(lsms, local, atom, energy, prel, iie, m, + *static_cast(d_const)); +} + diff --git a/src/Accelerator/buildKKRMatrix_gpu.hpp b/src/Accelerator/buildKKRMatrix_gpu.hpp new file mode 100755 index 000000000..00445d9f3 --- /dev/null +++ b/src/Accelerator/buildKKRMatrix_gpu.hpp @@ -0,0 +1,48 @@ +// -*- mode: c++; -*- + +#ifndef BUILDKKRMATRIX_GPU_H +#define BUILDKKRMATRIX_GPU_H + +#include +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" + +#include "DeviceMatrix.hpp" +#include "DeviceArray3d.hpp" +#include "DeviceVector.hpp" + +// #include "TestStructures.hpp" +#include "Misc/Indices.hpp" +#include "Main/SystemParameters.hpp" +#include "SingleSite/AtomData.hpp" +#include "Misc/Coeficients.hpp" + +//Instantiate this once, use the = operator from their host counterparts after the host has valid data. Then leave them on the device, pass into kernels as necessary +class DeviceConstants { + public: +// DeviceConstants() { } +// ~DeviceConstants() { } + + DeviceVector LIZStoreIdx; + DeviceVector LIZlmax; + DeviceVector clm; + DeviceVector lofk; + DeviceVector mofk; + DeviceVector ilp1; + DeviceMatrix LIZPos; + DeviceMatrix illp; + DeviceArray3d cgnt; +}; + + +void *allocateDConst(void); +void freeDConst(void * d_store); + +void setupForBuildKKRMatrix_gpu(LSMSSystemParameters &lsms, AtomData &atom,DeviceConstants &d_const); +void setupForBuildKKRMatrix_gpu_opaque(LSMSSystemParameters &lsms, AtomData &atom, void *d_const); + +void buildKKRMatrix_gpu(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, Complex energy, Complex prel, int iie, Matrix &m, DeviceConstants &d_const); +void buildKKRMatrix_gpu_opaque(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, Complex energy, Complex prel, int iie, Matrix &m, void *d_const); + +#endif diff --git a/src/Accelerator/buildKKRMatrix_kernels.cu b/src/Accelerator/buildKKRMatrix_kernels.cu new file mode 100755 index 000000000..a7c6c0e30 --- /dev/null +++ b/src/Accelerator/buildKKRMatrix_kernels.cu @@ -0,0 +1,299 @@ +// -*- mode: c++; -*- + +#include +#include +#include "cudaDoubleComplex.hpp" + +#include +#include +#ifdef _OPENMP +#include +#else +inline int omp_get_max_threads() {return 1;} +inline int omp_get_num_threads() {return 1;} +inline int omp_get_thread_num() {return 0;} +#endif +#include +#include +#include +using namespace std; + +#define MAX_BLOCKS 512 //This gives 32 blocks an SM which should be plenty to keep batched the SM's busy +#define NUM_BLOCKS(N,NUM_THREADS) min( (N+NUM_THREADS-1)/NUM_THREADS, MAX_BLOCKS ) + +#include "cudaCheckError.hpp" + +template +__global__ void cudaMemset_kernel(T* mem, T val, int N) { + for(int idx=blockIdx.x*blockDim.x+threadIdx.x; idx +__inline__ void cudaMemset_custom(T* mem, const T val, int N, cudaStream_t s) { + int num_threads=256; + int num_blocks=NUM_BLOCKS(N,num_threads); + cudaMemset_kernel<<>>(mem,val,N); +} + +//initialize the diagonal of a matrix +__global__ +void setDiagonal_kernel(cudaDoubleComplex *m, cudaDoubleComplex v, int rows, int lda) { + for(int idx=blockIdx.x*blockDim.x+threadIdx.x;idx>>((cudaDoubleComplex*)m,v,rows,lda); + cudaCheckError(); +} + +__global__ void clearM00_kernel(cudaDoubleComplex *m, cudaDoubleComplex v, int blk_sz, int lda) +{ + int off=blockIdx.x*lda; + for(int i=0; i>>((cudaDoubleComplex *)m,v,blk_sz,lda); + cudaCheckError(); +} + +//copy the matrix from tmat_store into tmat_n +__global__ +void makeTmat_batched_kernel(int* atom_liz_store_idx, int* LIZlmax, cudaDoubleComplex* tmat_store, int lDimTmatStore, int n_spin_cant, int kkrsz, cudaDoubleComplex *tmat_n) { + //x,y,z,w + int ir1=blockIdx.y; + int kkr1=(LIZlmax[ir1]+1)*(LIZlmax[ir1]+1); + int xdim=kkr1; + int ydim=xdim*n_spin_cant; + int zdim=ydim*kkr1; + int N=zdim*n_spin_cant; + + tmat_n+=4*kkrsz*kkrsz*ir1; + + for(int idx=blockIdx.x*blockDim.x+threadIdx.x;idx &LIZStoreIdx, DeviceVector &LIZlmax, int iie, int blkSizeTmatStore, DeviceMatrix &tmat_store, int n_spin_cant, int numLIZ, int kkr1, int kkrsz, Complex *tmat_n, cudaStream_t s) { + dim3 threads,blocks; + threads.x=kkrsz; + threads.y=n_spin_cant; + threads.z=kkrsz; + blocks.x=n_spin_cant; + blocks.y=numLIZ; + int blk_offset=iie*blkSizeTmatStore; + + makeTmat_batched_kernel<<>>(LIZStoreIdx.raw(), LIZlmax.raw(), (cudaDoubleComplex*)tmat_store.raw()+blk_offset, tmat_store.l_dim(), n_spin_cant, kkr1, kkrsz, (cudaDoubleComplex*)tmat_n); + cudaCheckError(); +} + +//helper class specifying the shared memory size we need to for makeGBijs +//Note: the order of these appear to affect the compiler. This order appears to work but other orders may crash! +class SM_sizes { + public: + int hfn_off; + int dlm_off; + int sinmp_off; + int cosmp_off; + int plm_off; + int total; + SM_sizes (int lmax, int ndlm, int ndlj) { + int hfn_size=(2*lmax+1)*sizeof(cudaDoubleComplex)*2; + int dlm_size=ndlj*sizeof(cudaDoubleComplex); + int sinmp_size=(2*lmax+1)*sizeof(double); + int cosmp_size=(2*lmax+1)*sizeof(double); + int plm_size=ndlm*sizeof(double); + + hfn_off=0; + dlm_off=hfn_off+hfn_size; + sinmp_off=dlm_off+dlm_size; + cosmp_off=sinmp_off+sinmp_size; + plm_off=cosmp_off+cosmp_size; + total=plm_off+plm_size; + } +}; + +#include "makebgij_device.hpp" + +//constructs a batch of B matrices. +__global__ +void +__launch_bounds__(128, 8) +makeBGijs_kernel_batched(SM_sizes sm, int kkrsz, int maxlmax, int ndlj, int ndlm, int nspin, cudaDoubleComplex prel, cudaDoubleComplex energy, + DeviceMatrix LIZPos, DeviceVector LIZlmax, DeviceVector clm, DeviceArray3d cgnt, + int gntlmax, DeviceVector lofk, DeviceVector mofk, cudaDoubleComplex* ilp1, DeviceMatrix illp, cudaDoubleComplex *bgij) { + + extern char __shared__ sm_mem[]; + double* sinmp=(double*)(sm_mem+sm.sinmp_off); + double* cosmp=(double*)(sm_mem+sm.cosmp_off); + double* plm=(double*)(sm_mem+sm.plm_off); + cudaDoubleComplex* hfn=(cudaDoubleComplex*)(sm_mem+sm.hfn_off); + cudaDoubleComplex* dlm=(cudaDoubleComplex*)(sm_mem+sm.dlm_off); + + int ir1=blockIdx.y; + int ir2=blockIdx.x; + + if(ir1!=ir2) { + //advance bgij to this block + bgij+=gridDim.x*4*kkrsz*kkrsz*ir1 + 4*kkrsz*kkrsz*ir2; + + double rij[3]; + + rij[0]=LIZPos(0,ir1)-LIZPos(0,ir2); + rij[1]=LIZPos(1,ir1)-LIZPos(1,ir2); + rij[2]=LIZPos(2,ir1)-LIZPos(2,ir2); + + int kkr1=(LIZlmax[ir1]+1)*(LIZlmax[ir1]+1); + int kkr2=(LIZlmax[ir2]+1)*(LIZlmax[ir2]+1); + Real pi4=4.0*2.0*std::asin(1.0); + + makebgij_device(LIZlmax[ir1],kkr1,LIZlmax[ir2],kkr2,maxlmax,kkrsz,ndlj,ndlm, nspin, + prel,rij,sinmp,cosmp,clm.raw(),plm,cgnt,gntlmax,lofk.raw(),mofk.raw(), ilp1,illp,hfn,dlm,bgij, pi4); + } +} + +void makeBGijs_cuda_batched(int numLIZ, int ndlj, int ndlm, int lmax, int gntlmax, int kkrsz, int nspin, Complex prel, Complex energy, + DeviceVector &LIZlmax, DeviceMatrix &LIZPos, DeviceVector &clm, DeviceArray3d &cgnt, + DeviceVector &lofk, DeviceVector &mofk, DeviceVector &ilp1, DeviceMatrix &illp, + Complex *bgij, cudaStream_t s) { + + cudaDoubleComplex pr=cudaDoubleComplex(prel.real(),prel.imag()); + cudaDoubleComplex e=cudaDoubleComplex(energy.real(),energy.imag()); + int num_threads=128; + dim3 num_blocks; + //1 block per atom + num_blocks.x=numLIZ; + num_blocks.y=numLIZ; + + SM_sizes sm(lmax,ndlm,ndlj); + DeviceMatrix *illp_hack=(DeviceMatrix*)&illp; + + const cuDoubleComplex czero=make_cuDoubleComplex(0.0,0.0); + cudaMemset_custom((cuDoubleComplex*)bgij, czero , 4*kkrsz*kkrsz*numLIZ*numLIZ, s); + cudaCheckError(); + + //cudaFuncSetCacheConfig(makeBGijs_kernel,cudaFuncCachePreferL1); + makeBGijs_kernel_batched<<>>(sm,kkrsz,lmax,ndlj,ndlm,nspin,pr,e,LIZPos,LIZlmax,clm,cgnt,gntlmax,lofk,mofk,(cudaDoubleComplex*)ilp1.raw(),*illp_hack, (cudaDoubleComplex*)bgij); + cudaCheckError(); +} + +//computes C = A * B, with N=kkr1_ns M=kkr2_ns, K=nrmat_ns +void zgemm_cuda_batched(int numLIZ, int kkrsz, int nspin, int nrmat_ns, cublasHandle_t &cublas_h, Complex* a, Complex *b, Complex *c, cudaStream_t s) { + + int kkrsz_ns=kkrsz*nspin; + //save old stream + cudaStream_t old; + cublasGetStream(cublas_h,&old); + //set cublas stream + cublasSetStream(cublas_h,s); + const cuDoubleComplex cmone=make_cuDoubleComplex(-1.0,0.0); + const cuDoubleComplex czero=make_cuDoubleComplex(0.0,0.0); + + //create batches + static vector h_av[16], h_bv[16], h_cv[16]; + + vector &h_a=h_av[omp_get_thread_num()]; + vector &h_b=h_bv[omp_get_thread_num()]; + vector &h_c=h_cv[omp_get_thread_num()]; + + static bool initialized[16]={0}; + + if(!initialized[omp_get_thread_num()]) { + h_a.resize(numLIZ); + h_b.resize(numLIZ); + h_c.resize(numLIZ); + + cudaHostRegister(&h_a[0],h_a.size()*sizeof(cuDoubleComplex*),0); + cudaHostRegister(&h_b[0],h_b.size()*sizeof(cuDoubleComplex*),0); + cudaHostRegister(&h_c[0],h_c.size()*sizeof(cuDoubleComplex*),0); + initialized[omp_get_thread_num()]=true; + } + + for(int i=0;i(a)+4*kkrsz*kkrsz*i; + h_b[i]=reinterpret_cast(b)+4*kkrsz*kkrsz*numLIZ*i; + h_c[i]=reinterpret_cast(c)+kkrsz*nspin*i; + } + + static DeviceVector d_av[16], d_bv[16], d_cv[16]; + + DeviceVector &d_a=d_av[omp_get_thread_num()]; + DeviceVector &d_b=d_bv[omp_get_thread_num()]; + DeviceVector &d_c=d_cv[omp_get_thread_num()]; + + //copy batch vectors to the device + d_a.copy_async(h_a,s); + d_b.copy_async(h_b,s); + d_c.copy_async(h_c,s); + + cublasCheckError( + cublasZgemmBatched(cublas_h, + CUBLAS_OP_N, + CUBLAS_OP_N, + kkrsz_ns, + kkrsz_ns*numLIZ, + kkrsz_ns, + &cmone, + (const cuDoubleComplex**)d_a.raw(), + kkrsz_ns, + (const cuDoubleComplex**)d_b.raw(), + kkrsz_ns, + &czero, + d_c.raw(), + nrmat_ns, + numLIZ) + ); + + // cudaStreamSynchronize(s); + + //restore old stream + cublasSetStream(cublas_h,old); +} diff --git a/src/Accelerator/cudaCheckError.hpp b/src/Accelerator/cudaCheckError.hpp new file mode 100644 index 000000000..20fd0578d --- /dev/null +++ b/src/Accelerator/cudaCheckError.hpp @@ -0,0 +1,22 @@ +#ifndef ME_CUDACHECKERROR_H +#define ME_CUDACHECKERROR_H + +// inline int cudaCheckError(void) {return 0;} +#include + +#define cudaCheckError() { \ + cudaError_t e=cudaGetLastError(); \ + if(e!=cudaSuccess) { \ + printf("Cuda failure %s:%d: '%s'\n",__FILE__,__LINE__,cudaGetErrorString(e)); \ + exit(0); \ + } \ +} + +#define cublasCheckError(e) { \ + if(e!=CUBLAS_STATUS_SUCCESS) { \ + printf("CUBLAS failure %s:%d:\n",__FILE__,__LINE__); \ + exit(0); \ + } \ +} + +#endif diff --git a/src/Accelerator/cudaDoubleComplex.hpp b/src/Accelerator/cudaDoubleComplex.hpp new file mode 100755 index 000000000..f61eabfb7 --- /dev/null +++ b/src/Accelerator/cudaDoubleComplex.hpp @@ -0,0 +1,93 @@ +#ifndef CUDOUBLE_COMPLEX +#define CUDOUBLE_COMPLEX + +class cudaDoubleComplex : public double2 { + + public: + + __inline__ __device__ __host__ cudaDoubleComplex() {} + __inline__ __device__ __host__ cudaDoubleComplex(double x, double y) { + this->x=x; + this->y=y; + } + + __inline__ __device__ __host__ cudaDoubleComplex& operator=(const double &a) { + x=a;y=0; + return *this; + } + __inline__ __device__ __host__ double real() { return x;} + __inline__ __device__ __host__ double imag() { return y;} +}; + +__inline__ __device__ __host__ cudaDoubleComplex operator+(const cudaDoubleComplex &a, const double &b) { + return cudaDoubleComplex(a.x+b,a.y); +} +__inline__ __device__ __host__ cudaDoubleComplex operator+(const double &b, const cudaDoubleComplex &a) { + return cudaDoubleComplex(a.x+b,a.y); +} +__inline__ __device__ __host__ cudaDoubleComplex operator+(const cudaDoubleComplex &a, const cudaDoubleComplex &b) { + return cudaDoubleComplex(a.x+b.x,a.y+b.y); +} + +__inline__ __device__ __host__ cudaDoubleComplex operator-(const cudaDoubleComplex &a, const double &b) { + return cudaDoubleComplex(a.x-b,a.y); +} +__inline__ __device__ __host__ cudaDoubleComplex operator-(const double &b, const cudaDoubleComplex &a) { + return cudaDoubleComplex(b-a.x,-a.y); +} +__inline__ __device__ __host__ cudaDoubleComplex operator-(const cudaDoubleComplex &a, const cudaDoubleComplex &b) { + return cudaDoubleComplex(a.x-b.x,a.y-b.y); +} + +__inline__ __device__ __host__ cudaDoubleComplex operator*(const cudaDoubleComplex &a, const double &b) { + return cudaDoubleComplex(a.x*b,a.y*b); +} +__inline__ __device__ __host__ cudaDoubleComplex operator*(const double &b, const cudaDoubleComplex &a) { + return cudaDoubleComplex(a.x*b,a.y*b); +} +__device__ __host__ __inline__ cudaDoubleComplex operator*(const cudaDoubleComplex a, const cudaDoubleComplex b) { + return cudaDoubleComplex(a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x); +} + +__inline__ __device__ __host__ cudaDoubleComplex operator/(const cudaDoubleComplex &a, const double &b) { + return cudaDoubleComplex(a.x/b,a.y/b); +} +__inline__ __device__ __host__ cudaDoubleComplex operator/(const double &b, const cudaDoubleComplex &a) { + return cudaDoubleComplex(a.x/b,a.y/b); +} + +//scaled implementaiton +__inline__ __device__ __host__ cudaDoubleComplex operator/(const cudaDoubleComplex &a, const cudaDoubleComplex &b) { + + double s = fabs(b.x) + fabs(b.y); + double oos = 1.0 / s; + double ars = a.x * oos; + double ais = a.y * oos; + double brs = b.x * oos; + double bis = b.y * oos; + s = (brs * brs) + (bis * bis); + oos = 1.0 / s; + return cudaDoubleComplex(((ars * brs) + (ais * bis)) * oos, ((ais * brs) - (ars * bis)) * oos); + +} + +__inline__ __device__ __host__ cudaDoubleComplex operator-(const cudaDoubleComplex &a) { + return cudaDoubleComplex(-a.x,-a.y); +} + +__inline__ __device__ __host__ cudaDoubleComplex conj(const cudaDoubleComplex &a) { + return cudaDoubleComplex(a.x,-a.y); +} + +__device__ inline cudaDoubleComplex exp(const cudaDoubleComplex &a) { + double e=exp(a.x); + return cudaDoubleComplex(e*cos(a.y),e*sin(a.y)); +} + +__device__ inline bool operator==(const cudaDoubleComplex &a, const cudaDoubleComplex &b) { + return a.x==b.x && a.y==b.y; +} +__device__ inline bool operator!=(const cudaDoubleComplex &a, const cudaDoubleComplex &b) { + return a.x!=b.x || a.y!=b.y; +} +#endif diff --git a/src/Accelerator/fortran.c b/src/Accelerator/fortran.c new file mode 100644 index 000000000..0ee6bc008 --- /dev/null +++ b/src/Accelerator/fortran.c @@ -0,0 +1,1671 @@ +#if defined(ACCELERATOR_CULA) || defined(ACCELERATOR_LIBSCI) +/* + * Copyright 1993-2011 NVIDIA Corporation. All rights reserved. + * + * NOTICE TO LICENSEE: + * + * This source code and/or documentation ("Licensed Deliverables") are + * subject to NVIDIA intellectual property rights under U.S. and + * international Copyright laws. + * + * These Licensed Deliverables contained herein is PROPRIETARY and + * CONFIDENTIAL to NVIDIA and is being provided under the terms and + * conditions of a form of NVIDIA software license agreement by and + * between NVIDIA and Licensee ("License Agreement") or electronically + * accepted by Licensee. Notwithstanding any terms or conditions to + * the contrary in the License Agreement, reproduction or disclosure + * of the Licensed Deliverables to any third party without the express + * written consent of NVIDIA is prohibited. + * + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE + * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. IT IS + * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. + * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED + * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, + * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY + * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY + * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THESE LICENSED DELIVERABLES. + * + * U.S. Government End Users. These Licensed Deliverables are a + * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT + * 1995), consisting of "commercial computer software" and "commercial + * computer software documentation" as such terms are used in 48 + * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government + * only as a commercial end item. Consistent with 48 C.F.R.12.212 and + * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all + * U.S. Government End Users acquire the Licensed Deliverables with + * only those rights set forth herein. + * + * Any use of the Licensed Deliverables in individual and commercial + * software must include, in the user documentation and internal + * comments to the code, the above Disclaimer and U.S. Government End + * Users Notice. + */ + +/* + * This file contains example Fortran bindings for the CUBLAS library, These + * bindings have been tested with Intel Fortran 9.0 on 32-bit and 64-bit + * Windows, and with g77 3.4.5 on 32-bit and 64-bit Linux. They will likely + * have to be adjusted for other Fortran compilers and platforms. + */ + +#include +#include +#include +#include +#include +#if defined(__GNUC__) +#include +#endif /* __GNUC__ */ +#include "cublas.h" /* CUBLAS public header file */ + +#include "fortran_common.h" +#include "fortran.h" + + +int CUBLAS_INIT (void) +{ + return (int)cublasInit (); +} + +int CUBLAS_SHUTDOWN (void) +{ + return (int)cublasShutdown (); +} + +int CUBLAS_ALLOC (const int *n, const int *elemSize, devptr_t *devicePtr) +{ + void *tPtr; + int retVal; + retVal = (int)cublasAlloc (*n, *elemSize, &tPtr); + *devicePtr = (devptr_t)tPtr; + return retVal; +} + +int CUBLAS_FREE (const devptr_t *devicePtr) +{ + void *tPtr; + tPtr = (void *)(*devicePtr); + return (int)cublasFree (tPtr); +} + +int CUBLAS_SET_VECTOR (const int *n, const int *elemSize, const void *x, + const int *incx, const devptr_t *y, const int *incy) +{ + void *tPtr = (void *)(*y); + return (int)cublasSetVector (*n, *elemSize, x, *incx, tPtr, *incy); +} + +int CUBLAS_GET_VECTOR (const int *n, const int *elemSize, const devptr_t *x, + const int *incx, void *y, const int *incy) +{ + const void *tPtr = (const void *)(*x); + return (int)cublasGetVector (*n, *elemSize, tPtr, *incx, y, *incy); +} + +int CUBLAS_SET_MATRIX (const int *rows, const int *cols, const int *elemSize, + const void *A, const int *lda, const devptr_t *B, + const int *ldb) +{ + void *tPtr = (void *)(*B); + return (int)cublasSetMatrix (*rows, *cols, *elemSize, A, *lda, tPtr,*ldb); +} + +int CUBLAS_GET_MATRIX (const int *rows, const int *cols, const int *elemSize, + const devptr_t *A, const int *lda, void *B, + const int *ldb) +{ + const void *tPtr = (const void *)(*A); + return (int)cublasGetMatrix (*rows, *cols, *elemSize, tPtr, *lda, B, *ldb); +} + +int CUBLAS_GET_ERROR (void) +{ + return (int)cublasGetError(); +} + +void CUBLAS_XERBLA (const char *srName, int *info) +{ + cublasXerbla (srName, *info); +} + + + +/*---------------------------------------------------------------------------*/ +/*---------------------------------- BLAS1 ----------------------------------*/ +/*---------------------------------------------------------------------------*/ + +int CUBLAS_ISAMAX (const int *n, const devptr_t *devPtrx, const int *incx) +{ + float *x = (float *)(*devPtrx); + int retVal; + retVal = cublasIsamax (*n, x, *incx); + return retVal; +} + +int CUBLAS_ISAMIN (const int *n, const devptr_t *devPtrx, const int *incx) +{ + float *x = (float *)(*devPtrx); + int retVal; + retVal = cublasIsamin (*n, x, *incx); + return retVal; +} + +#if CUBLAS_FORTRAN_COMPILER==CUBLAS_G77 +double CUBLAS_SASUM (const int *n, const devptr_t *devPtrx, const int *incx) +#else +float CUBLAS_SASUM (const int *n, const devptr_t *devPtrx, const int *incx) +#endif +{ + float *x = (float *)(*devPtrx); + float retVal; + retVal = cublasSasum (*n, x, *incx); + return retVal; +} + +void CUBLAS_SAXPY (const int *n, const float *alpha, const devptr_t *devPtrx, + const int *incx, const devptr_t *devPtry, const int *incy) +{ + float *x = (float *)(*devPtrx); + float *y = (float *)(*devPtry); + cublasSaxpy (*n, *alpha, x, *incx, y, *incy); +} + +void CUBLAS_SCOPY (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy) +{ + float *x = (float *)(*devPtrx); + float *y = (float *)(*devPtry); + cublasScopy (*n, x, *incx, y, *incy); +} + +#if CUBLAS_FORTRAN_COMPILER==CUBLAS_G77 +double CUBLAS_SDOT (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy) +#else +float CUBLAS_SDOT (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy) +#endif +{ + float *x = (float *)(*devPtrx); + float *y = (float *)(*devPtry); + return cublasSdot (*n, x, *incx, y, *incy); +} + +#if CUBLAS_FORTRAN_COMPILER==CUBLAS_G77 +double CUBLAS_SNRM2 (const int *n, const devptr_t *devPtrx, const int *incx) +#else +float CUBLAS_SNRM2 (const int *n, const devptr_t *devPtrx, const int *incx) +#endif +{ + float *x = (float *)(*devPtrx); + return cublasSnrm2 (*n, x, *incx); +} + +void CUBLAS_SROT (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, const float *sc, + const float *ss) +{ + float *x = (float *)(*devPtrx); + float *y = (float *)(*devPtry); + cublasSrot (*n, x, *incx, y, *incy, *sc, *ss); +} + +void CUBLAS_SROTG (float *sa, float *sb, float *sc, float *ss) +{ + cublasSrotg (sa, sb, sc, ss); +} + +void CUBLAS_SROTM (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const float* sparam) +{ + float *x = (float *)(*devPtrx); + float *y = (float *)(*devPtry); + cublasSrotm (*n, x, *incx, y, *incy, sparam); +} + +void CUBLAS_SROTMG (float *sd1, float *sd2, float *sx1, const float *sy1, + float* sparam) +{ + cublasSrotmg (sd1, sd2, sx1, sy1, sparam); +} + +void CUBLAS_SSCAL (const int *n, const float *alpha, const devptr_t *devPtrx, + const int *incx) +{ + float *x = (float *)(*devPtrx); + cublasSscal (*n, *alpha, x, *incx); +} + +void CUBLAS_SSWAP (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy) +{ + float *x = (float *)(*devPtrx); + float *y = (float *)(*devPtry); + cublasSswap (*n, x, *incx, y, *incy); +} + +void CUBLAS_CAXPY (const int *n, const cuComplex *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy) +{ + cuComplex *x = (cuComplex *)(*devPtrx); + cuComplex *y = (cuComplex *)(*devPtry); + cublasCaxpy (*n, *alpha, x, *incx, y, *incy); +} + +void CUBLAS_ZAXPY (const int *n, const cuDoubleComplex *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy) +{ + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + cuDoubleComplex *y = (cuDoubleComplex *)(*devPtry); + cublasZaxpy (*n, *alpha, x, *incx, y, *incy); +} + +void CUBLAS_CCOPY (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy) +{ + cuComplex *x = (cuComplex *)(*devPtrx); + cuComplex *y = (cuComplex *)(*devPtry); + cublasCcopy (*n, x, *incx, y, *incy); +} +void CUBLAS_ZCOPY (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy) +{ + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + cuDoubleComplex *y = (cuDoubleComplex *)(*devPtry); + cublasZcopy (*n, x, *incx, y, *incy); +} +void CUBLAS_CROT (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, const float *sc, + const cuComplex *cs) +{ + cuComplex *x = (cuComplex *)(*devPtrx); + cuComplex *y = (cuComplex *)(*devPtry); + cublasCrot (*n, x, *incx, y, *incy, *sc, *cs); +} + +void CUBLAS_ZROT (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, const double *sc, + const cuDoubleComplex *cs) +{ + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + cuDoubleComplex *y = (cuDoubleComplex *)(*devPtry); + cublasZrot (*n, x, *incx, y, *incy, *sc, *cs); +} + +void CUBLAS_CROTG (cuComplex *ca, const cuComplex *cb, float *sc, + cuComplex *cs) +{ + cublasCrotg (ca, *cb, sc, cs); +} + +void CUBLAS_ZROTG (cuDoubleComplex *ca, const cuDoubleComplex *cb, double *sc, + cuDoubleComplex *cs) +{ + cublasZrotg (ca, *cb, sc, cs); +} + +void CUBLAS_CSCAL (const int *n, const cuComplex *alpha, + const devptr_t *devPtrx, const int *incx) +{ + cuComplex *x = (cuComplex *)(*devPtrx); + cublasCscal (*n, *alpha, x, *incx); +} + +void CUBLAS_CSROT (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, const float *sc, + const float *ss) +{ + cuComplex *x = (cuComplex *)(*devPtrx); + cuComplex *y = (cuComplex *)(*devPtry); + cublasCsrot (*n, x, *incx, y, *incy, *sc, *ss); +} + +void CUBLAS_ZDROT (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, const double *sc, + const double *ss) +{ + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + cuDoubleComplex *y = (cuDoubleComplex *)(*devPtry); + cublasZdrot (*n, x, *incx, y, *incy, *sc, *ss); +} + +void CUBLAS_CSSCAL (const int *n, const float *alpha, const devptr_t *devPtrx, + const int *incx) +{ + cuComplex *x = (cuComplex *)(*devPtrx); + cublasCsscal (*n, *alpha, x, *incx); +} + +void CUBLAS_CSWAP (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy) +{ + cuComplex *x = (cuComplex *)(*devPtrx); + cuComplex *y = (cuComplex *)(*devPtry); + cublasCswap (*n, x, *incx, y, *incy); +} + +void CUBLAS_ZSWAP (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy) +{ + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + cuDoubleComplex *y = (cuDoubleComplex *)(*devPtry); + cublasZswap (*n, x, *incx, y, *incy); +} + +void CUBLAS_CTRMV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx) +{ + cuComplex *A = (cuComplex *)(*devPtrA); + cuComplex *x = (cuComplex *)(*devPtrx); + cublasCtrmv (uplo[0], trans[0], diag[0], *n, A, *lda, x, *incx); +} + +void CUBLAS_ZTRMV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx) +{ + cuDoubleComplex *A = (cuDoubleComplex *)(*devPtrA); + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + cublasZtrmv (uplo[0], trans[0], diag[0], *n, A, *lda, x, *incx); +} +#ifdef RETURN_COMPLEX +cuComplex CUBLAS_CDOTU ( const int *n, const devptr_t *devPtrx, + const int *incx, const devptr_t *devPtry,const int *incy) +{ + cuComplex *x = (cuComplex *)(*devPtrx); + cuComplex *y = (cuComplex *)(*devPtry); + cuComplex retVal = cublasCdotu (*n, x, *incx, y, *incy); + return retVal; +} +#else +void CUBLAS_CDOTU (cuComplex *retVal, const int *n, const devptr_t *devPtrx, + const int *incx, const devptr_t *devPtry,const int *incy) +{ + cuComplex *x = (cuComplex *)(*devPtrx); + cuComplex *y = (cuComplex *)(*devPtry); + *retVal = cublasCdotu (*n, x, *incx, y, *incy); +} +#endif +#ifdef RETURN_COMPLEX +cuComplex CUBLAS_CDOTC ( const int *n, const devptr_t *devPtrx, + const int *incx, const devptr_t *devPtry, const int *incy) +{ + cuComplex *x = (cuComplex *)(*devPtrx); + cuComplex *y = (cuComplex *)(*devPtry); + cuComplex retVal = cublasCdotc (*n, x, *incx, y, *incy); + return retVal; +} +#else +void CUBLAS_CDOTC (cuComplex *retVal, const int *n, const devptr_t *devPtrx, + const int *incx, const devptr_t *devPtry, const int *incy) +{ + cuComplex *x = (cuComplex *)(*devPtrx); + cuComplex *y = (cuComplex *)(*devPtry); + *retVal = cublasCdotc (*n, x, *incx, y, *incy); +} +#endif +int CUBLAS_ICAMAX (const int *n, const devptr_t *devPtrx, const int *incx) +{ + cuComplex *x = (cuComplex *)(*devPtrx); + return cublasIcamax (*n, x, *incx); +} + +int CUBLAS_ICAMIN (const int *n, const devptr_t *devPtrx, const int *incx) +{ + cuComplex *x = (cuComplex *)(*devPtrx); + return cublasIcamin (*n, x, *incx); +} + +int CUBLAS_IZAMAX (const int *n, const devptr_t *devPtrx, const int *incx) +{ + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + return cublasIzamax (*n, x, *incx); +} + +int CUBLAS_IZAMIN (const int *n, const devptr_t *devPtrx, const int *incx) +{ + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + return cublasIzamin (*n, x, *incx); +} + +#if CUBLAS_FORTRAN_COMPILER==CUBLAS_G77 +double CUBLAS_SCASUM (const int *n, const devptr_t *devPtrx, const int *incx) +#else +float CUBLAS_SCASUM (const int *n, const devptr_t *devPtrx, const int *incx) +#endif +{ + cuComplex *x = (cuComplex *)(*devPtrx); + return cublasScasum (*n, x, *incx); +} + +double CUBLAS_DZASUM (const int *n, const devptr_t *devPtrx, const int *incx) +{ + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + return cublasDzasum (*n, x, *incx); +} + +#if CUBLAS_FORTRAN_COMPILER==CUBLAS_G77 +double CUBLAS_SCNRM2 (const int *n, const devptr_t *devPtrx, const int *incx) +#else +float CUBLAS_SCNRM2 (const int *n, const devptr_t *devPtrx, const int *incx) +#endif +{ + cuComplex *x = (cuComplex *)(*devPtrx); + return cublasScnrm2 (*n, x, *incx); +} + +double CUBLAS_DZNRM2 (const int *n, const devptr_t *devPtrx, const int *incx) +{ + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + return cublasDznrm2 (*n, x, *incx); +} + +int CUBLAS_IDAMAX (const int *n, const devptr_t *devPtrx, const int *incx) +{ + double *x = (double *)(*devPtrx); + int retVal; + retVal = cublasIdamax (*n, x, *incx); + return retVal; +} + +int CUBLAS_IDAMIN (const int *n, const devptr_t *devPtrx, const int *incx) +{ + double *x = (double *)(*devPtrx); + int retVal; + retVal = cublasIdamin (*n, x, *incx); + return retVal; +} + +double CUBLAS_DASUM (const int *n, const devptr_t *devPtrx, const int *incx) +{ + double *x = (double *)(*devPtrx); + double retVal; + retVal = cublasDasum (*n, x, *incx); + return retVal; +} + +void CUBLAS_DAXPY (const int *n, const double *alpha, const devptr_t *devPtrx, + const int *incx, const devptr_t *devPtry, const int *incy) +{ + double *x = (double *)(*devPtrx); + double *y = (double *)(*devPtry); + cublasDaxpy (*n, *alpha, x, *incx, y, *incy); +} + +void CUBLAS_DCOPY (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy) +{ + double *x = (double *)(*devPtrx); + double *y = (double *)(*devPtry); + cublasDcopy (*n, x, *incx, y, *incy); +} + +double CUBLAS_DDOT (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy) +{ + double *x = (double *)(*devPtrx); + double *y = (double *)(*devPtry); + return cublasDdot (*n, x, *incx, y, *incy); +} + +double CUBLAS_DNRM2 (const int *n, const devptr_t *devPtrx, const int *incx) +{ + double *x = (double *)(*devPtrx); + return cublasDnrm2 (*n, x, *incx); +} + +void CUBLAS_DROT (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, const double *sc, + const double *ss) +{ + double *x = (double *)(*devPtrx); + double *y = (double *)(*devPtry); + cublasDrot (*n, x, *incx, y, *incy, *sc, *ss); +} + +void CUBLAS_DROTG (double *sa, double *sb, double *sc, double *ss) +{ + cublasDrotg (sa, sb, sc, ss); +} + +void CUBLAS_DROTM (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const double* sparam) +{ + double *x = (double *)(*devPtrx); + double *y = (double *)(*devPtry); + cublasDrotm (*n, x, *incx, y, *incy, sparam); +} + +void CUBLAS_DROTMG (double *sd1, double *sd2, double *sx1, const double *sy1, + double* sparam) +{ + cublasDrotmg (sd1, sd2, sx1, sy1, sparam); +} + +void CUBLAS_DSCAL (const int *n, const double *alpha, const devptr_t *devPtrx, + const int *incx) +{ + double *x = (double *)(*devPtrx); + cublasDscal (*n, *alpha, x, *incx); +} + +void CUBLAS_DSWAP (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy) +{ + double *x = (double *)(*devPtrx); + double *y = (double *)(*devPtry); + cublasDswap (*n, x, *incx, y, *incy); +} +#ifdef RETURN_COMPLEX +cuDoubleComplex CUBLAS_ZDOTU ( const int *n, const devptr_t *devPtrx, + const int *incx, const devptr_t *devPtry,const int *incy) +{ + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + cuDoubleComplex *y = (cuDoubleComplex *)(*devPtry); + return (cublasZdotu (*n, x, *incx, y, *incy)); +} +#else +void CUBLAS_ZDOTU (cuDoubleComplex *retVal, const int *n, const devptr_t *devPtrx, + const int *incx, const devptr_t *devPtry,const int *incy) +{ + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + cuDoubleComplex *y = (cuDoubleComplex *)(*devPtry); + *retVal = cublasZdotu (*n, x, *incx, y, *incy); +} +#endif +#ifdef RETURN_COMPLEX +cuDoubleComplex CUBLAS_ZDOTC ( const int *n, const devptr_t *devPtrx, + const int *incx, const devptr_t *devPtry,const int *incy) +{ + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + cuDoubleComplex *y = (cuDoubleComplex *)(*devPtry); + return (cublasZdotc (*n, x, *incx, y, *incy)); +} +#else +void CUBLAS_ZDOTC (cuDoubleComplex *retVal, const int *n, const devptr_t *devPtrx, + const int *incx, const devptr_t *devPtry,const int *incy) +{ + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + cuDoubleComplex *y = (cuDoubleComplex *)(*devPtry); + *retVal = cublasZdotc (*n, x, *incx, y, *incy); +} +#endif +void CUBLAS_ZSCAL (const int *n, const cuDoubleComplex *alpha, + const devptr_t *devPtrx, const int *incx) +{ + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + cublasZscal (*n, *alpha, x, *incx); +} + +void CUBLAS_ZDSCAL (const int *n, const double *alpha, const devptr_t *devPtrx, + const int *incx) +{ + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + cublasZdscal (*n, *alpha, x, *incx); +} + +/*---------------------------------------------------------------------------*/ +/*---------------------------------- BLAS2 ----------------------------------*/ +/*---------------------------------------------------------------------------*/ + +void CUBLAS_SGBMV (const char *trans, const int *m, const int *n, + const int *kl, const int *ku, const float *alpha, + const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx, const float *beta, + const devptr_t *devPtry, const int *incy) +{ + float *A = (float *)(*devPtrA); + float *x = (float *)(*devPtrx); + float *y = (float *)(*devPtry); + cublasSgbmv (trans[0], *m, *n, *kl, *ku, *alpha, A, *lda, x, *incx, *beta, + y, *incy); +} + +void CUBLAS_DGBMV (const char *trans, const int *m, const int *n, + const int *kl, const int *ku, const double *alpha, + const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx, const double *beta, + const devptr_t *devPtry, const int *incy) +{ + double *A = (double *)(*devPtrA); + double *x = (double *)(*devPtrx); + double *y = (double *)(*devPtry); + cublasDgbmv (trans[0], *m, *n, *kl, *ku, *alpha, A, *lda, x, *incx, *beta, + y, *incy); +} +void CUBLAS_CGBMV (const char *trans, const int *m, const int *n, + const int *kl, const int *ku, const cuComplex *alpha, + const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx, const cuComplex *beta, + const devptr_t *devPtry, const int *incy) +{ + cuComplex *A = (cuComplex *)(*devPtrA); + cuComplex *x = (cuComplex *)(*devPtrx); + cuComplex *y = (cuComplex *)(*devPtry); + cublasCgbmv (trans[0], *m, *n, *kl, *ku, *alpha, A, *lda, x, *incx, *beta, + y, *incy); +} +void CUBLAS_ZGBMV (const char *trans, const int *m, const int *n, + const int *kl, const int *ku, const cuDoubleComplex *alpha, + const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx, const cuDoubleComplex *beta, + const devptr_t *devPtry, const int *incy) +{ + cuDoubleComplex *A = (cuDoubleComplex *)(*devPtrA); + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + cuDoubleComplex *y = (cuDoubleComplex *)(*devPtry); + cublasZgbmv (trans[0], *m, *n, *kl, *ku, *alpha, A, *lda, x, *incx, *beta, + y, *incy); +} + +void CUBLAS_SGEMV (const char *trans, const int *m, const int *n, + const float *alpha, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx, const float *beta, + const devptr_t *devPtry, const int *incy) +{ + float *A = (float *)(*devPtrA); + float *x = (float *)(*devPtrx); + float *y = (float *)(*devPtry); + cublasSgemv (trans[0], *m, *n, *alpha, A, *lda, x, *incx, *beta, y, *incy); +} + +void CUBLAS_SGER (const int *m, const int *n, const float *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const devptr_t *devPtrA, const int *lda) +{ + float *A = (float *)(*devPtrA); + float *x = (float *)(*devPtrx); + float *y = (float *)(*devPtry); + cublasSger (*m, *n, *alpha, x, *incx, y, *incy, A, *lda); +} + +void CUBLAS_SSBMV (const char *uplo, const int *n, const int *k, + const float *alpha, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx, const float *beta, + const devptr_t *devPtry, const int *incy) +{ + float *A = (float *)(*devPtrA); + float *x = (float *)(*devPtrx); + float *y = (float *)(*devPtry); + cublasSsbmv (uplo[0], *n, *k, *alpha, A, *lda, x, *incx, *beta, y, *incy); +} + +void CUBLAS_DSBMV (const char *uplo, const int *n, const int *k, + const double *alpha, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx, const double *beta, + const devptr_t *devPtry, const int *incy) +{ + double *A = (double *)(*devPtrA); + double *x = (double *)(*devPtrx); + double *y = (double *)(*devPtry); + cublasDsbmv (uplo[0], *n, *k, *alpha, A, *lda, x, *incx, *beta, y, *incy); +} + +void CUBLAS_CHBMV (const char *uplo, const int *n, const int *k, + const cuComplex *alpha, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx, const cuComplex *beta, + const devptr_t *devPtry, const int *incy) +{ + cuComplex *A = (cuComplex *)(*devPtrA); + cuComplex *x = (cuComplex *)(*devPtrx); + cuComplex *y = (cuComplex *)(*devPtry); + cublasChbmv (uplo[0], *n, *k, *alpha, A, *lda, x, *incx, *beta, y, *incy); +} + +void CUBLAS_ZHBMV (const char *uplo, const int *n, const int *k, + const cuDoubleComplex *alpha, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx, const cuDoubleComplex *beta, + const devptr_t *devPtry, const int *incy) +{ + cuDoubleComplex *A = (cuDoubleComplex *)(*devPtrA); + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + cuDoubleComplex *y = (cuDoubleComplex *)(*devPtry); + cublasZhbmv (uplo[0], *n, *k, *alpha, A, *lda, x, *incx, *beta, y, *incy); +} + +void CUBLAS_SSPMV (const char *uplo, const int *n, const float *alpha, + const devptr_t *devPtrAP, const devptr_t *devPtrx, + const int *incx, const float *beta, const devptr_t *devPtry, + const int *incy) +{ + float *AP = (float *)(*devPtrAP); + float *x = (float *)(*devPtrx); + float *y = (float *)(*devPtry); + cublasSspmv (uplo[0], *n, *alpha, AP, x, *incx, *beta, y, *incy); +} +void CUBLAS_DSPMV (const char *uplo, const int *n, const double *alpha, + const devptr_t *devPtrAP, const devptr_t *devPtrx, + const int *incx, const double *beta, const devptr_t *devPtry, + const int *incy) +{ + double *AP = (double *)(*devPtrAP); + double *x = (double *)(*devPtrx); + double *y = (double *)(*devPtry); + cublasDspmv (uplo[0], *n, *alpha, AP, x, *incx, *beta, y, *incy); +} +void CUBLAS_CHPMV (const char *uplo, const int *n, const cuComplex *alpha, + const devptr_t *devPtrAP, const devptr_t *devPtrx, + const int *incx, const cuComplex *beta, const devptr_t *devPtry, + const int *incy) +{ + cuComplex *AP = (cuComplex *)(*devPtrAP); + cuComplex *x = (cuComplex *)(*devPtrx); + cuComplex *y = (cuComplex *)(*devPtry); + cublasChpmv (uplo[0], *n, *alpha, AP, x, *incx, *beta, y, *incy); +} +void CUBLAS_ZHPMV (const char *uplo, const int *n, const cuDoubleComplex *alpha, + const devptr_t *devPtrAP, const devptr_t *devPtrx, + const int *incx, const cuDoubleComplex *beta, const devptr_t *devPtry, + const int *incy) +{ + cuDoubleComplex *AP = (cuDoubleComplex *)(*devPtrAP); + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + cuDoubleComplex *y = (cuDoubleComplex *)(*devPtry); + cublasZhpmv (uplo[0], *n, *alpha, AP, x, *incx, *beta, y, *incy); +} + +void CUBLAS_SSPR (const char *uplo, const int *n, const float *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtrAP) +{ + float *AP = (float *)(*devPtrAP); + float *x = (float *)(*devPtrx); + cublasSspr (uplo[0], *n, *alpha, x, *incx, AP); +} + +void CUBLAS_DSPR (const char *uplo, const int *n, const double *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtrAP) +{ + double *AP = (double *)(*devPtrAP); + double *x = (double *)(*devPtrx); + cublasDspr (uplo[0], *n, *alpha, x, *incx, AP); +} + +void CUBLAS_CHPR (const char *uplo, const int *n, const float *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtrAP) +{ + cuComplex *AP = (cuComplex *)(*devPtrAP); + cuComplex *x = (cuComplex *)(*devPtrx); + cublasChpr (uplo[0], *n, *alpha, x, *incx, AP); +} + +void CUBLAS_ZHPR (const char *uplo, const int *n, const double *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtrAP) +{ + cuDoubleComplex *AP = (cuDoubleComplex *)(*devPtrAP); + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + cublasZhpr (uplo[0], *n, *alpha, x, *incx, AP); +} + + +void CUBLAS_SSPR2 (const char *uplo, const int *n, const float *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const devptr_t *devPtrAP) +{ + float *AP = (float *)(*devPtrAP); + float *x = (float *)(*devPtrx); + float *y = (float *)(*devPtry); + cublasSspr2 (uplo[0], *n, *alpha, x, *incx, y, *incy, AP); +} + +void CUBLAS_DSPR2 (const char *uplo, const int *n, const double *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const devptr_t *devPtrAP) +{ + double *AP = (double *)(*devPtrAP); + double *x = (double *)(*devPtrx); + double *y = (double *)(*devPtry); + cublasDspr2 (uplo[0], *n, *alpha, x, *incx, y, *incy, AP); +} + +void CUBLAS_CHPR2 (const char *uplo, const int *n, const cuComplex *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const devptr_t *devPtrAP) +{ + cuComplex *AP = (cuComplex *)(*devPtrAP); + cuComplex *x = (cuComplex *)(*devPtrx); + cuComplex *y = (cuComplex *)(*devPtry); + cublasChpr2 (uplo[0], *n, *alpha, x, *incx, y, *incy, AP); +} + +void CUBLAS_ZHPR2 (const char *uplo, const int *n, const cuDoubleComplex *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const devptr_t *devPtrAP) +{ + cuDoubleComplex *AP = (cuDoubleComplex *)(*devPtrAP); + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + cuDoubleComplex *y = (cuDoubleComplex *)(*devPtry); + cublasZhpr2 (uplo[0], *n, *alpha, x, *incx, y, *incy, AP); +} + +void CUBLAS_SSYMV (const char *uplo, const int *n, const float *alpha, + const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx, const float *beta, + const devptr_t *devPtry, + const int *incy) +{ + float *A = (float *)(*devPtrA); + float *x = (float *)(*devPtrx); + float *y = (float *)(*devPtry); + cublasSsymv (uplo[0], *n, *alpha, A, *lda, x, *incx, *beta, y, *incy); +} + +void CUBLAS_DSYMV (const char *uplo, const int *n, const double *alpha, + const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx, const double *beta, + const devptr_t *devPtry, + const int *incy) +{ + double *A = (double *)(*devPtrA); + double *x = (double *)(*devPtrx); + double *y = (double *)(*devPtry); + cublasDsymv (uplo[0], *n, *alpha, A, *lda, x, *incx, *beta, y, *incy); +} + +void CUBLAS_CHEMV (const char *uplo, const int *n, const cuComplex *alpha, + const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx, const cuComplex *beta, + const devptr_t *devPtry, + const int *incy) +{ + cuComplex *A = (cuComplex *)(*devPtrA); + cuComplex *x = (cuComplex *)(*devPtrx); + cuComplex *y = (cuComplex *)(*devPtry); + cublasChemv (uplo[0], *n, *alpha, A, *lda, x, *incx, *beta, y, *incy); +} + +void CUBLAS_ZHEMV (const char *uplo, const int *n, const cuDoubleComplex *alpha, + const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx, const cuDoubleComplex *beta, + const devptr_t *devPtry, + const int *incy) +{ + cuDoubleComplex *A = (cuDoubleComplex *)(*devPtrA); + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + cuDoubleComplex *y = (cuDoubleComplex *)(*devPtry); + cublasZhemv (uplo[0], *n, *alpha, A, *lda, x, *incx, *beta, y, *incy); +} + +void CUBLAS_SSYR (const char *uplo, const int *n, const float *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtrA, const int *lda) +{ + float *A = (float *)(*devPtrA); + float *x = (float *)(*devPtrx); + cublasSsyr (uplo[0], *n, *alpha, x, *incx, A, *lda); +} + +void CUBLAS_SSYR2 (const char *uplo, const int *n, const float *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const devptr_t *devPtrA, const int *lda) +{ + float *A = (float *)(*devPtrA); + float *x = (float *)(*devPtrx); + float *y = (float *)(*devPtry); + cublasSsyr2 (uplo[0], *n, *alpha, x, *incx, y, *incy, A, *lda); +} + +void CUBLAS_DSYR2 (const char *uplo, const int *n, const double *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const devptr_t *devPtrA, const int *lda) +{ + double *A = (double *)(*devPtrA); + double *x = (double *)(*devPtrx); + double *y = (double *)(*devPtry); + cublasDsyr2 (uplo[0], *n, *alpha, x, *incx, y, *incy, A, *lda); +} + +void CUBLAS_CHER2 (const char *uplo, const int *n, const cuComplex *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const devptr_t *devPtrA, const int *lda) +{ + cuComplex *A = (cuComplex *)(*devPtrA); + cuComplex *x = (cuComplex *)(*devPtrx); + cuComplex *y = (cuComplex *)(*devPtry); + cublasCher2 (uplo[0], *n, *alpha, x, *incx, y, *incy, A, *lda); +} + +void CUBLAS_ZHER2 (const char *uplo, const int *n, const cuDoubleComplex *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const devptr_t *devPtrA, const int *lda) +{ + cuDoubleComplex *A = (cuDoubleComplex *)(*devPtrA); + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + cuDoubleComplex *y = (cuDoubleComplex *)(*devPtry); + cublasZher2 (uplo[0], *n, *alpha, x, *incx, y, *incy, A, *lda); +} + + +void CUBLAS_STBMV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrx, const int *incx) +{ + float *A = (float *)(*devPtrA); + float *x = (float *)(*devPtrx); + cublasStbmv (uplo[0], trans[0], diag[0], *n, *k, A, *lda, x, *incx); +} + +void CUBLAS_DTBMV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrx, const int *incx) +{ + double *A = (double *)(*devPtrA); + double *x = (double *)(*devPtrx); + cublasDtbmv (uplo[0], trans[0], diag[0], *n, *k, A, *lda, x, *incx); +} + +void CUBLAS_CTBMV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrx, const int *incx) +{ + cuComplex *A = (cuComplex *)(*devPtrA); + cuComplex *x = (cuComplex *)(*devPtrx); + cublasCtbmv (uplo[0], trans[0], diag[0], *n, *k, A, *lda, x, *incx); +} + +void CUBLAS_ZTBMV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrx, const int *incx) +{ + cuDoubleComplex *A = (cuDoubleComplex *)(*devPtrA); + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + cublasZtbmv (uplo[0], trans[0], diag[0], *n, *k, A, *lda, x, *incx); +} + +void CUBLAS_STBSV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrx, const int *incx) +{ + float *A = (float *)(*devPtrA); + float *x = (float *)(*devPtrx); + cublasStbsv (uplo[0], trans[0], diag[0], *n, *k, A, *lda, x, *incx); +} + +void CUBLAS_DTBSV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrx, const int *incx) +{ + double *A = (double *)(*devPtrA); + double *x = (double *)(*devPtrx); + cublasDtbsv (uplo[0], trans[0], diag[0], *n, *k, A, *lda, x, *incx); +} + +void CUBLAS_CTBSV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrx, const int *incx) +{ + cuComplex *A = (cuComplex *)(*devPtrA); + cuComplex *x = (cuComplex *)(*devPtrx); + cublasCtbsv (uplo[0], trans[0], diag[0], *n, *k, A, *lda, x, *incx); +} + +void CUBLAS_ZTBSV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrx, const int *incx) +{ + cuDoubleComplex *A = (cuDoubleComplex *)(*devPtrA); + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + cublasZtbsv (uplo[0], trans[0], diag[0], *n, *k, A, *lda, x, *incx); +} + +void CUBLAS_STPMV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrAP, + const devptr_t *devPtrx, const int *incx) +{ + float *AP = (float *)(*devPtrAP); + float *x = (float *)(*devPtrx); + cublasStpmv (uplo[0], trans[0], diag[0], *n, AP, x, *incx); +} + +void CUBLAS_DTPMV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrAP, + const devptr_t *devPtrx, const int *incx) +{ + double *AP = (double *)(*devPtrAP); + double *x = (double *)(*devPtrx); + cublasDtpmv (uplo[0], trans[0], diag[0], *n, AP, x, *incx); +} + +void CUBLAS_CTPMV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrAP, + const devptr_t *devPtrx, const int *incx) +{ + cuComplex *AP = (cuComplex *)(*devPtrAP); + cuComplex *x = (cuComplex *)(*devPtrx); + cublasCtpmv (uplo[0], trans[0], diag[0], *n, AP, x, *incx); +} + +void CUBLAS_ZTPMV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrAP, + const devptr_t *devPtrx, const int *incx) +{ + cuDoubleComplex *AP = (cuDoubleComplex *)(*devPtrAP); + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + cublasZtpmv (uplo[0], trans[0], diag[0], *n, AP, x, *incx); +} + +void CUBLAS_STPSV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrAP, + const devptr_t *devPtrx, const int *incx) +{ + float *AP = (float *)(*devPtrAP); + float *x = (float *)(*devPtrx); + cublasStpsv (uplo[0], trans[0], diag[0], *n, AP, x, *incx); +} + +void CUBLAS_DTPSV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrAP, + const devptr_t *devPtrx, const int *incx) +{ + double *AP = (double *)(*devPtrAP); + double *x = (double *)(*devPtrx); + cublasDtpsv (uplo[0], trans[0], diag[0], *n, AP, x, *incx); +} + +void CUBLAS_CTPSV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrAP, + const devptr_t *devPtrx, const int *incx) +{ + cuComplex *AP = (cuComplex *)(*devPtrAP); + cuComplex *x = (cuComplex *)(*devPtrx); + cublasCtpsv (uplo[0], trans[0], diag[0], *n, AP, x, *incx); +} + +void CUBLAS_ZTPSV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrAP, + const devptr_t *devPtrx, const int *incx) +{ + cuDoubleComplex *AP = (cuDoubleComplex *)(*devPtrAP); + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + cublasZtpsv (uplo[0], trans[0], diag[0], *n, AP, x, *incx); +} + +void CUBLAS_STRMV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx) +{ + float *A = (float *)(*devPtrA); + float *x = (float *)(*devPtrx); + cublasStrmv (uplo[0], trans[0], diag[0], *n, A, *lda, x, *incx); +} + +void CUBLAS_DTRMV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx) +{ + double *A = (double *)(*devPtrA); + double *x = (double *)(*devPtrx); + cublasDtrmv (uplo[0], trans[0], diag[0], *n, A, *lda, x, *incx); +} + +void CUBLAS_STRSV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx) +{ + float *A = (float *)(*devPtrA); + float *x = (float *)(*devPtrx); + cublasStrsv (uplo[0], trans[0], diag[0], *n, A, *lda, x, *incx); +} + +void CUBLAS_DGEMV (const char *trans, const int *m, const int *n, + const double *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrx, const int *incx, + const double *beta, const devptr_t *devPtry, + const int *incy) +{ + double *A = (double *)(*devPtrA); + double *x = (double *)(*devPtrx); + double *y = (double *)(*devPtry); + cublasDgemv (trans[0], *m, *n, *alpha, A, *lda, x, *incx, *beta, y, *incy); +} +void CUBLAS_CGEMV (const char *trans, const int *m, const int *n, + const cuComplex *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrx, const int *incx, + const cuComplex *beta, devptr_t *devPtry, + const int *incy) +{ + cuComplex *A = (cuComplex *)(*devPtrA); + cuComplex *x = (cuComplex *)(*devPtrx); + cuComplex *y = (cuComplex *)(*devPtry); + cublasCgemv (trans[0], *m, *n, *alpha, A, *lda, x, *incx, *beta, y, *incy); +} + +void CUBLAS_ZGEMV (const char *trans, const int *m, const int *n, + const cuDoubleComplex *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrx, const int *incx, + const cuDoubleComplex *beta, devptr_t *devPtry, + const int *incy) +{ + cuDoubleComplex *A = (cuDoubleComplex *)(*devPtrA); + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + cuDoubleComplex *y = (cuDoubleComplex *)(*devPtry); + cublasZgemv (trans[0], *m, *n, *alpha, A, *lda, x, *incx, *beta, y, *incy); +} +void CUBLAS_DGER (const int *m, const int *n, const double *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const devptr_t *devPtrA, const int *lda) +{ + double *A = (double *)(*devPtrA); + double *x = (double *)(*devPtrx); + double *y = (double *)(*devPtry); + cublasDger (*m, *n, *alpha, x, *incx, y, *incy, A, *lda); +} + +void CUBLAS_DSYR (const char *uplo, const int *n, const double *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtrA, const int *lda) +{ + double *A = (double *)(*devPtrA); + double *x = (double *)(*devPtrx); + cublasDsyr (uplo[0], *n, *alpha, x, *incx, A, *lda); +} + +void CUBLAS_CHER (const char *uplo, const int *n, const float *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtrA, const int *lda) +{ + cuComplex *A = (cuComplex *)(*devPtrA); + cuComplex *x = (cuComplex *)(*devPtrx); + cublasCher (uplo[0], *n, *alpha, x, *incx, A, *lda); +} + +void CUBLAS_ZHER (const char *uplo, const int *n, const double *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtrA, const int *lda) +{ + cuDoubleComplex *A = (cuDoubleComplex *)(*devPtrA); + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + cublasZher (uplo[0], *n, *alpha, x, *incx, A, *lda); +} + +void CUBLAS_DTRSV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx) +{ + double *A = (double *)(*devPtrA); + double *x = (double *)(*devPtrx); + cublasDtrsv (uplo[0], trans[0], diag[0], *n, A, *lda, x, *incx); +} + +void CUBLAS_CTRSV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx) +{ + cuComplex *A = (cuComplex *)(*devPtrA); + cuComplex *x = (cuComplex *)(*devPtrx); + cublasCtrsv (uplo[0], trans[0], diag[0], *n, A, *lda, x, *incx); +} + +void CUBLAS_ZTRSV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx) +{ + cuDoubleComplex *A = (cuDoubleComplex *)(*devPtrA); + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + cublasZtrsv (uplo[0], trans[0], diag[0], *n, A, *lda, x, *incx); +} + +void CUBLAS_CGERU (const int *m, const int *n, const cuComplex *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const devptr_t *devPtrA, const int *lda) +{ + cuComplex *A = (cuComplex *)(*devPtrA); + cuComplex *x = (cuComplex *)(*devPtrx); + cuComplex *y = (cuComplex *)(*devPtry); + cublasCgeru (*m, *n, *alpha, x, *incx, y, *incy, A, *lda); +} + +void CUBLAS_CGERC (const int *m, const int *n, const cuComplex *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const devptr_t *devPtrA, const int *lda) +{ + cuComplex *A = (cuComplex *)(*devPtrA); + cuComplex *x = (cuComplex *)(*devPtrx); + cuComplex *y = (cuComplex *)(*devPtry); + cublasCgerc (*m, *n, *alpha, x, *incx, y, *incy, A, *lda); +} + +void CUBLAS_ZGERU (const int *m, const int *n, const cuDoubleComplex *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const devptr_t *devPtrA, const int *lda) +{ + cuDoubleComplex *A = (cuDoubleComplex *)(*devPtrA); + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + cuDoubleComplex *y = (cuDoubleComplex *)(*devPtry); + cublasZgeru (*m, *n, *alpha, x, *incx, y, *incy, A, *lda); +} + +void CUBLAS_ZGERC (const int *m, const int *n, const cuDoubleComplex *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const devptr_t *devPtrA, const int *lda) +{ + cuDoubleComplex *A = (cuDoubleComplex *)(*devPtrA); + cuDoubleComplex *x = (cuDoubleComplex *)(*devPtrx); + cuDoubleComplex *y = (cuDoubleComplex *)(*devPtry); + cublasZgerc (*m, *n, *alpha, x, *incx, y, *incy, A, *lda); +} +/*---------------------------------------------------------------------------*/ +/*---------------------------------- BLAS3 ----------------------------------*/ +/*---------------------------------------------------------------------------*/ + +void CUBLAS_SGEMM (const char *transa, const char *transb, const int *m, + const int *n, const int *k, const float *alpha, + const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrB, const int *ldb, const float *beta, + const devptr_t *devPtrC, const int *ldc) +{ + float *A = (float *)(*devPtrA); + float *B = (float *)(*devPtrB); + float *C = (float *)(*devPtrC); + cublasSgemm (transa[0], transb[0], *m, *n, *k, *alpha, A, *lda, + B, *ldb, *beta, C, *ldc); +} + +void CUBLAS_SSYMM (const char *side, const char *uplo, const int *m, + const int *n, const float *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb, + const float *beta, const devptr_t *devPtrC, const int *ldc) +{ + float *A = (float *)(*devPtrA); + float *B = (float *)(*devPtrB); + float *C = (float *)(*devPtrC); + cublasSsymm (*side, *uplo, *m, *n, *alpha, A, *lda, B, *ldb, *beta, C, + *ldc); +} + +void CUBLAS_SSYR2K (const char *uplo, const char *trans, const int *n, + const int *k, const float *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb, + const float *beta, const devptr_t *devPtrC, const int *ldc) +{ + float *A = (float *)(*devPtrA); + float *B = (float *)(*devPtrB); + float *C = (float *)(*devPtrC); + cublasSsyr2k (*uplo, *trans, *n, *k, *alpha, A, *lda, B, *ldb, *beta, + C, *ldc); +} + +void CUBLAS_SSYRK (const char *uplo, const char *trans, const int *n, + const int *k, const float *alpha, const devptr_t *devPtrA, + const int *lda, const float *beta, const devptr_t *devPtrC, + const int *ldc) +{ + float *A = (float *)(*devPtrA); + float *C = (float *)(*devPtrC); + cublasSsyrk (*uplo, *trans, *n, *k, *alpha, A, *lda, *beta, C, *ldc); +} + +void CUBLAS_STRMM (const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const float *alpha, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrB, const int *ldb) +{ + float *A = (float *)(*devPtrA); + float *B = (float *)(*devPtrB); + cublasStrmm (*side, *uplo, *transa, *diag, *m, *n, *alpha, A, *lda, B, + *ldb); +} + +void CUBLAS_STRSM (const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const float *alpha, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrB, const int *ldb) +{ + float *A = (float *)*devPtrA; + float *B = (float *)*devPtrB; + cublasStrsm (side[0], uplo[0], transa[0], diag[0], *m, *n, *alpha, + A, *lda, B, *ldb); +} + +void CUBLAS_CGEMM (const char *transa, const char *transb, const int *m, + const int *n, const int *k, const cuComplex *alpha, + const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrB, const int *ldb, + const cuComplex *beta, const devptr_t *devPtrC, + const int *ldc) +{ + cuComplex *A = (cuComplex *)*devPtrA; + cuComplex *B = (cuComplex *)*devPtrB; + cuComplex *C = (cuComplex *)*devPtrC; + cublasCgemm (transa[0], transb[0], *m, *n, *k, *alpha, A, *lda, B, *ldb, + *beta, C, *ldc); +} + + +void CUBLAS_CSYMM (const char *side, const char *uplo, const int *m, + const int *n, const cuComplex *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb, + const cuComplex *beta, const devptr_t *devPtrC, const int *ldc) +{ + cuComplex *A = (cuComplex *)(*devPtrA); + cuComplex *B = (cuComplex *)(*devPtrB); + cuComplex *C = (cuComplex *)(*devPtrC); + cublasCsymm (*side, *uplo, *m, *n, *alpha, A, *lda, B, *ldb, *beta, C, + *ldc); +} + +void CUBLAS_CHEMM (const char *side, const char *uplo, const int *m, + const int *n, const cuComplex *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb, + const cuComplex *beta, const devptr_t *devPtrC, const int *ldc) +{ + cuComplex *A = (cuComplex *)(*devPtrA); + cuComplex *B = (cuComplex *)(*devPtrB); + cuComplex *C = (cuComplex *)(*devPtrC); + cublasChemm (*side, *uplo, *m, *n, *alpha, A, *lda, B, *ldb, *beta, C, + *ldc); +} + +void CUBLAS_CTRMM (const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const cuComplex *alpha, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrB, const int *ldb) +{ + cuComplex *A = (cuComplex *)(*devPtrA); + cuComplex *B = (cuComplex *)(*devPtrB); + cublasCtrmm (*side, *uplo, *transa, *diag, *m, *n, *alpha, A, *lda, B, + *ldb); +} + +void CUBLAS_CTRSM ( const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const cuComplex *alpha, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrB, const int *ldb) +{ + cuComplex *A = (cuComplex *)*devPtrA; + cuComplex *B = (cuComplex *)*devPtrB; + cublasCtrsm (side[0], uplo[0], transa[0], diag[0], *m, *n, *alpha, + A, *lda, B, *ldb); +} + +void CUBLAS_CSYRK (const char *uplo, const char *trans, const int *n, + const int *k, const cuComplex *alpha, const devptr_t *devPtrA, + const int *lda, const cuComplex *beta, const devptr_t *devPtrC, + const int *ldc) +{ + cuComplex *A = (cuComplex *)(*devPtrA); + cuComplex *C = (cuComplex *)(*devPtrC); + cublasCsyrk (*uplo, *trans, *n, *k, *alpha, A, *lda, *beta, C, *ldc); +} + +void CUBLAS_CSYR2K (const char *uplo, const char *trans, const int *n, + const int *k, const cuComplex *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb, + const cuComplex *beta, const devptr_t *devPtrC, + const int *ldc) +{ + cuComplex *A = (cuComplex *)(*devPtrA); + cuComplex *B = (cuComplex *)(*devPtrB); + cuComplex *C = (cuComplex *)(*devPtrC); + cublasCsyr2k (*uplo, *trans, *n, *k, *alpha, A, *lda, B, *ldb, *beta, + C, *ldc); +} + +void CUBLAS_CHERK (const char *uplo, const char *trans, const int *n, + const int *k, const float *alpha, const devptr_t *devPtrA, + const int *lda, const float *beta, const devptr_t *devPtrC, + const int *ldc) +{ + cuComplex *A = (cuComplex *)(*devPtrA); + cuComplex *C = (cuComplex *)(*devPtrC); + cublasCherk (*uplo, *trans, *n, *k, *alpha, A, *lda, *beta, C, *ldc); +} + +void CUBLAS_CHER2K (const char *uplo, const char *trans, const int *n, + const int *k, const cuComplex *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb, + const float *beta, const devptr_t *devPtrC, + const int *ldc) +{ + cuComplex *A = (cuComplex *)(*devPtrA); + cuComplex *B = (cuComplex *)(*devPtrB); + cuComplex *C = (cuComplex *)(*devPtrC); + cublasCher2k (*uplo, *trans, *n, *k, *alpha, A, *lda, B, *ldb, *beta, + C, *ldc); +} + +void CUBLAS_DGEMM (const char *transa, const char *transb, const int *m, + const int *n, const int *k, const double *alpha, + const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrB, const int *ldb, const double *beta, + const devptr_t *devPtrC, const int *ldc) +{ + double *A = (double *)(*devPtrA); + double *B = (double *)(*devPtrB); + double *C = (double *)(*devPtrC); + cublasDgemm (transa[0], transb[0], *m, *n, *k, *alpha, A, *lda, + B, *ldb, *beta, C, *ldc); +} + +void CUBLAS_DSYMM (const char *side, const char *uplo, const int *m, + const int *n, const double *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb, + const double *beta, const devptr_t *devPtrC, const int *ldc) +{ + double *A = (double *)(*devPtrA); + double *B = (double *)(*devPtrB); + double *C = (double *)(*devPtrC); + cublasDsymm (*side, *uplo, *m, *n, *alpha, A, *lda, B, *ldb, *beta, C, + *ldc); +} + +void CUBLAS_DSYR2K (const char *uplo, const char *trans, const int *n, + const int *k, const double *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb, + const double *beta, const devptr_t *devPtrC, + const int *ldc) +{ + double *A = (double *)(*devPtrA); + double *B = (double *)(*devPtrB); + double *C = (double *)(*devPtrC); + cublasDsyr2k (*uplo, *trans, *n, *k, *alpha, A, *lda, B, *ldb, *beta, + C, *ldc); +} + +void CUBLAS_DSYRK (const char *uplo, const char *trans, const int *n, + const int *k, const double *alpha, const devptr_t *devPtrA, + const int *lda, const double *beta, const devptr_t *devPtrC, + const int *ldc) +{ + double *A = (double *)(*devPtrA); + double *C = (double *)(*devPtrC); + cublasDsyrk (*uplo, *trans, *n, *k, *alpha, A, *lda, *beta, C, *ldc); +} + +void CUBLAS_ZSYRK (const char *uplo, const char *trans, const int *n, + const int *k, const cuDoubleComplex *alpha, const devptr_t *devPtrA, + const int *lda, const cuDoubleComplex *beta, const devptr_t *devPtrC, + const int *ldc) +{ + cuDoubleComplex *A = (cuDoubleComplex *)(*devPtrA); + cuDoubleComplex *C = (cuDoubleComplex *)(*devPtrC); + cublasZsyrk (*uplo, *trans, *n, *k, *alpha, A, *lda, *beta, C, *ldc); +} + +void CUBLAS_ZSYR2K (const char *uplo, const char *trans, const int *n, + const int *k, const cuDoubleComplex *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb, + const cuDoubleComplex *beta, const devptr_t *devPtrC, + const int *ldc) +{ + cuDoubleComplex *A = (cuDoubleComplex *)(*devPtrA); + cuDoubleComplex *B = (cuDoubleComplex *)(*devPtrB); + cuDoubleComplex *C = (cuDoubleComplex *)(*devPtrC); + cublasZsyr2k (*uplo, *trans, *n, *k, *alpha, A, *lda, B, *ldb, *beta, + C, *ldc); +} + +void CUBLAS_DTRMM (const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const double *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb) +{ + double *A = (double *)(*devPtrA); + double *B = (double *)(*devPtrB); + cublasDtrmm (*side, *uplo, *transa, *diag, *m, *n, *alpha, A, *lda, B, + *ldb); +} + +void CUBLAS_ZTRMM (const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const cuDoubleComplex *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb) +{ + cuDoubleComplex *A = (cuDoubleComplex *)(*devPtrA); + cuDoubleComplex *B = (cuDoubleComplex *)(*devPtrB); + cublasZtrmm (*side, *uplo, *transa, *diag, *m, *n, *alpha, A, *lda, B, + *ldb); +} + + +void CUBLAS_DTRSM (const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const double *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb) +{ + double *A = (double *)*devPtrA; + double *B = (double *)*devPtrB; + cublasDtrsm (side[0], uplo[0], transa[0], diag[0], *m, *n, *alpha, + A, *lda, B, *ldb); +} + +void CUBLAS_ZTRSM (const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const cuDoubleComplex *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb) +{ + cuDoubleComplex *A = (cuDoubleComplex *)*devPtrA; + cuDoubleComplex *B = (cuDoubleComplex *)*devPtrB; + cublasZtrsm (side[0], uplo[0], transa[0], diag[0], *m, *n, *alpha, + A, *lda, B, *ldb); +} + +void CUBLAS_ZGEMM (const char *transa, const char *transb, const int *m, + const int *n, const int *k, const cuDoubleComplex *alpha, + const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrB, const int *ldb, + const cuDoubleComplex *beta, const devptr_t *devPtrC, + const int *ldc) +{ + cuDoubleComplex *A = (cuDoubleComplex *)*devPtrA; + cuDoubleComplex *B = (cuDoubleComplex *)*devPtrB; + cuDoubleComplex *C = (cuDoubleComplex *)*devPtrC; + cublasZgemm (transa[0], transb[0], *m, *n, *k, *alpha, A, *lda, B, *ldb, + *beta, C, *ldc); +} + + +void CUBLAS_ZHERK (const char *uplo, const char *trans, const int *n, + const int *k, const double *alpha, const devptr_t *devPtrA, + const int *lda, const double *beta, const devptr_t *devPtrC, + const int *ldc) +{ + cuDoubleComplex *A = (cuDoubleComplex *)(*devPtrA); + cuDoubleComplex *C = (cuDoubleComplex *)(*devPtrC); + cublasZherk (*uplo, *trans, *n, *k, *alpha, A, *lda, *beta, C, *ldc); +} + +void CUBLAS_ZHER2K (const char *uplo, const char *trans, const int *n, + const int *k, const cuDoubleComplex *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb, + const double *beta, const devptr_t *devPtrC, + const int *ldc) +{ + cuDoubleComplex *A = (cuDoubleComplex *)(*devPtrA); + cuDoubleComplex *B = (cuDoubleComplex *)(*devPtrB); + cuDoubleComplex *C = (cuDoubleComplex *)(*devPtrC); + cublasZher2k (*uplo, *trans, *n, *k, *alpha, A, *lda, B, *ldb, *beta, + C, *ldc); +} + + +void CUBLAS_ZSYMM (const char *side, const char *uplo, const int *m, + const int *n, const cuDoubleComplex *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb, + const cuDoubleComplex *beta, const devptr_t *devPtrC, const int *ldc) +{ + cuDoubleComplex *A = (cuDoubleComplex *)(*devPtrA); + cuDoubleComplex *B = (cuDoubleComplex *)(*devPtrB); + cuDoubleComplex *C = (cuDoubleComplex *)(*devPtrC); + cublasZsymm (*side, *uplo, *m, *n, *alpha, A, *lda, B, *ldb, *beta, C, + *ldc); +} + +void CUBLAS_ZHEMM (const char *side, const char *uplo, const int *m, + const int *n, const cuDoubleComplex *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb, + const cuDoubleComplex *beta, const devptr_t *devPtrC, const int *ldc) +{ + cuDoubleComplex *A = (cuDoubleComplex *)(*devPtrA); + cuDoubleComplex *B = (cuDoubleComplex *)(*devPtrB); + cuDoubleComplex *C = (cuDoubleComplex *)(*devPtrC); + cublasZhemm (*side, *uplo, *m, *n, *alpha, A, *lda, B, *ldb, *beta, C, + *ldc); +} + +#ifdef ACCELERATOR_LIBSCI +#include "libsci_acc.h" +void zgemm_acc2_ (const char *transa, const char *transb, const int *m, + const int *n, const int *k, const cuDoubleComplex *alpha, + const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrB, const int *ldb, + const cuDoubleComplex *beta, const devptr_t *devPtrC, + const int *ldc) +{ + cuDoubleComplex *A = (cuDoubleComplex *)*devPtrA; + cuDoubleComplex *B = (cuDoubleComplex *)*devPtrB; + cuDoubleComplex *C = (cuDoubleComplex *)*devPtrC; + cublasZgemm (transa[0], transb[0], *m, *n, *k, *alpha, A, *lda, B, *ldb, + *beta, C, *ldc); +} + +void zgetrf_acc2_( const int *m, const int *n, + const devptr_t *devPtrA, const int *lda, + int *ipiv, int *info ) +{ + double *A = (double *)*devPtrA; + zgetrf_acc( *m, *n, A, *lda, ipiv, info ); +} + +void zgetrs_acc2_( const char *transa, const int *m, const int *nrhs, + const devptr_t *devPtrA, const int *lda, + int *ipiv, const devptr_t *devPtrB, const int *ldb, + int *info ) +{ + double *A = (double *)*devPtrA; + double *B = (double *)*devPtrB; + zgetrs_acc( *transa, *m, *nrhs, A, *lda, + ipiv, B, *ldb, info ); +} +#endif + +#endif diff --git a/src/Accelerator/fortran.h b/src/Accelerator/fortran.h new file mode 100644 index 000000000..ec4aa2871 --- /dev/null +++ b/src/Accelerator/fortran.h @@ -0,0 +1,616 @@ +/* + * Copyright 1993-2011 NVIDIA Corporation. All rights reserved. + * + * NOTICE TO LICENSEE: + * + * This source code and/or documentation ("Licensed Deliverables") are + * subject to NVIDIA intellectual property rights under U.S. and + * international Copyright laws. + * + * These Licensed Deliverables contained herein is PROPRIETARY and + * CONFIDENTIAL to NVIDIA and is being provided under the terms and + * conditions of a form of NVIDIA software license agreement by and + * between NVIDIA and Licensee ("License Agreement") or electronically + * accepted by Licensee. Notwithstanding any terms or conditions to + * the contrary in the License Agreement, reproduction or disclosure + * of the Licensed Deliverables to any third party without the express + * written consent of NVIDIA is prohibited. + * + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE + * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. IT IS + * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. + * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED + * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, + * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY + * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY + * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THESE LICENSED DELIVERABLES. + * + * U.S. Government End Users. These Licensed Deliverables are a + * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT + * 1995), consisting of "commercial computer software" and "commercial + * computer software documentation" as such terms are used in 48 + * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government + * only as a commercial end item. Consistent with 48 C.F.R.12.212 and + * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all + * U.S. Government End Users acquire the Licensed Deliverables with + * only those rights set forth herein. + * + * Any use of the Licensed Deliverables in individual and commercial + * software must include, in the user documentation and internal + * comments to the code, the above Disclaimer and U.S. Government End + * Users Notice. + */ + +/* For now, the GPU only supports a 32-bit address space, so device pointers + can be represented as INTEGER*4 in Fortran. In the future, device pointers + may become 64-bit pointers, and will have to be represented as INTEGER*8 in + Fortran, at which point devptr_t needs to be typedef'ed as long long. +*/ +typedef size_t devptr_t; + +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus */ +int CUBLAS_INIT (void); +int CUBLAS_SHUTDOWN (void); +int CUBLAS_ALLOC (const int *n, const int *elemSize, devptr_t *devicePtr); +int CUBLAS_FREE (const devptr_t *devicePtr); +int CUBLAS_SET_VECTOR (const int *n, const int *elemSize, const void *x, + const int *incx, const devptr_t *y, const int *incy); +int CUBLAS_GET_VECTOR (const int *n, const int *elemSize, const devptr_t *x, + const int *incx, void *y, const int *incy); +int CUBLAS_SET_MATRIX (const int *rows, const int *cols, const int *elemSize, + const void *A, const int *lda, const devptr_t *B, + const int *ldb); +int CUBLAS_GET_MATRIX (const int *rows, const int *cols, const int *elemSize, + const devptr_t *A, const int *lda, void *B, const int *ldb); + +/* BLAS util */ +void CUBLAS_XERBLA (const char *srName, int *info); +int CUBLAS_GET_ERROR (void); + +#if defined(__cplusplus) +} +#endif /* __cplusplus */ + + +/* + * Fortran callable thin wrappers. Fortran application must allocate and + * deallocate GPU memory, and copy data up and down. + */ +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus */ +#if CUBLAS_FORTRAN_COMPILER==CUBLAS_G77 +double CUBLAS_SDOT (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy); +double CUBLAS_SASUM (const int *n, const devptr_t *devPtrx, const int *incx); +double CUBLAS_SNRM2 (const int *n, const devptr_t *devPtrx, const int *incx); +double CUBLAS_SCASUM (const int *n, const devptr_t *devPtrx, const int *incx); +double CUBLAS_SCNRM2 (const int *n, const devptr_t *devPtrx, const int *incx); +#else +float CUBLAS_SDOT (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy); +float CUBLAS_SASUM (const int *n, const devptr_t *devPtrx, const int *incx); +float CUBLAS_SNRM2 (const int *n, const devptr_t *devPtrx, const int *incx); +float CUBLAS_SCASUM (const int *n, const devptr_t *devPtrx, const int *incx); +float CUBLAS_SCNRM2 (const int *n, const devptr_t *devPtrx, const int *incx); +#endif +double CUBLAS_DZNRM2 (const int *n, const devptr_t *devPtrx, const int *incx); +double CUBLAS_DZASUM (const int *n, const devptr_t *devPtrx, const int *incx); + +int CUBLAS_ISAMAX (const int *n, const devptr_t *devPtrx, const int *incx); +int CUBLAS_ISAMIN (const int *n, const devptr_t *devPtrx, const int *incx); +void CUBLAS_SAXPY (const int *n, const float *alpha, const devptr_t *devPtrx, + const int *incx, const devptr_t *devPtry, const int *incy); +void CUBLAS_SCOPY (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy); +void CUBLAS_SROT (const int *n, const devptr_t *devPtrX, const int *incx, + const devptr_t *devPtrY, const int *incy, const float *sc, + const float *ss); +void CUBLAS_SROTG (float *sa, float *sb, float *sc, float *ss); +void CUBLAS_SROTM (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const float* sparam); +void CUBLAS_SROTMG (float *sd1, float *sd2, float *sx1, const float *sy1, + float* sparam); +void CUBLAS_SSCAL (const int *n, const float *alpha, const devptr_t *devPtrx, + const int *incx); +void CUBLAS_SSWAP (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy); + +void CUBLAS_CAXPY (const int *n, const cuComplex *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy); +void CUBLAS_ZAXPY (const int *n, const cuDoubleComplex *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy); +void CUBLAS_CCOPY (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy); +void CUBLAS_ZCOPY (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy); +void CUBLAS_CROT (const int *n, const devptr_t *devPtrX, const int *incx, + const devptr_t *devPtrY, const int *incy, const float *sc, + const cuComplex *cs); +void CUBLAS_ZROT (const int *n, const devptr_t *devPtrX, const int *incx, + const devptr_t *devPtrY, const int *incy, const double *sc, + const cuDoubleComplex *cs); +void CUBLAS_CROTG (cuComplex *ca, const cuComplex *cb, float *sc, + cuComplex *cs); +void CUBLAS_ZROTG (cuDoubleComplex *ca, const cuDoubleComplex *cb, double *sc, + cuDoubleComplex *cs); +void CUBLAS_CSCAL (const int *n, const cuComplex *alpha, + const devptr_t *devPtrx, const int *incx); +void CUBLAS_CSROT (const int *n, const devptr_t *devPtrX, const int *incx, + const devptr_t *devPtrY, const int *incy, const float *sc, + const float *ss); +void CUBLAS_ZDROT (const int *n, const devptr_t *devPtrX, const int *incx, + const devptr_t *devPtrY, const int *incy, const double *sc, + const double *ss); +void CUBLAS_CSSCAL (const int *n, const float *alpha, const devptr_t *devPtrx, + const int *incx); +void CUBLAS_CSWAP (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy); +void CUBLAS_ZSWAP (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy); +void CUBLAS_CTRMV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx); +#ifdef RETURN_COMPLEX +cuComplex CUBLAS_CDOTU ( const int *n, const devptr_t *devPtrx, + const int *incx, const devptr_t *devPtry, const int *incy); +#else +void CUBLAS_CDOTU (cuComplex *retVal, const int *n, const devptr_t *devPtrx, + const int *incx, const devptr_t *devPtry, const int *incy); +#endif +#ifdef RETURN_COMPLEX +cuComplex CUBLAS_CDOTC ( const int *n, const devptr_t *devPtrx, + const int *incx, const devptr_t *devPtry, const int *incy); +#else +void CUBLAS_CDOTC (cuComplex *retVal, const int *n, const devptr_t *devPtrx, + const int *incx, const devptr_t *devPtry, const int *incy); +#endif + +int CUBLAS_ICAMAX (const int *n, const devptr_t *devPtrx, const int *incx); +int CUBLAS_ICAMIN (const int *n, const devptr_t *devPtrx, const int *incx); +int CUBLAS_IZAMAX (const int *n, const devptr_t *devPtrx, const int *incx); +int CUBLAS_IZAMIN (const int *n, const devptr_t *devPtrx, const int *incx); + +double CUBLAS_DDOT (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy); +double CUBLAS_DASUM (const int *n, const devptr_t *devPtrx, const int *incx); +double CUBLAS_DNRM2 (const int *n, const devptr_t *devPtrx, const int *incx); +int CUBLAS_IDAMAX (const int *n, const devptr_t *devPtrx, const int *incx); +int CUBLAS_IDAMIN (const int *n, const devptr_t *devPtrx, const int *incx); +void CUBLAS_DAXPY (const int *n, const double *alpha, const devptr_t *devPtrx, + const int *incx, const devptr_t *devPtry, const int *incy); +void CUBLAS_DCOPY (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy); +void CUBLAS_DROT (const int *n, const devptr_t *devPtrX, const int *incx, + const devptr_t *devPtrY, const int *incy, const double *sc, + const double *ss); +void CUBLAS_DROTG (double *sa, double *sb, double *sc, double *ss); +void CUBLAS_DROTM (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const double* sparam); +void CUBLAS_DROTMG (double *sd1, double *sd2, double *sx1, const double *sy1, + double* sparam); +void CUBLAS_DSCAL (const int *n, const double *alpha, const devptr_t *devPtrx, + const int *incx); +void CUBLAS_DSWAP (const int *n, const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy); +#ifdef RETURN_COMPLEX +cuDoubleComplex CUBLAS_ZDOTU ( const int *n, const devptr_t *devPtrx, + const int *incx, const devptr_t *devPtry, const int *incy); +cuDoubleComplex CUBLAS_ZDOTC ( const int *n, const devptr_t *devPtrx, + const int *incx, const devptr_t *devPtry, const int *incy); +#else +void CUBLAS_ZDOTU (cuDoubleComplex *retVal, const int *n, const devptr_t *devPtrx, + const int *incx, const devptr_t *devPtry, const int *incy); +void CUBLAS_ZDOTC (cuDoubleComplex *retVal, const int *n, const devptr_t *devPtrx, + const int *incx, const devptr_t *devPtry, const int *incy); +#endif +void CUBLAS_ZSCAL (const int *n, const cuDoubleComplex *alpha, + const devptr_t *devPtrx, const int *incx); + +void CUBLAS_ZDSCAL (const int *n, const double *alpha, const devptr_t *devPtrx, + const int *incx); +/* BLAS2 */ +void CUBLAS_SGBMV (const char *trans, const int *m, const int *n, + const int *kl, const int *ku, const float *alpha, + const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx, const float *beta, + const devptr_t *devPtry, const int *incy); +void CUBLAS_DGBMV (const char *trans, const int *m, const int *n, + const int *kl, const int *ku, const double *alpha, + const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx, const double *beta, + const devptr_t *devPtry, const int *incy); +void CUBLAS_CGBMV (const char *trans, const int *m, const int *n, + const int *kl, const int *ku, const cuComplex *alpha, + const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx, const cuComplex *beta, + const devptr_t *devPtry, const int *incy); +void CUBLAS_ZGBMV (const char *trans, const int *m, const int *n, + const int *kl, const int *ku, const cuDoubleComplex *alpha, + const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx, const cuDoubleComplex *beta, + const devptr_t *devPtry, const int *incy); + +void CUBLAS_SGEMV (const char *trans, const int *m, const int *n, + const float *alpha, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx, const float *beta, + const devptr_t *devPtry, const int *incy); +void CUBLAS_SGER (const int *m, const int *n, const float *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const devptr_t *devPtrA, const int *lda); +void CUBLAS_SSBMV (const char *uplo, const int *n, const int *k, + const float *alpha, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx, const float *beta, + const devptr_t *devPtry, const int *incy); +void CUBLAS_DSBMV (const char *uplo, const int *n, const int *k, + const double *alpha, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx, const double *beta, + const devptr_t *devPtry, const int *incy); +void CUBLAS_CHBMV (const char *uplo, const int *n, const int *k, + const cuComplex *alpha, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx, const cuComplex *beta, + const devptr_t *devPtry, const int *incy); +void CUBLAS_ZHBMV (const char *uplo, const int *n, const int *k, + const cuDoubleComplex *alpha, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx, const cuDoubleComplex *beta, + const devptr_t *devPtry, const int *incy); +void CUBLAS_SSPMV (const char *uplo, const int *n, const float *alpha, + const devptr_t *devPtrAP, const devptr_t *devPtrx, + const int *incx, const float *beta, const devptr_t *devPtry, + const int *incy); +void CUBLAS_DSPMV (const char *uplo, const int *n, const double *alpha, + const devptr_t *devPtrAP, const devptr_t *devPtrx, + const int *incx, const double *beta, const devptr_t *devPtry, + const int *incy); +void CUBLAS_CHPMV (const char *uplo, const int *n, const cuComplex *alpha, + const devptr_t *devPtrAP, const devptr_t *devPtrx, + const int *incx, const cuComplex *beta, const devptr_t *devPtry, + const int *incy); +void CUBLAS_ZHPMV (const char *uplo, const int *n, const cuDoubleComplex *alpha, + const devptr_t *devPtrAP, const devptr_t *devPtrx, + const int *incx, const cuDoubleComplex *beta, const devptr_t *devPtry, + const int *incy); +void CUBLAS_SSPR (const char *uplo, const int *n, const float *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtrAP); +void CUBLAS_DSPR (const char *uplo, const int *n, const double *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtrAP); +void CUBLAS_CHPR (const char *uplo, const int *n, const float *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtrAP); +void CUBLAS_ZHPR (const char *uplo, const int *n, const double *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtrAP); +void CUBLAS_SSPR2 (const char *uplo, const int *n, const float *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const devptr_t *devPtrAP); +void CUBLAS_DSPR2 (const char *uplo, const int *n, const double *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const devptr_t *devPtrAP); +void CUBLAS_CHPR2 (const char *uplo, const int *n, const cuComplex *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const devptr_t *devPtrAP); +void CUBLAS_ZHPR2 (const char *uplo, const int *n, const cuDoubleComplex *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const devptr_t *devPtrAP); +void CUBLAS_SSYMV (const char *uplo, const int *n, const float *alpha, + const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx, const float *beta, + const devptr_t *devPtry, const int *incy); +void CUBLAS_DSYMV (const char *uplo, const int *n, const double *alpha, + const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx, const double *beta, + const devptr_t *devPtry, const int *incy); +void CUBLAS_CHEMV (const char *uplo, const int *n, const cuComplex *alpha, + const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx, const cuComplex *beta, + const devptr_t *devPtry, const int *incy); +void CUBLAS_ZHEMV (const char *uplo, const int *n, const cuDoubleComplex *alpha, + const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx, const cuDoubleComplex *beta, + const devptr_t *devPtry, const int *incy); + +void CUBLAS_SSYR (const char *uplo, const int *n, const float *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtrA, const int *lda); +void CUBLAS_SSYR2 (const char *uplo, const int *n, const float *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const devptr_t *devPtrA, const int *lda); +void CUBLAS_DSYR2 (const char *uplo, const int *n, const double *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const devptr_t *devPtrA, const int *lda); +void CUBLAS_CHER2 (const char *uplo, const int *n, const cuComplex *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const devptr_t *devPtrA, const int *lda); +void CUBLAS_ZHER2 (const char *uplo, const int *n, const cuDoubleComplex *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const devptr_t *devPtrA, const int *lda); +void CUBLAS_STBMV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrx, const int *incx); +void CUBLAS_DTBMV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrx, const int *incx); +void CUBLAS_CTBMV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrx, const int *incx); +void CUBLAS_ZTBMV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrx, const int *incx); +void CUBLAS_STBSV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrx, const int *incx); +void CUBLAS_DTBSV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrx, const int *incx); +void CUBLAS_CTBSV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrx, const int *incx); +void CUBLAS_ZTBSV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrx, const int *incx); +void CUBLAS_STPMV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrAP, + const devptr_t *devPtrx, const int *incx); +void CUBLAS_DTPMV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrAP, + const devptr_t *devPtrx, const int *incx); +void CUBLAS_CTPMV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrAP, + const devptr_t *devPtrx, const int *incx); +void CUBLAS_ZTPMV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrAP, + const devptr_t *devPtrx, const int *incx); +void CUBLAS_STPSV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrAP, + const devptr_t *devPtrx, const int *incx); +void CUBLAS_DTPSV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrAP, + const devptr_t *devPtrx, const int *incx); +void CUBLAS_CTPSV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrAP, + const devptr_t *devPtrx, const int *incx); +void CUBLAS_ZTPSV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrAP, + const devptr_t *devPtrx, const int *incx); +void CUBLAS_STRMV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx); +void CUBLAS_DTRMV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx); +void CUBLAS_ZTRMV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx); +void CUBLAS_STRSV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx); +void CUBLAS_DGEMV (const char *trans, const int *m, const int *n, + const double *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrx, const int *incx, + const double *beta, const devptr_t *devPtry, + const int *incy); +void CUBLAS_ZGEMV (const char *trans, const int *m, const int *n, + const cuDoubleComplex *alpha, const devptr_t *A, + const int *lda, const devptr_t *x, const int *incx, + const cuDoubleComplex *beta, devptr_t *y, + const int *incy); +void CUBLAS_DGER (const int *m, const int *n, const double *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const devptr_t *devPtrA, const int *lda); +void CUBLAS_CGERU(const int *m, const int *n, const cuComplex *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const devptr_t *devPtrA, const int *lda); +void CUBLAS_CGERC(const int *m, const int *n, const cuComplex *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const devptr_t *devPtrA, const int *lda); +void CUBLAS_ZGERU(const int *m, const int *n, const cuDoubleComplex *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const devptr_t *devPtrA, const int *lda); +void CUBLAS_ZGERC(const int *m, const int *n, const cuDoubleComplex *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtry, const int *incy, + const devptr_t *devPtrA, const int *lda); + + +void CUBLAS_DSYR (const char *uplo, const int *n, const double *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtrA, const int *lda); +void CUBLAS_CHER (const char *uplo, const int *n, const float *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtrA, const int *lda); +void CUBLAS_ZHER (const char *uplo, const int *n, const double *alpha, + const devptr_t *devPtrx, const int *incx, + const devptr_t *devPtrA, const int *lda); + +void CUBLAS_DTRSV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx); +void CUBLAS_CTRSV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx); +void CUBLAS_ZTRSV (const char *uplo, const char *trans, const char *diag, + const int *n, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrx, const int *incx); + +void CUBLAS_CGEMV (const char *trans, const int *m, const int *n, + const cuComplex *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrx, const int *incx, + const cuComplex *beta, devptr_t *devPtry, + const int *incy); + +/* BLAS 3 */ +void CUBLAS_SGEMM (const char *transa, const char *transb, const int *m, + const int *n, const int *k, const float *alpha, + const devptr_t *A, const int *lda, const devptr_t *B, + const int *ldb, const float *beta, const devptr_t *C, + const int *ldc); +void CUBLAS_SSYMM (const char *side, const char *uplo, const int *m, + const int *n, const float *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb, + const float *beta, const devptr_t *devPtrC, const int *ldc); +void CUBLAS_SSYR2K (const char *uplo, const char *trans, const int *n, + const int *k, const float *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb, + const float *beta, const devptr_t *devPtrC, const int *ldc); +void CUBLAS_SSYRK (const char *uplo, const char *trans, const int *n, + const int *k, const float *alpha, const devptr_t *devPtrA, + const int *lda, const float *beta, const devptr_t *devPtrC, + const int *ldc); +void CUBLAS_STRMM (const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const float *alpha, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrB, const int *ldb); +void CUBLAS_CTRMM (const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const cuComplex *alpha, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrB, const int *ldb); +void CUBLAS_STRSM (const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const float *alpha, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrB, const int *ldb); + +void CUBLAS_CGEMM (const char *transa, const char *transb, const int *m, + const int *n, const int *k, const cuComplex *alpha, + const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrB, const int *ldb, + const cuComplex *beta, const devptr_t *devPtrC, + const int *ldc); +void CUBLAS_DGEMM (const char *transa, const char *transb, const int *m, + const int *n, const int *k, const double *alpha, + const devptr_t *A, const int *lda, const devptr_t *B, + const int *ldb, const double *beta, const devptr_t *C, + const int *ldc); + +void CUBLAS_DSYMM (const char *side, const char *uplo, const int *m, + const int *n, const double *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb, + const double *beta, const devptr_t *devPtrC, + const int *ldc); +void CUBLAS_CSYMM (const char *side, const char *uplo, const int *m, + const int *n, const cuComplex *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb, + const cuComplex *beta, const devptr_t *devPtrC, const int *ldc); + +void CUBLAS_CHEMM (const char *side, const char *uplo, const int *m, + const int *n, const cuComplex *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb, + const cuComplex *beta, const devptr_t *devPtrC, const int *ldc); + +void CUBLAS_DSYR2K (const char *uplo, const char *trans, const int *n, + const int *k, const double *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb, + const double *beta, const devptr_t *devPtrC, + const int *ldc); +void CUBLAS_DSYRK (const char *uplo, const char *trans, const int *n, + const int *k, const double *alpha, const devptr_t *devPtrA, + const int *lda, const double *beta, const devptr_t *devPtrC, + const int *ldc); +void CUBLAS_CSYRK (const char *uplo, const char *trans, const int *n, + const int *k, const cuComplex *alpha, + const devptr_t *devPtrA, const int *lda, + const cuComplex *beta, const devptr_t *devPtrC, + const int *ldc); +void CUBLAS_CSYR2K (const char *uplo, const char *trans, const int *n, + const int *k, const cuComplex *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb, + const cuComplex *beta, const devptr_t *devPtrC, + const int *ldc); +void CUBLAS_ZSYRK (const char *uplo, const char *trans, const int *n, + const int *k, const cuDoubleComplex *alpha, + const devptr_t *devPtrA, const int *lda, + const cuDoubleComplex *beta, const devptr_t *devPtrC, + const int *ldc); +void CUBLAS_ZSYR2K (const char *uplo, const char *trans, const int *n, + const int *k, const cuDoubleComplex *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb, + const cuDoubleComplex *beta, const devptr_t *devPtrC, + const int *ldc); +void CUBLAS_CHERK (const char *uplo, const char *trans, const int *n, + const int *k, const float *alpha, + const devptr_t *devPtrA, const int *lda, + const float *beta, const devptr_t *devPtrC, + const int *ldc); +void CUBLAS_CHER2K (const char *uplo, const char *trans, const int *n, + const int *k, const cuComplex *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb, + const float *beta, const devptr_t *devPtrC, + const int *ldc); +void CUBLAS_ZHERK (const char *uplo, const char *trans, const int *n, + const int *k, const double *alpha, + const devptr_t *devPtrA, const int *lda, + const double *beta, const devptr_t *devPtrC, + const int *ldc); +void CUBLAS_ZHER2K (const char *uplo, const char *trans, const int *n, + const int *k, const cuDoubleComplex *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb, + const double *beta, const devptr_t *devPtrC, + const int *ldc); +void CUBLAS_DTRMM (const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const double *alpha, const devptr_t *devPtrA, + const int *lda, + const devptr_t *devPtrB, const int *ldb); +void CUBLAS_ZTRMM (const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const cuDoubleComplex *alpha, const devptr_t *devPtrA, + const int *lda, + const devptr_t *devPtrB, const int *ldb); +void CUBLAS_DTRSM (const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const double *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb); +void CUBLAS_CTRSM ( const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const cuComplex *alpha, const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrB, const int *ldb); +void CUBLAS_ZTRSM (const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const cuDoubleComplex *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb); + +void CUBLAS_ZGEMM (const char *transa, const char *transb, const int *m, + const int *n, const int *k, const cuDoubleComplex *alpha, + const devptr_t *devPtrA, const int *lda, + const devptr_t *devPtrB, const int *ldb, + const cuDoubleComplex *beta, const devptr_t *devPtrC, + const int *ldc); +void CUBLAS_ZSYMM (const char *side, const char *uplo, const int *m, + const int *n, const cuDoubleComplex *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb, + const cuDoubleComplex *beta, const devptr_t *devPtrC, const int *ldc); + +void CUBLAS_ZHEMM (const char *side, const char *uplo, const int *m, + const int *n, const cuDoubleComplex *alpha, const devptr_t *devPtrA, + const int *lda, const devptr_t *devPtrB, const int *ldb, + const cuDoubleComplex *beta, const devptr_t *devPtrC, const int *ldc); + +#if defined(__cplusplus) +} +#endif /* __cplusplus */ diff --git a/src/Accelerator/fortran_common.h b/src/Accelerator/fortran_common.h new file mode 100644 index 000000000..f1f90a696 --- /dev/null +++ b/src/Accelerator/fortran_common.h @@ -0,0 +1,400 @@ +/* + * Copyright 1993-2011 NVIDIA Corporation. All rights reserved. + * + * NOTICE TO LICENSEE: + * + * This source code and/or documentation ("Licensed Deliverables") are + * subject to NVIDIA intellectual property rights under U.S. and + * international Copyright laws. + * + * These Licensed Deliverables contained herein is PROPRIETARY and + * CONFIDENTIAL to NVIDIA and is being provided under the terms and + * conditions of a form of NVIDIA software license agreement by and + * between NVIDIA and Licensee ("License Agreement") or electronically + * accepted by Licensee. Notwithstanding any terms or conditions to + * the contrary in the License Agreement, reproduction or disclosure + * of the Licensed Deliverables to any third party without the express + * written consent of NVIDIA is prohibited. + * + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE + * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. IT IS + * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. + * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED + * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, + * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY + * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY + * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THESE LICENSED DELIVERABLES. + * + * U.S. Government End Users. These Licensed Deliverables are a + * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT + * 1995), consisting of "commercial computer software" and "commercial + * computer software documentation" as such terms are used in 48 + * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government + * only as a commercial end item. Consistent with 48 C.F.R.12.212 and + * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all + * U.S. Government End Users acquire the Licensed Deliverables with + * only those rights set forth herein. + * + * Any use of the Licensed Deliverables in individual and commercial + * software must include, in the user documentation and internal + * comments to the code, the above Disclaimer and U.S. Government End + * Users Notice. + */ + +#define CUBLAS_G77 1 +#define CUBLAS_INTEL_FORTRAN 2 +#define CUBLAS_G95 3 + +/* Default to g77 on Linux, and Intel Fortran on Win32 */ +#if defined(_WIN32) +#define CUBLAS_FORTRAN_COMPILER CUBLAS_INTEL_FORTRAN +#elif defined(__linux) +#define CUBLAS_FORTRAN_COMPILER CUBLAS_G95 +#elif defined(__APPLE__) +#define CUBLAS_FORTRAN_COMPILER CUBLAS_G95 +#define RETURN_COMPLEX 1 +#else +#error unsupported platform +#endif + +#if (CUBLAS_FORTRAN_COMPILER==CUBLAS_G77) || (CUBLAS_FORTRAN_COMPILER==CUBLAS_G95) +/* NOTE: Must use -fno-second-underscore when building Fortran source with g77 + * g77 invocation may not use -fno-f2c, which forces different return + * type conventions than the one used below + */ +#define CUBLAS_INIT cublas_init_ +#define CUBLAS_SHUTDOWN cublas_shutdown_ +#define CUBLAS_ALLOC cublas_alloc_ +#define CUBLAS_FREE cublas_free_ +#define CUBLAS_SET_VECTOR cublas_set_vector_ +#define CUBLAS_GET_VECTOR cublas_get_vector_ +#define CUBLAS_SET_MATRIX cublas_set_matrix_ +#define CUBLAS_GET_MATRIX cublas_get_matrix_ +#define CUBLAS_GET_ERROR cublas_get_error_ +#define CUBLAS_XERBLA cublas_xerbla_ +#define CUBLAS_ISAMAX cublas_isamax_ +#define CUBLAS_ISAMIN cublas_isamin_ +#define CUBLAS_SASUM cublas_sasum_ +#define CUBLAS_SAXPY cublas_saxpy_ +#define CUBLAS_SCOPY cublas_scopy_ +#define CUBLAS_SDOT cublas_sdot_ +#define CUBLAS_SNRM2 cublas_snrm2_ +#define CUBLAS_SROT cublas_srot_ +#define CUBLAS_SROTG cublas_srotg_ +#define CUBLAS_SROTM cublas_srotm_ +#define CUBLAS_SROTMG cublas_srotmg_ +#define CUBLAS_SSCAL cublas_sscal_ +#define CUBLAS_SSWAP cublas_sswap_ +#define CUBLAS_CAXPY cublas_caxpy_ +#define CUBLAS_CCOPY cublas_ccopy_ +#define CUBLAS_CROT cublas_crot_ +#define CUBLAS_CROTG cublas_crotg_ +#define CUBLAS_CSCAL cublas_cscal_ +#define CUBLAS_CSROT cublas_csrot_ +#define CUBLAS_CSSCAL cublas_csscal_ +#define CUBLAS_CSWAP cublas_cswap_ +#define CUBLAS_CTRMV cublas_ctrmv_ +#define CUBLAS_CDOTU cublas_cdotu_ +#define CUBLAS_CDOTC cublas_cdotc_ +#define CUBLAS_ICAMAX cublas_icamax_ +#define CUBLAS_SCASUM cublas_scasum_ +#define CUBLAS_SCNRM2 cublas_scnrm2_ +#define CUBLAS_SGBMV cublas_sgbmv_ +#define CUBLAS_SGEMV cublas_sgemv_ +#define CUBLAS_SGER cublas_sger_ +#define CUBLAS_SSBMV cublas_ssbmv_ +#define CUBLAS_SSPMV cublas_sspmv_ +#define CUBLAS_SSPR cublas_sspr_ +#define CUBLAS_SSPR2 cublas_sspr2_ +#define CUBLAS_SSYMV cublas_ssymv_ +#define CUBLAS_SSYR cublas_ssyr_ +#define CUBLAS_SSYR2 cublas_ssyr2_ +#define CUBLAS_STBMV cublas_stbmv_ +#define CUBLAS_STBSV cublas_stbsv_ +#define CUBLAS_STPMV cublas_stpmv_ +#define CUBLAS_STPSV cublas_stpsv_ +#define CUBLAS_STRMV cublas_strmv_ +#define CUBLAS_STRSV cublas_strsv_ +#define CUBLAS_SGEMM cublas_sgemm_ +#define CUBLAS_SSYMM cublas_ssymm_ +#define CUBLAS_SSYR2K cublas_ssyr2k_ +#define CUBLAS_SSYRK cublas_ssyrk_ +#define CUBLAS_STRMM cublas_strmm_ +#define CUBLAS_STRSM cublas_strsm_ +#define CUBLAS_CGEMM cublas_cgemm_ +#define CUBLAS_CHEMM cublas_chemm_ +#define CUBLAS_CSYMM cublas_csymm_ +#define CUBLAS_CTRMM cublas_ctrmm_ +#define CUBLAS_CTRSM cublas_ctrsm_ +#define CUBLAS_CHERK cublas_cherk_ +#define CUBLAS_CSYRK cublas_csyrk_ +#define CUBLAS_CHER2K cublas_cher2k_ +#define CUBLAS_CSYR2K cublas_csyr2k_ +#define CUBLAS_IDAMAX cublas_idamax_ +#define CUBLAS_IDAMIN cublas_idamin_ +#define CUBLAS_DASUM cublas_dasum_ +#define CUBLAS_DAXPY cublas_daxpy_ +#define CUBLAS_DCOPY cublas_dcopy_ +#define CUBLAS_DDOT cublas_ddot_ +#define CUBLAS_DNRM2 cublas_dnrm2_ +#define CUBLAS_DROT cublas_drot_ +#define CUBLAS_DROTG cublas_drotg_ +#define CUBLAS_DROTM cublas_drotm_ +#define CUBLAS_DROTMG cublas_drotmg_ +#define CUBLAS_DSCAL cublas_dscal_ +#define CUBLAS_DSWAP cublas_dswap_ +#define CUBLAS_ZAXPY cublas_zaxpy_ +#define CUBLAS_ZCOPY cublas_zcopy_ +#define CUBLAS_ZROT cublas_zrot_ +#define CUBLAS_ZROTG cublas_zrotg_ +#define CUBLAS_ZSCAL cublas_zscal_ +#define CUBLAS_ZDROT cublas_zdrot_ +#define CUBLAS_ZDSCAL cublas_zdscal_ +#define CUBLAS_ZSWAP cublas_zswap_ +#define CUBLAS_ZDOTU cublas_zdotu_ +#define CUBLAS_ZDOTC cublas_zdotc_ +#define CUBLAS_IZAMAX cublas_izamax_ +#define CUBLAS_DZASUM cublas_dzasum_ +#define CUBLAS_DZNRM2 cublas_dznrm2_ +#define CUBLAS_DGBMV cublas_dgbmv_ +#define CUBLAS_DGEMV cublas_dgemv_ +#define CUBLAS_ZGEMV cublas_zgemv_ +#define CUBLAS_DGER cublas_dger_ +#define CUBLAS_DSBMV cublas_dsbmv_ +#define CUBLAS_DSPMV cublas_dspmv_ +#define CUBLAS_DSPR cublas_dspr_ +#define CUBLAS_DSPR2 cublas_dspr2_ +#define CUBLAS_DSYMV cublas_dsymv_ +#define CUBLAS_DSYR cublas_dsyr_ +#define CUBLAS_DSYR2 cublas_dsyr2_ +#define CUBLAS_DTBMV cublas_dtbmv_ +#define CUBLAS_DTBSV cublas_dtbsv_ +#define CUBLAS_DTPMV cublas_dtpmv_ +#define CUBLAS_DTPSV cublas_dtpsv_ +#define CUBLAS_DTRMV cublas_dtrmv_ +#define CUBLAS_DTRSV cublas_dtrsv_ +#define CUBLAS_DGEMM cublas_dgemm_ +#define CUBLAS_DSYMM cublas_dsymm_ +#define CUBLAS_DSYR2K cublas_dsyr2k_ +#define CUBLAS_DSYRK cublas_dsyrk_ +#define CUBLAS_ZSYRK cublas_zsyrk_ +#define CUBLAS_DTRMM cublas_dtrmm_ +#define CUBLAS_DTRSM cublas_dtrsm_ +#define CUBLAS_ZGEMM cublas_zgemm_ +#define CUBLAS_ZHEMM cublas_zhemm_ +#define CUBLAS_ZSYMM cublas_zsymm_ +#define CUBLAS_ZTRMM cublas_ztrmm_ +#define CUBLAS_ZTRSM cublas_ztrsm_ +#define CUBLAS_ZHERK cublas_zherk_ +#define CUBLAS_ZSYRK cublas_zsyrk_ +#define CUBLAS_ZHER2K cublas_zher2k_ +#define CUBLAS_ZSYR2K cublas_zsyr2k_ + +#define CUBLAS_CGEMV cublas_cgemv_ +#define CUBLAS_CGBMV cublas_cgbmv_ +#define CUBLAS_CHEMV cublas_chemv_ +#define CUBLAS_CHBMV cublas_chbmv_ +#define CUBLAS_CHPMV cublas_chpmv_ +#define CUBLAS_CTBMV cublas_ctbmv_ +#define CUBLAS_CTPMV cublas_ctpmv_ +#define CUBLAS_CTRSV cublas_ctrsv_ +#define CUBLAS_CTBSV cublas_ctbsv_ +#define CUBLAS_CTPSV cublas_ctpsv_ +#define CUBLAS_CGERC cublas_cgerc_ +#define CUBLAS_CGERU cublas_cgeru_ +#define CUBLAS_CHPR cublas_chpr_ +#define CUBLAS_CHPR2 cublas_chpr2_ +#define CUBLAS_CHER cublas_cher_ +#define CUBLAS_CHER2 cublas_cher2_ + +// stubs for zblat2 +#define CUBLAS_ZGBMV cublas_zgbmv_ +#define CUBLAS_ZHEMV cublas_zhemv_ +#define CUBLAS_ZHBMV cublas_zhbmv_ +#define CUBLAS_ZHPMV cublas_zhpmv_ +#define CUBLAS_ZTRMV cublas_ztrmv_ +#define CUBLAS_ZTBMV cublas_ztbmv_ +#define CUBLAS_ZTPMV cublas_ztpmv_ +#define CUBLAS_ZTRSV cublas_ztrsv_ +#define CUBLAS_ZTBSV cublas_ztbsv_ +#define CUBLAS_ZTPSV cublas_ztpsv_ +#define CUBLAS_ZGERC cublas_zgerc_ +#define CUBLAS_ZGERU cublas_zgeru_ +#define CUBLAS_ZHER cublas_zher_ +#define CUBLAS_ZHPR cublas_zhpr_ +#define CUBLAS_ZHER2 cublas_zher2_ +#define CUBLAS_ZHPR2 cublas_zhpr2_ + +#elif CUBLAS_FORTRAN_COMPILER==CUBLAS_INTEL_FORTRAN + +#define CUBLAS_INIT CUBLAS_INIT +#define CUBLAS_SHUTDOWN CUBLAS_SHUTDOWN +#define CUBLAS_ALLOC CUBLAS_ALLOC +#define CUBLAS_FREE CUBLAS_FREE +#define CUBLAS_SET_VECTOR CUBLAS_SET_VECTOR +#define CUBLAS_GET_VECTOR CUBLAS_GET_VECTOR +#define CUBLAS_SET_MATRIX CUBLAS_SET_MATRIX +#define CUBLAS_GET_MATRIX CUBLAS_GET_MATRIX +#define CUBLAS_GET_ERROR CUBLAS_GET_ERROR +#define CUBLAS_XERBLA CUBLAS_XERBLA +#define CUBLAS_ISAMAX CUBLAS_ISAMAX +#define CUBLAS_ISAMIN CUBLAS_ISAMIN +#define CUBLAS_SASUM CUBLAS_SASUM +#define CUBLAS_SAXPY CUBLAS_SAXPY +#define CUBLAS_SCOPY CUBLAS_SCOPY +#define CUBLAS_SDOT CUBLAS_SDOT +#define CUBLAS_SNRM2 CUBLAS_SNRM2 +#define CUBLAS_SROT CUBLAS_SROT +#define CUBLAS_SROTG CUBLAS_SROTG +#define CUBLAS_SROTM CUBLAS_SROTM +#define CUBLAS_SROTMG CUBLAS_SROTMG +#define CUBLAS_SSCAL CUBLAS_SSCAL +#define CUBLAS_SSWAP CUBLAS_SSWAP +#define CUBLAS_CAXPY CUBLAS_CAXPY +#define CUBLAS_CCOPY CUBLAS_CCOPY +#define CUBLAS_ZCOPY CUBLAS_ZCOPY +#define CUBLAS_CROT CUBLAS_CROT +#define CUBLAS_CROTG CUBLAS_CROTG +#define CUBLAS_CSCAL CUBLAS_CSCAL +#define CUBLAS_CSROT CUBLAS_CSROT +#define CUBLAS_CSSCAL CUBLAS_CSSCAL +#define CUBLAS_CSWAP CUBLAS_CSWAP +#define CUBLAS_ZSWAP CUBLAS_ZSWAP +#define CUBLAS_CTRMV CUBLAS_CTRMV +#define CUBLAS_CDOTU CUBLAS_CDOTU +#define CUBLAS_CDOTC CUBLAS_CDOTC +#define CUBLAS_ICAMAX CUBLAS_ICAMAX +#define CUBLAS_SCASUM CUBLAS_SCASUM +#define CUBLAS_SCNRM2 CUBLAS_SCNRM2 +#define CUBLAS_SGBMV CUBLAS_SGBMV +#define CUBLAS_SGEMV CUBLAS_SGEMV +#define CUBLAS_SGER CUBLAS_SGER +#define CUBLAS_SSBMV CUBLAS_SSBMV +#define CUBLAS_SSPMV CUBLAS_SSPMV +#define CUBLAS_SSPR CUBLAS_SSPR +#define CUBLAS_SSPR2 CUBLAS_SSPR2 +#define CUBLAS_SSYMV CUBLAS_SSYMV +#define CUBLAS_SSYR CUBLAS_SSYR +#define CUBLAS_SSYR2 CUBLAS_SSYR2 +#define CUBLAS_STBMV CUBLAS_STBMV +#define CUBLAS_STBSV CUBLAS_STBSV +#define CUBLAS_STPMV CUBLAS_STPMV +#define CUBLAS_STPSV CUBLAS_STPSV +#define CUBLAS_STRMV CUBLAS_STRMV +#define CUBLAS_STRSV CUBLAS_STRSV +#define CUBLAS_SGEMM CUBLAS_SGEMM +#define CUBLAS_SSYMM CUBLAS_SSYMM +#define CUBLAS_SSYR2K CUBLAS_SSYR2K +#define CUBLAS_SSYRK CUBLAS_SSYRK +#define CUBLAS_STRMM CUBLAS_STRMM +#define CUBLAS_STRSM CUBLAS_STRSM +#define CUBLAS_CGEMM CUBLAS_CGEMM +#define CUBLAS_CHEMM CUBLAS_CHEMM +#define CUBLAS_CSYMM CUBLAS_CSYMM +#define CUBLAS_CTRMM CUBLAS_CTRMM +#define CUBLAS_CTRSM CUBLAS_CTRSM +#define CUBLAS_CHERK CUBLAS_CHERK +#define CUBLAS_CSYRK CUBLAS_CSYRK +#define CUBLAS_CHER2K CUBLAS_CHER2K +#define CUBLAS_CSYR2K CUBLAS_CSYR2K +#define CUBLAS_IDAMAX CUBLAS_IDAMAX +#define CUBLAS_IDAMIN CUBLAS_IDAMIN +#define CUBLAS_DASUM CUBLAS_DASUM +#define CUBLAS_DAXPY CUBLAS_DAXPY +#define CUBLAS_DCOPY CUBLAS_DCOPY +#define CUBLAS_DDOT CUBLAS_DDOT +#define CUBLAS_DNRM2 CUBLAS_DNRM2 +#define CUBLAS_DROT CUBLAS_DROT +#define CUBLAS_DROTG CUBLAS_DROTG +#define CUBLAS_DROTM CUBLAS_DROTM +#define CUBLAS_DROTMG CUBLAS_DROTMG +#define CUBLAS_DSCAL CUBLAS_DSCAL +#define CUBLAS_DSWAP CUBLAS_DSWAP +#define CUBLAS_ZAXPY CUBLAS_ZAXPY +#define CUBLAS_ZCOPY CUBLAS_ZCOPY +#define CUBLAS_ZROT CUBLAS_ZROT +#define CUBLAS_ZROTG CUBLAS_ZROTG +#define CUBLAS_ZSCAL CUBLAS_ZSCAL +#define CUBLAS_ZDROT CUBLAS_ZDROT +#define CUBLAS_ZDSCAL CUBLAS_ZDSCAL +#define CUBLAS_ZSWAP CUBLAS_ZSWAP +#define CUBLAS_ZDOTU CUBLAS_ZDOTU +#define CUBLAS_ZDOTC CUBLAS_ZDOTC +#define CUBLAS_IZAMAX CUBLAS_IZAMAX +#define CUBLAS_DZASUM CUBLAS_DZASUM +#define CUBLAS_DZNRM2 CUBLAS_DZNRM2 +#define CUBLAS_DGBMV CUBLAS_DGBMV +#define CUBLAS_DGEMV CUBLAS_DGEMV +#define CUBLAS_ZGEMV CUBLAS_ZGEMV +#define CUBLAS_DGER CUBLAS_DGER +#define CUBLAS_DSBMV CUBLAS_DSBMV +#define CUBLAS_DSPMV CUBLAS_DSPMV +#define CUBLAS_DSPR CUBLAS_DSPR +#define CUBLAS_DSPR2 CUBLAS_DSPR2 +#define CUBLAS_DSYMV CUBLAS_DSYMV +#define CUBLAS_DSYR CUBLAS_DSYR +#define CUBLAS_DSYR2 CUBLAS_DSYR2 +#define CUBLAS_DTBMV CUBLAS_DTBMV +#define CUBLAS_DTBSV CUBLAS_DTBSV +#define CUBLAS_DTPMV CUBLAS_DTPMV +#define CUBLAS_DTPSV CUBLAS_DTPSV +#define CUBLAS_DTRMV CUBLAS_DTRMV +#define CUBLAS_DTRSV CUBLAS_DTRSV +#define CUBLAS_DGEMM CUBLAS_DGEMM +#define CUBLAS_DSYMM CUBLAS_DSYMM +#define CUBLAS_DSYR2K CUBLAS_DSYR2K +#define CUBLAS_ZSYRK CUBLAS_ZSYRK +#define CUBLAS_DTRMM CUBLAS_DTRMM +#define CUBLAS_DTRSM CUBLAS_DTRSM +#define CUBLAS_ZGEMM CUBLAS_ZGEMM +#define CUBLAS_ZHEMM CUBLAS_ZHEMM +#define CUBLAS_ZSYMM CUBLAS_ZSYMM +#define CUBLAS_ZTRMM CUBLAS_ZTRMM +#define CUBLAS_ZTRSM CUBLAS_ZTRSM +#define CUBLAS_ZHERK CUBLAS_ZHERK +#define CUBLAS_ZSYRK CUBLAS_ZSYRK +#define CUBLAS_ZHER2K CUBLAS_ZHER2K +#define CUBLAS_ZSYR2K CUBLAS_ZSYR2K + +#define CUBLAS_CGEMV CUBLAS_CGEMV +#define CUBLAS_CGBMV CUBLAS_CGBMV +#define CUBLAS_CHEMV CUBLAS_CHEMV +#define CUBLAS_CHBMV CUBLAS_CHBMV +#define CUBLAS_CHPMV CUBLAS_CHPMV +#define CUBLAS_CTBMV CUBLAS_CTBMV +#define CUBLAS_CTPMV CUBLAS_CTPMV +#define CUBLAS_CTRSV CUBLAS_CTRSV +#define CUBLAS_CTBSV CUBLAS_CTBSV +#define CUBLAS_CTPSV CUBLAS_CTPSV +#define CUBLAS_CGERC CUBLAS_CGERC +#define CUBLAS_CGERU CUBLAS_CGERU +#define CUBLAS_CHPR CUBLAS_CHPR + + +// stubs for zblat2 +#define CUBLAS_ZGBMV CUBLAS_ZGBMV +#define CUBLAS_ZHEMV CUBLAS_ZHEMV +#define CUBLAS_ZHBMV CUBLAS_ZHBMV +#define CUBLAS_ZHPMV CUBLAS_ZHPMV +#define CUBLAS_ZTRMV CUBLAS_ZTRMV +#define CUBLAS_ZTBMV CUBLAS_ZTBMV +#define CUBLAS_ZTPMV CUBLAS_ZTPMV +#define CUBLAS_ZTRSV CUBLAS_ZTRSV +#define CUBLAS_ZTBSV CUBLAS_ZTBSV +#define CUBLAS_ZTPSV CUBLAS_ZTPSV +#define CUBLAS_ZGERC CUBLAS_ZGERC +#define CUBLAS_ZGERU CUBLAS_ZGERU +#define CUBLAS_ZHER CUBLAS_ZHER +#define CUBLAS_ZHPR CUBLAS_ZHPR +#define CUBLAS_ZHER2 CUBLAS_ZHER2 +#define CUBLAS_ZHPR2 CUBLAS_ZHPR2 + +#else +#error unsupported Fortran compiler +#endif diff --git a/src/Accelerator/fortran_thunking.c b/src/Accelerator/fortran_thunking.c new file mode 100644 index 000000000..001841d5e --- /dev/null +++ b/src/Accelerator/fortran_thunking.c @@ -0,0 +1,6488 @@ +/* + * Copyright 1993-2012 NVIDIA Corporation. All rights reserved. + * + * NOTICE TO LICENSEE: + * + * This source code and/or documentation ("Licensed Deliverables") are + * subject to NVIDIA intellectual property rights under U.S. and + * international Copyright laws. + * + * These Licensed Deliverables contained herein is PROPRIETARY and + * CONFIDENTIAL to NVIDIA and is being provided under the terms and + * conditions of a form of NVIDIA software license agreement by and + * between NVIDIA and Licensee ("License Agreement") or electronically + * accepted by Licensee. Notwithstanding any terms or conditions to + * the contrary in the License Agreement, reproduction or disclosure + * of the Licensed Deliverables to any third party without the express + * written consent of NVIDIA is prohibited. + * + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE + * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. IT IS + * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. + * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED + * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, + * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY + * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY + * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THESE LICENSED DELIVERABLES. + * + * U.S. Government End Users. These Licensed Deliverables are a + * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT + * 1995), consisting of "commercial computer software" and "commercial + * computer software documentation" as such terms are used in 48 + * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government + * only as a commercial end item. Consistent with 48 C.F.R.12.212 and + * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all + * U.S. Government End Users acquire the Licensed Deliverables with + * only those rights set forth herein. + * + * Any use of the Licensed Deliverables in individual and commercial + * software must include, in the user documentation and internal + * comments to the code, the above Disclaimer and U.S. Government End + * Users Notice. + */ + +/* + * This file contains example Fortran bindings for the CUBLAS library, These + * bindings have been tested with Intel Fortran 9.0 on 32-bit and 64-bit + * Windows, and with g77 3.4.5 on 32-bit and 64-bit Linux. They will likely + * have to be adjusted for other Fortran compilers and platforms. + */ + +#include +#include +#include +#include +#include +#if defined(__GNUC__) +#include +#endif /* __GNUC__ */ +#include "cublas.h" /* CUBLAS public header file */ + +#define imin(a,b) (((a)<(b))?(a):(b)) +#define imax(a,b) (((a)<(b))?(b):(a)) + +#include "fortran_common.h" +#include "fortran_thunking.h" + + +#define CUBLAS_WRAPPER_ERROR_NOERR 0 +#define CUBLAS_WRAPPER_ERROR_ALLOC 1 +#define CUBLAS_WRAPPER_ERROR_SET 2 +#define CUBLAS_WRAPPER_ERROR_GET 3 +#define CUBLAS_WRAPPER_ERROR_STUB 4 + +static char *errMsg[5] = +{ + "no error", + "allocation error", + "setVector/setMatrix error", + "getVector/getMatrix error", + "not implemented" +}; + +static void wrapperError (const char *funcName, int error) +{ + printf ("cublas%s wrapper: %s\n", funcName, errMsg[error]); + fflush (stdout); +} + +int CUBLAS_INIT (void) +{ + return (int)cublasInit (); +} + +int CUBLAS_SHUTDOWN (void) +{ + return (int)cublasShutdown (); +} + + +/*---------------------------------------------------------------------------*/ +/*---------------------------------- BLAS1 ----------------------------------*/ +/*---------------------------------------------------------------------------*/ + +int CUBLAS_ISAMAX (const int *n, const float *x, const int *incx) +{ + float *devPtrx = 0; + int retVal = 0; + cublasStatus stat; + + if (*n <= 0) return retVal; + stat = cublasAlloc (1+(*n-1)*abs(*incx), sizeof(x[0]),(void**)&devPtrx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Isamax", CUBLAS_WRAPPER_ERROR_ALLOC); + return retVal; + } + stat = cublasSetVector (*n, sizeof(x[0]), x, *incx, devPtrx, *incx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Isamax", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + return retVal; + } + retVal = cublasIsamax (*n, devPtrx, *incx); + cublasFree (devPtrx); + return retVal; +} + +int CUBLAS_ISAMIN (const int *n, const float *x, const int *incx) +{ + float *devPtrx = 0; + int retVal = 0; + cublasStatus stat; + + if (*n == 0) return retVal; + stat = cublasAlloc (1+(*n-1)*abs(*incx), sizeof(x[0]),(void**)&devPtrx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Isamin", CUBLAS_WRAPPER_ERROR_ALLOC); + return retVal; + } + stat = cublasSetVector (*n, sizeof(x[0]), x, *incx, devPtrx, *incx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Isamin", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + return retVal; + } + retVal = cublasIsamin (*n, devPtrx, *incx); + cublasFree (devPtrx); + return retVal; +} + +#if CUBLAS_FORTRAN_COMPILER==CUBLAS_G77 +double CUBLAS_SASUM (const int *n, const float *x, const int *incx) +#else +float CUBLAS_SASUM (const int *n, const float *x, const int *incx) +#endif +{ + float *devPtrx = 0; + float retVal = 0.0f; + cublasStatus stat; + + if (*n == 0) return retVal; + stat = cublasAlloc (1+(*n-1)*abs(*incx), sizeof(x[0]),(void**)&devPtrx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Sasum", CUBLAS_WRAPPER_ERROR_ALLOC); + return retVal; + } + stat = cublasSetVector (*n, sizeof(x[0]), x, *incx, devPtrx, *incx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Sasum", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + return retVal; + } + + retVal = cublasSasum (*n, devPtrx, *incx); + cublasFree (devPtrx); + return retVal; +} + +void CUBLAS_SAXPY (const int *n, const float *alpha, const float *x, + const int *incx, float *y, const int *incy) +{ + float *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc (1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Saxpy", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + stat1 = cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Saxpy", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + cublasSaxpy (*n, *alpha, devPtrx, *incx, devPtry, *incy); + stat1 = cublasGetVector (*n,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Saxpy", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); +} + +void CUBLAS_SCOPY (const int *n, const float *x, const int *incx, float *y, + const int *incy) +{ + float *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc (1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Scopy", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + stat1 = cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Scopy", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + cublasScopy (*n, devPtrx, *incx, devPtry, *incy); + stat1 = cublasGetVector (*n,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Scopy", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); +} + +#if CUBLAS_FORTRAN_COMPILER==CUBLAS_G77 +double CUBLAS_SDOT (const int *n, const float *x, const int *incx, float *y, + const int *incy) +#else +float CUBLAS_SDOT (const int *n, const float *x, const int *incx, float *y, + const int *incy) +#endif +{ + float *devPtrx = 0, *devPtry = 0, retVal = 0.0f; + cublasStatus stat1, stat2; + + if (*n == 0) return retVal; + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc (1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Sdot", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return retVal; + } + stat1 = cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Sdot", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return retVal; + } +retVal = cublasSdot (*n, devPtrx, *incx, devPtry, *incy); + cublasFree (devPtrx); + cublasFree (devPtry); + return retVal; +} + +#if CUBLAS_FORTRAN_COMPILER==CUBLAS_G77 +double CUBLAS_SNRM2 (const int *n, const float *x, const int *incx) +#else +float CUBLAS_SNRM2 (const int *n, const float *x, const int *incx) +#endif +{ + float *devPtrx = 0; + float retVal = 0.0f; + cublasStatus stat; + + if (*n == 0) return retVal; + stat = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Snrm2", CUBLAS_WRAPPER_ERROR_ALLOC); + return retVal; + } + stat = cublasSetVector (*n, sizeof(x[0]), x, *incx, devPtrx, *incx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Snrm2", CUBLAS_WRAPPER_ERROR_SET); + return retVal; + } + retVal = cublasSnrm2 (*n, devPtrx, *incx); + cublasFree (devPtrx); + return retVal; +} + +void CUBLAS_SROT (const int *n, float *x, const int *incx, float *y, + const int *incy, const float *sc, const float *ss) +{ + float *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc (1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Srot", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + stat1 = cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Srot", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + cublasSrot (*n, devPtrx, *incx, devPtry, *incy, *sc, *ss); + stat1 = cublasGetVector (*n,sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + stat2 = cublasGetVector (*n,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Srot", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); +} + +void CUBLAS_SROTG (float *sa, float *sb, float *sc, float *ss) +{ + cublasSrotg (sa, sb, sc, ss); +} + +void CUBLAS_SROTM (const int *n, float *x, const int *incx, float *y, + const int *incy, const float* sparam) +{ + float *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc (1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Srotm", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + stat1 = cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Srotm", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + cublasSrotm (*n, devPtrx, *incx, devPtry, *incy, sparam); + stat1 = cublasGetVector (*n,sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + stat2 = cublasGetVector (*n,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Srotm", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); +} + +void CUBLAS_SROTMG (float *sd1, float *sd2, float *sx1, const float *sy1, + float* sparam) +{ + cublasSrotmg (sd1, sd2, sx1, sy1, sparam); +} + +void CUBLAS_SSCAL (const int *n, const float *alpha, float *x, const int *incx) +{ + float *devPtrx = 0; + cublasStatus stat; + + if (*n == 0) return; + stat = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Sscal", CUBLAS_WRAPPER_ERROR_ALLOC); + return; + } + stat = cublasSetVector (*n, sizeof(x[0]), x, *incx, devPtrx, *incx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Sscal", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + return; + } + cublasSscal (*n, *alpha, devPtrx, *incx); + cublasGetVector (*n, sizeof(x[0]), devPtrx, *incx, x, *incx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Sscal", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); +} + +void CUBLAS_SSWAP (const int *n, float *x, const int *incx, float *y, + const int *incy) +{ + float *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc (1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Sswap", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + stat1 = cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Sswap", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + cublasSswap (*n, devPtrx, *incx, devPtry, *incy); + stat1 = cublasGetVector (*n,sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + stat2 = cublasGetVector (*n,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Sswap", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); +} + +void CUBLAS_CAXPY (const int *n, const cuComplex *alpha, const cuComplex *x, + const int *incx, cuComplex *y, const int *incy) +{ + cuComplex *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc (1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Caxpy", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + stat1 = cublasSetVector (*n, sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n, sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Caxpy", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + cublasCaxpy (*n, *alpha, devPtrx, *incx, devPtry, *incy); + stat1 = cublasGetVector (*n, sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Caxpy", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); +} + +void CUBLAS_ZAXPY (const int *n, const cuDoubleComplex *alpha, const cuDoubleComplex *x, + const int *incx, cuDoubleComplex *y, const int *incy) +{ + cuDoubleComplex *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc (1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zaxpy", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + stat1 = cublasSetVector (*n, sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n, sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zaxpy", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + cublasZaxpy (*n, *alpha, devPtrx, *incx, devPtry, *incy); + stat1 = cublasGetVector (*n, sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Zaxpy", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); +} + +void CUBLAS_CCOPY (const int *n, const cuComplex *x, const int *incx, + cuComplex *y, const int *incy) +{ + cuComplex *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc (1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ccopy", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + stat1 = cublasSetVector (*n, sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n, sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ccopy", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + cublasCcopy (*n, devPtrx, *incx, devPtry, *incy); + stat1 = cublasGetVector (*n, sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Ccopy", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); +} + +void CUBLAS_ZCOPY (const int *n, const cuDoubleComplex *x, const int *incx, + cuDoubleComplex *y, const int *incy) +{ + cuDoubleComplex *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc (1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zcopy", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + stat1 = cublasSetVector (*n, sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n, sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zcopy", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + cublasZcopy (*n, devPtrx, *incx, devPtry, *incy); + stat1 = cublasGetVector (*n, sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Zcopy", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); +} + +void CUBLAS_CROT (const int *n, cuComplex *x, const int *incx, cuComplex *y, + const int *incy, const float *sc, const cuComplex *cs) +{ + cuComplex *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc (1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Crot", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + stat1 = cublasSetVector (*n, sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n, sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Crot", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + cublasCrot (*n, devPtrx, *incx, devPtry, *incy, *sc, *cs); + stat1 = cublasGetVector (*n, sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + stat2 = cublasGetVector (*n, sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Crot", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); +} + +void CUBLAS_ZROT (const int *n, cuDoubleComplex *x, const int *incx, cuDoubleComplex *y, + const int *incy, const double *sc, const cuDoubleComplex *cs) +{ + cuDoubleComplex *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc (1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zrot", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + stat1 = cublasSetVector (*n, sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n, sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zrot", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + cublasZrot (*n, devPtrx, *incx, devPtry, *incy, *sc, *cs); + stat1 = cublasGetVector (*n, sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + stat2 = cublasGetVector (*n, sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zrot", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); +} + +void CUBLAS_CROTG (cuComplex *ca, const cuComplex *cb, float *sc, + cuComplex *cs) +{ + cublasCrotg (ca, *cb, sc, cs); +} + +void CUBLAS_ZROTG (cuDoubleComplex *ca, const cuDoubleComplex *cb, double *sc, + cuDoubleComplex *cs) +{ + cublasZrotg (ca, *cb, sc, cs); +} + +void CUBLAS_CSCAL (const int *n, const cuComplex *alpha, cuComplex *x, + const int *incx) +{ + cuComplex *devPtrx = 0; + cublasStatus stat; + + if (*n == 0) return; + stat = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Cscal", CUBLAS_WRAPPER_ERROR_ALLOC); + return; + } + stat = cublasSetVector (*n, sizeof(x[0]), x, *incx, devPtrx, *incx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Cscal", CUBLAS_WRAPPER_ERROR_SET); + return; + } + cublasCscal (*n, *alpha, devPtrx, *incx); + stat = cublasGetVector (*n, sizeof(x[0]), devPtrx, *incx, x, *incx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Cscal", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); +} + +void CUBLAS_CSROT (const int *n, cuComplex *x, const int *incx, cuComplex *y, + const int *incy, const float *sc, const float *ss) +{ + cuComplex *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2; + + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc (1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Csrot", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + stat1 = cublasSetVector (*n, sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n, sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Csrot", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + cublasCsrot (*n, devPtrx, *incx, devPtry, *incy, *sc, *ss); + stat1 = cublasGetVector (*n, sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + stat2 = cublasGetVector (*n, sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Csrot", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); +} + +void CUBLAS_ZDROT (const int *n, cuDoubleComplex *x, const int *incx, cuDoubleComplex *y, + const int *incy, const double *sc, const double *ss) +{ + cuDoubleComplex *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2; + + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc (1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zdrot", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + stat1 = cublasSetVector (*n, sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n, sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zdrot", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + cublasZdrot (*n, devPtrx, *incx, devPtry, *incy, *sc, *ss); + stat1 = cublasGetVector (*n, sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + stat2 = cublasGetVector (*n, sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zdrot", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); +} + +void CUBLAS_CSSCAL (const int *n, const float *alpha, cuComplex *x, + const int *incx) +{ + cuComplex *devPtrx = 0; + cublasStatus stat; + + if (*n == 0) return; + stat = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Csscal", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + return; + } + stat = cublasSetVector (*n, sizeof(x[0]), x, *incx, devPtrx, *incx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Csscal", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + return; + } + cublasCsscal (*n, *alpha, devPtrx, *incx); + cublasGetVector (*n, sizeof(x[0]), devPtrx, *incx, x, *incx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Csscal", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); +} + + +void CUBLAS_CSWAP (const int *n, cuComplex *x, const int *incx, cuComplex *y, + const int *incy) +{ + cuComplex *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc (imax(1,*n *abs(*incy)),sizeof(y[0]),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Cswap", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + stat1 = cublasSetVector (*n, sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n, sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Cswap", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + cublasCswap (*n, devPtrx, *incx, devPtry, *incy); + stat1 = cublasGetVector (*n, sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + stat2 = cublasGetVector (*n, sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Cswap", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); +} + +void CUBLAS_CTRMV (const char *uplo, const char *trans, + const char *diag, const int *n, const cuComplex *A, + const int *lda, cuComplex *x, const int *incx) +{ + cuComplex *devPtrA = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + /* X - COMPLEX array of dimension at least + * ( 1 + ( n - 1 )*abs( INCX ) ). + * A - COMPLEX array of DIMENSION ( LDA, n ). + * Before entry with UPLO = 'U' or 'u', the leading n by n + * upper triangular part of the array A must contain the upper + */ + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ctrmv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + stat1=cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetMatrix (imin(*n,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ctrmv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + cublasCtrmv (uplo[0], trans[0], diag[0], *n, devPtrA, *lda, devPtrx,*incx); + stat1=cublasGetVector (*n,sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Ctrmv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrx); +} + +void CUBLAS_ZTRMV (const char *uplo, const char *trans, + const char *diag, const int *n, const cuDoubleComplex *A, + const int *lda, cuDoubleComplex *x, const int *incx) +{ + cuDoubleComplex *devPtrA = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + /* X - COMPLEX array of dimension at least + * ( 1 + ( n - 1 )*abs( INCX ) ). + * A - COMPLEX array of DIMENSION ( LDA, n ). + * Before entry with UPLO = 'U' or 'u', the leading n by n + * upper triangular part of the array A must contain the upper + */ + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ztrmv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + stat1=cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetMatrix (imin(*n,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ztrmv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + cublasZtrmv (uplo[0], trans[0], diag[0], *n, devPtrA, *lda, devPtrx,*incx); + stat1=cublasGetVector (*n,sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Ztrmv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrx); +} + +void CUBLAS_ZSWAP (const int *n, cuDoubleComplex *x, const int *incx, cuDoubleComplex *y, + const int *incy) +{ + cuDoubleComplex *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc (imax(1,*n *abs(*incy)),sizeof(y[0]),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zswap", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + stat1 = cublasSetVector (*n, sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n, sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zswap", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + cublasZswap (*n, devPtrx, *incx, devPtry, *incy); + stat1 = cublasGetVector (*n, sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + stat2 = cublasGetVector (*n, sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zswap", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); +} + + +#ifdef RETURN_COMPLEX +cuComplex CUBLAS_CDOTU ( const int *n, const cuComplex *x, + const int *incx, const cuComplex *y, const int *incy) +{ + + cuComplex *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2; + + cuComplex retVal = make_cuComplex (0.0f, 0.0f); + if (*n == 0) return retVal; + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc (1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Cdotu", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return retVal; + } + stat1 = cublasSetVector (*n, sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n, sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Cdotu", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return retVal; + } + + retVal = cublasCdotu (*n, devPtrx, *incx, devPtry, *incy); + cublasFree (devPtrx); + cublasFree (devPtry); + return( retVal ); + +} +#else +void CUBLAS_CDOTU (cuComplex *retVal, const int *n, const cuComplex *x, + const int *incx, const cuComplex *y, const int *incy) + + +{ + cuComplex *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2; + + *retVal = make_cuComplex (0.0f, 0.0f); + if (*n == 0) return; + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc (1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Cdotu", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + stat1 = cublasSetVector (*n, sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n, sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Cdotu", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + *retVal = cublasCdotu (*n, devPtrx, *incx, devPtry, *incy); + cublasFree (devPtrx); + cublasFree (devPtry); + +} +#endif + +#ifdef RETURN_COMPLEX +cuComplex CUBLAS_CDOTC ( const int *n, const cuComplex *x, + const int *incx, const cuComplex *y, const int *incy) +{ + cuComplex *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2; + + cuComplex retVal = make_cuComplex (0.0f, 0.0f); + if (*n == 0) return retVal; + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc (1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Cdotc", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return retVal; + } + stat1 = cublasSetVector (*n, sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n, sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Cdotc", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return retVal; + } + retVal = cublasCdotc (*n, devPtrx, *incx, devPtry, *incy); + cublasFree (devPtrx); + cublasFree (devPtry); + return retVal; +} +#else +void CUBLAS_CDOTC (cuComplex *retVal, const int *n, const cuComplex *x, + const int *incx, const cuComplex *y, const int *incy) + +{ + cuComplex *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2; + + *retVal = make_cuComplex (0.0f, 0.0f); + if (*n == 0) return; + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc (1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Cdotc", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + stat1 = cublasSetVector (*n, sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n, sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Cdotc", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + *retVal = cublasCdotc (*n, devPtrx, *incx, devPtry, *incy); + cublasFree (devPtrx); + cublasFree (devPtry); +} +#endif + +int CUBLAS_ICAMAX (const int *n, const cuComplex *x, const int *incx) +{ + cuComplex *devPtrx = 0; + int retVal = 0; + cublasStatus stat; + + if (*n == 0) return retVal; + stat = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Icamax", CUBLAS_WRAPPER_ERROR_ALLOC); + return retVal; + } + stat = cublasSetVector (*n, sizeof(x[0]), x, *incx, devPtrx, *incx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Icamax", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + return retVal; + } + retVal = cublasIcamax (*n, devPtrx, *incx); + cublasFree (devPtrx); + return retVal; +} + +int CUBLAS_ICAMIN (const int *n, const cuComplex *x, const int *incx) +{ + cuComplex *devPtrx = 0; + int retVal = 0; + cublasStatus stat; + + if (*n == 0) return retVal; + stat = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Icamin", CUBLAS_WRAPPER_ERROR_ALLOC); + return retVal; + } + stat = cublasSetVector (*n, sizeof(x[0]), x, *incx, devPtrx, *incx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Icamin", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + return retVal; + } + retVal = cublasIcamin (*n, devPtrx, *incx); + cublasFree (devPtrx); + return retVal; +} + +int CUBLAS_IZAMAX (const int *n, const cuDoubleComplex *x, const int *incx) +{ + cuDoubleComplex *devPtrx = 0; + int retVal = 0; + cublasStatus stat; + + if (*n == 0) return retVal; + stat = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Izamax", CUBLAS_WRAPPER_ERROR_ALLOC); + return retVal; + } + stat = cublasSetVector (*n, sizeof(x[0]), x, *incx, devPtrx, *incx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Izamax", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + return retVal; + } + retVal = cublasIzamax (*n, devPtrx, *incx); + cublasFree (devPtrx); + return retVal; +} + +int CUBLAS_IZAMIN (const int *n, const cuDoubleComplex *x, const int *incx) +{ + cuDoubleComplex *devPtrx = 0; + int retVal = 0; + cublasStatus stat; + + if (*n == 0) return retVal; + stat = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Izamin", CUBLAS_WRAPPER_ERROR_ALLOC); + return retVal; + } + stat = cublasSetVector (*n, sizeof(x[0]), x, *incx, devPtrx, *incx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Izamin", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + return retVal; + } + retVal = cublasIzamin (*n, devPtrx, *incx); + cublasFree (devPtrx); + return retVal; +} + +#if CUBLAS_FORTRAN_COMPILER==CUBLAS_G77 +double CUBLAS_SCASUM (const int *n, const cuComplex *x, const int *incx) +#else +float CUBLAS_SCASUM (const int *n, const cuComplex *x, const int *incx) +#endif +{ + cuComplex *devPtrx = 0; + float retVal = 0.0f; + cublasStatus stat; + + if (*n == 0) return retVal; + stat = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Scasum", CUBLAS_WRAPPER_ERROR_ALLOC); + return retVal; + } + stat = cublasSetVector (*n, sizeof(x[0]), x, *incx, devPtrx, *incx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Scasum", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + return retVal; + } + retVal = cublasScasum (*n, devPtrx, *incx); + cublasFree (devPtrx); + return retVal; +} + +double CUBLAS_DZASUM (const int *n, const cuDoubleComplex *x, const int *incx) +{ + cuDoubleComplex *devPtrx = 0; + double retVal = 0.0; + cublasStatus stat; + + if (*n == 0) return retVal; + stat = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dzasum", CUBLAS_WRAPPER_ERROR_ALLOC); + return retVal; + } + stat = cublasSetVector (*n, sizeof(x[0]), x, *incx, devPtrx, *incx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dzasum", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + return retVal; + } + retVal = cublasDzasum (*n, devPtrx, *incx); + cublasFree (devPtrx); + return retVal; +} + +#if CUBLAS_FORTRAN_COMPILER==CUBLAS_G77 +double CUBLAS_SCNRM2 (const int *n, const cuComplex *x, const int *incx) +#else +float CUBLAS_SCNRM2 (const int *n, const cuComplex *x, const int *incx) +#endif +{ + cuComplex *devPtrx = 0; + float retVal = 0.0f; + cublasStatus stat; + + if (*n == 0) return retVal; + stat = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Scnrm2", CUBLAS_WRAPPER_ERROR_ALLOC); + return retVal; + } + stat = cublasSetVector (*n, sizeof(x[0]), x, *incx, devPtrx, *incx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Scnrm2", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + return retVal; + } + retVal = cublasScnrm2 (*n, devPtrx, *incx); + cublasFree (devPtrx); + return retVal; +} + +double CUBLAS_DZNRM2 (const int *n, const cuDoubleComplex *x, const int *incx) +{ + cuDoubleComplex *devPtrx = 0; + double retVal = 0.0; + cublasStatus stat; + + if (*n == 0) return retVal; + stat = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dznrm2", CUBLAS_WRAPPER_ERROR_ALLOC); + return retVal; + } + stat = cublasSetVector (*n, sizeof(x[0]), x, *incx, devPtrx, *incx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dznrm2", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + return retVal; + } + retVal = cublasDznrm2 (*n, devPtrx, *incx); + cublasFree (devPtrx); + return retVal; +} + +int CUBLAS_IDAMAX (const int *n, const double *x, const int *incx) +{ + double *devPtrx = 0; + int retVal = 0; + cublasStatus stat; + + if (*n == 0) return retVal;; + stat = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Idamax", CUBLAS_WRAPPER_ERROR_ALLOC); + return retVal; + } + stat = cublasSetVector (*n, sizeof(x[0]), x, *incx, devPtrx, *incx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Idamax", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + return retVal; + } + retVal = cublasIdamax (*n, devPtrx, *incx); + cublasFree (devPtrx); + return retVal; +} + +int CUBLAS_IDAMIN (const int *n, const double *x, const int *incx) +{ + double *devPtrx = 0; + int retVal = 0; + cublasStatus stat; + + if (*n == 0) return retVal; + stat = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Idamin", CUBLAS_WRAPPER_ERROR_ALLOC); + return retVal; + } + stat = cublasSetVector (*n, sizeof(x[0]), x, *incx, devPtrx, *incx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Idamin", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + return retVal; + } + retVal = cublasIdamin (*n, devPtrx, *incx); + cublasFree (devPtrx); + return retVal; +} + +double CUBLAS_DASUM (const int *n, const double *x, const int *incx) +{ + double *devPtrx = 0; + double retVal = 0; + cublasStatus stat; + + if (*n == 0) return retVal; + stat = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dasum", CUBLAS_WRAPPER_ERROR_ALLOC); + return retVal; + } + stat = cublasSetVector (*n, sizeof(x[0]), x, *incx, devPtrx, *incx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dasum", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + return retVal; + } + retVal = cublasDasum (*n, devPtrx, *incx); + cublasFree (devPtrx); + return retVal; +} + +void CUBLAS_DAXPY (const int *n, const double *alpha, const double *x, + const int *incx, double *y, const int *incy) +{ + double *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc (1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Daxpy", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + stat1 = cublasSetVector (*n, sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n, sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Daxpy", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + cublasDaxpy (*n, *alpha, devPtrx, *incx, devPtry, *incy); + stat1 = cublasGetVector (*n, sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Daxpy", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); +} + +void CUBLAS_DCOPY (const int *n, const double *x, const int *incx, double *y, + const int *incy) +{ + double *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc (1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dcopy", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + stat1 = cublasSetVector (*n, sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n, sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dcopy", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + cublasDcopy (*n, devPtrx, *incx, devPtry, *incy); + stat1 = cublasGetVector (*n, sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dcopy", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); +} + +double CUBLAS_DDOT (const int *n, const double *x, const int *incx, double *y, + const int *incy) +{ + double *devPtrx = 0, *devPtry = 0; + double retVal = 0.0; + cublasStatus stat1, stat2; + + if (*n == 0) return retVal; + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc (1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ddot", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return retVal; + } + stat1 = cublasSetVector (*n, sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n, sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ddot", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return retVal; + } + retVal = cublasDdot (*n, devPtrx, *incx, devPtry, *incy); + cublasFree (devPtrx); + cublasFree (devPtry); + return retVal; +} + +double CUBLAS_DNRM2 (const int *n, const double *x, const int *incx) +{ + double *devPtrx = 0; + double retVal = 0.0; + cublasStatus stat; + + if (*n == 0) return retVal; + stat = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dnrm2", CUBLAS_WRAPPER_ERROR_ALLOC); + return retVal; + } + stat = cublasSetVector (*n, sizeof(x[0]), x, *incx, devPtrx, *incx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dnrm2", CUBLAS_WRAPPER_ERROR_SET); + return retVal; + } + retVal = cublasDnrm2 (*n, devPtrx, *incx); + cublasFree (devPtrx); + return retVal; +} + +void CUBLAS_DROT (const int *n, double *x, const int *incx, double *y, + const int *incy, const double *sc, const double *ss) +{ + double *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc (1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Drot", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + stat1 = cublasSetVector (*n, sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat1 = cublasSetVector (*n, sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Drot", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + cublasDrot (*n, devPtrx, *incx, devPtry, *incy, *sc, *ss); + stat1 = cublasGetVector (*n, sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + stat2 = cublasGetVector (*n, sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Drot", CUBLAS_WRAPPER_ERROR_GET); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + cublasFree (devPtrx); + cublasFree (devPtry); +} + +void CUBLAS_DROTG (double *sa, double *sb, double *sc, double *ss) +{ + cublasDrotg (sa, sb, sc, ss); +} + +void CUBLAS_DROTM (const int *n, double *x, const int *incx, double *y, + const int *incy, const double* sparam) +{ + double *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc (1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Drotm", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + stat1 = cublasSetVector (*n, sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n, sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Drotm", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + cublasDrotm (*n, devPtrx, *incx, devPtry, *incy, sparam); + stat1 = cublasGetVector (*n, sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + stat2 = cublasGetVector (*n, sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Drotm", CUBLAS_WRAPPER_ERROR_GET); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + cublasFree (devPtrx); + cublasFree (devPtry); +} + +void CUBLAS_DROTMG (double *sd1, double *sd2, double *sx1, const double *sy1, + double* sparam) +{ + cublasDrotmg (sd1, sd2, sx1, sy1, sparam); +} + +void CUBLAS_DSCAL (const int *n, const double *alpha, double *x, + const int *incx) +{ + double *devPtrx = 0; + cublasStatus stat; + + if (*n == 0) return; + stat = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dscal", CUBLAS_WRAPPER_ERROR_ALLOC); + return; + } + stat = cublasSetVector (*n, sizeof(x[0]), x, *incx, devPtrx, *incx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dscal", CUBLAS_WRAPPER_ERROR_SET); + return; + } + cublasDscal (*n, *alpha, devPtrx, *incx); + stat = cublasGetVector (*n, sizeof(x[0]), devPtrx, *incx, x, *incx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dscal", CUBLAS_WRAPPER_ERROR_GET); + return; + } + cublasFree (devPtrx); +} + +void CUBLAS_DSWAP (const int *n, double *x, const int *incx, double *y, + const int *incy) +{ + double *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc (1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dswap", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + stat1 = cublasSetVector (*n, sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n, sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dswap", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + cublasDswap (*n, devPtrx, *incx, devPtry, *incy); + stat1 = cublasGetVector (*n, sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + stat2 = cublasGetVector (*n, sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dswap", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); +} + +#ifdef RETURN_COMPLEX +cuDoubleComplex CUBLAS_ZDOTU ( const int *n, const cuDoubleComplex *x, + const int *incx, const cuDoubleComplex *y, const int *incy) +{ + cuDoubleComplex *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2; + + cuDoubleComplex retVal = make_cuDoubleComplex (0.0f, 0.0f); + if (*n == 0) return retVal; + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(*x),(void**)&devPtrx); + stat2 = cublasAlloc (1+(*n-1)*abs(*incy),sizeof(*y),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zdotu", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return retVal; + } + stat1 = cublasSetVector (*n, sizeof(*x),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n, sizeof(*y),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zdotu", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return retVal; + } + retVal = cublasZdotu (*n, devPtrx, *incx, devPtry, *incy); + cublasFree (devPtrx); + cublasFree (devPtry); + return retVal; +} +#else +void CUBLAS_ZDOTU (cuDoubleComplex *retVal, const int *n, const cuDoubleComplex *x, + const int *incx, const cuDoubleComplex *y, const int *incy) +{ + cuDoubleComplex *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2; + + *retVal = make_cuDoubleComplex (0.0f, 0.0f); + if (*n == 0) return; + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(*x),(void**)&devPtrx); + stat2 = cublasAlloc (1+(*n-1)*abs(*incy),sizeof(*y),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zdotu", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + stat1 = cublasSetVector (*n, sizeof(*x),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n, sizeof(*y),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zdotu", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + *retVal = cublasZdotu (*n, devPtrx, *incx, devPtry, *incy); + cublasFree (devPtrx); + cublasFree (devPtry); +} +#endif + +#ifdef RETURN_COMPLEX +cuDoubleComplex CUBLAS_ZDOTC ( const int *n, const cuDoubleComplex *x, + const int *incx, const cuDoubleComplex *y, const int *incy) +{ + cuDoubleComplex *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2; + + cuDoubleComplex retVal = make_cuDoubleComplex (0.0f, 0.0f); + if (*n == 0) return retVal; + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(*x),(void**)&devPtrx); + stat2 = cublasAlloc (1+(*n-1)*abs(*incy),sizeof(*y),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zdotc", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return retVal; + } + stat1 = cublasSetVector (*n, sizeof(*x),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n, sizeof(*y),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zdotc", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return retVal; + } + retVal = cublasZdotc (*n, devPtrx, *incx, devPtry, *incy); + cublasFree (devPtrx); + cublasFree (devPtry); + return retVal; +} +#else +void CUBLAS_ZDOTC (cuDoubleComplex *retVal, const int *n, const cuDoubleComplex *x, + const int *incx, const cuDoubleComplex *y, const int *incy) +{ + cuDoubleComplex *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2; + + *retVal = make_cuDoubleComplex (0.0f, 0.0f); + if (*n == 0) return; + stat1 = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(*x),(void**)&devPtrx); + stat2 = cublasAlloc (1+(*n-1)*abs(*incy),sizeof(*y),(void**)&devPtry); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zdotc", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + stat1 = cublasSetVector (*n, sizeof(*x),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n, sizeof(*y),y,abs(*incy),devPtry,abs(*incy)); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zdotc", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + return; + } + *retVal = cublasZdotc (*n, devPtrx, *incx, devPtry, *incy); + cublasFree (devPtrx); + cublasFree (devPtry); +} +#endif + + +void CUBLAS_ZSCAL (const int *n, const cuDoubleComplex *alpha, cuDoubleComplex *x, + const int *incx) +{ + cuDoubleComplex *devPtrx = 0; + cublasStatus stat; + + if (*n == 0) return; + stat = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(*x),(void**)&devPtrx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Zscal", CUBLAS_WRAPPER_ERROR_ALLOC); + return; + } + stat = cublasSetVector (*n, sizeof(*x), x, *incx, devPtrx, *incx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Zscal", CUBLAS_WRAPPER_ERROR_SET); + return; + } + cublasZscal (*n, *alpha, devPtrx, *incx); + stat = cublasGetVector (*n, sizeof(*x), devPtrx, *incx, x, *incx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Zscal", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); +} + +void CUBLAS_ZDSCAL (const int *n, const double *alpha, cuDoubleComplex *x, + const int *incx) +{ + cuDoubleComplex *devPtrx = 0; + cublasStatus stat; + + if (*n == 0) return; + stat = cublasAlloc (1+(*n-1)*abs(*incx),sizeof(*x),(void**)&devPtrx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Zdscal", CUBLAS_WRAPPER_ERROR_ALLOC); + return; + } + stat = cublasSetVector (*n, sizeof(*x), x, *incx, devPtrx, *incx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Zdscal", CUBLAS_WRAPPER_ERROR_SET); + return; + } + cublasZdscal (*n, *alpha, devPtrx, *incx); + stat = cublasGetVector (*n, sizeof(*x), devPtrx, *incx, x, *incx); + if (stat != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Zdscal", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); +} + + +/*---------------------------------------------------------------------------*/ +/*---------------------------------- BLAS2 ----------------------------------*/ +/*---------------------------------------------------------------------------*/ + +void CUBLAS_SGBMV (const char *trans, const int *m, const int *n, + const int *kl, const int *ku, const float *alpha, + const float *A, const int *lda, const float *x, + const int *incx, const float *beta, float *y, + const int *incy) +{ + float *devPtrx = 0, *devPtry = 0, *devPtrA = 0; + cublasStatus stat1, stat2, stat3; + + if ((*m == 0) || (*n == 0)) return; + + /* X - REAL array of DIMENSION at least + * ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n' + * and at least + * ( 1 + ( m - 1 )*abs( INCX ) ) otherwise. + * Y - REAL array of DIMENSION at least + * ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n' + * and at least + * ( 1 + ( n - 1 )*abs( INCY ) ) otherwise. + * A - REAL array of DIMENSION ( LDA, n ). + * Before entry, the leading ( kl + ku + 1 ) by n part of the + * array A must contain the matrix of coefficients + */ + if (toupper(trans[0]) == 'N') { + stat1 = cublasAlloc(1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc(1+(*m-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + } else { + stat1 = cublasAlloc(1+(*m-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc(1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + } + stat3 = cublasAlloc ((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Sgbmv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + if (toupper(trans[0]) == 'N') { + stat1=cublasSetVector(*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector(*m,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + } else { + stat1=cublasSetVector(*m,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector(*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + } + stat3 = cublasSetMatrix (imin(*kl+*ku+1,*lda), *n, sizeof(A[0]), A, *lda, + devPtrA, *lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Sgbmv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + cublasSgbmv (trans[0], *m, *n, *kl, *ku, *alpha, devPtrA, *lda, devPtrx, + *incx, *beta, devPtry, *incy); + if (toupper(trans[0]) == 'N') { + stat1=cublasGetVector(*m,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + } else { + stat1=cublasGetVector(*n,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + } + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Sgbmv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); +} + +void CUBLAS_DGBMV (const char *trans, const int *m, const int *n, + const int *kl, const int *ku, const double *alpha, + const double *A, const int *lda, const double *x, + const int *incx, const double *beta, double *y, + const int *incy) +{ + double *devPtrx = 0, *devPtry = 0, *devPtrA = 0; + cublasStatus stat1, stat2, stat3; + + if ((*m == 0) || (*n == 0)) return; + + /* X - REAL array of DIMENSION at least + * ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n' + * and at least + * ( 1 + ( m - 1 )*abs( INCX ) ) otherwise. + * Y - REAL array of DIMENSION at least + * ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n' + * and at least + * ( 1 + ( n - 1 )*abs( INCY ) ) otherwise. + * A - REAL array of DIMENSION ( LDA, n ). + * Before entry, the leading ( kl + ku + 1 ) by n part of the + * array A must contain the matrix of coefficients + */ + if (toupper(trans[0]) == 'N') { + stat1 = cublasAlloc(1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc(1+(*m-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + } else { + stat1 = cublasAlloc(1+(*m-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc(1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + } + stat3 = cublasAlloc ((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dgbmv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + if (toupper(trans[0]) == 'N') { + stat1=cublasSetVector(*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector(*m,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + } else { + stat1=cublasSetVector(*m,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector(*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + } + stat3 = cublasSetMatrix (imin(*kl+*ku+1,*lda), *n, sizeof(A[0]), A, *lda, + devPtrA, *lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dgbmv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + cublasDgbmv (trans[0], *m, *n, *kl, *ku, *alpha, devPtrA, *lda, devPtrx, + *incx, *beta, devPtry, *incy); + if (toupper(trans[0]) == 'N') { + stat1=cublasGetVector(*m,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + } else { + stat1=cublasGetVector(*n,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + } + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dgbmv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); +} +void CUBLAS_CGBMV (const char *trans, const int *m, const int *n, + const int *kl, const int *ku, const cuComplex *alpha, + const cuComplex *A, const int *lda, const cuComplex *x, + const int *incx, const cuComplex *beta, cuComplex *y, + const int *incy) +{ + cuComplex *devPtrx = 0, *devPtry = 0, *devPtrA = 0; + cublasStatus stat1, stat2, stat3; + + if ((*m == 0) || (*n == 0)) return; + + /* X - REAL array of DIMENSION at least + * ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n' + * and at least + * ( 1 + ( m - 1 )*abs( INCX ) ) otherwise. + * Y - REAL array of DIMENSION at least + * ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n' + * and at least + * ( 1 + ( n - 1 )*abs( INCY ) ) otherwise. + * A - REAL array of DIMENSION ( LDA, n ). + * Before entry, the leading ( kl + ku + 1 ) by n part of the + * array A must contain the matrix of coefficients + */ + if (toupper(trans[0]) == 'N') { + stat1 = cublasAlloc(1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc(1+(*m-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + } else { + stat1 = cublasAlloc(1+(*m-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc(1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + } + stat3 = cublasAlloc ((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Cgbmv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + if (toupper(trans[0]) == 'N') { + stat1=cublasSetVector(*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector(*m,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + } else { + stat1=cublasSetVector(*m,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector(*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + } + stat3 = cublasSetMatrix (imin(*kl+*ku+1,*lda), *n, sizeof(A[0]), A, *lda, + devPtrA, *lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Cgbmv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + cublasCgbmv (trans[0], *m, *n, *kl, *ku, *alpha, devPtrA, *lda, devPtrx, + *incx, *beta, devPtry, *incy); + if (toupper(trans[0]) == 'N') { + stat1=cublasGetVector(*m,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + } else { + stat1=cublasGetVector(*n,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + } + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Cgbmv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); +} +void CUBLAS_ZGBMV (const char *trans, const int *m, const int *n, + const int *kl, const int *ku, const cuDoubleComplex *alpha, + const cuDoubleComplex *A, const int *lda, const cuDoubleComplex *x, + const int *incx, const cuDoubleComplex *beta, cuDoubleComplex *y, + const int *incy) +{ + cuDoubleComplex *devPtrx = 0, *devPtry = 0, *devPtrA = 0; + cublasStatus stat1, stat2, stat3; + + if ((*m == 0) || (*n == 0)) return; + + /* X - REAL array of DIMENSION at least + * ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n' + * and at least + * ( 1 + ( m - 1 )*abs( INCX ) ) otherwise. + * Y - REAL array of DIMENSION at least + * ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n' + * and at least + * ( 1 + ( n - 1 )*abs( INCY ) ) otherwise. + * A - REAL array of DIMENSION ( LDA, n ). + * Before entry, the leading ( kl + ku + 1 ) by n part of the + * array A must contain the matrix of coefficients + */ + if (toupper(trans[0]) == 'N') { + stat1 = cublasAlloc(1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc(1+(*m-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + } else { + stat1 = cublasAlloc(1+(*m-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc(1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + } + stat3 = cublasAlloc ((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zgbmv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + if (toupper(trans[0]) == 'N') { + stat1=cublasSetVector(*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector(*m,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + } else { + stat1=cublasSetVector(*m,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector(*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + } + stat3 = cublasSetMatrix (imin(*kl+*ku+1,*lda), *n, sizeof(A[0]), A, *lda, + devPtrA, *lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zgbmv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + cublasZgbmv (trans[0], *m, *n, *kl, *ku, *alpha, devPtrA, *lda, devPtrx, + *incx, *beta, devPtry, *incy); + if (toupper(trans[0]) == 'N') { + stat1=cublasGetVector(*m,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + } else { + stat1=cublasGetVector(*n,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + } + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Zgbmv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); +} + +void CUBLAS_SGEMV (const char *trans, const int *m, const int *n, + const float *alpha, const float *A, const int *lda, + const float *x, const int *incx, const float *beta, + float *y, const int *incy) +{ + float *devPtrA = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if ((*m == 0) || (*n == 0)) return; + + /* X - REAL array of DIMENSION at least + * ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n' + * and at least + * ( 1 + ( m - 1 )*abs( INCX ) ) otherwise. + * Y - REAL array of DIMENSION at least + * ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n' + * and at least + * ( 1 + ( n - 1 )*abs( INCY ) ) otherwise. + * A - REAL array of DIMENSION ( LDA, n ). + * Before entry, the leading m by n part of the array A must + * contain the matrix of coefficients. + */ + if (toupper(trans[0]) == 'N') { + stat1=cublasAlloc (1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2=cublasAlloc (1+(*m-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + } else { + stat1=cublasAlloc (1+(*m-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2=cublasAlloc (1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + } + stat3=cublasAlloc ((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Sgemv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + if (toupper(trans[0]) == 'N') { + stat1=cublasSetVector(*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector(*m,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + } else { + stat1=cublasSetVector(*m,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector(*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + } + stat3=cublasSetMatrix (imin(*m,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Sgemv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + cublasSgemv (trans[0], *m, *n, *alpha, devPtrA, *lda, devPtrx, *incx, + *beta, devPtry, *incy); + if (toupper(trans[0]) == 'N') { + stat1=cublasGetVector(*m,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + } else { + stat1=cublasGetVector(*n,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + } + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Sgemv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); +} + +void CUBLAS_SGER (const int *m, const int *n, const float *alpha, + const float *x, const int *incx, const float *y, + const int *incy, float *A, const int *lda) +{ + float *devPtrA = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if ((*m == 0) || (*n == 0)) return; + + /* X - REAL array of dimension at least + * ( 1 + ( m - 1 )*abs( INCX ) ). + * Y - REAL array of dimension at least + * ( 1 + ( n - 1 )*abs( INCY ) ). + * A - REAL array of DIMENSION ( LDA, n ). + * Before entry, the leading m by n part of the array A must + * contain the matrix of coefficients. On exit, A is + */ + stat1=cublasAlloc(1+(*m-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(1+(*n-1)*abs(*incy),sizeof(devPtry[0]),(void**)&devPtry); + stat3=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Sger", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + stat1=cublasSetVector(*m,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector(*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + stat3=cublasSetMatrix(imin(*m,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Sger", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + cublasSger (*m, *n, *alpha, devPtrx, *incx, devPtry, *incy, devPtrA, *lda); + stat1 = cublasGetMatrix(imin(*m,*lda),*n,sizeof(A[0]),devPtrA,*lda,A,*lda); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Sger", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); +} + +void CUBLAS_SSBMV (const char *uplo, const int *n, const int *k, + const float *alpha, const float *A, const int *lda, + const float *x, const int *incx, const float *beta, + float *y, const int *incy) +{ + float *devPtrA = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if (*n == 0) return; + + /* X - REAL array of DIMENSION at least + * ( 1 + ( n - 1 )*abs( INCX ) ). + * + * Y - REAL array of DIMENSION at least + * ( 1 + ( n - 1 )*abs( INCY ) ). + * A - REAL array of DIMENSION ( LDA, n ). + * Before entry with UPLO = 'U' or 'u', the leading ( k + 1 ) + * by n part of the array A must contain the upper triangular + */ + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(1+(*n-1)*abs(*incy),sizeof(devPtry[0]),(void**)&devPtry); + stat3=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ssbmv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + stat1 = cublasSetVector(*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector(*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + stat3 = cublasSetMatrix (imin(*k+1,*lda), *n, sizeof(A[0]), A, *lda, + devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ssbmv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + cublasSsbmv (uplo[0], *n, *k, *alpha, devPtrA, *lda, devPtrx, *incx, *beta, + devPtry, *incy); + stat1 = cublasGetVector (*n,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Ssbmv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); +} + +void CUBLAS_DSBMV (const char *uplo, const int *n, const int *k, + const double *alpha, const double *A, const int *lda, + const double *x, const int *incx, const double *beta, + double *y, const int *incy) +{ + double *devPtrA = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(1+(*n-1)*abs(*incy),sizeof(devPtry[0]),(void**)&devPtry); + stat3=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dsbmv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + stat1 = cublasSetVector(*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector(*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + stat3 = cublasSetMatrix (imin(*k+1,*lda), *n, sizeof(A[0]), A, *lda, + devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dsbmv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + cublasDsbmv (uplo[0], *n, *k, *alpha, devPtrA, *lda, devPtrx, *incx, *beta, + devPtry, *incy); + stat1 = cublasGetVector (*n,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dsbmv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); +} + +void CUBLAS_CHBMV (const char *uplo, const int *n, const int *k, + const cuComplex *alpha, const cuComplex *A, const int *lda, + const cuComplex *x, const int *incx, const cuComplex *beta, + cuComplex *y, const int *incy) +{ + cuComplex *devPtrA = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(1+(*n-1)*abs(*incy),sizeof(devPtry[0]),(void**)&devPtry); + stat3=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Chbmv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + stat1 = cublasSetVector(*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector(*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + stat3 = cublasSetMatrix (imin(*k+1,*lda), *n, sizeof(A[0]), A, *lda, + devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Chbmv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + cublasChbmv (uplo[0], *n, *k, *alpha, devPtrA, *lda, devPtrx, *incx, *beta, + devPtry, *incy); + stat1 = cublasGetVector (*n,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Chbmv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); +} + + +void CUBLAS_ZHBMV (const char *uplo, const int *n, const int *k, + const cuDoubleComplex *alpha, const cuDoubleComplex *A, const int *lda, + const cuDoubleComplex *x, const int *incx, const cuDoubleComplex *beta, + cuDoubleComplex *y, const int *incy) +{ + cuDoubleComplex *devPtrA = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(1+(*n-1)*abs(*incy),sizeof(devPtry[0]),(void**)&devPtry); + stat3=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zhbmv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + stat1 = cublasSetVector(*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector(*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + stat3 = cublasSetMatrix (imin(*k+1,*lda), *n, sizeof(A[0]), A, *lda, + devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zhbmv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + cublasZhbmv (uplo[0], *n, *k, *alpha, devPtrA, *lda, devPtrx, *incx, *beta, + devPtry, *incy); + stat1 = cublasGetVector (*n,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Zhbmv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); +} + +void CUBLAS_SSPMV (const char *uplo, const int *n, const float *alpha, + const float *AP, const float *x, const int *incx, + const float *beta, float *y, const int *incy) +{ + float *devPtrAP = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if (*n == 0) return; + + /* X - REAL array of dimension at least + * ( 1 + ( n - 1 )*abs( INCX ) ). + * Y - REAL array of dimension at least + * ( 1 + ( n - 1 )*abs( INCY ) ). + * AP - REAL array of DIMENSION at least + * ( ( n*( n + 1 ) )/2 ). + * Before entry with UPLO = 'U' or 'u', the array AP must + * contain the upper triangular part of the symmetric matrix + */ + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(1+(*n-1)*abs(*incy),sizeof(devPtry[0]),(void**)&devPtry); + stat3=cublasAlloc(((*n)*(*n+1))/2, sizeof(devPtrAP[0]), (void**)&devPtrAP); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Sspmv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrAP); + return; + } + stat1 = cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + stat3 = cublasSetVector (((*n)*(*n+1))/2,sizeof(AP[0]),AP,1,devPtrAP,1); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Sspmv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrAP); + return; + } + cublasSspmv (*uplo, *n, *alpha, devPtrAP, devPtrx, *incx, *beta, devPtry, + *incy); + stat1 = cublasGetVector (*n,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Sspmv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrAP); +} + +void CUBLAS_DSPMV (const char *uplo, const int *n, const double *alpha, + const double *AP, const double *x, const int *incx, + const double *beta, double *y, const int *incy) +{ + double *devPtrAP = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(1+(*n-1)*abs(*incy),sizeof(devPtry[0]),(void**)&devPtry); + stat3=cublasAlloc(((*n)*(*n+1))/2, sizeof(devPtrAP[0]), (void**)&devPtrAP); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dspmv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrAP); + return; + } + stat1 = cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + stat3 = cublasSetVector (((*n)*(*n+1))/2,sizeof(AP[0]),AP,1,devPtrAP,1); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dspmv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrAP); + return; + } + cublasDspmv (*uplo, *n, *alpha, devPtrAP, devPtrx, *incx, *beta, devPtry, + *incy); + stat1 = cublasGetVector (*n,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dspmv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrAP); +} + +void CUBLAS_CHPMV (const char *uplo, const int *n, const cuComplex *alpha, + const cuComplex *AP, const cuComplex *x, const int *incx, + const cuComplex *beta, cuComplex *y, const int *incy) +{ + cuComplex *devPtrAP = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(1+(*n-1)*abs(*incy),sizeof(devPtry[0]),(void**)&devPtry); + stat3=cublasAlloc(((*n)*(*n+1))/2, sizeof(devPtrAP[0]), (void**)&devPtrAP); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Chpmv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrAP); + return; + } + stat1 = cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + stat3 = cublasSetVector (((*n)*(*n+1))/2,sizeof(AP[0]),AP,1,devPtrAP,1); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Chpmv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrAP); + return; + } + cublasChpmv (*uplo, *n, *alpha, devPtrAP, devPtrx, *incx, *beta, devPtry, + *incy); + stat1 = cublasGetVector (*n,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Chpmv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrAP); +} + +void CUBLAS_ZHPMV (const char *uplo, const int *n, const cuDoubleComplex *alpha, + const cuDoubleComplex *AP, const cuDoubleComplex *x, const int *incx, + const cuDoubleComplex *beta, cuDoubleComplex *y, const int *incy) +{ + cuDoubleComplex *devPtrAP = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(1+(*n-1)*abs(*incy),sizeof(devPtry[0]),(void**)&devPtry); + stat3=cublasAlloc(((*n)*(*n+1))/2, sizeof(devPtrAP[0]), (void**)&devPtrAP); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zhpmv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrAP); + return; + } + stat1 = cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + stat3 = cublasSetVector (((*n)*(*n+1))/2,sizeof(AP[0]),AP,1,devPtrAP,1); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zhpmv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrAP); + return; + } + cublasZhpmv (*uplo, *n, *alpha, devPtrAP, devPtrx, *incx, *beta, devPtry, + *incy); + stat1 = cublasGetVector (*n,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Zhpmv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrAP); +} + +void CUBLAS_SSPR (const char *uplo, const int *n, const float *alpha, + const float *x, const int *incx, float *AP) +{ + float *devPtrAP = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + /* X - REAL array of dimension at least + * ( 1 + ( n - 1 )*abs( INCX ) ). + * AP - REAL array of DIMENSION at least + * ( ( n*( n + 1 ) )/2 ). + */ + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(((*n)*(*n+1))/2, sizeof(devPtrAP[0]), (void**)&devPtrAP); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Sspr", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrAP); + return; + } + stat1=cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector (((*n)*(*n+1))/2,sizeof(AP[0]),AP,1,devPtrAP,1); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Sspr", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrAP); + return; + } + cublasSspr (uplo[0], *n, *alpha, devPtrx, *incx, devPtrAP); + stat1=cublasGetVector (((*n)*(*n+1))/2,sizeof(AP[0]),devPtrAP,1,AP,1); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Sspr", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtrAP); +} + +void CUBLAS_DSPR (const char *uplo, const int *n, const double *alpha, + const double *x, const int *incx, double *AP) +{ + double *devPtrAP = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(((*n)*(*n+1))/2, sizeof(devPtrAP[0]), (void**)&devPtrAP); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dspr", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrAP); + return; + } + stat1=cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector (((*n)*(*n+1))/2,sizeof(AP[0]),AP,1,devPtrAP,1); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dspr", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrAP); + return; + } + cublasDspr (uplo[0], *n, *alpha, devPtrx, *incx, devPtrAP); + stat1=cublasGetVector (((*n)*(*n+1))/2,sizeof(AP[0]),devPtrAP,1,AP,1); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dspr", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtrAP); +} + +void CUBLAS_CHPR (const char *uplo, const int *n, const float *alpha, + const cuComplex *x, const int *incx, cuComplex *AP) +{ + cuComplex *devPtrAP = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(((*n)*(*n+1))/2, sizeof(devPtrAP[0]), (void**)&devPtrAP); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Chpr", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrAP); + return; + } + stat1=cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector (((*n)*(*n+1))/2,sizeof(AP[0]),AP,1,devPtrAP,1); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Chpr", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrAP); + return; + } + cublasChpr (uplo[0], *n, *alpha, devPtrx, *incx, devPtrAP); + stat1=cublasGetVector (((*n)*(*n+1))/2,sizeof(AP[0]),devPtrAP,1,AP,1); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Chpr", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtrAP); +} + +void CUBLAS_ZHPR (const char *uplo, const int *n, const double *alpha, + const cuDoubleComplex *x, const int *incx, cuDoubleComplex *AP) +{ + cuDoubleComplex *devPtrAP = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(((*n)*(*n+1))/2, sizeof(devPtrAP[0]), (void**)&devPtrAP); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zhpr", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrAP); + return; + } + stat1=cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector (((*n)*(*n+1))/2,sizeof(AP[0]),AP,1,devPtrAP,1); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zhpr", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrAP); + return; + } + cublasZhpr (uplo[0], *n, *alpha, devPtrx, *incx, devPtrAP); + stat1=cublasGetVector (((*n)*(*n+1))/2,sizeof(AP[0]),devPtrAP,1,AP,1); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Zhpr", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtrAP); +} + +void CUBLAS_SSPR2 (const char *uplo, const int *n, const float *alpha, + const float *x, const int *incx, const float *y, + const int *incy, float *AP) +{ + float *devPtrAP = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if (*n == 0) return; + + /* X - REAL array of dimension at least + * ( 1 + ( n - 1 )*abs( INCX ) ). + * Y - REAL array of dimension at least + * ( 1 + ( n - 1 )*abs( INCY ) ). + * AP - REAL array of DIMENSION at least + * ( ( n*( n + 1 ) )/2 ). + * Before entry with UPLO = 'U' or 'u', the array AP must + * contain the upper triangular part of the symmetric matrix + */ + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(1+(*n-1)*abs(*incy),sizeof(devPtry[0]),(void**)&devPtry); + stat3=cublasAlloc(((*n)*(*n+1))/2, sizeof(devPtrAP[0]), (void**)&devPtrAP); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Sspr2", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrAP); + return; + } + stat1 = cublasSetVector (1+(*n-1)*abs(*incx),sizeof(x[0]),x,1,devPtrx,1); + stat2 = cublasSetVector (1+(*n-1)*abs(*incy),sizeof(y[0]),y,1,devPtry,1); + stat3 = cublasSetVector (((*n)*(*n+1))/2,sizeof(AP[0]),AP,1,devPtrAP,1); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Sspr2", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrAP); + return; + } + cublasSspr2 (uplo[0], *n, *alpha, devPtrx, *incx, devPtry, *incy,devPtrAP); + stat1 = cublasGetVector (((*n)*(*n+1))/2,sizeof(AP[0]),devPtrAP,1,AP,1); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Sspr2", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrAP); +} + +void CUBLAS_DSPR2 (const char *uplo, const int *n, const double *alpha, + const double *x, const int *incx, const double *y, + const int *incy, double *AP) +{ + double *devPtrAP = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(1+(*n-1)*abs(*incy),sizeof(devPtry[0]),(void**)&devPtry); + stat3=cublasAlloc(((*n)*(*n+1))/2, sizeof(devPtrAP[0]), (void**)&devPtrAP); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dspr2", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrAP); + return; + } + stat1 = cublasSetVector (1+(*n-1)*abs(*incx),sizeof(x[0]),x,1,devPtrx,1); + stat2 = cublasSetVector (1+(*n-1)*abs(*incy),sizeof(y[0]),y,1,devPtry,1); + stat3 = cublasSetVector (((*n)*(*n+1))/2,sizeof(AP[0]),AP,1,devPtrAP,1); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dspr2", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrAP); + return; + } + cublasDspr2 (uplo[0], *n, *alpha, devPtrx, *incx, devPtry, *incy,devPtrAP); + stat1 = cublasGetVector (((*n)*(*n+1))/2,sizeof(AP[0]),devPtrAP,1,AP,1); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dspr2", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrAP); +} + +void CUBLAS_CHPR2 (const char *uplo, const int *n, const cuComplex *alpha, + const cuComplex *x, const int *incx, const cuComplex *y, + const int *incy, cuComplex *AP) +{ + cuComplex *devPtrAP = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(1+(*n-1)*abs(*incy),sizeof(devPtry[0]),(void**)&devPtry); + stat3=cublasAlloc(((*n)*(*n+1))/2, sizeof(devPtrAP[0]), (void**)&devPtrAP); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Chpr2", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrAP); + return; + } + stat1 = cublasSetVector (1+(*n-1)*abs(*incx),sizeof(x[0]),x,1,devPtrx,1); + stat2 = cublasSetVector (1+(*n-1)*abs(*incy),sizeof(y[0]),y,1,devPtry,1); + stat3 = cublasSetVector (((*n)*(*n+1))/2,sizeof(AP[0]),AP,1,devPtrAP,1); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Chpr2", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrAP); + return; + } + cublasChpr2 (uplo[0], *n, *alpha, devPtrx, *incx, devPtry, *incy,devPtrAP); + stat1 = cublasGetVector (((*n)*(*n+1))/2,sizeof(AP[0]),devPtrAP,1,AP,1); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Chpr2", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrAP); +} + +void CUBLAS_ZHPR2 (const char *uplo, const int *n, const cuDoubleComplex *alpha, + const cuDoubleComplex *x, const int *incx, const cuDoubleComplex *y, + const int *incy, cuDoubleComplex *AP) +{ + cuDoubleComplex *devPtrAP = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(1+(*n-1)*abs(*incy),sizeof(devPtry[0]),(void**)&devPtry); + stat3=cublasAlloc(((*n)*(*n+1))/2, sizeof(devPtrAP[0]), (void**)&devPtrAP); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zhpr2", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrAP); + return; + } + stat1 = cublasSetVector (1+(*n-1)*abs(*incx),sizeof(x[0]),x,1,devPtrx,1); + stat2 = cublasSetVector (1+(*n-1)*abs(*incy),sizeof(y[0]),y,1,devPtry,1); + stat3 = cublasSetVector (((*n)*(*n+1))/2,sizeof(AP[0]),AP,1,devPtrAP,1); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zhpr2", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrAP); + return; + } + cublasZhpr2 (uplo[0], *n, *alpha, devPtrx, *incx, devPtry, *incy,devPtrAP); + stat1 = cublasGetVector (((*n)*(*n+1))/2,sizeof(AP[0]),devPtrAP,1,AP,1); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Zhpr2", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrAP); +} + + +void CUBLAS_SSYMV (const char *uplo, const int *n, const float *alpha, + const float *A, const int *lda, const float *x, + const int *incx, const float *beta, float *y, + const int *incy) +{ + float *devPtrA = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if (*n == 0) return; + + /* X - REAL array of dimension at least + * ( 1 + ( n - 1 )*abs( INCX ) ). + * Y - REAL array of dimension at least + * ( 1 + ( n - 1 )*abs( INCY ) ). + * A - REAL array of DIMENSION ( LDA, n ). + * Before entry with UPLO = 'U' or 'u', the leading n by n + * upper triangular part of the array A must contain the upper + * Before entry with UPLO = 'L' or 'l', the leading n by n + * lower triangular part of the array A must contain the lower + */ + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(1+(*n-1)*abs(*incy),sizeof(devPtry[0]),(void**)&devPtry); + stat3=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ssymv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + stat1 = cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + stat3 = cublasSetMatrix (imin(*n,*lda), *n, sizeof(A[0]), A, *lda, devPtrA, + *lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ssymv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + cublasSsymv (uplo[0], *n, *alpha, devPtrA, *lda, devPtrx, *incx, *beta, + devPtry, *incy); + stat1 = cublasGetVector (*n,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Ssymv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); +} + +void CUBLAS_DSYMV (const char *uplo, const int *n, const double *alpha, + const double *A, const int *lda, const double *x, + const int *incx, const double *beta, double *y, + const int *incy) +{ + double *devPtrA = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(1+(*n-1)*abs(*incy),sizeof(devPtry[0]),(void**)&devPtry); + stat3=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dsymv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + stat1 = cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + stat3 = cublasSetMatrix (imin(*n,*lda), *n, sizeof(A[0]), A, *lda, devPtrA, + *lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dsymv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + cublasDsymv (uplo[0], *n, *alpha, devPtrA, *lda, devPtrx, *incx, *beta, + devPtry, *incy); + stat1 = cublasGetVector (*n,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dsymv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); +} + +void CUBLAS_CHEMV (const char *uplo, const int *n, const cuComplex *alpha, + const cuComplex *A, const int *lda, const cuComplex *x, + const int *incx, const cuComplex *beta, cuComplex *y, + const int *incy) +{ + cuComplex *devPtrA = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(1+(*n-1)*abs(*incy),sizeof(devPtry[0]),(void**)&devPtry); + stat3=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Chemv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + stat1 = cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + stat3 = cublasSetMatrix (imin(*n,*lda), *n, sizeof(A[0]), A, *lda, devPtrA, + *lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Chemv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + cublasChemv (uplo[0], *n, *alpha, devPtrA, *lda, devPtrx, *incx, *beta, + devPtry, *incy); + stat1 = cublasGetVector (*n,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Chemv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); +} + +void CUBLAS_ZHEMV (const char *uplo, const int *n, const cuDoubleComplex *alpha, + const cuDoubleComplex *A, const int *lda, const cuDoubleComplex *x, + const int *incx, const cuDoubleComplex *beta, cuDoubleComplex *y, + const int *incy) +{ + cuDoubleComplex *devPtrA = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(1+(*n-1)*abs(*incy),sizeof(devPtry[0]),(void**)&devPtry); + stat3=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zhemv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + stat1 = cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + stat3 = cublasSetMatrix (imin(*n,*lda), *n, sizeof(A[0]), A, *lda, devPtrA, + *lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zhemv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + cublasZhemv (uplo[0], *n, *alpha, devPtrA, *lda, devPtrx, *incx, *beta, + devPtry, *incy); + stat1 = cublasGetVector (*n,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Zhemv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); +} + +void CUBLAS_SSYR (const char *uplo, const int *n, const float *alpha, + const float *x, const int *incx, float *A, const int *lda) +{ + float *devPtrA = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + /* X - REAL array of dimension at least + * ( 1 + ( n - 1 )*abs( INCX ) ). + * A - REAL array of DIMENSION ( LDA, n ). + * Before entry with UPLO = 'U' or 'u', the leading n by n + * upper triangular part of the array A must contain the upper + * Before entry with UPLO = 'L' or 'l', the leading n by n + * lower triangular part of the array A must contain the lower + */ + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc((*lda)*(*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ssyr", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + stat1 = cublasSetVector(*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetMatrix(imin(*n,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ssyr", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + cublasSsyr (uplo[0], *n, *alpha, devPtrx, *incx, devPtrA, *lda); + stat1 = cublasGetMatrix(imin(*n,*lda),*n,sizeof(A[0]),devPtrA,*lda,A,*lda); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Ssyr", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtrA); +} + +void CUBLAS_SSYR2 (const char *uplo, const int *n, const float *alpha, + const float *x, const int *incx, const float *y, + const int *incy, float *A, const int *lda) +{ + float *devPtrA = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if (*n == 0) return; + + /* X - REAL array of dimension at least + * ( 1 + ( n - 1 )*abs( INCX ) ). + * Y - REAL array of dimension at least + * ( 1 + ( n - 1 )*abs( INCY ) ). + * A - REAL array of DIMENSION ( LDA, n ). + * Before entry with UPLO = 'U' or 'u', the leading n by n + * upper triangular part of the array A must contain the upper + * Before entry with UPLO = 'L' or 'l', the leading n by n + * lower triangular part of the array A must contain the lower + */ + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(1+(*n-1)*abs(*incy),sizeof(devPtry[0]),(void**)&devPtry); + stat3=cublasAlloc((*lda)*(*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ssyr2", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + stat1=cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector (*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + stat3=cublasSetMatrix (imin(*n,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ssyr2", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + cublasSsyr2 (uplo[0], *n, *alpha, devPtrx, *incx, devPtry, *incy, devPtrA, + *lda); + stat1=cublasGetMatrix (imin(*n,*lda),*n,sizeof(A[0]),devPtrA,*lda,A,*lda); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Ssyr2", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); +} + +void CUBLAS_DSYR2 (const char *uplo, const int *n, const double *alpha, + const double *x, const int *incx, const double *y, + const int *incy, double *A, const int *lda) +{ + double *devPtrA = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(1+(*n-1)*abs(*incy),sizeof(devPtry[0]),(void**)&devPtry); + stat3=cublasAlloc((*lda)*(*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dsyr2", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + stat1=cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector (*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + stat3=cublasSetMatrix (imin(*n,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dsyr2", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + cublasDsyr2 (uplo[0], *n, *alpha, devPtrx, *incx, devPtry, *incy, devPtrA, + *lda); + stat1=cublasGetMatrix (imin(*n,*lda),*n,sizeof(A[0]),devPtrA,*lda,A,*lda); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dsyr2", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); +} + +void CUBLAS_CHER2 (const char *uplo, const int *n, const cuComplex *alpha, + const cuComplex *x, const int *incx, const cuComplex *y, + const int *incy, cuComplex *A, const int *lda) +{ + cuComplex *devPtrA = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(1+(*n-1)*abs(*incy),sizeof(devPtry[0]),(void**)&devPtry); + stat3=cublasAlloc((*lda)*(*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Cher2", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + stat1=cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector (*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + stat3=cublasSetMatrix (imin(*n,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Cher2", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + cublasCher2 (uplo[0], *n, *alpha, devPtrx, *incx, devPtry, *incy, devPtrA, + *lda); + stat1=cublasGetMatrix (imin(*n,*lda),*n,sizeof(A[0]),devPtrA,*lda,A,*lda); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Cher2", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); +} + +void CUBLAS_ZHER2 (const char *uplo, const int *n, const cuDoubleComplex *alpha, + const cuDoubleComplex *x, const int *incx, const cuDoubleComplex *y, + const int *incy, cuDoubleComplex *A, const int *lda) +{ + cuDoubleComplex *devPtrA = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(1+(*n-1)*abs(*incy),sizeof(devPtry[0]),(void**)&devPtry); + stat3=cublasAlloc((*lda)*(*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zher2", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + stat1=cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector (*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + stat3=cublasSetMatrix (imin(*n,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zher2", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + cublasZher2 (uplo[0], *n, *alpha, devPtrx, *incx, devPtry, *incy, devPtrA, + *lda); + stat1=cublasGetMatrix (imin(*n,*lda),*n,sizeof(A[0]),devPtrA,*lda,A,*lda); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Zher2", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); +} + +void CUBLAS_STBMV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const float *A, const int *lda, + float *x, const int *incx) +{ + float *devPtrA = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + /* X - REAL array of dimension at least + * ( 1 + ( n - 1 )*abs( INCX ) ). + * A - REAL array of DIMENSION ( LDA, n ). + * Before entry with UPLO = 'U' or 'u', the leading ( k + 1 ) + * by n part of the array A must contain the upper triangular + * Before entry with UPLO = 'L' or 'l', the leading ( k + 1 ) + * by n part of the array A must contain the lower triangular + */ + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Stbmv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + stat1=cublasSetVector(*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetMatrix(imin(*k+1,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Stbmv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + cublasStbmv (uplo[0],trans[0],diag[0],*n,*k,devPtrA,*lda,devPtrx,*incx); + stat1 = cublasGetVector (*n,sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Stbmv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtrA); +} + + +void CUBLAS_DTBMV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const double *A, const int *lda, + double *x, const int *incx) +{ + double *devPtrA = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dtbmv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + stat1=cublasSetVector(*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetMatrix(imin(*k+1,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Stbmv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + cublasDtbmv (uplo[0],trans[0],diag[0],*n,*k,devPtrA,*lda,devPtrx,*incx); + stat1 = cublasGetVector (*n,sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dtbmv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtrA); +} + +void CUBLAS_CTBMV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const cuComplex *A, const int *lda, + cuComplex *x, const int *incx) +{ + cuComplex *devPtrA = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Stbmv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + stat1=cublasSetVector(*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetMatrix(imin(*k+1,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ctbmv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + cublasCtbmv (uplo[0],trans[0],diag[0],*n,*k,devPtrA,*lda,devPtrx,*incx); + stat1 = cublasGetVector (*n,sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Ctbmv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtrA); +} + +void CUBLAS_ZTBMV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const cuDoubleComplex *A, const int *lda, + cuDoubleComplex *x, const int *incx) +{ + cuDoubleComplex *devPtrA = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + /* X - REAL array of dimension at least + * ( 1 + ( n - 1 )*abs( INCX ) ). + * A - REAL array of DIMENSION ( LDA, n ). + * Before entry with UPLO = 'U' or 'u', the leading ( k + 1 ) + * by n part of the array A must contain the upper triangular + * Before entry with UPLO = 'L' or 'l', the leading ( k + 1 ) + * by n part of the array A must contain the lower triangular + */ + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ztbmv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + stat1=cublasSetVector(*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetMatrix(imin(*k+1,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ztbmv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + cublasZtbmv (uplo[0],trans[0],diag[0],*n,*k,devPtrA,*lda,devPtrx,*incx); + stat1 = cublasGetVector (*n,sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Ztbmv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtrA); +} + +void CUBLAS_STBSV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const float *A, const int *lda, + float *x, const int *incx) +{ + float *devPtrA = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + /* X - REAL array of dimension at least + * ( 1 + ( n - 1 )*abs( INCX ) ). + * A - REAL array of DIMENSION ( LDA, n ). + * Before entry with UPLO = 'U' or 'u', the leading ( k + 1 ) + * by n part of the array A must contain the upper triangular + * Before entry with UPLO = 'L' or 'l', the leading ( k + 1 ) + * by n part of the array A must contain the lower triangular + */ + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Stbsv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + stat1=cublasSetVector(*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetMatrix(imin(*k+1,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Stbsv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + cublasStbsv (uplo[0],trans[0],diag[0],*n,*k,devPtrA,*lda,devPtrx,*incx); + stat1 = cublasGetVector (*n,sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Stbsv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtrA); +} + +void CUBLAS_DTBSV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const double *A, const int *lda, + double *x, const int *incx) +{ + double *devPtrA = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dtbsv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + stat1=cublasSetVector(*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetMatrix(imin(*k+1,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dtbsv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + cublasDtbsv (uplo[0],trans[0],diag[0],*n,*k,devPtrA,*lda,devPtrx,*incx); + stat1 = cublasGetVector (*n,sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dtbsv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtrA); +} + +void CUBLAS_CTBSV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const cuComplex *A, const int *lda, + cuComplex *x, const int *incx) +{ + cuComplex *devPtrA = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ctbsv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + stat1=cublasSetVector(*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetMatrix(imin(*k+1,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ctbsv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + cublasCtbsv (uplo[0],trans[0],diag[0],*n,*k,devPtrA,*lda,devPtrx,*incx); + stat1 = cublasGetVector (*n,sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Ctbsv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtrA); +} + +void CUBLAS_ZTBSV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const cuDoubleComplex *A, const int *lda, + cuDoubleComplex *x, const int *incx) +{ + cuDoubleComplex *devPtrA = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ztbsv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + stat1=cublasSetVector(*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetMatrix(imin(*k+1,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ztbsv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + cublasZtbsv (uplo[0],trans[0],diag[0],*n,*k,devPtrA,*lda,devPtrx,*incx); + stat1 = cublasGetVector (*n,sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Ztbsv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtrA); +} + +void CUBLAS_STPMV (const char *uplo, const char *trans, const char *diag, + const int *n, const float *AP, float *x, const int *incx) +{ + float *devPtrAP = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + /* X - REAL array of dimension at least + * ( 1 + ( n - 1 )*abs( INCX ) ). + * AP - REAL array of DIMENSION at least + * ( ( n*( n + 1 ) )/2 ). + */ + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(((*n)*(*n+1))/2, sizeof(devPtrAP[0]), (void**)&devPtrAP); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Stpmv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrAP); + return; + } + stat1 = cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (((*n)*(*n+1))/2,sizeof(AP[0]),AP,1,devPtrAP,1); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Stpmv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrAP); + return; + } + cublasStpmv (uplo[0], trans[0], diag[0], *n, devPtrAP, devPtrx, *incx); + stat1 = cublasGetVector (*n,sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Stpmv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtrAP); +} + +void CUBLAS_DTPMV (const char *uplo, const char *trans, const char *diag, + const int *n, const double *AP, double *x, const int *incx) +{ + double *devPtrAP = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(((*n)*(*n+1))/2, sizeof(devPtrAP[0]), (void**)&devPtrAP); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dtpmv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrAP); + return; + } + stat1 = cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (((*n)*(*n+1))/2,sizeof(AP[0]),AP,1,devPtrAP,1); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dtpmv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrAP); + return; + } + cublasDtpmv (uplo[0], trans[0], diag[0], *n, devPtrAP, devPtrx, *incx); + stat1 = cublasGetVector (*n,sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dtpmv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtrAP); +} + +void CUBLAS_CTPMV (const char *uplo, const char *trans, const char *diag, + const int *n, const cuComplex *AP, cuComplex *x, const int *incx) +{ + cuComplex *devPtrAP = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(((*n)*(*n+1))/2, sizeof(devPtrAP[0]), (void**)&devPtrAP); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ctpmv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrAP); + return; + } + stat1 = cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (((*n)*(*n+1))/2,sizeof(AP[0]),AP,1,devPtrAP,1); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ctpmv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrAP); + return; + } + cublasCtpmv (uplo[0], trans[0], diag[0], *n, devPtrAP, devPtrx, *incx); + stat1 = cublasGetVector (*n,sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Ctpmv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtrAP); +} + +void CUBLAS_ZTPMV (const char *uplo, const char *trans, const char *diag, + const int *n, const cuDoubleComplex *AP, cuDoubleComplex *x, const int *incx) +{ + cuDoubleComplex *devPtrAP = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(((*n)*(*n+1))/2, sizeof(devPtrAP[0]), (void**)&devPtrAP); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ztpmv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrAP); + return; + } + stat1 = cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (((*n)*(*n+1))/2,sizeof(AP[0]),AP,1,devPtrAP,1); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ctpmv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrAP); + return; + } + cublasZtpmv (uplo[0], trans[0], diag[0], *n, devPtrAP, devPtrx, *incx); + stat1 = cublasGetVector (*n,sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Ztpmv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtrAP); +} + +void CUBLAS_STPSV (const char *uplo, const char *trans, const char *diag, + const int *n, const float *AP, float *x, const int *incx) +{ + float *devPtrAP = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + /* X - REAL array of dimension at least + * ( 1 + ( n - 1 )*abs( INCX ) ). + * AP - REAL array of DIMENSION at least + * ( ( n*( n + 1 ) )/2 ). + */ + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(((*n)*(*n+1))/2, sizeof(devPtrAP[0]), (void**)&devPtrAP); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Stpsv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrAP); + return; + } + stat1 = cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (((*n)*(*n+1))/2,sizeof(AP[0]),AP,1,devPtrAP,1); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Stpsv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrAP); + return; + } + cublasStpsv (uplo[0], trans[0], diag[0], *n, devPtrAP, devPtrx, *incx); + stat1 = cublasGetVector (*n,sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Stpsv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtrAP); +} + +void CUBLAS_DTPSV (const char *uplo, const char *trans, const char *diag, + const int *n, const double *AP, double *x, const int *incx) +{ + double *devPtrAP = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(((*n)*(*n+1))/2, sizeof(devPtrAP[0]), (void**)&devPtrAP); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dtpsv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrAP); + return; + } + stat1 = cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (((*n)*(*n+1))/2,sizeof(AP[0]),AP,1,devPtrAP,1); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dtpsv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrAP); + return; + } + cublasDtpsv (uplo[0], trans[0], diag[0], *n, devPtrAP, devPtrx, *incx); + stat1 = cublasGetVector (*n,sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dtpsv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtrAP); +} + +void CUBLAS_CTPSV (const char *uplo, const char *trans, const char *diag, + const int *n, const cuComplex *AP, cuComplex *x, const int *incx) +{ + cuComplex *devPtrAP = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(((*n)*(*n+1))/2, sizeof(devPtrAP[0]), (void**)&devPtrAP); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ctpsv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrAP); + return; + } + stat1 = cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (((*n)*(*n+1))/2,sizeof(AP[0]),AP,1,devPtrAP,1); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ctpsv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrAP); + return; + } + cublasCtpsv (uplo[0], trans[0], diag[0], *n, devPtrAP, devPtrx, *incx); + stat1 = cublasGetVector (*n,sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Ctpsv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtrAP); +} + +void CUBLAS_ZTPSV (const char *uplo, const char *trans, const char *diag, + const int *n, const cuDoubleComplex *AP, cuDoubleComplex *x, const int *incx) +{ + cuDoubleComplex *devPtrAP = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(((*n)*(*n+1))/2, sizeof(devPtrAP[0]), (void**)&devPtrAP); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ztpsv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrAP); + return; + } + stat1 = cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetVector (((*n)*(*n+1))/2,sizeof(AP[0]),AP,1,devPtrAP,1); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ztpsv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrAP); + return; + } + cublasZtpsv (uplo[0], trans[0], diag[0], *n, devPtrAP, devPtrx, *incx); + stat1 = cublasGetVector (*n,sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Ztpsv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtrAP); +} + +void CUBLAS_STRMV (const char *uplo, const char *trans, + const char *diag, const int *n, const float *A, + const int *lda, float *x, const int *incx) +{ + float *devPtrA = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + /* X - REAL array of dimension at least + * ( 1 + ( n - 1 )*abs( INCX ) ). + * A - REAL array of DIMENSION ( LDA, n ). + * Before entry with UPLO = 'U' or 'u', the leading n by n + * upper triangular part of the array A must contain the upper + */ + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Strmv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + stat1=cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetMatrix (imin(*n,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Strmv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + cublasStrmv (uplo[0], trans[0], diag[0], *n, devPtrA, *lda, devPtrx,*incx); + stat1=cublasGetVector (*n,sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Strmv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrx); +} + +void CUBLAS_STRSV (const char *uplo, const char *trans, const char *diag, + const int *n, const float *A, const int *lda, float *x, + const int *incx) +{ + float *devPtrA = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + /* X - REAL array of dimension at least + * ( 1 + ( n - 1 )*abs( INCX ) ). + * A - REAL array of DIMENSION ( LDA, n ). + * Before entry with UPLO = 'U' or 'u', the leading n by n + * upper triangular part of the array A must contain the upper + * Before entry with UPLO = 'L' or 'l', the leading n by n + * lower triangular part of the array A must contain the lower + */ + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Strsv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + stat1=cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetMatrix (imin(*n,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Strsv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + cublasStrsv (uplo[0], trans[0], diag[0], *n, devPtrA, *lda, devPtrx,*incx); + stat1=cublasGetVector (*n,sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Strsv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtrA); +} + +void CUBLAS_DGEMV (const char *trans, const int *m, const int *n, + const double *alpha, const double *A, const int *lda, + const double *x, const int *incx, const double *beta, + double *y, const int *incy) +{ + double *devPtrA = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if ((*m == 0) || (*n == 0)) return; + + /* X - REAL array of DIMENSION at least + * ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n' + * and at least + * ( 1 + ( m - 1 )*abs( INCX ) ) otherwise. + * Y - REAL array of DIMENSION at least + * ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n' + * and at least + * ( 1 + ( n - 1 )*abs( INCY ) ) otherwise. + * A - REAL array of DIMENSION ( LDA, n ). + * Before entry, the leading m by n part of the array A must + * contain the matrix of coefficients. + */ + if (toupper(trans[0]) == 'N') { + stat1 = cublasAlloc(1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc(1+(*m-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + } else { + stat1 = cublasAlloc(1+(*m-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc(1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + } + stat3 = cublasAlloc ((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dgemv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + if (toupper(trans[0]) == 'N') { + stat1=cublasSetVector(*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector(*m,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + } else { + stat1=cublasSetVector(*m,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector(*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + } + stat3=cublasSetMatrix (imin(*m,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + stat3=cublasSetMatrix (imin(*m,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dgemv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + cublasDgemv (trans[0], *m, *n, *alpha, devPtrA, *lda, devPtrx, *incx, + *beta, devPtry, *incy); + if (toupper(trans[0]) == 'N') { + stat1=cublasGetVector(*m,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + } else { + stat1=cublasGetVector(*n,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + } + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dgemv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrx); + cublasFree (devPtry); +} + +void CUBLAS_ZGEMV (const char *trans, const int *m, const int *n, + const cuDoubleComplex *alpha, const cuDoubleComplex *A, + const int *lda, const cuDoubleComplex *x, const int *incx, + const cuDoubleComplex *beta, cuDoubleComplex *y, + const int *incy) +{ + cuDoubleComplex *devPtrA = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if ((*m == 0) || (*n == 0)) return; + + /* X - REAL array of DIMENSION at least + * ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n' + * and at least + * ( 1 + ( m - 1 )*abs( INCX ) ) otherwise. + * Y - REAL array of DIMENSION at least + * ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n' + * and at least + * ( 1 + ( n - 1 )*abs( INCY ) ) otherwise. + * A - REAL array of DIMENSION ( LDA, n ). + * Before entry, the leading m by n part of the array A must + * contain the matrix of coefficients. + */ + if (toupper(trans[0]) == 'N') { + stat1 = cublasAlloc(1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc(1+(*m-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + } else { + stat1 = cublasAlloc(1+(*m-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc(1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + } + stat3 = cublasAlloc ((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zgemv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + if (toupper(trans[0]) == 'N') { + stat1=cublasSetVector(*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector(*m,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + } else { + stat1=cublasSetVector(*m,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector(*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + } + stat3=cublasSetMatrix (imin(*m,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + stat3=cublasSetMatrix (imin(*m,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zgemv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + cublasZgemv (trans[0], *m, *n, *alpha, devPtrA, *lda, devPtrx, *incx, + *beta, devPtry, *incy); + if (toupper(trans[0]) == 'N') { + stat1=cublasGetVector(*m,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + } else { + stat1=cublasGetVector(*n,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + } + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Zgemv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrx); + cublasFree (devPtry); +} + +void CUBLAS_DGER (const int *m, const int *n, const double *alpha, + const double *x, const int *incx, const double *y, + const int *incy, double *A, const int *lda) +{ + double *devPtrA = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if ((*m == 0) || (*n == 0)) return; + + /* X - REAL array of dimension at least + * ( 1 + ( m - 1 )*abs( INCX ) ). + * + * Y - REAL array of dimension at least + * ( 1 + ( n - 1 )*abs( INCY ) ). + * + * A - REAL array of DIMENSION ( LDA, n ). + * Before entry, the leading m by n part of the array A must + * contain the matrix of coefficients. On exit, A is + */ + stat1=cublasAlloc(1+(*m-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(1+(*n-1)*abs(*incy),sizeof(devPtry[0]),(void**)&devPtry); + stat3=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dger", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + stat1=cublasSetVector(*m,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector(*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + stat3=cublasSetMatrix(imin(*m,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dger", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + cublasDger (*m, *n, *alpha, devPtrx, *incx, devPtry, *incy, devPtrA, *lda); + stat1 = cublasGetMatrix(imin(*m,*lda),*n,sizeof(A[0]),devPtrA,*lda,A,*lda); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dger", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); +} + +void CUBLAS_CGERU (const int *m, const int *n, const cuComplex *alpha, + const cuComplex *x, const int *incx, const cuComplex *y, + const int *incy, cuComplex *A, const int *lda) +{ + cuComplex *devPtrA = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if ((*m == 0) || (*n == 0)) return; + + stat1=cublasAlloc(1+(*m-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(1+(*n-1)*abs(*incy),sizeof(devPtry[0]),(void**)&devPtry); + stat3=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Cgeru", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + stat1=cublasSetVector(*m,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector(*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + stat3=cublasSetMatrix(imin(*m,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Cgeru", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + cublasCgeru (*m, *n, *alpha, devPtrx, *incx, devPtry, *incy, devPtrA, *lda); + stat1 = cublasGetMatrix(imin(*m,*lda),*n,sizeof(A[0]),devPtrA,*lda,A,*lda); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Cgeru", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); +} + +void CUBLAS_CGERC (const int *m, const int *n, const cuComplex *alpha, + const cuComplex *x, const int *incx, const cuComplex *y, + const int *incy, cuComplex *A, const int *lda) +{ + cuComplex *devPtrA = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if ((*m == 0) || (*n == 0)) return; + + stat1=cublasAlloc(1+(*m-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(1+(*n-1)*abs(*incy),sizeof(devPtry[0]),(void**)&devPtry); + stat3=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Cgerc", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + stat1=cublasSetVector(*m,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector(*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + stat3=cublasSetMatrix(imin(*m,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Cgerc", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + cublasCgerc (*m, *n, *alpha, devPtrx, *incx, devPtry, *incy, devPtrA, *lda); + stat1 = cublasGetMatrix(imin(*m,*lda),*n,sizeof(A[0]),devPtrA,*lda,A,*lda); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Cgerc", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); +} + +void CUBLAS_ZGERU (const int *m, const int *n, const cuDoubleComplex *alpha, + const cuDoubleComplex *x, const int *incx, const cuDoubleComplex *y, + const int *incy, cuDoubleComplex *A, const int *lda) +{ + cuDoubleComplex *devPtrA = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if ((*m == 0) || (*n == 0)) return; + + stat1=cublasAlloc(1+(*m-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(1+(*n-1)*abs(*incy),sizeof(devPtry[0]),(void**)&devPtry); + stat3=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zgeru", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + stat1=cublasSetVector(*m,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector(*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + stat3=cublasSetMatrix(imin(*m,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zgeru", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + cublasZgeru (*m, *n, *alpha, devPtrx, *incx, devPtry, *incy, devPtrA, *lda); + stat1 = cublasGetMatrix(imin(*m,*lda),*n,sizeof(A[0]),devPtrA,*lda,A,*lda); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Zgeru", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); +} + +void CUBLAS_ZGERC (const int *m, const int *n, const cuDoubleComplex *alpha, + const cuDoubleComplex *x, const int *incx, const cuDoubleComplex *y, + const int *incy, cuDoubleComplex *A, const int *lda) +{ + cuDoubleComplex *devPtrA = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if ((*m == 0) || (*n == 0)) return; + + stat1=cublasAlloc(1+(*m-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc(1+(*n-1)*abs(*incy),sizeof(devPtry[0]),(void**)&devPtry); + stat3=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zgerc", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + stat1=cublasSetVector(*m,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector(*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + stat3=cublasSetMatrix(imin(*m,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zgerc", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + cublasZgerc (*m, *n, *alpha, devPtrx, *incx, devPtry, *incy, devPtrA, *lda); + stat1 = cublasGetMatrix(imin(*m,*lda),*n,sizeof(A[0]),devPtrA,*lda,A,*lda); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Zgerc" , CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); +} + +void CUBLAS_DSYR (const char *uplo, const int *n, const double *alpha, + const double *x, const int *incx, double *A, const int *lda) +{ + double *devPtrA = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + /* X - REAL array of dimension at least + * ( 1 + ( n - 1 )*abs( INCX ) ). + * A - REAL array of DIMENSION ( LDA, n ). + * Before entry with UPLO = 'U' or 'u', the leading n by n + * upper triangular part of the array A must contain the upper + * Before entry with UPLO = 'L' or 'l', the leading n by n + * lower triangular part of the array A must contain the lower + */ + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dsyr", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + stat1 = cublasSetVector(*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetMatrix(imin(*n,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dsyr", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + cublasDsyr (uplo[0], *n, *alpha, devPtrx, *incx, devPtrA, *lda); + stat1 = cublasGetMatrix(imin(*n,*lda),*n,sizeof(A[0]),devPtrA,*lda,A,*lda); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dsyr", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtrA); +} + +void CUBLAS_CHER (const char *uplo, const int *n, const float *alpha, + const cuComplex *x, const int *incx, cuComplex *A, const int *lda) +{ + cuComplex *devPtrA = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Cher", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + stat1 = cublasSetVector(*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetMatrix(imin(*n,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Cher", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + cublasCher (uplo[0], *n, *alpha, devPtrx, *incx, devPtrA, *lda); + stat1 = cublasGetMatrix(imin(*n,*lda),*n,sizeof(A[0]),devPtrA,*lda,A,*lda); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Cher", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtrA); +} + +void CUBLAS_ZHER (const char *uplo, const int *n, const double *alpha, + const cuDoubleComplex *x, const int *incx, cuDoubleComplex *A, const int *lda) +{ + cuDoubleComplex *devPtrA = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zher", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + stat1 = cublasSetVector(*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2 = cublasSetMatrix(imin(*n,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zher", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + cublasZher (uplo[0], *n, *alpha, devPtrx, *incx, devPtrA, *lda); + stat1 = cublasGetMatrix(imin(*n,*lda),*n,sizeof(A[0]),devPtrA,*lda,A,*lda); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Zher", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtrA); +} + +void CUBLAS_DTRSV (const char *uplo, const char *trans, const char *diag, + const int *n, const double *A, const int *lda, double *x, + const int *incx) +{ + double *devPtrA = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + /* X - REAL array of dimension at least + * ( 1 + ( n - 1 )*abs( INCX ) ). + * A - REAL array of DIMENSION ( LDA, n ). + * Before entry with UPLO = 'U' or 'u', the leading n by n + * upper triangular part of the array A must contain the upper + * Before entry with UPLO = 'L' or 'l', the leading n by n + * lower triangular part of the array A must contain the lower + */ + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dtrsv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + stat1=cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetMatrix (imin(*n,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dtrsv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + cublasDtrsv (uplo[0], trans[0], diag[0], *n, devPtrA, *lda, devPtrx,*incx); + stat1=cublasGetVector (*n,sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dtrsv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtrA); +} + +void CUBLAS_CTRSV (const char *uplo, const char *trans, const char *diag, + const int *n, const cuComplex *A, const int *lda, cuComplex *x, + const int *incx) +{ + cuComplex *devPtrA = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ctrsv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + stat1=cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetMatrix (imin(*n,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ctrsv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + cublasCtrsv (uplo[0], trans[0], diag[0], *n, devPtrA, *lda, devPtrx,*incx); + stat1=cublasGetVector (*n,sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Ctrsv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtrA); +} + +void CUBLAS_ZTRSV (const char *uplo, const char *trans, const char *diag, + const int *n, const cuDoubleComplex *A, const int *lda, + cuDoubleComplex *x, const int *incx) +{ + cuDoubleComplex *devPtrA = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ztrsv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + stat1=cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetMatrix (imin(*n,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ztrsv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + cublasZtrsv (uplo[0], trans[0], diag[0], *n, devPtrA, *lda, devPtrx,*incx); + stat1=cublasGetVector (*n,sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Ztrsv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrx); + cublasFree (devPtrA); +} + +void CUBLAS_DTRMV (const char *uplo, const char *trans, + const char *diag, const int *n, const double *A, + const int *lda, double *x, const int *incx) +{ + double *devPtrA = 0, *devPtrx = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + /* X - REAL array of dimension at least + * ( 1 + ( n - 1 )*abs( INCX ) ). + * A - REAL array of DIMENSION ( LDA, n ). + * Before entry with UPLO = 'U' or 'u', the leading n by n + * upper triangular part of the array A must contain the upper + */ + stat1=cublasAlloc(1+(*n-1)*abs(*incx),sizeof(devPtrx[0]),(void**)&devPtrx); + stat2=cublasAlloc((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dtrmv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + stat1=cublasSetVector (*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetMatrix (imin(*n,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dtrmv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtrA); + return; + } + cublasDtrmv (uplo[0], trans[0], diag[0], *n, devPtrA, *lda, devPtrx,*incx); + stat1=cublasGetVector (*n,sizeof(x[0]),devPtrx,abs(*incx),x,abs(*incx)); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dtrmv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrx); +} + +/*---------------------------------------------------------------------------*/ +/*---------------------------------- BLAS3 ----------------------------------*/ +/*---------------------------------------------------------------------------*/ + +void CUBLAS_SGEMM (const char *transa, const char *transb, const int *m, + const int *n, const int *k, const float *alpha, + const float *A, const int *lda, const float *B, + const int *ldb, const float *beta, float *C, const int *ldc) +{ + int ka, kb; + float *devPtrA = 0, *devPtrB = 0, *devPtrC = 0; + cublasStatus stat1, stat2, stat3; + + if ((*m == 0) || (*n == 0)) return; + + /* A - REAL array of DIMENSION ( LDA, ka ), where ka is + * k when TRANSA = 'N' or 'n', and is m otherwise. + * Before entry with TRANSA = 'N' or 'n', the leading m by k + * part of the array A must contain the matrix A, otherwise + * the leading k by m part of the array A must contain the + * matrix A. + * B - REAL array of DIMENSION ( LDB, kb ), where kb is + * n when TRANSB = 'N' or 'n', and is k otherwise. + * Before entry with TRANSB = 'N' or 'n', the leading k by n + * part of the array B must contain the matrix B, otherwise + * the leading n by k part of the array B must contain the + * matrix B. + * C - REAL array of DIMENSION ( LDC, n ). + * Before entry, the leading m by n part of the array C must + * contain the matrix C, except when beta is zero, in which + * case C need not be set on entry. + * On exit, the array C is overwritten by the m by n matrix + */ + ka = (toupper(transa[0]) == 'N') ? *k : *m; + kb = (toupper(transb[0]) == 'N') ? *n : *k; + stat1 = cublasAlloc (imax(1,*lda*ka),sizeof(devPtrA[0]), (void**)&devPtrA); + stat2 = cublasAlloc (imax(1,*ldb*kb),sizeof(devPtrB[0]), (void**)&devPtrB); + stat3 = cublasAlloc ((*ldc) * (*n), sizeof(devPtrC[0]), (void**)&devPtrC); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Sgemm", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + if (toupper(transa[0]) == 'N') { + stat1=cublasSetMatrix(imin(*m,*lda),*k,sizeof(A[0]),A,*lda,devPtrA,*lda); + } else { + stat1=cublasSetMatrix(imin(*k,*lda),*m,sizeof(A[0]),A,*lda,devPtrA,*lda); + } + if (toupper(transb[0]) == 'N') { + stat2=cublasSetMatrix(imin(*k,*ldb),*n,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + } else { + stat2=cublasSetMatrix(imin(*n,*ldb),*k,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + } + stat3=cublasSetMatrix(imin(*m,*ldc),*n,sizeof(C[0]),C,*ldc,devPtrC,*ldc); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Sgemm", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + cublasSgemm (transa[0], transb[0], *m, *n, *k, *alpha, devPtrA, *lda, + devPtrB, *ldb, *beta, devPtrC, *ldc); + stat1=cublasGetMatrix(imin(*m,*ldc),*n,sizeof(C[0]),devPtrC,*ldc,C,*ldc); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Sgemm", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); +} + +void CUBLAS_SSYMM (const char *side, const char *uplo, const int *m, + const int *n, const float *alpha, const float *A, + const int *lda, const float *B, const int *ldb, + const float *beta, float *C, const int *ldc) +{ + int ka; + float *devPtrA = 0, *devPtrB = 0, *devPtrC = 0; + cublasStatus stat1, stat2, stat3; + + if ((*m == 0) || (*n == 0)) return; + + /* A - REAL array of DIMENSION ( LDA, ka ), where ka is + * m when SIDE = 'L' or 'l' and is n otherwise. + * Before entry with SIDE = 'L' or 'l', the m by m part of + * the array A must contain the symmetric matrix, [..] + * Before entry with SIDE = 'R' or 'r', the n by n part of + * the array A must contain the symmetric matrix, [..] + * B - REAL array of DIMENSION ( LDB, n ). + * Before entry, the leading m by n part of the array B must + * contain the matrix B. + * C - REAL array of DIMENSION ( LDC, n ). + * Before entry, the leading m by n part of the array C must + * contain the matrix C, except when beta is zero, in which + * case C need not be set on entry. + */ + ka = (toupper(side[0]) == 'L') ? *m : *n; + stat1 = cublasAlloc ((*lda) * ka, sizeof(devPtrA[0]), (void**)&devPtrA); + stat2 = cublasAlloc ((*ldb) * (*n), sizeof(devPtrB[0]), (void**)&devPtrB); + stat3 = cublasAlloc ((*ldc) * (*n), sizeof(devPtrC[0]), (void**)&devPtrC); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ssymm", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + stat1 = cublasSetMatrix(imin(ka,*lda),ka,sizeof(A[0]),A,*lda,devPtrA,*lda); + stat2 = cublasSetMatrix(imin(*m,*ldb),*n,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + stat3 = cublasSetMatrix(imin(*m,*ldc),*n,sizeof(C[0]),C,*ldc,devPtrC,*ldc); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ssymm", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + cublasSsymm (side[0], uplo[0], *m, *n, *alpha, devPtrA, *lda, devPtrB, + *ldb, *beta, devPtrC, *ldc); + stat1 = cublasGetMatrix(imin(*m,*ldc),*n,sizeof(C[0]),devPtrC,*ldc,C,*ldc); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Ssymm", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); +} + +void CUBLAS_SSYR2K (const char *uplo, const char *trans, const int *n, + const int *k, const float *alpha, const float *A, + const int *lda, const float *B, const int *ldb, + const float *beta, float *C, const int *ldc) +{ + int ka, kb; + float *devPtrA = 0, *devPtrB = 0, *devPtrC = 0; + cublasStatus stat1, stat2, stat3; + + if (*n == 0) return; + + /* A - REAL array of DIMENSION ( LDA, ka ), where ka is + * k when TRANS = 'N' or 'n', and is n otherwise. + * Before entry with TRANS = 'N' or 'n', the leading n by k + * part of the array A must contain the matrix A, otherwise + * the leading k by n part of the array A must contain the + * matrix A. + * B - REAL array of DIMENSION ( LDB, kb ), where kb is + * k when TRANS = 'N' or 'n', and is n otherwise. + * Before entry with TRANS = 'N' or 'n', the leading n by k + * part of the array B must contain the matrix B, otherwise + * the leading k by n part of the array B must contain the + * matrix B. + * C - single precision array of dimensions (ldc, n). If uplo == 'U' + * or 'u', the leading n x n triangular part of the array C must + */ + ka = (toupper(trans[0]) == 'N') ? *k : *n; + kb = (toupper(trans[0]) == 'N') ? *k : *n; + stat1 = cublasAlloc (imax(1,*lda*ka),sizeof(devPtrA[0]),(void**)&devPtrA); + stat2 = cublasAlloc (imax(1,*ldb*kb),sizeof(devPtrB[0]),(void**)&devPtrB); + stat3 = cublasAlloc ((*ldc) * (*n), sizeof(devPtrC[0]),(void**)&devPtrC); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ssyr2k", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + if (toupper(trans[0]) == 'N') { + stat1=cublasSetMatrix(imin(*n,*lda),*k,sizeof(A[0]),A,*lda,devPtrA,*lda); + stat2=cublasSetMatrix(imin(*n,*ldb),*k,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + } else { + stat1=cublasSetMatrix(imin(*k,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + stat2=cublasSetMatrix(imin(*k,*ldb),*n,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + } + stat3 = cublasSetMatrix(imin(*n,*ldc),*n,sizeof(C[0]),C,*ldc,devPtrC,*ldc); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ssyr2k", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + cublasSsyr2k (uplo[0], trans[0], *n, *k, *alpha, devPtrA, *lda, devPtrB, + *ldb, *beta, devPtrC, *ldc); + stat1 = cublasGetMatrix(imin(*n,*ldc),*n,sizeof(C[0]),devPtrC,*ldc,C,*ldc); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Ssyr2k", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); +} + +void CUBLAS_SSYRK (const char *uplo, const char *trans, const int *n, + const int *k, const float *alpha, const float *A, + const int *lda, const float *beta, float *C, const int *ldc) +{ + int ka; + float *devPtrA = 0, *devPtrC = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + /* A single precision array of dimensions (lda, ka), where ka is k + * when trans == 'N' or 'n', and is n otherwise. When trans == 'N' + * or 'n', the leading n x k part of array A must contain the matrix + * A, otherwise the leading k x n part of the array must contain the + * matrix A. + * C single precision array of dimensions (ldc, n). If uplo='U'or'u', + * the leading n x n triangular part of the array C must contain the + * upper triangular part of the symmetric matrix C and the strictly + */ + ka = (toupper(trans[0]) == 'N') ? *k : *n; + stat1 = cublasAlloc (imax(1,*lda*ka),sizeof(devPtrA[0]),(void**)&devPtrA); + stat2 = cublasAlloc ((*ldc)*(*n), sizeof(devPtrC[0]), (void**)&devPtrC); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ssyrk", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrC); + return; + } + if (toupper(trans[0]) == 'N') { + stat1=cublasSetMatrix(imin(*n,*lda),*k,sizeof(A[0]),A,*lda,devPtrA,*lda); + } else { + stat1=cublasSetMatrix(imin(*k,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + } + stat2 = cublasSetMatrix(imin(*n,*ldc),*n,sizeof(C[0]),C,*ldc,devPtrC,*ldc); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ssyrk", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrC); + return; + } + cublasSsyrk (uplo[0], trans[0], *n, *k, *alpha, devPtrA, *lda, *beta, + devPtrC, *ldc); + stat1 = cublasGetMatrix(imin(*n,*ldc),*n,sizeof(C[0]),devPtrC,*ldc,C,*ldc); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Ssyrk", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrC); +} + +void CUBLAS_STRMM (const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const float *alpha, const float *A, const int *lda, + float *B, const int *ldb) +{ + int k; + float *devPtrA = 0, *devPtrB = 0; + cublasStatus stat1, stat2; + + if ((*m == 0) || (*n == 0)) return; + + /* A single precision array of dimensions (lda, k). k = m if side = + * 'L' or 'l', k = n if side = 'R' or 'r'. If uplo = 'U' or 'u' + * the leading k x k upper triangular part of the array A must + * contain the upper triangular matrix, and the strictly lower + * triangular part of A is not referenced. If uplo = 'L' or 'l' + * the leading k x k lower triangular part of the array A must + * contain the lower triangular matrix, and the strictly upper + * B single precision array of dimensions (ldb, n). On entry, the + * leading m x n part of the array contains the matrix B. It is + * overwritten with the transformed matrix on exit. + */ + k = (toupper(side[0]) == 'L') ? *m : *n; + stat1 = cublasAlloc (*lda * k, sizeof(devPtrA[0]), (void**)&devPtrA); + stat2 = cublasAlloc (*ldb * (*n), sizeof(devPtrB[0]), (void**)&devPtrB); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Strmm", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrB); + return; + } + stat1 = cublasSetMatrix(imin(k,*lda),k,sizeof(A[0]),A,*lda,devPtrA,*lda); + stat2 = cublasSetMatrix(imin(*m,*ldb),*n,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Strmm", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrB); + return; + } + cublasStrmm (side[0], uplo[0], transa[0], diag[0], *m, *n, *alpha, devPtrA, + *lda, devPtrB, *ldb); + stat1 = cublasGetMatrix(imin(*m,*ldb),*n,sizeof(B[0]),devPtrB,*ldb,B,*ldb); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Strmm", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrB); +} + +void CUBLAS_STRSM (const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const float *alpha, const float *A, const int *lda, + float *B, const int *ldb) +{ + float *devPtrA = 0, *devPtrB = 0; + int k; + cublasStatus stat1, stat2; + + if ((*m == 0) || (*n == 0)) return; + + /* A - REAL array of DIMENSION ( LDA, k ), where k is m + * when SIDE = 'L' or 'l' and is n when SIDE = 'R' or 'r'. + * Before entry with UPLO = 'U' or 'u', the leading k by k + * upper triangular part of the array A must contain the upper + * B - REAL array of DIMENSION ( LDB, n ). + * Before entry, the leading m by n part of the array B must + * contain the right-hand side matrix B, and on exit is + */ + k = (toupper(side[0]) == 'L') ? *m : *n; + stat1 = cublasAlloc (*lda * k, sizeof(devPtrA[0]), (void**)&devPtrA); + stat2 = cublasAlloc (*ldb * (*n), sizeof(devPtrB[0]), (void**)&devPtrB); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Strsm", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrB); + return; + } + stat1 = cublasSetMatrix(imin(k,*lda),k,sizeof(A[0]),A,*lda,devPtrA,*lda); + stat2 = cublasSetMatrix(imin(*m,*ldb),*n,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Strsm", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrB); + return; + } + cublasStrsm (side[0], uplo[0], transa[0], diag[0], *m, *n, *alpha, devPtrA, + *lda, devPtrB, *ldb); + stat1 = cublasGetMatrix(imin(*m,*ldb),*n,sizeof(B[0]),devPtrB,*ldb,B,*ldb); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Strsm", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrB); +} + +void CUBLAS_CGEMM (const char *transa, const char *transb, const int *m, + const int *n, const int *k, const cuComplex *alpha, + const cuComplex *A, const int *lda, const cuComplex *B, + const int *ldb, const cuComplex *beta, cuComplex *C, + const int *ldc) +{ + int ka, kb; + cuComplex *devPtrA = 0, *devPtrB = 0, *devPtrC = 0; + cublasStatus stat1, stat2, stat3; + + if ((*m == 0) || (*n == 0)) return; + + /* A - COMPLEX array of DIMENSION ( LDA, ka ), where ka is + * k when TRANSA = 'N' or 'n', and is m otherwise. + * Before entry with TRANSA = 'N' or 'n', the leading m by k + * part of the array A must contain the matrix A, otherwise + * the leading k by m part of the array A must contain the + * matrix A. + * B - COMPLEX array of DIMENSION ( LDB, kb ), where kb is + * n when TRANSB = 'N' or 'n', and is k otherwise. + * Before entry with TRANSB = 'N' or 'n', the leading k by n + * part of the array B must contain the matrix B, otherwise + * the leading n by k part of the array B must contain the + * matrix B. + * C - COMPLEX array of DIMENSION ( LDC, n ). + * Before entry, the leading m by n part of the array C must + * contain the matrix C, except when beta is zero, in which + * case C need not be set on entry. + * On exit, the array C is overwritten by the m by n matrix + */ + ka = (toupper(transa[0]) == 'N') ? *k : *m; + kb = (toupper(transb[0]) == 'N') ? *n : *k; + stat1 = cublasAlloc (imax(1,*lda*ka),sizeof(devPtrA[0]),(void**)&devPtrA); + stat2 = cublasAlloc (imax(1,*ldb*kb),sizeof(devPtrB[0]),(void**)&devPtrB); + stat3 = cublasAlloc ((*ldc) * (*n), sizeof(devPtrC[0]),(void**)&devPtrC); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Cgemm", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + if (toupper(transa[0]) == 'N') { + stat1=cublasSetMatrix(imin(*m,*lda),*k,sizeof(A[0]),A,*lda,devPtrA,*lda); + } else { + stat1=cublasSetMatrix(imin(*k,*lda),*m,sizeof(A[0]),A,*lda,devPtrA,*lda); + } + if (toupper(transb[0]) == 'N') { + stat2=cublasSetMatrix(imin(*k,*ldb),*n,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + } else { + stat2=cublasSetMatrix(imin(*n,*ldb),*k,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + } + stat3=cublasSetMatrix(imin(*m,*ldc),*n,sizeof(C[0]),C,*ldc,devPtrC,*ldc); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Cgemm", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + cublasCgemm (transa[0], transb[0], *m, *n, *k, *alpha, devPtrA, *lda, + devPtrB, *ldb, *beta, devPtrC, *ldc); + stat1=cublasGetMatrix(imin(*m,*ldc),*n,sizeof(C[0]),devPtrC,*ldc,C,*ldc); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Cgemm", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); +} + +void CUBLAS_CSYMM (const char *side, const char *uplo, const int *m, + const int *n, const cuComplex *alpha, const cuComplex *A, + const int *lda, const cuComplex *B, const int *ldb, + const cuComplex *beta, cuComplex *C, const int *ldc) +{ + int ka; + cuComplex *devPtrA = 0, *devPtrB = 0, *devPtrC = 0; + cublasStatus stat1, stat2, stat3; + + if ((*m == 0) || (*n == 0)) return; + + /* A - REAL array of DIMENSION ( LDA, ka ), where ka is + * m when SIDE = 'L' or 'l' and is n otherwise. + * Before entry with SIDE = 'L' or 'l', the m by m part of + * the array A must contain the symmetric matrix, [..] + * Before entry with SIDE = 'R' or 'r', the n by n part of + * the array A must contain the symmetric matrix, [..] + * B - REAL array of DIMENSION ( LDB, n ). + * Before entry, the leading m by n part of the array B must + * contain the matrix B. + * C - REAL array of DIMENSION ( LDC, n ). + * Before entry, the leading m by n part of the array C must + * contain the matrix C, except when beta is zero, in which + * case C need not be set on entry. + */ + ka = (toupper(side[0]) == 'L') ? *m : *n; + stat1 = cublasAlloc ((*lda) * ka, sizeof(devPtrA[0]), (void**)&devPtrA); + stat2 = cublasAlloc ((*ldb) * (*n), sizeof(devPtrB[0]), (void**)&devPtrB); + stat3 = cublasAlloc ((*ldc) * (*n), sizeof(devPtrC[0]), (void**)&devPtrC); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Csymm", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + stat1 = cublasSetMatrix(imin(ka,*lda),ka,sizeof(A[0]),A,*lda,devPtrA,*lda); + stat2 = cublasSetMatrix(imin(*m,*ldb),*n,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + stat3 = cublasSetMatrix(imin(*m,*ldc),*n,sizeof(C[0]),C,*ldc,devPtrC,*ldc); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Csymm", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + cublasCsymm (side[0], uplo[0], *m, *n, *alpha, devPtrA, *lda, devPtrB, + *ldb, *beta, devPtrC, *ldc); + stat1 = cublasGetMatrix(imin(*m,*ldc),*n,sizeof(C[0]),devPtrC,*ldc,C,*ldc); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Csymm", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); +} + + +void CUBLAS_CHEMM (const char *side, const char *uplo, const int *m, + const int *n, const cuComplex *alpha, const cuComplex *A, + const int *lda, const cuComplex *B, const int *ldb, + const cuComplex *beta, cuComplex *C, const int *ldc) +{ + int ka; + cuComplex *devPtrA = 0, *devPtrB = 0, *devPtrC = 0; + cublasStatus stat1, stat2, stat3; + + if ((*m == 0) || (*n == 0)) return; + + /* A - REAL array of DIMENSION ( LDA, ka ), where ka is + * m when SIDE = 'L' or 'l' and is n otherwise. + * Before entry with SIDE = 'L' or 'l', the m by m part of + * the array A must contain the symmetric matrix, [..] + * Before entry with SIDE = 'R' or 'r', the n by n part of + * the array A must contain the symmetric matrix, [..] + * B - REAL array of DIMENSION ( LDB, n ). + * Before entry, the leading m by n part of the array B must + * contain the matrix B. + * C - REAL array of DIMENSION ( LDC, n ). + * Before entry, the leading m by n part of the array C must + * contain the matrix C, except when beta is zero, in which + * case C need not be set on entry. + */ + ka = (toupper(side[0]) == 'L') ? *m : *n; + stat1 = cublasAlloc ((*lda) * ka, sizeof(devPtrA[0]), (void**)&devPtrA); + stat2 = cublasAlloc ((*ldb) * (*n), sizeof(devPtrB[0]), (void**)&devPtrB); + stat3 = cublasAlloc ((*ldc) * (*n), sizeof(devPtrC[0]), (void**)&devPtrC); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Chemm", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + stat1 = cublasSetMatrix(imin(ka,*lda),ka,sizeof(A[0]),A,*lda,devPtrA,*lda); + stat2 = cublasSetMatrix(imin(*m,*ldb),*n,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + stat3 = cublasSetMatrix(imin(*m,*ldc),*n,sizeof(C[0]),C,*ldc,devPtrC,*ldc); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Chemm", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + cublasChemm (side[0], uplo[0], *m, *n, *alpha, devPtrA, *lda, devPtrB, + *ldb, *beta, devPtrC, *ldc); + stat1 = cublasGetMatrix(imin(*m,*ldc),*n,sizeof(C[0]),devPtrC,*ldc,C,*ldc); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Chemm", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); +} + + +void CUBLAS_CTRMM (const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const cuComplex *alpha, const cuComplex *A, const int *lda, + cuComplex *B, const int *ldb) +{ + int k; + cuComplex *devPtrA = 0, *devPtrB = 0; + cublasStatus stat1, stat2; + + if ((*m == 0) || (*n == 0)) return; + + /* A single precision array of dimensions (lda, k). k = m if side = + * 'L' or 'l', k = n if side = 'R' or 'r'. If uplo = 'U' or 'u' + * the leading k x k upper triangular part of the array A must + * contain the upper triangular matrix, and the strictly lower + * triangular part of A is not referenced. If uplo = 'L' or 'l' + * the leading k x k lower triangular part of the array A must + * contain the lower triangular matrix, and the strictly upper + * B single precision array of dimensions (ldb, n). On entry, the + * leading m x n part of the array contains the matrix B. It is + * overwritten with the transformed matrix on exit. + */ + k = (toupper(side[0]) == 'L') ? *m : *n; + stat1 = cublasAlloc (*lda * k, sizeof(devPtrA[0]), (void**)&devPtrA); + stat2 = cublasAlloc (*ldb * (*n), sizeof(devPtrB[0]), (void**)&devPtrB); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ctrmm", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrB); + return; + } + stat1 = cublasSetMatrix(imin(k,*lda),k,sizeof(A[0]),A,*lda,devPtrA,*lda); + stat2 = cublasSetMatrix(imin(*m,*ldb),*n,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ctrmm", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrB); + return; + } + cublasCtrmm (side[0], uplo[0], transa[0], diag[0], *m, *n, *alpha, devPtrA, + *lda, devPtrB, *ldb); + stat1 = cublasGetMatrix(imin(*m,*ldb),*n,sizeof(B[0]),devPtrB,*ldb,B,*ldb); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Ctrmm", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrB); +} + +void CUBLAS_CTRSM ( const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const cuComplex *alpha, const cuComplex *A, const int *lda, + cuComplex *B, const int *ldb) +{ + cuComplex *devPtrA = 0, *devPtrB = 0; + int k; + cublasStatus stat1, stat2; + + if ((*m == 0) || (*n == 0)) return; + + /* A - REAL array of DIMENSION ( LDA, k ), where k is m + * when SIDE = 'L' or 'l' and is n when SIDE = 'R' or 'r'. + * Before entry with UPLO = 'U' or 'u', the leading k by k + * upper triangular part of the array A must contain the upper + * B - REAL array of DIMENSION ( LDB, n ). + * Before entry, the leading m by n part of the array B must + * contain the right-hand side matrix B, and on exit is + */ + k = (toupper(side[0]) == 'L') ? *m : *n; + stat1 = cublasAlloc (*lda * k, sizeof(devPtrA[0]), (void**)&devPtrA); + stat2 = cublasAlloc (*ldb * (*n), sizeof(devPtrB[0]), (void**)&devPtrB); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ctrsm", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrB); + return; + } + stat1 = cublasSetMatrix(imin(k,*lda),k,sizeof(A[0]),A,*lda,devPtrA,*lda); + stat2 = cublasSetMatrix(imin(*m,*ldb),*n,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ctrsm", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrB); + return; + } + cublasCtrsm (side[0], uplo[0], transa[0], diag[0], *m, *n, *alpha, devPtrA, + *lda, devPtrB, *ldb); + stat1=cublasGetMatrix(imin(*m,*ldb),*n,sizeof(B[0]),devPtrB,*ldb,B,*ldb); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Ctrsm", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrB); +} + +void CUBLAS_CHERK (const char *uplo, const char *trans, const int *n, + const int *k, const float *alpha, + const cuComplex *A, const int *lda, + const float *beta, cuComplex *C, + const int *ldc) +{ + int ka; + cuComplex *devPtrA = 0, *devPtrC = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + /* A double complex precision array of dimensions (lda, ka), where ka is k + * when trans == 'N' or 'n', and is n otherwise. When trans == 'N' + * or 'n', the leading n x k part of array A must contain the matrix + * A, otherwise the leading k x n part of the array must contain the + * matrix A. + * C double complex precision array of dimensions (ldc, n). If uplo='U'or'u', + * the leading n x n triangular part of the array C must contain the + * upper triangular part of the symmetric matrix C and the strictly + */ + ka = (toupper(trans[0]) == 'N') ? *k : *n; + stat1 = cublasAlloc(imax(1,*lda*ka),sizeof(devPtrA[0]),(void**)&devPtrA); + stat2 = cublasAlloc(imax(1,*ldc*(*n)),sizeof(devPtrC[0]),(void**)&devPtrC); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Cherk", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrC); + return; + } + if (toupper(trans[0]) == 'N') { + stat1=cublasSetMatrix(imin(*n,*lda),*k,sizeof(A[0]),A,*lda,devPtrA,*lda); + } else { + stat1=cublasSetMatrix(imin(*k,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + } + stat2 = cublasSetMatrix(imin(*n,*ldc),*n,sizeof(C[0]),C,*ldc,devPtrC,*ldc); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Cherk", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrC); + return; + } + cublasCherk (uplo[0], trans[0], *n, *k, *alpha, devPtrA, *lda, *beta, + devPtrC, *ldc); + stat1 = cublasGetMatrix(imin(*n,*ldc),*n,sizeof(C[0]),devPtrC,*ldc,C,*ldc); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Cherk", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrC); +} + +void CUBLAS_CHER2K (const char *uplo, const char *trans, const int *n, + const int *k, const cuComplex *alpha, const cuComplex *A, + const int *lda, const cuComplex *B, const int *ldb, + const float *beta, cuComplex *C, const int *ldc) +{ + int ka, kb; + cuComplex *devPtrA = 0, *devPtrB = 0, *devPtrC = 0; + cublasStatus stat1, stat2, stat3; + + if (*n == 0) return; + + /* A - REAL array of DIMENSION ( LDA, ka ), where ka is + * k when TRANS = 'N' or 'n', and is n otherwise. + * Before entry with TRANS = 'N' or 'n', the leading n by k + * part of the array A must contain the matrix A, otherwise + * the leading k by n part of the array A must contain the + * matrix A. + * B - REAL array of DIMENSION ( LDB, kb ), where kb is + * k when TRANS = 'N' or 'n', and is n otherwise. + * Before entry with TRANS = 'N' or 'n', the leading n by k + * part of the array B must contain the matrix B, otherwise + * the leading k by n part of the array B must contain the + * matrix B. + * C - single precision array of dimensions (ldc, n). If uplo == 'U' + * or 'u', the leading n x n triangular part of the array C must + */ + ka = (toupper(trans[0]) == 'N') ? *k : *n; + kb = (toupper(trans[0]) == 'N') ? *k : *n; + stat1 = cublasAlloc (imax(1,*lda*ka),sizeof(devPtrA[0]),(void**)&devPtrA); + stat2 = cublasAlloc (imax(1,*ldb*kb),sizeof(devPtrB[0]),(void**)&devPtrB); + stat3 = cublasAlloc ((*ldc) * (*n), sizeof(devPtrC[0]),(void**)&devPtrC); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Cher2k", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + if (toupper(trans[0]) == 'N') { + stat1=cublasSetMatrix(imin(*n,*lda),*k,sizeof(A[0]),A,*lda,devPtrA,*lda); + stat2=cublasSetMatrix(imin(*n,*ldb),*k,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + } else { + stat1=cublasSetMatrix(imin(*k,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + stat2=cublasSetMatrix(imin(*k,*ldb),*n,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + } + stat3=cublasSetMatrix(imin(*n,*ldc),*n,sizeof(C[0]),C,*ldc,devPtrC,*ldc); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Csyr2k", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + cublasCher2k (uplo[0], trans[0], *n, *k, *alpha, devPtrA, *lda, devPtrB, + *ldb, *beta, devPtrC, *ldc); + stat1=cublasGetMatrix(imin(*n,*ldc),*n,sizeof(C[0]),devPtrC,*ldc,C,*ldc); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Cher2k", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); +} + +void CUBLAS_CSYRK (const char *uplo, const char *trans, const int *n, + const int *k, const cuComplex *alpha, + const cuComplex *A, const int *lda, + const cuComplex *beta, cuComplex *C, + const int *ldc) +{ + int ka; + cuComplex *devPtrA = 0, *devPtrC = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + /* A double complex precision array of dimensions (lda, ka), where ka is k + * when trans == 'N' or 'n', and is n otherwise. When trans == 'N' + * or 'n', the leading n x k part of array A must contain the matrix + * A, otherwise the leading k x n part of the array must contain the + * matrix A. + * C double complex precision array of dimensions (ldc, n). If uplo='U'or'u', + * the leading n x n triangular part of the array C must contain the + * upper triangular part of the symmetric matrix C and the strictly + */ + ka = (toupper(trans[0]) == 'N') ? *k : *n; + stat1 = cublasAlloc(imax(1,*lda*ka),sizeof(devPtrA[0]),(void**)&devPtrA); + stat2 = cublasAlloc(imax(1,*ldc*(*n)),sizeof(devPtrC[0]),(void**)&devPtrC); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Csyrk", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrC); + return; + } + if (toupper(trans[0]) == 'N') { + stat1=cublasSetMatrix(imin(*n,*lda),*k,sizeof(A[0]),A,*lda,devPtrA,*lda); + } else { + stat1=cublasSetMatrix(imin(*k,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + } + stat2 = cublasSetMatrix(imin(*n,*ldc),*n,sizeof(C[0]),C,*ldc,devPtrC,*ldc); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Csyrk", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrC); + return; + } + cublasCsyrk (uplo[0], trans[0], *n, *k, *alpha, devPtrA, *lda, *beta, + devPtrC, *ldc); + stat1 = cublasGetMatrix(imin(*n,*ldc),*n,sizeof(C[0]),devPtrC,*ldc,C,*ldc); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Csyrk", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrC); +} + +void CUBLAS_CSYR2K (const char *uplo, const char *trans, const int *n, + const int *k, const cuComplex *alpha, const cuComplex *A, + const int *lda, const cuComplex *B, const int *ldb, + const cuComplex *beta, cuComplex *C, const int *ldc) +{ + int ka, kb; + cuComplex *devPtrA = 0, *devPtrB = 0, *devPtrC = 0; + cublasStatus stat1, stat2, stat3; + + if (*n == 0) return; + + /* A - REAL array of DIMENSION ( LDA, ka ), where ka is + * k when TRANS = 'N' or 'n', and is n otherwise. + * Before entry with TRANS = 'N' or 'n', the leading n by k + * part of the array A must contain the matrix A, otherwise + * the leading k by n part of the array A must contain the + * matrix A. + * B - REAL array of DIMENSION ( LDB, kb ), where kb is + * k when TRANS = 'N' or 'n', and is n otherwise. + * Before entry with TRANS = 'N' or 'n', the leading n by k + * part of the array B must contain the matrix B, otherwise + * the leading k by n part of the array B must contain the + * matrix B. + * C - single precision array of dimensions (ldc, n). If uplo == 'U' + * or 'u', the leading n x n triangular part of the array C must + */ + ka = (toupper(trans[0]) == 'N') ? *k : *n; + kb = (toupper(trans[0]) == 'N') ? *k : *n; + stat1 = cublasAlloc (imax(1,*lda*ka),sizeof(devPtrA[0]),(void**)&devPtrA); + stat2 = cublasAlloc (imax(1,*ldb*kb),sizeof(devPtrB[0]),(void**)&devPtrB); + stat3 = cublasAlloc ((*ldc) * (*n), sizeof(devPtrC[0]),(void**)&devPtrC); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Csyr2k", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + if (toupper(trans[0]) == 'N') { + stat1=cublasSetMatrix(imin(*n,*lda),*k,sizeof(A[0]),A,*lda,devPtrA,*lda); + stat2=cublasSetMatrix(imin(*n,*ldb),*k,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + } else { + stat1=cublasSetMatrix(imin(*k,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + stat2=cublasSetMatrix(imin(*k,*ldb),*n,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + } + stat3=cublasSetMatrix(imin(*n,*ldc),*n,sizeof(C[0]),C,*ldc,devPtrC,*ldc); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Csyr2k", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + cublasCsyr2k (uplo[0], trans[0], *n, *k, *alpha, devPtrA, *lda, devPtrB, + *ldb, *beta, devPtrC, *ldc); + stat1=cublasGetMatrix(imin(*n,*ldc),*n,sizeof(C[0]),devPtrC,*ldc,C,*ldc); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Csyr2k", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); +} + +void CUBLAS_DGEMM (const char *transa, const char *transb, const int *m, + const int *n, const int *k, const double *alpha, + const double *A, const int *lda, const double *B, + const int *ldb, const double *beta, double *C, + const int *ldc) +{ + int ka, kb; + double *devPtrA = 0, *devPtrB = 0, *devPtrC = 0; + cublasStatus stat1, stat2, stat3; + + if ((*m == 0) || (*n == 0)) return; + + /* A - REAL array of DIMENSION ( LDA, ka ), where ka is + * k when TRANSA = 'N' or 'n', and is m otherwise. + * Before entry with TRANSA = 'N' or 'n', the leading m by k + * part of the array A must contain the matrix A, otherwise + * the leading k by m part of the array A must contain the + * matrix A. + * B - REAL array of DIMENSION ( LDB, kb ), where kb is + * n when TRANSB = 'N' or 'n', and is k otherwise. + * Before entry with TRANSB = 'N' or 'n', the leading k by n + * part of the array B must contain the matrix B, otherwise + * the leading n by k part of the array B must contain the + * matrix B. + * C - REAL array of DIMENSION ( LDC, n ). + * Before entry, the leading m by n part of the array C must + * contain the matrix C, except when beta is zero, in which + * case C need not be set on entry. + * On exit, the array C is overwritten by the m by n matrix + */ + ka = (toupper(transa[0]) == 'N') ? *k : *m; + kb = (toupper(transb[0]) == 'N') ? *n : *k; + stat1 = cublasAlloc (imax(1,*lda*ka),sizeof(devPtrA[0]), (void**)&devPtrA); + stat2 = cublasAlloc (imax(1,*ldb*kb),sizeof(devPtrB[0]), (void**)&devPtrB); + stat3 = cublasAlloc ((*ldc) * (*n), sizeof(devPtrC[0]), (void**)&devPtrC); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dgemm", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + if (toupper(transa[0]) == 'N') { + stat1=cublasSetMatrix(imin(*m,*lda),*k,sizeof(A[0]),A,*lda,devPtrA,*lda); + } else { + stat1=cublasSetMatrix(imin(*k,*lda),*m,sizeof(A[0]),A,*lda,devPtrA,*lda); + } + if (toupper(transb[0]) == 'N') { + stat2=cublasSetMatrix(imin(*k,*ldb),*n,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + } else { + stat2=cublasSetMatrix(imin(*n,*ldb),*k,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + } + stat3=cublasSetMatrix(imin(*m,*ldc),*n,sizeof(C[0]),C,*ldc,devPtrC,*ldc); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dgemm", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + cublasDgemm (transa[0], transb[0], *m, *n, *k, *alpha, devPtrA, *lda, + devPtrB, *ldb, *beta, devPtrC, *ldc); + stat1=cublasGetMatrix(imin(*m,*ldc),*n,sizeof(C[0]),devPtrC,*ldc,C,*ldc); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dgemm", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); +} + +void CUBLAS_DSYMM (const char *side, const char *uplo, const int *m, + const int *n, const double *alpha, const double *A, + const int *lda, const double *B, const int *ldb, + const double *beta, double *C, const int *ldc) +{ + int ka; + double *devPtrA = 0, *devPtrB = 0, *devPtrC = 0; + cublasStatus stat1, stat2, stat3; + + if ((*m == 0) || (*n == 0)) return; + + /* A - REAL array of DIMENSION ( LDA, ka ), where ka is + * m when SIDE = 'L' or 'l' and is n otherwise. + * Before entry with SIDE = 'L' or 'l', the m by m part of + * the array A must contain the symmetric matrix, [..] + * Before entry with SIDE = 'R' or 'r', the n by n part of + * the array A must contain the symmetric matrix, [..] + * B - REAL array of DIMENSION ( LDB, n ). + * Before entry, the leading m by n part of the array B must + * contain the matrix B. + * C - REAL array of DIMENSION ( LDC, n ). + * Before entry, the leading m by n part of the array C must + * contain the matrix C, except when beta is zero, in which + * case C need not be set on entry. + */ + ka = (toupper(side[0]) == 'L') ? *m : *n; + stat1 = cublasAlloc ((*lda) * ka, sizeof(devPtrA[0]), (void**)&devPtrA); + stat2 = cublasAlloc ((*ldb) * (*n), sizeof(devPtrB[0]), (void**)&devPtrB); + stat3 = cublasAlloc ((*ldc) * (*n), sizeof(devPtrC[0]), (void**)&devPtrC); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dsymm", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + stat1 = cublasSetMatrix(imin(ka,*lda),ka,sizeof(A[0]),A,*lda,devPtrA,*lda); + stat2 = cublasSetMatrix(imin(*m,*ldb),*n,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + stat3 = cublasSetMatrix(imin(*m,*ldc),*n,sizeof(C[0]),C,*ldc,devPtrC,*ldc); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dsymm", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + cublasDsymm (side[0], uplo[0], *m, *n, *alpha, devPtrA, *lda, devPtrB, + *ldb, *beta, devPtrC, *ldc); + stat1 = cublasGetMatrix(imin(*m,*ldc),*n,sizeof(C[0]),devPtrC,*ldc,C,*ldc); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dsymm", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); +} + +void CUBLAS_DSYR2K (const char *uplo, const char *trans, const int *n, + const int *k, const double *alpha, const double *A, + const int *lda, const double *B, const int *ldb, + const double *beta, double *C, const int *ldc) +{ + int ka, kb; + double *devPtrA = 0, *devPtrB = 0, *devPtrC = 0; + cublasStatus stat1, stat2, stat3; + + if (*n == 0) return; + + /* A - REAL array of DIMENSION ( LDA, ka ), where ka is + * k when TRANS = 'N' or 'n', and is n otherwise. + * Before entry with TRANS = 'N' or 'n', the leading n by k + * part of the array A must contain the matrix A, otherwise + * the leading k by n part of the array A must contain the + * matrix A. + * B - REAL array of DIMENSION ( LDB, kb ), where kb is + * k when TRANS = 'N' or 'n', and is n otherwise. + * Before entry with TRANS = 'N' or 'n', the leading n by k + * part of the array B must contain the matrix B, otherwise + * the leading k by n part of the array B must contain the + * matrix B. + * C - single precision array of dimensions (ldc, n). If uplo == 'U' + * or 'u', the leading n x n triangular part of the array C must + */ + ka = (toupper(trans[0]) == 'N') ? *k : *n; + kb = (toupper(trans[0]) == 'N') ? *k : *n; + stat1 = cublasAlloc (imax(1,*lda*ka),sizeof(devPtrA[0]),(void**)&devPtrA); + stat2 = cublasAlloc (imax(1,*ldb*kb),sizeof(devPtrB[0]),(void**)&devPtrB); + stat3 = cublasAlloc ((*ldc) * (*n), sizeof(devPtrC[0]),(void**)&devPtrC); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dsyr2k", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + if (toupper(trans[0]) == 'N') { + stat1=cublasSetMatrix(imin(*n,*lda),*k,sizeof(A[0]),A,*lda,devPtrA,*lda); + stat2=cublasSetMatrix(imin(*n,*ldb),*k,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + } else { + stat1=cublasSetMatrix(imin(*k,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + stat2=cublasSetMatrix(imin(*k,*ldb),*n,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + } + stat3=cublasSetMatrix(imin(*n,*ldc),*n,sizeof(C[0]),C,*ldc,devPtrC,*ldc); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dsyr2k", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + cublasDsyr2k (uplo[0], trans[0], *n, *k, *alpha, devPtrA, *lda, devPtrB, + *ldb, *beta, devPtrC, *ldc); + stat1=cublasGetMatrix(imin(*n,*ldc),*n,sizeof(C[0]),devPtrC,*ldc,C,*ldc); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dsyr2k", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); +} + +void CUBLAS_DSYRK (const char *uplo, const char *trans, const int *n, + const int *k, const double *alpha, const double *A, + const int *lda, const double *beta, double *C, + const int *ldc) +{ + int ka; + double *devPtrA = 0, *devPtrC = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + /* A double precision array of dimensions (lda, ka), where ka is k + * when trans == 'N' or 'n', and is n otherwise. When trans == 'N' + * or 'n', the leading n x k part of array A must contain the matrix + * A, otherwise the leading k x n part of the array must contain the + * matrix A. + * C double precision array of dimensions (ldc, n). If uplo='U'or'u', + * the leading n x n triangular part of the array C must contain the + * upper triangular part of the symmetric matrix C and the strictly + */ + ka = (toupper(trans[0]) == 'N') ? *k : *n; + stat1 = cublasAlloc(imax(1,*lda*ka),sizeof(devPtrA[0]),(void**)&devPtrA); + stat2 = cublasAlloc(imax(1,*ldc*(*n)),sizeof(devPtrC[0]),(void**)&devPtrC); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dsyrk", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrC); + return; + } + if (toupper(trans[0]) == 'N') { + stat1=cublasSetMatrix(imin(*n,*lda),*k,sizeof(A[0]),A,*lda,devPtrA,*lda); + } else { + stat1=cublasSetMatrix(imin(*k,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + } + stat2 = cublasSetMatrix(imin(*n,*ldc),*n,sizeof(C[0]),C,*ldc,devPtrC,*ldc); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dsyrk", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrC); + return; + } + cublasDsyrk (uplo[0], trans[0], *n, *k, *alpha, devPtrA, *lda, *beta, + devPtrC, *ldc); + stat1 = cublasGetMatrix(imin(*n,*ldc),*n,sizeof(C[0]),devPtrC,*ldc,C,*ldc); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dsyrk", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrC); +} + +void CUBLAS_ZSYRK (const char *uplo, const char *trans, const int *n, + const int *k, const cuDoubleComplex *alpha, + const cuDoubleComplex *A, const int *lda, + const cuDoubleComplex *beta, cuDoubleComplex *C, + const int *ldc) +{ + int ka; + cuDoubleComplex *devPtrA = 0, *devPtrC = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + /* A double complex precision array of dimensions (lda, ka), where ka is k + * when trans == 'N' or 'n', and is n otherwise. When trans == 'N' + * or 'n', the leading n x k part of array A must contain the matrix + * A, otherwise the leading k x n part of the array must contain the + * matrix A. + * C double complex precision array of dimensions (ldc, n). If uplo='U'or'u', + * the leading n x n triangular part of the array C must contain the + * upper triangular part of the symmetric matrix C and the strictly + */ + ka = (toupper(trans[0]) == 'N') ? *k : *n; + stat1 = cublasAlloc(imax(1,*lda*ka),sizeof(devPtrA[0]),(void**)&devPtrA); + stat2 = cublasAlloc(imax(1,*ldc*(*n)),sizeof(devPtrC[0]),(void**)&devPtrC); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zsyrk", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrC); + return; + } + if (toupper(trans[0]) == 'N') { + stat1=cublasSetMatrix(imin(*n,*lda),*k,sizeof(A[0]),A,*lda,devPtrA,*lda); + } else { + stat1=cublasSetMatrix(imin(*k,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + } + stat2 = cublasSetMatrix(imin(*n,*ldc),*n,sizeof(C[0]),C,*ldc,devPtrC,*ldc); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zsyrk", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrC); + return; + } + cublasZsyrk (uplo[0], trans[0], *n, *k, *alpha, devPtrA, *lda, *beta, + devPtrC, *ldc); + stat1 = cublasGetMatrix(imin(*n,*ldc),*n,sizeof(C[0]),devPtrC,*ldc,C,*ldc); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Zsyrk", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrC); +} + +void CUBLAS_ZSYR2K (const char *uplo, const char *trans, const int *n, + const int *k, const cuDoubleComplex *alpha, const cuDoubleComplex *A, + const int *lda, const cuDoubleComplex *B, const int *ldb, + const cuDoubleComplex *beta, cuDoubleComplex *C, const int *ldc) +{ + int ka, kb; + cuDoubleComplex *devPtrA = 0, *devPtrB = 0, *devPtrC = 0; + cublasStatus stat1, stat2, stat3; + + if (*n == 0) return; + + /* A - REAL array of DIMENSION ( LDA, ka ), where ka is + * k when TRANS = 'N' or 'n', and is n otherwise. + * Before entry with TRANS = 'N' or 'n', the leading n by k + * part of the array A must contain the matrix A, otherwise + * the leading k by n part of the array A must contain the + * matrix A. + * B - REAL array of DIMENSION ( LDB, kb ), where kb is + * k when TRANS = 'N' or 'n', and is n otherwise. + * Before entry with TRANS = 'N' or 'n', the leading n by k + * part of the array B must contain the matrix B, otherwise + * the leading k by n part of the array B must contain the + * matrix B. + * C - single precision array of dimensions (ldc, n). If uplo == 'U' + * or 'u', the leading n x n triangular part of the array C must + */ + ka = (toupper(trans[0]) == 'N') ? *k : *n; + kb = (toupper(trans[0]) == 'N') ? *k : *n; + stat1 = cublasAlloc (imax(1,*lda*ka),sizeof(devPtrA[0]),(void**)&devPtrA); + stat2 = cublasAlloc (imax(1,*ldb*kb),sizeof(devPtrB[0]),(void**)&devPtrB); + stat3 = cublasAlloc ((*ldc) * (*n), sizeof(devPtrC[0]),(void**)&devPtrC); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zsyr2k", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + if (toupper(trans[0]) == 'N') { + stat1=cublasSetMatrix(imin(*n,*lda),*k,sizeof(A[0]),A,*lda,devPtrA,*lda); + stat2=cublasSetMatrix(imin(*n,*ldb),*k,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + } else { + stat1=cublasSetMatrix(imin(*k,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + stat2=cublasSetMatrix(imin(*k,*ldb),*n,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + } + stat3=cublasSetMatrix(imin(*n,*ldc),*n,sizeof(C[0]),C,*ldc,devPtrC,*ldc); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zsyr2k", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + cublasZsyr2k (uplo[0], trans[0], *n, *k, *alpha, devPtrA, *lda, devPtrB, + *ldb, *beta, devPtrC, *ldc); + stat1=cublasGetMatrix(imin(*n,*ldc),*n,sizeof(C[0]),devPtrC,*ldc,C,*ldc); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Zsyr2k", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); +} + + +void CUBLAS_DTRMM (const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const double *alpha, const double *A, const int *lda, + double *B, const int *ldb) +{ + int k; + double *devPtrA = 0, *devPtrB = 0; + cublasStatus stat1, stat2; + + if ((*m == 0) || (*n == 0)) return; + + /* A single precision array of dimensions (lda, k). k = m if side = + * 'L' or 'l', k = n if side = 'R' or 'r'. If uplo = 'U' or 'u' + * the leading k x k upper triangular part of the array A must + * contain the upper triangular matrix, and the strictly lower + * triangular part of A is not referenced. If uplo = 'L' or 'l' + * the leading k x k lower triangular part of the array A must + * contain the lower triangular matrix, and the strictly upper + * B single precision array of dimensions (ldb, n). On entry, the + * leading m x n part of the array contains the matrix B. It is + * overwritten with the transformed matrix on exit. + */ + k = (toupper(side[0]) == 'L') ? *m : *n; + stat1 = cublasAlloc (*lda * k, sizeof(devPtrA[0]), (void**)&devPtrA); + stat2 = cublasAlloc (*ldb * (*n), sizeof(devPtrB[0]), (void**)&devPtrB); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dtrmm", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrB); + return; + } + stat1 = cublasSetMatrix(imin(k,*lda),k,sizeof(A[0]),A,*lda,devPtrA,*lda); + stat2 = cublasSetMatrix(imin(*m,*ldb),*n,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dtrmm", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrB); + return; + } + cublasDtrmm (side[0], uplo[0], transa[0], diag[0], *m, *n, *alpha, devPtrA, + *lda, devPtrB, *ldb); + stat1 = cublasGetMatrix(imin(*m,*ldb),*n,sizeof(B[0]),devPtrB,*ldb,B,*ldb); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dtrmm", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrB); +} + +void CUBLAS_DTRSM (const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const double *alpha, const double *A, const int *lda, + double *B, const int *ldb) +{ + double *devPtrA = 0, *devPtrB = 0; + int k; + cublasStatus stat1, stat2; + + if ((*m == 0) || (*n == 0)) return; + + /* A - REAL array of DIMENSION ( LDA, k ), where k is m + * when SIDE = 'L' or 'l' and is n when SIDE = 'R' or 'r'. + * Before entry with UPLO = 'U' or 'u', the leading k by k + * upper triangular part of the array A must contain the upper + * B - REAL array of DIMENSION ( LDB, n ). + * Before entry, the leading m by n part of the array B must + * contain the right-hand side matrix B, and on exit is + */ + k = (toupper(side[0]) == 'L') ? *m : *n; + stat1 = cublasAlloc (*lda * k, sizeof(devPtrA[0]), (void**)&devPtrA); + stat2 = cublasAlloc (*ldb * (*n), sizeof(devPtrB[0]), (void**)&devPtrB); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dtrsm", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrB); + return; + } + stat1 = cublasSetMatrix(imin(k,*lda),k,sizeof(A[0]),A,*lda,devPtrA,*lda); + stat2 = cublasSetMatrix(imin(*m,*ldb),*n,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Dtrsm", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrB); + return; + } + cublasDtrsm (side[0], uplo[0], transa[0], diag[0], *m, *n, *alpha, devPtrA, + *lda, devPtrB, *ldb); + stat1=cublasGetMatrix(imin(*m,*ldb),*n,sizeof(B[0]),devPtrB,*ldb,B,*ldb); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Dtrsm", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrB); +} + +void CUBLAS_ZTRSM (const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const cuDoubleComplex *alpha, + const cuDoubleComplex *A, const int *lda, + cuDoubleComplex *B, const int *ldb) +{ + cuDoubleComplex *devPtrA = 0, *devPtrB = 0; + int k; + cublasStatus stat1, stat2; + + if ((*m == 0) || (*n == 0)) return; + + /* A - REAL array of DIMENSION ( LDA, k ), where k is m + * when SIDE = 'L' or 'l' and is n when SIDE = 'R' or 'r'. + * Before entry with UPLO = 'U' or 'u', the leading k by k + * upper triangular part of the array A must contain the upper + * B - REAL array of DIMENSION ( LDB, n ). + * Before entry, the leading m by n part of the array B must + * contain the right-hand side matrix B, and on exit is + */ + k = (toupper(side[0]) == 'L') ? *m : *n; + stat1 = cublasAlloc (*lda * k, sizeof(devPtrA[0]), (void**)&devPtrA); + stat2 = cublasAlloc (*ldb * (*n), sizeof(devPtrB[0]), (void**)&devPtrB); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ztrsm", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrB); + return; + } + stat1 = cublasSetMatrix(imin(k,*lda),k,sizeof(A[0]),A,*lda,devPtrA,*lda); + stat2 = cublasSetMatrix(imin(*m,*ldb),*n,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ztrsm", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrB); + return; + } + cublasZtrsm (side[0], uplo[0], transa[0], diag[0], *m, *n, *alpha, devPtrA, + *lda, devPtrB, *ldb); + stat1=cublasGetMatrix(imin(*m,*ldb),*n,sizeof(B[0]),devPtrB,*ldb,B,*ldb); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Ztrsm", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrB); +} + +void CUBLAS_ZGEMM (const char *transa, const char *transb, const int *m, + const int *n, const int *k, const cuDoubleComplex *alpha, + const cuDoubleComplex *A, const int *lda, + const cuDoubleComplex *B, const int *ldb, + const cuDoubleComplex *beta, cuDoubleComplex *C, + const int *ldc) +{ + int ka, kb; + cuDoubleComplex *devPtrA = 0, *devPtrB = 0, *devPtrC = 0; + cublasStatus stat1, stat2, stat3; + + if ((*m == 0) || (*n == 0)) return; + + /* A - COMPLEX array of DIMENSION ( LDA, ka ), where ka is + * k when TRANSA = 'N' or 'n', and is m otherwise. + * Before entry with TRANSA = 'N' or 'n', the leading m by k + * part of the array A must contain the matrix A, otherwise + * the leading k by m part of the array A must contain the + * matrix A. + * B - COMPLEX array of DIMENSION ( LDB, kb ), where kb is + * n when TRANSB = 'N' or 'n', and is k otherwise. + * Before entry with TRANSB = 'N' or 'n', the leading k by n + * part of the array B must contain the matrix B, otherwise + * the leading n by k part of the array B must contain the + * matrix B. + * C - COMPLEX array of DIMENSION ( LDC, n ). + * Before entry, the leading m by n part of the array C must + * contain the matrix C, except when beta is zero, in which + * case C need not be set on entry. + * On exit, the array C is overwritten by the m by n matrix + */ + ka = (toupper(transa[0]) == 'N') ? *k : *m; + kb = (toupper(transb[0]) == 'N') ? *n : *k; + stat1 = cublasAlloc (imax(1,*lda*ka),sizeof(devPtrA[0]),(void**)&devPtrA); + stat2 = cublasAlloc (imax(1,*ldb*kb),sizeof(devPtrB[0]),(void**)&devPtrB); + stat3 = cublasAlloc ((*ldc) * (*n), sizeof(devPtrC[0]),(void**)&devPtrC); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zgemm", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + if (toupper(transa[0]) == 'N') { + stat1=cublasSetMatrix(imin(*m,*lda),*k,sizeof(A[0]),A,*lda,devPtrA,*lda); + } else { + stat1=cublasSetMatrix(imin(*k,*lda),*m,sizeof(A[0]),A,*lda,devPtrA,*lda); + } + if (toupper(transb[0]) == 'N') { + stat2=cublasSetMatrix(imin(*k,*ldb),*n,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + } else { + stat2=cublasSetMatrix(imin(*n,*ldb),*k,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + } + stat3=cublasSetMatrix(imin(*m,*ldc),*n,sizeof(C[0]),C,*ldc,devPtrC,*ldc); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zgemm", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + cublasZgemm (transa[0], transb[0], *m, *n, *k, *alpha, devPtrA, *lda, + devPtrB, *ldb, *beta, devPtrC, *ldc); + stat1=cublasGetMatrix(imin(*m,*ldc),*n,sizeof(C[0]),devPtrC,*ldc,C,*ldc); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Zgemm", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); +} + + +void CUBLAS_CGEMV (const char *trans, const int *m, const int *n, + const cuComplex *alpha, const cuComplex *A, + const int *lda, const cuComplex *x, const int *incx, + const cuComplex *beta, cuComplex *y, + const int *incy) +{ + cuComplex *devPtrA = 0, *devPtrx = 0, *devPtry = 0; + cublasStatus stat1, stat2, stat3; + + if ((*m == 0) || (*n == 0)) return; + + /* X - REAL array of DIMENSION at least + * ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n' + * and at least + * ( 1 + ( m - 1 )*abs( INCX ) ) otherwise. + * Y - REAL array of DIMENSION at least + * ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n' + * and at least + * ( 1 + ( n - 1 )*abs( INCY ) ) otherwise. + * A - REAL array of DIMENSION ( LDA, n ). + * Before entry, the leading m by n part of the array A must + * contain the matrix of coefficients. + */ + if (toupper(trans[0]) == 'N') { + stat1 = cublasAlloc(1+(*n-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc(1+(*m-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + } else { + stat1 = cublasAlloc(1+(*m-1)*abs(*incx),sizeof(x[0]),(void**)&devPtrx); + stat2 = cublasAlloc(1+(*n-1)*abs(*incy),sizeof(y[0]),(void**)&devPtry); + } + stat3 = cublasAlloc ((*lda) * (*n), sizeof(devPtrA[0]), (void**)&devPtrA); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Cgemv", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + if (toupper(trans[0]) == 'N') { + stat1=cublasSetVector(*n,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector(*m,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + } else { + stat1=cublasSetVector(*m,sizeof(x[0]),x,abs(*incx),devPtrx,abs(*incx)); + stat2=cublasSetVector(*n,sizeof(y[0]),y,abs(*incy),devPtry,abs(*incy)); + } + stat3=cublasSetMatrix (imin(*m,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + stat3=cublasSetMatrix (imin(*m,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Cgemv", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrx); + cublasFree (devPtry); + cublasFree (devPtrA); + return; + } + cublasCgemv (trans[0], *m, *n, *alpha, devPtrA, *lda, devPtrx, *incx, + *beta, devPtry, *incy); + if (toupper(trans[0]) == 'N') { + stat1=cublasGetVector(*m,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + } else { + stat1=cublasGetVector(*n,sizeof(y[0]),devPtry,abs(*incy),y,abs(*incy)); + } + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Cgemv", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrx); + cublasFree (devPtry); +} + + +void CUBLAS_ZSYMM (const char *side, const char *uplo, const int *m, + const int *n, const cuDoubleComplex *alpha, const cuDoubleComplex *A, + const int *lda, const cuDoubleComplex *B, const int *ldb, + const cuDoubleComplex *beta, cuDoubleComplex *C, const int *ldc) +{ + int ka; + cuDoubleComplex *devPtrA = 0, *devPtrB = 0, *devPtrC = 0; + cublasStatus stat1, stat2, stat3; + + if ((*m == 0) || (*n == 0)) return; + + /* A - REAL array of DIMENSION ( LDA, ka ), where ka is + * m when SIDE = 'L' or 'l' and is n otherwise. + * Before entry with SIDE = 'L' or 'l', the m by m part of + * the array A must contain the symmetric matrix, [..] + * Before entry with SIDE = 'R' or 'r', the n by n part of + * the array A must contain the symmetric matrix, [..] + * B - REAL array of DIMENSION ( LDB, n ). + * Before entry, the leading m by n part of the array B must + * contain the matrix B. + * C - REAL array of DIMENSION ( LDC, n ). + * Before entry, the leading m by n part of the array C must + * contain the matrix C, except when beta is zero, in which + * case C need not be set on entry. + */ + ka = (toupper(side[0]) == 'L') ? *m : *n; + stat1 = cublasAlloc ((*lda) * ka, sizeof(devPtrA[0]), (void**)&devPtrA); + stat2 = cublasAlloc ((*ldb) * (*n), sizeof(devPtrB[0]), (void**)&devPtrB); + stat3 = cublasAlloc ((*ldc) * (*n), sizeof(devPtrC[0]), (void**)&devPtrC); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zsymm", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + stat1 = cublasSetMatrix(imin(ka,*lda),ka,sizeof(A[0]),A,*lda,devPtrA,*lda); + stat2 = cublasSetMatrix(imin(*m,*ldb),*n,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + stat3 = cublasSetMatrix(imin(*m,*ldc),*n,sizeof(C[0]),C,*ldc,devPtrC,*ldc); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zsymm", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + cublasZsymm (side[0], uplo[0], *m, *n, *alpha, devPtrA, *lda, devPtrB, + *ldb, *beta, devPtrC, *ldc); + stat1 = cublasGetMatrix(imin(*m,*ldc),*n,sizeof(C[0]),devPtrC,*ldc,C,*ldc); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Zsymm", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); +} + +void CUBLAS_ZHEMM (const char *side, const char *uplo, const int *m, + const int *n, const cuDoubleComplex *alpha, const cuDoubleComplex *A, + const int *lda, const cuDoubleComplex *B, const int *ldb, + const cuDoubleComplex *beta, cuDoubleComplex *C, const int *ldc) +{ + int ka; + cuDoubleComplex *devPtrA = 0, *devPtrB = 0, *devPtrC = 0; + cublasStatus stat1, stat2, stat3; + + if ((*m == 0) || (*n == 0)) return; + + /* A - REAL array of DIMENSION ( LDA, ka ), where ka is + * m when SIDE = 'L' or 'l' and is n otherwise. + * Before entry with SIDE = 'L' or 'l', the m by m part of + * the array A must contain the symmetric matrix, [..] + * Before entry with SIDE = 'R' or 'r', the n by n part of + * the array A must contain the symmetric matrix, [..] + * B - REAL array of DIMENSION ( LDB, n ). + * Before entry, the leading m by n part of the array B must + * contain the matrix B. + * C - REAL array of DIMENSION ( LDC, n ). + * Before entry, the leading m by n part of the array C must + * contain the matrix C, except when beta is zero, in which + * case C need not be set on entry. + */ + ka = (toupper(side[0]) == 'L') ? *m : *n; + stat1 = cublasAlloc ((*lda) * ka, sizeof(devPtrA[0]), (void**)&devPtrA); + stat2 = cublasAlloc ((*ldb) * (*n), sizeof(devPtrB[0]), (void**)&devPtrB); + stat3 = cublasAlloc ((*ldc) * (*n), sizeof(devPtrC[0]), (void**)&devPtrC); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zhemm", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + stat1 = cublasSetMatrix(imin(ka,*lda),ka,sizeof(A[0]),A,*lda,devPtrA,*lda); + stat2 = cublasSetMatrix(imin(*m,*ldb),*n,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + stat3 = cublasSetMatrix(imin(*m,*ldc),*n,sizeof(C[0]),C,*ldc,devPtrC,*ldc); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zhemm", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + cublasZhemm (side[0], uplo[0], *m, *n, *alpha, devPtrA, *lda, devPtrB, + *ldb, *beta, devPtrC, *ldc); + stat1 = cublasGetMatrix(imin(*m,*ldc),*n,sizeof(C[0]),devPtrC,*ldc,C,*ldc); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Zhemm", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); +} + +void CUBLAS_ZTRMM (const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const cuDoubleComplex *alpha, const cuDoubleComplex *A, const int *lda, + cuDoubleComplex *B, const int *ldb) +{ + int k; + cuDoubleComplex *devPtrA = 0, *devPtrB = 0; + cublasStatus stat1, stat2; + + if ((*m == 0) || (*n == 0)) return; + + /* A double precision array of dimensions (lda, k). k = m if side = + * 'L' or 'l', k = n if side = 'R' or 'r'. If uplo = 'U' or 'u' + * the leading k x k upper triangular part of the array A must + * contain the upper triangular matrix, and the strictly lower + * triangular part of A is not referenced. If uplo = 'L' or 'l' + * the leading k x k lower triangular part of the array A must + * contain the lower triangular matrix, and the strictly upper + * B single precision array of dimensions (ldb, n). On entry, the + * leading m x n part of the array contains the matrix B. It is + * overwritten with the transformed matrix on exit. + */ + k = (toupper(side[0]) == 'L') ? *m : *n; + stat1 = cublasAlloc (*lda * k, sizeof(devPtrA[0]), (void**)&devPtrA); + stat2 = cublasAlloc (*ldb * (*n), sizeof(devPtrB[0]), (void**)&devPtrB); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ztrmm", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrB); + return; + } + stat1 = cublasSetMatrix(imin(k,*lda),k,sizeof(A[0]),A,*lda,devPtrA,*lda); + stat2 = cublasSetMatrix(imin(*m,*ldb),*n,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Ztrmm", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrB); + return; + } + cublasZtrmm (side[0], uplo[0], transa[0], diag[0], *m, *n, *alpha, devPtrA, + *lda, devPtrB, *ldb); + stat1 = cublasGetMatrix(imin(*m,*ldb),*n,sizeof(B[0]),devPtrB,*ldb,B,*ldb); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Ztrmm", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrB); +} + +void CUBLAS_ZHERK (const char *uplo, const char *trans, const int *n, + const int *k, const double *alpha, + const cuDoubleComplex *A, const int *lda, + const double *beta, cuDoubleComplex *C, + const int *ldc) +{ + int ka; + cuDoubleComplex *devPtrA = 0, *devPtrC = 0; + cublasStatus stat1, stat2; + + if (*n == 0) return; + + /* A double complex precision array of dimensions (lda, ka), where ka is k + * when trans == 'N' or 'n', and is n otherwise. When trans == 'N' + * or 'n', the leading n x k part of array A must contain the matrix + * A, otherwise the leading k x n part of the array must contain the + * matrix A. + * C double complex precision array of dimensions (ldc, n). If uplo='U'or'u', + * the leading n x n triangular part of the array C must contain the + * upper triangular part of the symmetric matrix C and the strictly + */ + ka = (toupper(trans[0]) == 'N') ? *k : *n; + stat1 = cublasAlloc(imax(1,*lda*ka),sizeof(devPtrA[0]),(void**)&devPtrA); + stat2 = cublasAlloc(imax(1,*ldc*(*n)),sizeof(devPtrC[0]),(void**)&devPtrC); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zherk", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrC); + return; + } + if (toupper(trans[0]) == 'N') { + stat1=cublasSetMatrix(imin(*n,*lda),*k,sizeof(A[0]),A,*lda,devPtrA,*lda); + } else { + stat1=cublasSetMatrix(imin(*k,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + } + stat2 = cublasSetMatrix(imin(*n,*ldc),*n,sizeof(C[0]),C,*ldc,devPtrC,*ldc); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zsyrk", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrC); + return; + } + cublasZherk (uplo[0], trans[0], *n, *k, *alpha, devPtrA, *lda, *beta, + devPtrC, *ldc); + stat1 = cublasGetMatrix(imin(*n,*ldc),*n,sizeof(C[0]),devPtrC,*ldc,C,*ldc); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Zherk", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrC); +} + +void CUBLAS_ZHER2K (const char *uplo, const char *trans, const int *n, + const int *k, const cuDoubleComplex *alpha, const cuDoubleComplex *A, + const int *lda, const cuDoubleComplex *B, const int *ldb, + const double *beta, cuDoubleComplex *C, const int *ldc) +{ + int ka, kb; + cuDoubleComplex *devPtrA = 0, *devPtrB = 0, *devPtrC = 0; + cublasStatus stat1, stat2, stat3; + + if (*n == 0) return; + + /* A - REAL array of DIMENSION ( LDA, ka ), where ka is + * k when TRANS = 'N' or 'n', and is n otherwise. + * Before entry with TRANS = 'N' or 'n', the leading n by k + * part of the array A must contain the matrix A, otherwise + * the leading k by n part of the array A must contain the + * matrix A. + * B - REAL array of DIMENSION ( LDB, kb ), where kb is + * k when TRANS = 'N' or 'n', and is n otherwise. + * Before entry with TRANS = 'N' or 'n', the leading n by k + * part of the array B must contain the matrix B, otherwise + * the leading k by n part of the array B must contain the + * matrix B. + * C - single precision array of dimensions (ldc, n). If uplo == 'U' + * or 'u', the leading n x n triangular part of the array C must + */ + ka = (toupper(trans[0]) == 'N') ? *k : *n; + kb = (toupper(trans[0]) == 'N') ? *k : *n; + stat1 = cublasAlloc (imax(1,*lda*ka),sizeof(devPtrA[0]),(void**)&devPtrA); + stat2 = cublasAlloc (imax(1,*ldb*kb),sizeof(devPtrB[0]),(void**)&devPtrB); + stat3 = cublasAlloc ((*ldc) * (*n), sizeof(devPtrC[0]),(void**)&devPtrC); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zher2k", CUBLAS_WRAPPER_ERROR_ALLOC); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + if (toupper(trans[0]) == 'N') { + stat1=cublasSetMatrix(imin(*n,*lda),*k,sizeof(A[0]),A,*lda,devPtrA,*lda); + stat2=cublasSetMatrix(imin(*n,*ldb),*k,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + } else { + stat1=cublasSetMatrix(imin(*k,*lda),*n,sizeof(A[0]),A,*lda,devPtrA,*lda); + stat2=cublasSetMatrix(imin(*k,*ldb),*n,sizeof(B[0]),B,*ldb,devPtrB,*ldb); + } + stat3=cublasSetMatrix(imin(*n,*ldc),*n,sizeof(C[0]),C,*ldc,devPtrC,*ldc); + if ((stat1 != CUBLAS_STATUS_SUCCESS) || + (stat2 != CUBLAS_STATUS_SUCCESS) || + (stat3 != CUBLAS_STATUS_SUCCESS)) { + wrapperError ("Zher2k", CUBLAS_WRAPPER_ERROR_SET); + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); + return; + } + cublasZher2k (uplo[0], trans[0], *n, *k, *alpha, devPtrA, *lda, devPtrB, + *ldb, *beta, devPtrC, *ldc); + stat1=cublasGetMatrix(imin(*n,*ldc),*n,sizeof(C[0]),devPtrC,*ldc,C,*ldc); + if (stat1 != CUBLAS_STATUS_SUCCESS) { + wrapperError ("Zher2k", CUBLAS_WRAPPER_ERROR_GET); + } + cublasFree (devPtrA); + cublasFree (devPtrB); + cublasFree (devPtrC); +} + diff --git a/src/Accelerator/fortran_thunking.h b/src/Accelerator/fortran_thunking.h new file mode 100644 index 000000000..a6da7570c --- /dev/null +++ b/src/Accelerator/fortran_thunking.h @@ -0,0 +1,542 @@ +/* + * Copyright 1993-2012 NVIDIA Corporation. All rights reserved. + * + * NOTICE TO LICENSEE: + * + * This source code and/or documentation ("Licensed Deliverables") are + * subject to NVIDIA intellectual property rights under U.S. and + * international Copyright laws. + * + * These Licensed Deliverables contained herein is PROPRIETARY and + * CONFIDENTIAL to NVIDIA and is being provided under the terms and + * conditions of a form of NVIDIA software license agreement by and + * between NVIDIA and Licensee ("License Agreement") or electronically + * accepted by Licensee. Notwithstanding any terms or conditions to + * the contrary in the License Agreement, reproduction or disclosure + * of the Licensed Deliverables to any third party without the express + * written consent of NVIDIA is prohibited. + * + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE + * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. IT IS + * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. + * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED + * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, + * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY + * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY + * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THESE LICENSED DELIVERABLES. + * + * U.S. Government End Users. These Licensed Deliverables are a + * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT + * 1995), consisting of "commercial computer software" and "commercial + * computer software documentation" as such terms are used in 48 + * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government + * only as a commercial end item. Consistent with 48 C.F.R.12.212 and + * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all + * U.S. Government End Users acquire the Licensed Deliverables with + * only those rights set forth herein. + * + * Any use of the Licensed Deliverables in individual and commercial + * software must include, in the user documentation and internal + * comments to the code, the above Disclaimer and U.S. Government End + * Users Notice. + */ + +/* + * Fortran callable BLAS functions that include GPU memory allocation and + * copy-up and copy-down code. These can be called from unmodified Fortran + * code, but they are inefficient due to the data constantly bouncing back + * and forth between CPU and GPU. + */ + + +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus */ +int CUBLAS_INIT (void); +int CUBLAS_SHUTDOWN (void); + +/* BLAS1 */ +#if CUBLAS_FORTRAN_COMPILER==CUBLAS_G77 +double CUBLAS_SDOT (const int *n, const float *x, const int *incx, float *y, + const int *incy); +double CUBLAS_SASUM (const int *n, const float *x, const int *incx); +double CUBLAS_SNRM2 (const int *n, const float *x, const int *incx); +double CUBLAS_SCASUM (const int *n, const cuComplex *x, const int *incx); +double CUBLAS_SCNRM2 (const int *n, const cuComplex *x, const int *incx); +#else +float CUBLAS_SDOT (const int *n, const float *x, const int *incx, float *y, + const int *incy); +float CUBLAS_SASUM (const int *n, const float *x, const int *incx); +float CUBLAS_SNRM2 (const int *n, const float *x, const int *incx); +float CUBLAS_SCASUM (const int *n, const cuComplex *x, const int *incx); +float CUBLAS_SCNRM2 (const int *n, const cuComplex *x, const int *incx); +#endif +double CUBLAS_DZNRM2 (const int *n, const cuDoubleComplex *x, const int *incx); +double CUBLAS_DZASUM (const int *n, const cuDoubleComplex *x, const int *incx); + +int CUBLAS_ISAMAX (const int *n, const float *x, const int *incx); +int CUBLAS_ISAMIN (const int *n, const float *x, const int *incx); +void CUBLAS_SAXPY (const int *n, const float *alpha, const float *x, + const int *incx, float *y, const int *incy); +void CUBLAS_SCOPY (const int *n, const float *x, const int *incx, float *y, + const int *incy); +void CUBLAS_SROT (const int *n, float *x, const int *incx, float *y, + const int *incy, const float *sc, const float *ss); +void CUBLAS_SROTG (float *sa, float *sb, float *sc, float *ss); +void CUBLAS_SROTM (const int *n, float *x, const int *incx, float *y, + const int *incy, const float* sparam); +void CUBLAS_SROTMG (float *sd1, float *sd2, float *sx1, const float *sy1, + float* sparam); +void CUBLAS_SSCAL (const int *n, const float *alpha, float *x, + const int *incx); +void CUBLAS_SSWAP(const int *n, float *x, const int *incx, float *y, + const int *incy); + +void CUBLAS_CAXPY (const int *n, const cuComplex *alpha, const cuComplex *x, + const int *incx, cuComplex *y, const int *incy); +void CUBLAS_ZAXPY (const int *n, const cuDoubleComplex *alpha, const cuDoubleComplex *x, + const int *incx, cuDoubleComplex *y, const int *incy); +void CUBLAS_CCOPY (const int *n, const cuComplex *x, const int *incx, + cuComplex *y, const int *incy); +void CUBLAS_ZCOPY (const int *n, const cuDoubleComplex *x, const int *incx, + cuDoubleComplex *y, const int *incy); +void CUBLAS_CROT (const int *n, cuComplex *x, const int *incx, cuComplex *y, + const int *incy, const float *sc, const cuComplex *cs); +void CUBLAS_ZROT (const int *n, cuDoubleComplex *x, const int *incx, cuDoubleComplex *y, + const int *incy, const double *sc, const cuDoubleComplex *cs); +void CUBLAS_CROTG (cuComplex *ca, const cuComplex *cb, float *sc, + cuComplex *cs); +void CUBLAS_ZROTG (cuDoubleComplex *ca, const cuDoubleComplex *cb, double *sc, + cuDoubleComplex *cs); +void CUBLAS_CSCAL (const int *n, const cuComplex *alpha, cuComplex *x, + const int *incx); +void CUBLAS_CSROT (const int *n, cuComplex *x, const int *incx, cuComplex *y, + const int *incy, const float *sc, const float *ss); +void CUBLAS_ZDROT (const int *n, cuDoubleComplex *x, const int *incx, cuDoubleComplex *y, + const int *incy, const double *sc, const double *ss); +void CUBLAS_CSSCAL (const int *n, const float *alpha, cuComplex *x, + const int *incx); +void CUBLAS_CSWAP (const int *n, cuComplex *x, const int *incx, cuComplex *y, + const int *incy); +void CUBLAS_ZSWAP (const int *n, cuDoubleComplex *x, const int *incx, cuDoubleComplex *y, + const int *incy); +void CUBLAS_CTRMV (const char *uplo, const char *trans, const char *diag, const int *n, + const cuComplex *A, const int *lda, cuComplex *x, const int *incx); +void CUBLAS_ZTRMV (const char *uplo, const char *trans, const char *diag, const int *n, + const cuDoubleComplex *A, const int *lda, cuDoubleComplex *x, const int *incx); +#ifdef RETURN_COMPLEX +cuComplex CUBLAS_CDOTU ( const int *n, const cuComplex *x, + const int *incx, const cuComplex *y, const int *incy); +cuComplex CUBLAS_CDOTC ( const int *n, const cuComplex *x, + const int *incx, const cuComplex *y, const int *incy); +#else +void CUBLAS_CDOTU (cuComplex *retVal, const int *n, const cuComplex *x, + const int *incx, const cuComplex *y, const int *incy); +void CUBLAS_CDOTC (cuComplex *retVal,const int *n, const cuComplex *x, + const int *incx, const cuComplex *y, const int *incy); +#endif +int CUBLAS_ICAMAX (const int *n, const cuComplex *x, const int *incx); +int CUBLAS_ICAMIN (const int *n, const cuComplex *x, const int *incx); +int CUBLAS_IZAMAX (const int *n, const cuDoubleComplex *x, const int *incx); +int CUBLAS_IZAMIN (const int *n, const cuDoubleComplex *x, const int *incx); + +/* BLAS2 */ +void CUBLAS_SGBMV (const char *trans, const int *m, const int *n, + const int *kl, const int *ku, const float *alpha, + const float *A, const int *lda, const float *x, + const int *incx, const float *beta, float *y, + const int *incy); +void CUBLAS_DGBMV (const char *trans, const int *m, const int *n, + const int *kl, const int *ku, const double *alpha, + const double *A, const int *lda, const double *x, + const int *incx, const double *beta, double *y, + const int *incy); +void CUBLAS_CGBMV (const char *trans, const int *m, const int *n, + const int *kl, const int *ku, const cuComplex *alpha, + const cuComplex *A, const int *lda, const cuComplex *x, + const int *incx, const cuComplex *beta, cuComplex *y, + const int *incy); +void CUBLAS_ZGBMV (const char *trans, const int *m, const int *n, + const int *kl, const int *ku, const cuDoubleComplex *alpha, + const cuDoubleComplex *A, const int *lda, const cuDoubleComplex *x, + const int *incx, const cuDoubleComplex *beta, cuDoubleComplex *y, + const int *incy); + +void CUBLAS_SGEMV (const char *trans, const int *m, const int *n, + const float *alpha, const float *A, const int *lda, + const float *x, const int *incx, const float *beta, + float *y, const int *incy); +void CUBLAS_SGER (const int *m, const int *n, const float *alpha, + const float *x, const int *incx, const float *y, + const int *incy, float *A, const int *lda); +void CUBLAS_SSBMV (const char *uplo, const int *n, const int *k, + const float *alpha, const float *A, const int *lda, + const float *x, const int *incx, const float *beta, + float *y, const int *incy); +void CUBLAS_DSBMV (const char *uplo, const int *n, const int *k, + const double *alpha, const double *A, const int *lda, + const double *x, const int *incx, const double *beta, + double *y, const int *incy); +void CUBLAS_CHBMV (const char *uplo, const int *n, const int *k, + const cuComplex *alpha, const cuComplex *A, const int *lda, + const cuComplex *x, const int *incx, const cuComplex *beta, + cuComplex *y, const int *incy); +void CUBLAS_ZHBMV (const char *uplo, const int *n, const int *k, + const cuDoubleComplex *alpha, const cuDoubleComplex *A, const int *lda, + const cuDoubleComplex *x, const int *incx, const cuDoubleComplex *beta, + cuDoubleComplex *y, const int *incy); +void CUBLAS_SSPMV (const char *uplo, const int *n, const float *alpha, + const float *AP, const float *x, const int *incx, + const float *beta, float *y, const int *incy); +void CUBLAS_DSPMV (const char *uplo, const int *n, const double *alpha, + const double *AP, const double *x, const int *incx, + const double *beta, double *y, const int *incy); +void CUBLAS_CHPMV (const char *uplo, const int *n, const cuComplex *alpha, + const cuComplex *AP, const cuComplex *x, const int *incx, + const cuComplex *beta, cuComplex *y, const int *incy); +void CUBLAS_ZHPMV (const char *uplo, const int *n, const cuDoubleComplex *alpha, + const cuDoubleComplex *AP, const cuDoubleComplex *x, const int *incx, + const cuDoubleComplex *beta, cuDoubleComplex *y, const int *incy); +void CUBLAS_SSPR (const char *uplo, const int *n, const float *alpha, + const float *x, const int *incx, float *AP); +void CUBLAS_DSPR (const char *uplo, const int *n, const double *alpha, + const double *x, const int *incx, double *AP); +void CUBLAS_CHPR (const char *uplo, const int *n, const float *alpha, + const cuComplex *x, const int *incx, cuComplex *AP); +void CUBLAS_ZHPR (const char *uplo, const int *n, const double *alpha, + const cuDoubleComplex *x, const int *incx, cuDoubleComplex *AP); +void CUBLAS_SSPR2 (const char *uplo, const int *n, const float *alpha, + const float *x, const int *incx, const float *y, + const int *incy, float *AP); +void CUBLAS_DSPR2 (const char *uplo, const int *n, const double *alpha, + const double *x, const int *incx, const double *y, + const int *incy, double *AP); +void CUBLAS_CHPR2 (const char *uplo, const int *n, const cuComplex *alpha, + const cuComplex *x, const int *incx, const cuComplex *y, + const int *incy, cuComplex *AP); +void CUBLAS_ZHPR2 (const char *uplo, const int *n, const cuDoubleComplex *alpha, + const cuDoubleComplex *x, const int *incx, const cuDoubleComplex *y, + const int *incy, cuDoubleComplex *AP); +void CUBLAS_SSYMV (const char *uplo, const int *n, const float *alpha, + const float *A, const int *lda, const float *x, + const int *incx, const float *beta, float *y, + const int *incy); +void CUBLAS_DSYMV (const char *uplo, const int *n, const double *alpha, + const double *A, const int *lda, const double *x, + const int *incx, const double *beta, double *y, + const int *incy); +void CUBLAS_CHEMV (const char *uplo, const int *n, const cuComplex *alpha, + const cuComplex *A, const int *lda, const cuComplex *x, + const int *incx, const cuComplex *beta, cuComplex *y, + const int *incy); +void CUBLAS_ZHEMV (const char *uplo, const int *n, const cuDoubleComplex *alpha, + const cuDoubleComplex *A, const int *lda, const cuDoubleComplex *x, + const int *incx, const cuDoubleComplex *beta, cuDoubleComplex *y, + const int *incy); +void CUBLAS_SSYR (const char *uplo, const int *n, const float *alpha, + const float *x, const int *incx, float *A, const int *lda); +void CUBLAS_SSYR2 (const char *uplo, const int *n, const float *alpha, + const float *x, const int *incx, const float *y, + const int *incy, float *A, const int *lda); +void CUBLAS_DSYR2 (const char *uplo, const int *n, const double *alpha, + const double *x, const int *incx, const double *y, + const int *incy, double *A, const int *lda); +void CUBLAS_CHER2 (const char *uplo, const int *n, const cuComplex *alpha, + const cuComplex *x, const int *incx, const cuComplex *y, + const int *incy, cuComplex *A, const int *lda); +void CUBLAS_ZHER2 (const char *uplo, const int *n, const cuDoubleComplex *alpha, + const cuDoubleComplex *x, const int *incx, const cuDoubleComplex *y, + const int *incy, cuDoubleComplex *A, const int *lda); +void CUBLAS_STBMV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const float *A, const int *lda, + float *x, const int *incx); +void CUBLAS_DTBMV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const double *A, const int *lda, + double *x, const int *incx); +void CUBLAS_CTBMV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const cuComplex *A, const int *lda, + cuComplex *x, const int *incx); +void CUBLAS_ZTBMV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const cuDoubleComplex *A, const int *lda, + cuDoubleComplex *x, const int *incx); +void CUBLAS_STBSV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const float *A, const int *lda, + float *x, const int *incx); +void CUBLAS_DTBSV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const double *A, const int *lda, + double *x, const int *incx); +void CUBLAS_CTBSV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const cuComplex *A, const int *lda, + cuComplex *x, const int *incx); +void CUBLAS_ZTBSV (const char *uplo, const char *trans, const char *diag, + const int *n, const int *k, const cuDoubleComplex *A, const int *lda, + cuDoubleComplex *x, const int *incx); +void CUBLAS_STPMV (const char *uplo, const char *trans, const char *diag, + const int *n, const float *AP, float *x, const int *incx); +void CUBLAS_DTPMV (const char *uplo, const char *trans, const char *diag, + const int *n, const double *AP, double *x, const int *incx); +void CUBLAS_CTPMV (const char *uplo, const char *trans, const char *diag, + const int *n, const cuComplex *AP, cuComplex *x, const int *incx); +void CUBLAS_ZTPMV (const char *uplo, const char *trans, const char *diag, + const int *n, const cuDoubleComplex *AP, cuDoubleComplex *x, const int *incx); +void CUBLAS_STPSV (const char *uplo, const char *trans, const char *diag, + const int *n, const float *AP, float *x, const int *incx); +void CUBLAS_DTPSV (const char *uplo, const char *trans, const char *diag, + const int *n, const double *AP, double *x, const int *incx); +void CUBLAS_CTPSV (const char *uplo, const char *trans, const char *diag, + const int *n, const cuComplex *AP, cuComplex *x, const int *incx); +void CUBLAS_ZTPSV (const char *uplo, const char *trans, const char *diag, + const int *n, const cuDoubleComplex *AP, cuDoubleComplex *x, const int *incx); +void CUBLAS_STRMV (const char *uplo, const char *trans, const char *diag, + const int *n, const float *A, const int *lda, float *x, + const int *incx); +void CUBLAS_STRSV (const char *uplo, const char *trans, const char *diag, + const int *n, const float *A, const int *lda, float *x, + const int *incx); +void CUBLAS_CTRSV (const char *uplo, const char *trans, const char *diag, + const int *n, const cuComplex *A, const int *lda, cuComplex *x, + const int *incx); + +/* BLAS3 */ +void CUBLAS_SGEMM (const char *transa, const char *transb, const int *m, + const int *n, const int *k, const float *alpha, + const float *A, const int *lda, const float *B, + const int *ldb, const float *beta, float *C, + const int *ldc); +void CUBLAS_SSYMM (const char *side, const char *uplo, const int *m, + const int *n, const float *alpha, const float *A, + const int *lda, const float *B, const int *ldb, + const float *beta, float *C, const int *ldc); +void CUBLAS_SSYR2K (const char *uplo, const char *trans, const int *n, + const int *k, const float *alpha, const float *A, + const int *lda,const float *B, const int *ldb, + const float *beta, float *C, const int *ldc); +void CUBLAS_SSYRK (const char *uplo, const char *trans, const int *n, + const int *k, const float *alpha, const float *A, + const int *lda, const float *beta, float *C, + const int *ldc); +void CUBLAS_STRMM (const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const float *alpha, const float *A, const int *lda, + float *B, const int *ldb); +void CUBLAS_CTRMM (const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const cuComplex *alpha, const cuComplex *A, const int *lda, + cuComplex *B, const int *ldb); +void CUBLAS_STRSM (const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const float *alpha, const float *A, const int *lda, + float *B, const int *ldb); + +void CUBLAS_CGEMM (const char *transa, const char *transb, const int *m, + const int *n, const int *k, const cuComplex *alpha, + const cuComplex *A, const int *lda, const cuComplex *B, + const int *ldb, const cuComplex *beta, cuComplex *C, + const int *ldc); + +/* DP BLAS1 */ +double CUBLAS_DDOT (const int *n, const double *x, const int *incx, double *y, + const int *incy); +double CUBLAS_DASUM (const int *n, const double *x, const int *incx); +double CUBLAS_DNRM2 (const int *n, const double *x, const int *incx); +int CUBLAS_IDAMAX (const int *n, const double *x, const int *incx); +int CUBLAS_IDAMIN (const int *n, const double *x, const int *incx); +void CUBLAS_DAXPY (const int *n, const double *alpha, const double *x, + const int *incx, double *y, const int *incy); +void CUBLAS_DCOPY (const int *n, const double *x, const int *incx, double *y, + const int *incy); +void CUBLAS_DROT (const int *n, double *x, const int *incx, double *y, + const int *incy, const double *sc, const double *ss); +void CUBLAS_DROTG (double *sa, double *sb, double *sc, double *ss); +void CUBLAS_DROTM (const int *n, double *x, const int *incx, double *y, + const int *incy, const double* sparam); +void CUBLAS_DROTMG (double *sd1, double *sd2, double *sx1, const double *sy1, + double* sparam); +void CUBLAS_DSCAL (const int *n, const double *alpha, double *x, + const int *incx); +void CUBLAS_DSWAP(const int *n, double *x, const int *incx, double *y, + const int *incy); + +/* DP Complex BLAS1 */ +#ifdef RETURN_COMPLEX +cuDoubleComplex CUBLAS_ZDOTU ( const int *n, const cuDoubleComplex *x, + const int *incx, const cuDoubleComplex *y, const int *incy); +cuDoubleComplex CUBLAS_ZDOTC ( const int *n, const cuDoubleComplex *x, + const int *incx, const cuDoubleComplex *y, const int *incy); +#else +void CUBLAS_ZDOTU (cuDoubleComplex *retVal, const int *n, const cuDoubleComplex *x, + const int *incx, const cuDoubleComplex *y, const int *incy); +void CUBLAS_ZDOTC (cuDoubleComplex *retVal, const int *n, const cuDoubleComplex *x, + const int *incx, const cuDoubleComplex *y, const int *incy); + +#endif +void CUBLAS_ZSCAL (const int *n, const cuDoubleComplex *alpha, cuDoubleComplex *x, + const int *incx); +void CUBLAS_ZDSCAL (const int *n, const double *alpha, cuDoubleComplex *x, + const int *incx); + +/* DP BLAS2 */ +void CUBLAS_DGEMV (const char *trans, const int *m, const int *n, + const double *alpha, const double *A, const int *lda, + const double *x, const int *incx, const double *beta, + double *y, const int *incy); +void CUBLAS_DGER (const int *m, const int *n, const double *alpha, + const double *x, const int *incx, const double *y, + const int *incy, double *A, const int *lda); +void CUBLAS_DSYR (const char *uplo, const int *n, const double *alpha, + const double *x, const int *incx, double *A, const int *lda); +void CUBLAS_DTRSV (const char *uplo, const char *trans, const char *diag, + const int *n, const double *A, const int *lda, double *x, + const int *incx); +void CUBLAS_DTRMV (const char *uplo, const char *trans, const char *diag, + const int *n, const double *A, const int *lda, double *x, + const int *incx); + +/* DP Complex BLAS2 */ +void CUBLAS_CGEMV (const char *trans, const int *m, const int *n, + const cuComplex *alpha, const cuComplex *A, + const int *lda, const cuComplex *x, const int *incx, + const cuComplex *beta, cuComplex *y, + const int *incy); +void CUBLAS_ZGEMV (const char *trans, const int *m, const int *n, + const cuDoubleComplex *alpha, const cuDoubleComplex *A, + const int *lda, const cuDoubleComplex *x, const int *incx, + const cuDoubleComplex *beta, cuDoubleComplex *y, + const int *incy); +void CUBLAS_CSYMM (const char *side, const char *uplo, const int *m, + const int *n, const cuComplex *alpha, const cuComplex *A, + const int *lda, const cuComplex *B, const int *ldb, + const cuComplex *beta, cuComplex *C, const int *ldc); + +void CUBLAS_CHEMM (const char *side, const char *uplo, const int *m, + const int *n, const cuComplex *alpha, const cuComplex *A, + const int *lda, const cuComplex *B, const int *ldb, + const cuComplex *beta, cuComplex *C, const int *ldc); + +void CUBLAS_CGERU (const int *m, const int *n, const cuComplex *alpha, + const cuComplex *x, const int *incx, const cuComplex *y, + const int *incy, cuComplex *A, const int *lda); + +void CUBLAS_CGERC (const int *m, const int *n, const cuComplex *alpha, + const cuComplex *x, const int *incx, const cuComplex *y, + const int *incy, cuComplex *A, const int *lda); +void CUBLAS_ZGERU (const int *m, const int *n, const cuDoubleComplex *alpha, + const cuDoubleComplex *x, const int *incx, const cuDoubleComplex *y, + const int *incy, cuDoubleComplex *A, const int *lda); + +void CUBLAS_ZGERC (const int *m, const int *n, const cuDoubleComplex *alpha, + const cuDoubleComplex *x, const int *incx, const cuDoubleComplex *y, + const int *incy, cuDoubleComplex *A, const int *lda); + +void CUBLAS_ZTRSV (const char *uplo, const char *trans, const char *diag, + const int *n, const cuDoubleComplex *A, const int *lda, + cuDoubleComplex *x, const int *incx); + +void CUBLAS_CHER (const char *uplo, const int *n, const float *alpha, + const cuComplex *x, const int *incx, cuComplex *A, const int *lda); + +void CUBLAS_ZHER (const char *uplo, const int *n, const double *alpha, + const cuDoubleComplex *x, const int *incx, cuDoubleComplex *A, const int *lda); + +/* DP BLAS3 */ +void CUBLAS_DGEMM (const char *transa, const char *transb, const int *m, + const int *n, const int *k, const double *alpha, + const double *A, const int *lda, const double *B, + const int *ldb, const double *beta, double *C, + const int *ldc); +void CUBLAS_DSYMM (const char *side, const char *uplo, const int *m, + const int *n, const double *alpha, const double *A, + const int *lda, const double *B, const int *ldb, + const double *beta, double *C, const int *ldc); +void CUBLAS_ZSYMM (const char *side, const char *uplo, const int *m, + const int *n, const cuDoubleComplex *alpha, const cuDoubleComplex *A, + const int *lda, const cuDoubleComplex *B, const int *ldb, + const cuDoubleComplex *beta, cuDoubleComplex *C, const int *ldc); + +void CUBLAS_ZHEMM (const char *side, const char *uplo, const int *m, + const int *n, const cuDoubleComplex *alpha, const cuDoubleComplex *A, + const int *lda, const cuDoubleComplex *B, const int *ldb, + const cuDoubleComplex *beta, cuDoubleComplex *C, const int *ldc); + +void CUBLAS_DSYR2K (const char *uplo, const char *trans, const int *n, + const int *k, const double *alpha, const double *A, + const int *lda,const double *B, const int *ldb, + const double *beta, double *C, const int *ldc); +void CUBLAS_DSYRK (const char *uplo, const char *trans, const int *n, + const int *k, const double *alpha, const double *A, + const int *lda, const double *beta, double *C, + const int *ldc); +void CUBLAS_DTRMM (const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const double *alpha, const double *A, const int *lda, + double *B, const int *ldb); +void CUBLAS_ZTRMM (const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const cuDoubleComplex *alpha, const cuDoubleComplex *A, const int *lda, + cuDoubleComplex *B, const int *ldb); +void CUBLAS_DTRSM (const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const double *alpha, const double *A, const int *lda, + double *B, const int *ldb); +void CUBLAS_CTRSM ( const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const cuComplex *alpha, const cuComplex *A, const int *lda, + cuComplex *B, const int *ldb); +void CUBLAS_ZTRSM (const char *side, const char *uplo, const char *transa, + const char *diag, const int *m, const int *n, + const cuDoubleComplex *alpha, + const cuDoubleComplex *A, const int *lda, + cuDoubleComplex *B, const int *ldb); +void CUBLAS_CSYRK (const char *uplo, const char *trans, const int *n, + const int *k, const cuComplex *alpha, + const cuComplex *A, const int *lda, + const cuComplex *beta, cuComplex *C, + const int *ldc); +void CUBLAS_CSYR2K (const char *uplo, const char *trans, const int *n, + const int *k, const cuComplex *alpha, const cuComplex *A, + const int *lda, const cuComplex *B, const int *ldb, + const cuComplex *beta, cuComplex *C, const int *ldc); +void CUBLAS_ZSYRK (const char *uplo, const char *trans, const int *n, + const int *k, const cuDoubleComplex *alpha, + const cuDoubleComplex *A, const int *lda, + const cuDoubleComplex *beta, cuDoubleComplex *C, + const int *ldc); +void CUBLAS_ZSYR2K (const char *uplo, const char *trans, const int *n, + const int *k, const cuDoubleComplex *alpha, const cuDoubleComplex *A, + const int *lda, const cuDoubleComplex *B, const int *ldb, + const cuDoubleComplex *beta, cuDoubleComplex *C, const int *ldc); +void CUBLAS_CHERK (const char *uplo, const char *trans, const int *n, + const int *k, const float *alpha, + const cuComplex *A, const int *lda, + const float *beta, cuComplex *C, + const int *ldc); +void CUBLAS_CHER2K (const char *uplo, const char *trans, const int *n, + const int *k, const cuComplex *alpha, const cuComplex *A, + const int *lda, const cuComplex *B, const int *ldb, + const float *beta, cuComplex *C, const int *ldc); +void CUBLAS_ZHERK (const char *uplo, const char *trans, const int *n, + const int *k, const double *alpha, + const cuDoubleComplex *A, const int *lda, + const double *beta, cuDoubleComplex *C, + const int *ldc); +void CUBLAS_ZHER2K (const char *uplo, const char *trans, const int *n, + const int *k, const cuDoubleComplex *alpha, const cuDoubleComplex *A, + const int *lda, const cuDoubleComplex *B, const int *ldb, + const double *beta, cuDoubleComplex *C, const int *ldc); + +void CUBLAS_ZGEMM (const char *transa, const char *transb, const int *m, + const int *n, const int *k, const cuDoubleComplex *alpha, + const cuDoubleComplex *A, const int *lda, + const cuDoubleComplex *B, const int *ldb, + const cuDoubleComplex *beta, cuDoubleComplex *C, + const int *ldc); + +#if defined(__cplusplus) +} +#endif /* __cplusplus */ diff --git a/src/Accelerator/inverse.cu b/src/Accelerator/inverse.cu new file mode 100644 index 000000000..ffdaa5f9b --- /dev/null +++ b/src/Accelerator/inverse.cu @@ -0,0 +1,11450 @@ +/* + * Copyright (c) 2011, NVIDIA Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of NVIDIA Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include "cuComplex.h" +#include "inverse.h" +#include "operations.h" + +#define GRID_DIM_LIMIT (65520) + +#define ARCH_SM13 (0) +#define ARCH_SM20 (1) + +#define FERMI + +#if defined(FERMI) +#define GPU_ARCH (ARCH_SM20) +#else +#define GPU_ARCH (ARCH_SM13) +#endif + +/* Poor man's typeid */ +template __device__ int isDoubleComplex(); +template <> __device__ int isDoubleComplex() {return 0;}; +template <> __device__ int isDoubleComplex() {return 0;}; +template <> __device__ int isDoubleComplex() {return 0;}; +template <> __device__ int isDoubleComplex() {return 1;}; + +template +class config { +public: +}; + +template<> class config { +public: + typedef float absValType; + + enum { gje3MinDim = 2 }; + enum { gje3MaxDim =109 }; + enum { gje3MinBlks = 1 }; + enum { gje3MaxThrds = 1536 }; /* sm_2x, 21 registers per thread */ + + enum { gje3DimX_00 = -1 }; + enum { gje3DimX_01 = -1 }; + enum { gje3DimX_02 = 2 }; + enum { gje3DimX_03 = 3 }; + enum { gje3DimX_04 = 4 }; + enum { gje3DimX_05 = 5 }; + enum { gje3DimX_06 = 5 }; + enum { gje3DimX_07 = 4 }; + enum { gje3DimX_08 = 4 }; + enum { gje3DimX_09 = 3 }; + enum { gje3DimX_10 = 5 }; + enum { gje3DimX_11 = 5 }; + enum { gje3DimX_12 = 4 }; + enum { gje3DimX_13 = 4 }; + enum { gje3DimX_14 = 4 }; + enum { gje3DimX_15 = 4 }; + enum { gje3DimX_16 = 4 }; + enum { gje3DimX_17 = 3 }; + enum { gje3DimX_18 = 3 }; + enum { gje3DimX_19 = 5 }; + enum { gje3DimX_20 = 4 }; + enum { gje3DimX_21 = 3 }; + enum { gje3DimX_22 = 4 }; + enum { gje3DimX_23 = 4 }; + enum { gje3DimX_24 = 4 }; + enum { gje3DimX_25 = 3 }; + enum { gje3DimX_26 = 2 }; + enum { gje3DimX_27 = 3 }; + enum { gje3DimX_28 = 3 }; + enum { gje3DimX_29 = 3 }; + enum { gje3DimX_30 = 2 }; + enum { gje3DimX_31 = 3 }; + enum { gje3DimX_32 = 3 }; + enum { gje3DimX_33 = 2 }; + enum { gje3DimX_34 = 2 }; + enum { gje3DimX_35 = 4 }; + enum { gje3DimX_36 = 4 }; + enum { gje3DimX_37 = 2 }; + enum { gje3DimX_38 = 2 }; + enum { gje3DimX_39 = 4 }; + enum { gje3DimX_40 = 3 }; + enum { gje3DimX_41 = 3 }; + enum { gje3DimX_42 = 3 }; + enum { gje3DimX_43 = 2 }; + enum { gje3DimX_44 = 2 }; + enum { gje3DimX_45 = 4 }; + enum { gje3DimX_46 = 2 }; + enum { gje3DimX_47 = 4 }; + enum { gje3DimX_48 = 4 }; + enum { gje3DimX_49 = 3 }; + enum { gje3DimX_50 = 3 }; + enum { gje3DimX_51 = 3 }; + enum { gje3DimX_52 = 4 }; + enum { gje3DimX_53 = 3 }; + enum { gje3DimX_54 = 4 }; + enum { gje3DimX_55 = 4 }; + enum { gje3DimX_56 = 4 }; + enum { gje3DimX_57 = 5 }; + enum { gje3DimX_58 = 6 }; + enum { gje3DimX_59 = 4 }; + enum { gje3DimX_60 = 4 }; + enum { gje3DimX_61 = 4 }; + enum { gje3DimX_62 = 4 }; + enum { gje3DimX_63 = 7 }; + enum { gje3DimX_64 = 8 }; + enum { gje3DimX_65 = 8 }; + enum { gje3DimX_66 = 6 }; + enum { gje3DimX_67 = 5 }; + enum { gje3DimX_68 = 4 }; + enum { gje3DimX_69 = 5 }; + enum { gje3DimX_70 = 5 }; + enum { gje3DimX_71 = 4 }; + enum { gje3DimX_72 = 6 }; + enum { gje3DimX_73 = 5 }; + enum { gje3DimX_74 = 5 }; + enum { gje3DimX_75 = 6 }; + enum { gje3DimX_76 = 4 }; + enum { gje3DimX_77 = 7 }; + enum { gje3DimX_78 = 8 }; + enum { gje3DimX_79 = 8 }; + enum { gje3DimX_80 = 8 }; + enum { gje3DimX_81 = 9 }; + enum { gje3DimX_82 = 7 }; + enum { gje3DimX_83 = 6 }; + enum { gje3DimX_84 = 6 }; + enum { gje3DimX_85 = 6 }; + enum { gje3DimX_86 = 8 }; + enum { gje3DimX_87 = 8 }; + enum { gje3DimX_88 = 8 }; + enum { gje3DimX_89 = 7 }; + enum { gje3DimX_90 = 7 }; + enum { gje3DimX_91 = 7 }; + enum { gje3DimX_92 = 6 }; + enum { gje3DimX_93 = 6 }; + enum { gje3DimX_94 = 6 }; + enum { gje3DimX_95 = 8 }; + enum { gje3DimX_96 = 8 }; + enum { gje3DimX_97 = 10 }; + enum { gje3DimX_98 = 6 }; + enum { gje3DimX_99 = 5 }; + enum { gje3DimX_100 = 4 }; + enum { gje3DimX_101 = 5 }; + enum { gje3DimX_102 = 6 }; + enum { gje3DimX_103 = 7 }; + enum { gje3DimX_104 = 8 }; + enum { gje3DimX_105 = 7 }; + enum { gje3DimX_106 = 6 }; + enum { gje3DimX_107 = 7 }; + enum { gje3DimX_108 = 4 }; + enum { gje3DimX_109 = 7 }; + + enum { gje3Pad_00 = 0 }; + enum { gje3Pad_01 = 0 }; + enum { gje3Pad_02 = 1 }; + enum { gje3Pad_03 = 1 }; + enum { gje3Pad_04 = 1 }; + enum { gje3Pad_05 = 1 }; + enum { gje3Pad_06 = 1 }; + enum { gje3Pad_07 = 2 }; + enum { gje3Pad_08 = 4 }; + enum { gje3Pad_09 = 1 }; + enum { gje3Pad_10 = 2 }; + enum { gje3Pad_11 = 1 }; + enum { gje3Pad_12 = 0 }; + enum { gje3Pad_13 = 1 }; + enum { gje3Pad_14 = 4 }; + enum { gje3Pad_15 = 5 }; + enum { gje3Pad_16 = 4 }; + enum { gje3Pad_17 = 1 }; + enum { gje3Pad_18 = 1 }; + enum { gje3Pad_19 = 1 }; + enum { gje3Pad_20 = 3 }; + enum { gje3Pad_21 = 1 }; + enum { gje3Pad_22 = 5 }; + enum { gje3Pad_23 = 5 }; + enum { gje3Pad_24 = 4 }; + enum { gje3Pad_25 = 2 }; + enum { gje3Pad_26 = 4 }; + enum { gje3Pad_27 = 2 }; + enum { gje3Pad_28 = 1 }; + enum { gje3Pad_29 = 1 }; + enum { gje3Pad_30 = 4 }; + enum { gje3Pad_31 = 4 }; + enum { gje3Pad_32 = 3 }; + enum { gje3Pad_33 = 1 }; + enum { gje3Pad_34 = 4 }; + enum { gje3Pad_35 = 1 }; + enum { gje3Pad_36 = 1 }; + enum { gje3Pad_37 = 1 }; + enum { gje3Pad_38 = 4 }; + enum { gje3Pad_39 = 5 }; + enum { gje3Pad_40 = 1 }; + enum { gje3Pad_41 = 1 }; + enum { gje3Pad_42 = 4 }; + enum { gje3Pad_43 = 0 }; + enum { gje3Pad_44 = 0 }; + enum { gje3Pad_45 = 1 }; + enum { gje3Pad_46 = 4 }; + enum { gje3Pad_47 = 5 }; + enum { gje3Pad_48 = 4 }; + enum { gje3Pad_49 = 1 }; + enum { gje3Pad_50 = 4 }; + enum { gje3Pad_51 = 3 }; + enum { gje3Pad_52 = 3 }; + enum { gje3Pad_53 = 1 }; + enum { gje3Pad_54 = 0 }; + enum { gje3Pad_55 = 5 }; + enum { gje3Pad_56 = 4 }; + enum { gje3Pad_57 = 2 }; + enum { gje3Pad_58 = 1 }; + enum { gje3Pad_59 = 1 }; + enum { gje3Pad_60 = 0 }; + enum { gje3Pad_61 = 1 }; + enum { gje3Pad_62 = 0 }; + enum { gje3Pad_63 = 5 }; + enum { gje3Pad_64 = 4 }; + enum { gje3Pad_65 = 3 }; + enum { gje3Pad_66 = 4 }; + enum { gje3Pad_67 = 2 }; + enum { gje3Pad_68 = 0 }; + enum { gje3Pad_69 = 0 }; + enum { gje3Pad_70 = 3 }; + enum { gje3Pad_71 = 5 }; + enum { gje3Pad_72 = 3 }; + enum { gje3Pad_73 = 3 }; + enum { gje3Pad_74 = 2 }; + enum { gje3Pad_75 = 2 }; + enum { gje3Pad_76 = 0 }; + enum { gje3Pad_77 = 0 }; + enum { gje3Pad_78 = 5 }; + enum { gje3Pad_79 = 5 }; + enum { gje3Pad_80 = 4 }; + enum { gje3Pad_81 = 4 }; + enum { gje3Pad_82 = 1 }; + enum { gje3Pad_83 = 0 }; + enum { gje3Pad_84 = 3 }; + enum { gje3Pad_85 = 2 }; + enum { gje3Pad_86 = 2 }; + enum { gje3Pad_87 = 1 }; + enum { gje3Pad_88 = 1 }; + enum { gje3Pad_89 = 1 }; + enum { gje3Pad_90 = 1 }; + enum { gje3Pad_91 = 1 }; + enum { gje3Pad_92 = 1 }; + enum { gje3Pad_93 = 0 }; + enum { gje3Pad_94 = 5 }; + enum { gje3Pad_95 = 5 }; + enum { gje3Pad_96 = 4 }; + enum { gje3Pad_97 = 5 }; + enum { gje3Pad_98 = 4 }; + enum { gje3Pad_99 = 2 }; + enum { gje3Pad_100 = 0 }; + enum { gje3Pad_101 = 0 }; + enum { gje3Pad_102 = 0 }; + enum { gje3Pad_103 = 2 }; + enum { gje3Pad_104 = 1 }; + enum { gje3Pad_105 = 4 }; + enum { gje3Pad_106 = 2 }; + enum { gje3Pad_107 = 2 }; + enum { gje3Pad_108 = 0 }; + enum { gje3Pad_109 = 1 }; + + enum { gje3SrchThrd_00 = -1 }; + enum { gje3SrchThrd_01 = -1 }; + enum { gje3SrchThrd_02 = 1 }; + enum { gje3SrchThrd_03 = 2 }; + enum { gje3SrchThrd_04 = 2 }; + enum { gje3SrchThrd_05 = 2 }; + enum { gje3SrchThrd_06 = 2 }; + enum { gje3SrchThrd_07 = 2 }; + enum { gje3SrchThrd_08 = 3 }; + enum { gje3SrchThrd_09 = 3 }; + enum { gje3SrchThrd_10 = 3 }; + enum { gje3SrchThrd_11 = 3 }; + enum { gje3SrchThrd_12 = 3 }; + enum { gje3SrchThrd_13 = 3 }; + enum { gje3SrchThrd_14 = 3 }; + enum { gje3SrchThrd_15 = 3 }; + enum { gje3SrchThrd_16 = 3 }; + enum { gje3SrchThrd_17 = 3 }; + enum { gje3SrchThrd_18 = 3 }; + enum { gje3SrchThrd_19 = 3 }; + enum { gje3SrchThrd_20 = 3 }; + enum { gje3SrchThrd_21 = 3 }; + enum { gje3SrchThrd_22 = 3 }; + enum { gje3SrchThrd_23 = 3 }; + enum { gje3SrchThrd_24 = 3 }; + enum { gje3SrchThrd_25 = 3 }; + enum { gje3SrchThrd_26 = 3 }; + enum { gje3SrchThrd_27 = 3 }; + enum { gje3SrchThrd_28 = 3 }; + enum { gje3SrchThrd_29 = 3 }; + enum { gje3SrchThrd_30 = 3 }; + enum { gje3SrchThrd_31 = 3 }; + enum { gje3SrchThrd_32 = 3 }; + enum { gje3SrchThrd_33 = 3 }; + enum { gje3SrchThrd_34 = 3 }; + enum { gje3SrchThrd_35 = 3 }; + enum { gje3SrchThrd_36 = 3 }; + enum { gje3SrchThrd_37 = 3 }; + enum { gje3SrchThrd_38 = 3 }; + enum { gje3SrchThrd_39 = 3 }; + enum { gje3SrchThrd_40 = 4 }; + enum { gje3SrchThrd_41 = 4 }; + enum { gje3SrchThrd_42 = 4 }; + enum { gje3SrchThrd_43 = 4 }; + enum { gje3SrchThrd_44 = 4 }; + enum { gje3SrchThrd_45 = 4 }; + enum { gje3SrchThrd_46 = 4 }; + enum { gje3SrchThrd_47 = 4 }; + enum { gje3SrchThrd_48 = 4 }; + enum { gje3SrchThrd_49 = 4 }; + enum { gje3SrchThrd_50 = 4 }; + enum { gje3SrchThrd_51 = 4 }; + enum { gje3SrchThrd_52 = 4 }; + enum { gje3SrchThrd_53 = 4 }; + enum { gje3SrchThrd_54 = 4 }; + enum { gje3SrchThrd_55 = 4 }; + enum { gje3SrchThrd_56 = 4 }; + enum { gje3SrchThrd_57 = 4 }; + enum { gje3SrchThrd_58 = 4 }; + enum { gje3SrchThrd_59 = 4 }; + enum { gje3SrchThrd_60 = 4 }; + enum { gje3SrchThrd_61 = 4 }; + enum { gje3SrchThrd_62 = 4 }; + enum { gje3SrchThrd_63 = 4 }; + enum { gje3SrchThrd_64 = 4 }; + enum { gje3SrchThrd_65 = 4 }; + enum { gje3SrchThrd_66 = 5 }; + enum { gje3SrchThrd_67 = 5 }; + enum { gje3SrchThrd_68 = 5 }; + enum { gje3SrchThrd_69 = 5 }; + enum { gje3SrchThrd_70 = 5 }; + enum { gje3SrchThrd_71 = 5 }; + enum { gje3SrchThrd_72 = 5 }; + enum { gje3SrchThrd_73 = 5 }; + enum { gje3SrchThrd_74 = 5 }; + enum { gje3SrchThrd_75 = 5 }; + enum { gje3SrchThrd_76 = 5 }; + enum { gje3SrchThrd_77 = 5 }; + enum { gje3SrchThrd_78 = 5 }; + enum { gje3SrchThrd_79 = 5 }; + enum { gje3SrchThrd_80 = 5 }; + enum { gje3SrchThrd_81 = 5 }; + enum { gje3SrchThrd_82 = 5 }; + enum { gje3SrchThrd_83 = 5 }; + enum { gje3SrchThrd_84 = 6 }; + enum { gje3SrchThrd_85 = 6 }; + enum { gje3SrchThrd_86 = 6 }; + enum { gje3SrchThrd_87 = 6 }; + enum { gje3SrchThrd_88 = 6 }; + enum { gje3SrchThrd_89 = 6 }; + enum { gje3SrchThrd_90 = 6 }; + enum { gje3SrchThrd_91 = 6 }; + enum { gje3SrchThrd_92 = 6 }; + enum { gje3SrchThrd_93 = 6 }; + enum { gje3SrchThrd_94 = 6 }; + enum { gje3SrchThrd_95 = 6 }; + enum { gje3SrchThrd_96 = 6 }; + enum { gje3SrchThrd_97 = 6 }; + enum { gje3SrchThrd_98 = 6 }; + enum { gje3SrchThrd_99 = 6 }; + enum { gje3SrchThrd_100 = 6 }; + enum { gje3SrchThrd_101 = 6 }; + enum { gje3SrchThrd_102 = 6 }; + enum { gje3SrchThrd_103 = 6 }; + enum { gje3SrchThrd_104 = 6 }; + enum { gje3SrchThrd_105 = 6 }; + enum { gje3SrchThrd_106 = 6 }; + enum { gje3SrchThrd_107 = 6 }; + enum { gje3SrchThrd_108 = 6 }; + enum { gje3SrchThrd_109 = 6 }; + + enum { matInv2x2MinBatch = 1700 }; + enum { matInv3x3MinBatch = 1400 }; + enum { matInv4x4MinBatch = 1400 }; + enum { matInv5x5MinBatch = 1300 }; + enum { matInv6x6MinBatch = 1400 }; + enum { matInv7x7MinBatch = 1200 }; + enum { matInv8x8MinBatch = 1200 }; + enum { matInv9x9MinBatch = 1200 }; + enum { matInv10x10MinBatch= 1300 }; + enum { matInvMinDim = 2 }; + enum { matInvMaxDim = 10 }; +}; + +template<> class config { +public: + typedef double absValType; + + enum { gje3MinDim = 2 }; + enum { gje3MaxDim = 77 }; + enum { gje3MinBlks = 1 }; + enum { gje3MaxThrds = 1408 }; /* sm_2x, 23 registers per thread */ + + enum { gje3DimX_00 = -1 }; + enum { gje3DimX_01 = -1 }; + enum { gje3DimX_02 = 2 }; + enum { gje3DimX_03 = 3 }; + enum { gje3DimX_04 = 4 }; + enum { gje3DimX_05 = 5 }; + enum { gje3DimX_06 = 5 }; + enum { gje3DimX_07 = 7 }; + enum { gje3DimX_08 = 4 }; + enum { gje3DimX_09 = 3 }; + enum { gje3DimX_10 = 6 }; + enum { gje3DimX_11 = 5 }; + enum { gje3DimX_12 = 4 }; + enum { gje3DimX_13 = 4 }; + enum { gje3DimX_14 = 4 }; + enum { gje3DimX_15 = 4 }; + enum { gje3DimX_16 = 4 }; + enum { gje3DimX_17 = 3 }; + enum { gje3DimX_18 = 3 }; + enum { gje3DimX_19 = 3 }; + enum { gje3DimX_20 = 4 }; + enum { gje3DimX_21 = 3 }; + enum { gje3DimX_22 = 4 }; + enum { gje3DimX_23 = 4 }; + enum { gje3DimX_24 = 4 }; + enum { gje3DimX_25 = 5 }; + enum { gje3DimX_26 = 2 }; + enum { gje3DimX_27 = 3 }; + enum { gje3DimX_28 = 4 }; + enum { gje3DimX_29 = 3 }; + enum { gje3DimX_30 = 3 }; + enum { gje3DimX_31 = 3 }; + enum { gje3DimX_32 = 3 }; + enum { gje3DimX_33 = 3 }; + enum { gje3DimX_34 = 4 }; + enum { gje3DimX_35 = 3 }; + enum { gje3DimX_36 = 4 }; + enum { gje3DimX_37 = 5 }; + enum { gje3DimX_38 = 4 }; + enum { gje3DimX_39 = 4 }; + enum { gje3DimX_40 = 4 }; + enum { gje3DimX_41 = 6 }; + enum { gje3DimX_42 = 6 }; + enum { gje3DimX_43 = 5 }; + enum { gje3DimX_44 = 4 }; + enum { gje3DimX_45 = 7 }; + enum { gje3DimX_46 = 6 }; + enum { gje3DimX_47 = 8 }; + enum { gje3DimX_48 = 8 }; + enum { gje3DimX_49 = 8 }; + enum { gje3DimX_50 = 4 }; + enum { gje3DimX_51 = 5 }; + enum { gje3DimX_52 = 4 }; + enum { gje3DimX_53 = 5 }; + enum { gje3DimX_54 = 6 }; + enum { gje3DimX_55 = 7 }; + enum { gje3DimX_56 = 9 }; + enum { gje3DimX_57 = 9 }; + enum { gje3DimX_58 = 10 }; + enum { gje3DimX_59 = 7 }; + enum { gje3DimX_60 = 8 }; + enum { gje3DimX_61 = 7 }; + enum { gje3DimX_62 = 7 }; + enum { gje3DimX_63 = 7 }; + enum { gje3DimX_64 = 8 }; + enum { gje3DimX_65 = 8 }; + enum { gje3DimX_66 = 8 }; + enum { gje3DimX_67 = 8 }; + enum { gje3DimX_68 = 8 }; + enum { gje3DimX_69 = 5 }; + enum { gje3DimX_70 = 6 }; + enum { gje3DimX_71 = 7 }; + enum { gje3DimX_72 = 9 }; + enum { gje3DimX_73 = 9 }; + enum { gje3DimX_74 = 6 }; + enum { gje3DimX_75 = 7 }; + enum { gje3DimX_76 = 7 }; + enum { gje3DimX_77 = 7 }; + enum { gje3DimX_78 = -1 }; + enum { gje3DimX_79 = -1 }; + enum { gje3DimX_80 = -1 }; + enum { gje3DimX_81 = -1 }; + enum { gje3DimX_82 = -1 }; + enum { gje3DimX_83 = -1 }; + enum { gje3DimX_84 = -1 }; + enum { gje3DimX_85 = -1 }; + enum { gje3DimX_86 = -1 }; + enum { gje3DimX_87 = -1 }; + enum { gje3DimX_88 = -1 }; + enum { gje3DimX_89 = -1 }; + enum { gje3DimX_90 = -1 }; + enum { gje3DimX_91 = -1 }; + enum { gje3DimX_92 = -1 }; + enum { gje3DimX_93 = -1 }; + enum { gje3DimX_94 = -1 }; + enum { gje3DimX_95 = -1 }; + enum { gje3DimX_96 = -1 }; + enum { gje3DimX_97 = -1 }; + enum { gje3DimX_98 = -1 }; + enum { gje3DimX_99 = -1 }; + enum { gje3DimX_100 = -1 }; + enum { gje3DimX_101 = -1 }; + enum { gje3DimX_102 = -1 }; + enum { gje3DimX_103 = -1 }; + enum { gje3DimX_104 = -1 }; + enum { gje3DimX_105 = -1 }; + enum { gje3DimX_106 = -1 }; + enum { gje3DimX_107 = -1 }; + enum { gje3DimX_108 = -1 }; + enum { gje3DimX_109 = -1 }; + + enum { gje3Pad_00 = 0 }; + enum { gje3Pad_01 = 0 }; + enum { gje3Pad_02 = 0 }; + enum { gje3Pad_03 = 0 }; + enum { gje3Pad_04 = 0 }; + enum { gje3Pad_05 = 0 }; + enum { gje3Pad_06 = 0 }; + enum { gje3Pad_07 = 0 }; + enum { gje3Pad_08 = 4 }; + enum { gje3Pad_09 = 4 }; + enum { gje3Pad_10 = 0 }; + enum { gje3Pad_11 = 0 }; + enum { gje3Pad_12 = 0 }; + enum { gje3Pad_13 = 0 }; + enum { gje3Pad_14 = 0 }; + enum { gje3Pad_15 = 4 }; + enum { gje3Pad_16 = 4 }; + enum { gje3Pad_17 = 2 }; + enum { gje3Pad_18 = 1 }; + enum { gje3Pad_19 = 0 }; + enum { gje3Pad_20 = 0 }; + enum { gje3Pad_21 = 0 }; + enum { gje3Pad_22 = 0 }; + enum { gje3Pad_23 = 0 }; + enum { gje3Pad_24 = 4 }; + enum { gje3Pad_25 = 0 }; + enum { gje3Pad_26 = 0 }; + enum { gje3Pad_27 = 0 }; + enum { gje3Pad_28 = 0 }; + enum { gje3Pad_29 = 1 }; + enum { gje3Pad_30 = 0 }; + enum { gje3Pad_31 = 4 }; + enum { gje3Pad_32 = 3 }; + enum { gje3Pad_33 = 2 }; + enum { gje3Pad_34 = 2 }; + enum { gje3Pad_35 = 0 }; + enum { gje3Pad_36 = 0 }; + enum { gje3Pad_37 = 0 }; + enum { gje3Pad_38 = 0 }; + enum { gje3Pad_39 = 0 }; + enum { gje3Pad_40 = 4 }; + enum { gje3Pad_41 = 2 }; + enum { gje3Pad_42 = 0 }; + enum { gje3Pad_43 = 0 }; + enum { gje3Pad_44 = 0 }; + enum { gje3Pad_45 = 0 }; + enum { gje3Pad_46 = 0 }; + enum { gje3Pad_47 = 0 }; + enum { gje3Pad_48 = 1 }; + enum { gje3Pad_49 = 0 }; + enum { gje3Pad_50 = 2 }; + enum { gje3Pad_51 = 2 }; + enum { gje3Pad_52 = 0 }; + enum { gje3Pad_53 = 0 }; + enum { gje3Pad_54 = 0 }; + enum { gje3Pad_55 = 0 }; + enum { gje3Pad_56 = 1 }; + enum { gje3Pad_57 = 0 }; + enum { gje3Pad_58 = 0 }; + enum { gje3Pad_59 = 0 }; + enum { gje3Pad_60 = 0 }; + enum { gje3Pad_61 = 0 }; + enum { gje3Pad_62 = 0 }; + enum { gje3Pad_63 = 0 }; + enum { gje3Pad_64 = 2 }; + enum { gje3Pad_65 = 0 }; + enum { gje3Pad_66 = 0 }; + enum { gje3Pad_67 = 0 }; + enum { gje3Pad_68 = 4 }; + enum { gje3Pad_69 = 0 }; + enum { gje3Pad_70 = 0 }; + enum { gje3Pad_71 = 0 }; + enum { gje3Pad_72 = 1 }; + enum { gje3Pad_73 = 0 }; + enum { gje3Pad_74 = 0 }; + enum { gje3Pad_75 = 0 }; + enum { gje3Pad_76 = 0 }; + enum { gje3Pad_77 = 0 }; + enum { gje3Pad_78 = 0 }; + enum { gje3Pad_79 = 0 }; + enum { gje3Pad_80 = 0 }; + enum { gje3Pad_81 = 0 }; + enum { gje3Pad_82 = 0 }; + enum { gje3Pad_83 = 0 }; + enum { gje3Pad_84 = 0 }; + enum { gje3Pad_85 = 0 }; + enum { gje3Pad_86 = 0 }; + enum { gje3Pad_87 = 0 }; + enum { gje3Pad_88 = 0 }; + enum { gje3Pad_89 = 0 }; + enum { gje3Pad_90 = 0 }; + enum { gje3Pad_91 = 0 }; + enum { gje3Pad_92 = 0 }; + enum { gje3Pad_93 = 0 }; + enum { gje3Pad_94 = 0 }; + enum { gje3Pad_95 = 0 }; + enum { gje3Pad_96 = 0 }; + enum { gje3Pad_97 = 0 }; + enum { gje3Pad_98 = 0 }; + enum { gje3Pad_99 = 0 }; + enum { gje3Pad_100 = 0 }; + enum { gje3Pad_101 = 0 }; + enum { gje3Pad_102 = 0 }; + enum { gje3Pad_103 = 0 }; + enum { gje3Pad_104 = 0 }; + enum { gje3Pad_105 = 0 }; + enum { gje3Pad_106 = 0 }; + enum { gje3Pad_107 = 0 }; + enum { gje3Pad_108 = 0 }; + enum { gje3Pad_109 = 0 }; + + enum { gje3SrchThrd_00 = -1 }; + enum { gje3SrchThrd_01 = -1 }; + enum { gje3SrchThrd_02 = 1 }; + enum { gje3SrchThrd_03 = 2 }; + enum { gje3SrchThrd_04 = 2 }; + enum { gje3SrchThrd_05 = 2 }; + enum { gje3SrchThrd_06 = 2 }; + enum { gje3SrchThrd_07 = 2 }; + enum { gje3SrchThrd_08 = 2 }; + enum { gje3SrchThrd_09 = 2 }; + enum { gje3SrchThrd_10 = 2 }; + enum { gje3SrchThrd_11 = 2 }; + enum { gje3SrchThrd_12 = 3 }; + enum { gje3SrchThrd_13 = 3 }; + enum { gje3SrchThrd_14 = 3 }; + enum { gje3SrchThrd_15 = 3 }; + enum { gje3SrchThrd_16 = 3 }; + enum { gje3SrchThrd_17 = 3 }; + enum { gje3SrchThrd_18 = 3 }; + enum { gje3SrchThrd_19 = 3 }; + enum { gje3SrchThrd_20 = 3 }; + enum { gje3SrchThrd_21 = 3 }; + enum { gje3SrchThrd_22 = 3 }; + enum { gje3SrchThrd_23 = 3 }; + enum { gje3SrchThrd_24 = 3 }; + enum { gje3SrchThrd_25 = 3 }; + enum { gje3SrchThrd_26 = 3 }; + enum { gje3SrchThrd_27 = 3 }; + enum { gje3SrchThrd_28 = 3 }; + enum { gje3SrchThrd_29 = 4 }; + enum { gje3SrchThrd_30 = 4 }; + enum { gje3SrchThrd_31 = 4 }; + enum { gje3SrchThrd_32 = 4 }; + enum { gje3SrchThrd_33 = 4 }; + enum { gje3SrchThrd_34 = 4 }; + enum { gje3SrchThrd_35 = 4 }; + enum { gje3SrchThrd_36 = 4 }; + enum { gje3SrchThrd_37 = 4 }; + enum { gje3SrchThrd_38 = 4 }; + enum { gje3SrchThrd_39 = 4 }; + enum { gje3SrchThrd_40 = 4 }; + enum { gje3SrchThrd_41 = 4 }; + enum { gje3SrchThrd_42 = 4 }; + enum { gje3SrchThrd_43 = 4 }; + enum { gje3SrchThrd_44 = 4 }; + enum { gje3SrchThrd_45 = 4 }; + enum { gje3SrchThrd_46 = 4 }; + enum { gje3SrchThrd_47 = 4 }; + enum { gje3SrchThrd_48 = 4 }; + enum { gje3SrchThrd_49 = 4 }; + enum { gje3SrchThrd_50 = 4 }; + enum { gje3SrchThrd_51 = 4 }; + enum { gje3SrchThrd_52 = 4 }; + enum { gje3SrchThrd_53 = 4 }; + enum { gje3SrchThrd_54 = 5 }; + enum { gje3SrchThrd_55 = 6 }; + enum { gje3SrchThrd_56 = 6 }; + enum { gje3SrchThrd_57 = 6 }; + enum { gje3SrchThrd_58 = 6 }; + enum { gje3SrchThrd_59 = 6 }; + enum { gje3SrchThrd_60 = 6 }; + enum { gje3SrchThrd_61 = 6 }; + enum { gje3SrchThrd_62 = 6 }; + enum { gje3SrchThrd_63 = 6 }; + enum { gje3SrchThrd_64 = 6 }; + enum { gje3SrchThrd_65 = 6 }; + enum { gje3SrchThrd_66 = 6 }; + enum { gje3SrchThrd_67 = 6 }; + enum { gje3SrchThrd_68 = 6 }; + enum { gje3SrchThrd_69 = 6 }; + enum { gje3SrchThrd_70 = 6 }; + enum { gje3SrchThrd_71 = 6 }; + enum { gje3SrchThrd_72 = 6 }; + enum { gje3SrchThrd_73 = 6 }; + enum { gje3SrchThrd_74 = 6 }; + enum { gje3SrchThrd_75 = 6 }; + enum { gje3SrchThrd_76 = 6 }; + enum { gje3SrchThrd_77 = 6 }; + enum { gje3SrchThrd_78 = -1 }; + enum { gje3SrchThrd_79 = -1 }; + enum { gje3SrchThrd_80 = -1 }; + enum { gje3SrchThrd_81 = -1 }; + enum { gje3SrchThrd_82 = -1 }; + enum { gje3SrchThrd_83 = -1 }; + enum { gje3SrchThrd_84 = -1 }; + enum { gje3SrchThrd_85 = -1 }; + enum { gje3SrchThrd_86 = -1 }; + enum { gje3SrchThrd_87 = -1 }; + enum { gje3SrchThrd_88 = -1 }; + enum { gje3SrchThrd_89 = -1 }; + enum { gje3SrchThrd_90 = -1 }; + enum { gje3SrchThrd_91 = -1 }; + enum { gje3SrchThrd_92 = -1 }; + enum { gje3SrchThrd_93 = -1 }; + enum { gje3SrchThrd_94 = -1 }; + enum { gje3SrchThrd_95 = -1 }; + enum { gje3SrchThrd_96 = -1 }; + enum { gje3SrchThrd_97 = -1 }; + enum { gje3SrchThrd_98 = -1 }; + enum { gje3SrchThrd_99 = -1 }; + enum { gje3SrchThrd_100 = -1 }; + enum { gje3SrchThrd_101 = -1 }; + enum { gje3SrchThrd_102 = -1 }; + enum { gje3SrchThrd_103 = -1 }; + enum { gje3SrchThrd_104 = -1 }; + enum { gje3SrchThrd_105 = -1 }; + enum { gje3SrchThrd_106 = -1 }; + enum { gje3SrchThrd_107 = -1 }; + enum { gje3SrchThrd_108 = -1 }; + enum { gje3SrchThrd_109 = -1 }; + + enum { matInv2x2MinBatch = 1800 }; + enum { matInv3x3MinBatch = 1400 }; + enum { matInv4x4MinBatch = 1300 }; + enum { matInv5x5MinBatch = 1200 }; + enum { matInv6x6MinBatch = 1200 }; + enum { matInv7x7MinBatch = 1200 }; + enum { matInv8x8MinBatch = 0x7fffffff }; + enum { matInv9x9MinBatch = 0x7fffffff }; + enum { matInv10x10MinBatch= 0x7fffffff }; + enum { matInvMinDim = 2 }; + enum { matInvMaxDim = 7 }; +}; + +template<> class config { +public: + typedef float absValType; + + enum { gje3MinDim = 2 }; + enum { gje3MaxDim = 77 }; + enum { gje3MinBlks = 1 }; + enum { gje3MaxThrds = 1408 }; /* sm_2x, 23 registers per thread */ + + enum { gje3DimX_00 = -1 }; + enum { gje3DimX_01 = -1 }; + enum { gje3DimX_02 = 2 }; + enum { gje3DimX_03 = 3 }; + enum { gje3DimX_04 = 4 }; + enum { gje3DimX_05 = 5 }; + enum { gje3DimX_06 = 5 }; + enum { gje3DimX_07 = 4 }; + enum { gje3DimX_08 = 4 }; + enum { gje3DimX_09 = 3 }; + enum { gje3DimX_10 = 6 }; + enum { gje3DimX_11 = 5 }; + enum { gje3DimX_12 = 4 }; + enum { gje3DimX_13 = 5 }; + enum { gje3DimX_14 = 4 }; + enum { gje3DimX_15 = 4 }; + enum { gje3DimX_16 = 4 }; + enum { gje3DimX_17 = 3 }; + enum { gje3DimX_18 = 3 }; + enum { gje3DimX_19 = 3 }; + enum { gje3DimX_20 = 4 }; + enum { gje3DimX_21 = 3 }; + enum { gje3DimX_22 = 4 }; + enum { gje3DimX_23 = 4 }; + enum { gje3DimX_24 = 4 }; + enum { gje3DimX_25 = 5 }; + enum { gje3DimX_26 = 2 }; + enum { gje3DimX_27 = 3 }; + enum { gje3DimX_28 = 4 }; + enum { gje3DimX_29 = 3 }; + enum { gje3DimX_30 = 3 }; + enum { gje3DimX_31 = 3 }; + enum { gje3DimX_32 = 3 }; + enum { gje3DimX_33 = 3 }; + enum { gje3DimX_34 = 4 }; + enum { gje3DimX_35 = 3 }; + enum { gje3DimX_36 = 4 }; + enum { gje3DimX_37 = 5 }; + enum { gje3DimX_38 = 4 }; + enum { gje3DimX_39 = 5 }; + enum { gje3DimX_40 = 4 }; + enum { gje3DimX_41 = 6 }; + enum { gje3DimX_42 = 6 }; + enum { gje3DimX_43 = 5 }; + enum { gje3DimX_44 = 4 }; + enum { gje3DimX_45 = 5 }; + enum { gje3DimX_46 = 6 }; + enum { gje3DimX_47 = 8 }; + enum { gje3DimX_48 = 8 }; + enum { gje3DimX_49 = 7 }; + enum { gje3DimX_50 = 4 }; + enum { gje3DimX_51 = 5 }; + enum { gje3DimX_52 = 4 }; + enum { gje3DimX_53 = 5 }; + enum { gje3DimX_54 = 6 }; + enum { gje3DimX_55 = 7 }; + enum { gje3DimX_56 = 9 }; + enum { gje3DimX_57 = 9 }; + enum { gje3DimX_58 = 10 }; + enum { gje3DimX_59 = 7 }; + enum { gje3DimX_60 = 8 }; + enum { gje3DimX_61 = 7 }; + enum { gje3DimX_62 = 7 }; + enum { gje3DimX_63 = 7 }; + enum { gje3DimX_64 = 8 }; + enum { gje3DimX_65 = 8 }; + enum { gje3DimX_66 = 8 }; + enum { gje3DimX_67 = 8 }; + enum { gje3DimX_68 = 7 }; + enum { gje3DimX_69 = 7 }; + enum { gje3DimX_70 = 6 }; + enum { gje3DimX_71 = 7 }; + enum { gje3DimX_72 = 9 }; + enum { gje3DimX_73 = 7 }; + enum { gje3DimX_74 = 6 }; + enum { gje3DimX_75 = 7 }; + enum { gje3DimX_76 = 4 }; + enum { gje3DimX_77 = 7 }; + enum { gje3DimX_78 = -1 }; + enum { gje3DimX_79 = -1 }; + enum { gje3DimX_80 = -1 }; + enum { gje3DimX_81 = -1 }; + enum { gje3DimX_82 = -1 }; + enum { gje3DimX_83 = -1 }; + enum { gje3DimX_84 = -1 }; + enum { gje3DimX_85 = -1 }; + enum { gje3DimX_86 = -1 }; + enum { gje3DimX_87 = -1 }; + enum { gje3DimX_88 = -1 }; + enum { gje3DimX_89 = -1 }; + enum { gje3DimX_90 = -1 }; + enum { gje3DimX_91 = -1 }; + enum { gje3DimX_92 = -1 }; + enum { gje3DimX_93 = -1 }; + enum { gje3DimX_94 = -1 }; + enum { gje3DimX_95 = -1 }; + enum { gje3DimX_96 = -1 }; + enum { gje3DimX_97 = -1 }; + enum { gje3DimX_98 = -1 }; + enum { gje3DimX_99 = -1 }; + enum { gje3DimX_100 = -1 }; + enum { gje3DimX_101 = -1 }; + enum { gje3DimX_102 = -1 }; + enum { gje3DimX_103 = -1 }; + enum { gje3DimX_104 = -1 }; + enum { gje3DimX_105 = -1 }; + enum { gje3DimX_106 = -1 }; + enum { gje3DimX_107 = -1 }; + enum { gje3DimX_108 = -1 }; + enum { gje3DimX_109 = -1 }; + + enum { gje3Pad_00 = 0 }; + enum { gje3Pad_01 = 0 }; + enum { gje3Pad_02 = 0 }; + enum { gje3Pad_03 = 0 }; + enum { gje3Pad_04 = 0 }; + enum { gje3Pad_05 = 0 }; + enum { gje3Pad_06 = 0 }; + enum { gje3Pad_07 = 5 }; + enum { gje3Pad_08 = 4 }; + enum { gje3Pad_09 = 0 }; + enum { gje3Pad_10 = 0 }; + enum { gje3Pad_11 = 0 }; + enum { gje3Pad_12 = 0 }; + enum { gje3Pad_13 = 0 }; + enum { gje3Pad_14 = 5 }; + enum { gje3Pad_15 = 5 }; + enum { gje3Pad_16 = 4 }; + enum { gje3Pad_17 = 2 }; + enum { gje3Pad_18 = 1 }; + enum { gje3Pad_19 = 0 }; + enum { gje3Pad_20 = 0 }; + enum { gje3Pad_21 = 0 }; + enum { gje3Pad_22 = 4 }; + enum { gje3Pad_23 = 5 }; + enum { gje3Pad_24 = 4 }; + enum { gje3Pad_25 = 0 }; + enum { gje3Pad_26 = 0 }; + enum { gje3Pad_27 = 0 }; + enum { gje3Pad_28 = 0 }; + enum { gje3Pad_29 = 1 }; + enum { gje3Pad_30 = 0 }; + enum { gje3Pad_31 = 4 }; + enum { gje3Pad_32 = 3 }; + enum { gje3Pad_33 = 2 }; + enum { gje3Pad_34 = 2 }; + enum { gje3Pad_35 = 0 }; + enum { gje3Pad_36 = 0 }; + enum { gje3Pad_37 = 0 }; + enum { gje3Pad_38 = 0 }; + enum { gje3Pad_39 = 3 }; + enum { gje3Pad_40 = 4 }; + enum { gje3Pad_41 = 2 }; + enum { gje3Pad_42 = 1 }; + enum { gje3Pad_43 = 1 }; + enum { gje3Pad_44 = 0 }; + enum { gje3Pad_45 = 0 }; + enum { gje3Pad_46 = 0 }; + enum { gje3Pad_47 = 0 }; + enum { gje3Pad_48 = 3 }; + enum { gje3Pad_49 = 5 }; + enum { gje3Pad_50 = 2 }; + enum { gje3Pad_51 = 2 }; + enum { gje3Pad_52 = 0 }; + enum { gje3Pad_53 = 0 }; + enum { gje3Pad_54 = 0 }; + enum { gje3Pad_55 = 0 }; + enum { gje3Pad_56 = 1 }; + enum { gje3Pad_57 = 0 }; + enum { gje3Pad_58 = 0 }; + enum { gje3Pad_59 = 0 }; + enum { gje3Pad_60 = 0 }; + enum { gje3Pad_61 = 0 }; + enum { gje3Pad_62 = 0 }; + enum { gje3Pad_63 = 0 }; + enum { gje3Pad_64 = 1 }; + enum { gje3Pad_65 = 0 }; + enum { gje3Pad_66 = 0 }; + enum { gje3Pad_67 = 5 }; + enum { gje3Pad_68 = 3 }; + enum { gje3Pad_69 = 2 }; + enum { gje3Pad_70 = 0 }; + enum { gje3Pad_71 = 0 }; + enum { gje3Pad_72 = 1 }; + enum { gje3Pad_73 = 2 }; + enum { gje3Pad_74 = 0 }; + enum { gje3Pad_75 = 0 }; + enum { gje3Pad_76 = 0 }; + enum { gje3Pad_77 = 0 }; + enum { gje3Pad_78 = 0 }; + enum { gje3Pad_79 = 0 }; + enum { gje3Pad_80 = 0 }; + enum { gje3Pad_81 = 0 }; + enum { gje3Pad_82 = 0 }; + enum { gje3Pad_83 = 0 }; + enum { gje3Pad_84 = 0 }; + enum { gje3Pad_85 = 0 }; + enum { gje3Pad_86 = 0 }; + enum { gje3Pad_87 = 0 }; + enum { gje3Pad_88 = 0 }; + enum { gje3Pad_89 = 0 }; + enum { gje3Pad_90 = 0 }; + enum { gje3Pad_91 = 0 }; + enum { gje3Pad_92 = 0 }; + enum { gje3Pad_93 = 0 }; + enum { gje3Pad_94 = 0 }; + enum { gje3Pad_95 = 0 }; + enum { gje3Pad_96 = 0 }; + enum { gje3Pad_97 = 0 }; + enum { gje3Pad_98 = 0 }; + enum { gje3Pad_99 = 0 }; + enum { gje3Pad_100 = 0 }; + enum { gje3Pad_101 = 0 }; + enum { gje3Pad_102 = 0 }; + enum { gje3Pad_103 = 0 }; + enum { gje3Pad_104 = 0 }; + enum { gje3Pad_105 = 0 }; + enum { gje3Pad_106 = 0 }; + enum { gje3Pad_107 = 0 }; + enum { gje3Pad_108 = 0 }; + enum { gje3Pad_109 = 0 }; + + enum { gje3SrchThrd_00 = -1 }; + enum { gje3SrchThrd_01 = -1 }; + enum { gje3SrchThrd_02 = 1 }; + enum { gje3SrchThrd_03 = 2 }; + enum { gje3SrchThrd_04 = 2 }; + enum { gje3SrchThrd_05 = 3 }; + enum { gje3SrchThrd_06 = 3 }; + enum { gje3SrchThrd_07 = 3 }; + enum { gje3SrchThrd_08 = 3 }; + enum { gje3SrchThrd_09 = 3 }; + enum { gje3SrchThrd_10 = 3 }; + enum { gje3SrchThrd_11 = 3 }; + enum { gje3SrchThrd_12 = 3 }; + enum { gje3SrchThrd_13 = 3 }; + enum { gje3SrchThrd_14 = 3 }; + enum { gje3SrchThrd_15 = 3 }; + enum { gje3SrchThrd_16 = 3 }; + enum { gje3SrchThrd_17 = 3 }; + enum { gje3SrchThrd_18 = 3 }; + enum { gje3SrchThrd_19 = 3 }; + enum { gje3SrchThrd_20 = 3 }; + enum { gje3SrchThrd_21 = 3 }; + enum { gje3SrchThrd_22 = 3 }; + enum { gje3SrchThrd_23 = 3 }; + enum { gje3SrchThrd_24 = 3 }; + enum { gje3SrchThrd_25 = 4 }; + enum { gje3SrchThrd_26 = 4 }; + enum { gje3SrchThrd_27 = 4 }; + enum { gje3SrchThrd_28 = 4 }; + enum { gje3SrchThrd_29 = 4 }; + enum { gje3SrchThrd_30 = 4 }; + enum { gje3SrchThrd_31 = 4 }; + enum { gje3SrchThrd_32 = 4 }; + enum { gje3SrchThrd_33 = 4 }; + enum { gje3SrchThrd_34 = 4 }; + enum { gje3SrchThrd_35 = 5 }; + enum { gje3SrchThrd_36 = 5 }; + enum { gje3SrchThrd_37 = 5 }; + enum { gje3SrchThrd_38 = 5 }; + enum { gje3SrchThrd_39 = 5 }; + enum { gje3SrchThrd_40 = 5 }; + enum { gje3SrchThrd_41 = 5 }; + enum { gje3SrchThrd_42 = 5 }; + enum { gje3SrchThrd_43 = 5 }; + enum { gje3SrchThrd_44 = 5 }; + enum { gje3SrchThrd_45 = 5 }; + enum { gje3SrchThrd_46 = 5 }; + enum { gje3SrchThrd_47 = 5 }; + enum { gje3SrchThrd_48 = 5 }; + enum { gje3SrchThrd_49 = 5 }; + enum { gje3SrchThrd_50 = 6 }; + enum { gje3SrchThrd_51 = 6 }; + enum { gje3SrchThrd_52 = 6 }; + enum { gje3SrchThrd_53 = 6 }; + enum { gje3SrchThrd_54 = 6 }; + enum { gje3SrchThrd_55 = 6 }; + enum { gje3SrchThrd_56 = 6 }; + enum { gje3SrchThrd_57 = 6 }; + enum { gje3SrchThrd_58 = 6 }; + enum { gje3SrchThrd_59 = 7 }; + enum { gje3SrchThrd_60 = 7 }; + enum { gje3SrchThrd_61 = 7 }; + enum { gje3SrchThrd_62 = 7 }; + enum { gje3SrchThrd_63 = 7 }; + enum { gje3SrchThrd_64 = 7 }; + enum { gje3SrchThrd_65 = 7 }; + enum { gje3SrchThrd_66 = 7 }; + enum { gje3SrchThrd_67 = 7 }; + enum { gje3SrchThrd_68 = 7 }; + enum { gje3SrchThrd_69 = 7 }; + enum { gje3SrchThrd_70 = 7 }; + enum { gje3SrchThrd_71 = 7 }; + enum { gje3SrchThrd_72 = 7 }; + enum { gje3SrchThrd_73 = 7 }; + enum { gje3SrchThrd_74 = 7 }; + enum { gje3SrchThrd_75 = 7 }; + enum { gje3SrchThrd_76 = 7 }; + enum { gje3SrchThrd_77 = 8 }; + enum { gje3SrchThrd_78 = -1 }; + enum { gje3SrchThrd_79 = -1 }; + enum { gje3SrchThrd_80 = -1 }; + enum { gje3SrchThrd_81 = -1 }; + enum { gje3SrchThrd_82 = -1 }; + enum { gje3SrchThrd_83 = -1 }; + enum { gje3SrchThrd_84 = -1 }; + enum { gje3SrchThrd_85 = -1 }; + enum { gje3SrchThrd_86 = -1 }; + enum { gje3SrchThrd_87 = -1 }; + enum { gje3SrchThrd_88 = -1 }; + enum { gje3SrchThrd_89 = -1 }; + enum { gje3SrchThrd_90 = -1 }; + enum { gje3SrchThrd_91 = -1 }; + enum { gje3SrchThrd_92 = -1 }; + enum { gje3SrchThrd_93 = -1 }; + enum { gje3SrchThrd_94 = -1 }; + enum { gje3SrchThrd_95 = -1 }; + enum { gje3SrchThrd_96 = -1 }; + enum { gje3SrchThrd_97 = -1 }; + enum { gje3SrchThrd_98 = -1 }; + enum { gje3SrchThrd_99 = -1 }; + enum { gje3SrchThrd_100 = -1 }; + enum { gje3SrchThrd_101 = -1 }; + enum { gje3SrchThrd_102 = -1 }; + enum { gje3SrchThrd_103 = -1 }; + enum { gje3SrchThrd_104 = -1 }; + enum { gje3SrchThrd_105 = -1 }; + enum { gje3SrchThrd_106 = -1 }; + enum { gje3SrchThrd_107 = -1 }; + enum { gje3SrchThrd_108 = -1 }; + enum { gje3SrchThrd_109 = -1 }; + + enum { matInv2x2MinBatch = 1700 }; + enum { matInv3x3MinBatch = 1300 }; + enum { matInv4x4MinBatch = 1200 }; + enum { matInv5x5MinBatch = 1200 }; + enum { matInv6x6MinBatch = 1000 }; + enum { matInv7x7MinBatch = 1100 }; + enum { matInv8x8MinBatch = 1650 }; + enum { matInv9x9MinBatch = 0x7fffffff }; + enum { matInv10x10MinBatch= 0x7fffffff }; + enum { matInvMinDim = 2 }; + enum { matInvMaxDim = 8 }; +}; + +template<> class config { +public: + typedef double absValType; + + enum { gje3MinDim = 2 }; + enum { gje3MaxDim = 55 }; + enum { gje3MinBlks = 1 }; + enum { gje3MaxThrds = 1152 }; /* sm_2x, 28 registers per thread */ + + enum { gje3DimX_00 = -1 }; + enum { gje3DimX_01 = -1 }; + enum { gje3DimX_02 = 2 }; + enum { gje3DimX_03 = 3 }; + enum { gje3DimX_04 = 4 }; + enum { gje3DimX_05 = 5 }; + enum { gje3DimX_06 = 5 }; + enum { gje3DimX_07 = 4 }; + enum { gje3DimX_08 = 8 }; + enum { gje3DimX_09 = 3 }; + enum { gje3DimX_10 = 6 }; + enum { gje3DimX_11 = 6 }; + enum { gje3DimX_12 = 4 }; + enum { gje3DimX_13 = 5 }; + enum { gje3DimX_14 = 4 }; + enum { gje3DimX_15 = 2 }; + enum { gje3DimX_16 = 4 }; + enum { gje3DimX_17 = 3 }; + enum { gje3DimX_18 = 4 }; + enum { gje3DimX_19 = 3 }; + enum { gje3DimX_20 = 4 }; + enum { gje3DimX_21 = 3 }; + enum { gje3DimX_22 = 4 }; + enum { gje3DimX_23 = 4 }; + enum { gje3DimX_24 = 8 }; + enum { gje3DimX_25 = 5 }; + enum { gje3DimX_26 = 4 }; + enum { gje3DimX_27 = 3 }; + enum { gje3DimX_28 = 8 }; + enum { gje3DimX_29 = 5 }; + enum { gje3DimX_30 = 6 }; + enum { gje3DimX_31 = 7 }; + enum { gje3DimX_32 = 8 }; + enum { gje3DimX_33 = 8 }; + enum { gje3DimX_34 = 8 }; + enum { gje3DimX_35 = 8 }; + enum { gje3DimX_36 = 8 }; + enum { gje3DimX_37 = 5 }; + enum { gje3DimX_38 = 6 }; + enum { gje3DimX_39 = 8 }; + enum { gje3DimX_40 = 8 }; + enum { gje3DimX_41 = 8 }; + enum { gje3DimX_42 = 8 }; + enum { gje3DimX_43 = 8 }; + enum { gje3DimX_44 = 8 }; + enum { gje3DimX_45 = 8 }; + enum { gje3DimX_46 = 8 }; + enum { gje3DimX_47 = 8 }; + enum { gje3DimX_48 = 8 }; + enum { gje3DimX_49 = 8 }; + enum { gje3DimX_50 = 8 }; + enum { gje3DimX_51 = 8 }; + enum { gje3DimX_52 = 8 }; + enum { gje3DimX_53 = 8 }; + enum { gje3DimX_54 = 6 }; + enum { gje3DimX_55 = 8 }; + enum { gje3DimX_56 = -1 }; + enum { gje3DimX_57 = -1 }; + enum { gje3DimX_58 = -1 }; + enum { gje3DimX_59 = -1 }; + enum { gje3DimX_60 = -1 }; + enum { gje3DimX_61 = -1 }; + enum { gje3DimX_62 = -1 }; + enum { gje3DimX_63 = -1 }; + enum { gje3DimX_64 = -1 }; + enum { gje3DimX_65 = -1 }; + enum { gje3DimX_66 = -1 }; + enum { gje3DimX_67 = -1 }; + enum { gje3DimX_68 = -1 }; + enum { gje3DimX_69 = -1 }; + enum { gje3DimX_70 = -1 }; + enum { gje3DimX_71 = -1 }; + enum { gje3DimX_72 = -1 }; + enum { gje3DimX_73 = -1 }; + enum { gje3DimX_74 = -1 }; + enum { gje3DimX_75 = -1 }; + enum { gje3DimX_76 = -1 }; + enum { gje3DimX_77 = -1 }; + enum { gje3DimX_78 = -1 }; + enum { gje3DimX_79 = -1 }; + enum { gje3DimX_80 = -1 }; + enum { gje3DimX_81 = -1 }; + enum { gje3DimX_82 = -1 }; + enum { gje3DimX_83 = -1 }; + enum { gje3DimX_84 = -1 }; + enum { gje3DimX_85 = -1 }; + enum { gje3DimX_86 = -1 }; + enum { gje3DimX_87 = -1 }; + enum { gje3DimX_88 = -1 }; + enum { gje3DimX_89 = -1 }; + enum { gje3DimX_90 = -1 }; + enum { gje3DimX_91 = -1 }; + enum { gje3DimX_92 = -1 }; + enum { gje3DimX_93 = -1 }; + enum { gje3DimX_94 = -1 }; + enum { gje3DimX_95 = -1 }; + enum { gje3DimX_96 = -1 }; + enum { gje3DimX_97 = -1 }; + enum { gje3DimX_98 = -1 }; + enum { gje3DimX_99 = -1 }; + enum { gje3DimX_100 = -1 }; + enum { gje3DimX_101 = -1 }; + enum { gje3DimX_102 = -1 }; + enum { gje3DimX_103 = -1 }; + enum { gje3DimX_104 = -1 }; + enum { gje3DimX_105 = -1 }; + enum { gje3DimX_106 = -1 }; + enum { gje3DimX_107 = -1 }; + enum { gje3DimX_108 = -1 }; + enum { gje3DimX_109 = -1 }; + + enum { gje3Pad_00 = 0 }; + enum { gje3Pad_01 = 0 }; + enum { gje3Pad_02 = 0 }; + enum { gje3Pad_03 = 0 }; + enum { gje3Pad_04 = 0 }; + enum { gje3Pad_05 = 0 }; + enum { gje3Pad_06 = 0 }; + enum { gje3Pad_07 = 4 }; + enum { gje3Pad_08 = 2 }; + enum { gje3Pad_09 = 2 }; + enum { gje3Pad_10 = 4 }; + enum { gje3Pad_11 = 3 }; + enum { gje3Pad_12 = 2 }; + enum { gje3Pad_13 = 0 }; + enum { gje3Pad_14 = 0 }; + enum { gje3Pad_15 = 0 }; + enum { gje3Pad_16 = 2 }; + enum { gje3Pad_17 = 2 }; + enum { gje3Pad_18 = 0 }; + enum { gje3Pad_19 = 0 }; + enum { gje3Pad_20 = 0 }; + enum { gje3Pad_21 = 0 }; + enum { gje3Pad_22 = 0 }; + enum { gje3Pad_23 = 0 }; + enum { gje3Pad_24 = 1 }; + enum { gje3Pad_25 = 4 }; + enum { gje3Pad_26 = 0 }; + enum { gje3Pad_27 = 0 }; + enum { gje3Pad_28 = 0 }; + enum { gje3Pad_29 = 0 }; + enum { gje3Pad_30 = 0 }; + enum { gje3Pad_31 = 0 }; + enum { gje3Pad_32 = 1 }; + enum { gje3Pad_33 = 0 }; + enum { gje3Pad_34 = 0 }; + enum { gje3Pad_35 = 0 }; + enum { gje3Pad_36 = 0 }; + enum { gje3Pad_37 = 0 }; + enum { gje3Pad_38 = 0 }; + enum { gje3Pad_39 = 0 }; + enum { gje3Pad_40 = 1 }; + enum { gje3Pad_41 = 0 }; + enum { gje3Pad_42 = 0 }; + enum { gje3Pad_43 = 0 }; + enum { gje3Pad_44 = 0 }; + enum { gje3Pad_45 = 0 }; + enum { gje3Pad_46 = 0 }; + enum { gje3Pad_47 = 0 }; + enum { gje3Pad_48 = 1 }; + enum { gje3Pad_49 = 0 }; + enum { gje3Pad_50 = 0 }; + enum { gje3Pad_51 = 0 }; + enum { gje3Pad_52 = 0 }; + enum { gje3Pad_53 = 0 }; + enum { gje3Pad_54 = 0 }; + enum { gje3Pad_55 = 0 }; + enum { gje3Pad_56 = 0 }; + enum { gje3Pad_57 = 0 }; + enum { gje3Pad_58 = 0 }; + enum { gje3Pad_59 = 0 }; + enum { gje3Pad_60 = 0 }; + enum { gje3Pad_61 = 0 }; + enum { gje3Pad_62 = 0 }; + enum { gje3Pad_63 = 0 }; + enum { gje3Pad_64 = 0 }; + enum { gje3Pad_65 = 0 }; + enum { gje3Pad_66 = 0 }; + enum { gje3Pad_67 = 0 }; + enum { gje3Pad_68 = 0 }; + enum { gje3Pad_69 = 0 }; + enum { gje3Pad_70 = 0 }; + enum { gje3Pad_71 = 0 }; + enum { gje3Pad_72 = 0 }; + enum { gje3Pad_73 = 0 }; + enum { gje3Pad_74 = 0 }; + enum { gje3Pad_75 = 0 }; + enum { gje3Pad_76 = 0 }; + enum { gje3Pad_77 = 0 }; + enum { gje3Pad_78 = 0 }; + enum { gje3Pad_79 = 0 }; + enum { gje3Pad_80 = 0 }; + enum { gje3Pad_81 = 0 }; + enum { gje3Pad_82 = 0 }; + enum { gje3Pad_83 = 0 }; + enum { gje3Pad_84 = 0 }; + enum { gje3Pad_85 = 0 }; + enum { gje3Pad_86 = 0 }; + enum { gje3Pad_87 = 0 }; + enum { gje3Pad_88 = 0 }; + enum { gje3Pad_89 = 0 }; + enum { gje3Pad_90 = 0 }; + enum { gje3Pad_91 = 0 }; + enum { gje3Pad_92 = 0 }; + enum { gje3Pad_93 = 0 }; + enum { gje3Pad_94 = 0 }; + enum { gje3Pad_95 = 0 }; + enum { gje3Pad_96 = 0 }; + enum { gje3Pad_97 = 0 }; + enum { gje3Pad_98 = 0 }; + enum { gje3Pad_99 = 0 }; + enum { gje3Pad_100 = 0 }; + enum { gje3Pad_101 = 0 }; + enum { gje3Pad_102 = 0 }; + enum { gje3Pad_103 = 0 }; + enum { gje3Pad_104 = 0 }; + enum { gje3Pad_105 = 0 }; + enum { gje3Pad_106 = 0 }; + enum { gje3Pad_107 = 0 }; + enum { gje3Pad_108 = 0 }; + enum { gje3Pad_109 = 0 }; + + enum { gje3SrchThrd_00 = -1 }; + enum { gje3SrchThrd_01 = -1 }; + enum { gje3SrchThrd_02 = 1 }; + enum { gje3SrchThrd_03 = 2 }; + enum { gje3SrchThrd_04 = 2 }; + enum { gje3SrchThrd_05 = 2 }; + enum { gje3SrchThrd_06 = 2 }; + enum { gje3SrchThrd_07 = 2 }; + enum { gje3SrchThrd_08 = 3 }; + enum { gje3SrchThrd_09 = 3 }; + enum { gje3SrchThrd_10 = 3 }; + enum { gje3SrchThrd_11 = 3 }; + enum { gje3SrchThrd_12 = 3 }; + enum { gje3SrchThrd_13 = 3 }; + enum { gje3SrchThrd_14 = 3 }; + enum { gje3SrchThrd_15 = 3 }; + enum { gje3SrchThrd_16 = 3 }; + enum { gje3SrchThrd_17 = 3 }; + enum { gje3SrchThrd_18 = 3 }; + enum { gje3SrchThrd_19 = 3 }; + enum { gje3SrchThrd_20 = 3 }; + enum { gje3SrchThrd_21 = 4 }; + enum { gje3SrchThrd_22 = 4 }; + enum { gje3SrchThrd_23 = 4 }; + enum { gje3SrchThrd_24 = 4 }; + enum { gje3SrchThrd_25 = 4 }; + enum { gje3SrchThrd_26 = 4 }; + enum { gje3SrchThrd_27 = 4 }; + enum { gje3SrchThrd_28 = 4 }; + enum { gje3SrchThrd_29 = 4 }; + enum { gje3SrchThrd_30 = 4 }; + enum { gje3SrchThrd_31 = 4 }; + enum { gje3SrchThrd_32 = 4 }; + enum { gje3SrchThrd_33 = 4 }; + enum { gje3SrchThrd_34 = 4 }; + enum { gje3SrchThrd_35 = 4 }; + enum { gje3SrchThrd_36 = 4 }; + enum { gje3SrchThrd_37 = 6 }; + enum { gje3SrchThrd_38 = 6 }; + enum { gje3SrchThrd_39 = 6 }; + enum { gje3SrchThrd_40 = 6 }; + enum { gje3SrchThrd_41 = 6 }; + enum { gje3SrchThrd_42 = 6 }; + enum { gje3SrchThrd_43 = 6 }; + enum { gje3SrchThrd_44 = 6 }; + enum { gje3SrchThrd_45 = 6 }; + enum { gje3SrchThrd_46 = 7 }; + enum { gje3SrchThrd_47 = 7 }; + enum { gje3SrchThrd_48 = 7 }; + enum { gje3SrchThrd_49 = 7 }; + enum { gje3SrchThrd_50 = 7 }; + enum { gje3SrchThrd_51 = 7 }; + enum { gje3SrchThrd_52 = 7 }; + enum { gje3SrchThrd_53 = 7 }; + enum { gje3SrchThrd_54 = 7 }; + enum { gje3SrchThrd_55 = 7 }; + enum { gje3SrchThrd_56 = -1 }; + enum { gje3SrchThrd_57 = -1 }; + enum { gje3SrchThrd_58 = -1 }; + enum { gje3SrchThrd_59 = -1 }; + enum { gje3SrchThrd_60 = -1 }; + enum { gje3SrchThrd_61 = -1 }; + enum { gje3SrchThrd_62 = -1 }; + enum { gje3SrchThrd_63 = -1 }; + enum { gje3SrchThrd_64 = -1 }; + enum { gje3SrchThrd_65 = -1 }; + enum { gje3SrchThrd_66 = -1 }; + enum { gje3SrchThrd_67 = -1 }; + enum { gje3SrchThrd_68 = -1 }; + enum { gje3SrchThrd_69 = -1 }; + enum { gje3SrchThrd_70 = -1 }; + enum { gje3SrchThrd_71 = -1 }; + enum { gje3SrchThrd_72 = -1 }; + enum { gje3SrchThrd_73 = -1 }; + enum { gje3SrchThrd_74 = -1 }; + enum { gje3SrchThrd_75 = -1 }; + enum { gje3SrchThrd_76 = -1 }; + enum { gje3SrchThrd_77 = -1 }; + enum { gje3SrchThrd_78 = -1 }; + enum { gje3SrchThrd_79 = -1 }; + enum { gje3SrchThrd_80 = -1 }; + enum { gje3SrchThrd_81 = -1 }; + enum { gje3SrchThrd_82 = -1 }; + enum { gje3SrchThrd_83 = -1 }; + enum { gje3SrchThrd_84 = -1 }; + enum { gje3SrchThrd_85 = -1 }; + enum { gje3SrchThrd_86 = -1 }; + enum { gje3SrchThrd_87 = -1 }; + enum { gje3SrchThrd_88 = -1 }; + enum { gje3SrchThrd_89 = -1 }; + enum { gje3SrchThrd_90 = -1 }; + enum { gje3SrchThrd_91 = -1 }; + enum { gje3SrchThrd_92 = -1 }; + enum { gje3SrchThrd_93 = -1 }; + enum { gje3SrchThrd_94 = -1 }; + enum { gje3SrchThrd_95 = -1 }; + enum { gje3SrchThrd_96 = -1 }; + enum { gje3SrchThrd_97 = -1 }; + enum { gje3SrchThrd_98 = -1 }; + enum { gje3SrchThrd_99 = -1 }; + enum { gje3SrchThrd_100 = -1 }; + enum { gje3SrchThrd_101 = -1 }; + enum { gje3SrchThrd_102 = -1 }; + enum { gje3SrchThrd_103 = -1 }; + enum { gje3SrchThrd_104 = -1 }; + enum { gje3SrchThrd_105 = -1 }; + enum { gje3SrchThrd_106 = -1 }; + enum { gje3SrchThrd_107 = -1 }; + enum { gje3SrchThrd_108 = -1 }; + enum { gje3SrchThrd_109 = -1 }; + + enum { matInv2x2MinBatch = 1600 }; + enum { matInv3x3MinBatch = 1300 }; + enum { matInv4x4MinBatch = 1100 }; + enum { matInv5x5MinBatch = 1600 }; + enum { matInv6x6MinBatch = 0x7fffffff }; + enum { matInv7x7MinBatch = 0x7fffffff }; + enum { matInv8x8MinBatch = 0x7fffffff }; + enum { matInv9x9MinBatch = 0x7fffffff }; + enum { matInv10x10MinBatch= 0x7fffffff }; + enum { matInvMinDim = 2 }; + enum { matInvMaxDim = 5 }; +}; + +template<> class config { +public: + typedef float absValType; + + enum { gje3MinDim = 2 }; + enum { gje3MaxDim = 62 }; + enum { gje3MinBlks = 1 }; + enum { gje3MaxThrds = 1024 }; /* sm_13, 16 registers per thread */ + + enum { gje3DimX_00 = -1 }; + enum { gje3DimX_01 = -1 }; + enum { gje3DimX_02 = 2 }; + enum { gje3DimX_03 = 3 }; + enum { gje3DimX_04 = 4 }; + enum { gje3DimX_05 = 5 }; + enum { gje3DimX_06 = 2 }; + enum { gje3DimX_07 = 4 }; + enum { gje3DimX_08 = 4 }; + enum { gje3DimX_09 = 3 }; + enum { gje3DimX_10 = 3 }; + enum { gje3DimX_11 = 4 }; + enum { gje3DimX_12 = 4 }; + enum { gje3DimX_13 = 2 }; + enum { gje3DimX_14 = 2 }; + enum { gje3DimX_15 = 2 }; + enum { gje3DimX_16 = 2 }; + enum { gje3DimX_17 = 2 }; + enum { gje3DimX_18 = 2 }; + enum { gje3DimX_19 = 3 }; + enum { gje3DimX_20 = 2 }; + enum { gje3DimX_21 = 3 }; + enum { gje3DimX_22 = 2 }; + enum { gje3DimX_23 = 2 }; + enum { gje3DimX_24 = 2 }; + enum { gje3DimX_25 = 3 }; + enum { gje3DimX_26 = 2 }; + enum { gje3DimX_27 = 3 }; + enum { gje3DimX_28 = 4 }; + enum { gje3DimX_29 = 2 }; + enum { gje3DimX_30 = 2 }; + enum { gje3DimX_31 = 3 }; + enum { gje3DimX_32 = 2 }; + enum { gje3DimX_33 = 3 }; + enum { gje3DimX_34 = 2 }; + enum { gje3DimX_35 = 5 }; + enum { gje3DimX_36 = 4 }; + enum { gje3DimX_37 = 5 }; + enum { gje3DimX_38 = 5 }; + enum { gje3DimX_39 = 3 }; + enum { gje3DimX_40 = 4 }; + enum { gje3DimX_41 = 3 }; + enum { gje3DimX_42 = 3 }; + enum { gje3DimX_43 = 5 }; + enum { gje3DimX_44 = 4 }; + enum { gje3DimX_45 = 7 }; + enum { gje3DimX_46 = 8 }; + enum { gje3DimX_47 = 8 }; + enum { gje3DimX_48 = 8 }; + enum { gje3DimX_49 = 7 }; + enum { gje3DimX_50 = 8 }; + enum { gje3DimX_51 = 5 }; + enum { gje3DimX_52 = 8 }; + enum { gje3DimX_53 = 5 }; + enum { gje3DimX_54 = 6 }; + enum { gje3DimX_55 = 7 }; + enum { gje3DimX_56 = 8 }; + enum { gje3DimX_57 = 5 }; + enum { gje3DimX_58 = 6 }; + enum { gje3DimX_59 = 7 }; + enum { gje3DimX_60 = 4 }; + enum { gje3DimX_61 = 7 }; + enum { gje3DimX_62 = 8 }; + enum { gje3DimX_63 = -1 }; + enum { gje3DimX_64 = -1 }; + enum { gje3DimX_65 = -1 }; + enum { gje3DimX_66 = -1 }; + enum { gje3DimX_67 = -1 }; + enum { gje3DimX_68 = -1 }; + enum { gje3DimX_69 = -1 }; + enum { gje3DimX_70 = -1 }; + enum { gje3DimX_71 = -1 }; + enum { gje3DimX_72 = -1 }; + enum { gje3DimX_73 = -1 }; + enum { gje3DimX_74 = -1 }; + enum { gje3DimX_75 = -1 }; + enum { gje3DimX_76 = -1 }; + enum { gje3DimX_77 = -1 }; + enum { gje3DimX_78 = -1 }; + enum { gje3DimX_79 = -1 }; + enum { gje3DimX_80 = -1 }; + enum { gje3DimX_81 = -1 }; + enum { gje3DimX_82 = -1 }; + enum { gje3DimX_83 = -1 }; + enum { gje3DimX_84 = -1 }; + enum { gje3DimX_85 = -1 }; + enum { gje3DimX_86 = -1 }; + enum { gje3DimX_87 = -1 }; + enum { gje3DimX_88 = -1 }; + enum { gje3DimX_89 = -1 }; + enum { gje3DimX_90 = -1 }; + enum { gje3DimX_91 = -1 }; + enum { gje3DimX_92 = -1 }; + enum { gje3DimX_93 = -1 }; + enum { gje3DimX_94 = -1 }; + enum { gje3DimX_95 = -1 }; + enum { gje3DimX_96 = -1 }; + enum { gje3DimX_97 = -1 }; + enum { gje3DimX_98 = -1 }; + enum { gje3DimX_99 = -1 }; + enum { gje3DimX_100 = -1 }; + enum { gje3DimX_101 = -1 }; + enum { gje3DimX_102 = -1 }; + enum { gje3DimX_103 = -1 }; + enum { gje3DimX_104 = -1 }; + enum { gje3DimX_105 = -1 }; + enum { gje3DimX_106 = -1 }; + enum { gje3DimX_107 = -1 }; + enum { gje3DimX_108 = -1 }; + enum { gje3DimX_109 = -1 }; + + enum { gje3Pad_00 = 0 }; + enum { gje3Pad_01 = 0 }; + enum { gje3Pad_02 = 0 }; + enum { gje3Pad_03 = 0 }; + enum { gje3Pad_04 = 0 }; + enum { gje3Pad_05 = 0 }; + enum { gje3Pad_06 = 1 }; + enum { gje3Pad_07 = 4 }; + enum { gje3Pad_08 = 4 }; + enum { gje3Pad_09 = 4 }; + enum { gje3Pad_10 = 0 }; + enum { gje3Pad_11 = 1 }; + enum { gje3Pad_12 = 0 }; + enum { gje3Pad_13 = 1 }; + enum { gje3Pad_14 = 4 }; + enum { gje3Pad_15 = 3 }; + enum { gje3Pad_16 = 2 }; + enum { gje3Pad_17 = 1 }; + enum { gje3Pad_18 = 0 }; + enum { gje3Pad_19 = 0 }; + enum { gje3Pad_20 = 2 }; + enum { gje3Pad_21 = 0 }; + enum { gje3Pad_22 = 0 }; + enum { gje3Pad_23 = 2 }; + enum { gje3Pad_24 = 2 }; + enum { gje3Pad_25 = 1 }; + enum { gje3Pad_26 = 0 }; + enum { gje3Pad_27 = 0 }; + enum { gje3Pad_28 = 0 }; + enum { gje3Pad_29 = 1 }; + enum { gje3Pad_30 = 0 }; + enum { gje3Pad_31 = 4 }; + enum { gje3Pad_32 = 2 }; + enum { gje3Pad_33 = 2 }; + enum { gje3Pad_34 = 0 }; + enum { gje3Pad_35 = 2 }; + enum { gje3Pad_36 = 0 }; + enum { gje3Pad_37 = 0 }; + enum { gje3Pad_38 = 0 }; + enum { gje3Pad_39 = 3 }; + enum { gje3Pad_40 = 4 }; + enum { gje3Pad_41 = 1 }; + enum { gje3Pad_42 = 3 }; + enum { gje3Pad_43 = 1 }; + enum { gje3Pad_44 = 0 }; + enum { gje3Pad_45 = 0 }; + enum { gje3Pad_46 = 0 }; + enum { gje3Pad_47 = 0 }; + enum { gje3Pad_48 = 3 }; + enum { gje3Pad_49 = 3 }; + enum { gje3Pad_50 = 0 }; + enum { gje3Pad_51 = 2 }; + enum { gje3Pad_52 = 4 }; + enum { gje3Pad_53 = 0 }; + enum { gje3Pad_54 = 0 }; + enum { gje3Pad_55 = 0 }; + enum { gje3Pad_56 = 1 }; + enum { gje3Pad_57 = 3 }; + enum { gje3Pad_58 = 0 }; + enum { gje3Pad_59 = 0 }; + enum { gje3Pad_60 = 0 }; + enum { gje3Pad_61 = 0 }; + enum { gje3Pad_62 = 0 }; + enum { gje3Pad_63 = 0 }; + enum { gje3Pad_64 = 0 }; + enum { gje3Pad_65 = 0 }; + enum { gje3Pad_66 = 0 }; + enum { gje3Pad_67 = 0 }; + enum { gje3Pad_68 = 0 }; + enum { gje3Pad_69 = 0 }; + enum { gje3Pad_70 = 0 }; + enum { gje3Pad_71 = 0 }; + enum { gje3Pad_72 = 0 }; + enum { gje3Pad_73 = 0 }; + enum { gje3Pad_74 = 0 }; + enum { gje3Pad_75 = 0 }; + enum { gje3Pad_76 = 0 }; + enum { gje3Pad_77 = 0 }; + enum { gje3Pad_78 = 0 }; + enum { gje3Pad_79 = 0 }; + enum { gje3Pad_80 = 0 }; + enum { gje3Pad_81 = 0 }; + enum { gje3Pad_82 = 0 }; + enum { gje3Pad_83 = 0 }; + enum { gje3Pad_84 = 0 }; + enum { gje3Pad_85 = 0 }; + enum { gje3Pad_86 = 0 }; + enum { gje3Pad_87 = 0 }; + enum { gje3Pad_88 = 0 }; + enum { gje3Pad_89 = 0 }; + enum { gje3Pad_90 = 0 }; + enum { gje3Pad_91 = 0 }; + enum { gje3Pad_92 = 0 }; + enum { gje3Pad_93 = 0 }; + enum { gje3Pad_94 = 0 }; + enum { gje3Pad_95 = 0 }; + enum { gje3Pad_96 = 0 }; + enum { gje3Pad_97 = 0 }; + enum { gje3Pad_98 = 0 }; + enum { gje3Pad_99 = 0 }; + enum { gje3Pad_100 = 0 }; + enum { gje3Pad_101 = 0 }; + enum { gje3Pad_102 = 0 }; + enum { gje3Pad_103 = 0 }; + enum { gje3Pad_104 = 0 }; + enum { gje3Pad_105 = 0 }; + enum { gje3Pad_106 = 0 }; + enum { gje3Pad_107 = 0 }; + enum { gje3Pad_108 = 0 }; + enum { gje3Pad_109 = 0 }; + + enum { gje3SrchThrd_00 = -1 }; + enum { gje3SrchThrd_01 = -1 }; + enum { gje3SrchThrd_02 = 1 }; + enum { gje3SrchThrd_03 = 1 }; + enum { gje3SrchThrd_04 = 1 }; + enum { gje3SrchThrd_05 = 1 }; + enum { gje3SrchThrd_06 = 1 }; + enum { gje3SrchThrd_07 = 1 }; + enum { gje3SrchThrd_08 = 1 }; + enum { gje3SrchThrd_09 = 1 }; + enum { gje3SrchThrd_10 = 1 }; + enum { gje3SrchThrd_11 = 1 }; + enum { gje3SrchThrd_12 = 1 }; + enum { gje3SrchThrd_13 = 1 }; + enum { gje3SrchThrd_14 = 1 }; + enum { gje3SrchThrd_15 = 1 }; + enum { gje3SrchThrd_16 = 1 }; + enum { gje3SrchThrd_17 = 1 }; + enum { gje3SrchThrd_18 = 1 }; + enum { gje3SrchThrd_19 = 1 }; + enum { gje3SrchThrd_20 = 1 }; + enum { gje3SrchThrd_21 = 1 }; + enum { gje3SrchThrd_22 = 1 }; + enum { gje3SrchThrd_23 = 1 }; + enum { gje3SrchThrd_24 = 1 }; + enum { gje3SrchThrd_25 = 1 }; + enum { gje3SrchThrd_26 = 1 }; + enum { gje3SrchThrd_27 = 1 }; + enum { gje3SrchThrd_28 = 1 }; + enum { gje3SrchThrd_29 = 1 }; + enum { gje3SrchThrd_30 = 1 }; + enum { gje3SrchThrd_31 = 2 }; + enum { gje3SrchThrd_32 = 2 }; + enum { gje3SrchThrd_33 = 2 }; + enum { gje3SrchThrd_34 = 2 }; + enum { gje3SrchThrd_35 = 2 }; + enum { gje3SrchThrd_36 = 3 }; + enum { gje3SrchThrd_37 = 3 }; + enum { gje3SrchThrd_38 = 3 }; + enum { gje3SrchThrd_39 = 3 }; + enum { gje3SrchThrd_40 = 3 }; + enum { gje3SrchThrd_41 = 3 }; + enum { gje3SrchThrd_42 = 3 }; + enum { gje3SrchThrd_43 = 3 }; + enum { gje3SrchThrd_44 = 3 }; + enum { gje3SrchThrd_45 = 3 }; + enum { gje3SrchThrd_46 = 3 }; + enum { gje3SrchThrd_47 = 3 }; + enum { gje3SrchThrd_48 = 3 }; + enum { gje3SrchThrd_49 = 3 }; + enum { gje3SrchThrd_50 = 3 }; + enum { gje3SrchThrd_51 = 3 }; + enum { gje3SrchThrd_52 = 3 }; + enum { gje3SrchThrd_53 = 3 }; + enum { gje3SrchThrd_54 = 3 }; + enum { gje3SrchThrd_55 = 3 }; + enum { gje3SrchThrd_56 = 3 }; + enum { gje3SrchThrd_57 = 3 }; + enum { gje3SrchThrd_58 = 3 }; + enum { gje3SrchThrd_59 = 3 }; + enum { gje3SrchThrd_60 = 3 }; + enum { gje3SrchThrd_61 = 3 }; + enum { gje3SrchThrd_62 = 3 }; + enum { gje3SrchThrd_63 = -1 }; + enum { gje3SrchThrd_64 = -1 }; + enum { gje3SrchThrd_65 = -1 }; + enum { gje3SrchThrd_66 = -1 }; + enum { gje3SrchThrd_67 = -1 }; + enum { gje3SrchThrd_68 = -1 }; + enum { gje3SrchThrd_69 = -1 }; + enum { gje3SrchThrd_70 = -1 }; + enum { gje3SrchThrd_71 = -1 }; + enum { gje3SrchThrd_72 = -1 }; + enum { gje3SrchThrd_73 = -1 }; + enum { gje3SrchThrd_74 = -1 }; + enum { gje3SrchThrd_75 = -1 }; + enum { gje3SrchThrd_76 = -1 }; + enum { gje3SrchThrd_77 = -1 }; + enum { gje3SrchThrd_78 = -1 }; + enum { gje3SrchThrd_79 = -1 }; + enum { gje3SrchThrd_80 = -1 }; + enum { gje3SrchThrd_81 = -1 }; + enum { gje3SrchThrd_82 = -1 }; + enum { gje3SrchThrd_83 = -1 }; + enum { gje3SrchThrd_84 = -1 }; + enum { gje3SrchThrd_85 = -1 }; + enum { gje3SrchThrd_86 = -1 }; + enum { gje3SrchThrd_87 = -1 }; + enum { gje3SrchThrd_88 = -1 }; + enum { gje3SrchThrd_89 = -1 }; + enum { gje3SrchThrd_90 = -1 }; + enum { gje3SrchThrd_91 = -1 }; + enum { gje3SrchThrd_92 = -1 }; + enum { gje3SrchThrd_93 = -1 }; + enum { gje3SrchThrd_94 = -1 }; + enum { gje3SrchThrd_95 = -1 }; + enum { gje3SrchThrd_96 = -1 }; + enum { gje3SrchThrd_97 = -1 }; + enum { gje3SrchThrd_98 = -1 }; + enum { gje3SrchThrd_99 = -1 }; + enum { gje3SrchThrd_100 = -1 }; + enum { gje3SrchThrd_101 = -1 }; + enum { gje3SrchThrd_102 = -1 }; + enum { gje3SrchThrd_103 = -1 }; + enum { gje3SrchThrd_104 = -1 }; + enum { gje3SrchThrd_105 = -1 }; + enum { gje3SrchThrd_106 = -1 }; + enum { gje3SrchThrd_107 = -1 }; + enum { gje3SrchThrd_108 = -1 }; + enum { gje3SrchThrd_109 = -1 }; + + enum { matInv2x2MinBatch = 35000 }; + enum { matInv3x3MinBatch = 45000 }; + enum { matInv4x4MinBatch = 40000 }; + enum { matInv5x5MinBatch = 25000 }; + enum { matInv6x6MinBatch = 15000 }; + enum { matInv7x7MinBatch = 11000 }; + enum { matInv8x8MinBatch = 9500 }; + enum { matInv9x9MinBatch = 9000 }; + enum { matInv10x10MinBatch= 6000 }; + enum { matInvMinDim = 2 }; + enum { matInvMaxDim = 10 }; +}; + +template<> class config { +public: + typedef double absValType; + + enum { gje3MinDim = 2 }; + enum { gje3MaxDim = 44 }; + enum { gje3MinBlks = 1 }; + enum { gje3MaxThrds =768 }; /* sm_13, 21 registers per thread */ + + enum { gje3DimX_00 = -1 }; + enum { gje3DimX_01 = -1 }; + enum { gje3DimX_02 = 2 }; + enum { gje3DimX_03 = 3 }; + enum { gje3DimX_04 = 4 }; + enum { gje3DimX_05 = 3 }; + enum { gje3DimX_06 = 2 }; + enum { gje3DimX_07 = 2 }; + enum { gje3DimX_08 = 2 }; + enum { gje3DimX_09 = 3 }; + enum { gje3DimX_10 = 3 }; + enum { gje3DimX_11 = 2 }; + enum { gje3DimX_12 = 4 }; + enum { gje3DimX_13 = 2 }; + enum { gje3DimX_14 = 2 }; + enum { gje3DimX_15 = 2 }; + enum { gje3DimX_16 = 2 }; + enum { gje3DimX_17 = 2 }; + enum { gje3DimX_18 = 2 }; + enum { gje3DimX_19 = 3 }; + enum { gje3DimX_20 = 4 }; + enum { gje3DimX_21 = 3 }; + enum { gje3DimX_22 = 4 }; + enum { gje3DimX_23 = 2 }; + enum { gje3DimX_24 = 2 }; + enum { gje3DimX_25 = 5 }; + enum { gje3DimX_26 = 4 }; + enum { gje3DimX_27 = 4 }; + enum { gje3DimX_28 = 4 }; + enum { gje3DimX_29 = 5 }; + enum { gje3DimX_30 = 4 }; + enum { gje3DimX_31 = 2 }; + enum { gje3DimX_32 = 8 }; + enum { gje3DimX_33 = 7 }; + enum { gje3DimX_34 = 7 }; + enum { gje3DimX_35 = 7 }; + enum { gje3DimX_36 = 8 }; + enum { gje3DimX_37 = 8 }; + enum { gje3DimX_38 = 8 }; + enum { gje3DimX_39 = 8 }; + enum { gje3DimX_40 = 8 }; + enum { gje3DimX_41 = 7 }; + enum { gje3DimX_42 = 6 }; + enum { gje3DimX_43 = 8 }; + enum { gje3DimX_44 = 8 }; + enum { gje3DimX_45 = -1 }; + enum { gje3DimX_46 = -1 }; + enum { gje3DimX_47 = -1 }; + enum { gje3DimX_48 = -1 }; + enum { gje3DimX_49 = -1 }; + enum { gje3DimX_50 = -1 }; + enum { gje3DimX_51 = -1 }; + enum { gje3DimX_52 = -1 }; + enum { gje3DimX_53 = -1 }; + enum { gje3DimX_54 = -1 }; + enum { gje3DimX_55 = -1 }; + enum { gje3DimX_56 = -1 }; + enum { gje3DimX_57 = -1 }; + enum { gje3DimX_58 = -1 }; + enum { gje3DimX_59 = -1 }; + enum { gje3DimX_60 = -1 }; + enum { gje3DimX_61 = -1 }; + enum { gje3DimX_62 = -1 }; + enum { gje3DimX_63 = -1 }; + enum { gje3DimX_64 = -1 }; + enum { gje3DimX_65 = -1 }; + enum { gje3DimX_66 = -1 }; + enum { gje3DimX_67 = -1 }; + enum { gje3DimX_68 = -1 }; + enum { gje3DimX_69 = -1 }; + enum { gje3DimX_70 = -1 }; + enum { gje3DimX_71 = -1 }; + enum { gje3DimX_72 = -1 }; + enum { gje3DimX_73 = -1 }; + enum { gje3DimX_74 = -1 }; + enum { gje3DimX_75 = -1 }; + enum { gje3DimX_76 = -1 }; + enum { gje3DimX_77 = -1 }; + enum { gje3DimX_78 = -1 }; + enum { gje3DimX_79 = -1 }; + enum { gje3DimX_80 = -1 }; + enum { gje3DimX_81 = -1 }; + enum { gje3DimX_82 = -1 }; + enum { gje3DimX_83 = -1 }; + enum { gje3DimX_84 = -1 }; + enum { gje3DimX_85 = -1 }; + enum { gje3DimX_86 = -1 }; + enum { gje3DimX_87 = -1 }; + enum { gje3DimX_88 = -1 }; + enum { gje3DimX_89 = -1 }; + enum { gje3DimX_90 = -1 }; + enum { gje3DimX_91 = -1 }; + enum { gje3DimX_92 = -1 }; + enum { gje3DimX_93 = -1 }; + enum { gje3DimX_94 = -1 }; + enum { gje3DimX_95 = -1 }; + enum { gje3DimX_96 = -1 }; + enum { gje3DimX_97 = -1 }; + enum { gje3DimX_98 = -1 }; + enum { gje3DimX_99 = -1 }; + enum { gje3DimX_100 = -1 }; + enum { gje3DimX_101 = -1 }; + enum { gje3DimX_102 = -1 }; + enum { gje3DimX_103 = -1 }; + enum { gje3DimX_104 = -1 }; + enum { gje3DimX_105 = -1 }; + enum { gje3DimX_106 = -1 }; + enum { gje3DimX_107 = -1 }; + enum { gje3DimX_108 = -1 }; + enum { gje3DimX_109 = -1 }; + + enum { gje3Pad_00 = 0 }; + enum { gje3Pad_01 = 0 }; + enum { gje3Pad_02 = 0 }; + enum { gje3Pad_03 = 0 }; + enum { gje3Pad_04 = 2 }; + enum { gje3Pad_05 = 0 }; + enum { gje3Pad_06 = 1 }; + enum { gje3Pad_07 = 4 }; + enum { gje3Pad_08 = 3 }; + enum { gje3Pad_09 = 2 }; + enum { gje3Pad_10 = 1 }; + enum { gje3Pad_11 = 2 }; + enum { gje3Pad_12 = 2 }; + enum { gje3Pad_13 = 2 }; + enum { gje3Pad_14 = 1 }; + enum { gje3Pad_15 = 0 }; + enum { gje3Pad_16 = 1 }; + enum { gje3Pad_17 = 0 }; + enum { gje3Pad_18 = 1 }; + enum { gje3Pad_19 = 2 }; + enum { gje3Pad_20 = 2 }; + enum { gje3Pad_21 = 0 }; + enum { gje3Pad_22 = 4 }; + enum { gje3Pad_23 = 2 }; + enum { gje3Pad_24 = 1 }; + enum { gje3Pad_25 = 4 }; + enum { gje3Pad_26 = 4 }; + enum { gje3Pad_27 = 3 }; + enum { gje3Pad_28 = 2 }; + enum { gje3Pad_29 = 0 }; + enum { gje3Pad_30 = 0 }; + enum { gje3Pad_31 = 0 }; + enum { gje3Pad_32 = 1 }; + enum { gje3Pad_33 = 2 }; + enum { gje3Pad_34 = 1 }; + enum { gje3Pad_35 = 4 }; + enum { gje3Pad_36 = 3 }; + enum { gje3Pad_37 = 1 }; + enum { gje3Pad_38 = 3 }; + enum { gje3Pad_39 = 2 }; + enum { gje3Pad_40 = 1 }; + enum { gje3Pad_41 = 2 }; + enum { gje3Pad_42 = 4 }; + enum { gje3Pad_43 = 2 }; + enum { gje3Pad_44 = 1 }; + enum { gje3Pad_45 = 0 }; + enum { gje3Pad_46 = 0 }; + enum { gje3Pad_47 = 0 }; + enum { gje3Pad_48 = 0 }; + enum { gje3Pad_49 = 0 }; + enum { gje3Pad_50 = 0 }; + enum { gje3Pad_51 = 0 }; + enum { gje3Pad_52 = 0 }; + enum { gje3Pad_53 = 0 }; + enum { gje3Pad_54 = 0 }; + enum { gje3Pad_55 = 0 }; + enum { gje3Pad_56 = 0 }; + enum { gje3Pad_57 = 0 }; + enum { gje3Pad_58 = 0 }; + enum { gje3Pad_59 = 0 }; + enum { gje3Pad_60 = 0 }; + enum { gje3Pad_61 = 0 }; + enum { gje3Pad_62 = 0 }; + enum { gje3Pad_63 = 0 }; + enum { gje3Pad_64 = 0 }; + enum { gje3Pad_65 = 0 }; + enum { gje3Pad_66 = 0 }; + enum { gje3Pad_67 = 0 }; + enum { gje3Pad_68 = 0 }; + enum { gje3Pad_69 = 0 }; + enum { gje3Pad_70 = 0 }; + enum { gje3Pad_71 = 0 }; + enum { gje3Pad_72 = 0 }; + enum { gje3Pad_73 = 0 }; + enum { gje3Pad_74 = 0 }; + enum { gje3Pad_75 = 0 }; + enum { gje3Pad_76 = 0 }; + enum { gje3Pad_77 = 0 }; + enum { gje3Pad_78 = 0 }; + enum { gje3Pad_79 = 0 }; + enum { gje3Pad_80 = 0 }; + enum { gje3Pad_81 = 0 }; + enum { gje3Pad_82 = 0 }; + enum { gje3Pad_83 = 0 }; + enum { gje3Pad_84 = 0 }; + enum { gje3Pad_85 = 0 }; + enum { gje3Pad_86 = 0 }; + enum { gje3Pad_87 = 0 }; + enum { gje3Pad_88 = 0 }; + enum { gje3Pad_89 = 0 }; + enum { gje3Pad_90 = 0 }; + enum { gje3Pad_91 = 0 }; + enum { gje3Pad_92 = 0 }; + enum { gje3Pad_93 = 0 }; + enum { gje3Pad_94 = 0 }; + enum { gje3Pad_95 = 0 }; + enum { gje3Pad_96 = 0 }; + enum { gje3Pad_97 = 0 }; + enum { gje3Pad_98 = 0 }; + enum { gje3Pad_99 = 0 }; + enum { gje3Pad_100 = 0 }; + enum { gje3Pad_101 = 0 }; + enum { gje3Pad_102 = 0 }; + enum { gje3Pad_103 = 0 }; + enum { gje3Pad_104 = 0 }; + enum { gje3Pad_105 = 0 }; + enum { gje3Pad_106 = 0 }; + enum { gje3Pad_107 = 0 }; + enum { gje3Pad_108 = 0 }; + enum { gje3Pad_109 = 0 }; + + enum { gje3SrchThrd_00 = -1 }; + enum { gje3SrchThrd_01 = -1 }; + enum { gje3SrchThrd_02 = 1 }; + enum { gje3SrchThrd_03 = 2 }; + enum { gje3SrchThrd_04 = 2 }; + enum { gje3SrchThrd_05 = 2 }; + enum { gje3SrchThrd_06 = 2 }; + enum { gje3SrchThrd_07 = 2 }; + enum { gje3SrchThrd_08 = 2 }; + enum { gje3SrchThrd_09 = 2 }; + enum { gje3SrchThrd_10 = 2 }; + enum { gje3SrchThrd_11 = 2 }; + enum { gje3SrchThrd_12 = 2 }; + enum { gje3SrchThrd_13 = 3 }; + enum { gje3SrchThrd_14 = 3 }; + enum { gje3SrchThrd_15 = 3 }; + enum { gje3SrchThrd_16 = 3 }; + enum { gje3SrchThrd_17 = 3 }; + enum { gje3SrchThrd_18 = 3 }; + enum { gje3SrchThrd_19 = 3 }; + enum { gje3SrchThrd_20 = 3 }; + enum { gje3SrchThrd_21 = 3 }; + enum { gje3SrchThrd_22 = 3 }; + enum { gje3SrchThrd_23 = 3 }; + enum { gje3SrchThrd_24 = 3 }; + enum { gje3SrchThrd_25 = 3 }; + enum { gje3SrchThrd_26 = 3 }; + enum { gje3SrchThrd_27 = 3 }; + enum { gje3SrchThrd_28 = 3 }; + enum { gje3SrchThrd_29 = 3 }; + enum { gje3SrchThrd_30 = 3 }; + enum { gje3SrchThrd_31 = 3 }; + enum { gje3SrchThrd_32 = 3 }; + enum { gje3SrchThrd_33 = 3 }; + enum { gje3SrchThrd_34 = 3 }; + enum { gje3SrchThrd_35 = 3 }; + enum { gje3SrchThrd_36 = 4 }; + enum { gje3SrchThrd_37 = 4 }; + enum { gje3SrchThrd_38 = 4 }; + enum { gje3SrchThrd_39 = 4 }; + enum { gje3SrchThrd_40 = 4 }; + enum { gje3SrchThrd_41 = 4 }; + enum { gje3SrchThrd_42 = 4 }; + enum { gje3SrchThrd_43 = 4 }; + enum { gje3SrchThrd_44 = 4 }; + enum { gje3SrchThrd_45 = -1 }; + enum { gje3SrchThrd_46 = -1 }; + enum { gje3SrchThrd_47 = -1 }; + enum { gje3SrchThrd_48 = -1 }; + enum { gje3SrchThrd_49 = -1 }; + enum { gje3SrchThrd_50 = -1 }; + enum { gje3SrchThrd_51 = -1 }; + enum { gje3SrchThrd_52 = -1 }; + enum { gje3SrchThrd_53 = -1 }; + enum { gje3SrchThrd_54 = -1 }; + enum { gje3SrchThrd_55 = -1 }; + enum { gje3SrchThrd_56 = -1 }; + enum { gje3SrchThrd_57 = -1 }; + enum { gje3SrchThrd_58 = -1 }; + enum { gje3SrchThrd_59 = -1 }; + enum { gje3SrchThrd_60 = -1 }; + enum { gje3SrchThrd_61 = -1 }; + enum { gje3SrchThrd_62 = -1 }; + enum { gje3SrchThrd_63 = -1 }; + enum { gje3SrchThrd_64 = -1 }; + enum { gje3SrchThrd_65 = -1 }; + enum { gje3SrchThrd_66 = -1 }; + enum { gje3SrchThrd_67 = -1 }; + enum { gje3SrchThrd_68 = -1 }; + enum { gje3SrchThrd_69 = -1 }; + enum { gje3SrchThrd_70 = -1 }; + enum { gje3SrchThrd_71 = -1 }; + enum { gje3SrchThrd_72 = -1 }; + enum { gje3SrchThrd_73 = -1 }; + enum { gje3SrchThrd_74 = -1 }; + enum { gje3SrchThrd_75 = -1 }; + enum { gje3SrchThrd_76 = -1 }; + enum { gje3SrchThrd_77 = -1 }; + enum { gje3SrchThrd_78 = -1 }; + enum { gje3SrchThrd_79 = -1 }; + enum { gje3SrchThrd_80 = -1 }; + enum { gje3SrchThrd_81 = -1 }; + enum { gje3SrchThrd_82 = -1 }; + enum { gje3SrchThrd_83 = -1 }; + enum { gje3SrchThrd_84 = -1 }; + enum { gje3SrchThrd_85 = -1 }; + enum { gje3SrchThrd_86 = -1 }; + enum { gje3SrchThrd_87 = -1 }; + enum { gje3SrchThrd_88 = -1 }; + enum { gje3SrchThrd_89 = -1 }; + enum { gje3SrchThrd_90 = -1 }; + enum { gje3SrchThrd_91 = -1 }; + enum { gje3SrchThrd_92 = -1 }; + enum { gje3SrchThrd_93 = -1 }; + enum { gje3SrchThrd_94 = -1 }; + enum { gje3SrchThrd_95 = -1 }; + enum { gje3SrchThrd_96 = -1 }; + enum { gje3SrchThrd_97 = -1 }; + enum { gje3SrchThrd_98 = -1 }; + enum { gje3SrchThrd_99 = -1 }; + enum { gje3SrchThrd_100 = -1 }; + enum { gje3SrchThrd_101 = -1 }; + enum { gje3SrchThrd_102 = -1 }; + enum { gje3SrchThrd_103 = -1 }; + enum { gje3SrchThrd_104 = -1 }; + enum { gje3SrchThrd_105 = -1 }; + enum { gje3SrchThrd_106 = -1 }; + enum { gje3SrchThrd_107 = -1 }; + enum { gje3SrchThrd_108 = -1 }; + enum { gje3SrchThrd_109 = -1 }; + + enum { matInv2x2MinBatch = 40000 }; + enum { matInv3x3MinBatch = 28000 }; + enum { matInv4x4MinBatch = 17000 }; + enum { matInv5x5MinBatch = 14000 }; + enum { matInv6x6MinBatch = 11000 }; + enum { matInv7x7MinBatch = 8500 }; + enum { matInv8x8MinBatch = 13000 }; + enum { matInv9x9MinBatch = 17000 }; + enum { matInv10x10MinBatch= 30000 }; + enum { matInvMinDim = 2 }; + enum { matInvMaxDim = 10 }; +}; + +template<> class config { +public: + typedef float absValType; + + enum { gje3MinDim = 2 }; + enum { gje3MaxDim = 44 }; + enum { gje3MinBlks = 1 }; + enum { gje3MaxThrds =832 }; /* sm_13, 19 registers per thread */ + + enum { gje3DimX_00 = -1 }; + enum { gje3DimX_01 = -1 }; + enum { gje3DimX_02 = 2 }; + enum { gje3DimX_03 = 3 }; + enum { gje3DimX_04 = 4 }; + enum { gje3DimX_05 = 3 }; + enum { gje3DimX_06 = 2 }; + enum { gje3DimX_07 = 2 }; + enum { gje3DimX_08 = 2 }; + enum { gje3DimX_09 = 3 }; + enum { gje3DimX_10 = 3 }; + enum { gje3DimX_11 = 2 }; + enum { gje3DimX_12 = 4 }; + enum { gje3DimX_13 = 2 }; + enum { gje3DimX_14 = 2 }; + enum { gje3DimX_15 = 2 }; + enum { gje3DimX_16 = 2 }; + enum { gje3DimX_17 = 2 }; + enum { gje3DimX_18 = 2 }; + enum { gje3DimX_19 = 2 }; + enum { gje3DimX_20 = 4 }; + enum { gje3DimX_21 = 2 }; + enum { gje3DimX_22 = 8 }; + enum { gje3DimX_23 = 2 }; + enum { gje3DimX_24 = 8 }; + enum { gje3DimX_25 = 8 }; + enum { gje3DimX_26 = 8 }; + enum { gje3DimX_27 = 7 }; + enum { gje3DimX_28 = 8 }; + enum { gje3DimX_29 = 8 }; + enum { gje3DimX_30 = 8 }; + enum { gje3DimX_31 = 8 }; + enum { gje3DimX_32 = 8 }; + enum { gje3DimX_33 = 8 }; + enum { gje3DimX_34 = 8 }; + enum { gje3DimX_35 = 8 }; + enum { gje3DimX_36 = 8 }; + enum { gje3DimX_37 = 8 }; + enum { gje3DimX_38 = 8 }; + enum { gje3DimX_39 = 8 }; + enum { gje3DimX_40 = 8 }; + enum { gje3DimX_41 = 8 }; + enum { gje3DimX_42 = 8 }; + enum { gje3DimX_43 = 8 }; + enum { gje3DimX_44 = 8 }; + enum { gje3DimX_45 = -1 }; + enum { gje3DimX_46 = -1 }; + enum { gje3DimX_47 = -1 }; + enum { gje3DimX_48 = -1 }; + enum { gje3DimX_49 = -1 }; + enum { gje3DimX_50 = -1 }; + enum { gje3DimX_51 = -1 }; + enum { gje3DimX_52 = -1 }; + enum { gje3DimX_53 = -1 }; + enum { gje3DimX_54 = -1 }; + enum { gje3DimX_55 = -1 }; + enum { gje3DimX_56 = -1 }; + enum { gje3DimX_57 = -1 }; + enum { gje3DimX_58 = -1 }; + enum { gje3DimX_59 = -1 }; + enum { gje3DimX_60 = -1 }; + enum { gje3DimX_61 = -1 }; + enum { gje3DimX_62 = -1 }; + enum { gje3DimX_63 = -1 }; + enum { gje3DimX_64 = -1 }; + enum { gje3DimX_65 = -1 }; + enum { gje3DimX_66 = -1 }; + enum { gje3DimX_67 = -1 }; + enum { gje3DimX_68 = -1 }; + enum { gje3DimX_69 = -1 }; + enum { gje3DimX_70 = -1 }; + enum { gje3DimX_71 = -1 }; + enum { gje3DimX_72 = -1 }; + enum { gje3DimX_73 = -1 }; + enum { gje3DimX_74 = -1 }; + enum { gje3DimX_75 = -1 }; + enum { gje3DimX_76 = -1 }; + enum { gje3DimX_77 = -1 }; + enum { gje3DimX_78 = -1 }; + enum { gje3DimX_79 = -1 }; + enum { gje3DimX_80 = -1 }; + enum { gje3DimX_81 = -1 }; + enum { gje3DimX_82 = -1 }; + enum { gje3DimX_83 = -1 }; + enum { gje3DimX_84 = -1 }; + enum { gje3DimX_85 = -1 }; + enum { gje3DimX_86 = -1 }; + enum { gje3DimX_87 = -1 }; + enum { gje3DimX_88 = -1 }; + enum { gje3DimX_89 = -1 }; + enum { gje3DimX_90 = -1 }; + enum { gje3DimX_91 = -1 }; + enum { gje3DimX_92 = -1 }; + enum { gje3DimX_93 = -1 }; + enum { gje3DimX_94 = -1 }; + enum { gje3DimX_95 = -1 }; + enum { gje3DimX_96 = -1 }; + enum { gje3DimX_97 = -1 }; + enum { gje3DimX_98 = -1 }; + enum { gje3DimX_99 = -1 }; + enum { gje3DimX_100 = -1 }; + enum { gje3DimX_101 = -1 }; + enum { gje3DimX_102 = -1 }; + enum { gje3DimX_103 = -1 }; + enum { gje3DimX_104 = -1 }; + enum { gje3DimX_105 = -1 }; + enum { gje3DimX_106 = -1 }; + enum { gje3DimX_107 = -1 }; + enum { gje3DimX_108 = -1 }; + enum { gje3DimX_109 = -1 }; + + enum { gje3Pad_00 = 0 }; + enum { gje3Pad_01 = 0 }; + enum { gje3Pad_02 = 0 }; + enum { gje3Pad_03 = 0 }; + enum { gje3Pad_04 = 2 }; + enum { gje3Pad_05 = 0 }; + enum { gje3Pad_06 = 1 }; + enum { gje3Pad_07 = 2 }; + enum { gje3Pad_08 = 1 }; + enum { gje3Pad_09 = 2 }; + enum { gje3Pad_10 = 1 }; + enum { gje3Pad_11 = 2 }; + enum { gje3Pad_12 = 2 }; + enum { gje3Pad_13 = 2 }; + enum { gje3Pad_14 = 1 }; + enum { gje3Pad_15 = 0 }; + enum { gje3Pad_16 = 1 }; + enum { gje3Pad_17 = 0 }; + enum { gje3Pad_18 = 1 }; + enum { gje3Pad_19 = 2 }; + enum { gje3Pad_20 = 2 }; + enum { gje3Pad_21 = 0 }; + enum { gje3Pad_22 = 1 }; + enum { gje3Pad_23 = 2 }; + enum { gje3Pad_24 = 1 }; + enum { gje3Pad_25 = 1 }; + enum { gje3Pad_26 = 1 }; + enum { gje3Pad_27 = 4 }; + enum { gje3Pad_28 = 1 }; + enum { gje3Pad_29 = 2 }; + enum { gje3Pad_30 = 1 }; + enum { gje3Pad_31 = 0 }; + enum { gje3Pad_32 = 1 }; + enum { gje3Pad_33 = 1 }; + enum { gje3Pad_34 = 1 }; + enum { gje3Pad_35 = 2 }; + enum { gje3Pad_36 = 2 }; + enum { gje3Pad_37 = 1 }; + enum { gje3Pad_38 = 1 }; + enum { gje3Pad_39 = 2 }; + enum { gje3Pad_40 = 1 }; + enum { gje3Pad_41 = 2 }; + enum { gje3Pad_42 = 4 }; + enum { gje3Pad_43 = 2 }; + enum { gje3Pad_44 = 1 }; + enum { gje3Pad_45 = 0 }; + enum { gje3Pad_46 = 0 }; + enum { gje3Pad_47 = 0 }; + enum { gje3Pad_48 = 0 }; + enum { gje3Pad_49 = 0 }; + enum { gje3Pad_50 = 0 }; + enum { gje3Pad_51 = 0 }; + enum { gje3Pad_52 = 0 }; + enum { gje3Pad_53 = 0 }; + enum { gje3Pad_54 = 0 }; + enum { gje3Pad_55 = 0 }; + enum { gje3Pad_56 = 0 }; + enum { gje3Pad_57 = 0 }; + enum { gje3Pad_58 = 0 }; + enum { gje3Pad_59 = 0 }; + enum { gje3Pad_60 = 0 }; + enum { gje3Pad_61 = 0 }; + enum { gje3Pad_62 = 0 }; + enum { gje3Pad_63 = 0 }; + enum { gje3Pad_64 = 0 }; + enum { gje3Pad_65 = 0 }; + enum { gje3Pad_66 = 0 }; + enum { gje3Pad_67 = 0 }; + enum { gje3Pad_68 = 0 }; + enum { gje3Pad_69 = 0 }; + enum { gje3Pad_70 = 0 }; + enum { gje3Pad_71 = 0 }; + enum { gje3Pad_72 = 0 }; + enum { gje3Pad_73 = 0 }; + enum { gje3Pad_74 = 0 }; + enum { gje3Pad_75 = 0 }; + enum { gje3Pad_76 = 0 }; + enum { gje3Pad_77 = 0 }; + enum { gje3Pad_78 = 0 }; + enum { gje3Pad_79 = 0 }; + enum { gje3Pad_80 = 0 }; + enum { gje3Pad_81 = 0 }; + enum { gje3Pad_82 = 0 }; + enum { gje3Pad_83 = 0 }; + enum { gje3Pad_84 = 0 }; + enum { gje3Pad_85 = 0 }; + enum { gje3Pad_86 = 0 }; + enum { gje3Pad_87 = 0 }; + enum { gje3Pad_88 = 0 }; + enum { gje3Pad_89 = 0 }; + enum { gje3Pad_90 = 0 }; + enum { gje3Pad_91 = 0 }; + enum { gje3Pad_92 = 0 }; + enum { gje3Pad_93 = 0 }; + enum { gje3Pad_94 = 0 }; + enum { gje3Pad_95 = 0 }; + enum { gje3Pad_96 = 0 }; + enum { gje3Pad_97 = 0 }; + enum { gje3Pad_98 = 0 }; + enum { gje3Pad_99 = 0 }; + enum { gje3Pad_100 = 0 }; + enum { gje3Pad_101 = 0 }; + enum { gje3Pad_102 = 0 }; + enum { gje3Pad_103 = 0 }; + enum { gje3Pad_104 = 0 }; + enum { gje3Pad_105 = 0 }; + enum { gje3Pad_106 = 0 }; + enum { gje3Pad_107 = 0 }; + enum { gje3Pad_108 = 0 }; + enum { gje3Pad_109 = 0 }; + + enum { gje3SrchThrd_00 = -1 }; + enum { gje3SrchThrd_01 = -1 }; + enum { gje3SrchThrd_02 = 2 }; + enum { gje3SrchThrd_03 = 2 }; + enum { gje3SrchThrd_04 = 2 }; + enum { gje3SrchThrd_05 = 2 }; + enum { gje3SrchThrd_06 = 2 }; + enum { gje3SrchThrd_07 = 2 }; + enum { gje3SrchThrd_08 = 2 }; + enum { gje3SrchThrd_09 = 2 }; + enum { gje3SrchThrd_10 = 3 }; + enum { gje3SrchThrd_11 = 3 }; + enum { gje3SrchThrd_12 = 3 }; + enum { gje3SrchThrd_13 = 3 }; + enum { gje3SrchThrd_14 = 3 }; + enum { gje3SrchThrd_15 = 3 }; + enum { gje3SrchThrd_16 = 3 }; + enum { gje3SrchThrd_17 = 3 }; + enum { gje3SrchThrd_18 = 3 }; + enum { gje3SrchThrd_19 = 3 }; + enum { gje3SrchThrd_20 = 3 }; + enum { gje3SrchThrd_21 = 3 }; + enum { gje3SrchThrd_22 = 3 }; + enum { gje3SrchThrd_23 = 3 }; + enum { gje3SrchThrd_24 = 3 }; + enum { gje3SrchThrd_25 = 3 }; + enum { gje3SrchThrd_26 = 3 }; + enum { gje3SrchThrd_27 = 3 }; + enum { gje3SrchThrd_28 = 3 }; + enum { gje3SrchThrd_29 = 3 }; + enum { gje3SrchThrd_30 = 3 }; + enum { gje3SrchThrd_31 = 4 }; + enum { gje3SrchThrd_32 = 4 }; + enum { gje3SrchThrd_33 = 4 }; + enum { gje3SrchThrd_34 = 4 }; + enum { gje3SrchThrd_35 = 4 }; + enum { gje3SrchThrd_36 = 4 }; + enum { gje3SrchThrd_37 = 4 }; + enum { gje3SrchThrd_38 = 4 }; + enum { gje3SrchThrd_39 = 4 }; + enum { gje3SrchThrd_40 = 4 }; + enum { gje3SrchThrd_41 = 4 }; + enum { gje3SrchThrd_42 = 4 }; + enum { gje3SrchThrd_43 = 4 }; + enum { gje3SrchThrd_44 = 4 }; + enum { gje3SrchThrd_45 = -1 }; + enum { gje3SrchThrd_46 = -1 }; + enum { gje3SrchThrd_47 = -1 }; + enum { gje3SrchThrd_48 = -1 }; + enum { gje3SrchThrd_49 = -1 }; + enum { gje3SrchThrd_50 = -1 }; + enum { gje3SrchThrd_51 = -1 }; + enum { gje3SrchThrd_52 = -1 }; + enum { gje3SrchThrd_53 = -1 }; + enum { gje3SrchThrd_54 = -1 }; + enum { gje3SrchThrd_55 = -1 }; + enum { gje3SrchThrd_56 = -1 }; + enum { gje3SrchThrd_57 = -1 }; + enum { gje3SrchThrd_58 = -1 }; + enum { gje3SrchThrd_59 = -1 }; + enum { gje3SrchThrd_60 = -1 }; + enum { gje3SrchThrd_61 = -1 }; + enum { gje3SrchThrd_62 = -1 }; + enum { gje3SrchThrd_63 = -1 }; + enum { gje3SrchThrd_64 = -1 }; + enum { gje3SrchThrd_65 = -1 }; + enum { gje3SrchThrd_66 = -1 }; + enum { gje3SrchThrd_67 = -1 }; + enum { gje3SrchThrd_68 = -1 }; + enum { gje3SrchThrd_69 = -1 }; + enum { gje3SrchThrd_70 = -1 }; + enum { gje3SrchThrd_71 = -1 }; + enum { gje3SrchThrd_72 = -1 }; + enum { gje3SrchThrd_73 = -1 }; + enum { gje3SrchThrd_74 = -1 }; + enum { gje3SrchThrd_75 = -1 }; + enum { gje3SrchThrd_76 = -1 }; + enum { gje3SrchThrd_77 = -1 }; + enum { gje3SrchThrd_78 = -1 }; + enum { gje3SrchThrd_79 = -1 }; + enum { gje3SrchThrd_80 = -1 }; + enum { gje3SrchThrd_81 = -1 }; + enum { gje3SrchThrd_82 = -1 }; + enum { gje3SrchThrd_83 = -1 }; + enum { gje3SrchThrd_84 = -1 }; + enum { gje3SrchThrd_85 = -1 }; + enum { gje3SrchThrd_86 = -1 }; + enum { gje3SrchThrd_87 = -1 }; + enum { gje3SrchThrd_88 = -1 }; + enum { gje3SrchThrd_89 = -1 }; + enum { gje3SrchThrd_90 = -1 }; + enum { gje3SrchThrd_91 = -1 }; + enum { gje3SrchThrd_92 = -1 }; + enum { gje3SrchThrd_93 = -1 }; + enum { gje3SrchThrd_94 = -1 }; + enum { gje3SrchThrd_95 = -1 }; + enum { gje3SrchThrd_96 = -1 }; + enum { gje3SrchThrd_97 = -1 }; + enum { gje3SrchThrd_98 = -1 }; + enum { gje3SrchThrd_99 = -1 }; + enum { gje3SrchThrd_100 = -1 }; + enum { gje3SrchThrd_101 = -1 }; + enum { gje3SrchThrd_102 = -1 }; + enum { gje3SrchThrd_103 = -1 }; + enum { gje3SrchThrd_104 = -1 }; + enum { gje3SrchThrd_105 = -1 }; + enum { gje3SrchThrd_106 = -1 }; + enum { gje3SrchThrd_107 = -1 }; + enum { gje3SrchThrd_108 = -1 }; + enum { gje3SrchThrd_109 = -1 }; + + enum { matInv2x2MinBatch = 35000 }; + enum { matInv3x3MinBatch = 35000 }; + enum { matInv4x4MinBatch = 20000 }; + enum { matInv5x5MinBatch = 11000 }; + enum { matInv6x6MinBatch = 9000 }; + enum { matInv7x7MinBatch = 7000 }; + enum { matInv8x8MinBatch = 25000 }; + enum { matInv9x9MinBatch = 0x7fffffff }; + enum { matInv10x10MinBatch= 0x7fffffff }; + enum { matInvMinDim = 2 }; + enum { matInvMaxDim = 8 }; +}; + +template<> class config { +public: + typedef double absValType; + + enum { gje3MinDim = 2 }; + enum { gje3MaxDim = 31 }; + enum { gje3MinBlks = 1 }; + enum { gje3MaxThrds = 640 }; /* sm_13, 25 registers per thread */ + + enum { gje3DimX_00 = -1 }; + enum { gje3DimX_01 = -1 }; + enum { gje3DimX_02 = 2 }; + enum { gje3DimX_03 = 3 }; + enum { gje3DimX_04 = 4 }; + enum { gje3DimX_05 = 3 }; + enum { gje3DimX_06 = 2 }; + enum { gje3DimX_07 = 2 }; + enum { gje3DimX_08 = 2 }; + enum { gje3DimX_09 = 3 }; + enum { gje3DimX_10 = 3 }; + enum { gje3DimX_11 = 3 }; + enum { gje3DimX_12 = 4 }; + enum { gje3DimX_13 = 3 }; + enum { gje3DimX_14 = 3 }; + enum { gje3DimX_15 = 3 }; + enum { gje3DimX_16 = 4 }; + enum { gje3DimX_17 = 4 }; + enum { gje3DimX_18 = 4 }; + enum { gje3DimX_19 = 4 }; + enum { gje3DimX_20 = 4 }; + enum { gje3DimX_21 = 5 }; + enum { gje3DimX_22 = 5 }; + enum { gje3DimX_23 = 6 }; + enum { gje3DimX_24 = 6 }; + enum { gje3DimX_25 = 5 }; + enum { gje3DimX_26 = 6 }; + enum { gje3DimX_27 = 7 }; + enum { gje3DimX_28 = 4 }; + enum { gje3DimX_29 = 6 }; + enum { gje3DimX_30 = 8 }; + enum { gje3DimX_31 = 4 }; + enum { gje3DimX_32 = -1 }; + enum { gje3DimX_33 = -1 }; + enum { gje3DimX_34 = -1 }; + enum { gje3DimX_35 = -1 }; + enum { gje3DimX_36 = -1 }; + enum { gje3DimX_37 = -1 }; + enum { gje3DimX_38 = -1 }; + enum { gje3DimX_39 = -1 }; + enum { gje3DimX_40 = -1 }; + enum { gje3DimX_41 = -1 }; + enum { gje3DimX_42 = -1 }; + enum { gje3DimX_43 = -1 }; + enum { gje3DimX_44 = -1 }; + enum { gje3DimX_45 = -1 }; + enum { gje3DimX_46 = -1 }; + enum { gje3DimX_47 = -1 }; + enum { gje3DimX_48 = -1 }; + enum { gje3DimX_49 = -1 }; + enum { gje3DimX_50 = -1 }; + enum { gje3DimX_51 = -1 }; + enum { gje3DimX_52 = -1 }; + enum { gje3DimX_53 = -1 }; + enum { gje3DimX_54 = -1 }; + enum { gje3DimX_55 = -1 }; + enum { gje3DimX_56 = -1 }; + enum { gje3DimX_57 = -1 }; + enum { gje3DimX_58 = -1 }; + enum { gje3DimX_59 = -1 }; + enum { gje3DimX_60 = -1 }; + enum { gje3DimX_61 = -1 }; + enum { gje3DimX_62 = -1 }; + enum { gje3DimX_63 = -1 }; + enum { gje3DimX_64 = -1 }; + enum { gje3DimX_65 = -1 }; + enum { gje3DimX_66 = -1 }; + enum { gje3DimX_67 = -1 }; + enum { gje3DimX_68 = -1 }; + enum { gje3DimX_69 = -1 }; + enum { gje3DimX_70 = -1 }; + enum { gje3DimX_71 = -1 }; + enum { gje3DimX_72 = -1 }; + enum { gje3DimX_73 = -1 }; + enum { gje3DimX_74 = -1 }; + enum { gje3DimX_75 = -1 }; + enum { gje3DimX_76 = -1 }; + enum { gje3DimX_77 = -1 }; + enum { gje3DimX_78 = -1 }; + enum { gje3DimX_79 = -1 }; + enum { gje3DimX_80 = -1 }; + enum { gje3DimX_81 = -1 }; + enum { gje3DimX_82 = -1 }; + enum { gje3DimX_83 = -1 }; + enum { gje3DimX_84 = -1 }; + enum { gje3DimX_85 = -1 }; + enum { gje3DimX_86 = -1 }; + enum { gje3DimX_87 = -1 }; + enum { gje3DimX_88 = -1 }; + enum { gje3DimX_89 = -1 }; + enum { gje3DimX_90 = -1 }; + enum { gje3DimX_91 = -1 }; + enum { gje3DimX_92 = -1 }; + enum { gje3DimX_93 = -1 }; + enum { gje3DimX_94 = -1 }; + enum { gje3DimX_95 = -1 }; + enum { gje3DimX_96 = -1 }; + enum { gje3DimX_97 = -1 }; + enum { gje3DimX_98 = -1 }; + enum { gje3DimX_99 = -1 }; + enum { gje3DimX_100 = -1 }; + enum { gje3DimX_101 = -1 }; + enum { gje3DimX_102 = -1 }; + enum { gje3DimX_103 = -1 }; + enum { gje3DimX_104 = -1 }; + enum { gje3DimX_105 = -1 }; + enum { gje3DimX_106 = -1 }; + enum { gje3DimX_107 = -1 }; + enum { gje3DimX_108 = -1 }; + enum { gje3DimX_109 = -1 }; + + enum { gje3Pad_00 = 0 }; + enum { gje3Pad_01 = 0 }; + enum { gje3Pad_02 = 0 }; + enum { gje3Pad_03 = 0 }; + enum { gje3Pad_04 = 1 }; + enum { gje3Pad_05 = 0 }; + enum { gje3Pad_06 = 1 }; + enum { gje3Pad_07 = 0 }; + enum { gje3Pad_08 = 1 }; + enum { gje3Pad_09 = 2 }; + enum { gje3Pad_10 = 1 }; + enum { gje3Pad_11 = 0 }; + enum { gje3Pad_12 = 1 }; + enum { gje3Pad_13 = 0 }; + enum { gje3Pad_14 = 1 }; + enum { gje3Pad_15 = 0 }; + enum { gje3Pad_16 = 1 }; + enum { gje3Pad_17 = 0 }; + enum { gje3Pad_18 = 1 }; + enum { gje3Pad_19 = 0 }; + enum { gje3Pad_20 = 1 }; + enum { gje3Pad_21 = 0 }; + enum { gje3Pad_22 = 0 }; + enum { gje3Pad_23 = 0 }; + enum { gje3Pad_24 = 1 }; + enum { gje3Pad_25 = 0 }; + enum { gje3Pad_26 = 0 }; + enum { gje3Pad_27 = 0 }; + enum { gje3Pad_28 = 1 }; + enum { gje3Pad_29 = 0 }; + enum { gje3Pad_30 = 0 }; + enum { gje3Pad_31 = 0 }; + enum { gje3Pad_32 = 0 }; + enum { gje3Pad_33 = 0 }; + enum { gje3Pad_34 = 0 }; + enum { gje3Pad_35 = 0 }; + enum { gje3Pad_36 = 0 }; + enum { gje3Pad_37 = 0 }; + enum { gje3Pad_38 = 0 }; + enum { gje3Pad_39 = 0 }; + enum { gje3Pad_40 = 0 }; + enum { gje3Pad_41 = 0 }; + enum { gje3Pad_42 = 0 }; + enum { gje3Pad_43 = 0 }; + enum { gje3Pad_44 = 0 }; + enum { gje3Pad_45 = 0 }; + enum { gje3Pad_46 = 0 }; + enum { gje3Pad_47 = 0 }; + enum { gje3Pad_48 = 0 }; + enum { gje3Pad_49 = 0 }; + enum { gje3Pad_50 = 0 }; + enum { gje3Pad_51 = 0 }; + enum { gje3Pad_52 = 0 }; + enum { gje3Pad_53 = 0 }; + enum { gje3Pad_54 = 0 }; + enum { gje3Pad_55 = 0 }; + enum { gje3Pad_56 = 0 }; + enum { gje3Pad_57 = 0 }; + enum { gje3Pad_58 = 0 }; + enum { gje3Pad_59 = 0 }; + enum { gje3Pad_60 = 0 }; + enum { gje3Pad_61 = 0 }; + enum { gje3Pad_62 = 0 }; + enum { gje3Pad_63 = 0 }; + enum { gje3Pad_64 = 0 }; + enum { gje3Pad_65 = 0 }; + enum { gje3Pad_66 = 0 }; + enum { gje3Pad_67 = 0 }; + enum { gje3Pad_68 = 0 }; + enum { gje3Pad_69 = 0 }; + enum { gje3Pad_70 = 0 }; + enum { gje3Pad_71 = 0 }; + enum { gje3Pad_72 = 0 }; + enum { gje3Pad_73 = 0 }; + enum { gje3Pad_74 = 0 }; + enum { gje3Pad_75 = 0 }; + enum { gje3Pad_76 = 0 }; + enum { gje3Pad_77 = 0 }; + enum { gje3Pad_78 = 0 }; + enum { gje3Pad_79 = 0 }; + enum { gje3Pad_80 = 0 }; + enum { gje3Pad_81 = 0 }; + enum { gje3Pad_82 = 0 }; + enum { gje3Pad_83 = 0 }; + enum { gje3Pad_84 = 0 }; + enum { gje3Pad_85 = 0 }; + enum { gje3Pad_86 = 0 }; + enum { gje3Pad_87 = 0 }; + enum { gje3Pad_88 = 0 }; + enum { gje3Pad_89 = 0 }; + enum { gje3Pad_90 = 0 }; + enum { gje3Pad_91 = 0 }; + enum { gje3Pad_92 = 0 }; + enum { gje3Pad_93 = 0 }; + enum { gje3Pad_94 = 0 }; + enum { gje3Pad_95 = 0 }; + enum { gje3Pad_96 = 0 }; + enum { gje3Pad_97 = 0 }; + enum { gje3Pad_98 = 0 }; + enum { gje3Pad_99 = 0 }; + enum { gje3Pad_100 = 0 }; + enum { gje3Pad_101 = 0 }; + enum { gje3Pad_102 = 0 }; + enum { gje3Pad_103 = 0 }; + enum { gje3Pad_104 = 0 }; + enum { gje3Pad_105 = 0 }; + enum { gje3Pad_106 = 0 }; + enum { gje3Pad_107 = 0 }; + enum { gje3Pad_108 = 0 }; + enum { gje3Pad_109 = 0 }; + + enum { gje3SrchThrd_00 = -1 }; + enum { gje3SrchThrd_01 = -1 }; + enum { gje3SrchThrd_02 = 1 }; + enum { gje3SrchThrd_03 = 2 }; + enum { gje3SrchThrd_04 = 2 }; + enum { gje3SrchThrd_05 = 2 }; + enum { gje3SrchThrd_06 = 2 }; + enum { gje3SrchThrd_07 = 2 }; + enum { gje3SrchThrd_08 = 3 }; + enum { gje3SrchThrd_09 = 3 }; + enum { gje3SrchThrd_10 = 3 }; + enum { gje3SrchThrd_11 = 3 }; + enum { gje3SrchThrd_12 = 3 }; + enum { gje3SrchThrd_13 = 3 }; + enum { gje3SrchThrd_14 = 3 }; + enum { gje3SrchThrd_15 = 3 }; + enum { gje3SrchThrd_16 = 3 }; + enum { gje3SrchThrd_17 = 3 }; + enum { gje3SrchThrd_18 = 3 }; + enum { gje3SrchThrd_19 = 3 }; + enum { gje3SrchThrd_20 = 4 }; + enum { gje3SrchThrd_21 = 4 }; + enum { gje3SrchThrd_22 = 4 }; + enum { gje3SrchThrd_23 = 4 }; + enum { gje3SrchThrd_24 = 4 }; + enum { gje3SrchThrd_25 = 4 }; + enum { gje3SrchThrd_26 = 4 }; + enum { gje3SrchThrd_27 = 4 }; + enum { gje3SrchThrd_28 = 4 }; + enum { gje3SrchThrd_29 = 4 }; + enum { gje3SrchThrd_30 = 4 }; + enum { gje3SrchThrd_31 = 4 }; + enum { gje3SrchThrd_32 = -1 }; + enum { gje3SrchThrd_33 = -1 }; + enum { gje3SrchThrd_34 = -1 }; + enum { gje3SrchThrd_35 = -1 }; + enum { gje3SrchThrd_36 = -1 }; + enum { gje3SrchThrd_37 = -1 }; + enum { gje3SrchThrd_38 = -1 }; + enum { gje3SrchThrd_39 = -1 }; + enum { gje3SrchThrd_40 = -1 }; + enum { gje3SrchThrd_41 = -1 }; + enum { gje3SrchThrd_42 = -1 }; + enum { gje3SrchThrd_43 = -1 }; + enum { gje3SrchThrd_44 = -1 }; + enum { gje3SrchThrd_45 = -1 }; + enum { gje3SrchThrd_46 = -1 }; + enum { gje3SrchThrd_47 = -1 }; + enum { gje3SrchThrd_48 = -1 }; + enum { gje3SrchThrd_49 = -1 }; + enum { gje3SrchThrd_50 = -1 }; + enum { gje3SrchThrd_51 = -1 }; + enum { gje3SrchThrd_52 = -1 }; + enum { gje3SrchThrd_53 = -1 }; + enum { gje3SrchThrd_54 = -1 }; + enum { gje3SrchThrd_55 = -1 }; + enum { gje3SrchThrd_56 = -1 }; + enum { gje3SrchThrd_57 = -1 }; + enum { gje3SrchThrd_58 = -1 }; + enum { gje3SrchThrd_59 = -1 }; + enum { gje3SrchThrd_60 = -1 }; + enum { gje3SrchThrd_61 = -1 }; + enum { gje3SrchThrd_62 = -1 }; + enum { gje3SrchThrd_63 = -1 }; + enum { gje3SrchThrd_64 = -1 }; + enum { gje3SrchThrd_65 = -1 }; + enum { gje3SrchThrd_66 = -1 }; + enum { gje3SrchThrd_67 = -1 }; + enum { gje3SrchThrd_68 = -1 }; + enum { gje3SrchThrd_69 = -1 }; + enum { gje3SrchThrd_70 = -1 }; + enum { gje3SrchThrd_71 = -1 }; + enum { gje3SrchThrd_72 = -1 }; + enum { gje3SrchThrd_73 = -1 }; + enum { gje3SrchThrd_74 = -1 }; + enum { gje3SrchThrd_75 = -1 }; + enum { gje3SrchThrd_76 = -1 }; + enum { gje3SrchThrd_77 = -1 }; + enum { gje3SrchThrd_78 = -1 }; + enum { gje3SrchThrd_79 = -1 }; + enum { gje3SrchThrd_80 = -1 }; + enum { gje3SrchThrd_81 = -1 }; + enum { gje3SrchThrd_82 = -1 }; + enum { gje3SrchThrd_83 = -1 }; + enum { gje3SrchThrd_84 = -1 }; + enum { gje3SrchThrd_85 = -1 }; + enum { gje3SrchThrd_86 = -1 }; + enum { gje3SrchThrd_87 = -1 }; + enum { gje3SrchThrd_88 = -1 }; + enum { gje3SrchThrd_89 = -1 }; + enum { gje3SrchThrd_90 = -1 }; + enum { gje3SrchThrd_91 = -1 }; + enum { gje3SrchThrd_92 = -1 }; + enum { gje3SrchThrd_93 = -1 }; + enum { gje3SrchThrd_94 = -1 }; + enum { gje3SrchThrd_95 = -1 }; + enum { gje3SrchThrd_96 = -1 }; + enum { gje3SrchThrd_97 = -1 }; + enum { gje3SrchThrd_98 = -1 }; + enum { gje3SrchThrd_99 = -1 }; + enum { gje3SrchThrd_100 = -1 }; + enum { gje3SrchThrd_101 = -1 }; + enum { gje3SrchThrd_102 = -1 }; + enum { gje3SrchThrd_103 = -1 }; + enum { gje3SrchThrd_104 = -1 }; + enum { gje3SrchThrd_105 = -1 }; + enum { gje3SrchThrd_106 = -1 }; + enum { gje3SrchThrd_107 = -1 }; + enum { gje3SrchThrd_108 = -1 }; + enum { gje3SrchThrd_109 = -1 }; + + enum { matInv2x2MinBatch = 30000 }; + enum { matInv3x3MinBatch = 15000 }; + enum { matInv4x4MinBatch = 11000 }; + enum { matInv5x5MinBatch = 6000 }; + enum { matInv6x6MinBatch = 11000 }; + enum { matInv7x7MinBatch = 17000 }; + enum { matInv8x8MinBatch = 0x7fffffff }; + enum { matInv9x9MinBatch = 0x7fffffff }; + enum { matInv10x10MinBatch= 0x7fffffff }; + enum { matInvMinDim = 2 }; + enum { matInvMaxDim = 7 }; +}; + +/* column-major */ +#define As(row,col) As[(N+ofs)*(col)+(row)] +#define AsInv(row,col) AsInv[(N+ofs)*(col)+(row)] + +#define Ainv(row,col) Ainv[(col)*N+(row)] +#define USE_PIVOTING 1 + +template +__global__ void matinv_2x2_matrix_per_thread (const T *A, T *Ainv, int batch) +{ + const int blkNum = blockIdx.y * gridDim.x + blockIdx.x; + const int thrdNum = blkNum * blockDim.x + threadIdx.x; + const int N = 2; + int perm0, perm1; + int icol0, icol1; + T AA00, AA01; + T AA10, AA11; + T tmp; +#if USE_PIVOTING + typename config::absValType t; + typename config::absValType p; + int i, pvt; +#endif + + A += thrdNum * N * N; + Ainv += thrdNum * N * N; + + if (thrdNum < batch) { + + AA00 = A[0]; + AA10 = A[1]; + AA01 = A[2]; + AA11 = A[3]; + + perm0 = 0; + perm1 = 1; + + /****************** iteration 0 ***********/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA00); + pvt = 0; + t = absOp (AA10); + if (t > p) { p = t; pvt = 1; } + + /* swap pivot row with row 0 */ + if (pvt == 1) { + tmp = AA00; AA00 = AA10; AA10 = tmp; + tmp = AA01; AA01 = AA11; AA11 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm1; perm1 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA00); + icol0 = perm0; + AA00 = tmp; + AA01 = mulOp (tmp, AA01); + + /* eliminate above and below current row */ + tmp = AA10; + AA10 = mulOp (negOp(tmp), AA00); + AA11 = fmnaOp (tmp, AA01, AA11); + + /****************** iteration 1 ***********/ + + /* scale current row */ + tmp = rcpOp (AA11); + icol1 = perm1; + AA10 = mulOp (tmp, AA10); + AA11 = tmp; + + /* eliminate above and below current row */ + tmp = AA01; + AA00 = fmnaOp (tmp, AA10, AA00); + AA01 = mulOp (negOp(tmp), AA11); + + /* sort columns into the correct order */ + Ainv(0,icol0) = AA00; + Ainv(1,icol0) = AA10; + Ainv(0,icol1) = AA01; + Ainv(1,icol1) = AA11; + } +} + +template +__global__ void matinv_3x3_matrix_per_thread (const T *A, T *Ainv, int batch) +{ + const int blkNum = blockIdx.y * gridDim.x + blockIdx.x; + const int thrdNum = blkNum * blockDim.x + threadIdx.x; + const int N = 3; + int perm0, perm1, perm2; + int icol0, icol1, icol2; + T AA00, AA01, AA02; + T AA10, AA11, AA12; + T AA20, AA21, AA22; + T tmp; +#if USE_PIVOTING + typename config::absValType t; + typename config::absValType p; + int i, pvt; +#endif + + A += thrdNum * N * N; + Ainv += thrdNum * N * N; + + if (thrdNum < batch) { + + AA00 = A[0]; + AA10 = A[1]; + AA20 = A[2]; + AA01 = A[3]; + AA11 = A[4]; + AA21 = A[5]; + AA02 = A[6]; + AA12 = A[7]; + AA22 = A[8]; + + perm0 = 0; + perm1 = 1; + perm2 = 2; + + /****************** iteration 0 ***********/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA00); + pvt = 0; + t = absOp (AA10); + if (t > p) { p = t; pvt = 1; } + t = absOp (AA20); + if (t > p) { p = t; pvt = 2; } + + /* swap pivot row with row 0 */ + if (pvt == 1) { + tmp = AA00; AA00 = AA10; AA10 = tmp; + tmp = AA01; AA01 = AA11; AA11 = tmp; + tmp = AA02; AA02 = AA12; AA12 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm1; perm1 = i; + } + if (pvt == 2) { + tmp = AA00; AA00 = AA20; AA20 = tmp; + tmp = AA01; AA01 = AA21; AA21 = tmp; + tmp = AA02; AA02 = AA22; AA22 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm2; perm2 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA00); + icol0 = perm0; + AA00 = tmp; + AA01 = mulOp (tmp, AA01); + AA02 = mulOp (tmp, AA02); + + /* eliminate above and below current row */ + tmp = AA10; + AA10 = mulOp (negOp(tmp), AA00); + AA11 = fmnaOp (tmp, AA01, AA11); + AA12 = fmnaOp (tmp, AA02, AA12); + + tmp = AA20; + AA20 = mulOp (negOp(tmp), AA00); + AA21 = fmnaOp (tmp, AA01, AA21); + AA22 = fmnaOp (tmp, AA02, AA22); + + /****************** iteration 1 ***********/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA11); + pvt = 1; + t = absOp (AA21); + if (t > p) { p = t; pvt = 2; } + + /* swap pivot row with row 1 */ + if (pvt == 2) { + tmp = AA10; AA10 = AA20; AA20 = tmp; + tmp = AA11; AA11 = AA21; AA21 = tmp; + tmp = AA12; AA12 = AA22; AA22 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm2; perm2 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA11); + icol1 = perm1; + AA10 = mulOp (tmp, AA10); + AA11 = tmp; + AA12 = mulOp (tmp, AA12); + + /* eliminate above and below current row */ + tmp = AA01; + AA00 = fmnaOp (tmp, AA10, AA00); + AA01 = mulOp (negOp(tmp), AA11); + AA02 = fmnaOp (tmp, AA12, AA02); + + tmp = AA21; + AA20 = fmnaOp (tmp, AA10, AA20); + AA21 = mulOp (negOp(tmp), AA11); + AA22 = fmnaOp (tmp, AA12, AA22); + + /****************** iteration 2 ****************/ + + /* scale current row */ + tmp = rcpOp (AA22); + icol2 = perm2; + AA20 = mulOp (tmp, AA20); + AA21 = mulOp (tmp, AA21); + AA22 = tmp; + + /* eliminate above and below current row */ + tmp = AA02; + AA00 = fmnaOp (tmp, AA20, AA00); + AA01 = fmnaOp (tmp, AA21, AA01); + AA02 = mulOp (negOp(tmp), AA22); + + tmp = AA12; + AA10 = fmnaOp (tmp, AA20, AA10); + AA11 = fmnaOp (tmp, AA21, AA11); + AA12 = mulOp (negOp(tmp), AA22); + + /* sort columns into the correct order */ + Ainv(0,icol0) = AA00; + Ainv(1,icol0) = AA10; + Ainv(2,icol0) = AA20; + Ainv(0,icol1) = AA01; + Ainv(1,icol1) = AA11; + Ainv(2,icol1) = AA21; + Ainv(0,icol2) = AA02; + Ainv(1,icol2) = AA12; + Ainv(2,icol2) = AA22; + } +} + +template +__global__ void matinv_4x4_matrix_per_thread (const T *A, T *Ainv, int batch) +{ + const int blkNum = blockIdx.y * gridDim.x + blockIdx.x; + const int thrdNum = blkNum * blockDim.x + threadIdx.x; + const int N = 4; + int perm0, perm1, perm2, perm3; + int icol0, icol1, icol2, icol3; + T AA00, AA01, AA02, AA03; + T AA10, AA11, AA12, AA13; + T AA20, AA21, AA22, AA23; + T AA30, AA31, AA32, AA33; + T tmp; +#if USE_PIVOTING + typename config::absValType t; + typename config::absValType p; + int i, pvt; +#endif + + A += thrdNum * N * N; + Ainv += thrdNum * N * N; + + if (thrdNum < batch) { + + AA00 = A[0]; + AA10 = A[1]; + AA20 = A[2]; + AA30 = A[3]; + AA01 = A[4]; + AA11 = A[5]; + AA21 = A[6]; + AA31 = A[7]; + AA02 = A[8]; + AA12 = A[9]; + AA22 = A[10]; + AA32 = A[11]; + AA03 = A[12]; + AA13 = A[13]; + AA23 = A[14]; + AA33 = A[15]; + + perm0 = 0; + perm1 = 1; + perm2 = 2; + perm3 = 3; + + /****************** iteration 0 ***********/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA00); + pvt = 0; + t = absOp (AA10); + if (t > p) { p = t; pvt = 1; } + t = absOp (AA20); + if (t > p) { p = t; pvt = 2; } + t = absOp (AA30); + if (t > p) { p = t; pvt = 3; } + + /* swap pivot row with row 0 */ + if (pvt == 1) { + tmp = AA00; AA00 = AA10; AA10 = tmp; + tmp = AA01; AA01 = AA11; AA11 = tmp; + tmp = AA02; AA02 = AA12; AA12 = tmp; + tmp = AA03; AA03 = AA13; AA13 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm1; perm1 = i; + } + if (pvt == 2) { + tmp = AA00; AA00 = AA20; AA20 = tmp; + tmp = AA01; AA01 = AA21; AA21 = tmp; + tmp = AA02; AA02 = AA22; AA22 = tmp; + tmp = AA03; AA03 = AA23; AA23 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm2; perm2 = i; + } + if (pvt == 3) { + tmp = AA00; AA00 = AA30; AA30 = tmp; + tmp = AA01; AA01 = AA31; AA31 = tmp; + tmp = AA02; AA02 = AA32; AA32 = tmp; + tmp = AA03; AA03 = AA33; AA33 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm3; perm3 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA00); + icol0 = perm0; + AA00 = tmp; + AA01 = mulOp (tmp, AA01); + AA02 = mulOp (tmp, AA02); + AA03 = mulOp (tmp, AA03); + + /* eliminate above and below current row */ + tmp = AA10; + AA10 = mulOp (negOp(tmp), AA00); + AA11 = fmnaOp (tmp, AA01, AA11); + AA12 = fmnaOp (tmp, AA02, AA12); + AA13 = fmnaOp (tmp, AA03, AA13); + + tmp = AA20; + AA20 = mulOp (negOp(tmp), AA00); + AA21 = fmnaOp (tmp, AA01, AA21); + AA22 = fmnaOp (tmp, AA02, AA22); + AA23 = fmnaOp (tmp, AA03, AA23); + + tmp = AA30; + AA30 = mulOp (negOp(tmp), AA00); + AA31 = fmnaOp (tmp, AA01, AA31); + AA32 = fmnaOp (tmp, AA02, AA32); + AA33 = fmnaOp (tmp, AA03, AA33); + + + /****************** iteration 1 ***********/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA11); + pvt = 1; + t = absOp (AA21); + if (t > p) { p = t; pvt = 2; } + t = absOp (AA31); + if (t > p) { p = t; pvt = 3; } + + /* swap pivot row with row 1 */ + if (pvt == 2) { + tmp = AA10; AA10 = AA20; AA20 = tmp; + tmp = AA11; AA11 = AA21; AA21 = tmp; + tmp = AA12; AA12 = AA22; AA22 = tmp; + tmp = AA13; AA13 = AA23; AA23 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm2; perm2 = i; + } + if (pvt == 3) { + tmp = AA10; AA10 = AA30; AA30 = tmp; + tmp = AA11; AA11 = AA31; AA31 = tmp; + tmp = AA12; AA12 = AA32; AA32 = tmp; + tmp = AA13; AA13 = AA33; AA33 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm3; perm3 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA11); + icol1 = perm1; + AA10 = mulOp (tmp, AA10); + AA11 = tmp; + AA12 = mulOp (tmp, AA12); + AA13 = mulOp (tmp, AA13); + + /* eliminate above and below current row */ + tmp = AA01; + AA00 = fmnaOp (tmp, AA10, AA00); + AA01 = mulOp (negOp(tmp), AA11); + AA02 = fmnaOp (tmp, AA12, AA02); + AA03 = fmnaOp (tmp, AA13, AA03); + + tmp = AA21; + AA20 = fmnaOp (tmp, AA10, AA20); + AA21 = mulOp (negOp(tmp), AA11); + AA22 = fmnaOp (tmp, AA12, AA22); + AA23 = fmnaOp (tmp, AA13, AA23); + + tmp = AA31; + AA30 = fmnaOp (tmp, AA10, AA30); + AA31 = mulOp (negOp(tmp), AA11); + AA32 = fmnaOp (tmp, AA12, AA32); + AA33 = fmnaOp (tmp, AA13, AA33); + + /****************** iteration 2 ****************/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA22); + pvt = 2; + t = absOp (AA32); + if (t > p) { p = t; pvt = 3; } + + /* swap pivot row with row 2 */ + if (pvt == 3) { + tmp = AA20; AA20 = AA30; AA30 = tmp; + tmp = AA21; AA21 = AA31; AA31 = tmp; + tmp = AA22; AA22 = AA32; AA32 = tmp; + tmp = AA23; AA23 = AA33; AA33 = tmp; + /* update permutation vector based on row swap */ + i = perm2; perm2 = perm3; perm3 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA22); + icol2 = perm2; + AA20 = mulOp (tmp, AA20); + AA21 = mulOp (tmp, AA21); + AA22 = tmp; + AA23 = mulOp (tmp, AA23); + + /* eliminate above and below current row */ + tmp = AA02; + AA00 = fmnaOp (tmp, AA20, AA00); + AA01 = fmnaOp (tmp, AA21, AA01); + AA02 = mulOp (negOp(tmp), AA22); + AA03 = fmnaOp (tmp, AA23, AA03); + + tmp = AA12; + AA10 = fmnaOp (tmp, AA20, AA10); + AA11 = fmnaOp (tmp, AA21, AA11); + AA12 = mulOp (negOp(tmp), AA22); + AA13 = fmnaOp (tmp, AA23, AA13); + + tmp = AA32; + AA30 = fmnaOp (tmp, AA20, AA30); + AA31 = fmnaOp (tmp, AA21, AA31); + AA32 = mulOp (negOp(tmp), AA22); + AA33 = fmnaOp (tmp, AA23, AA33); + + /****************** iteration 3 ****************/ + + /* scale current row */ + tmp = rcpOp (AA33); + icol3 = perm3; + AA30 = mulOp (tmp, AA30); + AA31 = mulOp (tmp, AA31); + AA32 = mulOp (tmp, AA32); + AA33 = tmp; + + /* eliminate above and below current row */ + tmp = AA03; + AA00 = fmnaOp (tmp, AA30, AA00); + AA01 = fmnaOp (tmp, AA31, AA01); + AA02 = fmnaOp (tmp, AA32, AA02); + AA03 = mulOp (negOp(tmp), AA33); + + tmp = AA13; + AA10 = fmnaOp (tmp, AA30, AA10); + AA11 = fmnaOp (tmp, AA31, AA11); + AA12 = fmnaOp (tmp, AA32, AA12); + AA13 = mulOp (negOp(tmp), AA33); + + tmp = AA23; + AA20 = fmnaOp (tmp, AA30, AA20); + AA21 = fmnaOp (tmp, AA31, AA21); + AA22 = fmnaOp (tmp, AA32, AA22); + AA23 = mulOp (negOp(tmp), AA33); + + /* sort columns into the correct order */ + Ainv(0,icol0) = AA00; + Ainv(1,icol0) = AA10; + Ainv(2,icol0) = AA20; + Ainv(3,icol0) = AA30; + Ainv(0,icol1) = AA01; + Ainv(1,icol1) = AA11; + Ainv(2,icol1) = AA21; + Ainv(3,icol1) = AA31; + Ainv(0,icol2) = AA02; + Ainv(1,icol2) = AA12; + Ainv(2,icol2) = AA22; + Ainv(3,icol2) = AA32; + Ainv(0,icol3) = AA03; + Ainv(1,icol3) = AA13; + Ainv(2,icol3) = AA23; + Ainv(3,icol3) = AA33; + } +} + +template +__global__ void matinv_5x5_matrix_per_thread (const T *A, T *Ainv, int batch) +{ + const int blkNum = blockIdx.y * gridDim.x + blockIdx.x; + const int thrdNum = blkNum * blockDim.x + threadIdx.x; + const int N = 5; + int perm0, perm1, perm2, perm3, perm4; + int icol0, icol1, icol2, icol3, icol4; + T AA00, AA01, AA02, AA03, AA04; + T AA10, AA11, AA12, AA13, AA14; + T AA20, AA21, AA22, AA23, AA24; + T AA30, AA31, AA32, AA33, AA34; + T AA40, AA41, AA42, AA43, AA44; + T tmp; +#if USE_PIVOTING + typename config::absValType t; + typename config::absValType p; + int i, pvt; +#endif + + A += thrdNum * N * N; + Ainv += thrdNum * N * N; + + if (thrdNum < batch) { + + AA00 = A[0]; + AA10 = A[1]; + AA20 = A[2]; + AA30 = A[3]; + AA40 = A[4]; + AA01 = A[5]; + AA11 = A[6]; + AA21 = A[7]; + AA31 = A[8]; + AA41 = A[9]; + AA02 = A[10]; + AA12 = A[11]; + AA22 = A[12]; + AA32 = A[13]; + AA42 = A[14]; + AA03 = A[15]; + AA13 = A[16]; + AA23 = A[17]; + AA33 = A[18]; + AA43 = A[19]; + AA04 = A[20]; + AA14 = A[21]; + AA24 = A[22]; + AA34 = A[23]; + AA44 = A[24]; + + perm0 = 0; + perm1 = 1; + perm2 = 2; + perm3 = 3; + perm4 = 4; + + /****************** iteration 0 ***********/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA00); + pvt = 0; + t = absOp (AA10); + if (t > p) { p = t; pvt = 1; } + t = absOp (AA20); + if (t > p) { p = t; pvt = 2; } + t = absOp (AA30); + if (t > p) { p = t; pvt = 3; } + t = absOp (AA40); + if (t > p) { p = t; pvt = 4; } + + /* swap pivot row with row 0 */ + if (pvt == 1) { + tmp = AA00; AA00 = AA10; AA10 = tmp; + tmp = AA01; AA01 = AA11; AA11 = tmp; + tmp = AA02; AA02 = AA12; AA12 = tmp; + tmp = AA03; AA03 = AA13; AA13 = tmp; + tmp = AA04; AA04 = AA14; AA14 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm1; perm1 = i; + } + if (pvt == 2) { + tmp = AA00; AA00 = AA20; AA20 = tmp; + tmp = AA01; AA01 = AA21; AA21 = tmp; + tmp = AA02; AA02 = AA22; AA22 = tmp; + tmp = AA03; AA03 = AA23; AA23 = tmp; + tmp = AA04; AA04 = AA24; AA24 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm2; perm2 = i; + } + if (pvt == 3) { + tmp = AA00; AA00 = AA30; AA30 = tmp; + tmp = AA01; AA01 = AA31; AA31 = tmp; + tmp = AA02; AA02 = AA32; AA32 = tmp; + tmp = AA03; AA03 = AA33; AA33 = tmp; + tmp = AA04; AA04 = AA34; AA34 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm3; perm3 = i; + } + if (pvt == 4) { + tmp = AA00; AA00 = AA40; AA40 = tmp; + tmp = AA01; AA01 = AA41; AA41 = tmp; + tmp = AA02; AA02 = AA42; AA42 = tmp; + tmp = AA03; AA03 = AA43; AA43 = tmp; + tmp = AA04; AA04 = AA44; AA44 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm4; perm4 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA00); + icol0 = perm0; + AA00 = tmp; + AA01 = mulOp (tmp, AA01); + AA02 = mulOp (tmp, AA02); + AA03 = mulOp (tmp, AA03); + AA04 = mulOp (tmp, AA04); + + /* eliminate above and below current row */ + tmp = AA10; + AA10 = mulOp (negOp(tmp), AA00); + AA11 = fmnaOp (tmp, AA01, AA11); + AA12 = fmnaOp (tmp, AA02, AA12); + AA13 = fmnaOp (tmp, AA03, AA13); + AA14 = fmnaOp (tmp, AA04, AA14); + + tmp = AA20; + AA20 = mulOp (negOp(tmp), AA00); + AA21 = fmnaOp (tmp, AA01, AA21); + AA22 = fmnaOp (tmp, AA02, AA22); + AA23 = fmnaOp (tmp, AA03, AA23); + AA24 = fmnaOp (tmp, AA04, AA24); + + tmp = AA30; + AA30 = mulOp (negOp(tmp), AA00); + AA31 = fmnaOp (tmp, AA01, AA31); + AA32 = fmnaOp (tmp, AA02, AA32); + AA33 = fmnaOp (tmp, AA03, AA33); + AA34 = fmnaOp (tmp, AA04, AA34); + + tmp = AA40; + AA40 = mulOp (negOp(tmp), AA00); + AA41 = fmnaOp (tmp, AA01, AA41); + AA42 = fmnaOp (tmp, AA02, AA42); + AA43 = fmnaOp (tmp, AA03, AA43); + AA44 = fmnaOp (tmp, AA04, AA44); + + /****************** iteration 1 ***********/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA11); + pvt = 1; + t = absOp (AA21); + if (t > p) { p = t; pvt = 2; } + t = absOp (AA31); + if (t > p) { p = t; pvt = 3; } + t = absOp (AA41); + if (t > p) { p = t; pvt = 4; } + + /* swap pivot row with row 1 */ + if (pvt == 2) { + tmp = AA10; AA10 = AA20; AA20 = tmp; + tmp = AA11; AA11 = AA21; AA21 = tmp; + tmp = AA12; AA12 = AA22; AA22 = tmp; + tmp = AA13; AA13 = AA23; AA23 = tmp; + tmp = AA14; AA14 = AA24; AA24 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm2; perm2 = i; + } + if (pvt == 3) { + tmp = AA10; AA10 = AA30; AA30 = tmp; + tmp = AA11; AA11 = AA31; AA31 = tmp; + tmp = AA12; AA12 = AA32; AA32 = tmp; + tmp = AA13; AA13 = AA33; AA33 = tmp; + tmp = AA14; AA14 = AA34; AA34 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm3; perm3 = i; + } + if (pvt == 4) { + tmp = AA10; AA10 = AA40; AA40 = tmp; + tmp = AA11; AA11 = AA41; AA41 = tmp; + tmp = AA12; AA12 = AA42; AA42 = tmp; + tmp = AA13; AA13 = AA43; AA43 = tmp; + tmp = AA14; AA14 = AA44; AA44 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm4; perm4 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA11); + icol1 = perm1; + AA10 = mulOp (tmp, AA10); + AA11 = tmp; + AA12 = mulOp (tmp, AA12); + AA13 = mulOp (tmp, AA13); + AA14 = mulOp (tmp, AA14); + + /* eliminate above and below current row */ + tmp = AA01; + AA00 = fmnaOp (tmp, AA10, AA00); + AA01 = mulOp (negOp(tmp), AA11); + AA02 = fmnaOp (tmp, AA12, AA02); + AA03 = fmnaOp (tmp, AA13, AA03); + AA04 = fmnaOp (tmp, AA14, AA04); + + tmp = AA21; + AA20 = fmnaOp (tmp, AA10, AA20); + AA21 = mulOp (negOp(tmp), AA11); + AA22 = fmnaOp (tmp, AA12, AA22); + AA23 = fmnaOp (tmp, AA13, AA23); + AA24 = fmnaOp (tmp, AA14, AA24); + + tmp = AA31; + AA30 = fmnaOp (tmp, AA10, AA30); + AA31 = mulOp (negOp(tmp), AA11); + AA32 = fmnaOp (tmp, AA12, AA32); + AA33 = fmnaOp (tmp, AA13, AA33); + AA34 = fmnaOp (tmp, AA14, AA34); + + tmp = AA41; + AA40 = fmnaOp (tmp, AA10, AA40); + AA41 = mulOp (negOp(tmp), AA11); + AA42 = fmnaOp (tmp, AA12, AA42); + AA43 = fmnaOp (tmp, AA13, AA43); + AA44 = fmnaOp (tmp, AA14, AA44); + + /****************** iteration 2 ****************/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA22); + pvt = 2; + t = absOp (AA32); + if (t > p) { p = t; pvt = 3; } + t = absOp (AA42); + if (t > p) { p = t; pvt = 4; } + + /* swap pivot row with row 2 */ + if (pvt == 3) { + tmp = AA20; AA20 = AA30; AA30 = tmp; + tmp = AA21; AA21 = AA31; AA31 = tmp; + tmp = AA22; AA22 = AA32; AA32 = tmp; + tmp = AA23; AA23 = AA33; AA33 = tmp; + tmp = AA24; AA24 = AA34; AA34 = tmp; + /* update permutation vector based on row swap */ + i = perm2; perm2 = perm3; perm3 = i; + } + if (pvt == 4) { + tmp = AA20; AA20 = AA40; AA40 = tmp; + tmp = AA21; AA21 = AA41; AA41 = tmp; + tmp = AA22; AA22 = AA42; AA42 = tmp; + tmp = AA23; AA23 = AA43; AA43 = tmp; + tmp = AA24; AA24 = AA44; AA44 = tmp; + /* update permutation vector based on row swap */ + i = perm2; perm2 = perm4; perm4 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA22); + icol2 = perm2; + AA20 = mulOp (tmp, AA20); + AA21 = mulOp (tmp, AA21); + AA22 = tmp; + AA23 = mulOp (tmp, AA23); + AA24 = mulOp (tmp, AA24); + + /* eliminate above and below current row */ + tmp = AA02; + AA00 = fmnaOp (tmp, AA20, AA00); + AA01 = fmnaOp (tmp, AA21, AA01); + AA02 = mulOp (negOp(tmp), AA22); + AA03 = fmnaOp (tmp, AA23, AA03); + AA04 = fmnaOp (tmp, AA24, AA04); + + tmp = AA12; + AA10 = fmnaOp (tmp, AA20, AA10); + AA11 = fmnaOp (tmp, AA21, AA11); + AA12 = mulOp (negOp(tmp), AA22); + AA13 = fmnaOp (tmp, AA23, AA13); + AA14 = fmnaOp (tmp, AA24, AA14); + + tmp = AA32; + AA30 = fmnaOp (tmp, AA20, AA30); + AA31 = fmnaOp (tmp, AA21, AA31); + AA32 = mulOp (negOp(tmp), AA22); + AA33 = fmnaOp (tmp, AA23, AA33); + AA34 = fmnaOp (tmp, AA24, AA34); + + tmp = AA42; + AA40 = fmnaOp (tmp, AA20, AA40); + AA41 = fmnaOp (tmp, AA21, AA41); + AA42 = mulOp (negOp(tmp), AA22); + AA43 = fmnaOp (tmp, AA23, AA43); + AA44 = fmnaOp (tmp, AA24, AA44); + + /****************** iteration 3 ****************/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA33); + pvt = 3; + t = absOp (AA43); + if (t > p) { p = t; pvt = 4; } + + /* swap pivot row with row 3 */ + if (pvt == 4) { + tmp = AA30; AA30 = AA40; AA40 = tmp; + tmp = AA31; AA31 = AA41; AA41 = tmp; + tmp = AA32; AA32 = AA42; AA42 = tmp; + tmp = AA33; AA33 = AA43; AA43 = tmp; + tmp = AA34; AA34 = AA44; AA44 = tmp; + /* update permutation vector based on row swap */ + i = perm3; perm3 = perm4; perm4 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA33); + icol3 = perm3; + AA30 = mulOp (tmp, AA30); + AA31 = mulOp (tmp, AA31); + AA32 = mulOp (tmp, AA32); + AA33 = tmp; + AA34 = mulOp (tmp, AA34); + + /* eliminate above and below current row */ + tmp = AA03; + AA00 = fmnaOp (tmp, AA30, AA00); + AA01 = fmnaOp (tmp, AA31, AA01); + AA02 = fmnaOp (tmp, AA32, AA02); + AA03 = mulOp (negOp(tmp), AA33); + AA04 = fmnaOp (tmp, AA34, AA04); + + tmp = AA13; + AA10 = fmnaOp (tmp, AA30, AA10); + AA11 = fmnaOp (tmp, AA31, AA11); + AA12 = fmnaOp (tmp, AA32, AA12); + AA13 = mulOp (negOp(tmp), AA33); + AA14 = fmnaOp (tmp, AA34, AA14); + + tmp = AA23; + AA20 = fmnaOp (tmp, AA30, AA20); + AA21 = fmnaOp (tmp, AA31, AA21); + AA22 = fmnaOp (tmp, AA32, AA22); + AA23 = mulOp (negOp(tmp), AA33); + AA24 = fmnaOp (tmp, AA34, AA24); + + tmp = AA43; + AA40 = fmnaOp (tmp, AA30, AA40); + AA41 = fmnaOp (tmp, AA31, AA41); + AA42 = fmnaOp (tmp, AA32, AA42); + AA43 = mulOp (negOp(tmp), AA33); + AA44 = fmnaOp (tmp, AA34, AA44); + + + /****************** iteration 4 ****************/ + + /* scale current row */ + tmp = rcpOp (AA44); + icol4 = perm4; + AA40 = mulOp (tmp, AA40); + AA41 = mulOp (tmp, AA41); + AA42 = mulOp (tmp, AA42); + AA43 = mulOp (tmp, AA43); + AA44 = tmp; + + /* eliminate above and below current row */ + tmp = AA04; + AA00 = fmnaOp (tmp, AA40, AA00); + AA01 = fmnaOp (tmp, AA41, AA01); + AA02 = fmnaOp (tmp, AA42, AA02); + AA03 = fmnaOp (tmp, AA43, AA03); + AA04 = mulOp (negOp(tmp), AA44); + + tmp = AA14; + AA10 = fmnaOp (tmp, AA40, AA10); + AA11 = fmnaOp (tmp, AA41, AA11); + AA12 = fmnaOp (tmp, AA42, AA12); + AA13 = fmnaOp (tmp, AA43, AA13); + AA14 = mulOp (negOp(tmp), AA44); + + tmp = AA24; + AA20 = fmnaOp (tmp, AA40, AA20); + AA21 = fmnaOp (tmp, AA41, AA21); + AA22 = fmnaOp (tmp, AA42, AA22); + AA23 = fmnaOp (tmp, AA43, AA23); + AA24 = mulOp (negOp(tmp), AA44); + + tmp = AA34; + AA30 = fmnaOp (tmp, AA40, AA30); + AA31 = fmnaOp (tmp, AA41, AA31); + AA32 = fmnaOp (tmp, AA42, AA32); + AA33 = fmnaOp (tmp, AA43, AA33); + AA34 = mulOp (negOp(tmp), AA44); + + /* sort columns into the correct order */ + Ainv(0,icol0) = AA00; + Ainv(1,icol0) = AA10; + Ainv(2,icol0) = AA20; + Ainv(3,icol0) = AA30; + Ainv(4,icol0) = AA40; + Ainv(0,icol1) = AA01; + Ainv(1,icol1) = AA11; + Ainv(2,icol1) = AA21; + Ainv(3,icol1) = AA31; + Ainv(4,icol1) = AA41; + Ainv(0,icol2) = AA02; + Ainv(1,icol2) = AA12; + Ainv(2,icol2) = AA22; + Ainv(3,icol2) = AA32; + Ainv(4,icol2) = AA42; + Ainv(0,icol3) = AA03; + Ainv(1,icol3) = AA13; + Ainv(2,icol3) = AA23; + Ainv(3,icol3) = AA33; + Ainv(4,icol3) = AA43; + Ainv(0,icol4) = AA04; + Ainv(1,icol4) = AA14; + Ainv(2,icol4) = AA24; + Ainv(3,icol4) = AA34; + Ainv(4,icol4) = AA44; + } +} + +template +__global__ void matinv_6x6_matrix_per_thread (const T *A, T *Ainv, int batch) +{ + const int blkNum = blockIdx.y * gridDim.x + blockIdx.x; + const int thrdNum = blkNum * blockDim.x + threadIdx.x; + const int N = 6; + int perm0, perm1, perm2, perm3, perm4, perm5; + int icol0, icol1, icol2, icol3, icol4, icol5; + T AA00, AA01, AA02, AA03, AA04, AA05; + T AA10, AA11, AA12, AA13, AA14, AA15; + T AA20, AA21, AA22, AA23, AA24, AA25; + T AA30, AA31, AA32, AA33, AA34, AA35; + T AA40, AA41, AA42, AA43, AA44, AA45; + T AA50, AA51, AA52, AA53, AA54, AA55; + T tmp; +#if USE_PIVOTING + typename config::absValType t; + typename config::absValType p; + int i, pvt; +#endif + + A += thrdNum * N * N; + Ainv += thrdNum * N * N; + + if (thrdNum < batch) { + + AA00 = A[0]; + AA10 = A[1]; + AA20 = A[2]; + AA30 = A[3]; + AA40 = A[4]; + AA50 = A[5]; + AA01 = A[6]; + AA11 = A[7]; + AA21 = A[8]; + AA31 = A[9]; + AA41 = A[10]; + AA51 = A[11]; + AA02 = A[12]; + AA12 = A[13]; + AA22 = A[14]; + AA32 = A[15]; + AA42 = A[16]; + AA52 = A[17]; + AA03 = A[18]; + AA13 = A[19]; + AA23 = A[20]; + AA33 = A[21]; + AA43 = A[22]; + AA53 = A[23]; + AA04 = A[24]; + AA14 = A[25]; + AA24 = A[26]; + AA34 = A[27]; + AA44 = A[28]; + AA54 = A[29]; + AA05 = A[30]; + AA15 = A[31]; + AA25 = A[32]; + AA35 = A[33]; + AA45 = A[34]; + AA55 = A[35]; + + perm0 = 0; + perm1 = 1; + perm2 = 2; + perm3 = 3; + perm4 = 4; + perm5 = 5; + + /****************** iteration 0 ***********/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA00); + pvt = 0; + t = absOp (AA10); + if (t > p) { p = t; pvt = 1; } + t = absOp (AA20); + if (t > p) { p = t; pvt = 2; } + t = absOp (AA30); + if (t > p) { p = t; pvt = 3; } + t = absOp (AA40); + if (t > p) { p = t; pvt = 4; } + t = absOp (AA50); + if (t > p) { p = t; pvt = 5; } + + /* swap pivot row with row 0 */ + if (pvt == 1) { + tmp = AA00; AA00 = AA10; AA10 = tmp; + tmp = AA01; AA01 = AA11; AA11 = tmp; + tmp = AA02; AA02 = AA12; AA12 = tmp; + tmp = AA03; AA03 = AA13; AA13 = tmp; + tmp = AA04; AA04 = AA14; AA14 = tmp; + tmp = AA05; AA05 = AA15; AA15 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm1; perm1 = i; + } + if (pvt == 2) { + tmp = AA00; AA00 = AA20; AA20 = tmp; + tmp = AA01; AA01 = AA21; AA21 = tmp; + tmp = AA02; AA02 = AA22; AA22 = tmp; + tmp = AA03; AA03 = AA23; AA23 = tmp; + tmp = AA04; AA04 = AA24; AA24 = tmp; + tmp = AA05; AA05 = AA25; AA25 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm2; perm2 = i; + } + if (pvt == 3) { + tmp = AA00; AA00 = AA30; AA30 = tmp; + tmp = AA01; AA01 = AA31; AA31 = tmp; + tmp = AA02; AA02 = AA32; AA32 = tmp; + tmp = AA03; AA03 = AA33; AA33 = tmp; + tmp = AA04; AA04 = AA34; AA34 = tmp; + tmp = AA05; AA05 = AA35; AA35 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm3; perm3 = i; + } + if (pvt == 4) { + tmp = AA00; AA00 = AA40; AA40 = tmp; + tmp = AA01; AA01 = AA41; AA41 = tmp; + tmp = AA02; AA02 = AA42; AA42 = tmp; + tmp = AA03; AA03 = AA43; AA43 = tmp; + tmp = AA04; AA04 = AA44; AA44 = tmp; + tmp = AA05; AA05 = AA45; AA45 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm4; perm4 = i; + } + if (pvt == 5) { + tmp = AA00; AA00 = AA50; AA50 = tmp; + tmp = AA01; AA01 = AA51; AA51 = tmp; + tmp = AA02; AA02 = AA52; AA52 = tmp; + tmp = AA03; AA03 = AA53; AA53 = tmp; + tmp = AA04; AA04 = AA54; AA54 = tmp; + tmp = AA05; AA05 = AA55; AA55 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm5; perm5 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA00); + icol0 = perm0; + AA00 = tmp; + AA01 = mulOp (tmp, AA01); + AA02 = mulOp (tmp, AA02); + AA03 = mulOp (tmp, AA03); + AA04 = mulOp (tmp, AA04); + AA05 = mulOp (tmp, AA05); + + /* eliminate above and below current row */ + tmp = AA10; + AA10 = mulOp (negOp(tmp), AA00); + AA11 = fmnaOp (tmp, AA01, AA11); + AA12 = fmnaOp (tmp, AA02, AA12); + AA13 = fmnaOp (tmp, AA03, AA13); + AA14 = fmnaOp (tmp, AA04, AA14); + AA15 = fmnaOp (tmp, AA05, AA15); + + tmp = AA20; + AA20 = mulOp (negOp(tmp), AA00); + AA21 = fmnaOp (tmp, AA01, AA21); + AA22 = fmnaOp (tmp, AA02, AA22); + AA23 = fmnaOp (tmp, AA03, AA23); + AA24 = fmnaOp (tmp, AA04, AA24); + AA25 = fmnaOp (tmp, AA05, AA25); + + tmp = AA30; + AA30 = mulOp (negOp(tmp), AA00); + AA31 = fmnaOp (tmp, AA01, AA31); + AA32 = fmnaOp (tmp, AA02, AA32); + AA33 = fmnaOp (tmp, AA03, AA33); + AA34 = fmnaOp (tmp, AA04, AA34); + AA35 = fmnaOp (tmp, AA05, AA35); + + tmp = AA40; + AA40 = mulOp (negOp(tmp), AA00); + AA41 = fmnaOp (tmp, AA01, AA41); + AA42 = fmnaOp (tmp, AA02, AA42); + AA43 = fmnaOp (tmp, AA03, AA43); + AA44 = fmnaOp (tmp, AA04, AA44); + AA45 = fmnaOp (tmp, AA05, AA45); + + tmp = AA50; + AA50 = mulOp (negOp(tmp), AA00); + AA51 = fmnaOp (tmp, AA01, AA51); + AA52 = fmnaOp (tmp, AA02, AA52); + AA53 = fmnaOp (tmp, AA03, AA53); + AA54 = fmnaOp (tmp, AA04, AA54); + AA55 = fmnaOp (tmp, AA05, AA55); + + /****************** iteration 1 ***********/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA11); + pvt = 1; + t = absOp (AA21); + if (t > p) { p = t; pvt = 2; } + t = absOp (AA31); + if (t > p) { p = t; pvt = 3; } + t = absOp (AA41); + if (t > p) { p = t; pvt = 4; } + t = absOp (AA51); + if (t > p) { p = t; pvt = 5; } + + /* swap pivot row with row 1 */ + if (pvt == 2) { + tmp = AA10; AA10 = AA20; AA20 = tmp; + tmp = AA11; AA11 = AA21; AA21 = tmp; + tmp = AA12; AA12 = AA22; AA22 = tmp; + tmp = AA13; AA13 = AA23; AA23 = tmp; + tmp = AA14; AA14 = AA24; AA24 = tmp; + tmp = AA15; AA15 = AA25; AA25 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm2; perm2 = i; + } + if (pvt == 3) { + tmp = AA10; AA10 = AA30; AA30 = tmp; + tmp = AA11; AA11 = AA31; AA31 = tmp; + tmp = AA12; AA12 = AA32; AA32 = tmp; + tmp = AA13; AA13 = AA33; AA33 = tmp; + tmp = AA14; AA14 = AA34; AA34 = tmp; + tmp = AA15; AA15 = AA35; AA35 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm3; perm3 = i; + } + if (pvt == 4) { + tmp = AA10; AA10 = AA40; AA40 = tmp; + tmp = AA11; AA11 = AA41; AA41 = tmp; + tmp = AA12; AA12 = AA42; AA42 = tmp; + tmp = AA13; AA13 = AA43; AA43 = tmp; + tmp = AA14; AA14 = AA44; AA44 = tmp; + tmp = AA15; AA15 = AA45; AA45 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm4; perm4 = i; + } + if (pvt == 5) { + tmp = AA10; AA10 = AA50; AA50 = tmp; + tmp = AA11; AA11 = AA51; AA51 = tmp; + tmp = AA12; AA12 = AA52; AA52 = tmp; + tmp = AA13; AA13 = AA53; AA53 = tmp; + tmp = AA14; AA14 = AA54; AA54 = tmp; + tmp = AA15; AA15 = AA55; AA55 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm5; perm5 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA11); + icol1 = perm1; + AA10 = mulOp (tmp, AA10); + AA11 = tmp; + AA12 = mulOp (tmp, AA12); + AA13 = mulOp (tmp, AA13); + AA14 = mulOp (tmp, AA14); + AA15 = mulOp (tmp, AA15); + + /* eliminate above and below current row */ + tmp = AA01; + AA00 = fmnaOp (tmp, AA10, AA00); + AA01 = mulOp (negOp(tmp), AA11); + AA02 = fmnaOp (tmp, AA12, AA02); + AA03 = fmnaOp (tmp, AA13, AA03); + AA04 = fmnaOp (tmp, AA14, AA04); + AA05 = fmnaOp (tmp, AA15, AA05); + + tmp = AA21; + AA20 = fmnaOp (tmp, AA10, AA20); + AA21 = mulOp (negOp(tmp), AA11); + AA22 = fmnaOp (tmp, AA12, AA22); + AA23 = fmnaOp (tmp, AA13, AA23); + AA24 = fmnaOp (tmp, AA14, AA24); + AA25 = fmnaOp (tmp, AA15, AA25); + + tmp = AA31; + AA30 = fmnaOp (tmp, AA10, AA30); + AA31 = mulOp (negOp(tmp), AA11); + AA32 = fmnaOp (tmp, AA12, AA32); + AA33 = fmnaOp (tmp, AA13, AA33); + AA34 = fmnaOp (tmp, AA14, AA34); + AA35 = fmnaOp (tmp, AA15, AA35); + + tmp = AA41; + AA40 = fmnaOp (tmp, AA10, AA40); + AA41 = mulOp (negOp(tmp), AA11); + AA42 = fmnaOp (tmp, AA12, AA42); + AA43 = fmnaOp (tmp, AA13, AA43); + AA44 = fmnaOp (tmp, AA14, AA44); + AA45 = fmnaOp (tmp, AA15, AA45); + + tmp = AA51; + AA50 = fmnaOp (tmp, AA10, AA50); + AA51 = mulOp (negOp(tmp), AA11); + AA52 = fmnaOp (tmp, AA12, AA52); + AA53 = fmnaOp (tmp, AA13, AA53); + AA54 = fmnaOp (tmp, AA14, AA54); + AA55 = fmnaOp (tmp, AA15, AA55); + + /****************** iteration 2 ****************/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA22); + pvt = 2; + t = absOp (AA32); + if (t > p) { p = t; pvt = 3; } + t = absOp (AA42); + if (t > p) { p = t; pvt = 4; } + t = absOp (AA52); + if (t > p) { p = t; pvt = 5; } + + /* swap pivot row with row 2 */ + if (pvt == 3) { + tmp = AA20; AA20 = AA30; AA30 = tmp; + tmp = AA21; AA21 = AA31; AA31 = tmp; + tmp = AA22; AA22 = AA32; AA32 = tmp; + tmp = AA23; AA23 = AA33; AA33 = tmp; + tmp = AA24; AA24 = AA34; AA34 = tmp; + tmp = AA25; AA25 = AA35; AA35 = tmp; + /* update permutation vector based on row swap */ + i = perm2; perm2 = perm3; perm3 = i; + } + if (pvt == 4) { + tmp = AA20; AA20 = AA40; AA40 = tmp; + tmp = AA21; AA21 = AA41; AA41 = tmp; + tmp = AA22; AA22 = AA42; AA42 = tmp; + tmp = AA23; AA23 = AA43; AA43 = tmp; + tmp = AA24; AA24 = AA44; AA44 = tmp; + tmp = AA25; AA25 = AA45; AA45 = tmp; + /* update permutation vector based on row swap */ + i = perm2; perm2 = perm4; perm4 = i; + } + if (pvt == 5) { + tmp = AA20; AA20 = AA50; AA50 = tmp; + tmp = AA21; AA21 = AA51; AA51 = tmp; + tmp = AA22; AA22 = AA52; AA52 = tmp; + tmp = AA23; AA23 = AA53; AA53 = tmp; + tmp = AA24; AA24 = AA54; AA54 = tmp; + tmp = AA25; AA25 = AA55; AA55 = tmp; + /* update permutation vector based on row swap */ + i = perm2; perm2 = perm5; perm5 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA22); + icol2 = perm2; + AA20 = mulOp (tmp, AA20); + AA21 = mulOp (tmp, AA21); + AA22 = tmp; + AA23 = mulOp (tmp, AA23); + AA24 = mulOp (tmp, AA24); + AA25 = mulOp (tmp, AA25); + + /* eliminate above and below current row */ + tmp = AA02; + AA00 = fmnaOp (tmp, AA20, AA00); + AA01 = fmnaOp (tmp, AA21, AA01); + AA02 = mulOp (negOp(tmp), AA22); + AA03 = fmnaOp (tmp, AA23, AA03); + AA04 = fmnaOp (tmp, AA24, AA04); + AA05 = fmnaOp (tmp, AA25, AA05); + + tmp = AA12; + AA10 = fmnaOp (tmp, AA20, AA10); + AA11 = fmnaOp (tmp, AA21, AA11); + AA12 = mulOp (negOp(tmp), AA22); + AA13 = fmnaOp (tmp, AA23, AA13); + AA14 = fmnaOp (tmp, AA24, AA14); + AA15 = fmnaOp (tmp, AA25, AA15); + + tmp = AA32; + AA30 = fmnaOp (tmp, AA20, AA30); + AA31 = fmnaOp (tmp, AA21, AA31); + AA32 = mulOp (negOp(tmp), AA22); + AA33 = fmnaOp (tmp, AA23, AA33); + AA34 = fmnaOp (tmp, AA24, AA34); + AA35 = fmnaOp (tmp, AA25, AA35); + + tmp = AA42; + AA40 = fmnaOp (tmp, AA20, AA40); + AA41 = fmnaOp (tmp, AA21, AA41); + AA42 = mulOp (negOp(tmp), AA22); + AA43 = fmnaOp (tmp, AA23, AA43); + AA44 = fmnaOp (tmp, AA24, AA44); + AA45 = fmnaOp (tmp, AA25, AA45); + + tmp = AA52; + AA50 = fmnaOp (tmp, AA20, AA50); + AA51 = fmnaOp (tmp, AA21, AA51); + AA52 = mulOp (negOp(tmp), AA22); + AA53 = fmnaOp (tmp, AA23, AA53); + AA54 = fmnaOp (tmp, AA24, AA54); + AA55 = fmnaOp (tmp, AA25, AA55); + + /****************** iteration 3 ****************/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA33); + pvt = 3; + t = absOp (AA43); + if (t > p) { p = t; pvt = 4; } + t = absOp (AA53); + if (t > p) { p = t; pvt = 5; } + + /* swap pivot row with row 3 */ + if (pvt == 4) { + tmp = AA30; AA30 = AA40; AA40 = tmp; + tmp = AA31; AA31 = AA41; AA41 = tmp; + tmp = AA32; AA32 = AA42; AA42 = tmp; + tmp = AA33; AA33 = AA43; AA43 = tmp; + tmp = AA34; AA34 = AA44; AA44 = tmp; + tmp = AA35; AA35 = AA45; AA45 = tmp; + /* update permutation vector based on row swap */ + i = perm3; perm3 = perm4; perm4 = i; + } + if (pvt == 5) { + tmp = AA30; AA30 = AA50; AA50 = tmp; + tmp = AA31; AA31 = AA51; AA51 = tmp; + tmp = AA32; AA32 = AA52; AA52 = tmp; + tmp = AA33; AA33 = AA53; AA53 = tmp; + tmp = AA34; AA34 = AA54; AA54 = tmp; + tmp = AA35; AA35 = AA55; AA55 = tmp; + /* update permutation vector based on row swap */ + i = perm3; perm3 = perm5; perm5 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA33); + icol3 = perm3; + AA30 = mulOp (tmp, AA30); + AA31 = mulOp (tmp, AA31); + AA32 = mulOp (tmp, AA32); + AA33 = tmp; + AA34 = mulOp (tmp, AA34); + AA35 = mulOp (tmp, AA35); + + /* eliminate above and below current row */ + tmp = AA03; + AA00 = fmnaOp (tmp, AA30, AA00); + AA01 = fmnaOp (tmp, AA31, AA01); + AA02 = fmnaOp (tmp, AA32, AA02); + AA03 = mulOp (negOp(tmp), AA33); + AA04 = fmnaOp (tmp, AA34, AA04); + AA05 = fmnaOp (tmp, AA35, AA05); + + tmp = AA13; + AA10 = fmnaOp (tmp, AA30, AA10); + AA11 = fmnaOp (tmp, AA31, AA11); + AA12 = fmnaOp (tmp, AA32, AA12); + AA13 = mulOp (negOp(tmp), AA33); + AA14 = fmnaOp (tmp, AA34, AA14); + AA15 = fmnaOp (tmp, AA35, AA15); + + tmp = AA23; + AA20 = fmnaOp (tmp, AA30, AA20); + AA21 = fmnaOp (tmp, AA31, AA21); + AA22 = fmnaOp (tmp, AA32, AA22); + AA23 = mulOp (negOp(tmp), AA33); + AA24 = fmnaOp (tmp, AA34, AA24); + AA25 = fmnaOp (tmp, AA35, AA25); + + tmp = AA43; + AA40 = fmnaOp (tmp, AA30, AA40); + AA41 = fmnaOp (tmp, AA31, AA41); + AA42 = fmnaOp (tmp, AA32, AA42); + AA43 = mulOp (negOp(tmp), AA33); + AA44 = fmnaOp (tmp, AA34, AA44); + AA45 = fmnaOp (tmp, AA35, AA45); + + tmp = AA53; + AA50 = fmnaOp (tmp, AA30, AA50); + AA51 = fmnaOp (tmp, AA31, AA51); + AA52 = fmnaOp (tmp, AA32, AA52); + AA53 = mulOp (negOp(tmp), AA33); + AA54 = fmnaOp (tmp, AA34, AA54); + AA55 = fmnaOp (tmp, AA35, AA55); + + /****************** iteration 4 ****************/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA44); + pvt = 4; + t = absOp (AA54); + if (t > p) { p = t; pvt = 5; } + + /* swap pivot row with row 4 */ + if (pvt == 5) { + tmp = AA40; AA40 = AA50; AA50 = tmp; + tmp = AA41; AA41 = AA51; AA51 = tmp; + tmp = AA42; AA42 = AA52; AA52 = tmp; + tmp = AA43; AA43 = AA53; AA53 = tmp; + tmp = AA44; AA44 = AA54; AA54 = tmp; + tmp = AA45; AA45 = AA55; AA55 = tmp; + /* update permutation vector based on row swap */ + i = perm4; perm4 = perm5; perm5 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA44); + icol4 = perm4; + AA40 = mulOp (tmp, AA40); + AA41 = mulOp (tmp, AA41); + AA42 = mulOp (tmp, AA42); + AA43 = mulOp (tmp, AA43); + AA44 = tmp; + AA45 = mulOp (tmp, AA45); + + /* eliminate above and below current row */ + tmp = AA04; + AA00 = fmnaOp (tmp, AA40, AA00); + AA01 = fmnaOp (tmp, AA41, AA01); + AA02 = fmnaOp (tmp, AA42, AA02); + AA03 = fmnaOp (tmp, AA43, AA03); + AA04 = mulOp (negOp(tmp), AA44); + AA05 = fmnaOp (tmp, AA45, AA05); + + tmp = AA14; + AA10 = fmnaOp (tmp, AA40, AA10); + AA11 = fmnaOp (tmp, AA41, AA11); + AA12 = fmnaOp (tmp, AA42, AA12); + AA13 = fmnaOp (tmp, AA43, AA13); + AA14 = mulOp (negOp(tmp), AA44); + AA15 = fmnaOp (tmp, AA45, AA15); + + tmp = AA24; + AA20 = fmnaOp (tmp, AA40, AA20); + AA21 = fmnaOp (tmp, AA41, AA21); + AA22 = fmnaOp (tmp, AA42, AA22); + AA23 = fmnaOp (tmp, AA43, AA23); + AA24 = mulOp (negOp(tmp), AA44); + AA25 = fmnaOp (tmp, AA45, AA25); + + tmp = AA34; + AA30 = fmnaOp (tmp, AA40, AA30); + AA31 = fmnaOp (tmp, AA41, AA31); + AA32 = fmnaOp (tmp, AA42, AA32); + AA33 = fmnaOp (tmp, AA43, AA33); + AA34 = mulOp (negOp(tmp), AA44); + AA35 = fmnaOp (tmp, AA45, AA35); + + tmp = AA54; + AA50 = fmnaOp (tmp, AA40, AA50); + AA51 = fmnaOp (tmp, AA41, AA51); + AA52 = fmnaOp (tmp, AA42, AA52); + AA53 = fmnaOp (tmp, AA43, AA53); + AA54 = mulOp (negOp(tmp), AA44); + AA55 = fmnaOp (tmp, AA45, AA55); + + /****************** iteration 5 ****************/ + + /* scale current row */ + tmp = rcpOp (AA55); + icol5 = perm5; + AA50 = mulOp (tmp, AA50); + AA51 = mulOp (tmp, AA51); + AA52 = mulOp (tmp, AA52); + AA53 = mulOp (tmp, AA53); + AA54 = mulOp (tmp, AA54); + AA55 = tmp; + + /* eliminate above and below current row */ + tmp = AA05; + AA00 = fmnaOp (tmp, AA50, AA00); + AA01 = fmnaOp (tmp, AA51, AA01); + AA02 = fmnaOp (tmp, AA52, AA02); + AA03 = fmnaOp (tmp, AA53, AA03); + AA04 = fmnaOp (tmp, AA54, AA04); + AA05 = mulOp (negOp(tmp), AA55); + + tmp = AA15; + AA10 = fmnaOp (tmp, AA50, AA10); + AA11 = fmnaOp (tmp, AA51, AA11); + AA12 = fmnaOp (tmp, AA52, AA12); + AA13 = fmnaOp (tmp, AA53, AA13); + AA14 = fmnaOp (tmp, AA54, AA14); + AA15 = mulOp (negOp(tmp), AA55); + + tmp = AA25; + AA20 = fmnaOp (tmp, AA50, AA20); + AA21 = fmnaOp (tmp, AA51, AA21); + AA22 = fmnaOp (tmp, AA52, AA22); + AA23 = fmnaOp (tmp, AA53, AA23); + AA24 = fmnaOp (tmp, AA54, AA24); + AA25 = mulOp (negOp(tmp), AA55); + + tmp = AA35; + AA30 = fmnaOp (tmp, AA50, AA30); + AA31 = fmnaOp (tmp, AA51, AA31); + AA32 = fmnaOp (tmp, AA52, AA32); + AA33 = fmnaOp (tmp, AA53, AA33); + AA34 = fmnaOp (tmp, AA54, AA34); + AA35 = mulOp (negOp(tmp), AA55); + + tmp = AA45; + AA40 = fmnaOp (tmp, AA50, AA40); + AA41 = fmnaOp (tmp, AA51, AA41); + AA42 = fmnaOp (tmp, AA52, AA42); + AA43 = fmnaOp (tmp, AA53, AA43); + AA44 = fmnaOp (tmp, AA54, AA44); + AA45 = mulOp (negOp(tmp), AA55); + + /* sort columns into the correct order */ + Ainv(0,icol0) = AA00; + Ainv(1,icol0) = AA10; + Ainv(2,icol0) = AA20; + Ainv(3,icol0) = AA30; + Ainv(4,icol0) = AA40; + Ainv(5,icol0) = AA50; + Ainv(0,icol1) = AA01; + Ainv(1,icol1) = AA11; + Ainv(2,icol1) = AA21; + Ainv(3,icol1) = AA31; + Ainv(4,icol1) = AA41; + Ainv(5,icol1) = AA51; + Ainv(0,icol2) = AA02; + Ainv(1,icol2) = AA12; + Ainv(2,icol2) = AA22; + Ainv(3,icol2) = AA32; + Ainv(4,icol2) = AA42; + Ainv(5,icol2) = AA52; + Ainv(0,icol3) = AA03; + Ainv(1,icol3) = AA13; + Ainv(2,icol3) = AA23; + Ainv(3,icol3) = AA33; + Ainv(4,icol3) = AA43; + Ainv(5,icol3) = AA53; + Ainv(0,icol4) = AA04; + Ainv(1,icol4) = AA14; + Ainv(2,icol4) = AA24; + Ainv(3,icol4) = AA34; + Ainv(4,icol4) = AA44; + Ainv(5,icol4) = AA54; + Ainv(0,icol5) = AA05; + Ainv(1,icol5) = AA15; + Ainv(2,icol5) = AA25; + Ainv(3,icol5) = AA35; + Ainv(4,icol5) = AA45; + Ainv(5,icol5) = AA55; + } +} + +template +__global__ void matinv_7x7_matrix_per_thread (const T *A, T *Ainv, int batch) +{ + const int blkNum = blockIdx.y * gridDim.x + blockIdx.x; + const int thrdNum = blkNum * blockDim.x + threadIdx.x; + const int N = 7; + int perm0, perm1, perm2, perm3, perm4, perm5, perm6; + int icol0, icol1, icol2, icol3, icol4, icol5, icol6; + T AA00, AA01, AA02, AA03, AA04, AA05, AA06; + T AA10, AA11, AA12, AA13, AA14, AA15, AA16; + T AA20, AA21, AA22, AA23, AA24, AA25, AA26; + T AA30, AA31, AA32, AA33, AA34, AA35, AA36; + T AA40, AA41, AA42, AA43, AA44, AA45, AA46; + T AA50, AA51, AA52, AA53, AA54, AA55, AA56; + T AA60, AA61, AA62, AA63, AA64, AA65, AA66; + T tmp; +#if USE_PIVOTING + typename config::absValType t; + typename config::absValType p; + int i, pvt; +#endif + + A += thrdNum * N * N; + Ainv += thrdNum * N * N; + + if (thrdNum < batch) { + + AA00 = A[0]; + AA10 = A[1]; + AA20 = A[2]; + AA30 = A[3]; + AA40 = A[4]; + AA50 = A[5]; + AA60 = A[6]; + AA01 = A[7]; + AA11 = A[8]; + AA21 = A[9]; + AA31 = A[10]; + AA41 = A[11]; + AA51 = A[12]; + AA61 = A[13]; + AA02 = A[14]; + AA12 = A[15]; + AA22 = A[16]; + AA32 = A[17]; + AA42 = A[18]; + AA52 = A[19]; + AA62 = A[20]; + AA03 = A[21]; + AA13 = A[22]; + AA23 = A[23]; + AA33 = A[24]; + AA43 = A[25]; + AA53 = A[26]; + AA63 = A[27]; + AA04 = A[28]; + AA14 = A[29]; + AA24 = A[30]; + AA34 = A[31]; + AA44 = A[32]; + AA54 = A[33]; + AA64 = A[34]; + AA05 = A[35]; + AA15 = A[36]; + AA25 = A[37]; + AA35 = A[38]; + AA45 = A[39]; + AA55 = A[40]; + AA65 = A[41]; + AA06 = A[42]; + AA16 = A[43]; + AA26 = A[44]; + AA36 = A[45]; + AA46 = A[46]; + AA56 = A[47]; + AA66 = A[48]; + + perm0 = 0; + perm1 = 1; + perm2 = 2; + perm3 = 3; + perm4 = 4; + perm5 = 5; + perm6 = 6; + + /****************** iteration 0 ***********/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA00); + pvt = 0; + t = absOp (AA10); + if (t > p) { p = t; pvt = 1; } + t = absOp (AA20); + if (t > p) { p = t; pvt = 2; } + t = absOp (AA30); + if (t > p) { p = t; pvt = 3; } + t = absOp (AA40); + if (t > p) { p = t; pvt = 4; } + t = absOp (AA50); + if (t > p) { p = t; pvt = 5; } + t = absOp (AA60); + if (t > p) { p = t; pvt = 6; } + + /* swap pivot row with row 0 */ + if (pvt == 1) { + tmp = AA00; AA00 = AA10; AA10 = tmp; + tmp = AA01; AA01 = AA11; AA11 = tmp; + tmp = AA02; AA02 = AA12; AA12 = tmp; + tmp = AA03; AA03 = AA13; AA13 = tmp; + tmp = AA04; AA04 = AA14; AA14 = tmp; + tmp = AA05; AA05 = AA15; AA15 = tmp; + tmp = AA06; AA06 = AA16; AA16 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm1; perm1 = i; + } + if (pvt == 2) { + tmp = AA00; AA00 = AA20; AA20 = tmp; + tmp = AA01; AA01 = AA21; AA21 = tmp; + tmp = AA02; AA02 = AA22; AA22 = tmp; + tmp = AA03; AA03 = AA23; AA23 = tmp; + tmp = AA04; AA04 = AA24; AA24 = tmp; + tmp = AA05; AA05 = AA25; AA25 = tmp; + tmp = AA06; AA06 = AA26; AA26 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm2; perm2 = i; + } + if (pvt == 3) { + tmp = AA00; AA00 = AA30; AA30 = tmp; + tmp = AA01; AA01 = AA31; AA31 = tmp; + tmp = AA02; AA02 = AA32; AA32 = tmp; + tmp = AA03; AA03 = AA33; AA33 = tmp; + tmp = AA04; AA04 = AA34; AA34 = tmp; + tmp = AA05; AA05 = AA35; AA35 = tmp; + tmp = AA06; AA06 = AA36; AA36 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm3; perm3 = i; + } + if (pvt == 4) { + tmp = AA00; AA00 = AA40; AA40 = tmp; + tmp = AA01; AA01 = AA41; AA41 = tmp; + tmp = AA02; AA02 = AA42; AA42 = tmp; + tmp = AA03; AA03 = AA43; AA43 = tmp; + tmp = AA04; AA04 = AA44; AA44 = tmp; + tmp = AA05; AA05 = AA45; AA45 = tmp; + tmp = AA06; AA06 = AA46; AA46 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm4; perm4 = i; + } + if (pvt == 5) { + tmp = AA00; AA00 = AA50; AA50 = tmp; + tmp = AA01; AA01 = AA51; AA51 = tmp; + tmp = AA02; AA02 = AA52; AA52 = tmp; + tmp = AA03; AA03 = AA53; AA53 = tmp; + tmp = AA04; AA04 = AA54; AA54 = tmp; + tmp = AA05; AA05 = AA55; AA55 = tmp; + tmp = AA06; AA06 = AA56; AA56 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm5; perm5 = i; + } + if (pvt == 6) { + tmp = AA00; AA00 = AA60; AA60 = tmp; + tmp = AA01; AA01 = AA61; AA61 = tmp; + tmp = AA02; AA02 = AA62; AA62 = tmp; + tmp = AA03; AA03 = AA63; AA63 = tmp; + tmp = AA04; AA04 = AA64; AA64 = tmp; + tmp = AA05; AA05 = AA65; AA65 = tmp; + tmp = AA06; AA06 = AA66; AA66 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm6; perm6 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA00); + icol0 = perm0; + AA00 = tmp; + AA01 = mulOp (tmp, AA01); + AA02 = mulOp (tmp, AA02); + AA03 = mulOp (tmp, AA03); + AA04 = mulOp (tmp, AA04); + AA05 = mulOp (tmp, AA05); + AA06 = mulOp (tmp, AA06); + + /* eliminate above and below current row */ + tmp = AA10; + AA10 = mulOp (negOp(tmp), AA00); + AA11 = fmnaOp (tmp, AA01, AA11); + AA12 = fmnaOp (tmp, AA02, AA12); + AA13 = fmnaOp (tmp, AA03, AA13); + AA14 = fmnaOp (tmp, AA04, AA14); + AA15 = fmnaOp (tmp, AA05, AA15); + AA16 = fmnaOp (tmp, AA06, AA16); + + tmp = AA20; + AA20 = mulOp (negOp(tmp), AA00); + AA21 = fmnaOp (tmp, AA01, AA21); + AA22 = fmnaOp (tmp, AA02, AA22); + AA23 = fmnaOp (tmp, AA03, AA23); + AA24 = fmnaOp (tmp, AA04, AA24); + AA25 = fmnaOp (tmp, AA05, AA25); + AA26 = fmnaOp (tmp, AA06, AA26); + + tmp = AA30; + AA30 = mulOp (negOp(tmp), AA00); + AA31 = fmnaOp (tmp, AA01, AA31); + AA32 = fmnaOp (tmp, AA02, AA32); + AA33 = fmnaOp (tmp, AA03, AA33); + AA34 = fmnaOp (tmp, AA04, AA34); + AA35 = fmnaOp (tmp, AA05, AA35); + AA36 = fmnaOp (tmp, AA06, AA36); + + tmp = AA40; + AA40 = mulOp (negOp(tmp), AA00); + AA41 = fmnaOp (tmp, AA01, AA41); + AA42 = fmnaOp (tmp, AA02, AA42); + AA43 = fmnaOp (tmp, AA03, AA43); + AA44 = fmnaOp (tmp, AA04, AA44); + AA45 = fmnaOp (tmp, AA05, AA45); + AA46 = fmnaOp (tmp, AA06, AA46); + + tmp = AA50; + AA50 = mulOp (negOp(tmp), AA00); + AA51 = fmnaOp (tmp, AA01, AA51); + AA52 = fmnaOp (tmp, AA02, AA52); + AA53 = fmnaOp (tmp, AA03, AA53); + AA54 = fmnaOp (tmp, AA04, AA54); + AA55 = fmnaOp (tmp, AA05, AA55); + AA56 = fmnaOp (tmp, AA06, AA56); + + tmp = AA60; + AA60 = mulOp (negOp(tmp), AA00); + AA61 = fmnaOp (tmp, AA01, AA61); + AA62 = fmnaOp (tmp, AA02, AA62); + AA63 = fmnaOp (tmp, AA03, AA63); + AA64 = fmnaOp (tmp, AA04, AA64); + AA65 = fmnaOp (tmp, AA05, AA65); + AA66 = fmnaOp (tmp, AA06, AA66); + + /****************** iteration 1 ***********/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA11); + pvt = 1; + t = absOp (AA21); + if (t > p) { p = t; pvt = 2; } + t = absOp (AA31); + if (t > p) { p = t; pvt = 3; } + t = absOp (AA41); + if (t > p) { p = t; pvt = 4; } + t = absOp (AA51); + if (t > p) { p = t; pvt = 5; } + t = absOp (AA61); + if (t > p) { p = t; pvt = 6; } + + /* swap pivot row with row 1 */ + if (pvt == 2) { + tmp = AA10; AA10 = AA20; AA20 = tmp; + tmp = AA11; AA11 = AA21; AA21 = tmp; + tmp = AA12; AA12 = AA22; AA22 = tmp; + tmp = AA13; AA13 = AA23; AA23 = tmp; + tmp = AA14; AA14 = AA24; AA24 = tmp; + tmp = AA15; AA15 = AA25; AA25 = tmp; + tmp = AA16; AA16 = AA26; AA26 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm2; perm2 = i; + } + if (pvt == 3) { + tmp = AA10; AA10 = AA30; AA30 = tmp; + tmp = AA11; AA11 = AA31; AA31 = tmp; + tmp = AA12; AA12 = AA32; AA32 = tmp; + tmp = AA13; AA13 = AA33; AA33 = tmp; + tmp = AA14; AA14 = AA34; AA34 = tmp; + tmp = AA15; AA15 = AA35; AA35 = tmp; + tmp = AA16; AA16 = AA36; AA36 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm3; perm3 = i; + } + if (pvt == 4) { + tmp = AA10; AA10 = AA40; AA40 = tmp; + tmp = AA11; AA11 = AA41; AA41 = tmp; + tmp = AA12; AA12 = AA42; AA42 = tmp; + tmp = AA13; AA13 = AA43; AA43 = tmp; + tmp = AA14; AA14 = AA44; AA44 = tmp; + tmp = AA15; AA15 = AA45; AA45 = tmp; + tmp = AA16; AA16 = AA46; AA46 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm4; perm4 = i; + } + if (pvt == 5) { + tmp = AA10; AA10 = AA50; AA50 = tmp; + tmp = AA11; AA11 = AA51; AA51 = tmp; + tmp = AA12; AA12 = AA52; AA52 = tmp; + tmp = AA13; AA13 = AA53; AA53 = tmp; + tmp = AA14; AA14 = AA54; AA54 = tmp; + tmp = AA15; AA15 = AA55; AA55 = tmp; + tmp = AA16; AA16 = AA56; AA56 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm5; perm5 = i; + } + if (pvt == 6) { + tmp = AA10; AA10 = AA60; AA60 = tmp; + tmp = AA11; AA11 = AA61; AA61 = tmp; + tmp = AA12; AA12 = AA62; AA62 = tmp; + tmp = AA13; AA13 = AA63; AA63 = tmp; + tmp = AA14; AA14 = AA64; AA64 = tmp; + tmp = AA15; AA15 = AA65; AA65 = tmp; + tmp = AA16; AA16 = AA66; AA66 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm6; perm6 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA11); + icol1 = perm1; + AA10 = mulOp (tmp, AA10); + AA11 = tmp; + AA12 = mulOp (tmp, AA12); + AA13 = mulOp (tmp, AA13); + AA14 = mulOp (tmp, AA14); + AA15 = mulOp (tmp, AA15); + AA16 = mulOp (tmp, AA16); + + /* eliminate above and below current row */ + tmp = AA01; + AA00 = fmnaOp (tmp, AA10, AA00); + AA01 = mulOp (negOp(tmp), AA11); + AA02 = fmnaOp (tmp, AA12, AA02); + AA03 = fmnaOp (tmp, AA13, AA03); + AA04 = fmnaOp (tmp, AA14, AA04); + AA05 = fmnaOp (tmp, AA15, AA05); + AA06 = fmnaOp (tmp, AA16, AA06); + + tmp = AA21; + AA20 = fmnaOp (tmp, AA10, AA20); + AA21 = mulOp (negOp(tmp), AA11); + AA22 = fmnaOp (tmp, AA12, AA22); + AA23 = fmnaOp (tmp, AA13, AA23); + AA24 = fmnaOp (tmp, AA14, AA24); + AA25 = fmnaOp (tmp, AA15, AA25); + AA26 = fmnaOp (tmp, AA16, AA26); + + tmp = AA31; + AA30 = fmnaOp (tmp, AA10, AA30); + AA31 = mulOp (negOp(tmp), AA11); + AA32 = fmnaOp (tmp, AA12, AA32); + AA33 = fmnaOp (tmp, AA13, AA33); + AA34 = fmnaOp (tmp, AA14, AA34); + AA35 = fmnaOp (tmp, AA15, AA35); + AA36 = fmnaOp (tmp, AA16, AA36); + + tmp = AA41; + AA40 = fmnaOp (tmp, AA10, AA40); + AA41 = mulOp (negOp(tmp), AA11); + AA42 = fmnaOp (tmp, AA12, AA42); + AA43 = fmnaOp (tmp, AA13, AA43); + AA44 = fmnaOp (tmp, AA14, AA44); + AA45 = fmnaOp (tmp, AA15, AA45); + AA46 = fmnaOp (tmp, AA16, AA46); + + tmp = AA51; + AA50 = fmnaOp (tmp, AA10, AA50); + AA51 = mulOp (negOp(tmp), AA11); + AA52 = fmnaOp (tmp, AA12, AA52); + AA53 = fmnaOp (tmp, AA13, AA53); + AA54 = fmnaOp (tmp, AA14, AA54); + AA55 = fmnaOp (tmp, AA15, AA55); + AA56 = fmnaOp (tmp, AA16, AA56); + + tmp = AA61; + AA60 = fmnaOp (tmp, AA10, AA60); + AA61 = mulOp (negOp(tmp), AA11); + AA62 = fmnaOp (tmp, AA12, AA62); + AA63 = fmnaOp (tmp, AA13, AA63); + AA64 = fmnaOp (tmp, AA14, AA64); + AA65 = fmnaOp (tmp, AA15, AA65); + AA66 = fmnaOp (tmp, AA16, AA66); + + /****************** iteration 2 ****************/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA22); + pvt = 2; + t = absOp (AA32); + if (t > p) { p = t; pvt = 3; } + t = absOp (AA42); + if (t > p) { p = t; pvt = 4; } + t = absOp (AA52); + if (t > p) { p = t; pvt = 5; } + t = absOp (AA62); + if (t > p) { p = t; pvt = 6; } + + /* swap pivot row with row 2 */ + if (pvt == 3) { + tmp = AA20; AA20 = AA30; AA30 = tmp; + tmp = AA21; AA21 = AA31; AA31 = tmp; + tmp = AA22; AA22 = AA32; AA32 = tmp; + tmp = AA23; AA23 = AA33; AA33 = tmp; + tmp = AA24; AA24 = AA34; AA34 = tmp; + tmp = AA25; AA25 = AA35; AA35 = tmp; + tmp = AA26; AA26 = AA36; AA36 = tmp; + /* update permutation vector based on row swap */ + i = perm2; perm2 = perm3; perm3 = i; + } + if (pvt == 4) { + tmp = AA20; AA20 = AA40; AA40 = tmp; + tmp = AA21; AA21 = AA41; AA41 = tmp; + tmp = AA22; AA22 = AA42; AA42 = tmp; + tmp = AA23; AA23 = AA43; AA43 = tmp; + tmp = AA24; AA24 = AA44; AA44 = tmp; + tmp = AA25; AA25 = AA45; AA45 = tmp; + tmp = AA26; AA26 = AA46; AA46 = tmp; + /* update permutation vector based on row swap */ + i = perm2; perm2 = perm4; perm4 = i; + } + if (pvt == 5) { + tmp = AA20; AA20 = AA50; AA50 = tmp; + tmp = AA21; AA21 = AA51; AA51 = tmp; + tmp = AA22; AA22 = AA52; AA52 = tmp; + tmp = AA23; AA23 = AA53; AA53 = tmp; + tmp = AA24; AA24 = AA54; AA54 = tmp; + tmp = AA25; AA25 = AA55; AA55 = tmp; + tmp = AA26; AA26 = AA56; AA56 = tmp; + /* update permutation vector based on row swap */ + i = perm2; perm2 = perm5; perm5 = i; + } + if (pvt == 6) { + tmp = AA20; AA20 = AA60; AA60 = tmp; + tmp = AA21; AA21 = AA61; AA61 = tmp; + tmp = AA22; AA22 = AA62; AA62 = tmp; + tmp = AA23; AA23 = AA63; AA63 = tmp; + tmp = AA24; AA24 = AA64; AA64 = tmp; + tmp = AA25; AA25 = AA65; AA65 = tmp; + tmp = AA26; AA26 = AA66; AA66 = tmp; + /* update permutation vector based on row swap */ + i = perm2; perm2 = perm6; perm6 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA22); + icol2 = perm2; + AA20 = mulOp (tmp, AA20); + AA21 = mulOp (tmp, AA21); + AA22 = tmp; + AA23 = mulOp (tmp, AA23); + AA24 = mulOp (tmp, AA24); + AA25 = mulOp (tmp, AA25); + AA26 = mulOp (tmp, AA26); + + /* eliminate above and below current row */ + tmp = AA02; + AA00 = fmnaOp (tmp, AA20, AA00); + AA01 = fmnaOp (tmp, AA21, AA01); + AA02 = mulOp (negOp(tmp), AA22); + AA03 = fmnaOp (tmp, AA23, AA03); + AA04 = fmnaOp (tmp, AA24, AA04); + AA05 = fmnaOp (tmp, AA25, AA05); + AA06 = fmnaOp (tmp, AA26, AA06); + + tmp = AA12; + AA10 = fmnaOp (tmp, AA20, AA10); + AA11 = fmnaOp (tmp, AA21, AA11); + AA12 = mulOp (negOp(tmp), AA22); + AA13 = fmnaOp (tmp, AA23, AA13); + AA14 = fmnaOp (tmp, AA24, AA14); + AA15 = fmnaOp (tmp, AA25, AA15); + AA16 = fmnaOp (tmp, AA26, AA16); + + tmp = AA32; + AA30 = fmnaOp (tmp, AA20, AA30); + AA31 = fmnaOp (tmp, AA21, AA31); + AA32 = mulOp (negOp(tmp), AA22); + AA33 = fmnaOp (tmp, AA23, AA33); + AA34 = fmnaOp (tmp, AA24, AA34); + AA35 = fmnaOp (tmp, AA25, AA35); + AA36 = fmnaOp (tmp, AA26, AA36); + + tmp = AA42; + AA40 = fmnaOp (tmp, AA20, AA40); + AA41 = fmnaOp (tmp, AA21, AA41); + AA42 = mulOp (negOp(tmp), AA22); + AA43 = fmnaOp (tmp, AA23, AA43); + AA44 = fmnaOp (tmp, AA24, AA44); + AA45 = fmnaOp (tmp, AA25, AA45); + AA46 = fmnaOp (tmp, AA26, AA46); + + tmp = AA52; + AA50 = fmnaOp (tmp, AA20, AA50); + AA51 = fmnaOp (tmp, AA21, AA51); + AA52 = mulOp (negOp(tmp), AA22); + AA53 = fmnaOp (tmp, AA23, AA53); + AA54 = fmnaOp (tmp, AA24, AA54); + AA55 = fmnaOp (tmp, AA25, AA55); + AA56 = fmnaOp (tmp, AA26, AA56); + + tmp = AA62; + AA60 = fmnaOp (tmp, AA20, AA60); + AA61 = fmnaOp (tmp, AA21, AA61); + AA62 = mulOp (negOp(tmp), AA22); + AA63 = fmnaOp (tmp, AA23, AA63); + AA64 = fmnaOp (tmp, AA24, AA64); + AA65 = fmnaOp (tmp, AA25, AA65); + AA66 = fmnaOp (tmp, AA26, AA66); + + /****************** iteration 3 ****************/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA33); + pvt = 3; + t = absOp (AA43); + if (t > p) { p = t; pvt = 4; } + t = absOp (AA53); + if (t > p) { p = t; pvt = 5; } + t = absOp (AA63); + if (t > p) { p = t; pvt = 6; } + + /* swap pivot row with row 3 */ + if (pvt == 4) { + tmp = AA30; AA30 = AA40; AA40 = tmp; + tmp = AA31; AA31 = AA41; AA41 = tmp; + tmp = AA32; AA32 = AA42; AA42 = tmp; + tmp = AA33; AA33 = AA43; AA43 = tmp; + tmp = AA34; AA34 = AA44; AA44 = tmp; + tmp = AA35; AA35 = AA45; AA45 = tmp; + tmp = AA36; AA36 = AA46; AA46 = tmp; + /* update permutation vector based on row swap */ + i = perm3; perm3 = perm4; perm4 = i; + } + if (pvt == 5) { + tmp = AA30; AA30 = AA50; AA50 = tmp; + tmp = AA31; AA31 = AA51; AA51 = tmp; + tmp = AA32; AA32 = AA52; AA52 = tmp; + tmp = AA33; AA33 = AA53; AA53 = tmp; + tmp = AA34; AA34 = AA54; AA54 = tmp; + tmp = AA35; AA35 = AA55; AA55 = tmp; + tmp = AA36; AA36 = AA56; AA56 = tmp; + /* update permutation vector based on row swap */ + i = perm3; perm3 = perm5; perm5 = i; + } + if (pvt == 6) { + tmp = AA30; AA30 = AA60; AA60 = tmp; + tmp = AA31; AA31 = AA61; AA61 = tmp; + tmp = AA32; AA32 = AA62; AA62 = tmp; + tmp = AA33; AA33 = AA63; AA63 = tmp; + tmp = AA34; AA34 = AA64; AA64 = tmp; + tmp = AA35; AA35 = AA65; AA65 = tmp; + tmp = AA36; AA36 = AA66; AA66 = tmp; + /* update permutation vector based on row swap */ + i = perm3; perm3 = perm6; perm6 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA33); + icol3 = perm3; + AA30 = mulOp (tmp, AA30); + AA31 = mulOp (tmp, AA31); + AA32 = mulOp (tmp, AA32); + AA33 = tmp; + AA34 = mulOp (tmp, AA34); + AA35 = mulOp (tmp, AA35); + AA36 = mulOp (tmp, AA36); + + /* eliminate above and below current row */ + tmp = AA03; + AA00 = fmnaOp (tmp, AA30, AA00); + AA01 = fmnaOp (tmp, AA31, AA01); + AA02 = fmnaOp (tmp, AA32, AA02); + AA03 = mulOp (negOp(tmp), AA33); + AA04 = fmnaOp (tmp, AA34, AA04); + AA05 = fmnaOp (tmp, AA35, AA05); + AA06 = fmnaOp (tmp, AA36, AA06); + + tmp = AA13; + AA10 = fmnaOp (tmp, AA30, AA10); + AA11 = fmnaOp (tmp, AA31, AA11); + AA12 = fmnaOp (tmp, AA32, AA12); + AA13 = mulOp (negOp(tmp), AA33); + AA14 = fmnaOp (tmp, AA34, AA14); + AA15 = fmnaOp (tmp, AA35, AA15); + AA16 = fmnaOp (tmp, AA36, AA16); + + tmp = AA23; + AA20 = fmnaOp (tmp, AA30, AA20); + AA21 = fmnaOp (tmp, AA31, AA21); + AA22 = fmnaOp (tmp, AA32, AA22); + AA23 = mulOp (negOp(tmp), AA33); + AA24 = fmnaOp (tmp, AA34, AA24); + AA25 = fmnaOp (tmp, AA35, AA25); + AA26 = fmnaOp (tmp, AA36, AA26); + + tmp = AA43; + AA40 = fmnaOp (tmp, AA30, AA40); + AA41 = fmnaOp (tmp, AA31, AA41); + AA42 = fmnaOp (tmp, AA32, AA42); + AA43 = mulOp (negOp(tmp), AA33); + AA44 = fmnaOp (tmp, AA34, AA44); + AA45 = fmnaOp (tmp, AA35, AA45); + AA46 = fmnaOp (tmp, AA36, AA46); + + tmp = AA53; + AA50 = fmnaOp (tmp, AA30, AA50); + AA51 = fmnaOp (tmp, AA31, AA51); + AA52 = fmnaOp (tmp, AA32, AA52); + AA53 = mulOp (negOp(tmp), AA33); + AA54 = fmnaOp (tmp, AA34, AA54); + AA55 = fmnaOp (tmp, AA35, AA55); + AA56 = fmnaOp (tmp, AA36, AA56); + + tmp = AA63; + AA60 = fmnaOp (tmp, AA30, AA60); + AA61 = fmnaOp (tmp, AA31, AA61); + AA62 = fmnaOp (tmp, AA32, AA62); + AA63 = mulOp (negOp(tmp), AA33); + AA64 = fmnaOp (tmp, AA34, AA64); + AA65 = fmnaOp (tmp, AA35, AA65); + AA66 = fmnaOp (tmp, AA36, AA66); + + /****************** iteration 4 ****************/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA44); + pvt = 4; + t = absOp (AA54); + if (t > p) { p = t; pvt = 5; } + t = absOp (AA64); + if (t > p) { p = t; pvt = 6; } + + /* swap pivot row with row 4 */ + if (pvt == 5) { + tmp = AA40; AA40 = AA50; AA50 = tmp; + tmp = AA41; AA41 = AA51; AA51 = tmp; + tmp = AA42; AA42 = AA52; AA52 = tmp; + tmp = AA43; AA43 = AA53; AA53 = tmp; + tmp = AA44; AA44 = AA54; AA54 = tmp; + tmp = AA45; AA45 = AA55; AA55 = tmp; + tmp = AA46; AA46 = AA56; AA56 = tmp; + /* update permutation vector based on row swap */ + i = perm4; perm4 = perm5; perm5 = i; + } + if (pvt == 6) { + tmp = AA40; AA40 = AA60; AA60 = tmp; + tmp = AA41; AA41 = AA61; AA61 = tmp; + tmp = AA42; AA42 = AA62; AA62 = tmp; + tmp = AA43; AA43 = AA63; AA63 = tmp; + tmp = AA44; AA44 = AA64; AA64 = tmp; + tmp = AA45; AA45 = AA65; AA65 = tmp; + tmp = AA46; AA46 = AA66; AA66 = tmp; + /* update permutation vector based on row swap */ + i = perm4; perm4 = perm6; perm6 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA44); + icol4 = perm4; + AA40 = mulOp (tmp, AA40); + AA41 = mulOp (tmp, AA41); + AA42 = mulOp (tmp, AA42); + AA43 = mulOp (tmp, AA43); + AA44 = tmp; + AA45 = mulOp (tmp, AA45); + AA46 = mulOp (tmp, AA46); + + /* eliminate above and below current row */ + tmp = AA04; + AA00 = fmnaOp (tmp, AA40, AA00); + AA01 = fmnaOp (tmp, AA41, AA01); + AA02 = fmnaOp (tmp, AA42, AA02); + AA03 = fmnaOp (tmp, AA43, AA03); + AA04 = mulOp (negOp(tmp), AA44); + AA05 = fmnaOp (tmp, AA45, AA05); + AA06 = fmnaOp (tmp, AA46, AA06); + + tmp = AA14; + AA10 = fmnaOp (tmp, AA40, AA10); + AA11 = fmnaOp (tmp, AA41, AA11); + AA12 = fmnaOp (tmp, AA42, AA12); + AA13 = fmnaOp (tmp, AA43, AA13); + AA14 = mulOp (negOp(tmp), AA44); + AA15 = fmnaOp (tmp, AA45, AA15); + AA16 = fmnaOp (tmp, AA46, AA16); + + tmp = AA24; + AA20 = fmnaOp (tmp, AA40, AA20); + AA21 = fmnaOp (tmp, AA41, AA21); + AA22 = fmnaOp (tmp, AA42, AA22); + AA23 = fmnaOp (tmp, AA43, AA23); + AA24 = mulOp (negOp(tmp), AA44); + AA25 = fmnaOp (tmp, AA45, AA25); + AA26 = fmnaOp (tmp, AA46, AA26); + + tmp = AA34; + AA30 = fmnaOp (tmp, AA40, AA30); + AA31 = fmnaOp (tmp, AA41, AA31); + AA32 = fmnaOp (tmp, AA42, AA32); + AA33 = fmnaOp (tmp, AA43, AA33); + AA34 = mulOp (negOp(tmp), AA44); + AA35 = fmnaOp (tmp, AA45, AA35); + AA36 = fmnaOp (tmp, AA46, AA36); + + tmp = AA54; + AA50 = fmnaOp (tmp, AA40, AA50); + AA51 = fmnaOp (tmp, AA41, AA51); + AA52 = fmnaOp (tmp, AA42, AA52); + AA53 = fmnaOp (tmp, AA43, AA53); + AA54 = mulOp (negOp(tmp), AA44); + AA55 = fmnaOp (tmp, AA45, AA55); + AA56 = fmnaOp (tmp, AA46, AA56); + + tmp = AA64; + AA60 = fmnaOp (tmp, AA40, AA60); + AA61 = fmnaOp (tmp, AA41, AA61); + AA62 = fmnaOp (tmp, AA42, AA62); + AA63 = fmnaOp (tmp, AA43, AA63); + AA64 = mulOp (negOp(tmp), AA44); + AA65 = fmnaOp (tmp, AA45, AA65); + AA66 = fmnaOp (tmp, AA46, AA66); + + /****************** iteration 5 ****************/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA55); + pvt = 5; + t = absOp (AA65); + if (t > p) { p = t; pvt = 6; } + + /* swap pivot row with row 5 */ + if (pvt == 6) { + tmp = AA50; AA50 = AA60; AA60 = tmp; + tmp = AA51; AA51 = AA61; AA61 = tmp; + tmp = AA52; AA52 = AA62; AA62 = tmp; + tmp = AA53; AA53 = AA63; AA63 = tmp; + tmp = AA54; AA54 = AA64; AA64 = tmp; + tmp = AA55; AA55 = AA65; AA65 = tmp; + tmp = AA56; AA56 = AA66; AA66 = tmp; + /* update permutation vector based on row swap */ + i = perm5; perm5 = perm6; perm6 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA55); + icol5 = perm5; + AA50 = mulOp (tmp, AA50); + AA51 = mulOp (tmp, AA51); + AA52 = mulOp (tmp, AA52); + AA53 = mulOp (tmp, AA53); + AA54 = mulOp (tmp, AA54); + AA55 = tmp; + AA56 = mulOp (tmp, AA56); + + /* eliminate above and below current row */ + tmp = AA05; + AA00 = fmnaOp (tmp, AA50, AA00); + AA01 = fmnaOp (tmp, AA51, AA01); + AA02 = fmnaOp (tmp, AA52, AA02); + AA03 = fmnaOp (tmp, AA53, AA03); + AA04 = fmnaOp (tmp, AA54, AA04); + AA05 = mulOp (negOp(tmp), AA55); + AA06 = fmnaOp (tmp, AA56, AA06); + + tmp = AA15; + AA10 = fmnaOp (tmp, AA50, AA10); + AA11 = fmnaOp (tmp, AA51, AA11); + AA12 = fmnaOp (tmp, AA52, AA12); + AA13 = fmnaOp (tmp, AA53, AA13); + AA14 = fmnaOp (tmp, AA54, AA14); + AA15 = mulOp (negOp(tmp), AA55); + AA16 = fmnaOp (tmp, AA56, AA16); + + tmp = AA25; + AA20 = fmnaOp (tmp, AA50, AA20); + AA21 = fmnaOp (tmp, AA51, AA21); + AA22 = fmnaOp (tmp, AA52, AA22); + AA23 = fmnaOp (tmp, AA53, AA23); + AA24 = fmnaOp (tmp, AA54, AA24); + AA25 = mulOp (negOp(tmp), AA55); + AA26 = fmnaOp (tmp, AA56, AA26); + + tmp = AA35; + AA30 = fmnaOp (tmp, AA50, AA30); + AA31 = fmnaOp (tmp, AA51, AA31); + AA32 = fmnaOp (tmp, AA52, AA32); + AA33 = fmnaOp (tmp, AA53, AA33); + AA34 = fmnaOp (tmp, AA54, AA34); + AA35 = mulOp (negOp(tmp), AA55); + AA36 = fmnaOp (tmp, AA56, AA36); + + tmp = AA45; + AA40 = fmnaOp (tmp, AA50, AA40); + AA41 = fmnaOp (tmp, AA51, AA41); + AA42 = fmnaOp (tmp, AA52, AA42); + AA43 = fmnaOp (tmp, AA53, AA43); + AA44 = fmnaOp (tmp, AA54, AA44); + AA45 = mulOp (negOp(tmp), AA55); + AA46 = fmnaOp (tmp, AA56, AA46); + + tmp = AA65; + AA60 = fmnaOp (tmp, AA50, AA60); + AA61 = fmnaOp (tmp, AA51, AA61); + AA62 = fmnaOp (tmp, AA52, AA62); + AA63 = fmnaOp (tmp, AA53, AA63); + AA64 = fmnaOp (tmp, AA54, AA64); + AA65 = mulOp (negOp(tmp), AA55); + AA66 = fmnaOp (tmp, AA56, AA66); + + /****************** iteration 6 ****************/ + + /* scale current row */ + tmp = rcpOp (AA66); + icol6 = perm6; + AA60 = mulOp (tmp, AA60); + AA61 = mulOp (tmp, AA61); + AA62 = mulOp (tmp, AA62); + AA63 = mulOp (tmp, AA63); + AA64 = mulOp (tmp, AA64); + AA65 = mulOp (tmp, AA65); + AA66 = tmp; + + /* eliminate above and below current row */ + tmp = AA06; + AA00 = fmnaOp (tmp, AA60, AA00); + AA01 = fmnaOp (tmp, AA61, AA01); + AA02 = fmnaOp (tmp, AA62, AA02); + AA03 = fmnaOp (tmp, AA63, AA03); + AA04 = fmnaOp (tmp, AA64, AA04); + AA05 = fmnaOp (tmp, AA65, AA05); + AA06 = mulOp (negOp(tmp), AA66); + + tmp = AA16; + AA10 = fmnaOp (tmp, AA60, AA10); + AA11 = fmnaOp (tmp, AA61, AA11); + AA12 = fmnaOp (tmp, AA62, AA12); + AA13 = fmnaOp (tmp, AA63, AA13); + AA14 = fmnaOp (tmp, AA64, AA14); + AA15 = fmnaOp (tmp, AA65, AA15); + AA16 = mulOp (negOp(tmp), AA66); + + tmp = AA26; + AA20 = fmnaOp (tmp, AA60, AA20); + AA21 = fmnaOp (tmp, AA61, AA21); + AA22 = fmnaOp (tmp, AA62, AA22); + AA23 = fmnaOp (tmp, AA63, AA23); + AA24 = fmnaOp (tmp, AA64, AA24); + AA25 = fmnaOp (tmp, AA65, AA25); + AA26 = mulOp (negOp(tmp), AA66); + + tmp = AA36; + AA30 = fmnaOp (tmp, AA60, AA30); + AA31 = fmnaOp (tmp, AA61, AA31); + AA32 = fmnaOp (tmp, AA62, AA32); + AA33 = fmnaOp (tmp, AA63, AA33); + AA34 = fmnaOp (tmp, AA64, AA34); + AA35 = fmnaOp (tmp, AA65, AA35); + AA36 = mulOp (negOp(tmp), AA66); + + tmp = AA46; + AA40 = fmnaOp (tmp, AA60, AA40); + AA41 = fmnaOp (tmp, AA61, AA41); + AA42 = fmnaOp (tmp, AA62, AA42); + AA43 = fmnaOp (tmp, AA63, AA43); + AA44 = fmnaOp (tmp, AA64, AA44); + AA45 = fmnaOp (tmp, AA65, AA45); + AA46 = mulOp (negOp(tmp), AA66); + + tmp = AA56; + AA50 = fmnaOp (tmp, AA60, AA50); + AA51 = fmnaOp (tmp, AA61, AA51); + AA52 = fmnaOp (tmp, AA62, AA52); + AA53 = fmnaOp (tmp, AA63, AA53); + AA54 = fmnaOp (tmp, AA64, AA54); + AA55 = fmnaOp (tmp, AA65, AA55); + AA56 = mulOp (negOp(tmp), AA66); + + /* sort columns into the correct order */ + Ainv(0,icol0) = AA00; + Ainv(1,icol0) = AA10; + Ainv(2,icol0) = AA20; + Ainv(3,icol0) = AA30; + Ainv(4,icol0) = AA40; + Ainv(5,icol0) = AA50; + Ainv(6,icol0) = AA60; + Ainv(0,icol1) = AA01; + Ainv(1,icol1) = AA11; + Ainv(2,icol1) = AA21; + Ainv(3,icol1) = AA31; + Ainv(4,icol1) = AA41; + Ainv(5,icol1) = AA51; + Ainv(6,icol1) = AA61; + Ainv(0,icol2) = AA02; + Ainv(1,icol2) = AA12; + Ainv(2,icol2) = AA22; + Ainv(3,icol2) = AA32; + Ainv(4,icol2) = AA42; + Ainv(5,icol2) = AA52; + Ainv(6,icol2) = AA62; + Ainv(0,icol3) = AA03; + Ainv(1,icol3) = AA13; + Ainv(2,icol3) = AA23; + Ainv(3,icol3) = AA33; + Ainv(4,icol3) = AA43; + Ainv(5,icol3) = AA53; + Ainv(6,icol3) = AA63; + Ainv(0,icol4) = AA04; + Ainv(1,icol4) = AA14; + Ainv(2,icol4) = AA24; + Ainv(3,icol4) = AA34; + Ainv(4,icol4) = AA44; + Ainv(5,icol4) = AA54; + Ainv(6,icol4) = AA64; + Ainv(0,icol5) = AA05; + Ainv(1,icol5) = AA15; + Ainv(2,icol5) = AA25; + Ainv(3,icol5) = AA35; + Ainv(4,icol5) = AA45; + Ainv(5,icol5) = AA55; + Ainv(6,icol5) = AA65; + Ainv(0,icol6) = AA06; + Ainv(1,icol6) = AA16; + Ainv(2,icol6) = AA26; + Ainv(3,icol6) = AA36; + Ainv(4,icol6) = AA46; + Ainv(5,icol6) = AA56; + Ainv(6,icol6) = AA66; + } +} + +template +__global__ void matinv_8x8_matrix_per_thread (const T *A, T *Ainv, int batch) +{ + const int blkNum = blockIdx.y * gridDim.x + blockIdx.x; + const int thrdNum = blkNum * blockDim.x + threadIdx.x; + const int N = 8; + int perm0, perm1, perm2, perm3, perm4, perm5, perm6, perm7; + int icol0, icol1, icol2, icol3, icol4, icol5, icol6, icol7; + T AA00, AA01, AA02, AA03, AA04, AA05, AA06, AA07; + T AA10, AA11, AA12, AA13, AA14, AA15, AA16, AA17; + T AA20, AA21, AA22, AA23, AA24, AA25, AA26, AA27; + T AA30, AA31, AA32, AA33, AA34, AA35, AA36, AA37; + T AA40, AA41, AA42, AA43, AA44, AA45, AA46, AA47; + T AA50, AA51, AA52, AA53, AA54, AA55, AA56, AA57; + T AA60, AA61, AA62, AA63, AA64, AA65, AA66, AA67; + T AA70, AA71, AA72, AA73, AA74, AA75, AA76, AA77; + T tmp; +#if USE_PIVOTING + typename config::absValType t; + typename config::absValType p; + int i, pvt; +#endif + + A += thrdNum * N * N; + Ainv += thrdNum * N * N; + + if (thrdNum < batch) { + + AA00 = A[0]; + AA10 = A[1]; + AA20 = A[2]; + AA30 = A[3]; + AA40 = A[4]; + AA50 = A[5]; + AA60 = A[6]; + AA70 = A[7]; + AA01 = A[8]; + AA11 = A[9]; + AA21 = A[10]; + AA31 = A[11]; + AA41 = A[12]; + AA51 = A[13]; + AA61 = A[14]; + AA71 = A[15]; + AA02 = A[16]; + AA12 = A[17]; + AA22 = A[18]; + AA32 = A[19]; + AA42 = A[20]; + AA52 = A[21]; + AA62 = A[22]; + AA72 = A[23]; + AA03 = A[24]; + AA13 = A[25]; + AA23 = A[26]; + AA33 = A[27]; + AA43 = A[28]; + AA53 = A[29]; + AA63 = A[30]; + AA73 = A[31]; + AA04 = A[32]; + AA14 = A[33]; + AA24 = A[34]; + AA34 = A[35]; + AA44 = A[36]; + AA54 = A[37]; + AA64 = A[38]; + AA74 = A[39]; + AA05 = A[40]; + AA15 = A[41]; + AA25 = A[42]; + AA35 = A[43]; + AA45 = A[44]; + AA55 = A[45]; + AA65 = A[46]; + AA75 = A[47]; + AA06 = A[48]; + AA16 = A[49]; + AA26 = A[50]; + AA36 = A[51]; + AA46 = A[52]; + AA56 = A[53]; + AA66 = A[54]; + AA76 = A[55]; + AA07 = A[56]; + AA17 = A[57]; + AA27 = A[58]; + AA37 = A[59]; + AA47 = A[60]; + AA57 = A[61]; + AA67 = A[62]; + AA77 = A[63]; + + perm0 = 0; + perm1 = 1; + perm2 = 2; + perm3 = 3; + perm4 = 4; + perm5 = 5; + perm6 = 6; + perm7 = 7; + + /****************** iteration 0 ***********/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA00); + pvt = 0; + t = absOp (AA10); + if (t > p) { p = t; pvt = 1; } + t = absOp (AA20); + if (t > p) { p = t; pvt = 2; } + t = absOp (AA30); + if (t > p) { p = t; pvt = 3; } + t = absOp (AA40); + if (t > p) { p = t; pvt = 4; } + t = absOp (AA50); + if (t > p) { p = t; pvt = 5; } + t = absOp (AA60); + if (t > p) { p = t; pvt = 6; } + t = absOp (AA70); + if (t > p) { p = t; pvt = 7; } + + /* swap pivot row with row 0 */ + if (pvt == 1) { + tmp = AA00; AA00 = AA10; AA10 = tmp; + tmp = AA01; AA01 = AA11; AA11 = tmp; + tmp = AA02; AA02 = AA12; AA12 = tmp; + tmp = AA03; AA03 = AA13; AA13 = tmp; + tmp = AA04; AA04 = AA14; AA14 = tmp; + tmp = AA05; AA05 = AA15; AA15 = tmp; + tmp = AA06; AA06 = AA16; AA16 = tmp; + tmp = AA07; AA07 = AA17; AA17 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm1; perm1 = i; + } + if (pvt == 2) { + tmp = AA00; AA00 = AA20; AA20 = tmp; + tmp = AA01; AA01 = AA21; AA21 = tmp; + tmp = AA02; AA02 = AA22; AA22 = tmp; + tmp = AA03; AA03 = AA23; AA23 = tmp; + tmp = AA04; AA04 = AA24; AA24 = tmp; + tmp = AA05; AA05 = AA25; AA25 = tmp; + tmp = AA06; AA06 = AA26; AA26 = tmp; + tmp = AA07; AA07 = AA27; AA27 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm2; perm2 = i; + } + if (pvt == 3) { + tmp = AA00; AA00 = AA30; AA30 = tmp; + tmp = AA01; AA01 = AA31; AA31 = tmp; + tmp = AA02; AA02 = AA32; AA32 = tmp; + tmp = AA03; AA03 = AA33; AA33 = tmp; + tmp = AA04; AA04 = AA34; AA34 = tmp; + tmp = AA05; AA05 = AA35; AA35 = tmp; + tmp = AA06; AA06 = AA36; AA36 = tmp; + tmp = AA07; AA07 = AA37; AA37 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm3; perm3 = i; + } + if (pvt == 4) { + tmp = AA00; AA00 = AA40; AA40 = tmp; + tmp = AA01; AA01 = AA41; AA41 = tmp; + tmp = AA02; AA02 = AA42; AA42 = tmp; + tmp = AA03; AA03 = AA43; AA43 = tmp; + tmp = AA04; AA04 = AA44; AA44 = tmp; + tmp = AA05; AA05 = AA45; AA45 = tmp; + tmp = AA06; AA06 = AA46; AA46 = tmp; + tmp = AA07; AA07 = AA47; AA47 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm4; perm4 = i; + } + if (pvt == 5) { + tmp = AA00; AA00 = AA50; AA50 = tmp; + tmp = AA01; AA01 = AA51; AA51 = tmp; + tmp = AA02; AA02 = AA52; AA52 = tmp; + tmp = AA03; AA03 = AA53; AA53 = tmp; + tmp = AA04; AA04 = AA54; AA54 = tmp; + tmp = AA05; AA05 = AA55; AA55 = tmp; + tmp = AA06; AA06 = AA56; AA56 = tmp; + tmp = AA07; AA07 = AA57; AA57 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm5; perm5 = i; + } + if (pvt == 6) { + tmp = AA00; AA00 = AA60; AA60 = tmp; + tmp = AA01; AA01 = AA61; AA61 = tmp; + tmp = AA02; AA02 = AA62; AA62 = tmp; + tmp = AA03; AA03 = AA63; AA63 = tmp; + tmp = AA04; AA04 = AA64; AA64 = tmp; + tmp = AA05; AA05 = AA65; AA65 = tmp; + tmp = AA06; AA06 = AA66; AA66 = tmp; + tmp = AA07; AA07 = AA67; AA67 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm6; perm6 = i; + } + if (pvt == 7) { + tmp = AA00; AA00 = AA70; AA70 = tmp; + tmp = AA01; AA01 = AA71; AA71 = tmp; + tmp = AA02; AA02 = AA72; AA72 = tmp; + tmp = AA03; AA03 = AA73; AA73 = tmp; + tmp = AA04; AA04 = AA74; AA74 = tmp; + tmp = AA05; AA05 = AA75; AA75 = tmp; + tmp = AA06; AA06 = AA76; AA76 = tmp; + tmp = AA07; AA07 = AA77; AA77 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm7; perm7 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA00); + icol0 = perm0; + AA00 = tmp; + AA01 = mulOp (tmp, AA01); + AA02 = mulOp (tmp, AA02); + AA03 = mulOp (tmp, AA03); + AA04 = mulOp (tmp, AA04); + AA05 = mulOp (tmp, AA05); + AA06 = mulOp (tmp, AA06); + AA07 = mulOp (tmp, AA07); + + /* eliminate above and below current row */ + tmp = AA10; + AA10 = mulOp (negOp(tmp), AA00); + AA11 = fmnaOp (tmp, AA01, AA11); + AA12 = fmnaOp (tmp, AA02, AA12); + AA13 = fmnaOp (tmp, AA03, AA13); + AA14 = fmnaOp (tmp, AA04, AA14); + AA15 = fmnaOp (tmp, AA05, AA15); + AA16 = fmnaOp (tmp, AA06, AA16); + AA17 = fmnaOp (tmp, AA07, AA17); + + tmp = AA20; + AA20 = mulOp (negOp(tmp), AA00); + AA21 = fmnaOp (tmp, AA01, AA21); + AA22 = fmnaOp (tmp, AA02, AA22); + AA23 = fmnaOp (tmp, AA03, AA23); + AA24 = fmnaOp (tmp, AA04, AA24); + AA25 = fmnaOp (tmp, AA05, AA25); + AA26 = fmnaOp (tmp, AA06, AA26); + AA27 = fmnaOp (tmp, AA07, AA27); + + tmp = AA30; + AA30 = mulOp (negOp(tmp), AA00); + AA31 = fmnaOp (tmp, AA01, AA31); + AA32 = fmnaOp (tmp, AA02, AA32); + AA33 = fmnaOp (tmp, AA03, AA33); + AA34 = fmnaOp (tmp, AA04, AA34); + AA35 = fmnaOp (tmp, AA05, AA35); + AA36 = fmnaOp (tmp, AA06, AA36); + AA37 = fmnaOp (tmp, AA07, AA37); + + tmp = AA40; + AA40 = mulOp (negOp(tmp), AA00); + AA41 = fmnaOp (tmp, AA01, AA41); + AA42 = fmnaOp (tmp, AA02, AA42); + AA43 = fmnaOp (tmp, AA03, AA43); + AA44 = fmnaOp (tmp, AA04, AA44); + AA45 = fmnaOp (tmp, AA05, AA45); + AA46 = fmnaOp (tmp, AA06, AA46); + AA47 = fmnaOp (tmp, AA07, AA47); + + tmp = AA50; + AA50 = mulOp (negOp(tmp), AA00); + AA51 = fmnaOp (tmp, AA01, AA51); + AA52 = fmnaOp (tmp, AA02, AA52); + AA53 = fmnaOp (tmp, AA03, AA53); + AA54 = fmnaOp (tmp, AA04, AA54); + AA55 = fmnaOp (tmp, AA05, AA55); + AA56 = fmnaOp (tmp, AA06, AA56); + AA57 = fmnaOp (tmp, AA07, AA57); + + tmp = AA60; + AA60 = mulOp (negOp(tmp), AA00); + AA61 = fmnaOp (tmp, AA01, AA61); + AA62 = fmnaOp (tmp, AA02, AA62); + AA63 = fmnaOp (tmp, AA03, AA63); + AA64 = fmnaOp (tmp, AA04, AA64); + AA65 = fmnaOp (tmp, AA05, AA65); + AA66 = fmnaOp (tmp, AA06, AA66); + AA67 = fmnaOp (tmp, AA07, AA67); + + tmp = AA70; + AA70 = mulOp (negOp(tmp), AA00); + AA71 = fmnaOp (tmp, AA01, AA71); + AA72 = fmnaOp (tmp, AA02, AA72); + AA73 = fmnaOp (tmp, AA03, AA73); + AA74 = fmnaOp (tmp, AA04, AA74); + AA75 = fmnaOp (tmp, AA05, AA75); + AA76 = fmnaOp (tmp, AA06, AA76); + AA77 = fmnaOp (tmp, AA07, AA77); + + /****************** iteration 1 ***********/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA11); + pvt = 1; + t = absOp (AA21); + if (t > p) { p = t; pvt = 2; } + t = absOp (AA31); + if (t > p) { p = t; pvt = 3; } + t = absOp (AA41); + if (t > p) { p = t; pvt = 4; } + t = absOp (AA51); + if (t > p) { p = t; pvt = 5; } + t = absOp (AA61); + if (t > p) { p = t; pvt = 6; } + t = absOp (AA71); + if (t > p) { p = t; pvt = 7; } + + /* swap pivot row with row 1 */ + if (pvt == 2) { + tmp = AA10; AA10 = AA20; AA20 = tmp; + tmp = AA11; AA11 = AA21; AA21 = tmp; + tmp = AA12; AA12 = AA22; AA22 = tmp; + tmp = AA13; AA13 = AA23; AA23 = tmp; + tmp = AA14; AA14 = AA24; AA24 = tmp; + tmp = AA15; AA15 = AA25; AA25 = tmp; + tmp = AA16; AA16 = AA26; AA26 = tmp; + tmp = AA17; AA17 = AA27; AA27 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm2; perm2 = i; + } + if (pvt == 3) { + tmp = AA10; AA10 = AA30; AA30 = tmp; + tmp = AA11; AA11 = AA31; AA31 = tmp; + tmp = AA12; AA12 = AA32; AA32 = tmp; + tmp = AA13; AA13 = AA33; AA33 = tmp; + tmp = AA14; AA14 = AA34; AA34 = tmp; + tmp = AA15; AA15 = AA35; AA35 = tmp; + tmp = AA16; AA16 = AA36; AA36 = tmp; + tmp = AA17; AA17 = AA37; AA37 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm3; perm3 = i; + } + if (pvt == 4) { + tmp = AA10; AA10 = AA40; AA40 = tmp; + tmp = AA11; AA11 = AA41; AA41 = tmp; + tmp = AA12; AA12 = AA42; AA42 = tmp; + tmp = AA13; AA13 = AA43; AA43 = tmp; + tmp = AA14; AA14 = AA44; AA44 = tmp; + tmp = AA15; AA15 = AA45; AA45 = tmp; + tmp = AA16; AA16 = AA46; AA46 = tmp; + tmp = AA17; AA17 = AA47; AA47 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm4; perm4 = i; + } + if (pvt == 5) { + tmp = AA10; AA10 = AA50; AA50 = tmp; + tmp = AA11; AA11 = AA51; AA51 = tmp; + tmp = AA12; AA12 = AA52; AA52 = tmp; + tmp = AA13; AA13 = AA53; AA53 = tmp; + tmp = AA14; AA14 = AA54; AA54 = tmp; + tmp = AA15; AA15 = AA55; AA55 = tmp; + tmp = AA16; AA16 = AA56; AA56 = tmp; + tmp = AA17; AA17 = AA57; AA57 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm5; perm5 = i; + } + if (pvt == 6) { + tmp = AA10; AA10 = AA60; AA60 = tmp; + tmp = AA11; AA11 = AA61; AA61 = tmp; + tmp = AA12; AA12 = AA62; AA62 = tmp; + tmp = AA13; AA13 = AA63; AA63 = tmp; + tmp = AA14; AA14 = AA64; AA64 = tmp; + tmp = AA15; AA15 = AA65; AA65 = tmp; + tmp = AA16; AA16 = AA66; AA66 = tmp; + tmp = AA17; AA17 = AA67; AA67 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm6; perm6 = i; + } + if (pvt == 7) { + tmp = AA10; AA10 = AA70; AA70 = tmp; + tmp = AA11; AA11 = AA71; AA71 = tmp; + tmp = AA12; AA12 = AA72; AA72 = tmp; + tmp = AA13; AA13 = AA73; AA73 = tmp; + tmp = AA14; AA14 = AA74; AA74 = tmp; + tmp = AA15; AA15 = AA75; AA75 = tmp; + tmp = AA16; AA16 = AA76; AA76 = tmp; + tmp = AA17; AA17 = AA77; AA77 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm7; perm7 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA11); + icol1 = perm1; + AA10 = mulOp (tmp, AA10); + AA11 = tmp; + AA12 = mulOp (tmp, AA12); + AA13 = mulOp (tmp, AA13); + AA14 = mulOp (tmp, AA14); + AA15 = mulOp (tmp, AA15); + AA16 = mulOp (tmp, AA16); + AA17 = mulOp (tmp, AA17); + + /* eliminate above and below current row */ + tmp = AA01; + AA00 = fmnaOp (tmp, AA10, AA00); + AA01 = mulOp (negOp(tmp), AA11); + AA02 = fmnaOp (tmp, AA12, AA02); + AA03 = fmnaOp (tmp, AA13, AA03); + AA04 = fmnaOp (tmp, AA14, AA04); + AA05 = fmnaOp (tmp, AA15, AA05); + AA06 = fmnaOp (tmp, AA16, AA06); + AA07 = fmnaOp (tmp, AA17, AA07); + + tmp = AA21; + AA20 = fmnaOp (tmp, AA10, AA20); + AA21 = mulOp (negOp(tmp), AA11); + AA22 = fmnaOp (tmp, AA12, AA22); + AA23 = fmnaOp (tmp, AA13, AA23); + AA24 = fmnaOp (tmp, AA14, AA24); + AA25 = fmnaOp (tmp, AA15, AA25); + AA26 = fmnaOp (tmp, AA16, AA26); + AA27 = fmnaOp (tmp, AA17, AA27); + + tmp = AA31; + AA30 = fmnaOp (tmp, AA10, AA30); + AA31 = mulOp (negOp(tmp), AA11); + AA32 = fmnaOp (tmp, AA12, AA32); + AA33 = fmnaOp (tmp, AA13, AA33); + AA34 = fmnaOp (tmp, AA14, AA34); + AA35 = fmnaOp (tmp, AA15, AA35); + AA36 = fmnaOp (tmp, AA16, AA36); + AA37 = fmnaOp (tmp, AA17, AA37); + + tmp = AA41; + AA40 = fmnaOp (tmp, AA10, AA40); + AA41 = mulOp (negOp(tmp), AA11); + AA42 = fmnaOp (tmp, AA12, AA42); + AA43 = fmnaOp (tmp, AA13, AA43); + AA44 = fmnaOp (tmp, AA14, AA44); + AA45 = fmnaOp (tmp, AA15, AA45); + AA46 = fmnaOp (tmp, AA16, AA46); + AA47 = fmnaOp (tmp, AA17, AA47); + + tmp = AA51; + AA50 = fmnaOp (tmp, AA10, AA50); + AA51 = mulOp (negOp(tmp), AA11); + AA52 = fmnaOp (tmp, AA12, AA52); + AA53 = fmnaOp (tmp, AA13, AA53); + AA54 = fmnaOp (tmp, AA14, AA54); + AA55 = fmnaOp (tmp, AA15, AA55); + AA56 = fmnaOp (tmp, AA16, AA56); + AA57 = fmnaOp (tmp, AA17, AA57); + + tmp = AA61; + AA60 = fmnaOp (tmp, AA10, AA60); + AA61 = mulOp (negOp(tmp), AA11); + AA62 = fmnaOp (tmp, AA12, AA62); + AA63 = fmnaOp (tmp, AA13, AA63); + AA64 = fmnaOp (tmp, AA14, AA64); + AA65 = fmnaOp (tmp, AA15, AA65); + AA66 = fmnaOp (tmp, AA16, AA66); + AA67 = fmnaOp (tmp, AA17, AA67); + + tmp = AA71; + AA70 = fmnaOp (tmp, AA10, AA70); + AA71 = mulOp (negOp(tmp), AA11); + AA72 = fmnaOp (tmp, AA12, AA72); + AA73 = fmnaOp (tmp, AA13, AA73); + AA74 = fmnaOp (tmp, AA14, AA74); + AA75 = fmnaOp (tmp, AA15, AA75); + AA76 = fmnaOp (tmp, AA16, AA76); + AA77 = fmnaOp (tmp, AA17, AA77); + + /****************** iteration 2 ****************/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA22); + pvt = 2; + t = absOp (AA32); + if (t > p) { p = t; pvt = 3; } + t = absOp (AA42); + if (t > p) { p = t; pvt = 4; } + t = absOp (AA52); + if (t > p) { p = t; pvt = 5; } + t = absOp (AA62); + if (t > p) { p = t; pvt = 6; } + t = absOp (AA72); + if (t > p) { p = t; pvt = 7; } + + /* swap pivot row with row 2 */ + if (pvt == 3) { + tmp = AA20; AA20 = AA30; AA30 = tmp; + tmp = AA21; AA21 = AA31; AA31 = tmp; + tmp = AA22; AA22 = AA32; AA32 = tmp; + tmp = AA23; AA23 = AA33; AA33 = tmp; + tmp = AA24; AA24 = AA34; AA34 = tmp; + tmp = AA25; AA25 = AA35; AA35 = tmp; + tmp = AA26; AA26 = AA36; AA36 = tmp; + tmp = AA27; AA27 = AA37; AA37 = tmp; + /* update permutation vector based on row swap */ + i = perm2; perm2 = perm3; perm3 = i; + } + if (pvt == 4) { + tmp = AA20; AA20 = AA40; AA40 = tmp; + tmp = AA21; AA21 = AA41; AA41 = tmp; + tmp = AA22; AA22 = AA42; AA42 = tmp; + tmp = AA23; AA23 = AA43; AA43 = tmp; + tmp = AA24; AA24 = AA44; AA44 = tmp; + tmp = AA25; AA25 = AA45; AA45 = tmp; + tmp = AA26; AA26 = AA46; AA46 = tmp; + tmp = AA27; AA27 = AA47; AA47 = tmp; + /* update permutation vector based on row swap */ + i = perm2; perm2 = perm4; perm4 = i; + } + if (pvt == 5) { + tmp = AA20; AA20 = AA50; AA50 = tmp; + tmp = AA21; AA21 = AA51; AA51 = tmp; + tmp = AA22; AA22 = AA52; AA52 = tmp; + tmp = AA23; AA23 = AA53; AA53 = tmp; + tmp = AA24; AA24 = AA54; AA54 = tmp; + tmp = AA25; AA25 = AA55; AA55 = tmp; + tmp = AA26; AA26 = AA56; AA56 = tmp; + tmp = AA27; AA27 = AA57; AA57 = tmp; + /* update permutation vector based on row swap */ + i = perm2; perm2 = perm5; perm5 = i; + } + if (pvt == 6) { + tmp = AA20; AA20 = AA60; AA60 = tmp; + tmp = AA21; AA21 = AA61; AA61 = tmp; + tmp = AA22; AA22 = AA62; AA62 = tmp; + tmp = AA23; AA23 = AA63; AA63 = tmp; + tmp = AA24; AA24 = AA64; AA64 = tmp; + tmp = AA25; AA25 = AA65; AA65 = tmp; + tmp = AA26; AA26 = AA66; AA66 = tmp; + tmp = AA27; AA27 = AA67; AA67 = tmp; + /* update permutation vector based on row swap */ + i = perm2; perm2 = perm6; perm6 = i; + } + if (pvt == 7) { + tmp = AA20; AA20 = AA70; AA70 = tmp; + tmp = AA21; AA21 = AA71; AA71 = tmp; + tmp = AA22; AA22 = AA72; AA72 = tmp; + tmp = AA23; AA23 = AA73; AA73 = tmp; + tmp = AA24; AA24 = AA74; AA74 = tmp; + tmp = AA25; AA25 = AA75; AA75 = tmp; + tmp = AA26; AA26 = AA76; AA76 = tmp; + tmp = AA27; AA27 = AA77; AA77 = tmp; + /* update permutation vector based on row swap */ + i = perm2; perm2 = perm7; perm7 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA22); + icol2 = perm2; + AA20 = mulOp (tmp, AA20); + AA21 = mulOp (tmp, AA21); + AA22 = tmp; + AA23 = mulOp (tmp, AA23); + AA24 = mulOp (tmp, AA24); + AA25 = mulOp (tmp, AA25); + AA26 = mulOp (tmp, AA26); + AA27 = mulOp (tmp, AA27); + + /* eliminate above and below current row */ + tmp = AA02; + AA00 = fmnaOp (tmp, AA20, AA00); + AA01 = fmnaOp (tmp, AA21, AA01); + AA02 = mulOp (negOp(tmp), AA22); + AA03 = fmnaOp (tmp, AA23, AA03); + AA04 = fmnaOp (tmp, AA24, AA04); + AA05 = fmnaOp (tmp, AA25, AA05); + AA06 = fmnaOp (tmp, AA26, AA06); + AA07 = fmnaOp (tmp, AA27, AA07); + + tmp = AA12; + AA10 = fmnaOp (tmp, AA20, AA10); + AA11 = fmnaOp (tmp, AA21, AA11); + AA12 = mulOp (negOp(tmp), AA22); + AA13 = fmnaOp (tmp, AA23, AA13); + AA14 = fmnaOp (tmp, AA24, AA14); + AA15 = fmnaOp (tmp, AA25, AA15); + AA16 = fmnaOp (tmp, AA26, AA16); + AA17 = fmnaOp (tmp, AA27, AA17); + + tmp = AA32; + AA30 = fmnaOp (tmp, AA20, AA30); + AA31 = fmnaOp (tmp, AA21, AA31); + AA32 = mulOp (negOp(tmp), AA22); + AA33 = fmnaOp (tmp, AA23, AA33); + AA34 = fmnaOp (tmp, AA24, AA34); + AA35 = fmnaOp (tmp, AA25, AA35); + AA36 = fmnaOp (tmp, AA26, AA36); + AA37 = fmnaOp (tmp, AA27, AA37); + + tmp = AA42; + AA40 = fmnaOp (tmp, AA20, AA40); + AA41 = fmnaOp (tmp, AA21, AA41); + AA42 = mulOp (negOp(tmp), AA22); + AA43 = fmnaOp (tmp, AA23, AA43); + AA44 = fmnaOp (tmp, AA24, AA44); + AA45 = fmnaOp (tmp, AA25, AA45); + AA46 = fmnaOp (tmp, AA26, AA46); + AA47 = fmnaOp (tmp, AA27, AA47); + + tmp = AA52; + AA50 = fmnaOp (tmp, AA20, AA50); + AA51 = fmnaOp (tmp, AA21, AA51); + AA52 = mulOp (negOp(tmp), AA22); + AA53 = fmnaOp (tmp, AA23, AA53); + AA54 = fmnaOp (tmp, AA24, AA54); + AA55 = fmnaOp (tmp, AA25, AA55); + AA56 = fmnaOp (tmp, AA26, AA56); + AA57 = fmnaOp (tmp, AA27, AA57); + + tmp = AA62; + AA60 = fmnaOp (tmp, AA20, AA60); + AA61 = fmnaOp (tmp, AA21, AA61); + AA62 = mulOp (negOp(tmp), AA22); + AA63 = fmnaOp (tmp, AA23, AA63); + AA64 = fmnaOp (tmp, AA24, AA64); + AA65 = fmnaOp (tmp, AA25, AA65); + AA66 = fmnaOp (tmp, AA26, AA66); + AA67 = fmnaOp (tmp, AA27, AA67); + + tmp = AA72; + AA70 = fmnaOp (tmp, AA20, AA70); + AA71 = fmnaOp (tmp, AA21, AA71); + AA72 = mulOp (negOp(tmp), AA22); + AA73 = fmnaOp (tmp, AA23, AA73); + AA74 = fmnaOp (tmp, AA24, AA74); + AA75 = fmnaOp (tmp, AA25, AA75); + AA76 = fmnaOp (tmp, AA26, AA76); + AA77 = fmnaOp (tmp, AA27, AA77); + + /****************** iteration 3 ****************/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA33); + pvt = 3; + t = absOp (AA43); + if (t > p) { p = t; pvt = 4; } + t = absOp (AA53); + if (t > p) { p = t; pvt = 5; } + t = absOp (AA63); + if (t > p) { p = t; pvt = 6; } + t = absOp (AA73); + if (t > p) { p = t; pvt = 7; } + + /* swap pivot row with row 3 */ + if (pvt == 4) { + tmp = AA30; AA30 = AA40; AA40 = tmp; + tmp = AA31; AA31 = AA41; AA41 = tmp; + tmp = AA32; AA32 = AA42; AA42 = tmp; + tmp = AA33; AA33 = AA43; AA43 = tmp; + tmp = AA34; AA34 = AA44; AA44 = tmp; + tmp = AA35; AA35 = AA45; AA45 = tmp; + tmp = AA36; AA36 = AA46; AA46 = tmp; + tmp = AA37; AA37 = AA47; AA47 = tmp; + /* update permutation vector based on row swap */ + i = perm3; perm3 = perm4; perm4 = i; + } + if (pvt == 5) { + tmp = AA30; AA30 = AA50; AA50 = tmp; + tmp = AA31; AA31 = AA51; AA51 = tmp; + tmp = AA32; AA32 = AA52; AA52 = tmp; + tmp = AA33; AA33 = AA53; AA53 = tmp; + tmp = AA34; AA34 = AA54; AA54 = tmp; + tmp = AA35; AA35 = AA55; AA55 = tmp; + tmp = AA36; AA36 = AA56; AA56 = tmp; + tmp = AA37; AA37 = AA57; AA57 = tmp; + /* update permutation vector based on row swap */ + i = perm3; perm3 = perm5; perm5 = i; + } + if (pvt == 6) { + tmp = AA30; AA30 = AA60; AA60 = tmp; + tmp = AA31; AA31 = AA61; AA61 = tmp; + tmp = AA32; AA32 = AA62; AA62 = tmp; + tmp = AA33; AA33 = AA63; AA63 = tmp; + tmp = AA34; AA34 = AA64; AA64 = tmp; + tmp = AA35; AA35 = AA65; AA65 = tmp; + tmp = AA36; AA36 = AA66; AA66 = tmp; + tmp = AA37; AA37 = AA67; AA67 = tmp; + /* update permutation vector based on row swap */ + i = perm3; perm3 = perm6; perm6 = i; + } + if (pvt == 7) { + tmp = AA30; AA30 = AA70; AA70 = tmp; + tmp = AA31; AA31 = AA71; AA71 = tmp; + tmp = AA32; AA32 = AA72; AA72 = tmp; + tmp = AA33; AA33 = AA73; AA73 = tmp; + tmp = AA34; AA34 = AA74; AA74 = tmp; + tmp = AA35; AA35 = AA75; AA75 = tmp; + tmp = AA36; AA36 = AA76; AA76 = tmp; + tmp = AA37; AA37 = AA77; AA77 = tmp; + /* update permutation vector based on row swap */ + i = perm3; perm3 = perm7; perm7 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA33); + icol3 = perm3; + AA30 = mulOp (tmp, AA30); + AA31 = mulOp (tmp, AA31); + AA32 = mulOp (tmp, AA32); + AA33 = tmp; + AA34 = mulOp (tmp, AA34); + AA35 = mulOp (tmp, AA35); + AA36 = mulOp (tmp, AA36); + AA37 = mulOp (tmp, AA37); + + /* eliminate above and below current row */ + tmp = AA03; + AA00 = fmnaOp (tmp, AA30, AA00); + AA01 = fmnaOp (tmp, AA31, AA01); + AA02 = fmnaOp (tmp, AA32, AA02); + AA03 = mulOp (negOp(tmp), AA33); + AA04 = fmnaOp (tmp, AA34, AA04); + AA05 = fmnaOp (tmp, AA35, AA05); + AA06 = fmnaOp (tmp, AA36, AA06); + AA07 = fmnaOp (tmp, AA37, AA07); + + tmp = AA13; + AA10 = fmnaOp (tmp, AA30, AA10); + AA11 = fmnaOp (tmp, AA31, AA11); + AA12 = fmnaOp (tmp, AA32, AA12); + AA13 = mulOp (negOp(tmp), AA33); + AA14 = fmnaOp (tmp, AA34, AA14); + AA15 = fmnaOp (tmp, AA35, AA15); + AA16 = fmnaOp (tmp, AA36, AA16); + AA17 = fmnaOp (tmp, AA37, AA17); + + tmp = AA23; + AA20 = fmnaOp (tmp, AA30, AA20); + AA21 = fmnaOp (tmp, AA31, AA21); + AA22 = fmnaOp (tmp, AA32, AA22); + AA23 = mulOp (negOp(tmp), AA33); + AA24 = fmnaOp (tmp, AA34, AA24); + AA25 = fmnaOp (tmp, AA35, AA25); + AA26 = fmnaOp (tmp, AA36, AA26); + AA27 = fmnaOp (tmp, AA37, AA27); + + tmp = AA43; + AA40 = fmnaOp (tmp, AA30, AA40); + AA41 = fmnaOp (tmp, AA31, AA41); + AA42 = fmnaOp (tmp, AA32, AA42); + AA43 = mulOp (negOp(tmp), AA33); + AA44 = fmnaOp (tmp, AA34, AA44); + AA45 = fmnaOp (tmp, AA35, AA45); + AA46 = fmnaOp (tmp, AA36, AA46); + AA47 = fmnaOp (tmp, AA37, AA47); + + tmp = AA53; + AA50 = fmnaOp (tmp, AA30, AA50); + AA51 = fmnaOp (tmp, AA31, AA51); + AA52 = fmnaOp (tmp, AA32, AA52); + AA53 = mulOp (negOp(tmp), AA33); + AA54 = fmnaOp (tmp, AA34, AA54); + AA55 = fmnaOp (tmp, AA35, AA55); + AA56 = fmnaOp (tmp, AA36, AA56); + AA57 = fmnaOp (tmp, AA37, AA57); + + tmp = AA63; + AA60 = fmnaOp (tmp, AA30, AA60); + AA61 = fmnaOp (tmp, AA31, AA61); + AA62 = fmnaOp (tmp, AA32, AA62); + AA63 = mulOp (negOp(tmp), AA33); + AA64 = fmnaOp (tmp, AA34, AA64); + AA65 = fmnaOp (tmp, AA35, AA65); + AA66 = fmnaOp (tmp, AA36, AA66); + AA67 = fmnaOp (tmp, AA37, AA67); + + tmp = AA73; + AA70 = fmnaOp (tmp, AA30, AA70); + AA71 = fmnaOp (tmp, AA31, AA71); + AA72 = fmnaOp (tmp, AA32, AA72); + AA73 = mulOp (negOp(tmp), AA33); + AA74 = fmnaOp (tmp, AA34, AA74); + AA75 = fmnaOp (tmp, AA35, AA75); + AA76 = fmnaOp (tmp, AA36, AA76); + AA77 = fmnaOp (tmp, AA37, AA77); + + /****************** iteration 4 ****************/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA44); + pvt = 4; + t = absOp (AA54); + if (t > p) { p = t; pvt = 5; } + t = absOp (AA64); + if (t > p) { p = t; pvt = 6; } + t = absOp (AA74); + if (t > p) { p = t; pvt = 7; } + + /* swap pivot row with row 4 */ + if (pvt == 5) { + tmp = AA40; AA40 = AA50; AA50 = tmp; + tmp = AA41; AA41 = AA51; AA51 = tmp; + tmp = AA42; AA42 = AA52; AA52 = tmp; + tmp = AA43; AA43 = AA53; AA53 = tmp; + tmp = AA44; AA44 = AA54; AA54 = tmp; + tmp = AA45; AA45 = AA55; AA55 = tmp; + tmp = AA46; AA46 = AA56; AA56 = tmp; + tmp = AA47; AA47 = AA57; AA57 = tmp; + /* update permutation vector based on row swap */ + i = perm4; perm4 = perm5; perm5 = i; + } + if (pvt == 6) { + tmp = AA40; AA40 = AA60; AA60 = tmp; + tmp = AA41; AA41 = AA61; AA61 = tmp; + tmp = AA42; AA42 = AA62; AA62 = tmp; + tmp = AA43; AA43 = AA63; AA63 = tmp; + tmp = AA44; AA44 = AA64; AA64 = tmp; + tmp = AA45; AA45 = AA65; AA65 = tmp; + tmp = AA46; AA46 = AA66; AA66 = tmp; + tmp = AA47; AA47 = AA67; AA67 = tmp; + /* update permutation vector based on row swap */ + i = perm4; perm4 = perm6; perm6 = i; + } + if (pvt == 7) { + tmp = AA40; AA40 = AA70; AA70 = tmp; + tmp = AA41; AA41 = AA71; AA71 = tmp; + tmp = AA42; AA42 = AA72; AA72 = tmp; + tmp = AA43; AA43 = AA73; AA73 = tmp; + tmp = AA44; AA44 = AA74; AA74 = tmp; + tmp = AA45; AA45 = AA75; AA75 = tmp; + tmp = AA46; AA46 = AA76; AA76 = tmp; + tmp = AA47; AA47 = AA77; AA77 = tmp; + /* update permutation vector based on row swap */ + i = perm4; perm4 = perm7; perm7 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA44); + icol4 = perm4; + AA40 = mulOp (tmp, AA40); + AA41 = mulOp (tmp, AA41); + AA42 = mulOp (tmp, AA42); + AA43 = mulOp (tmp, AA43); + AA44 = tmp; + AA45 = mulOp (tmp, AA45); + AA46 = mulOp (tmp, AA46); + AA47 = mulOp (tmp, AA47); + + /* eliminate above and below current row */ + tmp = AA04; + AA00 = fmnaOp (tmp, AA40, AA00); + AA01 = fmnaOp (tmp, AA41, AA01); + AA02 = fmnaOp (tmp, AA42, AA02); + AA03 = fmnaOp (tmp, AA43, AA03); + AA04 = mulOp (negOp(tmp), AA44); + AA05 = fmnaOp (tmp, AA45, AA05); + AA06 = fmnaOp (tmp, AA46, AA06); + AA07 = fmnaOp (tmp, AA47, AA07); + + tmp = AA14; + AA10 = fmnaOp (tmp, AA40, AA10); + AA11 = fmnaOp (tmp, AA41, AA11); + AA12 = fmnaOp (tmp, AA42, AA12); + AA13 = fmnaOp (tmp, AA43, AA13); + AA14 = mulOp (negOp(tmp), AA44); + AA15 = fmnaOp (tmp, AA45, AA15); + AA16 = fmnaOp (tmp, AA46, AA16); + AA17 = fmnaOp (tmp, AA47, AA17); + + tmp = AA24; + AA20 = fmnaOp (tmp, AA40, AA20); + AA21 = fmnaOp (tmp, AA41, AA21); + AA22 = fmnaOp (tmp, AA42, AA22); + AA23 = fmnaOp (tmp, AA43, AA23); + AA24 = mulOp (negOp(tmp), AA44); + AA25 = fmnaOp (tmp, AA45, AA25); + AA26 = fmnaOp (tmp, AA46, AA26); + AA27 = fmnaOp (tmp, AA47, AA27); + + tmp = AA34; + AA30 = fmnaOp (tmp, AA40, AA30); + AA31 = fmnaOp (tmp, AA41, AA31); + AA32 = fmnaOp (tmp, AA42, AA32); + AA33 = fmnaOp (tmp, AA43, AA33); + AA34 = mulOp (negOp(tmp), AA44); + AA35 = fmnaOp (tmp, AA45, AA35); + AA36 = fmnaOp (tmp, AA46, AA36); + AA37 = fmnaOp (tmp, AA47, AA37); + + tmp = AA54; + AA50 = fmnaOp (tmp, AA40, AA50); + AA51 = fmnaOp (tmp, AA41, AA51); + AA52 = fmnaOp (tmp, AA42, AA52); + AA53 = fmnaOp (tmp, AA43, AA53); + AA54 = mulOp (negOp(tmp), AA44); + AA55 = fmnaOp (tmp, AA45, AA55); + AA56 = fmnaOp (tmp, AA46, AA56); + AA57 = fmnaOp (tmp, AA47, AA57); + + tmp = AA64; + AA60 = fmnaOp (tmp, AA40, AA60); + AA61 = fmnaOp (tmp, AA41, AA61); + AA62 = fmnaOp (tmp, AA42, AA62); + AA63 = fmnaOp (tmp, AA43, AA63); + AA64 = mulOp (negOp(tmp), AA44); + AA65 = fmnaOp (tmp, AA45, AA65); + AA66 = fmnaOp (tmp, AA46, AA66); + AA67 = fmnaOp (tmp, AA47, AA67); + + tmp = AA74; + AA70 = fmnaOp (tmp, AA40, AA70); + AA71 = fmnaOp (tmp, AA41, AA71); + AA72 = fmnaOp (tmp, AA42, AA72); + AA73 = fmnaOp (tmp, AA43, AA73); + AA74 = mulOp (negOp(tmp), AA44); + AA75 = fmnaOp (tmp, AA45, AA75); + AA76 = fmnaOp (tmp, AA46, AA76); + AA77 = fmnaOp (tmp, AA47, AA77); + + /****************** iteration 5 ****************/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA55); + pvt = 5; + t = absOp (AA65); + if (t > p) { p = t; pvt = 6; } + t = absOp (AA75); + if (t > p) { p = t; pvt = 7; } + + /* swap pivot row with row 5 */ + if (pvt == 6) { + tmp = AA50; AA50 = AA60; AA60 = tmp; + tmp = AA51; AA51 = AA61; AA61 = tmp; + tmp = AA52; AA52 = AA62; AA62 = tmp; + tmp = AA53; AA53 = AA63; AA63 = tmp; + tmp = AA54; AA54 = AA64; AA64 = tmp; + tmp = AA55; AA55 = AA65; AA65 = tmp; + tmp = AA56; AA56 = AA66; AA66 = tmp; + tmp = AA57; AA57 = AA67; AA67 = tmp; + /* update permutation vector based on row swap */ + i = perm5; perm5 = perm6; perm6 = i; + } + if (pvt == 7) { + tmp = AA50; AA50 = AA70; AA70 = tmp; + tmp = AA51; AA51 = AA71; AA71 = tmp; + tmp = AA52; AA52 = AA72; AA72 = tmp; + tmp = AA53; AA53 = AA73; AA73 = tmp; + tmp = AA54; AA54 = AA74; AA74 = tmp; + tmp = AA55; AA55 = AA75; AA75 = tmp; + tmp = AA56; AA56 = AA76; AA76 = tmp; + tmp = AA57; AA57 = AA77; AA77 = tmp; + /* update permutation vector based on row swap */ + i = perm5; perm5 = perm7; perm7 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA55); + icol5 = perm5; + AA50 = mulOp (tmp, AA50); + AA51 = mulOp (tmp, AA51); + AA52 = mulOp (tmp, AA52); + AA53 = mulOp (tmp, AA53); + AA54 = mulOp (tmp, AA54); + AA55 = tmp; + AA56 = mulOp (tmp, AA56); + AA57 = mulOp (tmp, AA57); + + /* eliminate above and below current row */ + tmp = AA05; + AA00 = fmnaOp (tmp, AA50, AA00); + AA01 = fmnaOp (tmp, AA51, AA01); + AA02 = fmnaOp (tmp, AA52, AA02); + AA03 = fmnaOp (tmp, AA53, AA03); + AA04 = fmnaOp (tmp, AA54, AA04); + AA05 = mulOp (negOp(tmp), AA55); + AA06 = fmnaOp (tmp, AA56, AA06); + AA07 = fmnaOp (tmp, AA57, AA07); + + tmp = AA15; + AA10 = fmnaOp (tmp, AA50, AA10); + AA11 = fmnaOp (tmp, AA51, AA11); + AA12 = fmnaOp (tmp, AA52, AA12); + AA13 = fmnaOp (tmp, AA53, AA13); + AA14 = fmnaOp (tmp, AA54, AA14); + AA15 = mulOp (negOp(tmp), AA55); + AA16 = fmnaOp (tmp, AA56, AA16); + AA17 = fmnaOp (tmp, AA57, AA17); + + tmp = AA25; + AA20 = fmnaOp (tmp, AA50, AA20); + AA21 = fmnaOp (tmp, AA51, AA21); + AA22 = fmnaOp (tmp, AA52, AA22); + AA23 = fmnaOp (tmp, AA53, AA23); + AA24 = fmnaOp (tmp, AA54, AA24); + AA25 = mulOp (negOp(tmp), AA55); + AA26 = fmnaOp (tmp, AA56, AA26); + AA27 = fmnaOp (tmp, AA57, AA27); + + tmp = AA35; + AA30 = fmnaOp (tmp, AA50, AA30); + AA31 = fmnaOp (tmp, AA51, AA31); + AA32 = fmnaOp (tmp, AA52, AA32); + AA33 = fmnaOp (tmp, AA53, AA33); + AA34 = fmnaOp (tmp, AA54, AA34); + AA35 = mulOp (negOp(tmp), AA55); + AA36 = fmnaOp (tmp, AA56, AA36); + AA37 = fmnaOp (tmp, AA57, AA37); + + tmp = AA45; + AA40 = fmnaOp (tmp, AA50, AA40); + AA41 = fmnaOp (tmp, AA51, AA41); + AA42 = fmnaOp (tmp, AA52, AA42); + AA43 = fmnaOp (tmp, AA53, AA43); + AA44 = fmnaOp (tmp, AA54, AA44); + AA45 = mulOp (negOp(tmp), AA55); + AA46 = fmnaOp (tmp, AA56, AA46); + AA47 = fmnaOp (tmp, AA57, AA47); + + tmp = AA65; + AA60 = fmnaOp (tmp, AA50, AA60); + AA61 = fmnaOp (tmp, AA51, AA61); + AA62 = fmnaOp (tmp, AA52, AA62); + AA63 = fmnaOp (tmp, AA53, AA63); + AA64 = fmnaOp (tmp, AA54, AA64); + AA65 = mulOp (negOp(tmp), AA55); + AA66 = fmnaOp (tmp, AA56, AA66); + AA67 = fmnaOp (tmp, AA57, AA67); + + tmp = AA75; + AA70 = fmnaOp (tmp, AA50, AA70); + AA71 = fmnaOp (tmp, AA51, AA71); + AA72 = fmnaOp (tmp, AA52, AA72); + AA73 = fmnaOp (tmp, AA53, AA73); + AA74 = fmnaOp (tmp, AA54, AA74); + AA75 = mulOp (negOp(tmp), AA55); + AA76 = fmnaOp (tmp, AA56, AA76); + AA77 = fmnaOp (tmp, AA57, AA77); + + /****************** iteration 6 ****************/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA66); + pvt = 6; + t = absOp (AA76); + if (t > p) { p = t; pvt = 7; } + + /* swap pivot row with row 6 */ + if (pvt == 7) { + tmp = AA60; AA60 = AA70; AA70 = tmp; + tmp = AA61; AA61 = AA71; AA71 = tmp; + tmp = AA62; AA62 = AA72; AA72 = tmp; + tmp = AA63; AA63 = AA73; AA73 = tmp; + tmp = AA64; AA64 = AA74; AA74 = tmp; + tmp = AA65; AA65 = AA75; AA75 = tmp; + tmp = AA66; AA66 = AA76; AA76 = tmp; + tmp = AA67; AA67 = AA77; AA77 = tmp; + /* update permutation vector based on row swap */ + i = perm6; perm6 = perm7; perm7 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA66); + icol6 = perm6; + AA60 = mulOp (tmp, AA60); + AA61 = mulOp (tmp, AA61); + AA62 = mulOp (tmp, AA62); + AA63 = mulOp (tmp, AA63); + AA64 = mulOp (tmp, AA64); + AA65 = mulOp (tmp, AA65); + AA66 = tmp; + AA67 = mulOp (tmp, AA67); + + /* eliminate above and below current row */ + tmp = AA06; + AA00 = fmnaOp (tmp, AA60, AA00); + AA01 = fmnaOp (tmp, AA61, AA01); + AA02 = fmnaOp (tmp, AA62, AA02); + AA03 = fmnaOp (tmp, AA63, AA03); + AA04 = fmnaOp (tmp, AA64, AA04); + AA05 = fmnaOp (tmp, AA65, AA05); + AA06 = mulOp (negOp(tmp), AA66); + AA07 = fmnaOp (tmp, AA67, AA07); + + tmp = AA16; + AA10 = fmnaOp (tmp, AA60, AA10); + AA11 = fmnaOp (tmp, AA61, AA11); + AA12 = fmnaOp (tmp, AA62, AA12); + AA13 = fmnaOp (tmp, AA63, AA13); + AA14 = fmnaOp (tmp, AA64, AA14); + AA15 = fmnaOp (tmp, AA65, AA15); + AA16 = mulOp (negOp(tmp), AA66); + AA17 = fmnaOp (tmp, AA67, AA17); + + tmp = AA26; + AA20 = fmnaOp (tmp, AA60, AA20); + AA21 = fmnaOp (tmp, AA61, AA21); + AA22 = fmnaOp (tmp, AA62, AA22); + AA23 = fmnaOp (tmp, AA63, AA23); + AA24 = fmnaOp (tmp, AA64, AA24); + AA25 = fmnaOp (tmp, AA65, AA25); + AA26 = mulOp (negOp(tmp), AA66); + AA27 = fmnaOp (tmp, AA67, AA27); + + tmp = AA36; + AA30 = fmnaOp (tmp, AA60, AA30); + AA31 = fmnaOp (tmp, AA61, AA31); + AA32 = fmnaOp (tmp, AA62, AA32); + AA33 = fmnaOp (tmp, AA63, AA33); + AA34 = fmnaOp (tmp, AA64, AA34); + AA35 = fmnaOp (tmp, AA65, AA35); + AA36 = mulOp (negOp(tmp), AA66); + AA37 = fmnaOp (tmp, AA67, AA37); + + tmp = AA46; + AA40 = fmnaOp (tmp, AA60, AA40); + AA41 = fmnaOp (tmp, AA61, AA41); + AA42 = fmnaOp (tmp, AA62, AA42); + AA43 = fmnaOp (tmp, AA63, AA43); + AA44 = fmnaOp (tmp, AA64, AA44); + AA45 = fmnaOp (tmp, AA65, AA45); + AA46 = mulOp (negOp(tmp), AA66); + AA47 = fmnaOp (tmp, AA67, AA47); + + tmp = AA56; + AA50 = fmnaOp (tmp, AA60, AA50); + AA51 = fmnaOp (tmp, AA61, AA51); + AA52 = fmnaOp (tmp, AA62, AA52); + AA53 = fmnaOp (tmp, AA63, AA53); + AA54 = fmnaOp (tmp, AA64, AA54); + AA55 = fmnaOp (tmp, AA65, AA55); + AA56 = mulOp (negOp(tmp), AA66); + AA57 = fmnaOp (tmp, AA67, AA57); + + tmp = AA76; + AA70 = fmnaOp (tmp, AA60, AA70); + AA71 = fmnaOp (tmp, AA61, AA71); + AA72 = fmnaOp (tmp, AA62, AA72); + AA73 = fmnaOp (tmp, AA63, AA73); + AA74 = fmnaOp (tmp, AA64, AA74); + AA75 = fmnaOp (tmp, AA65, AA75); + AA76 = mulOp (negOp(tmp), AA66); + AA77 = fmnaOp (tmp, AA67, AA77); + + /****************** iteration 7 ****************/ + + /* scale current row */ + tmp = rcpOp (AA77); + icol7 = perm7; + AA70 = mulOp (tmp, AA70); + AA71 = mulOp (tmp, AA71); + AA72 = mulOp (tmp, AA72); + AA73 = mulOp (tmp, AA73); + AA74 = mulOp (tmp, AA74); + AA75 = mulOp (tmp, AA75); + AA76 = mulOp (tmp, AA76); + AA77 = tmp; + + /* eliminate above and below current row */ + tmp = AA07; + AA00 = fmnaOp (tmp, AA70, AA00); + AA01 = fmnaOp (tmp, AA71, AA01); + AA02 = fmnaOp (tmp, AA72, AA02); + AA03 = fmnaOp (tmp, AA73, AA03); + AA04 = fmnaOp (tmp, AA74, AA04); + AA05 = fmnaOp (tmp, AA75, AA05); + AA06 = fmnaOp (tmp, AA76, AA06); + AA07 = mulOp (negOp(tmp), AA77); + + tmp = AA17; + AA10 = fmnaOp (tmp, AA70, AA10); + AA11 = fmnaOp (tmp, AA71, AA11); + AA12 = fmnaOp (tmp, AA72, AA12); + AA13 = fmnaOp (tmp, AA73, AA13); + AA14 = fmnaOp (tmp, AA74, AA14); + AA15 = fmnaOp (tmp, AA75, AA15); + AA16 = fmnaOp (tmp, AA76, AA16); + AA17 = mulOp (negOp(tmp), AA77); + + tmp = AA27; + AA20 = fmnaOp (tmp, AA70, AA20); + AA21 = fmnaOp (tmp, AA71, AA21); + AA22 = fmnaOp (tmp, AA72, AA22); + AA23 = fmnaOp (tmp, AA73, AA23); + AA24 = fmnaOp (tmp, AA74, AA24); + AA25 = fmnaOp (tmp, AA75, AA25); + AA26 = fmnaOp (tmp, AA76, AA26); + AA27 = mulOp (negOp(tmp), AA77); + + tmp = AA37; + AA30 = fmnaOp (tmp, AA70, AA30); + AA31 = fmnaOp (tmp, AA71, AA31); + AA32 = fmnaOp (tmp, AA72, AA32); + AA33 = fmnaOp (tmp, AA73, AA33); + AA34 = fmnaOp (tmp, AA74, AA34); + AA35 = fmnaOp (tmp, AA75, AA35); + AA36 = fmnaOp (tmp, AA76, AA36); + AA37 = mulOp (negOp(tmp), AA77); + + tmp = AA47; + AA40 = fmnaOp (tmp, AA70, AA40); + AA41 = fmnaOp (tmp, AA71, AA41); + AA42 = fmnaOp (tmp, AA72, AA42); + AA43 = fmnaOp (tmp, AA73, AA43); + AA44 = fmnaOp (tmp, AA74, AA44); + AA45 = fmnaOp (tmp, AA75, AA45); + AA46 = fmnaOp (tmp, AA76, AA46); + AA47 = mulOp (negOp(tmp), AA77); + + tmp = AA57; + AA50 = fmnaOp (tmp, AA70, AA50); + AA51 = fmnaOp (tmp, AA71, AA51); + AA52 = fmnaOp (tmp, AA72, AA52); + AA53 = fmnaOp (tmp, AA73, AA53); + AA54 = fmnaOp (tmp, AA74, AA54); + AA55 = fmnaOp (tmp, AA75, AA55); + AA56 = fmnaOp (tmp, AA76, AA56); + AA57 = mulOp (negOp(tmp), AA77); + + tmp = AA67; + AA60 = fmnaOp (tmp, AA70, AA60); + AA61 = fmnaOp (tmp, AA71, AA61); + AA62 = fmnaOp (tmp, AA72, AA62); + AA63 = fmnaOp (tmp, AA73, AA63); + AA64 = fmnaOp (tmp, AA74, AA64); + AA65 = fmnaOp (tmp, AA75, AA65); + AA66 = fmnaOp (tmp, AA76, AA66); + AA67 = mulOp (negOp(tmp), AA77); + + /* sort columns into the correct order */ + Ainv(0,icol0) = AA00; + Ainv(1,icol0) = AA10; + Ainv(2,icol0) = AA20; + Ainv(3,icol0) = AA30; + Ainv(4,icol0) = AA40; + Ainv(5,icol0) = AA50; + Ainv(6,icol0) = AA60; + Ainv(7,icol0) = AA70; + Ainv(0,icol1) = AA01; + Ainv(1,icol1) = AA11; + Ainv(2,icol1) = AA21; + Ainv(3,icol1) = AA31; + Ainv(4,icol1) = AA41; + Ainv(5,icol1) = AA51; + Ainv(6,icol1) = AA61; + Ainv(7,icol1) = AA71; + Ainv(0,icol2) = AA02; + Ainv(1,icol2) = AA12; + Ainv(2,icol2) = AA22; + Ainv(3,icol2) = AA32; + Ainv(4,icol2) = AA42; + Ainv(5,icol2) = AA52; + Ainv(6,icol2) = AA62; + Ainv(7,icol2) = AA72; + Ainv(0,icol3) = AA03; + Ainv(1,icol3) = AA13; + Ainv(2,icol3) = AA23; + Ainv(3,icol3) = AA33; + Ainv(4,icol3) = AA43; + Ainv(5,icol3) = AA53; + Ainv(6,icol3) = AA63; + Ainv(7,icol3) = AA73; + Ainv(0,icol4) = AA04; + Ainv(1,icol4) = AA14; + Ainv(2,icol4) = AA24; + Ainv(3,icol4) = AA34; + Ainv(4,icol4) = AA44; + Ainv(5,icol4) = AA54; + Ainv(6,icol4) = AA64; + Ainv(7,icol4) = AA74; + Ainv(0,icol5) = AA05; + Ainv(1,icol5) = AA15; + Ainv(2,icol5) = AA25; + Ainv(3,icol5) = AA35; + Ainv(4,icol5) = AA45; + Ainv(5,icol5) = AA55; + Ainv(6,icol5) = AA65; + Ainv(7,icol5) = AA75; + Ainv(0,icol6) = AA06; + Ainv(1,icol6) = AA16; + Ainv(2,icol6) = AA26; + Ainv(3,icol6) = AA36; + Ainv(4,icol6) = AA46; + Ainv(5,icol6) = AA56; + Ainv(6,icol6) = AA66; + Ainv(7,icol6) = AA76; + Ainv(0,icol7) = AA07; + Ainv(1,icol7) = AA17; + Ainv(2,icol7) = AA27; + Ainv(3,icol7) = AA37; + Ainv(4,icol7) = AA47; + Ainv(5,icol7) = AA57; + Ainv(6,icol7) = AA67; + Ainv(7,icol7) = AA77; + } +} + +template +__global__ void matinv_9x9_matrix_per_thread (const T *A, T *Ainv, int batch) +{ + const int blkNum = blockIdx.y * gridDim.x + blockIdx.x; + const int thrdNum = blkNum * blockDim.x + threadIdx.x; + const int N = 9; + int perm0, perm1, perm2, perm3, perm4, perm5, perm6, perm7, perm8; + int icol0, icol1, icol2, icol3, icol4, icol5, icol6, icol7, icol8; + T AA00, AA01, AA02, AA03, AA04, AA05, AA06, AA07, AA08; + T AA10, AA11, AA12, AA13, AA14, AA15, AA16, AA17, AA18; + T AA20, AA21, AA22, AA23, AA24, AA25, AA26, AA27, AA28; + T AA30, AA31, AA32, AA33, AA34, AA35, AA36, AA37, AA38; + T AA40, AA41, AA42, AA43, AA44, AA45, AA46, AA47, AA48; + T AA50, AA51, AA52, AA53, AA54, AA55, AA56, AA57, AA58; + T AA60, AA61, AA62, AA63, AA64, AA65, AA66, AA67, AA68; + T AA70, AA71, AA72, AA73, AA74, AA75, AA76, AA77, AA78; + T AA80, AA81, AA82, AA83, AA84, AA85, AA86, AA87, AA88; + T tmp; +#if USE_PIVOTING + typename config::absValType t; + typename config::absValType p; + int i, pvt; +#endif + + A += thrdNum * N * N; + Ainv += thrdNum * N * N; + + if (thrdNum < batch) { + + AA00 = A[0]; + AA10 = A[1]; + AA20 = A[2]; + AA30 = A[3]; + AA40 = A[4]; + AA50 = A[5]; + AA60 = A[6]; + AA70 = A[7]; + AA80 = A[8]; + AA01 = A[9]; + AA11 = A[10]; + AA21 = A[11]; + AA31 = A[12]; + AA41 = A[13]; + AA51 = A[14]; + AA61 = A[15]; + AA71 = A[16]; + AA81 = A[17]; + AA02 = A[18]; + AA12 = A[19]; + AA22 = A[20]; + AA32 = A[21]; + AA42 = A[22]; + AA52 = A[23]; + AA62 = A[24]; + AA72 = A[25]; + AA82 = A[26]; + AA03 = A[27]; + AA13 = A[28]; + AA23 = A[29]; + AA33 = A[30]; + AA43 = A[31]; + AA53 = A[32]; + AA63 = A[33]; + AA73 = A[34]; + AA83 = A[35]; + AA04 = A[36]; + AA14 = A[37]; + AA24 = A[38]; + AA34 = A[39]; + AA44 = A[40]; + AA54 = A[41]; + AA64 = A[42]; + AA74 = A[43]; + AA84 = A[44]; + AA05 = A[45]; + AA15 = A[46]; + AA25 = A[47]; + AA35 = A[48]; + AA45 = A[49]; + AA55 = A[50]; + AA65 = A[51]; + AA75 = A[52]; + AA85 = A[53]; + AA06 = A[54]; + AA16 = A[55]; + AA26 = A[56]; + AA36 = A[57]; + AA46 = A[58]; + AA56 = A[59]; + AA66 = A[60]; + AA76 = A[61]; + AA86 = A[62]; + AA07 = A[63]; + AA17 = A[64]; + AA27 = A[65]; + AA37 = A[66]; + AA47 = A[67]; + AA57 = A[68]; + AA67 = A[69]; + AA77 = A[70]; + AA87 = A[71]; + AA08 = A[72]; + AA18 = A[73]; + AA28 = A[74]; + AA38 = A[75]; + AA48 = A[76]; + AA58 = A[77]; + AA68 = A[78]; + AA78 = A[79]; + AA88 = A[80]; + + perm0 = 0; + perm1 = 1; + perm2 = 2; + perm3 = 3; + perm4 = 4; + perm5 = 5; + perm6 = 6; + perm7 = 7; + perm8 = 8; + + /****************** iteration 0 ***********/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA00); + pvt = 0; + t = absOp (AA10); + if (t > p) { p = t; pvt = 1; } + t = absOp (AA20); + if (t > p) { p = t; pvt = 2; } + t = absOp (AA30); + if (t > p) { p = t; pvt = 3; } + t = absOp (AA40); + if (t > p) { p = t; pvt = 4; } + t = absOp (AA50); + if (t > p) { p = t; pvt = 5; } + t = absOp (AA60); + if (t > p) { p = t; pvt = 6; } + t = absOp (AA70); + if (t > p) { p = t; pvt = 7; } + t = absOp (AA80); + if (t > p) { p = t; pvt = 8; } + + /* swap pivot row with row 0 */ + if (pvt == 1) { + tmp = AA00; AA00 = AA10; AA10 = tmp; + tmp = AA01; AA01 = AA11; AA11 = tmp; + tmp = AA02; AA02 = AA12; AA12 = tmp; + tmp = AA03; AA03 = AA13; AA13 = tmp; + tmp = AA04; AA04 = AA14; AA14 = tmp; + tmp = AA05; AA05 = AA15; AA15 = tmp; + tmp = AA06; AA06 = AA16; AA16 = tmp; + tmp = AA07; AA07 = AA17; AA17 = tmp; + tmp = AA08; AA08 = AA18; AA18 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm1; perm1 = i; + } + if (pvt == 2) { + tmp = AA00; AA00 = AA20; AA20 = tmp; + tmp = AA01; AA01 = AA21; AA21 = tmp; + tmp = AA02; AA02 = AA22; AA22 = tmp; + tmp = AA03; AA03 = AA23; AA23 = tmp; + tmp = AA04; AA04 = AA24; AA24 = tmp; + tmp = AA05; AA05 = AA25; AA25 = tmp; + tmp = AA06; AA06 = AA26; AA26 = tmp; + tmp = AA07; AA07 = AA27; AA27 = tmp; + tmp = AA08; AA08 = AA28; AA28 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm2; perm2 = i; + } + if (pvt == 3) { + tmp = AA00; AA00 = AA30; AA30 = tmp; + tmp = AA01; AA01 = AA31; AA31 = tmp; + tmp = AA02; AA02 = AA32; AA32 = tmp; + tmp = AA03; AA03 = AA33; AA33 = tmp; + tmp = AA04; AA04 = AA34; AA34 = tmp; + tmp = AA05; AA05 = AA35; AA35 = tmp; + tmp = AA06; AA06 = AA36; AA36 = tmp; + tmp = AA07; AA07 = AA37; AA37 = tmp; + tmp = AA08; AA08 = AA38; AA38 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm3; perm3 = i; + } + if (pvt == 4) { + tmp = AA00; AA00 = AA40; AA40 = tmp; + tmp = AA01; AA01 = AA41; AA41 = tmp; + tmp = AA02; AA02 = AA42; AA42 = tmp; + tmp = AA03; AA03 = AA43; AA43 = tmp; + tmp = AA04; AA04 = AA44; AA44 = tmp; + tmp = AA05; AA05 = AA45; AA45 = tmp; + tmp = AA06; AA06 = AA46; AA46 = tmp; + tmp = AA07; AA07 = AA47; AA47 = tmp; + tmp = AA08; AA08 = AA48; AA48 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm4; perm4 = i; + } + if (pvt == 5) { + tmp = AA00; AA00 = AA50; AA50 = tmp; + tmp = AA01; AA01 = AA51; AA51 = tmp; + tmp = AA02; AA02 = AA52; AA52 = tmp; + tmp = AA03; AA03 = AA53; AA53 = tmp; + tmp = AA04; AA04 = AA54; AA54 = tmp; + tmp = AA05; AA05 = AA55; AA55 = tmp; + tmp = AA06; AA06 = AA56; AA56 = tmp; + tmp = AA07; AA07 = AA57; AA57 = tmp; + tmp = AA08; AA08 = AA58; AA58 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm5; perm5 = i; + } + if (pvt == 6) { + tmp = AA00; AA00 = AA60; AA60 = tmp; + tmp = AA01; AA01 = AA61; AA61 = tmp; + tmp = AA02; AA02 = AA62; AA62 = tmp; + tmp = AA03; AA03 = AA63; AA63 = tmp; + tmp = AA04; AA04 = AA64; AA64 = tmp; + tmp = AA05; AA05 = AA65; AA65 = tmp; + tmp = AA06; AA06 = AA66; AA66 = tmp; + tmp = AA07; AA07 = AA67; AA67 = tmp; + tmp = AA08; AA08 = AA68; AA68 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm6; perm6 = i; + } + if (pvt == 7) { + tmp = AA00; AA00 = AA70; AA70 = tmp; + tmp = AA01; AA01 = AA71; AA71 = tmp; + tmp = AA02; AA02 = AA72; AA72 = tmp; + tmp = AA03; AA03 = AA73; AA73 = tmp; + tmp = AA04; AA04 = AA74; AA74 = tmp; + tmp = AA05; AA05 = AA75; AA75 = tmp; + tmp = AA06; AA06 = AA76; AA76 = tmp; + tmp = AA07; AA07 = AA77; AA77 = tmp; + tmp = AA08; AA08 = AA78; AA78 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm7; perm7 = i; + } + if (pvt == 8) { + tmp = AA00; AA00 = AA80; AA80 = tmp; + tmp = AA01; AA01 = AA81; AA81 = tmp; + tmp = AA02; AA02 = AA82; AA82 = tmp; + tmp = AA03; AA03 = AA83; AA83 = tmp; + tmp = AA04; AA04 = AA84; AA84 = tmp; + tmp = AA05; AA05 = AA85; AA85 = tmp; + tmp = AA06; AA06 = AA86; AA86 = tmp; + tmp = AA07; AA07 = AA87; AA87 = tmp; + tmp = AA08; AA08 = AA88; AA88 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm8; perm8 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA00); + icol0 = perm0; + AA00 = tmp; + AA01 = mulOp (tmp, AA01); + AA02 = mulOp (tmp, AA02); + AA03 = mulOp (tmp, AA03); + AA04 = mulOp (tmp, AA04); + AA05 = mulOp (tmp, AA05); + AA06 = mulOp (tmp, AA06); + AA07 = mulOp (tmp, AA07); + AA08 = mulOp (tmp, AA08); + + /* eliminate above and below current row */ + tmp = AA10; + AA10 = mulOp (negOp(tmp), AA00); + AA11 = fmnaOp (tmp, AA01, AA11); + AA12 = fmnaOp (tmp, AA02, AA12); + AA13 = fmnaOp (tmp, AA03, AA13); + AA14 = fmnaOp (tmp, AA04, AA14); + AA15 = fmnaOp (tmp, AA05, AA15); + AA16 = fmnaOp (tmp, AA06, AA16); + AA17 = fmnaOp (tmp, AA07, AA17); + AA18 = fmnaOp (tmp, AA08, AA18); + + tmp = AA20; + AA20 = mulOp (negOp(tmp), AA00); + AA21 = fmnaOp (tmp, AA01, AA21); + AA22 = fmnaOp (tmp, AA02, AA22); + AA23 = fmnaOp (tmp, AA03, AA23); + AA24 = fmnaOp (tmp, AA04, AA24); + AA25 = fmnaOp (tmp, AA05, AA25); + AA26 = fmnaOp (tmp, AA06, AA26); + AA27 = fmnaOp (tmp, AA07, AA27); + AA28 = fmnaOp (tmp, AA08, AA28); + + tmp = AA30; + AA30 = mulOp (negOp(tmp), AA00); + AA31 = fmnaOp (tmp, AA01, AA31); + AA32 = fmnaOp (tmp, AA02, AA32); + AA33 = fmnaOp (tmp, AA03, AA33); + AA34 = fmnaOp (tmp, AA04, AA34); + AA35 = fmnaOp (tmp, AA05, AA35); + AA36 = fmnaOp (tmp, AA06, AA36); + AA37 = fmnaOp (tmp, AA07, AA37); + AA38 = fmnaOp (tmp, AA08, AA38); + + tmp = AA40; + AA40 = mulOp (negOp(tmp), AA00); + AA41 = fmnaOp (tmp, AA01, AA41); + AA42 = fmnaOp (tmp, AA02, AA42); + AA43 = fmnaOp (tmp, AA03, AA43); + AA44 = fmnaOp (tmp, AA04, AA44); + AA45 = fmnaOp (tmp, AA05, AA45); + AA46 = fmnaOp (tmp, AA06, AA46); + AA47 = fmnaOp (tmp, AA07, AA47); + AA48 = fmnaOp (tmp, AA08, AA48); + + tmp = AA50; + AA50 = mulOp (negOp(tmp), AA00); + AA51 = fmnaOp (tmp, AA01, AA51); + AA52 = fmnaOp (tmp, AA02, AA52); + AA53 = fmnaOp (tmp, AA03, AA53); + AA54 = fmnaOp (tmp, AA04, AA54); + AA55 = fmnaOp (tmp, AA05, AA55); + AA56 = fmnaOp (tmp, AA06, AA56); + AA57 = fmnaOp (tmp, AA07, AA57); + AA58 = fmnaOp (tmp, AA08, AA58); + + tmp = AA60; + AA60 = mulOp (negOp(tmp), AA00); + AA61 = fmnaOp (tmp, AA01, AA61); + AA62 = fmnaOp (tmp, AA02, AA62); + AA63 = fmnaOp (tmp, AA03, AA63); + AA64 = fmnaOp (tmp, AA04, AA64); + AA65 = fmnaOp (tmp, AA05, AA65); + AA66 = fmnaOp (tmp, AA06, AA66); + AA67 = fmnaOp (tmp, AA07, AA67); + AA68 = fmnaOp (tmp, AA08, AA68); + + tmp = AA70; + AA70 = mulOp (negOp(tmp), AA00); + AA71 = fmnaOp (tmp, AA01, AA71); + AA72 = fmnaOp (tmp, AA02, AA72); + AA73 = fmnaOp (tmp, AA03, AA73); + AA74 = fmnaOp (tmp, AA04, AA74); + AA75 = fmnaOp (tmp, AA05, AA75); + AA76 = fmnaOp (tmp, AA06, AA76); + AA77 = fmnaOp (tmp, AA07, AA77); + AA78 = fmnaOp (tmp, AA08, AA78); + + tmp = AA80; + AA80 = mulOp (negOp(tmp), AA00); + AA81 = fmnaOp (tmp, AA01, AA81); + AA82 = fmnaOp (tmp, AA02, AA82); + AA83 = fmnaOp (tmp, AA03, AA83); + AA84 = fmnaOp (tmp, AA04, AA84); + AA85 = fmnaOp (tmp, AA05, AA85); + AA86 = fmnaOp (tmp, AA06, AA86); + AA87 = fmnaOp (tmp, AA07, AA87); + AA88 = fmnaOp (tmp, AA08, AA88); + + /****************** iteration 1 ***********/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA11); + pvt = 1; + t = absOp (AA21); + if (t > p) { p = t; pvt = 2; } + t = absOp (AA31); + if (t > p) { p = t; pvt = 3; } + t = absOp (AA41); + if (t > p) { p = t; pvt = 4; } + t = absOp (AA51); + if (t > p) { p = t; pvt = 5; } + t = absOp (AA61); + if (t > p) { p = t; pvt = 6; } + t = absOp (AA71); + if (t > p) { p = t; pvt = 7; } + t = absOp (AA81); + if (t > p) { p = t; pvt = 8; } + + /* swap pivot row with row 1 */ + if (pvt == 2) { + tmp = AA10; AA10 = AA20; AA20 = tmp; + tmp = AA11; AA11 = AA21; AA21 = tmp; + tmp = AA12; AA12 = AA22; AA22 = tmp; + tmp = AA13; AA13 = AA23; AA23 = tmp; + tmp = AA14; AA14 = AA24; AA24 = tmp; + tmp = AA15; AA15 = AA25; AA25 = tmp; + tmp = AA16; AA16 = AA26; AA26 = tmp; + tmp = AA17; AA17 = AA27; AA27 = tmp; + tmp = AA18; AA18 = AA28; AA28 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm2; perm2 = i; + } + if (pvt == 3) { + tmp = AA10; AA10 = AA30; AA30 = tmp; + tmp = AA11; AA11 = AA31; AA31 = tmp; + tmp = AA12; AA12 = AA32; AA32 = tmp; + tmp = AA13; AA13 = AA33; AA33 = tmp; + tmp = AA14; AA14 = AA34; AA34 = tmp; + tmp = AA15; AA15 = AA35; AA35 = tmp; + tmp = AA16; AA16 = AA36; AA36 = tmp; + tmp = AA17; AA17 = AA37; AA37 = tmp; + tmp = AA18; AA18 = AA38; AA38 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm3; perm3 = i; + } + if (pvt == 4) { + tmp = AA10; AA10 = AA40; AA40 = tmp; + tmp = AA11; AA11 = AA41; AA41 = tmp; + tmp = AA12; AA12 = AA42; AA42 = tmp; + tmp = AA13; AA13 = AA43; AA43 = tmp; + tmp = AA14; AA14 = AA44; AA44 = tmp; + tmp = AA15; AA15 = AA45; AA45 = tmp; + tmp = AA16; AA16 = AA46; AA46 = tmp; + tmp = AA17; AA17 = AA47; AA47 = tmp; + tmp = AA18; AA18 = AA48; AA48 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm4; perm4 = i; + } + if (pvt == 5) { + tmp = AA10; AA10 = AA50; AA50 = tmp; + tmp = AA11; AA11 = AA51; AA51 = tmp; + tmp = AA12; AA12 = AA52; AA52 = tmp; + tmp = AA13; AA13 = AA53; AA53 = tmp; + tmp = AA14; AA14 = AA54; AA54 = tmp; + tmp = AA15; AA15 = AA55; AA55 = tmp; + tmp = AA16; AA16 = AA56; AA56 = tmp; + tmp = AA17; AA17 = AA57; AA57 = tmp; + tmp = AA18; AA18 = AA58; AA58 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm5; perm5 = i; + } + if (pvt == 6) { + tmp = AA10; AA10 = AA60; AA60 = tmp; + tmp = AA11; AA11 = AA61; AA61 = tmp; + tmp = AA12; AA12 = AA62; AA62 = tmp; + tmp = AA13; AA13 = AA63; AA63 = tmp; + tmp = AA14; AA14 = AA64; AA64 = tmp; + tmp = AA15; AA15 = AA65; AA65 = tmp; + tmp = AA16; AA16 = AA66; AA66 = tmp; + tmp = AA17; AA17 = AA67; AA67 = tmp; + tmp = AA18; AA18 = AA68; AA68 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm6; perm6 = i; + } + if (pvt == 7) { + tmp = AA10; AA10 = AA70; AA70 = tmp; + tmp = AA11; AA11 = AA71; AA71 = tmp; + tmp = AA12; AA12 = AA72; AA72 = tmp; + tmp = AA13; AA13 = AA73; AA73 = tmp; + tmp = AA14; AA14 = AA74; AA74 = tmp; + tmp = AA15; AA15 = AA75; AA75 = tmp; + tmp = AA16; AA16 = AA76; AA76 = tmp; + tmp = AA17; AA17 = AA77; AA77 = tmp; + tmp = AA18; AA18 = AA78; AA78 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm7; perm7 = i; + } + if (pvt == 8) { + tmp = AA10; AA10 = AA80; AA80 = tmp; + tmp = AA11; AA11 = AA81; AA81 = tmp; + tmp = AA12; AA12 = AA82; AA82 = tmp; + tmp = AA13; AA13 = AA83; AA83 = tmp; + tmp = AA14; AA14 = AA84; AA84 = tmp; + tmp = AA15; AA15 = AA85; AA85 = tmp; + tmp = AA16; AA16 = AA86; AA86 = tmp; + tmp = AA17; AA17 = AA87; AA87 = tmp; + tmp = AA18; AA18 = AA88; AA88 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm8; perm8 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA11); + icol1 = perm1; + AA10 = mulOp (tmp, AA10); + AA11 = tmp; + AA12 = mulOp (tmp, AA12); + AA13 = mulOp (tmp, AA13); + AA14 = mulOp (tmp, AA14); + AA15 = mulOp (tmp, AA15); + AA16 = mulOp (tmp, AA16); + AA17 = mulOp (tmp, AA17); + AA18 = mulOp (tmp, AA18); + + /* eliminate above and below current row */ + tmp = AA01; + AA00 = fmnaOp (tmp, AA10, AA00); + AA01 = mulOp (negOp(tmp), AA11); + AA02 = fmnaOp (tmp, AA12, AA02); + AA03 = fmnaOp (tmp, AA13, AA03); + AA04 = fmnaOp (tmp, AA14, AA04); + AA05 = fmnaOp (tmp, AA15, AA05); + AA06 = fmnaOp (tmp, AA16, AA06); + AA07 = fmnaOp (tmp, AA17, AA07); + AA08 = fmnaOp (tmp, AA18, AA08); + + tmp = AA21; + AA20 = fmnaOp (tmp, AA10, AA20); + AA21 = mulOp (negOp(tmp), AA11); + AA22 = fmnaOp (tmp, AA12, AA22); + AA23 = fmnaOp (tmp, AA13, AA23); + AA24 = fmnaOp (tmp, AA14, AA24); + AA25 = fmnaOp (tmp, AA15, AA25); + AA26 = fmnaOp (tmp, AA16, AA26); + AA27 = fmnaOp (tmp, AA17, AA27); + AA28 = fmnaOp (tmp, AA18, AA28); + + tmp = AA31; + AA30 = fmnaOp (tmp, AA10, AA30); + AA31 = mulOp (negOp(tmp), AA11); + AA32 = fmnaOp (tmp, AA12, AA32); + AA33 = fmnaOp (tmp, AA13, AA33); + AA34 = fmnaOp (tmp, AA14, AA34); + AA35 = fmnaOp (tmp, AA15, AA35); + AA36 = fmnaOp (tmp, AA16, AA36); + AA37 = fmnaOp (tmp, AA17, AA37); + AA38 = fmnaOp (tmp, AA18, AA38); + + tmp = AA41; + AA40 = fmnaOp (tmp, AA10, AA40); + AA41 = mulOp (negOp(tmp), AA11); + AA42 = fmnaOp (tmp, AA12, AA42); + AA43 = fmnaOp (tmp, AA13, AA43); + AA44 = fmnaOp (tmp, AA14, AA44); + AA45 = fmnaOp (tmp, AA15, AA45); + AA46 = fmnaOp (tmp, AA16, AA46); + AA47 = fmnaOp (tmp, AA17, AA47); + AA48 = fmnaOp (tmp, AA18, AA48); + + tmp = AA51; + AA50 = fmnaOp (tmp, AA10, AA50); + AA51 = mulOp (negOp(tmp), AA11); + AA52 = fmnaOp (tmp, AA12, AA52); + AA53 = fmnaOp (tmp, AA13, AA53); + AA54 = fmnaOp (tmp, AA14, AA54); + AA55 = fmnaOp (tmp, AA15, AA55); + AA56 = fmnaOp (tmp, AA16, AA56); + AA57 = fmnaOp (tmp, AA17, AA57); + AA58 = fmnaOp (tmp, AA18, AA58); + + tmp = AA61; + AA60 = fmnaOp (tmp, AA10, AA60); + AA61 = mulOp (negOp(tmp), AA11); + AA62 = fmnaOp (tmp, AA12, AA62); + AA63 = fmnaOp (tmp, AA13, AA63); + AA64 = fmnaOp (tmp, AA14, AA64); + AA65 = fmnaOp (tmp, AA15, AA65); + AA66 = fmnaOp (tmp, AA16, AA66); + AA67 = fmnaOp (tmp, AA17, AA67); + AA68 = fmnaOp (tmp, AA18, AA68); + + tmp = AA71; + AA70 = fmnaOp (tmp, AA10, AA70); + AA71 = mulOp (negOp(tmp), AA11); + AA72 = fmnaOp (tmp, AA12, AA72); + AA73 = fmnaOp (tmp, AA13, AA73); + AA74 = fmnaOp (tmp, AA14, AA74); + AA75 = fmnaOp (tmp, AA15, AA75); + AA76 = fmnaOp (tmp, AA16, AA76); + AA77 = fmnaOp (tmp, AA17, AA77); + AA78 = fmnaOp (tmp, AA18, AA78); + + tmp = AA81; + AA80 = fmnaOp (tmp, AA10, AA80); + AA81 = mulOp (negOp(tmp), AA11); + AA82 = fmnaOp (tmp, AA12, AA82); + AA83 = fmnaOp (tmp, AA13, AA83); + AA84 = fmnaOp (tmp, AA14, AA84); + AA85 = fmnaOp (tmp, AA15, AA85); + AA86 = fmnaOp (tmp, AA16, AA86); + AA87 = fmnaOp (tmp, AA17, AA87); + AA88 = fmnaOp (tmp, AA18, AA88); + + /****************** iteration 2 ****************/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA22); + pvt = 2; + t = absOp (AA32); + if (t > p) { p = t; pvt = 3; } + t = absOp (AA42); + if (t > p) { p = t; pvt = 4; } + t = absOp (AA52); + if (t > p) { p = t; pvt = 5; } + t = absOp (AA62); + if (t > p) { p = t; pvt = 6; } + t = absOp (AA72); + if (t > p) { p = t; pvt = 7; } + t = absOp (AA82); + if (t > p) { p = t; pvt = 8; } + + /* swap pivot row with row 2 */ + if (pvt == 3) { + tmp = AA20; AA20 = AA30; AA30 = tmp; + tmp = AA21; AA21 = AA31; AA31 = tmp; + tmp = AA22; AA22 = AA32; AA32 = tmp; + tmp = AA23; AA23 = AA33; AA33 = tmp; + tmp = AA24; AA24 = AA34; AA34 = tmp; + tmp = AA25; AA25 = AA35; AA35 = tmp; + tmp = AA26; AA26 = AA36; AA36 = tmp; + tmp = AA27; AA27 = AA37; AA37 = tmp; + tmp = AA28; AA28 = AA38; AA38 = tmp; + /* update permutation vector based on row swap */ + i = perm2; perm2 = perm3; perm3 = i; + } + if (pvt == 4) { + tmp = AA20; AA20 = AA40; AA40 = tmp; + tmp = AA21; AA21 = AA41; AA41 = tmp; + tmp = AA22; AA22 = AA42; AA42 = tmp; + tmp = AA23; AA23 = AA43; AA43 = tmp; + tmp = AA24; AA24 = AA44; AA44 = tmp; + tmp = AA25; AA25 = AA45; AA45 = tmp; + tmp = AA26; AA26 = AA46; AA46 = tmp; + tmp = AA27; AA27 = AA47; AA47 = tmp; + tmp = AA28; AA28 = AA48; AA48 = tmp; + /* update permutation vector based on row swap */ + i = perm2; perm2 = perm4; perm4 = i; + } + if (pvt == 5) { + tmp = AA20; AA20 = AA50; AA50 = tmp; + tmp = AA21; AA21 = AA51; AA51 = tmp; + tmp = AA22; AA22 = AA52; AA52 = tmp; + tmp = AA23; AA23 = AA53; AA53 = tmp; + tmp = AA24; AA24 = AA54; AA54 = tmp; + tmp = AA25; AA25 = AA55; AA55 = tmp; + tmp = AA26; AA26 = AA56; AA56 = tmp; + tmp = AA27; AA27 = AA57; AA57 = tmp; + tmp = AA28; AA28 = AA58; AA58 = tmp; + /* update permutation vector based on row swap */ + i = perm2; perm2 = perm5; perm5 = i; + } + if (pvt == 6) { + tmp = AA20; AA20 = AA60; AA60 = tmp; + tmp = AA21; AA21 = AA61; AA61 = tmp; + tmp = AA22; AA22 = AA62; AA62 = tmp; + tmp = AA23; AA23 = AA63; AA63 = tmp; + tmp = AA24; AA24 = AA64; AA64 = tmp; + tmp = AA25; AA25 = AA65; AA65 = tmp; + tmp = AA26; AA26 = AA66; AA66 = tmp; + tmp = AA27; AA27 = AA67; AA67 = tmp; + tmp = AA28; AA28 = AA68; AA68 = tmp; + /* update permutation vector based on row swap */ + i = perm2; perm2 = perm6; perm6 = i; + } + if (pvt == 7) { + tmp = AA20; AA20 = AA70; AA70 = tmp; + tmp = AA21; AA21 = AA71; AA71 = tmp; + tmp = AA22; AA22 = AA72; AA72 = tmp; + tmp = AA23; AA23 = AA73; AA73 = tmp; + tmp = AA24; AA24 = AA74; AA74 = tmp; + tmp = AA25; AA25 = AA75; AA75 = tmp; + tmp = AA26; AA26 = AA76; AA76 = tmp; + tmp = AA27; AA27 = AA77; AA77 = tmp; + tmp = AA28; AA28 = AA78; AA78 = tmp; + /* update permutation vector based on row swap */ + i = perm2; perm2 = perm7; perm7 = i; + } + if (pvt == 8) { + tmp = AA20; AA20 = AA80; AA80 = tmp; + tmp = AA21; AA21 = AA81; AA81 = tmp; + tmp = AA22; AA22 = AA82; AA82 = tmp; + tmp = AA23; AA23 = AA83; AA83 = tmp; + tmp = AA24; AA24 = AA84; AA84 = tmp; + tmp = AA25; AA25 = AA85; AA85 = tmp; + tmp = AA26; AA26 = AA86; AA86 = tmp; + tmp = AA27; AA27 = AA87; AA87 = tmp; + tmp = AA28; AA28 = AA88; AA88 = tmp; + /* update permutation vector based on row swap */ + i = perm2; perm2 = perm8; perm8 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA22); + icol2 = perm2; + AA20 = mulOp (tmp, AA20); + AA21 = mulOp (tmp, AA21); + AA22 = tmp; + AA23 = mulOp (tmp, AA23); + AA24 = mulOp (tmp, AA24); + AA25 = mulOp (tmp, AA25); + AA26 = mulOp (tmp, AA26); + AA27 = mulOp (tmp, AA27); + AA28 = mulOp (tmp, AA28); + + /* eliminate above and below current row */ + tmp = AA02; + AA00 = fmnaOp (tmp, AA20, AA00); + AA01 = fmnaOp (tmp, AA21, AA01); + AA02 = mulOp (negOp(tmp), AA22); + AA03 = fmnaOp (tmp, AA23, AA03); + AA04 = fmnaOp (tmp, AA24, AA04); + AA05 = fmnaOp (tmp, AA25, AA05); + AA06 = fmnaOp (tmp, AA26, AA06); + AA07 = fmnaOp (tmp, AA27, AA07); + AA08 = fmnaOp (tmp, AA28, AA08); + + tmp = AA12; + AA10 = fmnaOp (tmp, AA20, AA10); + AA11 = fmnaOp (tmp, AA21, AA11); + AA12 = mulOp (negOp(tmp), AA22); + AA13 = fmnaOp (tmp, AA23, AA13); + AA14 = fmnaOp (tmp, AA24, AA14); + AA15 = fmnaOp (tmp, AA25, AA15); + AA16 = fmnaOp (tmp, AA26, AA16); + AA17 = fmnaOp (tmp, AA27, AA17); + AA18 = fmnaOp (tmp, AA28, AA18); + + tmp = AA32; + AA30 = fmnaOp (tmp, AA20, AA30); + AA31 = fmnaOp (tmp, AA21, AA31); + AA32 = mulOp (negOp(tmp), AA22); + AA33 = fmnaOp (tmp, AA23, AA33); + AA34 = fmnaOp (tmp, AA24, AA34); + AA35 = fmnaOp (tmp, AA25, AA35); + AA36 = fmnaOp (tmp, AA26, AA36); + AA37 = fmnaOp (tmp, AA27, AA37); + AA38 = fmnaOp (tmp, AA28, AA38); + + tmp = AA42; + AA40 = fmnaOp (tmp, AA20, AA40); + AA41 = fmnaOp (tmp, AA21, AA41); + AA42 = mulOp (negOp(tmp), AA22); + AA43 = fmnaOp (tmp, AA23, AA43); + AA44 = fmnaOp (tmp, AA24, AA44); + AA45 = fmnaOp (tmp, AA25, AA45); + AA46 = fmnaOp (tmp, AA26, AA46); + AA47 = fmnaOp (tmp, AA27, AA47); + AA48 = fmnaOp (tmp, AA28, AA48); + + tmp = AA52; + AA50 = fmnaOp (tmp, AA20, AA50); + AA51 = fmnaOp (tmp, AA21, AA51); + AA52 = mulOp (negOp(tmp), AA22); + AA53 = fmnaOp (tmp, AA23, AA53); + AA54 = fmnaOp (tmp, AA24, AA54); + AA55 = fmnaOp (tmp, AA25, AA55); + AA56 = fmnaOp (tmp, AA26, AA56); + AA57 = fmnaOp (tmp, AA27, AA57); + AA58 = fmnaOp (tmp, AA28, AA58); + + tmp = AA62; + AA60 = fmnaOp (tmp, AA20, AA60); + AA61 = fmnaOp (tmp, AA21, AA61); + AA62 = mulOp (negOp(tmp), AA22); + AA63 = fmnaOp (tmp, AA23, AA63); + AA64 = fmnaOp (tmp, AA24, AA64); + AA65 = fmnaOp (tmp, AA25, AA65); + AA66 = fmnaOp (tmp, AA26, AA66); + AA67 = fmnaOp (tmp, AA27, AA67); + AA68 = fmnaOp (tmp, AA28, AA68); + + tmp = AA72; + AA70 = fmnaOp (tmp, AA20, AA70); + AA71 = fmnaOp (tmp, AA21, AA71); + AA72 = mulOp (negOp(tmp), AA22); + AA73 = fmnaOp (tmp, AA23, AA73); + AA74 = fmnaOp (tmp, AA24, AA74); + AA75 = fmnaOp (tmp, AA25, AA75); + AA76 = fmnaOp (tmp, AA26, AA76); + AA77 = fmnaOp (tmp, AA27, AA77); + AA78 = fmnaOp (tmp, AA28, AA78); + + tmp = AA82; + AA80 = fmnaOp (tmp, AA20, AA80); + AA81 = fmnaOp (tmp, AA21, AA81); + AA82 = mulOp (negOp(tmp), AA22); + AA83 = fmnaOp (tmp, AA23, AA83); + AA84 = fmnaOp (tmp, AA24, AA84); + AA85 = fmnaOp (tmp, AA25, AA85); + AA86 = fmnaOp (tmp, AA26, AA86); + AA87 = fmnaOp (tmp, AA27, AA87); + AA88 = fmnaOp (tmp, AA28, AA88); + + /****************** iteration 3 ****************/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA33); + pvt = 3; + t = absOp (AA43); + if (t > p) { p = t; pvt = 4; } + t = absOp (AA53); + if (t > p) { p = t; pvt = 5; } + t = absOp (AA63); + if (t > p) { p = t; pvt = 6; } + t = absOp (AA73); + if (t > p) { p = t; pvt = 7; } + t = absOp (AA83); + if (t > p) { p = t; pvt = 8; } + + /* swap pivot row with row 3 */ + if (pvt == 4) { + tmp = AA30; AA30 = AA40; AA40 = tmp; + tmp = AA31; AA31 = AA41; AA41 = tmp; + tmp = AA32; AA32 = AA42; AA42 = tmp; + tmp = AA33; AA33 = AA43; AA43 = tmp; + tmp = AA34; AA34 = AA44; AA44 = tmp; + tmp = AA35; AA35 = AA45; AA45 = tmp; + tmp = AA36; AA36 = AA46; AA46 = tmp; + tmp = AA37; AA37 = AA47; AA47 = tmp; + tmp = AA38; AA38 = AA48; AA48 = tmp; + /* update permutation vector based on row swap */ + i = perm3; perm3 = perm4; perm4 = i; + } + if (pvt == 5) { + tmp = AA30; AA30 = AA50; AA50 = tmp; + tmp = AA31; AA31 = AA51; AA51 = tmp; + tmp = AA32; AA32 = AA52; AA52 = tmp; + tmp = AA33; AA33 = AA53; AA53 = tmp; + tmp = AA34; AA34 = AA54; AA54 = tmp; + tmp = AA35; AA35 = AA55; AA55 = tmp; + tmp = AA36; AA36 = AA56; AA56 = tmp; + tmp = AA37; AA37 = AA57; AA57 = tmp; + tmp = AA38; AA38 = AA58; AA58 = tmp; + /* update permutation vector based on row swap */ + i = perm3; perm3 = perm5; perm5 = i; + } + if (pvt == 6) { + tmp = AA30; AA30 = AA60; AA60 = tmp; + tmp = AA31; AA31 = AA61; AA61 = tmp; + tmp = AA32; AA32 = AA62; AA62 = tmp; + tmp = AA33; AA33 = AA63; AA63 = tmp; + tmp = AA34; AA34 = AA64; AA64 = tmp; + tmp = AA35; AA35 = AA65; AA65 = tmp; + tmp = AA36; AA36 = AA66; AA66 = tmp; + tmp = AA37; AA37 = AA67; AA67 = tmp; + tmp = AA38; AA38 = AA68; AA68 = tmp; + /* update permutation vector based on row swap */ + i = perm3; perm3 = perm6; perm6 = i; + } + if (pvt == 7) { + tmp = AA30; AA30 = AA70; AA70 = tmp; + tmp = AA31; AA31 = AA71; AA71 = tmp; + tmp = AA32; AA32 = AA72; AA72 = tmp; + tmp = AA33; AA33 = AA73; AA73 = tmp; + tmp = AA34; AA34 = AA74; AA74 = tmp; + tmp = AA35; AA35 = AA75; AA75 = tmp; + tmp = AA36; AA36 = AA76; AA76 = tmp; + tmp = AA37; AA37 = AA77; AA77 = tmp; + tmp = AA38; AA38 = AA78; AA78 = tmp; + /* update permutation vector based on row swap */ + i = perm3; perm3 = perm7; perm7 = i; + } + if (pvt == 8) { + tmp = AA30; AA30 = AA80; AA80 = tmp; + tmp = AA31; AA31 = AA81; AA81 = tmp; + tmp = AA32; AA32 = AA82; AA82 = tmp; + tmp = AA33; AA33 = AA83; AA83 = tmp; + tmp = AA34; AA34 = AA84; AA84 = tmp; + tmp = AA35; AA35 = AA85; AA85 = tmp; + tmp = AA36; AA36 = AA86; AA86 = tmp; + tmp = AA37; AA37 = AA87; AA87 = tmp; + tmp = AA38; AA38 = AA88; AA88 = tmp; + /* update permutation vector based on row swap */ + i = perm3; perm3 = perm8; perm8 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA33); + icol3 = perm3; + AA30 = mulOp (tmp, AA30); + AA31 = mulOp (tmp, AA31); + AA32 = mulOp (tmp, AA32); + AA33 = tmp; + AA34 = mulOp (tmp, AA34); + AA35 = mulOp (tmp, AA35); + AA36 = mulOp (tmp, AA36); + AA37 = mulOp (tmp, AA37); + AA38 = mulOp (tmp, AA38); + + /* eliminate above and below current row */ + tmp = AA03; + AA00 = fmnaOp (tmp, AA30, AA00); + AA01 = fmnaOp (tmp, AA31, AA01); + AA02 = fmnaOp (tmp, AA32, AA02); + AA03 = mulOp (negOp(tmp), AA33); + AA04 = fmnaOp (tmp, AA34, AA04); + AA05 = fmnaOp (tmp, AA35, AA05); + AA06 = fmnaOp (tmp, AA36, AA06); + AA07 = fmnaOp (tmp, AA37, AA07); + AA08 = fmnaOp (tmp, AA38, AA08); + + tmp = AA13; + AA10 = fmnaOp (tmp, AA30, AA10); + AA11 = fmnaOp (tmp, AA31, AA11); + AA12 = fmnaOp (tmp, AA32, AA12); + AA13 = mulOp (negOp(tmp), AA33); + AA14 = fmnaOp (tmp, AA34, AA14); + AA15 = fmnaOp (tmp, AA35, AA15); + AA16 = fmnaOp (tmp, AA36, AA16); + AA17 = fmnaOp (tmp, AA37, AA17); + AA18 = fmnaOp (tmp, AA38, AA18); + + tmp = AA23; + AA20 = fmnaOp (tmp, AA30, AA20); + AA21 = fmnaOp (tmp, AA31, AA21); + AA22 = fmnaOp (tmp, AA32, AA22); + AA23 = mulOp (negOp(tmp), AA33); + AA24 = fmnaOp (tmp, AA34, AA24); + AA25 = fmnaOp (tmp, AA35, AA25); + AA26 = fmnaOp (tmp, AA36, AA26); + AA27 = fmnaOp (tmp, AA37, AA27); + AA28 = fmnaOp (tmp, AA38, AA28); + + tmp = AA43; + AA40 = fmnaOp (tmp, AA30, AA40); + AA41 = fmnaOp (tmp, AA31, AA41); + AA42 = fmnaOp (tmp, AA32, AA42); + AA43 = mulOp (negOp(tmp), AA33); + AA44 = fmnaOp (tmp, AA34, AA44); + AA45 = fmnaOp (tmp, AA35, AA45); + AA46 = fmnaOp (tmp, AA36, AA46); + AA47 = fmnaOp (tmp, AA37, AA47); + AA48 = fmnaOp (tmp, AA38, AA48); + + tmp = AA53; + AA50 = fmnaOp (tmp, AA30, AA50); + AA51 = fmnaOp (tmp, AA31, AA51); + AA52 = fmnaOp (tmp, AA32, AA52); + AA53 = mulOp (negOp(tmp), AA33); + AA54 = fmnaOp (tmp, AA34, AA54); + AA55 = fmnaOp (tmp, AA35, AA55); + AA56 = fmnaOp (tmp, AA36, AA56); + AA57 = fmnaOp (tmp, AA37, AA57); + AA58 = fmnaOp (tmp, AA38, AA58); + + tmp = AA63; + AA60 = fmnaOp (tmp, AA30, AA60); + AA61 = fmnaOp (tmp, AA31, AA61); + AA62 = fmnaOp (tmp, AA32, AA62); + AA63 = mulOp (negOp(tmp), AA33); + AA64 = fmnaOp (tmp, AA34, AA64); + AA65 = fmnaOp (tmp, AA35, AA65); + AA66 = fmnaOp (tmp, AA36, AA66); + AA67 = fmnaOp (tmp, AA37, AA67); + AA68 = fmnaOp (tmp, AA38, AA68); + + tmp = AA73; + AA70 = fmnaOp (tmp, AA30, AA70); + AA71 = fmnaOp (tmp, AA31, AA71); + AA72 = fmnaOp (tmp, AA32, AA72); + AA73 = mulOp (negOp(tmp), AA33); + AA74 = fmnaOp (tmp, AA34, AA74); + AA75 = fmnaOp (tmp, AA35, AA75); + AA76 = fmnaOp (tmp, AA36, AA76); + AA77 = fmnaOp (tmp, AA37, AA77); + AA78 = fmnaOp (tmp, AA38, AA78); + + tmp = AA83; + AA80 = fmnaOp (tmp, AA30, AA80); + AA81 = fmnaOp (tmp, AA31, AA81); + AA82 = fmnaOp (tmp, AA32, AA82); + AA83 = mulOp (negOp(tmp), AA33); + AA84 = fmnaOp (tmp, AA34, AA84); + AA85 = fmnaOp (tmp, AA35, AA85); + AA86 = fmnaOp (tmp, AA36, AA86); + AA87 = fmnaOp (tmp, AA37, AA87); + AA88 = fmnaOp (tmp, AA38, AA88); + + /****************** iteration 4 ****************/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA44); + pvt = 4; + t = absOp (AA54); + if (t > p) { p = t; pvt = 5; } + t = absOp (AA64); + if (t > p) { p = t; pvt = 6; } + t = absOp (AA74); + if (t > p) { p = t; pvt = 7; } + t = absOp (AA84); + if (t > p) { p = t; pvt = 8; } + + /* swap pivot row with row 4 */ + if (pvt == 5) { + tmp = AA40; AA40 = AA50; AA50 = tmp; + tmp = AA41; AA41 = AA51; AA51 = tmp; + tmp = AA42; AA42 = AA52; AA52 = tmp; + tmp = AA43; AA43 = AA53; AA53 = tmp; + tmp = AA44; AA44 = AA54; AA54 = tmp; + tmp = AA45; AA45 = AA55; AA55 = tmp; + tmp = AA46; AA46 = AA56; AA56 = tmp; + tmp = AA47; AA47 = AA57; AA57 = tmp; + tmp = AA48; AA48 = AA58; AA58 = tmp; + /* update permutation vector based on row swap */ + i = perm4; perm4 = perm5; perm5 = i; + } + if (pvt == 6) { + tmp = AA40; AA40 = AA60; AA60 = tmp; + tmp = AA41; AA41 = AA61; AA61 = tmp; + tmp = AA42; AA42 = AA62; AA62 = tmp; + tmp = AA43; AA43 = AA63; AA63 = tmp; + tmp = AA44; AA44 = AA64; AA64 = tmp; + tmp = AA45; AA45 = AA65; AA65 = tmp; + tmp = AA46; AA46 = AA66; AA66 = tmp; + tmp = AA47; AA47 = AA67; AA67 = tmp; + tmp = AA48; AA48 = AA68; AA68 = tmp; + /* update permutation vector based on row swap */ + i = perm4; perm4 = perm6; perm6 = i; + } + if (pvt == 7) { + tmp = AA40; AA40 = AA70; AA70 = tmp; + tmp = AA41; AA41 = AA71; AA71 = tmp; + tmp = AA42; AA42 = AA72; AA72 = tmp; + tmp = AA43; AA43 = AA73; AA73 = tmp; + tmp = AA44; AA44 = AA74; AA74 = tmp; + tmp = AA45; AA45 = AA75; AA75 = tmp; + tmp = AA46; AA46 = AA76; AA76 = tmp; + tmp = AA47; AA47 = AA77; AA77 = tmp; + tmp = AA48; AA48 = AA78; AA78 = tmp; + /* update permutation vector based on row swap */ + i = perm4; perm4 = perm7; perm7 = i; + } + if (pvt == 8) { + tmp = AA40; AA40 = AA80; AA80 = tmp; + tmp = AA41; AA41 = AA81; AA81 = tmp; + tmp = AA42; AA42 = AA82; AA82 = tmp; + tmp = AA43; AA43 = AA83; AA83 = tmp; + tmp = AA44; AA44 = AA84; AA84 = tmp; + tmp = AA45; AA45 = AA85; AA85 = tmp; + tmp = AA46; AA46 = AA86; AA86 = tmp; + tmp = AA47; AA47 = AA87; AA87 = tmp; + tmp = AA48; AA48 = AA88; AA88 = tmp; + /* update permutation vector based on row swap */ + i = perm4; perm4 = perm8; perm8 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA44); + icol4 = perm4; + AA40 = mulOp (tmp, AA40); + AA41 = mulOp (tmp, AA41); + AA42 = mulOp (tmp, AA42); + AA43 = mulOp (tmp, AA43); + AA44 = tmp; + AA45 = mulOp (tmp, AA45); + AA46 = mulOp (tmp, AA46); + AA47 = mulOp (tmp, AA47); + AA48 = mulOp (tmp, AA48); + + /* eliminate above and below current row */ + tmp = AA04; + AA00 = fmnaOp (tmp, AA40, AA00); + AA01 = fmnaOp (tmp, AA41, AA01); + AA02 = fmnaOp (tmp, AA42, AA02); + AA03 = fmnaOp (tmp, AA43, AA03); + AA04 = mulOp (negOp(tmp), AA44); + AA05 = fmnaOp (tmp, AA45, AA05); + AA06 = fmnaOp (tmp, AA46, AA06); + AA07 = fmnaOp (tmp, AA47, AA07); + AA08 = fmnaOp (tmp, AA48, AA08); + + tmp = AA14; + AA10 = fmnaOp (tmp, AA40, AA10); + AA11 = fmnaOp (tmp, AA41, AA11); + AA12 = fmnaOp (tmp, AA42, AA12); + AA13 = fmnaOp (tmp, AA43, AA13); + AA14 = mulOp (negOp(tmp), AA44); + AA15 = fmnaOp (tmp, AA45, AA15); + AA16 = fmnaOp (tmp, AA46, AA16); + AA17 = fmnaOp (tmp, AA47, AA17); + AA18 = fmnaOp (tmp, AA48, AA18); + + tmp = AA24; + AA20 = fmnaOp (tmp, AA40, AA20); + AA21 = fmnaOp (tmp, AA41, AA21); + AA22 = fmnaOp (tmp, AA42, AA22); + AA23 = fmnaOp (tmp, AA43, AA23); + AA24 = mulOp (negOp(tmp), AA44); + AA25 = fmnaOp (tmp, AA45, AA25); + AA26 = fmnaOp (tmp, AA46, AA26); + AA27 = fmnaOp (tmp, AA47, AA27); + AA28 = fmnaOp (tmp, AA48, AA28); + + tmp = AA34; + AA30 = fmnaOp (tmp, AA40, AA30); + AA31 = fmnaOp (tmp, AA41, AA31); + AA32 = fmnaOp (tmp, AA42, AA32); + AA33 = fmnaOp (tmp, AA43, AA33); + AA34 = mulOp (negOp(tmp), AA44); + AA35 = fmnaOp (tmp, AA45, AA35); + AA36 = fmnaOp (tmp, AA46, AA36); + AA37 = fmnaOp (tmp, AA47, AA37); + AA38 = fmnaOp (tmp, AA48, AA38); + + tmp = AA54; + AA50 = fmnaOp (tmp, AA40, AA50); + AA51 = fmnaOp (tmp, AA41, AA51); + AA52 = fmnaOp (tmp, AA42, AA52); + AA53 = fmnaOp (tmp, AA43, AA53); + AA54 = mulOp (negOp(tmp), AA44); + AA55 = fmnaOp (tmp, AA45, AA55); + AA56 = fmnaOp (tmp, AA46, AA56); + AA57 = fmnaOp (tmp, AA47, AA57); + AA58 = fmnaOp (tmp, AA48, AA58); + + tmp = AA64; + AA60 = fmnaOp (tmp, AA40, AA60); + AA61 = fmnaOp (tmp, AA41, AA61); + AA62 = fmnaOp (tmp, AA42, AA62); + AA63 = fmnaOp (tmp, AA43, AA63); + AA64 = mulOp (negOp(tmp), AA44); + AA65 = fmnaOp (tmp, AA45, AA65); + AA66 = fmnaOp (tmp, AA46, AA66); + AA67 = fmnaOp (tmp, AA47, AA67); + AA68 = fmnaOp (tmp, AA48, AA68); + + tmp = AA74; + AA70 = fmnaOp (tmp, AA40, AA70); + AA71 = fmnaOp (tmp, AA41, AA71); + AA72 = fmnaOp (tmp, AA42, AA72); + AA73 = fmnaOp (tmp, AA43, AA73); + AA74 = mulOp (negOp(tmp), AA44); + AA75 = fmnaOp (tmp, AA45, AA75); + AA76 = fmnaOp (tmp, AA46, AA76); + AA77 = fmnaOp (tmp, AA47, AA77); + AA78 = fmnaOp (tmp, AA48, AA78); + + tmp = AA84; + AA80 = fmnaOp (tmp, AA40, AA80); + AA81 = fmnaOp (tmp, AA41, AA81); + AA82 = fmnaOp (tmp, AA42, AA82); + AA83 = fmnaOp (tmp, AA43, AA83); + AA84 = mulOp (negOp(tmp), AA44); + AA85 = fmnaOp (tmp, AA45, AA85); + AA86 = fmnaOp (tmp, AA46, AA86); + AA87 = fmnaOp (tmp, AA47, AA87); + AA88 = fmnaOp (tmp, AA48, AA88); + + /****************** iteration 5 ****************/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA55); + pvt = 5; + t = absOp (AA65); + if (t > p) { p = t; pvt = 6; } + t = absOp (AA75); + if (t > p) { p = t; pvt = 7; } + t = absOp (AA85); + if (t > p) { p = t; pvt = 8; } + + /* swap pivot row with row 5 */ + if (pvt == 6) { + tmp = AA50; AA50 = AA60; AA60 = tmp; + tmp = AA51; AA51 = AA61; AA61 = tmp; + tmp = AA52; AA52 = AA62; AA62 = tmp; + tmp = AA53; AA53 = AA63; AA63 = tmp; + tmp = AA54; AA54 = AA64; AA64 = tmp; + tmp = AA55; AA55 = AA65; AA65 = tmp; + tmp = AA56; AA56 = AA66; AA66 = tmp; + tmp = AA57; AA57 = AA67; AA67 = tmp; + tmp = AA58; AA58 = AA68; AA68 = tmp; + /* update permutation vector based on row swap */ + i = perm5; perm5 = perm6; perm6 = i; + } + if (pvt == 7) { + tmp = AA50; AA50 = AA70; AA70 = tmp; + tmp = AA51; AA51 = AA71; AA71 = tmp; + tmp = AA52; AA52 = AA72; AA72 = tmp; + tmp = AA53; AA53 = AA73; AA73 = tmp; + tmp = AA54; AA54 = AA74; AA74 = tmp; + tmp = AA55; AA55 = AA75; AA75 = tmp; + tmp = AA56; AA56 = AA76; AA76 = tmp; + tmp = AA57; AA57 = AA77; AA77 = tmp; + tmp = AA58; AA58 = AA78; AA78 = tmp; + /* update permutation vector based on row swap */ + i = perm5; perm5 = perm7; perm7 = i; + } + if (pvt == 8) { + tmp = AA50; AA50 = AA80; AA80 = tmp; + tmp = AA51; AA51 = AA81; AA81 = tmp; + tmp = AA52; AA52 = AA82; AA82 = tmp; + tmp = AA53; AA53 = AA83; AA83 = tmp; + tmp = AA54; AA54 = AA84; AA84 = tmp; + tmp = AA55; AA55 = AA85; AA85 = tmp; + tmp = AA56; AA56 = AA86; AA86 = tmp; + tmp = AA57; AA57 = AA87; AA87 = tmp; + tmp = AA58; AA58 = AA88; AA88 = tmp; + /* update permutation vector based on row swap */ + i = perm5; perm5 = perm8; perm8 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA55); + icol5 = perm5; + AA50 = mulOp (tmp, AA50); + AA51 = mulOp (tmp, AA51); + AA52 = mulOp (tmp, AA52); + AA53 = mulOp (tmp, AA53); + AA54 = mulOp (tmp, AA54); + AA55 = tmp; + AA56 = mulOp (tmp, AA56); + AA57 = mulOp (tmp, AA57); + AA58 = mulOp (tmp, AA58); + + /* eliminate above and below current row */ + tmp = AA05; + AA00 = fmnaOp (tmp, AA50, AA00); + AA01 = fmnaOp (tmp, AA51, AA01); + AA02 = fmnaOp (tmp, AA52, AA02); + AA03 = fmnaOp (tmp, AA53, AA03); + AA04 = fmnaOp (tmp, AA54, AA04); + AA05 = mulOp (negOp(tmp), AA55); + AA06 = fmnaOp (tmp, AA56, AA06); + AA07 = fmnaOp (tmp, AA57, AA07); + AA08 = fmnaOp (tmp, AA58, AA08); + + tmp = AA15; + AA10 = fmnaOp (tmp, AA50, AA10); + AA11 = fmnaOp (tmp, AA51, AA11); + AA12 = fmnaOp (tmp, AA52, AA12); + AA13 = fmnaOp (tmp, AA53, AA13); + AA14 = fmnaOp (tmp, AA54, AA14); + AA15 = mulOp (negOp(tmp), AA55); + AA16 = fmnaOp (tmp, AA56, AA16); + AA17 = fmnaOp (tmp, AA57, AA17); + AA18 = fmnaOp (tmp, AA58, AA18); + + tmp = AA25; + AA20 = fmnaOp (tmp, AA50, AA20); + AA21 = fmnaOp (tmp, AA51, AA21); + AA22 = fmnaOp (tmp, AA52, AA22); + AA23 = fmnaOp (tmp, AA53, AA23); + AA24 = fmnaOp (tmp, AA54, AA24); + AA25 = mulOp (negOp(tmp), AA55); + AA26 = fmnaOp (tmp, AA56, AA26); + AA27 = fmnaOp (tmp, AA57, AA27); + AA28 = fmnaOp (tmp, AA58, AA28); + + tmp = AA35; + AA30 = fmnaOp (tmp, AA50, AA30); + AA31 = fmnaOp (tmp, AA51, AA31); + AA32 = fmnaOp (tmp, AA52, AA32); + AA33 = fmnaOp (tmp, AA53, AA33); + AA34 = fmnaOp (tmp, AA54, AA34); + AA35 = mulOp (negOp(tmp), AA55); + AA36 = fmnaOp (tmp, AA56, AA36); + AA37 = fmnaOp (tmp, AA57, AA37); + AA38 = fmnaOp (tmp, AA58, AA38); + + tmp = AA45; + AA40 = fmnaOp (tmp, AA50, AA40); + AA41 = fmnaOp (tmp, AA51, AA41); + AA42 = fmnaOp (tmp, AA52, AA42); + AA43 = fmnaOp (tmp, AA53, AA43); + AA44 = fmnaOp (tmp, AA54, AA44); + AA45 = mulOp (negOp(tmp), AA55); + AA46 = fmnaOp (tmp, AA56, AA46); + AA47 = fmnaOp (tmp, AA57, AA47); + AA48 = fmnaOp (tmp, AA58, AA48); + + tmp = AA65; + AA60 = fmnaOp (tmp, AA50, AA60); + AA61 = fmnaOp (tmp, AA51, AA61); + AA62 = fmnaOp (tmp, AA52, AA62); + AA63 = fmnaOp (tmp, AA53, AA63); + AA64 = fmnaOp (tmp, AA54, AA64); + AA65 = mulOp (negOp(tmp), AA55); + AA66 = fmnaOp (tmp, AA56, AA66); + AA67 = fmnaOp (tmp, AA57, AA67); + AA68 = fmnaOp (tmp, AA58, AA68); + + tmp = AA75; + AA70 = fmnaOp (tmp, AA50, AA70); + AA71 = fmnaOp (tmp, AA51, AA71); + AA72 = fmnaOp (tmp, AA52, AA72); + AA73 = fmnaOp (tmp, AA53, AA73); + AA74 = fmnaOp (tmp, AA54, AA74); + AA75 = mulOp (negOp(tmp), AA55); + AA76 = fmnaOp (tmp, AA56, AA76); + AA77 = fmnaOp (tmp, AA57, AA77); + AA78 = fmnaOp (tmp, AA58, AA78); + + tmp = AA85; + AA80 = fmnaOp (tmp, AA50, AA80); + AA81 = fmnaOp (tmp, AA51, AA81); + AA82 = fmnaOp (tmp, AA52, AA82); + AA83 = fmnaOp (tmp, AA53, AA83); + AA84 = fmnaOp (tmp, AA54, AA84); + AA85 = mulOp (negOp(tmp), AA55); + AA86 = fmnaOp (tmp, AA56, AA86); + AA87 = fmnaOp (tmp, AA57, AA87); + AA88 = fmnaOp (tmp, AA58, AA88); + + /****************** iteration 6 ****************/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA66); + pvt = 6; + t = absOp (AA76); + if (t > p) { p = t; pvt = 7; } + t = absOp (AA86); + if (t > p) { p = t; pvt = 8; } + + /* swap pivot row with row 6 */ + if (pvt == 7) { + tmp = AA60; AA60 = AA70; AA70 = tmp; + tmp = AA61; AA61 = AA71; AA71 = tmp; + tmp = AA62; AA62 = AA72; AA72 = tmp; + tmp = AA63; AA63 = AA73; AA73 = tmp; + tmp = AA64; AA64 = AA74; AA74 = tmp; + tmp = AA65; AA65 = AA75; AA75 = tmp; + tmp = AA66; AA66 = AA76; AA76 = tmp; + tmp = AA67; AA67 = AA77; AA77 = tmp; + tmp = AA68; AA68 = AA78; AA78 = tmp; + /* update permutation vector based on row swap */ + i = perm6; perm6 = perm7; perm7 = i; + } + if (pvt == 8) { + tmp = AA60; AA60 = AA80; AA80 = tmp; + tmp = AA61; AA61 = AA81; AA81 = tmp; + tmp = AA62; AA62 = AA82; AA82 = tmp; + tmp = AA63; AA63 = AA83; AA83 = tmp; + tmp = AA64; AA64 = AA84; AA84 = tmp; + tmp = AA65; AA65 = AA85; AA85 = tmp; + tmp = AA66; AA66 = AA86; AA86 = tmp; + tmp = AA67; AA67 = AA87; AA87 = tmp; + tmp = AA68; AA68 = AA88; AA88 = tmp; + /* update permutation vector based on row swap */ + i = perm6; perm6 = perm8; perm8 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA66); + icol6 = perm6; + AA60 = mulOp (tmp, AA60); + AA61 = mulOp (tmp, AA61); + AA62 = mulOp (tmp, AA62); + AA63 = mulOp (tmp, AA63); + AA64 = mulOp (tmp, AA64); + AA65 = mulOp (tmp, AA65); + AA66 = tmp; + AA67 = mulOp (tmp, AA67); + AA68 = mulOp (tmp, AA68); + + /* eliminate above and below current row */ + tmp = AA06; + AA00 = fmnaOp (tmp, AA60, AA00); + AA01 = fmnaOp (tmp, AA61, AA01); + AA02 = fmnaOp (tmp, AA62, AA02); + AA03 = fmnaOp (tmp, AA63, AA03); + AA04 = fmnaOp (tmp, AA64, AA04); + AA05 = fmnaOp (tmp, AA65, AA05); + AA06 = mulOp (negOp(tmp), AA66); + AA07 = fmnaOp (tmp, AA67, AA07); + AA08 = fmnaOp (tmp, AA68, AA08); + + tmp = AA16; + AA10 = fmnaOp (tmp, AA60, AA10); + AA11 = fmnaOp (tmp, AA61, AA11); + AA12 = fmnaOp (tmp, AA62, AA12); + AA13 = fmnaOp (tmp, AA63, AA13); + AA14 = fmnaOp (tmp, AA64, AA14); + AA15 = fmnaOp (tmp, AA65, AA15); + AA16 = mulOp (negOp(tmp), AA66); + AA17 = fmnaOp (tmp, AA67, AA17); + AA18 = fmnaOp (tmp, AA68, AA18); + + tmp = AA26; + AA20 = fmnaOp (tmp, AA60, AA20); + AA21 = fmnaOp (tmp, AA61, AA21); + AA22 = fmnaOp (tmp, AA62, AA22); + AA23 = fmnaOp (tmp, AA63, AA23); + AA24 = fmnaOp (tmp, AA64, AA24); + AA25 = fmnaOp (tmp, AA65, AA25); + AA26 = mulOp (negOp(tmp), AA66); + AA27 = fmnaOp (tmp, AA67, AA27); + AA28 = fmnaOp (tmp, AA68, AA28); + + tmp = AA36; + AA30 = fmnaOp (tmp, AA60, AA30); + AA31 = fmnaOp (tmp, AA61, AA31); + AA32 = fmnaOp (tmp, AA62, AA32); + AA33 = fmnaOp (tmp, AA63, AA33); + AA34 = fmnaOp (tmp, AA64, AA34); + AA35 = fmnaOp (tmp, AA65, AA35); + AA36 = mulOp (negOp(tmp), AA66); + AA37 = fmnaOp (tmp, AA67, AA37); + AA38 = fmnaOp (tmp, AA68, AA38); + + tmp = AA46; + AA40 = fmnaOp (tmp, AA60, AA40); + AA41 = fmnaOp (tmp, AA61, AA41); + AA42 = fmnaOp (tmp, AA62, AA42); + AA43 = fmnaOp (tmp, AA63, AA43); + AA44 = fmnaOp (tmp, AA64, AA44); + AA45 = fmnaOp (tmp, AA65, AA45); + AA46 = mulOp (negOp(tmp), AA66); + AA47 = fmnaOp (tmp, AA67, AA47); + AA48 = fmnaOp (tmp, AA68, AA48); + + tmp = AA56; + AA50 = fmnaOp (tmp, AA60, AA50); + AA51 = fmnaOp (tmp, AA61, AA51); + AA52 = fmnaOp (tmp, AA62, AA52); + AA53 = fmnaOp (tmp, AA63, AA53); + AA54 = fmnaOp (tmp, AA64, AA54); + AA55 = fmnaOp (tmp, AA65, AA55); + AA56 = mulOp (negOp(tmp), AA66); + AA57 = fmnaOp (tmp, AA67, AA57); + AA58 = fmnaOp (tmp, AA68, AA58); + + tmp = AA76; + AA70 = fmnaOp (tmp, AA60, AA70); + AA71 = fmnaOp (tmp, AA61, AA71); + AA72 = fmnaOp (tmp, AA62, AA72); + AA73 = fmnaOp (tmp, AA63, AA73); + AA74 = fmnaOp (tmp, AA64, AA74); + AA75 = fmnaOp (tmp, AA65, AA75); + AA76 = mulOp (negOp(tmp), AA66); + AA77 = fmnaOp (tmp, AA67, AA77); + AA78 = fmnaOp (tmp, AA68, AA78); + + tmp = AA86; + AA80 = fmnaOp (tmp, AA60, AA80); + AA81 = fmnaOp (tmp, AA61, AA81); + AA82 = fmnaOp (tmp, AA62, AA82); + AA83 = fmnaOp (tmp, AA63, AA83); + AA84 = fmnaOp (tmp, AA64, AA84); + AA85 = fmnaOp (tmp, AA65, AA85); + AA86 = mulOp (negOp(tmp), AA66); + AA87 = fmnaOp (tmp, AA67, AA87); + AA88 = fmnaOp (tmp, AA68, AA88); + + /****************** iteration 7 ****************/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA77); + pvt = 7; + t = absOp (AA87); + if (t > p) { p = t; pvt = 8; } + + /* swap pivot row with row 7 */ + if (pvt == 8) { + tmp = AA70; AA70 = AA80; AA80 = tmp; + tmp = AA71; AA71 = AA81; AA81 = tmp; + tmp = AA72; AA72 = AA82; AA82 = tmp; + tmp = AA73; AA73 = AA83; AA83 = tmp; + tmp = AA74; AA74 = AA84; AA84 = tmp; + tmp = AA75; AA75 = AA85; AA85 = tmp; + tmp = AA76; AA76 = AA86; AA86 = tmp; + tmp = AA77; AA77 = AA87; AA87 = tmp; + tmp = AA78; AA78 = AA88; AA88 = tmp; + /* update permutation vector based on row swap */ + i = perm7; perm7 = perm8; perm8 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA77); + icol7 = perm7; + AA70 = mulOp (tmp, AA70); + AA71 = mulOp (tmp, AA71); + AA72 = mulOp (tmp, AA72); + AA73 = mulOp (tmp, AA73); + AA74 = mulOp (tmp, AA74); + AA75 = mulOp (tmp, AA75); + AA76 = mulOp (tmp, AA76); + AA77 = tmp; + AA78 = mulOp (tmp, AA78); + + /* eliminate above and below current row */ + tmp = AA07; + AA00 = fmnaOp (tmp, AA70, AA00); + AA01 = fmnaOp (tmp, AA71, AA01); + AA02 = fmnaOp (tmp, AA72, AA02); + AA03 = fmnaOp (tmp, AA73, AA03); + AA04 = fmnaOp (tmp, AA74, AA04); + AA05 = fmnaOp (tmp, AA75, AA05); + AA06 = fmnaOp (tmp, AA76, AA06); + AA07 = mulOp (negOp(tmp), AA77); + AA08 = fmnaOp (tmp, AA78, AA08); + + tmp = AA17; + AA10 = fmnaOp (tmp, AA70, AA10); + AA11 = fmnaOp (tmp, AA71, AA11); + AA12 = fmnaOp (tmp, AA72, AA12); + AA13 = fmnaOp (tmp, AA73, AA13); + AA14 = fmnaOp (tmp, AA74, AA14); + AA15 = fmnaOp (tmp, AA75, AA15); + AA16 = fmnaOp (tmp, AA76, AA16); + AA17 = mulOp (negOp(tmp), AA77); + AA18 = fmnaOp (tmp, AA78, AA18); + + tmp = AA27; + AA20 = fmnaOp (tmp, AA70, AA20); + AA21 = fmnaOp (tmp, AA71, AA21); + AA22 = fmnaOp (tmp, AA72, AA22); + AA23 = fmnaOp (tmp, AA73, AA23); + AA24 = fmnaOp (tmp, AA74, AA24); + AA25 = fmnaOp (tmp, AA75, AA25); + AA26 = fmnaOp (tmp, AA76, AA26); + AA27 = mulOp (negOp(tmp), AA77); + AA28 = fmnaOp (tmp, AA78, AA28); + + tmp = AA37; + AA30 = fmnaOp (tmp, AA70, AA30); + AA31 = fmnaOp (tmp, AA71, AA31); + AA32 = fmnaOp (tmp, AA72, AA32); + AA33 = fmnaOp (tmp, AA73, AA33); + AA34 = fmnaOp (tmp, AA74, AA34); + AA35 = fmnaOp (tmp, AA75, AA35); + AA36 = fmnaOp (tmp, AA76, AA36); + AA37 = mulOp (negOp(tmp), AA77); + AA38 = fmnaOp (tmp, AA78, AA38); + + tmp = AA47; + AA40 = fmnaOp (tmp, AA70, AA40); + AA41 = fmnaOp (tmp, AA71, AA41); + AA42 = fmnaOp (tmp, AA72, AA42); + AA43 = fmnaOp (tmp, AA73, AA43); + AA44 = fmnaOp (tmp, AA74, AA44); + AA45 = fmnaOp (tmp, AA75, AA45); + AA46 = fmnaOp (tmp, AA76, AA46); + AA47 = mulOp (negOp(tmp), AA77); + AA48 = fmnaOp (tmp, AA78, AA48); + + tmp = AA57; + AA50 = fmnaOp (tmp, AA70, AA50); + AA51 = fmnaOp (tmp, AA71, AA51); + AA52 = fmnaOp (tmp, AA72, AA52); + AA53 = fmnaOp (tmp, AA73, AA53); + AA54 = fmnaOp (tmp, AA74, AA54); + AA55 = fmnaOp (tmp, AA75, AA55); + AA56 = fmnaOp (tmp, AA76, AA56); + AA57 = mulOp (negOp(tmp), AA77); + AA58 = fmnaOp (tmp, AA78, AA58); + + tmp = AA67; + AA60 = fmnaOp (tmp, AA70, AA60); + AA61 = fmnaOp (tmp, AA71, AA61); + AA62 = fmnaOp (tmp, AA72, AA62); + AA63 = fmnaOp (tmp, AA73, AA63); + AA64 = fmnaOp (tmp, AA74, AA64); + AA65 = fmnaOp (tmp, AA75, AA65); + AA66 = fmnaOp (tmp, AA76, AA66); + AA67 = mulOp (negOp(tmp), AA77); + AA68 = fmnaOp (tmp, AA78, AA68); + + tmp = AA87; + AA80 = fmnaOp (tmp, AA70, AA80); + AA81 = fmnaOp (tmp, AA71, AA81); + AA82 = fmnaOp (tmp, AA72, AA82); + AA83 = fmnaOp (tmp, AA73, AA83); + AA84 = fmnaOp (tmp, AA74, AA84); + AA85 = fmnaOp (tmp, AA75, AA85); + AA86 = fmnaOp (tmp, AA76, AA86); + AA87 = mulOp (negOp(tmp), AA77); + AA88 = fmnaOp (tmp, AA78, AA88); + + /****************** iteration 8 ****************/ + + /* scale current row */ + tmp = rcpOp (AA88); + icol8 = perm8; + AA80 = mulOp (tmp, AA80); + AA81 = mulOp (tmp, AA81); + AA82 = mulOp (tmp, AA82); + AA83 = mulOp (tmp, AA83); + AA84 = mulOp (tmp, AA84); + AA85 = mulOp (tmp, AA85); + AA86 = mulOp (tmp, AA86); + AA87 = mulOp (tmp, AA87); + AA88 = tmp; + + /* eliminate above and below current row */ + tmp = AA08; + AA00 = fmnaOp (tmp, AA80, AA00); + AA01 = fmnaOp (tmp, AA81, AA01); + AA02 = fmnaOp (tmp, AA82, AA02); + AA03 = fmnaOp (tmp, AA83, AA03); + AA04 = fmnaOp (tmp, AA84, AA04); + AA05 = fmnaOp (tmp, AA85, AA05); + AA06 = fmnaOp (tmp, AA86, AA06); + AA07 = fmnaOp (tmp, AA87, AA07); + AA08 = mulOp (negOp(tmp), AA88); + + tmp = AA18; + AA10 = fmnaOp (tmp, AA80, AA10); + AA11 = fmnaOp (tmp, AA81, AA11); + AA12 = fmnaOp (tmp, AA82, AA12); + AA13 = fmnaOp (tmp, AA83, AA13); + AA14 = fmnaOp (tmp, AA84, AA14); + AA15 = fmnaOp (tmp, AA85, AA15); + AA16 = fmnaOp (tmp, AA86, AA16); + AA17 = fmnaOp (tmp, AA87, AA17); + AA18 = mulOp (negOp(tmp), AA88); + + tmp = AA28; + AA20 = fmnaOp (tmp, AA80, AA20); + AA21 = fmnaOp (tmp, AA81, AA21); + AA22 = fmnaOp (tmp, AA82, AA22); + AA23 = fmnaOp (tmp, AA83, AA23); + AA24 = fmnaOp (tmp, AA84, AA24); + AA25 = fmnaOp (tmp, AA85, AA25); + AA26 = fmnaOp (tmp, AA86, AA26); + AA27 = fmnaOp (tmp, AA87, AA27); + AA28 = mulOp (negOp(tmp), AA88); + + tmp = AA38; + AA30 = fmnaOp (tmp, AA80, AA30); + AA31 = fmnaOp (tmp, AA81, AA31); + AA32 = fmnaOp (tmp, AA82, AA32); + AA33 = fmnaOp (tmp, AA83, AA33); + AA34 = fmnaOp (tmp, AA84, AA34); + AA35 = fmnaOp (tmp, AA85, AA35); + AA36 = fmnaOp (tmp, AA86, AA36); + AA37 = fmnaOp (tmp, AA87, AA37); + AA38 = mulOp (negOp(tmp), AA88); + + tmp = AA48; + AA40 = fmnaOp (tmp, AA80, AA40); + AA41 = fmnaOp (tmp, AA81, AA41); + AA42 = fmnaOp (tmp, AA82, AA42); + AA43 = fmnaOp (tmp, AA83, AA43); + AA44 = fmnaOp (tmp, AA84, AA44); + AA45 = fmnaOp (tmp, AA85, AA45); + AA46 = fmnaOp (tmp, AA86, AA46); + AA47 = fmnaOp (tmp, AA87, AA47); + AA48 = mulOp (negOp(tmp), AA88); + + tmp = AA58; + AA50 = fmnaOp (tmp, AA80, AA50); + AA51 = fmnaOp (tmp, AA81, AA51); + AA52 = fmnaOp (tmp, AA82, AA52); + AA53 = fmnaOp (tmp, AA83, AA53); + AA54 = fmnaOp (tmp, AA84, AA54); + AA55 = fmnaOp (tmp, AA85, AA55); + AA56 = fmnaOp (tmp, AA86, AA56); + AA57 = fmnaOp (tmp, AA87, AA57); + AA58 = mulOp (negOp(tmp), AA88); + + tmp = AA68; + AA60 = fmnaOp (tmp, AA80, AA60); + AA61 = fmnaOp (tmp, AA81, AA61); + AA62 = fmnaOp (tmp, AA82, AA62); + AA63 = fmnaOp (tmp, AA83, AA63); + AA64 = fmnaOp (tmp, AA84, AA64); + AA65 = fmnaOp (tmp, AA85, AA65); + AA66 = fmnaOp (tmp, AA86, AA66); + AA67 = fmnaOp (tmp, AA87, AA67); + AA68 = mulOp (negOp(tmp), AA88); + + tmp = AA78; + AA70 = fmnaOp (tmp, AA80, AA70); + AA71 = fmnaOp (tmp, AA81, AA71); + AA72 = fmnaOp (tmp, AA82, AA72); + AA73 = fmnaOp (tmp, AA83, AA73); + AA74 = fmnaOp (tmp, AA84, AA74); + AA75 = fmnaOp (tmp, AA85, AA75); + AA76 = fmnaOp (tmp, AA86, AA76); + AA77 = fmnaOp (tmp, AA87, AA77); + AA78 = mulOp (negOp(tmp), AA88); + + /* sort columns into the correct order */ + Ainv(0,icol0) = AA00; + Ainv(1,icol0) = AA10; + Ainv(2,icol0) = AA20; + Ainv(3,icol0) = AA30; + Ainv(4,icol0) = AA40; + Ainv(5,icol0) = AA50; + Ainv(6,icol0) = AA60; + Ainv(7,icol0) = AA70; + Ainv(8,icol0) = AA80; + Ainv(0,icol1) = AA01; + Ainv(1,icol1) = AA11; + Ainv(2,icol1) = AA21; + Ainv(3,icol1) = AA31; + Ainv(4,icol1) = AA41; + Ainv(5,icol1) = AA51; + Ainv(6,icol1) = AA61; + Ainv(7,icol1) = AA71; + Ainv(8,icol1) = AA81; + Ainv(0,icol2) = AA02; + Ainv(1,icol2) = AA12; + Ainv(2,icol2) = AA22; + Ainv(3,icol2) = AA32; + Ainv(4,icol2) = AA42; + Ainv(5,icol2) = AA52; + Ainv(6,icol2) = AA62; + Ainv(7,icol2) = AA72; + Ainv(8,icol2) = AA82; + Ainv(0,icol3) = AA03; + Ainv(1,icol3) = AA13; + Ainv(2,icol3) = AA23; + Ainv(3,icol3) = AA33; + Ainv(4,icol3) = AA43; + Ainv(5,icol3) = AA53; + Ainv(6,icol3) = AA63; + Ainv(7,icol3) = AA73; + Ainv(8,icol3) = AA83; + Ainv(0,icol4) = AA04; + Ainv(1,icol4) = AA14; + Ainv(2,icol4) = AA24; + Ainv(3,icol4) = AA34; + Ainv(4,icol4) = AA44; + Ainv(5,icol4) = AA54; + Ainv(6,icol4) = AA64; + Ainv(7,icol4) = AA74; + Ainv(8,icol4) = AA84; + Ainv(0,icol5) = AA05; + Ainv(1,icol5) = AA15; + Ainv(2,icol5) = AA25; + Ainv(3,icol5) = AA35; + Ainv(4,icol5) = AA45; + Ainv(5,icol5) = AA55; + Ainv(6,icol5) = AA65; + Ainv(7,icol5) = AA75; + Ainv(8,icol5) = AA85; + Ainv(0,icol6) = AA06; + Ainv(1,icol6) = AA16; + Ainv(2,icol6) = AA26; + Ainv(3,icol6) = AA36; + Ainv(4,icol6) = AA46; + Ainv(5,icol6) = AA56; + Ainv(6,icol6) = AA66; + Ainv(7,icol6) = AA76; + Ainv(8,icol6) = AA86; + Ainv(0,icol7) = AA07; + Ainv(1,icol7) = AA17; + Ainv(2,icol7) = AA27; + Ainv(3,icol7) = AA37; + Ainv(4,icol7) = AA47; + Ainv(5,icol7) = AA57; + Ainv(6,icol7) = AA67; + Ainv(7,icol7) = AA77; + Ainv(8,icol7) = AA87; + Ainv(0,icol8) = AA08; + Ainv(1,icol8) = AA18; + Ainv(2,icol8) = AA28; + Ainv(3,icol8) = AA38; + Ainv(4,icol8) = AA48; + Ainv(5,icol8) = AA58; + Ainv(6,icol8) = AA68; + Ainv(7,icol8) = AA78; + Ainv(8,icol8) = AA88; + } +} + +template +__global__ void matinv_10x10_matrix_per_thread (const T *A, T *Ainv, int batch) +{ + /* This is a hack. The instatiation of this template functions fails when + arch = ARCH_SM13 and T = cuDoubleComplex, since the generated code needs + more than 16KB of local memory. Since we don't need an instance of this + template function on either sm_13 nor sm_20, simply compile out all code + in the function when T = cuDoubleComplex. + */ + if (!isDoubleComplex()) { + + const int blkNum = blockIdx.y * gridDim.x + blockIdx.x; + const int thrdNum = blkNum * blockDim.x + threadIdx.x; + const int N = 10; + int perm0, perm1, perm2, perm3, perm4, perm5, perm6, perm7, perm8, perm9; + int icol0, icol1, icol2, icol3, icol4, icol5, icol6, icol7, icol8, icol9; + T AA00, AA01, AA02, AA03, AA04, AA05, AA06, AA07, AA08, AA09; + T AA10, AA11, AA12, AA13, AA14, AA15, AA16, AA17, AA18, AA19; + T AA20, AA21, AA22, AA23, AA24, AA25, AA26, AA27, AA28, AA29; + T AA30, AA31, AA32, AA33, AA34, AA35, AA36, AA37, AA38, AA39; + T AA40, AA41, AA42, AA43, AA44, AA45, AA46, AA47, AA48, AA49; + T AA50, AA51, AA52, AA53, AA54, AA55, AA56, AA57, AA58, AA59; + T AA60, AA61, AA62, AA63, AA64, AA65, AA66, AA67, AA68, AA69; + T AA70, AA71, AA72, AA73, AA74, AA75, AA76, AA77, AA78, AA79; + T AA80, AA81, AA82, AA83, AA84, AA85, AA86, AA87, AA88, AA89; + T AA90, AA91, AA92, AA93, AA94, AA95, AA96, AA97, AA98, AA99; + T tmp; +#if USE_PIVOTING + typename config::absValType t; + typename config::absValType p; + int i, pvt; +#endif + + A += thrdNum * N * N; + Ainv += thrdNum * N * N; + + if (thrdNum < batch) { + + AA00 = A[0]; + AA10 = A[1]; + AA20 = A[2]; + AA30 = A[3]; + AA40 = A[4]; + AA50 = A[5]; + AA60 = A[6]; + AA70 = A[7]; + AA80 = A[8]; + AA90 = A[9]; + AA01 = A[10]; + AA11 = A[11]; + AA21 = A[12]; + AA31 = A[13]; + AA41 = A[14]; + AA51 = A[15]; + AA61 = A[16]; + AA71 = A[17]; + AA81 = A[18]; + AA91 = A[19]; + AA02 = A[20]; + AA12 = A[21]; + AA22 = A[22]; + AA32 = A[23]; + AA42 = A[24]; + AA52 = A[25]; + AA62 = A[26]; + AA72 = A[27]; + AA82 = A[28]; + AA92 = A[29]; + AA03 = A[30]; + AA13 = A[31]; + AA23 = A[32]; + AA33 = A[33]; + AA43 = A[34]; + AA53 = A[35]; + AA63 = A[36]; + AA73 = A[37]; + AA83 = A[38]; + AA93 = A[39]; + AA04 = A[40]; + AA14 = A[41]; + AA24 = A[42]; + AA34 = A[43]; + AA44 = A[44]; + AA54 = A[45]; + AA64 = A[46]; + AA74 = A[47]; + AA84 = A[48]; + AA94 = A[49]; + AA05 = A[50]; + AA15 = A[51]; + AA25 = A[52]; + AA35 = A[53]; + AA45 = A[54]; + AA55 = A[55]; + AA65 = A[56]; + AA75 = A[57]; + AA85 = A[58]; + AA95 = A[59]; + AA06 = A[60]; + AA16 = A[61]; + AA26 = A[62]; + AA36 = A[63]; + AA46 = A[64]; + AA56 = A[65]; + AA66 = A[66]; + AA76 = A[67]; + AA86 = A[68]; + AA96 = A[69]; + AA07 = A[70]; + AA17 = A[71]; + AA27 = A[72]; + AA37 = A[73]; + AA47 = A[74]; + AA57 = A[75]; + AA67 = A[76]; + AA77 = A[77]; + AA87 = A[78]; + AA97 = A[79]; + AA08 = A[80]; + AA18 = A[81]; + AA28 = A[82]; + AA38 = A[83]; + AA48 = A[84]; + AA58 = A[85]; + AA68 = A[86]; + AA78 = A[87]; + AA88 = A[88]; + AA98 = A[89]; + AA09 = A[90]; + AA19 = A[91]; + AA29 = A[92]; + AA39 = A[93]; + AA49 = A[94]; + AA59 = A[95]; + AA69 = A[96]; + AA79 = A[97]; + AA89 = A[98]; + AA99 = A[99]; + + perm0 = 0; + perm1 = 1; + perm2 = 2; + perm3 = 3; + perm4 = 4; + perm5 = 5; + perm6 = 6; + perm7 = 7; + perm8 = 8; + perm9 = 9; + + /****************** iteration 0 ***********/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA00); + pvt = 0; + t = absOp (AA10); + if (t > p) { p = t; pvt = 1; } + t = absOp (AA20); + if (t > p) { p = t; pvt = 2; } + t = absOp (AA30); + if (t > p) { p = t; pvt = 3; } + t = absOp (AA40); + if (t > p) { p = t; pvt = 4; } + t = absOp (AA50); + if (t > p) { p = t; pvt = 5; } + t = absOp (AA60); + if (t > p) { p = t; pvt = 6; } + t = absOp (AA70); + if (t > p) { p = t; pvt = 7; } + t = absOp (AA80); + if (t > p) { p = t; pvt = 8; } + t = absOp (AA90); + if (t > p) { p = t; pvt = 9; } + + /* swap pivot row with row 0 */ + if (pvt == 1) { + tmp = AA00; AA00 = AA10; AA10 = tmp; + tmp = AA01; AA01 = AA11; AA11 = tmp; + tmp = AA02; AA02 = AA12; AA12 = tmp; + tmp = AA03; AA03 = AA13; AA13 = tmp; + tmp = AA04; AA04 = AA14; AA14 = tmp; + tmp = AA05; AA05 = AA15; AA15 = tmp; + tmp = AA06; AA06 = AA16; AA16 = tmp; + tmp = AA07; AA07 = AA17; AA17 = tmp; + tmp = AA08; AA08 = AA18; AA18 = tmp; + tmp = AA09; AA09 = AA19; AA19 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm1; perm1 = i; + } + if (pvt == 2) { + tmp = AA00; AA00 = AA20; AA20 = tmp; + tmp = AA01; AA01 = AA21; AA21 = tmp; + tmp = AA02; AA02 = AA22; AA22 = tmp; + tmp = AA03; AA03 = AA23; AA23 = tmp; + tmp = AA04; AA04 = AA24; AA24 = tmp; + tmp = AA05; AA05 = AA25; AA25 = tmp; + tmp = AA06; AA06 = AA26; AA26 = tmp; + tmp = AA07; AA07 = AA27; AA27 = tmp; + tmp = AA08; AA08 = AA28; AA28 = tmp; + tmp = AA09; AA09 = AA29; AA29 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm2; perm2 = i; + } + if (pvt == 3) { + tmp = AA00; AA00 = AA30; AA30 = tmp; + tmp = AA01; AA01 = AA31; AA31 = tmp; + tmp = AA02; AA02 = AA32; AA32 = tmp; + tmp = AA03; AA03 = AA33; AA33 = tmp; + tmp = AA04; AA04 = AA34; AA34 = tmp; + tmp = AA05; AA05 = AA35; AA35 = tmp; + tmp = AA06; AA06 = AA36; AA36 = tmp; + tmp = AA07; AA07 = AA37; AA37 = tmp; + tmp = AA08; AA08 = AA38; AA38 = tmp; + tmp = AA09; AA09 = AA39; AA39 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm3; perm3 = i; + } + if (pvt == 4) { + tmp = AA00; AA00 = AA40; AA40 = tmp; + tmp = AA01; AA01 = AA41; AA41 = tmp; + tmp = AA02; AA02 = AA42; AA42 = tmp; + tmp = AA03; AA03 = AA43; AA43 = tmp; + tmp = AA04; AA04 = AA44; AA44 = tmp; + tmp = AA05; AA05 = AA45; AA45 = tmp; + tmp = AA06; AA06 = AA46; AA46 = tmp; + tmp = AA07; AA07 = AA47; AA47 = tmp; + tmp = AA08; AA08 = AA48; AA48 = tmp; + tmp = AA09; AA09 = AA49; AA49 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm4; perm4 = i; + } + if (pvt == 5) { + tmp = AA00; AA00 = AA50; AA50 = tmp; + tmp = AA01; AA01 = AA51; AA51 = tmp; + tmp = AA02; AA02 = AA52; AA52 = tmp; + tmp = AA03; AA03 = AA53; AA53 = tmp; + tmp = AA04; AA04 = AA54; AA54 = tmp; + tmp = AA05; AA05 = AA55; AA55 = tmp; + tmp = AA06; AA06 = AA56; AA56 = tmp; + tmp = AA07; AA07 = AA57; AA57 = tmp; + tmp = AA08; AA08 = AA58; AA58 = tmp; + tmp = AA09; AA09 = AA59; AA59 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm5; perm5 = i; + } + if (pvt == 6) { + tmp = AA00; AA00 = AA60; AA60 = tmp; + tmp = AA01; AA01 = AA61; AA61 = tmp; + tmp = AA02; AA02 = AA62; AA62 = tmp; + tmp = AA03; AA03 = AA63; AA63 = tmp; + tmp = AA04; AA04 = AA64; AA64 = tmp; + tmp = AA05; AA05 = AA65; AA65 = tmp; + tmp = AA06; AA06 = AA66; AA66 = tmp; + tmp = AA07; AA07 = AA67; AA67 = tmp; + tmp = AA08; AA08 = AA68; AA68 = tmp; + tmp = AA09; AA09 = AA69; AA69 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm6; perm6 = i; + } + if (pvt == 7) { + tmp = AA00; AA00 = AA70; AA70 = tmp; + tmp = AA01; AA01 = AA71; AA71 = tmp; + tmp = AA02; AA02 = AA72; AA72 = tmp; + tmp = AA03; AA03 = AA73; AA73 = tmp; + tmp = AA04; AA04 = AA74; AA74 = tmp; + tmp = AA05; AA05 = AA75; AA75 = tmp; + tmp = AA06; AA06 = AA76; AA76 = tmp; + tmp = AA07; AA07 = AA77; AA77 = tmp; + tmp = AA08; AA08 = AA78; AA78 = tmp; + tmp = AA09; AA09 = AA79; AA79 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm7; perm7 = i; + } + if (pvt == 8) { + tmp = AA00; AA00 = AA80; AA80 = tmp; + tmp = AA01; AA01 = AA81; AA81 = tmp; + tmp = AA02; AA02 = AA82; AA82 = tmp; + tmp = AA03; AA03 = AA83; AA83 = tmp; + tmp = AA04; AA04 = AA84; AA84 = tmp; + tmp = AA05; AA05 = AA85; AA85 = tmp; + tmp = AA06; AA06 = AA86; AA86 = tmp; + tmp = AA07; AA07 = AA87; AA87 = tmp; + tmp = AA08; AA08 = AA88; AA88 = tmp; + tmp = AA09; AA09 = AA89; AA89 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm8; perm8 = i; + } + if (pvt == 9) { + tmp = AA00; AA00 = AA90; AA90 = tmp; + tmp = AA01; AA01 = AA91; AA91 = tmp; + tmp = AA02; AA02 = AA92; AA92 = tmp; + tmp = AA03; AA03 = AA93; AA93 = tmp; + tmp = AA04; AA04 = AA94; AA94 = tmp; + tmp = AA05; AA05 = AA95; AA95 = tmp; + tmp = AA06; AA06 = AA96; AA96 = tmp; + tmp = AA07; AA07 = AA97; AA97 = tmp; + tmp = AA08; AA08 = AA98; AA98 = tmp; + tmp = AA09; AA09 = AA99; AA99 = tmp; + /* update permutation vector based on row swap */ + i = perm0; perm0 = perm9; perm9 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA00); + icol0 = perm0; + AA00 = tmp; + AA01 = mulOp (tmp, AA01); + AA02 = mulOp (tmp, AA02); + AA03 = mulOp (tmp, AA03); + AA04 = mulOp (tmp, AA04); + AA05 = mulOp (tmp, AA05); + AA06 = mulOp (tmp, AA06); + AA07 = mulOp (tmp, AA07); + AA08 = mulOp (tmp, AA08); + AA09 = mulOp (tmp, AA09); + + /* eliminate above and below current row */ + tmp = AA10; + AA10 = mulOp (negOp(tmp), AA00); + AA11 = fmnaOp (tmp, AA01, AA11); + AA12 = fmnaOp (tmp, AA02, AA12); + AA13 = fmnaOp (tmp, AA03, AA13); + AA14 = fmnaOp (tmp, AA04, AA14); + AA15 = fmnaOp (tmp, AA05, AA15); + AA16 = fmnaOp (tmp, AA06, AA16); + AA17 = fmnaOp (tmp, AA07, AA17); + AA18 = fmnaOp (tmp, AA08, AA18); + AA19 = fmnaOp (tmp, AA09, AA19); + + tmp = AA20; + AA20 = mulOp (negOp(tmp), AA00); + AA21 = fmnaOp (tmp, AA01, AA21); + AA22 = fmnaOp (tmp, AA02, AA22); + AA23 = fmnaOp (tmp, AA03, AA23); + AA24 = fmnaOp (tmp, AA04, AA24); + AA25 = fmnaOp (tmp, AA05, AA25); + AA26 = fmnaOp (tmp, AA06, AA26); + AA27 = fmnaOp (tmp, AA07, AA27); + AA28 = fmnaOp (tmp, AA08, AA28); + AA29 = fmnaOp (tmp, AA09, AA29); + + tmp = AA30; + AA30 = mulOp (negOp(tmp), AA00); + AA31 = fmnaOp (tmp, AA01, AA31); + AA32 = fmnaOp (tmp, AA02, AA32); + AA33 = fmnaOp (tmp, AA03, AA33); + AA34 = fmnaOp (tmp, AA04, AA34); + AA35 = fmnaOp (tmp, AA05, AA35); + AA36 = fmnaOp (tmp, AA06, AA36); + AA37 = fmnaOp (tmp, AA07, AA37); + AA38 = fmnaOp (tmp, AA08, AA38); + AA39 = fmnaOp (tmp, AA09, AA39); + + tmp = AA40; + AA40 = mulOp (negOp(tmp), AA00); + AA41 = fmnaOp (tmp, AA01, AA41); + AA42 = fmnaOp (tmp, AA02, AA42); + AA43 = fmnaOp (tmp, AA03, AA43); + AA44 = fmnaOp (tmp, AA04, AA44); + AA45 = fmnaOp (tmp, AA05, AA45); + AA46 = fmnaOp (tmp, AA06, AA46); + AA47 = fmnaOp (tmp, AA07, AA47); + AA48 = fmnaOp (tmp, AA08, AA48); + AA49 = fmnaOp (tmp, AA09, AA49); + + tmp = AA50; + AA50 = mulOp (negOp(tmp), AA00); + AA51 = fmnaOp (tmp, AA01, AA51); + AA52 = fmnaOp (tmp, AA02, AA52); + AA53 = fmnaOp (tmp, AA03, AA53); + AA54 = fmnaOp (tmp, AA04, AA54); + AA55 = fmnaOp (tmp, AA05, AA55); + AA56 = fmnaOp (tmp, AA06, AA56); + AA57 = fmnaOp (tmp, AA07, AA57); + AA58 = fmnaOp (tmp, AA08, AA58); + AA59 = fmnaOp (tmp, AA09, AA59); + + tmp = AA60; + AA60 = mulOp (negOp(tmp), AA00); + AA61 = fmnaOp (tmp, AA01, AA61); + AA62 = fmnaOp (tmp, AA02, AA62); + AA63 = fmnaOp (tmp, AA03, AA63); + AA64 = fmnaOp (tmp, AA04, AA64); + AA65 = fmnaOp (tmp, AA05, AA65); + AA66 = fmnaOp (tmp, AA06, AA66); + AA67 = fmnaOp (tmp, AA07, AA67); + AA68 = fmnaOp (tmp, AA08, AA68); + AA69 = fmnaOp (tmp, AA09, AA69); + + tmp = AA70; + AA70 = mulOp (negOp(tmp), AA00); + AA71 = fmnaOp (tmp, AA01, AA71); + AA72 = fmnaOp (tmp, AA02, AA72); + AA73 = fmnaOp (tmp, AA03, AA73); + AA74 = fmnaOp (tmp, AA04, AA74); + AA75 = fmnaOp (tmp, AA05, AA75); + AA76 = fmnaOp (tmp, AA06, AA76); + AA77 = fmnaOp (tmp, AA07, AA77); + AA78 = fmnaOp (tmp, AA08, AA78); + AA79 = fmnaOp (tmp, AA09, AA79); + + tmp = AA80; + AA80 = mulOp (negOp(tmp), AA00); + AA81 = fmnaOp (tmp, AA01, AA81); + AA82 = fmnaOp (tmp, AA02, AA82); + AA83 = fmnaOp (tmp, AA03, AA83); + AA84 = fmnaOp (tmp, AA04, AA84); + AA85 = fmnaOp (tmp, AA05, AA85); + AA86 = fmnaOp (tmp, AA06, AA86); + AA87 = fmnaOp (tmp, AA07, AA87); + AA88 = fmnaOp (tmp, AA08, AA88); + AA89 = fmnaOp (tmp, AA09, AA89); + + tmp = AA90; + AA90 = mulOp (negOp(tmp), AA00); + AA91 = fmnaOp (tmp, AA01, AA91); + AA92 = fmnaOp (tmp, AA02, AA92); + AA93 = fmnaOp (tmp, AA03, AA93); + AA94 = fmnaOp (tmp, AA04, AA94); + AA95 = fmnaOp (tmp, AA05, AA95); + AA96 = fmnaOp (tmp, AA06, AA96); + AA97 = fmnaOp (tmp, AA07, AA97); + AA98 = fmnaOp (tmp, AA08, AA98); + AA99 = fmnaOp (tmp, AA09, AA99); + + /****************** iteration 1 ***********/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA11); + pvt = 1; + t = absOp (AA21); + if (t > p) { p = t; pvt = 2; } + t = absOp (AA31); + if (t > p) { p = t; pvt = 3; } + t = absOp (AA41); + if (t > p) { p = t; pvt = 4; } + t = absOp (AA51); + if (t > p) { p = t; pvt = 5; } + t = absOp (AA61); + if (t > p) { p = t; pvt = 6; } + t = absOp (AA71); + if (t > p) { p = t; pvt = 7; } + t = absOp (AA81); + if (t > p) { p = t; pvt = 8; } + t = absOp (AA91); + if (t > p) { p = t; pvt = 9; } + + /* swap pivot row with row 1 */ + if (pvt == 2) { + tmp = AA10; AA10 = AA20; AA20 = tmp; + tmp = AA11; AA11 = AA21; AA21 = tmp; + tmp = AA12; AA12 = AA22; AA22 = tmp; + tmp = AA13; AA13 = AA23; AA23 = tmp; + tmp = AA14; AA14 = AA24; AA24 = tmp; + tmp = AA15; AA15 = AA25; AA25 = tmp; + tmp = AA16; AA16 = AA26; AA26 = tmp; + tmp = AA17; AA17 = AA27; AA27 = tmp; + tmp = AA18; AA18 = AA28; AA28 = tmp; + tmp = AA19; AA19 = AA29; AA29 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm2; perm2 = i; + } + if (pvt == 3) { + tmp = AA10; AA10 = AA30; AA30 = tmp; + tmp = AA11; AA11 = AA31; AA31 = tmp; + tmp = AA12; AA12 = AA32; AA32 = tmp; + tmp = AA13; AA13 = AA33; AA33 = tmp; + tmp = AA14; AA14 = AA34; AA34 = tmp; + tmp = AA15; AA15 = AA35; AA35 = tmp; + tmp = AA16; AA16 = AA36; AA36 = tmp; + tmp = AA17; AA17 = AA37; AA37 = tmp; + tmp = AA18; AA18 = AA38; AA38 = tmp; + tmp = AA19; AA19 = AA39; AA39 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm3; perm3 = i; + } + if (pvt == 4) { + tmp = AA10; AA10 = AA40; AA40 = tmp; + tmp = AA11; AA11 = AA41; AA41 = tmp; + tmp = AA12; AA12 = AA42; AA42 = tmp; + tmp = AA13; AA13 = AA43; AA43 = tmp; + tmp = AA14; AA14 = AA44; AA44 = tmp; + tmp = AA15; AA15 = AA45; AA45 = tmp; + tmp = AA16; AA16 = AA46; AA46 = tmp; + tmp = AA17; AA17 = AA47; AA47 = tmp; + tmp = AA18; AA18 = AA48; AA48 = tmp; + tmp = AA19; AA19 = AA49; AA49 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm4; perm4 = i; + } + if (pvt == 5) { + tmp = AA10; AA10 = AA50; AA50 = tmp; + tmp = AA11; AA11 = AA51; AA51 = tmp; + tmp = AA12; AA12 = AA52; AA52 = tmp; + tmp = AA13; AA13 = AA53; AA53 = tmp; + tmp = AA14; AA14 = AA54; AA54 = tmp; + tmp = AA15; AA15 = AA55; AA55 = tmp; + tmp = AA16; AA16 = AA56; AA56 = tmp; + tmp = AA17; AA17 = AA57; AA57 = tmp; + tmp = AA18; AA18 = AA58; AA58 = tmp; + tmp = AA19; AA19 = AA59; AA59 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm5; perm5 = i; + } + if (pvt == 6) { + tmp = AA10; AA10 = AA60; AA60 = tmp; + tmp = AA11; AA11 = AA61; AA61 = tmp; + tmp = AA12; AA12 = AA62; AA62 = tmp; + tmp = AA13; AA13 = AA63; AA63 = tmp; + tmp = AA14; AA14 = AA64; AA64 = tmp; + tmp = AA15; AA15 = AA65; AA65 = tmp; + tmp = AA16; AA16 = AA66; AA66 = tmp; + tmp = AA17; AA17 = AA67; AA67 = tmp; + tmp = AA18; AA18 = AA68; AA68 = tmp; + tmp = AA19; AA19 = AA69; AA69 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm6; perm6 = i; + } + if (pvt == 7) { + tmp = AA10; AA10 = AA70; AA70 = tmp; + tmp = AA11; AA11 = AA71; AA71 = tmp; + tmp = AA12; AA12 = AA72; AA72 = tmp; + tmp = AA13; AA13 = AA73; AA73 = tmp; + tmp = AA14; AA14 = AA74; AA74 = tmp; + tmp = AA15; AA15 = AA75; AA75 = tmp; + tmp = AA16; AA16 = AA76; AA76 = tmp; + tmp = AA17; AA17 = AA77; AA77 = tmp; + tmp = AA18; AA18 = AA78; AA78 = tmp; + tmp = AA19; AA19 = AA79; AA79 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm7; perm7 = i; + } + if (pvt == 8) { + tmp = AA10; AA10 = AA80; AA80 = tmp; + tmp = AA11; AA11 = AA81; AA81 = tmp; + tmp = AA12; AA12 = AA82; AA82 = tmp; + tmp = AA13; AA13 = AA83; AA83 = tmp; + tmp = AA14; AA14 = AA84; AA84 = tmp; + tmp = AA15; AA15 = AA85; AA85 = tmp; + tmp = AA16; AA16 = AA86; AA86 = tmp; + tmp = AA17; AA17 = AA87; AA87 = tmp; + tmp = AA18; AA18 = AA88; AA88 = tmp; + tmp = AA19; AA19 = AA89; AA89 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm8; perm8 = i; + } + if (pvt == 9) { + tmp = AA10; AA10 = AA90; AA90 = tmp; + tmp = AA11; AA11 = AA91; AA91 = tmp; + tmp = AA12; AA12 = AA92; AA92 = tmp; + tmp = AA13; AA13 = AA93; AA93 = tmp; + tmp = AA14; AA14 = AA94; AA94 = tmp; + tmp = AA15; AA15 = AA95; AA95 = tmp; + tmp = AA16; AA16 = AA96; AA96 = tmp; + tmp = AA17; AA17 = AA97; AA97 = tmp; + tmp = AA18; AA18 = AA98; AA98 = tmp; + tmp = AA19; AA19 = AA99; AA99 = tmp; + /* update permutation vector based on row swap */ + i = perm1; perm1 = perm9; perm9 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA11); + icol1 = perm1; + AA10 = mulOp (tmp, AA10); + AA11 = tmp; + AA12 = mulOp (tmp, AA12); + AA13 = mulOp (tmp, AA13); + AA14 = mulOp (tmp, AA14); + AA15 = mulOp (tmp, AA15); + AA16 = mulOp (tmp, AA16); + AA17 = mulOp (tmp, AA17); + AA18 = mulOp (tmp, AA18); + AA19 = mulOp (tmp, AA19); + + /* eliminate above and below current row */ + tmp = AA01; + AA00 = fmnaOp (tmp, AA10, AA00); + AA01 = mulOp (negOp(tmp), AA11); + AA02 = fmnaOp (tmp, AA12, AA02); + AA03 = fmnaOp (tmp, AA13, AA03); + AA04 = fmnaOp (tmp, AA14, AA04); + AA05 = fmnaOp (tmp, AA15, AA05); + AA06 = fmnaOp (tmp, AA16, AA06); + AA07 = fmnaOp (tmp, AA17, AA07); + AA08 = fmnaOp (tmp, AA18, AA08); + AA09 = fmnaOp (tmp, AA19, AA09); + + tmp = AA21; + AA20 = fmnaOp (tmp, AA10, AA20); + AA21 = mulOp (negOp(tmp), AA11); + AA22 = fmnaOp (tmp, AA12, AA22); + AA23 = fmnaOp (tmp, AA13, AA23); + AA24 = fmnaOp (tmp, AA14, AA24); + AA25 = fmnaOp (tmp, AA15, AA25); + AA26 = fmnaOp (tmp, AA16, AA26); + AA27 = fmnaOp (tmp, AA17, AA27); + AA28 = fmnaOp (tmp, AA18, AA28); + AA29 = fmnaOp (tmp, AA19, AA29); + + tmp = AA31; + AA30 = fmnaOp (tmp, AA10, AA30); + AA31 = mulOp (negOp(tmp), AA11); + AA32 = fmnaOp (tmp, AA12, AA32); + AA33 = fmnaOp (tmp, AA13, AA33); + AA34 = fmnaOp (tmp, AA14, AA34); + AA35 = fmnaOp (tmp, AA15, AA35); + AA36 = fmnaOp (tmp, AA16, AA36); + AA37 = fmnaOp (tmp, AA17, AA37); + AA38 = fmnaOp (tmp, AA18, AA38); + AA39 = fmnaOp (tmp, AA19, AA39); + + tmp = AA41; + AA40 = fmnaOp (tmp, AA10, AA40); + AA41 = mulOp (negOp(tmp), AA11); + AA42 = fmnaOp (tmp, AA12, AA42); + AA43 = fmnaOp (tmp, AA13, AA43); + AA44 = fmnaOp (tmp, AA14, AA44); + AA45 = fmnaOp (tmp, AA15, AA45); + AA46 = fmnaOp (tmp, AA16, AA46); + AA47 = fmnaOp (tmp, AA17, AA47); + AA48 = fmnaOp (tmp, AA18, AA48); + AA49 = fmnaOp (tmp, AA19, AA49); + + tmp = AA51; + AA50 = fmnaOp (tmp, AA10, AA50); + AA51 = mulOp (negOp(tmp), AA11); + AA52 = fmnaOp (tmp, AA12, AA52); + AA53 = fmnaOp (tmp, AA13, AA53); + AA54 = fmnaOp (tmp, AA14, AA54); + AA55 = fmnaOp (tmp, AA15, AA55); + AA56 = fmnaOp (tmp, AA16, AA56); + AA57 = fmnaOp (tmp, AA17, AA57); + AA58 = fmnaOp (tmp, AA18, AA58); + AA59 = fmnaOp (tmp, AA19, AA59); + + tmp = AA61; + AA60 = fmnaOp (tmp, AA10, AA60); + AA61 = mulOp (negOp(tmp), AA11); + AA62 = fmnaOp (tmp, AA12, AA62); + AA63 = fmnaOp (tmp, AA13, AA63); + AA64 = fmnaOp (tmp, AA14, AA64); + AA65 = fmnaOp (tmp, AA15, AA65); + AA66 = fmnaOp (tmp, AA16, AA66); + AA67 = fmnaOp (tmp, AA17, AA67); + AA68 = fmnaOp (tmp, AA18, AA68); + AA69 = fmnaOp (tmp, AA19, AA69); + + tmp = AA71; + AA70 = fmnaOp (tmp, AA10, AA70); + AA71 = mulOp (negOp(tmp), AA11); + AA72 = fmnaOp (tmp, AA12, AA72); + AA73 = fmnaOp (tmp, AA13, AA73); + AA74 = fmnaOp (tmp, AA14, AA74); + AA75 = fmnaOp (tmp, AA15, AA75); + AA76 = fmnaOp (tmp, AA16, AA76); + AA77 = fmnaOp (tmp, AA17, AA77); + AA78 = fmnaOp (tmp, AA18, AA78); + AA79 = fmnaOp (tmp, AA19, AA79); + + tmp = AA81; + AA80 = fmnaOp (tmp, AA10, AA80); + AA81 = mulOp (negOp(tmp), AA11); + AA82 = fmnaOp (tmp, AA12, AA82); + AA83 = fmnaOp (tmp, AA13, AA83); + AA84 = fmnaOp (tmp, AA14, AA84); + AA85 = fmnaOp (tmp, AA15, AA85); + AA86 = fmnaOp (tmp, AA16, AA86); + AA87 = fmnaOp (tmp, AA17, AA87); + AA88 = fmnaOp (tmp, AA18, AA88); + AA89 = fmnaOp (tmp, AA19, AA89); + + tmp = AA91; + AA90 = fmnaOp (tmp, AA10, AA90); + AA91 = mulOp (negOp(tmp), AA11); + AA92 = fmnaOp (tmp, AA12, AA92); + AA93 = fmnaOp (tmp, AA13, AA93); + AA94 = fmnaOp (tmp, AA14, AA94); + AA95 = fmnaOp (tmp, AA15, AA95); + AA96 = fmnaOp (tmp, AA16, AA96); + AA97 = fmnaOp (tmp, AA17, AA97); + AA98 = fmnaOp (tmp, AA18, AA98); + AA99 = fmnaOp (tmp, AA19, AA99); + + /****************** iteration 2 ****************/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA22); + pvt = 2; + t = absOp (AA32); + if (t > p) { p = t; pvt = 3; } + t = absOp (AA42); + if (t > p) { p = t; pvt = 4; } + t = absOp (AA52); + if (t > p) { p = t; pvt = 5; } + t = absOp (AA62); + if (t > p) { p = t; pvt = 6; } + t = absOp (AA72); + if (t > p) { p = t; pvt = 7; } + t = absOp (AA82); + if (t > p) { p = t; pvt = 8; } + t = absOp (AA92); + if (t > p) { p = t; pvt = 9; } + + /* swap pivot row with row 2 */ + if (pvt == 3) { + tmp = AA20; AA20 = AA30; AA30 = tmp; + tmp = AA21; AA21 = AA31; AA31 = tmp; + tmp = AA22; AA22 = AA32; AA32 = tmp; + tmp = AA23; AA23 = AA33; AA33 = tmp; + tmp = AA24; AA24 = AA34; AA34 = tmp; + tmp = AA25; AA25 = AA35; AA35 = tmp; + tmp = AA26; AA26 = AA36; AA36 = tmp; + tmp = AA27; AA27 = AA37; AA37 = tmp; + tmp = AA28; AA28 = AA38; AA38 = tmp; + tmp = AA29; AA29 = AA39; AA39 = tmp; + /* update permutation vector based on row swap */ + i = perm2; perm2 = perm3; perm3 = i; + } + if (pvt == 4) { + tmp = AA20; AA20 = AA40; AA40 = tmp; + tmp = AA21; AA21 = AA41; AA41 = tmp; + tmp = AA22; AA22 = AA42; AA42 = tmp; + tmp = AA23; AA23 = AA43; AA43 = tmp; + tmp = AA24; AA24 = AA44; AA44 = tmp; + tmp = AA25; AA25 = AA45; AA45 = tmp; + tmp = AA26; AA26 = AA46; AA46 = tmp; + tmp = AA27; AA27 = AA47; AA47 = tmp; + tmp = AA28; AA28 = AA48; AA48 = tmp; + tmp = AA29; AA29 = AA49; AA49 = tmp; + /* update permutation vector based on row swap */ + i = perm2; perm2 = perm4; perm4 = i; + } + if (pvt == 5) { + tmp = AA20; AA20 = AA50; AA50 = tmp; + tmp = AA21; AA21 = AA51; AA51 = tmp; + tmp = AA22; AA22 = AA52; AA52 = tmp; + tmp = AA23; AA23 = AA53; AA53 = tmp; + tmp = AA24; AA24 = AA54; AA54 = tmp; + tmp = AA25; AA25 = AA55; AA55 = tmp; + tmp = AA26; AA26 = AA56; AA56 = tmp; + tmp = AA27; AA27 = AA57; AA57 = tmp; + tmp = AA28; AA28 = AA58; AA58 = tmp; + tmp = AA29; AA29 = AA59; AA59 = tmp; + /* update permutation vector based on row swap */ + i = perm2; perm2 = perm5; perm5 = i; + } + if (pvt == 6) { + tmp = AA20; AA20 = AA60; AA60 = tmp; + tmp = AA21; AA21 = AA61; AA61 = tmp; + tmp = AA22; AA22 = AA62; AA62 = tmp; + tmp = AA23; AA23 = AA63; AA63 = tmp; + tmp = AA24; AA24 = AA64; AA64 = tmp; + tmp = AA25; AA25 = AA65; AA65 = tmp; + tmp = AA26; AA26 = AA66; AA66 = tmp; + tmp = AA27; AA27 = AA67; AA67 = tmp; + tmp = AA28; AA28 = AA68; AA68 = tmp; + tmp = AA29; AA29 = AA69; AA69 = tmp; + /* update permutation vector based on row swap */ + i = perm2; perm2 = perm6; perm6 = i; + } + if (pvt == 7) { + tmp = AA20; AA20 = AA70; AA70 = tmp; + tmp = AA21; AA21 = AA71; AA71 = tmp; + tmp = AA22; AA22 = AA72; AA72 = tmp; + tmp = AA23; AA23 = AA73; AA73 = tmp; + tmp = AA24; AA24 = AA74; AA74 = tmp; + tmp = AA25; AA25 = AA75; AA75 = tmp; + tmp = AA26; AA26 = AA76; AA76 = tmp; + tmp = AA27; AA27 = AA77; AA77 = tmp; + tmp = AA28; AA28 = AA78; AA78 = tmp; + tmp = AA29; AA29 = AA79; AA79 = tmp; + /* update permutation vector based on row swap */ + i = perm2; perm2 = perm7; perm7 = i; + } + if (pvt == 8) { + tmp = AA20; AA20 = AA80; AA80 = tmp; + tmp = AA21; AA21 = AA81; AA81 = tmp; + tmp = AA22; AA22 = AA82; AA82 = tmp; + tmp = AA23; AA23 = AA83; AA83 = tmp; + tmp = AA24; AA24 = AA84; AA84 = tmp; + tmp = AA25; AA25 = AA85; AA85 = tmp; + tmp = AA26; AA26 = AA86; AA86 = tmp; + tmp = AA27; AA27 = AA87; AA87 = tmp; + tmp = AA28; AA28 = AA88; AA88 = tmp; + tmp = AA29; AA29 = AA89; AA89 = tmp; + /* update permutation vector based on row swap */ + i = perm2; perm2 = perm8; perm8 = i; + } + if (pvt == 9) { + tmp = AA20; AA20 = AA90; AA90 = tmp; + tmp = AA21; AA21 = AA91; AA91 = tmp; + tmp = AA22; AA22 = AA92; AA92 = tmp; + tmp = AA23; AA23 = AA93; AA93 = tmp; + tmp = AA24; AA24 = AA94; AA94 = tmp; + tmp = AA25; AA25 = AA95; AA95 = tmp; + tmp = AA26; AA26 = AA96; AA96 = tmp; + tmp = AA27; AA27 = AA97; AA97 = tmp; + tmp = AA28; AA28 = AA98; AA98 = tmp; + tmp = AA29; AA29 = AA99; AA99 = tmp; + /* update permutation vector based on row swap */ + i = perm2; perm2 = perm9; perm9 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA22); + icol2 = perm2; + AA20 = mulOp (tmp, AA20); + AA21 = mulOp (tmp, AA21); + AA22 = tmp; + AA23 = mulOp (tmp, AA23); + AA24 = mulOp (tmp, AA24); + AA25 = mulOp (tmp, AA25); + AA26 = mulOp (tmp, AA26); + AA27 = mulOp (tmp, AA27); + AA28 = mulOp (tmp, AA28); + AA29 = mulOp (tmp, AA29); + + /* eliminate above and below current row */ + tmp = AA02; + AA00 = fmnaOp (tmp, AA20, AA00); + AA01 = fmnaOp (tmp, AA21, AA01); + AA02 = mulOp (negOp(tmp), AA22); + AA03 = fmnaOp (tmp, AA23, AA03); + AA04 = fmnaOp (tmp, AA24, AA04); + AA05 = fmnaOp (tmp, AA25, AA05); + AA06 = fmnaOp (tmp, AA26, AA06); + AA07 = fmnaOp (tmp, AA27, AA07); + AA08 = fmnaOp (tmp, AA28, AA08); + AA09 = fmnaOp (tmp, AA29, AA09); + + tmp = AA12; + AA10 = fmnaOp (tmp, AA20, AA10); + AA11 = fmnaOp (tmp, AA21, AA11); + AA12 = mulOp (negOp(tmp), AA22); + AA13 = fmnaOp (tmp, AA23, AA13); + AA14 = fmnaOp (tmp, AA24, AA14); + AA15 = fmnaOp (tmp, AA25, AA15); + AA16 = fmnaOp (tmp, AA26, AA16); + AA17 = fmnaOp (tmp, AA27, AA17); + AA18 = fmnaOp (tmp, AA28, AA18); + AA19 = fmnaOp (tmp, AA29, AA19); + + tmp = AA32; + AA30 = fmnaOp (tmp, AA20, AA30); + AA31 = fmnaOp (tmp, AA21, AA31); + AA32 = mulOp (negOp(tmp), AA22); + AA33 = fmnaOp (tmp, AA23, AA33); + AA34 = fmnaOp (tmp, AA24, AA34); + AA35 = fmnaOp (tmp, AA25, AA35); + AA36 = fmnaOp (tmp, AA26, AA36); + AA37 = fmnaOp (tmp, AA27, AA37); + AA38 = fmnaOp (tmp, AA28, AA38); + AA39 = fmnaOp (tmp, AA29, AA39); + + tmp = AA42; + AA40 = fmnaOp (tmp, AA20, AA40); + AA41 = fmnaOp (tmp, AA21, AA41); + AA42 = mulOp (negOp(tmp), AA22); + AA43 = fmnaOp (tmp, AA23, AA43); + AA44 = fmnaOp (tmp, AA24, AA44); + AA45 = fmnaOp (tmp, AA25, AA45); + AA46 = fmnaOp (tmp, AA26, AA46); + AA47 = fmnaOp (tmp, AA27, AA47); + AA48 = fmnaOp (tmp, AA28, AA48); + AA49 = fmnaOp (tmp, AA29, AA49); + + tmp = AA52; + AA50 = fmnaOp (tmp, AA20, AA50); + AA51 = fmnaOp (tmp, AA21, AA51); + AA52 = mulOp (negOp(tmp), AA22); + AA53 = fmnaOp (tmp, AA23, AA53); + AA54 = fmnaOp (tmp, AA24, AA54); + AA55 = fmnaOp (tmp, AA25, AA55); + AA56 = fmnaOp (tmp, AA26, AA56); + AA57 = fmnaOp (tmp, AA27, AA57); + AA58 = fmnaOp (tmp, AA28, AA58); + AA59 = fmnaOp (tmp, AA29, AA59); + + tmp = AA62; + AA60 = fmnaOp (tmp, AA20, AA60); + AA61 = fmnaOp (tmp, AA21, AA61); + AA62 = mulOp (negOp(tmp), AA22); + AA63 = fmnaOp (tmp, AA23, AA63); + AA64 = fmnaOp (tmp, AA24, AA64); + AA65 = fmnaOp (tmp, AA25, AA65); + AA66 = fmnaOp (tmp, AA26, AA66); + AA67 = fmnaOp (tmp, AA27, AA67); + AA68 = fmnaOp (tmp, AA28, AA68); + AA69 = fmnaOp (tmp, AA29, AA69); + + tmp = AA72; + AA70 = fmnaOp (tmp, AA20, AA70); + AA71 = fmnaOp (tmp, AA21, AA71); + AA72 = mulOp (negOp(tmp), AA22); + AA73 = fmnaOp (tmp, AA23, AA73); + AA74 = fmnaOp (tmp, AA24, AA74); + AA75 = fmnaOp (tmp, AA25, AA75); + AA76 = fmnaOp (tmp, AA26, AA76); + AA77 = fmnaOp (tmp, AA27, AA77); + AA78 = fmnaOp (tmp, AA28, AA78); + AA79 = fmnaOp (tmp, AA29, AA79); + + tmp = AA82; + AA80 = fmnaOp (tmp, AA20, AA80); + AA81 = fmnaOp (tmp, AA21, AA81); + AA82 = mulOp (negOp(tmp), AA22); + AA83 = fmnaOp (tmp, AA23, AA83); + AA84 = fmnaOp (tmp, AA24, AA84); + AA85 = fmnaOp (tmp, AA25, AA85); + AA86 = fmnaOp (tmp, AA26, AA86); + AA87 = fmnaOp (tmp, AA27, AA87); + AA88 = fmnaOp (tmp, AA28, AA88); + AA89 = fmnaOp (tmp, AA29, AA89); + + tmp = AA92; + AA90 = fmnaOp (tmp, AA20, AA90); + AA91 = fmnaOp (tmp, AA21, AA91); + AA92 = mulOp (negOp(tmp), AA22); + AA93 = fmnaOp (tmp, AA23, AA93); + AA94 = fmnaOp (tmp, AA24, AA94); + AA95 = fmnaOp (tmp, AA25, AA95); + AA96 = fmnaOp (tmp, AA26, AA96); + AA97 = fmnaOp (tmp, AA27, AA97); + AA98 = fmnaOp (tmp, AA28, AA98); + AA99 = fmnaOp (tmp, AA29, AA99); + + /****************** iteration 3 ****************/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA33); + pvt = 3; + t = absOp (AA43); + if (t > p) { p = t; pvt = 4; } + t = absOp (AA53); + if (t > p) { p = t; pvt = 5; } + t = absOp (AA63); + if (t > p) { p = t; pvt = 6; } + t = absOp (AA73); + if (t > p) { p = t; pvt = 7; } + t = absOp (AA83); + if (t > p) { p = t; pvt = 8; } + t = absOp (AA93); + if (t > p) { p = t; pvt = 9; } + + /* swap pivot row with row 3 */ + if (pvt == 4) { + tmp = AA30; AA30 = AA40; AA40 = tmp; + tmp = AA31; AA31 = AA41; AA41 = tmp; + tmp = AA32; AA32 = AA42; AA42 = tmp; + tmp = AA33; AA33 = AA43; AA43 = tmp; + tmp = AA34; AA34 = AA44; AA44 = tmp; + tmp = AA35; AA35 = AA45; AA45 = tmp; + tmp = AA36; AA36 = AA46; AA46 = tmp; + tmp = AA37; AA37 = AA47; AA47 = tmp; + tmp = AA38; AA38 = AA48; AA48 = tmp; + tmp = AA39; AA39 = AA49; AA49 = tmp; + /* update permutation vector based on row swap */ + i = perm3; perm3 = perm4; perm4 = i; + } + if (pvt == 5) { + tmp = AA30; AA30 = AA50; AA50 = tmp; + tmp = AA31; AA31 = AA51; AA51 = tmp; + tmp = AA32; AA32 = AA52; AA52 = tmp; + tmp = AA33; AA33 = AA53; AA53 = tmp; + tmp = AA34; AA34 = AA54; AA54 = tmp; + tmp = AA35; AA35 = AA55; AA55 = tmp; + tmp = AA36; AA36 = AA56; AA56 = tmp; + tmp = AA37; AA37 = AA57; AA57 = tmp; + tmp = AA38; AA38 = AA58; AA58 = tmp; + tmp = AA39; AA39 = AA59; AA59 = tmp; + /* update permutation vector based on row swap */ + i = perm3; perm3 = perm5; perm5 = i; + } + if (pvt == 6) { + tmp = AA30; AA30 = AA60; AA60 = tmp; + tmp = AA31; AA31 = AA61; AA61 = tmp; + tmp = AA32; AA32 = AA62; AA62 = tmp; + tmp = AA33; AA33 = AA63; AA63 = tmp; + tmp = AA34; AA34 = AA64; AA64 = tmp; + tmp = AA35; AA35 = AA65; AA65 = tmp; + tmp = AA36; AA36 = AA66; AA66 = tmp; + tmp = AA37; AA37 = AA67; AA67 = tmp; + tmp = AA38; AA38 = AA68; AA68 = tmp; + tmp = AA39; AA39 = AA69; AA69 = tmp; + /* update permutation vector based on row swap */ + i = perm3; perm3 = perm6; perm6 = i; + } + if (pvt == 7) { + tmp = AA30; AA30 = AA70; AA70 = tmp; + tmp = AA31; AA31 = AA71; AA71 = tmp; + tmp = AA32; AA32 = AA72; AA72 = tmp; + tmp = AA33; AA33 = AA73; AA73 = tmp; + tmp = AA34; AA34 = AA74; AA74 = tmp; + tmp = AA35; AA35 = AA75; AA75 = tmp; + tmp = AA36; AA36 = AA76; AA76 = tmp; + tmp = AA37; AA37 = AA77; AA77 = tmp; + tmp = AA38; AA38 = AA78; AA78 = tmp; + tmp = AA39; AA39 = AA79; AA79 = tmp; + /* update permutation vector based on row swap */ + i = perm3; perm3 = perm7; perm7 = i; + } + if (pvt == 8) { + tmp = AA30; AA30 = AA80; AA80 = tmp; + tmp = AA31; AA31 = AA81; AA81 = tmp; + tmp = AA32; AA32 = AA82; AA82 = tmp; + tmp = AA33; AA33 = AA83; AA83 = tmp; + tmp = AA34; AA34 = AA84; AA84 = tmp; + tmp = AA35; AA35 = AA85; AA85 = tmp; + tmp = AA36; AA36 = AA86; AA86 = tmp; + tmp = AA37; AA37 = AA87; AA87 = tmp; + tmp = AA38; AA38 = AA88; AA88 = tmp; + tmp = AA39; AA39 = AA89; AA89 = tmp; + /* update permutation vector based on row swap */ + i = perm3; perm3 = perm8; perm8 = i; + } + if (pvt == 9) { + tmp = AA30; AA30 = AA90; AA90 = tmp; + tmp = AA31; AA31 = AA91; AA91 = tmp; + tmp = AA32; AA32 = AA92; AA92 = tmp; + tmp = AA33; AA33 = AA93; AA93 = tmp; + tmp = AA34; AA34 = AA94; AA94 = tmp; + tmp = AA35; AA35 = AA95; AA95 = tmp; + tmp = AA36; AA36 = AA96; AA96 = tmp; + tmp = AA37; AA37 = AA97; AA97 = tmp; + tmp = AA38; AA38 = AA98; AA98 = tmp; + tmp = AA39; AA39 = AA99; AA99 = tmp; + /* update permutation vector based on row swap */ + i = perm3; perm3 = perm9; perm9 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA33); + icol3 = perm3; + AA30 = mulOp (tmp, AA30); + AA31 = mulOp (tmp, AA31); + AA32 = mulOp (tmp, AA32); + AA33 = tmp; + AA34 = mulOp (tmp, AA34); + AA35 = mulOp (tmp, AA35); + AA36 = mulOp (tmp, AA36); + AA37 = mulOp (tmp, AA37); + AA38 = mulOp (tmp, AA38); + AA39 = mulOp (tmp, AA39); + + /* eliminate above and below current row */ + tmp = AA03; + AA00 = fmnaOp (tmp, AA30, AA00); + AA01 = fmnaOp (tmp, AA31, AA01); + AA02 = fmnaOp (tmp, AA32, AA02); + AA03 = mulOp (negOp(tmp), AA33); + AA04 = fmnaOp (tmp, AA34, AA04); + AA05 = fmnaOp (tmp, AA35, AA05); + AA06 = fmnaOp (tmp, AA36, AA06); + AA07 = fmnaOp (tmp, AA37, AA07); + AA08 = fmnaOp (tmp, AA38, AA08); + AA09 = fmnaOp (tmp, AA39, AA09); + + tmp = AA13; + AA10 = fmnaOp (tmp, AA30, AA10); + AA11 = fmnaOp (tmp, AA31, AA11); + AA12 = fmnaOp (tmp, AA32, AA12); + AA13 = mulOp (negOp(tmp), AA33); + AA14 = fmnaOp (tmp, AA34, AA14); + AA15 = fmnaOp (tmp, AA35, AA15); + AA16 = fmnaOp (tmp, AA36, AA16); + AA17 = fmnaOp (tmp, AA37, AA17); + AA18 = fmnaOp (tmp, AA38, AA18); + AA19 = fmnaOp (tmp, AA39, AA19); + + tmp = AA23; + AA20 = fmnaOp (tmp, AA30, AA20); + AA21 = fmnaOp (tmp, AA31, AA21); + AA22 = fmnaOp (tmp, AA32, AA22); + AA23 = mulOp (negOp(tmp), AA33); + AA24 = fmnaOp (tmp, AA34, AA24); + AA25 = fmnaOp (tmp, AA35, AA25); + AA26 = fmnaOp (tmp, AA36, AA26); + AA27 = fmnaOp (tmp, AA37, AA27); + AA28 = fmnaOp (tmp, AA38, AA28); + AA29 = fmnaOp (tmp, AA39, AA29); + + tmp = AA43; + AA40 = fmnaOp (tmp, AA30, AA40); + AA41 = fmnaOp (tmp, AA31, AA41); + AA42 = fmnaOp (tmp, AA32, AA42); + AA43 = mulOp (negOp(tmp), AA33); + AA44 = fmnaOp (tmp, AA34, AA44); + AA45 = fmnaOp (tmp, AA35, AA45); + AA46 = fmnaOp (tmp, AA36, AA46); + AA47 = fmnaOp (tmp, AA37, AA47); + AA48 = fmnaOp (tmp, AA38, AA48); + AA49 = fmnaOp (tmp, AA39, AA49); + + tmp = AA53; + AA50 = fmnaOp (tmp, AA30, AA50); + AA51 = fmnaOp (tmp, AA31, AA51); + AA52 = fmnaOp (tmp, AA32, AA52); + AA53 = mulOp (negOp(tmp), AA33); + AA54 = fmnaOp (tmp, AA34, AA54); + AA55 = fmnaOp (tmp, AA35, AA55); + AA56 = fmnaOp (tmp, AA36, AA56); + AA57 = fmnaOp (tmp, AA37, AA57); + AA58 = fmnaOp (tmp, AA38, AA58); + AA59 = fmnaOp (tmp, AA39, AA59); + + tmp = AA63; + AA60 = fmnaOp (tmp, AA30, AA60); + AA61 = fmnaOp (tmp, AA31, AA61); + AA62 = fmnaOp (tmp, AA32, AA62); + AA63 = mulOp (negOp(tmp), AA33); + AA64 = fmnaOp (tmp, AA34, AA64); + AA65 = fmnaOp (tmp, AA35, AA65); + AA66 = fmnaOp (tmp, AA36, AA66); + AA67 = fmnaOp (tmp, AA37, AA67); + AA68 = fmnaOp (tmp, AA38, AA68); + AA69 = fmnaOp (tmp, AA39, AA69); + + tmp = AA73; + AA70 = fmnaOp (tmp, AA30, AA70); + AA71 = fmnaOp (tmp, AA31, AA71); + AA72 = fmnaOp (tmp, AA32, AA72); + AA73 = mulOp (negOp(tmp), AA33); + AA74 = fmnaOp (tmp, AA34, AA74); + AA75 = fmnaOp (tmp, AA35, AA75); + AA76 = fmnaOp (tmp, AA36, AA76); + AA77 = fmnaOp (tmp, AA37, AA77); + AA78 = fmnaOp (tmp, AA38, AA78); + AA79 = fmnaOp (tmp, AA39, AA79); + + tmp = AA83; + AA80 = fmnaOp (tmp, AA30, AA80); + AA81 = fmnaOp (tmp, AA31, AA81); + AA82 = fmnaOp (tmp, AA32, AA82); + AA83 = mulOp (negOp(tmp), AA33); + AA84 = fmnaOp (tmp, AA34, AA84); + AA85 = fmnaOp (tmp, AA35, AA85); + AA86 = fmnaOp (tmp, AA36, AA86); + AA87 = fmnaOp (tmp, AA37, AA87); + AA88 = fmnaOp (tmp, AA38, AA88); + AA89 = fmnaOp (tmp, AA39, AA89); + + tmp = AA93; + AA90 = fmnaOp (tmp, AA30, AA90); + AA91 = fmnaOp (tmp, AA31, AA91); + AA92 = fmnaOp (tmp, AA32, AA92); + AA93 = mulOp (negOp(tmp), AA33); + AA94 = fmnaOp (tmp, AA34, AA94); + AA95 = fmnaOp (tmp, AA35, AA95); + AA96 = fmnaOp (tmp, AA36, AA96); + AA97 = fmnaOp (tmp, AA37, AA97); + AA98 = fmnaOp (tmp, AA38, AA98); + AA99 = fmnaOp (tmp, AA39, AA99); + + /****************** iteration 4 ****************/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA44); + pvt = 4; + t = absOp (AA54); + if (t > p) { p = t; pvt = 5; } + t = absOp (AA64); + if (t > p) { p = t; pvt = 6; } + t = absOp (AA74); + if (t > p) { p = t; pvt = 7; } + t = absOp (AA84); + if (t > p) { p = t; pvt = 8; } + t = absOp (AA94); + if (t > p) { p = t; pvt = 9; } + + /* swap pivot row with row 4 */ + if (pvt == 5) { + tmp = AA40; AA40 = AA50; AA50 = tmp; + tmp = AA41; AA41 = AA51; AA51 = tmp; + tmp = AA42; AA42 = AA52; AA52 = tmp; + tmp = AA43; AA43 = AA53; AA53 = tmp; + tmp = AA44; AA44 = AA54; AA54 = tmp; + tmp = AA45; AA45 = AA55; AA55 = tmp; + tmp = AA46; AA46 = AA56; AA56 = tmp; + tmp = AA47; AA47 = AA57; AA57 = tmp; + tmp = AA48; AA48 = AA58; AA58 = tmp; + tmp = AA49; AA49 = AA59; AA59 = tmp; + /* update permutation vector based on row swap */ + i = perm4; perm4 = perm5; perm5 = i; + } + if (pvt == 6) { + tmp = AA40; AA40 = AA60; AA60 = tmp; + tmp = AA41; AA41 = AA61; AA61 = tmp; + tmp = AA42; AA42 = AA62; AA62 = tmp; + tmp = AA43; AA43 = AA63; AA63 = tmp; + tmp = AA44; AA44 = AA64; AA64 = tmp; + tmp = AA45; AA45 = AA65; AA65 = tmp; + tmp = AA46; AA46 = AA66; AA66 = tmp; + tmp = AA47; AA47 = AA67; AA67 = tmp; + tmp = AA48; AA48 = AA68; AA68 = tmp; + tmp = AA49; AA49 = AA69; AA69 = tmp; + /* update permutation vector based on row swap */ + i = perm4; perm4 = perm6; perm6 = i; + } + if (pvt == 7) { + tmp = AA40; AA40 = AA70; AA70 = tmp; + tmp = AA41; AA41 = AA71; AA71 = tmp; + tmp = AA42; AA42 = AA72; AA72 = tmp; + tmp = AA43; AA43 = AA73; AA73 = tmp; + tmp = AA44; AA44 = AA74; AA74 = tmp; + tmp = AA45; AA45 = AA75; AA75 = tmp; + tmp = AA46; AA46 = AA76; AA76 = tmp; + tmp = AA47; AA47 = AA77; AA77 = tmp; + tmp = AA48; AA48 = AA78; AA78 = tmp; + tmp = AA49; AA49 = AA79; AA79 = tmp; + /* update permutation vector based on row swap */ + i = perm4; perm4 = perm7; perm7 = i; + } + if (pvt == 8) { + tmp = AA40; AA40 = AA80; AA80 = tmp; + tmp = AA41; AA41 = AA81; AA81 = tmp; + tmp = AA42; AA42 = AA82; AA82 = tmp; + tmp = AA43; AA43 = AA83; AA83 = tmp; + tmp = AA44; AA44 = AA84; AA84 = tmp; + tmp = AA45; AA45 = AA85; AA85 = tmp; + tmp = AA46; AA46 = AA86; AA86 = tmp; + tmp = AA47; AA47 = AA87; AA87 = tmp; + tmp = AA48; AA48 = AA88; AA88 = tmp; + tmp = AA49; AA49 = AA89; AA89 = tmp; + /* update permutation vector based on row swap */ + i = perm4; perm4 = perm8; perm8 = i; + } + if (pvt == 9) { + tmp = AA40; AA40 = AA90; AA90 = tmp; + tmp = AA41; AA41 = AA91; AA91 = tmp; + tmp = AA42; AA42 = AA92; AA92 = tmp; + tmp = AA43; AA43 = AA93; AA93 = tmp; + tmp = AA44; AA44 = AA94; AA94 = tmp; + tmp = AA45; AA45 = AA95; AA95 = tmp; + tmp = AA46; AA46 = AA96; AA96 = tmp; + tmp = AA47; AA47 = AA97; AA97 = tmp; + tmp = AA48; AA48 = AA98; AA98 = tmp; + tmp = AA49; AA49 = AA99; AA99 = tmp; + /* update permutation vector based on row swap */ + i = perm4; perm4 = perm9; perm9 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA44); + icol4 = perm4; + AA40 = mulOp (tmp, AA40); + AA41 = mulOp (tmp, AA41); + AA42 = mulOp (tmp, AA42); + AA43 = mulOp (tmp, AA43); + AA44 = tmp; + AA45 = mulOp (tmp, AA45); + AA46 = mulOp (tmp, AA46); + AA47 = mulOp (tmp, AA47); + AA48 = mulOp (tmp, AA48); + AA49 = mulOp (tmp, AA49); + + /* eliminate above and below current row */ + tmp = AA04; + AA00 = fmnaOp (tmp, AA40, AA00); + AA01 = fmnaOp (tmp, AA41, AA01); + AA02 = fmnaOp (tmp, AA42, AA02); + AA03 = fmnaOp (tmp, AA43, AA03); + AA04 = mulOp (negOp(tmp), AA44); + AA05 = fmnaOp (tmp, AA45, AA05); + AA06 = fmnaOp (tmp, AA46, AA06); + AA07 = fmnaOp (tmp, AA47, AA07); + AA08 = fmnaOp (tmp, AA48, AA08); + AA09 = fmnaOp (tmp, AA49, AA09); + + tmp = AA14; + AA10 = fmnaOp (tmp, AA40, AA10); + AA11 = fmnaOp (tmp, AA41, AA11); + AA12 = fmnaOp (tmp, AA42, AA12); + AA13 = fmnaOp (tmp, AA43, AA13); + AA14 = mulOp (negOp(tmp), AA44); + AA15 = fmnaOp (tmp, AA45, AA15); + AA16 = fmnaOp (tmp, AA46, AA16); + AA17 = fmnaOp (tmp, AA47, AA17); + AA18 = fmnaOp (tmp, AA48, AA18); + AA19 = fmnaOp (tmp, AA49, AA19); + + tmp = AA24; + AA20 = fmnaOp (tmp, AA40, AA20); + AA21 = fmnaOp (tmp, AA41, AA21); + AA22 = fmnaOp (tmp, AA42, AA22); + AA23 = fmnaOp (tmp, AA43, AA23); + AA24 = mulOp (negOp(tmp), AA44); + AA25 = fmnaOp (tmp, AA45, AA25); + AA26 = fmnaOp (tmp, AA46, AA26); + AA27 = fmnaOp (tmp, AA47, AA27); + AA28 = fmnaOp (tmp, AA48, AA28); + AA29 = fmnaOp (tmp, AA49, AA29); + + tmp = AA34; + AA30 = fmnaOp (tmp, AA40, AA30); + AA31 = fmnaOp (tmp, AA41, AA31); + AA32 = fmnaOp (tmp, AA42, AA32); + AA33 = fmnaOp (tmp, AA43, AA33); + AA34 = mulOp (negOp(tmp), AA44); + AA35 = fmnaOp (tmp, AA45, AA35); + AA36 = fmnaOp (tmp, AA46, AA36); + AA37 = fmnaOp (tmp, AA47, AA37); + AA38 = fmnaOp (tmp, AA48, AA38); + AA39 = fmnaOp (tmp, AA49, AA39); + + tmp = AA54; + AA50 = fmnaOp (tmp, AA40, AA50); + AA51 = fmnaOp (tmp, AA41, AA51); + AA52 = fmnaOp (tmp, AA42, AA52); + AA53 = fmnaOp (tmp, AA43, AA53); + AA54 = mulOp (negOp(tmp), AA44); + AA55 = fmnaOp (tmp, AA45, AA55); + AA56 = fmnaOp (tmp, AA46, AA56); + AA57 = fmnaOp (tmp, AA47, AA57); + AA58 = fmnaOp (tmp, AA48, AA58); + AA59 = fmnaOp (tmp, AA49, AA59); + + tmp = AA64; + AA60 = fmnaOp (tmp, AA40, AA60); + AA61 = fmnaOp (tmp, AA41, AA61); + AA62 = fmnaOp (tmp, AA42, AA62); + AA63 = fmnaOp (tmp, AA43, AA63); + AA64 = mulOp (negOp(tmp), AA44); + AA65 = fmnaOp (tmp, AA45, AA65); + AA66 = fmnaOp (tmp, AA46, AA66); + AA67 = fmnaOp (tmp, AA47, AA67); + AA68 = fmnaOp (tmp, AA48, AA68); + AA69 = fmnaOp (tmp, AA49, AA69); + + tmp = AA74; + AA70 = fmnaOp (tmp, AA40, AA70); + AA71 = fmnaOp (tmp, AA41, AA71); + AA72 = fmnaOp (tmp, AA42, AA72); + AA73 = fmnaOp (tmp, AA43, AA73); + AA74 = mulOp (negOp(tmp), AA44); + AA75 = fmnaOp (tmp, AA45, AA75); + AA76 = fmnaOp (tmp, AA46, AA76); + AA77 = fmnaOp (tmp, AA47, AA77); + AA78 = fmnaOp (tmp, AA48, AA78); + AA79 = fmnaOp (tmp, AA49, AA79); + + tmp = AA84; + AA80 = fmnaOp (tmp, AA40, AA80); + AA81 = fmnaOp (tmp, AA41, AA81); + AA82 = fmnaOp (tmp, AA42, AA82); + AA83 = fmnaOp (tmp, AA43, AA83); + AA84 = mulOp (negOp(tmp), AA44); + AA85 = fmnaOp (tmp, AA45, AA85); + AA86 = fmnaOp (tmp, AA46, AA86); + AA87 = fmnaOp (tmp, AA47, AA87); + AA88 = fmnaOp (tmp, AA48, AA88); + AA89 = fmnaOp (tmp, AA49, AA89); + + tmp = AA94; + AA90 = fmnaOp (tmp, AA40, AA90); + AA91 = fmnaOp (tmp, AA41, AA91); + AA92 = fmnaOp (tmp, AA42, AA92); + AA93 = fmnaOp (tmp, AA43, AA93); + AA94 = mulOp (negOp(tmp), AA44); + AA95 = fmnaOp (tmp, AA45, AA95); + AA96 = fmnaOp (tmp, AA46, AA96); + AA97 = fmnaOp (tmp, AA47, AA97); + AA98 = fmnaOp (tmp, AA48, AA98); + AA99 = fmnaOp (tmp, AA49, AA99); + + /****************** iteration 5 ****************/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA55); + pvt = 5; + t = absOp (AA65); + if (t > p) { p = t; pvt = 6; } + t = absOp (AA75); + if (t > p) { p = t; pvt = 7; } + t = absOp (AA85); + if (t > p) { p = t; pvt = 8; } + t = absOp (AA95); + if (t > p) { p = t; pvt = 9; } + + /* swap pivot row with row 5 */ + if (pvt == 6) { + tmp = AA50; AA50 = AA60; AA60 = tmp; + tmp = AA51; AA51 = AA61; AA61 = tmp; + tmp = AA52; AA52 = AA62; AA62 = tmp; + tmp = AA53; AA53 = AA63; AA63 = tmp; + tmp = AA54; AA54 = AA64; AA64 = tmp; + tmp = AA55; AA55 = AA65; AA65 = tmp; + tmp = AA56; AA56 = AA66; AA66 = tmp; + tmp = AA57; AA57 = AA67; AA67 = tmp; + tmp = AA58; AA58 = AA68; AA68 = tmp; + tmp = AA59; AA59 = AA69; AA69 = tmp; + /* update permutation vector based on row swap */ + i = perm5; perm5 = perm6; perm6 = i; + } + if (pvt == 7) { + tmp = AA50; AA50 = AA70; AA70 = tmp; + tmp = AA51; AA51 = AA71; AA71 = tmp; + tmp = AA52; AA52 = AA72; AA72 = tmp; + tmp = AA53; AA53 = AA73; AA73 = tmp; + tmp = AA54; AA54 = AA74; AA74 = tmp; + tmp = AA55; AA55 = AA75; AA75 = tmp; + tmp = AA56; AA56 = AA76; AA76 = tmp; + tmp = AA57; AA57 = AA77; AA77 = tmp; + tmp = AA58; AA58 = AA78; AA78 = tmp; + tmp = AA59; AA59 = AA79; AA79 = tmp; + /* update permutation vector based on row swap */ + i = perm5; perm5 = perm7; perm7 = i; + } + if (pvt == 8) { + tmp = AA50; AA50 = AA80; AA80 = tmp; + tmp = AA51; AA51 = AA81; AA81 = tmp; + tmp = AA52; AA52 = AA82; AA82 = tmp; + tmp = AA53; AA53 = AA83; AA83 = tmp; + tmp = AA54; AA54 = AA84; AA84 = tmp; + tmp = AA55; AA55 = AA85; AA85 = tmp; + tmp = AA56; AA56 = AA86; AA86 = tmp; + tmp = AA57; AA57 = AA87; AA87 = tmp; + tmp = AA58; AA58 = AA88; AA88 = tmp; + tmp = AA59; AA59 = AA89; AA89 = tmp; + /* update permutation vector based on row swap */ + i = perm5; perm5 = perm8; perm8 = i; + } + if (pvt == 9) { + tmp = AA50; AA50 = AA90; AA90 = tmp; + tmp = AA51; AA51 = AA91; AA91 = tmp; + tmp = AA52; AA52 = AA92; AA92 = tmp; + tmp = AA53; AA53 = AA93; AA93 = tmp; + tmp = AA54; AA54 = AA94; AA94 = tmp; + tmp = AA55; AA55 = AA95; AA95 = tmp; + tmp = AA56; AA56 = AA96; AA96 = tmp; + tmp = AA57; AA57 = AA97; AA97 = tmp; + tmp = AA58; AA58 = AA98; AA98 = tmp; + tmp = AA59; AA59 = AA99; AA99 = tmp; + /* update permutation vector based on row swap */ + i = perm5; perm5 = perm9; perm9 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA55); + icol5 = perm5; + AA50 = mulOp (tmp, AA50); + AA51 = mulOp (tmp, AA51); + AA52 = mulOp (tmp, AA52); + AA53 = mulOp (tmp, AA53); + AA54 = mulOp (tmp, AA54); + AA55 = tmp; + AA56 = mulOp (tmp, AA56); + AA57 = mulOp (tmp, AA57); + AA58 = mulOp (tmp, AA58); + AA59 = mulOp (tmp, AA59); + + /* eliminate above and below current row */ + tmp = AA05; + AA00 = fmnaOp (tmp, AA50, AA00); + AA01 = fmnaOp (tmp, AA51, AA01); + AA02 = fmnaOp (tmp, AA52, AA02); + AA03 = fmnaOp (tmp, AA53, AA03); + AA04 = fmnaOp (tmp, AA54, AA04); + AA05 = mulOp (negOp(tmp), AA55); + AA06 = fmnaOp (tmp, AA56, AA06); + AA07 = fmnaOp (tmp, AA57, AA07); + AA08 = fmnaOp (tmp, AA58, AA08); + AA09 = fmnaOp (tmp, AA59, AA09); + + tmp = AA15; + AA10 = fmnaOp (tmp, AA50, AA10); + AA11 = fmnaOp (tmp, AA51, AA11); + AA12 = fmnaOp (tmp, AA52, AA12); + AA13 = fmnaOp (tmp, AA53, AA13); + AA14 = fmnaOp (tmp, AA54, AA14); + AA15 = mulOp (negOp(tmp), AA55); + AA16 = fmnaOp (tmp, AA56, AA16); + AA17 = fmnaOp (tmp, AA57, AA17); + AA18 = fmnaOp (tmp, AA58, AA18); + AA19 = fmnaOp (tmp, AA59, AA19); + + tmp = AA25; + AA20 = fmnaOp (tmp, AA50, AA20); + AA21 = fmnaOp (tmp, AA51, AA21); + AA22 = fmnaOp (tmp, AA52, AA22); + AA23 = fmnaOp (tmp, AA53, AA23); + AA24 = fmnaOp (tmp, AA54, AA24); + AA25 = mulOp (negOp(tmp), AA55); + AA26 = fmnaOp (tmp, AA56, AA26); + AA27 = fmnaOp (tmp, AA57, AA27); + AA28 = fmnaOp (tmp, AA58, AA28); + AA29 = fmnaOp (tmp, AA59, AA29); + + tmp = AA35; + AA30 = fmnaOp (tmp, AA50, AA30); + AA31 = fmnaOp (tmp, AA51, AA31); + AA32 = fmnaOp (tmp, AA52, AA32); + AA33 = fmnaOp (tmp, AA53, AA33); + AA34 = fmnaOp (tmp, AA54, AA34); + AA35 = mulOp (negOp(tmp), AA55); + AA36 = fmnaOp (tmp, AA56, AA36); + AA37 = fmnaOp (tmp, AA57, AA37); + AA38 = fmnaOp (tmp, AA58, AA38); + AA39 = fmnaOp (tmp, AA59, AA39); + + tmp = AA45; + AA40 = fmnaOp (tmp, AA50, AA40); + AA41 = fmnaOp (tmp, AA51, AA41); + AA42 = fmnaOp (tmp, AA52, AA42); + AA43 = fmnaOp (tmp, AA53, AA43); + AA44 = fmnaOp (tmp, AA54, AA44); + AA45 = mulOp (negOp(tmp), AA55); + AA46 = fmnaOp (tmp, AA56, AA46); + AA47 = fmnaOp (tmp, AA57, AA47); + AA48 = fmnaOp (tmp, AA58, AA48); + AA49 = fmnaOp (tmp, AA59, AA49); + + tmp = AA65; + AA60 = fmnaOp (tmp, AA50, AA60); + AA61 = fmnaOp (tmp, AA51, AA61); + AA62 = fmnaOp (tmp, AA52, AA62); + AA63 = fmnaOp (tmp, AA53, AA63); + AA64 = fmnaOp (tmp, AA54, AA64); + AA65 = mulOp (negOp(tmp), AA55); + AA66 = fmnaOp (tmp, AA56, AA66); + AA67 = fmnaOp (tmp, AA57, AA67); + AA68 = fmnaOp (tmp, AA58, AA68); + AA69 = fmnaOp (tmp, AA59, AA69); + + tmp = AA75; + AA70 = fmnaOp (tmp, AA50, AA70); + AA71 = fmnaOp (tmp, AA51, AA71); + AA72 = fmnaOp (tmp, AA52, AA72); + AA73 = fmnaOp (tmp, AA53, AA73); + AA74 = fmnaOp (tmp, AA54, AA74); + AA75 = mulOp (negOp(tmp), AA55); + AA76 = fmnaOp (tmp, AA56, AA76); + AA77 = fmnaOp (tmp, AA57, AA77); + AA78 = fmnaOp (tmp, AA58, AA78); + AA79 = fmnaOp (tmp, AA59, AA79); + + tmp = AA85; + AA80 = fmnaOp (tmp, AA50, AA80); + AA81 = fmnaOp (tmp, AA51, AA81); + AA82 = fmnaOp (tmp, AA52, AA82); + AA83 = fmnaOp (tmp, AA53, AA83); + AA84 = fmnaOp (tmp, AA54, AA84); + AA85 = mulOp (negOp(tmp), AA55); + AA86 = fmnaOp (tmp, AA56, AA86); + AA87 = fmnaOp (tmp, AA57, AA87); + AA88 = fmnaOp (tmp, AA58, AA88); + AA89 = fmnaOp (tmp, AA59, AA89); + + tmp = AA95; + AA90 = fmnaOp (tmp, AA50, AA90); + AA91 = fmnaOp (tmp, AA51, AA91); + AA92 = fmnaOp (tmp, AA52, AA92); + AA93 = fmnaOp (tmp, AA53, AA93); + AA94 = fmnaOp (tmp, AA54, AA94); + AA95 = mulOp (negOp(tmp), AA55); + AA96 = fmnaOp (tmp, AA56, AA96); + AA97 = fmnaOp (tmp, AA57, AA97); + AA98 = fmnaOp (tmp, AA58, AA98); + AA99 = fmnaOp (tmp, AA59, AA99); + + /****************** iteration 6 ****************/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA66); + pvt = 6; + t = absOp (AA76); + if (t > p) { p = t; pvt = 7; } + t = absOp (AA86); + if (t > p) { p = t; pvt = 8; } + t = absOp (AA96); + if (t > p) { p = t; pvt = 9; } + + /* swap pivot row with row 6 */ + if (pvt == 7) { + tmp = AA60; AA60 = AA70; AA70 = tmp; + tmp = AA61; AA61 = AA71; AA71 = tmp; + tmp = AA62; AA62 = AA72; AA72 = tmp; + tmp = AA63; AA63 = AA73; AA73 = tmp; + tmp = AA64; AA64 = AA74; AA74 = tmp; + tmp = AA65; AA65 = AA75; AA75 = tmp; + tmp = AA66; AA66 = AA76; AA76 = tmp; + tmp = AA67; AA67 = AA77; AA77 = tmp; + tmp = AA68; AA68 = AA78; AA78 = tmp; + tmp = AA69; AA69 = AA79; AA79 = tmp; + /* update permutation vector based on row swap */ + i = perm6; perm6 = perm7; perm7 = i; + } + if (pvt == 8) { + tmp = AA60; AA60 = AA80; AA80 = tmp; + tmp = AA61; AA61 = AA81; AA81 = tmp; + tmp = AA62; AA62 = AA82; AA82 = tmp; + tmp = AA63; AA63 = AA83; AA83 = tmp; + tmp = AA64; AA64 = AA84; AA84 = tmp; + tmp = AA65; AA65 = AA85; AA85 = tmp; + tmp = AA66; AA66 = AA86; AA86 = tmp; + tmp = AA67; AA67 = AA87; AA87 = tmp; + tmp = AA68; AA68 = AA88; AA88 = tmp; + tmp = AA69; AA69 = AA89; AA89 = tmp; + /* update permutation vector based on row swap */ + i = perm6; perm6 = perm8; perm8 = i; + } + if (pvt == 9) { + tmp = AA60; AA60 = AA90; AA90 = tmp; + tmp = AA61; AA61 = AA91; AA91 = tmp; + tmp = AA62; AA62 = AA92; AA92 = tmp; + tmp = AA63; AA63 = AA93; AA93 = tmp; + tmp = AA64; AA64 = AA94; AA94 = tmp; + tmp = AA65; AA65 = AA95; AA95 = tmp; + tmp = AA66; AA66 = AA96; AA96 = tmp; + tmp = AA67; AA67 = AA97; AA97 = tmp; + tmp = AA68; AA68 = AA98; AA98 = tmp; + tmp = AA69; AA69 = AA99; AA99 = tmp; + /* update permutation vector based on row swap */ + i = perm6; perm6 = perm9; perm9 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA66); + icol6 = perm6; + AA60 = mulOp (tmp, AA60); + AA61 = mulOp (tmp, AA61); + AA62 = mulOp (tmp, AA62); + AA63 = mulOp (tmp, AA63); + AA64 = mulOp (tmp, AA64); + AA65 = mulOp (tmp, AA65); + AA66 = tmp; + AA67 = mulOp (tmp, AA67); + AA68 = mulOp (tmp, AA68); + AA69 = mulOp (tmp, AA69); + + /* eliminate above and below current row */ + tmp = AA06; + AA00 = fmnaOp (tmp, AA60, AA00); + AA01 = fmnaOp (tmp, AA61, AA01); + AA02 = fmnaOp (tmp, AA62, AA02); + AA03 = fmnaOp (tmp, AA63, AA03); + AA04 = fmnaOp (tmp, AA64, AA04); + AA05 = fmnaOp (tmp, AA65, AA05); + AA06 = mulOp (negOp(tmp), AA66); + AA07 = fmnaOp (tmp, AA67, AA07); + AA08 = fmnaOp (tmp, AA68, AA08); + AA09 = fmnaOp (tmp, AA69, AA09); + + tmp = AA16; + AA10 = fmnaOp (tmp, AA60, AA10); + AA11 = fmnaOp (tmp, AA61, AA11); + AA12 = fmnaOp (tmp, AA62, AA12); + AA13 = fmnaOp (tmp, AA63, AA13); + AA14 = fmnaOp (tmp, AA64, AA14); + AA15 = fmnaOp (tmp, AA65, AA15); + AA16 = mulOp (negOp(tmp), AA66); + AA17 = fmnaOp (tmp, AA67, AA17); + AA18 = fmnaOp (tmp, AA68, AA18); + AA19 = fmnaOp (tmp, AA69, AA19); + + tmp = AA26; + AA20 = fmnaOp (tmp, AA60, AA20); + AA21 = fmnaOp (tmp, AA61, AA21); + AA22 = fmnaOp (tmp, AA62, AA22); + AA23 = fmnaOp (tmp, AA63, AA23); + AA24 = fmnaOp (tmp, AA64, AA24); + AA25 = fmnaOp (tmp, AA65, AA25); + AA26 = mulOp (negOp(tmp), AA66); + AA27 = fmnaOp (tmp, AA67, AA27); + AA28 = fmnaOp (tmp, AA68, AA28); + AA29 = fmnaOp (tmp, AA69, AA29); + + tmp = AA36; + AA30 = fmnaOp (tmp, AA60, AA30); + AA31 = fmnaOp (tmp, AA61, AA31); + AA32 = fmnaOp (tmp, AA62, AA32); + AA33 = fmnaOp (tmp, AA63, AA33); + AA34 = fmnaOp (tmp, AA64, AA34); + AA35 = fmnaOp (tmp, AA65, AA35); + AA36 = mulOp (negOp(tmp), AA66); + AA37 = fmnaOp (tmp, AA67, AA37); + AA38 = fmnaOp (tmp, AA68, AA38); + AA39 = fmnaOp (tmp, AA69, AA39); + + tmp = AA46; + AA40 = fmnaOp (tmp, AA60, AA40); + AA41 = fmnaOp (tmp, AA61, AA41); + AA42 = fmnaOp (tmp, AA62, AA42); + AA43 = fmnaOp (tmp, AA63, AA43); + AA44 = fmnaOp (tmp, AA64, AA44); + AA45 = fmnaOp (tmp, AA65, AA45); + AA46 = mulOp (negOp(tmp), AA66); + AA47 = fmnaOp (tmp, AA67, AA47); + AA48 = fmnaOp (tmp, AA68, AA48); + AA49 = fmnaOp (tmp, AA69, AA49); + + tmp = AA56; + AA50 = fmnaOp (tmp, AA60, AA50); + AA51 = fmnaOp (tmp, AA61, AA51); + AA52 = fmnaOp (tmp, AA62, AA52); + AA53 = fmnaOp (tmp, AA63, AA53); + AA54 = fmnaOp (tmp, AA64, AA54); + AA55 = fmnaOp (tmp, AA65, AA55); + AA56 = mulOp (negOp(tmp), AA66); + AA57 = fmnaOp (tmp, AA67, AA57); + AA58 = fmnaOp (tmp, AA68, AA58); + AA59 = fmnaOp (tmp, AA69, AA59); + + tmp = AA76; + AA70 = fmnaOp (tmp, AA60, AA70); + AA71 = fmnaOp (tmp, AA61, AA71); + AA72 = fmnaOp (tmp, AA62, AA72); + AA73 = fmnaOp (tmp, AA63, AA73); + AA74 = fmnaOp (tmp, AA64, AA74); + AA75 = fmnaOp (tmp, AA65, AA75); + AA76 = mulOp (negOp(tmp), AA66); + AA77 = fmnaOp (tmp, AA67, AA77); + AA78 = fmnaOp (tmp, AA68, AA78); + AA79 = fmnaOp (tmp, AA69, AA79); + + tmp = AA86; + AA80 = fmnaOp (tmp, AA60, AA80); + AA81 = fmnaOp (tmp, AA61, AA81); + AA82 = fmnaOp (tmp, AA62, AA82); + AA83 = fmnaOp (tmp, AA63, AA83); + AA84 = fmnaOp (tmp, AA64, AA84); + AA85 = fmnaOp (tmp, AA65, AA85); + AA86 = mulOp (negOp(tmp), AA66); + AA87 = fmnaOp (tmp, AA67, AA87); + AA88 = fmnaOp (tmp, AA68, AA88); + AA89 = fmnaOp (tmp, AA69, AA89); + + tmp = AA96; + AA90 = fmnaOp (tmp, AA60, AA90); + AA91 = fmnaOp (tmp, AA61, AA91); + AA92 = fmnaOp (tmp, AA62, AA92); + AA93 = fmnaOp (tmp, AA63, AA93); + AA94 = fmnaOp (tmp, AA64, AA94); + AA95 = fmnaOp (tmp, AA65, AA95); + AA96 = mulOp (negOp(tmp), AA66); + AA97 = fmnaOp (tmp, AA67, AA97); + AA98 = fmnaOp (tmp, AA68, AA98); + AA99 = fmnaOp (tmp, AA69, AA99); + + /****************** iteration 7 ****************/ + +#if USE_PIVOTING + /* search pivot row */ + p = absOp (AA77); + pvt = 7; + t = absOp (AA87); + if (t > p) { p = t; pvt = 8; } + t = absOp (AA97); + if (t > p) { p = t; pvt = 9; } + + /* swap pivot row with row 7 */ + if (pvt == 8) { + tmp = AA70; AA70 = AA80; AA80 = tmp; + tmp = AA71; AA71 = AA81; AA81 = tmp; + tmp = AA72; AA72 = AA82; AA82 = tmp; + tmp = AA73; AA73 = AA83; AA83 = tmp; + tmp = AA74; AA74 = AA84; AA84 = tmp; + tmp = AA75; AA75 = AA85; AA85 = tmp; + tmp = AA76; AA76 = AA86; AA86 = tmp; + tmp = AA77; AA77 = AA87; AA87 = tmp; + tmp = AA78; AA78 = AA88; AA88 = tmp; + tmp = AA79; AA79 = AA89; AA89 = tmp; + /* update permutation vector based on row swap */ + i = perm7; perm7 = perm8; perm8 = i; + } + if (pvt == 9) { + tmp = AA70; AA70 = AA90; AA90 = tmp; + tmp = AA71; AA71 = AA91; AA91 = tmp; + tmp = AA72; AA72 = AA92; AA92 = tmp; + tmp = AA73; AA73 = AA93; AA93 = tmp; + tmp = AA74; AA74 = AA94; AA94 = tmp; + tmp = AA75; AA75 = AA95; AA95 = tmp; + tmp = AA76; AA76 = AA96; AA96 = tmp; + tmp = AA77; AA77 = AA97; AA97 = tmp; + tmp = AA78; AA78 = AA98; AA98 = tmp; + tmp = AA79; AA79 = AA99; AA99 = tmp; + /* update permutation vector based on row swap */ + i = perm7; perm7 = perm9; perm9 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA77); + icol7 = perm7; + AA70 = mulOp (tmp, AA70); + AA71 = mulOp (tmp, AA71); + AA72 = mulOp (tmp, AA72); + AA73 = mulOp (tmp, AA73); + AA74 = mulOp (tmp, AA74); + AA75 = mulOp (tmp, AA75); + AA76 = mulOp (tmp, AA76); + AA77 = tmp; + AA78 = mulOp (tmp, AA78); + AA79 = mulOp (tmp, AA79); + + /* eliminate above and below current row */ + tmp = AA07; + AA00 = fmnaOp (tmp, AA70, AA00); + AA01 = fmnaOp (tmp, AA71, AA01); + AA02 = fmnaOp (tmp, AA72, AA02); + AA03 = fmnaOp (tmp, AA73, AA03); + AA04 = fmnaOp (tmp, AA74, AA04); + AA05 = fmnaOp (tmp, AA75, AA05); + AA06 = fmnaOp (tmp, AA76, AA06); + AA07 = mulOp (negOp(tmp), AA77); + AA08 = fmnaOp (tmp, AA78, AA08); + AA09 = fmnaOp (tmp, AA79, AA09); + + tmp = AA17; + AA10 = fmnaOp (tmp, AA70, AA10); + AA11 = fmnaOp (tmp, AA71, AA11); + AA12 = fmnaOp (tmp, AA72, AA12); + AA13 = fmnaOp (tmp, AA73, AA13); + AA14 = fmnaOp (tmp, AA74, AA14); + AA15 = fmnaOp (tmp, AA75, AA15); + AA16 = fmnaOp (tmp, AA76, AA16); + AA17 = mulOp (negOp(tmp), AA77); + AA18 = fmnaOp (tmp, AA78, AA18); + AA19 = fmnaOp (tmp, AA79, AA19); + + tmp = AA27; + AA20 = fmnaOp (tmp, AA70, AA20); + AA21 = fmnaOp (tmp, AA71, AA21); + AA22 = fmnaOp (tmp, AA72, AA22); + AA23 = fmnaOp (tmp, AA73, AA23); + AA24 = fmnaOp (tmp, AA74, AA24); + AA25 = fmnaOp (tmp, AA75, AA25); + AA26 = fmnaOp (tmp, AA76, AA26); + AA27 = mulOp (negOp(tmp), AA77); + AA28 = fmnaOp (tmp, AA78, AA28); + AA29 = fmnaOp (tmp, AA79, AA29); + + tmp = AA37; + AA30 = fmnaOp (tmp, AA70, AA30); + AA31 = fmnaOp (tmp, AA71, AA31); + AA32 = fmnaOp (tmp, AA72, AA32); + AA33 = fmnaOp (tmp, AA73, AA33); + AA34 = fmnaOp (tmp, AA74, AA34); + AA35 = fmnaOp (tmp, AA75, AA35); + AA36 = fmnaOp (tmp, AA76, AA36); + AA37 = mulOp (negOp(tmp), AA77); + AA38 = fmnaOp (tmp, AA78, AA38); + AA39 = fmnaOp (tmp, AA79, AA39); + + tmp = AA47; + AA40 = fmnaOp (tmp, AA70, AA40); + AA41 = fmnaOp (tmp, AA71, AA41); + AA42 = fmnaOp (tmp, AA72, AA42); + AA43 = fmnaOp (tmp, AA73, AA43); + AA44 = fmnaOp (tmp, AA74, AA44); + AA45 = fmnaOp (tmp, AA75, AA45); + AA46 = fmnaOp (tmp, AA76, AA46); + AA47 = mulOp (negOp(tmp), AA77); + AA48 = fmnaOp (tmp, AA78, AA48); + AA49 = fmnaOp (tmp, AA79, AA49); + + tmp = AA57; + AA50 = fmnaOp (tmp, AA70, AA50); + AA51 = fmnaOp (tmp, AA71, AA51); + AA52 = fmnaOp (tmp, AA72, AA52); + AA53 = fmnaOp (tmp, AA73, AA53); + AA54 = fmnaOp (tmp, AA74, AA54); + AA55 = fmnaOp (tmp, AA75, AA55); + AA56 = fmnaOp (tmp, AA76, AA56); + AA57 = mulOp (negOp(tmp), AA77); + AA58 = fmnaOp (tmp, AA78, AA58); + AA59 = fmnaOp (tmp, AA79, AA59); + + tmp = AA67; + AA60 = fmnaOp (tmp, AA70, AA60); + AA61 = fmnaOp (tmp, AA71, AA61); + AA62 = fmnaOp (tmp, AA72, AA62); + AA63 = fmnaOp (tmp, AA73, AA63); + AA64 = fmnaOp (tmp, AA74, AA64); + AA65 = fmnaOp (tmp, AA75, AA65); + AA66 = fmnaOp (tmp, AA76, AA66); + AA67 = mulOp (negOp(tmp), AA77); + AA68 = fmnaOp (tmp, AA78, AA68); + AA69 = fmnaOp (tmp, AA79, AA69); + + tmp = AA87; + AA80 = fmnaOp (tmp, AA70, AA80); + AA81 = fmnaOp (tmp, AA71, AA81); + AA82 = fmnaOp (tmp, AA72, AA82); + AA83 = fmnaOp (tmp, AA73, AA83); + AA84 = fmnaOp (tmp, AA74, AA84); + AA85 = fmnaOp (tmp, AA75, AA85); + AA86 = fmnaOp (tmp, AA76, AA86); + AA87 = mulOp (negOp(tmp), AA77); + AA88 = fmnaOp (tmp, AA78, AA88); + AA89 = fmnaOp (tmp, AA79, AA89); + + tmp = AA97; + AA90 = fmnaOp (tmp, AA70, AA90); + AA91 = fmnaOp (tmp, AA71, AA91); + AA92 = fmnaOp (tmp, AA72, AA92); + AA93 = fmnaOp (tmp, AA73, AA93); + AA94 = fmnaOp (tmp, AA74, AA94); + AA95 = fmnaOp (tmp, AA75, AA95); + AA96 = fmnaOp (tmp, AA76, AA96); + AA97 = mulOp (negOp(tmp), AA77); + AA98 = fmnaOp (tmp, AA78, AA98); + AA99 = fmnaOp (tmp, AA79, AA99); + + /****************** iteration 8 ****************/ + + #if USE_PIVOTING + /* search pivot row */ + p = absOp (AA88); + pvt = 8; + t = absOp (AA98); + if (t > p) { p = t; pvt = 9; } + + /* swap pivot row with row 8 */ + if (pvt == 9) { + tmp = AA80; AA80 = AA90; AA90 = tmp; + tmp = AA81; AA81 = AA91; AA91 = tmp; + tmp = AA82; AA82 = AA92; AA92 = tmp; + tmp = AA83; AA83 = AA93; AA93 = tmp; + tmp = AA84; AA84 = AA94; AA94 = tmp; + tmp = AA85; AA85 = AA95; AA95 = tmp; + tmp = AA86; AA86 = AA96; AA96 = tmp; + tmp = AA87; AA87 = AA97; AA97 = tmp; + tmp = AA88; AA88 = AA98; AA98 = tmp; + tmp = AA89; AA89 = AA99; AA99 = tmp; + /* update permutation vector based on row swap */ + i = perm8; perm8 = perm9; perm9 = i; + } +#endif // USE_PIVOTING + + /* scale current row */ + tmp = rcpOp (AA88); + icol8 = perm8; + AA80 = mulOp (tmp, AA80); + AA81 = mulOp (tmp, AA81); + AA82 = mulOp (tmp, AA82); + AA83 = mulOp (tmp, AA83); + AA84 = mulOp (tmp, AA84); + AA85 = mulOp (tmp, AA85); + AA86 = mulOp (tmp, AA86); + AA87 = mulOp (tmp, AA87); + AA88 = tmp; + AA89 = mulOp (tmp, AA89); + + /* eliminate above and below current row */ + tmp = AA08; + AA00 = fmnaOp (tmp, AA80, AA00); + AA01 = fmnaOp (tmp, AA81, AA01); + AA02 = fmnaOp (tmp, AA82, AA02); + AA03 = fmnaOp (tmp, AA83, AA03); + AA04 = fmnaOp (tmp, AA84, AA04); + AA05 = fmnaOp (tmp, AA85, AA05); + AA06 = fmnaOp (tmp, AA86, AA06); + AA07 = fmnaOp (tmp, AA87, AA07); + AA08 = mulOp (negOp(tmp), AA88); + AA09 = fmnaOp (tmp, AA89, AA09); + + tmp = AA18; + AA10 = fmnaOp (tmp, AA80, AA10); + AA11 = fmnaOp (tmp, AA81, AA11); + AA12 = fmnaOp (tmp, AA82, AA12); + AA13 = fmnaOp (tmp, AA83, AA13); + AA14 = fmnaOp (tmp, AA84, AA14); + AA15 = fmnaOp (tmp, AA85, AA15); + AA16 = fmnaOp (tmp, AA86, AA16); + AA17 = fmnaOp (tmp, AA87, AA17); + AA18 = mulOp (negOp(tmp), AA88); + AA19 = fmnaOp (tmp, AA89, AA19); + + tmp = AA28; + AA20 = fmnaOp (tmp, AA80, AA20); + AA21 = fmnaOp (tmp, AA81, AA21); + AA22 = fmnaOp (tmp, AA82, AA22); + AA23 = fmnaOp (tmp, AA83, AA23); + AA24 = fmnaOp (tmp, AA84, AA24); + AA25 = fmnaOp (tmp, AA85, AA25); + AA26 = fmnaOp (tmp, AA86, AA26); + AA27 = fmnaOp (tmp, AA87, AA27); + AA28 = mulOp (negOp(tmp), AA88); + AA29 = fmnaOp (tmp, AA89, AA29); + + tmp = AA38; + AA30 = fmnaOp (tmp, AA80, AA30); + AA31 = fmnaOp (tmp, AA81, AA31); + AA32 = fmnaOp (tmp, AA82, AA32); + AA33 = fmnaOp (tmp, AA83, AA33); + AA34 = fmnaOp (tmp, AA84, AA34); + AA35 = fmnaOp (tmp, AA85, AA35); + AA36 = fmnaOp (tmp, AA86, AA36); + AA37 = fmnaOp (tmp, AA87, AA37); + AA38 = mulOp (negOp(tmp), AA88); + AA39 = fmnaOp (tmp, AA89, AA39); + + tmp = AA48; + AA40 = fmnaOp (tmp, AA80, AA40); + AA41 = fmnaOp (tmp, AA81, AA41); + AA42 = fmnaOp (tmp, AA82, AA42); + AA43 = fmnaOp (tmp, AA83, AA43); + AA44 = fmnaOp (tmp, AA84, AA44); + AA45 = fmnaOp (tmp, AA85, AA45); + AA46 = fmnaOp (tmp, AA86, AA46); + AA47 = fmnaOp (tmp, AA87, AA47); + AA48 = mulOp (negOp(tmp), AA88); + AA49 = fmnaOp (tmp, AA89, AA49); + + tmp = AA58; + AA50 = fmnaOp (tmp, AA80, AA50); + AA51 = fmnaOp (tmp, AA81, AA51); + AA52 = fmnaOp (tmp, AA82, AA52); + AA53 = fmnaOp (tmp, AA83, AA53); + AA54 = fmnaOp (tmp, AA84, AA54); + AA55 = fmnaOp (tmp, AA85, AA55); + AA56 = fmnaOp (tmp, AA86, AA56); + AA57 = fmnaOp (tmp, AA87, AA57); + AA58 = mulOp (negOp(tmp), AA88); + AA59 = fmnaOp (tmp, AA89, AA59); + + tmp = AA68; + AA60 = fmnaOp (tmp, AA80, AA60); + AA61 = fmnaOp (tmp, AA81, AA61); + AA62 = fmnaOp (tmp, AA82, AA62); + AA63 = fmnaOp (tmp, AA83, AA63); + AA64 = fmnaOp (tmp, AA84, AA64); + AA65 = fmnaOp (tmp, AA85, AA65); + AA66 = fmnaOp (tmp, AA86, AA66); + AA67 = fmnaOp (tmp, AA87, AA67); + AA68 = mulOp (negOp(tmp), AA88); + AA69 = fmnaOp (tmp, AA89, AA69); + + tmp = AA78; + AA70 = fmnaOp (tmp, AA80, AA70); + AA71 = fmnaOp (tmp, AA81, AA71); + AA72 = fmnaOp (tmp, AA82, AA72); + AA73 = fmnaOp (tmp, AA83, AA73); + AA74 = fmnaOp (tmp, AA84, AA74); + AA75 = fmnaOp (tmp, AA85, AA75); + AA76 = fmnaOp (tmp, AA86, AA76); + AA77 = fmnaOp (tmp, AA87, AA77); + AA78 = mulOp (negOp(tmp), AA88); + AA79 = fmnaOp (tmp, AA89, AA79); + + tmp = AA98; + AA90 = fmnaOp (tmp, AA80, AA90); + AA91 = fmnaOp (tmp, AA81, AA91); + AA92 = fmnaOp (tmp, AA82, AA92); + AA93 = fmnaOp (tmp, AA83, AA93); + AA94 = fmnaOp (tmp, AA84, AA94); + AA95 = fmnaOp (tmp, AA85, AA95); + AA96 = fmnaOp (tmp, AA86, AA96); + AA97 = fmnaOp (tmp, AA87, AA97); + AA98 = mulOp (negOp(tmp), AA88); + AA99 = fmnaOp (tmp, AA89, AA99); + + /****************** iteration 9 ****************/ + + /* scale current row */ + tmp = rcpOp (AA99); + icol9 = perm9; + AA90 = mulOp (tmp, AA90); + AA91 = mulOp (tmp, AA91); + AA92 = mulOp (tmp, AA92); + AA93 = mulOp (tmp, AA93); + AA94 = mulOp (tmp, AA94); + AA95 = mulOp (tmp, AA95); + AA96 = mulOp (tmp, AA96); + AA97 = mulOp (tmp, AA97); + AA98 = mulOp (tmp, AA98); + AA99 = tmp; + + /* eliminate above and below current row */ + tmp = AA09; + AA00 = fmnaOp (tmp, AA90, AA00); + AA01 = fmnaOp (tmp, AA91, AA01); + AA02 = fmnaOp (tmp, AA92, AA02); + AA03 = fmnaOp (tmp, AA93, AA03); + AA04 = fmnaOp (tmp, AA94, AA04); + AA05 = fmnaOp (tmp, AA95, AA05); + AA06 = fmnaOp (tmp, AA96, AA06); + AA07 = fmnaOp (tmp, AA97, AA07); + AA08 = fmnaOp (tmp, AA98, AA08); + AA09 = mulOp (negOp(tmp), AA99); + + tmp = AA19; + AA10 = fmnaOp (tmp, AA90, AA10); + AA11 = fmnaOp (tmp, AA91, AA11); + AA12 = fmnaOp (tmp, AA92, AA12); + AA13 = fmnaOp (tmp, AA93, AA13); + AA14 = fmnaOp (tmp, AA94, AA14); + AA15 = fmnaOp (tmp, AA95, AA15); + AA16 = fmnaOp (tmp, AA96, AA16); + AA17 = fmnaOp (tmp, AA97, AA17); + AA18 = fmnaOp (tmp, AA98, AA18); + AA19 = mulOp (negOp(tmp), AA99); + + tmp = AA29; + AA20 = fmnaOp (tmp, AA90, AA20); + AA21 = fmnaOp (tmp, AA91, AA21); + AA22 = fmnaOp (tmp, AA92, AA22); + AA23 = fmnaOp (tmp, AA93, AA23); + AA24 = fmnaOp (tmp, AA94, AA24); + AA25 = fmnaOp (tmp, AA95, AA25); + AA26 = fmnaOp (tmp, AA96, AA26); + AA27 = fmnaOp (tmp, AA97, AA27); + AA28 = fmnaOp (tmp, AA98, AA28); + AA29 = mulOp (negOp(tmp), AA99); + + tmp = AA39; + AA30 = fmnaOp (tmp, AA90, AA30); + AA31 = fmnaOp (tmp, AA91, AA31); + AA32 = fmnaOp (tmp, AA92, AA32); + AA33 = fmnaOp (tmp, AA93, AA33); + AA34 = fmnaOp (tmp, AA94, AA34); + AA35 = fmnaOp (tmp, AA95, AA35); + AA36 = fmnaOp (tmp, AA96, AA36); + AA37 = fmnaOp (tmp, AA97, AA37); + AA38 = fmnaOp (tmp, AA98, AA38); + AA39 = mulOp (negOp(tmp), AA99); + + tmp = AA49; + AA40 = fmnaOp (tmp, AA90, AA40); + AA41 = fmnaOp (tmp, AA91, AA41); + AA42 = fmnaOp (tmp, AA92, AA42); + AA43 = fmnaOp (tmp, AA93, AA43); + AA44 = fmnaOp (tmp, AA94, AA44); + AA45 = fmnaOp (tmp, AA95, AA45); + AA46 = fmnaOp (tmp, AA96, AA46); + AA47 = fmnaOp (tmp, AA97, AA47); + AA48 = fmnaOp (tmp, AA98, AA48); + AA49 = mulOp (negOp(tmp), AA99); + + tmp = AA59; + AA50 = fmnaOp (tmp, AA90, AA50); + AA51 = fmnaOp (tmp, AA91, AA51); + AA52 = fmnaOp (tmp, AA92, AA52); + AA53 = fmnaOp (tmp, AA93, AA53); + AA54 = fmnaOp (tmp, AA94, AA54); + AA55 = fmnaOp (tmp, AA95, AA55); + AA56 = fmnaOp (tmp, AA96, AA56); + AA57 = fmnaOp (tmp, AA97, AA57); + AA58 = fmnaOp (tmp, AA98, AA58); + AA59 = mulOp (negOp(tmp), AA99); + + tmp = AA69; + AA60 = fmnaOp (tmp, AA90, AA60); + AA61 = fmnaOp (tmp, AA91, AA61); + AA62 = fmnaOp (tmp, AA92, AA62); + AA63 = fmnaOp (tmp, AA93, AA63); + AA64 = fmnaOp (tmp, AA94, AA64); + AA65 = fmnaOp (tmp, AA95, AA65); + AA66 = fmnaOp (tmp, AA96, AA66); + AA67 = fmnaOp (tmp, AA97, AA67); + AA68 = fmnaOp (tmp, AA98, AA68); + AA69 = mulOp (negOp(tmp), AA99); + + tmp = AA79; + AA70 = fmnaOp (tmp, AA90, AA70); + AA71 = fmnaOp (tmp, AA91, AA71); + AA72 = fmnaOp (tmp, AA92, AA72); + AA73 = fmnaOp (tmp, AA93, AA73); + AA74 = fmnaOp (tmp, AA94, AA74); + AA75 = fmnaOp (tmp, AA95, AA75); + AA76 = fmnaOp (tmp, AA96, AA76); + AA77 = fmnaOp (tmp, AA97, AA77); + AA78 = fmnaOp (tmp, AA98, AA78); + AA79 = mulOp (negOp(tmp), AA99); + + tmp = AA89; + AA80 = fmnaOp (tmp, AA90, AA80); + AA81 = fmnaOp (tmp, AA91, AA81); + AA82 = fmnaOp (tmp, AA92, AA82); + AA83 = fmnaOp (tmp, AA93, AA83); + AA84 = fmnaOp (tmp, AA94, AA84); + AA85 = fmnaOp (tmp, AA95, AA85); + AA86 = fmnaOp (tmp, AA96, AA86); + AA87 = fmnaOp (tmp, AA97, AA87); + AA88 = fmnaOp (tmp, AA98, AA88); + AA89 = mulOp (negOp(tmp), AA99); + + /* sort columns into the correct order */ + Ainv(0,icol0) = AA00; + Ainv(1,icol0) = AA10; + Ainv(2,icol0) = AA20; + Ainv(3,icol0) = AA30; + Ainv(4,icol0) = AA40; + Ainv(5,icol0) = AA50; + Ainv(6,icol0) = AA60; + Ainv(7,icol0) = AA70; + Ainv(8,icol0) = AA80; + Ainv(9,icol0) = AA90; + Ainv(0,icol1) = AA01; + Ainv(1,icol1) = AA11; + Ainv(2,icol1) = AA21; + Ainv(3,icol1) = AA31; + Ainv(4,icol1) = AA41; + Ainv(5,icol1) = AA51; + Ainv(6,icol1) = AA61; + Ainv(7,icol1) = AA71; + Ainv(8,icol1) = AA81; + Ainv(9,icol1) = AA91; + Ainv(0,icol2) = AA02; + Ainv(1,icol2) = AA12; + Ainv(2,icol2) = AA22; + Ainv(3,icol2) = AA32; + Ainv(4,icol2) = AA42; + Ainv(5,icol2) = AA52; + Ainv(6,icol2) = AA62; + Ainv(7,icol2) = AA72; + Ainv(8,icol2) = AA82; + Ainv(9,icol2) = AA92; + Ainv(0,icol3) = AA03; + Ainv(1,icol3) = AA13; + Ainv(2,icol3) = AA23; + Ainv(3,icol3) = AA33; + Ainv(4,icol3) = AA43; + Ainv(5,icol3) = AA53; + Ainv(6,icol3) = AA63; + Ainv(7,icol3) = AA73; + Ainv(8,icol3) = AA83; + Ainv(9,icol3) = AA93; + Ainv(0,icol4) = AA04; + Ainv(1,icol4) = AA14; + Ainv(2,icol4) = AA24; + Ainv(3,icol4) = AA34; + Ainv(4,icol4) = AA44; + Ainv(5,icol4) = AA54; + Ainv(6,icol4) = AA64; + Ainv(7,icol4) = AA74; + Ainv(8,icol4) = AA84; + Ainv(9,icol4) = AA94; + Ainv(0,icol5) = AA05; + Ainv(1,icol5) = AA15; + Ainv(2,icol5) = AA25; + Ainv(3,icol5) = AA35; + Ainv(4,icol5) = AA45; + Ainv(5,icol5) = AA55; + Ainv(6,icol5) = AA65; + Ainv(7,icol5) = AA75; + Ainv(8,icol5) = AA85; + Ainv(9,icol5) = AA95; + Ainv(0,icol6) = AA06; + Ainv(1,icol6) = AA16; + Ainv(2,icol6) = AA26; + Ainv(3,icol6) = AA36; + Ainv(4,icol6) = AA46; + Ainv(5,icol6) = AA56; + Ainv(6,icol6) = AA66; + Ainv(7,icol6) = AA76; + Ainv(8,icol6) = AA86; + Ainv(9,icol6) = AA96; + Ainv(0,icol7) = AA07; + Ainv(1,icol7) = AA17; + Ainv(2,icol7) = AA27; + Ainv(3,icol7) = AA37; + Ainv(4,icol7) = AA47; + Ainv(5,icol7) = AA57; + Ainv(6,icol7) = AA67; + Ainv(7,icol7) = AA77; + Ainv(8,icol7) = AA87; + Ainv(9,icol7) = AA97; + Ainv(0,icol8) = AA08; + Ainv(1,icol8) = AA18; + Ainv(2,icol8) = AA28; + Ainv(3,icol8) = AA38; + Ainv(4,icol8) = AA48; + Ainv(5,icol8) = AA58; + Ainv(6,icol8) = AA68; + Ainv(7,icol8) = AA78; + Ainv(8,icol8) = AA88; + Ainv(9,icol8) = AA98; + Ainv(0,icol9) = AA09; + Ainv(1,icol9) = AA19; + Ainv(2,icol9) = AA29; + Ainv(3,icol9) = AA39; + Ainv(4,icol9) = AA49; + Ainv(5,icol9) = AA59; + Ainv(6,icol9) = AA69; + Ainv(7,icol9) = AA79; + Ainv(8,icol9) = AA89; + Ainv(9,icol9) = AA99; + } + } /* if (!isDoubleComplex()) */ +} + +extern __shared__ double2 shmem[]; + +template +__global__ void +__launch_bounds__ (config::gje3MaxThrds, config::gje3MinBlks) +matinv_gje3 (const T *A, T *Ainv, int N, int batch) +{ + T *As = (T*)shmem; + typename config::absValType *Val = + (typename config::absValType *)(As + (N+pad) * N); + int *Loc = (int*)(Val + pivot_thrds); + int *icol = (int*)(Loc + pivot_thrds); + int *perm = (int*)(icol + N); + T diagRcp; + const int ofs = pad; + const int tx = threadIdx.x; + const int ty = threadIdx.y; + const int blkNum = blockIdx.y * gridDim.x + blockIdx.x; + + if (blkNum >= batch) return; + + A += blkNum * N * N; + Ainv += blkNum * N * N; + + /* Load matrix into shared memory */ + for (int i = tx; i < N; i += blockDim.x) { + As(i,ty) = A[ty * N + i]; + } + /* initialize row permutation vector */ + if (tx == 0) perm[ty] = ty; + + int j = 0; + do { + /* Look for pivot */ + __syncthreads(); + if ((tx == 0) && (ty < pivot_thrds)) { + typename config::absValType val0 = absOp (As(j,j)); + int loc0 = j; + int i = j + 1 + ty; + T *dp = &As(i,j); + const int incr = &As(pivot_thrds,0)-&As(0,0); + while (i < N) { + typename config::absValType vali = absOp (*dp); + if (val0 < vali) { + val0 = vali; + loc0 = i; + } + dp += incr; + i += pivot_thrds; + } + Loc[ty] = loc0; + if (pivot_thrds > 1) Val[ty] = val0; + } + + /* Swap current row with pivot */ + __syncthreads(); + if (tx == 0) { + T tmp; + int it; + int Pl = Loc[0]; + if (pivot_thrds > 1) { + typename config::absValType val = Val[0]; + int i = 1; + for (; i < (pivot_thrds-1); i++) { + if (Val[i] > val) { + Pl = Loc[i]; + val = Val[i]; + } + } + if (Val[i] > val) { + Pl = Loc[i]; + } + } + tmp = As(Pl,ty); + As(Pl,ty) = As(j,ty); + As(j,ty) = tmp; + /* update permutation vector based on row swap */ + if (ty == j) { + it = perm[Pl]; + perm[Pl] = perm[j]; + perm[j] = it; + } + } + + /* scale current row, except current column */ + __syncthreads(); + diagRcp = rcpOp (As(j,j)); + if ((tx == 0) && !(ty == j)) { + As(j,ty) = mulOp (As(j,ty), diagRcp); + } + + /* update above and below current row, except current column */ + __syncthreads(); + for (int i = tx; i < N; i += blockDim.x) { + if ((i != j) && !(ty == j)) { + As(i,ty) = fmnaOp (As(i,j), As(j,ty), As(i,ty)); + } + } + + /* update current column, and column permutation vector */ + __syncthreads(); + if (tx == 0) { + As(ty,j) = (ty == j) ? diagRcp : negOp (mulOp (As(ty,j), diagRcp)); + if (ty == j) { + icol[j] = perm[j]; + } + } + + j++; + } while (j < N); + + __syncthreads(); + for (int i = tx; i < N; i += blockDim.x) { + Ainv[icol[ty] * N + i] = As(i,ty); + } +} + +template +int matinv_gje3 (const T *A_d, T *Ainv_d, int n, int batch, cudaStream_t stream) +{ + typedef void (* func)(const T *A_d, T *Ainv_d, int n, int batch); + + /* static */ int padding[110] = { + config::gje3Pad_00, config::gje3Pad_01, + config::gje3Pad_02, config::gje3Pad_03, + config::gje3Pad_04, config::gje3Pad_05, + config::gje3Pad_06, config::gje3Pad_07, + config::gje3Pad_08, config::gje3Pad_09, + config::gje3Pad_10, config::gje3Pad_11, + config::gje3Pad_12, config::gje3Pad_13, + config::gje3Pad_14, config::gje3Pad_15, + config::gje3Pad_16, config::gje3Pad_17, + config::gje3Pad_18, config::gje3Pad_19, + config::gje3Pad_20, config::gje3Pad_21, + config::gje3Pad_22, config::gje3Pad_23, + config::gje3Pad_24, config::gje3Pad_25, + config::gje3Pad_26, config::gje3Pad_27, + config::gje3Pad_28, config::gje3Pad_29, + config::gje3Pad_30, config::gje3Pad_31, + config::gje3Pad_32, config::gje3Pad_33, + config::gje3Pad_34, config::gje3Pad_35, + config::gje3Pad_36, config::gje3Pad_37, + config::gje3Pad_38, config::gje3Pad_39, + config::gje3Pad_40, config::gje3Pad_41, + config::gje3Pad_42, config::gje3Pad_43, + config::gje3Pad_44, config::gje3Pad_45, + config::gje3Pad_46, config::gje3Pad_47, + config::gje3Pad_48, config::gje3Pad_49, + config::gje3Pad_50, config::gje3Pad_51, + config::gje3Pad_52, config::gje3Pad_53, + config::gje3Pad_54, config::gje3Pad_55, + config::gje3Pad_56, config::gje3Pad_57, + config::gje3Pad_58, config::gje3Pad_59, + config::gje3Pad_60, config::gje3Pad_61, + config::gje3Pad_62, config::gje3Pad_63, + config::gje3Pad_64, config::gje3Pad_65, + config::gje3Pad_66, config::gje3Pad_67, + config::gje3Pad_68, config::gje3Pad_69, + config::gje3Pad_70, config::gje3Pad_71, + config::gje3Pad_72, config::gje3Pad_73, + config::gje3Pad_74, config::gje3Pad_75, + config::gje3Pad_76, config::gje3Pad_77, + config::gje3Pad_78, config::gje3Pad_79, + config::gje3Pad_80, config::gje3Pad_81, + config::gje3Pad_82, config::gje3Pad_83, + config::gje3Pad_84, config::gje3Pad_85, + config::gje3Pad_86, config::gje3Pad_87, + config::gje3Pad_88, config::gje3Pad_89, + config::gje3Pad_90, config::gje3Pad_91, + config::gje3Pad_92, config::gje3Pad_93, + config::gje3Pad_94, config::gje3Pad_95, + config::gje3Pad_96, config::gje3Pad_97, + config::gje3Pad_98, config::gje3Pad_99, + config::gje3Pad_100,config::gje3Pad_101, + config::gje3Pad_102,config::gje3Pad_103, + config::gje3Pad_104,config::gje3Pad_105, + config::gje3Pad_106,config::gje3Pad_107, + config::gje3Pad_108,config::gje3Pad_109 + }; + /* static */ int dimX[110] = { + config::gje3DimX_00, config::gje3DimX_01, + config::gje3DimX_02, config::gje3DimX_03, + config::gje3DimX_04, config::gje3DimX_05, + config::gje3DimX_06, config::gje3DimX_07, + config::gje3DimX_08, config::gje3DimX_09, + config::gje3DimX_10, config::gje3DimX_11, + config::gje3DimX_12, config::gje3DimX_13, + config::gje3DimX_14, config::gje3DimX_15, + config::gje3DimX_16, config::gje3DimX_17, + config::gje3DimX_18, config::gje3DimX_19, + config::gje3DimX_20, config::gje3DimX_21, + config::gje3DimX_22, config::gje3DimX_23, + config::gje3DimX_24, config::gje3DimX_25, + config::gje3DimX_26, config::gje3DimX_27, + config::gje3DimX_28, config::gje3DimX_29, + config::gje3DimX_30, config::gje3DimX_31, + config::gje3DimX_32, config::gje3DimX_33, + config::gje3DimX_34, config::gje3DimX_35, + config::gje3DimX_36, config::gje3DimX_37, + config::gje3DimX_38, config::gje3DimX_39, + config::gje3DimX_40, config::gje3DimX_41, + config::gje3DimX_42, config::gje3DimX_43, + config::gje3DimX_44, config::gje3DimX_45, + config::gje3DimX_46, config::gje3DimX_47, + config::gje3DimX_48, config::gje3DimX_49, + config::gje3DimX_50, config::gje3DimX_51, + config::gje3DimX_52, config::gje3DimX_53, + config::gje3DimX_54, config::gje3DimX_55, + config::gje3DimX_56, config::gje3DimX_57, + config::gje3DimX_58, config::gje3DimX_59, + config::gje3DimX_60, config::gje3DimX_61, + config::gje3DimX_62, config::gje3DimX_63, + config::gje3DimX_64, config::gje3DimX_65, + config::gje3DimX_66, config::gje3DimX_67, + config::gje3DimX_68, config::gje3DimX_69, + config::gje3DimX_70, config::gje3DimX_71, + config::gje3DimX_72, config::gje3DimX_73, + config::gje3DimX_74, config::gje3DimX_75, + config::gje3DimX_76, config::gje3DimX_77, + config::gje3DimX_78, config::gje3DimX_79, + config::gje3DimX_80, config::gje3DimX_81, + config::gje3DimX_82, config::gje3DimX_83, + config::gje3DimX_84, config::gje3DimX_85, + config::gje3DimX_86, config::gje3DimX_87, + config::gje3DimX_88, config::gje3DimX_89, + config::gje3DimX_90, config::gje3DimX_91, + config::gje3DimX_92, config::gje3DimX_93, + config::gje3DimX_94, config::gje3DimX_95, + config::gje3DimX_96, config::gje3DimX_97, + config::gje3DimX_98, config::gje3DimX_99, + config::gje3DimX_100,config::gje3DimX_101, + config::gje3DimX_102,config::gje3DimX_103, + config::gje3DimX_104,config::gje3DimX_105, + config::gje3DimX_106,config::gje3DimX_107, + config::gje3DimX_108,config::gje3DimX_109 + }; + /* static */ int srchThrd[110] = { + config::gje3SrchThrd_00, config::gje3SrchThrd_01, + config::gje3SrchThrd_02, config::gje3SrchThrd_03, + config::gje3SrchThrd_04, config::gje3SrchThrd_05, + config::gje3SrchThrd_06, config::gje3SrchThrd_07, + config::gje3SrchThrd_08, config::gje3SrchThrd_09, + config::gje3SrchThrd_10, config::gje3SrchThrd_11, + config::gje3SrchThrd_12, config::gje3SrchThrd_13, + config::gje3SrchThrd_14, config::gje3SrchThrd_15, + config::gje3SrchThrd_16, config::gje3SrchThrd_17, + config::gje3SrchThrd_18, config::gje3SrchThrd_19, + config::gje3SrchThrd_20, config::gje3SrchThrd_21, + config::gje3SrchThrd_22, config::gje3SrchThrd_23, + config::gje3SrchThrd_24, config::gje3SrchThrd_25, + config::gje3SrchThrd_26, config::gje3SrchThrd_27, + config::gje3SrchThrd_28, config::gje3SrchThrd_29, + config::gje3SrchThrd_30, config::gje3SrchThrd_31, + config::gje3SrchThrd_32, config::gje3SrchThrd_33, + config::gje3SrchThrd_34, config::gje3SrchThrd_35, + config::gje3SrchThrd_36, config::gje3SrchThrd_37, + config::gje3SrchThrd_38, config::gje3SrchThrd_39, + config::gje3SrchThrd_40, config::gje3SrchThrd_41, + config::gje3SrchThrd_42, config::gje3SrchThrd_43, + config::gje3SrchThrd_44, config::gje3SrchThrd_45, + config::gje3SrchThrd_46, config::gje3SrchThrd_47, + config::gje3SrchThrd_48, config::gje3SrchThrd_49, + config::gje3SrchThrd_50, config::gje3SrchThrd_51, + config::gje3SrchThrd_52, config::gje3SrchThrd_53, + config::gje3SrchThrd_54, config::gje3SrchThrd_55, + config::gje3SrchThrd_56, config::gje3SrchThrd_57, + config::gje3SrchThrd_58, config::gje3SrchThrd_59, + config::gje3SrchThrd_60, config::gje3SrchThrd_61, + config::gje3SrchThrd_62, config::gje3SrchThrd_63, + config::gje3SrchThrd_64, config::gje3SrchThrd_65, + config::gje3SrchThrd_66, config::gje3SrchThrd_67, + config::gje3SrchThrd_68, config::gje3SrchThrd_69, + config::gje3SrchThrd_70, config::gje3SrchThrd_71, + config::gje3SrchThrd_72, config::gje3SrchThrd_73, + config::gje3SrchThrd_74, config::gje3SrchThrd_75, + config::gje3SrchThrd_76, config::gje3SrchThrd_77, + config::gje3SrchThrd_78, config::gje3SrchThrd_79, + config::gje3SrchThrd_80, config::gje3SrchThrd_81, + config::gje3SrchThrd_82, config::gje3SrchThrd_83, + config::gje3SrchThrd_84, config::gje3SrchThrd_85, + config::gje3SrchThrd_86, config::gje3SrchThrd_87, + config::gje3SrchThrd_88, config::gje3SrchThrd_89, + config::gje3SrchThrd_90, config::gje3SrchThrd_91, + config::gje3SrchThrd_92, config::gje3SrchThrd_93, + config::gje3SrchThrd_94, config::gje3SrchThrd_95, + config::gje3SrchThrd_96, config::gje3SrchThrd_97, + config::gje3SrchThrd_98, config::gje3SrchThrd_99, + config::gje3SrchThrd_100,config::gje3SrchThrd_101, + config::gje3SrchThrd_102,config::gje3SrchThrd_103, + config::gje3SrchThrd_104,config::gje3SrchThrd_105, + config::gje3SrchThrd_106,config::gje3SrchThrd_107, + config::gje3SrchThrd_108,config::gje3SrchThrd_109 + }; + + func pf[110] = { + 0, + 0, + matinv_gje3::gje3Pad_02, config::gje3SrchThrd_02, arch>, + matinv_gje3::gje3Pad_03, config::gje3SrchThrd_03, arch>, + matinv_gje3::gje3Pad_04, config::gje3SrchThrd_04, arch>, + matinv_gje3::gje3Pad_05, config::gje3SrchThrd_05, arch>, + matinv_gje3::gje3Pad_06, config::gje3SrchThrd_06, arch>, + matinv_gje3::gje3Pad_07, config::gje3SrchThrd_07, arch>, + matinv_gje3::gje3Pad_08, config::gje3SrchThrd_08, arch>, + matinv_gje3::gje3Pad_09, config::gje3SrchThrd_09, arch>, + matinv_gje3::gje3Pad_10, config::gje3SrchThrd_10, arch>, + matinv_gje3::gje3Pad_11, config::gje3SrchThrd_11, arch>, + matinv_gje3::gje3Pad_12, config::gje3SrchThrd_12, arch>, + matinv_gje3::gje3Pad_13, config::gje3SrchThrd_13, arch>, + matinv_gje3::gje3Pad_14, config::gje3SrchThrd_14, arch>, + matinv_gje3::gje3Pad_15, config::gje3SrchThrd_15, arch>, + matinv_gje3::gje3Pad_16, config::gje3SrchThrd_16, arch>, + matinv_gje3::gje3Pad_17, config::gje3SrchThrd_17, arch>, + matinv_gje3::gje3Pad_18, config::gje3SrchThrd_18, arch>, + matinv_gje3::gje3Pad_19, config::gje3SrchThrd_19, arch>, + matinv_gje3::gje3Pad_20, config::gje3SrchThrd_20, arch>, + matinv_gje3::gje3Pad_21, config::gje3SrchThrd_21, arch>, + matinv_gje3::gje3Pad_22, config::gje3SrchThrd_22, arch>, + matinv_gje3::gje3Pad_23, config::gje3SrchThrd_23, arch>, + matinv_gje3::gje3Pad_24, config::gje3SrchThrd_24, arch>, + matinv_gje3::gje3Pad_25, config::gje3SrchThrd_25, arch>, + matinv_gje3::gje3Pad_26, config::gje3SrchThrd_26, arch>, + matinv_gje3::gje3Pad_27, config::gje3SrchThrd_27, arch>, + matinv_gje3::gje3Pad_28, config::gje3SrchThrd_28, arch>, + matinv_gje3::gje3Pad_29, config::gje3SrchThrd_29, arch>, + matinv_gje3::gje3Pad_30, config::gje3SrchThrd_30, arch>, + matinv_gje3::gje3Pad_31, config::gje3SrchThrd_31, arch>, + matinv_gje3::gje3Pad_32, config::gje3SrchThrd_32, arch>, + matinv_gje3::gje3Pad_33, config::gje3SrchThrd_33, arch>, + matinv_gje3::gje3Pad_34, config::gje3SrchThrd_34, arch>, + matinv_gje3::gje3Pad_35, config::gje3SrchThrd_35, arch>, + matinv_gje3::gje3Pad_36, config::gje3SrchThrd_36, arch>, + matinv_gje3::gje3Pad_37, config::gje3SrchThrd_37, arch>, + matinv_gje3::gje3Pad_38, config::gje3SrchThrd_38, arch>, + matinv_gje3::gje3Pad_39, config::gje3SrchThrd_39, arch>, + matinv_gje3::gje3Pad_40, config::gje3SrchThrd_40, arch>, + matinv_gje3::gje3Pad_41, config::gje3SrchThrd_41, arch>, + matinv_gje3::gje3Pad_42, config::gje3SrchThrd_42, arch>, + matinv_gje3::gje3Pad_43, config::gje3SrchThrd_43, arch>, + matinv_gje3::gje3Pad_44, config::gje3SrchThrd_44, arch>, + matinv_gje3::gje3Pad_45, config::gje3SrchThrd_45, arch>, + matinv_gje3::gje3Pad_46, config::gje3SrchThrd_46, arch>, + matinv_gje3::gje3Pad_47, config::gje3SrchThrd_47, arch>, + matinv_gje3::gje3Pad_48, config::gje3SrchThrd_48, arch>, + matinv_gje3::gje3Pad_49, config::gje3SrchThrd_49, arch>, + matinv_gje3::gje3Pad_50, config::gje3SrchThrd_50, arch>, + matinv_gje3::gje3Pad_51, config::gje3SrchThrd_51, arch>, + matinv_gje3::gje3Pad_52, config::gje3SrchThrd_52, arch>, + matinv_gje3::gje3Pad_53, config::gje3SrchThrd_53, arch>, + matinv_gje3::gje3Pad_54, config::gje3SrchThrd_54, arch>, + matinv_gje3::gje3Pad_55, config::gje3SrchThrd_55, arch>, + matinv_gje3::gje3Pad_56, config::gje3SrchThrd_56, arch>, + matinv_gje3::gje3Pad_57, config::gje3SrchThrd_57, arch>, + matinv_gje3::gje3Pad_58, config::gje3SrchThrd_58, arch>, + matinv_gje3::gje3Pad_59, config::gje3SrchThrd_59, arch>, + matinv_gje3::gje3Pad_60, config::gje3SrchThrd_60, arch>, + matinv_gje3::gje3Pad_61, config::gje3SrchThrd_61, arch>, + matinv_gje3::gje3Pad_62, config::gje3SrchThrd_62, arch>, + matinv_gje3::gje3Pad_63, config::gje3SrchThrd_63, arch>, + matinv_gje3::gje3Pad_64, config::gje3SrchThrd_64, arch>, + matinv_gje3::gje3Pad_65, config::gje3SrchThrd_65, arch>, + matinv_gje3::gje3Pad_66, config::gje3SrchThrd_66, arch>, + matinv_gje3::gje3Pad_67, config::gje3SrchThrd_67, arch>, + matinv_gje3::gje3Pad_68, config::gje3SrchThrd_68, arch>, + matinv_gje3::gje3Pad_69, config::gje3SrchThrd_69, arch>, + matinv_gje3::gje3Pad_70, config::gje3SrchThrd_70, arch>, + matinv_gje3::gje3Pad_71, config::gje3SrchThrd_71, arch>, + matinv_gje3::gje3Pad_72, config::gje3SrchThrd_72, arch>, + matinv_gje3::gje3Pad_73, config::gje3SrchThrd_73, arch>, + matinv_gje3::gje3Pad_74, config::gje3SrchThrd_74, arch>, + matinv_gje3::gje3Pad_75, config::gje3SrchThrd_75, arch>, + matinv_gje3::gje3Pad_76, config::gje3SrchThrd_76, arch>, + matinv_gje3::gje3Pad_77, config::gje3SrchThrd_77, arch>, + matinv_gje3::gje3Pad_78, config::gje3SrchThrd_78, arch>, + matinv_gje3::gje3Pad_79, config::gje3SrchThrd_79, arch>, + matinv_gje3::gje3Pad_80, config::gje3SrchThrd_80, arch>, + matinv_gje3::gje3Pad_81, config::gje3SrchThrd_81, arch>, + matinv_gje3::gje3Pad_82, config::gje3SrchThrd_82, arch>, + matinv_gje3::gje3Pad_83, config::gje3SrchThrd_83, arch>, + matinv_gje3::gje3Pad_84, config::gje3SrchThrd_84, arch>, + matinv_gje3::gje3Pad_85, config::gje3SrchThrd_85, arch>, + matinv_gje3::gje3Pad_86, config::gje3SrchThrd_86, arch>, + matinv_gje3::gje3Pad_87, config::gje3SrchThrd_87, arch>, + matinv_gje3::gje3Pad_88, config::gje3SrchThrd_88, arch>, + matinv_gje3::gje3Pad_89, config::gje3SrchThrd_89, arch>, + matinv_gje3::gje3Pad_90, config::gje3SrchThrd_90, arch>, + matinv_gje3::gje3Pad_91, config::gje3SrchThrd_91, arch>, + matinv_gje3::gje3Pad_92, config::gje3SrchThrd_92, arch>, + matinv_gje3::gje3Pad_93, config::gje3SrchThrd_93, arch>, + matinv_gje3::gje3Pad_94, config::gje3SrchThrd_94, arch>, + matinv_gje3::gje3Pad_95, config::gje3SrchThrd_95, arch>, + matinv_gje3::gje3Pad_96, config::gje3SrchThrd_96, arch>, + matinv_gje3::gje3Pad_97, config::gje3SrchThrd_97, arch>, + matinv_gje3::gje3Pad_98, config::gje3SrchThrd_98, arch>, + matinv_gje3::gje3Pad_99, config::gje3SrchThrd_99, arch>, + matinv_gje3::gje3Pad_100,config::gje3SrchThrd_100,arch>, + matinv_gje3::gje3Pad_101,config::gje3SrchThrd_101,arch>, + matinv_gje3::gje3Pad_102,config::gje3SrchThrd_102,arch>, + matinv_gje3::gje3Pad_103,config::gje3SrchThrd_103,arch>, + matinv_gje3::gje3Pad_104,config::gje3SrchThrd_104,arch>, + matinv_gje3::gje3Pad_105,config::gje3SrchThrd_105,arch>, + matinv_gje3::gje3Pad_106,config::gje3SrchThrd_106,arch>, + matinv_gje3::gje3Pad_107,config::gje3SrchThrd_107,arch>, + matinv_gje3::gje3Pad_108,config::gje3SrchThrd_108,arch>, + matinv_gje3::gje3Pad_109,config::gje3SrchThrd_109,arch>, + }; + + if (n < config::gje3MinDim || n > config::gje3MaxDim || + batch < 1) { + + printf (" batch = %d \n", batch ); + printf (" %d, min dim = %d \n", n, config::gje3MinDim ); + printf (" %d, max dim = %d \n", n, config::gje3MaxDim ); + + return -1; + } + + dim3 dimBlock(dimX[n], n); + dim3 dimGrid; + if (batch <= GRID_DIM_LIMIT) { + dimGrid.x = batch; + dimGrid.y = 1; + dimGrid.z = 1; + } else { + dimGrid.x = GRID_DIM_LIMIT; + dimGrid.y = (batch + GRID_DIM_LIMIT-1) / GRID_DIM_LIMIT; + dimGrid.z = 1; + } + int smem_size = (sizeof(A_d[0]) * (n + padding[n]) * (n) + // As + sizeof(typename config::absValType) * srchThrd[n] + // Val + sizeof(int) * srchThrd[n] + // Loc + sizeof(int) * n + // icol + sizeof(int) * n); // perm + pf[n]<<>>(A_d,Ainv_d,n,batch); + /* Check synchronous errors, i.e. pre-launch */ + cudaError_t err = cudaGetLastError(); + if (cudaSuccess != err) { + printf("cudaError %d:%s\n",err,cudaGetErrorString(err)); + return -2; + } + return 0; +} + +template +int matinv_MatPerThread (const T *A_d, T *Ainv_d, int n, int batch, cudaStream_t stream) +{ + typedef void (* func)(const T *A_d, T *Ainv_d, int batch); + int minBatchSize [11] = { + 0x7fffffff, + 0x7fffffff, + config::matInv2x2MinBatch, + config::matInv3x3MinBatch, + config::matInv4x4MinBatch, + config::matInv5x5MinBatch, + config::matInv6x6MinBatch, + config::matInv7x7MinBatch, + config::matInv8x8MinBatch, + config::matInv9x9MinBatch, + config::matInv10x10MinBatch + }; + func pf[11] = { + 0, + 0, + matinv_2x2_matrix_per_thread, + matinv_3x3_matrix_per_thread, + matinv_4x4_matrix_per_thread, + matinv_5x5_matrix_per_thread, + matinv_6x6_matrix_per_thread, + matinv_7x7_matrix_per_thread, + matinv_8x8_matrix_per_thread, + matinv_9x9_matrix_per_thread, + matinv_10x10_matrix_per_thread + }; + cudaError_t err; + dim3 dimBlock(128); + dim3 dimGrid; + int numBlocks; + + if (n < config::matInvMinDim || batch < 1) { + return -1; + } + if (n > config::matInvMaxDim || batch < minBatchSize[n]) { + return 1; + } + + switch (n) { + case 4: + err = cudaFuncSetCacheConfig (matinv_4x4_matrix_per_thread, + cudaFuncCachePreferL1); + break; + case 5: + err = cudaFuncSetCacheConfig (matinv_5x5_matrix_per_thread, + cudaFuncCachePreferL1); + break; + case 6: + err = cudaFuncSetCacheConfig (matinv_6x6_matrix_per_thread, + cudaFuncCachePreferL1); + break; + case 7: + err = cudaFuncSetCacheConfig (matinv_7x7_matrix_per_thread, + cudaFuncCachePreferL1); + break; + case 8: + err = cudaFuncSetCacheConfig (matinv_8x8_matrix_per_thread, + cudaFuncCachePreferL1); + break; + case 9: + err = cudaFuncSetCacheConfig (matinv_9x9_matrix_per_thread, + cudaFuncCachePreferL1); + break; + case 10: + err = cudaFuncSetCacheConfig (matinv_10x10_matrix_per_thread, + cudaFuncCachePreferL1); + break; + default: + err = cudaSuccess; + break; + } + if (err != cudaSuccess) { + printf ("here1 %s\n", cudaGetErrorString(err)); + return -2; + } + numBlocks = (batch + dimBlock.x - 1) / dimBlock.x; + if (numBlocks <= GRID_DIM_LIMIT) { + dimGrid.x = numBlocks; + dimGrid.y = 1; + dimGrid.z = 1; + } else { + dimGrid.x = GRID_DIM_LIMIT; + dimGrid.y = (numBlocks + GRID_DIM_LIMIT-1) / GRID_DIM_LIMIT; + dimGrid.z = 1; + } + pf[n]<<>>(A_d,Ainv_d,batch); + /* Check synchronous errors, i.e. pre-launch */ + err = cudaGetLastError(); + if (cudaSuccess != err) { + printf ("here2 %s\n", cudaGetErrorString(err)); + return -2; + } + return 0; +} + +/* C callable wrapper functions */ + +int smatinv_batch (float *A, float *Ainv, int n, int batch, cudaStream_t stream) +{ + int stat; + stat = matinv_MatPerThread(A, Ainv, n, batch, stream); + if (stat <= 0) return stat; + return matinv_gje3(A, Ainv, n, batch, stream); +} + +int dmatinv_batch (double *A, double *Ainv, int n, int batch, cudaStream_t stream) +{ + int stat; + stat = matinv_MatPerThread(A, Ainv, n, batch, stream); + if (stat <= 0) return stat; + return matinv_gje3(A, Ainv, n, batch, stream); +} + +int cmatinv_batch (cuComplex *A, cuComplex *Ainv, int n, int batch, cudaStream_t stream) +{ + int stat; + stat = matinv_MatPerThread(A, Ainv, n, batch, stream); + if (stat <= 0) return stat; + return matinv_gje3(A, Ainv, n, batch, stream); +} + +extern "C" +int zmatinv_batch (cuDoubleComplex *A, cuDoubleComplex *Ainv, int n, int batch, cudaStream_t stream) +{ + int stat; + stat = matinv_MatPerThread(A, Ainv, n, batch, stream); + if (stat <= 0) return stat; + return matinv_gje3(A, Ainv, n, batch, stream); +} + + +/* + Code to support use of zmatinv in LSMS +*/ + +extern "C" +int zmatinv_batch_ (cuDoubleComplex **A, cuDoubleComplex **Ainv, int *n, int *batch, cudaStream_t stream) +// just add a trailing underscore to facilitate use in fortran code +{ + int stat; + /* + stat = matinv_MatPerThread(*A, *Ainv, n, batch); + if (stat <= 0) { + printf ("error - %d \n", stat); + abort(); + return stat; + } + */ + + stat = matinv_gje3(*A, *Ainv, *n, *batch, stream); + + // printf (" status from matinv_gje3 = %d \n", stat); + + return stat; +} + + + +__global__ void zmatinv_prep1_kernel( void *a, + void *b, + int n, + int lda + ) +{ + + /* + if ( threadIdx.x == 0 && blockIdx.x == 0 ) { + printf ("IN zmatinv_prep1_kernel !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! \n"); + for ( int j=0; j<6; j++ ) { + for ( int i=0; i<6; i++ ) { + printf ( " a(%d, %d) = ( %e, %e ) \n ", i, j, cuCreal(((cuDoubleComplex*)a)[i+j*lda]) , cuCimag(((cuDoubleComplex*)a)[i+j*lda]) ); + } + } + } + __syncthreads(); + */ + + if ( threadIdx.x < n && blockIdx.x < n ) { + //unsigned int ielement = blockDim.x*blockIdx.x+threadIdx.x; + unsigned int ioffset = blockIdx.x*lda+threadIdx.x; + unsigned int ioffset2 = blockIdx.x*n+threadIdx.x; + cuDoubleComplex val = ((cuDoubleComplex*)a)[ioffset]; + ((cuDoubleComplex*)b)[ioffset2] = val; + + /* + if ( threadIdx.x < n && blockIdx.x < n ) { + if ( threadIdx.x == blockIdx.x ) { + printf (" %d, row = %d, column = %d, val = (%e, %e) \n", ioffset2, blockIdx.x, threadIdx.x, cuCreal(((cuDoubleComplex*)b)[ioffset2]), cuCimag(((cuDoubleComplex*)b)[ioffset2]) ); + } + } + */ + + } + +} + +extern "C" +int zmatinv_prep1_ ( void **a, void **b, int *n, int *lda, cudaStream_t stream) +// copy an n x n submatrix out of a larger matrix to prepare it to be passed to zmatinv_batch +{ + cudaError_t ce; + //cudaDeviceSynchronize(); + + //printf ("IN zmatinv_prep1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! \n"); + + unsigned int kgrid = *n; + unsigned int kblocksize = *n; + + //cudaDeviceSynchronize(); + /* + ce = cudaGetLastError(); + if ( ce ) { + printf ("Dangling Cuda Error prior to zmatinv_pre1_kernel\n"); + printf ("%s\n", cudaGetErrorString(ce) ); + } + else { + printf ("device pointer for a = %p \n", a); + printf ("No error prior to launching zmatinv_pre1_kernel\n"); + } + */ + + zmatinv_prep1_kernel <<< kgrid, kblocksize,0 ,stream >>> ( + *a, *b, *n, *lda + ); + + //cudaDeviceSynchronize(); + + ce = cudaGetLastError(); + if ( ce ) { + printf ("Cuda Error at zmatinv_pre1_kernel\n"); + printf (" %d, %d, %d, %d \n", kgrid, kblocksize, *n, *lda ); + printf ("%s\n", cudaGetErrorString(ce) ); + abort(); + } + /* + else { + printf ("Completed zmatinv_pre1_kernel with no errors. \n"); + } + */ + + return 0 ; + +} diff --git a/src/Accelerator/inverse.h b/src/Accelerator/inverse.h new file mode 100644 index 000000000..aa8bde024 --- /dev/null +++ b/src/Accelerator/inverse.h @@ -0,0 +1,154 @@ +/* + * Copyright 1993-2011 NVIDIA Corporation. All rights reserved. + * + * NOTICE TO LICENSEE: + * + * This source code and/or documentation ("Licensed Deliverables") are + * subject to NVIDIA intellectual property rights under U.S. and + * international Copyright laws. + * + * These Licensed Deliverables contained herein is PROPRIETARY and + * CONFIDENTIAL to NVIDIA and is being provided under the terms and + * conditions of a form of NVIDIA software license agreement by and + * between NVIDIA and Licensee ("License Agreement") or electronically + * accepted by Licensee. Notwithstanding any terms or conditions to + * the contrary in the License Agreement, reproduction or disclosure + * of the Licensed Deliverables to any third party without the express + * written consent of NVIDIA is prohibited. + * + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE + * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE. IT IS + * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. + * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED + * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, + * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. + * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE + * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY + * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY + * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THESE LICENSED DELIVERABLES. + * + * U.S. Government End Users. These Licensed Deliverables are a + * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT + * 1995), consisting of "commercial computer software" and "commercial + * computer software documentation" as such terms are used in 48 + * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government + * only as a commercial end item. Consistent with 48 C.F.R.12.212 and + * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all + * U.S. Government End Users acquire the Licensed Deliverables with + * only those rights set forth herein. + * + * Any use of the Licensed Deliverables in individual and commercial + * software must include, in the user documentation and internal + * comments to the code, the above Disclaimer and U.S. Government End + * Users Notice. + */ + +#if !defined(INVERSE_H_) +#define INVERSE_H_ +#include "cuComplex.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* smatinv_batch() inverts one or many square, non-singular matrices of single- + precision elements. Partial pivoting is employed in the inversion process + for increased numerical stability. + + A pointer to an array of the single-precision matrices to be inverted, + where each matrix is stored in column-major order + Ainv pointer to an array of the single-precision matrices which receive + the inverses of the corresponding matrices pointed to by A, where + each matrix is stored in column-major order + n number of rows and columns of the matrices in the arrays pointed to + by A and Ainv. n must be greater than, or equal to 2. On sm_13 GPUs, + n must be less than, or equal to, 63. On sm_2x GPUs, n must be less + than, or equal to, 110. + batch the number of matrices to be inverted. It must be greater than zero. + + Returns: + + 0 operation completed successfully + -1 n is out of bounds, batch is out of bounds + -2 a CUDA error occured +*/ +int smatinv_batch(float *A, float *Ainv, int n, int batch, cudaStream_t stream); + +/* dmatinv_batch() inverts one or many square, non-singular matrices of double- + precision elements. Partial pivoting is employed in the inversion process + for increased numerical stability. + + A pointer to an array of the double-precision matrices to be inverted, + where each matrix is stored in column-major order + Ainv pointer to an array of the double-precision matrices which receive + the inverses of the corresponding matrices pointed to by A, where + each matrix is stored in column-major order + n number of rows and columns of the matrices in the arrays pointed to + by A and Ainv. n must be greater than, or equal to 2. On sm_13 GPUs, + n must be less than, or equal to, 44. On sm_2x GPUs, n must be less + than, or equal to, 77. + batch the number of matrices to be inverted. It must be greater than zero. + + Returns: + + 0 operation completed successfully + -1 n is out of bounds, batch is out of bounds + -2 a CUDA error occured +*/ +int dmatinv_batch(double *A, double *Ainv, int n, int batch, cudaStream_t stream); + +/* cmatinv_batch() inverts one or many square, non-singular matrices of float- + complex elements. Partial pivoting is employed in the inversion process for + increased numerical stability. + + A pointer to an array of the float-complex matrices to be inverted, + where each matrix is stored in column-major order + Ainv pointer to an array of the float-complex matrices which receive + the inverses of the corresponding matrices pointed to by A, where + each matrix is stored in column-major order + n number of rows and columns of the matrices in the arrays pointed to + by A and Ainv. n must be greater than, or equal to, 2. On sm_13 GPUs, + n must be less than, or equal to, 44. On sm_2x GPUs, n must be less + than, or equal to, 77. + batch the number of matrices to be inverted. It must be greater than zero. + + Returns: + + 0 operation completed successfully + -1 n is out of bounds, batch is out of bounds + -2 a CUDA error occured +*/ +int cmatinv_batch(cuComplex *A, cuComplex *Ainv, int n, int batch, cudaStream_t stream); + +/* zmatinv_batch() inverts one or many square, non-singular matrices of double- + complex elements. Partial pivoting is employed in the inversion process for + increased numerical stability. + + A pointer to an array of the double-complex matrices to be inverted, + where each matrix is stored in column-major order + Ainv pointer to an array of the double-complex matrices which receive + the inverses of the corresponding matrices pointed to by A, where + each matrix is stored in column-major order + n number of rows and columns of the matrices in the arrays pointed to + by A and Ainv. n must be greater than, or equal to, 2. On sm_13 GPUs, + n must be less than, or equal to, 31. On sm_2x GPUs, n must be less + than, or equal to, 55. + batch the number of matrices to be inverted. It must be greater than zero. + + Returns: + + 0 operation completed successfully + -1 n is out of bounds, batch is out of bounds + -2 a CUDA error occured +*/ +int zmatinv_batch(cuDoubleComplex *A, cuDoubleComplex *Ainv, int n, int batch, cudaStream_t stream); + +#ifdef __cplusplus +} +#endif + +#endif /* INVERSE_H_ */ diff --git a/src/Accelerator/makebgij_device.hpp b/src/Accelerator/makebgij_device.hpp new file mode 100755 index 000000000..0f170594c --- /dev/null +++ b/src/Accelerator/makebgij_device.hpp @@ -0,0 +1,261 @@ + +#include +#include "cudaDoubleComplex.hpp" + + +#define FIDX(i,j,ldim) (j*ldim+i) +#include "plglmax_device.hpp" + +__device__ +__inline__ void makebgij_device(int lmaxi,int kkri,int lmaxj,int kkrj, + int lmax,int kkrsz,int ndlj,int ndlm, int nspin, + cudaDoubleComplex prel,double rij[3],double *sinmp,double *cosmp, + double *clm,double *plm,DeviceArray3d &cgnt,int lmax_cg,int *lofk,int *mofk, + cudaDoubleComplex *ilp1,DeviceMatrix &illp, + cudaDoubleComplex *hfn,cudaDoubleComplex *dlm, cudaDoubleComplex *bgij, + double pi4) { + const cudaDoubleComplex sqrtm1=cudaDoubleComplex(0.0,1.0); + const double ptol=1.0e-6; + /* + c ***************************************************************** + c + c + c ij l+1 m -> * + c D [E] = -i * sqrt(E) * h [sqrt(E)*R ] * Y [R ] + c L l ij l ij + c + c + c -l+1 m -> * + c = -i * sqrt(E) * h [sqrt(E)*R ] * Y [-R ] + c l ij l ij + c + c The extra factor (-1)^m removed by xgz July 97 from plm (plglmax_c.f) + c to make Ylm consistent with Numerical Recipes. + c + c m [ (2*l+1)*(l-|m|)!] m + c Y = sqrt[-----------------]*P [cos(theta)]*exp(i*m*phi) + c l [ 4*pi*(l+|m|)! ] l + c + c for m>=0 + c + c m m -m * + c Y [theta,phi] = (-1) Y [theta,phi] for m<0 + c l l + c + c -> -> -> + c R = R - R ==> [theta,phi] + c ij j i + c + c cos(theta)=Rij(3)/sqrt(Rij(1)**2+Rij(2)**2+Rij(3)**2) + c + c cos(phi) =Rij(1)/sqrt(Rij(1)**2+Rij(2)**2) + c + c m m + c Indexing: P : P(l*(l+1)/2+m+1) only +m are calculated + c l l + c + c m m + c Indexing: C : C(l*(l+1)/2+m+1) only +m are calculated + c l l + c + c m m + c Indexing: D : D(l*(l+1)+m+1) all m are calculated + c l l + c + c Now for the real space structure contant we have : + c + c ij l-l' L ij + c G (E) = 4*pi*i * SUM { C * D (E) } + c L,L' L" L',L" L" + c + c ***************************************************************** + */ + + int lend=lmaxi+lmaxj; + + /* + c calculate the hankel function.[dangerous code if z is close to 0] + c hankel function is hfn*exp(i*z)/z + */ + double rmag=sqrt(rij[0]*rij[0]+rij[1]*rij[1]+rij[2]*rij[2]); + +#if 0 + if(threadIdx.x==0) { + printf("ilp1 (lend: %d\n", lend); + for(int i=0;i<=lend;i++) + printf("%d, (%lg, %lg)\n",i,ilp1[i].x,ilp1[i].y); + } +#endif + /**************************SERIAL************************************/ + if(threadIdx.x==0) { +#if 0 + printf("prel: (%lg, %lg)\n", prel.x, prel.y); + printf("sqrtm1: (%lg, %lg)\n", sqrtm1.x,sqrtm1.y); + printf("rmag: %lg\n",rmag); +#endif + // if(rmag.lt.ptol) stop 'Error in makegij: rmag = 0.' + if(prel.x==0.0 && prel.y==0.0) + { + // if prel is zero then we calculate Gij for multipole Coulomb interaction. + hfn[0]=cudaDoubleComplex(1.0/rmag,0); + for(int l=1; l<=lend; l++) + { + hfn[l]=((2.0*l-1))/rmag*sqrtm1*hfn[l-1]; //Why does this crash? + } + } else { + cudaDoubleComplex z=prel*rmag; + hfn[0]=-sqrtm1; + hfn[1]=-1.0-sqrtm1/z; + for(int l=1; lptol) + { + cosmp[1]=rij[0]/pmag; + sinmp[1]=rij[1]/pmag; + } else { + cosmp[1]=0.0; + sinmp[1]=0.0; + } + for(int m=2; m<=lend; m++) + { + cosmp[m]=cosmp[m-1]*cosmp[1]-sinmp[m-1]*sinmp[1]; + sinmp[m]=sinmp[m-1]*cosmp[1]+cosmp[m-1]*sinmp[1]; + } +#if 0 + if(threadIdx.x==0) { + printf("i, cosmp(i), sinmp(i)\n"); + for(int i=0;i<2*lmax+1;i++) { + printf("%d, %lg, %lg\n",i, cosmp[i], sinmp[i]); + } + } +#endif + + int j=0; + for(int l=0; l<=lend; l++) + { + int ll=l*(l+1); + j=ll+1; + ll=ll/2+1; + double m1m=1.0; + dlm[j-1]= hfn[l]*plm[ll-1]; + for(int m=1; m<=l; m++) + { + m1m=-m1m; + cudaDoubleComplex fac=plm[ll+m-1]*cudaDoubleComplex(cosmp[m],sinmp[m]); + dlm[j-m-1]= hfn[l]*m1m*fac; + dlm[j+m-1]= hfn[l]*conj(fac); + } + } + } + /*********************END SERIAL************************************/ + __syncthreads(); //wait for dlm to be updated +#if 0 + if(threadIdx.x==0) { + printf("i, dlm(i)\n"); + for(int i=0;i=llow;l3-=2) + { + int j=l3*(l3+1)+m3; + sum = sum + cgnt(l3/2,lm1,lm2)*dlm[j]; + } + sum = sum * pi4*illp(lm2,lm1); + + for(int x=0;x __device__ __forceinline__ T mkConst(int i); + +__device__ __forceinline__ float fmnaOp (float a, float b, float c) +{ + return -(a * b) + c; +} + +__device__ __forceinline__ float mulOp (float a, float b) +{ + return a * b; +} + +__device__ __forceinline__ float rcpOp (float a) +{ + return 1.0f / a; +} + +__device__ __forceinline__ float absOp (float a) +{ + return fabsf(a); +} + +__device__ __forceinline__ float negOp (float a) +{ + return -(a); +} + +template <> +__device__ __forceinline__ float mkConst(int i) +{ + return (float)i; +} + +__device__ __forceinline__ double fmnaOp (double a, double b, double c) +{ + return -(a * b) + c; +} + +__device__ __forceinline__ double mulOp (double a, double b) +{ + return a * b; +} + +__device__ __forceinline__ double rcpOp (double a) +{ + return 1.0 / a; +} + +__device__ __forceinline__ double absOp (double a) +{ + return fabs(a); +} + +__device__ __forceinline__ double negOp (double a) +{ + return -(a); +} + +template <> +__device__ __forceinline__ double mkConst(int i) +{ + return (double)i; +} + +__device__ __forceinline__ cuComplex fmnaOp (cuComplex a, cuComplex b, + cuComplex c) +{ + b.x = -b.x; + b.y = -b.y; + return cuCfmaf (a, b, c); +} + +__device__ __forceinline__ cuComplex mulOp (cuComplex a, cuComplex b) +{ + return cuCmulf (a, b); +} + +__device__ __forceinline__ cuComplex rcpOp (cuComplex a) +{ +#ifdef FAST_COMPLEX_ARITH + float t = 1.0f / (a.x * a.x + a.y * a.y); + return make_cuComplex (a.x * t, -a.y * t); +#else + cuComplex t = make_cuComplex (1.0f, 0.0f); + return cuCdivf (t, a); +#endif +} + +__device__ __forceinline__ cuComplex negOp (cuComplex a) +{ + cuComplex t = make_cuComplex(-a.x, -a.y); + return t; +} + +__device__ __forceinline__ double absOp (cuComplex a) +{ +#ifdef FAST_COMPLEX_ARITH + return fabsf(a.x) + fabsf(a.y); +#else + return cuCabsf (a); +#endif +} + +template <> +__device__ __forceinline__ cuComplex mkConst (int i) +{ + return make_cuComplex ((float)i, 0.0); +} + +__device__ __forceinline__ cuDoubleComplex fmnaOp (cuDoubleComplex a, + cuDoubleComplex b, + cuDoubleComplex c) +{ + b.x = -b.x; + b.y = -b.y; + return cuCfma (a, b, c); +} + +__device__ __forceinline__ cuDoubleComplex mulOp (cuDoubleComplex a, + cuDoubleComplex b) +{ + return cuCmul (a, b); +} + +__device__ __forceinline__ cuDoubleComplex rcpOp (cuDoubleComplex a) +{ +#ifdef FAST_COMPLEX_ARITH + double t = 1.0 / (a.x * a.x + a.y * a.y); + return make_cuDoubleComplex (a.x * t, -a.y * t); +#else + cuDoubleComplex t = make_cuDoubleComplex (1.0, 0.0); + return cuCdiv (t, a); +#endif +} + +__device__ __forceinline__ cuDoubleComplex negOp (cuDoubleComplex a) +{ + cuDoubleComplex t = make_cuDoubleComplex(-a.x, -a.y); + return t; +} + +__device__ __forceinline__ double absOp (cuDoubleComplex a) +{ +#ifdef FAST_COMPLEX_ARITH + return fabs(a.x) + fabs(a.y); +#else + return cuCabs (a); +#endif +} + +template <> +__device__ __forceinline__ cuDoubleComplex mkConst (int i) +{ + return make_cuDoubleComplex ((double)i, 0.0); +} + +#endif /* OPERATIONS_H_ */ diff --git a/src/Accelerator/plglmax_device.hpp b/src/Accelerator/plglmax_device.hpp new file mode 100755 index 000000000..a0ac560a9 --- /dev/null +++ b/src/Accelerator/plglmax_device.hpp @@ -0,0 +1,170 @@ +#include + +/* subroutine plglmax(lmax,x,plm) +c **************************************************************** +c Associated Legendre function.................................... +c Calclates all the p(l,m)'s up to lmax........................... +c based on the formulae given in "Numerical Recipes" pages 180-183 +c (Equations 6.6.7, 6.6.8 and 6.6.9............................... +c W. H. Press, B. P. Flannery, S A Teukolsky and W. T. Vetterling. +c Cambridge Univ Press 1986....................................... +c **************************************************************** +c +c Inputs: lmax integer scalar, max l for Plm +c x real*8 scalar, argument of Plm(x) +c Returns: plm real*8 array of ((lmax+1)*(lmax+2)/2), Plm(x) +c +*/ + +__device__ +__inline__ void plglmax_device(int lmax, double x, double *plm) +{ + + double zero=0; + double one=1; + double two=2; + double tol=1e-12; + + if(one-fabs(x) <= tol) { + int lend=(lmax+1)*(lmax+2)/2; + for(int l=threadIdx.x;l +#include +#include +#include "cuda_runtime.h" +#include "cublas_v2.h" +#include "../../CBLAS/include/cblas.h" +#include +#include "cudaCheckError.hpp" +#include "cudaDoubleComplex.hpp" +#include +#include +//#include + +extern "C" int zmatinv_prep1_ (void **a, void **b, int *n, int *lda, cudaStream_t thisstream); +extern "C" int zmatinv_batch_ (cuDoubleComplex **A, cuDoubleComplex **Ainv, int *n, int *batch, cudaStream_t thisstream); +extern "C" int ilaenv_(int*,char*,char*,int*,int*,int*,int*); + +void handle_cuda_error ( cudaError_t cerr, char *errmsg ) +{ + if ( cerr ) { + printf ("CUDA ERROR (%d) %s \n", cerr, errmsg); + abort(); + //MPI_Abort(MPI_COMM_WORLD, 100); + } + else { + //printf ("SUCCESS !!! %s \n", errmsg); + } +} + +void handle_cublas_error ( cublasStatus_t cs, char *errmsg ) +{ + if ( cs ) { + printf ("cuBLAS ERROR (%d) %s \n", cs, errmsg); + abort(); + //MPI_Abort(MPI_COMM_WORLD, 101); + } + else { + //printf ("SUCCESS !!! %s \n", errmsg); + } +} + + +//TODO call directly from calculateTauMatrix (don't route through fortran) +extern "C" +void zblock_lu_cuda_c_ ( std::complex *a, int *lda, int *blk_sz, int *nblk, int *ipvt, int *mp, int *idcol, int *k) + //=================================================================================================================== +/* + Performs a partial inversion of the a matrix to return the inverse of the upper diagonal + subblock. + + a : input matrix - double complex + blk_sz : integer array giving the size of each subblock + nblk : the number of subblocks + ipvt : integer work array (not tested in c version) + idcol : integer array specifying symmetry (not tested in c version) + k : returns the actual number of columns in the calculated inverse + +*/ +{ + //TODO: + // adjust allocation sizes + // dynamically choose hybrid or not + // validate flop count + + unsigned long long flops=0; + /********************paramters for zgemm rank maximization*******************/ + int zgemm_rank = 600; + int gpu_only_blks = 0; + + int remaining=0; + for(int i=0;i0) { + blk_sz[*nblk]=min(55,remaining); + remaining-=55; + (*nblk)++; + } + + int currentRank=0; + + int m, n; + int ioff, joff; + int info; + cudaError_t ce; + cublasStatus_t cublasStat; + + // set constants + const cuDoubleComplex cone = make_cuDoubleComplex( 1.0, 0.0); + const cuDoubleComplex cmone = make_cuDoubleComplex(-1.0, 0.0); + const cuDoubleComplex czero = make_cuDoubleComplex( 0.0, 0.0); + + // get the thread number + int threadId = omp_get_thread_num(); + + /***************************One time initialization, should be moved outside******************************************/ + int max_blk_sz=blk_sz[0]; + if(*nblk>1) + { + for(int i=1; i<*nblk; i++) + max_blk_sz=max(max_blk_sz,blk_sz[i]); + } + + const int MAX_THREADS=16; + //TODO dynamically size + static bool initialized[MAX_THREADS] = {false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; + static cuDoubleComplex *vdevWork[MAX_THREADS]; + static cuDoubleComplex *vdevInv[MAX_THREADS]; + static cuDoubleComplex *vdevA2[MAX_THREADS]; + static std::complex *vdevHostDiag[MAX_THREADS]; + static std::complex *vwork[MAX_THREADS]; + static int *vhostIPVT[MAX_THREADS]; + static int lwork; + if ( ! initialized[threadId] ) { + + //calculate optimial work size for zgetri + int one=1; int mone=-1; + int NB = ilaenv_(&one,"ZGETRI","",&max_blk_sz,&mone,&mone,&mone); + lwork= max_blk_sz * NB; + + // allocate space on device + ce = cudaMalloc ( &vdevWork[threadId], max_blk_sz*max_blk_sz*sizeof(cuDoubleComplex)); + handle_cuda_error (ce, "cudaMalloc devWork"); + ce = cudaMalloc ( &vdevInv[threadId], max_blk_sz*max_blk_sz*sizeof(cuDoubleComplex)); + handle_cuda_error (ce, "cudaMalloc devInv"); + + + int LDA= *lda; + ce = cudaMallocHost ( &vwork[threadId], lwork *sizeof(std::complex)); + handle_cuda_error (ce, "cudaMallocHost vwork"); + ce = cudaMalloc ( &vdevA2[threadId], max_blk_sz * LDA *sizeof(cuDoubleComplex)); + handle_cuda_error (ce, "cudaMalloc devA2"); + ce = cudaMallocHost ( &vdevHostDiag[threadId], max_blk_sz * max_blk_sz *sizeof(std::complex)); + handle_cuda_error (ce, "cudaMallocHost vdevHostDiag"); + ce = cudaMallocHost((void**)&vhostIPVT[threadId], max_blk_sz*sizeof(int)); + handle_cuda_error (ce, "cudaMallocHost vhostIPVT"); + + //this speeds up the small block inverse + cudaDeviceSetSharedMemConfig(cudaSharedMemBankSizeEightByte); + + initialized[threadId] = true; + } + /**********************************************************************************************************************/ + + /********************assign thread private variables********************************/ + cudaStream_t stream1=get_stream_(0); + cudaStream_t stream2=get_stream_(1); + cudaEvent_t done_event=get_cuda_event_(); + cuDoubleComplex *devWork = vdevWork[threadId]; + cuDoubleComplex *devInv = vdevInv[threadId]; + cuDoubleComplex *devA=(cuDoubleComplex*)get_dev_m_(); + cuDoubleComplex *devA2 = vdevA2[threadId]; + std::complex *work = vwork[threadId]; + cublasHandle_t cublasHandle = get_cublas_handle_(); + int *hostIPVT=vhostIPVT[threadId]; + Complex *hostAdiag = (Complex*)vdevHostDiag[threadId]; + /***********************************************************************************/ + + // add up the sizes of the subblocks to get the size of the entire matrix + int na; + na = 0; + for ( int i=0; i=0; i-- ) { + if ( idcol[0] == 0 || idcol[i] == i ) { + *k -= 1; + if ( *k != i ) { + printf ("Eliminate columns that are equivalent due to symmetry section in zblock_lu_cuda_c not tested\n"); + abort(); + // zcopy ( na-blk_sz[0], a[i*lda+blk_sz[0]], 1, a[*k*lda+blk_sz[0]], 1 ); + } + } + } + } + +#ifndef BUILDKKRMATRIX_GPU + // copy matrix to device + cublasStat = cublasSetMatrix ( na, na, sizeof(cuDoubleComplex), a, *lda, devA, *lda); + handle_cublas_error ( cublasStat, "cublasSetMatrix devA "); +#endif + if ( *nblk > 0 ) { + + n = blk_sz[*nblk-1]; + joff = na - n; + + // loop over sub-blocks + for ( int iblk=*nblk-1; iblk>0; iblk-- ) { + m = n; + ioff = joff; + n = blk_sz[iblk-1]; + joff = joff-n; + + //TODO update condition to chose branch, should do this branch when remaining size is small... + + // HPL factorization and left propagation + if ( m<56 ) { //CUDA only version + //A^-1 // invert the clique + // re-package the diagonal block into a dense matrix suitable for sending to zmatinv + cuDoubleComplex *devAdiag; + devAdiag = &devA[ioff* *lda + ioff]; + info = zmatinv_prep1_ ( (void**)&devAdiag, (void**)&devWork, &m, lda, stream1 ); + if ( info ) { printf (" zmatinv_prep1 returned error code %d \n", info); abort();} + + int one = 1; + info = zmatinv_batch_ ( &devWork, &devInv, &m, &one, stream1 ); + if ( info ) { printf (" zmatinv_batch returned error code %d \n", info); printf (" m = %d, one = %d \n", m, one ); abort(); } + flops += m * m * m; + + } + else { //HYBRID version, do small inverse on the host. This works well. + + cuDoubleComplex *devAdiag = (cuDoubleComplex*)&devA[ioff* *lda + ioff]; + + cublasSetStream ( cublasHandle, stream1 ); + + cublasStat = cublasGetMatrixAsync ( m, m, sizeof(cuDoubleComplex), devAdiag, *lda, hostAdiag, m, stream1 ); + + cudaEventRecord(done_event,stream1); + //wait for transfers to the host to finish + cudaEventSynchronize(done_event); + + int info; + //zgetrf on host + zgetrf_(&m, &m, hostAdiag, &m, hostIPVT, &info); + + //zgetri on host + zgetri_(&m, hostAdiag, &m, hostIPVT, (Complex*)work, &lwork, &info); + + flops += m * m * m; + + //copy_async down to device + cublasStat = cublasSetMatrixAsync ( m, m, sizeof(cuDoubleComplex), hostAdiag, m, devInv, m, stream1 ); + + cudaEventRecord(done_event,stream1); + //wait for transfers to the host to finish + cudaEventSynchronize(done_event); + } + + //CA^-1 +#ifdef PRINT_ZGEMM + fprintf(stderr, "m: %d n: %d k: %d lda: %d ldb: %d ldc: %d\n", m, ioff, m, m, *lda, max_blk_sz); +#endif + cublasStat = cublasZgemm ( cublasHandle, CUBLAS_OP_N, CUBLAS_OP_N, m, ioff, m, &cone, devInv, m, &devA[ioff], *lda, &czero, devA2, max_blk_sz ); + handle_cublas_error ( cublasStat, "Error in cublasZgemm #1\n" ); + flops+= m * ioff * m; + + //Mark end of small zgemm in stream1 + cudaEventRecord(done_event,stream1); + + //stream 2 must wait for the small zgemm to finish + cudaStreamWaitEvent(stream2,done_event,0); + + // Trailing matrix update + currentRank+=m; + + if ( currentRank1) { + + // only update the next block row + // little chance for hybrid acceleration here - so ignore for now. + + cublasSetStream ( cublasHandle, stream1 ); + + // need to place A2 back into A + ce = cudaMemcpy2DAsync ( &devA[ioff], *lda*sizeof(cuDoubleComplex), devA2, max_blk_sz*sizeof(cuDoubleComplex), m*sizeof(cuDoubleComplex), ioff, cudaMemcpyDeviceToDevice, stream1 ); + +#ifdef PRINT_ZGEMM + fprintf(stderr, "m: %d n: %d k: %d lda: %d ldb: %d ldc: %d\n", n, ioff, currentRank, *lda, *lda, *lda); +#endif + cublasStat = cublasZgemm ( cublasHandle, CUBLAS_OP_N, CUBLAS_OP_N, n, ioff, currentRank, &cmone, + &devA[ioff* *lda +ioff-n], *lda, + //devA2, max_blk_sz, &cone, + &devA[ioff], *lda, &cone, + &devA[ioff-n], *lda ); + + flops += n * ioff * currentRank; + +#ifdef PRINT_ZGEMM + fprintf(stderr, "m: %d n: %d k: %d lda: %d ldb: %d ldc: %d\n", ioff-n, n, currentRank, *lda, *lda, *lda); +#endif + cublasStat = cublasZgemm ( cublasHandle, CUBLAS_OP_N, CUBLAS_OP_N, ioff-n, n, currentRank, &cmone, + &devA[ioff * *lda], *lda, + &devA[(ioff-n) * *lda + ioff], *lda, &cone, + &devA[(ioff-n) * *lda], *lda ); + + flops += (ioff-n)*n*currentRank; + } + else { + // update the full trailing matrix + + cublasSetStream ( cublasHandle, stream1 ); + // perform a portion of the zgemm on the gpu + + // first need to place A2 back into A + ce = cudaMemcpy2DAsync ( &devA[ioff], *lda*sizeof(cuDoubleComplex), devA2, max_blk_sz*sizeof(cuDoubleComplex), m*sizeof(cuDoubleComplex), ioff, cudaMemcpyDeviceToDevice, stream1 ); + + //D=CA^-1B +#ifdef PRINT_ZGEMM + fprintf(stderr, "m: %d n: %d k: %d lda: %d ldb: %d ldc: %d\n", ioff, ioff, currentRank, *lda, *lda, *lda); +#endif + cublasStat = cublasZgemm ( cublasHandle, CUBLAS_OP_N, CUBLAS_OP_N, ioff, ioff, currentRank, &cmone, + &devA[ioff* *lda], *lda, + &devA[ioff], *lda , &cone, + devA, *lda); + + flops += ioff * ioff * currentRank; + + // just did a full trailing submatrix update, so reset block row delay counter + currentRank=0; + } + + } // end for + + cublasStat = cublasGetMatrixAsync ( blk_sz[0], blk_sz[0], sizeof(cuDoubleComplex), devA, *lda, a, *lda, stream1 ); + } // end if ( *nblk > 0 ) + + *k = blk_sz[0]; + + cudaEventRecord(done_event,stream1); + //wait for last transfer to finish + cudaEventSynchronize(done_event); + + // clean up + //cudaFree (devWork); + //cudaFree (devInv); + //cudaFree (devA); + //cudaFree (devA2); + //cudaFreeHost (ap); +#ifdef PRINT_FLOPS + printf("BLOCK_INV ZGEMM FLOPS: %llu\n", flops*4*2); +#endif +} diff --git a/src/Communication/LSMSCommunication.cpp b/src/Communication/LSMSCommunication.cpp new file mode 100644 index 000000000..484d1f690 --- /dev/null +++ b/src/Communication/LSMSCommunication.cpp @@ -0,0 +1,470 @@ +#include +#include "LSMSCommunication.hpp" + +// #define USE_ISEND + +void initializeCommunication(LSMSCommunication &comm) +{ + MPI_Init(NULL,NULL); + comm.comm=MPI_COMM_WORLD; + MPI_Comm_rank(comm.comm, &comm.rank); + MPI_Comm_size(comm.comm, &comm.size); +} + +void initializeCommunication(LSMSCommunication &comm, MPI_Comm mpiCommunicator) +{ + comm.comm=mpiCommunicator; + MPI_Comm_rank(comm.comm, &comm.rank); + MPI_Comm_size(comm.comm, &comm.size); +} + +void finalizeCommunication(void) +{ + MPI_Finalize(); +} + +void exitLSMS(LSMSCommunication &comm, int errorCode) +{ + MPI_Abort(comm.comm, errorCode); +} + +void communicateParameters(LSMSCommunication &comm, LSMSSystemParameters &lsms, + CrystalParameters &crystal, MixingParameters &mix, + AlloyMixingDesc &alloyDesc) +{ + const int s = sizeof(LSMSSystemParameters) + 9*sizeof(Real) + sizeof(int) + + 10 + sizeof(MixingParameters) + 5*sizeof(int) + + sizeof(int); // <-- +1 for no. alloy classes + char buf[s]; + int nalloy_classes; + + if(comm.rank==0) + { + int pos=0; + MPI_Pack(lsms.systemid,80,MPI_CHAR,buf,s,&pos,comm.comm); + MPI_Pack(lsms.title,80,MPI_CHAR,buf,s,&pos,comm.comm); + MPI_Pack(lsms.potential_file_in,128,MPI_CHAR,buf,s,&pos,comm.comm); + MPI_Pack(lsms.potential_file_out,128,MPI_CHAR,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.pot_in_type,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.pot_out_type,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.alloy_in_type,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.alloy_out_type,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.num_atoms,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.nspin,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.relativity,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.nrelc,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.nrelv,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.n_spin_cant,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.n_spin_pola,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.mtasa,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.xcFunctional[0],numFunctionalIndices,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.fixRMT,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.nscf,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.writeSteps,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.clight,1,MPI_DOUBLE,buf,s,&pos,comm.comm); + + MPI_Pack(&lsms.energyContour.grid,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.energyContour.npts,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.energyContour.ebot,1,MPI_DOUBLE,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.energyContour.etop,1,MPI_DOUBLE,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.energyContour.eibot,1,MPI_DOUBLE,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.energyContour.eitop,1,MPI_DOUBLE,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.energyContour.maxGroupSize,1,MPI_INT,buf,s,&pos,comm.comm); + + MPI_Pack(&lsms.mixing,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.alphaDV,1,MPI_DOUBLE,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.rmsTolerance,1,MPI_DOUBLE,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.zblockLUSize,1,MPI_INT,buf,s,&pos,comm.comm); + + MPI_Pack(&lsms.global.iprint,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.global.print_node,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.global.default_iprint,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.global.istop,32,MPI_CHAR,buf,s,&pos,comm.comm); + MPI_Pack(&lsms.global.GPUThreads,32,MPI_INT,buf,s,&pos,comm.comm); + + MPI_Pack(&crystal.num_types,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&crystal.bravais(0,0),9,MPI_DOUBLE,buf,s,&pos,comm.comm); + + nalloy_classes = alloyDesc.size(); + MPI_Pack(&nalloy_classes,1,MPI_INT,buf,s,&pos,comm.comm); + +// MixingParameters + // MPI_CXX_BOOL is not always available + // MPI_Pack(&mix.quantity[0],mix.numQuantities,MPI_CXX_BOOL,buf,s,&pos,comm.comm); + // copy to temporary int array and send this + int tmpQuantity[mix.numQuantities]; + for(int i=0; icrystal.maxlmax) crystal.maxlmax=crystal.types[i].lmax; + lsms.maxlmax=crystal.maxlmax; +} + +void communicateSingleAtomData(LSMSCommunication &comm, int from, int to, int &local_id, AtomData &atom, int tag) +{ + const int maxPts = 3051; + const int maxCore = 30; + int s = sizeof(AtomData) + sizeof(Real)*(2*3*maxPts+2*maxCore) + sizeof(int)*3*2*maxCore + sizeof(int); + char buf[s]; + int t; + + if(comm.rank == from) + { + int pos=0; + MPI_Pack(&local_id,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&atom.jmt,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&atom.jws,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&atom.xstart,1,MPI_DOUBLE,buf,s,&pos,comm.comm); + MPI_Pack(&atom.rmt,1,MPI_DOUBLE,buf,s,&pos,comm.comm); + MPI_Pack(&atom.rInscribed,1,MPI_DOUBLE,buf,s,&pos,comm.comm); + MPI_Pack(atom.header,80,MPI_CHAR,buf,s,&pos,comm.comm); + MPI_Pack(&atom.alat,1,MPI_DOUBLE,buf,s,&pos,comm.comm); + MPI_Pack(&atom.efermi,1,MPI_DOUBLE,buf,s,&pos,comm.comm); + MPI_Pack(&atom.vdif,1,MPI_DOUBLE,buf,s,&pos,comm.comm); + MPI_Pack(&atom.ztotss,1,MPI_DOUBLE,buf,s,&pos,comm.comm); + MPI_Pack(&atom.zcorss,1,MPI_DOUBLE,buf,s,&pos,comm.comm); + MPI_Pack(&atom.zsemss,1,MPI_DOUBLE,buf,s,&pos,comm.comm); + MPI_Pack(&atom.zvalss,1,MPI_DOUBLE,buf,s,&pos,comm.comm); + MPI_Pack(&atom.qtotws,1,MPI_DOUBLE,buf,s,&pos,comm.comm); + MPI_Pack(&atom.mtotws,1,MPI_DOUBLE,buf,s,&pos,comm.comm); + MPI_Pack(atom.evec,3,MPI_DOUBLE,buf,s,&pos,comm.comm); + MPI_Pack(atom.evecNew,3,MPI_DOUBLE,buf,s,&pos,comm.comm); + MPI_Pack(atom.evecOut,3,MPI_DOUBLE,buf,s,&pos,comm.comm); + MPI_Pack(atom.xvalws,2,MPI_DOUBLE,buf,s,&pos,comm.comm); + MPI_Pack(&atom.alloy_class,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&atom.lmax,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&atom.nspin,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&atom.numc,1,MPI_INT,buf,s,&pos,comm.comm); + t=atom.vr.n_row(); + MPI_Pack(&t,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&atom.vr(0,0),t,MPI_DOUBLE,buf,s,&pos,comm.comm); + MPI_Pack(&atom.vr(0,1),t,MPI_DOUBLE,buf,s,&pos,comm.comm); + + MPI_Pack(&atom.rhotot(0,0),t,MPI_DOUBLE,buf,s,&pos,comm.comm); + MPI_Pack(&atom.rhotot(0,1),t,MPI_DOUBLE,buf,s,&pos,comm.comm); + + MPI_Pack(&atom.corden(0,0),t,MPI_DOUBLE,buf,s,&pos,comm.comm); + MPI_Pack(&atom.corden(0,1),t,MPI_DOUBLE,buf,s,&pos,comm.comm); + + MPI_Pack(&atom.b_con[0],3,MPI_DOUBLE,buf,s,&pos,comm.comm); + MPI_Pack(&atom.b_basis[0],9,MPI_DOUBLE,buf,s,&pos,comm.comm); + t=atom.ec.n_row(); + MPI_Pack(&t,1,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&atom.ec(0,0),t,MPI_DOUBLE,buf,s,&pos,comm.comm); + MPI_Pack(&atom.ec(0,1),t,MPI_DOUBLE,buf,s,&pos,comm.comm); + + MPI_Pack(&atom.nc(0,0),t,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&atom.nc(0,1),t,MPI_INT,buf,s,&pos,comm.comm); + + MPI_Pack(&atom.lc(0,0),t,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&atom.lc(0,1),t,MPI_INT,buf,s,&pos,comm.comm); + + MPI_Pack(&atom.kc(0,0),t,MPI_INT,buf,s,&pos,comm.comm); + MPI_Pack(&atom.kc(0,1),t,MPI_INT,buf,s,&pos,comm.comm); + + + MPI_Send(buf,s,MPI_PACKED,to,tag,comm.comm); + } + if(comm.rank==to) + { + MPI_Status status; + MPI_Recv(buf,s,MPI_PACKED,from,tag,comm.comm,&status); + + int pos=0; + MPI_Unpack(buf,s,&pos,&local_id,1,MPI_INT,comm.comm); + MPI_Unpack(buf,s,&pos,&atom.jmt,1,MPI_INT,comm.comm); + MPI_Unpack(buf,s,&pos,&atom.jws,1,MPI_INT,comm.comm); + MPI_Unpack(buf,s,&pos,&atom.xstart,1,MPI_DOUBLE,comm.comm); + MPI_Unpack(buf,s,&pos,&atom.rmt,1,MPI_DOUBLE,comm.comm); + MPI_Unpack(buf,s,&pos,&atom.rInscribed,1,MPI_DOUBLE,comm.comm); + MPI_Unpack(buf,s,&pos,atom.header,80,MPI_CHAR,comm.comm); + MPI_Unpack(buf,s,&pos,&atom.alat,1,MPI_DOUBLE,comm.comm); + MPI_Unpack(buf,s,&pos,&atom.efermi,1,MPI_DOUBLE,comm.comm); + MPI_Unpack(buf,s,&pos,&atom.vdif,1,MPI_DOUBLE,comm.comm); + MPI_Unpack(buf,s,&pos,&atom.ztotss,1,MPI_DOUBLE,comm.comm); + MPI_Unpack(buf,s,&pos,&atom.zcorss,1,MPI_DOUBLE,comm.comm); + MPI_Unpack(buf,s,&pos,&atom.zsemss,1,MPI_DOUBLE,comm.comm); + MPI_Unpack(buf,s,&pos,&atom.zvalss,1,MPI_DOUBLE,comm.comm); + MPI_Unpack(buf,s,&pos,&atom.qtotws,1,MPI_DOUBLE,comm.comm); + MPI_Unpack(buf,s,&pos,&atom.mtotws,1,MPI_DOUBLE,comm.comm); + MPI_Unpack(buf,s,&pos,atom.evec,3,MPI_DOUBLE,comm.comm); + MPI_Unpack(buf,s,&pos,atom.evecNew,3,MPI_DOUBLE,comm.comm); + MPI_Unpack(buf,s,&pos,atom.evecOut,3,MPI_DOUBLE,comm.comm); + MPI_Unpack(buf,s,&pos,atom.xvalws,2,MPI_DOUBLE,comm.comm); + MPI_Unpack(buf,s,&pos,&atom.alloy_class,1,MPI_INT,comm.comm); + MPI_Unpack(buf,s,&pos,&atom.lmax,1,MPI_INT,comm.comm); + atom.kkrsz = (atom.lmax+1)*(atom.lmax+1); + MPI_Unpack(buf,s,&pos,&atom.nspin,1,MPI_INT,comm.comm); + MPI_Unpack(buf,s,&pos,&atom.numc,1,MPI_INT,comm.comm); + + MPI_Unpack(buf,s,&pos,&t,1,MPI_INT,comm.comm); + if(t!=atom.vr.n_row()) atom.resizePotential(t); + MPI_Unpack(buf,s,&pos,&atom.vr(0,0),t,MPI_DOUBLE,comm.comm); + MPI_Unpack(buf,s,&pos,&atom.vr(0,1),t,MPI_DOUBLE,comm.comm); + + MPI_Unpack(buf,s,&pos,&atom.rhotot(0,0),t,MPI_DOUBLE,comm.comm); + MPI_Unpack(buf,s,&pos,&atom.rhotot(0,1),t,MPI_DOUBLE,comm.comm); + + MPI_Unpack(buf,s,&pos,&atom.corden(0,0),t,MPI_DOUBLE,comm.comm); + MPI_Unpack(buf,s,&pos,&atom.corden(0,1),t,MPI_DOUBLE,comm.comm); + + MPI_Unpack(buf,s,&pos,&atom.b_con[0],3,MPI_DOUBLE,comm.comm); + MPI_Unpack(buf,s,&pos,&atom.b_basis[0],9,MPI_DOUBLE,comm.comm); + + MPI_Unpack(buf,s,&pos,&t,1,MPI_INT,comm.comm); + if(t!=atom.nc.n_row()) atom.resizeCore(t); + MPI_Unpack(buf,s,&pos,&atom.ec(0,0),t,MPI_DOUBLE,comm.comm); + MPI_Unpack(buf,s,&pos,&atom.ec(0,1),t,MPI_DOUBLE,comm.comm); + + MPI_Unpack(buf,s,&pos,&atom.nc(0,0),t,MPI_INT,comm.comm); + MPI_Unpack(buf,s,&pos,&atom.nc(0,1),t,MPI_INT,comm.comm); + + MPI_Unpack(buf,s,&pos,&atom.lc(0,0),t,MPI_INT,comm.comm); + MPI_Unpack(buf,s,&pos,&atom.lc(0,1),t,MPI_INT,comm.comm); + + MPI_Unpack(buf,s,&pos,&atom.kc(0,0),t,MPI_INT,comm.comm); + MPI_Unpack(buf,s,&pos,&atom.kc(0,1),t,MPI_INT,comm.comm); + } +} + + +void communicatePotentialShiftParameters(LSMSCommunication &comm, PotentialShifter &ps) +{ + + //const int s = sizeof(bool) + sizeof(double) * 2; + const int s = sizeof(int) + sizeof(double) * 2; + char buf[s]; + + if (comm.rank==0) + { + int pos = 0; + + // MPI_CXX_BOOL is not always available + //MPI_Pack(&ps.vSpinShiftFlag, 1, MPI_CXX_BOOL, buf, s, &pos, comm.comm); + int tmpFlag = 0; + if (ps.vSpinShiftFlag) tmpFlag = 1; + + MPI_Pack(&tmpFlag, 1, MPI_INT, buf, s, &pos, comm.comm); + MPI_Pack(&ps.minShift, 1, MPI_DOUBLE, buf, s, &pos, comm.comm); + MPI_Pack(&ps.maxShift, 1, MPI_DOUBLE, buf, s, &pos, comm.comm); + + } + + MPI_Bcast(buf, s, MPI_PACKED, 0, comm.comm); + + if (comm.rank!=0) + { + int pos = 0; + + // MPI_CXX_BOOL is not always available + //MPI_Unpack(buf, s, &pos, &ps.vSpinShiftFlag, 1, MPI_CXX_BOOL, comm.comm); + int tmpFlag = 0; + + MPI_Unpack(buf, s, &pos, &tmpFlag, 1, MPI_INT, comm.comm); + if (tmpFlag) + ps.vSpinShiftFlag = true; + else + ps.vSpinShiftFlag = false; + + MPI_Unpack(buf, s, &pos, &ps.minShift, 1, MPI_DOUBLE, comm.comm); + MPI_Unpack(buf, s, &pos, &ps.maxShift, 1, MPI_DOUBLE, comm.comm); + + } + + +} + + +void expectTmatCommunication(LSMSCommunication &comm, LocalTypeInfo &local) +{ +// prepost all recieves for tmats from remote nodes + for(int i=0; i +#include +#include +#include + +#include "Main/SystemParameters.hpp" + +#include "SingleSite/AtomData.hpp" +#include "Potential/PotentialShifter.hpp" + +class TmatCommType { +public: + int remoteNode; + int numTmats; + std::vector tmatStoreIdx; + std::vector globalIdx; + std::vector communicationRequest; +}; + +class LSMSCommunication { +public: + int rank; + int size; + MPI_Comm comm; + + int numTmatTo, numTmatFrom; + std::vector tmatTo, tmatFrom; +}; + +// mixing.hpp needs to be included after the definition of LSMSCommunication, since some mix +#include "Main/mixing.hpp" + +void initializeCommunication(LSMSCommunication &comm); +void initializeCommunication(LSMSCommunication &comm, MPI_Comm mpiCommunicator); +void finalizeCommunication(void); +void exitLSMS(LSMSCommunication &comm, int errorCode); + +void communicateParameters(LSMSCommunication &comm, LSMSSystemParameters &lsms, + CrystalParameters &crystal, MixingParameters &mix, AlloyMixingDesc &alloyDesc); + +void communicateSingleAtomData(LSMSCommunication &comm, int from, int to, + int &local_id, AtomData &atom, int tag=0); + +void communicatePotentialShiftParameters(LSMSCommunication &comm, PotentialShifter &ps); + +void expectTmatCommunication(LSMSCommunication &comm, LocalTypeInfo &local); +void sendTmats(LSMSCommunication &comm, LocalTypeInfo &local); +void finalizeTmatCommunication(LSMSCommunication &comm); + +void printCommunicationInfo(FILE *f, LSMSCommunication &comm); + +template +void globalMax(LSMSCommunication &comm,T &a) +{ + T r; + MPI_Allreduce(&a,&r,1,TypeTraits::mpiType(),MPI_MAX,comm.comm); + a=r; +/* + fprintf(stderr,"Unsupported type in globalMax\n"); + exit(2); +*/ +} + +void globalAnd(LSMSCommunication &comm,bool &a); + +template +void globalSum(LSMSCommunication &comm,T &a) +{ + T r; + MPI_Allreduce(&a,&r,1,TypeTraits::mpiType(),MPI_SUM,comm.comm); + a=r; +/* + fprintf(stderr,"Unsupported type in globalMax\n"); + exit(2); +*/ +} + +template +void globalSum(LSMSCommunication &comm,T *a, int n) +{ + T *r=new T[n]; + MPI_Allreduce(a,r,n,TypeTraits::mpiType(),MPI_SUM,comm.comm); + for(int i=0; i +#include "REWLCommunication.hpp" + +void REWLCommunication::initializeCommunication(MPI_Comm mpiCommunicator) +{ + comm = mpiCommunicator; + MPI_Comm_rank(comm, &rank); + MPI_Comm_size(comm, &size); +} diff --git a/src/Communication/REWLCommunication.hpp b/src/Communication/REWLCommunication.hpp new file mode 100644 index 000000000..9f9146d83 --- /dev/null +++ b/src/Communication/REWLCommunication.hpp @@ -0,0 +1,70 @@ +#ifndef REWLCOMMUNICATION_H +#define REWLCOMMUNICATION_H + +#include +#include +#include +#include "Real.hpp" +//#include "TypeTraits.hpp" + +class REWLCommunication { + +public : + + MPI_Comm comm; + int rank; + int size; + + // member functions + void initializeCommunication(MPI_Comm mpiCommunicator); + + template void swapScalar(T &data, int partner); + template void swapVector(T data[], int nElements, int partner); + + template void sendScalar(T &data, int partner); + template void recvScalar(T &data, int partner); + +}; + + +// Definitions of template functions for MPI communications + +template +void REWLCommunication::swapScalar(T &data, int partner) +{ + + MPI_Status status; + MPI_Sendrecv_replace(&data, 1, TypeTraits::mpiType(), partner, 1, partner, 1, comm, &status); + +} + + +template +void REWLCommunication::swapVector(T data[], int nElements, int partner) +{ + + MPI_Status status; + MPI_Sendrecv_replace(&data[0], nElements, TypeTraits::mpiType(), partner, 1, partner, 1, comm, &status); + +} + + +template +void REWLCommunication::sendScalar(T &data, int partner) +{ + MPI_Send(&data, 1, TypeTraits::mpiType(), partner, 3, comm); +} + + +template +void REWLCommunication::recvScalar(T &data, int partner) +{ + + MPI_Status status; + MPI_Recv(&data, 1, TypeTraits::mpiType(), partner, 3, comm, &status); + +} + + + +#endif diff --git a/src/Communication/distributeAtoms.cpp b/src/Communication/distributeAtoms.cpp new file mode 100644 index 000000000..5edee7074 --- /dev/null +++ b/src/Communication/distributeAtoms.cpp @@ -0,0 +1,44 @@ +#include "Main/SystemParameters.hpp" +#include "LSMSCommunication.hpp" + +int distributeTypes(CrystalParameters &crystal, LSMSCommunication &comm) +{ + int q=crystal.num_types/comm.size; + int r=crystal.num_types%comm.size; + + int nodeNumber=0; + int idx=0; + for(int i=0; i IN jmt,IN jws,IN r_mesh,IN h,IN xstart,IN vr, +! > IN numc,IN nc,IN lc,IN kc,INOUT ec, +! > IN ztotss,IN zsemss,IN zcorss, +! > OUT ecorv,OUT esemv,OUT corden,OUT semcor, +! > IN nrelc, +! > OUT qcpsc_mt,OUT qcpsc_ws,OUT mcpsc_mt,OUT mcpsc_ws, +! > IN iprpts, IN ipcore, +! > IN iprint,IN istop) +c ================================================================ +*/ + +extern "C" +{ + void getcor_(int *n_spin_pola,int *mtasa, + int *jmt,int *jws,double *r_mesh,double *h,double *xstart,double *vr, + int *numc,int *nc,int *lc,int *kc,double *ec, + double *ztotss,double *zsemss,double *zcorss, + double *ecorv,double *esemv,double *corden,double *semcor, + int *nrelc, + double *qcpsc_mt,double *qcpsc_ws,double *mcpsc_mt,double *mcpsc_ws, + int *iprpts,int *ipcore, + int *iprint,char *istop,int itop_length); +} + +#endif diff --git a/src/Core/Makefile b/src/Core/Makefile new file mode 100755 index 000000000..317b8fe01 --- /dev/null +++ b/src/Core/Makefile @@ -0,0 +1,20 @@ +OBJ = getcor_c.o calculateCoreStates.o corslv_c.o deepst_c.o semcst_c.o \ + inws_c.o outws_c.o inwhnk_c.o invals_c.o richnk_c.o srcore.o se.o + +all: libCore.a + +clean: + rm -f *.a *.o + +%.o : %.cpp + $(CXX) $(INC_PATH) -c -o $@ $< + +%.o : %.f + $(F77) -c -o $@ $< + +%.o : %.f90 + $(F77) -c -o $@ $< + +libCore.a : $(OBJ) + $(AR) -r libCore.a $(OBJ) + cp libCore.a $(TOP_DIR)/lib diff --git a/src/Core/calculateCoreStates.cpp b/src/Core/calculateCoreStates.cpp new file mode 100644 index 000000000..b48d338a7 --- /dev/null +++ b/src/Core/calculateCoreStates.cpp @@ -0,0 +1,71 @@ +#include "Main/SystemParameters.hpp" +#include "Communication/LSMSCommunication.hpp" +#include "CoreStates.hpp" + +void calculateCoreStates(LSMSCommunication &comm, LSMSSystemParameters &lsms, LocalTypeInfo &local) +{ + for(int i=0; i=0) printf("\ncalculateCoreState %d.%d\n",comm.rank,i); + getcor_(&lsms.n_spin_pola,&lsms.mtasa, + &local.atom[i].jmt,&local.atom[i].jws,&local.atom[i].r_mesh[0],&local.atom[i].h,&local.atom[i].xstart, + &local.atom[i].vr(0,0), + &local.atom[i].numc,&local.atom[i].nc(0,0),&local.atom[i].lc(0,0),&local.atom[i].kc(0,0),&local.atom[i].ec(0,0), + &local.atom[i].ztotss,&local.atom[i].zsemss,&local.atom[i].zcorss, + &local.atom[i].ecorv[0],&local.atom[i].esemv[0],&local.atom[i].corden(0,0),&local.atom[i].semcor(0,0), + &lsms.nrelc, + &local.atom[i].qcpsc_mt,&local.atom[i].qcpsc_ws,&local.atom[i].mcpsc_mt,&local.atom[i].mcpsc_ws, + &local_iprpts,&local_ipcore, + &lsms.global.iprint,lsms.global.istop,32); + } + +// calculate the global maximum of ec: + Real etopcor=-10.0e+20; + for(int i=0; i0) + { + etopcor=std::max(local.atom[i].ec(local.atom[i].numc-1,0),etopcor); + if(local.atom[i].nspin>1) etopcor=std::max(local.atom[i].ec(local.atom[i].numc-1,1),etopcor); + } + } + globalMax(comm,etopcor); + +/* + if(etopcor+0.1d0 .gt. ebot) then + write(6,'('' GETCOR: etopcor+0.1 .gt. ebot'',2d12.5)') + > etopcor,ebot + call kill(0,9) + call fstop(sname) + endif +*/ +} + +void calculateCoreStates(LSMSCommunication &comm, LSMSSystemParameters &lsms, AlloyAtomBank &alloyBank) { + + // for Wang-Landau for metallic alloys + // overloaded existing routine for alloy potentials + + for(int i = 0; i < alloyBank.size(); i++) + for(int j = 0; j < alloyBank[i].size(); j++) { + AtomData &atom = alloyBank[i][j]; + + int local_iprpts = atom.vr.l_dim(); + int local_ipcore = atom.ec.l_dim(); + if(lsms.global.iprint>=0) printf("\nalloy bank : calculateCoreState %d.%d\n",comm.rank,i); + getcor_(&lsms.n_spin_pola,&lsms.mtasa, + &atom.jmt,&atom.jws,&atom.r_mesh[0],&atom.h,&atom.xstart, + &atom.vr(0,0), + &atom.numc,&atom.nc(0,0),&atom.lc(0,0),&atom.kc(0,0),&atom.ec(0,0), + &atom.ztotss,&atom.zsemss,&atom.zcorss, + &atom.ecorv[0],&atom.esemv[0],&atom.corden(0,0),&atom.semcor(0,0), + &lsms.nrelc, + &atom.qcpsc_mt,&atom.qcpsc_ws,&atom.mcpsc_mt,&atom.mcpsc_ws, + &local_iprpts,&local_ipcore, + &lsms.global.iprint,lsms.global.istop,32); + } + +} diff --git a/src/Core/corslv_c.f b/src/Core/corslv_c.f new file mode 100755 index 000000000..e5b555cf0 --- /dev/null +++ b/src/Core/corslv_c.f @@ -0,0 +1,206 @@ +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine corslv(jmt,jws,last,last2,h,r,rv,z, + > numc,nc,lc,kc,ecore, + > corden,semden, + > ecorv,esemv, + > n_spin_pola,nrelc,ndeepz, + > iprpts, + > iprint,istop) +c ================================================================ +c + implicit none +c + character sname*32 + character istop*32 +c +! include 'atom_param.h' +c + integer iprpts + integer numc + integer nc(numc) + integer lc(numc) + integer kc(numc) + integer jmt + integer jws + integer n_spin_pola + integer nrelc + integer ndeepz + integer last + integer last2 + integer nitmax + integer i + integer j + integer iter + integer iprint + integer ndeep + integer kappa + integer ipdeq +c + real*8 ecore(numc) + real*8 r(iprpts),rtmp(0:iprpts) + real*8 rv(iprpts) + real*8 corden(iprpts) + real*8 semden(iprpts) + real*8 f(0:iprpts) + real*8 h + real*8 z + real*8 zero + real*8 one + real*8 two + real*8 four + real*8 ten + real*8 onh + real*8 tol + real*8 fnstrc + real*8 c + real*8 esemv + real*8 ecorv + real*8 fac1 + real*8 gnrm,qmp(0:iprpts) +c + parameter (ipdeq=5) +c + parameter (zero=0.0d+00) + parameter (one=1.0d+00) + parameter (two=2.0d+00) + parameter (four=4.0d+00) + parameter (ten=10.0d+00) + parameter (onh=137.0359895d+00) + parameter (tol=1.0d-10) + parameter (sname='corslv') + integer solver +! parameter (solver=2) + parameter (solver=1) + integer nr + parameter (nr=4) + real*8 potc(nr,iprpts) +c +c **************************************************************** +c this routine drives the radial equations solution for the +c core states. it must be called for each component(sublattice) +c separately. +c +c calls: deepst(outws,inws) +c semcor(outws,hank) +c +c r= radial grid, rv=potential times r +c ecore= core levels guesses: to be updated +c g,f upper and lower components times r +c corden= core charge density +c nc= principal q. nos., lc= orbital q. nos., kc= kappa q.nos. +c numc= no. of core states, z= atomic no., jmt=muffin-tin index +c ndeepz= number of deep core electrons based on zcor +c jws=top r index +c **************************************************************** +c + if (numc.le.0) then + esemv=zero + ecorv=zero + return + endif + nitmax=50 + if(solver.eq.1) then + fnstrc=one/onh + c=two/fnstrc + c=c*ten**nrelc + else + call fitpot(r,rv,potc,nr,jmt,last) + endif +c +c ================================================================ +c call deepst for each core state................................. +c ================================================================ + esemv=zero + ecorv=zero + ndeep=0 + do i=1,numc + fac1=(3-n_spin_pola)*abs(kc(i)) + ndeep=ndeep+fac1 + if(solver.eq.1) then +c ------------------------------------------------------------- + call deepst(nc(i),lc(i),kc(i),ecore(i), + > rv,r,f(1),h,z,c,nitmax,tol,jws,last,iter, + > iprpts,ipdeq) +c ------------------------------------------------------------- +c +c ============================================================= +c when core state energy >-10 then treat as semi-core.......... +c ============================================================= +c08/04/95if( ecore(i) .ge. -ten ) then + if(ndeep.gt.ndeepz)then +c ---------------------------------------------------------- + call semcst(nc(i),lc(i),kc(i),ecore(i), + > rv,r,f(1),h,z,c,nitmax,tol,jmt,jws,last2,iter, + > iprpts,ipdeq) +c ---------------------------------------------------------- + endif + else + if(nrelc.eq.0) then + kappa=kc(i) + else + kappa=lc(i) + endif + call srcore(nrelc.eq.0,ecore(i),f(1),nc(i),kappa,potc,nr, + & r,nitmax,tol,last2,1.d0) + endif +c ================================================================ +c normalize the wavefunctions +c ================================================================ + f(0)=0.d0 + rtmp(0)=0.d0 + do j=1,last2 + rtmp(j)=sqrt(r(j)) + f(j)=f(j)/r(j) + enddo +c ---------------------------------------------------------------- + call newint(last2+1,rtmp,f,qmp,3) +c ---------------------------------------------------------------- + gnrm=1.d0/(two*qmp(last2)) + do j=1,last2 + f(j)=f(j)*gnrm*r(j) + enddo + if(ndeep.gt.ndeepz)then + do j=1,last2 + semden(j)=semden(j) + fac1*f(j) + enddo + esemv=esemv+ecore(i)*fac1 + else + do j=1,last2 + corden(j)= corden(j) + fac1*f(j) + enddo + ecorv=ecorv+ecore(i)*fac1 + endif + enddo +c +c ================================================================ +c Major printout: core eigenvalues................................ +c ================================================================ + if(iprint.ge.0) then + write(6,'(/,'' CORSLV:: Eigenvalues:'',t25,''n'',t30, + > ''l'',t35,''k'',t48,''energy'')') + do i=1,numc + write(6,'(t23,i3,t28,i3,t33,i3,t41,d20.13)') + > nc(i),lc(i),kc(i),ecore(i) + enddo + endif + if(iprint.ge.0) then + write(6,'(10x,''Energy core:'',t40,''='',d16.8)')ecorv + write(6,'(10x,''Energy semicore:'',t40,''='',d16.8)')esemv + endif +c *************************************************************** + if(iprint.ge.1) then + write(6,'(/,'' CORSOLV::'')') + do j=1,last,50 + write(6,'('' j,corden,semden: '',i5,3d20.12)') + > j,corden(j),semden(j) + enddo + endif +c *************************************************************** +c +c ================================================================== + if(istop.eq.sname) then + call fstop(sname) + endif +c + return + end diff --git a/src/Core/corslv_c_htest.f b/src/Core/corslv_c_htest.f new file mode 100755 index 000000000..5277709e3 --- /dev/null +++ b/src/Core/corslv_c_htest.f @@ -0,0 +1,225 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine corslv(jmt,jws,last,last2,h,r,rv,z, + > numc,nc,lc,kc,ecore, + > corden,semden, + > ecorv,esemv, + > n_spin_pola,nrelc,ndeepz,iprint,istop) +c ================================================================ +c + implicit none +c + character sname*20 + character istop*32 +c + include 'atom_param.h' +c + integer numc + integer nc(numc) + integer lc(numc) + integer kc(numc) + integer jmt + integer jws + integer n_spin_pola + integer nrelc + integer ndeepz + integer last + integer last2 + integer nitmax + integer i + integer j + integer iter + integer iprint + integer ndeep + integer kappa +c + real*8 ecore(numc) + real*8 r(iprpts),rtmp(0:iprpts) + real*8 rv(iprpts) + real*8 corden(iprpts) + real*8 semden(iprpts) + real*8 f(0:iprpts) + real*8 h + real*8 z + real*8 zero + real*8 one + real*8 two + real*8 four + real*8 ten + real*8 onh + real*8 tol + real*8 fnstrc + real*8 c + real*8 esemv + real*8 ecorv + real*8 fac1 + real*8 gnrm,qmp(0:iprpts) +c + parameter (zero=0.0d+00) + parameter (one=1.0d+00) + parameter (two=2.0d+00) + parameter (four=4.0d+00) + parameter (ten=10.0d+00) + parameter (onh=137.0359895d+00) + parameter (tol=1.0d-10) + parameter (sname='corslv') + integer solver + parameter (solver=1) + integer nr + parameter (nr=4) + real*8 potc(nr,iprpts) + logical hydrogen ! for testing the code + parameter( hydrogen=.true.) +c +c **************************************************************** +c this routine drives the radial equations solution for the +c core states. it must be called for each component(sublattice) +c separately. +c +c calls: deepst(outws,inws) +c semcor(outws,hank) +c +c r= radial grid, rv=potential times r +c ecore= core levels guesses: to be updated +c g,f upper and lower components times r +c corden= core charge density +c nc= principal q. nos., lc= orbital q. nos., kc= kappa q.nos. +c numc= no. of core states, z= atomic no., jmt=muffin-tin index +c ndeepz= number of deep core electrons based on zcor +c jws=top r index +c **************************************************************** +c + if(hydrogen) then + do i=1,last + rv(i)=-2.d0*z + enddo + numc=min(numc,ndeepz) + endif + if (numc.le.0) then + esemv=zero + ecorv=zero + return + endif + nitmax=50 + fnstrc=one/onh + c=two/fnstrc + c=c*ten**nrelc + if(solver.eq.1) then + else + call fitpot(r,rv,potc,nr,jmt,last) + endif +c +c ================================================================ +c call deepst for each core state................................. +c ================================================================ + esemv=zero + ecorv=zero + ndeep=0 + do i=1,numc + fac1=(3-n_spin_pola)*abs(kc(i)) + ndeep=ndeep+fac1 +C if(hydrogen) ecore(i)=-z*z/(nc(i)*nc(i)) + if(solver.eq.1) then +c ------------------------------------------------------------- + call deepst(nc(i),lc(i),kc(i),ecore(i), + > rv,r,f(1),h,z,c,nitmax,tol,jws,last,iter) +c ------------------------------------------------------------- +c +c ============================================================= +c when core state energy >-10 then treat as semi-core.......... +c ============================================================= +c08/04/95if( ecore(i) .ge. -ten ) then + if(ndeep.gt.ndeepz)then +c ---------------------------------------------------------- + call semcst(nc(i),lc(i),kc(i),ecore(i), + > rv,r,f(1),h,z,c,nitmax,tol,jmt,jws,last2,iter) +c ---------------------------------------------------------- + endif + else + if(nrelc.eq.0) then + kappa=kc(i) + else + kappa=lc(i) + endif + call srcore(nrelc.eq.0,ecore(i),f(1),nc(i),kappa,potc,nr, + & r,nitmax,tol,last,1.d0) + endif +c ================================================================ +c normalize the wavefunctions +c ================================================================ + f(0)=0.d0 + rtmp(0)=0.d0 + do j=1,last2 + rtmp(j)=sqrt(r(j)) + enddo +c ---------------------------------------------------------------- + call newint(last2+1,rtmp,f,qmp,1) +c ---------------------------------------------------------------- + gnrm=1.d0/(two*qmp(last2)) + do j=1,last2 + f(j)=f(j)*gnrm + enddo + if(ndeep.gt.ndeepz)then + do j=1,last + semden(j)=semden(j) + fac1*f(j) + enddo + esemv=esemv+ecore(i)*fac1 + else + do j=1,last + corden(j)= corden(j) + fac1*f(j) + enddo + ecorv=ecorv+ecore(i)*fac1 + endif + enddo +c +c ================================================================ +c Major printout: core eigenvalues................................ +c ================================================================ + if(hydrogen) then + if(iprint.ge.0) then + write(6,'(/,'' CORSLV:: Eigenvalues:'',t25,''n'',t28, + > ''l'',t31,''k'',t42,''energy'')') + do i=1,numc + if(nrelc.eq.0) then + fac1=z*fnstrc/(nc(i)-abs(kc(i))+sqrt(kc(i)*kc(i)- + & z*z*fnstrc*fnstrc)) + ecorv=0.5d0*c*c*(1.d0/sqrt(1.d0+fac1*fac1)-1.d0) + else + ecorv=-z*z/(nc(i)*nc(i)) + endif + write(6,'(t23,i3,t26,i3,t29,i3,t35,1p2d20.12)') + > nc(i),lc(i),kc(i),ecore(i),ecorv + enddo + stop + endif + else + if(iprint.ge.0) then + write(6,'(/,'' CORSLV:: Eigenvalues:'',t25,''n'',t30, + > ''l'',t35,''k'',t48,''energy'')') + do i=1,numc + write(6,'(t23,i3,t28,i3,t33,i3,t41,d20.13)') + > nc(i),lc(i),kc(i),ecore(i) + enddo + endif + endif + if(iprint.ge.0) then + write(6,'(10x,''Energy core:'',t40,''='',d16.8)')ecorv + write(6,'(10x,''Energy semicore:'',t40,''='',d16.8)')esemv + endif +c *************************************************************** + if(iprint.ge.1) then + write(6,'(/,'' CORSOLV::'')') + do j=1,last,50 + write(6,'('' j,corden,semden: '',i5,3d20.12)') + > j,corden(j),semden(j) + enddo + endif +c *************************************************************** +c +c ================================================================== + if(istop.eq.sname) then + call fstop(sname) + endif +c + return + end diff --git a/src/Core/deepst_c.f b/src/Core/deepst_c.f new file mode 100755 index 000000000..d80099535 --- /dev/null +++ b/src/Core/deepst_c.f @@ -0,0 +1,254 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine deepst(nqn,lqn,kqn,en,rv,r,rf,h,z,c, + > nitmax,tol,nws,nlast,iter,iprpts,ipdeq) +c ================================================================ +c +c core states solver ...............................bg...june 1990 +c energy eigenvalues are found by newton-raphson method matching +c at the classical inversion point the f/g ratio. the energy +c derivative of f/g is evaluated analitically: see rose's book, +c chapter 4, pages 163-169, and also jp desclaux code............. +c +c calls: outws(invals) and inws +c +c variables explanation: +c +c nqn: principal quantum number; +c lqn: orbital quantum number; +c kqn: kappa quantum number; +c en: energy; +c rv: potential in rydbergs times r; +c r: radial log. grid; +c rg: big component; +c rf: small component; +c h: exp. step; +c z: atomic number; +c nitmax: number of iterations; +c tol: energy tolerance; +c nws: bounding sphere radius index; +c nlast: last tabulation point; +c c: speed of light in rydbergs; +c drg,drf: wavefunctions derivatives times r; +c gam: first power for small r expansion; +c slp: slope at the origin; +c dm: h/720; +c **************************************************************** + implicit none +c +! include 'atom_param.h' +c + character sname*32 +c + integer ipdeq + integer iprpts + integer nqn + integer lqn + integer kqn + integer nitmax + integer nws + integer nlast + integer iter + integer imm + integer nodes + integer lll + integer invp + integer j + integer nmax +c + real*8 rg(iprpts) + real*8 rf(iprpts) + real*8 rv(iprpts) + real*8 r(iprpts),rtmp(0:iprpts) + real*8 tmp(0:iprpts) + real*8 qmp(0:iprpts) + real*8 drg(ipdeq*2) + real*8 drf(ipdeq*2) + real*8 en + real*8 h + real*8 z + real*8 c + real*8 tol + real*8 dk + real*8 dm + real*8 gam + real*8 sign + real*8 slp + real*8 elim + real*8 rfm + real*8 rgm + real*8 rose + real*8 fnrm + real*8 val + real*8 de + real*8 gnrm + real*8 enew +c + parameter (sname='deepst') +c + +! write(*,*) "Entering DEEPST" +c ================================================================ +c check grid and see if core routine will work on this grid +c ================================================================ + if(nws+ipdeq*2 .gt. iprpts) then + write(6,'('' DEEPST::core cannot work:'', + > '' nws+ipdeq2.gt.iprpts'')') + call fstop(sname) + endif +c +c ================================================================ +c initialize quantities +c ================================================================ + imm=0 + iter=0 + dk=kqn + dm=h/720.0d0 + rtmp(0)=0.d0 + do j=1,iprpts + rtmp(j)=sqrt(r(j)) + enddo +c +c ================================================================ +c no. of nodes for the current states big component +c ================================================================ + nodes=nqn-lqn +c +c ================================================================ +c first power of small r expansion +c ================================================================ + gam=sqrt(dk*dk-4.0d0*z*z/(c*c)) +c +c ================================================================ +c slope of the wavefcns at the origine +c ================================================================ + if(nodes-2*(nodes/2).ne.0) then + sign= 1.0d0 + else + sign=-1.0d0 + endif + slp=sign*kqn/abs(kqn) +c +c ================================================================ +c find the lowest energy limit +c ================================================================ + lll=(lqn*(lqn+1))/2 + if (lll.ne.0) then + elim=-z*z/(0.75d0*nqn*nqn) + else + elim=(rv(1)+lll/r(1))/r(1) + do j=2,nlast + elim=min((rv(j)+lll/r(j))/r(j),elim) + enddo + endif +c +c ================================================================ +c check potential +c ================================================================ + if(elim.ge.0) then + write(6,'('' DEEPST:: v+l*(l+1)/r**2 always positive'',f5.1)')z + call fstop(sname) + endif +c + if(en.le.elim) en=elim*0.5d0 +c +c ================================================================ +c routine outws performs the outward integration +c ================================================================ +c ---------------------------------------------------------------- + 2 continue + call outws(invp,rg,rf,rv,r,en,c,drg,drf,elim,z, + > gam,slp,tol,imm,lll,dk,dm,nodes,nlast,iprpts,ipdeq) +c ---------------------------------------------------------------- +c +c ================================================================ +c store the inversion point values +c ================================================================ + rfm=rf(invp) + rgm=rg(invp) +c +c ================================================================ +c routine inws performs the inward integration +c ================================================================ +c ---------------------------------------------------------------- + call inws(invp,nmax,rg,rf,rv,r,en,c,drg,drf, + > dk,dm,nlast,imm,iprpts,ipdeq) +c ---------------------------------------------------------------- +c +c ================================================================ +c components match +c ================================================================ + fnrm=rgm/rg(invp) +c +c ================================================================ +c check first the sign of the big component +c ================================================================ + if (fnrm.lt.0.0d0) then + write(6,'('' DEEPST:: wrong big component change'')') + call fstop(sname) + endif +c + do j=invp,nmax + rg(j)=rg(j)*fnrm + rf(j)=rf(j)*fnrm + enddo +c +c ================================================================ +c energy derivative of the wvfcns "log. derivative" +c ================================================================ + tmp(0)=0.d0 + do j=1,nmax + tmp(j)=(rg(j)*rg(j)+rf(j)*rf(j)) + enddo + +! write (*,*) "about to call NEWINT ",nmax + call newint(nmax+1,rtmp,tmp,qmp,1) + rose=2.d0*qmp(nmax)+h*r(invp)*(rfm*rfm-rf(invp)*rf(invp))/3.0d0 +c +c ================================================================ +c energy update +c ================================================================ + de=rg(invp)*(rfm-rf(invp))*c/rose + imm=0 + val=abs(de/en) + if (val.le.tol) go to 7 + 5 enew=en+de + if(enew.lt.0.0d0) go to 6 + de=de+0.5d0 + val=val*0.5d0 + if (val.gt.tol) go to 5 +c +c ================================================================ +c just in case the energy becomes zero +c ================================================================ + write(6,'('' DEEPST:: zero energy'',f5.2)')z + call fstop(sname) +c +c ================================================================ +c not yet convergence: try again +c ================================================================ + 6 en=enew + if (val.le.0.2d0) imm=1 + iter=iter+1 + if(iter.le.nitmax) go to 2 +c +c ================================================================ +c not converged, too small tolerance or too small nitmax +c ================================================================ + write(6,'('' DEEPST:: warning: too many energy iterations'')') +c + 7 continue + do j=1,nmax + rf(j)=rf(j)*rf(j)+rg(j)*rg(j) + enddo + if(nmax.lt.nlast) then + do j=nmax+1,nlast + rf(j)=0.0d0 + enddo + endif +c +c ================================================================ +c end of job: waiting for next state +c ================================================================ + return + end diff --git a/src/Core/getcor_c.f b/src/Core/getcor_c.f new file mode 100755 index 000000000..ee55371a8 --- /dev/null +++ b/src/Core/getcor_c.f @@ -0,0 +1,252 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine getcor(n_spin_pola,mtasa, + > jmt,jws,r_mesh,h,xstart,vr, + > numc,nc,lc,kc,ec, + > ztotss,zsemss,zcorss, + > ecorv,esemv,corden,semcor, +!ebot,etopcor, + > nrelc, + > qcpsc_mt,qcpsc_ws,mcpsc_mt,mcpsc_ws, + > iprpts, ipcore, + > iprint,istop) +c ================================================================ +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc +! subroutine getcor(IN n_spin_pola,IN mtasa, +! > IN jmt,IN jws,IN r_mesh,IN h,IN xstart,IN vr, +! > IN numc,IN nc,IN lc,IN kc,INOUT ec, +! > IN ztotss,IN zsemss,IN zcorss, +! > OUT ecorv,OUT esemv,OUT corden,OUT semcor, +! > IN nrelc, +! > OUT qcpsc_mt,OUT qcpsc_ws,OUT mcpsc_mt,OUT mcpsc_ws, +! > IN iprpts, IN ipcore, +! > IN iprint,IN istop) +c ================================================================ +! use MPPModule, only : GlobalMax +c + implicit none +c + character istop*32 + character sname*32 +c +! include 'atom_param.h' +c + integer iprpts,ipcore + integer n_spin_pola + integer mtasa + integer jmt + integer jws + integer last + integer last2 + integer numc + integer nc(ipcore,n_spin_pola) + integer lc(ipcore,n_spin_pola) + integer kc(ipcore,n_spin_pola) + integer nrelc + integer ndeepz + integer iprint + integer is + integer j +c + real*8 r_mesh(iprpts),rtmp(0:iprpts) + real*8 h + real*8 xstart + real*8 vr(iprpts,n_spin_pola) + real*8 ec(ipcore,n_spin_pola) + real*8 ztotss + real*8 zsemss + real*8 zcorss + real*8 qsemmt + real*8 qcormt + real*8 qsemws + real*8 qcorws + real*8 qcorout + real*8 qcpsc_mt + real*8 qcpsc_ws + real*8 mcpsc_mt + real*8 mcpsc_ws + real*8 ecorv(n_spin_pola) + real*8 esemv(n_spin_pola) + real*8 corden(iprpts,n_spin_pola) + real*8 semcor(iprpts,n_spin_pola) +! real*8 ebot + real*8 wrk1(0:iprpts),wrk2(0:iprpts) + real*8 zero + real*8 tolch +! real*8 etopcor + real*8 work +c + parameter (zero=0.0d0) + real*8 two + parameter (two=2.0d0) + parameter (tolch=.000001d0) + parameter (sname='getcor') +c + if(n_spin_pola.eq.2) then + do is=1,numc + if( nc(is,1).ne.nc(is,2) .or. + > lc(is,1).ne.lc(is,2) .or. kc(is,1).ne.kc(is,2) )then + write(6,'('' i,nc(i,1),nc(i,2) ='',3i5)') + > is,nc(is,1),nc(is,2) + write(6,'('' i,lc(i,1),lc(i,2) ='',3i5)') + > is,lc(is,1),lc(is,2) + write(6,'('' i,kc(i,1),kc(i,2) ='',3i5)') + > is,kc(is,1),kc(is,2) + call fstop(sname) + endif + enddo + endif +c +c ================================================================ +c calculate the core and semi-core densities...................... +c ================================================================ + ndeepz=(zcorss/n_spin_pola+.5d0) + last=iprpts + if(mtasa.eq.0) then + last2=last + else + last2=jws + endif +! etopcor=-10.0d+20 +c ---------------------------------------------------------------- + call zeroout(corden,iprpts*n_spin_pola) + call zeroout(semcor,iprpts*n_spin_pola) + call zeroout(ecorv,n_spin_pola) + call zeroout(esemv,n_spin_pola) +c ---------------------------------------------------------------- + qsemmt=zero + qcormt=zero + qsemws=zero + qcorws=zero + mcpsc_mt=zero + mcpsc_ws=zero + do is=1,n_spin_pola + if(iprint.ge.0) then + write(6,'(/,'' GETCOR:: Spin index'',t40,''='',1i5)')is + endif + if(iprint.ge.2) then + write(*,*) jmt,jws,last,last2,h,r_mesh(1),vr(1,is),ztotss + write(*,*) numc,nc(1,is),lc(1,is),kc(1,is),ec(1,is) + write(*,*) corden(1,is),semcor(1,is) + write(*,*) ecorv(is),esemv(is) + write(*,*) n_spin_pola,nrelc,ndeepz,iprpts,iprint,istop + endif +c ------------------------------------------------------------- + call corslv(jmt,jws,last,last2,h,r_mesh,vr(1,is),ztotss, + > numc,nc(1,is),lc(1,is),kc(1,is),ec(1,is), + > corden(1,is),semcor(1,is), + > ecorv(is),esemv(is), + > n_spin_pola,nrelc,ndeepz,iprpts,iprint,istop) +c ------------------------------------------------------------- +c +c ============================================================= +c adjust bottom of cotour: above highest semi-core state +c ============================================================= + if(numc.gt.0) then +! etopcor=max(ec(numc,is),etopcor) +c ========================================================== +c check the charges......................................... +c ---------------------------------------------------------- +c call simpun(r_mesh,semcor(1,is),iprpts,1,wrk1) + rtmp(0)=0.d0 + wrk2(0)=0.d0 + do j=1,last2 + wrk2(j)=semcor(j,is)/r_mesh(j) + rtmp(j)=sqrt(r_mesh(j)) + enddo + call newint(last2+1,rtmp,wrk2,wrk1,3) +c ---------------------------------------------------------- + qsemmt=qsemmt+two*wrk1(jmt) + qsemws=qsemws+two*wrk1(last2) + mcpsc_mt=mcpsc_mt+two*(3-2*is)*wrk1(jmt) + mcpsc_ws=mcpsc_ws+two*(3-2*is)*wrk1(last2) +c ---------------------------------------------------------- +c call simpun(r_mesh,corden(1,is),iprpts,1,wrk1) + wrk2(0)=0.d0 + do j=1,last2 + wrk2(j)=corden(j,is)/r_mesh(j) + enddo + call newint(last2+1,rtmp,wrk2,wrk1,3) +c ---------------------------------------------------------- + qcormt=qcormt+two*wrk1(jmt) + qcorws=qcorws+two*wrk1(last2) + mcpsc_mt=mcpsc_mt+two*(3-2*is)*wrk1(jmt) + mcpsc_ws=mcpsc_ws+two*(3-2*is)*wrk1(last2) + endif + enddo + qcorout=zsemss+zcorss-qsemmt-qcormt + qcpsc_mt=qcormt+qsemmt + qcpsc_ws=qcorws+qsemws + if(iprint.ge.0 .and. abs(qcorout).ge.0.001) then + write(6,'(/,'' GETCOR:: Muffin-tin core charge'',t40,''='', + > f16.11)') qcormt + write(6,'(10x,''Muffin-tin semicore charge'',t40,''='', + > f16.11)') qsemmt + endif + if(iprint.ge.0) then + write(6,'(/,'' GETCOR:: Muffin-tin core charge'',t40,''='', + > f16.11)') qcormt + write(6,'(10x,''Muffin-tin semicore charge'',t40,''='', + > f16.11)') qsemmt + write(6,'(10x,''Muffin-tin core+semi moment'',t40,''='', + > f16.11)') mcpsc_mt + write(6,'(10x,''Wigner-Seitz core+semi moment'',t40,''='', + > f16.11)') mcpsc_ws + write(6,'(10x,''Interstitial charge core'',t40,''='', + > f16.11)') qcorout + endif +c *************************************************************** + if(iprint.ge.1) then + write(6,'(/,'' GETCOR::'')') + do j=1,last2,50 + write(6,'('' j,corden[1:2]: '',i5,3d20.12)') + > j,corden(j,1),corden(j,2),corden(j,1)-corden(j,2) + enddo + do j=1,last2,50 + write(6,'('' j,semcor[1:2]: '',i5,3d20.12)') + > j,semcor(j,1),semcor(j,2),semcor(j,1)-semcor(j,2) + enddo + endif +c *************************************************************** +c =============================================================== +c Find the uppermost core state across all the nodes/atoms........ +c --------------------------------------------------------------- +! call GlobalMax(etopcor) +c --------------------------------------------------------------- +c +! if(iprint.eq.0) then +! write(6,'(10x,''Upper limit of core level'',t40,''='', +! > f16.11)')etopcor +! endif +c +c =============================================================== +c check that uppermost core state is well below ebot............. +c =============================================================== +! if(etopcor+0.1d0 .gt. ebot) then +! write(6,'('' GETCOR: etopcor+0.1 .gt. ebot'',2d12.5)') +! > etopcor,ebot +! call kill(0,9) +! call fstop(sname) +! endif +c +c =============================================================== +c check that semi-core and deep-core charge is not being lost.... +c =============================================================== + if(abs(qsemws-zsemss).gt.tolch .and. iprint.ge.0) then + write(6,'(/,10x,''Lost semi-core charge'')') + write(6,'(10x,''z='',d17.8,'' q='',f17.8)') zsemss,qsemws +c call fstop(sname) + else if(abs(qcorws-zcorss).gt.tolch .and. iprint.ge.0) then + write(6,'(/,10x,''Lost core charge'')') + write(6,'(10x,''z='',d17.8,'' q='',f17.8)') zcorss,qcorws +c call fstop(sname) + endif +c +c ================================================================ + if(istop.eq.sname) then + call fstop(sname) + else + return + endif +c + end diff --git a/src/Core/invals_c.f b/src/Core/invals_c.f new file mode 100755 index 000000000..0f722efe1 --- /dev/null +++ b/src/Core/invals_c.f @@ -0,0 +1,132 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine invals(rg,rf,r,slp,gam,v,z,tol, + > drg,drf,en,c,dk,iprpts,ipdeq) +c ================================================================ +c +c **************************************************************** +c initial values for outward integration.......................... +c modified desclaux code.................bg.....june 1990......... +c +c variables explanation: ......................................... +c +c rg: big component times r; +c rf: small component times r; +c r: radial log. grid; +c slp: slope at the origine; +c gam: 1st term power; +c v: potential at the first point; +c z: atomic number; +c tol: check for convergence; +c drg,drf: derivatives times r; +c c: speed of light in rydbergs; +c en: energy in rydbergs; +c dk: spin angular quantum number; +c **************************************************************** + implicit none +c +! include 'atom_param.h' +c + character sname*20 + + integer iprpts,ipdeq +c + integer j + integer m + integer k +c + real*8 slp + real*8 gam + real*8 v + real*8 z + real*8 tol + real*8 en + real*8 c + real*8 dk + real*8 rg(iprpts) + real*8 rf(iprpts) + real*8 r(iprpts) + real*8 drg(2*ipdeq) + real*8 drf(2*ipdeq) + real*8 zalfa + real*8 term1 + real*8 term2 + real*8 pow1 + real*8 pow2 + real*8 dm + real*8 ratfg + real*8 sum + real*8 rfr + real*8 rgr + real*8 zero + real*8 one + real*8 two +c + parameter (zero=0.d0) + parameter (one=1.d0) + parameter (two=2.d0) + parameter (sname='invals') +c + +! write(*,*) "Entering INVALWS" +c =============================================================== + zalfa=two*z/c + term1=-zalfa + term2=zalfa/r(1)+(v-en)/c +c + do j=1,2*ipdeq + rg(j)=zero + rf(j)=zero + enddo +c + if( dk .le. zero ) then + ratfg=(dk-gam)/zalfa + else + ratfg=zalfa/(dk+gam) + endif +c + rf(2*ipdeq)=slp + rg(2*ipdeq)=ratfg*slp +c + do j=1,ipdeq + rg(j)=rg(2*ipdeq) + rf(j)=rf(2*ipdeq) + drg(j)=rg(j)*gam + drf(j)=rf(j)*gam + enddo + m=1 +c + 30 dm=m+gam + sum=dm*dm-dk*dk+term1*term1 + rfr=(c-term2)*rf(m+2*ipdeq-1) + rgr=term2*rg(m+2*ipdeq-1) + pow1=((dm-dk)*rfr-term1*rgr)/sum + pow2=((dm+dk)*rgr+term1*rfr)/sum + k=-1 +c + do j=1,ipdeq + rgr=r(j)**m + rfr=pow2*rgr + rgr=pow1*rgr + if( m.ne.1 .and. abs(rgr/rg(j)).le.tol .and. + > abs(rfr/rf(j)).le.tol ) k=1 + rg(j)=rg(j)+rgr + rf(j)=rf(j)+rfr + drg(j)=drg(j)+rgr*dm + drf(j)=drf(j)+rfr*dm + enddo +c + if( k .eq. 1 ) return +c + rg(m+2*ipdeq)=pow1 + rf(m+2*ipdeq)=pow2 + m=m+1 +c + if( m .le. 20 ) go to 30 +c +c ============================================================== + write(6,'('' INVALS:: no convergence in small r expansion'')') + call fstop(sname) +c + return + end diff --git a/src/Core/inwhnk_c.f b/src/Core/inwhnk_c.f new file mode 100755 index 000000000..b1d2e1d77 --- /dev/null +++ b/src/Core/inwhnk_c.f @@ -0,0 +1,99 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine inwhnk(invp,nmax,rg,rf,rv,r,en,c,drg,drf, + > dk,dm,nws,imm,iprpts,ipdeq) +c ================================================================ + implicit none +c +! include 'atom_param.h' +c +c **************************************************************** +c drg,drf: derivative of dp and dq times r; +c c : speed of light. +c +c free solutions ....... riccati-hankel functions +c **************************************************************** +c + integer iprpts,ipdeq + integer invp + integer nmax + integer nws + integer imm + real*8 kappa + integer l + integer ll + integer lp + integer n +c + real*8 rg(iprpts) + real*8 rf(iprpts) + real*8 rv(iprpts) + real*8 r(iprpts) + real*8 en + real*8 c + real*8 drf(2*ipdeq) + real*8 drg(2*ipdeq) + real*8 dk + real*8 dm +c + real*8 mass + real*8 zero + real*8 cinv + real*8 c2inv + real*8 ak + real*8 sgnk + real*8 factor +c + complex*16 bh(10) + complex*16 dh(10) + complex*16 x + complex*16 p + complex*16 mil + complex*16 sqrtm1 + complex*16 mi +c + parameter (sqrtm1=(0.d0,1.d0)) + parameter (mi=(0.d0,-1.d0)) + parameter (zero=0.d0) +c + cinv=1.d0/c + c2inv=cinv*cinv + mass=(1.d0 + en*c2inv) + p=sqrt(dcmplx(en*mass,zero) ) +c + kappa=dk + ak=abs(dk) + sgnk=dk/ak + factor= sgnk*sqrt( -en/mass )*cinv +c +c ================================================================ +c officially this is L+1 +c ================================================================ + l = ak + (1+sgnk)/2 + lp=l - sgnk + mil=sqrtm1**(l-1) +c +c ================================================================ +c maximum l needed for this kappa +c ================================================================ + ll=max(l,lp) +c + do n=iprpts,invp,-1 + x=p*r(n) +c ------------------------------------------------------------- + call richnk(ll,x,bh,dh) +c ------------------------------------------------------------- +c +c ============================================================= +c NOTE: working on log-mesh so need extra factor of r for rdg +c and drf. +c ============================================================= + rg(n)=-mi*mil*bh(l) + rf(n)=-factor*mil*bh(lp) + enddo +c + drg(ipdeq)=-x*(mi*mil*dh(l)) + drf(ipdeq)=-x*factor*mil*dh(lp) +c + return + end diff --git a/src/Core/inws_c.f b/src/Core/inws_c.f new file mode 100755 index 000000000..942c03461 --- /dev/null +++ b/src/Core/inws_c.f @@ -0,0 +1,120 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine inws(invp,nmax,rg,rf,rv,r,en,c,drg,drf,dk,dm,nws,imm, + > iprpts,ipdeq) +c ================================================================ +c + implicit none +c +! include 'atom_param.h' +c + integer iprpts,ipdeq + integer invp,nmax,nws,imm + integer i,j,itop,l +c + real*8 en,c,dk,dm + real*8 r(iprpts),rv(iprpts),rg(iprpts),rf(iprpts) + real*8 drf(ipdeq*2),drg(ipdeq*2) + real*8 p,pq,dpr,dqr,er,emvoc,dq,dp + real*8 zero,one,two,three,four + real*8 ten,twtnth,half,thrqrt + real*8 twntsvn,fhnd,fhd,sixhnd + real*8 coef1,coef2 +c + parameter (zero=0.d0,one=1.d0,two=2.d0,three=3.d0,four=4.d0) + parameter (ten=10.d0,twtnth=two/ten,half=one/two) + parameter (thrqrt=three/four) + parameter (twntsvn=27.d0,fhnd=475.d0,fhd=502.d0,sixhnd=600.d0) + parameter (coef1=.9462151394422310d+00) + parameter (coef2=.0537848605577689d+00) +c +c **************************************************************** +c adams 5 points diff. eq. solver for dirac equations +c +c drg,drf enrivatives of dp and dq times r; c speed of light +c rv potential times r; r: radial grid; en energy guess +c coef1=475./502., coef2=27./502. +c **************************************************************** +c +! write(*,*) "Entering INWS" + +c ================================================================ +c at first find the last point where the wavefcns are not zero +c ================================================================ + if( imm .ne. 1 ) then + do j=1,nws,3 + nmax=nws+1-j + if( (rv(nmax)-en*r(nmax))*r(nmax) .le. sixhnd ) go to 20 + enddo + endif +c +c ================================================================ +c initial values for inward integration +c ================================================================ + 20 continue + p=sqrt(-en*(one+en/(c*c))) + pq=-p/(c+en/c) + do i=1,ipdeq + j=nmax+1-i + rg(j)=exp(-p*r(j)) + drg(i)=-p*rg(j)*r(j) + rf(j)=pq*rg(j) + drf(i)=pq*drg(i) + enddo + itop=nmax-ipdeq +c +c ================================================================ +c solve dirac equations now +c ================================================================ + do i=invp,itop + j=itop-i+invp +c +c ============================================================= +c 5 points predictor +c ============================================================= + dpr= rg(j+1) - dm*(2.51d+02*drg(1)-1.274d+03*drg(2)+ + > 2.616d+03*drg(3)-2.774d+03*drg(4)+1.901d+03*drg(5) ) + dqr= rf(j+1) - dm*(2.51d+02*drf(1)-1.274d+03*drf(2)+ + > 2.616d+03*drf(3)-2.774d+03*drf(4)+1.901d+03*drf(5) ) +c +c ============================================================= +c shift derivatives +c ============================================================= + do l=2,ipdeq + drg(l-1)=drg(l) + drf(l-1)=drf(l) + enddo +c +c ============================================================= +c dirac equations (log. mesh) +c ============================================================= + er=en*r(j) + emvoc=(er-rv(j))/c + drg(ipdeq)=-dk*dpr+(c*r(j)+emvoc)*dqr + drf(ipdeq)=dk*dqr-emvoc*dpr +c +c ============================================================= +c 5 points corrector +c ============================================================= + dp= rg(j+1) - dm*(-1.9d+01*drg(1)+1.06d+02*drg(2) + > -2.64d+02*drg(3)+ 6.46d+02*drg(4)+2.51d+02*drg(5)) + dq= rf(j+1) - dm*(-1.9d+01*drf(1)+1.06d+02*drf(2) + > -2.64d+02*drf(3)+ 6.46d+02*drf(4)+2.51d+02*drf(5)) +c +c ============================================================= +c mixing +c ============================================================= + dp=coef1*dp+coef2*dpr + dq=coef1*dq+coef2*dqr + rg(j)=dp + rf(j)=dq +c +c ============================================================= +c update derivative +c ============================================================= + drg(ipdeq)=-dk*dp+(c*r(j)+emvoc)*dq + drf(ipdeq)=dk*dq-emvoc*dp + enddo +c + return + end diff --git a/src/Core/makefile.lsms_1.9 b/src/Core/makefile.lsms_1.9 new file mode 100755 index 000000000..0b9c0b294 --- /dev/null +++ b/src/Core/makefile.lsms_1.9 @@ -0,0 +1,58 @@ +#======================================================================= +# makefile to generate library, lsms_core.a, which contains the routines +# for calculating atomic core states +#======================================================================= + +#Compiler Flags......................................................... +COM_FLAG=${FFLAGS} ${MODULE_FLAG} + +#======================================================================= + +MANIFEST_FILES = $(shell cat manifest) +SRC_FILES = $(filter %.c %.f %.F, $(MANIFEST_FILES) ) +CORE = $(patsubst %.f, $(ODIR)/%.o, $(SRC_FILES)) + +#======================================================================= + +all: cache + +echo_symbols: + @echo MANIFEST_FILES = $(MANIFEST_FILES) + @echo + @echo SRC_FILES = $(SRC_FILES) + @echo + @echo CORE = $(CORE) + +cache: $(CORE) + ar cr lsms_core.a $(CORE) + mv lsms_core.a $(ODIR)/$(LIBNAME) + touch cache + +$(ODIR)/corslv_c.o: corslv_c.f $(ATOM_PARAM_H) + $(F77) $(FFLAGS) corslv_c.f + mv corslv_c.o $(ODIR) +$(ODIR)/deepst_c.o: deepst_c.f $(ATOM_PARAM_H) + $(F77) $(FFLAGS) deepst_c.f + mv deepst_c.o $(ODIR) +$(ODIR)/getcor_c.o: getcor_c.f $(ATOM_PARAM_H) + @echo ${COM_FLAG} + $(F77) $(COM_FLAG) getcor_c.f + mv getcor_c.o $(ODIR) +$(ODIR)/invals_c.o: invals_c.f $(ATOM_PARAM_H) + $(F77) $(FFLAGS) invals_c.f + mv invals_c.o $(ODIR) +$(ODIR)/inwhnk_c.o: inwhnk_c.f $(ATOM_PARAM_H) + $(F77) $(FFLAGS) inwhnk_c.f + mv inwhnk_c.o $(ODIR) +$(ODIR)/inws_c.o: inws_c.f $(ATOM_PARAM_H) + $(F77) $(FFLAGS) inws_c.f + mv inws_c.o $(ODIR) +$(ODIR)/outws_c.o: outws_c.f $(ATOM_PARAM_H) + $(F77) $(FFLAGS) outws_c.f + mv outws_c.o $(ODIR) +$(ODIR)/richnk_c.o: richnk_c.f + $(F77) $(FFLAGS) richnk_c.f + mv richnk_c.o $(ODIR) +$(ODIR)/semcst_c.o: semcst_c.f $(ATOM_PARAM_H) + $(F77) $(FFLAGS) semcst_c.f + mv semcst_c.o $(ODIR) diff --git a/src/Core/manifest b/src/Core/manifest new file mode 100755 index 000000000..c7edfb343 --- /dev/null +++ b/src/Core/manifest @@ -0,0 +1,9 @@ +corslv_c.f +deepst_c.f +getcor_c.f +invals_c.f +inwhnk_c.f +inws_c.f +outws_c.f +richnk_c.f +semcst_c.f diff --git a/src/Core/outws_c.f b/src/Core/outws_c.f new file mode 100755 index 000000000..3e2e8113d --- /dev/null +++ b/src/Core/outws_c.f @@ -0,0 +1,227 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine outws(invp,rg,rf,rv,r,en,c,drg,drf,elim,z, + > gam,slp,tol,imm,lll,dk,dm,nodes,nws, + > iprpts,ipdeq) +c ================================================================ +c + implicit none +c +c include 'atom_param.h' +c + character sname*32 +c + integer iprpts,ipdeq + integer invp + integer imm + integer lll + integer nodes + integer nws + integer nd + integer k + integer l + integer j +c + real*8 en + real*8 c + real*8 elim + real*8 z + real*8 gam + real*8 slp + real*8 tol + real*8 dk + real*8 dm + real*8 r(iprpts) + real*8 rv(iprpts) + real*8 rg(iprpts) + real*8 rf(iprpts) + real*8 drf(ipdeq*2) + real*8 drg(ipdeq*2) + real*8 vor + real*8 rpow + real*8 emvoc + real*8 dp + real*8 dq + real*8 dqr + real*8 er + real*8 dpr + real*8 zero + real*8 one + real*8 twnsvn + real*8 fhnd + real*8 fnd + real*8 coef1 + real*8 coef2 +c + parameter (zero=0.d0) + parameter (one=1.d0) + parameter (twnsvn=27.d0) + parameter (fhnd=475.d0) + parameter (fnd=502.d0) + parameter (coef1=.9462151394422310d+00) + parameter (coef2=.0537848605577689d+00) + parameter (sname='outws') +c +c **************************************************************** +c outward solution +c adams 5 points diff. eq. solver for dirac equations +c drg,drf derivatives of dp and dq times r; c speed of light +c rv potential times r; r: radial grid; en energy guess +c coef1=475./502., coef2=27./502. +c **************************************************************** + +! write(*,*) "Entering OUTWS" +c + nd=0 + vor=rv(1)/r(1) +c +c ================================================================ +c find classical inversion point +c ================================================================ + 10 if( imm .eq. 1 ) go to 40 +c + do j=ipdeq+2,nws,2 + invp=nws+1-j + if( ((rv(invp)+lll/r(invp))/r(invp)-en) .le. zero ) go to 30 + enddo +c + 30 if( invp .gt. ipdeq ) go to 40 +c + en=en*0.5d+00 +c + if( en .lt. -tol .and. nd .le. nodes ) go to 10 +c +c ================================================================ + write(6,'('' OUTWS:: screwed potential'')') + call fstop(sname) +c +c ================================================================ +c initial values for outward integration +c ================================================================ +c ---------------------------------------------------------------- + 40 continue + call invals(rg,rf,r,slp,gam,vor,z,tol,drg,drf,en,c,dk, + > iprpts,ipdeq) +c ---------------------------------------------------------------- +c + nd=1 + do j=1,ipdeq + rpow=r(j)**gam + if( j .ne. 1 ) then + if( rg(j-1) .ne. zero ) then + if( (rg(j)/rg(j-1)) .le. zero ) then + nd=nd+1 + endif + endif + endif + rg(j)=rg(j)*rpow + rf(j)=rf(j)*rpow + drg(j)=drg(j)*rpow + drf(j)=drf(j)*rpow + enddo +c +c ================================================================ +c check consistence of signs of big and small component +c ================================================================ + k=-1+2*(nodes-2*(nodes/2)) +c + if( (rg(1)*k) .gt. zero ) go to 80 +c + 70 continue +c ================================================================ + write(6,'('' OUTWS:: errors in small r expansion'')') + write(6,*) ' rg(1), rf(1), r(1), rv(1) =', + > rg(1),rf(1),r(1),rv(1) + call fstop(sname) +c + 80 if( (k*dk*rf(1)) .lt. zero ) go to 70 +c +c ================================================================ +c solve dirac eqs. now +c ================================================================ + do j=ipdeq+1,invp +c +c ============================================================= +c 5 points predictor +c ============================================================= + dpr= rg(j-1) + dm*(2.51d+02*drg(1)-1.274d+03*drg(2)+ + > 2.616d+03*drg(3)-2.774d+03*drg(4)+1.901d+03*drg(5) ) + dqr= rf(j-1) + dm*(2.51d+02*drf(1)-1.274d+03*drf(2)+ + > 2.616d+03*drf(3)-2.774d+03*drf(4)+1.901d+03*drf(5) ) +c +c ============================================================= +c shift derivatives +c ============================================================= + do l=2,ipdeq + drg(l-1)=drg(l) + drf(l-1)=drf(l) + enddo +c +c ============================================================= +c dirac equations (log. mesh) +c ============================================================= + er=en*r(j) + emvoc=(er-rv(j))/c + drg(ipdeq)=-dk*dpr+(c*r(j)+emvoc)*dqr + drf(ipdeq)=dk*dqr-emvoc*dpr +c +c ============================================================= +c 5 points corrector +c ============================================================= + dp= rg(j-1) + dm*(-1.9d+01*drg(1)+1.06d+02*drg(2) + > -2.64d+02*drg(3)+6.46d+02*drg(4)+2.51d+02*drg(5) ) + dq= rf(j-1) + dm*(-1.9d+01*drf(1)+1.06d+02*drf(2) + > -2.64d+02*drf(3)+6.46d+02*drf(4)+2.51d+02*drf(5) ) +c +c ============================================================= +c mixing +c ============================================================= + dp=coef1*dp+coef2*dpr + dq=coef1*dq+coef2*dqr + rg(j)=dp + rf(j)=dq +c +c ============================================================= +c update derivative +c ============================================================= + drg(ipdeq)=-dk*dp+(c*r(j)+emvoc)*dq + drf(ipdeq)=dk*dq-emvoc*dp +c +c ============================================================= +c check number of nodes +c ============================================================= + if( rg(j-1).ne.zero .and. rg(j)/rg(j-1).le.zero ) nd=nd+1 + if( nd .gt. nodes ) go to 110 + enddo +c +c ================================================================ +c if no. of nodes is too small increase the energy and start again +c ================================================================ + if( nd .eq. nodes ) return +c + en=0.8d+00*en +c + if( en .lt. -tol ) go to 10 +c +c ================================================================ +c this energy guess has become too high +c ================================================================ + write(6,'('' OUTWS:: not enough nodes'')') + call fstop(sname) +c +c ================================================================ +c if no. of nodes is too big decrease the energy and start again +c ================================================================ + 110 en=1.2d+00*en +c + if( en .gt. elim ) go to 10 +c +c ================================================================ +c this energy guess has become too low +c ================================================================ + write(6,'('' OUTWS:: too many nodes'')') + call fstop(sname) +c +c ================================================================ + return + end diff --git a/src/Core/richnk_c.f b/src/Core/richnk_c.f new file mode 100755 index 000000000..5716ddd21 --- /dev/null +++ b/src/Core/richnk_c.f @@ -0,0 +1,68 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine richnk (nn,y,bh,dh) +c ================================================================ +c +c **************************************************************** +c calculates the riccati-bessel functions hl. +c this version calculates the derivatives. +c **************************************************************** +c + implicit none +c + integer l + integer nn +c + complex*16 bh(nn) + complex*16 dh(nn) + complex*16 y +c + complex*16 x + complex*16 xinv + complex*16 xpon + complex*16 one + complex*16 sqrtm1 + complex*16 zero +c + parameter (zero=(0.d0,0.d0)) + parameter (one=(1.d0,0.d0)) + parameter (sqrtm1=(0.d0,1.d0)) +c + x=y + if (abs(x).eq.0.d00) then + write(6,'('' trouble in richnk argument ='',2f10.5)') x + call fstop('richnk') + endif +c +c ================================================================ +c recursion relations +c ================================================================ + xpon=exp( sqrtm1*x ) + xinv=one/x + bh(1)=-sqrtm1 + bh(2)= - one - sqrtm1*xinv + dh(1)= one + dh(2)= sqrtm1 * ( xinv - ( sqrtm1 + x ) ) * xinv +c +c ================================================================ +c flm=2l+1 for real l=0,1,2,3, ... quantum number +c ================================================================ + do l=3,nn + bh(l) = (2*l-3)*bh(l-1)*xinv - bh(l-2) + dh(l) = bh(l-1) - (l-1)*bh(l)*xinv + enddo + do l=1,nn + bh(l)=bh(l)*xpon + dh(l)=dh(l)*xpon + enddo +c + if( abs(x) .le. 0.01d0 ) then +c ============================================================= +c power-series for j if abs(x) is smaller than 0.9. trouble!!! +c ============================================================= + write(6,'('' trouble in richnk: small argument'')') + call fstop('richnk') + endif +c + return + end diff --git a/src/Core/se.f b/src/Core/se.f new file mode 100755 index 000000000..9bf6ef2a6 --- /dev/null +++ b/src/Core/se.f @@ -0,0 +1,280 @@ +c ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine se (e,l,nodes,det,v,nr,r,p,rel,nrp,eunit) +c ================================================================= +c +c----- routine integrates full relativistic se equation for a core state +c at energy e. +c the two coupled first order differential equations are +c +c p p'=(e-v+2*c*c)*q/c-(l+1)*p/r +c q q'=-(e-v)*p/c+(l-1)*p/r +c l in this case is really kappa which is -l-1 for sp dn and l for sp up. +c +c if rel is false then solve the Schrodinger equation +c + implicit real*8 (a-h,o-z) +c implicit automatic (a-h,o-z) +c + parameter (big2=250.0d0) +c + logical rel +c + complex*16 ecomp +c +c + integer nr + integer nv + parameter (nv=2) + real*8 r(nrp),v(nr,nrp),p(nrp),y(nv),yp(nv),dy(nv) +c real*8 r(*),v(nr,nrp),p(*),y(nv),yp(nv),dy(nv) + real*8 eunit +c ===================================================================== +c dimensioned to stop array bounds problems............................ +c ===================================================================== + integer isymm(1) + real*8 vso(1,1) +c +c----- note watol->1/watol to avoid divisions in bsstep + parameter (watol=1.0d+8) +c + external dfv +c +c----- initialisation +c + ecomp=e +c ereal=e + nodes=0 +c + escale=0.5d0*eunit + allp1=abs(l*(l+1)) +c + do k=1,nrp + p(k)=0.d0 + enddo +c + if(r(1).eq.0.d0) then + ist=2 + else + ist=1 + endif +c +c ------------------------------------------------------------- + call initwave(rel,r,v(1,1),nr,nv,ist,l,ecomp,y,escale,.true., + & b,allp1_dfv) +c ------------------------------------------------------------- +c + call dfv(r(ist),y,dy,nv,nr,r(ist),ecomp,v(1,ist), + & vso,1,isymm,eunit,b,allp1_dfv) + p(ist)=y(1)*y(1) + if(rel) p(ist)=p(ist)+y(2)*y(2) +c + vk=v(2,ist) + if(nr.eq.4) vk=vk+v(nr,ist) + gkp=allp1/(r(ist)*r(ist))-eunit*(e-vk/r(ist)) +c +c----- the outwards integration +c +c write(6,*) ' outwards integration' +c write (6,'(i5,f10.5,4e15.7)') 1,r(ist),y(1),y(2),dy(1),dy(2) + do 40 k=ist+1,nrp + yp(1)=y(1) + yp(2)=y(2) + kp=k-1 + rfrom=r(k-1) + rto=r(k) + x=r(k) + htry=rto-rfrom +c +c----- advance integration using bs integrator +c + 45 continue +c ------------------------------------------------------------- + call bsstep (y,dy,nv,nr,rfrom,htry,watol,yp,hdid,hnext,idid, + & r(kp),ecomp,v(1,kp),vso,1,isymm,eunit,dfv,b,allp1_dfv) +c ------------------------------------------------------------- + if (abs(rfrom-rto).lt.1.0d-8*r(nrp)) then + p(k)=y(1)*y(1) + if(rel) p(k)=p(k)+y(2)*y(2) + if(y(1)*yp(1).lt.0.d0.or.y(1).eq.0.d0) nodes=nodes+1 +c write (6,'(i5,f10.5,4e15.7)') k,x,y(1),y(2),dy(1),dy(2) + else + htry=min(hnext,rto-rfrom) + goto 45 + endif +! +! call bulirsch_stoer(y,dy,nv,rfrom,htry, +! & r(kp),ecomp,v(1,kp),eunit,b,allp1,nv) +! p(k)=y(1)*y(1) +! if(rel) p(k)=p(k)+y(2)*y(2) + +c + vk=v(2,k) + if(nr.eq.4) vk=vk+v(nr,k) + gk=allp1/(x*x)-eunit*(e-vk/r(k)) + if (gk.gt.0.0d0.and.gkp.lt.0.0d0) then +c +c----- at the classical turning point find the value and slope of the +c wavefunction +c + kstop=k + pout=y(1) + dpout=y(2) +c write (6,140) e,l,kstop + go to 50 + endif + gkp=gk + 40 continue +c +c----- if we have reached here then state not a core +c + nodes=-1 + return +c + 50 continue +c +c----- the inwards integration +c +c +c----- initialise the inwards integration +c +c first find out where we should start + y(1)=0.d0 + y(2)=0.d0 + x=r(nrp) + call dfv(x,y,dy,nv,nr,x,ecomp,v(1,nrp),vso,1,isymm,eunit, + & b,allp1_dfv) + frel=dy(1) + phi=dy(2) + if(rel) then + rto=sqrt((l*l-big2)/(l*l/(x*x)-phi)) + else + rto=sqrt((allp1-big2)/(allp1/(x*x)-phi)) + endif + if(rto.gt.x) then + kn=nrp+1 + x=rto + phi=big2/(x*x) + rtphi=sqrt(phi) + y(1)=exp(-rtphi*x) + if(rel) then + y(2)=(l/x-rtphi)*y(1)/frel + else + y(2)=-(1.0d0/x+rtphi)*y(1)/frel + endif + goto 70 + endif + do k=nrp,kstop,-1 +c +c +c------ start integration with wkb approximation - the wavefunction is +c in its exponential tail beyond the classical turning point, +c start integration when wavefunction is bigger than exp(-big) +c +c dfv returns frel and phi in dy if both y(1) and y(2) are set to zero. + y(1)=0.d0 + y(2)=0.d0 + x=r(k) + call dfv(x,y,dy,nv,nr,r(k-1),ecomp,v(1,k-1),vso,1,isymm,eunit, + & b,allp1_dfv) + frel=dy(1) + phi=dy(2) +c +c----- check to see if we really are beyond the classical turning point +c + if (phi.le.0.0) then + write (6,160) e,l,k + stop + endif +c + rtphi=sqrt(phi) +c************************************************************ +c On CRAY the argument of exp() cannot be less than -708.396 +c************************************************************ + if(rtphi*x.gt.708.396d0) then + y(1)=0.d0 + else + y(1)=exp(-rtphi*x) + endif +c y(1)=exp(-rtphi*x) + if(rel) then + y(2)=(l/x-rtphi)*y(1)/frel + else + y(2)=-(1.0d0/x+rtphi)*y(1)/frel + endif + p(k)=y(1)*y(1) + if(rel) p(k)=p(k)+y(2)*y(2) + if(phi*x*x.le.big2) then + kn=k + rto=x + goto 70 + endif + enddo +c +c----- if we have reached here then state not a core +c + nodes=-1 + return + 70 continue +c write (6,*) 'SE: inwards integration' +c write (6,'(i5,f10.5,4e15.7)') kn,x,y(1),y(2),dy(1),dy(2) +c +c----- integrate towards the classical turning point +c + do 120 k=kn-1,kstop,-1 + yp(1)=y(1) + yp(2)=y(2) + rfrom=rto + rto=r(k) + x=r(k) + htry=rto-rfrom +c +c----- advance integration using bs integrator +c + 145 continue + call bsstep (y,dy,nv,nr,rfrom,htry,watol,yp,hdid,hnext,idid, + & r(k),ecomp,v(1,k),vso,1,isymm,eunit,dfv,b,allp1_dfv) + if (abs(rfrom-rto).lt.1.0d-8*r(nrp)) then + p(k)=y(1)*y(1) + if(rel) p(k)=p(k)+y(2)*y(2) + if(y(1)*yp(1).lt.0.d0.or.y(1).eq.0.d0.and.k.gt.kstop) + & nodes=nodes+1 +c write (6,'(''SE:'',i5,f10.5,4e15.7)') k,x,y(1),y(2),dy(1),dy(2) + else + htry=-min(abs(hnext),abs(rto-rfrom)) + goto 145 + endif + 120 continue +c +c----- calculate slope from inwards integration +c + pin=y(1) + dpin=y(2) +c +c----- match up the wavefunction for kstop to nrp +c + scale=pout/pin +c write(6,*) 'SE: scale:',scale + dpin=dpin*scale + scale=scale*scale +c +c do 130 k=kstop,min(kn,nrp) # malcolm had this + do 130 k=kstop,nrp + p(k)=scale*p(k) + 130 continue +c + det=dpin-dpout +c write (6,170) e,l,dpin,dpout,det +c + return +c + 140 format(' classical turning point reached in outwards integration'/ + 1 ' core e = ',f10.4,', k = ',i2,', grid point = ',i5) + 160 format(' unable to start inwards integration'/ + 1 ' core e = ',f10.4,', k = ',i2,', grid point = ',i5) + 170 format('SE: core e =',f10.4,' k = ',i2/' slope (in) = ',e12.5/ + 1 ' slope (out) = ',e12.5/' difference in slopes (det) = ',e12.5) + end +c +c +c********************************************************************** +c diff --git a/src/Core/semcst_c.f b/src/Core/semcst_c.f new file mode 100755 index 000000000..a9df441ea --- /dev/null +++ b/src/Core/semcst_c.f @@ -0,0 +1,266 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine semcst(nqn,lqn,kqn,en,rv,r,rf,h,z,c, + > nitmax,tol,nmt,nws,nlast,iter,iprpts,ipdeq) +c ================================================================ +c +c **************************************************************** +c semi-core states solver ..........................bg...june 1990 +c energy eigenvalues are found by newton-raphson method matching +c at the classical inversion point the f/g ratio. the energy +c derivative of f/g is evaluated analitically: +c see rose's book, chapter 4, pages 163-169, +c and also jp desclaux code. +c +c calls: outws(invals) and inws +c +c variables explanation: +c +c nqn: principal quantum number; +c lqn: orbital quantum number; +c kqn: kappa quantum number; +c en: energy; +c rv: potential in rydbergs times r; +c r: radial log. grid; +c rg: big component; +c rf: small component; +c h: exp. step; +c z: atomic number; +c nitmax: number of iterations; +c tol: energy tolerance; +c nmt: muffin-tin radius index; +c nws: bopunding sphere radius index; +c nlast: last tabulation point; +c c: speed of light in rydbergs; +c drg,drf: wavefunctions derivatives times r; +c gam: first power for small r expansion; +c slp: slope at the origin; +c dm: h/720; +c **************************************************************** + implicit none +c +! include 'atom_param.h' +c + integer iprpts, ipdeq + integer nqn + integer lqn + integer kqn + integer nitmax + integer nmt + integer nws + integer nlast + integer iter + integer nmax + integer invp + integer imm + integer nodes + integer lll + integer j +c + character sname*32 +c + real*8 en + real*8 h + real*8 z + real*8 c + real*8 tol + real*8 rg(iprpts) + real*8 rf(iprpts) + real*8 rv(iprpts) + real*8 r(iprpts),rtmp(0:iprpts) + real*8 tmp(0:iprpts) + real*8 qmp(0:iprpts) + real*8 drg(ipdeq*2) + real*8 drf(ipdeq*2) + real*8 dk + real*8 dm + real*8 gam + real*8 sign + real*8 slp + real*8 elim + real*8 rfm + real*8 rgm + real*8 rose + real*8 gnrm + real*8 fnrm + real*8 de + real*8 val + real*8 enew +c + parameter (sname='semcst') +c + +! write (6,*) "semcst input en=",en +! write (6,*) " nmt,nws,nlast=",nmt,nws,nlast +c ================================================================ +c initialize quantities +c ================================================================ + iter=0 + dk=kqn + dm=h/720.0d+00 + rtmp(0)=0.d0 + do j=1,iprpts + rtmp(j)=sqrt(r(j)) + enddo +c +c ================================================================ +c for semicore states you want to fix the inversion point at +c the muffin-in, or ASA radius. set imm=1......................... +c ================================================================ + invp=nmt + imm=1 +c +c ================================================================ +c for MT case nmax=iprpts, but for ASA case nmax=jws. +c this sets the charge within the proper regions. +c ================================================================ + nmax=nlast +c +c ================================================================ +c no. of nodes for the current states big component +c ================================================================ + nodes=nqn-lqn +c +c ================================================================ +c first power of small r expansion +c ================================================================ + gam=sqrt(dk*dk-4.0d+00*z*z/(c*c)) +c +c ================================================================ +c slope of the wavefcns at the origine +c ================================================================ + if(nodes-2*(nodes/2).ne.0) then + sign= 1.0d+00 + else + sign=-1.0d+00 + endif + slp=sign*kqn/abs(kqn) +c +c ================================================================ +c find the lowest energy limit +c ================================================================ + lll=(lqn*(lqn+1))/2 + if (lll.ne.0) then + elim=-z*z/(0.75d+00*nqn*nqn) + else + elim=(rv(1)+lll/r(1))/r(1) + do j=2,iprpts + elim=min((rv(j)+lll/r(j))/r(j),elim) + enddo + endif +c +c ================================================================ +c check potential +c ================================================================ + if(elim.ge.0) then + write(6,'('' SEMCST:: v+l*(l+1)/r**2 always positive'')') + call fstop(sname) + endif +c + if(en.le.elim) en=elim*0.5d+00 +c +c ================================================================ +c routine outws performs the outward integration +c ================================================================ +c ---------------------------------------------------------------- + 2 continue + call outws(invp,rg,rf,rv,r,en,c,drg,drf,elim,z, + > gam,slp,tol,imm,lll,dk,dm,nodes,nlast,iprpts,ipdeq) +c ---------------------------------------------------------------- +c +c ================================================================ +c store the inversion point values +c ================================================================ + rfm=rf(invp) + rgm=rg(invp) +c +c ================================================================ +c sets free solution directly to Riccati-Hankel for r*g and r*f. +c ================================================================ +c ---------------------------------------------------------------- + call inwhnk(invp,iprpts,rg,rf,rv,r,en,c,drg,drf, + > dk,dm,nlast,imm,iprpts,ipdeq) +c ---------------------------------------------------------------- +c ================================================================ +c routine inws performs the inward integration +c ---------------------------------------------------------------- +! call inws (invp,nmax,rg,rf,rv,r,en,c,drg,drf,dk,dm,nws,imm, +! > iprpts,ipdeq) +c ---------------------------------------------------------------- +c +c ================================================================ +c components match +c ================================================================ + fnrm=rgm/rg(invp) +c +c ================================================================ +c check first the sign of the big component +c ================================================================ + if (fnrm.lt.0.0d+00) then + write(6,'('' SEMCST:: wrong big component change'')') + call fstop(sname) + endif +c + do j=invp,iprpts + rg(j)=rg(j)*fnrm + rf(j)=rf(j)*fnrm + enddo +c +c ================================================================ +c energy derivative of the wvfcns "log. derivative" +c ================================================================ + tmp(0)=0.d0 + do j=1,iprpts + tmp(j)=(rg(j)**2+rf(j)**2) + enddo +c ---------------------------------------------------------------- + call newint(iprpts+1,rtmp,tmp,qmp,1) +c ---------------------------------------------------------------- + rose=2.d0*qmp(iprpts)+h*r(invp)*(rfm*rfm-rf(invp)*rf(invp))/3.0d+0 +c +c ================================================================ +c energy update +c ================================================================ + de=rg(invp)*(rfm-rf(invp))*c/rose + val=abs(de/en) + if (val.le.tol) go to 8 + 6 continue + enew=en+de + if(enew.lt.0.0d+00) go to 7 + de=de+0.5d+00 + val=val*0.5d+00 + if (val.gt.tol) go to 6 +c +c ================================================================ +c just in case the energy becomes zero +c ================================================================ + write(6,'('' SEMCST:: zero energy'')') + write(6,'(" n=",i2,", l=",i2,", kappa=",i2)') nqn,lqn,kqn + call fstop(sname) +c +c ================================================================ +c not yet convergence: try again +c ================================================================ + 7 continue + en=enew + iter=iter+1 + if(iter.le.nitmax) go to 2 +c +c ================================================================ +c not converged, too small tolerance or too small nitmax +c ================================================================ + write(6,'('' SEMCST:: warning: too many energy iterations'')') +c +c ================================================================ +c got convergence: exit +c ================================================================ + 8 continue + do j=1,iprpts + rf(j)=rf(j)*rf(j)+rg(j)*rg(j) + enddo +c +c ================================================================ +c end of job: waiting for next state +c ================================================================ + return + end diff --git a/src/Core/srcore.f b/src/Core/srcore.f new file mode 100755 index 000000000..2308b08cb --- /dev/null +++ b/src/Core/srcore.f @@ -0,0 +1,159 @@ + subroutine srcore(rel,ecore,rho,nc,lcore,v,nr,r,nsrch + * ,thresh,nrp,eunit) +c +c----- rcore performs an energy search for a core state with estimated +c energy ecore and angular momentum lcore. thresh determines the +c accuracy to which the energy is calculated, which is returned in +c ecore. +c +c----- calculates charge density from the core state's wavefunctn +c including contribution of small component of the scalar +c relativistic wavefunction. +c +c + implicit real*8 (a-h,o-z) +c +c---- calculation mode: +c + logical rel ! scalar relativistic if true +c +c---- dimensions +c + integer nrp +c +c---- output: +c + real*8 ecore ! core energy + real*8 rho(nrp) ! core charge density +c +c---- input: +c + integer lcore ! core angular momentum number + integer nr + real*8 v(nr,nrp) ! potential + real*8 r(nrp) ! radial grid + integer nsrch ! maximum number of searches + real*8 thresh ! tolerance for core energy search + real*8 eunit +c +c---- work space: +c + integer isrch ! actual number of searches performed +c +c rho is used to store the large wavefunction in se +c +c n0 is the number of nodes in the radial wavefuction + if(lcore.lt.0) then + n0=nc+lcore + else + n0=nc-lcore-1 + endif +c +c----- initialize core search parameters +c + isrch=0 +c We don't yet have an element with z=107 + elow=-107.d0*107.d0/(eunit*nc*nc) + ehigh=0.d0 + 5 isrch=isrch+1 + if (isrch.gt.nsrch) go to 60 + call se (ecore,lcore,nodes,d0,v,nr,r,rho,rel,nrp,eunit) + if(nodes.gt.n0) then + ehigh=min(ecore,ehigh) + ecore=0.5d0*(ehigh+elow) + goto 5 + else if(nodes.lt.n0) then + elow=max(ecore,elow) + ecore=0.5d0*(ehigh+elow) + goto 5 + endif + if (d0.eq.0.0d0) return + emn=ecore + epl=ecore + em0=ecore + ep0=ecore + dp0=d0 + dm0=d0 +c +c Assume ecore was reasonably close + dp=0.1d0*(ehigh-epl) + dm=0.1d0*(emn-elow) + isrch=0 +c +c----- locate sign change in the determinant +c + 10 isrch=isrch+1 + if (isrch.gt.nsrch) go to 60 + epl=epl+dp + call se (epl,lcore,nodes,dpl,v,nr,r,rho,rel,nrp,eunit) + if(nodes.eq.n0) then + ecore=epl + if (dpl.eq.0.0d0) return + if (dp0*dpl.lt.0.0d0) then + emn=ep0 + dmn=dp0 + goto 20 + endif + ep0=epl + dp0=dpl + dp=0.5d0*(ehigh-epl) + else + ehigh=epl + if(dp.gt.0.d0) then + dp=-0.5d0*dp + else + dp=0.5d0*dp + endif + endif + emn=emn-dm + call se (emn,lcore,nodes,dmn,v,nr,r,rho,rel,nrp,eunit) + if(nodes.eq.n0) then + ecore=emn + if (dmn.eq.0.0d0) return + if (dm0*dmn.lt.0.0d0) then + epl=em0 + dpl=dm0 + goto 20 + endif + em0=emn + dm0=dmn + else + elow=emn + if(dm.gt.0.d0) then + dm=-0.5d0*dm + else + dm=0.5d0*dm + endif + endif +c write(6,'(''nc,epl,emn='',2i3,1p2e15.6)') nc,isrch,epl,emn + go to 10 +c +c----- determine ecore to within thresh by successively halving the +c interval +c + 20 isrch=isrch+1 + e0=ecore + ecore=(epl*dmn-emn*dpl)/(dmn-dpl) + call se (ecore,lcore,nodes,d0,v,nr,r,rho,rel,nrp,eunit) + if (d0.eq.0.0d0) return + if (d0*dpl.lt.0.0d0) then + emn=ecore + dmn=d0 + elseif (d0*dmn.lt.0.0d0) then + epl=ecore + dpl=d0 + endif +c write(6,'(''SRCORE: nc,ecore,d0='',2i3,1p2e15.6)') +c & nc,isrch,ecore,d0 + if (abs(e0-ecore).ge.thresh) go to 20 + return +c +c----- if a sign change in the determinant is not found within nsrch +c tries, the calculation is stopped +c + 60 write (6,70) ecore,epl,emn + stop +c + 70 format('No zero found for core state near energy ',3f11.5) +c + end diff --git a/src/LuaInterface/LuaInterface.cpp b/src/LuaInterface/LuaInterface.cpp new file mode 100644 index 000000000..b7c4971dd --- /dev/null +++ b/src/LuaInterface/LuaInterface.cpp @@ -0,0 +1,11 @@ +#include "lua.h" + + +// int luaopen_RadialGrid(lua_State *L); +// int luaopen_RadialPotential(lua_State *L); + +void initLSMSLuaInterface(lua_State *L) +{ +// luaopen_RadialGrid(L); +// luaopen_RadialPotential(L); +} diff --git a/src/LuaInterface/LuaSupport.cpp b/src/LuaInterface/LuaSupport.cpp new file mode 100644 index 000000000..86951f85b --- /dev/null +++ b/src/LuaInterface/LuaSupport.cpp @@ -0,0 +1,172 @@ +#include +#include "Real.hpp" +#include "LuaSupport.hpp" + +// useful routine borrowed from internet +void luaStackDump(lua_State *L) { + + printf("Lua Stack: "); + int i; + int top = lua_gettop(L); + for (i = 1; i <= top; i++) { /* repeat for each level */ + int t = lua_type(L, i); + switch (t) { + + case LUA_TSTRING: /* strings */ + printf("`%s'", lua_tostring(L, i)); + break; + + case LUA_TBOOLEAN: /* booleans */ + printf(lua_toboolean(L, i) ? "true" : "false"); + break; + + case LUA_TNUMBER: /* numbers */ + printf("%g", lua_tonumber(L, i)); + break; + + default: /* other values */ + printf("%s", lua_typename(L, t)); + break; + + } + printf(" "); /* put a separator */ + } + printf("\n"); /* end the listing */ + fflush(stdout); +} + +bool luaGetStrN(lua_State *L, const char *name, char *s, int n) +{ + lua_getglobal(L,name); + if(!lua_isstring(L,-1)) {lua_pop(L,1); return false;} + strncpy(s, lua_tostring(L,-1), n); + lua_pop(L,1); + return true; +} + +bool luaGetReal(lua_State *L, const char *name, Real *val) +{ + lua_getglobal(L,name); + if(!lua_isnumber(L,-1)) {lua_pop(L,1); return false;} + *val=lua_tonumber(L,-1); + lua_pop(L,1); + return true; +} + +bool luaGetInteger(lua_State *L, const char *name, int *val) +{ + lua_getglobal(L,name); + if(!lua_isnumber(L,-1)) {lua_pop(L,1); return false;} + *val=lua_tointeger(L,-1); + lua_pop(L,1); + return true; +} + +bool luaGetBoolean(lua_State *L, const char *name, bool *val) +{ + lua_getglobal(L,name); + if(!lua_isboolean(L,-1)) {lua_pop(L,1); return false;} + *val=lua_toboolean(L,-1); + lua_pop(L,1); + return true; +} + +bool luaGetFieldInTable(lua_State *L, const char *name, const char *field) +{ + lua_getglobal(L,name); + lua_pushstring(L,field); + lua_gettable(L,-2); + return true; +} + +bool luaGetFieldFromStack(lua_State *L, const char *field) +{ + lua_pushstring(L,field); + lua_gettable(L,-2); + return true; +} + +bool luaGetPositionInTable(lua_State *L, const char *name, int idx) +{ + lua_getglobal(L,name); + if(lua_isnil(L,-1)) {lua_pop(L,1); return false;} + lua_pushinteger(L,idx); + lua_gettable(L,-2); + return true; +} + +bool luaGetRealFieldInTable(lua_State *L, const char *name, const char *field, Real *val) +{ + if(!luaGetFieldInTable(L,name,field)) return false; + if(!lua_isnumber(L,-1)) {lua_pop(L,2); return false;} + *val=lua_tonumber(L,-1); + lua_pop(L,2); + return true; +} + +bool luaGetIntegerFieldInTable(lua_State *L, const char *name, const char *field, int *val) +{ + if(!luaGetFieldInTable(L,name,field)) return false; + if(!lua_isnumber(L,-1)) {lua_pop(L,2); return false;} + *val=lua_tointeger(L,-1); + lua_pop(L,2); + return true; +} + +bool luaGetRealPositionInTable(lua_State *L, const char *name, int idx, Real *val) +{ + if(!luaGetPositionInTable(L,name,idx)) return false; + if(!lua_isnumber(L,-1)) {lua_pop(L,2); return false;} + *val=lua_tonumber(L,-1); + lua_pop(L,2); + return true; +} + +bool luaGetIntegerPositionInTable(lua_State *L, const char *name, int idx, int *val) +{ + if(!luaGetPositionInTable(L,name,idx)) return false; + if(!lua_isnumber(L,-1)) {lua_pop(L,2); return false;} + *val=lua_tointeger(L,-1); + lua_pop(L,2); + return true; +} + +bool luaGetRealPositionFromStack(lua_State *L, int idx, Real *val) +{ + lua_pushinteger(L,idx); + lua_gettable(L,-2); + if(!lua_isnumber(L,-1)) {lua_pop(L,1); return false;} + *val=lua_tonumber(L,-1); + lua_pop(L,1); + return true; +} + +bool luaGetStrNFromStack(lua_State *L, const char *name, char *s, int n) +{ + lua_pushstring(L,name); + lua_gettable(L,-2); + if(!lua_isstring(L,-1)) {lua_pop(L,1); return false;} + strncpy(s, lua_tostring(L,-1), n); + lua_pop(L,1); + return true; +} + +bool luaGetRealFieldFromStack(lua_State *L, const char *field, Real *val) +{ + lua_pushstring(L,field); + lua_gettable(L,-2); + if(!lua_isnumber(L,-1)) {lua_pop(L,1); return false;} + *val=lua_tonumber(L,-1); + lua_pop(L,1); + return true; +} + +bool luaGetIntegerFieldFromStack(lua_State *L, const char *field, int *val) +{ + lua_pushstring(L,field); + lua_gettable(L,-2); + if(!lua_isnumber(L,-1)) {lua_pop(L,1); return false;} + *val=lua_tointeger(L,-1); + lua_pop(L,1); + return true; +} diff --git a/src/LuaInterface/LuaSupport.hpp b/src/LuaInterface/LuaSupport.hpp new file mode 100644 index 000000000..6a245ccb1 --- /dev/null +++ b/src/LuaInterface/LuaSupport.hpp @@ -0,0 +1,26 @@ +#ifndef LSMS_LUASUPPORT_H +#define LSMS_LUASUPPORT_H + +#include "lua.hpp" +//#include "lua.h" +#include "Real.hpp" + +void luaStackDump(lua_State *L); + +bool luaGetStrN(lua_State *L, const char *name, char *s, int n); +bool luaGetReal(lua_State *L, const char *name, Real *val); +bool luaGetInteger(lua_State *L, const char *name, int *val); +bool luaGetBoolean(lua_State *L, const char *name, bool *val); + +bool luaGetFieldInTable(lua_State *L, const char *name, const char *field); +bool luaGetFieldFromStack(lua_State *L, const char *field); +bool luaGetPositionInTable(lua_State *L, const char *name, int idx); +bool luaGetRealFieldInTable(lua_State *L, const char *name, const char *field, Real *val); +bool luaGetIntegerFieldInTable(lua_State *L, const char *name, const char *field, int *val); +bool luaGetRealPositionInTable(lua_State *L, const char *name, int idx, Real *val); +bool luaGetIntegerPositionInTable(lua_State *L, const char *name, int idx, int *val); +bool luaGetStrNFromStack(lua_State *L, const char *name, char *s, int n); +bool luaGetRealPositionFromStack(lua_State *L, int idx, Real *val); +bool luaGetRealFieldFromStack(lua_State *L, const char *field, Real *val); +bool luaGetIntegerFieldFromStack(lua_State *L, const char *field, int *val); +#endif diff --git a/src/LuaInterface/Makefile b/src/LuaInterface/Makefile new file mode 100644 index 000000000..2be2c60a1 --- /dev/null +++ b/src/LuaInterface/Makefile @@ -0,0 +1,15 @@ +# OBJ = LuaInterface.o RadialGrid_lua.o RadialPotential_lua.o LuaSupport.o +OBJ = LuaInterface.o LuaSupport.o + +all: libLSMSLua.a + +clean: + rm -f *.a *.o + +%.o : %.cpp + $(CXX) $(INC_PATH) -c -o $@ $< + + +libLSMSLua.a : $(OBJ) + $(AR) -r libLSMSLua.a $(OBJ) + cp libLSMSLua.a $(TOP_DIR)/lib diff --git a/src/LuaInterface/RadialGrid_lua.cpp b/src/LuaInterface/RadialGrid_lua.cpp new file mode 100644 index 000000000..3f1b30120 --- /dev/null +++ b/src/LuaInterface/RadialGrid_lua.cpp @@ -0,0 +1,167 @@ +#include "lua.h" +#include "lauxlib.h" +#include "lualib.h" + +#include "../RadialGrid/RadialGrid.hpp" + +// a radial grid in lua is represented as a table that contains the radial grid pointer as light userdata +// and the appropriate metatable "LSMS.RadialGrid". +// radial grids that have been allocated by lua are considered temporary and contain the field "ownedByLua" set to true. +// only LSMS internal functions are allowed to assign pointer values and care should be taken that pointers owned by lua are never passed to such functions! + +typedef struct +{ + RadialGrid *g; + bool ownedByLua; +} RadialGridLua; + +/* +static int newRadialGridLua(lua_State *L) +{ + RadialGridLua *t=(RadialGridLua *)lua_newuserdata(L,sizeof(RadialGridLua)); + luaL_getmetatable(L, "LSMS.RadialGrid"); + lua_setmetatable(L, -2); + t->g=new RadialGrid; + t->ownedByLua=true; + return 1; +} +*/ + +static int newTemporaryRadialGridLua(lua_State *L) +{ + RadialGrid *t=new RadialGrid; + lua_newtable(L); + lua_pushlightuserdata(L,t); + lua_setfield(L,-2,"RadialGrid"); + lua_pushboolean(L,1); + lua_setfield(L,-2,"ownedByLua"); + + luaL_getmetatable(L, "LSMS.RadialGrid"); + lua_setmetatable(L, -2); + + return 1; +} + +/* +static int copyRadialGridLua(lua_State *L) +{ + RadialGridLua *g=(RadialGridLua *)lua_touserdata(L,1); + RadialGridLua *t=(RadialGridLua *)lua_newuserdata(L,sizeof(RadialGridLua)); + luaL_getmetatable(L, "LSMS.RadialGrid"); + lua_setmetatable(L, -2); + t->g=new RadialGrid; + *(t->g) = *(g->g); + t->ownedByLua=true; + return 1; +} +*/ + +static int radialGridLua__gc(lua_State *L) +{ + lua_getfield(L,1,"RadialGrid"); + RadialGrid *g=(RadialGrid *)lua_touserdata(L,-1); + lua_getfield(L,1,"ownedByLua"); + if(lua_toboolean(L,-1)) delete g; + return 0; +} + +static int generateRadialGridLua(lua_State *L) +{ + lua_getfield(L,1,"RadialGrid"); + RadialGrid *g=(RadialGrid *)lua_touserdata(L,-1); + Real x0=luaL_checknumber(L,2); + Real h=luaL_checknumber(L,3); + int N=luaL_checkint(L,4); + int jmt=luaL_checkint(L,5); + int jws=luaL_checkint(L,6); + + generateRadialGrid(g,x0,h,N,jmt,jws); + + return 0; +} + +static int sizeRadialGridLua(lua_State *L) +{ + lua_getfield(L,1,"RadialGrid"); + RadialGrid *g=(RadialGrid *)lua_touserdata(L,-1); + lua_pushnumber(L, g->N); + + return 1; +} + +static int getRadialGridLua(lua_State *L) +{ + lua_getfield(L,1,"RadialGrid"); + RadialGrid *g=(RadialGrid *)lua_touserdata(L,-1); + int idx = luaL_checkint(L,2); + + luaL_argcheck(L, 0<=idx && idx < g->N,2,"index out of range"); + lua_pushnumber(L,g->r_mesh[idx]); + return 1; +} + +static int getRadialGridXLua(lua_State *L) +{ + lua_getfield(L,1,"RadialGrid"); + RadialGrid *g=(RadialGrid *)lua_touserdata(L,-1); + int idx = luaL_checkint(L,2); + + luaL_argcheck(L, 0<=idx && idx < g->N,2,"index out of range"); + lua_pushnumber(L,g->x_mesh[idx]); + return 1; +} + +static int luaRadialGridToString(lua_State *L) +{ + lua_getfield(L,1,"RadialGrid"); + RadialGrid *g=(RadialGrid *)lua_touserdata(L,-1); + if(g->N > 0) + lua_pushfstring(L, "RadialGrid(%f,%f,%d,%d,%d)", g->x_mesh[0], + g->h, g->N, g->jmt, g->jws); + else + lua_pushfstring(L, "RadialGrid(0)"); + return 1; +} + +static int radialGridLua__index(lua_State *L) +{ + lua_getfield(L,1,"RadialGrid"); + RadialGrid *g=(RadialGrid *)lua_touserdata(L,-1); + if(lua_type(L,2)==LUA_TNUMBER) + return getRadialGridLua(L); + lua_getmetatable(L,1); + lua_pushvalue(L,2); + lua_gettable(L,-2); + return 1; +} + +static const struct luaL_Reg RadialGrid_lib_f [] = { + {"new", newTemporaryRadialGridLua}, + {NULL, NULL} +}; + +static const struct luaL_Reg RadialGrid_lib_m [] = { + {"__index", radialGridLua__index}, + {"generate", generateRadialGridLua}, + {"__tostring", luaRadialGridToString}, + {"__gc", radialGridLua__gc}, + {"size", sizeRadialGridLua}, + {"get", getRadialGridLua}, + {"x", getRadialGridXLua}, +// {"copy", copyRadialGridLua}, + {NULL, NULL} +}; + +int luaopen_RadialGrid (lua_State *L) +{ + luaL_newmetatable(L, "LSMS.RadialGrid"); + luaL_register(L, NULL, RadialGrid_lib_m); + + // lua_pushstring(L, "__index"); + // lua_pushstring(L,"get"); + // lua_gettable(L,2); + // lua_settable(L,1); + + luaL_register(L, "RadialGrid", RadialGrid_lib_f); + return 1; +} diff --git a/src/LuaInterface/RadialPotential_lua.cpp b/src/LuaInterface/RadialPotential_lua.cpp new file mode 100644 index 000000000..99dbbeb3b --- /dev/null +++ b/src/LuaInterface/RadialPotential_lua.cpp @@ -0,0 +1,140 @@ +#include "lua.h" +#include "lauxlib.h" +#include "lualib.h" + +#include "../RadialGrid/RadialGrid.hpp" +#include "../RadialGrid/RadialPotential.hpp" + +// a radial grid in lua is represented as a table that contains the radial grid pointer as light userdata +// and the appropriate metatable "LSMS.RadialGrid". +// radial grids that have been allocated by lua are considered temporary and contain the field "ownedByLua" set to true. +// only LSMS internal functions are allowed to assign pointer values and care should be taken that pointers owned by lua are never passed to such functions! + + +static int newTemporaryRadialPotentialLua(lua_State *L) +{ + RadialPotential *t=new RadialPotential; + lua_newtable(L); + lua_pushlightuserdata(L,t); + lua_setfield(L,-2,"RadialPotential"); + lua_pushboolean(L,1); + lua_setfield(L,-2,"ownedByLua"); + + luaL_getmetatable(L, "LSMS.RadialPotential"); + lua_setmetatable(L, -2); + + return 1; +} + +static int radialPotentialLua__gc(lua_State *L) +{ + lua_getfield(L,1,"RadialPotential"); + RadialPotential *g=(RadialPotential *)lua_touserdata(L,-1); + lua_getfield(L,1,"ownedByLua"); + if(lua_toboolean(L,-1)) delete g; + return 0; +} + +static int getRadialGridFromPotentialLua(lua_State *L) +{ + lua_getfield(L,1,"RadialPotential"); + RadialPotential *p=(RadialPotential *)lua_touserdata(L,-1); + RadialGrid *g = p->g; + + lua_newtable(L); + lua_pushlightuserdata(L,g); + lua_setfield(L,-2,"RadialGrid"); +// lua_pushboolean(L,1); +// lua_setfield(L,-2,"ownedByLua"); + + luaL_getmetatable(L, "LSMS.RadialGrid"); + lua_setmetatable(L, -2); + + return 1; +} + + +static int getRadialPotentialLua(lua_State *L) +{ + lua_getfield(L,1,"RadialPotential"); + RadialPotential *p=(RadialPotential *)lua_touserdata(L,-1); + int is = luaL_checkint(L,2); + int ir = luaL_checkint(L,3); + + luaL_argcheck(L, 0<=ir && ir < p->g->N,2,"index out of range"); + lua_pushnumber(L,p->vr(ir,is)); + return 1; +} + +static int syncRadialPotentialLua(lua_State *L) +{ + lua_getfield(L,1,"RadialPotential"); + RadialPotential *p=(RadialPotential *)lua_touserdata(L,-1); + p->sync(); + return 0; +} + +static int sizeRadialPotentialLua(lua_State *L) +{ + lua_getfield(L,1,"RadialPotential"); + RadialPotential *g=(RadialPotential *)lua_touserdata(L,-1); + lua_pushnumber(L, g->vr.n_row()); + + return 1; +} + +static int luaRadialPotentialToString(lua_State *L) +{ + lua_getfield(L,1,"RadialPotential"); + RadialPotential *g=(RadialPotential *)lua_touserdata(L,-1); +// if(g->N > 0) +// lua_pushfstring(L, "RadialPotential(%f,%f,%d,%d,%d)", g->x_mesh[0], +// g->h, g->N, g->jmt, g->jws); +// else + lua_pushfstring(L, "RadialPotential(%p)",g); + return 1; +} + +static int radialPotentialLua__index(lua_State *L) +{ + lua_getfield(L,1,"RadialPotential"); + RadialPotential *g=(RadialPotential *)lua_touserdata(L,-1); + //if(lua_type(L,2)==LUA_TNUMBER) + // return getRadialGridLua(L); + lua_getmetatable(L,1); + lua_pushvalue(L,2); + lua_gettable(L,-2); + return 1; +} + +static const struct luaL_Reg RadialPotential_lib_f [] = { + {"new", newTemporaryRadialPotentialLua}, + {NULL, NULL} +}; + +static const struct luaL_Reg RadialPotential_lib_m [] = { + {"__index", radialPotentialLua__index}, +// {"generate", generateRadialGridLua}, + {"__tostring", luaRadialPotentialToString}, + {"__gc", radialPotentialLua__gc}, + {"grid", getRadialGridFromPotentialLua}, + {"size", sizeRadialPotentialLua}, + {"get", getRadialPotentialLua}, + {"sync", syncRadialPotentialLua}, +// {"copy", copyRadialGridLua}, + {NULL, NULL} +}; + +int luaopen_RadialPotential (lua_State *L) +{ + luaL_newmetatable(L, "LSMS.RadialPotential"); + luaL_register(L, NULL, RadialPotential_lib_m); + + // lua_pushstring(L, "__index"); + // lua_pushstring(L,"get"); + // lua_gettable(L,2); + // lua_settable(L,1); + + luaL_register(L, "RadialPotential", RadialPotential_lib_f); + return 1; +} diff --git a/src/Madelung/Madelung.hpp b/src/Madelung/Madelung.hpp new file mode 100644 index 000000000..fa2fc5b86 --- /dev/null +++ b/src/Madelung/Madelung.hpp @@ -0,0 +1,32 @@ +#ifndef LSMS_MADELUNG_H +#define LSMS_MADELUNG_H + +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" +#include "Array3d.hpp" +#include "Main/SystemParameters.hpp" + +void calculateMadelungMatrices(LSMSSystemParameters &lsms, CrystalParameters &crystal, LocalTypeInfo &local); + +extern "C" +{ + void cal_madelung_matrix_(int *mynod,int *num_atoms, + Real *bravais_lattice_in, + Real *atom_posi_x_in, + Real *atom_posi_y_in, + Real *atom_posi_z_in, + Real *madmat, + int *iprint,char *istop,int istop_len); + + void cal_madelung_matrix_j_(int *mynod,int *num_atoms, + Real *bravais_lattice_in, Real *rcutau, + int *lmax, int *ndlm, int *ndlmv, + Real *atom_posi_x_in, + Real *atom_posi_y_in, + Real *atom_posi_z_in, + Real *madmat, Complex *madmatj, + int *iprint,char *istop,int istop_len); +} + +#endif diff --git a/src/Madelung/Makefile b/src/Madelung/Makefile new file mode 100755 index 000000000..f121fdae6 --- /dev/null +++ b/src/Madelung/Makefile @@ -0,0 +1,21 @@ +OBJ = cal_madelung_matrix.o getkncut.o getrscut.o getstruc.o interf.o interfsmr.o \ + lattice.o madewd.o madewdj.o madsum.o ord3v.o pqintg_c.o calculateMadelungMatrices.o \ + lmfacts.o bessj.o + +all: libMadelung.a + +clean: + rm -f *.a *.o + +%.o : %.cpp + $(CXX) $(INC_PATH) -c -o $@ $< + +%.o : %.f + $(F77) -c -o $@ $< + +%.o : %.f90 + $(F77) -c -o $@ $< + +libMadelung.a : $(OBJ) + $(AR) -r libMadelung.a $(OBJ) + cp libMadelung.a $(TOP_DIR)/lib diff --git a/src/Madelung/bessj.f b/src/Madelung/bessj.f new file mode 100755 index 000000000..10c3d76dc --- /dev/null +++ b/src/Madelung/bessj.f @@ -0,0 +1,69 @@ +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine bessj(nn,x,bj,bn) +c ================================================================ +c +c computes spherical bessel function jl +c + implicit none +c + integer nn,l,k,i,nm +c + real*8 flm,fll +c + real*8 a,aj,x + real*8 as,ac,x1,x2 +c + real*8 bj(nn),bn(nn) + real*8 tol + parameter (tol=1.d-10) +c + x1 = 1.d0/x + if(abs(x1).lt.tol) then + do l=1,nn + bj(l)=0.d0 + enddo + return + endif + as = sin(x) + ac = cos(x) + bj(1) = as*x1 +c Forward recursion for small L +c (using bn as scratch space) +1 k=(int(abs(x))+2)/4+1 + bn(1)=as + if(k.gt.1) then + if (k.gt.nn) k=nn + bn(2)=bj(1)-ac + bj(2)=bn(2)*x1 + do l = 3, k + flm = l+l-3 + bn(l) = flm*bj(l-1)-bn(l-2) + bj(l)=bn(l)*x1 + enddo + endif + + if(k.lt.nn) then +c Backward recursion from very large L down to L=k + a=bn(k) + nm=nn*4 + aj=2*nm+1 + x2=x*x + do l = nm, nn+2, -1 + aj=(2*l-1)-x2/aj + enddo + bn(nn)=(2*nn+1)*aj*x1-x + bj(nn)=bn(nn)*x1 + bn(nn-1)=(2*nn-1)*bj(nn)-aj + do l = nn-1, k+1, -1 + bj(l)=bn(l)*x1 + bn(l-1)=(2*l-1)*bj(l)-bn(l+1) + enddo +c scale to give correct bj(k) + aj=a/bn(k) + do l = k+1, nn + bj(l)=aj*bj(l) + enddo + endif + + return + end diff --git a/src/Madelung/cal_madelung_matrix.f b/src/Madelung/cal_madelung_matrix.f new file mode 100755 index 000000000..99910b67a --- /dev/null +++ b/src/Madelung/cal_madelung_matrix.f @@ -0,0 +1,138 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine cal_madelung_matrix(mynod,num_atoms, + > bravais_lattice_in, + > atom_posi_x_in, + > atom_posi_y_in, + > atom_posi_z_in, + > madmat, + > iprint,istop) +c ================================================================ +c + implicit none +c +! include 'atom_param.h' + include 'madelung.h' +c + character istop*32 + character sname*32 + parameter (sname='cal_madelung_matrix') +c + integer mynod + integer num_atoms +c + integer iprint + integer i + integer imin + integer nrslat + integer nknlat +c + integer j,k +c + real*8 bravais_lattice_in(9) + real*8 atom_posi_x_in(num_atoms) + real*8 atom_posi_y_in(num_atoms) + real*8 atom_posi_z_in(num_atoms) + real*8 bravais_lattice(9) + real*8 atom_posi_x(num_atoms) + real*8 atom_posi_y(num_atoms) + real*8 atom_posi_z(num_atoms) + real*8 madmat(num_atoms) +c + real*8 a0 + real*8 dmin + real*8 dmin2 + real*8 dmax + real*8 dmax2 + real*8 dx + real*8 dy + real*8 dz + real*8 dis2 + real*8 dis + real*8 a1 + real*8 a2 + real*8 a3 + real*8 omegbra + real*8 rslat_x(iprslat_mad) + real*8 rslat_y(iprslat_mad) + real*8 rslat_z(iprslat_mad) + real*8 rslatsq(iprslat_mad) + real*8 knlat_x(ipknlat_mad) + real*8 knlat_y(ipknlat_mad) + real*8 knlat_z(ipknlat_mad) + real*8 knlatsq(ipknlat_mad) + real*8 etainv + real*8 eta + real*8 etainv0 + real*8 sum + real*8 one + real*8 zero + parameter (one=1.0d0) + parameter (zero=0.0d0) +c + parameter (etainv0=0.5d0) +c +! if(max_atoms.lt.num_atoms) then +! write(6,'('' CAL_MADELUNG_MATRIX:: max_atoms < num_atoms'', +! > 2i5)')max_atoms,num_atoms +! call fstop('cal_madelung_matrix') +! endif +c ---------------------------------------------------------------- + call mbeqa(bravais_lattice_in,bravais_lattice,9) + call mbeqa(atom_posi_x_in,atom_posi_x,num_atoms) + call mbeqa(atom_posi_y_in,atom_posi_y,num_atoms) + call mbeqa(atom_posi_z_in,atom_posi_z,num_atoms) +c ---------------------------------------------------------------- +c + a1=sqrt(bravais_lattice(1)*bravais_lattice(1)+ + > bravais_lattice(2)*bravais_lattice(2)+ + > bravais_lattice(3)*bravais_lattice(3) ) + a2=sqrt(bravais_lattice(4)*bravais_lattice(4)+ + > bravais_lattice(5)*bravais_lattice(5)+ + > bravais_lattice(6)*bravais_lattice(6) ) + a3=sqrt(bravais_lattice(7)*bravais_lattice(7)+ + > bravais_lattice(8)*bravais_lattice(8)+ + > bravais_lattice(9)*bravais_lattice(9) ) + a0=min(a1,a2,a3) +ctest + etainv=etainv0+0.01*max(a1,a2,a3)/a0 + etainv=etainv*a0 +ctest +c ================================================================ +c change units so that both bravais_lattice and atom_posi_* are in +c in the units of a0 = 1 +c ---------------------------------------------------------------- +c call dscal(9,one/a0,bravais_lattice,1) +c call dscal(num_atoms,one/a0,atom_posi_x,1) +c call dscal(num_atoms,one/a0,atom_posi_y,1) +c call dscal(num_atoms,one/a0,atom_posi_z,1) +c ---------------------------------------------------------------- +c +c ================================================================ +c obtain the lattice vectors for the big cell..................... +c rslat, rslatsq, knlat, and knlatsq are in the units of a0 = 1... +c ---------------------------------------------------------------- + call getstruc(mynod,bravais_lattice,omegbra,etainv, + > iprslat_mad,ipknlat_mad, + > rslat_x,rslat_y,rslat_z,rslatsq,nrslat, + > knlat_x,knlat_y,knlat_z,knlatsq,nknlat, + > iprint,istop) +c ---------------------------------------------------------------- +c +c ================================================================ +c set up the Madelung matrix...................................... +c ---------------------------------------------------------------- + call madewd(nrslat,nknlat,mynod+1,num_atoms,one, + > rslat_x,rslat_y,rslat_z,rslatsq, + > knlat_x,knlat_y,knlat_z,knlatsq, + > atom_posi_x,atom_posi_y,atom_posi_z, + > etainv,omegbra,madmat, + > iprint,istop) +c ---------------------------------------------------------------- +c ================================================================ + if(sname.eq.istop) then + call fstop(sname) + else + return + endif + end diff --git a/src/Madelung/cal_madelung_matrix_j.f b/src/Madelung/cal_madelung_matrix_j.f new file mode 100755 index 000000000..30d68890d --- /dev/null +++ b/src/Madelung/cal_madelung_matrix_j.f @@ -0,0 +1,228 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine cal_madelung_matrix_j(mynod,num_atoms, + > bravais_lattice_in,rcutau, + & lmax,ndlm,ndlmv, + > atom_posi_x_in, + > atom_posi_y_in, + > atom_posi_z_in, + > madmat,madmatj, + > iprint,istop) +c ================================================================ +c + implicit none +c +! include 'atom_param.h' + include 'madelung.h' +c + character istop*32 + character sname*32 + parameter (sname='cal_madelung_matrix') +c + integer mynod + integer num_atoms +c + integer iprint + integer i + integer imin + integer nrslat + integer nknlat + integer ipndlm + parameter (ipndlm=(iplmax_mad+1)*(iplmax_mad+2)/2) +c + integer j,k + integer ndlj + integer ndlm,ndlmv + integer lmax + integer lofj(ipndlm) + integer mofj(ipndlm) + integer lofk((iplmax_mad+1)**2) + integer mofk((iplmax_mad+1)**2) +c + real*8 bravais_lattice_in(9) + real*8 atom_posi_x_in(num_atoms) + real*8 atom_posi_y_in(num_atoms) + real*8 atom_posi_z_in(num_atoms) + real*8 bravais_lattice(9) + real*8 atom_posi_x(num_atoms) + real*8 atom_posi_y(num_atoms) + real*8 atom_posi_z(num_atoms) + real*8 rmau + real*8 rcutau + real*8 madmat(num_atoms) + complex*16 madmatj(ndlmv,num_atoms) +c + real*8 a0 + real*8 dmin + real*8 dmin2 + real*8 dmax + real*8 dmax2 + real*8 dx + real*8 dy + real*8 dz + real*8 dis2 + real*8 dis + real*8 a1 + real*8 a2 + real*8 a3 + real*8 omegbra + real*8 rslat_x(iprslat_mad) + real*8 rslat_y(iprslat_mad) + real*8 rslat_z(iprslat_mad) + real*8 rslatsq(iprslat_mad) + real*8 knlat_x(ipknlat_mad) + real*8 knlat_y(ipknlat_mad) + real*8 knlat_z(ipknlat_mad) + real*8 knlatsq(ipknlat_mad) + real*8 clm(ipndlm) + real*8 etainv + real*8 eta + real*8 etainv0 + real*8 sum + real*8 one + real*8 zero + parameter (one=1.0d0) + parameter (zero=0.0d0) +c +! data etainv0/0.5d0/ + parameter (etainv0=0.5d0) +c +! call getclm(lmax,clm) +! meis: changed to normalized associated Legendre functions + call ylm_coefficients(lmax,clm) + call lmfacts(lmax,ndlj,ndlm,lofj,mofj,lofk,mofk) +! if(max_atoms.lt.num_atoms) then +! write(6,'('' CAL_MADELUNG_MATRIX:: max_atoms < num_atoms'', +! > 2i5)')max_atoms,num_atoms +! call fstop('cal_madelung_matrix') +! endif +c ---------------------------------------------------------------- + call mbeqa(bravais_lattice_in,bravais_lattice,9) + call mbeqa(atom_posi_x_in,atom_posi_x,num_atoms) + call mbeqa(atom_posi_y_in,atom_posi_y,num_atoms) + call mbeqa(atom_posi_z_in,atom_posi_z,num_atoms) +c ---------------------------------------------------------------- +c + a1=sqrt(bravais_lattice(1)*bravais_lattice(1)+ + > bravais_lattice(2)*bravais_lattice(2)+ + > bravais_lattice(3)*bravais_lattice(3) ) + a2=sqrt(bravais_lattice(4)*bravais_lattice(4)+ + > bravais_lattice(5)*bravais_lattice(5)+ + > bravais_lattice(6)*bravais_lattice(6) ) + a3=sqrt(bravais_lattice(7)*bravais_lattice(7)+ + > bravais_lattice(8)*bravais_lattice(8)+ + > bravais_lattice(9)*bravais_lattice(9) ) + a0=min(a1,a2,a3) +ctest + etainv=etainv0+0.01*max(a1,a2,a3)/a0 + etainv=etainv*a0 +ctest +c ================================================================ +c change units so that both bravais_lattice and atom_posi_* are in +c in the units of a0 = 1 +c ---------------------------------------------------------------- +c call dscal(9,one/a0,bravais_lattice,1) +c call dscal(num_atoms,one/a0,atom_posi_x,1) +c call dscal(num_atoms,one/a0,atom_posi_y,1) +c call dscal(num_atoms,one/a0,atom_posi_z,1) +c ---------------------------------------------------------------- +c +c ================================================================ +c obtain the lattice vectors for the big cell..................... +c rslat, rslatsq, knlat, and knlatsq are in the units of a0 = 1... +c ---------------------------------------------------------------- + call getstruc(mynod,bravais_lattice,omegbra,etainv, + > iprslat_mad,ipknlat_mad, + > rslat_x,rslat_y,rslat_z,rslatsq,nrslat, + > knlat_x,knlat_y,knlat_z,knlatsq,nknlat, + > iprint,istop) +c ---------------------------------------------------------------- +c +c ================================================================ +c set up the Madelung matrix...................................... +c ---------------------------------------------------------------- + call madewd(nrslat,nknlat,mynod+1,num_atoms,one, + > rslat_x,rslat_y,rslat_z,rslatsq, + > knlat_x,knlat_y,knlat_z,knlatsq, + > atom_posi_x,atom_posi_y,atom_posi_z, + > etainv,omegbra,madmat, + > iprint,istop) +c ---------------------------------------------------------------- +c ================================================================ +c obtain the lattice vectors for the big cell..................... +c rslat, rslatsq, knlat, and knlatsq are in atomic units +c ---------------------------------------------------------------- + etainv=(etainv0+0.01*max(a1,a2,a3)/a0)*a0 + call getstruc(mynod,bravais_lattice_in,omegbra,etainv, + > iprslat_mad,ipknlat_mad, + > rslat_x,rslat_y,rslat_z,rslatsq,nrslat, + > knlat_x,knlat_y,knlat_z,knlatsq,nknlat, + > iprint,istop) +c > 0,'none') +c ---------------------------------------------------------------- + eta=1.d0/etainv +c +c ================================================================ +c find near neighbor distance : used to set 'rmau'............... + dmax=zero + do i=1,num_atoms + dis2=(atom_posi_x_in(i)+atom_posi_x_in(mynod+1))**2 + > +(atom_posi_y_in(i)+atom_posi_y_in(mynod+1))**2 + > +(atom_posi_z_in(i)+atom_posi_z_in(mynod+1))**2 + dmax=max(dmax,dis2) + enddo + dmax=sqrt(dmax) + dmin2=1.d+18 + if(nrslat.gt.1)dmin2=rslatsq(2) + dmin=sqrt(dmin2) + k=1 + imin=0 + dowhile(rslatsq(k).lt.(dmax+dmin)**2.and.k.lt.nrslat-1) + dx=rslat_x(k)-atom_posi_x_in(mynod+1) + dy=rslat_y(k)-atom_posi_y_in(mynod+1) + dz=rslat_z(k)-atom_posi_z_in(mynod+1) + do i=1,num_atoms + dis2=(atom_posi_x_in(i)+dx)**2 + > +(atom_posi_y_in(i)+dy)**2 + > +(atom_posi_z_in(i)+dz)**2 + if(.not.(i.eq.mynod+1.and.k.eq.1).and.dis2.lt.dmin2)then + dmin2=dis2 + imin=i + endif + enddo + k=k+1 + dmin=sqrt(dmin2) + enddo +c rmau=dmin*.5d0 + rmau=dmin*.01d0 + if(iprint.ge.0) then + write(6,'(/,'' CAL_MADELUNG_MATRIX:: mynode,etainv,rmau: '', + > i5,2d15.7)') mynod,etainv,rmau + endif + if(rmau.gt.100.0) then + write(6,'('' CAL_MADELUNG_MATRIX:: danger : rmau ='',d12.4)') + > rmau + call fstop('sname') + endif +c ---------------------------------------------------------------- + call madewdj(nrslat,nknlat,mynod+1,num_atoms, + > rslat_x,rslat_y,rslat_z,rslatsq, + > knlat_x,knlat_y,knlat_z,knlatsq, + > atom_posi_x_in,atom_posi_y_in,atom_posi_z_in, + & lmax,clm,lofj,mofj,ndlm,ndlmv,rmau,rcutau, + > eta,omegbra,madmatj, + > iprint,istop) +c ---------------------------------------------------------------- +c + do k=1,num_atoms + do j=1,ndlm + madmatj(j,k)=madmatj(j,k)/rmau**lofj(j) + enddo + enddo +c ================================================================ + if(sname.eq.istop) then + call fstop(sname) + else + return + endif + end diff --git a/src/Madelung/calculateMadelungMatrices.cpp b/src/Madelung/calculateMadelungMatrices.cpp new file mode 100644 index 000000000..7695a58f8 --- /dev/null +++ b/src/Madelung/calculateMadelungMatrices.cpp @@ -0,0 +1,39 @@ +#include "Main/SystemParameters.hpp" +#include "Madelung.hpp" + +void calculateMadelungMatrices(LSMSSystemParameters &lsms, CrystalParameters &crystal, LocalTypeInfo &local) +{ + std::vector atom_position_1(crystal.num_atoms); + std::vector atom_position_2(crystal.num_atoms); + std::vector atom_position_3(crystal.num_atoms); + for(int i=0; i map,lmax,kkrsz, + & atom_position_1,atom_position_2,atom_position_3, + > rsclu,nrsclu,system_bravais, + > clm,cgnt, + > lofk,mofk, + > ilp1,illp, + > nbortyp, + > pi,pi2,pi4,iprint,istop) +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + use MPPModule, only : GlobalCollect, bcastMessage +c + implicit none +c +c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +! include 'mpif.h' + include 'param_rsp.h' +c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +c + character istop*32 + character sname*20 +c + integer lmx,kkr,ndlm,ndlj + parameter (lmx=1) + parameter (kkr=(lmx+1)**2) + parameter (ndlj=(2*lmx+1)**2) + parameter (ndlm=(2*lmx+1)*(lmx+1)) + integer maxb + parameter (maxb=5) +c + integer mynod + integer lmax,kkrsz + integer nrsclu + integer lofk(ndlj) + integer mofk(ndlj) + integer nbortyp(nrsclu) + integer itype + integer iprint + integer ir,is,jr + integer i, info + integer ntype,num_atoms + integer m,n,l + integer m1,n1,l1 + integer map(num_atoms) + integer counter +c + real*8 atom_position_1(num_atoms) + real*8 atom_position_2(num_atoms) + real*8 atom_position_3(num_atoms) + real*8 xoff,yoff,zoff + real*8 rsclu(iprsclu,3) + real*8 system_bravais(3,3) + real*8 clm(ndlm) + real*8 cgnt((lmax+1)*kkrsz*kkrsz) + real*8 pi + real*8 pi2 + real*8 pi4 + real*8 plm(ndlm) + real*8 sinmp(2*lmx+1) + real*8 cosmp(2*lmx+1) + real*8 r2 + real*8 ri(3),rj(3) + real*8 vects(3) +c + real*8 zero + real*8 half + real*8 one + real*8 two + real*8 three + real*8 tol + real*8 sqrpi4 +c + real*8 madmat(num_atoms) + complex*16 madmatj(3,num_atoms,2) + complex*16 gijmad(kkr,kkr,ntype) + complex*16 gij(kkr,kkr) + complex*16 gijtmp(kkr) + complex*16 hfn(2*lmx+1) + complex*16 dlm(ndlj) +c + complex*16 ilp1(0:2*lmx) + complex*16 illp(kkrsz*kkrsz) +c + complex*16 czero + complex*16 cone +c + parameter (sname='getgijmad') + parameter (tol=2.d-6) + parameter (zero=0.0d0) + parameter (half=0.5d0) + parameter (one=1.0d0) + parameter (two=2.0d0) + parameter (three=3.0d0) + parameter (czero=(0.0d0,0.0d0)) + parameter (cone=(1.0d0,0.0d0)) + + real*8 xp,yp,zp + real*8 x,y,z,leng2 + leng2(x,y,z)=x*x+y*y+z*z +c +c ********TESTING********** + if(iprint.ge.1) then + do ir=1,num_atoms + if(abs(madmatj(2,ir,1)).gt.1.d-10.or. + & abs(madmatj(3,ir,1)).gt.1.d-10) + & write(6,'(i3,1p4e15.6)') ir,(madmatj(jr,ir,1),jr=2,3) + enddo + endif +c ********TESTING********** + + sqrpi4=sqrt(pi4) + call zeroout(gijmad,2*kkr*kkr*ntype) + xoff=atom_position_1(mynod+1) + yoff=atom_position_2(mynod+1) + zoff=atom_position_3(mynod+1) + + do ir=2,nrsclu + itype=nbortyp(ir) + x=rsclu(ir,1)+xoff + y=rsclu(ir,2)+yoff + z=rsclu(ir,3)+zoff + ri(1)=rsclu(1,1)-rsclu(ir,1) + ri(2)=rsclu(1,2)-rsclu(ir,2) + ri(3)=rsclu(1,3)-rsclu(ir,3) + +c Find the sublattice this site belongs to + do is=1,num_atoms + if(map(is).eq.itype) then + xp=x-atom_position_1(is) + yp=y-atom_position_2(is) + zp=z-atom_position_3(is) + do m1=-maxb,maxb + do n1=-maxb,maxb + do l1=-maxb,maxb + do i=1,3 + rj(i)=m1*system_bravais(i,1)+n1*system_bravais(i,2)+ + & l1*system_bravais(i,3) + enddo + vects(1)=rj(1)+xp + vects(2)=rj(2)+yp + vects(3)=rj(3)+zp + if(leng2(vects(1),vects(2),vects(3)).le.tol*tol) goto 3 + enddo ! l1 + enddo ! n1 + enddo ! m1 + endif ! map + enddo ! is +c If we are here something is wrong + write(6,'(''GETGIJMAD:: error'')') + stop'getgijmad' + 3 continue +c ======================================================= +c g(Rij) calculation..................................... +c ------------------------------------------------------- + call makegij(lmx,kkr,lmx,kkr, + > lmax,kkrsz,ndlj,ndlm, + > czero,ri,sinmp,cosmp, + > clm,plm,cgnt,lofk,mofk, + > ilp1,illp, + > hfn,dlm,gij, + > pi4,iprint,istop) + madmatj(1,is,1)=madmatj(1,is,1)+gij(1,1)*sqrpi4 +c factor of three is (2*l+1)!! + madmatj(2,is,1)=madmatj(2,is,1)+gij(3,1) + & *sqrpi4/three + madmatj(3,is,1)=madmatj(3,is,1)+gij(4,1) + & *sqrpi4/three + + enddo ! ir + + if(iprint.ge.1) then + do ir=1,num_atoms + if(abs(madmatj(2,ir,1)).gt.1.d-10.or. + & abs(madmatj(3,ir,1)).gt.1.d-10) + & write(6,'(i3,1p4e15.6)') ir,(madmatj(jr,ir,1),jr=2,3) + enddo + endif + +c the dipole moments have directions, which may be different for +c different equivalent atoms. We need to find the rotation that rotates +c the atom to one on a real node. We don't really need the rotation. +c Just find the atom that has the same distance to the origin and +c the center of the cluster (within a multiple of the unit vectors). + +c r2 is the distance of the atom ir to the origin +c +c gijmad(*,1,i) is the madelung matrix that generates the dipole +c potential on site i from all other monopoles. gijmad(1,*,i) is +c the madelung matrix that generates the monopole potential on +c site i from all other dipoles. + do ir=1,num_atoms + itype=map(ir) + if (mynod+1 .eq. itype) then + madmatj(:,:,2) = madmatj(:,:,1) + end if +! call mpi_bcast(madmatj(1,1,2), 3*num_atoms, mpi_double_complex, +! & itype-1, mpi_comm_world, info) + call bcastMessage(madmatj(:,1,2),3*num_atoms, itype-1) + if(ir.ne.itype) madmat(itype)=madmat(itype)+madmat(ir) + ri(1)=atom_position_1(ir)-atom_position_1(mynod+1) + ri(2)=atom_position_2(ir)-atom_position_2(mynod+1) + ri(3)=atom_position_3(ir)-atom_position_3(mynod+1) + r2=leng2(ri(1),ri(2),ri(3)) + +c factor of two is from Rydberg + gijmad(1,1,itype)=gijmad(1,1,itype)+two*madmatj(1,ir,1) + gijmad(2,1,itype)=gijmad(2,1,itype)- + & two*conjg(madmatj(3,ir,1)) + gijmad(3,1,itype)=gijmad(3,1,itype)+two*madmatj(2,ir,1) + gijmad(4,1,itype)=gijmad(4,1,itype)+two*madmatj(3,ir,1) + counter=0 + call zeroout(gijtmp,2*kkr) + do jr=1,num_atoms + if(map(jr).eq.mynod+1) then + xp=atom_position_1(jr)-atom_position_1(itype) + yp=atom_position_2(jr)-atom_position_2(itype) + zp=atom_position_3(jr)-atom_position_3(itype) + do m1=-maxb,maxb + do n1=-maxb,maxb + do l1=-maxb,maxb + do i=1,3 + rj(i)=m1*system_bravais(i,1)+n1*system_bravais(i,2)+ + & l1*system_bravais(i,3) + enddo + vects(1)=xp+rj(1) + vects(2)=yp+rj(2) + vects(3)=zp+rj(3) + if(abs(r2-leng2(vects(1),vects(2),vects(3))).le.tol) then + gijtmp(2)=gijtmp(2)-two*madmatj(3,jr,2) + gijtmp(3)=gijtmp(3)+two*conjg(madmatj(2,jr,2)) + gijtmp(4)=gijtmp(4)+two*conjg(madmatj(3,jr,2)) + counter=counter+1 + endif + enddo ! l1 + enddo ! n1 + enddo ! m1 + endif ! map + enddo ! jr + + if(counter.eq.0) then + if(iprint.ge.0) then + write(6,'(''getgijmad: no rotation for ir,itype='',3i4)') + & ir,itype + write(6,'(''getgijmad:: atom_position='',3f10.5)') + & atom_position_1(ir),atom_position_2(ir), + & atom_position_3(ir),ri + endif + counter=1 + gijtmp(2)=gijtmp(2)-two*madmatj(3,ir,1) + gijtmp(3)=gijtmp(3)+two*conjg(madmatj(2,ir,1)) + gijtmp(4)=gijtmp(4)+two*conjg(madmatj(3,ir,1)) + endif + do l=2,kkr + gijmad(1,l,itype)=gijmad(1,l,itype)+gijtmp(l)/counter + enddo +199 continue + enddo !ir + + if(iprint.ge.1) then + do i=1,ntype + write(6,'(''getgijmad:: gijmad: itype='',i4)') i + call wrtmtx(gijmad(1,1,i),kkr,istop) + enddo + endif +c +c ================================================================ + if(istop.eq.sname) then + call fstop(sname) + else + return + endif +c + end diff --git a/src/Madelung/getkncut.f b/src/Madelung/getkncut.f new file mode 100755 index 000000000..d26f22a6e --- /dev/null +++ b/src/Madelung/getkncut.f @@ -0,0 +1,81 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine getkncut(eta,a1,a2,a3,kncut,nm1,nm2,nm3) +c ================================================================ +c + implicit none +c + integer nm1 + integer nm2 + integer nm3 + integer i + integer j + integer k +c + real*8 eta + real*8 a1(3) + real*8 a2(3) + real*8 a3(3) + real*8 r(3) + real*8 rm2 + real*8 term + real*8 kncut + real*8 fac + real*8 epsi +c + parameter (epsi=1.0d-14) +c + fac=eta*eta/4.0d0 +c +c ================================================================ +c calculate nm1,nm2,nm3........................................... +c ================================================================ + r(1)=a1(1)*a1(1)+a1(2)*a1(2)+a1(3)*a1(3) + term=1.0d0 + nm1=0 + do while(term.gt.epsi) + nm1=nm1+1 + rm2=nm1*nm1*r(1) + term=exp(-fac*rm2)/rm2 + enddo + r(2)=a2(1)*a2(1)+a2(2)*a2(2)+a2(3)*a2(3) + term=1.0d0 + nm2=0 + do while(term.gt.epsi) + nm2=nm2+1 + rm2=nm2*nm2*r(2) + term=exp(-fac*rm2)/rm2 + enddo + r(3)=a3(1)*a3(1)+a3(2)*a3(2)+a3(3)*a3(3) + term=1.0d0 + nm3=0 + do while(term.gt.epsi) + nm3=nm3+1 + rm2=nm3*nm3*r(3) + term=exp(-fac*rm2)/rm2 + enddo +c +c ================================================================ +c calculate kncut................................................. +c ================================================================ + kncut=sqrt(r(1))*nm1 + do i=-1,1 + r(1)=i*a1(1)*nm1 + r(2)=i*a1(2)*nm1 + r(3)=i*a1(3)*nm1 + do j=-1,1 + r(1)=r(1)+j*a2(1)*nm2 + r(2)=r(2)+j*a2(2)*nm2 + r(3)=r(3)+j*a2(3)*nm2 + do k=-1,1 + r(1)=r(1)+k*a3(1)*nm3 + r(2)=r(2)+k*a3(2)*nm3 + r(3)=r(3)+k*a3(3)*nm3 + rm2=r(1)*r(1)+r(2)*r(2)+r(3)*r(3) + kncut=max(kncut,sqrt(rm2)) + enddo + enddo + enddo +c + return + end diff --git a/src/Madelung/getrscut.f b/src/Madelung/getrscut.f new file mode 100755 index 000000000..6716b1f80 --- /dev/null +++ b/src/Madelung/getrscut.f @@ -0,0 +1,79 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine getrscut(eta,a1,a2,a3,rscut,nm1,nm2,nm3) +c ================================================================ +c + implicit none +c + integer nm1 + integer nm2 + integer nm3 + integer i + integer j + integer k +c + real*8 eta + real*8 a1(3) + real*8 a2(3) + real*8 a3(3) + real*8 r(3) + real*8 rm + real*8 term + real*8 rscut + real*8 epsi + real*8 erfc +c + parameter (epsi=1.0d-14) +c +c ================================================================ +c calculate nm1,nm2,nm3........................................... +c ================================================================ + r(1)=sqrt(a1(1)*a1(1)+a1(2)*a1(2)+a1(3)*a1(3)) + term=1.0d0 + nm1=0 + do while(term.gt.epsi) + nm1=nm1+1 + rm=nm1*r(1) + term=erfc(rm/eta)/rm + enddo + r(2)=sqrt(a2(1)*a2(1)+a2(2)*a2(2)+a2(3)*a2(3)) + term=1.0d0 + nm2=0 + do while(term.gt.epsi) + nm2=nm2+1 + rm=nm2*r(2) + term=erfc(rm/eta)/rm + enddo + r(3)=sqrt(a3(1)*a3(1)+a3(2)*a3(2)+a3(3)*a3(3)) + term=1.0d0 + nm3=0 + do while(term.gt.epsi) + nm3=nm3+1 + rm=nm3*r(3) + term=erfc(rm/eta)/rm + enddo +c +c ================================================================ +c calculate rscut................................................. +c ================================================================ + rscut=r(1)*nm1 + do i=-1,1 + r(1)=i*a1(1)*nm1 + r(2)=i*a1(2)*nm1 + r(3)=i*a1(3)*nm1 + do j=-1,1 + r(1)=r(1)+j*a2(1)*nm2 + r(2)=r(2)+j*a2(2)*nm2 + r(3)=r(3)+j*a2(3)*nm2 + do k=-1,1 + r(1)=r(1)+k*a3(1)*nm3 + r(2)=r(2)+k*a3(2)*nm3 + r(3)=r(3)+k*a3(3)*nm3 + rm=sqrt(r(1)*r(1)+r(2)*r(2)+r(3)*r(3)) + rscut=max(rscut,rm) + enddo + enddo + enddo +c + return + end diff --git a/src/Madelung/getstruc.f b/src/Madelung/getstruc.f new file mode 100755 index 000000000..43044c3ae --- /dev/null +++ b/src/Madelung/getstruc.f @@ -0,0 +1,149 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine getstruc(mynod,vbrar,omegbra,eta, + > iprslat_mad,ipknlat_mad, + > rslat_x,rslat_y,rslat_z,rslatsq,nrslat, + > knlat_x,knlat_y,knlat_z,knlatsq,nknlat, + > iprint,istop) +c ================================================================ +c + implicit none +c + character sname*32 + character istop*32 +c + integer mynod + integer iprslat_mad + integer ipknlat_mad + integer nrslat + integer nknlat + integer n1 + integer nm1 + integer nm2 + integer nm3 + integer iprint +c + real*8 eta + real*8 rslat_x(iprslat_mad) + real*8 rslat_y(iprslat_mad) + real*8 rslat_z(iprslat_mad) + real*8 rslatsq(iprslat_mad) + real*8 vbrar(3,3) + real*8 knlat_x(ipknlat_mad) + real*8 knlat_y(ipknlat_mad) + real*8 knlat_z(ipknlat_mad) + real*8 knlatsq(ipknlat_mad) + real*8 vbrak(3,3) + real*8 rscut + real*8 kncut + real*8 omegbra + real*8 two + real*8 fnpi + real*8 factor +c + parameter (two=2.0d0) + parameter (sname='getstruc') +c +c **************************************************************** +c Sets up real space and receprocal space Bravais lattice vectors +c **************************************************************** +c +c ================================================================ +c calculate rscut, the radius of real space truncation sphere..... +c ---------------------------------------------------------------- + call getrscut(eta,vbrar(1,1),vbrar(1,2),vbrar(1,3), + > rscut,nm1,nm2,nm3) +ctest +c nm1=6 +c nm2=6 +c nm3=6 +c rscut=44.d0*8.d0/6.2831853d0 +ctest +c ---------------------------------------------------------------- +c +c ================================================================ +c generate the real space lattice vectors......................... +c ---------------------------------------------------------------- + call lattice(vbrar,rscut,nm1,nm2,nm3, + > rslat_x,rslat_y,rslat_z,rslatsq,nrslat,iprslat_mad, + > iprint,istop) +c ---------------------------------------------------------------- + if(iprint.ge.1) then + write(6,'(/,'' GETSTRUC:: nm1,nm2,nm3 = '',3i5)')nm1,nm2,nm3 + write(6,'( '' Rs cut radius = '',1f10.5)') rscut + write(6,'( '' Number of Rs = '',i5)') nrslat + endif +c ================================================================ +c calculate the bravais lattice cell volume...................... + omegbra=(vbrar(2,1)*vbrar(3,2)-vbrar(3,1)*vbrar(2,2))*vbrar(1,3)+ + > (vbrar(3,1)*vbrar(1,2)-vbrar(1,1)*vbrar(3,2))*vbrar(2,3)+ + > (vbrar(1,1)*vbrar(2,2)-vbrar(2,1)*vbrar(1,2))*vbrar(3,3) + omegbra=abs(omegbra) +c +c ================================================================ +c generate basis vectors for reciprocal space.................... + factor=two*fnpi()/omegbra + vbrak(1,1)=factor*(vbrar(2,2)*vbrar(3,3)-vbrar(3,2)*vbrar(2,3)) + vbrak(2,1)=factor*(vbrar(3,2)*vbrar(1,3)-vbrar(1,2)*vbrar(3,3)) + vbrak(3,1)=factor*(vbrar(1,2)*vbrar(2,3)-vbrar(2,2)*vbrar(1,3)) + vbrak(1,2)=factor*(vbrar(2,3)*vbrar(3,1)-vbrar(3,3)*vbrar(2,1)) + vbrak(2,2)=factor*(vbrar(3,3)*vbrar(1,1)-vbrar(1,3)*vbrar(3,1)) + vbrak(3,2)=factor*(vbrar(1,3)*vbrar(2,1)-vbrar(2,3)*vbrar(1,1)) + vbrak(1,3)=factor*(vbrar(2,1)*vbrar(3,2)-vbrar(3,1)*vbrar(2,2)) + vbrak(2,3)=factor*(vbrar(3,1)*vbrar(1,2)-vbrar(1,1)*vbrar(3,2)) + vbrak(3,3)=factor*(vbrar(1,1)*vbrar(2,2)-vbrar(2,1)*vbrar(1,2)) + if(iprint.ge.1) then + write(6,'(/)') + write(6,'(12x, + > '' n rslat '', + > ''rslatsq'')') + write(6,'(12x,56(''=''))') + write(6,'(12x,1i5,2x,4f12.5)') + > (n1,rslat_x(n1),rslat_y(n1),rslat_z(n1),rslatsq(n1), + > n1=1,nrslat) + write(6,'(/)') + endif +c +c ================================================================ +c calculate kncut, the radius of k-space truncation sphere........ +c ---------------------------------------------------------------- + call getkncut(eta,vbrak(1,1),vbrak(1,2),vbrak(1,3), + > kncut,nm1,nm2,nm3) +c ---------------------------------------------------------------- +c +c ================================================================ +ctest +c nm1=6 +c nm2=6 +c nm3=6 +c kncut=.98d0 +c kncut=.98d0/8.d0*6.2831853d0 +ctest +c generate the reciprocal space lattice vectors................... +c ---------------------------------------------------------------- + call lattice(vbrak,kncut,nm1,nm2,nm3, + > knlat_x,knlat_y,knlat_z,knlatsq,nknlat,ipknlat_mad, + > iprint,istop) +c ---------------------------------------------------------------- + if(iprint.ge.1) then + write(6,'( '' nm1,nm2,nm3 = '',3i5)')nm1,nm2,nm3 + write(6,'( '' Kn cut radius = '',1f10.5)') kncut + write(6,'( '' Number of Kn = '',i5)') nknlat + write(6,'(/)') + write(6,'(12x, + > '' n knlat '', + > ''knlatsq'')') + write(6,'(12x,56(''=''))') + write(6,'(12x,1i5,2x,4f12.5)') + > (n1,knlat_x(n1),knlat_y(n1),knlat_z(n1),knlatsq(n1), + > n1=1,nknlat) + endif +c +c ================================================================ + if(sname.eq.istop) then + call fstop(sname) + else + return + endif +c + end diff --git a/src/Madelung/interf.f b/src/Madelung/interf.f new file mode 100755 index 000000000..297fc01a0 --- /dev/null +++ b/src/Madelung/interf.f @@ -0,0 +1,87 @@ + subroutine interf(plmofz, + >eta,rm,lmax,ndlm,mofj,lofj,clm,xgs,wgs,ngauss_mad,rdif,dqintl) +c integrate gaussian from xi0 to infinity +c to get(one/r- error function/r) subtract one/r to get +c potential from -gaussian a distance rdif from origin on z-axis +c integrate over cos(theta) at a distance rm from origin to get dqintl +c + implicit none +c + integer lmax +c + integer ndlm + integer lofj(ndlm) + integer mofj(ndlm) + integer l + integer m + integer j + integer iz + integer ngauss_mad +c + real*8 erfc + real*8 clm(ndlm) + real*8 plmofz(ndlm) + real*8 fnpi + real*8 rm +c + real*8 xgs(ngauss_mad) + real*8 wgs(ngauss_mad) +c + real*8 dqintl(0:lmax) + real*8 r + real*8 eta + real*8 xi0 + real*8 sum + real*8 half + real*8 one + real*8 rho2 + real*8 z + real*8 rdif + real*8 pi + real*8 twopi + real*8 two + parameter (half=0.5d0) + parameter (one=1.0d0) + parameter (two=2.0d0) +c ------------------------------------------------------------------- + pi=fnpi() + twopi=two*pi + call zeroout(dqintl(0),lmax+1) + xi0 = sqrt(eta)*half +c loop over cos(theta) + do iz=1,ngauss_mad + z=xgs(iz) +c sin(theta)**2 + rho2=one-z*z +c actual x*x+y*y + rho2=rm*rm*rho2 +c distance from sphere to gaussian center at z=rdif +c actual z determined by cos(theta) and rm + r=sqrt((rdif-rm*z)**2+rho2) +c calculate potential at this distance +c ------------------------------------------------------------------- +c erfc is defined as +c 2/sqrt(pi) int_x^infty exp(-x*x)dx +c --- xgz + sum=(erfc(r*xi0)-one)/r +c sum contribution of potential to particular L + sum=wgs(iz)*sum*twopi +c it doesn't matter if we use ylm or cylm because m=0 +c we could save time with a legengre polynomial routine for m=0 +c get legendre polynomials on z=cos(theta) grid +! meis: changed to normalized associated Legendre functions + call plm_normalized(lmax,z,plmofz) +c loop over L + do j=1,ndlm + m=mofj(j) +c only m=0 contributes + if(m.eq.0)then + l=lofj(j) + dqintl(l) = dqintl(l)+clm(j)*plmofz(j)*sum + endif + enddo + enddo +c + return +c + end diff --git a/src/Madelung/interfsmr.f b/src/Madelung/interfsmr.f new file mode 100755 index 000000000..a73354580 --- /dev/null +++ b/src/Madelung/interfsmr.f @@ -0,0 +1,105 @@ +c ==================================================================== + subroutine interfsmr(plmofz, + > eta,rm,lmax,ndlm,mofj,lofj,clm, + > xgs,wgs,ngauss_mad,ngaussr_mad,rdif,dqintl) +c ==================================================================== +c +c ******************************************************************** +c integrate gaussian from 0 to xi0 +c to get( error function) divid by r to get +c potential from gaussian adistance rdif from origin on z-axis +c integrate over cos(theta) at a distance rm from origin to get dqintl +c ******************************************************************** +c + implicit none +c + integer lmax +c + integer ndlm + integer lofj(ndlm) + integer mofj(ndlm) + integer l + integer m + integer n + integer j + integer iz + integer ngauss_mad + integer ngaussr_mad +c + real*8 clm(ndlm) + real*8 plmofz(ndlm) + real*8 fnpi + real*8 rm +c + real*8 xgs(ngauss_mad) + real*8 wgs(ngauss_mad) +c + real*8 dqintl(0:lmax) + real*8 rssq + real*8 eta + real*8 xi + real*8 xisq + real*8 xi0 + real*8 arg + real*8 sum + real*8 zero + real*8 half + real*8 one + real*8 rho2 + real*8 z + real*8 rdif + real*8 pi + real*8 twopi + real*8 two + real*8 xg(ngaussr_mad),wg(ngaussr_mad) + parameter (zero=0.0d0) + parameter (half=0.5d0) + parameter (one=1.0d0) + parameter (two=2.0d0) +c ------------------------------------------------------------------- + pi=fnpi() + twopi=two*pi + call zeroout(dqintl(0),lmax+1) + xi0 = sqrt(eta)*half +! call gauleg(zero,xi0,xg,wg,ngaussr_mad) + call gauss_legendre_points(zero,xi0,xg,wg,ngaussr_mad) +c loop over cos(theta) + do iz=1,ngauss_mad + z=xgs(iz) + rho2=one-z*z +c actual x*x+y*y + rho2=rm*rm*rho2 +c distance from sphere to gaussian center at z=rdif +c actual z determined by cos(theta) and rm + rssq=(rdif-rm*z)**2+rho2 +c calculate potential at this distance + sum=zero + do n=1,ngaussr_mad + xi=xg(n) + xisq = xi * xi + arg = - rssq*xisq + sum = sum+exp(arg)*wg(n) + enddo +c potential for negative gaussian +c Don't divide by r because the integral was rescaled from (0,r*xi0) +c to (0,xi0) thus missing a factor of r. + sum=-sum*two/sqrt(pi) + sum=wgs(iz)*sum*twopi +c get legendre polynomials on z=cos(theta) grid +! meis: changed to normalized associated Legendre functions + call plm_normalized(lmax,z,plmofz) +c ------------------------------------------------------------------- +c loop over L + do j=1,ndlm + m=mofj(j) +c only m=0 contributes + if(m.eq.0)then + l=lofj(j) +c potential for negative gaussian plus delta funtion + dqintl(l) = dqintl(l)+clm(j)*plmofz(j)*sum + endif + enddo + enddo + return +c + end diff --git a/src/Madelung/lattice.f b/src/Madelung/lattice.f new file mode 100755 index 000000000..64eb77489 --- /dev/null +++ b/src/Madelung/lattice.f @@ -0,0 +1,117 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine lattice(vbra,vcut,nm1,nm2,nm3, + > vlat_1,vlat_2,vlat_3,vsq,nv,ipmax, + > iprint,istop) +c ================================================================ +c + implicit none +c + character sname*32 + character istop*32 +c + integer nv + integer ipmax + integer iprint + integer nm1 + integer nm2 + integer nm3 + integer tn1p1 + integer tn2p1 + integer tn3p1 + integer nt12 + integer nt23 + integer nt123 + integer n1 + integer n2 + integer n3 + integer i +c + real*8 vlat_1(ipmax) + real*8 vlat_2(ipmax) + real*8 vlat_3(ipmax) + real*8 vsq(ipmax) + real*8 vn(3) + real*8 vbra(3,3) + real*8 vnsq + real*8 vcut + real*8 vcut2 + real*8 tol + real*8 zero +c + parameter (tol=1.0d-06) + parameter (zero=0.0d0) + parameter (sname='lattice') +c +c **************************************************************** +c Calculates lattice vectors ..................................... +c input: +c vbra : basis vectors for bravais lattice +c vcut : cut off radius for lattice vectors +c nm1 : number of repeats of vbra(1) +c nm2 : number of repeats of vbra(2) +c nm3 : number of repeats of vbra(3) +c ipmax : dimension of array that will contain vectors +c output: +c vlat : bravais lattice vectors +c vsq : square of length of lattice vectors +c nv : number of lattice vectors +c +c **************************************************************** +c +c ================================================================ + if(iprint.ge.1) then + write(6,'('' lattice:: nm1,nm2,nm3 = '',3i3)') nm1,nm2,nm3 + write(6,'('' lattice:: Basis vectors'')') + do n1=1,3 + write(6,'(5x,3f10.5)') (vbra(n2,n1),n2=1,3) + enddo + endif +c ================================================================ +c generate lattice vectors........................................ + nv=0 + vcut2=vcut*vcut+tol + tn1p1=2*nm1+1 + tn2p1=2*nm2+1 + tn3p1=2*nm3+1 + nt12=tn1p1*tn2p1 + nt23=tn2p1*tn3p1 + nt123=nt12*tn3p1 + do i=1,nt123 + n1=i-1 + n1=mod(n1,tn1p1)-nm1 + n2=(i-1)/tn1p1 + n2=mod(n2,tn2p1)-nm2 + n3=(i-1)/nt12 + n3=mod(n3,tn3p1)-nm3 + vn(1) = n1*vbra(1,1)+n2*vbra(1,2)+n3*vbra(1,3) + vn(2) = n1*vbra(2,1)+n2*vbra(2,2)+n3*vbra(2,3) + vn(3) = n1*vbra(3,1)+n2*vbra(3,2)+n3*vbra(3,3) + vnsq=vn(1)*vn(1)+vn(2)*vn(2)+vn(3)*vn(3) + if(vnsq.le.vcut2) then + if(nv+1.gt.ipmax) then + write(6,'('' lattice:: nv.gt.ipmax:'',2i5)') + > nv,ipmax + call fstop(sname) + endif +c ---------------------------------------------------------- + call ord3v(vlat_1,vlat_2,vlat_3,vsq,nv,vn,vnsq,istop) +c ---------------------------------------------------------- + endif + enddo +c ================================================================ + if(iprint.ge.1) then + write(6,'(/'' lattice: number of lattice vectors is'', + > i5)') nv +c write(6,'('' n,vlat '',i5,4f10.5)') +c > (n1,vlat_1(n1),vlat_2(n1),vlat_3(n1),vsq(n1),n1=1,nv) + endif +c +c ================================================================ + if(sname.eq.istop) then + call fstop(sname) + else + return + endif +c + end diff --git a/src/Madelung/lmfacts.f b/src/Madelung/lmfacts.f new file mode 100755 index 000000000..e062db1cf --- /dev/null +++ b/src/Madelung/lmfacts.f @@ -0,0 +1,39 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine lmfacts(lmax,ndlj,ndlm,lofj,mofj,lofk,mofk) +c ================================================================ +c + implicit none +c + integer lmax + integer ndlj + integer ndlm + integer lofj((lmax+1)*(lmax+2)/2) + integer mofj((lmax+1)*(lmax+2)/2) + integer lofk((lmax+1)*(lmax+1)) + integer mofk((lmax+1)*(lmax+1)) + integer j + integer k + integer l + integer m + integer ma +c + ndlj=(lmax+1)**2 + ndlm=(lmax+1)*(lmax+2)/2 + j=0 + k=0 + do l=0,lmax + do m=0,l + j=j+1 + lofj(j)=l + mofj(j)=m + enddo + do m=-l,l + k=k+1 + lofk(k)=l + mofk(k)=m + enddo + enddo +c + return + end diff --git a/src/Madelung/madelung.h b/src/Madelung/madelung.h new file mode 100755 index 000000000..4fd38ecaa --- /dev/null +++ b/src/Madelung/madelung.h @@ -0,0 +1,16 @@ +c +c ***************************************************************** +c parameter statements for the 'Madelung' code that is part of LSMS +c ***************************************************************** +c + integer iprslat_mad + integer ipknlat_mad + integer iplmax_mad + integer ngauss_mad + integer ngaussr_mad +c + parameter(iprslat_mad=4001) + parameter(ipknlat_mad=9215) + parameter(iplmax_mad=10) + parameter(ngauss_mad=64) + parameter(ngaussr_mad=201) diff --git a/src/Madelung/madewd.f b/src/Madelung/madewd.f new file mode 100755 index 000000000..8a70caa56 --- /dev/null +++ b/src/Madelung/madewd.f @@ -0,0 +1,172 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine madewd(lastrs,lastkn,myatom,num_atoms,alat, + > rslat_x,rslat_y,rslat_z,rslatmd, + > knlat_x,knlat_y,knlat_z,knlatsq, + > atom_posi_x,atom_posi_y,atom_posi_z, + > eta,tau,madmat, + > iprint,istop) +c ================================================================ +c +c **************************************************************** +c program calculates the madelung constants +c written by w.a.s.,jr. 2-21-88 +c modified by y.w., 06-20-94 +c modified by y.w., 06-06-95 +c +c **************************************************************** +c input : +c ===== +c 1.) ewald card +c lastrs = number real-space vectors +c rslat= real-space vectors (in the units of a0=1) +c rslatmd= rslat module +c lastkn = number reciprocal-space vectors +c knlat = reciprocal-space vectors (in the units of a0=1) +c knlatsq= knlat square +c eta = ewald parameter +c num_atoms = number of atoms in the unit cell +c tau = Wigner-Seitz volume +c +c calling sequence +c ================ +c | +c intewld ! evaluates integral over eta +c | +c | +c madsum ! real & recip space sums +c +c **************************************************************** +c + implicit none +c + character istop*32 + character sname*32 + parameter (sname='madewd') +c + integer lastrs + integer lastkn + integer num_atoms + integer iprint + integer ibegin + integer myatom + integer n + integer i +c + real*8 atom_posi_x(num_atoms) + real*8 atom_posi_y(num_atoms) + real*8 atom_posi_z(num_atoms) + real*8 rslat_x(lastrs) + real*8 rslat_y(lastrs) + real*8 rslat_z(lastrs) + real*8 rslatmd(lastrs) + real*8 knlat_x(lastkn) + real*8 knlat_y(lastkn) + real*8 knlat_z(lastkn) + real*8 knlatsq(lastkn) + real*8 madmat(num_atoms) + real*8 alat + real*8 aij(3) + real*8 r0tm + real*8 term0 + real*8 tau + real*8 eta + real*8 fnpi + real*8 pi + real*8 pi4 + real*8 zero + real*8 two + real*8 four +c + parameter (zero=0.0d0) + parameter (two=2.0d0) + parameter (four=4.0d0) +c +c **************************************************************** +c calculate Madelung's constant matrix: +c +c for i <> j, +c 2 2 -> -> +c 4*pi 1 -eta *Kq /4 - i*Kq*aij +c M = ---- * sum ----- e +c ij tau q<>0 2 +c Kq +c +c -> -> 2 +c 1 - erf(|Rn + aij|/eta) pi*eta +c + sum ------------------------- - --------- +c n -> -> tau +c |Rn + aij| +c +c for i = j, +c 2 2 +c 4*pi 1 -eta *Kq /4 +c M = ---- * sum ----- e +c ii tau q<>0 2 +c Kq +c +c 2 +c 1 - erf(Rn/eta) pi*eta 2 +c + sum ----------------- - ---------- - -------------- +c n<>0 Rn tau sqrt(pi)*eta +c +c eta is the Ewald's parameter; +c tau, atom_posi_*, rslat_* and knlat_* are in the units of a0=1; +c madmat is in the units of a0=alat; +c **************************************************************** +c + pi=fnpi() + pi4=four*pi +c + term0=-pi*eta*eta/tau +c +c ================================================================ +c start madmat calculation +c ================================================================ + do n =1,num_atoms +c ============================================================= +c aij is in the units of a0 = 1................................ +c ============================================================= + aij(1) = atom_posi_x(myatom) - atom_posi_x(n) + aij(2) = atom_posi_y(myatom) - atom_posi_y(n) + aij(3) = atom_posi_z(myatom) - atom_posi_z(n) +c + if( n .eq. myatom ) then + ibegin=2 + r0tm=-two/sqrt(pi)/eta + else + ibegin=1 + r0tm=zero + endif +c ============================================================= +c subrtact aij from rslat and calculate rslatmd which is used in +c calculating the real-space integral +c rslatmd, and aij are in the units of a0 = 1 +c ============================================================= + do i = 1,lastrs + rslatmd(i)=sqrt( (rslat_x(i)-aij(1))*(rslat_x(i)-aij(1)) + > +(rslat_y(i)-aij(2))*(rslat_y(i)-aij(2)) + > +(rslat_z(i)-aij(3))*(rslat_z(i)-aij(3)) ) + enddo +c ============================================================= +c perform the reciprocal-space sum and real-space sum +c ------------------------------------------------------------- + call madsum(lastkn,lastrs,ibegin,aij, + > rslatmd,knlat_x,knlat_y,knlat_z,knlatsq, + > eta,tau,madmat(n), + > pi4,iprint,istop) +c ------------------------------------------------------------- + madmat(n)=madmat(n)+r0tm+term0 +c ============================================================= +c The unit of madmat is finally resumed to a0 = alat +c ============================================================= + madmat(n)=madmat(n)/alat + enddo ! end do loop over n +c + if( istop .eq. sname ) then + call fstop(sname) + endif +c ================================================================ +c + return + end diff --git a/src/Madelung/madewdj.f b/src/Madelung/madewdj.f new file mode 100755 index 000000000..72b3bd42e --- /dev/null +++ b/src/Madelung/madewdj.f @@ -0,0 +1,399 @@ +c +c =========================================================== + subroutine madewdj(lastrs,lastkn,myatom,num_atoms, + > rslat_x,rslat_y,rslat_z,rssq, + & knlat_x,knlat_y,knlat_z,xknsq, + > atom_posi_x,atom_posi_y,atom_posi_z, + > lmax,clm,lofj,mofj,ndlm,ndlmv,rmau,rcutau, + > eta,omegbra,madmat,iprint,istop) +c =========================================================== +c +c ******************************************************************* +c program calculates the madelung potential from charges in periodically +c repeated cells excluding the central unit cell; the potential +c written by w.a.s.,jr. 2-21-88 modified to give potential from +c only atoms outside the unit cell and for l> 0 by DMN 1993. +c +c ******************************************************************* +c input : +c ===== +c 1.) ewald card +cccccc lastrs = number real-space vectors +cccccc rsn= real-space vectors a.u. +cccccc atom_posi_? =basis vectors in cells a.u. +cccccc lastkn = number reciprocal-space vectors +cccccc knlat = reciprocal-space vectors a.u. +cccccc eta = (ewald parameter) in a.u. +cccccc num_atoms = number of sublattices +cccccc myatom = the sublattice for which the column of the +cccccc madelung matrix is to be calculated +cccccc omegbra = unit cell volume a.u. +cccccc rmau = radius at which potential is calculated a.u. +cccccc rcutau = radius within which contributions from lattice points +cccccc are excluded a.u. +cccccc pi = 3.141.... +cccccc sqrtm1 = (0.0,1.0) +c output : +c ===== +cccccc rssq= real-space vectors magnitude squared a.u. +cccccc xknsq= reciprocal-space vectors magnitude squared a.u. +c internal : +c ===== +cccccc aijau = distance between sublattices +c +c calling sequence +c ================ +c | +c pqintg ! evaluates integral over eta +c | +c | +c madsum ! real & recip space sums +c +c*********************************************************************** + implicit none +c + include 'madelung.h' +c + character istop*32 + character sname*32 + parameter (sname='madewdj') +c + integer ipndlm + parameter (ipndlm=(iplmax_mad+1)*(iplmax_mad+2)/2) +c + integer lastrs + integer lastkn + integer num_atoms + integer iprint + integer myatom + integer nsub2 + integer i + integer icell + integer l + integer m + integer ibegin + integer j + integer ndlm,ndlmv + integer lmax + integer lofj(ndlm) + integer mofj(ndlm) +c + real*8 r + real*8 erfc + real*8 rdif + real*8 atom_posi_x(num_atoms) + real*8 atom_posi_y(num_atoms) + real*8 atom_posi_z(num_atoms) + real*8 jl(iplmax_mad+1,ipknlat_mad),work(iplmax_mad+1) + real*8 aijau(3) + real*8 plmk(ipndlm,ipknlat_mad) + real*8 dqint(iprslat_mad) + real*8 dqintl(0:iplmax_mad) + real*8 knlat_x(lastkn) + real*8 knlat_y(lastkn) + real*8 knlat_z(lastkn) + real*8 rslat_x(lastrs) + real*8 rslat_y(lastrs) + real*8 rslat_z(lastrs) + real*8 rssq(lastrs) + real*8 rcutau + real*8 rcut2 + real*8 xknsq(lastkn) + real*8 xknabs(ipknlat_mad) + real*8 xknabsi + real*8 clm(ndlm) + real*8 xgs(ngauss_mad) + real*8 wgs(ngauss_mad) + real*8 one + real*8 four + real*8 pi + real*8 rtmp1 + real*8 rtmp2 + real*8 rtmp3 + real*8 xk,rk + real*8 yk + real*8 zk + real*8 term + real*8 rmau + real*8 omegbra + real*8 eta + real*8 twoetasq + real*8 phi + real*8 plm(ipndlm) + real*8 z + real*8 fnpi + real*8 zero + real*8 half + real*8 two + real*8 eight + parameter (zero=0.0d0) + parameter (half=0.5d0) + parameter (one=1.0d0) + parameter (two=2.0d0) + parameter (four=4.0d0) + parameter (eight=8.0d0) +c + real*8 tmps,tmpc +c + complex*16 sum1(ipndlm) + complex*16 czero + complex*16 dot + complex*16 expidot + complex*16 facl(0:iplmax_mad) + complex*16 madmat(ndlmv,num_atoms) + complex*16 dqintloc(ipndlm) + complex*16 sum2 + complex*16 tmp + complex*16 trans + complex*16 cone + complex*16 expphi + complex*16 expfac + complex*16 cylm +c complex*16 cylmij(ipknlat_mad,ipndlm) + complex*16 fack(ipknlat_mad,ipndlm) + complex*16 expphim(0:iplmax_mad) + complex*16 sqrtm1 + parameter (cone=(1.0d0,0.0d0)) + parameter (czero=(0.0d0,0.0d0)) + parameter (sqrtm1=(0.0d0,1.0d0)) +c + pi=fnpi() + twoetasq=(two*eta)**2 + rcut2=(rcutau)**2 +c get weights for integration over cos(theta). used for removing +c contribution of gaussian charges inside rcut which are included in +c k space sum. +! call gauleg(-one,one,xgs,wgs,ngauss_mad) + call gauss_legendre_points(-one,one,xgs,wgs,ngauss_mad) +c +c facl apears in expresion for plane wave in terms of bessel functions + do l=0,lmax + facl(l)=sqrtm1**l + enddo +c store all factors indepedent of contributing site +c store bessel functions and legendre polynomials for all k except k=0 +c could move outside madsum +c knlat is in a.u.; it is [vj X vk]/omega*2pi +c ---------------------------------------------------------- + call zeroout(jl,(iplmax_mad+1)*ipknlat_mad) +c ---------------------------------------------------------- + do i = 2,lastkn +c length of k squared + xknsq(i)=knlat_x(i)*knlat_x(i) + + > knlat_y(i)*knlat_y(i) + + > knlat_z(i)*knlat_z(i) +c length of k + xknabs(i)=sqrt(xknsq(i)) +c ---------------------------------------------------------- + call bessj(lmax+1,xknabs(i)*rmau,jl(1,i),work) +c ---------------------------------------------------------- + xknabsi=one/xknabs(i) + zk=knlat_z(i)*xknabsi + xk=knlat_x(i)*xknabsi + yk=knlat_y(i)*xknabsi +c ---------------------------------------------------------- +! meis: changed to normalized associated Legendre functions + call plm_normalized(lmax,zk,plmk(1,i)) +c ---------------------------------------------------------- +C if(yk.eq.zero.and.xk.eq.zero)then +C phi=zero +C else +C phi=atan2(yk,xk) +C endif +C expphi=exp(sqrtm1*phi) + rk=sqrt(xk*xk+yk*yk) + if(rk.eq.zero) then + expphi=cone + else + expphi=dcmplx(xk/rk,yk/rk) + endif + tmp=cone + expphim(0)=cone + do m=1,lmax + tmp=tmp*expphi + expphim(m)=tmp + enddo + expfac=(exp( -xknsq(i)/twoetasq )/xknsq(i) ) + do j=1,ndlm + l=lofj(j) + m=mofj(j) + cylm=conjg(clm(j)*expphim(m)*plmk(j,i)) + fack(i,j)= + > expfac*jl(l+1,i)*(four*pi)**2/omegbra*facl(l)*cylm + enddo + enddo +c +c ------------------------------------------------------------------ +c start madmat calculation +c ------------------------------------------------------------------ +c loop over contributing atom positions based on basis in distant cell +c we are actually subtracting contributions from inside rcut which +c are put in by k-space sum. + do nsub2 =1,num_atoms + call zeroout(dqintloc,2*ndlm) + if(nsub2.eq.myatom)then + ibegin=2 + else + ibegin=1 + endif +c vector from contributing site to my site. + aijau(1) = atom_posi_x(myatom) - atom_posi_x(nsub2) + aijau(2) = atom_posi_y(myatom) - atom_posi_y(nsub2) + aijau(3) = atom_posi_z(myatom) - atom_posi_z(nsub2) +c ------------------------------------------------------------------ +c subrtact rsn from aij to recalculate rssq which is used in +c calculating the real-space integral +c ------------------------------------------------------------------ +c rdif is distance to center of gaussian to be removed + do icell = 1,lastrs +c vectors from mysite to contributing sites + rtmp1 = (rslat_x(icell) - aijau(1) ) + rtmp2 = (rslat_y(icell) - aijau(2) ) + rtmp3 = (rslat_z(icell) - aijau(3) ) + rssq(icell) = rtmp1*rtmp1 + rtmp2*rtmp2 + rtmp3*rtmp3 +c if rtmp is inside rcut we need to subtract the potential of a +c gaussian charge at that point. + if(rssq(icell).lt.rcut2)then + rdif=sqrt(rssq(icell)) +c phi is the angle to the center +C if(rtmp2.eq.zero.and.rtmp1.eq.zero)then +C phi=zero +C else +C phi=atan2(rtmp2,rtmp1) +C endif +c load exp(i*m*phi) for rotation matrix +C expphi=exp(sqrtm1*phi) + rk=sqrt(rtmp1*rtmp1+rtmp2*rtmp2) + if(rk.eq.zero) then + expphi=cone + else + expphi=dcmplx(rtmp1/rk,rtmp2/rk) + endif + tmp=cone + expphim(0)=cone + do m=1,lmax + tmp=tmp*expphi + expphim(m)=tmp + enddo +c find cos(theta) to center of gaussian + if(rdif.ne.zero) then + z=rtmp3/rdif + elseif(rtmp3.eq.zero) then + z=zero + else + stop'madewd_f' + endif +c find the integral of the potential times spherical harmonic +c over a sphere of radius rm around mysite from a gaussian located +c a distance rdif along the z-axiz. If rdif is large compared +c to 1/eta use interf. if rdif is small use interfsmr. only m=0 +c harmonics give non-zero values because of azmuthal symetry. +c dqintl contains these integrals indexed by l=0,lmax +C if(rdif*eta.gt.one)then + call interf(plm, + > twoetasq,rmau,lmax,ndlm,mofj,lofj,clm,xgs,wgs,ngauss_mad, + > rdif,dqintl) +C else +C call interfsmr(plm, +C > twoetasq,rmau,lmax,ndlm,mofj,lofj,clm, +C > xgs,wgs,ngauss_mad,ngaussr_mad,rdif,dqintl) +C endif +c get legendre polynomial for cos(theta) +c ---------------------------------------------------------- +! meis: changed to normalized associated Legendre functions + call plm_normalized(lmax,z,plm) +c ---------------------------------------------------------- +c rotate dqintl by theta,phi using trans; which is particularly +c simple because dqintl has only m=0 parts. trans is a spherical +c harmonic times sqrt(fpi/(2l+1)) + do j=1,ndlm + l=lofj(j) + m=mofj(j) + trans= + > clm(j)*plm(j)*expphim(m)*sqrt(four*pi/(2*l+1)) + trans=conjg(trans) + dqintloc(j)=dqintloc(j)+trans*dqintl(l) + enddo + endif + enddo +c*************************************************************** +c calculate the difference in the potential of a gaussian +c charge and a point charge at a distance squared of rssq +c the potential at only the myatom lattice point is +c calculated. this is the l=0 part of the potential at rm. +c the higher l's should be small and vanish as rcut tends to +c infinity. We are ignoring the higher l contributions. +c call pqintg(twoetasq,rssq,lastrs,dqint,ibegin) +c dqint is feed to madsum where the sum over distant atoms is made. +c ------------------------------------------------------------------ +c perform the reciprocal-space sum and real-space sum +c ---------------------------------------------------------------- +c madsum gives a matrix which generates the potential from charges outside +c the central unit cell plus the potential from gaussian charges of width +c determined by eta located in the central cell at basis positions of +c atoms in distant unit cells. +c ----------------------------------------------------------------- +c calculate real space sum (sum2) and recip. space +c sum (sum1). +c ----------------------------------------------------------------- +c note sum starts at 2 since kn=0.0 of 1/(rs-aij) is +c canceled by kn=0.0 of the 1/rs sum. +c ----------------------------------------------------------------- +c do k space sum + do j=1,ndlm + sum1(j)=czero + do i = 2,lastkn +c k dot r(mysite)-r(i2) + dot = + > knlat_x(i)*aijau(1)+knlat_y(i)*aijau(2)+knlat_z(i)*aijau(3) + expidot=exp( sqrtm1*dot ) + sum1(j) = sum1(j) + fack(i,j)*expidot + enddo + enddo + sum2=czero + do i=ibegin,lastrs + if(rssq(i).gt.rcut2)then + rdif=sqrt(rssq(i)) + sum2 = sum2 + > +erfc(rdif*eta)/rdif + endif + enddo + if(iprint.ge.1) then + write(6,'(''madewd_f::nsub2,sum2#'',i5,2d16.8)')nsub2,real(sum2) + endif +c sum1 is a potential expanded in spherical harmonics, the l=0 term +c must be multiplied by y0 inorder to yeild contribution to potential +c the sum2 term is approximated by its l=0 term only, it must be +c multiplied by 1/y0 to be consistent with the sum1 term. + sum2=sqrt(four*pi)*sum2 +c add the k space contribution stored in sum1. + do j=1,ndlm + madmat(j,nsub2) = sum1(j) + enddo +c add the real space sum from sites outside rcut +c recall that it is approximated by its l=0 part + madmat(1,nsub2)=madmat(1,nsub2)+sum2 +c add the constant which sets the constant in the potential +c and makes it stationary in eta. + term = four*pi/( omegbra*twoetasq ) + madmat(1,nsub2)=madmat(1,nsub2)-term*sqrt(four*pi) +c subtract contributions from gaussian charges at perfect crystal +c sites inside the celtral cell so that madmat willcorrespond to +c contributions from atoms outside the central unit cell. + do j=1,ndlm + madmat(j,nsub2)=madmat(j,nsub2)+dqintloc(j) + enddo + if(iprint.ge.1) then + write(6,'(''sum1,sum2,dqintloc='',6d16.8)') + > real(sum1(1)),real(sum2),real(dqintloc(1)) + write(6,'('' mad=='',5f12.4)')(madmat(j,nsub2),j=1,ndlm) + endif +c ---------------------------------------------------------------- + enddo ! end do loop over nsub2 +c ---------------------------------------------------------------- + if( istop .eq. sname ) then + call fstop(sname) + endif +c ---------------------------------------------------------------- + return + end diff --git a/src/Madelung/madsum.f b/src/Madelung/madsum.f new file mode 100755 index 000000000..e6f057a9a --- /dev/null +++ b/src/Madelung/madsum.f @@ -0,0 +1,86 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine madsum(lastkn,lastrs,ibegin,aij, + > rslatmd,knlat_x,knlat_y,knlat_z,knlatsq, + > eta,tau,madmat, + > pi4,iprint,istop) +c ================================================================ +c +c **************************************************************** +c performs ewald summation for Madelung constant. +c requires 'lastkn,lastrs,eta,knlat,aij' +c returns 'madelung sum': madmat +c **************************************************************** + implicit none +c + character istop*32 + character sname*32 + parameter (sname='madsum') +c + integer lastkn + integer lastrs + integer ibegin + integer iprint + integer i +c + real*8 knlat_x(lastkn) + real*8 knlat_y(lastkn) + real*8 knlat_z(lastkn) + real*8 knlatsq(lastkn) + real*8 rslatmd(lastrs) + real*8 aij(3) + real*8 eta + real*8 tau + real*8 madmat + real*8 pi4 + real*8 fac + real*8 zero + real*8 four + real*8 erfc + real*8 erf +c + parameter (zero=0.0d0) + parameter (four=4.0d0) +c +c ================================================================ +c 2 2 -> -> +c 4*pi 1 -eta *Kq /4 - i*Kq*aij +c term1 = ---- * sum ----- e +c tau q<>0 2 +c Kq +c +c note sum starts at 2 since kn=0.0 of 1/(rs-aij) is +c canceled by kn=0.0 of the 1/rs sum. +c ================================================================ + madmat = zero + fac=eta*eta/four + do i = 2,lastkn + madmat=madmat+exp(-fac*knlatsq(i))/knlatsq(i) + > *cos( knlat_x(i)*aij(1)+knlat_y(i)*aij(2) + > +knlat_z(i)*aij(3) ) +c if(i.le.5)write(6,'(''i,a,k,f,m'',i5,10f10.4)') +c > i,aij(1),aij(2),aij(3),knlat_x(i),knlat_y(i) +c > ,knlat_z(i),exp(-fac*knlatsq(i))/knlatsq(i)*pi4/tau +c > ,madmat*pi4/tau*6./3.5449077d0 + enddo + madmat = pi4/tau*madmat +c ================================================================ +c +c -> -> +c 1 - erf(|Rn + aij|/eta) +c term2 = sum ------------------------- +c n -> -> +c |Rn + aij| +c +c note for calculation of aij=0.0 term ibegin=2. +c ================================================================ + do i=ibegin,lastrs +c do i=ibegin,1 + erf=erfc(rslatmd(i)/eta)/rslatmd(i) + madmat = madmat + erf +c if(i.lt.20.and.iprint.ge.0)write(6,'('' i,erf'',i5,3f15.7)')i, +c >rslatmd(i),eta,erf + enddo +c + return + end diff --git a/src/Madelung/ord3v.f b/src/Madelung/ord3v.f new file mode 100755 index 000000000..5873a7309 --- /dev/null +++ b/src/Madelung/ord3v.f @@ -0,0 +1,66 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine ord3v(v3out_1,v3out_2,v3out_3,vsqout,nv3,v3in,vsqin, + > istop) +c ================================================================ +c + implicit none +c + character sname*32 + character istop*32 +c + integer nv3 + integer nv + integer nvm +c + real*8 v3out_1(nv3+1) + real*8 v3out_2(nv3+1) + real*8 v3out_3(nv3+1) + real*8 vsqout(nv3+1) + real*8 v3in(3) + real*8 vsqin +c + parameter (sname='ord3v') +c +c **************************************************************** +c inserts a vector in a list of vectors such that they are in +c order of increasing length...................................... +c **************************************************************** +c +c ================================================================ + do nv=1,nv3 + if(vsqout(nv).ge.vsqin) then + do nvm=nv3,nv,-1 + vsqout(nvm+1)=vsqout(nvm) + enddo + do nvm=nv3,nv,-1 + v3out_1(nvm+1) = v3out_1(nvm) + enddo + do nvm=nv3,nv,-1 + v3out_2(nvm+1) = v3out_2(nvm) + enddo + do nvm=nv3,nv,-1 + v3out_3(nvm+1) = v3out_3(nvm) + enddo + vsqout(nv)=vsqin + v3out_1(nv) = v3in(1) + v3out_2(nv) = v3in(2) + v3out_3(nv) = v3in(3) + nv3=nv3+1 + return + endif + enddo + vsqout(nv3+1)=vsqin + v3out_1(nv3+1) = v3in(1) + v3out_2(nv3+1) = v3in(2) + v3out_3(nv3+1) = v3in(3) + nv3=nv3+1 +c ================================================================ +c return condition................................................ + if(istop.eq.sname) then + call fstop(sname) + else + return + endif +c + end diff --git a/src/Madelung/pqintg_c.f b/src/Madelung/pqintg_c.f new file mode 100755 index 000000000..6a0c0862b --- /dev/null +++ b/src/Madelung/pqintg_c.f @@ -0,0 +1,66 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine pqintg(eta,rssq,lastrs,dqint,ibegin,iprslat_mad) +c ================================================================ +c +c **************************************************************** +c input: eta,rssq,lastrs,ibegin +c output: dqint +c **************************************************************** +c + implicit none +c + integer iprslat_mad + integer ibegin + integer lastrs + integer igns + integer i +c + real*8 dqint(iprslat_mad) + real*8 rssq(iprslat_mad) + real*8 eta + real*8 delta + real*8 xi + real*8 xisq + real*8 arg + real*8 sum + real*8 term + real*8 zero + real*8 half + real*8 three + real*8 factor + real*8 tol +c + parameter (zero=0.0d0) + parameter (factor=0.005d0) + parameter (half=0.5d0) + parameter (three=3.0d0) + parameter (tol=0.000000001d0) +c +c ================================================================ + do i = ibegin,lastrs +c delta = 5.e-3*eta + delta = factor*eta + xi = sqrt(eta)*half + xisq = xi*xi + arg = - rssq(i)*xisq + sum = exp(arg) +c + if( sum .ne. zero ) then + igns = -1 + 1 continue + xi = xi + delta + xisq = xi * xi + arg = - rssq(i)*xisq + igns = -igns + term = ( 3 + igns )*exp(arg) + sum = sum + term + if( term/sum .gt. tol ) go to 1 + dqint(i) = ( sum*delta )/three + else + dqint(i) = zero + endif + enddo +c + return + end diff --git a/src/Main/AlloyBankIO.cpp b/src/Main/AlloyBankIO.cpp new file mode 100644 index 000000000..c11e22a92 --- /dev/null +++ b/src/Main/AlloyBankIO.cpp @@ -0,0 +1,145 @@ +#include +#include +#include "Main/SystemParameters.hpp" +#include "Communication/LSMSCommunication.hpp" +#include "SingleSite/AtomData.hpp" +#include "SingleSite/readSingleAtomData.hpp" +#include "SingleSite/writeSingleAtomData.hpp" +#include "PotentialIO.hpp" +#include "HDF5io.hpp" +#include "Main/initializeAtom.hpp" + +int loadAlloyBank(LSMSCommunication &comm, LSMSSystemParameters &lsms, AlloyMixingDesc &alloyDesc, AlloyAtomBank &alloyBank) { + + // for Wang-Landau for metallic alloys + // written as a copy from 'loadPotentials' routine + + // resize alloy bank to match input in alloy descriptor + // allocate room for potential and energy levels + alloyBank.resize(alloyDesc.size()); + for(int i = 0; i < alloyBank.size(); i++) { + alloyBank[i].resize(alloyDesc[i].size()); + for(int j = 0; j < alloyBank[i].size(); j++) { + alloyBank[i][j].resizePotential(lsms.global.iprpts); + alloyBank[i][j].resizeCore(lsms.global.ipcore); + } + } + + if( lsms.alloy_in_type > 1 || lsms.alloy_in_type < -1 ) + return 1; // unknown potential type + + if( lsms.alloy_in_type == -1 ) + return initializeNewAlloyBank(comm,lsms,alloyDesc,alloyBank); + + int natoms = 0; + for(int i = 0; i < alloyDesc.size(); i++) + natoms += alloyDesc[i].size(); + + if( comm.rank == 0 ) { + + hid_t fid,fid_1; + int id,fname_l; + char fname[256]; + + if( lsms.alloy_in_type == 0 ) { // HDF5 + + fid=H5Fopen(lsms.alloy_file_in,H5F_ACC_RDONLY,H5P_DEFAULT); + if( fid < 0 ) { + printf("loadAlloyBank can't open HDF5 file '%s'\n",lsms.alloy_file_in); + exit(1); + } + + int i = -1; + read_scalar(fid,"LSMS",i); + printf("Reading LSMS HDF5 input file format %d\n",i); + if( i != 1 ) { + printf("Attempting to read alloy bank with potential file version %d\nThis version of LSMS reads version 1 only!\n",i); + exit(1); + } + + i = -1; + read_scalar(fid,"NAtoms",i); + printf("Reading data for %d atoms.\n",i); + if( i != natoms ) { + printf("Attempting to read alloy bank with potentials for %d atoms.\nPotential file contains %d atoms!\n",natoms,i); + exit(1); + } + } + + // loop over all alloy mixing classes + // loop over all components within a mixing class + for(int id = 0, i = 0; i < alloyDesc.size(); i++) + for(int j = 0; j < alloyDesc[i].size(); j++, id++) { + + printf("reading alloy bank potential (id=%d) for atom type %d.\n",id,i); + if( lsms.alloy_in_type == 0 ) // LSMS_1 style HDF5 + { + // Atoms in the LSMS_1 HDF5 file are numbered starting from 000001 + snprintf(fname, 250, "%06d", id+1); + printf("Reading data from group '%s'\n",fname); + fid_1 = H5Gopen2(fid, fname, H5P_DEFAULT); + if( fid_1 < 0 ) { + printf("Can't open group '%s'\n",fname); + exit(1); + } + + readSingleAtomData_hdf5(fid_1, alloyBank[i][j]); + H5Gclose(fid_1); + + } else if( lsms.alloy_in_type == 1 ) { // BIGCELL style Text + + snprintf(fname,250,"%s.%d",lsms.alloy_file_in,id); + fname_l=strlen(fname); + printf("BIGCELL format file '%s' for alloy bank\n",fname); + // fflush(stdout); + + readSingleAtomData_bigcell(fname, alloyBank[i][j]); + } + } + + // tune alloy potentials + for(int id = 0, i = 0; i < alloyBank.size(); i++) + for(int j = 0; j < alloyBank[i].size(); j++, id++) { + + AtomData &atom = alloyBank[i][j]; + atom.generateRadialMesh(); + atom.ztotss=(Real)alloyDesc[i][j].Z; + atom.zcorss=(Real)alloyDesc[i][j].Zc; + atom.zsemss=(Real)alloyDesc[i][j].Zs; + atom.zvalss=(Real)alloyDesc[i][j].Zv; + atom.lmax=alloyDesc[i][j].lmax; + atom.kkrsz=(atom.lmax+1)*(atom.lmax+1); + atom.alloy_class = i; + + // define potential past old grid as constant + for(int is=0; is < lsms.n_spin_pola; is++) { + + Real vc = atom.vr(atom.jmt-1,is)/atom.r_mesh[atom.jmt]; + for(int ir = atom.jmt; ir < lsms.global.iprpts; ir++) + atom.vr(ir,is) = 0; + } + } + } + + // distribute alloy potentials over all nodes + int dummy; + if( comm.rank == 0 ) { + + for(int node = 1; node < comm.size; node++) + for(int id = 0, i = 0; i < alloyBank.size(); i++) + for(int j = 0; j < alloyBank[i].size(); j++, id++) + communicateSingleAtomData(comm, 0, node, dummy, alloyBank[i][j], id); + } + else { + + for(int id = 0, i = 0; i < alloyBank.size(); i++) + for(int j = 0; j < alloyBank[i].size(); j++, id++) { + communicateSingleAtomData(comm, 0, comm.rank, dummy, alloyBank[i][j], id); + alloyBank[i][j].generateRadialMesh(); + } + } + + return 0; +} + + diff --git a/src/Main/EnergyContourIntegration.hpp b/src/Main/EnergyContourIntegration.hpp new file mode 100644 index 000000000..ac9e96c4b --- /dev/null +++ b/src/Main/EnergyContourIntegration.hpp @@ -0,0 +1,18 @@ +#ifndef LSMS_ENERGYCONTOURINTEGRATION_H +#define LSMS_ENERGYCONTOURINTEGRATION_H + +#include "Complex.hpp" +#include "SystemParameters.hpp" +#include "Communication/LSMSCommunication.hpp" + +// typedef enum {EnergyGridBox=1, EnergyGridGauss=2} EnergyGridType; + +void energyContourIntegration(LSMSCommunication &comm,LSMSSystemParameters &lsms, LocalTypeInfo &local); + +extern "C" +{ + void congauss_(double *ebot,double *etop,double *eibot,Complex *egrd,Complex *dele1,int *npts,int *nume, + double *pi,int * ipepts, int *iprint,char *istop, int istop_len); +} + +#endif diff --git a/src/Main/EvecGenerator.h b/src/Main/EvecGenerator.h new file mode 100644 index 000000000..b87357fe3 --- /dev/null +++ b/src/Main/EvecGenerator.h @@ -0,0 +1,224 @@ +// mode: -*- c++ -*- + +// Header for the evec generator class to be used in lsms.cc +// also example implementations: +// ConstantEvecGenerator +// RandomEvecGenerator + +#ifndef EVEC_GENERATOR_H +#define EVEC_GENERATOR_H + +#include +#include +#include "random_evec.h" + +typedef enum {SpinMove, OccupancyMove} MoveChoice_t; + +/* +YingWai's note (Dec 5, 13): +1. The split of the original generateEvec into "determineAcceptance, + updateHistogram and generateEvec" is only implemented in + WangLandau.h and WangLandau2d.h +2. generateEvec is renamed to updateHistogram in ExhautiveIsing.h. + Nothing has been changed there otherwise. + Main program (wl_lsms.cpp) was changed in a way where ExhaustiveIsing + was NOT considered. Use with caution! +*/ + +class EvecGenerator +{ + public: + + virtual double getDOSRatio(int instance, double energy) + { return 0.0; } + +// YingWai: do we really need the function overloading for determineAcceptance? (Dec 4, 13) + virtual bool determineAcceptance(int instance, double energy) + { return false; } + + virtual bool determineAcceptance(int instance, double energy, double magnetization) + { + return determineAcceptance(instance, energy); + } + + virtual bool updateHistogram(int instance, double *evecs, bool accepted) + { return false; } +/* + virtual bool updateHistogram(int instance, double *evecs, double energy, double magnetization, bool accepted) + { + return updateHistogram(instance, evecs, accepted); + } +*/ + virtual bool updateHistogram(int instance, double *evecs, double *potentialShifts, bool accepted) + { + return updateHistogram(instance, evecs, accepted); + } + + virtual bool updateHistogramFromRE(int instance, double *evecs, double energy, int check) + { return false; } + + virtual bool updateHistogramFromRE(int instance, double *evecs, double energy, double magnetization, int check) + { + return updateHistogramFromRE(instance, evecs, energy, check); + } + + virtual bool updateHistogramFromRE(int instance, double *evecs, double energy, double *potentialShifts, int check) + { + return updateHistogramFromRE(instance, evecs, energy, check); + } + + virtual bool updateHistogramFromRE(int instance, double *evecs, double energy, double magnetization, double *potentialShifts, int check) + { + return updateHistogramFromRE(instance, evecs, energy, check); + } +/* +// YingWai: keep these function overloadings for updateHistogram for the moment, +// but might want to get rid of them later when code is stable (Dec 4, 13) + + virtual bool updateHistogram(int instance, double *evecs, double energy) + { return false; } + + virtual bool updateHistogram(int instance, double *evecs, double energy, bool *accepted) + { + *accepted = true; + return updateHistogram(instance, evecs, energy); + } + + virtual bool updateHistogram(int instance, double *evecs, double energy, double magnetization, bool *accepted) + { + *accepted = true; + return updateHistogram(instance, evecs, energy); + } +*/ + + virtual void generatePotentialShift(int instance, double *potentialShifts, bool accepted) {}; + + virtual void generateEvec(int instance, double *evecs, bool accepted) {}; + + virtual void initializeEvecAndPotentialShift(int instance, double *evecs, double *potentialShifts) {}; + + virtual void initializeEvec(int instance, double *evecs) + { + //generateEvec(instance, evecs, 0.0); + bool accepted {false}; + generateEvec(instance, evecs, accepted); + } + + virtual void generateUnsampledEvec(int instance, double *evecs, double energy) + { + //generateEvec(instance, evecs, energy); + bool accepted {false}; + generateEvec(instance, evecs, accepted); + } + + virtual void startSampling(bool isspin = true, bool isocc = false) {;} + + virtual void writeState(const char *name) {;} + + void setVerbosity(int v) { verbosity = v; } + + int verbosity; + + // dummy functions to be used for occupancy variables + // these routines were added to the Evec class because they share Monte Carlo logic + virtual MoveChoice_t selectMoveType(bool isSpinSim, bool isOccSim) { return SpinMove; } + virtual void setAlloyClasses(const AlloyMixingDesc&, int* siteclass) {} + virtual void generateOccupancies(int instance, int *occ, bool acceptedOcc) {} + virtual void generateUnsampledOcc(int inst, int *occ) {} + virtual void initializeOccupancies(int inst, int *occ) {} + virtual void updateLog(int instance, double *evecs, int * occ, double energy, bool accepted, MoveChoice_t MoveChoice, + bool isspin, bool isocc) {} +}; + + +class ConstantEvecGenerator : public EvecGenerator +{ + public: + + ConstantEvecGenerator(size_t num_spins, double evec[3], int nw = 0) + { + printf("Constructor of ConstantEvecGenerator called.\n"); + n_spins = num_spins; + setEvec(evec); + n_walker = nw; + if (nw > 0) + { + walker_step.resize(nw); + for (int i=0; i walker_step; + +}; + + +class RandomEvecGenerator : public EvecGenerator +{ + public: + + RandomEvecGenerator(size_t num_spins) + { n_spins = num_spins; } + + void generateEvec(int inst, double *evecs, double energy) + { + for(size_t j=0; j<3*n_spins; j+=3) + random_evec(&evecs[j]); + //return false; + } + + void initializeEvec(int instance, double *evecs) + { generateEvec(instance, evecs, 0.0); } + + private: + size_t n_spins; + +}; + +#endif diff --git a/src/Main/ExhaustiveIsing.h b/src/Main/ExhaustiveIsing.h new file mode 100644 index 000000000..a32f45c04 --- /dev/null +++ b/src/Main/ExhaustiveIsing.h @@ -0,0 +1,384 @@ +/* +YingWai (Dec 5, 13): +1. The original generateEvec is split into "determineAcceptance, updateHistogram + and generateEvec" in EvecGenerator.h, but they are NOT implemented in here + (ExhaustiveIsing.h) +2. Here, generateEvec is renamed to updateHistogram, nothing has been changed + there otherwise. +3. Main program (wl_lsms.cpp) was rewritten in a way where ExhaustiveIsing + was NOT considered. Use with caution! +*/ + +// -*- mode: c++ -*- +#ifndef EXHAUSTIVEISING_H +#define EXHAUSTIVEISING_H + +#define ISING 1 + +#include +#include +#include +#include +#include +#include +// Try MJSON instead: +#include "../../mjson/json.h" +#include "EvecGenerator.h" + +class ExhaustiveIsing1dEvecGenerator : public EvecGenerator +{ + public: + ExhaustiveIsing1dEvecGenerator(int num_spins, int num_instances, double **ev_p, + const char *init_file_name = NULL, + const char *out_file_name = NULL); + bool updateHistogram(int instance, double *evecs, double energy); + bool updateHistogram(int instance, double *evecs) {std::cerr<<"Need energy for ExhaustiveIsing1dEvecGenerator\n"; exit(1);} + void initializeEvec(int instance, double *evecs); + void writeState(const char *name); + private: + int n_walkers; + int n_spins; + double ** evecs_pointer; + int n_initialized_from_file; + + std::string dos_out_name; + + int config_number; + + int stepsSinceLastHistogramUpdate; + int numberOfUpdatesSinceLastBoost; + int cycleCount; + int modificationFactorChanges; + + // Histogramm and dos: + double xMin, xMax, interval; + int nX; + double *dos; // std::vector dos; + int *histo; // std::vector histo; + int hMinimum; + unsigned long accept, reject; + double flatnessCriterion; + + double gamma, gammaFinal; + int flipPerUpdate, updateCycle; + + // instance specific: + std::vector ref0, ref1, position; + std::vector out; + std::vector lastChange; + std::vector oldSpin; // oldSpin[instance*3 + {x=0, y=1, z=2}] + + + void inline config_from_number(int n, double *ev) + { + int j=n; + for(int i=0; i>1; + } + } +}; + +ExhaustiveIsing1dEvecGenerator::ExhaustiveIsing1dEvecGenerator(int num_spins, int num_instances, double ** ev_p, + const char *init_file_name, const char *out_file_name) +{ + const double Huge = std::numeric_limits::max(); + n_spins=num_spins; + n_walkers = num_instances; + n_initialized_from_file = 0; + evecs_pointer = ev_p; + ref0.resize(n_walkers); for(int i=0; itype != JSON_OBJECT) + { + std::ostringstream message; + std::cerr << "In WL1dEvecGenerator(" << init_file_name << ") parsing failed (bad format)\n"; + exit(1); + } + + for(json_t *it = json_root->child; it != NULL; it=it->next) + { + std::string label = it->text; + if(label=="xMin") xMin=atof(it->child->text); + else if(label=="xMax") xMax=atof(it->child->text); + else if(label=="interval") interval=atof(it->child->text); + else if(label=="gamma") gamma=atof(it->child->text); + else if(label=="gammaFinal") gammaFinal=atof(it->child->text); + else if(label=="configurationNumber") config_number=atoi(it->child->text); + else if(label=="nX") + { + nX=atoi(it->child->text); + if(dos!=NULL) free(dos); + if(histo!=NULL) free(histo); + dos=(double *)calloc(nX,sizeof(double)); + histo=(int *)calloc(nX,sizeof(int)); + } + else if(label=="flipPerUpdate") flipPerUpdate=atoi(it->child->text); + else if(label=="updateCycle") updateCycle=atoi(it->child->text); + else if(label=="flatnessCriterion") flatnessCriterion=atof(it->child->text); +//*/ + else if(label=="dos") + { + json_t *a = it->child; + int j=0; + for(json_t *i=a->child; i!=NULL; i=i->next) + { + dos[j++]=atof(i->text); + } + if(j!=nX) {std::cout<<"ERROR #(dos) "<child; + int j=0; + for(json_t *i=a->child; i!=NULL; i=i->next) + { + histo[j++]=atoi(i->text); + } + if(j!=nX) {std::cout<<"ERROR #(histo) "<child; + n_initialized_from_file=0; + for(json_t *i=a->child; i!=NULL; i=i->next) + { + if(n_initialized_from_filechild; j!=NULL; j=j->next) + { + evecs_pointer[n_initialized_from_file][k++]=atof(j->text); + } + n_initialized_from_file++; + if(k!=3*n_spins) {std::cout<<"ERROR #(evecs) "<child; + int n_initialized=0; + for(json_t *i=a->child; i!=NULL; i=i->next) + { + if(n_initializedchild; j!=NULL; j=j->next) + { + oldSpin[n_initialized*3+k++]=atof(j->text); + } + n_initialized++; + if(k!=3) {std::cout<<"ERROR #(oldSpin) "<child; + int j=0; + int n_initialized=0; + for(json_t *i=a->child; i!=NULL; i=i->next) + { + if(n_initializedtext); + n_initialized++; + } + } + else if(label=="ref") + { + json_t *a = it->child; + int j=0; + int n_initialized=0; + for(json_t *i=a->child; i!=NULL; i=i->next) + { + if(n_initializedtext); + i=i->next; + ref1[j++]=atof(i->text); + n_initialized++; + } + } + } + else if(label=="stepsSinceLastHistogramUpdate") stepsSinceLastHistogramUpdate=atoi(it->child->text); + else if(label=="numberOfUpdatesSinceLastBoost") numberOfUpdatesSinceLastBoost=atoi(it->child->text); + else if(label=="modificationFactorChanges") modificationFactorChanges=atoi(it->child->text); + else std::cout<<"WARNING: unknown label: "<0) + { + interval=(xMax-xMin)/double(nX); + } else { + nX=-1; xMin=-std::numeric_limits::max(); xMax=1.0; + } + + json_free_value(&json_root); + } + + if(out_file_name!=NULL && out_file_name[0]!=0) dos_out_name=out_file_name; + std::cout<<"Wang-Landau output will be written to: "< xMax) + if(grid < 0) + { + if(dos==NULL) + { + // first energy + nX=1; + // lets put the energy in the middle of the interval + xMin = energy - 0.5*interval; + xMax = xMin + interval; + dos = (double *)calloc(1,sizeof(double)); + histo = (int *)calloc(1,sizeof(int)); + grid=0; + } else { + // we need -grid more entries below xMin + double *p1 = (double *)calloc(nX-grid,sizeof(double)); + int *p2 = (int *)calloc(nX-grid,sizeof(int)); + for(int i=0; i nX -1) { + // we need grid - nX + 1 entries above xMax + int n = grid - nX + 1; + double *p1 = (double *)calloc(nX+n,sizeof(double)); + int *p2 = (int *)calloc(nX+n,sizeof(int)); + for(int i=0; i nX -1) + { + std::cerr<< "ATTENTION: The code should never reach this point, where grid is out of bounds.\n"; + exit(1); + out[instance]=true; + } else { + out[instance]=false; + ref1[instance] = dos[grid]; + } + + std::cout<<"Exhaustive Ising 1d EvecGenerator step " + <= updateCycle) + { + cycleCount=0; + writeState("WL1d.state"); + } + + if(gamma= 1< +#include +#include +#include + +template +class Graph1d +{ +protected: + KeyType delta, minX, maxX; + Int N; + std::vector y; +public: + Graph1d() : delta(0.1), N(0), y(0), minX(std::numeric_limits::max()) {;} + Graph1d(KeyType _delta) : delta(_delta), N(0), y(0), minX(std::numeric_limits::max()) {;} + void setRangeAndClear(KeyType min, KeyType max, Int _Nval) { + N=_Nval; + y.resize(N); + minX=min; maxX=max; // minY=maxY=ValueType(0); + delta=(maxX-minX)/KeyType(N); + } + void setRange(KeyType min, KeyType max) { + minX=min; maxX=max; // minY=maxY=ValueType(0); + delta=(maxX-minX)/KeyType(N); + } + void setDeltaAndClear(KeyType _delta) { + N=0; delta=_delta; + } + // This idx function calculates the index using minX as the reference, + // it could give an index which is out of range + // (used in WL-LSMS where the energy window grows with the discovery of a new energy) + inline Int idx(KeyType x) { + return ( (N==0) ? -1 : Int(N*(x-minX)/(maxX-minX)) ); + } + // This idx_withinRange function calculates an index only if the input (x) is within range [minX, maxX], + // otherwise it gives -1. + // (used in REWL where the energy window does not grow) + inline Int idx_withinRange(KeyType x) { + if ( (N==0) || (x < minX) || (x >= maxX) ) + return -1; + else + return ( N * Int((x-minX) / (maxX-minX)) ) ; + } + + inline KeyType keyFromIdx(Int i) { return minX+(KeyType(i)+KeyType(0.5))*delta;} + inline ValueType &operator[](Int i) { +// if(i<0 || i>=N) +// {std::cerr<<"Graph1d index out of range:"<=0; j--) + { + y[j-i]=y[j]; + y[j]=ValueType(0); + } + N=N-i; minX+=KeyType(i)*delta; + i=0; + } + else if(i>=N) + { + Int n=i-N+1; + y.resize(i+1,ValueType(0)); + N=i+1; maxX+=KeyType(n)*delta; + } + } + } + inline ValueType &operator()(KeyType x) { + if(N==0 || x maxX) extendTo(x); + return y[idx(x)];} + inline KeyType getDelta() {return delta;} + inline KeyType getMinX() {return minX;} + inline KeyType getMaxX() {return maxX;} + inline Int getN() {return N;} + inline ValueType getMinY() { ValueType h=std::numeric_limits::max(); + for(Int i=0; i &mask) { ValueType h=std::numeric_limits::max(); + for(Int i=0; i::min(); + for(Int i=0; ih) h=y[i]; return h;} + inline ValueType getMaxYMasked(std::vector &mask) { ValueType h=std::numeric_limits::min(); + for(Int i=0; ih) h=y[i]; return h;} + inline void getMinMaxY(ValueType &hMin, ValueType &hMax) { + hMin=std::numeric_limits::max(); + hMax=std::numeric_limits::min(); + for(Int i=0; ihMax) hMax=y[i]; + } } + inline void getMinMaxYMasked(ValueType &hMin, ValueType &hMax, std::vector &mask) { + hMin=std::numeric_limits::max(); + hMax=std::numeric_limits::min(); + for(Int i=0; ihMax) hMax=y[i]; + } + } } + inline ValueType getMeanY() { + ValueType h=ValueType(0); + for(Int i=0; i &mask) { + ValueType h=ValueType(0); + Int count=0; + for(Int i=0; i::max(); + for(Int i=idx(b); i<=idx(t); i++) if(y[i]::min(); + for(Int i=idx(b); i<=idx(t); i++) if(y[i]>h) h=y[i]; return h;} + inline void getMinMaxYInInterval(KeyType b, KeyType t, ValueType &hMin, ValueType &hMax) { + hMin=std::numeric_limits::max(); + hMax=std::numeric_limits::min(); + for(Int i=idx(b); i<=idx(t); i++) + { + if(y[i]hMax) hMax=y[i]; + } } + inline ValueType getMeanYInInterval(KeyType b, KeyType t) { + ValueType h=ValueType(0); + for(Int i=idx(b); i<=idx(t); i++) h+=y[i]; return h/ValueType(idx(t)-idx(b)+1);} + void scale(ValueType s) {for(Int i=0; i +inline bool syncronizeGraphs(Graph1d &a, Graph1d &b) +{ + if(a.getDelta()!=b.getDelta()) return false; // we cant sync if the intervals are different + if(a.getMinX()b.getMaxX()) b.extendTo(a.getMaxX()); else a.extendTo(b.getMaxX()); + if(a.getN()!=b.getN()) return false; // should not happen! + return true; +} + +template +class Kernel1d: public Graph1d +{ +private: + KeyType width; + Int center; +public: + Kernel1d() {;} + Kernel1d(KeyType _delta, KeyType _width) : Graph1d(_delta) { + width=_width; + this->extendTo(KeyType(0)); + this->extendTo(width); this->extendTo(-width); center=this->idx(KeyType(0));} + void setWidthAndClear(KeyType _delta, KeyType _width) { + this->setDeltaAndClear(_delta); + width=_width; + this->extendTo(KeyType(0)); + this->extendTo(width); this->extendTo(-width); center=this->idx(KeyType(0));} + KeyType getWidth() {return width;} + Int getCenter() {return center;} +}; + +typedef enum {None, Epanechnikov, Quartic, TriWight, Triangle, Uniform, Gaussian, Cosine} KernelType; + +template +inline ValueType epanechnikov(KeyType x) +{ + ValueType h=ValueType(1)-ValueType(x*x); + return h<0 ? ValueType(0) : ValueType(0.75)*h; +} + +template +inline ValueType quartic(KeyType x) +{ + ValueType h=ValueType(1)-ValueType(x*x); + return ValueType(0.9375)*h*h; // 0.9375 = 15/16 +} + +template +inline ValueType triwight(KeyType x) +{ + ValueType h=ValueType(1)-ValueType(x*x); + return ValueType(1.09375)*h*h*h; // 1.09375 = 35/32 +} + +template +inline ValueType triangle(KeyType x) +{ + return ValueType(1)-std::abs(ValueType(x)); +} + +template +inline ValueType uniform(KeyType x) +{ + return std::abs(x)<1 ? ValueType(0.5) : ValueType(0); +} + +template +inline ValueType gaussian(KeyType x) +{ + return ValueType(std::sqrt(1.0/(2.0*M_PI)))*std::exp(ValueType(-0.5*x*x)); +} + +template +inline ValueType cosine(KeyType x) +{ + return ValueType(0.25*M_PI)*std::cos(ValueType(0.5*M_PI*x)); +} + +template +void initEpanechnikov(Kernel1d &k) +{ + KeyType l=KeyType(1)/KeyType(k.getWidth()); + for(Int i=0; i(l*k.keyFromIdx(i)); +} + +template +void initQuartic(Kernel1d &k) +{ + KeyType l=KeyType(1)/KeyType(k.getWidth()); + for(Int i=0; i(l*k.keyFromIdx(i)); +} + +template +void initTriWight(Kernel1d &k) +{ + KeyType l=KeyType(1)/KeyType(k.getWidth()); + for(Int i=0; i(l*k.keyFromIdx(i)); +} + +template +void initTriangle(Kernel1d &k) +{ + KeyType l=KeyType(1)/KeyType(k.getWidth()); + for(Int i=0; i(l*k.keyFromIdx(i)); +} + +template +void initUniform(Kernel1d &k) +{ + KeyType l=KeyType(1)/KeyType(k.getWidth()); + for(Int i=0; i(l*k.keyFromIdx(i)); +} + +template +void initGaussian(Kernel1d &k) +{ + KeyType l=KeyType(1)/KeyType(k.getWidth()); + for(Int i=0; i(l*k.keyFromIdx(i)); +} + +template +void initCosine(Kernel1d &k) +{ + KeyType l=KeyType(1)/KeyType(k.getWidth()); + for(Int i=0; i(l*k.keyFromIdx(i)); +} + +template +void initNone(Kernel1d &k) +{ + k.setWidthAndClear(k.getDelta(),0.0); + k[0]=1.0; +// std::cout<<"Initialized 'None' kernel:\n N="< +inline void addKernel(Graph1d &g, Kernel1d &k, KeyType x) +{ + //g.extendTo(x-k.getWidth()); g.extendTo(x+k.getWidth()); + Int i0 = g.idx(x-k.getWidth()); + for(Int i=0; i, ... , , M](x) + +#ifndef WL_GRAPH1DMOMENTS_H +#define WL_GRAPH1DMOMENTS_H + +#include "Graph1d.hpp" + +#include +#include +#include +#include + +template +class Graph1dMoments : public Graph1d +{ +protected: + int k; + std::vector M; + std::vector > m; +public: + Graph1dMoments() : k(0) {;} + Graph1dMoments(KeyType _delta) : Graph1d(_delta), k(0) {;} + + bool test(void) + { + // check sizes + bool notOK=false; + size_t sN,sy,sM,sm; + sN=Graph1d::N; + sy=Graph1d::y.size(); + if(k!=m.size()) {printf("!!!!!!! Graph1dMoments::m size differs from k m:%d k:%d\n",m.size(),k); notOK=true;} + sM=sm=sN; + if(k>0) + { + sM=M.size(); + sm=m[0].size(); + for(int i=1;i::setRangeAndClear(min,max,_Nval); + if(k>0) + { + M.resize(_Nval); + for(int i=0; i::N); + for(int i=0; i::N); + } + int getNumberOfMoments() {return k;} + inline void addMomentsAtIdx(Int i, ValueType v) + { + if(k>0) + { + ValueType vv=v; + M[i]++; + for(int ii=0; ii=m[ii].size()) {printf("!!!! too large index in m[%d]:%d i:%d\n",ii,m[ii].size(),i); exit(1);} + m[ii][i]+=(vv-m[ii][i])/((double)M[i]); + vv*=v; + } + } + } + inline ValueType getMomentAtIdx(Int i, int _k) + { + return m[_k][i]; + } + inline Int getNumberOfSamplesAtIdx(Int i) + { + return M[i]; + } + inline void setMomentAtIdx(Int i, int _k, ValueType v) + { + // if(_k>=k) {printf("!!!!!! too large moment index!! _k:%d k:%d\n",_k,k); exit(1);} + m[_k][i]=v; + } + inline void setNumberOfSamplesAtIdx(Int i, Int _M) + { + M[i]=_M; + } + + inline void extendTo(KeyType x) { + Int i; + if(Graph1d::N<1) + { + Graph1d::N=1; + Graph1d::minX=x-0.5*Graph1d::delta; + Graph1d::maxX=Graph1d::minX+Graph1d::delta; + Graph1d::y.resize(Graph1d::N); + if(k>0) + { + M.resize(Graph1d::N); + for(int i=0; i::N); + } + } else + { + i=this->idx(x); + if(i<0) + { + Graph1d::y.resize(Graph1d::N-i); + if(k>0) + { + M.resize(Graph1d::N-i); + for(int ii=0; ii::N-i); + } + for(Int j=Graph1d::N-1; j>=0; j--) + { + Graph1d::y[j-i]=Graph1d::y[j]; + Graph1d::y[j]=ValueType(0); + if(k>0) + { + M[j-i]=M[j]; + M[j]=0; + for(int ii=0; ii::N=Graph1d::N-i; Graph1d::minX+=KeyType(i)*Graph1d::delta; + i=0; + } else if(i>=Graph1d::N) + { + Int n=i-Graph1d::N+1; + Graph1d::y.resize(i+1,ValueType(0)); + if(k>0) + { + M.resize(i+1,0); + for(int ii=0; ii::N=i+1; + Graph1d::maxX+=KeyType(n)*Graph1d::delta; + } + } } + + + inline ValueType &operator()(KeyType x) { + if(Graph1d::N==0 || x::minX || x> Graph1d::maxX) extendTo(x); + return Graph1d::y[Graph1d::idx(x)];} +}; + +template +inline bool syncronizeGraphs(Graph1dMoments &a, Graph1dMoments &b) +{ + if(a.getDelta()!=b.getDelta()) return false; // we cant sync if the intervals are different + if(a.getMinX()b.getMaxX()) b.extendTo(a.getMaxX()); else a.extendTo(b.getMaxX()); + if(a.getN()!=b.getN()) return false; // should not happen! + return true; +} + +template +inline void addKernel(Graph1dMoments &g, Kernel1d &k, KeyType x) +{ + //g.extendTo(x-k.getWidth()); g.extendTo(x+k.getWidth()); + Int i0 = g.idx(x-k.getWidth()); + for(Int i=0; i, ... , , M](x) + +#ifndef WL_GRAPH1DMOMENTS_H +#define WL_GRAPH1DMOMENTS_H + +#include "Graph1d.hpp" + +#include +#include +#include +#include + +template +class Graph1dMoments : public Graph1d +{ +protected: + int k; + std::vector M; + std::vector > m; +public: + Graph1dMoments() : k(0) {;} + Graph1dMoments(KeyType _delta) : Graph1d(_delta), k(0) {;} + + bool test(void) + { + // check sizes + bool notOK=false; + size_t sN,sy,sM,sm; + sN=Graph1d::N; + sy=Graph1d::y.size(); + if(k!=m.size()) {printf("!!!!!!! Graph1dMoments::m size differs from k m:%d k:%d\n",m.size(),k); notOK=true;} + sM=sm=sN; + if(k>0) + { + sM=M.size(); + sm=m[0].size(); + for(int i=1;i::setRangeAndClear(min,max,_N); + if(k>0) + { + M.resize(_N); + for(int i=0; i::N); + for(int i=0; i::N); + } + int getNumberOfMoments() {return k;} + inline void addMomentsAtIdx(Int i, ValueType v) + { + if(k>0) + { + ValueType vv=v; + M[i]++; + for(int ii=0; ii=m[ii].size()) {printf("!!!! too large index in m[%d]:%d i:%d\n",ii,m[ii].size(),i); exit(1);} + m[ii][i]+=(vv-m[ii][i])/((double)M[i]); + vv*=v; + } + } + } + inline ValueType getMomentAtIdx(Int i, int _k) + { + return m[_k][i]; + } + inline Int getNumberOfSamplesAtIdx(Int i) + { + return M[i]; + } + inline void setMomentAtIdx(Int i, int _k, ValueType v) + { + // if(_k>=k) {printf("!!!!!! too large moment index!! _k:%d k:%d\n",_k,k); exit(1);} + m[_k][i]=v; + } + inline void setNumberOfSamplesAtIdx(Int i, Int _M) + { + M[i]=_M; + } + + inline void extendTo(KeyType x) { + Int i; + if(Graph1d::N<1) + { + Graph1d::N=1; + Graph1d::minX=x-0.5*Graph1d::delta; + Graph1d::maxX=Graph1d::minX+Graph1d::delta; + Graph1d::y.resize(Graph1d::N); + if(k>0) + { + M.resize(Graph1d::N); + for(int i=0; i::N); + } + } else + { + i=this->idx(x); + if(i<0) + { + Graph1d::y.resize(Graph1d::N-i); + if(k>0) + { + M.resize(Graph1d::N-i); + for(int ii=0; ii::N-i); + } + for(Int j=Graph1d::N-1; j>=0; j--) + { + Graph1d::y[j-i]=Graph1d::y[j]; + Graph1d::y[j]=ValueType(0); + if(k>0) + { + M[j-i]=M[j]; + M[j]=0; + for(int ii=0; ii::N=Graph1d::N-i; Graph1d::minX+=KeyType(i)*Graph1d::delta; + i=0; + } else if(i>=Graph1d::N) + { + Int n=i-Graph1d::N+1; + Graph1d::y.resize(i+1,ValueType(0)); + if(k>0) + { + M.resize(i+1,0); + for(int ii=0; ii::N=i+1; + Graph1d::maxX+=KeyType(n)*Graph1d::delta; + } + } } + + + inline ValueType &operator()(KeyType x) { + if(Graph1d::N==0 || x::minX || x> Graph1d::maxX) extendTo(x); + return Graph1d::y[Graph1d::idx(x)];} +}; + +template +inline bool syncronizeGraphs(Graph1dMoments &a, Graph1dMoments &b) +{ + if(a.getDelta()!=b.getDelta()) return false; // we cant sync if the intervals are different + if(a.getMinX()b.getMaxX()) b.extendTo(a.getMaxX()); else a.extendTo(b.getMaxX()); + if(a.getN()!=b.getN()) return false; // should not happen! + return true; +} + +template +inline void addKernel(Graph1dMoments &g, Kernel1d &k, KeyType x) +{ + //g.extendTo(x-k.getWidth()); g.extendTo(x+k.getWidth()); + Int i0 = g.idx(x-k.getWidth()); + for(Int i=0; i +#include +#include +#include + +template +class Graph1d +{ +protected: + KeyType delta, minX, maxX; + Int N; + std::vector y; +public: + Graph1d() : delta(0.1), N(0), y(0), minX(std::numeric_limits::max()) {;} + Graph1d(KeyType _delta) : delta(_delta), N(0), y(0), minX(std::numeric_limits::max()) {;} + void setRangeAndClear(KeyType min, KeyType max, Int _N) { + N=_N; + y.resize(N); + minX=min; maxX=max; // minY=maxY=ValueType(0); + delta=(maxX-minX)/KeyType(N); + } + void setRange(KeyType min, KeyType max) { + minX=min; maxX=max; // minY=maxY=ValueType(0); + delta=(maxX-minX)/KeyType(N); + } + void setDeltaAndClear(KeyType _delta) { + N=0; delta=_delta; + } + // inline Int idx(KeyType x) {return (x=N) +// {std::cerr<<"Graph1d index out of range:"<=0; j--) + { + y[j-i]=y[j]; + y[j]=ValueType(0); + } + N=N-i; minX+=KeyType(i)*delta; + i=0; + } + else if(i>=N) + { + Int n=i-N+1; + y.resize(i+1,ValueType(0)); + N=i+1; maxX+=KeyType(n)*delta; + } + } + } + inline ValueType &operator()(KeyType x) { + if(N==0 || x maxX) extendTo(x); + return y[idx(x)];} + inline KeyType getDelta() {return delta;} + inline KeyType getMinX() {return minX;} + inline KeyType getMaxX() {return maxX;} + inline Int getN() {return N;} + inline ValueType getMinY() { ValueType h=std::numeric_limits::max(); + for(Int i=0; i::min(); + for(Int i=0; ih) h=y[i]; return h;} + inline void getMinMaxY(ValueType &hMin, ValueType &hMax) { + hMin=std::numeric_limits::max(); + hMax=std::numeric_limits::min(); + for(Int i=0; ihMax) hMax=y[i]; + } } + inline ValueType getMeanY() { + ValueType h=ValueType(0); + for(Int i=0; i::max(); + for(Int i=idx(b); i<=idx(t); i++) if(y[i]::min(); + for(Int i=idx(b); i<=idx(t); i++) if(y[i]>h) h=y[i]; return h;} + inline void getMinMaxYInInterval(KeyType b, KeyType t, ValueType &hMin, ValueType &hMax) { + hMin=std::numeric_limits::max(); + hMax=std::numeric_limits::min(); + for(Int i=idx(b); i<=idx(t); i++) + { + if(y[i]hMax) hMax=y[i]; + } } + inline ValueType getMeanYInInterval(KeyType b, KeyType t) { + ValueType h=ValueType(0); + for(Int i=idx(b); i<=idx(t); i++) h+=y[i]; return h/ValueType(idx(t)-idx(b)+1);} + void scale(ValueType s) {for(Int i=0; i +inline bool syncronizeGraphs(Graph1d &a, Graph1d &b) +{ + if(a.getDelta()!=b.getDelta()) return false; // we cant sync if the intervals are different + if(a.getMinX()b.getMaxX()) b.extendTo(a.getMaxX()); else a.extendTo(b.getMaxX()); + if(a.getN()!=b.getN()) return false; // should not happen! + return true; +} + +template +class Kernel1d: public Graph1d +{ +private: + KeyType width; + Int center; +public: + Kernel1d() {;} + Kernel1d(KeyType _delta, KeyType _width) : Graph1d(_delta) { + width=_width; + this->extendTo(KeyType(0)); + this->extendTo(width); this->extendTo(-width); center=this->idx(KeyType(0));} + void setWidthAndClear(KeyType _delta, KeyType _width) { + this->setDeltaAndClear(_delta); + width=_width; + this->extendTo(KeyType(0)); + this->extendTo(width); this->extendTo(-width); center=this->idx(KeyType(0));} + KeyType getWidth() {return width;} + Int getCenter() {return center;} +}; + +typedef enum {None, Epanechnikov, Quartic, TriWight, Triangle, Uniform, Gaussian, Cosine} KernelType; + +template +inline ValueType epanechnikov(KeyType x) +{ + ValueType h=ValueType(1)-ValueType(x*x); + return h<0 ? ValueType(0) : ValueType(0.75)*h; +} + +template +inline ValueType quartic(KeyType x) +{ + ValueType h=ValueType(1)-ValueType(x*x); + return ValueType(0.9375)*h*h; // 0.9375 = 15/16 +} + +template +inline ValueType triwight(KeyType x) +{ + ValueType h=ValueType(1)-ValueType(x*x); + return ValueType(1.09375)*h*h*h; // 1.09375 = 35/32 +} + +template +inline ValueType triangle(KeyType x) +{ + return ValueType(1)-std::abs(ValueType(x)); +} + +template +inline ValueType uniform(KeyType x) +{ + return std::abs(x)<1 ? ValueType(0.5) : ValueType(0); +} + +template +inline ValueType gaussian(KeyType x) +{ + return ValueType(std::sqrt(1.0/(2.0*M_PI)))*std::exp(ValueType(-0.5*x*x)); +} + +template +inline ValueType cosine(KeyType x) +{ + return ValueType(0.25*M_PI)*std::cos(ValueType(0.5*M_PI*x)); +} + +template +void initEpanechnikov(Kernel1d &k) +{ + KeyType l=KeyType(1)/KeyType(k.getWidth()); + for(Int i=0; i(l*k.keyFromIdx(i)); +} + +template +void initQuartic(Kernel1d &k) +{ + KeyType l=KeyType(1)/KeyType(k.getWidth()); + for(Int i=0; i(l*k.keyFromIdx(i)); +} + +template +void initTriWight(Kernel1d &k) +{ + KeyType l=KeyType(1)/KeyType(k.getWidth()); + for(Int i=0; i(l*k.keyFromIdx(i)); +} + +template +void initTriangle(Kernel1d &k) +{ + KeyType l=KeyType(1)/KeyType(k.getWidth()); + for(Int i=0; i(l*k.keyFromIdx(i)); +} + +template +void initUniform(Kernel1d &k) +{ + KeyType l=KeyType(1)/KeyType(k.getWidth()); + for(Int i=0; i(l*k.keyFromIdx(i)); +} + +template +void initGaussian(Kernel1d &k) +{ + KeyType l=KeyType(1)/KeyType(k.getWidth()); + for(Int i=0; i(l*k.keyFromIdx(i)); +} + +template +void initCosine(Kernel1d &k) +{ + KeyType l=KeyType(1)/KeyType(k.getWidth()); + for(Int i=0; i(l*k.keyFromIdx(i)); +} + +template +void initNone(Kernel1d &k) +{ + k.setWidthAndClear(k.getDelta(),0.0); + k[0]=1.0; +// std::cout<<"Initialized 'None' kernel:\n N="< +inline void addKernel(Graph1d &g, Kernel1d &k, KeyType x) +{ + //g.extendTo(x-k.getWidth()); g.extendTo(x+k.getWidth()); + Int i0 = g.idx(x-k.getWidth()); + for(Int i=0; i +#include +#include +#include + + +template +class Graph2d +{ +private: + KeyType deltaX, minX, maxX, deltaY; + Int Nx; + std::vector< std::vector* > val; + std::vector minY, maxY; + std::vector Ny; +public: + Graph2d() : deltaX(0.1), deltaY(0.1), Nx(0) {;} + Graph2d(KeyType _deltaX, KeyType _deltaY) : deltaX(_deltaX), deltaY(_deltaY), Nx(0) {;} + ~Graph2d() {freeVal(); } + void freeVal() {for(Int i=0; i(_Nyval); + minY[ix]= _minY; + maxY[ix]= _minY + deltaY*KeyType(_Nyval); + } + inline Int idxX(KeyType x) + { + return (x &operator[](Int ix) { +// if(i<0 || i>=N) +// {std::cerr<<"Graph2d index out of range:"<=0; j--) + { + val[j-ix]=val[j]; val[j]=NULL; + Ny[j-ix]=Ny[j]; Ny[j]=0; + minY[j-ix]=minY[j]; maxY[j-ix]=maxY[j]; + } + Nx=Nx-ix; minX+=KeyType(ix)*deltaX; + ix=0; + } else if(ix>=Nx) + { + Int n=ix-Nx+1; + val.resize(ix+1,NULL); + Ny.resize(ix+1,0); + minY.resize(ix+1); maxY.resize(ix+1); + Nx=ix+1; maxX+=KeyType(n)*deltaX; + } + } + return ix; + } + + inline void extendToY(Int ix, KeyType y) { + Int iy; + + if(Ny[ix]<1) + { + Ny[ix]=1; + KeyType h = std::floor(y/deltaY+0.5); + minY[ix]=(h-0.5)*deltaY; + maxY[ix]=minY[ix]+deltaY; + if(val[ix]==NULL) val[ix]=new std::vector(Ny[ix]); + else val[ix]->resize(Ny[ix]); + iy=0; + } else + { + iy=idxY(ix,y); + if(iy<0) + { + val[ix]->resize(Ny[ix]-iy); + for(Int j=Ny[ix]-1; j>=0; j--) + { (*val[ix])[j-iy]=(*val[ix])[j]; (*val[ix])[j]=ValueType(0); } + Ny[ix]=Ny[ix]-iy; minY[ix]+=KeyType(iy)*deltaY; + iy=0; + } else if(iy>=Ny[ix]) + { + Int n=iy-Ny[ix]+1; + val[ix]->resize(iy+1,ValueType(0)); + Ny[ix]=iy+1; maxY[ix]+=KeyType(n)*deltaY; + } + } + } + + inline void extendTo(KeyType x, KeyType y) { + Int ix=extendToX(x); + extendToY(ix, y); + } + + inline ValueType &operator()(KeyType x , KeyType y) { + Int ix = idxX(x); + return (*val[ix])[idxY(ix,y)];} + inline KeyType getDeltaX() {return deltaX;} + inline KeyType getDeltaY() {return deltaY;} + inline KeyType getMinX() {return minX;} + inline KeyType getMinY(Int ix) {return minY[ix];} + inline KeyType getMaxX() {return maxX;} + inline KeyType getMaxY(Int ix) {return maxY[ix];} + inline Int getNx() {return Nx;} + inline Int getNy(Int ix) {return Ny[ix];} + inline ValueType getMinVal() { ValueType h=std::numeric_limits::max(); + for(Int ix=0; ix::min(); + for(Int ix=0; ixh) h=(*val[ix])[iy]; return h;} + inline ValueType getMinValWithBorders(KeyType xBorder, KeyType yBorder) + { + Int xStart=idxX(minX+xBorder); + Int xEnd=idxX(maxX-xBorder); + ValueType h=std::numeric_limits::max(); + for(Int ix=xStart; ix::max(); + for(Int ix=xStart; ixh) h=(*val[ix])[iy]; + } + return h; + } + void scale(ValueType s) + { + for(Int ix=0; ix +inline bool syncronizeGraphs(Graph2d &a, Graph2d &b) +{ + if(a.getDelta()!=b.getDelta()) return false; // we cant sync if the intervals are different + if(a.getMinX()b.getMaxX()) b.extendTo(a.getMaxX()); else a.extendTo(b.getMaxX()); + if(a.getN()!=b.getN()) return false; // should not happen! + return true; +} + +template +class Kernel2d: public Graph2d +{ +private: + KeyType widthX, widthY; + Int centerX, centerY; +public: + Kernel2d() {;} + Kernel2d(KeyType _deltaX, KeyType _deltaY, KeyType _widthX, KeyType _widthY) + : Graph2d(_deltaX, _deltaY), widthX(_widthX), widthY(_widthY) { + this->extendTo(KeyType(0), KeyType(0)); + /* + this->extendTo(widthX,widthY); this->extendTo(widthX,-widthY); + this->extendTo(-widthX, widthY); this->extendTo(-widthX,-widthY); + */ + this->extendToX(widthX); this->extendToX(-widthX); + for(Int ix=0; ixgetNx(); ix++) + { + this->extendToY(ix,widthY); this->extendToY(ix,-widthY); + } + centerX=this->idxX(KeyType(0)); centerY=this->idxY(centerX,KeyType(0)); + } + void setWidthAndClear(KeyType _deltaX, KeyType _deltaY, KeyType _widthX, KeyType _widthY) { + this->setDeltaAndClear(_deltaX, _deltaY); + widthX=_widthX; widthY=_widthY; + this->extendTo(KeyType(0), KeyType(0)); + /* + this->extendTo(widthX,widthY); this->extendTo(widthX,-widthY); + this->extendTo(-widthX, widthY); this->extendTo(-widthX,-widthY); + */ + this->extendToX(widthX); this->extendToX(-widthX); + for(Int ix=0; ixgetNx(); ix++) + { + this->extendToY(ix,widthY); this->extendToY(ix,-widthY); + } + centerX=-this->idxX(KeyType(0)); centerY=-this->idxY(centerX,KeyType(0)); } + KeyType getWidthX() {return widthX;} + KeyType getWidthY() {return widthY;} + Int getCenterX() {return centerX;} + Int getCenterY() {return centerY;} +}; + +// these are also defined in Graph1d +#if !defined(WL_GRAPH1D_H) && !defined(WL_GRAPH1DMOMENTS_H) +typedef enum {Epanechnikov, Quartic, TriWight, Triangle, Uniform, Gaussian, Cosine} KernelType; + +template +inline ValueType epanechnikov(KeyType x) +{ + ValueType h=ValueType(1)-ValueType(x*x); + return h<0 ? ValueType(0) : ValueType(0.75)*h; +} + +template +inline ValueType quartic(KeyType x) +{ + ValueType h=ValueType(1)-ValueType(x*x); + return ValueType(0.9375)*h*h; // 0.9375 = 15/16 +} + +template +inline ValueType triwight(KeyType x) +{ + ValueType h=ValueType(1)-ValueType(x*x); + return ValueType(1.09375)*h*h*h; // 1.09375 = 35/32 +} + +template +inline ValueType triangle(KeyType x) +{ + return ValueType(1)-std::abs(ValueType(x)); +} + +template +inline ValueType uniform(KeyType x) +{ + return std::abs(x)<1 ? ValueType(0.5) : ValueType(0); +} + +template +inline ValueType gaussian(KeyType x) +{ + return ValueType(std::sqrt(1.0/(2.0*M_PI)))*std::exp(ValueType(-0.5*x*x)); +} + +template +inline ValueType cosine(KeyType x) +{ + return ValueType(0.25*M_PI)*std::cos(ValueType(0.5*M_PI*x)); +} + +void getKernelName(KernelType t, std::string &n) +{ + switch(t) + { + case Epanechnikov: n="Epanechnikov"; break; + case Quartic: n="Quartic"; break; + case TriWight: n="TriWight"; break; + case Triangle: n="Triangle"; break; + case Uniform: n="Uniform"; break; + case Gaussian: n="Gaussian"; break; + case Cosine: n="Cosine"; break; + default: std::cerr<<"Unknown kernel type in Graph2d!\n"; exit(1); + } +} + +KernelType getKernelType(std::string &n) +{ + if(n=="Epanechnikov") return Epanechnikov; + else if(n=="Quartic") return Quartic; + else if(n=="TriWight") return TriWight; + else if(n=="Triangle") return Triangle; + else if(n=="Uniform") return Uniform; + else if(n=="Gaussian") return Gaussian; + else if(n=="Cosine") return Cosine; + return Epanechnikov; +} + +#endif + +template +void initKernelFromFunction(Kernel2d &k, ValueType (*f)(KeyType)) +{ + KeyType lX=KeyType(1)/KeyType(k.getWidthX()); + KeyType lY=KeyType(1)/KeyType(k.getWidthY()); + for(Int ix=0; ix +inline void addKernel(Graph2d &g, Kernel2d &k, KeyType x, KeyType y) +{ + g.extendToX(x-k.getWidthX()); g.extendToX(x+k.getWidthX()); + Int ix0 = g.idxX(x-k.getWidthX()); + for(Int ix=0; ix +int read_scalar(hid_t loc_id, const char *name, T &value) +{ + hid_t space_id,dset_id; + int hdferr,num_read; + + // printf("Attempting to read scalar '%s'\n",name); + + num_read=-1; + dset_id=H5Dopen2(loc_id,name,H5P_DEFAULT); + + hdferr= H5Dread(dset_id,TypeTraits::hdf5Type(),H5S_ALL,H5S_ALL,H5P_DEFAULT,&value); + if(hdferr<0) return hdferr; + + num_read=1; + + H5Dclose(dset_id); + + return num_read; +} + + +//------------------------------------------------------------------ +template +int read_vector(hid_t loc_id,const char *name,T *value,int len,hid_t dti) +{ + hid_t space_id,dset_id,dti_file; + int hdferr,ndims; + hsize_t dims[2], maxdims[2]; + + // printf("Attempting to read vector '%s'\n",name); + + dset_id= H5Dopen2(loc_id,name,H5P_DEFAULT); + + space_id= H5Dget_space(dset_id); + ndims= H5Sget_simple_extent_ndims(space_id); + if(ndims!=1) return -1; + H5Sget_simple_extent_dims(space_id,dims,maxdims); + + if(dims[0]>len) return -1; + + hdferr= H5Dread(dset_id,dti,H5S_ALL,H5S_ALL,H5P_DEFAULT,value); + if(hdferr<0) return -1; + + H5Sclose(space_id); + H5Dclose(dset_id); + + return dims[0]; +} + +template +int read_vector(hid_t loc_id,const char *name,T *value,int len) +{ + hid_t space_id,dset_id,dti_file; + int hdferr,ndims; + hsize_t dims[2], maxdims[2]; + + printf("Attempting to read vector '%s'\n",name); + + dset_id= H5Dopen2(loc_id,name,H5P_DEFAULT); + + space_id= H5Dget_space(dset_id); + ndims= H5Sget_simple_extent_ndims(space_id); + if(ndims!=1) return -1; + H5Sget_simple_extent_dims(space_id,dims,maxdims); + + if(dims[0]>len) return -1; + + hdferr= H5Dread(dset_id,TypeTraits::hdf5Type(),H5S_ALL,H5S_ALL,H5P_DEFAULT,value); + if(hdferr<0) return -1; + + H5Sclose(space_id); + H5Dclose(dset_id); + + return dims[0]; +} + +template +int write_scalar(hid_t loc_id, const char *name, T value) +{ + hid_t space_id, dset_id; + hsize_t dims[]={1}; + + // printf("Attempting to write scalar '%s'\n",name); + + space_id = H5Screate(H5S_SCALAR); + dset_id = H5Dcreate2(loc_id, name, TypeTraits::hdf5Type(), space_id, + H5P_DEFAULT,H5P_DEFAULT,H5P_DEFAULT); + + H5Dwrite(dset_id, TypeTraits::hdf5Type(),H5S_ALL, H5S_ALL, H5P_DEFAULT, &value); + + H5Dclose(dset_id); + H5Sclose(space_id); + return 1; +} + +template +int write_vector(hid_t loc_id, const char *name, T *value, int len) +{ + hid_t space_id, dset_id; + hsize_t dims[2]; + + dims[0]=len; + space_id = H5Screate_simple(1, dims, NULL); + dset_id = H5Dcreate2(loc_id, name, TypeTraits::hdf5Type(), space_id, + H5P_DEFAULT,H5P_DEFAULT,H5P_DEFAULT); + H5Dwrite(dset_id,TypeTraits::hdf5Type(),H5S_ALL, H5S_ALL, H5P_DEFAULT, value); + H5Dclose(dset_id); + H5Sclose(space_id); + + return len; +} + +#endif diff --git a/src/Main/Makefile b/src/Main/Makefile new file mode 100644 index 000000000..988acf926 --- /dev/null +++ b/src/Main/Makefile @@ -0,0 +1,46 @@ +all: lsms wl-lsms rewl-lsms + +ifdef USE_GPTL + gptl_def=-DUSE_GPTL +else + gptl_def= +endif + +LSMS_OBJ = SystemParameters.o read_input.o PotentialIO.o buildLIZandCommLists.o \ + energyContourIntegration.o solveSingleScatterers.o \ + calculateDensities.o calculateChemPot.o checkConsistency.o \ + lsmsClass.o calculateEvec.o initializeAtom.o mixing.o \ + ReplicaExchangeWL.o AlloyBankIO.o rotateToGlobal.o + +clean: + rm -f *.o *.a lsms $(TOP_DIR)/bin/lsms \ + lsms_inter $(TOP_DIR)/bin/lsms_inter \ + wl-lsms $(TOP_DIR)/bin/wl-lsms \ + rewl-lsms $(TOP_DIR)/bin/rewl-lsms\ + zblock_lu_driver + +zblock_lu_driver: zblock_lu_cuda_driver.cpp libLSMS.a + $(CXX) -fopenmp -UBUILDKKRMATRIX_GPU $(INC_PATH) -DNO_HDF5 -o zblock_lu_driver zblock_lu_cuda_driver.cpp libLSMS.a $(LIB_DIR) -L../Accelerator -lAccelerator $(ADD_LIBS) + +lsms: lsms.cpp libLSMS.a + $(CXX) $(INC_PATH) $(gptl_def) -o lsms lsms.cpp libLSMS.a $(LIBS) $(ADD_LIBS) + cp lsms $(TOP_DIR)/bin + +lsms_inter: lsms_inter.cpp + $(CXX) $(INC_PATH) -o lsms_inter lsms_inter.cpp $(LIBS) + cp lsms_inter $(TOP_DIR)/bin + +wl-lsms: wl_lsms.cpp libLSMS.a + $(CXX) $(INC_PATH) -o wl-lsms wl_lsms.cpp libLSMS.a $(LIBS) $(ADD_LIBS) + cp wl-lsms $(TOP_DIR)/bin + +rewl-lsms: rewl_lsms.cpp libLSMS.a + $(CXX) $(INC_PATH) -o rewl-lsms rewl_lsms.cpp libLSMS.a $(LIBS) $(ADD_LIBS) + cp rewl-lsms $(TOP_DIR)/bin + +%.o : %.cpp + $(CXX) $(INC_PATH) -c -o $@ $< + +libLSMS.a: $(LSMS_OBJ) + $(AR) -r libLSMS.a $(LSMS_OBJ) + diff --git a/src/Main/PotentialIO.cpp b/src/Main/PotentialIO.cpp new file mode 100644 index 000000000..b8a5b18a3 --- /dev/null +++ b/src/Main/PotentialIO.cpp @@ -0,0 +1,267 @@ +#include +#include +#include "Main/SystemParameters.hpp" +#include "Communication/LSMSCommunication.hpp" +#include "SingleSite/AtomData.hpp" +#include "SingleSite/readSingleAtomData.hpp" +#include "SingleSite/writeSingleAtomData.hpp" +#include "PotentialIO.hpp" +#include "HDF5io.hpp" +#include "Main/initializeAtom.hpp" + +int loadPotentials(LSMSCommunication &comm,LSMSSystemParameters &lsms, CrystalParameters &crystal, LocalTypeInfo &local) +{ + AtomData pot_data; + if(lsms.pot_in_type>1 || lsms.pot_in_type<-1) return 1; // unknown potential type + + if(lsms.pot_in_type==-1) initializeNewPotentials(comm,lsms,crystal,local); // start without potential files +// if(lsms.pot_in_type==1) // we can't resize the data structures inside the fortran read routine + { + pot_data.resizePotential(lsms.global.iprpts); + pot_data.resizeCore(lsms.global.ipcore); + } + + if(comm.rank==0) + { + hid_t fid,fid_1; + int id,fname_l; + char fname[256]; + + if(lsms.pot_in_type==0) // HDF5 + { + fid=H5Fopen(lsms.potential_file_in,H5F_ACC_RDONLY,H5P_DEFAULT); + if(fid<0) + { + printf("loadPotentials can't open HDF5 file '%s'\n",lsms.potential_file_in); + exit(1); + } + int i=-1; + read_scalar(fid,"LSMS",i); + printf("Reading LSMS HDF5 input file format %d\n",i); + if(i!=1) + { + printf("Attempting to read potential file version %d\nThis version of LSMS reads version 1 only!\n",i); + exit(1); + } + i=-1; + read_scalar(fid,"NAtoms",i); + printf("Reading data for %d atoms.\n",i); + if(i!=crystal.num_types) + { + printf("Attempting to read potentials for %d atoms.\nPotential file contains %d atoms!\n",crystal.num_types,i); + exit(1); + } + } + +// loop over all atom types: + for(int i=0; i1) return 1; // unknown potential type + +// update the Fermi energies + for(int i=0; i(fid,"LSMS",1); + write_scalar(fid,"NAtoms",crystal.num_types); + + } + +// loop over all atom types: + for(int i=0; i +#include +#include +#include "Communication/REWLCommunication.hpp" +#include "ReplicaExchangeWL.hpp" + +// Constructor +REWL::REWL(MPI_Comm comm, int numberOfWindows, int numberOfWalkersPerWindow, unsigned rngSeed) +{ + + REWLcomm.initializeCommunication(comm); + numWalkers = REWLcomm.size; + numWindows = numberOfWindows; + numWalkersPerWindow = numberOfWalkersPerWindow; + + myID = REWLcomm.rank; + myWindow = int( floor(double(myID) / double(numWalkersPerWindow)) ); + + //printf("YingWai's check: Inside REWL constructor. world_rank = %5d, myWindow = %5d, myID = %5d\n", global_rank, myWindow, myID); + + partnerID = -1; + partnerWindow = -1; + + swapDirection = 0; + upExchanges = 0; + downExchanges = 0; + + // Initialize random number generator + rng.seed(rngSeed); + +} + + +// Destructor +REWL::~REWL() +{ + +} + +//Member functions + +void REWL::assignSwapPartner() +{ + + partnerID = -1; + partnerWindow = -1; + + // Find the partner's window + switch (swapDirection) { + case 0 : // 0-1 & 2-3 & .... & [numprocs-1]-nobody + { + if ((myWindow % 2 == 0) && (myWindow < (numWindows - 1))) { + partnerWindow = myWindow + 1; + upExchanges++; + } + else if (myWindow % 2 != 0) { + partnerWindow = myWindow - 1; + downExchanges++; + } + swapDirection = 1; + //printf("YingWai's check: Walker. %5d, partner is %5d, swapDirection is %5d\n", myWindow, partnerWindow, swapDirection); + break; + } + case 1 : // 0-nobody & 1-2 & 3-4 & .... + { + if ((myWindow % 2 == 0) && (myWindow != 0)) { + partnerWindow = myWindow - 1; + downExchanges++; + } + else if ((myWindow % 2 != 0) && (myWindow < (numWindows - 1))) { + partnerWindow = myWindow + 1; + upExchanges++; + } + swapDirection = 0; + //printf("YingWai's check: Walker. %5d, partner is %5d, swapDirection is %5d\n", myWindow, partnerWindow, swapDirection); + } + } + + // Find the partner's ID + if (numWalkersPerWindow == 1) { + partnerID = partnerWindow; + } + else { + // to be implemented... + } + +} + + +void REWL::swapEnergy(double &energyForSwap) +{ + + if (partnerID != -1) // Swap energy with partner + REWLcomm.swapScalar(energyForSwap, partnerID); + +} + + +bool REWL::determineAcceptance(double myDOSRatio) +{ + + double partnerDOSRatio {0.0}; + int change {0}; + + if (myWindow % 2 == 1) { // Receiver and calculator + REWLcomm.recvScalar(partnerDOSRatio, partnerID); + + double acceptProb = myDOSRatio * partnerDOSRatio; + + double rand = rnd(rng); + if (rand < acceptProb) change = 1; + + REWLcomm.sendScalar(change, partnerID); + } + else { // Sender and non-calculator + REWLcomm.sendScalar(myDOSRatio, partnerID); + REWLcomm.recvScalar(change, partnerID); + } + + if (change) return true; + else return false; + +} + + +void REWL::swapConfig(double evecsForSwap[], int numElements) +{ + if (partnerID != -1) + REWLcomm.swapVector(evecsForSwap, numElements, partnerID); + +} + + +void REWL::swapPotentialShifts(double potentialShiftsForSwap[], int numElements) +{ + if (partnerID != -1) + REWLcomm.swapVector(potentialShiftsForSwap, numElements, partnerID); + +} diff --git a/src/Main/ReplicaExchangeWL.hpp b/src/Main/ReplicaExchangeWL.hpp new file mode 100644 index 000000000..53c679653 --- /dev/null +++ b/src/Main/ReplicaExchangeWL.hpp @@ -0,0 +1,48 @@ +#ifndef REPLICA_EXCHANGE_WL_H +#define REPLICA_EXCHANGE_WL_H + +#include +#include +#include "Communication/REWLCommunication.hpp" + +class REWL { + +public: + + REWL(MPI_Comm comm, int numberOfWindows, int numberOfWalkersPerWindow, unsigned rngSeed); + ~REWL(); + + void assignSwapPartner(); + + void swapEnergy(double &energyForSwap); + + bool determineAcceptance(double myDOSRatio); + + void swapConfig(double evecsForSwap[], int numElements); + + void swapPotentialShifts(double potentialShiftForSwap[], int numElements); + +private: + + // Random number generator + std::mt19937 rng; + std::uniform_real_distribution rnd; // rnd11(-1.0,1.0),rnd0pi(0.0,2.0*M_PI); + + REWLCommunication REWLcomm; + int numWalkers; + int numWindows; + int numWalkersPerWindow; + + int myID; + int myWindow; + int partnerID; + int partnerWindow; + + int swapDirection; + + int upExchanges; + int downExchanges; +}; + + +#endif diff --git a/src/Main/SystemParameters.cpp b/src/Main/SystemParameters.cpp new file mode 100644 index 000000000..2be2237f2 --- /dev/null +++ b/src/Main/SystemParameters.cpp @@ -0,0 +1,111 @@ +#include +#include +#include "SystemParameters.hpp" +#include "Potential/getXCName.hpp" + +const char *potentialTypeName[]= +{ + "HDF5 (LSMS_1 format)", + "Text (BIGCELL format)" +}; + +void printLSMSGlobals(FILE *f,LSMSSystemParameters &lsms) +{ + fprintf(f,"LSMS Globals:\n"); + fprintf(f," iprpts=%d\n",lsms.global.iprpts); + fprintf(f," ipcore=%d\n",lsms.global.ipcore); + fprintf(f," iprint=%d\n",lsms.global.iprint); + fprintf(f," print_node=%d\n",lsms.global.print_node); + fprintf(f," default_iprint=%d\n",lsms.global.default_iprint); + fprintf(f," istop=%32s\n",lsms.global.istop); + if(lsms.zblockLUSize>0) fprintf(f," zblockLUSize=%d\n",lsms.zblockLUSize); +} + +void printLSMSSystemParameters(FILE *f,LSMSSystemParameters &lsms) +{ + fprintf(f,"Title : '%s'\n",lsms.title); + fprintf(f,"Id : '%s'\n",lsms.systemid); + fprintf(f,"No. Atoms: %d\n",lsms.num_atoms); + fprintf(f,"Mtasa : %d\n",lsms.mtasa); + if(lsms.pot_in_type>=0) + fprintf(f,"Pot. In : %s [%s]\n",lsms.potential_file_in,potentialTypeName[lsms.pot_in_type]); + else + fprintf(f,"Pot. In : generated.\n"); + if(lsms.pot_out_type>=0) + fprintf(f,"Pot. Out : %s [%s]\n",lsms.potential_file_out,potentialTypeName[lsms.pot_out_type]); + else + fprintf(f,"Pot. Out : not written.\n"); + fprintf(f,"spin_cant: %d\n",lsms.n_spin_cant); + fprintf(f,"Relativity: "); + switch(lsms.relativity) + { + case none: fprintf(f,"non relativistic\n"); break; + case scalar: fprintf(f,"scalar relativistic\n"); break; + case full: fprintf(f,"fully relativistic\n"); break; + default: fprintf(f,"!!!!UNKNOWN!!!!\n"); + } + fprintf(f,"xcFunctional:"); for(int i=0; i +#include + +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" + +#include "SingleSite/AtomData.hpp" + +#include "Misc/Indices.hpp" + + +const int numFunctionalIndices=3; +#include "Potential/libxcInterface.hpp" + +class LSMSGlobals { +public: + void setIstop(const char *c){strncpy(istop,c,32); for(int i=strlen(c); i<32; i++) istop[i]=' ';} + bool checkIstop(const char *c){return (strncmp(istop,c,32)==0);} + int iprpts,ipcore; + int iprint; + int print_node,default_iprint; + char istop[32]; + +// for GPU only + int GPUThreads; +}; + +class EnergyContourParameters { +public: + int grid, npts; + Real ebot,etop,eitop,eibot; +// Grouping of energies for single site solver + int maxGroupSize; + int groupSize() {int nume=npts; if(grid==0) nume=1; else if(grid==2) nume++; return std::min(nume,maxGroupSize);} +}; + +enum Relativity : int {none=0, scalar=1, full=2}; + +class LSMSSystemParameters { +public: + char systemid[80]; + char title[80]; + char potential_file_in[128]; + char potential_file_out[128]; + int pot_in_type,pot_out_type; + char alloy_file_in[128]; + char alloy_file_out[128]; + int alloy_in_type,alloy_out_type; + char evecInfoFile[128]; + int mixing; // combines LSMS_1's mix_quant & mix_algor : -1 don't mix. mix_quant=mixing%4; mix_algor=mixing>>2; + // mix_quant 0: charge, 1: potential + // mix_algor 0: simple (linear) mixing; 1: broyden + // charge, simple: 0; broyden: 4 + // potential, simple: 1; boyden: 5 + Real alphaDV; // mixing parameter for density or potential + Real rmsTolerance; // rms Convergence criterion + int num_atoms; + int nspin; + Relativity relativity; + int nrelc,nrelv; + int n_spin_cant; + int n_spin_pola; + int nscf; + int writeSteps; + int mtasa; + int xcFunctional[numFunctionalIndices]; // specifies the energy functional to use in the calculations + // the first entry specifies the set of DFTs to use and the following numbers specify + // the actual functional: + // densityFunctional[0]=0: build in functionals + // densityFunctional[1]= + // 1: von barth-hedin, j. phys. c5,1629(1972) + // 2: vosko--wilk-nusair, from g.s. painter, phys. rev. b24 4264(1981) + // densityFunctional[0]=1: functionals from libxc + //char *xcName; + LibxcInterface libxcFunctional; + int vSpinShiftFlag; // if !=0 : shift the spin up and down potentials according to atom.vSpinShift + // this is used in WL-LSMS with moment magnitude fluctuations + //double vSpinShift_min; // vSpinShift_min, vSpinShift_max define the range for atom.vSpinShift + //double vSpinShift_max; + int fixRMT; // n_fix_mt from LSMS_1: + // 0 -> set rmt to calculated inscribed sphere in atomic volume + // 1 -> set it to rmt read in from potential file + Real clight; + int maxlmax; + LSMSGlobals global; + AngularMomentumIndices angularMomentumIndices; + EnergyContourParameters energyContour; + +// no. of Gaussian points for volume integration + int ngaussr,ngaussq; +// prefered block size for zblock_lu: 0 use the default + int zblockLUSize; + +// Properties of the whole system: + Real chempot; // Chemical potential + Real zvaltss; // Total valence charge + Real volumeTotal; // Total cell volume + Real volumeNorm; // Volume renormalization factor + Real volumeInterstitial; // Total interstitial volume + Real u0; // Contribution of the Muffin-tin zero potential to the Coulomb energy + Real totalEnergy; // Total energy + //Real pressure; // Pressure + +}; + +extern const char *potentialTypeName[]; + +class AtomType { +public: + AtomType() : pot_in_idx(-1), store_id(-1) {} + char name[4]; + int lmax,Z,Zc,Zs,Zv; + int first_instance, number_of_instances; + Real rsteps[4]; + Real rLIZ, rad; + int node,local_id; + int store_id; // position in tmatStore + int pot_in_idx; + Real conc; + int alloy_class; +}; + +class CrystalParameters { +public: + int maxlmax; + CrystalParameters() : bravais(3,3) {} + void resize(size_t n) {type.resize(n); position.resize(3,n); evecs.resize(3,n);} + void resizeTypes(size_t n) {types.resize(n);} + Matrix bravais; + Real omega; // bravais lattice volume + int num_atoms,num_types; + Matrix position,evecs; + std::vector type; + std::vector types; +}; + +class LocalTypeInfo { +public: + //LocalTypeInfo() : num_local(0), atom(0) {} + //~LocalTypeInfo() { //if(num_local) delete[] atom;} + // void setNumLocal(int n) {num_local=n; atom = new AtomData[n]; global_id.resize(n);} + void setNumLocal(int n) + { + num_local=n; atom.resize(n); global_id.resize(n); n_per_type.resize(n); + for(int i=0; iv) v=atom[i].nrmat; return v;} + int num_local; + std::vector global_id; + std::vector atom; + std::vector n_per_type; + + int lDimTmatStore,blkSizeTmatStore; + Matrix tmatStore; + std::vector tmatStoreGlobalIdx; + + Real qrms[2]; + Real vrms[2]; +}; + +// for Wang-Landau for metallic alloys +typedef std::vector< std::vector > AlloyMixingDesc; +typedef std::vector< std::vector > AlloyAtomBank; +// first index is alloy class (i.e. atomic types that can mix) +// second index is atomic component within a class + + +void printLSMSGlobals(FILE *f,LSMSSystemParameters &lsms); +void printLSMSSystemParameters(FILE *f,LSMSSystemParameters &lsms); +void printCrystalParameters(FILE *f, CrystalParameters &crystal); +void printAlloyParameters(FILE *f, AlloyMixingDesc &alloyDesc); +void printLocalTypeInfo(FILE *f, LocalTypeInfo &local); +void printLIZInfo(FILE * f, AtomData &atom); + +#endif diff --git a/src/Main/WangLandau.h b/src/Main/WangLandau.h new file mode 100644 index 000000000..fa5971585 --- /dev/null +++ b/src/Main/WangLandau.h @@ -0,0 +1,1603 @@ +// -*- mode: c++ -*- +#ifndef LSMS_WANG_LANDAU_H +#define LSMS_WANG_LANDAU_H + +#include +#include +#include +#include +#include +#include +#include +// we use BOOST for the random number generator +// #include +#include +#include "../../mjson/json.h" +#include "EvecGenerator.h" +#include "Graph1dMoments.hpp" +#include "../Potential/PotentialShifter.hpp" + +void inline performGlobalUpdate(Graph1dMoments &g, double kappa, double lambda, double omega) +{ + for(int i=0; iomega) g[i]+=kappa*std::exp(-lambda/(g[i]-omega)); +} + +class StatesWriter +{ +public: + StatesWriter(const char *filename=NULL) + { + if(filename==NULL) writeFlag=false; + else {writeFlag=true; of.open(filename); + of.setf(std::ios::scientific,std::ios::floatfield); + of.precision(17);} + } + ~StatesWriter() {if(writeFlag) of.close();} + void writeHeader(double lnF, int numWalk, int numSpin, double **spins, + bool isSpinSim = true, bool isOccSim = false, int **occup = NULL) + { + + if( !writeFlag ) return; + + if( isSpinSim ) { + of << lnF << " " << numWalk << " " << numSpin << std::endl; + for(int i = 0; i < numWalk; i++) { + of << i; + for(int j = 0; j < 3*numSpin; j++) + of << " " << spins[i][j]; + of << std::endl; + } + } + + if( isOccSim ) return; + } + void writeChange(int iWalk, int numRet, int ispin, double *ev, double E) + { + if(writeFlag) + of<"< +// template +class WL1dEvecGenerator : public EvecGenerator +{ + public: + WL1dEvecGenerator(int num_spins, int num_instances, double ** ev_p, + PotentialShifter &potentialShifter, + const char *init_file_name=NULL, const char *out_file_name=NULL, + const char *states_filename=NULL, int ** occ_p = NULL); + + bool determineAcceptance(int instance, double energy); + bool determineAcceptance(int instance, double energy, double magnetization); + + bool updateHistogram(int instance, double *evecs, bool accepted); +/* + bool updateHistogram(int instance, double *evecs, double energy, bool *accepted); + bool updateHistogram(int instance, double *evecs, double energy, double magnetization, bool *accepted); + bool updateHistogram(int instance, double *evecs, double energy) {bool h; return updateHistogram(instance, evecs, energy, &h);} + bool updateHistogram(int instance, double *evecs) {std::cerr<<"Need energy for WL1dEvecGenerator\n"; exit(1);} +*/ + + void generateEvec(int instance, double *evecs, bool accepted); + //void generateEvec(int instance, double *evecs, double energy); + void generatePotentialShift(int instance, double *potentialShifts, bool accepted); + + void initializeEvecAndPotentialShift(int inst, double *evecs, double *potentialShifts); + void initializeEvec(int instance, double *evecs); + + void generateUnsampledEvec(int instance, double *evecs, double energy) + { + initializeEvec(instance, evecs); + //return false; + } + + void startSampling(bool isSpinSim = true, bool isOccSim = false) + { sw.writeHeader(gamma, n_walkers, n_spins, evecs_pointer, isSpinSim, isOccSim, occupancy_ptr); } + + void writeState(const char *name); + void writeDos(const char *name); + + // Wang-Landau for occupancy variables + MoveChoice_t selectMoveType(bool isSpinSim, bool isOccSim); + void setAlloyClasses(const AlloyMixingDesc&, int* siteclass); + void generateOccupancies(int instance, int *occ, bool acceptedOcc); + void generateUnsampledOcc(int inst, int *occ); + void initializeOccupancies(int inst, int *occ); + void updateLog(int instance, double *evecs, int * occ, double energy, bool accepted, MoveChoice_t MoveChoice, + bool isspin, bool isocc); + + private: + int n_walkers; + int n_spins; + double ** evecs_pointer; + int n_initialized_from_file; + int n_initialized_from_file_occ; + + std::string dos_out_name; + + int stepsSinceLastHistogramUpdate; + int numberOfUpdatesSinceLastBoost; + int cycleCount; + int modificationFactorChanges; + + // Random number generator and distribution: + RNG rng; + // boost::uniform_real rnd; //, rnd11(-1.0,1.0),rnd0pi(0.0,2.0*M_PI); + std::uniform_real_distribution rnd; //, rnd11(-1.0,1.0),rnd0pi(0.0,2.0*M_PI); + std::uniform_real_distribution rnd01; //(0.0,1.0); + + /* + // Histogramm and dos: + double xMin, xMax, interval; + int nX; + double *dos; // std::vector dos; + int *histo; // std::vector histo; + int hMinimum; + */ + + double hMinimum; + Graph1dMoments dos, histo; + Kernel1d dosKernel, histoKernel, nullKernel; + KernelType kernelType; + + std::vector visited; + bool maskedHistogram; + + unsigned long accept, reject, acceptSinceLastChange; + double flatnessCriterion; + + double gamma, gammaFinal; + int flipPerUpdate, updateCycle; + + bool fixEnergyWindow; + + // instance specific: + std::vector ref0, ref1; + std::vector position, magnetizationAtPosition; + std::vector out; + std::vector lastChange; + std::vector lastChangePotentialShift; + std::vector lastAccepted; + std::vector lastAcceptedPotentialShiftIndex; + std::vector lastAcceptedEnergy; + std::vector lastAcceptedEvec; + std::vector oldSpin; // oldSpin[instance*3 + {x=0, y=1, z=2}] + std::vector oldPotentialShift; + std::vector lastAcceptedPotentialShift; + + std::vector numRetentions; + + // changes to accomodate alloying (i.e. variable site occupancies) + std::vector< std::pair > lastSwapOcc; + std::vector< std::pair > lastAcceptedSwap; + std::vector< std::pair > lastAcceptedOcc; + AlloyMixingDesc alloyDesc; + std::vector siteAlloyClass; + std::vector numSites_per_AlloyClass; + int ** occupancy_ptr; + + char *statesFile; + StatesWriter sw; + + int changeMode; + bool histogramUpdateMode; + int updatesPerBin; + + struct {double kappa, lambda, omega; int frequency, changes;} globalUpdate; + +#ifdef ISING + void inline random_evec_1(double ev[3]) + { + ev[0]=ev[1]=0.0; + ev[2]=1.0; + if(rng()%2 == 0) ev[2]=-ev[2]; + } +#else + void inline random_evec_1(double ev[3]) + { + double x,y,z; + do { + x = rnd(rng); + y = rnd(rng); + } while(x*x+y*y>1); + z = rnd(rng); + double r = sqrt((1-z*z)/(x*x+y*y)); + x *= r; + y *= r; + if (rng() % 2 == 0) x = -x; + if (rng() % 2 == 0) y = -y; + if (rng() % 2 == 0) z = -z; + r=1.0/sqrt(x*x+y*y+z*z); + ev[0]=x*r; ev[1]=y*r; ev[2]=z*r; + } +#endif + +#ifdef ISING + void inline random_evec(double ev[3]) + { + ev[2]=-ev[2]; + } +#else + void inline random_evec(double ev[3]) + { + double x, y, z; + do { + x = rnd(rng); y = rnd(rng); + } while(x*x+y*y>1); + z = rnd(rng); + double r = sqrt((1-z*z)/(x*x+y*y)); + x *= r; y*= r; + if (rng() % 2 == 0) x = -x; + if (rng() % 2 == 0) y = -y; + if (rng() % 2 == 0) z = -z; + // Project out the parallel component; + r = x*ev[0] + y*ev[1] + z*ev[2]; + x -= r*ev[0]; y -= r*ev[1]; z -= r*ev[2]; + r = x*x + y*y + z*z; + double t = 1-0.3*rnd(rng); + ev[0] *= t; ev[1] *= t; ev[2] *= t; + r = sqrt((1-t*t)/r); + ev[0] += x*r; ev[1] += y*r; ev[2] += z*r; + r=1.0/sqrt(ev[0]*ev[0]+ev[1]*ev[1]+ev[2]*ev[2]); + ev[0]*=r; ev[1]*=r; ev[2]*=r; + + /* + ev[2]=1.0-2.0*rnd(rng); + // ev[2]=rnd11(rng); + double phi=2.0*M_PI*rnd(rng); + // double phi=rnd0pi(rng); + double cos_theta=sqrt(1-ev[2]*ev[2]); + ev[0]=cos_theta*cos(phi); + ev[1]=cos_theta*sin(phi); + */ + } +#endif + + double minVxShift {0.0}, maxVxShift {0.0}, rangeVxShift {0.0}; + + double inline randomPotentialShift() + { + return minVxShift + rangeVxShift * rnd01(rng); + } +}; + + +template +WL1dEvecGenerator::WL1dEvecGenerator(int num_spins, int num_instances, double ** ev_p, + PotentialShifter &potentialShifter, + const char *init_file_name, const char *out_file_name, + const char *states_filename, int **occ_p) +: sw(states_filename) +{ + if (potentialShifter.vSpinShiftFlag) { + minVxShift = potentialShifter.minShift; + maxVxShift = potentialShifter.maxShift; + rangeVxShift = maxVxShift - minVxShift; + } + + verbosity=0; + + changeMode = 4; + + globalUpdate.frequency=0; + globalUpdate.changes=0; + globalUpdate.kappa=1.0; + globalUpdate.lambda=1.0; + globalUpdate.omega=0.5; + + maskedHistogram=false; + visited.clear(); + + long nX=-1; + histogramUpdateMode=false; + updatesPerBin=100; + double interval=0.01; + double kernelWidth=0.1; + double xMin=-std::numeric_limits::max();// double xMin=-HUGE; + double xMax=1.0; + bool readPositions=false; + n_spins=num_spins; + n_walkers = num_instances; + n_initialized_from_file = 0; + n_initialized_from_file_occ = 0; + evecs_pointer = ev_p; + occupancy_ptr = occ_p; + ref0.resize(n_walkers); for(int i=0; itype != JSON_OBJECT) + { + std::ostringstream message; + std::cerr << "In WL1dEvecGenerator(" << init_file_name << ") parsing failed (bad format)\n"; + exit(1); + } + + for(json_t *it = json_root->child; it != NULL; it=it->next) + { + std::string label = it->text; + if(label=="xMin") xMin=atof(it->child->text); + else if(label=="xMax") xMax=atof(it->child->text); + else if(label=="fixEnergyWindow") + { + if( atoi(it->child->text) != 0 ) fixEnergyWindow = true; + } + else if(label=="interval") interval=atof(it->child->text); + else if(label=="kernelWidth") kernelWidth=atof(it->child->text); + else if(label=="kernelType") + { + std::string strValue(it->child->text); + kernelType=getKernelType(strValue); + } + else if(label=="gamma") gamma=atof(it->child->text); + else if(label=="gammaFinal") gammaFinal=atof(it->child->text); + else if(label=="nX") + { + nX=atoi(it->child->text); + dos.setRangeAndClear(xMin,xMax,nX); + histo.setRangeAndClear(xMin,xMax,nX); + /* + if(dos!=NULL) free(dos); + if(histo!=NULL) free(histo); + dos=(double *)calloc(nX,sizeof(double)); + histo=(int *)calloc(nX,sizeof(int)); + */ + } + else if(label=="flipPerUpdate") flipPerUpdate=atoi(it->child->text); + else if(label=="updateCycle") updateCycle=atoi(it->child->text); + else if(label=="cycleCount") cycleCount=atoi(it->child->text); + else if(label=="changeMode") changeMode=atoi(it->child->text); + else if(label=="flatnessCriterion") flatnessCriterion=atof(it->child->text); + else if(label=="histogramMinimum") hMinimum=atof(it->child->text); + else if(label=="updatesPerBin") updatesPerBin=atoi(it->child->text); + else if(label=="globalUpdate.frequency") globalUpdate.frequency=atoi(it->child->text); + else if(label=="globalUpdate.changes") globalUpdate.changes=atoi(it->child->text); + else if(label=="globalUpdate.kappa") globalUpdate.kappa=atof(it->child->text); + else if(label=="globalUpdate.lambda") globalUpdate.lambda=atof(it->child->text); + else if(label=="globalUpdate.omega") globalUpdate.omega=atof(it->child->text); + else if(label=="seed") rng.seed(atoi(it->child->text)); + else if(label=="accept") accept=atol(it->child->text); + else if(label=="acceptSinceLastChange") acceptSinceLastChange=atol(it->child->text); + else if(label=="reject") reject=atol(it->child->text); +//* + else if(label=="rngState") + { + std::string strValue(it->child->text); + std::stringstream strStream(strValue, std::stringstream::in); + strStream>>rng; + } +//*/ + else if(label=="dos") + { + json_t *a = it->child; + int j=0; + for(json_t *i=a->child; i!=NULL; i=i->next) + { + dos[j++]=atof(i->text); + } + if(j!=dos.getN()) {std::cout<<"ERROR #(dos) "<child; + int j=0; + for(json_t *i=a->child; i!=NULL; i=i->next) + { + histo[j++]=atof(i->text); + } + if(j!=histo.getN()) {std::cout<<"ERROR #(histo) "<child->child; + int k = atoi(a->text); + dos.setNumberOfMoments(k); + a=a->next; + int jj=0; + for(json_t *j=a->child; j!=NULL; j=j->next) + { + dos.setNumberOfSamplesAtIdx(jj,atoi(j->text)); + jj++; + } + json_t *i=a->next; + for(int kk=0; kkchild; j!=NULL; j=j->next) + { + dos.setMomentAtIdx(jj,kk,atof(j->text)); + jj++; + } + i=i->next; + } + } + else if(label=="moments.k") + { + dos.setNumberOfMoments(atoi(it->child->text)); + } + // additional read for occupancy scheme + // mirrors 'evecs' read + else if( label == "occupancies" ) { + json_t *a = it->child; + n_initialized_from_file_occ=0; + for(json_t *i=a->child; i!=NULL; i=i->next) + { + if(n_initialized_from_file_occchild; j!=NULL; j=j->next) + { + occupancy_ptr[n_initialized_from_file_occ][k++]=atoi(j->text); + } + // initialize lastSwapOcc to -1 to indicate no previous swap + lastSwapOcc[n_initialized_from_file_occ].first = -1; + n_initialized_from_file_occ++; + if(k != n_spins) {std::cout<<"ERROR #(occs) "<child; + int n_initialized=0; + for(json_t *i=a->child; i!=NULL; i=i->next) + { + if(n_initializedchild; j!=NULL; j=j->next) + { + if( k == 0 ) lastSwapOcc[n_initialized].first = atoi(j->text); + if( k == 1 ) lastSwapOcc[n_initialized].second = atoi(j->text); + k++; + } + n_initialized++; + if(k!=2) {std::cout<<"ERROR #(lastSwapOcc) "<child; + n_initialized_from_file=0; + for(json_t *i=a->child; i!=NULL; i=i->next) + { + if(n_initialized_from_filechild; j!=NULL; j=j->next) + { + evecs_pointer[n_initialized_from_file][k++]=atof(j->text); + } +// initialize oldSpin and lastChange to point to site 0 + lastChange[n_initialized_from_file]=0; + oldSpin[ 3*n_initialized_from_file]=evecs_pointer[n_initialized_from_file][0]; + oldSpin[1+3*n_initialized_from_file]=evecs_pointer[n_initialized_from_file][1]; + oldSpin[2+3*n_initialized_from_file]=evecs_pointer[n_initialized_from_file][2]; +// + n_initialized_from_file++; + if(k!=3*n_spins) {std::cout<<"ERROR #(evecs) "<child; + int n_initialized=0; + for(json_t *i=a->child; i!=NULL; i=i->next) + { + if(n_initializedchild; j!=NULL; j=j->next) + { + oldSpin[n_initialized*3+k++]=atof(j->text); + } + n_initialized++; + if(k!=3) {std::cout<<"ERROR #(oldSpin) "<child; + int j=0; + int n_initialized=0; + for(json_t *i=a->child; i!=NULL; i=i->next) + { + if(n_initializedtext); + n_initialized++; + } + } + else if(label=="position") + { + json_t *a = it->child; + int j=0; + int n_initialized=0; + for(json_t *i=a->child; i!=NULL; i=i->next) + { + if(n_initializedtext); + n_initialized++; + } + } + readPositions=true; + } + else if(label=="magnetizationAtPosition") + { + json_t *a = it->child; + int j=0; + int n_initialized=0; + for(json_t *i=a->child; i!=NULL; i=i->next) + { + if(n_initializedtext); + n_initialized++; + } + } +// readMagnetizationAtPositions=true; + } + else if(label=="stepsSinceLastHistogramUpdate") stepsSinceLastHistogramUpdate=atoi(it->child->text); + else if(label=="numberOfUpdatesSinceLastBoost") numberOfUpdatesSinceLastBoost=atoi(it->child->text); + else if(label=="modificationFactorChanges") modificationFactorChanges=atoi(it->child->text); + else if(label=="clearHistogram") clearHistogram=atoi(it->child->text); + else if(label=="setFirstWalkerToFM") setFirstWalkerToFM=atoi(it->child->text); + else if(label=="maskedHistogram") maskedHistogram=(atoi(it->child->text)!=0); + else if(label=="visited") + { + maskedHistogram=true; + json_t *a = it->child; + for(json_t *i=a->child; i!=NULL; i=i->next) + { + visited.push_back(atoi(i->text)); + } + } + else std::cout<<"WARNING: unknown label: "<0) + { + interval=(xMax-xMin)/double(nX); + dos.setRange(xMin,xMax); histo.setRange(xMin,xMax); + } else { + dos.setDeltaAndClear(interval); histo.setDeltaAndClear(interval); + } + + json_free_value(&json_root); + } + + dosKernel.setWidthAndClear(interval,kernelWidth); + histoKernel.setWidthAndClear(interval,kernelWidth); + nullKernel.setWidthAndClear(interval,kernelWidth); + initKernel(kernelType,dosKernel); + dosKernel.scale(gamma/dosKernel(0.0)); + initKernel(kernelType,histoKernel); + histoKernel.scale(1.0/histoKernel(0.0)); + initKernel(kernelType,nullKernel); + nullKernel.scale(0.0); +// histoKernel.scale(interval); + + if(readPositions) + for(int i=0; i=1.0) visited[i]=1; else visited[i]=0; + } + + if(out_file_name!=NULL && out_file_name[0]!=0) dos_out_name=out_file_name; + std::cout<<"Wang-Landau output will be written to: "< +void WL1dEvecGenerator::initializeEvecAndPotentialShift(int inst, double *evecs, double *potentialShifts) +{ + for (size_t j=0; j +void WL1dEvecGenerator::initializeEvec(int inst, double *evecs) +{ + bool firstFerromagnetic=true; + if(inst>=n_initialized_from_file) + { + if(firstFerromagnetic) + if(inst==0) + for(size_t j=0; j<3*n_spins; j+=3) + {evecs[j]=0.0; evecs[j+1]=0.0; evecs[j+2]=1.0;} + else if(inst==1) + for(size_t j=0; j<3*n_spins; j+=3) + {evecs[j+2]= (j/3)%2 ? 1.0 : -1.0 ; evecs[j+1]=0.0; evecs[j]=0.0;} + else + for(size_t j=0; j<3*n_spins; j+=3) + random_evec_1(&evecs[j]); + else + for(size_t j=0; j<3*n_spins; j+=3) + random_evec_1(&evecs[j]); + } + + out[inst]=false; +} + +template +void WL1dEvecGenerator::writeState(const char* name) +{ + // if(!syncronizeGraphs(dos,histo)) + if(dos.getN()!=histo.getN()) + { + std::cout<<"Histogramm size dosn't match DOS! Clearing histogramm!\n"; + histo.setRangeAndClear(dos.getMinX(),dos.getMaxX(),dos.getN()); + } + std::ofstream ofile(name); + if(ofile) + { + ofile.setf(std::ios::scientific,std::ios::floatfield); + ofile.precision(15); + ofile<<"{\n"; + ofile<<"\"xMin\" : " << dos.getMinX() << ",\n"; + ofile<<"\"xMax\" : " << dos.getMaxX() << ",\n"; + if( fixEnergyWindow ) + ofile<<"\"fixEnergyWindow\" : 1,\n"; + ofile<<"\"nX\" : " << dos.getN() << ",\n"; + if(kernelType!=None) + ofile<<"\"kernelWidth\" : " << dosKernel.getWidth() << ",\n"; + std::string kernelName; + getKernelName(kernelType,kernelName); + ofile<<"\"kernelType\" : \"" << kernelName << "\",\n"; + ofile<<"\"gamma\" : " << gamma << ",\n"; + ofile<<"\"accept\" : " << accept <<",\n"; + ofile<<"\"acceptSinceLastChange\" : " << acceptSinceLastChange <<",\n"; + ofile<<"\"reject\" : " << reject <<",\n"; + ofile<<"\"gammaFinal\" : " << gammaFinal << ",\n"; + + ofile<<"\"changeMode\" : "<< changeMode <<",\n"; + ofile<<"\"flatnessCriterion\" : "<< flatnessCriterion <<",\n"; + ofile<<"\"histogramMinimum\" : "<< hMinimum <<",\n"; + ofile<<"\"updatesPerBin\" : "<< updatesPerBin <<",\n"; + ofile<<"\"flipPerUpdate\" : " << flipPerUpdate << ",\n"; + ofile<<"\"updateCycle\" : " << updateCycle << ",\n"; + + ofile<<"\"globalUpdate.frequency\" : "<< globalUpdate.frequency << ",\n"; + ofile<<"\"globalUpdate.changes\" : "<< globalUpdate.changes << ",\n"; + ofile<<"\"globalUpdate.kappa\" : "<< globalUpdate.kappa << ",\n"; + ofile<<"\"globalUpdate.lambda\" : "<< globalUpdate.lambda << ",\n"; + ofile<<"\"globalUpdate.omega\" : "<< globalUpdate.omega << ",\n"; + + ofile<<"\"dos\" : ["<0) + { + ofile<<"\"moments\" : ["< +void WL1dEvecGenerator::writeDos(const char* name) +{ + std::ofstream ofile(name); + // write dos; + // we are using JSON as our file format + + if(ofile) + { + ofile.setf(std::ios::scientific,std::ios::floatfield); + ofile.precision(15); + ofile<<"{\n"; + ofile<<"\"xMin\" : " << dos.getMinX() << "," <0) + { + ofile<<"\"moments\" : ["< +bool WL1dEvecGenerator::determineAcceptance(int instance, double energy) +{ + return determineAcceptance(instance, energy, 0.0); +} + + +template +bool WL1dEvecGenerator::determineAcceptance(int instance, double energy, double magnetization) +{ + + bool accept_step; + // +++++++++ Added by Odbadrakh and Don on Aug 11, 2010 + // +++ If a flip of spin results in energy in the same bin as previous accepted + // +++ state, it is accepted all the time. We change it by accepting if the + // +++ new state has lower density of states according to a linear spline of DOS + + double dos_differ; + double energy_differ; + double to_go_or_not; + + // +++++++++ end of modification. Follow the new variables to see the actual changes + // energy between xMin and xMax ? + int grid = dos.idx(energy); + + // dos.test(); + + stepsSinceLastHistogramUpdate++; // counter[0]++ + + // record initial energy for step out + if (lastAccepted[instance] == -2) + { + position[instance] = lastAcceptedEnergy[instance] = energy; + lastAccepted[instance] = -1; + } + + if (grid < 0 || grid > dos.getN()-1) + { + + // guard for fixed window + if( fixEnergyWindow ) { + + // default action is reject + accept_step = false; + + // not in window yet + if( ref0[instance] < 0 || ref0[instance] > dos.getN()-1 ) { + out[instance] = true; + if( grid < 0 && energy - position[instance] > 0.0) accept_step = true; + if( grid > dos.getN()-1 && energy - position[instance] < 0.0) accept_step = true; + } + + // already inside window + else + out[instance] = false; + + return accept_step; + } + + dos.extendTo(energy - dosKernel.getWidth()); histo.extendTo(energy - histoKernel.getWidth()); + dos.extendTo(energy + dosKernel.getWidth()); histo.extendTo(energy + histoKernel.getWidth()); + grid = dos.idx(energy); + // we need to adjust the grid point of the walker positions (ref0) for all walkers + for (long ii=0; ii= 0) ref0[ii] = dos.idx(position[ii]); + } + numRetentions[instance]++; + out[instance] = false; + ref1[instance] = grid; + if (ref0[instance] < 0 || ref0[instance] > dos.getN()-1 ) + { + accept_step = true; + ref0[instance] = ref1[instance]; + position[instance] = energy; + magnetizationAtPosition[instance] = magnetization; + } + else + { + if (abs(ref1[instance] - ref0[instance]) < 1 ) + { +// Actual change made by Odbadrakh, Aug 30, 2010 + dos_differ = dos[ref0[instance]-1] - dos[ref0[instance]]; + energy_differ = energy - lastAcceptedEnergy[instance]; + to_go_or_not = dos_differ * energy_differ; + if (to_go_or_not >= 0.0) // accepts all downhill changes + { + accept_step = true; + ref0[instance] = ref1[instance]; + position[instance] = energy; + magnetizationAtPosition[instance] = magnetization; + } + else // uphill moves + { + if(rnd(rng) < exp(to_go_or_not/dos.getDelta())) + { //std::cout<<" dos "< 2) + std::cout << "WangLandau 1d EvecGenerator step " + << modificationFactorChanges << ":" << numberOfUpdatesSinceLastBoost << ":" + << stepsSinceLastHistogramUpdate << " nX=" << dos.getN() + << " [" << dos.getMinX() << ", " << dos.getMaxX() << "] " + << (accept_step ? "accepted" : "rejected") + << " Energy = " << energy << ", Instance " << instance << std::endl; + + return accept_step; + +} + + +/* +template +bool WL1dEvecGenerator::updateHistogram(int instance, double *evecs, double energy, bool *accepted) +{ + return updateHistogram(instance, evecs, energy, 0.0, accepted); +} +*/ + +template +bool WL1dEvecGenerator::updateHistogram(int instance, double *evecs, bool accepted) +{ + +// Update histogram and DOS + if(stepsSinceLastHistogramUpdate >= flipPerUpdate) + { + stepsSinceLastHistogramUpdate = 0; // counter[0] + numberOfUpdatesSinceLastBoost++; // counter[1] + cycleCount++; + // modify the DoS + if(!out[instance]) + { + // addKernel(dos,dosKernel,energy); + if (!histogramUpdateMode) // standard Wang-Landau + { + addKernel(dos, dosKernel, position[instance]); + dos.addMomentsAtIdx(dos.idx(position[instance]), magnetizationAtPosition[instance]); + // if(accepted) addKernel(histo,histoKernel,position[instance]); + addKernel(histo, histoKernel, position[instance]); + if(maskedHistogram) visited[histo.idx(position[instance])]=1; + // addKernel(dos, dosKernel, energy); + // addKernel(histo, histoKernel, energy); + } + else + { + // addKernel(dos, nullKernel, position[instance]); + if(accepted) addKernel(histo, histoKernel, position[instance]); + if(maskedHistogram) visited[histo.idx(position[instance])]=1; + } + } + else + { + if(!fixEnergyWindow) { + std::cerr << "ATTENTION: We should never reach this place in WL1dEvecGenerator!\n"; + exit(1); + } + } + } + +// 1/t algorithm, change gamma at every step +// Reference: Phys. Rev. E 75, 046701 (2007). + if(changeMode & (8+16+32)) + { + long n = accept + reject; + double dn; + + if ((changeMode & (8+16)) == 8) n = accept; + else if ((changeMode & (8+16)) == 16) n = reject; + else if ((changeMode & (8+16)) == 8+16) n = accept + reject; + + if (changeMode & 32) dn = double(n) / double(n_walkers); + else dn = double(n); + + gamma = 1.0 / dn; + if (gamma > 1.0) gamma = 1.0; + + initKernel(kernelType, dosKernel); + dosKernel.scale(gamma); + } + +// 1. write configuration +// 2. check histogram flatness +// 3. perform global update + if (cycleCount >= updateCycle) + { + cycleCount = 0; + // syncronizeGraphs(dos, histo); + if (dos.getN() != histo.getN()) + { + std::cout << "Histogramm size dosn't match DOS! Clearing histogramm!\n"; + histo.setRangeAndClear(dos.getMinX(), dos.getMaxX(), dos.getN()); + } + + writeState("WL1d.state"); + + if (!histogramUpdateMode) // Normal Wang-Landau + { + // calculate minimum nonzero histogram + // we look only at the histogram inside the energy interval that was actually sampled if we use kernel updates + double hMin, hMax, hMean; + + if (kernelType == None) + { + if(maskedHistogram) + { + hMean = histo.getMeanYMasked(visited); + histo.getMinMaxYMasked(hMin,hMax,visited); + } + else + { + hMean = histo.getMeanY(); + histo.getMinMaxY(hMin,hMax); + } + } + else + { + hMean = histo.getMeanYInInterval(dos.getMinX() + dosKernel.getWidth(), + dos.getMaxX() - dosKernel.getWidth()); + histo.getMinMaxYInInterval(dos.getMinX() + dosKernel.getWidth(), + dos.getMaxX() - dosKernel.getWidth(), + hMin, hMax); + } + + // double currentFlatnessCriterion = double(hMin-hMax) / hMean; + double currentFlatnessCriterion = double(hMin) / hMean; + + std::cout << "# acceptence ratio = " << double(accept) / double(accept+reject) << "\n"; + std::cout << "# current flatness = " << currentFlatnessCriterion << (changeMode & 4 ? " *":"") << "\n"; + std::cout << "# current histogram minimum = " << hMin << (changeMode & 2 ? " *":"") << "\n"; + std::cout << "# average accepted steps/bin since last gamma change = " + << double(acceptSinceLastChange) / double(histo.getN()) + << (changeMode & 1 ? " *":"") << "\n"; + + if (changeMode != 0 && changeMode < 8) + { + // perform global update + if (globalUpdate.frequency > 0 && (globalUpdate.frequency*histo.getN()) < acceptSinceLastChange) + { + char fn[256]; + snprintf(fn,255,"Dos_Global_%02d_Changes_%03d.jsn",globalUpdate.changes,modificationFactorChanges); + writeDos(fn); + globalUpdate.changes++; + std::cout<<"# global update "<=histo.getN()*updatesPerBin || !(changeMode &1)) && + (hMin >= hMinimum || !(changeMode & 2)) && + (currentFlatnessCriterion>flatnessCriterion || !(changeMode & 4)) )) + { + std::cout << "# level " << modificationFactorChanges << " with gamma = " << gamma << " is finished.\n"; + modificationFactorChanges++; // counter[2] + + // write dos; + // we are using JSON as our file format + char fn[256]; + snprintf(fn,255,"Dos_Global_%02d_Changes_%03d.jsn",globalUpdate.changes,modificationFactorChanges); + writeDos(fn); + // writeDos(dos_out_name.data()); + + // clear the Histogram + histo.clear(); + acceptSinceLastChange = 0; + + // change gamma + dosKernel.scale(0.5); + gamma = 0.5 * gamma; + std::cout << "# level " << modificationFactorChanges << " with gamma = " << gamma << " begins.\n"; + if(statesFile != NULL) + { + // char fn[256]; + snprintf(fn,255,"%s_%02d",statesFile,modificationFactorChanges); + sw.newFile(fn); + sw.writeHeader(gamma,n_walkers,n_spins,evecs_pointer); + } + } + } + } + else // histogram update mode != 0 + { + if (acceptSinceLastChange >= histo.getN() * updatesPerBin) + { + acceptSinceLastChange = 0; + for (int ix=0; ix +void WL1dEvecGenerator::updateLog(int instance, double *evecs, int * occ, double energy, bool accepted, MoveChoice_t MoveChoice, + bool isSpinSim, bool isOccupancySim) { + + // use static variables to keep track of the last move type + static bool firstrun = true; + static std::vector lastAcceptedMove; + static FILE* filep; + + // initialize static variables + if( firstrun ) { + lastAcceptedMove.resize(n_walkers); + + if( isOccupancySim ) { + filep = fopen("occ_vs_energies","w"); + fprintf(filep,"# site occupancies, energy\n"); + } + firstrun = false; + } + + // Suffian: my preference is to print all configurations and energy + if( isOccupancySim ) { + for(int i = 0; i < n_spins; i++) + fprintf(filep, "%1d", occ[i]); + fprintf(filep, " %20.15f", energy); + fprintf(filep, " %5d", instance); + if( accepted ) fprintf(filep, " accepted"); + fprintf(filep, "\n"); + fflush(filep); + } + + // return unless state changed + if( !accepted ) return; + + // print output corresponding to previous state + if( lastAcceptedMove[instance] == SpinMove ) + sw.writeChange(instance, numRetentions[instance], lastAccepted[instance], &lastAcceptedEvec[3*instance], lastAcceptedEnergy[instance]); + else + sw.writeChangeOcc(instance, numRetentions[instance], + lastAcceptedSwap[instance].first, + lastAcceptedSwap[instance].second, + lastAcceptedOcc[instance].first, + lastAcceptedOcc[instance].second, + lastAcceptedEnergy[instance]); + + // remember the new configuration + lastAcceptedEnergy[instance] = position[instance]; + if( MoveChoice == SpinMove ) { + lastAccepted[instance] = lastChange[instance]; + //lastAcceptedEnergy[instance] = energy; + lastAcceptedEvec[ 3*instance] = evecs[ 3*lastChange[instance]]; + lastAcceptedEvec[1+3*instance] = evecs[1+3*lastChange[instance]]; + lastAcceptedEvec[2+3*instance] = evecs[2+3*lastChange[instance]]; + } + else { + lastAcceptedSwap[instance].first = lastSwapOcc[instance].first; + lastAcceptedSwap[instance].second = lastSwapOcc[instance].second; + lastAcceptedOcc[instance].first = occ[ lastSwapOcc[instance].first ]; + lastAcceptedOcc[instance].second = occ[ lastSwapOcc[instance].second ]; + } + + lastAcceptedMove[instance] = MoveChoice; +} + +template +void WL1dEvecGenerator::generatePotentialShift(int instance, double *potentialShifts, bool accepted) +{ + + if (accepted) + { + lastChangePotentialShift[instance] = int(rnd(rng)*n_spins); + oldPotentialShift[instance] = potentialShifts[lastChangePotentialShift[instance]]; + potentialShifts[lastChangePotentialShift[instance]] = randomPotentialShift(); + } else { + potentialShifts[lastChangePotentialShift[instance]] = oldPotentialShift[instance]; + lastChangePotentialShift[instance] = int(rnd(rng)*n_spins); + oldPotentialShift[instance] = potentialShifts[lastChangePotentialShift[instance]]; + potentialShifts[lastChangePotentialShift[instance]] = randomPotentialShift(); + } + +} + +template +void WL1dEvecGenerator::generateEvec(int instance, double *evecs, bool accepted) +{ + if (accepted) + { + lastChange[instance] = int(rnd(rng)*n_spins); + oldSpin[ 3*instance] = evecs[ 3*lastChange[instance]]; + oldSpin[1+3*instance] = evecs[1+3*lastChange[instance]]; + oldSpin[2+3*instance] = evecs[2+3*lastChange[instance]]; + random_evec(&evecs[3*lastChange[instance]]); + numRetentions[instance] = 0; + } + else + { + evecs[ 3*lastChange[instance]] = oldSpin[ 3*instance]; + evecs[1+3*lastChange[instance]] = oldSpin[1+3*instance]; + evecs[2+3*lastChange[instance]] = oldSpin[2+3*instance]; + lastChange[instance] = int(rnd(rng)*n_spins); + oldSpin[ 3*instance] = evecs[ 3*lastChange[instance]]; + oldSpin[1+3*instance] = evecs[1+3*lastChange[instance]]; + oldSpin[2+3*instance] = evecs[2+3*lastChange[instance]]; + random_evec(&evecs[3*lastChange[instance]]); + } + +} + +// additional routines for Wang-Landau for alloying +// swapping atoms preserves concentration + +template +MoveChoice_t WL1dEvecGenerator::selectMoveType(bool isSpinSim, bool isOccSim) { + + // choose between spin and occupancy equally + // is this a good choice?? + if( isSpinSim && isOccSim ) { + int c = int(rnd(rng)*2); + if( c == 0 ) + return SpinMove; + else + return OccupancyMove; + } + + if( isSpinSim ) + return SpinMove; + if( isOccSim ) + return OccupancyMove; +} + +template +void WL1dEvecGenerator::setAlloyClasses(const AlloyMixingDesc& alloyDesc, int *siteclass) { + this->alloyDesc = alloyDesc; + + siteAlloyClass.resize(n_spins); + for(int i = 0; i < n_spins; i++) + siteAlloyClass[i] = siteclass[i]; + + // remember number of sites per alloy class + int nclasses = alloyDesc.size(); + numSites_per_AlloyClass.resize(nclasses); + int *nsites = numSites_per_AlloyClass.data(); + for(int i = 0; i < nclasses; i++) + nsites[i] = 0; + for(int i = 0; i < n_spins; i++) + nsites[ siteAlloyClass[i] ]++; +} + +template +void WL1dEvecGenerator::generateOccupancies(int instance, int *occ, bool acceptedOcc) { + + int temp, atom_i, atom_j; + + // if previous move exists and not accepted + // revert occupancies + if( !acceptedOcc && lastSwapOcc[instance].first >= 0 ) { + atom_i = lastSwapOcc[instance].first; + atom_j = lastSwapOcc[instance].second; + + temp = occ[atom_i]; + occ[atom_i] = occ[atom_j]; + occ[atom_j] = temp; + + /* + printf("Master: Reverted occupancies:"); + for(int i = 0; i < n_spins; i++) + printf("%d ",occ[i]); + printf("\n"); */ + } + else + numRetentions[instance] = 0; + + // pick an alloy class + int ac = int(rnd(rng)*alloyDesc.size()); + + // pick two distinct atoms within mixing class + // here we assume there are few alloy classes + do{ atom_i = int(rnd(rng)*n_spins); } + while( siteAlloyClass[atom_i] != ac ); + do{ atom_j = int(rnd(rng)*n_spins); } + while( siteAlloyClass[atom_j] != ac || occ[atom_j] == occ[atom_i] ); + + // swap atoms + temp = occ[atom_i]; + occ[atom_i] = occ[atom_j]; + occ[atom_j] = temp; + + // remember which atoms were swapped + lastSwapOcc[instance].first = atom_i; + lastSwapOcc[instance].second = atom_j; +} + +template +void WL1dEvecGenerator::generateUnsampledOcc(int inst, int *occ) { + + // determine number atoms of each component type given concentration + std::vector< std::vector > atomsLeft; + atomsLeft.resize(alloyDesc.size()); + for(int i = 0; i < atomsLeft.size(); i++) { + atomsLeft[i].resize(alloyDesc[i].size()); + for(int j = 0; j < atomsLeft[i].size(); j++) { + + // how many sites for this alloy class and component? + double nfrac = alloyDesc[i][j].conc * numSites_per_AlloyClass[i]; + double error = fmod(nfrac, 1.0); + + // ensure concentrations commensurate with number of sites + const double tol = 1.e-06; + if( tol < error && error < 1.0-tol ) { + printf("error: alloy concentrations are incommensurate with supercell\n"); + printf("alloy class = %d, component = %d, concentration = %f\n", + i+1, j+1, alloyDesc[i][j].conc); + printf("desired sites = %f\n", nfrac); + exit(1); + } + + atomsLeft[i][j] = int(nfrac + 0.5); + } + } + + // distribute atoms across sites + for(int i = 0; i < n_spins; i++) { + + // pick an atom from the right class + int type, ac = siteAlloyClass[i]; + do { type = int( rnd(rng) * alloyDesc[ac].size() ); } + while( atomsLeft[ac][type] == 0 ); + + // assign to site + occ[i] = type; atomsLeft[ac][type]--; + } +} + +template +void WL1dEvecGenerator::initializeOccupancies(int inst, int *occ) { + + // Warning: do nothing if walker occupancies read from file + if( inst < n_initialized_from_file_occ ) + return; + + generateUnsampledOcc(inst, occ); +} + + +#endif + diff --git a/src/Main/WangLandau.hpp b/src/Main/WangLandau.hpp new file mode 100644 index 000000000..6226d4b98 --- /dev/null +++ b/src/Main/WangLandau.hpp @@ -0,0 +1,1335 @@ +// -*- mode: c++ -*- +// WangLandau.hpp replaces mjson with libjson C++ class for JSON parser +#ifndef LSMS_WANG_LANDAU_H +#define LSMS_WANG_LANDAU_H + +#include +#include +#include +#include +#include +#include +#include +#include +// we use BOOST for the random number generator +// #include +#include +#include "../../libjson/json.hpp" +// #include "../../mjson/json.h" +#include "EvecGenerator.h" +#include "Graph1dMoments.hpp" +#include "SystemParameters.hpp" +#include "../Potential/PotentialShifter.hpp" + +void inline performGlobalUpdate(Graph1dMoments &g, double kappa, double lambda, double omega) +{ + for(int i=0; iomega) g[i]+=kappa*std::exp(-lambda/(g[i]-omega)); +} + +class StatesWriter +{ +public: + StatesWriter(const char *filename=NULL) + { + if(filename==NULL) writeFlag=false; + else {writeFlag=true; of.open(filename); + of.setf(std::ios::scientific,std::ios::floatfield); + of.precision(17);} + } + ~StatesWriter() {if(writeFlag) of.close();} + void writeHeader(double lnF, int numWalk, int numSpin, double **spins) + { + if(writeFlag) + { + of<"< +// template +class WL1dEvecGenerator : public EvecGenerator +{ + public: + WL1dEvecGenerator(int num_spins, int num_instances, double ** ev_p, + PotentialShifter &potentialShifter, + const char *init_file_name=NULL, const char *out_file_name=NULL, + const char *states_filename=NULL); + + bool determineAcceptance(int instance, double energy); + bool determineAcceptance(int instance, double energy, double magnetization); + + bool updateHistogram(int instance, double *evecs, bool accepted); +/* + bool updateHistogram(int instance, double *evecs, double energy, bool *accepted); + bool updateHistogram(int instance, double *evecs, double energy, double magnetization, bool *accepted); + bool updateHistogram(int instance, double *evecs, double energy) {bool h; return updateHistogram(instance, evecs, energy, &h);} + bool updateHistogram(int instance, double *evecs) {std::cerr<<"Need energy for WL1dEvecGenerator\n"; exit(1);} +*/ + + void generateEvec(int instance, double *evecs, bool accepted); + //void generateEvec(int instance, double *evecs, double energy); + void generatePotentialShift(int instance, double *potentialShifts, bool accepted); + + void initializeEvecAndPotentialShift(int inst, double *evecs, double *potentialShifts); + void initializeEvec(int instance, double *evecs); + + // Wang-Landau for occupancy variables + MoveChoice_t selectMoveType(bool isSpinSim, bool isOccSim); + void setAlloyClasses(AlloyMixingDesc&, int* siteclass); + void generateOccupancies(int instance, int *occ, bool acceptedOcc); + void generateUnsampledOcc(int inst, int *occ); + void initializeOccupancies(int inst, int *occ); + void updateLog(int instance, double *evecs, int * occ, bool accepted, MoveChoice_t MoveChoice); + + void generateUnsampledEvec(int instance, double *evecs, double energy) + { + initializeEvec(instance, evecs); + //return false; + } + + void startSampling(void) + { sw.writeHeader(gamma, n_walkers, n_spins, evecs_pointer); } + + void writeState(const char *name); + void writeDos(const char *name); + + private: + size_t n_walkers; + int n_spins; + double ** evecs_pointer; + int n_initialized_from_file; + + std::string dos_out_name; + + int stepsSinceLastHistogramUpdate; + int numberOfUpdatesSinceLastBoost; + int cycleCount; + int modificationFactorChanges; + + // Random number generator and distribution: + RNG rng; + // boost::uniform_real rnd; //, rnd11(-1.0,1.0),rnd0pi(0.0,2.0*M_PI); + std::uniform_real_distribution rnd; //, rnd11(-1.0,1.0),rnd0pi(0.0,2.0*M_PI); + std::uniform_real_distribution rnd01; //(0.0,1.0); + + /* + // Histogramm and dos: + double xMin, xMax, interval; + int nX; + double *dos; // std::vector dos; + int *histo; // std::vector histo; + int hMinimum; + */ + + double hMinimum; + Graph1dMoments dos, histo; + Kernel1d dosKernel, histoKernel, nullKernel; + KernelType kernelType; + + unsigned long accept, reject, acceptSinceLastChange; + double flatnessCriterion; + + double gamma, gammaFinal; + int flipPerUpdate, updateCycle; + + // instance specific: + std::vector ref0, ref1; + std::vector position, magnetizationAtPosition; + std::vector out; + std::vector lastChange; + std::vector lastChangePotentialShift; + std::vector lastAccepted; + std::vector lastAcceptedPotentialShiftIndex; + std::vector lastAcceptedEnergy; + std::vector lastAcceptedEvec; + std::vector oldSpin; // oldSpin[instance*3 + {x=0, y=1, z=2}] + std::vector oldPotentialShift; + std::vector lastAcceptedPotentialShift; + + // changes to accomodate alloying (i.e. variable site occupancies) + std::vector< std::pair > lastSwapOcc; + std::vector< std::pair > lastAcceptedSwap; + AlloyMixingDesc& alloyDesc; + std::vector siteAlloyClass; + std::vector numSites_per_AlloyClass; + + std::vector numRetentions; + + char *statesFile; + StatesWriter sw; + + int changeMode; + bool histogramUpdateMode; + int updatesPerBin; + + struct {double kappa, lambda, omega; int frequency, changes;} globalUpdate; + +#ifdef ISING + void inline random_evec_1(double ev[3]) + { + ev[0]=ev[1]=0.0; + ev[2]=1.0; + if(rng()%2 == 0) ev[2]=-ev[2]; + } +#else + void inline random_evec_1(double ev[3]) + { + double x,y,z; + do { + x = rnd(rng); + y = rnd(rng); + } while(x*x+y*y>1); + z = rnd(rng); + double r = sqrt((1-z*z)/(x*x+y*y)); + x *= r; + y *= r; + if (rng() % 2 == 0) x = -x; + if (rng() % 2 == 0) y = -y; + if (rng() % 2 == 0) z = -z; + r=1.0/sqrt(x*x+y*y+z*z); + ev[0]=x*r; ev[1]=y*r; ev[2]=z*r; + } +#endif + +#ifdef ISING + void inline random_evec(double ev[3]) + { + ev[2]=-ev[2]; + } +#else + void inline random_evec(double ev[3]) + { + double x, y, z; + do { + x = rnd(rng); y = rnd(rng); + } while(x*x+y*y>1); + z = rnd(rng); + double r = sqrt((1-z*z)/(x*x+y*y)); + x *= r; y*= r; + if (rng() % 2 == 0) x = -x; + if (rng() % 2 == 0) y = -y; + if (rng() % 2 == 0) z = -z; + // Project out the parallel component; + r = x*ev[0] + y*ev[1] + z*ev[2]; + x -= r*ev[0]; y -= r*ev[1]; z -= r*ev[2]; + r = x*x + y*y + z*z; + double t = 1-0.3*rnd(rng); + ev[0] *= t; ev[1] *= t; ev[2] *= t; + r = sqrt((1-t*t)/r); + ev[0] += x*r; ev[1] += y*r; ev[2] += z*r; + r=1.0/sqrt(ev[0]*ev[0]+ev[1]*ev[1]+ev[2]*ev[2]); + ev[0]*=r; ev[1]*=r; ev[2]*=r; + + /* + ev[2]=1.0-2.0*rnd(rng); + // ev[2]=rnd11(rng); + double phi=2.0*M_PI*rnd(rng); + // double phi=rnd0pi(rng); + double cos_theta=sqrt(1-ev[2]*ev[2]); + ev[0]=cos_theta*cos(phi); + ev[1]=cos_theta*sin(phi); + */ + } +#endif + + double minVxShift {0.0}, maxVxShift {0.0}, rangeVxShift {0.0}; + + double inline randomPotentialShift() + { + return minVxShift + rangeVxShift * rnd01(rng); + } +}; + +template +void getValue(JSON::Value &data, const char *key, T &val) +{ if(data[key].type()!=JSON::NIL) val=(T)data[key]; } + + +template +WL1dEvecGenerator::WL1dEvecGenerator(int num_spins, int num_instances, double ** ev_p, + PotentialShifter &potentialShifter, + const char *init_file_name, const char *out_file_name, + const char *states_filename) +: sw(states_filename) +{ + + printf("Running WL1D constructor!\n"); + + if (potentialShifter.vSpinShiftFlag) { + minVxShift = potentialShifter.minShift; + maxVxShift = potentialShifter.maxShift; + rangeVxShift = maxVxShift - minVxShift; + } + + verbosity=3; + + changeMode = 8+16; + + globalUpdate.frequency=0; + globalUpdate.changes=0; + globalUpdate.kappa=1.0; + globalUpdate.lambda=1.0; + globalUpdate.omega=0.5; + + long nX=-1; + histogramUpdateMode=false; + updatesPerBin=100; + double interval=0.01; + double kernelWidth=0.1; + double xMin=-HUGE; + double xMax=1.0; + bool readPositions=false; + n_spins=num_spins; + n_walkers = num_instances; + n_initialized_from_file = 0; + evecs_pointer = ev_p; + ref0.resize(n_walkers); for(int i=0; i>rng; + } + getValue(data,"accept",accept); + getValue(data,"acceptSinceLastChange",acceptSinceLastChange); + getValue(data,"reject",reject); + + getValue(data,"stepsSinceLastHistogramUpdate",stepsSinceLastHistogramUpdate); + getValue(data,"numberOfUpdatesSinceLastBoost",numberOfUpdatesSinceLastBoost); + getValue(data,"modificationFactorChanges",modificationFactorChanges); + getValue(data,"clearHistogram",clearHistogram); + getValue(data,"setFirstWalkerToFM",setFirstWalkerToFM); + + if(data["dos"].type()==JSON::ARRAY) + { + const JSON::Array &a=data["dos"].as_array(); + if(a.size()!=nX) {std::cout<<"ERROR #(dos) "<0) + { + interval=(xMax-xMin)/double(nX); + dos.setRange(xMin,xMax); histo.setRange(xMin,xMax); + } else { + dos.setDeltaAndClear(interval); histo.setDeltaAndClear(interval); + } + + // json_free_value(&json_root); + } + + dosKernel.setWidthAndClear(interval,kernelWidth); + histoKernel.setWidthAndClear(interval,kernelWidth); + nullKernel.setWidthAndClear(interval,kernelWidth); + initKernel(kernelType,dosKernel); + dosKernel.scale(gamma/dosKernel(0.0)); + initKernel(kernelType,histoKernel); + histoKernel.scale(1.0/histoKernel(0.0)); + initKernel(kernelType,nullKernel); + nullKernel.scale(0.0); +// histoKernel.scale(interval); + + if(readPositions) + for(int i=0; i +void WL1dEvecGenerator::initializeEvecAndPotentialShift(int inst, double *evecs, double *potentialShifts) +{ + for (size_t j=0; j +void WL1dEvecGenerator::initializeEvec(int inst, double *evecs) +{ + bool firstFerromagnetic=true; + if(inst>=n_initialized_from_file) + { + if(firstFerromagnetic) + if(inst==0) + for(size_t j=0; j<3*n_spins; j+=3) + {evecs[j]=0.0; evecs[j+1]=0.0; evecs[j+2]=1.0;} + else if(inst==1) + for(size_t j=0; j<3*n_spins; j+=3) + {evecs[j+2]= (j/3)%2 ? 1.0 : -1.0 ; evecs[j+1]=0.0; evecs[j]=0.0;} + else + for(size_t j=0; j<3*n_spins; j+=3) + random_evec_1(&evecs[j]); + else + for(size_t j=0; j<3*n_spins; j+=3) + random_evec_1(&evecs[j]); + } + + out[inst]=false; +} + +template +void WL1dEvecGenerator::writeState(const char* name) +{ + // if(!syncronizeGraphs(dos,histo)) + if(dos.getN()!=histo.getN()) + { + std::cout<<"Histogramm size dosn't match DOS! Clearing histogramm!\n"; + histo.setRangeAndClear(dos.getMinX(),dos.getMaxX(),dos.getN()); + } + std::ofstream ofile(name); + if(ofile) + { + ofile.setf(std::ios::scientific,std::ios::floatfield); + ofile.precision(12); + ofile<<"{\n"; + ofile<<"\"xMin\" : " << dos.getMinX() << ",\n"; + ofile<<"\"xMax\" : " << dos.getMaxX() << ",\n"; + ofile<<"\"nX\" : " << dos.getN() << ",\n"; + if(kernelType!=None) + ofile<<"\"kernelWidth\" : " << dosKernel.getWidth() << ",\n"; + std::string kernelName; + getKernelName(kernelType,kernelName); + ofile<<"\"kernelType\" : \"" << kernelName << "\",\n"; + ofile<<"\"gamma\" : " << gamma << ",\n"; + ofile<<"\"accept\" : " << accept <<",\n"; + ofile<<"\"acceptSinceLastChange\" : " << acceptSinceLastChange <<",\n"; + ofile<<"\"reject\" : " << reject <<",\n"; + ofile<<"\"gammaFinal\" : " << gammaFinal << ",\n"; + + ofile<<"\"changeMode\" : "<< changeMode <<",\n"; + ofile<<"\"flatnessCriterion\" : "<< flatnessCriterion <<",\n"; + ofile<<"\"histogramMinimum\" : "<< hMinimum <<",\n"; + ofile<<"\"updatesPerBin\" : "<< updatesPerBin <<",\n"; + ofile<<"\"flipPerUpdate\" : " << flipPerUpdate << ",\n"; + ofile<<"\"updateCycle\" : " << updateCycle << ",\n"; + + ofile<<"\"globalUpdate.frequency\" : "<< globalUpdate.frequency << ",\n"; + ofile<<"\"globalUpdate.changes\" : "<< globalUpdate.changes << ",\n"; + ofile<<"\"globalUpdate.kappa\" : "<< globalUpdate.kappa << ",\n"; + ofile<<"\"globalUpdate.lambda\" : "<< globalUpdate.lambda << ",\n"; + ofile<<"\"globalUpdate.omega\" : "<< globalUpdate.omega << ",\n"; + + ofile<<"\"dos\" : ["<0) + { + ofile<<"\"moments\" : ["< +void WL1dEvecGenerator::writeDos(const char* name) +{ + std::ofstream ofile(name); + ofile.setf(std::ios::scientific,std::ios::floatfield); + ofile.precision(12); + // write dos; + // we are using JSON as our file format + if(ofile) + { + ofile<<"{\n"; + ofile<<"\"xMin\" : " << dos.getMinX() << "," <0) + { + ofile<<"\"moments\" : ["< +bool WL1dEvecGenerator::determineAcceptance(int instance, double energy) +{ + return determineAcceptance(instance, energy, 0.0); +} + + +template +bool WL1dEvecGenerator::determineAcceptance(int instance, double energy, double magnetization) +{ + + bool accept_step; + // +++++++++ Added by Odbadrakh and Don on Aug 11, 2010 + // +++ If a flip of spin results in energy in the same bin as previous accepted + // +++ state, it is accepted all the time. We change it by accepting if the + // +++ new state has lower density of states according to a linear spline of DOS + + double dos_differ; + double energy_differ; + double to_go_or_not; + + // +++++++++ end of modification. Follow the new variables to see the actual changes + // energy between xMin and xMax ? + int grid = dos.idx(energy); + + // dos.test(); + + stepsSinceLastHistogramUpdate++; // counter[0]++ + + // record initial energy for step out + if (lastAccepted[instance] == -2) + { + position[instance] = lastAcceptedEnergy[instance] = energy; + lastAccepted[instance] = -1; + } + + if (grid < 0 || grid > dos.getN()-1) + { + dos.extendTo(energy - dosKernel.getWidth()); histo.extendTo(energy - histoKernel.getWidth()); + dos.extendTo(energy + dosKernel.getWidth()); histo.extendTo(energy + histoKernel.getWidth()); + grid = dos.idx(energy); + // we need to adjust the grid point of the walker positions (ref0) for all walkers + for (long ii=0; ii= 0) ref0[ii] = dos.idx(position[ii]); + } + numRetentions[instance]++; + out[instance] = false; + ref1[instance] = grid; + if (ref0[instance] < 0) + { + accept_step = true; + ref0[instance] = ref1[instance]; + position[instance] = energy; + magnetizationAtPosition[instance] = magnetization; + } + else + { + if (abs(ref1[instance] - ref0[instance]) < 1 ) + { +// Actual change made by Odbadrakh, Aug 30, 2010 + dos_differ = dos[ref0[instance]-1] - dos[ref0[instance]]; + energy_differ = energy - lastAcceptedEnergy[instance]; + to_go_or_not = dos_differ * energy_differ; + if (to_go_or_not >= 0.0) // accepts all downhill changes + { + accept_step = true; + ref0[instance] = ref1[instance]; + position[instance] = energy; + magnetizationAtPosition[instance] = magnetization; + } + else // uphill moves + { + if(rnd(rng) < exp(to_go_or_not/dos.getDelta())) + { //std::cout<<" dos "< 2) + std::cout << "WangLandau 1d EvecGenerator step " + << modificationFactorChanges << ":" << numberOfUpdatesSinceLastBoost << ":" + << stepsSinceLastHistogramUpdate << " nX=" << dos.getN() + << " [" << dos.getMinX() << ", " << dos.getMaxX() << "] " + << (accept_step ? "accepted" : "rejected") + << " Energy = " << energy << ", Instance " << instance << std::endl; + + return accept_step; + +} + + +/* +template +bool WL1dEvecGenerator::updateHistogram(int instance, double *evecs, double energy, bool *accepted) +{ + return updateHistogram(instance, evecs, energy, 0.0, accepted); +} +*/ + +template +bool WL1dEvecGenerator::updateHistogram(int instance, double *evecs, bool accepted) +{ + +// Update histogram and DOS + if(stepsSinceLastHistogramUpdate >= flipPerUpdate) + { + stepsSinceLastHistogramUpdate = 0; // counter[0] + numberOfUpdatesSinceLastBoost++; // counter[1] + cycleCount++; + // modify the DoS + if(!out[instance]) + { + // addKernel(dos,dosKernel,energy); + if (!histogramUpdateMode) // standard Wang-Landau + { + addKernel(dos, dosKernel, position[instance]); + dos.addMomentsAtIdx(dos.idx(position[instance]), magnetizationAtPosition[instance]); + // if(accepted) addKernel(histo,histoKernel,position[instance]); + addKernel(histo, histoKernel, position[instance]); + // addKernel(dos, dosKernel, energy); + // addKernel(histo, histoKernel, energy); + } + else + { + // addKernel(dos, nullKernel, position[instance]); + if(accepted) addKernel(histo, histoKernel, position[instance]); + } + } + else + { + std::cerr << "ATTENTION: We should never reach this place in WL1dEvecGenerator!\n"; + exit(1); + } + } + +// 1/t algorithm, change gamma at every step +// Reference: Phys. Rev. E 75, 046701 (2007). + if(changeMode & (8+16+32)) + { + long n = accept + reject; + double dn; + + if ((changeMode & (8+16)) == 8) n = accept; + else if ((changeMode & (8+16)) == 16) n = reject; + else if ((changeMode & (8+16)) == 8+16) n = accept + reject; + + if (changeMode & 32) dn = double(n) / double(n_walkers); + else dn = double(n); + + gamma = 1.0 / dn; + if (gamma > 1.0) gamma = 1.0; + + initKernel(kernelType, dosKernel); + dosKernel.scale(gamma); + } + +// 1. write configuration +// 2. check histogram flatness +// 3. perform global update + if (cycleCount >= updateCycle) + { + cycleCount = 0; + // syncronizeGraphs(dos, histo); + if (dos.getN() != histo.getN()) + { + std::cout << "Histogramm size dosn't match DOS! Clearing histogramm!\n"; + histo.setRangeAndClear(dos.getMinX(), dos.getMaxX(), dos.getN()); + } + + writeState("WL1d.state"); + + if (!histogramUpdateMode) // Normal Wang-Landau + { + // calculate minimum nonzero histogram + // we look only at the histogram inside the energy interval that was actually sampled if we use kernel updates + double hMin, hMax, hMean; + + if (kernelType == None) + { + hMean = histo.getMeanY(); + histo.getMinMaxY(hMin,hMax); + } + else + { + hMean = histo.getMeanYInInterval(dos.getMinX() + dosKernel.getWidth(), + dos.getMaxX() - dosKernel.getWidth()); + histo.getMinMaxYInInterval(dos.getMinX() + dosKernel.getWidth(), + dos.getMaxX() - dosKernel.getWidth(), + hMin, hMax); + } + + // double currentFlatnessCriterion = double(hMin-hMax) / hMean; + double currentFlatnessCriterion = double(hMin) / hMean; + + std::cout << "# acceptence ratio = " << double(accept) / double(accept+reject) << "\n"; + std::cout << "# current flatness = " << currentFlatnessCriterion << (changeMode & 4 ? " *":"") << "\n"; + std::cout << "# current histogram minimum = " << hMin << (changeMode & 2 ? " *":"") << "\n"; + std::cout << "# average accepted steps/bin since last gamma change = " + << double(acceptSinceLastChange) / double(histo.getN()) + << (changeMode & 1 ? " *":"") << "\n"; + + if (changeMode != 0 && changeMode < 8) + { + // perform global update + if (globalUpdate.frequency > 0 && (globalUpdate.frequency*histo.getN()) < acceptSinceLastChange) + { + char fn[256]; + snprintf(fn,255,"Dos_Global_%02d_Changes_%03d.jsn",globalUpdate.changes,modificationFactorChanges); + writeDos(fn); + globalUpdate.changes++; + std::cout<<"# global update "<=histo.getN()*updatesPerBin || !(changeMode &1)) && + (hMin >= hMinimum || !(changeMode & 2)) && + (currentFlatnessCriterion>flatnessCriterion || !(changeMode & 4)) )) + { + std::cout << "# level " << modificationFactorChanges << " with gamma = " << gamma << " is finished.\n"; + modificationFactorChanges++; // counter[2] + + // write dos; + // we are using JSON as our file format + char fn[256]; + snprintf(fn,255,"Dos_Global_%02d_Changes_%03d.jsn",globalUpdate.changes,modificationFactorChanges); + writeDos(fn); + // writeDos(dos_out_name.data()); + + // clear the Histogram + histo.clear(); + acceptSinceLastChange = 0; + + // change gamma + dosKernel.scale(0.5); + gamma = 0.5 * gamma; + std::cout << "# level " << modificationFactorChanges << " with gamma = " << gamma << " begins.\n"; + if(statesFile != NULL) + { + // char fn[256]; + snprintf(fn,255,"%s_%02d",statesFile,modificationFactorChanges); + sw.newFile(fn); + sw.writeHeader(gamma,n_walkers,n_spins,evecs_pointer); + } + } + } + } + else // histogram update mode != 0 + { + if (acceptSinceLastChange >= histo.getN() * updatesPerBin) + { + acceptSinceLastChange = 0; + for (int ix=0; ix +void WL1dEvecGenerator::updateLog(int instance, double *evecs, int * occ, bool accepted, MoveChoice_t MoveChoice) { + + // use static variables to keep track of the last move type + static bool firstrun = true; + static std::vector lastAcceptedMove; + if( firstrun ) { + lastAcceptedMove.resize(n_walkers); + firstrun = false; + } + + // return unless state changed + if( !accepted ) return; + + // print output corresponding to previous state + if( lastAcceptedMove[instance] == SpinMove ) + sw.writeChange(instance, numRetentions[instance], lastAccepted[instance], &lastAcceptedEvec[3*instance], lastAcceptedEnergy[instance]); + else + sw.writeChangeOcc(instance, numRetentions[instance], + lastAcceptedSwap[instance].first, + lastAcceptedSwap[instance].second, + lastAcceptedOcc[instance].first, + lastAcceptedOcc[instance].second, + lastAcceptedEnergy[instance]); + + // remember the new configuration + lastAcceptedEnergy[instance] = position[instance]; + if( MoveChoice == SpinMove ) { + lastAccepted[instance] = lastChange[instance]; + //lastAcceptedEnergy[instance] = energy; + lastAcceptedEvec[ 3*instance] = evecs[ 3*lastChange[instance]]; + lastAcceptedEvec[1+3*instance] = evecs[1+3*lastChange[instance]]; + lastAcceptedEvec[2+3*instance] = evecs[2+3*lastChange[instance]]; + } + else { + lastAcceptedSwap[instance].first = lastSwapOcc[instance].first; + lastAcceptedSwap[instance].second = lastSwapOcc[instance].second; + lastAcceptedOcc[instance].first = occ[ lastSwapOcc[instance].first ]; + lastAcceptedOcc[instance].second = occ[ lastSwapOcc[instance].second ]; + } + + lastAcceptedMove[instance] = MoveChoice; +} + +template +void WL1dEvecGenerator::generatePotentialShift(int instance, double *potentialShifts, bool accepted) +{ + + if (accepted) + { + lastChangePotentialShift[instance] = int(rnd(rng)*n_spins); + oldPotentialShift[instance] = potentialShifts[lastChangePotentialShift[instance]]; + potentialShifts[lastChangePotentialShift[instance]] = randomPotentialShift(); + } else { + potentialShifts[lastChangePotentialShift[instance]] = oldPotentialShift[instance]; + lastChangePotentialShift[instance] = int(rnd(rng)*n_spins); + oldPotentialShift[instance] = potentialShifts[lastChangePotentialShift[instance]]; + potentialShifts[lastChangePotentialShift[instance]] = randomPotentialShift(); + } + +} + +template +void WL1dEvecGenerator::generateEvec(int instance, double *evecs, bool acceptedEvec) +{ + if (acceptedEvec) + { + lastChange[instance] = int(rnd(rng)*n_spins); + oldSpin[ 3*instance] = evecs[ 3*lastChange[instance]]; + oldSpin[1+3*instance] = evecs[1+3*lastChange[instance]]; + oldSpin[2+3*instance] = evecs[2+3*lastChange[instance]]; + random_evec(&evecs[3*lastChange[instance]]); + numRetentions[instance] = 0; + } + else + { + evecs[ 3*lastChange[instance]] = oldSpin[ 3*instance]; + evecs[1+3*lastChange[instance]] = oldSpin[1+3*instance]; + evecs[2+3*lastChange[instance]] = oldSpin[2+3*instance]; + lastChange[instance] = int(rnd(rng)*n_spins); + oldSpin[ 3*instance] = evecs[ 3*lastChange[instance]]; + oldSpin[1+3*instance] = evecs[1+3*lastChange[instance]]; + oldSpin[2+3*instance] = evecs[2+3*lastChange[instance]]; + random_evec(&evecs[3*lastChange[instance]]); + } + +} + +// additions for Wang-Landau for alloying +// swapping atoms preserves concentration + +template +MoveChoice_t WL1dEvecGenerator::selectMoveType(bool isSpinSim, bool isOccSim) { + + printf("inside correct 'selectMoveType'\n"); + + // choose between spin and occupancy equally + // is this a good choice?? + if( isSpinSim && isOccSim ) { + int c = int(rnd(rng)*2); + if( c == 0 ) + return SpinMove + else + return OccupancyMove; + } + + if( isSpinSim ) + return SpinMove; + if( isOccSim ) + return OccupancyMove; +} + +template +void WL1dEvecGenerator::setAlloyClasses(const AlloyMixingDesc& alloyDesc, int *siteclass) { + this->alloyDesc = alloyDesc; + + siteAlloyClass.resize(n_spins); + for(int i = 0; i < n_spins; i++) + siteAlloyClass[i] = siteclass[i]; + + // remember number of sites per alloy class + int nclasses = alloyDesc.size(); + numSites_per_AlloyClass.resize(nclasses); + int *nsites = numSites_per_AlloyClass.data(); + for(int i = 0; i < nclasses; i++) + nsites[i] = 0; + for(int i = 0; i < n_spins; i++) + nsites[ siteAlloyClass[i] ]++; +} + +template +void WL1dEvecGenerator::generateOccupancies(int instance, int *occ, bool acceptedOcc) { + + int temp, atom_i, atom_j; + + // if previous move not accepted, + // revert occupancies + if( !acceptedOcc ) { + atom_i = lastSwapOcc[instance].first; + atom_j = lastSwapOcc[instance].second; + + temp = occ[atom_i]; + occ[atom_i] = occ[atom_j]; + occ[atom_j] = temp; + } + else + numRetentions[instance] = 0; + + // pick an alloy class + int ac = int(rnd(rng)*alloyDesc.size()); + + // pick two distinct atoms within mixing class + // here we assume there are few alloy classes + do{ atom_i = int(rnd(rng)*n_spins) } + while( siteAlloyClass[atom_i] != ac ); + do{ atom_j = int(rnd(rng)*n_spins) } + while( siteAlloyClass[atom_j] != ac || occ[atom_j] == occ[atom_i] ); + + // swap atoms + temp = occ[atom_i]; + occ[atom_i] = occ[atom_j]; + occ[atom_j] = temp; + + // remember which atoms were swapped + lastSwapOcc[instance].first = atom_i; + lastSwapOcc[instance].second = atom_j; +} + +template +void WL1dEvecGenerator::generateUnsampledOcc(int inst, int *occ) { + initializeOccupancies(inst, occ); +} + +template +void WL1dEvecGenerator::initializeOccupancies(int inst, int *occ) { + + printf("inside correct 'initializeOccupancies'\n"); + + // determine number atoms of each component type given concentration + std::vector< std::vector > atomsLeft; + atomsLeft.resize(alloyDesc.size()); + for(int i = 0; i < atomsLeft.size(); i++) { + atomsLeft[i].resize(alloyDesc[i].size()); + for(int j = 0; j < atomsLeft[i].size(); j++) { + + // how many sites for this alloy class and component? + double nfrac = alloyDesc[i][j].conc * numSites_per_AlloyClass[i]; + double error = fmod(nfrac, 1.0); + + // ensure concentrations commensurate with number of sites + const double tol = 1.e-06; + if( tol < error && error < 1.0-tol ) { + printf("error: alloy concentrations are incommensurate with supercell\n"); + printf("alloy class = %d, component = %d\, concentration = %f\n", + i+1, j+1, alloyDesc[i][j].conc); + printf("desired sites = %f\n", nfrac); + exit(1); + } + + atomsLeft[i][j] = int(nfrac + 0.5); + } + } + + // distribute atoms across sites + for(int i = 0; i < n_spins; i++) { + + // pick an atom from the right class + int type, ac = siteAlloyClass[i]; + do { type = int( rnd(rng) * alloyDesc[ac].size() ) } + while( atomsLeft[ac][type] == 0 ) + + // assign to site + occ[i] = type; atomsLeft[ac][type]--; + } +} + +#endif + diff --git a/src/Main/WangLandau2d.h b/src/Main/WangLandau2d.h new file mode 100644 index 000000000..0aaea2bbd --- /dev/null +++ b/src/Main/WangLandau2d.h @@ -0,0 +1,817 @@ +// -*- mode: c++ -*- +#ifndef LSMS_WANG_LANDAU_2d_H +#define LSMS_WANG_LANDAU_2d_H + +#include +#include +#include +#include +#include +// we use BOOST for the random number generator +// #include +#include +#include "../../mjson/json.h" +#include "EvecGenerator.h" +#include "Graph2d.hpp" + +class StatesWriter2d +{ +public: + StatesWriter2d(const char *filename=NULL) + { + if(filename==NULL) writeFlag=false; + else {writeFlag=true; of.open(filename); + of.setf(std::ios::scientific,std::ios::floatfield); + of.precision(8);} + } + ~StatesWriter2d() {if(writeFlag) of.close();} + void writeHeader(double lnF, int numWalk, int numSpin, double **spins) + { + if(writeFlag) + { + of< +template +class WL2dEvecGenerator : public EvecGenerator +{ + public: + WL2dEvecGenerator(int num_spins, int num_instances, double **ev_p, + const char *init_file_name = NULL, + const char *out_file_name = NULL, + const char *states_filename = NULL); + + bool determineAcceptance(int instance, double energy); + bool determineAcceptance(int instance, double energy, double magnetization); + + bool updateHistogram(int instance, double *evecs, bool accepted); + bool updateHistogram(int instance, double *evecs, double energy, double magnetization, bool accepted); +/* + bool updateHistogram(int instance, double *evecs, double energy, double magnetization, bool *accepted); + bool updateHistogram(int instance, double *evecs, double energy, double magnetization) + { + bool h; + return updateHistogram(instance, evecs, energy, magnetization, &h); + } + bool updateHistogram(int instance, double *evecs) + { + std::cerr << "Need energy for WL2dEvecGenerator\n"; + exit(1); + } +*/ + + void generateEvec(int instance, double *evecs, bool accepted); + //void generateEvec(int instance, double *evecs, double energy); + + void initializeEvec(int instance, double *evecs); + + void generateUnsampledEvec(int instance, double *evecs, double energy) + { + initializeEvec(instance, evecs); + //return false; + } + + void startSampling(void) + { sw.writeHeader(gamma, n_walkers, n_spins, evecs_pointer); } + + void writeState(const char *name); + + private: + int n_walkers; + int n_spins; + double ** evecs_pointer; + int n_initialized_from_file; + + std::string dos_out_name; + + int stepsSinceLastHistogramUpdate; + int numberOfUpdatesSinceLastBoost; + int cycleCount; + int modificationFactorChanges; + + // Random number generator and distribution: + RNG rng; + // boost::uniform_real rnd; //, rnd11(-1.0,1.0),rnd0pi(0.0,2.0*M_PI); + std::uniform_real_distribution rnd; //, rnd11(-1.0,1.0),rnd0pi(0.0,2.0*M_PI); + + /* + // Histogramm and dos: + double xMin, xMax, interval; + int nX; + double *dos; // std::vector dos; + int *histo; // std::vector histo; + int hMinimum; + */ + + double hMinimum; + Graph2d dos, histo; + Kernel2d dosKernel, histoKernel; + KernelType kernelType; + + unsigned long accept, reject; + double flatnessCriterion; + + double gamma, gammaFinal; + int flipPerUpdate, updateCycle; + + // instance specific: + std::vector positionX, positionY; + std::vector out; + std::vector lastChange; + std::vector lastAccepted; + std::vector lastAcceptedEnergy; + std::vector lastAcceptedMagnetization; + std::vector lastAcceptedEvec; + std::vector oldSpin; // oldSpin[instance*3 + {x=0, y=1, z=2}] + + std::vector numRetentions; + + char *statesFile; + StatesWriter2d sw; + + + void inline random_evec_1(double ev[3]) + { + double x,y,z; + do { + x = rnd(rng); + y = rnd(rng); + } while(x*x+y*y>1); + z = rnd(rng); + double r = sqrt((1-z*z)/(x*x+y*y)); + x *= r; + y *= r; + if (rng() % 2 == 0) x = -x; + if (rng() % 2 == 0) y = -y; + if (rng() % 2 == 0) z = -z; + r=1.0/sqrt(x*x+y*y+z*z); + ev[0]=x*r; ev[1]=y*r; ev[2]=z*r; + } + + void inline random_evec(double ev[3]) + { + double x, y, z; + do { + x = rnd(rng); y = rnd(rng); + } while(x*x+y*y>1); + z = rnd(rng); + double r = sqrt((1-z*z)/(x*x+y*y)); + x *= r; y*= r; + if (rng() % 2 == 0) x = -x; + if (rng() % 2 == 0) y = -y; + if (rng() % 2 == 0) z = -z; + // Project out the parallel component; + r = x*ev[0] + y*ev[1] + z*ev[2]; + x -= r*ev[0]; y -= r*ev[1]; z -= r*ev[2]; + r = x*x + y*y + z*z; + double t = 1-0.3*rnd(rng); + ev[0] *= t; ev[1] *= t; ev[2] *= t; + r = sqrt((1-t*t)/r); + ev[0] += x*r; ev[1] += y*r; ev[2] += z*r; + r=1.0/sqrt(ev[0]*ev[0]+ev[1]*ev[1]+ev[2]*ev[2]); + ev[0]*=r; ev[1]*=r; ev[2]*=r; + + /* + ev[2]=1.0-2.0*rnd(rng); + // ev[2]=rnd11(rng); + double phi=2.0*M_PI*rnd(rng); + // double phi=rnd0pi(rng); + double cos_theta=sqrt(1-ev[2]*ev[2]); + ev[0]=cos_theta*cos(phi); + ev[1]=cos_theta*sin(phi); + */ + } + +}; + +template +WL2dEvecGenerator::WL2dEvecGenerator(int num_spins, int num_instances, double ** ev_p, + const char *init_file_name, const char *out_file_name, const char *states_filename) + : sw(states_filename) +{ + long nX=-1; + double intervalEnergy=0.1; + double intervalMagnetization=0.1; + double kernelWidthEnergy=1.0; + double kernelWidthMagnetization=1.0 +; + double xMin=-std::numeric_limits::max(); + double xMax=1.0; + n_spins=num_spins; + n_walkers = num_instances; + n_initialized_from_file = 0; + evecs_pointer = ev_p; + positionX.resize(n_walkers); + positionY.resize(n_walkers); + out.resize(n_walkers); + lastChange.resize(n_walkers); + lastAccepted.resize(n_walkers); + lastAcceptedEnergy.resize(n_walkers); + lastAcceptedMagnetization.resize(n_walkers); + lastAcceptedEvec.resize(3*n_walkers); + for(int i=0; itype != JSON_OBJECT) + { + std::ostringstream message; + std::cerr << "In WL2dEvecGenerator(" << init_file_name << ") parsing failed (bad format)\n"; + exit(1); + } + + for(json_t *it = json_root->child; it != NULL; it=it->next) + { + std::string label = it->text; + if(label=="xMin") xMin=atof(it->child->text); + else if(label=="xMax") xMax=atof(it->child->text); + else if(label=="intervalEnergy") intervalEnergy=atof(it->child->text); + else if(label=="intervalMagnetization") intervalMagnetization=atof(it->child->text); + else if(label=="kernelWidthEnergy") kernelWidthEnergy=atof(it->child->text); + else if(label=="kernelWidthMagnetization") kernelWidthMagnetization=atof(it->child->text); + else if(label=="kernelType") + { + std::string strValue(it->child->text); + kernelType=getKernelType(strValue); + } + else if(label=="gamma") gamma=atof(it->child->text); + else if(label=="gammaFinal") gammaFinal=atof(it->child->text); + else if(label=="nX") + { + nX=atoi(it->child->text); + dos.setXRangeAndClear(xMin,xMax,nX); + histo.setXRangeAndClear(xMin,xMax,nX); + } + else if(label=="flipPerUpdate") flipPerUpdate=atoi(it->child->text); + else if(label=="updateCycle") updateCycle=atoi(it->child->text); + else if(label=="cycleCount") cycleCount=atoi(it->child->text); + else if(label=="flatnessCriterion") flatnessCriterion=atof(it->child->text); + else if(label=="seed") rng.seed(atoi(it->child->text)); + else if(label=="accept") accept=atol(it->child->text); + else if(label=="reject") reject=atol(it->child->text); +//* + else if(label=="rngState") + { + std::string strValue(it->child->text); + std::stringstream strStream(strValue, std::stringstream::in); + strStream>>rng; + } +//*/ + else if(label=="dos") + { + json_t *a = it->child; + int ix=0; + int iy; + long Ny; + for(json_t *i=a->child; i!=NULL; i=i->next) + { + Ny=atoi(i->text); i=i->next; + double minY=atof(i->text); i=i->next; + dos.setYminAndClear(ix,minY,Ny); + iy=0; + for(json_t *j=i->child; j!=NULL; j=j->next) + dos[ix][iy++]=atof(j->text); + ix++; + } + if(ix!=dos.getNx()) {std::cout<<"ERROR #(dos) "<child; + int ix=0; + int iy; + long Ny; + for(json_t *i=a->child; i!=NULL; i=i->next) + { + Ny=atoi(i->text); i=i->next; + double minY=atof(i->text); i=i->next; + histo.setYminAndClear(ix,minY,Ny); + iy=0; + for(json_t *j=i->child; j!=NULL; j=j->next) + histo[ix][iy++]=atof(j->text); + ix++; + } + if(ix!=histo.getNx()) {std::cout<<"ERROR #(histo) "<child; + n_initialized_from_file=0; + for(json_t *i=a->child; i!=NULL; i=i->next) + { + if(n_initialized_from_filechild; j!=NULL; j=j->next) + { + evecs_pointer[n_initialized_from_file][k++]=atof(j->text); + } + n_initialized_from_file++; + if(k!=3*n_spins) {std::cout<<"ERROR #(evecs) "<child; + int n_initialized=0; + for(json_t *i=a->child; i!=NULL; i=i->next) + { + if(n_initializedchild; j!=NULL; j=j->next) + { + oldSpin[n_initialized*3+k++]=atof(j->text); + } + n_initialized++; + if(k!=3) {std::cout<<"ERROR #(oldSpin) "<child; + int j=0; + int n_initialized=0; + for(json_t *i=a->child; i!=NULL; i=i->next) + { + if(n_initializedtext); + n_initialized++; + } + } + else if(label=="position") + { + json_t *a = it->child; + int j=0; + int n_initialized=0; + for(json_t *i=a->child; i!=NULL; i=i->next) + { + if(n_initializedtext); + i=i->next; + positionY[j]=atof(i->text); + n_initialized++; + } + } + } + else if(label=="stepsSinceLastHistogramUpdate") stepsSinceLastHistogramUpdate=atoi(it->child->text); + else if(label=="numberOfUpdatesSinceLastBoost") numberOfUpdatesSinceLastBoost=atoi(it->child->text); + else if(label=="modificationFactorChanges") modificationFactorChanges=atoi(it->child->text); + else std::cout<<"WARNING: unknown label: "<0) + { + intervalEnergy=(xMax-xMin)/double(nX); + dos.setXRange(xMin,xMax); histo.setXRange(xMin,xMax); + } else { + dos.setDeltaAndClear(intervalEnergy,intervalMagnetization); + histo.setDeltaAndClear(intervalEnergy,intervalMagnetization); + } + + json_free_value(&json_root); + } + dosKernel.setWidthAndClear(intervalEnergy, intervalMagnetization, + kernelWidthEnergy, kernelWidthMagnetization); + histoKernel.setWidthAndClear(intervalEnergy, intervalMagnetization, + kernelWidthEnergy, kernelWidthMagnetization); + initKernel(kernelType,dosKernel); + dosKernel.scale(gamma/dosKernel(0.0,0.0)); + initKernel(kernelType,histoKernel); + histoKernel.scale(1.0/histoKernel(0.0,0.0)); +// histoKernel.scale(interval); + + if(out_file_name!=NULL && out_file_name[0]!=0) dos_out_name=out_file_name; + std::cout<<"Wang-Landau output will be written to: "< +void WL2dEvecGenerator::initializeEvec(int inst, double *evecs) +{ + if(inst>=n_initialized_from_file) + { + if(inst==0) + for(size_t j=0; j<3*n_spins; j+=3) + {evecs[j]=0.0; evecs[j+1]=0.0; evecs[j+2]=1.0;} + else if(inst==1) + for(size_t j=0; j<3*n_spins; j+=3) + {evecs[j+2]= (j/3)%2 ? 1.0 : -1.0 ; evecs[j+1]=0.0; evecs[j]=0.0;} + else + for(size_t j=0; j<3*n_spins; j+=3) + random_evec_1(&evecs[j]); + } + + out[inst]=false; +} + +template +void WL2dEvecGenerator::writeState(const char* name) +{ + std::ofstream ofile(name); + if(ofile) + { + ofile.setf(std::ios::scientific,std::ios::floatfield); + ofile.precision(8); + ofile<<"{\n"; + ofile<<"\"xMin\" : " << dos.getMinX() << ",\n"; + ofile<<"\"xMax\" : " << dos.getMaxX() << ",\n"; + ofile<<"\"nX\" : " << dos.getNx() << ",\n"; + ofile<<"\"intervalMagnetization\" : " << dos.getDeltaY() << ",\n"; + ofile<<"\"kernelWidthEnergy\" : " << dosKernel.getWidthX() << ",\n"; + ofile<<"\"kernelWidthMagnetization\" : " << dosKernel.getWidthY() << ",\n"; + std::string kernelName; + getKernelName(kernelType,kernelName); + ofile<<"\"kernelType\" : \"" << kernelName << "\",\n"; + ofile<<"\"gamma\" : " << gamma << ",\n"; + ofile<<"\"accept\" : " << accept <<",\n"; + ofile<<"\"reject\" : " << reject <<",\n"; + ofile<<"\"gammaFinal\" : " << gammaFinal << ",\n"; + ofile<<"\"flatnessCriterion\" : "<< flatnessCriterion <<",\n"; + ofile<<"\"flipPerUpdate\" : " << flipPerUpdate << ",\n"; + ofile<<"\"updateCycle\" : " << updateCycle << ",\n"; + ofile<<"\"dos\" : ["< +bool WL2dEvecGenerator::determineAcceptance(int instance, double energy) +{ + return determineAcceptance(instance, energy, 0.0); +} + + +template +bool WL2dEvecGenerator::determineAcceptance(int instance, double energy, double magnetization) +{ + + bool accept_step; + + // energy between xMin and xMax ? + long gridX = dos.idxX(energy); + // we have to postpone geting the y position until we have checked the validity of gridX + // int gridY = dos.idxY(gridX, magnetization); + + stepsSinceLastHistogramUpdate++; // counter[0]++ + + // record initial position for step out + if (lastAccepted[instance] == -2) + { + positionX[instance] = lastAcceptedEnergy[instance] = energy; + positionY[instance] = lastAcceptedMagnetization[instance] = magnetization; + lastAccepted[instance] = -1; + } + + // out of energy range + if (gridX < 0 || gridX > dos.getNx()-1) + { + dos.extendToX(energy - dosKernel.getWidthX()); histo.extendToX(energy - histoKernel.getWidthX()); + dos.extendToX(energy + dosKernel.getWidthX()); histo.extendToX(energy + histoKernel.getWidthX()); + gridX = dos.idxX(energy); // gridY=dos.idxY(gridX, magnetization); + } + long gridY = dos.idxY(gridX, magnetization); + // out of magnetization range + if (gridY < 0 || gridY > dos.getNy(gridX)-1) + { + dos.extendToY(gridX, magnetization - dosKernel.getWidthY()); + dos.extendToY(gridX, magnetization + dosKernel.getWidthY()); + histo.extendToY(gridX, magnetization - histoKernel.getWidthY()); + histo.extendToY(gridX, magnetization + histoKernel.getWidthY()); + gridY = dos.idxY(gridX, magnetization); + } + + numRetentions[instance]++; + out[instance] = false; + // ref1X[instance] = gridX; ref1Y[instance] = gridY; + long refX = dos.idxX(positionX[instance]); + long refY = dos.idxY(refX,positionY[instance]); + + if (lastAccepted[instance] < 0) + { + accept_step = true; + positionX[instance] = energy; + positionY[instance] = magnetization; + } + else + { + if (dos[gridX][gridY] <= dos[refX][refY]) + { + accept_step = true; + positionX[instance] = energy; + positionY[instance] = magnetization; + } + else + { + if(rnd(rng) < exp(dos[refX][refY] - dos[gridX][gridY])) + { + accept_step = true; + positionX[instance] = energy; + positionY[instance] = magnetization; + } + else + { + accept_step = false; + } + } + + } + + if (verbosity > 0) + std::cout << "WangLandau 2d EvecGenerator step " + << modificationFactorChanges << ":" << numberOfUpdatesSinceLastBoost << ":" + << stepsSinceLastHistogramUpdate << " nX=" << dos.getNx() + << " [" << dos.getMinX() << ", " << dos.getMaxX() << "] " + << (accept_step ? "accepted" : "rejected") + << " Energy = " << energy << ", Magnetization = " << magnetization + << ", Instance " << instance << std::endl; + + return accept_step; + +} + + +template +bool WL2dEvecGenerator::updateHistogram(int instance, double *evecs, bool accepted) +{ + std::cerr << "Need energy and magnetization for updateHistogram in WL2dEvecGenerator.\n"; + std::cerr << "Either wl_lsms or updateHistogram needs to be amended!\n"; + exit(1); +} + + +template +bool WL2dEvecGenerator::updateHistogram(int instance, double *evecs, double energy, double magnetization, bool accepted) +{ + +// Update histogram and DOS + if (stepsSinceLastHistogramUpdate >= flipPerUpdate) + { + stepsSinceLastHistogramUpdate = 0; // counter[0] + numberOfUpdatesSinceLastBoost++; // counter[1] + cycleCount++; + // modify the DoS + if(!out[instance]) + { + //addKernel(dos, dosKernel, positionX[instance], positionY[instance]); + //addKernel(histo, histoKernel, positionX[instance], positionY[instance]); + addKernel(dos, dosKernel, energy, magnetization); + addKernel(histo, histoKernel, energy, magnetization); + } + else + { + std::cerr << "ATTENTION: We should never reach this place in WL2dEvecGenerator!\n"; + exit(1); + } + } + +// 1. write configuration +// 2. check histogram flatness + if (cycleCount >= updateCycle) + { + cycleCount = 0; + // syncronizeGraphs(dos,histo); + writeState("WL2d.state"); + // calculate minimum nonzero histogram + /* + int hMin = histo[0]; + int hMax = histo[0]; + double hMean = 0.0; + for(int i=1; i=hMax) hMax=histo[i]; + if(histo[i]= hMinimum && currentFlatnessCriterion<=flatnessCriterion) + // we look only at the histogram inside the energy interval that was actually sampled + double hMin = histo.getMinValWithBorders(dosKernel.getWidthX(), dosKernel.getWidthY()); + std::cout << "# acceptence ratio = " << double(accept) / double(accept+reject) << "\n"; + std::cout << "# current histogram minimum = " << hMin << "\n"; + if (hMin >= hMinimum) + { + std::cout << "# level " << modificationFactorChanges << " with gamma = " << gamma << " is finished.\n"; + modificationFactorChanges++; // counter[2] + + // write dos; + // we are using JSON as our file format + writeState(dos_out_name.data()); + + // else std::cerr<<"# CAUTION: DoS output file could not be opened!\n"; + + // clear the Histogram + histo.clear(); + + // change gamma + dosKernel.scale(0.5); + gamma = 0.5 * gamma; + std::cout << "# level " << modificationFactorChanges << " with gamma = " << gamma << " begins.\n"; + if (statesFile != NULL) + { + char fn[256]; + snprintf(fn,255,"%s_%02d",statesFile,modificationFactorChanges); + sw.newFile(fn); + sw.writeHeader(gamma,n_walkers,n_spins,evecs_pointer); + } + } + } + + + if (accepted) + { + sw.writeChange(instance, numRetentions[instance], lastAccepted[instance], &lastAcceptedEvec[3*instance], lastAcceptedEnergy[instance]); + lastAccepted[instance] = lastChange[instance]; + lastAcceptedEnergy[instance] = energy; + lastAcceptedMagnetization[instance] = magnetization; + lastAcceptedEvec[ 3*instance] = evecs[ 3*lastChange[instance]]; + lastAcceptedEvec[1+3*instance] = evecs[1+3*lastChange[instance]]; + lastAcceptedEvec[2+3*instance] = evecs[2+3*lastChange[instance]]; + accept++; + } + else reject++; + + if (gamma +void WL2dEvecGenerator::generateEvec(int instance, double *evecs, bool accepted) +{ + if (accepted) + { + lastChange[instance] = int(rnd(rng)*n_spins); + oldSpin[ 3*instance] = evecs[ 3*lastChange[instance]]; + oldSpin[1+3*instance] = evecs[1+3*lastChange[instance]]; + oldSpin[2+3*instance] = evecs[2+3*lastChange[instance]]; + random_evec(&evecs[3*lastChange[instance]]); + numRetentions[instance] = 0; + } + else + { + evecs[ 3*lastChange[instance]] = oldSpin[ 3*instance]; + evecs[1+3*lastChange[instance]] = oldSpin[1+3*instance]; + evecs[2+3*lastChange[instance]] = oldSpin[2+3*instance]; + lastChange[instance] = int(rnd(rng)*n_spins); + oldSpin[ 3*instance] = evecs[ 3*lastChange[instance]]; + oldSpin[1+3*instance] = evecs[1+3*lastChange[instance]]; + oldSpin[2+3*instance] = evecs[2+3*lastChange[instance]]; + random_evec(&evecs[3*lastChange[instance]]); + } + +} + + +#endif + diff --git a/src/Main/WangLandau_REWL.h b/src/Main/WangLandau_REWL.h new file mode 100644 index 000000000..8dd41ff21 --- /dev/null +++ b/src/Main/WangLandau_REWL.h @@ -0,0 +1,1729 @@ +// -*- mode: c++ -*- +#ifndef LSMS_WANG_LANDAU_H +#define LSMS_WANG_LANDAU_H + +#include +#include +#include +#include +#include +#include +#include +// we use BOOST for the random number generator +// #include +#include +#include +#include "../../mjson/json.h" +#include "EvecGenerator.h" +#include "Graph1dMoments.hpp" +#include "../Potential/PotentialShifter.hpp" + +void inline performGlobalUpdate(Graph1dMoments &g, double kappa, double lambda, double omega) +{ + for(int i=0; iomega) g[i]+=kappa*std::exp(-lambda/(g[i]-omega)); +} + +class StatesWriter +{ +public: + StatesWriter(const char *filename=NULL) + { + if(filename==NULL) writeFlag=false; + else {writeFlag=true; of.open(filename); + of.setf(std::ios::scientific,std::ios::floatfield); + of.precision(17);} + } + ~StatesWriter() {if(writeFlag) of.close();} + void writeHeader(double lnF, int numWalk, int numSpin, double **spins) + { + if(writeFlag) + { + of< +// template +class WL1dEvecGenerator : public EvecGenerator +{ + public: + + WL1dEvecGenerator(int num_spins, int num_instances, int numWindows, + int numInstancesPerWindow, int groupID, double** ev_p, + PotentialShifter &potentialShifter, double *potentialShifts_p, + const char *init_file_name=NULL, const char *out_file_name=NULL, + const char *states_filename=NULL); + + double getDOSRatio(int instance, double energy); + + bool determineAcceptance(int instance, double energy); + bool determineAcceptance(int instance, double energy, double magnetization); + + bool updateHistogram(int instance, double *evecs, bool accepted); + //bool updateHistogram(int instance, double *evecs, double energy, double magnetization, bool accepted); + bool updateHistogram(int instance, double *evecs, double *potentialShifts, bool accepted); + + bool updateHistogramFromRE(int instance, double *evecs, double energy, double magnetization, int check); + bool updateHistogramFromRE(int instance, double *evecs, double energy, int check); + bool updateHistogramFromRE(int instance, double *evecs, double energy, double *potentialShifts, int check); + bool updateHistogramFromRE(int instance, double *evecs, double energy, double magnetization, double *potentialShifts, int check); + + void generateEvec(int instance, double *evecs, bool accepted); + //void generateEvec(int instance, double *evecs, double energy); + + void generatePotentialShift(int instance, double *potentialShifts, bool accepted); + + void initializeEvecAndPotentialShift(int instance, double *evecs, double *potentialShifts); + + void initializeEvec(int instance, double *evecs); + + void generateUnsampledEvec(int instance, double *evecs, double energy) + { + initializeEvec(instance, evecs); + //return false; + } + + void startSampling(void) + { sw.writeHeader(gamma, n_walkers, n_spins, evecs_pointer); } + + void writeState(const char *name); + void writeDos(const char *name); + + private: + int n_walkers; + int n_spins; + int walkerID; + double ** evecs_pointer; + double *potentialShifts_pointer; + int n_initialized_from_file; + + std::string dos_out_name; + + int stepsSinceLastHistogramUpdate; + int numberOfUpdatesSinceLastBoost; + int cycleCount; + int modificationFactorChanges; + + // Random number generator and distribution: + RNG rng; + // boost::uniform_real rnd; //, rnd11(-1.0,1.0),rnd0pi(0.0,2.0*M_PI); + std::uniform_real_distribution rnd; //, rnd11(-1.0,1.0),rnd0pi(0.0,2.0*M_PI); + std::uniform_real_distribution rnd01; //(0.0,1.0); + std::uniform_real_distribution rnd11; //(-1.0,1.0); + std::uniform_real_distribution rnd0pi; //(0.0,2.0*M_PI); + + /* + // Histogramm and dos: + double xMin, xMax, interval; + int nX; + double *dos; // std::vector dos; + int *histo; // std::vector histo; + int hMinimum; + */ + + double hMinimum; + Graph1dMoments dos, histo; + Kernel1d dosKernel, histoKernel, nullKernel; + KernelType kernelType; + + unsigned long accept, reject, acceptSinceLastChange; + double flatnessCriterion; + + double gamma, gammaFinal; + int flipPerUpdate, updateCycle; + + // instance specific: + std::vector ref0, ref1; + std::vector position, magnetizationAtPosition; + std::vector out; + std::vector lastChange; + std::vector lastChangePotentialShift; + std::vector lastAccepted; + std::vector lastAcceptedPotentialShiftIndex; + std::vector lastAcceptedEnergy; + std::vector lastAcceptedEvec; + std::vector oldSpin; // oldSpin[instance*3 + {x=0, y=1, z=2}] + std::vector oldPotentialShift; + std::vector lastAcceptedPotentialShift; + + std::vector numRetentions; + + char *statesFile; + StatesWriter sw; + + int changeMode; + bool histogramUpdateMode; + int updatesPerBin; + + struct {double kappa, lambda, omega; int frequency, changes;} globalUpdate; + +#ifdef ISING + void inline random_evec_1(double ev[3]) + { + ev[0]=ev[1]=0.0; + ev[2]=1.0; + if(rng()%2 == 0) ev[2]=-ev[2]; + } +#else + void inline random_evec_1(double ev[3]) + { +/* + double x,y,z; + do { + x = rnd(rng); + y = rnd(rng); + } while(x*x+y*y>1); + z = rnd(rng); + double r = sqrt((1-z*z)/(x*x+y*y)); + x *= r; + y *= r; + if (rng() % 2 == 0) x = -x; + if (rng() % 2 == 0) y = -y; + if (rng() % 2 == 0) z = -z; + r=1.0/sqrt(x*x+y*y+z*z); + ev[0]=x*r; ev[1]=y*r; ev[2]=z*r; +*/ + + double u = rnd11(rng); + double v = rnd11(rng); + + while (u*u+v*v >= 1.0) + { + u = rnd11(rng); + v = rnd11(rng); + } + + ev[0]=2.0*u*std::sqrt(1.0-u*u-v*v); + ev[1]=2.0*v*std::sqrt(1.0-u*u-v*v); + ev[2]=1.0-2.0*(u*u+v*v); + } +#endif + +#ifdef ISING + void inline random_evec(double ev[3]) + { + ev[2]=-ev[2]; + } +#else + void inline random_evec(double ev[3]) + { +/* + double x, y, z; + do { + x = rnd(rng); y = rnd(rng); + } while(x*x+y*y>1); + z = rnd(rng); + double r = sqrt((1-z*z)/(x*x+y*y)); + x *= r; y*= r; + if (rng() % 2 == 0) x = -x; + if (rng() % 2 == 0) y = -y; + if (rng() % 2 == 0) z = -z; + // Project out the parallel component; + r = x*ev[0] + y*ev[1] + z*ev[2]; + x -= r*ev[0]; y -= r*ev[1]; z -= r*ev[2]; + r = x*x + y*y + z*z; + double t = 1-0.3*rnd(rng); + ev[0] *= t; ev[1] *= t; ev[2] *= t; + r = sqrt((1-t*t)/r); + ev[0] += x*r; ev[1] += y*r; ev[2] += z*r; + r=1.0/sqrt(ev[0]*ev[0]+ev[1]*ev[1]+ev[2]*ev[2]); + ev[0]*=r; ev[1]*=r; ev[2]*=r; +*/ + + + double theta = rnd0pi(rng); + double u = rnd11(rng); + + ev[0]=std::sqrt(1.0-u*u) * std::cos(theta); + ev[1]=std::sqrt(1.0-u*u) * std::sin(theta); + ev[2]=u; + } +#endif + + double minVxShift {0.0}, maxVxShift {0.0}, rangeVxShift {0.0}; + + double inline randomPotentialShift() + { + return minVxShift + rangeVxShift * rnd01(rng); + } +}; + + +//Constructor +template +WL1dEvecGenerator::WL1dEvecGenerator(int num_spins, int num_instances, int numWindows, + int numInstancesPerWindow, int groupID, double** ev_p, + PotentialShifter &potentialShifter, double *potentialShifts_p, + const char *init_file_name, const char *out_file_name, + const char *states_filename) +: sw(states_filename), rnd01(0.0,1.0), rnd11(-1.0,1.0), rnd0pi(0.0,2.0*M_PI) +{ + + if (potentialShifter.vSpinShiftFlag) { + minVxShift = potentialShifter.minShift; + maxVxShift = potentialShifter.maxShift; + rangeVxShift = maxVxShift - minVxShift; + } + potentialShifts_pointer = potentialShifts_p; + + verbosity = 3; + + changeMode = 4; + + globalUpdate.frequency = 0; + globalUpdate.changes = 0; + globalUpdate.kappa = 1.0; + globalUpdate.lambda = 1.0; + globalUpdate.omega = 0.5; + + histogramUpdateMode = false; + updatesPerBin = 100; + + long nX = -1; + double interval = 0.01; + double kernelWidth = 0.1; + double xMin = -std::numeric_limits::max(); + double xMax = 1.0; + + double xMinForEachWindow[numWindows]; + double xMaxForEachWindow[numWindows]; + double overlap = 0.75; + double xMinFullRange = -std::numeric_limits::max(); + double xMaxFullRange = 1.0; + bool readLocalEnergyRange = false; + bool readEnergyRangeForRestart = false; + bool readPositions = false; + + // Ying Wai's Note (Feb 5, 14): + // * seed_seq is a sequence needed for generating random number seeds for different walkers + // * initialized with system time here, but will be overridden if seed is provided in input file + // * initialization from input file is recommended + std::seed_seq seq {time(nullptr)}; + + n_spins = num_spins; + n_walkers = num_instances; + walkerID = groupID; + n_initialized_from_file = 0; + evecs_pointer = ev_p; + + ref0.resize(n_walkers); + for (int i=0; itype != JSON_OBJECT) + { + std::ostringstream message; + std::cerr << "WL1dEvecGenerator Constructor :: (" << init_file_name << ") parsing failed (bad format)\n"; + exit(1); + } + + for(json_t *it = json_root->child; it != NULL; it=it->next) + { + std::string label = it->text; + + // Specifying energy ranges for a fresh start: + // Choice 1: specify xMinFullRange, xMaxFullRange and overlap, subwindows will be calculated automatically + // Choice 2: specify xMinForEachWindow and xMaxForEachWindow (arrays), this overrides Choice 1 + if(label=="xMinFullRange") xMinFullRange = atof(it->child->text); + else if(label=="xMaxFullRange") xMaxFullRange = atof(it->child->text); + else if(label=="overlap") overlap = atof(it->child->text); + else if(label=="xMinForEachWindow") + { + readLocalEnergyRange = true; + json_t *a = it->child; + int j = 0; + for (json_t *i = a->child; i != NULL; i = i->next) + xMinForEachWindow[j++] = atof(i->text); + if (j != numWindows) { + std::cout << "ERROR #(xMin) " << j << " != numWindows "<< numWindows << std::endl; + exit(1); + } + } + else if(label=="xMaxForEachWindow") + { + readLocalEnergyRange = true; + json_t *a = it->child; + int j = 0; + for (json_t *i = a->child; i != NULL; i = i->next) + xMaxForEachWindow[j++] = atof(i->text); + if (j != numWindows) { + std::cout << "ERROR #(xMin) " << j << " != numWindows "<< numWindows << std::endl; + exit(1); + } + } + // Specifying energy ranges for a restart: + // xMin and xMax specify the range for the subwindow + else if(label=="xMin") + { + readEnergyRangeForRestart = true; + xMin = atof(it->child->text); + } + else if(label=="xMax") + { + readEnergyRangeForRestart = true; + xMax = atof(it->child->text); + } + + else if(label=="interval") interval = atof(it->child->text); + else if(label=="kernelWidth") kernelWidth = atof(it->child->text); + else if(label=="kernelType") + { + std::string strValue(it->child->text); + kernelType = getKernelType(strValue); + } + else if(label=="gamma") gamma = atof(it->child->text); + else if(label=="gammaFinal") gammaFinal = atof(it->child->text); + else if(label=="nX") + { + nX = atoi(it->child->text); + if (readEnergyRangeForRestart) { + dos.setRangeAndClear(xMin,xMax,nX); + histo.setRangeAndClear(xMin,xMax,nX); + } + /* + if(dos!=NULL) free(dos); + if(histo!=NULL) free(histo); + dos=(double *)calloc(nX,sizeof(double)); + histo=(int *)calloc(nX,sizeof(int)); + */ + } + else if(label=="flipPerUpdate") flipPerUpdate=atoi(it->child->text); + else if(label=="updateCycle") updateCycle=atoi(it->child->text); + else if(label=="cycleCount") cycleCount=atoi(it->child->text); + else if(label=="changeMode") changeMode=atoi(it->child->text); + else if(label=="flatnessCriterion") flatnessCriterion=atof(it->child->text); + else if(label=="histogramMinimum") hMinimum=atof(it->child->text); + else if(label=="updatesPerBin") updatesPerBin=atoi(it->child->text); + else if(label=="globalUpdate.frequency") globalUpdate.frequency=atoi(it->child->text); + else if(label=="globalUpdate.changes") globalUpdate.changes=atoi(it->child->text); + else if(label=="globalUpdate.kappa") globalUpdate.kappa=atof(it->child->text); + else if(label=="globalUpdate.lambda") globalUpdate.lambda=atof(it->child->text); + else if(label=="globalUpdate.omega") globalUpdate.omega=atof(it->child->text); + else if(label=="seed") { + //rng.seed(atoi(it->child->text)); + seq = {atoi(it->child->text)}; + } + else if(label=="accept") accept=atol(it->child->text); + else if(label=="acceptSinceLastChange") acceptSinceLastChange=atol(it->child->text); + else if(label=="reject") reject=atol(it->child->text); +//* + else if(label=="rngState") + { + std::string strValue(it->child->text); + std::stringstream strStream(strValue, std::stringstream::in); + strStream>>rng; + } +//*/ + else if(label=="dos") + { + json_t *a = it->child; + int j = 0; + for(json_t *i=a->child; i!=NULL; i=i->next) + dos[j++] = atof(i->text); + if(j != dos.getN()) + { + std::cout << "ERROR #(dos) "<< j << " != nX " << dos.getN() << std::endl; + exit(1); + } + } + else if(label=="histo") + { + json_t *a = it->child; + int j = 0; + for(json_t *i=a->child; i!=NULL; i=i->next) + histo[j++] = atof(i->text); + if(j != histo.getN()) + { + std::cout << "ERROR #(histo) "<< j << " != nX " << histo.getN() << std::endl; + exit(1); + } + } + else if(label=="moments") + { + json_t *a = it->child->child; + int k = atoi(a->text); + dos.setNumberOfMoments(k); + a = a->next; + int jj = 0; + for(json_t *j=a->child; j!=NULL; j=j->next) + { + dos.setNumberOfSamplesAtIdx(jj, atoi(j->text)); + jj++; + } + json_t *i=a->next; + for(int kk=0; kkchild; j!=NULL; j=j->next) + { + dos.setMomentAtIdx(jj, kk, atof(j->text)); + jj++; + } + i = i->next; + } + } + else if(label=="moments.k") + { + dos.setNumberOfMoments(atoi(it->child->text)); + } + else if(label=="evecs") + { + json_t *a = it->child; + n_initialized_from_file = 0; + for(json_t *i=a->child; i!=NULL; i=i->next) + { + if(n_initialized_from_file < n_walkers) + { + int k = 0; + for(json_t *j=i->child; j!=NULL; j=j->next) + evecs_pointer[n_initialized_from_file][k++] = atof(j->text); + // initialize oldSpin and lastChange to point to site 0 + lastChange[n_initialized_from_file] = 0; + oldSpin[ 3*n_initialized_from_file] = evecs_pointer[n_initialized_from_file][0]; + oldSpin[1+3*n_initialized_from_file] = evecs_pointer[n_initialized_from_file][1]; + oldSpin[2+3*n_initialized_from_file] = evecs_pointer[n_initialized_from_file][2]; + n_initialized_from_file++; + if(k != 3*n_spins) { + std::cout << "ERROR #(evecs) " << k << " != 3*n_spins " << 3*n_spins << std::endl; + exit(1); + } + } + } + } + else if(label=="potentialShifts") + { + json_t *a = it->child; + int j = 0; + for(json_t *i=a->child; i!=NULL; i=i->next) + potentialShifts_pointer[j++] = atof(i->text); + if (j != n_spins) { + std::cout << "ERROR #(potentialShifts) " << j << " != n_spins " << n_spins << std::endl; + exit(1); + } + } + else if(label=="oldSpin") + { + json_t *a = it->child; + int n_initialized = 0; + for(json_t *i=a->child; i!=NULL; i=i->next) + { + if(n_initialized < n_walkers) + { + int k = 0; + for(json_t *j=i->child; j!=NULL; j=j->next) + oldSpin[n_initialized*3+k++] = atof(j->text); + n_initialized++; + if(k != 3) { + std::cout << "ERROR #(oldSpin) " << k << " != 3" << std::endl; + exit(1); + } + } + } + } + else if(label=="lastChange") + { + json_t *a = it->child; + int j = 0; + int n_initialized = 0; + for(json_t *i=a->child; i!=NULL; i=i->next) + { + if(n_initialized < n_walkers) + { + lastChange[j++] = atoi(i->text); + n_initialized++; + } + } + } + else if(label=="lastChangePotentialShift") + { + json_t *a = it->child; + int j = 0; + int n_initialized = 0; + for(json_t *i=a->child; i!=NULL; i=i->next) + { + if(n_initialized < n_walkers) + { + lastChangePotentialShift[j++] = atoi(i->text); + n_initialized++; + } + } + } + else if(label=="position") + { + json_t *a = it->child; + int j = 0; + int n_initialized = 0; + for(json_t *i=a->child; i!=NULL; i=i->next) + { + if(n_initialized < n_walkers) + { + position[j++] = atof(i->text); + n_initialized++; + } + } + readPositions = true; + } + else if(label=="magnetizationAtPosition") + { + json_t *a = it->child; + int j = 0; + int n_initialized = 0; + for(json_t *i=a->child; i!=NULL; i=i->next) + { + if(n_initialized < n_walkers) + { + magnetizationAtPosition[j++] = atof(i->text); + n_initialized++; + } + } +// readMagnetizationAtPositions=true; + } + else if(label=="oldPotentialShift") + { + json_t *a = it->child; + int j = 0; + int n_initialized = 0; + for(json_t *i=a->child; i!=NULL; i=i->next) + { + if(n_initialized < n_walkers) + { + oldPotentialShift[j++] = atof(i->text); + n_initialized++; + } + } + } + else if(label=="stepsSinceLastHistogramUpdate") stepsSinceLastHistogramUpdate=atoi(it->child->text); + else if(label=="numberOfUpdatesSinceLastBoost") numberOfUpdatesSinceLastBoost=atoi(it->child->text); + else if(label=="modificationFactorChanges") modificationFactorChanges=atoi(it->child->text); + else if(label=="clearHistogram") clearHistogram=atoi(it->child->text); + else if(label=="setFirstWalkerToFM") setFirstWalkerToFM=atoi(it->child->text); + else std::cout<<"WARNING: unknown label: "< rngSeed(numWindows * numInstancesPerWindow); + //std::vector rngSeed(n_walkers + 2); + seq.generate(rngSeed.begin(), rngSeed.end()); + rng.seed(rngSeed[walkerID]); + + // Determining energy ranges: + if (!readEnergyRangeForRestart) { + // Choice 1 follow-up: Each instance calculates its own xMin and xMax + if (!readLocalEnergyRange) { + double energySubwindowWidth = (xMaxFullRange - xMinFullRange) / (1.0 + double(numWindows - 1) * (1.0 - overlap)); + xMin = xMinFullRange + floor(groupID / numInstancesPerWindow) * (1.0 - overlap) * energySubwindowWidth; + xMax = xMin + energySubwindowWidth; + } + // Choice 2 follow-up: Each instance takes the corresponding read-in values + else { + xMin = xMinForEachWindow[groupID]; + xMax = xMaxForEachWindow[groupID]; + } + } + if (nX < 0) + nX = (xMax - xMin) / interval; + else if (nX > 0) + interval = (xMax - xMin) / double(nX); + + dos.setRangeAndClear(xMin, xMax, nX); + histo.setRangeAndClear(xMin, xMax, nX); + +/* + + // Check if energy ranges, dos and energy are read in correctly + printf("WL1dEvecGenerator Constructor :: setting energy range. + GroupID = %5d: [%10.3f, %10.3f]\n", groupID, xMin, xMax); + printf("WL1dEvecGenerator Constructor :: GroupID: %5d: + # of elements in DOS = %10d\n", groupID, dos.getN()); + printf("WL1dEvecGenerator Constructor :: GroupID: %5d: + initial energy (position[0]) = %20.8f\n", position[0]); +*/ + + // set xMax and xMin or interval depending on nX: + //if(nX > 0) + //{ + // interval = (xMax-xMin) / double(nX); + // dos.setRange(xMin,xMax); + // histo.setRange(xMin,xMax); + //} + //else + //{ + // dos.setDeltaAndClear(interval); + // histo.setDeltaAndClear(interval); + //} + + dosKernel.setWidthAndClear(interval,kernelWidth); + histoKernel.setWidthAndClear(interval,kernelWidth); + nullKernel.setWidthAndClear(interval,kernelWidth); + initKernel(kernelType,dosKernel); + dosKernel.scale(gamma/dosKernel(0.0)); + initKernel(kernelType,histoKernel); + histoKernel.scale(1.0/histoKernel(0.0)); + initKernel(kernelType,nullKernel); + nullKernel.scale(0.0); +// histoKernel.scale(interval); + + if(readPositions) + for(int i=0; i +void WL1dEvecGenerator::initializeEvecAndPotentialShift(int inst, double *evecs, double *potentialShifts) +{ + for (size_t j=0; j +void WL1dEvecGenerator::initializeEvec(int inst, double *evecs) +{ + bool firstFerromagnetic = true; + bool secondAntiferromagnetic = false; + //if (inst >= n_initialized_from_file) + //{ + if(firstFerromagnetic) + { + if(inst == 0) + for(size_t j=0; j<3*n_spins; j+=3) + { + evecs[j] = 0.0; + evecs[j+1] = 0.0; + evecs[j+2] = 1.0; + } + else if (inst == 1) + for(size_t j=0; j<3*n_spins; j+=3) + { + if(secondAntiferromagnetic) + evecs[j+2] = (j/3)%2 ? 1.0 : -1.0 ; + else + evecs[j+2] = 1.0; + evecs[j+1] = 0.0; + evecs[j] = 0.0; + } + else + for(size_t j=0; j<3*n_spins; j+=3) + random_evec_1(&evecs[j]); + } + else + for(size_t j=0; j<3*n_spins; j+=3) + random_evec_1(&evecs[j]); + //} + + lastChange[0] = 0; + oldSpin[0] = evecs[0]; + oldSpin[1] = evecs[1]; + oldSpin[2] = evecs[2]; + + out[inst] = true; +} + + +template +void WL1dEvecGenerator::writeState(const char* name) +{ + // if(!syncronizeGraphs(dos,histo)) + if(dos.getN()!=histo.getN()) + { + std::cout<<"Histogramm size dosn't match DOS! Clearing histogramm!\n"; + histo.setRangeAndClear(dos.getMinX(),dos.getMaxX(),dos.getN()); + } + std::ofstream ofile(name); + if(ofile) + { + ofile.setf(std::ios::scientific,std::ios::floatfield); + ofile.precision(8); + ofile<<"{\n"; + ofile<<"\"xMin\" : " << dos.getMinX() << ",\n"; + ofile<<"\"xMax\" : " << dos.getMaxX() << ",\n"; + ofile<<"\"nX\" : " << dos.getN() << ",\n"; + if(kernelType!=None) + ofile<<"\"kernelWidth\" : " << dosKernel.getWidth() << ",\n"; + std::string kernelName; + getKernelName(kernelType,kernelName); + ofile<<"\"kernelType\" : \"" << kernelName << "\",\n"; + ofile<<"\"gamma\" : " << gamma << ",\n"; + ofile<<"\"accept\" : " << accept <<",\n"; + ofile<<"\"acceptSinceLastChange\" : " << acceptSinceLastChange <<",\n"; + ofile<<"\"reject\" : " << reject <<",\n"; + ofile<<"\"gammaFinal\" : " << gammaFinal << ",\n"; + + ofile<<"\"changeMode\" : "<< changeMode <<",\n"; + ofile<<"\"flatnessCriterion\" : "<< flatnessCriterion <<",\n"; + ofile<<"\"histogramMinimum\" : "<< hMinimum <<",\n"; + ofile<<"\"updatesPerBin\" : "<< updatesPerBin <<",\n"; + ofile<<"\"flipPerUpdate\" : " << flipPerUpdate << ",\n"; + ofile<<"\"updateCycle\" : " << updateCycle << ",\n"; + + ofile<<"\"globalUpdate.frequency\" : "<< globalUpdate.frequency << ",\n"; + ofile<<"\"globalUpdate.changes\" : "<< globalUpdate.changes << ",\n"; + ofile<<"\"globalUpdate.kappa\" : "<< globalUpdate.kappa << ",\n"; + ofile<<"\"globalUpdate.lambda\" : "<< globalUpdate.lambda << ",\n"; + ofile<<"\"globalUpdate.omega\" : "<< globalUpdate.omega << ",\n"; + + ofile<<"\"dos\" : ["<0) + { + ofile<<"\"moments\" : ["< +void WL1dEvecGenerator::writeDos(const char* name) +{ + std::ofstream ofile(name); + // write dos; + // we are using JSON as our file format + if(ofile) + { + ofile<<"{\n"; + ofile<<"\"xMin\" : " << dos.getMinX() << "," <0) + { + ofile<<"\"moments\" : ["< +double WL1dEvecGenerator::getDOSRatio(int instance, double energy) +{ + double DOSRatio = 0.0; + +// YingWai: addition for debugging ref0 (Dec 4, 14) + if (ref0[instance] < -1 || ref0[instance] > dos.getN()-1) { + printf("ref0 error in getDOSRatio. ref0[%d] = %ld\n", instance, ref0[instance]); + //exit(1); + } + + // energy between xMin and xMax ? + ref1[instance] = dos.idx_withinRange(energy); + + // YingWai: should this be updated? (Feb 13, 14) + stepsSinceLastHistogramUpdate++; // counter[0]++ + + if (ref1[instance] < 0 || ref1[instance] > dos.getN()-1) { + out[instance] = true; + DOSRatio = 0.0; + } + else { + out[instance] = false; + if (ref0[instance] < 0) + DOSRatio = 1.0; + else + DOSRatio = exp(dos[ref0[instance]] - dos[ref1[instance]]); + } + + return DOSRatio; +} + + +template +bool WL1dEvecGenerator::determineAcceptance(int instance, double energy) +{ + return determineAcceptance(instance, energy, 0.0); +} + + +template +bool WL1dEvecGenerator::determineAcceptance(int instance, double energy, double magnetization) +{ + + bool accept_step (false); + // +++++++++ Added by Odbadrakh and Don on Aug 11, 2010 + // +++ If a flip of spin results in energy in the same bin as previous accepted + // +++ state, it is accepted all the time. We change it by accepting if the + // +++ new state has lower density of states according to a linear spline of DOS + + double dos_differ {0.0}; + double energy_differ {0.0}; + double to_go_or_not {0.0}; + + // +++++++++ end of modification. Follow the new variables to see the actual changes + + // YingWai: addition for debugging ref0 (Dec 4, 14) + if (ref0[instance] < -1 || ref0[instance] > dos.getN()-1) { + printf("ref0 error in determineAcceptance. ref0[%d] = %ld\n", instance, ref0[instance]); + //exit(1); + } + + // energy between xMin and xMax ? + ref1[instance] = dos.idx_withinRange(energy); + + // dos.test(); + + stepsSinceLastHistogramUpdate++; // counter[0]++ + + // record initial energy for step out + //if (lastAccepted[instance] == -2) + //{ + // position[instance] = lastAcceptedEnergy[instance] = energy; + // lastAccepted[instance] = -1; + //} + + numRetentions[instance]++; + //ref1[instance] = grid; + + if (ref1[instance] < 0 || ref1[instance] > dos.getN()-1) // energy out of range, reject the move + { + out[instance] = true; + accept_step = false; + // YingWai: what to set for numRetentions[instance] ? + // probably no changes are needed... (Jan 27, 14) + } + else { + + out[instance] = false; + if (ref0[instance] < 0) // no energy has been visited before + { + accept_step = true; + //ref0[instance] = ref1[instance]; + //position[instance] = energy; + //magnetizationAtPosition[instance] = magnetization; + } + else + { + if (abs(ref1[instance] - ref0[instance]) < 1) // same energy bin + { +// Actual change made by Odbadrakh, Aug 30, 2010 + dos_differ = dos[ref0[instance]-1] - dos[ref0[instance]]; + energy_differ = energy - lastAcceptedEnergy[instance]; + to_go_or_not = dos_differ * energy_differ; + if (to_go_or_not >= 0.0) // accepts all downhill changes + { + accept_step = true; + //ref0[instance] = ref1[instance]; + //position[instance] = energy; + //magnetizationAtPosition[instance] = magnetization; + } + else // uphill moves + { + if(rnd(rng) < exp(to_go_or_not/dos.getDelta())) + { //std::cout<<" dos "< 2) + std::cout.precision(10); + std::cout << "WangLandau 1d EvecGenerator step " + << modificationFactorChanges << " : " << numberOfUpdatesSinceLastBoost << " : " + << stepsSinceLastHistogramUpdate << " nX = " << dos.getN() + << " [" << dos.getMinX() << ", " << dos.getMaxX() << "] " + << (accept_step ? "accepted" : "rejected") + << " Energy = " << energy << ", Instance " << instance << std::endl; + + return accept_step; + +} + + +/* +template +bool WL1dEvecGenerator::updateHistogram(int instance, double *evecs, double energy, bool *accepted) +{ + return updateHistogram(instance, evecs, energy, 0.0, accepted); +} +*/ + +template +bool WL1dEvecGenerator::updateHistogram(int instance, double *evecs, double *potentialShifts, bool accepted) +{ + + if (accepted) { + lastAcceptedPotentialShiftIndex[instance] = lastChangePotentialShift[instance]; + lastAcceptedPotentialShift[instance] = potentialShifts[lastChangePotentialShift[instance]]; + } + + return updateHistogram(instance, evecs, accepted); +} + + +template +bool WL1dEvecGenerator::updateHistogram(int instance, double *evecs, bool accepted) +{ + + if (lastAccepted[instance] == -2 && out[instance]) // initial state outside energy range + return false; + +// Update histogram and DOS + if(stepsSinceLastHistogramUpdate >= flipPerUpdate) + { + stepsSinceLastHistogramUpdate = 0; // counter[0] + numberOfUpdatesSinceLastBoost++; // counter[1] + cycleCount++; + + // modify the DoS + //if(!out[instance]) + //{ + + // addKernel(dos,dosKernel,energy); + if (!histogramUpdateMode) // standard Wang-Landau + { + addKernel(dos, dosKernel, position[instance]); + dos.addMomentsAtIdx(dos.idx_withinRange(position[instance]), magnetizationAtPosition[instance]); + // if(accepted) addKernel(histo,histoKernel,position[instance]); + addKernel(histo, histoKernel, position[instance]); + // addKernel(dos, dosKernel, energy); + // addKernel(histo, histoKernel, energy); + } + else + { + // addKernel(dos, nullKernel, position[instance]); + if (accepted) addKernel(histo, histoKernel, position[instance]); + } + //} + //else + //{ + // std::cerr << "ATTENTION: We should never reach this place in WL1dEvecGenerator!\n"; + // exit(1); + //} + } + +// 1/t algorithm, change gamma at every step +// Reference: Phys. Rev. E 75, 046701 (2007). + if(changeMode & (8+16+32)) + { + long n = accept + reject; + double dn; + + if ((changeMode & (8+16)) == 8) n = accept; + else if ((changeMode & (8+16)) == 16) n = reject; + else if ((changeMode & (8+16)) == 8+16) n = accept + reject; + + if (changeMode & 32) dn = double(n) / double(n_walkers); + else dn = double(n); + + gamma = 1.0 / dn; + if (gamma > 1.0) gamma = 1.0; + + initKernel(kernelType, dosKernel); + dosKernel.scale(gamma); + } + +// 1. write configuration +// 2. check histogram flatness +// 3. perform global update + if (cycleCount >= updateCycle) + { + cycleCount = 0; + // syncronizeGraphs(dos, histo); + if (dos.getN() != histo.getN()) + { + std::cout << "Histogramm size dosn't match DOS! Clearing histogram!\n"; + histo.setRangeAndClear(dos.getMinX(), dos.getMaxX(), dos.getN()); + } + + char stateFile[51]; + sprintf(stateFile, "WL1d.state%05d", walkerID); + writeState(stateFile); + + if (!histogramUpdateMode) // Normal Wang-Landau + { + // calculate minimum nonzero histogram + // we look only at the histogram inside the energy interval that was actually sampled if we use kernel updates + double hMin, hMax, hMean; + + if (kernelType == None) + { + hMean = histo.getMeanY(); + histo.getMinMaxY(hMin,hMax); + } + else + { + hMean = histo.getMeanYInInterval(dos.getMinX() + dosKernel.getWidth(), + dos.getMaxX() - dosKernel.getWidth()); + histo.getMinMaxYInInterval(dos.getMinX() + dosKernel.getWidth(), + dos.getMaxX() - dosKernel.getWidth(), + hMin, hMax); + } + + // double currentFlatnessCriterion = double(hMin-hMax) / hMean; + double currentFlatnessCriterion = double(hMin) / hMean; + + std::cout << "# acceptance ratio = " << double(accept) / double(accept+reject) << "\n"; + std::cout << "# current flatness = " << currentFlatnessCriterion << (changeMode & 4 ? " *":"") << "\n"; + std::cout << "# current histogram minimum = " << hMin << (changeMode & 2 ? " *":"") << "\n"; + std::cout << "# average accepted steps/bin since last gamma change = " + << double(acceptSinceLastChange) / double(histo.getN()) + << (changeMode & 1 ? " *":"") << "\n"; + + if (changeMode != 0 && changeMode < 8) + { + // perform global update + if (globalUpdate.frequency > 0 && (globalUpdate.frequency*histo.getN()) < acceptSinceLastChange) + { + char fn[256]; + snprintf(fn,255,"Dos_Global_%02d_Changes_%03d.jsn",globalUpdate.changes,modificationFactorChanges); + writeDos(fn); + globalUpdate.changes++; + std::cout<<"# global update "<=histo.getN()*updatesPerBin || !(changeMode &1)) && + (hMin >= hMinimum || !(changeMode & 2)) && + (currentFlatnessCriterion>flatnessCriterion || !(changeMode & 4)) )) + { + std::cout << "# level " << modificationFactorChanges << " with gamma = " << gamma << " is finished.\n"; + modificationFactorChanges++; // counter[2] + + // write dos; + // we are using JSON as our file format + char fn[256]; + snprintf(fn,255,"Dos_Global_%02d_Changes_%03d.jsn",globalUpdate.changes,modificationFactorChanges); + writeDos(fn); + // writeDos(dos_out_name.data()); + + // clear the Histogram + histo.clear(); + acceptSinceLastChange = 0; + + // change gamma + dosKernel.scale(0.5); + gamma = 0.5 * gamma; + std::cout << "# level " << modificationFactorChanges << " with gamma = " << gamma << " begins.\n"; + if(statesFile != NULL) + { + // char fn[256]; + snprintf(fn,255,"%s_%02d",statesFile,modificationFactorChanges); + sw.newFile(fn); + sw.writeHeader(gamma,n_walkers,n_spins,evecs_pointer); + } + } + } + } + else // histogram update mode != 0 + { + if (acceptSinceLastChange >= histo.getN() * updatesPerBin) + { + acceptSinceLastChange = 0; + for (int ix=0; ix +void WL1dEvecGenerator::generatePotentialShift(int instance, double *potentialShifts, bool accepted) +{ + + if (accepted) { + lastChangePotentialShift[instance] = int(rnd(rng)*n_spins); + oldPotentialShift[instance] = potentialShifts[lastChangePotentialShift[instance]]; + potentialShifts[lastChangePotentialShift[instance]] = randomPotentialShift(); + } + else { + potentialShifts[lastChangePotentialShift[instance]] = oldPotentialShift[instance]; + lastChangePotentialShift[instance] = int(rnd(rng)*n_spins); + oldPotentialShift[instance] = potentialShifts[lastChangePotentialShift[instance]]; + potentialShifts[lastChangePotentialShift[instance]] = randomPotentialShift(); + } + +} + + +template +void WL1dEvecGenerator::generateEvec(int instance, double *evecs, bool accepted) +{ + if (accepted) + { + lastChange[instance] = int(rnd(rng)*n_spins); + oldSpin[ 3*instance] = evecs[ 3*lastChange[instance]]; + oldSpin[1+3*instance] = evecs[1+3*lastChange[instance]]; + oldSpin[2+3*instance] = evecs[2+3*lastChange[instance]]; + random_evec(&evecs[3*lastChange[instance]]); + numRetentions[instance] = 0; + } + else + { + evecs[ 3*lastChange[instance]] = oldSpin[ 3*instance]; + evecs[1+3*lastChange[instance]] = oldSpin[1+3*instance]; + evecs[2+3*lastChange[instance]] = oldSpin[2+3*instance]; + lastChange[instance] = int(rnd(rng)*n_spins); + oldSpin[ 3*instance] = evecs[ 3*lastChange[instance]]; + oldSpin[1+3*instance] = evecs[1+3*lastChange[instance]]; + oldSpin[2+3*instance] = evecs[2+3*lastChange[instance]]; + random_evec(&evecs[3*lastChange[instance]]); + } + +} + + +// The following four are for the replica exchange to call to update histogram +template +bool WL1dEvecGenerator::updateHistogramFromRE(int instance, double *evecs, double energy, double *potentialShifts, int check) +{ + return updateHistogramFromRE(instance, evecs, energy, 0.0, potentialShifts, check); +} + + +template +bool WL1dEvecGenerator::updateHistogramFromRE(int instance, double *evecs, double energy, double magnetization, double *potentialShifts, int check) +{ + + lastAcceptedPotentialShiftIndex[instance] = lastChangePotentialShift[instance]; + lastAcceptedPotentialShift[instance] = potentialShifts[lastChangePotentialShift[instance]]; + return updateHistogramFromRE(instance, evecs, energy, magnetization, check); +} + + +template +bool WL1dEvecGenerator::updateHistogramFromRE(int instance, double *evecs, double energy, int check) +{ + return updateHistogramFromRE(instance, evecs, energy, 0.0, check); +} + + +template +bool WL1dEvecGenerator::updateHistogramFromRE(int instance, double *evecs, double energy, double magnetization, int check) +{ + +// if (lastAccepted[instance] == -2 && out[instance]) // initial state outside energy range +// return false; + +// Update histogram and DOS + //if(stepsSinceLastHistogramUpdate >= flipPerUpdate) + //{ + // YingWai: are these correct to be kept here? (Feb 15, 14) + stepsSinceLastHistogramUpdate = 0; // counter[0] + numberOfUpdatesSinceLastBoost++; // counter[1] + cycleCount++; + + ref0[instance] = ref1[instance]; + position[instance] = energy; + magnetizationAtPosition[instance] = magnetization; + + //YingWai's addition for ref0, ref1 debugging (Dec 5, 14) + printf("ref1 check in updateHistogramFromRE. ref1[%d] = %ld, ref0 = %ld\n", instance, ref1[instance], ref0[instance]); + + // modify the DoS + // addKernel(dos,dosKernel,energy); + if (!histogramUpdateMode) // standard Wang-Landau + { + addKernel(dos, dosKernel, position[instance]); + dos.addMomentsAtIdx(dos.idx_withinRange(position[instance]), magnetizationAtPosition[instance]); + // if(accepted) addKernel(histo,histoKernel,position[instance]); + addKernel(histo, histoKernel, position[instance]); + // addKernel(dos, dosKernel, energy); + // addKernel(histo, histoKernel, energy); + } + else + { + // addKernel(dos, nullKernel, position[instance]); + addKernel(histo, histoKernel, position[instance]); + } + //} + +// 1/t algorithm, change gamma at every step +// Reference: Phys. Rev. E 75, 046701 (2007). + if(changeMode & (8+16+32)) + { + long n = accept + reject; + double dn; + + if (changeMode & (8+16) == 8) n = accept; + else if (changeMode & (8+16) == 16) n = reject; + else if (changeMode & (8+16) == 8+16) n = accept + reject; + + if (changeMode & 32) dn = double(n) / double(n_walkers); + else dn = double(n); + + gamma = 1.0 / dn; + if (gamma > 1.0) gamma = 1.0; + + initKernel(kernelType, dosKernel); + dosKernel.scale(gamma); + } + +// 1. write configuration +// 2. check histogram flatness +// 3. perform global update + if (cycleCount >= updateCycle) + { + cycleCount = 0; + // syncronizeGraphs(dos, histo); + if (dos.getN() != histo.getN()) + { + std::cout << "Histogramm size dosn't match DOS! Clearing histogram!\n"; + histo.setRangeAndClear(dos.getMinX(), dos.getMaxX(), dos.getN()); + } + + char stateFile[51]; + sprintf(stateFile, "WL1d.state%05d", walkerID); + writeState(stateFile); + + if (!histogramUpdateMode) // Normal Wang-Landau + { + // calculate minimum nonzero histogram + // we look only at the histogram inside the energy interval that was actually sampled if we use kernel updates + double hMin, hMax, hMean; + + if (kernelType == None) + { + hMean = histo.getMeanY(); + histo.getMinMaxY(hMin,hMax); + } + else + { + hMean = histo.getMeanYInInterval(dos.getMinX() + dosKernel.getWidth(), + dos.getMaxX() - dosKernel.getWidth()); + histo.getMinMaxYInInterval(dos.getMinX() + dosKernel.getWidth(), + dos.getMaxX() - dosKernel.getWidth(), + hMin, hMax); + } + + // double currentFlatnessCriterion = double(hMin-hMax) / hMean; + double currentFlatnessCriterion = double(hMin) / hMean; + + std::cout << "# acceptance ratio = " << double(accept) / double(accept+reject) << "\n"; + std::cout << "# current flatness = " << currentFlatnessCriterion << (changeMode & 4 ? " *":"") << "\n"; + std::cout << "# current histogram minimum = " << hMin << (changeMode & 2 ? " *":"") << "\n"; + std::cout << "# average accepted steps/bin since last gamma change = " + << double(acceptSinceLastChange) / double(histo.getN()) + << (changeMode & 1 ? " *":"") << "\n"; + + if (changeMode != 0 && changeMode < 8) + { + // perform global update + if (globalUpdate.frequency > 0 && (globalUpdate.frequency*histo.getN()) < acceptSinceLastChange) + { + char fn[256]; + snprintf(fn,255,"Dos_Global_%02d_Changes_%03d.jsn",globalUpdate.changes,modificationFactorChanges); + writeDos(fn); + globalUpdate.changes++; + std::cout<<"# global update "<=histo.getN()*updatesPerBin || !(changeMode &1)) && + (hMin >= hMinimum || !(changeMode & 2)) && + (currentFlatnessCriterion>flatnessCriterion || !(changeMode & 4)) )) + { + std::cout << "# level " << modificationFactorChanges << " with gamma = " << gamma << " is finished.\n"; + modificationFactorChanges++; // counter[2] + + // write dos; + // we are using JSON as our file format + char fn[256]; + snprintf(fn,255,"Dos_Global_%02d_Changes_%03d.jsn",globalUpdate.changes,modificationFactorChanges); + writeDos(fn); + // writeDos(dos_out_name.data()); + + // clear the Histogram + histo.clear(); + acceptSinceLastChange = 0; + + // change gamma + dosKernel.scale(0.5); + gamma = 0.5 * gamma; + std::cout << "# level " << modificationFactorChanges << " with gamma = " << gamma << " begins.\n"; + if(statesFile != NULL) + { + // char fn[256]; + snprintf(fn,255,"%s_%02d",statesFile,modificationFactorChanges); + sw.newFile(fn); + sw.writeHeader(gamma,n_walkers,n_spins,evecs_pointer); + } + } + } + } + else // histogram update mode != 0 + { + if (acceptSinceLastChange >= histo.getN() * updatesPerBin) + { + acceptSinceLastChange = 0; + for (int ix=0; ix +#include + +#include + +#include "Real.hpp" +#include "SystemParameters.hpp" +#include "Communication/LSMSCommunication.hpp" + +class LIZInfoType{ +public: + int idx; + Real p1,p2,p3; + Real dSqr; +}; + +// for buildLIZ see LSMS_1 neighbors_c.f +int buildLIZ(CrystalParameters &crystal, int idx,std::vector &LIZ) +{ + const Real rtol=1.0e-8; + const int n_max=5; + int nrsclu=0; + Real r1,r2,r3,p1,p2,p3,atdistsqr,shift_1,shift_2,shift_3; + Real rcirclu=crystal.types[crystal.type[idx]].rLIZ; + Real rcirclusqr=rcirclu*rcirclu; + int n0,n1,n2,n3; + int i[(2*n_max+1)*(2*n_max+1)*(2*n_max+1)]; + int j[(2*n_max+1)*(2*n_max+1)*(2*n_max+1)]; + int k[(2*n_max+1)*(2*n_max+1)*(2*n_max+1)]; + + r1=std::sqrt(crystal.bravais(0,0)*crystal.bravais(0,0) + + crystal.bravais(1,0)*crystal.bravais(1,0) + + crystal.bravais(2,0)*crystal.bravais(2,0)); + r2=std::sqrt(crystal.bravais(0,1)*crystal.bravais(0,1) + + crystal.bravais(1,1)*crystal.bravais(1,1) + + crystal.bravais(2,1)*crystal.bravais(2,1)); + r3=std::sqrt(crystal.bravais(0,2)*crystal.bravais(0,2) + + crystal.bravais(1,2)*crystal.bravais(1,2) + + crystal.bravais(2,2)*crystal.bravais(2,2)); + +/* + n1=std::max(n_max,int(rcirclu/r1+0.9)); + n2=std::max(n_max,int(rcirclu/r2+0.9)); + n3=std::max(n_max,int(rcirclu/r3+0.9)); +*/ + n1=std::max(1,int(rcirclu/r1+0.9)); + n2=std::max(1,int(rcirclu/r2+0.9)); + n3=std::max(1,int(rcirclu/r3+0.9)); + + if((2*n1+1)*(2*n2+1)*(2*n3+1) > (2*n_max+1)*(2*n_max+1)*(2*n_max+1)) + { + fprintf(stderr,"FATAL ERROR: buildLIZ: n0 exeeds upper limit for site %d!",idx); + exit(1); + } + n0=0; + for(int i0=-n1; i0<=n1; i0++) + for(int j0=-n2; j0<=n2; j0++) + for(int k0=-n3; k0<=n3; k0++) + { + i[n0]=i0; j[n0]=j0; k[n0]=k0; n0++; + } + if(std::abs(rcirclu) &list, int len, CrystalParameters &crystal, int &ret) +{ + for(int i=ret; i toList, fromList; + std::vector tempLIZ; + tempLIZ.resize(4096); + int tempNumLIZ; + int ret; + int fromListN,toListN; + int toCounts[4096]; + int fromCounts[4096]; + int num_store=local.num_local; + +// the first num_local entries in tmatStore contain the local tmats + local.tmatStoreGlobalIdx.resize(4096); + + for(int i=0; icrystal.types[type_id].rsteps[n1]) lkeep--; + local.atom[local_id].LIZlmax[j]=lkeep; + local.atom[local_id].nrmat+=(lkeep+1)*(lkeep+1); +// add to commTmatFrom + if(crystal.types[crystal.type[tempLIZ[j].idx]].node!=comm.rank) // need this from remote node + { + fromList[fromListN].node=crystal.types[crystal.type[tempLIZ[j].idx]].node; + fromList[fromListN].localIdx=crystal.types[crystal.type[tempLIZ[j].idx]].local_id; + fromList[fromListN].globalIdx=crystal.type[tempLIZ[j].idx]; + fromListN++; + } + } + } else { // non local atom +// before building the LIZ we should first check if it is actually needed +// i.e find min distance between atom and local atoms and compare with max liz radius + tempNumLIZ=buildLIZ(crystal,i,tempLIZ); + + ret=0; + while(nodeIsInList(comm.rank,tempLIZ,tempNumLIZ,crystal,ret)) // the remote node needs the tmat from our node + { + toList[toListN].node=crystal.types[crystal.type[i]].node; // the node that needs a tmat from us + toList[toListN].localIdx=crystal.types[crystal.type[tempLIZ[ret].idx]].local_id; // our local index == tmatStore entry + toList[toListN].globalIdx=crystal.type[i]; // the type that needs this tmat + toListN++; ret++; + } + } + } +// sort toList and fromList + std::sort(fromList.begin(),fromList.begin()+fromListN,globalLess_NodeIndexInfo); + std::sort(toList.begin(),toList.begin()+toListN,localLess_NodeIndexInfo); + std::stable_sort(toList.begin(),toList.begin()+toListN,nodeLess_NodeIndexInfo); +// remove duplicates (only works on sorted lists!): +// for FROM remove all duplicate atom types + std::vector::iterator it=std::unique(fromList.begin(),fromList.begin()+fromListN,globalEq_NodeIndexInfo); + fromList.resize(it-fromList.begin()); +// for TO remove all identical atoms to the same node + it=std::unique(toList.begin(),toList.begin()+toListN,localAndNodeEq_NodeIndexInfo); + toList.resize(it-toList.begin()); + +// fromList.resize(fromListN); +// toList.resize(toListN); + std::sort(fromList.begin(),fromList.end(),nodeLess_NodeIndexInfo); + std::sort(toList.begin(),toList.end(),nodeLess_NodeIndexInfo); + +// count the nodes in toList and fromList + if(lsms.global.iprint>0) printf("toList.size()=%zu\n",toList.size()); + int numToNodes=0; + if(toList.size()>0) + { + numToNodes=1; + int h=toList[0].node; + for(int i=0; i0) printf("toList[%d].node=%d .localIdx=%d .globalIdx=%d\n",i,toList[i].node, + toList[i].localIdx,toList[i].globalIdx); + // if(h!=toList[i].node) {h=toList[i].node; numToNodes++;} else toCounts[numToNodes-1]++; + if(h!=toList[i].node) {h=toList[i].node; numToNodes++; toCounts[numToNodes-1]=1;} else toCounts[numToNodes-1]++; + } + } + + if(lsms.global.iprint>0) printf("fromList.size()=%zu\n",fromList.size()); + int numFromNodes=0; + if(fromList.size()>0) + { + numFromNodes=1; + int h=fromList[0].node; + for(int i=0; i0) printf("fromList[%d].node=%d .localIdx=%d .globalIdx=%d\n",i,fromList[i].node, + fromList[i].localIdx,fromList[i].globalIdx); + if(h!=fromList[i].node) {h=fromList[i].node; numFromNodes++; fromCounts[numFromNodes-1]=1;} else fromCounts[numFromNodes-1]++; + } + } + + comm.numTmatTo=numToNodes; + comm.tmatTo.resize(numToNodes); + comm.numTmatFrom=numFromNodes; + comm.tmatFrom.resize(numFromNodes); + + int k=0; + for(int i=0; i0) printf("numFromNodes=%d\n",numFromNodes); + for(int i=0; i0) printf("fromCounts[%d]=%d\n",i,fromCounts[i]); + comm.tmatFrom[i].tmatStoreIdx.resize(fromCounts[i]); + comm.tmatFrom[i].globalIdx.resize(fromCounts[i]); + comm.tmatFrom[i].communicationRequest.resize(fromCounts[i]); + comm.tmatFrom[i].remoteNode=fromList[k].node; + comm.tmatFrom[i].numTmats=fromCounts[i]; + for(int j=0; j chem.pot............. +c xtws is obtained from a global sum.............................. +c ================================================================ +*/ + + Real xtws = 0.0, tnen = 0.0; + for (int i=0; i= 0) + printf("atom[0].dosint[0] = %lf atom[0].dosint[1] = %lf\n",local.atom[0].dosint[0], local.atom[0].dosint[1]); + printf("calculateChempot: xtws = %lf zvaltss = %lf tnen = %lf old chempot = %lf\n", + xtws, lsms.zvaltss, tnen, lsms.chempot); +// lsms.chempot = lsms.energyContour.etop + (lsms.zvaltss-xtws)/tnen; + lsms.chempot = etop + (lsms.zvaltss - xtws) / tnen; + if (lsms.global.iprint >= 0) + printf(" new chempot = %lf\n", lsms.chempot); + Real chempot = lsms.chempot; +// Real etop = lsms.energyContour.etop; +/* +c ================================================================ +c compute integrated densities of states, torques and stoner +c parameters up to fermi energy................................... +c ================================================================ +*/ + eigensum = 0.0; + for (int i=0; i doslast_orb(is)*(chempot-etop) + dosckint_orb(is)=dosckint_orb(is)+ + > doscklast_orb(is)*(chempot-etop) + do ir=1,jws + densint_orb(ir,is)=densint_orb(ir,is)+ + > denslast_orb(ir,is)*(chempot-etop) + end do + end do + end if +*/ + if(lsms.relativity==full) + { + // calculate orbital moments + printf("Orbital moments not yet implemented in calulateChempPot.cpp!\n"); + } + +} diff --git a/src/Main/calculateChemPot.hpp b/src/Main/calculateChemPot.hpp new file mode 100644 index 000000000..e899ffa15 --- /dev/null +++ b/src/Main/calculateChemPot.hpp @@ -0,0 +1,10 @@ +#ifndef LSMS_CALCULATECEMPOT_HPP +#define LSMS_CALCULATECEMPOT_HPP + +#include "SystemParameters.hpp" +#include "Communication/LSMSCommunication.hpp" + +void calculateChemPot(LSMSCommunication &comm,LSMSSystemParameters &lsms, LocalTypeInfo &local, + Real &eigensum); + +#endif diff --git a/src/Main/calculateDensities.cpp b/src/Main/calculateDensities.cpp new file mode 100644 index 000000000..e0f907a74 --- /dev/null +++ b/src/Main/calculateDensities.cpp @@ -0,0 +1,244 @@ +#include "Real.hpp" +#include "Complex.hpp" +#include +#include "Matrix.hpp" +#include "Array3d.hpp" + +#include "calculateDensities.hpp" + +extern "C" +{ + void interp_(Real *r, Real *f, int *nr, Real *rs, Real *ps, Real *dps, int *deriv); + void newint_(int *nr, Real *r, Real *f, Real *g, int *ip0); +} + +void calculateDensities(LSMSSystemParameters &lsms, int iatom, int is, int ie, int nume, Complex energy, Complex dele1, + Matrix &dos,Matrix &dosck,Array3d &green, + Array3d &dipole, + AtomData &atom) +{ +// from LSMS_19. zplanint after gettau + Complex ede=energy*dele1; + + for(int isp=0; isp &rhonew, Real &qvalmt, Real *qrms) +{ + Real rtmp[atom.jws+2]; + Real rhotmp[atom.jws+2]; + Real w1[atom.jws+3], w2[atom.jws+3]; + Real r_sph=atom.rInscribed; + int ir_sph; + +// need these constants to call fortran routines: + int four=4; + int five=5; + int seven=7; + Real dzero=0.0; + + if(lsms.mtasa>0) r_sph=atom.rws; + +// construct rho: rho(ir,0) = up density; rho(ir,1) = down density + + rtmp[0]=0.0; + for(int i=0; i atom.jws) ir_sph = atom.jws; + + if(lsms.n_spin_cant==2) + { +// calculate valence charge density and store it in w1 + w1[0]=w2[0]=0.0; + for(int ir=0; ir0.0 && w2[ir+1] > w1[ir+1]) w2[ir+1] = w1[ir+1]; + if(w2[ir+1]<0.0 && w2[ir+1] < -w1[ir+1]) w2[ir+1] = -w1[ir+1]; + } + } + + for(int ir=0; ir=0) printf("Total valence charge = %25.20f\n",qvalmt); + + // add velence electron density and core and semi-core densities + if (lsms.n_spin_pola != 2) + { + for(int ir=0; ir1 and 1->0 and if n_spin_pola==1: 0->0 ! + for(int ir=0; ir +#include "Matrix.hpp" +#include "Array3d.hpp" +#include "SystemParameters.hpp" +#include "checkConsistency.hpp" + +void calculateChargeDensity(LSMSSystemParameters &lsms, AtomData &atom, Real edote, + Matrix &rhonew, Real &qvalmt, Real *qrms); +void calculateAllLocalChargeDensities(LSMSSystemParameters &lsms, LocalTypeInfo &local); + +void calculateDensities(LSMSSystemParameters &lsms, int iatom, int is, int ie, int nume, Complex energy, Complex dele1, + Matrix &dos,Matrix &dosck,Array3d &green, + Array3d &dipole, + AtomData &atom); + +#endif diff --git a/src/Main/calculateEvec.cpp b/src/Main/calculateEvec.cpp new file mode 100644 index 000000000..1f036f0a7 --- /dev/null +++ b/src/Main/calculateEvec.cpp @@ -0,0 +1,125 @@ +#include "calculateEvec.hpp" + +void calculateEvec(LSMSSystemParameters &lsms, LocalTypeInfo &local) +{ + Real tolerance = 1.0e-8; + + for (int i=0; i=3 + { + // Calculate moment + Real moment[3]; + moment[0] = local.atom[i].dosckint[1] + local.atom[i].evec[0] * local.atom[i].mcpsc_mt; + moment[1] = local.atom[i].dosckint[2] + local.atom[i].evec[1] * local.atom[i].mcpsc_mt; + moment[2] = local.atom[i].dosckint[3] + local.atom[i].evec[2] * local.atom[i].mcpsc_mt; + + // getevec.f from LSMS 1.9 + // Determine evecNew according to moment + Real evecMagnitude = std::sqrt(moment[0] * moment[0] + \ + moment[1] * moment[1] + \ + moment[2] * moment[2]); + if (lsms.global.iprint > 0) + { + printf(" GETEVEC: moment = (%12.8f, %12.8f, %12.8f) magnitude = %12.8f\n", moment[0], moment[1], moment[2], evecMagnitude); + } + + if (evecMagnitude > tolerance) + { + /* + ================================================================= + evecNew is the new moment orientation: + evecNew[0] = the x-component of e-vector + evecNew[1] = the y-component of e-vector + evecNew[2] = the z-component of e-vector + it is determined by the total moment inside the muffin-tin sphere + ================================================================= + */ + local.atom[i].evecNew[0] = moment[0] / evecMagnitude; + local.atom[i].evecNew[1] = moment[1] / evecMagnitude; + local.atom[i].evecNew[2] = moment[2] / evecMagnitude; + } + else + { + local.atom[i].evecNew[0] = local.atom[i].evec[0]; + local.atom[i].evecNew[1] = local.atom[i].evec[1]; + local.atom[i].evecNew[2] = local.atom[i].evec[2]; + } + } + else // nspin = 1 or 2 + { + local.atom[i].evecNew[0] = local.atom[i].evec[0]; + local.atom[i].evecNew[1] = local.atom[i].evec[1]; + local.atom[i].evecNew[2] = local.atom[i].evec[2]; + } + + /* + ================================================================ + Store direction & mag. mom. corresponding to output chg. den.... + ================================================================ + Not yet implemented. (need to see where evec_out and mm_out are used for) + */ + + local.atom[i].evecOut[0] = local.atom[i].evecNew[0]; + local.atom[i].evecOut[1] = local.atom[i].evecNew[1]; + local.atom[i].evecOut[2] = local.atom[i].evecNew[2]; + + } + + return; + +} + + +void mixEvec(LSMSSystemParameters &lsms, LocalTypeInfo &local, Real alpev) +{ + + /* + ================================================================ + perform simple mixing of evec_new and evec_old, and redefine + evec_new........................................................ + ================================================================ + !! This should be placed in mixing.hpp !! + */ + + Real tolerance = 1.0e-8; + + for (int i=0; i 0) + { + printf("Moment direction before mixing = (%12.8f, %12.8f, %12.8f)\n", local.atom[i].evecNew[0], local.atom[i].evecNew[1], local.atom[i].evecNew[2]); + } + + local.atom[i].evecNew[0] = alpev * local.atom[i].evecNew[0] + (1.0-alpev) * local.atom[i].evec[0]; + local.atom[i].evecNew[1] = alpev * local.atom[i].evecNew[1] + (1.0-alpev) * local.atom[i].evec[1]; + local.atom[i].evecNew[2] = alpev * local.atom[i].evecNew[2] + (1.0-alpev) * local.atom[i].evec[2]; + + Real evecMagnitude = std::sqrt(local.atom[i].evecNew[0] * local.atom[i].evecNew[0] + \ + local.atom[i].evecNew[1] * local.atom[i].evecNew[1] + \ + local.atom[i].evecNew[2] * local.atom[i].evecNew[2]); + + if (evecMagnitude < tolerance) + { + printf("GETEVEC: magnitude of evec too small. (= %35.25f)\n", evecMagnitude); + } + + local.atom[i].evecNew[0] = local.atom[i].evecNew[0] / evecMagnitude; + local.atom[i].evecNew[1] = local.atom[i].evecNew[1] / evecMagnitude; + local.atom[i].evecNew[2] = local.atom[i].evecNew[2] / evecMagnitude; + + if (lsms.global.iprint > 0) + { + printf("Moment direction after mixing = (%12.8f, %12.8f, %12.8f)\n", local.atom[i].evecNew[0], local.atom[i].evecNew[1], local.atom[i].evecNew[2]); + } + + } + + return; + +} + + + diff --git a/src/Main/calculateEvec.hpp b/src/Main/calculateEvec.hpp new file mode 100644 index 000000000..47f4d2bd8 --- /dev/null +++ b/src/Main/calculateEvec.hpp @@ -0,0 +1,12 @@ +#ifndef CALCULATEEVEC_HPP +#define CALCULATEEVEC_HPP + +#include +#include "Main/SystemParameters.hpp" +//#include "SingleSite/AtomData.hpp" + +void calculateEvec(LSMSSystemParameters &lsms, LocalTypeInfo &local); + +void mixEvec(LSMSSystemParameters &lsms, LocalTypeInfo &local, Real alpev); + +#endif diff --git a/src/Main/calculateTrPxTau.cpp b/src/Main/calculateTrPxTau.cpp new file mode 100644 index 000000000..038944545 --- /dev/null +++ b/src/Main/calculateTrPxTau.cpp @@ -0,0 +1,11 @@ +#include "Complex.hpp" + +void calculateTrPxTau(Complex *tau00, int kkrsz, Complex *tr_pxtau) +{ + Array3 p_vec(kkrsz,kkrsz,3); + Array3 tau_vec(kkrsz,kkrsz,3); + + tr_pxtau[0]=tr_pxtau[1]=tr_pxtau[2]=Complex(0.0); + + +} diff --git a/src/Main/checkConsistency.cpp b/src/Main/checkConsistency.cpp new file mode 100644 index 000000000..cdb74243b --- /dev/null +++ b/src/Main/checkConsistency.cpp @@ -0,0 +1,23 @@ +#include "checkConsistency.hpp" + +// Check that average integrated valence DOS = average valence +// (from mufind_c.f) +void checkIntegratedValenceDOS() +{ + +} + + + +// Check that the charges are internally consistent +// (from lsms_main.f in LSMS 1.9, after getchg()) +// ad-hoc now, needs amendment +void checkCharge(LSMSSystemParameters &lsms, AtomData &atom) +{ + if(lsms.global.iprint>=-1) + { + Real q = atom.xvalmt[0] + (lsms.n_spin_pola - 1) * atom.xvalmt[1]; + if (std::abs(q - atom.qvalmt) > 0.000005) + printf("checkCharge :: Trouble! MT q = %16.8f qvalmt = %16.8f\n",q, atom.qvalmt); + } +} diff --git a/src/Main/checkConsistency.hpp b/src/Main/checkConsistency.hpp new file mode 100644 index 000000000..28a06eea0 --- /dev/null +++ b/src/Main/checkConsistency.hpp @@ -0,0 +1,10 @@ +#ifndef CHECK_CONSISTENCY_H +#define CHECK_CONSISTENCY_H + +#include "SystemParameters.hpp" +#include "SingleSite/AtomData.hpp" + +void checkCharge(LSMSSystemParameters &lsms, AtomData &atom); + + +#endif diff --git a/src/Main/energyContourIntegration.cpp b/src/Main/energyContourIntegration.cpp new file mode 100644 index 000000000..d3586c408 --- /dev/null +++ b/src/Main/energyContourIntegration.cpp @@ -0,0 +1,455 @@ +// this replaces zplanint from LSMS_1.9 + +#include +#include +#include +#include "Complex.hpp" + +#include "Communication/LSMSCommunication.hpp" +#include "SingleSite/SingleSiteScattering.hpp" +#include "MultipleScattering/MultipleScattering.hpp" +#include "EnergyContourIntegration.hpp" +#include "Misc/Coeficients.hpp" +#include "calculateDensities.hpp" +// #include +#ifdef USE_NVTX +#include +#endif + +#if defined(ACCELERATOR_CULA) || defined(ACCELERATOR_LIBSCI) || defined(ACCELERATOR_CUDA_C) +void copyTmatStoreToDevice(LocalTypeInfo &local); +#ifdef BUILDKKRMATRIX_GPU +#include "Accelerator/buildKKRMatrix_gpu.hpp" +extern std::vector deviceConstants; +// extern std::vector deviceConstants; +// extern void * deviceStorage; +#endif +//#if defined(ACCELERATOR_CULA) || defined(ACCELERATOR_LIBSCI) || defined(ACCELERATOR_CUDA_C) +#include "Accelerator/DeviceStorage.hpp" +extern DeviceStorage *deviceStorage; +#endif +void solveSingleScatterers(LSMSSystemParameters &lsms, LocalTypeInfo &local, + std::vector > &vr, Complex energy, + std::vector &solution,int iie); +void solveSingleScatterers(LSMSSystemParameters &lsms, LocalTypeInfo &local, + std::vector > &vr, Complex energy, + std::vector &solution,int iie); + +void rotateToGlobal(AtomData &atom, Matrix &dos, Matrix &dosck, + Matrix &dos_orb, Matrix &dosck_rob, + Array3d &green, Array3d &dens_orb, int i); + +extern "C" +{ +// cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc +void constraint_(int *jmt,Real *rmt,int *n_spin_pola, + Real*vr,Real *r_mesh,Real *pi4, + Real *evec,Real *evec_r,Real *b_con,Real *b_basis, + int *i_vdif,Real *h_app_para_mag,Real *h_app_perp_mag, + int *iprpts, + int *iprint,char *istop,int len_sitop); +// cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc +void u_sigma_u_(Complex *ubr,Complex *ubrd, + Complex *wx,Complex *wy,Complex *wz); +// cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc +void green_function_(int *mtasa,int *n_spin_pola,int *n_spin_cant, + int *lmax,int *kkrsz,Complex *wx, Complex *wy, Complex *wz, + Real *rins,Real *r_sph,Real *r_mesh,int *jmt,int *jws, + Complex *pnrel,Complex *tau00_l,Complex *matom,Complex *zlr,Complex *jlr, + int *nprpts, int* nplmax, + int *ngaussr, + Real *cgnt, int *lmax_cg, + Complex *dos,Complex *dosck,Complex *green,Complex *dipole, + int *ncrit,Real *grwylm,Real *gwwylm,Complex *wylm, + int *iprint,char *istop,int len_sitop); + +void green_function_rel_(int *mtasa, + int *lmax, int *kkrsz, + Complex *wx, Complex *wy, Complex *wz, + Real *rins, Real *r_mesh, int *jmt, int *jws, Real *h, + Complex *pnrel, Complex *tau00_l, Complex *matom, + Complex *gz, Complex *fz, + Complex *gj, Complex *fj, + int *nuz, int *indz, + int *nprpts, + int *ngaussr, Real *cgnt, int *lmax_cg, + Complex *dos, Complex *dosck, Complex *green, Complex *dipole, + Complex *dos_orb, Complex *dosck_orb, Complex *dens_orb, + int *iprint, char *istop, int len_istop); +// ================================================================ +void clebsch_(void); +void gfill_(int *iplmax); +void gafill_(int *iplmax); +void matrot1_(Real * rGlobal, Real *evec_r, int *lmax, + Complex *dmat, Complex *dmatp); +} + +void buildEnergyContour(int igrid,Real ebot,Real etop,Real eibot, Real eitop, + std::vector &egrd, std::vector &dele1, int npts, int &nume, + int iprint, char *istop) +{ + Real pi=2.0*std::asin(1.0); + int ipepts; + if(iprint>=0) printf("Energy Contour Parameters: grid=%d npts=%d, ebot=%lf etop=%lf eibot=%lf eitop=%lf\n", + igrid,npts,ebot,etop,eibot,eitop); + switch (igrid) + { + case 0: // single energy point + egrd.resize(1); dele1.resize(1); + egrd[0]=std::complex(ebot,eibot); dele1[0]=0.0; nume=1; + break; + case 2: // Gaussian Contour + egrd.resize(npts+2); dele1.resize(npts+2); + ipepts=egrd.size(); + congauss_(&ebot,&etop,&eibot,&egrd[0],&dele1[0],&npts,&nume,&pi,&ipepts,&iprint,istop,32); + break; + default: + fprintf(stderr,"Unknown energy grid type %d in 'buildEnergyContour'\n",igrid); + exit(1); + } +} + +void energyContourIntegration(LSMSCommunication &comm,LSMSSystemParameters &lsms, LocalTypeInfo &local) +{ + double timeEnergyContourIntegration_1=MPI_Wtime(); + + if(lsms.global.iprint>=0) printf("** Energy Contour Integration **\n"); + +// calculate coefficients and matrices for spherical relativistic calculations + if(lsms.relativity==full) + { + clebsch_(); + gfill_(&lsms.maxlmax); + gafill_(&lsms.maxlmax); + } + +// energy grid info + std::vector egrd,dele1; + int nume; +// constrained potentials: + std::vector > vr_con; + Matrix evec_r; + + int i_vdif=0; + + Real pi4=4.0*2.0*std::asin(1.0); + + vr_con.resize(local.num_local); + evec_r.resize(3,local.num_local); +#pragma omp parallel for default(none) shared(local,lsms,vr_con,evec_r) + for(int i=0; i1.0e-5) printf("|atom[%d].evec|=%lf\n",i,evec_norm); +// + spin_trafo_(&local.atom[i].evec[0],&local.atom[i].ubr[0],&local.atom[i].ubrd[0]); +// ================================================================ +// set up Constraint .............................................. +// copy vr into vr_con which contains the B-field constraint....... +// calls to gettau_c etc. require vr_con........................... +// ================================================================ + vr_con[i]=local.atom[i].vr; + if(lsms.n_spin_cant==2) + { + Real h_app_para_mag=0.0; + Real h_app_perp_mag=0.0; + // int iprpts=local.atom[i].r_mesh.size(); + int iprpts=vr_con[i].l_dim(); +// here I leave out the i_vdif<0 case! + constraint_(&local.atom[i].jmt,&local.atom[i].rmt,&lsms.n_spin_pola, + &(vr_con[i])(0,0),&local.atom[i].r_mesh[0],&pi4, + &local.atom[i].evec[0],&evec_r(0,i),local.atom[i].b_con, + local.atom[i].b_basis,&i_vdif,&h_app_para_mag,&h_app_perp_mag, + &iprpts, + &lsms.global.iprint,lsms.global.istop,32); + if(lsms.relativity != full) + { + spin_trafo_(&evec_r(0,i),&local.atom[i].ubr[0],&local.atom[i].ubrd[0]); + } else { //. relativistic + int matrot_size=2*(local.atom[i].lmax+1)*(local.atom[i].lmax+1); + local.atom[i].dmat.resize(matrot_size,matrot_size); + local.atom[i].dmatp.resize(matrot_size,matrot_size); + Real rGlobal[3]; + rGlobal[0]=0.0; + rGlobal[1]=0.0; + rGlobal[2]=1.0; + + matrot1_(rGlobal,&evec_r(0,i),&local.atom[i].lmax, + &local.atom[i].dmat(0,0),&local.atom[i].dmatp(0,0)); + } + } else { // n_spin_cant != 2 i.e. non spin polarized +// call zcopy(4,u,1,ubr,1) +// call zcopy(4,ud,1,ubrd,1) + } + u_sigma_u_(&local.atom[i].ubr[0],&local.atom[i].ubrd[0], + &local.atom[i].wx[0],&local.atom[i].wy[0],&local.atom[i].wz[0]); + } + // Real e_top; + // e_top=lsms.energyContour.etop; + // if(lsms.energyContour.etop==0.0) etop=lsms.chempot; + buildEnergyContour(lsms.energyContour.grid, lsms.energyContour.ebot, lsms.chempot, + lsms.energyContour.eibot, lsms.energyContour.eitop, egrd, dele1, + lsms.energyContour.npts, nume, lsms.global.iprint, lsms.global.istop); + + for(int i=0; i >solutionNonRel; + std::vector >solutionRel; + + if(lsms.relativity!=full) + { + solutionNonRel.resize(lsms.energyContour.groupSize()); + for(int ie=0; ie tau00_l(maxkkrsz_ns*maxkkrsz_ns,local.num_local); // This would be cleaner as a std::vector> + Matrix dos(4,local.num_local); + // dos=0.0; + Matrix dosck(4,local.num_local); + // dosck=0.0; + Array3d dipole(6,4,local.num_local); + // dipole=0.0; + Array3d green(local.atom[0].jws,4,local.num_local); // would be better as std::vector> to avoid problems with different jws. + // or declare as lsms.global.iprpts instead! + // green=0.0; + // orbital dos and densities + Matrix dos_orb(3,local.num_local); + Matrix dosck_orb(3,local.num_local); + Array3d dens_orb(local.atom[0].jws,3,local.num_local); + +// setup Device constant on GPU + int maxNumLIZ=0; +#ifdef BUILDKKRMATRIX_GPU + #pragma omp parallel for default(none) shared(lsms,local,deviceConstants) + for(int i=0; imaxNumLIZ) maxNumLIZ=local.atom[i].numLIZ; + } +#if defined(ACCELERATOR_CULA) || defined(ACCELERATOR_LIBSCI) || defined(ACCELERATOR_CUDA_C) + // initDStore(deviceStorage,maxkkrsz,lsms.n_spin_cant,maxNumLIZ,lsms.global.GPUThreads); + deviceStorage->allocate(maxkkrsz,lsms.n_spin_cant,maxNumLIZ,lsms.global.GPUThreads); +#endif + +// inside an omp for to ensure first touch +#pragma omp parallel for default(none) shared(local,dos,dosck,dipole,green) + for(int i=0; i eGroupIdx(numEGroups+1); + for(int ig=0; ig=1) printf("calculate single scatterer solutions.\n"); + + if(lsms.relativity!=full) + { +#pragma omp parallel for default(none) shared(local,lsms,eGroupIdx,ig,egrd,solutionNonRel,vr_con) + for(int ie=eGroupIdx[ig]; ie=2) printf("About to send t matrices\n"); + sendTmats(comm,local); + if(lsms.global.iprint>=2) printf("About to finalize t matrices communication\n"); + finalizeTmatCommunication(comm); + if(lsms.global.iprint>=2) printf("Recieved all t matricies\n"); + timeSingleScatterers=MPI_Wtime()-timeSingleScatterers; +#ifdef USE_NVTX + nvtxRangePop(); +#endif + if(lsms.global.iprint>=0) printf("timeSingleScatteres = %lf sec\n",timeSingleScatterers); + +#ifdef BUILDKKRMATRIX_GPU + copyTmatStoreToDevice(local); +#endif + + for(int ie=eGroupIdx[ig]; ie=1) printf("Energy #%d (%lf,%lf)\n",ie,real(energy),imag(energy)); + + double timeCATM=MPI_Wtime(); + calculateAllTauMatrices(comm, lsms, local, vr_con, energy, iie, tau00_l); + + timeCalculateAllTauMatrices+=MPI_Wtime()-timeCATM; + // if(!lsms.global.checkIstop("buildKKRMatrix")) + { +#ifdef USE_NVTX + nvtxEventAttributes_t eventAttrib = {0}; + eventAttrib.version = NVTX_VERSION; + eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE; + eventAttrib.colorType = NVTX_COLOR_ARGB; + eventAttrib.color = 0x00ffff00; + eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII; + eventAttrib.message.ascii = "calculateDensities"; + nvtxRangePushEx(&eventAttrib); +#endif + double timeCalcDensities=MPI_Wtime(); + if(lsms.relativity != full) + { +// openMP here +#pragma omp parallel for default(none) \ + shared(local,lsms,dos,dosck,green,dipole,solutionNonRel,gauntCoeficients,dele1,tau00_l) \ + firstprivate(ie,iie,pnrel,energy,nume) + for(int i=0; i0) r_sph=local.atom[i].rws; + Real rins=local.atom[i].rmt; +// int nprpts=solutionNonRel[iie][i].zlr.l_dim1(); + int nprpts=local.atom[i].r_mesh.size(); +// int nplmax=solutionNonRel[iie][i].zlr.l_dim2()-1; + int nplmax=local.atom[i].lmax; + green_function_(&lsms.mtasa,&lsms.n_spin_pola,&lsms.n_spin_cant, + &local.atom[i].lmax, &local.atom[i].kkrsz, + &local.atom[i].wx[0],&local.atom[i].wy[0],&local.atom[i].wz[0], + &rins,&r_sph,&local.atom[i].r_mesh[0],&local.atom[i].jmt,&local.atom[i].jws, + &pnrel,&tau00_l(0,i),&solutionNonRel[iie][i].matom(0,0), + &solutionNonRel[iie][i].zlr(0,0,0),&solutionNonRel[iie][i].jlr(0,0,0), + &nprpts,&nplmax, + &lsms.ngaussr, &gauntCoeficients.cgnt(0,0,0), &gauntCoeficients.lmax, + &dos(0,i),&dosck(0,i),&green(0,0,i),&dipole(0,0,i), + &local.atom[i].voronoi.ncrit,&local.atom[i].voronoi.grwylm(0,0), + &local.atom[i].voronoi.gwwylm(0,0),&local.atom[i].voronoi.wylm(0,0,0), + &lsms.global.iprint,lsms.global.istop,32); + Complex tr_pxtau[3]; + calculateDensities(lsms, i, 0, ie, nume, energy, dele1[ie], + dos,dosck,green, + dipole, + local.atom[i]); + + } + } else { + for(int i=0; i0) r_sph=local.atom[i].rws; + Real rins=local.atom[i].rmt; +// int nprpts=solutionNonRel[iie][i].zlr.l_dim1(); + int nprpts=local.atom[i].r_mesh.size(); +// int nplmax=solutionNonRel[iie][i].zlr.l_dim2()-1; + int nplmax=local.atom[i].lmax; + // printf("Relativistic version not implemented yet\n"); + // exit(1); + + green_function_rel_(&lsms.mtasa, + &local.atom[i].lmax, &local.atom[i].kkrsz, + &local.atom[i].wx[0],&local.atom[i].wy[0],&local.atom[i].wz[0], + &rins,&local.atom[i].r_mesh[0], + &local.atom[i].jws, // originally jmt + &local.atom[i].jws,&local.atom[i].h, + &pnrel,&tau00_l(0,i),&solutionRel[iie][i].matom(0,0), + &solutionRel[iie][i].gz(0,0,0),&solutionRel[iie][i].fz(0,0,0), + &solutionRel[iie][i].gj(0,0,0),&solutionRel[iie][i].fj(0,0,0), + &solutionRel[iie][i].nuz[0],&solutionRel[iie][i].indz(0,0), + &nprpts, + &lsms.ngaussr, &gauntCoeficients.cgnt(0,0,0), &gauntCoeficients.lmax, + &dos(0,i),&dosck(0,i),&green(0,0,i),&dipole(0,0,i), + &dos_orb(0,i),&dosck_orb(0,i),&dens_orb(0,0,i), + &lsms.global.iprint,lsms.global.istop,32); + + // rotateToGlobal(local.atom[i], dos, dosck, dos_orb, dosck_orb, green, dens_orb, i); + + // this is the non-rel version now + calculateDensities(lsms, i, 0, ie, nume, energy, dele1[ie], + dos,dosck,green, + dipole, + local.atom[i]); + + } + } +#ifdef USE_NVTX + nvtxRangePop(); +#endif + timeCalcDensities=MPI_Wtime()-timeCalcDensities; + if(lsms.global.iprint>=1) printf("timeCalculateDensities = %lf sec\n",timeCalcDensities); + } + } + } + timeEnergyContourIntegration_2=MPI_Wtime()-timeEnergyContourIntegration_2; + if(lsms.global.iprint>=0) + { + printf("time in energyContourIntegration = %lf sec\n",timeEnergyContourIntegration_1+timeEnergyContourIntegration_2); + printf(" before energy loop = %lf sec\n",timeEnergyContourIntegration_1); + printf(" in energy loop = %lf sec\n",timeEnergyContourIntegration_2); + printf(" in calculateAllTauMatrices = %lf sec\n",timeCalculateAllTauMatrices); + } +} diff --git a/src/Main/global.hpp b/src/Main/global.hpp new file mode 100644 index 000000000..1038c39be --- /dev/null +++ b/src/Main/global.hpp @@ -0,0 +1,4 @@ +#ifndef LSMS_GLOBALS_H +#define LSMS_GLOBALS_H + +#endif diff --git a/src/Main/initializeAtom.cpp b/src/Main/initializeAtom.cpp new file mode 100644 index 000000000..eeddfe5c3 --- /dev/null +++ b/src/Main/initializeAtom.cpp @@ -0,0 +1,519 @@ +#include +#include +#include + +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" +#include "SingleSite/AtomData.hpp" +#include "initializeAtom.hpp" +#include "Core/CoreStates.hpp" +#include "Misc/integrateOneDim.cpp" + +/* initializeAtom(AtomData &a) + initialize an atom using the following information in AtomData + + Mesh information: xstart, rmt, jmt, jws + Atom information: ztotss, zcorss, zsemss, zvalss + (Note that ztotss=zcorss+zsemss+zvalss) + lmax to limit core search +*/ +class InitialAtomLevels { +public: + Real energy; + int n,l; + std::vector rho; // radial charge density contribution from an electron in this level + char type; // 'C' for core lectron, 'S' for semi-core and 'V' for valence electrons +// bool operator<()(InitialAtomLevels const &a, InitialAtomLevels const &b) { return a.energy nitmax,tol,nws,nlast,iter,iprpts,ipdeq) + +c nqn: principal quantum number; +c lqn: orbital quantum number; +c kqn: kappa quantum number; +c en: energy; +c rv: potential in rydbergs times r; +c r: radial log. grid; +c rg: big component; +c rf: small component; +c h: exp. step; +c z: atomic number; +c nitmax: number of iterations; +c tol: energy tolerance; +c nws: bounding sphere radius index; +c nlast: last tabulation point; +c c: speed of light in rydbergs; +c drg,drf: wavefunctions derivatives times r; +c gam: first power for small r expansion; +c slp: slope at the origin; +c dm: h/720; +*/ +extern "C" +{ + void deepst_(int *nqn, int *lqn, int *kqn, Real *en, Real *rv, Real*r, + Real *rf, Real*h, Real *z, Real *c, + int *nitmax, Real *tol, int *nws, int *nlast, int *iter, + int *iprpts, int *ipdeq); +} + +// approximation for the error function +Real approxErfc(Real x) +{ + const Real p = 0.47047; + const Real a1 = 0.3480242; + const Real a2 = -0.0958798; + const Real a3 = 0.7478556; + + Real t = 1.0 / (1.0 + p*x); + return 1.0 - ((a1 + (a2 + a3*t) * t) * t) * std::exp(-(x*x)); +} + +void initializeAtom(AtomData &a) +{ + a.generateRadialMesh(); + + // for analysis purposes gnerate gnuplot files for the atom + bool generatePlot=true; + FILE * plotFile; + if(generatePlot) plotFile=fopen("initializeAtom.plot","w"); + + // inititalize potential to be V(r) = -2Z/r + // add a potential corresponding to a gaussian charge distribution + // for the core charge with \sigma=0.2*rmt + // (vr stores V(r) * r) + Real sigmaSqrt2Inv = 1.0 / (0.2 * std::sqrt(2.0) * a.rmt); + Real q = a.zcorss + a.zsemss; + for (int ir=0; ir atomLevels(numAtomLevels); + std::vector rf(a.r_mesh.size()+1); + std::vector rfNormalized(a.r_mesh.size()+1); + std::vector unnormalizedDensity(a.r_mesh.size()+1); + int nl = 0; + for(int n=1; n<=lmaxCore+1; n++) + { + for (int l=0; l chargeDensity(a.r_mesh.size()+1); + std::vector electrostaticPotential(a.r_mesh.size()+1); + std::vector mesh0(a.r_mesh.size()+1); + chargeDensity[0]=0.0; + mesh0[0]=0.0; + if(a.nspin==1) + for(int ir=0; ir +#include "Main/SystemParameters.hpp" +#include "Communication/LSMSCommunication.hpp" +#include "SingleSite/AtomData.hpp" + +void initializeAtom(AtomData &a); +int initializeNewPotentials(LSMSCommunication &comm,LSMSSystemParameters &lsms, CrystalParameters &crystal, LocalTypeInfo &local); +int initializeNewAlloyBank(LSMSCommunication &comm, LSMSSystemParameters &lsms, AlloyMixingDesc &alloyDesc, AlloyAtomBank &alloyBank); + +#endif diff --git a/src/Main/lsms.cpp b/src/Main/lsms.cpp new file mode 100644 index 000000000..328766b13 --- /dev/null +++ b/src/Main/lsms.cpp @@ -0,0 +1,559 @@ +#include +#include +#include +#include + +// #include + +#ifdef _OPENMP +#include +#endif + +// #define USE_PAPI 1 +#ifdef USE_PAPI +#include +#endif + +#ifdef USE_GPTL +#include "gptl.h" +#endif + +#include + +#include "lua.hpp" +//#include "lua.h" +//#include "lauxlib.h" +//#include "lualib.h" + +#include "SystemParameters.hpp" +#include "PotentialIO.hpp" +#include "Communication/distributeAtoms.hpp" +#include "Communication/LSMSCommunication.hpp" +#include "Core/CoreStates.hpp" +#include "Misc/Indices.hpp" +#include "Misc/Coeficients.hpp" +#include "Madelung/Madelung.hpp" +#include "VORPOL/VORPOL.hpp" +#include "EnergyContourIntegration.hpp" +#include "Accelerator/Accelerator.hpp" +#include "calculateChemPot.hpp" +#include "calculateDensities.hpp" +#include "mixing.hpp" +#include "calculateEvec.hpp" +#include "Potential/calculateChargesPotential.hpp" +#include "Potential/interpolatePotential.hpp" +#include "Potential/PotentialShifter.hpp" +#include "TotalEnergy/calculateTotalEnergy.hpp" +#include "SingleSite/checkAntiFerromagneticStatus.hpp" + +#include "Misc/readLastLine.hpp" + +#include "writeInfoEvec.cpp" + +SphericalHarmonicsCoeficients sphericalHarmonicsCoeficients; +GauntCoeficients gauntCoeficients; +IFactors iFactors; + +#if defined(ACCELERATOR_CULA) || defined(ACCELERATOR_LIBSCI) || defined(ACCELERATOR_CUDA_C) +#include "Accelerator/DeviceStorage.hpp" +// void * deviceStorage; +DeviceStorage *deviceStorage; +#endif +#ifdef BUILDKKRMATRIX_GPU +#include "Accelerator/buildKKRMatrix_gpu.hpp" + +std::vector deviceConstants; +// void *allocateDConst(void); +// void freeDConst(void *); +#endif +// std::vector deviceConstants; +// std::vector deviceStorage; + + +void initLSMSLuaInterface(lua_State *L); +int readInput(lua_State *L, LSMSSystemParameters &lsms, CrystalParameters &crystal, MixingParameters &mix, PotentialShifter &potentialShifter, + AlloyMixingDesc &alloyDesc); +void buildLIZandCommLists(LSMSCommunication &comm, LSMSSystemParameters &lsms, + CrystalParameters &crystal, LocalTypeInfo &local); +void setupVorpol(LSMSSystemParameters &lsms, CrystalParameters &crystal, LocalTypeInfo &local, + SphericalHarmonicsCoeficients &shc); + +void calculateVolumes(LSMSCommunication &comm, LSMSSystemParameters &lsms, CrystalParameters &crystal, LocalTypeInfo &local); + +/* +static int +feenableexcept (unsigned int excepts) +{ + static fenv_t fenv; + unsigned int new_excepts = excepts & FE_ALL_EXCEPT, + old_excepts; // previous masks + + if ( fegetenv (&fenv) ) return -1; + old_excepts = fenv.__control & FE_ALL_EXCEPT; + + // unmask + fenv.__control &= ~new_excepts; + fenv.__mxcsr &= ~(new_excepts << 7); + + return ( fesetenv (&fenv) ? -1 : old_excepts ); +} +*/ + + +int main(int argc, char *argv[]) +{ + LSMSSystemParameters lsms; + LSMSCommunication comm; + CrystalParameters crystal; + LocalTypeInfo local; + MixingParameters mix; + PotentialShifter potentialShifter; + AlloyMixingDesc alloyDesc; + AlloyAtomBank alloyBank; + + char inputFileName[128]; + + Real eband; + + lua_State *L = luaL_newstate(); + luaL_openlibs(L); + initLSMSLuaInterface(L); + + // feenableexcept(FE_INVALID); + +#ifdef USE_GPTL + GPTLinitialize(); +#endif + initializeCommunication(comm); + H5open(); + + // set input file name (default 'i_lsms') + strncpy(inputFileName, "i_lsms", 10); + if (argc > 1) + strncpy(inputFileName, argv[1], 120); + + lsms.global.iprpts = 1051; + lsms.global.ipcore = 30; + lsms.global.setIstop("main"); + lsms.global.iprint = 0; + lsms.global.default_iprint = -1; + lsms.global.print_node = 0; + lsms.ngaussr = 10; + lsms.ngaussq = 40; + lsms.vSpinShiftFlag = 0; +#ifdef _OPENMP + lsms.global.GPUThreads = std::min(12, omp_get_max_threads()); +#else + lsms.global.GPUThreads = 1; +#endif + if (comm.rank == 0) + lsms.global.iprint = 0; + + if (comm.rank == 0) + { + printf("LSMS_3: Program started\n"); + printf("Using %d MPI processes\n", comm.size); +#ifdef _OPENMP + printf("Using %d OpenMP threads\n", omp_get_max_threads()); +#endif + acceleratorPrint(); +#ifdef BUILDKKRMATRIX_GPU + printf("Using GPU to build KKR matrix.\n"); +#endif + printf("Reading input file '%s'\n", inputFileName); + fflush(stdout); + + if (luaL_loadfile(L, inputFileName) || lua_pcall(L,0,0,0)) + { + fprintf(stderr, "!! Cannot run input file!!\n"); + exit(1); + } + + printf("Loaded input file!\n"); + fflush(stdout); + + if (readInput(L, lsms, crystal, mix, potentialShifter, alloyDesc)) + { + fprintf(stderr, "!! Something wrong in input file!!\n"); + exit(1); + } + + printf("System information:\n"); + printf("===================\n"); + printf("Number of atoms : %10d\n", crystal.num_atoms); + printf("Number of atomic types : %10d\n", crystal.num_types); + switch (lsms.mtasa) + { + case 1: + printf("Performing Atomic Sphere Approximation (ASA) calculation\n"); + break; + case 2: + printf("Performing Atomic Sphere Approximation + Muffin-Tin (ASA-MT) calculation\n"); + break; + default: + printf("Performing Muffin-Tin (MT) calculation\n"); + } + } + + communicateParameters(comm, lsms, crystal, mix, alloyDesc); + if (comm.rank != lsms.global.print_node) + lsms.global.iprint = lsms.global.default_iprint; + // printf("maxlmax=%d\n",lsms.maxlmax); + + local.setNumLocal(distributeTypes(crystal, comm)); + local.setGlobalId(comm.rank, crystal); + + // set up exchange correlation functionals + if (lsms.xcFunctional[0] == 1) // use libxc functional + lsms.libxcFunctional.init(lsms.n_spin_pola, lsms.xcFunctional); + + lsms.angularMomentumIndices.init(2*crystal.maxlmax); + sphericalHarmonicsCoeficients.init(2*crystal.maxlmax); + + gauntCoeficients.init(lsms, lsms.angularMomentumIndices, sphericalHarmonicsCoeficients); + iFactors.init(lsms, crystal.maxlmax); + + // printf("before buildLIZandCommLists\n"); + buildLIZandCommLists(comm, lsms, crystal, local); + // printf("after buildLIZandCommLists: num_local=%d\n", local.num_local); + + +// initialize the potential accelerators (GPU) +// we need to know the max. size of the kkr matrix to invert: lsms.n_spin_cant*local.maxNrmat() +// which is only available after building the LIZ + + acceleratorInitialize(lsms.n_spin_cant*local.maxNrmat(), lsms.global.GPUThreads); + local.tmatStore.pinMemory(); +#if defined(ACCELERATOR_CULA) || defined(ACCELERATOR_LIBSCI) || defined(ACCELERATOR_CUDA_C) + // deviceStorage = allocateDStore(); + deviceStorage = new DeviceStorage; +#endif +#ifdef BUILDKKRMATRIX_GPU + deviceConstants.resize(local.num_local); + // for(int i=0; i= 0) printLSMSGlobals(stdout, lsms); + if (lsms.global.iprint >= 0) printLSMSSystemParameters(stdout, lsms); + if (lsms.global.iprint >= 1) printCrystalParameters(stdout, crystal); + if (lsms.global.iprint >= 0) printAlloyParameters(stdout, alloyDesc); + if (lsms.global.iprint >= 0) + { + fprintf(stdout,"LIZ for atom 0 on this node\n"); + printLIZInfo(stdout, local.atom[0]); + } + if (lsms.global.iprint >= 1) + { + printCommunicationInfo(stdout, comm); + } + fflush(stdout); + +// initialAtomSetup(comm,lsms,crystal,local); + +// the next line is a hack for initialization of potentials from scratch to work. + if(lsms.pot_in_type < 0) setupVorpol(lsms, crystal, local, sphericalHarmonicsCoeficients); + + loadPotentials(comm, lsms, crystal, local); + + if ( alloyDesc.size() > 0 ) + loadAlloyBank(comm,lsms,alloyDesc,alloyBank); + +// for testing purposes: +// std::vector > vrs; +// vrs.resize(local.num_local); +// for(int i=0; i= 1) + { + printLocalTypeInfo(stdout, local); + } + + calculateCoreStates(comm, lsms, local); + if (lsms.global.iprint >= 0) + printf("Finished calculateCoreStates(...)\n"); + +// check that vrs have not changed ... +// bool vr_check=false; +// for(int i=0; i1) + { + bool vr_check=true; + for(int j=0; j 1) + { + for (int i=0; i prepare(comm, lsms, local.atom); + +#ifdef USE_PAPI + #define NUM_PAPI_EVENTS 2 + int hw_counters = PAPI_num_counters(); + if (hw_counters > NUM_PAPI_EVENTS) + hw_counters = NUM_PAPI_EVENTS; + int papi_events[NUM_PAPI_EVENTS]; + char *papi_event_name[] = {"PAPI_TOT_INS", "PAPI_FP_OPS"}; + // get events from names: + for (int i=0; i i) + hw_counters = i; + } + long long papi_values[NUM_PAPI_EVENTS+4]; + if (hw_counters > NUM_PAPI_EVENTS) + hw_counters = NUM_PAPI_EVENTS; + long long papi_real_cyc_0 = PAPI_get_real_cyc(); + long long papi_real_usec_0 = PAPI_get_real_usec(); + long long papi_virt_cyc_0 = PAPI_get_virt_cyc(); + long long papi_virt_usec_0 = PAPI_get_virt_usec(); + PAPI_start_counters(papi_events, hw_counters); +#endif + +// ----------------------------------------------------------------------------- +// MAIN SCF LOOP +// ----------------------------------------------------------------------------- + + bool converged = false; + + if (lsms.global.iprint >= 0) + printf("Total number of iterations:%d\n", lsms.nscf); + + double timeScfLoop = MPI_Wtime(); + double timeCalcChemPot = 0.0; + + int iterationStart = 0; + int potentialWriteCounter = 0; + + FILE *kFile = NULL; + if (comm.rank == 0) + { + iterationStart = readNextIterationNumber("k.out"); + kFile = fopen("k.out","a"); + } + + for (int iteration=0; iteration= 0) + printf("SCF iteration %d:\n", iteration); + + // Calculate band energy + energyContourIntegration(comm, lsms, local); + double dTimeCCP = MPI_Wtime(); + // if(!lsms.global.checkIstop("buildKKRMatrix")) + + // Calculate chemical potential + calculateChemPot(comm, lsms, local, eband); + dTimeCCP = MPI_Wtime() - dTimeCCP; + timeCalcChemPot += dTimeCCP; + + // Calculate magnetic moments for each site and check if spin has flipped + calculateEvec(lsms, local); + mixEvec(lsms, local, 0.0); + for (int i=0; i updateChargeDensity(comm, lsms, local.atom); + + // Recalculate core states + // - swap core state energies for different spin channels first if spin has flipped + // (from LSMS 1: lsms_main.f:2101-2116) + for (int i=0; i updatePotential(comm, lsms, local.atom); + + Real rms = 0.5 * (local.qrms[0] + local.qrms[1]); + + // Check for convergence + converged = true; + for (int i=0; i= 0 && potentialWriteCounter >= lsms.writeSteps) + || converged) + { + if (comm.rank == 0) std::cout << "Writing new potentials.\n"; + writePotentials(comm, lsms, crystal, local); + potentialWriteCounter = 0; + } + + } + + writeInfoEvec(comm, lsms, crystal, local, "info_evec_out"); + + if (kFile != NULL) + fclose(kFile); + + timeScfLoop = MPI_Wtime() - timeScfLoop; + +// ----------------------------------------------------------------------------- + +#ifdef USE_PAPI + PAPI_stop_counters(papi_values,hw_counters); + papi_values[hw_counters ] = PAPI_get_real_cyc()-papi_real_cyc_0; + papi_values[hw_counters+1] = PAPI_get_real_usec()-papi_real_usec_0; + papi_values[hw_counters+2] = PAPI_get_virt_cyc()-papi_virt_cyc_0; + papi_values[hw_counters+3] = PAPI_get_virt_usec()-papi_virt_usec_0; + long long accumulated_counters[NUM_PAPI_EVENTS+4]; + MPI_Reduce(papi_values,accumulated_counters,hw_counters+4, + MPI_LONG,MPI_SUM,0,MPI_COMM_WORLD); + if (comm.rank == 0) + { + for (int i=0; i= 0) + { + if (comm.rank == 0) std::cout << "Writing new potentials.\n"; + writePotentials(comm, lsms, crystal, local); + } + + if (comm.rank == 0) + { + printf("Band Energy = %.15lf Ry\n", eband); + printf("Fermi Energy = %.15lf Ry\n", lsms.chempot); + printf("Total Energy = %.15lf Ry\n", lsms.totalEnergy); + printf("timeScfLoop[rank==0] = %lf sec\n", timeScfLoop); + printf(".../lsms.nscf = %lf sec\n", timeScfLoop / (double)lsms.nscf); + printf("timeCalcChemPot[rank==0]/lsms.nscf = %lf sec\n", timeCalcChemPot / (double)lsms.nscf); + } + + local.tmatStore.unpinMemory(); + +#ifdef BUILDKKRMATRIX_GPU + // for(int i=0; i +#include +#include + +#include "lua.hpp" +//#include "lua.h" +//#include "lauxlib.h" +//#include "lualib.h" + +#include "SystemParameters.hpp" +#include "PotentialIO.hpp" +#include "Communication/distributeAtoms.hpp" +#include "Communication/LSMSCommunication.hpp" +#include "Core/CoreStates.hpp" +#include "Misc/Indices.hpp" +#include "Misc/Coeficients.hpp" +#include "Madelung/Madelung.hpp" +#include "VORPOL/VORPOL.hpp" +#include "Potential/calculateChargesPotential.hpp" +#include "Potential/interpolatePotential.hpp" +#include "Potential/PotentialShifter.hpp" +#include "EnergyContourIntegration.hpp" +#include "Accelerator/Accelerator.hpp" +#include "calculateChemPot.hpp" +#include "calculateDensities.hpp" +#include "calculateEvec.hpp" +#include "TotalEnergy/calculateTotalEnergy.hpp" +#include "SingleSite/checkAntiFerromagneticStatus.hpp" + +#include "lsmsClass.hpp" + +#ifdef _OPENMP +#include +#else +inline int omp_get_max_threads() {return 1;} +inline int omp_get_num_threads() {return 1;} +inline int omp_get_thread_num() {return 0;} +#endif + +SphericalHarmonicsCoeficients sphericalHarmonicsCoeficients; +GauntCoeficients gauntCoeficients; +IFactors iFactors; + +#if defined(ACCELERATOR_CULA) || defined(ACCELERATOR_LIBSCI) || defined(ACCELERATOR_CUDA_C) +#include "Accelerator/DeviceStorage.hpp" +// void *deviceStorage; +DeviceStorage *deviceStorage; +#endif + +#ifdef BUILDKKRMATRIX_GPU +// void *allocateDStore(void); +// void freeDStore(void *); +// void *allocateDConst(void); +// void freeDConst(void *); +#include "Accelerator/buildKKRMatrix_gpu.hpp" + +std::vector deviceConstants; +//std::vector deviceConstants; +#endif + +void initLSMSLuaInterface(lua_State *L); +int readInput(lua_State *L, LSMSSystemParameters &lsms, CrystalParameters &crystal, MixingParameters &mix, PotentialShifter &potentialshifter, + AlloyMixingDesc &alloyDesc); +void buildLIZandCommLists(LSMSCommunication &comm, LSMSSystemParameters &lsms, + CrystalParameters &crystal, LocalTypeInfo &local); +void setupVorpol(LSMSSystemParameters &lsms, CrystalParameters &crystal, LocalTypeInfo &local, + SphericalHarmonicsCoeficients &shc); +void calculateVolumes(LSMSCommunication &comm, LSMSSystemParameters &lsms, CrystalParameters &crystal, LocalTypeInfo &local); + +// Constructor +//LSMS::LSMS(MPI_Comm _comm, const char* i_lsms, const char* out_prefix, PotentialShifter &ps) +//LSMS::LSMS(MPI_Comm _comm, const char* i_lsms, const char* out_prefix) +LSMS::LSMS(MPI_Comm _comm, const char* i_lsms, const char* out_prefix, int my_group) +{ + + myWalkerID = my_group; + + char h[] = "NO OUTPUT"; + + if (out_prefix == NULL) + strncpy(prefix, h, 255); + else + strncpy(prefix, out_prefix, 255); + + energyLoopCount = 0; + +/* + if (rank == 0) + std::cout<<"initializing lsms::lsms with i_lsms="<= 0) + { + printLSMSSystemParameters(stdout, lsms); + printCrystalParameters(stdout, crystal); + printAlloyParameters(stdout,alloyDesc); + } + if (lsms.global.iprint >= 1) + { + fprintf(stdout,"LIZ for atom 0 on this node\n"); + printLIZInfo(stdout, local.atom[0]); + printCommunicationInfo(stdout, comm); + } + + loadPotentials(comm, lsms, crystal, local); + setupVorpol(lsms, crystal, local, sphericalHarmonicsCoeficients); + + // for Wang-Landau for alloys + if ( alloyDesc.size() > 0 ) + loadAlloyBank(comm,lsms,alloyDesc,alloyBank); + + // Generate new grids after new rmt is defined + for (int i=0; i= 0) + printLocalTypeInfo(stdout, local); + + // initialize Mixing + setupMixing(mix, mixing); + + // set and copy potentialShifter + potentialShifter.resize(local.num_local); + potentialShifter.resetPotentials(local); + + calculateCoreStates(comm, lsms, local); + if (lsms.global.iprint >= 0) + printf("Finished calculateCoreStates(...)\n"); + + if (lsms.n_spin_cant > 1) + { + for (int i=0; i 1 ) { + for (int i = 0; i < alloyBank.size(); i++) + for (int j = 0; j < alloyBank[i].size(); j++) + alloyBank[i][j].get_b_basis(); + } + else { + for (int i = 0; i < alloyBank.size(); i++) + for (int j = 0; j < alloyBank[i].size(); j++) + alloyBank[i][j].reset_b_basis(); + } + + mixing -> prepare(comm, lsms, local.atom); + + + LSMS_version = 3000; + // if (comm.rank == 0) + // std::cout< > &ev) +{ + MPI_Status status; + //distribute the evecs to the respective processes + if (comm.rank == 0) + { + std::vector request(crystal.num_types); + int n_req = 0; + for (int p=0; p request(local.num_local); + for (int p=0; p request(crystal.num_types); + int n_req = 0; + for (int p=0; p request(local.num_local); + for (int p=0; p request(crystal.num_types); + int n_req = 0; + for(int p=0; p request(local.num_local); + for(int p=0; p request(crystal.num_types); + int n_req = 0; + for (int p=0; p request(local.num_local); + Real recvBuffer[4*local.num_local]; + + for (int p=0; p > &ev) +{ + Array3d r_buf(4,max_num_local,comm.size); + Matrix s_buf(4,max_num_local); + + for (int i=0; i=0; i++) + { + int j = r_buf(0,i,p); + (ev[j])[0] = r_buf(1,i,p); + (ev[j])[1] = r_buf(2,i,p); + (ev[j])[2] = r_buf(3,i,p); + } + } + } +} + + +void LSMS::getEvec(Real *ev) +{ + Array3d r_buf(4,max_num_local,comm.size); + Matrix s_buf(4,max_num_local); + + for (int i=0; i=0; i++) + { + int j = r_buf(0,i,p); + ev[3*j+0] = r_buf(1,i,p); + ev[3*j+1] = r_buf(2,i,p); + ev[3*j+2] = r_buf(3,i,p); + } + } + } + +} + + +void LSMS::getMag(std::vector > &ev) +{ + Array3d r_buf(4, max_num_local, comm.size); + Matrix s_buf(4, max_num_local); + Real mag; + + for (int i=0; i=0; i++) + { + int j = r_buf(0,i,p); + (ev[j])[0] = r_buf(1,i,p); + (ev[j])[1] = r_buf(2,i,p); + (ev[j])[2] = r_buf(3,i,p); + } + } + } +} + + +void LSMS::getMag(Real *ev) +{ + Real r_buf[4*max_num_local*comm.size]; + Real mag; + Real s_buf[4*max_num_local]; + + for (int i=0; i=0; i++) + for (int i=0; i= 0) + { + ev[3*j+0] = r_buf[1 + 4*(i+max_num_local*p)]; + ev[3*j+1] = r_buf[2 + 4*(i+max_num_local*p)]; + ev[3*j+2] = r_buf[3 + 4*(i+max_num_local*p)]; + } + } + } + } +} + +void LSMS::replaceAtom(AtomData &currAtom, AtomData &newAtom) { + + // defined in a separate routine in case more care required + currAtom = newAtom; + currAtom.vrNew = currAtom.vr; + currAtom.rhoNew = currAtom.rhotot; + currAtom.resetLocalDensities(); +} + +void LSMS::setOccupancies(int *occ) { + + MPI_Status status; + + // distribute occupancies to respective processes + if( comm.rank == 0 ) { + + // for every atomic site + std::vector request(crystal.num_types); + int n_req = 0; + for(int p = 0; p < crystal.num_types; p++) + { + int owner = crystal.types[p].node; + int l = crystal.types[p].local_id; + int ac = crystal.types[p].alloy_class; + + // if root node owns site + if( owner == 0 ) { + + // if occupancy changed, redefine atom by pulling from bank + if( local.atom[l].ztotss != alloyBank[ac][occ[p]].ztotss ) { + replaceAtom( local.atom[l], alloyBank[ac][occ[p]]); + crystal.types[p].Z = alloyDesc[ac][occ[p]].Z; + crystal.types[p].Zc = alloyDesc[ac][occ[p]].Zc; + crystal.types[p].Zs = alloyDesc[ac][occ[p]].Zs; + crystal.types[p].Zv = alloyDesc[ac][occ[p]].Zv; + } + } + + // if not owned by root, send site occupancy + else { + MPI_Isend(&occ[p],1,MPI_INTEGER,owner,l,comm.comm,&request[n_req++]); + } + } + + // wait for all nodes to recieve + for(int i = 0; i < n_req; i++) + MPI_Wait(&request[i], &status); + + } + else { + + // if not root node, pick up local occupancies + std::vector request(local.num_local); + std::vector xi(local.num_local); + + for(int p = 0; p < local.num_local; p++) + MPI_Irecv(&xi[p],1,MPI_INTEGER,0,p,comm.comm,&request[p]); + + // wait for all recieves to complete + for(int i = 0; i < local.num_local; i++) + MPI_Wait(&request[i], &status); + + /* dprintf("Walker %d, LSMS %d: Recieved local occupancies: ",myWalkerID,comm.rank); + for(int p = 0; p < local.num_local; p++) + dprintf("%d",xi[p]); + dprintf("\n"); */ + + // if a site occupancy changed, pull from alloy bank + for(int p = 0; p < local.num_local; p++) { + int ac = local.atom[p].alloy_class; + // dprintf("Walker %d, LSMS %d: Local Atom %d: Alloy Class %d\n",myWalkerID,comm.rank,p,ac); + if( local.atom[p].ztotss != alloyBank[ac][xi[p]].ztotss ) { + replaceAtom( local.atom[p], alloyBank[ac][xi[p]] ); + int g = local.global_id[p]; + crystal.types[g].Z = alloyDesc[ac][xi[p]].Z; + crystal.types[g].Zc = alloyDesc[ac][xi[p]].Zc; + crystal.types[g].Zs = alloyDesc[ac][xi[p]].Zs; + crystal.types[g].Zv = alloyDesc[ac][xi[p]].Zv; + } + } + } + + // alloy bank potentiial is from a different mesh + for (int i=0; iprepare(comm,lsms,local.atom); +} + +void LSMS::getOccupancies(int *occ_out) { + // not implemented +} + +void LSMS::getAlloyInfo(AlloyMixingDesc &alloyDesc, int **siteclass) { + + printf("crystal.num_types = %d\n", crystal.num_types); + + alloyDesc = this->alloyDesc; + *siteclass = (int*) malloc(sizeof(int)*crystal.num_types); + + for(int i = 0; i < crystal.num_types; i++) + (*siteclass)[i] = crystal.types[i].alloy_class; +} + + +// oneStepEnergy calculates the frozen potential energy without converging the Fermi energy +Real LSMS::oneStepEnergy(Real *eb) +{ + Real eband; + + calculateCoreStates(comm,lsms,local); + energyContourIntegration(comm,lsms,local); + calculateChemPot(comm,lsms,local,eband); + calculateEvec(lsms,local); + mixEvec(lsms,local,0.0); + calculateAllLocalChargeDensities(lsms,local); + calculateLocalCharges(lsms, local, 0); + + energyLoopCount++; + + *eb=eband; + return eband; +} + + +Real LSMS::multiStepEnergy() +{ + Real eband,ef; + int iterationCount=1; + + ef=lsms.chempot; + + if(potentialShifter.vSpinShiftFlag) + { + potentialShifter.applyShifts(local); + } + + calculateCoreStates(comm,lsms,local); + + energyContourIntegration(comm,lsms,local); + energyLoopCount++; + + calculateChemPot(comm,lsms,local,eband); + while(std::abs(ef-lsms.chempot)>efTol && iterationCount=0) + { + + printf("LSMS::multiStepEnergy(): eZeeman=%lf\n",eZeeman); + } + eband-=eZeeman; + } + + if(lsms.global.iprint>=0) + { + if(iterationCount= 0) + printf("Total number of iterations:%d\n", lsms.nscf); + + // double timeScfLoop = MPI_Wtime(); + // double timeCalcChemPot = 0.0; + + if (lsms.n_spin_cant > 1) + { + for (int i=0; i= 0) + // printf("SCF iteration %d:\n", iterationCount); + Real rms=0.5*(local.qrms[0]+local.qrms[1]); + // if(comm.rank==0) printf("Walker %d: On SCF iteration %d. Last RMS = %17.15f\n", myWalkerID, iterationCount, rms); + + energyContourIntegration(comm, lsms, local); + + //if(potentialShifter.vSpinShiftFlag) + // potentialShifter.restorePotentials(local); + + // double dTimeCCP = MPI_Wtime(); + // if(!lsms.global.checkIstop("buildKKRMatrix")) + calculateChemPot(comm, lsms, local, eband); + // dTimeCCP = MPI_Wtime() - dTimeCCP; + // timeCalcChemPot += dTimeCCP; + calculateEvec(lsms, local); + mixEvec(lsms, local, 0.0); + for (int i=0; i= 0) + printf("LSMS::scfEnergy(): eZeeman=%lf\n",eZeeman); + } + + if (potentialShifter.vSpinShiftFlag) + potentialShifter.restorePotentials(local); + + mixing -> updateChargeDensity(comm, lsms, local.atom); + + // LSMS 1: lsms_main.f:2101-2116 + for (int i=0; i updatePotential(comm,lsms,local.atom); + + if (potentialShifter.vSpinShiftFlag) + potentialShifter.resetPotentials(local); + + rms = 0.5*(local.qrms[0]+local.qrms[1]); + + if (potentialShifter.vSpinShiftFlag) + lsms.totalEnergy -= eZeeman; + + energyDifference = oldTotalEnergy - lsms.totalEnergy; + if (lsms.global.iprint >= 0 && comm.rank == 0) + { + printf("Band Energy = %lf Ry %10s", eband, ""); + printf("Fermi Energy = %lf Ry\n", lsms.chempot); + printf("Total Energy = %lf Ry\n", lsms.totalEnergy); + printf("Energy Change = %lg Ry\n", energyDifference); + printf("RMS = %lf\n",rms); + } + + if (kFile != NULL) + fprintf(kFile,"%3d %20.12lf %12.6lf %12.6lf\n",iterationCount,lsms.totalEnergy,lsms.chempot,rms); + + if (potentialShifter.vSpinShiftFlag) + potentialShifter.applyShifts(local); + + // calculate core states for new potential if we are performing scf calculations + calculateCoreStates(comm,lsms,local); + +// check for convergence + converged = true; + for (int i=0; i + +#include + +#include "Real.hpp" +#include "../Potential/PotentialShifter.hpp" +#include "mixing.hpp" + +class LSMS { + +public: + + //LSMS(MPI_Comm comm, const char * i_lsms, const char * out_prefix, PotentialShifter &potentialShifter); + //LSMS(MPI_Comm comm, const char * i_lsms, const char * out_prefix); + LSMS(MPI_Comm _comm, const char* i_lsms, const char* out_prefix, int my_group = 0); + ~LSMS(); + + int myWalkerID {0}; + + int version() { return LSMS_version; } + int numSpins() { return lsms.num_atoms; } + bool vSpinShiftFlag() { return potentialShifter.vSpinShiftFlag; } + double potentialMinShift() { return potentialShifter.minShift; } + double potentialMaxShift() { return potentialShifter.maxShift; } + + void setEvec(std::vector> &); + void setEvec(Real *); + void setEvecAndSpinPotentialShift(Real *); + void setEvecAndSpinPotentialShift4(Real *); + + void getEvec(std::vector> &); + void getEvec(Real *); + void getMag(std::vector> &); + void getMag(Real *); + + void setOccupancies(int*); + void getOccupancies(int*); + void getAlloyInfo(AlloyMixingDesc&, int**); + + Real oneStepEnergy(Real *eb); + Real oneStepEnergy() + { + Real eband; + return oneStepEnergy(&eband); + } + Real oneStepEnergy(std::vector> &ev) + { + setEvec(ev); + return oneStepEnergy(); + } + + Real multiStepEnergy(); + + Real scfEnergy(Real *eb); + Real scfEnergy() + { + Real eb; + return scfEnergy(&eb); + } + + void setEfTol(Real e) { efTol = e; } + void setRmsTol(Real r) { rmsTolerance = r; } + Real getEf(void) { return lsms.chempot; } + void setEnergyTol(Real e) { energyTolerance = e; } + void writePot(char *name); + + Real energyDifference; + + long energyLoopCount; + + void savePotentials(std::vector > &vrs) + { + if(vrs.size()!=local.num_local) vrs.resize(local.num_local); + for(int i=0; i > &vrs) + { + for(int i=0; iprepare(comm,lsms,local.atom); + } + + void replaceAtom(AtomData& currAtom, AtomData& newAtom); + +private: + + char prefix[256]; + int LSMS_version; + int max_num_local; + LSMSSystemParameters lsms; + LSMSCommunication comm; + CrystalParameters crystal; + LocalTypeInfo local; + MixingParameters mix; + + PotentialShifter potentialShifter; + + Mixing *mixing; + + Real efTol; + Real energyTolerance; + Real rmsTolerance; + + // retain a bank of atoms (per species type) that can be used to load + // a guess (or frozen) potential when site occupancy changes. + AlloyMixingDesc alloyDesc; + AlloyAtomBank alloyBank; + +}; + +#endif + diff --git a/src/Main/lsms_inter.cpp b/src/Main/lsms_inter.cpp new file mode 100644 index 000000000..75157814c --- /dev/null +++ b/src/Main/lsms_inter.cpp @@ -0,0 +1,32 @@ +#include +#include +#include "lua.hpp" +//#include "lua.h" +//#include "lauxlib.h" +//#include "lualib.h" + +void initLSMSLuaInterface(lua_State *L); + +int main(int argc, char *argv[]) +{ + char buff[256]; + int error; + + lua_State *L=lua_open(); + luaL_openlibs(L); + initLSMSLuaInterface(L); + + while(fgets(buff,sizeof(buff), stdin) != NULL) + { + error = luaL_loadbuffer(L, buff, strlen(buff), "line") || + lua_pcall(L, 0, 0, 0); + if(error) + { + fprintf(stderr, "%s", lua_tostring(L, -1)); + lua_pop(L,1); + } + } + + lua_close(L); + return 0; +} diff --git a/src/Main/mixing.cpp b/src/Main/mixing.cpp new file mode 100644 index 000000000..4d7331282 --- /dev/null +++ b/src/Main/mixing.cpp @@ -0,0 +1,556 @@ +#include "mixing.hpp" +#include "Communication/LSMSCommunication.hpp" + +// the modified Broyden method follows D. D. Johnson, PRB 38, 12807 +template +class BroydenMixing { + + int vectorSize; // size of vectors to be mixed + int currentIteration; // currently used number of iterations + int iterationReset; // number of iterations after which the Broyden mixing is reset + int maxBroydenLength; // maximum number of iterations that are used + std::vector vOld, F, dF; + std::vector w, cm; + std::vector > u,vt; + std::vector ipiv; + Real alpha, w0; + Matrix a,b; + +public: + void save(std::vector &fOld, std::vector &fNew, Real wtmp) + { + if(currentIteration &A,int nn) + { + int LDIM=A.l_dim(); + int LWORK = LDIM*LDIM; + double *WORK = new double[LWORK]; + int INFO; + + LAPACK::dgetrf_(&nn,&nn,&A(0,0),&LDIM,&ipiv[0],&INFO); + LAPACK::dgetri_(&nn,&A(0,0),&LDIM,&ipiv[0],WORK,&LWORK,&INFO); + + delete WORK; + } + + void init(Real a_, int vs, int mbl=10, int itres=25) + { + alpha=a_; vectorSize=vs; currentIteration=0; maxBroydenLength=mbl; iterationReset=itres; + vOld.resize(vectorSize); F.resize(vectorSize); dF.resize(vectorSize); + w.resize(maxBroydenLength); cm.resize(maxBroydenLength); + a.resize(mbl,mbl); b.resize(mbl,mbl); ipiv.resize(mbl+1); + vt.resize(maxBroydenLength); u.resize(maxBroydenLength); + for(int i=0; i &fOld, std::vector &fNew, Real rms) + { + if(currentIteration==0) + { + // first iteration: perform linear mixing, set up internal storage + for(int i=0; i 0 && currentIteration>iterationReset) + currentIteration=0; + } +}; + + + +class NoMixing : public Mixing { +public: + // void updateChargeDensity(LSMSSystemParameters &lsms, AtomData &a) {} + void updateChargeDensity(LSMSCommunication &comm, LSMSSystemParameters &lsms, std::vector &as) {} + // void updatePotential(LSMSSystemParameters &lsms, AtomData &a) {} + void updatePotential(LSMSCommunication &comm, LSMSSystemParameters &lsms, std::vector &as) {} + void prepare(LSMSCommunication &comm, LSMSSystemParameters &lsms, std::vector &as) {} +}; + + + +class FrozenPotential : public Mixing { + +public: + + // void updateChargeDensity(LSMSSystemParameters &lsms, AtomData &a) + // { + // a.rhotot = a.rhoNew; + // a.xvalws[0] = a.xvalwsNew[0]; + // a.xvalws[1] = a.xvalwsNew[1]; + // } + + void updateChargeDensity(LSMSCommunication &comm, LSMSSystemParameters &lsms, std::vector &as) + { + for(int i = 0; i < as.size(); i++) { + as[i].rhotot = as[i].rhoNew; + as[i].xvalws[0] = as[i].xvalwsNew[0]; + as[i].xvalws[1] = as[i].xvalwsNew[1]; + } + } + + // void updatePotential(LSMSSystemParameters &lsms, AtomData &a) {} + + void updatePotential(LSMSCommunication &comm, LSMSSystemParameters &lsms, std::vector &as) {} + + void prepare(LSMSCommunication &comm, LSMSSystemParameters &lsms, std::vector &as) {} + +}; + + + +class SimpleChargeDensityMixing : public Mixing { + +public: + Real alpha; + + SimpleChargeDensityMixing(Real _alpha) : alpha(_alpha) {} + + // void updateChargeDensity(LSMSSystemParameters &lsms, AtomData &a) + // { + // simpleMixing( &a.rhotot(0,0), &a.rhoNew(0,0), a.rhotot.size(), alpha); + // simpleMixing( &a.xvalws[0], &a.xvalwsNew[0], 2, alpha); + // } + + void updateChargeDensity(LSMSCommunication &comm, LSMSSystemParameters &lsms, std::vector &as) + { + for(int i = 0; i < as.size(); i++) + { + simpleMixing( &as[i].rhotot(0,0), &as[i].rhoNew(0,0), as[i].rhotot.size(), alpha); + simpleMixing( &as[i].xvalws[0], &as[i].xvalwsNew[0], 2, alpha); + } + } + + // void updatePotential(LSMSSystemParameters &lsms, AtomData &a) + // { + // a.vr = a.vrNew; + // } + + void updatePotential(LSMSCommunication &comm, LSMSSystemParameters &lsms, std::vector &as) + { + for(int i = 0; i < as.size(); i++) { + as[i].vr = as[i].vrNew; + as[i].vdif = as[i].vdifNew; + } + } + + void prepare(LSMSCommunication &comm, LSMSSystemParameters &lsms, std::vector &as) {} + +}; + + + +class SimplePotentialMixing : public Mixing { + +public: + Real alpha; + + SimplePotentialMixing(Real _alpha) : alpha(_alpha) {} + + void updateChargeDensity(LSMSCommunication &comm, LSMSSystemParameters &lsms, std::vector &as) + { + for(int i = 0; i < as.size(); i++) { + as[i].rhotot = as[i].rhoNew; + as[i].xvalws[0] = as[i].xvalwsNew[0]; + as[i].xvalws[1] = as[i].xvalwsNew[1]; + } + } + + void updatePotential(LSMSCommunication &comm, LSMSSystemParameters &lsms, std::vector &as) + { + for(int i = 0; i < as.size(); i++) + { + simpleMixing( &as[i].vr(0,0), &as[i].vrNew(0,0), as[i].vr.size(), alpha); + simpleMixing( &as[i].vdif, &as[i].vdifNew, 1, alpha); + } + } + + void prepare(LSMSCommunication &comm, LSMSSystemParameters &lsms, std::vector &as) {} + +}; + + +class BroydenChargeDensityMixing : public Mixing { + BroydenMixing mixer; + std::vector fNew, fOld; + int vSize; + std::vector vStarts; + Real alpha; + +public: + BroydenChargeDensityMixing(Real _alpha) : alpha(_alpha) {} + + void updateChargeDensity(LSMSCommunication &comm, LSMSSystemParameters &lsms, std::vector &as) + { + Real rms = 0.0; + + // first: copy potentials into fNew vector before mixing + for (int i=0; i &as) + { + for(int i = 0; i < as.size(); i++) + { + as[i].vr = as[i].vrNew; + as[i].vdif = as[i].vdifNew; + } + } + + void prepare(LSMSCommunication &comm, LSMSSystemParameters &lsms, std::vector &as) + { + vSize = 0; + vStarts.resize(as.size()); + + for(int i=0; i mixer; + std::vector fNew, fOld; + size_t vSize; + std::vector vStarts; + Real alpha; + +public: + BroydenPotentialMixing(Real _alpha) : alpha(_alpha) {} + + void updateChargeDensity(LSMSCommunication &comm, LSMSSystemParameters &lsms, std::vector &as) + { + for (int i=0; i &as) + { + Real rms = 0.0; + + // first: copy potentials into fNew vector before mixing + for (int i=0; i &as) + { + vSize = 0; + vStarts.resize(as.size()); + + for (int i=0; i &as) + { + lsms.chempot = alpha * lsms.chempot + (1.0-alpha) * efOld; + } + + void updatePotential(LSMSCommunication &comm, LSMSSystemParameters &lsms, std::vector &as) {} + + void prepare(LSMSCommunication &comm, LSMSSystemParameters &lsms, std::vector &as) + { + efOld = lsms.chempot; + } + +}; + + + +void setupMixing(MixingParameters &mix, Mixing* &mixing) +{ + + printf("\n"); + mixing = NULL; + + // frozen potential by default + if (!mix.quantity[MixingParameters::no_mixing] && + !mix.quantity[MixingParameters::charge] && + !mix.quantity[MixingParameters::potential] && + !mix.quantity[MixingParameters::moment_magnitude] && + !mix.quantity[MixingParameters::moment_direction]) + { + mixing = new FrozenPotential; + printf("Mixing method : frozen potential (default)\n"); + } + // no mixing + else if (mix.quantity[MixingParameters::no_mixing]) + { + mixing = new NoMixing; + printf("Mixing method : no mixing\n"); + } + // charge mixing + else if (!mix.quantity[MixingParameters::no_mixing] && + mix.quantity[MixingParameters::charge] && + !mix.quantity[MixingParameters::potential] && + !mix.quantity[MixingParameters::moment_magnitude] && + !mix.quantity[MixingParameters::moment_direction]) + { + switch (mix.algorithm[MixingParameters::charge]) { + case 1 : + mixing = new SimpleChargeDensityMixing(mix.mixingParameter[MixingParameters::charge]); + printf("Mixing method : simple\n"); + break; + case 2 : + mixing = new BroydenChargeDensityMixing(mix.mixingParameter[MixingParameters::charge]); + printf("Mixing method : broyden\n"); + break; + default : + mixing = new NoMixing; + printf("Mixing method : no mixing\n"); + } + printf("Mixing quantity : charge\n"); + printf("Mixing parameters : %4.2f\n", mix.mixingParameter[MixingParameters::charge]); + } + // potential mixing + else if (!mix.quantity[MixingParameters::no_mixing] && + !mix.quantity[MixingParameters::charge] && + mix.quantity[MixingParameters::potential] && + !mix.quantity[MixingParameters::moment_magnitude] && + !mix.quantity[MixingParameters::moment_direction]) + { + switch (mix.algorithm[MixingParameters::potential]) { + case 1 : + if (mix.mixingParameter[MixingParameters::potential] == 0.0) { + mixing = new FrozenPotential; + printf("Mixing method : frozen potential\n"); + } + else { + mixing = new SimplePotentialMixing(mix.mixingParameter[MixingParameters::potential]); + printf("Mixing method : simple\n"); + } + break; + case 2 : + mixing = new BroydenPotentialMixing(mix.mixingParameter[MixingParameters::potential]); + printf("Mixing method : broyden\n"); + break; + default : + mixing = new FrozenPotential; + printf("Mixing method : frozen potential\n"); + } + printf("Mixing quantity : potential\n"); + printf("Mixing parameters : %4.2f\n", mix.mixingParameter[MixingParameters::potential]); + } + else + { + printf("Type of mixing is not supported.\n"); + for (int i = 0; i < mix.numQuantities; i++) { + printf("quantity = %5d, algorithm = %5d, mixing parameter = %6.3f\n", + mix.quantity[i], mix.algorithm[i], mix.mixingParameter[i]); + } + exit(1); + } + +} + diff --git a/src/Main/mixing.hpp b/src/Main/mixing.hpp new file mode 100644 index 000000000..cf856860c --- /dev/null +++ b/src/Main/mixing.hpp @@ -0,0 +1,386 @@ +#ifndef LSMS_MIXING_H +#define LSMS_MIXING_H +#include "Real.hpp" +#include "SystemParameters.hpp" +#include "SingleSite/AtomData.hpp" +// #include "Communication/LSMSCommunication.hpp" + +#include +#include +#include + +#include "LAPACK.hpp" + +struct MixingParameters { + + // Different mixing quantities and algorithms + static const int numQuantities = 5; + + enum mixQuantity {no_mixing = 0, charge = 1, potential = 2, moment_magnitude = 3, + moment_direction = 4}; + enum mixAlgorithm {noAlgorithm = 0, simple = 1, broyden = 2}; + + // These parameters specify the which quantity(ies) is (are) being mixed and which algorithm(s) to used. + // The correspondances of the indices are specified in mixQuantity. + // bool values: + // 0 : quantity is not used for mixing + // 1 : quantity is used for mixing + bool quantity[numQuantities]; + mixAlgorithm algorithm[numQuantities]; + Real mixingParameter[numQuantities]; + +}; + +#include "Communication/LSMSCommunication.hpp" + +template +void simpleMixing(T *fold, T* fnew, int n, Real alpha) +{ + if(alpha>1.0) alpha = 1.0; + if(alpha<0.0) alpha = 0.0; + Real beta = 1.0 - alpha; + + for(int i=0; i +class BroydenMixing { + + int vectorSize; // size of vectors to be mixed + int currentIteration; // currently used number of iterations + int iterationReset; // number of iterations after which the Broyden mixing is reset + int maxBroydenLength; // maximum number of iterations that are used + std::vector vOld, F, dF; + std::vector w, cm; + std::vector > u,vt; + std::vector ipiv; + Real alpha, w0; + Matrix a,b; + +public: + void save(std::vector &fOld, std::vector &fNew, Real wtmp) + { + if(currentIteration &A,int nn) + { + int LDIM=A.l_dim(); + int LWORK = LDIM*LDIM; + double *WORK = new double[LWORK]; + int INFO; + + LAPACK::dgetrf_(&nn,&nn,&A(0,0),&LDIM,&ipiv[0],&INFO); + LAPACK::dgetri_(&nn,&A(0,0),&LDIM,&ipiv[0],WORK,&LWORK,&INFO); + + delete WORK; + } + + void init(Real a_, int vs, int mbl=10, int itres=25) + { + alpha=a_; vectorSize=vs; currentIteration=0; maxBroydenLength=mbl; iterationReset=itres; + vOld.resize(vectorSize); F.resize(vectorSize); dF.resize(vectorSize); + w.resize(maxBroydenLength); cm.resize(maxBroydenLength); + a.resize(mbl,mbl); b.resize(mbl,mbl); ipiv.resize(mbl+1); + vt.resize(maxBroydenLength); u.resize(maxBroydenLength); + for(int i=0; i &fOld, std::vector &fNew, Real rms) + { + if(currentIteration==0) + { + // first iteration: perform linear mixing, set up internal storage + for(int i=0; i(comm, dFnorm); + globalSum(comm, Fnorm); +// + dFnorm=std::sqrt(dFnorm); + Fnorm=std::sqrt(Fnorm); + Real fac2=1.0/dFnorm; + Real fac1=alpha*fac2; + for(int i=0; i 0 && currentIteration>iterationReset) + currentIteration=0; + } +}; +*/ + +class Mixing { +public: + // virtual void updateChargeDensity(LSMSSystemParameters &lsms, AtomData &a) = 0; + virtual void updateChargeDensity(LSMSCommunication &comm, LSMSSystemParameters &lsms, std::vector &as) = 0; + // virtual void updatePotential(LSMSSystemParameters &lsms, AtomData &a) = 0; + virtual void updatePotential(LSMSCommunication &comm, LSMSSystemParameters &lsms, std::vector &as) = 0; + virtual void prepare(LSMSCommunication &comm, LSMSSystemParameters &lsms, std::vector &as) = 0; +}; + +/* +class NoMixing : public Mixing { +public: + void updateChargeDensity(LSMSSystemParameters &lsms, AtomData &a) {} + void updateChargeDensity(LSMSSystemParameters &lsms, std::vector &as) {} + void updatePotential(LSMSSystemParameters &lsms, AtomData &a) {} + void updatePotential(LSMSSystemParameters &lsms, std::vector &as) {} + void prepare(LSMSSystemParameters &lsms, std::vector &as) {} +}; + + +class FrozenPotential : public Mixing { + +public: + + void updateChargeDensity(LSMSSystemParameters &lsms, AtomData &a) + { + a.rhotot = a.rhoNew; + } + + void updateChargeDensity(LSMSSystemParameters &lsms, std::vector &as) + { + for(int i=0; i &as) {} + + void prepare(LSMSSystemParameters &lsms, std::vector &as) {} + +}; + + +class SimpleChargeDensityMixing : public Mixing { + +public: + Real alpha; + + SimpleChargeDensityMixing(Real _alpha) : alpha(_alpha) {} + + void updateChargeDensity(LSMSSystemParameters &lsms, AtomData &a) + { + simpleMixing( &a.rhotot(0,0), &a.rhoNew(0,0), a.rhotot.size(), alpha); + simpleMixing( &a.xvalws[0], &a.xvalwsNew[0], 2, alpha); + } + + void updateChargeDensity(LSMSSystemParameters &lsms, std::vector &as) + { + for(int i=0; i &as) + { + for(int i=0; i &as) {} + +}; + + +class SimplePotentialMixing : public Mixing { + +public: + Real alpha; + + SimplePotentialMixing(Real _alpha) : alpha(_alpha) {} + + void updateChargeDensity(LSMSSystemParameters &lsms, AtomData &a) + { + a.rhotot = a.rhoNew; + a.xvalws[0]=a.xvalwsNew[0]; + a.xvalws[1]=a.xvalwsNew[1]; + } + + void updateChargeDensity(LSMSSystemParameters &lsms, std::vector &as) + { + for(int i=0; i &as) + { + for(int i=0; i &as) {} + +}; + + +class EfMixing : public Mixing { + Real efOld, alpha; + +public: + + EfMixing(Real _alpha) : alpha(_alpha) {} + + void updateChargeDensity(LSMSSystemParameters &lsms, AtomData &a) + { + lsms.chempot = alpha * lsms.chempot + (1.0-alpha) * efOld; + } + + void updateChargeDensity(LSMSSystemParameters &lsms, std::vector &as) + { + lsms.chempot = alpha * lsms.chempot + (1.0-alpha) * efOld; + } + + void updatePotential(LSMSSystemParameters &lsms, AtomData &a) + { + //a.vr = a.vrNew; + } + + void updatePotential(LSMSSystemParameters &lsms, std::vector &as) + { + //for(int i=0; i &as) + { + efOld = lsms.chempot; + } + +}; +*/ + +void setupMixing(MixingParameters &mix, Mixing* &mixing); + + +#endif diff --git a/src/Main/random_evec.h b/src/Main/random_evec.h new file mode 100644 index 000000000..f2f9c2161 --- /dev/null +++ b/src/Main/random_evec.h @@ -0,0 +1,95 @@ +#ifndef RANDOM_EVEC_H +#define RANDOM_EVEC_H + +#include +#include + +void inline random_evec(double ev[3]) +{ + std::mt19937 rng; + do { + ev[0] = rng(); + ev[1] = rng(); + } while(ev[0]*ev[0]+ev[1]*ev[1]>1.0); + ev[2] = rng(); + double r = std::sqrt((1.0-ev[2]*ev[2])/(ev[0]*ev[0]+ev[1]*ev[1])); + ev[0] *= r; + ev[1] *= r; + if(rand()%2) ev[0] = -ev[0]; + if(rand()%2) ev[1] = -ev[1]; + if(rand()%2) ev[2] = -ev[2]; +} + +#ifdef XYZZ_MEIS + +#ifdef ISING + + void inline random_evec_1(double ev[3]) + { + ev[0]=ev[1]=0.0; + ev[2]=1.0; + if(rng()%2 == 0) ev[2]=-ev[2]; + } +#else + void inline random_evec_1(double ev[3]) + { + double x,y,z; + do { + x = rnd(rng); + y = rnd(rng); + } while(x*x+y*y>1); + z = rnd(rng); + double r = sqrt((1-z*z)/(x*x+y*y)); + x *= r; + y *= r; + if (rng() % 2 == 0) x = -x; + if (rng() % 2 == 0) y = -y; + if (rng() % 2 == 0) z = -z; + r=1.0/sqrt(x*x+y*y+z*z); + ev[0]=x*r; ev[1]=y*r; ev[2]=z*r; + } +#endif + +#ifdef ISING + void inline random_evec(double ev[3]) + { + ev[2]=-ev[2]; + } +#else + void inline random_evec(double ev[3]) + { + double x, y, z; + do { + x = rnd(rng); y = rnd(rng); + } while(x*x+y*y>1); + z = rnd(rng); + double r = sqrt((1-z*z)/(x*x+y*y)); + x *= r; y*= r; + if (rng() % 2 == 0) x = -x; + if (rng() % 2 == 0) y = -y; + if (rng() % 2 == 0) z = -z; + // Project out the parallel component; + r = x*ev[0] + y*ev[1] + z*ev[2]; + x -= r*ev[0]; y -= r*ev[1]; z -= r*ev[2]; + r = x*x + y*y + z*z; + double t = 1-0.3*rnd(rng); + ev[0] *= t; ev[1] *= t; ev[2] *= t; + r = sqrt((1-t*t)/r); + ev[0] += x*r; ev[1] += y*r; ev[2] += z*r; + r=1.0/sqrt(ev[0]*ev[0]+ev[1]*ev[1]+ev[2]*ev[2]); + ev[0]*=r; ev[1]*=r; ev[2]*=r; + + /* + ev[2]=1.0-2.0*rnd(rng); + // ev[2]=rnd11(rng); + double phi=2.0*M_PI*rnd(rng); + // double phi=rnd0pi(rng); + double cos_theta=sqrt(1-ev[2]*ev[2]); + ev[0]=cos_theta*cos(phi); + ev[1]=cos_theta*sin(phi); + */ + } +#endif +#endif + +#endif diff --git a/src/Main/read_input.cpp b/src/Main/read_input.cpp new file mode 100644 index 000000000..f250e1fab --- /dev/null +++ b/src/Main/read_input.cpp @@ -0,0 +1,577 @@ +#include + +#include "lua.hpp" +//#include "lua.h" +//#include "lauxlib.h" +//#include "lualib.h" + +#ifdef _OPENMP +#include +#endif + +#include "PhysicalConstants.hpp" + +#include "SystemParameters.hpp" +#include "mixing.hpp" +#include "LuaInterface/LuaSupport.hpp" +#include "../Potential/PotentialShifter.hpp" + +#include + +void repeatBasisCell(LSMSSystemParameters &lsms, CrystalParameters &crystal, int nx, int ny, int nz, int unique) +{ + int numBasis=crystal.num_atoms; + int numSites=numBasis*nx*ny*nz; + + Matrix basis,basis_evecs; + std::vector basis_type; + basis=crystal.position; + basis_evecs=crystal.evecs; + basis_type=crystal.type; + + crystal.position.resize(3,numSites); + crystal.evecs.resize(3,numSites); + crystal.type.resize(numSites); + + if(unique) + { + crystal.types.resize(numSites); + crystal.num_types=numSites; + for(int i=0; i=numBasis) + { + crystal.types[i]=crystal.types[ib]; + crystal.types[i].number_of_instances=1; + crystal.types[i].first_instance=i; + } + } else { + crystal.type[i]=basis_type[ib]; + } + crystal.evecs(0,i)=basis_evecs(0,ib); + crystal.evecs(1,i)=basis_evecs(1,ib); + crystal.evecs(2,i)=basis_evecs(2,ib); + i++; + } + } + crystal.num_atoms=numSites; + crystal.bravais(0,0)*=nx; + crystal.bravais(1,0)*=nx; + crystal.bravais(2,0)*=nx; + crystal.bravais(0,1)*=ny; + crystal.bravais(1,1)*=ny; + crystal.bravais(2,1)*=ny; + crystal.bravais(0,2)*=nz; + crystal.bravais(1,2)*=nz; + crystal.bravais(2,2)*=nz; + + lsms.num_atoms=numSites; +} + +int readInput(lua_State *L, LSMSSystemParameters &lsms, CrystalParameters &crystal, MixingParameters &mix, PotentialShifter &potentialShifter, + AlloyMixingDesc& alloyDesc) +{ + +// c read in the structure identity................................. +// read(10,'(a)') systemid +// CHARACTER*50 + + luaGetStrN(L,"systemid",lsms.systemid,50); + snprintf(lsms.potential_file_in,128,"v_%s",lsms.systemid); + snprintf(lsms.potential_file_out,128,"w_%s",lsms.systemid); + luaGetStrN(L,"potential_file_in",lsms.potential_file_in,128); + luaGetStrN(L,"potential_file_out",lsms.potential_file_out,128); + lsms.pot_in_type=0; // HDF5 + luaGetInteger(L,"pot_in_type",&lsms.pot_in_type); + lsms.pot_out_type=-1; // don't write potential + luaGetInteger(L,"pot_out_type",&lsms.pot_out_type); + +// c read in the standard output target switch....................... +// read(10,'(a)') output_to_screen + +// c ================================================================ +// c read in subroutine stop level +// read(10,'(a)') istop +// c write(6,'(a)') istop + + char ctmp[32]; strncpy(ctmp,"main",32); + luaGetStrN(L,"istop",ctmp,32); lsms.global.setIstop(ctmp); + +// c ================================================================ +// c read in print level for a particular node and rest of the nodes. +// read(10,* ) node_print,print_instr,nprint +// c write(6,'(3i5)') node_print,print_instr,nprint + luaGetInteger(L,"print_node",&lsms.global.print_node); + luaGetInteger(L,"default_iprint",&lsms.global.default_iprint); + luaGetInteger(L,"iprint",&lsms.global.iprint); +#ifdef _OPENMP + lsms.global.GPUThreads=std::min(16,omp_get_max_threads()); +#else + lsms.global.GPUThreads=1; +#endif + luaGetInteger(L,"gpu_threads",&lsms.global.GPUThreads); +// c ================================================================ +// c read in the number of atoms in the system....................... +// read(10,* ) num_atoms + lsms.num_atoms=0; + luaGetInteger(L,"num_atoms", &lsms.num_atoms); +// if(num_atoms.lt.1 .or. num_atoms.gt.max_atoms) then +// write(6,'(/,'' RDIN_ATOM_FT::'', +// > '' num_atoms exceeds the upper limit'')') +// write(6,'( '' num_atoms:'',i5)')num_atoms +// write(6,'( '' max_atoms:'',i5)')max_atoms +// call fstop(sname) +// endif + + lsms.relativity=scalar; + lsms.nrelc=lsms.nrelv=0; + char rel_str[80]; + luaGetStrN(L,"relativity",rel_str,40); + switch(rel_str[0]) + { + case 'n': case 'N': lsms.relativity=none; lsms.nrelv=10; lsms.nrelc=10; break; + case 's': case 'S': lsms.relativity=scalar; lsms.nrelv=0; lsms.nrelc=0; break; + case 'f': case 'F': lsms.relativity=full; lsms.nrelv=0; lsms.nrelc=0; break; + } + luaGetStrN(L,"core_relativity",rel_str,40); + switch(rel_str[0]) + { + case 'n': case 'N': lsms.nrelc=10; break; + case 'f': case 'F': lsms.nrelc=0; break; + } + lsms.clight=cphot*std::pow(10.0,lsms.nrelv); + + lsms.mtasa = 0; + luaGetInteger(L,"mtasa",&lsms.mtasa); + lsms.fixRMT = 0; + luaGetInteger(L,"fixRMT",&lsms.fixRMT); +// else if( mtasa .lt. -3 ) then +// write(6,'(/,'' RDIN_ATOM_FT:: mtasa andor rmt0'',i5,d13.4)') +// > mtasa,rmt0 +// call fstop(sname) +// endif + +// c read spin polarization index.................................... +// read(10,* ) nspin,i_vdif,iexch + +/* nspin = 1 : non spin polarized + 2 : spin polarized, collinear + 3 : spin polarized, non-collinear + 4 : fully relativistic +*/ + lsms.nspin=2; + luaGetInteger(L,"nspin",&lsms.nspin); + if(lsms.relativity==full) + { + lsms.nspin=3; + } + + if(lsms.nspin>1) lsms.n_spin_pola=2; else lsms.n_spin_pola=1; + if(lsms.nspin>2) lsms.n_spin_cant=2; else lsms.n_spin_cant=1; + +// read exchange correlation functional specification: + for(int i=0; i=0) { + crystal.type[i]=crystal.type[t-1]; + crystal.types[crystal.type[i]].number_of_instances++; + } else { + fprintf(stderr,"Illegal type reference for atom %d : %d!\n",i+1,t); + exit(1); + } + + luaGetFieldFromStack(L,"evec"); + for(int j=0; j<3; j++) luaGetRealPositionFromStack(L,j+1,&crystal.evecs(j,i)); + lua_pop(L,1); + lua_pop(L,2); + } + + int xRepeat=1; + luaGetInteger(L,"xRepeat",&xRepeat); + int yRepeat=1; + luaGetInteger(L,"yRepeat",&yRepeat); + int zRepeat=1; + luaGetInteger(L,"zRepeat",&zRepeat); + int makeTypesUnique=1; + luaGetInteger(L,"makeTypesUnique",&makeTypesUnique); + + repeatBasisCell(lsms, crystal, xRepeat, yRepeat, zRepeat,makeTypesUnique); + + /* printf("after reading atomic site desc\n"); + luaStackDump(L); */ + + // print site values as check + /* std::cout << "num_atoms = " << crystal.num_atoms << std::endl; + for(int i = 0; i < crystal.num_atoms; i++) { + std::cout << "atom[" << i << "] = " << crystal.types[i].name << std::endl; + std::cout << "Z = " << crystal.types[i].Z << std::endl; + } */ + + // for Wang-Landau for alloys + + // read in alloy file information + snprintf(lsms.alloy_file_in,128,"bank_v_%s",lsms.systemid); + snprintf(lsms.alloy_file_out,128,"bank_w_%s",lsms.systemid); + luaGetStrN(L,"alloy_file_in",lsms.alloy_file_in,128); + luaGetStrN(L,"alloy_file_out",lsms.alloy_file_out,128); + lsms.alloy_in_type=0; // HDF5 + luaGetInteger(L,"alloy_in_type",&lsms.alloy_in_type); + lsms.alloy_out_type=-1; // don't write potential + luaGetInteger(L,"alloy_out_type",&lsms.alloy_out_type); + + // read in number of alloy classes + int nalloy_class = 0; + luaGetInteger(L,"nalloy_class",&nalloy_class); + alloyDesc.resize(nalloy_class); + + // read in atomic species for each class + for(int i = 0; i < alloyDesc.size(); i++) { + luaGetPositionInTable(L,"alloy_class",i+1); + + int ncomp; + luaGetIntegerFieldFromStack(L,"ncomp",&ncomp); + alloyDesc[i].resize(ncomp); + + luaGetFieldFromStack(L,"comp"); + for(int j = 0; j < alloyDesc[i].size(); j++) { + lua_pushinteger(L,j+1); + lua_gettable(L,-2); + + luaGetStrNFromStack(L,"atom",alloyDesc[i][j].name,4); + luaGetRealFieldFromStack(L,"conc",&alloyDesc[i][j].conc); + luaGetIntegerFieldFromStack(L,"Z",&alloyDesc[i][j].Z); + luaGetIntegerFieldFromStack(L,"Zc",&alloyDesc[i][j].Zc); + luaGetIntegerFieldFromStack(L,"Zs",&alloyDesc[i][j].Zs); + luaGetIntegerFieldFromStack(L,"Zv",&alloyDesc[i][j].Zv); + lua_pop(L,1); + } + lua_pop(L,3); + } + + // print values and quit to double-check + /* std::cout << "nalloy_class = " << alloyDesc.size() << std::endl; + for(int i = 0; i < alloyDesc.size(); i++) { + std::cout << "class[" << i << "].ncomp = " << alloyDesc[i].size() << std::endl; + for(int j = 0; j < alloyDesc[i].size(); j++) { + std::cout << "atom = " << alloyDesc[i][j].name << std::endl; + std::cout << "Z = " << alloyDesc[i][j].Z << std::endl; + std::cout << "Zc = " << alloyDesc[i][j].Zc << std::endl; + std::cout << "Zs = " << alloyDesc[i][j].Zs << std::endl; + std::cout << "Zv = " << alloyDesc[i][j].Zv << std::endl; + } + } + + printf("after reading alloy desc\n"); + luaStackDump(L); */ + +// c ================================================================ +// c read in a title to identify the system ......................... +// read(10,'(a)') system_title + luaGetStrN(L,"system_title",lsms.title,80); +// c ================================================================ +// c Read number of Gaussian points for r and theta integrations..... +// read(10,* ) ngaussr,ngaussq +// c ================================================================ +// c Read in name of the atom........................................ +// c Read in the atom position vector................................ +// c Read in cut off radius for the LIZ of the atom.................. +// c Read in radius steps for lmax, lmax-1, lmax-2, lmax-3 .......... +// c ================================================================ +// c +// c ================================================================ +// c read in names of info_table & info_evec files:.................. +// c ================================================================ +// read(10,'(a)') text +// read(10,'(2a30)')info_table,info_evec + +// c ================================================================ +// c read in parameters that control energy inregration:............. +// c ================================================================ +// c igrid : specifies energy contour 1=slow...................... +// c igrid : specifies energy contour 2=gaussian.................. +// c igrid : specifies energy contour 3=Don's Fermi function poles +// c +// c for igrid =1...[Zero Temperature Calculations Only]............. +// c ebot : bottom of contour: real axis [may be mod. by semcor].. +// c etop : top of contour: real axis [usually reset to chempot].. +// c eitop : top of contour on imaginary axis................... +// c eibot : bottom of contour on imaginary axis................... +// c npts : number of energy points per 0.1 ry.................... +// c kelvin : not used.............................................. +// c +// c for igrid =2...[Zero Temperature Calculations Only]............. +// c ebot : bottom of contour: real axis [may be mod. by semcor].. +// c etop : top of contour: real axis [usually reset to chempot].. +// c eitop : not used.............................................. +// c eibot : not used.............................................. +// c npts : number of Gaussian distributed energy points.......... +// c kelvin : not used.............................................. +// c +// c for igrid =3...[Finite Temperature Calculations Only]........... +// c ebot : bottom of contour: real axis [may be mod. by semcor].. +// c [then reset in congauss]. +// c etop : top of contour on real axis [usually reset to chempot] +// c eitop : not used.............................................. +// c eibot : not used.............................................. +// c npts : not used.............................................. +// c kelvin : temperature in kelvin.................................. +// c nument : # of gaussian points on elliptical contour for Entropy +// c ================================================================ + + luaGetIntegerFieldInTable(L,"energyContour","grid",&lsms.energyContour.grid); + luaGetRealFieldInTable(L,"energyContour","ebot",&lsms.energyContour.ebot); + luaGetRealFieldInTable(L,"energyContour","etop",&lsms.energyContour.etop); + luaGetRealFieldInTable(L,"energyContour","eibot",&lsms.energyContour.eibot); + luaGetRealFieldInTable(L,"energyContour","eitop",&lsms.energyContour.eitop); + luaGetIntegerFieldInTable(L,"energyContour","npts",&lsms.energyContour.npts); + lsms.energyContour.maxGroupSize=50; + luaGetIntegerFieldInTable(L,"energyContour","maxGroupSize",&lsms.energyContour.maxGroupSize); + +// c +// c ================================================================ +// c read in controls for performing SCF calculation:................ +// c ================================================================ +// c nscf : maximum number of scf iterations requested........ + lsms.nscf = 1; + luaGetInteger(L, "nscf", &lsms.nscf); + +// read the frequency of writing the potential during an scf calculation (writeSteps) + lsms.writeSteps=30000; + luaGetInteger(L, "writeSteps", &lsms.writeSteps); + +// c alpdv : mixing parameter for chg. den. or potential....... +// c alpma : mixing parameter for moment density............... +// c alpev : mixing parameter for moment orientation........... +// c mix_quant : mixing charge density[potential] => 0[1].......... +// c mix_algor : mixing simple[DGAnderson] => 0[1]................. +// lsms.mixing = 4*mix_algor+mix_quant; -1: no mixing + lsms.mixing = -1; + + char quantity[80], algorithm[80]; + int numberOfMixQuantities = 0; + + // nullify all quantities; frozen potential will be set by default + for (int i = 0; i < mix.numQuantities; i++) + { + mix.quantity[i] = false; + mix.algorithm[i] = MixingParameters::noAlgorithm; + mix.mixingParameter[i] = 0.0; + } + + luaGetInteger(L, "numberOfMixQuantities", &numberOfMixQuantities); + + for (int i = 0; i < numberOfMixQuantities; i++) + { + luaGetPositionInTable(L, "mixing", i+1); + luaGetStrNFromStack(L, "quantity", quantity, 50); + + int quantityIdx = -1; + if (strcmp("no_mixing", quantity) == 0) + quantityIdx = MixingParameters::no_mixing; + else if (strcmp("charge", quantity) == 0) + quantityIdx = MixingParameters::charge; + else if (strcmp("potential", quantity) == 0) + quantityIdx = MixingParameters::potential; + else if (strcmp("moment_magnitude", quantity) == 0) + quantityIdx = MixingParameters::moment_magnitude; + else if (strcmp("moment_direction", quantity) == 0) + quantityIdx = MixingParameters::moment_direction; + + if (quantityIdx >= 0) mix.quantity[quantityIdx] = true; + + luaGetStrNFromStack(L, "algorithm", algorithm, 50); + + if (strcmp("simple", algorithm) == 0) + mix.algorithm[quantityIdx] = MixingParameters::simple; + else if (strcmp("broyden", algorithm) == 0) + mix.algorithm[quantityIdx] = MixingParameters::broyden; + + luaGetRealFieldFromStack(L, "mixing_parameter", &mix.mixingParameter[quantityIdx]); + + lua_pop(L,2); + + } + + lsms.rmsTolerance = 1.0e-8; + luaGetReal(L,"rmsTolerance",&lsms.rmsTolerance); + + int potentialShiftSwitch = 0; + potentialShifter.vSpinShiftFlag = false; +// check if potentialShift has been assigned + lua_getglobal(L,"potentialShift"); + if(lua_istable(L,-1)) + { + lua_pop(L,1); + luaGetIntegerFieldInTable(L, "potentialShift","switch", &potentialShiftSwitch); + if (potentialShiftSwitch) + { + potentialShifter.vSpinShiftFlag = true; + luaGetRealFieldInTable(L, "potentialShift","shift_min", &potentialShifter.minShift); + luaGetRealFieldInTable(L, "potentialShift","shift_max", &potentialShifter.maxShift); + } + } else { + lua_pop(L,1); + } + + // check to read evec and constraints from file: + lsms.evecInfoFile[0]=0; + luaGetStrN(L,"systemid",lsms.evecInfoFile,120); + + // read default block size for zblock_lu + lsms.zblockLUSize=0; + luaGetInteger(L,"zblockLUSize",&lsms.zblockLUSize); +// c iharris = 0 : do not calculate harris energy.................... +// c iharris = 1 : calculate harris energy using updated chem. potl.. +// c iharris >=2 : calculate harris energy at fixed chem. potl....... +// c i_potwrite : the number of iterations between potential writes. +// c movie = 0 : no movie data will be written..................... +// c = 1 : movie data will be written........................ +// c ctq : coefficient of torque ............................ +// c ================================================================ +// read(10,'(a)') text +// read(10, * ) nscf,alpdv,alpma,alpev,mix_quant,mix_algor, +// > iharris,i_potwrite,movie +// c ================================================================ +// c check consistencey of these parameters.......................... +// c ================================================================ +// if(i_potwrite.gt.nscf) then +// i_potwrite=nscf +// endif +// if(i_potwrite.lt.-nscf) then +// i_potwrite=-nscf +// end if +// if(mix_quant.ne.0 .and. mix_quant.ne.1) then +// write(6,'('' RDIN_ATOM_FT::'', +// > '' Incorrect input data for mix_quant ='', +// > 1i3)')mix_quant +// call fstop(sname) +// else if(mix_algor.gt.2) then +// write(6,'('' RDIN_ATOM_FT::'', +// > '' Incorrect input data for mix_algor ='', +// > 1i3)')mix_algor +// call fstop(sname) +// endif +// c ================================================================ +// c if calculating the harris energy make sure that mix_quant switch +// c is set mix the charge density................................... +// c ================================================================ +// if(iharris.ne.0) then +// mix_quant=0 +// endif +// c +// c ================================================================ +// c read in quantities that control Spin Dynamics :................. +// c ================================================================ +// c nstep : number of time steps [for SCF only : nstep=1 ]... +// c tstep : time step........................................ +// c etol : over-ride scf convergence tolerence : energy .... +// c ptol : over-ride scf convergence tolerence : pressure .. +// c eftol : over-ride scf convergence tolerence : Fermi engy. +// c rmstol : over-ride scf convergence tolerence : rmstol .... +// c ---------------------------------------------------------------- +// c etol,ptol,eftol, & rmstol can be relaxed for SD................. +// c ================================================================ +// read(10,'(a)') text +// c write(6,'(a70)')text +// read(10,*) ntstep,tstep,etol,ptol,eftol,rmstol +// c write(6,'('' RDIN_ATOM_FT: ntstep,tstep,etol,ptol,eftol,rmstol'', +// c >i4,f10.4,3x,4d10.5)') ntstep,tstep,etol,ptol,eftol,rmstol +// c +// c ================================================================ +// c read controls for calculation of torque & exchange interactions. +// c ================================================================ +// c ctq : +// c j_ij : +// c ================================================================ +// read(10,'(a)') text +// read(10, * ) ctq,j_ij +// c ================================================================ +// c check consistencey of these parameters.......................... +// c ================================================================ +// if(ctq.lt.0.0d0) then +// write(6,'('' RDIN_ATOM_FT::'', +// > '' Incorrect input data for ctq < 0.0'', +// > 1f10.5)')ctq +// call fstop(sname) +// else if(j_ij.ne.0 .and. j_ij.ne.1) then +// write(6,'('' RDIN_ATOM_FT::'', +// > '' Incorrect input data for j_ij <> 0, and <> 1'', +// > 1i5)')j_ij +// call fstop(sname) +// endif + + /* printf("End of read input\n"); + luaStackDump(L); */ + return 0; +} diff --git a/src/Main/rewl_lsms.cpp b/src/Main/rewl_lsms.cpp new file mode 100644 index 000000000..786b8f995 --- /dev/null +++ b/src/Main/rewl_lsms.cpp @@ -0,0 +1,876 @@ +// main driver for LSMS_3 class + +#include +#include +#include +#include +#include + +#include "Communication/distributeAtoms.hpp" +#include "Communication/LSMSCommunication.hpp" +#include "Core/CoreStates.hpp" +#include "Misc/Indices.hpp" +#include "Misc/Coeficients.hpp" +#include "VORPOL/VORPOL.hpp" +#include "Accelerator/Accelerator.hpp" +#include "Potential/PotentialShifter.hpp" +#include "PotentialIO.hpp" +#include "SystemParameters.hpp" +#include "EnergyContourIntegration.hpp" +#include "calculateChemPot.hpp" +#include "lsmsClass.hpp" +#include "ReplicaExchangeWL.hpp" +#include "EvecGenerator.h" +#include "WangLandau_REWL.h" +// #include "WangLandau_withoutKernel.h" +#include "ExhaustiveIsing.h" +#include "WangLandau2d.h" + +#ifdef _OPENMP +#include +#endif + +//#define USE_PAPI 1 + +#ifdef USE_PAPI +#include +#endif + +#define R_VALUE_OFFSET 2 + +int main(int argc, char *argv[]) +{ + + // MPI information + int size, rank, world_rank, my_group {-1}; + int *lsms_rank0; // an array to store the world_rank of the group leaders + // size has to be size_lsms * num_lsms + MPI_Comm local_comm; + MPI_Status status; + + + // Simulation info + int num_lsms {1}; // number of parallel LSMS instances + int size_lsms {-1}; // number of atoms in a lsms instance + int num_window {1}; // number of energy windows + int num_lsms_per_window {1}; // number of LSMS instances per windows + int num_steps {1}; // number of energy calculations + int MCstepCount {0}; // count the Monte Carlo steps executed + int REstepCount {0}; // count the replica exchange steps executed + int exchangeFrequency {10}; // number of MC steps between replica exchange + + double max_time; // maximum walltime for this run in seconds + bool restrict_time {false}; // was the maximum time specified? + bool restrict_steps {false}; // or the max. number of steps? + bool restart {false}; // is it a restarted simulation? + + double walltime_0, walltime; + double restartWriteFrequency = 30.0 * 60.0; + double nextWriteTime = restartWriteFrequency; + + double magnetization {0.0}; + double energy_accumulator {0.0}; // accumulates the energy to calculate the mean + int energies_accumulated {0}; + + typedef enum {Constant, Random, WangLandau_1d, ExhaustiveIsing, WangLandau_2d} EvecGenerationMode; + typedef enum {MagneticMoment, MagneticMomentZ, MagneticMomentX, MagneticMomentY} SecondDimension; + + EvecGenerationMode evecGenerationMode = Constant; + SecondDimension second_dimension = MagneticMoment; + double ev0[3] {0.0, 0.0, 1.0}; + + //Ying Wai: should return_moments_flag be initialized to false? + bool return_moments_flag {true}; // true -> return all magnetic moments from lsms run at each step. + bool generator_needs_moment {false}; + + typedef enum {OneStepEnergy, MultiStepEnergy, ScfEnergy} EnergyCalculationMode; + EnergyCalculationMode energyCalculationMode = OneStepEnergy; + int energyIndex {1}; // index for the return value to use for the MC step (0: total energy, 1: band energy) + + + // Input/output filenames + char prefix[40] {}; + char i_lsms_name[64]; + char gWL_in_name[64], gWL_out_name[64]; + char mode_name[64]; + char energy_calculation_name[64]; + char stupid[37]; + + char step_out_name[64]; + char wl_step_out_name[128]; + char *wl_stepf = nullptr; + bool step_out_flag = false; + std::ofstream step_out_file; + + sprintf(i_lsms_name, "i_lsms"); + gWL_in_name[0] = gWL_out_name[0] = 0; + mode_name[0] = 0; + energy_calculation_name[0] = 0; + + + // check command line arguments + for (int i=0; iNUM_PAPI_EVENTS) hw_counters=NUM_PAPI_EVENTS; + int papi_events[NUM_PAPI_EVENTS]; // = {PAPI_TOT_INS,PAPI_TOT_CYC,PAPI_FP_OPS,PAPI_VEC_INS}; + char *papi_event_name[] = {"PAPI_TOT_INS","PAPI_FP_OPS", + "RETIRED_SSE_OPERATIONS:DOUBLE_ADD_SUB_OPS:DOUBLE_MUL_OPS:DOUBLE_DIV_OPS:OP_TYPE", + "RETIRED_SSE_OPERATIONS:SINGLE_ADD_SUB_OPS:SINGLE_MUL_OPS:SINGLE_DIV_OPS:OP_TYPE"}; + // "RETIRED_INSTRUCTIONS", + // "RETIRED_MMX_AND_FP_INSTRUCTIONS:PACKED_SSE_AND_SSE2", + // "RETIRED_SSE_OPERATIONS:DOUBLE_ADD_SUB_OPS:DOUBLE_MUL_OPS:DOUBLE_DIV_OPS:1", + // "RETIRED_SSE_OPERATIONS:SINGLE_ADD_SUB_OPS:SINGLE_MUL_OPS:SINGLE_DIV_OPS:1" + // get events from names: + for(int i=0; ii) hw_counters=i; + } + } + long long papi_values[NUM_PAPI_EVENTS+4]; + // printline("PAPI: "+ttos(hw_counters)+" counters available",std::cout,parameters.myrankWorld); + if(hw_counters>NUM_PAPI_EVENTS) hw_counters=NUM_PAPI_EVENTS; + long long papi_real_cyc_0 = PAPI_get_real_cyc(); + long long papi_real_usec_0 = PAPI_get_real_usec(); + long long papi_virt_cyc_0 = PAPI_get_virt_cyc(); + long long papi_virt_usec_0 = PAPI_get_virt_usec(); + PAPI_start_counters(papi_events,hw_counters); +#endif + +#ifndef SVN_REV +#define SVN_REV "unknown" +#endif + + + // initialize MPI: + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + world_rank = rank; + MPI_Comm_size(MPI_COMM_WORLD, &size); + + walltime_0 = MPI_Wtime(); + + // Rank 0 prints out simulation info + if(world_rank == 0) + { + std::cout << "LSMS_3" << std::endl; + std::cout << " SVN revision " << SVN_REV << std::endl << std::endl; +#ifdef USE_PAPI + std::cout << " Using Papi counters" << std::endl << std::endl; +#endif + std::cout << " Size of LSMS instances = " << size_lsms << " atoms\n"; + std::cout << " Number of Wang-Landau energy windows = "<< num_window << std::endl; + std::cout << " Number of LSMS instances = " << num_lsms << std::endl; + std::cout << " LSMS Energy calculated using "; + + switch (energyCalculationMode) + { + case OneStepEnergy: + std::cout << "oneStepEnergy [frozen potential band energy]" << std::endl; + break; + case MultiStepEnergy: + std::cout << "multiStepEnergy [frozen potential band energy with converged Fermi energy]" << std::endl; + break; + case ScfEnergy: + std::cout << "scfEnergy [self-consistent total energy]" << std::endl; + break; + default: + std::cout << "UNKNOWN ENERGY CALCULATION METHOD" << std::endl; + exit(1); + } + + if (restrict_steps) + std::cout << " Number of gWL steps = " << num_steps << std::endl; + if (restrict_time) + std::cout << " Maximum walltime = " << max_time << "s\n"; + + //std::cout << " Processor alignment (process allocation quantization) = " << align << std::endl; + + switch (evecGenerationMode) + { + case Constant : + std::cout << " Constant moments direction along " + << ev0[0] << " " << ev0[1] << " " << ev0[2] << std::endl; + break; + case Random : + std::cout << " Random distribution of moments (no Wang-Landau)" << std::endl; + break; + case WangLandau_1d : + std::cout << " Wang-Landau for one continuous variable (energy)" << std::endl; + break; + case ExhaustiveIsing : + std::cout << " Exhaustive Ising sampling" << std::endl; + break; + case WangLandau_2d : + std::cout << " Wang-Landau for two continuous variable (energy, "; + switch (second_dimension) + { + case MagneticMoment : std::cout << "magnitude of magnetization)"; break; + case MagneticMomentX : std::cout<<"x component of magnetization)"; break; + case MagneticMomentY : std::cout<<"y component of magnetization)"; break; + case MagneticMomentZ : std::cout<<"z component of magnetization)"; break; + } + std::cout << std::endl; + break; + default: + std::cout << " ERROR: UNKNOWN EVEC GENERATION MODE\n"; + exit(1); + } + + if (step_out_flag) + std::cout << " Step output written to: " << step_out_name << std::endl; + std::cout << std::endl; + + if (step_out_flag && (evecGenerationMode == WangLandau_1d)) + { + // step_out_flag = false; + snprintf(wl_step_out_name, 127, "wl1d_%s", step_out_name); + wl_stepf = wl_step_out_name; + } + + if (step_out_flag) + { + step_out_file.open(step_out_name); + step_out_file << "#"; + for(int i=0; i group=" << my_group + // << " local_rank=" << rank << std::endl; + + // build the WL communicators + MPI_Comm WLwalkersComm; + MPI_Group MPI_GROUP_WORLD, WLwalkersGroup; + + MPI_Comm_group (MPI_COMM_WORLD, &MPI_GROUP_WORLD); + MPI_Group_incl (MPI_GROUP_WORLD, num_lsms, lsms_rank0, &WLwalkersGroup); + MPI_Comm_create (MPI_COMM_WORLD, WLwalkersGroup, &WLwalkersComm); + + // Prepare seeds for RNG + std::seed_seq seq {MPI_Wtime()}; + std::vector seeds(num_lsms); + seq.generate(seeds.begin(), seeds.end()); + + // Initialize REWL class + REWL *rewl {}; + if (rank == 0) + rewl = new REWL(WLwalkersComm, num_window, num_lsms_per_window, seeds[my_group]); + + // now we get ready to do some calculations... + + double energy {0.0}; + double bandEnergy {0.0}; + double** evecs {}; + double* vSpinShifts {}; + double* evecsAndSpinShifts {}; + int op {5}; + //int i_values[10]; + + PotentialShifter potentialShifter; + + snprintf(prefix, 38, "%d_", my_group); + //LSMS lsms_calc(local_comm, i_lsms_name, prefix, potentialShifter); + //LSMS lsms_calc(local_comm, i_lsms_name, prefix); + LSMS lsms_calc(local_comm, i_lsms_name, prefix, my_group); + + potentialShifter.vSpinShiftFlag = lsms_calc.vSpinShiftFlag(); + potentialShifter.minShift = lsms_calc.potentialMinShift(); + potentialShifter.maxShift = lsms_calc.potentialMaxShift(); + + evecs = (double **) malloc(sizeof(double *)); + evecs[0] = (double*) malloc(sizeof(double) * 3 * size_lsms); + for (int i = 0; i < 3*size_lsms; i++) + evecs[0][i] = 0.0; + // YingWai's temp. fix (Sep 2, 14): + // The if-statement causes null pointer dereference when vSpinShiftFlag = false + //if (potentialShifter.vSpinShiftFlag) { + vSpinShifts = (double*) malloc(sizeof(double) * size_lsms); + for (int i = 0; i < size_lsms; i++) + vSpinShifts[i] = 0.0; + evecsAndSpinShifts = (double*) malloc(sizeof(double) * 4 * size_lsms); + //} + + char *wl_inf {}; + char *wl_outf {}; + // Ying Wai's note: (Apr 30, 14) + // To read from the corresponding WLrestart file, + // the name of wl_inf needs to be reconstructed for different walker (using my_group) + if (restart) { + char restartFile[51]; + sprintf(restartFile, "WLrestart%05d.jsn", my_group); + wl_inf = restartFile; + } + else { + if (gWL_in_name) wl_inf = gWL_in_name; + if (gWL_out_name) wl_outf = gWL_out_name; + } + + EvecGenerator *generator {}; + + if (world_rank == 0) + { + snprintf(prefix, 38, "Group %4d: ", my_group); + std::cout << prefix << "executing LSMS(C++) for " << lsms_calc.numSpins() << " atoms\n" ; + std::cout << prefix << " LSMS version = " << lsms_calc.version() << std::endl; + } + + if (rank == 0) + { + // Initialize the correct evec generator + switch (evecGenerationMode) + { + case Random : + generator = new RandomEvecGenerator(size_lsms); + break; + case Constant : + generator = new ConstantEvecGenerator(size_lsms, ev0, 1); + break; + case WangLandau_1d : + generator = new WL1dEvecGenerator(size_lsms, 1, num_window, num_lsms_per_window, my_group, evecs, potentialShifter, vSpinShifts, wl_inf, wl_outf, wl_stepf); + break; + case ExhaustiveIsing : + //YingWai: need to check if num_lsms should be changed to 1 (Nov 12, 14) + generator = new ExhaustiveIsing1dEvecGenerator(size_lsms, num_lsms, evecs, wl_inf, wl_outf); + break; + case WangLandau_2d : + //YingWai: need to check if num_lsms should be changed to 1 (Nov 12, 14) + generator = new WL2dEvecGenerator(size_lsms, num_lsms, evecs, wl_inf, wl_outf, wl_stepf); + break; + default : + std::cerr << "The code should never arrive here: UNKNOWN EVEC GENERATION MODE\n"; + exit(1); + } + + // Generate the initial configuration + std::cout << "starting main calculation in group " << my_group << std::endl; + + if (potentialShifter.vSpinShiftFlag) + generator -> initializeEvecAndPotentialShift(my_group, evecs[0], vSpinShifts); + else + generator -> initializeEvec(my_group, evecs[0]); + + // Ying Wai's note (Feb 4, 14) + // Missing here: see if the energy of the state is within the energy range + // if not, generate a new state until it is + + generator -> startSampling(); + + } + + op = 5; + MPI_Bcast(&op, 1, MPI_INT, 0, local_comm); + /* + Recognized opcodes: + 5: calculate energy + recognized energy calculation modes: + OneStepEnergy : + calclulate frozen potential band energy in one step (don't converge Ef) + use only if the Fermi energy will not change due to MC steps! + The only method available in LSMS_1.9 + MultiStepEnergy : + calculate frozen potential band energy after converging Fermi energy + This should be the new default method if the Fermi energy doesn't change + multiStepEnergy only performs one step and should be equivalent to oneStepEnergy + The tolerance for Ef convergence can be set with LSMS::setEfTol(Real). + The default tolerance is set in the LSMS::LSMS constructor (currently 1.0e-6). + The maximum number of steps is read from the LSMS input file 'nscf' parameter. + ScfEnergy : + calculate the selfconsistent total energy. + The maximum number of steps is read from the LSMS input file 'nscf' parameter. + + 10: get number of sites + */ + + bool more_work = true; + while (more_work) + { + + switch (op) + { + case 5 : + + // rank 0 sends evecs to the rest of the group + if (potentialShifter.vSpinShiftFlag) { + // double* evecsAndSpinShifts {}; + // evecsAndSpinShifts = (double*) malloc(sizeof(double) * 4 * size_lsms); + for (int i=0; i determineAcceptance(0, energy, magnetization); + } + else + newConfigAcceptance = generator -> determineAcceptance(0, energy); + + recentAcceptance = newConfigAcceptance; + + // Update histogram, change gamma and check flatness + if (potentialShifter.vSpinShiftFlag) { + if (generator -> updateHistogram(0, evecs[0], vSpinShifts, newConfigAcceptance)) + more_work = false; + } + else { + if (generator -> updateHistogram(0, evecs[0], newConfigAcceptance)) + more_work = false; + } + MCstepCount++; + + // Replica-exchange + //MPI_Barrier(WLwalkersComm); // necessary? + + bool replicaExchangeAcceptance {false}; + if (MCstepCount % exchangeFrequency == 0) + { + MPI_Barrier(WLwalkersComm); // necessary? + + Real myDOSRatio {0.0}; + Real energyTemp = energy; + + rewl -> assignSwapPartner(); + rewl -> swapEnergy(energyTemp); + + // Determines if the energy received is within my energy range + // and get the DOS ratio + myDOSRatio = generator -> getDOSRatio(0, energyTemp); + + // Exchange DOS ratios and calculate acceptance probability + replicaExchangeAcceptance = rewl -> determineAcceptance(myDOSRatio); + + // Exchange configurations + if (replicaExchangeAcceptance) + { + energy = energyTemp; + recentAcceptance = replicaExchangeAcceptance; + + //printf("YW's check. Walker %5d: Before exchange.\n", my_group); + //for (int yw=0; yw<3*size_lsms; yw++) + // printf("YW. Walker %5d: i = %d, evecs = %10.5e\n", my_group, yw, evecs[0][yw]); + rewl -> swapConfig(evecs[0], 3*size_lsms); + if (potentialShifter.vSpinShiftFlag) + rewl -> swapPotentialShifts(vSpinShifts, size_lsms); + + // calculate magnetization (or do it before determineAcceptance?) + if (generator_needs_moment) + { + double m0 {0.0}, m1 {0.0}, m2 {0.0}; + for(int i = 0; i < 3*size_lsms; i += 3) + { + m0 += evecs[0][i]; + m1 += evecs[0][i+1]; + m2 += evecs[0][i+2]; + } + switch (second_dimension) + { + case MagneticMoment : magnetization = std::sqrt(m0*m0 + m1*m1 + m2*m2); break; + case MagneticMomentX : magnetization = m0; break; + case MagneticMomentY : magnetization = m1; break; + case MagneticMomentZ : magnetization = m2; break; + } + + if (potentialShifter.vSpinShiftFlag) { + if (generator -> updateHistogramFromRE(0, evecs[0], energy, magnetization, vSpinShifts, my_group)) + more_work = false; + } + else { + if (generator -> updateHistogramFromRE(0, evecs[0], energy, magnetization, my_group)) + more_work = false; + } + } + else { + if (potentialShifter.vSpinShiftFlag) { + if (generator -> updateHistogramFromRE(0, evecs[0], energy, vSpinShifts, my_group)) + more_work = false; + } + else { + if (generator -> updateHistogramFromRE(0, evecs[0], energy, my_group)) + more_work = false; + } + } + } + REstepCount++; + } + + // Prepare a new configuration + + //if (MCstepCount % exchangeFrequency == 0 && replicaExchangeAcceptance) + // recentAcceptance = replicaExchangeAcceptance; + //else + // recentAcceptance = newConfigAcceptance; + + generator -> generateEvec(0, evecs[0], recentAcceptance); + if (potentialShifter.vSpinShiftFlag) + generator -> generatePotentialShift(0, vSpinShifts, recentAcceptance); + + num_steps -= 1; + + if (restrict_steps && num_steps <= 0) more_work = false; + if (restrict_steps) std::cout << " " << num_steps << " steps remaining\n"; + walltime = MPI_Wtime() - walltime_0; + if (restrict_time && walltime >= max_time) more_work = false; + if (restrict_time) std::cout << " " << max_time - walltime << " seconds remaining\n"; + + // Determine if more work will be done; this will be broadcasted to all later + if (!more_work) op = 2; + + if (step_out_flag && newConfigAcceptance) + { + step_out_file << "# iteration " << energies_accumulated << std::endl; + step_out_file.precision(15); + step_out_file << energies_accumulated << std::endl; + step_out_file << energy << " " << bandEnergy << std::endl; + if (potentialShifter.vSpinShiftFlag) { + for (int j=0; j<4*size_lsms; j+=4) + step_out_file << evecs[0][j] << " " << evecs[0][j+1] << " " + << evecs[0][j+2] << " " << vSpinShifts[j] << std::endl; + } + else { + for (int j=0; j<3*size_lsms; j+=3) + step_out_file << evecs[0][j] << " " << evecs[0][j+1] << " " + << evecs[0][j+2] << std::endl; + } + } + + // write restart file every restartWriteFrequency seconds + if (walltime > nextWriteTime) + { + if (rank == 0) + { + char restartFile[51]; + sprintf(restartFile, "WLrestart%05d.jsn", my_group); + generator -> writeState(restartFile); + //generator -> writeState("WLrestart.jsn"); + nextWriteTime += restartWriteFrequency; + } + } + + } + + MPI_Bcast(&op, 1, MPI_INT, 0, local_comm); + if (op == 2) more_work = false; + + } + + // YingWai: or can be replaced by a collective call? (Dec 18, 13) + MPI_Barrier(MPI_COMM_WORLD); + + if (rank == 0) + { + char restartFile[51]; + sprintf(restartFile, "WLrestart%05d.jsn", my_group); + generator -> writeState(restartFile); + + delete generator; + MPI_Comm_free(&WLwalkersComm); + MPI_Group_free(&WLwalkersGroup); + } + + free(evecs[0]); + free(evecs); + free(vSpinShifts); + free(evecsAndSpinShifts); + + // Freeing WL communication related comm. + //MPI_Comm_free(&WLwalkersComm); + //MPI_Group_free(&WLwalkersGroup); + MPI_Group_free(&MPI_GROUP_WORLD); + } + + // Wrapping up: + + if (num_lsms > 1) + { + // make sure everyone arrives here: + MPI_Bcast (stupid, 37, MPI_CHAR, 0, MPI_COMM_WORLD); + MPI_Comm_free(&local_comm); + } + + if (world_rank == 0) + { + if (step_out_flag) + { + step_out_file << "# end\n-1\n" + << energy_accumulator / double(energies_accumulated) << std::endl; + step_out_file.close(); + } + std::cout << "Finished all scheduled calculations. Freeing resources.\n"; + std::cout<<"Energy mean = "< +#include "Matrix.hpp" +#include "Array3d.hpp" +#include "../SingleSite/AtomData.hpp" + +void calculateRotationMatrix(Matrix &drot, Real *tvec, Real phi) +{ + Real sp=sin(phi); + Real sp2=sin(0.5*phi); + Real tx=tvec[0]*sp; + Real ty=tvec[1]*sp; + Real tz=tvec[2]*sp; + Real tx2=tvec[0]*sp2; + Real ty2=tvec[1]*sp2; + Real tz2=tvec[2]*sp2; + + drot(0,0) = 1.0 - 2.0 * (ty2*ty2 + tz2*tz2); + drot(1,1) = 1.0 - 2.0 * (tx2*tx2 + tz2*tz2); + drot(2,2) = 1.0 - 2.0 * (tx2*tx2 + ty2*ty2); + drot(0,1) = -tz + 2.0*tx2*ty2; + drot(1,0) = tz + 2.0*tx2*ty2; + drot(0,2) = ty + 2.0*tx2*tz2; + drot(2,0) = -ty + 2.0*tx2*tz2; + drot(1,2) = -tx + 2.0*ty2*tz2; + drot(2,1) = tx + 2.0*ty2*tz2; +} + +void rotateToGlobal(AtomData &atom, Matrix &dos, Matrix &dosck, + Matrix &dos_orb, Matrix &dosck_orb, + Array3d &green, Array3d &dens_orb, int i) +{ + Real axis[3]; + Matrix rot(3,3); + + Real a=std::sqrt(atom.evec[0]*atom.evec[0] + atom.evec[1]*atom.evec[1]); + Real phi = std::acos(atom.evec[2]); + + if(a == 0.0) + { + axis[0]=axis[1]=0.0; + axis[2]=copysign(1.0,atom.evec[2]); + a=1.0; + } else { + axis[0] = -atom.evec[1]; + axis[1] = atom.evec[0]; + axis[2] = 0.0; + a=1.0/a; + } + axis[0]*=a; + axis[1]*=a; + axis[2]*=a; + + calculateRotationMatrix(rot, axis, phi); + Complex t1 = rot(0,0)*dos(1,i)+rot(0,1)*dos(2,i)+rot(0,2)*dos(3,i); + Complex t2 = rot(1,0)*dos(1,i)+rot(1,1)*dos(2,i)+rot(1,2)*dos(3,i); + Complex t3 = rot(2,0)*dos(1,i)+rot(2,1)*dos(2,i)+rot(2,2)*dos(3,i); + dos(1,i) = t1; + dos(2,i) = t2; + dos(3,i) = t3; + + t1 = rot(0,0)*dosck(1,i)+rot(0,1)*dosck(2,i)+rot(0,2)*dosck(3,i); + t2 = rot(1,0)*dosck(1,i)+rot(1,1)*dosck(2,i)+rot(1,2)*dosck(3,i); + t3 = rot(2,0)*dosck(1,i)+rot(2,1)*dosck(2,i)+rot(2,2)*dosck(3,i); + dosck(1,i) = t1; + dosck(2,i) = t2; + dosck(3,i) = t3; + + t1 = rot(0,0)*dos_orb(0,i)+rot(0,1)*dos_orb(1,i)+rot(0,2)*dos_orb(2,i); + t2 = rot(1,0)*dos_orb(0,i)+rot(1,1)*dos_orb(1,i)+rot(1,2)*dos_orb(2,i); + t3 = rot(2,0)*dos_orb(0,i)+rot(2,1)*dos_orb(1,i)+rot(2,2)*dos_orb(2,i); + dos_orb(0,i) = t1; + dos_orb(1,i) = t2; + dos_orb(2,i) = t3; + + t1 = rot(0,0)*dosck_orb(0,i)+rot(0,1)*dosck_orb(1,i)+rot(0,2)*dosck_orb(2,i); + t2 = rot(1,0)*dosck_orb(0,i)+rot(1,1)*dosck_orb(1,i)+rot(1,2)*dosck_orb(2,i); + t3 = rot(2,0)*dosck_orb(0,i)+rot(2,1)*dosck_orb(1,i)+rot(2,2)*dosck_orb(2,i); + dosck_orb(0,i) = t1; + dosck_orb(1,i) = t2; + dosck_orb(2,i) = t3; + + for(int j=0; j +#include +#include +#include "PhysicalConstants.hpp" + +#include "lapack.h" + +// #include "Communication/LSMSCommunication.hpp" +#include "SingleSite/SingleSiteScattering.hpp" +// #include "MultipleScattering.hpp" +#include "Misc/Indices.hpp" +#include "Misc/Coeficients.hpp" + +void solveSingleScatterers(LSMSSystemParameters &lsms, LocalTypeInfo &local, + std::vector > &vr, Complex energy, + std::vector &solution,int iie) +{ +// ========================== SINGLE SCATTERER STUFF + Complex prel=std::sqrt(energy*(1.0+energy*c2inv)); + Complex pnrel=std::sqrt(energy); + + + for(int i=0; i0) prel=pnrel; + + if(local.atom.size()>solution.size()) solution.resize(local.atom.size()); + +// this is not ready for multithreading yet +// else: pragma omp parallel for + // if(lsms.global.iprint>=0) printf("calculate single scatterer solutions.\n"); + for(int i=0; i=1) printf("calc single scatterer %d.%d\n",comm.rank,i); + //printf("calc single scatterer atom no. = %d\n",i); + // YingWai's check + //printf("Inside solveSingleScatterers. Before calculateSingleScatterSolution\n"); + calculateSingleScattererSolution(lsms,local.atom[i],vr[i],energy,prel,pnrel,solution[i]); + //printf("Inside solveSingleScatterers. After calculateSingleScatterSolution\n"); + +// calculate pmat_m (needed for tr_pxtau) + int kkrsz=local.atom[i].kkrsz; + int kkrszsqr=kkrsz*kkrsz; + int info; + int ipvt[kkrsz]; + if(lsms.n_spin_cant==2 && lsms.relativity!=full) + { + local.atom[i].pmat_m[iie].resize(kkrsz,kkrsz); + Complex *pmat = new Complex[kkrszsqr]; + Complex *wbig = new Complex[kkrszsqr]; + Complex *pmat_m_ptr=&local.atom[i].pmat_m[iie](0,0); + cblas_zcopy(kkrszsqr,&solution[i].tmat_l(0,0,0),1,pmat,1); + cblas_zcopy(kkrszsqr,&solution[i].tmat_l(0,0,1),1,pmat_m_ptr,1); + zgetrf_(&kkrsz,&kkrsz,pmat_m_ptr,&kkrsz,ipvt,&info); + zgetri_(&kkrsz,pmat_m_ptr,&kkrsz,ipvt,wbig,&kkrszsqr,&info); +// ------------------------------------------------------------- + zgetrf_(&kkrsz,&kkrsz,pmat,&kkrsz,ipvt,&info); + zgetri_(&kkrsz,pmat,&kkrsz,ipvt,wbig,&kkrszsqr,&info); + + for(int j=0; j > &vr, Complex energy, + std::vector &solution,int iie) +{ + for(int i=0; i=0) + // { + // printf("single site scattering t-matrix (tmat_g) for local site %d:\n",0); + // for(int i=0; i +#include +#include + +#include +#include +#include "SystemParameters.hpp" +#include "PotentialIO.hpp" +#include "Communication/distributeAtoms.hpp" +#include "Communication/LSMSCommunication.hpp" +#include "Core/CoreStates.hpp" +#include "Misc/Indices.hpp" +#include "Misc/Coeficients.hpp" +#include "VORPOL/VORPOL.hpp" +#include "EnergyContourIntegration.hpp" +#include "Accelerator/Accelerator.hpp" +#include "Potential/PotentialShifter.hpp" +#include "calculateChemPot.hpp" +#include "lsmsClass.hpp" +#include "EvecGenerator.h" +#include "WangLandau.h" +// #include "WangLandau_withoutKernel.h" +#include "ExhaustiveIsing.h" +#include "WangLandau2d.h" + +// #define USE_PAPI 1 + +#ifdef USE_PAPI +#include +#endif + +#define R_VALUE_OFFSET 3 + +int main(int argc, char *argv[]) +{ + int size, rank, world_rank, my_group; + int num_lsms; // number of parallel LSMS instances + int size_lsms; // number of atoms in a lsms instance + int num_steps; // number of energy calculations + int initial_steps; // number of steps before sampling starts + int stepCount = 0; // count the Monte Carlo steps executed + double max_time; // maximum walltime for this run in seconds + bool restrict_time = false; // was the maximum time specified? + bool restrict_steps = false; // or the max. numer of steps? + int align; // alignment of lsms_instances + + double magnetization; + double energy_accumulator; // accumulates the enegy to calculate the mean + int energies_accumulated; + + energy_accumulator = 0.0; + energies_accumulated = 0; + + double walltime_0, walltime; + + double restartWriteFrequency = 30.0 * 60.0; + double nextWriteTime = restartWriteFrequency; + + MPI_Comm local_comm; + int *lsms_rank0; + MPI_Status status; + + char prefix[40]; + char i_lsms_name[64]; + char gWL_in_name[64], gWL_out_name[64]; + char mode_name[64]; + char energy_calculation_name[64]; + char stupid[37]; + std::vector walkerSteps; + + char step_out_name[64]; + char wl_step_out_name[128]; + char *wl_stepf = NULL; + bool step_out_flag = false; + std::ofstream step_out_file; + typedef enum {Constant, Random, WangLandau_1d, ExhaustiveIsing, WangLandau_2d} EvecGenerationMode; + typedef enum {MagneticMoment, MagneticMomentZ, MagneticMomentX, MagneticMomentY} SecondDimension; + + bool isSpinSim = true; + bool isOccupancySim = false; + char config_space_name[64]; + AlloyMixingDesc alloyDesc; + + EvecGenerationMode evec_generation_mode = Constant; + SecondDimension second_dimension = MagneticMoment; + MoveChoice_t MoveChoice, prevMoveChoice; + + double ev0[3]; + + bool return_moments_flag = true; // true -> return all magnetic moments from lsms run at each step. + bool generator_needs_moment = false; + + typedef enum {OneStepEnergy, MultiStepEnergy, ScfEnergy} EnergyCalculationMode; + EnergyCalculationMode energyCalculationMode = OneStepEnergy; + int energyIndex = 1; // index for the return value to use for the MC step (0: total energy, 1: band energy) + + ev0[0] = ev0[1] = 0.0; ev0[2] = 1.0; + // size has to be align + size_lsms*num_lsms + align = 1; + num_lsms = 1; + size_lsms = -1; + my_group = -1; + num_steps = 1; + initial_steps = 0; + + sprintf(i_lsms_name, "i_lsms"); + gWL_in_name[0] = gWL_out_name[0] = 0; + mode_name[0] = 0; + energy_calculation_name[0] = 0; + config_space_name[0] = 0; + + // check command line arguments + for (int i=0; iNUM_PAPI_EVENTS) hw_counters=NUM_PAPI_EVENTS; + int papi_events[NUM_PAPI_EVENTS]; // = {PAPI_TOT_INS,PAPI_TOT_CYC,PAPI_FP_OPS,PAPI_VEC_INS}; + char *papi_event_name[] = {"PAPI_TOT_INS","PAPI_FP_OPS", + "RETIRED_SSE_OPERATIONS:DOUBLE_ADD_SUB_OPS:DOUBLE_MUL_OPS:DOUBLE_DIV_OPS:OP_TYPE", + "RETIRED_SSE_OPERATIONS:SINGLE_ADD_SUB_OPS:SINGLE_MUL_OPS:SINGLE_DIV_OPS:OP_TYPE"}; + // "RETIRED_INSTRUCTIONS", + // "RETIRED_MMX_AND_FP_INSTRUCTIONS:PACKED_SSE_AND_SSE2", + // "RETIRED_SSE_OPERATIONS:DOUBLE_ADD_SUB_OPS:DOUBLE_MUL_OPS:DOUBLE_DIV_OPS:1", + // "RETIRED_SSE_OPERATIONS:SINGLE_ADD_SUB_OPS:SINGLE_MUL_OPS:SINGLE_DIV_OPS:1" + // get events from names: + for(int i=0; ii) hw_counters=i; + } + } + long long papi_values[NUM_PAPI_EVENTS+4]; + // printline("PAPI: "+ttos(hw_counters)+" counters available",std::cout,parameters.myrankWorld); + if(hw_counters>NUM_PAPI_EVENTS) hw_counters=NUM_PAPI_EVENTS; + long long papi_real_cyc_0 = PAPI_get_real_cyc(); + long long papi_real_usec_0 = PAPI_get_real_usec(); + long long papi_virt_cyc_0 = PAPI_get_virt_cyc(); + long long papi_virt_usec_0 = PAPI_get_virt_usec(); + PAPI_start_counters(papi_events,hw_counters); +#endif + + + lsms_rank0 = (int *) malloc( sizeof(int)*num_lsms+1) ; + + // initialize MPI: + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + world_rank = rank; + MPI_Comm_size(MPI_COMM_WORLD, &size); + + walltime_0 = MPI_Wtime(); + +#ifndef SVN_REV +#define SVN_REV "unknown" +#endif + +// make sure 'return_moments_flag' is set correctly + switch (evec_generation_mode) + { + case Constant : break; + case Random : break; + case WangLandau_1d : + return_moments_flag = true; + generator_needs_moment = true; + break; + case ExhaustiveIsing : break; + case WangLandau_2d : + return_moments_flag = true; + generator_needs_moment = true; + break; + default: + std::cout << " ERROR: UNKNOWN EVEC GENERATION MODE\n"; + exit(1); + } + + if(rank == 0) + { + std::cout << "LSMS_3" << std::endl; + std::cout << " SVN revision " << SVN_REV << std::endl << std::endl; +#ifdef USE_PAPI + std::cout << " Using Papi counters" << std::endl << std::endl; +#endif + std::cout << " Size of LSMS instances = " << size_lsms << " atoms\n"; + std::cout << " Number of LSMS instances = " << num_lsms << std::endl; + std::cout << " LSMS Energy calculated using "; + switch (energyCalculationMode) + { + case OneStepEnergy: + std::cout << "oneStepEnergy [frozen potential band energy]" << std::endl; + break; + case MultiStepEnergy: + std::cout << "multiStepEnergy [frozen potential band energy with converged Fermi energy]" << std::endl; + break; + case ScfEnergy: + std::cout << "scfEnergy [self-consistent total energy]" << std::endl; + break; + default: + std::cout << "UNKNOWN ENERGY CALCULATION METHOD" << std::endl; + exit(1); + } + if( isOccupancySim ) + std::cout << " Exploring occupancy configurational space\n"; + if( isSpinSim ) + std::cout << " Exploring spin configurational space\n"; + if( isOccupancySim && isSpinSim ) { + std::cout << " Error: Exploring both occupancy and spin configurational\n"; + std::cout << " has not been tested. Please re-compile, test, then run\n"; + std::cout << " desired system\n"; + exit(1); + } + + if (restrict_steps) + std::cout << " Number of gWL steps = " << num_steps << std::endl; + if (restrict_time) + std::cout << " Maximum walltime = " << max_time << "s\n"; + std::cout << " Processor alignment (process allocation quantization) = " << align << std::endl; + switch (evec_generation_mode) + { + case Constant : + std::cout << " Constant moments direction along " + << ev0[0] << " " << ev0[1] << " " << ev0[2] << std::endl; + break; + case Random : + std::cout << " Random distribution of moments (no Wang-Landau)" << std::endl; + break; + case WangLandau_1d : + std::cout << " Wang-Landau for one continuous variable (energy)" << std::endl; +// return_moments_flag = true; +// generator_needs_moment = true; + break; + case ExhaustiveIsing : + std::cout << " Exhaustive Ising sampling" << std::endl; + break; + case WangLandau_2d : + std::cout << " Wang-Landau for two continuous variable (energy, "; + switch (second_dimension) + { + case MagneticMoment : std::cout << "magnitude of magnetization)"; break; + case MagneticMomentX : std::cout<<"x component of magnetization)"; break; + case MagneticMomentY : std::cout<<"y component of magnetization)"; break; + case MagneticMomentZ : std::cout<<"z component of magnetization)"; break; + } + std::cout << std::endl; +// return_moments_flag = true; +// generator_needs_moment = true; + break; + default: + std::cout << " ERROR: UNKNOWN EVEC GENERATION MODE\n"; + exit(1); + } + if (step_out_flag) + std::cout << " Step output written to: " << step_out_name << std::endl; + std::cout << std::endl; + + if (step_out_flag && (evec_generation_mode == WangLandau_1d)) + { + // step_out_flag = false; + snprintf(wl_step_out_name, 127, "wl1d_%s", step_out_name); + wl_stepf = wl_step_out_name; + } + + if (step_out_flag) + { + step_out_file.open(step_out_name); + step_out_file << "#"; + for(int i=0; i= s) && (world_rank < s+comm_size)) + { + my_group = i; + color = i; + } + lsms_rank0[i] = s; + s += comm_size; + } + if (world_rank == 0) color = num_lsms; + + MPI_Comm_split(MPI_COMM_WORLD, color, 0, &local_comm); + + // std::cout << "world_rank=" << world_rank << " -> group=" << my_group << std::endl; + + snprintf(prefix, 38, "Group %4d: ", my_group); + + // now we get ready to do some calculations... + + if (my_group >= 0) + { + double energy; + double band_energy; + double *evec, *r_values; + double *recv_buffer; + int *occ; + int i_values[10]; + int op; + + // recieve either 'evec' or 'occupancy' variable set + recv_buffer = (double *) malloc( sizeof(double) * 4*size_lsms ); + + occ = (int *) malloc(sizeof(int) * size_lsms); + evec = (double *) malloc(sizeof(double) * 4 * size_lsms); + r_values = (double *) malloc(sizeof(double) * (R_VALUE_OFFSET + 3*(size_lsms+1))); + MPI_Comm_rank(local_comm, &rank); + snprintf(prefix, 38, "%d_", my_group); + // to use the ramdisk on jaguarpf: + // snprintf(prefix, 38, "/tmp/ompi/%d_", my_group); + LSMS lsms_calc(local_comm, i_lsms_name, prefix, my_group); + snprintf(prefix, 38, "Group %4d: ", my_group); + + if (rank == 0 && my_group == 0) + { + std::cout << prefix << "executing LSMS(C++) for " << lsms_calc.numSpins() << " atoms\n"; + std::cout << prefix << " LSMS version = " << lsms_calc.version() << std::endl; + } + + // wait for commands from master + bool finished = false; + while (!finished) + { + if (rank == 0) + { + // recieve command in op code + // data represents either site spins or site occupancies + MPI_Recv(recv_buffer, 4*size_lsms, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status); + + // use op code to distinguish whether occupancy or spin variables recieved + op = status.MPI_TAG; + // dprintf("Walker %d: Recieved op code %d.\n", my_group, op); + if( op == 51 || op == 61 ) { + for(int i = 0; i < 4*size_lsms; i++) + evec[i] = recv_buffer[i]; + } + else if( op == 52 || op == 62 ) { + for(int i = 0; i < size_lsms; i++) + occ[i] = int(0.5 + recv_buffer[i]); + } + + } + MPI_Bcast(&op, 1, MPI_INT, 0, local_comm); + +/* recognized opcodes: + 5: calculate energy + 51: calculate energy for spin change + 52: calculate energy for occupancy change + + 6: set configuration only + 61: set spin variables + 62: set occupancy variables + + recognized energy calculation modes: + OneStepEnergy : calclulate frozen potential band energy in one step (don't converge Ef) + use only if the Fermi energy will not change due to MC steps! + The only method available in LSMS_1.9 + MultiStepEnergy : calculate frozen potential band energy after converging Fermi energy + This should be the new default method. If the Fermi energy doesn't change + multiStepEnergy only performs one step and should be equivalent to oneStepEnergy + The tolerance for Ef convergence can be set with LSMS::setEfTol(Real). + The default tolerance is set in the LSMS::LSMS constructor (currently 1.0e-6). + The maximum number of steps is read from the LSMS input file 'nscf' parameter. + ScfEnergy : this will calculate the selfconsistent total energy. + The maximum number of steps is read from the LSMS input file 'nscf' parameter. + + 10: get number of sites + 11: get potential shifter information + 12: get alloy description +*/ + // pre-screen for whether this is an occupancy or spin move + if( op == 51 ) { MoveChoice = SpinMove; op = 5; } + if( op == 52 ) { MoveChoice = OccupancyMove; op = 5; } + if( op == 61 ) { MoveChoice = SpinMove; op = 6; } + if( op == 62 ) { MoveChoice = OccupancyMove; op = 6; } + + if (op == 5) + { + // if move type is Spin, set evec + // otherwise set occupancies + if( MoveChoice == SpinMove ) { + if(lsms_calc.vSpinShiftFlag()) + lsms_calc.setEvecAndSpinPotentialShift4(evec); + else + lsms_calc.setEvec(evec); + } + else { + if( rank == 0 ) { + /* dprintf("Walker %d: Setting occupancies: ",my_group); + for(int i = 0; i < size_lsms; i++) + dprintf("%d ",occ[i]); + dprintf("\n"); */ + } + lsms_calc.setOccupancies(occ); + } + + + if (energyCalculationMode == OneStepEnergy) + energy = lsms_calc.oneStepEnergy(&band_energy); + else if (energyCalculationMode == MultiStepEnergy) + band_energy = energy = lsms_calc.multiStepEnergy(); + else if (energyCalculationMode == ScfEnergy) + energy = lsms_calc.scfEnergy(&band_energy); + else + { + std::cout << "ERROR: Unknown energy calculation mode for lsms_calc in wl-lsms main!\n"; + MPI_Abort(MPI_COMM_WORLD, 5); + } + r_values[0] = energy; + r_values[1] = band_energy; + + // store the type of move performed as an extra variable in return values + if( MoveChoice == SpinMove ) + r_values[2] = 0x00; + else if( MoveChoice == OccupancyMove ) + r_values[2] = 0x01; + + if (return_moments_flag) + lsms_calc.getMag(&r_values[R_VALUE_OFFSET]); + if (rank == 0) + { + if (return_moments_flag) + MPI_Send(r_values, R_VALUE_OFFSET + 3*size_lsms, MPI_DOUBLE, 0, 1005, MPI_COMM_WORLD); + else + MPI_Send(r_values, R_VALUE_OFFSET, MPI_DOUBLE, 0, 1005, MPI_COMM_WORLD); + } + + } + else if (op == 6) { + // set configration without calculation + if( MoveChoice == SpinMove ) { + if(lsms_calc.vSpinShiftFlag()) + lsms_calc.setEvecAndSpinPotentialShift4(evec); + else + lsms_calc.setEvec(evec); + } + else { + if(rank==0) { + /* dprintf("Walker %d: Setting occupancies: ",my_group); + for(int i = 0; i < size_lsms; i++) + dprintf("%d ",occ[i]); + dprintf("\n"); */ + } + + lsms_calc.setOccupancies(occ); + } + } + else if (op == 10) + { + i_values[0] = lsms_calc.numSpins(); + MPI_Send(i_values, 10, MPI_INT, 0, 1010, MPI_COMM_WORLD); + } + else if (op == 11) + { + r_values[0] = -1.0; if(lsms_calc.vSpinShiftFlag()==true) r_values[0]=1.0; + r_values[1]=lsms_calc.potentialMinShift(); + r_values[2]=lsms_calc.potentialMaxShift(); + } + else if( op == 12 ) { + + // send alloy description back to master node + if( rank == 0 ) { + int nclasses, *ncomps, *site_alloyclass; + lsms_calc.getAlloyInfo(alloyDesc, &site_alloyclass); + // ^-- allocates and fills alloy class definition for each site + + /* printf("alloyDesc.size() = %d\n",alloyDesc.size()); + printf("site_alloyclass = %x\n",site_alloyclass); + for(int i = 0; i < size_lsms; i++) + printf("site_alloyclass[i]=%d\n",site_alloyclass[i]); + exit(1); */ + + nclasses = alloyDesc.size(); + MPI_Send(&nclasses, 1, MPI_INTEGER, 0, 1012, MPI_COMM_WORLD); + + ncomps = (int*) malloc(sizeof(int)*nclasses); + for(int i = 0; i < nclasses; i++) + ncomps[i] = alloyDesc[i].size(); + + MPI_Send(ncomps, nclasses, MPI_INTEGER, 0, 1012, MPI_COMM_WORLD); + for(int i = 0; i < nclasses; i++) + MPI_Send(alloyDesc[i].data(), ncomps[i]*sizeof(AtomType), MPI_BYTE, 0, 1012, MPI_COMM_WORLD); + + MPI_Send(site_alloyclass, size_lsms, MPI_INTEGER, 0, 1012, MPI_COMM_WORLD); + + free(ncomps); free(site_alloyclass); + // dprintf("Walker %d: Sent master alloy description.\n",my_group); + } + } + else + { + // printf("world rank %d: recieved exit\n",world_rank); + if(rank==0) printf("Walker %d: Exiting simulation.\n", my_group); + if(rank==0) printf("Wang-Landau walker %d performed %ld energy contour integrations.\n",my_group,lsms_calc.energyLoopCount); + // send this to the root for statistics + long int sb[2]; + sb[0]=my_group; + sb[1]=lsms_calc.energyLoopCount; + MPI_Gather(sb,2,MPI_LONG,NULL,2,MPI_LONG,0,MPI_COMM_WORLD); + finished = true; + } + } + + free(recv_buffer); + free(occ); + free(evec); + free(r_values); + } + else if (world_rank == 0) + { + int running; + double *send_buffer; + double **evecs; + int **occs; + double **vSpinShifts {}; + double **evecsAndSpinShifts {}; + double *r_values; + int i_values[10]; + int *init_steps; + int total_init_steps; + bool accepted; + + + char *wl_inf = NULL; + char *wl_outf = NULL; + if (gWL_in_name) wl_inf = gWL_in_name; + if (gWL_out_name) wl_outf = gWL_out_name; + + PotentialShifter potentialShifter; + EvecGenerator *generator; + +/* + // get number of spins from first LSMS instance + // temp r_values: + r_values=(double *)malloc(sizeof(double)*10); + MPI_Send(r_values,1,MPI_DOUBLE, lsms_rank0[0], 10, MPI_COMM_WORLD); + free(r_values); + MPI_Recv(i_values,10,MPI_INT,lsms_rank0[0],1010,MPI_COMM_WORLD,&status); + if(i_values[0]!=size_lsms) + { + printf("Size specified for Wang-Landau and in LSMS input file don't match!\n"); + size_lsms=i_values[0]; + } +*/ + + evecs = (double **) malloc(sizeof(double *) * num_lsms); + occs = (int **) malloc(sizeof(int *) * num_lsms); + init_steps = (int *) malloc(sizeof(int) * num_lsms); + for(int i=0; i(size_lsms, num_lsms, evecs, potentialShifter, wl_inf, wl_outf, wl_stepf, occs); + break; + case ExhaustiveIsing : generator = new ExhaustiveIsing1dEvecGenerator(size_lsms, num_lsms, evecs, wl_inf, wl_outf); + break; + case WangLandau_2d : generator = new WL2dEvecGenerator(size_lsms, num_lsms, evecs, wl_inf, wl_outf, wl_stepf); + break; + default : std::cerr << "The code should never arrive here: UNKNOWN EVEC GENERATION MODE\n"; + exit(1); + } + + // get alloy description from one of the LSMS instances + // 'nclasses' is number of alloy mixing classes + // components within the same mixing class may substitute for each other + // 'ncomps[ac]' is number of components for mixing class 'ac' + // 'site_alloyclass[i]' is the mixing class for site position 'i' + // 'alloyDesc[ac][i]' is atom description of ith component of mixing class 'ac' + + // signal op code 12 = send master (me) description of alloy + if( isOccupancySim ) { + MPI_Send(send_buffer, 1, MPI_DOUBLE, lsms_rank0[0], 12, MPI_COMM_WORLD); + printf("Master: Requesting alloy description.\n"); + + int nclasses, *ncomps, *site_alloyclass; + MPI_Recv(&nclasses, 1, MPI_INTEGER, lsms_rank0[0], 1012, MPI_COMM_WORLD, &status); + + ncomps = (int*) malloc( sizeof(int) * nclasses ); + site_alloyclass = (int*) malloc( sizeof(int) * size_lsms ); + MPI_Recv(ncomps, nclasses, MPI_INTEGER, lsms_rank0[0], 1012, MPI_COMM_WORLD, &status); + + alloyDesc.resize(nclasses); + for(int i = 0; i < nclasses; i++) { + alloyDesc[i].resize(ncomps[i]); + MPI_Recv(alloyDesc[i].data(), ncomps[i]*sizeof(AtomType), MPI_BYTE, + lsms_rank0[0], 1012, MPI_COMM_WORLD, &status); + } + + MPI_Recv(site_alloyclass, size_lsms, MPI_INTEGER, lsms_rank0[0], 1012, MPI_COMM_WORLD, &status); + + generator->setAlloyClasses(alloyDesc, site_alloyclass); + + free(site_alloyclass); + free(ncomps); + printf("Master: Recieved alloy description.\n"); + } + + // Generate the initial spin configuration + if (potentialShifter.vSpinShiftFlag) + for(int i=0; i initializeEvecAndPotentialShift(i, evecs[i], vSpinShifts[i]); + else + for(int i=0; i initializeEvec(i, evecs[i]); + + // generate initial occupancies + if( isOccupancySim ) { + printf("Master: Generating initial occupancies.\n"); + for(int i = 0; i < num_lsms; i++) + generator->initializeOccupancies(i, occs[i]); + } + + // if both spin and occupancy variables are needed + // then we need to set both sets of variables before beginning calculations + if( isSpinSim && isOccupancySim ) + for(int i = 0; i < num_lsms; i++) { + + // set evec and potential shifts + if (potentialShifter.vSpinShiftFlag) { + for (int j=0; j 0) + { + + + for(int i=0; iselectMoveType(isSpinSim, isOccupancySim); + + if( MoveChoice == SpinMove ) { + // dprintf("Master: Sending trial spins to Walker %d.\n", i); + if (potentialShifter.vSpinShiftFlag) + { + for (int j=0; j 0) + { + if (return_moments_flag) + MPI_Recv(r_values, R_VALUE_OFFSET+3*size_lsms, MPI_DOUBLE, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status); + else + MPI_Recv(r_values, R_VALUE_OFFSET, MPI_DOUBLE, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status); + running--; + + // std::cout << "received energy E_tot =" << r_values[0] << std::endl; + // std::cout << " band energy E_band =" << r_values[1] << std::endl; + printf("received energy E_tot = %25.15f\n",r_values[0]); + printf(" band energy E_band= %25.15f\n",r_values[1]); + + if (total_init_steps > 0) + { + int r_group = (status.MPI_SOURCE - align) / comm_size; + std::cout << "starting additional calculation in group " << r_group << std::endl; + + MoveChoice = generator->selectMoveType(isSpinSim, isOccupancySim); + if (init_steps[r_group] > 0) + { + if( MoveChoice == SpinMove ) + generator -> generateUnsampledEvec(r_group, evecs[r_group], r_values[energyIndex]); + else if( MoveChoice == OccupancyMove ) + generator -> generateUnsampledOcc(r_group, occs[r_group]); + //more_work = !(generator -> generateUnsampledEvec(r_group, evecs[r_group], r_values[energyIndex])); + init_steps[r_group]--; + total_init_steps--; + } + + // send configuration + if( MoveChoice == SpinMove ) { + // dprintf("Master: Sending trial spins to Walker %d.\n", r_group); + if (potentialShifter.vSpinShiftFlag) + { + for (int j=0; j= max_time) more_work = false; + if (restrict_time) std::cout << " " << max_time - walltime << " seconds remaining\n"; + } + + } + } + more_work = true; + running = 0; + for (int i=0; iselectMoveType(isSpinSim, isOccupancySim); + + if( MoveChoice == SpinMove ) { + // dprintf("Master: Sending trial spins to Walker %d.\n", i); + if (potentialShifter.vSpinShiftFlag) + { + for (int j=0; j startSampling(isSpinSim, isOccupancySim); + + // define variables to keep track whether spin (or occupancy) + // configuration needs to be reverted to previous values + bool *acceptedSpinMove = (bool*) malloc(sizeof(bool)*num_lsms); + bool *acceptedOccMove = (bool*) malloc(sizeof(bool)*num_lsms); + + for(int i = 0; i < num_lsms; i++) + acceptedSpinMove[i] = acceptedOccMove[i] = true; + + // wait for results and issue new commands or wind down + while (running > 0) + { + accepted = false; + + MPI_Recv(r_values, R_VALUE_OFFSET+3*size_lsms, MPI_DOUBLE, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status); + running--; + printf("received energy E_tot = %25.15f\n",r_values[0]); + printf(" band energy E_band= %25.15f\n",r_values[1]); + // printf("from status.MPI_SOURCE=%d\n",status.MPI_SOURCE); + energy_accumulator += r_values[0]; + energies_accumulated++; + + // determine whether returning from a spin or occupancy move + int r_group = (status.MPI_SOURCE - align) / comm_size; + if( r_values[2] == 0x00 ) { + prevMoveChoice = SpinMove; + // dprintf("Master: Recieved energy from Walker %d after spin trial.\n",r_group); + } + else if( r_values[2] == 0x01 ) { + prevMoveChoice = OccupancyMove; + // dprintf("Master: Recieved energy from Walker %d after occupancy trial.\n",r_group); + } + + if (more_work) + { + int r_group = (status.MPI_SOURCE - align) / comm_size; + std::cout << "starting additional calculation in group " << r_group << std::endl; + + if (generator_needs_moment) + { + double m0, m1, m2; + m0 = 0.0; m1 = 0.0; m2 = 0.0; + for(int i=0; i<3*size_lsms; i+=3) + { + m0 += r_values[R_VALUE_OFFSET+i]; + m1 += r_values[R_VALUE_OFFSET+i+1]; + m2 += r_values[R_VALUE_OFFSET+i+2]; + } + switch (second_dimension) + { + case MagneticMoment : magnetization = std::sqrt(m0*m0 + m1*m1 + m2*m2); break; + case MagneticMomentX : magnetization = m0; break; + case MagneticMomentY : magnetization = m1; break; + case MagneticMomentZ : magnetization = m2; break; + } + + // todo: separately keep track of whether last evec or occ move accepted + // Determine if the configuration is accepted + accepted = generator -> determineAcceptance(r_group, r_values[energyIndex], magnetization); + } + else { + // Determine if the configuration is accepted + accepted = generator -> determineAcceptance(r_group, r_values[energyIndex]); + } + + if(accepted) + printf("Master: Accepted Walker %d trial move.\n",r_group); + else + printf("Master: Rejected Walker %d trial move.\n",r_group); + + // need to separate track of whether the last spin or occupancy change was accepted + // this ensures the Wang-Landau generator can properly restore the old configuration + if( prevMoveChoice == SpinMove ) + acceptedSpinMove[r_group] = accepted; + else if( prevMoveChoice == OccupancyMove ) + acceptedOccMove[r_group] = accepted; + + // dprintf("Master: Updating histogram after Walker %d move.\n",r_group); + if (potentialShifter.vSpinShiftFlag) + { + if (generator -> updateHistogram(r_group, evecs[r_group], vSpinShifts[r_group], accepted)) + more_work = false; + } else { + if (generator -> updateHistogram(r_group, evecs[r_group], accepted)) + more_work = false; + } + // dprintf("Master: Updating log after Walker %d move.\n",r_group); + generator->updateLog(r_group, evecs[r_group], occs[r_group], + r_values[energyIndex], accepted, prevMoveChoice, + isSpinSim, isOccupancySim); + + // Prepare a new configuration + MoveChoice = generator->selectMoveType(isSpinSim, isOccupancySim); + + if( MoveChoice == SpinMove ) { + // dprintf("Master: Generating trial spins for Walker %d.\n",r_group); + generator -> generateEvec(r_group, evecs[r_group], acceptedSpinMove[r_group]); + if (potentialShifter.vSpinShiftFlag) + generator -> generatePotentialShift(r_group, vSpinShifts[r_group], acceptedSpinMove[r_group]); + } + else if( MoveChoice == OccupancyMove ) { + // dprintf("Master: Generating trial occupancies for Walker %d.\n",r_group); + generator->generateOccupancies(r_group, occs[r_group], acceptedOccMove[r_group]); + } + + // todo: change below code to also send occupancies + if( MoveChoice == SpinMove ) { + // dprintf("Master: Sending trial spins for Walker %d.\n",r_group); + if (potentialShifter.vSpinShiftFlag) + { + for (int j=0; j= max_time) more_work = false; + if (restrict_time) std::cout << " " << max_time - walltime << " seconds remaining\n"; + } + else + { + // send an exit message to this instance of LSMS + int r_group = (status.MPI_SOURCE - align) / comm_size; + + MPI_Send(evecs[r_group], 3*size_lsms, MPI_DOUBLE, lsms_rank0[r_group], 2, MPI_COMM_WORLD); + } + + if (step_out_flag && accepted) + { + step_out_file << "# iteration " << energies_accumulated << std::endl; + step_out_file.precision(15); + step_out_file << energies_accumulated << std::endl; + step_out_file << r_values[0] << " " << r_values[1] << std::endl; + for (int j=0; j<3*size_lsms; j+=3) + step_out_file << r_values[j+R_VALUE_OFFSET] << " " << r_values[j+R_VALUE_OFFSET+1] + << " " << r_values[j+R_VALUE_OFFSET+2] << std::endl; + } + // write restart file every restartWriteFrequency seconds + if (walltime > nextWriteTime) + { + generator -> writeState("WLrestart.jsn"); + nextWriteTime += restartWriteFrequency; + } + + } + generator -> writeState("WLrestart.jsn"); + + // gather statistics of energy loop counts + long int sb[2]; + sb[0]=-1; + sb[1]=0; + // std::vector rb(2*(num_lsms+1)); + std::vector rb(2*size); + MPI_Gather(sb,2,MPI_LONG,&rb[0],2,MPI_LONG,0,MPI_COMM_WORLD); + walkerSteps[0]=stepCount; // report the total step count for the WL master + std::ofstream statOut; statOut.open("energyLoopCount.statistics"); + statOut< *>(generator))->writeState("WLrestart.state"); + if(evec_generation_mode==ExhaustiveIsing) + (static_cast(generator))->writeState("WLrestart.state"); +*/ + for (int i=0; i 1) + { + // make sure averyone arrives here: + MPI_Bcast (stupid, 37, MPI_CHAR, 0, MPI_COMM_WORLD); + + if (world_rank == 0) + MPI_Comm_free(&local_comm); + else if (my_group >= 0) + MPI_Comm_free(&local_comm); + + } + + + if (world_rank == 0) + { + double walltime = MPI_Wtime() - walltime_0; + std::cout << " WL-LSMS finished in " << walltime << " seconds.\n"; + std::cout << " Monte-Carlo steps / walltime = " + << double(stepCount) / walltime << "/sec\n"; + } + +#ifdef USE_PAPI + PAPI_stop_counters(papi_values,hw_counters); + papi_values[hw_counters ] = PAPI_get_real_cyc()-papi_real_cyc_0; + papi_values[hw_counters+1] = PAPI_get_real_usec()-papi_real_usec_0; + papi_values[hw_counters+2] = PAPI_get_virt_cyc()-papi_virt_cyc_0; + papi_values[hw_counters+3] = PAPI_get_virt_usec()-papi_virt_usec_0; + long long accumulated_counters[NUM_PAPI_EVENTS+4]; +/* + for(int i=0; i +#include +#include + +#include +#include +#include "SystemParameters.hpp" +#include "PotentialIO.hpp" +#include "Communication/distributeAtoms.hpp" +#include "Communication/LSMSCommunication.hpp" +#include "Core/CoreStates.hpp" +#include "Misc/Indices.hpp" +#include "Misc/Coeficients.hpp" +#include "VORPOL/VORPOL.hpp" +#include "EnergyContourIntegration.hpp" +#include "Accelerator/Accelerator.hpp" +#include "calculateChemPot.hpp" +#include "lsmsClass.hpp" +#include "ReplicaExchangeWL.hpp" +#include "EvecGenerator.h" +#include "WangLandau.h" +// #include "WangLandau_withoutKernel.h" +#include "ExhaustiveIsing.h" +#include "WangLandau2d.h" + +#ifdef _OPENMP +#include +#endif + +//#define USE_PAPI 1 + +#ifdef USE_PAPI +#include +#endif + +#define R_VALUE_OFFSET 2 + +int main(int argc, char *argv[]) +{ + + // MPI information + int size, rank, world_rank, my_group {-1}; + int *lsms_rank0; // an array to store the world_rank of the group leaders + // size has to be size_lsms * num_lsms + MPI_Comm local_comm; + MPI_Status status; + + + // Simulation info + int num_lsms {1}; // number of parallel LSMS instances + int size_lsms {-1}; // number of atoms in a lsms instance + int num_window {1}; // number of energy windows + int num_lsms_per_window {1}; // number of LSMS instances per windows + int num_steps {1}; // number of energy calculations + int MCstepCount {0}; // count the Monte Carlo steps executed + int REstepCount {0}; // count the replica exchange steps executed + int exchangeFrequency {10}; // number of MC steps between replica exchange + + double max_time; // maximum walltime for this run in seconds + bool restrict_time {false}; // was the maximum time specified? + bool restrict_steps {false}; // or the max. numer of steps? + + double walltime_0, walltime; + double restartWriteFrequency = 30.0 * 60.0; + double nextWriteTime = restartWriteFrequency; + + double magnetization {0.0}; + double energy_accumulator {0.0}; // accumulates the energy to calculate the mean + int energies_accumulated {0}; + + typedef enum {Constant, Random, WangLandau_1d, ExhaustiveIsing, WangLandau_2d} EvecGenerationMode; + typedef enum {MagneticMoment, MagneticMomentZ, MagneticMomentX, MagneticMomentY} SecondDimension; + + EvecGenerationMode evecGenerationMode = Constant; + SecondDimension second_dimension = MagneticMoment; + double ev0[3] {0.0, 0.0, 1.0}; + + //Ying Wai: should return_moments_flag be initialized to false? + bool return_moments_flag {true}; // true -> return all magnetic moments from lsms run at each step. + bool generator_needs_moment {false}; + + typedef enum {OneStepEnergy, MultiStepEnergy, ScfEnergy} EnergyCalculationMode; + EnergyCalculationMode energyCalculationMode = OneStepEnergy; + int energyIndex {1}; // index for the return value to use for the MC step (0: total energy, 1: band energy) + + + // Input/output filenames + char prefix[40] {}; + char i_lsms_name[64]; + char gWL_in_name[64], gWL_out_name[64]; + char mode_name[64]; + char energy_calculation_name[64]; + char stupid[37]; + + char step_out_name[64]; + char wl_step_out_name[128]; + char *wl_stepf = nullptr; + bool step_out_flag = false; + std::ofstream step_out_file; + + sprintf(i_lsms_name, "i_lsms"); + gWL_in_name[0] = gWL_out_name[0] = 0; + mode_name[0] = 0; + energy_calculation_name[0] = 0; + + + // check command line arguments + for (int i=0; iNUM_PAPI_EVENTS) hw_counters=NUM_PAPI_EVENTS; + int papi_events[NUM_PAPI_EVENTS]; // = {PAPI_TOT_INS,PAPI_TOT_CYC,PAPI_FP_OPS,PAPI_VEC_INS}; + char *papi_event_name[] = {"PAPI_TOT_INS","PAPI_FP_OPS", + "RETIRED_SSE_OPERATIONS:DOUBLE_ADD_SUB_OPS:DOUBLE_MUL_OPS:DOUBLE_DIV_OPS:OP_TYPE", + "RETIRED_SSE_OPERATIONS:SINGLE_ADD_SUB_OPS:SINGLE_MUL_OPS:SINGLE_DIV_OPS:OP_TYPE"}; + // "RETIRED_INSTRUCTIONS", + // "RETIRED_MMX_AND_FP_INSTRUCTIONS:PACKED_SSE_AND_SSE2", + // "RETIRED_SSE_OPERATIONS:DOUBLE_ADD_SUB_OPS:DOUBLE_MUL_OPS:DOUBLE_DIV_OPS:1", + // "RETIRED_SSE_OPERATIONS:SINGLE_ADD_SUB_OPS:SINGLE_MUL_OPS:SINGLE_DIV_OPS:1" + // get events from names: + for(int i=0; ii) hw_counters=i; + } + } + long long papi_values[NUM_PAPI_EVENTS+4]; + // printline("PAPI: "+ttos(hw_counters)+" counters available",std::cout,parameters.myrankWorld); + if(hw_counters>NUM_PAPI_EVENTS) hw_counters=NUM_PAPI_EVENTS; + long long papi_real_cyc_0 = PAPI_get_real_cyc(); + long long papi_real_usec_0 = PAPI_get_real_usec(); + long long papi_virt_cyc_0 = PAPI_get_virt_cyc(); + long long papi_virt_usec_0 = PAPI_get_virt_usec(); + PAPI_start_counters(papi_events,hw_counters); +#endif + +#ifndef SVN_REV +#define SVN_REV "unknown" +#endif + + + // initialize MPI: + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + world_rank = rank; + MPI_Comm_size(MPI_COMM_WORLD, &size); + + walltime_0 = MPI_Wtime(); + + // Rank 0 prints out simulation info + if(world_rank == 0) + { + std::cout << "LSMS_3" << std::endl; + std::cout << " SVN revision " << SVN_REV << std::endl << std::endl; +#ifdef USE_PAPI + std::cout << " Using Papi counters" << std::endl << std::endl; +#endif + std::cout << " Size of LSMS instances = " << size_lsms << " atoms\n"; + std::cout << " Number of LSMS instances = " << num_lsms << std::endl; + std::cout << " LSMS Energy calculated using "; + + switch (energyCalculationMode) + { + case OneStepEnergy: + std::cout << "oneStepEnergy [frozen potential band energy]" << std::endl; + break; + case MultiStepEnergy: + std::cout << "multiStepEnergy [frozen potential band energy with converged Fermi energy]" << std::endl; + break; + case ScfEnergy: + std::cout << "scfEnergy [self-consistent total energy]" << std::endl; + break; + default: + std::cout << "UNKNOWN ENERGY CALCULATION METHOD" << std::endl; + exit(1); + } + + if (restrict_steps) + std::cout << " Number of gWL steps = " << num_steps << std::endl; + if (restrict_time) + std::cout << " Maximum walltime = " << max_time << "s\n"; + + //std::cout << " Processor alignment (process allocation quantization) = " << align << std::endl; + + switch (evecGenerationMode) + { + case Constant : + std::cout << " Constant moments direction along " + << ev0[0] << " " << ev0[1] << " " << ev0[2] << std::endl; + break; + case Random : + std::cout << " Random distribution of moments (no Wang-Landau)" << std::endl; + break; + case WangLandau_1d : + std::cout << " Wang-Landau for one continuous variable (energy)" << std::endl; + break; + case ExhaustiveIsing : + std::cout << " Exhaustive Ising sampling" << std::endl; + break; + case WangLandau_2d : + std::cout << " Wang-Landau for two continuous variable (energy, "; + switch (second_dimension) + { + case MagneticMoment : std::cout << "magnitude of magnetization)"; break; + case MagneticMomentX : std::cout<<"x component of magnetization)"; break; + case MagneticMomentY : std::cout<<"y component of magnetization)"; break; + case MagneticMomentZ : std::cout<<"z component of magnetization)"; break; + } + std::cout << std::endl; + break; + default: + std::cout << " ERROR: UNKNOWN EVEC GENERATION MODE\n"; + exit(1); + } + + if (step_out_flag) + std::cout << " Step output written to: " << step_out_name << std::endl; + std::cout << std::endl; + + if (step_out_flag && (evecGenerationMode == WangLandau_1d)) + { + // step_out_flag = false; + snprintf(wl_step_out_name, 127, "wl1d_%s", step_out_name); + wl_stepf = wl_step_out_name; + } + + if (step_out_flag) + { + step_out_file.open(step_out_name); + step_out_file << "#"; + for(int i=0; i group " << my_group + // << " (local_rank " << rank << " ) \n"; + + // build the WL communicators + MPI_Comm WLwalkersComm; + MPI_Group MPI_GROUP_WORLD, WLwalkersGroup; + + MPI_Comm_group (MPI_COMM_WORLD, &MPI_GROUP_WORLD); + MPI_Group_incl (MPI_GROUP_WORLD, num_lsms, lsms_rank0, &WLwalkersGroup); + MPI_Comm_create (MPI_COMM_WORLD, WLwalkersGroup, &WLwalkersComm); + + // Prepare seeds for RNG + std::seed_seq seq {MPI_Wtime()}; + std::vector seeds(num_lsms); + seq.generate(seeds.begin(), seeds.end()); + + // Initialize REWL class + REWL *rewl {}; + if (rank == 0) + rewl = new REWL(WLwalkersComm, num_window, num_lsms_per_window, seeds[my_group]); + + // now we get ready to do some calculations... + + double energy {0.0}; + double bandEnergy {0.0}; + double** evecs {}; + int op {5}; + //int i_values[10]; + + evecs = (double **) malloc(sizeof(double *)); + evecs[0] = (double *) malloc(sizeof(double) * 3 * size_lsms); + for (int i = 0; i < 3*size_lsms; i++) + evecs[0][i] = 0.0; + + snprintf(prefix, 38, "%d_", my_group); + LSMS lsms_calc(local_comm, i_lsms_name, prefix); + + char *wl_inf {}; + char *wl_outf {}; + // YingWai: To read from the corresponding WLrestart file, + // the name of wl_inf needs to be reconstructed for different walker (using my_group) + // Apr 30, 14 + if (gWL_in_name) wl_inf = gWL_in_name; + if (gWL_out_name) wl_outf = gWL_out_name; + + EvecGenerator *generator {}; + + if (world_rank == 0) + { + snprintf(prefix, 38, "Group %4d: ", my_group); + std::cout << prefix << "executing LSMS(C++) for " << lsms_calc.numSpins() << " atoms\n" ; + std::cout << prefix << " LSMS version = " << lsms_calc.version() << std::endl; + } + + if (rank == 0) + { + // Initialize the correct evec generator + switch (evecGenerationMode) + { + case Random : + generator = new RandomEvecGenerator(size_lsms); + break; + case Constant : + generator = new ConstantEvecGenerator(size_lsms, ev0, num_lsms); + break; + case WangLandau_1d : + generator = new WL1dEvecGenerator(size_lsms, 1, num_window, num_lsms_per_window, my_group, evecs, wl_inf, wl_outf, wl_stepf); + break; + case ExhaustiveIsing : + generator = new ExhaustiveIsing1dEvecGenerator(size_lsms, num_lsms, evecs, wl_inf, wl_outf); + break; + case WangLandau_2d : + generator = new WL2dEvecGenerator(size_lsms, num_lsms, evecs, wl_inf, wl_outf, wl_stepf); + break; + default : + std::cerr << "REWL Main :: The code should never arrive here: UNKNOWN EVEC GENERATION MODE\n"; + exit(1); + } + + // Generate the initial configuration + std::cout << "REWL Main :: starting main calculation in group " << my_group << std::endl; + + generator -> initializeEvec(my_group, evecs[0]); + + // Ying Wai: do we want to put it here? + // see if the energy of the state is within the energy range + // if not, generate a new state until it is (Feb 4, 14) + + generator -> startSampling(); + + } + + op = 5; + MPI_Bcast(&op, 1, MPI_INT, 0, local_comm); + /* + Recognized opcodes: + 5: calculate energy + recognized energy calculation modes: + OneStepEnergy : + calclulate frozen potential band energy in one step (don't converge Ef) + use only if the Fermi energy will not change due to MC steps! + The only method available in LSMS_1.9 + MultiStepEnergy : + calculate frozen potential band energy after converging Fermi energy + This should be the new default method if the Fermi energy doesn't change + multiStepEnergy only performs one step and should be equivalent to oneStepEnergy + The tolerance for Ef convergence can be set with LSMS::setEfTol(Real). + The default tolerance is set in the LSMS::LSMS constructor (currently 1.0e-6). + The maximum number of steps is read from the LSMS input file 'nscf' parameter. + ScfEnergy : + calculate the selfconsistent total energy. + The maximum number of steps is read from the LSMS input file 'nscf' parameter. + + 10: get number of sites + */ + + bool more_work = true; + while (more_work) + { + + switch (op) + { + case 5 : + + // rank 0 sends evecs to the rest of the group + lsms_calc.setEvec(evecs[0]); + + // calculate energy collectively + if (energyCalculationMode == OneStepEnergy) + energy = lsms_calc.oneStepEnergy(&bandEnergy); + else if (energyCalculationMode == MultiStepEnergy) + bandEnergy = energy = lsms_calc.multiStepEnergy(); + else if (energyCalculationMode == ScfEnergy) + energy = lsms_calc.scfEnergy(&bandEnergy); + else + { + std::cout << "ERROR: Unknown energy calculation mode for lsms_calc in wl-lsms main!\n"; + MPI_Abort(MPI_COMM_WORLD, 5); + } + + // In case the magnetization has changed, get the new one back + if (return_moments_flag) + lsms_calc.getMag(evecs[0]); + + break; + + case 10 : + // i_values[0] = lsms_calc.numSpins(); + // MPI_Send(i_values, 10, MPI_INT, 0, 1010, MPI_COMM_WORLD); + break; + + default : + // printf("world rank %d: received exit\n",world_rank); + more_work = false; + + } + + //====== Up to this point, energy, bandEnergy and evecs are updated ======// + + if (rank == 0) + { + // newConfigAcceptance: + // true - the proposed configuration is accepted + // false - the proposed configuration is rejected, update with the old config. + bool newConfigAcceptance {false}; + + // these are for checking and debugging, not for real calculations + energy_accumulator += energy; + energies_accumulated++; + + if (generator_needs_moment) + { + double m0 {0.0}, m1 {0.0}, m2 {0.0}; + for (int i = 0; i < 3*size_lsms; i += 3) + { + m0 += evecs[0][i]; + m1 += evecs[0][i+1]; + m2 += evecs[0][i+2]; + } + switch (second_dimension) + { + case MagneticMoment : magnetization = std::sqrt(m0*m0 + m1*m1 + m2*m2); break; + case MagneticMomentX : magnetization = m0; break; + case MagneticMomentY : magnetization = m1; break; + case MagneticMomentZ : magnetization = m2; break; + } + + // Determine if the configuration is accepted + newConfigAcceptance = generator -> determineAcceptance(0, energy, magnetization); + + // Update histogram, change gamma and check flatness + //if (generator -> updateHistogram(0, evecs[0], newConfigAcceptance)) + // more_work = false; + } + else + { + // Determine if the configuration is accepted + newConfigAcceptance = generator -> determineAcceptance(0, energy); + + // Update histogram, change gamma and check flatness + //if (generator -> updateHistogram(0, evecs[0], newConfigAcceptance)) + // more_work = false; + } +/* + //YingWai's check on the evecs + FILE* yingwai; + char checkFile[50]; + sprintf(checkFile, "checkEvec%05d.dat", my_group); + yingwai = fopen(checkFile, "a"); + fprintf(yingwai, "Acceptance = "); + if (newConfigAcceptance) + fprintf(yingwai, "Y\n"); + else + fprintf(yingwai, "N\n"); + for (int i = 0; i < 3*size_lsms; i++) + fprintf(yingwai, "%15.8f\n", evecs[0][i]); + fclose(yingwai); +*/ + // Update histogram, change gamma and check flatness + if (generator -> updateHistogram(0, evecs[0], newConfigAcceptance)) + more_work = false; + + MCstepCount++; + + // Replica-exchange + MPI_Barrier(WLwalkersComm); // necessary? + + bool replicaExchangeAcceptance {false}; + if (MCstepCount % exchangeFrequency == 0) + { + Real myDOSRatio {0.0}; + + Real energyTemp = energy; + rewl -> assignSwapPartner(); + rewl -> swapEnergy(energyTemp); + + // Determines if the energy received is within my energy range + // and get the DOS ratio + myDOSRatio = generator -> getDOSRatio(0, energyTemp); + + // Exchange DOS ratios and calculate acceptance probability + replicaExchangeAcceptance = rewl -> determineAcceptance(myDOSRatio); + + // Exchange configurations + if (replicaExchangeAcceptance) + { + energy = energyTemp; + + //printf("YW's check. Walker %5d: Before exchange.\n", my_group); + //for (int yw=0; yw<3*size_lsms; yw++) + // printf("YW. Walker %5d: i = %d, evecs = %10.5e\n", my_group, yw, evecs[0][yw]); + rewl -> swapConfig(evecs[0], 3*size_lsms); + + // calculate magnetization (or do it before determineAcceptance?) + if (generator_needs_moment) + { + double m0 {0.0}, m1 {0.0}, m2 {0.0}; + for(int i = 0; i < 3*size_lsms; i += 3) + { + m0 += evecs[0][i]; + m1 += evecs[0][i+1]; + m2 += evecs[0][i+2]; + } + switch (second_dimension) + { + case MagneticMoment : magnetization = std::sqrt(m0*m0 + m1*m1 + m2*m2); break; + case MagneticMomentX : magnetization = m0; break; + case MagneticMomentY : magnetization = m1; break; + case MagneticMomentZ : magnetization = m2; break; + } + if (generator -> updateHistogramFromRE(0, evecs[0], energy, magnetization, my_group)) + more_work = false; + } + else { + if (generator -> updateHistogramFromRE(0, evecs[0], energy, my_group)) + more_work = false; + } + } + REstepCount++; + } + + // Prepare a new configuration + if (MCstepCount % exchangeFrequency == 0 && replicaExchangeAcceptance) + generator -> generateEvec(0, evecs[0], replicaExchangeAcceptance); + else + generator -> generateEvec(0, evecs[0], newConfigAcceptance); + num_steps -= 1; + + if (restrict_steps && num_steps <= 0) more_work = false; + if (restrict_steps) std::cout << " " << num_steps << " steps remaining\n"; + walltime = MPI_Wtime() - walltime_0; + if (restrict_time && walltime >= max_time) more_work = false; + if (restrict_time) std::cout << " " << max_time - walltime << " seconds remaining\n"; + + // Determine if more work will be done; this will be broadcasted to all later + if (!more_work) op = 2; + + if (step_out_flag && newConfigAcceptance) + { + step_out_file << "# iteration " << energies_accumulated << std::endl; + step_out_file.precision(15); + step_out_file << energies_accumulated << std::endl; + step_out_file << energy << " " << bandEnergy << std::endl; + for (int j=0; j<3*size_lsms; j+=3) + step_out_file << evecs[0][j] << " " << evecs[0][j+1] << " " + << evecs[0][j+2] << std::endl; + } + + // write restart file every restartWriteFrequency seconds + if (walltime > nextWriteTime) + { + if (rank == 0) + { + char restartFile[51]; + sprintf(restartFile, "WLrestart%05d.jsn", my_group); + generator -> writeState(restartFile); + //generator -> writeState("WLrestart.jsn"); + nextWriteTime += restartWriteFrequency; + } + } + + } + + MPI_Bcast(&op, 1, MPI_INT, 0, local_comm); + if (op == 2) more_work = false; + + } + + // YingWai: or can be replaced by a collective call? (Dec 18, 13) + MPI_Barrier(MPI_COMM_WORLD); + + if (rank == 0) + { + char restartFile[51]; + sprintf(restartFile, "WLrestart%05d.jsn", my_group); + generator -> writeState(restartFile); + + delete generator; + MPI_Comm_free(&WLwalkersComm); + MPI_Group_free(&WLwalkersGroup); + } + + free(evecs[0]); + free(evecs); + + // Freeing WL communication related comm. + //MPI_Comm_free(&WLwalkersComm); + //MPI_Group_free(&WLwalkersGroup); + MPI_Group_free(&MPI_GROUP_WORLD); + } + + // Wrapping up: + + if (num_lsms > 1) + { + // make sure everyone arrives here: + MPI_Bcast (stupid, 37, MPI_CHAR, 0, MPI_COMM_WORLD); + MPI_Comm_free(&local_comm); + } + + if (world_rank == 0) + { + if (step_out_flag) + { + step_out_file << "# end\n-1\n" + << energy_accumulator / double(energies_accumulated) << std::endl; + step_out_file.close(); + } + std::cout << "Finished all scheduled calculations. Freeing resources.\n"; + std::cout<<"Energy mean = "< +#include +#include + +#ifdef _OPENMP +#include +#endif + +#include "SystemParameters.hpp" +#include "Misc/Indices.hpp" +#include "Misc/Coeficients.hpp" +#include "Accelerator/Accelerator.hpp" + +//#ifdef BUILDKKRMATRIX_GPU +#include "Accelerator/DeviceStorage.hpp" +void *allocateDConst(void); +void freeDConst(void *); + +std::vector deviceConstants; +// std::vector deviceStorage; +void * deviceStorage; +//#endif +extern "C" +void zblock_lu_cuda_c_ ( std::complex*, int *, int *, int *, int *, int *, int *, int *); + +int main(int argc, char *argv[]) +{ + LSMSSystemParameters lsms; + LocalTypeInfo local; + + lsms.global.setIstop("main"); + lsms.global.iprint=0; + lsms.global.default_iprint=-1; +#ifdef _OPENMP + lsms.global.GPUThreads=std::min(12,omp_get_max_threads()); +#else + lsms.global.GPUThreads=1; +#endif + int nLIZ = 113; + int kkrsz_max = 16; + int nspin = 2; + int kkrsz_ns = kkrsz_max * nspin; + int nrmat_ns = nLIZ * kkrsz_ns; + +// initialize the potential accelerators (GPU) +// we need to know the max. size of the kkr matrix to invert: lsms.n_spin_cant*local.maxNrmat() +// which is only available after building the LIZ + + acceleratorInitialize(nrmat_ns,lsms.global.GPUThreads); + local.tmatStore.pinMemory(); + +#ifdef BUILDKKRMATRIX_GPU + deviceConstants.resize(local.num_local); + for(int i=0; i m(nrmat_ns,nrmat_ns); + // nrmat_ns is sum of all block sizes (atoms in liz * 32) + // Synthetic matrix from calculateTauMatrix.cpp + for(int i=0; i max_blk_sz/2) + nblk++; + } + + int blk_sz[1000]; + + blk_sz[0]=kkrsz_ns; + if(nblk==1) + blk_sz[0]=nrmat_ns; + else if(nblk==2) + blk_sz[1]=nrmat_ns-blk_sz[0]; + else if(nblk>2) + { +// { +// int min_sz=(nrmat_ns-blk_sz[0])/(nblk-1); +// for(int i=1; i2) vecs=(Complex *)malloc((nrmat_ns*(kkrsz_ns*6+6))*sizeof(Complex)); + int *idcol = new int[blk_sz[0]]; idcol[0]=0; +#ifdef BUILDKKRMATRIX_GPU + Complex *dev_m=get_dev_m_(); + clearM00(dev_m, blk_sz[0], nrmat_ns,get_stream_(0)); +#endif +#ifdef _OPENMP + double st = omp_get_wtime(); +#endif + { + int k; +// block_inv_(&m(0,0),vecs,&nrmat_ns,&nrmat_ns,&nrmat_ns,ipvt, +// blk_sz,&nblk,delta, +// iwork,rwork,work1,&alg,idcol,&lsms.global.iprint); + zblock_lu_cuda_c_(&m(0,0),&nrmat_ns, blk_sz, &nblk, ipvt, &nrmat_ns,idcol,&k); + } +#ifdef _OPENMP + double et = omp_get_wtime(); + printf("Time: %lf (s)\n", et - st); +#endif + + local.tmatStore.unpinMemory(); +#ifdef BUILDKKRMATRIX_GPU + for(int i=0; i +#include +#include "Array3d.hpp" +#include "Indices.hpp" + +class SphericalHarmonicsCoeficients { +public: + int lmax; + std::vector clm; + void init(int _lmax) + { + Real pi=2.0*std::asin(1.0); + Real fpi=4.0*pi; + lmax=_lmax; + clm.resize((lmax+1)*(lmax+2)/2); +// coefficients for normalized associated Legendre functions (P_00 = \sqrt{1/4pi}) + for(int lm=0; lm<(lmax+1)*(lmax+2)/2; lm++) + clm[lm]=1.0; + // clm[lm]=std::sqrt(0.5); +// coefficients for standard form of the assocoiated Legendere functions +/* + clm[0]=std::sqrt(1.0/fpi); + for(int l=1; l<=lmax; l++) + { + Real xfact = std::sqrt(Real(2*l+1)/fpi); + for(int m=0; m<=l; m++) + { + clm[(l*(l+1))/2 + m]=1.0; + for(int i=1; i<=2*m; i++) + clm[(l*(l+1))/2 + m]*=Real(l-m+i); + clm[(l*(l+1))/2 + m]=xfact*std::sqrt(1.0/clm[(l*(l+1))/2 + m]); + } + } +*/ + } +}; + +extern SphericalHarmonicsCoeficients sphericalHarmonicsCoeficients; + +extern "C" +{ +void cgaunt_(int * lmax, Real *clm, + Real *plmg, Real *tg, Real *wg, + Real *cgnt, + int *lofk, int *mofk, + int *iprint, char *istop); +} + +void calculateGauntCoeficients(int lmax, Array3d &cgnt, AngularMomentumIndices &a); + +class GauntCoeficients { +public: + int lmax; + Array3d cgnt; + + void init(LSMSSystemParameters &lsms, AngularMomentumIndices &a, SphericalHarmonicsCoeficients &s) + { + const bool useNewGaunt = false; + const bool testNewGaunt = true; + + lmax=a.lmax/2; + // lmax=lsms.maxlmax; + + if(useNewGaunt) + { + calculateGauntCoeficients(lmax, cgnt, a); + if(testNewGaunt) + { + const Real tol=1.0e-12; + std::vector tg,wg; + Matrix plmg; + Array3d cgntTest; + tg.resize(2*(2*lmax+1)); wg.resize(2*(2*lmax+1)); + cgntTest.resize(lmax+1,(lmax+1)*(lmax+1),(lmax+1)*(lmax+1)); + plmg.resize(((2*lmax+1)*(2*lmax+2))/2,2*lmax+1); + + cgaunt_(&lmax,&s.clm[0],&plmg(0,0),&tg[0],&wg[0], + &cgntTest(0,0,0), + &a.lofk[0],&a.mofk[0], + &lsms.global.iprint,lsms.global.istop); + + for(int l1=0; l1tol) + { + printf("Difference in Gaunt Coeficients: %d %d %d : new=%.12lf old=%.12lf\n", + l1,j2,j3,cgnt(l1,j2,j3),cgntTest(l1,j2,j3)); + exit(1); + } + } + } + } else { + std::vector tg,wg; + Matrix plmg; + tg.resize(2*(2*lmax+1)); wg.resize(2*(2*lmax+1)); + cgnt.resize(lmax+1,(lmax+1)*(lmax+1),(lmax+1)*(lmax+1)); + plmg.resize(((2*lmax+1)*(2*lmax+2))/2,2*lmax+1); + + cgaunt_(&lmax,&s.clm[0],&plmg(0,0),&tg[0],&wg[0], + &cgnt(0,0,0), + &a.lofk[0],&a.mofk[0], + &lsms.global.iprint,lsms.global.istop); + } + } +}; + +extern GauntCoeficients gauntCoeficients; + +extern "C" +{ +void ifacts_(int *lmax,Complex *illp,Complex *ilp1,int *iprint, char *istop, int istop_len); +} + +class IFactors { +public: + Matrix illp; + std::vector ilp1; + void init(LSMSSystemParameters &lsms, int _lmax) + { + ilp1.resize(2*_lmax+1); + illp.resize((_lmax+1)*(_lmax+1),(_lmax+1)*(_lmax+1)); + ifacts_(&_lmax,&illp(0,0),&ilp1[0],&lsms.global.iprint,lsms.global.istop,32); + } +}; + +extern IFactors iFactors; + +#endif diff --git a/src/Misc/Gaunt.hpp b/src/Misc/Gaunt.hpp new file mode 100644 index 000000000..94552884d --- /dev/null +++ b/src/Misc/Gaunt.hpp @@ -0,0 +1,188 @@ +#ifndef BINOMIAL_HPP +#define BINOMIAL_HPP + +#include + + +namespace NewGaunt { +// +//  ( n ) ( n ) (n+1)-k +// return ( ) == ( ) ------- +// ( k ) (k-1) k +// +template +Int binomialCoefficient(Int n, Int k) +{ + if(k>n || k +Int factorial(Int n) +{ + if(n<0) return Int(0); + Int f=1; + for(Int i=1; i<=n; i++) + f=f*i; + return f; +} + +// helper function: gcd +template +Int gcd(Int i, Int j) +{ + Int a=i; + Int b=j; + Int h; + + while(b!=Int(0)) + { + h=a%b; + a=b; + b=h; + } + + return a; +} + +//helper function iabs +template +Int iabs(Int i) +{ + if(i +Int w3j_intterm(Int j1, Int j2, Int j3, Int m1, Int m2, Int m3) +{ + Int sum=Int(0); + Int I1 = Int(0); + if(j1-j3+m2>I1) I1=j1-j3+m2; + if(j2-j3-m1>I1) I1=j2-j3-m1; + Int I2 = j1+j2-j3; + if(j1-m1 +Int w3j_sqrt_numerator(Int j1, Int j2, Int j3, Int m1, Int m2, Int m3) +{ + return binomialCoefficient(Int(2)*j1,j1-j2+j3)*binomialCoefficient(Int(2)*j2,j1+j2-j3) + *binomialCoefficient(Int(2)*j3,-j1+j2+j3); +} + +template +Int w3j_sqrt_denominator(Int j1, Int j2, Int j3, Int m1, Int m2, Int m3) +{ + return binomialCoefficient(Int(2)*j1,j1+m1)*binomialCoefficient(Int(2)*j2,j2+m2) + *binomialCoefficient(Int(2)*j3,j3+m3); +} + +template +R w3j_sqrt(Int j1, Int j2, Int j3, Int m1, Int m2, Int m3) +{ + Int n,d; + Int g; + n=binomialCoefficient(Int(2)*j1,j1-j2+j3); + d=binomialCoefficient(Int(2)*j1,j1+m1); + g=gcd(n,d); + d=d/g; + n=n/g; + n=n*binomialCoefficient(Int(2)*j2,j1+j2-j3); + d=d*binomialCoefficient(Int(2)*j2,j2+m2); + g=gcd(n,d); + d=d/g; + n=n/g; + n=n*binomialCoefficient(Int(2)*j3,-j1+j2+j3); + d=d*binomialCoefficient(Int(2)*j3,j3+m3); + g=gcd(n,d); + d=d/g; + n=n/g; + + return sqrt(R(n)/R(d)); +} + +template +R w3j_Delta(Int j1, Int j2, Int j3) +{ + Int n,d; // numerator and denominator + Int g; // gcd used in intermediate calculations + R dsqr; // Delta square + // n = (j1+j2-j3)! (j1-j2+j3)! (-j1+j2+j3)! + // d = (j1+j2+j3+1)! + + d=factorial(j1+j2+j3+Int(1)); + n=factorial(j1+j2-j3); + g=gcd(n,d); + d=d/g; + n=n/g; + n=n*factorial(j1-j2+j3); + g=gcd(n,d); + d=d/g; + n=n/g; + n=n*factorial(j2+j3-j1); + g=gcd(n,d); + d=d/g; + n=n/g; + + dsqr=R(n)/R(d); + return sqrt(dsqr); +} + +template +R w3j(Int j1, Int j2, Int j3, Int m1, Int m2, Int m3) +{ + Int n,d,s,i,g; + R delta, w3j_f; + // printf("w3j(%d,%d,%d, %d,%d,%d)\n",j1,j2,j3,m1,m2,m3); + if(m1+m2+m3!=Int(0)) return R(0); + if((iabs(m1)>j1) || (iabs(m2)>j2) || (iabs(m3)>j3)) return R(0); + if((j3(j1,j2,j3); +/* + n=w3j_sqrt_numerator(j1, j2, j3, m1, m2, m3); + d=w3j_sqrt_denominator(j1, j2, j3, m1, m2, m3); + // printf("d=%d n=%d i=%d s=%d delta=%lf\n",d,n,i,s,delta); + g=gcd(n,d); + d=d/g; + n=n/g; +*/ + i=w3j_intterm(j1, j2, j3, m1, m2, m3); + s=Int(1); + if(iabs(j1-j2-m3)%Int(2) == Int(1)) s=Int(-1); + + // printf("g=%d -> d=%d n=%d i=%d s=%d delta=%lf\n",g,d,n,i,s,delta); + + return delta*w3j_sqrt(j1, j2, j3, m1, m2, m3)*R(s*i); +} + +} // namepsape NewGaunt + +template +R gaunt(Int lp, Int l1, Int l2, Int mp, Int m1, Int m2) +{ + if((lp+l1+l2)%Int(2)==Int(1)) return R(0); + if(NewGaunt::iabs(mp)>lp || NewGaunt::iabs(m1)>l1 || NewGaunt::iabs(m2)>l2) return R(0); + R g=sqrt(R((2*lp+1)*(2*l1+1)*(2*l2+1))/(4.0*M_PI)) + *NewGaunt::w3j(lp,l1,l2,0,0,0)*NewGaunt::w3j(lp,l1,l2,-mp,m1,m2); + if(NewGaunt::iabs(mp)%Int(2)==Int(1)) return -g; + return g; +} +#endif diff --git a/src/Misc/Gaunt_gmp.hpp b/src/Misc/Gaunt_gmp.hpp new file mode 100644 index 000000000..473284233 --- /dev/null +++ b/src/Misc/Gaunt_gmp.hpp @@ -0,0 +1,179 @@ +#ifndef BINOMIAL_HPP +#define BINOMIAL_HPP + +// try gmp: +#include + +#include + + +namespace NewGaunt { +// +//  ( n ) ( n ) (n+1)-k +// return ( ) == ( ) ------- +// ( k ) (k-1) k +// + void binomialCoefficient(mpz_t b, long n, long k) + { + mpz_set_ui(b,0); + if(k>n || k<0) return; + mpz_set_si(b,n); + mpz_bin_ui(b,b,k); + } + +//helper function iabs +// provided as +// void mpz_abs (mpz_t rop, mpz_t op) +template +Int iabs(Int i) +{ + if(iI1) I1=j1-j3+m2; + if(j2-j3-m1>I1) I1=j2-j3-m1; + long I2 = j1+j2-j3; + if(j1-m1j1) || (iabs(m2)>j2) || (iabs(m3)>j3)) return; + if((j3 +R gaunt(Int lp, Int l1, Int l2, Int mp, Int m1, Int m2) +{ + R gg; + mpf_t g,h; + + if((lp+l1+l2)%Int(2)==Int(1)) return R(0); + if(NewGaunt::iabs(mp)>lp || NewGaunt::iabs(m1)>l1 || NewGaunt::iabs(m2)>l2) return R(0); + mpf_init(g); + mpf_init(h); + NewGaunt::w3j(g,lp,l1,l2,0,0,0); + NewGaunt::w3j(h,lp,l1,l2,-mp,m1,m2); + mpf_mul(g,g,h); + mpf_set_si(h,(2*lp+1)*(2*l1+1)*(2*l2+1)); + mpf_sqrt(h,h); + mpf_mul(g,g,h); + + gg=mpf_get_d(g)/sqrt(4.0*M_PI); + if(NewGaunt::iabs(mp)%Int(2)==Int(1)) gg=-gg; + mpf_clear(g); + mpf_clear(h); + return gg; +} +#endif diff --git a/src/Misc/Indices.hpp b/src/Misc/Indices.hpp new file mode 100644 index 000000000..10a3b0f4d --- /dev/null +++ b/src/Misc/Indices.hpp @@ -0,0 +1,40 @@ +#ifndef LSMS_INDICES_HPP +#define LSMS_INDICES_HPP + +#include + +class AngularMomentumIndices { +public: + int lmax,ndlj,ndlm; + std::vector lofk,mofk,lofj,mofj; + + void init(int _lmax) + { + lmax=_lmax; + ndlj=(lmax+1)*(lmax+1); + ndlm=((lmax+1)*(lmax+2))/2; + mofk.resize(ndlj); lofk.resize(ndlj); + mofj.resize(ndlm); lofj.resize(ndlm); + int j=0; + int k=0; + for(int l=0; l<=lmax; l++) + { + for(int m=0; m<=l; m++) + { + lofj[j]=l; + mofj[j++]=m; + } + for(int m=-l; m<=l; m++) + { + + lofk[k]=l; + mofk[k]=m; + // printf("k,l,m: %d %d %d, lofk,mofk:%d %d\n",k,l,m,lofk[k],mofk[k]); + k++; + } + } + // printf("k=%d\n",k); + } +}; + +#endif diff --git a/src/Misc/Makefile b/src/Misc/Makefile new file mode 100755 index 000000000..c692f4056 --- /dev/null +++ b/src/Misc/Makefile @@ -0,0 +1,32 @@ +OBJ = zeroout.o fstop.o newint.o fit.o interp.o trltog.o spin_trafo.o fitpot.o rwave.o \ + initwave.o dfv.o dfv_new.o bsstep.o mmid.o rzextr.o zsphbesjh.o zsphbesj.o cinterp.o cgaunt_c.o \ + gaunt.o quadrature.o ifacts_c.o clock_time.o cmtruni.o \ + constraint.o v_plus_minus.o congauss_c.o u_sigma_u.o fnpi.o wrtmtx.o mbeqa.o \ + cnewint.o ylag.o ricbes.o newder.o \ + clebsch.o rsimp.o matrot1.o matr.o rotmat.o \ + bulirsch_stoer.o mod_midpoint.o \ + bulirschStoerIntegrator.o \ + calculateGauntCoeficients.o \ + associatedLegendreFunction.o \ + readLastLine.o stop_with_backtrace.o \ + essl_workaround.o + +# removed: plglmax.o getclm.o -> replaced with: associatedLegendreFunction.o + +all: libMisc.a + +clean: + rm -f *.a *.o + +%.o : %.cpp + $(CXX) $(INC_PATH) -c -o $@ $< + +%.o : %.f + $(F77) -c -o $@ $< + +%.o : %.f90 + $(F77) -c -o $@ $< + +libMisc.a : $(OBJ) + $(AR) -r libMisc.a $(OBJ) + cp libMisc.a $(TOP_DIR)/lib diff --git a/src/Misc/associatedLegendreFunction.cpp b/src/Misc/associatedLegendreFunction.cpp new file mode 100644 index 000000000..f41baa397 --- /dev/null +++ b/src/Misc/associatedLegendreFunction.cpp @@ -0,0 +1,28 @@ +// routines to calculate the associated Legendre functions P_{lm} needed to calculate +// spherical harmonics +// This also provides the coeficients c_{lm} to calculate spherical harmonics: +// Y_{lm}(\theta, \phi) = c_{lm} P_{lm}(\cos\theta) e^{im\phi} +// +// The new routine calculates normalized versions of the Legendre polynomials +// such that +// Y_{lm}(\theta, \phi) = \sqrt{1/2} \bar{P}_{lm}(\cos\theta) e^{im\phi} +// +// i.e. c_{lm} = \sqrt{1/2} +// + +#include +#include "associatedLegendreFunction.hpp" + +extern "C" { +void plm_normalized_(int *lmax, double *x, double *plm) +{ + associatedLegendreFunctionNormalized(*x, *lmax, plm); +} + +void ylm_coefficients_(int *lmax, double *clm) +{ + for(int i=0; i<((*lmax) +1)*((*lmax) +2)/2; i++) + clm[i]=std::sqrt(0.5); +} +} + diff --git a/src/Misc/associatedLegendreFunction.hpp b/src/Misc/associatedLegendreFunction.hpp new file mode 100644 index 000000000..dcb0943d1 --- /dev/null +++ b/src/Misc/associatedLegendreFunction.hpp @@ -0,0 +1,89 @@ +// calculate the associated Legendre Function +// P_{lm}(x) = \sqrt{2 (2l+1)\frac{(l-m)!}{(l+m)!}} x^m \frac{d^m}{dx^m} P_l(x) +// where P_l(x) is the Legendre Polynomial of degree l +// + +#include + +// for the normalized associated Legendre functions \bar{P}_{lm} +// such that the spherical harmonics are: +// Y_lm(\theta, \phi) = \bar{P}_{lm}(\cos \theta) e^{i m \phi} +// use the recursion relation: +// P_{00}(x) = \sqrt{1/2\pi} +// +// i.e \bar{P}_{lm}=\sqrt{\frac{(2l+1)(l-m)!}{4\pi(l+m)!}} P_{lm} +// +// Plm is a 1-d array that will contain all the values of P_{lm}(x) from P_{00} to P_{l_{max} l_{max}} +// the index into this array is Plm[l*(l+1)/2 + m] +// + +inline int plmIdx(int l, int m) +{ return l*(l+1)/2+m; } + +template // R has to be real data type (default double) +void associatedLegendreFunctionNormalized(R x, int lmax, R *Plm) +{ + const R pi = std::acos(-R(1)); + // y = \sqrt{1-x^2} + R y = std::sqrt(R(1)-x*x); + // initialize the first entry + // Plm[0]=std::sqrt(R(1)/(R(2)*pi)); + Plm[0]=std::sqrt(R(1)/(R(4)*pi)); + + if(lmax<1) return; + + for(int m=1; m<=lmax; m++) + { + // \bar{P}_{mm} = - \sqrt{\frac{2m+1}{2m}} y \bar{P}_{m-1, m-1} + Plm[plmIdx(m,m)] = - std::sqrt(R(2*m+1)/R(2*m)) * y * Plm[plmIdx(m-1,m-1)]; + // \bar{P}_{mm-1} = \sqrt{2 m + 1} x \bar{P}_{m-1, m-1} + Plm[plmIdx(m,m-1)] = std::sqrt(R(2*m+1)) * x * Plm[plmIdx(m-1,m-1)]; + } + + for(int m=0; m // R has to be real data type (default double) +void associatedLegendreFunction(R x, int lmax, R *Plm) +{ + // y = \sqrt{1-x^2} + R y = std::sqrt(R(1)-x*x); + // initialize the first entry + Plm[0]=R(1); + if(lmax<1) return; + Plm[1]=x; + Plm[2]=-y; + for(int m=2; m +#include + +#include "bulirschStoerIntegrator.hpp" + +/* + subroutine bulirsch_stoer(y,dy,nv,x0,dx, + & rn,ecomp,vr,eunit,b,allp1,nextrp) +*/ + +extern "C" { + void dfv_m_(double *r, double *y, double *dy, int *nv, int *n, + double *rn, std::complex *ecomp, double *vr, + double *eunit, double *b, double *allp1); + void bulirsch_stoer_integrator_(double *xFrom, double *xTo, double *y, double *dy, int *nv, + double *rn, std::complex *ecomp, double *vr, + double *eunit, double *b, double *allp1, int *nextrp); +} + +// specialization to use the dfv_m subroutine to calculate the right hand side of the radial ODE +inline void modifiedMidpoint_dfv(double x0, double x1, double *y0, + double *y1, int n, + int steps, + int *nv, int *nextrp, double *rn, std::complex *ecomp, double *vr, double *eunit, double *b, double *allp1) +{ + double y2[n], dy[n]; + double h = (x1-x0)/double(steps); + double h2 = double(2)*h; + + double x= x0; + + // rhs(x,y0,dy); + dfv_m_(&x, y0, dy, nv, nextrp, rn, ecomp, vr, eunit, b, allp1); + for(int i=0; i *ecomp, double *vr, double *eunit, double *b, double *allp1, + double eps=1.0e-12) +{ + const int nSteps=11; + const int stepTarget=7; + const double stepGrowth=1.25; + const double stepShrink=0.8; + // Bulirsch Stoer sequence (n_j = 2 n_{j-2}) + const int stepSequence[]={2,4,6,8,12,16,24,32,48,64,96,128,192,256,384,512,768,1024}; + // Deuflhard sequence (n_j = 2 j) + // const int stepSequence[]={2,4,6,8,10,12,14,16,18,20,22,24,26,28,30}; + // Romberg sequence (n_j = 2^j) + // const int stepSequence[]={2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536}; + // Harmonic sequence (n_j = j) + // const int stepSequence[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14} + + double xEpsilon = 1.0e-12 * std::abs(x0); + double err; + double y[n]; + + double x = x0; + double h0 = x1-x0; + double h=h0; + for(int i=0; i extrapolation(n,nSteps+1); + + do + { + // fill extrapolation Tableau + int step=0; + double err=HUGE_VAL; + extrapolation.reset(); + while(step < nSteps && err > eps) + { + modifiedMidpoint_dfv(x,x+h,y,y1,n,stepSequence[step],nv, nextrp, rn, ecomp, vr, eunit, b, allp1); + extrapolation.add(h/double(stepSequence[step]), y1); + err=extrapolation.relativeError(); + step++; + } + // printf("step %d err %g\n",step,err); + if(err < eps) + { + x = x + h; + if(step reduce the interval + h = double(0.25) * h; + if(h+x==x) + { + printf("Bulirsch-Stoer didn't converge to %g (error=%g)\n",eps,err); + extrapolation.estimate(y1); + return 1; + } + } + } while (std::abs(x-x1)>xEpsilon); + + + extrapolation.estimate(y1); + return 0; +} + +void bulirsch_stoer_integrator_(double *xFrom, double *xTo, double *y, double *dy, int *nv, + double *rn, std::complex *ecomp, double *vr, + double *eunit, double *b, double *allp1, int *nextrp) +{ + + double y1[*nv]; +// bulirschStoerIntegrator(*xFrom, *xTo, y, y1, *nv, +// [&nv,&rn,&ecomp,&vr,&eunit,&b,&allp1,&nextrp](double x, double *y, double *dy) +// { +// dfv_m_(&x, y, dy, nv, nextrp, rn, ecomp, vr, eunit, b, allp1); +// }, +// 1.0e-12); + bulirschStoerIntegrator_dfv(*xFrom, *xTo, y, y1, *nv, + nv, nextrp, rn, ecomp, vr, eunit, b, allp1, + 1.0e-12); + for(int i=0; i< *nv; i++) + y[i]=y1[i]; + dfv_m_(xTo, y, dy, nv, nextrp, rn, ecomp, vr, eunit, b, allp1); +} diff --git a/src/Misc/bulirschStoerIntegrator.hpp b/src/Misc/bulirschStoerIntegrator.hpp new file mode 100644 index 000000000..0b0d6bbe4 --- /dev/null +++ b/src/Misc/bulirschStoerIntegrator.hpp @@ -0,0 +1,243 @@ +// bulischStoerIntegrator.hpp +// integrate the initial value problem of a system of coupled ODEs +// using the Bulirsch-Stoer method +// R. Bulirsch and J. Stoer, Numerische Matematik 8, 1-13 (1966) +// + +#include +#include + +template +void modifiedMidpoint(Rx x0, Rx x1, Ry *y0, + Ry *y1, int n, std::function rhs, + int steps) +{ + Ry y2[n], dy[n]; + Rx h = (x1-x0)/Rx(steps); + Rx h2 = Rx(2)*h; + + Rx x= x0; + + rhs(x,y0,dy); + for(int i=0; i +class ExtrapolatorT0 { +public: + inline int idx(int d, int i, int j) { return d+dim*(i*(i+1)/2 + j); } + std::vector T; + std::vector h; + int kNum,dim; + ExtrapolatorT0(int d, int kMax) {T.resize(d*(kMax+1)*(kMax+2)/2); h.resize(kMax+1); kNum=0; dim=d;} + void reset() {kNum=0;} + void add(Rh hNew, Rf *fNew) + { + h[kNum]=hNew; + int i=kNum; + kNum++; + for(int d=0; d success +// templated on the type of real numbers +template +int bulirschStoerIntegrator(Rx x0, Rx x1, Ry *y0, + Ry *y1, int n, std::function rhs, + Rx eps=1.0e-12) +{ + const int nSteps=11; + const int stepTarget=7; + const Rx stepGrowth=1.25; + const Rx stepShrink=0.8; + // Bulirsch Stoer sequence (n_j = 2 n_{j-2}) + const int stepSequence[]={2,4,6,8,12,16,24,32,48,64,96,128,192,256,384,512,768,1024}; + // Deuflhard sequence (n_j = 2 j) + // const int stepSequence[]={2,4,6,8,10,12,14,16,18,20,22,24,26,28,30}; + // Romberg sequence (n_j = 2^j) + // const int stepSequence[]={2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536}; + // Harmonic sequence (n_j = j) + // const int stepSequence[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14} + + Rx xEpsilon = 1.0e-12 * std::abs(x0); + Rx err; + Ry y[n]; + + Rx x = x0; + Rx h0 = x1-x0; + Rx h=h0; + for(int i=0; i extrapolation(n,nSteps+1); + + do + { + // fill extrapolation Tableau + int step=0; + Rx err=HUGE_VAL; + extrapolation.reset(); + while(step < nSteps && err > eps) + { + modifiedMidpoint(x,x+h,y,y1,n,rhs,stepSequence[step]); + extrapolation.add(h/Rx(stepSequence[step]), y1); + err=extrapolation.relativeError(); + step++; + } + // printf("step %d err %g\n",step,err); + if(err < eps) + { + x = x + h; + if(step reduce the interval + h = Rx(0.25) * h; + if(h+x==x) + { + printf("Bulirsch-Stoer didn't converge to %g (error=%g)\n",eps,err); + extrapolation.estimate(y1); + return 1; + } + } + } while (std::abs(x-x1)>xEpsilon); + + + extrapolation.estimate(y1); + return 0; +} + + +template +int generalizedBulirschStoerIntegrator(Rx x0, Rx x1, Ry *y0, + Ry *y1, int n, std::function rhs, + std::function rhs, + int steps)> method, + Rx eps=1.0e-12) +{ + const int nSteps=11; + const int stepTarget=7; + const Rx stepGrowth=1.25; + const Rx stepShrink=0.8; + // Bulirsch Stoer sequence (n_j = 2 n_{j-2}) + const int stepSequence[]={2,4,6,8,12,16,24,32,48,64,96,128,192,256,384,512,768,1024}; + // Deuflhard sequence (n_j = 2 j) + // const int stepSequence[]={2,4,6,8,10,12,14,16,18,20,22,24,26,28,30}; + // Romberg sequence (n_j = 2^j) + // const int stepSequence[]={2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536}; + // Harmonic sequence (n_j = j) + // const int stepSequence[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14} + + Rx xEpsilon = 1.0e-12 * std::abs(x0); + Rx err; + Ry y[n]; + + Rx x = x0; + Rx h0 = x1-x0; + Rx h=h0; + for(int i=0; i extrapolation(n,nSteps+1); + + do + { + // fill extrapolation Tableau + int step=0; + Rx err=HUGE_VAL; + extrapolation.reset(); + while(step < nSteps && err > eps) + { + method(x,x+h,y,y1,n,rhs,stepSequence[step]); + extrapolation.add(h/Rx(stepSequence[step]), y1); + err=extrapolation.relativeError(); + step++; + } + // printf("step %d err %g\n",step,err); + if(err < eps) + { + x = x + h; + if(step reduce the interval + h = Rx(0.25) * h; + if(h+x==x) + { + printf("Bulirsch-Stoer didn't converge to %g (error=%g)\n",eps,err); + extrapolation.estimate(y1); + return 1; + } + } + } while (std::abs(x-x1)>xEpsilon); + + + extrapolation.estimate(y1); + return 0; +} diff --git a/src/Misc/bulirsch_stoer.f b/src/Misc/bulirsch_stoer.f new file mode 100644 index 000000000..6f0530616 --- /dev/null +++ b/src/Misc/bulirsch_stoer.f @@ -0,0 +1,120 @@ +! call bsstep (y,dy,nv,nr,rfrom,htry,watol,yp,hdid,hnext,idid, +! & rad(jp),einside,pot(1,jp), +! & vso,1,isymm,eunit,dfv,b,allp1) + + subroutine bulirsch_stoer(y,dy,nv,x0,dx, + & rn,ecomp,vr,eunit,b,allp1,nextrp) + implicit none + + integer nv,nextrp + real*8 y(nv),dy(nv),x0,dx + + real*8 rn,vr(*),eunit,b,allp1 + complex*16 ecomp + + integer max_steps +! parameter (max_steps=8) + parameter (max_steps=12) + real*8 Tik(nv,max_steps),xi(max_steps),df(nv) + real*8 Qik(nv,max_steps),Dik(nv,max_steps) + real*8 y_out(nv) + real*8 h,hh,err,den + + integer i,ni,j,nj,ii + PARAMETER (nj=12) + + hh=dx/nj + do j=1,nj + do i=1,max_steps + ni=2*i + h=dx/(ni*nj) + call mod_midpoint(y,dy,nv,x0+(j-1)*hh,hh,ni,y_out, + & rn,ecomp,vr,eunit,b,allp1,nextrp) + call extrapolateT0(h*h,y_out,Tik,xi,df,nv,max_steps,i) +! call extrapolateQD0(h*h,y_out,Tik,Qik,Dik,xi,df,nv,max_steps,i) + +! err=0.0d0 +! do ii=1,nv,2 +! den=abs(yscal(ii))+abs(yscal(ii+1)) +! if(den.gt.1.0e-10) then +! err=err+(abs(df(ii))+abs(df(ii+1)))/den +! endif +! enddo + + end do + do i=1,nv + y(i)=Tik(i,1) + end do + call dfv_m(x0+dx,y,dy,nv,nextrp,rn,ecomp,vr,eunit,b,allp1) + end do + + end + + subroutine extrapolateQD0(x,f,fout,Qik,Dik,xi,df,n_val,imax,i) + implicit none + +! calculate the diagonal ik for a fixed i, k=1..k of the interpolation Tableau +! store Qik as Qik(*,i-k+1) +! the new extrapolation to h=0 will be in fout + + real*8 fout(n_val),Qik(n_val,imax),Dik(n_val,imax) + real*8 xi(imax),f(n_val),c(n_val) + real*8 df(n_val) + real*8 d,x,delta + integer k,j,n_val,imax,i + + xi(i)=x +! set Ti1 + do j=1,n_val + Qik(j,i)=f(j) + Dik(j,i)=f(j) + c(j)=0.0 +! df(j)=Tik(j,1) + end do +! calculate remaining entries in Qik + do k=i-1,1,-1 + d=1.0/(xi(k)-xi(i)) + do j=1,n_val + delta=Dik(j,k+1)-Qik(j,k) + Qik(j,k)=delta*xi(i)*d + Dik(j,k)=delta*xi(k)*d + c(j)=c(j)+Qik(j,k) + end do + end do + do j=1,n_val + fout(j)=c(j)+f(j) +! is this the right error expression? + df(j)=Qik(j,1) + end do + end + + subroutine extrapolateT0(x,f,Tik,xi,df,n_val,imax,i) + implicit none + +! calculate the diagonal ik for a fixed i, k=1..k of the interpolation Tableau +! store Tik as Tik(*,i-k+1) +! the new extrapolation to h=0 will be in Tik(*,1) + + real*8 Tik(n_val,imax) + real*8 xi(imax),f(n_val) + real*8 df(n_val) + real*8 d,x + integer k,j,n_val,imax,i + + xi(i)=x +! set Ti1 + do j=1,n_val + Tik(j,i)=f(j) + df(j)=Tik(j,1) + end do +! calculate remaining entries in Tik + do k=i-1,1,-1 + d=1.0/(xi(k)/xi(i) - 1.0) + do j=1,n_val + Tik(j,k)=Tik(j,k+1)+(Tik(j,k+1)-Tik(j,k))*d + end do + end do + do j=1,n_val + df(j)=2.0d0*Tik(j,2)-df(j)-Tik(j,1) + end do + end diff --git a/src/Misc/calculateGauntCoeficients.cpp b/src/Misc/calculateGauntCoeficients.cpp new file mode 100755 index 000000000..e6f4a36ac --- /dev/null +++ b/src/Misc/calculateGauntCoeficients.cpp @@ -0,0 +1,54 @@ +#include "Complex.hpp" +#include +#include +#include +#include "Array3d.hpp" +#include "Indices.hpp" + +#ifdef USE_GMP +#include "Gaunt_gmp.hpp" +#else +#include "Gaunt.hpp" +#endif + +/* +c +c **************************************************************** +c generate: +c +c 4pi _ m1 _ m2* _ m3 _ +c clll = int do Y (o) * Y (o) * Y (o) +c 0 l1 l2 l3 +c +c L3 +c = C +c L1,L2 +c +c L1, L2: l = 0,1,..,lmax; L3: l=0,1,...,2*lmax +c **************************************************************** +*/ + +void calculateGauntCoeficients(int lmax, Array3d &cgnt, AngularMomentumIndices &a) +{ +#ifdef USE_GMP + mpf_set_default_prec(128); +#endif + cgnt.resize(lmax+1,(lmax+1)*(lmax+1),(lmax+1)*(lmax+1)); + for(int j2=0; j2<(lmax+1)*(lmax+1); j2++) + { + int l2=a.lofk[j2]; + int m2=a.mofk[j2]; + for(int j1=0; j1<(lmax+1)*(lmax+1); j1++) + { + int l1=a.lofk[j1]; + int m1=a.mofk[j1]; + int m3=m2-m1; + int lb=std::max(abs(m3),abs(l1-l2)); + for(int l3=l1+l2; l3>=lb; l3-=2) + { + cgnt(l3/2,j1,j2)=gaunt(l2,l1,l3,m2,m1,m3); + } + } + } +} + diff --git a/src/Misc/calculateGaussLegendrePoints.hpp b/src/Misc/calculateGaussLegendrePoints.hpp new file mode 100644 index 000000000..97e238b52 --- /dev/null +++ b/src/Misc/calculateGaussLegendrePoints.hpp @@ -0,0 +1,80 @@ +// calculateGaussLegendreNodes calculates the nodes and weights for +// the Gauss-Legendre quadrature formula of degree n>0 +// the algorithm follows +// +// David H. Bailey, Karthik Jeyabalan and Xiaoye S. Li +// "A Comparison of Three High-Precision Quadrature Schemes" +// Experimental Mathematics 14, 317-329 (2005). +// + +#include + +template // R is a real type e.g. double +void calculateGaussLegendrePoints(R *x, R *w, int n, R xLeft = -1.0, R xRight = +1.0) +{ + const R pi = std::acos(-R(1)); + + R Pk[n], PkMinus1[n], PkPlus1[n]; // the Legendre polynomials at points x[i] + R Ppn[n]; // derivative of P_n(x_i) + R dX[n]; // correction values for the Newton iteration + + R xHalfWidth = 0.5*(xRight - xLeft); + R xMidpoint = 0.5*(xRight+xLeft); + + // the x[i] are the roots of the nth degree Legendre Polynomial P_n(x) + // we search these using a Newton iteration with starting guess + // x[i] ~ cos(\pi (j - 1/4) / (n + 1/2)) + + for(int i=0; i plmg,tg,wg, + > cgnt, + > lofk,mofk, + > iprint,istop) +c ================================================================= +c + implicit none +c + character sname*20 + character istop*32 +c + integer lmax + integer iprint + integer ng + integer n1 + integer n2 + integer j1,l1,m1 + integer j2,l2,m2 + integer l3,m3 + integer lofk((2*lmax+1)**2) + integer mofk((2*lmax+1)**2) +c + real*8 plmg((2*lmax+1)*(2*lmax+2)/2,2*lmax+1) + real*8 clm((2*lmax+1)*(2*lmax+2)/2) + real*8 tg(2*(2*lmax+1)) + real*8 wg(2*(2*lmax+1)) + real*8 gaunt + real*8 cgnt(lmax+1,(lmax+1)**2,(lmax+1)**2) + real*8 ctemp + real*8 ctol +c + parameter (ctol=1.0d-14) + parameter (sname='cgaunt') +c +c **************************************************************** +c generate: +c +c 4pi _ m1 _ m2* _ m3 _ +c clll = int do Y (o) * Y (o) * Y (o) +c 0 l1 l2 l3 +c +c L3 +c = C +c L1,L2 +c +c L1, L2: l = 0,1,..,lmax; L3: l=0,1,...,2*lmax +c **************************************************************** +c +c ================================================================ +c generate the gaussian integration pts and weights............... +c ---------------------------------------------------------------- + call gauss_legendre_points(-1.d0,1.d0,tg,wg,2*(2*lmax+1)) +c ---------------------------------------------------------------- +c +c ================================================================ +c generate the plm's at the gaussian nodes........................ + n1=2*lmax+1 + do ng=1,n1 +! meis: changed to normalized associated Legendre functions + call plm_normalized(2*lmax,tg(ng),plmg(1,ng)) + enddo +c + if(iprint.ge.1) then + write(6,'('' lmax ='',1i4)')lmax + write(6,'('' ng,tg(ng),wg(ng)'',i5,2d18.10)') + > (ng,tg(ng),wg(ng),ng=1,2*(2*lmax+1)) + endif +c ================================================================ +c generate gaunt numbers.......................................... +c ================================================================ + n1=(lmax+1)**2 + n2=(lmax+1)**2 + do j2=1,n2 + l2=lofk(j2) + m2=mofk(j2) + do j1=1,n1 + l1=lofk(j1) + m1=mofk(j1) + m3=m2-m1 + do l3=l1+l2,max(abs(m3),abs(l1-l2)),-2 + ctemp=gaunt(l1,m1,l2,m2,l3,m3,2*lmax,2*lmax+1, + > wg,plmg,clm) + if(abs(ctemp).lt.ctol) ctemp=0.d0 + cgnt(l3/2+1,j1,j2)=ctemp +c ================================================================ + if(iprint.ge.2) then + write(6,'('' l1,m1,l2,m2,l3,m3,clll = '', + > 6i3,2x,1pd20.13)') + > l1,m1, + > l2,m2, + > l3,m3, + > cgnt(l3/2+1,j1,j2) + endif +c ================================================================ +c + enddo + enddo + enddo +c + if(istop.eq.sname) then + call fstop(sname) + else + return + endif +c + end diff --git a/src/Misc/cgc.h b/src/Misc/cgc.h new file mode 100755 index 000000000..3b487e07a --- /dev/null +++ b/src/Misc/cgc.h @@ -0,0 +1,6 @@ +c + real*8 u1,u2 + integer ind1,ind2 + dimension u1(500),ind1(500) + dimension u2(500),ind2(500) + common/cgc/u1,u2,ind1,ind2 diff --git a/src/Misc/cinterp.f b/src/Misc/cinterp.f new file mode 100755 index 000000000..e13c3deb5 --- /dev/null +++ b/src/Misc/cinterp.f @@ -0,0 +1,50 @@ +c + subroutine cinterp(r,f,nr,rs,ps,dps,work) +cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc +c +c----- this routine interpolates functn f on grid r +c returns value ps and its derivative dps +c + implicit real*8 (a-h,o-z) + logical deriv + real*8 r(nr),c(4),work(nr),psr,psi,dpsr,dpsi + complex*16 f(nr),ps,dps +c + ip1=2 + do i=ip1,nr-1 + if (rs.gt.r(i)) ip1=i+1 + enddo + +c Real part + do i=1,nr + work(i)=dreal(f(i)) + enddo + i=ip1-1 + call fit(r,work,nr,i,c) +c + h1=rs-r(i) + h2=r(ip1)-rs + c2=1.d0+c(4)*h1*h2 + psr=((c(3)-c(2))*h1+c(1))/c2 + dpsr=c(2)+(c(3)-c(2)+psr*c(4)*(h1-h2))/c2 + psr=psr+dreal(f(i))-c(1)+c(2)*h1 + +c Imaginary part + do i=1,nr + work(i)=dimag(f(i)) + enddo + i=ip1-1 + call fit(r,work,nr,i,c) +c + h1=rs-r(i) + h2=r(ip1)-rs + c2=1.d0+c(4)*h1*h2 + psi=((c(3)-c(2))*h1+c(1))/c2 + dpsi=c(2)+(c(3)-c(2)+psi*c(4)*(h1-h2))/c2 + psi=psi+dimag(f(i))-c(1)+c(2)*h1 + + ps=dcmplx(psr,psi) + dps=dcmplx(dpsr,dpsi) + + return + end diff --git a/src/Misc/clebsch.f b/src/Misc/clebsch.f new file mode 100755 index 000000000..eff311298 --- /dev/null +++ b/src/Misc/clebsch.f @@ -0,0 +1,101 @@ + subroutine clebsch +c======================= + implicit real*8 (a-h,o-z) +c + include 'cgc.h' +! dimension u1(50),ind1(50) +! dimension u2(50),ind2(50) +! common/cgc/u1,u2,ind1,ind2 + data tiny/1.0d-15/ +c +c clebsch-gordan rectangular matrices to transform from (lm) to +c (kappa,my) basis +c + do 1 i=1,500 + u1(i)=0.d0 + u2(i)=0.d0 + ind1(i)=1 + ind2(i)=1 + 1 continue + + inr=0 + do 3 l=0,12 + twolp1=dfloat(2*l+1) + do 3 m=-l,l + inr=inr+1 +! write(6,*) 'inr',inr +c +c j=l-1/2 +c + kap=l + if(kap.eq.0) goto 2 +c +c ms=-1/2 +c + ir=2*kap*kap+kap+m + u1(ir)=dsqrt((l+m)/twolp1) + ind1(ir)=inr +c +c ms=+1/2 +c + ir=2*kap*kap+kap+m+1 + u2(ir)=-dsqrt((l-m)/twolp1) + ind2(ir)=inr + 2 continue +c +c j=l+1/2 +c + kap=-l-1 +c +c ms=-1/2 +c + ir=2*kap*kap+kap+m + u1(ir)=dsqrt((l-m+1)/twolp1) + ind1(ir)=inr +c +c ms=+1/2 +c + ir=2*kap*kap+kap+m+1 + u2(ir)=dsqrt((l+m+1)/twolp1) + ind2(ir)=inr +c + 3 continue +c +c write(6,*) + do ir=1,inr + if(dabs(u1(ir)).lt.tiny) ind1(ir)=1 +c write(6,'(i3,2x,i3,2x,f20.10)') ir,ind1(ir),u1(ir) + end do +c write(6,*) + do ir=1,inr + if(dabs(u2(ir)).lt.tiny) ind2(ir)=1 +c write(6,'(i3,2x,i3,2x,f20.10)') ir,ind2(ir),u2(ir) + end do +c + return + end + subroutine ruthi(kap,my,ii,norder) +c===================== +c find index for (kapa-my)-representation +c + dimension kapdex(50),mydex(50) + data kapdex/-1,-1,1,1,-2,-2,-2,-2,2,2,2,2,-3,-3,-3,-3,-3,-3 + * ,3,3,3,3,3,3,-4,-4,-4,-4,-4,-4,-4,-4, + * 4,4,4,4,4,4,4,4,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5/ + data mydex/-1,1,-1,1,-3,-1,1,3,-3,-1,1,3,-5,-3,-1,1,3,5, + * -5,-3,-1,1,3,5,-7,-5,-3,-1,1,3,5,7, + * -7,-5,-3,-1,1,3,5,7,-9,-7,-5,-3,-1,1,3,5,7,9/ +c + do 100 i=1,norder + if(kapdex(i).eq.kap) go to 150 + 100 continue + go to 500 + 150 do 170 j=i,norder + if(mydex(j).eq.my) go to 200 + 170 continue + go to 500 +c + 200 ii=j + return + 500 stop + end diff --git a/src/Misc/clock_time.c b/src/Misc/clock_time.c new file mode 100755 index 000000000..54900df11 --- /dev/null +++ b/src/Misc/clock_time.c @@ -0,0 +1,9 @@ +#include + +double MPI_Wtime(void); + +double clock_time_() +{ + return MPI_Wtime(); +// return(((double)clock())/((double)CLOCKS_PER_SEC)); +} diff --git a/src/Misc/cmtruni.f b/src/Misc/cmtruni.f new file mode 100755 index 000000000..c489dd8b9 --- /dev/null +++ b/src/Misc/cmtruni.f @@ -0,0 +1,29 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine cmtruni(a,n) +c ================================================================ +c + implicit none +c + integer n + integer i +c + complex*16 a(n,n) + complex*16 cone +c + parameter (cone=(1.0d0,0.0d0)) +c +c **************************************************************** +c set up a unit matrix and store it in a. +c **************************************************************** +c +c ---------------------------------------------------------------- + call zeroout(a,2*n*n) +c ---------------------------------------------------------------- +c + do i=1,n + a(i,i)=cone + enddo +c + return + end diff --git a/src/Misc/cnewint.f b/src/Misc/cnewint.f new file mode 100755 index 000000000..89516f03f --- /dev/null +++ b/src/Misc/cnewint.f @@ -0,0 +1,90 @@ + subroutine cnewint(nr,r,f,g,ip0) +cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc +c +c----- this routine integrates functn f on a 1-d mesh by interpolation +c the partial integrals (up to r(k)) are stored in b(k). the mesh +c is arbitrary +c xgz ornl 1998 +c + implicit real*8 (a-h,o-z) +c + real*8 r(nr),cr(4),ci(4) + complex*16 f(nr),g(nr) + real*8 fr(4),fi(4),rs(4) + parameter (nj=6,njm1=nj-1) + parameter (dnj=1.d0/nj) + parameter (wt0=2.d0/(3.d0*nj),wt1=3.d0*wt0) +c + ip=2*ip0+1 + pip1=1.d0/dble(ip+1) + pip2=1.d0/dble(ip+2) + g(1)=0.d0 + i1=1 + i2=2 + i3=3 + i4=4 + i0=1 + do i=1,4 + rs(i)=sqrt(r(i)) + fr(i)=real(f(i)) + fi(i)=dimag(f(i)) + enddo + ip1=1 + ip2=4 + do i=1,nr-1 + ip1=ip1+1 + + if(i.gt.2.and.ip2.le.nr) then + rs(i4)=sqrt(r(ip2)) + fr(i4)=real(f(ip2)) + fi(i4)=dimag(f(ip2)) + endif + call fit(rs,fr,4,i0,cr) + call fit(rs,fi,4,i0,ci) +c First integrate a linear frunction going through f(i) and f(ip1) +c A4=fi-A1 + rip1=rs(mod(i0,4)+1) + gj=1.d0 + fj=rip1 + do j=1,ip + gj=gj*rs(i0)+fj + fj=fj*rip1 + enddo + fj=(gj*rs(i0)+fj)*pip2 + gj=gj*pip1 + gr=(fr(i0)-cr(3)*rs(i0))*gj+cr(3)*fj + gi=(fi(i0)-ci(3)*rs(i0))*gj+ci(3)*fj +c Using Simpson's rule. No contribution from j=0 and j=nj. + dr=rip1-rs(i0) + h1=dnj*dr + h2=0.d0 + wt=wt0 + do j=1,njm1 + h2=h2+h1 + wt=wt1-wt + fj=wt + rj=rs(i0)+h2 + do k=1,ip + fj=fj*rj + enddo + gj=h2*(dr-h2) + c1=(cr(3)-cr(2))*h2+cr(1) + c2=cr(4)*gj + gr=gr-fj*c1*c2/(1.d0+c2) + c1=(ci(3)-ci(2))*h2+ci(1) + c2=ci(4)*gj + gi=gi-fj*c1*c2/(1.d0+c2) + enddo + g(ip1)=g(i)+2.d0*dr*dcmplx(gr,gi) + if(i.gt.1.and.ip2.lt.nr) then + ip2=ip2+1 + j=i1 + i1=i2 + i2=i3 + i3=i4 + i4=j + endif + i0=mod(i0,4)+1 + enddo + return + end diff --git a/src/Misc/congauss_c.f b/src/Misc/congauss_c.f new file mode 100755 index 000000000..b49605dcf --- /dev/null +++ b/src/Misc/congauss_c.f @@ -0,0 +1,124 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine congauss(ebot,etop,eibot,egrd,dele1,ngauss,nume, + > pi,ipepts,iprint,istop) +c ================================================================ +c + implicit none +c + character sname*20 + character istop*32 +c +c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +! include 'atom_param.h' + integer ipepts +c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +c + integer nume + integer ngauss + integer ie + integer iprint +c + real*8 xgs(ipepts) + real*8 wgs(ipepts) + real*8 ebot + real*8 etop + real*8 eibot + real*8 pi + real*8 erad + real*8 half + real*8 one +c + complex*16 egrd(ipepts) + complex*16 dele1(ipepts) + complex*16 zzero + complex*16 ihalfpi + complex*16 czero + complex*16 cone + complex*16 sqrtm1 +c + parameter (half=0.5d0) + parameter (one=1.0d0) + parameter (czero=(0.0d0,0.0d0)) + parameter (cone=(1.0d0,0.0d0)) + parameter (sqrtm1=(0.0d0,1.0d0)) + parameter (sname='congauss') +c +c **************************************************************** +c constructs semi-circle energy contour +c +c . ! . Im(e) +c . ! . +c . ! . +c . ! . +c . ! . +c . ! . +c -----------------------!------------------------- +c ebot ! Real(e) etop +c +c +c ebot : bottom of the contour on the real axis.......... +c etop : top of the contour on the real axis............. +c ngauss : total number of desired points and weights for... +c Gauss-Legendre quadrature....................... +c nume : = ngauss +c iprint : print level control (>0 for print of energies).. +c +c requires : ebot,etop,ngauss,iprint +c returns : (egrd(ie),dele1(ie),ie=1,nume) +c **************************************************************** +c +c ================================================================ +c set up the gaussian integration points.......................... + if(ngauss+1.gt.ipepts) then + write(6,'(/,'' CONGAUSS:: ngauss+1.gt.ipepts'',2i5)') + > ngauss,ipepts + call fstop(sname) + endif +c +c ================================================================ +c set nume equal to number of points on grid i.e. ngauss.......... + nume=ngauss +c ---------------------------------------------------------------- + call gauss_legendre_points(-one,one,xgs,wgs,ngauss) +c ---------------------------------------------------------------- +c +c ================================================================ +c loop over energy grid for gaussian integration................. + erad = half*(etop-ebot) + ihalfpi=sqrtm1*half*pi + do ie=1,ngauss + zzero = erad*exp( ihalfpi*(one-xgs(ie)) ) + egrd(ie) = half*(etop+ebot) + zzero + dele1(ie)=-ihalfpi*zzero*wgs(ie) + enddo +c +c ================================================================ +c add an extra energy point to be used in extrapolating E_f....... + nume=nume+1 + egrd(nume)=cone*etop+sqrtm1*eibot + dele1(nume)=czero +c +c ================================================================ +c write out grid and return....................................... + if(iprint.ge.1) then + write(6,'(/,'' CONGAUSS:: Bottom of contour'', + > t40,''='',f10.5)') ebot + write(6,'(12x,''Top of contour'', + > t40,''='',f10.5)') etop + write(6,'(12x,''Number of energies'', + > t40,''='',i5)') nume + endif + if(iprint.ge.2) then + write(6,'(12x,''n='',i5,'' e='',2e12.4,'' de='',2d12.4)') + > (ie,egrd(ie),dele1(ie),ie=1,nume) + endif +c +c ================================================================ + if(istop.eq.sname) then + call fstop(sname) + else + return + endif +c + end diff --git a/src/Misc/constraint.f b/src/Misc/constraint.f new file mode 100755 index 000000000..5f40c1c09 --- /dev/null +++ b/src/Misc/constraint.f @@ -0,0 +1,130 @@ +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine constraint(jmt,rmt,n_spin_pola, + > vr,r_mesh,pi4, + > evec,evec_r,b_con,b_basis, + >i_vdif,h_app_para_mag,h_app_perp_mag,iprpts,iprint,istop) +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc +c + implicit none +c +c **************************************************************** +c this routine calculates the constraint necessary for m_x=m_y=0 +c **************************************************************** +c +! include 'atom_param.h' +c + character sname*32 + character istop*32 +c + integer i_vdif + integer jmt + integer n_spin_pola + integer j,i +c + integer iprpts + integer iprint +c + real*8 h_app_para_mag,h_app_perp_mag + real*8 evec(3) + real*8 evec_r(3) + real*8 evec_const(3) + real*8 b_basis(3,3) + real*8 b_con_g(3) + real*8 vr(iprpts,n_spin_pola) + real*8 vvr(iprpts),br(iprpts) + real*8 r_mesh(iprpts) + real*8 b_con(3) + real*8 rmt + real*8 b_xcor + real*8 pi4 + real*8 c + real*8 b_mag + real*8 b_con_mag +c + real*8 zero + real*8 half + real*8 one + real*8 tol +c + parameter (sname='constraint') + parameter (zero=0.0d0) + parameter (half=0.5d0) + parameter (one=1.0d0) + parameter (tol=1.0d-6) +c +c ================================================================ +c Check to see if B_con=0: if so then set evec_r=evec and return.. +c ================================================================ + b_con_mag=zero + do i=1,3 + b_con_g(i)=b_con(1)*b_basis(i,1)+b_con(2)*b_basis(i,2)+ + > b_con(3)*b_basis(i,3) + b_con_mag=b_con_mag+b_con_g(i)*b_con_g(i) + end do + b_con_mag=sqrt(b_con_mag) +c + if(abs(b_con_mag).lt.tol) then + do i=1,3 + evec_r(i)=evec(i) + enddo + go to 1000 + else if(abs(b_con_mag).gt.one) then + write(6,*) 'WARNING: b_con_mag is .gt. one !!' + endif +c +c ================================================================ +c set up V and B ................................................. +c ---------------------------------------------------------------- + call v_plus_minus(half,vr(1,2),vr(1,1),vvr,br,jmt,iprpts) +c ---------------------------------------------------------------- +c ================================================================ +c calculate the new direction .................................... +c + b_mag=0.0d0 + do i=1,3 + evec_r(i)=evec(i)+b_con_g(i) + b_mag=b_mag+evec_r(i)*evec_r(i) + end do + b_mag=sqrt(b_mag) + do i=1,3 + evec_r(i)=evec_r(i)/b_mag + end do +c + if(iprint.ge.0) then + write(6,'('' CONSTRAINT: vectors:'')') + write(6,'(29x,'' Direction:'',18x,''Magnitude :'')') + write(6,'('' B xcor :'',3f12.5,5x + > )') (evec(i),i=1,3) + if(abs(b_con_mag).gt.tol) then + write(6,'('' B constraint:'',3f12.5,5x, + > f10.5)') (b_con_g(i)/b_con_mag,i=1,3),b_con_mag + else + write(6,'('' B constraint:'',3f12.5,5x, + > f10.5)') (b_con_g(i),i=1,3),b_con_mag + end if + write(6,'('' B sum :'',3f12.5,5x, + > f10.5)') (evec_r(i),i=1,3),b_mag + end if +c +c ================================================================ +c generate new B=sqrt(1+b_con_mag^2)*B_xc......................... +c + c=sqrt(one+b_con_mag*b_con_mag) + do j=1,jmt + br(j)=c*br(j) + end do +c ================================================================ +c generate new v_up and v_down.................................... +c ---------------------------------------------------------------- + call v_plus_minus(one,vvr,br,vr(1,2),vr(1,1),jmt,iprpts) +c ---------------------------------------------------------------- +c + 1000 if (istop.eq.sname) then + call fstop(sname) + else + return + endif +c + end + + diff --git a/src/Misc/dfv.f b/src/Misc/dfv.f new file mode 100755 index 000000000..46ec1ae64 --- /dev/null +++ b/src/Misc/dfv.f @@ -0,0 +1,71 @@ + subroutine dfv(r,y,dy,nv,n,rn,ecomp,vr,vso, + & nsizm,isymm,eunit,b,allp1) +c ============= +c +c------ compute derivatives +c + implicit real*8 (a-h,o-z) +c + complex*16 ecomp +c +! common /dfbits/ b,allp1 +c + real*8 y(nv),dy(nv),rn,vr(n) + real*8 eunit +c ================================================== +c dimensioned to stop run time array bounds problems +c ================================================== + integer isymm(nsizm) + real*8 vso(nsizm,nsizm) +c + s1or=1.0d0/r + s1or2=s1or*s1or + ereal=dreal(ecomp) + eimag=dimag(ecomp) +c + r1=r-rn + v=vr(1)*r1+vr(2) + if(n.ge.3) then + v=v/(1.d0+vr(3)*r1*r1) + if(n.eq.4) v=v+vr(n) + endif +c + s2vmer=eunit*(v*s1or-ereal) + frelr=1.0d0-b*s2vmer + if(nv.eq.2) then + if(b.eq.0.d0) then + if(y(1).eq.0.d0.and.y(2).eq.0.d0) then + dy(1)=frelr + dy(2)=allp1*s1or2/frelr+s2vmer + else + facr=allp1*s1or2/frelr+s2vmer + dy(1)=frelr*y(2)+s1or*y(1) + dy(2)=facr*y(1)-y(2)*s1or + endif + else + escale=0.5d0*eunit + facr=allp1*s1or + s2vmer=escale*(v*s1or-ereal)/b + if(y(1).eq.0.d0.and.y(2).eq.0.d0) then + dy(1)=-s2vmer+2.d0*b + dy(2)=facr*facr-s2vmer*(s2vmer-2.d0*b) + else + dy(1)=(-s2vmer+2.d0*b)*y(2)-facr*y(1) + dy(2)=s2vmer*y(1)+facr*y(2) + endif + endif + else + s2vmei= -eunit*eimag + freli= -b*s2vmei + den=allp1/(frelr*frelr+freli*freli) + den=den*s1or2 + facr=+den*frelr+s2vmer + faci=-den*freli+s2vmei + dy(1)=frelr*y(3)-freli*y(4)+s1or*y(1) + dy(2)=freli*y(3)+frelr*y(4)+s1or*y(2) + dy(3)=facr*y(1)-faci*y(2)-y(3)*s1or + dy(4)=faci*y(1)+facr*y(2)-y(4)*s1or + endif +c + return + end diff --git a/src/Misc/dfv_new.f b/src/Misc/dfv_new.f new file mode 100755 index 000000000..fc96a973f --- /dev/null +++ b/src/Misc/dfv_new.f @@ -0,0 +1,71 @@ + subroutine dfv_m(r,y,dy,nv,n,rn,ecomp,vr, + & eunit,b,allp1) +c ============= + implicit none +c +c------ compute derivatives +c +c + complex*16 ecomp +c + real*8 r + integer nv,n + real*8 y(nv),dy(nv),rn,vr(n) + real*8 eunit + real*8 b, allp1 +c + real*8 s1or,s1or2,ereal,eimag,facr,faci + real*8 v,s2vmei,s2vmer,r1,frelr,freli + real*8 den,escale +c + s1or=1.0d0/r + s1or2=s1or*s1or + ereal=dreal(ecomp) + eimag=dimag(ecomp) +c + r1=r-rn + v=vr(1)*r1+vr(2) + if(n.ge.3) then + v=v/(1.d0+vr(3)*r1*r1) + if(n.eq.4) v=v+vr(n) + endif +c + s2vmer=eunit*(v*s1or-ereal) + frelr=1.0d0-b*s2vmer + if(nv.eq.2) then + if(b.eq.0.d0) then + if(y(1).eq.0.d0.and.y(2).eq.0.d0) then + dy(1)=frelr + dy(2)=allp1*s1or2/frelr+s2vmer + else + facr=allp1*s1or2/frelr+s2vmer + dy(1)=frelr*y(2)+s1or*y(1) + dy(2)=facr*y(1)-y(2)*s1or + endif + else + escale=0.5d0*eunit + facr=allp1*s1or + s2vmer=escale*(v*s1or-ereal)/b + if(y(1).eq.0.d0.and.y(2).eq.0.d0) then + dy(1)=-s2vmer+2.d0*b + dy(2)=facr*facr-s2vmer*(s2vmer-2.d0*b) + else + dy(1)=(-s2vmer+2.d0*b)*y(2)-facr*y(1) + dy(2)=s2vmer*y(1)+facr*y(2) + endif + endif + else + s2vmei= -eunit*eimag + freli= -b*s2vmei + den=allp1/(frelr*frelr+freli*freli) + den=den*s1or2 + facr=+den*frelr+s2vmer + faci=-den*freli+s2vmei + dy(1)=frelr*y(3)-freli*y(4)+s1or*y(1) + dy(2)=freli*y(3)+frelr*y(4)+s1or*y(2) + dy(3)=facr*y(1)-faci*y(2)-y(3)*s1or + dy(4)=faci*y(1)+facr*y(2)-y(4)*s1or + endif +c + return + end diff --git a/src/Misc/essl_workaround.f b/src/Misc/essl_workaround.f new file mode 100644 index 000000000..46a48b772 --- /dev/null +++ b/src/Misc/essl_workaround.f @@ -0,0 +1,2077 @@ +! Workaround for missing LAPACK and BLAS routines in IBM's ESSL + + SUBROUTINE ZTRTRS( UPLO, TRANS, DIAG, N, NRHS, A, LDA, B, LDB, + $ INFO ) +* +* -- LAPACK routine (version 3.1) -- +* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. +* November 2006 +* +* .. Scalar Arguments .. + CHARACTER DIAG, TRANS, UPLO + INTEGER INFO, LDA, LDB, N, NRHS +* .. +* .. Array Arguments .. + COMPLEX*16 A( LDA, * ), B( LDB, * ) +* .. +* +* Purpose +* ======= +* +* ZTRTRS solves a triangular system of the form +* +* A * X = B, A**T * X = B, or A**H * X = B, +* +* where A is a triangular matrix of order N, and B is an N-by-NRHS +* matrix. A check is made to verify that A is nonsingular. +* +* Arguments +* ========= +* +* UPLO (input) CHARACTER*1 +* = 'U': A is upper triangular; +* = 'L': A is lower triangular. +* +* TRANS (input) CHARACTER*1 +* Specifies the form of the system of equations: +* = 'N': A * X = B (No transpose) +* = 'T': A**T * X = B (Transpose) +* = 'C': A**H * X = B (Conjugate transpose) +* +* DIAG (input) CHARACTER*1 +* = 'N': A is non-unit triangular; +* = 'U': A is unit triangular. +* +* N (input) INTEGER +* The order of the matrix A. N >= 0. +* +* NRHS (input) INTEGER +* The number of right hand sides, i.e., the number of columns +* of the matrix B. NRHS >= 0. +* +* A (input) COMPLEX*16 array, dimension (LDA,N) +* The triangular matrix A. If UPLO = 'U', the leading N-by-N +* upper triangular part of the array A contains the upper +* triangular matrix, and the strictly lower triangular part of +* A is not referenced. If UPLO = 'L', the leading N-by-N lower +* triangular part of the array A contains the lower triangular +* matrix, and the strictly upper triangular part of A is not +* referenced. If DIAG = 'U', the diagonal elements of A are +* also not referenced and are assumed to be 1. +* +* LDA (input) INTEGER +* The leading dimension of the array A. LDA >= max(1,N). +* +* B (input/output) COMPLEX*16 array, dimension (LDB,NRHS) +* On entry, the right hand side matrix B. +* On exit, if INFO = 0, the solution matrix X. +* +* LDB (input) INTEGER +* The leading dimension of the array B. LDB >= max(1,N). +* +* INFO (output) INTEGER +* = 0: successful exit +* < 0: if INFO = -i, the i-th argument had an illegal value +* > 0: if INFO = i, the i-th diagonal element of A is zero, +* indicating that the matrix is singular and the solutions +* X have not been computed. +* +* ===================================================================== +* +* .. Parameters .. + COMPLEX*16 ZERO, ONE + PARAMETER ( ZERO = ( 0.0D+0, 0.0D+0 ), + $ ONE = ( 1.0D+0, 0.0D+0 ) ) +* .. +* .. Local Scalars .. + LOGICAL NOUNIT +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL XERBLA, ZTRSM +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* .. Executable Statements .. +* +* Test the input parameters. +* + INFO = 0 + NOUNIT = LSAME( DIAG, 'N' ) + IF( .NOT.LSAME( UPLO, 'U' ) .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN + INFO = -1 + ELSE IF( .NOT.LSAME( TRANS, 'N' ) .AND. .NOT. + $ LSAME( TRANS, 'T' ) .AND. .NOT.LSAME( TRANS, 'C' ) ) THEN + INFO = -2 + ELSE IF( .NOT.NOUNIT .AND. .NOT.LSAME( DIAG, 'U' ) ) THEN + INFO = -3 + ELSE IF( N.LT.0 ) THEN + INFO = -4 + ELSE IF( NRHS.LT.0 ) THEN + INFO = -5 + ELSE IF( LDA.LT.MAX( 1, N ) ) THEN + INFO = -7 + ELSE IF( LDB.LT.MAX( 1, N ) ) THEN + INFO = -9 + END IF + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'ZTRTRS', -INFO ) + RETURN + END IF +* +* Quick return if possible +* + IF( N.EQ.0 ) + $ RETURN +* +* Check for singularity. +* + IF( NOUNIT ) THEN + DO 10 INFO = 1, N + IF( A( INFO, INFO ).EQ.ZERO ) + $ RETURN + 10 CONTINUE + END IF + INFO = 0 +* +* Solve A * x = b, A**T * x = b, or A**H * x = b. +* + CALL ZTRSM( 'Left', UPLO, TRANS, DIAG, N, NRHS, ONE, A, LDA, B, + $ LDB ) +* + RETURN +* +* End of ZTRTRS +* + END + + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +! ! ILAENV +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3, N4 ) +* +* -- LAPACK auxiliary routine (version 3.1.1) -- +* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. +* January 2007 +* +* .. Scalar Arguments .. + CHARACTER*( * ) NAME, OPTS + INTEGER ISPEC, N1, N2, N3, N4 +* .. +* +* Purpose +* ======= +* +* ILAENV is called from the LAPACK routines to choose problem-dependent +* parameters for the local environment. See ISPEC for a description of +* the parameters. +* +* ILAENV returns an INTEGER +* if ILAENV >= 0: ILAENV returns the value of the parameter specified by ISPEC +* if ILAENV < 0: if ILAENV = -k, the k-th argument had an illegal value. +* +* This version provides a set of parameters which should give good, +* but not optimal, performance on many of the currently available +* computers. Users are encouraged to modify this subroutine to set +* the tuning parameters for their particular machine using the option +* and problem size information in the arguments. +* +* This routine will not function correctly if it is converted to all +* lower case. Converting it to all upper case is allowed. +* +* Arguments +* ========= +* +* ISPEC (input) INTEGER +* Specifies the parameter to be returned as the value of +* ILAENV. +* = 1: the optimal blocksize; if this value is 1, an unblocked +* algorithm will give the best performance. +* = 2: the minimum block size for which the block routine +* should be used; if the usable block size is less than +* this value, an unblocked routine should be used. +* = 3: the crossover point (in a block routine, for N less +* than this value, an unblocked routine should be used) +* = 4: the number of shifts, used in the nonsymmetric +* eigenvalue routines (DEPRECATED) +* = 5: the minimum column dimension for blocking to be used; +* rectangular blocks must have dimension at least k by m, +* where k is given by ILAENV(2,...) and m by ILAENV(5,...) +* = 6: the crossover point for the SVD (when reducing an m by n +* matrix to bidiagonal form, if max(m,n)/min(m,n) exceeds +* this value, a QR factorization is used first to reduce +* the matrix to a triangular form.) +* = 7: the number of processors +* = 8: the crossover point for the multishift QR method +* for nonsymmetric eigenvalue problems (DEPRECATED) +* = 9: maximum size of the subproblems at the bottom of the +* computation tree in the divide-and-conquer algorithm +* (used by xGELSD and xGESDD) +* =10: ieee NaN arithmetic can be trusted not to trap +* =11: infinity arithmetic can be trusted not to trap +* 12 <= ISPEC <= 16: +* xHSEQR or one of its subroutines, +* see IPARMQ for detailed explanation +* +* NAME (input) CHARACTER*(*) +* The name of the calling subroutine, in either upper case or +* lower case. +* +* OPTS (input) CHARACTER*(*) +* The character options to the subroutine NAME, concatenated +* into a single character string. For example, UPLO = 'U', +* TRANS = 'T', and DIAG = 'N' for a triangular routine would +* be specified as OPTS = 'UTN'. +* +* N1 (input) INTEGER +* N2 (input) INTEGER +* N3 (input) INTEGER +* N4 (input) INTEGER +* Problem dimensions for the subroutine NAME; these may not all +* be required. +* +* Further Details +* =============== +* +* The following conventions have been used when calling ILAENV from the +* LAPACK routines: +* 1) OPTS is a concatenation of all of the character options to +* subroutine NAME, in the same order that they appear in the +* argument list for NAME, even if they are not used in determining +* the value of the parameter specified by ISPEC. +* 2) The problem dimensions N1, N2, N3, N4 are specified in the order +* that they appear in the argument list for NAME. N1 is used +* first, N2 second, and so on, and unused problem dimensions are +* passed a value of -1. +* 3) The parameter value returned by ILAENV is checked for validity in +* the calling subroutine. For example, ILAENV is used to retrieve +* the optimal blocksize for STRTRI as follows: +* +* NB = ILAENV( 1, 'STRTRI', UPLO // DIAG, N, -1, -1, -1 ) +* IF( NB.LE.1 ) NB = MAX( 1, N ) +* +* ===================================================================== +* +* .. Local Scalars .. + INTEGER I, IC, IZ, NB, NBMIN, NX + LOGICAL CNAME, SNAME + CHARACTER C1*1, C2*2, C4*2, C3*3, SUBNAM*6 +* .. +* .. Intrinsic Functions .. + INTRINSIC CHAR, ICHAR, INT, MIN, REAL +* .. +* .. External Functions .. + INTEGER IEEECK, IPARMQ + EXTERNAL IEEECK, IPARMQ +* .. +* .. Executable Statements .. +* + GO TO ( 10, 10, 10, 80, 90, 100, 110, 120, + $ 130, 140, 150, 160, 160, 160, 160, 160 )ISPEC +* +* Invalid value for ISPEC +* + ILAENV = -1 + RETURN +* + 10 CONTINUE +* +* Convert NAME to upper case if the first character is lower case. +* + ILAENV = 1 + SUBNAM = NAME + IC = ICHAR( SUBNAM( 1: 1 ) ) + IZ = ICHAR( 'Z' ) + IF( IZ.EQ.90 .OR. IZ.EQ.122 ) THEN +* +* ASCII character set +* + IF( IC.GE.97 .AND. IC.LE.122 ) THEN + SUBNAM( 1: 1 ) = CHAR( IC-32 ) + DO 20 I = 2, 6 + IC = ICHAR( SUBNAM( I: I ) ) + IF( IC.GE.97 .AND. IC.LE.122 ) + $ SUBNAM( I: I ) = CHAR( IC-32 ) + 20 CONTINUE + END IF +* + ELSE IF( IZ.EQ.233 .OR. IZ.EQ.169 ) THEN +* +* EBCDIC character set +* + IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR. + $ ( IC.GE.145 .AND. IC.LE.153 ) .OR. + $ ( IC.GE.162 .AND. IC.LE.169 ) ) THEN + SUBNAM( 1: 1 ) = CHAR( IC+64 ) + DO 30 I = 2, 6 + IC = ICHAR( SUBNAM( I: I ) ) + IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR. + $ ( IC.GE.145 .AND. IC.LE.153 ) .OR. + $ ( IC.GE.162 .AND. IC.LE.169 ) )SUBNAM( I: + $ I ) = CHAR( IC+64 ) + 30 CONTINUE + END IF +* + ELSE IF( IZ.EQ.218 .OR. IZ.EQ.250 ) THEN +* +* Prime machines: ASCII+128 +* + IF( IC.GE.225 .AND. IC.LE.250 ) THEN + SUBNAM( 1: 1 ) = CHAR( IC-32 ) + DO 40 I = 2, 6 + IC = ICHAR( SUBNAM( I: I ) ) + IF( IC.GE.225 .AND. IC.LE.250 ) + $ SUBNAM( I: I ) = CHAR( IC-32 ) + 40 CONTINUE + END IF + END IF +* + C1 = SUBNAM( 1: 1 ) + SNAME = C1.EQ.'S' .OR. C1.EQ.'D' + CNAME = C1.EQ.'C' .OR. C1.EQ.'Z' + IF( .NOT.( CNAME .OR. SNAME ) ) + $ RETURN + C2 = SUBNAM( 2: 3 ) + C3 = SUBNAM( 4: 6 ) + C4 = C3( 2: 3 ) +* + GO TO ( 50, 60, 70 )ISPEC +* + 50 CONTINUE +* +* ISPEC = 1: block size +* +* In these examples, separate code is provided for setting NB for +* real and complex. We assume that NB will take the same value in +* single or double precision. +* + NB = 1 +* + IF( C2.EQ.'GE' ) THEN + IF( C3.EQ.'TRF' ) THEN + IF( SNAME ) THEN + NB = 64 + ELSE + NB = 64 + END IF + ELSE IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. + $ C3.EQ.'QLF' ) THEN + IF( SNAME ) THEN + NB = 32 + ELSE + NB = 32 + END IF + ELSE IF( C3.EQ.'HRD' ) THEN + IF( SNAME ) THEN + NB = 32 + ELSE + NB = 32 + END IF + ELSE IF( C3.EQ.'BRD' ) THEN + IF( SNAME ) THEN + NB = 32 + ELSE + NB = 32 + END IF + ELSE IF( C3.EQ.'TRI' ) THEN + IF( SNAME ) THEN + NB = 64 + ELSE + NB = 64 + END IF + END IF + ELSE IF( C2.EQ.'PO' ) THEN + IF( C3.EQ.'TRF' ) THEN + IF( SNAME ) THEN + NB = 64 + ELSE + NB = 64 + END IF + END IF + ELSE IF( C2.EQ.'SY' ) THEN + IF( C3.EQ.'TRF' ) THEN + IF( SNAME ) THEN + NB = 64 + ELSE + NB = 64 + END IF + ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN + NB = 32 + ELSE IF( SNAME .AND. C3.EQ.'GST' ) THEN + NB = 64 + END IF + ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN + IF( C3.EQ.'TRF' ) THEN + NB = 64 + ELSE IF( C3.EQ.'TRD' ) THEN + NB = 32 + ELSE IF( C3.EQ.'GST' ) THEN + NB = 64 + END IF + ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN + IF( C3( 1: 1 ).EQ.'G' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NB = 32 + END IF + ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NB = 32 + END IF + END IF + ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN + IF( C3( 1: 1 ).EQ.'G' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NB = 32 + END IF + ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NB = 32 + END IF + END IF + ELSE IF( C2.EQ.'GB' ) THEN + IF( C3.EQ.'TRF' ) THEN + IF( SNAME ) THEN + IF( N4.LE.64 ) THEN + NB = 1 + ELSE + NB = 32 + END IF + ELSE + IF( N4.LE.64 ) THEN + NB = 1 + ELSE + NB = 32 + END IF + END IF + END IF + ELSE IF( C2.EQ.'PB' ) THEN + IF( C3.EQ.'TRF' ) THEN + IF( SNAME ) THEN + IF( N2.LE.64 ) THEN + NB = 1 + ELSE + NB = 32 + END IF + ELSE + IF( N2.LE.64 ) THEN + NB = 1 + ELSE + NB = 32 + END IF + END IF + END IF + ELSE IF( C2.EQ.'TR' ) THEN + IF( C3.EQ.'TRI' ) THEN + IF( SNAME ) THEN + NB = 64 + ELSE + NB = 64 + END IF + END IF + ELSE IF( C2.EQ.'LA' ) THEN + IF( C3.EQ.'UUM' ) THEN + IF( SNAME ) THEN + NB = 64 + ELSE + NB = 64 + END IF + END IF + ELSE IF( SNAME .AND. C2.EQ.'ST' ) THEN + IF( C3.EQ.'EBZ' ) THEN + NB = 1 + END IF + END IF + ILAENV = NB + RETURN +* + 60 CONTINUE +* +* ISPEC = 2: minimum block size +* + NBMIN = 2 + IF( C2.EQ.'GE' ) THEN + IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ. + $ 'QLF' ) THEN + IF( SNAME ) THEN + NBMIN = 2 + ELSE + NBMIN = 2 + END IF + ELSE IF( C3.EQ.'HRD' ) THEN + IF( SNAME ) THEN + NBMIN = 2 + ELSE + NBMIN = 2 + END IF + ELSE IF( C3.EQ.'BRD' ) THEN + IF( SNAME ) THEN + NBMIN = 2 + ELSE + NBMIN = 2 + END IF + ELSE IF( C3.EQ.'TRI' ) THEN + IF( SNAME ) THEN + NBMIN = 2 + ELSE + NBMIN = 2 + END IF + END IF + ELSE IF( C2.EQ.'SY' ) THEN + IF( C3.EQ.'TRF' ) THEN + IF( SNAME ) THEN + NBMIN = 8 + ELSE + NBMIN = 8 + END IF + ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN + NBMIN = 2 + END IF + ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN + IF( C3.EQ.'TRD' ) THEN + NBMIN = 2 + END IF + ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN + IF( C3( 1: 1 ).EQ.'G' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NBMIN = 2 + END IF + ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NBMIN = 2 + END IF + END IF + ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN + IF( C3( 1: 1 ).EQ.'G' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NBMIN = 2 + END IF + ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NBMIN = 2 + END IF + END IF + END IF + ILAENV = NBMIN + RETURN +* + 70 CONTINUE +* +* ISPEC = 3: crossover point +* + NX = 0 + IF( C2.EQ.'GE' ) THEN + IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ. + $ 'QLF' ) THEN + IF( SNAME ) THEN + NX = 128 + ELSE + NX = 128 + END IF + ELSE IF( C3.EQ.'HRD' ) THEN + IF( SNAME ) THEN + NX = 128 + ELSE + NX = 128 + END IF + ELSE IF( C3.EQ.'BRD' ) THEN + IF( SNAME ) THEN + NX = 128 + ELSE + NX = 128 + END IF + END IF + ELSE IF( C2.EQ.'SY' ) THEN + IF( SNAME .AND. C3.EQ.'TRD' ) THEN + NX = 32 + END IF + ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN + IF( C3.EQ.'TRD' ) THEN + NX = 32 + END IF + ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN + IF( C3( 1: 1 ).EQ.'G' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NX = 128 + END IF + END IF + ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN + IF( C3( 1: 1 ).EQ.'G' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NX = 128 + END IF + END IF + END IF + ILAENV = NX + RETURN +* + 80 CONTINUE +* +* ISPEC = 4: number of shifts (used by xHSEQR) +* + ILAENV = 6 + RETURN +* + 90 CONTINUE +* +* ISPEC = 5: minimum column dimension (not used) +* + ILAENV = 2 + RETURN +* + 100 CONTINUE +* +* ISPEC = 6: crossover point for SVD (used by xGELSS and xGESVD) +* + ILAENV = INT( REAL( MIN( N1, N2 ) )*1.6E0 ) + RETURN +* + 110 CONTINUE +* +* ISPEC = 7: number of processors (not used) +* + ILAENV = 1 + RETURN +* + 120 CONTINUE +* +* ISPEC = 8: crossover point for multishift (used by xHSEQR) +* + ILAENV = 50 + RETURN +* + 130 CONTINUE +* +* ISPEC = 9: maximum size of the subproblems at the bottom of the +* computation tree in the divide-and-conquer algorithm +* (used by xGELSD and xGESDD) +* + ILAENV = 25 + RETURN +* + 140 CONTINUE +* +* ISPEC = 10: ieee NaN arithmetic can be trusted not to trap +* +* ILAENV = 0 + ILAENV = 1 + IF( ILAENV.EQ.1 ) THEN + ILAENV = IEEECK( 0, 0.0, 1.0 ) + END IF + RETURN +* + 150 CONTINUE +* +* ISPEC = 11: infinity arithmetic can be trusted not to trap +* +* ILAENV = 0 + ILAENV = 1 + IF( ILAENV.EQ.1 ) THEN + ILAENV = IEEECK( 1, 0.0, 1.0 ) + END IF + RETURN +* + 160 CONTINUE +* +* 12 <= ISPEC <= 16: xHSEQR or one of its subroutines. +* + ILAENV = IPARMQ( ISPEC, NAME, OPTS, N1, N2, N3, N4 ) + RETURN +* +* End of ILAENV +* + END + + + + + + + + + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +! ! DLAMCH +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + DOUBLE PRECISION FUNCTION DLAMCH( CMACH ) +* +* -- LAPACK auxiliary routine (version 3.1) -- +* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. +* November 2006 +* +* .. Scalar Arguments .. + CHARACTER CMACH +* .. +* +* Purpose +* ======= +* +* DLAMCH determines double precision machine parameters. +* +* Arguments +* ========= +* +* CMACH (input) CHARACTER*1 +* Specifies the value to be returned by DLAMCH: +* = 'E' or 'e', DLAMCH := eps +* = 'S' or 's , DLAMCH := sfmin +* = 'B' or 'b', DLAMCH := base +* = 'P' or 'p', DLAMCH := eps*base +* = 'N' or 'n', DLAMCH := t +* = 'R' or 'r', DLAMCH := rnd +* = 'M' or 'm', DLAMCH := emin +* = 'U' or 'u', DLAMCH := rmin +* = 'L' or 'l', DLAMCH := emax +* = 'O' or 'o', DLAMCH := rmax +* +* where +* +* eps = relative machine precision +* sfmin = safe minimum, such that 1/sfmin does not overflow +* base = base of the machine +* prec = eps*base +* t = number of (base) digits in the mantissa +* rnd = 1.0 when rounding occurs in addition, 0.0 otherwise +* emin = minimum exponent before (gradual) underflow +* rmin = underflow threshold - base**(emin-1) +* emax = largest exponent before overflow +* rmax = overflow threshold - (base**emax)*(1-eps) +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE, ZERO + PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + LOGICAL FIRST, LRND + INTEGER BETA, IMAX, IMIN, IT + DOUBLE PRECISION BASE, EMAX, EMIN, EPS, PREC, RMACH, RMAX, RMIN, + $ RND, SFMIN, SMALL, T +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL DLAMC2 +* .. +* .. Save statement .. + SAVE FIRST, EPS, SFMIN, BASE, T, RND, EMIN, RMIN, + $ EMAX, RMAX, PREC +* .. +* .. Data statements .. + DATA FIRST / .TRUE. / +* .. +* .. Executable Statements .. +* + IF( FIRST ) THEN + CALL DLAMC2( BETA, IT, LRND, EPS, IMIN, RMIN, IMAX, RMAX ) + BASE = BETA + T = IT + IF( LRND ) THEN + RND = ONE + EPS = ( BASE**( 1-IT ) ) / 2 + ELSE + RND = ZERO + EPS = BASE**( 1-IT ) + END IF + PREC = EPS*BASE + EMIN = IMIN + EMAX = IMAX + SFMIN = RMIN + SMALL = ONE / RMAX + IF( SMALL.GE.SFMIN ) THEN +* +* Use SMALL plus a bit, to avoid the possibility of rounding +* causing overflow when computing 1/sfmin. +* + SFMIN = SMALL*( ONE+EPS ) + END IF + END IF +* + IF( LSAME( CMACH, 'E' ) ) THEN + RMACH = EPS + ELSE IF( LSAME( CMACH, 'S' ) ) THEN + RMACH = SFMIN + ELSE IF( LSAME( CMACH, 'B' ) ) THEN + RMACH = BASE + ELSE IF( LSAME( CMACH, 'P' ) ) THEN + RMACH = PREC + ELSE IF( LSAME( CMACH, 'N' ) ) THEN + RMACH = T + ELSE IF( LSAME( CMACH, 'R' ) ) THEN + RMACH = RND + ELSE IF( LSAME( CMACH, 'M' ) ) THEN + RMACH = EMIN + ELSE IF( LSAME( CMACH, 'U' ) ) THEN + RMACH = RMIN + ELSE IF( LSAME( CMACH, 'L' ) ) THEN + RMACH = EMAX + ELSE IF( LSAME( CMACH, 'O' ) ) THEN + RMACH = RMAX + END IF +* + DLAMCH = RMACH + FIRST = .FALSE. + RETURN +* +* End of DLAMCH +* + END +* +************************************************************************ +* + SUBROUTINE DLAMC1( BETA, T, RND, IEEE1 ) +* +* -- LAPACK auxiliary routine (version 3.1) -- +* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. +* November 2006 +* +* .. Scalar Arguments .. + LOGICAL IEEE1, RND + INTEGER BETA, T +* .. +* +* Purpose +* ======= +* +* DLAMC1 determines the machine parameters given by BETA, T, RND, and +* IEEE1. +* +* Arguments +* ========= +* +* BETA (output) INTEGER +* The base of the machine. +* +* T (output) INTEGER +* The number of ( BETA ) digits in the mantissa. +* +* RND (output) LOGICAL +* Specifies whether proper rounding ( RND = .TRUE. ) or +* chopping ( RND = .FALSE. ) occurs in addition. This may not +* be a reliable guide to the way in which the machine performs +* its arithmetic. +* +* IEEE1 (output) LOGICAL +* Specifies whether rounding appears to be done in the IEEE +* 'round to nearest' style. +* +* Further Details +* =============== +* +* The routine is based on the routine ENVRON by Malcolm and +* incorporates suggestions by Gentleman and Marovich. See +* +* Malcolm M. A. (1972) Algorithms to reveal properties of +* floating-point arithmetic. Comms. of the ACM, 15, 949-951. +* +* Gentleman W. M. and Marovich S. B. (1974) More on algorithms +* that reveal properties of floating point arithmetic units. +* Comms. of the ACM, 17, 276-277. +* +* ===================================================================== +* +* .. Local Scalars .. + LOGICAL FIRST, LIEEE1, LRND + INTEGER LBETA, LT + DOUBLE PRECISION A, B, C, F, ONE, QTR, SAVEC, T1, T2 +* .. +* .. External Functions .. + DOUBLE PRECISION DLAMC3 + EXTERNAL DLAMC3 +* .. +* .. Save statement .. + SAVE FIRST, LIEEE1, LBETA, LRND, LT +* .. +* .. Data statements .. + DATA FIRST / .TRUE. / +* .. +* .. Executable Statements .. +* + IF( FIRST ) THEN + ONE = 1 +* +* LBETA, LIEEE1, LT and LRND are the local values of BETA, +* IEEE1, T and RND. +* +* Throughout this routine we use the function DLAMC3 to ensure +* that relevant values are stored and not held in registers, or +* are not affected by optimizers. +* +* Compute a = 2.0**m with the smallest positive integer m such +* that +* +* fl( a + 1.0 ) = a. +* + A = 1 + C = 1 +* +*+ WHILE( C.EQ.ONE )LOOP + 10 CONTINUE + IF( C.EQ.ONE ) THEN + A = 2*A + C = DLAMC3( A, ONE ) + C = DLAMC3( C, -A ) + GO TO 10 + END IF +*+ END WHILE +* +* Now compute b = 2.0**m with the smallest positive integer m +* such that +* +* fl( a + b ) .gt. a. +* + B = 1 + C = DLAMC3( A, B ) +* +*+ WHILE( C.EQ.A )LOOP + 20 CONTINUE + IF( C.EQ.A ) THEN + B = 2*B + C = DLAMC3( A, B ) + GO TO 20 + END IF +*+ END WHILE +* +* Now compute the base. a and c are neighbouring floating point +* numbers in the interval ( beta**t, beta**( t + 1 ) ) and so +* their difference is beta. Adding 0.25 to c is to ensure that it +* is truncated to beta and not ( beta - 1 ). +* + QTR = ONE / 4 + SAVEC = C + C = DLAMC3( C, -A ) + LBETA = C + QTR +* +* Now determine whether rounding or chopping occurs, by adding a +* bit less than beta/2 and a bit more than beta/2 to a. +* + B = LBETA + F = DLAMC3( B / 2, -B / 100 ) + C = DLAMC3( F, A ) + IF( C.EQ.A ) THEN + LRND = .TRUE. + ELSE + LRND = .FALSE. + END IF + F = DLAMC3( B / 2, B / 100 ) + C = DLAMC3( F, A ) + IF( ( LRND ) .AND. ( C.EQ.A ) ) + $ LRND = .FALSE. +* +* Try and decide whether rounding is done in the IEEE 'round to +* nearest' style. B/2 is half a unit in the last place of the two +* numbers A and SAVEC. Furthermore, A is even, i.e. has last bit +* zero, and SAVEC is odd. Thus adding B/2 to A should not change +* A, but adding B/2 to SAVEC should change SAVEC. +* + T1 = DLAMC3( B / 2, A ) + T2 = DLAMC3( B / 2, SAVEC ) + LIEEE1 = ( T1.EQ.A ) .AND. ( T2.GT.SAVEC ) .AND. LRND +* +* Now find the mantissa, t. It should be the integer part of +* log to the base beta of a, however it is safer to determine t +* by powering. So we find t as the smallest positive integer for +* which +* +* fl( beta**t + 1.0 ) = 1.0. +* + LT = 0 + A = 1 + C = 1 +* +*+ WHILE( C.EQ.ONE )LOOP + 30 CONTINUE + IF( C.EQ.ONE ) THEN + LT = LT + 1 + A = A*LBETA + C = DLAMC3( A, ONE ) + C = DLAMC3( C, -A ) + GO TO 30 + END IF +*+ END WHILE +* + END IF +* + BETA = LBETA + T = LT + RND = LRND + IEEE1 = LIEEE1 + FIRST = .FALSE. + RETURN +* +* End of DLAMC1 +* + END +* +************************************************************************ +* + SUBROUTINE DLAMC2( BETA, T, RND, EPS, EMIN, RMIN, EMAX, RMAX ) +* +* -- LAPACK auxiliary routine (version 3.1) -- +* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. +* November 2006 +* +* .. Scalar Arguments .. + LOGICAL RND + INTEGER BETA, EMAX, EMIN, T + DOUBLE PRECISION EPS, RMAX, RMIN +* .. +* +* Purpose +* ======= +* +* DLAMC2 determines the machine parameters specified in its argument +* list. +* +* Arguments +* ========= +* +* BETA (output) INTEGER +* The base of the machine. +* +* T (output) INTEGER +* The number of ( BETA ) digits in the mantissa. +* +* RND (output) LOGICAL +* Specifies whether proper rounding ( RND = .TRUE. ) or +* chopping ( RND = .FALSE. ) occurs in addition. This may not +* be a reliable guide to the way in which the machine performs +* its arithmetic. +* +* EPS (output) DOUBLE PRECISION +* The smallest positive number such that +* +* fl( 1.0 - EPS ) .LT. 1.0, +* +* where fl denotes the computed value. +* +* EMIN (output) INTEGER +* The minimum exponent before (gradual) underflow occurs. +* +* RMIN (output) DOUBLE PRECISION +* The smallest normalized number for the machine, given by +* BASE**( EMIN - 1 ), where BASE is the floating point value +* of BETA. +* +* EMAX (output) INTEGER +* The maximum exponent before overflow occurs. +* +* RMAX (output) DOUBLE PRECISION +* The largest positive number for the machine, given by +* BASE**EMAX * ( 1 - EPS ), where BASE is the floating point +* value of BETA. +* +* Further Details +* =============== +* +* The computation of EPS is based on a routine PARANOIA by +* W. Kahan of the University of California at Berkeley. +* +* ===================================================================== +* +* .. Local Scalars .. + LOGICAL FIRST, IEEE, IWARN, LIEEE1, LRND + INTEGER GNMIN, GPMIN, I, LBETA, LEMAX, LEMIN, LT, + $ NGNMIN, NGPMIN + DOUBLE PRECISION A, B, C, HALF, LEPS, LRMAX, LRMIN, ONE, RBASE, + $ SIXTH, SMALL, THIRD, TWO, ZERO +* .. +* .. External Functions .. + DOUBLE PRECISION DLAMC3 + EXTERNAL DLAMC3 +* .. +* .. External Subroutines .. + EXTERNAL DLAMC1, DLAMC4, DLAMC5 +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, MIN +* .. +* .. Save statement .. + SAVE FIRST, IWARN, LBETA, LEMAX, LEMIN, LEPS, LRMAX, + $ LRMIN, LT +* .. +* .. Data statements .. + DATA FIRST / .TRUE. / , IWARN / .FALSE. / +* .. +* .. Executable Statements .. +* + IF( FIRST ) THEN + ZERO = 0 + ONE = 1 + TWO = 2 +* +* LBETA, LT, LRND, LEPS, LEMIN and LRMIN are the local values of +* BETA, T, RND, EPS, EMIN and RMIN. +* +* Throughout this routine we use the function DLAMC3 to ensure +* that relevant values are stored and not held in registers, or +* are not affected by optimizers. +* +* DLAMC1 returns the parameters LBETA, LT, LRND and LIEEE1. +* + CALL DLAMC1( LBETA, LT, LRND, LIEEE1 ) +* +* Start to find EPS. +* + B = LBETA + A = B**( -LT ) + LEPS = A +* +* Try some tricks to see whether or not this is the correct EPS. +* + B = TWO / 3 + HALF = ONE / 2 + SIXTH = DLAMC3( B, -HALF ) + THIRD = DLAMC3( SIXTH, SIXTH ) + B = DLAMC3( THIRD, -HALF ) + B = DLAMC3( B, SIXTH ) + B = ABS( B ) + IF( B.LT.LEPS ) + $ B = LEPS +* + LEPS = 1 +* +*+ WHILE( ( LEPS.GT.B ).AND.( B.GT.ZERO ) )LOOP + 10 CONTINUE + IF( ( LEPS.GT.B ) .AND. ( B.GT.ZERO ) ) THEN + LEPS = B + C = DLAMC3( HALF*LEPS, ( TWO**5 )*( LEPS**2 ) ) + C = DLAMC3( HALF, -C ) + B = DLAMC3( HALF, C ) + C = DLAMC3( HALF, -B ) + B = DLAMC3( HALF, C ) + GO TO 10 + END IF +*+ END WHILE +* + IF( A.LT.LEPS ) + $ LEPS = A +* +* Computation of EPS complete. +* +* Now find EMIN. Let A = + or - 1, and + or - (1 + BASE**(-3)). +* Keep dividing A by BETA until (gradual) underflow occurs. This +* is detected when we cannot recover the previous A. +* + RBASE = ONE / LBETA + SMALL = ONE + DO 20 I = 1, 3 + SMALL = DLAMC3( SMALL*RBASE, ZERO ) + 20 CONTINUE + A = DLAMC3( ONE, SMALL ) + CALL DLAMC4( NGPMIN, ONE, LBETA ) + CALL DLAMC4( NGNMIN, -ONE, LBETA ) + CALL DLAMC4( GPMIN, A, LBETA ) + CALL DLAMC4( GNMIN, -A, LBETA ) + IEEE = .FALSE. +* + IF( ( NGPMIN.EQ.NGNMIN ) .AND. ( GPMIN.EQ.GNMIN ) ) THEN + IF( NGPMIN.EQ.GPMIN ) THEN + LEMIN = NGPMIN +* ( Non twos-complement machines, no gradual underflow; +* e.g., VAX ) + ELSE IF( ( GPMIN-NGPMIN ).EQ.3 ) THEN + LEMIN = NGPMIN - 1 + LT + IEEE = .TRUE. +* ( Non twos-complement machines, with gradual underflow; +* e.g., IEEE standard followers ) + ELSE + LEMIN = MIN( NGPMIN, GPMIN ) +* ( A guess; no known machine ) + IWARN = .TRUE. + END IF +* + ELSE IF( ( NGPMIN.EQ.GPMIN ) .AND. ( NGNMIN.EQ.GNMIN ) ) THEN + IF( ABS( NGPMIN-NGNMIN ).EQ.1 ) THEN + LEMIN = MAX( NGPMIN, NGNMIN ) +* ( Twos-complement machines, no gradual underflow; +* e.g., CYBER 205 ) + ELSE + LEMIN = MIN( NGPMIN, NGNMIN ) +* ( A guess; no known machine ) + IWARN = .TRUE. + END IF +* + ELSE IF( ( ABS( NGPMIN-NGNMIN ).EQ.1 ) .AND. + $ ( GPMIN.EQ.GNMIN ) ) THEN + IF( ( GPMIN-MIN( NGPMIN, NGNMIN ) ).EQ.3 ) THEN + LEMIN = MAX( NGPMIN, NGNMIN ) - 1 + LT +* ( Twos-complement machines with gradual underflow; +* no known machine ) + ELSE + LEMIN = MIN( NGPMIN, NGNMIN ) +* ( A guess; no known machine ) + IWARN = .TRUE. + END IF +* + ELSE + LEMIN = MIN( NGPMIN, NGNMIN, GPMIN, GNMIN ) +* ( A guess; no known machine ) + IWARN = .TRUE. + END IF + FIRST = .FALSE. +*** +* Comment out this if block if EMIN is ok + IF( IWARN ) THEN + FIRST = .TRUE. + WRITE( 6, FMT = 9999 )LEMIN + END IF +*** +* +* Assume IEEE arithmetic if we found denormalised numbers above, +* or if arithmetic seems to round in the IEEE style, determined +* in routine DLAMC1. A true IEEE machine should have both things +* true; however, faulty machines may have one or the other. +* + IEEE = IEEE .OR. LIEEE1 +* +* Compute RMIN by successive division by BETA. We could compute +* RMIN as BASE**( EMIN - 1 ), but some machines underflow during +* this computation. +* + LRMIN = 1 + DO 30 I = 1, 1 - LEMIN + LRMIN = DLAMC3( LRMIN*RBASE, ZERO ) + 30 CONTINUE +* +* Finally, call DLAMC5 to compute EMAX and RMAX. +* + CALL DLAMC5( LBETA, LT, LEMIN, IEEE, LEMAX, LRMAX ) + END IF +* + BETA = LBETA + T = LT + RND = LRND + EPS = LEPS + EMIN = LEMIN + RMIN = LRMIN + EMAX = LEMAX + RMAX = LRMAX +* + RETURN +* + 9999 FORMAT( / / ' WARNING. The value EMIN may be incorrect:-', + $ ' EMIN = ', I8, / + $ ' If, after inspection, the value EMIN looks', + $ ' acceptable please comment out ', + $ / ' the IF block as marked within the code of routine', + $ ' DLAMC2,', / ' otherwise supply EMIN explicitly.', / ) +* +* End of DLAMC2 +* + END +* +************************************************************************ +* + DOUBLE PRECISION FUNCTION DLAMC3( A, B ) +* +* -- LAPACK auxiliary routine (version 3.1) -- +* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. +* November 2006 +* +* .. Scalar Arguments .. + DOUBLE PRECISION A, B +* .. +* +* Purpose +* ======= +* +* DLAMC3 is intended to force A and B to be stored prior to doing +* the addition of A and B , for use in situations where optimizers +* might hold one of these in a register. +* +* Arguments +* ========= +* +* A (input) DOUBLE PRECISION +* B (input) DOUBLE PRECISION +* The values A and B. +* +* ===================================================================== +* +* .. Executable Statements .. +* + DLAMC3 = A + B +* + RETURN +* +* End of DLAMC3 +* + END +* +************************************************************************ +* + SUBROUTINE DLAMC4( EMIN, START, BASE ) +* +* -- LAPACK auxiliary routine (version 3.1) -- +* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. +* November 2006 +* +* .. Scalar Arguments .. + INTEGER BASE, EMIN + DOUBLE PRECISION START +* .. +* +* Purpose +* ======= +* +* DLAMC4 is a service routine for DLAMC2. +* +* Arguments +* ========= +* +* EMIN (output) INTEGER +* The minimum exponent before (gradual) underflow, computed by +* setting A = START and dividing by BASE until the previous A +* can not be recovered. +* +* START (input) DOUBLE PRECISION +* The starting point for determining EMIN. +* +* BASE (input) INTEGER +* The base of the machine. +* +* ===================================================================== +* +* .. Local Scalars .. + INTEGER I + DOUBLE PRECISION A, B1, B2, C1, C2, D1, D2, ONE, RBASE, ZERO +* .. +* .. External Functions .. + DOUBLE PRECISION DLAMC3 + EXTERNAL DLAMC3 +* .. +* .. Executable Statements .. +* + A = START + ONE = 1 + RBASE = ONE / BASE + ZERO = 0 + EMIN = 1 + B1 = DLAMC3( A*RBASE, ZERO ) + C1 = A + C2 = A + D1 = A + D2 = A +*+ WHILE( ( C1.EQ.A ).AND.( C2.EQ.A ).AND. +* $ ( D1.EQ.A ).AND.( D2.EQ.A ) )LOOP + 10 CONTINUE + IF( ( C1.EQ.A ) .AND. ( C2.EQ.A ) .AND. ( D1.EQ.A ) .AND. + $ ( D2.EQ.A ) ) THEN + EMIN = EMIN - 1 + A = B1 + B1 = DLAMC3( A / BASE, ZERO ) + C1 = DLAMC3( B1*BASE, ZERO ) + D1 = ZERO + DO 20 I = 1, BASE + D1 = D1 + B1 + 20 CONTINUE + B2 = DLAMC3( A*RBASE, ZERO ) + C2 = DLAMC3( B2 / RBASE, ZERO ) + D2 = ZERO + DO 30 I = 1, BASE + D2 = D2 + B2 + 30 CONTINUE + GO TO 10 + END IF +*+ END WHILE +* + RETURN +* +* End of DLAMC4 +* + END +* +************************************************************************ +* + SUBROUTINE DLAMC5( BETA, P, EMIN, IEEE, EMAX, RMAX ) +* +* -- LAPACK auxiliary routine (version 3.1) -- +* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. +* November 2006 +* +* .. Scalar Arguments .. + LOGICAL IEEE + INTEGER BETA, EMAX, EMIN, P + DOUBLE PRECISION RMAX +* .. +* +* Purpose +* ======= +* +* DLAMC5 attempts to compute RMAX, the largest machine floating-point +* number, without overflow. It assumes that EMAX + abs(EMIN) sum +* approximately to a power of 2. It will fail on machines where this +* assumption does not hold, for example, the Cyber 205 (EMIN = -28625, +* EMAX = 28718). It will also fail if the value supplied for EMIN is +* too large (i.e. too close to zero), probably with overflow. +* +* Arguments +* ========= +* +* BETA (input) INTEGER +* The base of floating-point arithmetic. +* +* P (input) INTEGER +* The number of base BETA digits in the mantissa of a +* floating-point value. +* +* EMIN (input) INTEGER +* The minimum exponent before (gradual) underflow. +* +* IEEE (input) LOGICAL +* A logical flag specifying whether or not the arithmetic +* system is thought to comply with the IEEE standard. +* +* EMAX (output) INTEGER +* The largest exponent before overflow +* +* RMAX (output) DOUBLE PRECISION +* The largest machine floating-point number. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 ) +* .. +* .. Local Scalars .. + INTEGER EXBITS, EXPSUM, I, LEXP, NBITS, TRY, UEXP + DOUBLE PRECISION OLDY, RECBAS, Y, Z +* .. +* .. External Functions .. + DOUBLE PRECISION DLAMC3 + EXTERNAL DLAMC3 +* .. +* .. Intrinsic Functions .. + INTRINSIC MOD +* .. +* .. Executable Statements .. +* +* First compute LEXP and UEXP, two powers of 2 that bound +* abs(EMIN). We then assume that EMAX + abs(EMIN) will sum +* approximately to the bound that is closest to abs(EMIN). +* (EMAX is the exponent of the required number RMAX). +* + LEXP = 1 + EXBITS = 1 + 10 CONTINUE + TRY = LEXP*2 + IF( TRY.LE.( -EMIN ) ) THEN + LEXP = TRY + EXBITS = EXBITS + 1 + GO TO 10 + END IF + IF( LEXP.EQ.-EMIN ) THEN + UEXP = LEXP + ELSE + UEXP = TRY + EXBITS = EXBITS + 1 + END IF +* +* Now -LEXP is less than or equal to EMIN, and -UEXP is greater +* than or equal to EMIN. EXBITS is the number of bits needed to +* store the exponent. +* + IF( ( UEXP+EMIN ).GT.( -LEXP-EMIN ) ) THEN + EXPSUM = 2*LEXP + ELSE + EXPSUM = 2*UEXP + END IF +* +* EXPSUM is the exponent range, approximately equal to +* EMAX - EMIN + 1 . +* + EMAX = EXPSUM + EMIN - 1 + NBITS = 1 + EXBITS + P +* +* NBITS is the total number of bits needed to store a +* floating-point number. +* + IF( ( MOD( NBITS, 2 ).EQ.1 ) .AND. ( BETA.EQ.2 ) ) THEN +* +* Either there are an odd number of bits used to store a +* floating-point number, which is unlikely, or some bits are +* not used in the representation of numbers, which is possible, +* (e.g. Cray machines) or the mantissa has an implicit bit, +* (e.g. IEEE machines, Dec Vax machines), which is perhaps the +* most likely. We have to assume the last alternative. +* If this is true, then we need to reduce EMAX by one because +* there must be some way of representing zero in an implicit-bit +* system. On machines like Cray, we are reducing EMAX by one +* unnecessarily. +* + EMAX = EMAX - 1 + END IF +* + IF( IEEE ) THEN +* +* Assume we are on an IEEE machine which reserves one exponent +* for infinity and NaN. +* + EMAX = EMAX - 1 + END IF +* +* Now create RMAX, the largest machine number, which should +* be equal to (1.0 - BETA**(-P)) * BETA**EMAX . +* +* First compute 1.0 - BETA**(-P), being careful that the +* result is less than 1.0 . +* + RECBAS = ONE / BETA + Z = BETA - ONE + Y = ZERO + DO 20 I = 1, P + Z = Z*RECBAS + IF( Y.LT.ONE ) + $ OLDY = Y + Y = DLAMC3( Y, Z ) + 20 CONTINUE + IF( Y.GE.ONE ) + $ Y = OLDY +* +* Now multiply by BETA**EMAX to get RMAX. +* + DO 30 I = 1, EMAX + Y = DLAMC3( Y*BETA, ZERO ) + 30 CONTINUE +* + RMAX = Y + RETURN +* +* End of DLAMC5 +* + END + + + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!! LSAME +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + LOGICAL FUNCTION LSAME( CA, CB ) +* +* -- LAPACK auxiliary routine (version 3.1) -- +* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. +* November 2006 +* +* .. Scalar Arguments .. + CHARACTER CA, CB +* .. +* +* Purpose +* ======= +* +* LSAME returns .TRUE. if CA is the same letter as CB regardless of +* case. +* +* Arguments +* ========= +* +* CA (input) CHARACTER*1 +* CB (input) CHARACTER*1 +* CA and CB specify the single characters to be compared. +* +* ===================================================================== +* +* .. Intrinsic Functions .. + INTRINSIC ICHAR +* .. +* .. Local Scalars .. + INTEGER INTA, INTB, ZCODE +* .. +* .. Executable Statements .. +* +* Test if the characters are equal +* + LSAME = CA.EQ.CB + IF( LSAME ) + $ RETURN +* +* Now test for equivalence if both characters are alphabetic. +* + ZCODE = ICHAR( 'Z' ) +* +* Use 'Z' rather than 'A' so that ASCII can be detected on Prime +* machines, on which ICHAR returns a value with bit 8 set. +* ICHAR('A') on Prime machines returns 193 which is the same as +* ICHAR('A') on an EBCDIC machine. +* + INTA = ICHAR( CA ) + INTB = ICHAR( CB ) +* + IF( ZCODE.EQ.90 .OR. ZCODE.EQ.122 ) THEN +* +* ASCII is assumed - ZCODE is the ASCII code of either lower or +* upper case 'Z'. +* + IF( INTA.GE.97 .AND. INTA.LE.122 ) INTA = INTA - 32 + IF( INTB.GE.97 .AND. INTB.LE.122 ) INTB = INTB - 32 +* + ELSE IF( ZCODE.EQ.233 .OR. ZCODE.EQ.169 ) THEN +* +* EBCDIC is assumed - ZCODE is the EBCDIC code of either lower or +* upper case 'Z'. +* + IF( INTA.GE.129 .AND. INTA.LE.137 .OR. + $ INTA.GE.145 .AND. INTA.LE.153 .OR. + $ INTA.GE.162 .AND. INTA.LE.169 ) INTA = INTA + 64 + IF( INTB.GE.129 .AND. INTB.LE.137 .OR. + $ INTB.GE.145 .AND. INTB.LE.153 .OR. + $ INTB.GE.162 .AND. INTB.LE.169 ) INTB = INTB + 64 +* + ELSE IF( ZCODE.EQ.218 .OR. ZCODE.EQ.250 ) THEN +* +* ASCII is assumed, on Prime machines - ZCODE is the ASCII code +* plus 128 of either lower or upper case 'Z'. +* + IF( INTA.GE.225 .AND. INTA.LE.250 ) INTA = INTA - 32 + IF( INTB.GE.225 .AND. INTB.LE.250 ) INTB = INTB - 32 + END IF + LSAME = INTA.EQ.INTB +* +* RETURN +* +* End of LSAME +* + END + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!! IPARMQ +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + INTEGER FUNCTION IPARMQ( ISPEC, NAME, OPTS, N, ILO, IHI, LWORK ) +* +* -- LAPACK auxiliary routine (version 3.1) -- +* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. +* November 2006 +* +* .. Scalar Arguments .. + INTEGER IHI, ILO, ISPEC, LWORK, N + CHARACTER NAME*( * ), OPTS*( * ) +* +* Purpose +* ======= +* +* This program sets problem and machine dependent parameters +* useful for xHSEQR and its subroutines. It is called whenever +* ILAENV is called with 12 <= ISPEC <= 16 +* +* Arguments +* ========= +* +* ISPEC (input) integer scalar +* ISPEC specifies which tunable parameter IPARMQ should +* return. +* +* ISPEC=12: (INMIN) Matrices of order nmin or less +* are sent directly to xLAHQR, the implicit +* double shift QR algorithm. NMIN must be +* at least 11. +* +* ISPEC=13: (INWIN) Size of the deflation window. +* This is best set greater than or equal to +* the number of simultaneous shifts NS. +* Larger matrices benefit from larger deflation +* windows. +* +* ISPEC=14: (INIBL) Determines when to stop nibbling and +* invest in an (expensive) multi-shift QR sweep. +* If the aggressive early deflation subroutine +* finds LD converged eigenvalues from an order +* NW deflation window and LD.GT.(NW*NIBBLE)/100, +* then the next QR sweep is skipped and early +* deflation is applied immediately to the +* remaining active diagonal block. Setting +* IPARMQ(ISPEC=14) = 0 causes TTQRE to skip a +* multi-shift QR sweep whenever early deflation +* finds a converged eigenvalue. Setting +* IPARMQ(ISPEC=14) greater than or equal to 100 +* prevents TTQRE from skipping a multi-shift +* QR sweep. +* +* ISPEC=15: (NSHFTS) The number of simultaneous shifts in +* a multi-shift QR iteration. +* +* ISPEC=16: (IACC22) IPARMQ is set to 0, 1 or 2 with the +* following meanings. +* 0: During the multi-shift QR sweep, +* xLAQR5 does not accumulate reflections and +* does not use matrix-matrix multiply to +* update the far-from-diagonal matrix +* entries. +* 1: During the multi-shift QR sweep, +* xLAQR5 and/or xLAQRaccumulates reflections +* and uses +* matrix-matrix multiply to update the +* far-from-diagonal matrix entries. +* 2: During the multi-shift QR sweep. +* xLAQR5 accumulates reflections and takes +* advantage of 2-by-2 block structure during +* matrix-matrix multiplies. +* (If xTRMM is slower than xGEMM, then +* IPARMQ(ISPEC=16)=1 may be more efficient than +* IPARMQ(ISPEC=16)=2 despite the greater level of +* arithmetic work implied by the latter choice.) +* +* NAME (input) character string +* Name of the calling subroutine +* +* OPTS (input) character string +* This is a concatenation of the string arguments to +* TTQRE. +* +* N (input) integer scalar +* N is the order of the Hessenberg matrix H. +* +* ILO (input) INTEGER +* IHI (input) INTEGER +* It is assumed that H is already upper triangular +* in rows and columns 1:ILO-1 and IHI+1:N. +* +* LWORK (input) integer scalar +* The amount of workspace available. +* +* Further Details +* =============== +* +* Little is known about how best to choose these parameters. +* It is possible to use different values of the parameters +* for each of CHSEQR, DHSEQR, SHSEQR and ZHSEQR. +* +* It is probably best to choose different parameters for +* different matrices and different parameters at different +* times during the iteration, but this has not been +* implemented --- yet. +* +* +* The best choices of most of the parameters depend +* in an ill-understood way on the relative execution +* rate of xLAQR3 and xLAQR5 and on the nature of each +* particular eigenvalue problem. Experiment may be the +* only practical way to determine which choices are most +* effective. +* +* Following is a list of default values supplied by IPARMQ. +* These defaults may be adjusted in order to attain better +* performance in any particular computational environment. +* +* IPARMQ(ISPEC=12) The xLAHQR vs xLAQR0 crossover point. +* Default: 75. (Must be at least 11.) +* +* IPARMQ(ISPEC=13) Recommended deflation window size. +* This depends on ILO, IHI and NS, the +* number of simultaneous shifts returned +* by IPARMQ(ISPEC=15). The default for +* (IHI-ILO+1).LE.500 is NS. The default +* for (IHI-ILO+1).GT.500 is 3*NS/2. +* +* IPARMQ(ISPEC=14) Nibble crossover point. Default: 14. +* +* IPARMQ(ISPEC=15) Number of simultaneous shifts, NS. +* a multi-shift QR iteration. +* +* If IHI-ILO+1 is ... +* +* greater than ...but less ... the +* or equal to ... than default is +* +* 0 30 NS = 2+ +* 30 60 NS = 4+ +* 60 150 NS = 10 +* 150 590 NS = ** +* 590 3000 NS = 64 +* 3000 6000 NS = 128 +* 6000 infinity NS = 256 +* +* (+) By default matrices of this order are +* passed to the implicit double shift routine +* xLAHQR. See IPARMQ(ISPEC=12) above. These +* values of NS are used only in case of a rare +* xLAHQR failure. +* +* (**) The asterisks (**) indicate an ad-hoc +* function increasing from 10 to 64. +* +* IPARMQ(ISPEC=16) Select structured matrix multiply. +* (See ISPEC=16 above for details.) +* Default: 3. +* +* ================================================================ +* .. Parameters .. + INTEGER INMIN, INWIN, INIBL, ISHFTS, IACC22 + PARAMETER ( INMIN = 12, INWIN = 13, INIBL = 14, + $ ISHFTS = 15, IACC22 = 16 ) + INTEGER NMIN, K22MIN, KACMIN, NIBBLE, KNWSWP + PARAMETER ( NMIN = 75, K22MIN = 14, KACMIN = 14, + $ NIBBLE = 14, KNWSWP = 500 ) + REAL TWO + PARAMETER ( TWO = 2.0 ) +* .. +* .. Local Scalars .. + INTEGER NH, NS +* .. +* .. Intrinsic Functions .. + INTRINSIC LOG, MAX, MOD, NINT, REAL +* .. +* .. Executable Statements .. + IF( ( ISPEC.EQ.ISHFTS ) .OR. ( ISPEC.EQ.INWIN ) .OR. + $ ( ISPEC.EQ.IACC22 ) ) THEN +* +* ==== Set the number simultaneous shifts ==== +* + NH = IHI - ILO + 1 + NS = 2 + IF( NH.GE.30 ) + $ NS = 4 + IF( NH.GE.60 ) + $ NS = 10 + IF( NH.GE.150 ) + $ NS = MAX( 10, NH / NINT( LOG( REAL( NH ) ) / LOG( TWO ) ) ) + IF( NH.GE.590 ) + $ NS = 64 + IF( NH.GE.3000 ) + $ NS = 128 + IF( NH.GE.6000 ) + $ NS = 256 + NS = MAX( 2, NS-MOD( NS, 2 ) ) + END IF +* + IF( ISPEC.EQ.INMIN ) THEN +* +* +* ===== Matrices of order smaller than NMIN get sent +* . to xLAHQR, the classic double shift algorithm. +* . This must be at least 11. ==== +* + IPARMQ = NMIN +* + ELSE IF( ISPEC.EQ.INIBL ) THEN +* +* ==== INIBL: skip a multi-shift qr iteration and +* . whenever aggressive early deflation finds +* . at least (NIBBLE*(window size)/100) deflations. ==== +* + IPARMQ = NIBBLE +* + ELSE IF( ISPEC.EQ.ISHFTS ) THEN +* +* ==== NSHFTS: The number of simultaneous shifts ===== +* + IPARMQ = NS +* + ELSE IF( ISPEC.EQ.INWIN ) THEN +* +* ==== NW: deflation window size. ==== +* + IF( NH.LE.KNWSWP ) THEN + IPARMQ = NS + ELSE + IPARMQ = 3*NS / 2 + END IF +* + ELSE IF( ISPEC.EQ.IACC22 ) THEN +* +* ==== IACC22: Whether to accumulate reflections +* . before updating the far-from-diagonal elements +* . and whether to use 2-by-2 block structure while +* . doing it. A small amount of work could be saved +* . by making this choice dependent also upon the +* . NH=IHI-ILO+1. +* + IPARMQ = 0 + IF( NS.GE.KACMIN ) + $ IPARMQ = 1 + IF( NS.GE.K22MIN ) + $ IPARMQ = 2 +* + ELSE +* ===== invalid value of ispec ===== + IPARMQ = -1 +* + END IF +* +* ==== End of IPARMQ ==== +* + END + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!! IEEECK +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + INTEGER FUNCTION IEEECK( ISPEC, ZERO, ONE ) +* +* -- LAPACK auxiliary routine (version 3.1) -- +* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. +* November 2006 +* +* .. Scalar Arguments .. + INTEGER ISPEC + REAL ONE, ZERO +* .. +* +* Purpose +* ======= +* +* IEEECK is called from the ILAENV to verify that Infinity and +* possibly NaN arithmetic is safe (i.e. will not trap). +* +* Arguments +* ========= +* +* ISPEC (input) INTEGER +* Specifies whether to test just for inifinity arithmetic +* or whether to test for infinity and NaN arithmetic. +* = 0: Verify infinity arithmetic only. +* = 1: Verify infinity and NaN arithmetic. +* +* ZERO (input) REAL +* Must contain the value 0.0 +* This is passed to prevent the compiler from optimizing +* away this code. +* +* ONE (input) REAL +* Must contain the value 1.0 +* This is passed to prevent the compiler from optimizing +* away this code. +* +* RETURN VALUE: INTEGER +* = 0: Arithmetic failed to produce the correct answers +* = 1: Arithmetic produced the correct answers +* +* .. Local Scalars .. + REAL NAN1, NAN2, NAN3, NAN4, NAN5, NAN6, NEGINF, + $ NEGZRO, NEWZRO, POSINF +* .. +* .. Executable Statements .. + IEEECK = 1 +* + POSINF = ONE / ZERO + IF( POSINF.LE.ONE ) THEN + IEEECK = 0 + RETURN + END IF +* + NEGINF = -ONE / ZERO + IF( NEGINF.GE.ZERO ) THEN + IEEECK = 0 + RETURN + END IF +* + NEGZRO = ONE / ( NEGINF+ONE ) + IF( NEGZRO.NE.ZERO ) THEN + IEEECK = 0 + RETURN + END IF +* + NEGINF = ONE / NEGZRO + IF( NEGINF.GE.ZERO ) THEN + IEEECK = 0 + RETURN + END IF +* + NEWZRO = NEGZRO + ZERO + IF( NEWZRO.NE.ZERO ) THEN + IEEECK = 0 + RETURN + END IF +* + POSINF = ONE / NEWZRO + IF( POSINF.LE.ONE ) THEN + IEEECK = 0 + RETURN + END IF +* + NEGINF = NEGINF*POSINF + IF( NEGINF.GE.ZERO ) THEN + IEEECK = 0 + RETURN + END IF +* + POSINF = POSINF*POSINF + IF( POSINF.LE.ONE ) THEN + IEEECK = 0 + RETURN + END IF +* +* +* +* +* Return if we were only asked to check infinity arithmetic +* + IF( ISPEC.EQ.0 ) + $ RETURN +* + NAN1 = POSINF + NEGINF +* + NAN2 = POSINF / NEGINF +* + NAN3 = POSINF / POSINF +* + NAN4 = POSINF*ZERO +* + NAN5 = NEGINF*NEGZRO +* + NAN6 = NAN5*0.0 +* + IF( NAN1.EQ.NAN1 ) THEN + IEEECK = 0 + RETURN + END IF +* + IF( NAN2.EQ.NAN2 ) THEN + IEEECK = 0 + RETURN + END IF +* + IF( NAN3.EQ.NAN3 ) THEN + IEEECK = 0 + RETURN + END IF +* + IF( NAN4.EQ.NAN4 ) THEN + IEEECK = 0 + RETURN + END IF +* + IF( NAN5.EQ.NAN5 ) THEN + IEEECK = 0 + RETURN + END IF +* + IF( NAN6.EQ.NAN6 ) THEN + IEEECK = 0 + RETURN + END IF +* + RETURN + END + diff --git a/src/Misc/fit.f b/src/Misc/fit.f new file mode 100755 index 000000000..0a8d09e2c --- /dev/null +++ b/src/Misc/fit.f @@ -0,0 +1,141 @@ +C> Calculate a four point interpolation from i-1 to i+2 +C> returns c array 4 of real*8 which are coeficients for +C> \f[ +C> f_i-c_1+c_2(r-r_i) +C> +\frac{(c_3-c_2)(r-r_i)+c_1}{1+c_4(r-r_i) (r_{i+1}-r)} +C> \f] +C> +C> It's obvious that \f$ c_3=(f_{i+1}-f_i)/(r_{i+1}-r_i) \f$. +C> \f$ c_2 \f$ is adjustable and is chosen so to avoid possible singularities +C> in eqns solving for \f$ c_1 \f$ and \f$ c_4 \f$. +C> \f[ +C> c_2=\frac{f_{i+2}-f_{i+1}}{r_{i+2}-r_{i+1}}-\frac{f_i-f_{i-1}}{r_i-r_{i-1}} +C> \f] +C> and the sign is chosen so that it is opposite of +C> \f$ (f_{i+1}-f_{i-1})/(r_{i+1}-r_{i-1}) \f$. +C> +C> @param r the mesh the function is defined on +C> @param f the function to interpolate, defined on the meshpoint +C> @param nr the size of the function and meshpoint tables +C> @param i where to perform the interpolation based on four points i-1, i, i+1, i+2 +C> @param c the coefictients for the rational interpoalting function + subroutine fit(r,f,nr,i,c) + implicit real*8 (a-h,o-z) + real*8 r(nr),f(nr),c(4) +c does a four-point interpolation from i-1 to i+2 +c returns c array 4 of real*8 which are coeficients for +c f(i)-c1+c2*(r-r(i))+((c3-c2)*(r-r(i))+c1)/(1+c4*(r-r(i))*(r(i+1)-r)) +c +c It's obvious that c3=(f(i+1)-f(i))/(r(i+1)-r(i)) +c c2 is adjustable and is chosen so to avoid possible singularities +c in eqns solving for c1 and c4. +c +c c2=((f(i+2)-f(i+1))/(r(i+2)-r(i+1))-(f(i)-f(i-1))/(r(i)-r(i-1))) +c and the sign is chosen so that it is opposite of +c (f(i+1)-f(i-1))/(r(i+1)-r(i-1)) +c + + if(i.lt.1) then + write(6,'(''FIT: i<1'')') +! call stop_with_backtrace('fit') + stop 'fit' + endif + ip1=i+1 + if(ip1.gt.nr) then + if(r(1).gt.r(nr)) then ! wrap around + ip1=1 + else + write(6,*) "FIT: i>n-1",i,nr +! call stop_with_backtrace('fit') + stop 'fit' + endif + endif + dr=r(ip1)-r(i) + if(dr.eq.0.d0) then + write(6,'(''FIT: degenerate grid'')') +! call stop_with_backtrace('fit') + stop'fit' + endif + drv=f(ip1)-f(i) + c(3)=drv/dr + +c two point interpolation + if(nr.eq.2) then + c(1)=f(i) + c(2)=0.d0 + c(4)=0.d0 + return + endif + +c fit the function to the two outside points + if(i.gt.1) then + i1=i-1 + else + i1=min(4,nr) + endif + if(ip1.lt.nr) then + i2=ip1+1 + else + i2=max(nr-3,1) + endif +c If nr=3 then i1=i2 + if(i1.ne.i2) then + c(2)=(f(i2)-f(ip1))/(r(i2)-r(ip1))-(f(i1)-f(i))/(r(i1)-r(i)) + if(c(2)*(f(i2)-f(i1))*(r(i2)-r(i1)).gt.0.d0) c(2)=-c(2) +c solve the 2x2 equation for c(1) and c(4) + h1=r(i1)-r(i) + c0=f(i1)-f(i) + c1=c0-c(3)*h1 + c2=c0-c(2)*h1 + h1=h1*(r(ip1)-r(i1)) + eqn12=-h1*c2 + h2=r(i2)-r(i) + c0=f(i2)-f(i) + c3=c0-c(3)*h2 + c4=c0-c(2)*h2 + h2=h2*(r(ip1)-r(i2)) + eqn22=-h2*c4 + gj=(c4-c2)*h1*h2 + if(gj.eq.0.d0) then + c(4)=0.d0 + else + c(1)=(c1*eqn22-c3*eqn12)/gj + c(4)=(c1*h2-c3*h1)/gj + endif + +c If the points are on a line or nearly a line then use linear +c interpolation +c check this by checking to see if the denominator 1+c4*(r-r(i))*(r(i+1)-r) +c can be zero or negative. The minimum is 1-c4*dr*dr/4 + gj=c(4)*dr*dr + if(gj.gt.-4.d0.and.abs(gj).gt.1.d-14.and.gj.lt.1.d+14) then + c(1)=c(1)/c(4) + else + c(1)=f(i) + c(4)=0.d0 + endif + else ! i1=i2 +c set A4=0.5*(f(i)+f(i+1)) and do a 3 point fit + fj=0.5d0*(f(i)+f(ip1)) + c(1)=f(i)-fj + c(2)=0.d0 + rj=r(i)+0.5d0*dr + if(abs(r(i1)-rj).gt.abs(r(i2)-rj)) i1=i2 + h1=r(i1)-r(i) + c1=f(i1)-f(i)-c(3)*h1 + h1=h1*(r(ip1)-r(i1)) + if(f(i1).ne.fj) then + c(4)=-c1/((f(i1)-fj)*h1) + gj=c(4)*dr*dr + if(gj.le.-4.d0.or.abs(gj).le.1.d-14.or.gj.ge.1.d+14) then + c(1)=f(i) + c(4)=0.d0 + endif + else + c(1)=f(i) + c(4)=0.d0 + endif + endif ! f(i1)=f(i2) + + return + end diff --git a/src/Misc/fitpot.f b/src/Misc/fitpot.f new file mode 100755 index 000000000..288cc83f2 --- /dev/null +++ b/src/Misc/fitpot.f @@ -0,0 +1,88 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine fitpot(r,rv,coef,nr,jmt,iend) +c ================================================================ +c + implicit none +c + integer jmt + integer iend + integer i,j,i1 + integer l + integer nr +c + real*8 r(iend) + real*8 rv(iend) + real*8 coef(nr,iend) + real*8 h1,h2,r0,dr,drv + real*8 eqn11,eqn12,eqn21,eqn22,rhs1,rhs2,drvdr,det +c + if(nr.gt.4.or.nr.gt.jmt) then + write(6,'(''FITPOT:: nr too large: nr='',i3)') nr + stop'nr' + endif + do j=1,jmt-1 + r0=r(j) + dr=r(j+1)-r0 + drv=rv(j+1)-rv(j) + drvdr=drv/dr + if(nr.eq.2) then + coef(1,j)=drvdr + coef(2,j)=rv(j) + else if(nr.eq.3) then + write(6,'(''fitpot: nr=3 is no longer supported'')') + stop'fitpot' +c + else + +c fit the potential to +c f1+(f0-f1+(f1-f0)*(r-r0)/(r1-r0)+a2*(r-r0)*(r-r1))/(1+a3*(r-r0)**2) + i1=j-1 + if(j.eq.1) i1=3 + if(j.eq.jmt-1) i1=i1-1 + h1=r(i1)-r0 + h2=r(i1)-r(j+1) + eqn11=h2 + eqn12=-h1*(rv(i1)-rv(j+1)) + rhs1=(rv(i1)-rv(j))/h1-drvdr + i1=i1+1 + if(i1.eq.j) i1=i1+2 + h1=r(i1)-r0 + h2=r(i1)-r(j+1) + eqn21=h2 + eqn22=-h1*(rv(i1)-rv(j+1)) + rhs2=(rv(i1)-rv(j))/h1-drvdr + det=eqn11*eqn22-eqn21*eqn12 + if(abs(det).gt.1.d-16) then + coef(2,j)=-(eqn12*rhs2-eqn22*rhs1)/det + coef(3,j)=(eqn11*rhs2-eqn21*rhs1)/det +c If the points are on a line or nearly a line then use linear +c interpolation + h1=coef(3,j)*dr*dr + if(h1.gt.-1.d0.and.abs(h1).gt.1.d-14) then +c refit into (A1*(r-r0)+A2)/(1+A3*(r-r0)**2)+A4 + coef(1,j)=drvdr-coef(2,j)*dr + coef(4,j)=rv(j+1)+coef(2,j)/coef(3,j) + coef(2,j)=rv(j)-coef(4,j) + else + coef(1,j)=drvdr + coef(2,j)=rv(j) + coef(3,j)=0.d0 + coef(4,j)=0.d0 + endif + else + coef(1,j)=drvdr + coef(2,j)=rv(j) + coef(3,j)=0.d0 + coef(4,j)=0.d0 + endif + endif + enddo + do j=jmt,iend + do i=1,nr + coef(i,j)=0.d0 + enddo + enddo +c + return + end diff --git a/src/Misc/fnpi.f b/src/Misc/fnpi.f new file mode 100755 index 000000000..29af36d94 --- /dev/null +++ b/src/Misc/fnpi.f @@ -0,0 +1,17 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + function fnpi() +c ========================================================== +c + implicit none +c + real*8 fnpi + real*8 one + real*8 two +c + parameter (one=1.0,two=2.0) +c + fnpi=two*asin(one) +c + return + end diff --git a/src/Misc/fstop.f b/src/Misc/fstop.f new file mode 100755 index 000000000..dc2d25a06 --- /dev/null +++ b/src/Misc/fstop.f @@ -0,0 +1,25 @@ +c +c ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine fstop(name) +c ================================================================= +c +c this routine will stop the program when an error has occured +c in a subroutine +c + character*32 name,nam2 +c + data nam2/'null'/ +c + if(nam2.eq.name) then + goto 10 + endif +c + write(6,'(///)') + write(6,'(3x,61(''*''))') + write(6,'(3x,''* fstop called with index '',a32,t64,''*'')')name + write(6,'(3x,61(''*''))') +c + 10 continue +cJL call kill(0,9) + stop + end diff --git a/src/Misc/gaunt.f b/src/Misc/gaunt.f new file mode 100755 index 000000000..9ffbc03fe --- /dev/null +++ b/src/Misc/gaunt.f @@ -0,0 +1,119 @@ + function gaunt(l1,m1,l2,m2,l3,m3,lmax,ngauss, + > wg,plmg,clm) +c **************************************************************** +c +c 4pi _ m1 _ m2* _ m3 _ +c gaunt = int do Y (o) * Y (o) * Y (o) +c 0 l1 l2 l3 +c +c L3 +c = C +c L1,L2 +c +c **************************************************************** +c +c Inputs: l1,m1,l2,m2,l3,m3 integer scalars, (l,m) indices of the gaunt +c number +c lmax integer scalar, max l values allowed, lmax >= max(l1,l2,l3) +c lmax also determines the array dimensions of plmg and clm +c ngauss integer scaler, Number of gaussian points for integration +c wg real*8 array of (ngauss), weights for mesh points +c wg are the Gauss-Legendre integration weights +c plmg real*8 array of ((lmax+1)*(lmax+2)/2,ngauss), where +c l=max(l1,l2,l3), the values of the associate Legendre +c function at the mesh points +c plmg is output of plglmax +c clm real*8 array of ((lmax+1)*(lmax+2)/2), prefactors for the +c spherical harmonics +c clm is output of getclm +c + implicit none +c + integer l1 + integer l2 + integer l3 + integer m1 + integer m2 + integer m3 + integer lmax,ngauss + integer ng + integer ifac1 + integer jl1 + integer ifac2 + integer jl2 + integer ifac3 + integer jl3 +c + real*8 wg(ngauss) + real*8 plmg((lmax+1)*(lmax+2)/2,ngauss) + real*8 clm((lmax+1)*(lmax+2)/2) + real*8 gaunt,gaunt_val + real*8 zero + real*8 four +c + parameter (zero=0.d0) + parameter (four=4.d0) + real*8 pi,fourpi + parameter (pi=3.141592653589793d0) + parameter (fourpi=four*pi) +c + if(l1.gt.lmax .or. l2.gt.lmax .or. l3.gt.lmax ) then + write(6,'(''gaunt:: bad parameters: l1,l2,l3,lmax'',4i5)') + > l1,l2,l3,lmax + stop'gaunt' + endif + gaunt_val=zero + if(mod(l1+l2+l3,2).ne.0) then + return + else + if(m1-m2+m3 .ne. 0) then + return + else + if(l1+l2.lt.l3 .or. l2+l3.lt.l1 .or. l3+l1.lt.l2) then + return + else +c ------------------------------------------------------- + call defac(l1, m1,ifac1,jl1) + call defac(l2,-m2,ifac2,jl2) + call defac(l3, m3,ifac3,jl3) +c ------------------------------------------------------- + do ng=1,ngauss + gaunt_val=gaunt_val+wg(ng)*plmg(jl1,ng)* + > plmg(jl2,ng)* + > plmg(jl3,ng) + enddo + if(abs(gaunt_val).lt.1.d-14) then + gaunt_val=0.d0 + else + gaunt_val=fourpi*gaunt_val*ifac1*clm(jl1)* + & (1-2*mod(abs(m2),2))*ifac2*clm(jl2)*ifac3*clm(jl3) + endif + endif + endif + endif + + gaunt=gaunt_val + return + end +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine defac(l,m,ifac,jl) +c ================================================================ +c + implicit none +c + integer l,m + integer jl + integer ifac +c +c ================================================================ + if (m.ge.0) then + ifac= 1 + jl = (l+1)*(l+2)/2-l+m + else + ifac= (1-2*mod(abs(m),2)) + jl = (l+1)*(l+2)/2-l-m + end if +c + return + end diff --git a/src/Misc/getclm.f b/src/Misc/getclm.f new file mode 100755 index 000000000..a6fd2ebf7 --- /dev/null +++ b/src/Misc/getclm.f @@ -0,0 +1,64 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine getclm(lmax,clm) +c ================================================================ +c + implicit none +c + integer lmax + integer l + integer m + integer m2 + integer i +c + real*8 clm((lmax+1)*(lmax+2)/2) + real*8 fpi + real*8 fnpi + real*8 xfac + real*8 one + real*8 four +c + parameter (one=1.0d0) + parameter (four=4.0d0) +c +c ***************************************************************** +c Coeficients for complex spherical harmonics...................... +c Calclates all the c(l,m)'s up to lmax............................ +c +c [ (2*l+1)*(l-|m|)!] +c c(l,m)= sqrt[-----------------] +c [ 4*pi*(l+|m|)! ] +c +c ***************************************************************** +c +c ================================================================= + if(lmax.lt.0 ) then + write(6,'('' GETCLM:: bad arguments: lmax='',i5)') lmax + stop 'getclm' + endif +c ================================================================= +c begin calculation of c(l,m)'s.................................... +c ================================================================= + fpi=four*fnpi() +c ================================================================= +c special case lmax=0.............................................. +c ================================================================= + clm(1)=sqrt(one/fpi) + do l=1,lmax + xfac=sqrt((2*l+1)/fpi) + do m=0,l + clm(l*(l+1)/2+m+1)=one + m2=2*m + do i=1,m2 + clm(l*(l+1)/2+m+1)=(l-m+i)*clm(l*(l+1)/2+m+1) + enddo +c =========================================================== +c This version is consisten with (-1)**m being in Plm's...... +c See plglmax.f in this directory............................ +c =========================================================== + clm(l*(l+1)/2+m+1)=xfac*sqrt(one/clm(l*(l+1)/2+m+1)) + enddo + enddo +c + return + end diff --git a/src/Misc/ifacts_c.f b/src/Misc/ifacts_c.f new file mode 100755 index 000000000..66c40281d --- /dev/null +++ b/src/Misc/ifacts_c.f @@ -0,0 +1,72 @@ +c +c ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine ifacts(lmax,illp,ilp1,iprint,istop) +c ================================================================= +c + implicit none +c + character sname*20 + character istop*32 +c + integer iprint + integer lmax + integer l + integer m + integer lp + integer mp + integer lm + integer lmp +c + complex*16 illp((lmax+1)**2,(lmax+1)**2) + complex*16 ilp1(0:2*lmax) + complex*16 cone + complex*16 sqrtm1 +c + parameter (sqrtm1=(0.0d0,1.0d0)) + parameter (cone=(1.0d0,0.0d0)) + parameter (sname='ifacts') +c +c ================================================================ +c set up factors i**l............................................. + ilp1(0)=cone + do l=1,2*lmax + ilp1(l)=ilp1(l-1)*sqrtm1 + enddo +c ================================================================ +c load the factors i**(l-lp)into the matrix illp(lm,lmp)......... + do l=0,lmax + do m= -l,l + lm=l*(l+1)+1+m + do lp=0,lmax + do mp= -lp,lp + lmp=lp*(lp+1)+1+mp + illp(lm,lmp)=ilp1(l)/ilp1(lp) +c ==================================================== +c printout if needed.................................. + if(iprint.ge.1) then + write(6,'('' l,m,lp,mp,lm,lmp,illp(lm,lmp):'', + > 6i4,2f8.3)') l,m,lp,mp,lm,lmp,illp(lm,lmp) + endif + enddo + enddo + enddo + enddo +c ================================================================ +c set up factors i**(l+1).......................................... + do l=0,2*lmax + ilp1(l)=ilp1(l)*sqrtm1 + enddo +c ================================================================ +c printout if needed.............................................. + if(iprint.ge.1) then + write(6,'('' ifacts:: l,i**(l+1):'',i3,2d12.4)') + > (l,ilp1(l),l=0,2*lmax) + endif +c +c ================================================================ + if(istop.eq.sname) then + call fstop(sname) + else + return + endif + end diff --git a/src/Misc/initwave.f b/src/Misc/initwave.f new file mode 100755 index 000000000..92ee3c6a2 --- /dev/null +++ b/src/Misc/initwave.f @@ -0,0 +1,109 @@ + subroutine initwave(srelflg,r,pot,nr,nv,ist,l,energy,y,escale, + & core,b,allp1) +c + implicit none +c +c---- mode flags: +c + logical srelflg ! scalar relativistic if true + logical core ! core full relativistic if true +c +c---- input: +c + integer l ! angular momentum number + complex*16 energy ! energy + integer nr,ist + real*8 pot(nr) ! potential + real*8 r(2) ! radial grid + real*8 escale + integer nv +c +c---- output: +c + real*8 y(nv) +c +c The fine structure constant is taken from the 1986 recommended values +c of the fundamental physical constants, Physics Today August 1992. +c c is the speed of light in Hartree. +c It is half of the speed of light in Ryd unit, +c --- xgz + real*8 c,c2 + parameter (c=137.0359895d0,c2=c*c) +c +c---- local variables: +c + complex*16 v0,a2,a3 + complex*16 y1,y2 + real*8 z,z0,al,alp1,allp1,b,v1,a1,rl,x + logical rel +c +c---- the following common block is used by initwave, to comunicate with +c dfv. It is also used by psowave of the lkkr main code for +c the same reasons. +c +! common /dfbits/ b,allp1 +! save /dfbits/ +c + z0=pot(2) + if(nr.eq.4) z0=z0+pot(nr) + z0=dble(int(abs(z0)+0.1d0)) + z=escale*z0 + rel=srelflg + if(z.lt.0.5d0) rel=.false. + allp1=abs(l*(l+1)) + x=r(ist) + if(rel) then + if(core) then + b=c + allp1=l + v0=escale*(energy-pot(1))+c2 +c----- full-relativistic initial conditions + al=sqrt(allp1*allp1-z*z/c2) + rl=x**al + a1=al+allp1 + a2=(-2.d0*v0*z/c2+(c2+v0)*a1/z)/(2.d0*al+1.d0) + a3=(-2.d0*v0*a1+c2-v0)/(b*(2.d0*al+1.d0)) + y1=rl*(1.d0+a2*x) + y2=rl*(a1*b/z+a3*x) + else + b=0.25d0/c2 +c +c----- semi-relativistic initial conditions +c +c note starting values are different from the non-relativistic case +c the ratio of r2/r1 at the first grid point is determined by +c kh equation 15 +c + y1=1.0d0 + y2=2.0d0*c2*(sqrt(allp1+1.0d0-z*z/c2)-1.0d0)/z + endif + else + b=0.0d0 +c +c----- find taylor series for v-e = -z/r - v0 -v1r +c + v0=escale*(energy-pot(1)) + v1=2.d0*escale*pot(2)*pot(3) + v0=v0-0.5d0*v1*(r(1)+r(2)) + al=dfloat(l) + alp1=al+1.0d0 + a1=-z/alp1 + a2=(-z*a1-v0)/(2.0d0*al+3.0d0) + a3=-(-a1*(z*z-(3.0d0*al+4.0d0)*v0)+(2.0d0*al+3.0d0)* + > v1)/(3.0d0*(al+2.0d0)*(2.0d0*al+3.0d0)) + rl=x**al + y1=(x*rl)*(1.0d0+x*(a1+x*(a2+x*a3))) + y2=rl*(al+x*(alp1*a1+x*((al+2.0d0)*a2+x*(al+3.0d0)*a3))) + endif + if(nv.eq.2) then + y(1)=dreal(y1) + y(2)=dreal(y2) + else + y(1)=dreal(y1) + y(2)=dimag(y1) + y(3)=dreal(y2) + y(4)=dimag(y2) + endif +c + return + end diff --git a/src/Misc/integrateOneDim.cpp b/src/Misc/integrateOneDim.cpp new file mode 100644 index 000000000..81bc2f346 --- /dev/null +++ b/src/Misc/integrateOneDim.cpp @@ -0,0 +1,153 @@ +#include "Real.hpp" +#include "rationalFit.hpp" +#include + + +// #define DEFAULT_STEP_SUBDIVISION 3 +#define DEFAULT_STEP_SUBDIVISION 0 + +template +Real integrateStep(Real x0, Real x1, Fn &fn) +{ + const Real sixth=1.0/6.0; + const Real nintieth=1.0/90.0; + Real h = x1-x0; +// trapezoid: +// return 0.5*h*(fn(x0)+fn(x1)); + +// Simpson: + return sixth*h*(fn(x0)+4.0*fn(0.5*(x0+x1))+fn(x1)); + +// Newton-Cotes of 4-th order: +// return nintieth*h*(7.0*fn(x0)+32.0*fn(x0+0.25*h)+12.0*fn(0.5*(x0+x1))+32.0*fn(x0+0.75*h)+7.0*fn(x1)); +} + +// calculate the 1-d integral of an integrand defined on the grid from +template +void integrateOneDim(Real *grid, Real *integrand, Real *integral, size_t n) +{ + RationalFit fit; + const Real invStepSubdivision=1.0/Real(stepSubdivision); + integral[0]=0.0; + if(stepSubdivision==0) // use fit.integral for integration steps + for(size_t i=0; i +void integrateOneDim(std::vector &grid, Func fn, std::vector &integral) +{ + RationalFit fit; + const Real invStepSubdivision=1.0/Real(stepSubdivision); + integral[0]=0.0; + if(stepSubdivision==0) // use fit.integral for integration steps + for(size_t i=0; i +inline void integrateOneDim(std::vector &grid, std::vector &integrand, std::vector &integral) +{ + integrateOneDim(&grid[0], &integrand[0], &integral[0], integrand.size()); +} + +template +void integrateOneDimSpherical(Real *grid, Real *integrand, Real *integral, size_t n) +{ + RationalFit fit; + const Real invStepSubdivision=1.0/Real(stepSubdivision); + integral[0]=0.0; + + if(stepSubdivision==0) // use fit.integral for integration steps + for(size_t i=0; i +inline void integrateOneDimSpherical(std::vector &grid, std::vector &integrand, std::vector &integral) +{ + integrateOneDimSpherical(&grid[0], &integrand[0], &integral[0], integrand.size()); +} + +template +Real integrateOneDim(std::vector &grid, std::vector &integrand, std::vector &integral, Real r) +{ + integrateOneDim(grid, integrand, integral); + return interpolate(grid, integral, r); +} + +template +Real integrateOneDimSpherical(std::vector &grid, std::vector &integrand, std::vector &integral, Real r) +{ + integrateOneDimSpherical(grid, integrand, integral); + return interpolate(grid, integral, r); +} diff --git a/src/Misc/interp.f b/src/Misc/interp.f new file mode 100755 index 000000000..1601da39e --- /dev/null +++ b/src/Misc/interp.f @@ -0,0 +1,29 @@ +c +c +c + subroutine interp(r,f,nr,rs,ps,dps,deriv) +cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc +c +c----- this routine interpolates functn f on grid r +c returns value ps and its derivative dps +c + implicit real*8 (a-h,o-z) + logical deriv + real*8 r(nr),f(nr),c(4) +c + ip1=2 + do i=ip1,nr-1 + if (rs.gt.r(i)) ip1=i+1 + enddo + i=ip1-1 + call fit(r,f,nr,i,c) +c + h1=rs-r(i) + h2=r(ip1)-rs + c2=1.d0+c(4)*h1*h2 + ps=((c(3)-c(2))*h1+c(1))/c2 + dps=c(2)+(c(3)-c(2)+ps*c(4)*(h1-h2))/c2 + ps=ps+f(i)-c(1)+c(2)*h1 + + return + end diff --git a/src/Misc/matr.f b/src/Misc/matr.f new file mode 100755 index 000000000..40e6055c4 --- /dev/null +++ b/src/Misc/matr.f @@ -0,0 +1,68 @@ + subroutine matr(tlm,lmax,dmat,dmat1) +! =================== +! +! R=(tvec,phi) +! dmat = D(R) and dmat1 = D(R)+ +! + implicit real*8 (a-h,o-z) +! include '../param.h' +! parameter(jdim=2*lmaxp+2) +! + dimension tlm(4) + complex*16 dmat(2*(lmax+1)*(lmax+1),2*(lmax+1)*(lmax+1)) + complex*16 dmat1(2*(lmax+1)*(lmax+1),2*(lmax+1)*(lmax+1)) + complex*16 cmat(2*(lmax+1)*(lmax+1),2*(lmax+1)*(lmax+1)) + complex*16 d(2*lmax+2,2*lmax+2) +! common/test/itest +! + kmax=2*lmax+1 + kmymax=2*(lmax+1)*(lmax+1) +! +! Set up matrix of rotation +! + do i=1,kmymax + do j=1,kmymax + dmat(i,j)=(0.d0,0.d0) + end do + end do + ist=0 + do j2=1,2*lmax-1,2 + il=j2+1 + call rotmat(d,trd,il,tlm,1,lmax) + do icase=1,2 + do m1=1,il + do m2=1,il + dmat(ist+m1,ist+m2)=d(il+1-m1,il+1-m2) + end do + end do + ist=ist+il + end do + end do + j2=2*lmax+1 + il=j2+1 + call rotmat(d,trd,il,tlm,1,lmax) + do m1=1,il + do m2=1,il +! fill up matrix according to ascending m index + dmat(ist+m1,ist+m2)=d(il+1-m1,il+1-m2) + end do + end do +! + do i=1,kmymax + do j=1,kmymax + dmat1(i,j)=dconjg(dmat(j,i)) + end do + end do +! +c$$$ if(0.lt.4) return +c$$$ write(6,'(/'' Matrix of rotation'')') +c$$$ call outmat(dmat,kmymax,kmymax,2*(lmax+1)*(lmax+1),6) +c$$$ write(6,'(/'' Inverse'')') +c$$$ call outmat(dmat1,kmymax,kmymax,2*(lmax+1)*(lmax+1),6) +c$$$ call repl(cmat,dmat,kmymax,2*(lmax+1)*(lmax+1)) +c$$$ call doubmt(cmat,dmat1,kmymax,2*(lmax+1)*(lmax+1)) +c$$$ write(6,'(/'' D(R) * D(R**-1) '')') +c$$$ call outmat(cmat,kmymax,kmymax,2*(lmax+1)*(lmax+1),6) +! +c$$$ return + end diff --git a/src/Misc/matrot1.f b/src/Misc/matrot1.f new file mode 100755 index 000000000..eb7b778e7 --- /dev/null +++ b/src/Misc/matrot1.f @@ -0,0 +1,103 @@ + subroutine matrot1(r0,r1,lmax,dmat,dmatp) +! ===================== +! +! if r1 = R * r0, dmat = D(R) and dmatp = D(R)+ +! + implicit real*8 (a-h,o-z) +! include '../param.h' +! + dimension r0(3),r1(3),rr(3),drot(3,3),tvec(3),tlm(4) + complex*16 dmat(2*(lmax+1)*(lmax+1),2*(lmax+1)*(lmax+1)) + complex*16 dmatp(2*(lmax+1)*(lmax+1),2*(lmax+1)*(lmax+1)) + complex*16 cmat(2*(lmax+1)*(lmax+1),2*(lmax+1)*(lmax+1)) + complex*16 d(2*lmax+2,2*lmax+2),dz(3) +! +! common/test/itest +! + pi=4.d0*datan(1.d0) + sth=dsqrt(3.d0) +! + r0mod=0.d0 + r1mod=0.d0 + do i=1,3 + r0mod=r0mod+r0(i)*r0(i) + r1mod=r1mod+r1(i)*r1(i) + end do + r0mod=dsqrt(r0mod) + r1mod=dsqrt(r1mod) + do i=1,3 + r0(i)=r0(i)/r0mod + r1(i)=r1(i)/r1mod + end do +! +! Find normal vector and angle of rotation +! + cosphi=r0(1)*r1(1)+r0(2)*r1(2)+r0(3)*r1(3) + if(dabs(cosphi-1.d0).lt.1.d-10) then + phi=0.d0 + tvec(1)=r0(1) + tvec(2)=r0(2) + tvec(3)=r0(3) + goto 10 + else if(dabs(cosphi+1.d0).lt.1.d-10) then + phi=pi + r0xy=dsqrt(r0(1)**2+r0(2)**2) + if(r0xy.gt.1.d-10) then + tvec(1)=-r0(2)/r0xy + tvec(2)=r0(1)/r0xy + tvec(3)=0.d0 + else + tvec(1)=1.d0 + tvec(2)=0.d0 + tvec(3)=0.d0 + end if + goto 10 + end if + phi=dacos(cosphi) +! +! T=(R0xR1)/|R0xR1| +! + tvec(1)=r0(2)*r1(3)-r0(3)*r1(2) + tvec(2)=r0(3)*r1(1)-r0(1)*r1(3) + tvec(3)=r0(1)*r1(2)-r0(2)*r1(1) + tmod=dsqrt(tvec(1)**2+tvec(2)**2+tvec(3)**2) + tvec(1)=tvec(1)/tmod + tvec(2)=tvec(2)/tmod + tvec(3)=tvec(3)/tmod +! + 10 continue +! + if(0.gt.3) then + write(6,'('' r0= '',3f10.4)') r0 + write(6,'('' r1= '',3f10.4)') r1 + write(6,'('' Normal vector: '',3f10.4)') tvec + write(6,'('' Angle in degree:'',f10.4)') phi*180.d0/pi + end if +! + cosp2=dcos(phi/2.d0) + sinp2=dsin(phi/2.d0) + tlm(1)=cosp2 + tlm(2)=sinp2*tvec(1) + tlm(3)=sinp2*tvec(2) + tlm(4)=sinp2*tvec(3) +! + call matr(tlm,lmax,dmat,dmatp) +! +! Set up matrix of rotation for spherical harmonics with l=1 and m=0 +! + call rotmat(d,trd,3,tlm,1,lmax) + dz(1)=dconjg(d(2,3))*sth + dz(2)=dconjg(d(2,2))*sth + dz(3)=dconjg(d(2,1))*sth +! +! dz(1)=d(3,2)*sth +! dz(2)=d(2,2)*sth +! dz(3)=d(1,2)*sth +! + if(0.gt.3) then + write(6,*) ' Rotation matrix for (l,m)=(1,0)' + write(6,'(6d13.5)') dz(1),dz(2),dz(3) + end if +! + return + end diff --git a/src/Misc/mbeqa.f b/src/Misc/mbeqa.f new file mode 100755 index 000000000..7ac156202 --- /dev/null +++ b/src/Misc/mbeqa.f @@ -0,0 +1,16 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine mbeqa(a,b,n) +c ================================================================ +c + integer i,n +c + real*8 a(n) + real*8 b(n) +c + do i=1,n + b(i)=a(i) + enddo +c + return + end diff --git a/src/Misc/mod_midpoint.f b/src/Misc/mod_midpoint.f new file mode 100644 index 000000000..0fc7decfd --- /dev/null +++ b/src/Misc/mod_midpoint.f @@ -0,0 +1,38 @@ + subroutine mod_midpoint(y0,dy0,n,x0,htot,steps,y, + & rn,ecomp,vr,eunit,b,allp1,nexp) + implicit none + + integer n,steps,nexp + real*8 y0(n),dy0(n),x0,htot,y(n) + real*8 rn,vr(*),eunit,b,allp1 + complex*16 ecomp + + real*8 h,h2,y_i(n),y_j(n),dy(n),x,tmp + integer i,j + + h=htot/steps + h2=2.0*h + + x=x0 + do i=1,n + y_j(i)=y0(i) + y_i(i)=y0(i)+h*dy0(i) + end do + do j=2,steps + x=x+h + call dfv_m(x,y_i,dy,n,nexp,rn,ecomp,vr,eunit,b,allp1) + do i=1,n + tmp=y_j(i)+h2*dy(i) + y_j(i)=y_i(i) + y_i(i)=tmp + end do + end do + x=x+h + call dfv_m(x,y_i,dy,n,nexp,rn,ecomp,vr,eunit,b,allp1) + do i=1,n + y(i)=0.5d0*(y_i(i)+y_j(i)+h*dy(i)) + end do + end + + + diff --git a/src/Misc/newder.f b/src/Misc/newder.f new file mode 100755 index 000000000..b8339bafa --- /dev/null +++ b/src/Misc/newder.f @@ -0,0 +1,41 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine newder(f,dy,r,nr) +c ================================================================ +c + implicit real*8 (a-h,o-z) +c + integer i +c + real*8 r(nr),c(4),f(nr),dy(nr) +c + ip1=1 + do i=1,nr-1 + ip1=ip1+1 + + call fit(r,f,nr,i,c) + + dr=r(ip1)-r(i) + c2=c(4)*dr + if(i.gt.1) then +c Use the previous fit and the current fit to form a five-point interpolation +c f5(r)=0.5*(f4(r)+f4p(r))+(f4(r)-f4p(r))*(r-0.5*(rm+rp))/(rp-rm) +c So the derivative is +c df5(r)=0.5*(df4(r)+df4p(r))+(df4(r)-df4p(r))*(r-0.5*(rm+rp))/(rp-rm) +c +(f4(r)-f4p(r))/(rp-rm) +c but f4(r)=f4p(r)=f(i) + dyold=dy(i) + dynew=c(3)-c(1)*c2 + dy(i)=0.5d0*(dy(i)+dynew) + if(i.gt.2.and.i.lt.nr-1) then + dr=r(i+2)-r(i-2) + rj=0.5d0*(r(i+2)+r(i-2)) + dy(i)=dy(i)+(dynew-dyold)*(r(i)-rj)/dr + endif + else + dy(i)=c(3)-c(1)*c2 + endif + dy(i+1)=c(3)+(f(ip1)-f(i)+c(1)-c(2)*dr)*c2 + enddo + return + end diff --git a/src/Misc/newint.f b/src/Misc/newint.f new file mode 100755 index 000000000..90a30fb6f --- /dev/null +++ b/src/Misc/newint.f @@ -0,0 +1,83 @@ + subroutine newint(nr,r,f,g,ip0) +cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc +c +c----- this routine integrates functn f on a 1-d mesh by interpolation +c the partial integrals (up to r(k)) are stored in b(k). the mesh +c is arbitrary +c xgz ornl 1998 +c + implicit real*8 (a-h,o-z) +c + real*8 r(nr),cr(4) + real*8 f(nr),g(nr) + real*8 fr(4),rs(4) + parameter (nj=6,njm1=nj-1) + parameter (dnj=1.d0/nj) + parameter (wt0=2.d0/(3.d0*nj),wt1=3.d0*wt0) +c + ip=2*ip0+1 + pip1=1.d0/dble(ip+1) + pip2=1.d0/dble(ip+2) + g(1)=0.d0 + i1=1 + i2=2 + i3=3 + i4=4 + i0=1 + do i=1,4 + rs(i)=sqrt(r(i)) + fr(i)=f(i) + enddo + ip1=1 + ip2=4 + do i=1,nr-1 + ip1=ip1+1 + + if(i.gt.2.and.ip2.le.nr) then + rs(i4)=sqrt(r(ip2)) + fr(i4)=f(ip2) + endif + call fit(rs,fr,4,i0,cr) +c First integrate a linear frunction going through f(i) and f(ip1) +c A4=fi-A1 + rip1=rs(mod(i0,4)+1) + gj=1.d0 + fj=rip1 + do j=1,ip + gj=gj*rs(i0)+fj + fj=fj*rip1 + enddo + fj=(gj*rs(i0)+fj)*pip2 + gj=gj*pip1 + gr=(fr(i0)-cr(3)*rs(i0))*gj+cr(3)*fj +c Using Simpson's rule. No contribution from j=0 and j=nj. + dr=rip1-rs(i0) + h1=dnj*dr + h2=0.d0 + wt=wt0 + do j=1,njm1 + h2=h2+h1 + wt=wt1-wt + fj=wt + rj=rs(i0)+h2 + do k=1,ip + fj=fj*rj + enddo + gj=h2*(dr-h2) + c1=(cr(3)-cr(2))*h2+cr(1) + c2=cr(4)*gj + gr=gr-fj*c1*c2/(1.d0+c2) + enddo + g(ip1)=g(i)+2.d0*dr*gr + if(i.gt.1.and.ip2.lt.nr) then + ip2=ip2+1 + j=i1 + i1=i2 + i2=i3 + i3=i4 + i4=j + endif + i0=mod(i0,4)+1 + enddo + return + end diff --git a/src/Misc/plglmax.f b/src/Misc/plglmax.f new file mode 100755 index 000000000..493a38469 --- /dev/null +++ b/src/Misc/plglmax.f @@ -0,0 +1,122 @@ + subroutine plglmax(lmax,x,plm) +c **************************************************************** +c Associated Legendre function.................................... +c Calclates all the p(l,m)'s up to lmax........................... +c based on the formulae given in "Numerical Recipes" pages 180-183 +c (Equations 6.6.7, 6.6.8 and 6.6.9............................... +c W. H. Press, B. P. Flannery, S A Teukolsky and W. T. Vetterling. +c Cambridge Univ Press 1986....................................... +c **************************************************************** +c +c Inputs: lmax integer scalar, max l for Plm +c x real*8 scalar, argument of Plm(x) +c Returns: plm real*8 array of ((lmax+1)*(lmax+2)/2), Plm(x) +c + implicit none +c + integer lmax + integer l,ll + integer m,mm + integer i +c + real*8 plm((lmax+1)*(lmax+2)/2) + real*8 x + real*8 pmm + real*8 somx2 + real*8 fact + real*8 zero + real*8 one + real*8 tol + real*8 two +c + parameter (zero=0.0d0) + parameter (one=1.0d0) + parameter (two=2.0d0) + parameter (tol=1.d-12) +c +c ================================================================ + if(lmax.lt.0 .or. abs(x).gt.(one+tol)) then + write(6,'(''plglmax:: bad arguments: lmax='',i5,'' x='', + > d14.6)') lmax,x + stop'plglmax' + endif +! write(6,*) "plglmax: x=",x," lmax=",lmax +c + if((one-abs(x)).le.tol) then +c ------------------------------------------------------------- + call zeroout(plm,(lmax+1)*(lmax+2)/2) +c ------------------------------------------------------------- + if(x.lt.zero) then + do l=0,lmax + i=(l+1)*(l+2)/2-l + plm(i)=one-two*mod(l,2) + enddo + else + do l=0,lmax + i=(l+1)*(l+2)/2-l + plm(i)=one + enddo + endif + return + endif +c +c ================================================================ +c begin calculation of p(l,m)'s................................... + if(lmax.eq.0) then +c ============================================================= +c special case lmax=0.......................................... + plm(1)=one + else +c ============================================================= +c minus sign added to be consistant with Numerical Recipes +c which has (-1)^m factor in plm : July 97 by xgz............. +c ============================================================= + somx2=-sqrt((one-x)*(one+x)) + if(lmax.eq.1) then +c ========================================================== +c special case lmax=1....................................... + plm(1)=one + plm(2)=x + plm(3)=somx2 + else + do m=0,lmax +c ======================================================= +c m m +c calculate the first two P and P +c m m+1 +c ======================================================= + if(m.eq.0) then + plm(1)=one + plm(2)=x + else + pmm=somx2 + fact=one + do i=2,m + fact=fact+two + pmm=pmm*fact*somx2 + enddo + mm=(m+1)*(m+2)/2 + plm(mm)=pmm + if( mm+m+1.le.(lmax+1)*(lmax+2)/2 ) then + plm(mm+m+1)=x*(2*m+1)*pmm + end if + endif +c ======================================================= +c m m +c calculate the rest P to P +c m+2 lmax +c ======================================================= + ll=(m+2)*(m+1)/2 + fact=(two*m+one)*x + do l=m+2,lmax + pmm=(l+m-1)*plm(ll) + fact=fact+two*x + ll=ll+l-1 + plm(ll+l)=( fact*plm(ll) - pmm )/dble(l-m) + enddo + enddo + endif + endif +c + return + end diff --git a/src/Misc/quadrature.cpp b/src/Misc/quadrature.cpp new file mode 100644 index 000000000..85da9db6f --- /dev/null +++ b/src/Misc/quadrature.cpp @@ -0,0 +1,14 @@ + +#include "Real.hpp" +#include "calculateGaussLegendrePoints.hpp" + +extern "C" +{ + void gauss_legendre_points_(double *x1, double *x2, double *x, double *w, int *n); +} + +void gauss_legendre_points_(double *x1, double *x2, double *x, double *w, int *n) +{ + calculateGaussLegendrePoints(x, w, *n, *x1, *x2); +} + diff --git a/src/Misc/rationalFit.hpp b/src/Misc/rationalFit.hpp new file mode 100644 index 000000000..d43327cfe --- /dev/null +++ b/src/Misc/rationalFit.hpp @@ -0,0 +1,313 @@ +#ifndef LSMS_RATIONAL_FIT_HPP +#define LSMS_RATIONAL_FIT_HPP + +#include "Real.hpp" + +/// Fit a function as a rational function with a and quadratic denominator +/// at point \f$ r_i\f$. +/// +/// Define \f$ x=r-r_i \f$ and \f$ \Delta=r_{i+1}-r_i \f$ +/// make the ansatz: +/// \f[ +/// f(x) = f_i - c_0 + c_1 x + \frac{(c_2-c_1) x + c_0}{(1+c_3 x (\Delta - x)} +/// \f] +template +class RationalFit { +public: + T c[4]; + T r0, delta, f0; + const T tol=1.0e-6; + + void setWithStride(T *r, T *f, int i0, int n, int stride) + { + int ip1=i0+1; + r0=r[i0]; + f0=f[i0*stride]; + delta=r[i0+1]-r0; + T dr=r[ip1]-r[i0]; + T drv=f[ip1*stride]-f[i0*stride]; + c[2]=drv/dr; + + if(n==2) + { + c[0]=f[i0*stride]; + c[1]=c[3]=0.0; + return; + } + + int i1=std::min(3,n-1); + if(i0>0) i1=i0-1; + + int i2=std::max(1,n-3); + if(i0+2 0.0) c[1]=-c[1]; + T h1=r[i1]-r[i0]; + T c0=f[i1*stride]-f[i0*stride]; + T c1=c0-c[2]*h1; + T c2=c0-c[1]*h1; + h1=h1*(r[ip1]-r[i1]); + T eqn12= -h1*c2; + T h2=r[i2]-r[i0]; + c0=f[i2*stride]-f[i0*stride]; + T c3=c0-c[2]*h2; + T c4=c0-c[1]*h2; + h2=h2*(r[ip1]-r[i2]); + T eqn22=-h2*c4; + T gj=(c4-c2)*h1*h2; + if(gj==0.0) + { + c[0]=f[i0*stride]; + c[3]=0.0; + } else { + c[0]=(c1*eqn22 - c3*eqn12)/gj; + c[3]=(c1*h2-c3*h1)/gj; + } + + gj=c[3]*dr*dr; + if((gj > -4.0) && (fabs(gj)>1.0e-14) && (gj<1.0e+14)) + { + c[0]=c[0]/c[3]; + } else { + c[0]=f[i0*stride]; + c[3]=0.0; + } + } else { // i1==i2 + T fj=0.5*(f[i0*stride]-f[ip1*stride]); + c[0]=f[i0*stride]-fj; + c[1]=0.0; + T rj=r[i0]+0.5*dr; + if(fabs(r[i1]-rj) > fabs(r[i2]-rj)) i1=i2; + T h1=r[i1]-r[i0]; + T c1=f[i1*stride]-f[i0*stride]-c[2]*h1; + h1=h1*(r[ip1]-r[i1]); + if(f[i1*stride]!=fj) + { + c[3]=-c1/((f[i1*stride]-fj)*h1); + T gj=c[3]*dr*dr; + if((gj > -4.0) && (fabs(gj)>1.0e-14) && (gj<1.0e+14)) + { + c[0]=f[i0*stride]; + c[3]=0.0; + } + } else { + c[0]=f[i0*stride]; + c[3]=0.0; + } + } + } + + void set(T *r, T *f, int i0, int n) + { + int ip1=i0+1; + r0=r[i0]; + f0=f[i0]; + delta=r[i0+1]-r0; + T dr=r[ip1]-r[i0]; + T drv=f[ip1]-f[i0]; + c[2]=drv/dr; + + if(n==2) + { + c[0]=f[i0]; + c[1]=c[3]=0.0; + return; + } + + int i1=std::min(3,n-1); + if(i0>0) i1=i0-1; + + int i2=std::max(1,n-3); + if(i0+2 0.0) c[1]=-c[1]; + T h1=r[i1]-r[i0]; + T c0=f[i1]-f[i0]; + T c1=c0-c[2]*h1; + T c2=c0-c[1]*h1; + h1=h1*(r[ip1]-r[i1]); + T eqn12= -h1*c2; + T h2=r[i2]-r[i0]; + c0=f[i2]-f[i0]; + T c3=c0-c[2]*h2; + T c4=c0-c[1]*h2; + h2=h2*(r[ip1]-r[i2]); + T eqn22=-h2*c4; + T gj=(c4-c2)*h1*h2; + if(gj==0.0) + { + c[0]=f[i0]; + c[3]=0.0; + } else { + c[0]=(c1*eqn22 - c3*eqn12)/gj; + c[3]=(c1*h2-c3*h1)/gj; + } + + gj=c[3]*dr*dr; + if((gj > -4.0) && (fabs(gj)>1.0e-14) && (gj<1.0e+14)) + { + c[0]=c[0]/c[3]; + } else { + c[0]=f[i0]; + c[3]=0.0; + } + } else { // i1==i2 + T fj=0.5*(f[i0]-f[ip1]); + c[0]=f[i0]-fj; + c[1]=0.0; + T rj=r[i0]+0.5*dr; + if(fabs(r[i1]-rj) > fabs(r[i2]-rj)) i1=i2; + T h1=r[i1]-r[i0]; + T c1=f[i1]-f[i0]-c[2]*h1; + h1=h1*(r[ip1]-r[i1]); + if(f[i1]!=fj) + { + c[3]=-c1/((f[i1]-fj)*h1); + T gj=c[3]*dr*dr; + if((gj > -4.0) && (fabs(gj)>1.0e-14) && (gj<1.0e+14)) + { + c[0]=f[i0]; + c[3]=0.0; + } + } else { + c[0]=f[i0]; + c[3]=0.0; + } + } + } + + void set(std::vector &r, std::vector &f, int i0) + { + set(&r[0], &f[0], i0, f.size()); + } +// this allows us to provide a function to be applied to f +// fn: T, T -> T; fn(r,f) + template + void set(T *r, T *f, Func fn, int i0, int n) + { + std::vector ff; + ff.resize(n); + for(int i=0; i + inline void set(std::vector &r, std::vector &f, Func fn, int i0) + { + set(&r[0], &f[0], fn, i0, f.size()); + } + + // calculate the coefficients of the rational fit for function fn(r[i]) at i0 + template + void set(std::vector &r, Func fn, int i0) + { + std::vector f; + f.resize(r.size()); + for(int i=0; ib*b) // ac>b^2 + { + i2 = ((m/(2.0*cc))*std::log(std::fabs(1.0+2.0*b*x2+cc*x2*x2)) + + ((n*cc-m*b)/(cc*std::sqrt(cc-b*b)))*std::atan((cc*x2+b)/std::sqrt(cc-b*b))) + - ((m/(2.0*cc))*std::log(std::fabs(1.0+2.0*b*x1+cc*x1*x1)) + + ((n*cc-m*b)/(cc*std::sqrt(cc-b*b)))*std::atan((cc*x1+b)/std::sqrt(cc-b*b))); + } else { // ac +T interpolate(std::vector &r, std::vector &f, T x) +{ +// find index i such that r[i]x) return f[0]; + int n=r.size(); + int i0=0, i1=n; + while(i1-i0>1) + { + int d=i0+(i1-i0)/2; + if(r[d]>x) i1=d; else i0=d; + } + RationalFit fit; + fit.set(r,f,i0); + return fit(x); +} + +template +void calculateDerivative(T *r, T *f, T *df, size_t n) +{ + RationalFit fit; + for(size_t i=0; i +void calculateDerivative(T *r, T *f, T *df, size_t n, size_t strideF, size_t strideDf) +{ + RationalFit fit; + for(size_t i=0; i +#include +#include + +#include "readLastLine.hpp" + + +// return the size of the file. This does not change the current file position +long getFileSize(FILE *fp) +{ + long fsize = 0; + long fpos=ftell(fp); + + fseek(fp,0,SEEK_END); + fsize = ftell(fp); + fseek(fp,fpos,SEEK_SET);//reset stream position!! + + return fsize; +} + +// read the last line in the file, returning the start in the buffer +int readLastLine(FILE *fp, char *buffer, int bufferLength) +{ + int i; + + int size=bufferLength; + long fileSize= getFileSize(fp); + if(fileSize=0 && buffer[i] != '\n') + --i; + ++i; + return i; +} + +int readNextIterationNumber(const char *fname) +{ + char buffer[256]; + int lastIterationNumber,pos; + + FILE *fp=fopen(fname,"r"); + if(fp==NULL) return 0; + pos=readLastLine(fp,buffer,255); + fclose(fp); + // printf("last line: '%s'\n",&buffer[pos]); exit(0); + sscanf(&buffer[pos],"%d",&lastIterationNumber); + return lastIterationNumber+1; +} diff --git a/src/Misc/readLastLine.hpp b/src/Misc/readLastLine.hpp new file mode 100644 index 000000000..c2b9948d3 --- /dev/null +++ b/src/Misc/readLastLine.hpp @@ -0,0 +1,9 @@ +#ifndef READLASTLINE_HPP +#define READLASTLINE_HPP + + +long getFileSize(FILE *fp); +int readLastLine(FILE *fp, char *buffer, int bufferLength); +int readNextIterationNumber(const char *fname); + +#endif diff --git a/src/Misc/ricbes.f b/src/Misc/ricbes.f new file mode 100755 index 000000000..688127e47 --- /dev/null +++ b/src/Misc/ricbes.f @@ -0,0 +1,85 @@ +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine ricbes(nn,y,bj,bn,dj,dn) +c ================================================================ +c +c computes spherical bessel functions j and n and its derivatives +c + implicit none +c +c + integer nn,l,k,i,nm +c + real*8 flm,fll +c + complex*16 a,aj,x,y + complex*16 as,ac,xinv,x2 +c + complex*16 bj(nn),bn(nn),dj(nn),dn(nn) +c +c + x=y +c + if (abs(x).eq.0.0d0) then + write(*,*) ' x equals to zero' + call fstop('ricbes') + endif +c + as = sin(x) + ac = cos(x) + bj(1) = as + dj(1) = ac + dn(1) = exp((0.d0,1.d0)*x) + bn(1) = (0.d0,-1.d0)*dn(1) + if(nn.eq.1) return + xinv = 1.d0/x +c Forward recursion for small L +1 k=(int(0.75*(abs(dreal(x))+abs(dimag(x))))+2)/4+1 + if(k.gt.1) then + if (k.gt.nn) k=nn + bj(2)=bj(1)*xinv-ac + do l = 3, k + flm = l+l-3 + bj(l) = flm*bj(l-1)*xinv-bj(l-2) + enddo + endif + + if(k.lt.nn) then +c Backward recursion from very large L down to L=k + a=bj(k) + nm=nn*4 + aj=2*nm+1 + x2=x*x + do l = nm, nn+2, -1 + aj=(2*l-1)-x2/aj + enddo + bj(nn)=(2*nn+1)*aj*xinv-x + bj(nn-1)=(2*nn-1)*bj(nn)*xinv-aj + do l = nn-1, k+1, -1 + bj(l-1)=(2*l-1)*bj(l)*xinv-bj(l+1) + enddo +c scale to give correct bj(k) + aj=a/bj(k) + do l = k+1, nn + bj(l)=aj*bj(l) + enddo + bj(k)=a + endif + +c Find bn using forward recursion + bn(2) = bn(1)*xinv - dn(1) + dj(2) = bj(1)-bj(2)*xinv + dn(2) = bn(1)-bn(2)*xinv +c +c ================================================================ +c recursion relations +c ================================================================ + do l=3,nn + flm = l+l-3 + bn(l) = flm*bn(l-1)*xinv-bn(l-2) + fll = l-1 + dj(l) = bj(l-1)-fll*bj(l)*xinv + dn(l) = bn(l-1)-fll*bn(l)*xinv + enddo +c + return + end diff --git a/src/Misc/rotmat.f b/src/Misc/rotmat.f new file mode 100755 index 000000000..3a846d25b --- /dev/null +++ b/src/Misc/rotmat.f @@ -0,0 +1,65 @@ + subroutine rotmat (d,tr,ij0,lm,ig,lmax) +! rotation matrix for spherical harmonics with angular momentum +! number j +! input: ij0 = 2j+1 (j may be integer or half-integer) +! lm ... lm(1)=cos(phi/2) +! lm(2..4)=sin(phi/2)*n(x..z), where n=normalized +! direction vector +! ig ... >0 proper rotations, <0 improper rotations +! output: d ... rotation matrix in condon-shortley convention +! tr ... trace of d +! + implicit real*8 (a-h,o-z) +! include '../param.h' +! +! parameter (jdim=2*lmaxp+2) +! + complex*16 d(2*lmax+2,2*lmax+2),f1,f2,f3,f4,fk,c + real*8 lm(4),fac(2*lmax+4) + integer jdim + + jdim=2*lmax+2 +! + fac(1)=1.d0 + do 10 i=1,jdim+1 + 10 fac(i+1)=fac(i)*i + f1=dcmplx(lm(1),-lm(4)) + f2=dconjg(f1) + f3=dcmplx(lm(3),-lm(2)) + f4=dconjg(f3) + ij=iabs(ij0) + do 60 in=1,ij + do 60 im=1,ij + km=max0(1,in-im+1) + kx=min0(ij-im+1,in) + d(in,im)=(0.d0,0.d0) + do k=km,kx + k0=k-1 + fk=(1.d0,0.d0) + if (ij-im-k0.eq.0) go to 20 + fk=f1**(ij-im-k0) + 20 if (in-k.eq.0) go to 30 + fk=fk*f2**(in-k) + 30 if (k0.eq.0) go to 40 + if (lm(2).eq.0.d0) fk=fk*lm(3)**k0 + if (lm(2).ne.0.d0) fk=fk*f3**k0 + 40 if (im-in+k0.eq.0) go to 50 + if (lm(2).eq.0.d0) fk=fk*(-lm(3))**(im-in+k0) + if (lm(2).ne.0.d0) fk=fk*(-f4)**(im-in+k0) + 50 d(in,im)=d(in,im)+fk/(fac(ij-im-k0+1)*fac(in-k0)*fac(k)* + & fac(im-in+k)) + enddo + d(in,im)=d(in,im)*dsqrt(fac(ij-in+1)*fac(in)*fac(ij-im+1)* + & fac(im)) + if (mod(ij,4).eq.3.and.isign(1,ig).ne.1) d(in,im)=-d(in,im) + if (ij0.lt.0.and.isign(1,ig).ne.1) d(in,im)=-d(in,im) + if (dabs(dreal(d(in,im))).lt.1.d-14) d(in,im)=dcmplx(0.d0, + & dimag(d(in,im))) + 60 if (dabs(dimag(d(in,im))).lt.1.d-14) d(in,im)=dreal(d(in,im)) + c=(0.d0,0.d0) + do 70 i=1,ij + 70 c=c+d(i,i) + if (dabs(dimag(c)).gt.1.d-10) stop 10 + tr=c + return + end diff --git a/src/Misc/rsimp.f b/src/Misc/rsimp.f new file mode 100755 index 000000000..8be2991d8 --- /dev/null +++ b/src/Misc/rsimp.f @@ -0,0 +1,28 @@ + function rsimp(f,r,irn,dx) +c=================== +c radial integration via simpson +c + implicit real*8 (a-h,o-z) +c + dimension f(*),r(*) +c + isw=0 + rsimp=0.d0 + if(irn.le.2) return + if(irn/2*2.eq.irn) isw=1 + np=irn-isw + s=f(1)*r(1)+f(np)*r(np) + nl=np-1 + do 5 i=2,nl,2 + 5 s=s+4.d0*f(i)*r(i) + nl=nl-1 + if(nl.lt.3) goto 15 + do 10 i=3,nl,2 + 10 s=s+2.d0*f(i)*r(i) + 15 s=s*dx/3.d0 + if(isw.eq.1) goto 30 + rsimp=s + return + 30 rsimp=s+(f(irn)*r(irn)+f(irn-1)*r(irn-1))*0.5d0*dx + return + end diff --git a/src/Misc/rwave.f b/src/Misc/rwave.f new file mode 100755 index 000000000..e8284ae9c --- /dev/null +++ b/src/Misc/rwave.f @@ -0,0 +1,242 @@ + subroutine rwave(srelflg,irregflg,rr,ri,drr,dri,matom,l,energy + * ,pot,nr,rad,potshift,jmt,kmax,emach,eunit,ws,wsdim,r_sph) +c + implicit none +c +c---- dimensioning: +c + integer kmax ! largest grid point +c +c---- mode flags: +c + logical srelflg ! scalar relativistic if true + logical irregflg ! find irregular solution if true +c +c---- output: +c + complex*16 rr(kmax) ! return regular solution + complex*16 ri(kmax) ! return irregular solution + complex*16 drr(kmax) ! return derivativ of regular solution + complex*16 dri(kmax) ! return derivativ of irregular solution + complex*16 rrsph ! rr at r_sph + complex*16 drrsph ! drr at r_sph + complex*16 risph ! rr at r_sph + complex*16 drisph ! drr at r_sph + complex*16 matom ! inverse of t(l) + complex*16 dummy ! store derivatives + real*8 work(2*kmax) ! store derivatives +c +c---- input: +c + integer l ! angular momentum number + complex*16 energy ! energy + integer nr + real*8 pot(nr,kmax) ! potential + real*8 rad(kmax) ! radial grid + complex*16 potshift ! potential shift (may be complex) + integer jmt ! + real*8 emach ! machine precision + real*8 eunit ! 1=Ryd, 2=Hartree + real*8 r_sph ! radius of spherical potential +c +! -- replace commonblock /dfbits/ in initwave, dfv: + real*8 b,allp1 + +c +c---- work space: +c + integer wsdim + complex*16 ws(0:(wsdim/2-1),2) ! workspace for bessel functions +c +c---- local variables: +c + complex*16 einside,ka,kar,bj,dbj,cnorm,tatoml,dfi,fi, + * bh1,dbh1,eiz,cdum + integer nv + parameter (nv=4) + real*8 y(nv),dy(nv),yp(nv),al,r, + * rfrom,rto,htry,hdid,hnext + real*8 escale + integer i,j,jm,jp,idid + integer istart +c ================================================== +c dimensioned to stop run time array bounds problems +c ================================================== + integer isymm(1) + real*8 vso(1,1) +c + external dfv +c +c + if(wsdim .lt. (max(l+1,2) * 2))then + write(6,*) 'ERROR: wsdim=',wsdim,' < minimum =', + * (max(l+1,2) * 2) + stop 'stoped in rwave (see unit 6)' + endif +c aplying a shift to the potential is like shifting the energy +c inside the sphere + einside=energy+potshift +c energy outisde sphere (used for bessel functions) is not shifted + ka=sqrt(eunit*energy+(0.0d0,1.0d0)*emach) +c + escale=0.5d0*eunit + al=dfloat(l) + if(rad(1).eq.0.d0) then + rr(1)=0.0d0 + drr(1)=0.0d0 + if(l.eq.0) drr(1)=1.0d0 + istart=2 + else + istart=1 + endif + call initwave(srelflg,rad,pot(1,1),nr,nv,istart,l,einside, + & y,escale,.false.,b,allp1) +c + jp=istart + call dfv(rad(istart),y,dy,nv,nr,rad(jp),einside,pot(1,jp), + & vso,1,isymm,eunit,b,allp1) + rr(istart) =dcmplx(y(1),y(2)) + drr(istart)=dcmplx(dy(1),dy(2)) +c +c----- integration proceeds out to grid point jmt, let routine decide +c where to do intermediate calculations +c + do j=istart+1,jmt + yp(1)=y(1) + yp(2)=y(2) + yp(3)=y(3) + yp(4)=y(4) + jm=j-1 + jp=j-1 + rfrom=rad(jm) + rto=rad(j) + htry=rto-rfrom + call bulirsch_stoer_integrator(rfrom, rto, y, dy, nv, + & rad(jp),einside,pot(1,jp),eunit,b,allp1,nv) + rr(j) =dcmplx(y(1),y(2)) + drr(j)=dcmplx(dy(1),dy(2)) + enddo +c +c----- calculate the t-matrix and normalisation +c +c----- dfi is the logarithmic deriavtive at the sphere radius +c fi is the wavefunction at the sphere radius +c + dfi=drr(jmt)/rr(jmt) !-1.0d0/rad(jmt) + fi=rr(jmt)/rad(jmt) + kar=ka*rad(jmt) + call cinterp(rad,drr,jmt,r_sph,drrsph,dummy,work) + call cinterp(rad,rr,jmt,r_sph,rrsph,dummy,work) + dfi=drrsph/rrsph !-1.0d0/rad(jmt) + fi=rrsph/r_sph + kar=ka*r_sph +c +c----- match phi to (jl + tl*hl) +c +c------ bj=ws(l,1), bh=ws(l,2)*eiz/kar, eiz=exp(i*kar) +c + call zsphbesjh(max(l,1),kar,ws(0,1),ws(0,2),eiz,1) +c +c------ in subsequent code will define bj=jl, bh1=h1*r +c + bj=ws(l,1) + bh1=ws(l,2)*eiz/ka +c +c------ dbj=djl+jl/r, dbh1=r*dh1+h1, note that dfi above is really +c drr/rr all is now consistent +c + if(l.eq.0) then + dbj=-ka*(ws(1,1)-ws(0,1)/kar) + dbh1=-(ws(1,2)-ws(0,2)/kar)*eiz + else + cdum=al/kar + dbj=ka*(ws(l-1,1)-ws(l,1)*cdum) + dbh1=(ws(l-1,2)-ws(l,2)*cdum)*eiz + endif +c + cdum=-(bj*dfi-dbj)/(bh1*dfi-dbh1) + cnorm=(bj+cdum*bh1)/fi +c tatoml=rad(jmt)*cdum + tatoml=r_sph*cdum + matom=(0.d0,-1.0d0)*ka/tatoml +c + do j=1,jmt + rr(j) =cnorm*rr(j) + drr(j)=cnorm*drr(j) + enddo +c +c------ only find irregular solution if required to +c + if(irregflg) then +c + r=r_sph +c r=rad(jmt) + kar=ka*r +c bh1 is missing eiz/(ka*r) + call zsphbesjh(max(l,1),kar,ws(0,1),ws(0,2),eiz,1) + bh1=ws(l,2)*eiz/ka + if(l.eq.0) then + dbh1=-ws(1,2)*eiz + else + cdum=(l+1)/kar + dbh1=(ws(l-1,2)-ws(l,2)*cdum)*eiz + endif + y(1)=dreal(bh1) + y(2)=dimag(bh1) + y(3)=dreal(dbh1) + y(4)=dimag(dbh1) + jp=jmt +c call dfv(r,y,dy,nv,nr,rad(jp),einside,pot(1,jp),vso,1,isymm, +c & eunit) + call dfv(r,y,dy,nv,nr,r_sph,einside,pot(1,jp),vso,1,isymm, + & eunit,b,allp1) + ri(jmt) =dcmplx(y(1),y(2)) + dri(jmt)=dcmplx(dy(1),dy(2)) + if(rad(1).eq.0.d0) then + ri(1) =0.0d0 + dri(1)=0.0d0 + endif +c +c----- start the inwards integration of irregular solution +c + do j=jmt-1,istart,-1 + yp(1)=y(1) + yp(2)=y(2) + yp(3)=y(3) + yp(4)=y(4) + jm=j + jp=j + rfrom=rad(j+1) + if(j+1.eq.jmt)rfrom=r_sph + rto=rad(jm) + htry=rto-rfrom + call bulirsch_stoer_integrator(rfrom, rto, y, dy, nv, + & rad(jp),einside,pot(1,jp),eunit,b,allp1,nv) + ri(j) =dcmplx(y(1),y(2)) + dri(j)=dcmplx(dy(1),dy(2)) + enddo +c + endif !irregflg +c + do i=jmt,kmax +c do i=jmt+1,kmax + kar=rad(i)*ka + call zsphbesjh(max(l,1),kar,ws(0,1),ws(0,2),eiz,1) + bj=ws(l,1) + bh1=ws(l,2)*eiz/ka + if(l.eq.0) then + dbj=-ka*(ws(1,1)-ws(0,1)/kar) + dbh1=-(ws(1,2)-ws(0,2)/kar)*eiz + else + cdum=al/kar + dbj=ka*(ws(l-1,1)-ws(l,1)*cdum) + dbh1=(ws(l-1,2)-ws(l,2)*cdum)*eiz + endif + rr(i)=bj*rad(i)+bh1*tatoml + ri(i)=bh1 + drr(i)=dbj*rad(i)+dbh1*tatoml + dri(i)=dbh1 + enddo +c + return + end diff --git a/src/Misc/rzextr.f b/src/Misc/rzextr.f new file mode 100755 index 000000000..90a7e35de --- /dev/null +++ b/src/Misc/rzextr.f @@ -0,0 +1,48 @@ + subroutine rzextr (iest,xest,yest,yz,dy,nv,nuse,x,d) +! implicit none + implicit real*8 (a-h,o-z) + integer iest,nv,nuse,imax,nmax,ncol + integer j,k + real*8 xest,yest,yz,dy + parameter (imax=11,nmax=16,ncol=7) + dimension x(imax),yest(nv),yz(nv),dy(nv),d(nmax,ncol),fx(ncol) +! saves: x,d +! save + x(iest)=xest + if(iest.eq.1)then + do j=1,nv + yz(j)=yest(j) + d(j,1)=yest(j) + dy(j)=yest(j) + enddo + else + m1=min(iest,nuse) + s1xest=1.0d0/xest + do k=1,m1-1 + fx(k+1)=x(iest-k)*s1xest + enddo + do j=1,nv + yy=yest(j) + v=d(j,1) + c=yy + d(j,1)=yy + do k=2,m1 + b1=fx(k)*v + b=b1-c + if(b.ne.0.0d0)then + b=(c-v)/b + ddy=c*b + c=b1*b + else + ddy=v + endif + if(k.ne.m1) v=d(j,k) + d(j,k)=ddy + yy=yy+ddy + enddo + dy(j)=ddy + yz(j)=yy + enddo + endif + return + end diff --git a/src/Misc/spin_trafo.f b/src/Misc/spin_trafo.f new file mode 100755 index 000000000..496b34003 --- /dev/null +++ b/src/Misc/spin_trafo.f @@ -0,0 +1,59 @@ + subroutine spin_trafo(evec,u,ud) +c +c ================================================================ +c set up the spin space stransformation matrix.................... +c +c u(1) = cos(theta/2) and u(3) = sin(theta/2)*exp(-i*phi) +c u(4) = u(1) and u(2) = - conjg(u(3)) +c +c + +c ud = u +c -- - +c +c Matrix in global frame: G; Matrix in local frame: L +c - - +c + +c L = u * G * u +c - - - - +c ================================================================ +c + implicit none +c + real*8 evec(3) + real*8 tol + real*8 half + real*8 one +c + complex*16 u(4) + complex*16 ud(4) +c + complex*16 czero + complex*16 cone + complex*16 sqrtm1 +c + parameter (half=0.5d0) + parameter (one=1.0d0) + parameter (tol=1.0d-08) + parameter (czero=(0.0d0,0.0d0)) + parameter (cone=(1.0d0,0.0d0)) + parameter (sqrtm1=(0.0d0,1.0d0)) +c +c ================================================================ +c + u(1) = sqrt(half*(one+evec(3))) + if( abs(u(1)) .lt. tol ) then + u(1) = czero + u(2) = cone + u(3) = cone + else + u(2) =-half*(evec(1)+sqrtm1*evec(2))/u(1) + u(3) = half*(evec(1)-sqrtm1*evec(2))/u(1) + endif + u(4)=u(1) + ud(1)=conjg(u(1)) + ud(2)=conjg(u(3)) + ud(3)=conjg(u(2)) + ud(4)=conjg(u(4)) +c ================================================================ + return + end diff --git a/src/Misc/stop_with_backtrace.cpp b/src/Misc/stop_with_backtrace.cpp new file mode 100644 index 000000000..c3b5ae12f --- /dev/null +++ b/src/Misc/stop_with_backtrace.cpp @@ -0,0 +1,38 @@ +#ifdef HAS_BACKTRACE +#include +#endif +#include +#include + +extern "C" +{ +#ifdef HAS_BACKTRACE +void stop_with_backtrace_(const char *name, int len) +{ + void *array[20]; + size_t num; + char **strings; + + printf("STOP called in %.*s\n",len,name); + + num = backtrace(array,10); + strings = backtrace_symbols(array,num); + + printf("Obtained %zd stack frames.\n",num); + for(size_t i=0; i > &vr, Complex energy, + int iie, + // std::vector &solution, + Matrix &tau00_l); + +extern "C" +{ + void makegij_(int *lmaxi,int *kkri,int *lmaxj,int *kkrj, + int *lmax,int *kkrsz,int *ndlj,int *ndlm, + Complex *prel,double *rij,double *sinmp,double *cosmp, + double *clm,double *plm,double *cgnt,int *lmax_cg,int *lofk,int *mofk, + Complex *ilp1,Complex *illp, + Complex *hfn,Complex *dlm,Complex *gij, + double *pi4,int *iprint,char *istop,int len_sitop); + + void setgij_(Complex *gij,Complex *bgij,int *kkr1,int *kkr1_ns,int *kkr2,int *kkr2_ns, + int *n_spin_cant,int *nrel_rel,Complex *psq,Complex *energy); + + void block_inv_(Complex *a, Complex *vecs, int *lda, int *na, int *mp, int *ipvt, int *blk_sz, int *nblk, Complex *delta, + int *iwork, double *rwork, Complex *work1, int *alg, + int *idcol, int *iprint); + + void tau_inv_postproc_nrel_(int *kkrs_ns,int *n_spin_cant, + Complex *wbig,Complex *delta, Complex *tmat,int *ipvt,Complex *tau00, + Complex *ubr, Complex *ubrd, + Complex *tau00_tmp); + + void tau_inv_postproc_rel_(int *kkrs_ns, + Complex *wbig,Complex *delta, Complex *tmat,int *ipvt,Complex *tau00, + Complex *dmatp, Complex *dmat, + Complex *tau00_tmp); +} +#endif diff --git a/src/MultipleScattering/block_inverse.cpp b/src/MultipleScattering/block_inverse.cpp new file mode 100644 index 000000000..cd0f553e2 --- /dev/null +++ b/src/MultipleScattering/block_inverse.cpp @@ -0,0 +1,106 @@ +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" + +#include "Accelerator/DeviceStorage.hpp" + +extern "C" { + void zblock_lu_(Complex *a, int *lda, int *blk_sz, int *nblk, int *ipvt, int *mp, int *idcol, int *k); + void zblock_lu_cuda_c_(Complex *a, int *lda, int *blk_sz, int *nblk, int *ipvt, int *mp, int *idcol, int *k); +} + +int zblock_lu_cpp(Matrix &a, int *blk_sz, int nblk, int *ipvt, int *idcol); +int zblock_lu_cublas(cublasHandle_t handle, Matrix &a, int *blk_sz, int nblk, int *ipvt, int *idcol); + +void block_inverse(Matrix &a, int *blk_sz, int nblk, Matrix &delta, int *ipvt, int *idcol) +{ + int k; + + for(int i=0; i '' Sec'')') blk_sz(2),time + call flush(6) + endif + + return + end +*/ diff --git a/src/MultipleScattering/block_inverse_fortran.f b/src/MultipleScattering/block_inverse_fortran.f new file mode 100755 index 000000000..380fa2881 --- /dev/null +++ b/src/MultipleScattering/block_inverse_fortran.f @@ -0,0 +1,148 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine block_inv(a,vecs,lda,na,mp,ipvt,blk_sz,nblk,delta, + & iwork,rwork,work1,alg, + & idcol,iprint) +! & idcol,sym_ops,iprint) +c ================================================================ +c +c **************************************************************** +c PURPOSE: inverse the first block of a complex matrix: a +c (a^{-1})_00=(a_00-delta)^{-1} +c +c INPUT: a, the complex matrix to be inverted +c vecs, the working space +c alg, the algorithm of the invertion +c = 1, UL method +c = 2, LU method +c = 3,4,5, W.A.S. method +c +c OUTPUT: a, contains the first block of the inverted +c matrix +c delta +c **************************************************************** + + implicit none + character*3 alg_name + integer lda,na,mp,nblk + integer ipvt(mp),blk_sz(nblk) + integer i,j,k,ioff + integer alg + integer iqmr + integer idcol(blk_sz(1)) + integer iprint + integer nlim +c parameter (nlim=80) + parameter (nlim=80) + + real*8 time,time_direct,time_qmr,clock_time + real*8 tol + parameter (tol=1.d-8) +c complex*16 sym_ops(blk_sz(1),blk_sz(1),blk_sz(1)-1) +! complex*16 sym_ops(blk_sz(1),blk_sz(1),(blk_sz(1)-1)/2) + complex*16 a(lda,na),vecs(na-blk_sz(1),blk_sz(1)*6+6) + complex*16 work1(blk_sz(1)) + real*8 rwork(blk_sz(1)) + integer iwork(blk_sz(1)) + complex*16 delta(blk_sz(1),blk_sz(1)) + complex*16 czero,cone,cmone + parameter (czero=(0.d0,0.d0)) + parameter (cone=(1.d0,0.d0)) + parameter (cmone=(-1.d0,0.d0)) +c +c ================================================================ +c Invert the KKR-Matrix using the method defined by 'alg'......... +c If using QMR and either the method fails or it takes longer than +c the direct method (LU or UL) then the routine uses LU thereafter +c ================================================================ + time = clock_time() + do i=1,blk_sz(1) + do j=1,blk_sz(1) + a(j,i)=czero + enddo + enddo + + + if(alg.le.2.or.alg.ge.10) then +c ============================================================= +c Use the LU algorithm........................................ +c ============================================================= + call zblock_lu(a,lda,blk_sz,nblk,ipvt,mp,idcol,k) +c ------------------------------------------------------------- + else if(alg.ge.3 .and. alg.le.6) then +c ============================================================= +c Use the QMR algorithm........................................ +c ============================================================= + call zblock_lu(a,lda,blk_sz,-nblk,ipvt,mp,idcol,k) +c ------------------------------------------------------------- + call wasinv(na-blk_sz(1),k,a(blk_sz(1)+1,blk_sz(1)+1),lda, + & a(blk_sz(1)+1,blk_sz(1)-k+1),lda,vecs, + > nlim,vecs(1,blk_sz(1)*6+1), + & rwork,work1,iwork,tol,alg-2,iqmr) +c ============================================================= +c If qmr algorithm fails then redo the current energy: Use LU.. +c ============================================================= + if( iqmr .gt. 0 ) then + call zblock_lu(a,lda,blk_sz,nblk,ipvt,mp,idcol,k) + else + call zgemm('n','n',blk_sz(1),k,na-blk_sz(1),cmone, + > a(1,blk_sz(1)+1),lda, + & a(blk_sz(1)+1,blk_sz(1)-k+1),lda,czero,a,lda) + endif + else + write(6,'('' BLOCK_INV:: incorrect alg value:'',1i5)')alg + call fstop('block_inv') + endif + + do i=1,blk_sz(1) + do j=1,blk_sz(1) + delta(j,i)=-a(j,i) + enddo + enddo +! write(*,*) delta(1,1),delta(blk_sz(1)/2+1,blk_sz(1)/2+1) +! if(idcol(1).eq.0) then +! if(iprint.ge.0) then +! write(6,'(''block_inv:: looking for sym'')') +! endif +! call find_sym(delta,sym_ops,blk_sz(1),idcol,ipvt,iprint) +! else +! k=0 +! ioff=0 +! do i=1,blk_sz(1) +! if(idcol(i).eq.i) then +! k=k+1 +! do j=1,blk_sz(1) +! delta(j,i)=-a(j,k) +! enddo +! else +! j=idcol(i) +! ioff=ioff+1 +! call zgemv('n',blk_sz(1),blk_sz(1),cone,sym_ops(1,1,ioff), +! & blk_sz(1),delta(1,j),1,czero,delta(1,i),1) +! endif +! enddo +! endif + + time = clock_time() - time + if(alg.le.2.or.alg.ge.10) then + alg_name = ' LU' + if(time.gt.0.d0) time_direct = time + else + if(alg.eq.6) then + alg_name = 'MAR' + if(time.gt.0.d0) time_qmr = time + else + alg_name = 'QMR' + if(time.gt.0.d0) time_qmr = time + endif + endif + + if( iprint .ge. 1 ) then + write(6,'(''BLOCK_INV:: Using '',a3,'': Block size='', + & i4,'', Time='',f10.3, + > '' Sec'')') alg_name,blk_sz(2),time + call flush(6) + endif + + return + end diff --git a/src/MultipleScattering/calculateTauMatrix.cpp b/src/MultipleScattering/calculateTauMatrix.cpp new file mode 100644 index 000000000..d4e4afefd --- /dev/null +++ b/src/MultipleScattering/calculateTauMatrix.cpp @@ -0,0 +1,574 @@ + +#include "Real.hpp" +#include "Complex.hpp" +#include +#include +#include +#include "PhysicalConstants.hpp" + +#include "lapack.h" + +// #include "Communication/LSMSCommunication.hpp" +#include "SingleSite/SingleSiteScattering.hpp" +#include "MultipleScattering.hpp" +#include "Misc/Indices.hpp" +#include "Misc/Coeficients.hpp" + +#ifdef _OPENMP +#include +#else +inline int omp_get_max_threads() {return 1;} +inline int omp_get_num_threads() {return 1;} +inline int omp_get_thread_num() {return 0;} +#endif + +#ifdef USE_NVTX +#include +#endif + +#if defined(ACCELERATOR_CULA) || defined(ACCELERATOR_LIBSCI) || defined(ACCELERATOR_CUDA_C) +#include +#include "Accelerator/DeviceStorage.hpp" +// extern void * deviceStorage; +extern DeviceStorage *deviceStorage; +#endif +#include + +#ifdef BUILDKKRMATRIX_GPU +#include "Accelerator/buildKKRMatrix_gpu.hpp" +extern std::vector deviceConstants; +void clearM00(Complex *m, int blk_sz, int lda, cudaStream_t s); +#endif +// extern std::vector deviceConstants; + +//#endif + +extern "C" +{ + void write_kkrmat_(Complex *a,int *n,int *lda,Complex *e); +}; + +// void buildKKRMatrix_gpu(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, Complex energy, Complex prel, int iie, Matrix &m); +void block_inverse(Matrix &a, int *blk_sz, int nblk, Matrix &delta, int *ipvt, int *idcol); + +// #define SYNTHETIC_MATRIX +// #define WRITE_GIJ + +void buildKKRMatrix(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, Complex energy, Complex prel, int iie, Matrix &m) +{ +#ifdef USE_NVTX + nvtxEventAttributes_t eventAttrib = {0}; + eventAttrib.version = NVTX_VERSION; + eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE; + eventAttrib.colorType = NVTX_COLOR_ARGB; + eventAttrib.color = 0x00ff0000; + eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII; + eventAttrib.message.ascii = "buildKKRMatrix"; + nvtxRangePushEx(&eventAttrib); +#endif + Real rij[3]; + + int lmax=lsms.maxlmax; + int kkrsz=(lmax+1)*(lmax+1); + int kkrsz_ns=kkrsz*lsms.n_spin_cant; + int nrmat_ns=lsms.n_spin_cant*atom.nrmat; + int nrst,ncst; + + Complex *gij = new Complex[kkrsz*kkrsz]; + Real *sinmp = new Real[2*lmax+1]; + Real *cosmp = new Real[2*lmax+1]; + Real *plm = new Real[lsms.angularMomentumIndices.ndlm]; + Complex *hfn = new Complex[2*lmax+1]; + Complex *dlm = new Complex[lsms.angularMomentumIndices.ndlj]; + Complex *bgij = new Complex[4*kkrsz*kkrsz]; + Complex *tmat_n = new Complex[atom.kkrsz*atom.kkrsz*4]; + + const Complex cmone=-1.0; + const Complex czero=0.0; + + Real pi4=4.0*2.0*std::asin(1.0); + + for(int i=0; i=1) + { + printf("first t Matrix:\n"); + for(int i=0; i Gij_full(nrmat_ns,nrmat_ns); + for(int i=0; i=0) + { + FILE *f1=fopen("kkrmat.out","w"); + FILE *f2=fopen("kkrmat.pattern","w"); + for(int i=0; i &m,int iie) +#else +void calculateTauMatrix(LSMSSystemParameters &lsms, LocalTypeInfo &local, AtomData &atom, Complex energy, Complex prel, + Complex *tau00_l,Matrix &m,int iie, + DeviceConstants &d_const, DeviceStorage *d_store) + // void *d_const, void *d_store) +#endif +{ +#ifdef USE_NVTX + nvtxEventAttributes_t eventAttrib = {0}; + eventAttrib.version = NVTX_VERSION; + eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE; + eventAttrib.colorType = NVTX_COLOR_ARGB; + eventAttrib.color = 0x000000ff; + eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII; + eventAttrib.message.ascii = "calculateTauMatrix"; + nvtxRangePushEx(&eventAttrib); +#endif + + int nrmat_ns=lsms.n_spin_cant*atom.nrmat; + int kkrsz_ns=lsms.n_spin_cant*atom.kkrsz; + + // build the kkr matrix + m.resize(nrmat_ns,nrmat_ns); + + double timeBuildKKRMatrix=MPI_Wtime(); + +#ifdef BUILDKKRMATRIX_GPU + buildKKRMatrix_gpu(lsms, local, atom, energy, prel, iie, m, d_const); + // buildKKRMatrix_gpu_opaque(lsms, local, atom, energy, prel, iie, m, d_const); +#else + buildKKRMatrix(lsms, local, atom, energy, prel, iie, m); +#endif + + + timeBuildKKRMatrix=MPI_Wtime()-timeBuildKKRMatrix; + if(lsms.global.iprint>=1) printf(" timeBuildKKRMatrix=%lf\n",timeBuildKKRMatrix); + + // if(!lsms.global.checkIstop("buildKKRMatrix")) + { + + // invert matrix to get tau00 + // set up the block sizes for the block inversion: + + int nblk; +#if defined(ACCELERATOR_LIBSCI) + nblk=2; +#elif defined(ACCELERATOR_CUBLAS) + nblk=12; +#elif defined(ACCELERATOR_CUDA_C) + int max_blk_sz=175; + //assign blocks in a load balanced way + if((nrmat_ns-kkrsz_ns)%max_blk_sz==0) + nblk=(nrmat_ns-kkrsz_ns)/max_blk_sz+1; + else + { + nblk=(nrmat_ns-kkrsz_ns)/(max_blk_sz-1)+1; + if((nrmat_ns-kkrsz_ns)%(max_blk_sz-1) > max_blk_sz/2) + nblk++; + } +#else + nblk=4; +#endif + if(kkrsz_ns==nrmat_ns) + nblk=1; + else + { +#if !defined(ACCELERATOR_CUDA_C) || defined(ACCELERATOR_CUBLAS) + if(lsms.zblockLUSize>0) + { + //assign blocks in a load balanced way + if((nrmat_ns-kkrsz_ns)%lsms.zblockLUSize==0) + nblk=(nrmat_ns-kkrsz_ns)/lsms.zblockLUSize+1; + else + { + nblk=(nrmat_ns-kkrsz_ns)/(lsms.zblockLUSize-1)+1; + if((nrmat_ns-kkrsz_ns)%(lsms.zblockLUSize-1) > lsms.zblockLUSize/2) + nblk++; + } + } +#endif + } + int blk_sz[1000]; + assert(nblk<=1000); + + blk_sz[0]=kkrsz_ns; + if(nblk==1) + blk_sz[0]=nrmat_ns; + else if(nblk==2) + blk_sz[1]=nrmat_ns-blk_sz[0]; + else if(nblk>2) +// { +// int min_sz=(nrmat_ns-blk_sz[0])/(nblk-1); +// for(int i=1; i=1) + { + printf("nrmat_ns=%d\nnblk=%d\n",nrmat_ns,nblk); + for(int i=0; i2! + // Complex vecs[nrmat_ns*(kkrsz_ns*6+6)]; + Complex *vecs; + Complex tmp_vecs; vecs=&tmp_vecs; + int *ipvt = new int[nrmat_ns]; + Matrix delta(kkrsz_ns, kkrsz_ns); + // Complex *delta = new Complex[kkrsz_ns*kkrsz_ns]; + int *iwork = new int[kkrsz_ns*atom.numLIZ]; + Real *rwork = new Real[kkrsz_ns*atom.numLIZ]; + Complex *work1 = new Complex[kkrsz_ns*atom.numLIZ]; + int alg=2; + if(alg>2) vecs=(Complex *)malloc((nrmat_ns*(kkrsz_ns*6+6))*sizeof(Complex)); + int *idcol = new int[blk_sz[0]]; idcol[0]=0; +#ifdef BUILDKKRMATRIX_GPU + Complex *dev_m=get_dev_m_(); + clearM00(dev_m, blk_sz[0], nrmat_ns,get_stream_(0)); +#endif +#if defined (ACCELERATOR_CULA) || defined(ACCELERATOR_LIBSCI) +#pragma omp critical +#endif + { +#ifdef USE_NVTX + nvtxEventAttributes_t eventAttrib = {0}; + eventAttrib.version = NVTX_VERSION; + eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE; + eventAttrib.colorType = NVTX_COLOR_ARGB; + eventAttrib.color = 0x0000ff00; + eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII; + eventAttrib.message.ascii = "block_inv"; + nvtxRangePushEx(&eventAttrib); +#endif + if(true) + block_inv_(&m(0,0),vecs,&nrmat_ns,&nrmat_ns,&nrmat_ns,ipvt, + blk_sz,&nblk,&delta(0,0), + iwork,rwork,work1,&alg,idcol,&lsms.global.iprint); + else + block_inverse(m, blk_sz, nblk, delta, ipvt, idcol); +#ifdef USE_NVTX + nvtxRangePop(); +#endif + } + + if(alg>2) free(vecs); + + double timePostproc=MPI_Wtime(); + Matrix tau00(kkrsz_ns,kkrsz_ns); + if(lsms.relativity!=full) + tau_inv_postproc_nrel_(&kkrsz_ns,&lsms.n_spin_cant, + &m(0,0),&delta(0,0),&local.tmatStore(iie*local.blkSizeTmatStore,atom.LIZStoreIdx[0]),ipvt,&tau00(0,0), + atom.ubr,atom.ubrd, + tau00_l); + else + tau_inv_postproc_rel_(&kkrsz_ns,&m(0,0),&delta(0,0),&local.tmatStore(iie*local.blkSizeTmatStore,atom.LIZStoreIdx[0]),ipvt,&tau00(0,0), + &atom.dmat(0,0), &atom.dmatp(0,0), tau00_l); + + timePostproc=MPI_Wtime()-timePostproc; + if(lsms.global.iprint>=1) printf(" timePostproc=%lf\n",timePostproc); + + delete [] ipvt; + // delete [] delta; + delete [] iwork; + delete [] rwork; + delete [] work1; + delete [] idcol; + } +#ifdef USE_NVTX + nvtxRangePop(); +#endif +} + + +// calculateAllTauMatrices replaces gettau and the communication part of gettaucl in LSMS_1 +void calculateAllTauMatrices(LSMSCommunication &comm,LSMSSystemParameters &lsms, LocalTypeInfo &local, + std::vector > &vr, Complex energy, + int iie, + // std::vector &solution, + Matrix &tau00_l) +{ +#ifdef USE_NVTX + nvtxRangePushA("calculateAllTauMatrices"); +#endif + Complex prel=std::sqrt(energy*(1.0+energy*c2inv)); + Complex pnrel=std::sqrt(energy); + + int max_nrmat_ns=0; + int max_kkrsz=0; + for(int i=0; i >ms; + +#if !(defined _OPENMP) || (defined ACCELERATOR_CULA) || defined(ACCELERATOR_LIBSCI) + ms.resize(1); +#if defined(ACCELERATOR_CULA) || defined(ACCELERATOR_LIBSCI) + int pinned; + Complex *dat; + pinned = cudaMallocHost((void**)&dat,max_nrmat_ns*max_nrmat_ns*sizeof(Complex)); + if ( pinned != cudaSuccess ) + { + fprintf(stderr, "Matrix not pinned\n"); + dat = (Complex*)malloc(max_nrmat_ns*max_nrmat_ns*sizeof(Complex)); + } + + ms[0].retarget(max_nrmat_ns,max_nrmat_ns,dat); +#else + ms[0].resize(max_nrmat_ns,max_nrmat_ns); +#endif +#else + ms.resize(omp_get_max_threads()); +#pragma omp parallel for default(none) shared(ms,max_nrmat_ns) + for(int i=0; i m(max_nrmat_ns,max_nrmat_ns,m_dat+max_nrmat_ns*max_nrmat_ns*omp_get_thread_num()); +#else + Matrix m(max_nrmat_ns,max_nrmat_ns); +#endif + double timeCalcTauMat=MPI_Wtime(); +#ifndef BUILDKKRMATRIX_GPU + calculateTauMatrix(lsms,local,local.atom[i],energy,prel,&tau00_l(0,i),m,iie); +#else + calculateTauMatrix(lsms,local,local.atom[i],energy,prel,&tau00_l(0,i),m,iie, + deviceConstants[i], deviceStorage); +#endif + timeCalcTauMat=MPI_Wtime()-timeCalcTauMat; + if(lsms.global.iprint>=1) printf("calculateTauMatrix: %lf sec\n",timeCalcTauMat); + } + timeCalcTauMatTotal=MPI_Wtime()-timeCalcTauMatTotal; + if(lsms.global.iprint>=1) printf("calculateTauMatrix total time: %lf sec\n",timeCalcTauMatTotal); + +/* + ... various post processing + and calculate green, dos, dosck... +*/ +/* + for(int i=0; i 2*iplmax,2*iplmax+1,wg,plmg,clm) + 1 continue + end do + end do +c call outmat(gacoeff(1,1,i),lmmaxp,lmmaxp,lmmaxp,6) +! call relmtrx(gacoeff(1,1,i),rgacoeff(1,1,i),iplmax) + kkr1=(iplmax+1)*(iplmax+1) + call relmtrx(gacoeff(1,1,i),rgacoeff(1,1,i),kkr1,kkr1) +c call outmat(rgacoeff(1,1,i),kmymaxp,kmymaxp,kmymaxp,6) +c + end do + end do + +c + return + end diff --git a/src/MultipleScattering/gen_test_mat.f b/src/MultipleScattering/gen_test_mat.f new file mode 100644 index 000000000..0e0522c61 --- /dev/null +++ b/src/MultipleScattering/gen_test_mat.f @@ -0,0 +1,17 @@ + subroutine gen_test_mat(a,lda,na) + implicit none + integer lda,na + integer i,j + complex*16 a(lda,*) + real*8 rr,ri + + + do j = 1, na + do i = 1, na + rr = (11.0d0*i-3.0d0*j)/real(i+j) + ri = (5.0d0*i-2.0d0*j)/real(i+j) + a(i,j) = cmplx(rr,ri) + end do + end do + + end subroutine diff --git a/src/MultipleScattering/gettaucl_c.f b/src/MultipleScattering/gettaucl_c.f new file mode 100755 index 000000000..6cb6d8c32 --- /dev/null +++ b/src/MultipleScattering/gettaucl_c.f @@ -0,0 +1,536 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine gettaucl(mynod,n_spin_cant,nrel_rel, + > lmax,kkrsz,ndlj,ndlm, + > clm,cgnt, + > lofk,mofk,lofj,mofj, + > ilp1,illp, + > prel,energy,kappa_rmt, + > rsclu_1,rsclu_2,rsclu_3,nrsclu,nrmat,lmaxclu, + > tmat,tmat_n,tau00,delta,wbig,ialg, + > iswtch,ied,nume,idcol,sym_ops, + > nbortyp,nsend,msg_send,nsnd_tot, + > pi4,iprint,istop) +c ================================================================ + use MPPModule, only : sendMessage, recvMessage + use MPPModule, only : nbsendMessage, nbrecvMessage + use MPPModule, only : waitMessage +c + implicit none +c +c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + include 'atom_param.h' + include 'param_rsp.h' +c include 'mpif.h' +c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +c + character istop*32 + character sname*32 + logical received(iprsclu) +c + integer mynod + integer n_spin_cant + integer nrel_rel + integer lmax + integer kkrsz + integer ndlj + integer ndlm + integer nrmat + integer lofk(ndlj) + integer mofk(ndlj) + integer lofj(ndlm) + integer mofj(ndlm) + integer nrsclu + integer nsnd_tot + integer lmaxclu(nrsclu) + integer nbortyp(nrsclu) + integer nsend(nsnd_tot) + integer msg_send(nsnd_tot) + integer, allocatable :: msgids(:) + integer msgidr + integer iprint + integer info + integer ipvt(ipcmat*ip_spin_cant) + integer blk_sz(iprsclu*ip_spin_cant),nblk + integer min_sz +c + integer kkrsz_ns + integer nrmat_ns + integer mtxsize + integer msgsize + integer is + integer i + integer im + integer js + integer jsm + integer j + integer jm + integer ii +c*********************************TMP**************** + integer ir + integer l +c*********************************TMP**************** + integer ir1 + integer ir2 + integer kkr1 + integer kkr1_ns + integer kkr2 + integer kkr2_ns + integer kkr12 + integer nrst + integer ncst + integer ialg + integer ied + integer nume + integer iswtch(nume) + integer nm + integer nmsg_sent + integer nrsclu_max + integer idcol(kkrsz*n_spin_cant) + integer, allocatable :: iwork(:) +c + real*8 clm(ndlm) + real*8 cgnt((lmax+1)*kkrsz*kkrsz) + real*8 rsclu_1(nrsclu) + real*8 rsclu_2(nrsclu) + real*8 rsclu_3(nrsclu) + real*8 pi4 + real*8 one + real*8 rij(3) + real*8 plm(ipdlm) + real*8 sinmp(2*iplmax+1) + real*8 cosmp(2*iplmax+1) + real*8 time_direct + real*8 time_to_wait + real*8 t0 + real*8 clock_time + integer block_size + integer block_dir + real*8 time_old,time_new + real*8, allocatable :: rwork(:) +c +c complex*16 sym_ops(kkrsz*kkrsz*n_spin_cant*n_spin_cant* +c & (kkrsz*n_spin_cant-lmax-1)) + complex*16 sym_ops(kkrsz*kkrsz*n_spin_cant*n_spin_cant* + & (kkrsz*n_spin_cant-1)/2) + complex*16 ilp1(0:2*lmax) + complex*16 illp(kkrsz*kkrsz) + complex*16 prel + complex*16 energy + complex*16 kappa_rmt + complex*16 tmat(kkrsz*kkrsz*n_spin_cant*n_spin_cant) + complex*16 tmat_n(kkrsz*kkrsz*n_spin_cant*n_spin_cant) + complex*16 tau00(kkrsz*kkrsz*n_spin_cant*n_spin_cant) + complex*16 delta(kkrsz*kkrsz*n_spin_cant*n_spin_cant) + complex*16 wbig(nrmat*nrmat*n_spin_cant*n_spin_cant) + complex*16, allocatable :: work1(:) + complex*16, allocatable, target :: vbig(:) + complex*16, pointer :: gij(:) + complex*16, pointer :: hfn(:) + complex*16, pointer :: dlm(:) +c ************************************************** +c + complex*16 cone + complex*16 cmone + complex*16 czero + complex*16 sqrtm1 +c + parameter (one=1.0d0) + parameter (cone=(1.0d0,0.0d0)) + parameter (cmone=(-1.0d0,0.0d0)) + parameter (czero=(0.0d0,0.0d0)) + parameter (sqrtm1=(0.0d0,1.0d0)) + parameter (sname='gettaucl') + data block_size/3/,block_dir/1/ + data time_old/0.d0/ + data time_direct/0.d0/ + save block_size,block_dir,time_old,time_direct +c +c **************************************************************** +c full matrix storage version.........bg & gms [Nov 1991]......... +c **************************************************************** +c + if(iprint.ge.1) then + write(6,'('' gettaucl:: mynod ='',i3)') mynod + write(6,'('' gettaucl:: lmax ='',i3)') lmax + write(6,'('' gettaucl:: ndlj ='',i3)') ndlj + write(6,'('' gettaucl:: ndlm ='',i3)') ndlm + write(6,'('' gettaucl:: kkrsz ='',i3)') kkrsz + write(6,'('' gettaucl:: nrsclu='',i3)') nrsclu + do ir1=1,nrsclu + write(6,'(''gettaucl:: mynod,rsclu(i,ir1):'',2i5,3d15.5)') + > mynod,ir1,rsclu_1(ir1),rsclu_2(ir1),rsclu_3(ir1) + enddo + call flush(6) + endif +c +c call MPI_BARRIER( MPI_COMM_WORLD, info ) +c + kkrsz_ns=kkrsz*n_spin_cant + nrmat_ns=nrmat*n_spin_cant + allocate(msgids(nsnd_tot)) +c +c ================================================================ +c setup unit matrix............................................... +c ---------------------------------------------------------------- + call cmtruni(wbig,nrmat_ns) +c ---------------------------------------------------------------- +c + mtxsize=kkrsz_ns*kkrsz_ns + msgsize=16*mtxsize +c ================================================================ + allocate( iwork(1:kkrsz*n_spin_cant*nrsclu) ) + allocate( rwork(1:kkrsz*n_spin_cant*nrsclu) ) + allocate( work1(1:kkrsz*n_spin_cant*nrsclu) ) + j=max(nrmat*(kkrsz*n_spin_cant*6+6)*n_spin_cant, + & nrmat*kkrsz*n_spin_cant*n_spin_cant+kkrsz*kkrsz+ + & 2*lmax+1+ndlj) + allocate( vbig(1:j) ) + gij=>vbig(nrmat*kkrsz*n_spin_cant*n_spin_cant+1: + > nrmat*kkrsz*n_spin_cant*n_spin_cant+kkrsz*kkrsz) + hfn=>vbig(nrmat*kkrsz*n_spin_cant*n_spin_cant+kkrsz*kkrsz+1: + > nrmat*kkrsz*n_spin_cant*n_spin_cant+kkrsz*kkrsz+ + > 2*lmax+1) + dlm=>vbig(nrmat*kkrsz*n_spin_cant*n_spin_cant+kkrsz*kkrsz+ + > 2*lmax+1+1: + > nrmat*kkrsz*n_spin_cant*n_spin_cant+kkrsz*kkrsz+ + > 2*lmax+1+ndlj) +c ================================================================ +c +c call scale_tau00(tmat,kkrsz,kkrsz,lofk,n_spin_cant,kappa_rmt) +c ================================================================ +c for each Rij coordinate to set up Tau**(-1)=[1-tG] matrix....... +c ================================================================ + nrst=0 + nmsg_sent=0 + do ir1=1,nrsclu + received(ir1)=.false. + enddo +c ---------------------------------------------------------------- + call zcopy(mtxsize,tmat,1,vbig,1) +c ---------------------------------------------------------------- + if(ialg.ge.10) then + nblk=2 + blk_sz(1)=kkrsz_ns + blk_sz(2)=nrmat_ns-kkrsz_ns + else +c The minimum block size is 16 + blk_sz(1)=kkrsz_ns + if(ialg.eq.1) then + nblk=nrsclu + do ir1=2,nrsclu + kkr1_ns=(lmaxclu(ir1)+1)**2*n_spin_cant + blk_sz(ir1)=kkr1_ns + enddo + else + if(block_size.eq.0) block_size=1 + nblk=min(block_size,(nrmat_ns-blk_sz(1))/16)+1 +c write(6,'('' GETTAUCL:: mynod,nblk,nrmat_ns,block_size'' +c > ,5i5)') mynod,nblk,nrmat_ns,block_size + min_sz=(nrmat_ns-blk_sz(1))/(nblk-1) + do i=2,nblk-1 + blk_sz(i)=min_sz + enddo + blk_sz(nblk)=nrmat_ns-blk_sz(1)-(nblk-2)*min_sz + endif + endif + do ir1=1,nrsclu + kkr1=(lmaxclu(ir1)+1)**2 + kkr1_ns=kkr1*n_spin_cant + ncst=0 +c ============================================================= +c download the t-matrix from the temperory area (vbig) to tmat_n +c and re-arrange tmat_n so that tmat_n is in the form +c tmat_n(kkr1*n_spin_cant,kkr1*n_spin_cant) +c ============================================================= + im=0 + do js=1,n_spin_cant + jsm=kkrsz*kkrsz_ns*(js-1) + do j=1,kkr1 + if(.not.received(ir1)) then + do is=1,n_spin_cant +c ---------------------------------------------------- + jm=jsm+kkrsz_ns*(j-1)+kkrsz*(is-1) + call zcopy(kkr1,vbig(jm+1),1,tmat_n(im+1),1) +c ---------------------------------------------------- + im=im+kkr1 + enddo + else +c the t-matrix has been stored in an appropriate place in wbig +c ---------------------------------------------------- + jm=nrst+nrmat_ns*(kkr1*(js-1)+j-1) + call zcopy(kkr1_ns,wbig(jm+1),1,tmat_n(im+1),1) +c restore wbig for use later + call zeroout(wbig(jm+1),2*kkr1_ns) +c ---------------------------------------------------- + im=im+kkr1_ns + endif + enddo + enddo +c + if(ir1.lt.nrsclu) then +c ========================================================== +c post send command to send t-matrix to other nodes......... +c ========================================================== + nm=0 +c write(6,'(''GETTAUCL: nsnd_tot '',i5)') nsnd_tot + call flush(6) + do i=1,nsnd_tot + if(msg_send(i).eq.ir1+1) then + nm=nm+1 +c write(6,'('' SENDING: ir1,i,nm,msg_send,nsend '', +c > 5i5)') ir1,i,nm,msg_send(i),nsend(i) +c write(6,'('' MPI_COMM_WORLD '',i10)') MPI_COMM_WORLD +c do ii = 1,mtxsize,32+1 +c write(6,'('' i,tmat '',i5,2d14.6)') ii,tmat(ii) +c enddo + call flush(6) +c ---------------------------------------------------- +c call sendMessage(tmat,mtxsize,msg_send(i),nsend(i)) +c ---------------------------------------------------- + msgids(nm)=nbsendMessage(tmat,mtxsize,msg_send(i), + & nsend(i)) +c ---------------------------------------------------- +c call MPI_send(tmat,mtxsize,MPI_DOUBLE_COMPLEX, +c > nsend(i),msg_send(i), MPI_COMM_WORLD,info) +c ---------------------------------------------------- +c write(6,'('' EXITING SEND: ir1,i,nm '',3i5)') +c > ir1,i,nm +c call flush(6) + endif + enddo + else + t0=clock_time() + endif +c +c ============================================================= + do ir2=1,nrsclu +c write(6,'('' IR1,IR2 '',2i5)') ir1,ir2 +c call flush(6) + kkr2=(lmaxclu(ir2)+1)**2 + kkr2_ns=kkr2*n_spin_cant + if (ir1.ne.ir2) then + rij(1)=rsclu_1(ir1)-rsclu_1(ir2) + rij(2)=rsclu_2(ir1)-rsclu_2(ir2) + rij(3)=rsclu_3(ir1)-rsclu_3(ir2) +c ======================================================= +c g(Rij) calculation..................................... +c ------------------------------------------------------- + call makegij(lmaxclu(ir1),kkr1,lmaxclu(ir2),kkr2, + > lmax,kkrsz,ndlj,ndlm, + > prel,rij,sinmp,cosmp, + > clm,plm,cgnt,lofk,mofk, + > ilp1,illp, + > hfn,dlm,gij, + > pi4,iprint,istop) +c ------------------------------------------------------- +c call inv_scale_tau00(gij,kkr1,kkr2,lofk,1, +c & kappa_rmt) +c ------------------------------------------------------- + do is=1,n_spin_cant +c ==================================================== +c s,s' ij +c form t * g (e ) for current Rij and store the result +c -i - s +c +c into wbig => 1-t*G ......................... +c ------------------------------------------------------- + im=(is-1)*kkr1_ns + call zgemm('n','n',kkr1_ns,kkr2,kkr1,cmone, + > tmat_n(im*kkr1+1),kkr1_ns,gij,kkr1,czero, + & wbig(nrmat_ns*(ncst+(is-1)*kkr2)+nrst+1), + & nrmat_ns) +c ---------------------------------------------------- + enddo + endif + if(nbortyp(ir2).eq.nbortyp(ir1).and.ir1.gt.1.and. + & ir2.gt.ir1.and..not.received(ir2)) then + received(ir2)=.true. + im=0 + do js=1,n_spin_cant + do j=1,kkr2 +c ---------------------------------------------------- +c store the t-matrix in the first column of wbig corresponding to atom ir2. + do is=1,n_spin_cant + jm=ncst+nrmat_ns*(j-1+kkr2*(js-1))+kkr2*(is-1) +c ---------------------------------------------------- + call zcopy(kkr2,tmat_n(im+1),1,wbig(jm+1),1) +c ---------------------------------------------------- + im=im+kkr1 + enddo + enddo + im=im+kkr1_ns*(kkr1-kkr2) + enddo + endif + ncst=ncst+kkr2_ns + enddo + nrst=nrst+kkr1_ns +c + if(ir1.lt.nrsclu) then +c ========================================================== +c post receive command to receive t-matrix from other node.. +c ========================================================== + if(nbortyp(ir1+1).ne.mynod+1) then +c ------------------------------------------------------- + if(.not.received(ir1+1)) then +c write(6,'('' RECEIVING: ir1,ir1+1, nbortyp '',3i5)') +c > ir1,ir1+1,nbortyp(ir1+1)-1 +c call flush(6) +c ---------------------------------------------------- +c call recvMessage(vbig,mtxsize,ir1+1,nbortyp(ir1+1)-1) +c ---------------------------------------------------- + msgidr=nbrecvMessage(vbig,mtxsize,ir1+1, + > nbortyp(ir1+1)-1) +c ---------------------------------------------------- + call waitMessage(msgidr) +c ---------------------------------------------------- + endif +c ------------------------------------------------------- + do i=1,nm +c ----------------------------------------------------- + call waitMessage(msgids(i)) +c ----------------------------------------------------- + enddo +c ------------------------------------------------------- +c write(6,'('' Exiting WAIT ON MSGIDS '')') +c call flush(6) +c ------------------------------------------------------- + else +c ------------------------------------------------------- + call zcopy(mtxsize,tmat,1,vbig,1) +c ------------------------------------------------------- + endif + nmsg_sent=nm+nmsg_sent + else + time_to_wait=clock_time()-t0 + endif + enddo +c + if(nmsg_sent.lt.nsnd_tot) then + write(6,'('' nmsg_sent < nsnd_tot ='',2i5)')nmsg_sent,nsnd_tot + nrsclu_max=0 + do i=1,nsnd_tot + nrsclu_max=max(nrsclu_max,msg_send(i)) + enddo + do ir1=nrsclu+1,nrsclu_max +c ---------------------------------------------------------- + nm=0 + do i=1,nsnd_tot + if(msg_send(i).eq.ir1) then + nm=nm+1 +c ---------------------------------------------------- + call sendMessage(tmat,mtxsize,msg_send(i),nsend(i)) +c ---------------------------------------------------- + endif + enddo + nmsg_sent=nmsg_sent+nm + enddo + write(6,'('' Finally, nmsg_sent ='',i5)')nmsg_sent + else if(nmsg_sent.gt.nsnd_tot) then + write(6,'('' nmsg_sent > nsnd_tot ='',2i5)')nmsg_sent,nsnd_tot + endif +c +c ================================================================ + if(nrst.ne.ncst) then + write(6,'('' GETTAUCL:: nrst <> ncst:'',2i5)')nrst,ncst + call fstop(sname) + else if(nrst.ne.nrmat_ns) then + write(6,'('' GETTAUCL:: nrst <> nrmat_ns:'',2i5)')nrst,nrmat_ns + call fstop(sname) + endif +c ================================================================ +c print if needed................................................. + if(iprint.ge.3) then +c write(6,'('' gettaucl:: 1-t*g(Rij) :: mynod ='',1i5)') mynod +c call wrtmtx(wbig,nrmat_ns,istop) + endif +c ================================================================ +c invert [1-t*G] : obtain the kkrsz_ns*kkrsz_ns block only........ +c returned in delta is 1-t*tau00^{-1} +c tau00=(1-delta)^{-1}*t +c ---------------------------------------------------------------- + time_new=time_direct + call block_inv(wbig,vbig,nrmat_ns,nrmat_ns,kkrsz_ns,ipvt, + & blk_sz,nblk,delta, + & iwork,rwork,work1,iswtch,ied, + & nume,time_new,idcol,sym_ops,iprint) + if(time_direct.eq.0.d0) then + time_direct=time_new + block_size=block_size+block_dir + else if(time_old.eq.0.d0) then +c Make sure we are using LU at this energy and at the previous energy + if(iswtch(ied-1).eq.2.and.iswtch(ied).eq.2) then + if(time_new.le.time_direct) then + time_old=time_direct + time_direct=time_new + block_size=block_size+block_dir + else + time_old=time_new + block_dir=-block_dir + block_size=block_size+2*block_dir + endif + endif + else if(time_direct.lt.time_new) then + block_size=block_size-block_dir + block_dir=0 + else if(block_dir.ne.0) then + time_old=time_direct + time_direct=time_new + block_size=block_size+block_dir + endif +c setup unit matrix............................................... +c ---------------------------------------------------------------- + call cmtruni(wbig,kkrsz_ns) +c ---------------------------------------------------------------- +c get 1-delta and put it in wbig + call zaxpy(mtxsize,cmone,delta,1,wbig,1) +c ================================================================ +c create tau00 => {[1-t*G]**(-1)}*t : for central site only....... +c ---------------------------------------------------------------- + call zgetrf(kkrsz_ns,kkrsz_ns,wbig,kkrsz_ns,ipvt,info) + call zcopy(kkrsz_ns*kkrsz_ns,tmat,1,tau00,1) + call zgetrs('n',kkrsz_ns,kkrsz_ns,wbig,kkrsz_ns,ipvt,tau00, + & kkrsz_ns,info) +c ---------------------------------------------------------------- +c*********************************TMP**************** +! if(istop.eq.sname) ied=2 +! if(ied.eq.2)then + if((iprint.gt.0).or.(istop.eq.sname)) then + write(6,'(''real part gettau_cl tau00'')') + do ir=1,kkrsz + write(6,'(d10.3,2x,3d10.3,2x,5d10.3,2x,7d10.3)') + >(dble(tau00(ir+(l-1)*kkrsz)),l=1,kkrsz) + if(ir.eq.1.or.ir.eq.4.or.ir.eq.9)write(6,'('' '')') + enddo + write(6,'(''imaginary part tau00'')') + do ir=1,kkrsz + write(6,'(d10.3,2x,3d10.3,2x,5d10.3,2x,7d10.3)') + >(dimag(tau00(ir+(l-1)*kkrsz)),l=1,kkrsz) + if(ir.eq.1.or.ir.eq.4.or.ir.eq.9)write(6,'('' '')') + enddo + endif +c*********************************TMP**************** +c ---------------------------------------------------------------- +c call inv_scale_tau00(tau00,kkrsz,kkrsz,lofk,n_spin_cant,kappa_rmt) +c ------------------------------------------------------------- +c call inv_scale_tau00(tmat,kkrsz,kkrsz,lofk,n_spin_cant,kappa_rmt) +c ------------------------------------------------------------- +c ================================================================ +c print if needed................................................. + if(iprint.ge.1) then + write(6,'('' gettaucl:: tau00:: mynod ='',1i5)') mynod + call wrtmtx(tau00,kkrsz_ns,istop) + call flush(6) + endif +c ================================================================ + nullify(gij, hfn, dlm) + deallocate( iwork, rwork, work1, vbig ) + deallocate( msgids ) +c ================================================================ + if (istop.eq.sname) then + call fstop(sname) + else + return + endif +c + end diff --git a/src/MultipleScattering/gettaucl_c_bu.f b/src/MultipleScattering/gettaucl_c_bu.f new file mode 100755 index 000000000..e955b6072 --- /dev/null +++ b/src/MultipleScattering/gettaucl_c_bu.f @@ -0,0 +1,566 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine gettaucl(mynod,n_spin_cant,nrel_rel, + > lmax,kkrsz,ndlj,ndlm, + > clm,cgnt, + > lofk,mofk,lofj,mofj, + > ilp1,illp, + > prel,energy,kappa_rmt, + > rsclu_1,rsclu_2,rsclu_3,nrsclu,nrmat,lmaxclu, + > tmat,tmat_n,tau00,delta,wbig,ialg, + > iswtch,ied,nume,idcol,sym_ops, + > nbortyp,nsend,msg_send,nsnd_tot, + > pi4,iprint,istop) +c ================================================================ + use MPPModule, only : sendMessage, recvMessage + use MPPModule, only : nbsendMessage, nbrecvMessage + use MPPModule, only : waitMessage, syncAllPEs +c + implicit none +c +c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + include 'atom_param.h' + include 'param_rsp.h' +c include 'mpif.h' +c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +c + character istop*32 + character sname*32 + logical received(iprsclu) +c + integer mynod + integer n_spin_cant + integer nrel_rel + integer lmax + integer kkrsz + integer ndlj + integer ndlm + integer nrmat + integer lofk(ndlj) + integer mofk(ndlj) + integer lofj(ndlm) + integer mofj(ndlm) + integer nrsclu + integer nsnd_tot + integer lmaxclu(nrsclu) + integer nbortyp(nrsclu) + integer nsend(nsnd_tot) + integer msg_send(nsnd_tot) + integer, allocatable :: msgids(:) + integer msgidr + integer iprint + integer info + integer ipvt(ipcmat*ip_spin_cant) + integer blk_sz(iprsclu*ip_spin_cant),nblk + integer min_sz +c + integer kkrsz_ns + integer nrmat_ns + integer mtxsize + integer msgsize + integer is + integer i + integer im + integer js + integer jsm + integer j + integer jm + integer ii +c*********************************TMP**************** + integer ir + integer l +c*********************************TMP**************** + integer ir1 + integer ir2 + integer kkr1 + integer kkr1_ns + integer kkr2 + integer kkr2_ns + integer kkr12 + integer nrst + integer ncst + integer ialg + integer ied + integer nume + integer iswtch(nume) + integer nm + integer nmsg_sent + integer nrsclu_max + integer idcol(kkrsz*n_spin_cant) + integer, allocatable :: iwork(:) +c + real*8 clm(ndlm) + real*8 cgnt((lmax+1)*kkrsz*kkrsz) + real*8 rsclu_1(nrsclu) + real*8 rsclu_2(nrsclu) + real*8 rsclu_3(nrsclu) + real*8 pi4 + real*8 one + real*8 rij(3) + real*8 plm(ipdlm) + real*8 sinmp(2*iplmax+1) + real*8 cosmp(2*iplmax+1) + real*8 time_direct + real*8 time_to_wait + real*8 t0 + real*8 clock_time + integer block_size + integer block_dir + real*8 time_old,time_new + real*8, allocatable :: rwork(:) +c +c complex*16 sym_ops(kkrsz*kkrsz*n_spin_cant*n_spin_cant* +c & (kkrsz*n_spin_cant-lmax-1)) + complex*16 sym_ops(kkrsz*kkrsz*n_spin_cant*n_spin_cant* + & (kkrsz*n_spin_cant-1)/2) + complex*16 ilp1(0:2*lmax) + complex*16 illp(kkrsz*kkrsz) + complex*16 prel,psq + complex*16 energy + complex*16 kappa_rmt + complex*16 tmat(kkrsz*kkrsz*n_spin_cant*n_spin_cant) + complex*16 tmat_n(kkrsz*kkrsz*n_spin_cant*n_spin_cant) + complex*16 tau00(kkrsz*kkrsz*n_spin_cant*n_spin_cant) + complex*16 delta(kkrsz*kkrsz*n_spin_cant*n_spin_cant) + complex*16 wbig(nrmat*nrmat*n_spin_cant*n_spin_cant) + complex*16, allocatable :: work1(:) + complex*16, allocatable :: bgij(:) + complex*16, allocatable, target :: vbig(:) + complex*16, pointer :: gij(:) + complex*16, pointer :: hfn(:) + complex*16, pointer :: dlm(:) +c ************************************************** +c + complex*16 cone + complex*16 cmone + complex*16 czero + complex*16 sqrtm1 +c + parameter (one=1.0d0) + parameter (cone=(1.0d0,0.0d0)) + parameter (cmone=(-1.0d0,0.0d0)) + parameter (czero=(0.0d0,0.0d0)) + parameter (sqrtm1=(0.0d0,1.0d0)) + parameter (sname='gettaucl') + data block_size/3/,block_dir/0/ +! meis: under some circumstances the blk_sz can exceed the matrix size +! as a temporary fix set block_dir to zero and stick with initial guess +! this will not give the optimal performance! +! data block_size/3/,block_dir/1/ + data time_old/0.d0/ + data time_direct/0.d0/ + save block_size,block_dir,time_old,time_direct +c +c **************************************************************** +c full matrix storage version.........bg & gms [Nov 1991]......... +c **************************************************************** +c + if(iprint.ge.1) then + write(6,'('' gettaucl:: mynod ='',i3)') mynod + write(6,'('' gettaucl:: lmax ='',i3)') lmax + write(6,'('' gettaucl:: ndlj ='',i3)') ndlj + write(6,'('' gettaucl:: ndlm ='',i3)') ndlm + write(6,'('' gettaucl:: kkrsz ='',i3)') kkrsz + write(6,'('' gettaucl:: nrsclu='',i3)') nrsclu + do ir1=1,nrsclu + write(6,'(''gettaucl:: mynod,rsclu(i,ir1):'',2i5,3d15.5)') + > mynod,ir1,rsclu_1(ir1),rsclu_2(ir1),rsclu_3(ir1) + enddo + call flush(6) + endif +c +c call MPI_BARRIER( MPI_COMM_WORLD, info ) +c + kkrsz_ns=kkrsz*n_spin_cant + nrmat_ns=nrmat*n_spin_cant + allocate(msgids(nsnd_tot)) +c +c ================================================================ +c setup unit matrix............................................... +c ---------------------------------------------------------------- + call cmtruni(wbig,nrmat_ns) +c ---------------------------------------------------------------- +c + mtxsize=kkrsz_ns*kkrsz_ns + msgsize=16*mtxsize +c ================================================================ +! write(6, *) "before allocate in gettaucl_c.bu.f" + allocate( iwork(1:kkrsz*n_spin_cant*nrsclu) ) + allocate( rwork(1:kkrsz*n_spin_cant*nrsclu) ) + allocate( work1(1:kkrsz*n_spin_cant*nrsclu) ) + allocate( bgij(1:kkrsz*kkrsz*n_spin_cant*n_spin_cant) ) + j=max(nrmat*(kkrsz*n_spin_cant*6+6)*n_spin_cant, + & nrmat*kkrsz*n_spin_cant*n_spin_cant+kkrsz*kkrsz+ + & 2*lmax+1+ndlj) + + if(iprint .ge. 1) then + write(6, *) "j, nrmat, kkrsz, n_spin_cant, nrsclu, lmax" + write(6, *) j, nrmat, kkrsz, n_spin_cant, nrsclu, lmax + call flush(6) + endif + + allocate( vbig(1:j) ) + gij=>vbig(nrmat*kkrsz*n_spin_cant*n_spin_cant+1: + > nrmat*kkrsz*n_spin_cant*n_spin_cant+kkrsz*kkrsz) + hfn=>vbig(nrmat*kkrsz*n_spin_cant*n_spin_cant+kkrsz*kkrsz+1: + > nrmat*kkrsz*n_spin_cant*n_spin_cant+kkrsz*kkrsz+ + > 2*lmax+1) + dlm=>vbig(nrmat*kkrsz*n_spin_cant*n_spin_cant+kkrsz*kkrsz+ + > 2*lmax+1+1: + > nrmat*kkrsz*n_spin_cant*n_spin_cant+kkrsz*kkrsz+ + > 2*lmax+1+ndlj) +c ================================================================ +c +c call scale_tau00(tmat,kkrsz,kkrsz,lofk,n_spin_cant,kappa_rmt) +c ================================================================ +c for each Rij coordinate to set up Tau**(-1)=[1-tG] matrix....... +c ================================================================ + nrst=0 + nmsg_sent=0 + do ir1=1,nrsclu + received(ir1)=.false. + enddo +c ---------------------------------------------------------------- + call zcopy(mtxsize,tmat,1,vbig,1) +c ---------------------------------------------------------------- + if(ialg.ge.10) then + nblk=2 + blk_sz(1)=kkrsz_ns + blk_sz(2)=nrmat_ns-kkrsz_ns + else +c The minimum block size is 16 + blk_sz(1)=kkrsz_ns + if(ialg.eq.1) then + nblk=nrsclu + do ir1=2,nrsclu + kkr1_ns=(lmaxclu(ir1)+1)**2*n_spin_cant + blk_sz(ir1)=kkr1_ns + enddo + else + if(block_size.eq.0) block_size=1 + nblk=min(block_size,(nrmat_ns-blk_sz(1))/16)+1 +c write(6,'('' GETTAUCL:: mynod,nblk,nrmat_ns,block_size'' +c > ,5i5)') mynod,nblk,nrmat_ns,block_size + min_sz=(nrmat_ns-blk_sz(1))/(nblk-1) + do i=2,nblk-1 + blk_sz(i)=min_sz + enddo + blk_sz(nblk)=nrmat_ns-blk_sz(1)-(nblk-2)*min_sz + endif + endif + do ir1=1,nrsclu + kkr1=(lmaxclu(ir1)+1)**2 + kkr1_ns=kkr1*n_spin_cant + ncst=0 +c ============================================================= +c download the t-matrix from the temperory area (vbig) to tmat_n +c and re-arrange tmat_n so that tmat_n is in the form +c tmat_n(kkr1*n_spin_cant,kkr1*n_spin_cant) +c ============================================================= + im=0 + do js=1,n_spin_cant + jsm=kkrsz*kkrsz_ns*(js-1) + do j=1,kkr1 + if(.not.received(ir1)) then + do is=1,n_spin_cant +c ---------------------------------------------------- + jm=jsm+kkrsz_ns*(j-1)+kkrsz*(is-1) + call zcopy(kkr1,vbig(jm+1),1,tmat_n(im+1),1) +c ---------------------------------------------------- + im=im+kkr1 + enddo + else +c the t-matrix has been stored in an appropriate place in wbig +c ---------------------------------------------------- + jm=nrst+nrmat_ns*(kkr1*(js-1)+j-1) + call zcopy(kkr1_ns,wbig(jm+1),1,tmat_n(im+1),1) +c restore wbig for use later + call zeroout(wbig(jm+1),2*kkr1_ns) +c ---------------------------------------------------- + im=im+kkr1_ns + endif + enddo + enddo +c + if(ir1.lt.nrsclu) then +c ========================================================== +c post send command to send t-matrix to other nodes......... +c ========================================================== + nm=0 +c write(6,'(''GETTAUCL: nsnd_tot '',i5)') nsnd_tot + call flush(6) + do i=1,nsnd_tot + if(msg_send(i).eq.ir1+1) then + nm=nm+1 +c write(6,'('' SENDING: ir1,i,nm,msg_send,nsend '', +c > 5i5)') ir1,i,nm,msg_send(i),nsend(i) +c write(6,'('' MPI_COMM_WORLD '',i10)') MPI_COMM_WORLD +c do ii = 1,mtxsize,32+1 +c write(6,'('' i,tmat '',i5,2d14.6)') ii,tmat(ii) +c enddo + call flush(6) +c ---------------------------------------------------- +c call sendMessage(tmat,mtxsize,msg_send(i),nsend(i)) +c ---------------------------------------------------- + msgids(nm)=nbsendMessage(tmat,mtxsize,msg_send(i), + & nsend(i)) +c ---------------------------------------------------- +c call MPI_send(tmat,mtxsize,MPI_DOUBLE_COMPLEX, +c > nsend(i),msg_send(i), MPI_COMM_WORLD,info) +c ---------------------------------------------------- +c write(6,'('' EXITING SEND: ir1,i,nm '',3i5)') +c > ir1,i,nm +c call flush(6) + endif + enddo + else + t0=clock_time() + endif +c +c ============================================================= + do ir2=1,nrsclu +c write(6,'('' IR1,IR2 '',2i5)') ir1,ir2 +c call flush(6) + kkr2=(lmaxclu(ir2)+1)**2 + kkr2_ns=kkr2*n_spin_cant + if (ir1.ne.ir2) then + rij(1)=rsclu_1(ir1)-rsclu_1(ir2) + rij(2)=rsclu_2(ir1)-rsclu_2(ir2) + rij(3)=rsclu_3(ir1)-rsclu_3(ir2) +c ======================================================= +c g(Rij) calculation..................................... +c ------------------------------------------------------- + call makegij(lmaxclu(ir1),kkr1,lmaxclu(ir2),kkr2, + > lmax,kkrsz,ndlj,ndlm, + > prel,rij,sinmp,cosmp, + > clm,plm,cgnt,lofk,mofk, + > ilp1,illp, + > hfn,dlm,gij, + > pi4,iprint,istop) +c ------------------------------------------------------- +c call inv_scale_tau00(gij,kkr1,kkr2,lofk,1, +c & kappa_rmt) +c ------------------------------------------------------- +c ------------------------------------------------------- + psq = prel*prel + call setgij(gij,bgij,kkr1, kkr1_ns,kkr2,kkr2_ns, + > lmax,n_spin_cant,nrel_rel,psq,energy) +c ------------------------------------------------------- +c ==================================================== +c s,s' ij +c form t * g (e ) for current Rij and store the result +c -i - s +c +c into wbig => 1-t*G ......................... +c ------------------------------------------------------- + call zgemm('n','n',kkr1_ns,kkr2_ns,kkr1_ns,cmone, + > tmat_n,kkr1_ns,bgij,kkr1_ns,czero, + & wbig(nrmat_ns*ncst+nrst+1),nrmat_ns) +c ------------------------------------------------------- + endif + if(nbortyp(ir2).eq.nbortyp(ir1).and.ir1.gt.1.and. + & ir2.gt.ir1.and..not.received(ir2)) then + received(ir2)=.true. + im=0 + do js=1,n_spin_cant + do j=1,kkr2 +c ---------------------------------------------------- +c store the t-matrix in the first column of wbig corresponding to atom ir2. + do is=1,n_spin_cant + jm=ncst+nrmat_ns*(j-1+kkr2*(js-1))+kkr2*(is-1) +c ---------------------------------------------------- + call zcopy(kkr2,tmat_n(im+1),1,wbig(jm+1),1) +c ---------------------------------------------------- + im=im+kkr1 + enddo + enddo + im=im+kkr1_ns*(kkr1-kkr2) + enddo + endif + ncst=ncst+kkr2_ns + enddo + nrst=nrst+kkr1_ns +c + if(ir1.lt.nrsclu) then +c ========================================================== +c post receive command to receive t-matrix from other node.. +c ========================================================== + if(nbortyp(ir1+1).ne.mynod+1) then +c ------------------------------------------------------- + if(.not.received(ir1+1)) then +c write(6,'('' RECEIVING: ir1,ir1+1, nbortyp '',3i5)') +c > ir1,ir1+1,nbortyp(ir1+1)-1 +c call flush(6) +c ---------------------------------------------------- +c call recvMessage(vbig,mtxsize,ir1+1,nbortyp(ir1+1)-1) +c ---------------------------------------------------- + msgidr=nbrecvMessage(vbig,mtxsize,ir1+1, + > nbortyp(ir1+1)-1) +c ---------------------------------------------------- + call waitMessage(msgidr) +c ---------------------------------------------------- + endif + else +c ------------------------------------------------------- + call zcopy(mtxsize,tmat,1,vbig,1) +c ------------------------------------------------------- + endif +c ------------------------------------------------------- + do i=1,nm +c ----------------------------------------------------- + call waitMessage(msgids(i)) +c ----------------------------------------------------- + enddo +c ------------------------------------------------------- +c write(6,'('' Exiting WAIT ON MSGIDS '')') +c call flush(6) +c ------------------------------------------------------- + nmsg_sent=nm+nmsg_sent + else + time_to_wait=clock_time()-t0 + endif + enddo +c + + if(nmsg_sent.lt.nsnd_tot) then +! write(6,'('' nmsg_sent < nsnd_tot ='',2i5)')nmsg_sent,nsnd_tot + nrsclu_max=0 + do i=1,nsnd_tot + nrsclu_max=max(nrsclu_max,msg_send(i)) + enddo + do ir1=nrsclu+1,nrsclu_max +c ---------------------------------------------------------- + nm=0 + do i=1,nsnd_tot + if(msg_send(i).eq.ir1) then + nm=nm+1 +c ---------------------------------------------------- + call sendMessage(tmat,mtxsize,msg_send(i),nsend(i)) +c ---------------------------------------------------- + endif + enddo + nmsg_sent=nmsg_sent+nm + enddo +! write(6,'('' Finally, nmsg_sent ='',i5)')nmsg_sent + else if(nmsg_sent.gt.nsnd_tot) then +! write(6,'('' nmsg_sent > nsnd_tot ='',2i5)')nmsg_sent,nsnd_tot + endif +c +c ================================================================ + if(nrst.ne.ncst) then + write(6,'('' GETTAUCL:: nrst <> ncst:'',2i5)')nrst,ncst + call fstop(sname) + else if(nrst.ne.nrmat_ns) then + write(6,'('' GETTAUCL:: nrst <> nrmat_ns:'',2i5)')nrst,nrmat_ns + call fstop(sname) + endif +c ================================================================ +c print if needed................................................. + if(iprint.ge.1) then + write(6,'('' gettaucl:: 1-t*g(Rij) :: mynod ='',1i5)') mynod + call wrtmtx(wbig,nrmat_ns,istop) + endif +c ================================================================ +c invert [1-t*G] : obtain the kkrsz_ns*kkrsz_ns block only........ +c returned in delta is 1-t*tau00^{-1} +c tau00=(1-delta)^{-1}*t +c ---------------------------------------------------------------- + time_new=time_direct +! if(istop.eq.sname) then + if(iprint.ge.1) then + write(6,*) 'Writing zblock.data' + call zblock_lu_writer(wbig,nrmat_ns,blk_sz,nblk) + end if +! end if + call block_inv(wbig,vbig,nrmat_ns,nrmat_ns,kkrsz_ns,ipvt, + & blk_sz,nblk,delta, + & iwork,rwork,work1,iswtch,ied, + & nume,time_new,idcol,sym_ops,iprint) + if(time_direct.eq.0.d0) then + time_direct=time_new + block_size=block_size+block_dir + else if(time_old.eq.0.d0) then +c Make sure we are using LU at this energy and at the previous energy + if(iswtch(ied-1).eq.2.and.iswtch(ied).eq.2) then + if(time_new.le.time_direct) then + time_old=time_direct + time_direct=time_new + block_size=block_size+block_dir + else + time_old=time_new + block_dir=-block_dir + block_size=block_size+2*block_dir + endif + endif + else if(time_direct.lt.time_new) then + block_size=block_size-block_dir + block_dir=0 + else if(block_dir.ne.0) then + time_old=time_direct + time_direct=time_new + block_size=block_size+block_dir + endif +c setup unit matrix............................................... +c ---------------------------------------------------------------- + call cmtruni(wbig,kkrsz_ns) +c ---------------------------------------------------------------- +c get 1-delta and put it in wbig + call zaxpy(mtxsize,cmone,delta,1,wbig,1) +c ================================================================ +c create tau00 => {[1-t*G]**(-1)}*t : for central site only....... +c ---------------------------------------------------------------- + call zgetrf(kkrsz_ns,kkrsz_ns,wbig,kkrsz_ns,ipvt,info) + call zcopy(kkrsz_ns*kkrsz_ns,tmat,1,tau00,1) + call zgetrs('n',kkrsz_ns,kkrsz_ns,wbig,kkrsz_ns,ipvt,tau00, + & kkrsz_ns,info) +c ---------------------------------------------------------------- +c*********************************TMP**************** + if(iprint.gt.0) then +! if(ied.eq.2)then + write(6,'(''real part gettau_cl tau00'')') + do ir=1,kkrsz + write(6,'(d10.3,2x,3d10.3,2x,5d10.3,2x,7d10.3)') + >(dble(tau00(ir+(l-1)*kkrsz)),l=1,kkrsz) + if(ir.eq.1.or.ir.eq.4.or.ir.eq.9)write(6,'('' '')') + enddo + write(6,'(''imaginary part tau00'')') + do ir=1,kkrsz + write(6,'(d10.3,2x,3d10.3,2x,5d10.3,2x,7d10.3)') + >(dimag(tau00(ir+(l-1)*kkrsz)),l=1,kkrsz) + if(ir.eq.1.or.ir.eq.4.or.ir.eq.9)write(6,'('' '')') + enddo + endif +c*********************************TMP**************** +c ---------------------------------------------------------------- +c call inv_scale_tau00(tau00,kkrsz,kkrsz,lofk,n_spin_cant,kappa_rmt) +c ------------------------------------------------------------- +c call inv_scale_tau00(tmat,kkrsz,kkrsz,lofk,n_spin_cant,kappa_rmt) +c ------------------------------------------------------------- +c ================================================================ +c print if needed................................................. + if(iprint.ge.1) then + write(6,'('' gettaucl:: tau00:: mynod ='',1i5)') mynod + call wrtmtx(tau00,kkrsz_ns,istop) + call flush(6) + endif +c ================================================================ + nullify(gij, hfn, dlm) + deallocate( iwork, rwork, work1, vbig ) + deallocate( msgids, bgij ) +c ================================================================ + if (istop.eq.sname) then + write(6,*) 'TAU00_lms' + if (nrel_rel.ne.0) then + call clebsch + call lmsmtrx(tmat_n,tau00,kkrsz_ns) + call outmat1(tmat_n,kkrsz_ns,kkrsz_ns,kkrsz_ns,1.d-15,6) + else + call outmat1(tau00,kkrsz_ns,kkrsz_ns,kkrsz_ns,1.d-15,6) + end if + call syncAllPEs() + call fstop(sname) + else + return + endif +c + end diff --git a/src/MultipleScattering/gf_local.f b/src/MultipleScattering/gf_local.f new file mode 100755 index 000000000..cceba2ed0 --- /dev/null +++ b/src/MultipleScattering/gf_local.f @@ -0,0 +1,170 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine gf_local(mtasa,zj_flag,lmax,kkrsz, + > rins,r_sph,r_mesh,jmt,jws, + > pnrel,tau00,matom_left,matom_right, + > zlr_left,zlr_right,jlr,nprpts, + > ngaussr, + > cgnt,lmax_cg, + > dos,dosck,green,dipole, + & ncrit,grwylm,gwwylm,wylm, + > pi,iprint,istop) +c ================================================================ +c +c +c **************************************************************** +c input: +c tau00 +c kkrsz (size of KKR-matrix) +c istop (index of subroutine prog. stops in) +c output: +c dos (wigner-seitz cell density of states) +c dosck (muffin-tin density of states) +c green (Green's function) +c +c They are all calculated in the Local frame. +c **************************************************************** +c + implicit none +c +c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +! include 'atom_param.h' +c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +c + character istop*32 + character sname*32 +c + integer mtasa + integer zj_flag + integer lmax + integer kkrsz + integer jmt + integer jws + integer m + integer ngaussr + integer iprint,iprint_dos + integer lmax_cg,nprpts,ncrit +c + real*8 rins,r_sph,r_mesh(nprpts) + real*8 cgnt(lmax_cg+1,(lmax_cg+1)**2,(lmax_cg+1)**2) + real*8 pi + real*8 sqr2 + real*8 grwylm(*),gwwylm(*) +c + complex*16 pnrel + complex*16 matom_left(lmax+1) + complex*16 matom_right(lmax+1) + complex*16 tau00(kkrsz*kkrsz) + complex*16 pzz(kkrsz*kkrsz) + complex*16 pzj + complex*16 pzzck(kkrsz*kkrsz) + complex*16 pzjck + complex*16 dzz(kkrsz*kkrsz*3) + complex*16 dzj + complex*16 vzz(kkrsz*kkrsz*3) + complex*16 vzj + complex*16 zlr_left(nprpts,0:lmax) + complex*16 zlr_right(nprpts,0:lmax) + complex*16 jlr(nprpts,0:lmax) + complex*16 dos + complex*16 dosck + complex*16 green(jws) +c dipole(m,1) is the density moment +c dipole(m,2) is the gradient of the dipole potential at the origin + complex*16 dipole(-1:1,2) + complex*16 wylm(*) +c + parameter (sname='gf_local') +c + sqr2=sqrt(2.d0) +c ================================================================= +c call int_zz_zj to calculate: +c +c Rmt 2 -> ^ -> +c pzzck = - 1/pi * int dr*r * 4*pi * Z (r)*Z (r) +c 0 L L' +c +c Rmt 2 -> ^ -> +c pzjck = + 1/pi * int dr*r * 4*pi * Z (r)*J (r) * delta +c 0 L L' LL' +c +c Rs 3-> -> ^ -> -> +c pzz = - 1/pi * int d r * Z (r)*Z (r)*Sigma(r) +c 0 L L' +c +c Rs 3-> -> ^ -> -> +c pzj = + 1/pi * int d r * Z (r)*J (r)*Sigma(r) * delta +c 0 L L' LL' +c ================================================================= +c ----------------------------------------------------------------- + iprint_dos=iprint + + call int_zz_zj(mtasa,zj_flag,lmax,kkrsz, + > pnrel,matom_left,matom_right, + > rins,r_sph,r_mesh,jmt, +c > r_sph,r_mesh,506, + > zlr_left,zlr_right,jlr,nprpts, + > ngaussr, + > cgnt,lmax_cg, + > pzzck,pzz,pzjck,pzj,dzz,dzj,vzz,vzj, + & ncrit,grwylm,gwwylm,wylm, + > iprint_dos,istop) +c ----------------------------------------------------------------- +c +c ================================================================ +c dos => ZZ(e)*tau(e) - ZJ(e).................................... +c ---------------------------------------------------------------- + call mdosms(zj_flag,kkrsz*kkrsz,dosck,pzzck,pzjck,tau00,pi, + > iprint,istop) +c ---------------------------------------------------------------- + if(iprint.ge.1 .and. zj_flag.eq.1) then + write(6,'('' e,n(e)_mt:'',2d16.8,2f18.13)') pnrel*pnrel,dosck + endif +c ---------------------------------------------------------------- + call mdosms(zj_flag,kkrsz*kkrsz,dos,pzz,pzj,tau00,pi, + > iprint_dos,istop) +c ---------------------------------------------------------------- + if(iprint.ge.1 .and. zj_flag.eq.1) then + write(6,'('' e,n(e)_ws:'',2d16.8,2f18.13)') pnrel*pnrel,dos + endif +c ---------------------------------------------------------------- + do m=-1,1 + call mdosms(zj_flag,kkrsz*kkrsz,dipole(m,1), + > dzz(kkrsz*kkrsz*(m+1)+1),dzj,tau00,pi,iprint,istop) + call mdosms(zj_flag,kkrsz*kkrsz,dipole(m,2), + > vzz(kkrsz*kkrsz*(m+1)+1),vzj,tau00,pi,iprint,istop) + enddo +c change to real harmonic basis so we can take the imag part +c dipole is Ylm^* which is +c (x+iy)/r2 +c ( z ) +c (-x+iy)/r2 +c we want to convert it into real harmonics as +c (y) +c (z) +c (x) + do m=1,2 + dzj=(dipole(-1,m)+dipole(1,m))*dcmplx(0.d0,-1.d0/sqr2) + dipole(1,m)=(dipole(-1,m)-dipole(1,m))/sqr2 + dipole(-1,m)=dzj + enddo +c ---------------------------------------------------------------- +c +c ================================================================ +c green => ZZ(r,e)*tau(e) - ZJ(r,e).................................... +c ---------------------------------------------------------------- + call mgreen(zj_flag,kkrsz,lmax,jws,nprpts, + > zlr_left,zlr_right,jlr,green,tau00, + > iprint,istop) +c if(iprint.ge.0)write(6,'(''green'',6d14.6)')green(501),green(jws) +c ---------------------------------------------------------------- +c +c ================================================================ + if(istop.eq.sname) then + call fstop(sname) + else + return + endif +c + end +c diff --git a/src/MultipleScattering/gfill.f b/src/MultipleScattering/gfill.f new file mode 100755 index 000000000..c3ff712c2 --- /dev/null +++ b/src/MultipleScattering/gfill.f @@ -0,0 +1,223 @@ + subroutine gfill(iplmax_ext) +c===================== +c +c matrices of spin and orbital momentum operators +c on the basis of the spinor spherical harmonics +c +! implicit real*8 (a-h,o-z) + implicit none +! include 'atom_param.h' + integer iplmax_ext + + include 'gfill.h' + include '../Misc/cgc.h' + +c + complex*16 sx(98,98),sxb(98,98) + complex*16 sy(98,98),syb(98,98) + complex*16 sz(98,98),szb(98,98) + complex*16 jx(98,98),jxb(98,98) + complex*16 jy(98,98),jyb(98,98) + complex*16 jz(98,98),jzb(98,98) + + integer l1,l2 + integer j1,j2 + integer my1,my2 + integer kap1,kap2 + integer kmy1,kmy2 + integer kapp1,kapp2 + integer kmyp1,kmyp2 + + real*8 gamm,gamp + real*8 x,y + real*8 c1d,c1u,c2d,c2u + real*8 small +c +! integer ind1,ind2 +! real*8 u1,u2 +! dimension u1(50),ind1(50) +! dimension u2(50),ind2(50) +! common/cgc/u1,u2,ind1,ind2 +c + complex*16 ci + data ci/(0.0d0,1.0d0)/,small/1.0d-15/ +c + integer kapdex,ldex,jdex,mydex + dimension kapdex(98),ldex(98),jdex(98),mydex(98) + data kapdex/ + * -1,-1, + * 1, 1, + * -2,-2,-2,-2, + * 2, 2, 2, 2, + * -3,-3,-3,-3,-3,-3, + * 3, 3, 3, 3, 3, 3, + * -4,-4,-4,-4,-4,-4,-4,-4, + * 4, 4, 4, 4, 4, 4, 4, 4, + * -5,-5,-5,-5,-5,-5,-5,-5,-5,-5, + * 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + * -6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6, + * 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + * -7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7,-7/ + data ldex/ + * 0, 0, + * 1, 1, + * 1, 1, 1, 1, + * 2, 2, 2, 2, + * 2, 2, 2, 2, 2, 2, + * 3, 3, 3, 3, 3, 3, + * 3, 3, 3, 3, 3, 3, 3, 3, + * 4, 4, 4, 4, 4, 4, 4, 4, + * 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + * 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + * 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + * 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + * 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6/ + data jdex/ + * 1, 1, + * 1, 1, + * 3, 3, 3, 3, + * 3, 3, 3, 3, + * 5, 5, 5, 5, 5, 5, + * 5, 5, 5, 5, 5, 5, + * 7, 7, 7, 7, 7, 7, 7, 7, + * 7, 7, 7, 7, 7, 7, 7, 7, + * 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + * 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + * 11,11,11,11,11,11,11,11,11,11,11,11, + * 11,11,11,11,11,11,11,11,11,11,11,11, + * 13,13,13,13,13,13,13,13,13,13,13,13,13,13/ + data mydex/ + * -1, 1, + * -1, 1, + * -3,-1, 1, 3, + * -3,-1, 1, 3, + * -5,-3,-1, 1, 3, 5, + * -5,-3,-1, 1, 3, 5, + * -7,-5,-3,-1, 1, 3, 5, 7, + * -7,-5,-3,-1, 1, 3, 5, 7, + * -9,-7,-5,-3,-1, 1, 3, 5, 7, 9, + * -9,-7,-5,-3,-1, 1, 3, 5, 7, 9, + * -11, -9, -7, -5, -3, -1, 1, 3, 5, 7, 9, 11, + * -11, -9, -7, -5, -3, -1, 1, 3, 5, 7, 9, 11, + * -13,-11, -9, -7, -5, -3, -1, 1, 3, 5, 7, 9, 11, 13/ +c + call zeroout(sx,98*98*2) + call zeroout(sy,98*98*2) + call zeroout(sz,98*98*2) + call zeroout(sxb,98*98*2) + call zeroout(syb,98*98*2) + call zeroout(szb,98*98*2) + call zeroout(jx,98*98*2) + call zeroout(jy,98*98*2) + call zeroout(jz,98*98*2) + call zeroout(jxb,98*98*2) + call zeroout(jyb,98*98*2) + call zeroout(jzb,98*98*2) +c + if(iplmax_ext.gt.iplmax) then + print *,'maxlmax .gt. iplmax!' + print *,'please change iplmax in gfill.h' + call fstop('gfill') + end if + + + do 10 kmy1=1,98 + c1d=u1(kmy1) + c1u=u2(kmy1) + kap1=kapdex(kmy1) + l1=ldex(kmy1) + j1=jdex(kmy1) + my1=mydex(kmy1) + do 10 kmy2=1,98 + c2d=u1(kmy2) + c2u=u2(kmy2) + kap2=kapdex(kmy2) + l2=ldex(kmy2) + j2=jdex(kmy2) + my2=mydex(kmy2) + x=j2*(j2+2.0d0)-my2*(my2+2.0d0) + y=j2*(j2+2.0d0)-my2*(my2-2.0d0) + if(x.lt.small) then + gamp=0.d0 + else + gamp=0.25d0*dsqrt(x) + end if + if(y.lt.small) then + gamm=0.d0 + else + gamm=0.25*dsqrt(y) + end if +c + if(l1.ne.l2) goto 10 +c +c 'x' and 'y' matrices +c + if(my1.eq.my2+2) then + sx(kmy1,kmy2)=c1u*c2d + sy(kmy1,kmy2)=-ci*c1u*c2d + if(j1.eq.j2) then + jx(kmy1,kmy2)=gamp + jy(kmy1,kmy2)=-ci*gamp + end if + else if(my1.eq.my2-2) then + sx(kmy1,kmy2)=c1d*c2u + sy(kmy1,kmy2)=ci*c1d*c2u + if(j1.eq.j2) then + jx(kmy1,kmy2)=gamm + jy(kmy1,kmy2)=ci*gamm + end if + end if +c +c 'z' matrices +c + if(my1.eq.my2) then + sz(kmy1,kmy2)=c1u*c2u-c1d*c2d + if(j1.eq.j2) jz(kmy1,kmy2)=0.5d0*my1 + end if +c + 10 continue +c + do kmy1=1,72 + kap1=kapdex(kmy1) + j1=jdex(kmy1) + my1=mydex(kmy1) + kapp1=-kap1 + kmyp1=2*kapp1*kapp1+kapp1+(my1+1)/2 +! write(6,'(/2x,i3,2x,3i3,5x,2i3/)') kmy1,kap1,j1,my1,kapp1,kmyp1 + do kmy2=1,72 + kap2=kapdex(kmy2) + j2=jdex(kmy2) + my2=mydex(kmy2) + kapp2=-kap2 + kmyp2=2*kapp2*kapp2+kapp2+(my2+1)/2 +c write(6,'(2x,i3,2x,3i3,5x,2i3)') kmy2,kap2,j2,my2,kapp2,kmyp2 +c + sxb(kmy1,kmy2)=sx(kmyp1,kmyp2) + syb(kmy1,kmy2)=sy(kmyp1,kmyp2) + szb(kmy1,kmy2)=sz(kmyp1,kmyp2) + jxb(kmy1,kmy2)=jx(kmyp1,kmyp2) + jyb(kmy1,kmy2)=jy(kmyp1,kmyp2) + jzb(kmy1,kmy2)=jz(kmyp1,kmyp2) +c + end do + end do +c + do kmy1=1,kmymaxp + do kmy2=1,kmymaxp + sxcoeff(kmy1,kmy2)=sx(kmy1,kmy2) + sycoeff(kmy1,kmy2)=sy(kmy1,kmy2) + szcoeff(kmy1,kmy2)=sz(kmy1,kmy2) + sxbcoeff(kmy1,kmy2)=sxb(kmy1,kmy2) + sybcoeff(kmy1,kmy2)=syb(kmy1,kmy2) + szbcoeff(kmy1,kmy2)=szb(kmy1,kmy2) + lxcoeff(kmy1,kmy2)=jx(kmy1,kmy2)-0.5d0*sx(kmy1,kmy2) + lycoeff(kmy1,kmy2)=jy(kmy1,kmy2)-0.5d0*sy(kmy1,kmy2) + lzcoeff(kmy1,kmy2)=jz(kmy1,kmy2)-0.5d0*sz(kmy1,kmy2) + lxbcoeff(kmy1,kmy2)=jxb(kmy1,kmy2)-0.5d0*sxb(kmy1,kmy2) + lybcoeff(kmy1,kmy2)=jyb(kmy1,kmy2)-0.5d0*syb(kmy1,kmy2) + lzbcoeff(kmy1,kmy2)=jzb(kmy1,kmy2)-0.5d0*szb(kmy1,kmy2) + end do + end do +c + return + end diff --git a/src/MultipleScattering/gfill.h b/src/MultipleScattering/gfill.h new file mode 100755 index 000000000..dc3c23e05 --- /dev/null +++ b/src/MultipleScattering/gfill.h @@ -0,0 +1,25 @@ + integer kmymaxp + integer iplmax + + parameter (iplmax=6, kmymaxp=2*(iplmax+1)*(iplmax+1)) + + complex*16 sxcoeff(kmymaxp,kmymaxp),sxbcoeff(kmymaxp,kmymaxp) + complex*16 sycoeff(kmymaxp,kmymaxp),sybcoeff(kmymaxp,kmymaxp) + complex*16 szcoeff(kmymaxp,kmymaxp),szbcoeff(kmymaxp,kmymaxp) + common/sigmat/sxcoeff,sxbcoeff,sycoeff,sybcoeff,szcoeff,szbcoeff + + complex*16 lxcoeff(kmymaxp,kmymaxp),lxbcoeff(kmymaxp,kmymaxp) + complex*16 lycoeff(kmymaxp,kmymaxp),lybcoeff(kmymaxp,kmymaxp) + complex*16 lzcoeff(kmymaxp,kmymaxp),lzbcoeff(kmymaxp,kmymaxp) + common/lmat/lxcoeff,lxbcoeff,lycoeff,lybcoeff,lzcoeff,lzbcoeff + + integer lamp,lammp + parameter ( lamp=1,lammp=(lamp+1)*(lamp+1) ) + + + complex*16 gacoeff((iplmax+1)*(iplmax+1),(iplmax+1)*(iplmax+1), + > lammp) + complex*16 rgacoeff(kmymaxp,kmymaxp,lammp) + + common/ggaunt/gacoeff + common/rggaunt/rgacoeff diff --git a/src/MultipleScattering/green_function.f b/src/MultipleScattering/green_function.f new file mode 100755 index 000000000..7dce9cac3 --- /dev/null +++ b/src/MultipleScattering/green_function.f @@ -0,0 +1,197 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine green_function(mtasa,n_spin_pola,n_spin_cant, + > lmax,kkrsz,wx,wy,wz, + > rins,r_sph,r_mesh,jmt,jws, + > pnrel,tau00_l,matom,zlr,jlr, + & nprpts,nplmax, + > ngaussr, + > cgnt,lmax_cg, + > dos,dosck,green,dipole, + & ncrit,grwylm,gwwylm,wylm, + > iprint,istop) +c ================================================================ +c +c +c **************************************************************** +c input: +c tau00_l +c kkrsz (size of KKR-matrix) +c istop (index of subroutine prog. stops in) +c output: +c dos (wigner-seitz cell density of states) +c dosck (muffin-tin density of states) +c green (Green's function) +c **************************************************************** +c + implicit none +c +c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +! include 'atom_param.h' +c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +c + character istop*32 + character sname*32 +c + integer mtasa + integer n_spin_pola + integer n_spin_cant + integer lmax + integer lmax_cg,nprpts,nplmax + integer kkrsz + integer jmt + integer jws + integer m + integer ir + integer ngaussr + integer iprint + integer zsl + integer zsr + integer zj_flag + integer isp + integer ncrit +c + real*8 rins,r_sph,r_mesh(*) + real*8 cgnt(lmax_cg+1,(lmax_cg+1)**2,(lmax_cg+1)**2) + real*8 fnpi + real*8 pi + real*8 two + parameter (two=2.0d0) + + real*8 grwylm(*),gwwylm(*) +c + complex*16 wx(4) + complex*16 wy(4) + complex*16 wz(4) + complex*16 pnrel + complex*16 matom(nplmax+1,n_spin_cant) + complex*16 tau00_l(kkrsz*kkrsz*n_spin_cant*n_spin_cant) + complex*16 zlr(nprpts*(nplmax+1),n_spin_cant) + complex*16 jlr(nprpts*(nplmax+1),n_spin_cant) + complex*16 dos(n_spin_cant*n_spin_cant) + complex*16 dosck(n_spin_cant*n_spin_cant) + complex*16 green(jws,n_spin_cant*n_spin_cant) + complex*16 dipole(6,n_spin_cant*n_spin_cant) + complex*16 t1 + complex*16 t2 + complex*16 t3 + complex*16 t4 + + complex*16 wylm(*) +c + parameter (sname='green_function') +c + pi=fnpi() +c + do isp=1,n_spin_cant*n_spin_cant + if(isp.eq.1) then + zsl=1 + zsr=1 + zj_flag=1 + else if(isp.eq.2) then + zsl=2 + zsr=1 + zj_flag=0 + else if(isp.eq.3) then + zsl=1 + zsr=2 + zj_flag=0 + else if(isp.eq.4) then + zsl=2 + zsr=2 + zj_flag=1 + endif +! write(*,*) "green_function: tau00_l(kkrsz*kkrsz*(isp-1)+1)" +! write(*,*) isp,tau00_l(kkrsz*kkrsz*(isp-1)+1) +c -------------------------------------------------------------- + call gf_local(mtasa,zj_flag,lmax,kkrsz, + > rins,r_sph,r_mesh,jmt,jws, + > pnrel,tau00_l(kkrsz*kkrsz*(isp-1)+1), + > matom(1,zsl),matom(1,zsr), + > zlr(1,zsl),zlr(1,zsr),jlr(1,zsr), + & nprpts, + > ngaussr,cgnt,lmax_cg, + > dos(isp),dosck(isp),green(1,isp),dipole(1,isp), + & ncrit,grwylm,gwwylm,wylm, + > pi,iprint,istop) +c -------------------------------------------------------------- + enddo +c +c ================================================================ +c re-calculate dos and green so that: +c +c dos(1) = Tr[dos], green(r,1) = Tr[green(r)] +c --- ----- +c +c dos(2) = Tr[dos*wx], green(r,2) = Tr[green(r)*wx] +c --- -- ----- -- +c +c dos(3) = Tr[dos*wy], green(r,3) = Tr[green(r)*wy] +c --- -- ----- -- +c +c dos(4) = Tr[dos*wz], green(r,4) = Tr[green(r)*wz] +c --- -- ----- -- +c +c ================================================================ + if(n_spin_cant.eq.2) then ! spin canting case + t1=dos(1)+dos(4) + t2=dos(1)*wx(1)+dos(2)*wx(3)+dos(3)*wx(2)+dos(4)*wx(4) + t3=dos(1)*wy(1)+dos(2)*wy(3)+dos(3)*wy(2)+dos(4)*wy(4) + t4=dos(1)*wz(1)+dos(2)*wz(3)+dos(3)*wz(2)+dos(4)*wz(4) + dos(1)=t1 + dos(2)=t2 + dos(3)=t3 + dos(4)=t4 + t1=dosck(1)+dosck(4) + t2=dosck(1)*wx(1)+dosck(2)*wx(3)+dosck(3)*wx(2)+dosck(4)*wx(4) + t3=dosck(1)*wy(1)+dosck(2)*wy(3)+dosck(3)*wy(2)+dosck(4)*wy(4) + t4=dosck(1)*wz(1)+dosck(2)*wz(3)+dosck(3)*wz(2)+dosck(4)*wz(4) + dosck(1)=t1 + dosck(2)=t2 + dosck(3)=t3 + dosck(4)=t4 + do ir=1,jws + t1=green(ir,1)+green(ir,4) + t2=green(ir,1)*wx(1)+green(ir,2)*wx(3)+ + > green(ir,3)*wx(2)+green(ir,4)*wx(4) + t3=green(ir,1)*wy(1)+green(ir,2)*wy(3)+ + > green(ir,3)*wy(2)+green(ir,4)*wy(4) + t4=green(ir,1)*wz(1)+green(ir,2)*wz(3)+ + > green(ir,3)*wz(2)+green(ir,4)*wz(4) + green(ir,1)=t1 + green(ir,2)=t2 + green(ir,3)=t3 + green(ir,4)=t4 + enddo + do m=1,6 + t1=dipole(m,1)+dipole(m,4) + t2=dipole(m,1)*wx(1)+dipole(m,2)*wx(3)+dipole(m,3)*wx(2)+ + & dipole(m,4)*wx(4) + t3=dipole(m,1)*wy(1)+dipole(m,2)*wy(3)+dipole(m,3)*wy(2)+ + & dipole(m,4)*wy(4) + t4=dipole(m,1)*wz(1)+dipole(m,2)*wz(3)+dipole(m,3)*wz(2)+ + & dipole(m,4)*wz(4) + dipole(m,1)=t1 + dipole(m,2)=t2 + dipole(m,3)=t3 + dipole(m,4)=t4 + enddo + else if(n_spin_pola.eq.1) then ! non-spin-polarized case + dos(1)=two*dos(1) ! factor 2.0 is included in DOS and + dosck(1)=two*dosck(1) ! Green function for spin + do ir=1,jws + green(ir,1)=two*green(ir,1) + enddo + do m=1,6 + dipole(m,1)=two*dipole(m,1) + enddo + endif +c +c ================================================================ + if(istop.eq.sname) then + call fstop(sname) + else + return + endif +c + end diff --git a/src/MultipleScattering/green_function_rel.f b/src/MultipleScattering/green_function_rel.f new file mode 100755 index 000000000..fdd0f2aef --- /dev/null +++ b/src/MultipleScattering/green_function_rel.f @@ -0,0 +1,309 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine green_function_rel(mtasa, + > lmax,kkrsz,wx,wy,wz, + > rins,r_mesh,jmt,jws,h, + > pnrel,tau00,matom, + > gz,fz,gj,fj,nuz,indz, + & iprpts, + > ngaussr, + > cgnt,lmax_cg, + > dos,dosck,green,dipole, + > dos_orb,dosck_orb,dens_orb, + > iprint,istop) +c ================================================================ +c +c +c **************************************************************** +c input: +c tau00 +c kkrsz (size of KKR-matrix) +c istop (index of subroutine prog. stops in) +c output: +c dos (wigner-seitz cell density of states) +c dosck (muffin-tin density of states) +c green (Green's function) (actually complex +! charge & spin - magnetization densities) +! dos_orb ) +! dosck_orb ) orbital dos & magn. densities +! dens_orb ) +c **************************************************************** +c + implicit none +c +c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +! include 'atom_param.h' + include 'gfill.h' +c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +c + character istop*32 + character sname*32 + + integer nuzp + parameter (nuzp=2) +c + integer iprpts + integer lmax_cg + + integer mtasa + integer lmax + integer kkrsz + integer jmt + integer jws + integer m + integer ir + integer i + integer ngaussr + integer iprint + integer kmy,kmyp + integer nu,nup + integer kmy1,kmyp1 + integer nuz(2*kkrsz) + integer indz(nuzp,2*kkrsz) + integer lambda + integer kmymax +c + real*8 rsimp + real*8 rins,r_mesh(iprpts),h + real*8 cgnt(lmax_cg+1,(lmax_cg+1)**2,(lmax_cg+1)**2) + real*8 rrr(iprpts+1),rir(iprpts+1) + real*8 rri(iprpts+1),rii(iprpts+1) + real*8 r1rr,r1ir + real*8 r1ri,r1ii + real*8 rlam + real*8 fnpi + real*8 fac + real*8 pi + real*8 two + real*8 small + parameter (two=2.0d0) + parameter (small=1.d-15) +c + complex*16 wx(4) + complex*16 wy(4) + complex*16 wz(4) + complex*16 pnrel + complex*16 matom(lmax+1,4) + complex*16 tau00(kkrsz*2,kkrsz*2) + complex*16 gz(iprpts,nuzp,kkrsz*2) + complex*16 fz(iprpts,nuzp,kkrsz*2) + complex*16 gj(iprpts,nuzp,kkrsz*2) + complex*16 fj(iprpts,nuzp,kkrsz*2) + complex*16 sum(kkrsz*2,kkrsz*2,2) + complex*16 gf(kkrsz*2,kkrsz*2) + complex*16 cxr,cxi + complex*16 cox + complex*16 zmom(kkrsz*2) + complex*16 dos(4) + complex*16 dosck(4) + complex*16 green(jws,4) + complex*16 dos_orb(3) + complex*16 dosck_orb(3) + complex*16 dens_orb(jws,3) + complex*16 dipole(6,4) +c + parameter (sname='green_function_rel') +c + +! for the time beeing i set dipole to zero: + call zeroout(dipole,6*4*2) + +! gfill & gafill are now called from zplanint_d +! call gfill +! call gafill + + pi=fnpi() + + lambda = 0 + fac = -1.d0/pi + kmymax=2*(lmax+1)*(lmax+1) + +! dos(1), dos(4) + do kmy=1,kmymax + do kmyp=1,kmymax + call zeroout(rrr,jmt) + call zeroout(rir,jmt) + call zeroout(rri,jmt) + call zeroout(rii,jmt) + do nu=1,nuz(kmy) + kmy1=indz(nu,kmy) + do nup=1,nuz(kmyp) + kmyp1=indz(nup,kmyp) + cox=fac*rgacoeff(kmy1,kmyp1,1) + if(cdabs(cox).gt.small) then + do i=1,jmt +! rlam=r_mesh(i)**lambda + rlam=1.d0 + cxr=(gz(i,nu,kmy)*gz(i,nup,kmyp)+ + > fz(i,nu,kmy)*fz(i,nup,kmyp))*cox*rlam + cxi=(gz(i,nu,kmy)*gj(i,nup,kmyp)+ + > fz(i,nu,kmy)*fj(i,nup,kmyp))*cox*rlam + rrr(i)=rrr(i)+dreal(cxr) + rir(i)=rir(i)+dimag(cxr) + rri(i)=rri(i)+dreal(cxi) + rii(i)=rii(i)+dimag(cxi) + end do + end if + + end do ! nup + end do ! nu + + r1rr = rsimp(rrr,r_mesh,jmt,h) + r1ir = rsimp(rir,r_mesh,jmt,h) + r1ri = rsimp(rri,r_mesh,jmt,h) + r1ii = rsimp(rii,r_mesh,jmt,h) + + sum(kmy,kmyp,1) = dcmplx(r1rr,r1ir) + sum(kmy,kmyp,2) = dcmplx(r1ri,r1ii) + + + end do ! kmyp + end do ! kmy + + call repl(gf,sum(1,1,1),kmymax,kmymax) + call doubmt(gf,tau00,kmymax,kmymax) + call submat(gf,sum(1,1,2),kmymax,kmymax) + +! call replms(zmom,gf,lmax,kmymax) + + dos(1) = 0.d0 + do i=1,kmymax + dos(1) = dos(1)+gf(i,i) + end do + + call magnet(lmax,kkrsz, + > rins,r_mesh,jmt,h, + > tau00, + > gz,fz,gj,fj,nuz,indz, + > sxcoeff,sxbcoeff, + > dos(2), + & iprpts,iplmax, + > iprint,istop) + + call magnet(lmax,kkrsz, + > rins,r_mesh,jmt,h, + > tau00, + > gz,fz,gj,fj,nuz,indz, + > sycoeff,sybcoeff, + > dos(3), + & iprpts,iplmax, + > iprint,istop) + + call magnet(lmax,kkrsz, + > rins,r_mesh,jmt,h, + > tau00, + > gz,fz,gj,fj,nuz,indz, + > szcoeff,szbcoeff, + > dos(4), + & iprpts,iplmax, + > iprint,istop) + + call magnet(lmax,kkrsz, + > rins,r_mesh,jmt,h, + > tau00, + > gz,fz,gj,fj,nuz,indz, + > lxcoeff,lxbcoeff, + > dos_orb(1), + & iprpts,iplmax, + > iprint,istop) + + + call magnet(lmax,kkrsz, + > rins,r_mesh,jmt,h, + > tau00, + > gz,fz,gj,fj,nuz,indz, + > lycoeff,lybcoeff, + > dos_orb(2), + & iprpts,iplmax, + > iprint,istop) + + call magnet(lmax,kkrsz, + > rins,r_mesh,jmt,h, + > tau00, + > gz,fz,gj,fj,nuz,indz, + > lzcoeff,lzbcoeff, + > dos_orb(3), + & iprpts,iplmax, + > iprint,istop) + +! call green_4(lmax,kkrsz, +! > jmt,gz,fz,gj,fj,nuz,indz,tau00, +! > green,dens_orb,iprint,istop) + + call new_dens(lmax,kkrsz, + > jmt,gz,fz,gj,fj,nuz,indz,tau00, + > green(1,1),iprpts,iprint,istop) + + call magnetic_dens(lmax,kkrsz, + > jmt,gz,fz,gj,fj,nuz,indz,tau00, + > sxcoeff,sxbcoeff, + > green(1,2), + & iprpts, + > iprint,istop) + + call magnetic_dens(lmax,kkrsz, + > jmt,gz,fz,gj,fj,nuz,indz,tau00, + > sycoeff,sybcoeff, + > green(1,3), + & iprpts, + > iprint,istop) + + call magnetic_dens(lmax,kkrsz, + > jmt,gz,fz,gj,fj,nuz,indz,tau00, + > szcoeff,szbcoeff, + > green(1,4), + & iprpts, + > iprint,istop) + +! for the time beeing it seems that we don't need the orbital monent +! densities, so I just set them to zero... + call zeroout(dens_orb,2*jws*3) + +! call magnetic_dens(lmax,kkrsz, +! > jmt,gz,fz,gj,fj,nuz,indz,tau00, +! > lxcoeff,lxbcoeff, +! > dens_orb(1,1), +! & iprpts, +! > iprint,istop) +! +! call magnetic_dens(lmax,kkrsz, +! > jmt,gz,fz,gj,fj,nuz,indz,tau00, +! > lycoeff,lybcoeff, +! > dens_orb(1,2), +! & iprpts, +! > iprint,istop) +! +! call magnetic_dens(lmax,kkrsz, +! > jmt,gz,fz,gj,fj,nuz,indz,tau00, +! > lzcoeff,lzbcoeff, +! > dens_orb(1,3), +! ? iprpts, +! > iprint,istop) + + +! currently we are have only implemented ASA for the relativistic case, +! therefore dos == dosck + + dosck(1) = dos(1) + dosck(2) = dos(2) + dosck(3) = dos(3) + dosck(4) = dos(4) + dosck_orb(1) = dos_orb(1) + dosck_orb(2) = dos_orb(2) + dosck_orb(3) = dos_orb(3) + +c$$$ if(iprint.ge.0) then +c$$$ write(6,*) 'dos(1)=',dos(1) +c$$$ write(6,*) 'dos(2)=',dos(2) +c$$$ write(6,*) 'dos(3)=',dos(3) +c$$$ write(6,*) 'dos(4)=',dos(4) +c$$$ write(6,*) 'dos_orb(1)=',dos_orb(1) +c$$$ write(6,*) 'dos_orb(2)=',dos_orb(2) +c$$$ write(6,*) 'dos_orb(3)=',dos_orb(3) +c$$$ end if + + if(istop.eq.sname) then + call fstop(sname) + end if + + end diff --git a/src/MultipleScattering/int_zz_zj.f b/src/MultipleScattering/int_zz_zj.f new file mode 100755 index 000000000..f6f6e29c2 --- /dev/null +++ b/src/MultipleScattering/int_zz_zj.f @@ -0,0 +1,273 @@ +c +c ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine int_zz_zj(mtasa,zj_flag,lmax,kkrsz, + > pnrel,matom_left,matom_right, + > rins,r_sph,r_mesh,jmt, + > zlr_left,zlr_right,jlr, + & nprpts, + > ngaussr, + > cgnt,lmax_cg, + > pzzck,pzz,pzjck,pzj,dzz,dzj,vzz,vzj, + & ncrit,grwylm,gwwylm,wylm, + > iprint,istop) +c ================================================================= +c + implicit none +c +! include 'atom_param.h' +c + character sname*32 + character istop*32 +c + integer mtasa + integer zj_flag + integer lmax + integer kkrsz + integer jmt + integer l + integer m + integer lm + integer ir + integer lm1 + integer lm2 + integer m1 + integer l2 + integer m2 + integer ngaussr + integer iprint + integer lmax_cg,nprpts + integer ncrit +c + real*8 rins,r_sph,r_mesh(nprpts),rtmp(0:nprpts) + real*8 cgnt(lmax_cg+1,(lmax_cg+1)**2,(lmax_cg+1)**2) + real*8 pi,fnpi + + real*8 grwylm(*),gwwylm(*) +c + complex*16 pnrel + complex*16 matom_left(0:lmax) + complex*16 matom_right(0:lmax) + complex*16 pzz(kkrsz,kkrsz) + complex*16 pzj + complex*16 pzzck(kkrsz,kkrsz) + complex*16 pzjck + complex*16 pzjckout(9) + complex*16 dzz(kkrsz,kkrsz,-1:1) + complex*16 dzj + complex*16 vzz(kkrsz,kkrsz,-1:1) + complex*16 vzj + complex*16 zlr_left(nprpts,0:lmax) + complex*16 zlr_right(nprpts,0:lmax) + complex*16 jlr(nprpts,0:lmax) + complex*16 fr(0:nprpts) + complex*16 fr_int(0:nprpts) + complex*16 zlzl + complex*16 zljl + complex*16 czero + complex*16 cone + complex*16 dummy + + complex*16 wylm(*) +c + parameter (sname='int_zz_zj') + parameter (czero=(0.0d0,0.0d0)) + parameter (cone=(1.0d0,0.0d0)) +c +c ***************************************************************** +c returns: +c Rmt 2 -> ^ -> +c pzzck = + int dr*r * 4*pi * Z (r)*Z (r) +c 0 L L' +c +c Rmt 2 -> ^ -> +c pzjck = + int dr*r * 4*pi * Z (r)*J (r) * delta +c 0 L L' LL' +c +c Rs 3-> -> ^ -> -> +c pzz = + int d r * Z (r)*Z (r)*Sigma(r) +c 0 L L' +c +c Rs 3-> -> ^ -> -> +c pzj = + int d r * Z (r)*J (r)*Sigma(r) * delta +c 0 L L' LL' +c +c dzz is contribution to the dipole moment +c Rs 3-> -> -> -> * +c dzz = + int d r * Z (r)*Z (r)*Theta(r) * Y * r +c 0 L L' 1m +c +c vzz is contribution to the gradient of the dipole potential at the origin +c Rs 3-> -> -> -> * 2 +c vzz = + int d r * Z (r)*Z (r)*Theta(r) * Y / (3 * r ) +c 0 L L' 1m +c dzz and vzz are calculated only up to r_sph (the real MT radius) +c ***************************************************************** +c +c ----------------------------------------------------------------- + pi=fnpi() + call zeroout(pzzck,2*kkrsz*kkrsz) + call zeroout(pzjckout,2*9) + pzjck=czero + rtmp(0)=0.d0 + do ir=1,jmt + rtmp(ir)=sqrt(r_mesh(ir)) + enddo +c ----------------------------------------------------------------- + lm=0 + do l=0,lmax +c ============================================================= +c zlzl: integral of (rad wf)**2 over M.T. +c ============================================================= + do ir=1,jmt + fr(ir)=2.d0*zlr_left(ir,l)*zlr_right(ir,l) !*r_mesh(ir)**2 + enddo + fr(0)=fr(1) +c ------------------------------------------------------------- + call cnewint(jmt+1,rtmp,fr,fr_int,5) +c ------------------------------------------------------------- +c zlzl=fr_int(jmt) + call cinterp(rtmp,fr_int,jmt+1,sqrt(r_sph),zlzl,dummy,fr) +c ============================================================= +c zljl: integral of (rad wf * ir rad wf) over M.T. +c ============================================================= + if(zj_flag.eq.1) then + do ir=1,jmt + fr(ir)=2.d0*zlr_left(ir,l)*jlr(ir,l) !*r_mesh(ir)**2 + enddo + fr(0)=fr(1) +c ---------------------------------------------------------- + call cnewint(jmt+1,rtmp,fr,fr_int,5) +c ---------------------------------------------------------- +c zljl=fr_int(jmt) + call cinterp(rtmp,fr_int,jmt+1,sqrt(r_sph),zljl,dummy,fr) + else + zljl=czero + endif + do m=-l,l + lm=lm+1 +ctest ctmp for l decomposed dos!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +c if(l.eq.1)then +ctest ctmp for l decomposed dos!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + pzzck(lm,lm)=zlzl + pzjck=pzjck+zljl +c endif + if(lm.le.9)pzjckout(lm)=-zljl/pi + enddo + enddo +c ================================================================= +c if(iprint.ge.100)write(6,'(i5,2f14.8,18f9.4,f18.9'' doss'')') +c >iprint-100,-pzjck/pi,pzjckout,dble(pnrel**2) +c printout if needed............................................... + if (iprint.ge.1.and.iprint.lt.100) then +c ------------------------------------------------------------- + write(6,'(/,'' INT_ZZ_ZJ:: pzz Muffin-tin'')') +c ------------------------------------------------------------- + call wrtmtx(pzzck,kkrsz,istop) +c ------------------------------------------------------------- + write(6,'(/,'' INT_ZZ_ZJ:: pzj Muffin-tin'',1p2e18.8)') pzjck +c ------------------------------------------------------------- + endif + + call zeroout(dzz,2*kkrsz*kkrsz*3) + call zeroout(vzz,2*kkrsz*kkrsz*3) + dzj=czero + vzj=czero + do l=0,lmax + do l2=abs(l-1),min(l+1,lmax),2 +c ============================================================= +c zlzl: integral of (rad wf)**2*r over M.T. +c ============================================================= + fr(0)=0.d0 + do ir=1,jmt + fr(ir)=2.d0*zlr_left(ir,l)*zlr_right(ir,l2)*r_mesh(ir)**2 + enddo +c ------------------------------------------------------------- + call cnewint(jmt+1,rtmp,fr,fr_int,3) +c ------------------------------------------------------------- +c zlzl=fr_int(jmt) + call cinterp(rtmp,fr_int,jmt+1,sqrt(rins),zlzl,dummy,fr) +c ============================================================= +c zljl: integral of (rad wf)**2/(3*r**2) over M.T. +c ============================================================= + fr(0)=0.d0 + do ir=1,jmt + fr(ir)=2.d0*zlr_left(ir,l)*zlr_right(ir,l2) + enddo +c ------------------------------------------------------------- + call cnewint(jmt+1,rtmp,fr,fr_int,1) +c ------------------------------------------------------------- +c zljl=fr_int(jmt)/3.d0 + call cinterp(rtmp,fr_int,jmt+1,sqrt(rins),zljl,dummy,fr) + zljl=zljl/3.d0 + + do m1=-1,1 + lm1=m1+3 + lm=l*l + do m=-l,l + lm=lm+1 +c dipole moment is int rho(r)*r*Ylm^*, +c cgnt(lm,lmp,lmpp)=int dO Y(lm),Y(lmp),Y(lmpp)^* +c Note the wavefunction integrals should be Y(lm)Y(lm2)^* +c so we use the complex conjugate of cgnt +c cgnt(lm,lmp,lmpp)=int dO Y(lm)^*,Y(lmp)^*,Y(lmpp) + m2=m-m1 + if(abs(m2).le.l2) then + lm2=l2*(l2+1)+m2+1 + dzz(lm,lm2,m1)=zlzl*cgnt(l2/2+1,lm1,lm) + vzz(lm,lm2,m1)=zljl*cgnt(l2/2+1,lm1,lm) + endif + enddo + enddo ! m1 + enddo ! l2 + enddo +c +c ================================================================= +c For ASA potentials............................................... +c ================================================================= + if(mtasa.eq.1) then +ctest if(mtasa.ge.1) then +ctest if(mtasa.eq.2)write(6,'(''WARNING******messing with int_zz_zj'')') +c -------------------------------------------------------------- + call mbeqa(pzzck,pzz,2*kkrsz*kkrsz) + pzj=pzjck +c -------------------------------------------------------------- + return + endif + +c Interstitial contributions + call inter(zj_flag,lmax, + > pnrel,matom_left,matom_right, + > r_sph, + > ngaussr, + > cgnt,lmax_cg, + > pzz,pzj, + & ncrit,grwylm,gwwylm,wylm, + > iprint,istop) +c +c ================================================================= +c add the MT and the interstial contributions...................... +c ----------------------------------------------------------------- + call zaxpy(kkrsz*kkrsz,cone,pzzck,1,pzz,1) + pzj=pzj+pzjck +c ----------------------------------------------------------------- +c +c ================================================================= +c printout if needed............................................... + if (iprint.ge.1.and.iprint.lt.100) then + write(6,'(/,'' INT_ZZ_ZJ:: pzz total cell'')') +c ------------------------------------------------------------- + call wrtmtx(pzz,kkrsz,istop) +c ------------------------------------------------------------- + write(6,'(/,'' INT_ZZ_ZJ:: pzj total cell'',1p2e18.9)') + & pzj +c ------------------------------------------------------------- + endif +c +c ================================================================= + if (istop.eq.sname) then + call fstop(sname) + else + return + endif +c + end diff --git a/src/MultipleScattering/inv_scale_tau00.f b/src/MultipleScattering/inv_scale_tau00.f new file mode 100755 index 000000000..c695d0d32 --- /dev/null +++ b/src/MultipleScattering/inv_scale_tau00.f @@ -0,0 +1,36 @@ +c + subroutine inv_scale_tau00(tau00,kkrsz1,kkrsz2,lofk,n_spin_cant, + & kappa_rmt) + implicit none + + integer kkrsz1,kkrsz2,n_spin_cant + integer lofk(kkrsz1+kkrsz2) + + complex*16 tau00(kkrsz1,n_spin_cant,kkrsz2,n_spin_cant) + + integer i + integer j + integer ispin + integer jspin + + complex*16 kappa_rmt + complex*16 factor(0:100) + + factor(0)=1.d0 + do i=1,lofk(max(kkrsz1,kkrsz2)) + factor(i)=factor(i-1)*kappa_rmt/(2.d0*i+1.d0) + enddo + + do ispin=1,n_spin_cant + do i=1,kkrsz2 + do jspin=1,n_spin_cant + do j=1,kkrsz1 + tau00(j,jspin,i,ispin)=tau00(j,jspin,i,ispin) + & *factor(lofk(i))*factor(lofk(j)) + enddo + enddo + enddo + enddo + + return + end diff --git a/src/MultipleScattering/lmsmtrx.f b/src/MultipleScattering/lmsmtrx.f new file mode 100755 index 000000000..a68b42b56 --- /dev/null +++ b/src/MultipleScattering/lmsmtrx.f @@ -0,0 +1,44 @@ + subroutine lmsmtrx(a,b,kmymax) +! transform a matrix B in kappa,my representation into +! a matrix A in l,m,s representation + implicit none + + include '../cgc.h' + + integer kmymax + integer kmy1 + integer kmy2 + integer lm11,lm12 + integer lm21,lm22 +! integer ind1(50) +! integer ind2(50) + integer soff + + complex*16 a(kmymax,kmymax) + complex*16 b(kmymax,kmymax) +! real*8 u1(50) +! real*8 u2(50) + +! common/cgc/u1,u2,ind1,ind2 + + soff = kmymax/2 + call zeroout(a,2*kmymax*kmymax) + do kmy1=1,kmymax + lm11 = ind1(kmy1) + lm12 = ind2(kmy1)+soff + do kmy2=1,kmymax + lm21 = ind1(kmy2) + lm22 = ind2(kmy2)+soff + + a(lm11,lm21) = a(lm11,lm21)+u1(kmy1)*b(kmy1,kmy2)*u1(kmy2) + a(lm12,lm22) = a(lm12,lm22)+u2(kmy1)*b(kmy1,kmy2)*u2(kmy2) + a(lm11,lm22) = a(lm11,lm22)+u1(kmy1)*b(kmy1,kmy2)*u2(kmy2) + a(lm12,lm21) = a(lm12,lm21)+u2(kmy1)*b(kmy1,kmy2)*u1(kmy2) + + end do + end do + + end + + + diff --git a/src/MultipleScattering/magnet.f b/src/MultipleScattering/magnet.f new file mode 100755 index 000000000..d33c56d72 --- /dev/null +++ b/src/MultipleScattering/magnet.f @@ -0,0 +1,151 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine magnet(lmax,kkrsz, + > rins,r_mesh,jmt,h, + > tau00, + > gz,fz,gj,fj,nuz,indz, + > gcoeff,gbcoeff, + > out, + & iprpts, + > iprint,istop) +c ================================================================ +c +c +c **************************************************************** +c input: +c tau00 +c kkrsz (size of KKR-matrix) +c istop (index of subroutine prog. stops in) +c output: +c **************************************************************** +c + implicit none +c +c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +! include 'atom_param.h' + include 'gfill.h' +c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +c + character istop*32 + character sname*32 +c + integer iprpts +! integer kmymaxp +! parameter (kmymaxp=2*(iplmax+1)*(iplmax+1)) + + integer lmax + integer kmymax + integer kkrsz + integer jmt + integer m + integer ir + integer i + integer iprint + integer kmy, kmyp + integer nu,nup + integer kmy1,kmyp1 + + integer nuzp + parameter (nuzp=2) + + integer nuz(2*kkrsz) + integer indz(nuzp,2*kkrsz) +c + real*8 rsimp + real*8 rins,r_mesh(iprpts) + real*8 h + real*8 cgnt(lmax+1,(lmax+1)**2,(lmax+1)**2) + real*8 fnpi + real*8 fac + real*8 pi + real*8 two + real*8 small + real*8 rrr(iprpts),rir(iprpts) + real*8 rri(iprpts),rii(iprpts) + real*8 r1rr,r1ri + real*8 r1ir,r1ii + parameter (two=2.0d0) + parameter (small=1.d-15) +c + complex*16 tau00(kkrsz*2,kkrsz*2) + complex*16 gz(iprpts,nuzp,kkrsz*2) + complex*16 fz(iprpts,nuzp,kkrsz*2) + complex*16 gj(iprpts,nuzp,kkrsz*2) + complex*16 fj(iprpts,nuzp,kkrsz*2) + complex*16 sum(kkrsz*2,kkrsz*2,2) + complex*16 gf(kkrsz*2,kkrsz*2) + complex*16 out + complex*16 cxr,cxi + complex*16 gcoeff(kmymaxp,kmymaxp) + complex*16 gbcoeff(kmymaxp,kmymaxp) + complex*16 gcox,gbcox +c + parameter (sname='magnet') +c + pi=fnpi() + + fac = -1.d0/pi + kmymax=2*(lmax+1)*(lmax+1) + + do kmy=1,kmymax + do kmyp=1,kmymax + call zeroout(rrr,jmt) + call zeroout(rir,jmt) + call zeroout(rri,jmt) + call zeroout(rii,jmt) + do nu=1,nuz(kmy) + kmy1=indz(nu,kmy) + do nup=1,nuz(kmyp) + kmyp1=indz(nup,kmyp) + gcox=fac*gcoeff(kmy1,kmyp1) + gbcox=fac*gbcoeff(kmy1,kmyp1) + if(abs(gcox).gt.small) then + do i=1,jmt + cxr=gz(i,nu,kmy)*gz(i,nup,kmyp)*gcox + cxi=gz(i,nu,kmy)*gj(i,nup,kmyp)*gcox + rrr(i)=rrr(i)+dreal(cxr) + rir(i)=rir(i)+dimag(cxr) + rri(i)=rri(i)+dreal(cxi) + rii(i)=rii(i)+dimag(cxi) + end do + end if + if(abs(gbcox).gt.small) then + do i=1,jmt + cxr=fz(i,nu,kmy)*fz(i,nup,kmyp)*gbcox + cxi=fz(i,nu,kmy)*fj(i,nup,kmyp)*gbcox + rrr(i)=rrr(i)-dreal(cxr) + rir(i)=rir(i)-dimag(cxr) + rri(i)=rri(i)-dreal(cxi) + rii(i)=rii(i)-dimag(cxi) + end do + end if + + + end do ! nup + end do ! nu + + r1rr = rsimp(rrr,r_mesh,jmt,h) + r1ir = rsimp(rir,r_mesh,jmt,h) + r1ri = rsimp(rri,r_mesh,jmt,h) + r1ii = rsimp(rii,r_mesh,jmt,h) + + sum(kmy,kmyp,1) = dcmplx(r1rr,r1ir) + sum(kmy,kmyp,2) = dcmplx(r1ri,r1ii) + + end do ! kmyp + end do ! kmy + + call repl(gf,sum(1,1,1),kmymax,kmymax) + call doubmt(gf,tau00,kmymax,kmymax) + call submat(gf,sum(1,1,2),kmymax,kmymax) + + out = (0.d0,0.d0) + do i=1,kmymax + out = out + gf(i,i) + end do + + if(istop.eq.sname) then + call fstop(sname) + end if + + end diff --git a/src/MultipleScattering/magnetic_dens.f b/src/MultipleScattering/magnetic_dens.f new file mode 100755 index 000000000..b1f3e4d68 --- /dev/null +++ b/src/MultipleScattering/magnetic_dens.f @@ -0,0 +1,138 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine magnetic_dens(lmax,kkrsz, + > jmt,gz,fz,gj,fj,nuz,indz,tau00, + > gcoeff,gbcoeff, + > out, + & iprpts, + > iprint,istop) +c ================================================================ +c +c +c **************************************************************** +c input: +c tau00 +c kkrsz (size of KKR-matrix) +c istop (index of subroutine prog. stops in) +c output: +c **************************************************************** +c + implicit none +c +c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +! include 'atom_param.h' + include 'gfill.h' +c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +c + character istop*32 + character sname*32 +c + integer iprpts +! integer kmymaxp +! parameter (kmymaxp=2*(iplmax+1)*(iplmax+1)) + integer nuzp + parameter (nuzp=2) + + integer lmax + integer kmymax + integer kkrsz + integer jmt + integer m + integer i + integer kmy,kmyp + integer nu,nup + integer kmy1,kmyp1 + integer nuz(kkrsz*2),indz(nuzp,kkrsz*2) + integer iprint +c + real*8 cgnt(lmax+1,(lmax+1)**2,(lmax+1)**2) + real*8 fnpi + real*8 pi + real*8 fac + real*8 two + real*8 small + parameter (two=2.0d0) + parameter (small=1.d-15) +c + complex*16 wx(4) + complex*16 wy(4) + complex*16 wz(4) + complex*16 cxr,cxi + complex*16 pnrel + complex*16 matom(lmax+1,4) + complex*16 gcoeff(kmymaxp,kmymaxp) + complex*16 gbcoeff(kmymaxp,kmymaxp) + complex*16 gz(iprpts,nuzp,2*kkrsz),fz(iprpts,nuzp,2*kkrsz) + complex*16 gj(iprpts,nuzp,2*kkrsz),fj(iprpts,nuzp,2*kkrsz) + complex*16 tau00(kkrsz*2,kkrsz*2) + complex*16 gf(kkrsz*2,kkrsz*2) + complex*16 sum1(kkrsz*2,kkrsz*2) + complex*16 sum2(kkrsz*2,kkrsz*2) + complex*16 out(jmt) + complex*16 gcox,gbcox + complex*16 one,mone +c + parameter (sname='magnetic_dens') + parameter (one=(1.d0,0.d0)) + parameter (mone=(-1.d0,0.d0)) +c + pi=fnpi() + + fac = -1.d0/pi + kmymax=2*(lmax+1)*(lmax+1) + + do i=1,jmt + do kmy=1,kmymax + do kmyp=1,kmymax + cxr = (0.d0,0.d0) + cxi = (0.d0,0.d0) + do nu=1,nuz(kmy) + kmy1=indz(nu,kmy) + do nup=1,nuz(kmyp) + kmyp1=indz(nup,kmyp) +! gcox=fac*gcoeff(kmy1,kmyp1) +! gbcox=fac*gbcoeff(kmy1,kmyp1) + gcox=gcoeff(kmy1,kmyp1) + gbcox=gbcoeff(kmy1,kmyp1) + if(abs(gcox).gt.small) then + cxr=cxr+(gz(i,nu,kmy)*gz(i,nup,kmyp))*gcox + cxi=cxi+(gz(i,nu,kmy)*gj(i,nup,kmyp))*gcox + end if + if(abs(gbcox).gt.small) then + cxr=cxr-(fz(i,nu,kmy)*fz(i,nup,kmyp))*gbcox + cxi=cxi-(fz(i,nu,kmy)*fj(i,nup,kmyp))*gbcox + end if + + end do ! nup + end do ! nu + + sum1(kmy,kmyp) = cxr + sum2(kmy,kmyp) = cxi + + end do ! kmyp + end do ! kmy + + +!! call repl(gf,sum1,kmymax,kmymax) +!! call doubmt(gf,tau00,kmymax,kmymax) +!! call submat(gf,sum2,kmymax,kmymax) + + call repl(gf,sum2,kmymax,kmymax) + call zgemm('N','N',kmymax,kmymax,kmymax,one,sum1,kmymax, + > tau00,kmymax,mone,gf,kmymax) + + out(i) = (0.d0,0.d0) + do kmy=1,kmymax + out(i) = out(i) + gf(kmy,kmy) + end do + + end do ! i + + if(istop.eq.sname) then + do i=1,jmt + write(6,*) i,out(i) + end do + call fstop(sname) + end if + + end diff --git a/src/MultipleScattering/makegij_c.f b/src/MultipleScattering/makegij_c.f new file mode 100755 index 000000000..6d1e218ab --- /dev/null +++ b/src/MultipleScattering/makegij_c.f @@ -0,0 +1,290 @@ +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine makegij(lmaxi,kkri,lmaxj,kkrj, + > lmax,kkrsz,ndlj,ndlm, + > prel,rij,sinmp,cosmp, + > clm,plm,cgnt,lmax_cg,lofk,mofk, + > ilp1,illp, + > hfn,dlm,gij, + > pi4,iprint,istop) +c ============================================================== +c + implicit none +c + character sname*32 + character istop*32 +c + integer lmaxi + integer lmaxj + integer lend + integer kkri + integer kkrj + integer lmax,lmax_cg + integer kkrsz + integer ndlj + integer ndlm,ndlm_local + integer lofk(ndlj) + integer mofk(ndlj) + integer l,ll + integer l1 + integer l2 + integer m + integer ma + integer m1 + integer m2 + integer lm1 + integer lm2 + integer l3,m3,llow + integer j + integer iprint +c + real*8 rij(3) + real*8 sinmp(0:lmaxi+lmaxj) + real*8 cosmp(0:lmaxi+lmaxj) + real*8 clm(ndlm) + real*8 plm(ndlm) +! original definition of cgnt in LSMS_1 +! real*8 cgnt(lmax+1,kkrsz,kkrsz) + real*8 cgnt(lmax_cg+1,(lmax_cg+1)**2,(lmax_cg+1)**2) + real*8 pi4 + real*8 rmag + real*8 pmag + real*8 costheta + real*8 m1m + real*8 ptol + real*8 zero + real*8 one +c + complex*16 prel + complex*16 ilp1(0:lmaxi+lmaxj) +! original definition of illp in LSMS_1 +! complex*16 illp(kkrsz,kkrsz) + complex*16 illp((lmax+1)**2,kkrsz) + complex*16 hfn(0:lmaxi+lmaxj) + complex*16 dlm(ndlj) + complex*16 gij(kkri,kkrj) + complex*16 z + complex*16 fac + complex*16 sqrtm1 + complex*16 czero + complex*16 cone +c + parameter (sqrtm1=(0.0d0,1.0d0)) + parameter (czero =(0.0d0,0.0d0)) + parameter (cone =(1.0d0,0.0d0)) + parameter (ptol =1.0d-06) + parameter (zero =0.0d0) + parameter (one =1.0d0) + parameter (sname ='makegij') +c +c ***************************************************************** +c +c +c ij l+1 m -> * +c D [E] = -i * sqrt(E) * h [sqrt(E)*R ] * Y [R ] +c L l ij l ij +c +c +c -l+1 m -> * +c = -i * sqrt(E) * h [sqrt(E)*R ] * Y [-R ] +c l ij l ij +c +c +c m [ (2*l+1)*(l-|m|)!] m +c Y = sqrt[-----------------]*P [cos(theta)]*exp(i*m*phi) +c l [ 4*pi*(l+|m|)! ] l +c +c for m>=0 +c +c m m -m * +c Y [theta,phi] = (-1) Y [theta,phi] for m<0 +c l l +c +c -> -> -> +c R = R - R ==> [theta,phi] +c ij j i +c +c cos(theta)=Rij(3)/sqrt(Rij(1)**2+Rij(2)**2+Rij(3)**2) +c +c cos(phi) =Rij(1)/sqrt(Rij(1)**2+Rij(2)**2) +c +c m m +c Indexing: P : P(l*(l+1)/2+m+1) only +m are calculated +c l l +c +c m m +c Indexing: C : C(l*(l+1)/2+m+1) only +m are calculated +c l l +c +c m m +c Indexing: D : D(l*(l+1)+m+1) all m are calculated +c l l +c +c Now for the real space structure contant we have : +c +c ij l-l' L ij +c G (E) = 4*pi*i * SUM { C * D (E) } +c L,L' L" L',L" L" +c +c ***************************************************************** +c +c ================================================================= + if(lmax.lt.0) then + write(6,'('' makegij:: bad arguments: lmax='',i5)') lmax + call fstop(sname) + endif + lend=lmaxi+lmaxj +c ================================================================= +c calculate the hankel function.[dangerous code if z is close to 0] +c hankel function is hfn*exp(i*z)/z + rmag=sqrt(rij(1)*rij(1)+rij(2)*rij(2)+rij(3)*rij(3)) + if(rmag.lt.ptol) stop 'Error in makegij: rmag = 0.' + if(prel.eq.czero) then +c if prel is zero then we calculate Gij for multipole Coulomb interaction. + hfn(0)=cone/rmag + do l=1,lend + hfn(l)=sqrtm1*(2*l-1)*hfn(l-1)/rmag + enddo + else + z=prel*rmag + hfn(0)=-sqrtm1 + hfn(1)=-cone-sqrtm1/z + do l=1,lend-1 + hfn(l+1)=(2*l+1)*hfn(l)/z - hfn(l-1) + enddo +c ================================================================= +c l+1 +c hfn = -i *h (k*R )*sqrt(E) +c l ij +c ================================================================= + z=exp(sqrtm1*z)/rmag + do l=0,lend + hfn(l)=-hfn(l)*z*ilp1(l) + enddo + endif +c +c ================================================================= +c calculate p(l,m)'s............................................... + costheta=rij(3)/rmag +c ----------------------------------------------------------------- +! meis: changed to normalized associated Legendre functions + call plm_normalized(lend,costheta,plm) +c ----------------------------------------------------------------- +c ================================================================= +c multiply be the normalization constant........................... + ndlm_local=(lend+1)*(lend+2)/2 + if(ndlm_local.gt.ndlm) then + write(6,'(''MAKEGIJ:: ndlm incorrect!'')') + write(6,*) 'ndlm=',ndlm + write(6,*) 'ndlm_local=',ndlm_local + call fstop(sname) + endif + do j=1,ndlm_local + plm(j)=clm(j)*plm(j) + enddo +c ================================================================= +c calculate cos(phi) and sin(phi) ................................. + pmag=sqrt(rij(1)*rij(1)+rij(2)*rij(2)) + cosmp(0)=one + sinmp(0)=zero + if(pmag.ge.ptol) then + cosmp(1)=rij(1)/pmag + sinmp(1)=rij(2)/pmag + else + cosmp(1)=zero + sinmp(1)=zero + endif + do m=2,lend + cosmp(m)=cosmp(m-1)*cosmp(1)-sinmp(m-1)*sinmp(1) + sinmp(m)=sinmp(m-1)*cosmp(1)+cosmp(m-1)*sinmp(1) + enddo +c + j=0 + do l=0,lend + ll=l*(l+1) + j=ll+1 + ll=ll/2+1 + m1m=one + dlm(j)= hfn(l)*plm(ll) + do m=1,l + m1m=-m1m + fac=plm(ll+m)*dcmplx(cosmp(m),sinmp(m)) + dlm(j-m)= hfn(l)*m1m*fac + dlm(j+m)= hfn(l)*conjg(fac) + enddo + enddo +c ================================================================= + if(iprint.ge.3) then + write(6,'(/)') + write(6,*) "Rij=",rij(1),rij(2),rij(3) + write(6,*) "cos(theta)=",costheta + write(6,'(/)') + write(6,'('' makegij:: l,m,dlm(l,m):'')') + do j=1,ndlj + write(6,'(2i3,2x,f10.5,1x,d16.8)') + > lofk(j),mofk(j),dlm(j) + enddo + write(6,*) "i, plm(i)" + do j=1,ndlm + write(6,*) j,plm(j) + end do + endif +c +c ================================================================ +c calculate g(R_ij)............................................... +c ---------------------------------------------------------------- +! call zeroout(gij,2*kkri*kkrj) + gij=0.0d0 +c ---------------------------------------------------------------- +c ================================================================ +c loop over l1,m1............................................ + do lm1=1,kkrj + l1=lofk(lm1) + m1=mofk(lm1) +c ============================================================= +c loop over l2,m2.............................................. + do lm2=1,kkri + l2=lofk(lm2) + m2=mofk(lm2) +c ========================================================== +c l2-l1 +c illp(lm2,lm1) = i +c +c perform sum over l3 with gaunt # ...................... +c ========================================================== + m3=m2-m1 + llow=max(abs(m3),abs(l1-l2)) + if(prel.eq.czero) llow=l1+l2 + do l3=l1+l2,llow,-2 + j=l3*(l3+1)+m3+1 + gij(lm2,lm1) = gij(lm2,lm1)+cgnt(l3/2+1,lm1,lm2)*dlm(j) + enddo + gij(lm2,lm1)=pi4*illp(lm2,lm1)*gij(lm2,lm1) + enddo + enddo +c +c ================================================================ +c printout if needed.............................................. + if(iprint.ge.3) then +c ============================================================= +c loop over l1,m1.............................................. + do lm1=1,kkrj + l1=lofk(lm1) + m1=mofk(lm1) +c ========================================================== +c loop over l2,m2........................................... + do lm2=1,kkri + l2=lofk(lm2) + m2=mofk(lm2) + write(6,'('' lm1,lm2,l1,m1,l2,m2:'',6i3,2d12.5)') + > lm1,lm2,l1,m1,l2,m2,gij(lm2,lm1) + enddo + enddo + endif +c ================================================================= + if (istop.eq.sname) then + call fstop(sname) + else + return + endif +c + end diff --git a/src/MultipleScattering/manifest b/src/MultipleScattering/manifest new file mode 100755 index 000000000..645260190 --- /dev/null +++ b/src/MultipleScattering/manifest @@ -0,0 +1,11 @@ +block_inverse.f +find_sym.f +cmtrins.f +gettaucl_c_bu.f +setgij.f +relmtrx.f +scale_tau00.f +inv_scale_tau00.f +makegij_c.f +lmsmtrx.f + diff --git a/src/MultipleScattering/mdosms_c.f b/src/MultipleScattering/mdosms_c.f new file mode 100755 index 000000000..96e875824 --- /dev/null +++ b/src/MultipleScattering/mdosms_c.f @@ -0,0 +1,58 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine mdosms(zj_flag,n,dos,zz,zj,w1,pi, + > iprint,istop) +c ================================================================ +c + implicit none +c + character istop*32 + character sname*20 + parameter (sname='mdosms') +c + integer zj_flag + integer n,kkrsz_loc + integer iprint + integer i +c + real*8 pi +c + complex*16 zz(n) + complex*16 zj + complex*16 w1(n) + complex*16 dos + complex*16 czero + complex*16 ctmp +c + parameter (czero=(0.0d0,0.0d0)) +c +c **************************************************************** +c calculates the density of states................................ +c written by w.a.s.,jr sept. 1, 1992 +c **************************************************************** +c + dos=czero + kkrsz_loc=sqrt(dble(n))+.5d0 +c ---------------------------------------------------------------- +c Backward sum try to cancel singularities in high l's first. + do i=1,n + dos=dos+zz(i)*w1(i) + enddo +c l component dos but no ss terms +c if(iprint.ge.100) then +c write(6,'(i5,2f14.8,18f9.4,'' dosd'')') +c > mynod,-dos/pi, +c > (-zz((i-1)*kkrsz_loc+i)*w1((i-1)*kkrsz_loc+i)/pi,i=1,min(9,n)) +c endif + if(zj_flag.eq.1) then + dos=dos-zj + endif + dos=-dos/pi +c +c ================================================================ + if(istop.eq.sname) then + call fstop(sname) + endif +c + return + end diff --git a/src/MultipleScattering/mgreen_c.f b/src/MultipleScattering/mgreen_c.f new file mode 100755 index 000000000..0787e902c --- /dev/null +++ b/src/MultipleScattering/mgreen_c.f @@ -0,0 +1,68 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine mgreen(zj_flag,kkrsz,lmax,jws,iprpts, + > zlr_left,zlr_right,jlr,green,w1, + > iprint,istop) +c ================================================================ +c + implicit none +c + character istop*32 + character sname*20 +c + integer zj_flag + integer kkrsz + integer lmax + integer jws + integer iprpts + integer iprint + integer ir + integer i + integer l,m + +c + complex*16 zlr_left(iprpts,0:lmax) + complex*16 zlr_right(iprpts,0:lmax) + complex*16 jlr(iprpts,0:lmax) + complex*16 w1(kkrsz,kkrsz) + complex*16 green(jws) + complex*16 wt,ctmp +c + parameter (sname='mgreen') +c +c **************************************************************** +c calculates the Green's function................................. +c **************************************************************** +c +c ================================================================ +c calculate the green function for this (energy,species,sub-lat, +c spin) :: Spherical part only in this code....................... +c ---------------------------------------------------------------- + call zeroout(green,2*jws) +c ---------------------------------------------------------------- +c backward sum trying to cancel singularities in high l's first. + i=kkrsz + do l=lmax,0,-1 + wt=0.d0 + do m=-l,l + wt=wt+w1(i,i) + i=i-1 + enddo + do ir=1,jws + if(zj_flag.eq.1) then + ctmp=zlr_right(ir,l)*wt-jlr(ir,l)*(2*l+1) + else + ctmp=zlr_right(ir,l)*wt + endif + green(ir)=green(ir)+zlr_left(ir,l)*ctmp + enddo + enddo +c +c ================================================================ + if(istop.eq.sname) then + call fstop(sname) + else + return + endif +c + end diff --git a/src/MultipleScattering/new_dens.f b/src/MultipleScattering/new_dens.f new file mode 100755 index 000000000..10ea39f1c --- /dev/null +++ b/src/MultipleScattering/new_dens.f @@ -0,0 +1,101 @@ + subroutine new_dens(lmax,kkrsz, + > ns,gz,fz,gj,fj,nuz,indz,tau, + > zrho,iprpts,iprint,istop) +c=================== +c +c input: lmax - maximum of angular momentum index +c ns - as in 'readpot' +c gz,fz - big and small component of regular radial solution * r +c gj,fj - big and small component of irregular radial solution * r +c nuz - no. of (kap',my') components for (kap,my) +c indz - selects (kap',my') for (kap,my) +c tau - site-diagonal tau matrix +c output: zrho - radial density distribution +c +! implicit real*8 (a-h,o-z) + implicit none +c +! include 'atom_param.h' + include 'gfill.h' + integer nuzp + parameter (nuzp=2) + + integer iprpts + + character*32 istop + character*32 sname + parameter (sname='dens') + + real*8 pi + real*8 fac + real*8 small + real*8 rlam +c + integer iprint + integer kkrsz + integer lmax,lmmax,kmymax + integer nuz(2*kkrsz),indz(nuzp,2*kkrsz) + integer ns,i + integer kmy,kmyp + integer nu,nup + integer kmy1,kmyp1 +c + complex*16 gz(iprpts,nuzp,2*kkrsz),fz(iprpts,nuzp,2*kkrsz) + complex*16 gj(iprpts,nuzp,2*kkrsz),fj(iprpts,nuzp,2*kkrsz) + complex*16 zrho(ns) + complex*16 tau(2*kkrsz,2*kkrsz) + complex*16 sum(2*kkrsz,2*kkrsz,2) + complex*16 gf(2*kkrsz,2*kkrsz) + complex*16 cox +c +c + data small/1.0d-15/ +c + pi=4.d0*datan(1.d0) + fac=-1.d0/pi + lmmax=(lmax+1)*(lmax+1) + kmymax=2*lmmax + call zeroout(zrho,2*ns) +c + do i=1,ns + call zeroout(sum,2*2*kmymax*kmymax) +c + do kmy=1,kmymax + do kmyp=1,kmymax + + do nu=1,nuz(kmy) + kmy1=indz(nu,kmy) + do nup=1,nuz(kmyp) + kmyp1=indz(nup,kmyp) +! cox=fac*rgacoeff(kmy1,kmyp1,1) + cox= rgacoeff(kmy1,kmyp1,1) + if(cdabs(cox).gt.small) then +! rlam=r_mesh(i)**lambda + rlam=1.d0 + sum(kmy,kmyp,1)=sum(kmy,kmyp,1)+ + 1 (gz(i,nu,kmy)*gz(i,nup,kmyp)+ + > fz(i,nu,kmy)*fz(i,nup,kmyp))*cox*rlam + sum(kmy,kmyp,2)=sum(kmy,kmyp,2)+ + 1 (gz(i,nu,kmy)*gj(i,nup,kmyp)+ + > fz(i,nu,kmy)*fj(i,nup,kmyp))*cox*rlam + end if + + end do ! nup + end do ! nu + end do ! kmyp + end do ! kmy + + call repl(gf,sum(1,1,1),kmymax,kmymax) + call doubmt(gf,tau,kmymax,kmymax) + call submat(gf,sum(1,1,2),kmymax,kmymax) +c + zrho(i)=(0.d0,0.d0) + do kmy=1,kmymax + zrho(i)=zrho(i)+gf(kmy,kmy) + end do +! zrho(i)=fac*sum1 +c + end do + + + end diff --git a/src/MultipleScattering/relmtrx.f b/src/MultipleScattering/relmtrx.f new file mode 100755 index 000000000..cb6e40823 --- /dev/null +++ b/src/MultipleScattering/relmtrx.f @@ -0,0 +1,42 @@ + subroutine relmtrx(a,b,kkr1,kkr2) +! subroutine relmtrx(a,b,lmax) +c======================= +c +c ***************************************************** +c * transformation from a non-relativistic matrix 'a' * +c * to a relativistic matrix 'b' * +c ***************************************************** +c + implicit real*8 (a-h,o-z) +! include '../param.h' + include '../Misc/cgc.h' +c + complex*16 a,b +c + dimension a(kkr1,kkr2) +! dimension a((lmax+1)*(lmax+1),(lmax+1)*(lmax+1)) + dimension b(2*kkr1,2*kkr2) +! dimension b(2*(lmax+1)*(lmax+1),2*(lmax+1)*(lmax+1)) +! dimension u1(50),ind1(50) +! dimension u2(50),ind2(50) +! common/cgc/u1,u2,ind1,ind2 +c + lmmax=(lmax+1)*(lmax+1) + kmymax=2*lmmax +c + do i=1,2*kkr1 +! do i=1,kmymax + i1=ind1(i) + i2=ind2(i) + do j=1,2*kkr2 +! do j=1,kmymax + j1=ind1(j) + j2=ind2(j) +! write(6,*) 'i,j',i,j + b(i,j)=u1(i)*a(i1,j1)*u1(j)+ + > u2(i)*a(i2,j2)*u2(j) + end do + end do +c + return + end diff --git a/src/MultipleScattering/scale_tau00.f b/src/MultipleScattering/scale_tau00.f new file mode 100755 index 000000000..075941c11 --- /dev/null +++ b/src/MultipleScattering/scale_tau00.f @@ -0,0 +1,36 @@ +c + subroutine scale_tau00(tau00,kkrsz1,kkrsz2,lofk,n_spin_cant, + & kappa_rmt) + implicit none + + integer kkrsz1,kkrsz2,n_spin_cant + integer lofk(kkrsz1+kkrsz2) + + complex*16 tau00(kkrsz1,n_spin_cant,kkrsz2,n_spin_cant) + + integer i + integer j + integer ispin + integer jspin + + complex*16 kappa_rmt + complex*16 factor(0:100) + + factor(0)=1.d0 + do i=1,lofk(max(kkrsz1,kkrsz2)) + factor(i)=factor(i-1)*(2.d0*i+1.d0)/kappa_rmt + enddo + + do ispin=1,n_spin_cant + do i=1,kkrsz2 + do jspin=1,n_spin_cant + do j=1,kkrsz1 + tau00(j,jspin,i,ispin)=tau00(j,jspin,i,ispin) + & *factor(lofk(i))*factor(lofk(j)) + enddo + enddo + enddo + enddo + + return + end diff --git a/src/MultipleScattering/setgij.f b/src/MultipleScattering/setgij.f new file mode 100755 index 000000000..822152a22 --- /dev/null +++ b/src/MultipleScattering/setgij.f @@ -0,0 +1,58 @@ + subroutine setgij(gij, bgij,kkr1, kkr1_ns,kkr2,kkr2_ns, + > n_spin_cant,nrel_rel,psq,ce) +c ============================================================== +c + implicit none +c + character istop*32 + character sname*32 + integer im,in + integer i,j + integer is + integer kkr1 + integer kkr1_ns + integer kkr2 + integer kkr2_ns + integer n_spin_cant + integer nrel_rel +c + complex*16 gij(kkr1,kkr2) + complex*16 bgij(kkr1_ns,kkr2_ns) + complex*16 fac + complex*16 psq + complex*16 ce + + parameter (sname='setgij') +c + call zeroout(bgij,2*kkr1_ns*kkr2_ns) +c + if(nrel_rel.eq.0) then + do is=1,n_spin_cant + im=(is-1)*kkr1 + in=(is-1)*kkr2 + do i=1,kkr1 + do j=1,kkr2 + bgij(im+i,in+j)=gij(i,j) + end do + end do + end do + else + if(kkr1.ne.kkr2) then + write(6,*) 'SETGIJ: nonsquare rel. Gij not supported' + call fstop(sname) + end if +! call relmtrx(gij,bgij,lmax) + +!$$$ write(6,*) 'SETGIJ: relativity currently not supported' +!$$$ call fstop(sname) + call relmtrx(gij,bgij,kkr1,kkr2) + fac=psq/ce + do i=1,kkr1_ns + do j=1,kkr2_ns + bgij(i,j)=fac*bgij(i,j) + end do + end do + end if +c + return + end diff --git a/src/MultipleScattering/tau_inv_postproc.f b/src/MultipleScattering/tau_inv_postproc.f new file mode 100644 index 000000000..2a2d8c25a --- /dev/null +++ b/src/MultipleScattering/tau_inv_postproc.f @@ -0,0 +1,130 @@ + subroutine tau_inv_postproc_nrel(kkrsz_ns,n_spin_cant, + & wbig,delta,tmat,ipvt,tau00, + & ubr,ubrd, + & tau00_l) + implicit none + + integer n_spin_cant + integer kkrsz_ns + integer ipvt(*) + complex*16 wbig(*) + complex*16 tmat(*) + complex*16 tau00(*) + complex*16 tau00_tmp(kkrsz_ns,kkrsz_ns) + complex*16 tau00_l(*) + complex*16 delta(*),ubr(*),ubrd(*) + integer kkrsz + + integer info + integer mtxsize + + complex*16 cmone,cone,czero + parameter (cmone=(-1.0d0,0.0d0)) + parameter (cone=(1.0d0,0.0d0)) + parameter (czero=(0.d0,0.d0)) + + kkrsz=kkrsz_ns/2 + mtxsize=kkrsz_ns*kkrsz_ns +! +! FROM LSMS_1.9: GETTAU_CL +! +c setup unit matrix............................................... +c ---------------------------------------------------------------- + call cmtruni(wbig,kkrsz_ns) +c ---------------------------------------------------------------- +c get 1-delta and put it in wbig + call zaxpy(mtxsize,cmone,delta,1,wbig,1) +c ================================================================ +c create tau00 => {[1-t*G]**(-1)}*t : for central site only....... +c ---------------------------------------------------------------- + call zgetrf(kkrsz_ns,kkrsz_ns,wbig,kkrsz_ns,ipvt,info) + call zcopy(kkrsz_ns*kkrsz_ns,tmat,1,tau00,1) + call zgetrs('n',kkrsz_ns,kkrsz_ns,wbig,kkrsz_ns,ipvt,tau00, + & kkrsz_ns,info) +! write(*,*) delta(1), delta(kkrsz*kkrsz*2+kkrsz+1) +! +! FROM LSMS_1.9: GETTAU +! +c ---------------------------------------------------------------- +c Redefine tau00 to be tau00-t +c delta is 1-t*tau00^{-1} and is calculated in gettaucl +c and then rotated into the local frame +c call scale_tau00(tau00_g,kkrsz,kkrsz,lofk,n_spin_cant, +c & kappa_rmt) + call zgemm('n','n',kkrsz_ns,kkrsz_ns,kkrsz_ns,cone, + & delta,kkrsz_ns, + > tau00,kkrsz_ns,czero, + & tau00_tmp,kkrsz_ns) +c call inv_scale_tau00(tau00_tmp,kkrsz,kkrsz,lofk,n_spin_cant, +c & kappa_rmt) +c +c ================================================================ +c Rotate tau00 to local frame of reference +c ================================================================ + if( n_spin_cant .eq. 2 ) then +! Non relativistic +c ------------------------------------------------------------- + call trgtol(kkrsz,kkrsz,ubr,ubrd,tau00_tmp,tau00_l) + else +c ------------------------------------------------------------- + call zcopy(kkrsz_ns*kkrsz_ns,tau00_tmp,1,tau00_l,1) +c ------------------------------------------------------------- + endif + + +! write(*,*) 'tau00_l(1,1)=',tau00_l(1) + + end subroutine + + subroutine tau_inv_postproc_rel(kkrsz_ns, + & wbig,delta,tmat,ipvt,tau00, + & dmatp,dmat, + & tau00_l) + implicit none + + integer kkrsz_ns + integer ipvt(*) + complex*16 wbig(*) + complex*16 tmat(*) + complex*16 tau00(*) + complex*16 tau00_l(*) + complex*16 delta(*) + complex*16 dmatp,dmat + + integer info + integer mtxsize + + complex*16 cmone,cone,czero + parameter (cmone=(-1.0d0,0.0d0)) + parameter (cone=(1.0d0,0.0d0)) + parameter (czero=(0.d0,0.d0)) + + mtxsize=kkrsz_ns*kkrsz_ns +! +! FROM LSMS_1.9: GETTAU_CL +! +c setup unit matrix............................................... +c ---------------------------------------------------------------- + call cmtruni(wbig,kkrsz_ns) +c ---------------------------------------------------------------- +c get 1-delta and put it in wbig + call zaxpy(mtxsize,cmone,delta,1,wbig,1) +c ================================================================ +c create tau00 => {[1-t*G]**(-1)}*t : for central site only....... +c ---------------------------------------------------------------- + call zgetrf(kkrsz_ns,kkrsz_ns,wbig,kkrsz_ns,ipvt,info) + call zcopy(kkrsz_ns*kkrsz_ns,tmat,1,tau00,1) + call zgetrs('n',kkrsz_ns,kkrsz_ns,wbig,kkrsz_ns,ipvt,tau00, + & kkrsz_ns,info) +c ---------------------------------------------------------------- + +c ================================================================ +c Rotate tau00 to local frame of reference + +! Relativistic +c ------------------------------------------------------------- +! call zcopy(4*kkrsz_ns*kkrsz_ns,tau00,1,tau00_l,1) + call zcopy(kkrsz_ns*kkrsz_ns,tau00,1,tau00_l,1) + call tripmt(dmatp,tau00_l,dmat,kkrsz_ns,kkrsz_ns,kkrsz_ns) + + end subroutine diff --git a/src/MultipleScattering/trgtol.f b/src/MultipleScattering/trgtol.f new file mode 100755 index 000000000..0f2944154 --- /dev/null +++ b/src/MultipleScattering/trgtol.f @@ -0,0 +1,110 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine trgtol(nr,nc,u,ud,mg,ml) +c ================================================================ +c +c **************************************************************** +c input:: +c nr: number of rows of matrix in L-space +c nc: number of columns of matrix in L-space +c u: transformation matrix for spin space +c ud: complex conjugate and transpose of u matrix +c mg: matrix in the global spin space +c +c ml = u * mg * ud +c +c output:: +c ml1: (1,1) element of matrix in the local spin space +c ml1: (2,2) element of matrix in the local spin space +c **************************************************************** +c + implicit none +c + integer nr + integer nc + integer i +c + complex*16 mg(2*nr,2*nc) + complex*16 ml(nr,nc,4) + complex*16 u(4) + complex*16 ud(4) + complex*16 a + complex*16 b +c +c ================================================================ +c zero out ml..................................................... +c ---------------------------------------------------------------- + call zeroout(ml,8*nc*nr) +c ---------------------------------------------------------------- +c + a=u(1)*ud(1) + b=u(3)*ud(1) + do i=1,nc +c ------------------------------------------------------------- + call zaxpy(nr,a,mg(1,i), 1,ml(1,i,1),1) + call zaxpy(nr,b,mg(nr+1,i),1,ml(1,i,1),1) +c ------------------------------------------------------------- + enddo + a=u(1)*ud(2) + b=u(3)*ud(2) + do i=1,nc +c ------------------------------------------------------------- + call zaxpy(nr,a,mg(1,nc+i), 1,ml(1,i,1),1) + call zaxpy(nr,b,mg(nr+1,nc+i),1,ml(1,i,1),1) +c ------------------------------------------------------------- + enddo +c + a=u(2)*ud(1) + b=u(4)*ud(1) + do i=1,nc +c ------------------------------------------------------------- + call zaxpy(nr,a,mg(1,i), 1,ml(1,i,2),1) + call zaxpy(nr,b,mg(nr+1,i),1,ml(1,i,2),1) +c ------------------------------------------------------------- + enddo + a=u(2)*ud(2) + b=u(4)*ud(2) + do i=1,nc +c ------------------------------------------------------------- + call zaxpy(nr,a,mg(1,nc+i), 1,ml(1,i,2),1) + call zaxpy(nr,b,mg(nr+1,nc+i),1,ml(1,i,2),1) +c ------------------------------------------------------------- + enddo +c + a=u(1)*ud(3) + b=u(3)*ud(3) + do i=1,nc +c ------------------------------------------------------------- + call zaxpy(nr,a,mg(1,i), 1,ml(1,i,3),1) + call zaxpy(nr,b,mg(nr+1,i),1,ml(1,i,3),1) +c ------------------------------------------------------------- + enddo + a=u(1)*ud(4) + b=u(3)*ud(4) + do i=1,nc +c ------------------------------------------------------------- + call zaxpy(nr,a,mg(1,nc+i), 1,ml(1,i,3),1) + call zaxpy(nr,b,mg(nr+1,nc+i),1,ml(1,i,3),1) +c ------------------------------------------------------------- + enddo +c + a=u(2)*ud(3) + b=u(4)*ud(3) + do i=1,nc +c ------------------------------------------------------------- + call zaxpy(nr,a,mg(1,i), 1,ml(1,i,4),1) + call zaxpy(nr,b,mg(nr+1,i),1,ml(1,i,4),1) +c ------------------------------------------------------------- + enddo + a=u(2)*ud(4) + b=u(4)*ud(4) + do i=1,nc +c ------------------------------------------------------------- + call zaxpy(nr,a,mg(1,nc+i), 1,ml(1,i,4),1) + call zaxpy(nr,b,mg(nr+1,nc+i),1,ml(1,i,4),1) +c ------------------------------------------------------------- + enddo +c +c ================================================================ + return + end diff --git a/src/MultipleScattering/wasinv.f b/src/MultipleScattering/wasinv.f new file mode 100755 index 000000000..cee441fb0 --- /dev/null +++ b/src/MultipleScattering/wasinv.f @@ -0,0 +1,228 @@ +C********************************************************************** +C + SUBROUTINE WASINV(NLEN,KKRSZ,AWAS,ndim,rhs,ldr,VECS,NLIM, + > work,r0,rho,pointer,TOL,ALG,IQMR) +C +C Purpose: +C +C Parameters: +C NDIM = the declared size of A (input). +C NLEN = the size of the matrix (input). +C KKRSZ = +C A = the matrix, NLEN by NLEN (input). +C rhs = the right hand sides, nlen by kkrsz +C VECS = +C NLIM = the maximum number of iterations (input). +c work = work space, nlen by 10 +C TOL = the relative convergence tolerance (input). +C ALG = the choice of algorithm (input). +C IQMR = indicates an error and will switch to an LU based algorithm +C +C External routines used: +C +C Noel M. Nachtigal +C March 4, 1994 +C +C********************************************************************** +C + + integer ALG + integer KKRSZ + integer NDIM,ldr + integer NLEN + integer NLIM + integer pointer(kkrsz) +c + complex*16 AWAS(NDIM,nlen) + complex*16 rhs(ldr,kkrsz) + complex*16 VECS(nlen,kkrsz,6) + complex*16 work(nlen,6) +c + real*8 TOL +C +C Miscellaneous parameters. +C + complex*16 ZONE, ZZERO + PARAMETER (ZONE = (1.0D0,0.0D0), ZZERO = (0.0D0,0.0D0)) + real*8 DZERO + PARAMETER (DZERO = 0.0D0) +C +C Variables used by reverse communication. +C + integer CB + integer CX,cx0 + integer IERR + integer REVCOM + integer IQMR + integer n + complex*16 rho(kkrsz) + real*8 r0(kkrsz) +C +C Local variables. +C + integer I + integer J + integer INFO(4) + integer cols, cols_old +C +c ================================================================== + if(kkrsz.le.0) then + write(6,'(''WASINV: kkrsz incorrect: kkrsz='',i5)') kkrsz + stop'wasinv' + endif +c if alg.le.3 then there is no block-code. + if(alg.le.3) then + call WASINV_p(NLEN,KKRSZ,AWAS,ndim,rhs,ldr,VECS,NLIM, + & vecs(1,1,2),TOL,ALG,IQMR) + return + endif +c ================================================================== +C Compute the modified right hand side. +C +c ================================================================== + do j=1,kkrsz + call zcopy(nlen,rhs(1,j),1,vecs(1,j,2),1) + enddo + CALL ZGEMM('n','N',nlen,kkrsz,NLEN,-ZONE,AWAS,NDIM,rhs,ldr, + > zone,VECS(1,1,2),nlen) +c precondition: note that diagonal is 1 + call ztrtrs('l','n','u',nlen,kkrsz,awas,ndim,vecs(1,1,2),nlen, + & info) +c ================================================================== +C + cols = kkrsz + cx = 2 + do j=1,kkrsz + pointer(j)=j + enddo + + do n=1,nlim +C + cols_old = cols + cols = 0 + cx0 = cx + +C Loop over all the columns. + DO J = 1, cols_old +C +C Compute Jth column of the inverse. +C +C + if(n.eq.1) then +C Set up call to linear systems solver. +C Compute true residual norms, generate second starting vector. +C + INFO(1) = 0 + INFO(2) = 0 + call zcopy(nlen,vecs(1,j,2),1,work(1,2),1) + else + INFO(1) = 8 + INFO(2) = 1 + do i=1,5 + call zcopy(nlen,vecs(1,j,i),1,work(1,i),1) + enddo +c no preconditioner so we fake it + call zcopy(nlen,work(1,cx0),1,work(1,6),1) + endif +C +C Call the solver. +C + CALL zmar1 (nlen,NLEN,work(1,1),TOL,INFO, + & n,rho(j),r0(j)) +C +C Perform matrix-vector multiplications when needed. +C + IERR = INFO(1) + REVCOM = INFO(2) + + IF (REVCOM.EQ.1) THEN +c ================================================================== + CX = INFO(3) + CB = INFO(4) + cols = cols + 1 + if(j.gt.cols) then + i = pointer(cols) + pointer(cols) = pointer(j) + rho(cols) = rho(j) + r0(cols) = r0(j) + pointer(j) = i + call zcopy(nlen,vecs(1,cols,1),1,vecs(1,j,1),1) + endif + do i=1,5 + call zcopy(nlen,work(1,i),1,vecs(1,cols,i),1) + enddo + ELSE + IF (REVCOM.GT.1) THEN + WRITE (6,'(''REVCOM is greater than 1.'')') + IQMR=1 + return + END IF +C +C Check why the solver stopped (this could be more compact). +C + IF (IERR.EQ.0) THEN +c WRITE (6,'(A32)') 'The residual norm has converged.' + GO TO 20 + ELSE IF (IERR.EQ.1) THEN + WRITE (6,'(A35)') 'Invalid reverse communication call.' + ELSE IF (IERR.EQ.2) THEN + WRITE (6,'(A27)') 'Invalid inputs encountered.' + ELSE IF (IERR.EQ.4) THEN + WRITE (6,'(A31)') 'The algorithm did not converge.' + ELSE IF (IERR.EQ.8) THEN + WRITE (6,'(A25)') 'The algorithm broke down.' + END IF + WRITE (6,'(A19,I5)') 'Unknown INFO code: ', IERR + IQMR=IERR + return +c save the converged solution + 20 CALL Zcopy (NLEN,work(1,1),1,vecs(1,j,1),1) + END IF +C +C Do the next column. +C + enddo + + if(cols.eq.0) goto 30 +C +C Multiply work(1,CX) with the preconditioned matrix. +C +C if(cols.gt.1) then +C CALL ZGEMm('N','n',nlen,cols,NLEN,ZONE,AWAS,NDIM, +C > vecs(1,1,cx),nlen,ZZERO,vecs(1,1,CB),nlen) +C else +C CALL ZGEMV('N',nlen,NLEN,ZONE,AWAS,NDIM, +C > vecs(1,1,cx),1,ZZERO,vecs(1,1,CB),1) +C endif + call zcopy(nlen*cols,vecs(1,1,cx),1,vecs(1,1,6),1) + call ztrtrs('u','n','u',nlen,cols,awas,ndim,vecs(1,1,6),nlen, + & info) + do i=1,cols + do j=1,nlen + vecs(j,i,cb)=vecs(j,i,cx)-vecs(j,i,6) + enddo + enddo + call ztrtrs('l','n','u',nlen,cols,awas,ndim,vecs(1,1,cb),nlen, + & info) + do i=1,cols + do j=1,nlen + vecs(j,i,cb)=vecs(j,i,cb)+vecs(j,i,6) + enddo + enddo +c ================================================================== + enddo + iqmr=1 + return +C + 30 continue +C +C Compute the unpreconditioned solution. +C + call ztrtrs('u','n','u',nlen,kkrsz,awas,ndim,vecs,nlen,info) + do j=1,kkrsz + call zaxpy(nlen,zone,vecs(1,j,1),1,rhs(1,pointer(j)),1) + enddo + RETURN + END +C +C********************************************************************** diff --git a/src/MultipleScattering/wasinv_p.f b/src/MultipleScattering/wasinv_p.f new file mode 100755 index 000000000..40f531bad --- /dev/null +++ b/src/MultipleScattering/wasinv_p.f @@ -0,0 +1,182 @@ +C********************************************************************** +C + SUBROUTINE WASINV_p(NLEN,KKRSZ,AWAS,ndim,rhs,ldr,VECS,NLIM, + >work,TOL,ALG,IQMR) +C +C Purpose: +C +C Parameters: +C NDIM = the declared size of A (input). +C NLEN = the size of the matrix (input). +C KKRSZ = +C A = the matrix, NLEN by NLEN (input). +C rhs = the right hand sides, nlen by kkrsz +C VECS = +C NLIM = the maximum number of iterations (input). +c work = work space, nlen by 10 +C TOL = the relative convergence tolerance (input). +C ALG = the choice of algorithm (input). +C IQMR = indicates an error and will switch to an LU based algorithm +C +C External routines used: +C +C Noel M. Nachtigal +C March 4, 1994 +C +C********************************************************************** +C + INTRINSIC CDABS +c + EXTERNAL ZUCPX, ZUQMX, ZUTFX +C + integer ALG + integer KKRSZ + integer NDIM,ldr + integer NLEN + integer NLIM +c + complex*16 AWAS(NDIM,nlen) + complex*16 rhs(ldr,kkrsz) + complex*16 VECS(nlen,kkrsz) + complex*16 work(nlen,9) +c + real*8 TOL +C +C Miscellaneous parameters. +C + complex*16 ZONE, ZZERO + PARAMETER (ZONE = (1.0D0,0.0D0), ZZERO = (0.0D0,0.0D0)) + real*8 DZERO + PARAMETER (DZERO = 0.0D0) +C +C Variables used by reverse communication. +C + integer CB + integer CX + integer IERR + integer REVCOM + integer IQMR +C +C Local variables. +C + integer I + integer INLIM + integer J + integer INFO(4) +C +C Compute the modified right hand side. +C +c ===================================================================== + do j=1,kkrsz + call zcopy(nlen,rhs(1,j),1,vecs(1,j),1) + enddo + CALL ZGEMM('n','N',nlen,kkrsz,NLEN,-ZONE,AWAS,NDIM,rhs,ldr, + > zone,VECS,nlen) +c ===================================================================== +C +C Loop over all the columns. +C + DO 30 J = 1, KKRSZ +C +C Compute Jth column of the inverse. +C + call zcopy(nlen,vecs(1,j),1,work(1,2),1) +C +C Set up call to linear systems solver. +C Compute true residual norms, generate second starting vector. +C + INFO(2) = 0 +c INFO(1) = 010006 +c INFO(1) = 000006 + INFO(1) = 000000 + INLIM = NLIM +C +C Call the solver. +C + 10 IF (ALG.EQ.1) THEN + CALL ZUCPX (nlen,NLEN,INLIM,work(1,1),TOL,INFO) + ELSE IF (ALG.EQ.2) THEN + CALL ZUQMX (nlen,NLEN,INLIM,work(1,1),TOL,INFO) + ELSE IF (ALG.EQ.3) THEN + CALL ZUTFX (nlen,NLEN,INLIM,work(1,1),TOL,INFO) + END IF +C +C Perform matrix-vector multiplications when needed. +C + IERR = INFO(1) + REVCOM = INFO(2) + CX = INFO(3) + CB = INFO(4) +C +C Multiply work(1,CX) with the preconditioned matrix. +C + IF (REVCOM.EQ.1) THEN +c ================================================================== + CALL ZGEMV('N',nlen,NLEN,ZONE,AWAS,NDIM,work(1,CX),1, + > ZZERO,work(1,CB),1) +c ================================================================== + GO TO 10 +C +C Multiply work(1,CX) with the preconditioned transpose. +C + ELSE IF (REVCOM.EQ.2) THEN + CALL ZGEMV('t',nlen,NLEN,ZONE,AWAS,NDIM,work(1,CX),1, + > ZZERO,work(1,CB),1) + GO TO 10 + END IF +C +C Check why the solver stopped (this could be more compact). +C + IF (IERR.EQ.0) THEN +c WRITE (6,'(A32)') 'The residual norm has converged.' + GO TO 20 + ELSE IF (IERR.EQ.1) THEN + WRITE (6,'(A35)') 'Invalid reverse communication call.' + IQMR=IERR + return + ELSE IF (IERR.EQ.2) THEN + WRITE (6,'(A27)') 'Invalid inputs encountered.' + IQMR=IERR + return + ELSE IF (IERR.EQ.4) THEN + WRITE (6,'(A31)') 'The algorithm did not converge.' + IQMR=IERR + return + ELSE IF (IERR.EQ.8) THEN + WRITE (6,'(A25)') 'The algorithm broke down.' + IQMR=IERR + return + END IF + IF ((ALG.EQ.1).OR.(ALG.EQ.2)) THEN + IF (IERR.EQ.16) THEN + WRITE (6,'(A39)') 'An A-invariant subspace has been found + $.' + GO TO 20 + ELSE IF (IERR.EQ.32) THEN + WRITE (6,'(A41)') 'An A^T-invariant subspace has been fou + $nd.' + GO TO 20 + ELSE IF (IERR.EQ.48) THEN + WRITE (6,'(A41)') 'Both invariant subspaces have been fou + $nd.' + GO TO 20 + END IF + END IF + WRITE (6,'(A19,I5)') 'Unknown INFO code: ', IERR +C +C Compute the unpreconditioned solution. +C +c20 CALL ZAXPY (NLEN,zone,work(1,1),1,VECS(1,J),1) + 20 CALL Zcopy (NLEN,work(1,1),1,VECS(1,J),1) +C +C Do the next column. +C + 30 CONTINUE +C + do j=1,kkrsz + call zaxpy(nlen,zone,vecs(1,j),1,rhs(1,j),1) + enddo + RETURN + END +C +C********************************************************************** diff --git a/src/MultipleScattering/write_kkrmat.f b/src/MultipleScattering/write_kkrmat.f new file mode 100644 index 000000000..23382d8ee --- /dev/null +++ b/src/MultipleScattering/write_kkrmat.f @@ -0,0 +1,20 @@ + subroutine write_kkrmat(a,n,lda,e) + implicit none + + integer n,lda,i,j + complex*16 a(lda,*),e + + open(unit=42,file="kkrmat.out") + + write(42,*) n,real(e),imag(e) + + do i=1,n + do j=1,n + + write(42,*) i,j,real(a(i,j)),imag(a(i,j)) + + end do + end do + + close(42) + end diff --git a/src/MultipleScattering/zaxpby.f b/src/MultipleScattering/zaxpby.f new file mode 100755 index 000000000..5ab2f8030 --- /dev/null +++ b/src/MultipleScattering/zaxpby.f @@ -0,0 +1,170 @@ +********************************************************************** +C +C Copyright (C) 1992 Roland W. Freund and Noel M. Nachtigal +C All rights reserved. +C +C This code is part of a copyrighted package. For details, see the +C file `cpyrit.doc' in the top-level directory. +C +C ***************************************************************** +C ANY USE OF THIS CODE CONSTITUTES ACCEPTANCE OF THE TERMS OF THE +C COPYRIGHT NOTICE +C ***************************************************************** +C +C********************************************************************** +C + SUBROUTINE ZAXPBY (N,ZZ,ZA,ZX,ZB,ZY) +C +C Purpose: +C This subroutine computes ZZ = ZA * ZX + ZB * ZY. Several special +C cases are handled separately: +C ZA = 0.0, ZB = 0.0 => ZZ = 0.0 +C ZA = 0.0, ZB = 1.0 => ZZ = ZY (this is COPY) +C ZA = 0.0, ZB = -1.0 => ZZ = -ZY +C ZA = 0.0, ZB = ZB => ZZ = ZB * ZY (this is SCAL) +C ZA = 1.0, ZB = 0.0 => ZZ = ZX (this is COPY) +C ZA = 1.0, ZB = 1.0 => ZZ = ZX + ZY +C ZA = 1.0, ZB = -1.0 => ZZ = ZX - ZY +C ZA = 1.0, ZB = ZB => ZZ = ZX + ZB * ZY (this is AXPY) +C ZA = -1.0, ZB = 0.0 => ZZ = -ZX +C ZA = -1.0, ZB = 1.0 => ZZ = -ZX + ZY +C ZA = -1.0, ZB = -1.0 => ZZ = -ZX - ZY +C ZA = -1.0, ZB = ZB => ZZ = -ZX + ZB * ZY +C ZA = ZA, ZB = 0.0 => ZZ = ZA * ZX (this is SCAL) +C ZA = ZA, ZB = 1.0 => ZZ = ZA * ZX + ZY (this is AXPY) +C ZA = ZA, ZB = -1.0 => ZZ = ZA * ZX - ZY +C ZA = ZA, ZB = ZB => ZZ = ZA * ZX + ZB * ZY +C ZZ may be the same as ZX or ZY. +C +C Parameters: +C N = the dimension of the vectors (input). +C ZZ = the vector result (output). +C ZA = scalar multiplier for ZX (input). +C ZX = one of the vectors (input). +C ZB = scalar multiplier for ZY (input). +C ZY = the other vector (input). +C +C Noel M. Nachtigal +C March 23, 1993 +C +C********************************************************************** +C + INTRINSIC DIMAG, DREAL +C + integer N +c + complex*16 ZA + complex*16 ZB + complex*16 ZX(N) + complex*16 ZY(N) + complex*16 ZZ(N) +C +C Local variables. +C + integer I +c + real*8 DAI + real*8 DAR + real*8 DBI + real*8 DBR +C + IF (N.LE.0) RETURN +C + DAI = DIMAG(ZA) + DAR = DREAL(ZA) + DBI = DIMAG(ZB) + DBR = DREAL(ZB) + IF ((DAR.EQ.0.0D0).AND.(DAI.EQ.0.0D0)) THEN + IF ((DBR.EQ.0.0D0).AND.(DBI.EQ.0.0D0)) THEN +C ZA = 0.0, ZB = 0.0 => ZZ = 0.0. + DO 10 I = 1, N + ZZ(I) = (0.0D0,0.0D0) + 10 CONTINUE + ELSE IF ((DBR.EQ.1.0D0).AND.(DBI.EQ.0.0D0)) THEN +C ZA = 0.0, ZB = 1.0 => ZZ = ZY (this is COPY). + DO 20 I = 1, N + ZZ(I) = ZY(I) + 20 CONTINUE + ELSE IF ((DBR.EQ.-1.0D0).AND.(DBI.EQ.0.0D0)) THEN +C ZA = 0.0, ZB = -1.0 => ZZ = -ZY. + DO 30 I = 1, N + ZZ(I) = -ZY(I) + 30 CONTINUE + ELSE +C ZA = 0.0, ZB = ZB => ZZ = ZB * ZY (this is SCAL). + DO 40 I = 1, N + ZZ(I) = ZB * ZY(I) + 40 CONTINUE + END IF + ELSE IF ((DAR.EQ.1.0D0).AND.(DAI.EQ.0.0D0)) THEN + IF ((DBR.EQ.0.0D0).AND.(DBI.EQ.0.0D0)) THEN +C ZA = 1.0, ZB = 0.0 => ZZ = ZX (this is COPY). + DO 50 I = 1, N + ZZ(I) = ZX(I) + 50 CONTINUE + ELSE IF ((DBR.EQ.1.0D0).AND.(DBI.EQ.0.0D0)) THEN +C ZA = 1.0, ZB = 1.0 => ZZ = ZX + ZY. + DO 60 I = 1, N + ZZ(I) = ZX(I) + ZY(I) + 60 CONTINUE + ELSE IF ((DBR.EQ.-1.0D0).AND.(DBI.EQ.0.0D0)) THEN +C ZA = 1.0, ZB = -1.0 => ZZ = ZX - ZY. + DO 70 I = 1, N + ZZ(I) = ZX(I) - ZY(I) + 70 CONTINUE + ELSE +C ZA = 1.0, ZB = ZB => ZZ = ZX + ZB * ZY (this is AXPY). + DO 80 I = 1, N + ZZ(I) = ZX(I) + ZB * ZY(I) + 80 CONTINUE + END IF + ELSE IF ((DAR.EQ.-1.0D0).AND.(DAI.EQ.0.0D0)) THEN + IF ((DBR.EQ.0.0D0).AND.(DBI.EQ.0.0D0)) THEN +C ZA = -1.0, ZB = 0.0 => ZZ = -ZX + DO 90 I = 1, N + ZZ(I) = -ZX(I) + 90 CONTINUE + ELSE IF ((DBR.EQ.1.0D0).AND.(DBI.EQ.0.0D0)) THEN +C ZA = -1.0, ZB = 1.0 => ZZ = -ZX + ZY + DO 100 I = 1, N + ZZ(I) = -ZX(I) + ZY(I) + 100 CONTINUE + ELSE IF ((DBR.EQ.-1.0D0).AND.(DBI.EQ.0.0D0)) THEN +C ZA = -1.0, ZB = -1.0 => ZZ = -ZX - ZY. + DO 110 I = 1, N + ZZ(I) = -ZX(I) - ZY(I) + 110 CONTINUE + ELSE +C ZA = -1.0, ZB = ZB => ZZ = -ZX + ZB * ZY + DO 120 I = 1, N + ZZ(I) = -ZX(I) + ZB * ZY(I) + 120 CONTINUE + END IF + ELSE + IF ((DBR.EQ.0.0D0).AND.(DBI.EQ.0.0D0)) THEN +C ZA = ZA, ZB = 0.0 => ZZ = ZA * ZX (this is SCAL). + DO 130 I = 1, N + ZZ(I) = ZA * ZX(I) + 130 CONTINUE + ELSE IF ((DBR.EQ.1.0D0).AND.(DBI.EQ.0.0D0)) THEN +C ZA = ZA, ZB = 1.0 => ZZ = ZA * ZX + ZY (this is AXPY) + DO 140 I = 1, N + ZZ(I) = ZA * ZX(I) + ZY(I) + 140 CONTINUE + ELSE IF ((DBR.EQ.-1.0D0).AND.(DBI.EQ.0.0D0)) THEN +C ZA = ZA, ZB = -1.0 => ZZ = ZA * ZX - ZY. + DO 150 I = 1, N + ZZ(I) = ZA * ZX(I) - ZY(I) + 150 CONTINUE + ELSE +C ZA = ZA, ZB = ZB => ZZ = ZA * ZX + ZB * ZY. + DO 160 I = 1, N + ZZ(I) = ZA * ZX(I) + ZB * ZY(I) + 160 CONTINUE + END IF + END IF +C + RETURN + END +C +C********************************************************************** diff --git a/src/MultipleScattering/zblock_lu.F b/src/MultipleScattering/zblock_lu.F new file mode 100755 index 000000000..c6dd142df --- /dev/null +++ b/src/MultipleScattering/zblock_lu.F @@ -0,0 +1,32 @@ +#if defined(ACCELERATOR_CULA) +!#warning "Using CULA" +#include "zblock_lu_CULA.F" +#elif defined(ACCELERATOR_LIBSCI) +!#warning "Using LIBSCI" +#include "zblock_lu_cray.f" +#elif defined(ACCELERATOR_CUDA_C) +#include "zblock_lu_cuda_c.f" +#else +!#warning "Using CPU" +#include "zblock_lu_CPU.f" +c subroutine zblock_lu(a,lda,blk_sz,nblk,ipvt,mp,idcol,k) +c implicit none +c write(*,*) "unknown accelerator in zblock_lu: STOP!" +c stop +c end subroutine +#endif +c$$$ subroutine zblock_lu(a,lda,blk_sz,nblk,ipvt,mp,idcol,k) +c$$$c does a partitioning of a matrix and a partial inversion to +c$$$c get the upper subblock of the inverse +c$$$c a -- complex*16 of (lda,size) the matrix to be inverted +c$$$c where size is the sum of the all elements of blk_sz +c$$$c on return, the upper subblock of a is untouched, and +c$$$c postprocessing is needed to obtain the inverse +c$$$c blk_sz -- integer of (nblk), the size of each subblock of matrix a +c$$$c nblk -- number of blocks (number of elements in blk_sz) +c$$$c ipvt -- integer of (mp), work array +c$$$c idcol -- integer of (blk_sz(1)), if idcol(i)=idcol(j), then +c$$$c the two columns are equivalent by symmetry, and only +c$$$c the min(i,j) th column of the inverse is calculated. +c$$$c k -- returns actual number of columns in the calculated inverse + diff --git a/src/MultipleScattering/zblock_lu_CPU.f b/src/MultipleScattering/zblock_lu_CPU.f new file mode 100755 index 000000000..e7d0b61b7 --- /dev/null +++ b/src/MultipleScattering/zblock_lu_CPU.f @@ -0,0 +1,82 @@ + + subroutine zblock_lu(a,lda,blk_sz,nblk,ipvt,mp,idcol,k) +c does a partitioning of a matrix and a partial inversion to +c get the upper subblock of the inverse +c a -- complex*16 of (lda,size) the matrix to be inverted +c where size is the sum of the all elements of blk_sz +c on return, the upper subblock of a is untouched, and +c postprocessing is needed to obtain the inverse +c blk_sz -- integer of (nblk), the size of each subblock of matrix a +c nblk -- number of blocks (number of elements in blk_sz) +c ipvt -- integer of (mp), work array +c idcol -- integer of (blk_sz(1)), if idcol(i)=idcol(j), then +c the two columns are equivalent by symmetry, and only +c the min(i,j) th column of the inverse is calculated. +c k -- returns actual number of columns in the calculated inverse + implicit none + integer lda,na,mp,nblk + integer ipvt(mp),blk_sz(*) + integer i,j,k,ioff,m,joff,n,iblk,info + integer idcol(blk_sz(1)) + complex*16 a(lda,*) + complex*16 cone,cmone + parameter (cone=(1.d0,0.d0)) + parameter (cmone=(-1.d0,0.d0)) + + na=0 + do i=1,abs(nblk) + na=na+blk_sz(i) + enddo + +! write(6,*) 'idcol(1)=',idcol(1) + if(idcol(1).eq.0) then + k=1 + else +c eliminate columns that are equiv due to symmetry + k=blk_sz(1)+1 + do i=blk_sz(1),1,-1 + if(idcol(1).eq.0.or.idcol(i).eq.i) then + k=k-1 + if(k.ne.i) then + call zcopy(na-blk_sz(1),a(blk_sz(1)+1,i),1,a(blk_sz(1)+1,k),1) + endif + endif + enddo + endif + + if(nblk.gt.0) then +c Do block LU + n=blk_sz(nblk) + joff=na-n + do iblk=nblk,2,-1 + m=n + ioff=joff + n=blk_sz(iblk-1) + joff=joff-n +c invert the diagonal blk_sz(iblk) x blk_sz(iblk) block + call zgetrf(m,m,a(ioff+1,ioff+1),lda,ipvt,info) + if(info.ne.0) then + write(*,*) "zgetrf info=",info," ioff=",ioff + end if +c calculate the inverse of above multiplying the row block +c blk_sz(iblk) x ioff + call zgetrs('n',m,ioff,a(ioff+1,ioff+1),lda,ipvt, + & a(ioff+1,1),lda,info) + if(info.ne.0) then + write(*,*) "zgetrs info=",info," ioff=",ioff + end if + if(iblk.gt.2) then + call zgemm('n','n',n,ioff-k+1,na-ioff,cmone,a(joff+1,ioff+1),lda, + & a(ioff+1,k),lda,cone,a(joff+1,k),lda) + call zgemm('n','n',joff,n,na-ioff,cmone,a(1,ioff+1),lda, + & a(ioff+1,joff+1),lda,cone,a(1,joff+1),lda) + endif + enddo + call zgemm('n','n',blk_sz(1),blk_sz(1)-k+1,na-blk_sz(1),cmone, + & a(1,blk_sz(1)+1),lda,a(blk_sz(1)+1,k),lda,cone,a,lda) + endif ! nblk.gt.0 + + k=blk_sz(1)-k+1 +! write(6,*) "k out =",k + return + end diff --git a/src/MultipleScattering/zblock_lu_CULA.F b/src/MultipleScattering/zblock_lu_CULA.F new file mode 100644 index 000000000..02262c507 --- /dev/null +++ b/src/MultipleScattering/zblock_lu_CULA.F @@ -0,0 +1,191 @@ + integer function idx2f(i,j,ld) + implicit none + integer i,j,ld + + idx2f=((((j)-1)*(ld))+((i)-1)) + end function + + subroutine zblock_lu(a,lda,blk_sz,nblk,ipvt,mp,idcol,k) +c does a partitioning of a matrix and a partial inversion to +c get the upper subblock of the inverse +c a -- complex*16 of (lda,size) the matrix to be inverted +c where size is the sum of the all elements of blk_sz +c on return, the upper subblock of a is untouched, and +c postprocessing is needed to obtain the inverse +c blk_sz -- integer of (nblk), the size of each subblock of matrix a +c nblk -- number of blocks (number of elements in blk_sz) +c ipvt -- integer of (mp), work array +c idcol -- integer of (blk_sz(1)), if idcol(i)=idcol(j), then +c the two columns are equivalent by symmetry, and only +c the min(i,j) th column of the inverse is calculated. +c k -- returns actual number of columns in the calculated inverse + +C cuBLAS ZGEMM, CULA driver api GGD + + implicit none + integer lda,na,mp,nblk + integer ipvt(mp),blk_sz(*) + integer i,j,k,ioff,m,joff,n,iblk,info + integer idcol(blk_sz(1)) + complex*16 a(lda,*) + complex*16 cone,cmone + parameter (cone=(1.d0,0.d0)) + parameter (cmone=(-1.d0,0.d0)) + +! integer sizeof_Z,sizeof_I +! parameter (sizeof_Z=16) +! parameter (sizeof_I=8) + + external idx2f + integer idx2f + external cula_device_zgetrf,cula_device_zgetrs + external cula_zgetrf,cula_zgetrs + external CULA_GET_ERROR_INFO, + & CULA_GET_ERROR_INFO_STRING, + & CULA_GET_LAST_STATUS + integer cula_device_zgetrf,cula_device_zgetrs + integer cula_zgetrf,cula_zgetrs + integer CULA_GET_ERROR_INFO, + & CULA_GET_ERROR_INFO_STRING, + & CULA_GET_LAST_STATUS + external cublas_alloc,cublas_set_matrix,cublas_get_matrix + integer cublas_alloc,cublas_set_matrix,cublas_get_matrix + integer culaStatus,culaError + character culaErrorStr(100) + external get_dev_m,get_dev_ipvt + integer*8 get_dev_ipvt + integer*8 get_dev_m + integer*8 devA, devIPVT + + include '../Accelerator/CULA_Common.h' + + devA = get_dev_m() + devIPVT = get_dev_ipvt() + + na=0 + do i=1,abs(nblk) + na=na+blk_sz(i) + enddo + k=1 + +! write(*,*) 'entering zblock_lu (CULA)' + +!! allocate device memory +! info = cublas_alloc(lda*na, sizeof_Z, devA) +! write(*,*) 'cublas_alloc of A :',info +! info = cublas_alloc(lda,sizeof_I,devIPVT) +! write(*,*) 'cublas_alloc of ipvt :',info +! write(*,*) 'devA: ', devA +! write(*,*) 'devipvt: ', devIPVT + +#if !defined(BUILDKKRMATRIX_GPU) + + if(idcol(1).eq.0) then + k=1 + else +c eliminate columns that are equiv due to symmetry + k=blk_sz(1)+1 + do i=blk_sz(1),1,-1 + if(idcol(1).eq.0.or.idcol(i).eq.i) then + k=k-1 + if(k.ne.i) then + call zcopy(na-blk_sz(1),a(blk_sz(1)+1,i),1,a(blk_sz(1)+1,k),1) + endif + endif + enddo + endif + +! copy matrix to device + info = cublas_set_matrix(lda, na, sizeof_Z, a, lda, devA, lda) +! write(*,*) 'cublas_set_matrix of A :',info +#else + k=1 +#endif + + if(nblk.gt.0) then +c Do block LU + n=blk_sz(nblk) + joff=na-n + do iblk=nblk,2,-1 +! write(*,*) 'iblk = ',iblk + m=n + ioff=joff + n=blk_sz(iblk-1) + joff=joff-n +c invert the diagonal blk_sz(iblk) x blk_sz(iblk) block +! write(*,*) m,ioff,lda,idx2f(ioff+1,ioff+1,lda) +! call zgetrf(m,m,a(ioff+1,ioff+1),lda,ipvt,info) +! info = cula_zgetrf(m,m,a(ioff+1,ioff+1),lda,ipvt) + info = cula_device_zgetrf(m,m, + & devA+idx2f(ioff+1,ioff+1,lda)*sizeof_Z,lda,devIPVT) + culaStatus = cula_get_last_status() + if (culaStatus.ne.0) then + call CULA_GET_STATUS_STRING(culaStatus) + culaError = CULA_GET_ERROR_INFO() + culaStatus = CULA_GET_ERROR_INFO_STRING(culaStatus,culaError, + & culaErrorStr,100) + write(*,*)"zgetrf error: ",culaError + write(*,*) culaErrorStr + STOP !JL May want more graceful shutdown + endif +! write(*,*) 'zgetrf info=',info +c calculate the inverse of above multiplying the row block +c blk_sz(iblk) x ioff +! call zgetrs('n',m,ioff,a(ioff+1,ioff+1),lda,ipvt, +! & a(ioff+1,1),lda,info) +! info = cula_zgetrs('n',m,ioff,a(ioff+1,ioff+1),lda,ipvt, +! & a(ioff+1,1),lda) + info = cula_device_zgetrs('n',m,ioff, + & devA+idx2f(ioff+1,ioff+1,lda)*sizeof_Z,lda,devIPVT, + & devA+idx2f(ioff+1,1,lda)*sizeof_Z,lda) + culaStatus = cula_get_last_status() + if (culaStatus.ne.0) then + call CULA_GET_STATUS_STRING(culaStatus) + culaError = CULA_GET_ERROR_INFO() + culaStatus = CULA_GET_ERROR_INFO_STRING(culaStatus,culaError, + & culaErrorStr,100) + write(*,*)"zgetrs error: ",culaError + write(*,*) culaErrorStr + STOP !JL May want more graceful shutdown + endif + if(iblk.gt.2) then +! call zgemm('n','n',n,ioff-k+1,na-ioff,cmone,a(joff+1,ioff+1),lda, +! & a(ioff+1,k),lda,cone,a(joff+1,k),lda) +! info = cublas_set_matrix(lda, na, sizeof_Z, a, lda, devA, lda) + call cublas_zgemm('n','n',n,ioff-k+1,na-ioff,cmone, + & devA+idx2f(joff+1,ioff+1,lda)*sizeof_Z,lda, + & devA+idx2f(ioff+1,k,lda)*sizeof_Z,lda,cone, + & devA+idx2f(joff+1,k,lda)*sizeof_Z,lda) +! info = cublas_get_matrix(lda, na, sizeof_Z, devA, lda, a, lda) +! call zgemm('n','n',joff,n,na-ioff,cmone,a(1,ioff+1),lda, +! & a(ioff+1,joff+1),lda,cone,a(1,joff+1),lda) +! info = cublas_set_matrix(lda, na, sizeof_Z, a, lda, devA, lda) + call cublas_zgemm('n','n',joff,n,na-ioff,cmone, + & devA+idx2f(1,ioff+1,lda)*sizeof_Z,lda, + & devA+idx2f(ioff+1,joff+1,lda)*sizeof_Z,lda,cone, + & devA+idx2f(1,joff+1,lda)*sizeof_Z,lda) +! info = cublas_get_matrix(lda, na, sizeof_Z, devA, lda, a, lda) + endif + enddo +! call zgemm('n','n',blk_sz(1),blk_sz(1)-k+1,na-blk_sz(1),cmone, +! & a(1,blk_sz(1)+1),lda,a(blk_sz(1)+1,k),lda,cone,a,lda) +! info = cublas_set_matrix(lda, na, sizeof_Z, a, lda, devA, lda) + call cublas_zgemm('n','n',blk_sz(1),blk_sz(1)-k+1,na-blk_sz(1), + & cmone,devA+idx2f(1,blk_sz(1)+1,lda)*sizeof_Z,lda, + & devA+idx2f(blk_sz(1)+1,k,lda)*sizeof_Z,lda,cone,devA,lda) +! info = cublas_get_matrix(lda, na, sizeof_Z, devA, lda, a, lda) +! info = cublas_get_matrix(lda,blk_sz(1),sizeof_Z,devA,lda,a,lda) + info = + & cublas_get_matrix(blk_sz(1),blk_sz(1),sizeof_Z,devA,lda,a,lda) + endif ! nblk.gt.0 + +! info = cublas_get_matrix(lda, na, sizeof_Z, devA, lda, a, lda) + +! call cublas_free(devA) +! call cublas_free(devIPVT) + +! write(*,*) 'leaving zblock_lu (CULA)' + + k=blk_sz(1)-k+1 + return + end diff --git a/src/MultipleScattering/zblock_lu_LIBSCI.f b/src/MultipleScattering/zblock_lu_LIBSCI.f new file mode 100755 index 000000000..36ac25de8 --- /dev/null +++ b/src/MultipleScattering/zblock_lu_LIBSCI.f @@ -0,0 +1,109 @@ + + integer function idx2f(i,j,ld) + implicit none + integer i,j,ld + + idx2f=((((j)-1)*(ld))+((i)-1)) + end function + + subroutine zblock_lu(a,lda,blk_sz,nblk,ipvt,mp,idcol,k) +c does a partitioning of a matrix and a partial inversion to +c get the upper subblock of the inverse +c a -- complex*16 of (lda,size) the matrix to be inverted +c where size is the sum of the all elements of blk_sz +c on return, the upper subblock of a is untouched, and +c postprocessing is needed to obtain the inverse +c blk_sz -- integer of (nblk), the size of each subblock of matrix a +c nblk -- number of blocks (number of elements in blk_sz) +c ipvt -- integer of (mp), work array +c idcol -- integer of (blk_sz(1)), if idcol(i)=idcol(j), then +c the two columns are equivalent by symmetry, and only +c the min(i,j) th column of the inverse is calculated. +c k -- returns actual number of columns in the calculated inverse + use iso_c_binding + implicit none + +! integer*8 dev_ptr + integer sizeof_Z,sizeof_I,ierr + parameter (sizeof_Z=16) + parameter (sizeof_I=8) + + + integer lda,na,mp,nblk + integer ipvt(mp),blk_sz(*) + integer i,j,k,ioff,m,joff,n,iblk,info + integer idcol(blk_sz(1)) + complex*16 a(lda,*) + complex*16 cone,cmone + parameter (cone=(1.d0,0.d0)) + parameter (cmone=(-1.d0,0.d0)) + external libsci_acc_alloc, libsci_acc_free, idx2f, + & libsci_acc_getmatrix + integer libsci_acc_alloc,libsci_acc_free + integer idx2f, libsci_acc_getmatrix + + + na=0 + do i=1,abs(nblk) + na=na+blk_sz(i) + enddo +c eliminate columns that are equiv due to symmetry + k=blk_sz(1)+1 + do i=blk_sz(1),1,-1 + if(idcol(1).eq.0.or.idcol(i).eq.i) then + k=k-1 + if(k.ne.i) then + call zcopy(na-blk_sz(1),a(blk_sz(1)+1,i),1, + & a(blk_sz(1)+1,k),1) + endif + endif + enddo + + + + if(nblk.gt.0) then +c Do block LU + n=blk_sz(nblk) + joff=na-n + do iblk=nblk,2,-1 + m=n + ioff=joff + n=blk_sz(iblk-1) + joff=joff-n +c invert the diagonal blk_sz(iblk) x blk_sz(iblk) block +c calculate the inverse of above multiplying the row block +c blk_sz(iblk) x ioff + call zgesv_lsms( m, ioff, a(ioff+1,ioff+1),lda, ipvt, + & a(ioff+1,1),lda,info) +! call zgetrf(m,m,a(ioff+1,ioff+1),lda, ipvt,info) +! call zgetrs('n',m,ioff,a(ioff+1,ioff+1),lda,ipvt, +! & a(ioff+1,1),lda,info) + +! +! Not executed in libsci_acc version +! + if(iblk.gt.2) then + call zgemm('n','n',n,ioff-k+1,na-ioff,cmone,a(joff+1,ioff+1),lda, + & a(ioff+1,k),lda,cone,a(joff+1,k),lda) + call zgemm('n','n',joff,n,na-ioff,cmone,a(1,ioff+1),lda, + & a(ioff+1,joff+1),lda,cone,a(1,joff+1),lda) + endif +! +! +! + enddo + +! call zgemm_acc('n','n',blk_sz(1),blk_sz(1)-k+1,na-blk_sz(1),cmone, +! & dev_ptr + idx2f(1,blk_sz(1)+1,na)*sizeof_Z,na, +! & dev_ptr + idx2f(blk_sz(1)+1,k,na)*sizeof_Z,na, +! & cone, dev_ptr, na) +! ierr = libsci_acc_getmatrix( blk_sz(1), blk_sz(1), sizeof_Z, +! & dev_ptr, na, a, lda ) + call zgemm_cpu('n','n',blk_sz(1),blk_sz(1)-k+1,na-blk_sz(1),cmone, + & a(1,blk_sz(1)+1),lda,a(blk_sz(1)+1,k),lda,cone,a,lda) + endif ! nblk.gt.0 + + k=blk_sz(1)-k+1 + + return + end diff --git a/src/MultipleScattering/zblock_lu_cpp.cpp b/src/MultipleScattering/zblock_lu_cpp.cpp new file mode 100644 index 000000000..c0e8d9e91 --- /dev/null +++ b/src/MultipleScattering/zblock_lu_cpp.cpp @@ -0,0 +1,175 @@ +// C++ version of zblock_lu +// to be modified for use with cublas + +#include +#include + +extern "C" { +void zgetrf_(int *m, int *n, Complex *a, int *lda, int *ipvt, int *info); +void zgetrs_(const char *, int *m, int *ioff, Complex *a, int *lda, int *ipvt, Complex *b, int *ldb, int *info); +void zgemm_(const char *, const char *, int *m, int *n, int *k, Complex *alpha, Complex *a, int *lda, Complex *b, int *ldb, Complex *beta, Complex *c, int *ldc); +} + +// a: input matrix -> output in block 1 of a +// +// returns: k -- returns actual number of columns in the calculated inverse + +int zblock_lu_cpp(Matrix &a, int *blk_sz, int nblk, int *ipvt, int *idcol) +{ + Complex cone = 1.0; + Complex cmone = -1.0; + int k, lda, info; + // total size of matrix = sum of block sizes + lda = a.l_dim(); + int na=0; + for(int i=0; i=0; i--) + { + if(idcol[0]==0 || idcol[i] == i+1) // i+1 due to Fortran convention + { + k=k-1; + if(k!=i) + { + // zcopy(na-blk_sz[0],&a(blk_sz[0],i),1,&a(blk_sz[0],k),1); + for(int j = 0; j0) + { +// Do block LU + int n=blk_sz[nblk-1]; + int joff=na-n; + for(int iblk=nblk-1; iblk>=1; iblk--) + { + int m=n; + int ioff=joff; + n=blk_sz[iblk-1]; + joff=joff-n; +// invert the diagonal blk_sz(iblk) x blk_sz(iblk) block + zgetrf_(&m, &m, &a(ioff,ioff), &lda, ipvt, &info); + if(info!=0) + { + printf("zgetrf info=%d ioff=%d\n",info,ioff); + } +// calculate the inverse of above multiplying the row block +// blk_sz(iblk) x ioff + zgetrs_("n", &m, &ioff, &a(ioff,ioff), &lda, ipvt, &a(ioff,0), &lda, &info); + if(info!=0) + { + printf("zgetrs info=%d ioff=%d\n",info,ioff); + } + if(iblk > 1) + { + int off1 = ioff-k+1; + int off2 = na-ioff; + zgemm_("n", "n", &n, &off1, &off2, &cmone, &a(joff,ioff), &lda, &a(ioff,k-1), &lda, &cone, &a(joff,k-1), &lda); + zgemm_("n", "n", &joff, &n, &off2, &cmone, &a(0,ioff), &lda, &a(ioff,joff), &lda, &cone, &a(0,joff), &lda); + } + } + int off3 = blk_sz[0]-k+1; + int off4 = na-blk_sz[0]; + zgemm_("n", "n", &blk_sz[0], &off3, &off4, &cmone, &a(0,blk_sz[0]), &lda, &a(blk_sz[0],k-1), &lda, &cone, &a(0,0), &lda); + } + +// write(6,*) "k out =",k + return blk_sz[0]-k+1; +} + +/* + + subroutine zblock_lu(a,lda,blk_sz,nblk,ipvt,mp,idcol,k) +c does a partitioning of a matrix and a partial inversion to +c get the upper subblock of the inverse +c a -- complex*16 of (lda,size) the matrix to be inverted +c where size is the sum of the all elements of blk_sz +c on return, the upper subblock of a is untouched, and +c postprocessing is needed to obtain the inverse +c blk_sz -- integer of (nblk), the size of each subblock of matrix a +c nblk -- number of blocks (number of elements in blk_sz) +c ipvt -- integer of (mp), work array +c idcol -- integer of (blk_sz(1)), if idcol(i)=idcol(j), then +c the two columns are equivalent by symmetry, and only +c the min(i,j) th column of the inverse is calculated. +c k -- returns actual number of columns in the calculated inverse + implicit none + integer lda,na,mp,nblk + integer ipvt(mp),blk_sz(*) + integer i,j,k,ioff,m,joff,n,iblk,info + integer idcol(blk_sz(1)) + complex*16 a(lda,*) + complex*16 cone,cmone + parameter (cone=(1.d0,0.d0)) + parameter (cmone=(-1.d0,0.d0)) + + na=0 + do i=1,abs(nblk) + na=na+blk_sz(i) + enddo + +! write(6,*) 'idcol(1)=',idcol(1) + if(idcol(1).eq.0) then + k=1 + else +c eliminate columns that are equiv due to symmetry + k=blk_sz(1)+1 + do i=blk_sz(1),1,-1 + if(idcol(1).eq.0.or.idcol(i).eq.i) then + k=k-1 + if(k.ne.i) then + call zcopy(na-blk_sz(1),a(blk_sz(1)+1,i),1,a(blk_sz(1)+1,k),1) + endif + endif + enddo + endif + + if(nblk.gt.0) then +c Do block LU + n=blk_sz(nblk) + joff=na-n + do iblk=nblk,2,-1 + m=n + ioff=joff + n=blk_sz(iblk-1) + joff=joff-n +c invert the diagonal blk_sz(iblk) x blk_sz(iblk) block + call zgetrf(m,m,a(ioff+1,ioff+1),lda,ipvt,info) + if(info.ne.0) then + write(*,*) "zgetrf info=",info," ioff=",ioff + end if +c calculate the inverse of above multiplying the row block +c blk_sz(iblk) x ioff + call zgetrs('n',m,ioff,a(ioff+1,ioff+1),lda,ipvt, + & a(ioff+1,1),lda,info) + if(info.ne.0) then + write(*,*) "zgetrs info=",info," ioff=",ioff + end if + if(iblk.gt.2) then + call zgemm('n','n',n,ioff-k+1,na-ioff,cmone,a(joff+1,ioff+1),lda, + & a(ioff+1,k),lda,cone,a(joff+1,k),lda) + call zgemm('n','n',joff,n,na-ioff,cmone,a(1,ioff+1),lda, + & a(ioff+1,joff+1),lda,cone,a(1,joff+1),lda) + endif + enddo + call zgemm('n','n',blk_sz(1),blk_sz(1)-k+1,na-blk_sz(1),cmone, + & a(1,blk_sz(1)+1),lda,a(blk_sz(1)+1,k),lda,cone,a,lda) + endif ! nblk.gt.0 + + k=blk_sz(1)-k+1 +! write(6,*) "k out =",k + return + end + + +*/ diff --git a/src/MultipleScattering/zblock_lu_cray.f b/src/MultipleScattering/zblock_lu_cray.f new file mode 100644 index 000000000..3f8403c8e --- /dev/null +++ b/src/MultipleScattering/zblock_lu_cray.f @@ -0,0 +1,116 @@ + integer function idx2f(i,j,ld) + implicit none + integer i,j,ld + + idx2f=((((j)-1)*(ld))+((i)-1)) + end function + + subroutine zblock_lu(a,lda,blk_sz,nblk,ipvt,mp,idcol,k) +c does a partitioning of a matrix and a partial inversion to +c get the upper subblock of the inverse +c a -- complex*16 of (lda,size) the matrix to be inverted +c where size is the sum of the all elements of blk_sz +c on return, the upper subblock of a is untouched, and +c postprocessing is needed to obtain the inverse +c blk_sz -- integer of (nblk), the size of each subblock of matrix a +c nblk -- number of blocks (number of elements in blk_sz) +c ipvt -- integer of (mp), work array +c idcol -- integer of (blk_sz(1)), if idcol(i)=idcol(j), then +c the two columns are equivalent by symmetry, and only +c the min(i,j) th column of the inverse is calculated. +c k -- returns actual number of columns in the calculated inverse + + + implicit none + integer lda,na,mp,nblk + integer ipvt(mp),blk_sz(*) + integer i,j,k,ioff,m,joff,n,iblk,info + integer idcol(blk_sz(1)) + complex*16 a(lda,*) + complex*16 cone,cmone + parameter (cone=(1.d0,0.d0)) + parameter (cmone=(-1.d0,0.d0)) + + + external idx2f + integer idx2f + external cublas_alloc,cublas_set_matrix,cublas_get_matrix + external cublas_free + integer cublas_alloc,cublas_set_matrix,cublas_get_matrix + integer cublas_free + + integer sizeof_Z,sizeof_I + parameter (sizeof_Z=16) + parameter (sizeof_I=8) + integer*8 devA, get_dev_m +! include 'CULA_Common.h' +! include '../Accelerator/CULA_Common.h' + + devA = get_dev_m() + + na=0 + do i=1,abs(nblk) + na=na+blk_sz(i) + enddo + k=1 + +! copy matrix to device +! info = CUBLAS_ALLOC(lda*na, sizeof_Z , devA) +! info = cublas_set_matrix(lda, na, sizeof_Z, a, lda, devA, lda) +! write(*,*) 'cublas_set_matrix of A :',info, na + +!! #endif + + if(nblk.gt.0) then +c Do block LU + n=blk_sz(nblk) + joff=na-n + do iblk=nblk,2,-1 +! write(*,*) 'iblk = ',iblk + m=n + ioff=joff + n=blk_sz(iblk-1) + joff=joff-n +c invert the diagonal blk_sz(iblk) x blk_sz(iblk) block +! write(*,*) m,ioff,lda,idx2f(ioff+1,ioff+1,lda) +! call zgetrf(m,m,a(ioff+1,ioff+1),lda,ipvt,info) +! write(*,*) 'm',m,'m',m,'lda',lda + call zgetrf_acc2(m,m, + & devA+idx2f(ioff+1,ioff+1,lda)*sizeof_Z,lda, + & IPVT,info) +! write(*,*) 'zgetrf info=',info +c calculate the inverse of above multiplying the row block +c blk_sz(iblk) x ioff +! call zgetrs('n',m,ioff,a(ioff+1,ioff+1),lda,ipvt, +! & a(ioff+1,1),lda,info) + call zgetrs_acc2('n',m,ioff, + & devA+idx2f(ioff+1,ioff+1,lda)*sizeof_Z,lda,IPVT, + & devA+idx2f(ioff+1,1,lda)*sizeof_Z,lda,info) + if(iblk.gt.2) then +! call zgemm('n','n',n,ioff-k+1,na-ioff,cmone,a(joff+1,ioff+1),lda, +! & a(ioff+1,k),lda,cone,a(joff+1,k),lda) + call zgemm_acc2('n','n',n,ioff-k+1,na-ioff,cmone, + & devA+idx2f(joff+1,ioff+1,lda)*sizeof_Z,lda, + & devA+idx2f(ioff+1,k,lda)*sizeof_Z,lda,cone, + & devA+idx2f(joff+1,k,lda)*sizeof_Z,lda) +! call zgemm('n','n',joff,n,na-ioff,cmone,a(1,ioff+1),lda, +! & a(ioff+1,joff+1),lda,cone,a(1,joff+1),lda) + call zgemm_acc2('n','n',joff,n,na-ioff,cmone, + & devA+idx2f(1,ioff+1,lda)*sizeof_Z,lda, + & devA+idx2f(ioff+1,joff+1,lda)*sizeof_Z,lda,cone, + & devA+idx2f(1,joff+1,lda)*sizeof_Z,lda) +! info = cublas_get_matrix(lda, na, sizeof_Z, devA, lda, a, lda) + endif + enddo +! call zgemm('n','n',blk_sz(1),blk_sz(1)-k+1,na-blk_sz(1),cmone, +! & a(1,blk_sz(1)+1),lda,a(blk_sz(1)+1,k),lda,cone,a,lda) + call zgemm_acc2('n','n',blk_sz(1),blk_sz(1)-k+1,na-blk_sz(1), + & cmone,devA+idx2f(1,blk_sz(1)+1,lda)*sizeof_Z,lda, + & devA+idx2f(blk_sz(1)+1,k,lda)*sizeof_Z,lda,cone,devA,lda) + info = cublas_get_matrix(lda,blk_sz(1),sizeof_Z,devA,lda,a,lda) +! info = cublas_free( devA ) + endif ! nblk.gt.0 + + k=blk_sz(1)-k+1 + return + end diff --git a/src/MultipleScattering/zblock_lu_cublas.cpp b/src/MultipleScattering/zblock_lu_cublas.cpp new file mode 100644 index 000000000..7ca1cd023 --- /dev/null +++ b/src/MultipleScattering/zblock_lu_cublas.cpp @@ -0,0 +1,132 @@ +// C++ version of zblock_lu +// to be modified for use with cublas + +#if defined(ACCELERATOR_CUBLAS) + +#include + +#include +#include +#include "Accelerator/DeviceStorage.hpp" + +#define IDX2C(i,j,ld) (((j)*(ld))+(i)) + +extern "C" { +void zgetrf_(int *m, int *n, Complex *a, int *lda, int *ipvt, int *info); +void zgetrs_(const char *, int *m, int *ioff, Complex *a, int *lda, int *ipvt, Complex *b, int *ldb, int *info); +void zgemm_(const char *, const char *, int *m, int *n, int *k, Complex *alpha, Complex *a, int *lda, Complex *b, int *ldb, Complex *beta, Complex *c, int *ldc); +} + +// a: input matrix -> output in block 1 of a +// +// returns: k -- returns actual number of columns in the calculated inverse + +int zblock_lu_cublas(cublasHandle_t handle, Matrix &a, int *blk_sz, int nblk, int *ipvt, int *idcol) +{ + int k; + int info[1]; + int lda=a.l_dim(); + const cuDoubleComplex cone = make_cuDoubleComplex( 1.0, 0.0); + const cuDoubleComplex cmone = make_cuDoubleComplex(-1.0, 0.0); + cuDoubleComplex *aAddr, *bAddr; + cublasStatus_t cublasStat; + // total size of matrix = sum of block sizes + int na=0; + for(int i=0; i=0; i--) + { + if(idcol[0]==0 || idcol[i] == i+1) // i+1 due to Fortran convention + { + k=k-1; + if(k!=i) + { + cublasZcopy(handle, na-blk_sz[0], (cuDoubleComplex*)&a(blk_sz[0],i), 1, (cuDoubleComplex*)&a(blk_sz[0],k), 1); // check k vs k-1 ? + } + } + } + } + + + + if(nblk>0) + { +// Do block LU + int n=blk_sz[nblk-1]; + int joff=na-n; + for(int iblk=nblk-1; iblk>=1; iblk--) + { + int m=n; + int ioff=joff; + n=blk_sz[iblk-1]; + joff=joff-n; +// invert the diagonal blk_sz(iblk) x blk_sz(iblk) block + // aAddr= (cuDoubleComplex*) &a(ioff,ioff); + aAddr= (cuDoubleComplex*) &devA[IDX2C(ioff,ioff,lda)]; + cublasZgetrfBatched(handle, m, &aAddr, lda, ipvt, info, 1); + // cudaDeviceSynchronize(); + // zgetrf_(&m, &m, &a(ioff,ioff), &lda, ipvt, info); + if(*info!=0) + { + printf("zgetrf info=%d ioff=%d\n",*info,ioff); + } +// calculate the inverse of above multiplying the row block +// blk_sz(iblk) x ioff + // aAddr = (cuDoubleComplex*) &a(ioff,ioff); + // bAddr = (cuDoubleComplex*) &a(ioff,0); + aAddr = (cuDoubleComplex*) &devA[IDX2C(ioff,ioff,lda)]; + bAddr = (cuDoubleComplex*) &devA[IDX2C(ioff,0,lda)]; + cublasZgetrsBatched(handle, CUBLAS_OP_N, m, ioff, (const cuDoubleComplex**)&aAddr, lda, ipvt, &bAddr, lda, info, 1); + // cudaDeviceSynchronize(); + // zgetrs_("n", &m, &ioff, &a(ioff,ioff), &lda, ipvt, &a(ioff,0), &lda, info); + if(*info!=0) + { + printf("zgetrs info=%d ioff=%d\n",*info,ioff); + } + if(iblk>1) + { + cublasZgemm(handle, CUBLAS_OP_N,CUBLAS_OP_N, n, ioff-k+1 ,na-ioff, &cmone, (cuDoubleComplex*)&devA[IDX2C(joff,ioff,lda)], lda, + (cuDoubleComplex*)&devA[IDX2C(ioff,k-1,lda)], lda, &cone, (cuDoubleComplex*)&devA[IDX2C(joff,k-1,lda)], lda); + // cudaDeviceSynchronize(); + cublasZgemm(handle, CUBLAS_OP_N,CUBLAS_OP_N, joff, n, na-ioff, &cmone, (cuDoubleComplex*)&devA[IDX2C(0,ioff,lda)], lda, + (cuDoubleComplex*)&devA[IDX2C(ioff,joff,lda)], lda, &cone, (cuDoubleComplex*)&devA[IDX2C(0,joff,lda)], lda); + // cudaDeviceSynchronize(); + // int off1 = ioff-k+1; + // int off2 = na-ioff; + // zgemm_("n", "n", &n, &off1, &off2, (Complex *)&cmone, &a(joff,ioff), &lda, &a(ioff,k-1), &lda, (Complex *)&cone, &a(joff,k-1), &lda); + // zgemm_("n", "n", &joff, &n, &off2, (Complex *)&cmone, &a(0,ioff), &lda, &a(ioff,joff), &lda, (Complex *)&cone, &a(0,joff), &lda); + + } + } + cublasZgemm(handle, CUBLAS_OP_N,CUBLAS_OP_N, blk_sz[0], blk_sz[0]-k+1, na-blk_sz[0], &cmone, (cuDoubleComplex*)&devA[IDX2C(0,blk_sz[0],lda)], lda, + (cuDoubleComplex*)&devA[IDX2C(blk_sz[0],k-1,lda)], lda, &cone, (cuDoubleComplex*)&devA[IDX2C(0,0,lda)], lda); + // cudaDeviceSynchronize(); + // int off3 = blk_sz[0]-k+1; + // int off4 = na-blk_sz[0]; + // zgemm_("n", "n", &blk_sz[0], &off3, &off4, (Complex *)&cmone, &a(0,blk_sz[0]), &lda, &a(blk_sz[0],k-1), &lda, (Complex *)&cone, &a(0,0), &lda); + + cublasStat = cublasGetMatrix( blk_sz[0], blk_sz[0], sizeof(cuDoubleComplex), devA, lda, &a(0,0), lda); + + } + + + + return k=blk_sz[0]-k+1; +} + +#endif + diff --git a/src/MultipleScattering/zblock_lu_cuda_c.f b/src/MultipleScattering/zblock_lu_cuda_c.f new file mode 100644 index 000000000..66ae2d530 --- /dev/null +++ b/src/MultipleScattering/zblock_lu_cuda_c.f @@ -0,0 +1,22 @@ +! Notes +! + + subroutine zblock_lu(a,lda,blk_sz,nblk,ipvt,mp,idcol,k) + + implicit none + integer lda,mp,nblk,k + integer ipvt(mp),blk_sz(*) + integer idcol(blk_sz(1)) + complex*16 a(lda,*) + + external zblock_lu_cuda_c + +! write (*,*), "Inside zblock_lu_cuda_c.f !!! " + + call zblock_lu_cuda_c + & ( a, lda, blk_sz, nblk, ipvt, mp, idcol, k) + + return + + end + diff --git a/src/MultipleScattering/zmar1.f b/src/MultipleScattering/zmar1.f new file mode 100755 index 000000000..bc15c8ece --- /dev/null +++ b/src/MultipleScattering/zmar1.f @@ -0,0 +1,161 @@ + SUBROUTINE Zmar1 (NDIM,NLEN,VECS,TOL,INFO, + & N,RHO,R0) +C +C Purpose: +C This subroutine uses the MAR1 algorithm to solve linear systems. +C It runs the algorithm to convergence or until a user-specified +C limit on the number of iterations is reached. +C +C The code is set up to solve the system A x = b with initial +C guess x_0 = 0. Here A x = b denotes the preconditioned system, +C and it is connected with the original system as follows. Let +C B y = c be the original unpreconditioned system to be solved, and +C let y_0 be an arbitrary initial guess for its solution. Then: +C A x = b, where A = M_1^{-1} B M_2^{-1}, +C x = M_2 (y - y_0), b = M_1^{-1} (c - B y_0). +C Here M = M_1 M_2 is the preconditioner. +C +C To recover the final iterate y_n for the original system B y = c +C from the final iterate x_n for the preconditioned system A x = b, +C set +C y_n = y_0 + M_2^{-1} x_n. +C +C Parameters: +C For a description of the parameters, see the file `zutfx.doc' in +C the current directory. +C +C External routines used: +C double precision dlamch(ch) +C LAPACK routine, computes machine-related constants. +C double precision dznrm2(n,x,incx) +C BLAS-1 routine, computes the 2-norm of x. +C subroutine zaxpby(n,z,a,x,b,y) +C Library routine, computes z = a * x + b * y. +C double precision zdotu(n,x,incx,y,incy) +C BLAS-1 routine, computes y' * x. +C subroutine zrandn(n,x,seed) +C Library routine, fills x with random numbers. +C +C Noel M. Nachtigal +C April 13, 1993 +C +C********************************************************************** +C +c + implicit none + real*8 DLAMCH + real*8 DZNRM2 + real*8 TOL +C + integer INFO(4) + integer NDIM + integer NLEN +c + complex*16 ZDOTc + complex*16 VECS(NDIM,9) +C +C Miscellaneous parameters. +C + complex*16 ZONE + complex*16 ZZERO + PARAMETER (ZONE = (1.0D0,0.0D0),ZZERO = (0.0D0,0.0D0)) +c + real*8 DONE + real*8 DZERO + PARAMETER (DONE = 1.0D0,DZERO = 0.0D0) +C +C Local variables, permanent. +C + INTEGER N +c + complex*16 ALPHA, BETA, RHO + real*8 R0, RESN +C +C Local variables, transient. +C + complex*16 ZTMP(3) + real*8 det +C +C + INFO(2) = 0 + IF (N.EQ.1) GO TO 10 + IF (N.EQ.2) GO TO 20 + GO TO 30 +C +C Check whether the inputs are valid. +C + 10 info(1) = 0 + IF (NDIM.LT.1) info(1) = 2 + IF (NLEN.LT.1) info(1) = 2 + IF (NLEN.GT.NDIM) info(1) = 2 + IF (info(1).NE.0) return +C +C Check the convergence tolerance. +C + IF (TOL.LE.DZERO) TOL = DSQRT(DLAMCH('E')) +C +C Set x_0 and compute the norm of the initial residual. +C + R0 = DZNRM2(NLEN,VECS(1,2),1) + IF ((TOL.GE.DONE).OR.(R0.EQ.DZERO)) return +C +C Initialize the variables. +C + RHO = ZONE + info(1) = 8 + + INFO(2) = 1 + INFO(3) = 2 + INFO(4) = 3 + RETURN +C +C This is one step of the MAR algorithm. +C Compute \rho_{n-1}. +C + 20 continue + call zgemv('c',nlen,2,zone,vecs(1,2),ndim,vecs(1,3),1, + & zzero,ztmp,1) + rho = ztmp(2) + BETA = conjg(ZTMP(1)) / RHO +C + call zcopy(nlen,vecs(1,6),1,vecs(1,1),1) + CALL Zscal (NLEN,beta,vecs(1,1),1) + call zcopy(nlen,vecs(1,2),1,vecs(1,4),1) + CALL ZAXPY (NLEN,-beta,vecs(1,3),1,vecs(1,4),1) + call zcopy(nlen,vecs(1,6),1,vecs(1,5),1) +C + 25 INFO(2) = 1 + INFO(3) = 4 + INFO(4) = 2 + RETURN + 30 continue + call zgemv('c',nlen,3,zone,vecs(1,2),ndim,vecs(1,2),1, + & zzero,ztmp,1) + det = ztmp(1)*rho-ztmp(2)*conjg(ztmp(2)) + ztmp(3)=conjg(ztmp(3)) + alpha = -ztmp(2)*ztmp(3)/det + beta = rho*ztmp(3)/det +C + call zscal(nlen,alpha,vecs(1,5),1) + CALL ZAXPY (NLEN,beta,vecs(1,6),1,vecs(1,5),1) + CALL ZAXPY (NLEN,zone,vecs(1,5),1,vecs(1,1),1) + call zscal(nlen,alpha,vecs(1,3),1) + CALL ZAXPY (NLEN,beta,vecs(1,2),1,vecs(1,3),1) + CALL ZAXPY (NLEN,-zone,vecs(1,3),1,vecs(1,4),1) + rho=ztmp(1) + resn = DZNRM2(NLEN,VECS(1,4),1) +C +C Check for convergence or termination. Stop if: +C 1. algorithm converged; +C 2. algorithm exceeded the iterations limit. +C + IF (RESN.LE.TOL*r0) THEN + info(1) = 0 + return + END IF +C + GO TO 25 +C + END +C +C********************************************************************** diff --git a/src/MultipleScattering/zrandn.f b/src/MultipleScattering/zrandn.f new file mode 100755 index 000000000..5eb55e6b4 --- /dev/null +++ b/src/MultipleScattering/zrandn.f @@ -0,0 +1,82 @@ +C********************************************************************** +C + SUBROUTINE ZRANDN (N,ZX,SEED) +C +C Purpose: +C Fills the vector ZX with random numbers between 0 and 1. If the +C SEED is given, it should be odd and positive. The generator is a +C fairly unsophisticated one, from Pearson's "Numerical methods in +C engineering and science" book. +C +C Parameters: +C N = the dimension of the vector (input). +C ZX = the vector to fill with random numbers (output). +C SEED = the seed for the generator (input). +C +C Noel M. Nachtigal +C April 23, 1993 +C +C********************************************************************** +C + INTRINSIC DBLE, DCMPLX, IABS, MOD +C + integer N + integer SEED + integer I + integer J +C +C Local variables. +c + real*8 IMAGX + real*8 REALX +c + complex*16 ZX(N) +C +C Local variables that are saved from one call to the next. +C + real*8 DMAX + integer IM + integer IMAX + integer IS + SAVE DMAX, IM, IMAX, IS +c + DATA IM/0/ +C +C Initialize the generator data. +C + IF (IM.EQ.0) THEN + J = 0 + IM = 1 + DO 10 I = 1, 31 + J = J + 1 + IF (IM*2.LE.IM) GO TO 20 + IM = IM * 2 + 10 CONTINUE + 20 IMAX = (IM-1) * 2 + 1 + DMAX = DBLE(IMAX) + DO 30 I = 1, MOD(J,3) + J = J - 1 + IM = IM / 2 + 30 CONTINUE + IM = IM + 5 + IS = IABS(MOD(IM*30107,IMAX)) + END IF +C +C Check whether there is a new seed. +C + IF (SEED.GT.0) IS = (SEED / 2) * 2 + 1 +C +C Here goes the rest. +C + DO 40 I = 1, N + REALX = DBLE(IS) / DMAX + IS = IABS(MOD(IM*IS,IMAX)) + IMAGX = DBLE(IS) / DMAX + IS = IABS(MOD(IM*IS,IMAX)) + ZX(I) = DCMPLX(REALX,IMAGX) + 40 CONTINUE +C + RETURN + END +C +C********************************************************************** diff --git a/src/MultipleScattering/zucpx.f b/src/MultipleScattering/zucpx.f new file mode 100755 index 000000000..17c402909 --- /dev/null +++ b/src/MultipleScattering/zucpx.f @@ -0,0 +1,436 @@ +C********************************************************************** +C +C Copyright (C) 1992 Roland W. Freund and Noel M. Nachtigal +C All rights reserved. +C +C This code is part of a copyrighted package. For details, see the +C file `cpyrit.doc' in the top-level directory. +C +C ***************************************************************** +C ANY USE OF THIS CODE CONSTITUTES ACCEPTANCE OF THE TERMS OF THE +C COPYRIGHT NOTICE +C ***************************************************************** +C +C********************************************************************** +C +C This file contains the routines for the QMR algorithm for +C unsymmetric matrices, using the coupled two-term recurrence +C variant of the Lanczos algorithm without look-ahead. +C +C********************************************************************** +C + SUBROUTINE ZUCPX (NDIM,NLEN,NLIM,VECS,TOL,INFO) +C +C Purpose: +C This subroutine uses the QMR algorithm based on the coupled two- +C term variant of the Lanczos process without look-ahead to solve +C linear systems. It runs the algorithm to convergence or until a +C user-specified limit on the number of iterations is reached. +C +C The code is set up to solve the system A x = b with initial +C guess x_0 = 0. Here A x = b denotes the preconditioned system, +C and it is connected with the original system as follows. Let +C B y = c be the original unpreconditioned system to be solved, and +C let y_0 be an arbitrary initial guess for its solution. Then: +C A x = b, where A = M_1^{-1} B M_2^{-1}, +C x = M_2 (y - y_0), b = M_1^{-1} (c - B y_0). +C Here M = M_1 M_2 is the preconditioner. +C +C To recover the final iterate y_n for the original system B y = c +C from the final iterate x_n for the preconditioned system A x = b, +C set +C y_n = y_0 + M_2^{-1} x_n. +C +C The algorithm was first described in the RIACS Technical Report +C 92.15, "An Implementation of the QMR Method Based on Coupled Two- +C Term Recurrences", June 1992. This implementation does not have +C look-ahead, so it is less robust than the full version. +C +C Parameters: +C For a description of the parameters, see the file `zucpx.doc' in +C the current directory. +C +C External routines used: +C double precision dlamch(ch) +C LAPACK routine, computes machine-related constants. +C double precision dznrm2(n,x,incx) +C BLAS-1 routine, computes the 2-norm of x. +C subroutine zaxpby(n,z,a,x,b,y) +C Library routine, computes z = a * x + b * y. +C double precision zdotu(n,x,incx,y,incy) +C BLAS-1 routine, computes y' * x. +C subroutine zrandn(n,x,seed) +C Library routine, fills x with random numbers. +C subroutine zrotg(a,b,cos,sin) +C BLAS-1 routine, computes the Givens rotation which rotates the +C vector [a; b] into [ sqrt(a**2 + b**2); 0 ]. +C double precision zucpxo(n) +C User-supplied routine, specifies the QMR scaling factors. +C +C Noel M. Nachtigal +C March 30, 1993 +C +C********************************************************************** +C + INTRINSIC CDABS, DABS, DBLE, DCMPLX, DCONJG, DMAX1, DSQRT, MAX0 +c + EXTERNAL DLAMCH, DZNRM2, ZAXPBY, ZDOTU, ZRANDN, ZROTG, ZUCPXO +c + integer INFO(4) + integer NDIM + integer NLEN + integer NLIM +c + real*8 DLAMCH + real*8 DZNRM2 + real*8 ZUCPXO + real*8 TOL +c + complex*16 ZDOTU + complex*16 VECS(NDIM,8) +C +C Miscellaneous parameters. +C + complex*16 ZONE + complex*16 ZZERO + PARAMETER (ZONE = (1.0D0,0.0D0),ZZERO = (0.0D0,0.0D0)) +c + real*8 DHUN + real*8 DONE + real*8 DTEN + real*8 DZERO + PARAMETER (DHUN = 1.0D2,DONE = 1.0D0,DTEN = 1.0D1,DZERO = 0.0D0) +C +C Local variables, permanent. +C + INTEGER IERR, N, RETLBL, TF, TRES, VF + SAVE IERR, N, RETLBL, TF, TRES, VF +c + complex*16 DNN, ENN, SCS, SINN, RHSN + SAVE DNN, ENN, SCS, SINN, RHSN +c + real*8 COSN, GAMN, LNP1N, MAXOMG, OMG, R0, SCPN, SCQN + SAVE COSN, GAMN, LNP1N, MAXOMG, OMG, R0, SCPN, SCQN +c + real*8 SCV, RESN, TMAX, TMIN, TNRM, UCHK, UNRM + SAVE SCV, RESN, TMAX, TMIN, TNRM, UCHK, UNRM +C +C Local variables, transient. +C + integer INIT + integer REVCOM +c + complex*16 LNN + complex*16 RHN + complex*16 RHNM1 + complex*16 RHNP1 + complex*16 RHSNP1 + complex*16 UNM1N + complex*16 ZTMP +c + real*8 GAMNM1 + real*8 SCW +C +C Initialize some of the permanent variables. +C + DATA RETLBL /0/ +C +C Check the reverse communication flag to see where to branch. +C REVCOM RETLBL Comment +C 0 0 first call, go to label 10 +C 1 30 returning from AXB, go to label 30 +C 1 50 returning from AXB, go to label 50 +C 2 40 returning from ATXB, go to label 40 +C + REVCOM = INFO(2) + INFO(2) = 0 + IF (REVCOM.EQ.0) THEN + N = 0 + IF (RETLBL.EQ.0) GO TO 10 + ELSE IF (REVCOM.EQ.1) THEN + IF (RETLBL.EQ.30) THEN + GO TO 30 + ELSE IF (RETLBL.EQ.50) THEN + GO TO 50 + END IF + ELSE IF (REVCOM.EQ.2) THEN + IF (RETLBL.EQ.40) GO TO 40 + END IF + IERR = 1 + GO TO 70 +C +C Check whether the inputs are valid. +C + 10 IERR = 0 + IF (NDIM.LT.1) IERR = 2 + IF (NLEN.LT.1) IERR = 2 + IF (NLIM.LT.1) IERR = 2 + IF (NLEN.GT.NDIM) IERR = 2 + IF (IERR.NE.0) GO TO 70 +C +C Extract from INFO the output units TF and VF, the true residual +C flag TRES, and the left starting vector flag INIT. +C + VF = MAX0(INFO(1),0) + INIT = VF / 100000 + VF = VF - INIT * 100000 + TRES = VF / 10000 + VF = VF - TRES * 10000 + TF = VF / 100 + VF = VF - TF * 100 +C +C Extract and check the various tolerances. +C + TNRM = DLAMCH('E') * DTEN + TMIN = DSQRT(DSQRT(DLAMCH('S'))) + TMAX = DONE / TMIN + IF (TOL.LE.DZERO) TOL = DSQRT(DLAMCH('E')) +C +C Start the trace messages and convergence history. +C + IF (VF.NE.0) WRITE (VF,'(I8,2E11.4)') 0, DONE, DONE + IF (TF.NE.0) WRITE (TF,'(I8,2E11.4)') 0, DONE, DONE +C +C Set x_0 = 0 and compute the norm of the initial residual. +C +c CALL ZAXPBY (NLEN,VECS(1,3),ZONE,VECS(1,2),ZZERO,VECS(1,3)) +c CALL ZAXPBY (NLEN,VECS(1,1),ZZERO,VECS(1,1),ZZERO,VECS(1,1)) + CALL Zcopy (NLEN,VECS(1,2),1,VECS(1,3),1) + CALL Zscal (NLEN,ZZERO,VECS(1,1),1) + R0 = DZNRM2(NLEN,VECS(1,3),1) + IF ((TOL.GE.DONE).OR.(R0.EQ.DZERO)) GO TO 70 +C +C Check whether the auxiliary vector must be supplied. +C + IF (INIT.EQ.0) CALL ZRANDN (NLEN,VECS(1,7),1) +C +C Initialize the variables. +C + N = 1 + SCV = R0 + ENN = ZONE + COSN = DONE + GAMN = DONE + RESN = DONE + SCPN = DONE + SCQN = DONE + SCS = ZZERO + SINN = ZZERO + LNP1N = DZERO + OMG = ZUCPXO(N) + RHSN = OMG * R0 + MAXOMG = DONE / OMG +C +C This is one step of the coupled two-term Lanczos algorithm. +C Check whether E_n is nonsingular. +C + 20 IF (ENN.EQ.DZERO) THEN + IERR = 8 + GO TO 70 + END IF +C +C Compute scale factor for the vector w_{n}. +C Check for invariant subspaces, and scale the vectors if needed. +C + IERR = 0 + SCW = DZNRM2(NLEN,VECS(1,7),1) + IF (SCPN*SCV.LT.TNRM) IERR = IERR + 16 + IF (SCQN*SCW.LT.TNRM) IERR = IERR + 32 + IF (IERR.NE.0) GO TO 70 + GAMNM1 = GAMN + GAMN = GAMN * SCPN / SCQN * SCV / SCW + DNN = ZDOTU(NLEN,VECS(1,3),1,VECS(1,7),1) / ( SCV * SCW ) + IF ((SCV.GE.TMAX).OR.(SCV.LE.TMIN)) THEN + ZTMP = DCMPLX(DONE / SCV,DZERO) +c CALL ZAXPBY (NLEN,VECS(1,3),ZTMP,VECS(1,3),ZZERO,VECS(1,3)) + CALL Zscal (NLEN,ZTMP,VECS(1,3),1) + SCV = DONE + END IF + IF ((SCW.GE.TMAX).OR.(SCW.LE.TMIN)) THEN + ZTMP = DCMPLX(DONE / SCW,DZERO) +c CALL ZAXPBY (NLEN,VECS(1,7),ZTMP,VECS(1,7),ZZERO,VECS(1,7)) + CALL Zscal (NLEN,ZTMP,VECS(1,7),1) + SCW = DONE + END IF + SCV = DONE / SCV + SCW = DONE / SCW +C +C Build the vectors p_n and q_n. +C + UNM1N = DNN * LNP1N * GAMNM1 / ( GAMN * ENN ) + ZTMP = UNM1N * SCPN / SCV + CALL ZAXPBY (NLEN,VECS(1,4),ZONE,VECS(1,3),-ZTMP,VECS(1,4)) + ZTMP = UNM1N * SCQN / SCW * GAMN / GAMNM1 + CALL ZAXPBY (NLEN,VECS(1,8),ZONE,VECS(1,7),-ZTMP,VECS(1,8)) + SCPN = SCV + SCQN = SCW +C +C Check whether D_n is nonsingular. +C + IF (CDABS(DNN).EQ.DZERO) THEN + IERR = 8 + GO TO 70 + END IF +C +C Have the caller carry out AXB, then return here. +C CALL AXB (VECS(1,4),VECS(1,6)) +C + INFO(2) = 1 + INFO(3) = 4 + INFO(4) = 6 + RETLBL = 30 + RETURN +C +C Compute q_n^T A p_n. +C + 30 ENN = SCPN * SCQN * ZDOTU(NLEN,VECS(1,8),1,VECS(1,6),1) +C +C Build the vector v_{n+1}. +C + LNN = ENN / DNN + CALL ZAXPBY (NLEN,VECS(1,3),ZONE,VECS(1,6),-LNN,VECS(1,3)) +C +C Have the caller carry out ATXB, then return here. +C CALL ATXB (VECS(1,8),VECS(1,6)) +C + INFO(2) = 2 + INFO(3) = 8 + INFO(4) = 6 + RETLBL = 40 + RETURN +C +C Build the vector w_{n+1}. +C + 40 LNN = ENN / DNN + CALL ZAXPBY (NLEN,VECS(1,7),ZONE,VECS(1,6),-LNN,VECS(1,7)) +C +C Compute scale factor for the vector v_{n+1}. +C + SCV = DZNRM2(NLEN,VECS(1,3),1) + LNP1N = SCPN * SCV +C +C The QMR code starts here. +C Multiply the new column by the previous omega's. +C Get the next scaling factor omega(i) and update MAXOMG. +C + RHN = OMG * LNN + OMG = ZUCPXO(N+1) + RHNP1 = OMG * LNP1N + MAXOMG = DMAX1(MAXOMG,DONE/OMG) +C +C Apply the previous rotation. +C + RHNM1 = SINN * RHN + RHN = COSN * RHN +C +C Compute the rotation for the last element (this also applies it). +C + CALL ZROTG (RHN,RHNP1,COSN,SINN) +C +C Apply the new rotation to the right-hand side vector. +C + RHSNP1 = -DCONJG(SINN) * RHSN + RHSN = COSN * RHSN +C +C Compute the next search direction s_i. +C + ZTMP = RHNM1 * SCS / SCPN + CALL ZAXPBY (NLEN,VECS(1,5),ZONE,VECS(1,4),-ZTMP,VECS(1,5)) +C +C Compute the new QMR iterate, then scale the search direction. +C + SCS = SCPN / RHN + ZTMP = SCS * RHSN +c CALL ZAXPBY (NLEN,VECS(1,1),ZONE,VECS(1,1),ZTMP,VECS(1,5)) + CALL ZAXPY (NLEN,ZTMP,VECS(1,5),1,VECS(1,1),1) + IF ((CDABS(SCS).GE.TMAX).OR.(CDABS(SCS).LE.TMIN)) THEN +c CALL ZAXPBY (NLEN,VECS(1,5),SCS,VECS(1,5),ZZERO,VECS(1,5)) + CALL Zscal (NLEN,SCS,VECS(1,5),1) + SCS = ZONE + END IF +C +C Compute the residual norm upper bound. +C If the scaled upper bound is within one order of magnitude of the +C target convergence norm, compute the true residual norm. +C + RHSN = RHSNP1 + UNRM = DSQRT(DBLE(N+1)) * MAXOMG * CDABS(RHSNP1) / R0 + UCHK = UNRM + IF ((TRES.EQ.0).AND.(UNRM/TOL.GT.DTEN).AND.(N.LT.NLIM)) GO TO 60 +C +C Have the caller carry out AXB, then return here. +C CALL AXB (VECS(1,1),VECS(1,6)) +C + INFO(2) = 1 + INFO(3) = 1 + INFO(4) = 6 + RETLBL = 50 + RETURN + 50 CALL ZAXPBY (NLEN,VECS(1,6),ZONE,VECS(1,2),-ZONE,VECS(1,6)) + RESN = DZNRM2(NLEN,VECS(1,6),1) / R0 + UCHK = RESN +C +C Output the convergence history. +C + 60 IF (VF.NE.0) WRITE (VF,'(I8,2E11.4)') N, UNRM, RESN + IF (TF.NE.0) WRITE (TF,'(I8,2E11.4)') N, UNRM, RESN +C +C Check for convergence or termination. Stop if: +C 1. algorithm converged; +C 2. there is an error condition; +C 3. the residual norm upper bound is smaller than the computed +C residual norm by a factor of at least 100; +C 4. algorithm exceeded the iterations limit. +C + IF (RESN.LE.TOL) THEN + IERR = 0 + GO TO 70 + ELSE IF (IERR.NE.0) THEN + GO TO 70 + ELSE IF (UNRM.LT.UCHK/DHUN) THEN + IERR = 4 + GO TO 70 + ELSE IF (N.GE.NLIM) THEN + IERR = 4 + GO TO 70 + END IF +C +C Update the running counter. +C + N = N + 1 + GO TO 20 +C +C That's all. +C + 70 NLIM = N + RETLBL = 0 + INFO(1) = IERR +C + RETURN + END +C +C********************************************************************** +C + FUNCTION ZUCPXO (I) +C +C Purpose: +C Returns the scaling parameter OMEGA(I). +C +C Parameters: +C I = the index of the parameter OMEGA (input). +C +C Noel M. Nachtigal +C March 30, 1993 +C +C********************************************************************** +C + integer I +c + real*8 ZUCPXO +C + ZUCPXO = 1.0D0 +C + RETURN + END +C +C********************************************************************** diff --git a/src/MultipleScattering/zuqmx.f b/src/MultipleScattering/zuqmx.f new file mode 100755 index 000000000..3358c8fd7 --- /dev/null +++ b/src/MultipleScattering/zuqmx.f @@ -0,0 +1,507 @@ +C********************************************************************** +C +C Copyright (C) 1992 Roland W. Freund and Noel M. Nachtigal +C All rights reserved. +C +C This code is part of a copyrighted package. For details, see the +C file `cpyrit.doc' in the top-level directory. +C +C ***************************************************************** +C ANY USE OF THIS CODE CONSTITUTES ACCEPTANCE OF THE TERMS OF THE +C COPYRIGHT NOTICE +C ***************************************************************** +C +C********************************************************************** +C +C This file contains the routine for the QMR algorithm for +C unsymmetric matrices, using the three-term recurrence variant of +C the Lanczos algorithm without look-ahead. +C +C********************************************************************** +C + SUBROUTINE ZUQMX (NDIM,NLEN,NLIM,VECS,TOL,INFO) +C +C Purpose: +C This subroutine uses the QMR algorithm to solve linear systems. +C It runs the algorithm to convergence or until a user-specified +C limit on the number of iterations is reached. +C +C The code is set up to solve the system A x = b with initial +C guess x_0 = 0. Here A x = b denotes the preconditioned system, +C and it is connected with the original system as follows. Let +C B y = c be the original unpreconditioned system to be solved, and +C let y_0 be an arbitrary initial guess for its solution. Then: +C A x = b, where A = M_1^{-1} B M_2^{-1}, +C x = M_2 (y - y_0), b = M_1^{-1} (c - B y_0). +C Here M = M_1 M_2 is the preconditioner. +C +C To recover the final iterate y_n for the original system B y = c +C from the final iterate x_n for the preconditioned system A x = b, +C set +C y_n = y_0 + M_2^{-1} x_n. +C +C The implementation does not have look-ahead, so it is less robust +C than the full version. +C +C Parameters: +C For a description of the parameters, see the file `zuqmx.doc' in +C the current directory. +C +C External routines used: +C double precision dlamch(ch) +C LAPACK routine, computes machine-related constants. +C double precision dznrm2(n,x,incx) +C BLAS-1 routine, computes the 2-norm of x. +C subroutine zaxpy(n,a,x,incx,y,incy) +C BLAS-1 routine, computes y = a * x + y. +C subroutine zaxpby(n,z,a,x,b,y) +C Library routine, computes z = a * x + b * y. +C double precision zdotu(n,x,incx,y,incy) +C BLAS-1 routine, computes y' * x. +C double precision zqmxom(n) +C User-supplied routine, specifies the QMR scaling factors. +C subroutine zrandn(n,x,seed) +C Library routine, fills x with random numbers. +C subroutine zrotg(a,b,cos,sin) +C BLAS-1 routine, computes the Givens rotation which rotates the +C vector [a; b] into [ sqrt(a**2 + b**2); 0 ]. +C +C Noel M. Nachtigal +C May 25, 1993 +C +C********************************************************************** +C + INTRINSIC CDABS, DABS, DBLE, DCMPLX, DCONJG, DMAX1, DSQRT, MAX0 + INTRINSIC MOD +c + EXTERNAL DLAMCH, DZNRM2, ZAXPBY, ZDOTU, ZRANDN, ZROTG, ZUQMXO +C + integer INFO(4) + integer NDIM + integer NLEN + integer NLIM +c + real*8 DLAMCH + real*8 DZNRM2 + real*8 ZUQMXO + real*8 TOL +c + complex*16 ZDOTU + complex*16 VECS(NDIM,9) +C +C Miscellaneous parameters. +C + complex*16 ZONE + complex*16 ZZERO + PARAMETER (ZONE = (1.0D0,0.0D0),ZZERO = (0.0D0,0.0D0)) +c + real*8 DHUN + real*8 DONE + real*8 DTEN + real*8 DZERO + PARAMETER (DHUN = 1.0D2,DONE = 1.0D0,DTEN = 1.0D1,DZERO = 0.0D0) +C +C Local variables, permanent. +C + INTEGER IERR, ISN, ISNM1, ISNM2, IVN, IVNM1, IVNP1, IWN, IWNM1 + SAVE IERR, ISN, ISNM1, ISNM2, IVN, IVNM1, IVNP1, IWN, IWNM1 +c + INTEGER IWNP1, N, RETLBL, TF, TRES, VF + SAVE IWNP1, N, RETLBL, TF, TRES, VF + + complex*16 DN, DNM1, DNP1, RHSN, SCSN, SCSNM1, SINN, SINNM1 + SAVE DN, DNM1, DNP1, RHSN, SCSN, SCSNM1, SINN, SINNM1 + + real*8 COSN, COSNM1, CSIN, CSINP1, MAXOMG, OMGN + SAVE COSN, COSNM1, CSIN, CSINP1, MAXOMG, OMGN + + real*8 OMGNP1, R0, RESN, RHON, RHONP1, SCVN, SCVNP1 + SAVE OMGNP1, R0, RESN, RHON, RHONP1, SCVN, SCVNP1 + + real*8 SCWN, SCWNP1, TMAX, TMIN, TNRM, UCHK, UNRM + SAVE SCWN, SCWNP1, TMAX, TMIN, TNRM, UCHK, UNRM +C +C Local variables, transient. +C + integer INIT + integer REVCOM +c + complex*16 RHN + complex*16 RHNM1 + complex*16 RHNM2 + complex*16 RHNP1 + complex*16 RHSNP1 + complex*16 ZTMP +c + real*8 DTMP + real*8 SCVNM1 + real*8 SCWNM1 +C +C Initialize some of the permanent variables. +C + DATA RETLBL /0/ +C +C Check the reverse communication flag to see where to branch. +C REVCOM RETLBL Comment +C 0 0 first call, go to label 10 +C 1 30 returning from AXB, go to label 30 +C 1 60 returning from AXB, go to label 60 +C 2 40 returning from ATXB, go to label 40 +C + REVCOM = INFO(2) + INFO(2) = 0 + IF (REVCOM.EQ.0) THEN + N = 0 + IF (RETLBL.EQ.0) GO TO 10 + ELSE IF (REVCOM.EQ.1) THEN + IF (RETLBL.EQ.30) THEN + GO TO 30 + ELSE IF (RETLBL.EQ.60) THEN + GO TO 60 + END IF + ELSE IF (REVCOM.EQ.2) THEN + IF (RETLBL.EQ.40) GO TO 40 + END IF + IERR = 1 + GO TO 80 +C +C Check whether the inputs are valid. +C + 10 IERR = 0 + IF (NDIM.LT.1) IERR = 2 + IF (NLEN.LT.1) IERR = 2 + IF (NLIM.LT.1) IERR = 2 + IF (NLEN.GT.NDIM) IERR = 2 + IF (IERR.NE.0) GO TO 80 +C +C Extract from INFO the output units TF and VF, the true residual +C flag TRES, and the left starting vector flag INIT. +C + VF = MAX0(INFO(1),0) + INIT = VF / 100000 + VF = VF - INIT * 100000 + TRES = VF / 10000 + VF = VF - TRES * 10000 + TF = VF / 100 + VF = VF - TF * 100 +C +C Extract and check the various tolerances. +C + TNRM = DLAMCH('E') * DTEN + TMIN = DSQRT(DSQRT(DLAMCH('S'))) + TMAX = DONE / TMIN + IF (TOL.LE.DZERO) TOL = DSQRT(DLAMCH('E')) +C +C Start the trace messages and convergence history. +C + IF (VF.NE.0) WRITE (VF,'(I8,2E11.4)') 0, DONE, DONE + IF (TF.NE.0) WRITE (TF,'(I8,2E11.4)') 0, DONE, DONE +C +C Initialize the wrapped indices. +C + ISNM1 = 5 + ISN = ISNM1 + IVN = 3 + IVNP1 = IVN + IWN = 8 + IWNP1 = IWN +C +C Set x_0 = 0 and compute the norm of the initial residual. +C +c CALL ZAXPBY (NLEN,VECS(1,IVN),ZONE,VECS(1,2),ZZERO,VECS(1,IVN)) +c CALL ZAXPBY (NLEN,VECS(1,1),ZZERO,VECS(1,1),ZZERO,VECS(1,1)) + CALL Zcopy (NLEN,VECS(1,2),1,VECS(1,IVN),1) + CALL Zscal (NLEN,zzero,VECS(1,1),1) + R0 = DZNRM2(NLEN,VECS(1,IVN),1) + IF ((TOL.GE.DONE).OR.(R0.EQ.DZERO)) GO TO 80 +C +C Check whether the auxiliary vector must be supplied. +C + IF (INIT.EQ.0) CALL ZRANDN (NLEN,VECS(1,IWN),1) +C +C Compute scale factors and check for invariant subspaces. +C + SCVNP1 = R0 + SCWNP1 = DZNRM2(NLEN,VECS(1,IWN),1) + IF (SCVNP1.LT.TNRM) IERR = IERR + 16 + IF (SCWNP1.LT.TNRM) IERR = IERR + 32 + IF (IERR.NE.0) GO TO 80 + DNP1 = ZDOTU(NLEN,VECS(1,IWN),1,VECS(1,IVN),1) / ( SCVNP1 * + $SCWNP1 ) + IF ((SCVNP1.GE.TMAX).OR.(SCVNP1.LE.TMIN)) THEN + ZTMP = DCMPLX(DONE / SCVNP1,DZERO) +c CALL ZAXPBY (NLEN,VECS(1,IVN),ZTMP,VECS(1,IVN),ZZERO,VECS(1, +c $IVN)) + CALL Zscal (NLEN,ZTMP,VECS(1,IVN),1) + SCVNP1 = DONE + END IF + IF ((SCWNP1.GE.TMAX).OR.(SCWNP1.LE.TMIN)) THEN + ZTMP = DCMPLX(DONE / SCWNP1,DZERO) +c CALL ZAXPBY (NLEN,VECS(1,IWN),ZTMP,VECS(1,IWN),ZZERO,VECS(1, +c $IWN)) + CALL Zscal (NLEN,ZTMP,VECS(1,IWN),1) + SCWNP1 = DONE + END IF + RHONP1 = SCVNP1 + CSINP1 = SCWNP1 + SCVNP1 = DONE / SCVNP1 + SCWNP1 = DONE / SCWNP1 +C +C Initialize the variables. +C + N = 1 + DN = ZONE + COSN = DONE + RESN = DONE + COSNM1 = DONE + OMGN = DZERO + SCSN = DZERO + SCVN = DZERO + SCWN = DZERO + SCSNM1 = DZERO + SINN = ZZERO + SINNM1 = ZZERO + OMGNP1 = ZUQMXO(N) + RHSN = OMGNP1 * R0 + MAXOMG = DONE / OMGNP1 +C +C This is one step of the classical Lanczos algorithm. +C + 20 IVNM1 = IVN + IVN = IVNP1 + IVNP1 = MOD(N,2) + 3 + IWNM1 = IWN + IWN = IWNP1 + IWNP1 = MOD(N,2) + 8 +C +C Check whether D_n is nonsingular. +C + DNM1 = DN + DN = DNP1 + IF (CDABS(DN).EQ.DZERO) THEN + IERR = 8 + GO TO 80 + END IF +C +C Have the caller carry out AXB, then return here. +C CALL AXB (VECS(1,IVN),VECS(1,7)) +C + INFO(2) = 1 + INFO(3) = IVN + INFO(4) = 7 + RETLBL = 30 + RETURN + 30 RETLBL = 0 +C +C Compute H_{n-1,n} and build part of the vector v_{n+1}. +C + SCVNM1 = SCVN + CSIN = CSINP1 + SCVN = SCVNP1 + ZTMP = CSIN * DN / DNM1 * SCVNM1 / SCVN + CALL ZAXPBY (NLEN,VECS(1,IVNP1),ZONE,VECS(1,7),-ZTMP,VECS(1,IVNM1) + $) +C +C Have the caller carry out ATXB, then return here. +C CALL ATXB (VECS(1,IWN),VECS(1,7)) +C + INFO(2) = 2 + INFO(3) = IWN + INFO(4) = 7 + RETLBL = 40 + RETURN + 40 RETLBL = 0 +C +C Build part of the vector w_{n+1}. +C + SCWNM1 = SCWN + RHON = RHONP1 + SCWN = SCWNP1 + ZTMP = RHON * DN / DNM1 * SCWNM1 / SCWN + CALL ZAXPBY (NLEN,VECS(1,IWNP1),ZONE,VECS(1,7),-ZTMP,VECS(1,IWNM1) + $) +C +C Compute H_{nn} and finish the new vectors. +C + RHN = SCVN * SCWN * ZDOTU(NLEN,VECS(1,IWN),1,VECS(1,IVNP1),1) / DN +c CALL ZAXPBY (NLEN,VECS(1,IVNP1),ZONE,VECS(1,IVNP1),-RHN,VECS(1, +c $IVN)) +c CALL ZAXPBY (NLEN,VECS(1,IWNP1),ZONE,VECS(1,IWNP1),-RHN,VECS(1, +c $IWN)) + CALL ZAXPY (NLEN,-RHN,VECS(1,IVN),1,VECS(1,IVNP1),1) + CALL ZAXPY (NLEN,-RHN,VECS(1,IWN),1,VECS(1,IWNP1),1) +C +C Compute scale factors and check for invariant subspaces. +C + IERR = 0 + SCVNP1 = DZNRM2(NLEN,VECS(1,IVNP1),1) + SCWNP1 = DZNRM2(NLEN,VECS(1,IWNP1),1) + RHONP1 = SCVN * SCVNP1 + CSINP1 = SCWN * SCWNP1 + RHNP1 = RHONP1 + IF (SCVNP1.LT.TNRM) IERR = IERR + 16 + IF (SCWNP1.LT.TNRM) IERR = IERR + 32 + IF (IERR.NE.0) GO TO 50 + DNP1 = ZDOTU(NLEN,VECS(1,IWNP1),1,VECS(1,IVNP1),1) / ( SCVNP1 * + $SCWNP1 ) + IF ((SCVNP1.GE.TMAX).OR.(SCVNP1.LE.TMIN)) THEN + ZTMP = DCMPLX(DONE / SCVNP1,DZERO) +c CALL ZAXPBY (NLEN,VECS(1,IVNP1),ZTMP,VECS(1,IVNP1),ZZERO, +c $VECS(1,IVNP1)) + CALL Zscal (NLEN,ZTMP,VECS(1,IVNP1),1) + SCVNP1 = DONE + END IF + IF ((SCWNP1.GE.TMAX).OR.(SCWNP1.LE.TMIN)) THEN + ZTMP = DCMPLX(DONE / SCWNP1,DZERO) +c CALL ZAXPBY (NLEN,VECS(1,IWNP1),ZTMP,VECS(1,IWNP1),ZZERO, +c $VECS(1,IWNP1)) + CALL Zscal (NLEN,ZTMP,VECS(1,IWNP1),1) + SCWNP1 = DONE + END IF + SCVNP1 = DONE / SCVNP1 + SCWNP1 = DONE / SCWNP1 +C +C The QMR code starts here. +C Multiply the new column by the previous omega's. +C Get the next scaling factor omega(i) and update MAXOMG. +C + 50 RHNM1 = CSIN * DN * OMGN / DNM1 + OMGN = OMGNP1 + RHN = OMGN * RHN + OMGNP1 = ZUQMXO(N+1) + RHNP1 = OMGNP1 * RHNP1 + MAXOMG = DMAX1(MAXOMG,DONE/OMGN) +C +C Apply the previous rotations. +C + RHNM2 = SINNM1 * RHNM1 + RHNM1 = COSNM1 * RHNM1 + COSNM1 = COSN + SINNM1 = SINN + ZTMP = RHNM1 + RHNM1 = COSNM1 * ZTMP + SINNM1 * RHN + RHN = -DCONJG(SINNM1) * ZTMP + COSNM1 * RHN +C +C Compute the rotation for the last element (this also applies it). +C + CALL ZROTG (RHN,RHNP1,COSN,SINN) +C +C Apply the new rotation to the right-hand side vector. +C + RHSNP1 = -DCONJG(SINN) * RHSN + RHSN = COSN * RHSN +C +C Compute the next search direction s_n. +C + ISNM2 = ISNM1 + ISNM1 = ISN + ISN = MOD(N-1,2) + 5 + ZTMP = SCSNM1 * RHNM2 / SCVN + CALL ZAXPBY (NLEN,VECS(1,ISN),ZONE,VECS(1,IVN),-ZTMP,VECS(1,ISNM2) + $) + SCSNM1 = SCSN + ZTMP = SCSNM1 * RHNM1 / SCVN +c CALL ZAXPBY (NLEN,VECS(1,ISN),ZONE,VECS(1,ISN),-ZTMP,VECS(1,ISNM1) +c $) + CALL ZAXPY (NLEN,-ZTMP,VECS(1,ISNM1),1,VECS(1,ISN),1) + SCSN = SCVN / RHN +C +C Compute the new QMR iterate, then scale the search direction. +C + ZTMP = SCSN * RHSN +c CALL ZAXPBY (NLEN,VECS(1,1),ZONE,VECS(1,1),ZTMP,VECS(1,ISN)) + CALL ZAXPY (NLEN,ZTMP,VECS(1,ISN),1,VECS(1,1),1) + DTMP = CDABS(SCSN) + IF ((DTMP.GE.TMAX).OR.(DTMP.LE.TMIN)) THEN +c CALL ZAXPBY (NLEN,VECS(1,ISN),SCSN,VECS(1,ISN),ZZERO,VECS(1, +c $ISN)) + CALL Zscal (NLEN,SCSN,VECS(1,ISN),1) + SCSN = ZONE + END IF +C +C Compute the residual norm upper bound. +C If the scaled upper bound is within one order of magnitude of the +C target convergence norm, compute the true residual norm. +C + RHSN = RHSNP1 + UNRM = DSQRT(DBLE(N+1)) * MAXOMG * CDABS(RHSNP1) / R0 + UCHK = UNRM + IF ((TRES.EQ.0).AND.(UNRM/TOL.GT.DTEN).AND.(N.LT.NLIM)) GO TO 70 +C +C Have the caller carry out AXB, then return here. +C CALL AXB (VECS(1,1),VECS(1,7)) +C + INFO(2) = 1 + INFO(3) = 1 + INFO(4) = 7 + RETLBL = 60 + RETURN + 60 RETLBL = 0 + CALL ZAXPBY (NLEN,VECS(1,7),ZONE,VECS(1,2),-ZONE,VECS(1,7)) + RESN = DZNRM2(NLEN,VECS(1,7),1) / R0 + UCHK = RESN +C +C Output the trace messages and convergence history. +C + 70 IF (VF.NE.0) WRITE (VF,'(I8,2E11.4)') N, UNRM, RESN + IF (TF.NE.0) WRITE (TF,'(I8,2E11.4)') N, UNRM, RESN +C +C Check for convergence or termination. Stop if: +C 1. algorithm converged; +C 2. there is an error condition; +C 3. the residual norm upper bound is smaller than the computed +C residual norm by a factor of at least 100; +C 4. algorithm exceeded the iterations limit. +C + IF (RESN.LE.TOL) THEN + IERR = 0 + GO TO 80 + ELSE IF (IERR.NE.0) THEN + GO TO 80 + ELSE IF (UNRM.LT.UCHK/DHUN) THEN + IERR = 4 + GO TO 80 + ELSE IF (N.GE.NLIM) THEN + IERR = 4 + GO TO 80 + END IF +C +C Update the running counter. +C + N = N + 1 + GO TO 20 +C +C That's all. +C + 80 ZLIM = N + RETLBL = 0 + INFO(1) = IERR +C + RETURN + END +C +C********************************************************************** +C + FUNCTION ZUQMXO (I) +C +C Purpose: +C Returns the scaling parameter OMEGA(I). +C +C Parameters: +C I = the index of the parameter OMEGA (input). +C +C Noel M. Nachtigal +C March 30, 1993 +C +C********************************************************************** +C + integer I +c + real*8 ZUQMXO +C + ZUQMXO = 1.0D0 +C + RETURN + END +C +C********************************************************************** diff --git a/src/MultipleScattering/zutfx.f b/src/MultipleScattering/zutfx.f new file mode 100755 index 000000000..e769ad115 --- /dev/null +++ b/src/MultipleScattering/zutfx.f @@ -0,0 +1,381 @@ +C********************************************************************** +C +C Copyright (C) 1992 Roland W. Freund and Noel M. Nachtigal +C All rights reserved. +C +C This code is part of a copyrighted package. For details, see the +C file `cpyrit.doc' in the top-level directory. +C +C ***************************************************************** +C ANY USE OF THIS CODE CONSTITUTES ACCEPTANCE OF THE TERMS OF THE +C COPYRIGHT NOTICE +C ***************************************************************** +C +C********************************************************************** +C +C This file contains the routine for the TFQMR algorithm. +C +C********************************************************************** +C + SUBROUTINE ZUTFX (NDIM,NLEN,NLIM,VECS,TOL,INFO) +C +C Purpose: +C This subroutine uses the TFQMR algorithm to solve linear systems. +C It runs the algorithm to convergence or until a user-specified +C limit on the number of iterations is reached. +C +C The code is set up to solve the system A x = b with initial +C guess x_0 = 0. Here A x = b denotes the preconditioned system, +C and it is connected with the original system as follows. Let +C B y = c be the original unpreconditioned system to be solved, and +C let y_0 be an arbitrary initial guess for its solution. Then: +C A x = b, where A = M_1^{-1} B M_2^{-1}, +C x = M_2 (y - y_0), b = M_1^{-1} (c - B y_0). +C Here M = M_1 M_2 is the preconditioner. +C +C To recover the final iterate y_n for the original system B y = c +C from the final iterate x_n for the preconditioned system A x = b, +C set +C y_n = y_0 + M_2^{-1} x_n. +C +C The algorithm was first described in the RIACS Technical Report +C 91.18, "A Transpose-Free Quasi-Minimal Residual Algorithm for +C Non-Hermitian Linear Systems", by Roland Freund, September 1991, +C which subsequently appeared in SIAM J. Sci. Comput., 14 (1993), +C pp. 470--482. +C +C Parameters: +C For a description of the parameters, see the file `zutfx.doc' in +C the current directory. +C +C External routines used: +C double precision dlamch(ch) +C LAPACK routine, computes machine-related constants. +C double precision dznrm2(n,x,incx) +C BLAS-1 routine, computes the 2-norm of x. +C subroutine zaxpby(n,z,a,x,b,y) +C Library routine, computes z = a * x + b * y. +C double precision zdotu(n,x,incx,y,incy) +C BLAS-1 routine, computes y' * x. +C subroutine zrandn(n,x,seed) +C Library routine, fills x with random numbers. +C +C Noel M. Nachtigal +C April 13, 1993 +C +C********************************************************************** +C + INTRINSIC CDABS, DBLE, DSQRT, MAX0 + EXTERNAL DLAMCH, DZNRM2, ZAXPBY, ZDOTU, ZRANDN +c + real*8 DLAMCH + real*8 DZNRM2 + real*8 TOL +C + integer INFO(4) + integer NDIM + integer NLEN + integer NLIM +c + complex*16 ZDOTU + complex*16 VECS(NDIM,9) +C +C Miscellaneous parameters. +C + complex*16 ZONE + complex*16 ZZERO + PARAMETER (ZONE = (1.0D0,0.0D0),ZZERO = (0.0D0,0.0D0)) +c + real*8 DHUN + real*8 DONE + real*8 DTEN + real*8 DZERO + PARAMETER (DHUN = 1.0D2,DONE = 1.0D0,DTEN = 1.0D1,DZERO = 0.0D0) +C +C Local variables, permanent. +C + INTEGER IERR, N, RETLBL, TF, TRES, VF + SAVE IERR, N, RETLBL, TF, TRES, VF +c + complex*16 ALPHA, BETA, ETA, RHO + SAVE ALPHA, BETA, ETA, RHO + real*8 COS, VAR, R0, RESN, TAU, UCHK, UNRM + SAVE COS, VAR, R0, RESN, TAU, UCHK, UNRM +C +C Local variables, transient. +C + integer INIT + integer REVCOM + complex*16 ZTMP + real*8 DTMP +C +C Initialize some of the permanent variables. +C + DATA RETLBL /0/ +C +C Check the reverse communication flag to see where to branch. +C REVCOM RETLBL Comment +C 0 0 first call, go to label 10 +C 1 30 returning from AXB, go to label 30 +C 1 40 returning from AXB, go to label 40 +C 1 60 returning from AXB, go to label 60 +C 1 70 returning from AXB, go to label 70 +C + REVCOM = INFO(2) + INFO(2) = 0 + IF (REVCOM.EQ.0) THEN + N = 0 + IF (RETLBL.EQ.0) GO TO 10 + ELSE IF (REVCOM.EQ.1) THEN + IF (RETLBL.EQ.30) THEN + GO TO 30 + ELSE IF (RETLBL.EQ.40) THEN + GO TO 40 + ELSE IF (RETLBL.EQ.60) THEN + GO TO 60 + ELSE IF (RETLBL.EQ.70) THEN + GO TO 70 + END IF + END IF + IERR = 1 + GO TO 90 +C +C Check whether the inputs are valid. +C + 10 IERR = 0 + IF (NDIM.LT.1) IERR = 2 + IF (NLEN.LT.1) IERR = 2 + IF (NLIM.LT.1) IERR = 2 + IF (NLEN.GT.NDIM) IERR = 2 + IF (IERR.NE.0) GO TO 90 +C +C Extract from INFO the output units TF and VF, the true residual +C flag TRES, and the left starting vector flag INIT. +C + VF = MAX0(INFO(1),0) + INIT = VF / 100000 + VF = VF - INIT * 100000 + TRES = VF / 10000 + VF = VF - TRES * 10000 + TF = VF / 100 + VF = VF - TF * 100 +C +C Check the convergence tolerance. +C + IF (TOL.LE.DZERO) TOL = DSQRT(DLAMCH('E')) +C +C Start the trace messages and convergence history. +C + IF (VF.NE.0) WRITE (VF,'(2I8,2E11.4)') 0, 0, DONE, DONE + IF (TF.NE.0) WRITE (TF,'(2I8,2E11.4)') 0, 0, DONE, DONE +C +C Set x_0 = 0 and compute the norm of the initial residual. +C +c CALL ZAXPBY (NLEN,VECS(1,5),ZONE,VECS(1,2),ZZERO,VECS(1,5)) +c CALL ZAXPBY (NLEN,VECS(1,1),ZZERO,VECS(1,1),ZZERO,VECS(1,1)) + CALL Zcopy (NLEN,VECS(1,2),1,VECS(1,5),1) + CALL Zscal (NLEN,ZZERO,VECS(1,1),1) + R0 = DZNRM2(NLEN,VECS(1,5),1) + IF ((TOL.GE.DONE).OR.(R0.EQ.DZERO)) GO TO 90 +C +C Check whether the auxiliary vector must be supplied. +C + IF (INIT.EQ.0) CALL ZRANDN (NLEN,VECS(1,3),1) +C +C Initialize the variables. +C + N = 1 + RESN = DONE + RHO = ZONE + VAR = DZERO + ETA = ZZERO + TAU = R0 * R0 + IERR = 8 +c CALL ZAXPBY (NLEN,VECS(1,8),ZZERO,VECS(1,8),ZZERO,VECS(1,8)) +c CALL ZAXPBY (NLEN,VECS(1,4),ZZERO,VECS(1,4),ZZERO,VECS(1,4)) +c CALL ZAXPBY (NLEN,VECS(1,6),ZZERO,VECS(1,6),ZZERO,VECS(1,6)) + CALL Zscal (NLEN,ZZERO,VECS(1,4),1) + CALL Zscal (NLEN,ZZERO,VECS(1,6),1) + CALL Zscal (NLEN,ZZERO,VECS(1,8),1) +C +C This is one step of the TFQMR algorithm. +C Compute \beta_{n-1} and \rho_{n-1}. +C + 20 ZTMP = ZDOTU(NLEN,VECS(1,3),1,VECS(1,5),1) + BETA = ZTMP / RHO + RHO = ZTMP +C +C Compute y_{2n-1}, v_{n-1}, and A y_{2n-1}. +C + CALL ZAXPBY (NLEN,VECS(1,4),BETA,VECS(1,4),ZONE,VECS(1,8)) + CALL ZAXPBY (NLEN,VECS(1,6),ZONE,VECS(1,5),BETA,VECS(1,6)) +C +C Have the caller carry out AXB, then return here. +C CALL AXB (VECS(1,6),VECS(1,9)) +C + INFO(2) = 1 + INFO(3) = 6 + INFO(4) = 9 + RETLBL = 30 + RETURN + 30 CALL ZAXPBY (NLEN,VECS(1,4),BETA,VECS(1,4),ZONE,VECS(1,9)) +C +C Compute \sigma{n-1} and check for breakdowns. +C + ZTMP = ZDOTU(NLEN,VECS(1,3),1,VECS(1,4),1) + IF ((CDABS(ZTMP).EQ.DZERO).OR.(CDABS(RHO).EQ.DZERO)) THEN + IERR = 8 + GO TO 90 + END IF +C +C Compute \alpha_{n-1}, d_{2n-1} and w_{2n}. +C + ALPHA = RHO / ZTMP + ZTMP = VAR * ETA / ALPHA + CALL ZAXPBY (NLEN,VECS(1,7),ZONE,VECS(1,6),ZTMP,VECS(1,7)) +c CALL ZAXPBY (NLEN,VECS(1,5),ZONE,VECS(1,5),-ALPHA,VECS(1,9)) + CALL ZAXPY (NLEN,-ALPHA,VECS(1,9),1,VECS(1,5),1) +C +C Compute \varepsilon_{2n-1}^2, \eta_{2n-1}^2, c_{2n-1}^2, and +C \tau_{2n-1}^2. +C + DTMP = DZNRM2(NLEN,VECS(1,5),1) + DTMP = DTMP * DTMP + VAR = DTMP / TAU + COS = DONE / ( DONE + VAR ) + TAU = DTMP * COS + ETA = ALPHA * COS +C +C Compute x_{2n-1} and the upper bound for its residual norm. +C +c CALL ZAXPBY (NLEN,VECS(1,1),ZONE,VECS(1,1),ETA,VECS(1,7)) + CALL ZAXPY (NLEN,ETA,VECS(1,7),1,VECS(1,1),1) +C +C Compute the residual norm upper bound. +C If the scaled upper bound is within one order of magnitude of the +C target convergence norm, compute the true residual norm. +C + UNRM = DSQRT(DBLE(2*N) * TAU) / R0 + UCHK = UNRM + IF ((TRES.EQ.0).AND.(UNRM/TOL.GT.DTEN)) GO TO 50 +C +C Have the caller carry out AXB, then return here. +C CALL AXB (VECS(1,1),VECS(1,9)) +C + INFO(2) = 1 + INFO(3) = 1 + INFO(4) = 9 + RETLBL = 40 + RETURN + 40 CALL ZAXPBY (NLEN,VECS(1,9),ZONE,VECS(1,2),-ZONE,VECS(1,9)) + RESN = DZNRM2(NLEN,VECS(1,9),1) / R0 + UCHK = RESN +C +C Output the trace messages and convergence history. +C + 50 IF (VF.NE.0) WRITE (VF,'(2I8,2E11.4)') N, 2*N-1, UNRM, RESN + IF (TF.NE.0) WRITE (TF,'(2I8,2E11.4)') N, 2*N-1, UNRM, RESN +C +C Check for convergence or termination. Stop if: +C 1. algorithm converged; +C 2. the residual norm upper bound is smaller than the computed +C residual norm by a factor of at least 100. +C + IF (RESN.LE.TOL) THEN + IERR = 0 + GO TO 90 + ELSE IF (UNRM.LT.UCHK/DHUN) THEN + IERR = 4 + GO TO 90 + END IF +C +C Compute y_{2n}, A y_{2n}, d_{2n}, and w_{2n+1}. +C +c CALL ZAXPBY (NLEN,VECS(1,6),ZONE,VECS(1,6),-ALPHA,VECS(1,4)) + CALL ZAXPY (NLEN,-ALPHA,VECS(1,4),1,VECS(1,6),1) + ZTMP = VAR * COS + CALL ZAXPBY (NLEN,VECS(1,7),ZONE,VECS(1,6),ZTMP,VECS(1,7)) +C +C Have the caller carry out AXB, then return here. +C CALL AXB (VECS(1,6),VECS(1,8)) +C + INFO(2) = 1 + INFO(3) = 6 + INFO(4) = 8 + RETLBL = 60 + RETURN +c60 CALL ZAXPBY (NLEN,VECS(1,5),ZONE,VECS(1,5),-ALPHA,VECS(1,8)) + 60 CALL ZAXPY (NLEN,-ALPHA,VECS(1,8),1,VECS(1,5),1) +C +C Compute \varepsilon_{2n}^2, \eta_{2n}^2, c_{2n}^2, and +C \tau_{2n}^2. +C + DTMP = DZNRM2(NLEN,VECS(1,5),1) + DTMP = DTMP * DTMP + VAR = DTMP / TAU + COS = DONE / ( DONE + VAR ) + TAU = DTMP * COS + ETA = ALPHA * COS +C +C Compute x_{2n}. +C +c CALL ZAXPBY (NLEN,VECS(1,1),ZONE,VECS(1,1),ETA,VECS(1,7)) + CALL ZAXPY (NLEN,ETA,VECS(1,7),1,VECS(1,1),1) +C +C Compute the residual norm upper bound. +C If the scaled upper bound is within one order of magnitude of the +C target convergence norm, compute the true residual norm. +C + UNRM = DSQRT(DBLE(2*N+1) * TAU) / R0 + UCHK = UNRM + IF ((TRES.EQ.0).AND.(UNRM/TOL.GT.DTEN).AND.(N.LT.NLIM)) GO TO 80 +C +C Have the caller carry out AXB, then return here. +C CALL AXB (VECS(1,1),VECS(1,9)) +C + INFO(2) = 1 + INFO(3) = 1 + INFO(4) = 9 + RETLBL = 70 + RETURN + 70 CALL ZAXPBY (NLEN,VECS(1,9),ZONE,VECS(1,2),-ZONE,VECS(1,9)) + RESN = DZNRM2(NLEN,VECS(1,9),1) / R0 + UCHK = UNRM +C +C Output the trace messages and convergence history. +C + 80 IF (VF.NE.0) WRITE (VF,'(2I8,2E11.4)') N, 2*N, UNRM, RESN + IF (TF.NE.0) WRITE (TF,'(2I8,2E11.4)') N, 2*N, UNRM, RESN +C +C Check for convergence or termination. Stop if: +C 1. algorithm converged; +C 2. the residual norm upper bound is smaller than the computed +C residual norm by a factor of at least 100; +C 3. algorithm exceeded the iterations limit. +C + IF (RESN.LE.TOL) THEN + IERR = 0 + GO TO 90 + ELSE IF (UNRM.LT.UCHK/DHUN) THEN + IERR = 4 + GO TO 90 + ELSE IF (N.GE.NLIM) THEN + IERR = 4 + GO TO 90 + END IF +C +C Update the running counter. +C + N = N + 1 + GO TO 20 +C +C That's all. +C + 90 NLIM = N + RETLBL = 0 + INFO(1) = IERR +C + RETURN + END +C +C********************************************************************** diff --git a/src/Potential/Makefile b/src/Potential/Makefile new file mode 100755 index 000000000..f707cf234 --- /dev/null +++ b/src/Potential/Makefile @@ -0,0 +1,19 @@ +OBJ = calculateChargesPotential.o interpolatePotential.o getqm_mt.o getvmt.o newexchg.o alpha2_c.o newpot_c.o epcorr.o rs.o getXCName.o libxcInterface.o + +all: libPotential.a + +clean: + rm -f *.a *.o + +%.o : %.cpp + $(CXX) $(INC_PATH) -c -o $@ $< + +%.o : %.f + $(F77) -c -o $@ $< + +%.o : %.f90 + $(F77) -c -o $@ $< + +libPotential.a : $(OBJ) + $(AR) -r libPotential.a $(OBJ) + cp libPotential.a $(TOP_DIR)/lib diff --git a/src/Potential/PotentialShifter.hpp b/src/Potential/PotentialShifter.hpp new file mode 100644 index 000000000..37ebec665 --- /dev/null +++ b/src/Potential/PotentialShifter.hpp @@ -0,0 +1,43 @@ +#ifndef LSMS_SHIFT_POTENTIALS +#define LSMS_SHIFT_POTENTIALS + +class PotentialShifter { + +public: + + bool vSpinShiftFlag {false}; + double minShift {0.0}; + double maxShift {0.0}; + + void resetPotentials(LocalTypeInfo &local) { + for (int i=0; i > vr0; // the unshifted potential + +}; + +#endif diff --git a/src/Potential/alpha2_c.f b/src/Potential/alpha2_c.f new file mode 100755 index 000000000..7249ddfa7 --- /dev/null +++ b/src/Potential/alpha2_c.f @@ -0,0 +1,231 @@ +c +c =================================================================== + function alpha2(rs,dz,sp,iexch,exchg) +c =================================================================== +c + implicit none +c + integer iexch + integer incof + integer i +c + real*8 alpha2 + real*8 rs + real*8 dz + real*8 sp + real*8 exchg + real*8 ccp + real*8 rp + real*8 ccf + real*8 rf + real*8 a(3) + real*8 b(3) + real*8 c(3) + real*8 x0(3) + real*8 cst + real*8 aip + real*8 fnot + real*8 bip + real*8 for3 + real*8 thrd + real*8 vxx(2) + real*8 vxcs(2) + real*8 g(3) + real*8 dg(3) + real*8 tbq(3) + real*8 tbxq(3) + real*8 bxx(3) + real*8 q(3) + real*8 bb(3) + real*8 cx(3) + real*8 fm + real*8 fdz + real*8 ex + real*8 exf + real*8 xp + real*8 xf + real*8 gp + real*8 gf + real*8 exc + real*8 excf + real*8 dedz + real*8 gpp + real*8 gfp + real*8 depd + real*8 defd + real*8 decd + real*8 bfc + real*8 zp1 + real*8 zm1 + real*8 xr + real*8 pex + real*8 xrsq + real*8 qi + real*8 txb + real*8 fx + real*8 arct + real*8 dxs + real*8 vcc + real*8 facc + real*8 ecp + real*8 zp3 + real*8 zm3 + real*8 zp3m3 + real*8 fx1 + real*8 z4 + real*8 fz + real*8 beta + real*8 ec + real*8 f3ex +c +c data for von barth-hedin +c + data ccp,rp,ccf,rf/0.0450d+00,21.0d+00, + > 0.02250d+00,52.9166820d+00/ +c +c data for vosko-wilk-nusair +c + data incof/0/ + data a/-0.0337740d+00,0.06218140d+00,0.03109070d+00/ + data b/1.131070d+00,3.727440d+00,7.060420d+00/ + data c/13.00450d+00,12.93520d+00,18.05780d+00/ + data x0/-0.00475840d+00,-0.104980d+00,-0.32500d+00/ + data cst,aip/1.923661050d+00,0.916330590d+00/ + data fnot,bip,for3,thrd/1.709920950d+00,0.259921050d+00, + > 1.33333333330d+00,0.33333333330d+00/ +c +c the following are constants needed to obtain potential +c which are in g.s. painter's paper +c =====given here for check=====(generated below) +c +c data q/.7123108918d+01,.6151990820d+01,.4730926910d+01/ +c data bxx/-.4140337943d-03,-.3116760868d-01,-.1446006102/ +c data tbq/.3175776232d+00,.1211783343d+01,.2984793524d+01/ +c data tbxq/.3149055315d+00,.1143525764d+01,.2710005934d+01/ +c data bb/.4526137444d+01,.1534828576d+02,.3194948257d+02/ +c +c write(6,'('' iexch,rs,dz,sp '',i5,3f10.5)') iexch,rs,dz,sp +c +c*********** for positron potential construction iexch.ge.100 ********* + if(iexch.ge.100)then + alpha2=0.d0 + exchg=0.d0 + return + endif +c********************************************************************** + go to (10,20) iexch +c +c von barth-hedin exch-corr potential +c j. phys. c5,1629(1972) +c +c + 10 continue + fm=2.0d+00**(4.0d+00/3.0d+00)-2.0d+00 + fdz = ((1.0d+00+dz)**(4.0d+00/3.0d+00) + > +(1.0d+00-dz)**(4.0d+00/3.0d+00)-2.0d+00)/fm + ex=-0.916330d+00/rs + exf=ex*2.0d+00**0.333333330d+00 + xp=rs/rp + xf=rs/rf + gp = (1.0d+00+xp**3)*log(1.0d+00+1.0d+00/xp) + > -xp*xp +xp/2.0d+00 - 0.333333330d+00 + gf = (1.0d+00+xf**3)*log(1.0d+00+1.0d+00/xf) + > -xf*xf +xf/2.0d+00 - 0.333333330d+00 + exc = ex-ccp*gp + excf=exf-ccf*gf + dedz= (4.0d+00/3.0d+00)*(excf-exc) + > *((1.0d+00+dz)**(1.0d+00/3.0d+00) + > -(1.0d+00-dz)**(1.0d+00/3.0d+00))/fm + gpp = 3.0d+00*xp*xp*log(1.0d+00+1.0d+00/xp)-1.0d+00/xp + > +1.50d+00-3.0d+00*xp + gfp = 3.0d+00*xf*xf*log(1.0d+00+1.0d+00/xf)-1.0d+00/xf + > +1.50d+00-3.0d+00*xf + depd=-ex/rs-ccp/rp*gpp + defd=-exf/rs-ccf/rf*gfp + decd=depd+(defd-depd)*fdz +c exchange-correlation energy + exchg= exc + (excf-exc)*fdz +c exchange-correlation potential + alpha2 = exc+(excf-exc)*fdz-rs*decd/3.0d+00 + > +sp*(1.0d+00-sp*dz)*dedz + return +c +c + 20 continue + if(incof.ne.0) go to 30 + incof=2 +c +c vosko-wilk-nusair exch-corr potential +c taken from g.s. painter +c phys. rev. b24 4264,1981 +c +c generate constant coefficients for the parameterization (v-w-n) +c + do i=1,3 + cx(i)= x0(i)**2 + b(i)*x0(i) + c(i) + bfc= 4.0d+00*c(i) - b(i)**2.0d+00 + q(i)= sqrt(bfc) + bxx(i)= b(i)*x0(i)/cx(i) + tbq(i)= 2.0d+00*b(i)/q(i) + tbxq(i)= tbq(i) + 4.0d+00*x0(i)/q(i) + bb(i)= 4.0d+00*b(i)*( 1 - x0(i)*(b(i) + 2.0d+00*x0(i))/cx(i) ) + enddo +c + 30 continue + zp1= 1.0d+00 + dz + zm1= 1.0d+00 - dz + xr=sqrt(rs) + pex= -aip/rs + xrsq= rs +c +c generate g(i)=alpha,epsilon fct.s +c and their derivatives dg(i) +c 1=alpha(spin stiffness) 2=ecp 3=ecf +c + do i=1,3 + qi=q(i) + txb= 2.0d+00*xr + b(i) + fx= xrsq + xr*b(i) + c(i) + arct= atan2(qi,txb) + dxs= (xr-x0(i))**2/fx + g(i)=a(i)*( log(xrsq/fx) + tbq(i)*arct-bxx(i)*(log(dxs) + > +tbxq(i)*arct) ) + dg(i)=a(i)*( 2.0d+00/xr - txb/fx + > -bxx(i)*(2.0d+00/(xr-x0(i))-txb/fx) + > -bb(i)/(qi**2 + txb**2) ) + enddo +c + ecp=g(2) + zp3=zp1**thrd + zm3=zm1**thrd + zp3m3=zp3-zm3 +c part of last term in vx eq(13) + fx1=.50d+00*for3*pex*zp3m3 + z4= dz**4 + fz= cst*(zp1**for3 + zm1**for3 - 2.0d+00) + beta= fnot*( g(3)-g(2) )/g(1) -1.0d+00 + ec= ecp + fz*g(1)*( 1.0d+00 + z4*beta )/fnot + ex= pex*( 1.0d+00 + fz*bip ) + f3ex= for3*ex +c echange-correlation energy + exchg= ec + ex +c exchange potential + vxx(1)= f3ex + fx1*zm1 + vxx(2)= f3ex - fx1*zp1 +c correlation potential + vcc= ec - xr*( (1.0d+00-z4*fz)*dg(2) + z4*fz*dg(3) + > +(1.0d+00 - z4)*fz*dg(1)/fnot )/6.0d+00 +c + facc= 4.0d+00*g(1)*( dz**3*fz*beta + > +( 1.0d+00 + beta*z4 )*zp3m3/(6.0d+00*bip) ) + > /fnot +c +c exch-corr. potential for each spin as called in newpot +c + vxcs(1)= vcc + zm1*facc + vxx(1) + vxcs(2)= vcc - zp1*facc + vxx(2) +c + if( sp.ge.0 ) alpha2= vxcs(1) + if( sp.lt.0 ) alpha2= vxcs(2) + return + end diff --git a/src/Potential/calculateChargesPotential.cpp b/src/Potential/calculateChargesPotential.cpp new file mode 100644 index 000000000..882fd0953 --- /dev/null +++ b/src/Potential/calculateChargesPotential.cpp @@ -0,0 +1,882 @@ +#include "calculateChargesPotential.hpp" +#ifdef USE_LIBXC +#include "libxcInterface.hpp" +#endif + +void calculateChargesPotential(LSMSCommunication &comm, LSMSSystemParameters &lsms, LocalTypeInfo &local, CrystalParameters &crystal, int chargeSwitch) +{ + + Real *qsub; + Array3d rhoTemp; + + qsub = new Real[crystal.num_types]; + for (int i=0; i rhoTemp; + rhoTemp.resize(lsms.global.iprpts+1, 2, local.num_local); + + // Compute integrated densities of states and store in xval** + // (from mufind_c.f) + for(int i=0; i=3 + { + local.atom[i].qvalmt = local.atom[i].dosckint[0]; + local.atom[i].qvalws = local.atom[i].dosint[0]; + local.atom[i].mvalws = local.atom[i].dosint[1] * local.atom[i].evecNew[0] + + local.atom[i].dosint[2] * local.atom[i].evecNew[1] + + local.atom[i].dosint[3] * local.atom[i].evecNew[2]; + local.atom[i].mvalmt = local.atom[i].dosckint[1] * local.atom[i].evecNew[0] + + local.atom[i].dosckint[2] * local.atom[i].evecNew[1] + + local.atom[i].dosckint[3] * local.atom[i].evecNew[2]; + local.atom[i].xvalmt[0] = 0.5 * (local.atom[i].qvalmt + local.atom[i].mvalmt); + local.atom[i].xvalwsNew[0] = 0.5 * (local.atom[i].qvalws + local.atom[i].mvalws); + local.atom[i].xvalmt[1] = 0.5 * (local.atom[i].qvalmt - local.atom[i].mvalmt); + local.atom[i].xvalwsNew[1] = 0.5 * (local.atom[i].qvalws - local.atom[i].mvalws); + } + else if (lsms.n_spin_pola == 2) // nspin = 2 + { + local.atom[i].qvalmt = local.atom[i].dosckint[0] + local.atom[i].dosckint[1]; + local.atom[i].qvalws = local.atom[i].dosint[0] + local.atom[i].dosint[1]; + local.atom[i].mvalmt = local.atom[i].dosckint[0] - local.atom[i].dosckint[1]; + local.atom[i].mvalws = local.atom[i].dosint[0] - local.atom[i].dosint[1]; + + local.atom[i].xvalmt[0] = local.atom[i].dosckint[0]; + local.atom[i].xvalwsNew[0] = local.atom[i].dosint[0]; + local.atom[i].xvalmt[1] = local.atom[i].dosckint[1]; + local.atom[i].xvalwsNew[1] = local.atom[i].dosint[1]; + } + else // nspin = 1 + { + local.atom[i].qvalmt = local.atom[i].dosckint[0]; + local.atom[i].qvalws = local.atom[i].dosint[0]; + local.atom[i].mvalmt = 0.0; + local.atom[i].mvalws = 0.0; + + local.atom[i].xvalmt[0] = local.atom[i].dosckint[0]; + local.atom[i].xvalwsNew[0] = local.atom[i].dosint[0]; + } + + if (lsms.global.iprint > 0) + { + printf(" LOCAL WS Int[n(e)] = %18.11f\n", local.atom[i].qvalws); + printf(" LOCAL MT Int[n(e)] = %18.11f\n", local.atom[i].qvalmt); + printf(" LOCAL interstial Q = %18.11f\n", local.atom[i].qvalws - local.atom[i].qvalmt); + + if (lsms.n_spin_pola == 2) + { + printf(" LOCAL WS Int[m(e)] = %18.11f\n", local.atom[i].mvalws); + printf(" LOCAL MT Int[m(e)] = %18.11f\n", local.atom[i].mvalmt); + } + + printf(" LOCAL interstial M = %18.11f\n", local.atom[i].mvalws - local.atom[i].mvalmt); + printf(" Spin = 1 LOCAL WS Int[n(e)] = %18.11f\n", local.atom[i].xvalwsNew[0]); + printf(" Spin = 2 LOCAL WS Int[n(e)] = %18.11f\n", local.atom[i].xvalwsNew[1]); + printf(" Spin = 1 LOCAL MT Int[n(e)] = %18.11f\n", local.atom[i].xvalmt[0]); + printf(" Spin = 2 LOCAL MT Int[n(e)] = %18.11f\n", local.atom[i].xvalmt[1]); + printf(" Spin = 1 LOCAL interstial Q = %18.11f\n", local.atom[i].xvalwsNew[0] - local.atom[i].xvalmt[0]); + printf(" Spin = 2 LOCAL interstial Q = %18.11f\n", local.atom[i].xvalwsNew[1] - local.atom[i].xvalmt[1]); + printf(" LOCAL Moment orientation = (%18.11f, %18.11f, %18.11f)\n", local.atom[i].evecNew[0], local.atom[i].evecNew[1], local.atom[i].evecNew[2]); + } + + // Calculate qtotws and mtotws + + switch (chargeSwitch) + { + case 1: + { + local.atom[i].qtotws = local.atom[i].xvalws[0] + \ + (lsms.n_spin_pola-1) * local.atom[i].xvalws[lsms.n_spin_pola-1] + \ + local.atom[i].zsemss + \ + local.atom[i].zcorss; + local.atom[i].mtotws = local.atom[i].xvalws[0] - local.atom[i].xvalws[lsms.n_spin_pola-1]; + break; + } + default: + { + local.atom[i].qtotws = local.atom[i].xvalwsNew[0] + \ + (lsms.n_spin_pola-1) * local.atom[i].xvalwsNew[lsms.n_spin_pola-1] + \ + local.atom[i].zsemss + \ + local.atom[i].zcorss; + local.atom[i].mtotws = local.atom[i].xvalwsNew[0] - local.atom[i].xvalwsNew[lsms.n_spin_pola-1]; + } + } + +// printf("qtotws = %12.8f\n", local.atom[i].qtotws); +// printf("mtotws = %12.8f\n", local.atom[i].mtotws); + +// from genpot_c.f +// ================================================================ +// calculate qtotmt and mtotmt..................................... +// ---------------------------------------------------------------- + + Real rSphere; + + switch (lsms.mtasa) + { + case 1: + rSphere = local.atom[i].rws; + break; + case 2: + rSphere = local.atom[i].rws; + break; + default: + rSphere = local.atom[i].rInscribed; + } + + Real *rTemp; + rTemp = new Real[local.atom[i].jmt+3]; + + rTemp[0] = 0.0; + for (int j=0; j 0) + { + printf("Spin = 1 rhotot[jmt-1], [jmt], [jmt+1] = %20.16f %20.16f %20.16f\n", local.atom[i].rhotot(local.atom[i].jmt-1,0), local.atom[i].rhotot(local.atom[i].jmt,0), local.atom[i].rhotot(local.atom[i].jmt+1,0)); + printf("Spin = 2 rhotot[jmt-1], [jmt], [jmt+1] = %20.16f %20.16f %20.16f\n", local.atom[i].rhotot(local.atom[i].jmt-1,lsms.n_spin_pola-1), local.atom[i].rhotot(local.atom[i].jmt,lsms.n_spin_pola-1), local.atom[i].rhotot(local.atom[i].jmt+1,lsms.n_spin_pola-1)); + } + + getqm_mt_(&lsms.n_spin_pola, &local.atom[i].jmt, &local.atom[i].rInscribed, rTemp, &local.atom[i].rhotot(0,0), &lsms.global.iprpts, &rhoTemp(0,0,i), &lsms.mtasa, &local.atom[i].qtotmt, &local.atom[i].mtotmt, &rSphere, &lsms.global.iprint); + + break; + } + default: + { + if (local.atom[i].rhoNew(local.atom[i].jmt,0) == 0.0) + local.atom[i].rhoNew(local.atom[i].jmt,0) = local.atom[i].rhoNew(local.atom[i].jmt-1,0); + if (local.atom[i].rhoNew(local.atom[i].jmt+1,0) == 0.0) + local.atom[i].rhoNew(local.atom[i].jmt+1,0) = local.atom[i].rhoNew(local.atom[i].jmt-1,0); + if (local.atom[i].rhoNew(local.atom[i].jmt,lsms.n_spin_pola-1) == 0.0) + local.atom[i].rhoNew(local.atom[i].jmt,lsms.n_spin_pola-1) = local.atom[i].rhoNew(local.atom[i].jmt-1,lsms.n_spin_pola-1); + if (local.atom[i].rhoNew(local.atom[i].jmt+1,lsms.n_spin_pola-1) == 0.0) + local.atom[i].rhoNew(local.atom[i].jmt+1,lsms.n_spin_pola-1) = local.atom[i].rhoNew(local.atom[i].jmt-1,lsms.n_spin_pola-1); + + if (lsms.global.iprint > 0) + { + printf("Spin = 1 rhoNew[jmt-1], [jmt], [jmt+1] = %20.16f %20.16f %20.16f\n", local.atom[i].rhoNew(local.atom[i].jmt-1,0), local.atom[i].rhoNew(local.atom[i].jmt,0), local.atom[i].rhoNew(local.atom[i].jmt+1,0)); + printf("Spin = 2 rhoNew[jmt-1], [jmt], [jmt+1] = %20.16f %20.16f %20.16f\n", local.atom[i].rhoNew(local.atom[i].jmt-1,lsms.n_spin_pola-1), local.atom[i].rhoNew(local.atom[i].jmt,lsms.n_spin_pola-1), local.atom[i].rhoNew(local.atom[i].jmt+1,lsms.n_spin_pola-1)); + } + + getqm_mt_(&lsms.n_spin_pola, &local.atom[i].jmt, &local.atom[i].rInscribed, rTemp, &local.atom[i].rhoNew(0,0), &lsms.global.iprpts, &rhoTemp(0,0,i), &lsms.mtasa, &local.atom[i].qtotmt, &local.atom[i].mtotmt, &rSphere, &lsms.global.iprint); + } + } + + if (lsms.global.iprint >= 0) + { + printf("\n"); + printf(" GENPOT / calculateLocalCharges: \n"); + printf(" Total charge and moment in W-S cell:\n"); + printf(" qtotws = %18.11f\n", local.atom[i].qtotws); + printf(" mtotws = %18.11f\n", local.atom[i].mtotws); + } + + delete[] rTemp; + + } +} + + +void calculateCharges(LSMSCommunication &comm, LSMSSystemParameters &lsms, LocalTypeInfo &local, CrystalParameters &crystal, Real *qsub, Array3d &rhoTemp, int chargeSwitch) +{ + + // Compute integrated densities of states and store in xval** + // (from mufind_c.f) + for(int i=0; i=3 + { + local.atom[i].qvalmt = local.atom[i].dosckint[0]; + local.atom[i].qvalws = local.atom[i].dosint[0]; + local.atom[i].mvalws = local.atom[i].dosint[1] * local.atom[i].evecNew[0] + \ + local.atom[i].dosint[2] * local.atom[i].evecNew[1] + \ + local.atom[i].dosint[3] * local.atom[i].evecNew[2]; + local.atom[i].mvalmt = local.atom[i].dosckint[1] * local.atom[i].evecNew[0] + \ + local.atom[i].dosckint[2] * local.atom[i].evecNew[1] + \ + local.atom[i].dosckint[3] * local.atom[i].evecNew[2]; + local.atom[i].xvalmt[0] = 0.5 * (local.atom[i].qvalmt + local.atom[i].mvalmt); + local.atom[i].xvalwsNew[0] = 0.5 * (local.atom[i].qvalws + local.atom[i].mvalws); + local.atom[i].xvalmt[1] = 0.5 * (local.atom[i].qvalmt - local.atom[i].mvalmt); + local.atom[i].xvalwsNew[1] = 0.5 * (local.atom[i].qvalws - local.atom[i].mvalws); + } + else if (lsms.n_spin_pola == 2) // nspin = 2 + { + local.atom[i].qvalmt = local.atom[i].dosckint[0] + local.atom[i].dosckint[1]; + local.atom[i].qvalws = local.atom[i].dosint[0] + local.atom[i].dosint[1]; + local.atom[i].mvalmt = local.atom[i].dosckint[0] - local.atom[i].dosckint[1]; + local.atom[i].mvalws = local.atom[i].dosint[0] - local.atom[i].dosint[1]; + + local.atom[i].xvalmt[0] = local.atom[i].dosckint[0]; + local.atom[i].xvalwsNew[0] = local.atom[i].dosint[0]; + local.atom[i].xvalmt[1] = local.atom[i].dosckint[1]; + local.atom[i].xvalwsNew[1] = local.atom[i].dosint[1]; + } + else // nspin = 1 + { + local.atom[i].qvalmt = local.atom[i].dosckint[0]; + local.atom[i].qvalws = local.atom[i].dosint[0]; + local.atom[i].mvalmt = 0.0; + local.atom[i].mvalws = 0.0; + + local.atom[i].xvalmt[0] = local.atom[i].dosckint[0]; + local.atom[i].xvalwsNew[0] = local.atom[i].dosint[0]; + } + + if (lsms.global.iprint > 0) + { + printf(" LOCAL WS Int[n(e)] = %18.11f\n", local.atom[i].qvalws); + printf(" LOCAL MT Int[n(e)] = %18.11f\n", local.atom[i].qvalmt); + printf(" LOCAL interstial Q = %18.11f\n", local.atom[i].qvalws - local.atom[i].qvalmt); + + if (lsms.n_spin_pola == 2) + { + printf(" LOCAL WS Int[m(e)] = %18.11f\n", local.atom[i].mvalws); + printf(" LOCAL MT Int[m(e)] = %18.11f\n", local.atom[i].mvalmt); + } + + printf(" LOCAL interstial M = %18.11f\n", local.atom[i].mvalws - local.atom[i].mvalmt); + printf(" Spin = 1 LOCAL WS Int[n(e)] = %18.11f\n", local.atom[i].xvalwsNew[0]); + printf(" Spin = 2 LOCAL WS Int[n(e)] = %18.11f\n", local.atom[i].xvalwsNew[1]); + printf(" Spin = 1 LOCAL MT Int[n(e)] = %18.11f\n", local.atom[i].xvalmt[0]); + printf(" Spin = 2 LOCAL MT Int[n(e)] = %18.11f\n", local.atom[i].xvalmt[1]); + printf(" Spin = 1 LOCAL interstial Q = %18.11f\n", local.atom[i].xvalwsNew[0] - local.atom[i].xvalmt[0]); + printf(" Spin = 2 LOCAL interstial Q = %18.11f\n", local.atom[i].xvalwsNew[1] - local.atom[i].xvalmt[1]); + printf(" LOCAL Moment orientation = (%18.11f, %18.11f, %18.11f)\n", local.atom[i].evecNew[0], local.atom[i].evecNew[1], local.atom[i].evecNew[2]); + } + + // Calculate qtotws and mtotws + + switch (chargeSwitch) + { + case 1: + { + local.atom[i].qtotws = local.atom[i].xvalws[0] + \ + (lsms.n_spin_pola-1) * local.atom[i].xvalws[lsms.n_spin_pola-1] + \ + local.atom[i].zsemss + \ + local.atom[i].zcorss; + local.atom[i].mtotws = local.atom[i].xvalws[0] - local.atom[i].xvalws[lsms.n_spin_pola-1]; + break; + } + default: + { + local.atom[i].qtotws = local.atom[i].xvalwsNew[0] + \ + (lsms.n_spin_pola-1) * local.atom[i].xvalwsNew[lsms.n_spin_pola-1] + \ + local.atom[i].zsemss + \ + local.atom[i].zcorss; + local.atom[i].mtotws = local.atom[i].xvalwsNew[0] - local.atom[i].xvalwsNew[lsms.n_spin_pola-1]; + } + } + + if (lsms.global.iprint > 0) + { + printf("qtotws = %12.8f\n", local.atom[i].qtotws); + printf("mtotws = %12.8f\n", local.atom[i].mtotws); + } + +// from genpot_c.f +/* + ================================================================ + calculate qtotmt and mtotmt..................................... + ---------------------------------------------------------------- +*/ + Real rSphere; + + switch (lsms.mtasa) + { + case 1: + rSphere = local.atom[i].rws; + break; + case 2: + rSphere = local.atom[i].rws; + break; + default: + rSphere = local.atom[i].rInscribed; + } + + Real *rTemp; + rTemp = new Real[local.atom[i].jmt+3]; + + rTemp[0] = 0.0; + for (int j=0; j 0) + { + printf("Spin = 1 rhotot[jmt-1], [jmt], [jmt+1] = %20.16f %20.16f %20.16f\n", local.atom[i].rhotot(local.atom[i].jmt-1,0), local.atom[i].rhotot(local.atom[i].jmt,0), local.atom[i].rhotot(local.atom[i].jmt+1,0)); + printf("Spin = 2 rhotot[jmt-1], [jmt], [jmt+1] = %20.16f %20.16f %20.16f\n", local.atom[i].rhotot(local.atom[i].jmt-1,lsms.n_spin_pola-1), local.atom[i].rhotot(local.atom[i].jmt,lsms.n_spin_pola-1), local.atom[i].rhotot(local.atom[i].jmt+1,lsms.n_spin_pola-1)); + } + + getqm_mt_(&lsms.n_spin_pola, &local.atom[i].jmt, &local.atom[i].rInscribed, rTemp, &local.atom[i].rhotot(0,0), &lsms.global.iprpts, &rhoTemp(0,0,i), &lsms.mtasa, &local.atom[i].qtotmt, &local.atom[i].mtotmt, &rSphere, &lsms.global.iprint); + + break; + } + default: + { + if (local.atom[i].rhoNew(local.atom[i].jmt,0) == 0.0) + local.atom[i].rhoNew(local.atom[i].jmt,0) = local.atom[i].rhoNew(local.atom[i].jmt-1,0); + if (local.atom[i].rhoNew(local.atom[i].jmt+1,0) == 0.0) + local.atom[i].rhoNew(local.atom[i].jmt+1,0) = local.atom[i].rhoNew(local.atom[i].jmt-1,0); + if (local.atom[i].rhoNew(local.atom[i].jmt,lsms.n_spin_pola-1) == 0.0) + local.atom[i].rhoNew(local.atom[i].jmt,lsms.n_spin_pola-1) = local.atom[i].rhoNew(local.atom[i].jmt-1,lsms.n_spin_pola-1); + if (local.atom[i].rhoNew(local.atom[i].jmt+1,lsms.n_spin_pola-1) == 0.0) + local.atom[i].rhoNew(local.atom[i].jmt+1,lsms.n_spin_pola-1) = local.atom[i].rhoNew(local.atom[i].jmt-1,lsms.n_spin_pola-1); + + if (lsms.global.iprint > 0) + { + printf("Spin = 1 rhoNew[jmt-1], [jmt], [jmt+1] = %20.16f %20.16f %20.16f\n", local.atom[i].rhoNew(local.atom[i].jmt-1,0), local.atom[i].rhoNew(local.atom[i].jmt,0), local.atom[i].rhoNew(local.atom[i].jmt+1,0)); + printf("Spin = 2 rhoNew[jmt-1], [jmt], [jmt+1] = %20.16f %20.16f %20.16f\n", local.atom[i].rhoNew(local.atom[i].jmt-1,lsms.n_spin_pola-1), local.atom[i].rhoNew(local.atom[i].jmt,lsms.n_spin_pola-1), local.atom[i].rhoNew(local.atom[i].jmt+1,lsms.n_spin_pola-1)); + } + + getqm_mt_(&lsms.n_spin_pola, &local.atom[i].jmt, &local.atom[i].rInscribed, &rTemp[0], &local.atom[i].rhoNew(0,0), &lsms.global.iprpts, &rhoTemp(0,0,i), &lsms.mtasa, &local.atom[i].qtotmt, &local.atom[i].mtotmt, &rSphere, &lsms.global.iprint); + + } + } + + if (lsms.global.iprint >= 0) + { + printf("\n"); + printf(" GENPOT / calculateCharges: \n"); + printf(" Total charge and moment in W-S cell:\n"); + printf(" qtotws = %18.11f\n", local.atom[i].qtotws); + printf(" mtotws = %18.11f\n", local.atom[i].mtotws); + } + + delete[] rTemp; + + } + +/* + ================================================================ + calculate interstitial charge, moment & charge density.......... + ================================================================ +*/ + // Total interstitial charge or moment components + Real qmIntTotal[4]; + for (int i=0; i<4; i++) qmIntTotal[i] = 0.0; + + for(int i=0; i= 0) + { + printf("Total interstitial charge = %18.11f\n", local.atom[i].qInt); + printf("Total interstitial moment = %18.11f\n", local.atom[i].mInt); + } + } + } + + + for (int i=0; i= 2) // ASA-MT case (not implemented) + { + + } + else // Muffin-tin or ASA cases + { +/* + ================================================================ + calculate qsub for this atom.................................... + ================================================================ +*/ + qsub[local.global_id[i]] = local.atom[i].ztotss - local.atom[i].qtotmt + \ + local.atom[i].rhoInt * local.atom[i].omegaMT; +/* + ================================================================ + calculate the no. of excess electrons and the moment on the site + ================================================================ +*/ + dqSite = local.atom[i].qtotmt + local.atom[i].qInt / Real(crystal.num_atoms) - \ + local.atom[i].ztotss; + momentSiteComponent[0] = local.atom[i].mtotmt * local.atom[i].evecNew[0] + \ + local.atom[i].mIntComponent[0] / Real(crystal.num_atoms); + momentSiteComponent[1] = local.atom[i].mtotmt * local.atom[i].evecNew[1] + \ + local.atom[i].mIntComponent[1] / Real(crystal.num_atoms); + momentSiteComponent[2] = local.atom[i].mtotmt * local.atom[i].evecNew[2] + \ + local.atom[i].mIntComponent[2] / Real(crystal.num_atoms); + } + + momentSite = std::sqrt(momentSiteComponent[0] * momentSiteComponent[0] + \ + momentSiteComponent[1] * momentSiteComponent[1] + \ + momentSiteComponent[2] * momentSiteComponent[2]); + + if(local.atom[i].mtotws < 0) momentSite = -momentSite; + + } + +/* + ================================================================ + obtain the qsub from all other nodes............................ + ---------------------------------------------------------------- +*/ + globalSum(comm, qsub, crystal.num_types); + + if (lsms.global.iprint >= 1) + { + for (int i=0; i &rhoTemp, int chargeSwitch) +{ +/* + ================================================================ + calculate muffin-tin zero potential and its contribution to the + Coulomb energy.................................................. + note: lattice constant factor is included in madmat............. + ================================================================ +*/ + Real vmtSum = 0.0; + Real vmt = 0.0; + Real *vmt1 = new Real[local.num_local]; + Real u0Sum = 0.0; + Real u0 = 0.0; + + for (int i=0; i epcorr(rhojmt,0.d0,r_mesh(jmt),0,alpgga,50.d0) + // call GlobalSum(epcorrave) + // epcorrave=epcorrave/dble(num_atoms) + // vxout(1)=epcorrave + // vxout(n_spin_pola)=epcorrave + // endif + + for (int is=0; is &rhoTemp, int chargeSwitch = 0); + +void calculateLocalCharges(LSMSSystemParameters &lsms, LocalTypeInfo &local, int chargeSwitch = 0); + +void calculatePotential(LSMSCommunication &comm, LSMSSystemParameters &lsms, LocalTypeInfo &local, CrystalParameters &crystal, Real *qsub, Array3d &rhoTemp, int chargeSwitch = 0); + +void calculateMTZeroPotDiff(LSMSSystemParameters &lsms, LocalTypeInfo &local, int chargeSwitch = 0); + +#endif diff --git a/src/Potential/epcorr.f b/src/Potential/epcorr.f new file mode 100755 index 000000000..3b914b20b --- /dev/null +++ b/src/Potential/epcorr.f @@ -0,0 +1,145 @@ + function epcorr(chd,gradc,radius,ivepc,alpgga,rspmax) +c +c purpose: compute the positron correlation potential for a given +c electron charge density +c +c method: +c compute potential based on parameters and functional form. +c if alpgga is not zero, make the gga correction based on +c the gradient of the charge density. +c +c calls: fns : rs, intrinsic functions datan, exp, sqrt, log +c +c written: philip sterne, sterne1@llnl.gov +c date: May 04, 1998 +c changes: +c 7/13/98 : added rspmax to control maximum rs value in computing +c ep-corr potentials. sterne1@llnl.gov +c comments: +c ivepc positron correlation +c +c 0 Sterne-Kaiser PRB 43, 13892 (1991) +c 1 Boronski-Nieminen PRB 34, 3820 (1986) +c 2 IPM No interaction - Independent Particle Model +c +c Sterne-Kaiser and Boronski-Nieminen are both fit to rpa, +c arponnen and pajanne (ann phys 121 343), and low density limits. +c + implicit none +c +c input variables +c + real*8 chd ! charge density - either n(r) or 4*pi*r**2*n(r) + real*8 gradc ! magnitude of the gradient of the charge density + ! - either |del(n(r))| or 4*pi*r**2*|del(n(r))| + real*8 radius ! if zero, chd is just n(r), else radius r for chd + integer ivepc ! choice of electron-positron correlation potential + real*8 alpgga ! alpha for gga correction - zero means no gga + real*8 rspmax ! maximum rs in positron-electron correlation. + ! for larger rs values, epcorr(rspmax) is used +c +c output variables +c + real*8 epcorr ! calculated electron-positron correlation +c +c internal variables +c + real*8 skc(5) ! parameters for Sterne-Kaiser fit + real*8 bnc(4,4) ! parameters for Boronski-Nieminen fit + real*8 bnrs(4) ! rs-cutoffs for Boronski-Nieminen fit + real*8 rs ! function - calculate rs from charge density + real*8 rs1 ! rs value corresponding to input chd + real*8 rsd ! shifted rs value - used in functional + real*8 fwvec ! fermi wavevector + real*8 qtfsq ! (Thomas-Fermi screening length)**2 + real*8 epsgga ! contribution to gga correlation function + real*8 expgga ! contribution to gga correlation function + real*8 pi ! well-known approximation to 22/7 +c + data skc /-1.56d0, 0.7207d0, 4.092d0, 51.96d0, 0.1324d0/ +c + data bnc / -1.56d0, 0.051d0, -0.081d0, 1.14d0, + * -0.92305d0, -0.05459d0, 0.d0, 0.d0, + * -13.15111d0, 2.5d0, 2.8655d0, -0.6298d0, + * -10250.5786d0, 44.50466d0, -0.524d0, 0.d0/ +c + data bnrs/0.302d0, 0.56d0, 8.0d0, 200.d0/ +c +c convert from charge density to r_s +c + rs1 = rs(chd,radius,rspmax) +c --------------------------------------------------------------------------- +c electron-positron correlation potential functional +c --------------------------------------------------------------------------- +c + if (ivepc.eq.0) then +c +c sterne-kaiser fit +c + if (rs1.gt.bnrs(4)) then + epcorr=bnc(3,4) + else + epcorr=skc(1)/sqrt(atan(rs1))+skc(2)+ + * skc(5)*exp(-((rs1-skc(3))**2)/skc(4)) + endif +c + else if (ivepc.eq.1) then +c +c boronski-neimenen fit +c + if (rs1.gt.bnrs(4)) then + epcorr=bnc(3,4) + else if (rs1.gt.bnrs(3)) then + epcorr=bnc(1,4)/(rs1**6)+bnc(2,4)/(rs1**3)+bnc(3,4) + else if (rs1.gt.bnrs(2)) then + rsd=rs1+bnc(2,3) + epcorr=bnc(1,3)/rsd/rsd+bnc(3,3)/rsd+bnc(4,3) + else if (rs1.gt.bnrs(1)) then + epcorr=bnc(1,2)+bnc(2,2)/rs1/rs1 + else + epcorr=bnc(1,1)/sqrt(rs1)+ + * (bnc(2,1)*log(rs1)+bnc(3,1))*log(rs1)+bnc(4,1) + endif +c + else if(ivepc.eq.2) then +c +c no electron-positron correlation - IPM +c + epcorr=0.d0 +c + else + write(*,*) 'error in epcorr: ivepc = ',ivepc, + * ' unknown option - stopping' + stop 'ivepc in epcorr' + endif +c +c gga correction +c + if(alpgga.gt.0.d0) then +c +c find local fermi wavevector fwvec and use it to calculate +c the square of the thomas-fermi screening length, qtfsq +c + pi = 4.d0*datan(1.d0) + fwvec = ((9.d0*pi/4.d0)**(1.d0/3.d0))/rs1 + qtfsq = 4.d0*fwvec/pi +c +c compute the lda gradient correction term epsgga +c and the exponential factor expgga = exp(-alpgga*epsgga) +c + if(rs1.lt.rspmax) then + epsgga = (gradc/chd)**2/qtfsq + expgga = dexp(-alpgga*epsgga) + else + epsgga = 0.d0 + expgga = 1.d0 + endif +c +c correct epcorr with gga term +c + epcorr = epcorr*expgga**(1.d0/3.d0) + endif +c + return + end + diff --git a/src/Potential/getXCName.cpp b/src/Potential/getXCName.cpp new file mode 100644 index 000000000..524ae5ac6 --- /dev/null +++ b/src/Potential/getXCName.cpp @@ -0,0 +1,35 @@ +#include "Main/SystemParameters.hpp" +#include "Potential/libxcInterface.hpp" +#include "getXCName.hpp" +#include + +bool getXCName(LSMSSystemParameters &lsms, std::string &name) +{ + if(lsms.xcFunctional[0]==0) // built in functionals + { + switch(lsms.xcFunctional[1]) + { + case 1: name="von Barth-Hedin (LSMS_1)"; return true; + case 2: name="Vosko-Wilk-Nusair (LSMS_1)"; return true; + } + name="Illegal Exchange-Correlation Functional (built in)!"; return false; + } else if(lsms.xcFunctional[0]==1) { // libxc functionals +#ifdef USE_LIBXC + name=""; + + if(lsms.libxcFunctional.numFunctionals==0) name="none"; + for(int i=0; iname); + if(i!=lsms.libxcFunctional.numFunctionals-1) name.append(" + "); + } + name.append(" (libxc)"); + return true; +#else + name="Illegal Exchange-Correlation Functional (LSMS not linked to libXC)!"; return false; +#endif + } else { // unknown functional!! + name="Illegal Exchange-Correlation Functional!"; return false; + } + return false; +} diff --git a/src/Potential/getXCName.hpp b/src/Potential/getXCName.hpp new file mode 100644 index 000000000..775270c59 --- /dev/null +++ b/src/Potential/getXCName.hpp @@ -0,0 +1,9 @@ +#ifndef LSMS_GETXCNAME_HPP +#define LSMS_GETXCNAME_HPP +#include +#include "Main/SystemParameters.hpp" + +bool getXCName(LSMSSystemParameters &lsms, std::string &name); + +#endif + diff --git a/src/Potential/getqm_mt.f b/src/Potential/getqm_mt.f new file mode 100755 index 000000000..701673885 --- /dev/null +++ b/src/Potential/getqm_mt.f @@ -0,0 +1,65 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine getqm_mt(n_spin_pola,ilast,rsmo,sqr,rho,iprpts,rhot, + > i_smooth_rsmo,qtotmt,mtotmt,r_sph,iprint) +c ================================================================ +c calculates the charge inside r_sph +c cuts off integral smoothly at rsmo if i_smooth_rsmo.ge.2 +c + implicit none +c + integer n_spin_pola + integer j + integer ilast + integer is + integer i_smooth_rsmo,iprint,iprpts +c + real*8 rsmo,sqr(0:ilast),sqrsmo + real*8 rho(iprpts,n_spin_pola) + real*8 rhot(0:ilast,2),drhot + real*8 qtotmt,qmtis,r_sph + real*8 mtotmt + real*8 width + real*8 one + parameter (one=1.d0) +c +c ================================================================ + qtotmt=0.0d0 + qmtis=0.0d0 + mtotmt=0.0d0 + width=0.0d0 + do is=1,n_spin_pola + if(i_smooth_rsmo.le.1) then + do j=1,ilast + rhot(j,1)=2.d0*rho(j,is)/(sqr(j)**4) + enddo + else + width=sqr(ilast)-sqr(ilast-1) + sqrsmo=sqrt(rsmo) + do j=1,ilast + rhot(j,1)=2.d0*rho(j,is)/((one+exp((sqr(j)-sqrsmo)/width)) + & *sqr(j)**4) + enddo + endif +c call interp(sqr(1),rho(1,1),4,0.d0,rhot(0,1),drhot,.false.) + call interp(sqr(1),rhot(1,1),4,0.d0,rhot(0,1),drhot,.false.) +c ------------------------------------------------------------- + call newint(ilast+1,sqr,rhot(0,1),rhot(0,2),5) +c ------------------------------------------------------------- + call interp + > (sqr(1),rhot(1,2),ilast,sqrt(r_sph),qmtis,drhot,.false.) + qtotmt=qtotmt+qmtis +c mtotmt=mtotmt+(n_spin_pola-1)*(3.0d0-2.0d0*is)*rhot(ilast,2) + mtotmt=mtotmt+(n_spin_pola-1)*(3.0d0-2.0d0*is)*qmtis + enddo +c + if(iprint.ge.0) then + write(6,'(/,'' GETQM_MT:: r_sph charge,w'',t40,''='', + > 3f18.11,2i5)')qtotmt,width,sqr(ilast)**2,ilast,i_smooth_rsmo + write(6,'('' muffin-tin moment'',t40,''='', + > 1f18.11)')mtotmt + endif +c +c ================================================================ + return + end diff --git a/src/Potential/getvmt.cpp b/src/Potential/getvmt.cpp new file mode 100644 index 000000000..84527b371 --- /dev/null +++ b/src/Potential/getvmt.cpp @@ -0,0 +1,75 @@ +#include "getvmt.hpp" + +// getvmt.f in LSMS 1 +// vshift still needs to be calculated somewhere else first! (now local and =0.0) + +void getvmt(LSMSSystemParameters lsms, AtomData &atom, CrystalParameters &crystal, Real qsub[], int &mytype, Real &vmt, Real &vmt1, Real &u0) +{ +/* + ================================================================ + Calculate muffin-tin zero potential and its contribution to the + Coulomb energy.................................................. + note: lattice constant factor is included in madmat............. + ================================================================ +*/ + vmt = 0.0; // contribution to site-independent constant MT potential + // (yet to be averaged and divided by omegint) + vmt1 = 0.0; // site-dependent constant MT potential + // (in the case of ASA-MT, vmt is the shift inside rins, + // and vmt1 is the shift for the whole ASA sphere.) + u0 = 0.0; // contribution to the total energy + + for(int i=0; i= 2) // MT-ASA case + { + // additional contribution to vmt1 from variation of qCorrection + // Delta Q_i, the charge due to shape correction + Real qCorrection = atom.qtotws - atom.qtotmt - atom.rhoInt*(atom.omegaWS - atom.omegaMT); + vmt1 -= 2.0 * qCorrection / rSphere; + u0 += qCorrection * (2.0 * dq_mt + qCorrection) / rSphere; + } + } + + Real vshift = 0.0; + vmt1 -= vshift; + +return; + +} diff --git a/src/Potential/getvmt.hpp b/src/Potential/getvmt.hpp new file mode 100644 index 000000000..59ba73540 --- /dev/null +++ b/src/Potential/getvmt.hpp @@ -0,0 +1,8 @@ +#include "Main/SystemParameters.hpp" +#include "Communication/LSMSCommunication.hpp" +#include "SingleSite/AtomData.hpp" +#include "Real.hpp" + +//getvmt.f in LSMS 1 +void getvmt(LSMSSystemParameters lsms, AtomData &atom, CrystalParameters &crystal, Real qsub[], int &mytype, Real &vmt, Real &vmt1, Real &u0); + diff --git a/src/Potential/interpolatePotential.cpp b/src/Potential/interpolatePotential.cpp new file mode 100644 index 000000000..94f6585b4 --- /dev/null +++ b/src/Potential/interpolatePotential.cpp @@ -0,0 +1,72 @@ +#include "interpolatePotential.hpp" + +/* This is equivalent to the new grid setup part of pot_adapt.f in LSMS 1.9. */ +/* However, the interpolations of potential and charge density will not be */ +/* performed if the new mesh is the same as the old mesh. */ + + +// Warning: ASA case is not taken care of yet!! + +void interpolatePotential(LSMSSystemParameters &lsms, AtomData &atom) +{ + + // Generate new radial mesh according to the new Muffin-Tin radius (inscribed radius calculated in setupVorpol) + std::vector r_mesh_old; + Matrix vr_old, rhotot_old; + int jmt0 = atom.r_mesh.size(); + int jws0 = atom.jws; + int f = 0; + Real dvr; // Derivative of vr + + r_mesh_old.resize(jmt0); + vr_old.resize(jmt0, 2); + rhotot_old.resize(jmt0, 2); + + r_mesh_old = atom.r_mesh; + vr_old = atom.vr; + rhotot_old = atom.rhotot; + + atom.generateRadialMesh(); + + // Find the new jws after new mesh is defined + for (int ir = 0; ir < lsms.global.iprpts; ir++) { + if (atom.r_mesh[ir] < atom.rws && lsms.mtasa == 0) + atom.jws = ir + 2; + if (atom.jws > lsms.global.iprpts) + printf("Problem! jws > iprpts. jws = %8d iprpts = %8d\n", atom.jws, lsms.global.iprpts); + } + + // Interpolate potential onto the new mesh + for (int is = 0; is < lsms.n_spin_pola; is++) + { + for (int ir = 0; ir < atom.jmt; ir++) + { + if (atom.r_mesh[ir] < r_mesh_old[jmt0-1]) + interp_(&r_mesh_old[0], &vr_old(0,is), &jmt0, &atom.r_mesh[ir], &atom.vr(ir,is), &dvr, &f); + else + atom.vr(ir,is) = vr_old(jmt0-1,is) * atom.r_mesh[ir] / r_mesh_old[jmt0-1]; + //YingWai's check + //printf("ir = %8d r_mesh_old = %35.25f r_mesh = %35.25f vr_old = %35.25f vr = %35.25f\n", ir, r_mesh_old[ir], atom.r_mesh[ir], vr_old(ir,is), atom.vr(ir,is)); + } + } + + // Interpolate charge density onto the new mesh + if (jws0 > 0) { + for (int is = 0; is < lsms.n_spin_pola; is++) + { + for (int ir = 0; ir < atom.jmt; ir++) + { + if (atom.r_mesh[ir] < r_mesh_old[jmt0-1]) + interp_(&r_mesh_old[0], &rhotot_old(0,is), &jmt0, &atom.r_mesh[ir], &atom.rhotot(ir,is), &dvr, &f); + else + atom.rhotot(ir,is) = rhotot_old(jmt0-1,is); + //YingWai's check + //printf("ir = %8d r_mesh_old = %30.25f r_mesh = %35.25f rhotot_old = %35.25f rhotot = %30.25f\n", ir, r_mesh_old[ir], atom.r_mesh[ir], rhotot_old(ir,is), atom.rhotot(ir,is)); + } + } + } + +return; + +} + diff --git a/src/Potential/interpolatePotential.hpp b/src/Potential/interpolatePotential.hpp new file mode 100644 index 000000000..37649d7da --- /dev/null +++ b/src/Potential/interpolatePotential.hpp @@ -0,0 +1,14 @@ +#ifndef INTERPOLATE_POTENTIAL_HPP +#define INTERPOLATE_POTENTIAL_HPP + +#include "Main/SystemParameters.hpp" +#include "SingleSite/AtomData.hpp" + +extern "C" +{ + void interp_(Real *r, Real *f, int *nr, Real *rs, Real *ps, Real *dps, int *deriv); +} + +void interpolatePotential(LSMSSystemParameters &lsms, AtomData &atom); + +#endif diff --git a/src/Potential/libxcInterface.cpp b/src/Potential/libxcInterface.cpp new file mode 100644 index 000000000..e55dd8f14 --- /dev/null +++ b/src/Potential/libxcInterface.cpp @@ -0,0 +1,128 @@ +#include "Main/SystemParameters.hpp" +#include "Real.hpp" +#include "libxcInterface.hpp" +#include "Misc/rationalFit.hpp" + +#ifdef USE_LIBXC +#include + +// LibxcInterface is a singleton class to provide an interface to libxc +// LibxcInterface::functional[numFunctionalIndices-1]; +// LibxcInterface::numFunctionals=0; +// LibxcInterface::needGradients=false; // the functional needs gradients of the density (for GGAs) +// LibxcInterface::needLaplacian=false; // need laplacians of the density (for MetaGGAs) +// LibxcInterface::needKineticEnergyDensity=false; // for MetaGGAs +// LibxcInterface::needExactExchange=false; // for Hybrid Functionals + +int LibxcInterface::init(int nSpin, int *xcFunctional) +{ + needGradients=needLaplacian=needKineticEnergyDensity=needExactExchange=false; + numFunctionals=0; + if(xcFunctional[0]!=1) return 1; // not a libxc functional + for(int i=1; i=0) + { + int nspin=XC_UNPOLARIZED; if(nSpin>1) nspin=XC_POLARIZED; + if(xc_func_init(&functional[numFunctionals], xcFunctional[i], nspin)!=0) return 1; + switch(functional[numFunctionals].info->family) + { + case XC_FAMILY_LDA: break; + case XC_FAMILY_GGA: needGradients=true; break; + case XC_FAMILY_HYB_GGA: needGradients=true; needExactExchange=true; break; + case XC_FAMILY_MGGA: needGradients=true; needLaplacian=true; needKineticEnergyDensity=true; break; + default: printf("Unknown Functional family in libxc for functional %d!\n",xcFunctional[i]); exit(1); + } + numFunctionals++; + } + } + return 0; +} + +void LibxcInterface::evaluate(std::vector &rMesh, Matrix &rhoIn, int jmt, int nSpin, Matrix &xcEnergyOut, Matrix &xcPotOut) +{ +// note: rho in lsms is stored as 4*pi * r^2 * rho + std::vector rho(nSpin*jmt); + std::vector dRho(nSpin*jmt); + std::vector sigma((2*nSpin-1)*jmt); // contracted gradient (1 entry/point for non polarized 3 for spin polarized)(see libxc documentation) + std::vector xcPot(nSpin*jmt), xcEnergy(jmt); + std::vector vSigma((2*nSpin-1)*jmt); // derivative with respect to contracted gradient (see libxc documentation) + for(int ir=0; ir1) { rho[ir*nSpin+1]=rhoIn(ir,1)/(4.0*M_PI*rMesh[ir]*rMesh[ir]); xcPotOut(ir,1)=0.0; } + } + if(needGradients) + { +// calculate the contracted gradients. Note that rho is spherically symmetric: grad(rho) = e_r * (d rho / d r) +// spin polarized: +// spin up + calculateDerivative(&rMesh[0], &rho[0], &dRho[0], jmt, 2, 2); +// spin down + calculateDerivative(&rMesh[0], &rho[1], &dRho[1], jmt, 2, 2); + for(int ir=0; irfamily) + { + case XC_FAMILY_LDA: xc_lda_exc_vxc(&functional[i], jmt, &rho[0], &xcEnergy[0], &xcPot[0]); break; + // case XC_FAMILY_LDA: xc_lda_exc_vxc(&functional[i], 1, &rho[ir*nSpin], &xcEnergy[ir], &xcPot[ir*nSpin]); break; + case XC_FAMILY_GGA: xc_gga_exc_vxc(&functional[i], jmt, &rho[0], &sigma[0], &xcEnergy[0], &xcPot[0], &vSigma[0]); break; + // case XC_FAMILY_GGA: xc_gga_exc_vxc(&functional[i], 1, &rho[ir*nSpin], &sigma[ir*3], &xcEnergy[ir], &xcPot[ir*(2*nSpin-1)], + // &vSigma[ir*(2*nSpin-1)]); break; + default: printf("Unsuported Functional family in libxc for functional %d!\n",functional[i].info->number); exit(1); + } + for(int ir=0; ir1) { xcEnergyOut(ir,1) =0.0; xcPotOut(ir,1)+=2.0*xcPot[ir*nSpin+1]; } + } + } +} + +void LibxcInterface::evaluateSingle(Real *rhoIn, int nSpin, Real *xcEnergyOut, Real *xcPotOut) +{ + Real sigma[3]; // contracted gradient (see libxc documentation) + Real xcPot[2], xcEnergy; + Real vSigma[3]; // derivative with respect to contracted gradient (see libxc documentation) + + if(needGradients) + { + sigma[0]= 0.0; + sigma[1]= 0.0; + sigma[2]= 0.0; + } + for(int i=0; ifamily) + { + case XC_FAMILY_LDA: xc_lda_exc_vxc(&functional[i], 1, &rhoIn[0], &xcEnergy, &xcPot[0]); break; + case XC_FAMILY_GGA: xc_gga_exc_vxc(&functional[i], 1, &rhoIn[0], &sigma[0], &xcEnergy, &xcPot[0], &vSigma[0]); break; + default: printf("Unsuported Functional family in libxc for functional %d!\n",functional[i].info->number); exit(1); + } + +// libxc returns results in Hartree? we need Rydberg as our energy units, so multiply by two + *xcEnergyOut+=2.0*xcEnergy; xcPotOut[0]+=2.0*xcPot[0]; + if(nSpin>1) { xcPotOut[1]+=2.0*xcPot[1]; } + } +} + +#else // we don't link with libxc + + +int LibxcInterface::init(int nSpin, int *xcFunctional) +{ printf("libxc is not linked with this version of LSMS!\n"); exit(1); } +void LibxcInterface::evaluate(std::vector &rMesh, Matrix &rhoIn, int jmt, int nSpin, std::vector &xcEnergyOut, Matrix &xcPotOut) +{ printf("libxc is not linked with this version of LSMS!\n"); exit(1); } +void LibxcInterface::evaluateSingle(Real *rhoIn, int nSpin, Real *xcEnergyOut, Real *xcPotOut) +{ printf("libxc is not linked with this version of LSMS!\n"); exit(1); } +#endif diff --git a/src/Potential/libxcInterface.hpp b/src/Potential/libxcInterface.hpp new file mode 100644 index 000000000..0182c49c3 --- /dev/null +++ b/src/Potential/libxcInterface.hpp @@ -0,0 +1,34 @@ +#ifndef LSMS_LIBXCINTERFACE_HPP +#define LSMS_LIBXCINTERFACE_HPP + +#include "Main/SystemParameters.hpp" +#include "Real.hpp" + +#ifdef USE_LIBXC +#include + +// LibxcInterface is a singleton class to provide an interface to libxc +class LibxcInterface { +public: + xc_func_type functional[numFunctionalIndices-1]; + int numFunctionals; + bool needGradients; // the functional needs gradients of the density (for GGAs) + bool needLaplacian; // need laplacians of the density (for MetaGGAs) + bool needKineticEnergyDensity; // for MetaGGAs + bool needExactExchange; // for Hybrid Functionals + + int init(int nSpin, int *xcFunctional); + void evaluate(std::vector &rMesh, Matrix &rhoIn, int jmt, int nSpin, Matrix &xcEnergyOut, Matrix &xcPotOut); + void evaluateSingle(Real *rhoIn, int nSpin, Real *xcEnergyOut, Real *xcPotOut); +}; + +#else // we don't link with libxc + +class LibxcInterface { +public: + int init(int nSpin, int *xcFunctional); + void evaluate(std::vector &rMesh, Matrix &rhoIn, int jmt, int nSpin, std::vector &xcEnergyOut, Matrix &xcPotOut); + void evaluateSingle(Real *rhoIn, int nSpin, Real *xcEnergyOut, Real *xcPotOut); +}; +#endif +#endif diff --git a/src/Potential/newexchg.f b/src/Potential/newexchg.f new file mode 100755 index 000000000..4165d2a8b --- /dev/null +++ b/src/Potential/newexchg.f @@ -0,0 +1,68 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine newexchg(n_spin_pola,sp, + > rhoup,rhodn, + > vx,enxc,vxout,excout,ro3,dz, + > r_mesh,jmt,iexch) +c ================================================================ +c + implicit none +c + integer n_spin_pola + integer jmt +c + integer iexch + integer ir +c + real*8 sp + real*8 rhoup(jmt) + real*8 rhodn(jmt) + real*8 vx(jmt) + real*8 enxc(jmt) + real*8 vxout,excout,ro3,dz + real*8 r_mesh(jmt) +c + real*8 rhot + real*8 alpha2 + real*8 dzr + real*8 ro3r + real*8 zero + real*8 one + real*8 three + real*8 third +c + parameter (zero=0.0d0) + parameter (one=1.0d0) + parameter (three=3.0d0) + parameter (third=one/three) +c +c ================================================================ +c calculate exchange-correlation potential and density........... +c ================================================================ +c +c ------------------------------------------------------------- + vxout=0.d0 + if(dz.lt.-1.d0)write(*,*)'newexch, dz,ro3',dz,ro3 + if(ro3.lt.1.d9)vxout=alpha2(ro3,dz,sp,iexch,excout) +c ------------------------------------------------------------- + do ir=1,jmt + rhot=rhoup(ir)+(n_spin_pola-1)*rhodn(ir) +c if(rhot.gt.zero) then + if(rhot.gt.1.d-9) then + dzr=(rhoup(ir)-rhodn(ir))/rhot + if(dzr.gt.+1.d0)dzr=+1.d0 + if(dzr.lt.-1.d0)dzr=-1.d0 + ro3r=(three*r_mesh(ir)**2/rhot)**third + vx(ir)=alpha2(ro3r,dzr,sp,iexch,enxc(ir)) + if(.not.(enxc(ir).lt.0))then + write(6,*)'newexch',ir,rhot,dzr,ro3r,enxc(ir) + enxc(ir)=0.d0 + endif + else + vx(ir)=zero + enxc(ir)=zero + endif + enddo +c + return + end diff --git a/src/Potential/newpot_c.f b/src/Potential/newpot_c.f new file mode 100755 index 000000000..ba03cfbd1 --- /dev/null +++ b/src/Potential/newpot_c.f @@ -0,0 +1,100 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine newpot(n_spin_pola,ztotss, + > rhoup,rhodn,rhot, + > vrold,vrnew,vrms,vx, + > vmt1,vmt,vxout, + > sqr,jmt,rins,rws, + > mtasa,iexch) +c ================================================================ +c + implicit none +c + integer n_spin_pola + integer jmt + integer mtasa +c + integer ir + integer iexch +c + real*8 alpgga + real*8 epcorr + real*8 epcorrave + real*8 ztotss + real*8 rhoup(jmt) + real*8 rhodn(jmt) + real*8 vrold(jmt) + real*8 vrnew(jmt) + real*8 vrms + real*8 vx(jmt) + real*8 vmt1 + real*8 vmt,vxout + real*8 sqr(0:jmt),rins,sqrmt,rws +c + real*8 rhot(0:jmt,2),drhot,rhot_rins + real*8 vhart + real*8 one + real*8 two + real*8 width +c + parameter (one=1.0d0) + parameter (two=2.0d0) +c +c ================================================================ +c calculate hartree and exchange-correlation potential ........... +c then subtract muffin tin zero................................... +c ================================================================ +c + do ir=1,jmt +c 2.d0 is the jacobian needed because we are integrating over sqrt(r) + rhot(ir,1)=2.d0*(rhoup(ir)+(n_spin_pola-1)*rhodn(ir))/sqr(ir)**4 +c YingWai's check +! write(6,'(''ir,rhot = '',i8,f20.12)') ir, rhot(ir,1) + enddo + call interp(sqr(1),rhot(1,1),4,0.d0,rhot(0,1),drhot,.false.) +c ---------------------------------------------------------------- + call newint(jmt+1,sqr,rhot(0,1),rhot(0,2),5) + do ir=1,jmt + vrnew(ir)=(-ztotss+rhot(ir,2))/(sqr(ir)*sqr(ir)) + enddo + call newint(jmt+1,sqr,rhot(0,1),rhot(0,2),3) + if(mtasa.eq.2)then + call + > interp(sqr,rhot(0,2),jmt+1,sqrt(rws),rhot_rins,drhot,.false.) + else + call + > interp(sqr,rhot(0,2),jmt+1,sqrt(rins),rhot_rins,drhot,.false.) + endif +c ---------------------------------------------------------------- + do ir=1,jmt + vhart=two*(vrnew(ir)+rhot(jmt,2)-rhot(ir,2)) +ctest vhart=two*(vrnew(ir)+rhot_rins-rhot(ir,2)) + vrnew(ir)=(vhart+vx(ir)-vmt1-vmt-vxout)*sqr(ir)*sqr(ir) + if(iexch.ge.100) + > vrnew(ir)=-vrnew(ir)+sqr(ir)**2*(-vxout+ + > epcorr(.5d0*rhot(ir,1),0.d0,sqr(ir)**2,0,alpgga,40.d0)) + enddo + if(mtasa.ge.2) then + width=sqr(jmt)-sqr(jmt-1) + sqrmt=sqrt(rins) + do ir=1,jmt + if(iexch.lt.100)vrnew(ir)=vrnew(ir)+vmt*sqr(ir)*sqr(ir) + * /(one+exp((sqrmt-sqr(ir))/width)) + if(iexch.ge.100)vrnew(ir)=vrnew(ir)-vmt*sqr(ir)*sqr(ir) + * /(one+exp((sqrmt-sqr(ir))/width)) + enddo + endif +c use rhot as temp storage + rhot(0,1)=0.d0 + do ir=1,jmt + rhot(ir,1)=2.d0*(vrold(ir)-vrnew(ir))**2 +c YingWai's check +! write(6,'(''ir,rhot = '',i8,f20.12)') ir, rhot(ir,1) + enddo +c ---------------------------------------------------------------- + call newint(jmt+1,sqr,rhot(0,1),rhot(0,2),1) +c ---------------------------------------------------------------- + vrms=sqrt(3.d0*rhot(jmt,2)/sqr(jmt)**6) +c + return + end diff --git a/src/Potential/rs.f b/src/Potential/rs.f new file mode 100755 index 000000000..0d3ada1bd --- /dev/null +++ b/src/Potential/rs.f @@ -0,0 +1,52 @@ + function rs(chd,radius,rsmax) +c +c purpose: convert a charge density value to the equivalent r_s +c where 4*pi*(r_s)**3*chd/3 = 1, +c i.e. r_s is the radius of a sphere containing exactly one +c electron in a homogeneous electron gas of density chd. +c +c charge density may be of the form n(r) (radius = 0.d0) +c or 4*pi*r**2*n(r), in which case radius is the r-value. +c +c method: check that chd is not zero or -ve; if it is, rs is set to +c rsmax (rsmax = 1.d3 => charge density around 2.4d-10 e/(au^3)) +c +c calls: system function datan +c +c written: philip sterne, sterne1@llnl.gov +c date: April 21, 1998 +c changes: none +c comments: +c + implicit none +c +c input variables +c + real*8 chd ! charge density - either n(r) or 4*pi*r**2*n(r) + real*8 radius ! radius r if input chd is 4*pi*r**2*n(r) + real*8 rsmax ! maximum allowable r_s value (very low cd limit) +c +c output variables +c + real*8 rs ! r_s value for this charge density +c +c internal variables and functions +c + real*8 pi ! pi + real*8 chdmin ! minimum charge density - corresponds to rsmax +c +c set rsmax and chdmin values for vanishingly small charge densities +c + rs = rsmax + pi = 4.d0*datan(1.d0) + if(radius.eq.0.d0) then + chdmin = 3.d0/(4.d0*pi*rsmax**3) + if(chd.gt.chdmin) rs = (3.d0/(4.d0*pi*chd))**(1.d0/3.d0) + else + chdmin = 3.d0*radius**2/(rsmax**3) + if(chd.gt.chdmin) rs = (3.d0*radius**2/chd)**(1.d0/3.d0) + endif +c + return + end + diff --git a/src/RadialGrid/Atom.hpp b/src/RadialGrid/Atom.hpp new file mode 100644 index 000000000..bdc6f75ce --- /dev/null +++ b/src/RadialGrid/Atom.hpp @@ -0,0 +1,71 @@ +#ifndef LSMS_ATOM_H +#define LSMS_ATOM_H + +#include "RadialGrid.hpp" +#include "Real.hpp" +#include "Matrix.hpp" + +typedef class Atom : public RadialPotential { +public: + inline Atom(int iprpts, int ipcore) + { + g->generate(0.001,0.001,iprpts,1,1); sync(); + rhotot.resize(iprpts,2); + nc.resize(ipcore,2); lc.resize(ipcore,2); kc.resize(ipcore,2); + ec.resize(ipcore,2); + } + int id; + int lmax,kkrsz; + Real alat,efermi; + Real ztotss, zcorss; + Real xvalws[2]; + int nspin; + Real evec[3]; + // RadialGrid *g; + // RadialPotential *vr; + Matrix rhotot; + Real vdif; + char header[80]; +// Core state information + int numc; + Matrix nc,lc,kc; + Matrix ec; +}; + +// cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc +// subroutine single_pot_read(present_atom, +// > nspin,alat,efermi,evec, +// > jmt,rmt,jws,xstart, +// > vr,vdif,rhotot,xvalws, +// > ztotss,zcorss, +// > numc,nc,lc,kc,ec, +// > header,loc_id,iprint,istop) +// c ================================================================ + +extern "C" { + void single_pot_read(int *present_atom, + int *nspin, Real *alat, Real *efermi, Real *evec, + int *jmt, Real *rmt, int *jws, Real *xstart, + Real *vr, Real *vdif,Real *rhotot,Real *xvalws, + Real *ztotss, Real *zcorss, + int *numc, int *nc, int *lc,int *kc, Real *ec, + char *header,int *loc_id,int *iprint,char *istop); +} + +void singlePotentialRead(int loc_id, Atom &a) +{ + int jmt, jws; + Real rmt, xtart; + int iprint=0; + char istop[32]='Not Here'; + + single_pot_read(&a.id, + &a.nspin, &a.alat, &a.efermi, a.evec, + &jmt, &rmt, &jws, &xstart, + &a.vr(0,0), &a.vdif, &a.rhotot(0,0), a.xvalws, + &a.ztotss, &a.zcorss, + &a.numc, &a.nc(0,0), &a.lc(0,0), &a.kc(0,0), &a.ec(0,0), + a.header, &loc_id, &iprint, istop); +} + +#endif diff --git a/src/RadialGrid/Makefile b/src/RadialGrid/Makefile new file mode 100644 index 000000000..b1b8f6a2f --- /dev/null +++ b/src/RadialGrid/Makefile @@ -0,0 +1,11 @@ +all: libRadialGrid.a + +clean: + rm -f *.a *.o + +%.o : %.cpp + $(CXX) $(INC_PATH) -c -o $@ $< + +libRadialGrid.a: RadialGrid.o + $(AR) -r libRadialGrid.a RadialGrid.o + cp libRadialGrid.a $(TOP_DIR)/lib diff --git a/src/RadialGrid/RadialGrid.cpp b/src/RadialGrid/RadialGrid.cpp new file mode 100644 index 000000000..19fea9efe --- /dev/null +++ b/src/RadialGrid/RadialGrid.cpp @@ -0,0 +1,19 @@ +#include +#include "RadialGrid.hpp" + +void generateRadialGrid(RadialGrid *g, Real x0, Real h, int N, int jmt, int jws) +{ + g->x_mesh.resize(N); + g->r_mesh.resize(N); + g->N=N; + g->h=h; + g->jmt=jmt; + g->jws=jws; + for(int i=0; ix_mesh[i]=x0+i*h; + g->r_mesh[i]=std::exp(g->x_mesh[i]); + } +} + + diff --git a/src/RadialGrid/RadialGrid.hpp b/src/RadialGrid/RadialGrid.hpp new file mode 100644 index 000000000..f07413236 --- /dev/null +++ b/src/RadialGrid/RadialGrid.hpp @@ -0,0 +1,17 @@ +#ifndef LSMS_RGRID_H +#define LSMS_RGRID_H + +#include +#include "Real.hpp" + +class RadialGrid { +public: + inline RadialGrid() : N(0), jmt(0), jws(0), h(0.0) {} + int N,jmt,jws; + Real h; + std::vector r_mesh,x_mesh; +}; + +void generateRadialGrid(RadialGrid * g, Real x0, Real h, int N, int jmt, int jws); + +#endif diff --git a/src/RadialGrid/RadialPotential.hpp b/src/RadialGrid/RadialPotential.hpp new file mode 100644 index 000000000..8c3783520 --- /dev/null +++ b/src/RadialGrid/RadialPotential.hpp @@ -0,0 +1,17 @@ +#ifndef LSMS_RADIALPOT_H +#define LSMS_RADIALPOT_H + +#include "RadialGrid.hpp" +#include "Real.hpp" +#include "Matrix.hpp" + +typedef class RadialPotential { +public: + inline RadialPotential(RadialGrid *_g) {g=_g; vr.resize(g->N,2);} + inline RadialPotential() {g=new RadialGrid;} + inline void sync() {vr.resize(g->N,2);} + RadialGrid *g; + Matrix vr; +}; + +#endif diff --git a/src/RadialGrid/single_pot_read.f b/src/RadialGrid/single_pot_read.f new file mode 100755 index 000000000..12130768f --- /dev/null +++ b/src/RadialGrid/single_pot_read.f @@ -0,0 +1,249 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine single_pot_read(present_atom, + > nspin,alat,efermi,evec, + > jmt,rmt,jws,xstart, + > vr,vdif,rhotot,xvalws, + > ztotss,zcorss, + > numc,nc,lc,kc,ec, + > header,loc_id,iprint,istop) +c ================================================================ + + + use hdf5 + + implicit none + + include 'atom_param.h' + + integer(hid_t) loc_id,dti,dtf,dtc + integer num_read,ns,hdferr + integer present_atom,nspin,jws,jmt,numc + real*8 alat,efermi,evec(3),vdif,ztotss,zcorss + real*8 xstart,rmt + real*8 vr(iprpts,2), rhotot(iprpts,2), xvalws(2) + real*8 ec(ipcore,2) + integer nc(ipcore,2),lc(ipcore,2),kc(ipcore,2) + character gname*40 + character header*80 + character*32 istop + character*32 sname + integer iprint + + parameter (sname='single_pot_read') + + call h5tcopy_f(H5T_NATIVE_INTEGER,dti,hdferr) + call h5tcopy_f(H5T_NATIVE_DOUBLE,dtf,hdferr) + call h5tcopy_f(H5T_NATIVE_CHARACTER,dtc,hdferr) + + call read_scalar_int(loc_id,'PresentAtom', + > present_atom,dti,num_read) + call read_scalar_int(loc_id,'jmt',jmt,dti,num_read) + call read_scalar_int(loc_id,'jws',jws,dti,num_read) + call read_scalar_int(loc_id,'Nspin',nspin,dti,num_read) + call read_scalar_int(loc_id,'NumC',numc,dti,num_read) + call read_scalar_float(loc_id,'alat',alat,dtf,num_read) + call read_scalar_float(loc_id,'Efermi',efermi,dtf,num_read) + call read_scalar_float(loc_id,'Vdif',vdif,dtf,num_read) + call read_scalar_float(loc_id,'Ztot',ztotss,dtf,num_read) + call read_scalar_float(loc_id,'Zcore',zcorss,dtf,num_read) + call read_scalar_float(loc_id,'Xstart',xstart,dtf,num_read) + call read_scalar_float(loc_id,'rmt',rmt,dtf,num_read) + + + call read_vector_float(loc_id,'xvalws', + > xvalws,nspin,dtf,num_read) + if(nspin.ne.num_read) write(*,*) + > 'WARNING in single_pot_read, xvalws' + + do ns=1,nspin + write(gname,'("V",i1.1)') ns + call read_vector_float(loc_id,gname,vr(1,ns), + > jmt,dtf,num_read) + if(jmt.ne.num_read) write(*,*) + > 'WARNING in single_pot_read, vr' + write(gname,'("rhotot",i1.1)') ns + call read_vector_float(loc_id,gname,rhotot(1,ns), + > jws,dtf,num_read) + if(jws.ne.num_read) + > write(*,*) 'WARNING in single_pot_read, rhotot' + write(gname,'("ec",i1.1)') ns +! read core states if numc>0 + if(numc.gt.0) then + call read_vector_float(loc_id,gname,ec(1,ns), + > numc,dtf,num_read) + if(numc.ne.num_read) + > write(*,*) 'WARNING in single_pot_read, ec' + write(gname,'("nc",i1.1)') ns + call read_vector_int(loc_id,gname,nc(1,ns), + > numc,dti,num_read) + if(numc.ne.num_read) write(*,*) + > 'WARNING in single_pot_read, nc' + write(gname,'("lc",i1.1)') ns + call read_vector_int(loc_id,gname,lc(1,ns),numc, + > dti,num_read) + if(numc.ne.num_read) + > write(*,*) 'WARNING in single_pot_read, lc' + write(gname,'("kc",i1.1)') ns + call read_vector_int(loc_id,gname,kc(1,ns), + > numc,dti,num_read) + if(numc.ne.num_read) + > write(*,*) 'WARNING in single_pot_read, kc' + end if + end do + call read_vector_float(loc_id,'evec',evec,3,dtf,num_read) + if(3.ne.num_read) + > write(*,*) 'WARNING in single_pot_read, evec' + call read_vector_char(loc_id,'Header',header,80,dtc,num_read) + if(80.ne.num_read) + > write(*,*) 'WARNING in single_pot_read, header' + + 10 continue + + call h5tclose_f(dti,hdferr) + call h5tclose_f(dtf,hdferr) + call h5tclose_f(dtc,hdferr) + + end +!------------------------------------------------------------------ + subroutine read_scalar_int(loc_id,name,value,dti,num_read) + + use hdf5 + implicit none + + integer(hid_t) loc_id,space_id,dset_id,dti + integer hdferr,value,num_read + integer(hsize_t) dims(2) + character(*) name + + dims(1)=1 + dims(2)=0 + num_read=-1 + call h5dopen_f(loc_id,name,dset_id,hdferr) + if(hdferr.lt.0) return + + call h5dread_f(dset_id,dti,value,dims,hdferr) + if(hdferr.lt.0) return + + num_read=1 + + call h5dclose_f(dset_id,hdferr) + + end +!------------------------------------------------------------------ + subroutine read_scalar_float(loc_id,name,value,dtf,num_read) + + use hdf5 + implicit none + + integer(hid_t) loc_id,space_id,dset_id,dtf + integer hdferr,num_read + real*8 value + integer(hsize_t) dims(2) + character(*) name + + num_read=-1 + call h5dopen_f(loc_id,name,dset_id,hdferr) + if(hdferr.lt.0) return + + call h5dread_f(dset_id,dtf,value,dims,hdferr) + if(hdferr.lt.0) return + + num_read=1 + + call h5dclose_f(dset_id,hdferr) + + end +!------------------------------------------------------------------ + subroutine read_vector_int(loc_id,name,value,len,dti,num_read) + + use hdf5 + implicit none + + integer(hid_t) loc_id,space_id,dset_id,dti,dti_file + integer hdferr,value(len),num_read,len,ndims + integer(hsize_t) dims(2),maxdims(2) + character(*) name + + num_read=-1 + call h5dopen_f(loc_id,name,dset_id,hdferr) + if(hdferr.lt.0) return + call h5dget_space_f(dset_id,space_id,hdferr) + call h5sget_simple_extent_ndims_f(space_id,ndims,hdferr) + if(ndims.ne.1) return + call h5sget_simple_extent_dims_f(space_id,dims,maxdims,hdferr) + + if(dims(1).gt.len) return + + call h5dread_f(dset_id,dti,value,dims,hdferr) + if(hdferr.lt.0) return + + num_read=dims(1) + + call h5sclose_f(space_id,hdferr) + call h5dclose_f(dset_id,hdferr) + + end +!------------------------------------------------------------------ + subroutine read_vector_float(loc_id,name,value,len,dtf,num_read) + + use hdf5 + implicit none + + integer(hid_t) loc_id,space_id,dset_id,dtf,dtf_file + integer hdferr,num_read,len,ndims + real*8 value(len) + integer(hsize_t) dims(2),maxdims(2) + character(*) name + + num_read=-1 + call h5dopen_f(loc_id,name,dset_id,hdferr) + if(hdferr.lt.0) return + call h5dget_space_f(dset_id,space_id,hdferr) + call h5sget_simple_extent_ndims_f(space_id,ndims,hdferr) + if(ndims.ne.1) return + call h5sget_simple_extent_dims_f(space_id,dims,maxdims,hdferr) + + if(dims(1).gt.len) return + + call h5dread_f(dset_id,dtf,value,dims,hdferr) + if(hdferr.lt.0) return + + num_read=dims(1) + + call h5sclose_f(space_id,hdferr) + call h5dclose_f(dset_id,hdferr) + + end +!------------------------------------------------------------------ + subroutine read_vector_char(loc_id,name,value,len,dtc,num_read) + + use hdf5 + implicit none + + integer(hid_t) loc_id,space_id,dset_id,dtc + integer hdferr,num_read,len,ndims + character(*) value + integer(hsize_t) dims(2),maxdims(2) + character(*) name + + num_read=-1 + call h5dopen_f(loc_id,name,dset_id,hdferr) + if(hdferr.lt.0) return + call h5dget_space_f(dset_id,space_id,hdferr) + call h5sget_simple_extent_ndims_f(space_id,ndims,hdferr) + if(ndims.ne.1) return + call h5sget_simple_extent_dims_f(space_id,dims,maxdims,hdferr) + + if(dims(1).gt.len) return + + call h5dread_f(dset_id,dtc,value,dims,hdferr) + if(hdferr.lt.0) return + + num_read=dims(1) + + call h5sclose_f(space_id,hdferr) + call h5dclose_f(dset_id,hdferr) + + end + diff --git a/src/SingleSite/AtomData.hpp b/src/SingleSite/AtomData.hpp new file mode 100644 index 000000000..d56e58d94 --- /dev/null +++ b/src/SingleSite/AtomData.hpp @@ -0,0 +1,403 @@ +#ifndef LSMS_ATOMDATA_H +#define LSMS_ATOMDATA_H + +#include +#include + +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" +#include "Array3d.hpp" +#include "VORPOL/VORPOL.hpp" + +extern "C" +{ +void spin_trafo_(Real *evec, Complex * u, Complex *ud); +} + + +#ifdef BUILDKKRMATRIX_GPU +void * allocateDConst(void); +void freeDConst(void *); +#endif + + +class AtomData { +public: + + AtomData() {reset();} + + ~AtomData() {} + + void reset(void) + { + b_con[0] = b_con[1] = b_con[2] = 0.0; + for(int i=0; i<9; i++) + b_basis[i] = 0.0; + b_basis[0] = b_basis[4] = b_basis[8] = 1.0; + mConstraint = -1.0; + spinFlipped = false; + } + + void reset_b_basis(void) + { + for(int i=0; i<9; i++) b_basis[i] = 0.0; + b_basis[0] = b_basis[4] = b_basis[8] = 1.0; + } + + void get_b_basis(void) + { + const Real tol=1.0e-8; + Real norm2=evec[0]*evec[0]+evec[1]*evec[1]+evec[2]*evec[2]; + Real norm=std::sqrt(norm2); + evec[0]=evec[0]/norm; evec[1]=evec[1]/norm; evec[2]=evec[2]/norm; + Real cost=evec[2]; + Real sint = std::sqrt(1.0-cost*cost); + Real cosp=1.0; + Real sinp=0.0; + if(std::abs(sint)>tol) + { + cosp=evec[0]/sint; sinp=evec[1]/sint; + } + + b_basis[6+0]=evec[0]; b_basis[6+1]=evec[1]; b_basis[6+2]=evec[2]; + + b_basis[0]=cost*cosp; b_basis[1]=cost*sinp; b_basis[2]=-sint; + norm2=b_basis[0]*b_basis[0]+b_basis[1]*b_basis[1]+b_basis[2]*b_basis[2]; + norm=std::sqrt(norm2); + b_basis[0]=b_basis[0]/norm; b_basis[1]=b_basis[1]/norm; b_basis[2]=b_basis[2]/norm; + + + b_basis[3+0] = b_basis[6+1]*b_basis[0+2] - b_basis[6+2]*b_basis[0+1]; + b_basis[3+1] = -(b_basis[6+0]*b_basis[0+2] - b_basis[6+2]*b_basis[0+0]); + b_basis[3+2] = b_basis[6+0]*b_basis[0+1] - b_basis[6+1]*b_basis[0+0]; + } + + void newConstraint(void) + { + Real b_con_mag=0.0; + Real b_con_g[3]; + Real b_con_o[3]; + Real b_con_in[3]; + Real moment_dir[3]; + + for(int i=0; i<3; i++) + { + b_con_g[i]=b_con[0]*b_basis[0+i] + b_con[1]*b_basis[3+i] + b_con[2]*b_basis[6+i]; + b_con_o[i]=b_con_g[i]; + b_con_in[i]=b_con[i]; + b_con_mag+=b_con_g[i]*b_con_g[i]; + } + b_con_mag=std::sqrt(b_con_mag); + // Real moment_mag=std::sqrt(moment[0]*moment[0]+moment[1]*moment[1]+moment[2]*moment[2]); + // moment_dir[0]=moment[0]/moment_mag; moment_dir[1]=moment[1]/moment_mag; + // moment_dir[2]=moment[2]/moment_mag; + Real moment_mag=std::sqrt(evecOut[0]*evecOut[0]+evecOut[1]*evecOut[1]+evecOut[2]*evecOut[2]); + moment_dir[0]=evecOut[0]/moment_mag; moment_dir[1]=evecOut[1]/moment_mag; + moment_dir[2]=evecOut[2]/moment_mag; + + Real mproj=moment_dir[0]*evec[0]+moment_dir[1]*evec[1]+moment_dir[2]*evec[2]; + Real bproj=moment_dir[0]*b_con_g[0]+moment_dir[1]*b_con_g[1]+moment_dir[2]*b_con_g[2]; + + //Real bb1=0.0; + for(int i=0; i<3; i++) + { + b_con_g[i]=b_con_g[i]+evec[i]-(mproj+bproj)*moment_dir[i]; + //bb1+=b_con_g[i]*b_con_g[i]; + } + //bb1=std::sqrt(bb1); + +// ================================================================ +// project components in b_basis frame ................... +// ================================================================ + + for(int j=0; j<3; j++) + { + b_con[j]=0.0; + for(int i=0; i<3; i++) + b_con[j]+=b_con_g[i]*b_basis[3*j+i]; + } + +// meis: as a Test set b_con[2]=0.0 +// b_con[2]=0.0; + + } + + void resizePotential(int npts) + { + int n = npts; + + vr.resize(n,2); + vr = 0.0; + vSpinShift = 0.0; + + rhotot.resize(n,2); + rhotot = 0.0; + + corden.resize(n,2); + corden = 0.0; + + semcor.resize(n,2); + r_mesh.resize(n); + x_mesh.resize(n); + + vrNew.resize(n,2); + vrNew = 0.0; + + rhoNew.resize(n,2); + rhoNew = 0.0; + + dos_real.resize(40,4); + greenint.resize(n,4); + greenlast.resize(n,4); + + // Check if they should be put here... + exchangeCorrelationPotential.resize(n,2); + exchangeCorrelationPotential = 0.0; + exchangeCorrelationEnergy.resize(n,2); + exchangeCorrelationEnergy = 0.0; + + } + + + void resizeCore(int ncs) + { + ec.resize(ncs,2); + nc.resize(ncs,2); + lc.resize(ncs,2); + kc.resize(ncs,2); + } + + + AtomData &operator=(const AtomData &a) + { + jmt = a.jmt; + jws = a.jws; + xstart = a.xstart; + rmt = a.rmt; + h = a.h; + r_mesh = a.r_mesh; + x_mesh = a.x_mesh; + + alat = a.alat; + efermi = a.efermi; + vdif = a.vdif; + ztotss = a.ztotss; + zcorss = a.zcorss; + zsemss = a.zsemss; + zvalss = a.zvalss; + + nspin = a.nspin; + numc = a.numc; + spinFlipped = a.spinFlipped; + + evec[0] = a.evec[0]; + evec[1] = a.evec[1]; + evec[2] = a.evec[2]; + evecNew[0] = a.evecNew[0]; + evecNew[1] = a.evecNew[1]; + evecNew[2] = a.evecNew[2]; + evecOut[0] = a.evecOut[0]; + evecOut[1] = a.evecOut[1]; + evecOut[2] = a.evecOut[2]; + xvalws[0] = a.xvalws[0]; + xvalws[1] = a.xvalws[1]; + xvalwsNew[0] = a.xvalwsNew[0]; + xvalwsNew[1] = a.xvalwsNew[1]; + xvalmt[0] = a.xvalmt[0]; + xvalmt[1] = a.xvalmt[1]; + qtotws = a.qtotws; + mtotws = a.mtotws; + qtotmt = a.qtotmt; + mtotmt = a.mtotmt; + qvalws = a.qvalws; + mvalws = a.mvalws; + qvalmt = a.qvalmt; + mvalmt = a.mvalmt; + + qInt = a.qInt; + mInt = a.mInt; + rhoInt = a.rhoInt; + mIntComponent[0] = a.mIntComponent[0]; + mIntComponent[1] = a.mIntComponent[1]; + mIntComponent[2] = a.mIntComponent[2]; + + for(int i=0; i<80; i++) header[i] = a.header[i]; + + vr = a.vr; + vSpinShift=a.vSpinShift; + rhotot = a.rhotot; + + exchangeCorrelationPotential = a.exchangeCorrelationPotential; + exchangeCorrelationEnergy = a.exchangeCorrelationEnergy; + exchangeCorrelationV[0] = a.exchangeCorrelationV[0]; + exchangeCorrelationV[1] = a.exchangeCorrelationV[1]; + exchangeCorrelationE = a.exchangeCorrelationE; + + ec = a.ec; + nc = a.nc; + lc = a.lc; + kc = a.kc; + + ecorv[0] = a.ecorv[0]; + ecorv[1] = a.ecorv[1]; + esemv[0] = a.esemv[0]; + esemv[1] = a.esemv[1]; + + corden = a.corden; + semcor = a.semcor; + qcpsc_mt = a.qcpsc_mt; + qcpsc_ws = a.qcpsc_ws; + mcpsc_mt = a.mcpsc_mt; + mcpsc_ws = a.mcpsc_ws; + + b_con[0] = a.b_con[0]; + b_con[1] = a.b_con[1]; + b_con[2] = a.b_con[2]; + + for(int i=0; i<9; i++) b_basis[i] = a.b_basis[i]; + + vrms[0]=a.vrms[0]; vrms[1]=a.vrms[1]; qrms[0]=a.qrms[0]; qrms[1]=a.qrms[1]; + + return *this; + } + + + void generateRadialMesh(void) + { + int N = std::max((int)r_mesh.size(), jws); + N = std::max(N, jmt); + if (N != r_mesh.size()) r_mesh.resize(N); + Real xmt = std::log(rmt); + h = (xmt-xstart) / (jmt-1); + for(int j=0; j LIZGlobalIdx, LIZStoreIdx, LIZlmax; + int nrmat; // sum (LIZlmax+1)^2 + std::vector LIZDist; + Matrix LIZPos; + +// Mesh Data: + int jmt,jws; + Real xstart,rmt,h; + Real rInscribed; // LSMS_1.9: rins + std::vector r_mesh, x_mesh; + bool generateNewMesh; + +// General Data + char header[80]; + int lmax, kkrsz; + Real alat, efermi; + Real ztotss, zcorss, zsemss, zvalss; + Real vdif, vdifNew; + Real evec[3], evecNew[3], evecOut[3]; + Complex ubr[4], ubrd[4]; // Spin transformation matrices + Matrix dmat, dmatp; // Spin rotation matrices for the relativistic case + Complex wx[4], wy[4], wz[4]; + Real xvalws[2], xvalwsNew[2]; + Real xvalmt[2]; + Real qtotws, mtotws; + Real qtotmt, mtotmt; + Real qvalws, mvalws; + Real qvalmt, mvalmt; + Real qInt, mInt, rhoInt; // Interstitial charge, moment and charge density + Real mIntComponent[3]; // Interstitial moment components + int nspin; // Number of spin direction-related settings + // (determines n_spin_cant & n_spin_pola) + int numc; // Number of core states + bool spinFlipped; // Flag for antiferromagnetic condition + +// Alloy Class + int alloy_class; + +// Volumes: + Real omegaMT; // Muffin-Tin volume + Real omegaWS; // Wigner-Seitz volume + Real rws; // Wigner-Seitz radius + +// omegaInt - interstitial volume is in voronoi.omegaInt + +// Madelung matrix + std::vector madelungMatrix; + +// Potential and charge density + Real vSpinShift; // relativ shift of the spin up and spin down potentials + // for use in WL-LSMS. Applied using the PotentialShifter class + Matrix vr, rhotot; + +// Storage for newly calculated potential and chage densities before mixing + Matrix vrNew,rhoNew; + +// Exchange-correlation parameters + Matrix exchangeCorrelationPotential; // Exchange-correlation potential + Matrix exchangeCorrelationEnergy; // Exchange-correlation energy + Real exchangeCorrelationE; // Exchange-correlation energy + Real exchangeCorrelationV[2]; // Exchange-correlation potential for spin up/down + +// Core state info + Matrix ec; + Matrix nc, lc, kc; + Real ecorv[2], esemv[2]; + Matrix corden, semcor; + Real qcpsc_mt, qcpsc_ws, mcpsc_mt, mcpsc_ws; + +// Constraint data + enum {None, Direction, Moment} constraintType; + Real b_con[3]; + Real b_basis[9]; + Real mConstraint; + +// vector for the energiy points in eGroup + std::vector > pmat_m; + + VoronoiPolyhedra voronoi; + +// local densities + Matrix dos_real; + Real doslast[4]; + Real doscklast[4]; + Real evalsum[4]; + Real dosint[4]; + Real dosckint[4]; + Matrix greenint; + Matrix greenlast; + Real dip[6]; + +// rms changes between iterations: + Real vrms[2]; + Real qrms[2]; + + void resetLocalDensities(void) + { + dos_real=0.0; + greenint=0.0; + greenlast=0.0; + doslast[0]=doslast[1]=doslast[2]=doslast[3]=0.0; + doscklast[0]=doscklast[1]=doscklast[2]=doscklast[3]=0.0; + evalsum[0]=evalsum[1]=evalsum[2]=evalsum[3]=0.0; + dosint[0]=dosint[1]=dosint[2]=dosint[3]=0.0; + dosckint[0]=dosckint[1]=dosckint[2]=dosckint[3]=0.0; + dip[0]=dip[1]=dip[2]=dip[3]=dip[4]=dip[5]=0.0; + } +}; + +#endif diff --git a/src/SingleSite/F_readSingleAtomData_bigcell.f90 b/src/SingleSite/F_readSingleAtomData_bigcell.f90 new file mode 100644 index 000000000..39fb5e4e0 --- /dev/null +++ b/src/SingleSite/F_readSingleAtomData_bigcell.f90 @@ -0,0 +1,95 @@ + + + subroutine F_readSingleAtomData_bigcell(fname_c,fname_l, & + & header,jmt,jws,xstart, & + & rmt,alat,efermi,vdif,ztotss,zcorss, & + & nspin,numc,xvalws, & + & vr,rhotot,corden,v_dim, & + & ec,nc,lc,kc,c_dim) + implicit none + + byte fname_c(*) + integer fname_l,i,j,is,jwsc + integer jmt,jws,nspin,numc,v_dim,c_dim + integer nc(c_dim,*),lc(c_dim,*),kc(c_dim,*) + real*8 xvalws(2) + real*8 xstart,rmt,alat,efermi,vdif,ztotss,zcorss + real*8 vr(v_dim,*),rhotot(v_dim,*) + real*8 ec(c_dim,*) + real*8 xmt,v0 + real*8 corden(v_dim,*) + character*80 header,jtitle + character*127 fname + character lst(30,2)*5 + integer funit + +! write(*,*) fname_l +! write(*,'(127a)') (fname_c(i),i=1,fname_l) + write(fname,'(127a)') (fname_c(i),i=1,fname_l) +! +! write(*,*) 'reading from:',fname + + funit=55 + open(unit=funit,file=fname, & + & status='old',form='formatted') +! ---------------------------------------------------------- +! write(6,'('' SWVDAT:: mynod,ib,vfname(ib):'',2i5,a60)') +! > mynod,ib,vfname(ib) +! +! ========================================================== +! read in the formatted potential data...................... +! ========================================================== + +! write(6,*) 'reading file //', trim(fname), '//' +! flush(unit=6) + + read(funit,'(a80)') jtitle + header=jtitle +! header=trim(jtitle)//char(0) + read(funit,*) nspin,vdif +! write(6,'('' SWVDAT:: ib,n_spin1,header:'',2i5,a80,i5)') +! > ib,n_spin1,header + do is=1,nspin + read(funit,'(1a80)')jtitle + read(funit,'(f5.0,17x,f12.5,f5.0,e20.13)') & + & ztotss,alat,zcorss,efermi +! write(6,'('' SWVDAT:: mynod,ib,is,ztss,zcss,jtitle:'', +! > 3i5,2f5.0,a40)') mynod,ib,is,ztss,zcss,jtitle + read(funit,'(17x,2e20.13,i5)') xstart,xmt,jmt + rmt=exp(xmt) + if(jmt.gt.v_dim) then + write(*,*) "!! jmt exeeds v_dim !!" + stop + endif + read(funit,'(4e20.13)') (vr(j,is),j=1,jmt) + read(funit,'(35x,e20.13)') v0 +! ==================================================== +! read in formatted total charge density.............. +! ==================================================== + read(funit,'(i5,e20.13)') jws,xvalws(is) + if(jws.gt.v_dim) then + write(*,*) "!! jws exeeds v_dim !!" + stop + endif + read(funit,'(4e20.13)') (rhotot(j,is),j=1,jws) +! ==================================================== +! read in formatted core state information............ +! ==================================================== + read(funit,'(2i5)') numc,jwsc + if(numc.gt.c_dim) then + write(*,*) "!! numc exeeds c_dim !!" + write(*,*) numc, c_dim + stop + endif + if(numc.gt.0) then + read(funit,'(3i5,f12.5,1x,a5)') & + & (nc(j,is),lc(j,is), & + & kc(j,is),ec(j,is),lst(j,is),j=1,numc) + endif + if (jwsc.gt.0) then + read(funit,'(4e20.13)') (corden(j,is),j=1,jwsc) + endif + enddo + close(unit=funit) + + end diff --git a/src/SingleSite/F_writeSingleAtomData_bigcell.f90 b/src/SingleSite/F_writeSingleAtomData_bigcell.f90 new file mode 100755 index 000000000..a44689b90 --- /dev/null +++ b/src/SingleSite/F_writeSingleAtomData_bigcell.f90 @@ -0,0 +1,91 @@ + subroutine F_writeSingleAtomData_bigcell(fname_c,fname_l, & + & header_c,header_l,jmt,jws,xstart, & + & rmt,alat,efermi,vdif,ztotss,zcorss, & + & n_spin_pola, numc, xvalws, & + & vr,rhotot,corden, v_dim, & + & atname,zsemss,zvalss, & + & ec, nc,lc,kc, c_dim) +! ================================================================ + + implicit none + + byte fname_c(*) + byte header_c(*) + integer fname_l + integer header_l + + integer n_spin_pola + integer c_dim,v_dim + + character header*80 + character*127 fname + character*2 atname + + integer jmt + integer jws + integer numc + integer nc(c_dim,n_spin_pola) + integer lc(c_dim,n_spin_pola) + integer kc(c_dim,n_spin_pola) + integer ic + integer ir + integer is + integer js + integer i,j + + real*8 rmt + real*8 rws + real*8 h + real*8 xstart + real*8 vr(v_dim,n_spin_pola) + real*8 vdif + real*8 rhotot(v_dim,n_spin_pola) + real*8 corden(v_dim,n_spin_pola) + real*8 xvalws(n_spin_pola) + real*8 ztotss + real*8 zcorss + real*8 zsemss + real*8 zvalss + real*8 ec(c_dim,n_spin_pola) + real*8 alat + real*8 efermi + real*8 v0 + real*8 xmt + real*8 zero + + parameter (zero=0.0d0) + + write(fname,'(127a)') (fname_c(i),i=1,fname_l) + write(header,'(80a)') (header_c(i),i=1,header_l) +! ============================================================= + xmt=log(rmt) + v0=zero +! ------------------------------------------------------------- + open(unit=30,file=fname,status='replace') +! ------------------------------------------------------------- + write(30,'(a80)') header + write(30,'(i5,2x,d20.13)') n_spin_pola,vdif + do is=1,n_spin_pola + write(30,'('' LSMS:'',t18,a2,t25,''z='',f4.0,t35, & + & ''xvalws='',f10.5)') atname,ztotss,xvalws(is) + write(30,'(f5.0,17x,f12.5,f5.0,d20.13)') & + & ztotss,alat,zcorss,efermi + write(30,'(17x,2d20.13,i5)') xstart,xmt,jmt + write(30,'(4d20.13)') (vr(ir,is),ir=1,jmt) + write(30,'(35x,d20.13)') v0 + write(30,'(i5,d20.13)') jws,xvalws(is) + write(30,'(4d20.13)') (rhotot(ir,is),ir=1,jws) + write(30,'(2i5)') numc,jws +! write(30,'(3i5,f12.5,2x,a5)') +! > (nc(j,is),lc(j,is),kc(j,is),ec(j,is),lst(j,is), +! > j=1,numc) + write(30,'(3i5,f12.5,7x)') & + & (nc(j,is),lc(j,is),kc(j,is),ec(j,is), j=1,numc) + write(30,'(4d20.13)') (corden(ir,is),ir=1,jws) +! ------------------------------------------------------------- + enddo + + close(unit=30) +! ------------------------------------------------------------- + return + end diff --git a/src/SingleSite/Makefile b/src/SingleSite/Makefile new file mode 100755 index 000000000..d1805d247 --- /dev/null +++ b/src/SingleSite/Makefile @@ -0,0 +1,24 @@ +OBJ = SingleSiteScattering.o readSingleAtomData_hdf5.o readSingleAtomData_bigcell.o \ + F_readSingleAtomData_bigcell.o single_scatterer_nonrel.o semrel_c.o scalar_m.o \ + single_scatterer_rel.o spzwafu.o csbf.o matops.o gjinv.o \ + dirmag1-op.o dirmag2-op.o brmat.o \ + writeSingleAtomData_hdf5.o writeSingleAtomData_bigcell.o \ + F_writeSingleAtomData_bigcell.o checkAntiFerromagneticStatus.o + +all: libSingleSite.a + +clean: + rm -f *.a *.o + +%.o : %.cpp + $(CXX) $(INC_PATH) -c -o $@ $< + +%.o : %.f + $(F77) -c -o $@ $< + +%.o : %.f90 + $(F77) -c -o $@ $< + +libSingleSite.a : $(OBJ) + $(AR) -r libSingleSite.a $(OBJ) + cp libSingleSite.a $(TOP_DIR)/lib diff --git a/src/SingleSite/SingleSiteScattering.cpp b/src/SingleSite/SingleSiteScattering.cpp new file mode 100644 index 000000000..32f4fba9d --- /dev/null +++ b/src/SingleSite/SingleSiteScattering.cpp @@ -0,0 +1,130 @@ +#include +#include "SingleSiteScattering.hpp" + +extern "C" +{ + void trltog_(int *, int *, Complex *, Complex *, Complex *, Complex *, Complex *); + void gjinv_(Complex *a, int *n, int *nmax, Complex *detl); + void tripmt_(Complex *u, Complex *b, Complex *ust, int *ndi1, int *ind2, int *ndim); +} + +void calculateSingleScattererSolution(LSMSSystemParameters &lsms, AtomData &atom, + Matrix &vr, + Complex energy, Complex prel, Complex pnrel, + NonRelativisticSingleScattererSolution &solution) +{ + int iprpts=atom.r_mesh.size(); + solution.energy=energy; + // Real r_sph=atom.r_mesh[atom.jws]; + // if(lsms.mtasa==0) r_sph=atom.r_mesh[atom.jmt]; + Real r_sph = atom.rInscribed; + if(lsms.mtasa > 0) r_sph = atom.rws; + + //YingWai's check + //if(lsms.global.iprint>=0) + // printf("Inside calculateSingleScatterSolution. r_sph = %15.8f\n", r_sph); + + if(lsms.n_spin_pola==1) // non spin polarized + { + single_scatterer_nonrel_(&lsms.nrelv, &lsms.clight, &atom.lmax, &atom.kkrsz, + &energy,&prel,&pnrel, + &vr(0,0),&atom.r_mesh[0],&atom.h,&atom.jmt,&atom.jws, + &solution.tmat_l(0,0,0),&solution.matom(0,0), + &solution.zlr(0,0,0),&solution.jlr(0,0,0), + &r_sph, + &iprpts, + &lsms.global.iprint,lsms.global.istop,32); + int kkrszsqr=atom.kkrsz*atom.kkrsz; + int one=1; + cblas_zcopy(kkrszsqr,&solution.tmat_l(0,0,0),1,&solution.tmat_g(0,0),1); + } else { + for(int is=0; is1) + { + trltog_(&atom.kkrsz,&atom.kkrsz,&atom.ubr[0],&atom.ubrd[0], + &solution.tmat_l(0,0,0), &solution.tmat_l(0,0,1),&solution.tmat_g(0,0)); + } else { + int kkrszsqr=atom.kkrsz*atom.kkrsz; + int one=1; + cblas_zcopy(kkrszsqr,&solution.tmat_l(0,0,0),1,&solution.tmat_g(0,0),1); + cblas_zcopy(kkrszsqr,&solution.tmat_l(0,0,1),1,&solution.tmat_g(0,atom.kkrsz),1); + } + } +} + +void calculateScatteringSolutions(LSMSSystemParameters &lsms, std::vector &atom, + Complex energy, Complex prel, Complex pnrel, + std::vector &solution) +{ + // if(atom.size()>solution.size()) solution.resize(atom.size()); + for(int i=0; i &vr, + Complex energy, + RelativisticSingleScattererSolution &solution) +{ + int iprpts=atom.r_mesh.size(); + solution.energy=energy; + +// first we transform the potential from the up-down form to el-mag form + std::vector vrr, brr; + Matrix boprr; + + vrr.resize(iprpts); + brr.resize(iprpts); + boprr.resize(iprpts,2); + + + // first we transform the potential from the up-down form to el-mag form + for(int ir=0; ir tmat_g; +}; + +class NonRelativisticSingleScattererSolution : public SingleScattererSolution { +public: + NonRelativisticSingleScattererSolution(){} + NonRelativisticSingleScattererSolution(LSMSSystemParameters &lsms, AtomData &a, Complex *tmat_g_stor=NULL) + { + init(lsms,a,tmat_g_stor); + } + void init(LSMSSystemParameters &lsms, AtomData &a, Complex *tmat_g_store=NULL) + { + atom=&a; + kkrsz=a.kkrsz; + matom.resize(a.lmax+1,2); + tmat_l.resize(a.kkrsz,a.kkrsz,2); + zlr.resize(a.r_mesh.size(),a.lmax+1,2); + jlr.resize(a.r_mesh.size(),a.lmax+1,2); + if(tmat_g_store!=NULL) + tmat_g.retarget(a.kkrsz*lsms.n_spin_cant,a.kkrsz*lsms.n_spin_pola,tmat_g_store); + else + tmat_g.resize(a.kkrsz*lsms.n_spin_cant,a.kkrsz*lsms.n_spin_pola); + } +// non relativistic wave functions + Array3d zlr,jlr; + Matrix matom; + Array3d tmat_l; + + Complex ubr[4], ubrd[4]; +}; + +class RelativisticSingleScattererSolution : public SingleScattererSolution { +public: +// relativistic wave functions + static const int nuzp=2; + Array3d gz,fz,gj,fj; + + std::vector nuz; + Matrix indz; + + Matrix matom; + + + RelativisticSingleScattererSolution(){} + RelativisticSingleScattererSolution(LSMSSystemParameters &lsms, AtomData &a, Complex *tmat_g_stor=NULL) + { + init(lsms,a,tmat_g_stor); + } + + void init(LSMSSystemParameters &lsms, AtomData &a, Complex *tmat_g_store=NULL) + { + atom=&a; + kkrsz=a.kkrsz; + matom.resize(a.lmax+1,2); + + if(tmat_g_store!=NULL) + tmat_g.retarget(a.kkrsz*lsms.n_spin_cant,a.kkrsz*lsms.n_spin_pola,tmat_g_store); + else + tmat_g.resize(a.kkrsz*lsms.n_spin_cant,a.kkrsz*lsms.n_spin_pola); + + gz.resize(a.r_mesh.size(), nuzp, 2*a.kkrsz); + fz.resize(a.r_mesh.size(), nuzp, 2*a.kkrsz); + gj.resize(a.r_mesh.size(), nuzp, 2*a.kkrsz); + fj.resize(a.r_mesh.size(), nuzp, 2*a.kkrsz); + + nuz.resize(2*a.kkrsz); + indz.resize(nuzp,2*a.kkrsz); + + // printf("relativistiv wavefunction not implemented yet!\n"); + // exit(1); + } +}; + + +extern "C" +{ + void single_site_tmat_(int *nrel_rel,int *n_spin_cant,int *is, + int *n_spin_pola, + int * mtasa,Real *rws, + int * nrelv,Real *clight,int *lmax,int *kkrsz, + Complex *energy,Complex *prel,Complex *pnrel, + Real *vr,Real *h,int *jmt,int *jws,Real *r_mesh, + Complex *tmat_l,Complex *tmat_g,Complex *matom, + Complex *zlr,Complex *jlr, + Complex *gz,Complex *fz,Complex *gj,Complex *fj,int *nuz,int *indz, + Complex *ubr,Complex *ubrd,Complex *dmat,Complex *dmatp, + Real *r_sph,int *iprint,const char *istop); + + void single_scatterer_nonrel_(int *nrelv,double *clight,int *lmax,int *kkrsz, + Complex *energy,Complex *prel,Complex *pnrel, + double *vr,double *r_mesh,double *h,int *jmt,int *jws, + Complex *tmat_l,Complex *matom, + Complex *zlr,Complex *jlr, + double *r_sph,int *iprpts,int *iprint,char *istop,int istop_len); + + void single_scatterer_rel_(Complex *ce, Complex *psq, int *lmax, int *kmymax, + int *idpot,// idpot=identifies vauum empty sphere: idpot=0 -> Vacuum else an atomic site (can be set to Z!) + double *v0, double *vr, double *br, double *bopr, double *dx, int *ns, double *rs, + Complex *tminv, Complex *gz, Complex *fz, Complex *gj, Complex *fj, int *nuz, int *indz, + int *iflag, double *socsc, int *iprpts, + int *iprint, const char *istop, int istop_len); + +} + +void calculateSingleScattererSolution(LSMSSystemParameters &lsms, AtomData &atom, + Matrix &vr, + Complex energy, Complex prel, Complex pnrel, + NonRelativisticSingleScattererSolution &solution); +void calculateScatteringSolutions(LSMSSystemParameters &lsms, std::vector &atom, + Complex energy, Complex prel, Complex pnrel, + std::vector &solution); + +void calculateSingleScattererSolution(LSMSSystemParameters &lsms, AtomData &atom, + Matrix &vr, + Complex energy, + RelativisticSingleScattererSolution &solution); +#endif diff --git a/src/SingleSite/brmat.f b/src/SingleSite/brmat.f new file mode 100755 index 000000000..25d607e58 --- /dev/null +++ b/src/SingleSite/brmat.f @@ -0,0 +1,81 @@ + subroutine brmat(l,my,n,bspr,bopr, + > ba11,ba12,ba22,bb11,bb22,iprpts) +c===================== +c + implicit real*8 (a-h,o-z) +! include '../param.h' +! include 'atom_param.h' + include '../Misc/cgc.h' +c + dimension bspr(iprpts),bopr(iprpts,2) + dimension ba11(iprpts),ba12(iprpts),ba22(iprpts) + dimension bb11(iprpts),bb22(iprpts),br(iprpts,2) +c +! dimension u1(50),ind1(50) +! dimension u2(50),ind2(50) +! common/cgc/u1,u2,ind1,ind2 +c + call zeroout(ba11,iprpts) + call zeroout(ba12,iprpts) + call zeroout(ba22,iprpts) + call zeroout(bb11,iprpts) + call zeroout(bb22,iprpts) +c + do i=1,n + br(i,1)=-bspr(i) + br(i,2)=bspr(i) + end do + if(l.eq.2) then + do i=1,n + br(i,1)=br(i,1)+bopr(i,1)*(my+1.0d0)/2.0d0 + br(i,2)=br(i,2)+bopr(i,2)*(my-1.0d0)/2.0d0 + end do + end if +c + IF(iabs(my).eq.2*l+1) THEN +c + kap2=-l-1 + kapb2=l+1 + kap2my=2*kap2*kap2+kap2+(my+1)/2 + kapb2my=2*kapb2*kapb2+kapb2+(my+1)/2 + ca22_d=u1(kap2my)*u1(kap2my) + ca22_u=u2(kap2my)*u2(kap2my) + cb22_d=u1(kapb2my)*u1(kapb2my) + cb22_u=u2(kapb2my)*u2(kapb2my) + do i=1,n + ba22(i)=ca22_d*br(i,1)+ca22_u*br(i,2) + bb22(i)=cb22_d*br(i,1)+cb22_u*br(i,2) + end do +c + ELSE +c + kap1=l + kap2=-l-1 + kapb1=-l + kapb2=l+1 + kap1my=2*kap1*kap1+kap1+(my+1)/2 + kapb1my=2*kapb1*kapb1+kapb1+(my+1)/2 + kap2my=2*kap2*kap2+kap2+(my+1)/2 + kapb2my=2*kapb2*kapb2+kapb2+(my+1)/2 + ca11_d=u1(kap1my)*u1(kap1my) + ca11_u=u2(kap1my)*u2(kap1my) + ca12_d=u1(kap1my)*u1(kap2my) + ca12_u=u2(kap1my)*u2(kap2my) + ca22_d=u1(kap2my)*u1(kap2my) + ca22_u=u2(kap2my)*u2(kap2my) + cb11_d=u1(kapb1my)*u1(kapb1my) + cb11_u=u2(kapb1my)*u2(kapb1my) + cb22_d=u1(kapb2my)*u1(kapb2my) + cb22_u=u2(kapb2my)*u2(kapb2my) + do i=1,n + ba11(i)=ca11_d*br(i,1)+ca11_u*br(i,2) + ba12(i)=ca12_d*br(i,1)+ca12_u*br(i,2) + ba22(i)=ca22_d*br(i,1)+ca22_u*br(i,2) + bb11(i)=cb11_d*br(i,1)+cb11_u*br(i,2) + bb22(i)=cb22_d*br(i,1)+cb22_u*br(i,2) + end do +c + END IF +c + return + end diff --git a/src/SingleSite/checkAntiFerromagneticStatus.cpp b/src/SingleSite/checkAntiFerromagneticStatus.cpp new file mode 100644 index 000000000..37f8aeb83 --- /dev/null +++ b/src/SingleSite/checkAntiFerromagneticStatus.cpp @@ -0,0 +1,30 @@ +#include "checkAntiFerromagneticStatus.hpp" + + +void checkIfSpinHasFlipped(LSMSSystemParameters &lsms, AtomData &a) +{ + if (lsms.n_spin_cant == 1 && lsms.n_spin_pola == 2) + { + Real spinFlipDirection = (a.xvalws[0] - a.xvalws[1]) * (a.xvalwsNew[0] - a.xvalwsNew[1]); + + if (spinFlipDirection > 0.0) + a.spinFlipped = false; + else + a.spinFlipped = true; + } + +} + + +void swapCoreStateEnergies(AtomData &a) +{ + + Real tmp; + for (int coreEnergyLevel=0; coreEnergyLevel dx,xnot,rs,ns,g,f,gp,iprpts) +c + implicit real*8(a-h,o-z) +! include '../param.h' +! include 'atom_param.h' +c +c *********************************************************** +c * integration of relativistic radial dirac equation * +c * in the presence of an internal field by adams method * +c * integrate outward! * +c * strange et al., j.phys.c.solid state phys.17,3355(1984) * +c * scaling of SOC and OP-term ala Hubert Ebert included * +c * * +c * my=+/-(l+1/2), kap=-l-1 case!!! * +c *********************************************************** +c + integer iprpts + complex*16 e,p,q,pp,qp + complex*16 pn,qn,k1,k2,k3,k4,m1,m2,m3,m4 + complex*16 psum,qsum,p0,q0,p1,q1,ppnp1,qpnp1 + complex*16 g,gp,f +c + dimension vr(iprpts),bspr(iprpts),bopr(iprpts,2) + dimension ba11(iprpts),ba12(iprpts) + dimension ba22(iprpts),bb11(iprpts),bb22(iprpts) + dimension p(iprpts),q(iprpts),pp(iprpts),qp(iprpts) + dimension g(iprpts),f(iprpts) +c + data nitmax/100/,test/1.0d10/,imode/0/ +c + if(iabs(my).lt.2*l+1) stop 'dirmag1: -l-1/2 < my < l+1/2' + dkoef1=475.d0/502.d0 + dkoef2= 27.d0/502.d0 +c + xl=dfloat(l) + xkap=-xl-1.d0 + xk=socsc*(1.d0+xkap)-1.d0 + facl=xl*(xl+1.d0)-xk*(xk+1.d0) +c + dx2=0.5d0*dx + c = 274.072d0 + cin = 1.0d 00/(c*c) +c +c calculate boundary conditions +c + if(vr(1).lt.-1.d-3)then + hoc=-vr(1)/c + else +c write(6,'(99d12.4)')(vr(i),i=1,5) + hoc=-vr(2)/c + vr(1)=vr(2) + endif + u=(xk+dsqrt(xk*xk-hoc*hoc+facl))/hoc + p(1) = 1.0d-20 + q(1) = c*u*1.0d-20 +c +c get combined effective fields +c + call brmat(l,my,ns,bspr,bopr,ba11,ba12,ba22,bb11,bb22,iprpts) +c + r=dexp(xnot) + call dmag1op(pp(1),qp(1),p(1),q(1), + > xk,facl,cin,e,r,vr(1),ba22(1),bb22(1)) +c +c---> start runge-kutta procedure (points 2, ... , 6) +c + do n=1,5 +c + x=xnot+(n-1)*dx +c + rn=dexp(x) + vrn=vr(n) + ba22n=ba22(n) + bb22n=bb22(n) +c + rnp1=dexp(x+dx) + vrnp1=vr(n+1) + ba22np1=ba22(n+1) + bb22np1=bb22(n+1) +c + rmid=dexp(x+dx2) + vrmid=0.5d0*(vrn+vrnp1) + ba22mid=0.5d0*(ba22n+ba22np1) + bb22mid=0.5d0*(bb22n+ba22np1) +c + pn=p(n) + qn=q(n) + call dmag1op(k1,m1,pn,qn, + > xk,facl,cin,e,rn,vrn,ba22n,bb22n) +c + call dmag1op(k2,m2,pn+dx2*k1,qn+dx2*m1, + > xk,facl,cin,e,rmid,vrmid,ba22mid,bb22mid) +c + call dmag1op(k3,m3,pn+dx2*k2,qn+dx2*m2, + > xk,facl,cin,e,rmid,vrmid,ba22mid,bb22mid) +c + call dmag1op(k4,m4,pn+dx*k3,qn+dx*m3, + > xk,facl,cin,e,rnp1,vrnp1,ba22np1,bb22np1) +c + p(n+1)=pn+dx*(k1+2.d0*k2+2.d0*k3+k4)/6.d0 + q(n+1)=qn+dx*(m1+2.d0*m2+2.d0*m3+m4)/6.d0 + call dmag1op(pp(n+1),qp(n+1),p(n+1),q(n+1), + > xk,facl,cin,e,rnp1,vrnp1,ba22np1,bb22np1) +c + end do +c +c---> begin adams procedure (points 7, 8, ... , ns) +c + do n=6,ns-1 +c + x=xnot+(n-1)*dx + r=dexp(x+dx) + vrc=vr(n+1) + ba22c=ba22(n+1) + bb22c=bb22(n+1) +c + psum=646.d0*pp(n)-264.d0*pp(n-1)+106.d0*pp(n-2)-19.d0*pp(n-3) + qsum=646.d0*qp(n)-264.d0*qp(n-1)+106.d0*qp(n-2)-19.d0*qp(n-3) +c +c predict for point n+1 +c + p0=p(n)+dx*(251.d0*pp(n-4)-1274.d0*pp(n-3)+2616.d0*pp(n-2)- + > 2774.d0*pp(n-1)+1901.d0*pp(n))/720.d0 + q0=q(n)+dx*(251.d0*qp(n-4)-1274.d0*qp(n-3)+2616.d0*qp(n-2)- + > 2774.d0*qp(n-1)+1901.d0*qp(n))/720.d0 +c +c correct +c + if(imode.eq.1) then +c + do nit=1,nitmax +c + call dmag1op(ppnp1,qpnp1,p0,q0, + > xk,facl,cin,e,r,vrc,ba22c,bb22c) + p1=p(n)+dx*(251.d0*ppnp1+psum)/720.d0 + q1=q(n)+dx*(251.d0*qpnp1+qsum)/720.d0 +c +c compare predictor with corrector +c + if(test*cdabs(p1-p0).gt.cdabs(p0)) goto 15 + if(test*cdabs(q1-q0).gt.cdabs(q0)) goto 15 + goto 10 +c + 15 p0=p1 + q0=q1 +c + end do + write(6,*) n+1,r,nit,' not converged' +c + else +c + call dmag1op(ppnp1,qpnp1,p0,q0, + > xk,facl,cin,e,r,vrc,ba22c,bb22c) + p1=p(n)+dx*(251.d0*ppnp1+psum)/720.d0 + q1=q(n)+dx*(251.d0*qpnp1+qsum)/720.d0 + q1=dkoef1*q1+dkoef2*q0 + p1=dkoef1*p1+dkoef2*p0 +c + end if +c + 10 q(n+1)=q1 + p(n+1)=p1 + call dmag1op(pp(n+1),qp(n+1),p(n+1),q(n+1), + > xk,facl,cin,e,r,vrc,ba22c,bb22c) +c + end do +c +c store radial amplitudes times radius +c + do n=1,ns + g(n)=p(n) + f(n)=q(n)/c + end do + gp=(pp(ns)-p(ns))/rs +c + return + end + subroutine dirmagi1op(socsc,e,l,my,vr,bspr,bopr, + > dx,xnot,rs,ns,g,f,gp,iprpts) +c + implicit real*8(a-h,o-z) +! include '../param.h' +! include 'atom_param.h' +c +c *********************************************************** +c * integration of relativistic radial dirac equation * +c * in the presence of an internal field by adams method * +c * integrate inward! * +c * strange et al., j.phys.c.solid state phys.17,3355(1984) * +c * scaling of SOC and OP-term ala Hubert Ebert included * +c * * +c * my=+/-(l+1/2), kap=-l-1 case!!! * +c *********************************************************** +c + integer iprpts + complex*16 e,psq,pe + complex*16 p,q,pp,qp + complex*16 pn,qn,k1,k2,k3,k4,m1,m2,m3,m4 + complex*16 psum,qsum,p0,q0,p1,q1,ppnm1,qpnm1 + complex*16 g,gp,f + complex*16 fb(0:5),fn(0:5),fh(0:5) +c + dimension vr(iprpts),bspr(iprpts),bopr(iprpts,2) + dimension xlag(iprpts),vrlag(iprpts) + dimension bsprlag(iprpts),boprlag(iprpts,2) + dimension ba11(iprpts),ba12(iprpts) + dimension ba22(iprpts),bb11(iprpts),bb22(iprpts) + dimension p(iprpts),q(iprpts),pp(iprpts),qp(iprpts) + dimension g(iprpts),f(iprpts) +c + data nitmax/100/,test/1.0d10/,imode/0/,nout/5/ +c + if(iabs(my).lt.2*l+1) stop 'dirmag1: -l-1/2 < my < l+1/2' + dkoef1=475.d0/502.d0 + dkoef2= 27.d0/502.d0 +c + xl=dfloat(l) + xkap=-xl-1.d0 + xk=socsc*(1.d0+xkap)-1.d0 + facl=xl*(xl+1.d0)-xk*(xk+1.d0) + lb=l+1 + sk=l-lb +c + dx2=0.5d0*dx + c = 274.072d0 + cin = 1.0d 00/(c*c) + ilag=3 + xs=dlog(rs) + do i=1,ns + xlag(i)=xs+(i-ns)*dx + vrlag(i)=vr(i) + bsprlag(i)=bspr(i) + boprlag(i,1)=bopr(i,1) + boprlag(i,2)=bopr(i,2) + end do + nlag=ns+1 + vrlag(nlag)=0.d0 + bsprlag(nlag)=0.d0 + boprlag(nlag,1)=0.d0 + boprlag(nlag,2)=0.d0 + xlag(nlag)=xs+nout*dx +c +c get combined effective fields +c + call brmat(l,my,nlag,bsprlag,boprlag,ba11,ba12,ba22,bb11,bb22, + > iprpts) +c + psq=e+e*e*cin + pe=cdsqrt(psq) +c +c---> set up the starting values outside the muffin tin +c corresponding to the boundary condition +c + x=xs+nout*dx + r=dexp(x) + call csbf(l+1,pe,r,fb,fn,fh) + n=ns+nout + p(n)= r*fb(l) + q(n)= ( (xk-xkap)*fb(l) + sk*pe*r*fb(lb) ) * e/psq + call dmag1op(pp(n),qp(n),p(n),q(n), + > xk,facl,cin,e,r,vrlag(nlag),ba22(nlag),bb22(nlag)) +c +c---> start runge-kutta procedure (points ns+nout-1, ... , ns+nout-5) +c + do n=ns+nout,ns+nout-4,-1 +c + x=xs+(n-ns)*dx + rn=dexp(x) + vrn=ylag(x,xlag,vrlag,0,ilag,nlag,iex) + ba22n=ylag(x,xlag,ba22,0,ilag,nlag,iex) + bb22n=ylag(x,xlag,bb22,0,ilag,nlag,iex) +c + rmid=dexp(x-dx2) + vrmid=ylag(x-dx2,xlag,vrlag,0,ilag,nlag,iex) + ba22mid=ylag(x-dx2,xlag,ba22,0,ilag,nlag,iex) + bb22mid=ylag(x-dx2,xlag,bb22,0,ilag,nlag,iex) +c + rnm1=dexp(x-dx) + vrnm1=ylag(x-dx,xlag,vrlag,0,ilag,nlag,iex) + ba22nm1=ylag(x-dx,xlag,ba22,0,ilag,nlag,iex) + bb22nm1=ylag(x-dx,xlag,bb22,0,ilag,nlag,iex) +c + pn=p(n) + qn=q(n) + call dmag1op(k1,m1,pn,qn, + > xk,facl,cin,e,rn,vrn,ba22n,bb22n) +c + call dmag1op(k2,m2,pn-dx2*k1,qn-dx2*m1, + > xk,facl,cin,e,rmid,vrmid,ba22mid,bb22mid) +c + call dmag1op(k3,m3,pn-dx2*k2,qn-dx2*m2, + > xk,facl,cin,e,rmid,vrmid,ba22mid,bb22mid) +c + call dmag1op(k4,m4,pn-dx*k3,qn-dx*m3, + > xk,facl,cin,e,rnm1,vrnm1,ba22nm1,bb22nm1) +c + p(n-1)=pn-dx*(k1+2.d0*k2+2.d0*k3+k4)/6.d0 + q(n-1)=qn-dx*(m1+2.d0*m2+2.d0*m3+m4)/6.d0 + call dmag1op(pp(n-1),qp(n-1),p(n-1),q(n-1), + > xk,facl,cin,e,rnm1,vrnm1,ba22nm1,bb22nm1) +c + end do +c +c---> begin adams procedure (points ns+nout-6, ... , 1) +c + do n=ns+nout-5,2,-1 +c + x=xs+(n-ns)*dx + r=dexp(x-dx) + vrc=vr(n-1) + ba22c=ba22(n-1) + bb22c=bb22(n-1) +c + psum=646.d0*pp(n)-264.d0*pp(n+1)+106.d0*pp(n+2)-19.d0*pp(n+3) + qsum=646.d0*qp(n)-264.d0*qp(n+1)+106.d0*qp(n+2)-19.d0*qp(n+3) +c +c predict for point n-1 +c + p0=p(n)-dx*(251.d0*pp(n+4)-1274.d0*pp(n+3)+2616.d0*pp(n+2)- + > 2774.d0*pp(n+1)+1901.d0*pp(n))/720.d0 + q0=q(n)-dx*(251.d0*qp(n+4)-1274.d0*qp(n+3)+2616.d0*qp(n+2)- + > 2774.d0*qp(n+1)+1901.d0*qp(n))/720.d0 +c +c correct +c + if(imode.eq.1) then +c + do nit=1,nitmax +c + call dmag1op(ppnm1,qpnm1,p0,q0, + > xk,facl,cin,e,r,vrc,ba22c,bb22c) + p1=p(n)-dx*(251.d0*ppnm1+psum)/720.d0 + q1=q(n)-dx*(251.d0*qpnm1+qsum)/720.d0 +c +c compare predictor with corrector +c + if(test*cdabs(p1-p0).gt.cdabs(p0)) goto 15 + if(test*cdabs(q1-q0).gt.cdabs(q0)) goto 15 + goto 10 +c + 15 p0=p1 + q0=q1 + end do + write(6,*) n-1,r,nit,' not converged' +c + else +c + call dmag1op(ppnm1,qpnm1,p0,q0, + > xk,facl,cin,e,r,vrc,ba22c,bb22c) + p1=p(n)-dx*(251.d0*ppnm1+psum)/720.d0 + q1=q(n)-dx*(251.d0*qpnm1+qsum)/720.d0 + q1=dkoef1*q1+dkoef2*q0 + p1=dkoef1*p1+dkoef2*p0 + + end if +c + 10 q(n-1)=q1 + p(n-1)=p1 + call dmag1op(pp(n-1),qp(n-1),p(n-1),q(n-1), + > xk,facl,cin,e,r,vrc,ba22c,bb22c) +c + end do +c +c store radial amplitudes times radius +c + do n=1,ns + g(n)=p(n) + f(n)=q(n)/c + end do + gp=(pp(ns)-p(ns))/rs +c + return + end + subroutine dmag1op(pp,qp,p,q,xk,facl,cin,e,r,vr,ba22,bb22) +c + implicit real*8 (a-h,o-z) + complex*16 pp,qp,p,q,e,tr,sr +c + tr=r*e-vr + sr=cin*tr+r+cin*bb22 +c + qp= xk*q - tr*p + ba22*p + facl*p/sr + pp=-xk*p + sr*q +c + return + end diff --git a/src/SingleSite/dirmag2-op.f b/src/SingleSite/dirmag2-op.f new file mode 100755 index 000000000..6b13b68db --- /dev/null +++ b/src/SingleSite/dirmag2-op.f @@ -0,0 +1,573 @@ + subroutine dirmago2op(socsc,e,l,my,vr,bspr,bopr, + > dx,xnot,rs,ns,g,f,gp,iprpts) +c + implicit real*8(a-h,o-z) +! include '../param.h' +! include 'atom_param.h' +c +c *********************************************************** +c * integration of relativistic radial dirac equation * +c * in the presence of an internal field by adams method * +c * integrate outward! * +c * * +c * strange et al., j.phys.c.solid state phys.17,3355(1984) * +c * scaling of SOC and OP-term ala Hubert Ebert included * +c *********************************************************** +c + integer iprpts + + complex*16 e,p1,q1,p2,q2,pp1,qp1,pp2,qp2 + complex*16 p1n,q1n,k11,k12,k13,k14,m11,m12,m13,m14 + complex*16 p2n,q2n,k21,k22,k23,k24,m21,m22,m23,m24 + complex*16 p1sum,q1sum,p10,q10,p11,q11,pp1np1,qp1np1 + complex*16 p2sum,q2sum,p20,q20,p21,q21,pp2np1,qp2np1 + complex*16 g,gp,f +c + dimension vr(iprpts),bspr(iprpts),bopr(iprpts,2) + dimension ba11(iprpts),ba12(iprpts),ba22(iprpts) + dimension bb11(iprpts),bb22(iprpts) + dimension p1(iprpts),p2(iprpts),q1(iprpts),q2(iprpts) + dimension pp1(iprpts),pp2(iprpts),qp1(iprpts),qp2(iprpts) + dimension fk1(2),fk2(2),gk1(2),gk2(2) + dimension g(2,2,iprpts),gp(2,2),f(2,2,iprpts) + data nitmax/100/,test/1.0d10/,imode/0/ +c + if(iabs(my).eq.2*l+1) stop 'dirmag2: my=+/-(l+1/2)' + dkoef1=475.d0/502.d0 + dkoef2= 27.d0/502.d0 + xl = dfloat(l) + dx2=0.5d0*dx + c = 274.072d0 + cin = 1.0d 00/(c*c) +c +c calculate boundary conditions +c + if(vr(1).lt.-1.d-3)then + hoc=-vr(1)/c + else +c write(6,'(99d12.4)')(vr(i),i=1,5) + hoc=-vr(2)/c + vr(1)=vr(2) + endif + +c + xl=dfloat(l) + xkap=xl + xk1=socsc*(1.d0+xkap)-1.d0 + facl1=xl*(xl+1.d0)-xk1*(xk1+1.d0) + u1=(xk1+dsqrt(xk1*xk1-hoc*hoc+facl1))/hoc + xkap=-xl-1.d0 + xk2=socsc*(1.d0+xkap)-1.d0 + facl2=xl*(xl+1.d0)-xk2*(xk2+1.d0) + u2=(xk2+dsqrt(xk2*xk2-hoc*hoc+facl2))/hoc +c +c get combined effective fields +c + call brmat(l,my,ns,bspr,bopr,ba11,ba12,ba22,bb11,bb22,iprpts) +c + do ii=1,2 + if(ii.eq.2) go to 40 +c + p1(1) = 1.0d-20 + q1(1) = c*u1*1.0d-20 + p2(1) = (0.0d 00,0.0d 00) + q2(1) = (0.0d 00,0.0d 00) + go to 50 +c + 40 continue + p1(1) = (0.0d 00,0.0d 00) + q1(1) = (0.0d 00,0.0d 00) + p2(1) = 1.0d-20 + q2(1) = c*u2*1.0d-20 + 50 continue +c + r=dexp(xnot) + call dmag2op(pp1(1),qp1(1),pp2(1),qp2(1), + > p1(1),q1(1),p2(1),q2(1), + > xk1,xk2,facl1,facl2,cin,e,r, + > vr(1),ba11(1),ba12(1),ba22(1),bb11(1),bb22(1)) +c +c +c---> start runge-kutta procedure (points 2, ... , 6) +c + do n=1,5 +c + x=xnot+(n-1)*dx + rn=dexp(x) + vrn=vr(n) + ba11n=ba11(n) + ba12n=ba12(n) + ba22n=ba22(n) + bb11n=bb11(n) + bb22n=bb22(n) +c + rnp1=dexp(x+dx) + vrnp1=vr(n+1) + ba11np1=ba11(n+1) + ba12np1=ba12(n+1) + ba22np1=ba22(n+1) + bb11np1=bb11(n+1) + bb22np1=bb22(n+1) +c + rmid=dexp(x+dx2) + vrmid=0.5d0*(vrn+vrnp1) + ba11mid=0.5d0*(ba11n+ba11np1) + ba12mid=0.5d0*(ba12n+ba12np1) + ba22mid=0.5d0*(ba22n+ba22np1) + bb11mid=0.5d0*(bb11n+bb11np1) + bb22mid=0.5d0*(bb22n+bb22np1) +c + p1n=p1(n) + q1n=q1(n) + p2n=p2(n) + q2n=q2(n) + call dmag2op(k11,m11,k21,m21,p1n,q1n,p2n,q2n, + > xk1,xk2,facl1,facl2,cin,e,rn, + > vrn,ba11n,ba12n,ba22n,bb11n,bb22n) +c + call dmag2op(k12,m12,k22,m22, + > p1n+dx2*k11,q1n+dx2*m11,p2n+dx2*k21,q2n+dx2*m21, + > xk1,xk2,facl1,facl2,cin,e,rmid, + > vrmid,ba11mid,ba12mid,ba22mid,bb11mid,bb22mid) +c + call dmag2op(k13,m13,k23,m23, + > p1n+dx2*k12,q1n+dx2*m12,p2n+dx2*k22,q2n+dx2*m22, + > xk1,xk2,facl1,facl2,cin,e,rmid, + > vrmid,ba11mid,ba12mid,ba22mid,bb11mid,bb22mid) +c + call dmag2op(k14,m14,k24,m24, + > p1n+dx*k13,q1n+dx*m13,p2n+dx*k23,q2n+dx*m23, + > xk1,xk2,facl1,facl2,cin,e,rnp1, + > vrnp1,ba11np1,ba12np1,ba22np1,bb11np1,bb22np1) +c + p1(n+1)=p1n+dx*(k11+2.d0*k12+2.d0*k13+k14)/6.d0 + q1(n+1)=q1n+dx*(m11+2.d0*m12+2.d0*m13+m14)/6.d0 + p2(n+1)=p2n+dx*(k21+2.d0*k22+2.d0*k23+k24)/6.d0 + q2(n+1)=q2n+dx*(m21+2.d0*m22+2.d0*m23+m24)/6.d0 + call dmag2op(pp1(n+1),qp1(n+1),pp2(n+1),qp2(n+1), + > p1(n+1),q1(n+1),p2(n+1),q2(n+1), + > xk1,xk2,facl1,facl2,cin,e,rnp1, + > vrnp1,ba11np1,ba12np1,ba22np1,bb11np1,bb22np1) +c + end do +c +c---> begin adams procedure (points 7, 8, ... , ns) +c + do n=6,ns-1 +c + x=xnot+(n-1)*dx + r=dexp(x+dx) + vrc=vr(n+1) + ba11c=ba11(n+1) + ba12c=ba12(n+1) + ba22c=ba22(n+1) + bb11c=bb11(n+1) + bb22c=bb22(n+1) +c + p1sum=646.d0*pp1(n)-264.d0*pp1(n-1)+106.d0*pp1(n-2)- + > 19.d0*pp1(n-3) + q1sum=646.d0*qp1(n)-264.d0*qp1(n-1)+106.d0*qp1(n-2)- + > 19.d0*qp1(n-3) + p2sum=646.d0*pp2(n)-264.d0*pp2(n-1)+106.d0*pp2(n-2)- + > 19.d0*pp2(n-3) + q2sum=646.d0*qp2(n)-264.d0*qp2(n-1)+106.d0*qp2(n-2)- + > 19.d0*qp2(n-3) +c +c predict for point n+1 +c + p10=p1(n)+dx*(251.d0*pp1(n-4)-1274.d0*pp1(n-3)+ + > 2616.d0*pp1(n-2)-2774.d0*pp1(n-1)+1901.d0*pp1(n))/720.d0 + q10=q1(n)+dx*(251.d0*qp1(n-4)-1274.d0*qp1(n-3)+ + > 2616.d0*qp1(n-2)-2774.d0*qp1(n-1)+1901.d0*qp1(n))/720.d0 + p20=p2(n)+dx*(251.d0*pp2(n-4)-1274.d0*pp2(n-3)+ + > 2616.d0*pp2(n-2)-2774.d0*pp2(n-1)+1901.d0*pp2(n))/720.d0 + q20=q2(n)+dx*(251.d0*qp2(n-4)-1274.d0*qp2(n-3)+ + > 2616.d0*qp2(n-2)-2774.d0*qp2(n-1)+1901.d0*qp2(n))/720.d0 +c +c correct +c + if(imode.eq.1) then +c + do nit=1,nitmax +c + call dmag2op(pp1np1,qp1np1,pp2np1,qp2np1, + > p10,q10,p20,q20, + > xk1,xk2,facl1,facl2,cin,e,r, + > vrc,ba11c,ba12c,ba22c,bb11c,bb22c) + p11=p1(n)+dx*(251.d0*pp1np1+p1sum)/720.d0 + q11=q1(n)+dx*(251.d0*qp1np1+q1sum)/720.d0 + p21=p2(n)+dx*(251.d0*pp2np1+p2sum)/720.d0 + q21=q2(n)+dx*(251.d0*qp2np1+q2sum)/720.d0 +c +c compare predictor with corrector +c + if(test*cdabs(p11-p10).gt.cdabs(p10)) goto 15 + if(test*cdabs(q11-q10).gt.cdabs(q10)) goto 15 + if(test*cdabs(p21-p20).gt.cdabs(p20)) goto 15 + if(test*cdabs(q21-q20).gt.cdabs(q20)) goto 15 + goto 10 +c + 15 p10=p11 + q10=q11 + p20=p21 + q20=q21 + end do + write(6,*) n+1,r,nit,' not converged' +c + else +c + call dmag2op(pp1np1,qp1np1,pp2np1,qp2np1, + > p10,q10,p20,q20, + > xk1,xk2,facl1,facl2,cin,e,r, + > vrc,ba11c,ba12c,ba22c,bb11c,bb22c) + p11=p1(n)+dx*(251.d0*pp1np1+p1sum)/720.d0 + q11=q1(n)+dx*(251.d0*qp1np1+q1sum)/720.d0 + p21=p2(n)+dx*(251.d0*pp2np1+p2sum)/720.d0 + q21=q2(n)+dx*(251.d0*qp2np1+q2sum)/720.d0 +c + q11=dkoef1*q11+dkoef2*q10 + p11=dkoef1*p11+dkoef2*p10 + q21=dkoef1*q21+dkoef2*q20 + p21=dkoef1*p21+dkoef2*p20 +c + end if +c + 10 q1(n+1)=q11 + p1(n+1)=p11 + q2(n+1)=q21 + p2(n+1)=p21 + call dmag2op(pp1(n+1),qp1(n+1),pp2(n+1),qp2(n+1), + > p1(n+1),q1(n+1),p2(n+1),q2(n+1), + > xk1,xk2,facl1,facl2,cin,e,r, + > vrc,ba11c,ba12c,ba22c,bb11c,bb22c) +c + end do +c +c store radial amplitudes times radius +c + do n=1,ns + g(1,ii,n)=p1(n) + g(2,ii,n)=p2(n) + f(1,ii,n)=q1(n)/c + f(2,ii,n)=q2(n)/c + end do + gp(1,ii)=(pp1(ns)-p1(ns))/rs + gp(2,ii)=(pp2(ns)-p2(ns))/rs +c + end do +c + return + end + subroutine dirmagi2op(socsc,e,l,my,vr,bspr,bopr, + > dx,xnot,rs,ns,g,f,gp,iprpts) +c + implicit real*8(a-h,o-z) +! include '../param.h' +! include 'atom_param.h' +c +c *********************************************************** +c * integration of relativistic radial dirac equation * +c * in the presence of an internal field by adams method * +c * integrate inward! * +c * * +c * strange et al., j.phys.c.solid state phys.17,3355(1984) * +c * scaling of SOC and OP-term ala Hubert Ebert included * +c *********************************************************** +c + integer iprpts + + complex*16 e,psq,pe + complex*16 p1,q1,p2,q2,pp1,qp1,pp2,qp2 + complex*16 p1n,q1n,k11,k12,k13,k14,m11,m12,m13,m14 + complex*16 p2n,q2n,k21,k22,k23,k24,m21,m22,m23,m24 + complex*16 p1sum,q1sum,p10,q10,p11,q11,pp1nm1,qp1nm1 + complex*16 p2sum,q2sum,p20,q20,p21,q21,pp2nm1,qp2nm1 + complex*16 g,gp,f + complex*16 fb(0:5),fn(0:5),fh(0:5) +c + dimension vr(iprpts),bspr(iprpts),bopr(iprpts,2) + dimension xlag(iprpts),vrlag(iprpts) + dimension bsprlag(iprpts),boprlag(iprpts,2) + dimension ba11(iprpts),ba12(iprpts) + dimension ba22(iprpts),bb11(iprpts),bb22(iprpts) + dimension p1(iprpts),p2(iprpts),q1(iprpts),q2(iprpts) + dimension pp1(iprpts),pp2(iprpts),qp1(iprpts),qp2(iprpts) + dimension fk1(2),fk2(2),gk1(2),gk2(2) + dimension g(2,2,iprpts),gp(2,2),f(2,2,iprpts) + data nitmax/100/,test/1.0d10/,imode/0/,nout/5/ +c + if(iabs(my).eq.2*l+1) stop 'dirmag2: my=+/-(l+1/2)' + dkoef1=475.d0/502.d0 + dkoef2= 27.d0/502.d0 +c + lb1=l-1 + lb2=l+1 + sk1=l-lb1 + sk2=l-lb2 +c + xl = dfloat(l) + xkap=xl + xk1=socsc*(1.d0+xkap)-1.d0 + facl1=xl*(xl+1.d0)-xk1*(xk1+1.d0) + xkap=-xl-1.d0 + xk2=socsc*(1.d0+xkap)-1.d0 + facl2=xl*(xl+1.d0)-xk2*(xk2+1.d0) +c + dx2=0.5d0*dx + c = 274.072d0 + cin = 1.0d 00/(c*c) + ilag=3 + xs=dlog(rs) + do i=1,ns + xlag(i)=xs+(i-ns)*dx + vrlag(i)=vr(i) + bsprlag(i)=bspr(i) + boprlag(i,1)=bopr(i,1) + boprlag(i,2)=bopr(i,2) + end do + nlag=ns+1 + vrlag(nlag)=0.d0 + bsprlag(nlag)=0.d0 + boprlag(nlag,1)=0.d0 + boprlag(nlag,2)=0.d0 + xlag(nlag)=xs+nout*dx +c +c get combined effective fields +c + call brmat(l,my,nlag,bsprlag,boprlag,ba11,ba12,ba22,bb11,bb22, + > iprpts) +c + psq=e+e*e*cin + pe=cdsqrt(psq) +c + do ii=1,2 +c +c---> set up the starting values outside the muffin tin +c corresponding to the boundary condition +c + x=xs+nout*dx + r=dexp(x) + call csbf(l+1,pe,r,fb,fn,fh) + n=ns+nout +c + if(ii.eq.2) go to 40 + p1(n) = r*fb(l) + q1(n) = ( (xk1-xl)*fb(l) + sk1*pe*r*fb(lb1) ) * e/psq + p2(n) = 0.d0 + q2(n) = 0.d0 + call dmag2op(pp1(n),qp1(n),pp2(n),qp2(n), + > p1(n),q1(n),p2(n),q2(n), + > xk1,xk2,facl1,facl2,cin,e,r, + > vrlag(nlag),ba11(nlag),ba12(nlag),ba22(nlag), + > bb11(nlag),bb22(nlag)) + go to 50 + 40 continue + p1(n) = 0.d0 + q1(n) = 0.d0 + p2(n) = r*fb(l) + q2(n) = ( (xk2+xl+1.d0)*fb(l) + sk2*pe*r*fb(lb2) ) * e/psq + call dmag2op(pp1(n),qp1(n),pp2(n),qp2(n), + > p1(n),q1(n),p2(n),q2(n), + > xk1,xk2,facl1,facl2,cin,e,r, + > vrlag(nlag),ba11(nlag),ba12(nlag),ba22(nlag), + > bb11(nlag),bb22(nlag)) + 50 continue +c +c write(6,*) n +c write(6,'(8d15.7)') p1(n),q1(n),p2(n),q2(n) +c write(6,'(8d15.7)') pp1(n),qp1(n),pp2(n),qp2(n) +c write(6,*) +c +c---> start runge-kutta procedure (points ns+nout-1, ... , ns+nout-5) +c + do n=ns+nout,ns+nout-4,-1 +c + x=xs+(n-ns)*dx + rn=dexp(x) + vrn=ylag(x,xlag,vrlag,0,ilag,nlag,iex) + ba11n=ylag(x,xlag,ba11,0,ilag,nlag,iex) + ba12n=ylag(x,xlag,ba12,0,ilag,nlag,iex) + ba22n=ylag(x,xlag,ba22,0,ilag,nlag,iex) + bb11n=ylag(x,xlag,bb11,0,ilag,nlag,iex) + bb22n=ylag(x,xlag,bb22,0,ilag,nlag,iex) +c + rmid=dexp(x-dx2) + vrmid=ylag(x-dx2,xlag,vrlag,0,ilag,nlag,iex) + ba11mid=ylag(x-dx2,xlag,ba11,0,ilag,nlag,iex) + ba12mid=ylag(x-dx2,xlag,ba12,0,ilag,nlag,iex) + ba22mid=ylag(x-dx2,xlag,ba22,0,ilag,nlag,iex) + bb11mid=ylag(x-dx2,xlag,bb11,0,ilag,nlag,iex) + bb22mid=ylag(x-dx2,xlag,bb22,0,ilag,nlag,iex) +c + rnm1=dexp(x-dx) + vrnm1=ylag(x-dx,xlag,vrlag,0,ilag,nlag,iex) + ba11nm1=ylag(x-dx,xlag,ba11,0,ilag,nlag,iex) + ba12nm1=ylag(x-dx,xlag,ba12,0,ilag,nlag,iex) + ba22nm1=ylag(x-dx,xlag,ba22,0,ilag,nlag,iex) + bb11nm1=ylag(x-dx,xlag,bb11,0,ilag,nlag,iex) + bb22nm1=ylag(x-dx,xlag,bb22,0,ilag,nlag,iex) +c + p1n=p1(n) + q1n=q1(n) + p2n=p2(n) + q2n=q2(n) + call dmag2op(k11,m11,k21,m21,p1n,q1n,p2n,q2n, + > xk1,xk2,facl1,facl2,cin,e,rn, + > vrn,ba11n,ba12n,ba22n,bb11n,bb22n) +c + call dmag2op(k12,m12,k22,m22, + > p1n-dx2*k11,q1n-dx2*m11,p2n-dx2*k21,q2n-dx2*m21, + > xk1,xk2,facl1,facl2,cin,e,rmid, + > vrmid,ba11mid,ba12mid,ba22mid,bb11mid,bb22mid) +c + call dmag2op(k13,m13,k23,m23, + > p1n-dx2*k12,q1n-dx2*m12,p2n-dx2*k22,q2n-dx2*m22, + > xk1,xk2,facl1,facl2,cin,e,rmid, + > vrmid,ba11mid,ba12mid,ba22mid,bb11mid,bb22mid) +c + call dmag2op(k14,m14,k24,m24, + > p1n-dx*k13,q1n-dx*m13,p2n-dx*k23,q2n-dx*m23, + > xk1,xk2,facl1,facl2,cin,e,rnm1, + > vrnm1,ba11nm1,ba12nm1,ba22nm1,bb11nm1,bb22nm1) +c + p1(n-1)=p1n-dx*(k11+2.d0*k12+2.d0*k13+k14)/6.d0 + q1(n-1)=q1n-dx*(m11+2.d0*m12+2.d0*m13+m14)/6.d0 + p2(n-1)=p2n-dx*(k21+2.d0*k22+2.d0*k23+k24)/6.d0 + q2(n-1)=q2n-dx*(m21+2.d0*m22+2.d0*m23+m24)/6.d0 + call dmag2op(pp1(n-1),qp1(n-1),pp2(n-1),qp2(n-1), + > p1(n-1),q1(n-1),p2(n-1),q2(n-1), + > xk1,xk2,facl1,facl2,cin,e,rnm1, + > vrnm1,ba11nm1,ba12nm1,ba22nm1,bb11nm1,bb22nm1) +c + end do +c +c +c---> begin adams procedure (points ns+nout-6, ... , 1) +c + do n=ns+nout-5,2,-1 +c + x=xs+(n-ns)*dx + r=dexp(x-dx) + vrc=vr(n-1) + ba11c=ba11(n-1) + ba12c=ba12(n-1) + ba22c=ba22(n-1) + bb11c=bb11(n-1) + bb22c=bb22(n-1) +c + p1sum=646.d0*pp1(n)-264.d0*pp1(n+1)+106.d0*pp1(n+2)- + > 19.d0*pp1(n+3) + q1sum=646.d0*qp1(n)-264.d0*qp1(n+1)+106.d0*qp1(n+2)- + > 19.d0*qp1(n+3) + p2sum=646.d0*pp2(n)-264.d0*pp2(n+1)+106.d0*pp2(n+2)- + > 19.d0*pp2(n+3) + q2sum=646.d0*qp2(n)-264.d0*qp2(n+1)+106.d0*qp2(n+2)- + > 19.d0*qp2(n+3) +c +c predict for point n-1 +c + p10=p1(n)-dx*(251.d0*pp1(n+4)-1274.d0*pp1(n+3)+ + > 2616.d0*pp1(n+2)-2774.d0*pp1(n+1)+1901.d0*pp1(n))/720.d0 + q10=q1(n)-dx*(251.d0*qp1(n+4)-1274.d0*qp1(n+3)+ + > 2616.d0*qp1(n+2)-2774.d0*qp1(n+1)+1901.d0*qp1(n))/720.d0 + p20=p2(n)-dx*(251.d0*pp2(n+4)-1274.d0*pp2(n+3)+ + > 2616.d0*pp2(n+2)-2774.d0*pp2(n+1)+1901.d0*pp2(n))/720.d0 + q20=q2(n)-dx*(251.d0*qp2(n+4)-1274.d0*qp2(n+3)+ + > 2616.d0*qp2(n+2)-2774.d0*qp2(n+1)+1901.d0*qp2(n))/720.d0 +c +c correct +c + if(imode.eq.1) then +c + do nit=1,nitmax +c + call dmag2op(pp1nm1,qp1nm1,pp2nm1,qp2nm1, + > p10,q10,p20,q20, + > xk1,xk2,facl1,facl2,cin,e,r, + > vrc,ba11c,ba12c,ba22c,bb11c,bb22c) + p11=p1(n)-dx*(251.d0*pp1nm1+p1sum)/720.d0 + q11=q1(n)-dx*(251.d0*qp1nm1+q1sum)/720.d0 + p21=p2(n)-dx*(251.d0*pp2nm1+p2sum)/720.d0 + q21=q2(n)-dx*(251.d0*qp2nm1+q2sum)/720.d0 +c +c compare predictor with corrector +c + if(test*cdabs(p11-p10).gt.cdabs(p10)) goto 15 + if(test*cdabs(q11-q10).gt.cdabs(q10)) goto 15 + if(test*cdabs(p21-p20).gt.cdabs(p20)) goto 15 + if(test*cdabs(q21-q20).gt.cdabs(q20)) goto 15 + goto 10 +c + 15 p10=p11 + q10=q11 + p20=p21 + q20=q21 +c + end do + write(6,*) n-1,r,nit,' not converged' +c + else +c + call dmag2op(pp1nm1,qp1nm1,pp2nm1,qp2nm1, + > p10,q10,p20,q20, + > xk1,xk2,facl1,facl2,cin,e,r, + > vrc,ba11c,ba12c,ba22c,bb11c,bb22c) + p11=p1(n)-dx*(251.d0*pp1nm1+p1sum)/720.d0 + q11=q1(n)-dx*(251.d0*qp1nm1+q1sum)/720.d0 + p21=p2(n)-dx*(251.d0*pp2nm1+p2sum)/720.d0 + q21=q2(n)-dx*(251.d0*qp2nm1+q2sum)/720.d0 +c + q11=dkoef1*q11+dkoef2*q10 + p11=dkoef1*p11+dkoef2*p10 + q21=dkoef1*q21+dkoef2*q20 + p21=dkoef1*p21+dkoef2*p20 +c + end if +c + 10 q1(n-1)=q11 + p1(n-1)=p11 + q2(n-1)=q21 + p2(n-1)=p21 + call dmag2op(pp1(n-1),qp1(n-1),pp2(n-1),qp2(n-1), + > p1(n-1),q1(n-1),p2(n-1),q2(n-1), + > xk1,xk2,facl1,facl2,cin,e,r, + > vrc,ba11c,ba12c,ba22c,bb11c,bb22c) +c + end do +c +c store radial amplitudes times radius +c + do n=1,ns+nout + g(1,ii,n)=p1(n) + g(2,ii,n)=p2(n) + f(1,ii,n)=q1(n)/c + f(2,ii,n)=q2(n)/c + end do + gp(1,ii)=(pp1(ns)-p1(ns))/rs + gp(2,ii)=(pp2(ns)-p2(ns))/rs +c + end do +c + return + end + subroutine dmag2op(pp1,qp1,pp2,qp2,p1,q1,p2,q2, + > xk1,xk2,facl1,facl2,cin,e,r, + > vr,ba11,ba12,ba22,bb11,bb22) +c + implicit real*8 (a-h,o-z) + complex*16 pp1,qp1,pp2,qp2,p1,q1,p2,q2,e,tr,sr1,sr2 +c + tr=r*e-vr + sr1=cin*tr+r+cin*bb11 + sr2=cin*tr+r+cin*bb22 +c + qp1= xk1*q1 - tr*p1 + ba11*p1 + ba12*p2 + facl1*p1/sr1 +c + pp1=-xk1*p1 + sr1*q1 +c + qp2= xk2*q2 - tr*p2 + ba22*p2 + ba12*p1 + facl2*p2/sr2 +c + pp2=-xk2*p2 + sr2*q2 +c + return + end diff --git a/src/SingleSite/gjinv.f b/src/SingleSite/gjinv.f new file mode 100755 index 000000000..378e0d3f2 --- /dev/null +++ b/src/SingleSite/gjinv.f @@ -0,0 +1,58 @@ + subroutine gjinv(a,n,nmax,detl) +c===================== +c + implicit real*8 (a-h,o-z) + complex*16 a(nmax,n),q,detl,cpi + integer ind(10000) + data cpi/(0.d0,3.1415926535897932d0)/ +c +c gauss-jordan inversion with partial pivoting +c + detl=(0.d0,0.d0) + do 1 i=1,n + k=i + amaxi=cdabs(a(i,i)) +c + do 2 j=i+1,n + atest=cdabs(a(i,j)) + if(atest.le.amaxi) goto 2 + k=j + amaxi=atest + 2 continue +c + ind(i)=k + if(k.eq.i) goto 4 + detl=detl-cpi + do 3 j=1,n + q=a(j,i) + a(j,i)=a(j,k) + 3 a(j,k)=q +c + 4 q=a(i,i) + detl=detl+cdlog(q) +c + q=(1.d0,0.d0)/q + a(i,i)=(1.d0,0.d0) + do 5 j=1,n + 5 a(j,i)=a(j,i)*q +c + do 6 j=1,n + if(j.eq.i) goto 6 + q=a(i,j) + a(i,j)=(0.d0,0.d0) + do 7 k=1,n + 7 a(k,j)=a(k,j)-a(k,i)*q + 6 continue + 1 continue +c + do 8 i=n,1,-1 + j=ind(i) + if(i.eq.j) goto 8 + do 9 k=1,n + q=a(i,k) + a(i,k)=a(j,k) + 9 a(j,k)=q + 8 continue +c + return + end diff --git a/src/SingleSite/manifest b/src/SingleSite/manifest new file mode 100755 index 000000000..1592b1739 --- /dev/null +++ b/src/SingleSite/manifest @@ -0,0 +1,11 @@ +scalar_m.f +semrel_c.f +single_scatterer_nonrel.f +single_scatterer_rel.f +spzwafu.f +clebsch.f +dirmag1-op.f +dirmag2-op.f +brmat.f +single_site_tmat.f +replms.f diff --git a/src/SingleSite/matops.f b/src/SingleSite/matops.f new file mode 100755 index 000000000..b641c76d0 --- /dev/null +++ b/src/SingleSite/matops.f @@ -0,0 +1,324 @@ + subroutine repl(x,y,n,ndim) +c==================== +c +c x=y +c + complex*16 x(ndim,ndim),y(ndim,ndim) +c + do 1 i=1,n + do 1 j=1,n + 1 x(i,j)=y(i,j) + return + end + subroutine replt(x,y,n,ndim) +c==================== +c +c x=y^T +c + complex*16 x(ndim,ndim),y(ndim,ndim) +c + do 1 i=1,n + do 1 j=1,n + 1 x(i,j)=y(j,i) + return + end + subroutine replrel(x,y,n,ndim) +c======================= +c +c x(k,k')=(-)**(l-l')* y(k',k)* +c + complex*16 x(ndim,ndim),y(ndim,ndim) + dimension ldex(50) +c + data ldex/0,0, + * 1,1,1,1,1,1, + * 2,2,2,2,2,2,2,2,2,2, + * 3,3,3,3,3,3,3,3,3,3,3,3,3,3, + * 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4/ +c + do 1 i=1,n + li=ldex(i) + do 1 j=1,n + lj=ldex(j) + x(i,j)=dconjg(y(j,i)) + if(mod(iabs(li-lj),2).eq.1) x(i,j)=-x(i,j) + 1 continue + return + end + subroutine compmat(x,y,n,ndim,tol,ic) +c======================= +c +c check whether x=y +c + implicit real*8 (a-h,o-z) + complex*16 x(ndim,ndim),y(ndim,ndim),xx,dx + data tol0/1.0d-12/ +c + if(tol.le.0.d0) tol=tol0 + ic=0 + xnorm=0.d0 + dxnorm=0.d0 + do i=1,n + do j=1,n + xx=x(i,j) + dx=x(i,j)-y(i,j) + xxre=dreal(xx) + xxim=dimag(xx) + dxre=dreal(dx) + dxim=dimag(dx) + xnorm=xnorm+xxre*xxre+xxim*xxim + dxnorm=dxnorm+dxre*dxre+dxim*dxim + end do + end do + xnorm=dsqrt(xnorm) + dxnorm=dsqrt(dxnorm) + if(dxnorm.lt.tol*xnorm) ic=1 + return + end + subroutine addmat(x,y,n,ndim) +c==================== +c +c x=x+y +c + complex*16 x(ndim,ndim),y(ndim,ndim) +c + do 1 i=1,n + do 1 j=1,n + 1 x(i,j)=x(i,j)+y(i,j) + return + end + subroutine addmat1(a,b,c,n,ndim) +c==================== +c +c c=a+b +c + complex*16 a(ndim,ndim),b(ndim,ndim),c(ndim,ndim) +c + do 1 i=1,n + do 1 j=1,n + 1 c(i,j)=a(i,j)+b(i,j) + return + end + subroutine submat(x,y,n,ndim) +c==================== +c +c x=x-y +c + complex*16 x(ndim,ndim),y(ndim,ndim) +c + do 1 i=1,n + do 1 j=1,n + 1 x(i,j)=x(i,j)-y(i,j) + return + end + subroutine submat1(a,b,c,n,ndim) +c==================== +c +c c=a-b +c + complex*16 a(ndim,ndim),b(ndim,ndim),c(ndim,ndim) +c + do 1 i=1,n + do 1 j=1,n + 1 c(i,j)=a(i,j)-b(i,j) + return + end + subroutine symmat(x,n,ndim) +c====================== +c Symmetrize matrix x: +c x -> 1/2*(x+xT) +c + complex*16 x(ndim,ndim) +c + do 1 i=1,n + do 1 j=i+1,n + x(i,j)=0.5d0*(x(i,j)+x(j,i)) + 1 x(j,i)=x(i,j) + return + end + subroutine doubmt(amat,bmat,ndim,ndimp) +c====================== +c +c amat=amat*bmat +c + implicit real*8 (a-h,o-z) +c + complex*16 amat(ndimp,ndimp),bmat(ndimp,ndimp) + complex*16 help(100),sum +c + do i=1,ndim + do k=1,ndim + sum=dcmplx(0.d0,0.d0) + do j=1,ndim + sum=sum+bmat(j,k)*amat(i,j) + end do + help(k)=sum + end do + do k=1,ndim + amat(i,k)=help(k) + end do + end do +c + return + end + subroutine doubmt1(amat,bmat,cmat,ndim,ndimp) +c====================== +c +c cmat=amat*bmat +c + implicit real*8 (a-h,o-z) +c + complex*16 amat(ndimp,ndimp),bmat(ndimp,ndimp),cmat(ndimp,ndimp) + complex*16 sum +c + do i=1,ndim + do k=1,ndim + sum=dcmplx(0.d0,0.d0) + do j=1,ndim + sum=sum+bmat(j,k)*amat(i,j) + end do + cmat(i,k)=sum + end do + end do +c + return + end + function trdbmt(amat,bmat,ndim,ndimp) +c=============================== +c +c trdbmt=Tr(amat*bmat) +c + integer i,j,ndim,ndimp + complex*16 trdbmt,amat(ndimp,ndimp),bmat(ndimp,ndimp) +c + trdbmt=dcmplx(0.d0,0.d0) + do i=1,ndim + do j=1,ndim + trdbmt=trdbmt+bmat(j,i)*amat(i,j) + end do + end do +c + return + end + subroutine tripmt(u,b,ust,ndi1,ndi2,ndim) +c ===================== +c +c vectorized routine for triple product of rectangular matrices +c + implicit real*8 (a-h,o-z) + parameter(nndim=100) + complex*16 u,ust,b,c,x + dimension u(ndim,ndim),ust(ndim,ndim),b(ndim,ndim) + dimension c(nndim,nndim) +c +c left product +c + do 20 i=1,ndi1 + do 20 j=1,ndi2 +c + x= (0.0d0,0.0d0) +c + do 10 k=1,ndi1 + 10 x = x + b(k,j)*u(i,k) +c + c(i,j)=x + 20 continue +c +c right product +c + do 40 i=1,ndi1 + do 40 j=1,ndi2 +c + x = (0.d0,0.0d0) +c + do 30 k=1,ndi2 + 30 x = x + ust(k,j)*c(i,k) +c + b(i,j)=x + 40 continue +c + return + end + subroutine tripmt1(u,b,ust,b1,ndi1,ndi2,ndim) +c ===================== +c +c vectorized routine for triple product of rectangular matrices +c + implicit real*8 (a-h,o-z) + parameter(nndim=100) + complex*16 u,ust,b,b1,c,x + dimension u(ndim,ndim),ust(ndim,ndim) + dimension b(ndim,ndim),b1(ndim,ndim) + dimension c(nndim,nndim) +c +c left product +c + do 20 i=1,ndi1 + do 20 j=1,ndi2 +c + x= (0.0d0,0.0d0) +c + do 10 k=1,ndi1 + 10 x = x + b(k,j)*u(i,k) +c + c(i,j)=x + 20 continue +c +c right product +c + do 40 i=1,ndi1 + do 40 j=1,ndi2 +c + x = (0.d0,0.0d0) +c + do 30 k=1,ndi2 + 30 x = x + ust(k,j)*c(i,k) +c + b1(i,j)=x + 40 continue +c + return + end + subroutine outmat(mat,n,m,ndim,nper) +c===================== + implicit real*8 (a-h,o-z) + complex*16 mat(ndim,ndim) + complex*16 mat1(50,50) +c + do i=1,n + do j=1,m + r1=dreal(mat(i,j)) + r2=dimag(mat(i,j)) + if(dabs(r1).lt.1.d-15) r1=0.d0 + if(dabs(r2).lt.1.d-15) r2=0.d0 + mat1(i,j)=dcmplx(r1,r2) + end do + end do +c + write(nper,*) ' real part' + do 1 i=1,n + 1 write(nper,10) (dreal(mat1(i,j)),j=1,m) + write(nper,*) ' imaginary part' + do 2 i=1,n + 2 write(nper,10) (dimag(mat1(i,j)),j=1,m) +c + 10 format(9(1pd14.6)) +c + return + end + subroutine outmat1(mat,n,m,ndim,tol,nper) +c======================= + implicit real*8 (a-h,o-z) + complex*16 mat(ndim,ndim) +c + do j=1,m + do 1 i=1,n + r1=dreal(mat(i,j)) + r2=dimag(mat(i,j)) + if(dabs(r1).lt.tol.and.dabs(r2).lt.tol) goto 1 + write(nper,'(2i4,5x,1pd20.10,1pd20.10)') i,j,r1,r2 + 1 continue + end do +c + return + end diff --git a/src/SingleSite/readSingleAtomData.hpp b/src/SingleSite/readSingleAtomData.hpp new file mode 100644 index 000000000..e54aad2a8 --- /dev/null +++ b/src/SingleSite/readSingleAtomData.hpp @@ -0,0 +1,43 @@ +#ifndef READSINGLEATOMDATA_H +#define READSINGLEATOMDATA_H + +#include +#include "AtomData.hpp" + +int readSingleAtomData_hdf5(hid_t loc_id, AtomData &atom); + +int readSingleAtomData_bigcell(const char *fname, AtomData &atom); + +/* + subroutine readSingleAtomData_bigcell(fname_c,fname_l, + > header,jmt,jws,xstart, + > rmt,alat,efermi,vdif,ztotss,zcorss, + > nspin,numc,xvalws, + > vr,rhotot,v_dim, + > ec,nc,lc,kc,c_dim) + implicit none + + byte fname_c(128) + integer fname_l,i + integer jmt,jws,nspin,numc,v_dim,c_dim + integer nc(c_dim,*),lc(c_dim,*),kc(c_dim,*) + real*8 xvalws(2) + real*8 xstart,rmt,alat,efermi,vdif,ztotss,zcorss + real*8 vr(v_dim,*),rhotot(v_dim,*) + real*8 ec(c_dim,*) + character*80 header,jtitle + character*127 fname + integer funit +*/ + +extern "C" +{ +void f_readsingleatomdata_bigcell_(const char *fname_c,int *fname_l, + char *header,int *jmt,int *jws, double *xstart, + double *rmt,double *alat,double *efermi, + double *vdif,double *ztotss,double *zcorss, + int *nspin,int *numc,double *xvalws, + double *vr,double *rhotot,double *corden,int *v_dim, + double *ec,int *nc,int *lc,int *kc,int *c_dim,int); +}; +#endif diff --git a/src/SingleSite/readSingleAtomData_bigcell.cpp b/src/SingleSite/readSingleAtomData_bigcell.cpp new file mode 100644 index 000000000..2386ee5e9 --- /dev/null +++ b/src/SingleSite/readSingleAtomData_bigcell.cpp @@ -0,0 +1,21 @@ +#include +#include "AtomData.hpp" +#include "readSingleAtomData.hpp" + +int readSingleAtomData_bigcell(const char *fname, AtomData &atom) +{ + int fname_l,v_dim,c_dim; + + fname_l=strlen(fname); + v_dim=atom.vr.l_dim(); + c_dim=atom.ec.l_dim(); + + f_readsingleatomdata_bigcell_(fname,&fname_l, + atom.header,&atom.jmt,&atom.jws,&atom.xstart, + &atom.rmt,&atom.alat,&atom.efermi,&atom.vdif,&atom.ztotss,&atom.zcorss, + &atom.nspin,&atom.numc,atom.xvalws, + &atom.vr(0,0),&atom.rhotot(0,0),&atom.corden(0,0), &v_dim, + &atom.ec(0,0),&atom.nc(0,0),&atom.lc(0,0),&atom.kc(0,0),&c_dim,80); + atom.evec[0]=atom.evec[1]=0.0; atom.evec[2]=1.0; + return -1; +} diff --git a/src/SingleSite/readSingleAtomData_hdf5.cpp b/src/SingleSite/readSingleAtomData_hdf5.cpp new file mode 100644 index 000000000..4161f21eb --- /dev/null +++ b/src/SingleSite/readSingleAtomData_hdf5.cpp @@ -0,0 +1,86 @@ +#define H5_USE_16_API +#include +#include "AtomData.hpp" +#include "Main/HDF5io.hpp" + +//-------------------------------------------------------------------------- +int readSingleAtomData_hdf5(hid_t loc_id, AtomData &atom) +{ + +// include 'atom_param.h' + + hid_t dti,dtf,dtc; + + int present_atom; + int num_read; + char gname[40]; + + dti = H5Tcopy(H5T_NATIVE_INT); + dtf = H5Tcopy(H5T_NATIVE_DOUBLE); + dtc = H5Tcopy(H5T_NATIVE_CHAR); + + read_scalar(loc_id,"PresentAtom",present_atom,dti); + read_scalar(loc_id,"jmt",atom.jmt,dti); + read_scalar(loc_id,"jws",atom.jws,dti); + read_scalar(loc_id,"Nspin",atom.nspin,dti); + read_scalar(loc_id,"NumC",atom.numc,dti); + read_scalar(loc_id,"alat",atom.alat,dtf); + read_scalar(loc_id,"Efermi",atom.efermi,dtf); + read_scalar(loc_id,"Vdif",atom.vdif,dtf); + read_scalar(loc_id,"Ztot",atom.ztotss,dtf); + read_scalar(loc_id,"Zcore",atom.zcorss,dtf); + read_scalar(loc_id,"Xstart",atom.xstart,dtf); + read_scalar(loc_id,"rmt",atom.rmt,dtf); + + int npts=std::max(atom.jmt,atom.jws); + if(npts>atom.vr.n_row()) + { + printf("No. of radial grid point in potential file (jmt, jws) is larger then lsms.global.iprpts!\n"); + exit(1); + // atom.resizePotential(npts); + } + // if(atom.numc(loc_id,"xvalws",atom.xvalws,atom.nspin,dtf); + if(atom.nspin!=num_read) printf("WARNING in single_pot_read, xvalws\n"); + + for(int ns=0; ns(loc_id,gname,&atom.vr(0,ns),atom.jmt,dtf); + if(atom.jmt!=num_read) printf("WARNING in single_pot_read, vr\n"); + snprintf(gname,40,"rhotot%1.1d", ns+1); + num_read=read_vector(loc_id,gname,&atom.rhotot(0,ns),atom.jws,dtf); + if(atom.jws!=num_read) printf("WARNING in single_pot_read, rhotot\n"); + +// read core states if numc>0 + if(atom.numc>0) + { + snprintf(gname,40,"ec%1.1d", ns+1); + num_read=read_vector(loc_id,gname,&atom.ec(0,ns),atom.numc,dtf); + if(atom.numc!=num_read) printf("WARNING in single_pot_read, ec\n"); + snprintf(gname,40,"nc%1.1d", ns+1); + num_read=read_vector(loc_id,gname,&atom.nc(0,ns),atom.numc,dti); + if(atom.numc!=num_read) printf("WARNING in single_pot_read, nc\n"); + snprintf(gname,40,"lc%1.1d", ns+1); + num_read=read_vector(loc_id,gname,&atom.lc(0,ns),atom.numc,dti); + if(atom.numc!=num_read) printf("WARNING in single_pot_read, lc\n"); + snprintf(gname,40,"kc%1.1d", ns+1); + num_read=read_vector(loc_id,gname,&atom.kc(0,ns),atom.numc,dti); + if(atom.numc!=num_read) printf("WARNING in single_pot_read, kc\n"); + } + } + num_read=read_vector(loc_id,"evec",atom.evec,3,dtf); + if(3!=num_read) printf("WARNING in single_pot_read, evec\n"); + num_read=read_vector(loc_id,"Header",atom.header,80,dtc); + if(80!=num_read) printf("WARNING in single_pot_read, header\n"); + + H5Tclose(dti); + H5Tclose(dtf); + H5Tclose(dtc); + + return present_atom; +} + + diff --git a/src/SingleSite/replms.f b/src/SingleSite/replms.f new file mode 100755 index 000000000..f63720607 --- /dev/null +++ b/src/SingleSite/replms.f @@ -0,0 +1,40 @@ + subroutine replms(alms,akmy,lmax,kmymax) +c====================== +c +c find diagonal elements of a matrix in (l,m,s) representation +c to be given in (kappa,my) representation +c + implicit real*8 (a-h,o-z) +c +! include '../param.h' + include '../cgc.h' +c + complex*16 alms(kmymax),akmy(kmymax,kmymax) +! dimension u1(50),ind1(50) +! dimension u2(50),ind2(50) +! common/cgc/u1,u2,ind1,ind2 +c + lmmax=(lmax+1)*(lmax+1) + kmymax=2*lmmax +c + lm=0 + do l=0,lmax + do m=-l,l + lm=lm+1 + lmm=lm + lmp=lm+lmmax + alms(lmm)=(0.d0,0.d0) + alms(lmp)=(0.d0,0.d0) + do kmy=1,kmymax + do kmyp=1,kmymax + if(ind1(kmy).eq.lm.and.ind1(kmyp).eq.lm) + > alms(lmm)=alms(lmm)+u1(kmy)*akmy(kmy,kmyp)*u1(kmyp) + if(ind2(kmy).eq.lm.and.ind2(kmyp).eq.lm) + > alms(lmp)=alms(lmp)+u2(kmy)*akmy(kmy,kmyp)*u2(kmyp) + end do + end do + end do + end do +c + return + end diff --git a/src/SingleSite/scalar_m.f b/src/SingleSite/scalar_m.f new file mode 100755 index 000000000..dfa19412e --- /dev/null +++ b/src/SingleSite/scalar_m.f @@ -0,0 +1,572 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine scalarr(nrelv,clight,l, + > bjl,bnl,bj,bn,djl,dnl,g,f,gpl,fpl, + > tandel,matom, + > energy,prel,pnrel, + > rv,r,h,jmt,iend,icmax, + > r_sph,iprint,istop) +c ================================================================ +c + implicit complex*16 (a-h,o-z) +c + character istop*32 + character sname*20 +c + integer nrelv,i_out + integer l + integer jmt + integer iend + integer iprint +c + real*8 r(iend),r_sph,rv_sph,drv_sph + real*8 rv(iend) + real*8 zed + real*8 h,h24 + real*8 rvr,drvr + real*8 v0,v1 + real*8 cinv + real*8 clight + real*8 c2inv + real*8 power +c real*8 ylag + real*8 tole + real*8 tzoc + real*8 fz2oc2 + real*8 tzoc2 + real*8 one +c + complex*16 f_sph,g_sph,df_sph,dg_sph + complex*16 energy + complex*16 prel + complex*16 pnrel + complex*16 g(iend) + complex*16 f(iend) + complex*16 gpl(iend) + complex*16 fpl(iend) + complex*16 cl + complex*16 sl + complex*16 dcl(4) + complex*16 dsl(4) + complex*16 ddcl,ddsl,dgpl,dfpl + complex*16 bjl(2,iend) + complex*16 bnl(2,iend) + complex*16 bj(l+1) + complex*16 bn(l+1) + complex*16 djl(l+1) + complex*16 dnl(l+1) + complex*16 a1,a2,b1,b2 + complex*16 matom,sqrtm1 +c + parameter (tole=1.d-10) + parameter (one=1.d0) + parameter (sqrtm1=(0.d0,1.d0)) + parameter (sname='scalar') +c + h24=h/24.d0 +c +c ****************************************************************** +c this subroutine sets up to solve the scalar relativistic equation. +c ****************************************************************** +c + if(iprint.ge.1) then + write(6,'(/'' SCALAR: nrelv,clight='',i5,d23.14)') nrelv,clight + write(6,'('' SCALAR: energy='',2d23.14)') energy + write(6,'('' SCALAR: prel='',2d23.14)') prel + write(6,'('' SCALAR: l,jmt,iend ='',4i5)') + > l,jmt,iend + write(6,'('' SCALAR: r,rv at jmt ='',2d16.8)')r(jmt),rv(jmt) + endif +c ================================================================= +c cannot solve for the real part of the energy equal to 0.0!!!!!!!! + if( abs(energy) .lt. tole ) then + write(6,'('' scalar:: energy=zero'')') + call fstop(sname) + endif +c ================================================================= +c set atomic number................................................ + ized=-rv(1)/2 + 0.5 + zed=ized +c ================================================================= +c start with small r expansion of wave-fcts + cinv=one/clight + c2inv=cinv*cinv + eoc2p1=one+energy*c2inv + tzoc=2*zed*cinv + fz2oc2=tzoc*tzoc + tzoc2=tzoc*cinv +c v0=(rv(1)+2*zed)/r(1) + v1=(r(2)*(rv(1)+2*zed)-r(1)*(rv(2)+2*zed))/(r(1)*r(2)*(r(1)-r(2))) + v0=v1*(r(1)+r(2))+(rv(1)-rv(2))/(r(1)-r(2)) + em0= 1 + (energy-v0)*c2inv + v0me= v0-energy + if(nrelv.le.0) then +c ============================================================== +c scalar-relativistic case...................................... + power=sqrt( l*(l+1) + 1 - fz2oc2 ) + a0=1.d0 + a1p=( fz2oc2 + em0*(power-1 -2*fz2oc2) )/(2*power+1) + a1 = a0*a1p/tzoc2 + a2p=( a1p*(fz2oc2 + em0*(3*power+1 - 2*fz2oc2)) + + < em0*em0*(fz2oc2 - 2*power+2) )/(4*power+4) + a2 = a0*a2p/(tzoc2*tzoc2) + a3p=( a2p*( fz2oc2 + em0*(5*power+5 - 2*fz2oc2) ) + < - a1p*(4*power+1 - fz2oc2)*em0*em0 + < + (3*power-3 - fz2oc2)*em0*em0*em0 )/(6*power+9) + a3 = a0*a3p/(tzoc2*tzoc2*tzoc2) + else +c ============================================================== +c non-relativistic case...................................... + power= l+1 +c a0 is arbitrary, but this make Rl a spherical Bessel at origin. +c other than a factor of 1/(2l+1)!! + a0= prel*(l+1) + a1p= -2*zed/(2*l+2) + a1 = a0*a1p + a2p= (v0me - a1p*2*zed)/(4*l+6) + a2 = a0*a2p +C a3p= (a1p*v0me - a2p*2*zed+2*v1)/(6*l+12) + a3p=(a1p*(4*zed*zed+(3*l+4)*v0me)/(2*l+3)+v1)/(6*l+12) + a3 = a0*a3p + endif +c ================================================================= +c get first 4 points from power series expansion................... + do j=1,4 +c ============================================================== +c r*G = g and r*F = f, i.e. this is r*wave-fct. + g(j)= r(j)**power*(a0 + r(j)*(a1 + r(j)*(a2 + a3*r(j))) ) + emr= eoc2p1*r(j) - rv(j)*c2inv + f(j)= r(j)**power*( a0*(power-1) + + < r(j)*(a1*power + r(j)*(a2*(power+1) + a3*(power+2)*r(j))))/emr +c ============================================================== +c get cl's and sl's + cl=-bnl(2,j)*g(j) - bnl(1,j)*f(j)/prel + sl=-bjl(2,j)*g(j) - bjl(1,j)*f(j)/prel +c ============================================================== +c get derivatives of cl and sl :: for predictor-corrector use +c constant increments on log grid therefore need dg/dx = r*dg/dr + em= 1 + (energy - rv(j)/r(j))*c2inv + b1=(em-1)*f(j)*r(j) + b2=( l*(l+1)/(em*r(j)) + rv(j) + + > (eoc2p1-1)*energy*r(j) )*g(j)/prel + dcl(j)= -bnl(2,j)*b1 - bnl(1,j)*b2 + dsl(j)= -bjl(2,j)*b1 - bjl(1,j)*b2 + enddo +c +c ================================================================= +c regular solution and phase-shifts of scalar relativistic eqs. + j1=4 + j2=3 + j3=2 + j4=1 + i_out=0 + do j=5,jmt + if(i_out.eq.0.and.r(j).ge.r_sph)i_out=j + clold=cl + slold=sl +c ============================================================== +c evaluate predictor + cl=clold+h24*( 55.0d+00*dcl(j1)-59.0d+00*dcl(j2)+ + > 37.0d+00*dcl(j3)- 9.0d+00*dcl(j4) ) + sl=slold+h24*( 55.0d+00*dsl(j1)-59.0d+00*dsl(j2)+ + > 37.0d+00*dsl(j3)- 9.0d+00*dsl(j4) ) +c ============================================================== +c evaluate corrector + em = eoc2p1 - c2inv*rv(j)/r(j) + emr= em*r(j) + do icor=1,icmax + y1=cl*bjl(1,j)-sl*bnl(1,j) + y2=cl*bjl(2,j)-sl*bnl(2,j) + b1=prel*(em-1)*y2*r(j) + b2=( l*(l+1)/emr + rv(j) + (eoc2p1-1)*energy*r(j) )*y1/prel + dcl(j4)= bnl(2,j)*b1 - bnl(1,j)*b2 + dsl(j4)= bjl(2,j)*b1 - bjl(1,j)*b2 + cl=clold+h24*( 9.0d+00*dcl(j4)+19.0d+00*dcl(j1) + > - 5.0d+00*dcl(j2)+dcl(j3) ) + sl=slold+h24*( 9.0d+00*dsl(j4)+19.0d+00*dsl(j1) + > - 5.0d+00*dsl(j2)+dsl(j3) ) + enddo + y1=cl*bjl(1,j)-sl*bnl(1,j) + y2=cl*bjl(2,j)-sl*bnl(2,j) + g(j)=y1 + f(j)=-prel*y2 + j0=j4 + j4=j3 + j3=j2 + j2=j1 + j1=j0 + enddo +c ================================================================= +c get normalization etc. at sphere boundary........................ +c At R, need spherical Bessel's for all l to get normalization and +c physical phase-shifts to determine cl and sl from +c g=r*R=r*( cl*jl - sl*nl ) and f=r*R'/M for all l's. +c Modify expression to account for difference between spherical and +c Ricatti-Bessel fcts. Recall: R=g/r and dR=f*em/r + j=jmt +c pr=prel*r(jmt) + pr=prel*r_sph +c em = eoc2p1 - c2inv*rv(j)/r(j) + call interp(r,rv,i_out,r_sph,rv_sph,drv_sph,.false.) + call cinterp(r,f,i_out,r_sph,f_sph,df_sph,gpl) + call cinterp(r,g,i_out,r_sph,g_sph,dg_sph,gpl) +c if(iprint.ge.1)write(6,'(''g_sph'',19d14.7)')r_sph, +c >r(j-1),r(j),r(j+1),g(j-1),g(j),g(j+1),g_sph +c em = eoc2p1 - c2inv*rv(j)/r_sph + em = eoc2p1 - c2inv*rv_sph/r_sph + emr= em*r_sph +c ----------------------------------------------------------------- + call ricbes(l+1,pr,bj,bn,djl,dnl) +c ----------------------------------------------------------------- +c ================================================================= +c sl and cl at the sphere radius + slmt= (prel*djl(l+1)-bj(l+1)/r_sph)*g_sph - bj(l+1)*f_sph*em + clmt= (prel*dnl(l+1)-bn(l+1)/r_sph)*g_sph - bn(l+1)*f_sph*em +c slmt= (prel*djl(l+1)-bj(l+1)/r(j))*g(j) - bj(l+1)*f(j)*em +c clmt= (prel*dnl(l+1)-bn(l+1)/r(j))*g(j) - bn(l+1)*f(j)*em +c ================================================================= + gpl(j)=bn(l+1)/prel + fpl(j)=(dnl(l+1) - bn(l+1)/pr)/eoc2p1 +c phase shifts and normalization + cotdel=sqrtm1*(slmt-clmt)/slmt + tandel=one/cotdel + matom=pnrel*(sqrtm1-cotdel) + anorm=(bj(l+1)*matom/pnrel-sqrtm1*bn(l+1))/g_sph + if(iprint.ge.1) then + write(6,'(/'' SCALAR:: l='',i3)') l + write(6,'('' SCALAR:: prel='',2d23.14)') prel + write(6,'('' SCALAR:: clmt='',2d23.14)') clmt + write(6,'('' SCALAR:: slmt='',2d23.14)') slmt + write(6,'('' SCALAR:: cotdel='',2d23.14)') cotdel + write(6,'('' SCALAR:: matoml='',2d23.14)') matom + write(6,'('' SCALAR:: anorm='',2d23.14)') anorm + write(6,'('' SCALAR:: pnrel='',2d23.14)') pnrel + write(6,'('' SCALAR::bj(l+1)='',2d23.14)') bj(l+1) + write(6,'('' SCALAR::bn(l+1)='',2d23.14)') bn(l+1) + write(6,'('' SCALAR:: g(j )='',2d23.14)') g(j) + write(6,'('' SCALAR:: g_sph ='',2d23.14)') g_sph + write(6,'(/)') + do j=1,jmt,20 + write(6,'('' j,f,g ='',1i5,4d15.8)')j,f(j),g(j) + enddo + endif + do j=1,jmt + g(j)=g(j)*anorm + f(j)=f(j)*anorm + enddo +c ================================================================= +c get wave-fcts. beyond mt sphere + jmtp1=jmt+1 + do j=jmtp1,iend + pr=prel*r(j) +c -------------------------------------------------------------- + call ricbes(l+1,pr,bj,bn,djl,dnl) +c -------------------------------------------------------------- + g(j)=(bj(l+1)*matom/pnrel-sqrtm1*bn(l+1)) + f(j)= ( (djl(l+1)-bj(l+1)/pr)*matom/pnrel + > -sqrtm1*(dnl(l+1)-bn(l+1)/pr) ) /eoc2p1 + gpl(j)=bn(l+1)/prel + fpl(j)=(dnl(l+1) - bn(l+1)/pr)/eoc2p1 + enddo +c =============================================================== + if(istop.eq.sname) then + call fstop(sname) + else + return + endif +c + end +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine scalari(nrelv,clight,l, + > bjl,bnl,bj,bn,djl,dnl,g,f,gpl,fpl, + > tandel,matom, + > energy,prel,pnrel, + > rv,r,h,jmt,iend,icmax, + > r_sph,iprint,istop) +c ================================================================ +c + implicit complex*16 (a-h,o-z) +c + character istop*32 + character sname*20 +c + integer nrelv,i_out + integer l,iex + integer jmt + integer iend + integer iprint +c + real*8 r(iend),r_sph,rv_sph,drv_sph + real*8 rv(iend) + real*8 zed + real*8 h,h24 + real*8 rvr,drvr + real*8 v0,v1 + real*8 cinv + real*8 clight + real*8 c2inv + real*8 power + real*8 ylag + real*8 tole + real*8 tzoc + real*8 fz2oc2 + real*8 tzoc2 + real*8 one +c + complex*16 f_sph,g_sph,df_sph,dg_sph + complex*16 fpl_sph,gpl_sph + complex*16 energy + complex*16 prel + complex*16 pnrel + complex*16 g(iend) + complex*16 f(iend) + complex*16 gpl(iend) + complex*16 fpl(iend) + complex*16 cl + complex*16 sl + complex*16 dcl(4) + complex*16 dsl(4) + complex*16 ddcl,ddsl,dgpl,dfpl + complex*16 bjl(2,iend) + complex*16 bnl(2,iend) + complex*16 bj(l+1) + complex*16 bn(l+1) + complex*16 djl(l+1) + complex*16 dnl(l+1) + complex*16 a1,a2,b1,b2 + complex*16 matom,sqrtm1 +c + parameter (tole=1.d-10) + parameter (one=1.d0) + parameter (sqrtm1=(0.d0,1.d0)) + parameter (sname='scalar') +c + h24=h/24.d0 +c +c ****************************************************************** +c this subroutine sets up to solve the scalar relativistic equation. +c ****************************************************************** +c + if(iprint.ge.1) then + write(6,'(/'' SCALAR: nrelv,clight='',i5,d23.14)') nrelv,clight + write(6,'('' SCALAR: energy='',2d23.14)') energy + write(6,'('' SCALAR: prel='',2d23.14)') prel + write(6,'('' SCALAR: l,jmt,iend ='',4i5)') + > l,jmt,iend + endif +c ================================================================= +c cannot solve for the real part of the energy equal to 0.0!!!!!!!! + if( abs(energy) .lt. tole ) then + write(6,'('' scalar:: energy=zero'')') + call fstop(sname) + endif +c ================================================================= +c set atomic number................................................ + ized=-rv(1)/2 + 0.5 + zed=ized +c ================================================================= +c start with small r expansion of wave-fcts + cinv=one/clight + c2inv=cinv*cinv + eoc2p1=one+energy*c2inv + tzoc=2*zed*cinv + fz2oc2=tzoc*tzoc + tzoc2=tzoc*cinv +c v0=(rv(1)+2*zed)/r(1) + v1=(r(2)*(rv(1)+2*zed)-r(1)*(rv(2)+2*zed))/(r(1)*r(2)*(r(1)-r(2))) + v0=v1*(r(1)+r(2))+(rv(1)-rv(2))/(r(1)-r(2)) + em0= 1 + (energy-v0)*c2inv + v0me= v0-energy + if(nrelv.le.0) then +c ============================================================== +c scalar-relativistic case...................................... + power=sqrt( l*(l+1) + 1 - fz2oc2 ) + a0=1.d0 + a1p=( fz2oc2 + em0*(power-1 -2*fz2oc2) )/(2*power+1) + a1 = a0*a1p/tzoc2 + a2p=( a1p*(fz2oc2 + em0*(3*power+1 - 2*fz2oc2)) + + < em0*em0*(fz2oc2 - 2*power+2) )/(4*power+4) + a2 = a0*a2p/(tzoc2*tzoc2) + a3p=( a2p*( fz2oc2 + em0*(5*power+5 - 2*fz2oc2) ) + < - a1p*(4*power+1 - fz2oc2)*em0*em0 + < + (3*power-3 - fz2oc2)*em0*em0*em0 )/(6*power+9) + a3 = a0*a3p/(tzoc2*tzoc2*tzoc2) + else +c ============================================================== +c non-relativistic case...................................... + power= l+1 +c a0 is arbitrary, but this make Rl a spherical Bessel at origin. +c other than a factor of 1/(2l+1)!! + a0= prel*(l+1) + a1p= -2*zed/(2*l+2) + a1 = a0*a1p + a2p= (v0me - a1p*2*zed)/(4*l+6) + a2 = a0*a2p +C a3p= (a1p*v0me - a2p*2*zed+2*v1)/(6*l+12) + a3p=(a1p*(4*zed*zed+(3*l+4)*v0me)/(2*l+3)+v1)/(6*l+12) + a3 = a0*a3p + endif +c ================================================================= +c get wave-fcts. beyond mt sphere + jmtp1=jmt+1 + do j=1,iend +c do j=jmtp1,iend + pr=prel*r(j) +c -------------------------------------------------------------- + call ricbes(l+1,pr,bj,bn,djl,dnl) +c -------------------------------------------------------------- + gpl(j)=bn(l+1)/prel + fpl(j)=(dnl(l+1) - bn(l+1)/pr)/eoc2p1 + enddo +c +c ================================================================= +c irregular solution of scalar relativistic eqs.................... +c start irregular solution outside m.t. sphere +c ================================================================= +c do j=jmt,jmt+3 + i_out=0 + do j=jmt,1,-1 + if(r(j).lt.r_sph.and.i_out.eq.0)i_out=j+1 + enddo +c if(j.eq.i_out) then + pr=prel*r_sph +c -------------------------------------------------------------- + call ricbes(l+1,pr,bj,bn,djl,dnl) +c -------------------------------------------------------------- + gpl_sph=bn(l+1)/prel + fpl_sph=(dnl(l+1) - bn(l+1)/pr)/eoc2p1 +c cl=-(-sin(pr)-cos(pr))*gpl_sph +cos(pr) *fpl_sph/prel +c sl=-(-cos(pr)+sin(pr))*gpl_sph - sin(pr)*fpl_sph/prel + cl=-bnl(2,i_out)*gpl(i_out) - bnl(1,i_out)*fpl(i_out)/prel + sl=-bjl(2,i_out)*gpl(i_out) - bjl(1,i_out)*fpl(i_out)/prel + ddcl=0.d0 + ddsl=0.d0 + dgpl=0.d0 + dfpl=0.d0 + rvr=ylag(r_sph,r,rv,0,2,i_out,iex) + em = eoc2p1 - c2inv*rvr/r_sph + emr= em*r_sph + b1=(em-1)*fpl_sph*r_sph + b2=( l*(l+1)/emr + rvr + (eoc2p1-1)*energy*r_sph ) + &*(gpl_sph+dgpl)/prel + dcl(1)=-(-sin(pr)-cos(pr))*b1 +cos(pr) *b2 + dsl(1)=-(-cos(pr)+sin(pr))*b1 - sin(pr)*b2 + b1=(em-1)*dfpl*r_sph + b2=b2-( l*(l+1)/emr + (eoc2p1-1)*energy*r_sph )*gpl_sph/prel + ddcl=-(-sin(pr)-cos(pr))*b1 +cos(pr) *b2 + ddsl=-(-cos(pr)+sin(pr))*b1 - sin(pr)*b2 +c endif + do j=i_out,i_out+3 +c =========================================================== +c starting with free solution ( v(r)=0 r > R), but using +c extrapolated potentials at and beyond R to get derivative +c terms of cl and sl....................................... + pr=prel*r(j) +c =========================================================== +c set cl and sl beyond mt sphere radius of potential +c extrapolate potential at m.t. radius to get starting value +c for irreg. +c if(j.eq.506) then +c if(r(j)=r_sph)then + dgpl=dgpl+(ddcl*bjl(1,j)-ddsl*bnl(1,j))*h + dfpl=dfpl-prel*(ddcl*bjl(2,j)-ddsl*bnl(2,j))*h +c call interp(r,rv,506,r(j),rvr,drvr,.false.) +c call interp(r,rv,i_out,r(j),rvr,drvr,.false.) + rvr=ylag(r(j),r,rv,0,2,i_out,iex) + em = eoc2p1 - c2inv*rvr/r(j) + emr= em*r(j) +c =========================================================== +c Note: effect of potential on fpl here ignored: it is small. + b1=(em-1)*(fpl(j)+dfpl)*r(j) + b2=( l*(l+1)/emr + rvr + (eoc2p1-1)*energy*r(j) ) + & *(gpl(j)+dgpl)/prel + dcl(j-i_out+1)= -bnl(2,j)*b1 - bnl(1,j)*b2 + dsl(j-i_out+1)= -bjl(2,j)*b1 - bjl(1,j)*b2 + b1=(em-1)*dfpl*r(j) + b2=b2-( l*(l+1)/emr + (eoc2p1-1)*energy*r(j) )*gpl(j)/prel + ddcl=-bnl(2,j)*b1-bnl(1,j)*b2 + ddsl=-bjl(2,j)*b1-bjl(1,j)*b2 +c write(*,'(''rvr'',3i5,1f7.4,99d11.5)')j,i_out,j-i_out+1, +c > r(j), +c > rv(i_out-3),rv(i_out-2),rv(i_out-1),rv(i_out), +c > rvr,dsl(j-i_out+1),dcl(j-i_out+1) +c endif + enddo +c ================================================================== +c get irregular solution inside m.t. sphere +c ================================================================== + j1=1 + j2=2 + j3=3 + j4=4 +c jmtm1=506-1 + jmtm1=jmt-1 +c do j=jmtm1,1,-1 +c write(6,'(''cl,sl,clo,slo'',2i4,99d10.4)') +c >0,0,0.,0.,0.,dsl(j1),dsl(j2),dsl(j3),dsl(j4) + do j=i_out-1,1,-1 + clold=cl + slold=sl +c ================================================================ +c evaluate predictor + cl=clold-h24*( 55.0d+00*dcl(j1)-59.0d+00*dcl(j2)+ + > 37.0d+00*dcl(j3)- 9.0d+00*dcl(j4) ) + sl=slold+h24*( 55.0d+00*dsl(j1)-59.0d+00*dsl(j2)+ + > 37.0d+00*dsl(j3)- 9.0d+00*dsl(j4) ) +c ================================================================ +c evaluate corrector + em = eoc2p1 - c2inv*rv(j)/r(j) + emr= em*r(j) +c if(j.gt.502)write(6,'(''cl,sl,clo,slo'',2i4,99d10.4)') +c >j,0,cl,sl,rv(j),dsl(j1),dsl(j2),dsl(j3),dsl(j4) + do icor=1,icmax + y1=cl*bjl(1,j)-sl*bnl(1,j) + y2=cl*bjl(2,j)-sl*bnl(2,j) + b1=prel*(em-1)*y2*r(j) + b2=( l*(l+1)/emr + rv(j) + (eoc2p1-1)*energy*r(j) )*y1/prel + dcl(j4)= bnl(2,j)*b1 - bnl(1,j)*b2 + dsl(j4)= bjl(2,j)*b1 - bjl(1,j)*b2 + cl=clold-h24*( 9.0d+00*dcl(j4)+19.0d+00*dcl(j1) + > - 5.0d+00*dcl(j2)+dcl(j3) ) + sl=slold-h24*( 9.0d+00*dsl(j4)+19.0d+00*dsl(j1) + > - 5.0d+00*dsl(j2)+dsl(j3) ) +c if(j.gt.502)write(6,'(''cl,sl,clo,slo'',2i4,99d10.4)') +c >j,icor,cl,sl,clold,slold + enddo + y1=cl*bjl(1,j)-sl*bnl(1,j) + y2=cl*bjl(2,j)-sl*bnl(2,j) + gpl(j)=y1 + fpl(j)=-prel*y2 + j0=j4 + j4=j3 + j3=j2 + j2=j1 + j1=j0 + enddo +c +c =============================================================== +c check Wronskian for specified l's.............................. +c =============================================================== +c if(iprint.ge.0 .and. l.eq.0) then + if(iprint.ge.0) then + do j=iend,iend-15,-1 + w= -( g(j)*fpl(j) - gpl(j)*f(j) ) +c write(6,'('' j,r,w ='',1i5,7d23.14)')j,r(j),w,fpl(j),gpl(j) +c write(6,'('' j,r,w ='',1i5,7d16.8)')j,r(j),fpl(j),gpl(j) + enddo +c write(6,'(/)') +c do j=1,iend,20 +c write(6,'(''ij,g,f ='',1i5,4d23.14)')j,g(j),f(j) +c enddo + endif + +c +c =============================================================== + if(istop.eq.sname) then + call fstop(sname) + else + return + endif +c + end diff --git a/src/SingleSite/semrel_c.f b/src/SingleSite/semrel_c.f new file mode 100755 index 000000000..3361e0417 --- /dev/null +++ b/src/SingleSite/semrel_c.f @@ -0,0 +1,228 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine semrel(nrelv,clight,lmax, + > energy,prel,pnrel, + > matom,zlr,jlr, + > h,jmt,jws,r,rv, + > r_sph, + > iprpts, + > iprint,istop) +c ================================================================ +c + implicit none +c +c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +! include 'atom_param.h' +c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +c + character sname*20 + character istop*32 + character coerr*20 +c + integer iprpts +! + integer nrelv + integer lmax + integer jmt + integer jws + integer iprint + integer iend + integer i,j + integer l + integer solver + parameter (solver=2) +c parameter (solver=1) + integer icmax + parameter (icmax=5) + integer nr + parameter (nr=4) +c +c real*8 phshft(iplmax+1) + real*8 clight + real*8 h,r_sph + real*8 r(iprpts) + real*8 rv(iprpts) + real*8 coef(nr,iprpts) +c + complex*16 energy + complex*16 prel + complex*16 pnrel + complex*16 matom(0:lmax) + complex*16 zlr(iprpts,0:lmax) + complex*16 jlr(iprpts,0:lmax) + complex*16 bjl(2,iprpts) + complex*16 bnl(2,iprpts) +c$$$ complex*16 bes(2*(iplmax+1)) +c$$$ complex*16 djl(iplmax+1) +c$$$ complex*16 dnl(iplmax+1) + complex*16 bes(2*(lmax+1)) + complex*16 djl(lmax+1) + complex*16 dnl(lmax+1) + complex*16 g(iprpts) + complex*16 f(iprpts) + complex*16 gpl(iprpts) + complex*16 fpl(iprpts) + complex*16 pr + complex*16 tandel + complex*16 sqrtm1 +c + parameter (sqrtm1=(0.0d0,1.0d0)) + parameter (sname='semrel') +c +c **************************************************************** +c program to solve scalar relativistic equations for complex +c energies using Calogero's phase method ddj/fjp ---july 1991 +c +c Gets radial integrals, t-matrix. +c +c In this version rv is r * v +c +c called by: grint +c calls: ricbes,scalar,cqxpup,fstop +c +c requires: +c lmax lmax +c energy energy +c istop switch: if istop=21 stop at end of this routine +c h,x,r grid info (step for log-grid, log grid, r-grid) +c +c returns: +c tinvl t-1 matrix +c zlr rad wf +c jlr ir rad wf +c +c set c for doing semi-relativistic or non-relativistic calc. +c .....c = speed of light in proper units.......... +c Ryd units: m=1/2 hbar=1 c=2*inverse of fine structure const. +c +c Solving a relativistic (nrelv=0) or non-relativistic (nrelv=10) +c problem. If non-relativistic, then set e=e-elmass equal to e +c (where elmass = electron mass) and 1/c is set to ~zero to make +c relativistic terms zero. +c NOTE: c is set to c*10**nrelv to make cod +c fully relativistic code.............................. +c +c Using Ricatti Bessel fcts. Need only l=0 and l=1 to get wave-fcts. +c +c To get physical phase-shifts and normalization, need get Rl in +c terms of spherical bessel for all l's at the boundary of sphere. +c This is properly done in SCALAR, see clmt and slmt. +c +c With M(r)= [1 + (e-v(r))*c2inv] +c Obtain r*(wave-fct.): regular g=r*R and f=r*R'/M +c irregular gpl=r*R and fpl=r*R'/M +c +c NOTE: ====> need to get gderiv for mom. matrix elements +c +c **************************************************************** +c + if(iprint.ge.1) then + write(6,'('' semrel: lmax ='',i5)') lmax + write(6,'('' semrel: nrelv,clight='',i5,d12.4)') nrelv,clight + write(6,'('' semrel: energy ='',2d12.4)') energy + write(6,'('' semrel: prel ='',2d12.4)') prel + write(6,'('' semrel: pnrel ='',2d12.4)') pnrel + write(6,'('' semrel: jmt,jws='',2i5)') jmt,jws + write(6,'('' rr'',9d14.7)')r_sph,r(jmt-2),r(jmt-1),r(jmt) + write(6,'(''rr506s'',9d14.7)')r_sph,r(506-2),r(506-1),r(506) + endif +c +c ================================================================ +c for muffin-tins incrs and jmt should be the same +c ================================================================ +c iend=max(506+11,jws) + iend=max(jmt+11,jws) +c write(6,'('' semrel: jmt,jws,iend='',3i5)') jmt,jws,iend + if( iend .lt. jws ) then + coerr=' iend less than jws' + write(6,'(2(2x,a20))')coerr,sname + write(6,'('' semrel: jmt,jws,iend='',3i5)') jmt,jws,iend + call fstop(sname) + else if( iend .gt. iprpts ) then + coerr='iend > iprpts' + write(6,'(2(2x,a10))')coerr,sname + call fstop(sname) + endif + if(solver.eq.1) then + do j=1,iend + pr=pnrel*r(j) + bjl(1,j)= sin(pr) + bnl(1,j)=-cos(pr) + bjl(2,j)= bnl(1,j) + bjl(1,j)/pr + bnl(2,j)=-bjl(1,j) + bnl(1,j)/pr + enddo + else +c fit the potential to (A1*r+A2)/(1+A3*r) + call fitpot(r,rv,coef,nr,iend-1,iend) +c call fitpot(r,rv,coef,nr,506,iend) +c do i=506,iend +c do j=1,4 +c coef(j,i)=0.d0 +c enddo +c enddo + if(iprint.ge.2)then + do i=jws-20,iend + write(6,'(''coef'',i5,f10.5,9d14.6)') + >i,r(i),rv(i),(coef(j,i),j=1,4) + enddo + endif +c call fitpot(r,rv,coef,nr,506,iend) +c call fitpot(r,rv,coef,nr,jmt,iend) + endif +c +c ================================================================ +c solve scalar-relativistic or non-relativistic equation. +c ================================================================ + do l=0,lmax + if(solver.eq.1) then +c ------------------------------------------------------------- + call scalarr(nrelv,clight,l, +c call scalar(nrelv,clight,l, + > bjl,bnl,bes,bes(lmax+2),djl,dnl,g,f,gpl,fpl, + > tandel,matom(l), + > energy,prel,pnrel, + > rv,r,h,jmt,iend,icmax, +c > rv,r,h,506,iend,icmax, + > r_sph,iprint,istop) + call scalari(nrelv,clight,l, + > bjl,bnl,bes,bes(lmax+2),djl,dnl,g,f,gpl,fpl, + > tandel,matom(l), + > energy,prel,pnrel, + > rv,r,h,jmt,iend,icmax, +c > rv,r,h,506,iend,icmax, + > r_sph,iprint,istop) +c ------------------------------------------------------------- +c +c ============================================================= +c store cotangent of phase-shift, normalization and t-matrix +c ============================================================= +c phshft(l+1)=atan(dble(tandel)) +c ============================================================= +c get z_l(r): used in constructing green function.............. + do j=1,jws + zlr(j,l)= g(j)/r(j) + enddo +c ============================================================= +c get j_l(r): used in constructing green function........... + do j=1,jws + jlr(j,l)= sqrtm1*prel*gpl(j)/(r(j)*matom(l)) + enddo + else + call rwave(nrelv.eq.0,.true.,g,gpl,f,fpl,matom(l),l,energy, + & coef,nr,r,(0.d0,0.d0),jmt,iend,1.d-14,1.d0, + & bes,2*(lmax+1),r_sph) + do j=1,jws + zlr(j,l)= g(j)*matom(l)/r(j) + jlr(j,l)= sqrtm1*prel*gpl(j)/(r(j)*matom(l)) + enddo + endif + enddo +c +c ================================================================ + if (istop.eq.sname) then + call fstop(sname) + else + return + endif +c + end diff --git a/src/SingleSite/semrel_c_mesh_test.f b/src/SingleSite/semrel_c_mesh_test.f new file mode 100755 index 000000000..a91c797b2 --- /dev/null +++ b/src/SingleSite/semrel_c_mesh_test.f @@ -0,0 +1,225 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine semrel(nrelv,clight,lmax, + > energy,prel,pnrel, + > matom,zlr,jlr, + > h,jmt,jws,r,rv, + > iprint,istop) +c ================================================================ +c + implicit none +c +c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + include 'atom_param.h' +c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +c + character sname*20 + character istop*32 + character coerr*20 +c + integer nrelv + integer lmax + integer jmt + integer jws + integer iprint + integer iend + integer i,j + integer l + integer solver + parameter (solver=1) + integer nr + parameter (nr=4) + integer n + parameter (n=1) +c +c real*8 phshft(iplmax+1) + real*8 clight + real*8 h + real*8 r(iprpts) + real*8 rv(iprpts) + real*8 h0,dr + real*8 r0(n*iprpts) + real*8 rv0(n*iprpts) + real*8 const + real*8 coef(nr,n*iprpts) +c + complex*16 energy + complex*16 prel + complex*16 pnrel + complex*16 matom(0:lmax) + complex*16 zlr(iprpts,0:lmax) + complex*16 jlr(iprpts,0:lmax) + complex*16 bjl(2,n*iprpts) + complex*16 bnl(2,n*iprpts) + complex*16 bes(2*(iplmax+1)) + complex*16 djl(iplmax+1) + complex*16 dnl(iplmax+1) + complex*16 g(n*iprpts) + complex*16 f(n*iprpts) + complex*16 gpl(n*iprpts) + complex*16 fpl(n*iprpts) + complex*16 pr + complex*16 tandel + complex*16 cone + complex*16 sqrtm1 +c + parameter (cone=(1.0d0,0.0d0)) + parameter (sqrtm1=(0.0d0,1.0d0)) + parameter (sname='semrel') +c +c **************************************************************** +c program to solve scalar relativistic equations for complex +c energies using Calogero's phase method ddj/fjp ---july 1991 +c +c Gets radial integrals, t-matrix. +c +c In this version rv is r * v +c +c called by: grint +c calls: ricbes,scalar,cqxpup,fstop +c +c requires: +c lmax lmax +c energy energy +c istop switch: if istop=21 stop at end of this routine +c h,r grid info (step for log-grid, log grid, r-grid) +c +c returns: +c tinvl t-1 matrix +c zlr rad wf +c jlr ir rad wf +c +c set c for doing semi-relativistic or non-relativistic calc. +c .....c = speed of light in proper units.......... +c Ryd units: m=1/2 hbar=1 c=2*inverse of fine structure const. +c +c Solving a relativistic (nrelv=0) or non-relativistic (nrelv=10) +c problem. If non-relativistic, then set e=e-elmass equal to e +c (where elmass = electron mass) and 1/c is set to ~zero to make +c relativistic terms zero. +c NOTE: c is set to c*10**nrelv to make cod +c fully relativistic code.............................. +c +c Using Ricatti Bessel fcts. Need only l=0 and l=1 to get wave-fcts. +c +c To get physical phase-shifts and normalization, need get Rl in +c terms of spherical bessel for all l's at the boundary of sphere. +c This is properly done in SCALAR, see clmt and slmt. +c +c With M(r)= [1 + (e-v(r))*c2inv] +c Obtain r*(wave-fct.): regular g=r*R and f=r*R'/M +c irregular gpl=r*R and fpl=r*R'/M +c +c NOTE: ====> need to get gderiv for mom. matrix elements +c +c **************************************************************** +c + if(iprint.ge.1) then + write(6,'('' semrel: lmax ='',i5)') lmax + write(6,'('' semrel: nrelv,clight='',i5,d12.4)') nrelv,clight + write(6,'('' semrel: energy ='',2d12.4)') energy + write(6,'('' semrel: prel ='',2d12.4)') prel + write(6,'('' semrel: pnrel ='',2d12.4)') pnrel + write(6,'('' semrel: jmt,jws='',2i5)') jmt,jws + endif +c +c ================================================================ +c for muffin-tins incrs and jmt should be the same +c ================================================================ + iend=max(n*jmt+11,n*jws) + if( iend .lt. n*jws ) then + coerr=' iend less than n*jws' + write(6,'(2(2x,a20))')coerr,sname + write(6,'('' semrel: jmt,jws,iend='',3i5)') jmt,jws,iend + call fstop(sname) + else if( iend .gt. n*iprpts ) then + coerr='iend > n*iprpts' + write(6,'(2(2x,a10))')coerr,sname + call fstop(sname) + endif + h0=h/n +c z=dble(int(abs(rv(1))+0.1d0)) +c do j=1,jmt +crvi(j)=(z+rv(j))/r(j) +c enddo +c fit the potential to (A1*r+A2)/(1+A3*r) + call fitpot(r,rv,coef,nr,jmt,jmt) + do j=1,iend + i=(j-1)/n+1 + if(n.gt.1) then + const=mod(j-1,n)/dble(n) + r0(j)=r(i)*(r(i+1)/r(i))**const + else + r0(j)=r(j) + endif + if(r0(j).le.r(jmt)) then + dr=r0(j)-r(i) + rv0(j)=(coef(1,i)*dr+coef(2,i))/(1.d0+dr*dr*coef(3,i)) + if(nr.eq.4) rv0(j)=rv0(j)+coef(nr,i) + else + rv0(j)=0.d0 + endif + enddo + if(solver.eq.1) then + do j=1,iend + pr=pnrel*r0(j) + bjl(1,j)= sin(pr) + bnl(1,j)=-cos(pr) + bjl(2,j)= bnl(1,j) + bjl(1,j)/pr + bnl(2,j)=-bjl(1,j) + bnl(1,j)/pr + enddo + else if(n.gt.1) then + call fitpot(r0,rv0,coef,nr,n*jmt,iend) + endif +c +c ================================================================ +c solve scalar-relativistic or non-relativistic equation. +c ================================================================ + do l=0,lmax + if(solver.eq.1) then +c ------------------------------------------------------------- + call scalar(nrelv,clight,l, + > bjl,bnl,bes,bes(iplmax+2),djl,dnl,g,f,gpl,fpl, + > tandel,matom(l), + > energy,prel,pnrel, + > rv0,r0,h0,n*jmt,iend,icmax, + > iprint,istop) +c ------------------------------------------------------------- +c +c ============================================================= +c store cotangent of phase-shift, normalization and t-matrix +c ============================================================= +c phshft(l+1)=atan(dble(tandel)) +c ============================================================= +c get z_l(r): used in constructing green function.............. + do j=1,jws + zlr(j,l)= g(n*(j-1)+1)/r(j) + enddo +c ============================================================= +c get j_l(r): used in constructing green function........... + do j=1,jws + jlr(j,l)= sqrtm1*prel*gpl(n*(j-1)+1)/(r(j)*matom(l)) + enddo +C write(6,*) matom(l) +C write(6,*) zlr(jws,l),jlr(jws,l) + else + call rwave(nrelv.eq.0,.true.,g,gpl,f,fpl,matom(l),l,energy, + & coef,nr,r0,(0.d0,0.d0),n*jmt,iend,1.d-14,1.d0, + & bes,2*(iplmax+1)) + do j=1,jws + zlr(j,l)= g(n*(j-1)+1)*matom(l)/r(j) + jlr(j,l)= sqrtm1*prel*gpl(n*(j-1)+1)/(r(j)*matom(l)) + enddo +C write(6,*) l,matom(l) +C write(6,*) zlr(jws,l),jlr(jws,l) + endif + enddo +c +c ================================================================ + if (istop.eq.sname) then + call fstop(sname) + else + return + endif +c + end diff --git a/src/SingleSite/single_scatterer_nonrel.f b/src/SingleSite/single_scatterer_nonrel.f new file mode 100755 index 000000000..fa8eab1e2 --- /dev/null +++ b/src/SingleSite/single_scatterer_nonrel.f @@ -0,0 +1,122 @@ +C> Non relativistic single scaterer +C> computes and stores the wave functions and the t matrix. +c ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine single_scatterer_nonrel(nrelv,clight,lmax,kkrsz, + > energy,prel,pnrel, + > vr,rr,h,jmt,jws, + > tmat,matom, + > zlr,jlr, + > r_sph,iprpts,iprint,istop) +c ================================================================ +c +c **************************************************************** +c computes the matrix +c computes integrals over the wigner-seitz cell. +c revised by was for n-atoms per unit cell. +c revised by gms to store tmat etc in matrix form +c calls: +c semreltz solve radial schroedinger equation +c bessel get Bessel functions. +c requires: +c lmax (0,1,2, or 3) +c kkrsz siz of kkr matrix [(lmax+1)**2] +c istop index of subroutine in which prgm will stop +c returns: +c tmat t-matrix +c pzz integral of (reg. wf.)**2 over ws cell +c pzj integral of (reg.wf.*irreg.wf) over ws cell +c pzzck integral of (reg. wf.)**2 over mt sphere +c pzjck integral of (reg.wf.*irreg.wf) over mt sphere +c **************************************************************** +c + implicit none +c +c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +! include 'atom_param.h' +c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +c + integer iprpts + + character sname*32 + character istop*32 +c + integer nrelv + integer lmax + integer kkrsz + integer jmt + integer jws + integer iprint + integer l + integer m + integer lm +c + real*8 vr(iprpts) + real*8 rr(iprpts) + real*8 clight + real*8 h,r_sph +c + complex*16 matom(0:lmax) + complex*16 tmat(kkrsz,kkrsz) + complex*16 energy + complex*16 prel + complex*16 pnrel + complex*16 zlr(iprpts,0:lmax) + complex*16 jlr(iprpts,0:lmax) + complex*16 cone + complex*16 sqrtm1 +c + parameter (sname='single_site') + parameter (cone=(1.0d0,0.0d0)) + parameter (sqrtm1=(0.0d0,1.0d0)) +c +c ================================================================= +c printout if needed............................................... +c YingWai's check + if(iprint.ge.1) then + write(6,'('' SINGLE_SITE:: nrelv,lmax: '',2i5)') nrelv,lmax + write(6,'('' energy: '',4d12.5)') energy + write(6,'('' jmt,jws: '',2i5)') jmt,jws + write(6,'('' rr'',9d14.7)')r_sph,rr(jmt-2),rr(jmt-1),rr(jmt) + write(6,'('' rr506'',9d14.7)')r_sph,rr(506-2),rr(506-1),rr(506) + endif +c +c ================================================================= +c calculate matom and zlr and jlr................................. +c ----------------------------------------------------------------- +c YingWai's check +! write(6,*) "Inside single_scatterer_nonrel. Before semrel." + call semrel(nrelv,clight,lmax, + > energy,prel,pnrel, + > matom,zlr,jlr, + > h,jmt,jws,rr,vr, +c > h,506,506,rr,vr, + > r_sph, + > iprpts, + > iprint,istop) +! write(6,*) "Inside single_scatterer_nonrel. After semrel." +c ----------------------------------------------------------------- +c +c ================================================================= +c calculate t-matrix and zlr and jlr............................... +c ----------------------------------------------------------------- + call zeroout(tmat,2*kkrsz*kkrsz) +c ----------------------------------------------------------------- + lm=0 + do l=0,lmax + do m=-l,l + lm=lm+1 + tmat(lm,lm)=cone/matom(l) + enddo +c -------------------------------------------------------------- +c call zaxpy(jws,-tmat(lm,lm),zlr(1,l),1,jlr(1,l),1) +c -------------------------------------------------------------- + enddo +c +c ================================================================= + if (istop.eq.sname) then + call fstop(sname) + else + return + endif +c + end diff --git a/src/SingleSite/single_scatterer_rel.f b/src/SingleSite/single_scatterer_rel.f new file mode 100755 index 000000000..88f48875e --- /dev/null +++ b/src/SingleSite/single_scatterer_rel.f @@ -0,0 +1,171 @@ +! originally WAFU from the SKKR code +! + subroutine single_scatterer_rel(ce,psq,lmax,kmymax, + > idpot,v0,vr,br,bopr,dx,ns,rs, + > tminv,gz,fz,gj,fj,nuz,indz,iflag,socsc, + > iprpts,iprint,istop) +c==================== +c +c input: e - any complex energy +c lmax - maximum of angular momentum index +c v0 - vacuum potential +c idpot,vr,br,bopr,dx,ns,rs - as in 'readpot' +c output: tminv - inverse of single-site scattering matrix +c gz,fz - big and small component of regular radial solution * r +c nuz - no. of (kap',my') components for (kap,my) +c indz - selects (kap',my') for (kap,my) +c + implicit real*8 (a-h,o-z) +c +! include '../param.h' +! include 'atom_param.h' + parameter (nuzp=2) +c + integer idpot + character*32 sname + character*32 istop + + integer iprint + + dimension vr(ns),br(ns),bopr(ns,2) + complex*16 tminv2(2,2) + complex*16 tminv(kmymax,kmymax) + complex*16 gz2(iprpts,2,2),fz2(iprpts,2,2) + complex*16 gj2(iprpts,2,2),fj2(iprpts,2,2) +! complex*16 gz(ns,nuzp,kmymax),fz(ns,nuzp,kmymax) +! complex*16 gj(ns,nuzp,kmymax),fj(ns,nuzp,kmymax) + complex*16 gz(iprpts,nuzp,kmymax),fz(iprpts,nuzp,kmymax) + complex*16 gj(iprpts,nuzp,kmymax),fj(iprpts,nuzp,kmymax) + complex*16 fb(0:lmax+1),fn(0:lmax+1),fh(0:lmax+1) + complex*16 fb1(0:lmax+1),fn1(0:lmax+1),fh1(0:lmax+1) + complex*16 ce,psq,p,cevac,psqvac,pvac,sk,dk,xk,react,sqrtm1 + dimension nuz(kmymax),indz(nuzp,kmymax) + data sqrtm1/(0.d0,1.d0)/ + + parameter(sname='single_scatterer_rel') +c +c write(6,'(a10)') idpot +c write(6,'(2f10.6,i5)') dx,rs,ns +c write(6,'(4d20.10)') (vr(j),j=1,ns) +c write(6,'(4d20.10)') (br(j),j=1,ns) +c +! write(6,*) 'meis' +! write(6,*)ce,psq,lmax,idpot,v0 +! write(6,*)vr(1),vr(ns),br(1),br(ns) +! write(6,*)dx,ns,rs + +! write(6,*) 'entering ',sname + + kmax=2*lmax+1 +! kmymax=2*(lmax+1)*(lmax+1) + call zeroout(tminv,2*kmymax*kmymax) +c +! idpot .eq. 0 -> Vacuum + if(idpot.eq.0) then +c + p=cdsqrt(psq) + cevac=ce-v0 + pvac=cdsqrt(cevac) + call csbf(lmax+1,p,rs,fb,fn,fh) + call csbf(lmax+1,pvac,rs,fb1,fn1,fh1) + do k=1,kmax + l=k/2 + if(k.eq.2*l) then + kap=l + lb=l-1 + j=2*l-1 + else + kap=-l-1 + lb=l+1 + j=2*l+1 + end if + sk=dcmplx(dfloat(l-lb),0.d0) + xk=sk*cevac*fb1(lb)/pvac + xk=xk/fb1(l) + sk=sk*ce/p + dk=(xk*fb(l)-sk*fb(lb))/(xk*fn(l)-sk*fn(lb)) + react=-dk/p + do my=-j,j,2 + kapmy=2*kap*kap+kap+(my+1)/2 + tminv(kapmy,kapmy)=1.d0/react+sqrtm1*p + end do + end do +c + else +c + do l=0,lmax + kap1=l + kap2=-l-1 + do my=-2*l-1,2*l+1,2 +c +! write(6,*) sname,1 + + call spzwafu(socsc,ce,psq,l,my,vr,br,bopr,dx,ns,rs, + > tminv2,gz2,fz2,gj2,fj2,iflag,iprpts,lmax) +c +! write(6,*) sname,2 + + if(iabs(my).eq.2*l+1) then +c + kapmy=2*kap2*kap2+kap2+(my+1)/2 + tminv(kapmy,kapmy)=tminv2(2,2) +c + if(iflag.eq.1) then + nuz(kapmy)=1 + indz(1,kapmy)=kapmy + do i=1,ns + gz(i,1,kapmy)=gz2(i,2,2) + fz(i,1,kapmy)=fz2(i,2,2) + gj(i,1,kapmy)=gj2(i,2,2) + fj(i,1,kapmy)=fj2(i,2,2) + end do + end if +c + else +c + kapmy1=2*kap1*kap1+kap1+(my+1)/2 + kapmy2=2*kap2*kap2+kap2+(my+1)/2 + tminv(kapmy1,kapmy1)=tminv2(1,1) + tminv(kapmy1,kapmy2)=tminv2(1,2) + tminv(kapmy2,kapmy1)=tminv2(2,1) + tminv(kapmy2,kapmy2)=tminv2(2,2) +c + if(iflag.eq.1) then + nuz(kapmy1)=2 + nuz(kapmy2)=2 + indz(1,kapmy1)=kapmy1 + indz(2,kapmy1)=kapmy2 + indz(1,kapmy2)=kapmy2 + indz(2,kapmy2)=kapmy1 + do i=1,ns + gz(i,1,kapmy1)=gz2(i,1,1) + fz(i,1,kapmy1)=fz2(i,1,1) + gz(i,2,kapmy1)=gz2(i,2,1) + fz(i,2,kapmy1)=fz2(i,2,1) + gz(i,1,kapmy2)=gz2(i,2,2) + fz(i,1,kapmy2)=fz2(i,2,2) + gz(i,2,kapmy2)=gz2(i,1,2) + fz(i,2,kapmy2)=fz2(i,1,2) + gj(i,1,kapmy1)=gj2(i,1,1) + fj(i,1,kapmy1)=fj2(i,1,1) + gj(i,2,kapmy1)=gj2(i,2,1) + fj(i,2,kapmy1)=fj2(i,2,1) + gj(i,1,kapmy2)=gj2(i,2,2) + fj(i,1,kapmy2)=fj2(i,2,2) + gj(i,2,kapmy2)=gj2(i,1,2) + fj(i,2,kapmy2)=fj2(i,1,2) + end do + end if +c + end if +c + end do + end do +c + end if +c + if(istop.eq.sname) then + call fstop(sname) + end if + + end diff --git a/src/SingleSite/single_site_tmat.f b/src/SingleSite/single_site_tmat.f new file mode 100755 index 000000000..ffccc63cf --- /dev/null +++ b/src/SingleSite/single_site_tmat.f @@ -0,0 +1,195 @@ +! single_site_tmat provides an interface for the single site +! scattering routines. + + subroutine single_site_tmat(nrel_rel,n_spin_cant,is, + > n_spin_pola, + > mtasa,rws, + > nrelv,clight,lmax,kkrsz, + > energy,prel,pnrel, + > vr,h,jmt,jws,r_mesh, + > tmat_l,tmat_g,matom, + > zlr,jlr, + > gz,fz,gj,fj,nuz,indz, + > ubr,ubrd,dmat,dmatp, + > r_sph,iprint,istop) + +! tmat_l returns the spin-diagonal blocks of the tmatrix in the local frame +! in the non-relativistic case only. Its value in the +! relativistic case is undefined. +! tmat_g returns the tmatrix in the global frame of reference. + + implicit none + + include 'atom_param.h' + + character sname*32 + character istop*32 + character idpot*10 + + integer nuzp + parameter (nuzp=2) + + integer nrel_rel ! nrel_rel .ne. 0 : relativistic calc. + integer n_spin_cant + integer n_spin_pola + integer is + integer nrelv + integer mtasa + integer lmax + integer kkrsz + integer jmt + integer jws + integer iprint + integer nuz(2*kkrsz) + integer indz(nuzp,2*kkrsz) + integer kmymax + integer j + integer info + integer ipvt(2*kkrsz) + integer isq + integer isp + + real*8 vr(iprpts,n_spin_pola),v0 + real*8 clight + real*8 h + real*8 r_sph + real*8 rws + real*8 r_mesh(iprpts) + real*8 vrr(iprpts) + real*8 brr(iprpts) + real*8 boprr(iprpts,2) + real*8 soscal + + complex*16 matom(lmax+1,n_spin_pola) + complex*16 tmat_l(kkrsz*kkrsz,n_spin_cant) + complex*16 tmat_g(kkrsz*n_spin_cant,kkrsz*n_spin_cant) + complex*16 energy + complex*16 prel + complex*16 psq + complex*16 pnrel + complex*16 zlr(iprpts*(iplmax+1),ip_spin_cant) + complex*16 jlr(iprpts*(iplmax+1),ip_spin_cant) + complex*16 gz(iprpts,nuzp,2*kkrsz) + complex*16 fz(iprpts,nuzp,2*kkrsz) + complex*16 gj(iprpts,nuzp,2*kkrsz) + complex*16 fj(iprpts,nuzp,2*kkrsz) + complex*16 wbig(4*kkrsz*kkrsz) + complex*16 ubr(4) + complex*16 ubrd(4) + complex*16 dmat(2*kkrsz,2*kkrsz) + complex*16 dmatp(2*kkrsz,2*kkrsz) + complex*16 detl + + parameter (sname='single_site_tmat') +! soscal: spin-orbit scaling: +! soscal=1 : Dirac eq with full spin-orbit coupling +! 0 : S.O. completly scaled out + parameter (soscal=1.d0) + idpot='x123456789' +c if(vr(1,1).gt.-1.d-3) idpot='Vacuum ' +c if(vr(1,1).gt.-1.d-3) v0=vr(1,1)/r_mesh(1) + v0=0.d0 +c if(vr(1,1).gt.-1.d-3) write(*,*)idpot +! write(6,*) 'entering ',sname + kmymax = kkrsz*n_spin_cant + if(nrel_rel.eq.0) then +! ------------------------------------------------- +! non relativistic +! ------------------------------------------------- + do isp=1,n_spin_cant + isq=max(is,isp) +c ------------------------------------------------------------- + if(iprint.ge.1) then + write(6,*) 'before SINGLE_SCATTERER_NONREL' + call flush(6) + end if + call single_scatterer_nonrel(nrelv,clight,lmax,kkrsz, + > energy,prel,pnrel, + > vr(1,isq),r_mesh,h,jmt,jws, + > tmat_l(1,isp),matom(1,isp), + > zlr(1,isp),jlr(1,isp), + > r_sph,iprint,istop) +c ------------------------------------------------------------- + if(iprint.ge.1) then +c =========================================================== +c write out Single-site t-matrix (local frame)............... + write(6,'(/,''GETTAU:: t-matrixfor isp='',i5)') isp +c ----------------------------------------------------------- + call wrtmtx(tmat_l(1,isp),kkrsz,istop) +c ----------------------------------------------------------- + endif + enddo + + if(n_spin_cant.eq.2) then + call trltog(kkrsz,kkrsz,ubr,ubrd, + > tmat_l(1,1),tmat_l(1,2),tmat_g) + else + call zcopy(kkrsz*kkrsz,tmat_l(1,1),1,tmat_g,1) + end if + + else +! ------------------------------------------------- +! relativistic +! ------------------------------------------------- +! first build the Clebsch - Gordan coefs (should be done better +! and not here) !!!! +! write(6,*) sname,1 +! call clebsch !moved to beginning of zplanint +! currently the relativistic part works only for ASA: + if(mtasa.ne.1) then + write(6,*) ' relativistic calcultions work for ASA only!' + call fstop(sname) + end if +! first we transform the potential from the up-down form +! to el-mag form +! write(6,*) sname,2 + do j=1,jws +! do we need a factor of 1/2 here or not? + vrr(j) = 0.5d0*(vr(j,1)+vr(j,2)) + if(vr(1,1).gt.-1.d-4)vrr(j)=vrr(j)-1.d-4 + brr(j) = 0.5d0*(vr(j,1)-vr(j,2)) +! vrr(j) = (vr(j,1)+vr(j,2)) +! brr(j) = (vr(j,1)-vr(j,2)) + boprr(j,1) = 0.d0 + boprr(j,2) = 0.d0 + end do +! write(6,*) h,jws,rws +! write(6,200) (vrr(j),j=1,jws) +! write(6,200) (brr(j),j=1,jws) + 200 format(4d20.12) + psq = energy +energy*energy/(clight*clight) +! h = 1.200000000000000d-002 +! rws = 2.60957430788315d0 + call single_scatterer_rel(energy,psq,lmax,kmymax, + > 'x123456789',v0, + > vrr,brr,boprr,h,jws,rws, + > tmat_g,gz,fz,gj,fj,nuz,indz,1,soscal, + > iprint,istop) + +! now we have tinv but we need t: +! write(6,*) sname,4 +! call zgetrf(kmymax,kmymax,tmat_g,kkrsz,ipvt,info) +! call zgetri(kmymax,tmat_g,kmymax,ipvt,wbig,kkrsz*kkrsz,info) + call gjinv(tmat_g,kmymax,kmymax,detl) +! t now is in the local frame of refference, now we have to +! transform it into the global frame: +! write(6,*) sname,5 + call tripmt(dmat,tmat_g,dmatp,kmymax,kmymax,kmymax) + + end if + + if(istop.eq.sname) then + write(6,*) 'tmat_g:' + call outmat1(tmat_g,kmymax,kmymax,kmymax,1.d-15,6) + call gjinv(tmat_g,kmymax,kmymax,detl) + call replms(wbig,tmat_g,lmax,kmymax) + write(6,*) 'diag(tmat_lms):' + do j=1,2*(lmax+1)**2 + write(6,*) j,j,wbig(j) + end do + write(6,*) 't^(-1) :' + call outmat1(tmat_g,kmymax,kmymax,kmymax,1.d-15,6) + call fstop(sname) + end if + + end diff --git a/src/SingleSite/spzwafu.f b/src/SingleSite/spzwafu.f new file mode 100755 index 000000000..73922cca5 --- /dev/null +++ b/src/SingleSite/spzwafu.f @@ -0,0 +1,324 @@ + subroutine spzwafu(socsc,ce,psq,l,my,vr,br,bopr,dx,ns,rs, + > tminv,gz,fz,gj,fj,iflag,iprpts,iplmax) +c======================= +c +c input: e - any complex energy +c l,my - angular momentum indices +c vr,br,bopr,dx,ns,rs,nws,rws - as in 'readpot' +c output: tminv - (l,my)-like 2x2 block of inverse t-matrix +c gz - large component of regular radial solutions * r +c fz - small component of regular radial solutions * r +c gj - large component of irregular radial solutions * r +c fj - small component of irregular radial solutions * r +c + implicit real*8 (a-h,o-z) +c + logical scale +c +! include '../param.h' +! include 'atom_param.h' + + character*32 sname + character*32 istop + +c + integer iprpts, iplmax + dimension vr(iprpts),br(iprpts),bopr(iprpts,2) + complex*16 tminv(2,2) + complex*16 fz(iprpts,2,2),gz(iprpts,2,2) + complex*16 fj(iprpts,2,2),gj(iprpts,2,2) + complex*16 f1(2,2,iprpts),g1(2,2,iprpts),gp1(2,2) + complex*16 f2(2,2,iprpts),g2(2,2,iprpts),gp2(2,2) + complex*16 f11(iprpts),g11(iprpts),f12(iprpts),g12(iprpts) + complex*16 gp11,gp12 + complex*16 fb(0:iplmax+1),fn(0:iplmax+1),fh(0:iplmax+1) + complex*16 sqrtm1,ce,psq,p,pl,sl,smlm1,detl + complex*16 aa1,aa2,bb1,bb2,gg1,ff1,ggam1,gg2,ff2,ggam2,ggamb + complex*16 a1(2,2),a2(2,2),b1(2,2),b2(2,2) + complex*16 g1mat(2,2),f1mat(2,2),gam1(2,2) + complex*16 g2mat(2,2),f2mat(2,2),gam2(2,2) + complex*16 jmat(2,2),jbmat(2,2),nmat(2,2),nbmat(2,2),gamb(2,2) + complex*16 x1(2,2),x2(2,2),x3(2,2),x4(2,2) +c + parameter (sname='spzwafu') + + data sqrtm1/(0.d0,1.d0)/ +c +c write(6,*) +c write(6,*) ' L,MU=:',l,my +c write(6,*) +c +! write(6,*) 'entering ',sname +! write(6,*) 'ns=',ns + + scale=dabs(1.0d0-socsc).gt.1.0d-3 +! write(6,*) 'SPZWAFU scale=',scale +c + call zeroout(gz,8*iprpts) + call zeroout(fz,8*iprpts) + call zeroout(gj,8*iprpts) + call zeroout(fj,8*iprpts) + call zeroout(tminv,8) + call zeroout(jmat,8) + call zeroout(jbmat,8) + call zeroout(nmat,8) + call zeroout(nbmat,8) + call zeroout(gamz,8) + call zeroout(gamj,8) + call zeroout(gamb,8) +c + xnot=dlog(rs)-(ns-1)*dx +c +c---> c in rydberg units: + c=274.072d0 +c + p=cdsqrt(psq) + xl=dfloat(l) + sl=1.d0 + smlm1=-1.d0 + sl=sl*ce/psq + smlm1=smlm1*ce/psq +c + call csbf(l+1,p,rs,fb,fn,fh) +c + if(iabs(my)-(2*l+1)) 1,2,3 + 3 stop ' spzwafu: my is out of range!' +c + 2 continue + +! write(6,*) sname,2,1 +c + call dirmago1op(socsc,ce,l,my,vr,br,bopr,dx,xnot,rs,ns, + > g11,f11,gp11,iprpts) +! write(6,*) sname,2,2 +c call dirmago1(socsc,ce,l,my,vr,br,dx,xnot,rs,ns,g11,f11,gp11) +! write(6,*) sname,2,3 +c + if(scale) then + gg1=g11(ns)/rs + ff1=gp11/rs +c write(6,'('' gmt reg '',2d15.8)') gg1*rs +c write(6,'('' gpmt reg '',2d15.8)') ff1*rs + ggam1=ff1/gg1 + aa2=p*((ggam1-xl/rs)*fn(l)+p*fn(l+1))/ + > ((ggam1-xl/rs)*fb(l)+p*fb(l+1)) + else + gg1=g11(ns)/rs + ff1=f11(ns)/rs +c write(6,'('' gmt reg '',2d15.8)') gg1*rs +c write(6,'('' fmt reg '',2d15.8)') ff1*rs + ggam1=ff1/gg1 + aa2=p*(ggam1*fn(l)-smlm1*p*fn(l+1)/c)/ + > (ggam1*fb(l)-smlm1*p*fb(l+1)/c) + end if +c +c This is now the inverse reactance! + tminv(2,2)=-aa2 +c This is now the inverse t-matrix! + tminv(2,2)=tminv(2,2)+sqrtm1*p +c +! write(6,*) sname,2,3 + if(iflag.eq.0) return +! write(6,*) sname,2,4 + call dirmagi1op(socsc,ce,l,my,vr,br,bopr,dx,xnot,rs,ns, + > g12,f12,gp12,iprpts) +! write(6,*) sname,2,5 +c call dirmagi1(socsc,ce,l,my,vr,br,dx,xnot,rs,ns,g12,f12,gp12) +! write(6,*) sname,2,6 +c + if(scale) then + gg2=g12(ns)/rs + ff2=gp12/rs +c write(6,'('' gmt irr '',2d15.8)') gg2*rs +c write(6,'('' gpmt irr '',2d15.8)') ff2*rs + ggam2=ff2/gg2 + ggamb=(xl*fb(l)/rs-p*fb(l+1))/fb(l) + aa1=p*((ggamb-xl/rs)*fn(l)+p*fn(l+1))/(ggamb*gg1-ff1) + bb1= ((ggam2-xl/rs)*fb(l)+p*fb(l+1))/(ggam2*gg1-ff1) + bb2= ((ggam1-xl/rs)*fb(l)+p*fb(l+1))/(ggam1*gg2-ff2) + do i=1,ns + gz(i,2,2)=g11(i)*aa1 + gj(i,2,2)=g11(i)*bb1+g12(i)*bb2 + end do + else + gg2=g12(ns)/rs + ff2=f12(ns)/rs +! write(6,'('' gmt irr '',2d15.8)') gg2*rs +! write(6,'('' fmt irr '',2d15.8)') ff2*rs*c + ggam2=ff2/gg2 + ggamb=smlm1*p*fb(l+1)/(c*fb(l)) + aa1=p*(ggamb*fn(l)-smlm1*p*fn(l+1)/c)/(ggamb*gg1-ff1) + bb1= (ggam2*fb(l)-smlm1*p*fb(l+1)/c)/(ggam2*gg1-ff1) + bb2= (ggam1*fb(l)-smlm1*p*fb(l+1)/c)/(ggam1*gg2-ff2) + do i=1,ns +! write(6,*) '>',i + gz(i,2,2)=g11(i)*aa1 + fz(i,2,2)=f11(i)*aa1 + gj(i,2,2)=g11(i)*bb1+g12(i)*bb2 + fj(i,2,2)=f11(i)*bb1+f12(i)*bb2 + end do + end if + +! write(6,*)sname,2,7 +c + return +c + 1 continue +! write(6,*) sname,1,1 + call dirmago2op(socsc,ce,l,my,vr,br,bopr,dx,xnot,rs,ns, + > g1,f1,gp1,iprpts) +! write(6,*) sname,1,2 +c 1 call dirmago2(socsc,ce,l,my,vr,br,dx,xnot,rs,ns,g1,f1,gp1) +c + jmat(1,1)=fb(l) + jmat(2,2)=fb(l) + nmat(1,1)=p*fn(l) + nmat(2,2)=p*fn(l) +c + if(scale) then + jbmat(1,1)=xl*fb(l)/rs-p*fb(l+1) + jbmat(2,2)=jbmat(1,1) + nbmat(1,1)=xl*p*fn(l)/rs-p*p*fn(l+1) + nbmat(2,2)=nbmat(1,1) + do ii=1,2 + do jj=1,2 + g1mat(ii,jj)=g1(ii,jj,ns)/rs + f1mat(ii,jj)=gp1(ii,jj)/rs +c write(6,'('' gmt reg '',2d15.8)') g1(ii,jj,ns) +c write(6,'('' gpmt reg '',2d15.8)') gp1(ii,jj) + end do + end do + else + jbmat(1,1)=sl*p*fb(l-1)/c + jbmat(2,2)=smlm1*p*fb(l+1)/c + nbmat(1,1)=sl*p*p*fn(l-1)/c + nbmat(2,2)=smlm1*p*p*fn(l+1)/c + do ii=1,2 + do jj=1,2 + g1mat(ii,jj)=g1(ii,jj,ns)/rs + f1mat(ii,jj)=f1(ii,jj,ns)/rs +c write(6,'('' gmt reg '',2d15.8)') g1(ii,jj,ns) +c write(6,'('' fmt reg '',2d15.8)') f1(ii,jj,ns) + end do + end do + end if +c +! write(6,*) sname,1,3 + call repl(x1,g1mat,2,2) + call gjinv(x1,2,2,detl) + call repl(gam1,f1mat,2,2) + call doubmt(gam1,x1,2,2) +c + call repl(x1,gam1,2,2) + call doubmt(x1,jmat,2,2) + call submat(x1,jbmat,2,2) + call repl(a2,x1,2,2) + call gjinv(a2,2,2,detl) + call repl(x2,gam1,2,2) + call doubmt(x2,nmat,2,2) + call submat(x2,nbmat,2,2) + call doubmt(a2,x2,2,2) +! write(6,*) sname,1,4 +c +c This is now the inverse reactance matrix! + do ii=1,2 + do jj=1,2 + tminv(ii,jj)=-a2(ii,jj) + end do + end do +c This is now the inverse t-matrix! + tminv(1,1)=tminv(1,1)+sqrtm1*p + tminv(2,2)=tminv(2,2)+sqrtm1*p +c +! write(6,*) sname,1,5 + if(iflag.eq.0) return +! write(6,*) sname,1,6 + call dirmagi2op(socsc,ce,l,my,vr,br,bopr,dx,xnot,rs,ns, + > g2,f2,gp2,iprpts) +! write(6,*) sname,1,7 +c call dirmagi2(socsc,ce,l,my,vr,br,dx,xnot,rs,ns,g2,f2,gp2) +c + if(scale) then + do ii=1,2 + do jj=1,2 + g2mat(ii,jj)=g2(ii,jj,ns)/rs + f2mat(ii,jj)=gp2(ii,jj)/rs + end do + end do + else + do ii=1,2 + do jj=1,2 + g2mat(ii,jj)=g2(ii,jj,ns)/rs + f2mat(ii,jj)=f2(ii,jj,ns)/rs + end do + end do + end if +c + call repl(x2,g2mat,2,2) + call gjinv(x2,2,2,detl) + call repl(gam2,f2mat,2,2) + call doubmt(gam2,x2,2,2) + gamb(1,1)=jbmat(1,1)/jmat(1,1) + gamb(2,2)=jbmat(2,2)/jmat(2,2) +c + call repl(b2,gam1,2,2) + call doubmt(b2,g2mat,2,2) + call submat(b2,f2mat,2,2) + call gjinv(b2,2,2,detl) + call doubmt(b2,x1,2,2) +c + call repl(a1,gamb,2,2) + call doubmt(a1,g1mat,2,2) + call submat(a1,f1mat,2,2) + call gjinv(a1,2,2,detl) + call repl(x1,gamb,2,2) + call doubmt(x1,nmat,2,2) + call submat(x1,nbmat,2,2) + call doubmt(a1,x1,2,2) +c + call repl(b1,gam2,2,2) + call doubmt(b1,g1mat,2,2) + call submat(b1,f1mat,2,2) + call gjinv(b1,2,2,detl) + call repl(x1,gam2,2,2) + call doubmt(x1,jmat,2,2) + call submat(x1,jbmat,2,2) + call doubmt(b1,x1,2,2) +! write(6,*) sname,1,8 +c + do i=1,ns + call repl(x1,g1(1,1,i),2,2) + call repl(x2,f1(1,1,i),2,2) + call doubmt(x1,a1,2,2) + call doubmt(x2,a1,2,2) + do ii=1,2 + do jj=1,2 + gz(i,ii,jj)=x1(ii,jj) + fz(i,ii,jj)=x2(ii,jj) + end do + end do + call repl(x1,g1(1,1,i),2,2) + call repl(x2,f1(1,1,i),2,2) + call repl(x3,g2(1,1,i),2,2) + call repl(x4,f2(1,1,i),2,2) + call doubmt(x1,b1,2,2) + call doubmt(x2,b1,2,2) + call doubmt(x3,b2,2,2) + call doubmt(x4,b2,2,2) + call addmat(x1,x3,2,2) + call addmat(x2,x4,2,2) + do ii=1,2 + do jj=1,2 + gj(i,ii,jj)=x1(ii,jj) + fj(i,ii,jj)=x2(ii,jj) + end do + end do + end do +c + if(scale) then + call zeroout(fz,8*iprpts) + call zeroout(fj,8*iprpts) + endif +c + return + end diff --git a/src/SingleSite/writeSingleAtomData.hpp b/src/SingleSite/writeSingleAtomData.hpp new file mode 100644 index 000000000..69697791a --- /dev/null +++ b/src/SingleSite/writeSingleAtomData.hpp @@ -0,0 +1,22 @@ +#ifndef WRITESINGLEATOMDATA_H +#define WRITESINGLEATOMDATA_H + +#include +#include "AtomData.hpp" + +int writeSingleAtomData_hdf5(hid_t loc_id, AtomData &atom, int present_atom); + +int writeSingleAtomData_bigcell(const char *fname, AtomData &atom); + +extern "C" +{ +void f_writesingleatomdata_bigcell_(const char *fname_c,int *fname_l, + char *header_c, int *header_l,int *jmt,int *jws, double *xstart, + double *rmt,double *alat,double *efermi, + double *vdif,double *ztotss,double *zcorss, + int *nspin,int *numc,double *xvalws, + double *vr,double *rhotot,double *corden,int *v_dim, + char *atname, double *zsemss, double *zvalss, + double *ec,int *nc,int *lc,int *kc,int *c_dim,int); +}; +#endif diff --git a/src/SingleSite/writeSingleAtomData_bigcell.cpp b/src/SingleSite/writeSingleAtomData_bigcell.cpp new file mode 100644 index 000000000..868ce084d --- /dev/null +++ b/src/SingleSite/writeSingleAtomData_bigcell.cpp @@ -0,0 +1,23 @@ +#include +#include "AtomData.hpp" +#include "writeSingleAtomData.hpp" + +int writeSingleAtomData_bigcell(const char *fname, AtomData &atom) +{ + int fname_l,v_dim,c_dim,header_l; + char atname[4]="xx"; + + fname_l=strlen(fname); + header_l=80; + v_dim=atom.vr.l_dim(); + c_dim=atom.ec.l_dim(); + + f_writesingleatomdata_bigcell_(fname,&fname_l, + atom.header,&header_l,&atom.jmt,&atom.jws,&atom.xstart, + &atom.rmt,&atom.alat,&atom.efermi,&atom.vdif,&atom.ztotss,&atom.zcorss, + &atom.nspin,&atom.numc,atom.xvalws, + &atom.vr(0,0),&atom.rhotot(0,0),&atom.corden(0,0), &v_dim, + atname,&atom.zsemss,&atom.zvalss, + &atom.ec(0,0),&atom.nc(0,0),&atom.lc(0,0),&atom.kc(0,0),&c_dim,2); + return -1; +} diff --git a/src/SingleSite/writeSingleAtomData_hdf5.cpp b/src/SingleSite/writeSingleAtomData_hdf5.cpp new file mode 100644 index 000000000..961eb59c8 --- /dev/null +++ b/src/SingleSite/writeSingleAtomData_hdf5.cpp @@ -0,0 +1,64 @@ +#include +#include "AtomData.hpp" +#include +#include "writeSingleAtomData.hpp" +#include "Main/HDF5io.hpp" + +int writeSingleAtomData_hdf5(hid_t loc_id, AtomData &atom, int present_atom) +{ + char gname[128]; + + // printf("WARNING: Writing of hdf5 potentials not implemented yet!\n"); + write_scalar(loc_id,"PresentAtom",present_atom); + write_scalar(loc_id,"jmt",atom.jmt); + write_scalar(loc_id,"jws",atom.jws); + write_scalar(loc_id,"Nspin",atom.nspin); + write_scalar(loc_id,"NumC",atom.numc); + write_scalar(loc_id,"alat",atom.alat); + write_scalar(loc_id,"Efermi",atom.efermi); + write_scalar(loc_id,"Vdif",atom.vdif); + write_scalar(loc_id,"Ztot",atom.ztotss); + write_scalar(loc_id,"Zcore",atom.zcorss); + write_scalar(loc_id,"Xstart",atom.xstart); + write_scalar(loc_id,"rmt",atom.rmt); + // printf("Wrote Scalars\n"); + write_vector(loc_id,"xvalws",&atom.xvalws[0],atom.nspin); + // printf("Wrote xvalws (%lf %lf)\n",atom.xvalws[0],atom.xvalws[1]); + + for(int ns=0; ns(loc_id,gname,&atom.vr(0,ns),atom.jmt); + //printf("Wrote %s\n",gname); + //return 0; + snprintf(gname,100,"rhotot%1d",ns+1); + write_vector(loc_id,gname,&atom.rhotot(0,ns),atom.jws); + //printf("Wrote %s\n",gname); + if(atom.numc>0) // write core states if they exist + { + snprintf(gname,100,"ec%1d",ns+1); + write_vector(loc_id,gname,&atom.ec(0,ns),atom.numc); + //printf("Wrote %s\n",gname); + snprintf(gname,100,"nc%1d",ns+1); + write_vector(loc_id,gname,&atom.nc(0,ns),atom.numc); + //printf("Wrote %s\n",gname); + snprintf(gname,100,"lc%1d",ns+1); + write_vector(loc_id,gname,&atom.lc(0,ns),atom.numc); + //printf("Wrote %s\n",gname); + snprintf(gname,100,"kc%1d",ns+1); + write_vector(loc_id,gname,&atom.kc(0,ns),atom.numc); + //printf("Wrote %s\n",gname); + } + write_vector(loc_id,"Header",&atom.header[0],80); + //printf("Wrote Header\n"); + for(int j=0; j<100; j++) gname[j]=' '; + write_vector(loc_id,"JTitle",&gname[0],80); + //printf("Wrote JTitle\n",gname); + write_vector(loc_id,"evec",&atom.evec[0],3); + //printf("Wrote evec\n",gname); + } + + + return 0; +} diff --git a/src/Test/Makefile b/src/Test/Makefile new file mode 100644 index 000000000..bfa5e5beb --- /dev/null +++ b/src/Test/Makefile @@ -0,0 +1,13 @@ +all: testPotentialShift + +clean: + rm -f *.o *.a testPotentialShift $(TOP_DIR)/bin/testPotentialShift + +testPotentialShift: testPotentialShift.cpp + $(CXX) $(INC_PATH) -o testPotentialShift testPotentialShift.cpp ../Main/libLSMS.a $(LIBS) $(ADD_LIBS) + cp testPotentialShift $(TOP_DIR)/bin + +%.o : %.cpp + $(CXX) $(INC_PATH) -c -o $@ $< + + diff --git a/src/Test/WriteTMats.cpp b/src/Test/WriteTMats.cpp new file mode 100644 index 000000000..4f3ab7a2e --- /dev/null +++ b/src/Test/WriteTMats.cpp @@ -0,0 +1,150 @@ +#include +#include +#include + +#ifdef _OPENMP +#include +#endif + +#include "lua.h" +#include "lauxlib.h" +#include "lualib.h" + +#include "SystemParameters.hpp" +#include "PotentialIO.hpp" +#include "Communication/distributeAtoms.hpp" +#include "Communication/LSMSCommunication.hpp" +#include "Core/CoreStates.hpp" +#include "Misc/Indices.hpp" +#include "Misc/Coeficients.hpp" +#include "Madelung/Madelung.hpp" +#include "VORPOL/VORPOL.hpp" +#include "EnergyContourIntegration.hpp" +#include "Accelerator/Accelerator.hpp" +#include "calculateChemPot.hpp" + +SphericalHarmonicsCoeficients sphericalHarmonicsCoeficients; +GauntCoeficients gauntCoeficients; +IFactors iFactors; + +void initLSMSLuaInterface(lua_State *L); +int readInput(lua_State *L, LSMSSystemParameters &lsms, CrystalParameters &crystal); +void buildLIZandCommLists(LSMSCommunication &comm, LSMSSystemParameters &lsms, + CrystalParameters &crystal, LocalTypeInfo &local); +void setupVorpol(LSMSSystemParameters &lsms, CrystalParameters &crystal, LocalTypeInfo &local, + SphericalHarmonicsCoeficients &shc); + +int main(int argc, char *argv[]) +{ + LSMSSystemParameters lsms; + LSMSCommunication comm; + CrystalParameters crystal; + LocalTypeInfo local; + + Real eband; + + + lua_State *L=lua_open(); + luaL_openlibs(L); + initLSMSLuaInterface(L); + + initializeCommunication(comm); + + lsms.global.iprpts=1051; + lsms.global.ipcore=15; + lsms.global.setIstop("main"); + lsms.global.iprint=-1; + lsms.ngaussr=10; + lsms.ngaussq=40; + if(comm.rank==0) lsms.global.iprint=0; + + if(comm.rank==0) + { + printf("LSMS_3: Program started\n"); + printf("Using %d MPI processes\n",comm.size); +#ifdef _OPENMP + printf("Using %d OpenMP threads\n",omp_get_max_threads()); +#endif + printf("Reading input file '%s'\n",argv[1]); + + if(luaL_loadfile(L, argv[1]) || lua_pcall(L,0,0,0)) + { + fprintf(stderr,"!! Cannot run input file!!\n"); + exit(1); + } + + if(readInput(L,lsms,crystal)) + { + fprintf(stderr,"!! Something wrong in input file!!\n"); + exit(1); + } + } + + communicateParameters(comm,lsms,crystal); + // printf("maxlmax=%d\n",lsms.maxlmax); + + local.setNumLocal(distributeTypes(crystal, comm)); + local.setGlobalId(comm.rank,crystal); + + lsms.angularMomentumIndices.init(2*crystal.maxlmax); + sphericalHarmonicsCoeficients.init(2*crystal.maxlmax); + + gauntCoeficients.init(lsms,lsms.angularMomentumIndices,sphericalHarmonicsCoeficients); + iFactors.init(lsms,crystal.maxlmax); + + buildLIZandCommLists(comm, lsms, crystal, local); + +// initialize the potential accelerators (GPU) +// we need to know the max. size of the kkr matrix to invert: lsms.n_spin_cant*local.maxNrmat() +// which is only available after building the LIZ + + acceleratorInitialize(lsms.n_spin_cant*local.maxNrmat()); + + +// set maximal number of radial grid points and core states if reading from bigcell file + local.setMaxPts(lsms.global.iprpts); + local.setMaxCore(lsms.global.ipcore); + + if(lsms.global.iprint>=2) + { + printLSMSSystemParameters(stdout,lsms); + printCrystalParameters(stdout,crystal); + } + if(lsms.global.iprint>=1) + { + fprintf(stdout,"LIZ for atom 0 on this node\n"); + printLIZInfo(stdout,local.atom[0]); + printCommunicationInfo(stdout, comm); + } + + + loadPotentials(comm,lsms,crystal,local); + + setupVorpol(lsms,crystal,local,sphericalHarmonicsCoeficients); + +// need to calculate madelung matrices + calculateMadelungMatrices(lsms,crystal,local); + + if(lsms.global.iprint>=1) + { + printLocalTypeInfo(stdout,local); + } + + calculateCoreStates(comm,lsms,local); + if(lsms.global.iprint>=0) + printf("Finished calculateCoreStates(...)\n"); + +// ----------------------------------------------------------------------------- +// MAIN SCF LOOP +// ----------------------------------------------------------------------------- + + energyContourIntegration(comm,lsms,local); + calculateChemPot(comm,lsms,local,eband); + +// ----------------------------------------------------------------------------- + + acceleratorFinalize(); + finalizeCommunication(); + lua_close(L); + return 0; +} diff --git a/src/Test/buildKKRMatrixTest/LIZ_pos.h b/src/Test/buildKKRMatrixTest/LIZ_pos.h new file mode 100644 index 000000000..b328fd463 --- /dev/null +++ b/src/Test/buildKKRMatrixTest/LIZ_pos.h @@ -0,0 +1,344 @@ +void set_LIZ(AtomData & atom) +{ + atom.numLIZ=113; + atom.LIZPos.resize(3,atom.numLIZ); + atom.LIZPos(0,0)=0; + atom.LIZPos(1,0)=0; + atom.LIZPos(2,0)=0; + atom.LIZPos(0,1)=2.71; + atom.LIZPos(1,1)=-2.71; + atom.LIZPos(2,1)=2.71; + atom.LIZPos(0,2)=2.71; + atom.LIZPos(1,2)=-2.71; + atom.LIZPos(2,2)=-2.71; + atom.LIZPos(0,3)=-2.71; + atom.LIZPos(1,3)=-2.71; + atom.LIZPos(2,3)=-2.71; + atom.LIZPos(0,4)=-2.71; + atom.LIZPos(1,4)=2.71; + atom.LIZPos(2,4)=2.71; + atom.LIZPos(0,5)=-2.71; + atom.LIZPos(1,5)=2.71; + atom.LIZPos(2,5)=-2.71; + atom.LIZPos(0,6)=-2.71; + atom.LIZPos(1,6)=-2.71; + atom.LIZPos(2,6)=2.71; + atom.LIZPos(0,7)=2.71; + atom.LIZPos(1,7)=2.71; + atom.LIZPos(2,7)=2.71; + atom.LIZPos(0,8)=2.71; + atom.LIZPos(1,8)=2.71; + atom.LIZPos(2,8)=-2.71; + atom.LIZPos(0,9)=0; + atom.LIZPos(1,9)=-5.42; + atom.LIZPos(2,9)=0; + atom.LIZPos(0,10)=5.42; + atom.LIZPos(1,10)=0; + atom.LIZPos(2,10)=0; + atom.LIZPos(0,11)=0; + atom.LIZPos(1,11)=0; + atom.LIZPos(2,11)=-5.42; + atom.LIZPos(0,12)=0; + atom.LIZPos(1,12)=0; + atom.LIZPos(2,12)=5.42; + atom.LIZPos(0,13)=-5.42; + atom.LIZPos(1,13)=0; + atom.LIZPos(2,13)=0; + atom.LIZPos(0,14)=0; + atom.LIZPos(1,14)=5.42; + atom.LIZPos(2,14)=0; + atom.LIZPos(0,15)=-5.42; + atom.LIZPos(1,15)=0; + atom.LIZPos(2,15)=-5.42; + atom.LIZPos(0,16)=-5.42; + atom.LIZPos(1,16)=-5.42; + atom.LIZPos(2,16)=0; + atom.LIZPos(0,17)=0; + atom.LIZPos(1,17)=-5.42; + atom.LIZPos(2,17)=-5.42; + atom.LIZPos(0,18)=-5.42; + atom.LIZPos(1,18)=0; + atom.LIZPos(2,18)=5.42; + atom.LIZPos(0,19)=-5.42; + atom.LIZPos(1,19)=5.42; + atom.LIZPos(2,19)=0; + atom.LIZPos(0,20)=5.42; + atom.LIZPos(1,20)=-5.42; + atom.LIZPos(2,20)=0; + atom.LIZPos(0,21)=5.42; + atom.LIZPos(1,21)=0; + atom.LIZPos(2,21)=-5.42; + atom.LIZPos(0,22)=0; + atom.LIZPos(1,22)=-5.42; + atom.LIZPos(2,22)=5.42; + atom.LIZPos(0,23)=0; + atom.LIZPos(1,23)=5.42; + atom.LIZPos(2,23)=5.42; + atom.LIZPos(0,24)=5.42; + atom.LIZPos(1,24)=0; + atom.LIZPos(2,24)=5.42; + atom.LIZPos(0,25)=0; + atom.LIZPos(1,25)=5.42; + atom.LIZPos(2,25)=-5.42; + atom.LIZPos(0,26)=5.42; + atom.LIZPos(1,26)=5.42; + atom.LIZPos(2,26)=0; + atom.LIZPos(0,27)=8.13; + atom.LIZPos(1,27)=-2.71; + atom.LIZPos(2,27)=2.71; + atom.LIZPos(0,28)=-2.71; + atom.LIZPos(1,28)=8.13; + atom.LIZPos(2,28)=-2.71; + atom.LIZPos(0,29)=2.71; + atom.LIZPos(1,29)=8.13; + atom.LIZPos(2,29)=-2.71; + atom.LIZPos(0,30)=2.71; + atom.LIZPos(1,30)=8.13; + atom.LIZPos(2,30)=2.71; + atom.LIZPos(0,31)=2.71; + atom.LIZPos(1,31)=2.71; + atom.LIZPos(2,31)=8.13; + atom.LIZPos(0,32)=2.71; + atom.LIZPos(1,32)=2.71; + atom.LIZPos(2,32)=-8.13; + atom.LIZPos(0,33)=-2.71; + atom.LIZPos(1,33)=8.13; + atom.LIZPos(2,33)=2.71; + atom.LIZPos(0,34)=8.13; + atom.LIZPos(1,34)=-2.71; + atom.LIZPos(2,34)=-2.71; + atom.LIZPos(0,35)=2.71; + atom.LIZPos(1,35)=-8.13; + atom.LIZPos(2,35)=-2.71; + atom.LIZPos(0,36)=2.71; + atom.LIZPos(1,36)=-8.13; + atom.LIZPos(2,36)=2.71; + atom.LIZPos(0,37)=2.71; + atom.LIZPos(1,37)=-2.71; + atom.LIZPos(2,37)=8.13; + atom.LIZPos(0,38)=2.71; + atom.LIZPos(1,38)=-2.71; + atom.LIZPos(2,38)=-8.13; + atom.LIZPos(0,39)=-2.71; + atom.LIZPos(1,39)=2.71; + atom.LIZPos(2,39)=8.13; + atom.LIZPos(0,40)=-2.71; + atom.LIZPos(1,40)=2.71; + atom.LIZPos(2,40)=-8.13; + atom.LIZPos(0,41)=-8.13; + atom.LIZPos(1,41)=-2.71; + atom.LIZPos(2,41)=-2.71; + atom.LIZPos(0,42)=-8.13; + atom.LIZPos(1,42)=-2.71; + atom.LIZPos(2,42)=2.71; + atom.LIZPos(0,43)=-8.13; + atom.LIZPos(1,43)=2.71; + atom.LIZPos(2,43)=-2.71; + atom.LIZPos(0,44)=-8.13; + atom.LIZPos(1,44)=2.71; + atom.LIZPos(2,44)=2.71; + atom.LIZPos(0,45)=-2.71; + atom.LIZPos(1,45)=-2.71; + atom.LIZPos(2,45)=8.13; + atom.LIZPos(0,46)=8.13; + atom.LIZPos(1,46)=2.71; + atom.LIZPos(2,46)=2.71; + atom.LIZPos(0,47)=8.13; + atom.LIZPos(1,47)=2.71; + atom.LIZPos(2,47)=-2.71; + atom.LIZPos(0,48)=-2.71; + atom.LIZPos(1,48)=-8.13; + atom.LIZPos(2,48)=-2.71; + atom.LIZPos(0,49)=-2.71; + atom.LIZPos(1,49)=-8.13; + atom.LIZPos(2,49)=2.71; + atom.LIZPos(0,50)=-2.71; + atom.LIZPos(1,50)=-2.71; + atom.LIZPos(2,50)=-8.13; + atom.LIZPos(0,51)=-5.42; + atom.LIZPos(1,51)=5.42; + atom.LIZPos(2,51)=-5.42; + atom.LIZPos(0,52)=5.42; + atom.LIZPos(1,52)=5.42; + atom.LIZPos(2,52)=5.42; + atom.LIZPos(0,53)=5.42; + atom.LIZPos(1,53)=5.42; + atom.LIZPos(2,53)=-5.42; + atom.LIZPos(0,54)=-5.42; + atom.LIZPos(1,54)=-5.42; + atom.LIZPos(2,54)=-5.42; + atom.LIZPos(0,55)=-5.42; + atom.LIZPos(1,55)=5.42; + atom.LIZPos(2,55)=5.42; + atom.LIZPos(0,56)=5.42; + atom.LIZPos(1,56)=-5.42; + atom.LIZPos(2,56)=5.42; + atom.LIZPos(0,57)=5.42; + atom.LIZPos(1,57)=-5.42; + atom.LIZPos(2,57)=-5.42; + atom.LIZPos(0,58)=-5.42; + atom.LIZPos(1,58)=-5.42; + atom.LIZPos(2,58)=5.42; + atom.LIZPos(0,59)=10.84; + atom.LIZPos(1,59)=0; + atom.LIZPos(2,59)=0; + atom.LIZPos(0,60)=0; + atom.LIZPos(1,60)=0; + atom.LIZPos(2,60)=10.84; + atom.LIZPos(0,61)=-10.84; + atom.LIZPos(1,61)=0; + atom.LIZPos(2,61)=0; + atom.LIZPos(0,62)=0; + atom.LIZPos(1,62)=0; + atom.LIZPos(2,62)=-10.84; + atom.LIZPos(0,63)=0; + atom.LIZPos(1,63)=-10.84; + atom.LIZPos(2,63)=0; + atom.LIZPos(0,64)=0; + atom.LIZPos(1,64)=10.84; + atom.LIZPos(2,64)=0; + atom.LIZPos(0,65)=8.13; + atom.LIZPos(1,65)=2.71; + atom.LIZPos(2,65)=8.13; + atom.LIZPos(0,66)=8.13; + atom.LIZPos(1,66)=-8.13; + atom.LIZPos(2,66)=2.71; + atom.LIZPos(0,67)=8.13; + atom.LIZPos(1,67)=-2.71; + atom.LIZPos(2,67)=-8.13; + atom.LIZPos(0,68)=8.13; + atom.LIZPos(1,68)=-8.13; + atom.LIZPos(2,68)=-2.71; + atom.LIZPos(0,69)=8.13; + atom.LIZPos(1,69)=8.13; + atom.LIZPos(2,69)=-2.71; + atom.LIZPos(0,70)=8.13; + atom.LIZPos(1,70)=2.71; + atom.LIZPos(2,70)=-8.13; + atom.LIZPos(0,71)=8.13; + atom.LIZPos(1,71)=8.13; + atom.LIZPos(2,71)=2.71; + atom.LIZPos(0,72)=8.13; + atom.LIZPos(1,72)=-2.71; + atom.LIZPos(2,72)=8.13; + atom.LIZPos(0,73)=-8.13; + atom.LIZPos(1,73)=-8.13; + atom.LIZPos(2,73)=-2.71; + atom.LIZPos(0,74)=2.71; + atom.LIZPos(1,74)=8.13; + atom.LIZPos(2,74)=8.13; + atom.LIZPos(0,75)=2.71; + atom.LIZPos(1,75)=-8.13; + atom.LIZPos(2,75)=-8.13; + atom.LIZPos(0,76)=-8.13; + atom.LIZPos(1,76)=8.13; + atom.LIZPos(2,76)=-2.71; + atom.LIZPos(0,77)=-8.13; + atom.LIZPos(1,77)=8.13; + atom.LIZPos(2,77)=2.71; + atom.LIZPos(0,78)=-2.71; + atom.LIZPos(1,78)=-8.13; + atom.LIZPos(2,78)=-8.13; + atom.LIZPos(0,79)=-8.13; + atom.LIZPos(1,79)=2.71; + atom.LIZPos(2,79)=8.13; + atom.LIZPos(0,80)=-2.71; + atom.LIZPos(1,80)=-8.13; + atom.LIZPos(2,80)=8.13; + atom.LIZPos(0,81)=-2.71; + atom.LIZPos(1,81)=8.13; + atom.LIZPos(2,81)=-8.13; + atom.LIZPos(0,82)=-2.71; + atom.LIZPos(1,82)=8.13; + atom.LIZPos(2,82)=8.13; + atom.LIZPos(0,83)=-8.13; + atom.LIZPos(1,83)=2.71; + atom.LIZPos(2,83)=-8.13; + atom.LIZPos(0,84)=-8.13; + atom.LIZPos(1,84)=-2.71; + atom.LIZPos(2,84)=8.13; + atom.LIZPos(0,85)=-8.13; + atom.LIZPos(1,85)=-2.71; + atom.LIZPos(2,85)=-8.13; + atom.LIZPos(0,86)=2.71; + atom.LIZPos(1,86)=-8.13; + atom.LIZPos(2,86)=8.13; + atom.LIZPos(0,87)=-8.13; + atom.LIZPos(1,87)=-8.13; + atom.LIZPos(2,87)=2.71; + atom.LIZPos(0,88)=2.71; + atom.LIZPos(1,88)=8.13; + atom.LIZPos(2,88)=-8.13; + atom.LIZPos(0,89)=-10.84; + atom.LIZPos(1,89)=-5.42; + atom.LIZPos(2,89)=0; + atom.LIZPos(0,90)=10.84; + atom.LIZPos(1,90)=5.42; + atom.LIZPos(2,90)=0; + atom.LIZPos(0,91)=5.42; + atom.LIZPos(1,91)=10.84; + atom.LIZPos(2,91)=0; + atom.LIZPos(0,92)=-10.84; + atom.LIZPos(1,92)=0; + atom.LIZPos(2,92)=-5.42; + atom.LIZPos(0,93)=5.42; + atom.LIZPos(1,93)=0; + atom.LIZPos(2,93)=10.84; + atom.LIZPos(0,94)=10.84; + atom.LIZPos(1,94)=-5.42; + atom.LIZPos(2,94)=0; + atom.LIZPos(0,95)=-10.84; + atom.LIZPos(1,95)=0; + atom.LIZPos(2,95)=5.42; + atom.LIZPos(0,96)=10.84; + atom.LIZPos(1,96)=0; + atom.LIZPos(2,96)=-5.42; + atom.LIZPos(0,97)=10.84; + atom.LIZPos(1,97)=0; + atom.LIZPos(2,97)=5.42; + atom.LIZPos(0,98)=-10.84; + atom.LIZPos(1,98)=5.42; + atom.LIZPos(2,98)=0; + atom.LIZPos(0,99)=-5.42; + atom.LIZPos(1,99)=-10.84; + atom.LIZPos(2,99)=0; + atom.LIZPos(0,100)=5.42; + atom.LIZPos(1,100)=0; + atom.LIZPos(2,100)=-10.84; + atom.LIZPos(0,101)=-5.42; + atom.LIZPos(1,101)=0; + atom.LIZPos(2,101)=-10.84; + atom.LIZPos(0,102)=-5.42; + atom.LIZPos(1,102)=0; + atom.LIZPos(2,102)=10.84; + atom.LIZPos(0,103)=-5.42; + atom.LIZPos(1,103)=10.84; + atom.LIZPos(2,103)=0; + atom.LIZPos(0,104)=0; + atom.LIZPos(1,104)=-10.84; + atom.LIZPos(2,104)=-5.42; + atom.LIZPos(0,105)=5.42; + atom.LIZPos(1,105)=-10.84; + atom.LIZPos(2,105)=0; + atom.LIZPos(0,106)=0; + atom.LIZPos(1,106)=-10.84; + atom.LIZPos(2,106)=5.42; + atom.LIZPos(0,107)=0; + atom.LIZPos(1,107)=10.84; + atom.LIZPos(2,107)=5.42; + atom.LIZPos(0,108)=0; + atom.LIZPos(1,108)=10.84; + atom.LIZPos(2,108)=-5.42; + atom.LIZPos(0,109)=0; + atom.LIZPos(1,109)=5.42; + atom.LIZPos(2,109)=10.84; + atom.LIZPos(0,110)=0; + atom.LIZPos(1,110)=-5.42; + atom.LIZPos(2,110)=-10.84; + atom.LIZPos(0,111)=0; + atom.LIZPos(1,111)=-5.42; + atom.LIZPos(2,111)=10.84; + atom.LIZPos(0,112)=0; + atom.LIZPos(1,112)=5.42; + atom.LIZPos(2,112)=-10.84; +} diff --git a/src/Test/buildKKRMatrixTest/Makefile b/src/Test/buildKKRMatrixTest/Makefile new file mode 100644 index 000000000..aa9772106 --- /dev/null +++ b/src/Test/buildKKRMatrixTest/Makefile @@ -0,0 +1,72 @@ + +export TOP_DIR = $(shell pwd)/../../.. +export INC_PATH = +export LIBS := + +include $(TOP_DIR)/architecture.h + +export INC_PATH += -I $(TOP_DIR)/include -I $(TOP_DIR)/src +export MISC = $(TOP_DIR)/src/Misc + +# COEFICIENTS = cgaunt_c.o ifacts_c.o gauleg.o plglmax.o fstop.o zeroout.o \ +# gaunt.o quadrature.o associatedLegendreFunction.o +COEFICIENTS = cgaunt_c.o ifacts_c.o plglmax.o fstop.o zeroout.o \ + gaunt.o quadrature.o associatedLegendreFunction.o + +all: buildKKRMatrixTest + +clean: + rm -f *.o buildKKRMatrixTest + cd ../../../CBLAS && $(MAKE) clean + +cgaunt_c.o: $(MISC)/cgaunt_c.f + $(F77) -c $(MISC)/cgaunt_c.f +ifacts_c.o: $(MISC)/ifacts_c.f + $(F77) -c $(MISC)/ifacts_c.f +#gauleg.o: $(MISC)/gauleg.f +# $(F77) -c $(MISC)/gauleg.f +quadrature.o: quadrature.cpp + $(CXX) -c quadrature.cpp +plglmax.o: $(MISC)/plglmax.f + $(F77) -c $(MISC)/plglmax.f +associatedLegendreFunction.o: associatedLegendreFunction.cpp associatedLegendreFunction.hpp + $(CXX) -c associatedLegendreFunction.cpp +fstop.o: $(MISC)/fstop.f + $(F77) -c $(MISC)/fstop.f +zeroout.o: $(MISC)/zeroout.f + $(F77) -c $(MISC)/zeroout.f +gaunt.o: $(MISC)/gaunt.f + $(F77) -c $(MISC)/gaunt.f + +quadrature.o: quadrature.cpp + $(CXX) -c quadrature.cpp + +associatedLegendreFunction.o: $(MISC)/associatedLegendreFunction.cpp + $(CXX) -c $(MISC)/associatedLegendreFunction.cpp + +makegij_c.o: makegij_c.f + $(F77) -c makegij_c.f +setgij.o: setgij.f + $(F77) -c setgij.f + +makegij_new.o: makegij_new.cpp + $(CXX) $(INC_PATH) -c makegij_new.cpp +plglmax_new.o: plglmax_new.cpp + $(CXX) $(INC_PATH) -c plglmax_new.cpp + +buildKKRMatrix_original.o: buildKKRMatrix_original.cpp + $(CXX) $(INC_PATH) -c buildKKRMatrix_original.cpp +buildKKRMatrix_nrel_ns2.o: buildKKRMatrix_nrel_ns2.cpp + $(CXX) $(INC_PATH) -c buildKKRMatrix_nrel_ns2.cpp + +buildKKRMatrixTest: buildKKRMatrixTest.cpp $(COEFICIENTS) \ + buildKKRMatrix_original.o makegij_c.o setgij.o \ + buildKKRMatrix_nrel_ns2.o makegij_new.o plglmax_new.o \ + CBLAS_target + $(CXX) $(INC_PATH) -o buildKKRMatrixTest buildKKRMatrixTest.cpp \ + buildKKRMatrix_original.o buildKKRMatrix_nrel_ns2.o \ + makegij_c.o setgij.o \ + $(COEFICIENTS) $(ADD_LIBS) $(LIBS) + +CBLAS_target: + cd ../../../CBLAS && $(MAKE) alllib diff --git a/src/Test/buildKKRMatrixTest/Real.hpp b/src/Test/buildKKRMatrixTest/Real.hpp new file mode 100644 index 000000000..2746e86de --- /dev/null +++ b/src/Test/buildKKRMatrixTest/Real.hpp @@ -0,0 +1,56 @@ +#ifndef LSMS_REAL_H +#define LSMS_REAL_H + +#include + +typedef double Real; + +/* + +#include +#include "TypeTraits.hpp" + +#ifndef __CUDACC__ +#include + + +template<> +class TypeTraits +{ +// static hid_t hdf5_type; +public: + inline static MPI_Datatype mpiType(void) {return MPI_DOUBLE;} +// inline static hid_t hdf5Type(void) { return hdf5_type;} + inline static hid_t hdf5Type(void) { return H5T_NATIVE_DOUBLE;} +}; +// hid_t TypeTraits::hdf5_type = H5Tcopy(H5T_NATIVE_DOUBLE); + +template<> +class TypeTraits +{ +// static hid_t hdf5_type; +public: + inline static MPI_Datatype mpiType(void) {return MPI_INT;} + inline static hid_t hdf5Type(void) { return H5T_NATIVE_INT;} +}; +// hid_t TypeTraits::hdf5_type = H5Tcopy(H5T_NATIVE_INT); + +template<> +class TypeTraits +{ +// static hid_t hdf5_type; +public: + inline static MPI_Datatype mpiType(void) {return MPI_CHAR;} + inline static hid_t hdf5Type(void) { return H5T_NATIVE_CHAR;} +}; +// hid_t TypeTraits::hdf5_type = H5Tcopy(H5T_NATIVE_CHAR); + +#endif + +*/ +#endif + + +#ifndef M_PI +#define M_PI 3.14159265358979323846264338327950288419716939937510 +#endif diff --git a/src/Test/buildKKRMatrixTest/TestStructures.hpp b/src/Test/buildKKRMatrixTest/TestStructures.hpp new file mode 100644 index 000000000..ba22446bc --- /dev/null +++ b/src/Test/buildKKRMatrixTest/TestStructures.hpp @@ -0,0 +1,90 @@ +#ifndef BKKRM_TEST_STRUCTURES_HPP +#define BKKRM_TEST_STRUCTURES_HPP + +#include "Misc/Indices.hpp" +/* +// from Misc/Indices.hpp +class AngularMomentumIndices { +public: + int lmax,ndlj,ndlm; + std::vector lofk,mofk,lofj,mofj; + + void init(int _lmax) + { + lmax=_lmax; + ndlj=(lmax+1)*(lmax+1); + ndlm=((lmax+1)*(lmax+2))/2; + mofk.resize(ndlj); lofk.resize(ndlj); + mofj.resize(ndlm); lofj.resize(ndlm); + int j=0; + int k=0; + for(int l=0; l<=lmax; l++) + { + for(int m=0; m<=l; m++) + { + lofj[j]=l; + mofj[j++]=m; + } + for(int m=-l; m<=l; m++) + { + + lofk[k]=l; + mofk[k]=m; + // printf("k,l,m: %d %d %d, lofk,mofk:%d %d\n",k,l,m,lofk[k],mofk[k]); + k++; + } + } + // printf("k=%d\n",k); + } +}; +*/ + +// only the needed parts from Main/SystemParameters.hpp: +class LSMSGlobals { +public: + void setIstop(const char *c){strncpy(istop,c,32); for(int i=strlen(c); i<32; i++) istop[i]=' ';} + bool checkIstop(const char *c){return (strncmp(istop,c,32)==0);} +// ... + int iprint; +// ... + char istop[32]; +}; + +class LSMSSystemParameters { +public: +// ... + int nrel_rel; + int n_spin_cant; +// ... + int maxlmax; + LSMSGlobals global; + AngularMomentumIndices angularMomentumIndices; +// ... +}; + +class LocalTypeInfo { +public: +// ... + int lDimTmatStore; + Matrix tmatStore; +// ... +}; + + +// only the needed parts from SingleSite/AtomData.hpp: +class AtomData { +public: +// ... +// Local Interaction Zone + int numLIZ; + std::vector LIZGlobalIdx, LIZStoreIdx, LIZlmax; + int nrmat; // sum (LIZlmax+1)^2 + std::vector LIZDist; + Matrix LIZPos; +// ... +// General Data + int lmax,kkrsz; +// ... +}; + +#endif diff --git a/src/Test/buildKKRMatrixTest/TypeTraits.hpp b/src/Test/buildKKRMatrixTest/TypeTraits.hpp new file mode 100644 index 000000000..702fdf9a9 --- /dev/null +++ b/src/Test/buildKKRMatrixTest/TypeTraits.hpp @@ -0,0 +1,7 @@ +#ifndef LSMS_TYPE_TRAITS_H +#define LSMS_TYPE_TRAITS_H + +template +class TypeTraits; + +#endif diff --git a/src/Test/buildKKRMatrixTest/associatedLegendreFunction.cpp b/src/Test/buildKKRMatrixTest/associatedLegendreFunction.cpp new file mode 100644 index 000000000..68d16d042 --- /dev/null +++ b/src/Test/buildKKRMatrixTest/associatedLegendreFunction.cpp @@ -0,0 +1,29 @@ +// routines to calculate the associated Legendre functions P_{lm} needed to calculate +// spherical harmonics +// This also provides the coeficients c_{lm} to calculate spherical harmonics: +// Y_{lm}(\theta, \phi) = c_{lm} P_{lm}(\cos\theta) e^{im\phi} +// +// The new routine calculates normalized versions of the Legendre polynomials +// such that +// Y_{lm}(\theta, \phi) = \sqrt{1/2} \bar{P}_{lm}(\cos\theta) e^{im\phi} +// +// i.e. c_{lm} = \sqrt{1/2} +// + +#include +#include "associatedLegendreFunction.hpp" + +extern "C" { +void plm_normalized_(int *lmax, double *x, double *plm) +{ + associatedLegendreFunctionNormalized(*x, *lmax, plm); +} + +void ylm_coefficients_(int *lmax, double *clm) +{ + for(int i=0; i<((*lmax) +1)*((*lmax) +2)/2; i++) + clm[i]=1.0; + // clm[i]=std::sqrt(0.5); +} +} + diff --git a/src/Test/buildKKRMatrixTest/associatedLegendreFunction.hpp b/src/Test/buildKKRMatrixTest/associatedLegendreFunction.hpp new file mode 100644 index 000000000..64ea5337a --- /dev/null +++ b/src/Test/buildKKRMatrixTest/associatedLegendreFunction.hpp @@ -0,0 +1,90 @@ +// calculate the associated Legendre Function +// P_{lm}(x) = \sqrt{2 (2l+1)\frac{(l-m)!}{(l+m)!}} x^m \frac{d^m}{dx^m} P_l(x) +// where P_l(x) is the Legendre Polynomial of degree l +// +#ifndef ASSOCIATED_LEGENDRE_FUNCTIONS_HPP +#define ASSOCIATED_LEGENDRE_FUNCTIONS_HPP +#include + +// for the normalized associated Legendre functions \bar{P}_{lm} +// such that the spherical harmonics are: +// Y_lm(\theta, \phi) = \bar{P}_{lm}(\cos \theta) e^{i m \phi} +// use the recursion relation: +// P_{00}(x) = \sqrt{1/4\pi} +// +// i.e \bar{P}_{lm}=\sqrt{\frac{(2l+1)(l-m)!}{4\pi(l+m)!}} P_{lm} +// +// Plm is a 1-d array that will contain all the values of P_{lm}(x) from P_{00} to P_{l_{max} l_{max}} +// the index into this array is Plm[l*(l+1)/2 + m] +// + +inline int plmIdx(int l, int m) +{ return l*(l+1)/2+m; } + +template // R has to be real data type (default double) +inline void associatedLegendreFunctionNormalized(R x, int lmax, R *Plm) +{ + const R pi = std::acos(-R(1)); + // y = \sqrt{1-x^2} + R y = std::sqrt(R(1)-x*x); + // initialize the first entry + // Plm[0]=std::sqrt(R(1)/(R(2)*pi)); + Plm[0]=std::sqrt(R(1)/(R(4)*pi)); + + if(lmax<1) return; + + for(int m=1; m<=lmax; m++) + { + // \bar{P}_{mm} = - \sqrt{\frac{2m+1}{2m}} y \bar{P}_{m-1, m-1} + Plm[plmIdx(m,m)] = - std::sqrt(R(2*m+1)/R(2*m)) * y * Plm[plmIdx(m-1,m-1)]; + // \bar{P}_{mm-1} = \sqrt{2 m + 1} x \bar{P}_{m-1, m-1} + Plm[plmIdx(m,m-1)] = std::sqrt(R(2*m+1)) * x * Plm[plmIdx(m-1,m-1)]; + } + + for(int m=0; m // R has to be real data type (default double) +void associatedLegendreFunction(R x, int lmax, R *Plm) +{ + // y = \sqrt{1-x^2} + R y = std::sqrt(R(1)-x*x); + // initialize the first entry + Plm[0]=R(1); + if(lmax<1) return; + Plm[1]=x; + Plm[2]=-y; + for(int m=2; m +#include +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" + +#include "TestStructures.hpp" +#include "Misc/Coeficients.hpp" + +#include "LIZ_pos.h" + +SphericalHarmonicsCoeficients sphericalHarmonicsCoeficients; +GauntCoeficients gauntCoeficients; +IFactors iFactors; + +void buildKKRMatrix_orig(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, + Complex energy, Complex prel, Matrix &m); +void buildKKRMatrix_nrel_ns2(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, + Complex energy, Complex prel, Matrix &m); + +const double cphot=274.072; +const double c2inv=1.0/(cphot*cphot); + +void set_tmat(Complex energy,Matrix &tmat) +{ + energy=std::complex(-0.2,0.1); + + for(int i=0; i<32; i++) + for(int j=0; j<32; j++) + tmat(i,j)=0.0; + +// spin up +// l=0 + tmat(0,0)=std::complex( 2.72989453e-01, 4.75691304e-02); +// l=1 + tmat(1,1)=std::complex(-1.53433276e-02, 9.50739941e-03); + tmat(3,3)=tmat(2,2)=tmat(1,1); +// l=2 + tmat(4,4)=std::complex(-1.23189965e-02, 1.45766627e-02); + tmat(8,8)=tmat(7,7)=tmat(6,6)=tmat(5,5)=tmat(4,4); +// l=3 + tmat(9,9)=std::complex( 1.53919816e-05,-1.07135429e-04); + tmat(15,15)=tmat(14,14)=tmat(13,13)=tmat(12,12)=tmat(11,11)=tmat(10,10)=tmat(9,9); +// spin down +// l=0 + tmat(16,16)=std::complex( 4.51280708e-01, 2.16447659e-02); +// l=1 + tmat(17,17)=std::complex(-3.04540765e-02, 1.86224585e-02); + tmat(19,19)=tmat(18,18)=tmat(17,17); +// l=2 + tmat(20,20)=std::complex(-1.00226432e-02, 1.24349804e-02); + tmat(24,24)=tmat(23,23)=tmat(22,22)=tmat(21,21)=tmat(20,20); +// l=3 + tmat(25,25)=std::complex( 1.49731043e-05,-1.06213516e-04); + tmat(31,31)=tmat(30,30)=tmat(29,29)=tmat(28,28)=tmat(27,27)=tmat(26,26)=tmat(25,25); +} + +void set_atom(AtomData &atom) +{ + atom.kkrsz=(atom.lmax+1)*(atom.lmax+1); + set_LIZ(atom); + atom.nrmat=0; + atom.LIZStoreIdx.resize(atom.numLIZ); + atom.LIZlmax.resize(atom.numLIZ); + for(int i=0; i tmat(32,32); + LSMSSystemParameters lsms; + LocalTypeInfo local; + AtomData atom; + Matrix m; + + atom.lmax=lsms.maxlmax=3; + lsms.global.iprint=0; + lsms.global.setIstop("main"); + lsms.nrel_rel=0; + lsms.n_spin_cant=2; + + lsms.angularMomentumIndices.init(2*lsms.maxlmax); + sphericalHarmonicsCoeficients.init(2*lsms.maxlmax); + gauntCoeficients.init(lsms,lsms.angularMomentumIndices,sphericalHarmonicsCoeficients); + iFactors.init(lsms,lsms.maxlmax); + + local.lDimTmatStore=32; + local.tmatStore.resize(local.lDimTmatStore*local.lDimTmatStore,1); + set_tmat(energy,tmat); + for(int i=0; i<32*32; i++) + local.tmatStore(i,0)=tmat[i]; + Complex prel=std::sqrt(energy*(1.0+energy*c2inv)); + + set_atom(atom); + + m.resize(atom.nrmat*lsms.n_spin_cant,atom.nrmat*lsms.n_spin_cant); + + if(argc<2) + { + printf("Usage: buildKKRMatrixTest c|n|o [loop_count]\n"); + printf(" c - compare old and new construction results\n"); + printf(" n - time new matrix construction\n"); + printf(" o - time old matrix construction\n"); + exit(0); + } + + double t0, t1; + if(argc>1 && *argv[1]=='c') + { + Matrix m1; + printf("Comparing matrices\n"); + m1.resize(atom.nrmat*lsms.n_spin_cant,atom.nrmat*lsms.n_spin_cant); + printf("Running new version "); + t0 = omp_get_wtime(); + buildKKRMatrix_nrel_ns2(lsms, local, atom, energy, prel,m); + t1 = omp_get_wtime(); + printf(" time: %lf seconds.\nRunning old version ", t1-t0); + t0 = omp_get_wtime(); + buildKKRMatrix_orig(lsms, local, atom, energy, prel,m1); + t1 = omp_get_wtime(); + printf(" time: %lf seconds.\n", t1-t0); + for(int i=0; i1.0e-10) printf("m(i,j)!=m1(i,j): i=%d, j=%d, m(i,j)=(%lg,%lg), m1(i,j)=(%lg,%lg) d=%lg rd=%lg\n", + i,j,std::real(m(i,j)),std::imag(m(i,j)),std::real(m1(i,j)),std::imag(m1(i,j)), + d,rd); + } + } else if(argc>1 && *argv[1]=='n') { + int loop_count=10; + if(argc>2) loop_count=atoi(argv[2]); + printf("Timing new matrix construction\n loop_count=%d ",loop_count); + t0 = omp_get_wtime(); + for(int i=0; i2) loop_count=atoi(argv[2]); + printf("Timing old matrix construction\n loop_count=%d ",loop_count); + t0 = omp_get_wtime(); + for(int i=0; i +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" + +#include "TestStructures.hpp" +#include "Misc/Coeficients.hpp" +#include "associatedLegendreFunction.hpp" + +#include + +// #define USE_ALLOCA +// #define INLINE_PLGLMAX +// #define INLINE_MAKEGIJ + +void plglmax_new(int lmax, Real x, Real*plm); + +#include "makegij_new.cpp" + +void buildKKRMatrix_nrel_ns2(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, + Complex energy, Complex prel, Matrix &m) +{ +// make sure that lsms.n_spin_cant == 2! + if(lsms.n_spin_cant!=2) + { + printf("lsms.n_spin_cant!=2 in buildKKRMatrix_nrel_ns2\n"); + exit(1); + } + + Real rij[3]; + + int lmax=lsms.maxlmax; + int kkrsz=(lmax+1)*(lmax+1); + int kkrsz_ns=2*kkrsz; // lsms.n_spin_cant + int nrmat_ns=2*atom.nrmat; // lsms.n_spin_cant + int nrst,ncst; + +#ifdef USE_ALLOCA + Complex *gij=(Complex *)alloca(kkrsz*kkrsz*sizeof(Complex)); + Real *sinmp = (Real *)alloca(sizeof(Real)*(2*lmax+1)); + Real *cosmp = (Real *)alloca(sizeof(Real)*(2*lmax+1)); + Real *plm = (Real *)alloca(sizeof(Real)*lsms.angularMomentumIndices.ndlm); + Complex *hfn = (Complex *)alloca(sizeof(Complex)*(2*lmax+1)); + Complex *dlm = (Complex *)alloca(sizeof(Complex)*lsms.angularMomentumIndices.ndlj); + Complex *bgij = (Complex *)alloca(sizeof(Complex)*4*kkrsz*kkrsz); + Complex *tmat_n = (Complex *)alloca(sizeof(Complex)*atom.kkrsz*atom.kkrsz*4); +#else + Complex *gij = new Complex[kkrsz*kkrsz]; + Real *sinmp = new Real[2*lmax+1]; + Real *cosmp = new Real[2*lmax+1]; + Real *plm = new Real[lsms.angularMomentumIndices.ndlm]; + Complex *hfn = new Complex[2*lmax+1]; + Complex *dlm = new Complex[lsms.angularMomentumIndices.ndlj]; + Complex *bgij = new Complex[4*kkrsz*kkrsz]; + Complex *tmat_n = new Complex[atom.kkrsz*atom.kkrsz*4]; +#endif + + const Complex cmone=-1.0; + const Complex czero=0.0; + + Real pi4=4.0*2.0*std::asin(1.0); + + for(int i=0; i(0.0,1.0); + const Real ptol=1.0e-6; + + int lend=lmaxi+lmaxj; + + Real rmag=std::sqrt(rij[0]*rij[0]+rij[1]*rij[1]+rij[2]*rij[2]); + + if(std::abs(prel)==0.0) + { +// if prel is zero then we calculate Gij for multipole Coulomb interaction. + hfn[0]=1.0/rmag; + for(int l=1; l<=lend; l++) + { + hfn[l]=sqrtm1*(2.0*l-1)*hfn[l-1]/rmag; + } + } else { + Complex z=prel*rmag; + hfn[0]=-sqrtm1; + hfn[1]=-1.0-sqrtm1/z; + for(int l=1; l(costheta, lend, plm); +// associatedLegendreFunction(costheta, lend, plm); +#endif + + int ndlm_local=(lend+1)*(lend+2)/2; + if(ndlm_local>ndlm) + { + printf("MAKEGIJ:: ndlm incorrect!\n"); + printf("ndlm=%d\nndlm_local=%d\n",ndlm,ndlm_local); + exit(1); + } + for(int j=0;jptol) + { + cosmp[1]=rij[0]/pmag; + sinmp[1]=rij[1]/pmag; + } else { + cosmp[1]=0.0; + sinmp[1]=0.0; + } + for(int m=2; m<=lend; m++) + { + cosmp[m]=cosmp[m-1]*cosmp[1]-sinmp[m-1]*sinmp[1]; + sinmp[m]=sinmp[m-1]*cosmp[1]+cosmp[m-1]*sinmp[1]; + } + + int j=0; + for(int l=0; l<=lend; l++) + { + int ll=l*(l+1); + j=ll; + ll=ll/2; + Real m1m=1.0; + dlm[j]= hfn[l]*plm[ll]; + for(int m=1; m<=l; m++) + { + m1m=-m1m; + Complex fac=plm[ll+m]*std::complex(cosmp[m],sinmp[m]); + dlm[j-m]= hfn[l]*m1m*fac; + dlm[j+m]= hfn[l]*std::conj(fac); + } + } + for(int i=0; i=llow;l3-=2) + { + int j=l3*(l3+1)+m3; + gij[lm2+lm1*kkri] = gij[lm2+lm1*kkri]+ gauntCoeficients.cgnt(l3/2,lm1,lm2)*dlm[j]; + } + gij[lm2+lm1*kkri]=pi4*iFactors.illp(lm2,lm1)*gij[lm2+lm1*kkri]; + } + } +} +#endif + + Complex psq=prel*prel; + +// for(int i=0; i +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" + +#include "TestStructures.hpp" +#include "Misc/Coeficients.hpp" + +#include + +#ifdef CRAYPAT +#include +#endif + +extern "C" +{ + void write_kkrmat_(Complex *a,int *n,int *lda,Complex *e); + + void makegij_(int *lmaxi,int *kkri,int *lmaxj,int *kkrj, + int *lmax,int *kkrsz,int *ndlj,int *ndlm, + Complex *prel,double *rij,double *sinmp,double *cosmp, + double *clm,double *plm,double *cgnt,int *lmax_cg,int *lofk,int *mofk, + Complex *ilp1,Complex *illp, + Complex *hfn,Complex *dlm,Complex *gij, + double *pi4,int *iprint,char *istop,int len_sitop); + + void setgij_(Complex *gij,Complex *bgij,int *kkr1,int *kkr1_ns,int *kkr2,int *kkr2_ns, + int *n_spin_cant,int *nrel_rel,Complex *psq,Complex *energy); +}; + +// #define SYNTHETIC_MATRIX +// #define WRITE_GIJ + +#define USE_ALLOCA + +void buildKKRMatrix_orig(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, Complex energy, Complex prel, Matrix &m) +{ +#ifdef CRAYPAT +PAT_region_begin(1,"buildKKRMatrix init"); +#endif + Real rij[3]; + + int lmax=lsms.maxlmax; + int kkrsz=(lmax+1)*(lmax+1); + int kkrsz_ns=kkrsz*lsms.n_spin_cant; + int nrmat_ns=lsms.n_spin_cant*atom.nrmat; + int nrst,ncst; + +#ifdef USE_ALLOCA + Complex *gij=(Complex *)alloca(kkrsz*kkrsz*sizeof(Complex)); + Real *sinmp = (Real *)alloca(sizeof(Real)*(2*lmax+1)); + Real *cosmp = (Real *)alloca(sizeof(Real)*(2*lmax+1)); + Real *plm = (Real *)alloca(sizeof(Real)*lsms.angularMomentumIndices.ndlm); + Complex *hfn = (Complex *)alloca(sizeof(Complex)*(2*lmax+1)); + Complex *dlm = (Complex *)alloca(sizeof(Complex)*lsms.angularMomentumIndices.ndlj); + Complex *bgij = (Complex *)alloca(sizeof(Complex)*4*kkrsz*kkrsz); + Complex *tmat_n = (Complex *)alloca(sizeof(Complex)*atom.kkrsz*atom.kkrsz*4); +#else + Complex *gij = new Complex[kkrsz*kkrsz]; + Real *sinmp = new Real[2*lmax+1]; + Real *cosmp = new Real[2*lmax+1]; + Real *plm = new Real[lsms.angularMomentumIndices.ndlm]; + Complex *hfn = new Complex[2*lmax+1]; + Complex *dlm = new Complex[lsms.angularMomentumIndices.ndlj]; + Complex *bgij = new Complex[4*kkrsz*kkrsz]; + Complex *tmat_n = new Complex[atom.kkrsz*atom.kkrsz*4]; +#endif + + const Complex cmone=-1.0; + const Complex czero=0.0; + + Real pi4=4.0*2.0*std::asin(1.0); + + for(int i=0; i=1) + { + printf("first t Matrix:\n"); + for(int i=0; i Gij_full(nrmat_ns,nrmat_ns); + for(int i=0; i=0) + { + FILE *f1=fopen("kkrmat.out","w"); + FILE *f2=fopen("kkrmat.pattern","w"); + for(int i=0; i0 +// the algorithm follows +// +// David H. Bailey, Karthik Jeyabalan and Xiaoye S. Li +// "A Comparison of Three High-Precision Quadrature Schemes" +// Experimental Mathematics 14, 317-329 (2005). +// + +#include + +template // R is a real type e.g. double +void calculateGaussLegendrePoints(R *x, R *w, int n, R xLeft = -1.0, R xRight = +1.0) +{ + const R pi = std::acos(-R(1)); + + R Pk[n], PkMinus1[n], PkPlus1[n]; // the Legendre polynomials at points x[i] + R Ppn[n]; // derivative of P_n(x_i) + R dX[n]; // correction values for the Newton iteration + + R xHalfWidth = 0.5*(xRight - xLeft); + R xMidpoint = 0.5*(xRight+xLeft); + + // the x[i] are the roots of the nth degree Legendre Polynomial P_n(x) + // we search these using a Newton iteration with starting guess + // x[i] ~ cos(\pi (j - 1/4) / (n + 1/2)) + + for(int i=0; i lmax,kkrsz,ndlj,ndlm, + > prel,rij,sinmp,cosmp, + > clm,plm,cgnt,lmax_cg,lofk,mofk, + > ilp1,illp, + > hfn,dlm,gij, + > pi4,iprint,istop) +c ============================================================== +c + implicit none +c + character sname*32 + character istop*32 +c + integer lmaxi + integer lmaxj + integer lend + integer kkri + integer kkrj + integer lmax,lmax_cg + integer kkrsz + integer ndlj + integer ndlm,ndlm_local + integer lofk(ndlj) + integer mofk(ndlj) + integer l,ll + integer l1 + integer l2 + integer m + integer ma + integer m1 + integer m2 + integer lm1 + integer lm2 + integer l3,m3,llow + integer j + integer iprint +c + real*8 rij(3) + real*8 sinmp(0:lmaxi+lmaxj) + real*8 cosmp(0:lmaxi+lmaxj) + real*8 clm(ndlm) + real*8 plm(ndlm) +! original definition of cgnt in LSMS_1 +! real*8 cgnt(lmax+1,kkrsz,kkrsz) + real*8 cgnt(lmax_cg+1,(lmax_cg+1)**2,(lmax_cg+1)**2) + real*8 pi4 + real*8 rmag + real*8 pmag + real*8 costheta + real*8 m1m + real*8 ptol + real*8 zero + real*8 one +c + complex*16 prel + complex*16 ilp1(0:lmaxi+lmaxj) +! original definition of illp in LSMS_1 +! complex*16 illp(kkrsz,kkrsz) + complex*16 illp((lmax+1)**2,kkrsz) + complex*16 hfn(0:lmaxi+lmaxj) + complex*16 dlm(ndlj) + complex*16 gij(kkri,kkrj) + complex*16 z + complex*16 fac + complex*16 sqrtm1 + complex*16 czero + complex*16 cone +c + parameter (sqrtm1=(0.0d0,1.0d0)) + parameter (czero =(0.0d0,0.0d0)) + parameter (cone =(1.0d0,0.0d0)) + parameter (ptol =1.0d-06) + parameter (zero =0.0d0) + parameter (one =1.0d0) + parameter (sname ='makegij') +c +c ***************************************************************** +c +c +c ij l+1 m -> * +c D [E] = -i * sqrt(E) * h [sqrt(E)*R ] * Y [R ] +c L l ij l ij +c +c +c -l+1 m -> * +c = -i * sqrt(E) * h [sqrt(E)*R ] * Y [-R ] +c l ij l ij +c +c The extra factor (-1)^m removed by xgz July 97 from plm (plglmax_c.f) +c to make Ylm consistent with Numerical Recipes. +c +c m [ (2*l+1)*(l-|m|)!] m +c Y = sqrt[-----------------]*P [cos(theta)]*exp(i*m*phi) +c l [ 4*pi*(l+|m|)! ] l +c +c for m>=0 +c +c m m -m * +c Y [theta,phi] = (-1) Y [theta,phi] for m<0 +c l l +c +c -> -> -> +c R = R - R ==> [theta,phi] +c ij j i +c +c cos(theta)=Rij(3)/sqrt(Rij(1)**2+Rij(2)**2+Rij(3)**2) +c +c cos(phi) =Rij(1)/sqrt(Rij(1)**2+Rij(2)**2) +c +c m m +c Indexing: P : P(l*(l+1)/2+m+1) only +m are calculated +c l l +c +c m m +c Indexing: C : C(l*(l+1)/2+m+1) only +m are calculated +c l l +c +c m m +c Indexing: D : D(l*(l+1)+m+1) all m are calculated +c l l +c +c Now for the real space structure contant we have : +c +c ij l-l' L ij +c G (E) = 4*pi*i * SUM { C * D (E) } +c L,L' L" L',L" L" +c +c ***************************************************************** +c +c ================================================================= + if(lmax.lt.0) then + write(6,'('' makegij:: bad arguments: lmax='',i5)') lmax + call fstop(sname) + endif + lend=lmaxi+lmaxj +c ================================================================= +c calculate the hankel function.[dangerous code if z is close to 0] +c hankel function is hfn*exp(i*z)/z + rmag=sqrt(rij(1)*rij(1)+rij(2)*rij(2)+rij(3)*rij(3)) + if(rmag.lt.ptol) stop 'Error in makegij: rmag = 0.' + if(prel.eq.czero) then +c if prel is zero then we calculate Gij for multipole Coulomb interaction. + hfn(0)=cone/rmag + do l=1,lend + hfn(l)=sqrtm1*(2*l-1)*hfn(l-1)/rmag + enddo + else + z=prel*rmag + hfn(0)=-sqrtm1 + hfn(1)=-cone-sqrtm1/z + do l=1,lend-1 + hfn(l+1)=(2*l+1)*hfn(l)/z - hfn(l-1) + enddo +c ================================================================= +c l+1 +c hfn = -i *h (k*R )*sqrt(E) +c l ij +c ================================================================= + z=exp(sqrtm1*z)/rmag + do l=0,lend + hfn(l)=-hfn(l)*z*ilp1(l) + enddo + endif +c +c ================================================================= +c calculate p(l,m)'s............................................... + costheta=rij(3)/rmag +c ----------------------------------------------------------------- +! call plglmax(lend,costheta,plm) +! meis: changed to normalized associated Legendre functions + call plm_normalized(lend,costheta,plm) +c ----------------------------------------------------------------- +c ================================================================= +c multiply be the normalization constant........................... + ndlm_local=(lend+1)*(lend+2)/2 + if(ndlm_local.gt.ndlm) then + write(6,'(''MAKEGIJ:: ndlm incorrect!'')') + write(6,*) 'ndlm=',ndlm + write(6,*) 'ndlm_local=',ndlm_local + call fstop(sname) + endif + do j=1,ndlm_local + plm(j)=clm(j)*plm(j) + enddo +c ================================================================= +c calculate cos(phi) and sin(phi) ................................. + pmag=sqrt(rij(1)*rij(1)+rij(2)*rij(2)) + cosmp(0)=one + sinmp(0)=zero + if(pmag.ge.ptol) then + cosmp(1)=rij(1)/pmag + sinmp(1)=rij(2)/pmag + else + cosmp(1)=zero + sinmp(1)=zero + endif + do m=2,lend + cosmp(m)=cosmp(m-1)*cosmp(1)-sinmp(m-1)*sinmp(1) + sinmp(m)=sinmp(m-1)*cosmp(1)+cosmp(m-1)*sinmp(1) + enddo +c + j=0 + do l=0,lend + ll=l*(l+1) + j=ll+1 + ll=ll/2+1 + m1m=one + dlm(j)= hfn(l)*plm(ll) + do m=1,l + m1m=-m1m + fac=plm(ll+m)*dcmplx(cosmp(m),sinmp(m)) + dlm(j-m)= hfn(l)*m1m*fac + dlm(j+m)= hfn(l)*conjg(fac) + enddo + enddo +c ================================================================= + if(iprint.ge.3) then + write(6,'(/)') + write(6,*) "Rij=",rij(1),rij(2),rij(3) + write(6,*) "cos(theta)=",costheta + write(6,'(/)') + write(6,'('' makegij:: l,m,dlm(l,m):'')') + do j=1,ndlj + write(6,'(2i3,2x,f10.5,1x,d16.8)') + > lofk(j),mofk(j),dlm(j) + enddo + write(6,*) "i, plm(i)" + do j=1,ndlm + write(6,*) j,plm(j) + end do + endif +c +c ================================================================ +c calculate g(R_ij)............................................... +c ---------------------------------------------------------------- +! call zeroout(gij,2*kkri*kkrj) + gij=0.0d0 +c ---------------------------------------------------------------- +c ================================================================ +c loop over l1,m1............................................ + do lm1=1,kkrj + l1=lofk(lm1) + m1=mofk(lm1) +c ============================================================= +c loop over l2,m2.............................................. + do lm2=1,kkri + l2=lofk(lm2) + m2=mofk(lm2) +c ========================================================== +c l2-l1 +c illp(lm2,lm1) = i +c +c perform sum over l3 with gaunt # ...................... +c ========================================================== + m3=m2-m1 + llow=max(abs(m3),abs(l1-l2)) + if(prel.eq.czero) llow=l1+l2 + do l3=l1+l2,llow,-2 + j=l3*(l3+1)+m3+1 + gij(lm2,lm1) = gij(lm2,lm1)+cgnt(l3/2+1,lm1,lm2)*dlm(j) + enddo + gij(lm2,lm1)=pi4*illp(lm2,lm1)*gij(lm2,lm1) + enddo + enddo +c +c ================================================================ +c printout if needed.............................................. + if(iprint.ge.3) then +c ============================================================= +c loop over l1,m1.............................................. + do lm1=1,kkrj + l1=lofk(lm1) + m1=mofk(lm1) +c ========================================================== +c loop over l2,m2........................................... + do lm2=1,kkri + l2=lofk(lm2) + m2=mofk(lm2) + write(6,'('' lm1,lm2,l1,m1,l2,m2:'',6i3,2d12.5)') + > lm1,lm2,l1,m1,l2,m2,gij(lm2,lm1) + enddo + enddo + endif +c ================================================================= + if (istop.eq.sname) then + call fstop(sname) + else + return + endif +c + end diff --git a/src/Test/buildKKRMatrixTest/makegij_new.cpp b/src/Test/buildKKRMatrixTest/makegij_new.cpp new file mode 100644 index 000000000..6a208d8ae --- /dev/null +++ b/src/Test/buildKKRMatrixTest/makegij_new.cpp @@ -0,0 +1,299 @@ +#include +#include +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" +#include "Array3d.hpp" + +#include "associatedLegendreFunction.hpp" + +// #define INLINE_PLGLMAX + +extern "C" +{ + void plglmax_(int *lend, Real*costheta, Real*plm); +} +// void plglmax_new(int lmax, Real x, Real*plm); + +inline void makegij_new(int lmaxi, int kkri, int lmaxj, int kkrj, + int lmax, int kkrsz, int ndlj, int ndlm, + Complex prel, Real *rij,Real *sinmp, Real *cosmp, + Real *clm, Real *plm, Array3d &cgnt, + int *lofk, int *mofk, + Complex *ilp1, Matrix &illp, + Complex *hfn, Complex *dlm, + Complex *gij, Real pi4) +{ + const Complex sqrtm1=std::complex(0.0,1.0); + const Real ptol=1.0e-6; +/* +c ***************************************************************** +c +c +c ij l+1 m -> * +c D [E] = -i * sqrt(E) * h [sqrt(E)*R ] * Y [R ] +c L l ij l ij +c +c +c -l+1 m -> * +c = -i * sqrt(E) * h [sqrt(E)*R ] * Y [-R ] +c l ij l ij +c +c The extra factor (-1)^m removed by xgz July 97 from plm (plglmax_c.f) +c to make Ylm consistent with Numerical Recipes. +c +c m [ (2*l+1)*(l-|m|)!] m +c Y = sqrt[-----------------]*P [cos(theta)]*exp(i*m*phi) +c l [ 4*pi*(l+|m|)! ] l +c +c for m>=0 +c +c m m -m * +c Y [theta,phi] = (-1) Y [theta,phi] for m<0 +c l l +c +c -> -> -> +c R = R - R ==> [theta,phi] +c ij j i +c +c cos(theta)=Rij(3)/sqrt(Rij(1)**2+Rij(2)**2+Rij(3)**2) +c +c cos(phi) =Rij(1)/sqrt(Rij(1)**2+Rij(2)**2) +c +c m m +c Indexing: P : P(l*(l+1)/2+m+1) only +m are calculated +c l l +c +c m m +c Indexing: C : C(l*(l+1)/2+m+1) only +m are calculated +c l l +c +c m m +c Indexing: D : D(l*(l+1)+m+1) all m are calculated +c l l +c +c Now for the real space structure contant we have : +c +c ij l-l' L ij +c G (E) = 4*pi*i * SUM { C * D (E) } +c L,L' L" L',L" L" +c +c ***************************************************************** +*/ + + int lend=lmaxi+lmaxj; +/* +c calculate the hankel function.[dangerous code if z is close to 0] +c hankel function is hfn*exp(i*z)/z +*/ + Real rmag=std::sqrt(rij[0]*rij[0]+rij[1]*rij[1]+rij[2]*rij[2]); +// if(rmag.lt.ptol) stop 'Error in makegij: rmag = 0.' + if(std::abs(prel)==0.0) + { +// if prel is zero then we calculate Gij for multipole Coulomb interaction. + hfn[0]=1.0/rmag; + for(int l=1; l<=lend; l++) + { + hfn[l]=sqrtm1*(2.0*l-1)*hfn[l-1]/rmag; + } + } else { + Complex z=prel*rmag; + hfn[0]=-sqrtm1; + hfn[1]=-1.0-sqrtm1/z; + for(int l=1; l(costheta, lend, plm); +#ifdef INLINE_PLGLMAX +{ + const Real tol=1.0e-12; +// removed checks from original plglmax.f + + if((1.0-std::abs(costheta))(costheta, lend, plm); +#endif +// multiply be the normalization constant........................... + int ndlm_local=(lend+1)*(lend+2)/2; + if(ndlm_local>ndlm) + { + printf("MAKEGIJ:: ndlm incorrect!\n"); + printf("ndlm=%d\nndlm_local=%d\n",ndlm,ndlm_local); + exit(1); + } + for(int j=0;jptol) + { + cosmp[1]=rij[0]/pmag; + sinmp[1]=rij[1]/pmag; + } else { + cosmp[1]=0.0; + sinmp[1]=0.0; + } + for(int m=2; m<=lend; m++) + { + cosmp[m]=cosmp[m-1]*cosmp[1]-sinmp[m-1]*sinmp[1]; + sinmp[m]=sinmp[m-1]*cosmp[1]+cosmp[m-1]*sinmp[1]; + } + + int j=0; + for(int l=0; l<=lend; l++) + { + int ll=l*(l+1); + j=ll; + ll=ll/2; + Real m1m=1.0; + dlm[j]= hfn[l]*plm[ll]; + for(int m=1; m<=l; m++) + { + m1m=-m1m; + Complex fac=plm[ll+m]*std::complex(cosmp[m],sinmp[m]); + dlm[j-m]= hfn[l]*m1m*fac; + dlm[j+m]= hfn[l]*std::conj(fac); + } + } + +// ================================================================ +// calculate g(R_ij)............................................... + for(int i=0; i=llow;l3-=2) + { + int j=l3*(l3+1)+m3; + gij[lm2+lm1*kkri] = gij[lm2+lm1*kkri]+cgnt(l3/2,lm1,lm2)*dlm[j]; + } + gij[lm2+lm1*kkri]=pi4*illp(lm2,lm1)*gij[lm2+lm1*kkri]; + } + } +} diff --git a/src/Test/buildKKRMatrixTest/plglmax_new.cpp b/src/Test/buildKKRMatrixTest/plglmax_new.cpp new file mode 100644 index 000000000..03bf14e17 --- /dev/null +++ b/src/Test/buildKKRMatrixTest/plglmax_new.cpp @@ -0,0 +1,131 @@ +#include "Real.hpp" +/* subroutine plglmax(lmax,x,plm) +c **************************************************************** +c Associated Legendre function.................................... +c Calclates all the p(l,m)'s up to lmax........................... +c based on the formulae given in "Numerical Recipes" pages 180-183 +c (Equations 6.6.7, 6.6.8 and 6.6.9............................... +c W. H. Press, B. P. Flannery, S A Teukolsky and W. T. Vetterling. +c Cambridge Univ Press 1986....................................... +c **************************************************************** +c +c Inputs: lmax integer scalar, max l for Plm +c x real*8 scalar, argument of Plm(x) +c Returns: plm real*8 array of ((lmax+1)*(lmax+2)/2), Plm(x) +c +*/ +#define LMAX_GE_2 + +inline void plglmax_new(int lmax, Real x, Real*plm) +{ + const Real tol=1.0e-12; +// removed checks from original plglmax.f + + if((1.0-std::abs(x)) +#include "Real.hpp" + +// mpicxx -I ../../../include/ plglmax_test.cpp plglmax_new.cpp plglmax.o zeroout.o -lgfortran + + +extern "C" +{ + void plglmax_(int *lend, Real*costheta, Real*plm); +} +void plglmax_new(int lmax, Real x, Real*plm); + +int main(int argc, char *argv[]) +{ + Real x; + Real *plm, *plm_new; + int lmax; + + lmax = atoi(argv[1]); + x = atof(argv[2]); + plm=(Real *)malloc((lmax+1)*(lmax+2)*sizeof(Real)/2); + plm_new=(Real *)malloc((lmax+1)*(lmax+2)*sizeof(Real)/2); + + plglmax_new(lmax,x,plm_new); + plglmax_(&lmax,&x,plm); + + printf("i plm[i] plm_new[i] |plm-plm_new|\n\n"); + + for(int i=0; i<(lmax+1)*(lmax+2)/2; i++) + printf("%d %lg %lg %lg\n",i,plm[i],plm_new[i],std::abs(plm[i]-plm_new[i])); + + + free(plm); free(plm_new); + return 0; +} diff --git a/src/Test/buildKKRMatrixTest/quadrature.cpp b/src/Test/buildKKRMatrixTest/quadrature.cpp new file mode 100644 index 000000000..85da9db6f --- /dev/null +++ b/src/Test/buildKKRMatrixTest/quadrature.cpp @@ -0,0 +1,14 @@ + +#include "Real.hpp" +#include "calculateGaussLegendrePoints.hpp" + +extern "C" +{ + void gauss_legendre_points_(double *x1, double *x2, double *x, double *w, int *n); +} + +void gauss_legendre_points_(double *x1, double *x2, double *x, double *w, int *n) +{ + calculateGaussLegendrePoints(x, w, *n, *x1, *x2); +} + diff --git a/src/Test/buildKKRMatrixTest/setgij.f b/src/Test/buildKKRMatrixTest/setgij.f new file mode 100755 index 000000000..91ca46b2f --- /dev/null +++ b/src/Test/buildKKRMatrixTest/setgij.f @@ -0,0 +1,58 @@ + subroutine setgij(gij, bgij,kkr1, kkr1_ns,kkr2,kkr2_ns, + > n_spin_cant,nrel_rel,psq,ce) +c ============================================================== +c + implicit none +c + character istop*32 + character sname*32 + integer im,in + integer i,j + integer is + integer kkr1 + integer kkr1_ns + integer kkr2 + integer kkr2_ns + integer n_spin_cant + integer nrel_rel +c + complex*16 gij(kkr1,kkr2) + complex*16 bgij(kkr1_ns,kkr2_ns) + complex*16 fac + complex*16 psq + complex*16 ce + + parameter (sname='setgij') +c + call zeroout(bgij,2*kkr1_ns*kkr2_ns) +c + if(nrel_rel.eq.0) then + do is=1,n_spin_cant + im=(is-1)*kkr1 + in=(is-1)*kkr2 + do i=1,kkr1 + do j=1,kkr2 + bgij(im+i,in+j)=gij(i,j) + end do + end do + end do + else +! if(kkr1.ne.kkr2) then +! write(6,*) 'SETGIJ: nonsquare rel. Gij not yet supported' +! call fstop(sname) +! end if +! call relmtrx(gij,bgij,lmax) + + write(6,*) 'SETGIJ: relativity currently not supported' + call fstop(sname) +c$$$ call relmtrx(gij,bgij,kkr1,kkr2) +c$$$ fac=psq/ce +c$$$ do i=1,kkr1_ns +c$$$ do j=1,kkr2_ns +c$$$ bgij(i,j)=fac*bgij(i,j) +c$$$ end do +c$$$ end do + end if +c + return + end diff --git a/src/Test/buildKKRMatrixTest_cuda/DeviceArray3d.hpp b/src/Test/buildKKRMatrixTest_cuda/DeviceArray3d.hpp new file mode 100755 index 000000000..ec0ebb322 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_cuda/DeviceArray3d.hpp @@ -0,0 +1,121 @@ +#ifndef LSMS_DEVICE_ARRAY3D_HPP +#define LSMS_DEVICE_ARRAY3D_HPP + +#include "Array3d.hpp" + + template + class DeviceArray3d { + public: + typedef size_t size_type; + + // The basic constructor builds an empty matrix, that needs to be resized before use. + __inline__ DeviceArray3d() : nRow(0), nCol(0), nSlice(0), lDim1(0), lDim2(0), lDim12(0), data(0), owner(0) {} + + __inline__ DeviceArray3d(Array3d& in): data(0) { + *this=in; + } + + __inline__ DeviceArray3d(size_type nRows,size_type nCols, size_type nSlices, size_type ldim1=0, size_type ldim2=0) { + nRow=nRows; nCol=nCols; nSlice=nSlices; lDim1=ldim1; lDim2=ldim2; lDim12=lDim1*lDim2; + if(ldim1; + // Finaly we need a destructor to free the memory allocated by the array. + __inline__ ~DeviceArray3d() { + free(); + } + + // ; + // We provide two methods to access the elements of a matrix. The most natural one uses |operator()| with row and collumn arguments and looks simimar to a matrix access in {\bf Fortran}. + __inline__ __device__ T& operator() (size_type i, size_type j, size_type k) { + return data[k*lDim12+j*lDim1+i]; + } + + // The second way to access the elements of a matrix uses the familair C |[]| operator and vies the |data| array as a continous block of memory. + __inline__ __device__ T& operator[](size_type i) { + return data[i]; + } + + // We provide a few functions to return information about the matrix. + __inline__ __host__ __device__ size_type size() const { return lDim12*nSlice; } + __inline__ __host__ __device__ T* raw() const { return data; } + __inline__ __host__ __device__ size_type n_row() const { return nRow; } + __inline__ __host__ __device__ size_type n_col() const { return nCol; } + __inline__ __host__ __device__ size_type n_slice() const {return nSlice;} + __inline__ __host__ __device__ size_type l_dim1() const { return lDim1; } + __inline__ __host__ __device__ size_type l_dim2() const { return lDim2;} + + // Assignments and copy: + __inline__ DeviceArray3d &operator=(Array3d& a) + { + copy_async(a,0); + return *this; + } + __inline__ void copy(Array3d &a) { + size_type curSize=lDim12*nSlice; + nRow=a.n_row(); nCol=a.n_col(); nSlice=a.n_slice(); lDim1=a.l_dim1(); lDim2=a.l_dim2(); lDim12=lDim1*lDim2; + size_type num_bytes=sizeof(T)*lDim12*nSlice; + + if(curSize!=lDim12*nSlice) { + if(nRow*nCol*nSlice>0) { + allocate(num_bytes); + } + else { nRow=0; nCol=0; nSlice=0; lDim1=0; lDim2=0; lDim12=0; data=0; } + } + cudaMemcpy(data,&a[0],num_bytes,cudaMemcpyHostToDevice); + } + + __inline__ void copy_async(Array3d &a, cudaStream_t s) { + size_type curSize=lDim12*nSlice; + nRow=a.n_row(); nCol=a.n_col(); nSlice=a.n_slice(); lDim1=a.l_dim1(); lDim2=a.l_dim2(); lDim12=lDim1*lDim2; + size_type num_bytes=sizeof(T)*lDim12*nSlice; + + if(curSize!=lDim12*nSlice) { + if(nRow*nCol*nSlice>0) { + allocate(num_bytes); + } + else { nRow=0; nCol=0; nSlice=0; lDim1=0; lDim2=0; lDim12=0; data=0; } + } + cudaMemcpyAsync(data,&a[0],num_bytes,cudaMemcpyHostToDevice,s); + } + + private: + size_type nRow,nCol,nSlice,lDim1,lDim2,lDim12; + T* data; + DeviceArray3d *owner; + + __inline__ void allocate(size_type num_bytes) { + if(num_bytes>0) { + free(); + owner=this; + cudaMalloc(&data,num_bytes); + cudaCheckError(); + } + else { // DANGEROUS!! Might cause memory leak! + nRow = 0; + nCol = 0; + nSlice = 0; + lDim1 = 0; + lDim2 = 0; + lDim12 = 0; + data = 0; + owner = 0; + } + } + __inline__ void free() { + if(owner==this && data!=0) { + cudaFree(data); + owner=0; + data=0; + } + } + }; + +#endif + diff --git a/src/Test/buildKKRMatrixTest_cuda/DeviceMatrix.hpp b/src/Test/buildKKRMatrixTest_cuda/DeviceMatrix.hpp new file mode 100755 index 000000000..7e23353e5 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_cuda/DeviceMatrix.hpp @@ -0,0 +1,118 @@ +#ifndef LSMS_DEVICE_MATRIX_HPP +#define LSMS_DEVICE_MATRIX_HPP + +#include "Matrix.hpp" +#include "cudaCheckError.hpp" +#include + template + struct DeviceMatrix { + public: + typedef size_t size_type; + __inline__ DeviceMatrix() : nRow(0), nCol(0), lDim(0), data(0), owner(0) {} + + __inline__ DeviceMatrix(Matrix& in) : data(0) { + *this=in; + } + + __inline__ DeviceMatrix(size_type nRows,size_type nCols,size_type ldim=0) : nRow(nRows), nCol(nCols), lDim(ldim) { + if(lDim; + // We provide two methods to access the lements of a matrix. The most natural one uses |operator()| with row and collumn arguments and looks simimar to a matrix access in {\bf Fortran}. + __inline__ __device__ T& operator() (size_type i, size_type j) { + return data[j*lDim+i]; + } + + // The second way to access the elements of a matrix uses the familair C |[]| operator and vies the |data| array as a continous block of memory. + __inline__ __device__ T& operator[](size_type i) { + return data[i]; + } + + __inline__ DeviceMatrix &operator=(Matrix& mat) { + //TODO BACK TO ASYNC + copy_async(mat,0); + cudaCheckError(); + return *this; + } + + __inline__ void copy(Matrix &mat) { + size_type curSize=lDim*nCol; + nRow=mat.n_row(); nCol=mat.n_col(); lDim=mat.l_dim(); + size_type num_bytes=sizeof(T)*lDim*nCol; + + printf("lDim: %d, nCol: %d, nRow: %d, num_bytes: %d, curSize: %d\n",lDim,nCol,nRow,num_bytes,curSize); + if(lDim*nCol!=curSize) { + if((nRow*nCol)>0) { + allocate(num_bytes); + } + else { free(); nRow=0; nCol=0; lDim=0; } + } + cudaMemcpy(data,&mat[0],num_bytes,cudaMemcpyHostToDevice); + } + + __inline__ void copy_async(Matrix &mat, cudaStream_t s) { + size_type curSize=lDim*nCol; + nRow=mat.n_row(); nCol=mat.n_col(); lDim=mat.l_dim(); + size_type num_bytes=sizeof(T)*lDim*nCol; + + if(lDim*nCol!=curSize) { + if(data!=0) free(); + if((nRow*nCol)>0) { + allocate(num_bytes); + } + else { nRow=0; nCol=0; lDim=0; data=0;} + } + cudaMemcpyAsync(data,&mat[0],num_bytes,cudaMemcpyHostToDevice,s); + } + + + // We provide a few functions to return information about the matrix. + __inline__ __host__ __device__ size_type size() const { return lDim*nCol; } + __inline__ __host__ __device__ T* raw() const { return data; } + __inline__ __host__ __device__ size_type n_row() const { return nRow; } + __inline__ __host__ __device__ size_type n_col() const { return nCol; } + __inline__ __host__ __device__ size_type l_dim() const { return lDim; } + + private: + size_type lDim; + size_type nRow,nCol; + + T* data; + DeviceMatrix *owner; + + __inline__ void allocate(size_type num_bytes) { + if(num_bytes>0) { + free(); + owner=this; + cudaMalloc(&data,num_bytes); + cudaCheckError(); + } + else { // DANGEROUS!! Might cause memory leak! + owner = 0; + data = 0; + nRow = 0; + nCol = 0; + lDim = 0; + } + } + __inline__ void free() { + if(owner==this && data!=0) { + cudaFree(data); + } + owner=0; + data=0; + } + }; + +#endif + diff --git a/src/Test/buildKKRMatrixTest_cuda/DeviceVector.hpp b/src/Test/buildKKRMatrixTest_cuda/DeviceVector.hpp new file mode 100755 index 000000000..84e8116c4 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_cuda/DeviceVector.hpp @@ -0,0 +1,90 @@ +// #include "cuda_error.h" +#ifndef LSMS_DEVICE_VECTOR_HPP +#define LSMS_DEVICE_VECTOR_HPP + +#include "cudaCheckError.hpp" +#include + + template + class DeviceVector { + public: + typedef size_t size_type; + __inline__ DeviceVector() : N(0), data(0), owner(0) {} + + __inline__ DeviceVector( std::vector& in): data(0) { + *this=in; + } + __inline__ DeviceVector( size_type size ) { + allocate(size*sizeof(T)); + } + + __inline__ ~DeviceVector() { + free(); + } + + __inline__ __device__ T& operator[](size_type i) { + return data[i]; + } + + __inline__ DeviceVector &operator=(const std::vector& in) { + copy_async(in,0); + return *this; + } + + __inline__ void copy(const std::vector& in) { + size_type N=in.size(); + size_type num_bytes=N*sizeof(T); + if(this->N!=N) { + this->N=N; + allocate(num_bytes); + } + cudaMemcpy(data,&in[0],num_bytes,cudaMemcpyHostToDevice); + cudaCheckError(); + } + + __inline__ void copy_async(const std::vector& in,cudaStream_t s) { + size_type N=in.size(); + size_type num_bytes=N*sizeof(T); + if(this->N!=N) { + this->N=N; + allocate(num_bytes); + } + cudaMemcpyAsync(data,&in[0],num_bytes,cudaMemcpyHostToDevice,s); + cudaCheckError(); + } + + // We provide a few functions to return information about the vector + __inline__ __host__ __device__ size_type size() const { return N; } + __inline__ __host__ __device__ T* raw() const { return data; } + + private: + __inline__ void allocate(size_type num_bytes) { + if(num_bytes>0) { + free(); + owner=this; + cudaMalloc(&data,num_bytes); + cudaCheckError(); + } + else { // DANGEROUS!! Might cause memory leak! + owner=0; + data=0; + N=0; + } + } + __inline__ void free() { + if(owner==this && data!=0) { + cudaFree(data); + cudaCheckError(); + owner=0; + data=0; + N=0; + } + } + + DeviceVector *owner; + size_type N; + T* data; + }; + +#endif + diff --git a/src/Test/buildKKRMatrixTest_cuda/LIZ_pos.h b/src/Test/buildKKRMatrixTest_cuda/LIZ_pos.h new file mode 100644 index 000000000..b328fd463 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_cuda/LIZ_pos.h @@ -0,0 +1,344 @@ +void set_LIZ(AtomData & atom) +{ + atom.numLIZ=113; + atom.LIZPos.resize(3,atom.numLIZ); + atom.LIZPos(0,0)=0; + atom.LIZPos(1,0)=0; + atom.LIZPos(2,0)=0; + atom.LIZPos(0,1)=2.71; + atom.LIZPos(1,1)=-2.71; + atom.LIZPos(2,1)=2.71; + atom.LIZPos(0,2)=2.71; + atom.LIZPos(1,2)=-2.71; + atom.LIZPos(2,2)=-2.71; + atom.LIZPos(0,3)=-2.71; + atom.LIZPos(1,3)=-2.71; + atom.LIZPos(2,3)=-2.71; + atom.LIZPos(0,4)=-2.71; + atom.LIZPos(1,4)=2.71; + atom.LIZPos(2,4)=2.71; + atom.LIZPos(0,5)=-2.71; + atom.LIZPos(1,5)=2.71; + atom.LIZPos(2,5)=-2.71; + atom.LIZPos(0,6)=-2.71; + atom.LIZPos(1,6)=-2.71; + atom.LIZPos(2,6)=2.71; + atom.LIZPos(0,7)=2.71; + atom.LIZPos(1,7)=2.71; + atom.LIZPos(2,7)=2.71; + atom.LIZPos(0,8)=2.71; + atom.LIZPos(1,8)=2.71; + atom.LIZPos(2,8)=-2.71; + atom.LIZPos(0,9)=0; + atom.LIZPos(1,9)=-5.42; + atom.LIZPos(2,9)=0; + atom.LIZPos(0,10)=5.42; + atom.LIZPos(1,10)=0; + atom.LIZPos(2,10)=0; + atom.LIZPos(0,11)=0; + atom.LIZPos(1,11)=0; + atom.LIZPos(2,11)=-5.42; + atom.LIZPos(0,12)=0; + atom.LIZPos(1,12)=0; + atom.LIZPos(2,12)=5.42; + atom.LIZPos(0,13)=-5.42; + atom.LIZPos(1,13)=0; + atom.LIZPos(2,13)=0; + atom.LIZPos(0,14)=0; + atom.LIZPos(1,14)=5.42; + atom.LIZPos(2,14)=0; + atom.LIZPos(0,15)=-5.42; + atom.LIZPos(1,15)=0; + atom.LIZPos(2,15)=-5.42; + atom.LIZPos(0,16)=-5.42; + atom.LIZPos(1,16)=-5.42; + atom.LIZPos(2,16)=0; + atom.LIZPos(0,17)=0; + atom.LIZPos(1,17)=-5.42; + atom.LIZPos(2,17)=-5.42; + atom.LIZPos(0,18)=-5.42; + atom.LIZPos(1,18)=0; + atom.LIZPos(2,18)=5.42; + atom.LIZPos(0,19)=-5.42; + atom.LIZPos(1,19)=5.42; + atom.LIZPos(2,19)=0; + atom.LIZPos(0,20)=5.42; + atom.LIZPos(1,20)=-5.42; + atom.LIZPos(2,20)=0; + atom.LIZPos(0,21)=5.42; + atom.LIZPos(1,21)=0; + atom.LIZPos(2,21)=-5.42; + atom.LIZPos(0,22)=0; + atom.LIZPos(1,22)=-5.42; + atom.LIZPos(2,22)=5.42; + atom.LIZPos(0,23)=0; + atom.LIZPos(1,23)=5.42; + atom.LIZPos(2,23)=5.42; + atom.LIZPos(0,24)=5.42; + atom.LIZPos(1,24)=0; + atom.LIZPos(2,24)=5.42; + atom.LIZPos(0,25)=0; + atom.LIZPos(1,25)=5.42; + atom.LIZPos(2,25)=-5.42; + atom.LIZPos(0,26)=5.42; + atom.LIZPos(1,26)=5.42; + atom.LIZPos(2,26)=0; + atom.LIZPos(0,27)=8.13; + atom.LIZPos(1,27)=-2.71; + atom.LIZPos(2,27)=2.71; + atom.LIZPos(0,28)=-2.71; + atom.LIZPos(1,28)=8.13; + atom.LIZPos(2,28)=-2.71; + atom.LIZPos(0,29)=2.71; + atom.LIZPos(1,29)=8.13; + atom.LIZPos(2,29)=-2.71; + atom.LIZPos(0,30)=2.71; + atom.LIZPos(1,30)=8.13; + atom.LIZPos(2,30)=2.71; + atom.LIZPos(0,31)=2.71; + atom.LIZPos(1,31)=2.71; + atom.LIZPos(2,31)=8.13; + atom.LIZPos(0,32)=2.71; + atom.LIZPos(1,32)=2.71; + atom.LIZPos(2,32)=-8.13; + atom.LIZPos(0,33)=-2.71; + atom.LIZPos(1,33)=8.13; + atom.LIZPos(2,33)=2.71; + atom.LIZPos(0,34)=8.13; + atom.LIZPos(1,34)=-2.71; + atom.LIZPos(2,34)=-2.71; + atom.LIZPos(0,35)=2.71; + atom.LIZPos(1,35)=-8.13; + atom.LIZPos(2,35)=-2.71; + atom.LIZPos(0,36)=2.71; + atom.LIZPos(1,36)=-8.13; + atom.LIZPos(2,36)=2.71; + atom.LIZPos(0,37)=2.71; + atom.LIZPos(1,37)=-2.71; + atom.LIZPos(2,37)=8.13; + atom.LIZPos(0,38)=2.71; + atom.LIZPos(1,38)=-2.71; + atom.LIZPos(2,38)=-8.13; + atom.LIZPos(0,39)=-2.71; + atom.LIZPos(1,39)=2.71; + atom.LIZPos(2,39)=8.13; + atom.LIZPos(0,40)=-2.71; + atom.LIZPos(1,40)=2.71; + atom.LIZPos(2,40)=-8.13; + atom.LIZPos(0,41)=-8.13; + atom.LIZPos(1,41)=-2.71; + atom.LIZPos(2,41)=-2.71; + atom.LIZPos(0,42)=-8.13; + atom.LIZPos(1,42)=-2.71; + atom.LIZPos(2,42)=2.71; + atom.LIZPos(0,43)=-8.13; + atom.LIZPos(1,43)=2.71; + atom.LIZPos(2,43)=-2.71; + atom.LIZPos(0,44)=-8.13; + atom.LIZPos(1,44)=2.71; + atom.LIZPos(2,44)=2.71; + atom.LIZPos(0,45)=-2.71; + atom.LIZPos(1,45)=-2.71; + atom.LIZPos(2,45)=8.13; + atom.LIZPos(0,46)=8.13; + atom.LIZPos(1,46)=2.71; + atom.LIZPos(2,46)=2.71; + atom.LIZPos(0,47)=8.13; + atom.LIZPos(1,47)=2.71; + atom.LIZPos(2,47)=-2.71; + atom.LIZPos(0,48)=-2.71; + atom.LIZPos(1,48)=-8.13; + atom.LIZPos(2,48)=-2.71; + atom.LIZPos(0,49)=-2.71; + atom.LIZPos(1,49)=-8.13; + atom.LIZPos(2,49)=2.71; + atom.LIZPos(0,50)=-2.71; + atom.LIZPos(1,50)=-2.71; + atom.LIZPos(2,50)=-8.13; + atom.LIZPos(0,51)=-5.42; + atom.LIZPos(1,51)=5.42; + atom.LIZPos(2,51)=-5.42; + atom.LIZPos(0,52)=5.42; + atom.LIZPos(1,52)=5.42; + atom.LIZPos(2,52)=5.42; + atom.LIZPos(0,53)=5.42; + atom.LIZPos(1,53)=5.42; + atom.LIZPos(2,53)=-5.42; + atom.LIZPos(0,54)=-5.42; + atom.LIZPos(1,54)=-5.42; + atom.LIZPos(2,54)=-5.42; + atom.LIZPos(0,55)=-5.42; + atom.LIZPos(1,55)=5.42; + atom.LIZPos(2,55)=5.42; + atom.LIZPos(0,56)=5.42; + atom.LIZPos(1,56)=-5.42; + atom.LIZPos(2,56)=5.42; + atom.LIZPos(0,57)=5.42; + atom.LIZPos(1,57)=-5.42; + atom.LIZPos(2,57)=-5.42; + atom.LIZPos(0,58)=-5.42; + atom.LIZPos(1,58)=-5.42; + atom.LIZPos(2,58)=5.42; + atom.LIZPos(0,59)=10.84; + atom.LIZPos(1,59)=0; + atom.LIZPos(2,59)=0; + atom.LIZPos(0,60)=0; + atom.LIZPos(1,60)=0; + atom.LIZPos(2,60)=10.84; + atom.LIZPos(0,61)=-10.84; + atom.LIZPos(1,61)=0; + atom.LIZPos(2,61)=0; + atom.LIZPos(0,62)=0; + atom.LIZPos(1,62)=0; + atom.LIZPos(2,62)=-10.84; + atom.LIZPos(0,63)=0; + atom.LIZPos(1,63)=-10.84; + atom.LIZPos(2,63)=0; + atom.LIZPos(0,64)=0; + atom.LIZPos(1,64)=10.84; + atom.LIZPos(2,64)=0; + atom.LIZPos(0,65)=8.13; + atom.LIZPos(1,65)=2.71; + atom.LIZPos(2,65)=8.13; + atom.LIZPos(0,66)=8.13; + atom.LIZPos(1,66)=-8.13; + atom.LIZPos(2,66)=2.71; + atom.LIZPos(0,67)=8.13; + atom.LIZPos(1,67)=-2.71; + atom.LIZPos(2,67)=-8.13; + atom.LIZPos(0,68)=8.13; + atom.LIZPos(1,68)=-8.13; + atom.LIZPos(2,68)=-2.71; + atom.LIZPos(0,69)=8.13; + atom.LIZPos(1,69)=8.13; + atom.LIZPos(2,69)=-2.71; + atom.LIZPos(0,70)=8.13; + atom.LIZPos(1,70)=2.71; + atom.LIZPos(2,70)=-8.13; + atom.LIZPos(0,71)=8.13; + atom.LIZPos(1,71)=8.13; + atom.LIZPos(2,71)=2.71; + atom.LIZPos(0,72)=8.13; + atom.LIZPos(1,72)=-2.71; + atom.LIZPos(2,72)=8.13; + atom.LIZPos(0,73)=-8.13; + atom.LIZPos(1,73)=-8.13; + atom.LIZPos(2,73)=-2.71; + atom.LIZPos(0,74)=2.71; + atom.LIZPos(1,74)=8.13; + atom.LIZPos(2,74)=8.13; + atom.LIZPos(0,75)=2.71; + atom.LIZPos(1,75)=-8.13; + atom.LIZPos(2,75)=-8.13; + atom.LIZPos(0,76)=-8.13; + atom.LIZPos(1,76)=8.13; + atom.LIZPos(2,76)=-2.71; + atom.LIZPos(0,77)=-8.13; + atom.LIZPos(1,77)=8.13; + atom.LIZPos(2,77)=2.71; + atom.LIZPos(0,78)=-2.71; + atom.LIZPos(1,78)=-8.13; + atom.LIZPos(2,78)=-8.13; + atom.LIZPos(0,79)=-8.13; + atom.LIZPos(1,79)=2.71; + atom.LIZPos(2,79)=8.13; + atom.LIZPos(0,80)=-2.71; + atom.LIZPos(1,80)=-8.13; + atom.LIZPos(2,80)=8.13; + atom.LIZPos(0,81)=-2.71; + atom.LIZPos(1,81)=8.13; + atom.LIZPos(2,81)=-8.13; + atom.LIZPos(0,82)=-2.71; + atom.LIZPos(1,82)=8.13; + atom.LIZPos(2,82)=8.13; + atom.LIZPos(0,83)=-8.13; + atom.LIZPos(1,83)=2.71; + atom.LIZPos(2,83)=-8.13; + atom.LIZPos(0,84)=-8.13; + atom.LIZPos(1,84)=-2.71; + atom.LIZPos(2,84)=8.13; + atom.LIZPos(0,85)=-8.13; + atom.LIZPos(1,85)=-2.71; + atom.LIZPos(2,85)=-8.13; + atom.LIZPos(0,86)=2.71; + atom.LIZPos(1,86)=-8.13; + atom.LIZPos(2,86)=8.13; + atom.LIZPos(0,87)=-8.13; + atom.LIZPos(1,87)=-8.13; + atom.LIZPos(2,87)=2.71; + atom.LIZPos(0,88)=2.71; + atom.LIZPos(1,88)=8.13; + atom.LIZPos(2,88)=-8.13; + atom.LIZPos(0,89)=-10.84; + atom.LIZPos(1,89)=-5.42; + atom.LIZPos(2,89)=0; + atom.LIZPos(0,90)=10.84; + atom.LIZPos(1,90)=5.42; + atom.LIZPos(2,90)=0; + atom.LIZPos(0,91)=5.42; + atom.LIZPos(1,91)=10.84; + atom.LIZPos(2,91)=0; + atom.LIZPos(0,92)=-10.84; + atom.LIZPos(1,92)=0; + atom.LIZPos(2,92)=-5.42; + atom.LIZPos(0,93)=5.42; + atom.LIZPos(1,93)=0; + atom.LIZPos(2,93)=10.84; + atom.LIZPos(0,94)=10.84; + atom.LIZPos(1,94)=-5.42; + atom.LIZPos(2,94)=0; + atom.LIZPos(0,95)=-10.84; + atom.LIZPos(1,95)=0; + atom.LIZPos(2,95)=5.42; + atom.LIZPos(0,96)=10.84; + atom.LIZPos(1,96)=0; + atom.LIZPos(2,96)=-5.42; + atom.LIZPos(0,97)=10.84; + atom.LIZPos(1,97)=0; + atom.LIZPos(2,97)=5.42; + atom.LIZPos(0,98)=-10.84; + atom.LIZPos(1,98)=5.42; + atom.LIZPos(2,98)=0; + atom.LIZPos(0,99)=-5.42; + atom.LIZPos(1,99)=-10.84; + atom.LIZPos(2,99)=0; + atom.LIZPos(0,100)=5.42; + atom.LIZPos(1,100)=0; + atom.LIZPos(2,100)=-10.84; + atom.LIZPos(0,101)=-5.42; + atom.LIZPos(1,101)=0; + atom.LIZPos(2,101)=-10.84; + atom.LIZPos(0,102)=-5.42; + atom.LIZPos(1,102)=0; + atom.LIZPos(2,102)=10.84; + atom.LIZPos(0,103)=-5.42; + atom.LIZPos(1,103)=10.84; + atom.LIZPos(2,103)=0; + atom.LIZPos(0,104)=0; + atom.LIZPos(1,104)=-10.84; + atom.LIZPos(2,104)=-5.42; + atom.LIZPos(0,105)=5.42; + atom.LIZPos(1,105)=-10.84; + atom.LIZPos(2,105)=0; + atom.LIZPos(0,106)=0; + atom.LIZPos(1,106)=-10.84; + atom.LIZPos(2,106)=5.42; + atom.LIZPos(0,107)=0; + atom.LIZPos(1,107)=10.84; + atom.LIZPos(2,107)=5.42; + atom.LIZPos(0,108)=0; + atom.LIZPos(1,108)=10.84; + atom.LIZPos(2,108)=-5.42; + atom.LIZPos(0,109)=0; + atom.LIZPos(1,109)=5.42; + atom.LIZPos(2,109)=10.84; + atom.LIZPos(0,110)=0; + atom.LIZPos(1,110)=-5.42; + atom.LIZPos(2,110)=-10.84; + atom.LIZPos(0,111)=0; + atom.LIZPos(1,111)=-5.42; + atom.LIZPos(2,111)=10.84; + atom.LIZPos(0,112)=0; + atom.LIZPos(1,112)=5.42; + atom.LIZPos(2,112)=-10.84; +} diff --git a/src/Test/buildKKRMatrixTest_cuda/Makefile b/src/Test/buildKKRMatrixTest_cuda/Makefile new file mode 100644 index 000000000..d2f22f2d3 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_cuda/Makefile @@ -0,0 +1,64 @@ + +export TOP_DIR = $(shell pwd)/../../.. +export INC_PATH = +export LIBS := + +include $(TOP_DIR)/architecture.h + +export INC_PATH += -I $(TOP_DIR)/include -I $(TOP_DIR)/src +export MISC = $(TOP_DIR)/src/Misc + +COEFICIENTS = cgaunt_c.o ifacts_c.o quadrature.o fstop.o zeroout.o \ + gaunt.o plglmax.o associatedLegendreFunction.o + +all: buildKKRMatrixTest + +clean: + rm -f *.o buildKKRMatrixTest + cd ../../../CBLAS && $(MAKE) clean + +cgaunt_c.o: $(MISC)/cgaunt_c.f + $(F77) -c $(MISC)/cgaunt_c.f +ifacts_c.o: $(MISC)/ifacts_c.f + $(F77) -c $(MISC)/ifacts_c.f +#gauleg.o: $(MISC)/gauleg.f +# $(F77) -c $(MISC)/gauleg.f +quadrature.o: quadrature.cpp + $(CXX) -c quadrature.cpp +plglmax.o: $(MISC)/plglmax.f + $(F77) -c $(MISC)/plglmax.f +associatedLegendreFunction.o: associatedLegendreFunction.cpp associatedLegendreFunction.hpp + $(CXX) -c associatedLegendreFunction.cpp +fstop.o: $(MISC)/fstop.f + $(F77) -c $(MISC)/fstop.f +zeroout.o: $(MISC)/zeroout.f + $(F77) -c $(MISC)/zeroout.f +gaunt.o: $(MISC)/gaunt.f + $(F77) -c $(MISC)/gaunt.f + +makegij_c.o: makegij_c.f + $(F77) -c makegij_c.f +setgij.o: setgij.f + $(F77) -c setgij.f + +makegij_new.o: makegij_new.cpp + $(CXX) $(INC_PATH) -c makegij_new.cpp +plglmax_new.o: plglmax_new.cpp + $(CXX) $(INC_PATH) -c plglmax_new.cpp + +buildKKRMatrix_original.o: buildKKRMatrix_original.cpp + $(CXX) $(INC_PATH) -c buildKKRMatrix_original.cpp +buildKKRMatrix_nrel_ns2.o: buildKKRMatrix_nrel_ns2.cpp + $(CXX) $(INC_PATH) -c buildKKRMatrix_nrel_ns2.cpp + +buildKKRMatrixTest: buildKKRMatrixTest.cpp $(COEFICIENTS) \ + buildKKRMatrix_original.o makegij_c.o setgij.o \ + buildKKRMatrix_nrel_ns2.o makegij_new.o plglmax_new.o \ + CBLAS_target + $(CXX) $(INC_PATH) -o buildKKRMatrixTest buildKKRMatrixTest.cpp \ + buildKKRMatrix_original.o buildKKRMatrix_nrel_ns2.o \ + makegij_c.o setgij.o \ + $(COEFICIENTS) $(ADD_LIBS) $(LIBS) + +CBLAS_target: + cd ../../../CBLAS && $(MAKE) alllib diff --git a/src/Test/buildKKRMatrixTest_cuda/Real.hpp b/src/Test/buildKKRMatrixTest_cuda/Real.hpp new file mode 100644 index 000000000..643e907d8 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_cuda/Real.hpp @@ -0,0 +1,54 @@ +#ifndef LSMS_REAL_H +#define LSMS_REAL_H + +#include +#include + +typedef double Real; + +#include "TypeTraits.hpp" + +#ifndef __CUDACC__ +#include + + +template<> +class TypeTraits +{ +// static hid_t hdf5_type; +public: + inline static MPI_Datatype mpiType(void) {return MPI_DOUBLE;} +// inline static hid_t hdf5Type(void) { return hdf5_type;} + inline static hid_t hdf5Type(void) { return H5T_NATIVE_DOUBLE;} +}; +// hid_t TypeTraits::hdf5_type = H5Tcopy(H5T_NATIVE_DOUBLE); + +template<> +class TypeTraits +{ +// static hid_t hdf5_type; +public: + inline static MPI_Datatype mpiType(void) {return MPI_INT;} + inline static hid_t hdf5Type(void) { return H5T_NATIVE_INT;} +}; +// hid_t TypeTraits::hdf5_type = H5Tcopy(H5T_NATIVE_INT); + +template<> +class TypeTraits +{ +// static hid_t hdf5_type; +public: + inline static MPI_Datatype mpiType(void) {return MPI_CHAR;} + inline static hid_t hdf5Type(void) { return H5T_NATIVE_CHAR;} +}; +// hid_t TypeTraits::hdf5_type = H5Tcopy(H5T_NATIVE_CHAR); + +#endif + +#endif + + +#ifndef M_PI +#define M_PI 3.14159265358979323846264338327950288419716939937510 +#endif + diff --git a/src/Test/buildKKRMatrixTest_cuda/TestStructures.hpp b/src/Test/buildKKRMatrixTest_cuda/TestStructures.hpp new file mode 100644 index 000000000..ba22446bc --- /dev/null +++ b/src/Test/buildKKRMatrixTest_cuda/TestStructures.hpp @@ -0,0 +1,90 @@ +#ifndef BKKRM_TEST_STRUCTURES_HPP +#define BKKRM_TEST_STRUCTURES_HPP + +#include "Misc/Indices.hpp" +/* +// from Misc/Indices.hpp +class AngularMomentumIndices { +public: + int lmax,ndlj,ndlm; + std::vector lofk,mofk,lofj,mofj; + + void init(int _lmax) + { + lmax=_lmax; + ndlj=(lmax+1)*(lmax+1); + ndlm=((lmax+1)*(lmax+2))/2; + mofk.resize(ndlj); lofk.resize(ndlj); + mofj.resize(ndlm); lofj.resize(ndlm); + int j=0; + int k=0; + for(int l=0; l<=lmax; l++) + { + for(int m=0; m<=l; m++) + { + lofj[j]=l; + mofj[j++]=m; + } + for(int m=-l; m<=l; m++) + { + + lofk[k]=l; + mofk[k]=m; + // printf("k,l,m: %d %d %d, lofk,mofk:%d %d\n",k,l,m,lofk[k],mofk[k]); + k++; + } + } + // printf("k=%d\n",k); + } +}; +*/ + +// only the needed parts from Main/SystemParameters.hpp: +class LSMSGlobals { +public: + void setIstop(const char *c){strncpy(istop,c,32); for(int i=strlen(c); i<32; i++) istop[i]=' ';} + bool checkIstop(const char *c){return (strncmp(istop,c,32)==0);} +// ... + int iprint; +// ... + char istop[32]; +}; + +class LSMSSystemParameters { +public: +// ... + int nrel_rel; + int n_spin_cant; +// ... + int maxlmax; + LSMSGlobals global; + AngularMomentumIndices angularMomentumIndices; +// ... +}; + +class LocalTypeInfo { +public: +// ... + int lDimTmatStore; + Matrix tmatStore; +// ... +}; + + +// only the needed parts from SingleSite/AtomData.hpp: +class AtomData { +public: +// ... +// Local Interaction Zone + int numLIZ; + std::vector LIZGlobalIdx, LIZStoreIdx, LIZlmax; + int nrmat; // sum (LIZlmax+1)^2 + std::vector LIZDist; + Matrix LIZPos; +// ... +// General Data + int lmax,kkrsz; +// ... +}; + +#endif diff --git a/src/Test/buildKKRMatrixTest_cuda/TypeTraits.hpp b/src/Test/buildKKRMatrixTest_cuda/TypeTraits.hpp new file mode 100644 index 000000000..702fdf9a9 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_cuda/TypeTraits.hpp @@ -0,0 +1,7 @@ +#ifndef LSMS_TYPE_TRAITS_H +#define LSMS_TYPE_TRAITS_H + +template +class TypeTraits; + +#endif diff --git a/src/Test/buildKKRMatrixTest_cuda/associatedLegendreFunction.cpp b/src/Test/buildKKRMatrixTest_cuda/associatedLegendreFunction.cpp new file mode 100644 index 000000000..f41baa397 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_cuda/associatedLegendreFunction.cpp @@ -0,0 +1,28 @@ +// routines to calculate the associated Legendre functions P_{lm} needed to calculate +// spherical harmonics +// This also provides the coeficients c_{lm} to calculate spherical harmonics: +// Y_{lm}(\theta, \phi) = c_{lm} P_{lm}(\cos\theta) e^{im\phi} +// +// The new routine calculates normalized versions of the Legendre polynomials +// such that +// Y_{lm}(\theta, \phi) = \sqrt{1/2} \bar{P}_{lm}(\cos\theta) e^{im\phi} +// +// i.e. c_{lm} = \sqrt{1/2} +// + +#include +#include "associatedLegendreFunction.hpp" + +extern "C" { +void plm_normalized_(int *lmax, double *x, double *plm) +{ + associatedLegendreFunctionNormalized(*x, *lmax, plm); +} + +void ylm_coefficients_(int *lmax, double *clm) +{ + for(int i=0; i<((*lmax) +1)*((*lmax) +2)/2; i++) + clm[i]=std::sqrt(0.5); +} +} + diff --git a/src/Test/buildKKRMatrixTest_cuda/associatedLegendreFunction.hpp b/src/Test/buildKKRMatrixTest_cuda/associatedLegendreFunction.hpp new file mode 100644 index 000000000..4816db079 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_cuda/associatedLegendreFunction.hpp @@ -0,0 +1,90 @@ +// calculate the associated Legendre Function +// P_{lm}(x) = \sqrt{2 (2l+1)\frac{(l-m)!}{(l+m)!}} x^m \frac{d^m}{dx^m} P_l(x) +// where P_l(x) is the Legendre Polynomial of degree l +// +#ifndef ASSOCIATED_LEGENDRE_FUNCTIONS_HPP +#define ASSOCIATED_LEGENDRE_FUNCTIONS_HPP +#include + +// for the normalized associated Legendre functions \bar{P}_{lm} +// such that the spherical harmonics are: +// Y_lm(\theta, \phi) = \bar{P}_{lm}(\cos \theta) e^{i m \phi} +// use the recursion relation: +// P_{00}(x) = \sqrt{1/2\pi} +// +// i.e \bar{P}_{lm}=\sqrt{\frac{(2l+1)(l-m)!}{4\pi(l+m)!}} P_{lm} +// +// Plm is a 1-d array that will contain all the values of P_{lm}(x) from P_{00} to P_{l_{max} l_{max}} +// the index into this array is Plm[l*(l+1)/2 + m] +// + +inline int plmIdx(int l, int m) +{ return l*(l+1)/2+m; } + +template // R has to be real data type (default double) +void associatedLegendreFunctionNormalized(R x, int lmax, R *Plm) +{ + const R pi = std::acos(-R(1)); + // y = \sqrt{1-x^2} + R y = std::sqrt(R(1)-x*x); + // initialize the first entry + // Plm[0]=std::sqrt(R(1)/(R(2)*pi)); + Plm[0]=std::sqrt(R(1)/(R(4)*pi)); + + if(lmax<1) return; + + for(int m=1; m<=lmax; m++) + { + // \bar{P}_{mm} = - \sqrt{\frac{2m+1}{2m}} y \bar{P}_{m-1, m-1} + Plm[plmIdx(m,m)] = - std::sqrt(R(2*m+1)/R(2*m)) * y * Plm[plmIdx(m-1,m-1)]; + // \bar{P}_{mm-1} = \sqrt{2 m + 1} x \bar{P}_{m-1, m-1} + Plm[plmIdx(m,m-1)] = std::sqrt(R(2*m+1)) * x * Plm[plmIdx(m-1,m-1)]; + } + + for(int m=0; m // R has to be real data type (default double) +void associatedLegendreFunction(R x, int lmax, R *Plm) +{ + // y = \sqrt{1-x^2} + R y = std::sqrt(R(1)-x*x); + // initialize the first entry + Plm[0]=R(1); + if(lmax<1) return; + Plm[1]=x; + Plm[2]=-y; + for(int m=2; mfwtmRTpF-U9ysBplC+}` z$&ykiPT<~axb)VP5bPGH$@IhZbm)KF2OX)MQitiCacP^sJQT2KI+5+^)byzbp#OKB zbCf8Cw4M21=X0|6S$pl@T6^us+IydKwz8L8_F;>rsn(xGy;I5E;QN$QXc763KgZby zkA-+d1ymRRcdJuXC-)sXjsJ|Wl}`_=CUh%w7;MT)XyXb9pb_f)-0R`n4YF#5Ee$0U zd2N3>Klgh0$zK~Otx)NuG5!}_)oVt&dQCI(nPHD8!(UQolGxGm3dwKg^PBvwaLUxb z6}HMJaB^K{rW5M&TH(c{$zLlJUipjva{ES!`w#2466*O{;j0E&wZc}u%gJ{{b(7~$ z1xDeOy26xqJiF)>B|uVP{I%*~<;`1eIRCtrH*Y-uymPkQcFwtyCb|f&@Oz?@g}KD5cFpBjmM#{ zMZq`Y|L}3>Up)@}d31R*oO{u;)#lsPefl{3W6;lNXEful9Ebn!j-yZgIQIGBarnc> z;s5G!>~_*|_zxZjf95#+{^Ri9eH^*pKMu|#$HCcg9R6<|hu@2xJ*LgugXnSi4;%;o zpO3@8<~a1fJ5G78Jr2J6I5-y_2j|J-;D{S|vv&KvR zFFy|bYsbOqJ5ISO@H^GXszae=^=lo+{RaGdbpE#}&(DwLSB$S4KC`j!_U$sf2F~%T-rgH;x$V~8ZQG&s_Nv}> zpY6S3(~VoUZQpeJMK||t+qP+&>Ro%)M|(GJy4@sS_0fxNzU|gcSM}X+^ClzhO;dD9 zHvrL+1fhT9<`2m2DnEiZZ@G1g>gB)fqScL?Z@Yc_?R~dO^83*$xxN4PO??}CZ`!n@ zcLTBQ$ZGNQ3gfoTn{MwV;pX1IzJ1FvsoS>SmZU(pZ@KlxwmchdyCvCo`=&Q090A*M z>-J4I0{TWggVei`Vz(h4$tch_Z%Vx(<57nGzT5jYVA40RY};; z2fdg7h3{Os-?n|@hO^I>+w)cLwI923+j-P`a+SYVsv6_nw&Rj3F1@mE?S@N8zP0a` zH!yA4mb`7-rZ%RHeeuugT-yU%Zrj#-L*KSd=dGo7FJ5(tLEm=Ks!QURZa50tl6tPc z_sZT)wVk<+ikb@-Moe5&(dzLz4fmRZMLskb@OdE zZrRYg>Gs=iyZwlmW68)wAdUFiE4L%3mu7X_U-#a;>DC*!_Zt~e>CMz8qo}>{W=bXY zGfcH%Q!1&pZMk*BZQF!;BQ-Axs}zym8#hs#+qc}ZNl)6ap;vGFt5omRxBm5(TQ_3h zZJ#j`&DJeh{ldJ#K*#R4ZlKPSpV_`mC27FhH!En{Z@U>=Y)JL>(hXAdms>X7vTc(d z+;ZDzX_CDHVfNu$`nKGvdN*zC+uldQ4coREbV#>uR3HCny!Tv0e&nKydf!iY$(2`L z*1PJQfcnT~Yu8*v(y9-tk9_#!S6p>P^kdLrJbH7Ux~Qiox@Il(_Z$2@J%F4iW08f~ zmz9~AjahW3erG4_ASRc?3@v(^L6v!%q}udU$={{tP-=-fK_A|PPiy-pM7jT{KISQX z+>X3w8Ph-bWfEwn_qV0Tm+c^NiE^~1e+geBgRzHe!ncd5wL>}E((h`^|Hb?M7t=+% zI;AcB3vWp8I41prZ%DVbrCZb&kt_23T)9m(JV&Qm3ck?p)bFio)e(6XWrsu3}g8-Bk@e6Iy{nBr)<$nH*LWMe{+>2^u8n?H8-1{i?rWnDwb9$hf#Ej#*=_tIZS?l>!L6dz zq5Q7d$E~|F9$W5XR%he_m0uHh+~P<(l~x^XdaJ-B963vcUbON=^?LOGG@F-_uaZ#S z06dk)t&X%uDw_mM^X@kRF&i};g^?gtm~k1tAhFG_bV zy7w%)A6k?@wdlTo(S2dj{mi2K%A)(!B6+bz_mhkGhZm(M7TxC-@eeM#?^(pJ7TpIH z-7hT4?^u*RvM7CO(S2?ae{#{if6@JLTmJU;IMd8GD$UWx>&-8(UT78@)n>UNZ8P<$ zr^DmQkXKdY%+SlVupw)=LotqPw%cS9xh+keca<{!(R^19K6h5mZ;h6{4P z*${B3eE~@;@;qOn9un)<1z&HTap4U0QK2ptsEd*2Xg#@pc~I;>{E1v< ztXZt5-knXWNFp%aEY~NRS|fGlK7Cv%G`)?}&k^Rd03pV=5iDc!I+p&u0>Z zNlX5r;g4(S(N|k`&jnOuB#?S{CjBdu)?@L`CM=_jOF8Q8E7_D~lzJNpKezU=^r2;s zrG8-YS(OJ}cU@4@@(;ze(T3-`I|Cjy66hhGkbA8!&`+4;N^#}52Dyf~hPg(##<(W9 z3S5(1Q(QA#{fc~CDXtvXAlDGrFxLpz7}o?>foqa$imSvm!&TvOYu@`5*MiDFwELJB1>-X- zGTTpDo{4b3ihI9$;_Qow<5Pn%!tX43II;@biE3Z;AJw{GQj69;3|3szW_z^J`FO== zQs9p8&6)h!*zut)1zs%VXa)jKJzinn~zsMl6lH5{OdB2_*i!Dk`}*X zhilE@^oUlj=Fkz_&Oc>eo{3l1o4ikCllF(B+wFqAd`IdR_hwz|F31dO-dY4)rFO6U zj%9Cjn7nZYEinkmee^*Sgd>Vo~97izi&L@DPIbyYb}BJ6z}9 zn|7W19on5O=v0>kojyl~_8oLZ9T}%*9q~xeb@{qX>dGa=_pE%ib6?boexJw zEZ+ORyHL66_2$bT@~9;{;_Lqy5}syrUC^UGyd&gvT&<~RkQE6&Zat9x?*%P=zs0)n z;CEH}#CNsoUu zw!AnKr(QHQ7T9?5ohjwp&Di#A;2iIJNqZ)Jj`!4zU+s;uE(>lv`I(f8?9N)iKWCMs zugjdXO3J)9D)n{Fx17`S$;!?Iu2#b$#nP^t&YE`qndP z!+xK~et(}*95rw9-?ZOyNymQ6A8NB-2>U&sj%d-m zreutJI(&gc>i%%RwdQH;z9FDud$Ld2pXOSg@u%dfVmE-+^U2cw76@ye;0iToM&Z9m)abz+AaNLkKRw*Do_)wiM$2fd_ids2cyd~8vRCT4@W-z*0VAX*z=K>f4z2xM^#dh z!0xO=Jse4eXVaZ(@NADdYe(v$u1pWus}?18S--LwTeWAhCc zc$8yDZvBRUluJW@*Sfj%gJG9Ig z566_dHe@O8lDv^!XY4lG_U@Gj|MuX(Q}%-c&;9Km27YAS7m@V9t}|vMvA@r{tq)^| zzh9ZNi9J*z23@HqRwm7Rp~>aj^}V`>%g@!K$@nJm7D2oVr2pgMCF%dTq>KLK2s+e~Nr&nx9iskP zb&&d}GqW#TsbVhr%DBqsq+UcH@#_cIip}p#r_Q`9{mttPeKhsRO7)f(A`bN-?6rLN z2HM|v$G+&Tgg!zG>8$6&1?(;DEA@R_Hh2AoK=F5m51syPYhE$TW5b#7xK<1gIcAzM z`bE3`Qf?>yR-ZTi(|edZ?$^scKKtCSrS-me?$6D>7@ef|2Na4gSWc zKaXWJl(W#c|K=+LSDQAM_!DM4#~e}07Rarctu(g;RQxO17;9LeMW9uiU6g76%12Ll zG5R%|C+&+wGR@|S;QOMU%M^k_E=)n6-**dP-k1u%DXgAXD zWxnEOEE-lR`ovdQGw+KAUorIEtbI1KS^FYmb0oN6_gp9#GFHi0&}=3GkzH#ZOp+Gw zIdLK0bI&Wo*9>Rk7PXLrHhhgc&A81t_=`K<(63E=8B1i2EMuX}iw`aPVHr6AIBVLF!Zk);c#3x5R0GJ#1(q;A zb(nIVvZvDTWp1Bhp1MkPof(g}=8+TGe#X;{C%bp1=r6AC?afNw)b~5G-!$_wM{an2 zPx&KDvfF>ZD>|lmXXCL8%{lHw_TO9i>7TCeJ$)qq4l}>Zb7egc5R7!t~+RzNLmv;a04jEru-!k?8_Adv%c_i^9TeF;joDf1rgc{<7sWK4ALPtJ^T!eZ*00s3k<9$T9E%tb4_f%QA| zbv^TqEhfM4GB3=!UVb?HYV!idlt|E~)_&nt<`POhx>EX$^m`}cU+T=yrAOxty>{N8g@5Q?_rIwin+2Oxb=ld$eqE%GN{K5|rx!#wDqXf?j7n zeY|_hLb)P;pG|#xZa{B~7cI%S)~qw?j6De9{SIrOrQPQnb@q4Pe?wb*pQ)$RnfNx= zX)>2(ohEZ}vrV49f;HVP#@3^4@@HlpwDQpZ2BclexK^cYGROUSt6j>N?E2QxcG+c? zQS!RJ{=$HS2F{loG6qfNcQvN+->dtWYbT*!}-~89IL)7O|#<@srEZftRHP9Gy1lh}(2_>7%5m=8#*t?Ce z?{x9&lD^+eFND^=PWqK=Gw)>&SMn!cJvRT~t497F<_NM6_1@QxO~3dxNvEC2I7WI; zUZ$l?Rx^FSc)`xgqekX5KWs z_2$~yW^+l9Is1J{=05Zn9-&*b{0Vw2!T-nXSF<*12(5qD%i$Dy$TNW-^Gx8ie>3Vt z(qcRl;CaFYsm7sf>Qj#eG&9X_?w5n{#yxV4oaB|OeSf?qZ_6Ti|E*14e388Serf3P z=j65Iq)u3#KGf-D4@Cv?ltuRMdGcO$<}9<1f@SJOfM@iasN`8+r!wChY16mK-hGp{ z{lV<=pg+4I5RaXic`N(C9`)K~WJ$Pl#y*5c?fa-a3rt=5-pu3H(a~@v^&!t_3}q0kLUlF+@sGc1ZymR2J4yK zD?RGP%UaJfMfVQclISdROW~tT6?h-~bNc(z%V~c%T;NNy*T){s#rhhHwUMdwdEEbJ zZ1wMqUo^f}onfz|?MeE-Q{7eZsb6B>LLm1kk@>j;4rQG@v}{i*6|PY4YZCGtL&nO- ztxxFply_S8R$NysXZ@DO|fDc^P ziXWz3XLMzx4O`S~c&HhzTgi85S##%bv#&nV%-0VsbL<%78P7P+b>68qo_>=0$I~Zx zu2bN-PMo#SB+qoFc&77KSQgeQXT5Wu*-5| z=FqYicREz>^pls^^>RB@_ax64vP-)MQ*q{?t~2_xo$S$esh#0N%bwnOXxYx4u7AB7 z%b?sT)pI&99jxf55foKvrbwdLd(pI^Dpu{E+;;2jcO6%buv3 z=+oRu`IxU#*n3&0eYOi#k-T^yClh>64YM`()aMA)`hc zW}g0av1_CBFdOl5UJk@3SD!N@Y{p7>c(-n88Ph+3|(6S9FXa`*H zvcrGP^poGXoAsI4?i%XwlhaTBpmqOA?mspC4VcxexP+f$o=l=C$DbZchTN$B~R-;jxI(cURY}R9U0d?&00&whh(!@OEt^2TvOAZ z?+!M-br~;O<3wwW5MR+6A6jEWYg}lJ34Oo!R)^G?jMEqKYV_`vGfVbG2GyCfS7YbIjpKsMZUYYj<-D*kDr?&DOa}VpA)wLv-N3943)LbyxsntHs9&|*l2>ES& zHP$D!m|7Q#t39DqXTFwF-L)RIKa^0HNT?{!dbfs$)t+#_l4reh;h3#holtXu zF?5OBytOHGEurghC*vVHR?sbC%Qr?k%Z&wetD;*{m8&V$S5w;lkVAVmG>)!4wsOs> z&4t|B5_Iy`C(zHMtqA+Hb>W09Umrxjn6^LMqdglapkF`w^=nIbe!C)=v}uh=^czCI zfVMRp(e|L@Xd|x8g>&ea(B=X&=$FGjDQ#;or|k(&q2Hi37aY=7gi`2NLcd{cU1%H~ zST9#c&~E}=3g}Qlzd`hyM3)(KVC_&}K)))wI4sQ1I?MGTbZ}Z$1V^+zp<&J2Q1&R# z(D#R?(8potnYO)HEumKhoknb0&29JAlw~g9wroX*e0_}ac`SQ^KFb^!eT{LIZ}=@M zLIKOV(1b!aTe%vu%!PU^OTuGXU#+0>wS;9wxZkoa?6H??V>as4f^L>)d8R?zw3NA) z1V_-xZ`XL1?`=$CpQL3gWuoqo8$qWjrPU^oJBh3qI!z(3gq(n#`a@O)86|8Hx94lh zx-RUt?hhA`)nliAtj`AgR@w-4F{89bz`BCHt39EF-P`D={3*+x@DOE8QvL;1tQIJn z!@4z`vTL=f^422Ot-+X;GTZa@aq1v$T@mWBt_w|K{|W4!u+D}0t>~co8j3Qfth85j z$f3&=It-!9FglcM(fXjhTpvM~F?4WfT4M+u29Y&mi#CRlKaQ*lZD9f1Pav~^tP#pP ziHsRA*~e-ufL8^tN?&qol-IT-=&-E_j@iAm#d3WLT}tSnI--pUFe~6YJBn35?*%w* zTZ0Ag+_pVIk8MTBhYmj59BqGHcpP0E9es_sjrMDMHsJ2)t9d%8Kk)m(p9Fsje7|i; zIAEjAgI@waX4@JrX~k*;{3Q4@;HSXPfgb>W5d0DFr@)V3qjB&j!1se6qkR;>p9H@G z{tWm-;17cz0KW?U82Ag|$HAWhUpc(B68NfPU6^+z8qSXWVRy%~fd%j@*vHecBzOTHHApiOqng<{|bz>jw<3HNlY2={=W0KXsn2>3(b z`@kOte-iuv_z{cND1ko%z90NJ_!aOM!0!h?3H}(^rLJgW#4_4Yom+!rg6lxT%E(I>56p2?oH+fj0%-2<4rij3r03F-Upcoh!or&aL4bZOm=eYCZP3 z&=i;{uw#@r2euFFxC2{K#zF8sqAU0wEA@@OZt#b|FM;p0MjMHa(Z(?Oopx;HC{~9l z?^x%vfpK_K9o|~Cb473l`%J(yLV5)|S4f{EU0J=g8PfYZz#~10UJIn>kU2o z+4qMBJMy&{ykqb>x{6ih*cyz(>x9SQkTyhF9V>zb>^1~%0b7*d?IF(ydV1h@cWI0% z-kJ}7Kl}ms$KW4^e^5Oe9-~|yup{us;OPf{9Gk@9?Sa?VMZ2MX6QuW(K0!VEk)I?z zMS2QZ1!Uz&A0$11yd3g|NFOGB68s4GBczX!J_!C4_~WEckRAhn2>b%+lcblxkApu& zdWrO5@MplEA-zI+5BMYCFOXg(y#jthY}2(B8$BBs1AhU0XBW2VqTawC2j4@wkMt_| zN$~xo2S}d)Uv*M`(qp8jz%PIwC%uPsM`vFx2Y!O|e$pq!{+*Pc^c3lX;7@^{BYlu` zcc)ex0)L3~VbV+Bd%zzdeT?*B@MpjuCw+o+ANV8S7f7EZy#l@;{3+5)q>q8W0R9Z= z719IXkAuHJdX@Al_!02c63V}X`T<|rDE|`5zXbb&UjW}jx{q{+4f}%cCp|#=B=}Bz zM1=Gh={?}*ER>)09@5=5>HXjjF^2e=(=2HFLo?_Wx6Cn) z>HeUE%RV`j_g;)bL4;;4QM|#_FFvA{3;*t z{_N=eXUw=?$)5e6e`f4>|6lgZ*n^zfPYgMOYPCMM_5J?g=#W~?ytnnNID6!I>RU`+ zneWP+dw5BLcS2X!WWFnV7Ae(RBkzM(YMvl?wT#K1Q_ae-%2reF-jYteduw`WcO~`c z+YY5%Yc^z-erSg9p3I}?{DSb`GfC=ZclVwe7-D|sTJy7k;m$na9|lG`M+r~PjxqOitqEkune(~Ud@?)HsWn_{ z?#LE8y@U^CCp)8r-^orfzjUp6AzSLq6TY6E=^Q0|DP8F-5^l~cbe0M4$y8}iqMx$& z)kHUk9o^8&X)hDrKj6l9i#{HEl<;Q*KITfIkKaB@cycyiFA@f_5#~RlPt2}?dq*~o z&lY`pn1_iz3FdR6Prp4+_&V<&juO6Aag>|XUNoN*wkml)Mw1p zXWZ0h!qlf=>N9ETGiB;iGWB8Z0{%nUimA_nsZZ6^M==hIJ`RVWkJDl3N9ETGiB;iGWD4; z^}!$N`Yf3GR84*Gb;x@t>tH@2`Z&A#2w%v$yYhsuXFXk`jT6*YyG18oSF!OH^+V#D zGybk}vXYSqAOZ|xB3Y2pAGbP8ztP5rk^d27 z4x#IqDmT`m`#SU+Mz<04xfIy3yg+5oK&!na`rqJgT=yMJFlvI@UabKeceLjgk74%t9qm66P=TqoY zRYlf3<;HsSxek3C=;K76>(QqdecW2U=F!TvKJ>W(eSGNS*P`_e=(7=hrqCyVKAX^I zGx|i(r-VMNB^ojGxDmbj(Q5{~#IVa2blQq86%9SG%dN=03BBUjrHUT6p~KDSrtohL z3uEcY^X!fNTgqw4*W4ERV(3uj7WDR5ymg-?T6cv$JP`MvHQ=}8>tkKzIZa&=io5R| z7_(^AVc}nMh&@SrI%O%cCLL{P>esvvs{F1se;f!{Mw!1C8H<0tgZpgEqA`E>HkNi@ zaffToBbjm9UXLY8o>id<+W(lP$otU`gyMeNK!LWNu=F+JkvlU>yI0-OZ=wIJ_&K zwl%g7L>YmUg>$F6|C-u`juzAKsVXnN2jHjg==>4MYsO>5`^|Wqc+!mb5Ko!$1o501?5(s7c+hs=12_^=tz z5l@*q5YopCenP$nFye!PW6}xv&cL7(N}tp5hXm846Y_lDpcAqeV#J5xnK0uc#K%k? z!bZWQk3k4fZi7TI`bVBU?OV-e3`l>-I5HFeWN#ZkRe2RF* zjF*TnnDH6nRWn{8u1xF&;tn%jCGI5dx8@r@-tm{ZmUgK+$_+PkcSpWK|2;x?K=(k0 z#ybBf-3i?f9a1R@|r&;gk8*b8}H$0@l*YLsH>WieY*Ok|? zNN)t-A-xf4;~~8fGkHj7JQ$rPz0uRgLwX}&@{rz`>>8aXz0q&-$b0LgGu{}oa`2?U zA-%D*yF0bCThRxN@c|x5qfZstA1KcEX!-dBK48$2pY_{D=LhixLzePvzcTux^!KIR zdv_*Pu{MHVFvgcBcLr?HxfuNTqIwTl39UFUWi@N%s*SH|c)j6J|Uhbdx7SykOE}#3#*oocM^P zTpzb+4f^a{!N$A57B71-(Z-~WX9qT(9q1UwIK6;hP#t~fX^htsD-Di{@u*v`OkbmZsV);{hHj4Bw)siMXj{2Gy^5Z(@wL5#j zNr2N2&I}jkVcdo0oU0C{8Ni;&+3o}WG^KGGw0c&*7dJjvOd~^o4R+sygTc9*PUrUvgG~k zrQLU?2GPyIT)@Fxpu)UY<|{+Af&NZ!Bcb&nBRXHT_VLXYW30727gzcD9wqvF=Xw4~ zzMVX?lkZXf$XY+zh;{ZgT;J>BJ{V4tC(ucKs_6WrV2~HP&IQoj2Yw2iF>rJ}b&Q?h z{gFLpa41s?#|@?foFq8I;0%H@D7t`C?eI1h=kFnZLh@TgFXgXv^s#qZuIG@KLS8=@ zJ>(w(F9+WUcr95{9?_v6>|yv@*ptYa0A~!G7#IOCd|*hv6!KiRugwloUe_*>`Om?e zM*Uy|*BxEiLDE~eV^Ri@3EmJg9Ly74w;#w1gFOVc>yFtBr(lHK$Z#No{x~<@(qmWG zz=(#dJ!_G%DzsSVK`>o=mJj5>N`W;AO^CEDOP zdQ6H8vmT|)qWgrD=S#b@39v-}82xZkJ#cjR^6mlG zm$nRu9Vd{}k3J*Faj5lSSABPO5_uj?oA=0g#rWXBuZqkHcqQ}|*?POG&+-oR>_88g z0S$f8FAmlWeZq+@Rrr-Ie+T@5u=ERQ?+$e`_pgRrzu8Tk_YJ^M9eL(4`FYoG4(Ph` zygeLKdFDUJ>nJiuEY6R!=IB@6IgwMc(>xSK#0&9~& ztyqhI;hGaUPxBn9ukMdV^7B@ZBo)t4|r_Fd6#9D_}c?c zn|BWRHJ4@WfYg6V8*TX5!%ZUFp?*hMCrS%-mq)`?tv0Ii5}8k{pbc3X;*|Io!C$lzHfy5oyCTS{U_J{CkC9zWE`DW+9+df zael~}pLJ;E*__oo=hUKeNo#)2uod`vo2QJlM{FEaU%S!a+N>4?^+ zI=uBlN4_2h-v_22yoi*C_MV_mx}|L)*N;q($U~N14&?YP_(4llZ~K%dIAbX?f5S&C zL8eAMeVsN$+jg_2^U1nTuTRD#@|gF(Galq(@uCVLt2L?o! zBp7k6I4?T1+PF{iQcl`}h8<;`N6(lxTBmO3T$V1r4V@jJ{WF&A3r8%)dPNn{?_a_t zX}{<#{a}i<Qbea8ho__;z~j;Hp9@c_sD2-#E*$Eo=y^Z=>p)i8 z47x%4Ss1Lk&AXWD7l@-~T8)CNjDA>-YZ>9ub|mckA~*2K(a%HuiGr zw4a70eM%W}BtEIf59;)S9{-UZM^=L|wmyUogXoY#_At69kXe$wr*{qNYi6SizYhwQ zUN`6d4Q=n-(6EU+$UHUf|0isCAR9+NV_hq2+HZuwq`b)c`dU3**1PzUy6at+4oF|= z*VF$cEPY7w%U;0*wvqLI+SK?1Lr^f5cHgvPLGoTJZRIAOuhZ5#B=7EY+cLm}JzTFIMNyEpy;+X(g*>OuB^Y&*_GF}+{m~rXaEtx8N zdJcFDpYe^*0{8Huo4i-{Vt4{sJsrhLf&32S>2)J^q%G*<6Jv`$KAn3YEqKyL$Wx2+ z97(Us&}@1VjD&%KO`hN#s@>@+@Y?giQ$tR*1aCjQq}OH^@sL&nhi8WQ*(5xq^UUK| z9MX7hTdY>$Nx?%p?-d-&Lt2geRR`ly4j$5LEnT41$X9ieXOJ{EJbJmLe2l};YaY_b zR~<6aYrZxf(rSKF9{H=o@Q}`P$fG!<^KOEn6ByMIcu42@<53>cYjKkY44yd^E2Psd zu<^OOGh^f-z1AZF`#a(4p~;#!))FRX22K zJZn5khqvm14y{&dqr+SEL5Ie(#-sf3R{hYS)hcatc&h>E&}yPPJk=JlrKLiu*Xxqk3~#Fbi7 za&S4hlAY06_xgUF?pg0M)AvmKZP8iZ`q+UUO`BD!e>&AE;hyOP-vsi_)^xv4-#VQm zzoaM4`?xah2X+3f(*bZKy+>(!{vn-za5|yiZ=Dt_#XEz;&?C(K`j5~DrbnQ~pb1aX z%&&O=a}0Xiq^H{GJe#km~w5~X5#{t;wW zz*OpdUGAW*I5()L3;v4f1@MRT{6;$G{eiP$dJGv=WDS8od?fut)5>0)8`1MSO5OxLp)97n07%JXr%=sSn(&p`WMTmxK9?za;TPESw|1zUcu$Bs?+yN>I+BeO&5MrViH;TYk-j53 zy@Sie^_gi$M{#b#o}YJi6zBa~dA>lo+#S?uM|5`5UY?x-JD`bOK07^y{iKXO@<@3i zdRZTtF6s3_xyUc}j&Kgnj9w=q&(K+^2XuLYqtvVD@;aB;!_du-yqGG_Rw&yH@?zLz zLG0g=XU~fD2sT*&H?FslJ>S~;S#kq)uL?cBSjtLW-*h_2EOkYgF0i|M+a%DvQ~ z*h1d7cW|xX`Z(9QwDXrQqz!yX@ouwHM*DO+^6YWRdZs+@c3>0Qug8MC_5XX)gA5*r$=?Hmw7EQY_`fLo0I2f_@&(WXGJ0i=-{~_*sxjw>W z@NUT)J$#~Sw^|z%Fi6tX8NPY?B$L+%tIjkD=27I*p@K z6`hjkG$FRIdglu0;;_<}(P0w#POHeSgTwZS+6$JnLunVU5!wkwCuz6RPhNrc8!l

z7UyRiW!cNB4AO@xv`@daJj;7+a{+5~Zm1(a zSEU{!R_cN0o>GpZdSr-8fBh@2ZZ4x=7`jLwT0o}QNc3?LN*n(J@&DjDc{*m*=7&4H z^SmQ4A4ex=SDt;j(fJYjwVP*{33M8heyz8a;py=XX}70L`?|ck9!d05YUlI>Ix6+= zC4U#~&6pbKPZ55H z@HDO$xuhMR1ue!U?e}Y3|C?(S_wOhry7F^l)cpc=-;ce=u~8KpC9%;2Hd3AW`4rEA z3e=mUvpmmx3(Ot0S!ZW-cCah2@8>A>Q}Eu&^$9Tlo>2NjkodO<-_0d`{{_P930wM1 zaxeN^2JLMncc*u5s4F^GvgYSJos9Ke#km=4dCu3V&5v|>=PTCeyuY(=p7$Ks*B+e@ zbQb4%j?G?ixe~$8Pv~{_WAM%euhlQx?bEK$sql$Dt?{I-f7|lRGt09D>fB+A&c!?P zb36x|bJ~h?J)Pyb9DUqv^Ufzaqw|B7zIl%=Ki}UuIzMD7&iicT`5Ek^)Q`ZHaZ|>L zuXD+mDfan)xIRc+>?8Hnvd;y?MIRY=RulglLOa)oi61D9EHTc_e*dOrUJ8S_tqBdtfhEg zY{p)$mF(X7ls#IXwCC#u`)GZ_UaXJX%k?q4))=vS8^iW!W60ju7_{dbIs0fMWiK|8 z_A=iM6srk)x!Pmb_~yV{i-8#dGXSO^OdpsYFx_A}!E{h}4saE?PU_A<-BmlijfKuA z_a64fB7DEm*O+0C6#H_Y3zs@a8&mAPI{E&Z{Nc$??9*AMK4!R|;azC0Hq1MM)B$@j zx!_P|xi-jtG3nfULb=XpJ=KZ*X-lMslAY*6J1VgL0*`NDytR=|sY6c?nL(ee$n&9c z-DA@l33PMYqKzJOa@z9jHIMSlsK|4mazok5RmK9=mXsHn3s!I4kF1I{U-uzn##*d< zz$sZZ-VMiw+|!0alh%A=ren0uSc^SI&}k-=gErhD={YH5Xv!LGIFac<9%ErcNtvzX zYPCb-o!~t0371*Jd+QbUi${<*gp8>UFW*o^8WRF_2v2mB8%gqylfR$* z*qyTGf@9z$z!?Fj2OR7lf*y)nM|loZMxU9`U`L)kWvM$kx3mz7AZrL&*c)9vVGlB# zRt@_V!pa)0Cp+@wGi)6pud+y*3iePwAA4w0J}GAaUH#TRa3Z{4JKD&hqtvk*JyYoA zK(DH0v|h1zdA=)riEyH$sK4KY&B7&1xf&Bbi?{C7_m?A~DGP0lJW_^9^7VIUb` z*6>@3ysJ>I#<4*U7P}Z1MZ1};CXysZ-i`FA5U-wbh0n(?mJl|x{zb$3#&l1Kxs7>aD={FdE-@7;4Q$ef zsmB7L=rsmSbQ*?l0@{d@Wg$3hY+ioGEvlv>Y}{8TmrP$Q*(<33fm95$rGsEytDON^781hBFDp@LwbNvpoKc`oTWp(5Z@*~Z45s$f*%pz zCO&N#-zM*HlArsT@F2b|hffpVCO$2NZ%g9Sz{8(Wc6=IT#h(@NXSBT|{!GK4dBrZK zKkLJvO6 z_@5E{&oDl12%k2HPs`!cQuwqaKCK_0mcXa=;M3w@#=wk#835A{rVmUHm~JqgU^>85 zU{>uK{>+O%>%*Vr@n_}Ql--Lzi{j7n__I;`8SUC$u8-I?{FxVj7R8_S;m`8;vr+t6 z5r0;0B=BiH__R2fF)$-w2Eg=#=>yXPrW;HrnELn)t^!xuzKrG7P7QzN#lFV)Sm})7 z&-%EJ(EbznvpoK6lzZuWBlxpoqtIEF`rw|k{_t&Mozgaqv1q6>k3TDOp9@OA&UNDd zJEO?+ATNSHLl@f7gz3*lI=%SAKKNVyY!rW1#GjSx33PMYy!f*y{;UswmdBrs;?IiW z&l(YAR~gF}tY!I@178-!m*w$gqxiBSzN}n#gE3{LPSDEDji;YSQH;t=Gmu)5A))~q79h~SiU~oVboIu{Dls5rjEu4hmb|T z4fmV+=fIV5#tpU;A0%T_iZMCa5ycPX@k5%_SxD+t>Apu3EZtx9z~i=v9mIbYLIKL) zw_;=6x6x+NTYQ@XJ(bm4U$BhUXDnW59{gBd_i0n~f8Cc+uTJDm!Xx$+TNdDnca$50 z9esQg*4K!js|S62mLh(wT%BNS9=90fj-$s2{8A^<#uB7Y;oHPkVk3NDtwjIF=hb3b zS^QAd-$B0y-;GV3#3L3jzAulDq%R^P33iJ6xHgKvE8_3+Ji{(FVvLOuEm|+(w<2m3 zUsuG}<#~3GUK%nxqWH2hy3B;}S=AXE^^MQNZb7k~qRsfg^nmFmU)5H`uaOVDl5Mm; zWutEiT@~e>&13vrjI+Yzd=|gzs|5LmMb2aKe%bhrMb1-sj~Q=2m*vF&(>j+$X*qt7 zqW$~vD&LL^o>Lj;u#BiP^Kw?%!L`dXkE%28d$=fPlC7Tg@XfbRJyMaeG_Jbui+lE@ zx1V%pI^uaETj2ad;|yva??SK3_*lyX;E%w6gfI4JHpRKeoY%-1NCscTTnk+W&7-oj z0hI+`e23!71+0v}^1aYGYwt;)v-T@#O~p7@Y+}HYk=}mr%LGS?LFVVVMcme&JdpR3r-$x_I!M^J+z;5Bm z`2dUS*Kgv=`Io00!8-cQlTWV$<9y6k`kUEQ3ed96pOV+pChv)d4ZB3zWPHJ-wad+$ zG-n&%Ehg>H=^{4$Q~DU^8nnLeGU`uk@jes3r%h&Uuc5EeE)ARf(xlN|^tzY4KQ?KO zHrmrB?LVWhr>*{d$E*J%@{ixP+RHCzyzJn7f6l0Aw4d`J?Lyk?-_l+qoT27WUzvAu z#)FInN6+5;ZuTnr_QsQ6+^L`W_uC)vj>!vI>6@<|Df3H>xY_59cMis}XZXncaKrqO z^V2Hd&Tc>H>8!|%#J-z7QR5u7g{L{wSKfEx9K+x8F2~$*&Z~`tBeAEm|HxR8;#{k@ znDwPpmUqimqjws;!}^(_sY@?pe0YL$2cO<~D)p0keq&b79+lsb_=c&sF2CHv2v+;F(PF)=DNACj6ZVTkeqQAeaMi#@#N4BTl=_V{K(QV?ft)8 z-}+glMt#dWD~s#t_T?eV_j4>$|$BzE3mdzoEX-yH(#yyWd#fKQQa9 zRo{Bq7S;EvBRogz`?cZ!yY*e*+{eGPzAt~!kiE3~FRyPo*GbNAY4z(O{d&FLuP>TC z+OPTDiDk?6es(kcnzQAya%P|O73nAPd_DIm<2n1_ryP^5bE};A+@Eu9m7GoF`pr7t zDeA37%s&5@w0HV@rP;)%YYxu7JX6;p9^ov($ak|B>;3(StejVB^!G{5&v#@Nn)CtA zjQXAQclz#WrcF32ioPyqLS`!w_gMB->7Vj#E$1`J*f0KEaW;){)^ZnRkoN`T936RQ zU^(-zb^3XzKj#cq&fE&dW9u@9I@j$Gy6cMTIJ2u|la_xLyuZvoG8Zsx^ekse?Tdc% ze;M^Cwvsa_mHLOaG2;=bFa69Q`s^{k`yykb(&YTHJhw;5KK5+JFYwauJfRs7j zHcp)KMMK`9WvA}=k#UBZ;iHfF{g`9@W5n}#cClYbow=9u;a}j~@S;99Or0&iNugEm zqfO~`bmqg%msan7Zd!c7?v)E_U&PHAEaSKM3#Goh@@v|@s1KUhZiILe8{i*Vi$B7c z`49TIDP!he(tg^%7Z38i_>aF}l+$B=FaC;YXSu(`w1HoFk^Set7a!FA^6$kDm~vZX zbvI?+`sQ<|7alNl+^n6N-mHBpv%tCHa=!RxEt7eMv&EZot~mB$Ui~2JrC?m`d1bS9 zeI|axy{`;6bD4P063+Hl3&YoRr;YQ)zrS<2DPQa>ec7Vi<#!bwqk4XOMj_- z(P6hS?_SM%X*K&Xa<2O7+C)?8@aR0J%Pf=N3%|&qj%y+Zo79e1m#y_mz+A6<+SFCn zE1xmr?dz3$+uJTbFnH{I##pb&ZxqRI9?5SVi7wJ+8T+1>-!Mv@{WR_Od7jNg>0_*| zXuGex?yV|yNq&enGNinSMDy)Wck$M1ja3CM38JaObK z{?+-U(q>aCUkN#l-=L7+cG-Tq@%s~UwzK>O#gxTZ4=wFBeuE;#dXe=Izda%Assq`_ zwORVj9?p(_F>ABPbD;08e6O}IGR1pN>@5f5mIUW*XESc%68g*#z48}0*75r$EBHN; zbzrUIH&K@JdnAVLawh&ypiMFE&%DjUS(1r>v^6=e^AlC$9I$N2r$w=l(a*LBejQxyU*mj z#iRN!?Y?NocB75!<&p8NK)bB)y9$$xZ?6m)b{&IOpwGPBtT(yeWX20`GQLf4hOXGC z{Wlce`xlIFInLr8L(Z%zH~CsiSHs@aul}0=qrW%kvVQi%BmKI)?hpJAL+|#w|AtAE zHnrQd&7^LNZ?1H{_F^<*`Uu-=`=Xn*(-|wJKIjA0+$*f+)pGWNpKkCcj5_p{bY5vjbe`akY;@<{6;)PtLM6 zezcUjGUf#Bb>-EWmQPKc{TL9<7r6{MSe#rRrOgeSKYR(n; zA@6VBwBvO4LQdzM?}O1X&ZIq@no@@eZ`v`XZsN?vXHpBzXFLbj?&KW$$MoN0TWCJ! z*}A-svq?6kl~xRH4fdtaSDA{Or>Hb7u+ZG#*%};8SG4ZxQ+9jix!_mRkE>Vd+gb(w z@W%5WOD$+Gah51JpVZRN1#je?&6h72(Yo&&*H)M0ocsx`w^Y!wB^j&6um1?|X})~H zr1nTj@=soGpFB9-NN-)GrK{k)-u&Kbt_$Q`eV^7lJ#qcOfx`8lKd|xq%{zD(Wu@rv z(Yi||ty`Y!gtwlerIp3V=hw2lqxQ)3%=M>F%5U0;-?S}DIrL!McAU(c!D zIXiy+x?r<8AMmI>2YmdFj!#|9yY-Hs{04xW&wBKC0QOAFJXH3` zcjFHZr-wPqp0ZUODid^CviOY*IH#n}Q>O(y+`B1DK&_wMc=Gdi$lU8G`@amFQ(DJ2 z0r&%cFYVykCHRDkGDBMLeL3o223?K!2~=oAdt{ejb7t+zgW3ZF2k(1e;A^CN)B|97 z(81{Mf}4i^l>LhX(83<%jcBX$Zgu*sU+tr9bn?x_NWgXOzcTjC1or87h5wN~Cvp*I>Bt^p%T6mYNo@3#eMKgrt-f!DIciQ_FgvW$`n<7} z-^G4(lePV6ffLnrA=kfdNDpa`1d`fI0or!(xwW6jJhwKGNquU7Z#CBOJ@WD$|8dp6 zjK|VD`yZE`K--hw{yHPbd7e5RzuOY@sS{uItFAepT0ZBNwnTg6Tb=`Q&Z(q1xOWn# zuQ0dTcc7xZG@n!XT0-^F*0aHWLg9<3?XyYthUqW7%bVxBx$Y8UZf$`!IS4&PJi^#9 zLf9i?h~*`D$F%C<`PR77cy{TnPbtPL(v>AUyFl6``DRqKUVs)yR*5kGF2m;+wC+jz z>w$>2ntt<0CAIDQw6A{%tOZlmwXoa{E*n3Or8iq+KnC-F7K zs#AS{dCJv#IiFkm!Hnxmtv1HKGdMXFt)+glF8k3vMti$K>z$Q$qNzYo@f&NdEB;73 z`y*#)xWhkxZEuwJ!Z-crbFK%!c}IGVb}rveJ!RiEa3cFp(vF7kFH@G)%$KwZ=Zl(B@0`nN9JyIQ4|4^;4?oV{S7%8Zi<`r|o0{i|C1U-Oi`pL2p8{H%||yER%)hm>u0Y4?&HLrTM^tqX2lTgEpXs>piXqx+*mc1o?w zEU514p=I(Lb{g~7JU;8NCxOme*J_!^)q7^2(-h-TF6$=Gb3E4&A0T`i&o^ZC!z**J zt(T9c<=pw|^>-e4%Km6}X9Gtx_Q@Q?<195m3n#;XL-f~dp@8UbeS4o}`-kDvv ze)9p<+c7D>bEud{GndAn7Sm(;d!1$O%ONS(5bqlg>+k4^zFNSCUZShS{lrgY?5$v1 z@jpJbQTIjv?QWwzEA{Y7d0rBypH$RKOjFLduyXx!{EwY6>?R=vm~{EBKrEeZ2pPFWENm=wCe?Irz%YvtPG=w;6Koyr$U_T(%Y*deYHDW{o4!bWE#EP$WgFu%2cZ7zzy62jn6|ohXxWc<%Dg>wPiSC@ zJws_5Q>wcXP~YYK`Iq>uQN?)LU6uXUa~8fqBQx^LSsVvvpUz(37`aAO_A%CfH+x8R z4+;MSJd@P*&F|b7l{RRj%^5!M%#4fmO|!W?IDw32^J(nZoSk5gx2hhQJvh5O<57>L z;7g`*LBovdwwavN^w6I=}yh zSC}((N*;XQzoehbALbjm*P-#zD{odaH*WUNXMOEefpBX?# zB^GO1-F|G>LIos#`D*}`84v~h(TG^&Rx=|EFv^dK!5VZ1#>4_+cTuaQ4Gr5eYxm({ zU3(t4t&Q3;$lPVy*2S${Y~2KGYp~rXREGJ!Kj+>H!#HHm^Zh>i`u@??%bEMR=lA)X z&#&`2=W3%4!M-hibC13UM0@wu@11k78FjVl4fO3qe1nU_TT*9WtkudJ9jvDXdkY!f z(T(3Jr)x`joX1ko|L56^$IxGoVSnOD@W=gH8q;T|?bA}9bfUk!-X-uaFaQ*?${QE{0LuYJ{C@Q+v_n_z*FGl!fN$1r)!Tw{!-^^ zo!|kNsqbj4TNPOML%bf0Q{nWkZ5ZFaxUB1)_);41CW@~qE>k0i*f>b^We9a|#`gqW?7n`&8x5;-y|;G6filiVD4uS5 zZ|!M(2O-88$Nq?YkLT>4E#3s(nt1QW8g=?e9Egr2JXZ2n}}QO@-p34Iu0&hZE~ z@Qw;)b}(;Wmf|l%DrUjF+2)PF+|jb<2l83*Kvez)Zxs7-DXl@(8QH;xaX@!ZWW+x0bhdwP1ZzvpL;vepT(UN+tu|{~ z3%9ZU+TC@Rp1B5%29gnDFei7#ldb>BuCP0)setn z)wpl~!N&z`@Z-(GVDoa9L(6VX)+Zfv>r>9T^)b)6^|#i!JJ(Ge>|8f@P@hoj)(e?# z{k*r``rDp!yE4+c&f$(8bQK&!s2bGId)}>2K$?tx zw_Y1P$n%xU$cY|o{=C)EoYsM|&uN

P487+#D}Bt-%lB+b=ge7efc5esH1fH$NoO zJNl;Z{nBr7PGP;4bvdjfK~C$)+YWnriNl`si9@d~aG-3=pNGYDqZ^AH>KwsI-;X67 ziDb(@Rf|@|?(IT$l*WT50&!@@oS}6}1B=6KiPxfc|!*()WAmy9RpUr?vWoM|oYUK#xdQ zBAifffW7bVPRG!FkATOhI@KS~b=rfbfaatd;hW!OUpd>!ZP+<~L%W0V8+1DBC$*ow zRD|zGY=VqgbjpqJvwMrB=VClJpgog&KD)ObI=8Avq&G{G)z2^o>!f~L3i;|ehx*0M z&MMFoY8%mjCYF|r`PxVF8p&!Tr;)tY3OHo7%O#LS>|Y$KB^kAk<}A{X{DyCrL3X>Z zUk}>y-rYtg$*NlXR$ma?uHLZ8nE-js1)1;rE^+*c7ARTG0L^#GN5PgRgJ$et&5-3T z2u_02*wTJ$4fqb8FaIp8MN8?3*UY~`?N;PKbqeH=C&U5 zG9nAK8@iA>`J5x7kG@$geaqTP->H4qTf_Eo+VX4ni+TEp^g+GKB+-f$)kHT)R~%0-&T(2nG(%wL?PR-ra(Sz> zG3acB{rt1FPkvVb4fqUuy{9GL^BeYC0Psp^d!Fdt7R4qrx}>foPL0Atl4}3w_hi(0D+>qLY9^9qPiyGXqE^~0l_eutLWQ2f5Oa^_49?UIx+nsAX=dSzSF5DK}KgE4$uyI|z zJ8a!%cjLMj5WYBAUvSo4Ul4?F7VZrm%@=4i_ccPf#tcfEE{ z#pZM|J;^64oJmUNxwJ9IQ>lyry~y(DvjqGWJZ+hAm{-eBJqEuQ%Ae$fATIx|NM@*m zIyc-&d8$*^AYK$?&L}74Jz;)JD8HOj%V_ORF&X)h{2GPtGOuyAty%;9mfpv7^=7ic z!%8jcRF8T<2MgNe(dQdI7oZ5WWrlOnF~KmoGvW=Ghp|Sl9p493;%teN zXZF=v!&_<}Q_#0MTOb#q&OO-afv6Lct!H`#!#NPBI|Lej+awz!!6pKb%51 zp0hv&`r5pv+1b2ilEW1g=5D@Y2Ix?9@>%a2TCJuY<2M=KHN>~&5s!5EwpGpO%SnzT z%*VFXGaRv<0{ZEp#qJVw}y@uVrtaPhfM-!{&!F7<{;*tD{&w?0~>E$kBzl$p!%jf+{G&Dw2>KV?pcp{CDdfJvW zJC9)ADNvS@-Ivm&b$JxvjVJqa@txb168|9E^}p8!L3bn@X%^~Z4bQF78XksSpkQ>Z zPMrfgX%5jqvfYM)7eRh#s>hgQRkvj}J2i?HtcT!Rv8$Q;(o8lCeXurZ62?JzvetfE z18fK_x*_2ajOQDR)hUAxvF!&t$861n3nD&1f5n{7aked!+Mg5xIb=X{P~k#52Ou}U zh4yDvA5;{fPSiK&U?+`EZd;bmX$Ij)uh})&d#{o6m6)hTk0ZCy6Pe%0`=pg@*`1Hp z9>QEyut($DLp}oCi^MmCKVD3IM00`iqp_v$)x~Hq|5*uWPoszI;Nm$nEs&+2vkRvS?$cN&O=`rr%)uEs(bc{8iv34+$hOtZ&ZAg&^LP_cH{}w!Ze+(7 z>!;%N%QED2#puV^@nrQS4r4xVT-**>?Cvch zje*S*cAAZg?f7PHH{idQ;H29;F8%hMzr;VS@blG1?E=KjAvi8?r+87NvCEIgB5e?pQ z4tP1oS;<};u4G-qN28)WFDK-9G@59SMwgTSN6?nCmA8{cYI zrz8JmRNmxdDqF?g#&_Qc2H7Sj9OWxMQKt%dc`>{^DvNlKC@)bt zkimF4DttRF9QihQ+VaXNT^Gqhq_ZUfw<_5H+7#wFs%iARjJ9a9$QC^Xe4S*VU8nRa zVfdew;uuAC%p8vFNC%xG9*~aqMQyX&x*${C>`Y)e{ou*qi49%E%Sg{6U5a!^@=+pr zkN90B%k~^*=s*1`j~!(tu^8ZZ4)n)TPl`Sa`lE>Sq_xN$zxj4#FM-yVzgO!=}b{ zo3m_8w;{N!+rajI5zm*8e%hjImu%6n3%>)q@Nw9E`(YbC4%_f?*nj(B{~dsh_&99D z$6*H^fE{>%*3@AyJ`Q{FaoB_hU=tpI-S{}{!UM1i55O)w0K4#c*oDu-E_@z#;q$Ny zpNC!eJnX{f+p#V$@b8eN8%Mm~!Tfn+G08I`?Iv7=Z~*^BvNdWAD<9qKsF-z z=Ttjr#VX8S>N`<~yP4A%sz;V#c^8cr%?rJun3qp=DN@9s4wLz~QTe>=)h?7B-9<9` z%NsCG$}rR+8a&2@vZ7CsTtwx)iSl~*H%<4)m;96D*?UpmGiY}X+WiK2Rt|WyfVS`K zBDq#;nAE9)Oh-O-BcU?AFCjC(peA6JU>H(A!^BW<#!` zHNla-LwKgXAX@a^TKY!!IR||Yll1w|R;e7Ht)9Z=ZmpaAdR6GBDLrKOya(TT#+>8p z>=)=N6D4l;O|e1$?G z11^XoT?6~%hK3FutSJfBU3_5Vn8O%6^P(nr`;aE##hMvGirv;=#d$lFDpFz3bS^9ucI&x6pJrALz`0l0Ari%h?_kq}y%1 zj_iZ!OZyDDDG}_k<0_`^r1^!j1a>f{M}3YQ*BIVDuFie6HYv2l)2ckMH^sM{k=(06DB3LdK}T5wn`KE?WZ!1sdikjm z(A&kT=kIFDCp$+Rm!D`3lU$(&P7_@eZ`#kU^&C`8f&TEQhy0LeZfiBWpx@+F_l7Vx z$xWoY==ClS$?Fu4Y)zdQ@5sJaysb);MvHF?lgz7C9{Avwv10zM%9-2I$B>yPr{EkN z7wOt3*V4K$)@s8efX5Lv%=JjEUa8m<#%-w|FO4vMnUWB6<`QE~@g$dZD`)Qh6m9wV z^XRPt3*D-9HPjxB*oU>^rnw}Cyn^3N{9K{kpb?MERr0-ps!pmeoh3kef{N{i%&h7R z!aIWFJkK7jrm40O@{QhA?5G*CKo^aabkVx_e85T15OvVG)lC?0QJ&lk`4eZYrQp0e z$Y?Y_R$Y5q*SzKt=%XQ$J{rpB#iyVHTC)8oy$Sj2m;-x2KyPLzHwB-O^wQnXOG72S zbQ>(V%87^I1KZVVl^i%QNop~3Nn9;L!gT)gI-JiK1^$KAv+9spmQNZ4; z!r443Ht$p~jx+Z?dc= zCV*Z};dGnEUJ07Z66&FkozsvWk)qw~v2WZ3ydt{&2+Fy$>##BwGRI0!N)~83_#@GD z=oh%3=xWDWzC9xZ-zeP)IrN}iV0BoFcn)oZewXxx<6uyOL!Gn`bn`hol}~BZIXfNd zm{6Q!SBG~h(D-v2(wm38h2YCkT}eSJJ$Be^hrFTC8M82+*L5C-Ops#S44kx_dIkMW z^xJMb4!U@+6E;}r3!=QNUAbez46Vp2U@(t&PQ<64&j^0Xo^&#MU$*CdlK#v=C?Pl}|>)VNO z+?))Wp|juiu;U-#x0P%OY^NUBLDH8HJt7*Sz&fPfFr`axe55PiSkfihPJe*$EI)NA z^cL7oXTo-B@I+-rdGvZM(G=KD*PNOUn+Wwm5Ymr$KhkIo(;*KWb3`)L@J-*^r&T~d z7hqcrf-Tj4TfO6;;%$eLJrDg3HWS6)ptsf&oxwgZ5!a|Mdlz)LdzbXOE0vRgW3VHz zdfW$xhvpm`z7(&5%va>m80#VLPR0G{a4+omecnx{D%l~#dmC}i4G%3sysSCE%`DKW z81zZbsXC6A!5HIZ$=$3F!Sc@z}4~*{j^%h4}rCT_T^E zeVPl<8!td7su|h^x|IpKMeD#j<0JdnaAaSjr|z2lx)4@3*KrNmK!_IPz^2{n)*HhH z1-7C(0`_XsrAfCu#BImt<~QHD2KHhjaCEYhzGdBfXM>}8d51&4Ve_CqH)oL6lk|G5 zC9PY@?ZmEB%b+U*Hsjk4Vr}V|Ta~eCus$_r&^2%6plj~t!TR{@LDeD);v zc{Se^=cMs&USvdgOjGB5NUIfg!fyAR@zEv$sHxkA3Yt3#B~A+8u{>XQK_FpoK+UNy=W>?!r75ZOOa?X(<+7!~SPi8l8 zxp*im#_3khgp5ZvnMKLS=ONk$OKa*;kTKlKGgv>4b`E9Day~HfoI|5O=g>rn{zrH> zg!8CeDzq^Ib5CG>XiF&k49M5NB*m@N^+Q&?C@|Yrlriw0QbFf}U8HaM6i&Boeeb}o z8n5@RWSX1AmkOunR1dX2Tr;E;Wll{3{NW`2^x~cyU^~26lNJ0VWEDGTPIDL8rjc)d zALIr5j+<-j+b%opws*lljLB4A)CJ#@|2brksl#OJpUt$+kz2CYk9c#|Cugm|`!V@0 zF8`M`arr4u{h_>Wy1XIpKGea9Z>f_Xe4S&) z74o9dLvelWl4Or0Udn`Bn9Bv=<+#De$tFoUoNSNudiyk@e?=PRbsF$18*?w)DcdE9 zKB9cc88`RfyWX&cG=R1}#ch+?=AU9O(LIox94M<1d~;hWU*mn|IR~xNBn8!jUkGD5 z`a0n7Y6r@g(lb1=Uppg+WKpueV9YUowB}1VtJNQ_RpA|Ij+5b8o%=cPhMps8)VYZ@ zMx+J4;QV35?hd7*$*MfF#|8XsSH8YS!B!+2l?V1TDRsLwIO9tR{o+~hL>Y&h6+5*Y ze}WX-p=&P197s{ZKNPZfN|foPlo^T+JgYEg607aUqrnR!w%Y%2cWoqmA6W!TorJR% z>?>2oji&}U5!brG=~C+U;GDAUajh2}R+LXNYlreolZx}?HR9&5XM4#9`8ot@cZWQx5;-ag&#LT1{lD-h=@ z#cu+y3WhBCcheZmCBaVlz&a$@TRt$W1pB!UtX+cb^MM&9Sc3$!fAMB5l}+b&L||R` z{*7a0UoX{70sll7^e3&o0c~AUeG~9V!RCREnDzwYyl&DP1U9c)y{o0R1LHXqyuB|W z=ymA6MvZ`cmq=yNzK3T+_Uj^o#k~#CFSpCK7untd9kw4jY(LpspuY}4e}&COw8=n+ zh1~_ZBkVBHVF!fmO-|^s1JGk(dzlH_iw?FI(|PEy=b@Y8d-JbjpQ&t%5#?1q>xVx? z2K*t;I_$Zd9QKq)9C|(cAv9;<5AlfP4^a%;pw`Ktr_ua58uB4{{mq^4!v0RUC&0cC znI8?CF4?rl^ndrpLm1P?++&^+vF2> zD$3|U*-oi!EpU;_r97*B;_Z`uf8>*=+-~XzY7@0B#3zkK`rXZvl21ealKO!6AH_Wc zpNpH2pOxu$w~=K1bPB#WaxVtr}cXr7;Gx?3tw{mhTC|56->ko&|jP(SnJD2(RQ-|v;i z=BdIOiYv}dTgo4$_`JWQ{Ky}-8?;iKgA1#zn45p~={M>t7oOpJjJgTQg$Pghe0{T zB-n<@W?|nkxrXc(t3D^$`~}RzUJcm+?Vm$GTRF!$|8wkn0e+B9MRV`x7;D0do6#>A zw`7`!RDT&qSOoRgncX5T&D{OCROcvmfsb(l&VU(|VARKlCA_0Faz51Wq>tP!w-@<` zpud~Z?_2H>$GHUblIA6)8T{VZyp+o${p1(OTkc!RpXx|?D}3^8MV>UrZkF=ZOMOl0 zp7hCgiIgTG$OIbg(){f@(Wdka`10AmdsoWv6A~QzxmG@m^2y#tZPB9LavxGXARi@@ z9Zv4QcED&(9DuAJ}`50=q#?JKC3p zd~Za)>!osNUq(J`!;tG3Qz(OWUdw+O@pqhmIo1$h^Hf~6uUzD$eMfx%QtCwqc-UpE zA7F3OHV5sk1TVuLpVzUs>0YP(wjB=eGVHVbwIc#H*891?cnIv6$6So5wv*rZV%71y zBcXqGoYYNq8rdz6+b^H3JtMW5v3oJ^cE#so&m+!O#qav~8IVD6b}4=*Zy)LitsUyV zyY_*RWZaOkJMYFi82LhGR0}K;^7L;s8citl>KiqxImaL`)+HmqSQwF^XWRgr5QDBx zz7A2_$hVH<7}76>IyK;Zjm}246Klx*`2800rFDttH1B06JMAA7)vDjX+Fp*hH%cAz z3gqQ<<0|flSDI{}`=Uc&o2%{fx?l&AYU-Pj&Kit0sI&1{W z)3SrLhq%nKBw2l{x0ZF&ewfp!(-Nn^yxRnJdRso;Hz`HA0^>A*aRUFJ$()5yVUKSj8~?mNI1a(S-%fiMZhHcL z(Td9*z*Rf&)IRs9qZ79N9*(P9vG4aSj+1V}&*QUe?HM=0-|@@`R$4>A+Cekc3tIU; zJ;Lt;m-~RzYlq3+pYaf_(Kee3G$|1)?xej&WWPBQy0(V!nZf2C0bSF@ypMrSARgHp zA3U9+s9M3D}caOrDFGDRSf)``S`~-Vy%9$D(g;KHzj>WV0qOib)ioCQ`>6n zzquJ}Hyx?g@awUzOnTN!HA9D9tRWp#qkjqOG%s!Sx4$b{O8;V2^m=}-3C=X3@p6G~ z()YDKx>2kP`AJ%pukTgA_-d`Tm3Yk3YO=rMY+TH-hWIQl^DAM`+nCmDQYB}CmPNov zn?)7jiyHVcVcS$(%hhwC0Gxv>4nXJ{DR(Fy8`?EKTqz1?ZJc$*V10R2rXm}V+sq>T^!Qq zz}`T9r0GTmol&D#Ifpa@piR9RvJU`uk!-SVH^3yPFmJbb3A3M1gA?hwiJ+ z0&e-%kFl-W!S^pCZ|KG|A?GSCL+-p}zdV4w^rS<+u4z}E(JWSNUf%(`C;V77tr%CM z(gZnB(PRl1asDvcg|o0biKoyQMNDydtl=?yU%vu8Mqd9_56~H9VZ&s%FNgiKZT(`$ zhmeWup@%d<59!37I^ZF66WyLV$b0wajp4K`>)pI=3`TV!S!c2jtV4qRGj}XrlLR~C z18bLHCwyQo3HD0~hBz*+Q=m=O@H)q1iaPM0I?yJpeGJrL&7{t*zO}_M*{7bjOTWcF z`890qv`6SP=FI7B?a<>Iq0{zZ{DblBE8rn)8ZW_y`f4rt)9rz6>J7k#JS0C5{wVr^ zoBd=1A$vzKcrlGRolk;y7YPSjJmT8o49I-~bY#LqHTndOda3rypVVF>wT1L$Bg$wG z8aoRBG`}D88T;xK(1T|}57yz_Z4-3h?E|3I1EBo_p#9v30kj`_@J#SQ9r&Q>Jm^07 z;DPg?9qjMJTmt`` z_o2fs?bmJsA8H04It0Ga4n7nCnFsus%T2P(MDmg>BZ1$@JZ1aQjjGO$jTWpm#-uD( zWv@TkkcjUy9ss{-h>w8G*{3uO0au2OgyzA{mI%5L1=_E2YP7QuPtiXV^}M5<$5-{J zuvSC9Ku0mp7Xx3B5B54?{b$Y`$VG2Ku9$^!!CnaH@Z=*ZuFJkq3qL!){@R4K;dPffEl5$Cp@(gU3In}5)j63KIXffo8r7F-HqBRMS zKS4t->I+U{y;=qPZCbSsXFGy+iFPRXK`aApCj23L-VkubE#VM;_eVhAB>P$uXo?nl zFGp=yxa~-2XKgq8BkFRvme!<>g#Ol{MLSAB>rU=IhB3o= z`DjNg>P6p|6ByaJi%^H(A&m|G7`B@Co-C>9Ks^4fzFb?)+1a+O>K~WDZn3)y>-}Bo ztqUMKlN~Do&(k`ss9O^D)E;p4OuvtDZtpuCq1Cwc&XZ2Wq zRw-V;56lib0O!9xX{)7r5k3;$dA$p8CiQ_m>Pxm7W+k8f1<3+iP~8jKMe6`Y*fS&W zy*zE}zFLvCy}GTC)3urX_8s4XF5fV42>lN{>1#zlldmrK4+756USGmJfhASr-Nh1| zKY_TH?0d6-7rOpWLHib~>hC1HCH;hve1iVhLjE{AdrCFUy@TgOTRr*ys4(|XXZSja zK4N-C`-K{?&N#V;kwq2+qj%A+H^=? z2X7p;bNo%}!#=c!=3^7J1#2uM4-!o&ME%H?fq8r$c7jxrgCZ~o!9yVvEv;S#+Dp7j z9{csHWd3xP%R>Z@fPHt#=va~bvou-TNAgc*^-;(_6z7EWp4t)-B+`7M_bzsh)BBsH ze2Lyy`OtgN*Z-&crwLa`9zVMA9H&*N4?lNB<^dlCi9EnH$^)Q#fCr4pALI3p2+(#q z!;`VwAV)0gw9owsbc#1=4Z1H;k~0M+@-ClqYB2Q3muEXZKk$h^gExE-dCLoSJ$MLs z+vRU#e4|2y34d58vG8vOYl`<@au+t4Za6mNAUsG3%rK!{|28L zxA!}Lg8kizydAoJ(qA@Z>mYxnFX=9z{cbwY_yef~OTzxfB(~8ju zAk!8p%t(Lh5(NuMJ*a4g|21U#8y|EWE$Bba`Q>eoJ30z-@H>48=1OX3!3!Ktw#D9i zg)e#v-Z@TZJ@o#~^+j*Nb9-cOQB1go_ zm_EgD+lh6xZ6_8%-rep!0$idp^o9YnL)5pu-WlLaw=U_1{|os7lFmT$O^dxPG;hfd za7>3H|0S2F3I4t0D-1s-C&}c*{|+j$LECe{JK*npuQ1q)eKeKeoqSIY`~!z_qCAoM zY)=Q~a}@l+w`z2rO026#>T!d&MzNX0DdF%PR5f~OUoO?T?ZkEP3;DmPAFV~o^`m{v za{bsK)r;2;zOdvcKa`&1iOkC3^`riXg0D;4iJRdgp1!2*L<{!eK7oGxo>Omt@8hJ+ zo~>Ckhm%5MJdvuY@W+M^?TH&4eZUWDOWTR-9c}MUcMN|-zo+B(^^OZ6BAmYEoCP}D z&BQYifaC9wA1d&B065D1P=S+J=QuFxhYA^w`YYh0iHQ8t3pd zT*D{WIC}xfS|o$f**;{uB00>9y#XYHk~~K;SwwA}MgVQ%_AAJuG?!k7&8m8Zh+{;f zAops4PM{$!&9rP0J`K17f9o{TTV%ahQ`nN40D9~$*p?cC_n1eZt0qkp&dG{|PK!0j zR4d+>K-W#q67!+=VVDy$pr1c3!LH?L#dM(kmyrhf9N0^FQ$8N4Zj{y}rMYfg8q;Np zPjM;D?RZD!z9pq2dmFWx(w|vAR*&nYywv0Jy0UzyPx)u0-@PNU91U9Mb0(53Pcs(D zZ40#D2IuIkBKey7ll-=1y86~=T>{WhvJ3GcrhGDZUh~1vupR~fp8?IuGh&7 zznq>|0R@Ry`W5&_ctz(r5pEH_(fLn=TQXiT_SYToecR549<60T zAKA`~kJk3#xB5aF>i((YOz7Y2VakWJj6LgO>=WFo?fR&<;RALI{r7OZo9v`njkSG{ zE!7*br)j96_Cv_0>Wyib(+#!V_)UC7!Ty4NN`oz8w)0cKWFKIXTlHDqT6N58ptH|8 zy4f7ilo9CQ4e?6w_LJG(+E^vU_hQeV7jls?RX;R>GtkaKu7z!q>(1{Y?^vEUl{c2R z3wdMzb9xxYfMlhd?PS|+;cMDck!EvpE9Brq%I$sK@KHEIFygDxPtGkFh$)-&T{r99g$4ua3Nh+0_@8!M?j0egbE=F^T@8uOT1D zbg6H6$3gyZ+WZ%4)k^GliCpe%i+$L6L1}@^yxEfyGBjD`neG-*9x{@CKN5P=`myvaNZ*3=jc8X(s@_O@!&;CYz8O;bkmDv(}l*wq;owagPEgaBu9JhAYtB>&3yp(m66OnJscy)}$|2k_m1UGn!0wONL! zE`fb-8|ec_LN{QXT#$EqG5?LAhvGh88e?i3;loRzCGhom19Z1Oz6n0u3GB4a?isz=sDTg&w(bK!@G0#Uign!D#(Y`1)sc~(DV1z{tWZ8NKx;EFXA?@cM8tz zrT9}dLz;6A@~4#dy!D!ydn^1}DZSVhu|2f+E%KJ&YTElp``*Zg&=yJOBv3w6;NL_0 z|0ZEwNvuQL{1B8io3~S)WW@fs0a>w#^BMTqdU~b(aKk#tetaL?PAB=#(z=iW z`jfWjQS@^o`k8EQo2$h&okoPGx3xlca!GR>_yQZ&#Pgi|x<#MvSr@-<8rpNh#~%Am z>{BDLM)DK*E=N0!Eb?*a(?fTUo@ctB`;9S{wjJ<3@(XK0UlX1h;rq(%F=@SvX}n3- zq`iB`La*EpK=u^UrOCfb+-Dk%u?K(E=AggG{++{pq+{0p%|ZKJzHU3f(_r&@t|x+J zp6cebry;&`L_9-9#zVPYS=h@!xKC#(jLG`q_*4BxLbKOn&phyLd_4)@0@Zbx`!j|( zXb(^x$|l+lzLC~!2JV|-djK6Nfvz3}IqDEQK=Rve*uIk65&G-wiAzOVLTN}YBf9j_ zViD%+tCZ~%uT1)##hjW@&?BexOmj=_my@P!KF2;B_L0kQCj6K@mI2*eIx7}-FrptM zm)##8<&0Hq#~z6WyTGPYYqbrv*fXJ<#CBni#GGo{zvRX<^(WHIWkqxrcreaxBR`3T zxhnh~hW#-Jza#LQ0UnIsI4h|q7{5dCTflD>ersW;i^6YID;awlR_paIVE@GP@I(G2 zkLE7PH{$*Y@k|SvgF+FVV=(}EfM^ZQ<<2?lXvWzSWM?6Lt{e2|?Ch9o{l+ji;b!w) zp^(2=x;9}a_D_g=nW-!qGve2*XmV#;W-w@lYYovWYNtJ8GUmA0RyxO-vFEvs2XrI( z9`A_Gp4#t#ddltJ3c%hU;eBkR^wcILV6>N+@}%b=JV*LGujFoK^lTi!tGE#Z+c#=FV%h8avJC$rl-|b(+CLyP%{$Q*weg^u3enUTo z+!WH|&?@*IYr+kIJ!&UDM(;_cRj~8Wb9zBDy|t>M2Fx*<2L_BK&P*>NyS8}V0@a_+ zGobp$>Wv=S7eQxE5KTC!2z8uX+XbJ1Ak4uG=SiIf_7tM~DvZH7yEXingXW<+7rx5M z60F(K-il)m^$pO&q2r2YIEnk_)VUeXw)wL-UE$|0g7;NIwrg8$cG8%(%{N2dGr_lW zvnLjMe%pGp(+b=mIaCS0Com)Q`v%xDN;NF24suEf&XU4jYWV)1{0@9jvFC!?MtDbU zBHvVM%gOA1wBa4dcoytQ+U!h;IGv|Y_zm8jhCO6Co&84igXd$6G*&7+>{^3& zecHa)YDr$#OZK*_@k-=Rm%;^NgUcx1>BiCa5)_wewt|P$-VpY5`axxh)9qc^N45#Q z@lmIG!$xPfH%!CWqx}!LnH~F&VBg)`FQ8sXXzav1eG_*F?pJUh#eD>KJMN$1K7{*O z+^x7K(m%#syg-ra8f&|6MHvDp@Jzy@V zs;Ep!F|0Nenu| zR9Py@1ymAEv{C$W#ILfHnRz6sy1sEKSBh65$D>RqjF-Vnwv-o(Q3}i`gRa~y<>dsW znmk~xv{5Ap&WlbFW|bBRHZzJXw8c%4<5EGsaVLsT@H|VIoPB`0O%X6^az8DZRS54L zG5!Q?xiUVLf$yfjCWaIJmGKFup4`4H@AAxOtr+v`r;~Dajiqz(GJpReEE?X=)4u=r zms-C(*1lAFFX1oKj>Q*$`OXC&l$YW$ZK{zt;@`#VZa0~HC0(2uvAqG1zRu@|{D4oqU+l4o*21KO zxWsvK|2{SMz{5|~O#Kb^!}Yt+8cRj3)kD zV=bkn)+q5e&>~>t7Fy=VCKYMoM%#h@u@spKFfA}IVl6Q-QKfSeDYc9a=zF@vNaK5m z;Qx#57mJkIFVeNiS}K!ie<+0&V#s=>e(B~ki?MFGpE{!A4xDW==G3 z5IxU{5sGY86;^@xDp=}+mZ}m=^+K~9s9~Cy6kD}$J|gi6_P^LpUI%$5M9txdED_$K|xRnUmE&X#OIt?5TA9 zpRRc?O@1$jiW`Gchf%}t;%<-edK19lBIaUM7NP!juU8MDuRG4`#rgzuWqQ3$P}bcD zHP9op5VkuJuN#7QE8;~wiq!zb(>LPlI)Jw#bRl#jY(;4NzSkQ8LDG#7iyy4@2Z%?{ z2wez!p#(s2XWe@ckMesQ^+A3eKk|C(Dc=^aHwxvqKjZZtMJV*5UZ{r^Aq*GH{h8P6 zM%dv-JX(VrM12qnUwFM)^!yK$gK!4IEYycC*u(gx*qY0N?K;JcVd4vd--O#8jV}_S zPVz>9LGV?$J1=;>Jp|KD)`cybq@z3varf=QPI-c7g$vVkH5uV7eUc83 z^u7-F4D_8IAzL~AeI!87;?BZ*E4^PfS;wAMWP~Rmmo?!mW0LMK9E?Bj;1jpwp76cbJQnu&)F-Aa`_bfPRrZsiKc4hdNK5d(p#4f^|6fjj^x+48KGpN5lYe~w z5ARVXxTriex`4`SB!F*u>&MEYcrbplcEtOcf4qCg;_>z)o(4D&sC~DnpqV?|SWl{2PV@wjS|?#~~5_|fUVESpNnaKDT65x}MYn|u}{ zA2r7N=nuW#`84j-{{713;aci8UYC3nzFe%!vZ+cPo^mGXs3JO4Bo;~XkZuV0QAO>^ zM0!e^v0wSLA}d^r#waoRQU-kd5sN9d>Q`|LocdVi^^^|PAY3fO59;fvY~UfJQ`LFW z!f<7AJov%2Kb+PSu{ON*`rY3e8*P+9 zTsD=S&~f~wZYqr*n#&UQdcAeQ$oF)`gzO8>4sTMvrg&2I(6^D#3@M-0=&#oll*#^}r!UI~6R=-244AKduE8=Ahed&ZvWd%ykI^^dEcxb8>SHcxvp z;>X{5D!k>IePR2jrlW2}AydT4>AfSK;memU4t*IIRj5|Ho{NbVU!|UPUKw_g)X8~VZ=lFyEczQDy(Z0F9>49&0;F})!rU$<1fp2=?n;!V42fpcnZ+hUH9{8pQ{{QNM zc+oGxr53~XSTPiCm!9LqP_8tYdg$^GH;dp=IN2NMlH>hId>noLvGhWI|C-{^y9df}Wd{Vtz0+@C#};&kw3Tzq+OOSjy$sdf0O4;>IR~ zWYVGQdNCOND>Z}VE0jDxshe1b^n&aObdkB6uIXaHgmAHZJX#54l>Aqaj6X}!M$_4^ z5#!74IwVDyEQNCYM!aHs^TWjWSWM^bm(#%%&!0b=I$FM5)W0Mw--4ykuekmtmH1Z{ zvR%Xrxk$Z)*YflKG+dF9ks?H`ShGG_m>;K!TOcGQBrZr;m^4p_%Ei)RmZ?gF-=3Hl z&GL1t@(imi<(m!Jso2FFe5dH7vUJw0gt$d<3uet?i_^&oCvIJ}t)#+Mg%`Fh zWo4GCLh}P-FUj%7QfjWm+v2%%uY~JORV8>Azr|J=zY)vQ<09R$4zEz1Eq22!{F{gM z^tgoE7ht(ADKRc7&Rn`E&T1`KIKR|9mhpNUFHBnI_JOa@UWVKjE;1)2Xc7`{FDzQH z@%H(J^Ac~@EWob?i!`SB1sf9!H!fH>mgsJ?iE556TQmkNG*y`a%q!W#Yn8L5l!r-+ zc#xQsvS41y{A3X}E@7s%qJSEU{!dI?G=F|la@@isar@+Mub(B zVpt;ovXo=_)ym@F<6w@{rDxw>Wh$1Qip#ge@s<4BErl$Oo=Qx%5*AljU5@<3u&Ppg zBl#1JdobV~`BP8=>6f*%ip5#VE%;kyw&QOR9`LRLy`@-Prev!E!h=|8KzQ&dKNz1+2$T81c=#kH^NaEDP!@=e27&v?^mlyx z$xNo>tX(QsmX}rn z9w?t;DIZx*EWtBfay}(NV*TZOKE%5~`3wP0^^xUF|9mWd`P`2T1LflYT!B>)|M6-7 zobvCM`pG-L0~{-POe^U>^hDQ13Et#K$G*$u<}lXk z2RBIYj_bzLpE?Q7{NT?^@B}~jSqZN9tIthb-oKKrrb%$4Up^Zpc!FO(tr9#-lIO+N zGWH7z9^n_iM}oKd<^LV7sDv@SUq9$1c#~iJA_?B^7ypM6-0BzqKP9-<5B^UHjwwHm z&&F{@3G~DdUMj(@e(+}`xZ5xPP6=-Gi$5a4BmCm)xZ)JXdi~l}EWwR_@b3ezfR^UZ zN1l-4cl*Wfl;DD2xqs(yoP6NNk4B{U?SAnEu3&-w`{ln}f_MAH$0iM2Va)9pAB)1c zuB2nXlHzyx#s3F~UnwVC&lN-Tn_szE5?t>Gw@YxBAAFw#xB8X)8sMnq71w(N2VZD< zSHvH^6ypO4-usLQ&zBVGvlHZV9Tf3E`7fIQo;Lx!cmlY60(cAH)4;ELBz~PG)&JiB zkAS=(>-loSkMQ{N(^&Xdz;7k~xMh4lC}2>a{&DS)`hnv;W5om?OFsH*FW|S1K8^i2 z0=NJ^0&X~Np1ub7G#1XRlAg)Q3u66tg8ctUaMVZMPeVRBbX}St{xygisGb_Ysl9Bg z*e>p?g?y|N#NPqaQ$xqd>Zf} z!Eav71zeCb^$F7^$VWc`ylMh?{RHsl3E*uLz~2Cz#!-;ubD91er}*e+{o7){t&-aC zG2qnyE(x#X@tO>*uSZE~bQd8-MI{JUQk^S4Uv zT@N^w>(5VZQhed07@z##>Dmdnz<-VZ^VkINHp*vwRQ~k3l)vluV*a9h&)7SFQ+))# zdGWyn`LHXu;KUVJt<11u)g9@&RR)7?%SJ=C!LVTwb}AWGWpBvU=&CBpmXX2Cuwh-* zDviNlso<8n@i`ePDlNs9a#LyG>=Kg$M9)o1pdCW6@K%}2^rL$|auesRqCKB^)mAeZ zipQ$3u4)lkd`r#t?83}-3k|so#SNO-_?_w3w9(CUfh&|W&#yxA-n;+Dl`5#LvQ=#< zDvB#$218CpF8Xv`p25Hh&6U`thlW=gs>%!nr4{Aax)}guFcel8ic2dtno13Y*fMJ~ zn6}ulO^$j2yUyY?2?-kH93YZ`Y^b9B(*WaUCC+r9=L#KC}! zeU+u9afbEf4`MHqAs0Jt%gkCW7ARoZPY4i`EZr5Qh_Na=J;Q*yE(#FIP+WxFeU+wi z1O2fTVYtXLUX1X;N=p?Lu>6kPyj!$50rC7IAT`dYtzN7?$p{k^^ z;z2{HxxBcl#9*dfn);OmQug`zXlkHJjJ3j6CDt1VQ$D`(fx4)`Y`0#e>Snv8>MBtT z8`i9|&BusX6BB5^x5Z|yu$eP+SFST<7i5mFy8*aP3q<-=dDt^uQTl*6K%W{mls{ND zK3xDrxN_tq+VM38@&dw2UyY>(L#btBfs`j5Cvg>o z09J#sUL}%0{RQRoA7qKU8sshgV3VVjADyFL#j^rLFZjwS;Eyu_Slks1ZLAR5c^r70 zxO9+FVJ@;1SRk<2n8C~!YR5<&7~ndCxy)KsZKyO;E)|tHuEU>&Y*;fY7W&GInM4mD z#QrNp(Xr-^4#9+E(qOQHshdrOhRx<`Ljitqv0{wYQ74Fa#SGbZ;8!6Ik=SCxkppAJ zeB}h-hnoZtcm5kP1&u+~Lh;m=?D1l_DSKU_Au}^^(G_R8WR|f2SPo&;R$(Z?IVo7M zH*C<5qEUrIM8@ShCfO%IvLC~Mt4k2e?t*hcQ5*ybyWL=gS4jnw5}ey$cp!mskr=uC ztAu|p3maHqNkSB>FwFPW42Uh zv1B^s$*^JG!ijaiHKQX+ndccSdY)}Sql5t-JflbyV0O$WjL4iwtDk7j!w|%F5)KSzy~DA@Asv8RZ>crMQfnCdA=58>K&F+Le-^$RSLyLX8=MzzFl` z}!zlsxVPhB}O)b|Fx^a6;6cz*sPWwkFX~8Y%9dCfP%%(Se7VldWoyr~*he zvRK21##j90Z3)AIzcAB^GfPqe-ZpjS`@&v_}>DNClZ-9CA0RZ9~_ z<1WbzItsfDzi8=NPQOa>i$lmSK@3L!O6Kj+=S2MSOy)dadM7fRJCkT~b6T5XL{UALH3Kz3k_R zkYAC0@u{u8S1TSUz1;t@KO{na^=z?Q>HXvTKMx=+)k!X2_9u+`n(04BTIwP>z3ktUAf=b-fZUC8`SLiD zKcsK@zy#@)*i#93?|aGVWY`FPj7u;3ohroi`Eo=#6v3nOr~z=QlU#q z$>sXXVG!Q?rkDL#<@B9$LMfEf$zT=IQxX2{l+)iXN0dUjI&wHoO79nq?Ud@@BuDg1 zFUKb`A-7$IQFuKy4A=Clq^H;N+~o8Oy+;aP6`Uf|ofaR;?g5`}m KQoerGVgCoO +#include +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" + +#include "TestStructures.hpp" +#include "Misc/Coeficients.hpp" + +#include "LIZ_pos.h" + +#include "buildKKRMatrix_gpu.hpp" +extern std::vector deviceConstants; +//extern void setupForBuildKKRMatrix_gpu(LSMSSystemParameters &lsms, AtomData &atom,DeviceConstants &d_const); +//extern void buildKKRMatrix_gpu(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, Complex energy, Complex prel, int iie, Matrix &m, DeviceConstants &d_const); +//#include +//void clearM00(Complex *m, int blk_sz, int lda, cudaStream_t s); +#include "Accelerator/DeviceStorage.hpp" +extern DeviceStorage *deviceStorage; + +SphericalHarmonicsCoeficients sphericalHarmonicsCoeficients; +GauntCoeficients gauntCoeficients; +IFactors iFactors; + +void buildKKRMatrix_orig(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, + Complex energy, Complex prel, Matrix &m); +void buildKKRMatrix_nrel_ns2(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, + Complex energy, Complex prel, Matrix &m); + +const double cphot=274.072; +const double c2inv=1.0/(cphot*cphot); + +void set_tmat(Complex energy,Matrix &tmat) +{ + energy=std::complex(-0.2,0.1); + + for(int i=0; i<32; i++) + for(int j=0; j<32; j++) + tmat(i,j)=0.0; + +// spin up +// l=0 + tmat(0,0)=std::complex( 2.72989453e-01, 4.75691304e-02); +// l=1 + tmat(1,1)=std::complex(-1.53433276e-02, 9.50739941e-03); + tmat(3,3)=tmat(2,2)=tmat(1,1); +// l=2 + tmat(4,4)=std::complex(-1.23189965e-02, 1.45766627e-02); + tmat(8,8)=tmat(7,7)=tmat(6,6)=tmat(5,5)=tmat(4,4); +// l=3 + tmat(9,9)=std::complex( 1.53919816e-05,-1.07135429e-04); + tmat(15,15)=tmat(14,14)=tmat(13,13)=tmat(12,12)=tmat(11,11)=tmat(10,10)=tmat(9,9); +// spin down +// l=0 + tmat(16,16)=std::complex( 4.51280708e-01, 2.16447659e-02); +// l=1 + tmat(17,17)=std::complex(-3.04540765e-02, 1.86224585e-02); + tmat(19,19)=tmat(18,18)=tmat(17,17); +// l=2 + tmat(20,20)=std::complex(-1.00226432e-02, 1.24349804e-02); + tmat(24,24)=tmat(23,23)=tmat(22,22)=tmat(21,21)=tmat(20,20); +// l=3 + tmat(25,25)=std::complex( 1.49731043e-05,-1.06213516e-04); + tmat(31,31)=tmat(30,30)=tmat(29,29)=tmat(28,28)=tmat(27,27)=tmat(26,26)=tmat(25,25); +} + +void set_atom(AtomData &atom) +{ + atom.kkrsz=(atom.lmax+1)*(atom.lmax+1); + set_LIZ(atom); + atom.nrmat=0; + atom.LIZStoreIdx.resize(atom.numLIZ); + atom.LIZlmax.resize(atom.numLIZ); + for(int i=0; i tmat(32,32); + LSMSSystemParameters lsms; + LocalTypeInfo local; + AtomData atom; + Matrix m; + + atom.lmax=lsms.maxlmax=3; + lsms.global.iprint=0; + lsms.global.setIstop("main"); + lsms.nrel_rel=0; + lsms.n_spin_cant=2; + + lsms.angularMomentumIndices.init(2*lsms.maxlmax); + sphericalHarmonicsCoeficients.init(2*lsms.maxlmax); + gauntCoeficients.init(lsms,lsms.angularMomentumIndices,sphericalHarmonicsCoeficients); + iFactors.init(lsms,lsms.maxlmax); + + local.lDimTmatStore=32; + local.tmatStore.resize(local.lDimTmatStore*local.lDimTmatStore,1); + set_tmat(energy,tmat); + for(int i=0; i<32*32; i++) + local.tmatStore(i,0)=tmat[i]; + Complex prel=std::sqrt(energy*(1.0+energy*c2inv)); + + set_atom(atom); + + m.resize(atom.nrmat*lsms.n_spin_cant,atom.nrmat*lsms.n_spin_cant); + + if(argc<2) + { + printf("Usage: buildKKRMatrixTest c|n|o [loop_count]\n"); + printf(" c - compare old and new construction results\n"); + printf(" n - time new matrix construction\n"); + printf(" o - time old matrix construction\n"); + exit(0); + } + + if(argc>1 && ((*argv[1]=='c')||(*argv[1]='n'))) + { + #pragma omp parallel for default(none) shared(lsms,local,deviceConstants) + for(int i=0; iallocate(maxkkrsz,lsms.n_spin_cant,maxNumLIZ,lsms.global.GPUThreads); + copyTmatStoreToDevice(local); + } + double t0, t1; + if(argc>1 && *argv[1]=='c') + { + Matrix m1; + printf("Comparing matrices\n"); + m1.resize(atom.nrmat*lsms.n_spin_cant,atom.nrmat*lsms.n_spin_cant); + printf("Running new version "); + t0 = omp_get_wtime(); + buildKKRMatrix_gpu(lsms, local, atom, energy, prel,m); + t1 = omp_get_wtime(); + printf(" time: %lf seconds.\nRunning old version ", t1-t0); + t0 = omp_get_wtime(); + buildKKRMatrix_orig(lsms, local, atom, energy, prel,m1); + t1 = omp_get_wtime(); + printf(" time: %lf seconds.\n", t1-t0); + for(int i=0; i1.0e-10) printf("m(i,j)!=m1(i,j): i=%d, j=%d, m(i,j)=(%lg,%lg), m1(i,j)=(%lg,%lg) d=%lg rd=%lg\n", + i,j,std::real(m(i,j)),std::imag(m(i,j)),std::real(m1(i,j)),std::imag(m1(i,j)), + d,rd); + } + } else if(argc>1 && *argv[1]=='n') { + int loop_count=10; + if(argc>2) loop_count=atoi(argv[2]); + printf("Timing new matrix construction\n loop_count=%d ",loop_count); + t0 = omp_get_wtime(); + for(int i=0; i2) loop_count=atoi(argv[2]); + printf("Timing old matrix construction\n loop_count=%d ",loop_count); + t0 = omp_get_wtime(); + for(int i=0; i +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" + +#include "DeviceMatrix.hpp" +#include "DeviceArray3d.hpp" +#include "DeviceVector.hpp" + +// #include "TestStructures.hpp" +#include "Misc/Indices.hpp" +#include "Main/SystemParameters.hpp" +#include "SingleSite/AtomData.hpp" +#include "Misc/Coeficients.hpp" + +#include + +#ifdef CRAYPAT +#include +#endif + +#include +#include +#include +#include +#ifdef _OPENMP +#include +#else +inline int omp_get_max_threads() {return 1;} +inline int omp_get_num_threads() {return 1;} +inline int omp_get_thread_num() {return 0;} +inline double omp_get_wtime() {return 0.0;} +#endif + +// #include "cuda_error.h" +#include "cudaCheckError.hpp" +#include "DeviceStorage.hpp" +//#define TRANSFER +//#define CHECK + +#include "buildKKRMatrix_gpu.hpp" + +using namespace std; + +extern "C" +{ + void write_kkrmat_(Complex *a,int *n,int *lda,Complex *e); + + void makegij_(int *lmaxi,int *kkri,int *lmaxj,int *kkrj, + int *lmax,int *kkrsz,int *ndlj,int *ndlm, + Complex *prel,double *rij,double *sinmp,double *cosmp, + double *clm,double *plm,double *cgnt,int *lmax_cg,int *lofk,int *mofk, + Complex *ilp1,Complex *illp, + Complex *hfn,Complex *dlm,Complex *gij, + double *pi4,int *iprint,char *istop,int len_sitop); + + void setgij_(Complex *gij,Complex *bgij,int *kkr1,int *kkr1_ns,int *kkr2,int *kkr2_ns, + int *n_spin_cant,int *nrel_rel,Complex *psq,Complex *energy); + +}; + +void setDiagonal_cuda(Complex *m, int rows, int lda, cudaStream_t s ); +void makeTmat_cuda_batched(DeviceVector &LIZStoreIdx, DeviceVector &LIZlmax, int iie, int blkSizeTmatStore, DeviceMatrix &tmat_store, int n_spin_cant, int numLIZ, int kkr1, int kkrsz, Complex *tmat_n, cudaStream_t s); +void makeBGijs_cuda_batched(int numLIZ, int ndlj, int ndlm, int lmax, int gntlmax, int kkrsz, int nspin, Complex prel, Complex energy, + DeviceVector &LIZlmax, DeviceMatrix &LIZPos, DeviceVector &clm, DeviceArray3d &cgnt, + DeviceVector &lofk, DeviceVector &mofk, DeviceVector &ilp1, DeviceMatrix &illp, + Complex *bgij, cudaStream_t s); +void zgemm_cuda_batched(int numLIZ, int kkrsz, int nspin, int nrmat_ns, cublasHandle_t &cublas_h, Complex* a, Complex *b, Complex *c, cudaStream_t s); + + +ostream& operator<<(ostream& out, const Complex &c) { + out << "( " << c.real() << " , " << c.imag() << " )"; + return out; +} + +/* +//Instantiate this once, use the = operator from their host counterparts after the host has valid data. Then leave them on the device, pass into kernels as necessary +class DeviceConstants { + public: + //DeviceConstants() : LIZStoreIdx(0), LIZlmax(0), clm(0), lofk(0), mofk(0), ilp1(0), LIZPos(0,0), illp(0,0), cgnt(0,0,0) { } + + //~DeviceConstants() { } + + DeviceVector LIZStoreIdx; + DeviceVector LIZlmax; + DeviceVector clm; + DeviceVector lofk; + DeviceVector mofk; + DeviceVector ilp1; + DeviceMatrix LIZPos; + DeviceMatrix illp; + DeviceArray3d cgnt; +}; +*/ + +void *allocateDConst(void) +{ + return static_cast(new DeviceConstants); +} + +void freeDConst(void * d_const) +{ + delete static_cast(d_const); +} + +#ifdef CHECK + //test function for comparing two arrays within a tolerance + template + void checkResults(T* host, T* dev, unsigned int num, string where, double tol) { + T* tmp=new T[num]; + cudaDeviceSynchronize(); + cudaCheckError(); + cudaMemcpy(tmp,dev,sizeof(T)*num,cudaMemcpyDeviceToHost); + + cudaCheckError(); + int count=0, max_count=10; + for(int i=0;itol) { + cout << where << ": Error at index " << i << " host(" << host[i] << ") device(" << tmp[i] << ")\n"; + count++; + } + if(count>max_count) + exit(1); + } + + if(count!=0) + exit(1); + + cout << where << " passed\n"; + delete [] tmp; + } + + + //host side function for comparison + void initializeM(Matrix &m, int nrmat_ns ) { + for(int i=0; i &m ) { + int ncst=0; + //Todo combine into a single zgemm call + for(int ir2=0; ir2(d_const)); +} + +void printDeviceComplex(char* where, Complex* val) { + Complex h; + cudaMemcpy(&h,val,sizeof(Complex),cudaMemcpyDeviceToHost); + printf("**********************%s: %lg, %lg\n",where,h.real(),h.imag()); +} +void buildKKRMatrix_gpu(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, Complex energy, Complex prel, int iie, Matrix &m, DeviceConstants &d_const) +{ + int lmax=lsms.maxlmax; + int kkrsz=(lmax+1)*(lmax+1); + int nrmat_ns=lsms.n_spin_cant*atom.nrmat; + +#ifdef CHECK + /******************************************** + * Host pointers + * *****************************************/ + Complex *gij = new Complex[kkrsz*kkrsz*atom.numLIZ]; //Replicating for parallelism + memset(gij,0,kkrsz*kkrsz*atom.numLIZ*sizeof(Complex)); + Complex *bgij = new Complex[4*kkrsz*kkrsz*atom.numLIZ]; //Replicating for parallelism + Complex *tmat_n = new Complex[atom.kkrsz*atom.kkrsz*4]; + cudaHostRegister(gij,sizeof(Complex)*kkrsz*kkrsz*atom.numLIZ,0); + cudaHostRegister(bgij,sizeof(Complex)*4*kkrsz*kkrsz*atom.numLIZ,0); + cudaHostRegister(tmat_n,sizeof(Complex)*atom.kkrsz*atom.kkrsz*4,0); + cudaDeviceSynchronize(); //syncing to make sure the timing below is accurate +#endif + + cublasHandle_t cublas_h=get_cublas_handle_(); + cudaStream_t stream=get_stream_(0); + cudaEvent_t done_event=get_cuda_event_(); + + /******************************************** + * Device arrays + * *****************************************/ + Complex *dev_m, *dev_bgij, *dev_tmat_n; + dev_m=(Complex*)get_dev_m_(); + dev_bgij=(Complex*)get_dev_bgij_(); + dev_tmat_n=get_dev_tmat_n_(); + + +/*********************************************************************************************************/ + DeviceMatrix &d_tmat_store=*get_dev_tmat_store(); + +#ifdef CHECK + checkResults(&local.tmatStore[0],d_tmat_store.raw(), d_tmat_store.size(), "TMAT STORE", 0); + checkResults(&atom.LIZStoreIdx[0], d_const.LIZStoreIdx.raw(), d_const.LIZStoreIdx.size(), "LIZStoreIDX", 0); + checkResults(&atom.LIZlmax[0], d_const.LIZlmax.raw(), d_const.LIZlmax.size(), "LIZlmax", 0); +#endif + + + + cudaCheckError(); + unsigned long long flops=0; + int kkrsz_ns=kkrsz*lsms.n_spin_cant; + + //batch makeTmat + makeTmat_cuda_batched(d_const.LIZStoreIdx, d_const.LIZlmax, iie, local.blkSizeTmatStore, d_tmat_store, lsms.n_spin_cant, atom.numLIZ, kkrsz, kkrsz, dev_tmat_n,stream); + //batch makeBGijs_cuda + makeBGijs_cuda_batched(atom.numLIZ, lsms.angularMomentumIndices.ndlj,lsms.angularMomentumIndices.ndlm, + lmax, gauntCoeficients.lmax, kkrsz, lsms.n_spin_cant, prel, energy, + d_const.LIZlmax, d_const.LIZPos, d_const.clm, d_const.cgnt, d_const.lofk, d_const.mofk, d_const.ilp1, d_const.illp, dev_bgij,stream); + //batch zgemm_cuda + zgemm_cuda_batched(atom.numLIZ, kkrsz, lsms.n_spin_cant, nrmat_ns, cublas_h, dev_tmat_n, dev_bgij, dev_m,stream); + + //diagonal blocks contain all zeros from the zgemm. Now set the diagonals to (1,0) + setDiagonal_cuda(dev_m,nrmat_ns,nrmat_ns,stream); + cudaEventRecord(done_event,stream); + + flops += kkrsz_ns* kkrsz_ns *atom.numLIZ * kkrsz_ns * atom.numLIZ; //TODO double check this formula +#ifdef PRINT_FLOPS + printf("%d: BUILDKKR FLOPS: %llu\n",omp_get_thread_num(),flops * 4 * 2); +#endif + +#ifdef CHECK + initializeM(m,nrmat_ns); + + int nrst=0; + for(int ir1=0; ir1 &m, void *d_const) +{ + buildKKRMatrix_gpu(lsms, local, atom, energy, prel, iie, m, + *static_cast(d_const)); +} + diff --git a/src/Test/buildKKRMatrixTest_cuda/buildKKRMatrix_gpu.hpp b/src/Test/buildKKRMatrixTest_cuda/buildKKRMatrix_gpu.hpp new file mode 100755 index 000000000..00445d9f3 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_cuda/buildKKRMatrix_gpu.hpp @@ -0,0 +1,48 @@ +// -*- mode: c++; -*- + +#ifndef BUILDKKRMATRIX_GPU_H +#define BUILDKKRMATRIX_GPU_H + +#include +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" + +#include "DeviceMatrix.hpp" +#include "DeviceArray3d.hpp" +#include "DeviceVector.hpp" + +// #include "TestStructures.hpp" +#include "Misc/Indices.hpp" +#include "Main/SystemParameters.hpp" +#include "SingleSite/AtomData.hpp" +#include "Misc/Coeficients.hpp" + +//Instantiate this once, use the = operator from their host counterparts after the host has valid data. Then leave them on the device, pass into kernels as necessary +class DeviceConstants { + public: +// DeviceConstants() { } +// ~DeviceConstants() { } + + DeviceVector LIZStoreIdx; + DeviceVector LIZlmax; + DeviceVector clm; + DeviceVector lofk; + DeviceVector mofk; + DeviceVector ilp1; + DeviceMatrix LIZPos; + DeviceMatrix illp; + DeviceArray3d cgnt; +}; + + +void *allocateDConst(void); +void freeDConst(void * d_store); + +void setupForBuildKKRMatrix_gpu(LSMSSystemParameters &lsms, AtomData &atom,DeviceConstants &d_const); +void setupForBuildKKRMatrix_gpu_opaque(LSMSSystemParameters &lsms, AtomData &atom, void *d_const); + +void buildKKRMatrix_gpu(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, Complex energy, Complex prel, int iie, Matrix &m, DeviceConstants &d_const); +void buildKKRMatrix_gpu_opaque(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, Complex energy, Complex prel, int iie, Matrix &m, void *d_const); + +#endif diff --git a/src/Test/buildKKRMatrixTest_cuda/buildKKRMatrix_kernels.cu b/src/Test/buildKKRMatrixTest_cuda/buildKKRMatrix_kernels.cu new file mode 100755 index 000000000..a7c6c0e30 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_cuda/buildKKRMatrix_kernels.cu @@ -0,0 +1,299 @@ +// -*- mode: c++; -*- + +#include +#include +#include "cudaDoubleComplex.hpp" + +#include +#include +#ifdef _OPENMP +#include +#else +inline int omp_get_max_threads() {return 1;} +inline int omp_get_num_threads() {return 1;} +inline int omp_get_thread_num() {return 0;} +#endif +#include +#include +#include +using namespace std; + +#define MAX_BLOCKS 512 //This gives 32 blocks an SM which should be plenty to keep batched the SM's busy +#define NUM_BLOCKS(N,NUM_THREADS) min( (N+NUM_THREADS-1)/NUM_THREADS, MAX_BLOCKS ) + +#include "cudaCheckError.hpp" + +template +__global__ void cudaMemset_kernel(T* mem, T val, int N) { + for(int idx=blockIdx.x*blockDim.x+threadIdx.x; idx +__inline__ void cudaMemset_custom(T* mem, const T val, int N, cudaStream_t s) { + int num_threads=256; + int num_blocks=NUM_BLOCKS(N,num_threads); + cudaMemset_kernel<<>>(mem,val,N); +} + +//initialize the diagonal of a matrix +__global__ +void setDiagonal_kernel(cudaDoubleComplex *m, cudaDoubleComplex v, int rows, int lda) { + for(int idx=blockIdx.x*blockDim.x+threadIdx.x;idx>>((cudaDoubleComplex*)m,v,rows,lda); + cudaCheckError(); +} + +__global__ void clearM00_kernel(cudaDoubleComplex *m, cudaDoubleComplex v, int blk_sz, int lda) +{ + int off=blockIdx.x*lda; + for(int i=0; i>>((cudaDoubleComplex *)m,v,blk_sz,lda); + cudaCheckError(); +} + +//copy the matrix from tmat_store into tmat_n +__global__ +void makeTmat_batched_kernel(int* atom_liz_store_idx, int* LIZlmax, cudaDoubleComplex* tmat_store, int lDimTmatStore, int n_spin_cant, int kkrsz, cudaDoubleComplex *tmat_n) { + //x,y,z,w + int ir1=blockIdx.y; + int kkr1=(LIZlmax[ir1]+1)*(LIZlmax[ir1]+1); + int xdim=kkr1; + int ydim=xdim*n_spin_cant; + int zdim=ydim*kkr1; + int N=zdim*n_spin_cant; + + tmat_n+=4*kkrsz*kkrsz*ir1; + + for(int idx=blockIdx.x*blockDim.x+threadIdx.x;idx &LIZStoreIdx, DeviceVector &LIZlmax, int iie, int blkSizeTmatStore, DeviceMatrix &tmat_store, int n_spin_cant, int numLIZ, int kkr1, int kkrsz, Complex *tmat_n, cudaStream_t s) { + dim3 threads,blocks; + threads.x=kkrsz; + threads.y=n_spin_cant; + threads.z=kkrsz; + blocks.x=n_spin_cant; + blocks.y=numLIZ; + int blk_offset=iie*blkSizeTmatStore; + + makeTmat_batched_kernel<<>>(LIZStoreIdx.raw(), LIZlmax.raw(), (cudaDoubleComplex*)tmat_store.raw()+blk_offset, tmat_store.l_dim(), n_spin_cant, kkr1, kkrsz, (cudaDoubleComplex*)tmat_n); + cudaCheckError(); +} + +//helper class specifying the shared memory size we need to for makeGBijs +//Note: the order of these appear to affect the compiler. This order appears to work but other orders may crash! +class SM_sizes { + public: + int hfn_off; + int dlm_off; + int sinmp_off; + int cosmp_off; + int plm_off; + int total; + SM_sizes (int lmax, int ndlm, int ndlj) { + int hfn_size=(2*lmax+1)*sizeof(cudaDoubleComplex)*2; + int dlm_size=ndlj*sizeof(cudaDoubleComplex); + int sinmp_size=(2*lmax+1)*sizeof(double); + int cosmp_size=(2*lmax+1)*sizeof(double); + int plm_size=ndlm*sizeof(double); + + hfn_off=0; + dlm_off=hfn_off+hfn_size; + sinmp_off=dlm_off+dlm_size; + cosmp_off=sinmp_off+sinmp_size; + plm_off=cosmp_off+cosmp_size; + total=plm_off+plm_size; + } +}; + +#include "makebgij_device.hpp" + +//constructs a batch of B matrices. +__global__ +void +__launch_bounds__(128, 8) +makeBGijs_kernel_batched(SM_sizes sm, int kkrsz, int maxlmax, int ndlj, int ndlm, int nspin, cudaDoubleComplex prel, cudaDoubleComplex energy, + DeviceMatrix LIZPos, DeviceVector LIZlmax, DeviceVector clm, DeviceArray3d cgnt, + int gntlmax, DeviceVector lofk, DeviceVector mofk, cudaDoubleComplex* ilp1, DeviceMatrix illp, cudaDoubleComplex *bgij) { + + extern char __shared__ sm_mem[]; + double* sinmp=(double*)(sm_mem+sm.sinmp_off); + double* cosmp=(double*)(sm_mem+sm.cosmp_off); + double* plm=(double*)(sm_mem+sm.plm_off); + cudaDoubleComplex* hfn=(cudaDoubleComplex*)(sm_mem+sm.hfn_off); + cudaDoubleComplex* dlm=(cudaDoubleComplex*)(sm_mem+sm.dlm_off); + + int ir1=blockIdx.y; + int ir2=blockIdx.x; + + if(ir1!=ir2) { + //advance bgij to this block + bgij+=gridDim.x*4*kkrsz*kkrsz*ir1 + 4*kkrsz*kkrsz*ir2; + + double rij[3]; + + rij[0]=LIZPos(0,ir1)-LIZPos(0,ir2); + rij[1]=LIZPos(1,ir1)-LIZPos(1,ir2); + rij[2]=LIZPos(2,ir1)-LIZPos(2,ir2); + + int kkr1=(LIZlmax[ir1]+1)*(LIZlmax[ir1]+1); + int kkr2=(LIZlmax[ir2]+1)*(LIZlmax[ir2]+1); + Real pi4=4.0*2.0*std::asin(1.0); + + makebgij_device(LIZlmax[ir1],kkr1,LIZlmax[ir2],kkr2,maxlmax,kkrsz,ndlj,ndlm, nspin, + prel,rij,sinmp,cosmp,clm.raw(),plm,cgnt,gntlmax,lofk.raw(),mofk.raw(), ilp1,illp,hfn,dlm,bgij, pi4); + } +} + +void makeBGijs_cuda_batched(int numLIZ, int ndlj, int ndlm, int lmax, int gntlmax, int kkrsz, int nspin, Complex prel, Complex energy, + DeviceVector &LIZlmax, DeviceMatrix &LIZPos, DeviceVector &clm, DeviceArray3d &cgnt, + DeviceVector &lofk, DeviceVector &mofk, DeviceVector &ilp1, DeviceMatrix &illp, + Complex *bgij, cudaStream_t s) { + + cudaDoubleComplex pr=cudaDoubleComplex(prel.real(),prel.imag()); + cudaDoubleComplex e=cudaDoubleComplex(energy.real(),energy.imag()); + int num_threads=128; + dim3 num_blocks; + //1 block per atom + num_blocks.x=numLIZ; + num_blocks.y=numLIZ; + + SM_sizes sm(lmax,ndlm,ndlj); + DeviceMatrix *illp_hack=(DeviceMatrix*)&illp; + + const cuDoubleComplex czero=make_cuDoubleComplex(0.0,0.0); + cudaMemset_custom((cuDoubleComplex*)bgij, czero , 4*kkrsz*kkrsz*numLIZ*numLIZ, s); + cudaCheckError(); + + //cudaFuncSetCacheConfig(makeBGijs_kernel,cudaFuncCachePreferL1); + makeBGijs_kernel_batched<<>>(sm,kkrsz,lmax,ndlj,ndlm,nspin,pr,e,LIZPos,LIZlmax,clm,cgnt,gntlmax,lofk,mofk,(cudaDoubleComplex*)ilp1.raw(),*illp_hack, (cudaDoubleComplex*)bgij); + cudaCheckError(); +} + +//computes C = A * B, with N=kkr1_ns M=kkr2_ns, K=nrmat_ns +void zgemm_cuda_batched(int numLIZ, int kkrsz, int nspin, int nrmat_ns, cublasHandle_t &cublas_h, Complex* a, Complex *b, Complex *c, cudaStream_t s) { + + int kkrsz_ns=kkrsz*nspin; + //save old stream + cudaStream_t old; + cublasGetStream(cublas_h,&old); + //set cublas stream + cublasSetStream(cublas_h,s); + const cuDoubleComplex cmone=make_cuDoubleComplex(-1.0,0.0); + const cuDoubleComplex czero=make_cuDoubleComplex(0.0,0.0); + + //create batches + static vector h_av[16], h_bv[16], h_cv[16]; + + vector &h_a=h_av[omp_get_thread_num()]; + vector &h_b=h_bv[omp_get_thread_num()]; + vector &h_c=h_cv[omp_get_thread_num()]; + + static bool initialized[16]={0}; + + if(!initialized[omp_get_thread_num()]) { + h_a.resize(numLIZ); + h_b.resize(numLIZ); + h_c.resize(numLIZ); + + cudaHostRegister(&h_a[0],h_a.size()*sizeof(cuDoubleComplex*),0); + cudaHostRegister(&h_b[0],h_b.size()*sizeof(cuDoubleComplex*),0); + cudaHostRegister(&h_c[0],h_c.size()*sizeof(cuDoubleComplex*),0); + initialized[omp_get_thread_num()]=true; + } + + for(int i=0;i(a)+4*kkrsz*kkrsz*i; + h_b[i]=reinterpret_cast(b)+4*kkrsz*kkrsz*numLIZ*i; + h_c[i]=reinterpret_cast(c)+kkrsz*nspin*i; + } + + static DeviceVector d_av[16], d_bv[16], d_cv[16]; + + DeviceVector &d_a=d_av[omp_get_thread_num()]; + DeviceVector &d_b=d_bv[omp_get_thread_num()]; + DeviceVector &d_c=d_cv[omp_get_thread_num()]; + + //copy batch vectors to the device + d_a.copy_async(h_a,s); + d_b.copy_async(h_b,s); + d_c.copy_async(h_c,s); + + cublasCheckError( + cublasZgemmBatched(cublas_h, + CUBLAS_OP_N, + CUBLAS_OP_N, + kkrsz_ns, + kkrsz_ns*numLIZ, + kkrsz_ns, + &cmone, + (const cuDoubleComplex**)d_a.raw(), + kkrsz_ns, + (const cuDoubleComplex**)d_b.raw(), + kkrsz_ns, + &czero, + d_c.raw(), + nrmat_ns, + numLIZ) + ); + + // cudaStreamSynchronize(s); + + //restore old stream + cublasSetStream(cublas_h,old); +} diff --git a/src/Test/buildKKRMatrixTest_cuda/buildKKRMatrix_nrel_ns2.cpp b/src/Test/buildKKRMatrixTest_cuda/buildKKRMatrix_nrel_ns2.cpp new file mode 100644 index 000000000..a9e07f07f --- /dev/null +++ b/src/Test/buildKKRMatrixTest_cuda/buildKKRMatrix_nrel_ns2.cpp @@ -0,0 +1,375 @@ +#include +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" + +#include "TestStructures.hpp" +#include "Misc/Coeficients.hpp" + +#include + +#define USE_ALLOCA + #define INLINE_PLGLMAX + #define INLINE_MAKEGIJ + +void plglmax_new(int lmax, Real x, Real*plm); + +#include "makegij_new.cpp" + +void buildKKRMatrix_nrel_ns2(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, + Complex energy, Complex prel, Matrix &m) +{ +// make sure that lsms.n_spin_cant == 2! + if(lsms.n_spin_cant!=2) + { + printf("lsms.n_spin_cant!=2 in buildKKRMatrix_nrel_ns2\n"); + exit(1); + } + + Real rij[3]; + + int lmax=lsms.maxlmax; + int kkrsz=(lmax+1)*(lmax+1); + int kkrsz_ns=2*kkrsz; // lsms.n_spin_cant + int nrmat_ns=2*atom.nrmat; // lsms.n_spin_cant + int nrst,ncst; + +#ifdef USE_ALLOCA + Complex *gij=(Complex *)alloca(kkrsz*kkrsz*sizeof(Complex)); + Real *sinmp = (Real *)alloca(sizeof(Real)*(2*lmax+1)); + Real *cosmp = (Real *)alloca(sizeof(Real)*(2*lmax+1)); + Real *plm = (Real *)alloca(sizeof(Real)*lsms.angularMomentumIndices.ndlm); + Complex *hfn = (Complex *)alloca(sizeof(Complex)*(2*lmax+1)); + Complex *dlm = (Complex *)alloca(sizeof(Complex)*lsms.angularMomentumIndices.ndlj); + Complex *bgij = (Complex *)alloca(sizeof(Complex)*4*kkrsz*kkrsz); + Complex *tmat_n = (Complex *)alloca(sizeof(Complex)*atom.kkrsz*atom.kkrsz*4); +#else + Complex *gij = new Complex[kkrsz*kkrsz]; + Real *sinmp = new Real[2*lmax+1]; + Real *cosmp = new Real[2*lmax+1]; + Real *plm = new Real[lsms.angularMomentumIndices.ndlm]; + Complex *hfn = new Complex[2*lmax+1]; + Complex *dlm = new Complex[lsms.angularMomentumIndices.ndlj]; + Complex *bgij = new Complex[4*kkrsz*kkrsz]; + Complex *tmat_n = new Complex[atom.kkrsz*atom.kkrsz*4]; +#endif + + const Complex cmone=-1.0; + const Complex czero=0.0; + + Real pi4=4.0*2.0*std::asin(1.0); + + for(int i=0; i(0.0,1.0); + const Real ptol=1.0e-6; + + int lend=lmaxi+lmaxj; + + Real rmag=std::sqrt(rij[0]*rij[0]+rij[1]*rij[1]+rij[2]*rij[2]); + + if(std::abs(prel)==0.0) + { +// if prel is zero then we calculate Gij for multipole Coulomb interaction. + hfn[0]=1.0/rmag; + for(int l=1; l<=lend; l++) + { + hfn[l]=sqrtm1*(2.0*l-1)*hfn[l-1]/rmag; + } + } else { + Complex z=prel*rmag; + hfn[0]=-sqrtm1; + hfn[1]=-1.0-sqrtm1/z; + for(int l=1; lndlm) + { + printf("MAKEGIJ:: ndlm incorrect!\n"); + printf("ndlm=%d\nndlm_local=%d\n",ndlm,ndlm_local); + exit(1); + } + for(int j=0;jptol) + { + cosmp[1]=rij[0]/pmag; + sinmp[1]=rij[1]/pmag; + } else { + cosmp[1]=0.0; + sinmp[1]=0.0; + } + for(int m=2; m<=lend; m++) + { + cosmp[m]=cosmp[m-1]*cosmp[1]-sinmp[m-1]*sinmp[1]; + sinmp[m]=sinmp[m-1]*cosmp[1]+cosmp[m-1]*sinmp[1]; + } + + int j=0; + for(int l=0; l<=lend; l++) + { + int ll=l*(l+1); + j=ll; + ll=ll/2; + Real m1m=1.0; + dlm[j]= hfn[l]*plm[ll]; + for(int m=1; m<=l; m++) + { + m1m=-m1m; + Complex fac=plm[ll+m]*std::complex(cosmp[m],sinmp[m]); + dlm[j-m]= hfn[l]*m1m*fac; + dlm[j+m]= hfn[l]*std::conj(fac); + } + } + for(int i=0; i=llow;l3-=2) + { + int j=l3*(l3+1)+m3; + gij[lm2+lm1*kkri] = gij[lm2+lm1*kkri]+ gauntCoeficients.cgnt(l3/2,lm1,lm2)*dlm[j]; + } + gij[lm2+lm1*kkri]=pi4*iFactors.illp(lm2,lm1)*gij[lm2+lm1*kkri]; + } + } +} +#endif + + Complex psq=prel*prel; + +// for(int i=0; i +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" + +#include "TestStructures.hpp" +#include "Misc/Coeficients.hpp" + +#include + +#ifdef CRAYPAT +#include +#endif + +extern "C" +{ + void write_kkrmat_(Complex *a,int *n,int *lda,Complex *e); + + void makegij_(int *lmaxi,int *kkri,int *lmaxj,int *kkrj, + int *lmax,int *kkrsz,int *ndlj,int *ndlm, + Complex *prel,double *rij,double *sinmp,double *cosmp, + double *clm,double *plm,double *cgnt,int *lmax_cg,int *lofk,int *mofk, + Complex *ilp1,Complex *illp, + Complex *hfn,Complex *dlm,Complex *gij, + double *pi4,int *iprint,char *istop,int len_sitop); + + void setgij_(Complex *gij,Complex *bgij,int *kkr1,int *kkr1_ns,int *kkr2,int *kkr2_ns, + int *n_spin_cant,int *nrel_rel,Complex *psq,Complex *energy); +}; + +// #define SYNTHETIC_MATRIX +// #define WRITE_GIJ + +#define USE_ALLOCA + +void buildKKRMatrix_orig(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, Complex energy, Complex prel, Matrix &m) +{ +#ifdef CRAYPAT +PAT_region_begin(1,"buildKKRMatrix init"); +#endif + Real rij[3]; + + int lmax=lsms.maxlmax; + int kkrsz=(lmax+1)*(lmax+1); + int kkrsz_ns=kkrsz*lsms.n_spin_cant; + int nrmat_ns=lsms.n_spin_cant*atom.nrmat; + int nrst,ncst; + +#ifdef USE_ALLOCA + Complex *gij=(Complex *)alloca(kkrsz*kkrsz*sizeof(Complex)); + Real *sinmp = (Real *)alloca(sizeof(Real)*(2*lmax+1)); + Real *cosmp = (Real *)alloca(sizeof(Real)*(2*lmax+1)); + Real *plm = (Real *)alloca(sizeof(Real)*lsms.angularMomentumIndices.ndlm); + Complex *hfn = (Complex *)alloca(sizeof(Complex)*(2*lmax+1)); + Complex *dlm = (Complex *)alloca(sizeof(Complex)*lsms.angularMomentumIndices.ndlj); + Complex *bgij = (Complex *)alloca(sizeof(Complex)*4*kkrsz*kkrsz); + Complex *tmat_n = (Complex *)alloca(sizeof(Complex)*atom.kkrsz*atom.kkrsz*4); +#else + Complex *gij = new Complex[kkrsz*kkrsz]; + Real *sinmp = new Real[2*lmax+1]; + Real *cosmp = new Real[2*lmax+1]; + Real *plm = new Real[lsms.angularMomentumIndices.ndlm]; + Complex *hfn = new Complex[2*lmax+1]; + Complex *dlm = new Complex[lsms.angularMomentumIndices.ndlj]; + Complex *bgij = new Complex[4*kkrsz*kkrsz]; + Complex *tmat_n = new Complex[atom.kkrsz*atom.kkrsz*4]; +#endif + + const Complex cmone=-1.0; + const Complex czero=0.0; + + Real pi4=4.0*2.0*std::asin(1.0); + + for(int i=0; i=1) + { + printf("first t Matrix:\n"); + for(int i=0; i Gij_full(nrmat_ns,nrmat_ns); + for(int i=0; i=0) + { + FILE *f1=fopen("kkrmat.out","w"); + FILE *f2=fopen("kkrmat.pattern","w"); + for(int i=0; i0 +// the algorithm follows +// +// David H. Bailey, Karthik Jeyabalan and Xiaoye S. Li +// "A Comparison of Three High-Precision Quadrature Schemes" +// Experimental Mathematics 14, 317-329 (2005). +// + +#include + +template // R is a real type e.g. double +void calculateGaussLegendrePoints(R *x, R *w, int n, R xLeft = -1.0, R xRight = +1.0) +{ + const R pi = std::acos(-R(1)); + + R Pk[n], PkMinus1[n], PkPlus1[n]; // the Legendre polynomials at points x[i] + R Ppn[n]; // derivative of P_n(x_i) + R dX[n]; // correction values for the Newton iteration + + R xHalfWidth = 0.5*(xRight - xLeft); + R xMidpoint = 0.5*(xRight+xLeft); + + // the x[i] are the roots of the nth degree Legendre Polynomial P_n(x) + // we search these using a Newton iteration with starting guess + // x[i] ~ cos(\pi (j - 1/4) / (n + 1/2)) + + for(int i=0; i + +#define cudaCheckError() { \ + cudaError_t e=cudaGetLastError(); \ + if(e!=cudaSuccess) { \ + printf("Cuda failure %s:%d: '%s'\n",__FILE__,__LINE__,cudaGetErrorString(e)); \ + exit(0); \ + } \ +} + +#define cublasCheckError(e) { \ + if(e!=CUBLAS_STATUS_SUCCESS) { \ + printf("CUBLAS failure %s:%d:\n",__FILE__,__LINE__); \ + exit(0); \ + } \ +} + +#endif diff --git a/src/Test/buildKKRMatrixTest_cuda/makegij_c.f b/src/Test/buildKKRMatrixTest_cuda/makegij_c.f new file mode 100755 index 000000000..549dd2480 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_cuda/makegij_c.f @@ -0,0 +1,291 @@ +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine makegij(lmaxi,kkri,lmaxj,kkrj, + > lmax,kkrsz,ndlj,ndlm, + > prel,rij,sinmp,cosmp, + > clm,plm,cgnt,lmax_cg,lofk,mofk, + > ilp1,illp, + > hfn,dlm,gij, + > pi4,iprint,istop) +c ============================================================== +c + implicit none +c + character sname*32 + character istop*32 +c + integer lmaxi + integer lmaxj + integer lend + integer kkri + integer kkrj + integer lmax,lmax_cg + integer kkrsz + integer ndlj + integer ndlm,ndlm_local + integer lofk(ndlj) + integer mofk(ndlj) + integer l,ll + integer l1 + integer l2 + integer m + integer ma + integer m1 + integer m2 + integer lm1 + integer lm2 + integer l3,m3,llow + integer j + integer iprint +c + real*8 rij(3) + real*8 sinmp(0:lmaxi+lmaxj) + real*8 cosmp(0:lmaxi+lmaxj) + real*8 clm(ndlm) + real*8 plm(ndlm) +! original definition of cgnt in LSMS_1 +! real*8 cgnt(lmax+1,kkrsz,kkrsz) + real*8 cgnt(lmax_cg+1,(lmax_cg+1)**2,(lmax_cg+1)**2) + real*8 pi4 + real*8 rmag + real*8 pmag + real*8 costheta + real*8 m1m + real*8 ptol + real*8 zero + real*8 one +c + complex*16 prel + complex*16 ilp1(0:lmaxi+lmaxj) +! original definition of illp in LSMS_1 +! complex*16 illp(kkrsz,kkrsz) + complex*16 illp((lmax+1)**2,kkrsz) + complex*16 hfn(0:lmaxi+lmaxj) + complex*16 dlm(ndlj) + complex*16 gij(kkri,kkrj) + complex*16 z + complex*16 fac + complex*16 sqrtm1 + complex*16 czero + complex*16 cone +c + parameter (sqrtm1=(0.0d0,1.0d0)) + parameter (czero =(0.0d0,0.0d0)) + parameter (cone =(1.0d0,0.0d0)) + parameter (ptol =1.0d-06) + parameter (zero =0.0d0) + parameter (one =1.0d0) + parameter (sname ='makegij') +c +c ***************************************************************** +c +c +c ij l+1 m -> * +c D [E] = -i * sqrt(E) * h [sqrt(E)*R ] * Y [R ] +c L l ij l ij +c +c +c -l+1 m -> * +c = -i * sqrt(E) * h [sqrt(E)*R ] * Y [-R ] +c l ij l ij +c +c The extra factor (-1)^m removed by xgz July 97 from plm (plglmax_c.f) +c to make Ylm consistent with Numerical Recipes. +c +c m [ (2*l+1)*(l-|m|)!] m +c Y = sqrt[-----------------]*P [cos(theta)]*exp(i*m*phi) +c l [ 4*pi*(l+|m|)! ] l +c +c for m>=0 +c +c m m -m * +c Y [theta,phi] = (-1) Y [theta,phi] for m<0 +c l l +c +c -> -> -> +c R = R - R ==> [theta,phi] +c ij j i +c +c cos(theta)=Rij(3)/sqrt(Rij(1)**2+Rij(2)**2+Rij(3)**2) +c +c cos(phi) =Rij(1)/sqrt(Rij(1)**2+Rij(2)**2) +c +c m m +c Indexing: P : P(l*(l+1)/2+m+1) only +m are calculated +c l l +c +c m m +c Indexing: C : C(l*(l+1)/2+m+1) only +m are calculated +c l l +c +c m m +c Indexing: D : D(l*(l+1)+m+1) all m are calculated +c l l +c +c Now for the real space structure contant we have : +c +c ij l-l' L ij +c G (E) = 4*pi*i * SUM { C * D (E) } +c L,L' L" L',L" L" +c +c ***************************************************************** +c +c ================================================================= + if(lmax.lt.0) then + write(6,'('' makegij:: bad arguments: lmax='',i5)') lmax + call fstop(sname) + endif + lend=lmaxi+lmaxj +c ================================================================= +c calculate the hankel function.[dangerous code if z is close to 0] +c hankel function is hfn*exp(i*z)/z + rmag=sqrt(rij(1)*rij(1)+rij(2)*rij(2)+rij(3)*rij(3)) + if(rmag.lt.ptol) stop 'Error in makegij: rmag = 0.' + if(prel.eq.czero) then +c if prel is zero then we calculate Gij for multipole Coulomb interaction. + hfn(0)=cone/rmag + do l=1,lend + hfn(l)=sqrtm1*(2*l-1)*hfn(l-1)/rmag + enddo + else + z=prel*rmag + hfn(0)=-sqrtm1 + hfn(1)=-cone-sqrtm1/z + do l=1,lend-1 + hfn(l+1)=(2*l+1)*hfn(l)/z - hfn(l-1) + enddo +c ================================================================= +c l+1 +c hfn = -i *h (k*R )*sqrt(E) +c l ij +c ================================================================= + z=exp(sqrtm1*z)/rmag + do l=0,lend + hfn(l)=-hfn(l)*z*ilp1(l) + enddo + endif +c +c ================================================================= +c calculate p(l,m)'s............................................... + costheta=rij(3)/rmag +c ----------------------------------------------------------------- + call plglmax(lend,costheta,plm) +c ----------------------------------------------------------------- +c ================================================================= +c multiply be the normalization constant........................... + ndlm_local=(lend+1)*(lend+2)/2 + if(ndlm_local.gt.ndlm) then + write(6,'(''MAKEGIJ:: ndlm incorrect!'')') + write(6,*) 'ndlm=',ndlm + write(6,*) 'ndlm_local=',ndlm_local + call fstop(sname) + endif + do j=1,ndlm_local + plm(j)=clm(j)*plm(j) + enddo +c ================================================================= +c calculate cos(phi) and sin(phi) ................................. + pmag=sqrt(rij(1)*rij(1)+rij(2)*rij(2)) + cosmp(0)=one + sinmp(0)=zero + if(pmag.ge.ptol) then + cosmp(1)=rij(1)/pmag + sinmp(1)=rij(2)/pmag + else + cosmp(1)=zero + sinmp(1)=zero + endif + do m=2,lend + cosmp(m)=cosmp(m-1)*cosmp(1)-sinmp(m-1)*sinmp(1) + sinmp(m)=sinmp(m-1)*cosmp(1)+cosmp(m-1)*sinmp(1) + enddo +c + j=0 + do l=0,lend + ll=l*(l+1) + j=ll+1 + ll=ll/2+1 + m1m=one + dlm(j)= hfn(l)*plm(ll) + do m=1,l + m1m=-m1m + fac=plm(ll+m)*dcmplx(cosmp(m),sinmp(m)) + dlm(j-m)= hfn(l)*m1m*fac + dlm(j+m)= hfn(l)*conjg(fac) + enddo + enddo +c ================================================================= + if(iprint.ge.3) then + write(6,'(/)') + write(6,*) "Rij=",rij(1),rij(2),rij(3) + write(6,*) "cos(theta)=",costheta + write(6,'(/)') + write(6,'('' makegij:: l,m,dlm(l,m):'')') + do j=1,ndlj + write(6,'(2i3,2x,f10.5,1x,d16.8)') + > lofk(j),mofk(j),dlm(j) + enddo + write(6,*) "i, plm(i)" + do j=1,ndlm + write(6,*) j,plm(j) + end do + endif +c +c ================================================================ +c calculate g(R_ij)............................................... +c ---------------------------------------------------------------- +! call zeroout(gij,2*kkri*kkrj) + gij=0.0d0 +c ---------------------------------------------------------------- +c ================================================================ +c loop over l1,m1............................................ + do lm1=1,kkrj + l1=lofk(lm1) + m1=mofk(lm1) +c ============================================================= +c loop over l2,m2.............................................. + do lm2=1,kkri + l2=lofk(lm2) + m2=mofk(lm2) +c ========================================================== +c l2-l1 +c illp(lm2,lm1) = i +c +c perform sum over l3 with gaunt # ...................... +c ========================================================== + m3=m2-m1 + llow=max(abs(m3),abs(l1-l2)) + if(prel.eq.czero) llow=l1+l2 + do l3=l1+l2,llow,-2 + j=l3*(l3+1)+m3+1 + gij(lm2,lm1) = gij(lm2,lm1)+cgnt(l3/2+1,lm1,lm2)*dlm(j) + enddo + gij(lm2,lm1)=pi4*illp(lm2,lm1)*gij(lm2,lm1) + enddo + enddo +c +c ================================================================ +c printout if needed.............................................. + if(iprint.ge.3) then +c ============================================================= +c loop over l1,m1.............................................. + do lm1=1,kkrj + l1=lofk(lm1) + m1=mofk(lm1) +c ========================================================== +c loop over l2,m2........................................... + do lm2=1,kkri + l2=lofk(lm2) + m2=mofk(lm2) + write(6,'('' lm1,lm2,l1,m1,l2,m2:'',6i3,2d12.5)') + > lm1,lm2,l1,m1,l2,m2,gij(lm2,lm1) + enddo + enddo + endif +c ================================================================= + if (istop.eq.sname) then + call fstop(sname) + else + return + endif +c + end diff --git a/src/Test/buildKKRMatrixTest_cuda/makegij_new.cpp b/src/Test/buildKKRMatrixTest_cuda/makegij_new.cpp new file mode 100644 index 000000000..d41978648 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_cuda/makegij_new.cpp @@ -0,0 +1,297 @@ +#include +#include +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" +#include "Array3d.hpp" + +// #define INLINE_PLGLMAX + +extern "C" +{ + void plglmax_(int *lend, Real*costheta, Real*plm); +} +// void plglmax_new(int lmax, Real x, Real*plm); + +#include "plglmax_new.cpp" + +inline void makegij_new(int lmaxi, int kkri, int lmaxj, int kkrj, + int lmax, int kkrsz, int ndlj, int ndlm, + Complex prel, Real *rij,Real *sinmp, Real *cosmp, + Real *clm, Real *plm, Array3d &cgnt, + int *lofk, int *mofk, + Complex *ilp1, Matrix &illp, + Complex *hfn, Complex *dlm, + Complex *gij, Real pi4) +{ + const Complex sqrtm1=std::complex(0.0,1.0); + const Real ptol=1.0e-6; +/* +c ***************************************************************** +c +c +c ij l+1 m -> * +c D [E] = -i * sqrt(E) * h [sqrt(E)*R ] * Y [R ] +c L l ij l ij +c +c +c -l+1 m -> * +c = -i * sqrt(E) * h [sqrt(E)*R ] * Y [-R ] +c l ij l ij +c +c The extra factor (-1)^m removed by xgz July 97 from plm (plglmax_c.f) +c to make Ylm consistent with Numerical Recipes. +c +c m [ (2*l+1)*(l-|m|)!] m +c Y = sqrt[-----------------]*P [cos(theta)]*exp(i*m*phi) +c l [ 4*pi*(l+|m|)! ] l +c +c for m>=0 +c +c m m -m * +c Y [theta,phi] = (-1) Y [theta,phi] for m<0 +c l l +c +c -> -> -> +c R = R - R ==> [theta,phi] +c ij j i +c +c cos(theta)=Rij(3)/sqrt(Rij(1)**2+Rij(2)**2+Rij(3)**2) +c +c cos(phi) =Rij(1)/sqrt(Rij(1)**2+Rij(2)**2) +c +c m m +c Indexing: P : P(l*(l+1)/2+m+1) only +m are calculated +c l l +c +c m m +c Indexing: C : C(l*(l+1)/2+m+1) only +m are calculated +c l l +c +c m m +c Indexing: D : D(l*(l+1)+m+1) all m are calculated +c l l +c +c Now for the real space structure contant we have : +c +c ij l-l' L ij +c G (E) = 4*pi*i * SUM { C * D (E) } +c L,L' L" L',L" L" +c +c ***************************************************************** +*/ + + int lend=lmaxi+lmaxj; +/* +c calculate the hankel function.[dangerous code if z is close to 0] +c hankel function is hfn*exp(i*z)/z +*/ + Real rmag=std::sqrt(rij[0]*rij[0]+rij[1]*rij[1]+rij[2]*rij[2]); +// if(rmag.lt.ptol) stop 'Error in makegij: rmag = 0.' + if(std::abs(prel)==0.0) + { +// if prel is zero then we calculate Gij for multipole Coulomb interaction. + hfn[0]=1.0/rmag; + for(int l=1; l<=lend; l++) + { + hfn[l]=sqrtm1*(2.0*l-1)*hfn[l-1]/rmag; + } + } else { + Complex z=prel*rmag; + hfn[0]=-sqrtm1; + hfn[1]=-1.0-sqrtm1/z; + for(int l=1; lndlm) + { + printf("MAKEGIJ:: ndlm incorrect!\n"); + printf("ndlm=%d\nndlm_local=%d\n",ndlm,ndlm_local); + exit(1); + } + for(int j=0;jptol) + { + cosmp[1]=rij[0]/pmag; + sinmp[1]=rij[1]/pmag; + } else { + cosmp[1]=0.0; + sinmp[1]=0.0; + } + for(int m=2; m<=lend; m++) + { + cosmp[m]=cosmp[m-1]*cosmp[1]-sinmp[m-1]*sinmp[1]; + sinmp[m]=sinmp[m-1]*cosmp[1]+cosmp[m-1]*sinmp[1]; + } + + int j=0; + for(int l=0; l<=lend; l++) + { + int ll=l*(l+1); + j=ll; + ll=ll/2; + Real m1m=1.0; + dlm[j]= hfn[l]*plm[ll]; + for(int m=1; m<=l; m++) + { + m1m=-m1m; + Complex fac=plm[ll+m]*std::complex(cosmp[m],sinmp[m]); + dlm[j-m]= hfn[l]*m1m*fac; + dlm[j+m]= hfn[l]*std::conj(fac); + } + } + +// ================================================================ +// calculate g(R_ij)............................................... + for(int i=0; i=llow;l3-=2) + { + int j=l3*(l3+1)+m3; + gij[lm2+lm1*kkri] = gij[lm2+lm1*kkri]+cgnt(l3/2,lm1,lm2)*dlm[j]; + } + gij[lm2+lm1*kkri]=pi4*illp(lm2,lm1)*gij[lm2+lm1*kkri]; + } + } +} diff --git a/src/Test/buildKKRMatrixTest_cuda/plglmax_new.cpp b/src/Test/buildKKRMatrixTest_cuda/plglmax_new.cpp new file mode 100644 index 000000000..03bf14e17 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_cuda/plglmax_new.cpp @@ -0,0 +1,131 @@ +#include "Real.hpp" +/* subroutine plglmax(lmax,x,plm) +c **************************************************************** +c Associated Legendre function.................................... +c Calclates all the p(l,m)'s up to lmax........................... +c based on the formulae given in "Numerical Recipes" pages 180-183 +c (Equations 6.6.7, 6.6.8 and 6.6.9............................... +c W. H. Press, B. P. Flannery, S A Teukolsky and W. T. Vetterling. +c Cambridge Univ Press 1986....................................... +c **************************************************************** +c +c Inputs: lmax integer scalar, max l for Plm +c x real*8 scalar, argument of Plm(x) +c Returns: plm real*8 array of ((lmax+1)*(lmax+2)/2), Plm(x) +c +*/ +#define LMAX_GE_2 + +inline void plglmax_new(int lmax, Real x, Real*plm) +{ + const Real tol=1.0e-12; +// removed checks from original plglmax.f + + if((1.0-std::abs(x)) +#include "Real.hpp" + +// mpicxx -I ../../../include/ plglmax_test.cpp plglmax_new.cpp plglmax.o zeroout.o -lgfortran + + +extern "C" +{ + void plglmax_(int *lend, Real*costheta, Real*plm); +} +void plglmax_new(int lmax, Real x, Real*plm); + +int main(int argc, char *argv[]) +{ + Real x; + Real *plm, *plm_new; + int lmax; + + lmax = atoi(argv[1]); + x = atof(argv[2]); + plm=(Real *)malloc((lmax+1)*(lmax+2)*sizeof(Real)/2); + plm_new=(Real *)malloc((lmax+1)*(lmax+2)*sizeof(Real)/2); + + plglmax_new(lmax,x,plm_new); + plglmax_(&lmax,&x,plm); + + printf("i plm[i] plm_new[i] |plm-plm_new|\n\n"); + + for(int i=0; i<(lmax+1)*(lmax+2)/2; i++) + printf("%d %lg %lg %lg\n",i,plm[i],plm_new[i],std::abs(plm[i]-plm_new[i])); + + + free(plm); free(plm_new); + return 0; +} diff --git a/src/Test/buildKKRMatrixTest_cuda/quadrature.cpp b/src/Test/buildKKRMatrixTest_cuda/quadrature.cpp new file mode 100644 index 000000000..85da9db6f --- /dev/null +++ b/src/Test/buildKKRMatrixTest_cuda/quadrature.cpp @@ -0,0 +1,14 @@ + +#include "Real.hpp" +#include "calculateGaussLegendrePoints.hpp" + +extern "C" +{ + void gauss_legendre_points_(double *x1, double *x2, double *x, double *w, int *n); +} + +void gauss_legendre_points_(double *x1, double *x2, double *x, double *w, int *n) +{ + calculateGaussLegendrePoints(x, w, *n, *x1, *x2); +} + diff --git a/src/Test/buildKKRMatrixTest_cuda/setgij.f b/src/Test/buildKKRMatrixTest_cuda/setgij.f new file mode 100755 index 000000000..91ca46b2f --- /dev/null +++ b/src/Test/buildKKRMatrixTest_cuda/setgij.f @@ -0,0 +1,58 @@ + subroutine setgij(gij, bgij,kkr1, kkr1_ns,kkr2,kkr2_ns, + > n_spin_cant,nrel_rel,psq,ce) +c ============================================================== +c + implicit none +c + character istop*32 + character sname*32 + integer im,in + integer i,j + integer is + integer kkr1 + integer kkr1_ns + integer kkr2 + integer kkr2_ns + integer n_spin_cant + integer nrel_rel +c + complex*16 gij(kkr1,kkr2) + complex*16 bgij(kkr1_ns,kkr2_ns) + complex*16 fac + complex*16 psq + complex*16 ce + + parameter (sname='setgij') +c + call zeroout(bgij,2*kkr1_ns*kkr2_ns) +c + if(nrel_rel.eq.0) then + do is=1,n_spin_cant + im=(is-1)*kkr1 + in=(is-1)*kkr2 + do i=1,kkr1 + do j=1,kkr2 + bgij(im+i,in+j)=gij(i,j) + end do + end do + end do + else +! if(kkr1.ne.kkr2) then +! write(6,*) 'SETGIJ: nonsquare rel. Gij not yet supported' +! call fstop(sname) +! end if +! call relmtrx(gij,bgij,lmax) + + write(6,*) 'SETGIJ: relativity currently not supported' + call fstop(sname) +c$$$ call relmtrx(gij,bgij,kkr1,kkr2) +c$$$ fac=psq/ce +c$$$ do i=1,kkr1_ns +c$$$ do j=1,kkr2_ns +c$$$ bgij(i,j)=fac*bgij(i,j) +c$$$ end do +c$$$ end do + end if +c + return + end diff --git a/src/Test/buildKKRMatrixTest_kokkos/LIZ_pos.h b/src/Test/buildKKRMatrixTest_kokkos/LIZ_pos.h new file mode 100644 index 000000000..b328fd463 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_kokkos/LIZ_pos.h @@ -0,0 +1,344 @@ +void set_LIZ(AtomData & atom) +{ + atom.numLIZ=113; + atom.LIZPos.resize(3,atom.numLIZ); + atom.LIZPos(0,0)=0; + atom.LIZPos(1,0)=0; + atom.LIZPos(2,0)=0; + atom.LIZPos(0,1)=2.71; + atom.LIZPos(1,1)=-2.71; + atom.LIZPos(2,1)=2.71; + atom.LIZPos(0,2)=2.71; + atom.LIZPos(1,2)=-2.71; + atom.LIZPos(2,2)=-2.71; + atom.LIZPos(0,3)=-2.71; + atom.LIZPos(1,3)=-2.71; + atom.LIZPos(2,3)=-2.71; + atom.LIZPos(0,4)=-2.71; + atom.LIZPos(1,4)=2.71; + atom.LIZPos(2,4)=2.71; + atom.LIZPos(0,5)=-2.71; + atom.LIZPos(1,5)=2.71; + atom.LIZPos(2,5)=-2.71; + atom.LIZPos(0,6)=-2.71; + atom.LIZPos(1,6)=-2.71; + atom.LIZPos(2,6)=2.71; + atom.LIZPos(0,7)=2.71; + atom.LIZPos(1,7)=2.71; + atom.LIZPos(2,7)=2.71; + atom.LIZPos(0,8)=2.71; + atom.LIZPos(1,8)=2.71; + atom.LIZPos(2,8)=-2.71; + atom.LIZPos(0,9)=0; + atom.LIZPos(1,9)=-5.42; + atom.LIZPos(2,9)=0; + atom.LIZPos(0,10)=5.42; + atom.LIZPos(1,10)=0; + atom.LIZPos(2,10)=0; + atom.LIZPos(0,11)=0; + atom.LIZPos(1,11)=0; + atom.LIZPos(2,11)=-5.42; + atom.LIZPos(0,12)=0; + atom.LIZPos(1,12)=0; + atom.LIZPos(2,12)=5.42; + atom.LIZPos(0,13)=-5.42; + atom.LIZPos(1,13)=0; + atom.LIZPos(2,13)=0; + atom.LIZPos(0,14)=0; + atom.LIZPos(1,14)=5.42; + atom.LIZPos(2,14)=0; + atom.LIZPos(0,15)=-5.42; + atom.LIZPos(1,15)=0; + atom.LIZPos(2,15)=-5.42; + atom.LIZPos(0,16)=-5.42; + atom.LIZPos(1,16)=-5.42; + atom.LIZPos(2,16)=0; + atom.LIZPos(0,17)=0; + atom.LIZPos(1,17)=-5.42; + atom.LIZPos(2,17)=-5.42; + atom.LIZPos(0,18)=-5.42; + atom.LIZPos(1,18)=0; + atom.LIZPos(2,18)=5.42; + atom.LIZPos(0,19)=-5.42; + atom.LIZPos(1,19)=5.42; + atom.LIZPos(2,19)=0; + atom.LIZPos(0,20)=5.42; + atom.LIZPos(1,20)=-5.42; + atom.LIZPos(2,20)=0; + atom.LIZPos(0,21)=5.42; + atom.LIZPos(1,21)=0; + atom.LIZPos(2,21)=-5.42; + atom.LIZPos(0,22)=0; + atom.LIZPos(1,22)=-5.42; + atom.LIZPos(2,22)=5.42; + atom.LIZPos(0,23)=0; + atom.LIZPos(1,23)=5.42; + atom.LIZPos(2,23)=5.42; + atom.LIZPos(0,24)=5.42; + atom.LIZPos(1,24)=0; + atom.LIZPos(2,24)=5.42; + atom.LIZPos(0,25)=0; + atom.LIZPos(1,25)=5.42; + atom.LIZPos(2,25)=-5.42; + atom.LIZPos(0,26)=5.42; + atom.LIZPos(1,26)=5.42; + atom.LIZPos(2,26)=0; + atom.LIZPos(0,27)=8.13; + atom.LIZPos(1,27)=-2.71; + atom.LIZPos(2,27)=2.71; + atom.LIZPos(0,28)=-2.71; + atom.LIZPos(1,28)=8.13; + atom.LIZPos(2,28)=-2.71; + atom.LIZPos(0,29)=2.71; + atom.LIZPos(1,29)=8.13; + atom.LIZPos(2,29)=-2.71; + atom.LIZPos(0,30)=2.71; + atom.LIZPos(1,30)=8.13; + atom.LIZPos(2,30)=2.71; + atom.LIZPos(0,31)=2.71; + atom.LIZPos(1,31)=2.71; + atom.LIZPos(2,31)=8.13; + atom.LIZPos(0,32)=2.71; + atom.LIZPos(1,32)=2.71; + atom.LIZPos(2,32)=-8.13; + atom.LIZPos(0,33)=-2.71; + atom.LIZPos(1,33)=8.13; + atom.LIZPos(2,33)=2.71; + atom.LIZPos(0,34)=8.13; + atom.LIZPos(1,34)=-2.71; + atom.LIZPos(2,34)=-2.71; + atom.LIZPos(0,35)=2.71; + atom.LIZPos(1,35)=-8.13; + atom.LIZPos(2,35)=-2.71; + atom.LIZPos(0,36)=2.71; + atom.LIZPos(1,36)=-8.13; + atom.LIZPos(2,36)=2.71; + atom.LIZPos(0,37)=2.71; + atom.LIZPos(1,37)=-2.71; + atom.LIZPos(2,37)=8.13; + atom.LIZPos(0,38)=2.71; + atom.LIZPos(1,38)=-2.71; + atom.LIZPos(2,38)=-8.13; + atom.LIZPos(0,39)=-2.71; + atom.LIZPos(1,39)=2.71; + atom.LIZPos(2,39)=8.13; + atom.LIZPos(0,40)=-2.71; + atom.LIZPos(1,40)=2.71; + atom.LIZPos(2,40)=-8.13; + atom.LIZPos(0,41)=-8.13; + atom.LIZPos(1,41)=-2.71; + atom.LIZPos(2,41)=-2.71; + atom.LIZPos(0,42)=-8.13; + atom.LIZPos(1,42)=-2.71; + atom.LIZPos(2,42)=2.71; + atom.LIZPos(0,43)=-8.13; + atom.LIZPos(1,43)=2.71; + atom.LIZPos(2,43)=-2.71; + atom.LIZPos(0,44)=-8.13; + atom.LIZPos(1,44)=2.71; + atom.LIZPos(2,44)=2.71; + atom.LIZPos(0,45)=-2.71; + atom.LIZPos(1,45)=-2.71; + atom.LIZPos(2,45)=8.13; + atom.LIZPos(0,46)=8.13; + atom.LIZPos(1,46)=2.71; + atom.LIZPos(2,46)=2.71; + atom.LIZPos(0,47)=8.13; + atom.LIZPos(1,47)=2.71; + atom.LIZPos(2,47)=-2.71; + atom.LIZPos(0,48)=-2.71; + atom.LIZPos(1,48)=-8.13; + atom.LIZPos(2,48)=-2.71; + atom.LIZPos(0,49)=-2.71; + atom.LIZPos(1,49)=-8.13; + atom.LIZPos(2,49)=2.71; + atom.LIZPos(0,50)=-2.71; + atom.LIZPos(1,50)=-2.71; + atom.LIZPos(2,50)=-8.13; + atom.LIZPos(0,51)=-5.42; + atom.LIZPos(1,51)=5.42; + atom.LIZPos(2,51)=-5.42; + atom.LIZPos(0,52)=5.42; + atom.LIZPos(1,52)=5.42; + atom.LIZPos(2,52)=5.42; + atom.LIZPos(0,53)=5.42; + atom.LIZPos(1,53)=5.42; + atom.LIZPos(2,53)=-5.42; + atom.LIZPos(0,54)=-5.42; + atom.LIZPos(1,54)=-5.42; + atom.LIZPos(2,54)=-5.42; + atom.LIZPos(0,55)=-5.42; + atom.LIZPos(1,55)=5.42; + atom.LIZPos(2,55)=5.42; + atom.LIZPos(0,56)=5.42; + atom.LIZPos(1,56)=-5.42; + atom.LIZPos(2,56)=5.42; + atom.LIZPos(0,57)=5.42; + atom.LIZPos(1,57)=-5.42; + atom.LIZPos(2,57)=-5.42; + atom.LIZPos(0,58)=-5.42; + atom.LIZPos(1,58)=-5.42; + atom.LIZPos(2,58)=5.42; + atom.LIZPos(0,59)=10.84; + atom.LIZPos(1,59)=0; + atom.LIZPos(2,59)=0; + atom.LIZPos(0,60)=0; + atom.LIZPos(1,60)=0; + atom.LIZPos(2,60)=10.84; + atom.LIZPos(0,61)=-10.84; + atom.LIZPos(1,61)=0; + atom.LIZPos(2,61)=0; + atom.LIZPos(0,62)=0; + atom.LIZPos(1,62)=0; + atom.LIZPos(2,62)=-10.84; + atom.LIZPos(0,63)=0; + atom.LIZPos(1,63)=-10.84; + atom.LIZPos(2,63)=0; + atom.LIZPos(0,64)=0; + atom.LIZPos(1,64)=10.84; + atom.LIZPos(2,64)=0; + atom.LIZPos(0,65)=8.13; + atom.LIZPos(1,65)=2.71; + atom.LIZPos(2,65)=8.13; + atom.LIZPos(0,66)=8.13; + atom.LIZPos(1,66)=-8.13; + atom.LIZPos(2,66)=2.71; + atom.LIZPos(0,67)=8.13; + atom.LIZPos(1,67)=-2.71; + atom.LIZPos(2,67)=-8.13; + atom.LIZPos(0,68)=8.13; + atom.LIZPos(1,68)=-8.13; + atom.LIZPos(2,68)=-2.71; + atom.LIZPos(0,69)=8.13; + atom.LIZPos(1,69)=8.13; + atom.LIZPos(2,69)=-2.71; + atom.LIZPos(0,70)=8.13; + atom.LIZPos(1,70)=2.71; + atom.LIZPos(2,70)=-8.13; + atom.LIZPos(0,71)=8.13; + atom.LIZPos(1,71)=8.13; + atom.LIZPos(2,71)=2.71; + atom.LIZPos(0,72)=8.13; + atom.LIZPos(1,72)=-2.71; + atom.LIZPos(2,72)=8.13; + atom.LIZPos(0,73)=-8.13; + atom.LIZPos(1,73)=-8.13; + atom.LIZPos(2,73)=-2.71; + atom.LIZPos(0,74)=2.71; + atom.LIZPos(1,74)=8.13; + atom.LIZPos(2,74)=8.13; + atom.LIZPos(0,75)=2.71; + atom.LIZPos(1,75)=-8.13; + atom.LIZPos(2,75)=-8.13; + atom.LIZPos(0,76)=-8.13; + atom.LIZPos(1,76)=8.13; + atom.LIZPos(2,76)=-2.71; + atom.LIZPos(0,77)=-8.13; + atom.LIZPos(1,77)=8.13; + atom.LIZPos(2,77)=2.71; + atom.LIZPos(0,78)=-2.71; + atom.LIZPos(1,78)=-8.13; + atom.LIZPos(2,78)=-8.13; + atom.LIZPos(0,79)=-8.13; + atom.LIZPos(1,79)=2.71; + atom.LIZPos(2,79)=8.13; + atom.LIZPos(0,80)=-2.71; + atom.LIZPos(1,80)=-8.13; + atom.LIZPos(2,80)=8.13; + atom.LIZPos(0,81)=-2.71; + atom.LIZPos(1,81)=8.13; + atom.LIZPos(2,81)=-8.13; + atom.LIZPos(0,82)=-2.71; + atom.LIZPos(1,82)=8.13; + atom.LIZPos(2,82)=8.13; + atom.LIZPos(0,83)=-8.13; + atom.LIZPos(1,83)=2.71; + atom.LIZPos(2,83)=-8.13; + atom.LIZPos(0,84)=-8.13; + atom.LIZPos(1,84)=-2.71; + atom.LIZPos(2,84)=8.13; + atom.LIZPos(0,85)=-8.13; + atom.LIZPos(1,85)=-2.71; + atom.LIZPos(2,85)=-8.13; + atom.LIZPos(0,86)=2.71; + atom.LIZPos(1,86)=-8.13; + atom.LIZPos(2,86)=8.13; + atom.LIZPos(0,87)=-8.13; + atom.LIZPos(1,87)=-8.13; + atom.LIZPos(2,87)=2.71; + atom.LIZPos(0,88)=2.71; + atom.LIZPos(1,88)=8.13; + atom.LIZPos(2,88)=-8.13; + atom.LIZPos(0,89)=-10.84; + atom.LIZPos(1,89)=-5.42; + atom.LIZPos(2,89)=0; + atom.LIZPos(0,90)=10.84; + atom.LIZPos(1,90)=5.42; + atom.LIZPos(2,90)=0; + atom.LIZPos(0,91)=5.42; + atom.LIZPos(1,91)=10.84; + atom.LIZPos(2,91)=0; + atom.LIZPos(0,92)=-10.84; + atom.LIZPos(1,92)=0; + atom.LIZPos(2,92)=-5.42; + atom.LIZPos(0,93)=5.42; + atom.LIZPos(1,93)=0; + atom.LIZPos(2,93)=10.84; + atom.LIZPos(0,94)=10.84; + atom.LIZPos(1,94)=-5.42; + atom.LIZPos(2,94)=0; + atom.LIZPos(0,95)=-10.84; + atom.LIZPos(1,95)=0; + atom.LIZPos(2,95)=5.42; + atom.LIZPos(0,96)=10.84; + atom.LIZPos(1,96)=0; + atom.LIZPos(2,96)=-5.42; + atom.LIZPos(0,97)=10.84; + atom.LIZPos(1,97)=0; + atom.LIZPos(2,97)=5.42; + atom.LIZPos(0,98)=-10.84; + atom.LIZPos(1,98)=5.42; + atom.LIZPos(2,98)=0; + atom.LIZPos(0,99)=-5.42; + atom.LIZPos(1,99)=-10.84; + atom.LIZPos(2,99)=0; + atom.LIZPos(0,100)=5.42; + atom.LIZPos(1,100)=0; + atom.LIZPos(2,100)=-10.84; + atom.LIZPos(0,101)=-5.42; + atom.LIZPos(1,101)=0; + atom.LIZPos(2,101)=-10.84; + atom.LIZPos(0,102)=-5.42; + atom.LIZPos(1,102)=0; + atom.LIZPos(2,102)=10.84; + atom.LIZPos(0,103)=-5.42; + atom.LIZPos(1,103)=10.84; + atom.LIZPos(2,103)=0; + atom.LIZPos(0,104)=0; + atom.LIZPos(1,104)=-10.84; + atom.LIZPos(2,104)=-5.42; + atom.LIZPos(0,105)=5.42; + atom.LIZPos(1,105)=-10.84; + atom.LIZPos(2,105)=0; + atom.LIZPos(0,106)=0; + atom.LIZPos(1,106)=-10.84; + atom.LIZPos(2,106)=5.42; + atom.LIZPos(0,107)=0; + atom.LIZPos(1,107)=10.84; + atom.LIZPos(2,107)=5.42; + atom.LIZPos(0,108)=0; + atom.LIZPos(1,108)=10.84; + atom.LIZPos(2,108)=-5.42; + atom.LIZPos(0,109)=0; + atom.LIZPos(1,109)=5.42; + atom.LIZPos(2,109)=10.84; + atom.LIZPos(0,110)=0; + atom.LIZPos(1,110)=-5.42; + atom.LIZPos(2,110)=-10.84; + atom.LIZPos(0,111)=0; + atom.LIZPos(1,111)=-5.42; + atom.LIZPos(2,111)=10.84; + atom.LIZPos(0,112)=0; + atom.LIZPos(1,112)=5.42; + atom.LIZPos(2,112)=-10.84; +} diff --git a/src/Test/buildKKRMatrixTest_kokkos/Makefile b/src/Test/buildKKRMatrixTest_kokkos/Makefile new file mode 100644 index 000000000..311df7014 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_kokkos/Makefile @@ -0,0 +1,84 @@ + +export TOP_DIR = $(shell pwd)/../../.. +export INC_PATH = +export LIBS := + +#### +# Kokkos stuff + +#export KOKKOS_PATH = ${HOME}/local/power8 +export KOKKOS_PATH = ${HOME}/Kokkos/kokkos + +# export KOKKOS_DEVICES=Cuda,OpenMP +export KOKKOS_DEVICES=OpenMP + +export KOKKOS_ARCH=Power8 + +#### + +include $(TOP_DIR)/architecture.h + +all: buildKKRMatrixTest + +include $(KOKKOS_PATH)/Makefile.kokkos + +# export INC_PATH += -I $(TOP_DIR)/include -I $(TOP_DIR)/src -I$(KOKKOS_PATH)/include +export INC_PATH += -I $(TOP_DIR)/include -I $(TOP_DIR)/src $(KOKKOS_CPPFLAGS) +export MISC = $(TOP_DIR)/src/Misc + +COEFICIENTS = cgaunt_c.o ifacts_c.o quadrature.o fstop.o zeroout.o \ + gaunt.o plglmax.o associatedLegendreFunction.o + + +clean: kokkos-clean + rm -f *.o buildKKRMatrixTest + cd ../../../CBLAS && $(MAKE) clean + +cgaunt_c.o: $(MISC)/cgaunt_c.f + $(F77) -c $(MISC)/cgaunt_c.f +ifacts_c.o: $(MISC)/ifacts_c.f + $(F77) -c $(MISC)/ifacts_c.f +#gauleg.o: $(MISC)/gauleg.f +# $(F77) -c $(MISC)/gauleg.f +quadrature.o: quadrature.cpp + $(CXX) -c quadrature.cpp +plglmax.o: $(MISC)/plglmax.f + $(F77) -c $(MISC)/plglmax.f +associatedLegendreFunction.o: associatedLegendreFunction.cpp associatedLegendreFunction.hpp + $(CXX) -c associatedLegendreFunction.cpp +fstop.o: $(MISC)/fstop.f + $(F77) -c $(MISC)/fstop.f +zeroout.o: $(MISC)/zeroout.f + $(F77) -c $(MISC)/zeroout.f +gaunt.o: $(MISC)/gaunt.f + $(F77) -c $(MISC)/gaunt.f + +makegij_c.o: makegij_c.f + $(F77) -c makegij_c.f +setgij.o: setgij.f + $(F77) -c setgij.f + +makegij_new.o: makegij_new.cpp + $(CXX) $(INC_PATH) -c makegij_new.cpp +plglmax_new.o: plglmax_new.cpp + $(CXX) $(INC_PATH) -c plglmax_new.cpp + +buildKKRMatrix_original.o: buildKKRMatrix_original.cpp + $(CXX) $(INC_PATH) -c buildKKRMatrix_original.cpp +buildKKRMatrix_nrel_ns2.o: buildKKRMatrix_nrel_ns2.cpp + $(CXX) $(INC_PATH) -c buildKKRMatrix_nrel_ns2.cpp +buildKKRMatrix_kokkos.o: buildKKRMatrix_kokkos.cpp $(KOKKOS_CPP_DEPENDS) + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(INC_PATH) -c buildKKRMatrix_kokkos.cpp + +buildKKRMatrixTest: buildKKRMatrixTest.cpp $(COEFICIENTS) \ + buildKKRMatrix_original.o makegij_c.o setgij.o \ + buildKKRMatrix_nrel_ns2.o makegij_new.o plglmax_new.o \ + buildKKRMatrix_kokkos.o \ + CBLAS_target $(KOKKOS_LINK_DEPENDS) $(KOKKOS_CPP_DEPENDS) + $(CXX) $(INC_PATH) -o buildKKRMatrixTest buildKKRMatrixTest.cpp \ + buildKKRMatrix_original.o buildKKRMatrix_nrel_ns2.o \ + buildKKRMatrix_kokkos.o makegij_c.o setgij.o \ + $(COEFICIENTS) $(ADD_LIBS) $(KOKKOS_LDFLAGS) $(KOKKOS_LIBS) $(LIBS) + +CBLAS_target: + cd ../../../CBLAS && $(MAKE) alllib diff --git a/src/Test/buildKKRMatrixTest_kokkos/Real.hpp b/src/Test/buildKKRMatrixTest_kokkos/Real.hpp new file mode 100644 index 000000000..643e907d8 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_kokkos/Real.hpp @@ -0,0 +1,54 @@ +#ifndef LSMS_REAL_H +#define LSMS_REAL_H + +#include +#include + +typedef double Real; + +#include "TypeTraits.hpp" + +#ifndef __CUDACC__ +#include + + +template<> +class TypeTraits +{ +// static hid_t hdf5_type; +public: + inline static MPI_Datatype mpiType(void) {return MPI_DOUBLE;} +// inline static hid_t hdf5Type(void) { return hdf5_type;} + inline static hid_t hdf5Type(void) { return H5T_NATIVE_DOUBLE;} +}; +// hid_t TypeTraits::hdf5_type = H5Tcopy(H5T_NATIVE_DOUBLE); + +template<> +class TypeTraits +{ +// static hid_t hdf5_type; +public: + inline static MPI_Datatype mpiType(void) {return MPI_INT;} + inline static hid_t hdf5Type(void) { return H5T_NATIVE_INT;} +}; +// hid_t TypeTraits::hdf5_type = H5Tcopy(H5T_NATIVE_INT); + +template<> +class TypeTraits +{ +// static hid_t hdf5_type; +public: + inline static MPI_Datatype mpiType(void) {return MPI_CHAR;} + inline static hid_t hdf5Type(void) { return H5T_NATIVE_CHAR;} +}; +// hid_t TypeTraits::hdf5_type = H5Tcopy(H5T_NATIVE_CHAR); + +#endif + +#endif + + +#ifndef M_PI +#define M_PI 3.14159265358979323846264338327950288419716939937510 +#endif + diff --git a/src/Test/buildKKRMatrixTest_kokkos/TestStructures.hpp b/src/Test/buildKKRMatrixTest_kokkos/TestStructures.hpp new file mode 100644 index 000000000..ba22446bc --- /dev/null +++ b/src/Test/buildKKRMatrixTest_kokkos/TestStructures.hpp @@ -0,0 +1,90 @@ +#ifndef BKKRM_TEST_STRUCTURES_HPP +#define BKKRM_TEST_STRUCTURES_HPP + +#include "Misc/Indices.hpp" +/* +// from Misc/Indices.hpp +class AngularMomentumIndices { +public: + int lmax,ndlj,ndlm; + std::vector lofk,mofk,lofj,mofj; + + void init(int _lmax) + { + lmax=_lmax; + ndlj=(lmax+1)*(lmax+1); + ndlm=((lmax+1)*(lmax+2))/2; + mofk.resize(ndlj); lofk.resize(ndlj); + mofj.resize(ndlm); lofj.resize(ndlm); + int j=0; + int k=0; + for(int l=0; l<=lmax; l++) + { + for(int m=0; m<=l; m++) + { + lofj[j]=l; + mofj[j++]=m; + } + for(int m=-l; m<=l; m++) + { + + lofk[k]=l; + mofk[k]=m; + // printf("k,l,m: %d %d %d, lofk,mofk:%d %d\n",k,l,m,lofk[k],mofk[k]); + k++; + } + } + // printf("k=%d\n",k); + } +}; +*/ + +// only the needed parts from Main/SystemParameters.hpp: +class LSMSGlobals { +public: + void setIstop(const char *c){strncpy(istop,c,32); for(int i=strlen(c); i<32; i++) istop[i]=' ';} + bool checkIstop(const char *c){return (strncmp(istop,c,32)==0);} +// ... + int iprint; +// ... + char istop[32]; +}; + +class LSMSSystemParameters { +public: +// ... + int nrel_rel; + int n_spin_cant; +// ... + int maxlmax; + LSMSGlobals global; + AngularMomentumIndices angularMomentumIndices; +// ... +}; + +class LocalTypeInfo { +public: +// ... + int lDimTmatStore; + Matrix tmatStore; +// ... +}; + + +// only the needed parts from SingleSite/AtomData.hpp: +class AtomData { +public: +// ... +// Local Interaction Zone + int numLIZ; + std::vector LIZGlobalIdx, LIZStoreIdx, LIZlmax; + int nrmat; // sum (LIZlmax+1)^2 + std::vector LIZDist; + Matrix LIZPos; +// ... +// General Data + int lmax,kkrsz; +// ... +}; + +#endif diff --git a/src/Test/buildKKRMatrixTest_kokkos/TypeTraits.hpp b/src/Test/buildKKRMatrixTest_kokkos/TypeTraits.hpp new file mode 100644 index 000000000..702fdf9a9 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_kokkos/TypeTraits.hpp @@ -0,0 +1,7 @@ +#ifndef LSMS_TYPE_TRAITS_H +#define LSMS_TYPE_TRAITS_H + +template +class TypeTraits; + +#endif diff --git a/src/Test/buildKKRMatrixTest_kokkos/associatedLegendreFunction.cpp b/src/Test/buildKKRMatrixTest_kokkos/associatedLegendreFunction.cpp new file mode 100644 index 000000000..043749ff4 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_kokkos/associatedLegendreFunction.cpp @@ -0,0 +1,29 @@ +// routines to calculate the associated Legendre functions P_{lm} needed to calculate +// spherical harmonics +// This also provides the coeficients c_{lm} to calculate spherical harmonics: +// Y_{lm}(\theta, \phi) = c_{lm} P_{lm}(\cos\theta) e^{im\phi} +// +// The new routine calculates normalized versions of the Legendre polynomials +// such that +// Y_{lm}(\theta, \phi) = \sqrt{1/2} \bar{P}_{lm}(\cos\theta) e^{im\phi} +// +// i.e. c_{lm} = 1 +// + +#include +#include "associatedLegendreFunction.hpp" + +extern "C" { +void plm_normalized_(int *lmax, double *x, double *plm) +{ + associatedLegendreFunctionNormalized(*x, *lmax, plm); +} + +void ylm_coefficients_(int *lmax, double *clm) +{ + for(int i=0; i<((*lmax) +1)*((*lmax) +2)/2; i++) + clm[i]=1.0; + // clm[i]=std::sqrt(0.5); +} +} + diff --git a/src/Test/buildKKRMatrixTest_kokkos/associatedLegendreFunction.hpp b/src/Test/buildKKRMatrixTest_kokkos/associatedLegendreFunction.hpp new file mode 100644 index 000000000..a59abb069 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_kokkos/associatedLegendreFunction.hpp @@ -0,0 +1,90 @@ +// calculate the associated Legendre Function +// P_{lm}(x) = \sqrt{2 (2l+1)\frac{(l-m)!}{(l+m)!}} x^m \frac{d^m}{dx^m} P_l(x) +// where P_l(x) is the Legendre Polynomial of degree l +// +#ifndef ASSOCIATED_LEGENDRE_FUNCTIONS_HPP +#define ASSOCIATED_LEGENDRE_FUNCTIONS_HPP +#include + +// for the normalized associated Legendre functions \bar{P}_{lm} +// such that the spherical harmonics are: +// Y_lm(\theta, \phi) = \bar{P}_{lm}(\cos \theta) e^{i m \phi} +// use the recursion relation: +// P_{00}(x) = \sqrt{1/4\pi} +// +// i.e \bar{P}_{lm}=\sqrt{\frac{(2l+1)(l-m)!}{4\pi(l+m)!}} P_{lm} +// +// Plm is a 1-d array that will contain all the values of P_{lm}(x) from P_{00} to P_{l_{max} l_{max}} +// the index into this array is Plm[l*(l+1)/2 + m] +// + +inline int plmIdx(int l, int m) +{ return l*(l+1)/2+m; } + +template // R has to be real data type (default double) +void associatedLegendreFunctionNormalized(R x, int lmax, R *Plm) +{ + const R pi = std::acos(-R(1)); + // y = \sqrt{1-x^2} + R y = std::sqrt(R(1)-x*x); + // initialize the first entry + // Plm[0]=std::sqrt(R(1)/(R(2)*pi)); + Plm[0]=std::sqrt(R(1)/(R(4)*pi)); + + if(lmax<1) return; + + for(int m=1; m<=lmax; m++) + { + // \bar{P}_{mm} = - \sqrt{\frac{2m+1}{2m}} y \bar{P}_{m-1, m-1} + Plm[plmIdx(m,m)] = - std::sqrt(R(2*m+1)/R(2*m)) * y * Plm[plmIdx(m-1,m-1)]; + // \bar{P}_{mm-1} = \sqrt{2 m + 1} x \bar{P}_{m-1, m-1} + Plm[plmIdx(m,m-1)] = std::sqrt(R(2*m+1)) * x * Plm[plmIdx(m-1,m-1)]; + } + + for(int m=0; m // R has to be real data type (default double) +void associatedLegendreFunction(R x, int lmax, R *Plm) +{ + // y = \sqrt{1-x^2} + R y = std::sqrt(R(1)-x*x); + // initialize the first entry + Plm[0]=R(1); + if(lmax<1) return; + Plm[1]=x; + Plm[2]=-y; + for(int m=2; m +#include +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" + +#include + +#include "TestStructures.hpp" +#include "Misc/Coeficients.hpp" + +#include "LIZ_pos.h" + +SphericalHarmonicsCoeficients sphericalHarmonicsCoeficients; +GauntCoeficients gauntCoeficients; +IFactors iFactors; + +void buildKKRMatrix_orig(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, + Complex energy, Complex prel, Matrix &m); +void buildKKRMatrix_nrel_ns2(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, + Complex energy, Complex prel, Matrix &m); +void buildKKRMatrix_kokkos(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, + Complex energy, Complex prel, Matrix &m); + +const double cphot=274.072; +const double c2inv=1.0/(cphot*cphot); + +void set_tmat(Complex energy,Matrix &tmat) +{ + energy=std::complex(-0.2,0.1); + + for(int i=0; i<32; i++) + for(int j=0; j<32; j++) + tmat(i,j)=0.0; + +// spin up +// l=0 + tmat(0,0)=std::complex( 2.72989453e-01, 4.75691304e-02); +// l=1 + tmat(1,1)=std::complex(-1.53433276e-02, 9.50739941e-03); + tmat(3,3)=tmat(2,2)=tmat(1,1); +// l=2 + tmat(4,4)=std::complex(-1.23189965e-02, 1.45766627e-02); + tmat(8,8)=tmat(7,7)=tmat(6,6)=tmat(5,5)=tmat(4,4); +// l=3 + tmat(9,9)=std::complex( 1.53919816e-05,-1.07135429e-04); + tmat(15,15)=tmat(14,14)=tmat(13,13)=tmat(12,12)=tmat(11,11)=tmat(10,10)=tmat(9,9); +// spin down +// l=0 + tmat(16,16)=std::complex( 4.51280708e-01, 2.16447659e-02); +// l=1 + tmat(17,17)=std::complex(-3.04540765e-02, 1.86224585e-02); + tmat(19,19)=tmat(18,18)=tmat(17,17); +// l=2 + tmat(20,20)=std::complex(-1.00226432e-02, 1.24349804e-02); + tmat(24,24)=tmat(23,23)=tmat(22,22)=tmat(21,21)=tmat(20,20); +// l=3 + tmat(25,25)=std::complex( 1.49731043e-05,-1.06213516e-04); + tmat(31,31)=tmat(30,30)=tmat(29,29)=tmat(28,28)=tmat(27,27)=tmat(26,26)=tmat(25,25); +} + +void set_atom(AtomData &atom) +{ + atom.kkrsz=(atom.lmax+1)*(atom.lmax+1); + set_LIZ(atom); + atom.nrmat=0; + atom.LIZStoreIdx.resize(atom.numLIZ); + atom.LIZlmax.resize(atom.numLIZ); + for(int i=0; i tmat(32,32); + LSMSSystemParameters lsms; + LocalTypeInfo local; + AtomData atom; + Matrix m; + + atom.lmax=lsms.maxlmax=3; + lsms.global.iprint=0; + lsms.global.setIstop("main"); + lsms.nrel_rel=0; + lsms.n_spin_cant=2; + + lsms.angularMomentumIndices.init(2*lsms.maxlmax); + sphericalHarmonicsCoeficients.init(2*lsms.maxlmax); + gauntCoeficients.init(lsms,lsms.angularMomentumIndices,sphericalHarmonicsCoeficients); + iFactors.init(lsms,lsms.maxlmax); + + local.lDimTmatStore=32; + local.tmatStore.resize(local.lDimTmatStore*local.lDimTmatStore,1); + set_tmat(energy,tmat); + for(int i=0; i<32*32; i++) + local.tmatStore(i,0)=tmat[i]; + Complex prel=std::sqrt(energy*(1.0+energy*c2inv)); + + set_atom(atom); + + m.resize(atom.nrmat*lsms.n_spin_cant,atom.nrmat*lsms.n_spin_cant); + + if(argc<2) + { + printf("Usage: buildKKRMatrixTest c|n|o [loop_count]\n"); + printf(" c - compare old and new construction results\n"); + printf(" n - time new matrix construction\n"); + printf(" o - time old matrix construction\n"); + exit(0); + } + + + Kokkos::initialize(); + + double t0, t1; + if(argc>1 && *argv[1]=='c') + { + Matrix m1; + printf("Comparing matrices\n"); + m1.resize(atom.nrmat*lsms.n_spin_cant,atom.nrmat*lsms.n_spin_cant); + // printf("Running new version "); + t0 = omp_get_wtime(); + buildKKRMatrix_kokkos(lsms, local, atom, energy, prel,m); + t1 = omp_get_wtime(); + printf("Running new version "); + printf(" time: %lf seconds.\nRunning old version ", t1-t0); + t0 = omp_get_wtime(); + buildKKRMatrix_orig(lsms, local, atom, energy, prel,m1); + t1 = omp_get_wtime(); + printf(" time: %lf seconds.\n", t1-t0); + // buildKKRMatrix_nrel_ns2(lsms, local, atom, energy, prel,m2); + for(int i=0; i1.0e-10) printf("m(i,j)!=m1(i,j): i=%d, j=%d, m(i,j)=(%lg,%lg), m1(i,j)=(%lg,%lg) d=%lg rd=%lg\n", + i,j,std::real(m(i,j)),std::imag(m(i,j)),std::real(m1(i,j)),std::imag(m1(i,j)), + d,rd); + } + } else if(argc>1 && *argv[1]=='C') + { + Matrix m1,m2; + printf("Comparing matrices\n"); + m1.resize(atom.nrmat*lsms.n_spin_cant,atom.nrmat*lsms.n_spin_cant); + m2.resize(atom.nrmat*lsms.n_spin_cant,atom.nrmat*lsms.n_spin_cant); + // buildKKRMatrix_kokkos(lsms, local, atom, energy, prel,m); + buildKKRMatrix_orig(lsms, local, atom, energy, prel,m1); + buildKKRMatrix_nrel_ns2(lsms, local, atom, energy, prel,m2); + for(int i=0; i1.0e-10) printf("m1(i,j)!=m2(i,j): i=%d, j=%d, m1(i,j)=(%lg,%lg), m2(i,j)=(%lg,%lg) d=%lg rd=%lg\n", + i,j,std::real(m1(i,j)),std::imag(m1(i,j)),std::real(m2(i,j)),std::imag(m2(i,j)), + d,rd); + } + } else if(argc>1 && *argv[1]=='n') { + int loop_count=10; + if(argc>2) loop_count=atoi(argv[2]); + printf("Timing new matrix construction\n loop_count=%d\n",loop_count); + for(int i=0; i2) loop_count=atoi(argv[2]); + printf("Timing old matrix construction\n loop_count=%d\n",loop_count); + for(int i=0; i +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" + +#include + +#include "TestStructures.hpp" +#include "Misc/Coeficients.hpp" + +#include "associatedLegendreFunction.hpp" + +#include + + #define INLINE_PLGLMAX + #define INLINE_MAKEGIJ + + +#include "makegij_new.cpp" + +void buildKKRMatrix_kokkos(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, + Complex energy, Complex prel, Matrix &mIn) +{ +// make sure that lsms.n_spin_cant == 2! + if(lsms.n_spin_cant!=2) + { + printf("lsms.n_spin_cant!=2 in buildKKRMatrix_nrel_ns2\n"); + exit(1); + } + + + + int lmax=lsms.maxlmax; + int kkrsz=(lmax+1)*(lmax+1); + int kkrsz_ns=2*kkrsz; // lsms.n_spin_cant + int nrmat_ns=2*atom.nrmat; // lsms.n_spin_cant + // int nrst,ncst; + + + Kokkos::View**,Kokkos::LayoutLeft> m((Kokkos::complex*) &mIn(0,0),mIn.l_dim(),mIn.n_col()); + Kokkos::View**,Kokkos::LayoutLeft> tmatStore((Kokkos::complex*) &local.tmatStore(0,0),local.tmatStore.l_dim(),local.tmatStore.n_col()); + Kokkos::View LIZPos(&atom.LIZPos(0,0), atom.LIZPos.l_dim(), atom.LIZPos.n_col()); + + // Complex *gij = new Complex[kkrsz*kkrsz]; + // Real *sinmp = new Real[2*lmax+1]; + // Real *cosmp = new Real[2*lmax+1]; + // Real *plm = new Real[lsms.angularMomentumIndices.ndlm]; + // Complex *hfn = new Complex[2*lmax+1]; + // Complex *dlm = new Complex[lsms.angularMomentumIndices.ndlj]; + // Complex *bgij = new Complex[4*kkrsz*kkrsz]; // lsms.n_spin_cant^2 + Kokkos::View **,Kokkos::LayoutLeft> tmat_n("tmat_n",kkrsz*kkrsz*4, atom.numLIZ); // lsms.n_spin_cant^2 + Kokkos::View nsts("nsts",atom.numLIZ+1); + + const Kokkos::complex cmone=-1.0; + const Kokkos::complex czero=0.0; + + Real pi4=4.0*2.0*std::asin(1.0); + Kokkos::View lofk(&lsms.angularMomentumIndices.lofk[0],lsms.angularMomentumIndices.lofk.size()); + Kokkos::View mofk(&lsms.angularMomentumIndices.mofk[0],lsms.angularMomentumIndices.mofk.size()); + + Kokkos::View *> ilp1((Kokkos::complex *)&iFactors.ilp1[0], iFactors.ilp1.size()); + Kokkos::View **, Kokkos::LayoutLeft> illp((Kokkos::complex *)&iFactors.illp(0,0), iFactors.illp.l_dim(), iFactors.illp.n_col()); + + Kokkos::View LIZStoreIdx(&atom.LIZStoreIdx[0],atom.LIZStoreIdx.size()); + + for(int i=0; i::member_type member_type; + Kokkos::parallel_for(Kokkos::TeamPolicy<>(atom.numLIZ, Kokkos::AUTO), + KOKKOS_LAMBDA(const member_type & teamMember){ + int ir1=teamMember.league_rank(); + int kkr1=(atom.LIZlmax[ir1]+1)*(atom.LIZlmax[ir1]+1); + int kkr1_ns=2*kkr1; // lsms.n_spin_cant; + + // ncst=0; +// build local t_mat: +// the dimension is (2*kkr1,2*kkr1) +// if kkrsz == kkr1 then tmat_n=tmatStore + if(kkrsz==kkr1) + { + // clbas_zcopy(kkrsz*kkrsz*4,&local.tmatStore(0,atom.LIZStoreIdx[ir1]),1,&tmat_n[0],1); + for(int i=0; i hfn[2*lmax+1]; + Kokkos::complex gij[kkrsz*kkrsz]; + double sinmp[2*lmax+1]; + double cosmp[2*lmax+1]; + double plm[lsms.angularMomentumIndices.ndlm]; + Kokkos::complex dlm[lsms.angularMomentumIndices.ndlj]; + Kokkos::complex bgij[4*kkrsz*kkrsz]; + + int kkr2=(atom.LIZlmax[ir2]+1)*(atom.LIZlmax[ir2]+1); + int kkr2_ns=2*kkr2; // *lsms.n_spin_cant; + if(ir1!=ir2) + { + rij[0]=LIZPos(0,ir1)-LIZPos(0,ir2); + rij[1]=LIZPos(1,ir1)-LIZPos(1,ir2); + rij[2]=LIZPos(2,ir1)-LIZPos(2,ir2); + +#ifndef INLINE_MAKEGIJ + makegij_new(atom.LIZlmax[ir1], kkr1, atom.LIZlmax[ir2], kkr2, + lsms.maxlmax, kkrsz, lsms.angularMomentumIndices.ndlj, lsms.angularMomentumIndices.ndlm, + prel, rij, sinmp, cosmp, + &sphericalHarmonicsCoeficients.clm[0], plm, gauntCoeficients.cgnt, + &lsms.angularMomentumIndices.lofk[0], &lsms.angularMomentumIndices.mofk[0], + &iFactors.ilp1[0], iFactors.illp, + hfn, dlm, + gij, pi4); + +#else +{ + int lmaxi=atom.LIZlmax[ir1]; + int kkri=kkr1; + int lmaxj=atom.LIZlmax[ir2]; + int kkrj=kkr2; + int lmax=lsms.maxlmax; + int ndlj=lsms.angularMomentumIndices.ndlj; + int ndlm=lsms.angularMomentumIndices.ndlm; + // Real *clm=&sphericalHarmonicsCoeficients.clm[0]; + + + const Kokkos::complex sqrtm1=Kokkos::complex(0.0,1.0); + const Real ptol=1.0e-6; + + int lend=lmaxi+lmaxj; + + Real rmag=std::sqrt(rij[0]*rij[0]+rij[1]*rij[1]+rij[2]*rij[2]); + + if(std::abs(prel)==0.0) + { +// if prel is zero then we calculate Gij for multipole Coulomb interaction. + hfn[0]=1.0/rmag; + for(int l=1; l<=lend; l++) + { + hfn[l]=sqrtm1*(2.0*l-1)*hfn[l-1]/rmag; + } + } else { + Kokkos::complex z=prel*rmag; + hfn[0]=-sqrtm1; + hfn[1]=-Kokkos::complex(1.0)-sqrtm1/z; + for(int l=1; l0) + { + for(int m=1; m<=lend; m++) + { + // \bar{P}_{mm} = - \sqrt{\frac{2m+1}{2m}} y \bar{P}_{m-1, m-1} + plm[plmIdx(m,m)] = - std::sqrt(Real(2*m+1)/Real(2*m)) * y * plm[plmIdx(m-1,m-1)]; + // \bar{P}_{mm-1} = \sqrt{2 m + 1} x \bar{P}_{m-1, m-1} + plm[plmIdx(m,m-1)] = std::sqrt(Real(2*m+1)) * costheta * plm[plmIdx(m-1,m-1)]; + } + + for(int m=0; m(costheta, lend, plm); +#endif + + int ndlm_local=(lend+1)*(lend+2)/2; + if(ndlm_local>ndlm) + { + printf("MAKEGIJ:: ndlm incorrect!\n"); + printf("ndlm=%d\nndlm_local=%d\n",ndlm,ndlm_local); + exit(1); + } + // not needed for normalized associated Legendre functions +// for(int j=0;jptol) + { + cosmp[1]=rij[0]/pmag; + sinmp[1]=rij[1]/pmag; + } else { + cosmp[1]=0.0; + sinmp[1]=0.0; + } + for(int m=2; m<=lend; m++) + { + cosmp[m]=cosmp[m-1]*cosmp[1]-sinmp[m-1]*sinmp[1]; + sinmp[m]=sinmp[m-1]*cosmp[1]+cosmp[m-1]*sinmp[1]; + } + + int j=0; + for(int l=0; l<=lend; l++) + { + int ll=l*(l+1); + j=ll; + ll=ll/2; + Real m1m=1.0; + dlm[j]= hfn[l]*plm[ll]; + for(int m=1; m<=l; m++) + { + m1m=-m1m; + Kokkos::complex fac=plm[ll+m]*std::complex(cosmp[m],sinmp[m]); + dlm[j-m]= hfn[l]*m1m*fac; + dlm[j+m]= hfn[l]*Kokkos::conj(fac); + } + } + for(int i=0; i=llow;l3-=2) + { + int j=l3*(l3+1)+m3; + gij[lm2+lm1*kkri] = gij[lm2+lm1*kkri]+ gauntCoeficients.cgnt(l3/2,lm1,lm2)*dlm[j]; + } + gij[lm2+lm1*kkri]=pi4*illp(lm2,lm1)*gij[lm2+lm1*kkri]; + } + } +} +#endif + + Kokkos::complex psq=prel*prel; + +// for(int i=0; i +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" + +#include "TestStructures.hpp" +#include "Misc/Coeficients.hpp" + +#include "associatedLegendreFunction.hpp" + +#include + +// #define USE_ALLOCA +// #define INLINE_PLGLMAX + #define INLINE_MAKEGIJ + +void plglmax_new(int lmax, Real x, Real*plm); + +#include "makegij_new.cpp" + +void buildKKRMatrix_nrel_ns2(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, + Complex energy, Complex prel, Matrix &m) +{ +// make sure that lsms.n_spin_cant == 2! + if(lsms.n_spin_cant!=2) + { + printf("lsms.n_spin_cant!=2 in buildKKRMatrix_nrel_ns2\n"); + exit(1); + } + + Real rij[3]; + + int lmax=lsms.maxlmax; + int kkrsz=(lmax+1)*(lmax+1); + int kkrsz_ns=2*kkrsz; // lsms.n_spin_cant + int nrmat_ns=2*atom.nrmat; // lsms.n_spin_cant + int nrst,ncst; + +#ifdef USE_ALLOCA + Complex *gij=(Complex *)alloca(kkrsz*kkrsz*sizeof(Complex)); + Real *sinmp = (Real *)alloca(sizeof(Real)*(2*lmax+1)); + Real *cosmp = (Real *)alloca(sizeof(Real)*(2*lmax+1)); + Real *plm = (Real *)alloca(sizeof(Real)*lsms.angularMomentumIndices.ndlm); + Complex *hfn = (Complex *)alloca(sizeof(Complex)*(2*lmax+1)); + Complex *dlm = (Complex *)alloca(sizeof(Complex)*lsms.angularMomentumIndices.ndlj); + Complex *bgij = (Complex *)alloca(sizeof(Complex)*4*kkrsz*kkrsz); + Complex *tmat_n = (Complex *)alloca(sizeof(Complex)*atom.kkrsz*atom.kkrsz*4); +#else + Complex *gij = new Complex[kkrsz*kkrsz]; + Real *sinmp = new Real[2*lmax+1]; + Real *cosmp = new Real[2*lmax+1]; + Real *plm = new Real[lsms.angularMomentumIndices.ndlm]; + Complex *hfn = new Complex[2*lmax+1]; + Complex *dlm = new Complex[lsms.angularMomentumIndices.ndlj]; + Complex *bgij = new Complex[4*kkrsz*kkrsz]; + Complex *tmat_n = new Complex[atom.kkrsz*atom.kkrsz*4]; +#endif + + const Complex cmone=-1.0; + const Complex czero=0.0; + + Real pi4=4.0*2.0*std::asin(1.0); + + for(int i=0; i(0.0,1.0); + const Real ptol=1.0e-6; + + int lend=lmaxi+lmaxj; + + Real rmag=std::sqrt(rij[0]*rij[0]+rij[1]*rij[1]+rij[2]*rij[2]); + + if(std::abs(prel)==0.0) + { +// if prel is zero then we calculate Gij for multipole Coulomb interaction. + hfn[0]=1.0/rmag; + for(int l=1; l<=lend; l++) + { + hfn[l]=sqrtm1*(2.0*l-1)*hfn[l-1]/rmag; + } + } else { + Complex z=prel*rmag; + hfn[0]=-sqrtm1; + hfn[1]=-1.0-sqrtm1/z; + for(int l=1; l0) + { + for(int m=1; m<=lend; m++) + { + // \bar{P}_{mm} = - \sqrt{\frac{2m+1}{2m}} y \bar{P}_{m-1, m-1} + plm[plmIdx(m,m)] = - std::sqrt(Real(2*m+1)/Real(2*m)) * y * plm[plmIdx(m-1,m-1)]; + // \bar{P}_{mm-1} = \sqrt{2 m + 1} x \bar{P}_{m-1, m-1} + plm[plmIdx(m,m-1)] = std::sqrt(Real(2*m+1)) * costheta * plm[plmIdx(m-1,m-1)]; + } + + for(int m=0; m(costheta, lend, plm); +#endif + + int ndlm_local=(lend+1)*(lend+2)/2; + if(ndlm_local>ndlm) + { + printf("MAKEGIJ:: ndlm incorrect!\n"); + printf("ndlm=%d\nndlm_local=%d\n",ndlm,ndlm_local); + exit(1); + } +// for(int j=0;jptol) + { + cosmp[1]=rij[0]/pmag; + sinmp[1]=rij[1]/pmag; + } else { + cosmp[1]=0.0; + sinmp[1]=0.0; + } + for(int m=2; m<=lend; m++) + { + cosmp[m]=cosmp[m-1]*cosmp[1]-sinmp[m-1]*sinmp[1]; + sinmp[m]=sinmp[m-1]*cosmp[1]+cosmp[m-1]*sinmp[1]; + } + + int j=0; + for(int l=0; l<=lend; l++) + { + int ll=l*(l+1); + j=ll; + ll=ll/2; + Real m1m=1.0; + dlm[j]= hfn[l]*plm[ll]; + for(int m=1; m<=l; m++) + { + m1m=-m1m; + Complex fac=plm[ll+m]*std::complex(cosmp[m],sinmp[m]); + dlm[j-m]= hfn[l]*m1m*fac; + dlm[j+m]= hfn[l]*std::conj(fac); + } + } + for(int i=0; i=llow;l3-=2) + { + int j=l3*(l3+1)+m3; + gij[lm2+lm1*kkri] = gij[lm2+lm1*kkri]+ gauntCoeficients.cgnt(l3/2,lm1,lm2)*dlm[j]; + } + gij[lm2+lm1*kkri]=pi4*iFactors.illp(lm2,lm1)*gij[lm2+lm1*kkri]; + } + } +} +#endif + + Complex psq=prel*prel; + +// for(int i=0; i +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" + +#include "TestStructures.hpp" +#include "Misc/Coeficients.hpp" + +#include "associatedLegendreFunction.hpp" + +#include + +// #define USE_ALLOCA +#define INLINE_PLGLMAX +#define INLINE_MAKEGIJ + +void plglmax_new(int lmax, Real x, Real*plm); + +#include "makegij_new.cpp" + +void buildKKRMatrix_nrel_ns2(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, + Complex energy, Complex prel, Matrix &m) +{ +// make sure that lsms.n_spin_cant == 2! + if(lsms.n_spin_cant!=2) + { + printf("lsms.n_spin_cant!=2 in buildKKRMatrix_nrel_ns2\n"); + exit(1); + } + + Real rij[3]; + + int lmax=lsms.maxlmax; + int kkrsz=(lmax+1)*(lmax+1); + int kkrsz_ns=2*kkrsz; // lsms.n_spin_cant + int nrmat_ns=2*atom.nrmat; // lsms.n_spin_cant + int nrst,ncst; + +#ifdef USE_ALLOCA + Complex *gij=(Complex *)alloca(kkrsz*kkrsz*sizeof(Complex)); + Real *sinmp = (Real *)alloca(sizeof(Real)*(2*lmax+1)); + Real *cosmp = (Real *)alloca(sizeof(Real)*(2*lmax+1)); + Real *plm = (Real *)alloca(sizeof(Real)*lsms.angularMomentumIndices.ndlm); + Complex *hfn = (Complex *)alloca(sizeof(Complex)*(2*lmax+1)); + Complex *dlm = (Complex *)alloca(sizeof(Complex)*lsms.angularMomentumIndices.ndlj); + Complex *bgij = (Complex *)alloca(sizeof(Complex)*4*kkrsz*kkrsz); + Complex *tmat_n = (Complex *)alloca(sizeof(Complex)*atom.kkrsz*atom.kkrsz*4); +#else + Complex *gij = new Complex[kkrsz*kkrsz]; + Real *sinmp = new Real[2*lmax+1]; + Real *cosmp = new Real[2*lmax+1]; + Real *plm = new Real[lsms.angularMomentumIndices.ndlm]; + Complex *hfn = new Complex[2*lmax+1]; + Complex *dlm = new Complex[lsms.angularMomentumIndices.ndlj]; + Complex *bgij = new Complex[4*kkrsz*kkrsz]; + Complex *tmat_n = new Complex[atom.kkrsz*atom.kkrsz*4]; +#endif + + const Complex cmone=-1.0; + const Complex czero=0.0; + + Real pi4=4.0*2.0*std::asin(1.0); + + for(int i=0; i(0.0,1.0); + const Real ptol=1.0e-6; + + int lend=lmaxi+lmaxj; + + Real rmag=std::sqrt(rij[0]*rij[0]+rij[1]*rij[1]+rij[2]*rij[2]); + + if(std::abs(prel)==0.0) + { +// if prel is zero then we calculate Gij for multipole Coulomb interaction. + hfn[0]=1.0/rmag; + for(int l=1; l<=lend; l++) + { + hfn[l]=sqrtm1*(2.0*l-1)*hfn[l-1]/rmag; + } + } else { + Complex z=prel*rmag; + hfn[0]=-sqrtm1; + hfn[1]=-1.0-sqrtm1/z; + for(int l=1; l0) + { + for(int m=1; m<=lend; m++) + { + // \bar{P}_{mm} = - \sqrt{\frac{2m+1}{2m}} y \bar{P}_{m-1, m-1} + plm[plmIdx(m,m)] = - std::sqrt(Real(2*m+1)/Real(2*m)) * y * plm[plmIdx(m-1,m-1)]; + // \bar{P}_{mm-1} = \sqrt{2 m + 1} x \bar{P}_{m-1, m-1} + plm[plmIdx(m,m-1)] = std::sqrt(Real(2*m+1)) * costheta * plm[plmIdx(m-1,m-1)]; + } + + for(int m=0; m(costheta, lend, plm); +#endif + + int ndlm_local=(lend+1)*(lend+2)/2; + if(ndlm_local>ndlm) + { + printf("MAKEGIJ:: ndlm incorrect!\n"); + printf("ndlm=%d\nndlm_local=%d\n",ndlm,ndlm_local); + exit(1); + } + for(int j=0;jptol) + { + cosmp[1]=rij[0]/pmag; + sinmp[1]=rij[1]/pmag; + } else { + cosmp[1]=0.0; + sinmp[1]=0.0; + } + for(int m=2; m<=lend; m++) + { + cosmp[m]=cosmp[m-1]*cosmp[1]-sinmp[m-1]*sinmp[1]; + sinmp[m]=sinmp[m-1]*cosmp[1]+cosmp[m-1]*sinmp[1]; + } + + int j=0; + for(int l=0; l<=lend; l++) + { + int ll=l*(l+1); + j=ll; + ll=ll/2; + Real m1m=1.0; + dlm[j]= hfn[l]*plm[ll]; + for(int m=1; m<=l; m++) + { + m1m=-m1m; + Complex fac=plm[ll+m]*std::complex(cosmp[m],sinmp[m]); + dlm[j-m]= hfn[l]*m1m*fac; + dlm[j+m]= hfn[l]*std::conj(fac); + } + } + for(int i=0; i=llow;l3-=2) + { + int j=l3*(l3+1)+m3; + gij[lm2+lm1*kkri] = gij[lm2+lm1*kkri]+ gauntCoeficients.cgnt(l3/2,lm1,lm2)*dlm[j]; + } + gij[lm2+lm1*kkri]=pi4*iFactors.illp(lm2,lm1)*gij[lm2+lm1*kkri]; + } + } +} +#endif + + Complex psq=prel*prel; + +// for(int i=0; i +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" + +#include "TestStructures.hpp" +#include "Misc/Coeficients.hpp" + +#include + +#ifdef CRAYPAT +#include +#endif + +extern "C" +{ + void write_kkrmat_(Complex *a,int *n,int *lda,Complex *e); + + void makegij_(int *lmaxi,int *kkri,int *lmaxj,int *kkrj, + int *lmax,int *kkrsz,int *ndlj,int *ndlm, + Complex *prel,double *rij,double *sinmp,double *cosmp, + double *clm,double *plm,double *cgnt,int *lmax_cg,int *lofk,int *mofk, + Complex *ilp1,Complex *illp, + Complex *hfn,Complex *dlm,Complex *gij, + double *pi4,int *iprint,char *istop,int len_sitop); + + void setgij_(Complex *gij,Complex *bgij,int *kkr1,int *kkr1_ns,int *kkr2,int *kkr2_ns, + int *n_spin_cant,int *nrel_rel,Complex *psq,Complex *energy); +}; + +// #define SYNTHETIC_MATRIX +// #define WRITE_GIJ + +// #define USE_ALLOCA + +void buildKKRMatrix_orig(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, Complex energy, Complex prel, Matrix &m) +{ +#ifdef CRAYPAT +PAT_region_begin(1,"buildKKRMatrix init"); +#endif + Real rij[3]; + + int lmax=lsms.maxlmax; + int kkrsz=(lmax+1)*(lmax+1); + int kkrsz_ns=kkrsz*lsms.n_spin_cant; + int nrmat_ns=lsms.n_spin_cant*atom.nrmat; + int nrst,ncst; + +#ifdef USE_ALLOCA + Complex *gij=(Complex *)alloca(kkrsz*kkrsz*sizeof(Complex)); + Real *sinmp = (Real *)alloca(sizeof(Real)*(2*lmax+1)); + Real *cosmp = (Real *)alloca(sizeof(Real)*(2*lmax+1)); + Real *plm = (Real *)alloca(sizeof(Real)*lsms.angularMomentumIndices.ndlm); + Complex *hfn = (Complex *)alloca(sizeof(Complex)*(2*lmax+1)); + Complex *dlm = (Complex *)alloca(sizeof(Complex)*lsms.angularMomentumIndices.ndlj); + Complex *bgij = (Complex *)alloca(sizeof(Complex)*4*kkrsz*kkrsz); + Complex *tmat_n = (Complex *)alloca(sizeof(Complex)*atom.kkrsz*atom.kkrsz*4); +#else + Complex *gij = new Complex[kkrsz*kkrsz]; + Real *sinmp = new Real[2*lmax+1]; + Real *cosmp = new Real[2*lmax+1]; + Real *plm = new Real[lsms.angularMomentumIndices.ndlm]; + Complex *hfn = new Complex[2*lmax+1]; + Complex *dlm = new Complex[lsms.angularMomentumIndices.ndlj]; + Complex *bgij = new Complex[4*kkrsz*kkrsz]; + Complex *tmat_n = new Complex[atom.kkrsz*atom.kkrsz*4]; +#endif + + const Complex cmone=-1.0; + const Complex czero=0.0; + + Real pi4=4.0*2.0*std::asin(1.0); + + for(int i=0; i=1) + { + printf("first t Matrix:\n"); + for(int i=0; i Gij_full(nrmat_ns,nrmat_ns); + for(int i=0; i=0) + { + FILE *f1=fopen("kkrmat.out","w"); + FILE *f2=fopen("kkrmat.pattern","w"); + for(int i=0; i0 +// the algorithm follows +// +// David H. Bailey, Karthik Jeyabalan and Xiaoye S. Li +// "A Comparison of Three High-Precision Quadrature Schemes" +// Experimental Mathematics 14, 317-329 (2005). +// + +#include + +template // R is a real type e.g. double +void calculateGaussLegendrePoints(R *x, R *w, int n, R xLeft = -1.0, R xRight = +1.0) +{ + const R pi = std::acos(-R(1)); + + R Pk[n], PkMinus1[n], PkPlus1[n]; // the Legendre polynomials at points x[i] + R Ppn[n]; // derivative of P_n(x_i) + R dX[n]; // correction values for the Newton iteration + + R xHalfWidth = 0.5*(xRight - xLeft); + R xMidpoint = 0.5*(xRight+xLeft); + + // the x[i] are the roots of the nth degree Legendre Polynomial P_n(x) + // we search these using a Newton iteration with starting guess + // x[i] ~ cos(\pi (j - 1/4) / (n + 1/2)) + + for(int i=0; i lmax,kkrsz,ndlj,ndlm, + > prel,rij,sinmp,cosmp, + > clm,plm,cgnt,lmax_cg,lofk,mofk, + > ilp1,illp, + > hfn,dlm,gij, + > pi4,iprint,istop) +c ============================================================== +c + implicit none +c + character sname*32 + character istop*32 +c + integer lmaxi + integer lmaxj + integer lend + integer kkri + integer kkrj + integer lmax,lmax_cg + integer kkrsz + integer ndlj + integer ndlm,ndlm_local + integer lofk(ndlj) + integer mofk(ndlj) + integer l,ll + integer l1 + integer l2 + integer m + integer ma + integer m1 + integer m2 + integer lm1 + integer lm2 + integer l3,m3,llow + integer j + integer iprint +c + real*8 rij(3) + real*8 sinmp(0:lmaxi+lmaxj) + real*8 cosmp(0:lmaxi+lmaxj) + real*8 clm(ndlm) + real*8 plm(ndlm) +! original definition of cgnt in LSMS_1 +! real*8 cgnt(lmax+1,kkrsz,kkrsz) + real*8 cgnt(lmax_cg+1,(lmax_cg+1)**2,(lmax_cg+1)**2) + real*8 pi4 + real*8 rmag + real*8 pmag + real*8 costheta + real*8 m1m + real*8 ptol + real*8 zero + real*8 one +c + complex*16 prel + complex*16 ilp1(0:lmaxi+lmaxj) +! original definition of illp in LSMS_1 +! complex*16 illp(kkrsz,kkrsz) + complex*16 illp((lmax+1)**2,kkrsz) + complex*16 hfn(0:lmaxi+lmaxj) + complex*16 dlm(ndlj) + complex*16 gij(kkri,kkrj) + complex*16 z + complex*16 fac + complex*16 sqrtm1 + complex*16 czero + complex*16 cone +c + parameter (sqrtm1=(0.0d0,1.0d0)) + parameter (czero =(0.0d0,0.0d0)) + parameter (cone =(1.0d0,0.0d0)) + parameter (ptol =1.0d-06) + parameter (zero =0.0d0) + parameter (one =1.0d0) + parameter (sname ='makegij') +c +c ***************************************************************** +c +c +c ij l+1 m -> * +c D [E] = -i * sqrt(E) * h [sqrt(E)*R ] * Y [R ] +c L l ij l ij +c +c +c -l+1 m -> * +c = -i * sqrt(E) * h [sqrt(E)*R ] * Y [-R ] +c l ij l ij +c +c The extra factor (-1)^m removed by xgz July 97 from plm (plglmax_c.f) +c to make Ylm consistent with Numerical Recipes. +c +c m [ (2*l+1)*(l-|m|)!] m +c Y = sqrt[-----------------]*P [cos(theta)]*exp(i*m*phi) +c l [ 4*pi*(l+|m|)! ] l +c +c for m>=0 +c +c m m -m * +c Y [theta,phi] = (-1) Y [theta,phi] for m<0 +c l l +c +c -> -> -> +c R = R - R ==> [theta,phi] +c ij j i +c +c cos(theta)=Rij(3)/sqrt(Rij(1)**2+Rij(2)**2+Rij(3)**2) +c +c cos(phi) =Rij(1)/sqrt(Rij(1)**2+Rij(2)**2) +c +c m m +c Indexing: P : P(l*(l+1)/2+m+1) only +m are calculated +c l l +c +c m m +c Indexing: C : C(l*(l+1)/2+m+1) only +m are calculated +c l l +c +c m m +c Indexing: D : D(l*(l+1)+m+1) all m are calculated +c l l +c +c Now for the real space structure contant we have : +c +c ij l-l' L ij +c G (E) = 4*pi*i * SUM { C * D (E) } +c L,L' L" L',L" L" +c +c ***************************************************************** +c +c ================================================================= + if(lmax.lt.0) then + write(6,'('' makegij:: bad arguments: lmax='',i5)') lmax + call fstop(sname) + endif + lend=lmaxi+lmaxj +c ================================================================= +c calculate the hankel function.[dangerous code if z is close to 0] +c hankel function is hfn*exp(i*z)/z + rmag=sqrt(rij(1)*rij(1)+rij(2)*rij(2)+rij(3)*rij(3)) + if(rmag.lt.ptol) stop 'Error in makegij: rmag = 0.' + if(prel.eq.czero) then +c if prel is zero then we calculate Gij for multipole Coulomb interaction. + hfn(0)=cone/rmag + do l=1,lend + hfn(l)=sqrtm1*(2*l-1)*hfn(l-1)/rmag + enddo + else + z=prel*rmag + hfn(0)=-sqrtm1 + hfn(1)=-cone-sqrtm1/z + do l=1,lend-1 + hfn(l+1)=(2*l+1)*hfn(l)/z - hfn(l-1) + enddo +c ================================================================= +c l+1 +c hfn = -i *h (k*R )*sqrt(E) +c l ij +c ================================================================= + z=exp(sqrtm1*z)/rmag + do l=0,lend + hfn(l)=-hfn(l)*z*ilp1(l) + enddo + endif +c +c ================================================================= +c calculate p(l,m)'s............................................... + costheta=rij(3)/rmag +c ----------------------------------------------------------------- +! call plglmax(lend,costheta,plm) +! replace with normalized associated legendre functions: + call plm_normalized(lend,costheta,plm) +c ----------------------------------------------------------------- +c ================================================================= +c multiply be the normalization constant........................... + ndlm_local=(lend+1)*(lend+2)/2 + if(ndlm_local.gt.ndlm) then + write(6,'(''MAKEGIJ:: ndlm incorrect!'')') + write(6,*) 'ndlm=',ndlm + write(6,*) 'ndlm_local=',ndlm_local + call fstop(sname) + endif + do j=1,ndlm_local + plm(j)=clm(j)*plm(j) + enddo +c ================================================================= +c calculate cos(phi) and sin(phi) ................................. + pmag=sqrt(rij(1)*rij(1)+rij(2)*rij(2)) + cosmp(0)=one + sinmp(0)=zero + if(pmag.ge.ptol) then + cosmp(1)=rij(1)/pmag + sinmp(1)=rij(2)/pmag + else + cosmp(1)=zero + sinmp(1)=zero + endif + do m=2,lend + cosmp(m)=cosmp(m-1)*cosmp(1)-sinmp(m-1)*sinmp(1) + sinmp(m)=sinmp(m-1)*cosmp(1)+cosmp(m-1)*sinmp(1) + enddo +c + j=0 + do l=0,lend + ll=l*(l+1) + j=ll+1 + ll=ll/2+1 + m1m=one + dlm(j)= hfn(l)*plm(ll) + do m=1,l + m1m=-m1m + fac=plm(ll+m)*dcmplx(cosmp(m),sinmp(m)) + dlm(j-m)= hfn(l)*m1m*fac + dlm(j+m)= hfn(l)*conjg(fac) + enddo + enddo +c ================================================================= + if(iprint.ge.3) then + write(6,'(/)') + write(6,*) "Rij=",rij(1),rij(2),rij(3) + write(6,*) "cos(theta)=",costheta + write(6,'(/)') + write(6,'('' makegij:: l,m,dlm(l,m):'')') + do j=1,ndlj + write(6,'(2i3,2x,f10.5,1x,d16.8)') + > lofk(j),mofk(j),dlm(j) + enddo + write(6,*) "i, plm(i)" + do j=1,ndlm + write(6,*) j,plm(j) + end do + endif +c +c ================================================================ +c calculate g(R_ij)............................................... +c ---------------------------------------------------------------- +! call zeroout(gij,2*kkri*kkrj) + gij=0.0d0 +c ---------------------------------------------------------------- +c ================================================================ +c loop over l1,m1............................................ + do lm1=1,kkrj + l1=lofk(lm1) + m1=mofk(lm1) +c ============================================================= +c loop over l2,m2.............................................. + do lm2=1,kkri + l2=lofk(lm2) + m2=mofk(lm2) +c ========================================================== +c l2-l1 +c illp(lm2,lm1) = i +c +c perform sum over l3 with gaunt # ...................... +c ========================================================== + m3=m2-m1 + llow=max(abs(m3),abs(l1-l2)) + if(prel.eq.czero) llow=l1+l2 + do l3=l1+l2,llow,-2 + j=l3*(l3+1)+m3+1 + gij(lm2,lm1) = gij(lm2,lm1)+cgnt(l3/2+1,lm1,lm2)*dlm(j) + enddo + gij(lm2,lm1)=pi4*illp(lm2,lm1)*gij(lm2,lm1) + enddo + enddo +c +c ================================================================ +c printout if needed.............................................. + if(iprint.ge.3) then +c ============================================================= +c loop over l1,m1.............................................. + do lm1=1,kkrj + l1=lofk(lm1) + m1=mofk(lm1) +c ========================================================== +c loop over l2,m2........................................... + do lm2=1,kkri + l2=lofk(lm2) + m2=mofk(lm2) + write(6,'('' lm1,lm2,l1,m1,l2,m2:'',6i3,2d12.5)') + > lm1,lm2,l1,m1,l2,m2,gij(lm2,lm1) + enddo + enddo + endif +c ================================================================= + if (istop.eq.sname) then + call fstop(sname) + else + return + endif +c + end diff --git a/src/Test/buildKKRMatrixTest_kokkos/makegij_new.cpp b/src/Test/buildKKRMatrixTest_kokkos/makegij_new.cpp new file mode 100644 index 000000000..5241505d4 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_kokkos/makegij_new.cpp @@ -0,0 +1,242 @@ +#include +#include +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" +#include "Array3d.hpp" + + +// #define INLINE_PLGLMAX + +extern "C" +{ + void plglmax_(int *lend, Real*costheta, Real*plm); +} +// void plglmax_new(int lmax, Real x, Real*plm); + +// #include "plglmax_new.cpp" +#include "associatedLegendreFunction.hpp" + +inline void makegij_new(int lmaxi, int kkri, int lmaxj, int kkrj, + int lmax, int kkrsz, int ndlj, int ndlm, + Complex prel, Real *rij,Real *sinmp, Real *cosmp, + Real *clm, Real *plm, Array3d &cgnt, + int *lofk, int *mofk, + Complex *ilp1, Matrix &illp, + Complex *hfn, Complex *dlm, + Complex *gij, Real pi4) +{ + const Complex sqrtm1=std::complex(0.0,1.0); + const Real ptol=1.0e-6; +/* +c ***************************************************************** +c +c +c ij l+1 m -> * +c D [E] = -i * sqrt(E) * h [sqrt(E)*R ] * Y [R ] +c L l ij l ij +c +c +c -l+1 m -> * +c = -i * sqrt(E) * h [sqrt(E)*R ] * Y [-R ] +c l ij l ij +c +c The extra factor (-1)^m removed by xgz July 97 from plm (plglmax_c.f) +c to make Ylm consistent with Numerical Recipes. +c +c m [ (2*l+1)*(l-|m|)!] m +c Y = sqrt[-----------------]*P [cos(theta)]*exp(i*m*phi) +c l [ 4*pi*(l+|m|)! ] l +c +c for m>=0 +c +c m m -m * +c Y [theta,phi] = (-1) Y [theta,phi] for m<0 +c l l +c +c -> -> -> +c R = R - R ==> [theta,phi] +c ij j i +c +c cos(theta)=Rij(3)/sqrt(Rij(1)**2+Rij(2)**2+Rij(3)**2) +c +c cos(phi) =Rij(1)/sqrt(Rij(1)**2+Rij(2)**2) +c +c m m +c Indexing: P : P(l*(l+1)/2+m+1) only +m are calculated +c l l +c +c m m +c Indexing: C : C(l*(l+1)/2+m+1) only +m are calculated +c l l +c +c m m +c Indexing: D : D(l*(l+1)+m+1) all m are calculated +c l l +c +c Now for the real space structure contant we have : +c +c ij l-l' L ij +c G (E) = 4*pi*i * SUM { C * D (E) } +c L,L' L" L',L" L" +c +c ***************************************************************** +*/ + + int lend=lmaxi+lmaxj; +/* +c calculate the hankel function.[dangerous code if z is close to 0] +c hankel function is hfn*exp(i*z)/z +*/ + Real rmag=std::sqrt(rij[0]*rij[0]+rij[1]*rij[1]+rij[2]*rij[2]); +// if(rmag.lt.ptol) stop 'Error in makegij: rmag = 0.' + if(std::abs(prel)==0.0) + { +// if prel is zero then we calculate Gij for multipole Coulomb interaction. + hfn[0]=1.0/rmag; + for(int l=1; l<=lend; l++) + { + hfn[l]=sqrtm1*(2.0*l-1)*hfn[l-1]/rmag; + } + } else { + Complex z=prel*rmag; + hfn[0]=-sqrtm1; + hfn[1]=-1.0-sqrtm1/z; + for(int l=1; l0) + { + for(int m=1; m<=lend; m++) + { + // \bar{P}_{mm} = - \sqrt{\frac{2m+1}{2m}} y \bar{P}_{m-1, m-1} + plm[plmIdx(m,m)] = - std::sqrt(Real(2*m+1)/Real(2*m)) * y * plm[plmIdx(m-1,m-1)]; + // \bar{P}_{mm-1} = \sqrt{2 m + 1} x \bar{P}_{m-1, m-1} + plm[plmIdx(m,m-1)] = std::sqrt(Real(2*m+1)) * costheta * plm[plmIdx(m-1,m-1)]; + } + + for(int m=0; m(costheta, lend, plm); +#endif +// multiply be the normalization constant........................... + int ndlm_local=(lend+1)*(lend+2)/2; + if(ndlm_local>ndlm) + { + printf("MAKEGIJ:: ndlm incorrect!\n"); + printf("ndlm=%d\nndlm_local=%d\n",ndlm,ndlm_local); + exit(1); + } +// for(int j=0;jptol) + { + cosmp[1]=rij[0]/pmag; + sinmp[1]=rij[1]/pmag; + } else { + cosmp[1]=0.0; + sinmp[1]=0.0; + } + for(int m=2; m<=lend; m++) + { + cosmp[m]=cosmp[m-1]*cosmp[1]-sinmp[m-1]*sinmp[1]; + sinmp[m]=sinmp[m-1]*cosmp[1]+cosmp[m-1]*sinmp[1]; + } + + int j=0; + for(int l=0; l<=lend; l++) + { + int ll=l*(l+1); + j=ll; + ll=ll/2; + Real m1m=1.0; + dlm[j]= hfn[l]*plm[ll]; + for(int m=1; m<=l; m++) + { + m1m=-m1m; + Complex fac=plm[ll+m]*std::complex(cosmp[m],sinmp[m]); + dlm[j-m]= hfn[l]*m1m*fac; + dlm[j+m]= hfn[l]*std::conj(fac); + } + } + +// ================================================================ +// calculate g(R_ij)............................................... + for(int i=0; i=llow;l3-=2) + { + int j=l3*(l3+1)+m3; + gij[lm2+lm1*kkri] = gij[lm2+lm1*kkri]+cgnt(l3/2,lm1,lm2)*dlm[j]; + } + gij[lm2+lm1*kkri]=pi4*illp(lm2,lm1)*gij[lm2+lm1*kkri]; + } + } +} diff --git a/src/Test/buildKKRMatrixTest_kokkos/makegij_new.cpp_original b/src/Test/buildKKRMatrixTest_kokkos/makegij_new.cpp_original new file mode 100644 index 000000000..8b7a2e95e --- /dev/null +++ b/src/Test/buildKKRMatrixTest_kokkos/makegij_new.cpp_original @@ -0,0 +1,300 @@ +#include +#include +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" +#include "Array3d.hpp" + + +// #define INLINE_PLGLMAX + +extern "C" +{ + void plglmax_(int *lend, Real*costheta, Real*plm); +} +// void plglmax_new(int lmax, Real x, Real*plm); + +// #include "plglmax_new.cpp" +#include "associatedLegendreFunction.hpp" + +inline void makegij_new(int lmaxi, int kkri, int lmaxj, int kkrj, + int lmax, int kkrsz, int ndlj, int ndlm, + Complex prel, Real *rij,Real *sinmp, Real *cosmp, + Real *clm, Real *plm, Array3d &cgnt, + int *lofk, int *mofk, + Complex *ilp1, Matrix &illp, + Complex *hfn, Complex *dlm, + Complex *gij, Real pi4) +{ + const Complex sqrtm1=std::complex(0.0,1.0); + const Real ptol=1.0e-6; +/* +c ***************************************************************** +c +c +c ij l+1 m -> * +c D [E] = -i * sqrt(E) * h [sqrt(E)*R ] * Y [R ] +c L l ij l ij +c +c +c -l+1 m -> * +c = -i * sqrt(E) * h [sqrt(E)*R ] * Y [-R ] +c l ij l ij +c +c The extra factor (-1)^m removed by xgz July 97 from plm (plglmax_c.f) +c to make Ylm consistent with Numerical Recipes. +c +c m [ (2*l+1)*(l-|m|)!] m +c Y = sqrt[-----------------]*P [cos(theta)]*exp(i*m*phi) +c l [ 4*pi*(l+|m|)! ] l +c +c for m>=0 +c +c m m -m * +c Y [theta,phi] = (-1) Y [theta,phi] for m<0 +c l l +c +c -> -> -> +c R = R - R ==> [theta,phi] +c ij j i +c +c cos(theta)=Rij(3)/sqrt(Rij(1)**2+Rij(2)**2+Rij(3)**2) +c +c cos(phi) =Rij(1)/sqrt(Rij(1)**2+Rij(2)**2) +c +c m m +c Indexing: P : P(l*(l+1)/2+m+1) only +m are calculated +c l l +c +c m m +c Indexing: C : C(l*(l+1)/2+m+1) only +m are calculated +c l l +c +c m m +c Indexing: D : D(l*(l+1)+m+1) all m are calculated +c l l +c +c Now for the real space structure contant we have : +c +c ij l-l' L ij +c G (E) = 4*pi*i * SUM { C * D (E) } +c L,L' L" L',L" L" +c +c ***************************************************************** +*/ + + int lend=lmaxi+lmaxj; +/* +c calculate the hankel function.[dangerous code if z is close to 0] +c hankel function is hfn*exp(i*z)/z +*/ + Real rmag=std::sqrt(rij[0]*rij[0]+rij[1]*rij[1]+rij[2]*rij[2]); +// if(rmag.lt.ptol) stop 'Error in makegij: rmag = 0.' + if(std::abs(prel)==0.0) + { +// if prel is zero then we calculate Gij for multipole Coulomb interaction. + hfn[0]=1.0/rmag; + for(int l=1; l<=lend; l++) + { + hfn[l]=sqrtm1*(2.0*l-1)*hfn[l-1]/rmag; + } + } else { + Complex z=prel*rmag; + hfn[0]=-sqrtm1; + hfn[1]=-1.0-sqrtm1/z; + for(int l=1; l(lend, costheta, plm); +#endif +// multiply be the normalization constant........................... + int ndlm_local=(lend+1)*(lend+2)/2; + if(ndlm_local>ndlm) + { + printf("MAKEGIJ:: ndlm incorrect!\n"); + printf("ndlm=%d\nndlm_local=%d\n",ndlm,ndlm_local); + exit(1); + } + for(int j=0;jptol) + { + cosmp[1]=rij[0]/pmag; + sinmp[1]=rij[1]/pmag; + } else { + cosmp[1]=0.0; + sinmp[1]=0.0; + } + for(int m=2; m<=lend; m++) + { + cosmp[m]=cosmp[m-1]*cosmp[1]-sinmp[m-1]*sinmp[1]; + sinmp[m]=sinmp[m-1]*cosmp[1]+cosmp[m-1]*sinmp[1]; + } + + int j=0; + for(int l=0; l<=lend; l++) + { + int ll=l*(l+1); + j=ll; + ll=ll/2; + Real m1m=1.0; + dlm[j]= hfn[l]*plm[ll]; + for(int m=1; m<=l; m++) + { + m1m=-m1m; + Complex fac=plm[ll+m]*std::complex(cosmp[m],sinmp[m]); + dlm[j-m]= hfn[l]*m1m*fac; + dlm[j+m]= hfn[l]*std::conj(fac); + } + } + +// ================================================================ +// calculate g(R_ij)............................................... + for(int i=0; i=llow;l3-=2) + { + int j=l3*(l3+1)+m3; + gij[lm2+lm1*kkri] = gij[lm2+lm1*kkri]+cgnt(l3/2,lm1,lm2)*dlm[j]; + } + gij[lm2+lm1*kkri]=pi4*illp(lm2,lm1)*gij[lm2+lm1*kkri]; + } + } +} diff --git a/src/Test/buildKKRMatrixTest_kokkos/plglmax_new.cpp b/src/Test/buildKKRMatrixTest_kokkos/plglmax_new.cpp new file mode 100644 index 000000000..03bf14e17 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_kokkos/plglmax_new.cpp @@ -0,0 +1,131 @@ +#include "Real.hpp" +/* subroutine plglmax(lmax,x,plm) +c **************************************************************** +c Associated Legendre function.................................... +c Calclates all the p(l,m)'s up to lmax........................... +c based on the formulae given in "Numerical Recipes" pages 180-183 +c (Equations 6.6.7, 6.6.8 and 6.6.9............................... +c W. H. Press, B. P. Flannery, S A Teukolsky and W. T. Vetterling. +c Cambridge Univ Press 1986....................................... +c **************************************************************** +c +c Inputs: lmax integer scalar, max l for Plm +c x real*8 scalar, argument of Plm(x) +c Returns: plm real*8 array of ((lmax+1)*(lmax+2)/2), Plm(x) +c +*/ +#define LMAX_GE_2 + +inline void plglmax_new(int lmax, Real x, Real*plm) +{ + const Real tol=1.0e-12; +// removed checks from original plglmax.f + + if((1.0-std::abs(x)) +#include "Real.hpp" + +// mpicxx -I ../../../include/ plglmax_test.cpp plglmax_new.cpp plglmax.o zeroout.o -lgfortran + + +extern "C" +{ + void plglmax_(int *lend, Real*costheta, Real*plm); +} +void plglmax_new(int lmax, Real x, Real*plm); + +int main(int argc, char *argv[]) +{ + Real x; + Real *plm, *plm_new; + int lmax; + + lmax = atoi(argv[1]); + x = atof(argv[2]); + plm=(Real *)malloc((lmax+1)*(lmax+2)*sizeof(Real)/2); + plm_new=(Real *)malloc((lmax+1)*(lmax+2)*sizeof(Real)/2); + + plglmax_new(lmax,x,plm_new); + plglmax_(&lmax,&x,plm); + + printf("i plm[i] plm_new[i] |plm-plm_new|\n\n"); + + for(int i=0; i<(lmax+1)*(lmax+2)/2; i++) + printf("%d %lg %lg %lg\n",i,plm[i],plm_new[i],std::abs(plm[i]-plm_new[i])); + + + free(plm); free(plm_new); + return 0; +} diff --git a/src/Test/buildKKRMatrixTest_kokkos/quadrature.cpp b/src/Test/buildKKRMatrixTest_kokkos/quadrature.cpp new file mode 100644 index 000000000..85da9db6f --- /dev/null +++ b/src/Test/buildKKRMatrixTest_kokkos/quadrature.cpp @@ -0,0 +1,14 @@ + +#include "Real.hpp" +#include "calculateGaussLegendrePoints.hpp" + +extern "C" +{ + void gauss_legendre_points_(double *x1, double *x2, double *x, double *w, int *n); +} + +void gauss_legendre_points_(double *x1, double *x2, double *x, double *w, int *n) +{ + calculateGaussLegendrePoints(x, w, *n, *x1, *x2); +} + diff --git a/src/Test/buildKKRMatrixTest_kokkos/setgij.f b/src/Test/buildKKRMatrixTest_kokkos/setgij.f new file mode 100755 index 000000000..91ca46b2f --- /dev/null +++ b/src/Test/buildKKRMatrixTest_kokkos/setgij.f @@ -0,0 +1,58 @@ + subroutine setgij(gij, bgij,kkr1, kkr1_ns,kkr2,kkr2_ns, + > n_spin_cant,nrel_rel,psq,ce) +c ============================================================== +c + implicit none +c + character istop*32 + character sname*32 + integer im,in + integer i,j + integer is + integer kkr1 + integer kkr1_ns + integer kkr2 + integer kkr2_ns + integer n_spin_cant + integer nrel_rel +c + complex*16 gij(kkr1,kkr2) + complex*16 bgij(kkr1_ns,kkr2_ns) + complex*16 fac + complex*16 psq + complex*16 ce + + parameter (sname='setgij') +c + call zeroout(bgij,2*kkr1_ns*kkr2_ns) +c + if(nrel_rel.eq.0) then + do is=1,n_spin_cant + im=(is-1)*kkr1 + in=(is-1)*kkr2 + do i=1,kkr1 + do j=1,kkr2 + bgij(im+i,in+j)=gij(i,j) + end do + end do + end do + else +! if(kkr1.ne.kkr2) then +! write(6,*) 'SETGIJ: nonsquare rel. Gij not yet supported' +! call fstop(sname) +! end if +! call relmtrx(gij,bgij,lmax) + + write(6,*) 'SETGIJ: relativity currently not supported' + call fstop(sname) +c$$$ call relmtrx(gij,bgij,kkr1,kkr2) +c$$$ fac=psq/ce +c$$$ do i=1,kkr1_ns +c$$$ do j=1,kkr2_ns +c$$$ bgij(i,j)=fac*bgij(i,j) +c$$$ end do +c$$$ end do + end if +c + return + end diff --git a/src/Test/buildKKRMatrixTest_openacc/LIZ_pos.h b/src/Test/buildKKRMatrixTest_openacc/LIZ_pos.h new file mode 100644 index 000000000..b328fd463 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_openacc/LIZ_pos.h @@ -0,0 +1,344 @@ +void set_LIZ(AtomData & atom) +{ + atom.numLIZ=113; + atom.LIZPos.resize(3,atom.numLIZ); + atom.LIZPos(0,0)=0; + atom.LIZPos(1,0)=0; + atom.LIZPos(2,0)=0; + atom.LIZPos(0,1)=2.71; + atom.LIZPos(1,1)=-2.71; + atom.LIZPos(2,1)=2.71; + atom.LIZPos(0,2)=2.71; + atom.LIZPos(1,2)=-2.71; + atom.LIZPos(2,2)=-2.71; + atom.LIZPos(0,3)=-2.71; + atom.LIZPos(1,3)=-2.71; + atom.LIZPos(2,3)=-2.71; + atom.LIZPos(0,4)=-2.71; + atom.LIZPos(1,4)=2.71; + atom.LIZPos(2,4)=2.71; + atom.LIZPos(0,5)=-2.71; + atom.LIZPos(1,5)=2.71; + atom.LIZPos(2,5)=-2.71; + atom.LIZPos(0,6)=-2.71; + atom.LIZPos(1,6)=-2.71; + atom.LIZPos(2,6)=2.71; + atom.LIZPos(0,7)=2.71; + atom.LIZPos(1,7)=2.71; + atom.LIZPos(2,7)=2.71; + atom.LIZPos(0,8)=2.71; + atom.LIZPos(1,8)=2.71; + atom.LIZPos(2,8)=-2.71; + atom.LIZPos(0,9)=0; + atom.LIZPos(1,9)=-5.42; + atom.LIZPos(2,9)=0; + atom.LIZPos(0,10)=5.42; + atom.LIZPos(1,10)=0; + atom.LIZPos(2,10)=0; + atom.LIZPos(0,11)=0; + atom.LIZPos(1,11)=0; + atom.LIZPos(2,11)=-5.42; + atom.LIZPos(0,12)=0; + atom.LIZPos(1,12)=0; + atom.LIZPos(2,12)=5.42; + atom.LIZPos(0,13)=-5.42; + atom.LIZPos(1,13)=0; + atom.LIZPos(2,13)=0; + atom.LIZPos(0,14)=0; + atom.LIZPos(1,14)=5.42; + atom.LIZPos(2,14)=0; + atom.LIZPos(0,15)=-5.42; + atom.LIZPos(1,15)=0; + atom.LIZPos(2,15)=-5.42; + atom.LIZPos(0,16)=-5.42; + atom.LIZPos(1,16)=-5.42; + atom.LIZPos(2,16)=0; + atom.LIZPos(0,17)=0; + atom.LIZPos(1,17)=-5.42; + atom.LIZPos(2,17)=-5.42; + atom.LIZPos(0,18)=-5.42; + atom.LIZPos(1,18)=0; + atom.LIZPos(2,18)=5.42; + atom.LIZPos(0,19)=-5.42; + atom.LIZPos(1,19)=5.42; + atom.LIZPos(2,19)=0; + atom.LIZPos(0,20)=5.42; + atom.LIZPos(1,20)=-5.42; + atom.LIZPos(2,20)=0; + atom.LIZPos(0,21)=5.42; + atom.LIZPos(1,21)=0; + atom.LIZPos(2,21)=-5.42; + atom.LIZPos(0,22)=0; + atom.LIZPos(1,22)=-5.42; + atom.LIZPos(2,22)=5.42; + atom.LIZPos(0,23)=0; + atom.LIZPos(1,23)=5.42; + atom.LIZPos(2,23)=5.42; + atom.LIZPos(0,24)=5.42; + atom.LIZPos(1,24)=0; + atom.LIZPos(2,24)=5.42; + atom.LIZPos(0,25)=0; + atom.LIZPos(1,25)=5.42; + atom.LIZPos(2,25)=-5.42; + atom.LIZPos(0,26)=5.42; + atom.LIZPos(1,26)=5.42; + atom.LIZPos(2,26)=0; + atom.LIZPos(0,27)=8.13; + atom.LIZPos(1,27)=-2.71; + atom.LIZPos(2,27)=2.71; + atom.LIZPos(0,28)=-2.71; + atom.LIZPos(1,28)=8.13; + atom.LIZPos(2,28)=-2.71; + atom.LIZPos(0,29)=2.71; + atom.LIZPos(1,29)=8.13; + atom.LIZPos(2,29)=-2.71; + atom.LIZPos(0,30)=2.71; + atom.LIZPos(1,30)=8.13; + atom.LIZPos(2,30)=2.71; + atom.LIZPos(0,31)=2.71; + atom.LIZPos(1,31)=2.71; + atom.LIZPos(2,31)=8.13; + atom.LIZPos(0,32)=2.71; + atom.LIZPos(1,32)=2.71; + atom.LIZPos(2,32)=-8.13; + atom.LIZPos(0,33)=-2.71; + atom.LIZPos(1,33)=8.13; + atom.LIZPos(2,33)=2.71; + atom.LIZPos(0,34)=8.13; + atom.LIZPos(1,34)=-2.71; + atom.LIZPos(2,34)=-2.71; + atom.LIZPos(0,35)=2.71; + atom.LIZPos(1,35)=-8.13; + atom.LIZPos(2,35)=-2.71; + atom.LIZPos(0,36)=2.71; + atom.LIZPos(1,36)=-8.13; + atom.LIZPos(2,36)=2.71; + atom.LIZPos(0,37)=2.71; + atom.LIZPos(1,37)=-2.71; + atom.LIZPos(2,37)=8.13; + atom.LIZPos(0,38)=2.71; + atom.LIZPos(1,38)=-2.71; + atom.LIZPos(2,38)=-8.13; + atom.LIZPos(0,39)=-2.71; + atom.LIZPos(1,39)=2.71; + atom.LIZPos(2,39)=8.13; + atom.LIZPos(0,40)=-2.71; + atom.LIZPos(1,40)=2.71; + atom.LIZPos(2,40)=-8.13; + atom.LIZPos(0,41)=-8.13; + atom.LIZPos(1,41)=-2.71; + atom.LIZPos(2,41)=-2.71; + atom.LIZPos(0,42)=-8.13; + atom.LIZPos(1,42)=-2.71; + atom.LIZPos(2,42)=2.71; + atom.LIZPos(0,43)=-8.13; + atom.LIZPos(1,43)=2.71; + atom.LIZPos(2,43)=-2.71; + atom.LIZPos(0,44)=-8.13; + atom.LIZPos(1,44)=2.71; + atom.LIZPos(2,44)=2.71; + atom.LIZPos(0,45)=-2.71; + atom.LIZPos(1,45)=-2.71; + atom.LIZPos(2,45)=8.13; + atom.LIZPos(0,46)=8.13; + atom.LIZPos(1,46)=2.71; + atom.LIZPos(2,46)=2.71; + atom.LIZPos(0,47)=8.13; + atom.LIZPos(1,47)=2.71; + atom.LIZPos(2,47)=-2.71; + atom.LIZPos(0,48)=-2.71; + atom.LIZPos(1,48)=-8.13; + atom.LIZPos(2,48)=-2.71; + atom.LIZPos(0,49)=-2.71; + atom.LIZPos(1,49)=-8.13; + atom.LIZPos(2,49)=2.71; + atom.LIZPos(0,50)=-2.71; + atom.LIZPos(1,50)=-2.71; + atom.LIZPos(2,50)=-8.13; + atom.LIZPos(0,51)=-5.42; + atom.LIZPos(1,51)=5.42; + atom.LIZPos(2,51)=-5.42; + atom.LIZPos(0,52)=5.42; + atom.LIZPos(1,52)=5.42; + atom.LIZPos(2,52)=5.42; + atom.LIZPos(0,53)=5.42; + atom.LIZPos(1,53)=5.42; + atom.LIZPos(2,53)=-5.42; + atom.LIZPos(0,54)=-5.42; + atom.LIZPos(1,54)=-5.42; + atom.LIZPos(2,54)=-5.42; + atom.LIZPos(0,55)=-5.42; + atom.LIZPos(1,55)=5.42; + atom.LIZPos(2,55)=5.42; + atom.LIZPos(0,56)=5.42; + atom.LIZPos(1,56)=-5.42; + atom.LIZPos(2,56)=5.42; + atom.LIZPos(0,57)=5.42; + atom.LIZPos(1,57)=-5.42; + atom.LIZPos(2,57)=-5.42; + atom.LIZPos(0,58)=-5.42; + atom.LIZPos(1,58)=-5.42; + atom.LIZPos(2,58)=5.42; + atom.LIZPos(0,59)=10.84; + atom.LIZPos(1,59)=0; + atom.LIZPos(2,59)=0; + atom.LIZPos(0,60)=0; + atom.LIZPos(1,60)=0; + atom.LIZPos(2,60)=10.84; + atom.LIZPos(0,61)=-10.84; + atom.LIZPos(1,61)=0; + atom.LIZPos(2,61)=0; + atom.LIZPos(0,62)=0; + atom.LIZPos(1,62)=0; + atom.LIZPos(2,62)=-10.84; + atom.LIZPos(0,63)=0; + atom.LIZPos(1,63)=-10.84; + atom.LIZPos(2,63)=0; + atom.LIZPos(0,64)=0; + atom.LIZPos(1,64)=10.84; + atom.LIZPos(2,64)=0; + atom.LIZPos(0,65)=8.13; + atom.LIZPos(1,65)=2.71; + atom.LIZPos(2,65)=8.13; + atom.LIZPos(0,66)=8.13; + atom.LIZPos(1,66)=-8.13; + atom.LIZPos(2,66)=2.71; + atom.LIZPos(0,67)=8.13; + atom.LIZPos(1,67)=-2.71; + atom.LIZPos(2,67)=-8.13; + atom.LIZPos(0,68)=8.13; + atom.LIZPos(1,68)=-8.13; + atom.LIZPos(2,68)=-2.71; + atom.LIZPos(0,69)=8.13; + atom.LIZPos(1,69)=8.13; + atom.LIZPos(2,69)=-2.71; + atom.LIZPos(0,70)=8.13; + atom.LIZPos(1,70)=2.71; + atom.LIZPos(2,70)=-8.13; + atom.LIZPos(0,71)=8.13; + atom.LIZPos(1,71)=8.13; + atom.LIZPos(2,71)=2.71; + atom.LIZPos(0,72)=8.13; + atom.LIZPos(1,72)=-2.71; + atom.LIZPos(2,72)=8.13; + atom.LIZPos(0,73)=-8.13; + atom.LIZPos(1,73)=-8.13; + atom.LIZPos(2,73)=-2.71; + atom.LIZPos(0,74)=2.71; + atom.LIZPos(1,74)=8.13; + atom.LIZPos(2,74)=8.13; + atom.LIZPos(0,75)=2.71; + atom.LIZPos(1,75)=-8.13; + atom.LIZPos(2,75)=-8.13; + atom.LIZPos(0,76)=-8.13; + atom.LIZPos(1,76)=8.13; + atom.LIZPos(2,76)=-2.71; + atom.LIZPos(0,77)=-8.13; + atom.LIZPos(1,77)=8.13; + atom.LIZPos(2,77)=2.71; + atom.LIZPos(0,78)=-2.71; + atom.LIZPos(1,78)=-8.13; + atom.LIZPos(2,78)=-8.13; + atom.LIZPos(0,79)=-8.13; + atom.LIZPos(1,79)=2.71; + atom.LIZPos(2,79)=8.13; + atom.LIZPos(0,80)=-2.71; + atom.LIZPos(1,80)=-8.13; + atom.LIZPos(2,80)=8.13; + atom.LIZPos(0,81)=-2.71; + atom.LIZPos(1,81)=8.13; + atom.LIZPos(2,81)=-8.13; + atom.LIZPos(0,82)=-2.71; + atom.LIZPos(1,82)=8.13; + atom.LIZPos(2,82)=8.13; + atom.LIZPos(0,83)=-8.13; + atom.LIZPos(1,83)=2.71; + atom.LIZPos(2,83)=-8.13; + atom.LIZPos(0,84)=-8.13; + atom.LIZPos(1,84)=-2.71; + atom.LIZPos(2,84)=8.13; + atom.LIZPos(0,85)=-8.13; + atom.LIZPos(1,85)=-2.71; + atom.LIZPos(2,85)=-8.13; + atom.LIZPos(0,86)=2.71; + atom.LIZPos(1,86)=-8.13; + atom.LIZPos(2,86)=8.13; + atom.LIZPos(0,87)=-8.13; + atom.LIZPos(1,87)=-8.13; + atom.LIZPos(2,87)=2.71; + atom.LIZPos(0,88)=2.71; + atom.LIZPos(1,88)=8.13; + atom.LIZPos(2,88)=-8.13; + atom.LIZPos(0,89)=-10.84; + atom.LIZPos(1,89)=-5.42; + atom.LIZPos(2,89)=0; + atom.LIZPos(0,90)=10.84; + atom.LIZPos(1,90)=5.42; + atom.LIZPos(2,90)=0; + atom.LIZPos(0,91)=5.42; + atom.LIZPos(1,91)=10.84; + atom.LIZPos(2,91)=0; + atom.LIZPos(0,92)=-10.84; + atom.LIZPos(1,92)=0; + atom.LIZPos(2,92)=-5.42; + atom.LIZPos(0,93)=5.42; + atom.LIZPos(1,93)=0; + atom.LIZPos(2,93)=10.84; + atom.LIZPos(0,94)=10.84; + atom.LIZPos(1,94)=-5.42; + atom.LIZPos(2,94)=0; + atom.LIZPos(0,95)=-10.84; + atom.LIZPos(1,95)=0; + atom.LIZPos(2,95)=5.42; + atom.LIZPos(0,96)=10.84; + atom.LIZPos(1,96)=0; + atom.LIZPos(2,96)=-5.42; + atom.LIZPos(0,97)=10.84; + atom.LIZPos(1,97)=0; + atom.LIZPos(2,97)=5.42; + atom.LIZPos(0,98)=-10.84; + atom.LIZPos(1,98)=5.42; + atom.LIZPos(2,98)=0; + atom.LIZPos(0,99)=-5.42; + atom.LIZPos(1,99)=-10.84; + atom.LIZPos(2,99)=0; + atom.LIZPos(0,100)=5.42; + atom.LIZPos(1,100)=0; + atom.LIZPos(2,100)=-10.84; + atom.LIZPos(0,101)=-5.42; + atom.LIZPos(1,101)=0; + atom.LIZPos(2,101)=-10.84; + atom.LIZPos(0,102)=-5.42; + atom.LIZPos(1,102)=0; + atom.LIZPos(2,102)=10.84; + atom.LIZPos(0,103)=-5.42; + atom.LIZPos(1,103)=10.84; + atom.LIZPos(2,103)=0; + atom.LIZPos(0,104)=0; + atom.LIZPos(1,104)=-10.84; + atom.LIZPos(2,104)=-5.42; + atom.LIZPos(0,105)=5.42; + atom.LIZPos(1,105)=-10.84; + atom.LIZPos(2,105)=0; + atom.LIZPos(0,106)=0; + atom.LIZPos(1,106)=-10.84; + atom.LIZPos(2,106)=5.42; + atom.LIZPos(0,107)=0; + atom.LIZPos(1,107)=10.84; + atom.LIZPos(2,107)=5.42; + atom.LIZPos(0,108)=0; + atom.LIZPos(1,108)=10.84; + atom.LIZPos(2,108)=-5.42; + atom.LIZPos(0,109)=0; + atom.LIZPos(1,109)=5.42; + atom.LIZPos(2,109)=10.84; + atom.LIZPos(0,110)=0; + atom.LIZPos(1,110)=-5.42; + atom.LIZPos(2,110)=-10.84; + atom.LIZPos(0,111)=0; + atom.LIZPos(1,111)=-5.42; + atom.LIZPos(2,111)=10.84; + atom.LIZPos(0,112)=0; + atom.LIZPos(1,112)=5.42; + atom.LIZPos(2,112)=-10.84; +} diff --git a/src/Test/buildKKRMatrixTest_openacc/Makefile b/src/Test/buildKKRMatrixTest_openacc/Makefile new file mode 100644 index 000000000..0691f8bed --- /dev/null +++ b/src/Test/buildKKRMatrixTest_openacc/Makefile @@ -0,0 +1,85 @@ +export XLF_LIB = /sw/summitdev/xl/20170606-beta/xlf/16.1.0/lib + +export TOP_DIR = $(shell pwd)/../../.. +export INC_PATH = +export LIBS := -L$(OLCF_CUDA_ROOT)/lib64 -lgfortran -L$(OLCF_ESSL_ROOT)/lib64 -lessl -L$(XLF_LIB) -lxlf90_r -lxlfmath -lxl -lxlopt -Wl,-rpath=$(XLF_LIB) + +#include $(TOP_DIR)/architecture.h +#include arch-minsky-gnu +include arch-minsky-pgi + +export INC_PATH += -I$(TOP_DIR)/include -I$(TOP_DIR)/src -I$(TOP_DIR)/CBLAS/include -I${TOP_DIR}/include +export MISC = $(TOP_DIR)/src/Misc + +COEFICIENTS = cgaunt_c.o ifacts_c.o quadrature.o fstop.o zeroout.o \ + gaunt.o plglmax.o associatedLegendreFunction.o + +all: buildKKRMatrixTest-acc + +clean: + rm -f *.o buildKKRMatrixTest + cd ../../../CBLAS && $(MAKE) clean + +cgaunt_c.o: $(MISC)/cgaunt_c.f + $(F77) -c $(MISC)/cgaunt_c.f +ifacts_c.o: $(MISC)/ifacts_c.f + $(F77) -c $(MISC)/ifacts_c.f +#gauleg.o: $(MISC)/gauleg.f +# $(F77) -c $(MISC)/gauleg.f +quadrature.o: quadrature.cpp + $(CXX) -c quadrature.cpp +plglmax.o: $(MISC)/plglmax.f + $(F77) -c $(MISC)/plglmax.f +associatedLegendreFunction.o: associatedLegendreFunction.cpp associatedLegendreFunction.hpp + $(CXX) -c associatedLegendreFunction.cpp +fstop.o: $(MISC)/fstop.f + $(F77) -c $(MISC)/fstop.f +zeroout.o: $(MISC)/zeroout.f + $(F77) -c $(MISC)/zeroout.f +gaunt.o: $(MISC)/gaunt.f + $(F77) -c $(MISC)/gaunt.f + +makegij_c.o: makegij_c.f + $(F77) -c makegij_c.f +setgij.o: setgij.f + $(F77) -c setgij.f + +makegij_new.o: makegij_new.cpp + $(CXX) $(INC_PATH) -c makegij_new.cpp +plglmax_new.o: plglmax_new.cpp + $(CXX) $(INC_PATH) -c plglmax_new.cpp + +quadrature.o: quadrature.cpp + $(CXX) $(INC_PATH) -c quadrature.cpp + +associatedLegendreFunction.o: associatedLegendreFunction.cpp associatedLegendreFunction.hpp + $(CXX) -c associatedLegendreFunction.cpp + +buildKKRMatrix_original.o: buildKKRMatrix_original.cpp + $(CXX) $(INC_PATH) -c buildKKRMatrix_original.cpp +buildKKRMatrix_nrel_ns2.o: buildKKRMatrix_nrel_ns2.cpp + $(CXX) $(INC_PATH) -c buildKKRMatrix_nrel_ns2.cpp +kkrmat_acc-mix.o: kkrmat_acc-mix.cpp + #$(CXX) $(INC_PATH) -ta=tesla:cuda8.0,managed,fastmath,flushz -Minfo=accel -c kkrmat_acc.cpp + $(CXX) $(INC_PATH) -c kkrmat_acc-mix.cpp + +c_kkrmat.o: c_kkrmat.c + #$(CXX) $(INC_PATH) -ta=tesla:cuda8.0,managed,fastmath,flushz -Minfo=accel -c c_kkrmat.cpp + #$(CC) $(INC_PATH) -c99 -Minfo=accel -ta=tesla:cuda8.0,fastmath,flushz -c c_kkrmat.c + $(CC) $(INC_PATH) -c99 -Minfo=accel -ta=tesla:cc60,cuda8.0,fastmath,flushz,safecache -c c_kkrmat.c + +buildKKRMatrixTest-acc: buildKKRMatrixTest.cpp $(COEFICIENTS) \ + buildKKRMatrix_original.o makegij_c.o setgij.o \ + buildKKRMatrix_nrel_ns2.o \ + kkrmat_acc-mix.o c_kkrmat.o makegij_new.o plglmax_new.o \ + CBLAS_target + $(CXX) $(INC_PATH) -mp -ta=tesla:cc60,cuda8.0,flushz,fastmath,safecache -Minfo=accel \ + -o buildKKRMatrixTest-acc buildKKRMatrixTest.cpp \ + buildKKRMatrix_original.o buildKKRMatrix_nrel_ns2.o kkrmat_acc-mix.o c_kkrmat.o \ + makegij_c.o setgij.o \ + $(COEFICIENTS) $(ADD_LIBS) $(LIBS) + #$(CXX) $(INC_PATH) \ + #$(CXX) $(INC_PATH) -ta=tesla:cuda8.0,fastmath,flushz -Minfo=accel \ + +CBLAS_target: + cd ../../../CBLAS && $(MAKE) alllib diff --git a/src/Test/buildKKRMatrixTest_openacc/Real.hpp b/src/Test/buildKKRMatrixTest_openacc/Real.hpp new file mode 100644 index 000000000..643e907d8 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_openacc/Real.hpp @@ -0,0 +1,54 @@ +#ifndef LSMS_REAL_H +#define LSMS_REAL_H + +#include +#include + +typedef double Real; + +#include "TypeTraits.hpp" + +#ifndef __CUDACC__ +#include + + +template<> +class TypeTraits +{ +// static hid_t hdf5_type; +public: + inline static MPI_Datatype mpiType(void) {return MPI_DOUBLE;} +// inline static hid_t hdf5Type(void) { return hdf5_type;} + inline static hid_t hdf5Type(void) { return H5T_NATIVE_DOUBLE;} +}; +// hid_t TypeTraits::hdf5_type = H5Tcopy(H5T_NATIVE_DOUBLE); + +template<> +class TypeTraits +{ +// static hid_t hdf5_type; +public: + inline static MPI_Datatype mpiType(void) {return MPI_INT;} + inline static hid_t hdf5Type(void) { return H5T_NATIVE_INT;} +}; +// hid_t TypeTraits::hdf5_type = H5Tcopy(H5T_NATIVE_INT); + +template<> +class TypeTraits +{ +// static hid_t hdf5_type; +public: + inline static MPI_Datatype mpiType(void) {return MPI_CHAR;} + inline static hid_t hdf5Type(void) { return H5T_NATIVE_CHAR;} +}; +// hid_t TypeTraits::hdf5_type = H5Tcopy(H5T_NATIVE_CHAR); + +#endif + +#endif + + +#ifndef M_PI +#define M_PI 3.14159265358979323846264338327950288419716939937510 +#endif + diff --git a/src/Test/buildKKRMatrixTest_openacc/TestStructures.hpp b/src/Test/buildKKRMatrixTest_openacc/TestStructures.hpp new file mode 100644 index 000000000..ba22446bc --- /dev/null +++ b/src/Test/buildKKRMatrixTest_openacc/TestStructures.hpp @@ -0,0 +1,90 @@ +#ifndef BKKRM_TEST_STRUCTURES_HPP +#define BKKRM_TEST_STRUCTURES_HPP + +#include "Misc/Indices.hpp" +/* +// from Misc/Indices.hpp +class AngularMomentumIndices { +public: + int lmax,ndlj,ndlm; + std::vector lofk,mofk,lofj,mofj; + + void init(int _lmax) + { + lmax=_lmax; + ndlj=(lmax+1)*(lmax+1); + ndlm=((lmax+1)*(lmax+2))/2; + mofk.resize(ndlj); lofk.resize(ndlj); + mofj.resize(ndlm); lofj.resize(ndlm); + int j=0; + int k=0; + for(int l=0; l<=lmax; l++) + { + for(int m=0; m<=l; m++) + { + lofj[j]=l; + mofj[j++]=m; + } + for(int m=-l; m<=l; m++) + { + + lofk[k]=l; + mofk[k]=m; + // printf("k,l,m: %d %d %d, lofk,mofk:%d %d\n",k,l,m,lofk[k],mofk[k]); + k++; + } + } + // printf("k=%d\n",k); + } +}; +*/ + +// only the needed parts from Main/SystemParameters.hpp: +class LSMSGlobals { +public: + void setIstop(const char *c){strncpy(istop,c,32); for(int i=strlen(c); i<32; i++) istop[i]=' ';} + bool checkIstop(const char *c){return (strncmp(istop,c,32)==0);} +// ... + int iprint; +// ... + char istop[32]; +}; + +class LSMSSystemParameters { +public: +// ... + int nrel_rel; + int n_spin_cant; +// ... + int maxlmax; + LSMSGlobals global; + AngularMomentumIndices angularMomentumIndices; +// ... +}; + +class LocalTypeInfo { +public: +// ... + int lDimTmatStore; + Matrix tmatStore; +// ... +}; + + +// only the needed parts from SingleSite/AtomData.hpp: +class AtomData { +public: +// ... +// Local Interaction Zone + int numLIZ; + std::vector LIZGlobalIdx, LIZStoreIdx, LIZlmax; + int nrmat; // sum (LIZlmax+1)^2 + std::vector LIZDist; + Matrix LIZPos; +// ... +// General Data + int lmax,kkrsz; +// ... +}; + +#endif diff --git a/src/Test/buildKKRMatrixTest_openacc/TypeTraits.hpp b/src/Test/buildKKRMatrixTest_openacc/TypeTraits.hpp new file mode 100644 index 000000000..702fdf9a9 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_openacc/TypeTraits.hpp @@ -0,0 +1,7 @@ +#ifndef LSMS_TYPE_TRAITS_H +#define LSMS_TYPE_TRAITS_H + +template +class TypeTraits; + +#endif diff --git a/src/Test/buildKKRMatrixTest_openacc/arch-minsky-pgi b/src/Test/buildKKRMatrixTest_openacc/arch-minsky-pgi new file mode 100644 index 000000000..3465003f0 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_openacc/arch-minsky-pgi @@ -0,0 +1,30 @@ +export USE_OPENMP=1 +# export USE_ACCELERATOR = -DACCELERATOR_CUDA_C -DBUILDKKRMATRIX_GPU +export USE_ACCELERATOR = -DACCELERATOR_CUDA_C + +export USE_LIBXC=1 + +export LIBS += +export ADD_LIBS += -L$(TOP_DIR)/CBLAS/lib -lcblas_LINUX $(FPMPI_POST_LINK_OPTS) $(CRAY_CUDA_POST_LINK_OPTS) -lcublas -pgf90libs +# export ADD_LIBS += -L$(TOP_DIR)/CBLAS/lib -lcblas_LINUX $(FPMPI_POST_LINK_OPTS) -L$(CULA_LIB_PATH_64) $(CRAY_CUDA_POST_LINK_OPTS) -lcublas -lcula_core -lcula_lapack -lcula_lapack_fortran + +#export INC_PATH += -I $(TOP_DIR)/CBLAS/include -I $(HDF5_INCLUDE_OPTS) + +export ADDITIONAL_TARGETS = CBLAS_target + +export BOOST_ROOT=$(TOP_DIR) + +# export CUDA_CXX=nvcc -arch=sm_35 $(CRAY_CUDA_INCLUDE_OPTS) $(USE_ACCELERATOR) -Xcompiler -fopenmp + +ifdef USE_OPENMP +export CXX=mpic++ -g -std=c++11 -I$(BOOST_ROOT) $(USE_ACCELERATOR) $(OPT_DEFINES) -mp +export CC=mpicc -g $(USE_ACCELERATOR) $(OPT_DEFINES) -mp +export F77=mpifort -g $(USE_ACCELERATOR) -mp +export CUDA_CXX=nvcc -arch=sm_35 $(CRAY_CUDA_INCLUDE_OPTS) $(USE_ACCELERATOR) -Xcompiler -mp +else +export CXX=g++ -g -std=c++11 -I$(BOOST_ROOT) $(USE_ACCELERATOR) $(OPT_DEFINES) +export CC=gcc -g $(USE_ACCELERATOR) $(OPT_DEFINES) +export F77=gfortran -g $(USE_ACCELERATOR) +export CUDA_CXX=nvcc -arch=sm_35 $(CRAY_CUDA_INCLUDE_OPTS) $(USE_ACCELERATOR) +endif + diff --git a/src/Test/buildKKRMatrixTest_openacc/associatedLegendreFunction.cpp b/src/Test/buildKKRMatrixTest_openacc/associatedLegendreFunction.cpp new file mode 100644 index 000000000..f41baa397 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_openacc/associatedLegendreFunction.cpp @@ -0,0 +1,28 @@ +// routines to calculate the associated Legendre functions P_{lm} needed to calculate +// spherical harmonics +// This also provides the coeficients c_{lm} to calculate spherical harmonics: +// Y_{lm}(\theta, \phi) = c_{lm} P_{lm}(\cos\theta) e^{im\phi} +// +// The new routine calculates normalized versions of the Legendre polynomials +// such that +// Y_{lm}(\theta, \phi) = \sqrt{1/2} \bar{P}_{lm}(\cos\theta) e^{im\phi} +// +// i.e. c_{lm} = \sqrt{1/2} +// + +#include +#include "associatedLegendreFunction.hpp" + +extern "C" { +void plm_normalized_(int *lmax, double *x, double *plm) +{ + associatedLegendreFunctionNormalized(*x, *lmax, plm); +} + +void ylm_coefficients_(int *lmax, double *clm) +{ + for(int i=0; i<((*lmax) +1)*((*lmax) +2)/2; i++) + clm[i]=std::sqrt(0.5); +} +} + diff --git a/src/Test/buildKKRMatrixTest_openacc/associatedLegendreFunction.hpp b/src/Test/buildKKRMatrixTest_openacc/associatedLegendreFunction.hpp new file mode 100644 index 000000000..4816db079 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_openacc/associatedLegendreFunction.hpp @@ -0,0 +1,90 @@ +// calculate the associated Legendre Function +// P_{lm}(x) = \sqrt{2 (2l+1)\frac{(l-m)!}{(l+m)!}} x^m \frac{d^m}{dx^m} P_l(x) +// where P_l(x) is the Legendre Polynomial of degree l +// +#ifndef ASSOCIATED_LEGENDRE_FUNCTIONS_HPP +#define ASSOCIATED_LEGENDRE_FUNCTIONS_HPP +#include + +// for the normalized associated Legendre functions \bar{P}_{lm} +// such that the spherical harmonics are: +// Y_lm(\theta, \phi) = \bar{P}_{lm}(\cos \theta) e^{i m \phi} +// use the recursion relation: +// P_{00}(x) = \sqrt{1/2\pi} +// +// i.e \bar{P}_{lm}=\sqrt{\frac{(2l+1)(l-m)!}{4\pi(l+m)!}} P_{lm} +// +// Plm is a 1-d array that will contain all the values of P_{lm}(x) from P_{00} to P_{l_{max} l_{max}} +// the index into this array is Plm[l*(l+1)/2 + m] +// + +inline int plmIdx(int l, int m) +{ return l*(l+1)/2+m; } + +template // R has to be real data type (default double) +void associatedLegendreFunctionNormalized(R x, int lmax, R *Plm) +{ + const R pi = std::acos(-R(1)); + // y = \sqrt{1-x^2} + R y = std::sqrt(R(1)-x*x); + // initialize the first entry + // Plm[0]=std::sqrt(R(1)/(R(2)*pi)); + Plm[0]=std::sqrt(R(1)/(R(4)*pi)); + + if(lmax<1) return; + + for(int m=1; m<=lmax; m++) + { + // \bar{P}_{mm} = - \sqrt{\frac{2m+1}{2m}} y \bar{P}_{m-1, m-1} + Plm[plmIdx(m,m)] = - std::sqrt(R(2*m+1)/R(2*m)) * y * Plm[plmIdx(m-1,m-1)]; + // \bar{P}_{mm-1} = \sqrt{2 m + 1} x \bar{P}_{m-1, m-1} + Plm[plmIdx(m,m-1)] = std::sqrt(R(2*m+1)) * x * Plm[plmIdx(m-1,m-1)]; + } + + for(int m=0; m // R has to be real data type (default double) +void associatedLegendreFunction(R x, int lmax, R *Plm) +{ + // y = \sqrt{1-x^2} + R y = std::sqrt(R(1)-x*x); + // initialize the first entry + Plm[0]=R(1); + if(lmax<1) return; + Plm[1]=x; + Plm[2]=-y; + for(int m=2; m +#include +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" + +#include "TestStructures.hpp" +#include "Misc/Coeficients.hpp" + +#include "LIZ_pos.h" + +SphericalHarmonicsCoeficients sphericalHarmonicsCoeficients; +GauntCoeficients gauntCoeficients; +IFactors iFactors; + +void buildKKRMatrix_orig(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, + Complex energy, Complex prel, Matrix &m); +void buildKKRMatrix_nrel_ns2(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, + Complex energy, Complex prel, Matrix &m); +void buildKKRMatrix_nrel_ns2_acc(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, Complex energy, Complex prel, Matrix &m); + +const double cphot=274.072; +const double c2inv=1.0/(cphot*cphot); + +void set_tmat(Complex energy,Matrix &tmat) +{ + energy=std::complex(-0.2,0.1); + + for(int i=0; i<32; i++) + for(int j=0; j<32; j++) + tmat(i,j)=0.0; + +// spin up +// l=0 + tmat(0,0)=std::complex( 2.72989453e-01, 4.75691304e-02); +// l=1 + tmat(1,1)=std::complex(-1.53433276e-02, 9.50739941e-03); + tmat(3,3)=tmat(2,2)=tmat(1,1); +// l=2 + tmat(4,4)=std::complex(-1.23189965e-02, 1.45766627e-02); + tmat(8,8)=tmat(7,7)=tmat(6,6)=tmat(5,5)=tmat(4,4); +// l=3 + tmat(9,9)=std::complex( 1.53919816e-05,-1.07135429e-04); + tmat(15,15)=tmat(14,14)=tmat(13,13)=tmat(12,12)=tmat(11,11)=tmat(10,10)=tmat(9,9); +// spin down +// l=0 + tmat(16,16)=std::complex( 4.51280708e-01, 2.16447659e-02); +// l=1 + tmat(17,17)=std::complex(-3.04540765e-02, 1.86224585e-02); + tmat(19,19)=tmat(18,18)=tmat(17,17); +// l=2 + tmat(20,20)=std::complex(-1.00226432e-02, 1.24349804e-02); + tmat(24,24)=tmat(23,23)=tmat(22,22)=tmat(21,21)=tmat(20,20); +// l=3 + tmat(25,25)=std::complex( 1.49731043e-05,-1.06213516e-04); + tmat(31,31)=tmat(30,30)=tmat(29,29)=tmat(28,28)=tmat(27,27)=tmat(26,26)=tmat(25,25); +} + +void set_atom(AtomData &atom) +{ + atom.kkrsz=(atom.lmax+1)*(atom.lmax+1); + set_LIZ(atom); + atom.nrmat=0; + atom.LIZStoreIdx.resize(atom.numLIZ); + atom.LIZlmax.resize(atom.numLIZ); + for(int i=0; i tmat(32,32); + LSMSSystemParameters lsms; + LocalTypeInfo local; + AtomData atom; + Matrix m; + + atom.lmax=lsms.maxlmax=3; + lsms.global.iprint=0; + lsms.global.setIstop("main"); + lsms.nrel_rel=0; + lsms.n_spin_cant=2; + + lsms.angularMomentumIndices.init(2*lsms.maxlmax); + sphericalHarmonicsCoeficients.init(2*lsms.maxlmax); + gauntCoeficients.init(lsms,lsms.angularMomentumIndices,sphericalHarmonicsCoeficients); + iFactors.init(lsms,lsms.maxlmax); + + local.lDimTmatStore=32; + local.tmatStore.resize(local.lDimTmatStore*local.lDimTmatStore,1); + set_tmat(energy,tmat); + for(int i=0; i<32*32; i++) local.tmatStore(i,0)=tmat[i]; + Complex prel=std::sqrt(energy*(1.0+energy*c2inv)); + + set_atom(atom); + + m.resize(atom.nrmat*lsms.n_spin_cant,atom.nrmat*lsms.n_spin_cant); + + if(argc<2) + { + printf("Usage: buildKKRMatrixTest c|n|o [loop_count]\n"); + printf(" c - compare old and new construction results\n"); + printf(" n - time new matrix construction\n"); + printf(" o - time old matrix construction\n"); + exit(0); + } + + double t0,t1; + if(argc>1 && *argv[1]=='c') + { + Matrix m1; + + printf("Calculating...\n"); + + + m1.resize(atom.nrmat*lsms.n_spin_cant,atom.nrmat*lsms.n_spin_cant); + t0 = omp_get_wtime(); + buildKKRMatrix_nrel_ns2(lsms, local, atom, energy, prel,m); + t1 = omp_get_wtime(); + printf("CPU time: %f\n",t1-t0); + + //buildKKRMatrix_orig(lsms, local, atom, energy, prel,m1); + t0 = omp_get_wtime(); + buildKKRMatrix_nrel_ns2_acc(lsms, local, atom, energy, prel,m1); + t1 = omp_get_wtime(); + printf("OpenACC time: %f\n",t1-t0); + + printf("Comparing matrices...\n"); + + for(int i=0; i1e-10 ) + { + printf("m(i,j)!=m1(i,j): i=%d, j=%d, m(i,j)=(%lg,%lg), m1(i,j)=(%lg,%lg) d=%lg rd=%lg\n", + //printf("%6d %6d (%14.7e,%14.7e) (%14.7e,%14.7e)\n", + i,j,std::real(m(i,j)),std::imag(m(i,j)),std::real(m1(i,j)),std::imag(m1(i,j)), + std::abs(m(i,j)-m1(i,j)),std::abs(m(i,j)-m1(i,j))/std::abs(0.5*(m(i,j)+m1(i,j)))); + return -1; + } + printf("Everything looks good!\n"); + } else if(argc>1 && *argv[1]=='n') { + int loop_count=10; + if(argc>2) loop_count=atoi(argv[2]); + printf("Timing new matrix construction\n loop_count=%d ",loop_count); + t0 = omp_get_wtime(); + for(int i=0; i2) loop_count=atoi(argv[2]); + printf("Timing old matrix construction\n loop_count=%d ",loop_count); + t0 = omp_get_wtime(); + for(int i=0; i +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" + +#include "TestStructures.hpp" +#include "Misc/Coeficients.hpp" + +#include + +#define USE_ALLOCA +#define INLINE_PLGLMAX +#define INLINE_MAKEGIJ + +void plglmax_new(int lmax, Real x, Real*plm); + +#include "makegij_new.cpp" + +void buildKKRMatrix_nrel_ns2(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, + Complex energy, Complex prel, Matrix &m) +{ +// make sure that lsms.n_spin_cant == 2! + if(lsms.n_spin_cant!=2) + { + printf("lsms.n_spin_cant!=2 in buildKKRMatrix_nrel_ns2\n"); + exit(1); + } + + Real rij[3]; + + int lmax=lsms.maxlmax; + int kkrsz=(lmax+1)*(lmax+1); + int kkrsz_ns=2*kkrsz; // lsms.n_spin_cant + int nrmat_ns=2*atom.nrmat; // lsms.n_spin_cant + int nrst,ncst; + +#ifdef USE_ALLOCA + Complex *gij=(Complex *)alloca(kkrsz*kkrsz*sizeof(Complex)); + Real *sinmp = (Real *)alloca(sizeof(Real)*(2*lmax+1)); + Real *cosmp = (Real *)alloca(sizeof(Real)*(2*lmax+1)); + Real *plm = (Real *)alloca(sizeof(Real)*lsms.angularMomentumIndices.ndlm); + Complex *hfn = (Complex *)alloca(sizeof(Complex)*(2*lmax+1)); + Complex *dlm = (Complex *)alloca(sizeof(Complex)*lsms.angularMomentumIndices.ndlj); + Complex *bgij = (Complex *)alloca(sizeof(Complex)*4*kkrsz*kkrsz); + Complex *tmat_n = (Complex *)alloca(sizeof(Complex)*atom.kkrsz*atom.kkrsz*4); +#else + Complex *gij = new Complex[kkrsz*kkrsz]; + Real *sinmp = new Real[2*lmax+1]; + Real *cosmp = new Real[2*lmax+1]; + Real *plm = new Real[lsms.angularMomentumIndices.ndlm]; + Complex *hfn = new Complex[2*lmax+1]; + Complex *dlm = new Complex[lsms.angularMomentumIndices.ndlj]; + Complex *bgij = new Complex[4*kkrsz*kkrsz]; + Complex *tmat_n = new Complex[atom.kkrsz*atom.kkrsz*4]; +#endif + + const Complex cmone=-1.0; + const Complex czero=0.0; + + Real pi4=4.0*2.0*std::asin(1.0); + +#ifdef _DEBUG + // [debug] [eric] + FILE *hfgij = fopen("gij-cpu.txt","w"); + FILE *hfdlm = fopen("dlm-cpu.txt","w"); + FILE *hfhfn = fopen("hfn-cpu.txt","w"); + FILE *hfrij = fopen("rij-cpu.txt","w"); + FILE *hfplm = fopen("plm-cpu.txt","w"); +#endif + + for(int i=0; i(0.0,1.0); + const Real ptol=1.0e-6; + + int lend=lmaxi+lmaxj; + + Real rmag=std::sqrt(rij[0]*rij[0]+rij[1]*rij[1]+rij[2]*rij[2]); + + if(std::abs(prel)==0.0) + { + // if prel is zero then we calculate Gij for multipole Coulomb interaction. + hfn[0]=1.0/rmag; + for(int l=1; l<=lend; l++) + { + //hfn[l]=sqrtm1*(2.0*l-1)*hfn[l-1]/rmag; + hfn[l]=sqrtm1*(2.0*l-1)*hfn[l-1]*hfn[0]; + } + } + else + { + Complex z=prel*rmag; + hfn[0]=-sqrtm1; + hfn[1]=-1.0-sqrtm1/z; + for(int l=1; lndlm) + { + printf("MAKEGIJ:: ndlm incorrect!\n"); + printf("ndlm=%d\nndlm_local=%d\n",ndlm,ndlm_local); + exit(1); + } + + //[debug] + for(int j=0;jptol) + { + cosmp[1]=rij[0]/pmag; + sinmp[1]=rij[1]/pmag; + } else { + cosmp[1]=0.0; + sinmp[1]=0.0; + } + for(int m=2; m<=lend; m++) + { + cosmp[m]=cosmp[m-1]*cosmp[1]-sinmp[m-1]*sinmp[1]; + sinmp[m]=sinmp[m-1]*cosmp[1]+cosmp[m-1]*sinmp[1]; + } + + int j=0; + for(int l=0; l<=lend; l++) + { + int ll=l*(l+1); + j=ll; + ll=ll/2; + Real m1m=1.0; + dlm[j]= hfn[l]*plm[ll]; + for(int m=1; m<=l; m++) + { + m1m=-m1m; + Complex fac=plm[ll+m]*std::complex(cosmp[m],sinmp[m]); + dlm[j-m]= hfn[l]*m1m*fac; + dlm[j+m]= hfn[l]*std::conj(fac); + } + } + for(int i=0; i=llow;l3-=2) + { + int j=l3*(l3+1)+m3; + gij[lm2+lm1*kkri] = gij[lm2+lm1*kkri]+ gauntCoeficients.cgnt(l3/2,lm1,lm2)*dlm[j]; + } + gij[lm2+lm1*kkri]=pi4*iFactors.illp(lm2,lm1)*gij[lm2+lm1*kkri]; + } + } +} +#endif + + Complex psq=prel*prel; + +// for(int i=0; i +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" + +#include "TestStructures.hpp" +#include "Misc/Coeficients.hpp" + +#include + +#ifdef CRAYPAT +#include +#endif + +extern "C" +{ + void write_kkrmat_(Complex *a,int *n,int *lda,Complex *e); + + void makegij_(int *lmaxi,int *kkri,int *lmaxj,int *kkrj, + int *lmax,int *kkrsz,int *ndlj,int *ndlm, + Complex *prel,double *rij,double *sinmp,double *cosmp, + double *clm,double *plm,double *cgnt,int *lmax_cg,int *lofk,int *mofk, + Complex *ilp1,Complex *illp, + Complex *hfn,Complex *dlm,Complex *gij, + double *pi4,int *iprint,char *istop,int len_sitop); + + void setgij_(Complex *gij,Complex *bgij,int *kkr1,int *kkr1_ns,int *kkr2,int *kkr2_ns, + int *n_spin_cant,int *nrel_rel,Complex *psq,Complex *energy); +}; + +// #define SYNTHETIC_MATRIX +// #define WRITE_GIJ + +#define USE_ALLOCA + +void buildKKRMatrix_orig(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, Complex energy, Complex prel, Matrix &m) +{ +#ifdef CRAYPAT +PAT_region_begin(1,"buildKKRMatrix init"); +#endif + Real rij[3]; + + int lmax=lsms.maxlmax; + int kkrsz=(lmax+1)*(lmax+1); + int kkrsz_ns=kkrsz*lsms.n_spin_cant; + int nrmat_ns=lsms.n_spin_cant*atom.nrmat; + int nrst,ncst; + +#ifdef USE_ALLOCA + Complex *gij=(Complex *)alloca(kkrsz*kkrsz*sizeof(Complex)); + Real *sinmp = (Real *)alloca(sizeof(Real)*(2*lmax+1)); + Real *cosmp = (Real *)alloca(sizeof(Real)*(2*lmax+1)); + Real *plm = (Real *)alloca(sizeof(Real)*lsms.angularMomentumIndices.ndlm); + Complex *hfn = (Complex *)alloca(sizeof(Complex)*(2*lmax+1)); + Complex *dlm = (Complex *)alloca(sizeof(Complex)*lsms.angularMomentumIndices.ndlj); + Complex *bgij = (Complex *)alloca(sizeof(Complex)*4*kkrsz*kkrsz); + Complex *tmat_n = (Complex *)alloca(sizeof(Complex)*atom.kkrsz*atom.kkrsz*4); +#else + Complex *gij = new Complex[kkrsz*kkrsz]; + Real *sinmp = new Real[2*lmax+1]; + Real *cosmp = new Real[2*lmax+1]; + Real *plm = new Real[lsms.angularMomentumIndices.ndlm]; + Complex *hfn = new Complex[2*lmax+1]; + Complex *dlm = new Complex[lsms.angularMomentumIndices.ndlj]; + Complex *bgij = new Complex[4*kkrsz*kkrsz]; + Complex *tmat_n = new Complex[atom.kkrsz*atom.kkrsz*4]; +#endif + + const Complex cmone=-1.0; + const Complex czero=0.0; + + Real pi4=4.0*2.0*std::asin(1.0); + + for(int i=0; i=1) + { + printf("first t Matrix:\n"); + for(int i=0; i Gij_full(nrmat_ns,nrmat_ns); + for(int i=0; i=0) + { + FILE *f1=fopen("kkrmat.out","w"); + FILE *f2=fopen("kkrmat.pattern","w"); + for(int i=0; i +#include +#include +#include + +//[eric] OpenACC has no support of cabs() and cexp() + +void c_kkrmat(int lmax, int ndlm, int ndlj, int nrmat_ns, int akkrsz, int anumLIZ, + int *lofk, // [ndlj] Misc/Indices.hpp + int *mofk, // [ndlj] Misc/Indices.hpp + double *LIZPos, // [3,atom.numLIZ] LIZ_pos.h + int *LIZlmax, // [atom.numLIZ] main() + int *LIZStoreIdx, // [atom.numLIZ] main() + double complex *ilp1, // [2*lmax+1] Misc/Coeficients.hpp + double complex *illp, // [kkrsz,kkrsz] Misc/Coeficients.hpp, kkrsz=(lmax+1)^2 + double *cgnt, // [lmax+1,kkrsz,kkrsz] Misc/Coeficients.hpp + double *clm, // [(2*lmax+1)*(2*lmax+2)/2] + double complex prel, double complex *m, double complex *tmat0) +{ + + int kkrsz=(lmax+1)*(lmax+1); + int szBlk_tmat = kkrsz*kkrsz*4; + int kkr1=(LIZlmax[0]+1)*(LIZlmax[0]+1); + int kkr1_ns=2*kkr1; // lsms.n_spin_cant; + int kkr2=(LIZlmax[0]+1)*(LIZlmax[0]+1); + int kkr2_ns=2*kkr2; // lsms.n_spin_cant; + + double sinmp[2*lmax+1]; // 7 + double cosmp[2*lmax+1]; // 7 + double plm[ndlm]; // 28 + double complex hfn[2*lmax+1]; // 7 + double complex dlm[ndlj*anumLIZ*anumLIZ]; // 49 + double complex gij[kkrsz*kkrsz]; // 256 + +#define MPdlm(i,ir1,ir2) (i+ir1*ndlj+ir2*ndlj*anumLIZ) + + double complex tmat_n[akkrsz*akkrsz*4*anumLIZ]; + + const double complex J=_Complex_I; + const double ptol=1.0e-6; + const double pi4=4.0*2.0*asin(1.0); + const double tol=1.0e-12; + + int prel0 = (creal(prel)==0.0 && cimag(prel)==0.0); + + // Preload tmat_n + for(int ir1=0; ir1=ir1?1:0); + + int lmaxi=LIZlmax[ir1]; + int lmaxj=LIZlmax[ir2]; + int lend=lmaxi+lmaxj; + + double rij_1,rij_2,rij_0; + + rij_0=LIZPos[0+3*ir1]-LIZPos[0+3*ir2]; + rij_1=LIZPos[1+3*ir1]-LIZPos[1+3*ir2]; + rij_2=LIZPos[2+3*ir1]-LIZPos[2+3*ir2]; + + double rmag=sqrt(rij_0*rij_0+rij_1*rij_1+rij_2*rij_2); + + //if(cabs(prel)==0.0) + if (prel0) + { + // if prel is zero then we calculate Gij for multipole Coulomb interaction. + hfn[0]=1.0/rmag; + for(int l=1; l<=lend; l++) + { + // [eric] the commented one is correct on CPU but incorrect on GPU + //hfn[l]=J*(2.0*l-1.0)*hfn[l-1]/rmag; + hfn[l]=J*(2.0*l-1.0)*hfn[l-1]*hfn[0]; + } + } + else + { + double complex z=prel*rmag; + hfn[0]=-J; + hfn[1]=-1.0-J/z; + for(int l=1; lndlm) + //{ + // printf("MAKEGIJ:: ndlm incorrect!\n"); + // printf("ndlm=%d\nndlm_local=%d\n",ndlm,ndlm_local); + // exit(1); + //} + + for(int j=0;jptol) + { + cosmp[1]=rij_0/pmag; + sinmp[1]=rij_1/pmag; + } + else + { + cosmp[1]=0.0; + sinmp[1]=0.0; + } + for(int m=2; m<=lend; m++) + { + cosmp[m]=cosmp[m-1]*cosmp[1]-sinmp[m-1]*sinmp[1]; + sinmp[m]=sinmp[m-1]*cosmp[1]+cosmp[m-1]*sinmp[1]; + } + + int j=0; + for(int l=0; l<=lend; l++) + { + int ll=l*(l+1); + j=ll; + ll=ll/2; + double m1m=1.0; + dlm[MPdlm(j,ir1,ir2)]= hfn[l]*plm[ll]; + for(int m=1; m<=l; m++) + { + m1m=-m1m; + double complex fac=plm[ll+m]*(cosmp[m]+J*sinmp[m]); + dlm[MPdlm(j-m,ir1,ir2)]= hfn[l]*m1m*fac; + dlm[MPdlm(j+m,ir1,ir2)]= hfn[l]*conj(fac); + } + } + } + + #pragma acc parallel loop gang collapse(2) private(gij) + for(int ir1=0; ir1=ir1?1:0); + + #pragma acc cache(gij) + + #pragma acc loop vector collapse(2) + for(int j=0; jabs(l1-l2)?abs(m3):abs(l1-l2)); + + if (prel0) llow=l1+l2; + + gij[i+j*kkr1] = 0.0; + + for(int l3=l1+l2; l3>=llow;l3-=2) + gij[i+j*kkr1]+= + cgnt[l3/2+j*(lmax+1)+i*(lmax+1)*kkrsz]*dlm[MPdlm(l3*(l3+1)+m3,ir1,ir2)]; + + gij[i+j*kkr1]=pi4*illp[i+kkrsz*j]*gij[i+j*kkr1]; + } + + #pragma acc loop vector tile(kkr1,kkr2) + for(int j=0; j0) + { + kk+=kkr1*kkr1_ns; + jj-=kkr2; + } + jj=jj*kkr1; + + for(int k=0; k0 +// the algorithm follows +// +// David H. Bailey, Karthik Jeyabalan and Xiaoye S. Li +// "A Comparison of Three High-Precision Quadrature Schemes" +// Experimental Mathematics 14, 317-329 (2005). +// + +#include + +template // R is a real type e.g. double +void calculateGaussLegendrePoints(R *x, R *w, int n, R xLeft = -1.0, R xRight = +1.0) +{ + const R pi = std::acos(-R(1)); + + R Pk[n], PkMinus1[n], PkPlus1[n]; // the Legendre polynomials at points x[i] + R Ppn[n]; // derivative of P_n(x_i) + R dX[n]; // correction values for the Newton iteration + + R xHalfWidth = 0.5*(xRight - xLeft); + R xMidpoint = 0.5*(xRight+xLeft); + + // the x[i] are the roots of the nth degree Legendre Polynomial P_n(x) + // we search these using a Newton iteration with starting guess + // x[i] ~ cos(\pi (j - 1/4) / (n + 1/2)) + + for(int i=0; i +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" + +#include "TestStructures.hpp" +#include "Misc/Coeficients.hpp" + +//#include + +// [eric] complex conversion +#define CXX2C(a) (*((double _Complex*)(&(a)))) + + +extern "C" +void c_kkrmat(int, int, int, int, int, int, int*, int*, double*, int*, int*, + double _Complex*, double _Complex*, double*, double*, + double _Complex, double _Complex*, double _Complex*); + + +void buildKKRMatrix_nrel_ns2_acc(LSMSSystemParameters &lsms, LocalTypeInfo &local,AtomData &atom, Complex energy, Complex prel, Matrix &m) +{ + // make sure that lsms.n_spin_cant == 2! + if(lsms.n_spin_cant!=2) + { + printf("lsms.n_spin_cant!=2 in buildKKRMatrix_nrel_ns2\n"); + exit(1); + } + + c_kkrmat(lsms.maxlmax,lsms.angularMomentumIndices.ndlm,lsms.angularMomentumIndices.ndlj, + 2*atom.nrmat, atom.kkrsz, atom.numLIZ, + &lsms.angularMomentumIndices.lofk[0], &lsms.angularMomentumIndices.mofk[0], + &atom.LIZPos(0,0), &atom.LIZlmax[0], &atom.LIZStoreIdx[0], + &CXX2C(iFactors.ilp1[0]), &CXX2C(iFactors.illp(0,0)), + &gauntCoeficients.cgnt(0,0,0), + &sphericalHarmonicsCoeficients.clm[0], + CXX2C(prel), &CXX2C(m(0,0)), &CXX2C(local.tmatStore(0,0))); +} diff --git a/src/Test/buildKKRMatrixTest_openacc/makegij_c.f b/src/Test/buildKKRMatrixTest_openacc/makegij_c.f new file mode 100644 index 000000000..549dd2480 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_openacc/makegij_c.f @@ -0,0 +1,291 @@ +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine makegij(lmaxi,kkri,lmaxj,kkrj, + > lmax,kkrsz,ndlj,ndlm, + > prel,rij,sinmp,cosmp, + > clm,plm,cgnt,lmax_cg,lofk,mofk, + > ilp1,illp, + > hfn,dlm,gij, + > pi4,iprint,istop) +c ============================================================== +c + implicit none +c + character sname*32 + character istop*32 +c + integer lmaxi + integer lmaxj + integer lend + integer kkri + integer kkrj + integer lmax,lmax_cg + integer kkrsz + integer ndlj + integer ndlm,ndlm_local + integer lofk(ndlj) + integer mofk(ndlj) + integer l,ll + integer l1 + integer l2 + integer m + integer ma + integer m1 + integer m2 + integer lm1 + integer lm2 + integer l3,m3,llow + integer j + integer iprint +c + real*8 rij(3) + real*8 sinmp(0:lmaxi+lmaxj) + real*8 cosmp(0:lmaxi+lmaxj) + real*8 clm(ndlm) + real*8 plm(ndlm) +! original definition of cgnt in LSMS_1 +! real*8 cgnt(lmax+1,kkrsz,kkrsz) + real*8 cgnt(lmax_cg+1,(lmax_cg+1)**2,(lmax_cg+1)**2) + real*8 pi4 + real*8 rmag + real*8 pmag + real*8 costheta + real*8 m1m + real*8 ptol + real*8 zero + real*8 one +c + complex*16 prel + complex*16 ilp1(0:lmaxi+lmaxj) +! original definition of illp in LSMS_1 +! complex*16 illp(kkrsz,kkrsz) + complex*16 illp((lmax+1)**2,kkrsz) + complex*16 hfn(0:lmaxi+lmaxj) + complex*16 dlm(ndlj) + complex*16 gij(kkri,kkrj) + complex*16 z + complex*16 fac + complex*16 sqrtm1 + complex*16 czero + complex*16 cone +c + parameter (sqrtm1=(0.0d0,1.0d0)) + parameter (czero =(0.0d0,0.0d0)) + parameter (cone =(1.0d0,0.0d0)) + parameter (ptol =1.0d-06) + parameter (zero =0.0d0) + parameter (one =1.0d0) + parameter (sname ='makegij') +c +c ***************************************************************** +c +c +c ij l+1 m -> * +c D [E] = -i * sqrt(E) * h [sqrt(E)*R ] * Y [R ] +c L l ij l ij +c +c +c -l+1 m -> * +c = -i * sqrt(E) * h [sqrt(E)*R ] * Y [-R ] +c l ij l ij +c +c The extra factor (-1)^m removed by xgz July 97 from plm (plglmax_c.f) +c to make Ylm consistent with Numerical Recipes. +c +c m [ (2*l+1)*(l-|m|)!] m +c Y = sqrt[-----------------]*P [cos(theta)]*exp(i*m*phi) +c l [ 4*pi*(l+|m|)! ] l +c +c for m>=0 +c +c m m -m * +c Y [theta,phi] = (-1) Y [theta,phi] for m<0 +c l l +c +c -> -> -> +c R = R - R ==> [theta,phi] +c ij j i +c +c cos(theta)=Rij(3)/sqrt(Rij(1)**2+Rij(2)**2+Rij(3)**2) +c +c cos(phi) =Rij(1)/sqrt(Rij(1)**2+Rij(2)**2) +c +c m m +c Indexing: P : P(l*(l+1)/2+m+1) only +m are calculated +c l l +c +c m m +c Indexing: C : C(l*(l+1)/2+m+1) only +m are calculated +c l l +c +c m m +c Indexing: D : D(l*(l+1)+m+1) all m are calculated +c l l +c +c Now for the real space structure contant we have : +c +c ij l-l' L ij +c G (E) = 4*pi*i * SUM { C * D (E) } +c L,L' L" L',L" L" +c +c ***************************************************************** +c +c ================================================================= + if(lmax.lt.0) then + write(6,'('' makegij:: bad arguments: lmax='',i5)') lmax + call fstop(sname) + endif + lend=lmaxi+lmaxj +c ================================================================= +c calculate the hankel function.[dangerous code if z is close to 0] +c hankel function is hfn*exp(i*z)/z + rmag=sqrt(rij(1)*rij(1)+rij(2)*rij(2)+rij(3)*rij(3)) + if(rmag.lt.ptol) stop 'Error in makegij: rmag = 0.' + if(prel.eq.czero) then +c if prel is zero then we calculate Gij for multipole Coulomb interaction. + hfn(0)=cone/rmag + do l=1,lend + hfn(l)=sqrtm1*(2*l-1)*hfn(l-1)/rmag + enddo + else + z=prel*rmag + hfn(0)=-sqrtm1 + hfn(1)=-cone-sqrtm1/z + do l=1,lend-1 + hfn(l+1)=(2*l+1)*hfn(l)/z - hfn(l-1) + enddo +c ================================================================= +c l+1 +c hfn = -i *h (k*R )*sqrt(E) +c l ij +c ================================================================= + z=exp(sqrtm1*z)/rmag + do l=0,lend + hfn(l)=-hfn(l)*z*ilp1(l) + enddo + endif +c +c ================================================================= +c calculate p(l,m)'s............................................... + costheta=rij(3)/rmag +c ----------------------------------------------------------------- + call plglmax(lend,costheta,plm) +c ----------------------------------------------------------------- +c ================================================================= +c multiply be the normalization constant........................... + ndlm_local=(lend+1)*(lend+2)/2 + if(ndlm_local.gt.ndlm) then + write(6,'(''MAKEGIJ:: ndlm incorrect!'')') + write(6,*) 'ndlm=',ndlm + write(6,*) 'ndlm_local=',ndlm_local + call fstop(sname) + endif + do j=1,ndlm_local + plm(j)=clm(j)*plm(j) + enddo +c ================================================================= +c calculate cos(phi) and sin(phi) ................................. + pmag=sqrt(rij(1)*rij(1)+rij(2)*rij(2)) + cosmp(0)=one + sinmp(0)=zero + if(pmag.ge.ptol) then + cosmp(1)=rij(1)/pmag + sinmp(1)=rij(2)/pmag + else + cosmp(1)=zero + sinmp(1)=zero + endif + do m=2,lend + cosmp(m)=cosmp(m-1)*cosmp(1)-sinmp(m-1)*sinmp(1) + sinmp(m)=sinmp(m-1)*cosmp(1)+cosmp(m-1)*sinmp(1) + enddo +c + j=0 + do l=0,lend + ll=l*(l+1) + j=ll+1 + ll=ll/2+1 + m1m=one + dlm(j)= hfn(l)*plm(ll) + do m=1,l + m1m=-m1m + fac=plm(ll+m)*dcmplx(cosmp(m),sinmp(m)) + dlm(j-m)= hfn(l)*m1m*fac + dlm(j+m)= hfn(l)*conjg(fac) + enddo + enddo +c ================================================================= + if(iprint.ge.3) then + write(6,'(/)') + write(6,*) "Rij=",rij(1),rij(2),rij(3) + write(6,*) "cos(theta)=",costheta + write(6,'(/)') + write(6,'('' makegij:: l,m,dlm(l,m):'')') + do j=1,ndlj + write(6,'(2i3,2x,f10.5,1x,d16.8)') + > lofk(j),mofk(j),dlm(j) + enddo + write(6,*) "i, plm(i)" + do j=1,ndlm + write(6,*) j,plm(j) + end do + endif +c +c ================================================================ +c calculate g(R_ij)............................................... +c ---------------------------------------------------------------- +! call zeroout(gij,2*kkri*kkrj) + gij=0.0d0 +c ---------------------------------------------------------------- +c ================================================================ +c loop over l1,m1............................................ + do lm1=1,kkrj + l1=lofk(lm1) + m1=mofk(lm1) +c ============================================================= +c loop over l2,m2.............................................. + do lm2=1,kkri + l2=lofk(lm2) + m2=mofk(lm2) +c ========================================================== +c l2-l1 +c illp(lm2,lm1) = i +c +c perform sum over l3 with gaunt # ...................... +c ========================================================== + m3=m2-m1 + llow=max(abs(m3),abs(l1-l2)) + if(prel.eq.czero) llow=l1+l2 + do l3=l1+l2,llow,-2 + j=l3*(l3+1)+m3+1 + gij(lm2,lm1) = gij(lm2,lm1)+cgnt(l3/2+1,lm1,lm2)*dlm(j) + enddo + gij(lm2,lm1)=pi4*illp(lm2,lm1)*gij(lm2,lm1) + enddo + enddo +c +c ================================================================ +c printout if needed.............................................. + if(iprint.ge.3) then +c ============================================================= +c loop over l1,m1.............................................. + do lm1=1,kkrj + l1=lofk(lm1) + m1=mofk(lm1) +c ========================================================== +c loop over l2,m2........................................... + do lm2=1,kkri + l2=lofk(lm2) + m2=mofk(lm2) + write(6,'('' lm1,lm2,l1,m1,l2,m2:'',6i3,2d12.5)') + > lm1,lm2,l1,m1,l2,m2,gij(lm2,lm1) + enddo + enddo + endif +c ================================================================= + if (istop.eq.sname) then + call fstop(sname) + else + return + endif +c + end diff --git a/src/Test/buildKKRMatrixTest_openacc/makegij_new.cpp b/src/Test/buildKKRMatrixTest_openacc/makegij_new.cpp new file mode 100644 index 000000000..d41978648 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_openacc/makegij_new.cpp @@ -0,0 +1,297 @@ +#include +#include +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" +#include "Array3d.hpp" + +// #define INLINE_PLGLMAX + +extern "C" +{ + void plglmax_(int *lend, Real*costheta, Real*plm); +} +// void plglmax_new(int lmax, Real x, Real*plm); + +#include "plglmax_new.cpp" + +inline void makegij_new(int lmaxi, int kkri, int lmaxj, int kkrj, + int lmax, int kkrsz, int ndlj, int ndlm, + Complex prel, Real *rij,Real *sinmp, Real *cosmp, + Real *clm, Real *plm, Array3d &cgnt, + int *lofk, int *mofk, + Complex *ilp1, Matrix &illp, + Complex *hfn, Complex *dlm, + Complex *gij, Real pi4) +{ + const Complex sqrtm1=std::complex(0.0,1.0); + const Real ptol=1.0e-6; +/* +c ***************************************************************** +c +c +c ij l+1 m -> * +c D [E] = -i * sqrt(E) * h [sqrt(E)*R ] * Y [R ] +c L l ij l ij +c +c +c -l+1 m -> * +c = -i * sqrt(E) * h [sqrt(E)*R ] * Y [-R ] +c l ij l ij +c +c The extra factor (-1)^m removed by xgz July 97 from plm (plglmax_c.f) +c to make Ylm consistent with Numerical Recipes. +c +c m [ (2*l+1)*(l-|m|)!] m +c Y = sqrt[-----------------]*P [cos(theta)]*exp(i*m*phi) +c l [ 4*pi*(l+|m|)! ] l +c +c for m>=0 +c +c m m -m * +c Y [theta,phi] = (-1) Y [theta,phi] for m<0 +c l l +c +c -> -> -> +c R = R - R ==> [theta,phi] +c ij j i +c +c cos(theta)=Rij(3)/sqrt(Rij(1)**2+Rij(2)**2+Rij(3)**2) +c +c cos(phi) =Rij(1)/sqrt(Rij(1)**2+Rij(2)**2) +c +c m m +c Indexing: P : P(l*(l+1)/2+m+1) only +m are calculated +c l l +c +c m m +c Indexing: C : C(l*(l+1)/2+m+1) only +m are calculated +c l l +c +c m m +c Indexing: D : D(l*(l+1)+m+1) all m are calculated +c l l +c +c Now for the real space structure contant we have : +c +c ij l-l' L ij +c G (E) = 4*pi*i * SUM { C * D (E) } +c L,L' L" L',L" L" +c +c ***************************************************************** +*/ + + int lend=lmaxi+lmaxj; +/* +c calculate the hankel function.[dangerous code if z is close to 0] +c hankel function is hfn*exp(i*z)/z +*/ + Real rmag=std::sqrt(rij[0]*rij[0]+rij[1]*rij[1]+rij[2]*rij[2]); +// if(rmag.lt.ptol) stop 'Error in makegij: rmag = 0.' + if(std::abs(prel)==0.0) + { +// if prel is zero then we calculate Gij for multipole Coulomb interaction. + hfn[0]=1.0/rmag; + for(int l=1; l<=lend; l++) + { + hfn[l]=sqrtm1*(2.0*l-1)*hfn[l-1]/rmag; + } + } else { + Complex z=prel*rmag; + hfn[0]=-sqrtm1; + hfn[1]=-1.0-sqrtm1/z; + for(int l=1; lndlm) + { + printf("MAKEGIJ:: ndlm incorrect!\n"); + printf("ndlm=%d\nndlm_local=%d\n",ndlm,ndlm_local); + exit(1); + } + for(int j=0;jptol) + { + cosmp[1]=rij[0]/pmag; + sinmp[1]=rij[1]/pmag; + } else { + cosmp[1]=0.0; + sinmp[1]=0.0; + } + for(int m=2; m<=lend; m++) + { + cosmp[m]=cosmp[m-1]*cosmp[1]-sinmp[m-1]*sinmp[1]; + sinmp[m]=sinmp[m-1]*cosmp[1]+cosmp[m-1]*sinmp[1]; + } + + int j=0; + for(int l=0; l<=lend; l++) + { + int ll=l*(l+1); + j=ll; + ll=ll/2; + Real m1m=1.0; + dlm[j]= hfn[l]*plm[ll]; + for(int m=1; m<=l; m++) + { + m1m=-m1m; + Complex fac=plm[ll+m]*std::complex(cosmp[m],sinmp[m]); + dlm[j-m]= hfn[l]*m1m*fac; + dlm[j+m]= hfn[l]*std::conj(fac); + } + } + +// ================================================================ +// calculate g(R_ij)............................................... + for(int i=0; i=llow;l3-=2) + { + int j=l3*(l3+1)+m3; + gij[lm2+lm1*kkri] = gij[lm2+lm1*kkri]+cgnt(l3/2,lm1,lm2)*dlm[j]; + } + gij[lm2+lm1*kkri]=pi4*illp(lm2,lm1)*gij[lm2+lm1*kkri]; + } + } +} diff --git a/src/Test/buildKKRMatrixTest_openacc/plglmax_new.cpp b/src/Test/buildKKRMatrixTest_openacc/plglmax_new.cpp new file mode 100644 index 000000000..03bf14e17 --- /dev/null +++ b/src/Test/buildKKRMatrixTest_openacc/plglmax_new.cpp @@ -0,0 +1,131 @@ +#include "Real.hpp" +/* subroutine plglmax(lmax,x,plm) +c **************************************************************** +c Associated Legendre function.................................... +c Calclates all the p(l,m)'s up to lmax........................... +c based on the formulae given in "Numerical Recipes" pages 180-183 +c (Equations 6.6.7, 6.6.8 and 6.6.9............................... +c W. H. Press, B. P. Flannery, S A Teukolsky and W. T. Vetterling. +c Cambridge Univ Press 1986....................................... +c **************************************************************** +c +c Inputs: lmax integer scalar, max l for Plm +c x real*8 scalar, argument of Plm(x) +c Returns: plm real*8 array of ((lmax+1)*(lmax+2)/2), Plm(x) +c +*/ +#define LMAX_GE_2 + +inline void plglmax_new(int lmax, Real x, Real*plm) +{ + const Real tol=1.0e-12; +// removed checks from original plglmax.f + + if((1.0-std::abs(x)) n_spin_cant,nrel_rel,psq,ce) +c ============================================================== +c + implicit none +c + character istop*32 + character sname*32 + integer im,in + integer i,j + integer is + integer kkr1 + integer kkr1_ns + integer kkr2 + integer kkr2_ns + integer n_spin_cant + integer nrel_rel +c + complex*16 gij(kkr1,kkr2) + complex*16 bgij(kkr1_ns,kkr2_ns) + complex*16 fac + complex*16 psq + complex*16 ce + + parameter (sname='setgij') +c + call zeroout(bgij,2*kkr1_ns*kkr2_ns) +c + if(nrel_rel.eq.0) then + do is=1,n_spin_cant + im=(is-1)*kkr1 + in=(is-1)*kkr2 + do i=1,kkr1 + do j=1,kkr2 + bgij(im+i,in+j)=gij(i,j) + end do + end do + end do + else +! if(kkr1.ne.kkr2) then +! write(6,*) 'SETGIJ: nonsquare rel. Gij not yet supported' +! call fstop(sname) +! end if +! call relmtrx(gij,bgij,lmax) + + write(6,*) 'SETGIJ: relativity currently not supported' + call fstop(sname) +c$$$ call relmtrx(gij,bgij,kkr1,kkr2) +c$$$ fac=psq/ce +c$$$ do i=1,kkr1_ns +c$$$ do j=1,kkr2_ns +c$$$ bgij(i,j)=fac*bgij(i,j) +c$$$ end do +c$$$ end do + end if +c + return + end diff --git a/src/Test/testPotentialShift.cpp b/src/Test/testPotentialShift.cpp new file mode 100644 index 000000000..568877707 --- /dev/null +++ b/src/Test/testPotentialShift.cpp @@ -0,0 +1,224 @@ +// driver for LSMS_3 class to test Potential shift + +#include +#include +#include + +#include + +#include +#include +#include "../Main/SystemParameters.hpp" +#include "../Main/PotentialIO.hpp" +#include "Communication/distributeAtoms.hpp" +#include "Communication/LSMSCommunication.hpp" +#include "Core/CoreStates.hpp" +#include "Misc/Indices.hpp" +#include "Misc/Coeficients.hpp" +#include "VORPOL/VORPOL.hpp" +// #include "EnergyContourIntegration.hpp" +#include "Accelerator/Accelerator.hpp" +// #include "calculateChemPot.hpp" +#include "../Main/lsmsClass.hpp" +#include "../Potential/PotentialShifter.hpp" + +#define R_VALUE_OFFSET 2 + +/* +static int +feenableexcept (unsigned int excepts) +{ + static fenv_t fenv; + unsigned int new_excepts = excepts & FE_ALL_EXCEPT, + old_excepts; // previous masks + + if ( fegetenv (&fenv) ) return -1; + old_excepts = fenv.__control & FE_ALL_EXCEPT; + + // unmask + fenv.__control &= ~new_excepts; + fenv.__mxcsr &= ~(new_excepts << 7); + + return ( fesetenv (&fenv) ? -1 : old_excepts ); +} +*/ + +int main(int argc, char *argv[]) +{ + int size, rank, worldRank; + int size_lsms; // number of atoms in a lsms instance + int num_steps; // number of energy calculations + double shift_min, shift_max; + + double magnetization; + double magnetization0; + + double walltime_0,walltime; + + MPI_Status status; + + char i_lsms_name[64]; + + char step_out_name[64]; + FILE *stepOutFile; + + double ev0[3]; + + std::vector > savedPotentials; + + bool return_moments_flag=false; // true-> return all magnetic moments from lsms run at each step. + bool generator_needs_moment=false; + bool reset_potentials=false; + + typedef enum {OneStepEnergy, MultiStepEnergy, ScfEnergy} EnergyCalculationMode; + EnergyCalculationMode energyCalculationMode = MultiStepEnergy; + + // feenableexcept(FE_INVALID); + + ev0[0]=ev0[1]=0.0; ev0[2]=1.0; + // size has to be align + size_lsms*num_lsms + size_lsms=-1; + num_steps=1; + + shift_min=0.0; + shift_max=0.0; + + sprintf(i_lsms_name,"i_lsms"); + sprintf(step_out_name,"step.out"); + + // check command line arguments + for(int i=0; i1) + shift_delta=(shift_max-shift_min)/(double(num_steps-1)); + +// calculated unconstraine magnetization: + // initialize evec + for(int i=0; i<3*size_lsms; i+=3) + { evec[i]=0.0; evec[i+1]=0.0; evec[i+2]=1.0;} + lsms_calc.setEvecAndSpinPotentialShift(evec); + + // bandEnergy=energy=lsms_calc.multiStepEnergy(); + energy=lsms_calc.scfEnergy(&bandEnergy); + + lsms_calc.getMag(m); + if(rank==0) + { + magnetization0=0.0; + for(int i=0; i<3*size_lsms; i+=3) + { + magnetization0+=std::sqrt(m[i]*m[i]+m[i+1]*m[i+1]+m[i+2]*m[i+2]); + } + } + + + for(int step=0; step= 0) + printf("\ncalculateTotalEnergy: ==============================================\n"); + + for (int i=0; i= 0) + printf("Total Energy contribution from atom %d.%d:\n", comm.rank, i); + + if (use_old_energy_calculation) + { + + // Calculate total charge density + for (int ir=0; ir= 0) + printf(" TOTE_FT:: Spin index = %5d*************\n", is); + + // Determine spin direction + if (local.atom[i].spinFlipped) + isold = 1 - is; + else + isold = is; + +/* =============================================================== + Janake:: Came from KKR-CPA expects: komp, atcon(1->komp)..... + Set Dummies : Stop run time array bounds warning.... + =============================================================== +*/ + int komp = 1; + Real atcon = 1.0; + Real ztotssTemp = local.atom[i].ztotss; //what for? + + Real rSphere; + switch (lsms.mtasa) + { + case 1: + rSphere = local.atom[i].rws; + break; + case 2: + rSphere = local.atom[i].rws; + break; + default: + rSphere = local.atom[i].rInscribed; + } + + Real rspin = Real(lsms.n_spin_pola); + + janake_(&local.atom[i].vr(0,isold), &local.atom[i].vrNew(0,is), + &rhoTotal[0], &local.atom[i].rhoNew(0,is), &local.atom[i].corden(0,isold), + &local.atom[i].r_mesh[0], &local.atom[i].rInscribed, &rSphere, + &local.atom[i].jmt, &local.atom[i].jws, + &komp, &atcon, + &ztotssTemp, + &local.atom[i].omegaWS, + &local.atom[i].exchangeCorrelationPotential(0,is), &local.atom[i].exchangeCorrelationEnergy(0,is), + &local.atom[i].evalsum[is], + &local.atom[i].ecorv[isold], &local.atom[i].esemv[isold], + &energy, &pressure, &rspin, + &lsms.global.iprpts, + &lsms.global.iprint, lsms.global.istop, 32); + } + + totalEnergy += energy * local.n_per_type[i]; + totalPressure += pressure * local.n_per_type[i]; + } else { // new energy calculation + localTotalEnergy(lsms, local.atom[i], energyNew, pressureNew); + totalEnergyNew += energyNew * local.n_per_type[i]; + totalPressureNew += pressureNew * local.n_per_type[i]; + } + // printf("Energy Difference Janake vs New: %lg Ry\n",totalEnergy-totalEnergyNew); + + } + + if (!use_old_energy_calculation) + { + totalEnergy = totalEnergyNew; + totalPressure = totalPressureNew; + } + else + { + delete[] rhoTotal; + } + +/* + ================================================================ + Perform global sums for the Energy and pressure + ================================================================ +*/ + globalSum(comm, totalEnergy); + globalSum(comm, totalPressure); + + Real *emad; + Real *emadp; + emad = new Real[lsms.n_spin_pola]; + emadp = new Real[lsms.n_spin_pola]; + + Real spinFactor; + switch (lsms.n_spin_pola) + { + case 1: + spinFactor = 1.0; + break; + default: + spinFactor = 0.5; + } + + for (int is=0; is= 0) + { + printf("calculateTotalEnergy: ----------------------------------------------\n"); + printf("Total Energy = %35.25lf Ry\n", totalEnergy); + printf("Pressure = %35.25lf Ry\n", totalPressure); + printf("=====================================================================\n"); + } + + lsms.totalEnergy = totalEnergy; + + delete[] emad; + delete[] emadp; + + return; + +} diff --git a/src/TotalEnergy/calculateTotalEnergy.hpp b/src/TotalEnergy/calculateTotalEnergy.hpp new file mode 100644 index 000000000..69223cd09 --- /dev/null +++ b/src/TotalEnergy/calculateTotalEnergy.hpp @@ -0,0 +1,19 @@ +#ifndef CALCULATE_TOTAL_ENERGY_HPP +#define CALCULATE_TOTAL_ENERGY_HPP + +#include "Main/SystemParameters.hpp" +#include "Communication/LSMSCommunication.hpp" +#include "Real.hpp" + +void calculateTotalEnergy(LSMSCommunication &comm, LSMSSystemParameters &lsms, LocalTypeInfo &local, CrystalParameters &crystal); + +extern "C" +{ + void janake_(Real *vrold, Real *vrnew, Real *rhotot, Real *rhonew, Real *corden, + Real *rr, Real *rins, Real *rmt, int *jmt, int *jws, int *komp, Real *atcon, + Real *ztotss_dum, Real *atvol, Real *vx, Real *enxc, Real *evalsum, + Real *ecorv, Real *esemv, Real *etot, Real *press, Real *rspin, + int *iprpts, int *iprint, char *istop, int istopl_len); +} + +#endif diff --git a/src/TotalEnergy/janake_c.f b/src/TotalEnergy/janake_c.f new file mode 100644 index 000000000..af0fd7d29 --- /dev/null +++ b/src/TotalEnergy/janake_c.f @@ -0,0 +1,384 @@ +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine janake(vrold,vrnew, + > rhotot,rho,corden, + > rr,rins,rmt, + > jmt,jws, + > komp,atcon, + > ztotss, + > atvol, + > vx,enxc, + > evalsum,ecorv,esemv, + > etot,press,rspin, + > iprpts, + > iprint,istop) +c > iprint,istop, +c > iprpts) + +c ================================================================ +c + implicit none + integer mynod +c + character istop*32 + character sname*20 + parameter (sname='janake') +c +c YingWai's trial +! include 'atom_param.h' +c + integer jmt + integer jws + integer komp + integer iprint + integer iprpts +c + integer ir + integer i + integer ik + integer iformu + integer iex +c + real*8 ylag + real*8 rmt + real*8 vrold(iprpts,komp) + real*8 vrnew(iprpts,komp) + real*8 rho(iprpts,komp) + real*8 rhotot(iprpts) + real*8 corden(iprpts,komp) + real*8 rr(iprpts),rins,rtmp(0:iprpts) + real*8 atcon(komp) + real*8 ztotss(komp) + real*8 qtmp + real*8 atvol + real*8 vx(iprpts,komp) + real*8 enxc(iprpts,komp) + real*8 evalsum(komp) + real*8 ecorv(komp) + real*8 esemv(komp) + real*8 etot + real*8 press + real*8 rspin + real*8 ekinetic + real*8 erho + real*8 ezrho + real*8 ecoulomb + real*8 rhoint +c + real*8 vmvold(iprpts) + real*8 rinv(iprpts) + real*8 rhov(iprpts) + real*8 derv(iprpts) + real*8 bndint(0:iprpts),dummy + real*8 bnd(0:iprpts) + real*8 exchen + real*8 exchjmt + real*8 coren + real*8 valen + real*8 correc + real*8 cor3pv + real*8 pterm1 + real*8 ezpt + real*8 tpzpt + real*8 evssum + real*8 xcmt +c + real*8 zero + real*8 half + real*8 two + real*8 three + real*8 four +c + parameter (iformu=2) + parameter (zero=0.0d0) + parameter (half=0.5d0) + parameter (two=2.0d0) + parameter (three=3.0d0) + parameter (four=4.0d0) + mynod=-iprint +c + rtmp(0)=zero + do ir=1,jmt + rinv(ir)=1/rr(ir) + rtmp(ir)=sqrt(rr(ir)) + enddo + do ik=1,komp +c +c ============================================================ +c calculate the zeropoint energy........................... +c ============================================================ +c ------------------------------------------------------------ + call zeropt(ezpt,tpzpt,atvol,ztotss(ik)) +c ------------------------------------------------------------ +c ============================================================ +c calculate the energy eigenvalue sum for both valence and +c sem-core electrons, and store it in evssum.................. +c ============================================================ + evssum = evalsum(ik)+esemv(ik) +c + if(iformu.eq.2) then +c Look at some terms of interest + do i=1,jmt + bndint(i)=rho(i,ik)*vrold(i,ik)*rinv(i)*rinv(i) +c bndint(i)=rho(i,ik)*rho(i,ik)*rinv(i)*rinv(i) + enddo +c bndint(507)=bndint(506) +c if(iprint.ge.0)write(6,'(''v'',10f12.4)')(vrold(i,1),i=1,jmt+2) +c if(iprint.ge.0)write(6,'(''p'',10f12.4)')(rho(i,1),i=1,jmt+2) +c if(iprint.ge.0)write(6,'(''r'',10f12.4)')(rinv(i),i=1,jmt+2) +c if(iprint.ge.0)write(6,'(''b'',10f12.5)')(bndint(i),i=1,jmt+2) + call interp(rtmp(1),bndint(1),4,zero,bndint(0),dummy,.false.) +c ------------------------------------------------------------ + call newint(jmt+1,rtmp,bndint,bnd,3) +c if(iprint.ge.0)write(6,'(''m'',10f12.5)') +c > (bnd(i+1)-bnd(i),i=1,jmt+2) +c if(iprint.ge.0)write(6,'(''i'',10f12.5)')(bnd(i),i=1,jmt+2) +c ------------------------------------------------------------ + call interp(rtmp,bnd,jmt+1,sqrt(rmt),ekinetic,dummy,.false.) +c write(6,'(''ekinetic1'',d19.10)')ekinetic + ekinetic=ylag(sqrt(rmt),rtmp,bnd,0,3,jmt+1,i) +c write(6,'(''ekinetic2'',d19.10)')ekinetic +c ekinetic=two*bnd(jmt) + ekinetic=two*ekinetic + ekinetic=ecorv(ik)+evssum-ekinetic + + do i=1,jmt + bndint(i)=rhotot(i)*rinv(i)*rinv(i) + enddo +c ------------------------------------------------------------ + call interp(rtmp(1),bndint(1),4,zero,bndint(0),dummy,.false.) + call newint(jmt+1,rtmp,bndint,bnd,5) +! meis: test +! call interp(rtmp,bnd,jmt+1,sqrt(rmt),qtmp,dummy,.false.) +! write(6,'(''janake: coulomb v:'',f22.11)') qtmp +c ------------------------------------------------------------ + do i=1,jmt + bndint(i)=rho(i,ik)*bnd(i)*rinv(i)**3*8.d0 + enddo + call interp(rtmp,bndint,jmt+1,sqrt(rmt),qtmp,dummy,.false.) +c qtmp=bnd(jmt)-ztotss(1) + qtmp=qtmp-ztotss(1) +c ------------------------------------------------------------ + call interp(rtmp(1),bndint(1),4,zero,bndint(0),dummy,.false.) + call newint(jmt+1,rtmp,bndint,bnd,5) +c ------------------------------------------------------------ + call interp(rtmp,bnd,jmt+1,sqrt(rmt),erho,dummy,.false.) +c erho=bnd(jmt) + + do i=1,jmt + bndint(i)=-rho(i,ik)*ztotss(ik)*four*rinv(i)*rinv(i) + enddo +c ------------------------------------------------------------ + call interp(rtmp(1),bndint(1),4,zero,bndint(0),dummy,.false.) + call newint(jmt+1,rtmp,bndint,bnd,3) +c ------------------------------------------------------------ + call interp(rtmp,bnd,jmt+1,sqrt(rmt),ezrho,dummy,.false.) +c ezrho=bnd(jmt) !-rho(1,ik)*ztotss(ik) + ecoulomb=erho+ezrho + + do i=1,jmt + bndint(i)=rho(i,ik)*enxc(i,ik)*rinv(i)*rinv(i) + enddo +c ------------------------------------------------------------ + call interp(rtmp(1),bndint(1),4,zero,bndint(0),dummy,.false.) + call newint(jmt+1,rtmp,bndint,bnd,5) + call interp(rtmp,bnd,jmt+1,sqrt(rmt),exchen,dummy,.false.) +c ------------------------------------------------------------ + exchjmt=two*bnd(jmt) + exchen=two*exchen + + do i=1,jmt + bndint(i)=rho(i,ik)*(enxc(i,ik)-vx(i,ik))*rinv(i)*rinv(i) + enddo +c ------------------------------------------------------------ + call interp(rtmp(1),bndint(1),4,zero,bndint(0),dummy,.false.) + call newint(jmt+1,rtmp,bndint,bnd,5) + call interp(rtmp,bnd,jmt+1,sqrt(rmt),pterm1,dummy,.false.) +c ------------------------------------------------------------ +c pterm1=two*bnd(jmt) + pterm1=two*pterm1 + +c ************************************************************* + etot = etot+atcon(ik)*(ekinetic+ecoulomb+exchen+ezpt/rspin) + press= press+atcon(ik)*(two*ekinetic+ecoulomb-three*pterm1+ + & tpzpt/rspin) + if(iprint.ge.0) then + write(6,'(10x,''evssum'',t30,''='',f22.11)')evssum + write(6,'(10x,''Kinetic E'',t30,''='',f22.11)') ekinetic + write(6,'(10x,''Coulomb E(rho)'',t30,''='',f22.11)') erho + write(6,'(10x,''Coulomb E(Z_rho)'',t30,''='',f22.11)') ezrho + write(6,'(10x,''Coulomb E'',t30,''='',f22.11)') ecoulomb + write(6,'(10x,''Exch E'',t30,''='',2f22.11)') exchen,exchjmt + endif +ctest ****************************** emia ************************* +c write(6,'(''emia'',i4,10f15.7)')mynod,etot,press,evssum, +c >ekinetic,erho,ezrho,ecoulomb,exchen,qtmp +ctest ******************************* emia ************************ + else ! iformu.eq.2 +c ============================================================ +c note: rhov contains both valence and semi-core charge +c density............................................... +c ============================================================ + do ir=1,jmt + rhov(ir)=rho(ir,ik)-corden(ir,ik) + vmvold(ir)=vrold(ir,ik)-vrnew(ir,ik) + enddo +c +c ============================================================ +c calculate coren for each component where one piece of +c dv/dr is equal to ecorv. add this piece to derv term and +c calculate: coren =-int r3 dr 2pi*corden*dv/dr iformu +c = int r2 dr 2pi*corden*(v-d(rv)/dr) 1 +c = sum ec - int r2 dr 4pi*corden*d(rv)/dr 0 +c ============================================================ +c ------------------------------------------------------------ + call newder(vrold(1,ik),derv,rtmp(1),jmt) +c ------------------------------------------------------------ + if(iformu.eq.0) then + do i=1,jmt + bndint(i)=-corden(i,ik)*derv(i)/(rr(i)*rtmp(i)) + enddo +c --------------------------------------------------------- + call interp(rtmp(1),bndint(1),4,zero,bndint(0),dummy,.false.) + call newint(jmt+1,rtmp,bndint,bnd,3) +c --------------------------------------------------------- + coren=ecorv(ik)+bnd(jmt) + else + do i=1,jmt + bndint(i)=corden(i,ik)*(rinv(i)*vrold(i,ik)- + & derv(i)/(two*rtmp(i))) + enddo +c --------------------------------------------------------- + call interp(rtmp(1),bndint(1),4,zero,bndint(0),dummy,.false.) + call newint(jmt+1,rtmp,bndint,bnd,1) +c --------------------------------------------------------- + coren = bnd(jmt) + endif +c +c ============================================================ +c calculate: pterm1 =-int r1 dr 4pi*valden d(r2v)/dr +c =-int r2 dr 4pi*valden (d(rv)/dr+v) +c ============================================================ + do i=1,jmt + bndint(i)=rhov(i)*(derv(i)/(two*rtmp(i))+vrold(i,ik)*rinv(i)) + & *rinv(i) + enddo +c ------------------------------------------------------------ + call interp(rtmp(1),bndint(1),4,zero,bndint(0),dummy,.false.) + call newint(jmt+1,rtmp,bndint,bnd,3) +c ------------------------------------------------------------ + pterm1=-two*bnd(jmt) +c +c ============================================================ +c calculate: valen =-int r2 dr 4pi rhov*d(rv)/dr.............. +c ============================================================ +c ------------------------------------------------------------ + call newder(vrnew(1,ik),derv,rtmp(1),jmt) +c ------------------------------------------------------------ + do i=1,jmt + bndint(i)=-rhov(i)*derv(i)/(rr(i)*rr(i)*rtmp(i)) + enddo +c ------------------------------------------------------------ + call interp(rtmp(1),bndint(1),4,zero,bndint(0),dummy,.false.) + call newint(jmt+1,rtmp,bndint,bnd,5) +c ------------------------------------------------------------ + valen = bnd(jmt) +c +c ============================================================ +c calculate: exchen = int r2 dr 4pi rho (4exc-3vxc) +c ============================================================ + do i=1,jmt + bndint(i)=rho(i,ik)*(four*enxc(i,ik)-three*vx(i,ik)) + & *rinv(i)*rinv(i) + enddo +c ------------------------------------------------------------ + call interp(rtmp(1),bndint(1),4,zero,bndint(0),dummy,.false.) + call newint(jmt+1,rtmp,bndint,bnd,5) +c ------------------------------------------------------------ + exchen=two*bnd(jmt) +c +c ============================================================ +c calculate terms that make the energy variational: +c correc = int 4pi dr r3*corden*d[vold-vnew]/dr +c -int 4pi dr r2*rhov*[vold-vnew] +c = int 4pi dr r2*corden*d[r*(vold-vnew)]/dr +c -int 4pi dr r2*rho*[vold-vnew] +c calculate terms that are corrections to the pressure: +c cor3pv = int 8pi dr r3*corden*d[vold-vnew]/dr +c = int 8pi dr r2*corden*d[r*(vold-vnew)]/dr +c -int 8pi dr r2*corden*[vold-vnew] +c ============================================================ +c ------------------------------------------------------------ + call newder(vmvold,derv,rtmp(1),jmt) +c ------------------------------------------------------------ + do i=1,jmt + bndint(i)=corden(i,ik)*derv(i)/(rr(i)*rtmp(i)) + enddo +c ------------------------------------------------------------ + call interp(rtmp(1),bndint(1),4,zero,bndint(0),dummy,.false.) + call newint(jmt+1,rtmp,bndint,bnd,3) +c ------------------------------------------------------------ + correc=bnd(jmt) + cor3pv=two*correc + do i=1,jmt + bndint(i)=rho(i,ik)*vmvold(i)/(rr(i)*rr(i)) + enddo +c ------------------------------------------------------------ + call interp(rtmp(1),bndint(1),4,zero,bndint(0),dummy,.false.) + call newint(jmt+1,rtmp,bndint,bnd,3) +c ------------------------------------------------------------ + correc=correc-two*bnd(jmt) + do i=1,jmt + bndint(i)=corden(i,ik)*vmvold(i)/(rr(i)*rr(i)) + enddo +c ------------------------------------------------------------ + call interp(rtmp(1),bndint(1),4,zero,bndint(0),dummy,.false.) + call newint(jmt+1,rtmp,bndint,bnd,3) +c ------------------------------------------------------------ + cor3pv=cor3pv-four*bnd(jmt) +c + xcmt=rr(jmt)*rho(jmt,ik)*( enxc(jmt,ik)-vx(jmt,ik) ) +c +c ============================================================ +c sum over terms to get the total energy and 3PV........... +c ============================================================ + etot = etot+atcon(ik)*( coren+valen+exchen+correc+ezpt/rspin + > +evssum-xcmt ) + press= press+atcon(ik)*( pterm1+cor3pv+tpzpt/rspin + > +two*evssum-xcmt) +c +c ************************************************************* +c Major print out for current sublattice....................... +c ************************************************************* + if(iprint.ge.0) then + write(6,'(/,'' JANAKE:: Component'',t30,''='',i5)') ik +c write(6,'(10x,''ecorv'',t30,''='',f22.11)')ecorv(ik) +c write(6,'(10x,''esemv'',t30,''='',f22.11)')esemv(ik) +c write(6,'(10x,''evalsum'',t30,''='',f22.11)')evalsum(ik) + write(6,'(10x,''coren'',t30,''='',f22.11)')coren + write(6,'(10x,''valen'',t30,''='',f22.11)')valen + write(6,'(10x,''exchen'',t30,''='',f22.11)')exchen + write(6,'(10x,''correc'',t30,''='',f22.11)') correc + write(6,'(10x,''evssum'',t30,''='',f22.11)')evssum + write(6,'(10x,''-xcmt'',t30,''='',f22.11)')-xcmt + write(6,'(10x,''c3pv'',t30,''='',f22.11)')cor3pv + endif +ctest ****************************** emia ************************* +c write(6,'(''emia'',i4,10f15.7)') +c >mynod,etot,press,evalsum(1),coren,valen,exchen,correc,qtmp +ctest ******************************* emia ************************ +c ************************************************************* + endif ! iformu.eq.2 + if(iprint.ge.0) then + write(6,'(10x,''pterm1'',t30,''='',f22.11)')pterm1 + write(6,'(10x,''ezpt/spin'',t30,''='',f22.11)')ezpt/rspin + write(6,'(10x,''tpzpt'',t30,''='',f22.11)')tpzpt/rspin + endif + enddo +c +c =============================================================== + if( istop .eq. sname ) then + call fstop(sname) + else + return + endif + end diff --git a/src/TotalEnergy/localTotalEnergy.cpp b/src/TotalEnergy/localTotalEnergy.cpp new file mode 100644 index 000000000..d545f0a67 --- /dev/null +++ b/src/TotalEnergy/localTotalEnergy.cpp @@ -0,0 +1,199 @@ +#include "Misc/integrateOneDim.cpp" +#include + +extern "C" +{ + void zeropt_(Real *ezpt, Real *tpzpt, Real *atvol, Real *ztotss); +} + +void localTotalEnergy(LSMSSystemParameters &lsms, AtomData &atom, +//output: +Real &energy, Real &pressure) +{ + Real eigenvalueSum=0.0; + Real kineticEnergy=0.0; + Real coulombEnergy=0.0; + Real xcEnergy=0.0; + Real ezpt=0.0; + Real tpzpt=0.0; + std::vector integral(atom.r_mesh.size()+1); + std::vector integrand(atom.r_mesh.size()+1); + std::vector grid0(atom.r_mesh.size()+1); + std::vector gridSqrt(atom.r_mesh.size()+1); + std::vector gridCbrt(atom.r_mesh.size()+1); + energy =0.0; + pressure=0.0; + + Real rSphere; + switch (lsms.mtasa) + { + case 1: + rSphere = atom.rws; + break; + case 2: + rSphere = atom.rws; + break; + default: + rSphere = atom.rInscribed; + } + +// ============================================================ +// calculate the zeropoint energy........................... +// ============================================================ +// ------------------------------------------------------------ + zeropt_(&ezpt,&tpzpt,&atom.omegaWS,&atom.ztotss); + +// calculate kinetic energy T: +// T = \sum_{Core} e_i -- (1) +// + \int^{E_F} e n(e) de -- (2) +// - \int \rho(r) (v_{Coulomb} + v_{xc}) d^3r -- (3) +// + \int m(r) (B_{xc} + B_{external}) d^3 -- (4) + + if(lsms.n_spin_pola==1) + { + eigenvalueSum=atom.evalsum[0]+atom.esemv[0]; + + kineticEnergy = atom.ecorv[0]+atom.esemv[0]; // (1) + kineticEnergy += atom.evalsum[0]; // (2) + + // set up integrand for (3) + for(int i=0; i fit; + fit.set(grid0,integrand,2); + // fit.set(gridSqrt,integrand,2); + // fit.set(gridCbrt, integrand, 2); + integrand[0]=fit(0.0); + kineticEnergy -= integrateOneDim(grid0, integrand, integral, rSphere); // (3) + // kineticEnergy -= integrateOneDim<0>(gridSqrt, integrand, integral, std::sqrt(rSphere)); // (3) + // kineticEnergy -= integrateOneDim<11>(gridCbrt, integrand, integral, std::cbrt(rSphere)); // (3) + + printf("evssum = %35.25lf Ry\n",eigenvalueSum); + printf("kinetic Energy = %35.25lf Ry\n",kineticEnergy); + +// calculate Coulomb Energy E_C: +// E_C = \int \rho(r) v_{Coulomb} d^3r -- (5) +// + E_{Madelung} -- (6) // external to this routine +// break the Coulomb integral in two parts: +// \int \rho(r) v_{Coulomb} d^3r +// = \int \rho(r) \int^r rho(r')/r' dr' dr -- (5a) +// + \int rho(r) Z/r dr -- (5b) + + if(lsms.n_spin_pola==1) + { + for(int i=0; i 0,158,400,428,0,0,0,0,0,91, + > 230,360,420,380,630,410,467,445,450,343, + > 327,320,0,0,0,0,0,56,147,280, + > 291,275,450,350,600,480,274,225,209,108/ + data grune/0.0d0,0.0d0,1.18d0,1.18d0,0.00d0,0.00d0,0.00d0, + > 0.0d0,0.0d0,0.00d0,1.31d0,1.48d0,2.19d0,0.00d0, + > 0.0d0,0.0d0,0.00d0,0.00d0,1.37d0,1.16d0,1.17d0, + > 1.18d0,1.05d0,1.30d0,2.07d0,1.66d0, + > 1.93d0,1.88d0,2.00d0,2.01d0,2.00d0, + > 0.00d0,0.00d0,0.00d0,0.00d0,0.00d0,1.67d0,1.00d0, + > 0.89d0,0.83d0,1.58d0,1.60d0,2.60d0,3.20d0,2.23d0, + > 2.28d0,2.36d0,2.23d0,2.37d0/ + data expvol/0.0d0,143.7d0,0.0d0,54.54d0,0.0d0,0.0d0,0.0d0, + > 0.0d0,0.0d0,0.0d0,254.5d0,151.4d0,109.9d0,0.0d0, + > 0.0d0,0.0d0,0.0d0, 0.0d0,481.3d0,291.1d0, + > 168.7d0,120.3d0,93.48d0,80.63d0,82.84d0,78.95d0, + > 74.72d0,73.42d0,78.92d0,99.35d0,132.4d0, + > 0.0d0,0.0d0,0.0d0,0.0d0,0.0d0,598.9d0,373.6d0, + > 194.7d0,139.9d0,119.2d0,102.7d0,97.25d0,92.54d0, + > 93.70d0,99.67d0,111.9d0,142.9d0,179.2d0/ +c +c ================================================================ + iz=ztotss+.1 +c write(6,'('' zeropt:: iz,deb,grun,expv,omeg:'',2i5,3d12.4)') +c > iz,idebye(iz),grune(iz),expvol(iz),omegws + if(iz.lt.1 .or. iz.gt.49) then + ezero=0.0d0 + tpvzer=0.0d0 + else + if(expvol(iz).ne.0.0d0) then + ezero=1.125d0*bolts*idebye(iz)* + > (expvol(iz)/omegws)**grune(iz) + endif + tpvzer =3.0d0*grune(iz)*ezero + endif + ezpt=ezero + tpzpt=tpvzer +c ================================================================ + return + end diff --git a/src/VORPOL/Makefile b/src/VORPOL/Makefile new file mode 100755 index 000000000..5d8696d46 --- /dev/null +++ b/src/VORPOL/Makefile @@ -0,0 +1,22 @@ +OBJ = setup_vorpol.o setup_boundary.o filter_edge.o chkedge.o invm3.o chkbnd.o celbnd.o \ + polyhedron.o sort.o sortidx.o rcritpts.o volvor.o stepyll.o caltnode.o intpl0.o \ + calsig.o intphi.o inter_dip.o inter.o interstitial.o sigma.o \ + setupVorpol.o + +all: libVORPOL.a + +clean: + rm -f *.a *.o + +%.o : %.cpp + $(CXX) $(INC_PATH) -c -o $@ $< + +%.o : %.f + $(F77) -c -o $@ $< + +%.o : %.f90 + $(F77) -c -o $@ $< + +libVORPOL.a : $(OBJ) + $(AR) -r libVORPOL.a $(OBJ) + cp libVORPOL.a $(TOP_DIR)/lib diff --git a/src/VORPOL/VORPOL.hpp b/src/VORPOL/VORPOL.hpp new file mode 100644 index 000000000..795f1d9f5 --- /dev/null +++ b/src/VORPOL/VORPOL.hpp @@ -0,0 +1,48 @@ +#ifndef LSMS_VORPOL_H +#define LSMS_VORPOL_H + +#include "Real.hpp" +#include "Complex.hpp" +#include "Matrix.hpp" +#include "Array3d.hpp" + +class VoronoiPolyhedra { +public: +/* +// VORPOL data [this is only used from routines imported from LSMS_1.9 .. VORPOL and replaces the common block /common_step/ + integer ncrit + real*8 gwwylm(ipngaussr*(iprcrit-1)) + real*8 grwylm(ipngaussr*(iprcrit-1)) + include 'atom_param.h' + complex*16 wylm((2*iplmax+1)*(iplmax+1),ipngaussr,iprcrit-1) + +c This common block is defined in subroutine setup_vorpol. It +c contains the step function and the r-mesh for interstitial integration +c ncrit = number of critical r points +c grwylm = array containing the r-mesh for interstitial integration +c gwwylm = array containing the weights for interstitial integration +c wylm = array containing the step function for each r-mesh point + common /common_step/ wylm,gwwylm,grwylm,ncrit +*/ + int ncrit; + Real omegaInt; // interstitial volume + Complex dipint[6]; + Array3d wylm; + Matrix gwwylm, grwylm; +}; + +extern "C" +{ + void setup_vorpol_(int *my_atom,int *num_atoms, + Real *atom_position_1, + Real *atom_position_2,Real *atom_position_3, + Real *system_bravais, + int *lmax,Real *clm,int *ngaussq,int *ngaussr, + Real *rmt,Real *omegint,Complex *dipint,Real *rad, + int *ipvp,int *ipnode, int *ipcorn, int *ipedge,int *iprcrit, + Real *gwwylm, Real*grwylm, + int *ncrit, Complex *wylm, + int *iprint,char *istop,int istopl_len); +} + +#endif diff --git a/src/VORPOL/calsig.f b/src/VORPOL/calsig.f new file mode 100755 index 000000000..f7db76910 --- /dev/null +++ b/src/VORPOL/calsig.f @@ -0,0 +1,195 @@ + subroutine calsig(lmax,r, + > xp,nbnd, + > tnode,node,wgq,xgq,npts, + > wylm,plm,sumfi) +c ================================================================ +c +c********************************************************************* +c* * +c* This is the new program to expand sigma(r) on complex spherical* +c* harmonics. It only requires the position of boundary planes. * +c* * +c* the integration : * +c* / * +c* | _ _ * _ * +c* | do * sigma( r ) * y ( r ) = wylm * +c* | l,m * +c* / * +c* * +c* for certain r and m => 0, is carried through this subroutine. * +c* * +c* m * * +c* For m < 0, w(l,-m) = (-1) * w(l,m) * +c* * +c* * * +c* = w(l,m) if m = even * +c* * +c* The array is stored in the following way: * +c* * +c* jl l m jl l m * +c* * +c* w( 1 ) 0 0 w( 7 ) 3 0 * +c* w( 2 ) 1 0 w( 8 ) 3 1 * +c* w( 3 ) 1 1 w( 9 ) 3 2 * +c* w( 4 ) 2 0 w(10 ) 3 3 * +c* w( 5 ) 2 1 . . . * +c* w( 6 ) 2 2 . . . * +c* . . . * +c* * +c* input: * +c* * +c* lmax = the maximum value of l. * +c* xgq = the Gaussian quadrature points. * +c* wgq = the Gaussian quadrature weight associating * +c* each value of xgq. * +c* npts = the number of Gaussian qurdrature points. * +c* r = the ratial value. * +c* xp = the vector normal to a boundary plane and * +c* ending on the plane (from origin). * +c* nbnd = the number of boundary planes. * +c* tnode = the nodes along theta integration which is the* +c* non-regular points of function: f(theta). * +c* The integration over theta is broken into * +c* several pieces, each of which has two nodes as* +c* the terminal points. * +c* node = the number of tnode. * +c* * +c* * +c* output: * +c* * +c* wylm = step function expansion value for current * +c* value of r. * +c* * +c********************************************************************* +c + implicit none +c + integer lmax + integer nbnd + integer node + integer npts + integer i + integer l,m,jl + integer n +c + real*8 wgq(npts) + real*8 xgq(npts) + real*8 tnode(node) + real*8 wt + real*8 plm((lmax+1)*(lmax+2)/2) + real*8 xp(3,nbnd) + real*8 cosrth,offset + real*8 half + real*8 one + real*8 two + real*8 wtol + real*8 d,halfd + real*8 h0,sh0 + real*8 r,u + real*8 t(2) +c + complex*16 sumfi(0:lmax,3) + complex*16 wylm((lmax+1)*(lmax+2)/2) + complex*16 af1 + complex*16 czero +c + parameter (half=0.5d0) + parameter (one=1.0d0) + parameter (two=2.0d0) + parameter (wtol=1.0d-14) + parameter (czero=(0.d0,0.d0)) +c +c ================================================================ +c start to integrate over xn=cos(theta), using gaussian method. +c +c 2pi -> -i*m*phi +c sumfi = int d(phi) sigma(r )*e , for certain cos(theta) +c 0 +c +c ================================================================ + do i=1,node-1 + d=tnode(i+1)-tnode(i) + h0=d*1.d-6 + if(h0.lt.1.d-8) h0=min(1.d-8,d*1.d-3) + sh0=sqrt(h0) + + call intphi(lmax,tnode(i),r,xp,nbnd,sumfi(0,3)) + call intphi(lmax,tnode(i)+h0,r,xp,nbnd,sumfi(0,1)) + do m=0,lmax + sumfi(m,1)=(sumfi(m,1)-sumfi(m,3))/sh0 + enddo +c + call intphi(lmax,tnode(i+1),r,xp,nbnd,sumfi(0,3)) + call intphi(lmax,tnode(i+1)-h0,r,xp,nbnd,sumfi(0,2)) + do m=0,lmax + sumfi(m,2)=(sumfi(m,2)-sumfi(m,3))/sh0 + enddo +c + offset=half*(tnode(i)+tnode(i+1)) + halfd=half*d + do n=1,npts + cosrth=offset+halfd*xgq(n) +c +c ========================================================== +c generate the Legendre functions up to +c l = lmax for each cos(theta) value. +c ========================================================== +c ---------------------------------------------------------- +! meis: changed to normalized associated Legendre functions + call plm_normalized(lmax,cosrth,plm) +c ---------------------------------------------------------- + call intphi(lmax,cosrth,r,xp,nbnd,sumfi(0,3)) +c ---------------------------------------------------------- +c + t(1)=sqrt(halfd+halfd*xgq(n)) + t(2)=sqrt(halfd-halfd*xgq(n)) + wt=wgq(n)*halfd + do m=0,lmax + af1= wt*(sumfi(m,3) - + > sumfi(m,1)*t(1)-sumfi(m,2)*t(2)) + jl=m*(m+1)/2+1 + do l=m,lmax + jl=jl+l + wylm(jl) = wylm(jl)+af1*plm(jl) + enddo + enddo +c + if(xgq(n).ge.0.d0) then + u=sqrt(d)*xgq(n) + wt=two*sqrt(d)*wgq(n)*u*u +c ---------------------------------------------------------- +! meis: changed to normalized associated Legendre functions + call plm_normalized(lmax,u*u+tnode(i),plm) +c ---------------------------------------------------------- + do m=0,lmax + af1=wt*sumfi(m,1) + jl=m*(m+1)/2+1 + do l=m,lmax + jl=jl+l + wylm(jl)=wylm(jl)+af1*plm(jl) + enddo + enddo +c ---------------------------------------------------------- +! meis: changed to normalized associated Legendre functions + call plm_normalized(lmax,tnode(i+1)-u*u,plm) +c ---------------------------------------------------------- + do m=0,lmax + af1=wt*sumfi(m,2) + jl=m*(m+1)/2+1 + do l=m,lmax + jl=jl+l + wylm(jl)=wylm(jl)+af1*plm(jl) + enddo + enddo + endif + enddo + enddo +c + do jl=1,(lmax+1)*(lmax+2)/2 + if(abs(wylm(jl)) .lt. wtol) then + wylm(jl)=czero + endif + enddo +c + return + end diff --git a/src/VORPOL/caltnode.f b/src/VORPOL/caltnode.f new file mode 100755 index 000000000..3c9fbf90b --- /dev/null +++ b/src/VORPOL/caltnode.f @@ -0,0 +1,137 @@ + subroutine caltnode(r,xp,nbnd, + > edge,edgp,nedge, + > begth,endth, + > np_index,tnode,node) +c ================================================================ +c + implicit none +c + integer nbnd + integer nedge + integer node + integer np_index(2) + integer sigma + integer i,n,i1 +c + real*8 r + real*8 edge(3,nedge) + real*8 edgp(3,nedge) + real*8 dn2 + real*8 tnode(nbnd+2*nedge+2) + real*8 dp2,rhop + real*8 xp(3,nbnd) + real*8 begth,endth + real*8 t,cost2,e2 + real*8 one,tol + real*8 x0 + real*8 y0 + real*8 z0 + real*8 a,r2 +c + parameter (one=1.0d0) + parameter (tol=1.0d-14) +c parameter (tol=1.0d-8) +c +c ================================================================ + if(begth+one.gt.-tol) then + n=1 + tnode(1)=begth + else + n=0 + endif + r2=r*r + do i=1,nbnd + rhop=xp(1,i)*xp(1,i)+xp(2,i)*xp(2,i) + dp2=rhop+xp(3,i)*xp(3,i) + if (r2.gt.dp2) then + if(np_index(1).ne.i .and. np_index(2).ne.i) then + cost2 = sqrt((r2-dp2)*rhop/dp2) +c + do i1=1,2 + z0=xp(3,i)+cost2 + if(z0.gt.r) z0=r + if(z0.lt.-r) z0=-r + a=sqrt((r2-z0*z0)/rhop) + x0=xp(1,i)*a + y0=xp(2,i)*a + if(sigma(x0,y0,z0,xp,nbnd,1).eq.1.or. + & sigma(-x0,-y0,z0,xp,nbnd,1).eq.1) then + n=n+1 + tnode(n)=z0/r + endif + cost2=-cost2 + enddo +c + end if + end if + enddo + if (n.gt.1) then + call cleanup(tnode,n,tol,endth) + end if +c +c ================================================================ +c look for tnode by solving: +c +c -> -> 2 2 +c ( p + t * e ) = r +c i i +c +c -> -> +c r * tnode = ( p + t * e ) +c i i z +c ================================================================ + do i=1,nedge + dn2=edgp(1,i)*edgp(1,i)+edgp(2,i)*edgp(2,i)+edgp(3,i)*edgp(3,i) + if (r2.gt.dn2) then + e2=edge(1,i)*edge(1,i)+edge(2,i)*edge(2,i)+ + & edge(3,i)*edge(3,i) + t=sqrt((r2-dn2)/e2) +c + do i1=1,2 + x0=edgp(1,i)+t*edge(1,i) + y0=edgp(2,i)+t*edge(2,i) + z0=edgp(3,i)+t*edge(3,i) + if(sigma(x0,y0,z0,xp,nbnd,1).eq.1) then + n=n+1 + tnode(n)=z0/r + endif + t=-t + enddo + end if + enddo +c + if (n.gt.1) then + call cleanup(tnode,n,tol,endth) + end if + if(endth-one.gt.tol) then + node=n + else + n=n+1 + tnode(n)=endth + node=n + endif +c write(6,'(/,'' the number of tnode = '',i4)')node +c write(6,'( '' tnode:: '',i4,2x,1e15.8)') +c > (i,tnode(i),i=1,node) +c + return + end + + subroutine cleanup(tnode,node,tol,endth) + implicit real*8 (a-h,o-z) + real*8 tnode(node) + n=1 +c ------------------------------------------------------------- + call sort(node,tnode) +c ------------------------------------------------------------- + do i=2,node + if ( abs(tnode(i)-tnode(n)).gt.tol .and. + > tnode(i).lt.endth) then + n=n+1 + tnode(n)=tnode(i) + end if + end do + node=n + + return + end diff --git a/src/VORPOL/celbnd.f b/src/VORPOL/celbnd.f new file mode 100755 index 000000000..379b1ab27 --- /dev/null +++ b/src/VORPOL/celbnd.f @@ -0,0 +1,42 @@ + subroutine celbnd(x0,y0,z0, + > xp,nbnd, + > x,y,z,n,incr) +c ================================================================ +c + implicit none +c + integer n + integer nbnd + integer incr + integer m + integer sigma +c + real*8 x0 + real*8 y0 + real*8 z0 + real*8 x(n+1) + real*8 y(n+1) + real*8 z(n+1) + real*8 xp(3,nbnd) + real*8 tol +c + parameter (tol=1.0d-10) +c + incr=0 + if (sigma(x0,y0,z0,xp,nbnd,1).eq.1) then + do m=1,n + if (abs(x0-x(m)).lt.tol .and. + > abs(y0-y(m)).lt.tol .and. + > abs(z0-z(m)).lt.tol) then + return + end if + end do + incr=1 + n=n+1 + x(n)=x0 + y(n)=y0 + z(n)=z0 + end if +c + return + end diff --git a/src/VORPOL/chkbnd.f b/src/VORPOL/chkbnd.f new file mode 100755 index 000000000..647f1f9ca --- /dev/null +++ b/src/VORPOL/chkbnd.f @@ -0,0 +1,83 @@ + subroutine chkbnd(x0,y0,z0,r02,i0, + > xp,dp2,nbnd,isigma) +c ================================================================ +c + implicit none +c + integer i0 + integer nbnd + integer isigma + integer j + integer jp + integer k + integer kp + integer njoint + integer ierr + integer nbm1 + integer nbm2 + integer incr +c + real*8 x0 + real*8 y0 + real*8 z0 + real*8 r02 + real*8 xp(3,nbnd) + real*8 dp2(nbnd) + real*8 xm(9) + real*8 xminv(9) + real*8 xc(4) + real*8 yc(4) + real*8 zc(4) +c +c **************************************************************** +c check if the plane defined by (x0,y0,z0) is an actual boundary +c plane........................................................... +c **************************************************************** +c +c ================================================================ +c The idea is to find the number of joint points with any other +c two planes not being outside the polyhedron. If it is more than +c three, the plane is a boundary plane............................ +c ================================================================ + xm(1)=x0/r02 + xm(2)=y0/r02 + xm(3)=z0/r02 + njoint=0 + nbm2=nbnd-2 + nbm1=nbnd-1 + kp=0 + do while(njoint.le.2 .and. kp.le.nbm2) + kp=kp+1 + k=mod(kp+i0-1,nbnd)+1 + xm(4)=xp(1,k)/dp2(k) + xm(5)=xp(2,k)/dp2(k) + xm(6)=xp(3,k)/dp2(k) + do jp=kp+1,nbm1 + j=mod(jp+i0-1,nbnd)+1 +c write(6,'(''i0,k,j ='',3i5)')i0,k,j + xm(7)=xp(1,j)/dp2(j) + xm(8)=xp(2,j)/dp2(j) + xm(9)=xp(3,j)/dp2(j) +c ---------------------------------------------------------- + call invm3(xm,xminv,ierr) +c ---------------------------------------------------------- + if(ierr.eq.0) then +c ------------------------------------------------------- + call celbnd(xminv(1)+xminv(2)+xminv(3), + > xminv(4)+xminv(5)+xminv(6), + > xminv(7)+xminv(8)+xminv(9), + > xp,nbnd, + > xc,yc,zc,njoint,incr) +c ------------------------------------------------------- + endif + enddo + enddo +c + if(njoint.ge.3) then + isigma=1 + else + isigma=0 + endif +c + return + end diff --git a/src/VORPOL/chkedge.f b/src/VORPOL/chkedge.f new file mode 100755 index 000000000..7a3d85abe --- /dev/null +++ b/src/VORPOL/chkedge.f @@ -0,0 +1,126 @@ + subroutine chkedge(x0,y0,z0,i,xm, + > xp,dp2,nbnd,isigma) +c ================================================================ +c returns pij in xm(4..6), eij in xm(8..9) +c + implicit none +c + integer nbnd + integer isigma + integer i,j,ierr +c + real*8 x0,y0,z0 + real*8 xm(9),xminv(9) + real*8 pxy,pyz,pzx + real*8 eijx + real*8 eijy + real*8 eijz + real*8 xp(3,nbnd) + real*8 dp2(nbnd) + real*8 p2mpr + real*8 pe + real*8 t + real*8 tlt + real*8 tgt + real*8 zero,one + real*8 tol +c + parameter (zero=0.d0) + parameter (one=1.d0) + parameter (tol=1.0d-10) +c + isigma=0 +c ========================================================== +c look for vector eij first by solving equations: +c +c -> -> +c e * R = 0 +c i i +c +c -> -> +c e * R = 0 +c i 0 +c ========================================================== + pxy=xp(1,i)*y0-x0*xp(2,i) + pyz=xp(2,i)*z0-y0*xp(3,i) + pzx=xp(3,i)*x0-z0*xp(1,i) + if(abs(pxy) .gt. tol) then + eijz=one + eijx=(xp(2,i)*z0-y0*xp(3,i))/pxy + eijy=(x0*xp(3,i)-xp(1,i)*z0)/pxy + else if(abs(pyz) .gt. tol) then + eijx=one + eijy=(xp(3,i)*x0-z0*xp(1,i))/pyz + eijz=(y0*xp(1,i)-xp(2,i)*x0)/pyz + else if(abs(pzx) .gt. tol) then + eijy=one + eijz=(xp(1,i)*y0-x0*xp(2,i))/pzx + eijx=(xp(3,i)*y0-z0*xp(2,i))/pzx + else +c ======================================================= +c plane i is parallel to plane j. +c ======================================================= + return + endif +c ========================================================== +c look for vector pij by solving equations: +c +c -> -> 2 +c p * R = R +c ij j j +c +c -> -> 2 +c p * R = R +c ij i i +c +c -> -> +c p * e = 0 +c ij ij +c ========================================================== + xm(4)=xp(1,i)/dp2(i) + xm(5)=xp(2,i)/dp2(i) + xm(6)=xp(3,i)/dp2(i) + xm(7)=eijx + xm(8)=eijy + xm(9)=eijz +c ---------------------------------------------------------- + call invm3(xm,xminv,ierr) +c ---------------------------------------------------------- + if(ierr.ne.0) then + write(6,'(''chkedge: Cannot find pij.'')') + stop'chkedge' + endif + xm(4)=xminv(1)+xminv(2) + xm(5)=xminv(4)+xminv(5) + xm(6)=xminv(7)+xminv(8) +c ========================================================== +c check if there is any portion of the edge inside the +c voronoi polyhedron..................................... +c **************************************************************** +c check if the edge is outside the polyhedron, returns isigma: +c +c isigma = 0, if outside +c = 1, otherwise +c **************************************************************** +c + tlt= 1.0d+30 + tgt=-1.0d+30 + do j=1,nbnd + p2mpr=dp2(j)-xp(1,j)*xm(4)-xp(2,j)*xm(5)-xp(3,j)*xm(6) + pe=xp(1,j)*eijx+xp(2,j)*eijy+xp(3,j)*eijz + if(abs(pe).le.tol) then + if(p2mpr.lt.-tol) return + else + t=p2mpr/pe + if(pe.gt.zero) then + if(t.lt.tlt) tlt=t + else + if(t.gt.tgt) tgt=t + endif + endif + enddo +c + if(tlt-tgt .ge. tol) isigma=1 +c + return + end diff --git a/src/VORPOL/filter_edge.f b/src/VORPOL/filter_edge.f new file mode 100755 index 000000000..f3b019693 --- /dev/null +++ b/src/VORPOL/filter_edge.f @@ -0,0 +1,68 @@ + subroutine filter_edge(x0,y0,z0,r02,i0, + > xp,dp2,nbnd,isigma,i) +c ================================================================ +c + implicit none +c + integer i0 + integer nbnd + integer isigma + integer i + integer ip +c + real*8 x0 + real*8 y0 + real*8 z0 + real*8 r02 + real*8 xp(3,nbnd) + real*8 dp2(nbnd) + real*8 xm(9) + real*8 ptest + real*8 tol +c + parameter (tol=1.0d-10) +c +c **************************************************************** +c check if the plane defined by (x0,y0,z0) is an possible boundary +c plane........................................................... +c +c The idea is to determine the edge formed by this plane and any +c other one is partially inside the polyhedron................... +c **************************************************************** +c +c ================================================================ +c Look for edges. edges are represented by two vectors and one +c parameters as: +c -> -> +c p + t * e +c n n +c where: +c -> +c p = the vector starting from the origin and endind at and +c n perpendicular to the edge +c -> +c e = a vector parallel to the edge. +c n +c t = a real parameter. +c ================================================================ +c + xm(1)=x0/r02 + xm(2)=y0/r02 + xm(3)=z0/r02 + do ip=1,nbnd-1 + i=mod(ip+i0-1,nbnd)+1 + ptest = sqrt(dp2(i)*r02)-abs(xp(1,i)*x0+xp(2,i)*y0+xp(3,i)*z0) + if (ptest.gt.tol) then +c ========================================================== +c check if there is any portion of the edge inside the +c voronoi polyhedron..................................... +c ---------------------------------------------------------- + call chkedge(x0,y0,z0,i,xm, + > xp,dp2,nbnd,isigma) +c ---------------------------------------------------------- + if(isigma.eq.1) return + endif + enddo +c + return + end diff --git a/src/VORPOL/inter.f b/src/VORPOL/inter.f new file mode 100755 index 000000000..493b8e12e --- /dev/null +++ b/src/VORPOL/inter.f @@ -0,0 +1,84 @@ +c ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine inter(zj_flag,lmax, + > pnrel,matom_left,matom_right, + > r_sph, + > ngaussr, + > cgnt,lmax_cg, + > pzz,pzj, + & ncrit,grwylm,gwwylm,wylm, + > iprint,istop) +c ================================================================= +c + implicit none +c +! include 'vorpol.h' +c + character sname*32 + character istop*32 +c + integer zj_flag + integer lmax,lmax_cg + integer ngaussr + integer iprint + integer ncrit +c + real*8 r_sph + real*8 cgnt(lmax_cg+1,(lmax_cg+1)**2,(lmax_cg+1)**2) + + real*8 grwylm(*),gwwylm(*) +c + complex*16 pnrel + complex*16 matom_left(0:lmax) + complex*16 matom_right(0:lmax) + complex*16 bj(0:lmax) + complex*16 bh(0:lmax) + complex*16 pzz((lmax+1)**2,(lmax+1)**2) + complex*16 pzj + + complex*16 wylm(*) +c + parameter (sname='inter') +c +c ***************************************************************** +c returns: +c +c Rs 3-> -> ^ -> -> +c pzz = + int d r * Z (r)*Z (r)*Sigma(r) +c 0 L L' +c +c Rs 3-> -> ^ -> -> +c pzj = + int d r * Z (r)*J (r)*Sigma(r) * delta +c 0 L L' LL' +c +c ***************************************************************** +c +c ----------------------------------------------------------------- + + call interstitial(zj_flag,lmax, + > pnrel,matom_left,matom_right, + > r_sph, + > ncrit,ngaussr, + > grwylm,gwwylm,wylm, + > cgnt,lmax_cg, + > pzz,pzj,bj,bh) +c +c ================================================================= +c printout if needed............................................... + if (iprint.ge.1.and.iprint.lt.100) then + write(6,'(/,'' INTER:: pzz interstial only'')') +c ------------------------------------------------------------- + call wrtmtx(pzz,(lmax+1)**2,istop) +c ------------------------------------------------------------- + write(6,'(/,'' INTER:: pzj interstial only'',1p2e18.9)') + & pzj +c ------------------------------------------------------------- + endif +c +c ================================================================= + if (istop.eq.sname) then + call fstop(sname) + else + return + endif +c + end diff --git a/src/VORPOL/inter_dip.f b/src/VORPOL/inter_dip.f new file mode 100755 index 000000000..afad5f534 --- /dev/null +++ b/src/VORPOL/inter_dip.f @@ -0,0 +1,62 @@ + subroutine inter_dip(lmax,ncrit,ngaussr,omegint, + > grwylm,gwwylm,wylm,dipole,vdipole) +c ================================================================= +c + implicit none +c + integer lmax,ncrit + integer ir + integer m1 + integer iwylm + integer ng + integer ngaussr +c + real*8 rgauss,omegint + real*8 gwwylm(ngaussr,ncrit-1) + real*8 grwylm(ngaussr,ncrit-1) +c + complex*16 wylm((lmax+1)*(lmax+2)/2,ngaussr,ncrit-1) + complex*16 dipole(-1:1) + complex*16 vdipole(-1:1) + complex*16 steplm + complex*16 czero +c + parameter (czero=(0.0d0,0.0d0)) + real*8 pi,fourpi + parameter (pi=3.14159265358979d0) + parameter (fourpi=4.d0*pi) +c +c ================================================================= +c ----------------------------------------------------------------- + do m1=-1,1 + dipole(m1)=czero + vdipole(m1)=czero + enddo + do ir=1,ncrit-1 +c ============================================================== +c loop over the gaussian point in each region................... +c ============================================================== + do ng=1,ngaussr + rgauss=grwylm(ng,ir) + if(rgauss.gt.0.d0) then + do m1=-1,1 + iwylm= 2 + abs(m1) + if(m1.ge.0) then + steplm=wylm(iwylm,ng,ir) + else + steplm=(1-2*mod(abs(m1),2))*conjg(wylm(iwylm,ng,ir)) + endif + dipole(m1)=dipole(m1)+gwwylm(ng,ir)*steplm*rgauss + vdipole(m1)=vdipole(m1)+ + & gwwylm(ng,ir)*steplm/(3.d0*rgauss*rgauss) + enddo + endif ! rgauss.gt.zero + enddo + enddo + do m1=-1,1 + dipole(m1)=dipole(m1)*fourpi + vdipole(m1)=vdipole(m1)*fourpi + enddo +c + return + end diff --git a/src/VORPOL/interstitial.f b/src/VORPOL/interstitial.f new file mode 100755 index 000000000..c1d700a3e --- /dev/null +++ b/src/VORPOL/interstitial.f @@ -0,0 +1,160 @@ + subroutine interstitial(zj_flag,lmax, + > pnrel,matom_left,matom_right, + > r_sph, + > ncrit,ngaussr, + > grwylm,gwwylm,wylm, + > cgnt,lmax_cg, + > pzz,pzj,bj,bh) +c ================================================================= +c + implicit none +c + integer zj_flag + integer lmax,lmax_cg + integer ncrit + integer ir + integer lm1 + integer lm2 + integer l1 + integer m1 + integer l2 + integer m2 + integer l3 + integer m3 + integer iwylm + integer ng + integer ngaussr +c + real*8 r_sph + real*8 rgauss + real*8 cgnt(lmax_cg+1,(lmax_cg+1)**2,(lmax_cg+1)**2) + real*8 gwwylm(ngaussr,ncrit-1) + real*8 grwylm(ngaussr,ncrit-1) + real*8 pi,rt4pi + parameter (pi=3.141592653589793d0) +c + complex*16 pnrel + complex*16 wylm((2*lmax+1)*(lmax+1),ngaussr,ncrit-1) + complex*16 matom_left(0:lmax) + complex*16 matom_right(0:lmax) + complex*16 bj(0:lmax) + complex*16 bh(0:lmax) + complex*16 eiz + complex*16 pzz((lmax+1)**2,(lmax+1)**2) + complex*16 pzj + complex*16 zlzl + complex*16 zljl + complex*16 zlm1 + complex*16 zlm2 + complex*16 jlm1 + complex*16 steplm + complex*16 czero + complex*16 sqrtm1 +c + parameter (czero=(0.0d0,0.0d0)) + parameter (sqrtm1=(0.0d0,1.0d0)) +c +c ***************************************************************** +c returns: +c Rs 3-> -> ^ -> -> +c pzz = + int d r * Z (r)*Z (r)*Sigma(r) +c 0 L L' +c +c Rs 3-> -> ^ -> -> +c pzj = + int d r * Z (r)*J (r)*Sigma(r) * delta +c 0 L L' LL' +c +c ***************************************************************** +c +c ================================================================= +c For muffin-tin potentials and r=>Rmt, one has +c -> -> +c Z (r) = -p*[j (p*r)*cot(d ) - n (p*r)]*Y (r) +c L l l l L +c +c ^ -> * -> +c Z (r) = -p*[j (p*r)*cot(d ) - n (p*r)]*Y (r) +c L l l l L +c +c -> -> +c J (r) = j (p*r)*Y (r) +c L l L +c +c ^ -> * -> +c J (r) = j (p*r)*Y (r) +c L l L +c +c calculate the interstial integrals............................... +c loop over each region between MT-sphere and circumscibing sphere. +c ================================================================= +c ----------------------------------------------------------------- + call zeroout(pzz,2*(lmax+1)**4) + pzj=czero + rt4pi=sqrt(4.d0*pi) +c ----------------------------------------------------------------- + do ir=1,ncrit-1 +c ============================================================== +c loop over the gaussian point in each region................... +c ============================================================== + do ng=1,ngaussr + rgauss=grwylm(ng,ir) + if(rgauss.gt.0.d0) then +c ----------------------------------------------------------- + call zsphbesjh(lmax,pnrel*rgauss,bj,bh,eiz,1) +c ----------------------------------------------------------- + eiz=sqrtm1*eiz/rgauss +c =========================================================== +c loop over l1,m1............................................ +c =========================================================== + lm1=0 + do l1=0,lmax + zlm1=matom_left(l1)*bj(l1)-eiz*bh(l1) + jlm1=eiz*bh(l1)/matom_left(l1) + do m1=-l1,l1 + lm1=lm1+1 + zljl=0.d0 +c ======================================================== +c loop over l2,m2......................................... + lm2=0 + do l2=0,lmax + zlm2=matom_right(l2)*bj(l2)-eiz*bh(l2) + do m2=-l2,l2 + lm2=lm2+1 +c ===================================================== +c perform sum over l3,m3 with gaunt # and gaussian wt.. + zlzl=0.d0 + m3=m1-m2 + do l3=l1+l2,max(abs(m3),abs(l1-l2)),-2 + iwylm= (l3*(l3+1))/2 + abs(m3) +1 +c theta(r) is formed with sum_lm3 steplm*Ylm +c cgnt(lm,lmp,lmpp)=int dO Y(lm),Y(lmp),Y(lmpp)^* + if(m3.ge.0) then + steplm=wylm(iwylm,ng,ir) + else + steplm=(1-2*mod(abs(m3),2))* + & conjg(wylm(iwylm,ng,ir)) + endif + if(l3.eq.0) then + if(abs(rgauss-r_sph).lt.1.d-10) then + steplm=steplm-0.5d0*rt4pi + else if(rgauss.lt.r_sph) then + steplm=steplm-rt4pi + endif + endif + zlzl=zlzl+cgnt(l3/2+1,lm2,lm1)*steplm + if(lm2.eq.lm1 .and. zj_flag.eq.1) then + zljl=zljl+cgnt(l3/2+1,lm2,lm1)*steplm + endif + enddo + pzz(lm2,lm1)=pzz(lm2,lm1)+zlzl*zlm1*zlm2*gwwylm(ng,ir) + enddo + enddo + pzj=pzj+zljl*zlm1*jlm1*gwwylm(ng,ir) + enddo + enddo + endif ! rgauss.gt.zero + enddo + enddo +c + return + end diff --git a/src/VORPOL/intphi.f b/src/VORPOL/intphi.f new file mode 100755 index 000000000..b75aa6fbb --- /dev/null +++ b/src/VORPOL/intphi.f @@ -0,0 +1,157 @@ + subroutine intphi(lmax,cosrth,r, + > xp,nbnd, + > sumfi) +c ================================================================ +c + implicit real*8 (a-h,o-z) +c + integer sigma +c + real*8 cosrth + real*8 ford(50) + real*8 xp(3,nbnd) + real*8 dp2,rhop + real*8 zero + real*8 one + real*8 two + real*8 half + real*8 macherr +c + complex*16 sumfi(0:lmax) + complex*16 sqrtm1 + complex*16 czero + complex*16 dummy1,dummy2,exp1,exp2 +c + parameter (zero=0.0d0) + parameter (one=1.0d0) + parameter (two=2.0d0) + parameter (half=0.5d0) + parameter (sqrtm1=(0.0d0,1.0d0)) + parameter (czero=(0.0d0,0.0d0)) + parameter (pi=3.141592653589793d0) + parameter (halfpi=half*pi) + parameter (twopi=two*pi) + parameter (macherr=1.d-12) +c + sinrth=sqrt(one-cosrth*cosrth) + z=r*cosrth + rho=r*sinrth +c +c ================================================================ +c find those circle portions within the w-s boundary, and only +c integrate over phi through them. the value of phi for both +c ending points of any portion on the boundary are stored in +c ford. +c ================================================================ +c + mp=1 + ford(mp)=zero + do ip=1,nbnd +c +c ============================================================= +c rp = the distance of the plane from the origin. +c if r < rp the curve does not touch the plane. +c if r = rp the curve touches the plane. +c if r > rp the curve intersects with the plane. +c mp = the number of intersection points. +c ============================================================= +c + rhop=xp(1,ip)*xp(1,ip)+xp(2,ip)*xp(2,ip) + dp2=rhop+xp(3,ip)*xp(3,ip) + if(r*r.gt.dp2.and.rhop.gt.macherr*macherr) then + rhop=sqrt(rhop) + a=(dp2-xp(3,ip)*z)/(rho*rhop) + if(abs(a) .le. one+macherr) then + if(abs(a).gt.one) a=a/abs(a) + if(abs(xp(2,ip)) .le. macherr) then + fi1=halfpi*(one-sign(one,xp(1,ip))) + else if(xp(2,ip) .ge. zero) then + fi1=acos(xp(1,ip)/rhop) + else + fi1=twopi-acos(xp(1,ip)/rhop) + endif + fi2=acos(a) + mp=mp+1 + f=fi1-fi2 + if (f.ge.zero) then + ford(mp)=f + else + ford(mp)=twopi+f + end if + mp=mp+1 + f=fi1+fi2 + if (f.lt.twopi) then + ford(mp)=f + else + ford(mp)=f-twopi + endif + endif + endif + enddo + mp=mp+1 + ford(mp)=twopi +c +c ================================================================ +c sort ford so that : ford(1) < ford(2) < ... < ford(mp). +c ================================================================ +c +c ---------------------------------------------------------------- + call sort(mp,ford) +c ---------------------------------------------------------------- +c write(6,'(/,'' the number of phi = '',i4)')mp +c write(6,'( '' ford:: '',i4,2x,1p1e16.9)') +c > (ip,ford(ip),ip=1,mp) +c +c ================================================================ +c start the phi integration. +c ================================================================ +c + do m=0,lmax + sumfi(m)=czero + enddo + exp1=exp(-sqrtm1*ford(1)) + exp2=one + do ip=1,mp-1 +c phi1=ford(ip) +c phi2=ford(ip+1) + phi=ford(ip+1)-ford(ip) + exp1=exp1*conjg(exp2) + exp2=exp(sqrtm1*half*phi) +c exp1=exp(-sqrtm1*half*(phi1+phi2)) + exp1=exp1*conjg(exp2) +c +c ================================================================ +c sigma: = 1 if curve between ford(i) and +c ford(i+1) is within the cell. +c = 0 otherwise. +c +c i = 1,2,...,mp-1 +c ================================================================ +c + fh=half*(ford(ip)+ford(ip+1)) + x=rho*cos(fh) + y=rho*sin(fh) +c +c ============================================================= +c check if the point (x,y,z) is inside or outside the +c polyhedron. +c ============================================================= +c + if(sigma(x,y,z,xp,nbnd,0).eq.1) then +c + sumfi(0)=sumfi(0)+phi + dummy1=one + dummy2=one + do m=1,lmax + dummy1=dummy1*exp1 + dummy2=dummy2*exp2 + sumfi(m) = sumfi(m) + dummy1*dimag(dummy2) + enddo + endif ! sigma=1 + enddo + do m=1,lmax + sumfi(m)=two*sumfi(m)/m + enddo +c + return + end diff --git a/src/VORPOL/intpl0.f b/src/VORPOL/intpl0.f new file mode 100755 index 000000000..2dba9c5e4 --- /dev/null +++ b/src/VORPOL/intpl0.f @@ -0,0 +1,55 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine intpl0(x1,x2,lmax,yl) +c ================================================================ +c +c **************************************************************** +c x2 0 +c calculate the integration: inte {dx P (x)} +c x1 l +c +c and store in intpl0. +c **************************************************************** +c + implicit none +c + integer lmax + integer l +c + real*8 x1 + real*8 x2 + real*8 p0x1 + real*8 p0x2 + real*8 p1x1 + real*8 p1x2 + real*8 p2x1 + real*8 p2x2 + real*8 yl(0:lmax) + real*8 one, pi +c + parameter (one=1.0d0) + parameter (pi=3.141592653589793d0) +c + p0x1=one + p0x2=one + p1x1=x1 + p1x2=x2 + yl(0)=x2-x1 +c + do l=2,lmax+1 + p2x1=((2*l-1)*x1*p1x1-(l-1)*p0x1)/dble(l) + p2x2=((2*l-1)*x2*p1x2-(l-1)*p0x2)/dble(l) + yl(l-1)=(p2x2-p2x1-x2*p1x2+x1*p1x1)/dble(l-1) + p0x1=p1x1 + p0x2=p1x2 + p1x1=p2x1 + p1x2=p2x2 + enddo +c +! meis: transform to normalized Legendre functions + do l=0,lmax + yl(l)=yl(l)*sqrt(dble(2*l+1)/(4.0d0*pi)) + end do + + return + end diff --git a/src/VORPOL/invm3.f b/src/VORPOL/invm3.f new file mode 100755 index 000000000..4fb0e4ae4 --- /dev/null +++ b/src/VORPOL/invm3.f @@ -0,0 +1,46 @@ + subroutine invm3(xm,xminv,ierr) +c ================================================================ +c Inverts a 3x3 real*8 matrix +c +c Inputs: xm real*8 array of (3,3), the 3x3 matrix +c Returns:xminv real*8 array of (3,3), inverse of xm +c ierr error code, 0 if inversion is successful, 1 if xm is singular +c + implicit none +c + integer ierr +c + real*8 xm(3,3) + real*8 xminv(3,3) + real*8 det + real*8 t1,t2,t3,t0 + real*8 tol +c + parameter (tol=1.d-10) +c + t1=xm(2,2)*xm(3,3)-xm(2,3)*xm(3,2) + t2=xm(2,1)*xm(3,3)-xm(2,3)*xm(3,1) + t3=xm(2,1)*xm(3,2)-xm(2,2)*xm(3,1) + det= xm(1,1)*t1 + > -xm(1,2)*t2 + > +xm(1,3)*t3 +c + if (abs(det) .lt. tol) then + ierr=1 + else + ierr=0 +c + t0=1.d0/det + xminv(1,1)=+t1*t0 + xminv(2,1)=-t2*t0 + xminv(3,1)=+t3*t0 + xminv(1,2)=-(xm(1,2)*xm(3,3)-xm(1,3)*xm(3,2))*t0 + xminv(2,2)=+(xm(1,1)*xm(3,3)-xm(1,3)*xm(3,1))*t0 + xminv(3,2)=-(xm(1,1)*xm(3,2)-xm(3,1)*xm(1,2))*t0 + xminv(1,3)=+(xm(1,2)*xm(2,3)-xm(1,3)*xm(2,2))*t0 + xminv(2,3)=-(xm(1,1)*xm(2,3)-xm(2,1)*xm(1,3))*t0 + xminv(3,3)=+(xm(1,1)*xm(2,2)-xm(2,1)*xm(1,2))*t0 + end if +c + return + end diff --git a/src/VORPOL/polyhedron.f b/src/VORPOL/polyhedron.f new file mode 100755 index 000000000..ae0908e01 --- /dev/null +++ b/src/VORPOL/polyhedron.f @@ -0,0 +1,159 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine polyhedron(xp,dp2,nbnd, + > corn,dc2,ipcorn,ncorn,indxc, + > edge,edgp,ipedge,nedge) +c ================================================================ +c +c **************************************************************** +c Look for those corners and edges of the polyhedron, consists of +c boundary planes given by xp(1), xp(2), xp(3) +c **************************************************************** +c + implicit none +c + integer nbnd + integer ipcorn,ncorn + integer ipedge,nedge + integer n + integer k + integer i + integer j + integer ierr + integer incr + integer isigma +c + real*8 corn(ipcorn,3) + real*8 dc2(ipcorn) + integer indxc(ipcorn) + real*8 edge(3,ipedge) + real*8 edgp(3,ipedge) + real*8 xm(3,3) + real*8 xminv(3,3) + real*8 xp(3,nbnd),dp2(nbnd) + real*8 x0 + real*8 y0 + real*8 z0 + real*8 ptest + real*8 tol +c + parameter (tol=1.0d-10) + real*8 x,y,z,length2 + length2(x,y,z)=x*x+y*y+z*z +c +c ================================================================ +c The equation of a plane is: +c xp * x + yp * y + zp * z = d2, +c where: +c d2 = xp**2+yp**2+zp**2 +c +c Look for corners by solving the equations: +c xp1 * x + yp1 * y + zp1 * z = d12 +c xp2 * x + yp2 * y + zp2 * z = d22 +c xp3 * x + yp3 * y + zp3 * z = d32 +c ================================================================ + do k=1,nbnd + dp2(k)=length2(xp(1,k),xp(2,k),xp(3,k)) + enddo + n=0 + do k=1,nbnd-2 + xm(1,1)=xp(1,k)/dp2(k) + xm(2,1)=xp(2,k)/dp2(k) + xm(3,1)=xp(3,k)/dp2(k) + do j=k+1,nbnd-1 + xm(1,2)=xp(1,j)/dp2(j) + xm(2,2)=xp(2,j)/dp2(j) + xm(3,2)=xp(3,j)/dp2(j) + do i=j+1,nbnd + xm(1,3)=xp(1,i)/dp2(i) + xm(2,3)=xp(2,i)/dp2(i) + xm(3,3)=xp(3,i)/dp2(i) +c ------------------------------------------------------- + call invm3(xm,xminv,ierr) +c ------------------------------------------------------- + if(ierr.eq.0) then + x0=xminv(1,1)+xminv(2,1)+xminv(3,1) + y0=xminv(1,2)+xminv(2,2)+xminv(3,2) + z0=xminv(1,3)+xminv(2,3)+xminv(3,3) +c ---------------------------------------------------- + call celbnd(x0,y0,z0, + > xp,nbnd, + > corn(1,1),corn(1,2),corn(1,3),n,incr) +c ---------------------------------------------------- + if(incr.eq.1) then + if(n.gt.ipcorn) then + write(6,'(''polyhedron: n > ipcorn='',i3)') + & ipcorn + stop'polyhedron' + endif + dc2(n)=length2(corn(n,1),corn(n,2),corn(n,3)) + endif + endif + enddo + enddo + enddo + ncorn=n + if(ncorn.gt.1) then +c ------------------------------------------------------------- + call sortidx(ncorn,dc2,indxc) +c ------------------------------------------------------------- + endif +c +c ================================================================ +c Look for edges. edges are represented by two vectors and one +c parameters as: +c -> -> +c p + t * e +c n n +c where: +c -> +c p = the vector starting from the origin and ending +c n perpendicular to the edge +c -> +c e = a vector parallel to the edge. +c n +c t = a real parameter. +c ================================================================ + n=0 + do j=1,nbnd-1 + xm(1,1)=xp(1,j)/dp2(j) + xm(2,1)=xp(2,j)/dp2(j) + xm(3,1)=xp(3,j)/dp2(j) + do 10 i=j+1,nbnd + ptest = sqrt(dp2(i)*dp2(j)) + > -abs(xp(1,i)*xp(1,j)+xp(2,i)*xp(2,j)+xp(3,i)*xp(3,j)) + if(ptest.gt.tol) then +c ======================================================= +c look for vectors eij and pij +c check if there is any portion of the edge inside the +c voronoi polyhedron..................................... +c ------------------------------------------------------- + call chkedge(xp(1,j),xp(2,j),xp(3,j),i,xm, + > xp,dp2,nbnd,isigma) +c ------------------------------------------------------- + if(isigma.eq.1) then + n=n+1 + if(n.gt.ipedge) then + write(6,'(''polyhedron: n > ipedge='',i3)') ipedge + stop'polyhedron' + endif + edgp(1,n)=xm(1,2) + edgp(2,n)=xm(2,2) + edgp(3,n)=xm(3,2) + edge(1,n)=xm(1,3) + edge(2,n)=xm(2,3) + edge(3,n)=xm(3,3) + endif + endif +10 continue + enddo + nedge=n +c + if(nbnd.gt.1) then +c ------------------------------------------------------------- + call sort(nbnd,dp2) +c ------------------------------------------------------------- + endif + + return + end diff --git a/src/VORPOL/rcritpts.f b/src/VORPOL/rcritpts.f new file mode 100755 index 000000000..d64d0c8ce --- /dev/null +++ b/src/VORPOL/rcritpts.f @@ -0,0 +1,76 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine rcritpts(rcrit,ncrit, + > rmt2,rcs2, + > xp,nbnd, + > dc2,ncorn, + > edgp,nedge, + > runion) +c ================================================================ +c + implicit none +c + integer ncrit + integer nbnd + integer ncorn + integer nedge + integer iunion + integer i + integer sigma +c + real*8 dc2(ncorn) + real*8 runion(nbnd+ncorn+nedge+1) + real*8 rcrit(*) + real*8 rtol + real*8 rmt2,rcs2 + real*8 xp(3,nbnd) + real*8 edgp(3,nedge) +c + parameter (rtol=1.0d-10) +c +c ================================================================ +c joint tables of possible critical points........................ + iunion=1 + runion(1)=rmt2 + do i=1,nbnd + if(sigma(xp(1,i),xp(2,i),xp(3,i),xp,nbnd,1).eq.1) then + iunion=iunion+1 + runion(iunion)=xp(1,i)*xp(1,i)+xp(2,i)*xp(2,i)+xp(3,i)*xp(3,i) + endif + enddo + do i=1,ncorn + runion(iunion+i)=dc2(i) + enddo + iunion=iunion+ncorn + do i=1,nedge + if(sigma(edgp(1,i),edgp(2,i),edgp(3,i),xp,nbnd,1).eq.1) + & then + iunion=iunion+1 + runion(iunion)= + & edgp(1,i)*edgp(1,i)+edgp(2,i)*edgp(2,i)+edgp(3,i)*edgp(3,i) + endif + enddo +c ================================================================ +c sort the table of possible critical points...................... +c ---------------------------------------------------------------- + call sort(iunion,runion) +c ---------------------------------------------------------------- +c ================================================================ +c obtain list of unique critical points........................... + ncrit=1 + rcrit(1)=runion(1) + do i=2,iunion + if(abs(rcrit(ncrit)-runion(i)).gt.rtol .and. + > (runion(i)-rcs2).le.rtol) then + ncrit=ncrit+1 + rcrit(ncrit)=runion(i) + endif + enddo + do i=1,ncrit + rcrit(i)=sqrt(rcrit(i)) + enddo +c +c ================================================================ +c + return + end diff --git a/src/VORPOL/setupVorpol.cpp b/src/VORPOL/setupVorpol.cpp new file mode 100644 index 000000000..50701ef90 --- /dev/null +++ b/src/VORPOL/setupVorpol.cpp @@ -0,0 +1,105 @@ +#include "Main/SystemParameters.hpp" +#include "Communication/LSMSCommunication.hpp" +#include "Misc/Coeficients.hpp" +#include "VORPOL.hpp" + +void setupVorpol(LSMSSystemParameters &lsms, CrystalParameters &crystal, LocalTypeInfo &local,SphericalHarmonicsCoeficients &shc) +{ + int ipvp=50; // parameter from LSMS_1.9 vorpol.h + int iprcrit=260; + int ipnode=ipvp*(ipvp-1); + int ipcorn=(ipvp*(ipvp-1)*(ipvp-2))/6; + int ipedge=(ipvp*ipvp-1)/2; + const Real sphereVolumeFactor=4.0*M_PI/3.0; + + std::vector atom_position_1(crystal.num_atoms); + std::vector atom_position_2(crystal.num_atoms); + std::vector atom_position_3(crystal.num_atoms); + std::vector rad(crystal.num_atoms); + for(int i=0; i= 0) + { + printf("\n"); + printf("Total cell volume = %20.13f\n", lsms.volumeTotal); + printf("Volume renorm. factor = %20.13f\n", lsms.volumeNorm); + printf("WS cell volume = %20.13f\n", local.atom[0].omegaWS); + printf("Interstitial volume = %20.13f\n", lsms.volumeInterstitial); + printf("WS sphere radius = %20.13f\n", local.atom[0].rws); + } +} diff --git a/src/VORPOL/setup_boundary.f b/src/VORPOL/setup_boundary.f new file mode 100755 index 000000000..dc12db58b --- /dev/null +++ b/src/VORPOL/setup_boundary.f @@ -0,0 +1,304 @@ +c ============================================================= + subroutine setup_boundary(i_seed,num_seeds, + > seedx,seedy,seedz, + > bravais_1,bravais_2,bravais_3, + > vp,ipvp,num_neighbors,rad) +c ============================================================= +c + implicit none +c + integer n_max + parameter (n_max = 2) + integer max_planes + parameter (max_planes = 100) +c + integer i_seed + integer num_seeds + integer num_neighbors + integer id_neighbor(max_planes) + integer tempid(max_planes) + integer j_seed + integer nm1 + integer isigma + integer n0 + integer in((2*n_max+1)**3) + integer jn((2*n_max+1)**3) + integer kn((2*n_max+1)**3) + integer n1 + integer n2 + integer n3 + integer i0 + integer j0 + integer k0 + integer i + integer j + integer k + integer n + integer id + integer nb + integer nbt + integer checked(max_planes) +c + real*8 bravais_1(3) + real*8 bravais_2(3) + real*8 bravais_3(3) + real*8 seedx(num_seeds) + real*8 seedy(num_seeds) + real*8 seedz(num_seeds) + real*8 shift_x + real*8 shift_y + real*8 shift_z + integer ipvp + real*8 vp(3,ipvp) + real*8 temp(3,max_planes) + real*8 tmpr2(max_planes) + real*8 x0 + real*8 y0 + real*8 z0 + real*8 x + real*8 y + real*8 z + real*8 r2 + real*8 xt + real*8 yt + real*8 zt + real*8 r2t + real*8 half + real*8 tol + real*8 rad(num_seeds) + real*8 rad2my + real*8 rlam + real*8 one +c + parameter (half=0.5d0) + parameter (one=1.0d0) + parameter (tol=1.0d-06) +c +c *************************************************************** +c Calculate boundary planes of the Voronoi polyhedron............ +c *************************************************************** +c + rad2my=rad(i_seed)**2 + x0=seedx(i_seed) + y0=seedy(i_seed) + z0=seedz(i_seed) +c +c =============================================================== +c determine i,j,k data set....................................... +c =============================================================== + n1=n_max + n2=n_max + n3=n_max + n0=0 + do 1 i0=-n1,n1 + do 1 j0=-n2,n2 + do 1 k0=-n3,n3 + n0=n0+1 + in(n0)=i0 + jn(n0)=j0 + kn(n0)=k0 + 1 continue +c + j=0 + do n=1,n0 + shift_x= in(n)*bravais_1(1) + > +jn(n)*bravais_2(1) + > +kn(n)*bravais_3(1) + > -x0 + shift_y= in(n)*bravais_1(2) + > +jn(n)*bravais_2(2) + > +kn(n)*bravais_3(2) + > -y0 + shift_z= in(n)*bravais_1(3) + > +jn(n)*bravais_2(3) + > +kn(n)*bravais_3(3) + > -z0 + do 110 j_seed=1,num_seeds + x=half*(seedx(j_seed)+shift_x) + y=half*(seedy(j_seed)+shift_y) + z=half*(seedz(j_seed)+shift_z) + r2=x*x+y*y+z*z + nb=j_seed + if(r2.lt.tol*tol) goto 110 +c -------------------------------------------------------------------- +c code for radical plane construction +c -------------------------------------------------------------------- + rlam=one+.25d0*(rad2my-rad(j_seed)**2)/r2 + x=rlam*x + y=rlam*y + z=rlam*z + r2=rlam**2*r2 +c -------------------------------------------------------------------- + id=1 + do k=1,j + id=k + if(abs(x-temp(1,k)).lt.tol .and. + > abs(y-temp(2,k)).lt.tol .and. + > abs(z-temp(3,k)).lt.tol) then + goto 110 + endif + if(r2.lt.tmpr2(k)) then + goto 100 + endif + enddo + id=j+1 + 100 continue + do k=id,j + xt=temp(1,k) + yt=temp(2,k) + zt=temp(3,k) + r2t=tmpr2(k) + nbt=tempid(k) + temp(1,k)=x + temp(2,k)=y + temp(3,k)=z + tmpr2(k)=r2 + tempid(k)=nb + x=xt + y=yt + z=zt + r2=r2t + nb=nbt + enddo + if(j.lt.max_planes) then + j=j+1 + temp(1,j)=x + temp(2,j)=y + temp(3,j)=z + tmpr2(j)=r2 + tempid(j)=nb + endif + 110 continue + enddo + nm1=j +c +c ================================================================ +c reduce nm1 to speed up the process of looking for boundary planes +c Warning: it may cause problems in some special situtaions....... +c ================================================================ + nm1=min(nm1,max_planes) +c + num_neighbors=0 + k=nm1 + j=1 + id=1 + n=0 + do while(id.le.nm1) +c ============================================================ +c check if [temp(x,j),temp(y,j),temp(z,j)] is an possible boundary +c plane. It is a preliminary check before chkbnd.............. +c ============================================================ + isigma=0 + do i=1,n + if(id.eq.checked(i)) then + isigma=1 + endif + enddo + if(isigma.eq.0) then +c --------------------------------------------------------- + call filter_edge(temp(1,j),temp(2,j),temp(3,j),tmpr2(j),j, + > temp,tmpr2,k,isigma,i) +c --------------------------------------------------------- + if(isigma.eq.1 .and. i.gt.j) then + n=n+1 + if(n.gt.max_planes) then + write(6,'(''setup_boundary: n > max_planes'')') + stop 'setup_boundary' + endif + checked(n)=i+nm1-k + endif + endif + if(isigma.eq.1) then + num_neighbors=num_neighbors+1 + if(num_neighbors.gt.ipvp) then + write(6,'(''setup_boundary: num_neighbors > ipvp'')') + stop 'setup_boundary' + endif + vp(1,num_neighbors)=temp(1,j) + vp(2,num_neighbors)=temp(2,j) + vp(3,num_neighbors)=temp(3,j) + id_neighbor(num_neighbors)=tempid(j) + j=j+1 + else + k=k-1 + do i=j,k + temp(1,i)=temp(1,i+1) + temp(2,i)=temp(2,i+1) + temp(3,i)=temp(3,i+1) + enddo + do i=j,k + tmpr2(i)=tmpr2(i+1) + enddo + do i=j,k + tempid(i)=tempid(i+1) + enddo + endif + id=id+1 + enddo +c + do j=1,num_neighbors + temp(1,j)=vp(1,j) + temp(2,j)=vp(2,j) + temp(3,j)=vp(3,j) + tmpr2(j)=vp(1,j)*vp(1,j)+vp(2,j)*vp(2,j)+vp(3,j)*vp(3,j) + enddo + do j=1,num_neighbors + tempid(j)=id_neighbor(j) + enddo + nm1=num_neighbors +c + num_neighbors=0 + k=nm1 + j=1 + id=1 + do while(id.le.nm1) +c ============================================================ +c check if [temp(x,j),temp(y,j),temp(z,j)] is an actual boundary +c plane +c ------------------------------------------------------------ + call chkbnd(temp(1,j),temp(2,j),temp(3,j),tmpr2(j),j, + > temp,tmpr2,k,isigma) +c ------------------------------------------------------------ + if(isigma.eq.1) then + num_neighbors=num_neighbors+1 + if(num_neighbors.gt.ipvp) then + write(6,'(''setup_boundary: num_neighbors > ipvp'')') + stop 'setup_boundary' + endif + vp(1,num_neighbors)=temp(1,j) + vp(2,num_neighbors)=temp(2,j) + vp(3,num_neighbors)=temp(3,j) + id_neighbor(num_neighbors)=tempid(j) + j=j+1 + else + k=k-1 + do i=j,k + temp(1,i)=temp(1,i+1) + temp(2,i)=temp(2,i+1) + temp(3,i)=temp(3,i+1) + enddo + do i=j,k + tmpr2(i)=tmpr2(i+1) + enddo + do i=j,k + tempid(i)=tempid(i+1) + enddo + endif + id=id+1 + enddo +c + if(num_neighbors.gt.max_planes) then + write(6,'('' The number of neighbors exceeds the limit:'', + > '' num_neighbors,max_planes ='',2i5)') + & num_neighbors,max_planes + stop'setup_boundary' + endif +c +c =============================================================== +c write(6,'(/,6x,''BOUNDARY PLANES:'')') +c write(6,'( 6x,2i5,3f10.5)') +c >(j,id_neighbor(j),vp(1,j),vp(2,j),vp(3,j),j=1,num_neighbors) +c =============================================================== +c + return + end diff --git a/src/VORPOL/setup_vorpol.f b/src/VORPOL/setup_vorpol.f new file mode 100755 index 000000000..7fecfe103 --- /dev/null +++ b/src/VORPOL/setup_vorpol.f @@ -0,0 +1,181 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine setup_vorpol(my_atom,num_atoms, + > atom_position_1, + > atom_position_2,atom_position_3, + > system_bravais, + > lmax,clm,ngaussq,ngaussr, + > rmt,omegint,dipint,rad, + & ipvp,ipnode,ipcorn,ipedge,iprcrit, + & gwwylm,grwylm, + & ncrit,wylm, + > iprint,istop) +c ================================================================ +c + implicit none +c +c **************************************************************** +! include 'vorpol.h' +c **************************************************************** +c + character sname*32 + character istop*32 +c + integer my_atom + integer num_atoms + integer lmax + integer ngaussq + integer ngaussr + integer iprint + integer nvplane + integer ncorn + integer nedge + integer i + + integer ipvp,ipnode,ipcorn,ipedge,iprcrit + integer ncrit +c + real*8 atom_position_1(num_atoms) + real*8 atom_position_2(num_atoms) + real*8 atom_position_3(num_atoms) + real*8 system_bravais(3,3) + real*8 vplane(3,ipvp) + real*8 rmt + real*8 omegint + real*8 clm((lmax+1)*(lmax+2)/2) +c + real*8 dp2(3*ipvp) + real*8 xp(3*ipvp) + real*8 corn(ipcorn,3) + real*8 dc2(ipcorn) + integer indxc(ipcorn) + real*8 edge(3*ipedge) + real*8 edgp(3*ipedge) + real*8 tnode(ipnode) + real*8 xgq(ngaussq) + real*8 wgq(ngaussq) + real*8 rcrit(iprcrit) + real*8 runion(ipvp+ipedge+ipcorn) + real*8 rad(num_atoms) +c +! real*8 plm((iplcut+1)*(iplcut+2)/2) + real*8 plm((lmax+1)*(lmax+2)/2) +c + real *8 gwwylm(*),grwylm(*) + +! complex*16 sumfi(0:iplcut,3) + complex*16 sumfi(0:lmax,3) + complex*16 dipint(-1:1,2) +c + complex*16 wylm + + parameter (sname='setup_vorpol') +c +c **************************************************************** +c For each sub-lattice calculates possible boundary planes used +c to define the Voronoi Polyhedron................................ +c **************************************************************** +c + if(iprint.ge.1) then + write(6,'(/,'' SETUP_VORPOL:: lmax ='',i5)') lmax + write(6,'( '' ngaussq='',i5)') ngaussq + write(6,'( '' ngaussr='',i5)') ngaussr + endif +c +c ================================================================ +c get possible VP boundary planes {vplane}........................ +c ---------------------------------------------------------------- + call setup_boundary(my_atom,num_atoms, + > atom_position_1, + > atom_position_2, + > atom_position_3, + > system_bravais(1,1), + > system_bravais(1,2), + > system_bravais(1,3), + > vplane,ipvp,nvplane,rad) +c ---------------------------------------------------------------- + if(iprint.ge.0) then + write(6,'(/,'' SETUP_VORPOL:: Boundary Planes'')') + write(6,'( 6x,i5,3f10.5)') + > (i,vplane(1,i),vplane(2,i),vplane(3,i),i=1,nvplane) + endif +c +c ================================================================ +c get trucation function {wylm}................................... +c +c ================================================================ +c loop over sub-lattices.......................................... +c ================================================================ +c calculate the edges and corners of VP candidate planes.......... +c ---------------------------------------------------------------- + call polyhedron(vplane,dp2,nvplane, + > corn,dc2,ipcorn,ncorn,indxc, + > edge,edgp,ipedge,nedge) +c ---------------------------------------------------------------- +c +c ================================================================ +c set muffin-tin radius to be inscribed sphere radius............. +c only if rmt <= 0 + if(rmt.le.0.d0) rmt=sqrt(dp2(1)) +c +c ================================================================ +c get points at which w(l,m) has discontinuous derivatives........ + if(iprint.ge.0) then + write(6,'(/,'' SETUP_VORPOL:: nbnd,ncorn,nedge:'',3i5)') + > nvplane,ncorn,nedge + endif +c ---------------------------------------------------------------- + call rcritpts(rcrit,ncrit, + > rmt*rmt,dc2(indxc(ncorn)), + > vplane,nvplane, + > dc2,ncorn, + > edgp,nedge, + > runion) + if(ncrit.gt.iprcrit) then + write(6,'(''iprcrit too small: iprcrit='',i4)') iprcrit + stop'rcrit' + endif +c ---------------------------------------------------------------- +c ================================================================ +c write list of critical points if needed......................... + if(iprint.ge.0) then + write(6,'('' SETUP_VORPOL:: number of critical r-points'', + > '' for w(r) ='',i5)') ncrit + write(6,'('' i='',i4,'' rcrit='',1pd16.10)') + > (i,rcrit(i),i=1,ncrit) + endif +c +c ================================================================ +c get the step function wylm on gaussin integration mesh.......... +c ---------------------------------------------------------------- + call volvor(rcrit,ncrit, + > lmax,clm, + > xgq,wgq,ngaussq,ngaussr, + > xp,vplane,nvplane, + > corn(1,3),dc2,indxc,ncorn, + > edge,edgp,nedge, + > tnode, + > grwylm,gwwylm,wylm,omegint,plm,sumfi) +c ---------------------------------------------------------------- + call inter_dip(lmax,ncrit,ngaussr,omegint, + > grwylm,gwwylm,wylm,dipint(-1,1),dipint(-1,2)) +c +c ================================================================ +c write out the calculated volumes................................ + if(iprint.ge.0) then + write(6,'( ''SETUP_VORPOL:Muffin-tin radius'',t40,''='', + > f14.8)') rmt +c set circumscribing sphere radius................................ + write(6,'( '' Bounding sphere radius'',t40,''='', + > f14.8)') sqrt(dc2(indxc(ncorn))) + write(6,'( '' Interstial region vol.'',t40,''='', + > f14.8)') omegint + endif +c ================================================================ + if(sname.eq.istop) then + call fstop(sname) + else + return + endif +c + end diff --git a/src/VORPOL/sigma.f b/src/VORPOL/sigma.f new file mode 100755 index 000000000..74673f74c --- /dev/null +++ b/src/VORPOL/sigma.f @@ -0,0 +1,30 @@ + function sigma(x0,y0,z0,xp,nbnd,mode) +c ================================================================ +c + implicit none +c + integer nbnd + integer sigma + integer mode + integer i +c + real*8 x0 + real*8 y0 + real*8 z0 + real*8 xp(3,nbnd) + real*8 tol +c + parameter (tol=1.0d-10) +c + do i=1,nbnd + if((x0-xp(1,i))*xp(1,i)+(y0-xp(2,i))*xp(2,i)+ + & (z0-xp(3,i))*xp(3,i) + & .gt.tol*mode) then + sigma=0 + return + end if + end do +c + sigma=1 + return + end diff --git a/src/VORPOL/sort.f b/src/VORPOL/sort.f new file mode 100755 index 000000000..2a84d5df3 --- /dev/null +++ b/src/VORPOL/sort.f @@ -0,0 +1,56 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine sort(n,ra) +c ================================================================ +c + implicit none +c + integer l + integer n + integer ir + integer i + integer j +c + real*8 ra(n) + real*8 rra +c +c **************************************************************** +c Sorting routine. +c Sorts an array ra of length n into ascending numerical order +c See: Numerical Recipes. page 231. +c **************************************************************** +c +c ================================================================ + l=n/2+1 + ir=n +10 continue + if(l.gt.1)then + l=l-1 + rra=ra(l) + else + rra=ra(ir) + ra(ir)=ra(1) + ir=ir-1 + if(ir.eq.1)then + ra(1)=rra + return + endif + endif + i=l + j=l+l +20 if(j.le.ir)then + if(j.lt.ir)then + if(ra(j).lt.ra(j+1))j=j+1 + endif + if(rra.lt.ra(j))then + ra(i)=ra(j) + i=j + j=j+j + else + j=ir+1 + endif + go to 20 + endif + ra(i)=rra + go to 10 + end diff --git a/src/VORPOL/sortidx.f b/src/VORPOL/sortidx.f new file mode 100755 index 000000000..aec44fdfe --- /dev/null +++ b/src/VORPOL/sortidx.f @@ -0,0 +1,66 @@ + subroutine sortidx(n,ra,idx) +c ================================================================ +c +c **************************************************************** +c Heapsorting routine. +c +c Sorts an array ra of length n into ascending numerical order using +c the Heapsort algorithm, while make the corresponding rearrangement +c of the array idx. +c **************************************************************** +c input: n integer scalar, number of elements in ra +c ra real*8 array of (n), array to be sorted (unchanged on return) +c returns: idx integer array of (n), ra(idx(i)) is the ith element of +c the sorted array +c + implicit none +c + integer n + integer idx(n) + integer i,j,l,ir,irb +c + real*8 ra(n) + real*8 rra +c +c ================================================================ +c + do i=1,n + idx(i)=i + end do +c + if(n.le.1) return + l=n/2+1 + ir=n +10 continue + if (l.gt.1)then + l=l-1 + irb=idx(l) + rra=ra(irb) + else + irb=idx(ir) + rra=ra(irb) + idx(ir)=idx(1) + ir=ir-1 + if (ir.eq.1)then + idx(1)=irb + return + end if + end if + i=l + j=l+l +20 if (j.le.ir)then + if (j.lt.ir)then + if (ra(idx(j)).lt.ra(idx(j+1)))j=j+1 + end if + if (rra.lt.ra(idx(j)))then + idx(i)=idx(j) + i=j + j=j+j + else + j=ir+1 + end if + go to 20 + end if + idx(i)=irb + go to 10 + end diff --git a/src/VORPOL/stepyll.f b/src/VORPOL/stepyll.f new file mode 100755 index 000000000..e238aaba5 --- /dev/null +++ b/src/VORPOL/stepyll.f @@ -0,0 +1,181 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine stepyll(r,rmt,wylm, + > lmax,clm, + > ngauss,xgq,wgq, + > xp,xpt,nbnd, + > rcs2, + > edge,edgp,nedge, + > np_index,rp_index,tnode,plm,sumfi) +c ================================================================ +c + implicit none +c + integer lmax + integer ngauss + integer nbnd + integer nedge + integer np_index(2) + integer ip + integer np + integer node + integer it + integer jl + integer l + integer sigma +c + real*8 r + real*8 xgq(ngauss) + real*8 wgq(ngauss) + real*8 xp(3,nbnd) + real*8 xpt(3,nbnd) + real*8 rmt + real*8 rcs2 + real*8 edge(3,nedge) + real*8 edgp(3,nedge) + real*8 rp_index(2) + real*8 tnode(nbnd+2*nedge+2) + real*8 clm((lmax+1)*(lmax+2)/2) + real*8 plm((lmax+1)*(lmax+2)/2) + real*8 pi + parameter (pi=3.141592653589793d0) + real*8 begth + real*8 endth + real*8 one + real*8 two,twopi + parameter (two=2.0d0) + parameter (twopi=two*pi) + real*8 zero + real*8 tol +c + complex*16 wylm((lmax+1)*(lmax+2)/2),sumfi(0:lmax,3) +c + parameter (one=1.0d0) + parameter (zero=0.0d0) + parameter (tol=1.0d-10) +c +c **************************************************************** +c this subroutine calculates the expansion coefficients , * +c _ * +c sigma (r), of stepfunction sigma(r) on complex spherical * +c l * +c m _ * +c harmonics Y (r) * +c l * +c * +c ___ * +c _ \ m _ * +c sigma( r ) = > sigma ( r ) * Y (r) * +c /__ l l * +c l,l' * +c * +c it calls calsig for calculating the expansion coefficients * +c of sigma ( r ) through complex spherical harmonics. * +c l * +c yang wang:: dept. of physics, FAU, Boca raton, FL 33431 * +c ver 2.1 written in Aug. 1992 * +c **************************************************************** +c +c ---------------------------------------------------------------- + call zeroout(wylm,(lmax+1)*(lmax+2)) +c ---------------------------------------------------------------- +c +c ================================================================ +c special case of r being inside the muffin-tin radius............ +c ================================================================ + if ( r .le. rmt ) then + wylm(1)=two*sqrt(pi) + return + endif +c +c ================================================================ +c special case of r being outside the poyhedron................... +c ================================================================ + if (r*r .ge. rcs2) then + return + end if +c +c ================================================================ +c case of r being greater than the muffin-tin radius.............. +c ---------------------------------------------------------------- + if(sigma(zero,zero,r,xpt,nbnd,1).eq.1) then + endth=+one + else + endth=two + endif +c ---------------------------------------------------------------- + if(sigma(zero,zero,-r,xpt,nbnd,1).eq.1) then + begth=-one + else + begth=-two + endif + ip=0 + do np=1,nbnd + if( (np_index(1).eq.np .and. r.lt.rp_index(1)) .or. + > (np_index(2).eq.np .and. r.lt.rp_index(2)) ) then + if (xpt(3,np).gt.zero .and. xpt(3,np).le.r) then + endth=xpt(3,np)/r + else if(xpt(3,np).lt.zero .and. -xpt(3,np).le.r) then + begth=xpt(3,np)/r + endif + else if((np_index(1).ne.np) .and. (np_index(2).ne.np)) then +c ========================================================== +c only store those boundaries planes not perpendicular to +c the z-axis. +c ========================================================== + ip=ip+1 + xp(1,ip)=xpt(1,np) + xp(2,ip)=xpt(2,np) + xp(3,ip)=xpt(3,np) + endif + enddo +c ---------------------------------------------------------------- + call caltnode(r,xpt,nbnd, + > edge,edgp,nedge, + > begth,endth, + > np_index,tnode,node) +c ---------------------------------------------------------------- +c + if(abs(tnode(1)+one) .le. tol) then +c ------------------------------------------------------------- + call intpl0(-one,tnode(2),lmax,plm) +c ------------------------------------------------------------- + do l=0,lmax + jl=(l+1)*(l+2)/2-l + wylm(jl)=wylm(jl)+twopi*plm(l+1) + enddo + do it=1,node-1 + tnode(it)=tnode(it+1) + enddo + node=node-1 + endif +c + if(abs(tnode(node)-one) .le. tol.and.node.gt.1) then +c ------------------------------------------------------------- + call intpl0(tnode(node-1),one,lmax,plm) +c ------------------------------------------------------------- + do l=0,lmax + jl=(l+1)*(l+2)/2-l + wylm(jl)=wylm(jl)+twopi*plm(l+1) + enddo + node=node-1 + endif +c +c ================================================================ +c it calls calsig to calculate sigma ( r ) , +c l,m +c which are the expansion coefficients of step function on the +c complex spherical harmonics. the data are stored in wylm(jl). +c ---------------------------------------------------------------- + call calsig(lmax,r,xp,ip, + > tnode,node,wgq,xgq,ngauss, + > wylm,plm,sumfi) +c ---------------------------------------------------------------- + do jl=1,(lmax+1)*(lmax+2)/2 + wylm(jl)=wylm(jl)*clm(jl) + enddo +c +c ================================================================ +c + return + end diff --git a/src/VORPOL/volvor.f b/src/VORPOL/volvor.f new file mode 100755 index 000000000..ccdbe93dd --- /dev/null +++ b/src/VORPOL/volvor.f @@ -0,0 +1,179 @@ +c +c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + subroutine volvor(rcrit,ncrit, + > lmax,clm, + > xgq,wgq,ngaussq,ngaussr, + > xp,xpt,nvplane, + > cornz,dc2,indxc,ncorn, + > edge,edgp,nedge, + > tnode, + > grwylm,gwwylm,wylm,omegint,plm,sumfi) +c ================================================================ +c + implicit none +c + integer lmax + integer ncrit + integer ngaussr + integer ngaussq + integer nvplane + integer ncorn + integer nedge + integer i,j,np,ng + integer np_index(2) + integer sigma +c + real*8 rcrit(ncrit) + real*8 clm((lmax+1)*(lmax+2)/2) + real*8 plm((lmax+1)*(lmax+2)/2) + real*8 xgq(ngaussq) + real*8 wgq(ngaussq) + real*8 xp(3,nvplane) + real*8 xpt(3,nvplane) + real*8 cornz(ncorn) + real*8 dc2(ncorn) + integer indxc(ncorn) + real*8 edge(3,nedge) + real*8 edgp(3,nedge) + real*8 rp_index(2) + real*8 tnode(nvplane+2*nedge+2) + real*8 rgauss + real*8 rgausq + real*8 omegint + real*8 tol + real*8 half + real*8 zero + real*8 one + real*8 pi,rfpi + parameter (pi=3.141592653589793d0) + real*8 grwylm(ngaussr,ncrit-1) + real*8 gwwylm(ngaussr,ncrit-1) +c + complex*16 wylm((lmax+1)*(lmax+2)/2,ngaussr,ncrit-1) + complex*16 sumfi(0:lmax,3) +c + parameter (tol=1.0d-10) + parameter (half=0.5d0) + parameter (zero=0.0d0) + parameter (one=1.0d0) +c + rfpi=sqrt(4.d0*pi) +c ================================================================ +c generate Gaussian-Quadrature points for theta integration....... +c ---------------------------------------------------------------- +! call gauleg(-one,one,xgq,wgq,ngaussq) + call gauss_legendre_points(-one,one,xgq,wgq,ngaussq) +c ---------------------------------------------------------------- +c if(iprint.ge.1) then +c write(6,'('' No. Gaussian pts. [cos(theta)]: '', +c > i3)') ngaussq +c write(6,'('' n='',i3,'' xgq='',f15.8, +c > '' wgq='',d16.8)') (n,xgq(n),wgq(n),n=1,ngaussq) +c endif +c +c ================================================================ +c generate gaussian pointsi and weights for "r" integration....... +c use the last column of grwylm and gwwylm to store xgr and wgr +c ---------------------------------------------------------------- +! call gauleg(-one,one,grwylm(1,ncrit-1),gwwylm(1,ncrit-1),ngaussr) + call gauss_legendre_points + & (-one,one,grwylm(1,ncrit-1),gwwylm(1,ncrit-1),ngaussr) +c ---------------------------------------------------------------- +c if(iprint.ge.1) then +c write(6,'('' No. Gaussian pts. [r]: '', +c > i3)') ngaussr +c write(6,'('' n='',i3,'' xgr='',f15.8, +c > '' wgr='',d16.8)') (n,grwylm(n,ncrit-1),gwwylm(n,ncrit-1), +c & n=1,ngaussr) +c endif + i=0 + np_index(1)=0 + np_index(2)=0 + rp_index(1)=zero + rp_index(2)=zero + do np=1,nvplane + if(abs(xpt(1,np)).le.tol .and. abs(xpt(2,np)).le.tol) then + i=i+1 + np_index(i)=np + if(sigma(zero,zero,xpt(3,np),xpt,nvplane,1).eq.1) + & then + do j=ncorn,1,-1 + if(abs(cornz(indxc(j))-xpt(3,np)).lt.tol) then + rp_index(i)=sqrt(dc2(indxc(j))) ! assuming dc2 is ordered. + endif + enddo + endif + endif + enddo +c +c ================================================================ +c loop over the regions between critical r-points................. +c ================================================================ +ccdir$l cncall + do i=2,ncrit +c ============================================================= +c loop over the gaussian mesh for current region............... +c ============================================================= + do ng=1,ngaussr + rgauss=half*(rcrit(i)-rcrit(i-1))*grwylm(ng,ncrit-1) + + > half*(rcrit(i)+rcrit(i-1)) + grwylm(ng,i-1)=rgauss + rgausq=rgauss*rgauss +c ========================================================== +c analytic forms for simple cubic........................... +c if(i.eq.1) then +c wstefa=rfpi +c endif +c if(i.eq.2) then +c wstefa=rfpi*(three/rgauss-two) +c endif +c if(i.eq.3) then +c rfac1=sqrt(rgausq-two) +c rfac2=sqrt(three*rgausq-six) +c rfac3=sqrt(two*rgausq-two) +c wstefa=(48.0d0/rfpi)* +c > ( (one/rgauss)*atan((one-rfac1)/(one+rfac1)) + +c > asin((rfac2-rgauss)/(two*rfac3)) ) +c endif +c +c ========================================================== +c calculate w(l,m) for current r-point...................... +c ---------------------------------------------------------- + call stepyll(rgauss,rcrit(1),wylm(1,ng,i-1), + > lmax,clm, + > ngaussq,xgq,wgq, + > xp,xpt,nvplane, + > dc2(indxc(ncorn)), + > edge,edgp,nedge, + > np_index,rp_index,tnode,plm,sumfi) +c ---------------------------------------------------------- +c ========================================================== +c calculate the gaussian weight............................. + gwwylm(ng,i-1)= half*(rcrit(i)-rcrit(i-1))* + & gwwylm(ng,ncrit-1)*rgausq + enddo + enddo +c +c ================================================================ +c calculate the cell volume by integrating wylm(l=0,m=0).......... +c ================================================================ + omegint=zero + do i=2,ncrit + do ng=1,ngaussr + omegint=omegint + rfpi* + > gwwylm(ng,i-1)*dble(wylm(1,ng,i-1)) + enddo + enddo +c +c do i=2,ncrit +c write(6,'(/,''VOLVOR::i,ng,gwwylm(ng),wylm(1,ng),wylm(2,ng)'', +c & i5)') i +c do ng=1,ngaussr +c write(6,'(i3,d12.5,1p4e15.6)') ng,gwwylm(ng,i-1), +c & wylm(1,ng,i-1),wylm(2,ng,i-1) +c enddo +c enddo +c ================================================================ +c + return + end